From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 8898 invoked by alias); 20 May 2003 21:56: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 8875 invoked by uid 71); 20 May 2003 21:56:01 -0000 Resent-Date: 20 May 2003 21:56:01 -0000 Resent-Message-ID: <20030520215601.8873.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, rfreund@uos.de Received: (qmail 5025 invoked by uid 48); 20 May 2003 21:54:33 -0000 Message-Id: <20030520215433.5024.qmail@sources.redhat.com> Date: Tue, 20 May 2003 21:56:00 -0000 From: rfreund@uos.de Reply-To: rfreund@uos.de To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: other/10890: internal compiler error: in merge_assigned_reloads, at reload1.c:6134 X-SW-Source: 2003-05/txt/msg02216.txt.bz2 List-Id: >Number: 10890 >Category: other >Synopsis: internal compiler error: in merge_assigned_reloads, at reload1.c:6134 >Confidential: no >Severity: critical >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Tue May 20 21:56:00 UTC 2003 >Closed-Date: >Last-Modified: >Originator: rfreund@uos.de >Release: 3.3 >Organization: >Environment: linux x86 >Description: note that I submitted this bug before, but forgot some information. the compiler stops with the following message (when trying to compile linux 2.4.21-rc2): sched.c: In function `schedule': sched.c:709: internal compiler error: in merge_assigned_reloads, at reload1.c:6134 some info about gcc: --enable-threads=posix --prefix=/usr --with-local-prefix=/usr/local --infodir=/usr/share/info --mandir=/usr/share/man --libdir=/usr/lib --enable-languages=c,c++,f77,objc,java,ada --disable-checking --enable-libgcj --with-gxx-include-dir=/usr/include/g++ --with-slibdir=/lib --with-system-zlib --enable-shared --enable-__cxa_atexit i486-suse-linux Thread model: posix gcc-Version 3.3 >How-To-Repeat: gcc -D__KERNEL__ -I/usr/src/linux-2.4.20/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common -fomit-frame-pointer -pipe -mpreferred-stack-boundary=2 -march=pentium3 -mcpu=pentium4 -nostdinc -iwithprefix include -DKBUILD_BASENAME=sched -fno-omit-frame-pointer -c -o sched.o sched.c >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="sched.i" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="sched.i" IyAxICJzY2hlZC5jIgojIDEgIjxidWlsdC1pbj4iCiMgMSAiPGNvbW1hbmQgbGluZT4iCiMgMSAi c2NoZWQuYyIKIyAyMiAic2NoZWQuYyIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVk ZS9saW51eC9jb25maWcuaCIgMQoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRl L2xpbnV4L2F1dG9jb25mLmgiIDEKIyA1ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9s aW51eC9jb25maWcuaCIgMgojIDIzICJzY2hlZC5jIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40 LjIwL2luY2x1ZGUvbGludXgvbW0uaCIgMQoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9p bmNsdWRlL2xpbnV4L3NjaGVkLmgiIDEKCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5j bHVkZS9hc20vcGFyYW0uaCIgMQojIDUgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xp bnV4L3NjaGVkLmgiIDIKCmV4dGVybiB1bnNpZ25lZCBsb25nIGV2ZW50OwoKCiMgMSAiL3Vzci9z cmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvYmluZm10cy5oIiAxCgoKCiMgMSAiL3Vzci9z cmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvcHRyYWNlLmgiIDEKIyAyNCAiL3Vzci9zcmMv bGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvcHRyYWNlLmgiCiMgMSAiL3Vzci9zcmMvbGludXgt Mi40LjIwL2luY2x1ZGUvYXNtL3B0cmFjZS5oIiAxCiMgMjYgIi91c3Ivc3JjL2xpbnV4LTIuNC4y MC9pbmNsdWRlL2FzbS9wdHJhY2UuaCIKc3RydWN0IHB0X3JlZ3MgewogICAgICAgIGxvbmcgZWJ4 OwogICAgICAgIGxvbmcgZWN4OwogICAgICAgIGxvbmcgZWR4OwogICAgICAgIGxvbmcgZXNpOwog ICAgICAgIGxvbmcgZWRpOwogICAgICAgIGxvbmcgZWJwOwogICAgICAgIGxvbmcgZWF4OwogICAg ICAgIGludCB4ZHM7CiAgICAgICAgaW50IHhlczsKICAgICAgICBsb25nIG9yaWdfZWF4OwogICAg ICAgIGxvbmcgZWlwOwogICAgICAgIGludCB4Y3M7CiAgICAgICAgbG9uZyBlZmxhZ3M7CiAgICAg ICAgbG9uZyBlc3A7CiAgICAgICAgaW50IHhzczsKfTsKIyA2MCAiL3Vzci9zcmMvbGludXgtMi40 LjIwL2luY2x1ZGUvYXNtL3B0cmFjZS5oIgpleHRlcm4gdm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0 X3JlZ3MgKik7CiMgMjUgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L3B0cmFj ZS5oIiAyCiMgNSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvYmluZm10cy5o IiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvY2FwYWJpbGl0eS5o IiAxCiMgMTYgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L2NhcGFiaWxpdHku aCIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC90eXBlcy5oIiAxCiMg MTUgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L3R5cGVzLmgiCiMgMSAiL3Vz ci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvcG9zaXhfdHlwZXMuaCIgMQoKCgojIDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L3N0ZGRlZi5oIiAxCiMgNSAiL3Vz ci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvcG9zaXhfdHlwZXMuaCIgMgojIDM2ICIv dXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9wb3NpeF90eXBlcy5oIgp0eXBlZGVm IHN0cnVjdCB7CiAgICAgICAgdW5zaWduZWQgbG9uZyBmZHNfYml0cyBbKDEwMjQvKDggKiBzaXpl b2YodW5zaWduZWQgbG9uZykpKV07Cn0gX19rZXJuZWxfZmRfc2V0OwoKCnR5cGVkZWYgdm9pZCAo Kl9fa2VybmVsX3NpZ2hhbmRsZXJfdCkoaW50KTsKCgp0eXBlZGVmIGludCBfX2tlcm5lbF9rZXlf dDsKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvYXNtL3Bvc2l4X3R5cGVzLmgi IDEKIyAxMCAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvYXNtL3Bvc2l4X3R5cGVzLmgi CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX19rZXJuZWxfZGV2X3Q7CnR5cGVkZWYgdW5zaWduZWQg bG9uZyBfX2tlcm5lbF9pbm9fdDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX2tlcm5lbF9tb2Rl X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX19rZXJuZWxfbmxpbmtfdDsKdHlwZWRlZiBsb25n IF9fa2VybmVsX29mZl90Owp0eXBlZGVmIGludCBfX2tlcm5lbF9waWRfdDsKdHlwZWRlZiB1bnNp Z25lZCBzaG9ydCBfX2tlcm5lbF9pcGNfcGlkX3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX19r ZXJuZWxfdWlkX3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX19rZXJuZWxfZ2lkX3Q7CnR5cGVk ZWYgdW5zaWduZWQgaW50IF9fa2VybmVsX3NpemVfdDsKdHlwZWRlZiBpbnQgX19rZXJuZWxfc3Np emVfdDsKdHlwZWRlZiBpbnQgX19rZXJuZWxfcHRyZGlmZl90Owp0eXBlZGVmIGxvbmcgX19rZXJu ZWxfdGltZV90Owp0eXBlZGVmIGxvbmcgX19rZXJuZWxfc3VzZWNvbmRzX3Q7CnR5cGVkZWYgbG9u ZyBfX2tlcm5lbF9jbG9ja190Owp0eXBlZGVmIGludCBfX2tlcm5lbF9kYWRkcl90Owp0eXBlZGVm IGNoYXIgKiBfX2tlcm5lbF9jYWRkcl90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fa2VybmVs X3VpZDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX19rZXJuZWxfZ2lkMTZfdDsKdHlwZWRl ZiB1bnNpZ25lZCBpbnQgX19rZXJuZWxfdWlkMzJfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19r ZXJuZWxfZ2lkMzJfdDsKCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX19rZXJuZWxfb2xkX3VpZF90 Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fa2VybmVsX29sZF9naWRfdDsKCgp0eXBlZGVmIGxv bmcgbG9uZyBfX2tlcm5lbF9sb2ZmX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgewoKICAgICAgICBpbnQg dmFsWzJdOwoKCgp9IF9fa2VybmVsX2ZzaWRfdDsKIyA0NyAiL3Vzci9zcmMvbGludXgtMi40LjIw L2luY2x1ZGUvbGludXgvcG9zaXhfdHlwZXMuaCIgMgojIDE2ICIvdXNyL3NyYy9saW51eC0yLjQu MjAvaW5jbHVkZS9saW51eC90eXBlcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2lu Y2x1ZGUvYXNtL3R5cGVzLmgiIDEKCgoKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1bW9kZV90OwoK CgoKCgp0eXBlZGVmIF9fc2lnbmVkX18gY2hhciBfX3M4Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIg X191ODsKCnR5cGVkZWYgX19zaWduZWRfXyBzaG9ydCBfX3MxNjsKdHlwZWRlZiB1bnNpZ25lZCBz aG9ydCBfX3UxNjsKCnR5cGVkZWYgX19zaWduZWRfXyBpbnQgX19zMzI7CnR5cGVkZWYgdW5zaWdu ZWQgaW50IF9fdTMyOwoKCnR5cGVkZWYgX19zaWduZWRfXyBsb25nIGxvbmcgX19zNjQ7CnR5cGVk ZWYgdW5zaWduZWQgbG9uZyBsb25nIF9fdTY0OwojIDMyICIvdXNyL3NyYy9saW51eC0yLjQuMjAv aW5jbHVkZS9hc20vdHlwZXMuaCIKdHlwZWRlZiBzaWduZWQgY2hhciBzODsKdHlwZWRlZiB1bnNp Z25lZCBjaGFyIHU4OwoKdHlwZWRlZiBzaWduZWQgc2hvcnQgczE2Owp0eXBlZGVmIHVuc2lnbmVk IHNob3J0IHUxNjsKCnR5cGVkZWYgc2lnbmVkIGludCBzMzI7CnR5cGVkZWYgdW5zaWduZWQgaW50 IHUzMjsKCnR5cGVkZWYgc2lnbmVkIGxvbmcgbG9uZyBzNjQ7CnR5cGVkZWYgdW5zaWduZWQgbG9u ZyBsb25nIHU2NDsKIyA1MSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvYXNtL3R5cGVz LmgiCnR5cGVkZWYgdTMyIGRtYV9hZGRyX3Q7Cgp0eXBlZGVmIHU2NCBkbWE2NF9hZGRyX3Q7CiMg MTcgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L3R5cGVzLmgiIDIKCgoKdHlw ZWRlZiBfX2tlcm5lbF9mZF9zZXQgZmRfc2V0Owp0eXBlZGVmIF9fa2VybmVsX2Rldl90IGRldl90 Owp0eXBlZGVmIF9fa2VybmVsX2lub190IGlub190Owp0eXBlZGVmIF9fa2VybmVsX21vZGVfdCBt b2RlX3Q7CnR5cGVkZWYgX19rZXJuZWxfbmxpbmtfdCBubGlua190Owp0eXBlZGVmIF9fa2VybmVs X29mZl90IG9mZl90Owp0eXBlZGVmIF9fa2VybmVsX3BpZF90IHBpZF90Owp0eXBlZGVmIF9fa2Vy bmVsX2RhZGRyX3QgZGFkZHJfdDsKdHlwZWRlZiBfX2tlcm5lbF9rZXlfdCBrZXlfdDsKdHlwZWRl ZiBfX2tlcm5lbF9zdXNlY29uZHNfdCBzdXNlY29uZHNfdDsKCgp0eXBlZGVmIF9fa2VybmVsX3Vp ZDMyX3QgdWlkX3Q7CnR5cGVkZWYgX19rZXJuZWxfZ2lkMzJfdCBnaWRfdDsKdHlwZWRlZiBfX2tl cm5lbF91aWQxNl90IHVpZDE2X3Q7CnR5cGVkZWYgX19rZXJuZWxfZ2lkMTZfdCBnaWQxNl90OwoK Cgp0eXBlZGVmIF9fa2VybmVsX29sZF91aWRfdCBvbGRfdWlkX3Q7CnR5cGVkZWYgX19rZXJuZWxf b2xkX2dpZF90IG9sZF9naWRfdDsKIyA1MiAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUv bGludXgvdHlwZXMuaCIKdHlwZWRlZiBfX2tlcm5lbF9sb2ZmX3QgbG9mZl90OwojIDYxICIvdXNy L3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC90eXBlcy5oIgp0eXBlZGVmIF9fa2VybmVs X3NpemVfdCBzaXplX3Q7CgoKCgp0eXBlZGVmIF9fa2VybmVsX3NzaXplX3Qgc3NpemVfdDsKCgoK CnR5cGVkZWYgX19rZXJuZWxfcHRyZGlmZl90IHB0cmRpZmZfdDsKCgoKCnR5cGVkZWYgX19rZXJu ZWxfdGltZV90IHRpbWVfdDsKCgoKCnR5cGVkZWYgX19rZXJuZWxfY2xvY2tfdCBjbG9ja190OwoK CgoKdHlwZWRlZiBfX2tlcm5lbF9jYWRkcl90IGNhZGRyX3Q7CgoKCnR5cGVkZWYgdW5zaWduZWQg Y2hhciB1X2NoYXI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdV9zaG9ydDsKdHlwZWRlZiB1bnNp Z25lZCBpbnQgdV9pbnQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyB1X2xvbmc7CgoKdHlwZWRlZiB1 bnNpZ25lZCBjaGFyIHVuY2hhcjsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1c2hvcnQ7CnR5cGVk ZWYgdW5zaWduZWQgaW50IHVpbnQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyB1bG9uZzsKCgoKCnR5 cGVkZWYgX191OCB1X2ludDhfdDsKdHlwZWRlZiBfX3M4IGludDhfdDsKdHlwZWRlZiBfX3UxNiB1 X2ludDE2X3Q7CnR5cGVkZWYgX19zMTYgaW50MTZfdDsKdHlwZWRlZiBfX3UzMiB1X2ludDMyX3Q7 CnR5cGVkZWYgX19zMzIgaW50MzJfdDsKCgoKdHlwZWRlZiBfX3U4IHVpbnQ4X3Q7CnR5cGVkZWYg X191MTYgdWludDE2X3Q7CnR5cGVkZWYgX191MzIgdWludDMyX3Q7CgoKdHlwZWRlZiBfX3U2NCB1 aW50NjRfdDsKdHlwZWRlZiBfX3U2NCB1X2ludDY0X3Q7CnR5cGVkZWYgX19zNjQgaW50NjRfdDsK IyAxMzAgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L3R5cGVzLmgiCnN0cnVj dCB1c3RhdCB7CiAgICAgICAgX19rZXJuZWxfZGFkZHJfdCBmX3RmcmVlOwogICAgICAgIF9fa2Vy bmVsX2lub190IGZfdGlub2RlOwogICAgICAgIGNoYXIgZl9mbmFtZVs2XTsKICAgICAgICBjaGFy IGZfZnBhY2tbNl07Cn07CiMgMTcgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4 L2NhcGFiaWxpdHkuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4 L2ZzLmgiIDEKIyAxMCAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvZnMuaCIK IyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9saW5rYWdlLmgiIDEKIyAx MSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Iv c3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L2xpbWl0cy5oIiAxCiMgMTIgIi91c3Ivc3Jj L2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0y LjQuMjAvaW5jbHVkZS9saW51eC93YWl0LmgiIDEKIyAxMyAiL3Vzci9zcmMvbGludXgtMi40LjIw L2luY2x1ZGUvbGludXgvd2FpdC5oIgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRl L2xpbnV4L2tlcm5lbC5oIiAxCiMgMTAgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xp bnV4L2tlcm5lbC5oIgojIDEgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzMuMy9p bmNsdWRlL3N0ZGFyZy5oIiAxIDMgNAojIDQzICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1s aW51eC8zLjMvaW5jbHVkZS9zdGRhcmcuaCIgMyA0CnR5cGVkZWYgX19idWlsdGluX3ZhX2xpc3Qg X19nbnVjX3ZhX2xpc3Q7CiMgMTA1ICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8z LjMvaW5jbHVkZS9zdGRhcmcuaCIgMyA0CnR5cGVkZWYgX19nbnVjX3ZhX2xpc3QgdmFfbGlzdDsK IyAxMSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgva2VybmVsLmgiIDIKCgoK IyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9jb21waWxlci5oIiAxCiMg MTUgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oIiAyCiMgMSAi L3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvYXNtL2J5dGVvcmRlci5oIiAxCiMgMTMgIi91 c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS9ieXRlb3JkZXIuaCIKc3RhdGljIF9faW5s aW5lX18gX19jb25zdF9fIF9fdTMyIF9fX2FyY2hfX3N3YWIzMihfX3UzMiB4KQp7CgogICAgICAg IF9fYXNtX18oImJzd2FwICUwIiA6ICI9ciIgKHgpIDogIjAiICh4KSk7CgoKCgoKCgogICAgICAg IHJldHVybiB4Owp9CgoKCnN0YXRpYyBfX2lubGluZV9fIF9fY29uc3RfXyBfX3UxNiBfX19hcmNo X19zd2FiMTYoX191MTYgeCkKewogICAgICAgIF9fYXNtX18oInhjaGdiICViMCwlaDAiCiAgICAg ICAgICAgICAgICA6ICI9cSIgKHgpCiAgICAgICAgICAgICAgICA6ICIwIiAoeCkpOwogICAgICAg ICAgICAgICAgcmV0dXJuIHg7Cn0KCgpzdGF0aWMgaW5saW5lIF9fdTY0IF9fX2FyY2hfX3N3YWI2 NChfX3U2NCB2YWwpCnsKICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgeyBf X3UzMiBhLGI7IH0gczsKICAgICAgICAgICAgICAgIF9fdTY0IHU7CiAgICAgICAgfSB2OwogICAg ICAgIHYudSA9IHZhbDsKCiAgICAgICAgYXNtKCJic3dhcGwgJTAgOyBic3dhcGwgJTEgOyB4Y2hn bCAlMCwlMSIKICAgICAgICAgICAgOiAiPXIiICh2LnMuYSksICI9ciIgKHYucy5iKQogICAgICAg ICAgICA6ICIwIiAodi5zLmEpLCAiMSIgKHYucy5iKSk7CgoKCgoKICAgICAgICByZXR1cm4gdi51 Owp9CiMgNjUgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS9ieXRlb3JkZXIuaCIK IyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvbGl0dGxl X2VuZGlhbi5oIiAxCiMgMTEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L2J5 dGVvcmRlci9saXR0bGVfZW5kaWFuLmgiCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1 ZGUvbGludXgvYnl0ZW9yZGVyL3N3YWIuaCIgMQojIDE1OSAiL3Vzci9zcmMvbGludXgtMi40LjIw L2luY2x1ZGUvbGludXgvYnl0ZW9yZGVyL3N3YWIuaCIKc3RhdGljIF9faW5saW5lX18gX19jb25z dF9fIF9fdTE2IF9fZnN3YWIxNihfX3UxNiB4KQp7CiAgICAgICAgcmV0dXJuIF9fX2FyY2hfX3N3 YWIxNih4KTsKfQpzdGF0aWMgX19pbmxpbmVfXyBfX3UxNiBfX3N3YWIxNnAoX191MTYgKngpCnsK ICAgICAgICByZXR1cm4gX19fYXJjaF9fc3dhYjE2KCooeCkpOwp9CnN0YXRpYyBfX2lubGluZV9f IHZvaWQgX19zd2FiMTZzKF9fdTE2ICphZGRyKQp7CiAgICAgICAgZG8geyAqKGFkZHIpID0gX19f YXJjaF9fc3dhYjE2KCooKGFkZHIpKSk7IH0gd2hpbGUgKDApOwp9CgpzdGF0aWMgX19pbmxpbmVf XyBfX2NvbnN0X18gX191MzIgX19mc3dhYjI0KF9fdTMyIHgpCnsKICAgICAgICByZXR1cm4gKHsg X191MzIgX190bXAgPSAoeCkgOyAoeyBfX3UzMiBfX3ggPSAoX190bXApOyAoKF9fdTMyKSggKChf X3ggJiAoX191MzIpMHgwMDAwMDBmZlVMKSA8PCAxNikgfCAoX194ICYgKF9fdTMyKTB4MDAwMGZm MDBVTCkgfCAoKF9feCAmIChfX3UzMikweDAwZmYwMDAwVUwpID4+IDE2KSApKTsgfSk7IH0pOwp9 CnN0YXRpYyBfX2lubGluZV9fIF9fdTMyIF9fc3dhYjI0cChfX3UzMiAqeCkKewogICAgICAgIHJl dHVybiAoeyBfX3UzMiBfX3RtcCA9ICgqKHgpKSA7ICh7IF9fdTMyIF9feCA9IChfX3RtcCk7ICgo X191MzIpKCAoKF9feCAmIChfX3UzMikweDAwMDAwMGZmVUwpIDw8IDE2KSB8IChfX3ggJiAoX191 MzIpMHgwMDAwZmYwMFVMKSB8ICgoX194ICYgKF9fdTMyKTB4MDBmZjAwMDBVTCkgPj4gMTYpICkp OyB9KTsgfSk7Cn0Kc3RhdGljIF9faW5saW5lX18gdm9pZCBfX3N3YWIyNHMoX191MzIgKmFkZHIp CnsKICAgICAgICBkbyB7ICooYWRkcikgPSAoeyBfX3UzMiBfX3RtcCA9ICgqKChhZGRyKSkpIDsg KHsgX191MzIgX194ID0gKF9fdG1wKTsgKChfX3UzMikoICgoX194ICYgKF9fdTMyKTB4MDAwMDAw ZmZVTCkgPDwgMTYpIHwgKF9feCAmIChfX3UzMikweDAwMDBmZjAwVUwpIHwgKChfX3ggJiAoX191 MzIpMHgwMGZmMDAwMFVMKSA+PiAxNikgKSk7IH0pOyB9KTsgfSB3aGlsZSAoMCk7Cn0KCnN0YXRp YyBfX2lubGluZV9fIF9fY29uc3RfXyBfX3UzMiBfX2Zzd2FiMzIoX191MzIgeCkKewogICAgICAg IHJldHVybiBfX19hcmNoX19zd2FiMzIoeCk7Cn0Kc3RhdGljIF9faW5saW5lX18gX191MzIgX19z d2FiMzJwKF9fdTMyICp4KQp7CiAgICAgICAgcmV0dXJuIF9fX2FyY2hfX3N3YWIzMigqKHgpKTsK fQpzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fc3dhYjMycyhfX3UzMiAqYWRkcikKewogICAgICAg IGRvIHsgKihhZGRyKSA9IF9fX2FyY2hfX3N3YWIzMigqKChhZGRyKSkpOyB9IHdoaWxlICgwKTsK fQoKCnN0YXRpYyBfX2lubGluZV9fIF9fY29uc3RfXyBfX3U2NCBfX2Zzd2FiNjQoX191NjQgeCkK ewoKCgoKCiAgICAgICAgcmV0dXJuIF9fX2FyY2hfX3N3YWI2NCh4KTsKCn0Kc3RhdGljIF9faW5s aW5lX18gX191NjQgX19zd2FiNjRwKF9fdTY0ICp4KQp7CiAgICAgICAgcmV0dXJuIF9fX2FyY2hf X3N3YWI2NCgqKHgpKTsKfQpzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fc3dhYjY0cyhfX3U2NCAq YWRkcikKewogICAgICAgIGRvIHsgKihhZGRyKSA9IF9fX2FyY2hfX3N3YWI2NCgqKChhZGRyKSkp OyB9IHdoaWxlICgwKTsKfQojIDEyICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51 eC9ieXRlb3JkZXIvbGl0dGxlX2VuZGlhbi5oIiAyCiMgODIgIi91c3Ivc3JjL2xpbnV4LTIuNC4y MC9pbmNsdWRlL2xpbnV4L2J5dGVvcmRlci9saXR0bGVfZW5kaWFuLmgiCiMgMSAiL3Vzci9zcmMv bGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvYnl0ZW9yZGVyL2dlbmVyaWMuaCIgMQojIDE1MCAi L3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvYnl0ZW9yZGVyL2dlbmVyaWMuaCIK ZXh0ZXJuIF9fdTMyIG50b2hsKF9fdTMyKTsKZXh0ZXJuIF9fdTMyIGh0b25sKF9fdTMyKTsKCgoK CmV4dGVybiB1bnNpZ25lZCBzaG9ydCBpbnQgbnRvaHModW5zaWduZWQgc2hvcnQgaW50KTsKZXh0 ZXJuIHVuc2lnbmVkIHNob3J0IGludCBodG9ucyh1bnNpZ25lZCBzaG9ydCBpbnQpOwojIDgzICIv dXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvbGl0dGxlX2VuZGlh bi5oIiAyCiMgNjYgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS9ieXRlb3JkZXIu aCIgMgojIDE2ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9rZXJuZWwuaCIg MgojIDQxICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9rZXJuZWwuaCIKZXh0 ZXJuIGludCBjb25zb2xlX3ByaW50a1tdOwojIDU4ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5j bHVkZS9saW51eC9rZXJuZWwuaCIKc3RydWN0IGNvbXBsZXRpb247CgpleHRlcm4gc3RydWN0IG5v dGlmaWVyX2Jsb2NrICpwYW5pY19ub3RpZmllcl9saXN0Owogdm9pZCBwYW5pYyhjb25zdCBjaGFy ICogZm10LCAuLi4pCiAgICAgICAgX19hdHRyaWJ1dGVfXyAoKG5vcmV0dXJuLCBmb3JtYXQgKHBy aW50ZiwgMSwgMikpKTsKIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMCkpKSB2b2lkIGRvX2V4aXQo bG9uZyBlcnJvcl9jb2RlKQogICAgICAgIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSk7CiB2b2lk IGNvbXBsZXRlX2FuZF9leGl0KHN0cnVjdCBjb21wbGV0aW9uICosIGxvbmcpCiAgICAgICAgX19h dHRyaWJ1dGVfXygobm9yZXR1cm4pKTsKZXh0ZXJuIGludCBhYnMoaW50KTsKZXh0ZXJuIHVuc2ln bmVkIGxvbmcgc2ltcGxlX3N0cnRvdWwoY29uc3QgY2hhciAqLGNoYXIgKiosdW5zaWduZWQgaW50 KTsKZXh0ZXJuIGxvbmcgc2ltcGxlX3N0cnRvbChjb25zdCBjaGFyICosY2hhciAqKix1bnNpZ25l ZCBpbnQpOwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIHNpbXBsZV9zdHJ0b3VsbChjb25zdCBj aGFyICosY2hhciAqKix1bnNpZ25lZCBpbnQpOwpleHRlcm4gbG9uZyBsb25nIHNpbXBsZV9zdHJ0 b2xsKGNvbnN0IGNoYXIgKixjaGFyICoqLHVuc2lnbmVkIGludCk7CmV4dGVybiBpbnQgc3ByaW50 ZihjaGFyICogYnVmLCBjb25zdCBjaGFyICogZm10LCAuLi4pCiAgICAgICAgX19hdHRyaWJ1dGVf XyAoKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpOwpleHRlcm4gaW50IHZzcHJpbnRmKGNoYXIgKmJ1 ZiwgY29uc3QgY2hhciAqLCB2YV9saXN0KTsKZXh0ZXJuIGludCBzbnByaW50ZihjaGFyICogYnVm LCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqIGZtdCwgLi4uKQogICAgICAgIF9fYXR0cmlidXRl X18gKChmb3JtYXQgKHByaW50ZiwgMywgNCkpKTsKZXh0ZXJuIGludCB2c25wcmludGYoY2hhciAq YnVmLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpOwoKZXh0ZXJu IGludCBzc2NhbmYoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIC4uLikKICAgICAgICBfX2F0 dHJpYnV0ZV9fICgoZm9ybWF0IChzY2FuZiwyLDMpKSk7CmV4dGVybiBpbnQgdnNzY2FuZihjb25z dCBjaGFyICosIGNvbnN0IGNoYXIgKiwgdmFfbGlzdCk7CgpleHRlcm4gaW50IGdldF9vcHRpb24o Y2hhciAqKnN0ciwgaW50ICpwaW50KTsKZXh0ZXJuIGNoYXIgKmdldF9vcHRpb25zKGNoYXIgKnN0 ciwgaW50IG5pbnRzLCBpbnQgKmludHMpOwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIG1lbXBh cnNlKGNoYXIgKnB0ciwgY2hhciAqKnJldHB0cik7CmV4dGVybiB2b2lkIGRldl9wcm9iZV9sb2Nr KHZvaWQpOwpleHRlcm4gdm9pZCBkZXZfcHJvYmVfdW5sb2NrKHZvaWQpOwoKZXh0ZXJuIGludCBz ZXNzaW9uX29mX3BncnAoaW50IHBncnApOwoKIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMCkpKSBp bnQgcHJpbnRrKGNvbnN0IGNoYXIgKiBmbXQsIC4uLikKICAgICAgICBfX2F0dHJpYnV0ZV9fICgo Zm9ybWF0IChwcmludGYsIDEsIDIpKSk7CgpzdGF0aWMgaW5saW5lIHZvaWQgY29uc29sZV9zaWxl bnQodm9pZCkKewogICAgICAgIChjb25zb2xlX3ByaW50a1swXSkgPSAwOwp9CgpzdGF0aWMgaW5s aW5lIHZvaWQgY29uc29sZV92ZXJib3NlKHZvaWQpCnsKICAgICAgICBpZiAoKGNvbnNvbGVfcHJp bnRrWzBdKSkKICAgICAgICAgICAgICAgIChjb25zb2xlX3ByaW50a1swXSkgPSAxNTsKfQoKZXh0 ZXJuIHZvaWQgYnVzdF9zcGlubG9ja3MoaW50IHllcyk7CmV4dGVybiBpbnQgb29wc19pbl9wcm9n cmVzczsKCmV4dGVybiBpbnQgdGFpbnRlZDsKZXh0ZXJuIGNvbnN0IGNoYXIgKnByaW50X3RhaW50 ZWQodm9pZCk7CgpleHRlcm4gdm9pZCBkdW1wX3N0YWNrKHZvaWQpOwojIDE3NCAiL3Vzci9zcmMv bGludXgtMi40LjIwL2luY2x1ZGUvbGludXgva2VybmVsLmgiCmV4dGVybiB2b2lkIF9fb3V0X29m X2xpbmVfYnVnKGludCBsaW5lKSBfX2F0dHJpYnV0ZV9fKChub3JldHVybikpOwoKCgoKCnN0cnVj dCBzeXNpbmZvIHsKICAgICAgICBsb25nIHVwdGltZTsKICAgICAgICB1bnNpZ25lZCBsb25nIGxv YWRzWzNdOwogICAgICAgIHVuc2lnbmVkIGxvbmcgdG90YWxyYW07CiAgICAgICAgdW5zaWduZWQg bG9uZyBmcmVlcmFtOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc2hhcmVkcmFtOwogICAgICAgIHVu c2lnbmVkIGxvbmcgYnVmZmVycmFtOwogICAgICAgIHVuc2lnbmVkIGxvbmcgdG90YWxzd2FwOwog ICAgICAgIHVuc2lnbmVkIGxvbmcgZnJlZXN3YXA7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgcHJv Y3M7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgcGFkOwogICAgICAgIHVuc2lnbmVkIGxvbmcgdG90 YWxoaWdoOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZnJlZWhpZ2g7CiAgICAgICAgdW5zaWduZWQg aW50IG1lbV91bml0OwogICAgICAgIGNoYXIgX2ZbMjAtMipzaXplb2YobG9uZyktc2l6ZW9mKGlu dCldOwp9OwojIDE0ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC93YWl0Lmgi IDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9saXN0LmgiIDEKCgoK CgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L3ByZWZldGNoLmgiIDEK IyAxMyAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvcHJlZmV0Y2guaCIKIyAx ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgiIDEKIyAxMCAi L3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIgojIDEgIi91c3Iv c3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS92bTg2LmgiIDEKIyA2OCAiL3Vzci9zcmMvbGlu dXgtMi40LjIwL2luY2x1ZGUvYXNtL3ZtODYuaCIKc3RydWN0IHZtODZfcmVncyB7CgoKCiAgICAg ICAgbG9uZyBlYng7CiAgICAgICAgbG9uZyBlY3g7CiAgICAgICAgbG9uZyBlZHg7CiAgICAgICAg bG9uZyBlc2k7CiAgICAgICAgbG9uZyBlZGk7CiAgICAgICAgbG9uZyBlYnA7CiAgICAgICAgbG9u ZyBlYXg7CiAgICAgICAgbG9uZyBfX251bGxfZHM7CiAgICAgICAgbG9uZyBfX251bGxfZXM7CiAg ICAgICAgbG9uZyBfX251bGxfZnM7CiAgICAgICAgbG9uZyBfX251bGxfZ3M7CiAgICAgICAgbG9u ZyBvcmlnX2VheDsKICAgICAgICBsb25nIGVpcDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBjcywg X19jc2g7CiAgICAgICAgbG9uZyBlZmxhZ3M7CiAgICAgICAgbG9uZyBlc3A7CiAgICAgICAgdW5z aWduZWQgc2hvcnQgc3MsIF9fc3NoOwoKCgogICAgICAgIHVuc2lnbmVkIHNob3J0IGVzLCBfX2Vz aDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBkcywgX19kc2g7CiAgICAgICAgdW5zaWduZWQgc2hv cnQgZnMsIF9fZnNoOwogICAgICAgIHVuc2lnbmVkIHNob3J0IGdzLCBfX2dzaDsKfTsKCnN0cnVj dCByZXZlY3RvcmVkX3N0cnVjdCB7CiAgICAgICAgdW5zaWduZWQgbG9uZyBfX21hcFs4XTsKfTsK CnN0cnVjdCB2bTg2X3N0cnVjdCB7CiAgICAgICAgc3RydWN0IHZtODZfcmVncyByZWdzOwogICAg ICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzY3JlZW5fYml0 bWFwOwogICAgICAgIHVuc2lnbmVkIGxvbmcgY3B1X3R5cGU7CiAgICAgICAgc3RydWN0IHJldmVj dG9yZWRfc3RydWN0IGludF9yZXZlY3RvcmVkOwogICAgICAgIHN0cnVjdCByZXZlY3RvcmVkX3N0 cnVjdCBpbnQyMV9yZXZlY3RvcmVkOwp9OwoKCgoKCgpzdHJ1Y3Qgdm04NnBsdXNfaW5mb19zdHJ1 Y3QgewogICAgICAgIHVuc2lnbmVkIGxvbmcgZm9yY2VfcmV0dXJuX2Zvcl9waWM6MTsKICAgICAg ICB1bnNpZ25lZCBsb25nIHZtODZkYmdfYWN0aXZlOjE7CiAgICAgICAgdW5zaWduZWQgbG9uZyB2 bTg2ZGJnX1RGcGVuZGlnOjE7CiAgICAgICAgdW5zaWduZWQgbG9uZyB1bnVzZWQ6Mjg7CiAgICAg ICAgdW5zaWduZWQgbG9uZyBpc192bTg2cHVzOjE7CiAgICAgICAgdW5zaWduZWQgY2hhciB2bTg2 ZGJnX2ludHh4dGFiWzMyXTsKfTsKCnN0cnVjdCB2bTg2cGx1c19zdHJ1Y3QgewogICAgICAgIHN0 cnVjdCB2bTg2X3JlZ3MgcmVnczsKICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogICAgICAg IHVuc2lnbmVkIGxvbmcgc2NyZWVuX2JpdG1hcDsKICAgICAgICB1bnNpZ25lZCBsb25nIGNwdV90 eXBlOwogICAgICAgIHN0cnVjdCByZXZlY3RvcmVkX3N0cnVjdCBpbnRfcmV2ZWN0b3JlZDsKICAg ICAgICBzdHJ1Y3QgcmV2ZWN0b3JlZF9zdHJ1Y3QgaW50MjFfcmV2ZWN0b3JlZDsKICAgICAgICBz dHJ1Y3Qgdm04NnBsdXNfaW5mb19zdHJ1Y3Qgdm04NnBsdXM7Cn07CiMgMTQ1ICIvdXNyL3NyYy9s aW51eC0yLjQuMjAvaW5jbHVkZS9hc20vdm04Ni5oIgpzdHJ1Y3Qga2VybmVsX3ZtODZfcmVncyB7 CgoKCiAgICAgICAgbG9uZyBlYng7CiAgICAgICAgbG9uZyBlY3g7CiAgICAgICAgbG9uZyBlZHg7 CiAgICAgICAgbG9uZyBlc2k7CiAgICAgICAgbG9uZyBlZGk7CiAgICAgICAgbG9uZyBlYnA7CiAg ICAgICAgbG9uZyBlYXg7CiAgICAgICAgbG9uZyBfX251bGxfZHM7CiAgICAgICAgbG9uZyBfX251 bGxfZXM7CiAgICAgICAgbG9uZyBvcmlnX2VheDsKICAgICAgICBsb25nIGVpcDsKICAgICAgICB1 bnNpZ25lZCBzaG9ydCBjcywgX19jc2g7CiAgICAgICAgbG9uZyBlZmxhZ3M7CiAgICAgICAgbG9u ZyBlc3A7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc3MsIF9fc3NoOwoKCgogICAgICAgIHVuc2ln bmVkIHNob3J0IGVzLCBfX2VzaDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBkcywgX19kc2g7CiAg ICAgICAgdW5zaWduZWQgc2hvcnQgZnMsIF9fZnNoOwogICAgICAgIHVuc2lnbmVkIHNob3J0IGdz LCBfX2dzaDsKfTsKCnN0cnVjdCBrZXJuZWxfdm04Nl9zdHJ1Y3QgewogICAgICAgIHN0cnVjdCBr ZXJuZWxfdm04Nl9yZWdzIHJlZ3M7CiMgMTg0ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVk ZS9hc20vdm04Ni5oIgogICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAgICAgICAgdW5zaWdu ZWQgbG9uZyBzY3JlZW5fYml0bWFwOwogICAgICAgIHVuc2lnbmVkIGxvbmcgY3B1X3R5cGU7CiAg ICAgICAgc3RydWN0IHJldmVjdG9yZWRfc3RydWN0IGludF9yZXZlY3RvcmVkOwogICAgICAgIHN0 cnVjdCByZXZlY3RvcmVkX3N0cnVjdCBpbnQyMV9yZXZlY3RvcmVkOwogICAgICAgIHN0cnVjdCB2 bTg2cGx1c19pbmZvX3N0cnVjdCB2bTg2cGx1czsKICAgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVn czMyOwojIDIwMSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvYXNtL3ZtODYuaCIKfTsK CnZvaWQgaGFuZGxlX3ZtODZfZmF1bHQoc3RydWN0IGtlcm5lbF92bTg2X3JlZ3MgKiwgbG9uZyk7 CmludCBoYW5kbGVfdm04Nl90cmFwKHN0cnVjdCBrZXJuZWxfdm04Nl9yZWdzICosIGxvbmcsIGlu dCk7CiMgMTEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCIg MgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS9tYXRoX2VtdS5oIiAxCgoK CiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvYXNtL3NpZ2NvbnRleHQuaCIgMQoj IDE4ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9hc20vc2lnY29udGV4dC5oIgpzdHJ1 Y3QgX2ZwcmVnIHsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzaWduaWZpY2FuZFs0XTsKICAgICAg ICB1bnNpZ25lZCBzaG9ydCBleHBvbmVudDsKfTsKCnN0cnVjdCBfZnB4cmVnIHsKICAgICAgICB1 bnNpZ25lZCBzaG9ydCBzaWduaWZpY2FuZFs0XTsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBleHBv bmVudDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBwYWRkaW5nWzNdOwp9OwoKc3RydWN0IF94bW1y ZWcgewogICAgICAgIHVuc2lnbmVkIGxvbmcgZWxlbWVudFs0XTsKfTsKCnN0cnVjdCBfZnBzdGF0 ZSB7CgogICAgICAgIHVuc2lnbmVkIGxvbmcgY3c7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzdzsK ICAgICAgICB1bnNpZ25lZCBsb25nIHRhZzsKICAgICAgICB1bnNpZ25lZCBsb25nIGlwb2ZmOwog ICAgICAgIHVuc2lnbmVkIGxvbmcgY3NzZWw7CiAgICAgICAgdW5zaWduZWQgbG9uZyBkYXRhb2Zm OwogICAgICAgIHVuc2lnbmVkIGxvbmcgZGF0YXNlbDsKICAgICAgICBzdHJ1Y3QgX2ZwcmVnIF9z dFs4XTsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzdGF0dXM7CiAgICAgICAgdW5zaWduZWQgc2hv cnQgbWFnaWM7CgoKICAgICAgICB1bnNpZ25lZCBsb25nIF9meHNyX2Vudls2XTsKICAgICAgICB1 bnNpZ25lZCBsb25nIG14Y3NyOwogICAgICAgIHVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWQ7CiAgICAg ICAgc3RydWN0IF9mcHhyZWcgX2Z4c3Jfc3RbOF07CiAgICAgICAgc3RydWN0IF94bW1yZWcgX3ht bVs4XTsKICAgICAgICB1bnNpZ25lZCBsb25nIHBhZGRpbmdbNTZdOwp9OwoKCgpzdHJ1Y3Qgc2ln Y29udGV4dCB7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgZ3MsIF9fZ3NoOwogICAgICAgIHVuc2ln bmVkIHNob3J0IGZzLCBfX2ZzaDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBlcywgX19lc2g7CiAg ICAgICAgdW5zaWduZWQgc2hvcnQgZHMsIF9fZHNoOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZWRp OwogICAgICAgIHVuc2lnbmVkIGxvbmcgZXNpOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZWJwOwog ICAgICAgIHVuc2lnbmVkIGxvbmcgZXNwOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZWJ4OwogICAg ICAgIHVuc2lnbmVkIGxvbmcgZWR4OwogICAgICAgIHVuc2lnbmVkIGxvbmcgZWN4OwogICAgICAg IHVuc2lnbmVkIGxvbmcgZWF4OwogICAgICAgIHVuc2lnbmVkIGxvbmcgdHJhcG5vOwogICAgICAg IHVuc2lnbmVkIGxvbmcgZXJyOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZWlwOwogICAgICAgIHVu c2lnbmVkIHNob3J0IGNzLCBfX2NzaDsKICAgICAgICB1bnNpZ25lZCBsb25nIGVmbGFnczsKICAg ICAgICB1bnNpZ25lZCBsb25nIGVzcF9hdF9zaWduYWw7CiAgICAgICAgdW5zaWduZWQgc2hvcnQg c3MsIF9fc3NoOwogICAgICAgIHN0cnVjdCBfZnBzdGF0ZSAqIGZwc3RhdGU7CiAgICAgICAgdW5z aWduZWQgbG9uZyBvbGRtYXNrOwogICAgICAgIHVuc2lnbmVkIGxvbmcgY3IyOwp9OwojIDUgIi91 c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS9tYXRoX2VtdS5oIiAyCgppbnQgcmVzdG9y ZV9pMzg3X3NvZnQodm9pZCAqczM4Nywgc3RydWN0IF9mcHN0YXRlICpidWYpOwppbnQgc2F2ZV9p Mzg3X3NvZnQodm9pZCAqczM4Nywgc3RydWN0IF9mcHN0YXRlICogYnVmKTsKCgoKCgpzdHJ1Y3Qg aW5mbyB7CiAgICAgICAgbG9uZyBfX19vcmlnX2VpcDsKICAgICAgICBsb25nIF9fX2VieDsKICAg ICAgICBsb25nIF9fX2VjeDsKICAgICAgICBsb25nIF9fX2VkeDsKICAgICAgICBsb25nIF9fX2Vz aTsKICAgICAgICBsb25nIF9fX2VkaTsKICAgICAgICBsb25nIF9fX2VicDsKICAgICAgICBsb25n IF9fX2VheDsKICAgICAgICBsb25nIF9fX2RzOwogICAgICAgIGxvbmcgX19fZXM7CiAgICAgICAg bG9uZyBfX19vcmlnX2VheDsKICAgICAgICBsb25nIF9fX2VpcDsKICAgICAgICBsb25nIF9fX2Nz OwogICAgICAgIGxvbmcgX19fZWZsYWdzOwogICAgICAgIGxvbmcgX19fZXNwOwogICAgICAgIGxv bmcgX19fc3M7CiAgICAgICAgbG9uZyBfX192bTg2X2VzOwogICAgICAgIGxvbmcgX19fdm04Nl9k czsKICAgICAgICBsb25nIF9fX3ZtODZfZnM7CiAgICAgICAgbG9uZyBfX192bTg2X2dzOwp9Owoj IDEyICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgiIDIKIyAx ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9hc20vc2VnbWVudC5oIiAxCiMgMTMgIi91 c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCIgMgojIDEgIi91c3Iv c3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS9wYWdlLmgiIDEKIyA0NSAiL3Vzci9zcmMvbGlu dXgtMi40LjIwL2luY2x1ZGUvYXNtL3BhZ2UuaCIKdHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBs b25nIHB0ZV9sb3c7IH0gcHRlX3Q7CnR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwbWQ7 IH0gcG1kX3Q7CnR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwZ2Q7IH0gcGdkX3Q7CgoK Cgp0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgcGdwcm90OyB9IHBncHJvdF90OwojIDEx MyAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvYXNtL3BhZ2UuaCIKc3RhdGljIF9faW5s aW5lX18gaW50IGdldF9vcmRlcih1bnNpZ25lZCBsb25nIHNpemUpCnsKICAgICAgICBpbnQgb3Jk ZXI7CgogICAgICAgIHNpemUgPSAoc2l6ZS0xKSA+PiAoMTIgLTEpOwogICAgICAgIG9yZGVyID0g LTE7CiAgICAgICAgZG8gewogICAgICAgICAgICAgICAgc2l6ZSA+Pj0gMTsKICAgICAgICAgICAg ICAgIG9yZGVyKys7CiAgICAgICAgfSB3aGlsZSAoc2l6ZSk7CiAgICAgICAgcmV0dXJuIG9yZGVy Owp9CiMgMTQgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCIg MgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaCIg MQojIDE3ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgiIDIK IyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9jYWNoZS5oIiAxCgoKCgoj IDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS9jYWNoZS5oIiAxCiMgNiAiL3Vz ci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvY2FjaGUuaCIgMgojIDE4ICIvdXNyL3Ny Yy9saW51eC0yLjQuMjAvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgiIDIKCiMgMSAiL3Vzci9zcmMv bGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvdGhyZWFkcy5oIiAxCiMgMjAgIi91c3Ivc3JjL2xp bnV4LTIuNC4yMC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCIgMgojIDMzICIvdXNyL3NyYy9saW51 eC0yLjQuMjAvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgiCnN0cnVjdCBjcHVpbmZvX3g4NiB7CiAg ICAgICAgX191OCB4ODY7CiAgICAgICAgX191OCB4ODZfdmVuZG9yOwogICAgICAgIF9fdTggeDg2 X21vZGVsOwogICAgICAgIF9fdTggeDg2X21hc2s7CiAgICAgICAgY2hhciB3cF93b3Jrc19vazsK ICAgICAgICBjaGFyIGhsdF93b3Jrc19vazsKICAgICAgICBjaGFyIGhhcmRfbWF0aDsKICAgICAg ICBjaGFyIHJmdTsKICAgICAgICBpbnQgY3B1aWRfbGV2ZWw7CiAgICAgICAgX191MzIgeDg2X2Nh cGFiaWxpdHlbNF07CiAgICAgICAgY2hhciB4ODZfdmVuZG9yX2lkWzE2XTsKICAgICAgICBjaGFy IHg4Nl9tb2RlbF9pZFs2NF07CiAgICAgICAgaW50IHg4Nl9jYWNoZV9zaXplOwoKICAgICAgICBp bnQgZmRpdl9idWc7CiAgICAgICAgaW50IGYwMGZfYnVnOwogICAgICAgIGludCBjb21hX2J1ZzsK ICAgICAgICB1bnNpZ25lZCBsb25nIGxvb3BzX3Blcl9qaWZmeTsKICAgICAgICB1bnNpZ25lZCBs b25nICpwZ2RfcXVpY2s7CiAgICAgICAgdW5zaWduZWQgbG9uZyAqcG1kX3F1aWNrOwogICAgICAg IHVuc2lnbmVkIGxvbmcgKnB0ZV9xdWljazsKICAgICAgICB1bnNpZ25lZCBsb25nIHBndGFibGVf Y2FjaGVfc3o7Cn0gX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oKDEgPDwgKCg1KSkpKSkpOwoj IDc0ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgiCmV4dGVy biBzdHJ1Y3QgY3B1aW5mb194ODYgYm9vdF9jcHVfZGF0YTsKZXh0ZXJuIHN0cnVjdCB0c3Nfc3Ry dWN0IGluaXRfdHNzWzMyXTsKCgpleHRlcm4gc3RydWN0IGNwdWluZm9feDg2IGNwdV9kYXRhW107 CiMgOTcgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCIKZXh0 ZXJuIGNoYXIgaWdub3JlX2lycTEzOwoKZXh0ZXJuIHZvaWQgaWRlbnRpZnlfY3B1KHN0cnVjdCBj cHVpbmZvX3g4NiAqKTsKZXh0ZXJuIHZvaWQgcHJpbnRfY3B1X2luZm8oc3RydWN0IGNwdWluZm9f eDg2ICopOwpleHRlcm4gdm9pZCBkb2RneV90c2Modm9pZCk7CiMgMTI3ICIvdXNyL3NyYy9saW51 eC0yLjQuMjAvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgiCnN0YXRpYyBpbmxpbmUgdm9pZCBjcHVp ZChpbnQgb3AsIGludCAqZWF4LCBpbnQgKmVieCwgaW50ICplY3gsIGludCAqZWR4KQp7CiAgICAg ICAgX19hc21fXygiY3B1aWQiCiAgICAgICAgICAgICAgICA6ICI9YSIgKCplYXgpLAogICAgICAg ICAgICAgICAgICAiPWIiICgqZWJ4KSwKICAgICAgICAgICAgICAgICAgIj1jIiAoKmVjeCksCiAg ICAgICAgICAgICAgICAgICI9ZCIgKCplZHgpCiAgICAgICAgICAgICAgICA6ICIwIiAob3ApKTsK fQoKCgoKc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3B1aWRfZWF4KHVuc2lnbmVkIGludCBv cCkKewogICAgICAgIHVuc2lnbmVkIGludCBlYXg7CgogICAgICAgIF9fYXNtX18oImNwdWlkIgog ICAgICAgICAgICAgICAgOiAiPWEiIChlYXgpCiAgICAgICAgICAgICAgICA6ICIwIiAob3ApCiAg ICAgICAgICAgICAgICA6ICJieCIsICJjeCIsICJkeCIpOwogICAgICAgIHJldHVybiBlYXg7Cn0K c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3B1aWRfZWJ4KHVuc2lnbmVkIGludCBvcCkKewog ICAgICAgIHVuc2lnbmVkIGludCBlYXgsIGVieDsKCiAgICAgICAgX19hc21fXygiY3B1aWQiCiAg ICAgICAgICAgICAgICA6ICI9YSIgKGVheCksICI9YiIgKGVieCkKICAgICAgICAgICAgICAgIDog IjAiIChvcCkKICAgICAgICAgICAgICAgIDogImN4IiwgImR4IiApOwogICAgICAgIHJldHVybiBl Yng7Cn0Kc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3B1aWRfZWN4KHVuc2lnbmVkIGludCBv cCkKewogICAgICAgIHVuc2lnbmVkIGludCBlYXgsIGVjeDsKCiAgICAgICAgX19hc21fXygiY3B1 aWQiCiAgICAgICAgICAgICAgICA6ICI9YSIgKGVheCksICI9YyIgKGVjeCkKICAgICAgICAgICAg ICAgIDogIjAiIChvcCkKICAgICAgICAgICAgICAgIDogImJ4IiwgImR4IiApOwogICAgICAgIHJl dHVybiBlY3g7Cn0Kc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3B1aWRfZWR4KHVuc2lnbmVk IGludCBvcCkKewogICAgICAgIHVuc2lnbmVkIGludCBlYXgsIGVkeDsKCiAgICAgICAgX19hc21f XygiY3B1aWQiCiAgICAgICAgICAgICAgICA6ICI9YSIgKGVheCksICI9ZCIgKGVkeCkKICAgICAg ICAgICAgICAgIDogIjAiIChvcCkKICAgICAgICAgICAgICAgIDogImJ4IiwgImN4Iik7CiAgICAg ICAgcmV0dXJuIGVkeDsKfQojIDIwNSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvYXNt L3Byb2Nlc3Nvci5oIgpleHRlcm4gdW5zaWduZWQgbG9uZyBtbXVfY3I0X2ZlYXR1cmVzOwoKc3Rh dGljIGlubGluZSB2b2lkIHNldF9pbl9jcjQgKHVuc2lnbmVkIGxvbmcgbWFzaykKewogICAgICAg IG1tdV9jcjRfZmVhdHVyZXMgfD0gbWFzazsKICAgICAgICBfX2FzbV9fKCJtb3ZsICUlY3I0LCUl ZWF4XG5cdCIKICAgICAgICAgICAgICAgICJvcmwgJTAsJSVlYXhcblx0IgogICAgICAgICAgICAg ICAgIm1vdmwgJSVlYXgsJSVjcjRcbiIKICAgICAgICAgICAgICAgIDogOiAiaXJnIiAobWFzaykK ICAgICAgICAgICAgICAgIDoiYXgiKTsKfQoKc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX2luX2Ny NCAodW5zaWduZWQgbG9uZyBtYXNrKQp7CiAgICAgICAgbW11X2NyNF9mZWF0dXJlcyAmPSB+bWFz azsKICAgICAgICBfX2FzbV9fKCJtb3ZsICUlY3I0LCUlZWF4XG5cdCIKICAgICAgICAgICAgICAg ICJhbmRsICUwLCUlZWF4XG5cdCIKICAgICAgICAgICAgICAgICJtb3ZsICUlZWF4LCUlY3I0XG4i CiAgICAgICAgICAgICAgICA6IDogImlyZyIgKH5tYXNrKQogICAgICAgICAgICAgICAgOiJheCIp Owp9CiMgMjYyICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgi CmV4dGVybiBpbnQgTUNBX2J1czsKCgoKZXh0ZXJuIHVuc2lnbmVkIGludCBtYWNoaW5lX2lkOwpl eHRlcm4gdW5zaWduZWQgaW50IG1hY2hpbmVfc3VibW9kZWxfaWQ7CmV4dGVybiB1bnNpZ25lZCBp bnQgQklPU19yZXZpc2lvbjsKZXh0ZXJuIHVuc2lnbmVkIGludCBtY2FfcGVudGl1bV9mbGFnOwoj IDI4OCAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIgpzdHJ1 Y3QgaTM4N19mc2F2ZV9zdHJ1Y3QgewogICAgICAgIGxvbmcgY3dkOwogICAgICAgIGxvbmcgc3dk OwogICAgICAgIGxvbmcgdHdkOwogICAgICAgIGxvbmcgZmlwOwogICAgICAgIGxvbmcgZmNzOwog ICAgICAgIGxvbmcgZm9vOwogICAgICAgIGxvbmcgZm9zOwogICAgICAgIGxvbmcgc3Rfc3BhY2Vb MjBdOwogICAgICAgIGxvbmcgc3RhdHVzOwp9OwoKc3RydWN0IGkzODdfZnhzYXZlX3N0cnVjdCB7 CiAgICAgICAgdW5zaWduZWQgc2hvcnQgY3dkOwogICAgICAgIHVuc2lnbmVkIHNob3J0IHN3ZDsK ICAgICAgICB1bnNpZ25lZCBzaG9ydCB0d2Q7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgZm9wOwog ICAgICAgIGxvbmcgZmlwOwogICAgICAgIGxvbmcgZmNzOwogICAgICAgIGxvbmcgZm9vOwogICAg ICAgIGxvbmcgZm9zOwogICAgICAgIGxvbmcgbXhjc3I7CiAgICAgICAgbG9uZyByZXNlcnZlZDsK ICAgICAgICBsb25nIHN0X3NwYWNlWzMyXTsKICAgICAgICBsb25nIHhtbV9zcGFjZVszMl07CiAg ICAgICAgbG9uZyBwYWRkaW5nWzU2XTsKfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoMTYpKSk7 CgpzdHJ1Y3QgaTM4N19zb2Z0X3N0cnVjdCB7CiAgICAgICAgbG9uZyBjd2Q7CiAgICAgICAgbG9u ZyBzd2Q7CiAgICAgICAgbG9uZyB0d2Q7CiAgICAgICAgbG9uZyBmaXA7CiAgICAgICAgbG9uZyBm Y3M7CiAgICAgICAgbG9uZyBmb287CiAgICAgICAgbG9uZyBmb3M7CiAgICAgICAgbG9uZyBzdF9z cGFjZVsyMF07CiAgICAgICAgdW5zaWduZWQgY2hhciBmdG9wLCBjaGFuZ2VkLCBsb29rYWhlYWQs IG5vX3VwZGF0ZSwgcm0sIGFsaW1pdDsKICAgICAgICBzdHJ1Y3QgaW5mbyAqaW5mbzsKICAgICAg ICB1bnNpZ25lZCBsb25nIGVudHJ5X2VpcDsKfTsKCnVuaW9uIGkzODdfdW5pb24gewogICAgICAg IHN0cnVjdCBpMzg3X2ZzYXZlX3N0cnVjdCBmc2F2ZTsKICAgICAgICBzdHJ1Y3QgaTM4N19meHNh dmVfc3RydWN0IGZ4c2F2ZTsKICAgICAgICBzdHJ1Y3QgaTM4N19zb2Z0X3N0cnVjdCBzb2Z0Owp9 OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIHVuc2lnbmVkIGxvbmcgc2VnOwp9IG1tX3NlZ21l bnRfdDsKCnN0cnVjdCB0c3Nfc3RydWN0IHsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBiYWNrX2xp bmssX19ibGg7CiAgICAgICAgdW5zaWduZWQgbG9uZyBlc3AwOwogICAgICAgIHVuc2lnbmVkIHNo b3J0IHNzMCxfX3NzMGg7CiAgICAgICAgdW5zaWduZWQgbG9uZyBlc3AxOwogICAgICAgIHVuc2ln bmVkIHNob3J0IHNzMSxfX3NzMWg7CiAgICAgICAgdW5zaWduZWQgbG9uZyBlc3AyOwogICAgICAg IHVuc2lnbmVkIHNob3J0IHNzMixfX3NzMmg7CiAgICAgICAgdW5zaWduZWQgbG9uZyBfX2NyMzsK ICAgICAgICB1bnNpZ25lZCBsb25nIGVpcDsKICAgICAgICB1bnNpZ25lZCBsb25nIGVmbGFnczsK ICAgICAgICB1bnNpZ25lZCBsb25nIGVheCxlY3gsZWR4LGVieDsKICAgICAgICB1bnNpZ25lZCBs b25nIGVzcDsKICAgICAgICB1bnNpZ25lZCBsb25nIGVicDsKICAgICAgICB1bnNpZ25lZCBsb25n IGVzaTsKICAgICAgICB1bnNpZ25lZCBsb25nIGVkaTsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBl cywgX19lc2g7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgY3MsIF9fY3NoOwogICAgICAgIHVuc2ln bmVkIHNob3J0IHNzLCBfX3NzaDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBkcywgX19kc2g7CiAg ICAgICAgdW5zaWduZWQgc2hvcnQgZnMsIF9fZnNoOwogICAgICAgIHVuc2lnbmVkIHNob3J0IGdz LCBfX2dzaDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBsZHQsIF9fbGR0aDsKICAgICAgICB1bnNp Z25lZCBzaG9ydCB0cmFjZSwgYml0bWFwOwogICAgICAgIHVuc2lnbmVkIGxvbmcgaW9fYml0bWFw WzMyICsxXTsKCgoKICAgICAgICB1bnNpZ25lZCBsb25nIF9fY2FjaGVsaW5lX2ZpbGxlcls1XTsK fTsKCnN0cnVjdCB0aHJlYWRfc3RydWN0IHsKICAgICAgICB1bnNpZ25lZCBsb25nIGVzcDA7CiAg ICAgICAgdW5zaWduZWQgbG9uZyBlaXA7CiAgICAgICAgdW5zaWduZWQgbG9uZyBlc3A7CiAgICAg ICAgdW5zaWduZWQgbG9uZyBmczsKICAgICAgICB1bnNpZ25lZCBsb25nIGdzOwoKICAgICAgICB1 bnNpZ25lZCBsb25nIGRlYnVncmVnWzhdOwoKICAgICAgICB1bnNpZ25lZCBsb25nIGNyMiwgdHJh cF9ubywgZXJyb3JfY29kZTsKCiAgICAgICAgdW5pb24gaTM4N191bmlvbiBpMzg3OwoKICAgICAg ICBzdHJ1Y3Qgdm04Nl9zdHJ1Y3QgKiB2bTg2X2luZm87CiAgICAgICAgdW5zaWduZWQgbG9uZyBz Y3JlZW5fYml0bWFwOwogICAgICAgIHVuc2lnbmVkIGxvbmcgdjg2ZmxhZ3MsIHY4Nm1hc2ssIHNh dmVkX2VzcDA7CgogICAgICAgIGludCBpb3Blcm07CiAgICAgICAgdW5zaWduZWQgbG9uZyBpb19i aXRtYXBbMzIgKzFdOwp9OwojIDQzMCAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvYXNt L3Byb2Nlc3Nvci5oIgpzdHJ1Y3QgdGFza19zdHJ1Y3Q7CnN0cnVjdCBtbV9zdHJ1Y3Q7CgoKZXh0 ZXJuIHZvaWQgcmVsZWFzZV90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICopOwoKCgpleHRlcm4g aW50IGFyY2hfa2VybmVsX3RocmVhZChpbnQgKCpmbikodm9pZCAqKSwgdm9pZCAqIGFyZywgdW5z aWduZWQgbG9uZyBmbGFncyk7CgoKZXh0ZXJuIHZvaWQgY29weV9zZWdtZW50cyhzdHJ1Y3QgdGFz a19zdHJ1Y3QgKnAsIHN0cnVjdCBtbV9zdHJ1Y3QgKiBtbSk7CmV4dGVybiB2b2lkIHJlbGVhc2Vf c2VnbWVudHMoc3RydWN0IG1tX3N0cnVjdCAqIG1tKTsKCgoKCnN0YXRpYyBpbmxpbmUgdW5zaWdu ZWQgbG9uZyB0aHJlYWRfc2F2ZWRfcGMoc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnQpCnsKICAgICAg ICByZXR1cm4gKCh1bnNpZ25lZCBsb25nICopdC0+ZXNwKVszXTsKfQoKdW5zaWduZWQgbG9uZyBn ZXRfd2NoYW4oc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKIyA0NjQgIi91c3Ivc3JjL2xpbnV4LTIu NC4yMC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCIKc3RydWN0IG1pY3JvY29kZSB7CiAgICAgICAg dW5zaWduZWQgaW50IGhkcnZlcjsKICAgICAgICB1bnNpZ25lZCBpbnQgcmV2OwogICAgICAgIHVu c2lnbmVkIGludCBkYXRlOwogICAgICAgIHVuc2lnbmVkIGludCBzaWc7CiAgICAgICAgdW5zaWdu ZWQgaW50IGNrc3VtOwogICAgICAgIHVuc2lnbmVkIGludCBsZHJ2ZXI7CiAgICAgICAgdW5zaWdu ZWQgaW50IHBmOwogICAgICAgIHVuc2lnbmVkIGludCByZXNlcnZlZFs1XTsKICAgICAgICB1bnNp Z25lZCBpbnQgYml0c1s1MDBdOwp9OwoKCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCByZXBfbm9wKHZv aWQpCnsKICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygicmVwO25vcCIpOwp9CiMgMTQgIi91 c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L3ByZWZldGNoLmgiIDIKIyA0MyAiL3Vz ci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvcHJlZmV0Y2guaCIKc3RhdGljIGlubGlu ZSB2b2lkIHByZWZldGNoKGNvbnN0IHZvaWQgKngpIHs7fQoKCgoKc3RhdGljIGlubGluZSB2b2lk IHByZWZldGNodyhjb25zdCB2b2lkICp4KSB7O30KIyA3ICIvdXNyL3NyYy9saW51eC0yLjQuMjAv aW5jbHVkZS9saW51eC9saXN0LmgiIDIKIyAxOCAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1 ZGUvbGludXgvbGlzdC5oIgpzdHJ1Y3QgbGlzdF9oZWFkIHsKICAgICAgICBzdHJ1Y3QgbGlzdF9o ZWFkICpuZXh0LCAqcHJldjsKfTsKIyAzNyAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUv bGludXgvbGlzdC5oIgpzdGF0aWMgaW5saW5lIHZvaWQgX19saXN0X2FkZChzdHJ1Y3QgbGlzdF9o ZWFkICpuZXcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBsaXN0X2hlYWQg KnByZXYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKm5l eHQpCnsKICAgICAgICBuZXh0LT5wcmV2ID0gbmV3OwogICAgICAgIG5ldy0+bmV4dCA9IG5leHQ7 CiAgICAgICAgbmV3LT5wcmV2ID0gcHJldjsKICAgICAgICBwcmV2LT5uZXh0ID0gbmV3Owp9CiMg NTUgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L2xpc3QuaCIKc3RhdGljIGlu bGluZSB2b2lkIGxpc3RfYWRkKHN0cnVjdCBsaXN0X2hlYWQgKm5ldywgc3RydWN0IGxpc3RfaGVh ZCAqaGVhZCkKewogICAgICAgIF9fbGlzdF9hZGQobmV3LCBoZWFkLCBoZWFkLT5uZXh0KTsKfQoj IDY4ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9saXN0LmgiCnN0YXRpYyBp bmxpbmUgdm9pZCBsaXN0X2FkZF90YWlsKHN0cnVjdCBsaXN0X2hlYWQgKm5ldywgc3RydWN0IGxp c3RfaGVhZCAqaGVhZCkKewogICAgICAgIF9fbGlzdF9hZGQobmV3LCBoZWFkLT5wcmV2LCBoZWFk KTsKfQojIDgwICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9saXN0LmgiCnN0 YXRpYyBpbmxpbmUgdm9pZCBfX2xpc3RfZGVsKHN0cnVjdCBsaXN0X2hlYWQgKnByZXYsIHN0cnVj dCBsaXN0X2hlYWQgKm5leHQpCnsKICAgICAgICBuZXh0LT5wcmV2ID0gcHJldjsKICAgICAgICBw cmV2LT5uZXh0ID0gbmV4dDsKfQoKCgoKCgpzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9kZWwoc3Ry dWN0IGxpc3RfaGVhZCAqZW50cnkpCnsKICAgICAgICBfX2xpc3RfZGVsKGVudHJ5LT5wcmV2LCBl bnRyeS0+bmV4dCk7CiAgICAgICAgZW50cnktPm5leHQgPSAodm9pZCAqKSAwOwogICAgICAgIGVu dHJ5LT5wcmV2ID0gKHZvaWQgKikgMDsKfQoKCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCBsaXN0X2Rl bF9pbml0KHN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5KQp7CiAgICAgICAgX19saXN0X2RlbChlbnRy eS0+cHJldiwgZW50cnktPm5leHQpOwogICAgICAgIGRvIHsgKGVudHJ5KS0+bmV4dCA9IChlbnRy eSk7IChlbnRyeSktPnByZXYgPSAoZW50cnkpOyB9IHdoaWxlICgwKTsKfQoKCgoKCgpzdGF0aWMg aW5saW5lIHZvaWQgbGlzdF9tb3ZlKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIHN0cnVjdCBsaXN0 X2hlYWQgKmhlYWQpCnsKICAgICAgICBfX2xpc3RfZGVsKGxpc3QtPnByZXYsIGxpc3QtPm5leHQp OwogICAgICAgIGxpc3RfYWRkKGxpc3QsIGhlYWQpOwp9CgoKCgoKCnN0YXRpYyBpbmxpbmUgdm9p ZCBsaXN0X21vdmVfdGFpbChzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKewogICAgICAgIF9fbGlz dF9kZWwobGlzdC0+cHJldiwgbGlzdC0+bmV4dCk7CiAgICAgICAgbGlzdF9hZGRfdGFpbChsaXN0 LCBoZWFkKTsKfQoKCgoKCnN0YXRpYyBpbmxpbmUgaW50IGxpc3RfZW1wdHkoc3RydWN0IGxpc3Rf aGVhZCAqaGVhZCkKewogICAgICAgIHJldHVybiBoZWFkLT5uZXh0ID09IGhlYWQ7Cn0KCnN0YXRp YyBpbmxpbmUgdm9pZCBfX2xpc3Rfc3BsaWNlKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCnsKICAg ICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpmaXJzdCA9IGxpc3QtPm5leHQ7CiAgICAgICAgc3RydWN0 IGxpc3RfaGVhZCAqbGFzdCA9IGxpc3QtPnByZXY7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCAq YXQgPSBoZWFkLT5uZXh0OwoKICAgICAgICBmaXJzdC0+cHJldiA9IGhlYWQ7CiAgICAgICAgaGVh ZC0+bmV4dCA9IGZpcnN0OwoKICAgICAgICBsYXN0LT5uZXh0ID0gYXQ7CiAgICAgICAgYXQtPnBy ZXYgPSBsYXN0Owp9CgoKCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCBsaXN0X3NwbGljZShzdHJ1Y3Qg bGlzdF9oZWFkICpsaXN0LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQp7CiAgICAgICAgaWYgKCFs aXN0X2VtcHR5KGxpc3QpKQogICAgICAgICAgICAgICAgX19saXN0X3NwbGljZShsaXN0LCBoZWFk KTsKfQojIDE3MiAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvbGlzdC5oIgpz dGF0aWMgaW5saW5lIHZvaWQgbGlzdF9zcGxpY2VfaW5pdChzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpo ZWFkKQp7CiAgICAgICAgaWYgKCFsaXN0X2VtcHR5KGxpc3QpKSB7CiAgICAgICAgICAgICAgICBf X2xpc3Rfc3BsaWNlKGxpc3QsIGhlYWQpOwogICAgICAgICAgICAgICAgZG8geyAobGlzdCktPm5l eHQgPSAobGlzdCk7IChsaXN0KS0+cHJldiA9IChsaXN0KTsgfSB3aGlsZSAoMCk7CiAgICAgICAg fQp9CiMgMTUgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L3dhaXQuaCIgMgoK IyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9zcGlubG9jay5oIiAxCiMg NDAgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrLmgiCiMgMSAi L3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvc3RyaW5naWZ5LmgiIDEKIyA0MSAi L3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvc3BpbmxvY2suaCIgMgojIDU2ICIv dXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9zcGlubG9jay5oIgojIDEgIi91c3Iv c3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS9zcGlubG9jay5oIiAxCgoKCiMgMSAiL3Vzci9z cmMvbGludXgtMi40LjIwL2luY2x1ZGUvYXNtL2F0b21pYy5oIiAxCiMgMjIgIi91c3Ivc3JjL2xp bnV4LTIuNC4yMC9pbmNsdWRlL2FzbS9hdG9taWMuaCIKdHlwZWRlZiBzdHJ1Y3QgeyB2b2xhdGls ZSBpbnQgY291bnRlcjsgfSBhdG9taWNfdDsKIyA1MyAiL3Vzci9zcmMvbGludXgtMi40LjIwL2lu Y2x1ZGUvYXNtL2F0b21pYy5oIgpzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGF0b21pY19hZGQoaW50 IGksIGF0b21pY190ICp2KQp7CiAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oCiAgICAgICAg ICAgICAgICAibG9jayA7ICIgImFkZGwgJTEsJTAiCiAgICAgICAgICAgICAgICA6Ij1tIiAodi0+ Y291bnRlcikKICAgICAgICAgICAgICAgIDoiaXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSk7Cn0K IyA2OSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvYXNtL2F0b21pYy5oIgpzdGF0aWMg X19pbmxpbmVfXyB2b2lkIGF0b21pY19zdWIoaW50IGksIGF0b21pY190ICp2KQp7CiAgICAgICAg X19hc21fXyBfX3ZvbGF0aWxlX18oCiAgICAgICAgICAgICAgICAibG9jayA7ICIgInN1YmwgJTEs JTAiCiAgICAgICAgICAgICAgICA6Ij1tIiAodi0+Y291bnRlcikKICAgICAgICAgICAgICAgIDoi aXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSk7Cn0KIyA4NyAiL3Vzci9zcmMvbGludXgtMi40LjIw L2luY2x1ZGUvYXNtL2F0b21pYy5oIgpzdGF0aWMgX19pbmxpbmVfXyBpbnQgYXRvbWljX3N1Yl9h bmRfdGVzdChpbnQgaSwgYXRvbWljX3QgKnYpCnsKICAgICAgICB1bnNpZ25lZCBjaGFyIGM7Cgog ICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKAogICAgICAgICAgICAgICAgImxvY2sgOyAiICJz dWJsICUyLCUwOyBzZXRlICUxIgogICAgICAgICAgICAgICAgOiI9bSIgKHYtPmNvdW50ZXIpLCAi PXFtIiAoYykKICAgICAgICAgICAgICAgIDoiaXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSA6ICJt ZW1vcnkiKTsKICAgICAgICByZXR1cm4gYzsKfQojIDEwNSAiL3Vzci9zcmMvbGludXgtMi40LjIw L2luY2x1ZGUvYXNtL2F0b21pYy5oIgpzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGF0b21pY19pbmMo YXRvbWljX3QgKnYpCnsKICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygKICAgICAgICAgICAg ICAgICJsb2NrIDsgIiAiaW5jbCAlMCIKICAgICAgICAgICAgICAgIDoiPW0iICh2LT5jb3VudGVy KQogICAgICAgICAgICAgICAgOiJtIiAodi0+Y291bnRlcikpOwp9CiMgMTIwICIvdXNyL3NyYy9s aW51eC0yLjQuMjAvaW5jbHVkZS9hc20vYXRvbWljLmgiCnN0YXRpYyBfX2lubGluZV9fIHZvaWQg YXRvbWljX2RlYyhhdG9taWNfdCAqdikKewogICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKAog ICAgICAgICAgICAgICAgImxvY2sgOyAiICJkZWNsICUwIgogICAgICAgICAgICAgICAgOiI9bSIg KHYtPmNvdW50ZXIpCiAgICAgICAgICAgICAgICA6Im0iICh2LT5jb3VudGVyKSk7Cn0KIyAxMzcg Ii91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS9hdG9taWMuaCIKc3RhdGljIF9faW5s aW5lX18gaW50IGF0b21pY19kZWNfYW5kX3Rlc3QoYXRvbWljX3QgKnYpCnsKICAgICAgICB1bnNp Z25lZCBjaGFyIGM7CgogICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKAogICAgICAgICAgICAg ICAgImxvY2sgOyAiICJkZWNsICUwOyBzZXRlICUxIgogICAgICAgICAgICAgICAgOiI9bSIgKHYt PmNvdW50ZXIpLCAiPXFtIiAoYykKICAgICAgICAgICAgICAgIDoibSIgKHYtPmNvdW50ZXIpIDog Im1lbW9yeSIpOwogICAgICAgIHJldHVybiBjICE9IDA7Cn0KIyAxNTcgIi91c3Ivc3JjL2xpbnV4 LTIuNC4yMC9pbmNsdWRlL2FzbS9hdG9taWMuaCIKc3RhdGljIF9faW5saW5lX18gaW50IGF0b21p Y19pbmNfYW5kX3Rlc3QoYXRvbWljX3QgKnYpCnsKICAgICAgICB1bnNpZ25lZCBjaGFyIGM7Cgog ICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKAogICAgICAgICAgICAgICAgImxvY2sgOyAiICJp bmNsICUwOyBzZXRlICUxIgogICAgICAgICAgICAgICAgOiI9bSIgKHYtPmNvdW50ZXIpLCAiPXFt IiAoYykKICAgICAgICAgICAgICAgIDoibSIgKHYtPmNvdW50ZXIpIDogIm1lbW9yeSIpOwogICAg ICAgIHJldHVybiBjICE9IDA7Cn0KIyAxNzggIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRl L2FzbS9hdG9taWMuaCIKc3RhdGljIF9faW5saW5lX18gaW50IGF0b21pY19hZGRfbmVnYXRpdmUo aW50IGksIGF0b21pY190ICp2KQp7CiAgICAgICAgdW5zaWduZWQgY2hhciBjOwoKICAgICAgICBf X2FzbV9fIF9fdm9sYXRpbGVfXygKICAgICAgICAgICAgICAgICJsb2NrIDsgIiAiYWRkbCAlMiwl MDsgc2V0cyAlMSIKICAgICAgICAgICAgICAgIDoiPW0iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMp CiAgICAgICAgICAgICAgICA6ImlyIiAoaSksICJtIiAodi0+Y291bnRlcikgOiAibWVtb3J5Iik7 CiAgICAgICAgcmV0dXJuIGM7Cn0KIyA1ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9h c20vc3BpbmxvY2suaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS9y d2xvY2suaCIgMQojIDYgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS9zcGlubG9j ay5oIiAyCgoKCmV4dGVybiBpbnQgcHJpbnRrKGNvbnN0IGNoYXIgKiBmbXQsIC4uLikKICAgICAg ICBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDEsIDIpKSk7CiMgMjYgIi91c3Ivc3Jj L2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS9zcGlubG9jay5oIgp0eXBlZGVmIHN0cnVjdCB7CiAg ICAgICAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGxvY2s7CgoKCn0gc3BpbmxvY2tfdDsKIyA4MCAi L3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgiCnN0YXRpYyBpbmxp bmUgdm9pZCBzcGluX3VubG9jayhzcGlubG9ja190ICpsb2NrKQp7CgoKCgoKCiAgICAgICAgX19h c21fXyBfX3ZvbGF0aWxlX18oCiAgICAgICAgICAgICAgICAibW92YiAkMSwlMCIgOiI9bSIgKGxv Y2stPmxvY2spIDogOiAibWVtb3J5IgogICAgICAgICk7Cn0KIyAxMTYgIi91c3Ivc3JjL2xpbnV4 LTIuNC4yMC9pbmNsdWRlL2FzbS9zcGlubG9jay5oIgpzdGF0aWMgaW5saW5lIGludCBzcGluX3Ry eWxvY2soc3BpbmxvY2tfdCAqbG9jaykKewogICAgICAgIGNoYXIgb2xkdmFsOwogICAgICAgIF9f YXNtX18gX192b2xhdGlsZV9fKAogICAgICAgICAgICAgICAgInhjaGdiICViMCwlMSIKICAgICAg ICAgICAgICAgIDoiPXEiIChvbGR2YWwpLCAiPW0iIChsb2NrLT5sb2NrKQogICAgICAgICAgICAg ICAgOiIwIiAoMCkgOiAibWVtb3J5Iik7CiAgICAgICAgcmV0dXJuIG9sZHZhbCA+IDA7Cn0KCnN0 YXRpYyBpbmxpbmUgdm9pZCBzcGluX2xvY2soc3BpbmxvY2tfdCAqbG9jaykKewojIDEzNiAiL3Vz ci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgiCiAgICAgICAgX19hc21f XyBfX3ZvbGF0aWxlX18oCiAgICAgICAgICAgICAgICAiXG4xOlx0IiAibG9jayA7IGRlY2IgJTBc blx0IiAianMgMmZcbiIgIi5zdWJzZWN0aW9uIDFcblx0IiAiIiAiLmlmbmRlZiAiICIudGV4dC5s b2NrLiIgInNjaGVkIiAiXG5cdCIgIi50ZXh0LmxvY2suIiAic2NoZWQiICI6XG5cdCIgIi5lbmRp ZlxuXHQiICIyOlx0IiAiY21wYiAkMCwlMFxuXHQiICJyZXA7bm9wXG5cdCIgImpsZSAyYlxuXHQi ICJqbXAgMWJcbiIgIi5wcmV2aW91c1xuXHQiCiAgICAgICAgICAgICAgICA6Ij1tIiAobG9jay0+ bG9jaykgOiA6ICJtZW1vcnkiKTsKfQojIDE1MiAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1 ZGUvYXNtL3NwaW5sb2NrLmgiCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICB2b2xhdGlsZSB1bnNp Z25lZCBpbnQgbG9jazsKCgoKfSByd2xvY2tfdDsKIyAxODIgIi91c3Ivc3JjL2xpbnV4LTIuNC4y MC9pbmNsdWRlL2FzbS9zcGlubG9jay5oIgpzdGF0aWMgaW5saW5lIHZvaWQgcmVhZF9sb2NrKHJ3 bG9ja190ICpydykKewoKCgoKICAgICAgICBkbyB7IGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChy dykpIGFzbSB2b2xhdGlsZSgibG9jayA7ICIgInN1YmwgJDEsJTBcblx0IiAianMgMmZcbiIgIjE6 XG4iICIuc3Vic2VjdGlvbiAxXG5cdCIgIiIgIi5pZm5kZWYgIiAiLnRleHQubG9jay4iICJzY2hl ZCIgIlxuXHQiICIudGV4dC5sb2NrLiIgInNjaGVkIiAiOlxuXHQiICIuZW5kaWZcblx0IiAiMjpc dHB1c2hsICUlZWF4XG5cdCIgImxlYWwgJTAsJSVlYXhcblx0IiAiY2FsbCAiICJfX3JlYWRfbG9j a19mYWlsZWQiICJcblx0IiAicG9wbCAlJWVheFxuXHQiICJqbXAgMWJcbiIgIi5wcmV2aW91c1xu XHQiIDoiPW0iICgqKHZvbGF0aWxlIGludCAqKXJ3KSA6IDogIm1lbW9yeSIpOyBlbHNlIGFzbSB2 b2xhdGlsZSgibG9jayA7ICIgInN1YmwgJDEsKCUwKVxuXHQiICJqcyAyZlxuIiAiMTpcbiIgIi5z dWJzZWN0aW9uIDFcblx0IiAiIiAiLmlmbmRlZiAiICIudGV4dC5sb2NrLiIgInNjaGVkIiAiXG5c dCIgIi50ZXh0LmxvY2suIiAic2NoZWQiICI6XG5cdCIgIi5lbmRpZlxuXHQiICIyOlx0Y2FsbCAi ICJfX3JlYWRfbG9ja19mYWlsZWQiICJcblx0IiAiam1wIDFiXG4iICIucHJldmlvdXNcblx0IiA6 OiJhIiAocncpIDogIm1lbW9yeSIpOyB9IHdoaWxlICgwKTsKfQoKc3RhdGljIGlubGluZSB2b2lk IHdyaXRlX2xvY2socndsb2NrX3QgKnJ3KQp7CgoKCgogICAgICAgIGRvIHsgaWYgKF9fYnVpbHRp bl9jb25zdGFudF9wKHJ3KSkgYXNtIHZvbGF0aWxlKCJsb2NrIDsgIiAic3VibCAkIiAiMHgwMTAw MDAwMCIgIiwoJTApXG5cdCIgImpueiAyZlxuIiAiMTpcbiIgIi5zdWJzZWN0aW9uIDFcblx0IiAi IiAiLmlmbmRlZiAiICIudGV4dC5sb2NrLiIgInNjaGVkIiAiXG5cdCIgIi50ZXh0LmxvY2suIiAi c2NoZWQiICI6XG5cdCIgIi5lbmRpZlxuXHQiICIyOlx0cHVzaGwgJSVlYXhcblx0IiAibGVhbCAl MCwlJWVheFxuXHQiICJjYWxsICIgIl9fd3JpdGVfbG9ja19mYWlsZWQiICJcblx0IiAicG9wbCAl JWVheFxuXHQiICJqbXAgMWJcbiIgIi5wcmV2aW91c1xuXHQiIDoiPW0iICgqKHZvbGF0aWxlIGlu dCAqKXJ3KSA6IDogIm1lbW9yeSIpOyBlbHNlIGFzbSB2b2xhdGlsZSgibG9jayA7ICIgInN1Ymwg JCIgIjB4MDEwMDAwMDAiICIsKCUwKVxuXHQiICJqbnogMmZcbiIgIjE6XG4iICIuc3Vic2VjdGlv biAxXG5cdCIgIiIgIi5pZm5kZWYgIiAiLnRleHQubG9jay4iICJzY2hlZCIgIlxuXHQiICIudGV4 dC5sb2NrLiIgInNjaGVkIiAiOlxuXHQiICIuZW5kaWZcblx0IiAiMjpcdGNhbGwgIiAiX193cml0 ZV9sb2NrX2ZhaWxlZCIgIlxuXHQiICJqbXAgMWJcbiIgIi5wcmV2aW91c1xuXHQiIDo6ImEiIChy dykgOiAibWVtb3J5Iik7IH0gd2hpbGUgKDApOwp9CgoKCgpzdGF0aWMgaW5saW5lIGludCB3cml0 ZV90cnlsb2NrKHJ3bG9ja190ICpsb2NrKQp7CiAgICAgICAgYXRvbWljX3QgKmNvdW50ID0gKGF0 b21pY190ICopbG9jazsKICAgICAgICBpZiAoYXRvbWljX3N1Yl9hbmRfdGVzdCgweDAxMDAwMDAw LCBjb3VudCkpCiAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICBhdG9taWNfYWRkKDB4 MDEwMDAwMDAsIGNvdW50KTsKICAgICAgICByZXR1cm4gMDsKfQojIDU3ICIvdXNyL3NyYy9saW51 eC0yLjQuMjAvaW5jbHVkZS9saW51eC9zcGlubG9jay5oIiAyCiMgMTU3ICIvdXNyL3NyYy9saW51 eC0yLjQuMjAvaW5jbHVkZS9saW51eC9zcGlubG9jay5oIgpleHRlcm4gaW50IGF0b21pY19kZWNf YW5kX2xvY2soYXRvbWljX3QgKmF0b21pYywgc3BpbmxvY2tfdCAqbG9jayk7CgoKCgoKdHlwZWRl ZiB1bmlvbiB7CiAgICBzcGlubG9ja190IGxvY2s7CiAgICBjaGFyIGZpbGxfdXBbKCgxIDw8ICgo NSkpKSldOwp9IHNwaW5sb2NrX2NhY2hlbGluZV90IF9fYXR0cmlidXRlX18gKChhbGlnbmVkKCgx IDw8ICgoNSkpKSkpKTsKIyAxNyAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgv d2FpdC5oIiAyCiMgMzEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L3dhaXQu aCIKc3RydWN0IF9fd2FpdF9xdWV1ZSB7CiAgICAgICAgdW5zaWduZWQgaW50IGZsYWdzOwoKICAg ICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiB0YXNrOwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQg dGFza19saXN0OwoKCgoKfTsKdHlwZWRlZiBzdHJ1Y3QgX193YWl0X3F1ZXVlIHdhaXRfcXVldWVf dDsKIyA3NyAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvd2FpdC5oIgpzdHJ1 Y3QgX193YWl0X3F1ZXVlX2hlYWQgewogICAgICAgIHNwaW5sb2NrX3QgbG9jazsKICAgICAgICBz dHJ1Y3QgbGlzdF9oZWFkIHRhc2tfbGlzdDsKCgoKCn07CnR5cGVkZWYgc3RydWN0IF9fd2FpdF9x dWV1ZV9oZWFkIHdhaXRfcXVldWVfaGVhZF90OwojIDE1NSAiL3Vzci9zcmMvbGludXgtMi40LjIw L2luY2x1ZGUvbGludXgvd2FpdC5oIgpzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF93YWl0cXVldWVf aGVhZCh3YWl0X3F1ZXVlX2hlYWRfdCAqcSkKewoKCgoKICAgICAgICBxLT5sb2NrID0gKHNwaW5s b2NrX3QpIHsgMSB9OwogICAgICAgIGRvIHsgKCZxLT50YXNrX2xpc3QpLT5uZXh0ID0gKCZxLT50 YXNrX2xpc3QpOyAoJnEtPnRhc2tfbGlzdCktPnByZXYgPSAoJnEtPnRhc2tfbGlzdCk7IH0gd2hp bGUgKDApOwoKCgoKfQoKc3RhdGljIGlubGluZSB2b2lkIGluaXRfd2FpdHF1ZXVlX2VudHJ5KHdh aXRfcXVldWVfdCAqcSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQp7CgoKCgogICAgICAgIHEtPmZs YWdzID0gMDsKICAgICAgICBxLT50YXNrID0gcDsKCgoKfQoKc3RhdGljIGlubGluZSBpbnQgd2Fp dHF1ZXVlX2FjdGl2ZSh3YWl0X3F1ZXVlX2hlYWRfdCAqcSkKewoKCgoKCgogICAgICAgIHJldHVy biAhbGlzdF9lbXB0eSgmcS0+dGFza19saXN0KTsKfQoKc3RhdGljIGlubGluZSB2b2lkIF9fYWRk X3dhaXRfcXVldWUod2FpdF9xdWV1ZV9oZWFkX3QgKmhlYWQsIHdhaXRfcXVldWVfdCAqbmV3KQp7 CiMgMjAzICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC93YWl0LmgiCiAgICAg ICAgbGlzdF9hZGQoJm5ldy0+dGFza19saXN0LCAmaGVhZC0+dGFza19saXN0KTsKfQoKCgoKc3Rh dGljIGlubGluZSB2b2lkIF9fYWRkX3dhaXRfcXVldWVfdGFpbCh3YWl0X3F1ZXVlX2hlYWRfdCAq aGVhZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2Fp dF9xdWV1ZV90ICpuZXcpCnsKIyAyMjAgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xp bnV4L3dhaXQuaCIKICAgICAgICBsaXN0X2FkZF90YWlsKCZuZXctPnRhc2tfbGlzdCwgJmhlYWQt PnRhc2tfbGlzdCk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBfX3JlbW92ZV93YWl0X3F1ZXVlKHdh aXRfcXVldWVfaGVhZF90ICpoZWFkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHdhaXRfcXVldWVfdCAqb2xkKQp7CgoKCgoKICAgICAgICBs aXN0X2RlbCgmb2xkLT50YXNrX2xpc3QpOwp9CiMgMTMgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9p bmNsdWRlL2xpbnV4L2ZzLmgiIDIKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUv bGludXgvdmZzLmgiIDEKCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9hc20v c3RhdGZzLmgiIDEKCgoKCgoKCnR5cGVkZWYgX19rZXJuZWxfZnNpZF90IGZzaWRfdDsKCgoKc3Ry dWN0IHN0YXRmcyB7CiAgICAgICAgbG9uZyBmX3R5cGU7CiAgICAgICAgbG9uZyBmX2JzaXplOwog ICAgICAgIGxvbmcgZl9ibG9ja3M7CiAgICAgICAgbG9uZyBmX2JmcmVlOwogICAgICAgIGxvbmcg Zl9iYXZhaWw7CiAgICAgICAgbG9uZyBmX2ZpbGVzOwogICAgICAgIGxvbmcgZl9mZnJlZTsKICAg ICAgICBfX2tlcm5lbF9mc2lkX3QgZl9mc2lkOwogICAgICAgIGxvbmcgZl9uYW1lbGVuOwogICAg ICAgIGxvbmcgZl9zcGFyZVs2XTsKfTsKIyA1ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVk ZS9saW51eC92ZnMuaCIgMgojIDE1ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51 eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvbmV0Lmgi IDEKIyAyMiAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvbmV0LmgiCiMgMSAi L3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvc29ja2V0LmgiIDEKCgoKCgojIDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS9zb2NrZXQuaCIgMQoKCgojIDEgIi91 c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS9zb2NraW9zLmgiIDEKIyA1ICIvdXNyL3Ny Yy9saW51eC0yLjQuMjAvaW5jbHVkZS9hc20vc29ja2V0LmgiIDIKIyA3ICIvdXNyL3NyYy9saW51 eC0yLjQuMjAvaW5jbHVkZS9saW51eC9zb2NrZXQuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIu NC4yMC9pbmNsdWRlL2xpbnV4L3NvY2tpb3MuaCIgMQojIDggIi91c3Ivc3JjL2xpbnV4LTIuNC4y MC9pbmNsdWRlL2xpbnV4L3NvY2tldC5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2lu Y2x1ZGUvbGludXgvdWlvLmgiIDEKIyAxOSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUv bGludXgvdWlvLmgiCnN0cnVjdCBpb3ZlYwp7CiAgICAgICAgdm9pZCAqaW92X2Jhc2U7CiAgICAg ICAgX19rZXJuZWxfc2l6ZV90IGlvdl9sZW47Cn07CiMgOSAiL3Vzci9zcmMvbGludXgtMi40LjIw L2luY2x1ZGUvbGludXgvc29ja2V0LmgiIDIKCgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHNhX2Zh bWlseV90OwoKCgoKCnN0cnVjdCBzb2NrYWRkciB7CiAgICAgICAgc2FfZmFtaWx5X3Qgc2FfZmFt aWx5OwogICAgICAgIGNoYXIgc2FfZGF0YVsxNF07Cn07CgpzdHJ1Y3QgbGluZ2VyIHsKICAgICAg ICBpbnQgbF9vbm9mZjsKICAgICAgICBpbnQgbF9saW5nZXI7Cn07CiMgMzQgIi91c3Ivc3JjL2xp bnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L3NvY2tldC5oIgpzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFn ZSB7CiAgICAgICAgc2FfZmFtaWx5X3Qgc3NfZmFtaWx5OwoKICAgICAgICBjaGFyIF9fZGF0YVsx MjggLSBzaXplb2Yoc2FfZmFtaWx5X3QpXTsKCgp9IF9fYXR0cmlidXRlX18gKChhbGlnbmVkKChf X2FsaWdub2ZfXyAoc3RydWN0IHNvY2thZGRyICopKSkpKTsKCgoKCgoKCnN0cnVjdCBtc2doZHIg ewogICAgICAgIHZvaWQgKiBtc2dfbmFtZTsKICAgICAgICBpbnQgbXNnX25hbWVsZW47CiAgICAg ICAgc3RydWN0IGlvdmVjICogbXNnX2lvdjsKICAgICAgICBfX2tlcm5lbF9zaXplX3QgbXNnX2lv dmxlbjsKICAgICAgICB2b2lkICogbXNnX2NvbnRyb2w7CiAgICAgICAgX19rZXJuZWxfc2l6ZV90 IG1zZ19jb250cm9sbGVuOwogICAgICAgIHVuc2lnbmVkIG1zZ19mbGFnczsKfTsKCgoKCgoKCnN0 cnVjdCBjbXNnaGRyIHsKICAgICAgICBfX2tlcm5lbF9zaXplX3QgY21zZ19sZW47CiAgICAgICAg aW50IGNtc2dfbGV2ZWw7CiAgICAgICAgaW50IGNtc2dfdHlwZTsKfTsKIyAxMTcgIi91c3Ivc3Jj L2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L3NvY2tldC5oIgpzdGF0aWMgaW5saW5lIHN0cnVj dCBjbXNnaGRyICogX19jbXNnX254dGhkcih2b2lkICpfX2N0bCwgX19rZXJuZWxfc2l6ZV90IF9f c2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgY21zZ2hkciAqX19jbXNnKQp7CiAgICAgICAgc3RydWN0IGNtc2doZHIgKiBfX3B0cjsKCiAg ICAgICAgX19wdHIgPSAoc3RydWN0IGNtc2doZHIqKSgoKHVuc2lnbmVkIGNoYXIgKikgX19jbXNn KSArICggKChfX2Ntc2ctPmNtc2dfbGVuKStzaXplb2YobG9uZyktMSkgJiB+KHNpemVvZihsb25n KS0xKSApKTsKICAgICAgICBpZiAoKHVuc2lnbmVkIGxvbmcpKChjaGFyKikoX19wdHIrMSkgLSAo Y2hhciAqKSBfX2N0bCkgPiBfX3NpemUpCiAgICAgICAgICAgICAgICByZXR1cm4gKHN0cnVjdCBj bXNnaGRyICopMDsKCiAgICAgICAgcmV0dXJuIF9fcHRyOwp9CgpzdGF0aWMgaW5saW5lIHN0cnVj dCBjbXNnaGRyICogY21zZ19ueHRoZHIgKHN0cnVjdCBtc2doZHIgKl9fbXNnLCBzdHJ1Y3QgY21z Z2hkciAqX19jbXNnKQp7CiAgICAgICAgcmV0dXJuIF9fY21zZ19ueHRoZHIoX19tc2ctPm1zZ19j b250cm9sLCBfX21zZy0+bXNnX2NvbnRyb2xsZW4sIF9fY21zZyk7Cn0KCgoKCgoKCnN0cnVjdCB1 Y3JlZCB7CiAgICAgICAgX191MzIgcGlkOwogICAgICAgIF9fdTMyIHVpZDsKICAgICAgICBfX3Uz MiBnaWQ7Cn07CiMgMjY0ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9zb2Nr ZXQuaCIKZXh0ZXJuIGludCBtZW1jcHlfZnJvbWlvdmVjKHVuc2lnbmVkIGNoYXIgKmtkYXRhLCBz dHJ1Y3QgaW92ZWMgKmlvdiwgaW50IGxlbik7CmV4dGVybiBpbnQgbWVtY3B5X2Zyb21pb3ZlY2Vu ZCh1bnNpZ25lZCBjaGFyICprZGF0YSwgc3RydWN0IGlvdmVjICppb3YsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50IG9mZnNldCwgaW50IGxlbik7CmV4dGVybiBpbnQgY3N1bV9w YXJ0aWFsX2NvcHlfZnJvbWlvdmVjZW5kKHVuc2lnbmVkIGNoYXIgKmtkYXRhLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaW92ZWMgKmlvdiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxlbiwgaW50ICpj c3VtcCk7CgpleHRlcm4gaW50IHZlcmlmeV9pb3ZlYyhzdHJ1Y3QgbXNnaGRyICptLCBzdHJ1Y3Qg aW92ZWMgKmlvdiwgY2hhciAqYWRkcmVzcywgaW50IG1vZGUpOwpleHRlcm4gaW50IG1lbWNweV90 b2lvdmVjKHN0cnVjdCBpb3ZlYyAqdiwgdW5zaWduZWQgY2hhciAqa2RhdGEsIGludCBsZW4pOwpl eHRlcm4gdm9pZCBtZW1jcHlfdG9rZXJuZWxpb3ZlYyhzdHJ1Y3QgaW92ZWMgKmlvdiwgdW5zaWdu ZWQgY2hhciAqa2RhdGEsIGludCBsZW4pOwpleHRlcm4gaW50IG1vdmVfYWRkcl90b191c2VyKHZv aWQgKmthZGRyLCBpbnQga2xlbiwgdm9pZCAqdWFkZHIsIGludCAqdWxlbik7CmV4dGVybiBpbnQg bW92ZV9hZGRyX3RvX2tlcm5lbCh2b2lkICp1YWRkciwgaW50IHVsZW4sIHZvaWQgKmthZGRyKTsK ZXh0ZXJuIGludCBwdXRfY21zZyhzdHJ1Y3QgbXNnaGRyKiwgaW50IGxldmVsLCBpbnQgdHlwZSwg aW50IGxlbiwgdm9pZCAqZGF0YSk7CiMgMjMgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRl L2xpbnV4L25ldC5oIiAyCgoKc3RydWN0IHBvbGxfdGFibGVfc3RydWN0OwojIDQ5ICIvdXNyL3Ny Yy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9uZXQuaCIKdHlwZWRlZiBlbnVtIHsKICBTU19G UkVFID0gMCwKICBTU19VTkNPTk5FQ1RFRCwKICBTU19DT05ORUNUSU5HLAogIFNTX0NPTk5FQ1RF RCwKICBTU19ESVNDT05ORUNUSU5HCn0gc29ja2V0X3N0YXRlOwojIDY1ICIvdXNyL3NyYy9saW51 eC0yLjQuMjAvaW5jbHVkZS9saW51eC9uZXQuaCIKc3RydWN0IHNvY2tldAp7CiAgICAgICAgc29j a2V0X3N0YXRlIHN0YXRlOwoKICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogICAgICAgIHN0 cnVjdCBwcm90b19vcHMgKm9wczsKICAgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlOwogICAgICAg IHN0cnVjdCBmYXN5bmNfc3RydWN0ICpmYXN5bmNfbGlzdDsKICAgICAgICBzdHJ1Y3QgZmlsZSAq ZmlsZTsKICAgICAgICBzdHJ1Y3Qgc29jayAqc2s7CiAgICAgICAgd2FpdF9xdWV1ZV9oZWFkX3Qg d2FpdDsKCiAgICAgICAgc2hvcnQgdHlwZTsKICAgICAgICB1bnNpZ25lZCBjaGFyIHBhc3NjcmVk Owp9OwoKCgpzdHJ1Y3Qgc2NtX2Nvb2tpZTsKc3RydWN0IHZtX2FyZWFfc3RydWN0OwpzdHJ1Y3Qg cGFnZTsKCnN0cnVjdCBwcm90b19vcHMgewogIGludCBmYW1pbHk7CgogIGludCAoKnJlbGVhc2Up IChzdHJ1Y3Qgc29ja2V0ICpzb2NrKTsKICBpbnQgKCpiaW5kKSAoc3RydWN0IHNvY2tldCAqc29j aywgc3RydWN0IHNvY2thZGRyICp1bXlhZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgaW50 IHNvY2thZGRyX2xlbik7CiAgaW50ICgqY29ubmVjdCkgKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0 cnVjdCBzb2NrYWRkciAqdXNlcnZhZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNv Y2thZGRyX2xlbiwgaW50IGZsYWdzKTsKICBpbnQgKCpzb2NrZXRwYWlyKSAoc3RydWN0IHNvY2tl dCAqc29jazEsIHN0cnVjdCBzb2NrZXQgKnNvY2syKTsKICBpbnQgKCphY2NlcHQpIChzdHJ1Y3Qg c29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLAogICAgICAgICAgICAgICAgICAg ICAgICAgaW50IGZsYWdzKTsKICBpbnQgKCpnZXRuYW1lKSAoc3RydWN0IHNvY2tldCAqc29jaywg c3RydWN0IHNvY2thZGRyICp1YWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqdXNv Y2thZGRyX2xlbiwgaW50IHBlZXIpOwogIHVuc2lnbmVkIGludCAoKnBvbGwpIChzdHJ1Y3QgZmls ZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICp3 YWl0KTsKICBpbnQgKCppb2N0bCkgKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBj bWQsCiAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGFyZyk7CiAgaW50ICgq bGlzdGVuKSAoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxlbik7CiAgaW50ICgqc2h1dGRvd24p IChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgZmxhZ3MpOwogIGludCAoKnNldHNvY2tvcHQpIChz dHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAogICAgICAgICAgICAg ICAgICAgICAgICAgY2hhciAqb3B0dmFsLCBpbnQgb3B0bGVuKTsKICBpbnQgKCpnZXRzb2Nrb3B0 KSAoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKICAgICAgICAg ICAgICAgICAgICAgICAgIGNoYXIgKm9wdHZhbCwgaW50ICpvcHRsZW4pOwogIGludCAoKnNlbmRt c2cpIChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBpbnQgdG90YWxfbGVu LCBzdHJ1Y3Qgc2NtX2Nvb2tpZSAqc2NtKTsKICBpbnQgKCpyZWN2bXNnKSAoc3RydWN0IHNvY2tl dCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgaW50IHRvdGFsX2xlbiwgaW50IGZsYWdzLCBzdHJ1 Y3Qgc2NtX2Nvb2tpZSAqc2NtKTsKICBpbnQgKCptbWFwKSAoc3RydWN0IGZpbGUgKmZpbGUsIHN0 cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYSk7CiAgc3NpemVf dCAoKnNlbmRwYWdlKSAoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHBhZ2UgKnBhZ2UsIGlu dCBvZmZzZXQsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpOwp9OwoKc3RydWN0IG5ldF9wcm90b19m YW1pbHkKewogICAgICAgIGludCBmYW1pbHk7CiAgICAgICAgaW50ICgqY3JlYXRlKShzdHJ1Y3Qg c29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wpOwoKCiAgICAgICAgc2hvcnQgYXV0aGVudGljYXRp b247CiAgICAgICAgc2hvcnQgZW5jcnlwdGlvbjsKICAgICAgICBzaG9ydCBlbmNyeXB0X25ldDsK fTsKCnN0cnVjdCBuZXRfcHJvdG8KewogICAgICAgIGNvbnN0IGNoYXIgKm5hbWU7CiAgICAgICAg dm9pZCAoKmluaXRfZnVuYykoc3RydWN0IG5ldF9wcm90byAqKTsKfTsKCmV4dGVybiBpbnQgc29j a193YWtlX2FzeW5jKHN0cnVjdCBzb2NrZXQgKnNrLCBpbnQgaG93LCBpbnQgYmFuZCk7CmV4dGVy biBpbnQgc29ja19yZWdpc3RlcihzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseSAqZmFtKTsKZXh0ZXJu IGludCBzb2NrX3VucmVnaXN0ZXIoaW50IGZhbWlseSk7CmV4dGVybiBzdHJ1Y3Qgc29ja2V0ICpz b2NrX2FsbG9jKHZvaWQpOwpleHRlcm4gaW50IHNvY2tfY3JlYXRlKGludCBmYW1pbHksIGludCB0 eXBlLCBpbnQgcHJvdG8sIHN0cnVjdCBzb2NrZXQgKiopOwpleHRlcm4gdm9pZCBzb2NrX3JlbGVh c2Uoc3RydWN0IHNvY2tldCAqKTsKZXh0ZXJuIGludCBzb2NrX3NlbmRtc2coc3RydWN0IHNvY2tl dCAqLCBzdHJ1Y3QgbXNnaGRyICptLCBpbnQgbGVuKTsKZXh0ZXJuIGludCBzb2NrX3JlY3Ztc2co c3RydWN0IHNvY2tldCAqLCBzdHJ1Y3QgbXNnaGRyICptLCBpbnQgbGVuLCBpbnQgZmxhZ3MpOwpl eHRlcm4gaW50IHNvY2tfcmVhZHZfd3JpdGV2KGludCB0eXBlLCBzdHJ1Y3QgaW5vZGUgKiBpbm9k ZSwgc3RydWN0IGZpbGUgKiBmaWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3Qgc3RydWN0IGlvdmVjICogaW92LCBsb25nIGNvdW50LCBsb25nIHNpemUpOwoKZXh0ZXJu IGludCBuZXRfcmF0ZWxpbWl0KHZvaWQpOwpleHRlcm4gdW5zaWduZWQgbG9uZyBuZXRfcmFuZG9t KHZvaWQpOwpleHRlcm4gdm9pZCBuZXRfc3JhbmRvbSh1bnNpZ25lZCBsb25nKTsKIyAxNiAiL3Vz ci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xp bnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L2tkZXZfdC5oIiAxCiMgNjcgIi91c3Ivc3JjL2xpbnV4 LTIuNC4yMC9pbmNsdWRlL2xpbnV4L2tkZXZfdC5oIgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGtk ZXZfdDsKIyA3NiAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgva2Rldl90Lmgi CmV4dGVybiBjb25zdCBjaGFyICoga2Rldm5hbWUoa2Rldl90KTsKIyA5MiAiL3Vzci9zcmMvbGlu dXgtMi40LjIwL2luY2x1ZGUvbGludXgva2Rldl90LmgiCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQg aW50IGtkZXZfdF90b19ucihrZGV2X3QgZGV2KSB7CiAgICAgICAgcmV0dXJuICgoKHVuc2lnbmVk IGludCkgKChkZXYpID4+IDgpKTw8OCkgfCAoKHVuc2lnbmVkIGludCkgKChkZXYpICYgKCgxVSA8 PCA4KSAtIDEpKSk7Cn0KCnN0YXRpYyBpbmxpbmUga2Rldl90IHRvX2tkZXZfdChpbnQgZGV2KQp7 CiAgICAgICAgaW50IG1ham9yLCBtaW5vcjsKIyAxMDcgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9p bmNsdWRlL2xpbnV4L2tkZXZfdC5oIgogICAgICAgIG1ham9yID0gKGRldiA+PiA4KTsKICAgICAg ICBtaW5vciA9IChkZXYgJiAweGZmKTsKCiAgICAgICAgcmV0dXJuICgoKG1ham9yKSA8PCA4KSB8 IChtaW5vcikpOwp9CiMgMTcgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L2Zz LmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9pb2N0bC5oIiAx CgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvYXNtL2lvY3RsLmgiIDEKIyA1 ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9pb2N0bC5oIiAyCiMgMTggIi91 c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKCiMgMSAiL3Vzci9zcmMv bGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvZGNhY2hlLmgiIDEKCgoKCgoKIyAxICIvdXNyL3Ny Yy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9tb3VudC5oIiAxCiMgMTkgIi91c3Ivc3JjL2xp bnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L21vdW50LmgiCnN0cnVjdCB2ZnNtb3VudAp7CiAgICAg ICAgc3RydWN0IGxpc3RfaGVhZCBtbnRfaGFzaDsKICAgICAgICBzdHJ1Y3QgdmZzbW91bnQgKm1u dF9wYXJlbnQ7CiAgICAgICAgc3RydWN0IGRlbnRyeSAqbW50X21vdW50cG9pbnQ7CiAgICAgICAg c3RydWN0IGRlbnRyeSAqbW50X3Jvb3Q7CiAgICAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICptbnRf c2I7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBtbnRfbW91bnRzOwogICAgICAgIHN0cnVjdCBs aXN0X2hlYWQgbW50X2NoaWxkOwogICAgICAgIGF0b21pY190IG1udF9jb3VudDsKICAgICAgICBp bnQgbW50X2ZsYWdzOwogICAgICAgIGNoYXIgKm1udF9kZXZuYW1lOwogICAgICAgIHN0cnVjdCBs aXN0X2hlYWQgbW50X2xpc3Q7Cn07CgpzdGF0aWMgaW5saW5lIHN0cnVjdCB2ZnNtb3VudCAqbW50 Z2V0KHN0cnVjdCB2ZnNtb3VudCAqbW50KQp7CiAgICAgICAgaWYgKG1udCkKICAgICAgICAgICAg ICAgIGF0b21pY19pbmMoJm1udC0+bW50X2NvdW50KTsKICAgICAgICByZXR1cm4gbW50Owp9Cgpl eHRlcm4gdm9pZCBfX21udHB1dChzdHJ1Y3QgdmZzbW91bnQgKm1udCk7CgpzdGF0aWMgaW5saW5l IHZvaWQgbW50cHV0KHN0cnVjdCB2ZnNtb3VudCAqbW50KQp7CiAgICAgICAgaWYgKG1udCkgewog ICAgICAgICAgICAgICAgaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJm1udC0+bW50X2NvdW50KSkK ICAgICAgICAgICAgICAgICAgICAgICAgX19tbnRwdXQobW50KTsKICAgICAgICB9Cn0KIyA4ICIv dXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9kY2FjaGUuaCIgMgojIDI1ICIvdXNy L3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9kY2FjaGUuaCIKc3RydWN0IHFzdHIgewog ICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBuYW1lOwogICAgICAgIHVuc2lnbmVkIGludCBs ZW47CiAgICAgICAgdW5zaWduZWQgaW50IGhhc2g7Cn07CgpzdHJ1Y3QgZGVudHJ5X3N0YXRfdCB7 CiAgICAgICAgaW50IG5yX2RlbnRyeTsKICAgICAgICBpbnQgbnJfdW51c2VkOwogICAgICAgIGlu dCBhZ2VfbGltaXQ7CiAgICAgICAgaW50IHdhbnRfcGFnZXM7CiAgICAgICAgaW50IGR1bW15WzJd Owp9OwpleHRlcm4gc3RydWN0IGRlbnRyeV9zdGF0X3QgZGVudHJ5X3N0YXQ7CgoKCgoKCnN0YXRp YyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgcGFydGlhbF9uYW1lX2hhc2godW5zaWduZWQgbG9u ZyBjLCB1bnNpZ25lZCBsb25nIHByZXZoYXNoKQp7CiAgICAgICAgcmV0dXJuIChwcmV2aGFzaCAr IChjIDw8IDQpICsgKGMgPj4gNCkpICogMTE7Cn0KCgpzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25l ZCBsb25nIGVuZF9uYW1lX2hhc2godW5zaWduZWQgbG9uZyBoYXNoKQp7CiAgICAgICAgcmV0dXJu ICh1bnNpZ25lZCBpbnQpIGhhc2g7Cn0KCgpzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQg ZnVsbF9uYW1lX2hhc2goY29uc3QgdW5zaWduZWQgY2hhciAqIG5hbWUsIHVuc2lnbmVkIGludCBs ZW4pCnsKICAgICAgICB1bnNpZ25lZCBsb25nIGhhc2ggPSAwOwogICAgICAgIHdoaWxlIChsZW4t LSkKICAgICAgICAgICAgICAgIGhhc2ggPSBwYXJ0aWFsX25hbWVfaGFzaCgqbmFtZSsrLCBoYXNo KTsKICAgICAgICByZXR1cm4gZW5kX25hbWVfaGFzaChoYXNoKTsKfQoKCgpzdHJ1Y3QgZGVudHJ5 IHsKICAgICAgICBhdG9taWNfdCBkX2NvdW50OwogICAgICAgIHVuc2lnbmVkIGludCBkX2ZsYWdz OwogICAgICAgIHN0cnVjdCBpbm9kZSAqIGRfaW5vZGU7CiAgICAgICAgc3RydWN0IGRlbnRyeSAq IGRfcGFyZW50OwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgZF9oYXNoOwogICAgICAgIHN0cnVj dCBsaXN0X2hlYWQgZF9scnU7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBkX2NoaWxkOwogICAg ICAgIHN0cnVjdCBsaXN0X2hlYWQgZF9zdWJkaXJzOwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQg ZF9hbGlhczsKICAgICAgICBpbnQgZF9tb3VudGVkOwogICAgICAgIHN0cnVjdCBxc3RyIGRfbmFt ZTsKICAgICAgICB1bnNpZ25lZCBsb25nIGRfdGltZTsKICAgICAgICBzdHJ1Y3QgZGVudHJ5X29w ZXJhdGlvbnMgKmRfb3A7CiAgICAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICogZF9zYjsKICAgICAg ICB1bnNpZ25lZCBsb25nIGRfdmZzX2ZsYWdzOwogICAgICAgIHZvaWQgKiBkX2ZzZGF0YTsKICAg ICAgICB1bnNpZ25lZCBjaGFyIGRfaW5hbWVbMTZdOwp9OwoKc3RydWN0IGRlbnRyeV9vcGVyYXRp b25zIHsKICAgICAgICBpbnQgKCpkX3JldmFsaWRhdGUpKHN0cnVjdCBkZW50cnkgKiwgaW50KTsK ICAgICAgICBpbnQgKCpkX2hhc2gpIChzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBxc3RyICopOwog ICAgICAgIGludCAoKmRfY29tcGFyZSkgKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IHFzdHIgKiwg c3RydWN0IHFzdHIgKik7CiAgICAgICAgaW50ICgqZF9kZWxldGUpKHN0cnVjdCBkZW50cnkgKik7 CiAgICAgICAgdm9pZCAoKmRfcmVsZWFzZSkoc3RydWN0IGRlbnRyeSAqKTsKICAgICAgICB2b2lk ICgqZF9pcHV0KShzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpbm9kZSAqKTsKfTsKIyAxMjggIi91 c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L2RjYWNoZS5oIgpleHRlcm4gc3Bpbmxv Y2tfdCBkY2FjaGVfbG9jazsKIyAxNDcgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xp bnV4L2RjYWNoZS5oIgpzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGRfZHJvcChzdHJ1Y3QgZGVudHJ5 ICogZGVudHJ5KQp7CiAgICAgICAgc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7CiAgICAgICAgbGlz dF9kZWwoJmRlbnRyeS0+ZF9oYXNoKTsKICAgICAgICBkbyB7ICgmZGVudHJ5LT5kX2hhc2gpLT5u ZXh0ID0gKCZkZW50cnktPmRfaGFzaCk7ICgmZGVudHJ5LT5kX2hhc2gpLT5wcmV2ID0gKCZkZW50 cnktPmRfaGFzaCk7IH0gd2hpbGUgKDApOwogICAgICAgIHNwaW5fdW5sb2NrKCZkY2FjaGVfbG9j ayk7Cn0KCnN0YXRpYyBfX2lubGluZV9fIGludCBkbmFtZV9leHRlcm5hbChzdHJ1Y3QgZGVudHJ5 ICpkKQp7CiAgICAgICAgcmV0dXJuIGQtPmRfbmFtZS5uYW1lICE9IGQtPmRfaW5hbWU7Cn0KCgoK CmV4dGVybiB2b2lkIGRfaW5zdGFudGlhdGUoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgaW5vZGUg Kik7CmV4dGVybiB2b2lkIGRfZGVsZXRlKHN0cnVjdCBkZW50cnkgKik7CgoKZXh0ZXJuIHN0cnVj dCBkZW50cnkgKiBkX2FsbG9jKHN0cnVjdCBkZW50cnkgKiwgY29uc3Qgc3RydWN0IHFzdHIgKik7 CmV4dGVybiB2b2lkIHNocmlua19kY2FjaGVfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICopOwpleHRl cm4gdm9pZCBzaHJpbmtfZGNhY2hlX3BhcmVudChzdHJ1Y3QgZGVudHJ5ICopOwpleHRlcm4gaW50 IGRfaW52YWxpZGF0ZShzdHJ1Y3QgZGVudHJ5ICopOwoKCnN0cnVjdCB6b25lX3N0cnVjdDsKCmV4 dGVybiBpbnQgc2hyaW5rX2RjYWNoZV9tZW1vcnkoaW50LCB1bnNpZ25lZCBpbnQpOwpleHRlcm4g dm9pZCBwcnVuZV9kY2FjaGUoaW50KTsKCgpleHRlcm4gaW50IHNocmlua19pY2FjaGVfbWVtb3J5 KGludCwgaW50KTsKZXh0ZXJuIHZvaWQgcHJ1bmVfaWNhY2hlKGludCk7CgoKZXh0ZXJuIGludCBz aHJpbmtfZHFjYWNoZV9tZW1vcnkoaW50LCB1bnNpZ25lZCBpbnQpOwoKCmV4dGVybiBzdHJ1Y3Qg ZGVudHJ5ICogZF9hbGxvY19yb290KHN0cnVjdCBpbm9kZSAqKTsKCgpleHRlcm4gdm9pZCBkX2dl bm9jaWRlKHN0cnVjdCBkZW50cnkgKik7CgpleHRlcm4gc3RydWN0IGRlbnRyeSAqZF9maW5kX2Fs aWFzKHN0cnVjdCBpbm9kZSAqKTsKZXh0ZXJuIHZvaWQgZF9wcnVuZV9hbGlhc2VzKHN0cnVjdCBp bm9kZSAqKTsKCgpleHRlcm4gaW50IGhhdmVfc3VibW91bnRzKHN0cnVjdCBkZW50cnkgKik7CgoK CgpleHRlcm4gdm9pZCBkX3JlaGFzaChzdHJ1Y3QgZGVudHJ5ICopOwojIDIxMSAiL3Vzci9zcmMv bGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvZGNhY2hlLmgiCnN0YXRpYyBfX2lubGluZV9fIHZv aWQgZF9hZGQoc3RydWN0IGRlbnRyeSAqIGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKiBpbm9kZSkKewog ICAgICAgIGRfaW5zdGFudGlhdGUoZW50cnksIGlub2RlKTsKICAgICAgICBkX3JlaGFzaChlbnRy eSk7Cn0KCgpleHRlcm4gdm9pZCBkX21vdmUoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgZGVudHJ5 ICopOwoKCmV4dGVybiBzdHJ1Y3QgZGVudHJ5ICogZF9sb29rdXAoc3RydWN0IGRlbnRyeSAqLCBz dHJ1Y3QgcXN0ciAqKTsKCgpleHRlcm4gaW50IGRfdmFsaWRhdGUoc3RydWN0IGRlbnRyeSAqLCBz dHJ1Y3QgZGVudHJ5ICopOwoKZXh0ZXJuIGNoYXIgKiBfX2RfcGF0aChzdHJ1Y3QgZGVudHJ5ICos IHN0cnVjdCB2ZnNtb3VudCAqLCBzdHJ1Y3QgZGVudHJ5ICosCiAgICAgICAgc3RydWN0IHZmc21v dW50ICosIGNoYXIgKiwgaW50KTsKIyAyNDQgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRl L2xpbnV4L2RjYWNoZS5oIgpzdGF0aWMgX19pbmxpbmVfXyBzdHJ1Y3QgZGVudHJ5ICogZGdldChz dHJ1Y3QgZGVudHJ5ICpkZW50cnkpCnsKICAgICAgICBpZiAoZGVudHJ5KSB7CiAgICAgICAgICAg ICAgICBpZiAoISgoJmRlbnRyeS0+ZF9jb3VudCktPmNvdW50ZXIpKQogICAgICAgICAgICAgICAg ICAgICAgICBfX291dF9vZl9saW5lX2J1ZygyNDgpOwogICAgICAgICAgICAgICAgYXRvbWljX2lu YygmZGVudHJ5LT5kX2NvdW50KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGRlbnRyeTsKfQoK ZXh0ZXJuIHN0cnVjdCBkZW50cnkgKiBkZ2V0X2xvY2tlZChzdHJ1Y3QgZGVudHJ5ICopOwojIDI2 MyAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvZGNhY2hlLmgiCnN0YXRpYyBf X2lubGluZV9fIGludCBkX3VuaGFzaGVkKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKewogICAgICAg IHJldHVybiBsaXN0X2VtcHR5KCZkZW50cnktPmRfaGFzaCk7Cn0KCmV4dGVybiB2b2lkIGRwdXQo c3RydWN0IGRlbnRyeSAqKTsKCnN0YXRpYyBfX2lubGluZV9fIGludCBkX21vdW50cG9pbnQoc3Ry dWN0IGRlbnRyeSAqZGVudHJ5KQp7CiAgICAgICAgcmV0dXJuIGRlbnRyeS0+ZF9tb3VudGVkOwp9 CgpleHRlcm4gc3RydWN0IHZmc21vdW50ICpsb29rdXBfbW50KHN0cnVjdCB2ZnNtb3VudCAqLCBz dHJ1Y3QgZGVudHJ5ICopOwojIDIwICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51 eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvc3RhdC5o IiAxCgoKCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9hc20vc3RhdC5oIiAx CgoKCnN0cnVjdCBfX29sZF9rZXJuZWxfc3RhdCB7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc3Rf ZGV2OwogICAgICAgIHVuc2lnbmVkIHNob3J0IHN0X2lubzsKICAgICAgICB1bnNpZ25lZCBzaG9y dCBzdF9tb2RlOwogICAgICAgIHVuc2lnbmVkIHNob3J0IHN0X25saW5rOwogICAgICAgIHVuc2ln bmVkIHNob3J0IHN0X3VpZDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzdF9naWQ7CiAgICAgICAg dW5zaWduZWQgc2hvcnQgc3RfcmRldjsKICAgICAgICB1bnNpZ25lZCBsb25nIHN0X3NpemU7CiAg ICAgICAgdW5zaWduZWQgbG9uZyBzdF9hdGltZTsKICAgICAgICB1bnNpZ25lZCBsb25nIHN0X210 aW1lOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc3RfY3RpbWU7Cn07CgpzdHJ1Y3Qgc3RhdCB7CiAg ICAgICAgdW5zaWduZWQgc2hvcnQgc3RfZGV2OwogICAgICAgIHVuc2lnbmVkIHNob3J0IF9fcGFk MTsKICAgICAgICB1bnNpZ25lZCBsb25nIHN0X2lubzsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBz dF9tb2RlOwogICAgICAgIHVuc2lnbmVkIHNob3J0IHN0X25saW5rOwogICAgICAgIHVuc2lnbmVk IHNob3J0IHN0X3VpZDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzdF9naWQ7CiAgICAgICAgdW5z aWduZWQgc2hvcnQgc3RfcmRldjsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBfX3BhZDI7CiAgICAg ICAgdW5zaWduZWQgbG9uZyBzdF9zaXplOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc3RfYmxrc2l6 ZTsKICAgICAgICB1bnNpZ25lZCBsb25nIHN0X2Jsb2NrczsKICAgICAgICB1bnNpZ25lZCBsb25n IHN0X2F0aW1lOwogICAgICAgIHVuc2lnbmVkIGxvbmcgX191bnVzZWQxOwogICAgICAgIHVuc2ln bmVkIGxvbmcgc3RfbXRpbWU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBfX3VudXNlZDI7CiAgICAg ICAgdW5zaWduZWQgbG9uZyBzdF9jdGltZTsKICAgICAgICB1bnNpZ25lZCBsb25nIF9fdW51c2Vk MzsKICAgICAgICB1bnNpZ25lZCBsb25nIF9fdW51c2VkNDsKICAgICAgICB1bnNpZ25lZCBsb25n IF9fdW51c2VkNTsKfTsKCgoKCnN0cnVjdCBzdGF0NjQgewogICAgICAgIHVuc2lnbmVkIHNob3J0 IHN0X2RldjsKICAgICAgICB1bnNpZ25lZCBjaGFyIF9fcGFkMFsxMF07CgoKICAgICAgICB1bnNp Z25lZCBsb25nIF9fc3RfaW5vOwoKICAgICAgICB1bnNpZ25lZCBpbnQgc3RfbW9kZTsKICAgICAg ICB1bnNpZ25lZCBpbnQgc3Rfbmxpbms7CgogICAgICAgIHVuc2lnbmVkIGxvbmcgc3RfdWlkOwog ICAgICAgIHVuc2lnbmVkIGxvbmcgc3RfZ2lkOwoKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzdF9y ZGV2OwogICAgICAgIHVuc2lnbmVkIGNoYXIgX19wYWQzWzEwXTsKCiAgICAgICAgbG9uZyBsb25n IHN0X3NpemU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzdF9ibGtzaXplOwoKICAgICAgICB1bnNp Z25lZCBsb25nIHN0X2Jsb2NrczsKICAgICAgICB1bnNpZ25lZCBsb25nIF9fcGFkNDsKCiAgICAg ICAgdW5zaWduZWQgbG9uZyBzdF9hdGltZTsKICAgICAgICB1bnNpZ25lZCBsb25nIF9fcGFkNTsK CiAgICAgICAgdW5zaWduZWQgbG9uZyBzdF9tdGltZTsKICAgICAgICB1bnNpZ25lZCBsb25nIF9f cGFkNjsKCiAgICAgICAgdW5zaWduZWQgbG9uZyBzdF9jdGltZTsKICAgICAgICB1bnNpZ25lZCBs b25nIF9fcGFkNzsKCiAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHN0X2lubzsKfTsKIyA3ICIv dXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9zdGF0LmgiIDIKIyAyMSAiL3Vzci9z cmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvZnMuaCIgMgoKCiMgMSAiL3Vzci9zcmMvbGlu dXgtMi40LjIwL2luY2x1ZGUvbGludXgvc3RyaW5nLmgiIDEKIyAxNSAiL3Vzci9zcmMvbGludXgt Mi40LjIwL2luY2x1ZGUvbGludXgvc3RyaW5nLmgiCmV4dGVybiBjaGFyICogX19fc3RydG9rOwpl eHRlcm4gY2hhciAqIHN0cnBicmsoY29uc3QgY2hhciAqLGNvbnN0IGNoYXIgKik7CmV4dGVybiBj aGFyICogc3RydG9rKGNoYXIgKixjb25zdCBjaGFyICopOwpleHRlcm4gY2hhciAqIHN0cnNlcChj aGFyICoqLGNvbnN0IGNoYXIgKik7CmV4dGVybiBfX2tlcm5lbF9zaXplX3Qgc3Ryc3BuKGNvbnN0 IGNoYXIgKixjb25zdCBjaGFyICopOwoKCgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2lu Y2x1ZGUvYXNtL3N0cmluZy5oIiAxCiMgMzMgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRl L2FzbS9zdHJpbmcuaCIKc3RhdGljIGlubGluZSBjaGFyICogc3RyY3B5KGNoYXIgKiBkZXN0LGNv bnN0IGNoYXIgKnNyYykKewppbnQgZDAsIGQxLCBkMjsKX19hc21fXyBfX3ZvbGF0aWxlX18oCiAg ICAgICAgIjE6XHRsb2RzYlxuXHQiCiAgICAgICAgInN0b3NiXG5cdCIKICAgICAgICAidGVzdGIg JSVhbCwlJWFsXG5cdCIKICAgICAgICAiam5lIDFiIgogICAgICAgIDogIj0mUyIgKGQwKSwgIj0m RCIgKGQxKSwgIj0mYSIgKGQyKQogICAgICAgIDoiMCIgKHNyYyksIjEiIChkZXN0KSA6ICJtZW1v cnkiKTsKcmV0dXJuIGRlc3Q7Cn0KCgpzdGF0aWMgaW5saW5lIGNoYXIgKiBzdHJuY3B5KGNoYXIg KiBkZXN0LGNvbnN0IGNoYXIgKnNyYyxzaXplX3QgY291bnQpCnsKaW50IGQwLCBkMSwgZDIsIGQz OwpfX2FzbV9fIF9fdm9sYXRpbGVfXygKICAgICAgICAiMTpcdGRlY2wgJTJcblx0IgogICAgICAg ICJqcyAyZlxuXHQiCiAgICAgICAgImxvZHNiXG5cdCIKICAgICAgICAic3Rvc2Jcblx0IgogICAg ICAgICJ0ZXN0YiAlJWFsLCUlYWxcblx0IgogICAgICAgICJqbmUgMWJcblx0IgogICAgICAgICJy ZXBcblx0IgogICAgICAgICJzdG9zYlxuIgogICAgICAgICIyOiIKICAgICAgICA6ICI9JlMiIChk MCksICI9JkQiIChkMSksICI9JmMiIChkMiksICI9JmEiIChkMykKICAgICAgICA6IjAiIChzcmMp LCIxIiAoZGVzdCksIjIiIChjb3VudCkgOiAibWVtb3J5Iik7CnJldHVybiBkZXN0Owp9CgoKc3Rh dGljIGlubGluZSBjaGFyICogc3RyY2F0KGNoYXIgKiBkZXN0LGNvbnN0IGNoYXIgKiBzcmMpCnsK aW50IGQwLCBkMSwgZDIsIGQzOwpfX2FzbV9fIF9fdm9sYXRpbGVfXygKICAgICAgICAicmVwbmVc blx0IgogICAgICAgICJzY2FzYlxuXHQiCiAgICAgICAgImRlY2wgJTFcbiIKICAgICAgICAiMTpc dGxvZHNiXG5cdCIKICAgICAgICAic3Rvc2Jcblx0IgogICAgICAgICJ0ZXN0YiAlJWFsLCUlYWxc blx0IgogICAgICAgICJqbmUgMWIiCiAgICAgICAgOiAiPSZTIiAoZDApLCAiPSZEIiAoZDEpLCAi PSZhIiAoZDIpLCAiPSZjIiAoZDMpCiAgICAgICAgOiAiMCIgKHNyYyksICIxIiAoZGVzdCksICIy IiAoMCksICIzIiAoMHhmZmZmZmZmZik6Im1lbW9yeSIpOwpyZXR1cm4gZGVzdDsKfQoKCnN0YXRp YyBpbmxpbmUgY2hhciAqIHN0cm5jYXQoY2hhciAqIGRlc3QsY29uc3QgY2hhciAqIHNyYyxzaXpl X3QgY291bnQpCnsKaW50IGQwLCBkMSwgZDIsIGQzOwpfX2FzbV9fIF9fdm9sYXRpbGVfXygKICAg ICAgICAicmVwbmVcblx0IgogICAgICAgICJzY2FzYlxuXHQiCiAgICAgICAgImRlY2wgJTFcblx0 IgogICAgICAgICJtb3ZsICU4LCUzXG4iCiAgICAgICAgIjE6XHRkZWNsICUzXG5cdCIKICAgICAg ICAianMgMmZcblx0IgogICAgICAgICJsb2RzYlxuXHQiCiAgICAgICAgInN0b3NiXG5cdCIKICAg ICAgICAidGVzdGIgJSVhbCwlJWFsXG5cdCIKICAgICAgICAiam5lIDFiXG4iCiAgICAgICAgIjI6 XHR4b3JsICUyLCUyXG5cdCIKICAgICAgICAic3Rvc2IiCiAgICAgICAgOiAiPSZTIiAoZDApLCAi PSZEIiAoZDEpLCAiPSZhIiAoZDIpLCAiPSZjIiAoZDMpCiAgICAgICAgOiAiMCIgKHNyYyksIjEi IChkZXN0KSwiMiIgKDApLCIzIiAoMHhmZmZmZmZmZiksICJnIiAoY291bnQpCiAgICAgICAgOiAi bWVtb3J5Iik7CnJldHVybiBkZXN0Owp9CgoKc3RhdGljIGlubGluZSBpbnQgc3RyY21wKGNvbnN0 IGNoYXIgKiBjcyxjb25zdCBjaGFyICogY3QpCnsKaW50IGQwLCBkMTsKcmVnaXN0ZXIgaW50IF9f cmVzOwpfX2FzbV9fIF9fdm9sYXRpbGVfXygKICAgICAgICAiMTpcdGxvZHNiXG5cdCIKICAgICAg ICAic2Nhc2Jcblx0IgogICAgICAgICJqbmUgMmZcblx0IgogICAgICAgICJ0ZXN0YiAlJWFsLCUl YWxcblx0IgogICAgICAgICJqbmUgMWJcblx0IgogICAgICAgICJ4b3JsICUlZWF4LCUlZWF4XG5c dCIKICAgICAgICAiam1wIDNmXG4iCiAgICAgICAgIjI6XHRzYmJsICUlZWF4LCUlZWF4XG5cdCIK ICAgICAgICAib3JiICQxLCUlYWxcbiIKICAgICAgICAiMzoiCiAgICAgICAgOiI9YSIgKF9fcmVz KSwgIj0mUyIgKGQwKSwgIj0mRCIgKGQxKQogICAgICAgICAgICAgICAgICAgICA6IjEiIChjcyks IjIiIChjdCkpOwpyZXR1cm4gX19yZXM7Cn0KCgpzdGF0aWMgaW5saW5lIGludCBzdHJuY21wKGNv bnN0IGNoYXIgKiBjcyxjb25zdCBjaGFyICogY3Qsc2l6ZV90IGNvdW50KQp7CnJlZ2lzdGVyIGlu dCBfX3JlczsKaW50IGQwLCBkMSwgZDI7Cl9fYXNtX18gX192b2xhdGlsZV9fKAogICAgICAgICIx Olx0ZGVjbCAlM1xuXHQiCiAgICAgICAgImpzIDJmXG5cdCIKICAgICAgICAibG9kc2Jcblx0Igog ICAgICAgICJzY2FzYlxuXHQiCiAgICAgICAgImpuZSAzZlxuXHQiCiAgICAgICAgInRlc3RiICUl YWwsJSVhbFxuXHQiCiAgICAgICAgImpuZSAxYlxuIgogICAgICAgICIyOlx0eG9ybCAlJWVheCwl JWVheFxuXHQiCiAgICAgICAgImptcCA0ZlxuIgogICAgICAgICIzOlx0c2JibCAlJWVheCwlJWVh eFxuXHQiCiAgICAgICAgIm9yYiAkMSwlJWFsXG4iCiAgICAgICAgIjQ6IgogICAgICAgICAgICAg ICAgICAgICA6Ij1hIiAoX19yZXMpLCAiPSZTIiAoZDApLCAiPSZEIiAoZDEpLCAiPSZjIiAoZDIp CiAgICAgICAgICAgICAgICAgICAgIDoiMSIgKGNzKSwiMiIgKGN0KSwiMyIgKGNvdW50KSk7CnJl dHVybiBfX3JlczsKfQoKCnN0YXRpYyBpbmxpbmUgY2hhciAqIHN0cmNocihjb25zdCBjaGFyICog cywgaW50IGMpCnsKaW50IGQwOwpyZWdpc3RlciBjaGFyICogX19yZXM7Cl9fYXNtX18gX192b2xh dGlsZV9fKAogICAgICAgICJtb3ZiICUlYWwsJSVhaFxuIgogICAgICAgICIxOlx0bG9kc2Jcblx0 IgogICAgICAgICJjbXBiICUlYWgsJSVhbFxuXHQiCiAgICAgICAgImplIDJmXG5cdCIKICAgICAg ICAidGVzdGIgJSVhbCwlJWFsXG5cdCIKICAgICAgICAiam5lIDFiXG5cdCIKICAgICAgICAibW92 bCAkMSwlMVxuIgogICAgICAgICIyOlx0bW92bCAlMSwlMFxuXHQiCiAgICAgICAgImRlY2wgJTAi CiAgICAgICAgOiI9YSIgKF9fcmVzKSwgIj0mUyIgKGQwKSA6ICIxIiAocyksIjAiIChjKSk7CnJl dHVybiBfX3JlczsKfQoKCnN0YXRpYyBpbmxpbmUgY2hhciAqIHN0cnJjaHIoY29uc3QgY2hhciAq IHMsIGludCBjKQp7CmludCBkMCwgZDE7CnJlZ2lzdGVyIGNoYXIgKiBfX3JlczsKX19hc21fXyBf X3ZvbGF0aWxlX18oCiAgICAgICAgIm1vdmIgJSVhbCwlJWFoXG4iCiAgICAgICAgIjE6XHRsb2Rz YlxuXHQiCiAgICAgICAgImNtcGIgJSVhaCwlJWFsXG5cdCIKICAgICAgICAiam5lIDJmXG5cdCIK ICAgICAgICAibGVhbCAtMSglJWVzaSksJTBcbiIKICAgICAgICAiMjpcdHRlc3RiICUlYWwsJSVh bFxuXHQiCiAgICAgICAgImpuZSAxYiIKICAgICAgICA6Ij1nIiAoX19yZXMpLCAiPSZTIiAoZDAp LCAiPSZhIiAoZDEpIDoiMCIgKDApLCIxIiAocyksIjIiIChjKSk7CnJldHVybiBfX3JlczsKfQoK CnN0YXRpYyBpbmxpbmUgc2l6ZV90IHN0cmxlbihjb25zdCBjaGFyICogcykKewppbnQgZDA7CnJl Z2lzdGVyIGludCBfX3JlczsKX19hc21fXyBfX3ZvbGF0aWxlX18oCiAgICAgICAgInJlcG5lXG5c dCIKICAgICAgICAic2Nhc2Jcblx0IgogICAgICAgICJub3RsICUwXG5cdCIKICAgICAgICAiZGVj bCAlMCIKICAgICAgICA6Ij1jIiAoX19yZXMpLCAiPSZEIiAoZDApIDoiMSIgKHMpLCJhIiAoMCks ICIwIiAoMHhmZmZmZmZmZikpOwpyZXR1cm4gX19yZXM7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCAq IF9fbWVtY3B5KHZvaWQgKiB0bywgY29uc3Qgdm9pZCAqIGZyb20sIHNpemVfdCBuKQp7CmludCBk MCwgZDEsIGQyOwpfX2FzbV9fIF9fdm9sYXRpbGVfXygKICAgICAgICAicmVwIDsgbW92c2xcblx0 IgogICAgICAgICJ0ZXN0YiAkMiwlYjRcblx0IgogICAgICAgICJqZSAxZlxuXHQiCiAgICAgICAg Im1vdnN3XG4iCiAgICAgICAgIjE6XHR0ZXN0YiAkMSwlYjRcblx0IgogICAgICAgICJqZSAyZlxu XHQiCiAgICAgICAgIm1vdnNiXG4iCiAgICAgICAgIjI6IgogICAgICAgIDogIj0mYyIgKGQwKSwg Ij0mRCIgKGQxKSwgIj0mUyIgKGQyKQogICAgICAgIDoiMCIgKG4vNCksICJxIiAobiksIjEiICgo bG9uZykgdG8pLCIyIiAoKGxvbmcpIGZyb20pCiAgICAgICAgOiAibWVtb3J5Iik7CnJldHVybiAo dG8pOwp9CgoKCgoKc3RhdGljIGlubGluZSB2b2lkICogX19jb25zdGFudF9tZW1jcHkodm9pZCAq IHRvLCBjb25zdCB2b2lkICogZnJvbSwgc2l6ZV90IG4pCnsKICAgICAgICBzd2l0Y2ggKG4pIHsK ICAgICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRv OwogICAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgICAgICAgICAqKHVuc2ln bmVkIGNoYXIgKil0byA9ICooY29uc3QgdW5zaWduZWQgY2hhciAqKWZyb207CiAgICAgICAgICAg ICAgICAgICAgICAgIHJldHVybiB0bzsKICAgICAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAg ICAgICAgICAgICAgICAgKih1bnNpZ25lZCBzaG9ydCAqKXRvID0gKihjb25zdCB1bnNpZ25lZCBz aG9ydCAqKWZyb207CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0bzsKICAgICAgICAg ICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgICAgICAgICAgICAgKih1bnNpZ25lZCBzaG9ydCAq KXRvID0gKihjb25zdCB1bnNpZ25lZCBzaG9ydCAqKWZyb207CiAgICAgICAgICAgICAgICAgICAg ICAgICooMisodW5zaWduZWQgY2hhciAqKXRvKSA9ICooMisoY29uc3QgdW5zaWduZWQgY2hhciAq KWZyb20pOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG87CiAgICAgICAgICAgICAg ICBjYXNlIDQ6CiAgICAgICAgICAgICAgICAgICAgICAgICoodW5zaWduZWQgbG9uZyAqKXRvID0g Kihjb25zdCB1bnNpZ25lZCBsb25nICopZnJvbTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIHRvOwogICAgICAgICAgICAgICAgY2FzZSA2OgogICAgICAgICAgICAgICAgICAgICAgICAq KHVuc2lnbmVkIGxvbmcgKil0byA9ICooY29uc3QgdW5zaWduZWQgbG9uZyAqKWZyb207CiAgICAg ICAgICAgICAgICAgICAgICAgICooMisodW5zaWduZWQgc2hvcnQgKil0bykgPSAqKDIrKGNvbnN0 IHVuc2lnbmVkIHNob3J0ICopZnJvbSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0 bzsKICAgICAgICAgICAgICAgIGNhc2UgODoKICAgICAgICAgICAgICAgICAgICAgICAgKih1bnNp Z25lZCBsb25nICopdG8gPSAqKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilmcm9tOwogICAgICAgICAg ICAgICAgICAgICAgICAqKDErKHVuc2lnbmVkIGxvbmcgKil0bykgPSAqKDErKGNvbnN0IHVuc2ln bmVkIGxvbmcgKilmcm9tKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvOwogICAg ICAgICAgICAgICAgY2FzZSAxMjoKICAgICAgICAgICAgICAgICAgICAgICAgKih1bnNpZ25lZCBs b25nICopdG8gPSAqKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilmcm9tOwogICAgICAgICAgICAgICAg ICAgICAgICAqKDErKHVuc2lnbmVkIGxvbmcgKil0bykgPSAqKDErKGNvbnN0IHVuc2lnbmVkIGxv bmcgKilmcm9tKTsKICAgICAgICAgICAgICAgICAgICAgICAgKigyKyh1bnNpZ25lZCBsb25nICop dG8pID0gKigyKyhjb25zdCB1bnNpZ25lZCBsb25nICopZnJvbSk7CiAgICAgICAgICAgICAgICAg ICAgICAgIHJldHVybiB0bzsKICAgICAgICAgICAgICAgIGNhc2UgMTY6CiAgICAgICAgICAgICAg ICAgICAgICAgICoodW5zaWduZWQgbG9uZyAqKXRvID0gKihjb25zdCB1bnNpZ25lZCBsb25nICop ZnJvbTsKICAgICAgICAgICAgICAgICAgICAgICAgKigxKyh1bnNpZ25lZCBsb25nICopdG8pID0g KigxKyhjb25zdCB1bnNpZ25lZCBsb25nICopZnJvbSk7CiAgICAgICAgICAgICAgICAgICAgICAg ICooMisodW5zaWduZWQgbG9uZyAqKXRvKSA9ICooMisoY29uc3QgdW5zaWduZWQgbG9uZyAqKWZy b20pOwogICAgICAgICAgICAgICAgICAgICAgICAqKDMrKHVuc2lnbmVkIGxvbmcgKil0bykgPSAq KDMrKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilmcm9tKTsKICAgICAgICAgICAgICAgICAgICAgICAg cmV0dXJuIHRvOwogICAgICAgICAgICAgICAgY2FzZSAyMDoKICAgICAgICAgICAgICAgICAgICAg ICAgKih1bnNpZ25lZCBsb25nICopdG8gPSAqKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilmcm9tOwog ICAgICAgICAgICAgICAgICAgICAgICAqKDErKHVuc2lnbmVkIGxvbmcgKil0bykgPSAqKDErKGNv bnN0IHVuc2lnbmVkIGxvbmcgKilmcm9tKTsKICAgICAgICAgICAgICAgICAgICAgICAgKigyKyh1 bnNpZ25lZCBsb25nICopdG8pID0gKigyKyhjb25zdCB1bnNpZ25lZCBsb25nICopZnJvbSk7CiAg ICAgICAgICAgICAgICAgICAgICAgICooMysodW5zaWduZWQgbG9uZyAqKXRvKSA9ICooMysoY29u c3QgdW5zaWduZWQgbG9uZyAqKWZyb20pOwogICAgICAgICAgICAgICAgICAgICAgICAqKDQrKHVu c2lnbmVkIGxvbmcgKil0bykgPSAqKDQrKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilmcm9tKTsKICAg ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvOwogICAgICAgIH0KCgoKCgoKCnsKICAgICAg ICBpbnQgZDAsIGQxLCBkMjsKICAgICAgICBzd2l0Y2ggKG4gJSA0KSB7CiAgICAgICAgICAgICAg ICBjYXNlIDA6IF9fYXNtX18gX192b2xhdGlsZV9fKCAicmVwIDsgbW92c2wiICIiIDogIj0mYyIg KGQwKSwgIj0mRCIgKGQxKSwgIj0mUyIgKGQyKSA6ICIwIiAobi80KSwiMSIgKChsb25nKSB0byks IjIiICgobG9uZykgZnJvbSkgOiAibWVtb3J5Iik7OyByZXR1cm4gdG87CiAgICAgICAgICAgICAg ICBjYXNlIDE6IF9fYXNtX18gX192b2xhdGlsZV9fKCAicmVwIDsgbW92c2wiICJcblx0bW92c2Ii IDogIj0mYyIgKGQwKSwgIj0mRCIgKGQxKSwgIj0mUyIgKGQyKSA6ICIwIiAobi80KSwiMSIgKChs b25nKSB0byksIjIiICgobG9uZykgZnJvbSkgOiAibWVtb3J5Iik7OyByZXR1cm4gdG87CiAgICAg ICAgICAgICAgICBjYXNlIDI6IF9fYXNtX18gX192b2xhdGlsZV9fKCAicmVwIDsgbW92c2wiICJc blx0bW92c3ciIDogIj0mYyIgKGQwKSwgIj0mRCIgKGQxKSwgIj0mUyIgKGQyKSA6ICIwIiAobi80 KSwiMSIgKChsb25nKSB0byksIjIiICgobG9uZykgZnJvbSkgOiAibWVtb3J5Iik7OyByZXR1cm4g dG87CiAgICAgICAgICAgICAgICBkZWZhdWx0OiBfX2FzbV9fIF9fdm9sYXRpbGVfXyggInJlcCA7 IG1vdnNsIiAiXG5cdG1vdnN3XG5cdG1vdnNiIiA6ICI9JmMiIChkMCksICI9JkQiIChkMSksICI9 JlMiIChkMikgOiAiMCIgKG4vNCksIjEiICgobG9uZykgdG8pLCIyIiAoKGxvbmcpIGZyb20pIDog Im1lbW9yeSIpOzsgcmV0dXJuIHRvOwogICAgICAgIH0KfQoKCn0KIyAzMzUgIi91c3Ivc3JjL2xp bnV4LTIuNC4yMC9pbmNsdWRlL2FzbS9zdHJpbmcuaCIKZXh0ZXJuIHZvaWQgX19zdHJ1Y3RfY3B5 X2J1ZyAodm9pZCk7CiMgMzQ1ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9hc20vc3Ry aW5nLmgiCnN0YXRpYyBpbmxpbmUgdm9pZCAqIG1lbW1vdmUodm9pZCAqIGRlc3QsY29uc3Qgdm9p ZCAqIHNyYywgc2l6ZV90IG4pCnsKaW50IGQwLCBkMSwgZDI7CmlmIChkZXN0PHNyYykKX19hc21f XyBfX3ZvbGF0aWxlX18oCiAgICAgICAgInJlcFxuXHQiCiAgICAgICAgIm1vdnNiIgogICAgICAg IDogIj0mYyIgKGQwKSwgIj0mUyIgKGQxKSwgIj0mRCIgKGQyKQogICAgICAgIDoiMCIgKG4pLCIx IiAoc3JjKSwiMiIgKGRlc3QpCiAgICAgICAgOiAibWVtb3J5Iik7CmVsc2UKX19hc21fXyBfX3Zv bGF0aWxlX18oCiAgICAgICAgInN0ZFxuXHQiCiAgICAgICAgInJlcFxuXHQiCiAgICAgICAgIm1v dnNiXG5cdCIKICAgICAgICAiY2xkIgogICAgICAgIDogIj0mYyIgKGQwKSwgIj0mUyIgKGQxKSwg Ij0mRCIgKGQyKQogICAgICAgIDoiMCIgKG4pLAogICAgICAgICAiMSIgKG4tMSsoY29uc3QgY2hh ciAqKXNyYyksCiAgICAgICAgICIyIiAobi0xKyhjaGFyICopZGVzdCkKICAgICAgICA6Im1lbW9y eSIpOwpyZXR1cm4gZGVzdDsKfQoKCgoKc3RhdGljIGlubGluZSB2b2lkICogbWVtY2hyKGNvbnN0 IHZvaWQgKiBjcyxpbnQgYyxzaXplX3QgY291bnQpCnsKaW50IGQwOwpyZWdpc3RlciB2b2lkICog X19yZXM7CmlmICghY291bnQpCiAgICAgICAgcmV0dXJuICgodm9pZCAqKTApOwpfX2FzbV9fIF9f dm9sYXRpbGVfXygKICAgICAgICAicmVwbmVcblx0IgogICAgICAgICJzY2FzYlxuXHQiCiAgICAg ICAgImplIDFmXG5cdCIKICAgICAgICAibW92bCAkMSwlMFxuIgogICAgICAgICIxOlx0ZGVjbCAl MCIKICAgICAgICA6Ij1EIiAoX19yZXMpLCAiPSZjIiAoZDApIDogImEiIChjKSwiMCIgKGNzKSwi MSIgKGNvdW50KSk7CnJldHVybiBfX3JlczsKfQoKc3RhdGljIGlubGluZSB2b2lkICogX19tZW1z ZXRfZ2VuZXJpYyh2b2lkICogcywgY2hhciBjLHNpemVfdCBjb3VudCkKewppbnQgZDAsIGQxOwpf X2FzbV9fIF9fdm9sYXRpbGVfXygKICAgICAgICAicmVwXG5cdCIKICAgICAgICAic3Rvc2IiCiAg ICAgICAgOiAiPSZjIiAoZDApLCAiPSZEIiAoZDEpCiAgICAgICAgOiJhIiAoYyksIjEiIChzKSwi MCIgKGNvdW50KQogICAgICAgIDoibWVtb3J5Iik7CnJldHVybiBzOwp9CiMgNDA4ICIvdXNyL3Ny Yy9saW51eC0yLjQuMjAvaW5jbHVkZS9hc20vc3RyaW5nLmgiCnN0YXRpYyBpbmxpbmUgdm9pZCAq IF9fY29uc3RhbnRfY19tZW1zZXQodm9pZCAqIHMsIHVuc2lnbmVkIGxvbmcgYywgc2l6ZV90IGNv dW50KQp7CmludCBkMCwgZDE7Cl9fYXNtX18gX192b2xhdGlsZV9fKAogICAgICAgICJyZXAgOyBz dG9zbFxuXHQiCiAgICAgICAgInRlc3RiICQyLCViM1xuXHQiCiAgICAgICAgImplIDFmXG5cdCIK ICAgICAgICAic3Rvc3dcbiIKICAgICAgICAiMTpcdHRlc3RiICQxLCViM1xuXHQiCiAgICAgICAg ImplIDJmXG5cdCIKICAgICAgICAic3Rvc2JcbiIKICAgICAgICAiMjoiCiAgICAgICAgOiAiPSZj IiAoZDApLCAiPSZEIiAoZDEpCiAgICAgICAgOiJhIiAoYyksICJxIiAoY291bnQpLCAiMCIgKGNv dW50LzQpLCAiMSIgKChsb25nKSBzKQogICAgICAgIDoibWVtb3J5Iik7CnJldHVybiAocyk7Cn0K CgoKc3RhdGljIGlubGluZSBzaXplX3Qgc3Rybmxlbihjb25zdCBjaGFyICogcywgc2l6ZV90IGNv dW50KQp7CmludCBkMDsKcmVnaXN0ZXIgaW50IF9fcmVzOwpfX2FzbV9fIF9fdm9sYXRpbGVfXygK ICAgICAgICAibW92bCAlMiwlMFxuXHQiCiAgICAgICAgImptcCAyZlxuIgogICAgICAgICIxOlx0 Y21wYiAkMCwoJTApXG5cdCIKICAgICAgICAiamUgM2Zcblx0IgogICAgICAgICJpbmNsICUwXG4i CiAgICAgICAgIjI6XHRkZWNsICUxXG5cdCIKICAgICAgICAiY21wbCAkLTEsJTFcblx0IgogICAg ICAgICJqbmUgMWJcbiIKICAgICAgICAiMzpcdHN1YmwgJTIsJTAiCiAgICAgICAgOiI9YSIgKF9f cmVzKSwgIj0mZCIgKGQwKQogICAgICAgIDoiYyIgKHMpLCIxIiAoY291bnQpKTsKcmV0dXJuIF9f cmVzOwp9CgoKCgpleHRlcm4gY2hhciAqc3Ryc3RyKGNvbnN0IGNoYXIgKmNzLCBjb25zdCBjaGFy ICpjdCk7CgoKCgoKc3RhdGljIGlubGluZSB2b2lkICogX19jb25zdGFudF9jX2FuZF9jb3VudF9t ZW1zZXQodm9pZCAqIHMsIHVuc2lnbmVkIGxvbmcgcGF0dGVybiwgc2l6ZV90IGNvdW50KQp7CiAg ICAgICAgc3dpdGNoIChjb3VudCkgewogICAgICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAg ICAgICAgICAgICAgICByZXR1cm4gczsKICAgICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAg ICAgICAgICAgICAgICAgKih1bnNpZ25lZCBjaGFyICopcyA9IHBhdHRlcm47CiAgICAgICAgICAg ICAgICAgICAgICAgIHJldHVybiBzOwogICAgICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAg ICAgICAgICAgICAgICAqKHVuc2lnbmVkIHNob3J0ICopcyA9IHBhdHRlcm47CiAgICAgICAgICAg ICAgICAgICAgICAgIHJldHVybiBzOwogICAgICAgICAgICAgICAgY2FzZSAzOgogICAgICAgICAg ICAgICAgICAgICAgICAqKHVuc2lnbmVkIHNob3J0ICopcyA9IHBhdHRlcm47CiAgICAgICAgICAg ICAgICAgICAgICAgICooMisodW5zaWduZWQgY2hhciAqKXMpID0gcGF0dGVybjsKICAgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuIHM7CiAgICAgICAgICAgICAgICBjYXNlIDQ6CiAgICAgICAg ICAgICAgICAgICAgICAgICoodW5zaWduZWQgbG9uZyAqKXMgPSBwYXR0ZXJuOwogICAgICAgICAg ICAgICAgICAgICAgICByZXR1cm4gczsKICAgICAgICB9CgoKCgoKCgp7CiAgICAgICAgaW50IGQw LCBkMTsKICAgICAgICBzd2l0Y2ggKGNvdW50ICUgNCkgewogICAgICAgICAgICAgICAgY2FzZSAw OiBfX2FzbV9fIF9fdm9sYXRpbGVfXyggInJlcCA7IHN0b3NsIiAiIiA6ICI9JmMiIChkMCksICI9 JkQiIChkMSkgOiAiYSIgKHBhdHRlcm4pLCIwIiAoY291bnQvNCksIjEiICgobG9uZykgcykgOiAi bWVtb3J5Iik7IHJldHVybiBzOwogICAgICAgICAgICAgICAgY2FzZSAxOiBfX2FzbV9fIF9fdm9s YXRpbGVfXyggInJlcCA7IHN0b3NsIiAiXG5cdHN0b3NiIiA6ICI9JmMiIChkMCksICI9JkQiIChk MSkgOiAiYSIgKHBhdHRlcm4pLCIwIiAoY291bnQvNCksIjEiICgobG9uZykgcykgOiAibWVtb3J5 Iik7IHJldHVybiBzOwogICAgICAgICAgICAgICAgY2FzZSAyOiBfX2FzbV9fIF9fdm9sYXRpbGVf XyggInJlcCA7IHN0b3NsIiAiXG5cdHN0b3N3IiA6ICI9JmMiIChkMCksICI9JkQiIChkMSkgOiAi YSIgKHBhdHRlcm4pLCIwIiAoY291bnQvNCksIjEiICgobG9uZykgcykgOiAibWVtb3J5Iik7IHJl dHVybiBzOwogICAgICAgICAgICAgICAgZGVmYXVsdDogX19hc21fXyBfX3ZvbGF0aWxlX18oICJy ZXAgOyBzdG9zbCIgIlxuXHRzdG9zd1xuXHRzdG9zYiIgOiAiPSZjIiAoZDApLCAiPSZEIiAoZDEp IDogImEiIChwYXR0ZXJuKSwiMCIgKGNvdW50LzQpLCIxIiAoKGxvbmcpIHMpIDogIm1lbW9yeSIp OyByZXR1cm4gczsKICAgICAgICB9Cn0KCgp9CiMgNTE1ICIvdXNyL3NyYy9saW51eC0yLjQuMjAv aW5jbHVkZS9hc20vc3RyaW5nLmgiCnN0YXRpYyBpbmxpbmUgdm9pZCAqIG1lbXNjYW4odm9pZCAq IGFkZHIsIGludCBjLCBzaXplX3Qgc2l6ZSkKewogICAgICAgIGlmICghc2l6ZSkKICAgICAgICAg ICAgICAgIHJldHVybiBhZGRyOwogICAgICAgIF9fYXNtX18oInJlcG56OyBzY2FzYlxuXHQiCiAg ICAgICAgICAgICAgICAiam56IDFmXG5cdCIKICAgICAgICAgICAgICAgICJkZWMgJSVlZGlcbiIK ICAgICAgICAgICAgICAgICIxOiIKICAgICAgICAgICAgICAgIDogIj1EIiAoYWRkciksICI9YyIg KHNpemUpCiAgICAgICAgICAgICAgICA6ICIwIiAoYWRkciksICIxIiAoc2l6ZSksICJhIiAoYykp OwogICAgICAgIHJldHVybiBhZGRyOwp9CiMgMjYgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNs dWRlL2xpbnV4L3N0cmluZy5oIiAyCiMgNDYgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRl L2xpbnV4L3N0cmluZy5oIgpleHRlcm4gaW50IHN0cm5pY21wKGNvbnN0IGNoYXIgKiwgY29uc3Qg Y2hhciAqLCBfX2tlcm5lbF9zaXplX3QpOwojIDc3ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5j bHVkZS9saW51eC9zdHJpbmcuaCIKZXh0ZXJuIGludCBfX2J1aWx0aW5fbWVtY21wKGNvbnN0IHZv aWQgKixjb25zdCB2b2lkICosX19rZXJuZWxfc2l6ZV90KTsKIyAyNCAiL3Vzci9zcmMvbGludXgt Mi40LjIwL2luY2x1ZGUvbGludXgvZnMuaCIgMgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIw L2luY2x1ZGUvYXNtL2JpdG9wcy5oIiAxCiMgMzYgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNs dWRlL2FzbS9iaXRvcHMuaCIKc3RhdGljIF9faW5saW5lX18gdm9pZCBzZXRfYml0KGludCBuciwg dm9sYXRpbGUgdm9pZCAqIGFkZHIpCnsKICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyggImxv Y2sgOyAiCiAgICAgICAgICAgICAgICAiYnRzbCAlMSwlMCIKICAgICAgICAgICAgICAgIDoiPW0i ICgoKih2b2xhdGlsZSBsb25nICopIGFkZHIpKQogICAgICAgICAgICAgICAgOiJJciIgKG5yKSk7 Cn0KIyA1MyAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvYXNtL2JpdG9wcy5oIgpzdGF0 aWMgX19pbmxpbmVfXyB2b2lkIF9fc2V0X2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRy KQp7CiAgICAgICAgX19hc21fXygKICAgICAgICAgICAgICAgICJidHNsICUxLCUwIgogICAgICAg ICAgICAgICAgOiI9bSIgKCgqKHZvbGF0aWxlIGxvbmcgKikgYWRkcikpCiAgICAgICAgICAgICAg ICA6IklyIiAobnIpKTsKfQojIDcxICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9hc20v Yml0b3BzLmgiCnN0YXRpYyBfX2lubGluZV9fIHZvaWQgY2xlYXJfYml0KGludCBuciwgdm9sYXRp bGUgdm9pZCAqIGFkZHIpCnsKICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyggImxvY2sgOyAi CiAgICAgICAgICAgICAgICAiYnRybCAlMSwlMCIKICAgICAgICAgICAgICAgIDoiPW0iICgoKih2 b2xhdGlsZSBsb25nICopIGFkZHIpKQogICAgICAgICAgICAgICAgOiJJciIgKG5yKSk7Cn0KIyA5 MCAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvYXNtL2JpdG9wcy5oIgpzdGF0aWMgX19p bmxpbmVfXyB2b2lkIF9fY2hhbmdlX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQp7 CiAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oCiAgICAgICAgICAgICAgICAiYnRjbCAlMSwl MCIKICAgICAgICAgICAgICAgIDoiPW0iICgoKih2b2xhdGlsZSBsb25nICopIGFkZHIpKQogICAg ICAgICAgICAgICAgOiJJciIgKG5yKSk7Cn0KIyAxMDcgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9p bmNsdWRlL2FzbS9iaXRvcHMuaCIKc3RhdGljIF9faW5saW5lX18gdm9pZCBjaGFuZ2VfYml0KGlu dCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCnsKICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVf XyggImxvY2sgOyAiCiAgICAgICAgICAgICAgICAiYnRjbCAlMSwlMCIKICAgICAgICAgICAgICAg IDoiPW0iICgoKih2b2xhdGlsZSBsb25nICopIGFkZHIpKQogICAgICAgICAgICAgICAgOiJJciIg KG5yKSk7Cn0KIyAxMjMgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS9iaXRvcHMu aCIKc3RhdGljIF9faW5saW5lX18gaW50IHRlc3RfYW5kX3NldF9iaXQoaW50IG5yLCB2b2xhdGls ZSB2b2lkICogYWRkcikKewogICAgICAgIGludCBvbGRiaXQ7CgogICAgICAgIF9fYXNtX18gX192 b2xhdGlsZV9fKCAibG9jayA7ICIKICAgICAgICAgICAgICAgICJidHNsICUyLCUxXG5cdHNiYmwg JTAsJTAiCiAgICAgICAgICAgICAgICA6Ij1yIiAob2xkYml0KSwiPW0iICgoKih2b2xhdGlsZSBs b25nICopIGFkZHIpKQogICAgICAgICAgICAgICAgOiJJciIgKG5yKSA6ICJtZW1vcnkiKTsKICAg ICAgICByZXR1cm4gb2xkYml0Owp9CiMgMTQzICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVk ZS9hc20vYml0b3BzLmgiCnN0YXRpYyBfX2lubGluZV9fIGludCBfX3Rlc3RfYW5kX3NldF9iaXQo aW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKewogICAgICAgIGludCBvbGRiaXQ7CgogICAg ICAgIF9fYXNtX18oCiAgICAgICAgICAgICAgICAiYnRzbCAlMiwlMVxuXHRzYmJsICUwLCUwIgog ICAgICAgICAgICAgICAgOiI9ciIgKG9sZGJpdCksIj1tIiAoKCoodm9sYXRpbGUgbG9uZyAqKSBh ZGRyKSkKICAgICAgICAgICAgICAgIDoiSXIiIChucikpOwogICAgICAgIHJldHVybiBvbGRiaXQ7 Cn0KIyAxNjIgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS9iaXRvcHMuaCIKc3Rh dGljIF9faW5saW5lX18gaW50IHRlc3RfYW5kX2NsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZv aWQgKiBhZGRyKQp7CiAgICAgICAgaW50IG9sZGJpdDsKCiAgICAgICAgX19hc21fXyBfX3ZvbGF0 aWxlX18oICJsb2NrIDsgIgogICAgICAgICAgICAgICAgImJ0cmwgJTIsJTFcblx0c2JibCAlMCwl MCIKICAgICAgICAgICAgICAgIDoiPXIiIChvbGRiaXQpLCI9bSIgKCgqKHZvbGF0aWxlIGxvbmcg KikgYWRkcikpCiAgICAgICAgICAgICAgICA6IklyIiAobnIpIDogIm1lbW9yeSIpOwogICAgICAg IHJldHVybiBvbGRiaXQ7Cn0KIyAxODIgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2Fz bS9iaXRvcHMuaCIKc3RhdGljIF9faW5saW5lX18gaW50IF9fdGVzdF9hbmRfY2xlYXJfYml0KGlu dCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCnsKICAgICAgICBpbnQgb2xkYml0OwoKICAgICAg ICBfX2FzbV9fKAogICAgICAgICAgICAgICAgImJ0cmwgJTIsJTFcblx0c2JibCAlMCwlMCIKICAg ICAgICAgICAgICAgIDoiPXIiIChvbGRiaXQpLCI9bSIgKCgqKHZvbGF0aWxlIGxvbmcgKikgYWRk cikpCiAgICAgICAgICAgICAgICA6IklyIiAobnIpKTsKICAgICAgICByZXR1cm4gb2xkYml0Owp9 CgoKc3RhdGljIF9faW5saW5lX18gaW50IF9fdGVzdF9hbmRfY2hhbmdlX2JpdChpbnQgbnIsIHZv bGF0aWxlIHZvaWQgKiBhZGRyKQp7CiAgICAgICAgaW50IG9sZGJpdDsKCiAgICAgICAgX19hc21f XyBfX3ZvbGF0aWxlX18oCiAgICAgICAgICAgICAgICAiYnRjbCAlMiwlMVxuXHRzYmJsICUwLCUw IgogICAgICAgICAgICAgICAgOiI9ciIgKG9sZGJpdCksIj1tIiAoKCoodm9sYXRpbGUgbG9uZyAq KSBhZGRyKSkKICAgICAgICAgICAgICAgIDoiSXIiIChucikgOiAibWVtb3J5Iik7CiAgICAgICAg cmV0dXJuIG9sZGJpdDsKfQojIDIxMyAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvYXNt L2JpdG9wcy5oIgpzdGF0aWMgX19pbmxpbmVfXyBpbnQgdGVzdF9hbmRfY2hhbmdlX2JpdChpbnQg bnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQp7CiAgICAgICAgaW50IG9sZGJpdDsKCiAgICAgICAg X19hc21fXyBfX3ZvbGF0aWxlX18oICJsb2NrIDsgIgogICAgICAgICAgICAgICAgImJ0Y2wgJTIs JTFcblx0c2JibCAlMCwlMCIKICAgICAgICAgICAgICAgIDoiPXIiIChvbGRiaXQpLCI9bSIgKCgq KHZvbGF0aWxlIGxvbmcgKikgYWRkcikpCiAgICAgICAgICAgICAgICA6IklyIiAobnIpIDogIm1l bW9yeSIpOwogICAgICAgIHJldHVybiBvbGRiaXQ7Cn0KIyAyMzMgIi91c3Ivc3JjL2xpbnV4LTIu NC4yMC9pbmNsdWRlL2FzbS9iaXRvcHMuaCIKc3RhdGljIF9faW5saW5lX18gaW50IGNvbnN0YW50 X3Rlc3RfYml0KGludCBuciwgY29uc3Qgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCnsKICAgICAgICBy ZXR1cm4gKCgxVUwgPDwgKG5yICYgMzEpKSAmICgoKGNvbnN0IHZvbGF0aWxlIHVuc2lnbmVkIGlu dCAqKSBhZGRyKVtuciA+PiA1XSkpICE9IDA7Cn0KCnN0YXRpYyBfX2lubGluZV9fIGludCB2YXJp YWJsZV90ZXN0X2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQp7CiAgICAgICAgaW50 IG9sZGJpdDsKCiAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oCiAgICAgICAgICAgICAgICAi YnRsICUyLCUxXG5cdHNiYmwgJTAsJTAiCiAgICAgICAgICAgICAgICA6Ij1yIiAob2xkYml0KQog ICAgICAgICAgICAgICAgOiJtIiAoKCoodm9sYXRpbGUgbG9uZyAqKSBhZGRyKSksIklyIiAobnIp KTsKICAgICAgICByZXR1cm4gb2xkYml0Owp9CiMgMjYyICIvdXNyL3NyYy9saW51eC0yLjQuMjAv aW5jbHVkZS9hc20vYml0b3BzLmgiCnN0YXRpYyBfX2lubGluZV9fIGludCBmaW5kX2ZpcnN0X3pl cm9fYml0KHZvaWQgKiBhZGRyLCB1bnNpZ25lZCBzaXplKQp7CiAgICAgICAgaW50IGQwLCBkMSwg ZDI7CiAgICAgICAgaW50IHJlczsKCiAgICAgICAgaWYgKCFzaXplKQogICAgICAgICAgICAgICAg cmV0dXJuIDA7CgogICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKAogICAgICAgICAgICAgICAg Im1vdmwgJC0xLCUlZWF4XG5cdCIKICAgICAgICAgICAgICAgICJ4b3JsICUlZWR4LCUlZWR4XG5c dCIKICAgICAgICAgICAgICAgICJyZXBlOyBzY2FzbFxuXHQiCiAgICAgICAgICAgICAgICAiamUg MWZcblx0IgogICAgICAgICAgICAgICAgInhvcmwgLTQoJSVlZGkpLCUlZWF4XG5cdCIKICAgICAg ICAgICAgICAgICJzdWJsICQ0LCUlZWRpXG5cdCIKICAgICAgICAgICAgICAgICJic2ZsICUlZWF4 LCUlZWR4XG4iCiAgICAgICAgICAgICAgICAiMTpcdHN1YmwgJSVlYngsJSVlZGlcblx0IgogICAg ICAgICAgICAgICAgInNobGwgJDMsJSVlZGlcblx0IgogICAgICAgICAgICAgICAgImFkZGwgJSVl ZGksJSVlZHgiCiAgICAgICAgICAgICAgICA6Ij1kIiAocmVzKSwgIj0mYyIgKGQwKSwgIj0mRCIg KGQxKSwgIj0mYSIgKGQyKQogICAgICAgICAgICAgICAgOiIxIiAoKHNpemUgKyAzMSkgPj4gNSks ICIyIiAoYWRkciksICJiIiAoYWRkcikpOwogICAgICAgIHJldHVybiByZXM7Cn0KCgoKCgoKCnN0 YXRpYyBfX2lubGluZV9fIGludCBmaW5kX25leHRfemVyb19iaXQgKHZvaWQgKiBhZGRyLCBpbnQg c2l6ZSwgaW50IG9mZnNldCkKewogICAgICAgIHVuc2lnbmVkIGxvbmcgKiBwID0gKCh1bnNpZ25l ZCBsb25nICopIGFkZHIpICsgKG9mZnNldCA+PiA1KTsKICAgICAgICBpbnQgc2V0ID0gMCwgYml0 ID0gb2Zmc2V0ICYgMzEsIHJlczsKCiAgICAgICAgaWYgKGJpdCkgewoKCgogICAgICAgICAgICAg ICAgX19hc21fXygiYnNmbCAlMSwlMFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICJqbmUg MWZcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAibW92bCAkMzIsICUwXG4iCiAgICAgICAg ICAgICAgICAgICAgICAgICIxOiIKICAgICAgICAgICAgICAgICAgICAgICAgOiAiPXIiIChzZXQp CiAgICAgICAgICAgICAgICAgICAgICAgIDogInIiICh+KCpwID4+IGJpdCkpKTsKICAgICAgICAg ICAgICAgIGlmIChzZXQgPCAoMzIgLSBiaXQpKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1 cm4gc2V0ICsgb2Zmc2V0OwogICAgICAgICAgICAgICAgc2V0ID0gMzIgLSBiaXQ7CiAgICAgICAg ICAgICAgICBwKys7CiAgICAgICAgfQoKCgogICAgICAgIHJlcyA9IGZpbmRfZmlyc3RfemVyb19i aXQgKHAsIHNpemUgLSAzMiAqIChwIC0gKHVuc2lnbmVkIGxvbmcgKikgYWRkcikpOwogICAgICAg IHJldHVybiAob2Zmc2V0ICsgc2V0ICsgcmVzKTsKfQoKCgoKCgoKc3RhdGljIF9faW5saW5lX18g dW5zaWduZWQgbG9uZyBmZnoodW5zaWduZWQgbG9uZyB3b3JkKQp7CiAgICAgICAgX19hc21fXygi YnNmbCAlMSwlMCIKICAgICAgICAgICAgICAgIDoiPXIiICh3b3JkKQogICAgICAgICAgICAgICAg OiJyIiAofndvcmQpKTsKICAgICAgICByZXR1cm4gd29yZDsKfQojIDM0OSAiL3Vzci9zcmMvbGlu dXgtMi40LjIwL2luY2x1ZGUvYXNtL2JpdG9wcy5oIgpzdGF0aWMgX19pbmxpbmVfXyBpbnQgZmZz KGludCB4KQp7CiAgICAgICAgaW50IHI7CgogICAgICAgIF9fYXNtX18oImJzZmwgJTEsJTBcblx0 IgogICAgICAgICAgICAgICAgImpueiAxZlxuXHQiCiAgICAgICAgICAgICAgICAibW92bCAkLTEs JTBcbiIKICAgICAgICAgICAgICAgICIxOiIgOiAiPXIiIChyKSA6ICJybSIgKHgpKTsKICAgICAg ICByZXR1cm4gcisxOwp9CiMgMjcgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4 L2ZzLmgiIDIKCnN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdDsKIyA1MCAiL3Vzci9zcmMvbGludXgt Mi40LjIwL2luY2x1ZGUvbGludXgvZnMuaCIKc3RydWN0IGZpbGVzX3N0YXRfc3RydWN0IHsKICAg ICAgICBpbnQgbnJfZmlsZXM7CiAgICAgICAgaW50IG5yX2ZyZWVfZmlsZXM7CiAgICAgICAgaW50 IG1heF9maWxlczsKfTsKZXh0ZXJuIHN0cnVjdCBmaWxlc19zdGF0X3N0cnVjdCBmaWxlc19zdGF0 OwoKc3RydWN0IGlub2Rlc19zdGF0X3QgewogICAgICAgIGludCBucl9pbm9kZXM7CiAgICAgICAg aW50IG5yX3VudXNlZDsKICAgICAgICBpbnQgZHVtbXlbNV07Cn07CmV4dGVybiBzdHJ1Y3QgaW5v ZGVzX3N0YXRfdCBpbm9kZXNfc3RhdDsKCmV4dGVybiBpbnQgbGVhc2VzX2VuYWJsZSwgZGlyX25v dGlmeV9lbmFibGUsIGxlYXNlX2JyZWFrX3RpbWU7CiMgMjAxICIvdXNyL3NyYy9saW51eC0yLjQu MjAvaW5jbHVkZS9saW51eC9mcy5oIgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRl L2FzbS9zZW1hcGhvcmUuaCIgMQojIDM5ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9h c20vc2VtYXBob3JlLmgiCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvYXNtL3N5 c3RlbS5oIiAxCgoKCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9p bml0LmgiIDEKIyA0OCAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvaW5pdC5o Igp0eXBlZGVmIGludCAoKmluaXRjYWxsX3QpKHZvaWQpOwp0eXBlZGVmIHZvaWQgKCpleGl0Y2Fs bF90KSh2b2lkKTsKCmV4dGVybiBpbml0Y2FsbF90IF9faW5pdGNhbGxfc3RhcnQsIF9faW5pdGNh bGxfZW5kOwojIDYxICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9pbml0Lmgi CnN0cnVjdCBrZXJuZWxfcGFyYW0gewogICAgICAgIGNvbnN0IGNoYXIgKnN0cjsKICAgICAgICBp bnQgKCpzZXR1cF9mdW5jKShjaGFyICopOwp9OwoKZXh0ZXJuIHN0cnVjdCBrZXJuZWxfcGFyYW0g X19zZXR1cF9zdGFydCwgX19zZXR1cF9lbmQ7CiMgNyAiL3Vzci9zcmMvbGludXgtMi40LjIwL2lu Y2x1ZGUvYXNtL3N5c3RlbS5oIiAyCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRl L2xpbnV4L2JpdG9wcy5oIiAxCiMgMTEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xp bnV4L2JpdG9wcy5oIgpzdGF0aWMgaW5saW5lIGludCBnZW5lcmljX2ZmcyhpbnQgeCkKewogICAg ICAgIGludCByID0gMTsKCiAgICAgICAgaWYgKCF4KQogICAgICAgICAgICAgICAgcmV0dXJuIDA7 CiAgICAgICAgaWYgKCEoeCAmIDB4ZmZmZikpIHsKICAgICAgICAgICAgICAgIHggPj49IDE2Owog ICAgICAgICAgICAgICAgciArPSAxNjsKICAgICAgICB9CiAgICAgICAgaWYgKCEoeCAmIDB4ZmYp KSB7CiAgICAgICAgICAgICAgICB4ID4+PSA4OwogICAgICAgICAgICAgICAgciArPSA4OwogICAg ICAgIH0KICAgICAgICBpZiAoISh4ICYgMHhmKSkgewogICAgICAgICAgICAgICAgeCA+Pj0gNDsK ICAgICAgICAgICAgICAgIHIgKz0gNDsKICAgICAgICB9CiAgICAgICAgaWYgKCEoeCAmIDMpKSB7 CiAgICAgICAgICAgICAgICB4ID4+PSAyOwogICAgICAgICAgICAgICAgciArPSAyOwogICAgICAg IH0KICAgICAgICBpZiAoISh4ICYgMSkpIHsKICAgICAgICAgICAgICAgIHggPj49IDE7CiAgICAg ICAgICAgICAgICByICs9IDE7CiAgICAgICAgfQogICAgICAgIHJldHVybiByOwp9CgoKCgoKZXh0 ZXJuIF9faW5saW5lX18gaW50IGdlbmVyaWNfZmxzKGludCB4KQp7CiAgICAgICAgaW50IHIgPSAz MjsKCiAgICAgICAgaWYgKCF4KQogICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgaWYg KCEoeCAmIDB4ZmZmZjAwMDApKSB7CiAgICAgICAgICAgICAgICB4IDw8PSAxNjsKICAgICAgICAg ICAgICAgIHIgLT0gMTY7CiAgICAgICAgfQogICAgICAgIGlmICghKHggJiAweGZmMDAwMDAwKSkg ewogICAgICAgICAgICAgICAgeCA8PD0gODsKICAgICAgICAgICAgICAgIHIgLT0gODsKICAgICAg ICB9CiAgICAgICAgaWYgKCEoeCAmIDB4ZjAwMDAwMDApKSB7CiAgICAgICAgICAgICAgICB4IDw8 PSA0OwogICAgICAgICAgICAgICAgciAtPSA0OwogICAgICAgIH0KICAgICAgICBpZiAoISh4ICYg MHhjMDAwMDAwMCkpIHsKICAgICAgICAgICAgICAgIHggPDw9IDI7CiAgICAgICAgICAgICAgICBy IC09IDI7CiAgICAgICAgfQogICAgICAgIGlmICghKHggJiAweDgwMDAwMDAwKSkgewogICAgICAg ICAgICAgICAgeCA8PD0gMTsKICAgICAgICAgICAgICAgIHIgLT0gMTsKICAgICAgICB9CiAgICAg ICAgcmV0dXJuIHI7Cn0KCmV4dGVybiBfX2lubGluZV9fIGludCBnZXRfYml0bWFza19vcmRlcih1 bnNpZ25lZCBpbnQgY291bnQpCnsKICAgICAgICBpbnQgb3JkZXI7CgogICAgICAgIG9yZGVyID0g Z2VuZXJpY19mbHMoY291bnQpOwogICAgICAgIHJldHVybiBvcmRlcjsKfQoKCgoKCgpzdGF0aWMg aW5saW5lIHVuc2lnbmVkIGludCBnZW5lcmljX2h3ZWlnaHQzMih1bnNpZ25lZCBpbnQgdykKewog ICAgICAgIHVuc2lnbmVkIGludCByZXMgPSAodyAmIDB4NTU1NTU1NTUpICsgKCh3ID4+IDEpICYg MHg1NTU1NTU1NSk7CiAgICAgICAgcmVzID0gKHJlcyAmIDB4MzMzMzMzMzMpICsgKChyZXMgPj4g MikgJiAweDMzMzMzMzMzKTsKICAgICAgICByZXMgPSAocmVzICYgMHgwRjBGMEYwRikgKyAoKHJl cyA+PiA0KSAmIDB4MEYwRjBGMEYpOwogICAgICAgIHJlcyA9IChyZXMgJiAweDAwRkYwMEZGKSAr ICgocmVzID4+IDgpICYgMHgwMEZGMDBGRik7CiAgICAgICAgcmV0dXJuIChyZXMgJiAweDAwMDBG RkZGKSArICgocmVzID4+IDE2KSAmIDB4MDAwMEZGRkYpOwp9CgpzdGF0aWMgaW5saW5lIHVuc2ln bmVkIGludCBnZW5lcmljX2h3ZWlnaHQxNih1bnNpZ25lZCBpbnQgdykKewogICAgICAgIHVuc2ln bmVkIGludCByZXMgPSAodyAmIDB4NTU1NSkgKyAoKHcgPj4gMSkgJiAweDU1NTUpOwogICAgICAg IHJlcyA9IChyZXMgJiAweDMzMzMpICsgKChyZXMgPj4gMikgJiAweDMzMzMpOwogICAgICAgIHJl cyA9IChyZXMgJiAweDBGMEYpICsgKChyZXMgPj4gNCkgJiAweDBGMEYpOwogICAgICAgIHJldHVy biAocmVzICYgMHgwMEZGKSArICgocmVzID4+IDgpICYgMHgwMEZGKTsKfQoKc3RhdGljIGlubGlu ZSB1bnNpZ25lZCBpbnQgZ2VuZXJpY19od2VpZ2h0OCh1bnNpZ25lZCBpbnQgdykKewogICAgICAg IHVuc2lnbmVkIGludCByZXMgPSAodyAmIDB4NTUpICsgKCh3ID4+IDEpICYgMHg1NSk7CiAgICAg ICAgcmVzID0gKHJlcyAmIDB4MzMpICsgKChyZXMgPj4gMikgJiAweDMzKTsKICAgICAgICByZXR1 cm4gKHJlcyAmIDB4MEYpICsgKChyZXMgPj4gNCkgJiAweDBGKTsKfQojIDkgIi91c3Ivc3JjL2xp bnV4LTIuNC4yMC9pbmNsdWRlL2FzbS9zeXN0ZW0uaCIgMgoKCgpzdHJ1Y3QgdGFza19zdHJ1Y3Q7 CmV4dGVybiB2b2lkIF9fc3dpdGNoX3RvKHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldiwgc3RydWN0 IHRhc2tfc3RydWN0ICpuZXh0KSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CiMgNjQgIi91 c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS9zeXN0ZW0uaCIKc3RhdGljIGlubGluZSB1 bnNpZ25lZCBsb25nIF9nZXRfYmFzZShjaGFyICogYWRkcikKewogICAgICAgIHVuc2lnbmVkIGxv bmcgX19iYXNlOwogICAgICAgIF9fYXNtX18oIm1vdmIgJTMsJSVkaFxuXHQiCiAgICAgICAgICAg ICAgICAibW92YiAlMiwlJWRsXG5cdCIKICAgICAgICAgICAgICAgICJzaGxsICQxNiwlJWVkeFxu XHQiCiAgICAgICAgICAgICAgICAibW92dyAlMSwlJWR4IgogICAgICAgICAgICAgICAgOiI9JmQi IChfX2Jhc2UpCiAgICAgICAgICAgICAgICA6Im0iICgqKChhZGRyKSsyKSksCiAgICAgICAgICAg ICAgICAgIm0iICgqKChhZGRyKSs0KSksCiAgICAgICAgICAgICAgICAgIm0iICgqKChhZGRyKSs3 KSkpOwogICAgICAgIHJldHVybiBfX2Jhc2U7Cn0KIyAxMzEgIi91c3Ivc3JjL2xpbnV4LTIuNC4y MC9pbmNsdWRlL2FzbS9zeXN0ZW0uaCIKc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9s aW1pdCh1bnNpZ25lZCBsb25nIHNlZ21lbnQpCnsKICAgICAgICB1bnNpZ25lZCBsb25nIF9fbGlt aXQ7CiAgICAgICAgX19hc21fXygibHNsbCAlMSwlMCIKICAgICAgICAgICAgICAgIDoiPXIiIChf X2xpbWl0KToiciIgKHNlZ21lbnQpKTsKICAgICAgICByZXR1cm4gX19saW1pdCsxOwp9CgoKCgoK CgpzdHJ1Y3QgX194Y2hnX2R1bW15IHsgdW5zaWduZWQgbG9uZyBhWzEwMF07IH07CiMgMTYzICIv dXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9hc20vc3lzdGVtLmgiCnN0YXRpYyBpbmxpbmUg dm9pZCBfX3NldF82NGJpdCAodW5zaWduZWQgbG9uZyBsb25nICogcHRyLAogICAgICAgICAgICAg ICAgdW5zaWduZWQgaW50IGxvdywgdW5zaWduZWQgaW50IGhpZ2gpCnsKICAgICAgICBfX2FzbV9f IF9fdm9sYXRpbGVfXyAoCiAgICAgICAgICAgICAgICAiXG4xOlx0IgogICAgICAgICAgICAgICAg Im1vdmwgKCUwKSwgJSVlYXhcblx0IgogICAgICAgICAgICAgICAgIm1vdmwgNCglMCksICUlZWR4 XG5cdCIKICAgICAgICAgICAgICAgICJsb2NrIGNtcHhjaGc4YiAoJTApXG5cdCIKICAgICAgICAg ICAgICAgICJqbnogMWIiCiAgICAgICAgICAgICAgICA6CiAgICAgICAgICAgICAgICA6ICJEIihw dHIpLAogICAgICAgICAgICAgICAgICAgICAgICAiYiIobG93KSwKICAgICAgICAgICAgICAgICAg ICAgICAgImMiKGhpZ2gpCiAgICAgICAgICAgICAgICA6ICJheCIsImR4IiwibWVtb3J5Iik7Cn0K CnN0YXRpYyBpbmxpbmUgdm9pZCBfX3NldF82NGJpdF9jb25zdGFudCAodW5zaWduZWQgbG9uZyBs b25nICpwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWUpCnsKICAgICAgICBfX3NldF82NGJpdChwdHIsKHVu c2lnbmVkIGludCkodmFsdWUpLCAodW5zaWduZWQgaW50KSgodmFsdWUpPj4zMlVMTCkpOwp9CgoK CnN0YXRpYyBpbmxpbmUgdm9pZCBfX3NldF82NGJpdF92YXIgKHVuc2lnbmVkIGxvbmcgbG9uZyAq cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHZhbHVlKQp7 CiAgICAgICAgX19zZXRfNjRiaXQocHRyLCooKCh1bnNpZ25lZCBpbnQqKSYodmFsdWUpKSswKSwg KigoKHVuc2lnbmVkIGludCopJih2YWx1ZSkpKzEpKTsKfQojIDIwOCAiL3Vzci9zcmMvbGludXgt Mi40LjIwL2luY2x1ZGUvYXNtL3N5c3RlbS5oIgpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcg X194Y2hnKHVuc2lnbmVkIGxvbmcgeCwgdm9sYXRpbGUgdm9pZCAqIHB0ciwgaW50IHNpemUpCnsK ICAgICAgICBzd2l0Y2ggKHNpemUpIHsKICAgICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAg ICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInhjaGdiICViMCwlMSIKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA6Ij1xIiAoeCkKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA6Im0iICgqKChzdHJ1Y3QgX194Y2hnX2R1bW15ICopKHB0cikpKSwgIjAiICh4 KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoibWVtb3J5Iik7CiAgICAgICAgICAg ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAg ICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygieGNoZ3cgJXcwLCUxIgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDoiPXIiICh4KQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDoibSIgKCooKHN0cnVjdCBfX3hjaGdfZHVtbXkgKikocHRyKSkpLCAiMCIgKHgpCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiJtZW1vcnkiKTsKICAgICAgICAgICAgICAg ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgICAgICAg ICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJ4Y2hnbCAlMCwlMSIKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA6Ij1yIiAoeCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA6Im0iICgqKChzdHJ1Y3QgX194Y2hnX2R1bW15ICopKHB0cikpKSwgIjAiICh4KQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDoibWVtb3J5Iik7CiAgICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICByZXR1cm4geDsKfQojIDI0MiAiL3Vzci9zcmMv bGludXgtMi40LjIwL2luY2x1ZGUvYXNtL3N5c3RlbS5oIgpzdGF0aWMgaW5saW5lIHVuc2lnbmVk IGxvbmcgX19jbXB4Y2hnKHZvbGF0aWxlIHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyBvbGQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBuZXcsIGlu dCBzaXplKQp7CiAgICAgICAgdW5zaWduZWQgbG9uZyBwcmV2OwogICAgICAgIHN3aXRjaCAoc2l6 ZSkgewogICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9f KCJsb2NrIDsgIiAiY21weGNoZ2IgJWIxLCUyIgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOiAiPWEiKHByZXYpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA6ICJxIihuZXcpLCAibSIoKigoc3RydWN0IF9feGNoZ19kdW1teSAqKShwdHIpKSksICIwIihv bGQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJtZW1vcnkiKTsKICAg ICAgICAgICAgICAgIHJldHVybiBwcmV2OwogICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICAg IF9fYXNtX18gX192b2xhdGlsZV9fKCJsb2NrIDsgIiAiY21weGNoZ3cgJXcxLCUyIgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiPWEiKHByZXYpCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA6ICJxIihuZXcpLCAibSIoKigoc3RydWN0IF9feGNoZ19k dW1teSAqKShwdHIpKSksICIwIihvbGQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA6ICJtZW1vcnkiKTsKICAgICAgICAgICAgICAgIHJldHVybiBwcmV2OwogICAgICAgIGNh c2UgNDoKICAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJsb2NrIDsgIiAiY21w eGNoZ2wgJTEsJTIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICI9YSIo cHJldikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogInEiKG5ldyksICJt IigqKChzdHJ1Y3QgX194Y2hnX2R1bW15ICopKHB0cikpKSwgIjAiKG9sZCkKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDogIm1lbW9yeSIpOwogICAgICAgICAgICAgICAgcmV0 dXJuIHByZXY7CiAgICAgICAgfQogICAgICAgIHJldHVybiBvbGQ7Cn0KIyAzNDMgIi91c3Ivc3Jj L2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS9zeXN0ZW0uaCIKZXh0ZXJuIHZvaWQgX19nbG9iYWxf Y2xpKHZvaWQpOwpleHRlcm4gdm9pZCBfX2dsb2JhbF9zdGkodm9pZCk7CmV4dGVybiB1bnNpZ25l ZCBsb25nIF9fZ2xvYmFsX3NhdmVfZmxhZ3Modm9pZCk7CmV4dGVybiB2b2lkIF9fZ2xvYmFsX3Jl c3RvcmVfZmxhZ3ModW5zaWduZWQgbG9uZyk7CiMgMzY5ICIvdXNyL3NyYy9saW51eC0yLjQuMjAv aW5jbHVkZS9hc20vc3lzdGVtLmgiCnZvaWQgZGlzYWJsZV9obHQodm9pZCk7CnZvaWQgZW5hYmxl X2hsdCh2b2lkKTsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGRtaV9icm9rZW47CmV4dGVybiBpbnQg aXNfc29ueV92YWlvX2xhcHRvcDsKIyA0MCAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUv YXNtL3NlbWFwaG9yZS5oIiAyCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9s aW51eC9yd3NlbS5oIiAxCiMgMjQgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4 L3J3c2VtLmgiCnN0cnVjdCByd19zZW1hcGhvcmU7CgoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIu NC4yMC9pbmNsdWRlL2FzbS9yd3NlbS5oIiAxCiMgNDYgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9p bmNsdWRlL2FzbS9yd3NlbS5oIgpzdHJ1Y3QgcndzZW1fd2FpdGVyOwoKZXh0ZXJuIHN0cnVjdCBy d19zZW1hcGhvcmUgKnJ3c2VtX2Rvd25fcmVhZF9mYWlsZWQoc3RydWN0IHJ3X3NlbWFwaG9yZSAq c2VtKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CmV4dGVybiBzdHJ1Y3Qgcndfc2VtYXBo b3JlICpyd3NlbV9kb3duX3dyaXRlX2ZhaWxlZChzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pIF9f YXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKZXh0ZXJuIHN0cnVjdCByd19zZW1hcGhvcmUgKnJ3 c2VtX3dha2Uoc3RydWN0IHJ3X3NlbWFwaG9yZSAqKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMp KSk7CgoKCgpzdHJ1Y3Qgcndfc2VtYXBob3JlIHsKICAgICAgICBzaWduZWQgbG9uZyBjb3VudDsK CgoKCgoKICAgICAgICBzcGlubG9ja190IHdhaXRfbG9jazsKICAgICAgICBzdHJ1Y3QgbGlzdF9o ZWFkIHdhaXRfbGlzdDsKCgoKfTsKIyA4NiAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUv YXNtL3J3c2VtLmgiCnN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3J3c2VtKHN0cnVjdCByd19zZW1h cGhvcmUgKnNlbSkKewogICAgICAgIHNlbS0+Y291bnQgPSAweDAwMDAwMDAwOwogICAgICAgIGRv IHsgKigmc2VtLT53YWl0X2xvY2spID0gKHNwaW5sb2NrX3QpIHsgMSB9OyB9IHdoaWxlKDApOwog ICAgICAgIGRvIHsgKCZzZW0tPndhaXRfbGlzdCktPm5leHQgPSAoJnNlbS0+d2FpdF9saXN0KTsg KCZzZW0tPndhaXRfbGlzdCktPnByZXYgPSAoJnNlbS0+d2FpdF9saXN0KTsgfSB3aGlsZSAoMCk7 CgoKCn0KCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCBfX2Rvd25fcmVhZChzdHJ1Y3Qgcndfc2VtYXBo b3JlICpzZW0pCnsKICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygKICAgICAgICAgICAgICAg ICIjIGJlZ2lubmluZyBkb3duX3JlYWRcblx0IgoibG9jayA7ICIgIiAgaW5jbCAgICAgICglJWVh eClcblx0IgogICAgICAgICAgICAgICAgIiAganMgICAgICAgIDJmXG5cdCIKICAgICAgICAgICAg ICAgICIxOlxuXHQiCiAgICAgICAgICAgICAgICAiLnN1YnNlY3Rpb24gMVxuXHQiICIiICIuaWZu ZGVmICIgIi50ZXh0LmxvY2suIiAic2NoZWQiICJcblx0IiAiLnRleHQubG9jay4iICJzY2hlZCIg Ijpcblx0IiAiLmVuZGlmXG5cdCIKICAgICAgICAgICAgICAgICIyOlxuXHQiCiAgICAgICAgICAg ICAgICAiICBwdXNobCAgICAgJSVlY3hcblx0IgogICAgICAgICAgICAgICAgIiAgcHVzaGwgICAg ICUlZWR4XG5cdCIKICAgICAgICAgICAgICAgICIgIGNhbGwgICAgICByd3NlbV9kb3duX3JlYWRf ZmFpbGVkXG5cdCIKICAgICAgICAgICAgICAgICIgIHBvcGwgICAgICAlJWVkeFxuXHQiCiAgICAg ICAgICAgICAgICAiICBwb3BsICAgICAgJSVlY3hcblx0IgogICAgICAgICAgICAgICAgIiAgam1w ICAgICAgIDFiXG4iCiAgICAgICAgICAgICAgICAiLnByZXZpb3VzXG5cdCIKICAgICAgICAgICAg ICAgICIjIGVuZGluZyBkb3duX3JlYWRcblx0IgogICAgICAgICAgICAgICAgOiAiK20iKHNlbS0+ Y291bnQpCiAgICAgICAgICAgICAgICA6ICJhIihzZW0pCiAgICAgICAgICAgICAgICA6ICJtZW1v cnkiLCAiY2MiKTsKfQoKCgoKc3RhdGljIGlubGluZSBpbnQgX19kb3duX3JlYWRfdHJ5bG9jayhz dHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCnsKICAgICAgICBfX3MzMiByZXN1bHQsIHRtcDsKICAg ICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygKICAgICAgICAgICAgICAgICIjIGJlZ2lubmluZyBf X2Rvd25fcmVhZF90cnlsb2NrXG5cdCIKICAgICAgICAgICAgICAgICIgIG1vdmwgICAgICAlMCwl MVxuXHQiCiAgICAgICAgICAgICAgICAiMTpcblx0IgogICAgICAgICAgICAgICAgIiAgbW92bAkg ICAgICUxLCUyXG5cdCIKICAgICAgICAgICAgICAgICIgIGFkZGwgICAgICAlMywlMlxuXHQiCiAg ICAgICAgICAgICAgICAiICBqbGUJICAgICAyZlxuXHQiCiJsb2NrIDsgIiAiICBjbXB4Y2hnbCAg JTIsJTBcblx0IgogICAgICAgICAgICAgICAgIiAgam56CSAgICAgMWJcblx0IgogICAgICAgICAg ICAgICAgIjI6XG5cdCIKICAgICAgICAgICAgICAgICIjIGVuZGluZyBfX2Rvd25fcmVhZF90cnls b2NrXG5cdCIKICAgICAgICAgICAgICAgIDogIittIihzZW0tPmNvdW50KSwgIj0mYSIocmVzdWx0 KSwgIj0mciIodG1wKQogICAgICAgICAgICAgICAgOiAiaSIoMHgwMDAwMDAwMSkKICAgICAgICAg ICAgICAgIDogIm1lbW9yeSIsICJjYyIpOwogICAgICAgIHJldHVybiByZXN1bHQ+PTAgPyAxIDog MDsKfQoKCgoKc3RhdGljIGlubGluZSB2b2lkIF9fZG93bl93cml0ZShzdHJ1Y3Qgcndfc2VtYXBo b3JlICpzZW0pCnsKICAgICAgICBpbnQgdG1wOwoKICAgICAgICB0bXAgPSAoKC0weDAwMDEwMDAw KSArIDB4MDAwMDAwMDEpOwogICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKAogICAgICAgICAg ICAgICAgIiMgYmVnaW5uaW5nIGRvd25fd3JpdGVcblx0IgoibG9jayA7ICIgIiAgeGFkZCAgICAg ICUwLCglJWVheClcblx0IgogICAgICAgICAgICAgICAgIiAgdGVzdGwgICAgICUwLCUwXG5cdCIK ICAgICAgICAgICAgICAgICIgIGpueiAgICAgICAyZlxuXHQiCiAgICAgICAgICAgICAgICAiMTpc blx0IgogICAgICAgICAgICAgICAgIi5zdWJzZWN0aW9uIDFcblx0IiAiIiAiLmlmbmRlZiAiICIu dGV4dC5sb2NrLiIgInNjaGVkIiAiXG5cdCIgIi50ZXh0LmxvY2suIiAic2NoZWQiICI6XG5cdCIg Ii5lbmRpZlxuXHQiCiAgICAgICAgICAgICAgICAiMjpcblx0IgogICAgICAgICAgICAgICAgIiAg cHVzaGwgICAgICUlZWN4XG5cdCIKICAgICAgICAgICAgICAgICIgIGNhbGwgICAgICByd3NlbV9k b3duX3dyaXRlX2ZhaWxlZFxuXHQiCiAgICAgICAgICAgICAgICAiICBwb3BsICAgICAgJSVlY3hc blx0IgogICAgICAgICAgICAgICAgIiAgam1wICAgICAgIDFiXG4iCiAgICAgICAgICAgICAgICAi LnByZXZpb3VzXG5cdCIKICAgICAgICAgICAgICAgICIjIGVuZGluZyBkb3duX3dyaXRlIgogICAg ICAgICAgICAgICAgOiAiK2QiKHRtcCksICIrbSIoc2VtLT5jb3VudCkKICAgICAgICAgICAgICAg IDogImEiKHNlbSkKICAgICAgICAgICAgICAgIDogIm1lbW9yeSIsICJjYyIpOwp9CgoKCgpzdGF0 aWMgaW5saW5lIGludCBfX2Rvd25fd3JpdGVfdHJ5bG9jayhzdHJ1Y3Qgcndfc2VtYXBob3JlICpz ZW0pCnsKICAgICAgICBzaWduZWQgbG9uZyByZXQgPSAoKF9fdHlwZW9mX18oKigmc2VtLT5jb3Vu dCkpKV9fY21weGNoZygoJnNlbS0+Y291bnQpLCh1bnNpZ25lZCBsb25nKSgweDAwMDAwMDAwKSwg KHVuc2lnbmVkIGxvbmcpKCgoLTB4MDAwMTAwMDApICsgMHgwMDAwMDAwMSkpLHNpemVvZigqKCZz ZW0tPmNvdW50KSkpKTsKCgogICAgICAgIGlmIChyZXQgPT0gMHgwMDAwMDAwMCkKICAgICAgICAg ICAgICAgIHJldHVybiAxOwogICAgICAgIHJldHVybiAwOwp9CgoKCgpzdGF0aWMgaW5saW5lIHZv aWQgX191cF9yZWFkKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKewogICAgICAgIF9fczMyIHRt cCA9IC0weDAwMDAwMDAxOwogICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKAogICAgICAgICAg ICAgICAgIiMgYmVnaW5uaW5nIF9fdXBfcmVhZFxuXHQiCiJsb2NrIDsgIiAiICB4YWRkICAgICAg JSVlZHgsKCUlZWF4KVxuXHQiCiAgICAgICAgICAgICAgICAiICBqcyAgICAgICAgMmZcblx0Igog ICAgICAgICAgICAgICAgIjE6XG5cdCIKICAgICAgICAgICAgICAgICIuc3Vic2VjdGlvbiAxXG5c dCIgIiIgIi5pZm5kZWYgIiAiLnRleHQubG9jay4iICJzY2hlZCIgIlxuXHQiICIudGV4dC5sb2Nr LiIgInNjaGVkIiAiOlxuXHQiICIuZW5kaWZcblx0IgogICAgICAgICAgICAgICAgIjI6XG5cdCIK ICAgICAgICAgICAgICAgICIgIGRlY3cgICAgICAlJWR4XG5cdCIKICAgICAgICAgICAgICAgICIg IGpueiAgICAgICAxYlxuXHQiCiAgICAgICAgICAgICAgICAiICBwdXNobCAgICAgJSVlY3hcblx0 IgogICAgICAgICAgICAgICAgIiAgY2FsbCAgICAgIHJ3c2VtX3dha2Vcblx0IgogICAgICAgICAg ICAgICAgIiAgcG9wbCAgICAgICUlZWN4XG5cdCIKICAgICAgICAgICAgICAgICIgIGptcCAgICAg ICAxYlxuIgogICAgICAgICAgICAgICAgIi5wcmV2aW91c1xuXHQiCiAgICAgICAgICAgICAgICAi IyBlbmRpbmcgX191cF9yZWFkXG4iCiAgICAgICAgICAgICAgICA6ICIrbSIoc2VtLT5jb3VudCks ICIrZCIodG1wKQogICAgICAgICAgICAgICAgOiAiYSIoc2VtKQogICAgICAgICAgICAgICAgOiAi bWVtb3J5IiwgImNjIik7Cn0KCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCBfX3VwX3dyaXRlKHN0cnVj dCByd19zZW1hcGhvcmUgKnNlbSkKewogICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKAogICAg ICAgICAgICAgICAgIiMgYmVnaW5uaW5nIF9fdXBfd3JpdGVcblx0IgogICAgICAgICAgICAgICAg IiAgbW92bCAgICAgICUyLCUlZWR4XG5cdCIKImxvY2sgOyAiICIgIHhhZGRsICAgICAlJWVkeCwo JSVlYXgpXG5cdCIKICAgICAgICAgICAgICAgICIgIGpueiAgICAgICAyZlxuXHQiCiAgICAgICAg ICAgICAgICAiMTpcblx0IgogICAgICAgICAgICAgICAgIi5zdWJzZWN0aW9uIDFcblx0IiAiIiAi LmlmbmRlZiAiICIudGV4dC5sb2NrLiIgInNjaGVkIiAiXG5cdCIgIi50ZXh0LmxvY2suIiAic2No ZWQiICI6XG5cdCIgIi5lbmRpZlxuXHQiCiAgICAgICAgICAgICAgICAiMjpcblx0IgogICAgICAg ICAgICAgICAgIiAgZGVjdyAgICAgICUlZHhcblx0IgogICAgICAgICAgICAgICAgIiAgam56ICAg ICAgIDFiXG5cdCIKICAgICAgICAgICAgICAgICIgIHB1c2hsICAgICAlJWVjeFxuXHQiCiAgICAg ICAgICAgICAgICAiICBjYWxsICAgICAgcndzZW1fd2FrZVxuXHQiCiAgICAgICAgICAgICAgICAi ICBwb3BsICAgICAgJSVlY3hcblx0IgogICAgICAgICAgICAgICAgIiAgam1wICAgICAgIDFiXG4i CiAgICAgICAgICAgICAgICAiLnByZXZpb3VzXG5cdCIKICAgICAgICAgICAgICAgICIjIGVuZGlu ZyBfX3VwX3dyaXRlXG4iCiAgICAgICAgICAgICAgICA6ICIrbSIoc2VtLT5jb3VudCkKICAgICAg ICAgICAgICAgIDogImEiKHNlbSksICJpIigtKCgtMHgwMDAxMDAwMCkgKyAweDAwMDAwMDAxKSkK ICAgICAgICAgICAgICAgIDogIm1lbW9yeSIsICJjYyIsICJlZHgiKTsKfQoKCgoKc3RhdGljIGlu bGluZSB2b2lkIHJ3c2VtX2F0b21pY19hZGQoaW50IGRlbHRhLCBzdHJ1Y3Qgcndfc2VtYXBob3Jl ICpzZW0pCnsKICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygKImxvY2sgOyAiICJhZGRsICUx LCUwIgogICAgICAgICAgICAgICAgOiI9bSIoc2VtLT5jb3VudCkKICAgICAgICAgICAgICAgIDoi aXIiKGRlbHRhKSwgIm0iKHNlbS0+Y291bnQpKTsKfQoKCgoKc3RhdGljIGlubGluZSBpbnQgcndz ZW1fYXRvbWljX3VwZGF0ZShpbnQgZGVsdGEsIHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKewog ICAgICAgIGludCB0bXAgPSBkZWx0YTsKCiAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oCiJs b2NrIDsgIiAieGFkZCAlMCwoJTIpIgogICAgICAgICAgICAgICAgOiAiK3IiKHRtcCksICI9bSIo c2VtLT5jb3VudCkKICAgICAgICAgICAgICAgIDogInIiKHNlbSksICJtIihzZW0tPmNvdW50KQog ICAgICAgICAgICAgICAgOiAibWVtb3J5Iik7CgogICAgICAgIHJldHVybiB0bXArZGVsdGE7Cn0K IyAzMCAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvcndzZW0uaCIgMgojIDQz ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9yd3NlbS5oIgpzdGF0aWMgaW5s aW5lIHZvaWQgZG93bl9yZWFkKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKewogICAgICAgIDsK ICAgICAgICBfX2Rvd25fcmVhZChzZW0pOwogICAgICAgIDsKfQoKCgoKc3RhdGljIGlubGluZSBp bnQgZG93bl9yZWFkX3RyeWxvY2soc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQp7CiAgICAgICAg aW50IHJldDsKICAgICAgICA7CiAgICAgICAgcmV0ID0gX19kb3duX3JlYWRfdHJ5bG9jayhzZW0p OwogICAgICAgIDsKICAgICAgICByZXR1cm4gcmV0Owp9CgoKCgpzdGF0aWMgaW5saW5lIHZvaWQg ZG93bl93cml0ZShzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCnsKICAgICAgICA7CiAgICAgICAg X19kb3duX3dyaXRlKHNlbSk7CiAgICAgICAgOwp9CgoKCgpzdGF0aWMgaW5saW5lIGludCBkb3du X3dyaXRlX3RyeWxvY2soc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQp7CiAgICAgICAgaW50IHJl dDsKICAgICAgICA7CiAgICAgICAgcmV0ID0gX19kb3duX3dyaXRlX3RyeWxvY2soc2VtKTsKICAg ICAgICA7CiAgICAgICAgcmV0dXJuIHJldDsKfQoKCgoKc3RhdGljIGlubGluZSB2b2lkIHVwX3Jl YWQoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQp7CiAgICAgICAgOwogICAgICAgIF9fdXBfcmVh ZChzZW0pOwogICAgICAgIDsKfQoKCgoKc3RhdGljIGlubGluZSB2b2lkIHVwX3dyaXRlKHN0cnVj dCByd19zZW1hcGhvcmUgKnNlbSkKewogICAgICAgIDsKICAgICAgICBfX3VwX3dyaXRlKHNlbSk7 CiAgICAgICAgOwp9CiMgNDMgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS9zZW1h cGhvcmUuaCIgMgoKc3RydWN0IHNlbWFwaG9yZSB7CiAgICAgICAgYXRvbWljX3QgY291bnQ7CiAg ICAgICAgaW50IHNsZWVwZXJzOwogICAgICAgIHdhaXRfcXVldWVfaGVhZF90IHdhaXQ7CgoKCn07 CiMgNzMgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS9zZW1hcGhvcmUuaCIKc3Rh dGljIGlubGluZSB2b2lkIHNlbWFfaW5pdCAoc3RydWN0IHNlbWFwaG9yZSAqc2VtLCBpbnQgdmFs KQp7CgoKCgoKCiAgICAgICAgKCgoJnNlbS0+Y291bnQpLT5jb3VudGVyKSA9ICh2YWwpKTsKICAg ICAgICBzZW0tPnNsZWVwZXJzID0gMDsKICAgICAgICBpbml0X3dhaXRxdWV1ZV9oZWFkKCZzZW0t PndhaXQpOwoKCgp9CgpzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9NVVRFWCAoc3RydWN0IHNlbWFw aG9yZSAqc2VtKQp7CiAgICAgICAgc2VtYV9pbml0KHNlbSwgMSk7Cn0KCnN0YXRpYyBpbmxpbmUg dm9pZCBpbml0X01VVEVYX0xPQ0tFRCAoc3RydWN0IHNlbWFwaG9yZSAqc2VtKQp7CiAgICAgICAg c2VtYV9pbml0KHNlbSwgMCk7Cn0KCiBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDApKSkgdm9pZCBf X2Rvd25fZmFpbGVkKHZvaWQgKTsKIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMCkpKSBpbnQgX19k b3duX2ZhaWxlZF9pbnRlcnJ1cHRpYmxlKHZvaWQgKTsKIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0o MCkpKSBpbnQgX19kb3duX2ZhaWxlZF90cnlsb2NrKHZvaWQgKTsKIF9fYXR0cmlidXRlX18oKHJl Z3Bhcm0oMCkpKSB2b2lkIF9fdXBfd2FrZXVwKHZvaWQgKTsKCiBfX2F0dHJpYnV0ZV9fKChyZWdw YXJtKDApKSkgdm9pZCBfX2Rvd24oc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7CiBfX2F0dHJpYnV0 ZV9fKChyZWdwYXJtKDApKSkgaW50IF9fZG93bl9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZW1hcGhv cmUgKiBzZW0pOwogX19hdHRyaWJ1dGVfXygocmVncGFybSgwKSkpIGludCBfX2Rvd25fdHJ5bG9j ayhzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKTsKIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMCkpKSB2 b2lkIF9fdXAoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7CgoKCgoKCnN0YXRpYyBpbmxpbmUgdm9p ZCBkb3duKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCnsKCgoKCiAgICAgICAgX19hc21fXyBfX3Zv bGF0aWxlX18oCiAgICAgICAgICAgICAgICAiIyBhdG9taWMgZG93biBvcGVyYXRpb25cblx0Igog ICAgICAgICAgICAgICAgImxvY2sgOyAiICJkZWNsICUwXG5cdCIKICAgICAgICAgICAgICAgICJq cyAyZlxuIgogICAgICAgICAgICAgICAgIjE6XG4iCiAgICAgICAgICAgICAgICAiLnN1YnNlY3Rp b24gMVxuXHQiICIiICIuaWZuZGVmICIgIi50ZXh0LmxvY2suIiAic2NoZWQiICJcblx0IiAiLnRl eHQubG9jay4iICJzY2hlZCIgIjpcblx0IiAiLmVuZGlmXG5cdCIKICAgICAgICAgICAgICAgICIy Olx0Y2FsbCBfX2Rvd25fZmFpbGVkXG5cdCIKICAgICAgICAgICAgICAgICJqbXAgMWJcbiIKICAg ICAgICAgICAgICAgICIucHJldmlvdXNcblx0IgogICAgICAgICAgICAgICAgOiI9bSIgKHNlbS0+ Y291bnQpCiAgICAgICAgICAgICAgICA6ImMiIChzZW0pCiAgICAgICAgICAgICAgICA6Im1lbW9y eSIpOwp9CgoKCgoKc3RhdGljIGlubGluZSBpbnQgZG93bl9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBz ZW1hcGhvcmUgKiBzZW0pCnsKICAgICAgICBpbnQgcmVzdWx0OwoKCgoKCiAgICAgICAgX19hc21f XyBfX3ZvbGF0aWxlX18oCiAgICAgICAgICAgICAgICAiIyBhdG9taWMgaW50ZXJydXB0aWJsZSBk b3duIG9wZXJhdGlvblxuXHQiCiAgICAgICAgICAgICAgICAibG9jayA7ICIgImRlY2wgJTFcblx0 IgogICAgICAgICAgICAgICAgImpzIDJmXG5cdCIKICAgICAgICAgICAgICAgICJ4b3JsICUwLCUw XG4iCiAgICAgICAgICAgICAgICAiMTpcbiIKICAgICAgICAgICAgICAgICIuc3Vic2VjdGlvbiAx XG5cdCIgIiIgIi5pZm5kZWYgIiAiLnRleHQubG9jay4iICJzY2hlZCIgIlxuXHQiICIudGV4dC5s b2NrLiIgInNjaGVkIiAiOlxuXHQiICIuZW5kaWZcblx0IgogICAgICAgICAgICAgICAgIjI6XHRj YWxsIF9fZG93bl9mYWlsZWRfaW50ZXJydXB0aWJsZVxuXHQiCiAgICAgICAgICAgICAgICAiam1w IDFiXG4iCiAgICAgICAgICAgICAgICAiLnByZXZpb3VzXG5cdCIKICAgICAgICAgICAgICAgIDoi PWEiIChyZXN1bHQpLCAiPW0iIChzZW0tPmNvdW50KQogICAgICAgICAgICAgICAgOiJjIiAoc2Vt KQogICAgICAgICAgICAgICAgOiJtZW1vcnkiKTsKICAgICAgICByZXR1cm4gcmVzdWx0Owp9CgoK CgoKc3RhdGljIGlubGluZSBpbnQgZG93bl90cnlsb2NrKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0p CnsKICAgICAgICBpbnQgcmVzdWx0OwoKCgoKCiAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18o CiAgICAgICAgICAgICAgICAiIyBhdG9taWMgaW50ZXJydXB0aWJsZSBkb3duIG9wZXJhdGlvblxu XHQiCiAgICAgICAgICAgICAgICAibG9jayA7ICIgImRlY2wgJTFcblx0IgogICAgICAgICAgICAg ICAgImpzIDJmXG5cdCIKICAgICAgICAgICAgICAgICJ4b3JsICUwLCUwXG4iCiAgICAgICAgICAg ICAgICAiMTpcbiIKICAgICAgICAgICAgICAgICIuc3Vic2VjdGlvbiAxXG5cdCIgIiIgIi5pZm5k ZWYgIiAiLnRleHQubG9jay4iICJzY2hlZCIgIlxuXHQiICIudGV4dC5sb2NrLiIgInNjaGVkIiAi OlxuXHQiICIuZW5kaWZcblx0IgogICAgICAgICAgICAgICAgIjI6XHRjYWxsIF9fZG93bl9mYWls ZWRfdHJ5bG9ja1xuXHQiCiAgICAgICAgICAgICAgICAiam1wIDFiXG4iCiAgICAgICAgICAgICAg ICAiLnByZXZpb3VzXG5cdCIKICAgICAgICAgICAgICAgIDoiPWEiIChyZXN1bHQpLCAiPW0iIChz ZW0tPmNvdW50KQogICAgICAgICAgICAgICAgOiJjIiAoc2VtKQogICAgICAgICAgICAgICAgOiJt ZW1vcnkiKTsKICAgICAgICByZXR1cm4gcmVzdWx0Owp9CgoKCgoKCgpzdGF0aWMgaW5saW5lIHZv aWQgdXAoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKewoKCgogICAgICAgIF9fYXNtX18gX192b2xh dGlsZV9fKAogICAgICAgICAgICAgICAgIiMgYXRvbWljIHVwIG9wZXJhdGlvblxuXHQiCiAgICAg ICAgICAgICAgICAibG9jayA7ICIgImluY2wgJTBcblx0IgogICAgICAgICAgICAgICAgImpsZSAy ZlxuIgogICAgICAgICAgICAgICAgIjE6XG4iCiAgICAgICAgICAgICAgICAiLnN1YnNlY3Rpb24g MVxuXHQiICIiICIuaWZuZGVmICIgIi50ZXh0LmxvY2suIiAic2NoZWQiICJcblx0IiAiLnRleHQu bG9jay4iICJzY2hlZCIgIjpcblx0IiAiLmVuZGlmXG5cdCIKICAgICAgICAgICAgICAgICIyOlx0 Y2FsbCBfX3VwX3dha2V1cFxuXHQiCiAgICAgICAgICAgICAgICAiam1wIDFiXG4iCiAgICAgICAg ICAgICAgICAiLnByZXZpb3VzXG5cdCIKICAgICAgICAgICAgICAgICIuc3Vic2VjdGlvbiAwXG4i CiAgICAgICAgICAgICAgICA6Ij1tIiAoc2VtLT5jb3VudCkKICAgICAgICAgICAgICAgIDoiYyIg KHNlbSkKICAgICAgICAgICAgICAgIDoibWVtb3J5Iik7Cn0KCnN0YXRpYyBpbmxpbmUgaW50IHNl bV9nZXRjb3VudChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCnsKICAgICAgICByZXR1cm4gKCgmc2Vt LT5jb3VudCktPmNvdW50ZXIpOwp9CiMgMjAyICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVk ZS9saW51eC9mcy5oIiAyCgoKZXh0ZXJuIHZvaWQgdXBkYXRlX2F0aW1lIChzdHJ1Y3QgaW5vZGUg Kik7CgoKZXh0ZXJuIHZvaWQgYnVmZmVyX2luaXQodW5zaWduZWQgbG9uZyk7CmV4dGVybiB2b2lk IGlub2RlX2luaXQodW5zaWduZWQgbG9uZyk7CmV4dGVybiB2b2lkIG1udF9pbml0KHVuc2lnbmVk IGxvbmcpOwpleHRlcm4gdm9pZCBmaWxlc19pbml0KHVuc2lnbmVkIGxvbmcgbWVtcGFnZXMpOwoK CmVudW0gYmhfc3RhdGVfYml0cyB7CiAgICAgICAgQkhfVXB0b2RhdGUsCiAgICAgICAgQkhfRGly dHksCiAgICAgICAgQkhfTG9jaywKICAgICAgICBCSF9SZXEsCiAgICAgICAgQkhfTWFwcGVkLAog ICAgICAgIEJIX05ldywKICAgICAgICBCSF9Bc3luYywKICAgICAgICBCSF9XYWl0X0lPLAogICAg ICAgIEJIX0xhdW5kZXIsCiAgICAgICAgQkhfQXR0YWNoZWQsCiAgICAgICAgQkhfSkJELAoKICAg ICAgICBCSF9Qcml2YXRlU3RhcnQsCgoKfTsKIyAyNDQgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9p bmNsdWRlL2xpbnV4L2ZzLmgiCnN0cnVjdCBidWZmZXJfaGVhZCB7CgogICAgICAgIHN0cnVjdCBi dWZmZXJfaGVhZCAqYl9uZXh0OwogICAgICAgIHVuc2lnbmVkIGxvbmcgYl9ibG9ja25yOwogICAg ICAgIHVuc2lnbmVkIHNob3J0IGJfc2l6ZTsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBiX2xpc3Q7 CiAgICAgICAga2Rldl90IGJfZGV2OwoKICAgICAgICBhdG9taWNfdCBiX2NvdW50OwogICAgICAg IGtkZXZfdCBiX3JkZXY7CiAgICAgICAgdW5zaWduZWQgbG9uZyBiX3N0YXRlOwogICAgICAgIHVu c2lnbmVkIGxvbmcgYl9mbHVzaHRpbWU7CgogICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYl9u ZXh0X2ZyZWU7CiAgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiX3ByZXZfZnJlZTsKICAgICAg ICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJfdGhpc19wYWdlOwogICAgICAgIHN0cnVjdCBidWZmZXJf aGVhZCAqYl9yZXFuZXh0OwoKICAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiX3BwcmV2Owog ICAgICAgIGNoYXIgKiBiX2RhdGE7CiAgICAgICAgc3RydWN0IHBhZ2UgKmJfcGFnZTsKICAgICAg ICB2b2lkICgqYl9lbmRfaW8pKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCB1cHRvZGF0ZSk7 CiAgICAgICAgdm9pZCAqYl9wcml2YXRlOwoKICAgICAgICB1bnNpZ25lZCBsb25nIGJfcnNlY3Rv cjsKICAgICAgICB3YWl0X3F1ZXVlX2hlYWRfdCBiX3dhaXQ7CgogICAgICAgIHN0cnVjdCBsaXN0 X2hlYWQgYl9pbm9kZV9idWZmZXJzOwp9OwoKdHlwZWRlZiB2b2lkIChiaF9lbmRfaW9fdCkoc3Ry dWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IHVwdG9kYXRlKTsKdm9pZCBpbml0X2J1ZmZlcihzdHJ1 Y3QgYnVmZmVyX2hlYWQgKiwgYmhfZW5kX2lvX3QgKiwgdm9pZCAqKTsKIyAyOTAgIi91c3Ivc3Jj L2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L2ZzLmgiCmV4dGVybiB2b2lkIHNldF9iaF9wYWdl KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25n IG9mZnNldCk7CgoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L3Bp cGVfZnNfaS5oIiAxCgoKCgpzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvIHsKICAgICAgICB3YWl0X3F1 ZXVlX2hlYWRfdCB3YWl0OwogICAgICAgIGNoYXIgKmJhc2U7CiAgICAgICAgdW5zaWduZWQgaW50 IGxlbjsKICAgICAgICB1bnNpZ25lZCBpbnQgc3RhcnQ7CiAgICAgICAgdW5zaWduZWQgaW50IHJl YWRlcnM7CiAgICAgICAgdW5zaWduZWQgaW50IHdyaXRlcnM7CiAgICAgICAgdW5zaWduZWQgaW50 IHdhaXRpbmdfcmVhZGVyczsKICAgICAgICB1bnNpZ25lZCBpbnQgd2FpdGluZ193cml0ZXJzOwog ICAgICAgIHVuc2lnbmVkIGludCByX2NvdW50ZXI7CiAgICAgICAgdW5zaWduZWQgaW50IHdfY291 bnRlcjsKfTsKIyA0MiAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvcGlwZV9m c19pLmgiCnZvaWQgcGlwZV93YWl0KHN0cnVjdCBpbm9kZSAqIGlub2RlKTsKCnN0cnVjdCBpbm9k ZSogcGlwZV9uZXcoc3RydWN0IGlub2RlKiBpbm9kZSk7CiMgMjk2ICIvdXNyL3NyYy9saW51eC0y LjQuMjAvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2lu Y2x1ZGUvbGludXgvc3VwZXJtb3VudF9mc19pLmgiIDEKCgoKc3RydWN0IHN1cGVybW91bnRfaW5v ZGVfaW5mbyB7CiAgICAgICAgaW50IGlfc2JfdmVyc2lvbjsKICAgICAgICBzdHJ1Y3QgZGVudHJ5 ICogaV9kZW50cnk7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBpX2ZzOwp9OwojIDI5NyAiL3Vz ci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xp bnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L21pbml4X2ZzX2kuaCIgMQoKCgoKCgpzdHJ1Y3QgbWlu aXhfaW5vZGVfaW5mbyB7CiAgICAgICAgdW5pb24gewogICAgICAgICAgICAgICAgX191MTYgaTFf ZGF0YVsxNl07CiAgICAgICAgICAgICAgICBfX3UzMiBpMl9kYXRhWzE2XTsKICAgICAgICB9IHU7 Cn07CiMgMjk4ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMg MSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvZXh0Ml9mc19pLmgiIDEKIyAy MiAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvZXh0Ml9mc19pLmgiCnN0cnVj dCBleHQyX2lub2RlX2luZm8gewogICAgICAgIF9fdTMyIGlfZGF0YVsxNV07CiAgICAgICAgX191 MzIgaV9mbGFnczsKICAgICAgICBfX3UzMiBpX2ZhZGRyOwogICAgICAgIF9fdTggaV9mcmFnX25v OwogICAgICAgIF9fdTggaV9mcmFnX3NpemU7CiAgICAgICAgX191MzIgaV9maWxlX2FjbDsKICAg ICAgICBfX3UzMiBpX2Rpcl9hY2w7CiAgICAgICAgX191MzIgaV9kdGltZTsKICAgICAgICBfX3Uz MiBpX2Jsb2NrX2dyb3VwOwogICAgICAgIF9fdTMyIGlfbmV4dF9hbGxvY19ibG9jazsKICAgICAg ICBfX3UzMiBpX25leHRfYWxsb2NfZ29hbDsKICAgICAgICBfX3UzMiBpX3ByZWFsbG9jX2Jsb2Nr OwogICAgICAgIF9fdTMyIGlfcHJlYWxsb2NfY291bnQ7CiAgICAgICAgX191MzIgaV9kaXJfc3Rh cnRfbG9va3VwOwogICAgICAgIGludCBpX25ld19pbm9kZToxOwp9OwojIDI5OSAiL3Vzci9zcmMv bGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIu NC4yMC9pbmNsdWRlL2xpbnV4L2V4dDNfZnNfaS5oIiAxCiMgMjQgIi91c3Ivc3JjL2xpbnV4LTIu NC4yMC9pbmNsdWRlL2xpbnV4L2V4dDNfZnNfaS5oIgpzdHJ1Y3QgZXh0M19pbm9kZV9pbmZvIHsK ICAgICAgICBfX3UzMiBpX2RhdGFbMTVdOwogICAgICAgIF9fdTMyIGlfZmxhZ3M7CgoKCgoKCiAg ICAgICAgX191MzIgaV9maWxlX2FjbDsKICAgICAgICBfX3UzMiBpX2Rpcl9hY2w7CiAgICAgICAg X191MzIgaV9kdGltZTsKICAgICAgICBfX3UzMiBpX2Jsb2NrX2dyb3VwOwogICAgICAgIF9fdTMy IGlfc3RhdGU7CiAgICAgICAgX191MzIgaV9uZXh0X2FsbG9jX2Jsb2NrOwogICAgICAgIF9fdTMy IGlfbmV4dF9hbGxvY19nb2FsOwoKCgoKICAgICAgICBfX3UzMiBpX2Rpcl9zdGFydF9sb29rdXA7 CgogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgaV9vcnBoYW47CiMgNjMgIi91c3Ivc3JjL2xpbnV4 LTIuNC4yMC9pbmNsdWRlL2xpbnV4L2V4dDNfZnNfaS5oIgogICAgICAgIGxvZmZfdCBpX2Rpc2tz aXplOwojIDc1ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9leHQzX2ZzX2ku aCIKICAgICAgICBzdHJ1Y3Qgcndfc2VtYXBob3JlIHRydW5jYXRlX3NlbTsKfTsKIyAzMDAgIi91 c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9s aW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9ocGZzX2ZzX2kuaCIgMQoKCgpzdHJ1Y3QgaHBmc19p bm9kZV9pbmZvIHsKICAgICAgICB1bnNpZ25lZCBsb25nIG1tdV9wcml2YXRlOwogICAgICAgIGlu b190IGlfcGFyZW50X2RpcjsKICAgICAgICB1bnNpZ25lZCBpX2RubzsKICAgICAgICB1bnNpZ25l ZCBpX2Rwb3M7CiAgICAgICAgdW5zaWduZWQgaV9kc3ViZG5vOwogICAgICAgIHVuc2lnbmVkIGlf ZmlsZV9zZWM7CiAgICAgICAgdW5zaWduZWQgaV9kaXNrX3NlYzsKICAgICAgICB1bnNpZ25lZCBp X25fc2VjczsKICAgICAgICB1bnNpZ25lZCBpX2VhX3NpemU7CiAgICAgICAgdW5zaWduZWQgaV9j b252IDogMjsKICAgICAgICB1bnNpZ25lZCBpX2VhX21vZGUgOiAxOwogICAgICAgIHVuc2lnbmVk IGlfZWFfdWlkIDogMTsKICAgICAgICB1bnNpZ25lZCBpX2VhX2dpZCA6IDE7CiAgICAgICAgdW5z aWduZWQgaV9kaXJ0eSA6IDE7CiAgICAgICAgc3RydWN0IHNlbWFwaG9yZSBpX3NlbTsKICAgICAg ICBsb2ZmX3QgKippX3JkZGlyX29mZjsKfTsKIyAzMDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9p bmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9s aW51eC9udGZzX2ZzX2kuaCIgMQoKCgoKCgpzdHJ1Y3QgbnRmc19hdHRyaWJ1dGU7CnN0cnVjdCBu dGZzX3NiX2luZm87CgoKCgp0eXBlZGVmIHU4IG50ZnNfdTg7CnR5cGVkZWYgdTE2IG50ZnNfdTE2 Owp0eXBlZGVmIHUzMiBudGZzX3UzMjsKdHlwZWRlZiB1NjQgbnRmc191NjQ7CnR5cGVkZWYgczgg bnRmc19zODsKdHlwZWRlZiBzMTYgbnRmc19zMTY7CnR5cGVkZWYgczMyIG50ZnNfczMyOwp0eXBl ZGVmIHM2NCBudGZzX3M2NDsKCgoKCnR5cGVkZWYgX19rZXJuZWxfbW9kZV90IG50bW9kZV90OwoK Cgp0eXBlZGVmIHVpZF90IG50ZnNfdWlkX3Q7CgoKCnR5cGVkZWYgZ2lkX3QgbnRmc19naWRfdDsK CgoKdHlwZWRlZiBfX2tlcm5lbF9zaXplX3QgbnRmc19zaXplX3Q7CgoKCnR5cGVkZWYgX19rZXJu ZWxfdGltZV90IG50ZnNfdGltZV90OwoKCgoKCnR5cGVkZWYgdTE2IG50ZnNfd2NoYXJfdDsKCgoK CnR5cGVkZWYgczY0IG50ZnNfb2Zmc2V0X3Q7CgoKCgp0eXBlZGVmIHU2NCBudGZzX3RpbWU2NF90 OwojIDY5ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9udGZzX2ZzX2kuaCIK dHlwZWRlZiBzMzIgbnRmc19jbHVzdGVyX3Q7CgoKCnN0cnVjdCBudGZzX2lub2RlX2luZm8gewog ICAgICAgIHN0cnVjdCBudGZzX3NiX2luZm8gKnZvbDsKICAgICAgICB1bnNpZ25lZCBsb25nIGlf bnVtYmVyOwogICAgICAgIF9fdTE2IHNlcXVlbmNlX251bWJlcjsKICAgICAgICB1bnNpZ25lZCBj aGFyICphdHRyOwogICAgICAgIGludCBhdHRyX2NvdW50OwogICAgICAgIHN0cnVjdCBudGZzX2F0 dHJpYnV0ZSAqYXR0cnM7CiAgICAgICAgaW50IHJlY29yZF9jb3VudDsKICAgICAgICBpbnQgKnJl Y29yZHM7CgogICAgICAgIHVuaW9uIHsKICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAg ICAgICAgICAgICAgICAgIGludCByZWNvcmRzaXplOwogICAgICAgICAgICAgICAgICAgICAgICBp bnQgY2x1c3RlcnNfcGVyX3JlY29yZDsKICAgICAgICAgICAgICAgIH0gaW5kZXg7CiAgICAgICAg fSB1Owp9OwojIDMwMiAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvZnMuaCIg MgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L21zZG9zX2ZzX2kuaCIg MQoKCgoKCgoKc3RydWN0IG1zZG9zX2lub2RlX2luZm8gewogICAgICAgIHVuc2lnbmVkIGxvbmcg bW11X3ByaXZhdGU7CiAgICAgICAgaW50IGlfc3RhcnQ7CiAgICAgICAgaW50IGlfbG9nc3RhcnQ7 CiAgICAgICAgaW50IGlfYXR0cnM7CiAgICAgICAgaW50IGlfY3RpbWVfbXM7CiAgICAgICAgaW50 IGlfbG9jYXRpb247CiAgICAgICAgc3RydWN0IGlub2RlICppX2ZhdF9pbm9kZTsKICAgICAgICBz dHJ1Y3QgbGlzdF9oZWFkIGlfZmF0X2hhc2g7Cn07CiMgMzAzICIvdXNyL3NyYy9saW51eC0yLjQu MjAvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1 ZGUvbGludXgvdW1zZG9zX2ZzX2kuaCIgMQojIDM5ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5j bHVkZS9saW51eC91bXNkb3NfZnNfaS5oIgpzdHJ1Y3QgZGlyX2xvY2tpbmdfaW5mbyB7CiAgICAg ICAgd2FpdF9xdWV1ZV9oZWFkX3QgcDsKICAgICAgICBzaG9ydCBpbnQgbG9va2luZzsKICAgICAg ICBzaG9ydCBpbnQgY3JlYXRpbmc7CgoKCiAgICAgICAgbG9uZyBwaWQ7Cgp9OwoKc3RydWN0IHVt c2Rvc19pbm9kZV9pbmZvIHsKICAgICAgICBzdHJ1Y3QgbXNkb3NfaW5vZGVfaW5mbyBtc2Rvc19p bmZvOwogICAgICAgIHN0cnVjdCBkaXJfbG9ja2luZ19pbmZvIGRpcl9pbmZvOwogICAgICAgIGlu dCBpX3BhdGNoZWQ7CiAgICAgICAgaW50IGlfaXNfaGxpbms7CiAgICAgICAgb2ZmX3QgcG9zOwp9 OwojIDMwNCAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L2lzb19mc19pLmgiIDEKCgoKZW51 bSBpc29mc19maWxlX2Zvcm1hdCB7CiAgICAgICAgaXNvZnNfZmlsZV9ub3JtYWwgPSAwLAogICAg ICAgIGlzb2ZzX2ZpbGVfc3BhcnNlID0gMSwKICAgICAgICBpc29mc19maWxlX2NvbXByZXNzZWQg PSAyLAp9OwoKCgoKc3RydWN0IGlzb19pbm9kZV9pbmZvIHsKICAgICAgICB1bnNpZ25lZCBpbnQg aV9maXJzdF9leHRlbnQ7CiAgICAgICAgdW5zaWduZWQgY2hhciBpX2ZpbGVfZm9ybWF0OwogICAg ICAgIHVuc2lnbmVkIGNoYXIgaV9mb3JtYXRfcGFybVszXTsKICAgICAgICB1bnNpZ25lZCBsb25n IGlfbmV4dF9zZWN0aW9uX2lubzsKICAgICAgICBvZmZfdCBpX3NlY3Rpb25fc2l6ZTsKfTsKIyAz MDUgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNy L3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9uZnNfZnNfaS5oIiAxCgoKCgoKIyAxICIv dXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9uZnMuaCIgMQojIDEwICIvdXNyL3Ny Yy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9uZnMuaCIKIyAxICIvdXNyL3NyYy9saW51eC0y LjQuMjAvaW5jbHVkZS9saW51eC9zdW5ycGMvbXNnX3Byb3QuaCIgMQojIDE0ICIvdXNyL3NyYy9s aW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9zdW5ycGMvbXNnX3Byb3QuaCIKZW51bSBycGNfYXV0 aF9mbGF2b3IgewogICAgICAgIFJQQ19BVVRIX05VTEwgPSAwLAogICAgICAgIFJQQ19BVVRIX1VO SVggPSAxLAogICAgICAgIFJQQ19BVVRIX1NIT1JUID0gMiwKICAgICAgICBSUENfQVVUSF9ERVMg PSAzLAogICAgICAgIFJQQ19BVVRIX0tSQiA9IDQsCn07CgplbnVtIHJwY19tc2dfdHlwZSB7CiAg ICAgICAgUlBDX0NBTEwgPSAwLAogICAgICAgIFJQQ19SRVBMWSA9IDEKfTsKCmVudW0gcnBjX3Jl cGx5X3N0YXQgewogICAgICAgIFJQQ19NU0dfQUNDRVBURUQgPSAwLAogICAgICAgIFJQQ19NU0df REVOSUVEID0gMQp9OwoKZW51bSBycGNfYWNjZXB0X3N0YXQgewogICAgICAgIFJQQ19TVUNDRVNT ID0gMCwKICAgICAgICBSUENfUFJPR19VTkFWQUlMID0gMSwKICAgICAgICBSUENfUFJPR19NSVNN QVRDSCA9IDIsCiAgICAgICAgUlBDX1BST0NfVU5BVkFJTCA9IDMsCiAgICAgICAgUlBDX0dBUkJB R0VfQVJHUyA9IDQsCiAgICAgICAgUlBDX1NZU1RFTV9FUlIgPSA1Cn07CgplbnVtIHJwY19yZWpl Y3Rfc3RhdCB7CiAgICAgICAgUlBDX01JU01BVENIID0gMCwKICAgICAgICBSUENfQVVUSF9FUlJP UiA9IDEKfTsKCmVudW0gcnBjX2F1dGhfc3RhdCB7CiAgICAgICAgUlBDX0FVVEhfT0sgPSAwLAog ICAgICAgIFJQQ19BVVRIX0JBRENSRUQgPSAxLAogICAgICAgIFJQQ19BVVRIX1JFSkVDVEVEQ1JF RCA9IDIsCiAgICAgICAgUlBDX0FVVEhfQkFEVkVSRiA9IDMsCiAgICAgICAgUlBDX0FVVEhfUkVK RUNURURWRVJGID0gNCwKICAgICAgICBSUENfQVVUSF9UT09XRUFLID0gNQp9OwojIDExICIvdXNy L3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9uZnMuaCIgMgojIDQxICIvdXNyL3NyYy9s aW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9uZnMuaCIKIGVudW0gbmZzX3N0YXQgewogICAgICAg IE5GU19PSyA9IDAsCiAgICAgICAgTkZTRVJSX1BFUk0gPSAxLAogICAgICAgIE5GU0VSUl9OT0VO VCA9IDIsCiAgICAgICAgTkZTRVJSX0lPID0gNSwKICAgICAgICBORlNFUlJfTlhJTyA9IDYsCiAg ICAgICAgTkZTRVJSX0VBR0FJTiA9IDExLAogICAgICAgIE5GU0VSUl9BQ0NFUyA9IDEzLAogICAg ICAgIE5GU0VSUl9FWElTVCA9IDE3LAogICAgICAgIE5GU0VSUl9YREVWID0gMTgsCiAgICAgICAg TkZTRVJSX05PREVWID0gMTksCiAgICAgICAgTkZTRVJSX05PVERJUiA9IDIwLAogICAgICAgIE5G U0VSUl9JU0RJUiA9IDIxLAogICAgICAgIE5GU0VSUl9JTlZBTCA9IDIyLAogICAgICAgIE5GU0VS Ul9GQklHID0gMjcsCiAgICAgICAgTkZTRVJSX05PU1BDID0gMjgsCiAgICAgICAgTkZTRVJSX1JP RlMgPSAzMCwKICAgICAgICBORlNFUlJfTUxJTksgPSAzMSwKICAgICAgICBORlNFUlJfT1BOT1RT VVBQID0gNDUsCiAgICAgICAgTkZTRVJSX05BTUVUT09MT05HID0gNjMsCiAgICAgICAgTkZTRVJS X05PVEVNUFRZID0gNjYsCiAgICAgICAgTkZTRVJSX0RRVU9UID0gNjksCiAgICAgICAgTkZTRVJS X1NUQUxFID0gNzAsCiAgICAgICAgTkZTRVJSX1JFTU9URSA9IDcxLAogICAgICAgIE5GU0VSUl9X RkxVU0ggPSA5OSwKICAgICAgICBORlNFUlJfQkFESEFORExFID0gMTAwMDEsCiAgICAgICAgTkZT RVJSX05PVF9TWU5DID0gMTAwMDIsCiAgICAgICAgTkZTRVJSX0JBRF9DT09LSUUgPSAxMDAwMywK ICAgICAgICBORlNFUlJfTk9UU1VQUCA9IDEwMDA0LAogICAgICAgIE5GU0VSUl9UT09TTUFMTCA9 IDEwMDA1LAogICAgICAgIE5GU0VSUl9TRVJWRVJGQVVMVCA9IDEwMDA2LAogICAgICAgIE5GU0VS Ul9CQURUWVBFID0gMTAwMDcsCiAgICAgICAgTkZTRVJSX0pVS0VCT1ggPSAxMDAwOAogfTsKCgoK ZW51bSBuZnNfZnR5cGUgewogICAgICAgIE5GTk9OID0gMCwKICAgICAgICBORlJFRyA9IDEsCiAg ICAgICAgTkZESVIgPSAyLAogICAgICAgIE5GQkxLID0gMywKICAgICAgICBORkNIUiA9IDQsCiAg ICAgICAgTkZMTksgPSA1LAogICAgICAgIE5GU09DSyA9IDYsCiAgICAgICAgTkZCQUQgPSA3LAog ICAgICAgIE5GRklGTyA9IDgKfTsKCgoKCgoKc3RydWN0IG5mc19maCB7CiAgICAgICAgdW5zaWdu ZWQgc2hvcnQgc2l6ZTsKICAgICAgICB1bnNpZ25lZCBjaGFyIGRhdGFbNjRdOwp9OwojIDEwNyAi L3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvbmZzLmgiCmVudW0gbmZzM19zdGFi bGVfaG93IHsKICAgICAgICBORlNfVU5TVEFCTEUgPSAwLAogICAgICAgIE5GU19EQVRBX1NZTkMg PSAxLAogICAgICAgIE5GU19GSUxFX1NZTkMgPSAyCn07CiMgNyAiL3Vzci9zcmMvbGludXgtMi40 LjIwL2luY2x1ZGUvbGludXgvbmZzX2ZzX2kuaCIgMgoKCgoKc3RydWN0IG5mc19pbm9kZV9pbmZv IHsKCgoKICAgICAgICBfX3U2NCBmaWxlaWQ7CgoKCgogICAgICAgIHN0cnVjdCBuZnNfZmggZmg7 CgoKCgogICAgICAgIHVuc2lnbmVkIHNob3J0IGZsYWdzOwojIDQ0ICIvdXNyL3NyYy9saW51eC0y LjQuMjAvaW5jbHVkZS9saW51eC9uZnNfZnNfaS5oIgogICAgICAgIHVuc2lnbmVkIGxvbmcgcmVh ZF9jYWNoZV9qaWZmaWVzOwogICAgICAgIF9fdTY0IHJlYWRfY2FjaGVfY3RpbWU7CiAgICAgICAg X191NjQgcmVhZF9jYWNoZV9tdGltZTsKICAgICAgICBfX3U2NCByZWFkX2NhY2hlX2lzaXplOwog ICAgICAgIHVuc2lnbmVkIGxvbmcgYXR0cnRpbWVvOwogICAgICAgIHVuc2lnbmVkIGxvbmcgYXR0 cnRpbWVvX3RpbWVzdGFtcDsKCgoKCgogICAgICAgIHVuc2lnbmVkIGxvbmcgY2FjaGVfbXRpbWVf amlmZmllczsKCgoKCgogICAgICAgIF9fdTMyIGNvb2tpZXZlcmZbMl07CgoKCgogICAgICAgIHN0 cnVjdCBsaXN0X2hlYWQgcmVhZDsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGRpcnR5OwogICAg ICAgIHN0cnVjdCBsaXN0X2hlYWQgY29tbWl0OwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgd3Jp dGViYWNrOwoKICAgICAgICB1bnNpZ25lZCBpbnQgbnJlYWQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbmRpcnR5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb21t aXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnBhZ2VzOwoKCiAgICAgICAgc3Ry dWN0IHJwY19jcmVkICptbV9jcmVkOwp9OwojIDkyICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5j bHVkZS9saW51eC9uZnNfZnNfaS5oIgpzdHJ1Y3QgbmZzX2xvY2tfaW5mbyB7CiAgICAgICAgdTMy IHN0YXRlOwogICAgICAgIHUzMiBmbGFnczsKICAgICAgICBzdHJ1Y3QgbmxtX2hvc3QgKmhvc3Q7 Cn07CiMgMzA2ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMg MSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvc3lzdl9mc19pLmgiIDEKCgoK CgoKc3RydWN0IHN5c3ZfaW5vZGVfaW5mbyB7CiAgICAgICAgdTMyIGlfZGF0YVsxMCsxKzErMV07 CgoKCgogICAgICAgIHUzMiBpX2Rpcl9zdGFydF9sb29rdXA7Cn07CiMgMzA3ICIvdXNyL3NyYy9s aW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40 LjIwL2luY2x1ZGUvbGludXgvYWZmc19mc19pLmgiIDEKCgoKIyAxICIvdXNyL3NyYy9saW51eC0y LjQuMjAvaW5jbHVkZS9saW51eC9hLm91dC5oIiAxCgoKCgoKCgojIDEgIi91c3Ivc3JjL2xpbnV4 LTIuNC4yMC9pbmNsdWRlL2FzbS9hLm91dC5oIiAxCgoKCnN0cnVjdCBleGVjCnsKICB1bnNpZ25l ZCBsb25nIGFfaW5mbzsKICB1bnNpZ25lZCBhX3RleHQ7CiAgdW5zaWduZWQgYV9kYXRhOwogIHVu c2lnbmVkIGFfYnNzOwogIHVuc2lnbmVkIGFfc3ltczsKICB1bnNpZ25lZCBhX2VudHJ5OwogIHVu c2lnbmVkIGFfdHJzaXplOwogIHVuc2lnbmVkIGFfZHJzaXplOwp9OwojIDkgIi91c3Ivc3JjL2xp bnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L2Eub3V0LmgiIDIKCgoKCmVudW0gbWFjaGluZV90eXBl IHsKCgoKICBNX09MRFNVTjIgPSAwLAoKCgoKICBNXzY4MDEwID0gMSwKCgoKCiAgTV82ODAyMCA9 IDIsCgoKCgogIE1fU1BBUkMgPSAzLAoKCiAgTV8zODYgPSAxMDAsCiAgTV9NSVBTMSA9IDE1MSwK ICBNX01JUFMyID0gMTUyCn07CiMgMTU3ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9s aW51eC9hLm91dC5oIgpzdHJ1Y3Qgbmxpc3QgewogIHVuaW9uIHsKICAgIGNoYXIgKm5fbmFtZTsK ICAgIHN0cnVjdCBubGlzdCAqbl9uZXh0OwogICAgbG9uZyBuX3N0cng7CiAgfSBuX3VuOwogIHVu c2lnbmVkIGNoYXIgbl90eXBlOwogIGNoYXIgbl9vdGhlcjsKICBzaG9ydCBuX2Rlc2M7CiAgdW5z aWduZWQgbG9uZyBuX3ZhbHVlOwp9OwojIDIzNSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1 ZGUvbGludXgvYS5vdXQuaCIKc3RydWN0IHJlbG9jYXRpb25faW5mbwp7CgogIGludCByX2FkZHJl c3M7CgogIHVuc2lnbmVkIGludCByX3N5bWJvbG51bToyNDsKCgoKICB1bnNpZ25lZCBpbnQgcl9w Y3JlbDoxOwoKCiAgdW5zaWduZWQgaW50IHJfbGVuZ3RoOjI7CgoKCgoKCiAgdW5zaWduZWQgaW50 IHJfZXh0ZXJuOjE7CgoKCgoKCgogIHVuc2lnbmVkIGludCByX3BhZDo0OwoKfTsKIyA1ICIvdXNy L3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9hZmZzX2ZzX2kuaCIgMgoKCiMgMSAiL3Vz ci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvdGltZS5oIiAxCiMgOSAiL3Vzci9zcmMv bGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvdGltZS5oIgpzdHJ1Y3QgdGltZXNwZWMgewogICAg ICAgIHRpbWVfdCB0dl9zZWM7CiAgICAgICAgbG9uZyB0dl9uc2VjOwp9OwojIDMxICIvdXNyL3Ny Yy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC90aW1lLmgiCnN0YXRpYyBfX2lubGluZV9fIHVu c2lnbmVkIGxvbmcKdGltZXNwZWNfdG9famlmZmllcyhzdHJ1Y3QgdGltZXNwZWMgKnZhbHVlKQp7 CiAgICAgICAgdW5zaWduZWQgbG9uZyBzZWMgPSB2YWx1ZS0+dHZfc2VjOwogICAgICAgIGxvbmcg bnNlYyA9IHZhbHVlLT50dl9uc2VjOwoKICAgICAgICBpZiAoc2VjID49ICgoKH4wVUwgPj4gMSkt MSkgLyAxMDApKQogICAgICAgICAgICAgICAgcmV0dXJuICgofjBVTCA+PiAxKS0xKTsKICAgICAg ICBuc2VjICs9IDEwMDAwMDAwMDBMIC8gMTAwIC0gMTsKICAgICAgICBuc2VjIC89IDEwMDAwMDAw MDBMIC8gMTAwOwogICAgICAgIHJldHVybiAxMDAgKiBzZWMgKyBuc2VjOwp9CgpzdGF0aWMgX19p bmxpbmVfXyB2b2lkCmppZmZpZXNfdG9fdGltZXNwZWModW5zaWduZWQgbG9uZyBqaWZmaWVzLCBz dHJ1Y3QgdGltZXNwZWMgKnZhbHVlKQp7CiAgICAgICAgdmFsdWUtPnR2X25zZWMgPSAoamlmZmll cyAlIDEwMCkgKiAoMTAwMDAwMDAwMEwgLyAxMDApOwogICAgICAgIHZhbHVlLT50dl9zZWMgPSBq aWZmaWVzIC8gMTAwOwp9CiMgNjcgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4 L3RpbWUuaCIKc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCm1rdGltZSAodW5zaWduZWQgaW50 IHllYXIsIHVuc2lnbmVkIGludCBtb24sCiAgICAgICAgdW5zaWduZWQgaW50IGRheSwgdW5zaWdu ZWQgaW50IGhvdXIsCiAgICAgICAgdW5zaWduZWQgaW50IG1pbiwgdW5zaWduZWQgaW50IHNlYykK ewogICAgICAgIGlmICgwID49IChpbnQpIChtb24gLT0gMikpIHsKICAgICAgICAgICAgICAgIG1v biArPSAxMjsKICAgICAgICAgICAgICAgIHllYXIgLT0gMTsKICAgICAgICB9CgogICAgICAgIHJl dHVybiAoKCgKICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKSAoeWVhci80IC0geWVhci8x MDAgKyB5ZWFyLzQwMCArIDM2Nyptb24vMTIgKyBkYXkpICsKICAgICAgICAgICAgICAgICAgICAg ICAgeWVhciozNjUgLSA3MTk0OTkKICAgICAgICAgICAgKSoyNCArIGhvdXIKICAgICAgICAgICkq NjAgKyBtaW4KICAgICAgICApKjYwICsgc2VjOwp9CgoKCgpzdHJ1Y3QgdGltZXZhbCB7CiAgICAg ICAgdGltZV90IHR2X3NlYzsKICAgICAgICBzdXNlY29uZHNfdCB0dl91c2VjOwp9OwoKc3RydWN0 IHRpbWV6b25lIHsKICAgICAgICBpbnQgdHpfbWludXRlc3dlc3Q7CiAgICAgICAgaW50IHR6X2Rz dHRpbWU7Cn07CgoKCgpleHRlcm4gdm9pZCBkb19nZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwg KnR2KTsKZXh0ZXJuIHZvaWQgZG9fc2V0dGltZW9mZGF5KHN0cnVjdCB0aW1ldmFsICp0dik7CiMg MTE5ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC90aW1lLmgiCnN0cnVjdCBp dGltZXJzcGVjIHsKICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgaXRfaW50ZXJ2YWw7CiAgICAgICAg c3RydWN0IHRpbWVzcGVjIGl0X3ZhbHVlOwp9OwoKc3RydWN0IGl0aW1lcnZhbCB7CiAgICAgICAg c3RydWN0IHRpbWV2YWwgaXRfaW50ZXJ2YWw7CiAgICAgICAgc3RydWN0IHRpbWV2YWwgaXRfdmFs dWU7Cn07CiMgOCAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvYWZmc19mc19p LmgiIDIKIyAxNyAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvYWZmc19mc19p LmgiCnN0cnVjdCBhZmZzX2V4dF9rZXkgewogICAgICAgIHUzMiBleHQ7CiAgICAgICAgdTMyIGtl eTsKfTsKCgoKCnN0cnVjdCBhZmZzX2lub2RlX2luZm8gewogICAgICAgIHUzMiBpX29wZW5jbnQ7 CiAgICAgICAgc3RydWN0IHNlbWFwaG9yZSBpX2xpbmtfbG9jazsKICAgICAgICBzdHJ1Y3Qgc2Vt YXBob3JlIGlfZXh0X2xvY2s7CgogICAgICAgIHUzMiBpX2Jsa2NudDsKICAgICAgICB1MzIgaV9l eHRjbnQ7CiAgICAgICAgdTMyICppX2xjOwogICAgICAgIHUzMiBpX2xjX3NpemU7CiAgICAgICAg dTMyIGlfbGNfc2hpZnQ7CiAgICAgICAgdTMyIGlfbGNfbWFzazsKICAgICAgICBzdHJ1Y3QgYWZm c19leHRfa2V5ICppX2FjOwogICAgICAgIHUzMiBpX2V4dF9sYXN0OwogICAgICAgIHN0cnVjdCBi dWZmZXJfaGVhZCAqaV9leHRfYmg7CiAgICAgICAgdW5zaWduZWQgbG9uZyBtbXVfcHJpdmF0ZTsK ICAgICAgICB1MzIgaV9wcm90ZWN0OwogICAgICAgIHUzMiBpX2xhc3RhbGxvYzsKICAgICAgICBp bnQgaV9wYV9jbnQ7CiMgNTEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L2Fm ZnNfZnNfaS5oIgp9OwojIDMwOCAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgv ZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L3Vmc19mc19p LmgiIDEKIyAxNiAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvdWZzX2ZzX2ku aCIKc3RydWN0IHVmc19pbm9kZV9pbmZvIHsKICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICAg ICBfX3UzMiBpX2RhdGFbMTVdOwogICAgICAgICAgICAgICAgX191OCBpX3N5bWxpbmtbNCoxNV07 CiAgICAgICAgfSBpX3UxOwogICAgICAgIF9fdTMyIGlfZmxhZ3M7CiAgICAgICAgX191MzIgaV9n ZW47CiAgICAgICAgX191MzIgaV9zaGFkb3c7CiAgICAgICAgX191MzIgaV91bnVzZWQxOwogICAg ICAgIF9fdTMyIGlfdW51c2VkMjsKICAgICAgICBfX3UzMiBpX29lZnRmbGFnOwogICAgICAgIF9f dTE2IGlfb3N5bmM7CiAgICAgICAgX191MzIgaV9sYXN0ZnJhZzsKfTsKIyAzMDkgIi91c3Ivc3Jj L2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0y LjQuMjAvaW5jbHVkZS9saW51eC9lZnNfZnNfaS5oIiAxCiMgMTIgIi91c3Ivc3JjL2xpbnV4LTIu NC4yMC9pbmNsdWRlL2xpbnV4L2Vmc19mc19pLmgiCnR5cGVkZWYgaW50MzJfdCBlZnNfYmxvY2tf dDsKdHlwZWRlZiB1aW50MzJfdCBlZnNfaW5vX3Q7CgoKCgoKCnR5cGVkZWYgdW5pb24gZXh0ZW50 X3UgewogICAgICAgIHVuc2lnbmVkIGNoYXIgcmF3WzhdOwogICAgICAgIHN0cnVjdCBleHRlbnRf cyB7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZXhfbWFnaWM6ODsKICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGludCBleF9ibjoyNDsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBl eF9sZW5ndGg6ODsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBleF9vZmZzZXQ6MjQ7CiAg ICAgICAgfSBjb29rZWQ7Cn0gZWZzX2V4dGVudDsKCnR5cGVkZWYgc3RydWN0IGVkZXZzIHsKICAg ICAgICBzaG9ydCBvZGV2OwogICAgICAgIHVuc2lnbmVkIGludCBuZGV2Owp9IGVmc19kZXZzOwoK CgoKCnN0cnVjdCBlZnNfZGlub2RlIHsKICAgICAgICB1X3Nob3J0IGRpX21vZGU7CiAgICAgICAg c2hvcnQgZGlfbmxpbms7CiAgICAgICAgdV9zaG9ydCBkaV91aWQ7CiAgICAgICAgdV9zaG9ydCBk aV9naWQ7CiAgICAgICAgaW50MzJfdCBkaV9zaXplOwogICAgICAgIGludDMyX3QgZGlfYXRpbWU7 CiAgICAgICAgaW50MzJfdCBkaV9tdGltZTsKICAgICAgICBpbnQzMl90IGRpX2N0aW1lOwogICAg ICAgIHVpbnQzMl90IGRpX2dlbjsKICAgICAgICBzaG9ydCBkaV9udW1leHRlbnRzOwogICAgICAg IHVfY2hhciBkaV92ZXJzaW9uOwogICAgICAgIHVfY2hhciBkaV9zcGFyZTsKICAgICAgICB1bmlv biBkaV9hZGRyIHsKICAgICAgICAgICAgICAgIGVmc19leHRlbnQgZGlfZXh0ZW50c1sxMl07CiAg ICAgICAgICAgICAgICBlZnNfZGV2cyBkaV9kZXY7CiAgICAgICAgfSBkaV91Owp9OwoKCnN0cnVj dCBlZnNfaW5vZGVfaW5mbyB7CiAgICAgICAgaW50IG51bWV4dGVudHM7CiAgICAgICAgaW50IGxh c3RleHRlbnQ7CgogICAgICAgIGVmc19leHRlbnQgZXh0ZW50c1sxMl07Cn07CiMgMzEwICIvdXNy L3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGlu dXgtMi40LjIwL2luY2x1ZGUvbGludXgvY29kYV9mc19pLmgiIDEKIyAxNCAiL3Vzci9zcmMvbGlu dXgtMi40LjIwL2luY2x1ZGUvbGludXgvY29kYV9mc19pLmgiCiMgMSAiL3Vzci9zcmMvbGludXgt Mi40LjIwL2luY2x1ZGUvbGludXgvY29kYS5oIiAxCiMgMTA5ICIvdXNyL3NyYy9saW51eC0yLjQu MjAvaW5jbHVkZS9saW51eC9jb2RhLmgiCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVfcXVh ZF90OwojIDE2NCAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvY29kYS5oIgpz dHJ1Y3QgdmVudXNfZGlyZW50IHsKICAgICAgICB1bnNpZ25lZCBsb25nIGRfZmlsZW5vOwogICAg ICAgIHVuc2lnbmVkIHNob3J0IGRfcmVjbGVuOwogICAgICAgIHVuc2lnbmVkIGNoYXIgZF90eXBl OwogICAgICAgIHVuc2lnbmVkIGNoYXIgZF9uYW1sZW47CiAgICAgICAgY2hhciBkX25hbWVbMjU1 ICsgMV07Cn07CiMgMTk4ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9jb2Rh LmgiCnR5cGVkZWYgdV9sb25nIFZvbHVtZUlkOwp0eXBlZGVmIHVfbG9uZyBWbm9kZUlkOwp0eXBl ZGVmIHVfbG9uZyBVbmlxdWVfdDsKdHlwZWRlZiB1X2xvbmcgRmlsZVZlcnNpb247CgoKCgp0eXBl ZGVmIHN0cnVjdCBWaWNlRmlkIHsKICAgIFZvbHVtZUlkIFZvbHVtZTsKICAgIFZub2RlSWQgVm5v ZGU7CiAgICBVbmlxdWVfdCBVbmlxdWU7Cn0gVmljZUZpZDsKCgoKCnN0YXRpYyBfX2lubGluZV9f IGlub190IGNvZGFfZjJpKHN0cnVjdCBWaWNlRmlkICpmaWQpCnsKICAgICAgICBpZiAoICEgZmlk ICkKICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIGlmIChmaWQtPlZub2RlID09IDB4 ZmZmZmZmZmUgfHwgZmlkLT5Wbm9kZSA9PSAweGZmZmZmZmZmKQogICAgICAgICAgICAgICAgcmV0 dXJuICgoZmlkLT5Wb2x1bWUgPDwgMjApIHwgKGZpZC0+VW5pcXVlICYgMHhmZmZmZikpOwogICAg ICAgIGVsc2UKICAgICAgICAgICAgICAgIHJldHVybiAoZmlkLT5VbmlxdWUgKyAoZmlkLT5Wbm9k ZTw8MTApICsgKGZpZC0+Vm9sdW1lPDwyMCkpOwp9CiMgMjMzICIvdXNyL3NyYy9saW51eC0yLjQu MjAvaW5jbHVkZS9saW51eC9jb2RhLmgiCnR5cGVkZWYgdV9pbnQzMl90IHZ1aWRfdDsKdHlwZWRl ZiB1X2ludDMyX3QgdmdpZF90OwoKCgoKc3RydWN0IGNvZGFfY3JlZCB7CiAgICB2dWlkX3QgY3Jf dWlkLCBjcl9ldWlkLCBjcl9zdWlkLCBjcl9mc3VpZDsKICAgIHZnaWRfdCBjcl9ncm91cGlkLCBj cl9lZ2lkLCBjcl9zZ2lkLCBjcl9mc2dpZDsKfTsKCgoKCgoKCmVudW0gY29kYV92dHlwZSB7IENf Vk5PTiwgQ19WUkVHLCBDX1ZESVIsIENfVkJMSywgQ19WQ0hSLCBDX1ZMTkssIENfVlNPQ0ssIENf VkZJRk8sIENfVkJBRCB9OwoKc3RydWN0IGNvZGFfdmF0dHIgewogICAgICAgIGxvbmcgdmFfdHlw ZTsKICAgICAgICB1X3Nob3J0IHZhX21vZGU7CiAgICAgICAgc2hvcnQgdmFfbmxpbms7CiAgICAg ICAgdnVpZF90IHZhX3VpZDsKICAgICAgICB2Z2lkX3QgdmFfZ2lkOwogICAgICAgIGxvbmcgdmFf ZmlsZWlkOwogICAgICAgIHVfcXVhZF90IHZhX3NpemU7CiAgICAgICAgbG9uZyB2YV9ibG9ja3Np emU7CiAgICAgICAgc3RydWN0IHRpbWVzcGVjIHZhX2F0aW1lOwogICAgICAgIHN0cnVjdCB0aW1l c3BlYyB2YV9tdGltZTsKICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgdmFfY3RpbWU7CiAgICAgICAg dV9sb25nIHZhX2dlbjsKICAgICAgICB1X2xvbmcgdmFfZmxhZ3M7CiAgICAgICAgdV9xdWFkX3Qg dmFfcmRldjsKICAgICAgICB1X3F1YWRfdCB2YV9ieXRlczsKICAgICAgICB1X3F1YWRfdCB2YV9m aWxlcmV2Owp9OwoKCgoKc3RydWN0IGNvZGFfc3RhdGZzIHsKICAgIGludDMyX3QgZl9ibG9ja3M7 CiAgICBpbnQzMl90IGZfYmZyZWU7CiAgICBpbnQzMl90IGZfYmF2YWlsOwogICAgaW50MzJfdCBm X2ZpbGVzOwogICAgaW50MzJfdCBmX2ZmcmVlOwp9OwojIDMzNyAiL3Vzci9zcmMvbGludXgtMi40 LjIwL2luY2x1ZGUvbGludXgvY29kYS5oIgpzdHJ1Y3QgY29kYV9pbl9oZHIgewogICAgdW5zaWdu ZWQgbG9uZyBvcGNvZGU7CiAgICB1bnNpZ25lZCBsb25nIHVuaXF1ZTsKICAgIHVfc2hvcnQgcGlk OwogICAgdV9zaG9ydCBwZ2lkOwogICAgdV9zaG9ydCBzaWQ7CiAgICBzdHJ1Y3QgY29kYV9jcmVk IGNyZWQ7Cn07CgoKc3RydWN0IGNvZGFfb3V0X2hkciB7CiAgICB1bnNpZ25lZCBsb25nIG9wY29k ZTsKICAgIHVuc2lnbmVkIGxvbmcgdW5pcXVlOwogICAgdW5zaWduZWQgbG9uZyByZXN1bHQ7Cn07 CgoKc3RydWN0IGNvZGFfcm9vdF9vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKICAg IFZpY2VGaWQgVkZpZDsKfTsKCnN0cnVjdCBjb2RhX3Jvb3RfaW4gewogICAgc3RydWN0IGNvZGFf aW5faGRyIGluOwp9OwoKCnN0cnVjdCBjb2RhX29wZW5faW4gewogICAgc3RydWN0IGNvZGFfaW5f aGRyIGloOwogICAgVmljZUZpZCBWRmlkOwogICAgaW50IGZsYWdzOwp9OwoKc3RydWN0IGNvZGFf b3Blbl9vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKICAgIHVfcXVhZF90IGRldjsK ICAgIGlub190IGlub2RlOwp9OwoKCgpzdHJ1Y3QgY29kYV9zdG9yZV9pbiB7CiAgICBzdHJ1Y3Qg Y29kYV9pbl9oZHIgaWg7CiAgICBWaWNlRmlkIFZGaWQ7CiAgICBpbnQgZmxhZ3M7Cn07CgpzdHJ1 Y3QgY29kYV9zdG9yZV9vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvdXQ7Cn07CgoKc3Ry dWN0IGNvZGFfcmVsZWFzZV9pbiB7CiAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CiAgICBWaWNl RmlkIFZGaWQ7CiAgICBpbnQgZmxhZ3M7Cn07CgpzdHJ1Y3QgY29kYV9yZWxlYXNlX291dCB7CiAg ICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG91dDsKfTsKCgpzdHJ1Y3QgY29kYV9jbG9zZV9pbiB7CiAg ICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CiAgICBWaWNlRmlkIFZGaWQ7CiAgICBpbnQgZmxhZ3M7 Cn07CgpzdHJ1Y3QgY29kYV9jbG9zZV9vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvdXQ7 Cn07CgoKc3RydWN0IGNvZGFfaW9jdGxfaW4gewogICAgc3RydWN0IGNvZGFfaW5faGRyIGloOwog ICAgVmljZUZpZCBWRmlkOwogICAgaW50IGNtZDsKICAgIGludCBsZW47CiAgICBpbnQgcndmbGFn OwogICAgY2hhciAqZGF0YTsKfTsKCnN0cnVjdCBjb2RhX2lvY3RsX291dCB7CiAgICBzdHJ1Y3Qg Y29kYV9vdXRfaGRyIG9oOwogICAgaW50IGxlbjsKICAgIGNhZGRyX3QgZGF0YTsKfTsKCgoKc3Ry dWN0IGNvZGFfZ2V0YXR0cl9pbiB7CiAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CiAgICBWaWNl RmlkIFZGaWQ7Cn07CgpzdHJ1Y3QgY29kYV9nZXRhdHRyX291dCB7CiAgICBzdHJ1Y3QgY29kYV9v dXRfaGRyIG9oOwogICAgc3RydWN0IGNvZGFfdmF0dHIgYXR0cjsKfTsKCgoKc3RydWN0IGNvZGFf c2V0YXR0cl9pbiB7CiAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CiAgICBWaWNlRmlkIFZGaWQ7 CiAgICBzdHJ1Y3QgY29kYV92YXR0ciBhdHRyOwp9OwoKc3RydWN0IGNvZGFfc2V0YXR0cl9vdXQg ewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvdXQ7Cn07CgoKc3RydWN0IGNvZGFfYWNjZXNzX2lu IHsKICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKICAgIFZpY2VGaWQgVkZpZDsKICAgIGludCBm bGFnczsKfTsKCnN0cnVjdCBjb2RhX2FjY2Vzc19vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hk ciBvdXQ7Cn07CgoKCgoKCgpzdHJ1Y3QgY29kYV9sb29rdXBfaW4gewogICAgc3RydWN0IGNvZGFf aW5faGRyIGloOwogICAgVmljZUZpZCBWRmlkOwogICAgaW50IG5hbWU7CiAgICBpbnQgZmxhZ3M7 Cn07CgpzdHJ1Y3QgY29kYV9sb29rdXBfb3V0IHsKICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7 CiAgICBWaWNlRmlkIFZGaWQ7CiAgICBpbnQgdnR5cGU7Cn07CgoKCnN0cnVjdCBjb2RhX2NyZWF0 ZV9pbiB7CiAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CiAgICBWaWNlRmlkIFZGaWQ7CiAgICBz dHJ1Y3QgY29kYV92YXR0ciBhdHRyOwogICAgaW50IGV4Y2w7CiAgICBpbnQgbW9kZTsKICAgIGlu dCBuYW1lOwp9OwoKc3RydWN0IGNvZGFfY3JlYXRlX291dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRf aGRyIG9oOwogICAgVmljZUZpZCBWRmlkOwogICAgc3RydWN0IGNvZGFfdmF0dHIgYXR0cjsKfTsK CgoKc3RydWN0IGNvZGFfcmVtb3ZlX2luIHsKICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKICAg IFZpY2VGaWQgVkZpZDsKICAgIGludCBuYW1lOwp9OwoKc3RydWN0IGNvZGFfcmVtb3ZlX291dCB7 CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG91dDsKfTsKCgpzdHJ1Y3QgY29kYV9saW5rX2luIHsK ICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKICAgIFZpY2VGaWQgc291cmNlRmlkOwogICAgVmlj ZUZpZCBkZXN0RmlkOwogICAgaW50IHRuYW1lOwp9OwoKc3RydWN0IGNvZGFfbGlua19vdXQgewog ICAgc3RydWN0IGNvZGFfb3V0X2hkciBvdXQ7Cn07CgoKCnN0cnVjdCBjb2RhX3JlbmFtZV9pbiB7 CiAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CiAgICBWaWNlRmlkIHNvdXJjZUZpZDsKICAgIGlu dCBzcmNuYW1lOwogICAgVmljZUZpZCBkZXN0RmlkOwogICAgaW50IGRlc3RuYW1lOwp9OwoKc3Ry dWN0IGNvZGFfcmVuYW1lX291dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG91dDsKfTsKCgpz dHJ1Y3QgY29kYV9ta2Rpcl9pbiB7CiAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CiAgICBWaWNl RmlkIFZGaWQ7CiAgICBzdHJ1Y3QgY29kYV92YXR0ciBhdHRyOwogICAgaW50IG5hbWU7Cn07Cgpz dHJ1Y3QgY29kYV9ta2Rpcl9vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKICAgIFZp Y2VGaWQgVkZpZDsKICAgIHN0cnVjdCBjb2RhX3ZhdHRyIGF0dHI7Cn07CgoKCnN0cnVjdCBjb2Rh X3JtZGlyX2luIHsKICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKICAgIFZpY2VGaWQgVkZpZDsK ICAgIGludCBuYW1lOwp9OwoKc3RydWN0IGNvZGFfcm1kaXJfb3V0IHsKICAgIHN0cnVjdCBjb2Rh X291dF9oZHIgb3V0Owp9OwoKCnN0cnVjdCBjb2RhX3N5bWxpbmtfaW4gewogICAgc3RydWN0IGNv ZGFfaW5faGRyIGloOwogICAgVmljZUZpZCBWRmlkOwogICAgaW50IHNyY25hbWU7CiAgICBzdHJ1 Y3QgY29kYV92YXR0ciBhdHRyOwogICAgaW50IHRuYW1lOwp9OwoKc3RydWN0IGNvZGFfc3ltbGlu a19vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvdXQ7Cn07CgoKc3RydWN0IGNvZGFfcmVh ZGxpbmtfaW4gewogICAgc3RydWN0IGNvZGFfaW5faGRyIGloOwogICAgVmljZUZpZCBWRmlkOwp9 OwoKc3RydWN0IGNvZGFfcmVhZGxpbmtfb3V0IHsKICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7 CiAgICBpbnQgY291bnQ7CiAgICBjYWRkcl90IGRhdGE7Cn07CgoKCnN0cnVjdCBjb2RhX2ZzeW5j X2luIHsKICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKICAgIFZpY2VGaWQgVkZpZDsKfTsKCnN0 cnVjdCBjb2RhX2ZzeW5jX291dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG91dDsKfTsKCgpz dHJ1Y3QgY29kYV92Z2V0X2luIHsKICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKICAgIFZpY2VG aWQgVkZpZDsKfTsKCnN0cnVjdCBjb2RhX3ZnZXRfb3V0IHsKICAgIHN0cnVjdCBjb2RhX291dF9o ZHIgb2g7CiAgICBWaWNlRmlkIFZGaWQ7CiAgICBpbnQgdnR5cGU7Cn07CiMgNjE2ICIvdXNyL3Ny Yy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9jb2RhLmgiCnN0cnVjdCBjb2RhX3B1cmdldXNl cl9vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKICAgIHN0cnVjdCBjb2RhX2NyZWQg Y3JlZDsKfTsKCgoKc3RydWN0IGNvZGFfemFwZmlsZV9vdXQgewogICAgc3RydWN0IGNvZGFfb3V0 X2hkciBvaDsKICAgIFZpY2VGaWQgQ29kYUZpZDsKfTsKCgoKc3RydWN0IGNvZGFfemFwZGlyX291 dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOwogICAgVmljZUZpZCBDb2RhRmlkOwp9OwoK CgpzdHJ1Y3QgY29kYV96YXB2bm9kZV9vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsK ICAgIHN0cnVjdCBjb2RhX2NyZWQgY3JlZDsKICAgIFZpY2VGaWQgVkZpZDsKfTsKCgoKc3RydWN0 IGNvZGFfcHVyZ2VmaWRfb3V0IHsKICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7CiAgICBWaWNl RmlkIENvZGFGaWQ7Cn07CgoKCnN0cnVjdCBjb2RhX3JlcGxhY2Vfb3V0IHsKICAgIHN0cnVjdCBj b2RhX291dF9oZHIgb2g7CiAgICBWaWNlRmlkIE5ld0ZpZDsKICAgIFZpY2VGaWQgT2xkRmlkOwp9 OwoKCnN0cnVjdCBjb2RhX29wZW5fYnlfZmRfaW4gewogICAgc3RydWN0IGNvZGFfaW5faGRyIGlo OwogICAgVmljZUZpZCBWRmlkOwogICAgaW50IGZsYWdzOwp9OwoKc3RydWN0IGNvZGFfb3Blbl9i eV9mZF9vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKICAgIGludCBmZDsKCgogICAg c3RydWN0IGZpbGUgKmZoOwoKfTsKCgpzdHJ1Y3QgY29kYV9vcGVuX2J5X3BhdGhfaW4gewogICAg c3RydWN0IGNvZGFfaW5faGRyIGloOwogICAgVmljZUZpZCBWRmlkOwogICAgaW50IGZsYWdzOwp9 OwoKc3RydWN0IGNvZGFfb3Blbl9ieV9wYXRoX291dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRy IG9oOwogICAgICAgIGludCBwYXRoOwp9OwoKCnN0cnVjdCBjb2RhX3N0YXRmc19pbiB7CiAgICBz dHJ1Y3QgY29kYV9pbl9oZHIgaW47Cn07CgpzdHJ1Y3QgY29kYV9zdGF0ZnNfb3V0IHsKICAgIHN0 cnVjdCBjb2RhX291dF9oZHIgb2g7CiAgICBzdHJ1Y3QgY29kYV9zdGF0ZnMgc3RhdDsKfTsKIyA3 MDMgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L2NvZGEuaCIKdW5pb24gaW5w dXRBcmdzIHsKICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKICAgIHN0cnVjdCBjb2RhX29wZW5f aW4gY29kYV9vcGVuOwogICAgc3RydWN0IGNvZGFfc3RvcmVfaW4gY29kYV9zdG9yZTsKICAgIHN0 cnVjdCBjb2RhX3JlbGVhc2VfaW4gY29kYV9yZWxlYXNlOwogICAgc3RydWN0IGNvZGFfY2xvc2Vf aW4gY29kYV9jbG9zZTsKICAgIHN0cnVjdCBjb2RhX2lvY3RsX2luIGNvZGFfaW9jdGw7CiAgICBz dHJ1Y3QgY29kYV9nZXRhdHRyX2luIGNvZGFfZ2V0YXR0cjsKICAgIHN0cnVjdCBjb2RhX3NldGF0 dHJfaW4gY29kYV9zZXRhdHRyOwogICAgc3RydWN0IGNvZGFfYWNjZXNzX2luIGNvZGFfYWNjZXNz OwogICAgc3RydWN0IGNvZGFfbG9va3VwX2luIGNvZGFfbG9va3VwOwogICAgc3RydWN0IGNvZGFf Y3JlYXRlX2luIGNvZGFfY3JlYXRlOwogICAgc3RydWN0IGNvZGFfcmVtb3ZlX2luIGNvZGFfcmVt b3ZlOwogICAgc3RydWN0IGNvZGFfbGlua19pbiBjb2RhX2xpbms7CiAgICBzdHJ1Y3QgY29kYV9y ZW5hbWVfaW4gY29kYV9yZW5hbWU7CiAgICBzdHJ1Y3QgY29kYV9ta2Rpcl9pbiBjb2RhX21rZGly OwogICAgc3RydWN0IGNvZGFfcm1kaXJfaW4gY29kYV9ybWRpcjsKICAgIHN0cnVjdCBjb2RhX3N5 bWxpbmtfaW4gY29kYV9zeW1saW5rOwogICAgc3RydWN0IGNvZGFfcmVhZGxpbmtfaW4gY29kYV9y ZWFkbGluazsKICAgIHN0cnVjdCBjb2RhX2ZzeW5jX2luIGNvZGFfZnN5bmM7CiAgICBzdHJ1Y3Qg Y29kYV92Z2V0X2luIGNvZGFfdmdldDsKICAgIHN0cnVjdCBjb2RhX29wZW5fYnlfZmRfaW4gY29k YV9vcGVuX2J5X2ZkOwogICAgc3RydWN0IGNvZGFfb3Blbl9ieV9wYXRoX2luIGNvZGFfb3Blbl9i eV9wYXRoOwogICAgc3RydWN0IGNvZGFfc3RhdGZzX2luIGNvZGFfc3RhdGZzOwp9OwoKdW5pb24g b3V0cHV0QXJncyB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOwogICAgc3RydWN0IGNvZGFf cm9vdF9vdXQgY29kYV9yb290OwogICAgc3RydWN0IGNvZGFfb3Blbl9vdXQgY29kYV9vcGVuOwog ICAgc3RydWN0IGNvZGFfaW9jdGxfb3V0IGNvZGFfaW9jdGw7CiAgICBzdHJ1Y3QgY29kYV9nZXRh dHRyX291dCBjb2RhX2dldGF0dHI7CiAgICBzdHJ1Y3QgY29kYV9sb29rdXBfb3V0IGNvZGFfbG9v a3VwOwogICAgc3RydWN0IGNvZGFfY3JlYXRlX291dCBjb2RhX2NyZWF0ZTsKICAgIHN0cnVjdCBj b2RhX21rZGlyX291dCBjb2RhX21rZGlyOwogICAgc3RydWN0IGNvZGFfcmVhZGxpbmtfb3V0IGNv ZGFfcmVhZGxpbms7CiAgICBzdHJ1Y3QgY29kYV92Z2V0X291dCBjb2RhX3ZnZXQ7CiAgICBzdHJ1 Y3QgY29kYV9wdXJnZXVzZXJfb3V0IGNvZGFfcHVyZ2V1c2VyOwogICAgc3RydWN0IGNvZGFfemFw ZmlsZV9vdXQgY29kYV96YXBmaWxlOwogICAgc3RydWN0IGNvZGFfemFwZGlyX291dCBjb2RhX3ph cGRpcjsKICAgIHN0cnVjdCBjb2RhX3phcHZub2RlX291dCBjb2RhX3phcHZub2RlOwogICAgc3Ry dWN0IGNvZGFfcHVyZ2VmaWRfb3V0IGNvZGFfcHVyZ2VmaWQ7CiAgICBzdHJ1Y3QgY29kYV9yZXBs YWNlX291dCBjb2RhX3JlcGxhY2U7CiAgICBzdHJ1Y3QgY29kYV9vcGVuX2J5X2ZkX291dCBjb2Rh X29wZW5fYnlfZmQ7CiAgICBzdHJ1Y3QgY29kYV9vcGVuX2J5X3BhdGhfb3V0IGNvZGFfb3Blbl9i eV9wYXRoOwogICAgc3RydWN0IGNvZGFfc3RhdGZzX291dCBjb2RhX3N0YXRmczsKfTsKCnVuaW9u IGNvZGFfZG93bmNhbGxzIHsKCgogICAgc3RydWN0IGNvZGFfcHVyZ2V1c2VyX291dCBwdXJnZXVz ZXI7CiAgICBzdHJ1Y3QgY29kYV96YXBmaWxlX291dCB6YXBmaWxlOwogICAgc3RydWN0IGNvZGFf emFwZGlyX291dCB6YXBkaXI7CiAgICBzdHJ1Y3QgY29kYV96YXB2bm9kZV9vdXQgemFwdm5vZGU7 CiAgICBzdHJ1Y3QgY29kYV9wdXJnZWZpZF9vdXQgcHVyZ2VmaWQ7CiAgICBzdHJ1Y3QgY29kYV9y ZXBsYWNlX291dCByZXBsYWNlOwp9OwoKCgoKCgoKc3RydWN0IFZpY2VJb2N0bCB7CiAgICAgICAg Y2FkZHJfdCBpbiwgb3V0OwogICAgICAgIHNob3J0IGluX3NpemU7CiAgICAgICAgc2hvcnQgb3V0 X3NpemU7Cn07CgpzdHJ1Y3QgUGlvY3RsRGF0YSB7CiAgICAgICAgY29uc3QgY2hhciAqcGF0aDsK ICAgICAgICBpbnQgZm9sbG93OwogICAgICAgIHN0cnVjdCBWaWNlSW9jdGwgdmk7Cn07CiMgNzk3 ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9jb2RhLmgiCnN0cnVjdCBjb2Rh X21vdW50X2RhdGEgewogICAgICAgIGludCB2ZXJzaW9uOwogICAgICAgIGludCBmZDsKfTsKIyAx NSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvY29kYV9mc19pLmgiIDIKCgoK CnN0cnVjdCBjb2RhX2lub2RlX2luZm8gewogICAgICAgIHN0cnVjdCBWaWNlRmlkIGNfZmlkOwog ICAgICAgIHVfc2hvcnQgY19mbGFnczsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGNfY2lsaXN0 OwogICAgICAgIGludCBjX21hcGNvdW50OwogICAgICAgIHN0cnVjdCBjb2RhX2NyZWQgY19jYWNo ZWRfY3JlZDsKICAgICAgICB1bnNpZ25lZCBpbnQgY19jYWNoZWRfcGVybTsKfTsKCgoKCgpzdHJ1 Y3QgY29kYV9maWxlX2luZm8gewogICAgICAgIGludCBjZmlfbWFnaWM7CiAgICAgICAgaW50IGNm aV9tYXBjb3VudDsKICAgICAgICBzdHJ1Y3QgZmlsZSAqY2ZpX2NvbnRhaW5lcjsKICAgICAgICBz dHJ1Y3QgY29kYV9jcmVkIGNmaV9jcmVkOwp9OwojIDQ3ICIvdXNyL3NyYy9saW51eC0yLjQuMjAv aW5jbHVkZS9saW51eC9jb2RhX2ZzX2kuaCIKaW50IGNvZGFfY25vZGVfbWFrZShzdHJ1Y3QgaW5v ZGUgKiosIHN0cnVjdCBWaWNlRmlkICosIHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKc3RydWN0IGlu b2RlICpjb2RhX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IFZpY2VGaWQgKmZp ZCwgc3RydWN0IGNvZGFfdmF0dHIgKmF0dHIpOwppbnQgY29kYV9jbm9kZV9tYWtlY3RsKHN0cnVj dCBpbm9kZSAqKmlub2RlLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKc3RydWN0IGlub2RlICpj b2RhX2ZpZF90b19pbm9kZShWaWNlRmlkICpmaWQsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwp2 b2lkIGNvZGFfcmVwbGFjZV9maWQoc3RydWN0IGlub2RlICosIFZpY2VGaWQgKiwgVmljZUZpZCAq KTsKIyAzMTEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAx ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9yb21mc19mc19pLmgiIDEKCgoK CgpzdHJ1Y3Qgcm9tZnNfaW5vZGVfaW5mbyB7CiAgICAgICAgdW5zaWduZWQgbG9uZyBpX21ldGFz aXplOwogICAgICAgIHVuc2lnbmVkIGxvbmcgaV9kYXRhb2Zmc2V0Owp9OwojIDMxMiAiL3Vzci9z cmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4 LTIuNC4yMC9pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgiIDEKIyAxNiAiL3Vzci9zcmMvbGludXgt Mi40LjIwL2luY2x1ZGUvbGludXgvc2htZW1fZnMuaCIKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAg IHVuc2lnbmVkIGxvbmcgdmFsOwp9IHN3cF9lbnRyeV90OwoKZXh0ZXJuIGF0b21pY190IHNobWVt X25ycGFnZXM7CgpzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyB7CiAgICAgICAgc3BpbmxvY2tfdCBs b2NrOwogICAgICAgIHN0cnVjdCBzZW1hcGhvcmUgc2VtOwogICAgICAgIHVuc2lnbmVkIGxvbmcg bmV4dF9pbmRleDsKICAgICAgICBzd3BfZW50cnlfdCBpX2RpcmVjdFsxNl07CiAgICAgICAgdm9p ZCAqKmlfaW5kaXJlY3Q7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzd2FwcGVkOwogICAgICAgIGlu dCBsb2NrZWQ7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogICAgICAgIHN0cnVjdCBp bm9kZSAqaW5vZGU7Cn07CgpzdHJ1Y3Qgc2htZW1fc2JfaW5mbyB7CiAgICAgICAgdW5zaWduZWQg bG9uZyBtYXhfYmxvY2tzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZnJlZV9ibG9ja3M7CiAgICAg ICAgdW5zaWduZWQgbG9uZyBtYXhfaW5vZGVzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZnJlZV9p bm9kZXM7CiAgICAgICAgc3BpbmxvY2tfdCBzdGF0X2xvY2s7Cn07CiMgMzEzICIvdXNyL3NyYy9s aW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40 LjIwL2luY2x1ZGUvbGludXgvc21iX2ZzX2kuaCIgMQojIDE4ICIvdXNyL3NyYy9saW51eC0yLjQu MjAvaW5jbHVkZS9saW51eC9zbWJfZnNfaS5oIgpzdHJ1Y3Qgc21iX2lub2RlX2luZm8gewoKCgoK CiAgICAgICAgdW5zaWduZWQgaW50IG9wZW47CiAgICAgICAgX191MTYgZmlsZWlkOwogICAgICAg IF9fdTE2IGF0dHI7CgogICAgICAgIF9fdTE2IGFjY2VzczsKICAgICAgICBfX3UxNiBmbGFnczsK ICAgICAgICB1bnNpZ25lZCBsb25nIG9sZG10aW1lOwogICAgICAgIHVuc2lnbmVkIGxvbmcgY2xv c2VkOwogICAgICAgIHVuc2lnbmVkIG9wZW5lcnM7Cn07CiMgMzE0ICIvdXNyL3NyYy9saW51eC0y LjQuMjAvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2lu Y2x1ZGUvbGludXgvaGZzX2ZzX2kuaCIgMQojIDE5ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5j bHVkZS9saW51eC9oZnNfZnNfaS5oIgpzdHJ1Y3QgaGZzX2lub2RlX2luZm8gewogICAgICAgIGlu dCBtYWdpYzsKCiAgICAgICAgdW5zaWduZWQgbG9uZyBtbXVfcHJpdmF0ZTsKICAgICAgICBzdHJ1 Y3QgaGZzX2NhdF9lbnRyeSAqZW50cnk7CgoKICAgICAgICBzdHJ1Y3QgaGZzX2ZvcmsgKmZvcms7 CiAgICAgICAgaW50IGNvbnZlcnQ7CgoKICAgICAgICBpbm9fdCBmaWxlX3R5cGU7CiAgICAgICAg Y2hhciBkaXJfc2l6ZTsKCgogICAgICAgIGNvbnN0IHN0cnVjdCBoZnNfaGRyX2xheW91dCAqZGVm YXVsdF9sYXlvdXQ7CiAgICAgICAgc3RydWN0IGhmc19oZHJfbGF5b3V0ICpsYXlvdXQ7CgoKICAg ICAgICBpbnQgdHpfc2Vjb25kc3dlc3Q7CgoKICAgICAgICB2b2lkICgqZF9kcm9wX29wKShzdHJ1 Y3QgZGVudHJ5ICosIGNvbnN0IGlub190KTsKfTsKIyAzMTUgIi91c3Ivc3JjL2xpbnV4LTIuNC4y MC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVk ZS9saW51eC9hZGZzX2ZzX2kuaCIgMQojIDEzICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVk ZS9saW51eC9hZGZzX2ZzX2kuaCIKc3RydWN0IGFkZnNfaW5vZGVfaW5mbyB7CiAgICAgICAgdW5z aWduZWQgbG9uZyBtbXVfcHJpdmF0ZTsKICAgICAgICB1bnNpZ25lZCBsb25nIHBhcmVudF9pZDsK ICAgICAgICBfX3UzMiBsb2FkYWRkcjsKICAgICAgICBfX3UzMiBleGVjYWRkcjsKICAgICAgICB1 bnNpZ25lZCBpbnQgZmlsZXR5cGU7CiAgICAgICAgdW5zaWduZWQgaW50IGF0dHI7CiAgICAgICAg aW50IHN0YW1wZWQ6MTsKfTsKIyAzMTYgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xp bnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9xbng0 X2ZzX2kuaCIgMQojIDE0ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9xbng0 X2ZzX2kuaCIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9xbnh0eXBl cy5oIiAxCiMgMTUgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L3FueHR5cGVz LmgiCnR5cGVkZWYgX191MTYgcW54NF9ueHRudF90Owp0eXBlZGVmIF9fdTggcW54NF9mdHlwZV90 OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIF9fdTMyIHh0bnRfYmxrOwogICAgICAgIF9fdTMy IHh0bnRfc2l6ZTsKfSBxbng0X3h0bnRfdDsKCnR5cGVkZWYgX191MTYgcW54NF9tb2RlX3Q7CnR5 cGVkZWYgX191MTYgcW54NF9tdWlkX3Q7CnR5cGVkZWYgX191MTYgcW54NF9tZ2lkX3Q7CnR5cGVk ZWYgX191MzIgcW54NF9vZmZfdDsKdHlwZWRlZiBfX3UxNiBxbng0X25saW5rX3Q7CiMgMTUgIi91 c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L3FueDRfZnNfaS5oIiAyCgoKCgpzdHJ1 Y3QgcW54NF9pbm9kZV9pbmZvIHsKICAgICAgICBjaGFyIGlfcmVzZXJ2ZWRbMTZdOwogICAgICAg IHFueDRfb2ZmX3QgaV9zaXplOwogICAgICAgIHFueDRfeHRudF90IGlfZmlyc3RfeHRudDsKICAg ICAgICBfX3UzMiBpX3hibGs7CiAgICAgICAgX19zMzIgaV9mdGltZTsKICAgICAgICBfX3MzMiBp X210aW1lOwogICAgICAgIF9fczMyIGlfYXRpbWU7CiAgICAgICAgX19zMzIgaV9jdGltZTsKICAg ICAgICBxbng0X254dG50X3QgaV9udW1feHRudHM7CiAgICAgICAgcW54NF9tb2RlX3QgaV9tb2Rl OwogICAgICAgIHFueDRfbXVpZF90IGlfdWlkOwogICAgICAgIHFueDRfbWdpZF90IGlfZ2lkOwog ICAgICAgIHFueDRfbmxpbmtfdCBpX25saW5rOwogICAgICAgIF9fdTggaV96ZXJvWzRdOwogICAg ICAgIHFueDRfZnR5cGVfdCBpX3R5cGU7CiAgICAgICAgX191OCBpX3N0YXR1czsKICAgICAgICB1 bnNpZ25lZCBsb25nIG1tdV9wcml2YXRlOwp9OwojIDMxNyAiL3Vzci9zcmMvbGludXgtMi40LjIw L2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRl L2xpbnV4L3JlaXNlcmZzX2ZzX2kuaCIgMQojIDEwICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5j bHVkZS9saW51eC9yZWlzZXJmc19mc19pLmgiCnR5cGVkZWYgZW51bSB7CgoKCiAgICBpX2l0ZW1f a2V5X3ZlcnNpb25fbWFzayA9IDB4MDAwMSwKCgogICAgaV9zdGF0X2RhdGFfdmVyc2lvbl9tYXNr ID0gMHgwMDAyLAoKICAgIGlfcGFja19vbl9jbG9zZV9tYXNrID0gMHgwMDA0LAoKICAgIGlfbm9w YWNrX21hc2sgPSAweDAwMDgsCgoKCiAgICBpX2xpbmtfc2F2ZWRfdW5saW5rX21hc2sgPSAweDAw MTAsCiAgICBpX2xpbmtfc2F2ZWRfdHJ1bmNhdGVfbWFzayA9IDB4MDAyMAp9IHJlaXNlcmZzX2lu b2RlX2ZsYWdzOwoKCnN0cnVjdCByZWlzZXJmc19pbm9kZV9pbmZvIHsKICAgIF9fdTMyIGlfa2V5 IFs0XTsKCgoKICAgIF9fdTMyIGlfZmxhZ3M7CgogICAgX191MzIgaV9maXJzdF9kaXJlY3RfYnl0 ZTsKCgogICAgX191MzIgaV9hdHRyczsKCiAgICBpbnQgaV9wcmVhbGxvY19ibG9jazsKICAgIGlu dCBpX3ByZWFsbG9jX2NvdW50OwogICAgc3RydWN0IGxpc3RfaGVhZCBpX3ByZWFsbG9jX2xpc3Q7 CgoKICAgIGludCBuZXdfcGFja2luZ19sb2NhbGl0eToxOwoKCgoKCgogICAgdW5zaWduZWQgbG9u ZyBpX3RyYW5zX2lkIDsKICAgIHVuc2lnbmVkIGxvbmcgaV90cmFuc19pbmRleCA7Cn07CiMgMzE4 ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9z cmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvYmZzX2ZzX2kuaCIgMQojIDEyICIvdXNyL3Ny Yy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9iZnNfZnNfaS5oIgpzdHJ1Y3QgYmZzX2lub2Rl X2luZm8gewogICAgICAgIHVuc2lnbmVkIGxvbmcgaV9kc2tfaW5vOwogICAgICAgIHVuc2lnbmVk IGxvbmcgaV9zYmxvY2s7CiAgICAgICAgdW5zaWduZWQgbG9uZyBpX2VibG9jazsKfTsKIyAzMTkg Ii91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3Ny Yy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC91ZGZfZnNfaS5oIiAxCiMgMjQgIi91c3Ivc3Jj L2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L3VkZl9mc19pLmgiCnR5cGVkZWYgc3RydWN0CnsK ICAgICAgICBfX3UzMiBsb2dpY2FsQmxvY2tOdW07CiAgICAgICAgX191MTYgcGFydGl0aW9uUmVm ZXJlbmNlTnVtOwp9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBsYl9hZGRyOwoKCnN0cnVjdCB1 ZGZfaW5vZGVfaW5mbwp7CiAgICAgICAgbG9uZyBpX3VtdGltZTsKICAgICAgICBsb25nIGlfdWN0 aW1lOwogICAgICAgIGxvbmcgaV9jcnRpbWU7CiAgICAgICAgbG9uZyBpX3VjcnRpbWU7CgogICAg ICAgIGxiX2FkZHIgaV9sb2NhdGlvbjsKICAgICAgICBfX3U2NCBpX3VuaXF1ZTsKICAgICAgICBf X3UzMiBpX2xlbkVBdHRyOwogICAgICAgIF9fdTMyIGlfbGVuQWxsb2M7CiAgICAgICAgX191NjQg aV9sZW5FeHRlbnRzOwogICAgICAgIF9fdTMyIGlfbmV4dF9hbGxvY19ibG9jazsKICAgICAgICBf X3UzMiBpX25leHRfYWxsb2NfZ29hbDsKICAgICAgICB1bnNpZ25lZCBpX2FsbG9jX3R5cGUgOiAz OwogICAgICAgIHVuc2lnbmVkIGlfZXh0ZW5kZWRfZmUgOiAxOwogICAgICAgIHVuc2lnbmVkIGlf c3RyYXRfNDA5NiA6IDE7CiAgICAgICAgdW5zaWduZWQgaV9uZXdfaW5vZGUgOiAxOwogICAgICAg IHVuc2lnbmVkIHJlc2VydmVkIDogMjY7Cn07CiMgMzIwICIvdXNyL3NyYy9saW51eC0yLjQuMjAv aW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUv bGludXgvbmNwX2ZzX2kuaCIgMQojIDE3ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9s aW51eC9uY3BfZnNfaS5oIgpzdHJ1Y3QgbmNwX2lub2RlX2luZm8gewogICAgICAgIF9fdTMyIGRp ckVudE51bSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3UzMiBEb3NEaXJOdW0g X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191MzIgdm9sTnVtYmVyIF9fYXR0cmli dXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTMyIG53YXR0cjsKICAgICAgICBzdHJ1Y3Qgc2Vt YXBob3JlIG9wZW5fc2VtOwogICAgICAgIGF0b21pY190IG9wZW5lZDsKICAgICAgICBpbnQgYWNj ZXNzOwogICAgICAgIF9fdTMyIHNlcnZlcl9maWxlX2hhbmRsZSBfX2F0dHJpYnV0ZV9fKChwYWNr ZWQpKTsKICAgICAgICBfX3U4IG9wZW5fY3JlYXRlX2FjdGlvbiBfX2F0dHJpYnV0ZV9fKChwYWNr ZWQpKTsKICAgICAgICBfX3U4IGZpbGVfaGFuZGxlWzZdIF9fYXR0cmlidXRlX18oKHBhY2tlZCkp Owp9OwojIDMyMSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvZnMuaCIgMgoj IDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L3Byb2NfZnNfaS5oIiAxCnN0 cnVjdCBwcm9jX2lub2RlX2luZm8gewogICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsK ICAgICAgICBpbnQgdHlwZTsKICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICAgICBpbnQgKCpw cm9jX2dldF9saW5rKShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqKiwgc3RydWN0IHZm c21vdW50ICoqKTsKICAgICAgICAgICAgICAgIGludCAoKnByb2NfcmVhZCkoc3RydWN0IHRhc2tf c3RydWN0ICp0YXNrLCBjaGFyICpwYWdlKTsKICAgICAgICB9IG9wOwogICAgICAgIHN0cnVjdCBm aWxlICpmaWxlOwp9OwojIDMyMiAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgv ZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L3VzYmRldl9m c19pLmgiIDEKc3RydWN0IHVzYl9kZXZpY2U7CnN0cnVjdCB1c2JfYnVzOwoKc3RydWN0IHVzYmRl dl9pbm9kZV9pbmZvIHsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGRsaXN0OwogICAgICAgIHN0 cnVjdCBsaXN0X2hlYWQgc2xpc3Q7CiAgICAgICAgdW5pb24gewogICAgICAgICAgICAgICAgc3Ry dWN0IHVzYl9kZXZpY2UgKmRldjsKICAgICAgICAgICAgICAgIHN0cnVjdCB1c2JfYnVzICpidXM7 CiAgICAgICAgfSBwOwp9OwojIDMyMyAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGlu dXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L2pmZnMy X2ZzX2kuaCIgMQojIDE2ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9qZmZz Ml9mc19pLmgiCnN0cnVjdCBqZmZzMl9pbm9kZV9pbmZvIHsKIyAyNiAiL3Vzci9zcmMvbGludXgt Mi40LjIwL2luY2x1ZGUvbGludXgvamZmczJfZnNfaS5oIgogICAgICAgIHN0cnVjdCBzZW1hcGhv cmUgc2VtOwoKCiAgICAgICAgX191MzIgaGlnaGVzdF92ZXJzaW9uOwoKCiAgICAgICAgc3RydWN0 IGpmZnMyX25vZGVfZnJhZyAqZnJhZ2xpc3Q7CgoKCgoKCiAgICAgICAgc3RydWN0IGpmZnMyX2Z1 bGxfZG5vZGUgKm1ldGFkYXRhOwoKCiAgICAgICAgc3RydWN0IGpmZnMyX2Z1bGxfZGlyZW50ICpk ZW50czsKCgogICAgICAgIHN0cnVjdCBqZmZzMl9pbm9kZV9jYWNoZSAqaW5vY2FjaGU7CgoKCgoK ICAgICAgICBfX3UxNiBmbGFnczsKICAgICAgICBfX3U4IHVzZXJjb21wcjsKfTsKIyAzMjQgIi91 c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9s aW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9jcmFtZnNfZnNfc2IuaCIgMQoKCgoKCgpzdHJ1Y3Qg Y3JhbWZzX3NiX2luZm8gewogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIG1h Z2ljOwogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHNpemU7CiAgICAgICAg ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYmxvY2tzOwogICAgICAgICAgICAgICAgICAg ICAgICB1bnNpZ25lZCBsb25nIGZpbGVzOwogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l ZCBsb25nIGZsYWdzOwp9OwojIDMyNSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGlu dXgvZnMuaCIgMgojIDM1MSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvZnMu aCIKc3RydWN0IGlhdHRyIHsKICAgICAgICB1bnNpZ25lZCBpbnQgaWFfdmFsaWQ7CiAgICAgICAg dW1vZGVfdCBpYV9tb2RlOwogICAgICAgIHVpZF90IGlhX3VpZDsKICAgICAgICBnaWRfdCBpYV9n aWQ7CiAgICAgICAgbG9mZl90IGlhX3NpemU7CiAgICAgICAgdGltZV90IGlhX2F0aW1lOwogICAg ICAgIHRpbWVfdCBpYV9tdGltZTsKICAgICAgICB0aW1lX3QgaWFfY3RpbWU7CiAgICAgICAgdW5z aWduZWQgaW50IGlhX2F0dHJfZmxhZ3M7Cn07CiMgMzc1ICIvdXNyL3NyYy9saW51eC0yLjQuMjAv aW5jbHVkZS9saW51eC9mcy5oIgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xp bnV4L3F1b3RhLmgiIDEKIyA0MiAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgv cXVvdGEuaCIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9lcnJuby5o IiAxCgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvYXNtL2Vycm5vLmgiIDEK IyA1ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9lcnJuby5oIiAyCiMgNDMg Ii91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L3F1b3RhLmgiIDIKIyAxMDkgIi91 c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L3F1b3RhLmgiCnN0cnVjdCBkcWJsayB7 CiAgICAgICAgX191MzIgZHFiX2JoYXJkbGltaXQ7CiAgICAgICAgX191MzIgZHFiX2Jzb2Z0bGlt aXQ7CiAgICAgICAgX191MzIgZHFiX2N1cmJsb2NrczsKICAgICAgICBfX3UzMiBkcWJfaWhhcmRs aW1pdDsKICAgICAgICBfX3UzMiBkcWJfaXNvZnRsaW1pdDsKICAgICAgICBfX3UzMiBkcWJfY3Vy aW5vZGVzOwogICAgICAgIHRpbWVfdCBkcWJfYnRpbWU7CiAgICAgICAgdGltZV90IGRxYl9pdGlt ZTsKfTsKIyAxMzQgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L3F1b3RhLmgi CnN0cnVjdCBkcXN0YXRzIHsKICAgICAgICBfX3UzMiBsb29rdXBzOwogICAgICAgIF9fdTMyIGRy b3BzOwogICAgICAgIF9fdTMyIHJlYWRzOwogICAgICAgIF9fdTMyIHdyaXRlczsKICAgICAgICBf X3UzMiBjYWNoZV9oaXRzOwogICAgICAgIF9fdTMyIGFsbG9jYXRlZF9kcXVvdHM7CiAgICAgICAg X191MzIgZnJlZV9kcXVvdHM7CiAgICAgICAgX191MzIgc3luY3M7Cn07CgoKCmV4dGVybiBpbnQg bnJfZHF1b3RzLCBucl9mcmVlX2RxdW90czsKZXh0ZXJuIGludCBkcXVvdF9yb290X3NxdWFzaDsK IyAxNTkgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L3F1b3RhLmgiCnN0cnVj dCBkcXVvdCB7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBkcV9oYXNoOwogICAgICAgIHN0cnVj dCBsaXN0X2hlYWQgZHFfaW51c2U7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBkcV9mcmVlOwog ICAgICAgIHdhaXRfcXVldWVfaGVhZF90IGRxX3dhaXRfbG9jazsKICAgICAgICB3YWl0X3F1ZXVl X2hlYWRfdCBkcV93YWl0X2ZyZWU7CiAgICAgICAgaW50IGRxX2NvdW50OwoKCiAgICAgICAgc3Ry dWN0IHN1cGVyX2Jsb2NrICpkcV9zYjsKICAgICAgICB1bnNpZ25lZCBpbnQgZHFfaWQ7CiAgICAg ICAga2Rldl90IGRxX2RldjsKICAgICAgICBzaG9ydCBkcV90eXBlOwogICAgICAgIHNob3J0IGRx X2ZsYWdzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZHFfcmVmZXJlbmNlZDsKCiAgICAgICAgc3Ry dWN0IGRxYmxrIGRxX2RxYjsKfTsKIyAzNzYgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRl L2xpbnV4L2ZzLmgiIDIKCgoKCgpzdHJ1Y3QgcGFnZTsKc3RydWN0IGFkZHJlc3Nfc3BhY2U7CnN0 cnVjdCBraW9idWY7CgpzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHsKICAgICAgICBp bnQgKCp3cml0ZXBhZ2UpKHN0cnVjdCBwYWdlICopOwogICAgICAgIGludCAoKnJlYWRwYWdlKShz dHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgcGFnZSAqKTsKICAgICAgICBpbnQgKCpzeW5jX3BhZ2UpKHN0 cnVjdCBwYWdlICopOwoKCgoKICAgICAgICBpbnQgKCpwcmVwYXJlX3dyaXRlKShzdHJ1Y3QgZmls ZSAqLCBzdHJ1Y3QgcGFnZSAqLCB1bnNpZ25lZCwgdW5zaWduZWQpOwogICAgICAgIGludCAoKmNv bW1pdF93cml0ZSkoc3RydWN0IGZpbGUgKiwgc3RydWN0IHBhZ2UgKiwgdW5zaWduZWQsIHVuc2ln bmVkKTsKCiAgICAgICAgaW50ICgqYm1hcCkoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKiwgbG9uZyk7 CiAgICAgICAgaW50ICgqZmx1c2hwYWdlKSAoc3RydWN0IHBhZ2UgKiwgdW5zaWduZWQgbG9uZyk7 CiAgICAgICAgaW50ICgqcmVsZWFzZXBhZ2UpIChzdHJ1Y3QgcGFnZSAqLCBpbnQpOwoKICAgICAg ICBpbnQgKCpkaXJlY3RfSU8pKGludCwgc3RydWN0IGlub2RlICosIHN0cnVjdCBraW9idWYgKiwg dW5zaWduZWQgbG9uZywgaW50KTsKICAgICAgICB2b2lkICgqcmVtb3ZlcGFnZSkoc3RydWN0IHBh Z2UgKik7Cn07CgpzdHJ1Y3QgYWRkcmVzc19zcGFjZSB7CiAgICAgICAgc3RydWN0IGxpc3RfaGVh ZCBjbGVhbl9wYWdlczsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGRpcnR5X3BhZ2VzOwogICAg ICAgIHN0cnVjdCBsaXN0X2hlYWQgbG9ja2VkX3BhZ2VzOwogICAgICAgIHVuc2lnbmVkIGxvbmcg bnJwYWdlczsKICAgICAgICBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zICphX29wczsK ICAgICAgICBzdHJ1Y3QgaW5vZGUgKmhvc3Q7CiAgICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0 ICppX21tYXA7CiAgICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICppX21tYXBfc2hhcmVkOwog ICAgICAgIHNwaW5sb2NrX3QgaV9zaGFyZWRfbG9jazsKICAgICAgICBpbnQgZ2ZwX21hc2s7Cn07 CgpzdHJ1Y3QgY2hhcl9kZXZpY2UgewogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgaGFzaDsKICAg ICAgICBhdG9taWNfdCBjb3VudDsKICAgICAgICBkZXZfdCBkZXY7CiAgICAgICAgYXRvbWljX3Qg b3BlbmVyczsKICAgICAgICBzdHJ1Y3Qgc2VtYXBob3JlIHNlbTsKfTsKCnN0cnVjdCBibG9ja19k ZXZpY2UgewogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgYmRfaGFzaDsKICAgICAgICBhdG9taWNf dCBiZF9jb3VudDsKICAgICAgICBzdHJ1Y3QgaW5vZGUgKiBiZF9pbm9kZTsKICAgICAgICBkZXZf dCBiZF9kZXY7CiAgICAgICAgaW50IGJkX29wZW5lcnM7CiAgICAgICAgY29uc3Qgc3RydWN0IGJs b2NrX2RldmljZV9vcGVyYXRpb25zICpiZF9vcDsKICAgICAgICBzdHJ1Y3Qgc2VtYXBob3JlIGJk X3NlbTsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGJkX2lub2RlczsKfTsKCnN0cnVjdCBpbm9k ZSB7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBpX2hhc2g7CiAgICAgICAgc3RydWN0IGxpc3Rf aGVhZCBpX2xpc3Q7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBpX2RlbnRyeTsKCiAgICAgICAg c3RydWN0IGxpc3RfaGVhZCBpX2RpcnR5X2J1ZmZlcnM7CiAgICAgICAgc3RydWN0IGxpc3RfaGVh ZCBpX2RpcnR5X2RhdGFfYnVmZmVyczsKCiAgICAgICAgdW5zaWduZWQgbG9uZyBpX2lubzsKICAg ICAgICBhdG9taWNfdCBpX2NvdW50OwogICAgICAgIGtkZXZfdCBpX2RldjsKICAgICAgICB1bW9k ZV90IGlfbW9kZTsKICAgICAgICBubGlua190IGlfbmxpbms7CiAgICAgICAgdWlkX3QgaV91aWQ7 CiAgICAgICAgZ2lkX3QgaV9naWQ7CiAgICAgICAga2Rldl90IGlfcmRldjsKICAgICAgICBsb2Zm X3QgaV9zaXplOwogICAgICAgIHRpbWVfdCBpX2F0aW1lOwogICAgICAgIHRpbWVfdCBpX210aW1l OwogICAgICAgIHRpbWVfdCBpX2N0aW1lOwogICAgICAgIHVuc2lnbmVkIGludCBpX2Jsa2JpdHM7 CiAgICAgICAgdW5zaWduZWQgbG9uZyBpX2Jsa3NpemU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBp X2Jsb2NrczsKICAgICAgICB1bnNpZ25lZCBsb25nIGlfdmVyc2lvbjsKICAgICAgICBzdHJ1Y3Qg c2VtYXBob3JlIGlfc2VtOwogICAgICAgIHN0cnVjdCBzZW1hcGhvcmUgaV96b21iaWU7CiAgICAg ICAgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgKmlfb3A7CiAgICAgICAgc3RydWN0IGZpbGVfb3Bl cmF0aW9ucyAqaV9mb3A7CiAgICAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICppX3NiOwogICAgICAg IHdhaXRfcXVldWVfaGVhZF90IGlfd2FpdDsKICAgICAgICBzdHJ1Y3QgZmlsZV9sb2NrICppX2Zs b2NrOwogICAgICAgIHN0cnVjdCBhZGRyZXNzX3NwYWNlICppX21hcHBpbmc7CiAgICAgICAgc3Ry dWN0IGFkZHJlc3Nfc3BhY2UgaV9kYXRhOwogICAgICAgIHN0cnVjdCBkcXVvdCAqaV9kcXVvdFsy XTsKCiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBpX2RldmljZXM7CiAgICAgICAgc3RydWN0IHBp cGVfaW5vZGVfaW5mbyAqaV9waXBlOwogICAgICAgIHN0cnVjdCBibG9ja19kZXZpY2UgKmlfYmRl djsKICAgICAgICBzdHJ1Y3QgY2hhcl9kZXZpY2UgKmlfY2RldjsKCiAgICAgICAgdW5zaWduZWQg bG9uZyBpX2Rub3RpZnlfbWFzazsKICAgICAgICBzdHJ1Y3QgZG5vdGlmeV9zdHJ1Y3QgKmlfZG5v dGlmeTsKCiAgICAgICAgdW5zaWduZWQgbG9uZyBpX3N0YXRlOwoKICAgICAgICB1bnNpZ25lZCBp bnQgaV9mbGFnczsKICAgICAgICB1bnNpZ25lZCBjaGFyIGlfc29jazsKCiAgICAgICAgYXRvbWlj X3QgaV93cml0ZWNvdW50OwogICAgICAgIHVuc2lnbmVkIGludCBpX2F0dHJfZmxhZ3M7CiAgICAg ICAgX191MzIgaV9nZW5lcmF0aW9uOwogICAgICAgIHVuaW9uIHsKICAgICAgICAgICAgICAgIHN0 cnVjdCBtaW5peF9pbm9kZV9pbmZvIG1pbml4X2k7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgZXh0 Ml9pbm9kZV9pbmZvIGV4dDJfaTsKICAgICAgICAgICAgICAgIHN0cnVjdCBleHQzX2lub2RlX2lu Zm8gZXh0M19pOwogICAgICAgICAgICAgICAgc3RydWN0IGhwZnNfaW5vZGVfaW5mbyBocGZzX2k7 CiAgICAgICAgICAgICAgICBzdHJ1Y3QgbnRmc19pbm9kZV9pbmZvIG50ZnNfaTsKICAgICAgICAg ICAgICAgIHN0cnVjdCBtc2Rvc19pbm9kZV9pbmZvIG1zZG9zX2k7CiAgICAgICAgICAgICAgICBz dHJ1Y3QgdW1zZG9zX2lub2RlX2luZm8gdW1zZG9zX2k7CiAgICAgICAgICAgICAgICBzdHJ1Y3Qg aXNvX2lub2RlX2luZm8gaXNvZnNfaTsKICAgICAgICAgICAgICAgIHN0cnVjdCBuZnNfaW5vZGVf aW5mbyBuZnNfaTsKICAgICAgICAgICAgICAgIHN0cnVjdCBzeXN2X2lub2RlX2luZm8gc3lzdl9p OwogICAgICAgICAgICAgICAgc3RydWN0IGFmZnNfaW5vZGVfaW5mbyBhZmZzX2k7CiAgICAgICAg ICAgICAgICBzdHJ1Y3QgdWZzX2lub2RlX2luZm8gdWZzX2k7CiAgICAgICAgICAgICAgICBzdHJ1 Y3QgZWZzX2lub2RlX2luZm8gZWZzX2k7CiAgICAgICAgICAgICAgICBzdHJ1Y3Qgcm9tZnNfaW5v ZGVfaW5mbyByb21mc19pOwogICAgICAgICAgICAgICAgc3RydWN0IHNobWVtX2lub2RlX2luZm8g c2htZW1faTsKICAgICAgICAgICAgICAgIHN0cnVjdCBjb2RhX2lub2RlX2luZm8gY29kYV9pOwog ICAgICAgICAgICAgICAgc3RydWN0IHNtYl9pbm9kZV9pbmZvIHNtYmZzX2k7CiAgICAgICAgICAg ICAgICBzdHJ1Y3QgaGZzX2lub2RlX2luZm8gaGZzX2k7CiAgICAgICAgICAgICAgICBzdHJ1Y3Qg YWRmc19pbm9kZV9pbmZvIGFkZnNfaTsKICAgICAgICAgICAgICAgIHN0cnVjdCBxbng0X2lub2Rl X2luZm8gcW54NF9pOwogICAgICAgICAgICAgICAgc3RydWN0IHJlaXNlcmZzX2lub2RlX2luZm8g cmVpc2VyZnNfaTsKICAgICAgICAgICAgICAgIHN0cnVjdCBiZnNfaW5vZGVfaW5mbyBiZnNfaTsK ICAgICAgICAgICAgICAgIHN0cnVjdCB1ZGZfaW5vZGVfaW5mbyB1ZGZfaTsKICAgICAgICAgICAg ICAgIHN0cnVjdCBuY3BfaW5vZGVfaW5mbyBuY3Bmc19pOwogICAgICAgICAgICAgICAgc3RydWN0 IHByb2NfaW5vZGVfaW5mbyBwcm9jX2k7CiAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2V0IHNv Y2tldF9pOwogICAgICAgICAgICAgICAgc3RydWN0IHVzYmRldl9pbm9kZV9pbmZvIHVzYmRldl9p OwogICAgICAgICAgICAgICAgc3RydWN0IGpmZnMyX2lub2RlX2luZm8gamZmczJfaTsKICAgICAg ICAgICAgICAgIHN0cnVjdCBzdXBlcm1vdW50X2lub2RlX2luZm8gc3VwZXJtb3VudF9pOwogICAg ICAgICAgICAgICAgdm9pZCAqZ2VuZXJpY19pcDsKICAgICAgICB9IHU7Cn07CgpzdHJ1Y3QgZm93 bl9zdHJ1Y3QgewogICAgICAgIGludCBwaWQ7CiAgICAgICAgdWlkX3QgdWlkLCBldWlkOwogICAg ICAgIGludCBzaWdudW07Cn07CgpzdHJ1Y3QgZmlsZSB7CiAgICAgICAgc3RydWN0IGxpc3RfaGVh ZCBmX2xpc3Q7CiAgICAgICAgc3RydWN0IGRlbnRyeSAqZl9kZW50cnk7CiAgICAgICAgc3RydWN0 IHZmc21vdW50ICpmX3Zmc21udDsKICAgICAgICBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmX29w OwogICAgICAgIGF0b21pY190IGZfY291bnQ7CiAgICAgICAgdW5zaWduZWQgaW50IGZfZmxhZ3M7 CiAgICAgICAgbW9kZV90IGZfbW9kZTsKICAgICAgICBsb2ZmX3QgZl9wb3M7CiAgICAgICAgdW5z aWduZWQgbG9uZyBmX3JlYWRhLCBmX3JhbWF4LCBmX3JhZW5kLCBmX3JhbGVuLCBmX3Jhd2luOwog ICAgICAgIHN0cnVjdCBmb3duX3N0cnVjdCBmX293bmVyOwogICAgICAgIHVuc2lnbmVkIGludCBm X3VpZCwgZl9naWQ7CiAgICAgICAgaW50IGZfZXJyb3I7CgogICAgICAgIHVuc2lnbmVkIGxvbmcg Zl92ZXJzaW9uOwoKCiAgICAgICAgdm9pZCAqcHJpdmF0ZV9kYXRhOwoKCiAgICAgICAgc3RydWN0 IGtpb2J1ZiAqZl9pb2J1ZjsKICAgICAgICBsb25nIGZfaW9idWZfbG9jazsKfTsKZXh0ZXJuIHNw aW5sb2NrX3QgZmlsZXNfbG9jazsKCgoKCgoKZXh0ZXJuIGludCBpbml0X3ByaXZhdGVfZmlsZShz dHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIGludCk7CiMgNTgzICIvdXNyL3NyYy9saW51 eC0yLjQuMjAvaW5jbHVkZS9saW51eC9mcy5oIgp0eXBlZGVmIHN0cnVjdCBmaWxlc19zdHJ1Y3Qg KmZsX293bmVyX3Q7CgpzdHJ1Y3QgZmlsZV9sb2NrIHsKICAgICAgICBzdHJ1Y3QgZmlsZV9sb2Nr ICpmbF9uZXh0OwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgZmxfbGluazsKICAgICAgICBzdHJ1 Y3QgbGlzdF9oZWFkIGZsX2Jsb2NrOwogICAgICAgIGZsX293bmVyX3QgZmxfb3duZXI7CiAgICAg ICAgdW5zaWduZWQgaW50IGZsX3BpZDsKICAgICAgICB3YWl0X3F1ZXVlX2hlYWRfdCBmbF93YWl0 OwogICAgICAgIHN0cnVjdCBmaWxlICpmbF9maWxlOwogICAgICAgIHVuc2lnbmVkIGNoYXIgZmxf ZmxhZ3M7CiAgICAgICAgdW5zaWduZWQgY2hhciBmbF90eXBlOwogICAgICAgIGxvZmZfdCBmbF9z dGFydDsKICAgICAgICBsb2ZmX3QgZmxfZW5kOwoKICAgICAgICB2b2lkICgqZmxfbm90aWZ5KShz dHJ1Y3QgZmlsZV9sb2NrICopOwogICAgICAgIHZvaWQgKCpmbF9pbnNlcnQpKHN0cnVjdCBmaWxl X2xvY2sgKik7CiAgICAgICAgdm9pZCAoKmZsX3JlbW92ZSkoc3RydWN0IGZpbGVfbG9jayAqKTsK CiAgICAgICAgc3RydWN0IGZhc3luY19zdHJ1Y3QgKiBmbF9mYXN5bmM7CiAgICAgICAgdW5zaWdu ZWQgbG9uZyBmbF9icmVha190aW1lOwoKICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICAgICBz dHJ1Y3QgbmZzX2xvY2tfaW5mbyBuZnNfZmw7CiAgICAgICAgfSBmbF91Owp9OwojIDYxNyAiL3Vz ci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvZnMuaCIKZXh0ZXJuIHN0cnVjdCBsaXN0 X2hlYWQgZmlsZV9sb2NrX2xpc3Q7CgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRl L2xpbnV4L2ZjbnRsLmgiIDEKCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9h c20vZmNudGwuaCIgMQojIDY5ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9hc20vZmNu dGwuaCIKc3RydWN0IGZsb2NrIHsKICAgICAgICBzaG9ydCBsX3R5cGU7CiAgICAgICAgc2hvcnQg bF93aGVuY2U7CiAgICAgICAgb2ZmX3QgbF9zdGFydDsKICAgICAgICBvZmZfdCBsX2xlbjsKICAg ICAgICBwaWRfdCBsX3BpZDsKfTsKCnN0cnVjdCBmbG9jazY0IHsKICAgICAgICBzaG9ydCBsX3R5 cGU7CiAgICAgICAgc2hvcnQgbF93aGVuY2U7CiAgICAgICAgbG9mZl90IGxfc3RhcnQ7CiAgICAg ICAgbG9mZl90IGxfbGVuOwogICAgICAgIHBpZF90IGxfcGlkOwp9OwojIDUgIi91c3Ivc3JjL2xp bnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L2ZjbnRsLmgiIDIKIyA2MjAgIi91c3Ivc3JjL2xpbnV4 LTIuNC4yMC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKCmV4dGVybiBpbnQgZmNudGxfZ2V0bGsodW5z aWduZWQgaW50LCBzdHJ1Y3QgZmxvY2sgKik7CmV4dGVybiBpbnQgZmNudGxfc2V0bGsodW5zaWdu ZWQgaW50LCB1bnNpZ25lZCBpbnQsIHN0cnVjdCBmbG9jayAqKTsKCmV4dGVybiBpbnQgZmNudGxf Z2V0bGs2NCh1bnNpZ25lZCBpbnQsIHN0cnVjdCBmbG9jazY0ICopOwpleHRlcm4gaW50IGZjbnRs X3NldGxrNjQodW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQsIHN0cnVjdCBmbG9jazY0ICopOwoK CmV4dGVybiB2b2lkIGxvY2tzX2luaXRfbG9jayhzdHJ1Y3QgZmlsZV9sb2NrICopOwpleHRlcm4g dm9pZCBsb2Nrc19jb3B5X2xvY2soc3RydWN0IGZpbGVfbG9jayAqLCBzdHJ1Y3QgZmlsZV9sb2Nr ICopOwpleHRlcm4gdm9pZCBsb2Nrc19yZW1vdmVfcG9zaXgoc3RydWN0IGZpbGUgKiwgZmxfb3du ZXJfdCk7CmV4dGVybiB2b2lkIGxvY2tzX3JlbW92ZV9mbG9jayhzdHJ1Y3QgZmlsZSAqKTsKZXh0 ZXJuIHN0cnVjdCBmaWxlX2xvY2sgKnBvc2l4X3Rlc3RfbG9jayhzdHJ1Y3QgZmlsZSAqLCBzdHJ1 Y3QgZmlsZV9sb2NrICopOwpleHRlcm4gaW50IHBvc2l4X2xvY2tfZmlsZShzdHJ1Y3QgZmlsZSAq LCBzdHJ1Y3QgZmlsZV9sb2NrICosIHVuc2lnbmVkIGludCk7CmV4dGVybiB2b2lkIHBvc2l4X2Js b2NrX2xvY2soc3RydWN0IGZpbGVfbG9jayAqLCBzdHJ1Y3QgZmlsZV9sb2NrICopOwpleHRlcm4g dm9pZCBwb3NpeF91bmJsb2NrX2xvY2soc3RydWN0IGZpbGVfbG9jayAqKTsKZXh0ZXJuIGludCBw b3NpeF9sb2Nrc19kZWFkbG9jayhzdHJ1Y3QgZmlsZV9sb2NrICosIHN0cnVjdCBmaWxlX2xvY2sg Kik7CmV4dGVybiBpbnQgX19nZXRfbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQg aW50IGZsYWdzKTsKZXh0ZXJuIHRpbWVfdCBsZWFzZV9nZXRfbXRpbWUoc3RydWN0IGlub2RlICop OwpleHRlcm4gaW50IGxvY2tfbWF5X3JlYWQoc3RydWN0IGlub2RlICosIGxvZmZfdCBzdGFydCwg dW5zaWduZWQgbG9uZyBjb3VudCk7CmV4dGVybiBpbnQgbG9ja19tYXlfd3JpdGUoc3RydWN0IGlu b2RlICosIGxvZmZfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBjb3VudCk7CgpzdHJ1Y3QgZmFzeW5j X3N0cnVjdCB7CiAgICAgICAgaW50IG1hZ2ljOwogICAgICAgIGludCBmYV9mZDsKICAgICAgICBz dHJ1Y3QgZmFzeW5jX3N0cnVjdCAqZmFfbmV4dDsKICAgICAgICBzdHJ1Y3QgZmlsZSAqZmFfZmls ZTsKfTsKCgoKCmV4dGVybiBpbnQgZmFzeW5jX2hlbHBlcihpbnQsIHN0cnVjdCBmaWxlICosIGlu dCwgc3RydWN0IGZhc3luY19zdHJ1Y3QgKiopOwoKZXh0ZXJuIHZvaWQga2lsbF9mYXN5bmMoc3Ry dWN0IGZhc3luY19zdHJ1Y3QgKiosIGludCwgaW50KTsKCmV4dGVybiB2b2lkIF9fa2lsbF9mYXN5 bmMoc3RydWN0IGZhc3luY19zdHJ1Y3QgKiwgaW50LCBpbnQpOwoKc3RydWN0IG5hbWVpZGF0YSB7 CiAgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5OwogICAgICAgIHN0cnVjdCB2ZnNtb3VudCAq bW50OwogICAgICAgIHN0cnVjdCBxc3RyIGxhc3Q7CiAgICAgICAgdW5zaWduZWQgaW50IGZsYWdz OwogICAgICAgIGludCBsYXN0X3R5cGU7Cn07CgoKCgpzdHJ1Y3QgcXVvdGFfbW91bnRfb3B0aW9u cwp7CiAgICAgICAgdW5zaWduZWQgaW50IGZsYWdzOwogICAgICAgIHN0cnVjdCBzZW1hcGhvcmUg ZHFpb19zZW07CiAgICAgICAgc3RydWN0IHNlbWFwaG9yZSBkcW9mZl9zZW07CiAgICAgICAgc3Ry dWN0IGZpbGUgKmZpbGVzWzJdOwogICAgICAgIHRpbWVfdCBpbm9kZV9leHBpcmVbMl07CiAgICAg ICAgdGltZV90IGJsb2NrX2V4cGlyZVsyXTsKICAgICAgICBjaGFyIHJzcXVhc2hbMl07Cn07CiMg Njg3ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9mcy5oIgojIDEgIi91c3Iv c3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L21pbml4X2ZzX3NiLmgiIDEKCgoKCgoKc3Ry dWN0IG1pbml4X3NiX2luZm8gewogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25n IHNfbmlub2RlczsKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBzX256b25l czsKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBzX2ltYXBfYmxvY2tzOwog ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHNfem1hcF9ibG9ja3M7CiAgICAg ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc19maXJzdGRhdGF6b25lOwogICAgICAg ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHNfbG9nX3pvbmVfc2l6ZTsKICAgICAgICAg ICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBzX21heF9zaXplOwogICAgICAgICAgICAgICAg ICAgICAgICBpbnQgc19kaXJzaXplOwogICAgICAgICAgICAgICAgICAgICAgICBpbnQgc19uYW1l bGVuOwogICAgICAgICAgICAgICAgICAgICAgICBpbnQgc19saW5rX21heDsKICAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqIHNfaW1hcDsKICAgICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqIHNfem1hcDsKICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICogc19zYmg7CiAgICAgICAgICAgICAgICAgICAgICAg IHN0cnVjdCBtaW5peF9zdXBlcl9ibG9jayAqIHNfbXM7CiAgICAgICAgICAgICAgICAgICAgICAg IHVuc2lnbmVkIHNob3J0IHNfbW91bnRfc3RhdGU7CiAgICAgICAgICAgICAgICAgICAgICAgIHVu c2lnbmVkIHNob3J0IHNfdmVyc2lvbjsKfTsKIyA2ODggIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9p bmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9s aW51eC9leHQyX2ZzX3NiLmgiIDEKIyAzMCAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUv bGludXgvZXh0Ml9mc19zYi5oIgpzdHJ1Y3QgZXh0Ml9zYl9pbmZvIHsKICAgICAgICB1bnNpZ25l ZCBsb25nIHNfZnJhZ19zaXplOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc19mcmFnc19wZXJfYmxv Y2s7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzX2lub2Rlc19wZXJfYmxvY2s7CiAgICAgICAgdW5z aWduZWQgbG9uZyBzX2ZyYWdzX3Blcl9ncm91cDsKICAgICAgICB1bnNpZ25lZCBsb25nIHNfYmxv Y2tzX3Blcl9ncm91cDsKICAgICAgICB1bnNpZ25lZCBsb25nIHNfaW5vZGVzX3Blcl9ncm91cDsK ICAgICAgICB1bnNpZ25lZCBsb25nIHNfaXRiX3Blcl9ncm91cDsKICAgICAgICB1bnNpZ25lZCBs b25nIHNfZ2RiX2NvdW50OwogICAgICAgIHVuc2lnbmVkIGxvbmcgc19kZXNjX3Blcl9ibG9jazsK ICAgICAgICB1bnNpZ25lZCBsb25nIHNfZ3JvdXBzX2NvdW50OwogICAgICAgIHN0cnVjdCBidWZm ZXJfaGVhZCAqIHNfc2JoOwogICAgICAgIHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICogc19lczsK ICAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiogc19ncm91cF9kZXNjOwogICAgICAgIHVuc2ln bmVkIHNob3J0IHNfbG9hZGVkX2lub2RlX2JpdG1hcHM7CiAgICAgICAgdW5zaWduZWQgc2hvcnQg c19sb2FkZWRfYmxvY2tfYml0bWFwczsKICAgICAgICB1bnNpZ25lZCBsb25nIHNfaW5vZGVfYml0 bWFwX251bWJlcls4XTsKICAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBzX2lub2RlX2JpdG1h cFs4XTsKICAgICAgICB1bnNpZ25lZCBsb25nIHNfYmxvY2tfYml0bWFwX251bWJlcls4XTsKICAg ICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBzX2Jsb2NrX2JpdG1hcFs4XTsKICAgICAgICB1bnNp Z25lZCBsb25nIHNfbW91bnRfb3B0OwogICAgICAgIHVpZF90IHNfcmVzdWlkOwogICAgICAgIGdp ZF90IHNfcmVzZ2lkOwogICAgICAgIHVuc2lnbmVkIHNob3J0IHNfbW91bnRfc3RhdGU7CiAgICAg ICAgdW5zaWduZWQgc2hvcnQgc19wYWQ7CiAgICAgICAgaW50IHNfYWRkcl9wZXJfYmxvY2tfYml0 czsKICAgICAgICBpbnQgc19kZXNjX3Blcl9ibG9ja19iaXRzOwogICAgICAgIGludCBzX2lub2Rl X3NpemU7CiAgICAgICAgaW50IHNfZmlyc3RfaW5vOwp9OwojIDY4OSAiL3Vzci9zcmMvbGludXgt Mi40LjIwL2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9p bmNsdWRlL2xpbnV4L2V4dDNfZnNfc2IuaCIgMQojIDIwICIvdXNyL3NyYy9saW51eC0yLjQuMjAv aW5jbHVkZS9saW51eC9leHQzX2ZzX3NiLmgiCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2lu Y2x1ZGUvbGludXgvdGltZXIuaCIgMQojIDE2ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVk ZS9saW51eC90aW1lci5oIgpzdHJ1Y3QgdGltZXJfbGlzdCB7CiAgICAgICAgc3RydWN0IGxpc3Rf aGVhZCBsaXN0OwogICAgICAgIHVuc2lnbmVkIGxvbmcgZXhwaXJlczsKICAgICAgICB1bnNpZ25l ZCBsb25nIGRhdGE7CiAgICAgICAgdm9pZCAoKmZ1bmN0aW9uKSh1bnNpZ25lZCBsb25nKTsKfTsK CmV4dGVybiB2b2lkIGFkZF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqIHRpbWVyKTsKZXh0ZXJu IGludCBkZWxfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKiB0aW1lcik7CgoKZXh0ZXJuIGludCBk ZWxfdGltZXJfc3luYyhzdHJ1Y3QgdGltZXJfbGlzdCAqIHRpbWVyKTsKZXh0ZXJuIHZvaWQgc3lu Y190aW1lcnModm9pZCk7CiMgNDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4 L3RpbWVyLmgiCmludCBtb2RfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyLCB1bnNpZ25l ZCBsb25nIGV4cGlyZXMpOwoKZXh0ZXJuIHZvaWQgaXRfcmVhbF9mbih1bnNpZ25lZCBsb25nKTsK CnN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICogdGltZXIp CnsKICAgICAgICB0aW1lci0+bGlzdC5uZXh0ID0gdGltZXItPmxpc3QucHJldiA9ICgodm9pZCAq KTApOwp9CgpzdGF0aWMgaW5saW5lIGludCB0aW1lcl9wZW5kaW5nIChjb25zdCBzdHJ1Y3QgdGlt ZXJfbGlzdCAqIHRpbWVyKQp7CiAgICAgICAgcmV0dXJuIHRpbWVyLT5saXN0Lm5leHQgIT0gKCh2 b2lkICopMCk7Cn0KIyAyMSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvZXh0 M19mc19zYi5oIiAyCiMgMzUgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L2V4 dDNfZnNfc2IuaCIKc3RydWN0IGV4dDNfc2JfaW5mbyB7CiAgICAgICAgdW5zaWduZWQgbG9uZyBz X2ZyYWdfc2l6ZTsKICAgICAgICB1bnNpZ25lZCBsb25nIHNfZnJhZ3NfcGVyX2Jsb2NrOwogICAg ICAgIHVuc2lnbmVkIGxvbmcgc19pbm9kZXNfcGVyX2Jsb2NrOwogICAgICAgIHVuc2lnbmVkIGxv bmcgc19mcmFnc19wZXJfZ3JvdXA7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzX2Jsb2Nrc19wZXJf Z3JvdXA7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzX2lub2Rlc19wZXJfZ3JvdXA7CiAgICAgICAg dW5zaWduZWQgbG9uZyBzX2l0Yl9wZXJfZ3JvdXA7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzX2dk Yl9jb3VudDsKICAgICAgICB1bnNpZ25lZCBsb25nIHNfZGVzY19wZXJfYmxvY2s7CiAgICAgICAg dW5zaWduZWQgbG9uZyBzX2dyb3Vwc19jb3VudDsKICAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQg KiBzX3NiaDsKICAgICAgICBzdHJ1Y3QgZXh0M19zdXBlcl9ibG9jayAqIHNfZXM7CiAgICAgICAg c3RydWN0IGJ1ZmZlcl9oZWFkICoqIHNfZ3JvdXBfZGVzYzsKICAgICAgICB1bnNpZ25lZCBzaG9y dCBzX2xvYWRlZF9pbm9kZV9iaXRtYXBzOwogICAgICAgIHVuc2lnbmVkIHNob3J0IHNfbG9hZGVk X2Jsb2NrX2JpdG1hcHM7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzX2lub2RlX2JpdG1hcF9udW1i ZXJbOF07CiAgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICogc19pbm9kZV9iaXRtYXBbOF07CiAg ICAgICAgdW5zaWduZWQgbG9uZyBzX2Jsb2NrX2JpdG1hcF9udW1iZXJbOF07CiAgICAgICAgc3Ry dWN0IGJ1ZmZlcl9oZWFkICogc19ibG9ja19iaXRtYXBbOF07CiAgICAgICAgdW5zaWduZWQgbG9u ZyBzX21vdW50X29wdDsKICAgICAgICB1aWRfdCBzX3Jlc3VpZDsKICAgICAgICBnaWRfdCBzX3Jl c2dpZDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzX21vdW50X3N0YXRlOwogICAgICAgIHVuc2ln bmVkIHNob3J0IHNfcGFkOwogICAgICAgIGludCBzX2FkZHJfcGVyX2Jsb2NrX2JpdHM7CiAgICAg ICAgaW50IHNfZGVzY19wZXJfYmxvY2tfYml0czsKICAgICAgICBpbnQgc19pbm9kZV9zaXplOwog ICAgICAgIGludCBzX2ZpcnN0X2lubzsKICAgICAgICB1MzIgc19uZXh0X2dlbmVyYXRpb247CgoK ICAgICAgICBzdHJ1Y3QgaW5vZGUgKiBzX2pvdXJuYWxfaW5vZGU7CiAgICAgICAgc3RydWN0IGpv dXJuYWxfcyAqIHNfam91cm5hbDsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIHNfb3JwaGFuOwog ICAgICAgIHVuc2lnbmVkIGxvbmcgc19jb21taXRfaW50ZXJ2YWw7CiAgICAgICAgc3RydWN0IGJs b2NrX2RldmljZSAqam91cm5hbF9iZGV2OwoKCgoKfTsKIyA2OTAgIi91c3Ivc3JjL2xpbnV4LTIu NC4yMC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5j bHVkZS9saW51eC9ocGZzX2ZzX3NiLmgiIDEKCgoKc3RydWN0IGhwZnNfc2JfaW5mbyB7CiAgICAg ICAgaW5vX3Qgc2Jfcm9vdDsKICAgICAgICB1bnNpZ25lZCBzYl9mc19zaXplOwogICAgICAgIHVu c2lnbmVkIHNiX2JpdG1hcHM7CiAgICAgICAgdW5zaWduZWQgc2JfZGlyYmFuZF9zdGFydDsKICAg ICAgICB1bnNpZ25lZCBzYl9kaXJiYW5kX3NpemU7CiAgICAgICAgdW5zaWduZWQgc2JfZG1hcDsK ICAgICAgICB1bnNpZ25lZCBzYl9uX2ZyZWU7CiAgICAgICAgdW5zaWduZWQgc2Jfbl9mcmVlX2Ru b2RlczsKICAgICAgICB1aWRfdCBzYl91aWQ7CiAgICAgICAgZ2lkX3Qgc2JfZ2lkOwogICAgICAg IHVtb2RlX3Qgc2JfbW9kZTsKICAgICAgICB1bnNpZ25lZCBzYl9jb252IDogMjsKICAgICAgICB1 bnNpZ25lZCBzYl9lYXMgOiAyOwogICAgICAgIHVuc2lnbmVkIHNiX2VyciA6IDI7CiAgICAgICAg dW5zaWduZWQgc2JfY2hrIDogMjsKICAgICAgICB1bnNpZ25lZCBzYl9sb3dlcmNhc2UgOiAxOwog ICAgICAgIHVuc2lnbmVkIHNiX3dhc19lcnJvciA6IDE7CiAgICAgICAgdW5zaWduZWQgc2JfY2hr ZHNrIDogMjsKICAgICAgICB1bnNpZ25lZCBzYl9yZF9mbm9kZSA6IDI7CiAgICAgICAgdW5zaWdu ZWQgc2JfcmRfaW5vZGUgOiAyOwoKCiAgICAgICAgd2FpdF9xdWV1ZV9oZWFkX3Qgc2JfaWdldF9x OwogICAgICAgIHVuc2lnbmVkIGNoYXIgKnNiX2NwX3RhYmxlOwoKCiAgICAgICAgdW5zaWduZWQg KnNiX2JtcF9kaXI7CiAgICAgICAgdW5zaWduZWQgc2JfY19iaXRtYXA7CiAgICAgICAgd2FpdF9x dWV1ZV9oZWFkX3Qgc2JfY3JlYXRpb25fZGU7CgogICAgICAgIHVuc2lnbmVkIHNiX2NyZWF0aW9u X2RlX2xvY2sgOiAxOwoKICAgICAgICBpbnQgc2JfdGltZXNoaWZ0Owp9OwojIDY5MSAiL3Vzci9z cmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4 LTIuNC4yMC9pbmNsdWRlL2xpbnV4L250ZnNfZnNfc2IuaCIgMQoKCgoKCnN0cnVjdCBudGZzX3Ni X2luZm97CgogICAgICAgIG50ZnNfdWlkX3QgdWlkOwogICAgICAgIG50ZnNfZ2lkX3QgZ2lkOwog ICAgICAgIG50bW9kZV90IHVtYXNrOwogICAgICAgIHZvaWQgKm5sc19tYXA7CiAgICAgICAgdW5z aWduZWQgaW50IG5ndDsKICAgICAgICBjaGFyIG1mdF96b25lX211bHRpcGxpZXI7CiAgICAgICAg dW5zaWduZWQgbG9uZyBtZnRfZGF0YV9wb3M7CiAgICAgICAgbnRmc19jbHVzdGVyX3QgbWZ0X3pv bmVfcG9zOwogICAgICAgIG50ZnNfY2x1c3Rlcl90IG1mdF96b25lX3N0YXJ0OwogICAgICAgIG50 ZnNfY2x1c3Rlcl90IG1mdF96b25lX2VuZDsKICAgICAgICBudGZzX2NsdXN0ZXJfdCBkYXRhMV96 b25lX3BvczsKICAgICAgICBudGZzX2NsdXN0ZXJfdCBkYXRhMl96b25lX3BvczsKCgogICAgICAg IG50ZnNfc2l6ZV90IHBhcnRpdGlvbl9iaWFzOwoKICAgICAgICBudGZzX3UzMiBhdF9zdGFuZGFy ZF9pbmZvcm1hdGlvbjsKICAgICAgICBudGZzX3UzMiBhdF9hdHRyaWJ1dGVfbGlzdDsKICAgICAg ICBudGZzX3UzMiBhdF9maWxlX25hbWU7CiAgICAgICAgbnRmc191MzIgYXRfdm9sdW1lX3ZlcnNp b247CiAgICAgICAgbnRmc191MzIgYXRfc2VjdXJpdHlfZGVzY3JpcHRvcjsKICAgICAgICBudGZz X3UzMiBhdF92b2x1bWVfbmFtZTsKICAgICAgICBudGZzX3UzMiBhdF92b2x1bWVfaW5mb3JtYXRp b247CiAgICAgICAgbnRmc191MzIgYXRfZGF0YTsKICAgICAgICBudGZzX3UzMiBhdF9pbmRleF9y b290OwogICAgICAgIG50ZnNfdTMyIGF0X2luZGV4X2FsbG9jYXRpb247CiAgICAgICAgbnRmc191 MzIgYXRfYml0bWFwOwogICAgICAgIG50ZnNfdTMyIGF0X3N5bWxpbms7CgogICAgICAgIGludCBz ZWN0b3Jfc2l6ZTsKICAgICAgICBpbnQgY2x1c3Rlcl9zaXplOwogICAgICAgIGludCBjbHVzdGVy X3NpemVfYml0czsKICAgICAgICBpbnQgbWZ0X2NsdXN0ZXJzX3Blcl9yZWNvcmQ7CiAgICAgICAg aW50IG1mdF9yZWNvcmRfc2l6ZTsKICAgICAgICBpbnQgbWZ0X3JlY29yZF9zaXplX2JpdHM7CiAg ICAgICAgaW50IGluZGV4X2NsdXN0ZXJzX3Blcl9yZWNvcmQ7CiAgICAgICAgaW50IGluZGV4X3Jl Y29yZF9zaXplOwogICAgICAgIGludCBpbmRleF9yZWNvcmRfc2l6ZV9iaXRzOwogICAgICAgIG50 ZnNfY2x1c3Rlcl90IG5yX2NsdXN0ZXJzOwogICAgICAgIG50ZnNfY2x1c3Rlcl90IG1mdF9sY247 CiAgICAgICAgbnRmc19jbHVzdGVyX3QgbWZ0X21pcnJfbGNuOwoKICAgICAgICB1bnNpZ25lZCBj aGFyICptZnQ7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgKnVwY2FzZTsKICAgICAgICB1bnNpZ25l ZCBpbnQgdXBjYXNlX2xlbmd0aDsKCiAgICAgICAgc3RydWN0IG50ZnNfaW5vZGVfaW5mbyAqbWZ0 X2lubzsKICAgICAgICBzdHJ1Y3QgbnRmc19pbm9kZV9pbmZvICptZnRtaXJyOwogICAgICAgIHN0 cnVjdCBudGZzX2lub2RlX2luZm8gKmJpdG1hcDsKICAgICAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sg KnNiOwogICAgICAgIHVuc2lnbmVkIGNoYXIgaW5vX2ZsYWdzOwp9OwojIDY5MiAiL3Vzci9zcmMv bGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIu NC4yMC9pbmNsdWRlL2xpbnV4L21zZG9zX2ZzX3NiLmgiIDEKCgojIDEgIi91c3Ivc3JjL2xpbnV4 LTIuNC4yMC9pbmNsdWRlL2xpbnV4L2ZhdF9jdmYuaCIgMQoKCgoKCnN0cnVjdCBjdmZfZm9ybWF0 CnsgaW50IGN2Zl92ZXJzaW9uOwogIGNoYXIqIGN2Zl92ZXJzaW9uX3RleHQ7CiAgdW5zaWduZWQg bG9uZyBmbGFnczsKICBpbnQgKCpkZXRlY3RfY3ZmKSAoc3RydWN0IHN1cGVyX2Jsb2NrKnNiKTsK ICBpbnQgKCptb3VudF9jdmYpIChzdHJ1Y3Qgc3VwZXJfYmxvY2sqc2IsY2hhcipvcHRpb25zKTsK ICBpbnQgKCp1bm1vdW50X2N2ZikgKHN0cnVjdCBzdXBlcl9ibG9jaypzYik7CiAgc3RydWN0IGJ1 ZmZlcl9oZWFkKiAoKmN2Zl9icmVhZCkgKHN0cnVjdCBzdXBlcl9ibG9jaypzYixpbnQgYmxvY2sp OwogIHN0cnVjdCBidWZmZXJfaGVhZCogKCpjdmZfZ2V0YmxrKSAoc3RydWN0IHN1cGVyX2Jsb2Nr KnNiLGludCBibG9jayk7CiAgdm9pZCAoKmN2Zl9icmVsc2UpIChzdHJ1Y3Qgc3VwZXJfYmxvY2sg KnNiLHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpOwogIHZvaWQgKCpjdmZfbWFya19idWZmZXJfZGly dHkpIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKTsKICB2b2lkICgqY3ZmX3NldF91cHRvZGF0ZSkgKHN0 cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYnVm ZmVyX2hlYWQgKmJoLAogICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZhbCk7CiAgaW50ICgq Y3ZmX2lzX3VwdG9kYXRlKSAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixzdHJ1Y3QgYnVmZmVyX2hl YWQgKmJoKTsKICB2b2lkICgqY3ZmX2xsX3J3X2Jsb2NrKSAoc3RydWN0IHN1cGVyX2Jsb2NrICpz YiwKICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9wciwKICAgICAgICAgICAgICAgICAgICAg ICAgaW50IG5icmVxLAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQg KmJoWzMyXSk7CiAgaW50ICgqZmF0X2FjY2VzcykgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsaW50 IG5yLGludCBuZXdfdmFsdWUpOwogIGludCAoKmN2Zl9zdGF0ZnMpIChzdHJ1Y3Qgc3VwZXJfYmxv Y2sgKnNiLHN0cnVjdCBzdGF0ZnMgKmJ1ZiwgaW50IGJ1ZnNpeik7CiAgaW50ICgqY3ZmX2JtYXAp IChzdHJ1Y3QgaW5vZGUgKmlub2RlLGludCBibG9jayk7CiAgc3NpemVfdCAoKmN2Zl9maWxlX3Jl YWQpICggc3RydWN0IGZpbGUgKiwgY2hhciAqLCBzaXplX3QsIGxvZmZfdCAqKTsKICBzc2l6ZV90 ICgqY3ZmX2ZpbGVfd3JpdGUpICggc3RydWN0IGZpbGUgKiwgY29uc3QgY2hhciAqLCBzaXplX3Qs IGxvZmZfdCAqKTsKICBpbnQgKCpjdmZfbW1hcCkgKHN0cnVjdCBmaWxlICosIHN0cnVjdCB2bV9h cmVhX3N0cnVjdCAqKTsKICBpbnQgKCpjdmZfcmVhZHBhZ2UpIChzdHJ1Y3QgaW5vZGUgKiwgc3Ry dWN0IHBhZ2UgKik7CiAgaW50ICgqY3ZmX3dyaXRlcGFnZSkgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1 Y3QgcGFnZSAqKTsKICBpbnQgKCpjdmZfZGlyX2lvY3RsKSAoc3RydWN0IGlub2RlICogaW5vZGUs IHN0cnVjdCBmaWxlICogZmlscCwKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50 IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogIHZvaWQgKCp6ZXJvX291dF9jbHVzdGVyKSAoc3Ry dWN0IGlub2RlKiwgaW50IGNsdXN0ZXJucik7Cn07CgppbnQgcmVnaXN0ZXJfY3ZmX2Zvcm1hdChz dHJ1Y3QgY3ZmX2Zvcm1hdCpjdmZfZm9ybWF0KTsKaW50IHVucmVnaXN0ZXJfY3ZmX2Zvcm1hdChz dHJ1Y3QgY3ZmX2Zvcm1hdCpjdmZfZm9ybWF0KTsKdm9pZCBkZWNfY3ZmX2Zvcm1hdF91c2VfY291 bnRfYnlfdmVyc2lvbihpbnQgdmVyc2lvbik7CmludCBkZXRlY3RfY3ZmKHN0cnVjdCBzdXBlcl9i bG9jaypzYixjaGFyKmZvcmNlKTsKCmV4dGVybiBzdHJ1Y3QgY3ZmX2Zvcm1hdCAqY3ZmX2Zvcm1h dHNbXTsKZXh0ZXJuIGludCBjdmZfZm9ybWF0X3VzZV9jb3VudFtdOwojIDQgIi91c3Ivc3JjL2xp bnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L21zZG9zX2ZzX3NiLmgiIDIKCgoKCgpzdHJ1Y3QgZmF0 X21vdW50X29wdGlvbnMgewogICAgICAgIHVpZF90IGZzX3VpZDsKICAgICAgICBnaWRfdCBmc19n aWQ7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgZnNfdW1hc2s7CiAgICAgICAgdW5zaWduZWQgc2hv cnQgY29kZXBhZ2U7CiAgICAgICAgY2hhciAqaW9jaGFyc2V0OwogICAgICAgIHVuc2lnbmVkIHNo b3J0IHNob3J0bmFtZTsKICAgICAgICB1bnNpZ25lZCBjaGFyIG5hbWVfY2hlY2s7CiAgICAgICAg dW5zaWduZWQgY2hhciBjb252ZXJzaW9uOwogICAgICAgIHVuc2lnbmVkIHF1aWV0OjEsCiAgICAg ICAgICAgICAgICAgc2hvd2V4ZWM6MSwKICAgICAgICAgICAgICAgICBzeXNfaW1tdXRhYmxlOjEs CiAgICAgICAgICAgICAgICAgZG90c09LOjEsCiAgICAgICAgICAgICAgICAgaXN2ZmF0OjEsCiAg ICAgICAgICAgICAgICAgdXRmODoxLAogICAgICAgICAgICAgICAgIHVuaWNvZGVfeGxhdGU6MSwK ICAgICAgICAgICAgICAgICBwb3NpeGZzOjEsCiAgICAgICAgICAgICAgICAgbnVtdGFpbDoxLAog ICAgICAgICAgICAgICAgIGF0YXJpOjEsCiAgICAgICAgICAgICAgICAgZmF0MzI6MSwKICAgICAg ICAgICAgICAgICBub2Nhc2U6MTsKfTsKCnN0cnVjdCBtc2Rvc19zYl9pbmZvIHsKICAgICAgICB1 bnNpZ25lZCBzaG9ydCBjbHVzdGVyX3NpemU7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgY2x1c3Rl cl9iaXRzOwogICAgICAgIHVuc2lnbmVkIGNoYXIgZmF0cyxmYXRfYml0czsKICAgICAgICB1bnNp Z25lZCBzaG9ydCBmYXRfc3RhcnQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyBmYXRfbGVuZ3RoOwog ICAgICAgIHVuc2lnbmVkIGxvbmcgZGlyX3N0YXJ0OwogICAgICAgIHVuc2lnbmVkIHNob3J0IGRp cl9lbnRyaWVzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZGF0YV9zdGFydDsKICAgICAgICB1bnNp Z25lZCBsb25nIGNsdXN0ZXJzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgcm9vdF9jbHVzdGVyOwog ICAgICAgIHVuc2lnbmVkIGxvbmcgZnNpbmZvX3NlY3RvcjsKICAgICAgICBzdHJ1Y3Qgc2VtYXBo b3JlIGZhdF9sb2NrOwogICAgICAgIGludCBwcmV2X2ZyZWU7CiAgICAgICAgaW50IGZyZWVfY2x1 c3RlcnM7CiAgICAgICAgc3RydWN0IGZhdF9tb3VudF9vcHRpb25zIG9wdGlvbnM7CiAgICAgICAg c3RydWN0IG5sc190YWJsZSAqbmxzX2Rpc2s7CiAgICAgICAgc3RydWN0IG5sc190YWJsZSAqbmxz X2lvOwogICAgICAgIHN0cnVjdCBjdmZfZm9ybWF0KiBjdmZfZm9ybWF0OwogICAgICAgIHZvaWQg KmRpcl9vcHM7CiAgICAgICAgdm9pZCAqcHJpdmF0ZV9kYXRhOwogICAgICAgIGludCBkaXJfcGVy X2Jsb2NrOwogICAgICAgIGludCBkaXJfcGVyX2Jsb2NrX2JpdHM7Cn07CiMgNjkzICIvdXNyL3Ny Yy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgt Mi40LjIwL2luY2x1ZGUvbGludXgvaXNvX2ZzX3NiLmgiIDEKCgoKCgoKc3RydWN0IGlzb2ZzX3Ni X2luZm8gewogICAgICAgIHVuc2lnbmVkIGxvbmcgc19uaW5vZGVzOwogICAgICAgIHVuc2lnbmVk IGxvbmcgc19uem9uZXM7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzX2ZpcnN0ZGF0YXpvbmU7CiAg ICAgICAgdW5zaWduZWQgbG9uZyBzX2xvZ196b25lX3NpemU7CiAgICAgICAgdW5zaWduZWQgbG9u ZyBzX21heF9zaXplOwoKICAgICAgICB1bnNpZ25lZCBjaGFyIHNfaGlnaF9zaWVycmE7CiAgICAg ICAgdW5zaWduZWQgY2hhciBzX21hcHBpbmc7CiAgICAgICAgaW50IHNfcm9ja19vZmZzZXQ7CiAg ICAgICAgdW5zaWduZWQgY2hhciBzX3JvY2s7CiAgICAgICAgdW5zaWduZWQgY2hhciBzX2pvbGll dF9sZXZlbDsKICAgICAgICB1bnNpZ25lZCBjaGFyIHNfdXRmODsKICAgICAgICB1bnNpZ25lZCBj aGFyIHNfY3J1ZnQ7CgoKICAgICAgICB1bnNpZ25lZCBjaGFyIHNfdW5oaWRlOwogICAgICAgIHVu c2lnbmVkIGNoYXIgc19ub3N1aWQ7CiAgICAgICAgdW5zaWduZWQgY2hhciBzX25vZGV2OwogICAg ICAgIHVuc2lnbmVkIGNoYXIgc19ub2NvbXByZXNzOwoKICAgICAgICBtb2RlX3Qgc19tb2RlOwog ICAgICAgIGdpZF90IHNfZ2lkOwogICAgICAgIHVpZF90IHNfdWlkOwogICAgICAgIHN0cnVjdCBu bHNfdGFibGUgKnNfbmxzX2lvY2hhcnNldDsKfTsKIyA2OTQgIi91c3Ivc3JjL2xpbnV4LTIuNC4y MC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVk ZS9saW51eC9uZnNfZnNfc2IuaCIgMQojIDkgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRl L2xpbnV4L25mc19mc19zYi5oIgpzdHJ1Y3QgbmZzX3NlcnZlciB7CiAgICAgICAgc3RydWN0IHJw Y19jbG50ICogY2xpZW50OwogICAgICAgIHN0cnVjdCBuZnNfcnBjX29wcyAqIHJwY19vcHM7CiAg ICAgICAgaW50IGZsYWdzOwogICAgICAgIHVuc2lnbmVkIGludCByc2l6ZTsKICAgICAgICB1bnNp Z25lZCBpbnQgcnBhZ2VzOwogICAgICAgIHVuc2lnbmVkIGludCB3c2l6ZTsKICAgICAgICB1bnNp Z25lZCBpbnQgd3BhZ2VzOwogICAgICAgIHVuc2lnbmVkIGludCBkdHNpemU7CiAgICAgICAgdW5z aWduZWQgaW50IGJzaXplOwogICAgICAgIHVuc2lnbmVkIGludCBhY3JlZ21pbjsKICAgICAgICB1 bnNpZ25lZCBpbnQgYWNyZWdtYXg7CiAgICAgICAgdW5zaWduZWQgaW50IGFjZGlybWluOwogICAg ICAgIHVuc2lnbmVkIGludCBhY2Rpcm1heDsKICAgICAgICB1bnNpZ25lZCBpbnQgbmFtZWxlbjsK ICAgICAgICBjaGFyICogaG9zdG5hbWU7CiAgICAgICAgc3RydWN0IG5mc19yZXFsaXN0ICogcndf cmVxdWVzdHM7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBscnVfcmVhZCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBscnVfZGlydHksCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbHJ1X2NvbW1pdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBscnVfYnVz eTsKfTsKCgoKCnN0cnVjdCBuZnNfc2JfaW5mbyB7CiAgICAgICAgc3RydWN0IG5mc19zZXJ2ZXIg c19zZXJ2ZXI7Cn07CiMgNjk1ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9m cy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvc3lzdl9mc19z Yi5oIiAxCiMgMTMgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L3N5c3ZfZnNf c2IuaCIKc3RydWN0IHN5c3Zfc2JfaW5mbyB7CiAgICAgICAgaW50IHNfdHlwZTsKICAgICAgICBj aGFyIHNfYnl0ZXNleDsKICAgICAgICBjaGFyIHNfdHJ1bmNhdGU7CgogICAgICAgIG5saW5rX3Qg c19saW5rX21heDsKICAgICAgICB1bnNpZ25lZCBpbnQgc19pbm9kZXNfcGVyX2Jsb2NrOwogICAg ICAgIHVuc2lnbmVkIGludCBzX2lub2Rlc19wZXJfYmxvY2tfMTsKICAgICAgICB1bnNpZ25lZCBp bnQgc19pbm9kZXNfcGVyX2Jsb2NrX2JpdHM7CiAgICAgICAgdW5zaWduZWQgaW50IHNfaW5kX3Bl cl9ibG9jazsKICAgICAgICB1bnNpZ25lZCBpbnQgc19pbmRfcGVyX2Jsb2NrX2JpdHM7CiAgICAg ICAgdW5zaWduZWQgaW50IHNfaW5kX3Blcl9ibG9ja18yOwogICAgICAgIHVuc2lnbmVkIGludCBz X3Rvb2JpZ19ibG9jazsKICAgICAgICB1bnNpZ25lZCBpbnQgc19ibG9ja19iYXNlOwogICAgICAg IHVuc2lnbmVkIHNob3J0IHNfZmljX3NpemU7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc19mbGNf c2l6ZTsKCiAgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpzX2JoMTsKICAgICAgICBzdHJ1Y3Qg YnVmZmVyX2hlYWQgKnNfYmgyOwoKCiAgICAgICAgY2hhciAqIHNfc2JkMTsKICAgICAgICBjaGFy ICogc19zYmQyOwogICAgICAgIHUxNiAqc19zYl9maWNfY291bnQ7CiAgICAgICAgdTE2ICpzX3Ni X2ZpY19pbm9kZXM7CiAgICAgICAgdTE2ICpzX3NiX3RvdGFsX2ZyZWVfaW5vZGVzOwogICAgICAg IHUxNiAqc19iY2FjaGVfY291bnQ7CiAgICAgICAgdTMyICpzX2JjYWNoZTsKICAgICAgICB1MzIg KnNfZnJlZV9ibG9ja3M7CiAgICAgICAgdTMyICpzX3NiX3RpbWU7CiAgICAgICAgdTMyICpzX3Ni X3N0YXRlOwoKCiAgICAgICAgdTMyIHNfZmlyc3Rpbm9kZXpvbmU7CiAgICAgICAgdTMyIHNfZmly c3RkYXRhem9uZTsKICAgICAgICB1MzIgc19uaW5vZGVzOwogICAgICAgIHUzMiBzX25kYXRhem9u ZXM7CiAgICAgICAgdTMyIHNfbnpvbmVzOwogICAgICAgIHUxNiBzX25hbWVsZW47Cn07CiMgNjk2 ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9z cmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvYWZmc19mc19zYi5oIiAxCiMgMTEgIi91c3Iv c3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L2FmZnNfZnNfc2IuaCIKc3RydWN0IGFmZnNf Ym1faW5mbyB7CiAgICAgICAgdTMyIGJtX2tleTsKICAgICAgICB1MzIgYm1fZnJlZTsKfTsKCnN0 cnVjdCBhZmZzX3NiX2luZm8gewogICAgICAgIGludCBzX3BhcnRpdGlvbl9zaXplOwogICAgICAg IGludCBzX3Jlc2VydmVkOwoKICAgICAgICB1MzIgc19kYXRhX2Jsa3NpemU7CiAgICAgICAgdTMy IHNfcm9vdF9ibG9jazsKICAgICAgICBpbnQgc19oYXNoc2l6ZTsKICAgICAgICB1bnNpZ25lZCBs b25nIHNfZmxhZ3M7CiAgICAgICAgdWlkX3Qgc191aWQ7CiAgICAgICAgZ2lkX3Qgc19naWQ7CiAg ICAgICAgdW1vZGVfdCBzX21vZGU7CiAgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpzX3Jvb3Rf Ymg7CiAgICAgICAgc3RydWN0IHNlbWFwaG9yZSBzX2JtbG9jazsKICAgICAgICBzdHJ1Y3QgYWZm c19ibV9pbmZvICpzX2JpdG1hcDsKICAgICAgICB1MzIgc19ibWFwX2NvdW50OwogICAgICAgIHUz MiBzX2JtYXBfYml0czsKICAgICAgICB1MzIgc19sYXN0X2JtYXA7CiAgICAgICAgc3RydWN0IGJ1 ZmZlcl9oZWFkICpzX2JtYXBfYmg7CiAgICAgICAgY2hhciAqc19wcmVmaXg7CiAgICAgICAgaW50 IHNfcHJlZml4X2xlbjsKICAgICAgICBjaGFyIHNfdm9sdW1lWzMyXTsKfTsKIyA2OTcgIi91c3Iv c3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51 eC0yLjQuMjAvaW5jbHVkZS9saW51eC91ZnNfZnNfc2IuaCIgMQojIDE3ICIvdXNyL3NyYy9saW51 eC0yLjQuMjAvaW5jbHVkZS9saW51eC91ZnNfZnNfc2IuaCIKIyAxICIvdXNyL3NyYy9saW51eC0y LjQuMjAvaW5jbHVkZS9saW51eC91ZnNfZnMuaCIgMQojIDIzNyAiL3Vzci9zcmMvbGludXgtMi40 LjIwL2luY2x1ZGUvbGludXgvdWZzX2ZzLmgiCnN0cnVjdCB1ZnNfdGltZXZhbCB7CiAgICAgICAg X19zMzIgdHZfc2VjOwogICAgICAgIF9fczMyIHR2X3VzZWM7Cn07CgpzdHJ1Y3QgdWZzX2Rpcl9l bnRyeSB7CiAgICAgICAgX191MzIgZF9pbm87CiAgICAgICAgX191MTYgZF9yZWNsZW47CiAgICAg ICAgdW5pb24gewogICAgICAgICAgICAgICAgX191MTYgZF9uYW1sZW47CiAgICAgICAgICAgICAg ICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgICAgICAgICBfX3U4IGRfdHlwZTsKICAgICAgICAg ICAgICAgICAgICAgICAgX191OCBkX25hbWxlbjsKICAgICAgICAgICAgICAgIH0gZF80NDsKICAg ICAgICB9IGRfdTsKICAgICAgICBfX3U4IGRfbmFtZVsyNTUgKyAxXTsKfTsKCnN0cnVjdCB1ZnNf Y3N1bSB7CiAgICAgICAgX191MzIgY3NfbmRpcjsKICAgICAgICBfX3UzMiBjc19uYmZyZWU7CiAg ICAgICAgX191MzIgY3NfbmlmcmVlOwogICAgICAgIF9fdTMyIGNzX25mZnJlZTsKfTsKCgoKCnN0 cnVjdCB1ZnNfc3VwZXJfYmxvY2sgewogICAgICAgIF9fdTMyIGZzX2xpbms7CiAgICAgICAgX191 MzIgZnNfcmxpbms7CiAgICAgICAgX191MzIgZnNfc2Jsa25vOwogICAgICAgIF9fdTMyIGZzX2Ni bGtubzsKICAgICAgICBfX3UzMiBmc19pYmxrbm87CiAgICAgICAgX191MzIgZnNfZGJsa25vOwog ICAgICAgIF9fdTMyIGZzX2Nnb2Zmc2V0OwogICAgICAgIF9fdTMyIGZzX2NnbWFzazsKICAgICAg ICBfX3UzMiBmc190aW1lOwogICAgICAgIF9fdTMyIGZzX3NpemU7CiAgICAgICAgX191MzIgZnNf ZHNpemU7CiAgICAgICAgX191MzIgZnNfbmNnOwogICAgICAgIF9fdTMyIGZzX2JzaXplOwogICAg ICAgIF9fdTMyIGZzX2ZzaXplOwogICAgICAgIF9fdTMyIGZzX2ZyYWc7CgogICAgICAgIF9fdTMy IGZzX21pbmZyZWU7CiAgICAgICAgX191MzIgZnNfcm90ZGVsYXk7CiAgICAgICAgX191MzIgZnNf cnBzOwoKICAgICAgICBfX3UzMiBmc19ibWFzazsKICAgICAgICBfX3UzMiBmc19mbWFzazsKICAg ICAgICBfX3UzMiBmc19ic2hpZnQ7CiAgICAgICAgX191MzIgZnNfZnNoaWZ0OwoKICAgICAgICBf X3UzMiBmc19tYXhjb250aWc7CiAgICAgICAgX191MzIgZnNfbWF4YnBnOwoKICAgICAgICBfX3Uz MiBmc19mcmFnc2hpZnQ7CiAgICAgICAgX191MzIgZnNfZnNidG9kYjsKICAgICAgICBfX3UzMiBm c19zYnNpemU7CiAgICAgICAgX191MzIgZnNfY3NtYXNrOwogICAgICAgIF9fdTMyIGZzX2Nzc2hp ZnQ7CiAgICAgICAgX191MzIgZnNfbmluZGlyOwogICAgICAgIF9fdTMyIGZzX2lub3BiOwogICAg ICAgIF9fdTMyIGZzX25zcGY7CgogICAgICAgIF9fdTMyIGZzX29wdGltOwoKICAgICAgICB1bmlv biB7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgICAgICAgICBfX3Uz MiBmc19ucHNlY3Q7CiAgICAgICAgICAgICAgICB9IGZzX3N1bjsKICAgICAgICAgICAgICAgIHN0 cnVjdCB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fczMyIGZzX3N0YXRlOwogICAgICAgICAg ICAgICAgfSBmc19zdW54ODY7CiAgICAgICAgfSBmc191MTsKICAgICAgICBfX3UzMiBmc19pbnRl cmxlYXZlOwogICAgICAgIF9fdTMyIGZzX3RyYWNrc2tldzsKCgoKCiAgICAgICAgX191MzIgZnNf aWRbMl07CgogICAgICAgIF9fdTMyIGZzX2NzYWRkcjsKICAgICAgICBfX3UzMiBmc19jc3NpemU7 CiAgICAgICAgX191MzIgZnNfY2dzaXplOwoKICAgICAgICBfX3UzMiBmc19udHJhazsKICAgICAg ICBfX3UzMiBmc19uc2VjdDsKICAgICAgICBfX3UzMiBmc19zcGM7CgogICAgICAgIF9fdTMyIGZz X25jeWw7CgogICAgICAgIF9fdTMyIGZzX2NwZzsKICAgICAgICBfX3UzMiBmc19pcGc7CiAgICAg ICAgX191MzIgZnNfZnBnOwoKICAgICAgICBzdHJ1Y3QgdWZzX2NzdW0gZnNfY3N0b3RhbDsKCiAg ICAgICAgX19zOCBmc19mbW9kOwogICAgICAgIF9fczggZnNfY2xlYW47CiAgICAgICAgX19zOCBm c19yb25seTsKICAgICAgICBfX3M4IGZzX2ZsYWdzOwogICAgICAgIF9fczggZnNfZnNtbnRbNTEy XTsKCiAgICAgICAgX191MzIgZnNfY2dyb3RvcjsKICAgICAgICBfX3UzMiBmc19jc3BbMzFdOwog ICAgICAgIF9fdTMyIGZzX21heGNsdXN0ZXI7CiAgICAgICAgX191MzIgZnNfY3BjOwogICAgICAg IF9fdTE2IGZzX29wb3N0YmxbMTZdWzhdOwogICAgICAgIHVuaW9uIHsKICAgICAgICAgICAgICAg IHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fczMyIGZzX3NwYXJlY29uWzUzXTsK ICAgICAgICAgICAgICAgICAgICAgICAgX19zMzIgZnNfcmVjbGFpbTsKICAgICAgICAgICAgICAg ICAgICAgICAgX19zMzIgZnNfc3BhcmVjb24yWzFdOwogICAgICAgICAgICAgICAgICAgICAgICBf X3MzMiBmc19zdGF0ZTsKICAgICAgICAgICAgICAgICAgICAgICAgX191MzIgZnNfcWJtYXNrWzJd OwogICAgICAgICAgICAgICAgICAgICAgICBfX3UzMiBmc19xZm1hc2tbMl07CiAgICAgICAgICAg ICAgICB9IGZzX3N1bjsKICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAg ICAgICAgIF9fczMyIGZzX3NwYXJlY29uWzUzXTsKICAgICAgICAgICAgICAgICAgICAgICAgX19z MzIgZnNfcmVjbGFpbTsKICAgICAgICAgICAgICAgICAgICAgICAgX19zMzIgZnNfc3BhcmVjb24y WzFdOwogICAgICAgICAgICAgICAgICAgICAgICBfX3UzMiBmc19ucHNlY3Q7CiAgICAgICAgICAg ICAgICAgICAgICAgIF9fdTMyIGZzX3FibWFza1syXTsKICAgICAgICAgICAgICAgICAgICAgICAg X191MzIgZnNfcWZtYXNrWzJdOwogICAgICAgICAgICAgICAgfSBmc19zdW54ODY7CiAgICAgICAg ICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgICAgICAgICBfX3MzMiBmc19zcGFyZWNv bls1MF07CiAgICAgICAgICAgICAgICAgICAgICAgIF9fczMyIGZzX2NvbnRpZ3N1bXNpemU7CiAg ICAgICAgICAgICAgICAgICAgICAgIF9fczMyIGZzX21heHN5bWxpbmtsZW47CiAgICAgICAgICAg ICAgICAgICAgICAgIF9fczMyIGZzX2lub2RlZm10OwogICAgICAgICAgICAgICAgICAgICAgICBf X3UzMiBmc19tYXhmaWxlc2l6ZVsyXTsKICAgICAgICAgICAgICAgICAgICAgICAgX191MzIgZnNf cWJtYXNrWzJdOwogICAgICAgICAgICAgICAgICAgICAgICBfX3UzMiBmc19xZm1hc2tbMl07CiAg ICAgICAgICAgICAgICAgICAgICAgIF9fczMyIGZzX3N0YXRlOwogICAgICAgICAgICAgICAgfSBm c180NDsKICAgICAgICB9IGZzX3UyOwogICAgICAgIF9fczMyIGZzX3Bvc3RibGZvcm1hdDsKICAg ICAgICBfX3MzMiBmc19ucnBvczsKICAgICAgICBfX3MzMiBmc19wb3N0YmxvZmY7CiAgICAgICAg X19zMzIgZnNfcm90YmxvZmY7CiAgICAgICAgX19zMzIgZnNfbWFnaWM7CiAgICAgICAgX191OCBm c19zcGFjZVsxXTsKfTsKIyA0MTUgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4 L3Vmc19mcy5oIgpzdHJ1Y3QgdWZzX2N5bGluZGVyX2dyb3VwIHsKICAgICAgICBfX3UzMiBjZ19s aW5rOwogICAgICAgIF9fdTMyIGNnX21hZ2ljOwogICAgICAgIF9fdTMyIGNnX3RpbWU7CiAgICAg ICAgX191MzIgY2dfY2d4OwogICAgICAgIF9fdTE2IGNnX25jeWw7CiAgICAgICAgX191MTYgY2df bmlibGs7CiAgICAgICAgX191MzIgY2dfbmRibGs7CiAgICAgICAgc3RydWN0IHVmc19jc3VtIGNn X2NzOwogICAgICAgIF9fdTMyIGNnX3JvdG9yOwogICAgICAgIF9fdTMyIGNnX2Zyb3RvcjsKICAg ICAgICBfX3UzMiBjZ19pcm90b3I7CiAgICAgICAgX191MzIgY2dfZnJzdW1bKDgxOTIgLyAxMDI0 KV07CiAgICAgICAgX191MzIgY2dfYnRvdG9mZjsKICAgICAgICBfX3UzMiBjZ19ib2ZmOwogICAg ICAgIF9fdTMyIGNnX2l1c2Vkb2ZmOwogICAgICAgIF9fdTMyIGNnX2ZyZWVvZmY7CiAgICAgICAg X191MzIgY2dfbmV4dGZyZWVvZmY7CiAgICAgICAgdW5pb24gewogICAgICAgICAgICAgICAgc3Ry dWN0IHsKICAgICAgICAgICAgICAgICAgICAgICAgX191MzIgY2dfY2x1c3RlcnN1bW9mZjsKICAg ICAgICAgICAgICAgICAgICAgICAgX191MzIgY2dfY2x1c3Rlcm9mZjsKICAgICAgICAgICAgICAg ICAgICAgICAgX191MzIgY2dfbmNsdXN0ZXJibGtzOwogICAgICAgICAgICAgICAgICAgICAgICBf X3UzMiBjZ19zcGFyZWNvblsxM107CiAgICAgICAgICAgICAgICB9IGNnXzQ0OwogICAgICAgICAg ICAgICAgX191MzIgY2dfc3BhcmVjb25bMTZdOwogICAgICAgIH0gY2dfdTsKICAgICAgICBfX3U4 IGNnX3NwYWNlWzFdOwoKfTsKCgoKCnN0cnVjdCB1ZnNfaW5vZGUgewogICAgICAgIF9fdTE2IHVp X21vZGU7CiAgICAgICAgX191MTYgdWlfbmxpbms7CiAgICAgICAgdW5pb24gewogICAgICAgICAg ICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICAgICAgICAgX191MTYgdWlfc3VpZDsKICAg ICAgICAgICAgICAgICAgICAgICAgX191MTYgdWlfc2dpZDsKICAgICAgICAgICAgICAgIH0gb2xk aWRzOwogICAgICAgICAgICAgICAgX191MzIgdWlfaW51bWJlcjsKICAgICAgICAgICAgICAgIF9f dTMyIHVpX2F1dGhvcjsKICAgICAgICB9IHVpX3UxOwogICAgICAgIF9fdTY0IHVpX3NpemU7CiAg ICAgICAgc3RydWN0IHVmc190aW1ldmFsIHVpX2F0aW1lOwogICAgICAgIHN0cnVjdCB1ZnNfdGlt ZXZhbCB1aV9tdGltZTsKICAgICAgICBzdHJ1Y3QgdWZzX3RpbWV2YWwgdWlfY3RpbWU7CiAgICAg ICAgdW5pb24gewogICAgICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICAgICAg ICAgX191MzIgdWlfZGJbMTJdOwogICAgICAgICAgICAgICAgICAgICAgICBfX3UzMiB1aV9pYlsz XTsKICAgICAgICAgICAgICAgIH0gdWlfYWRkcjsKICAgICAgICAgICAgICAgIF9fdTggdWlfc3lt bGlua1s0KigxMiArMyldOwogICAgICAgIH0gdWlfdTI7CiAgICAgICAgX191MzIgdWlfZmxhZ3M7 CiAgICAgICAgX191MzIgdWlfYmxvY2tzOwogICAgICAgIF9fdTMyIHVpX2dlbjsKICAgICAgICB1 bmlvbiB7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgICAgICAgICBf X3UzMiB1aV9zaGFkb3c7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fdTMyIHVpX3VpZDsKICAg ICAgICAgICAgICAgICAgICAgICAgX191MzIgdWlfZ2lkOwogICAgICAgICAgICAgICAgICAgICAg ICBfX3UzMiB1aV9vZWZ0ZmxhZzsKICAgICAgICAgICAgICAgIH0gdWlfc3VuOwogICAgICAgICAg ICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICAgICAgICAgX191MzIgdWlfdWlkOwogICAg ICAgICAgICAgICAgICAgICAgICBfX3UzMiB1aV9naWQ7CiAgICAgICAgICAgICAgICAgICAgICAg IF9fczMyIHVpX3NwYXJlWzJdOwogICAgICAgICAgICAgICAgfSB1aV80NDsKICAgICAgICAgICAg ICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fdTMyIHVpX3VpZDsKICAgICAg ICAgICAgICAgICAgICAgICAgX191MzIgdWlfZ2lkOwogICAgICAgICAgICAgICAgICAgICAgICBf X3UxNiB1aV9tb2RlaDsKICAgICAgICAgICAgICAgICAgICAgICAgX191MTYgdWlfc3BhcmU7CiAg ICAgICAgICAgICAgICAgICAgICAgIF9fdTMyIHVpX3RyYW5zOwogICAgICAgICAgICAgICAgfSB1 aV9odXJkOwogICAgICAgIH0gdWlfdTM7Cn07CiMgNTE0ICIvdXNyL3NyYy9saW51eC0yLjQuMjAv aW5jbHVkZS9saW51eC91ZnNfZnMuaCIKZXh0ZXJuIHZvaWQgdWZzX2ZyZWVfZnJhZ21lbnRzIChz dHJ1Y3QgaW5vZGUgKiwgdW5zaWduZWQsIHVuc2lnbmVkKTsKZXh0ZXJuIHZvaWQgdWZzX2ZyZWVf YmxvY2tzIChzdHJ1Y3QgaW5vZGUgKiwgdW5zaWduZWQsIHVuc2lnbmVkKTsKZXh0ZXJuIHVuc2ln bmVkIHVmc19uZXdfZnJhZ21lbnRzIChzdHJ1Y3QgaW5vZGUgKiwgdTMyICosIHVuc2lnbmVkLCB1 bnNpZ25lZCwgdW5zaWduZWQsIGludCAqKTsKCgpleHRlcm4gc3RydWN0IHVmc19jZ19wcml2YXRl X2luZm8gKiB1ZnNfbG9hZF9jeWxpbmRlciAoc3RydWN0IHN1cGVyX2Jsb2NrICosIHVuc2lnbmVk KTsKZXh0ZXJuIHZvaWQgdWZzX3B1dF9jeWxpbmRlciAoc3RydWN0IHN1cGVyX2Jsb2NrICosIHVu c2lnbmVkKTsKCgpleHRlcm4gc3RydWN0IGlub2RlX29wZXJhdGlvbnMgdWZzX2Rpcl9pbm9kZV9v cGVyYXRpb25zOwpleHRlcm4gaW50IHVmc19jaGVja19kaXJfZW50cnkgKGNvbnN0IGNoYXIgKiwg c3RydWN0IGlub2RlICosIHN0cnVjdCB1ZnNfZGlyX2VudHJ5ICosIHN0cnVjdCBidWZmZXJfaGVh ZCAqLCB1bnNpZ25lZCBsb25nKTsKZXh0ZXJuIGludCB1ZnNfYWRkX2xpbmsgKHN0cnVjdCBkZW50 cnkgKiwgc3RydWN0IGlub2RlICopOwpleHRlcm4gaW5vX3QgdWZzX2lub2RlX2J5X25hbWUoc3Ry dWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKik7CmV4dGVybiBpbnQgdWZzX21ha2VfZW1wdHko c3RydWN0IGlub2RlICosIHN0cnVjdCBpbm9kZSAqKTsKZXh0ZXJuIHN0cnVjdCB1ZnNfZGlyX2Vu dHJ5ICogdWZzX2ZpbmRfZW50cnkgKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGJ1ZmZlcl9oZWFk ICoqKTsKZXh0ZXJuIGludCB1ZnNfZGVsZXRlX2VudHJ5IChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0 IHVmc19kaXJfZW50cnkgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICopOwpleHRlcm4gaW50IHVmc19l bXB0eV9kaXIgKHN0cnVjdCBpbm9kZSAqKTsKZXh0ZXJuIHN0cnVjdCB1ZnNfZGlyX2VudHJ5ICog dWZzX2RvdGRvdCAoc3RydWN0IGlub2RlICosIHN0cnVjdCBidWZmZXJfaGVhZCAqKik7CmV4dGVy biB2b2lkIHVmc19zZXRfbGluayhzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHVmc19kaXJfZW50cnkg Kiwgc3RydWN0IGJ1ZmZlcl9oZWFkICosIHN0cnVjdCBpbm9kZSAqKTsKCgpleHRlcm4gc3RydWN0 IGlub2RlX29wZXJhdGlvbnMgdWZzX2ZpbGVfaW5vZGVfb3BlcmF0aW9uczsKZXh0ZXJuIHN0cnVj dCBmaWxlX29wZXJhdGlvbnMgdWZzX2ZpbGVfb3BlcmF0aW9uczsKCmV4dGVybiBzdHJ1Y3QgYWRk cmVzc19zcGFjZV9vcGVyYXRpb25zIHVmc19hb3BzOwoKCmV4dGVybiB2b2lkIHVmc19mcmVlX2lu b2RlIChzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKZXh0ZXJuIHN0cnVjdCBpbm9kZSAqIHVmc19uZXdf aW5vZGUgKGNvbnN0IHN0cnVjdCBpbm9kZSAqLCBpbnQpOwoKCmV4dGVybiBpbnQgdWZzX2ZyYWdf bWFwIChzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKZXh0ZXJuIHZvaWQgdWZzX3JlYWRfaW5vZGUgKHN0 cnVjdCBpbm9kZSAqKTsKZXh0ZXJuIHZvaWQgdWZzX3B1dF9pbm9kZSAoc3RydWN0IGlub2RlICop OwpleHRlcm4gdm9pZCB1ZnNfd3JpdGVfaW5vZGUgKHN0cnVjdCBpbm9kZSAqLCBpbnQpOwpleHRl cm4gaW50IHVmc19zeW5jX2lub2RlIChzdHJ1Y3QgaW5vZGUgKik7CmV4dGVybiB2b2lkIHVmc19k ZWxldGVfaW5vZGUgKHN0cnVjdCBpbm9kZSAqKTsKZXh0ZXJuIHN0cnVjdCBidWZmZXJfaGVhZCAq IHVmc19nZXRmcmFnIChzdHJ1Y3QgaW5vZGUgKiwgdW5zaWduZWQsIGludCwgaW50ICopOwpleHRl cm4gc3RydWN0IGJ1ZmZlcl9oZWFkICogdWZzX2JyZWFkIChzdHJ1Y3QgaW5vZGUgKiwgdW5zaWdu ZWQsIGludCwgaW50ICopOwoKCmV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVmc19kaXJf b3BlcmF0aW9uczsKCgpleHRlcm4gc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgdWZzX2ZzX3R5cGU7 CmV4dGVybiB2b2lkIHVmc193YXJuaW5nIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgY29uc3QgY2hh ciAqLCBjb25zdCBjaGFyICosIC4uLikgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAz LCA0KSkpOwpleHRlcm4gdm9pZCB1ZnNfZXJyb3IgKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBjb25z dCBjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKSBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmlu dGYsIDMsIDQpKSk7CmV4dGVybiB2b2lkIHVmc19wYW5pYyAoc3RydWN0IHN1cGVyX2Jsb2NrICos IGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCAuLi4pIF9fYXR0cmlidXRlX18gKChmb3JtYXQg KHByaW50ZiwgMywgNCkpKTsKZXh0ZXJuIHZvaWQgdWZzX3dyaXRlX3N1cGVyIChzdHJ1Y3Qgc3Vw ZXJfYmxvY2sgKik7CgoKZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHVmc19mYXN0X3N5 bWxpbmtfaW5vZGVfb3BlcmF0aW9uczsKCgpleHRlcm4gdm9pZCB1ZnNfdHJ1bmNhdGUgKHN0cnVj dCBpbm9kZSAqKTsKIyAxOCAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvdWZz X2ZzX3NiLmgiIDIKCgoKCgpzdHJ1Y3QgdWZzX2J1ZmZlcl9oZWFkIHsKICAgICAgICB1bnNpZ25l ZCBmcmFnbWVudDsKICAgICAgICB1bnNpZ25lZCBjb3VudDsKICAgICAgICBzdHJ1Y3QgYnVmZmVy X2hlYWQgKiBiaFsoODE5MiAvIDEwMjQpXTsKfTsKCnN0cnVjdCB1ZnNfY2dfcHJpdmF0ZV9pbmZv IHsKICAgICAgICBzdHJ1Y3QgdWZzX2N5bGluZGVyX2dyb3VwIHVjZzsKICAgICAgICBfX3UzMiBj X2NneDsKICAgICAgICBfX3UxNiBjX25jeWw7CiAgICAgICAgX191MTYgY19uaWJsazsKICAgICAg ICBfX3UzMiBjX25kYmxrOwogICAgICAgIF9fdTMyIGNfcm90b3I7CiAgICAgICAgX191MzIgY19m cm90b3I7CiAgICAgICAgX191MzIgY19pcm90b3I7CiAgICAgICAgX191MzIgY19idG90b2ZmOwog ICAgICAgIF9fdTMyIGNfYm9mZjsKICAgICAgICBfX3UzMiBjX2l1c2Vkb2ZmOwogICAgICAgIF9f dTMyIGNfZnJlZW9mZjsKICAgICAgICBfX3UzMiBjX25leHRmcmVlb2ZmOwogICAgICAgIF9fdTMy IGNfY2x1c3RlcnN1bW9mZjsKICAgICAgICBfX3UzMiBjX2NsdXN0ZXJvZmY7CiAgICAgICAgX191 MzIgY19uY2x1c3RlcmJsa3M7Cn07CgpzdHJ1Y3QgdWZzX3NiX3ByaXZhdGVfaW5mbyB7CiAgICAg ICAgc3RydWN0IHVmc19idWZmZXJfaGVhZCBzX3ViaDsKICAgICAgICBfX3UzMiBzX3NibGtubzsK ICAgICAgICBfX3UzMiBzX2NibGtubzsKICAgICAgICBfX3UzMiBzX2libGtubzsKICAgICAgICBf X3UzMiBzX2RibGtubzsKICAgICAgICBfX3UzMiBzX2Nnb2Zmc2V0OwogICAgICAgIF9fdTMyIHNf Y2dtYXNrOwogICAgICAgIF9fdTMyIHNfc2l6ZTsKICAgICAgICBfX3UzMiBzX2RzaXplOwogICAg ICAgIF9fdTMyIHNfbmNnOwogICAgICAgIF9fdTMyIHNfYnNpemU7CiAgICAgICAgX191MzIgc19m c2l6ZTsKICAgICAgICBfX3UzMiBzX2ZwYjsKICAgICAgICBfX3UzMiBzX21pbmZyZWU7CiAgICAg ICAgX191MzIgc19ibWFzazsKICAgICAgICBfX3UzMiBzX2ZtYXNrOwogICAgICAgIF9fdTMyIHNf YnNoaWZ0OwogICAgICAgIF9fdTMyIHNfZnNoaWZ0OwogICAgICAgIF9fdTMyIHNfZnBic2hpZnQ7 CiAgICAgICAgX191MzIgc19mc2J0b2RiOwogICAgICAgIF9fdTMyIHNfc2JzaXplOwogICAgICAg IF9fdTMyIHNfY3NtYXNrOwogICAgICAgIF9fdTMyIHNfY3NzaGlmdDsKICAgICAgICBfX3UzMiBz X25pbmRpcjsKICAgICAgICBfX3UzMiBzX2lub3BiOwogICAgICAgIF9fdTMyIHNfbnNwZjsKICAg ICAgICBfX3UzMiBzX25wc2VjdDsKICAgICAgICBfX3UzMiBzX2ludGVybGVhdmU7CiAgICAgICAg X191MzIgc190cmFja3NrZXc7CiAgICAgICAgX191MzIgc19jc2FkZHI7CiAgICAgICAgX191MzIg c19jc3NpemU7CiAgICAgICAgX191MzIgc19jZ3NpemU7CiAgICAgICAgX191MzIgc19udHJhazsK ICAgICAgICBfX3UzMiBzX25zZWN0OwogICAgICAgIF9fdTMyIHNfc3BjOwogICAgICAgIF9fdTMy IHNfaXBnOwogICAgICAgIF9fdTMyIHNfZnBnOwogICAgICAgIF9fdTMyIHNfY3BjOwogICAgICAg IF9fczMyIHNfY29udGlnc3Vtc2l6ZTsKICAgICAgICBfX3M2NCBzX3FibWFzazsKICAgICAgICBf X3M2NCBzX3FmbWFzazsKICAgICAgICBfX3MzMiBzX3Bvc3RibGZvcm1hdDsKICAgICAgICBfX3Mz MiBzX25ycG9zOwogICAgICAgIF9fczMyIHNfcG9zdGJsb2ZmOwogICAgICAgIF9fczMyIHNfcm90 YmxvZmY7CgogICAgICAgIF9fdTMyIHNfZnBibWFzazsKICAgICAgICBfX3UzMiBzX2FwYjsKICAg ICAgICBfX3UzMiBzXzJhcGI7CiAgICAgICAgX191MzIgc18zYXBiOwogICAgICAgIF9fdTMyIHNf YXBibWFzazsKICAgICAgICBfX3UzMiBzX2FwYnNoaWZ0OwogICAgICAgIF9fdTMyIHNfMmFwYnNo aWZ0OwogICAgICAgIF9fdTMyIHNfM2FwYnNoaWZ0OwogICAgICAgIF9fdTMyIHNfbnNwZnNoaWZ0 OwogICAgICAgIF9fdTMyIHNfbnNwYjsKICAgICAgICBfX3UzMiBzX2lub3BmOwogICAgICAgIF9f dTMyIHNfc2JiYXNlOwogICAgICAgIF9fdTMyIHNfYnBmOwogICAgICAgIF9fdTMyIHNfYnBmc2hp ZnQ7CiAgICAgICAgX191MzIgc19icGZtYXNrOwoKICAgICAgICBfX3UzMiBzX21heHN5bWxpbmts ZW47Cn07CgoKCgoKc3RydWN0IHVmc19zYl9pbmZvIHsKICAgICAgICBzdHJ1Y3QgdWZzX3NiX3By aXZhdGVfaW5mbyAqIHNfdXNwaTsKICAgICAgICBzdHJ1Y3QgdWZzX2NzdW0gKiBzX2NzcFszMV07 CiAgICAgICAgdW5zaWduZWQgc19ieXRlc2V4OwogICAgICAgIHVuc2lnbmVkIHNfZmxhZ3M7CiAg ICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqIHNfdWNnOwogICAgICAgIHN0cnVjdCB1ZnNfY2df cHJpdmF0ZV9pbmZvICogc191Y3BpWzhdOwogICAgICAgIHVuc2lnbmVkIHNfY2dub1s4XTsKICAg ICAgICB1bnNpZ25lZCBzaG9ydCBzX2NnX2xvYWRlZDsKICAgICAgICB1bnNpZ25lZCBzX21vdW50 X29wdDsKfTsKCgoKCgoKCnN0cnVjdCB1ZnNfc3VwZXJfYmxvY2tfZmlyc3QgewogICAgICAgIF9f dTMyIGZzX2xpbms7CiAgICAgICAgX191MzIgZnNfcmxpbms7CiAgICAgICAgX191MzIgZnNfc2Js a25vOwogICAgICAgIF9fdTMyIGZzX2NibGtubzsKICAgICAgICBfX3UzMiBmc19pYmxrbm87CiAg ICAgICAgX191MzIgZnNfZGJsa25vOwogICAgICAgIF9fdTMyIGZzX2Nnb2Zmc2V0OwogICAgICAg IF9fdTMyIGZzX2NnbWFzazsKICAgICAgICBfX3UzMiBmc190aW1lOwogICAgICAgIF9fdTMyIGZz X3NpemU7CiAgICAgICAgX191MzIgZnNfZHNpemU7CiAgICAgICAgX191MzIgZnNfbmNnOwogICAg ICAgIF9fdTMyIGZzX2JzaXplOwogICAgICAgIF9fdTMyIGZzX2ZzaXplOwogICAgICAgIF9fdTMy IGZzX2ZyYWc7CiAgICAgICAgX191MzIgZnNfbWluZnJlZTsKICAgICAgICBfX3UzMiBmc19yb3Rk ZWxheTsKICAgICAgICBfX3UzMiBmc19ycHM7CiAgICAgICAgX191MzIgZnNfYm1hc2s7CiAgICAg ICAgX191MzIgZnNfZm1hc2s7CiAgICAgICAgX191MzIgZnNfYnNoaWZ0OwogICAgICAgIF9fdTMy IGZzX2ZzaGlmdDsKICAgICAgICBfX3UzMiBmc19tYXhjb250aWc7CiAgICAgICAgX191MzIgZnNf bWF4YnBnOwogICAgICAgIF9fdTMyIGZzX2ZyYWdzaGlmdDsKICAgICAgICBfX3UzMiBmc19mc2J0 b2RiOwogICAgICAgIF9fdTMyIGZzX3Nic2l6ZTsKICAgICAgICBfX3UzMiBmc19jc21hc2s7CiAg ICAgICAgX191MzIgZnNfY3NzaGlmdDsKICAgICAgICBfX3UzMiBmc19uaW5kaXI7CiAgICAgICAg X191MzIgZnNfaW5vcGI7CiAgICAgICAgX191MzIgZnNfbnNwZjsKICAgICAgICBfX3UzMiBmc19v cHRpbTsKICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAg ICAgICAgICAgICAgICBfX3UzMiBmc19ucHNlY3Q7CiAgICAgICAgICAgICAgICB9IGZzX3N1bjsK ICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fczMyIGZz X3N0YXRlOwogICAgICAgICAgICAgICAgfSBmc19zdW54ODY7CiAgICAgICAgfSBmc191MTsKICAg ICAgICBfX3UzMiBmc19pbnRlcmxlYXZlOwogICAgICAgIF9fdTMyIGZzX3RyYWNrc2tldzsKICAg ICAgICBfX3UzMiBmc19pZFsyXTsKICAgICAgICBfX3UzMiBmc19jc2FkZHI7CiAgICAgICAgX191 MzIgZnNfY3NzaXplOwogICAgICAgIF9fdTMyIGZzX2Nnc2l6ZTsKICAgICAgICBfX3UzMiBmc19u dHJhazsKICAgICAgICBfX3UzMiBmc19uc2VjdDsKICAgICAgICBfX3UzMiBmc19zcGM7CiAgICAg ICAgX191MzIgZnNfbmN5bDsKICAgICAgICBfX3UzMiBmc19jcGc7CiAgICAgICAgX191MzIgZnNf aXBnOwogICAgICAgIF9fdTMyIGZzX2ZwZzsKICAgICAgICBzdHJ1Y3QgdWZzX2NzdW0gZnNfY3N0 b3RhbDsKICAgICAgICBfX3M4IGZzX2Ztb2Q7CiAgICAgICAgX19zOCBmc19jbGVhbjsKICAgICAg ICBfX3M4IGZzX3Jvbmx5OwogICAgICAgIF9fczggZnNfZmxhZ3M7CiAgICAgICAgX19zOCBmc19m c21udFs1MTIgLSAyMTJdOwoKfTsKCnN0cnVjdCB1ZnNfc3VwZXJfYmxvY2tfc2Vjb25kIHsKICAg ICAgICBfX3M4IGZzX2ZzbW50WzIxMl07CiAgICAgICAgX191MzIgZnNfY2dyb3RvcjsKICAgICAg ICBfX3UzMiBmc19jc3BbMzFdOwogICAgICAgIF9fdTMyIGZzX21heGNsdXN0ZXI7CiAgICAgICAg X191MzIgZnNfY3BjOwogICAgICAgIF9fdTE2IGZzX29wb3N0YmxbODJdOwp9OwoKc3RydWN0IHVm c19zdXBlcl9ibG9ja190aGlyZCB7CiAgICAgICAgX191MTYgZnNfb3Bvc3RibFs0Nl07CiAgICAg ICAgdW5pb24gewogICAgICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICAgICAg ICAgX19zMzIgZnNfc3BhcmVjb25bNTNdOwogICAgICAgICAgICAgICAgICAgICAgICBfX3MzMiBm c19yZWNsYWltOwogICAgICAgICAgICAgICAgICAgICAgICBfX3MzMiBmc19zcGFyZWNvbjJbMV07 CiAgICAgICAgICAgICAgICAgICAgICAgIF9fczMyIGZzX3N0YXRlOwogICAgICAgICAgICAgICAg ICAgICAgICBfX3UzMiBmc19xYm1hc2tbMl07CiAgICAgICAgICAgICAgICAgICAgICAgIF9fdTMy IGZzX3FmbWFza1syXTsKICAgICAgICAgICAgICAgIH0gZnNfc3VuOwogICAgICAgICAgICAgICAg c3RydWN0IHsKICAgICAgICAgICAgICAgICAgICAgICAgX19zMzIgZnNfc3BhcmVjb25bNTNdOwog ICAgICAgICAgICAgICAgICAgICAgICBfX3MzMiBmc19yZWNsYWltOwogICAgICAgICAgICAgICAg ICAgICAgICBfX3MzMiBmc19zcGFyZWNvbjJbMV07CiAgICAgICAgICAgICAgICAgICAgICAgIF9f dTMyIGZzX25wc2VjdDsKICAgICAgICAgICAgICAgICAgICAgICAgX191MzIgZnNfcWJtYXNrWzJd OwogICAgICAgICAgICAgICAgICAgICAgICBfX3UzMiBmc19xZm1hc2tbMl07CiAgICAgICAgICAg ICAgICB9IGZzX3N1bng4NjsKICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAg ICAgICAgICAgIF9fczMyIGZzX3NwYXJlY29uWzUwXTsKICAgICAgICAgICAgICAgICAgICAgICAg X19zMzIgZnNfY29udGlnc3Vtc2l6ZTsKICAgICAgICAgICAgICAgICAgICAgICAgX19zMzIgZnNf bWF4c3ltbGlua2xlbjsKICAgICAgICAgICAgICAgICAgICAgICAgX19zMzIgZnNfaW5vZGVmbXQ7 CiAgICAgICAgICAgICAgICAgICAgICAgIF9fdTMyIGZzX21heGZpbGVzaXplWzJdOwogICAgICAg ICAgICAgICAgICAgICAgICBfX3UzMiBmc19xYm1hc2tbMl07CiAgICAgICAgICAgICAgICAgICAg ICAgIF9fdTMyIGZzX3FmbWFza1syXTsKICAgICAgICAgICAgICAgICAgICAgICAgX19zMzIgZnNf c3RhdGU7CiAgICAgICAgICAgICAgICB9IGZzXzQ0OwogICAgICAgIH0gZnNfdTI7CiAgICAgICAg X19zMzIgZnNfcG9zdGJsZm9ybWF0OwogICAgICAgIF9fczMyIGZzX25ycG9zOwogICAgICAgIF9f czMyIGZzX3Bvc3RibG9mZjsKICAgICAgICBfX3MzMiBmc19yb3RibG9mZjsKICAgICAgICBfX3Mz MiBmc19tYWdpYzsKICAgICAgICBfX3U4IGZzX3NwYWNlWzFdOwp9OwojIDY5OCAiL3Vzci9zcmMv bGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIu NC4yMC9pbmNsdWRlL2xpbnV4L2Vmc19mc19zYi5oIiAxCiMgMjUgIi91c3Ivc3JjL2xpbnV4LTIu NC4yMC9pbmNsdWRlL2xpbnV4L2Vmc19mc19zYi5oIgpzdHJ1Y3QgZWZzX3N1cGVyIHsKICAgICAg ICBpbnQzMl90IGZzX3NpemU7CiAgICAgICAgaW50MzJfdCBmc19maXJzdGNnOwogICAgICAgIGlu dDMyX3QgZnNfY2dmc2l6ZTsKICAgICAgICBzaG9ydCBmc19jZ2lzaXplOwogICAgICAgIHNob3J0 IGZzX3NlY3RvcnM7CiAgICAgICAgc2hvcnQgZnNfaGVhZHM7CiAgICAgICAgc2hvcnQgZnNfbmNn OwogICAgICAgIHNob3J0IGZzX2RpcnR5OwogICAgICAgIGludDMyX3QgZnNfdGltZTsKICAgICAg ICBpbnQzMl90IGZzX21hZ2ljOwogICAgICAgIGNoYXIgZnNfZm5hbWVbNl07CiAgICAgICAgY2hh ciBmc19mcGFja1s2XTsKICAgICAgICBpbnQzMl90IGZzX2Jtc2l6ZTsKICAgICAgICBpbnQzMl90 IGZzX3RmcmVlOwogICAgICAgIGludDMyX3QgZnNfdGlub2RlOwogICAgICAgIGludDMyX3QgZnNf Ym1ibG9jazsKICAgICAgICBpbnQzMl90IGZzX3JlcGxzYjsKICAgICAgICBpbnQzMl90IGZzX2xh c3RpYWxsb2M7CiAgICAgICAgY2hhciBmc19zcGFyZVsyMF07CiAgICAgICAgaW50MzJfdCBmc19j aGVja3N1bTsKfTsKCgpzdHJ1Y3QgZWZzX3NiX2luZm8gewogICAgICAgIGludDMyX3QgZnNfbWFn aWM7CiAgICAgICAgaW50MzJfdCBmc19zdGFydDsKICAgICAgICBpbnQzMl90IGZpcnN0X2Jsb2Nr OwogICAgICAgIGludDMyX3QgdG90YWxfYmxvY2tzOwogICAgICAgIGludDMyX3QgZ3JvdXBfc2l6 ZTsKICAgICAgICBpbnQzMl90IGRhdGFfZnJlZTsKICAgICAgICBpbnQzMl90IGlub2RlX2ZyZWU7 CiAgICAgICAgc2hvcnQgaW5vZGVfYmxvY2tzOwogICAgICAgIHNob3J0IHRvdGFsX2dyb3VwczsK fTsKIyA2OTkgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAx ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9yb21mc19mc19zYi5oIiAxCgoK CgoKc3RydWN0IHJvbWZzX3NiX2luZm8gewogICAgICAgIHVuc2lnbmVkIGxvbmcgc19tYXhzaXpl Owp9OwojIDcwMCAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvZnMuaCIgMgoj IDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L3NtYl9mc19zYi5oIiAxCiMg MTUgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L3NtYl9mc19zYi5oIgojIDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L3NtYi5oIiAxCiMgMTQgIi91c3Iv c3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L3NtYi5oIgplbnVtIHNtYl9wcm90b2NvbCB7 CiAgICAgICAgU01CX1BST1RPQ09MX05PTkUsCiAgICAgICAgU01CX1BST1RPQ09MX0NPUkUsCiAg ICAgICAgU01CX1BST1RPQ09MX0NPUkVQTFVTLAogICAgICAgIFNNQl9QUk9UT0NPTF9MQU5NQU4x LAogICAgICAgIFNNQl9QUk9UT0NPTF9MQU5NQU4yLAogICAgICAgIFNNQl9QUk9UT0NPTF9OVDEK fTsKCmVudW0gc21iX2Nhc2VfaG5kbCB7CiAgICAgICAgU01CX0NBU0VfREVGQVVMVCwKICAgICAg ICBTTUJfQ0FTRV9MT1dFUiwKICAgICAgICBTTUJfQ0FTRV9VUFBFUgp9OwoKc3RydWN0IHNtYl9k c2thdHRyIHsKICAgICAgICBfX3UxNiB0b3RhbDsKICAgICAgICBfX3UxNiBhbGxvY2Jsb2NrczsK ICAgICAgICBfX3UxNiBibG9ja3NpemU7CiAgICAgICAgX191MTYgZnJlZTsKfTsKCnN0cnVjdCBz bWJfY29ubl9vcHQgewoKCiAgICAgICAgdW5zaWduZWQgaW50IGZkOwoKICAgICAgICBlbnVtIHNt Yl9wcm90b2NvbCBwcm90b2NvbDsKICAgICAgICBlbnVtIHNtYl9jYXNlX2huZGwgY2FzZV9oYW5k bGluZzsKCgoKICAgICAgICBfX3UzMiBtYXhfeG1pdDsKICAgICAgICBfX3UxNiBzZXJ2ZXJfdWlk OwogICAgICAgIF9fdTE2IHRpZDsKCgogICAgICAgIF9fdTE2IHNlY21vZGU7CiAgICAgICAgX191 MTYgbWF4bXV4OwogICAgICAgIF9fdTE2IG1heHZjczsKICAgICAgICBfX3UxNiByYXdtb2RlOwog ICAgICAgIF9fdTMyIHNlc3NrZXk7CgoKICAgICAgICBfX3UzMiBtYXhyYXc7CiAgICAgICAgX191 MzIgY2FwYWJpbGl0aWVzOwogICAgICAgIF9fczE2IHNlcnZlcnpvbmU7Cn07CgoKCgpzdHJ1Y3Qg c21iX25sc19jb2RlcGFnZSB7CiAgICAgICAgY2hhciBsb2NhbF9uYW1lWzIwXTsKICAgICAgICBj aGFyIHJlbW90ZV9uYW1lWzIwXTsKfTsKIyA3OCAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1 ZGUvbGludXgvc21iLmgiCnN0cnVjdCBzbWJfZmF0dHIgewoKICAgICAgICBfX3UxNiBhdHRyOwoK ICAgICAgICB1bnNpZ25lZCBsb25nIGZfaW5vOwogICAgICAgIHVtb2RlX3QgZl9tb2RlOwogICAg ICAgIG5saW5rX3QgZl9ubGluazsKICAgICAgICB1aWRfdCBmX3VpZDsKICAgICAgICBnaWRfdCBm X2dpZDsKICAgICAgICBrZGV2X3QgZl9yZGV2OwogICAgICAgIG9mZl90IGZfc2l6ZTsKICAgICAg ICB0aW1lX3QgZl9hdGltZTsKICAgICAgICB0aW1lX3QgZl9tdGltZTsKICAgICAgICB0aW1lX3Qg Zl9jdGltZTsKICAgICAgICB1bnNpZ25lZCBsb25nIGZfYmxrc2l6ZTsKICAgICAgICB1bnNpZ25l ZCBsb25nIGZfYmxvY2tzOwp9OwoKZW51bSBzbWJfY29ubl9zdGF0ZSB7CiAgICAgICAgQ09OTl9W QUxJRCwKICAgICAgICBDT05OX0lOVkFMSUQsCgogICAgICAgIENPTk5fUkVUUklFRCwKICAgICAg ICBDT05OX1JFVFJZSU5HCn07CiMgMTYgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xp bnV4L3NtYl9mc19zYi5oIiAyCgoKCgoKCgpzdHJ1Y3Qgc21iX3NiX2luZm8gewogICAgICAgIGVu dW0gc21iX2Nvbm5fc3RhdGUgc3RhdGU7CiAgICAgICAgc3RydWN0IGZpbGUgKiBzb2NrX2ZpbGU7 CgogICAgICAgIHN0cnVjdCBzbWJfbW91bnRfZGF0YV9rZXJuZWwgKm1udDsKICAgICAgICB1bnNp Z25lZCBjaGFyICp0ZW1wX2J1ZjsKCgoKCiAgICAgICAgdW5zaWduZWQgaW50IGdlbmVyYXRpb247 CiAgICAgICAgcGlkX3QgY29ubl9waWQ7CiAgICAgICAgc3RydWN0IHNtYl9jb25uX29wdCBvcHQ7 CgogICAgICAgIHN0cnVjdCBzZW1hcGhvcmUgc2VtOwogICAgICAgIHdhaXRfcXVldWVfaGVhZF90 IHdhaXQ7CgogICAgICAgIF9fdTMyIHBhY2tldF9zaXplOwogICAgICAgIHVuc2lnbmVkIGNoYXIg KiBwYWNrZXQ7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgcmNsczsKICAgICAgICB1bnNpZ25lZCBz aG9ydCBlcnI7CgoKICAgICAgICB2b2lkICpkYXRhX3JlYWR5OwoKCiAgICAgICAgc3RydWN0IG5s c190YWJsZSAqcmVtb3RlX25sczsKICAgICAgICBzdHJ1Y3QgbmxzX3RhYmxlICpsb2NhbF9ubHM7 CgoKCgogICAgICAgIGNoYXIgKm5hbWVfYnVmOwoKICAgICAgICBpbnQgKCpjb252ZXJ0KShjaGFy ICosIGludCwgY29uc3QgY2hhciAqLCBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IG5sc190YWJsZSAqLCBzdHJ1Y3QgbmxzX3RhYmxlICopOwp9OwoKCnN0YXRpYyBpbmxpbmUgdm9p ZApzbWJfbG9ja19zZXJ2ZXIoc3RydWN0IHNtYl9zYl9pbmZvICpzZXJ2ZXIpCnsKICAgICAgICBk b3duKCYoc2VydmVyLT5zZW0pKTsKfQoKc3RhdGljIGlubGluZSB2b2lkCnNtYl91bmxvY2tfc2Vy dmVyKHN0cnVjdCBzbWJfc2JfaW5mbyAqc2VydmVyKQp7CiAgICAgICAgdXAoJihzZXJ2ZXItPnNl bSkpOwp9CiMgNzAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9mcy5oIiAy CiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvaGZzX2ZzX3NiLmgiIDEK IyAxNSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvaGZzX2ZzX3NiLmgiCnN0 cnVjdCBoZnNfbmFtZTsKCnR5cGVkZWYgaW50ICgqaGZzX25hbWVpbl9mbikgKGNoYXIgKiwgY29u c3Qgc3RydWN0IGhmc19uYW1lICopOwp0eXBlZGVmIHZvaWQgKCpoZnNfbmFtZW91dF9mbikgKHN0 cnVjdCBoZnNfbmFtZSAqLCBjb25zdCBjaGFyICosIGludCk7CnR5cGVkZWYgdm9pZCAoKmhmc19p ZmlsbF9mbikgKHN0cnVjdCBpbm9kZSAqLCBpbm9fdCwgY29uc3QgaW50KTsKCgoKCgoKc3RydWN0 IGhmc19zYl9pbmZvIHsKICAgICAgICBpbnQgbWFnaWM7CiAgICAgICAgc3RydWN0IGhmc19tZGIg KnNfbWRiOwogICAgICAgIGludCBzX3F1aWV0OwoKICAgICAgICBpbnQgc19sb3dlcmNhc2U7CiAg ICAgICAgaW50IHNfYWZwZDsKICAgICAgICBpbnQgc192ZXJzaW9uOwogICAgICAgIGhmc19uYW1l aW5fZm4gc19uYW1laW47CgoKICAgICAgICBoZnNfbmFtZW91dF9mbiBzX25hbWVvdXQ7CgoKICAg ICAgICBoZnNfaWZpbGxfZm4gc19pZmlsbDsKCiAgICAgICAgY29uc3Qgc3RydWN0IGhmc19uYW1l ICpzX3Jlc2VydmVkMTsKICAgICAgICBjb25zdCBzdHJ1Y3QgaGZzX25hbWUgKnNfcmVzZXJ2ZWQy OwogICAgICAgIF9fdTMyIHNfdHlwZTsKICAgICAgICBfX3UzMiBzX2NyZWF0b3I7CiAgICAgICAg dW1vZGVfdCBzX3VtYXNrOwoKICAgICAgICB1aWRfdCBzX3VpZDsKICAgICAgICBnaWRfdCBzX2dp ZDsKICAgICAgICBjaGFyIHNfY29udjsKfTsKIyA3MDIgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9p bmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9s aW51eC9hZGZzX2ZzX3NiLmgiIDEKIyAxMyAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUv bGludXgvYWRmc19mc19zYi5oIgpzdHJ1Y3QgYWRmc19kaXNjbWFwOwpzdHJ1Y3QgYWRmc19kaXJf b3BzOwoKCgoKc3RydWN0IGFkZnNfc2JfaW5mbyB7CiAgICAgICAgc3RydWN0IGFkZnNfZGlzY21h cCAqc19tYXA7CiAgICAgICAgc3RydWN0IGFkZnNfZGlyX29wcyAqc19kaXI7CgogICAgICAgIHVp ZF90IHNfdWlkOwogICAgICAgIGdpZF90IHNfZ2lkOwogICAgICAgIHVtb2RlX3Qgc19vd25lcl9t YXNrOwogICAgICAgIHVtb2RlX3Qgc19vdGhlcl9tYXNrOwoKICAgICAgICBfX3UzMiBzX2lkc19w ZXJfem9uZTsKICAgICAgICBfX3UzMiBzX2lkbGVuOwogICAgICAgIF9fdTMyIHNfbWFwX3NpemU7 CiAgICAgICAgdW5zaWduZWQgbG9uZyBzX3NpemU7CiAgICAgICAgc2lnbmVkIGludCBzX21hcDJi bGs7CiAgICAgICAgdW5zaWduZWQgaW50IHNfbG9nMnNoYXJlc2l6ZTsKICAgICAgICB1bnNpZ25l ZCBpbnQgc192ZXJzaW9uOwogICAgICAgIHVuc2lnbmVkIGludCBzX25hbWVsZW47Cn07CiMgNzAz ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9z cmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvcW54NF9mc19zYi5oIiAxCiMgMTQgIi91c3Iv c3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L3FueDRfZnNfc2IuaCIKIyAxICIvdXNyL3Ny Yy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9xbng0X2ZzLmgiIDEKIyA0NSAiL3Vzci9zcmMv bGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvcW54NF9mcy5oIgpzdHJ1Y3QgcW54NF9pbm9kZV9l bnRyeSB7CiAgICAgICAgY2hhciBkaV9mbmFtZVsxNl07CiAgICAgICAgcW54NF9vZmZfdCBkaV9z aXplOwogICAgICAgIHFueDRfeHRudF90IGRpX2ZpcnN0X3h0bnQ7CiAgICAgICAgX191MzIgZGlf eGJsazsKICAgICAgICBfX3MzMiBkaV9mdGltZTsKICAgICAgICBfX3MzMiBkaV9tdGltZTsKICAg ICAgICBfX3MzMiBkaV9hdGltZTsKICAgICAgICBfX3MzMiBkaV9jdGltZTsKICAgICAgICBxbng0 X254dG50X3QgZGlfbnVtX3h0bnRzOwogICAgICAgIHFueDRfbW9kZV90IGRpX21vZGU7CiAgICAg ICAgcW54NF9tdWlkX3QgZGlfdWlkOwogICAgICAgIHFueDRfbWdpZF90IGRpX2dpZDsKICAgICAg ICBxbng0X25saW5rX3QgZGlfbmxpbms7CiAgICAgICAgX191OCBkaV96ZXJvWzRdOwogICAgICAg IHFueDRfZnR5cGVfdCBkaV90eXBlOwogICAgICAgIF9fdTggZGlfc3RhdHVzOwp9OwoKc3RydWN0 IHFueDRfbGlua19pbmZvIHsKICAgICAgICBjaGFyIGRsX2ZuYW1lWzQ4XTsKICAgICAgICBfX3Uz MiBkbF9pbm9kZV9ibGs7CiAgICAgICAgX191OCBkbF9pbm9kZV9uZHg7CiAgICAgICAgX191OCBk bF9zcGFyZVsxMF07CiAgICAgICAgX191OCBkbF9zdGF0dXM7Cn07CgpzdHJ1Y3QgcW54NF94Ymxr IHsKICAgICAgICBfX3UzMiB4YmxrX25leHRfeGJsazsKICAgICAgICBfX3UzMiB4YmxrX3ByZXZf eGJsazsKICAgICAgICBfX3U4IHhibGtfbnVtX3h0bnRzOwogICAgICAgIF9fdTggeGJsa19zcGFy ZVszXTsKICAgICAgICBfX3MzMiB4YmxrX251bV9ibG9ja3M7CiAgICAgICAgcW54NF94dG50X3Qg eGJsa194dG50c1s2MF07CiAgICAgICAgY2hhciB4YmxrX3NpZ25hdHVyZVs4XTsKICAgICAgICBx bng0X3h0bnRfdCB4YmxrX2ZpcnN0X3h0bnQ7Cn07CgpzdHJ1Y3QgcW54NF9zdXBlcl9ibG9jayB7 CiAgICAgICAgc3RydWN0IHFueDRfaW5vZGVfZW50cnkgUm9vdERpcjsKICAgICAgICBzdHJ1Y3Qg cW54NF9pbm9kZV9lbnRyeSBJbm9kZTsKICAgICAgICBzdHJ1Y3QgcW54NF9pbm9kZV9lbnRyeSBC b290OwogICAgICAgIHN0cnVjdCBxbng0X2lub2RlX2VudHJ5IEFsdEJvb3Q7Cn07CiMgMTAwICIv dXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9xbng0X2ZzLmgiCmV4dGVybiBzdHJ1 Y3QgZGVudHJ5ICpxbng0X2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAq ZGVudHJ5KTsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcW54NF9jb3VudF9mcmVlX2Jsb2NrcyhzdHJ1 Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcW54NF9ibG9ja19tYXAo c3RydWN0IGlub2RlICppbm9kZSwgbG9uZyBpYmxvY2spOwoKZXh0ZXJuIHN0cnVjdCBidWZmZXJf aGVhZCAqcW54NF9nZXRibGsoc3RydWN0IGlub2RlICosIGludCwgaW50KTsKZXh0ZXJuIHN0cnVj dCBidWZmZXJfaGVhZCAqcW54NF9icmVhZChzdHJ1Y3QgaW5vZGUgKiwgaW50LCBpbnQpOwoKZXh0 ZXJuIGludCBxbng0X2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVu dHJ5LCBpbnQgbW9kZSk7CmV4dGVybiBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBxbng0X2ZpbGVf aW5vZGVfb3BlcmF0aW9uczsKZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHFueDRfZGly X2lub2RlX29wZXJhdGlvbnM7CmV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHFueDRfZmls ZV9vcGVyYXRpb25zOwpleHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBxbng0X2Rpcl9vcGVy YXRpb25zOwpleHRlcm4gaW50IHFueDRfaXNfZnJlZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBs b25nIGJsb2NrKTsKZXh0ZXJuIGludCBxbng0X3NldF9iaXRtYXAoc3RydWN0IHN1cGVyX2Jsb2Nr ICpzYiwgbG9uZyBibG9jaywgaW50IGJ1c3kpOwpleHRlcm4gaW50IHFueDRfY3JlYXRlKHN0cnVj dCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUpOwpleHRlcm4g dm9pZCBxbng0X3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwpleHRlcm4gdm9pZCBxbng0 X2ZyZWVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7CmV4dGVybiBpbnQgcW54NF91bmxpbmso c3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7CmV4dGVybiBpbnQgcW54 NF9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKZXh0ZXJu IGludCBxbng0X3N5bmNfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGRlbnRyeSAqZGVu dHJ5LCBpbnQpOwpleHRlcm4gaW50IHFueDRfc3luY19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2Rl KTsKZXh0ZXJuIGludCBxbng0X2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb25nIGli bG9jaywgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IGNyZWF0ZSk7CiMgMTUgIi91c3Ivc3Jj L2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L3FueDRfZnNfc2IuaCIgMgoKCgoKCnN0cnVjdCBx bng0X3NiX2luZm8gewogICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqc2JfYnVmOwogICAgICAg IHN0cnVjdCBxbng0X3N1cGVyX2Jsb2NrICpzYjsKICAgICAgICB1bnNpZ25lZCBpbnQgVmVyc2lv bjsKICAgICAgICBzdHJ1Y3QgcW54NF9pbm9kZV9lbnRyeSAqQml0TWFwOwp9OwojIDcwNCAiL3Vz ci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xp bnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzX3NiLmgiIDEKCgoKCgoKCiMgMSAi L3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvdHF1ZXVlLmgiIDEKIyAzOCAiL3Vz ci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvdHF1ZXVlLmgiCnN0cnVjdCB0cV9zdHJ1 Y3QgewogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKICAgICAgICB1bnNpZ25lZCBsb25n IHN5bmM7CiAgICAgICAgdm9pZCAoKnJvdXRpbmUpKHZvaWQgKik7CiAgICAgICAgdm9pZCAqZGF0 YTsKfTsKIyA2NCAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvdHF1ZXVlLmgi CnR5cGVkZWYgc3RydWN0IGxpc3RfaGVhZCB0YXNrX3F1ZXVlOwoKCgoKZXh0ZXJuIHRhc2tfcXVl dWUgdHFfdGltZXIsIHRxX2ltbWVkaWF0ZSwgdHFfZGlzazsKIyA5NCAiL3Vzci9zcmMvbGludXgt Mi40LjIwL2luY2x1ZGUvbGludXgvdHF1ZXVlLmgiCmV4dGVybiBzcGlubG9ja190IHRxdWV1ZV9s b2NrOwoKCgoKCnN0YXRpYyBpbmxpbmUgaW50IHF1ZXVlX3Rhc2soc3RydWN0IHRxX3N0cnVjdCAq YmhfcG9pbnRlciwgdGFza19xdWV1ZSAqYmhfbGlzdCkKewogICAgICAgIGludCByZXQgPSAwOwog ICAgICAgIGlmICghdGVzdF9hbmRfc2V0X2JpdCgwLCZiaF9wb2ludGVyLT5zeW5jKSkgewogICAg ICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKICAgICAgICAgICAgICAgIGRvIHsgZG8g eyBfX2FzbV9fIF9fdm9sYXRpbGVfXygicHVzaGZsIDsgcG9wbCAlMCI6Ij1nIiAoZmxhZ3MpOiAp OyBfX2FzbV9fIF9fdm9sYXRpbGVfXygiY2xpIjogOiA6Im1lbW9yeSIpOyB9IHdoaWxlKDApOzsg c3Bpbl9sb2NrKCZ0cXVldWVfbG9jayk7IH0gd2hpbGUgKDApOwogICAgICAgICAgICAgICAgbGlz dF9hZGRfdGFpbCgmYmhfcG9pbnRlci0+bGlzdCwgYmhfbGlzdCk7CiAgICAgICAgICAgICAgICBk byB7IHNwaW5fdW5sb2NrKCZ0cXVldWVfbG9jayk7IF9fYXNtX18gX192b2xhdGlsZV9fKCJwdXNo bCAlMCA7IHBvcGZsIjogOiJnIiAoZmxhZ3MpOiJtZW1vcnkiLCAiY2MiKTsgfSB3aGlsZSAoMCk7 CiAgICAgICAgICAgICAgICByZXQgPSAxOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmV0Owp9 CgoKCgoKZXh0ZXJuIHZvaWQgX19ydW5fdGFza19xdWV1ZSh0YXNrX3F1ZXVlICpsaXN0KTsKCnN0 YXRpYyBpbmxpbmUgdm9pZCBydW5fdGFza19xdWV1ZSh0YXNrX3F1ZXVlICpsaXN0KQp7CiAgICAg ICAgaWYgKCghbGlzdF9lbXB0eSgmKmxpc3QpKSkKICAgICAgICAgICAgICAgIF9fcnVuX3Rhc2tf cXVldWUobGlzdCk7Cn0KIyA5ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9y ZWlzZXJmc19mc19zYi5oIiAyCiMgMjYgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xp bnV4L3JlaXNlcmZzX2ZzX3NiLmgiCnN0cnVjdCByZWlzZXJmc19zdXBlcl9ibG9jawp7CiAgX191 MzIgc19ibG9ja19jb3VudDsKICBfX3UzMiBzX2ZyZWVfYmxvY2tzOwogIF9fdTMyIHNfcm9vdF9i bG9jazsKICBfX3UzMiBzX2pvdXJuYWxfYmxvY2s7CiAgX191MzIgc19qb3VybmFsX2RldjsKIyA0 MyAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnNfc2IuaCIK ICBfX3UzMiBzX29yaWdfam91cm5hbF9zaXplOwogIF9fdTMyIHNfam91cm5hbF90cmFuc19tYXgg OwogIF9fdTMyIHNfam91cm5hbF9ibG9ja19jb3VudCA7CiAgX191MzIgc19qb3VybmFsX21heF9i YXRjaCA7CiAgX191MzIgc19qb3VybmFsX21heF9jb21taXRfYWdlIDsKICBfX3UzMiBzX2pvdXJu YWxfbWF4X3RyYW5zX2FnZSA7CiAgX191MTYgc19ibG9ja3NpemU7CiAgX191MTYgc19vaWRfbWF4 c2l6ZTsKICBfX3UxNiBzX29pZF9jdXJzaXplOwogIF9fdTE2IHNfc3RhdGU7CiAgY2hhciBzX21h Z2ljWzEyXTsKICBfX3UzMiBzX2hhc2hfZnVuY3Rpb25fY29kZTsKICBfX3UxNiBzX3RyZWVfaGVp Z2h0OwogIF9fdTE2IHNfYm1hcF9ucjsKICBfX3UxNiBzX3ZlcnNpb247CgoKCgogIF9fdTE2IHNf cmVzZXJ2ZWQ7CiAgX191MzIgc19pbm9kZV9nZW5lcmF0aW9uOwogIF9fdTMyIHNfZmxhZ3M7CiAg dW5zaWduZWQgY2hhciBzX3V1aWRbMTZdOwogIHVuc2lnbmVkIGNoYXIgc19sYWJlbFsxNl07CiAg Y2hhciBzX3VudXNlZFs4OF0gOwoKCgp9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7Cgp0 eXBlZGVmIGVudW0gewogIHJlaXNlcmZzX2F0dHJzX2NsZWFyZWQgPSAweDAwMDAwMDAxLAp9IHJl aXNlcmZzX3N1cGVyX2Jsb2NrX2ZsYWdzOwojIDEzMSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2lu Y2x1ZGUvbGludXgvcmVpc2VyZnNfZnNfc2IuaCIKc3RydWN0IHJlaXNlcmZzX3N1cGVyX2Jsb2Nr X3YxCnsKICBfX3UzMiBzX2Jsb2NrX2NvdW50OwogIF9fdTMyIHNfZnJlZV9ibG9ja3M7CiAgX191 MzIgc19yb290X2Jsb2NrOwogIF9fdTMyIHNfam91cm5hbF9ibG9jazsKICBfX3UzMiBzX2pvdXJu YWxfZGV2OwogIF9fdTMyIHNfb3JpZ19qb3VybmFsX3NpemU7CiAgX191MzIgc19qb3VybmFsX3Ry YW5zX21heCA7CiAgX191MzIgc19qb3VybmFsX2Jsb2NrX2NvdW50IDsKICBfX3UzMiBzX2pvdXJu YWxfbWF4X2JhdGNoIDsKICBfX3UzMiBzX2pvdXJuYWxfbWF4X2NvbW1pdF9hZ2UgOwogIF9fdTMy IHNfam91cm5hbF9tYXhfdHJhbnNfYWdlIDsKICBfX3UxNiBzX2Jsb2Nrc2l6ZTsKICBfX3UxNiBz X29pZF9tYXhzaXplOwogIF9fdTE2IHNfb2lkX2N1cnNpemU7CiAgX191MTYgc19zdGF0ZTsKICBj aGFyIHNfbWFnaWNbMTZdOwogIF9fdTE2IHNfdHJlZV9oZWlnaHQ7CiAgX191MTYgc19ibWFwX25y OwogIF9fdTMyIHNfcmVzZXJ2ZWQ7Cn0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKIyAy MTAgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzX3NiLmgi CnN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Nub2RlIHsKICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJo IDsKICBrZGV2X3QgZGV2IDsKICB1bnNpZ25lZCBsb25nIGJsb2NrbnIgOwogIGxvbmcgc3RhdGUg OwogIHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2xpc3QgKmpsaXN0IDsKICBzdHJ1Y3QgcmVpc2Vy ZnNfam91cm5hbF9jbm9kZSAqbmV4dCA7CiAgc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfY25vZGUg KnByZXYgOwogIHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Nub2RlICpocHJldiA7CiAgc3RydWN0 IHJlaXNlcmZzX2pvdXJuYWxfY25vZGUgKmhuZXh0IDsKfTsKCnN0cnVjdCByZWlzZXJmc19iaXRt YXBfbm9kZSB7CiAgaW50IGlkIDsKICBjaGFyICpkYXRhIDsKICBzdHJ1Y3QgbGlzdF9oZWFkIGxp c3QgOwp9IDsKCnN0cnVjdCByZWlzZXJmc19saXN0X2JpdG1hcCB7CiAgc3RydWN0IHJlaXNlcmZz X2pvdXJuYWxfbGlzdCAqam91cm5hbF9saXN0IDsKICBzdHJ1Y3QgcmVpc2VyZnNfYml0bWFwX25v ZGUgKipiaXRtYXBzIDsKfSA7CgoKCgpzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxl IHsKCiAgY2hhciAqdF9jYWxsZXIgOwogIGludCB0X2Jsb2Nrc19sb2dnZWQgOwogIGludCB0X2Js b2Nrc19hbGxvY2F0ZWQgOwogIHVuc2lnbmVkIGxvbmcgdF90cmFuc19pZCA7CiAgc3RydWN0IHN1 cGVyX2Jsb2NrICp0X3N1cGVyIDsKCiAgaW50IGRpc3BsYWNlX25ld19ibG9ja3M6MTsKCn0gOwoK CgoKCgoKc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfbGlzdCB7CiAgdW5zaWduZWQgbG9uZyBqX3N0 YXJ0IDsKICB1bnNpZ25lZCBsb25nIGpfbGVuIDsKICBhdG9taWNfdCBqX25vbnplcm9sZW4gOwog IGF0b21pY190IGpfY29tbWl0X2xlZnQgOwogIGF0b21pY190IGpfZmx1c2hpbmcgOwogIGF0b21p Y190IGpfY29tbWl0X2ZsdXNoaW5nIDsKICBhdG9taWNfdCBqX29sZGVyX2NvbW1pdHNfZG9uZSA7 CiAgdW5zaWduZWQgbG9uZyBqX3RyYW5zX2lkIDsKICB0aW1lX3Qgal90aW1lc3RhbXAgOwogIHN0 cnVjdCByZWlzZXJmc19saXN0X2JpdG1hcCAqal9saXN0X2JpdG1hcCA7CiAgc3RydWN0IGJ1ZmZl cl9oZWFkICpqX2NvbW1pdF9iaCA7CiAgc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfY25vZGUgKmpf cmVhbGJsb2NrIDsKICBzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jbm9kZSAqal9mcmVlZGxpc3Qg OwogIHdhaXRfcXVldWVfaGVhZF90IGpfY29tbWl0X3dhaXQgOwogIHdhaXRfcXVldWVfaGVhZF90 IGpfZmx1c2hfd2FpdCA7Cn0gOwoKc3RydWN0IHJlaXNlcmZzX3BhZ2VfbGlzdCA7CgpzdHJ1Y3Qg cmVpc2VyZnNfam91cm5hbCB7CiAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqIGpfYXBfYmxvY2tzIDsK ICBzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jbm9kZSAqal9sYXN0IDsKICBzdHJ1Y3QgcmVpc2Vy ZnNfam91cm5hbF9jbm9kZSAqal9maXJzdCA7CgogIGxvbmcgal9zdGF0ZSA7CiAgdW5zaWduZWQg bG9uZyBqX3RyYW5zX2lkIDsKICB1bnNpZ25lZCBsb25nIGpfbW91bnRfaWQgOwogIHVuc2lnbmVk IGxvbmcgal9zdGFydCA7CiAgdW5zaWduZWQgbG9uZyBqX2xlbiA7CiAgdW5zaWduZWQgbG9uZyBq X2xlbl9hbGxvYyA7CiAgYXRvbWljX3Qgal93Y291bnQgOwogIHVuc2lnbmVkIGxvbmcgal9iY291 bnQgOwogIHVuc2lnbmVkIGxvbmcgal9maXJzdF91bmZsdXNoZWRfb2Zmc2V0IDsKICB1bnNpZ25l ZCBsb25nIGpfbGFzdF9mbHVzaF90cmFuc19pZCA7CiAgc3RydWN0IGJ1ZmZlcl9oZWFkICpqX2hl YWRlcl9iaCA7CgoKCgogIHN0cnVjdCByZWlzZXJmc19wYWdlX2xpc3QgKmpfZmx1c2hfcGFnZXMg OwogIHRpbWVfdCBqX3RyYW5zX3N0YXJ0X3RpbWUgOwogIHdhaXRfcXVldWVfaGVhZF90IGpfd2Fp dCA7CiAgYXRvbWljX3Qgal93bG9jayA7CiAgd2FpdF9xdWV1ZV9oZWFkX3Qgal9qb2luX3dhaXQg OwogIGF0b21pY190IGpfamxvY2sgOwogIGludCBqX2pvdXJuYWxfbGlzdF9pbmRleCA7CiAgaW50 IGpfbGlzdF9iaXRtYXBfaW5kZXggOwogIGludCBqX211c3Rfd2FpdCA7CiAgaW50IGpfbmV4dF9m dWxsX2ZsdXNoIDsKICBpbnQgal9uZXh0X2FzeW5jX2ZsdXNoIDsKCiAgaW50IGpfY25vZGVfdXNl ZCA7CiAgaW50IGpfY25vZGVfZnJlZSA7CgogIHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Nub2Rl ICpqX2Nub2RlX2ZyZWVfbGlzdCA7CiAgc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfY25vZGUgKmpf Y25vZGVfZnJlZV9vcmlnIDsKCiAgaW50IGpfZnJlZV9iaXRtYXBfbm9kZXMgOwogIGludCBqX3Vz ZWRfYml0bWFwX25vZGVzIDsKICBzdHJ1Y3QgbGlzdF9oZWFkIGpfYml0bWFwX25vZGVzIDsKICBz dHJ1Y3QgbGlzdF9oZWFkIGpfZGlydHlfYnVmZmVycyA7CiAgc3RydWN0IHJlaXNlcmZzX2xpc3Rf Yml0bWFwIGpfbGlzdF9iaXRtYXBbNV0gOwogIHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2xpc3Qg al9qb3VybmFsX2xpc3RbNjRdIDsKICBzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jbm9kZSAqal9o YXNoX3RhYmxlWzgxOTJdIDsKICBzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jbm9kZSAqal9saXN0 X2hhc2hfdGFibGVbODE5Ml0gOwoKICBzdHJ1Y3QgbGlzdF9oZWFkIGpfcHJlYWxsb2NfbGlzdDsK fTsKCgoKCnR5cGVkZWYgX191MzIgKCpoYXNoZl90KSAoY29uc3Qgc2lnbmVkIGNoYXIgKiwgaW50 KTsKCnN0cnVjdCByZWlzZXJmc19iaXRtYXBfaW5mbwp7CgogICAgX191MTYgZmlyc3RfemVyb19o aW50OwogICAgX191MTYgZnJlZV9jb3VudDsKICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7Cn07 CgpzdHJ1Y3QgcHJvY19kaXJfZW50cnk7CiMgNDA4ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5j bHVkZS9saW51eC9yZWlzZXJmc19mc19zYi5oIgp0eXBlZGVmIHN0cnVjdCByZWlzZXJmc19wcm9j X2luZm9fZGF0YQp7fSByZWlzZXJmc19wcm9jX2luZm9fZGF0YV90OwoKCgpzdHJ1Y3QgcmVpc2Vy ZnNfc2JfaW5mbwp7CiAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBzX3NiaDsKCgogICAgc3RydWN0 IHJlaXNlcmZzX3N1cGVyX2Jsb2NrICogc19yczsKICAgIHN0cnVjdCByZWlzZXJmc19iaXRtYXBf aW5mbyAqIHNfYXBfYml0bWFwOwogICAgc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKnNfam91cm5h bCA7CiAgICB1bnNpZ25lZCBzaG9ydCBzX21vdW50X3N0YXRlOwoKCiAgICB2b2lkICgqZW5kX2lv X2hhbmRsZXIpKHN0cnVjdCBidWZmZXJfaGVhZCAqLCBpbnQpOwogICAgaGFzaGZfdCBzX2hhc2hf ZnVuY3Rpb247CgoKICAgIHVuc2lnbmVkIGxvbmcgc19tb3VudF9vcHQ7CgoKCiAgICBzdHJ1Y3Qg ewogICAgICAgIHVuc2lnbmVkIGxvbmcgYml0czsKICAgICAgICB1bnNpZ25lZCBsb25nIGxhcmdl X2ZpbGVfc2l6ZTsKICAgICAgICBpbnQgYm9yZGVyOwogICAgICAgIGludCBwcmVhbGxvY21pbjsK ICAgICAgICBpbnQgcHJlYWxsb2NzaXplOwoKCiAgICB9IHNfYWxsb2Nfb3B0aW9uczsKCgogICAg d2FpdF9xdWV1ZV9oZWFkX3Qgc193YWl0OwoKICAgIGF0b21pY190IHNfZ2VuZXJhdGlvbl9jb3Vu dGVyOwoKICAgIHVuc2lnbmVkIGxvbmcgc19wcm9wZXJ0aWVzOwoKCgogICAgaW50IHNfa21hbGxv Y3M7CiAgICBpbnQgc19kaXNrX3JlYWRzOwogICAgaW50IHNfZGlza193cml0ZXM7CiAgICBpbnQg c19maXhfbm9kZXM7CiAgICBpbnQgc19kb19iYWxhbmNlOwogICAgaW50IHNfdW5uZWVkZWRfbGVm dF9uZWlnaGJvcjsKICAgIGludCBzX2dvb2Rfc2VhcmNoX2J5X2tleV9yZWFkYTsKICAgIGludCBz X2JtYXBzOwogICAgaW50IHNfYm1hcHNfd2l0aG91dF9zZWFyY2g7CiAgICBpbnQgc19kaXJlY3Qy aW5kaXJlY3Q7CiAgICBpbnQgc19pbmRpcmVjdDJkaXJlY3Q7CgoKCiAgICBpbnQgc19pc191bmxp bmtlZF9vazsKICAgIHJlaXNlcmZzX3Byb2NfaW5mb19kYXRhX3Qgc19wcm9jX2luZm9fZGF0YTsK ICAgIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY2RpcjsKICAgIGludCByZXNlcnZlZF9ibG9j a3M7Cn07CiMgNTM0ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9yZWlzZXJm c19mc19zYi5oIgp2b2lkIHJlaXNlcmZzX2ZpbGVfYnVmZmVyIChzdHJ1Y3QgYnVmZmVyX2hlYWQg KiBiaCwgaW50IGxpc3QpOwppbnQgcmVpc2VyZnNfaXNfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2Nr ICpzKSA7CmludCBqb3VybmFsX21hcmtfZGlydHkoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9u X2hhbmRsZSAqLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkg OwppbnQgZmx1c2hfb2xkX2NvbW1pdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBpbnQpIDsKaW50 IHNob3dfcmVpc2VyZnNfbG9ja3Modm9pZCkgOwppbnQgcmVpc2VyZnNfcmVzaXplKHN0cnVjdCBz dXBlcl9ibG9jayAqLCB1bnNpZ25lZCBsb25nKSA7CiMgNzA1ICIvdXNyL3NyYy9saW51eC0yLjQu MjAvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1 ZGUvbGludXgvYmZzX2ZzX3NiLmgiIDEKIyAxMiAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1 ZGUvbGludXgvYmZzX2ZzX3NiLmgiCnN0cnVjdCBiZnNfc2JfaW5mbyB7CiAgICAgICAgdW5zaWdu ZWQgbG9uZyBzaV9ibG9ja3M7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzaV9mcmVlYjsKICAgICAg ICB1bnNpZ25lZCBsb25nIHNpX2ZyZWVpOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc2lfbGZfaW9m ZjsKICAgICAgICB1bnNpZ25lZCBsb25nIHNpX2xmX3NibGs7CiAgICAgICAgdW5zaWduZWQgbG9u ZyBzaV9sZl9lYmxrOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc2lfbGFzdGk7CiAgICAgICAgY2hh ciAqIHNpX2ltYXA7CiAgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICogc2lfc2JoOwogICAgICAg IHN0cnVjdCBiZnNfc3VwZXJfYmxvY2sgKiBzaV9iZnNfc2I7Cn07CiMgNzA2ICIvdXNyL3NyYy9s aW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40 LjIwL2luY2x1ZGUvbGludXgvdWRmX2ZzX3NiLmgiIDEKIyAyMSAiL3Vzci9zcmMvbGludXgtMi40 LjIwL2luY2x1ZGUvbGludXgvdWRmX2ZzX3NiLmgiCiNwcmFnbWEgcGFjaygxKQojIDMwICIvdXNy L3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC91ZGZfZnNfc2IuaCIKc3RydWN0IHVkZl9z cGFyaW5nX2RhdGEKewogICAgICAgIF9fdTE2IHNfcGFja2V0X2xlbjsKICAgICAgICBzdHJ1Y3Qg YnVmZmVyX2hlYWQgKnNfc3Bhcl9tYXBbNF07Cn07CgpzdHJ1Y3QgdWRmX3ZpcnR1YWxfZGF0YQp7 CiAgICAgICAgX191MzIgc19udW1fZW50cmllczsKICAgICAgICBfX3UxNiBzX3N0YXJ0X29mZnNl dDsKfTsKCnN0cnVjdCB1ZGZfYml0bWFwCnsKICAgICAgICBfX3UzMiBzX2V4dExlbmd0aDsKICAg ICAgICBfX3UzMiBzX2V4dFBvc2l0aW9uOwogICAgICAgIF9fdTE2IHNfbnJfZ3JvdXBzOwogICAg ICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKnNfYmxvY2tfYml0bWFwOwp9OwoKc3RydWN0IHVkZl9w YXJ0X21hcAp7CiAgICAgICAgdW5pb24KICAgICAgICB7CiAgICAgICAgICAgICAgICBzdHJ1Y3Qg dWRmX2JpdG1hcCAqc19iaXRtYXA7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgaW5vZGUgKnNfdGFi bGU7CiAgICAgICAgfSBzX3VzcGFjZTsKICAgICAgICB1bmlvbgogICAgICAgIHsKICAgICAgICAg ICAgICAgIHN0cnVjdCB1ZGZfYml0bWFwICpzX2JpdG1hcDsKICAgICAgICAgICAgICAgIHN0cnVj dCBpbm9kZSAqc190YWJsZTsKICAgICAgICB9IHNfZnNwYWNlOwogICAgICAgIF9fdTMyIHNfcGFy dGl0aW9uX3Jvb3Q7CiAgICAgICAgX191MzIgc19wYXJ0aXRpb25fbGVuOwogICAgICAgIF9fdTE2 IHNfcGFydGl0aW9uX3R5cGU7CiAgICAgICAgX191MTYgc19wYXJ0aXRpb25fbnVtOwogICAgICAg IHVuaW9uCiAgICAgICAgewogICAgICAgICAgICAgICAgc3RydWN0IHVkZl9zcGFyaW5nX2RhdGEg c19zcGFyaW5nOwogICAgICAgICAgICAgICAgc3RydWN0IHVkZl92aXJ0dWFsX2RhdGEgc192aXJ0 dWFsOwogICAgICAgIH0gc190eXBlX3NwZWNpZmljOwogICAgICAgIF9fdTMyICgqc19wYXJ0aXRp b25fZnVuYykoc3RydWN0IHN1cGVyX2Jsb2NrICosIF9fdTMyLCBfX3UxNiwgX191MzIpOwogICAg ICAgIF9fdTE2IHNfdm9sdW1lc2VxbnVtOwogICAgICAgIF9fdTE2IHNfcGFydGl0aW9uX2ZsYWdz Owp9OwoKI3ByYWdtYSBwYWNrKCkKCnN0cnVjdCB1ZGZfc2JfaW5mbwp7CiAgICAgICAgc3RydWN0 IHVkZl9wYXJ0X21hcCAqc19wYXJ0bWFwczsKICAgICAgICBfX3U4IHNfdm9saWRlbnRbMzJdOwoK CiAgICAgICAgX191MTYgc19wYXJ0aXRpb25zOwogICAgICAgIF9fdTE2IHNfcGFydGl0aW9uOwoK CiAgICAgICAgX19zMzIgc19zZXNzaW9uOwogICAgICAgIF9fdTMyIHNfYW5jaG9yWzRdOwogICAg ICAgIF9fdTMyIHNfbGFzdGJsb2NrOwoKICAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnNfbHZp ZGJoOwoKCiAgICAgICAgbW9kZV90IHNfdW1hc2s7CiAgICAgICAgZ2lkX3Qgc19naWQ7CiAgICAg ICAgdWlkX3Qgc191aWQ7CgoKICAgICAgICB0aW1lX3Qgc19yZWNvcmR0aW1lOwoKCiAgICAgICAg X191MTYgc19zZXJpYWxudW07CgoKICAgICAgICBfX3UxNiBzX3VkZnJldjsKCgogICAgICAgIF9f dTMyIHNfZmxhZ3M7CgoKICAgICAgICBzdHJ1Y3QgbmxzX3RhYmxlICpzX25sc19tYXA7CgoKICAg ICAgICBzdHJ1Y3QgaW5vZGUgKnNfdmF0Owp9OwojIDcwNyAiL3Vzci9zcmMvbGludXgtMi40LjIw L2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRl L2xpbnV4L25jcF9mc19zYi5oIiAxCiMgMTIgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRl L2xpbnV4L25jcF9mc19zYi5oIgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xp bnV4L25jcF9tb3VudC5oIiAxCiMgMTIgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xp bnV4L25jcF9tb3VudC5oIgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4 L25jcC5oIiAxCiMgMjIgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L25jcC5o IgpzdHJ1Y3QgbmNwX3JlcXVlc3RfaGVhZGVyIHsKICAgICAgICBfX3UxNiB0eXBlIF9fYXR0cmli dXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTggc2VxdWVuY2UgX19hdHRyaWJ1dGVfXygocGFj a2VkKSk7CiAgICAgICAgX191OCBjb25uX2xvdyBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAg ICAgICBfX3U4IHRhc2sgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191OCBjb25u X2hpZ2ggX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191OCBmdW5jdGlvbiBfX2F0 dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3U4IGRhdGFbMF0gX19hdHRyaWJ1dGVfXygo cGFja2VkKSk7Cn07CgoKCgpzdHJ1Y3QgbmNwX3JlcGx5X2hlYWRlciB7CiAgICAgICAgX191MTYg dHlwZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3U4IHNlcXVlbmNlIF9fYXR0 cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTggY29ubl9sb3cgX19hdHRyaWJ1dGVfXygo cGFja2VkKSk7CiAgICAgICAgX191OCB0YXNrIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAg ICAgIF9fdTggY29ubl9oaWdoIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTgg Y29tcGxldGlvbl9jb2RlIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTggY29u bmVjdGlvbl9zdGF0ZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3U4IGRhdGFb MF0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cn07CgoKCnN0cnVjdCBuY3Bfdm9sdW1lX2luZm8g ewogICAgICAgIF9fdTMyIHRvdGFsX2Jsb2NrczsKICAgICAgICBfX3UzMiBmcmVlX2Jsb2NrczsK ICAgICAgICBfX3UzMiBwdXJnZWFibGVfYmxvY2tzOwogICAgICAgIF9fdTMyIG5vdF95ZXRfcHVy Z2VhYmxlX2Jsb2NrczsKICAgICAgICBfX3UzMiB0b3RhbF9kaXJfZW50cmllczsKICAgICAgICBf X3UzMiBhdmFpbGFibGVfZGlyX2VudHJpZXM7CiAgICAgICAgX191OCBzZWN0b3JzX3Blcl9ibG9j azsKICAgICAgICBjaGFyIHZvbHVtZV9uYW1lWygxNikgKyAxXTsKfTsKIyAxMTIgIi91c3Ivc3Jj L2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L25jcC5oIgpzdHJ1Y3QgbndfaW5mb19zdHJ1Y3Qg ewogICAgICAgIF9fdTMyIHNwYWNlQWxsb2MgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAg ICAgX191MzIgYXR0cmlidXRlcyBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3Ux NiBmbGFncyBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3UzMiBkYXRhU3RyZWFt U2l6ZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3UzMiB0b3RhbFN0cmVhbVNp emUgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191MTYgbnVtYmVyT2ZTdHJlYW1z IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTE2IGNyZWF0aW9uVGltZSBfX2F0 dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3UxNiBjcmVhdGlvbkRhdGUgX19hdHRyaWJ1 dGVfXygocGFja2VkKSk7CiAgICAgICAgX191MzIgY3JlYXRvcklEIF9fYXR0cmlidXRlX18oKHBh Y2tlZCkpOwogICAgICAgIF9fdTE2IG1vZGlmeVRpbWUgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7 CiAgICAgICAgX191MTYgbW9kaWZ5RGF0ZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAg ICBfX3UzMiBtb2RpZmllcklEIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTE2 IGxhc3RBY2Nlc3NEYXRlIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTE2IGFy Y2hpdmVUaW1lIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTE2IGFyY2hpdmVE YXRlIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTMyIGFyY2hpdmVySUQgX19h dHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191MTYgaW5oZXJpdGVkUmlnaHRzTWFzayBf X2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3UzMiBkaXJFbnROdW0gX19hdHRyaWJ1 dGVfXygocGFja2VkKSk7CiAgICAgICAgX191MzIgRG9zRGlyTnVtIF9fYXR0cmlidXRlX18oKHBh Y2tlZCkpOwogICAgICAgIF9fdTMyIHZvbE51bWJlciBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsK ICAgICAgICBfX3UzMiBFQURhdGFTaXplIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAg IF9fdTMyIEVBS2V5Q291bnQgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191MzIg RUFLZXlTaXplIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTMyIE5TQ3JlYXRv ciBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3U4IG5hbWVMZW4gX19hdHRyaWJ1 dGVfXygocGFja2VkKSk7CiAgICAgICAgX191OCBlbnRyeU5hbWVbMjU2XSBfX2F0dHJpYnV0ZV9f KChwYWNrZWQpKTsKfTsKIyAxNTYgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4 L25jcC5oIgpzdHJ1Y3QgbndfbW9kaWZ5X2Rvc19pbmZvIHsKICAgICAgICBfX3UzMiBhdHRyaWJ1 dGVzIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTE2IGNyZWF0aW9uRGF0ZSBf X2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3UxNiBjcmVhdGlvblRpbWUgX19hdHRy aWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191MzIgY3JlYXRvcklEIF9fYXR0cmlidXRlX18o KHBhY2tlZCkpOwogICAgICAgIF9fdTE2IG1vZGlmeURhdGUgX19hdHRyaWJ1dGVfXygocGFja2Vk KSk7CiAgICAgICAgX191MTYgbW9kaWZ5VGltZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAg ICAgICBfX3UzMiBtb2RpZmllcklEIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9f dTE2IGFyY2hpdmVEYXRlIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTE2IGFy Y2hpdmVUaW1lIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTMyIGFyY2hpdmVy SUQgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191MTYgbGFzdEFjY2Vzc0RhdGUg X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191MTYgaW5oZXJpdGFuY2VHcmFudE1h c2sgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191MTYgaW5oZXJpdGFuY2VSZXZv a2VNYXNrIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTMyIG1heGltdW1TcGFj ZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKfTsKCnN0cnVjdCBud19zZWFyY2hfc2VxdWVuY2Ug ewogICAgICAgIF9fdTggdm9sTnVtYmVyIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAg IF9fdTMyIGRpckJhc2UgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191MzIgc2Vx dWVuY2UgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cn07CiMgMTMgIi91c3Ivc3JjL2xpbnV4LTIu NC4yMC9pbmNsdWRlL2xpbnV4L25jcF9tb3VudC5oIiAyCiMgMjUgIi91c3Ivc3JjL2xpbnV4LTIu NC4yMC9pbmNsdWRlL2xpbnV4L25jcF9tb3VudC5oIgpzdHJ1Y3QgbmNwX21vdW50X2RhdGEgewog ICAgICAgIGludCB2ZXJzaW9uOwogICAgICAgIHVuc2lnbmVkIGludCBuY3BfZmQ7CiAgICAgICAg X19rZXJuZWxfdWlkX3QgbW91bnRlZF91aWQ7CiAgICAgICAgX19rZXJuZWxfcGlkX3Qgd2RvZ19w aWQ7CgogICAgICAgIHVuc2lnbmVkIGNoYXIgbW91bnRlZF92b2xbKDE2KSArIDFdOwogICAgICAg IHVuc2lnbmVkIGludCB0aW1lX291dDsKCiAgICAgICAgdW5zaWduZWQgaW50IHJldHJ5X2NvdW50 OwogICAgICAgIHVuc2lnbmVkIGludCBmbGFnczsKCiAgICAgICAgX19rZXJuZWxfdWlkX3QgdWlk OwogICAgICAgIF9fa2VybmVsX2dpZF90IGdpZDsKICAgICAgICBfX2tlcm5lbF9tb2RlX3QgZmls ZV9tb2RlOwogICAgICAgIF9fa2VybmVsX21vZGVfdCBkaXJfbW9kZTsKfTsKCgoKc3RydWN0IG5j cF9tb3VudF9kYXRhX3Y0IHsKICAgICAgICBpbnQgdmVyc2lvbjsKICAgICAgICB1bnNpZ25lZCBs b25nIGZsYWdzOwoKCiAgICAgICAgdW5zaWduZWQgbG9uZyBtb3VudGVkX3VpZDsKCiAgICAgICAg bG9uZyB3ZG9nX3BpZDsKCiAgICAgICAgdW5zaWduZWQgaW50IG5jcF9mZDsKICAgICAgICB1bnNp Z25lZCBpbnQgdGltZV9vdXQ7CgogICAgICAgIHVuc2lnbmVkIGludCByZXRyeV9jb3VudDsKCgoK ICAgICAgICB1bnNpZ25lZCBsb25nIHVpZDsKICAgICAgICB1bnNpZ25lZCBsb25nIGdpZDsKCiAg ICAgICAgdW5zaWduZWQgbG9uZyBmaWxlX21vZGU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBkaXJf bW9kZTsKfTsKCgoKc3RydWN0IG5jcF9tb3VudF9kYXRhX2tlcm5lbCB7CiAgICAgICAgdW5zaWdu ZWQgbG9uZyBmbGFnczsKICAgICAgICB1bnNpZ25lZCBpbnQgaW50X2ZsYWdzOwoKICAgICAgICBf X2tlcm5lbF91aWQzMl90IG1vdW50ZWRfdWlkOwogICAgICAgIF9fa2VybmVsX3BpZF90IHdkb2df cGlkOwogICAgICAgIHVuc2lnbmVkIGludCBuY3BfZmQ7CiAgICAgICAgdW5zaWduZWQgaW50IHRp bWVfb3V0OwoKICAgICAgICB1bnNpZ25lZCBpbnQgcmV0cnlfY291bnQ7CiAgICAgICAgdW5zaWdu ZWQgY2hhciBtb3VudGVkX3ZvbFsoMTYpICsgMV07CiAgICAgICAgX19rZXJuZWxfdWlkMzJfdCB1 aWQ7CiAgICAgICAgX19rZXJuZWxfZ2lkMzJfdCBnaWQ7CiAgICAgICAgX19rZXJuZWxfbW9kZV90 IGZpbGVfbW9kZTsKICAgICAgICBfX2tlcm5lbF9tb2RlX3QgZGlyX21vZGU7Cn07CiMgMTMgIi91 c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L25jcF9mc19zYi5oIiAyCgoKCgoKc3Ry dWN0IG5jcF9zZXJ2ZXIgewoKICAgICAgICBzdHJ1Y3QgbmNwX21vdW50X2RhdGFfa2VybmVsIG07 CgoKCiAgICAgICAgX191OCBuYW1lX3NwYWNlWyg2NCkgKyAyXTsKCiAgICAgICAgc3RydWN0IGZp bGUgKm5jcF9maWxwOwoKICAgICAgICB1OCBzZXF1ZW5jZTsKICAgICAgICB1OCB0YXNrOwogICAg ICAgIHUxNiBjb25uZWN0aW9uOwoKICAgICAgICB1OCBjb21wbGV0aW9uOwogICAgICAgIHU4IGNv bm5fc3RhdHVzOwoKCgogICAgICAgIGludCBidWZmZXJfc2l6ZTsKCiAgICAgICAgaW50IHJlcGx5 X3NpemU7CgogICAgICAgIGludCBwYWNrZXRfc2l6ZTsKICAgICAgICB1bnNpZ25lZCBjaGFyICpw YWNrZXQ7CgoKICAgICAgICBpbnQgbG9jazsKICAgICAgICBzdHJ1Y3Qgc2VtYXBob3JlIHNlbTsK CiAgICAgICAgaW50IGN1cnJlbnRfc2l6ZTsKICAgICAgICBpbnQgaGFzX3N1YmZ1bmN0aW9uOwog ICAgICAgIGludCBuY3BfcmVwbHlfc2l6ZTsKCiAgICAgICAgaW50IHJvb3Rfc2V0dXBlZDsKCgog ICAgICAgIGludCBzaWduX3dhbnRlZDsKICAgICAgICBpbnQgc2lnbl9hY3RpdmU7CiAgICAgICAg Y2hhciBzaWduX3Jvb3RbOF07CiAgICAgICAgY2hhciBzaWduX2xhc3RbMTZdOwoKCiAgICAgICAg c3RydWN0IHsKICAgICAgICAgICAgICAgIGludCBhdXRoX3R5cGU7CiAgICAgICAgICAgICAgICBz aXplX3Qgb2JqZWN0X25hbWVfbGVuOwogICAgICAgICAgICAgICAgdm9pZCogb2JqZWN0X25hbWU7 CiAgICAgICAgICAgICAgICBpbnQgb2JqZWN0X3R5cGU7CiAgICAgICAgfSBhdXRoOwoKICAgICAg ICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgc2l6ZV90IGxlbjsKICAgICAgICAgICAgICAgIHZv aWQqIGRhdGE7CiAgICAgICAgfSBwcml2OwoKCiAgICAgICAgc3RydWN0IG5sc190YWJsZSAqbmxz X3ZvbDsKICAgICAgICBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfaW87CgoKICAgICAgICBpbnQgZGVu dHJ5X3R0bDsKCgogICAgICAgIHVuc2lnbmVkIGludCBmbGFnczsKfTsKIyA5MiAiL3Vzci9zcmMv bGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvbmNwX2ZzX3NiLmgiCnN0YXRpYyBpbmxpbmUgaW50 IG5jcF9jb25uX3ZhbGlkKHN0cnVjdCBuY3Bfc2VydmVyICpzZXJ2ZXIpCnsKICAgICAgICByZXR1 cm4gKChzZXJ2ZXItPmNvbm5fc3RhdHVzICYgMHgxMSkgPT0gMCk7Cn0KCnN0YXRpYyBpbmxpbmUg dm9pZCBuY3BfaW52YWxpZGF0ZV9jb25uKHN0cnVjdCBuY3Bfc2VydmVyICpzZXJ2ZXIpCnsKICAg ICAgICBzZXJ2ZXItPmNvbm5fc3RhdHVzIHw9IDB4MDE7Cn0KIyA3MDggIi91c3Ivc3JjL2xpbnV4 LTIuNC4yMC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAv aW5jbHVkZS9saW51eC91c2JkZXZfZnNfc2IuaCIgMQpzdHJ1Y3QgdXNiZGV2X3NiX2luZm8gewog ICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgc2xpc3Q7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBp bGlzdDsKICAgICAgICB1aWRfdCBkZXZ1aWQ7CiAgICAgICAgZ2lkX3QgZGV2Z2lkOwogICAgICAg IHVtb2RlX3QgZGV2bW9kZTsKICAgICAgICB1aWRfdCBidXN1aWQ7CiAgICAgICAgZ2lkX3QgYnVz Z2lkOwogICAgICAgIHVtb2RlX3QgYnVzbW9kZTsKICAgICAgICB1aWRfdCBsaXN0dWlkOwogICAg ICAgIGdpZF90IGxpc3RnaWQ7CiAgICAgICAgdW1vZGVfdCBsaXN0bW9kZTsKfTsKIyA3MDkgIi91 c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKCiMgMSAiL3Vzci9zcmMv bGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvamZmczJfZnNfc2IuaCIgMQoKCgoKCgoKIyAxICIv dXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9jb21wbGV0aW9uLmgiIDEKIyAxMyAi L3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvY29tcGxldGlvbi5oIgpzdHJ1Y3Qg Y29tcGxldGlvbiB7CiAgICAgICAgdW5zaWduZWQgaW50IGRvbmU7CiAgICAgICAgd2FpdF9xdWV1 ZV9oZWFkX3Qgd2FpdDsKfTsKCgoKCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2NvbXBsZXRp b24oc3RydWN0IGNvbXBsZXRpb24gKngpCnsKICAgICAgICB4LT5kb25lID0gMDsKICAgICAgICBp bml0X3dhaXRxdWV1ZV9oZWFkKCZ4LT53YWl0KTsKfQoKZXh0ZXJuIHZvaWQgd2FpdF9mb3JfY29t cGxldGlvbihzdHJ1Y3QgY29tcGxldGlvbiAqKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7 CmV4dGVybiB2b2lkIGNvbXBsZXRlKHN0cnVjdCBjb21wbGV0aW9uICopIF9fYXR0cmlidXRlX18o KHJlZ3Bhcm0oMykpKTsKIyA5ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9q ZmZzMl9mc19zYi5oIiAyCiMgMjEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4 L2pmZnMyX2ZzX3NiLmgiCnN0cnVjdCBqZmZzMl9zYl9pbmZvIHsKICAgICAgICBzdHJ1Y3QgbXRk X2luZm8gKm10ZDsKCiAgICAgICAgX191MzIgaGlnaGVzdF9pbm87CiAgICAgICAgdW5zaWduZWQg aW50IGZsYWdzOwogICAgICAgIHNwaW5sb2NrX3Qgbm9kZWxpc3RfbG9jazsKCgogICAgICAgIHN0 cnVjdCB0YXNrX3N0cnVjdCAqZ2NfdGFzazsKICAgICAgICBzdHJ1Y3Qgc2VtYXBob3JlIGdjX3Ro cmVhZF9zdGFydDsKICAgICAgICBzdHJ1Y3QgY29tcGxldGlvbiBnY190aHJlYWRfZXhpdDsKCgoK ICAgICAgICBzdHJ1Y3Qgc2VtYXBob3JlIGFsbG9jX3NlbTsKCgoKCiAgICAgICAgX191MzIgZmxh c2hfc2l6ZTsKICAgICAgICBfX3UzMiB1c2VkX3NpemU7CiAgICAgICAgX191MzIgZGlydHlfc2l6 ZTsKICAgICAgICBfX3UzMiBmcmVlX3NpemU7CiAgICAgICAgX191MzIgZXJhc2luZ19zaXplOwog ICAgICAgIF9fdTMyIGJhZF9zaXplOwogICAgICAgIF9fdTMyIHNlY3Rvcl9zaXplOwoKCgogICAg ICAgIF9fdTMyIG5yX2ZyZWVfYmxvY2tzOwogICAgICAgIF9fdTMyIG5yX2VyYXNpbmdfYmxvY2tz OwoKICAgICAgICBfX3UzMiBucl9ibG9ja3M7CiAgICAgICAgc3RydWN0IGpmZnMyX2VyYXNlYmxv Y2sgKmJsb2NrczsKCiAgICAgICAgc3RydWN0IGpmZnMyX2VyYXNlYmxvY2sgKm5leHRibG9jazsK CiAgICAgICAgc3RydWN0IGpmZnMyX2VyYXNlYmxvY2sgKmdjYmxvY2s7CgogICAgICAgIHN0cnVj dCBsaXN0X2hlYWQgY2xlYW5fbGlzdDsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGRpcnR5X2xp c3Q7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBlcmFzaW5nX2xpc3Q7CiAgICAgICAgc3RydWN0 IGxpc3RfaGVhZCBlcmFzZV9wZW5kaW5nX2xpc3Q7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBl cmFzZV9jb21wbGV0ZV9saXN0OwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgZnJlZV9saXN0Owog ICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgYmFkX2xpc3Q7CiAgICAgICAgc3RydWN0IGxpc3RfaGVh ZCBiYWRfdXNlZF9saXN0OwoKICAgICAgICBzcGlubG9ja190IGVyYXNlX2NvbXBsZXRpb25fbG9j azsKCiAgICAgICAgd2FpdF9xdWV1ZV9oZWFkX3QgZXJhc2Vfd2FpdDsKICAgICAgICBzdHJ1Y3Qg amZmczJfaW5vZGVfY2FjaGUgKmlub2NhY2hlX2xpc3RbMV07CiAgICAgICAgc3BpbmxvY2tfdCBp bm9jYWNoZV9sb2NrOwp9OwojIDcxMSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGlu dXgvZnMuaCIgMgoKZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgc3VwZXJfYmxvY2tzOwpleHRlcm4g c3BpbmxvY2tfdCBzYl9sb2NrOwoKCgpzdHJ1Y3Qgc3VwZXJfYmxvY2sgewogICAgICAgIHN0cnVj dCBsaXN0X2hlYWQgc19saXN0OwogICAgICAgIGtkZXZfdCBzX2RldjsKICAgICAgICB1bnNpZ25l ZCBsb25nIHNfYmxvY2tzaXplOwogICAgICAgIHVuc2lnbmVkIGNoYXIgc19ibG9ja3NpemVfYml0 czsKICAgICAgICB1bnNpZ25lZCBjaGFyIHNfZGlydDsKICAgICAgICB1bnNpZ25lZCBsb25nIGxv bmcgc19tYXhieXRlczsKICAgICAgICBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqc190eXBlOwog ICAgICAgIHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zICpzX29wOwogICAgICAgIHN0cnVjdCBkcXVv dF9vcGVyYXRpb25zICpkcV9vcDsKICAgICAgICB1bnNpZ25lZCBsb25nIHNfZmxhZ3M7CiAgICAg ICAgdW5zaWduZWQgbG9uZyBzX21hZ2ljOwogICAgICAgIHN0cnVjdCBkZW50cnkgKnNfcm9vdDsK ICAgICAgICBzdHJ1Y3Qgcndfc2VtYXBob3JlIHNfdW1vdW50OwogICAgICAgIHN0cnVjdCBzZW1h cGhvcmUgc19sb2NrOwogICAgICAgIGludCBzX2NvdW50OwogICAgICAgIGF0b21pY190IHNfYWN0 aXZlOwoKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIHNfZGlydHk7CiAgICAgICAgc3RydWN0IGxp c3RfaGVhZCBzX2xvY2tlZF9pbm9kZXM7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBzX2ZpbGVz OwoKICAgICAgICBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpzX2JkZXY7CiAgICAgICAgc3RydWN0IGxp c3RfaGVhZCBzX2luc3RhbmNlczsKICAgICAgICBzdHJ1Y3QgcXVvdGFfbW91bnRfb3B0aW9ucyBz X2RxdW90OwoKICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgbWluaXhfc2Jf aW5mbyBtaW5peF9zYjsKICAgICAgICAgICAgICAgIHN0cnVjdCBleHQyX3NiX2luZm8gZXh0Ml9z YjsKICAgICAgICAgICAgICAgIHN0cnVjdCBleHQzX3NiX2luZm8gZXh0M19zYjsKICAgICAgICAg ICAgICAgIHN0cnVjdCBocGZzX3NiX2luZm8gaHBmc19zYjsKICAgICAgICAgICAgICAgIHN0cnVj dCBudGZzX3NiX2luZm8gbnRmc19zYjsKICAgICAgICAgICAgICAgIHN0cnVjdCBtc2Rvc19zYl9p bmZvIG1zZG9zX3NiOwogICAgICAgICAgICAgICAgc3RydWN0IGlzb2ZzX3NiX2luZm8gaXNvZnNf c2I7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgbmZzX3NiX2luZm8gbmZzX3NiOwogICAgICAgICAg ICAgICAgc3RydWN0IHN5c3Zfc2JfaW5mbyBzeXN2X3NiOwogICAgICAgICAgICAgICAgc3RydWN0 IGFmZnNfc2JfaW5mbyBhZmZzX3NiOwogICAgICAgICAgICAgICAgc3RydWN0IHVmc19zYl9pbmZv IHVmc19zYjsKICAgICAgICAgICAgICAgIHN0cnVjdCBlZnNfc2JfaW5mbyBlZnNfc2I7CiAgICAg ICAgICAgICAgICBzdHJ1Y3Qgc2htZW1fc2JfaW5mbyBzaG1lbV9zYjsKICAgICAgICAgICAgICAg IHN0cnVjdCByb21mc19zYl9pbmZvIHJvbWZzX3NiOwogICAgICAgICAgICAgICAgc3RydWN0IHNt Yl9zYl9pbmZvIHNtYmZzX3NiOwogICAgICAgICAgICAgICAgc3RydWN0IGhmc19zYl9pbmZvIGhm c19zYjsKICAgICAgICAgICAgICAgIHN0cnVjdCBhZGZzX3NiX2luZm8gYWRmc19zYjsKICAgICAg ICAgICAgICAgIHN0cnVjdCBxbng0X3NiX2luZm8gcW54NF9zYjsKICAgICAgICAgICAgICAgIHN0 cnVjdCByZWlzZXJmc19zYl9pbmZvIHJlaXNlcmZzX3NiOwogICAgICAgICAgICAgICAgc3RydWN0 IGJmc19zYl9pbmZvIGJmc19zYjsKICAgICAgICAgICAgICAgIHN0cnVjdCB1ZGZfc2JfaW5mbyB1 ZGZfc2I7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgbmNwX3NlcnZlciBuY3Bmc19zYjsKICAgICAg ICAgICAgICAgIHN0cnVjdCB1c2JkZXZfc2JfaW5mbyB1c2JkZXZmc19zYjsKICAgICAgICAgICAg ICAgIHN0cnVjdCBqZmZzMl9zYl9pbmZvIGpmZnMyX3NiOwogICAgICAgICAgICAgICAgc3RydWN0 IGNyYW1mc19zYl9pbmZvIGNyYW1mc19zYjsKICAgICAgICAgICAgICAgIHZvaWQgKmdlbmVyaWNf c2JwOwogICAgICAgIH0gdTsKCgoKCiAgICAgICAgc3RydWN0IHNlbWFwaG9yZSBzX3Zmc19yZW5h bWVfc2VtOwojIDc4NCAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvZnMuaCIK ICAgICAgICBzdHJ1Y3Qgc2VtYXBob3JlIHNfbmZzZF9mcmVlX3BhdGhfc2VtOwoKICAgICAgICBp bnQgc19tZWRpYV9jaGFuZ2VkOwoKfTsKCgoKCmV4dGVybiBpbnQgdmZzX2NyZWF0ZShzdHJ1Y3Qg aW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqLCBpbnQpOwpleHRlcm4gaW50IHZmc19ta2RpcihzdHJ1 Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqLCBpbnQpOwpleHRlcm4gaW50IHZmc19ta25vZChz dHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqLCBpbnQsIGRldl90KTsKZXh0ZXJuIGludCB2 ZnNfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqLCBjb25zdCBjaGFyICop OwpleHRlcm4gaW50IHZmc19saW5rKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlub2RlICosIHN0 cnVjdCBkZW50cnkgKik7CmV4dGVybiBpbnQgdmZzX3JtZGlyKHN0cnVjdCBpbm9kZSAqLCBzdHJ1 Y3QgZGVudHJ5ICopOwpleHRlcm4gaW50IHZmc191bmxpbmsoc3RydWN0IGlub2RlICosIHN0cnVj dCBkZW50cnkgKik7CmV4dGVybiBpbnQgdmZzX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0 IGRlbnRyeSAqLCBzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqKTsKCnN0cnVjdCBrc3Rh dCB7CiAgICAgICAgaW5vX3QgaW5vOwogICAgICAgIGF0b21pY190IGNvdW50OwogICAgICAgIGRl dl90IGRldjsKICAgICAgICB1bW9kZV90IG1vZGU7CiAgICAgICAgbmxpbmtfdCBubGluazsKICAg ICAgICB1aWRfdCB1aWQ7CiAgICAgICAgZ2lkX3QgZ2lkOwogICAgICAgIGRldl90IHJkZXY7CiAg ICAgICAgbG9mZl90IHNpemU7CiAgICAgICAgdGltZV90IGF0aW1lOwogICAgICAgIHRpbWVfdCBt dGltZTsKICAgICAgICB0aW1lX3QgY3RpbWU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBibGtzaXpl OwogICAgICAgIHVuc2lnbmVkIGxvbmcgYmxvY2tzOwp9OwojIDgzOCAiL3Vzci9zcmMvbGludXgt Mi40LjIwL2luY2x1ZGUvbGludXgvZnMuaCIKdHlwZWRlZiBpbnQgKCpmaWxsZGlyX3QpKHZvaWQg KiwgY29uc3QgY2hhciAqLCBpbnQsIGxvZmZfdCwgaW5vX3QsIHVuc2lnbmVkKTsKCnN0cnVjdCBi bG9ja19kZXZpY2Vfb3BlcmF0aW9ucyB7CiAgICAgICAgaW50ICgqb3BlbikgKHN0cnVjdCBpbm9k ZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKICAgICAgICBpbnQgKCpyZWxlYXNlKSAoc3RydWN0IGlub2Rl ICosIHN0cnVjdCBmaWxlICopOwogICAgICAgIGludCAoKmlvY3RsKSAoc3RydWN0IGlub2RlICos IHN0cnVjdCBmaWxlICosIHVuc2lnbmVkLCB1bnNpZ25lZCBsb25nKTsKICAgICAgICBpbnQgKCpj aGVja19tZWRpYV9jaGFuZ2UpIChrZGV2X3QpOwogICAgICAgIGludCAoKnJldmFsaWRhdGUpIChr ZGV2X3QpOwogICAgICAgIHN0cnVjdCBtb2R1bGUgKm93bmVyOwogICAgICAgIGludCAoKm1lZGlh Y3RsKSAoa2Rldl90IGRldiwgaW50IG9wLCBpbnQgb3B0YXJnKTsKfTsKCgoKCgplbnVtIHsKICAg ICAgICBNRURJQV9MT0NLID0gMTIzNCwKICAgICAgICBNRURJQV9VTkxPQ0sKfTsKCgoKCgoKc3Ry dWN0IGZpbGVfb3BlcmF0aW9ucyB7CiAgICAgICAgc3RydWN0IG1vZHVsZSAqb3duZXI7CiAgICAg ICAgbG9mZl90ICgqbGxzZWVrKSAoc3RydWN0IGZpbGUgKiwgbG9mZl90LCBpbnQpOwogICAgICAg IHNzaXplX3QgKCpyZWFkKSAoc3RydWN0IGZpbGUgKiwgY2hhciAqLCBzaXplX3QsIGxvZmZfdCAq KTsKICAgICAgICBzc2l6ZV90ICgqd3JpdGUpIChzdHJ1Y3QgZmlsZSAqLCBjb25zdCBjaGFyICos IHNpemVfdCwgbG9mZl90ICopOwogICAgICAgIGludCAoKnJlYWRkaXIpIChzdHJ1Y3QgZmlsZSAq LCB2b2lkICosIGZpbGxkaXJfdCk7CiAgICAgICAgdW5zaWduZWQgaW50ICgqcG9sbCkgKHN0cnVj dCBmaWxlICosIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqKTsKICAgICAgICBpbnQgKCppb2N0 bCkgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVk IGxvbmcpOwogICAgICAgIGludCAoKm1tYXApIChzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3Qgdm1fYXJl YV9zdHJ1Y3QgKik7CiAgICAgICAgaW50ICgqb3BlbikgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3Qg ZmlsZSAqKTsKICAgICAgICBpbnQgKCpmbHVzaCkgKHN0cnVjdCBmaWxlICopOwogICAgICAgIGlu dCAoKnJlbGVhc2UpIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CiAgICAgICAgaW50 ICgqZnN5bmMpIChzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIGludCBkYXRhc3luYyk7 CiAgICAgICAgaW50ICgqZmFzeW5jKSAoaW50LCBzdHJ1Y3QgZmlsZSAqLCBpbnQpOwogICAgICAg IGludCAoKmxvY2spIChzdHJ1Y3QgZmlsZSAqLCBpbnQsIHN0cnVjdCBmaWxlX2xvY2sgKik7CiAg ICAgICAgc3NpemVfdCAoKnJlYWR2KSAoc3RydWN0IGZpbGUgKiwgY29uc3Qgc3RydWN0IGlvdmVj ICosIHVuc2lnbmVkIGxvbmcsIGxvZmZfdCAqKTsKICAgICAgICBzc2l6ZV90ICgqd3JpdGV2KSAo c3RydWN0IGZpbGUgKiwgY29uc3Qgc3RydWN0IGlvdmVjICosIHVuc2lnbmVkIGxvbmcsIGxvZmZf dCAqKTsKICAgICAgICBzc2l6ZV90ICgqc2VuZHBhZ2UpIChzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3Qg cGFnZSAqLCBpbnQsIHNpemVfdCwgbG9mZl90ICosIGludCk7CiAgICAgICAgdW5zaWduZWQgbG9u ZyAoKmdldF91bm1hcHBlZF9hcmVhKShzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBsb25nLCB1bnNp Z25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKfTsKCnN0cnVjdCBpbm9k ZV9vcGVyYXRpb25zIHsKICAgICAgICBpbnQgKCpjcmVhdGUpIChzdHJ1Y3QgaW5vZGUgKixzdHJ1 Y3QgZGVudHJ5ICosaW50KTsKICAgICAgICBzdHJ1Y3QgZGVudHJ5ICogKCpsb29rdXApIChzdHJ1 Y3QgaW5vZGUgKixzdHJ1Y3QgZGVudHJ5ICopOwogICAgICAgIGludCAoKmxpbmspIChzdHJ1Y3Qg ZGVudHJ5ICosc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqKTsKICAgICAgICBpbnQgKCp1 bmxpbmspIChzdHJ1Y3QgaW5vZGUgKixzdHJ1Y3QgZGVudHJ5ICopOwogICAgICAgIGludCAoKnN5 bWxpbmspIChzdHJ1Y3QgaW5vZGUgKixzdHJ1Y3QgZGVudHJ5ICosY29uc3QgY2hhciAqKTsKICAg ICAgICBpbnQgKCpta2RpcikgKHN0cnVjdCBpbm9kZSAqLHN0cnVjdCBkZW50cnkgKixpbnQpOwog ICAgICAgIGludCAoKnJtZGlyKSAoc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqKTsKICAg ICAgICBpbnQgKCpta25vZCkgKHN0cnVjdCBpbm9kZSAqLHN0cnVjdCBkZW50cnkgKixpbnQsaW50 KTsKICAgICAgICBpbnQgKCpyZW5hbWUpIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAq LAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAq KTsKICAgICAgICBpbnQgKCpyZWFkbGluaykgKHN0cnVjdCBkZW50cnkgKiwgY2hhciAqLGludCk7 CiAgICAgICAgaW50ICgqZm9sbG93X2xpbmspIChzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBuYW1l aWRhdGEgKik7CiAgICAgICAgdm9pZCAoKnRydW5jYXRlKSAoc3RydWN0IGlub2RlICopOwogICAg ICAgIGludCAoKnBlcm1pc3Npb24pIChzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKICAgICAgICBpbnQg KCpyZXZhbGlkYXRlKSAoc3RydWN0IGRlbnRyeSAqKTsKICAgICAgICBpbnQgKCpzZXRhdHRyKSAo c3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgaWF0dHIgKik7CiAgICAgICAgaW50ICgqZ2V0YXR0cikg KHN0cnVjdCB2ZnNtb3VudCAqLCBzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBrc3RhdCAqKTsKICAg ICAgICBpbnQgKCpzZXR4YXR0cikgKHN0cnVjdCBkZW50cnkgKiwgY29uc3QgY2hhciAqLCB2b2lk ICosIHNpemVfdCwgaW50KTsKICAgICAgICBzc2l6ZV90ICgqZ2V0eGF0dHIpIChzdHJ1Y3QgZGVu dHJ5ICosIGNvbnN0IGNoYXIgKiwgdm9pZCAqLCBzaXplX3QpOwogICAgICAgIHNzaXplX3QgKCps aXN0eGF0dHIpIChzdHJ1Y3QgZGVudHJ5ICosIGNoYXIgKiwgc2l6ZV90KTsKICAgICAgICBpbnQg KCpyZW1vdmV4YXR0cikgKHN0cnVjdCBkZW50cnkgKiwgY29uc3QgY2hhciAqKTsKfTsKCnN0cnVj dCBzZXFfZmlsZTsKCgoKCgpzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyB7CiAgICAgICAgc3RydWN0 IGlub2RlICooKmFsbG9jX2lub2RlKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKICAgICAgICB2 b2lkICgqZGVzdHJveV9pbm9kZSkoc3RydWN0IGlub2RlICopOwoKICAgICAgICB2b2lkICgqcmVh ZF9pbm9kZSkgKHN0cnVjdCBpbm9kZSAqKTsKCgoKCgoKCiAgICAgICAgdm9pZCAoKnJlYWRfaW5v ZGUyKSAoc3RydWN0IGlub2RlICosIHZvaWQgKikgOwogICAgICAgIHZvaWQgKCpkaXJ0eV9pbm9k ZSkgKHN0cnVjdCBpbm9kZSAqKTsKICAgICAgICB2b2lkICgqd3JpdGVfaW5vZGUpIChzdHJ1Y3Qg aW5vZGUgKiwgaW50KTsKICAgICAgICB2b2lkICgqcHV0X2lub2RlKSAoc3RydWN0IGlub2RlICop OwogICAgICAgIHZvaWQgKCpkZWxldGVfaW5vZGUpIChzdHJ1Y3QgaW5vZGUgKik7CiAgICAgICAg dm9pZCAoKnB1dF9zdXBlcikgKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKICAgICAgICB2b2lkICgq d3JpdGVfc3VwZXIpIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CiAgICAgICAgaW50ICgqc3luY19m cykgKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKICAgICAgICB2b2lkICgqd3JpdGVfc3VwZXJfbG9j a2ZzKSAoc3RydWN0IHN1cGVyX2Jsb2NrICopOwogICAgICAgIHZvaWQgKCp1bmxvY2tmcykgKHN0 cnVjdCBzdXBlcl9ibG9jayAqKTsKICAgICAgICBpbnQgKCpzdGF0ZnMpIChzdHJ1Y3Qgc3VwZXJf YmxvY2sgKiwgc3RydWN0IHN0YXRmcyAqKTsKICAgICAgICBpbnQgKCpyZW1vdW50X2ZzKSAoc3Ry dWN0IHN1cGVyX2Jsb2NrICosIGludCAqLCBjaGFyICopOwogICAgICAgIHZvaWQgKCpjbGVhcl9p bm9kZSkgKHN0cnVjdCBpbm9kZSAqKTsKICAgICAgICB2b2lkICgqdW1vdW50X2JlZ2luKSAoc3Ry dWN0IHN1cGVyX2Jsb2NrICopOwojIDk2NCAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUv bGludXgvZnMuaCIKICAgICAgICBzdHJ1Y3QgZGVudHJ5ICogKCpmaF90b19kZW50cnkpKHN0cnVj dCBzdXBlcl9ibG9jayAqc2IsIF9fdTMyICpmaCwgaW50IGxlbiwgaW50IGZodHlwZSwgaW50IHBh cmVudCk7CiAgICAgICAgaW50ICgqZGVudHJ5X3RvX2ZoKShzdHJ1Y3QgZGVudHJ5ICosIF9fdTMy ICpmaCwgaW50ICpsZW5wLCBpbnQgbmVlZF9wYXJlbnQpOwogICAgICAgIGludCAoKnNob3dfb3B0 aW9ucykoc3RydWN0IHNlcV9maWxlICosIHN0cnVjdCB2ZnNtb3VudCAqKTsKfTsKIyA5NzkgIi91 c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L2ZzLmgiCmV4dGVybiB2b2lkIF9fbWFy a19pbm9kZV9kaXJ0eShzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKc3RhdGljIGlubGluZSB2b2lkIG1h cmtfaW5vZGVfZGlydHkoc3RydWN0IGlub2RlICppbm9kZSkKewogICAgICAgIF9fbWFya19pbm9k ZV9kaXJ0eShpbm9kZSwgKDEgfCAyIHwgNCkpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgbWFya19p bm9kZV9kaXJ0eV9zeW5jKHN0cnVjdCBpbm9kZSAqaW5vZGUpCnsKICAgICAgICBfX21hcmtfaW5v ZGVfZGlydHkoaW5vZGUsIDEpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgbWFya19pbm9kZV9kaXJ0 eV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQp7CiAgICAgICAgX19tYXJrX2lub2RlX2RpcnR5 KGlub2RlLCA0KTsKfQoKc3RydWN0IGRxdW90X29wZXJhdGlvbnMgewogICAgICAgIHZvaWQgKCpp bml0aWFsaXplKSAoc3RydWN0IGlub2RlICosIHNob3J0KTsKICAgICAgICB2b2lkICgqZHJvcCkg KHN0cnVjdCBpbm9kZSAqKTsKICAgICAgICBpbnQgKCphbGxvY19ibG9jaykgKHN0cnVjdCBpbm9k ZSAqLCB1bnNpZ25lZCBsb25nLCBjaGFyKTsKICAgICAgICBpbnQgKCphbGxvY19pbm9kZSkgKGNv bnN0IHN0cnVjdCBpbm9kZSAqLCB1bnNpZ25lZCBsb25nKTsKICAgICAgICB2b2lkICgqZnJlZV9i bG9jaykgKHN0cnVjdCBpbm9kZSAqLCB1bnNpZ25lZCBsb25nKTsKICAgICAgICB2b2lkICgqZnJl ZV9pbm9kZSkgKGNvbnN0IHN0cnVjdCBpbm9kZSAqLCB1bnNpZ25lZCBsb25nKTsKICAgICAgICBp bnQgKCp0cmFuc2ZlcikgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaWF0dHIgKik7Cn07CgpzdHJ1 Y3QgZmlsZV9zeXN0ZW1fdHlwZSB7CiAgICAgICAgY29uc3QgY2hhciAqbmFtZTsKICAgICAgICBp bnQgZnNfZmxhZ3M7CiAgICAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICooKnJlYWRfc3VwZXIpIChz dHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdm9pZCAqLCBpbnQpOwogICAgICAgIHN0cnVjdCBtb2R1bGUg Km93bmVyOwogICAgICAgIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICogbmV4dDsKICAgICAgICBz dHJ1Y3QgbGlzdF9oZWFkIGZzX3N1cGVyczsKfTsKIyAxMDM3ICIvdXNyL3NyYy9saW51eC0yLjQu MjAvaW5jbHVkZS9saW51eC9mcy5oIgpleHRlcm4gaW50IHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oc3Ry dWN0IGZpbGVfc3lzdGVtX3R5cGUgKik7CmV4dGVybiBpbnQgdW5yZWdpc3Rlcl9maWxlc3lzdGVt KHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICopOwpleHRlcm4gc3RydWN0IHZmc21vdW50ICprZXJu X21vdW50KHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICopOwpleHRlcm4gaW50IG1heV91bW91bnQo c3RydWN0IHZmc21vdW50ICopOwpleHRlcm4gbG9uZyBkb19tb3VudChjaGFyICosIGNoYXIgKiwg Y2hhciAqLCB1bnNpZ25lZCBsb25nLCB2b2lkICopOwpleHRlcm4gc3RydWN0IHZmc21vdW50ICpk b19rZXJuX21vdW50KGNvbnN0IGNoYXIgKnR5cGUsIGludCBmbGFncywgY2hhciAqbmFtZSwgdm9p ZCAqZGF0YSk7CmV4dGVybiBpbnQgZG9fcmVtb3VudF9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNi LCBpbnQgZmxhZ3MsIHZvaWQgKiBkYXRhKTsKCgoKZXh0ZXJuIGludCB2ZnNfc3RhdGZzKHN0cnVj dCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3Qgc3RhdGZzICopOwojIDEwNTcgIi91c3Ivc3JjL2xpbnV4 LTIuNC4yMC9pbmNsdWRlL2xpbnV4L2ZzLmgiCmV4dGVybiBpbnQgbG9ja3NfbWFuZGF0b3J5X2xv Y2tlZChzdHJ1Y3QgaW5vZGUgKik7CmV4dGVybiBpbnQgbG9ja3NfbWFuZGF0b3J5X2FyZWEoaW50 LCBzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKiwgbG9mZl90LCBzaXplX3QpOwojIDEwNjcg Ii91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L2ZzLmgiCnN0YXRpYyBpbmxpbmUg aW50IGxvY2tzX3ZlcmlmeV9sb2NrZWQoc3RydWN0IGlub2RlICppbm9kZSkKewogICAgICAgIGlm ICgoKChpbm9kZSktPmlfc2ItPnNfZmxhZ3MgJiAoNjQpKSAmJiAoKGlub2RlKS0+aV9tb2RlICYg KDAwMDIwMDAgfCAwMDAxMCkpID09IDAwMDIwMDApKQogICAgICAgICAgICAgICAgcmV0dXJuIGxv Y2tzX21hbmRhdG9yeV9sb2NrZWQoaW5vZGUpOwogICAgICAgIHJldHVybiAwOwp9CgpzdGF0aWMg aW5saW5lIGludCBsb2Nrc192ZXJpZnlfYXJlYShpbnQgcmVhZF93cml0ZSwgc3RydWN0IGlub2Rl ICppbm9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGZpbGUg KmZpbHAsIGxvZmZfdCBvZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNpemVfdCBjb3VudCkKewogICAgICAgIGlmIChpbm9kZS0+aV9mbG9jayAmJiAoKChpbm9kZSkt Pmlfc2ItPnNfZmxhZ3MgJiAoNjQpKSAmJiAoKGlub2RlKS0+aV9tb2RlICYgKDAwMDIwMDAgfCAw MDAxMCkpID09IDAwMDIwMDApKQogICAgICAgICAgICAgICAgcmV0dXJuIGxvY2tzX21hbmRhdG9y eV9hcmVhKHJlYWRfd3JpdGUsIGlub2RlLCBmaWxwLCBvZmZzZXQsIGNvdW50KTsKICAgICAgICBy ZXR1cm4gMDsKfQoKc3RhdGljIGlubGluZSBpbnQgbG9ja3NfdmVyaWZ5X3RydW5jYXRlKHN0cnVj dCBpbm9kZSAqaW5vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCBmaWxlICpmaWxwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2ZmX3Qg c2l6ZSkKewogICAgICAgIGlmIChpbm9kZS0+aV9mbG9jayAmJiAoKChpbm9kZSktPmlfc2ItPnNf ZmxhZ3MgJiAoNjQpKSAmJiAoKGlub2RlKS0+aV9tb2RlICYgKDAwMDIwMDAgfCAwMDAxMCkpID09 IDAwMDIwMDApKQogICAgICAgICAgICAgICAgcmV0dXJuIGxvY2tzX21hbmRhdG9yeV9hcmVhKAog ICAgICAgICAgICAgICAgICAgICAgICAyLCBpbm9kZSwgZmlscCwKICAgICAgICAgICAgICAgICAg ICAgICAgc2l6ZSA8IGlub2RlLT5pX3NpemUgPyBzaXplIDogaW5vZGUtPmlfc2l6ZSwKICAgICAg ICAgICAgICAgICAgICAgICAgKHNpemUgPCBpbm9kZS0+aV9zaXplID8gaW5vZGUtPmlfc2l6ZSAt IHNpemUKICAgICAgICAgICAgICAgICAgICAgICAgIDogc2l6ZSAtIGlub2RlLT5pX3NpemUpCiAg ICAgICAgICAgICAgICApOwogICAgICAgIHJldHVybiAwOwp9CgpzdGF0aWMgaW5saW5lIGludCBn ZXRfbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgaW50IG1vZGUpCnsKICAgICAg ICBpZiAoaW5vZGUtPmlfZmxvY2spCiAgICAgICAgICAgICAgICByZXR1cm4gX19nZXRfbGVhc2Uo aW5vZGUsIG1vZGUpOwogICAgICAgIHJldHVybiAwOwp9CgoKCiBfX2F0dHJpYnV0ZV9fKChyZWdw YXJtKDApKSkgbG9uZyBzeXNfb3Blbihjb25zdCBjaGFyICosIGludCwgaW50KTsKIF9fYXR0cmli dXRlX18oKHJlZ3Bhcm0oMCkpKSBsb25nIHN5c19jbG9zZSh1bnNpZ25lZCBpbnQpOwpleHRlcm4g aW50IGRvX3RydW5jYXRlKHN0cnVjdCBkZW50cnkgKiwgbG9mZl90IHN0YXJ0KTsKCmV4dGVybiBz dHJ1Y3QgZmlsZSAqZmlscF9vcGVuKGNvbnN0IGNoYXIgKiwgaW50LCBpbnQpOwpleHRlcm4gc3Ry dWN0IGZpbGUgKiBkZW50cnlfb3BlbihzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCB2ZnNtb3VudCAq LCBpbnQpOwpleHRlcm4gaW50IGZpbHBfY2xvc2Uoc3RydWN0IGZpbGUgKiwgZmxfb3duZXJfdCBp ZCk7CmV4dGVybiBjaGFyICogZ2V0bmFtZShjb25zdCBjaGFyICopOwoKCmV4dGVybiB2b2lkIHZm c19jYWNoZXNfaW5pdCh1bnNpZ25lZCBsb25nKTsKCgoKCmVudW0ge0JERVZfRklMRSwgQkRFVl9T V0FQLCBCREVWX0ZTLCBCREVWX1JBV307CmV4dGVybiBpbnQgcmVnaXN0ZXJfYmxrZGV2KHVuc2ln bmVkIGludCwgY29uc3QgY2hhciAqLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgKik7 CmV4dGVybiBpbnQgdW5yZWdpc3Rlcl9ibGtkZXYodW5zaWduZWQgaW50LCBjb25zdCBjaGFyICop OwpleHRlcm4gc3RydWN0IGJsb2NrX2RldmljZSAqYmRnZXQoZGV2X3QpOwpleHRlcm4gaW50IGJk X2FjcXVpcmUoc3RydWN0IGlub2RlICppbm9kZSk7CmV4dGVybiB2b2lkIGJkX2ZvcmdldChzdHJ1 Y3QgaW5vZGUgKmlub2RlKTsKZXh0ZXJuIHZvaWQgYmRwdXQoc3RydWN0IGJsb2NrX2RldmljZSAq KTsKZXh0ZXJuIHN0cnVjdCBjaGFyX2RldmljZSAqY2RnZXQoZGV2X3QpOwpleHRlcm4gdm9pZCBj ZHB1dChzdHJ1Y3QgY2hhcl9kZXZpY2UgKik7CmV4dGVybiBpbnQgYmxrZGV2X29wZW4oc3RydWN0 IGlub2RlICosIHN0cnVjdCBmaWxlICopOwpleHRlcm4gaW50IGJsa2Rldl9jbG9zZShzdHJ1Y3Qg aW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CmV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRl Zl9ibGtfZm9wczsKZXh0ZXJuIHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZGVmX2Js a19hb3BzOwpleHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWZfZmlmb19mb3BzOwpleHRl cm4gaW50IGlvY3RsX2J5X2JkZXYoc3RydWN0IGJsb2NrX2RldmljZSAqLCB1bnNpZ25lZCwgdW5z aWduZWQgbG9uZyk7CmV4dGVybiBpbnQgYmxrZGV2X2dldChzdHJ1Y3QgYmxvY2tfZGV2aWNlICos IG1vZGVfdCwgdW5zaWduZWQsIGludCk7CmV4dGVybiBpbnQgYmxrZGV2X3B1dChzdHJ1Y3QgYmxv Y2tfZGV2aWNlICosIGludCk7CgoKZXh0ZXJuIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3Bl cmF0aW9ucyAqZ2V0X2Jsa2ZvcHModW5zaWduZWQgaW50KTsKZXh0ZXJuIGludCByZWdpc3Rlcl9j aHJkZXYodW5zaWduZWQgaW50LCBjb25zdCBjaGFyICosIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMg Kik7CmV4dGVybiBpbnQgdW5yZWdpc3Rlcl9jaHJkZXYodW5zaWduZWQgaW50LCBjb25zdCBjaGFy ICopOwpleHRlcm4gaW50IGNocmRldl9vcGVuKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAq KTsKZXh0ZXJuIGNvbnN0IGNoYXIgKiBiZGV2bmFtZShrZGV2X3QpOwpleHRlcm4gY29uc3QgY2hh ciAqIGNkZXZuYW1lKGtkZXZfdCk7CmV4dGVybiBjb25zdCBjaGFyICoga2Rldm5hbWUoa2Rldl90 KTsKZXh0ZXJuIHZvaWQgaW5pdF9zcGVjaWFsX2lub2RlKHN0cnVjdCBpbm9kZSAqLCB1bW9kZV90 LCBpbnQpOwoKCmV4dGVybiB2b2lkIG1ha2VfYmFkX2lub2RlKHN0cnVjdCBpbm9kZSAqKTsKZXh0 ZXJuIGludCBpc19iYWRfaW5vZGUoc3RydWN0IGlub2RlICopOwoKZXh0ZXJuIHN0cnVjdCBmaWxl X29wZXJhdGlvbnMgcmVhZF9maWZvX2ZvcHM7CmV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25z IHdyaXRlX2ZpZm9fZm9wczsKZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmR3cl9maWZv X2ZvcHM7CmV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJlYWRfcGlwZV9mb3BzOwpleHRl cm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB3cml0ZV9waXBlX2ZvcHM7CmV4dGVybiBzdHJ1Y3Qg ZmlsZV9vcGVyYXRpb25zIHJkd3JfcGlwZV9mb3BzOwoKZXh0ZXJuIGludCBmc19tYXlfcmVtb3Vu dF9ybyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CgpleHRlcm4gaW50IHRyeV90b19mcmVlX2J1ZmZl cnMoc3RydWN0IHBhZ2UgKiwgdW5zaWduZWQgaW50KSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMp KSk7CmV4dGVybiB2b2lkIHJlZmlsZV9idWZmZXIoc3RydWN0IGJ1ZmZlcl9oZWFkICogYnVmKTsK ZXh0ZXJuIHZvaWQgY3JlYXRlX2VtcHR5X2J1ZmZlcnMoc3RydWN0IHBhZ2UgKiwga2Rldl90LCB1 bnNpZ25lZCBsb25nKTsKZXh0ZXJuIHZvaWQgZW5kX2J1ZmZlcl9pb19zeW5jKHN0cnVjdCBidWZm ZXJfaGVhZCAqYmgsIGludCB1cHRvZGF0ZSk7CgoKZXh0ZXJuIHZvaWQgc2V0X2J1ZmZlcl9hc3lu Y19pbyhzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKSA7CgoKCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCBn ZXRfYmgoc3RydWN0IGJ1ZmZlcl9oZWFkICogYmgpCnsKICAgICAgICBhdG9taWNfaW5jKCYoYmgp LT5iX2NvdW50KTsKfQoKc3RhdGljIGlubGluZSB2b2lkIHB1dF9iaChzdHJ1Y3QgYnVmZmVyX2hl YWQgKmJoKQp7CiAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oIiI6IDogOiJtZW1vcnkiKTsK ICAgICAgICBhdG9taWNfZGVjKCZiaC0+Yl9jb3VudCk7Cn0KCgoKCnN0YXRpYyBpbmxpbmUgdm9p ZCBtYXJrX2J1ZmZlcl91cHRvZGF0ZShzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBiaCwgaW50IG9uKQp7 CiAgICAgICAgaWYgKG9uKQogICAgICAgICAgICAgICAgc2V0X2JpdChCSF9VcHRvZGF0ZSwgJmJo LT5iX3N0YXRlKTsKICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBjbGVhcl9iaXQoQkhfVXB0 b2RhdGUsICZiaC0+Yl9zdGF0ZSk7Cn0KCgoKc3RhdGljIGlubGluZSB2b2lkIF9fbWFya19idWZm ZXJfY2xlYW4oc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKewogICAgICAgIHJlZmlsZV9idWZmZXIo YmgpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgbWFya19idWZmZXJfY2xlYW4oc3RydWN0IGJ1ZmZl cl9oZWFkICogYmgpCnsKICAgICAgICBpZiAodGVzdF9hbmRfY2xlYXJfYml0KEJIX0RpcnR5LCAm KGJoKS0+Yl9zdGF0ZSkpCiAgICAgICAgICAgICAgICBfX21hcmtfYnVmZmVyX2NsZWFuKGJoKTsK fQoKZXh0ZXJuIHZvaWQgX19tYXJrX2RpcnR5KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpIF9fYXR0 cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKZXh0ZXJuIHZvaWQgX19tYXJrX2J1ZmZlcl9kaXJ0eShz dHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CmV4dGVy biB2b2lkIG1hcmtfYnVmZmVyX2RpcnR5KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpIF9fYXR0cmli dXRlX18oKHJlZ3Bhcm0oMykpKTsKCmV4dGVybiB2b2lkIGJ1ZmZlcl9pbnNlcnRfbGlzdChzdHJ1 Y3QgYnVmZmVyX2hlYWQgKiwgc3RydWN0IGxpc3RfaGVhZCAqKSBfX2F0dHJpYnV0ZV9fKChyZWdw YXJtKDMpKSk7CgpzdGF0aWMgaW5saW5lIHZvaWQgYnVmZmVyX2luc2VydF9pbm9kZV9xdWV1ZShz dHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQp7CiAgICAgICAgYnVm ZmVyX2luc2VydF9saXN0KGJoLCAmaW5vZGUtPmlfZGlydHlfYnVmZmVycyk7Cn0KCnN0YXRpYyBp bmxpbmUgdm9pZCBidWZmZXJfaW5zZXJ0X2lub2RlX2RhdGFfcXVldWUoc3RydWN0IGJ1ZmZlcl9o ZWFkICpiaCwgc3RydWN0IGlub2RlICppbm9kZSkKewogICAgICAgIGJ1ZmZlcl9pbnNlcnRfbGlz dChiaCwgJmlub2RlLT5pX2RpcnR5X2RhdGFfYnVmZmVycyk7Cn0KCnN0YXRpYyBpbmxpbmUgaW50 IGF0b21pY19zZXRfYnVmZmVyX2RpcnR5KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCnsKICAgICAg ICByZXR1cm4gdGVzdF9hbmRfc2V0X2JpdChCSF9EaXJ0eSwgJmJoLT5iX3N0YXRlKTsKfQoKc3Rh dGljIGlubGluZSB2b2lkIG1hcmtfYnVmZmVyX2FzeW5jKHN0cnVjdCBidWZmZXJfaGVhZCAqIGJo LCBpbnQgb24pCnsKICAgICAgICBpZiAob24pCiAgICAgICAgICAgICAgICBzZXRfYml0KEJIX0Fz eW5jLCAmYmgtPmJfc3RhdGUpOwogICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGNsZWFyX2Jp dChCSF9Bc3luYywgJmJoLT5iX3N0YXRlKTsKfQoKc3RhdGljIGlubGluZSB2b2lkIHNldF9idWZm ZXJfYXR0YWNoZWQoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKewogICAgICAgIHNldF9iaXQoQkhf QXR0YWNoZWQsICZiaC0+Yl9zdGF0ZSk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9idWZm ZXJfYXR0YWNoZWQoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKewogICAgICAgIGNsZWFyX2JpdChC SF9BdHRhY2hlZCwgJmJoLT5iX3N0YXRlKTsKfQoKc3RhdGljIGlubGluZSBpbnQgYnVmZmVyX2F0 dGFjaGVkKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCnsKICAgICAgICByZXR1cm4gKF9fYnVpbHRp bl9jb25zdGFudF9wKEJIX0F0dGFjaGVkKSA/IGNvbnN0YW50X3Rlc3RfYml0KChCSF9BdHRhY2hl ZCksKCZiaC0+Yl9zdGF0ZSkpIDogdmFyaWFibGVfdGVzdF9iaXQoKEJIX0F0dGFjaGVkKSwoJmJo LT5iX3N0YXRlKSkpOwp9CgoKCgoKCgpzdGF0aWMgaW5saW5lIHZvaWQgYnVmZmVyX0lPX2Vycm9y KHN0cnVjdCBidWZmZXJfaGVhZCAqIGJoKQp7CiAgICAgICAgbWFya19idWZmZXJfY2xlYW4oYmgp OwoKCgogICAgICAgIGJoLT5iX2VuZF9pbyhiaCwgMCk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBt YXJrX2J1ZmZlcl9kaXJ0eV9pbm9kZShzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBzdHJ1Y3QgaW5v ZGUgKmlub2RlKQp7CiAgICAgICAgbWFya19idWZmZXJfZGlydHkoYmgpOwogICAgICAgIGJ1ZmZl cl9pbnNlcnRfaW5vZGVfcXVldWUoYmgsIGlub2RlKTsKfQoKZXh0ZXJuIHZvaWQgc2V0X2J1ZmZl cl9mbHVzaHRpbWUoc3RydWN0IGJ1ZmZlcl9oZWFkICopOwpleHRlcm4gdm9pZCBiYWxhbmNlX2Rp cnR5KHZvaWQpOwpleHRlcm4gaW50IGNoZWNrX2Rpc2tfY2hhbmdlKGtkZXZfdCk7CmV4dGVybiBp bnQgcXVlcnlfZGlza19jaGFuZ2Uoa2Rldl90IGRldik7CmV4dGVybiB2b2lkIGludmFsaWRhdGVf bWVkaWEoa2Rldl90IGRldik7CmV4dGVybiBpbnQgaW52YWxpZGF0ZV9pbm9kZXMoc3RydWN0IHN1 cGVyX2Jsb2NrICopOwpleHRlcm4gaW50IGludmFsaWRhdGVfZGV2aWNlKGtkZXZfdCwgaW50KTsK ZXh0ZXJuIGludCBkZXN0cm95X2RldmljZShrZGV2X3QpOwpleHRlcm4gdm9pZCBpbnZhbGlkYXRl X2lub2RlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqKTsKZXh0ZXJuIHZvaWQgaW52YWxpZGF0ZV9pbm9k ZV9wYWdlczIoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKik7CmV4dGVybiB2b2lkIGludmFsaWRhdGVf aW5vZGVfYnVmZmVycyhzdHJ1Y3QgaW5vZGUgKik7CgoKZXh0ZXJuIHZvaWQgaW52YWxpZGF0ZV9i ZGV2KHN0cnVjdCBibG9ja19kZXZpY2UgKiwgaW50KTsKZXh0ZXJuIHZvaWQgX19pbnZhbGlkYXRl X2J1ZmZlcnMoa2Rldl90IGRldiwgaW50KTsKZXh0ZXJuIHZvaWQgc3luY19pbm9kZXMoa2Rldl90 KTsKZXh0ZXJuIHZvaWQgc3luY191bmxvY2tlZF9pbm9kZXModm9pZCk7CmV4dGVybiB2b2lkIHdy aXRlX2lub2RlX25vdyhzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKZXh0ZXJuIGludCBzeW5jX2J1ZmZl cnMoa2Rldl90LCBpbnQpOwpleHRlcm4gdm9pZCBzeW5jX2RldihrZGV2X3QpOwpleHRlcm4gaW50 IGZzeW5jX2RldihrZGV2X3QpOwpleHRlcm4gaW50IGZzeW5jX3N1cGVyKHN0cnVjdCBzdXBlcl9i bG9jayAqKTsKZXh0ZXJuIGludCBmc3luY19ub19zdXBlcihrZGV2X3QpOwpleHRlcm4gdm9pZCBz eW5jX2lub2Rlc19zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CmV4dGVybiBpbnQgZnN5bmNfYnVm ZmVyc19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKik7CnN0YXRpYyBpbmxpbmUgaW50IGZzeW5jX2lu b2RlX2J1ZmZlcnMoc3RydWN0IGlub2RlICppbm9kZSkKewogICAgICAgIHJldHVybiBmc3luY19i dWZmZXJzX2xpc3QoJmlub2RlLT5pX2RpcnR5X2J1ZmZlcnMpOwp9CnN0YXRpYyBpbmxpbmUgaW50 IGZzeW5jX2lub2RlX2RhdGFfYnVmZmVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQp7CiAgICAgICAg cmV0dXJuIGZzeW5jX2J1ZmZlcnNfbGlzdCgmaW5vZGUtPmlfZGlydHlfZGF0YV9idWZmZXJzKTsK fQpleHRlcm4gaW50IGlub2RlX2hhc19idWZmZXJzKHN0cnVjdCBpbm9kZSAqKTsKZXh0ZXJuIGlu dCBmaWxlbWFwX2ZkYXRhc3luYyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqKTsKZXh0ZXJuIGludCBm aWxlbWFwX2ZkYXRhd2FpdChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqKTsKZXh0ZXJuIHZvaWQgc3lu Y19zdXBlcnMoa2Rldl90IGRldiwgaW50IHdhaXQpOwpleHRlcm4gaW50IGJtYXAoc3RydWN0IGlu b2RlICosIGludCk7CmV4dGVybiBpbnQgbm90aWZ5X2NoYW5nZShzdHJ1Y3QgZGVudHJ5ICosIHN0 cnVjdCBpYXR0ciAqKTsKZXh0ZXJuIGludCBwZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqLCBpbnQp OwpleHRlcm4gaW50IHZmc19wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqLCBpbnQpOwpleHRlcm4g aW50IGdldF93cml0ZV9hY2Nlc3Moc3RydWN0IGlub2RlICopOwpleHRlcm4gaW50IGRlbnlfd3Jp dGVfYWNjZXNzKHN0cnVjdCBmaWxlICopOwpzdGF0aWMgaW5saW5lIHZvaWQgcHV0X3dyaXRlX2Fj Y2VzcyhzdHJ1Y3QgaW5vZGUgKiBpbm9kZSkKewogICAgICAgIGF0b21pY19kZWMoJmlub2RlLT5p X3dyaXRlY291bnQpOwp9CnN0YXRpYyBpbmxpbmUgdm9pZCBhbGxvd193cml0ZV9hY2Nlc3Moc3Ry dWN0IGZpbGUgKmZpbGUpCnsKICAgICAgICBpZiAoZmlsZSkKICAgICAgICAgICAgICAgIGF0b21p Y19pbmMoJmZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX3dyaXRlY291bnQpOwp9CmV4dGVybiBp bnQgZG9fcGlwZShpbnQgKik7CgpleHRlcm4gaW50IG9wZW5fbmFtZWkoY29uc3QgY2hhciAqLCBp bnQsIGludCwgc3RydWN0IG5hbWVpZGF0YSAqKTsKCmV4dGVybiBpbnQga2VybmVsX3JlYWQoc3Ry dWN0IGZpbGUgKiwgdW5zaWduZWQgbG9uZywgY2hhciAqLCB1bnNpZ25lZCBsb25nKTsKZXh0ZXJu IHN0cnVjdCBmaWxlICogb3Blbl9leGVjKGNvbnN0IGNoYXIgKik7CgoKZXh0ZXJuIGludCBpc19z dWJkaXIoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgZGVudHJ5ICopOwpleHRlcm4gaW5vX3QgZmlu ZF9pbm9kZV9udW1iZXIoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgcXN0ciAqKTsKIyAxMzQ2ICIv dXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9mcy5oIgpzdGF0aWMgaW5saW5lIHZv aWQgKkVSUl9QVFIobG9uZyBlcnJvcikKewogICAgICAgIHJldHVybiAodm9pZCAqKSBlcnJvcjsK fQoKc3RhdGljIGlubGluZSBsb25nIFBUUl9FUlIoY29uc3Qgdm9pZCAqcHRyKQp7CiAgICAgICAg cmV0dXJuIChsb25nKSBwdHI7Cn0KCnN0YXRpYyBpbmxpbmUgbG9uZyBJU19FUlIoY29uc3Qgdm9p ZCAqcHRyKQp7CiAgICAgICAgcmV0dXJuICh1bnNpZ25lZCBsb25nKXB0ciA+ICh1bnNpZ25lZCBs b25nKS0xMDAwTDsKfQojIDEzNzcgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4 L2ZzLmgiCmVudW0ge0xBU1RfTk9STSwgTEFTVF9ST09ULCBMQVNUX0RPVCwgTEFTVF9ET1RET1Qs IExBU1RfQklORH07CiMgMTM4OCAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgv ZnMuaCIKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIHNpemVfdCB3cml0dGVuOwogICAgICAgIHNp emVfdCBjb3VudDsKICAgICAgICBjaGFyICogYnVmOwogICAgICAgIGludCBlcnJvcjsKfSByZWFk X2Rlc2NyaXB0b3JfdDsKCnR5cGVkZWYgaW50ICgqcmVhZF9hY3Rvcl90KShyZWFkX2Rlc2NyaXB0 b3JfdCAqLCBzdHJ1Y3QgcGFnZSAqLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKCgpl eHRlcm4gbG9mZl90IGRlZmF1bHRfbGxzZWVrKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zm c2V0LCBpbnQgb3JpZ2luKTsKCmV4dGVybiBpbnQgX191c2VyX3dhbGsoY29uc3QgY2hhciAqLCB1 bnNpZ25lZCwgc3RydWN0IG5hbWVpZGF0YSAqKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7 CmV4dGVybiBpbnQgcGF0aF9pbml0KGNvbnN0IGNoYXIgKiwgdW5zaWduZWQsIHN0cnVjdCBuYW1l aWRhdGEgKikgX19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkpOwpleHRlcm4gaW50IHBhdGhfd2Fs ayhjb25zdCBjaGFyICosIHN0cnVjdCBuYW1laWRhdGEgKikgX19hdHRyaWJ1dGVfXygocmVncGFy bSgzKSkpOwpleHRlcm4gaW50IHBhdGhfbG9va3VwKGNvbnN0IGNoYXIgKiwgdW5zaWduZWQsIHN0 cnVjdCBuYW1laWRhdGEgKikgX19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkpOwpleHRlcm4gaW50 IGxpbmtfcGF0aF93YWxrKGNvbnN0IGNoYXIgKiwgc3RydWN0IG5hbWVpZGF0YSAqKSBfX2F0dHJp YnV0ZV9fKChyZWdwYXJtKDMpKSk7CmV4dGVybiB2b2lkIHBhdGhfcmVsZWFzZShzdHJ1Y3QgbmFt ZWlkYXRhICopOwpleHRlcm4gaW50IGZvbGxvd19kb3duKHN0cnVjdCB2ZnNtb3VudCAqKiwgc3Ry dWN0IGRlbnRyeSAqKik7CmV4dGVybiBpbnQgZm9sbG93X3VwKHN0cnVjdCB2ZnNtb3VudCAqKiwg c3RydWN0IGRlbnRyeSAqKik7CmV4dGVybiBzdHJ1Y3QgZGVudHJ5ICogbG9va3VwX29uZV9sZW4o Y29uc3QgY2hhciAqLCBzdHJ1Y3QgZGVudHJ5ICosIGludCk7CmV4dGVybiBzdHJ1Y3QgZGVudHJ5 ICogbG9va3VwX2hhc2goc3RydWN0IHFzdHIgKiwgc3RydWN0IGRlbnRyeSAqKTsKCgoKZXh0ZXJu IHZvaWQgaW5vZGVfaW5pdF9vbmNlKHN0cnVjdCBpbm9kZSAqKTsKZXh0ZXJuIHZvaWQgaXB1dChz dHJ1Y3QgaW5vZGUgKik7CmV4dGVybiB2b2lkIGZvcmNlX2RlbGV0ZShzdHJ1Y3QgaW5vZGUgKik7 CmV4dGVybiBzdHJ1Y3QgaW5vZGUgKiBpZ3JhYihzdHJ1Y3QgaW5vZGUgKik7CmV4dGVybiBpbm9f dCBpdW5pcXVlKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbm9fdCk7Cgp0eXBlZGVmIGludCAoKmZp bmRfaW5vZGVfdCkoc3RydWN0IGlub2RlICosIHVuc2lnbmVkIGxvbmcsIHZvaWQgKik7CmV4dGVy biBzdHJ1Y3QgaW5vZGUgKiBpZ2V0NChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdW5zaWduZWQgbG9u ZywgZmluZF9pbm9kZV90LCB2b2lkICopOwpzdGF0aWMgaW5saW5lIHN0cnVjdCBpbm9kZSAqaWdl dChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubykKewogICAgICAgIHJl dHVybiBpZ2V0NChzYiwgaW5vLCAoKHZvaWQgKikwKSwgKCh2b2lkICopMCkpOwp9CgpleHRlcm4g dm9pZCBjbGVhcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7CmV4dGVybiBzdHJ1Y3QgaW5vZGUgKm5l d19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKZXh0ZXJuIHZvaWQgcmVtb3ZlX3N1aWQo c3RydWN0IGlub2RlICppbm9kZSk7CgpleHRlcm4gdm9pZCBpbnNlcnRfaW5vZGVfaGFzaChzdHJ1 Y3QgaW5vZGUgKik7CmV4dGVybiB2b2lkIHJlbW92ZV9pbm9kZV9oYXNoKHN0cnVjdCBpbm9kZSAq KTsKZXh0ZXJuIHN0cnVjdCBmaWxlICogZ2V0X2VtcHR5X2ZpbHAodm9pZCk7CmV4dGVybiB2b2lk IGZpbGVfbW92ZShzdHJ1Y3QgZmlsZSAqZiwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCk7CmV4dGVy biBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBnZXRfaGFzaF90YWJsZShrZGV2X3QsIGludCwgaW50KTsK ZXh0ZXJuIHN0cnVjdCBidWZmZXJfaGVhZCAqIGdldGJsayhrZGV2X3QsIGludCwgaW50KTsKZXh0 ZXJuIHZvaWQgbGxfcndfYmxvY2soaW50LCBpbnQsIHN0cnVjdCBidWZmZXJfaGVhZCAqIGJoW10p OwpleHRlcm4gdm9pZCBzdWJtaXRfYmgoaW50LCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKik7CmV4dGVy biBpbnQgaXNfcmVhZF9vbmx5KGtkZXZfdCk7CmV4dGVybiB2b2lkIF9fYnJlbHNlKHN0cnVjdCBi dWZmZXJfaGVhZCAqKTsKc3RhdGljIGlubGluZSB2b2lkIGJyZWxzZShzdHJ1Y3QgYnVmZmVyX2hl YWQgKmJ1ZikKewogICAgICAgIGlmIChidWYpCiAgICAgICAgICAgICAgICBfX2JyZWxzZShidWYp Owp9CmV4dGVybiB2b2lkIF9fYmZvcmdldChzdHJ1Y3QgYnVmZmVyX2hlYWQgKik7CnN0YXRpYyBp bmxpbmUgdm9pZCBiZm9yZ2V0KHN0cnVjdCBidWZmZXJfaGVhZCAqYnVmKQp7CiAgICAgICAgaWYg KGJ1ZikKICAgICAgICAgICAgICAgIF9fYmZvcmdldChidWYpOwp9CmV4dGVybiBpbnQgc2V0X2Js b2Nrc2l6ZShrZGV2X3QsIGludCk7CmV4dGVybiBpbnQgc2Jfc2V0X2Jsb2Nrc2l6ZShzdHJ1Y3Qg c3VwZXJfYmxvY2sgKiwgaW50KTsKZXh0ZXJuIGludCBzYl9taW5fYmxvY2tzaXplKHN0cnVjdCBz dXBlcl9ibG9jayAqLCBpbnQpOwpleHRlcm4gc3RydWN0IGJ1ZmZlcl9oZWFkICogYnJlYWQoa2Rl dl90LCBpbnQsIGludCk7CnN0YXRpYyBpbmxpbmUgc3RydWN0IGJ1ZmZlcl9oZWFkICogc2JfYnJl YWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGJsb2NrKQp7CiAgICAgICAgcmV0dXJuIGJy ZWFkKHNiLT5zX2RldiwgYmxvY2ssIHNiLT5zX2Jsb2Nrc2l6ZSk7Cn0Kc3RhdGljIGlubGluZSBz dHJ1Y3QgYnVmZmVyX2hlYWQgKiBzYl9nZXRibGsoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50 IGJsb2NrKQp7CiAgICAgICAgcmV0dXJuIGdldGJsayhzYi0+c19kZXYsIGJsb2NrLCBzYi0+c19i bG9ja3NpemUpOwp9CnN0YXRpYyBpbmxpbmUgc3RydWN0IGJ1ZmZlcl9oZWFkICogc2JfZ2V0X2hh c2hfdGFibGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGJsb2NrKQp7CiAgICAgICAgcmV0 dXJuIGdldF9oYXNoX3RhYmxlKHNiLT5zX2RldiwgYmxvY2ssIHNiLT5zX2Jsb2Nrc2l6ZSk7Cn0K ZXh0ZXJuIHZvaWQgd2FrZXVwX2JkZmx1c2godm9pZCk7CmV4dGVybiB2b2lkIHB1dF91bnVzZWRf YnVmZmVyX2hlYWQoc3RydWN0IGJ1ZmZlcl9oZWFkICogYmgpOwpleHRlcm4gc3RydWN0IGJ1ZmZl cl9oZWFkICogZ2V0X3VudXNlZF9idWZmZXJfaGVhZChpbnQgYXN5bmMpOwoKZXh0ZXJuIGludCBi cndfcGFnZShpbnQsIHN0cnVjdCBwYWdlICosIGtkZXZfdCwgaW50IFtdLCBpbnQpOwoKdHlwZWRl ZiBpbnQgKGdldF9ibG9ja190KShzdHJ1Y3QgaW5vZGUqLGxvbmcsc3RydWN0IGJ1ZmZlcl9oZWFk KixpbnQpOwoKCmV4dGVybiBpbnQgdHJ5X3RvX3JlbGVhc2VfcGFnZShzdHJ1Y3QgcGFnZSAqIHBh Z2UsIGludCBnZnBfbWFzayk7CmV4dGVybiBpbnQgZGlzY2FyZF9iaF9wYWdlKHN0cnVjdCBwYWdl ICosIHVuc2lnbmVkIGxvbmcsIGludCk7CgoKZXh0ZXJuIGludCBibG9ja19zeW1saW5rKHN0cnVj dCBpbm9kZSAqLCBjb25zdCBjaGFyICosIGludCk7CmV4dGVybiBpbnQgYmxvY2tfd3JpdGVfZnVs bF9wYWdlKHN0cnVjdCBwYWdlKiwgZ2V0X2Jsb2NrX3QqKTsKZXh0ZXJuIGludCBibG9ja19yZWFk X2Z1bGxfcGFnZShzdHJ1Y3QgcGFnZSosIGdldF9ibG9ja190Kik7CmV4dGVybiBpbnQgYmxvY2tf cHJlcGFyZV93cml0ZShzdHJ1Y3QgcGFnZSosIHVuc2lnbmVkLCB1bnNpZ25lZCwgZ2V0X2Jsb2Nr X3QqKTsKZXh0ZXJuIGludCBjb250X3ByZXBhcmVfd3JpdGUoc3RydWN0IHBhZ2UqLCB1bnNpZ25l ZCwgdW5zaWduZWQsIGdldF9ibG9ja190KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1bnNpZ25lZCBsb25nICopOwpleHRlcm4gaW50IGdlbmVyaWNfY29udF9leHBhbmQoc3RydWN0 IGlub2RlICppbm9kZSwgbG9mZl90IHNpemUpIDsKZXh0ZXJuIGludCBibG9ja19jb21taXRfd3Jp dGUoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKTsKZXh0ZXJu IGludCBibG9ja19zeW5jX3BhZ2Uoc3RydWN0IHBhZ2UgKik7CgppbnQgZ2VuZXJpY19ibG9ja19i bWFwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICosIGxvbmcsIGdldF9ibG9ja190ICopOwppbnQgZ2Vu ZXJpY19jb21taXRfd3JpdGUoc3RydWN0IGZpbGUgKiwgc3RydWN0IHBhZ2UgKiwgdW5zaWduZWQs IHVuc2lnbmVkKTsKaW50IGJsb2NrX3RydW5jYXRlX3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2Ug KiwgbG9mZl90LCBnZXRfYmxvY2tfdCAqKTsKZXh0ZXJuIGludCBnZW5lcmljX2RpcmVjdF9JTyhp bnQsIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3Qga2lvYnVmICosIHVuc2lnbmVkIGxvbmcsIGludCwg Z2V0X2Jsb2NrX3QgKik7CmV4dGVybiBpbnQgd2FpdGZvcl9vbmVfcGFnZShzdHJ1Y3QgcGFnZSAq KTsKZXh0ZXJuIGludCB3cml0ZW91dF9vbmVfcGFnZShzdHJ1Y3QgcGFnZSAqKTsKCmV4dGVybiBp bnQgZ2VuZXJpY19maWxlX21tYXAoc3RydWN0IGZpbGUgKiwgc3RydWN0IHZtX2FyZWFfc3RydWN0 ICopOwpleHRlcm4gaW50IGZpbGVfcmVhZF9hY3RvcihyZWFkX2Rlc2NyaXB0b3JfdCAqIGRlc2Ms IHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBz aXplKTsKZXh0ZXJuIHNzaXplX3QgZ2VuZXJpY19maWxlX3JlYWQoc3RydWN0IGZpbGUgKiwgY2hh ciAqLCBzaXplX3QsIGxvZmZfdCAqKTsKZXh0ZXJuIHNzaXplX3QgZ2VuZXJpY19maWxlX3dyaXRl KHN0cnVjdCBmaWxlICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7CmV4dGVybiB2 b2lkIGRvX2dlbmVyaWNfZmlsZV9yZWFkKHN0cnVjdCBmaWxlICosIGxvZmZfdCAqLCByZWFkX2Rl c2NyaXB0b3JfdCAqLCByZWFkX2FjdG9yX3QpOwpleHRlcm4gbG9mZl90IG5vX2xsc2VlayhzdHJ1 Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IG9yaWdpbik7CmV4dGVybiBsb2ZmX3Qg Z2VuZXJpY19maWxlX2xsc2VlayhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50 IG9yaWdpbik7CmV4dGVybiBsb2ZmX3QgdmZzX2xsc2VlayhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9m Zl90IGxvZmZzZXQsIGludCBvcmlnaW4pOwpleHRlcm4gc3NpemVfdCBnZW5lcmljX3JlYWRfZGly KHN0cnVjdCBmaWxlICosIGNoYXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7CmV4dGVybiBpbnQgZ2Vu ZXJpY19maWxlX29wZW4oc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBmaWxlICogZmlscCk7 CgpleHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBnZW5lcmljX3JvX2ZvcHM7CgpleHRlcm4g aW50IHZmc19yZWFkbGluayhzdHJ1Y3QgZGVudHJ5ICosIGNoYXIgKiwgaW50LCBjb25zdCBjaGFy ICopOwpleHRlcm4gaW50IHZmc19yZWFkbGlua19yZWFsKHN0cnVjdCBkZW50cnkgKiwgY2hhciAq LCBpbnQpOwpleHRlcm4gaW50IHZmc19mb2xsb3dfbGluayhzdHJ1Y3QgbmFtZWlkYXRhICosIGNv bnN0IGNoYXIgKik7CmV4dGVybiBpbnQgcGFnZV9yZWFkbGluayhzdHJ1Y3QgZGVudHJ5ICosIGNo YXIgKiwgaW50KTsKZXh0ZXJuIGludCBwYWdlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKiwg c3RydWN0IG5hbWVpZGF0YSAqKTsKZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHBhZ2Vf c3ltbGlua19pbm9kZV9vcGVyYXRpb25zOwoKZXh0ZXJuIGludCB2ZnNfcmVhZGRpcihzdHJ1Y3Qg ZmlsZSAqLCBmaWxsZGlyX3QsIHZvaWQgKik7CmV4dGVybiBpbnQgZGNhY2hlX2Rpcl9vcGVuKHN0 cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKZXh0ZXJuIGludCBkY2FjaGVfZGlyX2Nsb3Nl KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKZXh0ZXJuIGxvZmZfdCBkY2FjaGVfZGly X2xzZWVrKHN0cnVjdCBmaWxlICosIGxvZmZfdCwgaW50KTsKZXh0ZXJuIGludCBkY2FjaGVfZGly X2ZzeW5jKHN0cnVjdCBmaWxlICosIHN0cnVjdCBkZW50cnkgKiwgaW50KTsKZXh0ZXJuIGludCBk Y2FjaGVfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqLCB2b2lkICosIGZpbGxkaXJfdCk7CmV4dGVybiBz dHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRjYWNoZV9kaXJfb3BzOwoKaW50IGdldGF0dHJfZnVsbChz dHJ1Y3QgdmZzbW91bnQgKm1udCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXQg KnN0YXQpOwppbnQgZ2V0YXR0cl9taW5peChzdHJ1Y3QgdmZzbW91bnQgKm1udCwgc3RydWN0IGRl bnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXQgKnN0YXQpOwoKZXh0ZXJuIGludCB2ZnNfc3RhdChj aGFyICosIHN0cnVjdCBrc3RhdCAqKTsKZXh0ZXJuIGludCB2ZnNfbHN0YXQoY2hhciAqLCBzdHJ1 Y3Qga3N0YXQgKik7CmV4dGVybiBpbnQgdmZzX2ZzdGF0KGludCwgc3RydWN0IGtzdGF0ICopOwoK ZXh0ZXJuIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICpnZXRfZnNfdHlwZShjb25zdCBjaGFyICpu YW1lKTsKZXh0ZXJuIHN0cnVjdCBzdXBlcl9ibG9jayAqZ2V0X3N1cGVyKGtkZXZfdCk7CmV4dGVy biB2b2lkIGRyb3Bfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CnN0YXRpYyBpbmxpbmUg aW50IGlzX21vdW50ZWQoa2Rldl90IGRldikKewogICAgICAgIHN0cnVjdCBzdXBlcl9ibG9jayAq c2IgPSBnZXRfc3VwZXIoZGV2KTsKICAgICAgICBpZiAoc2IpIHsKICAgICAgICAgICAgICAgIGRy b3Bfc3VwZXIoc2IpOwogICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgfQogICAgICAg IHJldHVybiAwOwp9CnVuc2lnbmVkIGxvbmcgZ2VuZXJhdGVfY2x1c3RlcihrZGV2X3QsIGludCBi W10sIGludCk7CnVuc2lnbmVkIGxvbmcgZ2VuZXJhdGVfY2x1c3Rlcl9zd2FiMzIoa2Rldl90LCBp bnQgYltdLCBpbnQpOwpleHRlcm4ga2Rldl90IFJPT1RfREVWOwpleHRlcm4gY2hhciByb290X2Rl dmljZV9uYW1lW107CgoKZXh0ZXJuIHZvaWQgc2hvd19idWZmZXJzKHZvaWQpOwoKCgoKCmV4dGVy biBzc2l6ZV90IGNoYXJfcmVhZChzdHJ1Y3QgZmlsZSAqLCBjaGFyICosIHNpemVfdCwgbG9mZl90 ICopOwpleHRlcm4gc3NpemVfdCBibG9ja19yZWFkKHN0cnVjdCBmaWxlICosIGNoYXIgKiwgc2l6 ZV90LCBsb2ZmX3QgKik7CmV4dGVybiBpbnQgcmVhZF9haGVhZFtdOwoKZXh0ZXJuIHNzaXplX3Qg Y2hhcl93cml0ZShzdHJ1Y3QgZmlsZSAqLCBjb25zdCBjaGFyICosIHNpemVfdCwgbG9mZl90ICop OwpleHRlcm4gc3NpemVfdCBibG9ja193cml0ZShzdHJ1Y3QgZmlsZSAqLCBjb25zdCBjaGFyICos IHNpemVfdCwgbG9mZl90ICopOwoKZXh0ZXJuIGludCBmaWxlX2ZzeW5jKHN0cnVjdCBmaWxlICos IHN0cnVjdCBkZW50cnkgKiwgaW50KTsKZXh0ZXJuIGludCBnZW5lcmljX2J1ZmZlcl9mZGF0YXN5 bmMoc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgbG9uZyBzdGFydF9pZHgsIHVuc2lnbmVk IGxvbmcgZW5kX2lkeCk7CmV4dGVybiBpbnQgZ2VuZXJpY19vc3luY19pbm9kZShzdHJ1Y3QgaW5v ZGUgKiwgaW50KTsKCgoKCmV4dGVybiBpbnQgaW5vZGVfY2hhbmdlX29rKHN0cnVjdCBpbm9kZSAq LCBzdHJ1Y3QgaWF0dHIgKik7CmV4dGVybiBpbnQgaW5vZGVfc2V0YXR0cihzdHJ1Y3QgaW5vZGUg Kiwgc3RydWN0IGlhdHRyICopOwojIDE1OTIgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRl L2xpbnV4L2ZzLmgiCnN0YXRpYyBpbmxpbmUgc3RydWN0IGRlbnRyeSAqbG9ja19wYXJlbnQoc3Ry dWN0IGRlbnRyeSAqZGVudHJ5KQp7CiAgICAgICAgc3RydWN0IGRlbnRyeSAqZGlyID0gZGdldChk ZW50cnktPmRfcGFyZW50KTsKCiAgICAgICAgZG93bigmZGlyLT5kX2lub2RlLT5pX3NlbSk7CiAg ICAgICAgcmV0dXJuIGRpcjsKfQoKc3RhdGljIGlubGluZSBzdHJ1Y3QgZGVudHJ5ICpnZXRfcGFy ZW50KHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKewogICAgICAgIHJldHVybiBkZ2V0KGRlbnRyeS0+ ZF9wYXJlbnQpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX2RpcihzdHJ1Y3QgZGVudHJ5 ICpkaXIpCnsKICAgICAgICB1cCgmZGlyLT5kX2lub2RlLT5pX3NlbSk7CiAgICAgICAgZHB1dChk aXIpOwp9CgoKCgoKc3RhdGljIGlubGluZSB2b2lkIGRvdWJsZV9kb3duKHN0cnVjdCBzZW1hcGhv cmUgKnMxLCBzdHJ1Y3Qgc2VtYXBob3JlICpzMikKewogICAgICAgIGlmIChzMSAhPSBzMikgewog ICAgICAgICAgICAgICAgaWYgKCh1bnNpZ25lZCBsb25nKSBzMSA8ICh1bnNpZ25lZCBsb25nKSBz MikgewogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2VtYXBob3JlICp0bXAgPSBzMjsK ICAgICAgICAgICAgICAgICAgICAgICAgczIgPSBzMTsgczEgPSB0bXA7CiAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgICAgICBkb3duKHMxKTsKICAgICAgICB9CiAgICAgICAgZG93bihzMik7 Cn0KIyAxNjM2ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9mcy5oIgpzdGF0 aWMgaW5saW5lIHZvaWQgdHJpcGxlX2Rvd24oc3RydWN0IHNlbWFwaG9yZSAqczEsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2VtYXBob3JlICpzMiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzZW1hcGhvcmUgKnMzKQp7CiAgICAgICAgaWYgKHMx ICE9IHMyKSB7CiAgICAgICAgICAgICAgICBpZiAoKHVuc2lnbmVkIGxvbmcpIHMxIDwgKHVuc2ln bmVkIGxvbmcpIHMyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodW5zaWduZWQgbG9u ZykgczEgPCAodW5zaWduZWQgbG9uZykgczMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdHJ1Y3Qgc2VtYXBob3JlICp0bXAgPSBzMzsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzMyA9IHMxOyBzMSA9IHRtcDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgICAgICAgICAgICBpZiAoKHVuc2lnbmVkIGxvbmcpIHMxIDwgKHVuc2lnbmVkIGxv bmcpIHMyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNlbWFwaG9y ZSAqdG1wID0gczI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczIgPSBzMTsgczEg PSB0bXA7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSB7 CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodW5zaWduZWQgbG9uZykgczEgPCAodW5zaWdu ZWQgbG9uZykgczMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2Vt YXBob3JlICp0bXAgPSBzMzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMyA9IHMx OyBzMSA9IHRtcDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg ICAgICBpZiAoKHVuc2lnbmVkIGxvbmcpIHMyIDwgKHVuc2lnbmVkIGxvbmcpIHMzKSB7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNlbWFwaG9yZSAqdG1wID0gczM7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczMgPSBzMjsgczIgPSB0bXA7CiAgICAgICAg ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGRvd24o czEpOwogICAgICAgIH0gZWxzZSBpZiAoKHVuc2lnbmVkIGxvbmcpIHMyIDwgKHVuc2lnbmVkIGxv bmcpIHMzKSB7CiAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2VtYXBob3JlICp0bXAgPSBzMzsKICAg ICAgICAgICAgICAgIHMzID0gczI7IHMyID0gdG1wOwogICAgICAgIH0KICAgICAgICBkb3duKHMy KTsKICAgICAgICBkb3duKHMzKTsKfQoKc3RhdGljIGlubGluZSB2b2lkIGRvdWJsZV91cChzdHJ1 Y3Qgc2VtYXBob3JlICpzMSwgc3RydWN0IHNlbWFwaG9yZSAqczIpCnsKICAgICAgICB1cChzMSk7 CiAgICAgICAgaWYgKHMxICE9IHMyKQogICAgICAgICAgICAgICAgdXAoczIpOwp9CgpzdGF0aWMg aW5saW5lIHZvaWQgdHJpcGxlX3VwKHN0cnVjdCBzZW1hcGhvcmUgKnMxLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCBzZW1hcGhvcmUgKnMyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCBzZW1hcGhvcmUgKnMzKQp7CiAgICAgICAgdXAoczEpOwogICAgICAg IGlmIChzMSAhPSBzMikKICAgICAgICAgICAgICAgIHVwKHMyKTsKICAgICAgICB1cChzMyk7Cn0K CnN0YXRpYyBpbmxpbmUgdm9pZCBkb3VibGVfbG9jayhzdHJ1Y3QgZGVudHJ5ICpkMSwgc3RydWN0 IGRlbnRyeSAqZDIpCnsKICAgICAgICBkb3VibGVfZG93bigmZDEtPmRfaW5vZGUtPmlfc2VtLCAm ZDItPmRfaW5vZGUtPmlfc2VtKTsKfQoKc3RhdGljIGlubGluZSB2b2lkIGRvdWJsZV91bmxvY2so c3RydWN0IGRlbnRyeSAqZDEsIHN0cnVjdCBkZW50cnkgKmQyKQp7CiAgICAgICAgZG91YmxlX3Vw KCZkMS0+ZF9pbm9kZS0+aV9zZW0sJmQyLT5kX2lub2RlLT5pX3NlbSk7CiAgICAgICAgZHB1dChk MSk7CiAgICAgICAgZHB1dChkMik7Cn0KIyAxOCAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1 ZGUvbGludXgvY2FwYWJpbGl0eS5oIiAyCiMgMzIgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNs dWRlL2xpbnV4L2NhcGFiaWxpdHkuaCIKdHlwZWRlZiBzdHJ1Y3QgX191c2VyX2NhcF9oZWFkZXJf c3RydWN0IHsKICAgICAgICBfX3UzMiB2ZXJzaW9uOwogICAgICAgIGludCBwaWQ7Cn0gKmNhcF91 c2VyX2hlYWRlcl90OwoKdHlwZWRlZiBzdHJ1Y3QgX191c2VyX2NhcF9kYXRhX3N0cnVjdCB7CiAg ICAgICAgX191MzIgZWZmZWN0aXZlOwogICAgICAgIF9fdTMyIHBlcm1pdHRlZDsKICAgICAgICBf X3UzMiBpbmhlcml0YWJsZTsKfSAqY2FwX3VzZXJfZGF0YV90OwojIDU1ICIvdXNyL3NyYy9saW51 eC0yLjQuMjAvaW5jbHVkZS9saW51eC9jYXBhYmlsaXR5LmgiCnR5cGVkZWYgX191MzIga2VybmVs X2NhcF90OwojIDI4NiAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvY2FwYWJp bGl0eS5oIgpleHRlcm4ga2VybmVsX2NhcF90IGNhcF9ic2V0OwojIDMxNCAiL3Vzci9zcmMvbGlu dXgtMi40LjIwL2luY2x1ZGUvbGludXgvY2FwYWJpbGl0eS5oIgpzdGF0aWMgaW5saW5lIGtlcm5l bF9jYXBfdCBjYXBfY29tYmluZShrZXJuZWxfY2FwX3QgYSwga2VybmVsX2NhcF90IGIpCnsKICAg ICBrZXJuZWxfY2FwX3QgZGVzdDsKICAgICAoZGVzdCkgPSAoYSkgfCAoYik7CiAgICAgcmV0dXJu IGRlc3Q7Cn0KCnN0YXRpYyBpbmxpbmUga2VybmVsX2NhcF90IGNhcF9pbnRlcnNlY3Qoa2VybmVs X2NhcF90IGEsIGtlcm5lbF9jYXBfdCBiKQp7CiAgICAga2VybmVsX2NhcF90IGRlc3Q7CiAgICAg KGRlc3QpID0gKGEpICYgKGIpOwogICAgIHJldHVybiBkZXN0Owp9CgpzdGF0aWMgaW5saW5lIGtl cm5lbF9jYXBfdCBjYXBfZHJvcChrZXJuZWxfY2FwX3QgYSwga2VybmVsX2NhcF90IGRyb3ApCnsK ICAgICBrZXJuZWxfY2FwX3QgZGVzdDsKICAgICAoZGVzdCkgPSAoYSkgJiB+KGRyb3ApOwogICAg IHJldHVybiBkZXN0Owp9CgpzdGF0aWMgaW5saW5lIGtlcm5lbF9jYXBfdCBjYXBfaW52ZXJ0KGtl cm5lbF9jYXBfdCBjKQp7CiAgICAga2VybmVsX2NhcF90IGRlc3Q7CiAgICAgKGRlc3QpID0gfihj KTsKICAgICByZXR1cm4gZGVzdDsKfQojIDYgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRl L2xpbnV4L2JpbmZtdHMuaCIgMgojIDIyICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9s aW51eC9iaW5mbXRzLmgiCnN0cnVjdCBsaW51eF9iaW5wcm17CiAgICAgICAgY2hhciBidWZbMTI4 XTsKICAgICAgICBzdHJ1Y3QgcGFnZSAqcGFnZVszMl07CiAgICAgICAgdW5zaWduZWQgbG9uZyBw OwogICAgICAgIGludCBzaF9iYW5nOwogICAgICAgIHN0cnVjdCBmaWxlICogZmlsZTsKICAgICAg ICBpbnQgZV91aWQsIGVfZ2lkOwogICAgICAgIGtlcm5lbF9jYXBfdCBjYXBfaW5oZXJpdGFibGUs IGNhcF9wZXJtaXR0ZWQsIGNhcF9lZmZlY3RpdmU7CiAgICAgICAgaW50IGFyZ2MsIGVudmM7CiAg ICAgICAgY2hhciAqIGZpbGVuYW1lOwogICAgICAgIHVuc2lnbmVkIGxvbmcgbG9hZGVyLCBleGVj Owp9OwoKCgoKCnN0cnVjdCBsaW51eF9iaW5mbXQgewogICAgICAgIHN0cnVjdCBsaW51eF9iaW5m bXQgKiBuZXh0OwogICAgICAgIHN0cnVjdCBtb2R1bGUgKm1vZHVsZTsKICAgICAgICBpbnQgKCps b2FkX2JpbmFyeSkoc3RydWN0IGxpbnV4X2JpbnBybSAqLCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3Mp OwogICAgICAgIGludCAoKmxvYWRfc2hsaWIpKHN0cnVjdCBmaWxlICopOwogICAgICAgIGludCAo KmNvcmVfZHVtcCkobG9uZyBzaWduciwgc3RydWN0IHB0X3JlZ3MgKiByZWdzLCBzdHJ1Y3QgZmls ZSAqIGZpbGUpOwogICAgICAgIHVuc2lnbmVkIGxvbmcgbWluX2NvcmVkdW1wOwp9OwoKZXh0ZXJu IGludCByZWdpc3Rlcl9iaW5mbXQoc3RydWN0IGxpbnV4X2JpbmZtdCAqKTsKZXh0ZXJuIGludCB1 bnJlZ2lzdGVyX2JpbmZtdChzdHJ1Y3QgbGludXhfYmluZm10ICopOwoKZXh0ZXJuIGludCBwcmVw YXJlX2JpbnBybShzdHJ1Y3QgbGludXhfYmlucHJtICopOwpleHRlcm4gdm9pZCByZW1vdmVfYXJn X3plcm8oc3RydWN0IGxpbnV4X2JpbnBybSAqKTsKZXh0ZXJuIGludCBzZWFyY2hfYmluYXJ5X2hh bmRsZXIoc3RydWN0IGxpbnV4X2JpbnBybSAqLHN0cnVjdCBwdF9yZWdzICopOwpleHRlcm4gaW50 IGZsdXNoX29sZF9leGVjKHN0cnVjdCBsaW51eF9iaW5wcm0gKiBicHJtKTsKZXh0ZXJuIGludCBz ZXR1cF9hcmdfcGFnZXMoc3RydWN0IGxpbnV4X2JpbnBybSAqIGJwcm0pOwpleHRlcm4gaW50IGNv cHlfc3RyaW5ncyhpbnQgYXJnYyxjaGFyICoqIGFyZ3Ysc3RydWN0IGxpbnV4X2JpbnBybSAqYnBy bSk7CmV4dGVybiBpbnQgY29weV9zdHJpbmdzX2tlcm5lbChpbnQgYXJnYyxjaGFyICoqIGFyZ3Ys c3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSk7CmV4dGVybiB2b2lkIGNvbXB1dGVfY3JlZHMoc3Ry dWN0IGxpbnV4X2JpbnBybSAqYmlucHJtKTsKZXh0ZXJuIGludCBkb19jb3JlZHVtcChsb25nIHNp Z25yLCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpOwpleHRlcm4gdm9pZCBzZXRfYmluZm10KHN0cnVj dCBsaW51eF9iaW5mbXQgKm5ldyk7CiMgMTAgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRl L2xpbnV4L3NjaGVkLmgiIDIKCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9s aW51eC90aW1lcy5oIiAxCgoKCnN0cnVjdCB0bXMgewogICAgICAgIGNsb2NrX3QgdG1zX3V0aW1l OwogICAgICAgIGNsb2NrX3QgdG1zX3N0aW1lOwogICAgICAgIGNsb2NrX3QgdG1zX2N1dGltZTsK ICAgICAgICBjbG9ja190IHRtc19jc3RpbWU7Cn07CiMgMTQgIi91c3Ivc3JjL2xpbnV4LTIuNC4y MC9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5j bHVkZS9saW51eC90aW1leC5oIiAxCiMgMTUyICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVk ZS9saW51eC90aW1leC5oIgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS90 aW1leC5oIiAxCiMgMTAgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS90aW1leC5o IgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS9tc3IuaCIgMQojIDExICIv dXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9hc20vdGltZXguaCIgMgojIDM3ICIvdXNyL3Ny Yy9saW51eC0yLjQuMjAvaW5jbHVkZS9hc20vdGltZXguaCIKdHlwZWRlZiB1bnNpZ25lZCBsb25n IGxvbmcgY3ljbGVzX3Q7CgpleHRlcm4gY3ljbGVzX3QgY2FjaGVmbHVzaF90aW1lOwoKc3RhdGlj IGlubGluZSBjeWNsZXNfdCBnZXRfY3ljbGVzICh2b2lkKQp7CgoKCiAgICAgICAgdW5zaWduZWQg bG9uZyBsb25nIHJldDsKCiAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInJkdHNjIiA6ICI9 QSIgKHJldCkpOwogICAgICAgIHJldHVybiByZXQ7Cgp9CgpleHRlcm4gdW5zaWduZWQgbG9uZyBj cHVfa2h6OwojIDE1MyAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvdGltZXgu aCIgMgojIDE2MSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvdGltZXguaCIK c3RydWN0IHRpbWV4IHsKICAgICAgICB1bnNpZ25lZCBpbnQgbW9kZXM7CiAgICAgICAgbG9uZyBv ZmZzZXQ7CiAgICAgICAgbG9uZyBmcmVxOwogICAgICAgIGxvbmcgbWF4ZXJyb3I7CiAgICAgICAg bG9uZyBlc3RlcnJvcjsKICAgICAgICBpbnQgc3RhdHVzOwogICAgICAgIGxvbmcgY29uc3RhbnQ7 CiAgICAgICAgbG9uZyBwcmVjaXNpb247CiAgICAgICAgbG9uZyB0b2xlcmFuY2U7CgoKICAgICAg ICBzdHJ1Y3QgdGltZXZhbCB0aW1lOwogICAgICAgIGxvbmcgdGljazsKCiAgICAgICAgbG9uZyBw cHNmcmVxOwogICAgICAgIGxvbmcgaml0dGVyOwogICAgICAgIGludCBzaGlmdDsKICAgICAgICBs b25nIHN0YWJpbDsKICAgICAgICBsb25nIGppdGNudDsKICAgICAgICBsb25nIGNhbGNudDsKICAg ICAgICBsb25nIGVycmNudDsKICAgICAgICBsb25nIHN0YmNudDsKCiAgICAgICAgaW50IDozMjsg aW50IDozMjsgaW50IDozMjsgaW50IDozMjsKICAgICAgICBpbnQgOjMyOyBpbnQgOjMyOyBpbnQg OjMyOyBpbnQgOjMyOwogICAgICAgIGludCA6MzI7IGludCA6MzI7IGludCA6MzI7IGludCA6MzI7 Cn07CiMgMjUzICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC90aW1leC5oIgpl eHRlcm4gbG9uZyB0aWNrOwpleHRlcm4gaW50IHRpY2thZGo7CgoKCgpleHRlcm4gaW50IHRpbWVf c3RhdGU7CmV4dGVybiBpbnQgdGltZV9zdGF0dXM7CmV4dGVybiBsb25nIHRpbWVfb2Zmc2V0Owpl eHRlcm4gbG9uZyB0aW1lX2NvbnN0YW50OwpleHRlcm4gbG9uZyB0aW1lX3RvbGVyYW5jZTsKZXh0 ZXJuIGxvbmcgdGltZV9wcmVjaXNpb247CmV4dGVybiBsb25nIHRpbWVfbWF4ZXJyb3I7CmV4dGVy biBsb25nIHRpbWVfZXN0ZXJyb3I7CgpleHRlcm4gbG9uZyB0aW1lX3BoYXNlOwpleHRlcm4gbG9u ZyB0aW1lX2ZyZXE7CmV4dGVybiBsb25nIHRpbWVfYWRqOwpleHRlcm4gbG9uZyB0aW1lX3JlZnRp bWU7CgpleHRlcm4gbG9uZyB0aW1lX2FkanVzdDsKCgpleHRlcm4gbG9uZyBwcHNfb2Zmc2V0Owpl eHRlcm4gbG9uZyBwcHNfaml0dGVyOwpleHRlcm4gbG9uZyBwcHNfZnJlcTsKZXh0ZXJuIGxvbmcg cHBzX3N0YWJpbDsKZXh0ZXJuIGxvbmcgcHBzX3ZhbGlkOwoKCmV4dGVybiBpbnQgcHBzX3NoaWZ0 OwpleHRlcm4gbG9uZyBwcHNfaml0Y250OwpleHRlcm4gbG9uZyBwcHNfY2FsY250OwpleHRlcm4g bG9uZyBwcHNfZXJyY250OwpleHRlcm4gbG9uZyBwcHNfc3RiY250OwojIDE1ICIvdXNyL3NyYy9s aW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9zY2hlZC5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgt Mi40LjIwL2luY2x1ZGUvbGludXgvcmJ0cmVlLmgiIDEKIyAxMDAgIi91c3Ivc3JjL2xpbnV4LTIu NC4yMC9pbmNsdWRlL2xpbnV4L3JidHJlZS5oIgp0eXBlZGVmIHN0cnVjdCByYl9ub2RlX3MKewog ICAgICAgIHN0cnVjdCByYl9ub2RlX3MgKiByYl9wYXJlbnQ7CiAgICAgICAgaW50IHJiX2NvbG9y OwoKCiAgICAgICAgc3RydWN0IHJiX25vZGVfcyAqIHJiX3JpZ2h0OwogICAgICAgIHN0cnVjdCBy Yl9ub2RlX3MgKiByYl9sZWZ0Owp9CnJiX25vZGVfdDsKCnR5cGVkZWYgc3RydWN0IHJiX3Jvb3Rf cwp7CiAgICAgICAgc3RydWN0IHJiX25vZGVfcyAqIHJiX25vZGU7Cn0KcmJfcm9vdF90OwoKCgoK CmV4dGVybiB2b2lkIHJiX2luc2VydF9jb2xvcihyYl9ub2RlX3QgKiwgcmJfcm9vdF90ICopOwpl eHRlcm4gdm9pZCByYl9lcmFzZShyYl9ub2RlX3QgKiwgcmJfcm9vdF90ICopOwoKc3RhdGljIGlu bGluZSB2b2lkIHJiX2xpbmtfbm9kZShyYl9ub2RlX3QgKiBub2RlLCByYl9ub2RlX3QgKiBwYXJl bnQsIHJiX25vZGVfdCAqKiByYl9saW5rKQp7CiAgICAgICAgbm9kZS0+cmJfcGFyZW50ID0gcGFy ZW50OwogICAgICAgIG5vZGUtPnJiX2NvbG9yID0gMDsKICAgICAgICBub2RlLT5yYl9sZWZ0ID0g bm9kZS0+cmJfcmlnaHQgPSAoKHZvaWQgKikwKTsKCiAgICAgICAgKnJiX2xpbmsgPSBub2RlOwp9 CiMgMTYgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiIDIKCgoK CgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS9tbXUuaCIgMQoKCgoKCgoK dHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIHZvaWQgKnNlZ21lbnRzOwogICAgICAgIHVuc2lnbmVk IGxvbmcgY3B1dmFsaWQ7Cn0gbW1fY29udGV4dF90OwojIDIyICIvdXNyL3NyYy9saW51eC0yLjQu MjAvaW5jbHVkZS9saW51eC9zY2hlZC5oIiAyCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9p bmNsdWRlL2xpbnV4L3NtcC5oIiAxCiMgMTQgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRl L2xpbnV4L3NtcC5oIgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS9zbXAu aCIgMQojIDE1ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9hc20vc21wLmgiCiMgMSAi L3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvYXNtL2ZpeG1hcC5oIiAxCiMgMTggIi91c3Iv c3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS9maXhtYXAuaCIKIyAxICIvdXNyL3NyYy9saW51 eC0yLjQuMjAvaW5jbHVkZS9hc20vYWNwaS5oIiAxCiMgMTE0ICIvdXNyL3NyYy9saW51eC0yLjQu MjAvaW5jbHVkZS9hc20vYWNwaS5oIgpleHRlcm4gaW50IGFjcGlfbGFwaWM7CgoKCgpleHRlcm4g aW50IGFjcGlfaW9hcGljOwojIDEzMSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvYXNt L2FjcGkuaCIKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2F2ZWRfZWlwOwpleHRlcm4gdW5zaWduZWQg bG9uZyBzYXZlZF9lc3A7CmV4dGVybiB1bnNpZ25lZCBsb25nIHNhdmVkX2VicDsKZXh0ZXJuIHVu c2lnbmVkIGxvbmcgc2F2ZWRfZWJ4OwpleHRlcm4gdW5zaWduZWQgbG9uZyBzYXZlZF9lc2k7CmV4 dGVybiB1bnNpZ25lZCBsb25nIHNhdmVkX2VkaTsKCnN0YXRpYyBpbmxpbmUgdm9pZCBhY3BpX3Nh dmVfcmVnaXN0ZXJfc3RhdGUodW5zaWduZWQgbG9uZyByZXR1cm5fcG9pbnQpCnsKICAgICAgICBz YXZlZF9laXAgPSByZXR1cm5fcG9pbnQ7CiAgICAgICAgYXNtIHZvbGF0aWxlICgibW92bCAlJWVz cCwoJTApIiA6ICI9bSIgKHNhdmVkX2VzcCkpOwogICAgICAgIGFzbSB2b2xhdGlsZSAoIm1vdmwg JSVlYnAsKCUwKSIgOiAiPW0iIChzYXZlZF9lYnApKTsKICAgICAgICBhc20gdm9sYXRpbGUgKCJt b3ZsICUlZWJ4LCglMCkiIDogIj1tIiAoc2F2ZWRfZWJ4KSk7CiAgICAgICAgYXNtIHZvbGF0aWxl ICgibW92bCAlJWVkaSwoJTApIiA6ICI9bSIgKHNhdmVkX2VkaSkpOwogICAgICAgIGFzbSB2b2xh dGlsZSAoIm1vdmwgJSVlc2ksKCUwKSIgOiAiPW0iIChzYXZlZF9lc2kpKTsKfQoKCgoKCmV4dGVy biBpbnQgYWNwaV9zYXZlX3N0YXRlX21lbSh2b2lkKTsKZXh0ZXJuIGludCBhY3BpX3NhdmVfc3Rh dGVfZGlzayh2b2lkKTsKZXh0ZXJuIHZvaWQgYWNwaV9yZXN0b3JlX3N0YXRlX21lbSh2b2lkKTsK CmV4dGVybiB1bnNpZ25lZCBsb25nIGFjcGlfd2FrZXVwX2FkZHJlc3M7CgpleHRlcm4gdm9pZCBk b19zdXNwZW5kX2xvd2xldmVsX3M0YmlvcyhpbnQgcmVzdW1lKTsKCgpleHRlcm4gdm9pZCBhY3Bp X3Jlc2VydmVfYm9vdG1lbSh2b2lkKTsKIyAxOSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1 ZGUvYXNtL2ZpeG1hcC5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvYXNt L2FwaWNkZWYuaCIgMQojIDEzNyAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvYXNtL2Fw aWNkZWYuaCIKc3RydWN0IGxvY2FsX2FwaWMgewoKICAgICAgICBzdHJ1Y3QgeyB1bnNpZ25lZCBp bnQgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzAxOwoKICAgICAgICBzdHJ1Y3QgeyB1bnNp Z25lZCBpbnQgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzAyOwoKICAgICAgICBzdHJ1Y3Qg ewogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRfMSA6IDI0LAogICAgICAg ICAgICAgICAgICAgICAgICBwaHlzX2FwaWNfaWQgOiA0LAogICAgICAgICAgICAgICAgICAgICAg ICBfX3Jlc2VydmVkXzIgOiA0OwogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fcmVzZXJ2 ZWRbM107CiAgICAgICAgfSBpZDsKCiAgICAgICAgY29uc3QKICAgICAgICBzdHJ1Y3QgewogICAg ICAgICAgICAgICAgdW5zaWduZWQgaW50IHZlcnNpb24gOiA4LAogICAgICAgICAgICAgICAgICAg ICAgICBfX3Jlc2VydmVkXzEgOiA4LAogICAgICAgICAgICAgICAgICAgICAgICBtYXhfbHZ0IDog OCwKICAgICAgICAgICAgICAgICAgICAgICAgX19yZXNlcnZlZF8yIDogODsKICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGludCBfX3Jlc2VydmVkWzNdOwogICAgICAgIH0gdmVyc2lvbjsKCiAgICAg ICAgc3RydWN0IHsgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8wMzsK CiAgICAgICAgc3RydWN0IHsgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZl ZF8wNDsKCiAgICAgICAgc3RydWN0IHsgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRbNF07IH0gX19y ZXNlcnZlZF8wNTsKCiAgICAgICAgc3RydWN0IHsgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRbNF07 IH0gX19yZXNlcnZlZF8wNjsKCiAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgIHVuc2ln bmVkIGludCBwcmlvcml0eSA6IDgsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzZXJ2ZWRf MSA6IDI0OwogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRfMlszXTsKICAg ICAgICB9IHRwcjsKCiAgICAgICAgY29uc3QKICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAg ICAgdW5zaWduZWQgaW50IHByaW9yaXR5IDogOCwKICAgICAgICAgICAgICAgICAgICAgICAgX19y ZXNlcnZlZF8xIDogMjQ7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZF8y WzNdOwogICAgICAgIH0gYXByOwoKICAgICAgICBjb25zdAogICAgICAgIHN0cnVjdCB7CiAgICAg ICAgICAgICAgICB1bnNpZ25lZCBpbnQgcHJpb3JpdHkgOiA4LAogICAgICAgICAgICAgICAgICAg ICAgICBfX3Jlc2VydmVkXzEgOiAyNDsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX3Jl c2VydmVkXzJbM107CiAgICAgICAgfSBwcHI7CgogICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAg ICAgICB1bnNpZ25lZCBpbnQgZW9pOwogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fcmVz ZXJ2ZWRbM107CiAgICAgICAgfSBlb2k7CgogICAgICAgIHN0cnVjdCB7IHVuc2lnbmVkIGludCBf X3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMDc7CgogICAgICAgIHN0cnVjdCB7CiAgICAgICAg ICAgICAgICB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZF8xIDogMjQsCiAgICAgICAgICAgICAgICAg ICAgICAgIGxvZ2ljYWxfZGVzdCA6IDg7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19y ZXNlcnZlZF8yWzNdOwogICAgICAgIH0gbGRyOwoKICAgICAgICBzdHJ1Y3QgewogICAgICAgICAg ICAgICAgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRfMSA6IDI4LAogICAgICAgICAgICAgICAgICAg ICAgICBtb2RlbCA6IDQ7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZF8y WzNdOwogICAgICAgIH0gZGZyOwoKICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgdW5z aWduZWQgaW50IHNwdXJpb3VzX3ZlY3RvciA6IDgsCiAgICAgICAgICAgICAgICAgICAgICAgIGFw aWNfZW5hYmxlZCA6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzX2NwdSA6IDEsCiAg ICAgICAgICAgICAgICAgICAgICAgIF9fcmVzZXJ2ZWRfMiA6IDIyOwogICAgICAgICAgICAgICAg dW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRfM1szXTsKICAgICAgICB9IHN2cjsKCiAgICAgICAgc3Ry dWN0IHsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBiaXRmaWVsZDsKICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGludCBfX3Jlc2VydmVkWzNdOwogICAgICAgIH0gaXNyIFs4XTsKCiAgICAg ICAgc3RydWN0IHsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBiaXRmaWVsZDsKICAgICAg ICAgICAgICAgIHVuc2lnbmVkIGludCBfX3Jlc2VydmVkWzNdOwogICAgICAgIH0gdG1yIFs4XTsK CiAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBiaXRmaWVsZDsK ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX3Jlc2VydmVkWzNdOwogICAgICAgIH0gaXJy IFs4XTsKCiAgICAgICAgdW5pb24gewogICAgICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAg ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNlbmRfY3NfZXJyb3IgOiAxLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVfY3NfZXJyb3IgOiAxLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNlbmRfYWNjZXB0X2Vycm9yIDogMSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICByZWNlaXZlX2FjY2VwdF9lcnJvciA6IDEsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19yZXNlcnZlZF8xIDogMSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzZW5kX2lsbGVnYWxfdmVjdG9yIDogMSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICByZWNlaXZlX2lsbGVnYWxfdmVjdG9yIDogMSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbGxlZ2FsX3JlZ2lzdGVyX2FkZHJlc3MgOiAxLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fcmVzZXJ2ZWRfMiA6IDI0OwogICAgICAgICAgICAgICAgICAg ICAgICB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZF8zWzNdOwogICAgICAgICAgICAgICAgfSBlcnJv cl9iaXRzOwogICAgICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICAgICAgICAg dW5zaWduZWQgaW50IGVycm9yczsKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50 IF9fcmVzZXJ2ZWRfM1szXTsKICAgICAgICAgICAgICAgIH0gYWxsX2Vycm9yczsKICAgICAgICB9 IGVzcjsKCiAgICAgICAgc3RydWN0IHsgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRbNF07IH0gX19y ZXNlcnZlZF8wODsKCiAgICAgICAgc3RydWN0IHsgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRbNF07 IH0gX19yZXNlcnZlZF8wOTsKCiAgICAgICAgc3RydWN0IHsgdW5zaWduZWQgaW50IF9fcmVzZXJ2 ZWRbNF07IH0gX19yZXNlcnZlZF8xMDsKCiAgICAgICAgc3RydWN0IHsgdW5zaWduZWQgaW50IF9f cmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8xMTsKCiAgICAgICAgc3RydWN0IHsgdW5zaWduZWQg aW50IF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8xMjsKCiAgICAgICAgc3RydWN0IHsgdW5z aWduZWQgaW50IF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8xMzsKCiAgICAgICAgc3RydWN0 IHsgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8xNDsKCiAgICAgICAg c3RydWN0IHsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB2ZWN0b3IgOiA4LAogICAgICAg ICAgICAgICAgICAgICAgICBkZWxpdmVyeV9tb2RlIDogMywKICAgICAgICAgICAgICAgICAgICAg ICAgZGVzdGluYXRpb25fbW9kZSA6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGl2ZXJ5 X3N0YXR1cyA6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzZXJ2ZWRfMSA6IDEsCiAg ICAgICAgICAgICAgICAgICAgICAgIGxldmVsIDogMSwKICAgICAgICAgICAgICAgICAgICAgICAg dHJpZ2dlciA6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzZXJ2ZWRfMiA6IDIsCiAg ICAgICAgICAgICAgICAgICAgICAgIHNob3J0aGFuZCA6IDIsCiAgICAgICAgICAgICAgICAgICAg ICAgIF9fcmVzZXJ2ZWRfMyA6IDEyOwogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fcmVz ZXJ2ZWRfNFszXTsKICAgICAgICB9IGljcjE7CgogICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAg ICAgICB1bmlvbiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX3Jlc2Vy dmVkXzEgOiAyNCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaHlzX2Rlc3QgOiA0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzZXJ2ZWRfMiA6IDQ7CiAgICAg ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX3Jlc2VydmVkXzMgOiAyNCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dpY2FsX2Rlc3QgOiA4OwogICAgICAgICAgICAg ICAgfSBkZXN0OwogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRfNFszXTsK ICAgICAgICB9IGljcjI7CgogICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICB1bnNpZ25l ZCBpbnQgdmVjdG9yIDogOCwKICAgICAgICAgICAgICAgICAgICAgICAgX19yZXNlcnZlZF8xIDog NCwKICAgICAgICAgICAgICAgICAgICAgICAgZGVsaXZlcnlfc3RhdHVzIDogMSwKICAgICAgICAg ICAgICAgICAgICAgICAgX19yZXNlcnZlZF8yIDogMywKICAgICAgICAgICAgICAgICAgICAgICAg bWFzayA6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX21vZGUgOiAxLAogICAgICAg ICAgICAgICAgICAgICAgICBfX3Jlc2VydmVkXzMgOiAxNDsKICAgICAgICAgICAgICAgIHVuc2ln bmVkIGludCBfX3Jlc2VydmVkXzRbM107CiAgICAgICAgfSBsdnRfdGltZXI7CgogICAgICAgIHN0 cnVjdCB7IHVuc2lnbmVkIGludCBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMTU7CgogICAg ICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdmVjdG9yIDogOCwKICAg ICAgICAgICAgICAgICAgICAgICAgZGVsaXZlcnlfbW9kZSA6IDMsCiAgICAgICAgICAgICAgICAg ICAgICAgIF9fcmVzZXJ2ZWRfMSA6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGl2ZXJ5 X3N0YXR1cyA6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzZXJ2ZWRfMiA6IDMsCiAg ICAgICAgICAgICAgICAgICAgICAgIG1hc2sgOiAxLAogICAgICAgICAgICAgICAgICAgICAgICBf X3Jlc2VydmVkXzMgOiAxNTsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX3Jlc2VydmVk XzRbM107CiAgICAgICAgfSBsdnRfcGM7CgogICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAg ICB1bnNpZ25lZCBpbnQgdmVjdG9yIDogOCwKICAgICAgICAgICAgICAgICAgICAgICAgZGVsaXZl cnlfbW9kZSA6IDMsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzZXJ2ZWRfMSA6IDEsCiAg ICAgICAgICAgICAgICAgICAgICAgIGRlbGl2ZXJ5X3N0YXR1cyA6IDEsCiAgICAgICAgICAgICAg ICAgICAgICAgIHBvbGFyaXR5IDogMSwKICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3RlX2ly ciA6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXIgOiAxLAogICAgICAgICAgICAg ICAgICAgICAgICBtYXNrIDogMSwKICAgICAgICAgICAgICAgICAgICAgICAgX19yZXNlcnZlZF8y IDogMTU7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZF8zWzNdOwogICAg ICAgIH0gbHZ0X2xpbnQwOwoKICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgdW5zaWdu ZWQgaW50IHZlY3RvciA6IDgsCiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGl2ZXJ5X21vZGUg OiAzLAogICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc2VydmVkXzEgOiAxLAogICAgICAgICAg ICAgICAgICAgICAgICBkZWxpdmVyeV9zdGF0dXMgOiAxLAogICAgICAgICAgICAgICAgICAgICAg ICBwb2xhcml0eSA6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW90ZV9pcnIgOiAxLAog ICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyIDogMSwKICAgICAgICAgICAgICAgICAgICAg ICAgbWFzayA6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzZXJ2ZWRfMiA6IDE1Owog ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRfM1szXTsKICAgICAgICB9IGx2 dF9saW50MTsKCiAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB2 ZWN0b3IgOiA4LAogICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc2VydmVkXzEgOiA0LAogICAg ICAgICAgICAgICAgICAgICAgICBkZWxpdmVyeV9zdGF0dXMgOiAxLAogICAgICAgICAgICAgICAg ICAgICAgICBfX3Jlc2VydmVkXzIgOiAzLAogICAgICAgICAgICAgICAgICAgICAgICBtYXNrIDog MSwKICAgICAgICAgICAgICAgICAgICAgICAgX19yZXNlcnZlZF8zIDogMTU7CiAgICAgICAgICAg ICAgICB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZF80WzNdOwogICAgICAgIH0gbHZ0X2Vycm9yOwoK ICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGluaXRpYWxfY291 bnQ7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZF8yWzNdOwogICAgICAg IH0gdGltZXJfaWNyOwoKICAgICAgICBjb25zdAogICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAg ICAgICB1bnNpZ25lZCBpbnQgY3Vycl9jb3VudDsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu dCBfX3Jlc2VydmVkXzJbM107CiAgICAgICAgfSB0aW1lcl9jY3I7CgogICAgICAgIHN0cnVjdCB7 IHVuc2lnbmVkIGludCBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMTY7CgogICAgICAgIHN0 cnVjdCB7IHVuc2lnbmVkIGludCBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMTc7CgogICAg ICAgIHN0cnVjdCB7IHVuc2lnbmVkIGludCBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMTg7 CgogICAgICAgIHN0cnVjdCB7IHVuc2lnbmVkIGludCBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2 ZWRfMTk7CgogICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZGl2 aXNvciA6IDQsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzZXJ2ZWRfMSA6IDI4OwogICAg ICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRfMlszXTsKICAgICAgICB9IHRpbWVy X2RjcjsKCiAgICAgICAgc3RydWN0IHsgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRbNF07IH0gX19y ZXNlcnZlZF8yMDsKCn0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwojIDIwICIvdXNyL3NyYy9s aW51eC0yLjQuMjAvaW5jbHVkZS9hc20vZml4bWFwLmgiIDIKIyA1MSAiL3Vzci9zcmMvbGludXgt Mi40LjIwL2luY2x1ZGUvYXNtL2ZpeG1hcC5oIgplbnVtIGZpeGVkX2FkZHJlc3NlcyB7CgogICAg ICAgIEZJWF9BUElDX0JBU0UsCgoKICAgICAgICBGSVhfSU9fQVBJQ19CQVNFXzAsCiAgICAgICAg RklYX0lPX0FQSUNfQkFTRV9FTkQgPSBGSVhfSU9fQVBJQ19CQVNFXzAgKyA4IC0xLAojIDc2ICIv dXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9hc20vZml4bWFwLmgiCiAgICAgICAgRklYX0FD UElfQkVHSU4sCiAgICAgICAgRklYX0FDUElfRU5EID0gRklYX0FDUElfQkVHSU4gKyA0IC0gMSwK CiAgICAgICAgX19lbmRfb2ZfcGVybWFuZW50X2ZpeGVkX2FkZHJlc3NlcywKCgogICAgICAgIEZJ WF9CVE1BUF9FTkQgPSBfX2VuZF9vZl9wZXJtYW5lbnRfZml4ZWRfYWRkcmVzc2VzLAogICAgICAg IEZJWF9CVE1BUF9CRUdJTiA9IEZJWF9CVE1BUF9FTkQgKyAxNiAtIDEsCiAgICAgICAgX19lbmRf b2ZfZml4ZWRfYWRkcmVzc2VzCn07CgpleHRlcm4gdm9pZCBfX3NldF9maXhtYXAgKGVudW0gZml4 ZWRfYWRkcmVzc2VzIGlkeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHVuc2lnbmVkIGxvbmcgcGh5cywgcGdwcm90X3QgZmxhZ3MpOwojIDExMCAiL3Vzci9zcmMvbGlu dXgtMi40LjIwL2luY2x1ZGUvYXNtL2ZpeG1hcC5oIgpleHRlcm4gdm9pZCBfX3RoaXNfZml4bWFw X2RvZXNfbm90X2V4aXN0KHZvaWQpOwoKCgoKCgpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcg Zml4X3RvX3ZpcnQoY29uc3QgdW5zaWduZWQgaW50IGlkeCkKewojIDEyOCAiL3Vzci9zcmMvbGlu dXgtMi40LjIwL2luY2x1ZGUvYXNtL2ZpeG1hcC5oIgogICAgICAgIGlmIChpZHggPj0gX19lbmRf b2ZfZml4ZWRfYWRkcmVzc2VzKQogICAgICAgICAgICAgICAgX190aGlzX2ZpeG1hcF9kb2VzX25v dF9leGlzdCgpOwoKICAgICAgICByZXR1cm4gKCgweGZmZmZlMDAwVUwpIC0gKChpZHgpIDw8IDEy KSk7Cn0KIyAxNiAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvYXNtL3NtcC5oIiAyCgoj IDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS9tcHNwZWMuaCIgMQojIDI4ICIv dXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9hc20vbXBzcGVjLmgiCnN0cnVjdCBpbnRlbF9t cF9mbG9hdGluZwp7CiAgICAgICAgY2hhciBtcGZfc2lnbmF0dXJlWzRdOwogICAgICAgIHVuc2ln bmVkIGxvbmcgbXBmX3BoeXNwdHI7CiAgICAgICAgdW5zaWduZWQgY2hhciBtcGZfbGVuZ3RoOwog ICAgICAgIHVuc2lnbmVkIGNoYXIgbXBmX3NwZWNpZmljYXRpb247CiAgICAgICAgdW5zaWduZWQg Y2hhciBtcGZfY2hlY2tzdW07CiAgICAgICAgdW5zaWduZWQgY2hhciBtcGZfZmVhdHVyZTE7CiAg ICAgICAgdW5zaWduZWQgY2hhciBtcGZfZmVhdHVyZTI7CiAgICAgICAgdW5zaWduZWQgY2hhciBt cGZfZmVhdHVyZTM7CiAgICAgICAgdW5zaWduZWQgY2hhciBtcGZfZmVhdHVyZTQ7CiAgICAgICAg dW5zaWduZWQgY2hhciBtcGZfZmVhdHVyZTU7Cn07CgpzdHJ1Y3QgbXBfY29uZmlnX3RhYmxlCnsK ICAgICAgICBjaGFyIG1wY19zaWduYXR1cmVbNF07CgogICAgICAgIHVuc2lnbmVkIHNob3J0IG1w Y19sZW5ndGg7CiAgICAgICAgY2hhciBtcGNfc3BlYzsKICAgICAgICBjaGFyIG1wY19jaGVja3N1 bTsKICAgICAgICBjaGFyIG1wY19vZW1bOF07CiAgICAgICAgY2hhciBtcGNfcHJvZHVjdGlkWzEy XTsKICAgICAgICB1bnNpZ25lZCBsb25nIG1wY19vZW1wdHI7CiAgICAgICAgdW5zaWduZWQgc2hv cnQgbXBjX29lbXNpemU7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgbXBjX29lbWNvdW50OwogICAg ICAgIHVuc2lnbmVkIGxvbmcgbXBjX2xhcGljOwogICAgICAgIHVuc2lnbmVkIGxvbmcgcmVzZXJ2 ZWQ7Cn07CiMgNjcgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS9tcHNwZWMuaCIK c3RydWN0IG1wY19jb25maWdfcHJvY2Vzc29yCnsKICAgICAgICB1bnNpZ25lZCBjaGFyIG1wY190 eXBlOwogICAgICAgIHVuc2lnbmVkIGNoYXIgbXBjX2FwaWNpZDsKICAgICAgICB1bnNpZ25lZCBj aGFyIG1wY19hcGljdmVyOwogICAgICAgIHVuc2lnbmVkIGNoYXIgbXBjX2NwdWZsYWc7CgoKICAg ICAgICB1bnNpZ25lZCBsb25nIG1wY19jcHVmZWF0dXJlOwoKCgogICAgICAgIHVuc2lnbmVkIGxv bmcgbXBjX2ZlYXR1cmVmbGFnOwogICAgICAgIHVuc2lnbmVkIGxvbmcgbXBjX3Jlc2VydmVkWzJd Owp9OwoKc3RydWN0IG1wY19jb25maWdfYnVzCnsKICAgICAgICB1bnNpZ25lZCBjaGFyIG1wY190 eXBlOwogICAgICAgIHVuc2lnbmVkIGNoYXIgbXBjX2J1c2lkOwogICAgICAgIHVuc2lnbmVkIGNo YXIgbXBjX2J1c3R5cGVbNl0gX19hdHRyaWJ1dGUoKHBhY2tlZCkpOwp9OwojIDExMCAiL3Vzci9z cmMvbGludXgtMi40LjIwL2luY2x1ZGUvYXNtL21wc3BlYy5oIgpzdHJ1Y3QgbXBjX2NvbmZpZ19p b2FwaWMKewogICAgICAgIHVuc2lnbmVkIGNoYXIgbXBjX3R5cGU7CiAgICAgICAgdW5zaWduZWQg Y2hhciBtcGNfYXBpY2lkOwogICAgICAgIHVuc2lnbmVkIGNoYXIgbXBjX2FwaWN2ZXI7CiAgICAg ICAgdW5zaWduZWQgY2hhciBtcGNfZmxhZ3M7CgogICAgICAgIHVuc2lnbmVkIGxvbmcgbXBjX2Fw aWNhZGRyOwp9OwoKc3RydWN0IG1wY19jb25maWdfaW50c3JjCnsKICAgICAgICB1bnNpZ25lZCBj aGFyIG1wY190eXBlOwogICAgICAgIHVuc2lnbmVkIGNoYXIgbXBjX2lycXR5cGU7CiAgICAgICAg dW5zaWduZWQgc2hvcnQgbXBjX2lycWZsYWc7CiAgICAgICAgdW5zaWduZWQgY2hhciBtcGNfc3Jj YnVzOwogICAgICAgIHVuc2lnbmVkIGNoYXIgbXBjX3NyY2J1c2lycTsKICAgICAgICB1bnNpZ25l ZCBjaGFyIG1wY19kc3RhcGljOwogICAgICAgIHVuc2lnbmVkIGNoYXIgbXBjX2RzdGlycTsKfTsK CmVudW0gbXBfaXJxX3NvdXJjZV90eXBlcyB7CiAgICAgICAgbXBfSU5UID0gMCwKICAgICAgICBt cF9OTUkgPSAxLAogICAgICAgIG1wX1NNSSA9IDIsCiAgICAgICAgbXBfRXh0SU5UID0gMwp9OwoK CgoKCgpzdHJ1Y3QgbXBjX2NvbmZpZ19saW50c3JjCnsKICAgICAgICB1bnNpZ25lZCBjaGFyIG1w Y190eXBlOwogICAgICAgIHVuc2lnbmVkIGNoYXIgbXBjX2lycXR5cGU7CiAgICAgICAgdW5zaWdu ZWQgc2hvcnQgbXBjX2lycWZsYWc7CiAgICAgICAgdW5zaWduZWQgY2hhciBtcGNfc3JjYnVzaWQ7 CiAgICAgICAgdW5zaWduZWQgY2hhciBtcGNfc3JjYnVzaXJxOwogICAgICAgIHVuc2lnbmVkIGNo YXIgbXBjX2Rlc3RhcGljOwoKICAgICAgICB1bnNpZ25lZCBjaGFyIG1wY19kZXN0YXBpY2xpbnQ7 Cn07CgpzdHJ1Y3QgbXBfY29uZmlnX29lbXRhYmxlCnsKICAgICAgICBjaGFyIG9lbV9zaWduYXR1 cmVbNF07CgogICAgICAgIHVuc2lnbmVkIHNob3J0IG9lbV9sZW5ndGg7CiAgICAgICAgY2hhciBv ZW1fcmV2OwogICAgICAgIGNoYXIgb2VtX2NoZWNrc3VtOwogICAgICAgIGNoYXIgbXBjX29lbVs4 XTsKfTsKCnN0cnVjdCBtcGNfY29uZmlnX3RyYW5zbGF0aW9uCnsKICAgICAgICB1bnNpZ25lZCBj aGFyIG1wY190eXBlOwogICAgICAgIHVuc2lnbmVkIGNoYXIgdHJhbnNfbGVuOwogICAgICAgIHVu c2lnbmVkIGNoYXIgdHJhbnNfdHlwZTsKICAgICAgICB1bnNpZ25lZCBjaGFyIHRyYW5zX3F1YWQ7 CiAgICAgICAgdW5zaWduZWQgY2hhciB0cmFuc19nbG9iYWw7CiAgICAgICAgdW5zaWduZWQgY2hh ciB0cmFuc19sb2NhbDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCB0cmFuc19yZXNlcnZlZDsKfTsK IyAxOTUgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS9tcHNwZWMuaCIKZW51bSBt cF9idXN0eXBlIHsKICAgICAgICBNUF9CVVNfSVNBID0gMSwKICAgICAgICBNUF9CVVNfRUlTQSwK ICAgICAgICBNUF9CVVNfUENJLAogICAgICAgIE1QX0JVU19NQ0EKfTsKZXh0ZXJuIGludCAqbXBf YnVzX2lkX3RvX3R5cGU7CmV4dGVybiBpbnQgKm1wX2J1c19pZF90b19ub2RlOwpleHRlcm4gaW50 ICptcF9idXNfaWRfdG9fbG9jYWw7CmV4dGVybiBpbnQgKm1wX2J1c19pZF90b19wY2lfYnVzOwpl eHRlcm4gaW50IHF1YWRfbG9jYWxfdG9fbXBfYnVzX2lkIFszMi80XVs0XTsKCmV4dGVybiB1bnNp Z25lZCBpbnQgYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkOwpleHRlcm4gdW5zaWduZWQgbG9uZyBw aHlzX2NwdV9wcmVzZW50X21hcDsKZXh0ZXJuIGludCBzbXBfZm91bmRfY29uZmlnOwpleHRlcm4g dm9pZCBmaW5kX3NtcF9jb25maWcgKHZvaWQpOwpleHRlcm4gdm9pZCBnZXRfc21wX2NvbmZpZyAo dm9pZCk7CmV4dGVybiBpbnQgbnJfaW9hcGljczsKZXh0ZXJuIGludCBhcGljX3ZlcnNpb24gWzE2 XTsKZXh0ZXJuIGludCBtcF9pcnFfZW50cmllczsKZXh0ZXJuIHN0cnVjdCBtcGNfY29uZmlnX2lu dHNyYyAqbXBfaXJxczsKZXh0ZXJuIGludCBtcGNfZGVmYXVsdF90eXBlOwpleHRlcm4gaW50IG1w X2N1cnJlbnRfcGNpX2lkOwpleHRlcm4gdW5zaWduZWQgbG9uZyBtcF9sYXBpY19hZGRyOwpleHRl cm4gaW50IHBpY19tb2RlOwpleHRlcm4gaW50IHVzaW5nX2FwaWNfdGltZXI7CgoKZXh0ZXJuIHZv aWQgbXBfcmVnaXN0ZXJfbGFwaWMgKHU4IGlkLCB1OCBlbmFibGVkKTsKZXh0ZXJuIHZvaWQgbXBf cmVnaXN0ZXJfbGFwaWNfYWRkcmVzcyAodTY0IGFkZHJlc3MpOwoKCmV4dGVybiB2b2lkIG1wX3Jl Z2lzdGVyX2lvYXBpYyAodTggaWQsIHUzMiBhZGRyZXNzLCB1MzIgaXJxX2Jhc2UpOwpleHRlcm4g dm9pZCBtcF9vdmVycmlkZV9sZWdhY3lfaXJxICh1OCBidXNfaXJxLCB1OCBwb2xhcml0eSwgdTgg dHJpZ2dlciwgdTMyIGdsb2JhbF9pcnEpOwpleHRlcm4gdm9pZCBtcF9jb25maWdfYWNwaV9sZWdh Y3lfaXJxcyAodm9pZCk7CmV4dGVybiB2b2lkIG1wX2NvbmZpZ19pb2FwaWNfZm9yX3NjaShpbnQg aXJxKTsKZXh0ZXJuIHZvaWQgbXBfcGFyc2VfcHJ0ICh2b2lkKTsKIyAxOCAiL3Vzci9zcmMvbGlu dXgtMi40LjIwL2luY2x1ZGUvYXNtL3NtcC5oIiAyCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4y MC9pbmNsdWRlL2FzbS9pb19hcGljLmgiIDEKIyAyNCAiL3Vzci9zcmMvbGludXgtMi40LjIwL2lu Y2x1ZGUvYXNtL2lvX2FwaWMuaCIKc3RydWN0IElPX0FQSUNfcmVnXzAwIHsKICAgICAgICBfX3Uz MiBfX3Jlc2VydmVkXzIgOiAxNCwKICAgICAgICAgICAgICAgIExUUyA6IDEsCiAgICAgICAgICAg ICAgICBkZWxpdmVyeV90eXBlIDogMSwKICAgICAgICAgICAgICAgIF9fcmVzZXJ2ZWRfMSA6IDgs CiAgICAgICAgICAgICAgICBJRCA6IDQsCiAgICAgICAgICAgICAgICBfX3Jlc2VydmVkXzAgOiA0 Owp9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKCnN0cnVjdCBJT19BUElDX3JlZ18wMSB7CiAg ICAgICAgX191MzIgdmVyc2lvbiA6IDgsCiAgICAgICAgICAgICAgICBfX3Jlc2VydmVkXzIgOiA3 LAogICAgICAgICAgICAgICAgUFJRIDogMSwKICAgICAgICAgICAgICAgIGVudHJpZXMgOiA4LAog ICAgICAgICAgICAgICAgX19yZXNlcnZlZF8xIDogODsKfSBfX2F0dHJpYnV0ZV9fICgocGFja2Vk KSk7CgpzdHJ1Y3QgSU9fQVBJQ19yZWdfMDIgewogICAgICAgIF9fdTMyIF9fcmVzZXJ2ZWRfMiA6 IDI0LAogICAgICAgICAgICAgICAgYXJiaXRyYXRpb24gOiA0LAogICAgICAgICAgICAgICAgX19y ZXNlcnZlZF8xIDogNDsKfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CgoKCgpleHRlcm4gaW50 IG5yX2lvYXBpY3M7CmV4dGVybiBpbnQgbnJfaW9hcGljX3JlZ2lzdGVyc1s4XTsKCmVudW0gaW9h cGljX2lycV9kZXN0aW5hdGlvbl90eXBlcyB7CiAgICAgICAgZGVzdF9GaXhlZCA9IDAsCiAgICAg ICAgZGVzdF9Mb3dlc3RQcmlvID0gMSwKICAgICAgICBkZXN0X1NNSSA9IDIsCiAgICAgICAgZGVz dF9fcmVzZXJ2ZWRfMSA9IDMsCiAgICAgICAgZGVzdF9OTUkgPSA0LAogICAgICAgIGRlc3RfSU5J VCA9IDUsCiAgICAgICAgZGVzdF9fcmVzZXJ2ZWRfMiA9IDYsCiAgICAgICAgZGVzdF9FeHRJTlQg PSA3Cn07CgpzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSB7CiAgICAgICAgX191MzIgdmVjdG9y IDogOCwKICAgICAgICAgICAgICAgIGRlbGl2ZXJ5X21vZGUgOiAzLAoKCgogICAgICAgICAgICAg ICAgZGVzdF9tb2RlIDogMSwKICAgICAgICAgICAgICAgIGRlbGl2ZXJ5X3N0YXR1cyA6IDEsCiAg ICAgICAgICAgICAgICBwb2xhcml0eSA6IDEsCiAgICAgICAgICAgICAgICBpcnIgOiAxLAogICAg ICAgICAgICAgICAgdHJpZ2dlciA6IDEsCiAgICAgICAgICAgICAgICBtYXNrIDogMSwKICAgICAg ICAgICAgICAgIF9fcmVzZXJ2ZWRfMiA6IDE1OwoKICAgICAgICB1bmlvbiB7IHN0cnVjdCB7IF9f dTMyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc2VydmVkXzEg OiAyNCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoeXNpY2FsX2Rl c3QgOiA0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXNlcnZl ZF8yIDogNDsKICAgICAgICAgICAgICAgICAgICAgICAgfSBwaHlzaWNhbDsKCiAgICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCB7IF9fdTMyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX3Jlc2VydmVkXzEgOiAyNCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGxvZ2ljYWxfZGVzdCA6IDg7CiAgICAgICAgICAgICAgICAgICAgICAgIH0g bG9naWNhbDsKICAgICAgICB9IGRlc3Q7Cgp9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKCgoK CgoKZXh0ZXJuIHN0cnVjdCBtcGNfY29uZmlnX2lvYXBpYyBtcF9pb2FwaWNzWzhdOwoKCmV4dGVy biBpbnQgbXBfaXJxX2VudHJpZXM7CgoKZXh0ZXJuIHN0cnVjdCBtcGNfY29uZmlnX2ludHNyYyAq bXBfaXJxczsKCgpleHRlcm4gaW50IG1wY19kZWZhdWx0X3R5cGU7CgpzdGF0aWMgaW5saW5lIHVu c2lnbmVkIGludCBpb19hcGljX3JlYWQodW5zaWduZWQgaW50IGFwaWMsIHVuc2lnbmVkIGludCBy ZWcpCnsKICAgICAgICAqKCh2b2xhdGlsZSBpbnQgKikoKCgweGZmZmZlMDAwVUwpIC0gKChGSVhf SU9fQVBJQ19CQVNFXzAgKyBhcGljKSA8PCAxMikpICsgKG1wX2lvYXBpY3NbYXBpY10ubXBjX2Fw aWNhZGRyICYgfih+KCgxVUwgPDwgMTIpLTEpKSkpKSA9IHJlZzsKICAgICAgICByZXR1cm4gKigo KHZvbGF0aWxlIGludCAqKSgoKDB4ZmZmZmUwMDBVTCkgLSAoKEZJWF9JT19BUElDX0JBU0VfMCAr IGFwaWMpIDw8IDEyKSkgKyAobXBfaW9hcGljc1thcGljXS5tcGNfYXBpY2FkZHIgJiB+KH4oKDFV TCA8PCAxMiktMSkpKSkpKzQpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgaW9fYXBpY193cml0ZSh1 bnNpZ25lZCBpbnQgYXBpYywgdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IHZhbHVlKQp7 CiAgICAgICAgKigodm9sYXRpbGUgaW50ICopKCgoMHhmZmZmZTAwMFVMKSAtICgoRklYX0lPX0FQ SUNfQkFTRV8wICsgYXBpYykgPDwgMTIpKSArIChtcF9pb2FwaWNzW2FwaWNdLm1wY19hcGljYWRk ciAmIH4ofigoMVVMIDw8IDEyKS0xKSkpKSkgPSByZWc7CiAgICAgICAgKigoKHZvbGF0aWxlIGlu dCAqKSgoKDB4ZmZmZmUwMDBVTCkgLSAoKEZJWF9JT19BUElDX0JBU0VfMCArIGFwaWMpIDw8IDEy KSkgKyAobXBfaW9hcGljc1thcGljXS5tcGNfYXBpY2FkZHIgJiB+KH4oKDFVTCA8PCAxMiktMSkp KSkpKzQpID0gdmFsdWU7Cn0KCgoKCgpzdGF0aWMgaW5saW5lIHZvaWQgaW9fYXBpY19tb2RpZnko dW5zaWduZWQgaW50IGFwaWMsIHVuc2lnbmVkIGludCB2YWx1ZSkKewogICAgICAgICooKCh2b2xh dGlsZSBpbnQgKikoKCgweGZmZmZlMDAwVUwpIC0gKChGSVhfSU9fQVBJQ19CQVNFXzAgKyBhcGlj KSA8PCAxMikpICsgKG1wX2lvYXBpY3NbYXBpY10ubXBjX2FwaWNhZGRyICYgfih+KCgxVUwgPDwg MTIpLTEpKSkpKSs0KSA9IHZhbHVlOwp9CgoKCgoKc3RhdGljIGlubGluZSB2b2lkIGlvX2FwaWNf c3luYyh1bnNpZ25lZCBpbnQgYXBpYykKewogICAgICAgICh2b2lkKSAqKCgodm9sYXRpbGUgaW50 ICopKCgoMHhmZmZmZTAwMFVMKSAtICgoRklYX0lPX0FQSUNfQkFTRV8wICsgYXBpYykgPDwgMTIp KSArIChtcF9pb2FwaWNzW2FwaWNdLm1wY19hcGljYWRkciAmIH4ofigoMVVMIDw8IDEyKS0xKSkp KSkrNCk7Cn0KCgpleHRlcm4gaW50IHNraXBfaW9hcGljX3NldHVwOwojIDE0OCAiL3Vzci9zcmMv bGludXgtMi40LjIwL2luY2x1ZGUvYXNtL2lvX2FwaWMuaCIKZXh0ZXJuIGludCBpb19hcGljX2dl dF91bmlxdWVfaWQgKGludCBpb2FwaWMsIGludCBhcGljX2lkKTsKZXh0ZXJuIGludCBpb19hcGlj X2dldF92ZXJzaW9uIChpbnQgaW9hcGljKTsKZXh0ZXJuIGludCBpb19hcGljX2dldF9yZWRpcl9l bnRyaWVzIChpbnQgaW9hcGljKTsKZXh0ZXJuIGludCBpb19hcGljX3NldF9wY2lfcm91dGluZyAo aW50IGlvYXBpYywgaW50IHBpbiwgaW50IGlycSk7CiMgMjAgIi91c3Ivc3JjL2xpbnV4LTIuNC4y MC9pbmNsdWRlL2FzbS9zbXAuaCIgMgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVk ZS9hc20vYXBpYy5oIiAxCgoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xp bnV4L3BtLmgiIDEKIyAzMiAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvcG0u aCIKZW51bQp7CiAgICAgICAgUE1fU1VTUEVORCwKICAgICAgICBQTV9SRVNVTUUsCgogICAgICAg IFBNX1NBVkVfU1RBVEUsCgoKICAgICAgICBQTV9TRVRfV0FLRVVQLAoKCiAgICAgICAgUE1fR0VU X1JFU09VUkNFUywKICAgICAgICBQTV9TRVRfUkVTT1VSQ0VTLAoKCiAgICAgICAgUE1fRUpFQ1Qs CiAgICAgICAgUE1fTE9DSywKfTsKCnR5cGVkZWYgaW50IHBtX3JlcXVlc3RfdDsKCgoKCmVudW0K ewogICAgICAgIFBNX1VOS05PV05fREVWID0gMCwKICAgICAgICBQTV9TWVNfREVWLAogICAgICAg IFBNX1BDSV9ERVYsCiAgICAgICAgUE1fVVNCX0RFViwKICAgICAgICBQTV9TQ1NJX0RFViwKICAg ICAgICBQTV9JU0FfREVWLAogICAgICAgIFBNX01URF9ERVYsCn07Cgp0eXBlZGVmIGludCBwbV9k ZXZfdDsKCgoKCmVudW0KewogICAgICAgIFBNX1NZU19VTktOT1dOID0gMHgwMDAwMDAwMCwKICAg ICAgICBQTV9TWVNfS0JDID0gMHg0MWQwMDMwMywKICAgICAgICBQTV9TWVNfQ09NID0gMHg0MWQw MDUwMCwKICAgICAgICBQTV9TWVNfSVJEQSA9IDB4NDFkMDA1MTAsCiAgICAgICAgUE1fU1lTX0ZE QyA9IDB4NDFkMDA3MDAsCiAgICAgICAgUE1fU1lTX1ZHQSA9IDB4NDFkMDA5MDAsCiAgICAgICAg UE1fU1lTX1BDTUNJQSA9IDB4NDFkMDBlMDAsCn07CiMgOTEgIi91c3Ivc3JjL2xpbnV4LTIuNC4y MC9pbmNsdWRlL2xpbnV4L3BtLmgiCnN0cnVjdCBwbV9kZXY7Cgp0eXBlZGVmIGludCAoKnBtX2Nh bGxiYWNrKShzdHJ1Y3QgcG1fZGV2ICpkZXYsIHBtX3JlcXVlc3RfdCBycXN0LCB2b2lkICpkYXRh KTsKCgoKCnN0cnVjdCBwbV9kZXYKewogICAgICAgIHBtX2Rldl90IHR5cGU7CiAgICAgICAgdW5z aWduZWQgbG9uZyBpZDsKICAgICAgICBwbV9jYWxsYmFjayBjYWxsYmFjazsKICAgICAgICB2b2lk ICpkYXRhOwoKICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogICAgICAgIHVuc2lnbmVkIGxv bmcgc3RhdGU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBwcmV2X3N0YXRlOwoKICAgICAgICBzdHJ1 Y3QgbGlzdF9oZWFkIGVudHJ5Owp9OwoKCgpleHRlcm4gaW50IHBtX2FjdGl2ZTsKCgoKCgoKc3Ry dWN0IHBtX2RldiAqcG1fcmVnaXN0ZXIocG1fZGV2X3QgdHlwZSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgdW5zaWduZWQgbG9uZyBpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgcG1f Y2FsbGJhY2sgY2FsbGJhY2spOwoKCgoKdm9pZCBwbV91bnJlZ2lzdGVyKHN0cnVjdCBwbV9kZXYg KmRldik7CgoKCgp2b2lkIHBtX3VucmVnaXN0ZXJfYWxsKHBtX2NhbGxiYWNrIGNhbGxiYWNrKTsK CgoKCmludCBwbV9zZW5kKHN0cnVjdCBwbV9kZXYgKmRldiwgcG1fcmVxdWVzdF90IHJxc3QsIHZv aWQgKmRhdGEpOwoKCgoKaW50IHBtX3NlbmRfYWxsKHBtX3JlcXVlc3RfdCBycXN0LCB2b2lkICpk YXRhKTsKCgoKCnN0cnVjdCBwbV9kZXYgKnBtX2ZpbmQocG1fZGV2X3QgdHlwZSwgc3RydWN0IHBt X2RldiAqZnJvbSk7CgpzdGF0aWMgaW5saW5lIHZvaWQgcG1fYWNjZXNzKHN0cnVjdCBwbV9kZXYg KmRldikge30Kc3RhdGljIGlubGluZSB2b2lkIHBtX2Rldl9pZGxlKHN0cnVjdCBwbV9kZXYgKmRl dikge30KIyAxODggIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L3BtLmgiCmV4 dGVybiB2b2lkICgqcG1faWRsZSkodm9pZCk7CmV4dGVybiB2b2lkICgqcG1fcG93ZXJfb2ZmKSh2 b2lkKTsKIyA2ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9hc20vYXBpYy5oIiAyCiMg MjMgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS9hcGljLmgiCnN0YXRpYyBfX2lu bGluZSB2b2lkIGFwaWNfd3JpdGUodW5zaWduZWQgbG9uZyByZWcsIHVuc2lnbmVkIGxvbmcgdikK ewogICAgICAgICooKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoKGZpeF90b192aXJ0KEZJWF9B UElDX0JBU0UpKStyZWcpKSA9IHY7Cn0KCnN0YXRpYyBfX2lubGluZSB2b2lkIGFwaWNfd3JpdGVf YXRvbWljKHVuc2lnbmVkIGxvbmcgcmVnLCB1bnNpZ25lZCBsb25nIHYpCnsKICAgICAgICAoKF9f dHlwZW9mX18oKigodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSgoZml4X3RvX3ZpcnQoRklYX0FQ SUNfQkFTRSkpK3JlZykpKSlfX3hjaGcoKHVuc2lnbmVkIGxvbmcpKHYpLCgodm9sYXRpbGUgdW5z aWduZWQgbG9uZyAqKSgoZml4X3RvX3ZpcnQoRklYX0FQSUNfQkFTRSkpK3JlZykpLHNpemVvZigq KCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKChmaXhfdG9fdmlydChGSVhfQVBJQ19CQVNFKSkr cmVnKSkpKSk7Cn0KCnN0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBsb25nIGFwaWNfcmVhZCh1bnNp Z25lZCBsb25nIHJlZykKewogICAgICAgIHJldHVybiAqKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25n ICopKChmaXhfdG9fdmlydChGSVhfQVBJQ19CQVNFKSkrcmVnKSk7Cn0KCnN0YXRpYyBfX2lubGlu ZV9fIHZvaWQgYXBpY193YWl0X2ljcl9pZGxlKHZvaWQpCnsKICAgICAgICBkbyB7IH0gd2hpbGUg KCBhcGljX3JlYWQoIDB4MzAwICkgJiAweDAxMDAwICk7Cn0KIyA1MyAiL3Vzci9zcmMvbGludXgt Mi40LjIwL2luY2x1ZGUvYXNtL2FwaWMuaCIKc3RhdGljIGlubGluZSB2b2lkIGFja19BUElDX2ly cSh2b2lkKQp7CiMgNjMgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS9hcGljLmgi CiAgICAgICAgYXBpY193cml0ZSgoMHhCMCksKDApKTsKfQoKZXh0ZXJuIGludCBnZXRfbWF4bHZ0 KHZvaWQpOwpleHRlcm4gdm9pZCBjbGVhcl9sb2NhbF9BUElDKHZvaWQpOwpleHRlcm4gdm9pZCBj b25uZWN0X2JzcF9BUElDICh2b2lkKTsKZXh0ZXJuIHZvaWQgZGlzY29ubmVjdF9ic3BfQVBJQyAo dm9pZCk7CmV4dGVybiB2b2lkIGRpc2FibGVfbG9jYWxfQVBJQyAodm9pZCk7CmV4dGVybiBpbnQg dmVyaWZ5X2xvY2FsX0FQSUMgKHZvaWQpOwpleHRlcm4gdm9pZCBjYWNoZV9BUElDX3JlZ2lzdGVy cyAodm9pZCk7CmV4dGVybiB2b2lkIHN5bmNfQXJiX0lEcyAodm9pZCk7CmV4dGVybiB2b2lkIGlu aXRfYnNwX0FQSUMgKHZvaWQpOwpleHRlcm4gdm9pZCBzZXR1cF9sb2NhbF9BUElDICh2b2lkKTsK ZXh0ZXJuIHZvaWQgaW5pdF9hcGljX21hcHBpbmdzICh2b2lkKTsKZXh0ZXJuIHZvaWQgc21wX2xv Y2FsX3RpbWVyX2ludGVycnVwdCAoc3RydWN0IHB0X3JlZ3MgKiByZWdzKTsKZXh0ZXJuIHZvaWQg c2V0dXBfQVBJQ19jbG9ja3MgKHZvaWQpOwpleHRlcm4gdm9pZCBzZXR1cF9hcGljX25taV93YXRj aGRvZyAodm9pZCk7CmV4dGVybiBpbmxpbmUgdm9pZCBubWlfd2F0Y2hkb2dfdGljayAoc3RydWN0 IHB0X3JlZ3MgKiByZWdzKTsKZXh0ZXJuIGludCBBUElDX2luaXRfdW5pcHJvY2Vzc29yICh2b2lk KTsKZXh0ZXJuIHZvaWQgZGlzYWJsZV9BUElDX3RpbWVyKHZvaWQpOwpleHRlcm4gdm9pZCBlbmFi bGVfQVBJQ190aW1lcih2b2lkKTsKCmV4dGVybiBzdHJ1Y3QgcG1fZGV2ICphcGljX3BtX3JlZ2lz dGVyKHBtX2Rldl90LCB1bnNpZ25lZCBsb25nLCBwbV9jYWxsYmFjayk7CmV4dGVybiB2b2lkIGFw aWNfcG1fdW5yZWdpc3RlcihzdHJ1Y3QgcG1fZGV2Kik7CgpleHRlcm4gdW5zaWduZWQgaW50IGFw aWNfdGltZXJfaXJxcyBbMzJdOwpleHRlcm4gaW50IGNoZWNrX25taV93YXRjaGRvZyAodm9pZCk7 CgpleHRlcm4gdW5zaWduZWQgaW50IG5taV93YXRjaGRvZzsKIyAyMiAiL3Vzci9zcmMvbGludXgt Mi40LjIwL2luY2x1ZGUvYXNtL3NtcC5oIiAyCiMgMzIgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9p bmNsdWRlL2FzbS9zbXAuaCIKZXh0ZXJuIHZvaWQgc21wX2FsbG9jX21lbW9yeSh2b2lkKTsKZXh0 ZXJuIHVuc2lnbmVkIGxvbmcgcGh5c19jcHVfcHJlc2VudF9tYXA7CmV4dGVybiB1bnNpZ25lZCBs b25nIGNwdV9vbmxpbmVfbWFwOwpleHRlcm4gdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBzbXBfaW52 YWxpZGF0ZV9uZWVkZWQ7CmV4dGVybiBpbnQgcGljX21vZGU7CmV4dGVybiBpbnQgc21wX251bV9z aWJsaW5nczsKZXh0ZXJuIGludCBjcHVfc2libGluZ19tYXBbXTsKCmV4dGVybiB2b2lkIHNtcF9m bHVzaF90bGIodm9pZCk7CmV4dGVybiB2b2lkIHNtcF9tZXNzYWdlX2lycShpbnQgY3BsLCB2b2lk ICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKZXh0ZXJuIHZvaWQgc21wX3NlbmRfcmVz Y2hlZHVsZShpbnQgY3B1KTsKZXh0ZXJuIHZvaWQgc21wX2ludmFsaWRhdGVfcmN2KHZvaWQpOwpl eHRlcm4gdm9pZCAoKm10cnJfaG9vaykgKHZvaWQpOwpleHRlcm4gdm9pZCB6YXBfbG93X21hcHBp bmdzICh2b2lkKTsKCgoKCgoKc3RhdGljIGlubGluZSBpbnQgY3B1X2xvZ2ljYWxfbWFwKGludCBj cHUpCnsKICAgICAgICByZXR1cm4gY3B1Owp9CnN0YXRpYyBpbmxpbmUgaW50IGNwdV9udW1iZXJf bWFwKGludCBjcHUpCnsKICAgICAgICByZXR1cm4gY3B1Owp9CgoKCgoKCmV4dGVybiB2b2xhdGls ZSBpbnQgY3B1X3RvX3BoeXNpY2FsX2FwaWNpZFszMl07CmV4dGVybiB2b2xhdGlsZSBpbnQgcGh5 c2ljYWxfYXBpY2lkX3RvX2NwdVsyNTZdOwpleHRlcm4gdm9sYXRpbGUgaW50IGNwdV90b19sb2dp Y2FsX2FwaWNpZFszMl07CmV4dGVybiB2b2xhdGlsZSBpbnQgbG9naWNhbF9hcGljaWRfdG9fY3B1 WzI1Nl07CgoKCgoKZXh0ZXJuIHZvaWQgc21wX2Jvb3RfY3B1cyh2b2lkKTsKZXh0ZXJuIHZvaWQg c21wX3N0b3JlX2NwdV9pbmZvKGludCBpZCk7CiMgODYgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9p bmNsdWRlL2FzbS9zbXAuaCIKc3RhdGljIF9faW5saW5lIGludCBoYXJkX3NtcF9wcm9jZXNzb3Jf aWQodm9pZCkKewoKICAgICAgICByZXR1cm4gKCgoKih1bnNpZ25lZCBsb25nICopKChmaXhfdG9f dmlydChGSVhfQVBJQ19CQVNFKSkrMHgyMCkpPj4yNCkmMHgwRik7Cn0KCnN0YXRpYyBfX2lubGlu ZSBpbnQgbG9naWNhbF9zbXBfcHJvY2Vzc29yX2lkKHZvaWQpCnsKCiAgICAgICAgcmV0dXJuICgo KCoodW5zaWduZWQgbG9uZyAqKSgoZml4X3RvX3ZpcnQoRklYX0FQSUNfQkFTRSkpKzB4RDApKT4+ MjQpJjB4RkYpOwp9CiMgMTUgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L3Nt cC5oIiAyCiMgMjQgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L3NtcC5oIgpl eHRlcm4gdm9pZCBzbXBfc2VuZF9zdG9wKHZvaWQpOwoKCgoKZXh0ZXJuIHZvaWQgc21wX3NlbmRf cmVzY2hlZHVsZShpbnQgY3B1KSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CgoKCgoKZXh0 ZXJuIHZvaWQgc21wX2Jvb3RfY3B1cyh2b2lkKTsKCgoKCmV4dGVybiB2b2lkIHNtcF9jYWxsaW4o dm9pZCk7CgoKCgpleHRlcm4gdm9pZCBzbXBfY29tbWVuY2Uodm9pZCk7CgoKCgpleHRlcm4gaW50 IHNtcF9jYWxsX2Z1bmN0aW9uICh2b2lkICgqZnVuYykgKHZvaWQgKmluZm8pLCB2b2lkICppbmZv LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmV0cnksIGludCB3YWl0KTsKCgoK CmV4dGVybiBpbnQgc21wX3RocmVhZHNfcmVhZHk7CgpleHRlcm4gaW50IHNtcF9udW1fY3B1czsK CmV4dGVybiB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHNtcF9tc2dfZGF0YTsKZXh0ZXJuIHZvbGF0 aWxlIGludCBzbXBfc3JjX2NwdTsKZXh0ZXJuIHZvbGF0aWxlIGludCBzbXBfbXNnX2lkOwojIDI0 ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9zY2hlZC5oIiAyCiMgMSAiL3Vz ci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvdHR5LmgiIDEKIyAyMSAiL3Vzci9zcmMv bGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvdHR5LmgiCiMgMSAiL3Vzci9zcmMvbGludXgtMi40 LjIwL2luY2x1ZGUvbGludXgvbWFqb3IuaCIgMQojIDE4MCAiL3Vzci9zcmMvbGludXgtMi40LjIw L2luY2x1ZGUvbGludXgvbWFqb3IuaCIKc3RhdGljIF9faW5saW5lX18gaW50IHNjc2lfYmxrX21h am9yKGludCBtKSB7CiAgICAgICAgcmV0dXJuICgoKG0pID09IDggfHwgKChtKSA+PSA2NSAmJiAo bSkgPD0gNzEpKSB8fCAobSkgPT0gMTEpOwp9CiMgMTkzICIvdXNyL3NyYy9saW51eC0yLjQuMjAv aW5jbHVkZS9saW51eC9tYWpvci5oIgpzdGF0aWMgX19pbmxpbmVfXyBpbnQgaWRlX2Jsa19tYWpv cihpbnQgbSkKewogICAgICAgIHJldHVybiAoKG0pID09IDMgfHwgKG0pID09IDIyIHx8IChtKSA9 PSAzMyB8fCAobSkgPT0gMzQgfHwgKG0pID09IDU2IHx8IChtKSA9PSA1NyB8fCAobSkgPT0gODgg fHwgKG0pID09IDg5IHx8IChtKSA9PSA5MCB8fCAobSkgPT0gOTEpOwp9CiMgMjIgIi91c3Ivc3Jj L2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L3R0eS5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgt Mi40LjIwL2luY2x1ZGUvbGludXgvdGVybWlvcy5oIiAxCgoKCgojIDEgIi91c3Ivc3JjL2xpbnV4 LTIuNC4yMC9pbmNsdWRlL2FzbS90ZXJtaW9zLmgiIDEKCgoKIyAxICIvdXNyL3NyYy9saW51eC0y LjQuMjAvaW5jbHVkZS9hc20vdGVybWJpdHMuaCIgMQoKCgoKCnR5cGVkZWYgdW5zaWduZWQgY2hh ciBjY190Owp0eXBlZGVmIHVuc2lnbmVkIGludCBzcGVlZF90Owp0eXBlZGVmIHVuc2lnbmVkIGlu dCB0Y2ZsYWdfdDsKCgpzdHJ1Y3QgdGVybWlvcyB7CiAgICAgICAgdGNmbGFnX3QgY19pZmxhZzsK ICAgICAgICB0Y2ZsYWdfdCBjX29mbGFnOwogICAgICAgIHRjZmxhZ190IGNfY2ZsYWc7CiAgICAg ICAgdGNmbGFnX3QgY19sZmxhZzsKICAgICAgICBjY190IGNfbGluZTsKICAgICAgICBjY190IGNf Y2NbMTldOwp9OwojIDUgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS90ZXJtaW9z LmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9hc20vaW9jdGxzLmgiIDEK IyA2ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9hc20vdGVybWlvcy5oIiAyCgpzdHJ1 Y3Qgd2luc2l6ZSB7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgd3Nfcm93OwogICAgICAgIHVuc2ln bmVkIHNob3J0IHdzX2NvbDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCB3c194cGl4ZWw7CiAgICAg ICAgdW5zaWduZWQgc2hvcnQgd3NfeXBpeGVsOwp9OwoKCnN0cnVjdCB0ZXJtaW8gewogICAgICAg IHVuc2lnbmVkIHNob3J0IGNfaWZsYWc7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgY19vZmxhZzsK ICAgICAgICB1bnNpZ25lZCBzaG9ydCBjX2NmbGFnOwogICAgICAgIHVuc2lnbmVkIHNob3J0IGNf bGZsYWc7CiAgICAgICAgdW5zaWduZWQgY2hhciBjX2xpbmU7CiAgICAgICAgdW5zaWduZWQgY2hh ciBjX2NjWzhdOwp9OwojIDYgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L3Rl cm1pb3MuaCIgMgojIDIzICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC90dHku aCIgMgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC90dHlfZHJpdmVy LmgiIDEKIyAxMjAgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L3R0eV9kcml2 ZXIuaCIKc3RydWN0IHR0eV9kcml2ZXIgewogICAgICAgIGludCBtYWdpYzsKICAgICAgICBjb25z dCBjaGFyICpkcml2ZXJfbmFtZTsKICAgICAgICBjb25zdCBjaGFyICpuYW1lOwogICAgICAgIGlu dCBuYW1lX2Jhc2U7CiAgICAgICAgc2hvcnQgbWFqb3I7CiAgICAgICAgc2hvcnQgbWlub3Jfc3Rh cnQ7CiAgICAgICAgc2hvcnQgbnVtOwogICAgICAgIHNob3J0IHR5cGU7CiAgICAgICAgc2hvcnQg c3VidHlwZTsKICAgICAgICBzdHJ1Y3QgdGVybWlvcyBpbml0X3Rlcm1pb3M7CiAgICAgICAgaW50 IGZsYWdzOwogICAgICAgIGludCAqcmVmY291bnQ7CiAgICAgICAgc3RydWN0IHByb2NfZGlyX2Vu dHJ5ICpwcm9jX2VudHJ5OwogICAgICAgIHN0cnVjdCB0dHlfZHJpdmVyICpvdGhlcjsKCgoKCiAg ICAgICAgc3RydWN0IHR0eV9zdHJ1Y3QgKip0YWJsZTsKICAgICAgICBzdHJ1Y3QgdGVybWlvcyAq KnRlcm1pb3M7CiAgICAgICAgc3RydWN0IHRlcm1pb3MgKip0ZXJtaW9zX2xvY2tlZDsKICAgICAg ICB2b2lkICpkcml2ZXJfc3RhdGU7CgoKCgoKICAgICAgICBpbnQgKCpvcGVuKShzdHJ1Y3QgdHR5 X3N0cnVjdCAqIHR0eSwgc3RydWN0IGZpbGUgKiBmaWxwKTsKICAgICAgICB2b2lkICgqY2xvc2Up KHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbHApOwogICAgICAgIGlu dCAoKndyaXRlKShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSwgaW50IGZyb21fdXNlciwKICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KTsKICAg ICAgICB2b2lkICgqcHV0X2NoYXIpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHVuc2lnbmVkIGNo YXIgY2gpOwogICAgICAgIHZvaWQgKCpmbHVzaF9jaGFycykoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0 eSk7CiAgICAgICAgaW50ICgqd3JpdGVfcm9vbSkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiAg ICAgICAgaW50ICgqY2hhcnNfaW5fYnVmZmVyKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKICAg ICAgICBpbnQgKCppb2N0bCkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKiBm aWxlLAogICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcg YXJnKTsKICAgICAgICB2b2lkICgqc2V0X3Rlcm1pb3MpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHks IHN0cnVjdCB0ZXJtaW9zICogb2xkKTsKICAgICAgICB2b2lkICgqdGhyb3R0bGUpKHN0cnVjdCB0 dHlfc3RydWN0ICogdHR5KTsKICAgICAgICB2b2lkICgqdW50aHJvdHRsZSkoc3RydWN0IHR0eV9z dHJ1Y3QgKiB0dHkpOwogICAgICAgIHZvaWQgKCpzdG9wKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5 KTsKICAgICAgICB2b2lkICgqc3RhcnQpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogICAgICAg IHZvaWQgKCpoYW5ndXApKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogICAgICAgIHZvaWQgKCpi cmVha19jdGwpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBzdGF0ZSk7CiAgICAgICAgdm9p ZCAoKmZsdXNoX2J1ZmZlcikoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiAgICAgICAgdm9pZCAo KnNldF9sZGlzYykoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiAgICAgICAgdm9pZCAoKndhaXRf dW50aWxfc2VudCkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IHRpbWVvdXQpOwogICAgICAg IHZvaWQgKCpzZW5kX3hjaGFyKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjaGFyIGNoKTsKICAg ICAgICBpbnQgKCpyZWFkX3Byb2MpKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zm LAogICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRh dGEpOwogICAgICAgIGludCAoKndyaXRlX3Byb2MpKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBj aGFyICpidWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBjb3Vu dCwgdm9pZCAqZGF0YSk7CgoKCgogICAgICAgIHN0cnVjdCB0dHlfZHJpdmVyICpuZXh0OwogICAg ICAgIHN0cnVjdCB0dHlfZHJpdmVyICpwcmV2Owp9OwojIDI1ICIvdXNyL3NyYy9saW51eC0yLjQu MjAvaW5jbHVkZS9saW51eC90dHkuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNs dWRlL2xpbnV4L3R0eV9sZGlzYy5oIiAxCiMgMTAzICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5j bHVkZS9saW51eC90dHlfbGRpc2MuaCIKc3RydWN0IHR0eV9sZGlzYyB7CiAgICAgICAgaW50IG1h Z2ljOwogICAgICAgIGNoYXIgKm5hbWU7CiAgICAgICAgaW50IG51bTsKICAgICAgICBpbnQgZmxh Z3M7CgoKCiAgICAgICAgaW50ICgqb3Blbikoc3RydWN0IHR0eV9zdHJ1Y3QgKik7CiAgICAgICAg dm9pZCAoKmNsb3NlKShzdHJ1Y3QgdHR5X3N0cnVjdCAqKTsKICAgICAgICB2b2lkICgqZmx1c2hf YnVmZmVyKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKICAgICAgICBzc2l6ZV90ICgqY2hhcnNf aW5fYnVmZmVyKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKICAgICAgICBzc2l6ZV90ICgqcmVh ZCkoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHksIHN0cnVjdCBmaWxlICogZmlsZSwKICAgICAgICAg ICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqIGJ1Ziwgc2l6ZV90IG5yKTsKICAgICAgICBz c2l6ZV90ICgqd3JpdGUpKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCBzdHJ1Y3QgZmlsZSAqIGZp bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICogYnVmLCBz aXplX3QgbnIpOwogICAgICAgIGludCAoKmlvY3RsKShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSwg c3RydWN0IGZpbGUgKiBmaWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50 IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogICAgICAgIHZvaWQgKCpzZXRfdGVybWlvcykoc3Ry dWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHRlcm1pb3MgKiBvbGQpOwogICAgICAgIHVuc2ln bmVkIGludCAoKnBvbGwpKHN0cnVjdCB0dHlfc3RydWN0ICosIHN0cnVjdCBmaWxlICosCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICopOwoKCgoK ICAgICAgICB2b2lkICgqcmVjZWl2ZV9idWYpKHN0cnVjdCB0dHlfc3RydWN0ICosIGNvbnN0IHVu c2lnbmVkIGNoYXIgKmNwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZnAs IGludCBjb3VudCk7CiAgICAgICAgaW50ICgqcmVjZWl2ZV9yb29tKShzdHJ1Y3QgdHR5X3N0cnVj dCAqKTsKICAgICAgICB2b2lkICgqd3JpdGVfd2FrZXVwKShzdHJ1Y3QgdHR5X3N0cnVjdCAqKTsK fTsKIyAyNiAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvdHR5LmgiIDIKIyA1 OSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvdHR5LmgiCnN0cnVjdCBzY3Jl ZW5faW5mbyB7CiAgICAgICAgdTggb3JpZ194OwogICAgICAgIHU4IG9yaWdfeTsKICAgICAgICB1 MTYgZG9udHVzZTE7CiAgICAgICAgdTE2IG9yaWdfdmlkZW9fcGFnZTsKICAgICAgICB1OCBvcmln X3ZpZGVvX21vZGU7CiAgICAgICAgdTggb3JpZ192aWRlb19jb2xzOwogICAgICAgIHUxNiB1bnVz ZWQyOwogICAgICAgIHUxNiBvcmlnX3ZpZGVvX2VnYV9ieDsKICAgICAgICB1MTYgdW51c2VkMzsK ICAgICAgICB1OCBvcmlnX3ZpZGVvX2xpbmVzOwogICAgICAgIHU4IG9yaWdfdmlkZW9faXNWR0E7 CiAgICAgICAgdTE2IG9yaWdfdmlkZW9fcG9pbnRzOwoKCiAgICAgICAgdTE2IGxmYl93aWR0aDsK ICAgICAgICB1MTYgbGZiX2hlaWdodDsKICAgICAgICB1MTYgbGZiX2RlcHRoOwogICAgICAgIHUz MiBsZmJfYmFzZTsKICAgICAgICB1MzIgbGZiX3NpemU7CiAgICAgICAgdTE2IGRvbnR1c2UyLCBk b250dXNlMzsKICAgICAgICB1MTYgbGZiX2xpbmVsZW5ndGg7CiAgICAgICAgdTggcmVkX3NpemU7 CiAgICAgICAgdTggcmVkX3BvczsKICAgICAgICB1OCBncmVlbl9zaXplOwogICAgICAgIHU4IGdy ZWVuX3BvczsKICAgICAgICB1OCBibHVlX3NpemU7CiAgICAgICAgdTggYmx1ZV9wb3M7CiAgICAg ICAgdTggcnN2ZF9zaXplOwogICAgICAgIHU4IHJzdmRfcG9zOwogICAgICAgIHUxNiB2ZXNhcG1f c2VnOwogICAgICAgIHUxNiB2ZXNhcG1fb2ZmOwogICAgICAgIHUxNiBwYWdlczsKCn07CgpleHRl cm4gc3RydWN0IHNjcmVlbl9pbmZvIHNjcmVlbl9pbmZvOwojIDEzOSAiL3Vzci9zcmMvbGludXgt Mi40LjIwL2luY2x1ZGUvbGludXgvdHR5LmgiCnN0cnVjdCB0dHlfZmxpcF9idWZmZXIgewogICAg ICAgIHN0cnVjdCB0cV9zdHJ1Y3QgdHF1ZXVlOwogICAgICAgIHN0cnVjdCBzZW1hcGhvcmUgcHR5 X3NlbTsKICAgICAgICBjaGFyICpjaGFyX2J1Zl9wdHI7CiAgICAgICAgdW5zaWduZWQgY2hhciAq ZmxhZ19idWZfcHRyOwogICAgICAgIGludCBjb3VudDsKICAgICAgICBpbnQgYnVmX251bTsKICAg ICAgICB1bnNpZ25lZCBjaGFyIGNoYXJfYnVmWzIqNTEyXTsKICAgICAgICBjaGFyIGZsYWdfYnVm WzIqNTEyXTsKICAgICAgICB1bnNpZ25lZCBjaGFyIHNsb3BbNF07Cn07CiMgMjU5ICIvdXNyL3Ny Yy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC90dHkuaCIKc3RydWN0IHR0eV9zdHJ1Y3Qgewog ICAgICAgIGludCBtYWdpYzsKICAgICAgICBzdHJ1Y3QgdHR5X2RyaXZlciBkcml2ZXI7CiAgICAg ICAgc3RydWN0IHR0eV9sZGlzYyBsZGlzYzsKICAgICAgICBzdHJ1Y3QgdGVybWlvcyAqdGVybWlv cywgKnRlcm1pb3NfbG9ja2VkOwogICAgICAgIGludCBwZ3JwOwogICAgICAgIGludCBzZXNzaW9u OwogICAgICAgIGtkZXZfdCBkZXZpY2U7CiAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKICAg ICAgICBpbnQgY291bnQ7CiAgICAgICAgc3RydWN0IHdpbnNpemUgd2luc2l6ZTsKICAgICAgICB1 bnNpZ25lZCBjaGFyIHN0b3BwZWQ6MSwgaHdfc3RvcHBlZDoxLCBmbG93X3N0b3BwZWQ6MSwgcGFj a2V0OjE7CiAgICAgICAgdW5zaWduZWQgY2hhciBsb3dfbGF0ZW5jeToxLCB3YXJuZWQ6MTsKICAg ICAgICB1bnNpZ25lZCBjaGFyIGN0cmxfc3RhdHVzOwoKICAgICAgICBzdHJ1Y3QgdHR5X3N0cnVj dCAqbGluazsKICAgICAgICBzdHJ1Y3QgZmFzeW5jX3N0cnVjdCAqZmFzeW5jOwogICAgICAgIHN0 cnVjdCB0dHlfZmxpcF9idWZmZXIgZmxpcDsKICAgICAgICBpbnQgbWF4X2ZsaXBfY250OwogICAg ICAgIGludCBhbHRfc3BlZWQ7CiAgICAgICAgd2FpdF9xdWV1ZV9oZWFkX3Qgd3JpdGVfd2FpdDsK ICAgICAgICB3YWl0X3F1ZXVlX2hlYWRfdCByZWFkX3dhaXQ7CiAgICAgICAgc3RydWN0IHRxX3N0 cnVjdCB0cV9oYW5ndXA7CiAgICAgICAgdm9pZCAqZGlzY19kYXRhOwogICAgICAgIHZvaWQgKmRy aXZlcl9kYXRhOwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgdHR5X2ZpbGVzOwoKCgoKCgoKICAg ICAgICB1bnNpZ25lZCBpbnQgY29sdW1uOwogICAgICAgIHVuc2lnbmVkIGNoYXIgbG5leHQ6MSwg ZXJhc2luZzoxLCByYXc6MSwgcmVhbF9yYXc6MSwgaWNhbm9uOjE7CiAgICAgICAgdW5zaWduZWQg Y2hhciBjbG9zaW5nOjE7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgbWluaW11bV90b193YWtlOwog ICAgICAgIHVuc2lnbmVkIGxvbmcgb3ZlcnJ1bl90aW1lOwogICAgICAgIGludCBudW1fb3ZlcnJ1 bjsKICAgICAgICB1bnNpZ25lZCBsb25nIHByb2Nlc3NfY2hhcl9tYXBbMjU2Lyg4KnNpemVvZih1 bnNpZ25lZCBsb25nKSldOwogICAgICAgIGNoYXIgKnJlYWRfYnVmOwogICAgICAgIGludCByZWFk X2hlYWQ7CiAgICAgICAgaW50IHJlYWRfdGFpbDsKICAgICAgICBpbnQgcmVhZF9jbnQ7CiAgICAg ICAgdW5zaWduZWQgbG9uZyByZWFkX2ZsYWdzWzQwOTYvKDgqc2l6ZW9mKHVuc2lnbmVkIGxvbmcp KV07CiAgICAgICAgaW50IGNhbm9uX2RhdGE7CiAgICAgICAgdW5zaWduZWQgbG9uZyBjYW5vbl9o ZWFkOwogICAgICAgIHVuc2lnbmVkIGludCBjYW5vbl9jb2x1bW47CiAgICAgICAgc3RydWN0IHNl bWFwaG9yZSBhdG9taWNfcmVhZDsKICAgICAgICBzdHJ1Y3Qgc2VtYXBob3JlIGF0b21pY193cml0 ZTsKICAgICAgICBzcGlubG9ja190IHJlYWRfbG9jazsKCiAgICAgICAgc3RydWN0IHRxX3N0cnVj dCBTQUtfdHE7Cn07CiMgMzQxICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC90 dHkuaCIKZXh0ZXJuIHZvaWQgdHR5X3dyaXRlX2ZsdXNoKHN0cnVjdCB0dHlfc3RydWN0ICopOwoK ZXh0ZXJuIHN0cnVjdCB0ZXJtaW9zIHR0eV9zdGRfdGVybWlvczsKZXh0ZXJuIHN0cnVjdCB0dHlf c3RydWN0ICogcmVkaXJlY3Q7CmV4dGVybiBzdHJ1Y3QgdHR5X2xkaXNjIGxkaXNjc1tdOwpleHRl cm4gaW50IGZnX2NvbnNvbGUsIGxhc3RfY29uc29sZSwgd2FudF9jb25zb2xlOwoKZXh0ZXJuIGlu dCBrbXNnX3JlZGlyZWN0OwoKZXh0ZXJuIHZvaWQgY29uX2luaXQodm9pZCk7CmV4dGVybiB2b2lk IGNvbnNvbGVfaW5pdCh2b2lkKTsKCmV4dGVybiBpbnQgbHBfaW5pdCh2b2lkKTsKZXh0ZXJuIGlu dCBwdHlfaW5pdCh2b2lkKTsKZXh0ZXJuIHZvaWQgdHR5X2luaXQodm9pZCk7CmV4dGVybiBpbnQg bXhzZXJfaW5pdCh2b2lkKTsKZXh0ZXJuIGludCBtb3hhX2luaXQodm9pZCk7CmV4dGVybiBpbnQg aXAyX2luaXQodm9pZCk7CmV4dGVybiBpbnQgcGN4ZV9pbml0KHZvaWQpOwpleHRlcm4gaW50IHBj X2luaXQodm9pZCk7CmV4dGVybiBpbnQgdmNzX2luaXQodm9pZCk7CmV4dGVybiBpbnQgcnBfaW5p dCh2b2lkKTsKZXh0ZXJuIGludCBjeV9pbml0KHZvaWQpOwpleHRlcm4gaW50IHN0bF9pbml0KHZv aWQpOwpleHRlcm4gaW50IHN0bGlfaW5pdCh2b2lkKTsKZXh0ZXJuIGludCBzcGVjaWFsaXhfaW5p dCh2b2lkKTsKZXh0ZXJuIGludCBlc3BzZXJpYWxfaW5pdCh2b2lkKTsKZXh0ZXJuIGludCBtYWNz ZXJpYWxfaW5pdCh2b2lkKTsKZXh0ZXJuIGludCBhMjIzMmJvYXJkX2luaXQodm9pZCk7CgpleHRl cm4gaW50IHR0eV9wYXJhbm9pYV9jaGVjayhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBrZGV2X3Qg ZGV2aWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpyb3V0aW5l KTsKZXh0ZXJuIGNoYXIgKnR0eV9uYW1lKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNoYXIgKmJ1 Zik7CmV4dGVybiB2b2lkIHR0eV93YWl0X3VudGlsX3NlbnQoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0 dHksIGxvbmcgdGltZW91dCk7CmV4dGVybiBpbnQgdHR5X2NoZWNrX2NoYW5nZShzdHJ1Y3QgdHR5 X3N0cnVjdCAqIHR0eSk7CmV4dGVybiB2b2lkIHN0b3BfdHR5KHN0cnVjdCB0dHlfc3RydWN0ICog dHR5KTsKZXh0ZXJuIHZvaWQgc3RhcnRfdHR5KHN0cnVjdCB0dHlfc3RydWN0ICogdHR5KTsKZXh0 ZXJuIGludCB0dHlfcmVnaXN0ZXJfbGRpc2MoaW50IGRpc2MsIHN0cnVjdCB0dHlfbGRpc2MgKm5l d19sZGlzYyk7CmV4dGVybiBpbnQgdHR5X3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgdHR5X2RyaXZl ciAqZHJpdmVyKTsKZXh0ZXJuIGludCB0dHlfdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHR0eV9k cml2ZXIgKmRyaXZlcik7CmV4dGVybiB2b2lkIHR0eV9yZWdpc3Rlcl9kZXZmcyAoc3RydWN0IHR0 eV9kcml2ZXIgKmRyaXZlciwgdW5zaWduZWQgaW50IGZsYWdzLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVuc2lnbmVkIG1pbm9yKTsKZXh0ZXJuIHZvaWQgdHR5X3VucmVnaXN0ZXJf ZGV2ZnMgKHN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXIsIHVuc2lnbmVkIG1pbm9yKTsKZXh0ZXJu IGludCB0dHlfcmVhZF9yYXdfZGF0YShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCB1bnNpZ25lZCBj aGFyICpidWZwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBidWZsZW4pOwpleHRl cm4gdm9pZCB0dHlfd3JpdGVfbWVzc2FnZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjaGFyICpt c2cpOwoKZXh0ZXJuIGludCBpc19vcnBoYW5lZF9wZ3JwKGludCBwZ3JwKTsKZXh0ZXJuIGludCBp c19pZ25vcmVkKGludCBzaWcpOwpleHRlcm4gaW50IHR0eV9zaWduYWwoaW50IHNpZywgc3RydWN0 IHR0eV9zdHJ1Y3QgKnR0eSk7CmV4dGVybiB2b2lkIHR0eV9oYW5ndXAoc3RydWN0IHR0eV9zdHJ1 Y3QgKiB0dHkpOwpleHRlcm4gdm9pZCB0dHlfdmhhbmd1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0 eSk7CmV4dGVybiB2b2lkIHR0eV91bmhhbmd1cChzdHJ1Y3QgZmlsZSAqZmlscCk7CmV4dGVybiBp bnQgdHR5X2h1bmdfdXBfcChzdHJ1Y3QgZmlsZSAqIGZpbHApOwpleHRlcm4gdm9pZCBkb19TQUso c3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CmV4dGVybiB2b2lkIGRpc2Fzc29jaWF0ZV9jdHR5KGlu dCBwcml2KTsKZXh0ZXJuIHZvaWQgdHR5X2ZsaXBfYnVmZmVyX3B1c2goc3RydWN0IHR0eV9zdHJ1 Y3QgKnR0eSk7CmV4dGVybiBpbnQgdHR5X2dldF9iYXVkX3JhdGUoc3RydWN0IHR0eV9zdHJ1Y3Qg KnR0eSk7CgoKZXh0ZXJuIHN0cnVjdCB0dHlfbGRpc2MgdHR5X2xkaXNjX05fVFRZOwoKCmV4dGVy biBpbnQgbl90dHlfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHksIHN0cnVjdCBmaWxlICog ZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBs b25nIGFyZyk7CgoKCmV4dGVybiB2b2lkIHNlcmlhbF9jb25zb2xlX2luaXQodm9pZCk7CgoKCmV4 dGVybiBpbnQgcGN4ZV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpm aWxwKTsKCgoKZXh0ZXJuIHZvaWQgY29uc29sZV9wcmludChjb25zdCBjaGFyICopOwoKCgpleHRl cm4gaW50IHZ0X2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICogZmls ZSwKICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFy Zyk7CiMgMjUgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiIDIK IyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9zZW0uaCIgMQoKCgojIDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L2lwYy5oIiAxCiMgOSAiL3Vzci9z cmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvaXBjLmgiCnN0cnVjdCBpcGNfcGVybQp7CiAg ICAgICAgX19rZXJuZWxfa2V5X3Qga2V5OwogICAgICAgIF9fa2VybmVsX3VpZF90IHVpZDsKICAg ICAgICBfX2tlcm5lbF9naWRfdCBnaWQ7CiAgICAgICAgX19rZXJuZWxfdWlkX3QgY3VpZDsKICAg ICAgICBfX2tlcm5lbF9naWRfdCBjZ2lkOwogICAgICAgIF9fa2VybmVsX21vZGVfdCBtb2RlOwog ICAgICAgIHVuc2lnbmVkIHNob3J0IHNlcTsKfTsKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4y MC9pbmNsdWRlL2FzbS9pcGNidWYuaCIgMQojIDE0ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5j bHVkZS9hc20vaXBjYnVmLmgiCnN0cnVjdCBpcGM2NF9wZXJtCnsKICAgICAgICBfX2tlcm5lbF9r ZXlfdCBrZXk7CiAgICAgICAgX19rZXJuZWxfdWlkMzJfdCB1aWQ7CiAgICAgICAgX19rZXJuZWxf Z2lkMzJfdCBnaWQ7CiAgICAgICAgX19rZXJuZWxfdWlkMzJfdCBjdWlkOwogICAgICAgIF9fa2Vy bmVsX2dpZDMyX3QgY2dpZDsKICAgICAgICBfX2tlcm5lbF9tb2RlX3QgbW9kZTsKICAgICAgICB1 bnNpZ25lZCBzaG9ydCBfX3BhZDE7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc2VxOwogICAgICAg IHVuc2lnbmVkIHNob3J0IF9fcGFkMjsKICAgICAgICB1bnNpZ25lZCBsb25nIF9fdW51c2VkMTsK ICAgICAgICB1bnNpZ25lZCBsb25nIF9fdW51c2VkMjsKfTsKIyAyMiAiL3Vzci9zcmMvbGludXgt Mi40LjIwL2luY2x1ZGUvbGludXgvaXBjLmgiIDIKIyA1NyAiL3Vzci9zcmMvbGludXgtMi40LjIw L2luY2x1ZGUvbGludXgvaXBjLmgiCnN0cnVjdCBrZXJuX2lwY19wZXJtCnsKICAgICAgICBrZXlf dCBrZXk7CiAgICAgICAgdWlkX3QgdWlkOwogICAgICAgIGdpZF90IGdpZDsKICAgICAgICB1aWRf dCBjdWlkOwogICAgICAgIGdpZF90IGNnaWQ7CiAgICAgICAgbW9kZV90IG1vZGU7CiAgICAgICAg dW5zaWduZWQgbG9uZyBzZXE7Cn07CiMgNSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUv bGludXgvc2VtLmgiIDIKIyAyMyAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgv c2VtLmgiCnN0cnVjdCBzZW1pZF9kcyB7CiAgICAgICAgc3RydWN0IGlwY19wZXJtIHNlbV9wZXJt OwogICAgICAgIF9fa2VybmVsX3RpbWVfdCBzZW1fb3RpbWU7CiAgICAgICAgX19rZXJuZWxfdGlt ZV90IHNlbV9jdGltZTsKICAgICAgICBzdHJ1Y3Qgc2VtICpzZW1fYmFzZTsKICAgICAgICBzdHJ1 Y3Qgc2VtX3F1ZXVlICpzZW1fcGVuZGluZzsKICAgICAgICBzdHJ1Y3Qgc2VtX3F1ZXVlICoqc2Vt X3BlbmRpbmdfbGFzdDsKICAgICAgICBzdHJ1Y3Qgc2VtX3VuZG8gKnVuZG87CiAgICAgICAgdW5z aWduZWQgc2hvcnQgc2VtX25zZW1zOwp9OwoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2lu Y2x1ZGUvYXNtL3NlbWJ1Zi5oIiAxCiMgMTQgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRl L2FzbS9zZW1idWYuaCIKc3RydWN0IHNlbWlkNjRfZHMgewogICAgICAgIHN0cnVjdCBpcGM2NF9w ZXJtIHNlbV9wZXJtOwogICAgICAgIF9fa2VybmVsX3RpbWVfdCBzZW1fb3RpbWU7CiAgICAgICAg dW5zaWduZWQgbG9uZyBfX3VudXNlZDE7CiAgICAgICAgX19rZXJuZWxfdGltZV90IHNlbV9jdGlt ZTsKICAgICAgICB1bnNpZ25lZCBsb25nIF9fdW51c2VkMjsKICAgICAgICB1bnNpZ25lZCBsb25n IHNlbV9uc2VtczsKICAgICAgICB1bnNpZ25lZCBsb25nIF9fdW51c2VkMzsKICAgICAgICB1bnNp Z25lZCBsb25nIF9fdW51c2VkNDsKfTsKIyAzNiAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1 ZGUvbGludXgvc2VtLmgiIDIKCgpzdHJ1Y3Qgc2VtYnVmIHsKICAgICAgICB1bnNpZ25lZCBzaG9y dCBzZW1fbnVtOwogICAgICAgIHNob3J0IHNlbV9vcDsKICAgICAgICBzaG9ydCBzZW1fZmxnOwp9 OwoKCnVuaW9uIHNlbXVuIHsKICAgICAgICBpbnQgdmFsOwogICAgICAgIHN0cnVjdCBzZW1pZF9k cyAqYnVmOwogICAgICAgIHVuc2lnbmVkIHNob3J0ICphcnJheTsKICAgICAgICBzdHJ1Y3Qgc2Vt aW5mbyAqX19idWY7CiAgICAgICAgdm9pZCAqX19wYWQ7Cn07CgpzdHJ1Y3Qgc2VtaW5mbyB7CiAg ICAgICAgaW50IHNlbW1hcDsKICAgICAgICBpbnQgc2VtbW5pOwogICAgICAgIGludCBzZW1tbnM7 CiAgICAgICAgaW50IHNlbW1udTsKICAgICAgICBpbnQgc2VtbXNsOwogICAgICAgIGludCBzZW1v cG07CiAgICAgICAgaW50IHNlbXVtZTsKICAgICAgICBpbnQgc2VtdXN6OwogICAgICAgIGludCBz ZW12bXg7CiAgICAgICAgaW50IHNlbWFlbTsKfTsKIyA4MiAiL3Vzci9zcmMvbGludXgtMi40LjIw L2luY2x1ZGUvbGludXgvc2VtLmgiCnN0cnVjdCBzZW0gewogICAgICAgIGludCBzZW12YWw7CiAg ICAgICAgaW50IHNlbXBpZDsKfTsKCgpzdHJ1Y3Qgc2VtX2FycmF5IHsKICAgICAgICBzdHJ1Y3Qg a2Vybl9pcGNfcGVybSBzZW1fcGVybTsKICAgICAgICB0aW1lX3Qgc2VtX290aW1lOwogICAgICAg IHRpbWVfdCBzZW1fY3RpbWU7CiAgICAgICAgc3RydWN0IHNlbSAqc2VtX2Jhc2U7CiAgICAgICAg c3RydWN0IHNlbV9xdWV1ZSAqc2VtX3BlbmRpbmc7CiAgICAgICAgc3RydWN0IHNlbV9xdWV1ZSAq KnNlbV9wZW5kaW5nX2xhc3Q7CiAgICAgICAgc3RydWN0IHNlbV91bmRvICp1bmRvOwogICAgICAg IHVuc2lnbmVkIGxvbmcgc2VtX25zZW1zOwp9OwoKCnN0cnVjdCBzZW1fcXVldWUgewogICAgICAg IHN0cnVjdCBzZW1fcXVldWUgKiBuZXh0OwogICAgICAgIHN0cnVjdCBzZW1fcXVldWUgKiogcHJl djsKICAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QqIHNsZWVwZXI7CiAgICAgICAgc3RydWN0IHNl bV91bmRvICogdW5kbzsKICAgICAgICBpbnQgcGlkOwogICAgICAgIGludCBzdGF0dXM7CiAgICAg ICAgc3RydWN0IHNlbV9hcnJheSAqIHNtYTsKICAgICAgICBpbnQgaWQ7CiAgICAgICAgc3RydWN0 IHNlbWJ1ZiAqIHNvcHM7CiAgICAgICAgaW50IG5zb3BzOwogICAgICAgIGludCBhbHRlcjsKfTsK CgoKCnN0cnVjdCBzZW1fdW5kbyB7CiAgICAgICAgc3RydWN0IHNlbV91bmRvICogcHJvY19uZXh0 OwogICAgICAgIHN0cnVjdCBzZW1fdW5kbyAqIGlkX25leHQ7CiAgICAgICAgaW50IHNlbWlkOwog ICAgICAgIHNob3J0ICogc2VtYWRqOwp9OwoKIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMCkpKSBs b25nIHN5c19zZW1nZXQgKGtleV90IGtleSwgaW50IG5zZW1zLCBpbnQgc2VtZmxnKTsKIF9fYXR0 cmlidXRlX18oKHJlZ3Bhcm0oMCkpKSBsb25nIHN5c19zZW1vcCAoaW50IHNlbWlkLCBzdHJ1Y3Qg c2VtYnVmICpzb3BzLCB1bnNpZ25lZCBuc29wcyk7CiBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDAp KSkgbG9uZyBzeXNfc2VtY3RsIChpbnQgc2VtaWQsIGludCBzZW1udW0sIGludCBjbWQsIHVuaW9u IHNlbXVuIGFyZyk7CiMgMjYgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L3Nj aGVkLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9zaWduYWwu aCIgMQoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS9zaWduYWwuaCIg MQoKCgoKCgpzdHJ1Y3Qgc2lnaW5mbzsKIyAxNyAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1 ZGUvYXNtL3NpZ25hbC5oIgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgb2xkX3NpZ3NldF90OwoKdHlw ZWRlZiBzdHJ1Y3QgewogICAgICAgIHVuc2lnbmVkIGxvbmcgc2lnWyg2NCAvIDMyKV07Cn0gc2ln c2V0X3Q7CiMgMTI5ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9hc20vc2lnbmFsLmgi CnR5cGVkZWYgdm9pZCAoKl9fc2lnaGFuZGxlcl90KShpbnQpOwoKCgoKCgpzdHJ1Y3Qgb2xkX3Np Z2FjdGlvbiB7CiAgICAgICAgX19zaWdoYW5kbGVyX3Qgc2FfaGFuZGxlcjsKICAgICAgICBvbGRf c2lnc2V0X3Qgc2FfbWFzazsKICAgICAgICB1bnNpZ25lZCBsb25nIHNhX2ZsYWdzOwogICAgICAg IHZvaWQgKCpzYV9yZXN0b3Jlcikodm9pZCk7Cn07CgpzdHJ1Y3Qgc2lnYWN0aW9uIHsKICAgICAg ICBfX3NpZ2hhbmRsZXJfdCBzYV9oYW5kbGVyOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc2FfZmxh Z3M7CiAgICAgICAgdm9pZCAoKnNhX3Jlc3RvcmVyKSh2b2lkKTsKICAgICAgICBzaWdzZXRfdCBz YV9tYXNrOwp9OwoKc3RydWN0IGtfc2lnYWN0aW9uIHsKICAgICAgICBzdHJ1Y3Qgc2lnYWN0aW9u IHNhOwp9OwojIDE3MSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvYXNtL3NpZ25hbC5o Igp0eXBlZGVmIHN0cnVjdCBzaWdhbHRzdGFjayB7CiAgICAgICAgdm9pZCAqc3Nfc3A7CiAgICAg ICAgaW50IHNzX2ZsYWdzOwogICAgICAgIHNpemVfdCBzc19zaXplOwp9IHN0YWNrX3Q7CgoKCgoK CnN0YXRpYyBfX2lubGluZV9fIHZvaWQgc2lnYWRkc2V0KHNpZ3NldF90ICpzZXQsIGludCBfc2ln KQp7CiAgICAgICAgX19hc21fXygiYnRzbCAlMSwlMCIgOiAiPW0iKCpzZXQpIDogIklyIihfc2ln IC0gMSkgOiAiY2MiKTsKfQoKc3RhdGljIF9faW5saW5lX18gdm9pZCBzaWdkZWxzZXQoc2lnc2V0 X3QgKnNldCwgaW50IF9zaWcpCnsKICAgICAgICBfX2FzbV9fKCJidHJsICUxLCUwIiA6ICI9bSIo KnNldCkgOiAiSXIiKF9zaWcgLSAxKSA6ICJjYyIpOwp9CgpzdGF0aWMgX19pbmxpbmVfXyBpbnQg X19jb25zdF9zaWdpc21lbWJlcihzaWdzZXRfdCAqc2V0LCBpbnQgX3NpZykKewogICAgICAgIHVu c2lnbmVkIGxvbmcgc2lnID0gX3NpZyAtIDE7CiAgICAgICAgcmV0dXJuIDEgJiAoc2V0LT5zaWdb c2lnIC8gMzJdID4+IChzaWcgJSAzMikpOwp9CgpzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19nZW5f c2lnaXNtZW1iZXIoc2lnc2V0X3QgKnNldCwgaW50IF9zaWcpCnsKICAgICAgICBpbnQgcmV0Owog ICAgICAgIF9fYXNtX18oImJ0bCAlMiwlMVxuXHRzYmJsICUwLCUwIgogICAgICAgICAgICAgICAg OiAiPXIiKHJldCkgOiAibSIoKnNldCksICJJciIoX3NpZy0xKSA6ICJjYyIpOwogICAgICAgIHJl dHVybiByZXQ7Cn0KIyAyMTMgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS9zaWdu YWwuaCIKc3RhdGljIF9faW5saW5lX18gaW50IHNpZ2ZpbmRpbndvcmQodW5zaWduZWQgbG9uZyB3 b3JkKQp7CiAgICAgICAgX19hc21fXygiYnNmbCAlMSwlMCIgOiAiPXIiKHdvcmQpIDogInJtIih3 b3JkKSA6ICJjYyIpOwogICAgICAgIHJldHVybiB3b3JkOwp9CiMgNSAiL3Vzci9zcmMvbGludXgt Mi40LjIwL2luY2x1ZGUvbGludXgvc2lnbmFsLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQu MjAvaW5jbHVkZS9hc20vc2lnaW5mby5oIiAxCgoKCgoKCgp0eXBlZGVmIHVuaW9uIHNpZ3ZhbCB7 CiAgICAgICAgaW50IHNpdmFsX2ludDsKICAgICAgICB2b2lkICpzaXZhbF9wdHI7Cn0gc2lndmFs X3Q7CgoKCgp0eXBlZGVmIHN0cnVjdCBzaWdpbmZvIHsKICAgICAgICBpbnQgc2lfc2lnbm87CiAg ICAgICAgaW50IHNpX2Vycm5vOwogICAgICAgIGludCBzaV9jb2RlOwoKICAgICAgICB1bmlvbiB7 CiAgICAgICAgICAgICAgICBpbnQgX3BhZFsoKDEyOC9zaXplb2YoaW50KSkgLSAzKV07CgoKICAg ICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBpZF90IF9waWQ7 CiAgICAgICAgICAgICAgICAgICAgICAgIHVpZF90IF91aWQ7CiAgICAgICAgICAgICAgICB9IF9r aWxsOwoKCiAgICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgICAgICAgICB1 bnNpZ25lZCBpbnQgX3RpbWVyMTsKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50 IF90aW1lcjI7CiAgICAgICAgICAgICAgICB9IF90aW1lcjsKCgogICAgICAgICAgICAgICAgc3Ry dWN0IHsKICAgICAgICAgICAgICAgICAgICAgICAgcGlkX3QgX3BpZDsKICAgICAgICAgICAgICAg ICAgICAgICAgdWlkX3QgX3VpZDsKICAgICAgICAgICAgICAgICAgICAgICAgc2lndmFsX3QgX3Np Z3ZhbDsKICAgICAgICAgICAgICAgIH0gX3J0OwoKCiAgICAgICAgICAgICAgICBzdHJ1Y3Qgewog ICAgICAgICAgICAgICAgICAgICAgICBwaWRfdCBfcGlkOwogICAgICAgICAgICAgICAgICAgICAg ICB1aWRfdCBfdWlkOwogICAgICAgICAgICAgICAgICAgICAgICBpbnQgX3N0YXR1czsKICAgICAg ICAgICAgICAgICAgICAgICAgY2xvY2tfdCBfdXRpbWU7CiAgICAgICAgICAgICAgICAgICAgICAg IGNsb2NrX3QgX3N0aW1lOwogICAgICAgICAgICAgICAgfSBfc2lnY2hsZDsKCgogICAgICAgICAg ICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX2FkZHI7CiAgICAg ICAgICAgICAgICB9IF9zaWdmYXVsdDsKCgogICAgICAgICAgICAgICAgc3RydWN0IHsKICAgICAg ICAgICAgICAgICAgICAgICAgaW50IF9iYW5kOwogICAgICAgICAgICAgICAgICAgICAgICBpbnQg X2ZkOwogICAgICAgICAgICAgICAgfSBfc2lncG9sbDsKICAgICAgICB9IF9zaWZpZWxkczsKfSBz aWdpbmZvX3Q7CiMgMjAwICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9hc20vc2lnaW5m by5oIgp0eXBlZGVmIHN0cnVjdCBzaWdldmVudCB7CiAgICAgICAgc2lndmFsX3Qgc2lnZXZfdmFs dWU7CiAgICAgICAgaW50IHNpZ2V2X3NpZ25vOwogICAgICAgIGludCBzaWdldl9ub3RpZnk7CiAg ICAgICAgdW5pb24gewogICAgICAgICAgICAgICAgaW50IF9wYWRbKCg2NC9zaXplb2YoaW50KSkg LSAzKV07CgogICAgICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICAgICAgICAg dm9pZCAoKl9mdW5jdGlvbikoc2lndmFsX3QpOwogICAgICAgICAgICAgICAgICAgICAgICB2b2lk ICpfYXR0cmlidXRlOwogICAgICAgICAgICAgICAgfSBfc2lnZXZfdGhyZWFkOwogICAgICAgIH0g X3NpZ2V2X3VuOwp9IHNpZ2V2ZW50X3Q7CgoKCgoKCgpzdGF0aWMgaW5saW5lIHZvaWQgY29weV9z aWdpbmZvKHNpZ2luZm9fdCAqdG8sIHNpZ2luZm9fdCAqZnJvbSkKewogICAgICAgIGlmIChmcm9t LT5zaV9jb2RlIDwgMCkKICAgICAgICAgICAgICAgIChfX2J1aWx0aW5fY29uc3RhbnRfcChzaXpl b2Yoc2lnaW5mb190KSkgPyBfX2NvbnN0YW50X21lbWNweSgodG8pLChmcm9tKSwoc2l6ZW9mKHNp Z2luZm9fdCkpKSA6IF9fbWVtY3B5KCh0byksKGZyb20pLChzaXplb2Yoc2lnaW5mb190KSkpKTsK ICAgICAgICBlbHNlCgogICAgICAgICAgICAgICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKDMqc2l6 ZW9mKGludCkgKyBzaXplb2YoZnJvbS0+X3NpZmllbGRzLl9zaWdjaGxkKSkgPyBfX2NvbnN0YW50 X21lbWNweSgodG8pLChmcm9tKSwoMypzaXplb2YoaW50KSArIHNpemVvZihmcm9tLT5fc2lmaWVs ZHMuX3NpZ2NobGQpKSkgOiBfX21lbWNweSgodG8pLChmcm9tKSwoMypzaXplb2YoaW50KSArIHNp emVvZihmcm9tLT5fc2lmaWVsZHMuX3NpZ2NobGQpKSkpOwp9CgpleHRlcm4gaW50IGNvcHlfc2ln aW5mb190b191c2VyKHNpZ2luZm9fdCAqdG8sIHNpZ2luZm9fdCAqZnJvbSk7CiMgNiAiL3Vzci9z cmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvc2lnbmFsLmgiIDIKCgoKCgoKc3RydWN0IHNp Z3F1ZXVlIHsKICAgICAgICBzdHJ1Y3Qgc2lncXVldWUgKm5leHQ7CiAgICAgICAgc2lnaW5mb190 IGluZm87Cn07CgpzdHJ1Y3Qgc2lncGVuZGluZyB7CiAgICAgICAgc3RydWN0IHNpZ3F1ZXVlICpo ZWFkLCAqKnRhaWw7CiAgICAgICAgc2lnc2V0X3Qgc2lnbmFsOwp9OwojIDEwOCAiL3Vzci9zcmMv bGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvc2lnbmFsLmgiCnN0YXRpYyBpbmxpbmUgdm9pZCBz aWdvcnNldHMoc2lnc2V0X3QgKnIsIGNvbnN0IHNpZ3NldF90ICphLCBjb25zdCBzaWdzZXRfdCAq YikgeyB1bnNpZ25lZCBsb25nIGEwLCBhMSwgYTIsIGEzLCBiMCwgYjEsIGIyLCBiMzsgdW5zaWdu ZWQgbG9uZyBpOyBmb3IgKGkgPSAwOyBpIDwgKDY0IC8gMzIpLzQ7ICsraSkgeyBhMCA9IGEtPnNp Z1s0KmkrMF07IGExID0gYS0+c2lnWzQqaSsxXTsgYTIgPSBhLT5zaWdbNCppKzJdOyBhMyA9IGEt PnNpZ1s0KmkrM107IGIwID0gYi0+c2lnWzQqaSswXTsgYjEgPSBiLT5zaWdbNCppKzFdOyBiMiA9 IGItPnNpZ1s0KmkrMl07IGIzID0gYi0+c2lnWzQqaSszXTsgci0+c2lnWzQqaSswXSA9ICgoYTAp IHwgKGIwKSk7IHItPnNpZ1s0KmkrMV0gPSAoKGExKSB8IChiMSkpOyByLT5zaWdbNCppKzJdID0g KChhMikgfCAoYjIpKTsgci0+c2lnWzQqaSszXSA9ICgoYTMpIHwgKGIzKSk7IH0gc3dpdGNoICgo NjQgLyAzMikgJSA0KSB7IGNhc2UgMzogYTAgPSBhLT5zaWdbNCppKzBdOyBhMSA9IGEtPnNpZ1s0 KmkrMV07IGEyID0gYS0+c2lnWzQqaSsyXTsgYjAgPSBiLT5zaWdbNCppKzBdOyBiMSA9IGItPnNp Z1s0KmkrMV07IGIyID0gYi0+c2lnWzQqaSsyXTsgci0+c2lnWzQqaSswXSA9ICgoYTApIHwgKGIw KSk7IHItPnNpZ1s0KmkrMV0gPSAoKGExKSB8IChiMSkpOyByLT5zaWdbNCppKzJdID0gKChhMikg fCAoYjIpKTsgYnJlYWs7IGNhc2UgMjogYTAgPSBhLT5zaWdbNCppKzBdOyBhMSA9IGEtPnNpZ1s0 KmkrMV07IGIwID0gYi0+c2lnWzQqaSswXTsgYjEgPSBiLT5zaWdbNCppKzFdOyByLT5zaWdbNCpp KzBdID0gKChhMCkgfCAoYjApKTsgci0+c2lnWzQqaSsxXSA9ICgoYTEpIHwgKGIxKSk7IGJyZWFr OyBjYXNlIDE6IGEwID0gYS0+c2lnWzQqaSswXTsgYjAgPSBiLT5zaWdbNCppKzBdOyByLT5zaWdb NCppKzBdID0gKChhMCkgfCAoYjApKTsgYnJlYWs7IH0gfQoKCnN0YXRpYyBpbmxpbmUgdm9pZCBz aWdhbmRzZXRzKHNpZ3NldF90ICpyLCBjb25zdCBzaWdzZXRfdCAqYSwgY29uc3Qgc2lnc2V0X3Qg KmIpIHsgdW5zaWduZWQgbG9uZyBhMCwgYTEsIGEyLCBhMywgYjAsIGIxLCBiMiwgYjM7IHVuc2ln bmVkIGxvbmcgaTsgZm9yIChpID0gMDsgaSA8ICg2NCAvIDMyKS80OyArK2kpIHsgYTAgPSBhLT5z aWdbNCppKzBdOyBhMSA9IGEtPnNpZ1s0KmkrMV07IGEyID0gYS0+c2lnWzQqaSsyXTsgYTMgPSBh LT5zaWdbNCppKzNdOyBiMCA9IGItPnNpZ1s0KmkrMF07IGIxID0gYi0+c2lnWzQqaSsxXTsgYjIg PSBiLT5zaWdbNCppKzJdOyBiMyA9IGItPnNpZ1s0KmkrM107IHItPnNpZ1s0KmkrMF0gPSAoKGEw KSAmIChiMCkpOyByLT5zaWdbNCppKzFdID0gKChhMSkgJiAoYjEpKTsgci0+c2lnWzQqaSsyXSA9 ICgoYTIpICYgKGIyKSk7IHItPnNpZ1s0KmkrM10gPSAoKGEzKSAmIChiMykpOyB9IHN3aXRjaCAo KDY0IC8gMzIpICUgNCkgeyBjYXNlIDM6IGEwID0gYS0+c2lnWzQqaSswXTsgYTEgPSBhLT5zaWdb NCppKzFdOyBhMiA9IGEtPnNpZ1s0KmkrMl07IGIwID0gYi0+c2lnWzQqaSswXTsgYjEgPSBiLT5z aWdbNCppKzFdOyBiMiA9IGItPnNpZ1s0KmkrMl07IHItPnNpZ1s0KmkrMF0gPSAoKGEwKSAmIChi MCkpOyByLT5zaWdbNCppKzFdID0gKChhMSkgJiAoYjEpKTsgci0+c2lnWzQqaSsyXSA9ICgoYTIp ICYgKGIyKSk7IGJyZWFrOyBjYXNlIDI6IGEwID0gYS0+c2lnWzQqaSswXTsgYTEgPSBhLT5zaWdb NCppKzFdOyBiMCA9IGItPnNpZ1s0KmkrMF07IGIxID0gYi0+c2lnWzQqaSsxXTsgci0+c2lnWzQq aSswXSA9ICgoYTApICYgKGIwKSk7IHItPnNpZ1s0KmkrMV0gPSAoKGExKSAmIChiMSkpOyBicmVh azsgY2FzZSAxOiBhMCA9IGEtPnNpZ1s0KmkrMF07IGIwID0gYi0+c2lnWzQqaSswXTsgci0+c2ln WzQqaSswXSA9ICgoYTApICYgKGIwKSk7IGJyZWFrOyB9IH0KCgpzdGF0aWMgaW5saW5lIHZvaWQg c2lnbmFuZHNldHMoc2lnc2V0X3QgKnIsIGNvbnN0IHNpZ3NldF90ICphLCBjb25zdCBzaWdzZXRf dCAqYikgeyB1bnNpZ25lZCBsb25nIGEwLCBhMSwgYTIsIGEzLCBiMCwgYjEsIGIyLCBiMzsgdW5z aWduZWQgbG9uZyBpOyBmb3IgKGkgPSAwOyBpIDwgKDY0IC8gMzIpLzQ7ICsraSkgeyBhMCA9IGEt PnNpZ1s0KmkrMF07IGExID0gYS0+c2lnWzQqaSsxXTsgYTIgPSBhLT5zaWdbNCppKzJdOyBhMyA9 IGEtPnNpZ1s0KmkrM107IGIwID0gYi0+c2lnWzQqaSswXTsgYjEgPSBiLT5zaWdbNCppKzFdOyBi MiA9IGItPnNpZ1s0KmkrMl07IGIzID0gYi0+c2lnWzQqaSszXTsgci0+c2lnWzQqaSswXSA9ICgo YTApICYgfihiMCkpOyByLT5zaWdbNCppKzFdID0gKChhMSkgJiB+KGIxKSk7IHItPnNpZ1s0Kmkr Ml0gPSAoKGEyKSAmIH4oYjIpKTsgci0+c2lnWzQqaSszXSA9ICgoYTMpICYgfihiMykpOyB9IHN3 aXRjaCAoKDY0IC8gMzIpICUgNCkgeyBjYXNlIDM6IGEwID0gYS0+c2lnWzQqaSswXTsgYTEgPSBh LT5zaWdbNCppKzFdOyBhMiA9IGEtPnNpZ1s0KmkrMl07IGIwID0gYi0+c2lnWzQqaSswXTsgYjEg PSBiLT5zaWdbNCppKzFdOyBiMiA9IGItPnNpZ1s0KmkrMl07IHItPnNpZ1s0KmkrMF0gPSAoKGEw KSAmIH4oYjApKTsgci0+c2lnWzQqaSsxXSA9ICgoYTEpICYgfihiMSkpOyByLT5zaWdbNCppKzJd ID0gKChhMikgJiB+KGIyKSk7IGJyZWFrOyBjYXNlIDI6IGEwID0gYS0+c2lnWzQqaSswXTsgYTEg PSBhLT5zaWdbNCppKzFdOyBiMCA9IGItPnNpZ1s0KmkrMF07IGIxID0gYi0+c2lnWzQqaSsxXTsg ci0+c2lnWzQqaSswXSA9ICgoYTApICYgfihiMCkpOyByLT5zaWdbNCppKzFdID0gKChhMSkgJiB+ KGIxKSk7IGJyZWFrOyBjYXNlIDE6IGEwID0gYS0+c2lnWzQqaSswXTsgYjAgPSBiLT5zaWdbNCpp KzBdOyByLT5zaWdbNCppKzBdID0gKChhMCkgJiB+KGIwKSk7IGJyZWFrOyB9IH0KIyAxNDAgIi91 c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L3NpZ25hbC5oIgpzdGF0aWMgaW5saW5l IHZvaWQgc2lnbm90c2V0KHNpZ3NldF90ICpzZXQpIHsgdW5zaWduZWQgbG9uZyBpOyBmb3IgKGkg PSAwOyBpIDwgKDY0IC8gMzIpLzQ7ICsraSkgeyBzZXQtPnNpZ1s0KmkrMF0gPSAofihzZXQtPnNp Z1s0KmkrMF0pKTsgc2V0LT5zaWdbNCppKzFdID0gKH4oc2V0LT5zaWdbNCppKzFdKSk7IHNldC0+ c2lnWzQqaSsyXSA9ICh+KHNldC0+c2lnWzQqaSsyXSkpOyBzZXQtPnNpZ1s0KmkrM10gPSAofihz ZXQtPnNpZ1s0KmkrM10pKTsgfSBzd2l0Y2ggKCg2NCAvIDMyKSAlIDQpIHsgY2FzZSAzOiBzZXQt PnNpZ1s0KmkrMl0gPSAofihzZXQtPnNpZ1s0KmkrMl0pKTsgY2FzZSAyOiBzZXQtPnNpZ1s0Kmkr MV0gPSAofihzZXQtPnNpZ1s0KmkrMV0pKTsgY2FzZSAxOiBzZXQtPnNpZ1s0KmkrMF0gPSAofihz ZXQtPnNpZ1s0KmkrMF0pKTsgfSB9CgoKCgpzdGF0aWMgaW5saW5lIHZvaWQgc2lnZW1wdHlzZXQo c2lnc2V0X3QgKnNldCkKewogICAgICAgIHN3aXRjaCAoKDY0IC8gMzIpKSB7CiAgICAgICAgZGVm YXVsdDoKICAgICAgICAgICAgICAgIChfX2J1aWx0aW5fY29uc3RhbnRfcCgwKSA/IChfX2J1aWx0 aW5fY29uc3RhbnRfcCgoc2l6ZW9mKHNpZ3NldF90KSkpID8gX19jb25zdGFudF9jX2FuZF9jb3Vu dF9tZW1zZXQoKChzZXQpKSwoKDB4MDEwMTAxMDFVTCoodW5zaWduZWQgY2hhcikoMCkpKSwoKHNp emVvZihzaWdzZXRfdCkpKSkgOiBfX2NvbnN0YW50X2NfbWVtc2V0KCgoc2V0KSksKCgweDAxMDEw MTAxVUwqKHVuc2lnbmVkIGNoYXIpKDApKSksKChzaXplb2Yoc2lnc2V0X3QpKSkpKSA6IChfX2J1 aWx0aW5fY29uc3RhbnRfcCgoc2l6ZW9mKHNpZ3NldF90KSkpID8gX19tZW1zZXRfZ2VuZXJpYygo KChzZXQpKSksKCgoMCkpKSwoKChzaXplb2Yoc2lnc2V0X3QpKSkpKSA6IF9fbWVtc2V0X2dlbmVy aWMoKChzZXQpKSwoKDApKSwoKHNpemVvZihzaWdzZXRfdCkpKSkpKTsKICAgICAgICAgICAgICAg IGJyZWFrOwogICAgICAgIGNhc2UgMjogc2V0LT5zaWdbMV0gPSAwOwogICAgICAgIGNhc2UgMTog c2V0LT5zaWdbMF0gPSAwOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQp9CgpzdGF0 aWMgaW5saW5lIHZvaWQgc2lnZmlsbHNldChzaWdzZXRfdCAqc2V0KQp7CiAgICAgICAgc3dpdGNo ICgoNjQgLyAzMikpIHsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgKF9fYnVpbHRp bl9jb25zdGFudF9wKC0xKSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCgoc2l6ZW9mKHNpZ3NldF90 KSkpID8gX19jb25zdGFudF9jX2FuZF9jb3VudF9tZW1zZXQoKChzZXQpKSwoKDB4MDEwMTAxMDFV TCoodW5zaWduZWQgY2hhcikoLTEpKSksKChzaXplb2Yoc2lnc2V0X3QpKSkpIDogX19jb25zdGFu dF9jX21lbXNldCgoKHNldCkpLCgoMHgwMTAxMDEwMVVMKih1bnNpZ25lZCBjaGFyKSgtMSkpKSwo KHNpemVvZihzaWdzZXRfdCkpKSkpIDogKF9fYnVpbHRpbl9jb25zdGFudF9wKChzaXplb2Yoc2ln c2V0X3QpKSkgPyBfX21lbXNldF9nZW5lcmljKCgoKHNldCkpKSwoKCgtMSkpKSwoKChzaXplb2Yo c2lnc2V0X3QpKSkpKSA6IF9fbWVtc2V0X2dlbmVyaWMoKChzZXQpKSwoKC0xKSksKChzaXplb2Yo c2lnc2V0X3QpKSkpKSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDI6IHNl dC0+c2lnWzFdID0gLTE7CiAgICAgICAgY2FzZSAxOiBzZXQtPnNpZ1swXSA9IC0xOwogICAgICAg ICAgICAgICAgYnJlYWs7CiAgICAgICAgfQp9CgpleHRlcm4gY2hhciAqIHJlbmRlcl9zaWdzZXRf dChzaWdzZXRfdCAqc2V0LCBjaGFyICpidWZmZXIpOwoKCgpzdGF0aWMgaW5saW5lIHZvaWQgc2ln YWRkc2V0bWFzayhzaWdzZXRfdCAqc2V0LCB1bnNpZ25lZCBsb25nIG1hc2spCnsKICAgICAgICBz ZXQtPnNpZ1swXSB8PSBtYXNrOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgc2lnZGVsc2V0bWFzayhz aWdzZXRfdCAqc2V0LCB1bnNpZ25lZCBsb25nIG1hc2spCnsKICAgICAgICBzZXQtPnNpZ1swXSAm PSB+bWFzazsKfQoKc3RhdGljIGlubGluZSBpbnQgc2lndGVzdHNldG1hc2soc2lnc2V0X3QgKnNl dCwgdW5zaWduZWQgbG9uZyBtYXNrKQp7CiAgICAgICAgcmV0dXJuIChzZXQtPnNpZ1swXSAmIG1h c2spICE9IDA7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBzaWdpbml0c2V0KHNpZ3NldF90ICpzZXQs IHVuc2lnbmVkIGxvbmcgbWFzaykKewogICAgICAgIHNldC0+c2lnWzBdID0gbWFzazsKICAgICAg ICBzd2l0Y2ggKCg2NCAvIDMyKSkgewogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAo X19idWlsdGluX2NvbnN0YW50X3AoMCkgPyAoX19idWlsdGluX2NvbnN0YW50X3AoKHNpemVvZihs b25nKSooKDY0IC8gMzIpLTEpKSkgPyBfX2NvbnN0YW50X2NfYW5kX2NvdW50X21lbXNldCgoKCZz ZXQtPnNpZ1sxXSkpLCgoMHgwMTAxMDEwMVVMKih1bnNpZ25lZCBjaGFyKSgwKSkpLCgoc2l6ZW9m KGxvbmcpKigoNjQgLyAzMiktMSkpKSkgOiBfX2NvbnN0YW50X2NfbWVtc2V0KCgoJnNldC0+c2ln WzFdKSksKCgweDAxMDEwMTAxVUwqKHVuc2lnbmVkIGNoYXIpKDApKSksKChzaXplb2YobG9uZykq KCg2NCAvIDMyKS0xKSkpKSkgOiAoX19idWlsdGluX2NvbnN0YW50X3AoKHNpemVvZihsb25nKSoo KDY0IC8gMzIpLTEpKSkgPyBfX21lbXNldF9nZW5lcmljKCgoKCZzZXQtPnNpZ1sxXSkpKSwoKCgw KSkpLCgoKHNpemVvZihsb25nKSooKDY0IC8gMzIpLTEpKSkpKSA6IF9fbWVtc2V0X2dlbmVyaWMo KCgmc2V0LT5zaWdbMV0pKSwoKDApKSwoKHNpemVvZihsb25nKSooKDY0IC8gMzIpLTEpKSkpKSk7 CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDI6IHNldC0+c2lnWzFdID0gMDsK ICAgICAgICBjYXNlIDE6IDsKICAgICAgICB9Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBzaWdpbml0 c2V0aW52KHNpZ3NldF90ICpzZXQsIHVuc2lnbmVkIGxvbmcgbWFzaykKewogICAgICAgIHNldC0+ c2lnWzBdID0gfm1hc2s7CiAgICAgICAgc3dpdGNoICgoNjQgLyAzMikpIHsKICAgICAgICBkZWZh dWx0OgogICAgICAgICAgICAgICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKC0xKSA/IChfX2J1aWx0 aW5fY29uc3RhbnRfcCgoc2l6ZW9mKGxvbmcpKigoNjQgLyAzMiktMSkpKSA/IF9fY29uc3RhbnRf Y19hbmRfY291bnRfbWVtc2V0KCgoJnNldC0+c2lnWzFdKSksKCgweDAxMDEwMTAxVUwqKHVuc2ln bmVkIGNoYXIpKC0xKSkpLCgoc2l6ZW9mKGxvbmcpKigoNjQgLyAzMiktMSkpKSkgOiBfX2NvbnN0 YW50X2NfbWVtc2V0KCgoJnNldC0+c2lnWzFdKSksKCgweDAxMDEwMTAxVUwqKHVuc2lnbmVkIGNo YXIpKC0xKSkpLCgoc2l6ZW9mKGxvbmcpKigoNjQgLyAzMiktMSkpKSkpIDogKF9fYnVpbHRpbl9j b25zdGFudF9wKChzaXplb2YobG9uZykqKCg2NCAvIDMyKS0xKSkpID8gX19tZW1zZXRfZ2VuZXJp YygoKCgmc2V0LT5zaWdbMV0pKSksKCgoLTEpKSksKCgoc2l6ZW9mKGxvbmcpKigoNjQgLyAzMikt MSkpKSkpIDogX19tZW1zZXRfZ2VuZXJpYygoKCZzZXQtPnNpZ1sxXSkpLCgoLTEpKSwoKHNpemVv Zihsb25nKSooKDY0IC8gMzIpLTEpKSkpKSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAg ICBjYXNlIDI6IHNldC0+c2lnWzFdID0gLTE7CiAgICAgICAgY2FzZSAxOiA7CiAgICAgICAgfQp9 CgoKCnN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3NpZ3BlbmRpbmcoc3RydWN0IHNpZ3BlbmRpbmcg KnNpZykKewogICAgICAgIHNpZ2VtcHR5c2V0KCZzaWctPnNpZ25hbCk7CiAgICAgICAgc2lnLT5o ZWFkID0gKCh2b2lkICopMCk7CiAgICAgICAgc2lnLT50YWlsID0gJnNpZy0+aGVhZDsKfQoKZXh0 ZXJuIGxvbmcgZG9fc2lncGVuZGluZyh2b2lkICosIHVuc2lnbmVkIGxvbmcpOwojIDI3ICIvdXNy L3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9zY2hlZC5oIiAyCiMgMSAiL3Vzci9zcmMv bGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvc2VjdXJlYml0cy5oIiAxCgoKCgoKZXh0ZXJuIHVu c2lnbmVkIHNlY3VyZWJpdHM7CiMgMjggIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xp bnV4L3NjaGVkLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9m c19zdHJ1Y3QuaCIgMQoKCgoKc3RydWN0IGZzX3N0cnVjdCB7CiAgICAgICAgYXRvbWljX3QgY291 bnQ7CiAgICAgICAgcndsb2NrX3QgbG9jazsKICAgICAgICBpbnQgdW1hc2s7CiAgICAgICAgc3Ry dWN0IGRlbnRyeSAqIHJvb3QsICogcHdkLCAqIGFsdHJvb3Q7CiAgICAgICAgc3RydWN0IHZmc21v dW50ICogcm9vdG1udCwgKiBwd2RtbnQsICogYWx0cm9vdG1udDsKfTsKIyAyMCAiL3Vzci9zcmMv bGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvZnNfc3RydWN0LmgiCmV4dGVybiB2b2lkIGV4aXRf ZnMoc3RydWN0IHRhc2tfc3RydWN0ICopOwpleHRlcm4gdm9pZCBzZXRfZnNfYWx0cm9vdCh2b2lk KTsKCgoKCgoKc3RhdGljIGlubGluZSB2b2lkIHNldF9mc19yb290KHN0cnVjdCBmc19zdHJ1Y3Qg KmZzLAogICAgICAgIHN0cnVjdCB2ZnNtb3VudCAqbW50LAogICAgICAgIHN0cnVjdCBkZW50cnkg KmRlbnRyeSkKewogICAgICAgIHN0cnVjdCBkZW50cnkgKm9sZF9yb290OwogICAgICAgIHN0cnVj dCB2ZnNtb3VudCAqb2xkX3Jvb3RtbnQ7CiAgICAgICAgd3JpdGVfbG9jaygmZnMtPmxvY2spOwog ICAgICAgIG9sZF9yb290ID0gZnMtPnJvb3Q7CiAgICAgICAgb2xkX3Jvb3RtbnQgPSBmcy0+cm9v dG1udDsKICAgICAgICBmcy0+cm9vdG1udCA9IG1udGdldChtbnQpOwogICAgICAgIGZzLT5yb290 ID0gZGdldChkZW50cnkpOwogICAgICAgIGFzbSB2b2xhdGlsZSgibG9jayA7IGFkZGwgJCIgIjB4 MDEwMDAwMDAiICIsJTAiOiI9bSIgKCgmZnMtPmxvY2spLT5sb2NrKSA6IDogIm1lbW9yeSIpOwog ICAgICAgIGlmIChvbGRfcm9vdCkgewogICAgICAgICAgICAgICAgZHB1dChvbGRfcm9vdCk7CiAg ICAgICAgICAgICAgICBtbnRwdXQob2xkX3Jvb3RtbnQpOwogICAgICAgIH0KfQoKCgoKCgpzdGF0 aWMgaW5saW5lIHZvaWQgc2V0X2ZzX3B3ZChzdHJ1Y3QgZnNfc3RydWN0ICpmcywKICAgICAgICBz dHJ1Y3QgdmZzbW91bnQgKm1udCwKICAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCnsKICAg ICAgICBzdHJ1Y3QgZGVudHJ5ICpvbGRfcHdkOwogICAgICAgIHN0cnVjdCB2ZnNtb3VudCAqb2xk X3B3ZG1udDsKICAgICAgICB3cml0ZV9sb2NrKCZmcy0+bG9jayk7CiAgICAgICAgb2xkX3B3ZCA9 IGZzLT5wd2Q7CiAgICAgICAgb2xkX3B3ZG1udCA9IGZzLT5wd2RtbnQ7CiAgICAgICAgZnMtPnB3 ZG1udCA9IG1udGdldChtbnQpOwogICAgICAgIGZzLT5wd2QgPSBkZ2V0KGRlbnRyeSk7CiAgICAg ICAgYXNtIHZvbGF0aWxlKCJsb2NrIDsgYWRkbCAkIiAiMHgwMTAwMDAwMCIgIiwlMCI6Ij1tIiAo KCZmcy0+bG9jayktPmxvY2spIDogOiAibWVtb3J5Iik7CiAgICAgICAgaWYgKG9sZF9wd2QpIHsK ICAgICAgICAgICAgICAgIGRwdXQob2xkX3B3ZCk7CiAgICAgICAgICAgICAgICBtbnRwdXQob2xk X3B3ZG1udCk7CiAgICAgICAgfQp9CgpzdHJ1Y3QgZnNfc3RydWN0ICpjb3B5X2ZzX3N0cnVjdChz dHJ1Y3QgZnNfc3RydWN0ICpvbGQpOwp2b2lkIHB1dF9mc19zdHJ1Y3Qoc3RydWN0IGZzX3N0cnVj dCAqZnMpOwojIDI5ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9zY2hlZC5o IiAyCgpzdHJ1Y3QgZXhlY19kb21haW47CiMgNTkgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNs dWRlL2xpbnV4L3NjaGVkLmgiCmV4dGVybiB1bnNpZ25lZCBsb25nIGF2ZW5ydW5bXTsKIyA3NiAi L3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvc2NoZWQuaCIKZXh0ZXJuIGludCBu cl9ydW5uaW5nLCBucl90aHJlYWRzOwpleHRlcm4gaW50IGxhc3RfcGlkOwoKCgojIDEgIi91c3Iv c3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L3BhcmFtLmgiIDEKIyA4MiAiL3Vzci9zcmMv bGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvc2NoZWQuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4 LTIuNC4yMC9pbmNsdWRlL2xpbnV4L3Jlc291cmNlLmgiIDEKIyAyMSAiL3Vzci9zcmMvbGludXgt Mi40LjIwL2luY2x1ZGUvbGludXgvcmVzb3VyY2UuaCIKc3RydWN0IHJ1c2FnZSB7CiAgICAgICAg c3RydWN0IHRpbWV2YWwgcnVfdXRpbWU7CiAgICAgICAgc3RydWN0IHRpbWV2YWwgcnVfc3RpbWU7 CiAgICAgICAgbG9uZyBydV9tYXhyc3M7CiAgICAgICAgbG9uZyBydV9peHJzczsKICAgICAgICBs b25nIHJ1X2lkcnNzOwogICAgICAgIGxvbmcgcnVfaXNyc3M7CiAgICAgICAgbG9uZyBydV9taW5m bHQ7CiAgICAgICAgbG9uZyBydV9tYWpmbHQ7CiAgICAgICAgbG9uZyBydV9uc3dhcDsKICAgICAg ICBsb25nIHJ1X2luYmxvY2s7CiAgICAgICAgbG9uZyBydV9vdWJsb2NrOwogICAgICAgIGxvbmcg cnVfbXNnc25kOwogICAgICAgIGxvbmcgcnVfbXNncmN2OwogICAgICAgIGxvbmcgcnVfbnNpZ25h bHM7CiAgICAgICAgbG9uZyBydV9udmNzdzsKICAgICAgICBsb25nIHJ1X25pdmNzdzsKfTsKCnN0 cnVjdCBybGltaXQgewogICAgICAgIHVuc2lnbmVkIGxvbmcgcmxpbV9jdXI7CiAgICAgICAgdW5z aWduZWQgbG9uZyBybGltX21heDsKfTsKIyA1NiAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1 ZGUvbGludXgvcmVzb3VyY2UuaCIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9h c20vcmVzb3VyY2UuaCIgMQojIDU3ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51 eC9yZXNvdXJjZS5oIiAyCiMgODMgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4 L3NjaGVkLmgiIDIKIyAxMjggIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L3Nj aGVkLmgiCnN0cnVjdCBzY2hlZF9wYXJhbSB7CiAgICAgICAgaW50IHNjaGVkX3ByaW9yaXR5Owp9 OwoKc3RydWN0IGNvbXBsZXRpb247CiMgMTQ0ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVk ZS9saW51eC9zY2hlZC5oIgpleHRlcm4gcndsb2NrX3QgdGFza2xpc3RfbG9jazsKZXh0ZXJuIHNw aW5sb2NrX3QgcnVucXVldWVfbG9jazsKZXh0ZXJuIHNwaW5sb2NrX3QgbW1saXN0X2xvY2s7Cgpl eHRlcm4gdm9pZCBzY2hlZF9pbml0KHZvaWQpOwpleHRlcm4gdm9pZCBpbml0X2lkbGUodm9pZCk7 CmV4dGVybiB2b2lkIHNob3dfc3RhdGUodm9pZCk7CmV4dGVybiB2b2lkIGNwdV9pbml0ICh2b2lk KTsKZXh0ZXJuIHZvaWQgdHJhcF9pbml0KHZvaWQpOwpleHRlcm4gdm9pZCB1cGRhdGVfcHJvY2Vz c190aW1lcyhpbnQgdXNlcik7CmV4dGVybiB2b2lkIHVwZGF0ZV9vbmVfcHJvY2VzcyhzdHJ1Y3Qg dGFza19zdHJ1Y3QgKnAsIHVuc2lnbmVkIGxvbmcgdXNlciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc3lzdGVtLCBpbnQgY3B1KTsKCgpleHRlcm4gc2lnbmVk IGxvbmcgc2NoZWR1bGVfdGltZW91dChzaWduZWQgbG9uZyB0aW1lb3V0KSBfX2F0dHJpYnV0ZV9f KChyZWdwYXJtKDMpKSk7CiBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDApKSkgdm9pZCBzY2hlZHVs ZSh2b2lkKTsKCmV4dGVybiBpbnQgc2NoZWR1bGVfdGFzayhzdHJ1Y3QgdHFfc3RydWN0ICp0YXNr KTsKZXh0ZXJuIHZvaWQgZmx1c2hfc2NoZWR1bGVkX3Rhc2tzKHZvaWQpOwpleHRlcm4gaW50IHN0 YXJ0X2NvbnRleHRfdGhyZWFkKHZvaWQpOwpleHRlcm4gaW50IGN1cnJlbnRfaXNfa2V2ZW50ZCh2 b2lkKTsKCgpleHRlcm4gdm9pZCBzZXRfY3B1c19hbGxvd2VkKHN0cnVjdCB0YXNrX3N0cnVjdCAq cCwgdW5zaWduZWQgbG9uZyBuZXdfbWFzayk7CiMgMTc4ICIvdXNyL3NyYy9saW51eC0yLjQuMjAv aW5jbHVkZS9saW51eC9zY2hlZC5oIgpzdHJ1Y3QgbmFtZXNwYWNlOwoKCgpzdHJ1Y3QgZmlsZXNf c3RydWN0IHsKICAgICAgICBhdG9taWNfdCBjb3VudDsKICAgICAgICByd2xvY2tfdCBmaWxlX2xv Y2s7CiAgICAgICAgaW50IG1heF9mZHM7CiAgICAgICAgaW50IG1heF9mZHNldDsKICAgICAgICBp bnQgbmV4dF9mZDsKICAgICAgICBzdHJ1Y3QgZmlsZSAqKiBmZDsKICAgICAgICBmZF9zZXQgKmNs b3NlX29uX2V4ZWM7CiAgICAgICAgZmRfc2V0ICpvcGVuX2ZkczsKICAgICAgICBmZF9zZXQgY2xv c2Vfb25fZXhlY19pbml0OwogICAgICAgIGZkX3NldCBvcGVuX2Zkc19pbml0OwogICAgICAgIHN0 cnVjdCBmaWxlICogZmRfYXJyYXlbMzJdOwp9OwojIDIxNCAiL3Vzci9zcmMvbGludXgtMi40LjIw L2luY2x1ZGUvbGludXgvc2NoZWQuaCIKZXh0ZXJuIGludCBtYXhfbWFwX2NvdW50OwoKc3RydWN0 IG1tX3N0cnVjdCB7CiAgICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICogbW1hcDsKICAgICAg ICByYl9yb290X3QgbW1fcmI7CiAgICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICogbW1hcF9j YWNoZTsKICAgICAgICBwZ2RfdCAqIHBnZDsKICAgICAgICBhdG9taWNfdCBtbV91c2VyczsKICAg ICAgICBhdG9taWNfdCBtbV9jb3VudDsKICAgICAgICBpbnQgbWFwX2NvdW50OwogICAgICAgIHN0 cnVjdCByd19zZW1hcGhvcmUgbW1hcF9zZW07CiAgICAgICAgc3BpbmxvY2tfdCBwYWdlX3RhYmxl X2xvY2s7CgogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgbW1saXN0OwoKCgoKICAgICAgICB1bnNp Z25lZCBsb25nIHN0YXJ0X2NvZGUsIGVuZF9jb2RlLCBzdGFydF9kYXRhLCBlbmRfZGF0YTsKICAg ICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0X2JyaywgYnJrLCBzdGFydF9zdGFjazsKICAgICAgICB1 bnNpZ25lZCBsb25nIGFyZ19zdGFydCwgYXJnX2VuZCwgZW52X3N0YXJ0LCBlbnZfZW5kOwogICAg ICAgIHVuc2lnbmVkIGxvbmcgcnNzLCB0b3RhbF92bSwgbG9ja2VkX3ZtOwogICAgICAgIHVuc2ln bmVkIGxvbmcgZGVmX2ZsYWdzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgY3B1X3ZtX21hc2s7CiAg ICAgICAgdW5zaWduZWQgbG9uZyBzd2FwX2FkZHJlc3M7CgogICAgICAgIHVuc2lnbmVkIGR1bXBh YmxlOjE7CgoKICAgICAgICBtbV9jb250ZXh0X3QgY29udGV4dDsKfTsKCmV4dGVybiBpbnQgbW1s aXN0X25yOwojIDI1OSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvc2NoZWQu aCIKc3RydWN0IHNpZ25hbF9zdHJ1Y3QgewogICAgICAgIGF0b21pY190IGNvdW50OwogICAgICAg IHN0cnVjdCBrX3NpZ2FjdGlvbiBhY3Rpb25bNjRdOwogICAgICAgIHNwaW5sb2NrX3Qgc2lnbG9j azsKfTsKIyAyNzUgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L3NjaGVkLmgi CnN0cnVjdCB1c2VyX3N0cnVjdCB7CiAgICAgICAgYXRvbWljX3QgX19jb3VudDsKICAgICAgICBh dG9taWNfdCBwcm9jZXNzZXM7CiAgICAgICAgYXRvbWljX3QgZmlsZXM7CgoKICAgICAgICBzdHJ1 Y3QgdXNlcl9zdHJ1Y3QgKm5leHQsICoqcHByZXY7CiAgICAgICAgdWlkX3QgdWlkOwp9OwoKCgoK CgpleHRlcm4gc3RydWN0IHVzZXJfc3RydWN0IHJvb3RfdXNlcjsKCgpzdHJ1Y3QgdGFza19zdHJ1 Y3QgewoKCgogICAgICAgIHZvbGF0aWxlIGxvbmcgc3RhdGU7CiAgICAgICAgdW5zaWduZWQgbG9u ZyBmbGFnczsKICAgICAgICBpbnQgc2lncGVuZGluZzsKICAgICAgICBtbV9zZWdtZW50X3QgYWRk cl9saW1pdDsKCgoKICAgICAgICBzdHJ1Y3QgZXhlY19kb21haW4gKmV4ZWNfZG9tYWluOwogICAg ICAgIHZvbGF0aWxlIGxvbmcgbmVlZF9yZXNjaGVkOwogICAgICAgIHVuc2lnbmVkIGxvbmcgcHRy YWNlOwoKICAgICAgICBpbnQgbG9ja19kZXB0aDsKCgoKCgoKICAgICAgICBsb25nIGNvdW50ZXI7 CiAgICAgICAgbG9uZyBuaWNlOwogICAgICAgIHVuc2lnbmVkIGxvbmcgcG9saWN5OwogICAgICAg IHN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwogICAgICAgIGludCBwcm9jZXNzb3I7CiMgMzI4ICIvdXNy L3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9zY2hlZC5oIgogICAgICAgIHVuc2lnbmVk IGxvbmcgY3B1c19ydW5uYWJsZSwgY3B1c19hbGxvd2VkOwoKCgoKICAgICAgICBzdHJ1Y3QgbGlz dF9oZWFkIHJ1bl9saXN0OwogICAgICAgIHVuc2lnbmVkIGxvbmcgc2xlZXBfdGltZTsKCiAgICAg ICAgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0X3Rhc2ssICpwcmV2X3Rhc2s7CiAgICAgICAgc3Ry dWN0IG1tX3N0cnVjdCAqYWN0aXZlX21tOwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgbG9jYWxf cGFnZXM7CiAgICAgICAgdW5zaWduZWQgaW50IGFsbG9jYXRpb25fb3JkZXIsIG5yX2xvY2FsX3Bh Z2VzOwoKCiAgICAgICAgc3RydWN0IGxpbnV4X2JpbmZtdCAqYmluZm10OwogICAgICAgIGludCBl eGl0X2NvZGUsIGV4aXRfc2lnbmFsOwogICAgICAgIGludCBwZGVhdGhfc2lnbmFsOwoKICAgICAg ICB1bnNpZ25lZCBsb25nIHBlcnNvbmFsaXR5OwogICAgICAgIGludCBkaWRfZXhlYzoxOwogICAg ICAgIHVuc2lnbmVkIHRhc2tfZHVtcGFibGU6MTsKICAgICAgICBwaWRfdCBwaWQ7CiAgICAgICAg cGlkX3QgcGdycDsKICAgICAgICBwaWRfdCB0dHlfb2xkX3BncnA7CiAgICAgICAgcGlkX3Qgc2Vz c2lvbjsKICAgICAgICBwaWRfdCB0Z2lkOwoKICAgICAgICBpbnQgbGVhZGVyOwoKCgoKCiAgICAg ICAgc3RydWN0IHRhc2tfc3RydWN0ICpwX29wcHRyLCAqcF9wcHRyLCAqcF9jcHRyLCAqcF95c3B0 ciwgKnBfb3NwdHI7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCB0aHJlYWRfZ3JvdXA7CgoKICAg ICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBpZGhhc2hfbmV4dDsKICAgICAgICBzdHJ1Y3QgdGFz a19zdHJ1Y3QgKipwaWRoYXNoX3BwcmV2OwoKICAgICAgICB3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0 X2NobGRleGl0OwogICAgICAgIHN0cnVjdCBjb21wbGV0aW9uICp2Zm9ya19kb25lOwogICAgICAg IHVuc2lnbmVkIGxvbmcgcnRfcHJpb3JpdHk7CiAgICAgICAgdW5zaWduZWQgbG9uZyBpdF9yZWFs X3ZhbHVlLCBpdF9wcm9mX3ZhbHVlLCBpdF92aXJ0X3ZhbHVlOwogICAgICAgIHVuc2lnbmVkIGxv bmcgaXRfcmVhbF9pbmNyLCBpdF9wcm9mX2luY3IsIGl0X3ZpcnRfaW5jcjsKICAgICAgICBzdHJ1 Y3QgdGltZXJfbGlzdCByZWFsX3RpbWVyOwogICAgICAgIHN0cnVjdCB0bXMgdGltZXM7CiAgICAg ICAgdW5zaWduZWQgbG9uZyBzdGFydF90aW1lOwogICAgICAgIGxvbmcgcGVyX2NwdV91dGltZVsz Ml0sIHBlcl9jcHVfc3RpbWVbMzJdOwoKICAgICAgICB1bnNpZ25lZCBsb25nIG1pbl9mbHQsIG1h al9mbHQsIG5zd2FwLCBjbWluX2ZsdCwgY21hal9mbHQsIGNuc3dhcDsKICAgICAgICBpbnQgc3dh cHBhYmxlOjE7CgogICAgICAgIHVpZF90IHVpZCxldWlkLHN1aWQsZnN1aWQ7CiAgICAgICAgZ2lk X3QgZ2lkLGVnaWQsc2dpZCxmc2dpZDsKICAgICAgICBpbnQgbmdyb3VwczsKICAgICAgICBnaWRf dCBncm91cHNbMzJdOwogICAgICAgIGtlcm5lbF9jYXBfdCBjYXBfZWZmZWN0aXZlLCBjYXBfaW5o ZXJpdGFibGUsIGNhcF9wZXJtaXR0ZWQ7CiAgICAgICAgaW50IGtlZXBfY2FwYWJpbGl0aWVzOjE7 CiAgICAgICAgc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyOwoKICAgICAgICBzdHJ1Y3QgcmxpbWl0 IHJsaW1bMTFdOwogICAgICAgIHVuc2lnbmVkIHNob3J0IHVzZWRfbWF0aDsKICAgICAgICBjaGFy IGNvbW1bMTZdOwoKICAgICAgICBpbnQgbGlua19jb3VudCwgdG90YWxfbGlua19jb3VudDsKICAg ICAgICBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwogICAgICAgIHVuc2lnbmVkIGludCBsb2NrczsK CiAgICAgICAgc3RydWN0IHNlbV91bmRvICpzZW11bmRvOwogICAgICAgIHN0cnVjdCBzZW1fcXVl dWUgKnNlbXNsZWVwaW5nOwoKICAgICAgICBzdHJ1Y3QgdGhyZWFkX3N0cnVjdCB0aHJlYWQ7Cgog ICAgICAgIHN0cnVjdCBmc19zdHJ1Y3QgKmZzOwoKICAgICAgICBzdHJ1Y3QgZmlsZXNfc3RydWN0 ICpmaWxlczsKCiAgICAgICAgc3RydWN0IG5hbWVzcGFjZSAqbmFtZXNwYWNlOwoKICAgICAgICBz cGlubG9ja190IHNpZ21hc2tfbG9jazsKICAgICAgICBzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2ln OwoKICAgICAgICBzaWdzZXRfdCBibG9ja2VkOwogICAgICAgIHN0cnVjdCBzaWdwZW5kaW5nIHBl bmRpbmc7CgogICAgICAgIHVuc2lnbmVkIGxvbmcgc2FzX3NzX3NwOwogICAgICAgIHNpemVfdCBz YXNfc3Nfc2l6ZTsKICAgICAgICBpbnQgKCpub3RpZmllcikodm9pZCAqcHJpdik7CiAgICAgICAg dm9pZCAqbm90aWZpZXJfZGF0YTsKICAgICAgICBzaWdzZXRfdCAqbm90aWZpZXJfbWFzazsKCgog ICAgICAgIHUzMiBwYXJlbnRfZXhlY19pZDsKICAgICAgICB1MzIgc2VsZl9leGVjX2lkOwoKICAg ICAgICBzcGlubG9ja190IGFsbG9jX2xvY2s7CgoKICAgICAgICB2b2lkICpqb3VybmFsX2luZm87 Cn07CiMgNDc0ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9zY2hlZC5oIgpl eHRlcm4gdm9pZCB5aWVsZCh2b2lkKTsKCgoKCmV4dGVybiBzdHJ1Y3QgZXhlY19kb21haW4gZGVm YXVsdF9leGVjX2RvbWFpbjsKIyA1MzMgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xp bnV4L3NjaGVkLmgiCnVuaW9uIHRhc2tfdW5pb24gewogICAgICAgIHN0cnVjdCB0YXNrX3N0cnVj dCB0YXNrOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc3RhY2tbMjA0OCpzaXplb2YobG9uZykvc2l6 ZW9mKGxvbmcpXTsKfTsKCmV4dGVybiB1bmlvbiB0YXNrX3VuaW9uIGluaXRfdGFza191bmlvbjsK CmV4dGVybiBzdHJ1Y3QgbW1fc3RydWN0IGluaXRfbW07CmV4dGVybiBzdHJ1Y3QgdGFza19zdHJ1 Y3QgKmluaXRfdGFza3NbMzJdOwoKCgpleHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICpwaWRoYXNo Wyg0MDk2ID4+IDIpXTsKCgoKc3RhdGljIGlubGluZSB2b2lkIGhhc2hfcGlkKHN0cnVjdCB0YXNr X3N0cnVjdCAqcCkKewogICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqKmh0YWJsZSA9ICZwaWRo YXNoWygoKChwLT5waWQpID4+IDgpIF4gKHAtPnBpZCkpICYgKCg0MDk2ID4+IDIpIC0gMSkpXTsK CiAgICAgICAgaWYoKHAtPnBpZGhhc2hfbmV4dCA9ICpodGFibGUpICE9ICgodm9pZCAqKTApKQog ICAgICAgICAgICAgICAgKCpodGFibGUpLT5waWRoYXNoX3BwcmV2ID0gJnAtPnBpZGhhc2hfbmV4 dDsKICAgICAgICAqaHRhYmxlID0gcDsKICAgICAgICBwLT5waWRoYXNoX3BwcmV2ID0gaHRhYmxl Owp9CgpzdGF0aWMgaW5saW5lIHZvaWQgdW5oYXNoX3BpZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAp CnsKICAgICAgICBpZihwLT5waWRoYXNoX25leHQpCiAgICAgICAgICAgICAgICBwLT5waWRoYXNo X25leHQtPnBpZGhhc2hfcHByZXYgPSBwLT5waWRoYXNoX3BwcmV2OwogICAgICAgICpwLT5waWRo YXNoX3BwcmV2ID0gcC0+cGlkaGFzaF9uZXh0Owp9CgpzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNr X3N0cnVjdCAqZmluZF90YXNrX2J5X3BpZChpbnQgcGlkKQp7CiAgICAgICAgc3RydWN0IHRhc2tf c3RydWN0ICpwLCAqKmh0YWJsZSA9ICZwaWRoYXNoWygoKChwaWQpID4+IDgpIF4gKHBpZCkpICYg KCg0MDk2ID4+IDIpIC0gMSkpXTsKCiAgICAgICAgZm9yKHAgPSAqaHRhYmxlOyBwICYmIHAtPnBp ZCAhPSBwaWQ7IHAgPSBwLT5waWRoYXNoX25leHQpCiAgICAgICAgICAgICAgICA7CgogICAgICAg IHJldHVybiBwOwp9CgoKCnN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX3NldF9jcHUoc3RydWN0IHRh c2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGludCBjcHUpCnsKICAgICAgICB0c2stPnByb2Nlc3Nv ciA9IGNwdTsKICAgICAgICB0c2stPmNwdXNfcnVubmFibGUgPSAxVUwgPDwgY3B1Owp9CgpzdGF0 aWMgaW5saW5lIHZvaWQgdGFza19yZWxlYXNlX2NwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykK ewogICAgICAgIHRzay0+Y3B1c19ydW5uYWJsZSA9IH4wVUw7Cn0KCgpleHRlcm4gc3RydWN0IHVz ZXJfc3RydWN0ICogYWxsb2NfdWlkKHVpZF90KTsKZXh0ZXJuIHZvaWQgZnJlZV91aWQoc3RydWN0 IHVzZXJfc3RydWN0ICopOwoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9hc20v Y3VycmVudC5oIiAxCgoKCnN0cnVjdCB0YXNrX3N0cnVjdDsKCnN0YXRpYyBpbmxpbmUgc3RydWN0 IHRhc2tfc3RydWN0ICogZ2V0X2N1cnJlbnQodm9pZCkKewogICAgICAgIHN0cnVjdCB0YXNrX3N0 cnVjdCAqY3VycmVudDsKICAgICAgICBfX2FzbV9fKCJhbmRsICUlZXNwLCUwOyAiOiI9ciIgKGN1 cnJlbnQpIDogIjAiICh+ODE5MVVMKSk7CiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7CiB9CiMgNTk0 ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9zY2hlZC5oIiAyCgpleHRlcm4g dW5zaWduZWQgbG9uZyB2b2xhdGlsZSBqaWZmaWVzOwpleHRlcm4gdW5zaWduZWQgbG9uZyBpdGlt ZXJfdGlja3M7CmV4dGVybiB1bnNpZ25lZCBsb25nIGl0aW1lcl9uZXh0OwpleHRlcm4gc3RydWN0 IHRpbWV2YWwgeHRpbWU7CmV4dGVybiB2b2lkIGRvX3RpbWVyKHN0cnVjdCBwdF9yZWdzICopOwoK ZXh0ZXJuIHVuc2lnbmVkIGludCAqIHByb2ZfYnVmZmVyOwpleHRlcm4gdW5zaWduZWQgbG9uZyBw cm9mX2xlbjsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcHJvZl9zaGlmdDsKCgoKZXh0ZXJuIHZvaWQg X193YWtlX3VwKHdhaXRfcXVldWVfaGVhZF90ICpxLCB1bnNpZ25lZCBpbnQgbW9kZSwgaW50IG5y KSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CmV4dGVybiB2b2lkIF9fd2FrZV91cF9zeW5j KHdhaXRfcXVldWVfaGVhZF90ICpxLCB1bnNpZ25lZCBpbnQgbW9kZSwgaW50IG5yKSBfX2F0dHJp YnV0ZV9fKChyZWdwYXJtKDMpKSk7CmV4dGVybiB2b2lkIHNsZWVwX29uKHdhaXRfcXVldWVfaGVh ZF90ICpxKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CmV4dGVybiBsb25nIHNsZWVwX29u X3RpbWVvdXQod2FpdF9xdWV1ZV9oZWFkX3QgKnEsIHNpZ25lZCBsb25nIHRpbWVvdXQpIF9fYXR0 cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKCmV4dGVybiB2b2lkIGludGVycnVwdGlibGVfc2xlZXBf b24od2FpdF9xdWV1ZV9oZWFkX3QgKnEpIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKZXh0 ZXJuIGxvbmcgaW50ZXJydXB0aWJsZV9zbGVlcF9vbl90aW1lb3V0KHdhaXRfcXVldWVfaGVhZF90 ICpxLCBzaWduZWQgbG9uZyB0aW1lb3V0KSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7Cgpl eHRlcm4gaW50IHdha2VfdXBfcHJvY2VzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKiB0c2spIF9fYXR0 cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKIyA2MjcgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNs dWRlL2xpbnV4L3NjaGVkLmgiCiBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDApKSkgbG9uZyBzeXNf d2FpdDQocGlkX3QgcGlkLHVuc2lnbmVkIGludCAqIHN0YXRfYWRkciwgaW50IG9wdGlvbnMsIHN0 cnVjdCBydXNhZ2UgKiBydSk7CgpleHRlcm4gaW50IGluX2dyb3VwX3AoZ2lkX3QpOwpleHRlcm4g aW50IGluX2Vncm91cF9wKGdpZF90KTsKCmV4dGVybiB2b2lkIHByb2NfY2FjaGVzX2luaXQodm9p ZCk7CmV4dGVybiB2b2lkIGZsdXNoX3NpZ25hbHMoc3RydWN0IHRhc2tfc3RydWN0ICopOwpleHRl cm4gdm9pZCBmbHVzaF9zaWduYWxfaGFuZGxlcnMoc3RydWN0IHRhc2tfc3RydWN0ICopOwpleHRl cm4gdm9pZCBzaWdfZXhpdChpbnQsIGludCwgc3RydWN0IHNpZ2luZm8gKik7CmV4dGVybiBpbnQg ZGVxdWV1ZV9zaWduYWwoc2lnc2V0X3QgKiwgc2lnaW5mb190ICopOwpleHRlcm4gdm9pZCBibG9j a19hbGxfc2lnbmFscyhpbnQgKCpub3RpZmllcikodm9pZCAqcHJpdiksIHZvaWQgKnByaXYsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ3NldF90ICptYXNrKTsKZXh0ZXJuIHZvaWQg dW5ibG9ja19hbGxfc2lnbmFscyh2b2lkKTsKZXh0ZXJuIGludCBzZW5kX3NpZ19pbmZvKGludCwg c3RydWN0IHNpZ2luZm8gKiwgc3RydWN0IHRhc2tfc3RydWN0ICopOwpleHRlcm4gaW50IGZvcmNl X3NpZ19pbmZvKGludCwgc3RydWN0IHNpZ2luZm8gKiwgc3RydWN0IHRhc2tfc3RydWN0ICopOwpl eHRlcm4gaW50IGtpbGxfcGdfaW5mbyhpbnQsIHN0cnVjdCBzaWdpbmZvICosIHBpZF90KTsKZXh0 ZXJuIGludCBraWxsX3NsX2luZm8oaW50LCBzdHJ1Y3Qgc2lnaW5mbyAqLCBwaWRfdCk7CmV4dGVy biBpbnQga2lsbF9wcm9jX2luZm8oaW50LCBzdHJ1Y3Qgc2lnaW5mbyAqLCBwaWRfdCk7CmV4dGVy biB2b2lkIG5vdGlmeV9wYXJlbnQoc3RydWN0IHRhc2tfc3RydWN0ICosIGludCk7CmV4dGVybiB2 b2lkIGRvX25vdGlmeV9wYXJlbnQoc3RydWN0IHRhc2tfc3RydWN0ICosIGludCk7CmV4dGVybiB2 b2lkIGZvcmNlX3NpZyhpbnQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKZXh0ZXJuIGludCBzZW5k X3NpZyhpbnQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBpbnQpOwpleHRlcm4gaW50IGtpbGxfcGco cGlkX3QsIGludCwgaW50KTsKZXh0ZXJuIGludCBraWxsX3NsKHBpZF90LCBpbnQsIGludCk7CmV4 dGVybiBpbnQga2lsbF9wcm9jKHBpZF90LCBpbnQsIGludCk7CmV4dGVybiBpbnQgZG9fc2lnYWN0 aW9uKGludCwgY29uc3Qgc3RydWN0IGtfc2lnYWN0aW9uICosIHN0cnVjdCBrX3NpZ2FjdGlvbiAq KTsKZXh0ZXJuIGludCBkb19zaWdhbHRzdGFjayhjb25zdCBzdGFja190ICosIHN0YWNrX3QgKiwg dW5zaWduZWQgbG9uZyk7CgpzdGF0aWMgaW5saW5lIGludCBzaWduYWxfcGVuZGluZyhzdHJ1Y3Qg dGFza19zdHJ1Y3QgKnApCnsKICAgICAgICByZXR1cm4gKHAtPnNpZ3BlbmRpbmcgIT0gMCk7Cn0K CgoKCgpzdGF0aWMgaW5saW5lIGludCBoYXNfcGVuZGluZ19zaWduYWxzKHNpZ3NldF90ICpzaWdu YWwsIHNpZ3NldF90ICpibG9ja2VkKQp7CiAgICAgICAgdW5zaWduZWQgbG9uZyByZWFkeTsKICAg ICAgICBsb25nIGk7CgogICAgICAgIHN3aXRjaCAoKDY0IC8gMzIpKSB7CiAgICAgICAgZGVmYXVs dDoKICAgICAgICAgICAgICAgIGZvciAoaSA9ICg2NCAvIDMyKSwgcmVhZHkgPSAwOyAtLWkgPj0g MCA7KQogICAgICAgICAgICAgICAgICAgICAgICByZWFkeSB8PSBzaWduYWwtPnNpZ1tpXSAmfiBi bG9ja2VkLT5zaWdbaV07CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSA0OiBy ZWFkeSA9IHNpZ25hbC0+c2lnWzNdICZ+IGJsb2NrZWQtPnNpZ1szXTsKICAgICAgICAgICAgICAg IHJlYWR5IHw9IHNpZ25hbC0+c2lnWzJdICZ+IGJsb2NrZWQtPnNpZ1syXTsKICAgICAgICAgICAg ICAgIHJlYWR5IHw9IHNpZ25hbC0+c2lnWzFdICZ+IGJsb2NrZWQtPnNpZ1sxXTsKICAgICAgICAg ICAgICAgIHJlYWR5IHw9IHNpZ25hbC0+c2lnWzBdICZ+IGJsb2NrZWQtPnNpZ1swXTsKICAgICAg ICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIDI6IHJlYWR5ID0gc2lnbmFsLT5zaWdbMV0g Jn4gYmxvY2tlZC0+c2lnWzFdOwogICAgICAgICAgICAgICAgcmVhZHkgfD0gc2lnbmFsLT5zaWdb MF0gJn4gYmxvY2tlZC0+c2lnWzBdOwogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNh c2UgMTogcmVhZHkgPSBzaWduYWwtPnNpZ1swXSAmfiBibG9ja2VkLT5zaWdbMF07CiAgICAgICAg fQogICAgICAgIHJldHVybiByZWFkeSAhPSAwOwp9CgoKCgoKc3RhdGljIGlubGluZSB2b2lkIHJl Y2FsY19zaWdwZW5kaW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCkKewogICAgICAgIHQtPnNpZ3Bl bmRpbmcgPSBoYXNfcGVuZGluZ19zaWduYWxzKCZ0LT5wZW5kaW5nLnNpZ25hbCwgJnQtPmJsb2Nr ZWQpOwp9CgoKCnN0YXRpYyBpbmxpbmUgaW50IG9uX3NpZ19zdGFjayh1bnNpZ25lZCBsb25nIHNw KQp7CiAgICAgICAgcmV0dXJuIChzcCAtIGdldF9jdXJyZW50KCktPnNhc19zc19zcCA8IGdldF9j dXJyZW50KCktPnNhc19zc19zaXplKTsKfQoKc3RhdGljIGlubGluZSBpbnQgc2FzX3NzX2ZsYWdz KHVuc2lnbmVkIGxvbmcgc3ApCnsKICAgICAgICByZXR1cm4gKGdldF9jdXJyZW50KCktPnNhc19z c19zaXplID09IDAgPyAyCiAgICAgICAgICAgICAgICA6IG9uX3NpZ19zdGFjayhzcCkgPyAxIDog MCk7Cn0KCmV4dGVybiBpbnQgcmVxdWVzdF9pcnEodW5zaWduZWQgaW50LAogICAgICAgICAgICAg ICAgICAgICAgIHZvaWQgKCpoYW5kbGVyKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiks CiAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZywgY29uc3QgY2hhciAqLCB2b2lk ICopOwpleHRlcm4gdm9pZCBmcmVlX2lycSh1bnNpZ25lZCBpbnQsIHZvaWQgKik7CiMgNzMxICIv dXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9zY2hlZC5oIgpzdGF0aWMgaW5saW5l IGludCBzdXNlcih2b2lkKQp7CiAgICAgICAgaWYgKCEoICgxIDw8ICgwICsxKSkgJiAweDAwMDAw MDAwID8gKDEgPDwgKDApKSAmIDB4MDAwMDAwMDAgOiAoMSA8PCAoMCkpICYgc2VjdXJlYml0cyAp ICYmIGdldF9jdXJyZW50KCktPmV1aWQgPT0gMCkgewogICAgICAgICAgICAgICAgZ2V0X2N1cnJl bnQoKS0+ZmxhZ3MgfD0gMHgwMDAwMDEwMDsKICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAg ICAgIH0KICAgICAgICByZXR1cm4gMDsKfQoKc3RhdGljIGlubGluZSBpbnQgZnN1c2VyKHZvaWQp CnsKICAgICAgICBpZiAoISggKDEgPDwgKDAgKzEpKSAmIDB4MDAwMDAwMDAgPyAoMSA8PCAoMCkp ICYgMHgwMDAwMDAwMCA6ICgxIDw8ICgwKSkgJiBzZWN1cmViaXRzICkgJiYgZ2V0X2N1cnJlbnQo KS0+ZnN1aWQgPT0gMCkgewogICAgICAgICAgICAgICAgZ2V0X2N1cnJlbnQoKS0+ZmxhZ3MgfD0g MHgwMDAwMDEwMDsKICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgIH0KICAgICAgICBy ZXR1cm4gMDsKfQoKCgoKCgoKc3RhdGljIGlubGluZSBpbnQgY2FwYWJsZShpbnQgY2FwKQp7Cgog ICAgICAgIGlmICgoKGdldF9jdXJyZW50KCktPmNhcF9lZmZlY3RpdmUpICYgKDEgPDwgKGNhcCkp KSkKCgoKICAgICAgICB7CiAgICAgICAgICAgICAgICBnZXRfY3VycmVudCgpLT5mbGFncyB8PSAw eDAwMDAwMTAwOwogICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgfQogICAgICAgIHJl dHVybiAwOwp9CgoKCgpleHRlcm4gc3RydWN0IG1tX3N0cnVjdCAqIG1tX2FsbG9jKHZvaWQpOwoK ZXh0ZXJuIHN0cnVjdCBtbV9zdHJ1Y3QgKiBzdGFydF9sYXp5X3RsYih2b2lkKTsKZXh0ZXJuIHZv aWQgZW5kX2xhenlfdGxiKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKCgpleHRlcm4gaW5saW5lIHZv aWQgX19tbWRyb3Aoc3RydWN0IG1tX3N0cnVjdCAqKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMp KSk7CnN0YXRpYyBpbmxpbmUgdm9pZCBtbWRyb3Aoc3RydWN0IG1tX3N0cnVjdCAqIG1tKQp7CiAg ICAgICAgaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJm1tLT5tbV9jb3VudCkpCiAgICAgICAgICAg ICAgICBfX21tZHJvcChtbSk7Cn0KCgpleHRlcm4gdm9pZCBtbXB1dChzdHJ1Y3QgbW1fc3RydWN0 ICopOwoKZXh0ZXJuIHZvaWQgbW1fcmVsZWFzZSh2b2lkKTsKCgoKCmV4dGVybiBzdHJ1Y3QgZmls ZSAqKiBhbGxvY19mZF9hcnJheShpbnQpOwpleHRlcm4gaW50IGV4cGFuZF9mZF9hcnJheShzdHJ1 Y3QgZmlsZXNfc3RydWN0ICosIGludCBucik7CmV4dGVybiB2b2lkIGZyZWVfZmRfYXJyYXkoc3Ry dWN0IGZpbGUgKiosIGludCk7CgpleHRlcm4gZmRfc2V0ICphbGxvY19mZHNldChpbnQpOwpleHRl cm4gaW50IGV4cGFuZF9mZHNldChzdHJ1Y3QgZmlsZXNfc3RydWN0ICosIGludCBucik7CmV4dGVy biB2b2lkIGZyZWVfZmRzZXQoZmRfc2V0ICosIGludCk7CgpleHRlcm4gaW50IGNvcHlfdGhyZWFk KGludCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgc3RydWN0 IHRhc2tfc3RydWN0ICosIHN0cnVjdCBwdF9yZWdzICopOwpleHRlcm4gdm9pZCBmbHVzaF90aHJl YWQodm9pZCk7CmV4dGVybiB2b2lkIGV4aXRfdGhyZWFkKHZvaWQpOwoKZXh0ZXJuIHZvaWQgZXhp dF9tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CmV4dGVybiB2b2lkIGV4aXRfZmlsZXMoc3RydWN0 IHRhc2tfc3RydWN0ICopOwpleHRlcm4gdm9pZCBleGl0X3NpZ2hhbmQoc3RydWN0IHRhc2tfc3Ry dWN0ICopOwoKZXh0ZXJuIHZvaWQgcmVwYXJlbnRfdG9faW5pdCh2b2lkKTsKZXh0ZXJuIHZvaWQg ZGFlbW9uaXplKHZvaWQpOwoKZXh0ZXJuIGludCBkb19leGVjdmUoY2hhciAqLCBjaGFyICoqLCBj aGFyICoqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKZXh0ZXJuIGludCBkb19mb3JrKHVuc2lnbmVkIGxv bmcsIHVuc2lnbmVkIGxvbmcsIHN0cnVjdCBwdF9yZWdzICosIHVuc2lnbmVkIGxvbmcpOwoKZXh0 ZXJuIHZvaWQgYWRkX3dhaXRfcXVldWUod2FpdF9xdWV1ZV9oZWFkX3QgKnEsIHdhaXRfcXVldWVf dCAqIHdhaXQpIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKZXh0ZXJuIHZvaWQgYWRkX3dh aXRfcXVldWVfZXhjbHVzaXZlKHdhaXRfcXVldWVfaGVhZF90ICpxLCB3YWl0X3F1ZXVlX3QgKiB3 YWl0KSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CmV4dGVybiB2b2lkIHJlbW92ZV93YWl0 X3F1ZXVlKHdhaXRfcXVldWVfaGVhZF90ICpxLCB3YWl0X3F1ZXVlX3QgKiB3YWl0KSBfX2F0dHJp YnV0ZV9fKChyZWdwYXJtKDMpKSk7CgpleHRlcm4gbG9uZyBrZXJuZWxfdGhyZWFkKGludCAoKmZu KSh2b2lkICopLCB2b2lkICogYXJnLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKIyA5MDYgIi91c3Iv c3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiCnN0YXRpYyBpbmxpbmUgdm9p ZCBkZWxfZnJvbV9ydW5xdWV1ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBwKQp7CiAgICAgICAgbnJf cnVubmluZy0tOwogICAgICAgIHAtPnNsZWVwX3RpbWUgPSBqaWZmaWVzOwogICAgICAgIGxpc3Rf ZGVsKCZwLT5ydW5fbGlzdCk7CiAgICAgICAgcC0+cnVuX2xpc3QubmV4dCA9ICgodm9pZCAqKTAp Owp9CgpzdGF0aWMgaW5saW5lIGludCB0YXNrX29uX3J1bnF1ZXVlKHN0cnVjdCB0YXNrX3N0cnVj dCAqcCkKewogICAgICAgIHJldHVybiAocC0+cnVuX2xpc3QubmV4dCAhPSAoKHZvaWQgKikwKSk7 Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCB1bmhhc2hfcHJvY2VzcyhzdHJ1Y3QgdGFza19zdHJ1Y3Qg KnApCnsKICAgICAgICBpZiAodGFza19vbl9ydW5xdWV1ZShwKSkKICAgICAgICAgICAgICAgIF9f b3V0X29mX2xpbmVfYnVnKDkyMik7CiAgICAgICAgZG8geyBfX2FzbV9fIF9fdm9sYXRpbGVfXygi Y2xpIjogOiA6Im1lbW9yeSIpOyB3cml0ZV9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsgfSB3aGlsZSAo MCk7CiAgICAgICAgbnJfdGhyZWFkcy0tOwogICAgICAgIHVuaGFzaF9waWQocCk7CiAgICAgICAg ZG8geyAocCktPm5leHRfdGFzay0+cHJldl90YXNrID0gKHApLT5wcmV2X3Rhc2s7IChwKS0+cHJl dl90YXNrLT5uZXh0X3Rhc2sgPSAocCktPm5leHRfdGFzazsgaWYgKChwKS0+cF9vc3B0cikgKHAp LT5wX29zcHRyLT5wX3lzcHRyID0gKHApLT5wX3lzcHRyOyBpZiAoKHApLT5wX3lzcHRyKSAocCkt PnBfeXNwdHItPnBfb3NwdHIgPSAocCktPnBfb3NwdHI7IGVsc2UgKHApLT5wX3BwdHItPnBfY3B0 ciA9IChwKS0+cF9vc3B0cjsgfSB3aGlsZSAoMCk7CiAgICAgICAgbGlzdF9kZWwoJnAtPnRocmVh ZF9ncm91cCk7CiAgICAgICAgZG8geyBhc20gdm9sYXRpbGUoImxvY2sgOyBhZGRsICQiICIweDAx MDAwMDAwIiAiLCUwIjoiPW0iICgoJnRhc2tsaXN0X2xvY2spLT5sb2NrKSA6IDogIm1lbW9yeSIp OyBfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RpIjogOiA6Im1lbW9yeSIpOyB9IHdoaWxlICgwKTsK fQoKCnN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX2xvY2soc3RydWN0IHRhc2tfc3RydWN0ICpwKQp7 CiAgICAgICAgc3Bpbl9sb2NrKCZwLT5hbGxvY19sb2NrKTsKfQoKc3RhdGljIGlubGluZSB2b2lk IHRhc2tfdW5sb2NrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKewogICAgICAgIHNwaW5fdW5sb2Nr KCZwLT5hbGxvY19sb2NrKTsKfQoKCnN0YXRpYyBpbmxpbmUgY2hhciAqIGRfcGF0aChzdHJ1Y3Qg ZGVudHJ5ICpkZW50cnksIHN0cnVjdCB2ZnNtb3VudCAqdmZzbW50LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZiwgaW50IGJ1ZmxlbikKewogICAgICAgIGNoYXIgKnJl czsKICAgICAgICBzdHJ1Y3QgdmZzbW91bnQgKnJvb3RtbnQ7CiAgICAgICAgc3RydWN0IGRlbnRy eSAqcm9vdDsKICAgICAgICByZWFkX2xvY2soJmdldF9jdXJyZW50KCktPmZzLT5sb2NrKTsKICAg ICAgICByb290bW50ID0gbW50Z2V0KGdldF9jdXJyZW50KCktPmZzLT5yb290bW50KTsKICAgICAg ICByb290ID0gZGdldChnZXRfY3VycmVudCgpLT5mcy0+cm9vdCk7CiAgICAgICAgYXNtIHZvbGF0 aWxlKCJsb2NrIDsgaW5jbCAlMCIgOiI9bSIgKCgmZ2V0X2N1cnJlbnQoKS0+ZnMtPmxvY2spLT5s b2NrKSA6IDogIm1lbW9yeSIpOwogICAgICAgIHNwaW5fbG9jaygmZGNhY2hlX2xvY2spOwogICAg ICAgIHJlcyA9IF9fZF9wYXRoKGRlbnRyeSwgdmZzbW50LCByb290LCByb290bW50LCBidWYsIGJ1 Zmxlbik7CiAgICAgICAgc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKICAgICAgICBkcHV0KHJv b3QpOwogICAgICAgIG1udHB1dChyb290bW50KTsKICAgICAgICByZXR1cm4gcmVzOwp9CgpzdGF0 aWMgaW5saW5lIGludCBuZWVkX3Jlc2NoZWQodm9pZCkKewogICAgICAgIHJldHVybiAoX19idWls dGluX2V4cGVjdCgoZ2V0X2N1cnJlbnQoKS0+bmVlZF9yZXNjaGVkKSwwKSk7Cn0KCmV4dGVybiB2 b2lkIF9fY29uZF9yZXNjaGVkKHZvaWQpOwpzdGF0aWMgaW5saW5lIHZvaWQgY29uZF9yZXNjaGVk KHZvaWQpCnsKICAgICAgICBpZiAobmVlZF9yZXNjaGVkKCkpCiAgICAgICAgICAgICAgICBfX2Nv bmRfcmVzY2hlZCgpOwp9CiMgNSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgv bW0uaCIgMgoKCgoKCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9t bXpvbmUuaCIgMQojIDIyICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9tbXpv bmUuaCIKdHlwZWRlZiBzdHJ1Y3QgZnJlZV9hcmVhX3N0cnVjdCB7CiAgICAgICAgc3RydWN0IGxp c3RfaGVhZCBmcmVlX2xpc3Q7CiAgICAgICAgdW5zaWduZWQgbG9uZyAqbWFwOwp9IGZyZWVfYXJl YV90OwoKc3RydWN0IHBnbGlzdF9kYXRhOwojIDM3ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5j bHVkZS9saW51eC9tbXpvbmUuaCIKdHlwZWRlZiBzdHJ1Y3Qgem9uZV9zdHJ1Y3QgewoKCgogICAg ICAgIHNwaW5sb2NrX3QgbG9jazsKICAgICAgICB1bnNpZ25lZCBsb25nIGZyZWVfcGFnZXM7CiAg ICAgICAgdW5zaWduZWQgbG9uZyBwYWdlc19taW4sIHBhZ2VzX2xvdywgcGFnZXNfaGlnaDsKICAg ICAgICBpbnQgbmVlZF9iYWxhbmNlOwoKCgoKICAgICAgICBmcmVlX2FyZWFfdCBmcmVlX2FyZWFb MTBdOwojIDc2ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9tbXpvbmUuaCIK ICAgICAgICB3YWl0X3F1ZXVlX2hlYWRfdCAqIHdhaXRfdGFibGU7CiAgICAgICAgdW5zaWduZWQg bG9uZyB3YWl0X3RhYmxlX3NpemU7CiAgICAgICAgdW5zaWduZWQgbG9uZyB3YWl0X3RhYmxlX3No aWZ0OwoKCgoKICAgICAgICBzdHJ1Y3QgcGdsaXN0X2RhdGEgKnpvbmVfcGdkYXQ7CiAgICAgICAg c3RydWN0IHBhZ2UgKnpvbmVfbWVtX21hcDsKICAgICAgICB1bnNpZ25lZCBsb25nIHpvbmVfc3Rh cnRfcGFkZHI7CiAgICAgICAgdW5zaWduZWQgbG9uZyB6b25lX3N0YXJ0X21hcG5yOwoKCgoKICAg ICAgICBjaGFyICpuYW1lOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZTsKfSB6b25lX3Q7CiMg MTExICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9tbXpvbmUuaCIKdHlwZWRl ZiBzdHJ1Y3Qgem9uZWxpc3Rfc3RydWN0IHsKICAgICAgICB6b25lX3QgKiB6b25lcyBbMyArMV07 Cn0gem9uZWxpc3RfdDsKIyAxMjggIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4 L21tem9uZS5oIgpzdHJ1Y3QgYm9vdG1lbV9kYXRhOwp0eXBlZGVmIHN0cnVjdCBwZ2xpc3RfZGF0 YSB7CiAgICAgICAgem9uZV90IG5vZGVfem9uZXNbM107CiAgICAgICAgem9uZWxpc3RfdCBub2Rl X3pvbmVsaXN0c1sweDBmICsxXTsKICAgICAgICBpbnQgbnJfem9uZXM7CiAgICAgICAgc3RydWN0 IHBhZ2UgKm5vZGVfbWVtX21hcDsKICAgICAgICB1bnNpZ25lZCBsb25nICp2YWxpZF9hZGRyX2Jp dG1hcDsKICAgICAgICBzdHJ1Y3QgYm9vdG1lbV9kYXRhICpiZGF0YTsKICAgICAgICB1bnNpZ25l ZCBsb25nIG5vZGVfc3RhcnRfcGFkZHI7CiAgICAgICAgdW5zaWduZWQgbG9uZyBub2RlX3N0YXJ0 X21hcG5yOwogICAgICAgIHVuc2lnbmVkIGxvbmcgbm9kZV9zaXplOwogICAgICAgIGludCBub2Rl X2lkOwogICAgICAgIHN0cnVjdCBwZ2xpc3RfZGF0YSAqbm9kZV9uZXh0Owp9IHBnX2RhdGFfdDsK CmV4dGVybiBpbnQgbnVtbm9kZXM7CmV4dGVybiBwZ19kYXRhX3QgKnBnZGF0X2xpc3Q7CiMgMTUz ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9tbXpvbmUuaCIKc3RydWN0IHBh Z2U7CmV4dGVybiB2b2lkIHNob3dfZnJlZV9hcmVhc19jb3JlKHBnX2RhdGFfdCAqcGdkYXQpOwpl eHRlcm4gdm9pZCBmcmVlX2FyZWFfaW5pdF9jb3JlKGludCBuaWQsIHBnX2RhdGFfdCAqcGdkYXQs IHN0cnVjdCBwYWdlICoqZ21hcCwKICB1bnNpZ25lZCBsb25nICp6b25lc19zaXplLCB1bnNpZ25l ZCBsb25nIHBhZGRyLCB1bnNpZ25lZCBsb25nICp6aG9sZXNfc2l6ZSwKICBzdHJ1Y3QgcGFnZSAq cG1hcCk7CgpleHRlcm4gcGdfZGF0YV90IGNvbnRpZ19wYWdlX2RhdGE7CiMgMTgwICIvdXNyL3Ny Yy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9tbXpvbmUuaCIKc3RhdGljIGlubGluZSB6b25l X3QgKm5leHRfem9uZSh6b25lX3QgKnpvbmUpCnsKICAgICAgICBwZ19kYXRhX3QgKnBnZGF0ID0g em9uZS0+em9uZV9wZ2RhdDsKCiAgICAgICAgaWYgKHpvbmUgLSBwZ2RhdC0+bm9kZV96b25lcyA8 IDMgLSAxKQogICAgICAgICAgICAgICAgem9uZSsrOwoKICAgICAgICBlbHNlIGlmIChwZ2RhdC0+ bm9kZV9uZXh0KSB7CiAgICAgICAgICAgICAgICBwZ2RhdCA9IHBnZGF0LT5ub2RlX25leHQ7CiAg ICAgICAgICAgICAgICB6b25lID0gcGdkYXQtPm5vZGVfem9uZXM7CiAgICAgICAgfSBlbHNlCiAg ICAgICAgICAgICAgICB6b25lID0gKCh2b2lkICopMCk7CgogICAgICAgIHJldHVybiB6b25lOwp9 CiMgMTMgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L21tLmgiIDIKIyAxICIv dXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9zd2FwLmgiIDEKIyAyNSAiL3Vzci9z cmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvc3dhcC5oIgp1bmlvbiBzd2FwX2hlYWRlciB7 CiAgICAgICAgc3RydWN0CiAgICAgICAgewogICAgICAgICAgICAgICAgY2hhciByZXNlcnZlZFso MVVMIDw8IDEyKSAtIDEwXTsKICAgICAgICAgICAgICAgIGNoYXIgbWFnaWNbMTBdOwogICAgICAg IH0gbWFnaWM7CiAgICAgICAgc3RydWN0CiAgICAgICAgewogICAgICAgICAgICAgICAgY2hhciBi b290Yml0c1sxMDI0XTsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB2ZXJzaW9uOwogICAg ICAgICAgICAgICAgdW5zaWduZWQgaW50IGxhc3RfcGFnZTsKICAgICAgICAgICAgICAgIHVuc2ln bmVkIGludCBucl9iYWRwYWdlczsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwYWRkaW5n WzEyNV07CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYmFkcGFnZXNbMV07CiAgICAgICAg fSBpbmZvOwp9OwojIDY0ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9zd2Fw LmgiCnN0cnVjdCBzd2FwX2luZm9fc3RydWN0IHsKICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3M7 CiAgICAgICAga2Rldl90IHN3YXBfZGV2aWNlOwogICAgICAgIHNwaW5sb2NrX3Qgc2Rldl9sb2Nr OwogICAgICAgIHN0cnVjdCBkZW50cnkgKiBzd2FwX2ZpbGU7CiAgICAgICAgc3RydWN0IHZmc21v dW50ICpzd2FwX3Zmc21udDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCAqIHN3YXBfbWFwOwogICAg ICAgIHVuc2lnbmVkIGludCBsb3dlc3RfYml0OwogICAgICAgIHVuc2lnbmVkIGludCBoaWdoZXN0 X2JpdDsKICAgICAgICB1bnNpZ25lZCBpbnQgY2x1c3Rlcl9uZXh0OwogICAgICAgIHVuc2lnbmVk IGludCBjbHVzdGVyX25yOwogICAgICAgIGludCBwcmlvOwogICAgICAgIGludCBwYWdlczsKICAg ICAgICB1bnNpZ25lZCBsb25nIG1heDsKICAgICAgICBpbnQgbmV4dDsKfTsKCmV4dGVybiBpbnQg bnJfc3dhcF9wYWdlczsKCgoKCmV4dGVybiB1bnNpZ25lZCBpbnQgbnJfZnJlZV9wYWdlcyh2b2lk KTsKZXh0ZXJuIHVuc2lnbmVkIGludCBucl9mcmVlX2J1ZmZlcl9wYWdlcyh2b2lkKTsKZXh0ZXJu IGludCBucl9hY3RpdmVfcGFnZXM7CmV4dGVybiBpbnQgbnJfaW5hY3RpdmVfcGFnZXM7CmV4dGVy biBhdG9taWNfdCBwYWdlX2NhY2hlX3NpemU7CmV4dGVybiBhdG9taWNfdCBidWZmZXJtZW1fcGFn ZXM7CgpleHRlcm4gc3BpbmxvY2tfY2FjaGVsaW5lX3QgcGFnZWNhY2hlX2xvY2tfY2FjaGVsaW5l OwoKCmV4dGVybiB2b2lkIF9fcmVtb3ZlX2lub2RlX3BhZ2Uoc3RydWN0IHBhZ2UgKik7CgoKc3Ry dWN0IHRhc2tfc3RydWN0OwpzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Q7CnN0cnVjdCBzeXNpbmZvOwoK c3RydWN0IHpvbmVfdDsKCgpleHRlcm4gdm9pZCBscnVfY2FjaGVfYWRkKHN0cnVjdCBwYWdlICop IF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKZXh0ZXJuIHZvaWQgX19scnVfY2FjaGVfZGVs KHN0cnVjdCBwYWdlICopIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKZXh0ZXJuIHZvaWQg bHJ1X2NhY2hlX2RlbChzdHJ1Y3QgcGFnZSAqKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7 CgpleHRlcm4gdm9pZCBhY3RpdmF0ZV9wYWdlKHN0cnVjdCBwYWdlICopIF9fYXR0cmlidXRlX18o KHJlZ3Bhcm0oMykpKTsKCmV4dGVybiB2b2lkIHN3YXBfc2V0dXAodm9pZCk7CgoKZXh0ZXJuIHdh aXRfcXVldWVfaGVhZF90IGtzd2FwZF93YWl0OwpleHRlcm4gaW50IHRyeV90b19mcmVlX3BhZ2Vz X3pvbmUoem9uZV90ICosIHVuc2lnbmVkIGludCkgX19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkp OwpleHRlcm4gaW50IHRyeV90b19mcmVlX3BhZ2VzKHVuc2lnbmVkIGludCkgX19hdHRyaWJ1dGVf XygocmVncGFybSgzKSkpOwoKCmV4dGVybiB2b2lkIHJ3X3N3YXBfcGFnZShpbnQsIHN0cnVjdCBw YWdlICopOwpleHRlcm4gdm9pZCBfX3J3X3N3YXBfcGFnZV9ub2xvY2soaW50LCBzd3BfZW50cnlf dCwgY2hhciAqLCBpbnQpOwojIDEzMCAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGlu dXgvc3dhcC5oIgpleHRlcm4gdm9pZCBzaG93X3N3YXBfY2FjaGVfaW5mbyh2b2lkKTsKCmV4dGVy biBpbnQgYWRkX3RvX3N3YXBfY2FjaGUoc3RydWN0IHBhZ2UgKiwgc3dwX2VudHJ5X3QpOwpleHRl cm4gdm9pZCBfX2RlbGV0ZV9mcm9tX3N3YXBfY2FjaGUoc3RydWN0IHBhZ2UgKnBhZ2UpOwpleHRl cm4gdm9pZCBkZWxldGVfZnJvbV9zd2FwX2NhY2hlKHN0cnVjdCBwYWdlICpwYWdlKTsKZXh0ZXJu IHZvaWQgZnJlZV9wYWdlX2FuZF9zd2FwX2NhY2hlKHN0cnVjdCBwYWdlICpwYWdlKTsKZXh0ZXJu IHN0cnVjdCBwYWdlICogbG9va3VwX3N3YXBfY2FjaGUoc3dwX2VudHJ5X3QpOwpleHRlcm4gc3Ry dWN0IHBhZ2UgKiByZWFkX3N3YXBfY2FjaGVfYXN5bmMoc3dwX2VudHJ5X3QpOwoKCmV4dGVybiB2 b2lkIG91dF9vZl9tZW1vcnkodm9pZCk7CgoKZXh0ZXJuIGludCB0b3RhbF9zd2FwX3BhZ2VzOwpl eHRlcm4gdW5zaWduZWQgaW50IG5yX3N3YXBmaWxlczsKZXh0ZXJuIHN0cnVjdCBzd2FwX2luZm9f c3RydWN0IHN3YXBfaW5mb1tdOwpleHRlcm4gaW50IGlzX3N3YXBfcGFydGl0aW9uKGtkZXZfdCk7 CmV4dGVybiB2b2lkIHNpX3N3YXBpbmZvKHN0cnVjdCBzeXNpbmZvICopOwpleHRlcm4gc3dwX2Vu dHJ5X3QgZ2V0X3N3YXBfcGFnZSh2b2lkKTsKZXh0ZXJuIHZvaWQgZ2V0X3N3YXBoYW5kbGVfaW5m byhzd3BfZW50cnlfdCwgdW5zaWduZWQgbG9uZyAqLCBrZGV2X3QgKiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpbm9kZSAqKik7CmV4dGVybiBpbnQgc3dh cF9kdXBsaWNhdGUoc3dwX2VudHJ5X3QpOwpleHRlcm4gaW50IHZhbGlkX3N3YXBoYW5kbGVzKHN3 cF9lbnRyeV90LCB1bnNpZ25lZCBsb25nICopOwpleHRlcm4gdm9pZCBzd2FwX2ZyZWUoc3dwX2Vu dHJ5X3QpOwpleHRlcm4gdm9pZCBmcmVlX3N3YXBfYW5kX2NhY2hlKHN3cF9lbnRyeV90KTsKc3Ry dWN0IHN3YXBfbGlzdF90IHsKICAgICAgICBpbnQgaGVhZDsKICAgICAgICBpbnQgbmV4dDsKfTsK ZXh0ZXJuIHN0cnVjdCBzd2FwX2xpc3RfdCBzd2FwX2xpc3Q7CiBfX2F0dHJpYnV0ZV9fKChyZWdw YXJtKDApKSkgbG9uZyBzeXNfc3dhcG9mZihjb25zdCBjaGFyICopOwogX19hdHRyaWJ1dGVfXygo cmVncGFybSgwKSkpIGxvbmcgc3lzX3N3YXBvbihjb25zdCBjaGFyICosIGludCk7CgpleHRlcm4g c3BpbmxvY2tfY2FjaGVsaW5lX3QgcGFnZW1hcF9scnVfbG9ja19jYWNoZWxpbmU7CgoKZXh0ZXJu IHZvaWQgbWFya19wYWdlX2FjY2Vzc2VkKHN0cnVjdCBwYWdlICopIF9fYXR0cmlidXRlX18oKHJl Z3Bhcm0oMykpKTsKIyAyMDggIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L3N3 YXAuaCIKZXh0ZXJuIHNwaW5sb2NrX3Qgc3dhcGxvY2s7CgoKCgoKCmV4dGVybiB2b2lkIHNobWVt X3VudXNlKHN3cF9lbnRyeV90IGVudHJ5LCBzdHJ1Y3QgcGFnZSAqcGFnZSk7CiMgMTQgIi91c3Iv c3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L21tLmgiIDIKCgpleHRlcm4gdW5zaWduZWQg bG9uZyBtYXhfbWFwbnI7CmV4dGVybiB1bnNpZ25lZCBsb25nIG51bV9waHlzcGFnZXM7CmV4dGVy biB1bnNpZ25lZCBsb25nIG51bV9tYXBwZWRwYWdlczsKZXh0ZXJuIHZvaWQgKiBoaWdoX21lbW9y eTsKZXh0ZXJuIGludCBwYWdlX2NsdXN0ZXI7CgpleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBhY3Rp dmVfbGlzdDsKZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgaW5hY3RpdmVfbGlzdDsKCgojIDEgIi91 c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgiIDEKIyAyNCAiL3Vzci9z cmMvbGludXgtMi40LjIwL2luY2x1ZGUvYXNtL3BndGFibGUuaCIKZXh0ZXJuIHBnZF90IHN3YXBw ZXJfcGdfZGlyWzEwMjRdOwpleHRlcm4gdm9pZCBwYWdpbmdfaW5pdCh2b2lkKTsKIyA2OCAiL3Vz ci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvYXNtL3BndGFibGUuaCIKZXh0ZXJuIHVuc2lnbmVk IGxvbmcgcGdrZXJuX21hc2s7CiMgMTA0ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9h c20vcGd0YWJsZS5oIgpleHRlcm4gdW5zaWduZWQgbG9uZyBlbXB0eV96ZXJvX3BhZ2VbMTAyNF07 CiMgMTI0ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9hc20vcGd0YWJsZS5oIgojIDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC5oIiAxCiMg MzIgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC5oIgpz dGF0aWMgaW5saW5lIGludCBwZ2Rfbm9uZShwZ2RfdCBwZ2QpIHsgcmV0dXJuIDA7IH0Kc3RhdGlj IGlubGluZSBpbnQgcGdkX2JhZChwZ2RfdCBwZ2QpIHsgcmV0dXJuIDA7IH0Kc3RhdGljIGlubGlu ZSBpbnQgcGdkX3ByZXNlbnQocGdkX3QgcGdkKSB7IHJldHVybiAxOyB9CiMgNTUgIi91c3Ivc3Jj L2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC5oIgpzdGF0aWMgaW5saW5l IHBtZF90ICogcG1kX29mZnNldChwZ2RfdCAqIGRpciwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQp7 CiAgICAgICAgcmV0dXJuIChwbWRfdCAqKSBkaXI7Cn0KIyAxMjUgIi91c3Ivc3JjL2xpbnV4LTIu NC4yMC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgiIDIKIyAyNjUgIi91c3Ivc3JjL2xpbnV4LTIuNC4y MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgiCmV4dGVybiB1bnNpZ25lZCBsb25nIHBnMFsxMDI0XTsK IyAyODIgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgiCnN0YXRp YyBpbmxpbmUgaW50IHB0ZV9yZWFkKHB0ZV90IHB0ZSkgeyByZXR1cm4gKHB0ZSkucHRlX2xvdyAm IDB4MDA0OyB9CnN0YXRpYyBpbmxpbmUgaW50IHB0ZV9leGVjKHB0ZV90IHB0ZSkgeyByZXR1cm4g KHB0ZSkucHRlX2xvdyAmIDB4MDA0OyB9CnN0YXRpYyBpbmxpbmUgaW50IHB0ZV9kaXJ0eShwdGVf dCBwdGUpIHsgcmV0dXJuIChwdGUpLnB0ZV9sb3cgJiAweDA0MDsgfQpzdGF0aWMgaW5saW5lIGlu dCBwdGVfeW91bmcocHRlX3QgcHRlKSB7IHJldHVybiAocHRlKS5wdGVfbG93ICYgMHgwMjA7IH0K c3RhdGljIGlubGluZSBpbnQgcHRlX3dyaXRlKHB0ZV90IHB0ZSkgeyByZXR1cm4gKHB0ZSkucHRl X2xvdyAmIDB4MDAyOyB9CgpzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9yZHByb3RlY3QocHRlX3Qg cHRlKSB7IChwdGUpLnB0ZV9sb3cgJj0gfjB4MDA0OyByZXR1cm4gcHRlOyB9CnN0YXRpYyBpbmxp bmUgcHRlX3QgcHRlX2V4cHJvdGVjdChwdGVfdCBwdGUpIHsgKHB0ZSkucHRlX2xvdyAmPSB+MHgw MDQ7IHJldHVybiBwdGU7IH0Kc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtjbGVhbihwdGVfdCBw dGUpIHsgKHB0ZSkucHRlX2xvdyAmPSB+MHgwNDA7IHJldHVybiBwdGU7IH0Kc3RhdGljIGlubGlu ZSBwdGVfdCBwdGVfbWtvbGQocHRlX3QgcHRlKSB7IChwdGUpLnB0ZV9sb3cgJj0gfjB4MDIwOyBy ZXR1cm4gcHRlOyB9CnN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX3dycHJvdGVjdChwdGVfdCBwdGUp IHsgKHB0ZSkucHRlX2xvdyAmPSB+MHgwMDI7IHJldHVybiBwdGU7IH0Kc3RhdGljIGlubGluZSBw dGVfdCBwdGVfbWtyZWFkKHB0ZV90IHB0ZSkgeyAocHRlKS5wdGVfbG93IHw9IDB4MDA0OyByZXR1 cm4gcHRlOyB9CnN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rZXhlYyhwdGVfdCBwdGUpIHsgKHB0 ZSkucHRlX2xvdyB8PSAweDAwNDsgcmV0dXJuIHB0ZTsgfQpzdGF0aWMgaW5saW5lIHB0ZV90IHB0 ZV9ta2RpcnR5KHB0ZV90IHB0ZSkgeyAocHRlKS5wdGVfbG93IHw9IDB4MDQwOyByZXR1cm4gcHRl OyB9CnN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21reW91bmcocHRlX3QgcHRlKSB7IChwdGUpLnB0 ZV9sb3cgfD0gMHgwMjA7IHJldHVybiBwdGU7IH0Kc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3 cml0ZShwdGVfdCBwdGUpIHsgKHB0ZSkucHRlX2xvdyB8PSAweDAwMjsgcmV0dXJuIHB0ZTsgfQoK c3RhdGljIGlubGluZSBpbnQgcHRlcF90ZXN0X2FuZF9jbGVhcl9kaXJ0eShwdGVfdCAqcHRlcCkg eyByZXR1cm4gdGVzdF9hbmRfY2xlYXJfYml0KDYsIHB0ZXApOyB9CnN0YXRpYyBpbmxpbmUgaW50 IHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcocHRlX3QgKnB0ZXApIHsgcmV0dXJuIHRlc3RfYW5k X2NsZWFyX2JpdCg1LCBwdGVwKTsgfQpzdGF0aWMgaW5saW5lIHZvaWQgcHRlcF9zZXRfd3Jwcm90 ZWN0KHB0ZV90ICpwdGVwKSB7IGNsZWFyX2JpdCgxLCBwdGVwKTsgfQpzdGF0aWMgaW5saW5lIHZv aWQgcHRlcF9ta2RpcnR5KHB0ZV90ICpwdGVwKSB7IHNldF9iaXQoNiwgcHRlcCk7IH0KIyAzMTQg Ii91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgiCnN0YXRpYyBpbmxp bmUgcHRlX3QgcHRlX21vZGlmeShwdGVfdCBwdGUsIHBncHJvdF90IG5ld3Byb3QpCnsKICAgICAg ICBwdGUucHRlX2xvdyAmPSAoKH4oKDFVTCA8PCAxMiktMSkpIHwgMHgwMjAgfCAweDA0MCk7CiAg ICAgICAgcHRlLnB0ZV9sb3cgfD0gKChuZXdwcm90KS5wZ3Byb3QpOwogICAgICAgIHJldHVybiBw dGU7Cn0KIyAzNTggIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgi CnN0cnVjdCBwYWdlOwppbnQgY2hhbmdlX3BhZ2VfYXR0cihzdHJ1Y3QgcGFnZSAqLCBpbnQsIHBn cHJvdF90IHByb3QpOwojIDI3ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9t bS5oIiAyCiMgNDQgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L21tLmgiCnN0 cnVjdCB2bV9hcmVhX3N0cnVjdCB7CiAgICAgICAgc3RydWN0IG1tX3N0cnVjdCAqIHZtX21tOwog ICAgICAgIHVuc2lnbmVkIGxvbmcgdm1fc3RhcnQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyB2bV9l bmQ7CgoKCiAgICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bV9uZXh0OwoKICAgICAgICBw Z3Byb3RfdCB2bV9wYWdlX3Byb3Q7CiAgICAgICAgdW5zaWduZWQgbG9uZyB2bV9mbGFnczsKCiAg ICAgICAgcmJfbm9kZV90IHZtX3JiOwoKCgoKCgogICAgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVj dCAqdm1fbmV4dF9zaGFyZTsKICAgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bV9wcHJl dl9zaGFyZTsKCgogICAgICAgIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCAqIHZtX29wczsK CgogICAgICAgIHVuc2lnbmVkIGxvbmcgdm1fcGdvZmY7CgogICAgICAgIHN0cnVjdCBmaWxlICog dm1fZmlsZTsKICAgICAgICB1bnNpZ25lZCBsb25nIHZtX3JhZW5kOwogICAgICAgIHZvaWQgKiB2 bV9wcml2YXRlX2RhdGE7Cn07CiMgMTE2ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9s aW51eC9tbS5oIgpleHRlcm4gaW50IHZtX21pbl9yZWFkYWhlYWQ7CmV4dGVybiBpbnQgdm1fbWF4 X3JlYWRhaGVhZDsKCgoKCgpleHRlcm4gcGdwcm90X3QgcHJvdGVjdGlvbl9tYXBbMTZdOwoKCgoK CgoKc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHsKICAgICAgICB2b2lkICgqb3Blbikoc3Ry dWN0IHZtX2FyZWFfc3RydWN0ICogYXJlYSk7CiAgICAgICAgdm9pZCAoKmNsb3NlKShzdHJ1Y3Qg dm1fYXJlYV9zdHJ1Y3QgKiBhcmVhKTsKICAgICAgICBzdHJ1Y3QgcGFnZSAqICgqbm9wYWdlKShz dHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiBhcmVhLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGludCB1 bnVzZWQpOwp9OwojIDE1MiAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvbW0u aCIKdHlwZWRlZiBzdHJ1Y3QgcGFnZSB7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBsaXN0Owog ICAgICAgIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOwogICAgICAgIHVuc2lnbmVkIGxv bmcgaW5kZXg7CiAgICAgICAgc3RydWN0IHBhZ2UgKm5leHRfaGFzaDsKCiAgICAgICAgYXRvbWlj X3QgY291bnQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKCiAgICAgICAgc3RydWN0IGxp c3RfaGVhZCBscnU7CgogICAgICAgIHN0cnVjdCBwYWdlICoqcHByZXZfaGFzaDsKICAgICAgICBz dHJ1Y3QgYnVmZmVyX2hlYWQgKiBidWZmZXJzOwojIDE4MCAiL3Vzci9zcmMvbGludXgtMi40LjIw L2luY2x1ZGUvbGludXgvbW0uaCIKfSBtZW1fbWFwX3Q7CiMgMzMwICIvdXNyL3NyYy9saW51eC0y LjQuMjAvaW5jbHVkZS9saW51eC9tbS5oIgpzdHJ1Y3Qgem9uZV9zdHJ1Y3Q7CmV4dGVybiBzdHJ1 Y3Qgem9uZV9zdHJ1Y3QgKnpvbmVfdGFibGVbXTsKCnN0YXRpYyBpbmxpbmUgem9uZV90ICpwYWdl X3pvbmUoc3RydWN0IHBhZ2UgKnBhZ2UpCnsKICAgICAgICByZXR1cm4gem9uZV90YWJsZVtwYWdl LT5mbGFncyA+PiAoMzIgLSA4KV07Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV96b25l KHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHpvbmVfbnVtKQp7CiAgICAgICAgcGFn ZS0+ZmxhZ3MgJj0gfih+MFVMIDw8ICgzMiAtIDgpKTsKICAgICAgICBwYWdlLT5mbGFncyB8PSB6 b25lX251bSA8PCAoMzIgLSA4KTsKfQojIDM3NyAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1 ZGUvbGludXgvbW0uaCIKZXh0ZXJuIHZvaWQgc2V0X3BhZ2VfZGlydHkoc3RydWN0IHBhZ2UgKikg X19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkpOwojIDQyNyAiL3Vzci9zcmMvbGludXgtMi40LjIw L2luY2x1ZGUvbGludXgvbW0uaCIKZXh0ZXJuIG1lbV9tYXBfdCAqIG1lbV9tYXA7CgoKCgoKCgpl eHRlcm4gc3RydWN0IHBhZ2UgKiBfYWxsb2NfcGFnZXModW5zaWduZWQgaW50IGdmcF9tYXNrLCB1 bnNpZ25lZCBpbnQgb3JkZXIpIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKZXh0ZXJuIHN0 cnVjdCBwYWdlICogX19hbGxvY19wYWdlcyh1bnNpZ25lZCBpbnQgZ2ZwX21hc2ssIHVuc2lnbmVk IGludCBvcmRlciwgem9uZWxpc3RfdCAqem9uZWxpc3QpIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0o MykpKTsKZXh0ZXJuIHN0cnVjdCBwYWdlICogYWxsb2NfcGFnZXNfbm9kZShpbnQgbmlkLCB1bnNp Z25lZCBpbnQgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcik7CgpzdGF0aWMgaW5saW5lIHN0 cnVjdCBwYWdlICogYWxsb2NfcGFnZXModW5zaWduZWQgaW50IGdmcF9tYXNrLCB1bnNpZ25lZCBp bnQgb3JkZXIpCnsKCgoKICAgICAgICBpZiAob3JkZXIgPj0gMTApCiAgICAgICAgICAgICAgICBy ZXR1cm4gKCh2b2lkICopMCk7CiAgICAgICAgcmV0dXJuIF9hbGxvY19wYWdlcyhnZnBfbWFzaywg b3JkZXIpOwp9CgoKCmV4dGVybiB1bnNpZ25lZCBsb25nIF9fZ2V0X2ZyZWVfcGFnZXModW5zaWdu ZWQgaW50IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpIF9fYXR0cmlidXRlX18oKHJlZ3Bh cm0oMykpKTsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZ2V0X3plcm9lZF9wYWdlKHVuc2lnbmVkIGlu dCBnZnBfbWFzaykgX19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkpOwojIDQ2OCAiL3Vzci9zcmMv bGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvbW0uaCIKZXh0ZXJuIHZvaWQgX19mcmVlX3BhZ2Vz KHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpIF9fYXR0cmlidXRlX18oKHJl Z3Bhcm0oMykpKTsKZXh0ZXJuIHZvaWQgZnJlZV9wYWdlcyh1bnNpZ25lZCBsb25nIGFkZHIsIHVu c2lnbmVkIGludCBvcmRlcikgX19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkpOwoKCgoKZXh0ZXJu IHZvaWQgc2hvd19mcmVlX2FyZWFzKHZvaWQpOwpleHRlcm4gdm9pZCBzaG93X2ZyZWVfYXJlYXNf bm9kZShwZ19kYXRhX3QgKnBnZGF0KTsKCmV4dGVybiB2b2lkIGNsZWFyX3BhZ2VfdGFibGVzKHN0 cnVjdCBtbV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgaW50KTsKCmV4dGVybiBpbnQgZmFpbF93 cml0ZXBhZ2Uoc3RydWN0IHBhZ2UgKik7CnN0cnVjdCBwYWdlICogc2htZW1fbm9wYWdlKHN0cnVj dCB2bV9hcmVhX3N0cnVjdCAqIHZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBpbnQgdW51c2Vk KTsKc3RydWN0IGZpbGUgKnNobWVtX2ZpbGVfc2V0dXAoY2hhciAqIG5hbWUsIGxvZmZfdCBzaXpl KTsKZXh0ZXJuIHZvaWQgc2htZW1fbG9jayhzdHJ1Y3QgZmlsZSAqIGZpbGUsIGludCBsb2NrKTsK ZXh0ZXJuIGludCBzaG1lbV96ZXJvX3NldHVwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTsKCmV4 dGVybiB2b2lkIHphcF9wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBs b25nIGFkZHJlc3MsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CmV4dGVybiBpbnQgY29weV9wYWdlX3Jh bmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdCwgc3RydWN0IG1tX3N0cnVjdCAqc3JjLCBzdHJ1Y3Qg dm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CmV4dGVybiBpbnQgcmVtYXBfcGFnZV9yYW5nZSh1bnNpZ25l ZCBsb25nIGZyb20sIHVuc2lnbmVkIGxvbmcgdG8sIHVuc2lnbmVkIGxvbmcgc2l6ZSwgcGdwcm90 X3QgcHJvdCk7CmV4dGVybiBpbnQgemVyb21hcF9wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgZnJv bSwgdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCBwcm90KTsKCmV4dGVybiBpbnQgdm10cnVu Y2F0ZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgbG9mZl90IG9mZnNldCk7CmV4dGVybiBwbWRfdCAq X19wbWRfYWxsb2Moc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxv bmcgYWRkcmVzcykgX19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkpOwpleHRlcm4gcHRlX3QgKnB0 ZV9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBh ZGRyZXNzKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CmV4dGVybiBpbnQgaGFuZGxlX21t X2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1 bnNpZ25lZCBsb25nIGFkZHJlc3MsIGludCB3cml0ZV9hY2Nlc3MpOwpleHRlcm4gaW50IG1ha2Vf cGFnZXNfcHJlc2VudCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kKTsKZXh0 ZXJuIGludCBhY2Nlc3NfcHJvY2Vzc192bShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5zaWdu ZWQgbG9uZyBhZGRyLCB2b2lkICpidWYsIGludCBsZW4sIGludCB3cml0ZSk7CmV4dGVybiBpbnQg cHRyYWNlX3JlYWRkYXRhKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIHNy YywgY2hhciAqZHN0LCBpbnQgbGVuKTsKZXh0ZXJuIGludCBwdHJhY2Vfd3JpdGVkYXRhKHN0cnVj dCB0YXNrX3N0cnVjdCAqdHNrLCBjaGFyICogc3JjLCB1bnNpZ25lZCBsb25nIGRzdCwgaW50IGxl bik7CmV4dGVybiBpbnQgcHRyYWNlX2F0dGFjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CmV4 dGVybiBpbnQgcHRyYWNlX2RldGFjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgdW5zaWduZWQgaW50 KTsKZXh0ZXJuIHZvaWQgcHRyYWNlX2Rpc2FibGUoc3RydWN0IHRhc2tfc3RydWN0ICopOwpleHRl cm4gaW50IHB0cmFjZV9jaGVja19hdHRhY2goc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQg a2lsbCk7CgppbnQgZ2V0X3VzZXJfcGFnZXMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVj dCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAogICAgICAgICAgICAgICAgaW50 IGxlbiwgaW50IHdyaXRlLCBpbnQgZm9yY2UsIHN0cnVjdCBwYWdlICoqcGFnZXMsIHN0cnVjdCB2 bV9hcmVhX3N0cnVjdCAqKnZtYXMpOwoKCgoKCgpzdGF0aWMgaW5saW5lIHBtZF90ICpwbWRfYWxs b2Moc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcmVz cykKewogICAgICAgIGlmIChwZ2Rfbm9uZSgqcGdkKSkKICAgICAgICAgICAgICAgIHJldHVybiBf X3BtZF9hbGxvYyhtbSwgcGdkLCBhZGRyZXNzKTsKICAgICAgICByZXR1cm4gcG1kX29mZnNldChw Z2QsIGFkZHJlc3MpOwp9CgpleHRlcm4gaW50IHBndF9jYWNoZV93YXRlclsyXTsKZXh0ZXJuIGlu dCBjaGVja19wZ3RfY2FjaGUodm9pZCk7CgpleHRlcm4gdm9pZCBmcmVlX2FyZWFfaW5pdCh1bnNp Z25lZCBsb25nICogem9uZXNfc2l6ZSk7CmV4dGVybiB2b2lkIGZyZWVfYXJlYV9pbml0X25vZGUo aW50IG5pZCwgcGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHBhZ2UgKnBtYXAsCiAgICAgICAgdW5z aWduZWQgbG9uZyAqIHpvbmVzX3NpemUsIHVuc2lnbmVkIGxvbmcgem9uZV9zdGFydF9wYWRkciwK ICAgICAgICB1bnNpZ25lZCBsb25nICp6aG9sZXNfc2l6ZSk7CmV4dGVybiB2b2lkIG1lbV9pbml0 KHZvaWQpOwpleHRlcm4gdm9pZCBzaG93X21lbSh2b2lkKTsKZXh0ZXJuIHZvaWQgc2lfbWVtaW5m byhzdHJ1Y3Qgc3lzaW5mbyAqIHZhbCk7CmV4dGVybiB2b2lkIHN3YXBpbl9yZWFkYWhlYWQoc3dw X2VudHJ5X3QpOwoKZXh0ZXJuIHN0cnVjdCBhZGRyZXNzX3NwYWNlIHN3YXBwZXJfc3BhY2U7CgoK c3RhdGljIGlubGluZSBpbnQgaXNfcGFnZV9jYWNoZV9mcmVlYWJsZShzdHJ1Y3QgcGFnZSAqIHBh Z2UpCnsKICAgICAgICByZXR1cm4gKCgmKHBhZ2UpLT5jb3VudCktPmNvdW50ZXIpIC0gISFwYWdl LT5idWZmZXJzID09IDE7Cn0KCmV4dGVybiBpbnQgY2FuX3NoYXJlX3N3YXBfcGFnZShzdHJ1Y3Qg cGFnZSAqKTsKZXh0ZXJuIGludCByZW1vdmVfZXhjbHVzaXZlX3N3YXBfcGFnZShzdHJ1Y3QgcGFn ZSAqKTsKCmV4dGVybiB2b2lkIF9fZnJlZV9wdGUocHRlX3QpOwoKCmV4dGVybiB2b2lkIGxvY2tf dm1hX21hcHBpbmdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTsKZXh0ZXJuIHZvaWQgdW5sb2Nr X3ZtYV9tYXBwaW5ncyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7CmV4dGVybiB2b2lkIGluc2Vy dF92bV9zdHJ1Y3Qoc3RydWN0IG1tX3N0cnVjdCAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7 CmV4dGVybiB2b2lkIF9faW5zZXJ0X3ZtX3N0cnVjdChzdHJ1Y3QgbW1fc3RydWN0ICosIHN0cnVj dCB2bV9hcmVhX3N0cnVjdCAqKTsKZXh0ZXJuIHZvaWQgYnVpbGRfbW1hcF9yYihzdHJ1Y3QgbW1f c3RydWN0ICopOwpleHRlcm4gdm9pZCBleGl0X21tYXAoc3RydWN0IG1tX3N0cnVjdCAqKTsKCmV4 dGVybiB1bnNpZ25lZCBsb25nIGdldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICosIHVuc2ln bmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwoK ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZG9fbW1hcF9wZ29mZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5z aWduZWQgbG9uZyBhZGRyLAogICAgICAgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25n IHByb3QsCiAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnLCB1bnNpZ25lZCBsb25nIHBnb2ZmKTsK CnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkb19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCB1 bnNpZ25lZCBsb25nIGFkZHIsCiAgICAgICAgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxv bmcgcHJvdCwKICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWcsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0 KQp7CiAgICAgICAgdW5zaWduZWQgbG9uZyByZXQgPSAtMjI7CiAgICAgICAgaWYgKChvZmZzZXQg KyAoKChsZW4pKygxVUwgPDwgMTIpLTEpJih+KCgxVUwgPDwgMTIpLTEpKSkpIDwgb2Zmc2V0KQog ICAgICAgICAgICAgICAgZ290byBvdXQ7CiAgICAgICAgaWYgKCEob2Zmc2V0ICYgfih+KCgxVUwg PDwgMTIpLTEpKSkpCiAgICAgICAgICAgICAgICByZXQgPSBkb19tbWFwX3Bnb2ZmKGZpbGUsIGFk ZHIsIGxlbiwgcHJvdCwgZmxhZywgb2Zmc2V0ID4+IDEyKTsKb3V0OgogICAgICAgIHJldHVybiBy ZXQ7Cn0KCmV4dGVybiBpbnQgZG9fbXVubWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKiwgdW5zaWduZWQg bG9uZywgc2l6ZV90KTsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGRvX2Jyayh1bnNpZ25lZCBsb25n LCB1bnNpZ25lZCBsb25nKTsKCnN0YXRpYyBpbmxpbmUgdm9pZCBfX3ZtYV91bmxpbmsoc3RydWN0 IG1tX3N0cnVjdCAqIG1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEsIHN0cnVjdCB2bV9h cmVhX3N0cnVjdCAqIHByZXYpCnsKICAgICAgICBwcmV2LT52bV9uZXh0ID0gdm1hLT52bV9uZXh0 OwogICAgICAgIHJiX2VyYXNlKCZ2bWEtPnZtX3JiLCAmbW0tPm1tX3JiKTsKICAgICAgICBpZiAo bW0tPm1tYXBfY2FjaGUgPT0gdm1hKQogICAgICAgICAgICAgICAgbW0tPm1tYXBfY2FjaGUgPSBw cmV2Owp9CgpzdGF0aWMgaW5saW5lIGludCBjYW5fdm1hX21lcmdlKHN0cnVjdCB2bV9hcmVhX3N0 cnVjdCAqIHZtYSwgdW5zaWduZWQgbG9uZyB2bV9mbGFncykKewogICAgICAgIGlmICghdm1hLT52 bV9maWxlICYmIHZtYS0+dm1fZmxhZ3MgPT0gdm1fZmxhZ3MpCiAgICAgICAgICAgICAgICByZXR1 cm4gMTsKICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICByZXR1cm4gMDsKfQoKc3RydWN0IHpv bmVfdDsKCmV4dGVybiB2b2lkIHJlbW92ZV9pbm9kZV9wYWdlKHN0cnVjdCBwYWdlICopOwpleHRl cm4gdW5zaWduZWQgbG9uZyBwYWdlX3VudXNlKHN0cnVjdCBwYWdlICopOwpleHRlcm4gdm9pZCB0 cnVuY2F0ZV9pbm9kZV9wYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqLCBsb2ZmX3QpOwoKCmV4 dGVybiBpbnQgZmlsZW1hcF9zeW5jKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBs b25nLCBzaXplX3QsIHVuc2lnbmVkIGludCk7CmV4dGVybiBzdHJ1Y3QgcGFnZSAqZmlsZW1hcF9u b3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsIGludCk7CiMgNjMx ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9tbS5oIgpzdGF0aWMgaW5saW5l IHVuc2lnbmVkIGludCBwZl9nZnBfbWFzayh1bnNpZ25lZCBpbnQgZ2ZwX21hc2spCnsKCiAgICAg ICAgaWYgKGdldF9jdXJyZW50KCktPmZsYWdzICYgMHgwMDAwNDAwMCkKICAgICAgICAgICAgICAg IGdmcF9tYXNrICY9IH4oMHg0MCB8IDB4ODAgfCAweDEwMCk7CgogICAgICAgIHJldHVybiBnZnBf bWFzazsKfQoKCgpzdGF0aWMgaW5saW5lIGludCBleHBhbmRfc3RhY2soc3RydWN0IHZtX2FyZWFf c3RydWN0ICogdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCnsKICAgICAgICB1bnNpZ25lZCBs b25nIGdyb3c7CgoKCgoKCiAgICAgICAgYWRkcmVzcyAmPSAofigoMVVMIDw8IDEyKS0xKSk7CiAg ICAgICAgc3Bpbl9sb2NrKCZ2bWEtPnZtX21tLT5wYWdlX3RhYmxlX2xvY2spOwogICAgICAgIGdy b3cgPSAodm1hLT52bV9zdGFydCAtIGFkZHJlc3MpID4+IDEyOwogICAgICAgIGlmICh2bWEtPnZt X2VuZCAtIGFkZHJlc3MgPiBnZXRfY3VycmVudCgpLT5ybGltWzNdLnJsaW1fY3VyIHx8CiAgICAg ICAgICAgICgodm1hLT52bV9tbS0+dG90YWxfdm0gKyBncm93KSA8PCAxMikgPiBnZXRfY3VycmVu dCgpLT5ybGltWzldLnJsaW1fY3VyKSB7CiAgICAgICAgICAgICAgICBzcGluX3VubG9jaygmdm1h LT52bV9tbS0+cGFnZV90YWJsZV9sb2NrKTsKICAgICAgICAgICAgICAgIHJldHVybiAtMTI7CiAg ICAgICAgfQogICAgICAgIHZtYS0+dm1fc3RhcnQgPSBhZGRyZXNzOwogICAgICAgIHZtYS0+dm1f cGdvZmYgLT0gZ3JvdzsKICAgICAgICB2bWEtPnZtX21tLT50b3RhbF92bSArPSBncm93OwogICAg ICAgIGlmICh2bWEtPnZtX2ZsYWdzICYgMHgwMDAwMjAwMCkKICAgICAgICAgICAgICAgIHZtYS0+ dm1fbW0tPmxvY2tlZF92bSArPSBncm93OwogICAgICAgIHNwaW5fdW5sb2NrKCZ2bWEtPnZtX21t LT5wYWdlX3RhYmxlX2xvY2spOwogICAgICAgIHJldHVybiAwOwp9CgoKZXh0ZXJuIHN0cnVjdCB2 bV9hcmVhX3N0cnVjdCAqIGZpbmRfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKiBtbSwgdW5zaWduZWQg bG9uZyBhZGRyKTsKZXh0ZXJuIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIGZpbmRfdm1hX3ByZXYo c3RydWN0IG1tX3N0cnVjdCAqIG1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnBw cmV2KTsKCgoKc3RhdGljIGlubGluZSBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiBmaW5kX3ZtYV9p bnRlcnNlY3Rpb24oc3RydWN0IG1tX3N0cnVjdCAqIG1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0X2Fk ZHIsIHVuc2lnbmVkIGxvbmcgZW5kX2FkZHIpCnsKICAgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1 Y3QgKiB2bWEgPSBmaW5kX3ZtYShtbSxzdGFydF9hZGRyKTsKCiAgICAgICAgaWYgKHZtYSAmJiBl bmRfYWRkciA8PSB2bWEtPnZtX3N0YXJ0KQogICAgICAgICAgICAgICAgdm1hID0gKCh2b2lkICop MCk7CiAgICAgICAgcmV0dXJuIHZtYTsKfQoKZXh0ZXJuIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAq ZmluZF9leHRlbmRfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIp OwoKZXh0ZXJuIHN0cnVjdCBwYWdlICogdm1hbGxvY190b19wYWdlKHZvaWQgKmFkZHIpOwojIDI0 ICJzY2hlZC5jIiAyCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L3Nt cF9sb2NrLmgiIDEKIyAxNiAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvc21w X2xvY2suaCIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9hc20vc21wbG9jay5o IiAxCiMgOSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvYXNtL3NtcGxvY2suaCIKIyAx ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaCIgMQojIDE1 ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaCIKc3RydWN0 IGlycWFjdGlvbiB7CiAgICAgICAgdm9pZCAoKmhhbmRsZXIpKGludCwgdm9pZCAqLCBzdHJ1Y3Qg cHRfcmVncyAqKTsKICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogICAgICAgIHVuc2lnbmVk IGxvbmcgbWFzazsKICAgICAgICBjb25zdCBjaGFyICpuYW1lOwogICAgICAgIHZvaWQgKmRldl9p ZDsKICAgICAgICBzdHJ1Y3QgaXJxYWN0aW9uICpuZXh0Owp9OwoKCgoKCmVudW0gewogICAgICAg IFRJTUVSX0JIID0gMCwKICAgICAgICBUUVVFVUVfQkgsCiAgICAgICAgRElHSV9CSCwKICAgICAg ICBTRVJJQUxfQkgsCiAgICAgICAgUklTQ09NOF9CSCwKICAgICAgICBTUEVDSUFMSVhfQkgsCiAg ICAgICAgQVVST1JBX0JILAogICAgICAgIEVTUF9CSCwKICAgICAgICBTQ1NJX0JILAogICAgICAg IElNTUVESUFURV9CSCwKICAgICAgICBDWUNMQURFU19CSCwKICAgICAgICBDTTIwNl9CSCwKICAg ICAgICBKU19CSCwKICAgICAgICBNQUNTRVJJQUxfQkgsCiAgICAgICAgSVNJQ09NX0JICn07Cgoj IDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS9oYXJkaXJxLmgiIDEKCgoKCgoj IDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L2lycS5oIiAxCiMgMTkgIi91 c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L2lycS5oIgojIDEgIi91c3Ivc3JjL2xp bnV4LTIuNC4yMC9pbmNsdWRlL2FzbS9pcnEuaCIgMQojIDMyICIvdXNyL3NyYy9saW51eC0yLjQu MjAvaW5jbHVkZS9hc20vaXJxLmgiCnN0YXRpYyBfX2lubGluZV9fIGludCBpcnFfY2Fubm9uaWNh bGl6ZShpbnQgaXJxKQp7CiAgICAgICAgcmV0dXJuICgoaXJxID09IDIpID8gOSA6IGlycSk7Cn0K CmV4dGVybiB2b2lkIGRpc2FibGVfaXJxKHVuc2lnbmVkIGludCk7CmV4dGVybiB2b2lkIGRpc2Fi bGVfaXJxX25vc3luYyh1bnNpZ25lZCBpbnQpOwpleHRlcm4gdm9pZCBlbmFibGVfaXJxKHVuc2ln bmVkIGludCk7CmV4dGVybiB2b2lkIHJlbGVhc2VfeDg2X2lycXMoc3RydWN0IHRhc2tfc3RydWN0 ICopOwojIDIwICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9pcnEuaCIgMgoj IDM5ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9pcnEuaCIKc3RydWN0IGh3 X2ludGVycnVwdF90eXBlIHsKICAgICAgICBjb25zdCBjaGFyICogdHlwZW5hbWU7CiAgICAgICAg dW5zaWduZWQgaW50ICgqc3RhcnR1cCkodW5zaWduZWQgaW50IGlycSk7CiAgICAgICAgdm9pZCAo KnNodXRkb3duKSh1bnNpZ25lZCBpbnQgaXJxKTsKICAgICAgICB2b2lkICgqZW5hYmxlKSh1bnNp Z25lZCBpbnQgaXJxKTsKICAgICAgICB2b2lkICgqZGlzYWJsZSkodW5zaWduZWQgaW50IGlycSk7 CiAgICAgICAgdm9pZCAoKmFjaykodW5zaWduZWQgaW50IGlycSk7CiAgICAgICAgdm9pZCAoKmVu ZCkodW5zaWduZWQgaW50IGlycSk7CiAgICAgICAgdm9pZCAoKnNldF9hZmZpbml0eSkodW5zaWdu ZWQgaW50IGlycSwgdW5zaWduZWQgbG9uZyBtYXNrKTsKfTsKCnR5cGVkZWYgc3RydWN0IGh3X2lu dGVycnVwdF90eXBlIGh3X2lycV9jb250cm9sbGVyOwojIDU5ICIvdXNyL3NyYy9saW51eC0yLjQu MjAvaW5jbHVkZS9saW51eC9pcnEuaCIKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIHVuc2lnbmVk IGludCBzdGF0dXM7CiAgICAgICAgaHdfaXJxX2NvbnRyb2xsZXIgKmhhbmRsZXI7CiAgICAgICAg c3RydWN0IGlycWFjdGlvbiAqYWN0aW9uOwogICAgICAgIHVuc2lnbmVkIGludCBkZXB0aDsKICAg ICAgICBzcGlubG9ja190IGxvY2s7Cn0gX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oKDEgPDwg KCg1KSkpKSkpIGlycV9kZXNjX3Q7CgpleHRlcm4gaXJxX2Rlc2NfdCBpcnFfZGVzYyBbMjI0XTsK CiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvYXNtL2h3X2lycS5oIiAxCiMgNjEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS9od19pcnEuaCIKZXh0ZXJuIGludCBp cnFfdmVjdG9yWzIyNF07CiMgNzEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS9o d19pcnEuaCIKZXh0ZXJuIHZvaWQgbWFza19pcnEodW5zaWduZWQgaW50IGlycSk7CmV4dGVybiB2 b2lkIHVubWFza19pcnEodW5zaWduZWQgaW50IGlycSk7CmV4dGVybiB2b2lkIGRpc2FibGVfODI1 OUFfaXJxKHVuc2lnbmVkIGludCBpcnEpOwpleHRlcm4gdm9pZCBlbmFibGVfODI1OUFfaXJxKHVu c2lnbmVkIGludCBpcnEpOwpleHRlcm4gaW50IGk4MjU5QV9pcnFfcGVuZGluZyh1bnNpZ25lZCBp bnQgaXJxKTsKZXh0ZXJuIHZvaWQgbWFrZV84MjU5QV9pcnEodW5zaWduZWQgaW50IGlycSk7CmV4 dGVybiB2b2lkIGluaXRfODI1OUEoaW50IGFlb2kpOwpleHRlcm4gdm9pZCBzZW5kX0lQSV9zZWxm KGludCB2ZWN0b3IpIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKZXh0ZXJuIHZvaWQgaW5p dF9WSVNXU19BUElDX2lycXModm9pZCk7CmV4dGVybiB2b2lkIHNldHVwX0lPX0FQSUModm9pZCk7 CmV4dGVybiB2b2lkIGRpc2FibGVfSU9fQVBJQyh2b2lkKTsKZXh0ZXJuIHZvaWQgcHJpbnRfSU9f QVBJQyh2b2lkKTsKZXh0ZXJuIGludCBJT19BUElDX2dldF9QQ0lfaXJxX3ZlY3RvcihpbnQgYnVz LCBpbnQgc2xvdCwgaW50IGZuKTsKZXh0ZXJuIHZvaWQgc2VuZF9JUEkoaW50IGRlc3QsIGludCB2 ZWN0b3IpOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW9fYXBpY19pcnFzOwoKZXh0ZXJuIGF0b21p Y190IGlycV9lcnJfY291bnQ7CmV4dGVybiBhdG9taWNfdCBpcnFfbWlzX2NvdW50OwoKZXh0ZXJu IGNoYXIgX3N0ZXh0LCBfZXRleHQ7CiMgMTgzICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVk ZS9hc20vaHdfaXJxLmgiCmV4dGVybiB1bnNpZ25lZCBsb25nIHByb2ZfY3B1X21hc2s7CmV4dGVy biB1bnNpZ25lZCBpbnQgKiBwcm9mX2J1ZmZlcjsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcHJvZl9s ZW47CmV4dGVybiB1bnNpZ25lZCBsb25nIHByb2Zfc2hpZnQ7CgoKCgoKc3RhdGljIGlubGluZSB2 b2lkIHg4Nl9kb19wcm9maWxlICh1bnNpZ25lZCBsb25nIGVpcCkKewogICAgICAgIGlmICghcHJv Zl9idWZmZXIpCiAgICAgICAgICAgICAgICByZXR1cm47CgoKCgoKICAgICAgICBpZiAoISgoMTw8 KGdldF9jdXJyZW50KCktPnByb2Nlc3NvcikpICYgcHJvZl9jcHVfbWFzaykpCiAgICAgICAgICAg ICAgICByZXR1cm47CgogICAgICAgIGVpcCAtPSAodW5zaWduZWQgbG9uZykgJl9zdGV4dDsKICAg ICAgICBlaXAgPj49IHByb2Zfc2hpZnQ7CgoKCgoKICAgICAgICBpZiAoZWlwID4gcHJvZl9sZW4t MSkKICAgICAgICAgICAgICAgIGVpcCA9IHByb2ZfbGVuLTE7CiAgICAgICAgYXRvbWljX2luYygo YXRvbWljX3QgKikmcHJvZl9idWZmZXJbZWlwXSk7Cn0KCgpzdGF0aWMgaW5saW5lIHZvaWQgaHdf cmVzZW5kX2lycShzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgKmgsIHVuc2lnbmVkIGludCBpKSB7 CiAgICAgICAgaWYgKCgoKGkpID49IDE2KSB8fCAoKDE8PChpKSkgJiBpb19hcGljX2lycXMpKSkK ICAgICAgICAgICAgICAgIHNlbmRfSVBJX3NlbGYoaXJxX3ZlY3RvcltpXSk7Cn0KIyA3MCAiL3Vz ci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvaXJxLmgiIDIKCmV4dGVybiBpbnQgaGFu ZGxlX0lSUV9ldmVudCh1bnNpZ25lZCBpbnQsIHN0cnVjdCBwdF9yZWdzICosIHN0cnVjdCBpcnFh Y3Rpb24gKik7CmV4dGVybiBpbnQgc2V0dXBfaXJxKHVuc2lnbmVkIGludCAsIHN0cnVjdCBpcnFh Y3Rpb24gKiApOwoKZXh0ZXJuIGh3X2lycV9jb250cm9sbGVyIG5vX2lycV90eXBlOwpleHRlcm4g dm9pZCBub19hY3Rpb24oaW50IGNwbCwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVn cyk7CiMgNyAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvYXNtL2hhcmRpcnEuaCIgMgoK CnR5cGVkZWYgc3RydWN0IHsKICAgICAgICB1bnNpZ25lZCBpbnQgX19zb2Z0aXJxX3BlbmRpbmc7 CiAgICAgICAgdW5zaWduZWQgaW50IF9fbG9jYWxfaXJxX2NvdW50OwogICAgICAgIHVuc2lnbmVk IGludCBfX2xvY2FsX2JoX2NvdW50OwogICAgICAgIHVuc2lnbmVkIGludCBfX3N5c2NhbGxfY291 bnQ7CiAgICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICogX19rc29mdGlycWRfdGFzazsKICAgICAg ICB1bnNpZ25lZCBpbnQgX19ubWlfY291bnQ7Cn0gX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18o KDEgPDwgKCg1KSkpKSkpIGlycV9jcHVzdGF0X3Q7CgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4y MC9pbmNsdWRlL2xpbnV4L2lycV9jcHVzdGF0LmgiIDEKIyAyMCAiL3Vzci9zcmMvbGludXgtMi40 LjIwL2luY2x1ZGUvbGludXgvaXJxX2NwdXN0YXQuaCIKZXh0ZXJuIGlycV9jcHVzdGF0X3QgaXJx X3N0YXRbXTsKIyAxOSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvYXNtL2hhcmRpcnEu aCIgMgojIDQ0ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9hc20vaGFyZGlycS5oIgpl eHRlcm4gdW5zaWduZWQgY2hhciBnbG9iYWxfaXJxX2hvbGRlcjsKZXh0ZXJuIHVuc2lnbmVkIHZv bGF0aWxlIGxvbmcgZ2xvYmFsX2lycV9sb2NrOwoKc3RhdGljIGlubGluZSBpbnQgaXJxc19ydW5u aW5nICh2b2lkKQp7CiAgICAgICAgaW50IGk7CgogICAgICAgIGZvciAoaSA9IDA7IGkgPCBzbXBf bnVtX2NwdXM7IGkrKykKICAgICAgICAgICAgICAgIGlmICgoaXJxX3N0YXRbKGkpXS5fX2xvY2Fs X2lycV9jb3VudCkpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgIHJl dHVybiAwOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgcmVsZWFzZV9pcnFsb2NrKGludCBjcHUpCnsK CiAgICAgICAgaWYgKGdsb2JhbF9pcnFfaG9sZGVyID09ICh1bnNpZ25lZCBjaGFyKSBjcHUpIHsK ICAgICAgICAgICAgICAgIGdsb2JhbF9pcnFfaG9sZGVyID0gMHhGRjsKICAgICAgICAgICAgICAg IGNsZWFyX2JpdCgwLCZnbG9iYWxfaXJxX2xvY2spOwogICAgICAgIH0KfQoKc3RhdGljIGlubGlu ZSB2b2lkIGlycV9lbnRlcihpbnQgY3B1LCBpbnQgaXJxKQp7CiAgICAgICAgKysoaXJxX3N0YXRb KGNwdSldLl9fbG9jYWxfaXJxX2NvdW50KTsKCiAgICAgICAgd2hpbGUgKChfX2J1aWx0aW5fY29u c3RhbnRfcCgwKSA/IGNvbnN0YW50X3Rlc3RfYml0KCgwKSwoJmdsb2JhbF9pcnFfbG9jaykpIDog dmFyaWFibGVfdGVzdF9iaXQoKDApLCgmZ2xvYmFsX2lycV9sb2NrKSkpKSB7CiAgICAgICAgICAg ICAgICByZXBfbm9wKCk7CiAgICAgICAgfQp9CgpzdGF0aWMgaW5saW5lIHZvaWQgaXJxX2V4aXQo aW50IGNwdSwgaW50IGlycSkKewogICAgICAgIC0tKGlycV9zdGF0WyhjcHUpXS5fX2xvY2FsX2ly cV9jb3VudCk7Cn0KCnN0YXRpYyBpbmxpbmUgaW50IGhhcmRpcnFfdHJ5bG9jayhpbnQgY3B1KQp7 CiAgICAgICAgcmV0dXJuICEoaXJxX3N0YXRbKGNwdSldLl9fbG9jYWxfaXJxX2NvdW50KSAmJiAh KF9fYnVpbHRpbl9jb25zdGFudF9wKDApID8gY29uc3RhbnRfdGVzdF9iaXQoKDApLCgmZ2xvYmFs X2lycV9sb2NrKSkgOiB2YXJpYWJsZV90ZXN0X2JpdCgoMCksKCZnbG9iYWxfaXJxX2xvY2spKSk7 Cn0KCgoKZXh0ZXJuIHZvaWQgc3luY2hyb25pemVfaXJxKHZvaWQpOwojIDQ3ICIvdXNyL3NyYy9s aW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaCIgMgojIDEgIi91c3Ivc3JjL2xp bnV4LTIuNC4yMC9pbmNsdWRlL2FzbS9zb2Z0aXJxLmgiIDEKIyA0OCAiL3Vzci9zcmMvbGludXgt Mi40LjIwL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgiIDIKIyA1NyAiL3Vzci9zcmMvbGludXgt Mi40LjIwL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgiCmVudW0KewogICAgICAgIEhJX1NPRlRJ UlE9MCwKICAgICAgICBORVRfVFhfU09GVElSUSwKICAgICAgICBORVRfUlhfU09GVElSUSwKICAg ICAgICBUQVNLTEVUX1NPRlRJUlEKfTsKCgoKCgpzdHJ1Y3Qgc29mdGlycV9hY3Rpb24KewogICAg ICAgIHZvaWQgKCphY3Rpb24pKHN0cnVjdCBzb2Z0aXJxX2FjdGlvbiAqKTsKICAgICAgICB2b2lk ICpkYXRhOwp9OwoKIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMCkpKSB2b2lkIGRvX3NvZnRpcnEo dm9pZCk7CmV4dGVybiB2b2lkIG9wZW5fc29mdGlycShpbnQgbnIsIHZvaWQgKCphY3Rpb24pKHN0 cnVjdCBzb2Z0aXJxX2FjdGlvbiopLCB2b2lkICpkYXRhKTsKZXh0ZXJuIHZvaWQgc29mdGlycV9p bml0KHZvaWQpOwoKZXh0ZXJuIHZvaWQgY3B1X3JhaXNlX3NvZnRpcnEodW5zaWduZWQgaW50IGNw dSwgdW5zaWduZWQgaW50IG5yKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CmV4dGVybiB2 b2lkIHJhaXNlX3NvZnRpcnEodW5zaWduZWQgaW50IG5yKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJt KDMpKSk7CiMgMTA0ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9pbnRlcnJ1 cHQuaCIKc3RydWN0IHRhc2tsZXRfc3RydWN0CnsKICAgICAgICBzdHJ1Y3QgdGFza2xldF9zdHJ1 Y3QgKm5leHQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzdGF0ZTsKICAgICAgICBhdG9taWNfdCBj b3VudDsKICAgICAgICB2b2lkICgqZnVuYykodW5zaWduZWQgbG9uZyk7CiAgICAgICAgdW5zaWdu ZWQgbG9uZyBkYXRhOwp9OwojIDEyMCAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGlu dXgvaW50ZXJydXB0LmgiCmVudW0KewogICAgICAgIFRBU0tMRVRfU1RBVEVfU0NIRUQsCiAgICAg ICAgVEFTS0xFVF9TVEFURV9SVU4KfTsKCnN0cnVjdCB0YXNrbGV0X2hlYWQKewogICAgICAgIHN0 cnVjdCB0YXNrbGV0X3N0cnVjdCAqbGlzdDsKfSBfX2F0dHJpYnV0ZV9fICgoX19hbGlnbmVkX18o KDEgPDwgKCg1KSkpKSkpOwoKZXh0ZXJuIHN0cnVjdCB0YXNrbGV0X2hlYWQgdGFza2xldF92ZWNb MzJdOwpleHRlcm4gc3RydWN0IHRhc2tsZXRfaGVhZCB0YXNrbGV0X2hpX3ZlY1szMl07CgoKc3Rh dGljIGlubGluZSBpbnQgdGFza2xldF90cnlsb2NrKHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdCkK ewogICAgICAgIHJldHVybiAhdGVzdF9hbmRfc2V0X2JpdChUQVNLTEVUX1NUQVRFX1JVTiwgJih0 KS0+c3RhdGUpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgdGFza2xldF91bmxvY2soc3RydWN0IHRh c2tsZXRfc3RydWN0ICp0KQp7CiAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oIiI6IDogOiJt ZW1vcnkiKTsKICAgICAgICBjbGVhcl9iaXQoVEFTS0xFVF9TVEFURV9SVU4sICYodCktPnN0YXRl KTsKfQoKc3RhdGljIGlubGluZSB2b2lkIHRhc2tsZXRfdW5sb2NrX3dhaXQoc3RydWN0IHRhc2ts ZXRfc3RydWN0ICp0KQp7CiAgICAgICAgd2hpbGUgKChfX2J1aWx0aW5fY29uc3RhbnRfcChUQVNL TEVUX1NUQVRFX1JVTikgPyBjb25zdGFudF90ZXN0X2JpdCgoVEFTS0xFVF9TVEFURV9SVU4pLCgm KHQpLT5zdGF0ZSkpIDogdmFyaWFibGVfdGVzdF9iaXQoKFRBU0tMRVRfU1RBVEVfUlVOKSwoJih0 KS0+c3RhdGUpKSkpIHsgX19hc21fXyBfX3ZvbGF0aWxlX18oIiI6IDogOiJtZW1vcnkiKTsgfQp9 CgoKCgoKCmV4dGVybiB2b2lkIF9fdGFza2xldF9zY2hlZHVsZShzdHJ1Y3QgdGFza2xldF9zdHJ1 Y3QgKnQpIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKCnN0YXRpYyBpbmxpbmUgdm9pZCB0 YXNrbGV0X3NjaGVkdWxlKHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdCkKewogICAgICAgIGlmICgh dGVzdF9hbmRfc2V0X2JpdChUQVNLTEVUX1NUQVRFX1NDSEVELCAmdC0+c3RhdGUpKQogICAgICAg ICAgICAgICAgX190YXNrbGV0X3NjaGVkdWxlKHQpOwp9CgpleHRlcm4gdm9pZCBfX3Rhc2tsZXRf aGlfc2NoZWR1bGUoc3RydWN0IHRhc2tsZXRfc3RydWN0ICp0KSBfX2F0dHJpYnV0ZV9fKChyZWdw YXJtKDMpKSk7CgpzdGF0aWMgaW5saW5lIHZvaWQgdGFza2xldF9oaV9zY2hlZHVsZShzdHJ1Y3Qg dGFza2xldF9zdHJ1Y3QgKnQpCnsKICAgICAgICBpZiAoIXRlc3RfYW5kX3NldF9iaXQoVEFTS0xF VF9TVEFURV9TQ0hFRCwgJnQtPnN0YXRlKSkKICAgICAgICAgICAgICAgIF9fdGFza2xldF9oaV9z Y2hlZHVsZSh0KTsKfQoKCnN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrbGV0X2Rpc2FibGVfbm9zeW5j KHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdCkKewogICAgICAgIGF0b21pY19pbmMoJnQtPmNvdW50 KTsKICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiIjogOiA6Im1lbW9yeSIpOwp9CgpzdGF0 aWMgaW5saW5lIHZvaWQgdGFza2xldF9kaXNhYmxlKHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdCkK ewogICAgICAgIHRhc2tsZXRfZGlzYWJsZV9ub3N5bmModCk7CiAgICAgICAgdGFza2xldF91bmxv Y2tfd2FpdCh0KTsKICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxvY2s7IGFkZGwgJDAs MCglJWVzcCkiOiA6IDoibWVtb3J5Iik7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrbGV0X2Vu YWJsZShzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpCnsKICAgICAgICBfX2FzbV9fIF9fdm9sYXRp bGVfXygiIjogOiA6Im1lbW9yeSIpOwogICAgICAgIGF0b21pY19kZWMoJnQtPmNvdW50KTsKfQoK c3RhdGljIGlubGluZSB2b2lkIHRhc2tsZXRfaGlfZW5hYmxlKHN0cnVjdCB0YXNrbGV0X3N0cnVj dCAqdCkKewogICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCIiOiA6IDoibWVtb3J5Iik7CiAg ICAgICAgYXRvbWljX2RlYygmdC0+Y291bnQpOwp9CgpleHRlcm4gdm9pZCB0YXNrbGV0X2tpbGwo c3RydWN0IHRhc2tsZXRfc3RydWN0ICp0KTsKZXh0ZXJuIHZvaWQgdGFza2xldF9pbml0KHN0cnVj dCB0YXNrbGV0X3N0cnVjdCAqdCwKICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpmdW5j KSh1bnNpZ25lZCBsb25nKSwgdW5zaWduZWQgbG9uZyBkYXRhKTsKIyAyMjMgIi91c3Ivc3JjL2xp bnV4LTIuNC4yMC9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oIgpleHRlcm4gc3RydWN0IHRhc2ts ZXRfc3RydWN0IGJoX3Rhc2tfdmVjW107CgoKZXh0ZXJuIHNwaW5sb2NrX3QgZ2xvYmFsX2JoX2xv Y2s7CgpzdGF0aWMgaW5saW5lIHZvaWQgbWFya19iaChpbnQgbnIpCnsKICAgICAgICB0YXNrbGV0 X2hpX3NjaGVkdWxlKGJoX3Rhc2tfdmVjK25yKTsKfQoKZXh0ZXJuIHZvaWQgaW5pdF9iaChpbnQg bnIsIHZvaWQgKCpyb3V0aW5lKSh2b2lkKSk7CmV4dGVybiB2b2lkIHJlbW92ZV9iaChpbnQgbnIp OwojIDI2NCAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvaW50ZXJydXB0Lmgi CmV4dGVybiB1bnNpZ25lZCBsb25nIHByb2JlX2lycV9vbih2b2lkKTsKZXh0ZXJuIGludCBwcm9i ZV9pcnFfb2ZmKHVuc2lnbmVkIGxvbmcpOwpleHRlcm4gdW5zaWduZWQgaW50IHByb2JlX2lycV9t YXNrKHVuc2lnbmVkIGxvbmcpOwojIDEwICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9h c20vc21wbG9jay5oIiAyCgoKCgpleHRlcm4gc3BpbmxvY2tfY2FjaGVsaW5lX3Qga2VybmVsX2Zs YWdfY2FjaGVsaW5lOwojIDQ3ICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9hc20vc21w bG9jay5oIgpzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGxvY2tfa2VybmVsKHZvaWQpCnsKCiAgICAg ICAgaWYgKCErK2dldF9jdXJyZW50KCktPmxvY2tfZGVwdGgpCiAgICAgICAgICAgICAgICBzcGlu X2xvY2soJmtlcm5lbF9mbGFnX2NhY2hlbGluZS5sb2NrKTsKIyA2MSAiL3Vzci9zcmMvbGludXgt Mi40LjIwL2luY2x1ZGUvYXNtL3NtcGxvY2suaCIKfQoKc3RhdGljIF9faW5saW5lX18gdm9pZCB1 bmxvY2tfa2VybmVsKHZvaWQpCnsKICAgICAgICBpZiAoZ2V0X2N1cnJlbnQoKS0+bG9ja19kZXB0 aCA8IDApCiAgICAgICAgICAgICAgICBfX291dF9vZl9saW5lX2J1Zyg2Nik7CgogICAgICAgIGlm ICgtLWdldF9jdXJyZW50KCktPmxvY2tfZGVwdGggPCAwKQogICAgICAgICAgICAgICAgc3Bpbl91 bmxvY2soJmtlcm5lbF9mbGFnX2NhY2hlbGluZS5sb2NrKTsKIyA3OSAiL3Vzci9zcmMvbGludXgt Mi40LjIwL2luY2x1ZGUvYXNtL3NtcGxvY2suaCIKfQojIDE3ICIvdXNyL3NyYy9saW51eC0yLjQu MjAvaW5jbHVkZS9saW51eC9zbXBfbG9jay5oIiAyCiMgMjYgInNjaGVkLmMiIDIKIyAxICIvdXNy L3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9ubWkuaCIgMQojIDE3ICIvdXNyL3NyYy9s aW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9ubWkuaCIKZXh0ZXJuIHZvaWQgdG91Y2hfbm1pX3dh dGNoZG9nKHZvaWQpOwojIDI3ICJzY2hlZC5jIiAyCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4y MC9pbmNsdWRlL2xpbnV4L2tlcm5lbF9zdGF0LmgiIDEKIyAxOCAiL3Vzci9zcmMvbGludXgtMi40 LjIwL2luY2x1ZGUvbGludXgva2VybmVsX3N0YXQuaCIKc3RydWN0IGtlcm5lbF9zdGF0IHsKICAg ICAgICB1bnNpZ25lZCBpbnQgcGVyX2NwdV91c2VyWzMyXSwKICAgICAgICAgICAgICAgICAgICAg cGVyX2NwdV9uaWNlWzMyXSwKICAgICAgICAgICAgICAgICAgICAgcGVyX2NwdV9zeXN0ZW1bMzJd OwogICAgICAgIHVuc2lnbmVkIGludCBka19kcml2ZVsxNl1bMTZdOwogICAgICAgIHVuc2lnbmVk IGludCBka19kcml2ZV9yaW9bMTZdWzE2XTsKICAgICAgICB1bnNpZ25lZCBpbnQgZGtfZHJpdmVf d2lvWzE2XVsxNl07CiAgICAgICAgdW5zaWduZWQgaW50IGRrX2RyaXZlX3JibGtbMTZdWzE2XTsK ICAgICAgICB1bnNpZ25lZCBpbnQgZGtfZHJpdmVfd2Jsa1sxNl1bMTZdOwogICAgICAgIHVuc2ln bmVkIGludCBwZ3BnaW4sIHBncGdvdXQ7CiAgICAgICAgdW5zaWduZWQgaW50IHBzd3BpbiwgcHN3 cG91dDsKCgoKICAgICAgICB1bnNpZ25lZCBpbnQgaXJxc1szMl1bMjI0XTsKCiAgICAgICAgdW5z aWduZWQgaW50IGNvbnRleHRfc3d0Y2g7Cn07CgpleHRlcm4gc3RydWN0IGtlcm5lbF9zdGF0IGtz dGF0OwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbnJfY29udGV4dF9zd2l0Y2hlcyh2b2lkKTsKIyA1 OCAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvbGludXgva2VybmVsX3N0YXQuaCIKZXh0 ZXJuIGlubGluZSBpbnQga3N0YXRfaXJxcyAoaW50IGlycSkKewogICAgICAgIGludCBpLCBzdW09 MDsKCiAgICAgICAgZm9yIChpID0gMCA7IGkgPCBzbXBfbnVtX2NwdXMgOyBpKyspCiAgICAgICAg ICAgICAgICBzdW0gKz0ga3N0YXQuaXJxc1tjcHVfbG9naWNhbF9tYXAoaSldW2lycV07CgogICAg ICAgIHJldHVybiBzdW07Cn0KIyAyOSAic2NoZWQuYyIgMgoKCgoKIyAxICIvdXNyL3NyYy9saW51 eC0yLjQuMjAvaW5jbHVkZS9saW51eC9zdXNwZW5kLmgiIDEKCgoKCgoKCiMgMSAiL3Vzci9zcmMv bGludXgtMi40LjIwL2luY2x1ZGUvbGludXgvbm90aWZpZXIuaCIgMQojIDE0ICIvdXNyL3NyYy9s aW51eC0yLjQuMjAvaW5jbHVkZS9saW51eC9ub3RpZmllci5oIgpzdHJ1Y3Qgbm90aWZpZXJfYmxv Y2sKewogICAgICAgIGludCAoKm5vdGlmaWVyX2NhbGwpKHN0cnVjdCBub3RpZmllcl9ibG9jayAq c2VsZiwgdW5zaWduZWQgbG9uZywgdm9pZCAqKTsKICAgICAgICBzdHJ1Y3Qgbm90aWZpZXJfYmxv Y2sgKm5leHQ7CiAgICAgICAgaW50IHByaW9yaXR5Owp9OwoKCgoKZXh0ZXJuIGludCBub3RpZmll cl9jaGFpbl9yZWdpc3RlcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKipsaXN0LCBzdHJ1Y3Qgbm90 aWZpZXJfYmxvY2sgKm4pOwpleHRlcm4gaW50IG5vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoc3Ry dWN0IG5vdGlmaWVyX2Jsb2NrICoqbmwsIHN0cnVjdCBub3RpZmllcl9ibG9jayAqbik7CmV4dGVy biBpbnQgbm90aWZpZXJfY2FsbF9jaGFpbihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKipuLCB1bnNp Z25lZCBsb25nIHZhbCwgdm9pZCAqdik7CiMgOSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1 ZGUvbGludXgvc3VzcGVuZC5oIiAyCgoKCmV4dGVybiB1bnNpZ25lZCBjaGFyIHNvZnR3YXJlX3N1 c3BlbmRfZW5hYmxlZDsKCgoKCgpleHRlcm4gaW50IHN3c3VzcF9zdGF0ZVs1XTsKCgp0eXBlZGVm IHN0cnVjdCBwYmUgewogICAgICAgIHN0cnVjdCBwYWdlICogb3JpZ2FkZHJlc3M7CiAgICAgICAg c3RydWN0IHBhZ2UgKiBhZGRyZXNzOwogICAgICAgIHN3cF9lbnRyeV90IHN3YXBfYWRkcmVzczsK CgoKCiAgICAgICAgc3dwX2VudHJ5X3QgZHVtbXk7CgoKCn0gc3VzcGVuZF9wYmVfdDsKCnR5cGVk ZWYgc3RydWN0IHBhZ2VkaXIgewogICAgICAgIGludCBwYWdlc2V0X3NpemU7CiAgICAgICAgaW50 IHBhZ2VkaXJfc2l6ZTsKICAgICAgICBpbnQgYWxsb2NfZnJvbTsKICAgICAgICBzdHJ1Y3QgcGJl ICpkYXRhOwogICAgICAgIHN0cnVjdCBwYmUgKmZpcnN0X2FsbG9jYXRlZDsKCn0gc3VzcGVuZF9w YWdlZGlyX3Q7CgpzdHJ1Y3QgcGJlbGluayB7CiAgICAgICAgY2hhciBkdW1teVtzaXplb2Yoc3Ry dWN0IHBiZSkgLSBzaXplb2Yoc3RydWN0IHBiZSAqKV07CiAgICAgICAgc3RydWN0IHBiZSAqIG5l eHQ7Cn07CgoKCnN0cnVjdCBzdXNwZW5kX2hlYWRlciB7CiAgICAgICAgX191MzIgdmVyc2lvbl9j b2RlOwogICAgICAgIHVuc2lnbmVkIGxvbmcgbnVtX3BoeXNwYWdlczsKICAgICAgICBjaGFyIG1h Y2hpbmVbNjVdOwogICAgICAgIGNoYXIgdmVyc2lvbls2NV07CiAgICAgICAgaW50IG51bV9jcHVz OwogICAgICAgIGludCBwYWdlX3NpemU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBiYXNlX21lbV9m cmVlOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc3dhcGZvcmltYWdlOwogICAgICAgIHVuc2lnbmVk IGludCBleHBlY3RlZF9zaXplMTsKICAgICAgICB1bnNpZ25lZCBpbnQgZXhwZWN0ZWRfc2l6ZTI7 CiAgICAgICAgc3RydWN0IHBhZ2VkaXIgcGFnZWRpcjsKICAgICAgICBpbnQgcGFyYW0wOwogICAg ICAgIGludCBwYXJhbTE7CiAgICAgICAgaW50IHBhcmFtMjsKICAgICAgICBpbnQgcGFyYW0zOwog ICAgICAgIGludCBwYXJhbTQ7CiAgICAgICAgaW50IHByb2dyZXNzMDsKICAgICAgICBpbnQgcHJv Z3Jlc3MxOwogICAgICAgIGludCBwcm9ncmVzczI7CiAgICAgICAgaW50IHByb2dyZXNzMzsKICAg ICAgICBpbnQgcHJvZ3Jlc3M0OwogICAgICAgIGtkZXZfdCBrZGV2c1szMl07CiAgICAgICAgc3Ry dWN0IHN3YXBfbG9jYXRpb24gewogICAgICAgICAgICAgICAgY2hhciBmaWxlbmFtZVszMl07CiAg ICAgICAgfSBzd2FwX2xvY2F0aW9uWzMyXTsKfTsKCgoKCgoKZXh0ZXJuIHN0cnVjdCB0cV9zdHJ1 Y3Qgc3VzcGVuZF90cTsKCgpleHRlcm4gaW50IHNocmlua19tZW0odm9pZCk7CgoKZXh0ZXJuIHZv aWQgc29mdHdhcmVfc3VzcGVuZF9wZW5kaW5nKHZvaWQpOwpleHRlcm4gdm9pZCBzb2Z0d2FyZV9y ZXN1bWUodm9pZCk7CgpleHRlcm4gaW50IHJlZ2lzdGVyX3N1c3BlbmRfbm90aWZpZXIoc3RydWN0 IG5vdGlmaWVyX2Jsb2NrICopOwpleHRlcm4gaW50IHVucmVnaXN0ZXJfc3VzcGVuZF9ub3RpZmll cihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKik7CmV4dGVybiB2b2lkIHJlZnJpZ2VyYXRvcih1bnNp Z25lZCBsb25nKTsKZXh0ZXJuIHN0cnVjdCBidWZmZXJfaGVhZCAqIHN1c3BlbmRfc3dhcF9iaDsK CmV4dGVybiBzdHJ1Y3QgcGFnZSAqIGxhc3Rfc3VzcGVuZF9jYWNoZV9wYWdlOwpleHRlcm4gdW5z aWduZWQgaW50IHN1c3BlbmRfdGFzazsKIyAzNCAic2NoZWQuYyIgMgoKCiMgMSAiL3Vzci9zcmMv bGludXgtMi40LjIwL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaCIgMQojIDM1ICIvdXNyL3NyYy9saW51 eC0yLjQuMjAvaW5jbHVkZS9hc20vdWFjY2Vzcy5oIgpleHRlcm4gaW50IF9fdmVyaWZ5X3dyaXRl KGNvbnN0IHZvaWQgKiwgdW5zaWduZWQgbG9uZyk7CiMgNjIgIi91c3Ivc3JjL2xpbnV4LTIuNC4y MC9pbmNsdWRlL2FzbS91YWNjZXNzLmgiCnN0YXRpYyBpbmxpbmUgaW50IHZlcmlmeV9hcmVhKGlu dCB0eXBlLCBjb25zdCB2b2lkICogYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQp7CiAgICAgICAg cmV0dXJuICgoeyB1bnNpZ25lZCBsb25nIGZsYWcsc3VtOyBhc20oImFkZGwgJTMsJTEgOyBzYmJs ICUwLCUwOyBjbXBsICUxLCU0OyBzYmJsICQwLCUwIiA6Ij0mciIgKGZsYWcpLCAiPXIiIChzdW0p IDoiMSIgKGFkZHIpLCJnIiAoKGludCkoc2l6ZSkpLCJnIiAoZ2V0X2N1cnJlbnQoKS0+YWRkcl9s aW1pdC5zZWcpKTsgZmxhZzsgfSkgPT0gMCkgPyAwIDogLTE0Owp9CiMgODEgIi91c3Ivc3JjL2xp bnV4LTIuNC4yMC9pbmNsdWRlL2FzbS91YWNjZXNzLmgiCnN0cnVjdCBleGNlcHRpb25fdGFibGVf ZW50cnkKewogICAgICAgIHVuc2lnbmVkIGxvbmcgaW5zbiwgZml4dXA7Cn07CgoKZXh0ZXJuIHVu c2lnbmVkIGxvbmcgc2VhcmNoX2V4Y2VwdGlvbl90YWJsZSh1bnNpZ25lZCBsb25nKTsKIyAxMDUg Ii91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS91YWNjZXNzLmgiCmV4dGVybiB2b2lk IF9fZ2V0X3VzZXJfMSh2b2lkKTsKZXh0ZXJuIHZvaWQgX19nZXRfdXNlcl8yKHZvaWQpOwpleHRl cm4gdm9pZCBfX2dldF91c2VyXzQodm9pZCk7CiMgMTI3ICIvdXNyL3NyYy9saW51eC0yLjQuMjAv aW5jbHVkZS9hc20vdWFjY2Vzcy5oIgpleHRlcm4gdm9pZCBfX3B1dF91c2VyXzEodm9pZCk7CmV4 dGVybiB2b2lkIF9fcHV0X3VzZXJfMih2b2lkKTsKZXh0ZXJuIHZvaWQgX19wdXRfdXNlcl80KHZv aWQpOwpleHRlcm4gdm9pZCBfX3B1dF91c2VyXzgodm9pZCk7CgpleHRlcm4gdm9pZCBfX3B1dF91 c2VyX2JhZCh2b2lkKTsKIyAxODggIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS91 YWNjZXNzLmgiCnN0cnVjdCBfX2xhcmdlX3N0cnVjdCB7IHVuc2lnbmVkIGxvbmcgYnVmWzEwMF07 IH07CiMgMjIwICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9hc20vdWFjY2Vzcy5oIgpl eHRlcm4gbG9uZyBfX2dldF91c2VyX2JhZCh2b2lkKTsKIyAzMDggIi91c3Ivc3JjL2xpbnV4LTIu NC4yMC9pbmNsdWRlL2FzbS91YWNjZXNzLmgiCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwpf X2dlbmVyaWNfY29weV9mcm9tX3VzZXJfbm9jaGVjayh2b2lkICp0bywgY29uc3Qgdm9pZCAqZnJv bSwgdW5zaWduZWQgbG9uZyBuKQp7CiAgICAgICAgZG8geyBpbnQgX19kMCwgX19kMTsgX19hc21f XyBfX3ZvbGF0aWxlX18oICIwOglyZXA7IG1vdnNsXG4iICIJbW92bCAlMywlMFxuIiAiMToJcmVw OyBtb3ZzYlxuIiAiMjpcbiIgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIgIjM6CWxlYSAwKCUz LCUwLDQpLCUwXG4iICI0OglwdXNobCAlMFxuIiAiCXB1c2hsICUlZWF4XG4iICIJeG9ybCAlJWVh eCwlJWVheFxuIiAiCXJlcDsgc3Rvc2JcbiIgIglwb3BsICUlZWF4XG4iICIJcG9wbCAlMFxuIiAi CWptcCAyYlxuIiAiLnByZXZpb3VzXG4iICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iICIJ LmFsaWduIDRcbiIgIgkubG9uZyAwYiwzYlxuIiAiCS5sb25nIDFiLDRiXG4iICIucHJldmlvdXMi IDogIj0mYyIobiksICI9JkQiIChfX2QwKSwgIj0mUyIgKF9fZDEpIDogInIiKG4gJiAzKSwgIjAi KG4gLyA0KSwgIjEiKHRvKSwgIjIiKGZyb20pIDogIm1lbW9yeSIpOyB9IHdoaWxlICgwKTsKICAg ICAgICByZXR1cm4gbjsKfQoKc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCl9fZ2VuZXJpY19j b3B5X3RvX3VzZXJfbm9jaGVjayh2b2lkICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQg bG9uZyBuKQp7CiAgICAgICAgZG8geyBpbnQgX19kMCwgX19kMTsgX19hc21fXyBfX3ZvbGF0aWxl X18oICIwOglyZXA7IG1vdnNsXG4iICIJbW92bCAlMywlMFxuIiAiMToJcmVwOyBtb3ZzYlxuIiAi MjpcbiIgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIgIjM6CWxlYSAwKCUzLCUwLDQpLCUwXG4i ICIJam1wIDJiXG4iICIucHJldmlvdXNcbiIgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIg IgkuYWxpZ24gNFxuIiAiCS5sb25nIDBiLDNiXG4iICIJLmxvbmcgMWIsMmJcbiIgIi5wcmV2aW91 cyIgOiAiPSZjIihuKSwgIj0mRCIgKF9fZDApLCAiPSZTIiAoX19kMSkgOiAiciIobiAmIDMpLCAi MCIobiAvIDQpLCAiMSIodG8pLCAiMiIoZnJvbSkgOiAibWVtb3J5Iik7IH0gd2hpbGUgKDApOwog ICAgICAgIHJldHVybiBuOwp9CiMgNTQzICIvdXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9h c20vdWFjY2Vzcy5oIgp1bnNpZ25lZCBsb25nIF9fZ2VuZXJpY19jb3B5X3RvX3VzZXIodm9pZCAq LCBjb25zdCB2b2lkICosIHVuc2lnbmVkIGxvbmcpOwp1bnNpZ25lZCBsb25nIF9fZ2VuZXJpY19j b3B5X2Zyb21fdXNlcih2b2lkICosIGNvbnN0IHZvaWQgKiwgdW5zaWduZWQgbG9uZyk7CgpzdGF0 aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKX19jb25zdGFudF9jb3B5X3RvX3VzZXIodm9pZCAqdG8s IGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikKewogICAgICAgIHByZWZldGNoKGZy b20pOwogICAgICAgIGlmICgoKHsgdW5zaWduZWQgbG9uZyBmbGFnLHN1bTsgYXNtKCJhZGRsICUz LCUxIDsgc2JibCAlMCwlMDsgY21wbCAlMSwlNDsgc2JibCAkMCwlMCIgOiI9JnIiIChmbGFnKSwg Ij1yIiAoc3VtKSA6IjEiICh0byksImciICgoaW50KShuKSksImciIChnZXRfY3VycmVudCgpLT5h ZGRyX2xpbWl0LnNlZykpOyBmbGFnOyB9KSA9PSAwKSkKICAgICAgICAgICAgICAgIGRvIHsgaW50 IF9fZDAsIF9fZDE7IHN3aXRjaCAobiAmIDMpIHsgZGVmYXVsdDogX19hc21fXyBfX3ZvbGF0aWxl X18oICIwOglyZXA7IG1vdnNsXG4iICIxOlxuIiAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIiAi MjoJc2hsICQyLCUwXG4iICIJam1wIDFiXG4iICIucHJldmlvdXNcbiIgIi5zZWN0aW9uIF9fZXhf dGFibGUsXCJhXCJcbiIgIgkuYWxpZ24gNFxuIiAiCS5sb25nIDBiLDJiXG4iICIucHJldmlvdXMi IDogIj1jIihuKSwgIj0mUyIgKF9fZDApLCAiPSZEIiAoX19kMSkgOiAiMSIoZnJvbSksICIyIih0 byksICIwIihuLzQpIDogIm1lbW9yeSIpOyBicmVhazsgY2FzZSAxOiBfX2FzbV9fIF9fdm9sYXRp bGVfXyggIjA6CXJlcDsgbW92c2xcbiIgIjE6CW1vdnNiXG4iICIyOlxuIiAiLnNlY3Rpb24gLmZp eHVwLFwiYXhcIlxuIiAiMzoJc2hsICQyLCUwXG4iICI0OglpbmNsICUwXG4iICIJam1wIDJiXG4i ICIucHJldmlvdXNcbiIgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIgIgkuYWxpZ24gNFxu IiAiCS5sb25nIDBiLDNiXG4iICIJLmxvbmcgMWIsNGJcbiIgIi5wcmV2aW91cyIgOiAiPWMiKG4p LCAiPSZTIiAoX19kMCksICI9JkQiIChfX2QxKSA6ICIxIihmcm9tKSwgIjIiKHRvKSwgIjAiKG4v NCkgOiAibWVtb3J5Iik7IGJyZWFrOyBjYXNlIDI6IF9fYXNtX18gX192b2xhdGlsZV9fKCAiMDoJ cmVwOyBtb3ZzbFxuIiAiMToJbW92c3dcbiIgIjI6XG4iICIuc2VjdGlvbiAuZml4dXAsXCJheFwi XG4iICIzOglzaGwgJDIsJTBcbiIgIjQ6CWFkZGwgJDIsJTBcbiIgIglqbXAgMmJcbiIgIi5wcmV2 aW91c1xuIiAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIiAiCS5hbGlnbiA0XG4iICIJLmxv bmcgMGIsM2JcbiIgIgkubG9uZyAxYiw0YlxuIiAiLnByZXZpb3VzIiA6ICI9YyIobiksICI9JlMi IChfX2QwKSwgIj0mRCIgKF9fZDEpIDogIjEiKGZyb20pLCAiMiIodG8pLCAiMCIobi80KSA6ICJt ZW1vcnkiKTsgYnJlYWs7IGNhc2UgMzogX19hc21fXyBfX3ZvbGF0aWxlX18oICIwOglyZXA7IG1v dnNsXG4iICIxOgltb3Zzd1xuIiAiMjoJbW92c2JcbiIgIjM6XG4iICIuc2VjdGlvbiAuZml4dXAs XCJheFwiXG4iICI0OglzaGwgJDIsJTBcbiIgIjU6CWFkZGwgJDIsJTBcbiIgIjY6CWluY2wgJTBc biIgIglqbXAgM2JcbiIgIi5wcmV2aW91c1xuIiAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxu IiAiCS5hbGlnbiA0XG4iICIJLmxvbmcgMGIsNGJcbiIgIgkubG9uZyAxYiw1YlxuIiAiCS5sb25n IDJiLDZiXG4iICIucHJldmlvdXMiIDogIj1jIihuKSwgIj0mUyIgKF9fZDApLCAiPSZEIiAoX19k MSkgOiAiMSIoZnJvbSksICIyIih0byksICIwIihuLzQpIDogIm1lbW9yeSIpOyBicmVhazsgfSB9 IHdoaWxlICgwKTsKICAgICAgICByZXR1cm4gbjsKfQoKc3RhdGljIGlubGluZSB1bnNpZ25lZCBs b25nCl9fY29uc3RhbnRfY29weV9mcm9tX3VzZXIodm9pZCAqdG8sIGNvbnN0IHZvaWQgKmZyb20s IHVuc2lnbmVkIGxvbmcgbikKewogICAgICAgIGlmICgoKHsgdW5zaWduZWQgbG9uZyBmbGFnLHN1 bTsgYXNtKCJhZGRsICUzLCUxIDsgc2JibCAlMCwlMDsgY21wbCAlMSwlNDsgc2JibCAkMCwlMCIg OiI9JnIiIChmbGFnKSwgIj1yIiAoc3VtKSA6IjEiIChmcm9tKSwiZyIgKChpbnQpKG4pKSwiZyIg KGdldF9jdXJyZW50KCktPmFkZHJfbGltaXQuc2VnKSk7IGZsYWc7IH0pID09IDApKQogICAgICAg ICAgICAgICAgZG8geyBpbnQgX19kMCwgX19kMTsgc3dpdGNoIChuICYgMykgeyBkZWZhdWx0OiBf X2FzbV9fIF9fdm9sYXRpbGVfXyggIjA6CXJlcDsgbW92c2xcbiIgIjE6XG4iICIuc2VjdGlvbiAu Zml4dXAsXCJheFwiXG4iICIyOglwdXNobCAlMFxuIiAiCXB1c2hsICUlZWF4XG4iICIJeG9ybCAl JWVheCwlJWVheFxuIiAiCXJlcDsgc3Rvc2xcbiIgIglwb3BsICUlZWF4XG4iICIJcG9wbCAlMFxu IiAiCXNobCAkMiwlMFxuIiAiCWptcCAxYlxuIiAiLnByZXZpb3VzXG4iICIuc2VjdGlvbiBfX2V4 X3RhYmxlLFwiYVwiXG4iICIJLmFsaWduIDRcbiIgIgkubG9uZyAwYiwyYlxuIiAiLnByZXZpb3Vz IiA6ICI9YyIobiksICI9JlMiIChfX2QwKSwgIj0mRCIgKF9fZDEpIDogIjEiKGZyb20pLCAiMiIo dG8pLCAiMCIobi80KSA6ICJtZW1vcnkiKTsgYnJlYWs7IGNhc2UgMTogX19hc21fXyBfX3ZvbGF0 aWxlX18oICIwOglyZXA7IG1vdnNsXG4iICIxOgltb3ZzYlxuIiAiMjpcbiIgIi5zZWN0aW9uIC5m aXh1cCxcImF4XCJcbiIgIjM6CXB1c2hsICUwXG4iICIJcHVzaGwgJSVlYXhcbiIgIgl4b3JsICUl ZWF4LCUlZWF4XG4iICIJcmVwOyBzdG9zbFxuIiAiCXN0b3NiXG4iICIJcG9wbCAlJWVheFxuIiAi CXBvcGwgJTBcbiIgIglzaGwgJDIsJTBcbiIgIglpbmNsICUwXG4iICIJam1wIDJiXG4iICI0Oglw dXNobCAlJWVheFxuIiAiCXhvcmwgJSVlYXgsJSVlYXhcbiIgIglzdG9zYlxuIiAiCXBvcGwgJSVl YXhcbiIgIglpbmNsICUwXG4iICIJam1wIDJiXG4iICIucHJldmlvdXNcbiIgIi5zZWN0aW9uIF9f ZXhfdGFibGUsXCJhXCJcbiIgIgkuYWxpZ24gNFxuIiAiCS5sb25nIDBiLDNiXG4iICIJLmxvbmcg MWIsNGJcbiIgIi5wcmV2aW91cyIgOiAiPWMiKG4pLCAiPSZTIiAoX19kMCksICI9JkQiIChfX2Qx KSA6ICIxIihmcm9tKSwgIjIiKHRvKSwgIjAiKG4vNCkgOiAibWVtb3J5Iik7IGJyZWFrOyBjYXNl IDI6IF9fYXNtX18gX192b2xhdGlsZV9fKCAiMDoJcmVwOyBtb3ZzbFxuIiAiMToJbW92c3dcbiIg IjI6XG4iICIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iICIzOglwdXNobCAlMFxuIiAiCXB1c2hs ICUlZWF4XG4iICIJeG9ybCAlJWVheCwlJWVheFxuIiAiCXJlcDsgc3Rvc2xcbiIgIglzdG9zd1xu IiAiCXBvcGwgJSVlYXhcbiIgIglwb3BsICUwXG4iICIJc2hsICQyLCUwXG4iICIJYWRkbCAkMiwl MFxuIiAiCWptcCAyYlxuIiAiNDoJcHVzaGwgJSVlYXhcbiIgIgl4b3JsICUlZWF4LCUlZWF4XG4i ICIJc3Rvc3dcbiIgIglwb3BsICUlZWF4XG4iICIJYWRkbCAkMiwlMFxuIiAiCWptcCAyYlxuIiAi LnByZXZpb3VzXG4iICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iICIJLmFsaWduIDRcbiIg IgkubG9uZyAwYiwzYlxuIiAiCS5sb25nIDFiLDRiXG4iICIucHJldmlvdXMiIDogIj1jIihuKSwg Ij0mUyIgKF9fZDApLCAiPSZEIiAoX19kMSkgOiAiMSIoZnJvbSksICIyIih0byksICIwIihuLzQp IDogIm1lbW9yeSIpOyBicmVhazsgY2FzZSAzOiBfX2FzbV9fIF9fdm9sYXRpbGVfXyggIjA6CXJl cDsgbW92c2xcbiIgIjE6CW1vdnN3XG4iICIyOgltb3ZzYlxuIiAiMzpcbiIgIi5zZWN0aW9uIC5m aXh1cCxcImF4XCJcbiIgIjQ6CXB1c2hsICUwXG4iICIJcHVzaGwgJSVlYXhcbiIgIgl4b3JsICUl ZWF4LCUlZWF4XG4iICIJcmVwOyBzdG9zbFxuIiAiCXN0b3N3XG4iICIJc3Rvc2JcbiIgIglwb3Bs ICUlZWF4XG4iICIJcG9wbCAlMFxuIiAiCXNobCAkMiwlMFxuIiAiCWFkZGwgJDMsJTBcbiIgIglq bXAgMmJcbiIgIjU6CXB1c2hsICUlZWF4XG4iICIJeG9ybCAlJWVheCwlJWVheFxuIiAiCXN0b3N3 XG4iICIJc3Rvc2JcbiIgIglwb3BsICUlZWF4XG4iICIJYWRkbCAkMywlMFxuIiAiCWptcCAyYlxu IiAiNjoJcHVzaGwgJSVlYXhcbiIgIgl4b3JsICUlZWF4LCUlZWF4XG4iICIJc3Rvc2JcbiIgIglw b3BsICUlZWF4XG4iICIJaW5jbCAlMFxuIiAiCWptcCAzYlxuIiAiLnByZXZpb3VzXG4iICIuc2Vj dGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iICIJLmFsaWduIDRcbiIgIgkubG9uZyAwYiw0YlxuIiAi CS5sb25nIDFiLDViXG4iICIJLmxvbmcgMmIsNmJcbiIgIi5wcmV2aW91cyIgOiAiPWMiKG4pLCAi PSZTIiAoX19kMCksICI9JkQiIChfX2QxKSA6ICIxIihmcm9tKSwgIjIiKHRvKSwgIjAiKG4vNCkg OiAibWVtb3J5Iik7IGJyZWFrOyB9IH0gd2hpbGUgKDApOwogICAgICAgIGVsc2UKICAgICAgICAg ICAgICAgIChfX2J1aWx0aW5fY29uc3RhbnRfcCgwKSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCgo bikpID8gX19jb25zdGFudF9jX2FuZF9jb3VudF9tZW1zZXQoKCh0bykpLCgoMHgwMTAxMDEwMVVM Kih1bnNpZ25lZCBjaGFyKSgwKSkpLCgobikpKSA6IF9fY29uc3RhbnRfY19tZW1zZXQoKCh0bykp LCgoMHgwMTAxMDEwMVVMKih1bnNpZ25lZCBjaGFyKSgwKSkpLCgobikpKSkgOiAoX19idWlsdGlu X2NvbnN0YW50X3AoKG4pKSA/IF9fbWVtc2V0X2dlbmVyaWMoKCgodG8pKSksKCgoMCkpKSwoKChu KSkpKSA6IF9fbWVtc2V0X2dlbmVyaWMoKCh0bykpLCgoMCkpLCgobikpKSkpOwogICAgICAgIHJl dHVybiBuOwp9CgpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKX19jb25zdGFudF9jb3B5X3Rv X3VzZXJfbm9jaGVjayh2b2lkICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyBu KQp7CiAgICAgICAgZG8geyBpbnQgX19kMCwgX19kMTsgc3dpdGNoIChuICYgMykgeyBkZWZhdWx0 OiBfX2FzbV9fIF9fdm9sYXRpbGVfXyggIjA6CXJlcDsgbW92c2xcbiIgIjE6XG4iICIuc2VjdGlv biAuZml4dXAsXCJheFwiXG4iICIyOglzaGwgJDIsJTBcbiIgIglqbXAgMWJcbiIgIi5wcmV2aW91 c1xuIiAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIiAiCS5hbGlnbiA0XG4iICIJLmxvbmcg MGIsMmJcbiIgIi5wcmV2aW91cyIgOiAiPWMiKG4pLCAiPSZTIiAoX19kMCksICI9JkQiIChfX2Qx KSA6ICIxIihmcm9tKSwgIjIiKHRvKSwgIjAiKG4vNCkgOiAibWVtb3J5Iik7IGJyZWFrOyBjYXNl IDE6IF9fYXNtX18gX192b2xhdGlsZV9fKCAiMDoJcmVwOyBtb3ZzbFxuIiAiMToJbW92c2JcbiIg IjI6XG4iICIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iICIzOglzaGwgJDIsJTBcbiIgIjQ6CWlu Y2wgJTBcbiIgIglqbXAgMmJcbiIgIi5wcmV2aW91c1xuIiAiLnNlY3Rpb24gX19leF90YWJsZSxc ImFcIlxuIiAiCS5hbGlnbiA0XG4iICIJLmxvbmcgMGIsM2JcbiIgIgkubG9uZyAxYiw0YlxuIiAi LnByZXZpb3VzIiA6ICI9YyIobiksICI9JlMiIChfX2QwKSwgIj0mRCIgKF9fZDEpIDogIjEiKGZy b20pLCAiMiIodG8pLCAiMCIobi80KSA6ICJtZW1vcnkiKTsgYnJlYWs7IGNhc2UgMjogX19hc21f XyBfX3ZvbGF0aWxlX18oICIwOglyZXA7IG1vdnNsXG4iICIxOgltb3Zzd1xuIiAiMjpcbiIgIi5z ZWN0aW9uIC5maXh1cCxcImF4XCJcbiIgIjM6CXNobCAkMiwlMFxuIiAiNDoJYWRkbCAkMiwlMFxu IiAiCWptcCAyYlxuIiAiLnByZXZpb3VzXG4iICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4i ICIJLmFsaWduIDRcbiIgIgkubG9uZyAwYiwzYlxuIiAiCS5sb25nIDFiLDRiXG4iICIucHJldmlv dXMiIDogIj1jIihuKSwgIj0mUyIgKF9fZDApLCAiPSZEIiAoX19kMSkgOiAiMSIoZnJvbSksICIy Iih0byksICIwIihuLzQpIDogIm1lbW9yeSIpOyBicmVhazsgY2FzZSAzOiBfX2FzbV9fIF9fdm9s YXRpbGVfXyggIjA6CXJlcDsgbW92c2xcbiIgIjE6CW1vdnN3XG4iICIyOgltb3ZzYlxuIiAiMzpc biIgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIgIjQ6CXNobCAkMiwlMFxuIiAiNToJYWRkbCAk MiwlMFxuIiAiNjoJaW5jbCAlMFxuIiAiCWptcCAzYlxuIiAiLnByZXZpb3VzXG4iICIuc2VjdGlv biBfX2V4X3RhYmxlLFwiYVwiXG4iICIJLmFsaWduIDRcbiIgIgkubG9uZyAwYiw0YlxuIiAiCS5s b25nIDFiLDViXG4iICIJLmxvbmcgMmIsNmJcbiIgIi5wcmV2aW91cyIgOiAiPWMiKG4pLCAiPSZT IiAoX19kMCksICI9JkQiIChfX2QxKSA6ICIxIihmcm9tKSwgIjIiKHRvKSwgIjAiKG4vNCkgOiAi bWVtb3J5Iik7IGJyZWFrOyB9IH0gd2hpbGUgKDApOwogICAgICAgIHJldHVybiBuOwp9CgpzdGF0 aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKX19jb25zdGFudF9jb3B5X2Zyb21fdXNlcl9ub2NoZWNr KHZvaWQgKnRvLCBjb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pCnsKICAgICAgICBk byB7IGludCBfX2QwLCBfX2QxOyBzd2l0Y2ggKG4gJiAzKSB7IGRlZmF1bHQ6IF9fYXNtX18gX192 b2xhdGlsZV9fKCAiMDoJcmVwOyBtb3ZzbFxuIiAiMTpcbiIgIi5zZWN0aW9uIC5maXh1cCxcImF4 XCJcbiIgIjI6CXB1c2hsICUwXG4iICIJcHVzaGwgJSVlYXhcbiIgIgl4b3JsICUlZWF4LCUlZWF4 XG4iICIJcmVwOyBzdG9zbFxuIiAiCXBvcGwgJSVlYXhcbiIgIglwb3BsICUwXG4iICIJc2hsICQy LCUwXG4iICIJam1wIDFiXG4iICIucHJldmlvdXNcbiIgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJh XCJcbiIgIgkuYWxpZ24gNFxuIiAiCS5sb25nIDBiLDJiXG4iICIucHJldmlvdXMiIDogIj1jIihu KSwgIj0mUyIgKF9fZDApLCAiPSZEIiAoX19kMSkgOiAiMSIoZnJvbSksICIyIih0byksICIwIihu LzQpIDogIm1lbW9yeSIpOyBicmVhazsgY2FzZSAxOiBfX2FzbV9fIF9fdm9sYXRpbGVfXyggIjA6 CXJlcDsgbW92c2xcbiIgIjE6CW1vdnNiXG4iICIyOlxuIiAiLnNlY3Rpb24gLmZpeHVwLFwiYXhc IlxuIiAiMzoJcHVzaGwgJTBcbiIgIglwdXNobCAlJWVheFxuIiAiCXhvcmwgJSVlYXgsJSVlYXhc biIgIglyZXA7IHN0b3NsXG4iICIJc3Rvc2JcbiIgIglwb3BsICUlZWF4XG4iICIJcG9wbCAlMFxu IiAiCXNobCAkMiwlMFxuIiAiCWluY2wgJTBcbiIgIglqbXAgMmJcbiIgIjQ6CXB1c2hsICUlZWF4 XG4iICIJeG9ybCAlJWVheCwlJWVheFxuIiAiCXN0b3NiXG4iICIJcG9wbCAlJWVheFxuIiAiCWlu Y2wgJTBcbiIgIglqbXAgMmJcbiIgIi5wcmV2aW91c1xuIiAiLnNlY3Rpb24gX19leF90YWJsZSxc ImFcIlxuIiAiCS5hbGlnbiA0XG4iICIJLmxvbmcgMGIsM2JcbiIgIgkubG9uZyAxYiw0YlxuIiAi LnByZXZpb3VzIiA6ICI9YyIobiksICI9JlMiIChfX2QwKSwgIj0mRCIgKF9fZDEpIDogIjEiKGZy b20pLCAiMiIodG8pLCAiMCIobi80KSA6ICJtZW1vcnkiKTsgYnJlYWs7IGNhc2UgMjogX19hc21f XyBfX3ZvbGF0aWxlX18oICIwOglyZXA7IG1vdnNsXG4iICIxOgltb3Zzd1xuIiAiMjpcbiIgIi5z ZWN0aW9uIC5maXh1cCxcImF4XCJcbiIgIjM6CXB1c2hsICUwXG4iICIJcHVzaGwgJSVlYXhcbiIg Igl4b3JsICUlZWF4LCUlZWF4XG4iICIJcmVwOyBzdG9zbFxuIiAiCXN0b3N3XG4iICIJcG9wbCAl JWVheFxuIiAiCXBvcGwgJTBcbiIgIglzaGwgJDIsJTBcbiIgIglhZGRsICQyLCUwXG4iICIJam1w IDJiXG4iICI0OglwdXNobCAlJWVheFxuIiAiCXhvcmwgJSVlYXgsJSVlYXhcbiIgIglzdG9zd1xu IiAiCXBvcGwgJSVlYXhcbiIgIglhZGRsICQyLCUwXG4iICIJam1wIDJiXG4iICIucHJldmlvdXNc biIgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIgIgkuYWxpZ24gNFxuIiAiCS5sb25nIDBi LDNiXG4iICIJLmxvbmcgMWIsNGJcbiIgIi5wcmV2aW91cyIgOiAiPWMiKG4pLCAiPSZTIiAoX19k MCksICI9JkQiIChfX2QxKSA6ICIxIihmcm9tKSwgIjIiKHRvKSwgIjAiKG4vNCkgOiAibWVtb3J5 Iik7IGJyZWFrOyBjYXNlIDM6IF9fYXNtX18gX192b2xhdGlsZV9fKCAiMDoJcmVwOyBtb3ZzbFxu IiAiMToJbW92c3dcbiIgIjI6CW1vdnNiXG4iICIzOlxuIiAiLnNlY3Rpb24gLmZpeHVwLFwiYXhc IlxuIiAiNDoJcHVzaGwgJTBcbiIgIglwdXNobCAlJWVheFxuIiAiCXhvcmwgJSVlYXgsJSVlYXhc biIgIglyZXA7IHN0b3NsXG4iICIJc3Rvc3dcbiIgIglzdG9zYlxuIiAiCXBvcGwgJSVlYXhcbiIg Iglwb3BsICUwXG4iICIJc2hsICQyLCUwXG4iICIJYWRkbCAkMywlMFxuIiAiCWptcCAyYlxuIiAi NToJcHVzaGwgJSVlYXhcbiIgIgl4b3JsICUlZWF4LCUlZWF4XG4iICIJc3Rvc3dcbiIgIglzdG9z YlxuIiAiCXBvcGwgJSVlYXhcbiIgIglhZGRsICQzLCUwXG4iICIJam1wIDJiXG4iICI2OglwdXNo bCAlJWVheFxuIiAiCXhvcmwgJSVlYXgsJSVlYXhcbiIgIglzdG9zYlxuIiAiCXBvcGwgJSVlYXhc biIgIglpbmNsICUwXG4iICIJam1wIDNiXG4iICIucHJldmlvdXNcbiIgIi5zZWN0aW9uIF9fZXhf dGFibGUsXCJhXCJcbiIgIgkuYWxpZ24gNFxuIiAiCS5sb25nIDBiLDRiXG4iICIJLmxvbmcgMWIs NWJcbiIgIgkubG9uZyAyYiw2YlxuIiAiLnByZXZpb3VzIiA6ICI9YyIobiksICI9JlMiIChfX2Qw KSwgIj0mRCIgKF9fZDEpIDogIjEiKGZyb20pLCAiMiIodG8pLCAiMCIobi80KSA6ICJtZW1vcnki KTsgYnJlYWs7IH0gfSB3aGlsZSAoMCk7CiAgICAgICAgcmV0dXJuIG47Cn0KIyA1OTkgIi91c3Iv c3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS91YWNjZXNzLmgiCmxvbmcgc3RybmNweV9mcm9t X3VzZXIoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMsIGxvbmcgY291bnQpOwpsb25nIF9fc3Ry bmNweV9mcm9tX3VzZXIoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMsIGxvbmcgY291bnQpOwoK bG9uZyBzdHJubGVuX3VzZXIoY29uc3QgY2hhciAqc3RyLCBsb25nIG4pOwp1bnNpZ25lZCBsb25n IGNsZWFyX3VzZXIodm9pZCAqbWVtLCB1bnNpZ25lZCBsb25nIGxlbik7CnVuc2lnbmVkIGxvbmcg X19jbGVhcl91c2VyKHZvaWQgKm1lbSwgdW5zaWduZWQgbG9uZyBsZW4pOwojIDM3ICJzY2hlZC5j IiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0Lmgi IDEKCgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvYXNtL2Rlc2MuaCIgMQoK CgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS9sZHQuaCIgMQojIDE1ICIv dXNyL3NyYy9saW51eC0yLjQuMjAvaW5jbHVkZS9hc20vbGR0LmgiCnN0cnVjdCBtb2RpZnlfbGR0 X2xkdF9zIHsKICAgICAgICB1bnNpZ25lZCBpbnQgZW50cnlfbnVtYmVyOwogICAgICAgIHVuc2ln bmVkIGxvbmcgYmFzZV9hZGRyOwogICAgICAgIHVuc2lnbmVkIGludCBsaW1pdDsKICAgICAgICB1 bnNpZ25lZCBpbnQgc2VnXzMyYml0OjE7CiAgICAgICAgdW5zaWduZWQgaW50IGNvbnRlbnRzOjI7 CiAgICAgICAgdW5zaWduZWQgaW50IHJlYWRfZXhlY19vbmx5OjE7CiAgICAgICAgdW5zaWduZWQg aW50IGxpbWl0X2luX3BhZ2VzOjE7CiAgICAgICAgdW5zaWduZWQgaW50IHNlZ19ub3RfcHJlc2Vu dDoxOwogICAgICAgIHVuc2lnbmVkIGludCB1c2VhYmxlOjE7Cn07CiMgNSAiL3Vzci9zcmMvbGlu dXgtMi40LjIwL2luY2x1ZGUvYXNtL2Rlc2MuaCIgMgojIDQ0ICIvdXNyL3NyYy9saW51eC0yLjQu MjAvaW5jbHVkZS9hc20vZGVzYy5oIgpzdHJ1Y3QgZGVzY19zdHJ1Y3QgewogICAgICAgIHVuc2ln bmVkIGxvbmcgYSxiOwp9OwoKZXh0ZXJuIHN0cnVjdCBkZXNjX3N0cnVjdCBnZHRfdGFibGVbXTsK ZXh0ZXJuIHN0cnVjdCBkZXNjX3N0cnVjdCAqaWR0LCAqZ2R0OwoKc3RydWN0IFhndF9kZXNjX3N0 cnVjdCB7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc2l6ZTsKICAgICAgICB1bnNpZ25lZCBsb25n IGFkZHJlc3MgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cn07CiMgNjcgIi91c3Ivc3JjL2xpbnV4 LTIuNC4yMC9pbmNsdWRlL2FzbS9kZXNjLmgiCmV4dGVybiBzdHJ1Y3QgZGVzY19zdHJ1Y3QgZGVm YXVsdF9sZHRbXTsKZXh0ZXJuIHZvaWQgc2V0X2ludHJfZ2F0ZSh1bnNpZ25lZCBpbnQgaXJxLCB2 b2lkICogYWRkcik7CmV4dGVybiB2b2lkIHNldF9sZHRfZGVzYyh1bnNpZ25lZCBpbnQgbiwgdm9p ZCAqYWRkciwgdW5zaWduZWQgaW50IHNpemUpOwpleHRlcm4gdm9pZCBzZXRfdHNzX2Rlc2ModW5z aWduZWQgaW50IG4sIHZvaWQgKmFkZHIpOwoKc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX0xEVCh2 b2lkKQp7CiAgICAgICAgaW50IGNwdSA9IChnZXRfY3VycmVudCgpLT5wcm9jZXNzb3IpOwogICAg ICAgIHNldF9sZHRfZGVzYyhjcHUsICZkZWZhdWx0X2xkdFswXSwgNSk7CiAgICAgICAgX19hc21f XyBfX3ZvbGF0aWxlX18oImxsZHQgJSVheCI6OiJhIiAoKCgoY3B1KTw8MikgKyAoMTIgKzEpKTw8 MykpOwp9CgoKCgpzdGF0aWMgaW5saW5lIHZvaWQgbG9hZF9MRFQgKHN0cnVjdCBtbV9zdHJ1Y3Qg Km1tKQp7CiAgICAgICAgaW50IGNwdSA9IChnZXRfY3VycmVudCgpLT5wcm9jZXNzb3IpOwogICAg ICAgIHZvaWQgKnNlZ21lbnRzID0gbW0tPmNvbnRleHQuc2VnbWVudHM7CiAgICAgICAgaW50IGNv dW50ID0gODE5MjsKCiAgICAgICAgaWYgKCFzZWdtZW50cykgewogICAgICAgICAgICAgICAgc2Vn bWVudHMgPSAmZGVmYXVsdF9sZHRbMF07CiAgICAgICAgICAgICAgICBjb3VudCA9IDU7CiAgICAg ICAgfQoKICAgICAgICBzZXRfbGR0X2Rlc2MoY3B1LCBzZWdtZW50cywgY291bnQpOwogICAgICAg IF9fYXNtX18gX192b2xhdGlsZV9fKCJsbGR0ICUlYXgiOjoiYSIgKCgoKGNwdSk8PDIpICsgKDEy ICsxKSk8PDMpKTsKfQojIDYgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS9tbXVf Y29udGV4dC5oIiAyCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS9wZ2Fs bG9jLmgiIDEKIyA1OSAiL3Vzci9zcmMvbGludXgtMi40LjIwL2luY2x1ZGUvYXNtL3BnYWxsb2Mu aCIKc3RhdGljIGlubGluZSBwZ2RfdCAqZ2V0X3BnZF9zbG93KHZvaWQpCnsKICAgICAgICBwZ2Rf dCAqcGdkID0gKHBnZF90ICopX19nZXRfZnJlZV9wYWdlcygoKDB4MjAgfCAweDEwIHwgMHg0MCB8 IDB4ODAgfCAweDEwMCkpLDApOwoKICAgICAgICBpZiAocGdkKSB7CiAgICAgICAgICAgICAgICAo X19idWlsdGluX2NvbnN0YW50X3AoMCkgPyAoX19idWlsdGluX2NvbnN0YW50X3AoKCgoKCh1bnNp Z25lZCBsb25nKSgweEMwMDAwMDAwKSkpLygxVUwgPDwgMjIpKSAqIHNpemVvZihwZ2RfdCkpKSA/ IF9fY29uc3RhbnRfY19hbmRfY291bnRfbWVtc2V0KCgocGdkKSksKCgweDAxMDEwMTAxVUwqKHVu c2lnbmVkIGNoYXIpKDApKSksKCgoKCgodW5zaWduZWQgbG9uZykoMHhDMDAwMDAwMCkpKS8oMVVM IDw8IDIyKSkgKiBzaXplb2YocGdkX3QpKSkpIDogX19jb25zdGFudF9jX21lbXNldCgoKHBnZCkp LCgoMHgwMTAxMDEwMVVMKih1bnNpZ25lZCBjaGFyKSgwKSkpLCgoKCgoKHVuc2lnbmVkIGxvbmcp KDB4QzAwMDAwMDApKSkvKDFVTCA8PCAyMikpICogc2l6ZW9mKHBnZF90KSkpKSkgOiAoX19idWls dGluX2NvbnN0YW50X3AoKCgoKCh1bnNpZ25lZCBsb25nKSgweEMwMDAwMDAwKSkpLygxVUwgPDwg MjIpKSAqIHNpemVvZihwZ2RfdCkpKSA/IF9fbWVtc2V0X2dlbmVyaWMoKCgocGdkKSkpLCgoKDAp KSksKCgoKCgoKHVuc2lnbmVkIGxvbmcpKDB4QzAwMDAwMDApKSkvKDFVTCA8PCAyMikpICogc2l6 ZW9mKHBnZF90KSkpKSkgOiBfX21lbXNldF9nZW5lcmljKCgocGdkKSksKCgwKSksKCgoKCgodW5z aWduZWQgbG9uZykoMHhDMDAwMDAwMCkpKS8oMVVMIDw8IDIyKSkgKiBzaXplb2YocGdkX3QpKSkp KSk7CiAgICAgICAgICAgICAgICAoX19idWlsdGluX2NvbnN0YW50X3AoKDEwMjQgLSAoKCgodW5z aWduZWQgbG9uZykoMHhDMDAwMDAwMCkpKS8oMVVMIDw8IDIyKSkpICogc2l6ZW9mKHBnZF90KSkg PyBfX2NvbnN0YW50X21lbWNweSgocGdkICsgKCgoKHVuc2lnbmVkIGxvbmcpKDB4QzAwMDAwMDAp KSkvKDFVTCA8PCAyMikpKSwoc3dhcHBlcl9wZ19kaXIgKyAoKCgodW5zaWduZWQgbG9uZykoMHhD MDAwMDAwMCkpKS8oMVVMIDw8IDIyKSkpLCgoMTAyNCAtICgoKCh1bnNpZ25lZCBsb25nKSgweEMw MDAwMDAwKSkpLygxVUwgPDwgMjIpKSkgKiBzaXplb2YocGdkX3QpKSkgOiBfX21lbWNweSgocGdk ICsgKCgoKHVuc2lnbmVkIGxvbmcpKDB4QzAwMDAwMDApKSkvKDFVTCA8PCAyMikpKSwoc3dhcHBl cl9wZ19kaXIgKyAoKCgodW5zaWduZWQgbG9uZykoMHhDMDAwMDAwMCkpKS8oMVVMIDw8IDIyKSkp LCgoMTAyNCAtICgoKCh1bnNpZ25lZCBsb25nKSgweEMwMDAwMDAwKSkpLygxVUwgPDwgMjIpKSkg KiBzaXplb2YocGdkX3QpKSkpOwoKCiAgICAgICAgfQogICAgICAgIHJldHVybiBwZ2Q7Cn0KCgoK c3RhdGljIGlubGluZSBwZ2RfdCAqZ2V0X3BnZF9mYXN0KHZvaWQpCnsKICAgICAgICB1bnNpZ25l ZCBsb25nICpyZXQ7CgogICAgICAgIGlmICgocmV0ID0gKGNwdV9kYXRhWyhnZXRfY3VycmVudCgp LT5wcm9jZXNzb3IpXS5wZ2RfcXVpY2spKSAhPSAoKHZvaWQgKikwKSkgewogICAgICAgICAgICAg ICAgKGNwdV9kYXRhWyhnZXRfY3VycmVudCgpLT5wcm9jZXNzb3IpXS5wZ2RfcXVpY2spID0gKHVu c2lnbmVkIGxvbmcgKikoKnJldCk7CiAgICAgICAgICAgICAgICByZXRbMF0gPSAwOwogICAgICAg ICAgICAgICAgKGNwdV9kYXRhWyhnZXRfY3VycmVudCgpLT5wcm9jZXNzb3IpXS5wZ3RhYmxlX2Nh Y2hlX3N6KS0tOwogICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgcmV0ID0gKHVuc2lnbmVk IGxvbmcgKilnZXRfcGdkX3Nsb3coKTsKICAgICAgICByZXR1cm4gKHBnZF90ICopcmV0Owp9Cgpz dGF0aWMgaW5saW5lIHZvaWQgZnJlZV9wZ2RfZmFzdChwZ2RfdCAqcGdkKQp7CiAgICAgICAgKih1 bnNpZ25lZCBsb25nICopcGdkID0gKHVuc2lnbmVkIGxvbmcpIChjcHVfZGF0YVsoZ2V0X2N1cnJl bnQoKS0+cHJvY2Vzc29yKV0ucGdkX3F1aWNrKTsKICAgICAgICAoY3B1X2RhdGFbKGdldF9jdXJy ZW50KCktPnByb2Nlc3NvcildLnBnZF9xdWljaykgPSAodW5zaWduZWQgbG9uZyAqKSBwZ2Q7CiAg ICAgICAgKGNwdV9kYXRhWyhnZXRfY3VycmVudCgpLT5wcm9jZXNzb3IpXS5wZ3RhYmxlX2NhY2hl X3N6KSsrOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9wZ2Rfc2xvdyhwZ2RfdCAqcGdkKQp7 CgoKCgoKCgogICAgICAgIGZyZWVfcGFnZXMoKCh1bnNpZ25lZCBsb25nKXBnZCksMCk7Cgp9Cgpz dGF0aWMgaW5saW5lIHB0ZV90ICpwdGVfYWxsb2Nfb25lKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1 bnNpZ25lZCBsb25nIGFkZHJlc3MpCnsKICAgICAgICBwdGVfdCAqcHRlOwoKICAgICAgICBwdGUg PSAocHRlX3QgKikgX19nZXRfZnJlZV9wYWdlcygoKDB4MjAgfCAweDEwIHwgMHg0MCB8IDB4ODAg fCAweDEwMCkpLDApOwogICAgICAgIGlmIChwdGUpCiAgICAgICAgICAgICAgICAoX19idWlsdGlu X2NvbnN0YW50X3AoMCkgPyAoX19idWlsdGluX2NvbnN0YW50X3AoKCgxVUwgPDwgMTIpKSkgPyBf X2NvbnN0YW50X2NfYW5kX2NvdW50X21lbXNldCgoKCh2b2lkICopKHB0ZSkpKSwoKDB4MDEwMTAx MDFVTCoodW5zaWduZWQgY2hhcikoMCkpKSwoKCgxVUwgPDwgMTIpKSkpIDogX19jb25zdGFudF9j X21lbXNldCgoKCh2b2lkICopKHB0ZSkpKSwoKDB4MDEwMTAxMDFVTCoodW5zaWduZWQgY2hhciko MCkpKSwoKCgxVUwgPDwgMTIpKSkpKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCgoKDFVTCA8PCAx MikpKSA/IF9fbWVtc2V0X2dlbmVyaWMoKCgoKHZvaWQgKikocHRlKSkpKSwoKCgwKSkpLCgoKCgx VUwgPDwgMTIpKSkpKSA6IF9fbWVtc2V0X2dlbmVyaWMoKCgodm9pZCAqKShwdGUpKSksKCgwKSks KCgoMVVMIDw8IDEyKSkpKSkpOwogICAgICAgIHJldHVybiBwdGU7Cn0KCnN0YXRpYyBpbmxpbmUg cHRlX3QgKnB0ZV9hbGxvY19vbmVfZmFzdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKewog ICAgICAgIHVuc2lnbmVkIGxvbmcgKnJldDsKCiAgICAgICAgaWYgKChyZXQgPSAodW5zaWduZWQg bG9uZyAqKShjcHVfZGF0YVsoZ2V0X2N1cnJlbnQoKS0+cHJvY2Vzc29yKV0ucHRlX3F1aWNrKSkg IT0gKCh2b2lkICopMCkpIHsKICAgICAgICAgICAgICAgIChjcHVfZGF0YVsoZ2V0X2N1cnJlbnQo KS0+cHJvY2Vzc29yKV0ucHRlX3F1aWNrKSA9ICh1bnNpZ25lZCBsb25nICopKCpyZXQpOwogICAg ICAgICAgICAgICAgcmV0WzBdID0gcmV0WzFdOwogICAgICAgICAgICAgICAgKGNwdV9kYXRhWyhn ZXRfY3VycmVudCgpLT5wcm9jZXNzb3IpXS5wZ3RhYmxlX2NhY2hlX3N6KS0tOwogICAgICAgIH0K ICAgICAgICByZXR1cm4gKHB0ZV90ICopcmV0Owp9CgpzdGF0aWMgaW5saW5lIHZvaWQgcHRlX2Zy ZWVfZmFzdChwdGVfdCAqcHRlKQp7CiAgICAgICAgKih1bnNpZ25lZCBsb25nICopcHRlID0gKHVu c2lnbmVkIGxvbmcpIChjcHVfZGF0YVsoZ2V0X2N1cnJlbnQoKS0+cHJvY2Vzc29yKV0ucHRlX3F1 aWNrKTsKICAgICAgICAoY3B1X2RhdGFbKGdldF9jdXJyZW50KCktPnByb2Nlc3NvcildLnB0ZV9x dWljaykgPSAodW5zaWduZWQgbG9uZyAqKSBwdGU7CiAgICAgICAgKGNwdV9kYXRhWyhnZXRfY3Vy cmVudCgpLT5wcm9jZXNzb3IpXS5wZ3RhYmxlX2NhY2hlX3N6KSsrOwp9CgpzdGF0aWMgX19pbmxp bmVfXyB2b2lkIHB0ZV9mcmVlX3Nsb3cocHRlX3QgKnB0ZSkKewogICAgICAgIGZyZWVfcGFnZXMo KCh1bnNpZ25lZCBsb25nKXB0ZSksMCk7Cn0KIyAxNTkgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9p bmNsdWRlL2FzbS9wZ2FsbG9jLmgiCmV4dGVybiBpbnQgZG9fY2hlY2tfcGd0X2NhY2hlKGludCwg aW50KTsKIyAyMDggIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgi CmV4dGVybiB2b2lkIGZsdXNoX3RsYl9hbGwodm9pZCk7CmV4dGVybiB2b2lkIGZsdXNoX3RsYl9j dXJyZW50X3Rhc2sodm9pZCk7CmV4dGVybiB2b2lkIGZsdXNoX3RsYl9tbShzdHJ1Y3QgbW1fc3Ry dWN0ICopOwpleHRlcm4gdm9pZCBmbHVzaF90bGJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qg KiwgdW5zaWduZWQgbG9uZyk7CgoKCnN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcmFuZ2Uo c3RydWN0IG1tX3N0cnVjdCAqIG1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25n IGVuZCkKewogICAgICAgIGZsdXNoX3RsYl9tbShtbSk7Cn0KCgoKCnN0cnVjdCB0bGJfc3RhdGUK ewogICAgICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKmFjdGl2ZV9tbTsKICAgICAgICBpbnQgc3RhdGU7 Cn07CmV4dGVybiBzdHJ1Y3QgdGxiX3N0YXRlIGNwdV90bGJzdGF0ZVszMl07CgoKCnN0YXRpYyBp bmxpbmUgdm9pZCBmbHVzaF90bGJfcGd0YWJsZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5z aWduZWQgbG9uZyBlbmQpCnsKICAgICAgICBmbHVzaF90bGJfbW0obW0pOwp9CiMgOCAiL3Vzci9z cmMvbGludXgtMi40LjIwL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgiIDIKIyAxNyAiL3Vzci9z cmMvbGludXgtMi40LjIwL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgiCnN0YXRpYyBpbmxpbmUg dm9pZCBlbnRlcl9sYXp5X3RsYihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHRhc2tfc3Ry dWN0ICp0c2ssIHVuc2lnbmVkIGNwdSkKewogICAgICAgIGlmKGNwdV90bGJzdGF0ZVtjcHVdLnN0 YXRlID09IDEpCiAgICAgICAgICAgICAgICBjcHVfdGxic3RhdGVbY3B1XS5zdGF0ZSA9IDI7Cn0K CgoKCgoKc3RhdGljIGlubGluZSB2b2lkIHN3aXRjaF9tbShzdHJ1Y3QgbW1fc3RydWN0ICpwcmV2 LCBzdHJ1Y3QgbW1fc3RydWN0ICpuZXh0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5zaWdu ZWQgY3B1KQp7CiAgICAgICAgaWYgKHByZXYgIT0gbmV4dCkgewoKICAgICAgICAgICAgICAgIGNs ZWFyX2JpdChjcHUsICZwcmV2LT5jcHVfdm1fbWFzayk7CgoKCiAgICAgICAgICAgICAgICBpZiAo cHJldi0+Y29udGV4dC5zZWdtZW50cyAhPSBuZXh0LT5jb250ZXh0LnNlZ21lbnRzKQogICAgICAg ICAgICAgICAgICAgICAgICBsb2FkX0xEVChuZXh0KTsKCiAgICAgICAgICAgICAgICBjcHVfdGxi c3RhdGVbY3B1XS5zdGF0ZSA9IDE7CiAgICAgICAgICAgICAgICBjcHVfdGxic3RhdGVbY3B1XS5h Y3RpdmVfbW0gPSBuZXh0OwoKICAgICAgICAgICAgICAgIHNldF9iaXQoY3B1LCAmbmV4dC0+Y3B1 X3ZtX21hc2spOwogICAgICAgICAgICAgICAgc2V0X2JpdChjcHUsICZuZXh0LT5jb250ZXh0LmNw dXZhbGlkKTsKCiAgICAgICAgICAgICAgICBhc20gdm9sYXRpbGUoIm1vdmwgJTAsJSVjcjMiOiA6 InIiICgoKHVuc2lnbmVkIGxvbmcpKG5leHQtPnBnZCktKCh1bnNpZ25lZCBsb25nKSgweEMwMDAw MDAwKSkpKSk7OwogICAgICAgIH0KCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBjcHVf dGxic3RhdGVbY3B1XS5zdGF0ZSA9IDE7CiAgICAgICAgICAgICAgICBpZihjcHVfdGxic3RhdGVb Y3B1XS5hY3RpdmVfbW0gIT0gbmV4dCkKICAgICAgICAgICAgICAgICAgICAgICAgX19vdXRfb2Zf bGluZV9idWcoNTEpOwogICAgICAgICAgICAgICAgaWYoIXRlc3RfYW5kX3NldF9iaXQoY3B1LCAm bmV4dC0+Y3B1X3ZtX21hc2spKSB7CgoKCiAgICAgICAgICAgICAgICAgICAgICAgIGFzbSB2b2xh dGlsZSgibW92bCAlMCwlJWNyMyI6IDoiciIgKCgodW5zaWduZWQgbG9uZykobmV4dC0+cGdkKS0o KHVuc2lnbmVkIGxvbmcpKDB4QzAwMDAwMDApKSkpKTs7CiAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgICAgICBpZiAoIXRlc3RfYW5kX3NldF9iaXQoY3B1LCAmbmV4dC0+Y29udGV4dC5jcHV2 YWxpZCkpCiAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRfTERUKG5leHQpOwogICAgICAgIH0K Cn0KIyAzOCAic2NoZWQuYyIgMgoKZXh0ZXJuIHZvaWQgdGltZXJfYmgodm9pZCk7CmV4dGVybiB2 b2lkIHRxdWV1ZV9iaCh2b2lkKTsKZXh0ZXJuIHZvaWQgaW1tZWRpYXRlX2JoKHZvaWQpOwoKCgoK CnVuc2lnbmVkIHNlY3VyZWJpdHMgPSAweDAwMDAwMDAwOwoKZXh0ZXJuIHZvaWQgbWVtX3VzZSh2 b2lkKTsKIyA4MiAic2NoZWQuYyIKc3RydWN0IHRhc2tfc3RydWN0ICogaW5pdF90YXNrc1szMl0g PSB7Jihpbml0X3Rhc2tfdW5pb24udGFzayksIH07CiMgOTUgInNjaGVkLmMiCnNwaW5sb2NrX3Qg cnVucXVldWVfbG9jayBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXygoMSA8PCAoKDUpKSkpLCBf X3NlY3Rpb25fXygiLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQiKSkpID0gKHNwaW5sb2NrX3QpIHsg MSB9Owpyd2xvY2tfdCB0YXNrbGlzdF9sb2NrIF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKCgx IDw8ICgoNSkpKSksIF9fc2VjdGlvbl9fKCIuZGF0YS5jYWNoZWxpbmVfYWxpZ25lZCIpKSkgPSAo cndsb2NrX3QpIHsgMHgwMTAwMDAwMCB9OwoKc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgcnVucXVl dWVfaGVhZCA9IHsgJihydW5xdWV1ZV9oZWFkKSwgJihydW5xdWV1ZV9oZWFkKSB9OwoKCgoKCnN0 YXRpYyB1bmlvbiB7CiAgICAgICAgc3RydWN0IHNjaGVkdWxlX2RhdGEgewogICAgICAgICAgICAg ICAgc3RydWN0IHRhc2tfc3RydWN0ICogY3VycjsKICAgICAgICAgICAgICAgIGN5Y2xlc190IGxh c3Rfc2NoZWR1bGU7CiAgICAgICAgfSBzY2hlZHVsZV9kYXRhOwogICAgICAgIGNoYXIgX19wYWQg WygxIDw8ICgoNSkpKV07Cn0gYWxpZ25lZF9kYXRhIFszMl0gX19hdHRyaWJ1dGVfXygoX19hbGln bmVkX18oKDEgPDwgKCg1KSkpKSwgX19zZWN0aW9uX18oIi5kYXRhLmNhY2hlbGluZV9hbGlnbmVk IikpKSA9IHsge3smKGluaXRfdGFza191bmlvbi50YXNrKSwwfX19OwoKCgoKc3RydWN0IGtlcm5l bF9zdGF0IGtzdGF0OwpleHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZF9yZWFwZXI7CiMg MTMxICJzY2hlZC5jIgp2b2lkIHNjaGVkdWxpbmdfZnVuY3Rpb25zX3N0YXJ0X2hlcmUodm9pZCkg eyB9CiMgMTQ3ICJzY2hlZC5jIgpzdGF0aWMgaW5saW5lIGludCBnb29kbmVzcyhzdHJ1Y3QgdGFz a19zdHJ1Y3QgKiBwLCBpbnQgdGhpc19jcHUsIHN0cnVjdCBtbV9zdHJ1Y3QgKnRoaXNfbW0pCnsK ICAgICAgICBpbnQgd2VpZ2h0OwoKCgoKCgogICAgICAgIHdlaWdodCA9IC0xOwogICAgICAgIGlm IChwLT5wb2xpY3kgJiAweDEwKQogICAgICAgICAgICAgICAgZ290byBvdXQ7CgoKCgogICAgICAg IGlmIChwLT5wb2xpY3kgPT0gMCkgewoKCgoKCgoKICAgICAgICAgICAgICAgIHdlaWdodCA9IHAt PmNvdW50ZXI7CiAgICAgICAgICAgICAgICBpZiAoIXdlaWdodCkKICAgICAgICAgICAgICAgICAg ICAgICAgZ290byBvdXQ7CgoKCgogICAgICAgICAgICAgICAgaWYgKHAtPnByb2Nlc3NvciA9PSB0 aGlzX2NwdSkKICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0ICs9IDE1OwoKCgogICAgICAg ICAgICAgICAgaWYgKHAtPm1tID09IHRoaXNfbW0gfHwgIXAtPm1tKQogICAgICAgICAgICAgICAg ICAgICAgICB3ZWlnaHQgKz0gMTsKICAgICAgICAgICAgICAgIHdlaWdodCArPSAyMCAtIHAtPm5p Y2U7CiAgICAgICAgICAgICAgICBnb3RvIG91dDsKICAgICAgICB9CgoKCgoKCiAgICAgICAgd2Vp Z2h0ID0gMTAwMCArIHAtPnJ0X3ByaW9yaXR5OwpvdXQ6CiAgICAgICAgcmV0dXJuIHdlaWdodDsK fQoKCgoKCnN0YXRpYyBpbmxpbmUgaW50IHByZWVtcHRpb25fZ29vZG5lc3Moc3RydWN0IHRhc2tf c3RydWN0ICogcHJldiwgc3RydWN0IHRhc2tfc3RydWN0ICogcCwgaW50IGNwdSkKewogICAgICAg IHJldHVybiBnb29kbmVzcyhwLCBjcHUsIHByZXYtPmFjdGl2ZV9tbSkgLSBnb29kbmVzcyhwcmV2 LCBjcHUsIHByZXYtPmFjdGl2ZV9tbSk7Cn0KCgoKCgoKc3RhdGljIHZvaWQgcmVzY2hlZHVsZV9p ZGxlKHN0cnVjdCB0YXNrX3N0cnVjdCAqIHApIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsK CnN0YXRpYyB2b2lkIHJlc2NoZWR1bGVfaWRsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBwKQp7Cgog ICAgICAgIGludCB0aGlzX2NwdSA9IChnZXRfY3VycmVudCgpLT5wcm9jZXNzb3IpOwogICAgICAg IHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCAqdGFyZ2V0X3RzazsKICAgICAgICBpbnQgY3B1LCBi ZXN0X2NwdSwgaSwgbWF4X3ByaW87CiAgICAgICAgY3ljbGVzX3Qgb2xkZXN0X2lkbGU7CgoKCgoK ICAgICAgICBiZXN0X2NwdSA9IHAtPnByb2Nlc3NvcjsKICAgICAgICBpZiAoKCghKChzdXNwZW5k X3Rhc2sgPiAwKSAmJiAoKHAtPmZsYWdzICYgMHgwMDAyMDAwMCkgPT0gMCkgJiYgKCghKHAtPmZs YWdzICYgMHgwMDA0MDAwMCkpIHx8IChwLT5mbGFncyAmIDB4MDAwMDgwMDApKSAmJiAocC0+cGlk ICE9IHN1c3BlbmRfdGFzaykgJiYgKHAtPnN0YXRlICE9IDQpICYmIChzdHJjbXAocC0+Y29tbSwg InN3YXBwZXIiKSAhPSAwKSkpICYmICgocCktPmNwdXNfcnVubmFibGUgJiAocCktPmNwdXNfYWxs b3dlZCAmICgxVUwgPDwgYmVzdF9jcHUpKSkpIHsKICAgICAgICAgICAgICAgIHRzayA9IChpbml0 X3Rhc2tzW2NwdV9udW1iZXJfbWFwKGJlc3RfY3B1KV0pOwogICAgICAgICAgICAgICAgaWYgKGFs aWduZWRfZGF0YVsoYmVzdF9jcHUpXS5zY2hlZHVsZV9kYXRhLmN1cnIgPT0gdHNrKSB7CiAgICAg ICAgICAgICAgICAgICAgICAgIGludCBuZWVkX3Jlc2NoZWQ7CnNlbmRfbm93X2lkbGU6CgoKCgoK ICAgICAgICAgICAgICAgICAgICAgICAgbmVlZF9yZXNjaGVkID0gdHNrLT5uZWVkX3Jlc2NoZWQ7 CiAgICAgICAgICAgICAgICAgICAgICAgIHRzay0+bmVlZF9yZXNjaGVkID0gMTsKICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKChiZXN0X2NwdSAhPSB0aGlzX2NwdSkgJiYgIW5lZWRfcmVzY2hl ZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbXBfc2VuZF9yZXNjaGVkdWxlKGJl c3RfY3B1KTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAg fQogICAgICAgIH0KIyAyNTMgInNjaGVkLmMiCiAgICAgICAgb2xkZXN0X2lkbGUgPSAoY3ljbGVz X3QpIC0xOwogICAgICAgIHRhcmdldF90c2sgPSAoKHZvaWQgKikwKTsKICAgICAgICBtYXhfcHJp byA9IDA7CgogICAgICAgIGZvciAoaSA9IDA7IGkgPCBzbXBfbnVtX2NwdXM7IGkrKykgewogICAg ICAgICAgICAgICAgY3B1ID0gY3B1X2xvZ2ljYWxfbWFwKGkpOwogICAgICAgICAgICAgICAgaWYg KCEoKCEoKHN1c3BlbmRfdGFzayA+IDApICYmICgocC0+ZmxhZ3MgJiAweDAwMDIwMDAwKSA9PSAw KSAmJiAoKCEocC0+ZmxhZ3MgJiAweDAwMDQwMDAwKSkgfHwgKHAtPmZsYWdzICYgMHgwMDAwODAw MCkpICYmIChwLT5waWQgIT0gc3VzcGVuZF90YXNrKSAmJiAocC0+c3RhdGUgIT0gNCkgJiYgKHN0 cmNtcChwLT5jb21tLCAic3dhcHBlciIpICE9IDApKSkgJiYgKChwKS0+Y3B1c19ydW5uYWJsZSAm IChwKS0+Y3B1c19hbGxvd2VkICYgKDFVTCA8PCBjcHUpKSkpCiAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgdHNrID0gYWxpZ25lZF9kYXRhWyhjcHUpXS5z Y2hlZHVsZV9kYXRhLmN1cnI7CgoKCgoKICAgICAgICAgICAgICAgIGlmICh0c2sgPT0gKGluaXRf dGFza3NbY3B1X251bWJlcl9tYXAoY3B1KV0pKSB7CgoKCgoKICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKHNtcF9udW1fc2libGluZ3MgPT0gMikgewogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGlmIChhbGlnbmVkX2RhdGFbKGNwdV9zaWJsaW5nX21hcFtjcHVdKV0uc2NoZWR1bGVf ZGF0YS5jdXJyID09CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbml0X3Rh c2tzW2NwdV9udW1iZXJfbWFwKGNwdV9zaWJsaW5nX21hcFtjcHVdKV0pKSB7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRlc3RfaWRsZSA9IGFsaWduZWRfZGF0YVso Y3B1KV0uc2NoZWR1bGVfZGF0YS5sYXN0X3NjaGVkdWxlOwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdGFyZ2V0X3RzayA9IHRzazsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IH0KCiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGlm IChhbGlnbmVkX2RhdGFbKGNwdSldLnNjaGVkdWxlX2RhdGEubGFzdF9zY2hlZHVsZSA8IG9sZGVz dF9pZGxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkZXN0X2lkbGUgPSBh bGlnbmVkX2RhdGFbKGNwdSldLnNjaGVkdWxlX2RhdGEubGFzdF9zY2hlZHVsZTsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfdHNrID0gdHNrOwogICAgICAgICAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAg ICBpZiAob2xkZXN0X2lkbGUgPT0gLTFVTEwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgcHJpbyA9IHByZWVtcHRpb25fZ29vZG5lc3ModHNrLCBwLCBjcHUpOwoKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJpbyA+IG1heF9wcmlvKSB7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfcHJpbyA9IHByaW87CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfdHNrID0gdHNrOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0c2sgPSB0YXJnZXRfdHNrOwogICAgICAg IGlmICh0c2spIHsKICAgICAgICAgICAgICAgIGlmIChvbGRlc3RfaWRsZSAhPSAtMVVMTCkgewog ICAgICAgICAgICAgICAgICAgICAgICBiZXN0X2NwdSA9IHRzay0+cHJvY2Vzc29yOwogICAgICAg ICAgICAgICAgICAgICAgICBnb3RvIHNlbmRfbm93X2lkbGU7CiAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgICAgICB0c2stPm5lZWRfcmVzY2hlZCA9IDE7CiAgICAgICAgICAgICAgICBpZiAo dHNrLT5wcm9jZXNzb3IgIT0gdGhpc19jcHUpCiAgICAgICAgICAgICAgICAgICAgICAgIHNtcF9z ZW5kX3Jlc2NoZWR1bGUodHNrLT5wcm9jZXNzb3IpOwogICAgICAgIH0KICAgICAgICByZXR1cm47 CiMgMzE5ICJzY2hlZC5jIgp9CiMgMzMyICJzY2hlZC5jIgpzdGF0aWMgaW5saW5lIHZvaWQgYWRk X3RvX3J1bnF1ZXVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqIHApCnsKICAgICAgICBsaXN0X2FkZF90 YWlsKCZwLT5ydW5fbGlzdCwgJnJ1bnF1ZXVlX2hlYWQpOwogICAgICAgIG5yX3J1bm5pbmcrKzsK fQoKc3RhdGljIGlubGluZSB2b2lkIG1vdmVfbGFzdF9ydW5xdWV1ZShzdHJ1Y3QgdGFza19zdHJ1 Y3QgKiBwKQp7CiAgICAgICAgbGlzdF9kZWwoJnAtPnJ1bl9saXN0KTsKICAgICAgICBsaXN0X2Fk ZF90YWlsKCZwLT5ydW5fbGlzdCwgJnJ1bnF1ZXVlX2hlYWQpOwp9CiMgMzUyICJzY2hlZC5jIgpz dGF0aWMgaW5saW5lIGludCB0cnlfdG9fd2FrZV91cChzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBwLCBp bnQgc3luY2hyb25vdXMpCnsKICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogICAgICAgIGlu dCBzdWNjZXNzID0gMDsKCgoKCiAgICAgICAgZG8geyBkbyB7IF9fYXNtX18gX192b2xhdGlsZV9f KCJwdXNoZmwgOyBwb3BsICUwIjoiPWciIChmbGFncyk6ICk7IF9fYXNtX18gX192b2xhdGlsZV9f KCJjbGkiOiA6IDoibWVtb3J5Iik7IH0gd2hpbGUoMCk7OyBzcGluX2xvY2soJnJ1bnF1ZXVlX2xv Y2spOyB9IHdoaWxlICgwKTsKICAgICAgICBwLT5zdGF0ZSA9IDA7CiAgICAgICAgaWYgKHRhc2tf b25fcnVucXVldWUocCkpCiAgICAgICAgICAgICAgICBnb3RvIG91dDsKICAgICAgICBhZGRfdG9f cnVucXVldWUocCk7CiAgICAgICAgaWYgKCFzeW5jaHJvbm91cyB8fCAhKHAtPmNwdXNfYWxsb3dl ZCAmICgxVUwgPDwgKGdldF9jdXJyZW50KCktPnByb2Nlc3NvcikpKSkKICAgICAgICAgICAgICAg IHJlc2NoZWR1bGVfaWRsZShwKTsKICAgICAgICBzdWNjZXNzID0gMTsKb3V0OgogICAgICAgIGRv IHsgc3Bpbl91bmxvY2soJnJ1bnF1ZXVlX2xvY2spOyBfX2FzbV9fIF9fdm9sYXRpbGVfXygicHVz aGwgJTAgOyBwb3BmbCI6IDoiZyIgKGZsYWdzKToibWVtb3J5IiwgImNjIik7IH0gd2hpbGUgKDAp OwogICAgICAgIHJldHVybiBzdWNjZXNzOwp9CgppbmxpbmUgaW50IHdha2VfdXBfcHJvY2Vzcyhz dHJ1Y3QgdGFza19zdHJ1Y3QgKiBwKQp7CiAgICAgICAgcmV0dXJuIHRyeV90b193YWtlX3VwKHAs IDApOwp9CgpzdGF0aWMgdm9pZCBwcm9jZXNzX3RpbWVvdXQodW5zaWduZWQgbG9uZyBfX2RhdGEp CnsKICAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBwID0gKHN0cnVjdCB0YXNrX3N0cnVjdCAq KSBfX2RhdGE7CgogICAgICAgIHdha2VfdXBfcHJvY2VzcyhwKTsKfQojIDQxMSAic2NoZWQuYyIK c2lnbmVkIGxvbmcgc2NoZWR1bGVfdGltZW91dChzaWduZWQgbG9uZyB0aW1lb3V0KQp7CiAgICAg ICAgc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CiAgICAgICAgdW5zaWduZWQgbG9uZyBleHBpcmU7 CgogICAgICAgIHN3aXRjaCAodGltZW91dCkKICAgICAgICB7CiAgICAgICAgY2FzZSAoKGxvbmcp KH4wVUw+PjEpKToKCgoKCgoKCiAgICAgICAgICAgICAgICBzY2hlZHVsZSgpOwogICAgICAgICAg ICAgICAgZ290byBvdXQ7CiAgICAgICAgZGVmYXVsdDoKCgoKCgoKCiAgICAgICAgICAgICAgICBp ZiAodGltZW91dCA8IDApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAg IHByaW50aygiPDM+IiAic2NoZWR1bGVfdGltZW91dDogd3JvbmcgdGltZW91dCAiCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUgJWx4IGZyb20gJXBcbiIsIHRpbWVvdXQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkp OwogICAgICAgICAgICAgICAgICAgICAgICBnZXRfY3VycmVudCgpLT5zdGF0ZSA9IDA7CiAgICAg ICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0OwogICAgICAgICAgICAgICAgfQogICAgICAgIH0K CiAgICAgICAgZXhwaXJlID0gdGltZW91dCArIGppZmZpZXM7CgogICAgICAgIGluaXRfdGltZXIo JnRpbWVyKTsKICAgICAgICB0aW1lci5leHBpcmVzID0gZXhwaXJlOwogICAgICAgIHRpbWVyLmRh dGEgPSAodW5zaWduZWQgbG9uZykgZ2V0X2N1cnJlbnQoKTsKICAgICAgICB0aW1lci5mdW5jdGlv biA9IHByb2Nlc3NfdGltZW91dDsKCiAgICAgICAgYWRkX3RpbWVyKCZ0aW1lcik7CiAgICAgICAg c2NoZWR1bGUoKTsKICAgICAgICBkZWxfdGltZXJfc3luYygmdGltZXIpOwoKICAgICAgICB0aW1l b3V0ID0gZXhwaXJlIC0gamlmZmllczsKCiBvdXQ6CiAgICAgICAgcmV0dXJuIHRpbWVvdXQgPCAw ID8gMCA6IHRpbWVvdXQ7Cn0KCgoKCgoKc3RhdGljIGlubGluZSB2b2lkIF9fc2NoZWR1bGVfdGFp bChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYpCnsKCiAgICAgICAgaW50IHBvbGljeTsKIyA0ODMg InNjaGVkLmMiCiAgICAgICAgcG9saWN5ID0gcHJldi0+cG9saWN5OwogICAgICAgIHByZXYtPnBv bGljeSA9IHBvbGljeSAmIH4weDEwOwogICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgiIjog OiA6Im1lbW9yeSIpOwoKCgoKCgogICAgICAgIHRhc2tfbG9jayhwcmV2KTsKICAgICAgICB0YXNr X3JlbGVhc2VfY3B1KHByZXYpOwogICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgibG9jazsg YWRkbCAkMCwwKCUlZXNwKSI6IDogOiJtZW1vcnkiKTsKICAgICAgICBpZiAocHJldi0+c3RhdGUg PT0gMCkKICAgICAgICAgICAgICAgIGdvdG8gbmVlZHNfcmVzY2hlZDsKCm91dF91bmxvY2s6CiAg ICAgICAgdGFza191bmxvY2socHJldik7CiAgICAgICAgcmV0dXJuOwojIDUxMiAic2NoZWQuYyIK bmVlZHNfcmVzY2hlZDoKICAgICAgICB7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGZs YWdzOwoKCgoKCiAgICAgICAgICAgICAgICBpZiAoKHByZXYgPT0gKGluaXRfdGFza3NbY3B1X251 bWJlcl9tYXAoKGdldF9jdXJyZW50KCktPnByb2Nlc3NvcikpXSkpIHx8CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwb2xpY3kgJiAweDEwKSkKICAgICAg ICAgICAgICAgICAgICAgICAgZ290byBvdXRfdW5sb2NrOwoKICAgICAgICAgICAgICAgIGRvIHsg ZG8geyBfX2FzbV9fIF9fdm9sYXRpbGVfXygicHVzaGZsIDsgcG9wbCAlMCI6Ij1nIiAoZmxhZ3Mp OiApOyBfX2FzbV9fIF9fdm9sYXRpbGVfXygiY2xpIjogOiA6Im1lbW9yeSIpOyB9IHdoaWxlKDAp Ozsgc3Bpbl9sb2NrKCZydW5xdWV1ZV9sb2NrKTsgfSB3aGlsZSAoMCk7CiAgICAgICAgICAgICAg ICBpZiAoKHByZXYtPnN0YXRlID09IDApICYmICEoKHByZXYpLT5jcHVzX3J1bm5hYmxlICE9IH4w VUwpKQogICAgICAgICAgICAgICAgICAgICAgICByZXNjaGVkdWxlX2lkbGUocHJldik7CiAgICAg ICAgICAgICAgICBkbyB7IHNwaW5fdW5sb2NrKCZydW5xdWV1ZV9sb2NrKTsgX19hc21fXyBfX3Zv bGF0aWxlX18oInB1c2hsICUwIDsgcG9wZmwiOiA6ImciIChmbGFncyk6Im1lbW9yeSIsICJjYyIp OyB9IHdoaWxlICgwKTsKICAgICAgICAgICAgICAgIGdvdG8gb3V0X3VubG9jazsKICAgICAgICB9 CgoKCn0KCiBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDApKSkgdm9pZCBzY2hlZHVsZV90YWlsKHN0 cnVjdCB0YXNrX3N0cnVjdCAqcHJldikKewogICAgICAgIF9fc2NoZWR1bGVfdGFpbChwcmV2KTsK fQojIDU1MCAic2NoZWQuYyIKIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMCkpKSB2b2lkIHNjaGVk dWxlKHZvaWQpCnsKICAgICAgICBzdHJ1Y3Qgc2NoZWR1bGVfZGF0YSAqIHNjaGVkX2RhdGE7CiAg ICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LCAqbmV4dCwgKnA7CiAgICAgICAgc3RydWN0 IGxpc3RfaGVhZCAqdG1wOwogICAgICAgIGludCB0aGlzX2NwdSwgYzsKCgogICAgICAgIHByZWZl dGNodygmcnVucXVldWVfbG9jayk7CgogICAgICAgIGRvIHsgaWYgKF9fYnVpbHRpbl9leHBlY3Qo KCghZ2V0X2N1cnJlbnQoKS0+YWN0aXZlX21tKSE9MCksMCkpIF9fYXNtX18gX192b2xhdGlsZV9f KCAidWQyXG4iICJcdC53b3JkICVjMFxuIiAiXHQubG9uZyAlYzFcbiIgOiA6ICJpIiAoNTYwKSwg ImkiICgic2NoZWQuYyIpKTsgfSB3aGlsZSgwKTsKbmVlZF9yZXNjaGVkX2JhY2s6CiAgICAgICAg cHJldiA9IGdldF9jdXJyZW50KCk7CiAgICAgICAgdGhpc19jcHUgPSBwcmV2LT5wcm9jZXNzb3I7 CgogICAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0KCgoeyBpbnQgX19jcHUgPSAoZ2V0X2N1cnJl bnQoKS0+cHJvY2Vzc29yKTsgKChpcnFfc3RhdFsoX19jcHUpXS5fX2xvY2FsX2lycV9jb3VudCkg KyAoaXJxX3N0YXRbKF9fY3B1KV0uX19sb2NhbF9iaF9jb3VudCkgIT0gMCk7IH0pKSwwKSkgewog ICAgICAgICAgICAgICAgcHJpbnRrKCJTY2hlZHVsaW5nIGluIGludGVycnVwdFxuIik7CiAgICAg ICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyggInVkMlxuIiAiXHQud29yZCAlYzBcbiIg Ilx0LmxvbmcgJWMxXG4iIDogOiAiaSIgKDU2NyksICJpIiAoInNjaGVkLmMiKSk7CiAgICAgICAg fQoKICAgICAgICBkbyB7IGlmIChwcmV2LT5sb2NrX2RlcHRoID49IDApIHNwaW5fdW5sb2NrKCZr ZXJuZWxfZmxhZ19jYWNoZWxpbmUubG9jayk7IHJlbGVhc2VfaXJxbG9jayh0aGlzX2NwdSk7IF9f YXNtX18gX192b2xhdGlsZV9fKCJzdGkiOiA6IDoibWVtb3J5Iik7IH0gd2hpbGUgKDApOwoKCgoK CiAgICAgICAgc2NoZWRfZGF0YSA9ICYgYWxpZ25lZF9kYXRhW3RoaXNfY3B1XS5zY2hlZHVsZV9k YXRhOwoKICAgICAgICBkbyB7IF9fYXNtX18gX192b2xhdGlsZV9fKCJjbGkiOiA6IDoibWVtb3J5 Iik7IHNwaW5fbG9jaygmcnVucXVldWVfbG9jayk7IH0gd2hpbGUgKDApOwoKCiAgICAgICAgaWYg KF9fYnVpbHRpbl9leHBlY3QoKHByZXYtPnBvbGljeSA9PSAyKSwwKSkKICAgICAgICAgICAgICAg IGlmICghcHJldi0+Y291bnRlcikgewogICAgICAgICAgICAgICAgICAgICAgICBwcmV2LT5jb3Vu dGVyID0gKCgoMjAtKHByZXYtPm5pY2UpKSA+PiAyKSsxKTsKICAgICAgICAgICAgICAgICAgICAg ICAgbW92ZV9sYXN0X3J1bnF1ZXVlKHByZXYpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICBz d2l0Y2ggKHByZXYtPnN0YXRlKSB7CiAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAg ICAgICAgICAgICAgIGlmIChzaWduYWxfcGVuZGluZyhwcmV2KSkgewogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHByZXYtPnN0YXRlID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg ZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgZGVsX2Zyb21fcnVucXVldWUocHJldik7 CiAgICAgICAgICAgICAgICBjYXNlIDA6OwogICAgICAgIH0KICAgICAgICBwcmV2LT5uZWVkX3Jl c2NoZWQgPSAwOwoKCgoKCnJlcGVhdF9zY2hlZHVsZToKCgoKICAgICAgICBuZXh0ID0gKGluaXRf dGFza3NbY3B1X251bWJlcl9tYXAodGhpc19jcHUpXSk7CiAgICAgICAgYyA9IC0xMDAwOwogICAg ICAgIGZvciAodG1wID0gKCZydW5xdWV1ZV9oZWFkKS0+bmV4dCwgcHJlZmV0Y2godG1wLT5uZXh0 KTsgdG1wICE9ICgmcnVucXVldWVfaGVhZCk7IHRtcCA9IHRtcC0+bmV4dCwgcHJlZmV0Y2godG1w LT5uZXh0KSkgewogICAgICAgICAgICAgICAgcCA9ICgoc3RydWN0IHRhc2tfc3RydWN0ICopKChj aGFyICopKHRtcCktKHVuc2lnbmVkIGxvbmcpKCYoKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTApLT5y dW5fbGlzdCkpKTsKICAgICAgICAgICAgICAgIGlmICgoKCEoKHN1c3BlbmRfdGFzayA+IDApICYm ICgocC0+ZmxhZ3MgJiAweDAwMDIwMDAwKSA9PSAwKSAmJiAoKCEocC0+ZmxhZ3MgJiAweDAwMDQw MDAwKSkgfHwgKHAtPmZsYWdzICYgMHgwMDAwODAwMCkpICYmIChwLT5waWQgIT0gc3VzcGVuZF90 YXNrKSAmJiAocC0+c3RhdGUgIT0gNCkgJiYgKHN0cmNtcChwLT5jb21tLCAic3dhcHBlciIpICE9 IDApKSkgJiYgKChwKS0+Y3B1c19ydW5uYWJsZSAmIChwKS0+Y3B1c19hbGxvd2VkICYgKDFVTCA8 PCB0aGlzX2NwdSkpKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2VpZ2h0ID0gZ29v ZG5lc3MocCwgdGhpc19jcHUsIHByZXYtPmFjdGl2ZV9tbSk7CiAgICAgICAgICAgICAgICAgICAg ICAgIGlmICh3ZWlnaHQgPiBjKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSB3 ZWlnaHQsIG5leHQgPSBwOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCgogICAgICAgIGlm IChfX2J1aWx0aW5fZXhwZWN0KCghYyksMCkpIHsKICAgICAgICAgICAgICAgIHN0cnVjdCB0YXNr X3N0cnVjdCAqcDsKCiAgICAgICAgICAgICAgICBkbyB7IHNwaW5fdW5sb2NrKCZydW5xdWV1ZV9s b2NrKTsgX19hc21fXyBfX3ZvbGF0aWxlX18oInN0aSI6IDogOiJtZW1vcnkiKTsgfSB3aGlsZSAo MCk7CiAgICAgICAgICAgICAgICByZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOwogICAgICAgICAg ICAgICAgZm9yIChwID0gJihpbml0X3Rhc2tfdW5pb24udGFzaykgOyAocCA9IHAtPm5leHRfdGFz aykgIT0gJihpbml0X3Rhc2tfdW5pb24udGFzaykgOyApCiAgICAgICAgICAgICAgICAgICAgICAg IHAtPmNvdW50ZXIgPSAocC0+Y291bnRlciA+PiAxKSArICgoKDIwLShwLT5uaWNlKSkgPj4gMikr MSk7CiAgICAgICAgICAgICAgICBhc20gdm9sYXRpbGUoImxvY2sgOyBpbmNsICUwIiA6Ij1tIiAo KCZ0YXNrbGlzdF9sb2NrKS0+bG9jaykgOiA6ICJtZW1vcnkiKTsKICAgICAgICAgICAgICAgIGRv IHsgX19hc21fXyBfX3ZvbGF0aWxlX18oImNsaSI6IDogOiJtZW1vcnkiKTsgc3Bpbl9sb2NrKCZy dW5xdWV1ZV9sb2NrKTsgfSB3aGlsZSAoMCk7CiAgICAgICAgICAgICAgICBnb3RvIHJlcGVhdF9z Y2hlZHVsZTsKICAgICAgICB9CgoKCgoKCiAgICAgICAgc2NoZWRfZGF0YS0+Y3VyciA9IG5leHQ7 CiAgICAgICAgdGFza19zZXRfY3B1KG5leHQsIHRoaXNfY3B1KTsKICAgICAgICBkbyB7IHNwaW5f dW5sb2NrKCZydW5xdWV1ZV9sb2NrKTsgX19hc21fXyBfX3ZvbGF0aWxlX18oInN0aSI6IDogOiJt ZW1vcnkiKTsgfSB3aGlsZSAoMCk7CgogICAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0KCgoKHN1 c3BlbmRfdGFzayA+IDApICYmICgobmV4dC0+ZmxhZ3MgJiAweDAwMDIwMDAwKSA9PSAwKSAmJiAo KCEobmV4dC0+ZmxhZ3MgJiAweDAwMDQwMDAwKSkgfHwgKG5leHQtPmZsYWdzICYgMHgwMDAwODAw MCkpICYmIChuZXh0LT5waWQgIT0gc3VzcGVuZF90YXNrKSAmJiAobmV4dC0+c3RhdGUgIT0gNCkg JiYgKHN0cmNtcChuZXh0LT5jb21tLCAic3dhcHBlciIpICE9IDApKSksMCkpCiAgICAgICAgICAg ICAgICBwcmludGsoIlNjaGVkdWxpbmcgc3VzcGVuZGVkIHRhc2sgJXMhXG4iLCBuZXh0LT5jb21t KTsKCiAgICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QoKHByZXYgPT0gbmV4dCksMCkpIHsKCiAg ICAgICAgICAgICAgICBwcmV2LT5wb2xpY3kgJj0gfjB4MTA7CiAgICAgICAgICAgICAgICBnb3Rv IHNhbWVfcHJvY2VzczsKICAgICAgICB9CiMgNjU3ICJzY2hlZC5jIgogICAgICAgIHNjaGVkX2Rh dGEtPmxhc3Rfc2NoZWR1bGUgPSBnZXRfY3ljbGVzKCk7CiMgNjY3ICJzY2hlZC5jIgogICAgICAg IGtzdGF0LmNvbnRleHRfc3d0Y2grKzsKIyA2NzcgInNjaGVkLmMiCiAgICAgICAgZG8geyB9IHdo aWxlKDApOwogICAgICAgIHsKICAgICAgICAgICAgICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0g bmV4dC0+bW07CiAgICAgICAgICAgICAgICBzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSA9IHByZXYt PmFjdGl2ZV9tbTsKICAgICAgICAgICAgICAgIGlmICghbW0pIHsKICAgICAgICAgICAgICAgICAg ICAgICAgZG8geyBpZiAoX19idWlsdGluX2V4cGVjdCgoKG5leHQtPmFjdGl2ZV9tbSkhPTApLDAp KSBfX2FzbV9fIF9fdm9sYXRpbGVfXyggInVkMlxuIiAiXHQud29yZCAlYzBcbiIgIlx0Lmxvbmcg JWMxXG4iIDogOiAiaSIgKDY4MiksICJpIiAoInNjaGVkLmMiKSk7IH0gd2hpbGUoMCk7CiAgICAg ICAgICAgICAgICAgICAgICAgIG5leHQtPmFjdGl2ZV9tbSA9IG9sZG1tOwogICAgICAgICAgICAg ICAgICAgICAgICBhdG9taWNfaW5jKCZvbGRtbS0+bW1fY291bnQpOwogICAgICAgICAgICAgICAg ICAgICAgICBlbnRlcl9sYXp5X3RsYihvbGRtbSwgbmV4dCwgdGhpc19jcHUpOwogICAgICAgICAg ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgZG8geyBpZiAoX19idWlsdGlu X2V4cGVjdCgoKG5leHQtPmFjdGl2ZV9tbSAhPSBtbSkhPTApLDApKSBfX2FzbV9fIF9fdm9sYXRp bGVfXyggInVkMlxuIiAiXHQud29yZCAlYzBcbiIgIlx0LmxvbmcgJWMxXG4iIDogOiAiaSIgKDY4 NyksICJpIiAoInNjaGVkLmMiKSk7IH0gd2hpbGUoMCk7CiAgICAgICAgICAgICAgICAgICAgICAg IHN3aXRjaF9tbShvbGRtbSwgbW0sIG5leHQsIHRoaXNfY3B1KTsKICAgICAgICAgICAgICAgIH0K CiAgICAgICAgICAgICAgICBpZiAoIXByZXYtPm1tKSB7CiAgICAgICAgICAgICAgICAgICAgICAg IHByZXYtPmFjdGl2ZV9tbSA9ICgodm9pZCAqKTApOwogICAgICAgICAgICAgICAgICAgICAgICBt bWRyb3Aob2xkbW0pOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCgoKCgogICAgICAgIGRv IHsgYXNtIHZvbGF0aWxlKCJwdXNobCAlJWVzaVxuXHQiICJwdXNobCAlJWVkaVxuXHQiICJwdXNo bCAlJWVicFxuXHQiICJtb3ZsICUlZXNwLCUwXG5cdCIgIm1vdmwgJTMsJSVlc3Bcblx0IiAibW92 bCAkMWYsJTFcblx0IiAicHVzaGwgJTRcblx0IiAiam1wIF9fc3dpdGNoX3RvXG4iICIxOlx0IiAi cG9wbCAlJWVicFxuXHQiICJwb3BsICUlZWRpXG5cdCIgInBvcGwgJSVlc2lcblx0IiA6Ij1tIiAo cHJldi0+dGhyZWFkLmVzcCksIj1tIiAocHJldi0+dGhyZWFkLmVpcCksICI9YiIgKHByZXYpIDoi bSIgKG5leHQtPnRocmVhZC5lc3ApLCJtIiAobmV4dC0+dGhyZWFkLmVpcCksICJhIiAocHJldiks ICJkIiAobmV4dCksICJiIiAocHJldikpOyB9IHdoaWxlICgwKTsKICAgICAgICBfX3NjaGVkdWxl X3RhaWwocHJldik7CgpzYW1lX3Byb2Nlc3M6CiAgICAgICAgZG8geyBpZiAoZ2V0X2N1cnJlbnQo KS0+bG9ja19kZXB0aCA+PSAwKSBzcGluX2xvY2soJmtlcm5lbF9mbGFnX2NhY2hlbGluZS5sb2Nr KTsgfSB3aGlsZSAoMCk7CiAgICAgICAgaWYgKGdldF9jdXJyZW50KCktPm5lZWRfcmVzY2hlZCkK ICAgICAgICAgICAgICAgIGdvdG8gbmVlZF9yZXNjaGVkX2JhY2s7CiAgICAgICAgcmV0dXJuOwp9 CiMgNzIwICJzY2hlZC5jIgpzdGF0aWMgaW5saW5lIHZvaWQgX193YWtlX3VwX2NvbW1vbiAod2Fp dF9xdWV1ZV9oZWFkX3QgKnEsIHVuc2lnbmVkIGludCBtb2RlLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50IG5yX2V4Y2x1c2l2ZSwgY29uc3QgaW50IHN5bmMpCnsKICAg ICAgICBzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7CiAgICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICpw OwoKICAgICAgICA7CiAgICAgICAgOwoKICAgICAgICBmb3IgKHRtcCA9ICgmcS0+dGFza19saXN0 KS0+bmV4dCwgcHJlZmV0Y2godG1wLT5uZXh0KTsgdG1wICE9ICgmcS0+dGFza19saXN0KTsgdG1w ID0gdG1wLT5uZXh0LCBwcmVmZXRjaCh0bXAtPm5leHQpKSB7CiAgICAgICAgICAgICAgICB1bnNp Z25lZCBpbnQgc3RhdGU7CiAgICAgICAgICAgICAgICB3YWl0X3F1ZXVlX3QgKmN1cnIgPSAoKHdh aXRfcXVldWVfdCAqKSgoY2hhciAqKSh0bXApLSh1bnNpZ25lZCBsb25nKSgmKCh3YWl0X3F1ZXVl X3QgKikwKS0+dGFza19saXN0KSkpOwoKICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAg IHAgPSBjdXJyLT50YXNrOwogICAgICAgICAgICAgICAgc3RhdGUgPSBwLT5zdGF0ZTsKICAgICAg ICAgICAgICAgIGlmIChzdGF0ZSAmIG1vZGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgOwog ICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJ5X3RvX3dha2VfdXAocCwgc3luYykgJiYgKGN1 cnItPmZsYWdzJjB4MDEpICYmICEtLW5yX2V4Y2x1c2l2ZSkKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9Cn0KCnZvaWQgX193 YWtlX3VwKHdhaXRfcXVldWVfaGVhZF90ICpxLCB1bnNpZ25lZCBpbnQgbW9kZSwgaW50IG5yKQp7 CiAgICAgICAgaWYgKHEpIHsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAg ICAgICAgICAgICAgICBkbyB7IGRvIHsgX19hc21fXyBfX3ZvbGF0aWxlX18oInB1c2hmbCA7IHBv cGwgJTAiOiI9ZyIgKGZsYWdzKTogKTsgX19hc21fXyBfX3ZvbGF0aWxlX18oImNsaSI6IDogOiJt ZW1vcnkiKTsgfSB3aGlsZSgwKTs7IHNwaW5fbG9jaygmcS0+bG9jayk7IH0gd2hpbGUgKDApOwog ICAgICAgICAgICAgICAgX193YWtlX3VwX2NvbW1vbihxLCBtb2RlLCBuciwgMCk7CiAgICAgICAg ICAgICAgICBkbyB7IHNwaW5fdW5sb2NrKCZxLT5sb2NrKTsgX19hc21fXyBfX3ZvbGF0aWxlX18o InB1c2hsICUwIDsgcG9wZmwiOiA6ImciIChmbGFncyk6Im1lbW9yeSIsICJjYyIpOyB9IHdoaWxl ICgwKTsKICAgICAgICB9Cn0KCnZvaWQgX193YWtlX3VwX3N5bmMod2FpdF9xdWV1ZV9oZWFkX3Qg KnEsIHVuc2lnbmVkIGludCBtb2RlLCBpbnQgbnIpCnsKICAgICAgICBpZiAocSkgewogICAgICAg ICAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKICAgICAgICAgICAgICAgIGRvIHsgZG8geyBf X2FzbV9fIF9fdm9sYXRpbGVfXygicHVzaGZsIDsgcG9wbCAlMCI6Ij1nIiAoZmxhZ3MpOiApOyBf X2FzbV9fIF9fdm9sYXRpbGVfXygiY2xpIjogOiA6Im1lbW9yeSIpOyB9IHdoaWxlKDApOzsgc3Bp bl9sb2NrKCZxLT5sb2NrKTsgfSB3aGlsZSAoMCk7CiAgICAgICAgICAgICAgICBfX3dha2VfdXBf Y29tbW9uKHEsIG1vZGUsIG5yLCAxKTsKICAgICAgICAgICAgICAgIGRvIHsgc3Bpbl91bmxvY2so JnEtPmxvY2spOyBfX2FzbV9fIF9fdm9sYXRpbGVfXygicHVzaGwgJTAgOyBwb3BmbCI6IDoiZyIg KGZsYWdzKToibWVtb3J5IiwgImNjIik7IH0gd2hpbGUgKDApOwogICAgICAgIH0KfQoKdm9pZCBj b21wbGV0ZShzdHJ1Y3QgY29tcGxldGlvbiAqeCkKewogICAgICAgIHVuc2lnbmVkIGxvbmcgZmxh Z3M7CgogICAgICAgIGRvIHsgZG8geyBfX2FzbV9fIF9fdm9sYXRpbGVfXygicHVzaGZsIDsgcG9w bCAlMCI6Ij1nIiAoZmxhZ3MpOiApOyBfX2FzbV9fIF9fdm9sYXRpbGVfXygiY2xpIjogOiA6Im1l bW9yeSIpOyB9IHdoaWxlKDApOzsgc3Bpbl9sb2NrKCZ4LT53YWl0LmxvY2spOyB9IHdoaWxlICgw KTsKICAgICAgICB4LT5kb25lKys7CiAgICAgICAgX193YWtlX3VwX2NvbW1vbigmeC0+d2FpdCwg MiB8IDEsIDEsIDApOwogICAgICAgIGRvIHsgc3Bpbl91bmxvY2soJngtPndhaXQubG9jayk7IF9f YXNtX18gX192b2xhdGlsZV9fKCJwdXNobCAlMCA7IHBvcGZsIjogOiJnIiAoZmxhZ3MpOiJtZW1v cnkiLCAiY2MiKTsgfSB3aGlsZSAoMCk7Cn0KCnZvaWQgd2FpdF9mb3JfY29tcGxldGlvbihzdHJ1 Y3QgY29tcGxldGlvbiAqeCkKewogICAgICAgIGRvIHsgX19hc21fXyBfX3ZvbGF0aWxlX18oImNs aSI6IDogOiJtZW1vcnkiKTsgc3Bpbl9sb2NrKCZ4LT53YWl0LmxvY2spOyB9IHdoaWxlICgwKTsK ICAgICAgICBpZiAoIXgtPmRvbmUpIHsKICAgICAgICAgICAgICAgIHdhaXRfcXVldWVfdCB3YWl0 ID0geyB0YXNrOiBnZXRfY3VycmVudCgpLCB0YXNrX2xpc3Q6IHsgKCh2b2lkICopMCksICgodm9p ZCAqKTApIH0sIH07CgogICAgICAgICAgICAgICAgd2FpdC5mbGFncyB8PSAweDAxOwogICAgICAg ICAgICAgICAgX19hZGRfd2FpdF9xdWV1ZV90YWlsKCZ4LT53YWl0LCAmd2FpdCk7CiAgICAgICAg ICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRvIHsgZ2V0X2N1cnJlbnQoKS0+ c3RhdGUgPSAoMik7IH0gd2hpbGUgKDApOwogICAgICAgICAgICAgICAgICAgICAgICBkbyB7IHNw aW5fdW5sb2NrKCZ4LT53YWl0LmxvY2spOyBfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RpIjogOiA6 Im1lbW9yeSIpOyB9IHdoaWxlICgwKTsKICAgICAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGUo KTsKICAgICAgICAgICAgICAgICAgICAgICAgZG8geyBfX2FzbV9fIF9fdm9sYXRpbGVfXygiY2xp IjogOiA6Im1lbW9yeSIpOyBzcGluX2xvY2soJngtPndhaXQubG9jayk7IH0gd2hpbGUgKDApOwog ICAgICAgICAgICAgICAgfSB3aGlsZSAoIXgtPmRvbmUpOwogICAgICAgICAgICAgICAgX19yZW1v dmVfd2FpdF9xdWV1ZSgmeC0+d2FpdCwgJndhaXQpOwogICAgICAgIH0KICAgICAgICB4LT5kb25l LS07CiAgICAgICAgZG8geyBzcGluX3VubG9jaygmeC0+d2FpdC5sb2NrKTsgX19hc21fXyBfX3Zv bGF0aWxlX18oInN0aSI6IDogOiJtZW1vcnkiKTsgfSB3aGlsZSAoMCk7Cn0KIyA4MDkgInNjaGVk LmMiCnZvaWQgaW50ZXJydXB0aWJsZV9zbGVlcF9vbih3YWl0X3F1ZXVlX2hlYWRfdCAqcSkKewog ICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7IHdhaXRfcXVldWVfdCB3YWl0OyBpbml0X3dhaXRx dWV1ZV9lbnRyeSgmd2FpdCwgZ2V0X2N1cnJlbnQoKSk7CgogICAgICAgIGdldF9jdXJyZW50KCkt PnN0YXRlID0gMTsKCiAgICAgICAgZG8geyBkbyB7IF9fYXNtX18gX192b2xhdGlsZV9fKCJwdXNo ZmwgOyBwb3BsICUwIjoiPWciIChmbGFncyk6ICk7IF9fYXNtX18gX192b2xhdGlsZV9fKCJjbGki OiA6IDoibWVtb3J5Iik7IH0gd2hpbGUoMCk7OyBzcGluX2xvY2soJnEtPmxvY2spOyB9IHdoaWxl ICgwKTsgX19hZGRfd2FpdF9xdWV1ZShxLCAmd2FpdCk7IHNwaW5fdW5sb2NrKCZxLT5sb2NrKTsK ICAgICAgICBzY2hlZHVsZSgpOwogICAgICAgIGRvIHsgX19hc21fXyBfX3ZvbGF0aWxlX18oImNs aSI6IDogOiJtZW1vcnkiKTsgc3Bpbl9sb2NrKCZxLT5sb2NrKTsgfSB3aGlsZSAoMCk7IF9fcmVt b3ZlX3dhaXRfcXVldWUocSwgJndhaXQpOyBkbyB7IHNwaW5fdW5sb2NrKCZxLT5sb2NrKTsgX19h c21fXyBfX3ZvbGF0aWxlX18oInB1c2hsICUwIDsgcG9wZmwiOiA6ImciIChmbGFncyk6Im1lbW9y eSIsICJjYyIpOyB9IHdoaWxlICgwKTsKfQoKbG9uZyBpbnRlcnJ1cHRpYmxlX3NsZWVwX29uX3Rp bWVvdXQod2FpdF9xdWV1ZV9oZWFkX3QgKnEsIGxvbmcgdGltZW91dCkKewogICAgICAgIHVuc2ln bmVkIGxvbmcgZmxhZ3M7IHdhaXRfcXVldWVfdCB3YWl0OyBpbml0X3dhaXRxdWV1ZV9lbnRyeSgm d2FpdCwgZ2V0X2N1cnJlbnQoKSk7CgogICAgICAgIGdldF9jdXJyZW50KCktPnN0YXRlID0gMTsK CiAgICAgICAgZG8geyBkbyB7IF9fYXNtX18gX192b2xhdGlsZV9fKCJwdXNoZmwgOyBwb3BsICUw IjoiPWciIChmbGFncyk6ICk7IF9fYXNtX18gX192b2xhdGlsZV9fKCJjbGkiOiA6IDoibWVtb3J5 Iik7IH0gd2hpbGUoMCk7OyBzcGluX2xvY2soJnEtPmxvY2spOyB9IHdoaWxlICgwKTsgX19hZGRf d2FpdF9xdWV1ZShxLCAmd2FpdCk7IHNwaW5fdW5sb2NrKCZxLT5sb2NrKTsKICAgICAgICB0aW1l b3V0ID0gc2NoZWR1bGVfdGltZW91dCh0aW1lb3V0KTsKICAgICAgICBkbyB7IF9fYXNtX18gX192 b2xhdGlsZV9fKCJjbGkiOiA6IDoibWVtb3J5Iik7IHNwaW5fbG9jaygmcS0+bG9jayk7IH0gd2hp bGUgKDApOyBfX3JlbW92ZV93YWl0X3F1ZXVlKHEsICZ3YWl0KTsgZG8geyBzcGluX3VubG9jaygm cS0+bG9jayk7IF9fYXNtX18gX192b2xhdGlsZV9fKCJwdXNobCAlMCA7IHBvcGZsIjogOiJnIiAo ZmxhZ3MpOiJtZW1vcnkiLCAiY2MiKTsgfSB3aGlsZSAoMCk7CgogICAgICAgIHJldHVybiB0aW1l b3V0Owp9Cgp2b2lkIHNsZWVwX29uKHdhaXRfcXVldWVfaGVhZF90ICpxKQp7CiAgICAgICAgdW5z aWduZWQgbG9uZyBmbGFnczsgd2FpdF9xdWV1ZV90IHdhaXQ7IGluaXRfd2FpdHF1ZXVlX2VudHJ5 KCZ3YWl0LCBnZXRfY3VycmVudCgpKTsKCiAgICAgICAgZ2V0X2N1cnJlbnQoKS0+c3RhdGUgPSAy OwoKICAgICAgICBkbyB7IGRvIHsgX19hc21fXyBfX3ZvbGF0aWxlX18oInB1c2hmbCA7IHBvcGwg JTAiOiI9ZyIgKGZsYWdzKTogKTsgX19hc21fXyBfX3ZvbGF0aWxlX18oImNsaSI6IDogOiJtZW1v cnkiKTsgfSB3aGlsZSgwKTs7IHNwaW5fbG9jaygmcS0+bG9jayk7IH0gd2hpbGUgKDApOyBfX2Fk ZF93YWl0X3F1ZXVlKHEsICZ3YWl0KTsgc3Bpbl91bmxvY2soJnEtPmxvY2spOwogICAgICAgIHNj aGVkdWxlKCk7CiAgICAgICAgZG8geyBfX2FzbV9fIF9fdm9sYXRpbGVfXygiY2xpIjogOiA6Im1l bW9yeSIpOyBzcGluX2xvY2soJnEtPmxvY2spOyB9IHdoaWxlICgwKTsgX19yZW1vdmVfd2FpdF9x dWV1ZShxLCAmd2FpdCk7IGRvIHsgc3Bpbl91bmxvY2soJnEtPmxvY2spOyBfX2FzbV9fIF9fdm9s YXRpbGVfXygicHVzaGwgJTAgOyBwb3BmbCI6IDoiZyIgKGZsYWdzKToibWVtb3J5IiwgImNjIik7 IH0gd2hpbGUgKDApOwp9Cgpsb25nIHNsZWVwX29uX3RpbWVvdXQod2FpdF9xdWV1ZV9oZWFkX3Qg KnEsIGxvbmcgdGltZW91dCkKewogICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7IHdhaXRfcXVl dWVfdCB3YWl0OyBpbml0X3dhaXRxdWV1ZV9lbnRyeSgmd2FpdCwgZ2V0X2N1cnJlbnQoKSk7Cgog ICAgICAgIGdldF9jdXJyZW50KCktPnN0YXRlID0gMjsKCiAgICAgICAgZG8geyBkbyB7IF9fYXNt X18gX192b2xhdGlsZV9fKCJwdXNoZmwgOyBwb3BsICUwIjoiPWciIChmbGFncyk6ICk7IF9fYXNt X18gX192b2xhdGlsZV9fKCJjbGkiOiA6IDoibWVtb3J5Iik7IH0gd2hpbGUoMCk7OyBzcGluX2xv Y2soJnEtPmxvY2spOyB9IHdoaWxlICgwKTsgX19hZGRfd2FpdF9xdWV1ZShxLCAmd2FpdCk7IHNw aW5fdW5sb2NrKCZxLT5sb2NrKTsKICAgICAgICB0aW1lb3V0ID0gc2NoZWR1bGVfdGltZW91dCh0 aW1lb3V0KTsKICAgICAgICBkbyB7IF9fYXNtX18gX192b2xhdGlsZV9fKCJjbGkiOiA6IDoibWVt b3J5Iik7IHNwaW5fbG9jaygmcS0+bG9jayk7IH0gd2hpbGUgKDApOyBfX3JlbW92ZV93YWl0X3F1 ZXVlKHEsICZ3YWl0KTsgZG8geyBzcGluX3VubG9jaygmcS0+bG9jayk7IF9fYXNtX18gX192b2xh dGlsZV9fKCJwdXNobCAlMCA7IHBvcGZsIjogOiJnIiAoZmxhZ3MpOiJtZW1vcnkiLCAiY2MiKTsg fSB3aGlsZSAoMCk7CgogICAgICAgIHJldHVybiB0aW1lb3V0Owp9Cgp2b2lkIHNjaGVkdWxpbmdf ZnVuY3Rpb25zX2VuZF9oZXJlKHZvaWQpIHsgfQojIDg2OSAic2NoZWQuYyIKdm9pZCBzZXRfY3B1 c19hbGxvd2VkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgdW5zaWduZWQgbG9uZyBuZXdfbWFzaykK ewogICAgICAgIG5ld19tYXNrICY9IGNwdV9vbmxpbmVfbWFwOwogICAgICAgIGRvIHsgaWYgKF9f YnVpbHRpbl9leHBlY3QoKCghbmV3X21hc2spIT0wKSwwKSkgX19hc21fXyBfX3ZvbGF0aWxlX18o ICJ1ZDJcbiIgIlx0LndvcmQgJWMwXG4iICJcdC5sb25nICVjMVxuIiA6IDogImkiICg4NzIpLCAi aSIgKCJzY2hlZC5jIikpOyB9IHdoaWxlKDApOwoKICAgICAgICBwLT5jcHVzX2FsbG93ZWQgPSBu ZXdfbWFzazsKCgoKCgoKICAgICAgICBpZiAoIShwLT5jcHVzX3J1bm5hYmxlICYgcC0+Y3B1c19h bGxvd2VkKSkgewogICAgICAgICAgICAgICAgaWYgKHAgIT0gZ2V0X2N1cnJlbnQoKSkgewogICAg ICAgICAgICAgICAgICAgICAgICBwLT5uZWVkX3Jlc2NoZWQgPSAxOwogICAgICAgICAgICAgICAg ICAgICAgICBzbXBfc2VuZF9yZXNjaGVkdWxlKHAtPnByb2Nlc3Nvcik7CiAgICAgICAgICAgICAg ICB9CgoKCgoKICAgICAgICAgICAgICAgIHdoaWxlICghKHAtPmNwdXNfcnVubmFibGUgJiBwLT5j cHVzX2FsbG93ZWQpKQogICAgICAgICAgICAgICAgICAgICAgICBzY2hlZHVsZSgpOwogICAgICAg IH0KfQojIDkwNSAic2NoZWQuYyIKIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMCkpKSBsb25nIHN5 c19uaWNlKGludCBpbmNyZW1lbnQpCnsKICAgICAgICBsb25nIG5ld3ByaW87CgoKCgoKCiAgICAg ICAgaWYgKGluY3JlbWVudCA8IDApIHsKICAgICAgICAgICAgICAgIGlmICghY2FwYWJsZSgyMykp CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgICAgIGlmIChp bmNyZW1lbnQgPCAtNDApCiAgICAgICAgICAgICAgICAgICAgICAgIGluY3JlbWVudCA9IC00MDsK ICAgICAgICB9CiAgICAgICAgaWYgKGluY3JlbWVudCA+IDQwKQogICAgICAgICAgICAgICAgaW5j cmVtZW50ID0gNDA7CgogICAgICAgIG5ld3ByaW8gPSBnZXRfY3VycmVudCgpLT5uaWNlICsgaW5j cmVtZW50OwogICAgICAgIGlmIChuZXdwcmlvIDwgLTIwKQogICAgICAgICAgICAgICAgbmV3cHJp byA9IC0yMDsKICAgICAgICBpZiAobmV3cHJpbyA+IDE5KQogICAgICAgICAgICAgICAgbmV3cHJp byA9IDE5OwogICAgICAgIGdldF9jdXJyZW50KCktPm5pY2UgPSBuZXdwcmlvOwogICAgICAgIHJl dHVybiAwOwp9CgoKCnN0YXRpYyBpbmxpbmUgc3RydWN0IHRhc2tfc3RydWN0ICpmaW5kX3Byb2Nl c3NfYnlfcGlkKHBpZF90IHBpZCkKewogICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0g Z2V0X2N1cnJlbnQoKTsKCiAgICAgICAgaWYgKHBpZCkKICAgICAgICAgICAgICAgIHRzayA9IGZp bmRfdGFza19ieV9waWQocGlkKTsKICAgICAgICByZXR1cm4gdHNrOwp9CgpzdGF0aWMgaW50IHNl dHNjaGVkdWxlcihwaWRfdCBwaWQsIGludCBwb2xpY3ksCiAgICAgICAgICAgICAgICAgICAgICAg IHN0cnVjdCBzY2hlZF9wYXJhbSAqcGFyYW0pCnsKICAgICAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0g bHA7CiAgICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICpwOwogICAgICAgIGludCByZXR2YWw7Cgog ICAgICAgIHJldHZhbCA9IC0yMjsKICAgICAgICBpZiAoIXBhcmFtIHx8IHBpZCA8IDApCiAgICAg ICAgICAgICAgICBnb3RvIG91dF9ub3VubG9jazsKCiAgICAgICAgcmV0dmFsID0gLTE0OwogICAg ICAgIGlmICgoX19idWlsdGluX2NvbnN0YW50X3Aoc2l6ZW9mKHN0cnVjdCBzY2hlZF9wYXJhbSkp ID8gX19jb25zdGFudF9jb3B5X2Zyb21fdXNlcigoJmxwKSwocGFyYW0pLChzaXplb2Yoc3RydWN0 IHNjaGVkX3BhcmFtKSkpIDogX19nZW5lcmljX2NvcHlfZnJvbV91c2VyKCgmbHApLChwYXJhbSks KHNpemVvZihzdHJ1Y3Qgc2NoZWRfcGFyYW0pKSkpKQogICAgICAgICAgICAgICAgZ290byBvdXRf bm91bmxvY2s7CgoKCgogICAgICAgIGRvIHsgX19hc21fXyBfX3ZvbGF0aWxlX18oImNsaSI6IDog OiJtZW1vcnkiKTsgcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsgfSB3aGlsZSAoMCk7CiAgICAg ICAgc3Bpbl9sb2NrKCZydW5xdWV1ZV9sb2NrKTsKCiAgICAgICAgcCA9IGZpbmRfcHJvY2Vzc19i eV9waWQocGlkKTsKCiAgICAgICAgcmV0dmFsID0gLTM7CiAgICAgICAgaWYgKCFwKQogICAgICAg ICAgICAgICAgZ290byBvdXRfdW5sb2NrOwoKICAgICAgICBpZiAocG9saWN5IDwgMCkKICAgICAg ICAgICAgICAgIHBvbGljeSA9IHAtPnBvbGljeTsKICAgICAgICBlbHNlIHsKICAgICAgICAgICAg ICAgIHJldHZhbCA9IC0yMjsKICAgICAgICAgICAgICAgIGlmIChwb2xpY3kgIT0gMSAmJiBwb2xp Y3kgIT0gMiAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvbGljeSAhPSAwKQog ICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG91dF91bmxvY2s7CiAgICAgICAgfQoKCgoKCiAg ICAgICAgcmV0dmFsID0gLTIyOwogICAgICAgIGlmIChscC5zY2hlZF9wcmlvcml0eSA8IDAgfHwg bHAuc2NoZWRfcHJpb3JpdHkgPiA5OSkKICAgICAgICAgICAgICAgIGdvdG8gb3V0X3VubG9jazsK ICAgICAgICBpZiAoKHBvbGljeSA9PSAwKSAhPSAobHAuc2NoZWRfcHJpb3JpdHkgPT0gMCkpCiAg ICAgICAgICAgICAgICBnb3RvIG91dF91bmxvY2s7CgogICAgICAgIHJldHZhbCA9IC0xOwogICAg ICAgIGlmICgocG9saWN5ID09IDEgfHwgcG9saWN5ID09IDIpICYmCiAgICAgICAgICAgICFjYXBh YmxlKDIzKSkKICAgICAgICAgICAgICAgIGdvdG8gb3V0X3VubG9jazsKICAgICAgICBpZiAoKGdl dF9jdXJyZW50KCktPmV1aWQgIT0gcC0+ZXVpZCkgJiYgKGdldF9jdXJyZW50KCktPmV1aWQgIT0g cC0+dWlkKSAmJgogICAgICAgICAgICAhY2FwYWJsZSgyMykpCiAgICAgICAgICAgICAgICBnb3Rv IG91dF91bmxvY2s7CgogICAgICAgIHJldHZhbCA9IDA7CiAgICAgICAgcC0+cG9saWN5ID0gcG9s aWN5OwogICAgICAgIHAtPnJ0X3ByaW9yaXR5ID0gbHAuc2NoZWRfcHJpb3JpdHk7CgogICAgICAg IGdldF9jdXJyZW50KCktPm5lZWRfcmVzY2hlZCA9IDE7CgpvdXRfdW5sb2NrOgogICAgICAgIHNw aW5fdW5sb2NrKCZydW5xdWV1ZV9sb2NrKTsKICAgICAgICBkbyB7IGFzbSB2b2xhdGlsZSgibG9j ayA7IGluY2wgJTAiIDoiPW0iICgoJnRhc2tsaXN0X2xvY2spLT5sb2NrKSA6IDogIm1lbW9yeSIp OyBfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RpIjogOiA6Im1lbW9yeSIpOyB9IHdoaWxlICgwKTsK Cm91dF9ub3VubG9jazoKICAgICAgICByZXR1cm4gcmV0dmFsOwp9CgogX19hdHRyaWJ1dGVfXygo cmVncGFybSgwKSkpIGxvbmcgc3lzX3NjaGVkX3NldHNjaGVkdWxlcihwaWRfdCBwaWQsIGludCBw b2xpY3ksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjaGVk X3BhcmFtICpwYXJhbSkKewogICAgICAgIHJldHVybiBzZXRzY2hlZHVsZXIocGlkLCBwb2xpY3ks IHBhcmFtKTsKfQoKIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMCkpKSBsb25nIHN5c19zY2hlZF9z ZXRwYXJhbShwaWRfdCBwaWQsIHN0cnVjdCBzY2hlZF9wYXJhbSAqcGFyYW0pCnsKICAgICAgICBy ZXR1cm4gc2V0c2NoZWR1bGVyKHBpZCwgLTEsIHBhcmFtKTsKfQoKIF9fYXR0cmlidXRlX18oKHJl Z3Bhcm0oMCkpKSBsb25nIHN5c19zY2hlZF9nZXRzY2hlZHVsZXIocGlkX3QgcGlkKQp7CiAgICAg ICAgc3RydWN0IHRhc2tfc3RydWN0ICpwOwogICAgICAgIGludCByZXR2YWw7CgogICAgICAgIHJl dHZhbCA9IC0yMjsKICAgICAgICBpZiAocGlkIDwgMCkKICAgICAgICAgICAgICAgIGdvdG8gb3V0 X25vdW5sb2NrOwoKICAgICAgICByZXR2YWwgPSAtMzsKICAgICAgICByZWFkX2xvY2soJnRhc2ts aXN0X2xvY2spOwogICAgICAgIHAgPSBmaW5kX3Byb2Nlc3NfYnlfcGlkKHBpZCk7CiAgICAgICAg aWYgKHApCiAgICAgICAgICAgICAgICByZXR2YWwgPSBwLT5wb2xpY3kgJiB+MHgxMDsKICAgICAg ICBhc20gdm9sYXRpbGUoImxvY2sgOyBpbmNsICUwIiA6Ij1tIiAoKCZ0YXNrbGlzdF9sb2NrKS0+ bG9jaykgOiA6ICJtZW1vcnkiKTsKCm91dF9ub3VubG9jazoKICAgICAgICByZXR1cm4gcmV0dmFs Owp9CgogX19hdHRyaWJ1dGVfXygocmVncGFybSgwKSkpIGxvbmcgc3lzX3NjaGVkX2dldHBhcmFt KHBpZF90IHBpZCwgc3RydWN0IHNjaGVkX3BhcmFtICpwYXJhbSkKewogICAgICAgIHN0cnVjdCB0 YXNrX3N0cnVjdCAqcDsKICAgICAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gbHA7CiAgICAgICAgaW50 IHJldHZhbDsKCiAgICAgICAgcmV0dmFsID0gLTIyOwogICAgICAgIGlmICghcGFyYW0gfHwgcGlk IDwgMCkKICAgICAgICAgICAgICAgIGdvdG8gb3V0X25vdW5sb2NrOwoKICAgICAgICByZWFkX2xv Y2soJnRhc2tsaXN0X2xvY2spOwogICAgICAgIHAgPSBmaW5kX3Byb2Nlc3NfYnlfcGlkKHBpZCk7 CiAgICAgICAgcmV0dmFsID0gLTM7CiAgICAgICAgaWYgKCFwKQogICAgICAgICAgICAgICAgZ290 byBvdXRfdW5sb2NrOwogICAgICAgIGxwLnNjaGVkX3ByaW9yaXR5ID0gcC0+cnRfcHJpb3JpdHk7 CiAgICAgICAgYXNtIHZvbGF0aWxlKCJsb2NrIDsgaW5jbCAlMCIgOiI9bSIgKCgmdGFza2xpc3Rf bG9jayktPmxvY2spIDogOiAibWVtb3J5Iik7CgoKCgogICAgICAgIHJldHZhbCA9IChfX2J1aWx0 aW5fY29uc3RhbnRfcChzaXplb2YoKnBhcmFtKSkgPyBfX2NvbnN0YW50X2NvcHlfdG9fdXNlcigo cGFyYW0pLCgmbHApLChzaXplb2YoKnBhcmFtKSkpIDogX19nZW5lcmljX2NvcHlfdG9fdXNlcigo cGFyYW0pLCgmbHApLChzaXplb2YoKnBhcmFtKSkpKSA/IC0xNCA6IDA7CgpvdXRfbm91bmxvY2s6 CiAgICAgICAgcmV0dXJuIHJldHZhbDsKCm91dF91bmxvY2s6CiAgICAgICAgYXNtIHZvbGF0aWxl KCJsb2NrIDsgaW5jbCAlMCIgOiI9bSIgKCgmdGFza2xpc3RfbG9jayktPmxvY2spIDogOiAibWVt b3J5Iik7CiAgICAgICAgcmV0dXJuIHJldHZhbDsKfQoKIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0o MCkpKSBsb25nIHN5c19zY2hlZF95aWVsZCh2b2lkKQp7CiMgMTA4MyAic2NoZWQuYyIKICAgICAg ICBpbnQgbnJfcGVuZGluZyA9IG5yX3J1bm5pbmc7CgoKICAgICAgICBpbnQgaTsKCgogICAgICAg IGZvciAoaSA9IDA7IGkgPCBzbXBfbnVtX2NwdXM7IGkrKykgewogICAgICAgICAgICAgICAgaW50 IGNwdSA9IGNwdV9sb2dpY2FsX21hcChpKTsKICAgICAgICAgICAgICAgIGlmIChhbGlnbmVkX2Rh dGFbY3B1XS5zY2hlZHVsZV9kYXRhLmN1cnIgIT0gKGluaXRfdGFza3NbY3B1X251bWJlcl9tYXAo Y3B1KV0pKQogICAgICAgICAgICAgICAgICAgICAgICBucl9wZW5kaW5nLS07CiAgICAgICAgfQoK CgoKICAgICAgICBpZiAobnJfcGVuZGluZykgewoKCgoKICAgICAgICAgICAgICAgIGlmIChnZXRf Y3VycmVudCgpLT5wb2xpY3kgPT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2N1cnJl bnQoKS0+cG9saWN5IHw9IDB4MTA7CiAgICAgICAgICAgICAgICBnZXRfY3VycmVudCgpLT5uZWVk X3Jlc2NoZWQgPSAxOwoKICAgICAgICAgICAgICAgIGRvIHsgX19hc21fXyBfX3ZvbGF0aWxlX18o ImNsaSI6IDogOiJtZW1vcnkiKTsgc3Bpbl9sb2NrKCZydW5xdWV1ZV9sb2NrKTsgfSB3aGlsZSAo MCk7CiAgICAgICAgICAgICAgICBtb3ZlX2xhc3RfcnVucXVldWUoZ2V0X2N1cnJlbnQoKSk7CiAg ICAgICAgICAgICAgICBkbyB7IHNwaW5fdW5sb2NrKCZydW5xdWV1ZV9sb2NrKTsgX19hc21fXyBf X3ZvbGF0aWxlX18oInN0aSI6IDogOiJtZW1vcnkiKTsgfSB3aGlsZSAoMCk7CiAgICAgICAgfQog ICAgICAgIHJldHVybiAwOwp9CgoKCgoKCgp2b2lkIHlpZWxkKHZvaWQpCnsKICAgICAgICBkbyB7 ICgoX190eXBlb2ZfXygqKCZnZXRfY3VycmVudCgpLT5zdGF0ZSkpKV9feGNoZygodW5zaWduZWQg bG9uZykoKDApKSwoJmdldF9jdXJyZW50KCktPnN0YXRlKSxzaXplb2YoKigmZ2V0X2N1cnJlbnQo KS0+c3RhdGUpKSkpOyB9IHdoaWxlICgwKTsKICAgICAgICBzeXNfc2NoZWRfeWllbGQoKTsKICAg ICAgICBzY2hlZHVsZSgpOwp9Cgp2b2lkIF9fY29uZF9yZXNjaGVkKHZvaWQpCnsKICAgICAgICBk byB7ICgoX190eXBlb2ZfXygqKCZnZXRfY3VycmVudCgpLT5zdGF0ZSkpKV9feGNoZygodW5zaWdu ZWQgbG9uZykoKDApKSwoJmdldF9jdXJyZW50KCktPnN0YXRlKSxzaXplb2YoKigmZ2V0X2N1cnJl bnQoKS0+c3RhdGUpKSkpOyB9IHdoaWxlICgwKTsKICAgICAgICBzY2hlZHVsZSgpOwp9CgogX19h dHRyaWJ1dGVfXygocmVncGFybSgwKSkpIGxvbmcgc3lzX3NjaGVkX2dldF9wcmlvcml0eV9tYXgo aW50IHBvbGljeSkKewogICAgICAgIGludCByZXQgPSAtMjI7CgogICAgICAgIHN3aXRjaCAocG9s aWN5KSB7CiAgICAgICAgY2FzZSAxOgogICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICAgIHJl dCA9IDk5OwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAwOgogICAgICAgICAg ICAgICAgcmV0ID0gMDsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBy ZXR1cm4gcmV0Owp9CgogX19hdHRyaWJ1dGVfXygocmVncGFybSgwKSkpIGxvbmcgc3lzX3NjaGVk X2dldF9wcmlvcml0eV9taW4oaW50IHBvbGljeSkKewogICAgICAgIGludCByZXQgPSAtMjI7Cgog ICAgICAgIHN3aXRjaCAocG9saWN5KSB7CiAgICAgICAgY2FzZSAxOgogICAgICAgIGNhc2UgMjoK ICAgICAgICAgICAgICAgIHJldCA9IDE7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICBj YXNlIDA6CiAgICAgICAgICAgICAgICByZXQgPSAwOwogICAgICAgIH0KICAgICAgICByZXR1cm4g cmV0Owp9CgogX19hdHRyaWJ1dGVfXygocmVncGFybSgwKSkpIGxvbmcgc3lzX3NjaGVkX3JyX2dl dF9pbnRlcnZhbChwaWRfdCBwaWQsIHN0cnVjdCB0aW1lc3BlYyAqaW50ZXJ2YWwpCnsKICAgICAg ICBzdHJ1Y3QgdGltZXNwZWMgdDsKICAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CiAgICAg ICAgaW50IHJldHZhbCA9IC0yMjsKCiAgICAgICAgaWYgKHBpZCA8IDApCiAgICAgICAgICAgICAg ICBnb3RvIG91dF9ub3VubG9jazsKCiAgICAgICAgcmV0dmFsID0gLTM7CiAgICAgICAgcmVhZF9s b2NrKCZ0YXNrbGlzdF9sb2NrKTsKICAgICAgICBwID0gZmluZF9wcm9jZXNzX2J5X3BpZChwaWQp OwogICAgICAgIGlmIChwKQogICAgICAgICAgICAgICAgamlmZmllc190b190aW1lc3BlYyhwLT5w b2xpY3kgJiAxID8gMCA6ICgoKDIwLShwLT5uaWNlKSkgPj4gMikrMSksCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZ0KTsKICAgICAgICBhc20gdm9sYXRpbGUoImxvY2sgOyBp bmNsICUwIiA6Ij1tIiAoKCZ0YXNrbGlzdF9sb2NrKS0+bG9jaykgOiA6ICJtZW1vcnkiKTsKICAg ICAgICBpZiAocCkKICAgICAgICAgICAgICAgIHJldHZhbCA9IChfX2J1aWx0aW5fY29uc3RhbnRf cChzaXplb2YodCkpID8gX19jb25zdGFudF9jb3B5X3RvX3VzZXIoKGludGVydmFsKSwoJnQpLChz aXplb2YodCkpKSA6IF9fZ2VuZXJpY19jb3B5X3RvX3VzZXIoKGludGVydmFsKSwoJnQpLChzaXpl b2YodCkpKSkgPyAtMTQgOiAwOwpvdXRfbm91bmxvY2s6CiAgICAgICAgcmV0dXJuIHJldHZhbDsK fQoKc3RhdGljIHZvaWQgc2hvd190YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqIHApCnsKICAgICAg ICB1bnNpZ25lZCBsb25nIGZyZWUgPSAwOwogICAgICAgIGludCBzdGF0ZTsKICAgICAgICBzdGF0 aWMgY29uc3QgY2hhciAqIHN0YXRfbmFtW10gPSB7ICJSIiwgIlMiLCAiRCIsICJaIiwgIlQiLCAi VyIgfTsKCiAgICAgICAgcHJpbnRrKCIlLTEzLjEzcyAiLCBwLT5jb21tKTsKICAgICAgICBzdGF0 ZSA9IHAtPnN0YXRlID8gZmZ6KH5wLT5zdGF0ZSkgKyAxIDogMDsKICAgICAgICBpZiAoKCh1bnNp Z25lZCkgc3RhdGUpIDwgc2l6ZW9mKHN0YXRfbmFtKS9zaXplb2YoY2hhciAqKSkKICAgICAgICAg ICAgICAgIHByaW50ayhzdGF0X25hbVtzdGF0ZV0pOwogICAgICAgIGVsc2UKICAgICAgICAgICAg ICAgIHByaW50aygiICIpOwoKICAgICAgICBpZiAocCA9PSBnZXRfY3VycmVudCgpKQogICAgICAg ICAgICAgICAgcHJpbnRrKCIgY3VycmVudCAgIik7CiAgICAgICAgZWxzZQogICAgICAgICAgICAg ICAgcHJpbnRrKCIgJTA4bFggIiwgdGhyZWFkX3NhdmVkX3BjKCZwLT50aHJlYWQpKTsKCgoKCgoK ICAgICAgICB7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICogbiA9ICh1bnNpZ25lZCBs b25nICopIChwKzEpOwogICAgICAgICAgICAgICAgd2hpbGUgKCEqbikKICAgICAgICAgICAgICAg ICAgICAgICAgbisrOwogICAgICAgICAgICAgICAgZnJlZSA9ICh1bnNpZ25lZCBsb25nKSBuIC0g KHVuc2lnbmVkIGxvbmcpKHArMSk7CiAgICAgICAgfQogICAgICAgIHByaW50aygiJTVsdSAlNWQg JTZkICIsIGZyZWUsIHAtPnBpZCwgcC0+cF9wcHRyLT5waWQpOwogICAgICAgIGlmIChwLT5wX2Nw dHIpCiAgICAgICAgICAgICAgICBwcmludGsoIiU1ZCAiLCBwLT5wX2NwdHItPnBpZCk7CiAgICAg ICAgZWxzZQogICAgICAgICAgICAgICAgcHJpbnRrKCIgICAgICAiKTsKICAgICAgICBpZiAocC0+ cF95c3B0cikKICAgICAgICAgICAgICAgIHByaW50aygiJTdkIiwgcC0+cF95c3B0ci0+cGlkKTsK ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBwcmludGsoIiAgICAgICAiKTsKICAgICAgICBp ZiAocC0+cF9vc3B0cikKICAgICAgICAgICAgICAgIHByaW50aygiICU1ZCIsIHAtPnBfb3NwdHIt PnBpZCk7CiAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgcHJpbnRrKCIgICAgICAiKTsKICAg ICAgICBpZiAoIXAtPm1tKQogICAgICAgICAgICAgICAgcHJpbnRrKCIgKEwtVExCKVxuIik7CiAg ICAgICAgZWxzZQogICAgICAgICAgICAgICAgcHJpbnRrKCIgKE5PVExCKVxuIik7CgogICAgICAg IHsKICAgICAgICAgICAgICAgIGV4dGVybiB2b2lkIHNob3dfdHJhY2VfdGFzayhzdHJ1Y3QgdGFz a19zdHJ1Y3QgKnRzayk7CiAgICAgICAgICAgICAgICBzaG93X3RyYWNlX3Rhc2socCk7CiAgICAg ICAgfQp9CgpjaGFyICogcmVuZGVyX3NpZ3NldF90KHNpZ3NldF90ICpzZXQsIGNoYXIgKmJ1ZmZl cikKewogICAgICAgIGludCBpID0gNjQsIHg7CiAgICAgICAgZG8gewogICAgICAgICAgICAgICAg aSAtPSA0LCB4ID0gMDsKICAgICAgICAgICAgICAgIGlmICgoX19idWlsdGluX2NvbnN0YW50X3Ao aSsxKSA/IF9fY29uc3Rfc2lnaXNtZW1iZXIoKHNldCksKGkrMSkpIDogX19nZW5fc2lnaXNtZW1i ZXIoKHNldCksKGkrMSkpKSkgeCB8PSAxOwogICAgICAgICAgICAgICAgaWYgKChfX2J1aWx0aW5f Y29uc3RhbnRfcChpKzIpID8gX19jb25zdF9zaWdpc21lbWJlcigoc2V0KSwoaSsyKSkgOiBfX2dl bl9zaWdpc21lbWJlcigoc2V0KSwoaSsyKSkpKSB4IHw9IDI7CiAgICAgICAgICAgICAgICBpZiAo KF9fYnVpbHRpbl9jb25zdGFudF9wKGkrMykgPyBfX2NvbnN0X3NpZ2lzbWVtYmVyKChzZXQpLChp KzMpKSA6IF9fZ2VuX3NpZ2lzbWVtYmVyKChzZXQpLChpKzMpKSkpIHggfD0gNDsKICAgICAgICAg ICAgICAgIGlmICgoX19idWlsdGluX2NvbnN0YW50X3AoaSs0KSA/IF9fY29uc3Rfc2lnaXNtZW1i ZXIoKHNldCksKGkrNCkpIDogX19nZW5fc2lnaXNtZW1iZXIoKHNldCksKGkrNCkpKSkgeCB8PSA4 OwogICAgICAgICAgICAgICAgKmJ1ZmZlcisrID0gKHggPCAxMCA/ICcwJyA6ICdhJyAtIDEwKSAr IHg7CiAgICAgICAgfSB3aGlsZSAoaSA+PSA0KTsKICAgICAgICAqYnVmZmVyID0gMDsKICAgICAg ICByZXR1cm4gYnVmZmVyOwp9Cgp2b2lkIHNob3dfc3RhdGUodm9pZCkKewogICAgICAgIHN0cnVj dCB0YXNrX3N0cnVjdCAqcDsKCgogICAgICAgIHByaW50aygiXG4iCiAgICAgICAgICAgICAgICIg ICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSAgICAgICAgICAgICAgICAgICAgICAgIHNpYmxp bmdcbiIpOwogICAgICAgIHByaW50aygiICB0YXNrICAgICAgICAgICAgIFBDICAgIHN0YWNrICAg cGlkIGZhdGhlciBjaGlsZCB5b3VuZ2VyIG9sZGVyXG4iKTsKCgoKCgogICAgICAgIHJlYWRfbG9j aygmdGFza2xpc3RfbG9jayk7CiAgICAgICAgZm9yIChwID0gJihpbml0X3Rhc2tfdW5pb24udGFz aykgOyAocCA9IHAtPm5leHRfdGFzaykgIT0gJihpbml0X3Rhc2tfdW5pb24udGFzaykgOyApIHsK CgoKCiAgICAgICAgICAgICAgICB0b3VjaF9ubWlfd2F0Y2hkb2coKTsKICAgICAgICAgICAgICAg IHNob3dfdGFzayhwKTsKICAgICAgICB9CiAgICAgICAgYXNtIHZvbGF0aWxlKCJsb2NrIDsgaW5j bCAlMCIgOiI9bSIgKCgmdGFza2xpc3RfbG9jayktPmxvY2spIDogOiAibWVtb3J5Iik7Cn0KIyAx MjkxICJzY2hlZC5jIgp2b2lkIHJlcGFyZW50X3RvX2luaXQodm9pZCkKewogICAgICAgIHN0cnVj dCB0YXNrX3N0cnVjdCAqdGhpc190YXNrID0gZ2V0X2N1cnJlbnQoKTsKCiAgICAgICAgZG8geyBf X2FzbV9fIF9fdm9sYXRpbGVfXygiY2xpIjogOiA6Im1lbW9yeSIpOyB3cml0ZV9sb2NrKCZ0YXNr bGlzdF9sb2NrKTsgfSB3aGlsZSAoMCk7CgoKICAgICAgICBkbyB7ICh0aGlzX3Rhc2spLT5uZXh0 X3Rhc2stPnByZXZfdGFzayA9ICh0aGlzX3Rhc2spLT5wcmV2X3Rhc2s7ICh0aGlzX3Rhc2spLT5w cmV2X3Rhc2stPm5leHRfdGFzayA9ICh0aGlzX3Rhc2spLT5uZXh0X3Rhc2s7IGlmICgodGhpc190 YXNrKS0+cF9vc3B0cikgKHRoaXNfdGFzayktPnBfb3NwdHItPnBfeXNwdHIgPSAodGhpc190YXNr KS0+cF95c3B0cjsgaWYgKCh0aGlzX3Rhc2spLT5wX3lzcHRyKSAodGhpc190YXNrKS0+cF95c3B0 ci0+cF9vc3B0ciA9ICh0aGlzX3Rhc2spLT5wX29zcHRyOyBlbHNlICh0aGlzX3Rhc2spLT5wX3Bw dHItPnBfY3B0ciA9ICh0aGlzX3Rhc2spLT5wX29zcHRyOyB9IHdoaWxlICgwKTsKICAgICAgICB0 aGlzX3Rhc2stPnBfcHB0ciA9IGNoaWxkX3JlYXBlcjsKICAgICAgICB0aGlzX3Rhc2stPnBfb3Bw dHIgPSBjaGlsZF9yZWFwZXI7CiAgICAgICAgZG8geyAodGhpc190YXNrKS0+bmV4dF90YXNrID0g Jihpbml0X3Rhc2tfdW5pb24udGFzayk7ICh0aGlzX3Rhc2spLT5wcmV2X3Rhc2sgPSAoaW5pdF90 YXNrX3VuaW9uLnRhc2spLnByZXZfdGFzazsgKGluaXRfdGFza191bmlvbi50YXNrKS5wcmV2X3Rh c2stPm5leHRfdGFzayA9ICh0aGlzX3Rhc2spOyAoaW5pdF90YXNrX3VuaW9uLnRhc2spLnByZXZf dGFzayA9ICh0aGlzX3Rhc2spOyAodGhpc190YXNrKS0+cF95c3B0ciA9ICgodm9pZCAqKTApOyBp ZiAoKCh0aGlzX3Rhc2spLT5wX29zcHRyID0gKHRoaXNfdGFzayktPnBfcHB0ci0+cF9jcHRyKSAh PSAoKHZvaWQgKikwKSkgKHRoaXNfdGFzayktPnBfb3NwdHItPnBfeXNwdHIgPSB0aGlzX3Rhc2s7 ICh0aGlzX3Rhc2spLT5wX3BwdHItPnBfY3B0ciA9IHRoaXNfdGFzazsgfSB3aGlsZSAoMCk7CgoK ICAgICAgICB0aGlzX3Rhc2stPmV4aXRfc2lnbmFsID0gMTc7CgoKCiAgICAgICAgc3Bpbl9sb2Nr KCZydW5xdWV1ZV9sb2NrKTsKCiAgICAgICAgdGhpc190YXNrLT5wdHJhY2UgPSAwOwogICAgICAg IHRoaXNfdGFzay0+bmljZSA9ICgwKTsKICAgICAgICB0aGlzX3Rhc2stPnBvbGljeSA9IDA7CgoK CiAgICAgICAgdGhpc190YXNrLT5jYXBfZWZmZWN0aXZlID0gKH4wICYgfigxIDw8ICg4KSkpOwog ICAgICAgIHRoaXNfdGFzay0+Y2FwX2luaGVyaXRhYmxlID0gKDApOwogICAgICAgIHRoaXNfdGFz ay0+Y2FwX3Blcm1pdHRlZCA9ICh+MCk7CiAgICAgICAgdGhpc190YXNrLT5rZWVwX2NhcGFiaWxp dGllcyA9IDA7CiAgICAgICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKHNpemVvZigqKHRoaXNfdGFz ay0+cmxpbSkpKSA/IF9fY29uc3RhbnRfbWVtY3B5KCh0aGlzX3Rhc2stPnJsaW0pLCgoaW5pdF90 YXNrX3VuaW9uLnRhc2spLnJsaW0pLChzaXplb2YoKih0aGlzX3Rhc2stPnJsaW0pKSkpIDogX19t ZW1jcHkoKHRoaXNfdGFzay0+cmxpbSksKChpbml0X3Rhc2tfdW5pb24udGFzaykucmxpbSksKHNp emVvZigqKHRoaXNfdGFzay0+cmxpbSkpKSkpOwogICAgICAgIHRoaXNfdGFzay0+dXNlciA9ICgm cm9vdF91c2VyKTsKCiAgICAgICAgc3Bpbl91bmxvY2soJnJ1bnF1ZXVlX2xvY2spOwogICAgICAg IGRvIHsgYXNtIHZvbGF0aWxlKCJsb2NrIDsgYWRkbCAkIiAiMHgwMTAwMDAwMCIgIiwlMCI6Ij1t IiAoKCZ0YXNrbGlzdF9sb2NrKS0+bG9jaykgOiA6ICJtZW1vcnkiKTsgX19hc21fXyBfX3ZvbGF0 aWxlX18oInN0aSI6IDogOiJtZW1vcnkiKTsgfSB3aGlsZSAoMCk7Cn0KCgoKCgoKdm9pZCBkYWVt b25pemUodm9pZCkKewogICAgICAgIHN0cnVjdCBmc19zdHJ1Y3QgKmZzOwoKCgoKCgoKICAgICAg ICBleGl0X21tKGdldF9jdXJyZW50KCkpOwoKICAgICAgICBnZXRfY3VycmVudCgpLT5zZXNzaW9u ID0gMTsKICAgICAgICBnZXRfY3VycmVudCgpLT5wZ3JwID0gMTsKICAgICAgICBnZXRfY3VycmVu dCgpLT50dHkgPSAoKHZvaWQgKikwKTsKCgoKICAgICAgICBleGl0X2ZzKGdldF9jdXJyZW50KCkp OwogICAgICAgIGZzID0gKGluaXRfdGFza191bmlvbi50YXNrKS5mczsKICAgICAgICBnZXRfY3Vy cmVudCgpLT5mcyA9IGZzOwogICAgICAgIGF0b21pY19pbmMoJmZzLT5jb3VudCk7CiAgICAgICAg ZXhpdF9maWxlcyhnZXRfY3VycmVudCgpKTsKICAgICAgICBnZXRfY3VycmVudCgpLT5maWxlcyA9 IChpbml0X3Rhc2tfdW5pb24udGFzaykuZmlsZXM7CiAgICAgICAgYXRvbWljX2luYygmZ2V0X2N1 cnJlbnQoKS0+ZmlsZXMtPmNvdW50KTsKfQoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgd2FpdF9pbml0 X2lkbGU7Cgp2b2lkIF9fYXR0cmlidXRlX18gKChfX3NlY3Rpb25fXyAoIi50ZXh0LmluaXQiKSkp IGluaXRfaWRsZSh2b2lkKQp7CiAgICAgICAgc3RydWN0IHNjaGVkdWxlX2RhdGEgKiBzY2hlZF9k YXRhOwogICAgICAgIHNjaGVkX2RhdGEgPSAmYWxpZ25lZF9kYXRhWyhnZXRfY3VycmVudCgpLT5w cm9jZXNzb3IpXS5zY2hlZHVsZV9kYXRhOwoKICAgICAgICBpZiAoZ2V0X2N1cnJlbnQoKSAhPSAm KGluaXRfdGFza191bmlvbi50YXNrKSAmJiB0YXNrX29uX3J1bnF1ZXVlKGdldF9jdXJyZW50KCkp KSB7CiAgICAgICAgICAgICAgICBwcmludGsoIlVHSCEgKCVkOiVkKSB3YXMgb24gdGhlIHJ1bnF1 ZXVlLCByZW1vdmluZy5cbiIsCiAgICAgICAgICAgICAgICAgICAgICAgIChnZXRfY3VycmVudCgp LT5wcm9jZXNzb3IpLCBnZXRfY3VycmVudCgpLT5waWQpOwogICAgICAgICAgICAgICAgZGVsX2Zy b21fcnVucXVldWUoZ2V0X2N1cnJlbnQoKSk7CiAgICAgICAgfQogICAgICAgIHNjaGVkX2RhdGEt PmN1cnIgPSBnZXRfY3VycmVudCgpOwogICAgICAgIHNjaGVkX2RhdGEtPmxhc3Rfc2NoZWR1bGUg PSBnZXRfY3ljbGVzKCk7CiAgICAgICAgY2xlYXJfYml0KGdldF9jdXJyZW50KCktPnByb2Nlc3Nv ciwgJndhaXRfaW5pdF9pZGxlKTsKfQoKZXh0ZXJuIHZvaWQgaW5pdF90aW1lcnZlY3MgKHZvaWQp OwoKdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19zZWN0aW9uX18gKCIudGV4dC5pbml0IikpKSBzY2hl ZF9pbml0KHZvaWQpCnsKCgoKCiAgICAgICAgaW50IGNwdSA9IChnZXRfY3VycmVudCgpLT5wcm9j ZXNzb3IpOwogICAgICAgIGludCBucjsKCiAgICAgICAgKGluaXRfdGFza191bmlvbi50YXNrKS5w cm9jZXNzb3IgPSBjcHU7CgogICAgICAgIGZvcihuciA9IDA7IG5yIDwgKDQwOTYgPj4gMik7IG5y KyspCiAgICAgICAgICAgICAgICBwaWRoYXNoW25yXSA9ICgodm9pZCAqKTApOwoKICAgICAgICBp bml0X3RpbWVydmVjcygpOwoKICAgICAgICBpbml0X2JoKFRJTUVSX0JILCB0aW1lcl9iaCk7CiAg ICAgICAgaW5pdF9iaChUUVVFVUVfQkgsIHRxdWV1ZV9iaCk7CiAgICAgICAgaW5pdF9iaChJTU1F RElBVEVfQkgsIGltbWVkaWF0ZV9iaCk7CgoKCgogICAgICAgIGF0b21pY19pbmMoJmluaXRfbW0u bW1fY291bnQpOwogICAgICAgIGVudGVyX2xhenlfdGxiKCZpbml0X21tLCBnZXRfY3VycmVudCgp LCBjcHUpOwp9Cg==