From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 21283 invoked by alias); 3 Feb 2003 19:16: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 21187 invoked by uid 71); 3 Feb 2003 19:16:01 -0000 Resent-Date: 3 Feb 2003 19:16:01 -0000 Resent-Message-ID: <20030203191601.21186.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, csd_ob@daudt.org Received: (qmail 26188 invoked by uid 48); 3 Feb 2003 19:07:34 -0000 Message-Id: <20030203190734.26187.qmail@sources.redhat.com> Date: Mon, 03 Feb 2003 19:16:00 -0000 From: csd_ob@daudt.org Reply-To: csd_ob@daudt.org To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: target/9552: X86-64 cross compiler internal compiler error at varasm.c X-SW-Source: 2003-02/txt/msg00132.txt.bz2 List-Id: >Number: 9552 >Category: target >Synopsis: X86-64 cross compiler internal compiler error at varasm.c >Confidential: no >Severity: critical >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Mon Feb 03 19:16:01 UTC 2003 >Closed-Date: >Last-Modified: >Originator: Christian Daudt >Release: cvs gcc-3_3-branch Feb 3 checkout (and gcc-20030203 snapshot) >Organization: >Environment: linux i386 >Description: (resubmitting email sent to gcc-bugs through gnats) Hi, In trying to set up an environment for x86_64, I've run into the the error above in compiling the glibc (set for x86_64-unknown-linux crosscompile from i686-pc-linux-gnu host as suggested in the x86-64.org website). I have latest cvs sources from the gcc-3_3-branch. I've tracked the error down to being caused by the fact that the define HAVE_LD_RO_RW_SECTION_MIXING is being set to 1 by the configure scripts, and because of that the default_eh_frame_section function (in dwarf2out.c) is calling named_section_flags with flags that varasm.c doesn't like (because they differ from previous calls). I found that manually removing that HAVE_LD_RO_RW_SECTION_MIXING define causes everything to compile ok and intuitively it seems to me from the comments that that define shouldn't be set for the x86_64 tools, but I don't know enough about gcc to know that for sure. Anyone know what the proper fix for this would be? Here is the error line: /home/csd/dvl5/x86-64/bin/x86_64-unknown-linux-gcc soinit.c -c -O2 -Wall -Winlin e -Wstrict-prototypes -Wwrite-strings -g -fPIC -I../include -I. -I/home/csd /dvl5/glibc/build/elf -I.. -I../libio -I/home/csd/dvl5/glibc/build -I../sysdeps /x86_64/elf -I../linuxthreads/sysdeps/unix/sysv/linux/x86_64 -I../linuxthreads/s ysdeps/unix/sysv/linux -I../linuxthreads/sysdeps/pthread -I../sysdeps/pthread -I ../linuxthreads/sysdeps/unix/sysv -I../linuxthreads/sysdeps/unix -I../linuxthrea ds/sysdeps/x86_64 -I../sysdeps/unix/sysv/linux/x86_64 -I../sysdeps/unix/sysv/lin ux -I../sysdeps/gnu -I../sysdeps/unix/common -I../sysdeps/unix/mman -I../sysdeps /unix/inet -I../sysdeps/unix/sysv -I../sysdeps/unix/x86_64 -I../sysdeps/unix -I. ./sysdeps/posix -I../sysdeps/x86_64/fpu -I../sysdeps/x86_64 -I../sysdeps/wordsiz e-64 -I../sysdeps/ieee754/ldbl-96 -I../sysdeps/ieee754/dbl-64 -I../sysdeps/ieee7 54/flt-32 -I../sysdeps/ieee754 -I../sysdeps/generic/elf -I../sysdeps/generic - D_LIBC_REENTRANT -include ../include/libc-symbols.h -DPIC -DSHARED -o /home/c sd/dvl5/glibc/build/elf/soinit.os soinit.c:25: internal compiler error: in named_section_flags, at varasm.c:412 Please submit a full bug report, with preprocessed source if appropriate. See for instructions. I've attached a script which grabs binutils, gcc and glibc which I'm running when I hit this problem. I also just tried with the gcc-20030203 snapshot and the same happens thanks, csd >How-To-Repeat: run the getBuildAll script provided >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: text/x-csrc; name="attachments" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachments" VGhlcmUgYXJlIDMgZmlsZXMgaGVyZSwgZmlyc3QgaXMgdGhlIEMgc291cmNlLCB0aGVuIHRoZSBF IHByZXByb2Nlc3NlZApmaWxlIGFuZCBmaW5hbGx5IGEgc2NyaXB0IHRvIHJlcHJvZHVjZSB0aGUg ZXJyb3I6Cgpzb2luaXQuYzoKLS0tLS0tLS0KCi8qIEluaXRpYWxpemVyIG1vZHVsZSBmb3IgYnVp bGRpbmcgdGhlIEVMRiBzaGFyZWQgQyBsaWJyYXJ5LiAgVGhpcyBmaWxlIGFuZAogICBzb2Zpbmku YyBkbyB0aGUgd29yayBub3JtYWxseSBkb25lIGJ5IGNydGJlZ2luUy5vIGFuZCBjcnRlbmRTLm8s IHRvIHdyYXAKICAgdGhlIGAuY3RvcnMnIGFuZCBgLmR0b3JzJyBzZWN0aW9ucyBzbyB0aGUgbGlz dHMgYXJlIHRlcm1pbmF0ZWQsIGFuZAogICBjYWxsaW5nIHRob3NlIGxpc3RzIG9mIGZ1bmN0aW9u cy4gICovCgojaW5jbHVkZSA8bGliYy1pbnRlcm5hbC5oPgojaW5jbHVkZSA8c3RkbGliLmg+Cgoj aWZkZWYgSEFWRV9EV0FSRjJfVU5XSU5EX0lORk9fU1RBVElDCiMgaW5jbHVkZSA8Z2NjZnJhbWUu aD4KI2VuZGlmCgpzdGF0aWMgdm9pZCAoKmNvbnN0IF9fQ1RPUl9MSVNUX19bMV0pICh2b2lkKQog ICAgIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmN0b3JzIikpKQogICAgID0geyAodm9pZCAo KikgKHZvaWQpKSAtMSB9OwpzdGF0aWMgdm9pZCAoKmNvbnN0IF9fRFRPUl9MSVNUX19bMV0pICh2 b2lkKQogICAgIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmR0b3JzIikpKQogICAgID0geyAo dm9pZCAoKikgKHZvaWQpKSAtMSB9OwoKc3RhdGljIGlubGluZSB2b2lkCnJ1bl9ob29rcyAodm9p ZCAoKmNvbnN0IGxpc3RbXSkgKHZvaWQpKQp7CiAgd2hpbGUgKCorK2xpc3QpCiAgICAoKipsaXN0 KSAoKTsKfQoKI2lmZGVmIEhBVkVfRFdBUkYyX1VOV0lORF9JTkZPCnN0YXRpYyBjaGFyIF9fRUhf RlJBTUVfQkVHSU5fX1tdCiAgICAgX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZWhfZnJhbWUi KSkpCiAgICAgPSB7IH07CiMgaWZkZWYgSEFWRV9EV0FSRjJfVU5XSU5EX0lORk9fU1RBVElDCmV4 dGVybiB2b2lkIF9fcmVnaXN0ZXJfZnJhbWVfaW5mbyAoY29uc3Qgdm9pZCAqLCBzdHJ1Y3Qgb2Jq ZWN0ICopOwpleHRlcm4gdm9pZCBfX3JlZ2lzdGVyX2ZyYW1lX2luZm9fYmFzZXMgKGNvbnN0IHZv aWQgKiwgc3RydWN0IG9iamVjdCAqLAoJCQkJCSB2b2lkICosIHZvaWQgKik7CmV4dGVybiB2b2lk IF9fZGVyZWdpc3Rlcl9mcmFtZV9pbmZvIChjb25zdCB2b2lkICopOwpleHRlcm4gdm9pZCBfX2Rl cmVnaXN0ZXJfZnJhbWVfaW5mb19iYXNlcyAoY29uc3Qgdm9pZCAqKTsKIyBlbHNlCmV4dGVybiB2 b2lkIF9fcmVnaXN0ZXJfZnJhbWUgKGNvbnN0IHZvaWQgKik7CmV4dGVybiB2b2lkIF9fZGVyZWdp c3Rlcl9mcmFtZSAoY29uc3Qgdm9pZCAqKTsKIyBlbmRpZgojZW5kaWYKCi8qIFRoaXMgZnVuY3Rp b24gd2lsbCBiZSBjYWxsZWQgZnJvbSBfaW5pdCBpbiBpbml0LWZpcnN0LmMuICAqLwp2b2lkCl9f bGliY19nbG9iYWxfY3RvcnMgKHZvaWQpCnsKICAvKiBDYWxsIGNvbnN0cnVjdG9yIGZ1bmN0aW9u cy4gICovCiAgcnVuX2hvb2tzIChfX0NUT1JfTElTVF9fKTsKCiNpZmRlZiBIQVZFX0RXQVJGMl9V TldJTkRfSU5GTwojIGlmZGVmIEhBVkVfRFdBUkYyX1VOV0lORF9JTkZPX1NUQVRJQwogIHsKICAg IHN0YXRpYyBzdHJ1Y3Qgb2JqZWN0IG9iOwojICBpZiBkZWZpbmVkIENSVF9HRVRfUkZJQl9URVhU IHx8IGRlZmluZWQgQ1JUX0dFVF9SRklCX0RBVEEKICAgIHZvaWQgKnRiYXNlLCAqZGJhc2U7Cgoj ICAgaWZkZWYgQ1JUX0dFVF9SRklCX1RFWFQKICAgIENSVF9HRVRfUkZJQl9URVhUICh0YmFzZSk7 CiMgICBlbHNlCiAgICB0YmFzZSA9IE5VTEw7CiMgICBlbmRpZgojICAgaWZkZWYgQ1JUX0dFVF9S RklCX0RBVEEKICAgIENSVF9HRVRfUkZJQl9EQVRBIChkYmFzZSk7CiMgICBlbHNlCiAgICBkYmFz ZSA9IE5VTEw7CiMgICBlbmRpZgogICAgX19yZWdpc3Rlcl9mcmFtZV9pbmZvX2Jhc2VzIChfX0VI X0ZSQU1FX0JFR0lOX18sICZvYiwgdGJhc2UsIGRiYXNlKTsKIyAgZWxzZQogICAgX19yZWdpc3Rl cl9mcmFtZV9pbmZvIChfX0VIX0ZSQU1FX0JFR0lOX18sICZvYik7CiMgIGVuZGlmCiAgfQojIGVs c2UKICBfX3JlZ2lzdGVyX2ZyYW1lIChfX0VIX0ZSQU1FX0JFR0lOX18pOwojIGVuZGlmCiNlbmRp Zgp9CgoKLyogVGhpcyBmdW5jdGlvbiBiZWNvbWVzIHRoZSBEVF9GSU5JIHRlcm1pbmF0aW9uIGZ1 bmN0aW9uCiAgIGZvciB0aGUgQyBsaWJyYXJ5LiAgKi8Kdm9pZCBfZmluaSAodm9pZCkgX19hdHRy aWJ1dGVfXyAoKHNlY3Rpb24gKCIuZmluaSIpKSk7IC8qIEp1c3QgZm9yIGtpY2tzLiAgKi8Kdm9p ZApfZmluaSAodm9pZCkKewogIC8qIENhbGwgZGVzdHJ1Y3RvciBmdW5jdGlvbnMuICAqLwogIHJ1 bl9ob29rcyAoX19EVE9SX0xJU1RfXyk7CiNpZmRlZiBIQVZFX0RXQVJGMl9VTldJTkRfSU5GTwoj IGlmZGVmIEhBVkVfRFdBUkYyX1VOV0lORF9JTkZPX1NUQVRJQwojICBpZiBkZWZpbmVkIENSVF9H RVRfUkZJQl9URVhUIHx8IGRlZmluZWQgQ1JUX0dFVF9SRklCX0RBVEEKICBfX2RlcmVnaXN0ZXJf ZnJhbWVfaW5mb19iYXNlcyAoX19FSF9GUkFNRV9CRUdJTl9fKTsKIyAgZWxzZQogIF9fZGVyZWdp c3Rlcl9mcmFtZV9pbmZvIChfX0VIX0ZSQU1FX0JFR0lOX18pOwojICBlbmRpZgojIGVsc2UKICBf X2RlcmVnaXN0ZXJfZnJhbWUgKF9fRUhfRlJBTUVfQkVHSU5fXyk7CiMgZW5kaWYKI2VuZGlmCn0K CgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQpzb2luaXQuRToKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiMgMSAic29pbml0LmMiCiMgMSAiPGJ1aWx0 LWluPiIKIyAxICI8Y29tbWFuZCBsaW5lPiIKCgoKCgoKIyAxICIuLi9pbmNsdWRlL2xpYmMtc3lt Ym9scy5oIiAxCiMgNTQgIi4uL2luY2x1ZGUvbGliYy1zeW1ib2xzLmgiCiMgMSAiL2hvbWUvY3Nk L2R2bDMvZ2xpYmMvYnVpbGQvY29uZmlnLmgiIDEKIyA1NSAiLi4vaW5jbHVkZS9saWJjLXN5bWJv bHMuaCIgMgojIDggIjxjb21tYW5kIGxpbmU+IiAyCiMgMSAic29pbml0LmMiCgoKCgoKIyAxICIu Li9pbmNsdWRlL2xpYmMtaW50ZXJuYWwuaCIgMQoKCgoKCgojIDEgIi4uL3N5c2RlcHMveDg2XzY0 L2hwLXRpbWluZy5oIiAxCgojIDEgIi4uL3N5c2RlcHMvaTM4Ni9pNjg2L2hwLXRpbWluZy5oIiAx CiMgMjQgIi4uL3N5c2RlcHMvaTM4Ni9pNjg2L2hwLXRpbWluZy5oIgojIDEgIi4uL2luY2x1ZGUv c3RyaW5nLmgiIDEKCgojIDEgIi4uL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEKIyAxICIuLi9wb3Np eC9zeXMvdHlwZXMuaCIgMQojIDI2ICIuLi9wb3NpeC9zeXMvdHlwZXMuaCIKIyAxICIuLi9pbmNs dWRlL2ZlYXR1cmVzLmgiIDEKIyAyODMgIi4uL2luY2x1ZGUvZmVhdHVyZXMuaCIKIyAxICIuLi9p bmNsdWRlL3N5cy9jZGVmcy5oIiAxCiMgMSAiLi4vbWlzYy9zeXMvY2RlZnMuaCIgMQojIDIgIi4u L2luY2x1ZGUvc3lzL2NkZWZzLmgiIDIKIyAyODQgIi4uL2luY2x1ZGUvZmVhdHVyZXMuaCIgMgoj IDI3ICIuLi9wb3NpeC9zeXMvdHlwZXMuaCIgMgoKCgojIDEgIi4uL3N5c2RlcHMvdW5peC9zeXN2 L2xpbnV4L3g4Nl82NC9iaXRzL3R5cGVzLmgiIDEKIyAyOSAiLi4vc3lzZGVwcy91bml4L3N5c3Yv bGludXgveDg2XzY0L2JpdHMvdHlwZXMuaCIKIyAxICIvaG9tZS9jc2QvZHZsMy94ODYtNjQvbGli L2djYy1saWIveDg2XzY0LXVua25vd24tbGludXgvMy4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0 CiMgMjEzICIvaG9tZS9jc2QvZHZsMy94ODYtNjQvbGliL2djYy1saWIveDg2XzY0LXVua25vd24t bGludXgvMy4zL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAp0eXBlZGVmIGxvbmcgdW5zaWduZWQgaW50 IHNpemVfdDsKIyAzMCAiLi4vc3lzZGVwcy91bml4L3N5c3YvbGludXgveDg2XzY0L2JpdHMvdHlw ZXMuaCIgMgojIDEgIi4uL3N5c2RlcHMveDg2XzY0L2JpdHMvd29yZHNpemUuaCIgMQojIDMxICIu Li9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC94ODZfNjQvYml0cy90eXBlcy5oIiAyCgoKdHlwZWRl ZiB1bnNpZ25lZCBjaGFyIF9fdV9jaGFyOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX3Vf c2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdV9pbnQ7CnR5cGVkZWYgdW5zaWduZWQgbG9u ZyBpbnQgX191X2xvbmc7Cgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IF9fdV9xdWFkX3Q7CnR5 cGVkZWYgbG9uZyBpbnQgX19xdWFkX3Q7CiMgNTUgIi4uL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4 L3g4Nl82NC9iaXRzL3R5cGVzLmgiCnR5cGVkZWYgc2lnbmVkIGNoYXIgX19pbnQ4X3Q7CnR5cGVk ZWYgdW5zaWduZWQgY2hhciBfX3VpbnQ4X3Q7CnR5cGVkZWYgc2lnbmVkIHNob3J0IGludCBfX2lu dDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9fdWludDE2X3Q7CnR5cGVkZWYgc2ln bmVkIGludCBfX2ludDMyX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdWludDMyX3Q7Cgp0eXBl ZGVmIHNpZ25lZCBsb25nIGludCBfX2ludDY0X3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQg X191aW50NjRfdDsKCgoKCgoKdHlwZWRlZiBfX3F1YWRfdCAqX19xYWRkcl90OwoKCnR5cGVkZWYg X191aW50NjRfdCBfX2Rldl90OwoKCgp0eXBlZGVmIF9fdWludDMyX3QgX191aWRfdDsKdHlwZWRl ZiBfX3VpbnQzMl90IF9fZ2lkX3Q7Cgp0eXBlZGVmIF9fdWludDY0X3QgX19pbm9fdDsKdHlwZWRl ZiBfX3VpbnQ2NF90IF9faW5vNjRfdDsKCgoKCnR5cGVkZWYgX191aW50MzJfdCBfX21vZGVfdDsK CnR5cGVkZWYgX191aW50NjRfdCBfX25saW5rX3Q7CnR5cGVkZWYgX19pbnQ2NF90IF9fb2ZmX3Q7 CnR5cGVkZWYgX19xdWFkX3QgX19sb2ZmX3Q7CnR5cGVkZWYgX19sb2ZmX3QgX19vZmY2NF90OwoK CgoKCgp0eXBlZGVmIF9faW50MzJfdCBfX3BpZF90OwoKdHlwZWRlZiBfX2ludDY0X3QgX19zc2l6 ZV90Owp0eXBlZGVmIF9fdWludDY0X3QgX19ybGltX3Q7CnR5cGVkZWYgX191aW50NjRfdCBfX3Js aW02NF90Owp0eXBlZGVmIF9faW50NjRfdCBfX2Jsa2NudF90Owp0eXBlZGVmIF9faW50NjRfdCBf X2Jsa2NudDY0X3Q7CnR5cGVkZWYgX191aW50NjRfdCBfX2ZzYmxrY250X3Q7CnR5cGVkZWYgX191 aW50NjRfdCBfX2ZzYmxrY250NjRfdDsKdHlwZWRlZiBfX3VpbnQ2NF90IF9fZnNmaWxjbnRfdDsK dHlwZWRlZiBfX3VpbnQ2NF90IF9fZnNmaWxjbnQ2NF90Owp0eXBlZGVmIF9fdWludDMyX3QgX19p ZF90OwojIDEyMyAiLi4vc3lzZGVwcy91bml4L3N5c3YvbGludXgveDg2XzY0L2JpdHMvdHlwZXMu aCIKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgX192YWxbMl07CiAgfSBfX2ZzaWRfdDsKCgp0 eXBlZGVmIGludCBfX2RhZGRyX3Q7CnR5cGVkZWYgY2hhciAqX19jYWRkcl90Owp0eXBlZGVmIGxv bmcgaW50IF9fdGltZV90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VzZWNvbmRzX3Q7CnR5cGVk ZWYgbG9uZyBpbnQgX19zdXNlY29uZHNfdDsKdHlwZWRlZiBsb25nIGludCBfX3N3YmxrX3Q7CnR5 cGVkZWYgbG9uZyBpbnQgX19jbG9ja190Owp0eXBlZGVmIGludCBfX2tleV90OwoKCnR5cGVkZWYg aW50IF9fY2xvY2tpZF90OwoKCnR5cGVkZWYgaW50IF9fdGltZXJfdDsKCgoKdHlwZWRlZiBpbnQg X19pcGNfcGlkX3Q7CgoKCgoKdHlwZWRlZiBsb25nIGludCBfX2Jsa3NpemVfdDsKIyAxNjMgIi4u L3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3g4Nl82NC9iaXRzL3R5cGVzLmgiCnR5cGVkZWYgaW50 IF9fdF9zY2FsYXJfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX190X3VzY2FsYXJfdDsKCgoKCgoK CnR5cGVkZWYgbG9uZyBpbnQgX19pbnRwdHJfdDsKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBf X3NvY2tsZW5fdDsKCgoKIyAxICIuLi9saW51eHRocmVhZHMvc3lzZGVwcy9wdGhyZWFkL2JpdHMv cHRocmVhZHR5cGVzLmgiIDEKIyAyMyAiLi4vbGludXh0aHJlYWRzL3N5c2RlcHMvcHRocmVhZC9i aXRzL3B0aHJlYWR0eXBlcy5oIgojIDEgIi4uL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2JpdHMv c2NoZWQuaCIgMQojIDY4ICIuLi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9iaXRzL3NjaGVkLmgi CnN0cnVjdCBfX3NjaGVkX3BhcmFtCiAgewogICAgaW50IF9fc2NoZWRfcHJpb3JpdHk7CiAgfTsK IyAyNCAiLi4vbGludXh0aHJlYWRzL3N5c2RlcHMvcHRocmVhZC9iaXRzL3B0aHJlYWR0eXBlcy5o IiAyCgoKc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrCnsKICBsb25nIGludCBfX3N0YXR1czsKICBp bnQgX19zcGlubG9jazsKCn07CgoKCnR5cGVkZWYgc3RydWN0IF9wdGhyZWFkX2Rlc2NyX3N0cnVj dCAqX3B0aHJlYWRfZGVzY3I7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX19wdGhyZWFkX2F0dHJfcwp7 CiAgaW50IF9fZGV0YWNoc3RhdGU7CiAgaW50IF9fc2NoZWRwb2xpY3k7CiAgc3RydWN0IF9fc2No ZWRfcGFyYW0gX19zY2hlZHBhcmFtOwogIGludCBfX2luaGVyaXRzY2hlZDsKICBpbnQgX19zY29w ZTsKICBzaXplX3QgX19ndWFyZHNpemU7CiAgaW50IF9fc3RhY2thZGRyX3NldDsKICB2b2lkICpf X3N0YWNrYWRkcjsKICBzaXplX3QgX19zdGFja3NpemU7Cn0gcHRocmVhZF9hdHRyX3Q7CgoKCnR5 cGVkZWYgc3RydWN0CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19jX2xvY2s7CiAgX3B0 aHJlYWRfZGVzY3IgX19jX3dhaXRpbmc7Cn0gcHRocmVhZF9jb25kX3Q7CgoKCnR5cGVkZWYgc3Ry dWN0CnsKICBpbnQgX19kdW1teTsKfSBwdGhyZWFkX2NvbmRhdHRyX3Q7CgoKdHlwZWRlZiB1bnNp Z25lZCBpbnQgcHRocmVhZF9rZXlfdDsKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbV9y ZXNlcnZlZDsKICBpbnQgX19tX2NvdW50OwogIF9wdGhyZWFkX2Rlc2NyIF9fbV9vd25lcjsKICBp bnQgX19tX2tpbmQ7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fbV9sb2NrOwp9IHB0aHJl YWRfbXV0ZXhfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX211dGV4a2luZDsKfSBwdGhy ZWFkX211dGV4YXR0cl90OwoKCgp0eXBlZGVmIGludCBwdGhyZWFkX29uY2VfdDsKCgoKCnR5cGVk ZWYgc3RydWN0IF9wdGhyZWFkX3J3bG9ja190CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sg X19yd19sb2NrOwogIGludCBfX3J3X3JlYWRlcnM7CiAgX3B0aHJlYWRfZGVzY3IgX19yd193cml0 ZXI7CiAgX3B0aHJlYWRfZGVzY3IgX19yd19yZWFkX3dhaXRpbmc7CiAgX3B0aHJlYWRfZGVzY3Ig X19yd193cml0ZV93YWl0aW5nOwogIGludCBfX3J3X2tpbmQ7CiAgaW50IF9fcndfcHNoYXJlZDsK fSBwdGhyZWFkX3J3bG9ja190OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbG9ja2tpbmQ7 CiAgaW50IF9fcHNoYXJlZDsKfSBwdGhyZWFkX3J3bG9ja2F0dHJfdDsKCgoKCnR5cGVkZWYgdm9s YXRpbGUgaW50IHB0aHJlYWRfc3BpbmxvY2tfdDsKCgp0eXBlZGVmIHN0cnVjdCB7CiAgc3RydWN0 IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fYmFfbG9jazsKICBpbnQgX19iYV9yZXF1aXJlZDsKICBpbnQg X19iYV9wcmVzZW50OwogIF9wdGhyZWFkX2Rlc2NyIF9fYmFfd2FpdGluZzsKfSBwdGhyZWFkX2Jh cnJpZXJfdDsKCgp0eXBlZGVmIHN0cnVjdCB7CiAgaW50IF9fcHNoYXJlZDsKfSBwdGhyZWFkX2Jh cnJpZXJhdHRyX3Q7CgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBwdGhyZWFkX3Q7CiMg MTgzICIuLi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC94ODZfNjQvYml0cy90eXBlcy5oIiAyCiMg MzEgIi4uL3Bvc2l4L3N5cy90eXBlcy5oIiAyCgoKCnR5cGVkZWYgX191X2NoYXIgdV9jaGFyOwp0 eXBlZGVmIF9fdV9zaG9ydCB1X3Nob3J0Owp0eXBlZGVmIF9fdV9pbnQgdV9pbnQ7CnR5cGVkZWYg X191X2xvbmcgdV9sb25nOwp0eXBlZGVmIF9fcXVhZF90IHF1YWRfdDsKdHlwZWRlZiBfX3VfcXVh ZF90IHVfcXVhZF90Owp0eXBlZGVmIF9fZnNpZF90IGZzaWRfdDsKCgoKCnR5cGVkZWYgX19sb2Zm X3QgbG9mZl90OwoKCgp0eXBlZGVmIF9faW5vX3QgaW5vX3Q7CgoKCgoKCnR5cGVkZWYgX19pbm82 NF90IGlubzY0X3Q7CgoKCgp0eXBlZGVmIF9fZGV2X3QgZGV2X3Q7CgoKCgp0eXBlZGVmIF9fZ2lk X3QgZ2lkX3Q7CgoKCgp0eXBlZGVmIF9fbW9kZV90IG1vZGVfdDsKCgoKCnR5cGVkZWYgX19ubGlu a190IG5saW5rX3Q7CgoKCgp0eXBlZGVmIF9fdWlkX3QgdWlkX3Q7CgoKCgoKdHlwZWRlZiBfX29m Zl90IG9mZl90OwoKCgoKCgp0eXBlZGVmIF9fb2ZmNjRfdCBvZmY2NF90OwoKCgoKdHlwZWRlZiBf X3BpZF90IHBpZF90OwoKCgoKdHlwZWRlZiBfX2lkX3QgaWRfdDsKCgoKCnR5cGVkZWYgX19zc2l6 ZV90IHNzaXplX3Q7CgoKCgoKdHlwZWRlZiBfX2RhZGRyX3QgZGFkZHJfdDsKdHlwZWRlZiBfX2Nh ZGRyX3QgY2FkZHJfdDsKCgoKCgp0eXBlZGVmIF9fa2V5X3Qga2V5X3Q7CiMgMTMyICIuLi9wb3Np eC9zeXMvdHlwZXMuaCIKIyAxICIuLi9pbmNsdWRlL3RpbWUuaCIgMQoKCiMgMSAiLi4vdGltZS90 aW1lLmgiIDEKIyA1OSAiLi4vdGltZS90aW1lLmgiCnR5cGVkZWYgX19jbG9ja190IGNsb2NrX3Q7 CiMgNzAgIi4uL3RpbWUvdGltZS5oIgp0eXBlZGVmIF9fdGltZV90IHRpbWVfdDsKIyA4MiAiLi4v dGltZS90aW1lLmgiCnR5cGVkZWYgX19jbG9ja2lkX3QgY2xvY2tpZF90OwojIDk0ICIuLi90aW1l L3RpbWUuaCIKdHlwZWRlZiBfX3RpbWVyX3QgdGltZXJfdDsKIyA0ICIuLi9pbmNsdWRlL3RpbWUu aCIgMgojIDEzMyAiLi4vcG9zaXgvc3lzL3R5cGVzLmgiIDIKCgoKdHlwZWRlZiBfX3VzZWNvbmRz X3QgdXNlY29uZHNfdDsKCgoKdHlwZWRlZiBfX3N1c2Vjb25kc190IHN1c2Vjb25kc190OwoKCgoK CiMgMSAiL2hvbWUvY3NkL2R2bDMveDg2LTY0L2xpYi9nY2MtbGliL3g4Nl82NC11bmtub3duLWxp bnV4LzMuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDE0NyAiLi4vcG9zaXgvc3lzL3R5cGVz LmgiIDIKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCB1bG9uZzsKdHlwZWRlZiB1bnNpZ25l ZCBzaG9ydCBpbnQgdXNob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50OwojIDE5MCAiLi4v cG9zaXgvc3lzL3R5cGVzLmgiCnR5cGVkZWYgaW50IGludDhfdCBfX2F0dHJpYnV0ZV9fICgoX19t b2RlX18gKF9fUUlfXykpKTsKdHlwZWRlZiBpbnQgaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19t b2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiBpbnQgaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19t b2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiBpbnQgaW50NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19t b2RlX18gKF9fRElfXykpKTsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDhfdCBfX2F0dHJp YnV0ZV9fICgoX19tb2RlX18gKF9fUUlfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQx Nl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVk IGludCB1X2ludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CnR5cGVk ZWYgdW5zaWduZWQgaW50IHVfaW50NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fRElf XykpKTsKCnR5cGVkZWYgaW50IHJlZ2lzdGVyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChf X3dvcmRfXykpKTsKIyAyMTIgIi4uL3Bvc2l4L3N5cy90eXBlcy5oIgojIDEgIi4uL2luY2x1ZGUv ZW5kaWFuLmgiIDEKIyAxICIuLi9zdHJpbmcvZW5kaWFuLmgiIDEKIyAzNyAiLi4vc3RyaW5nL2Vu ZGlhbi5oIgojIDEgIi4uL3N5c2RlcHMveDg2XzY0L2JpdHMvZW5kaWFuLmgiIDEKIyAzOCAiLi4v c3RyaW5nL2VuZGlhbi5oIiAyCiMgMiAiLi4vaW5jbHVkZS9lbmRpYW4uaCIgMgojIDIxMyAiLi4v cG9zaXgvc3lzL3R5cGVzLmgiIDIKCgojIDEgIi4uL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAxCgoj IDEgIi4uL21pc2Mvc3lzL3NlbGVjdC5oIiAxCiMgMzEgIi4uL21pc2Mvc3lzL3NlbGVjdC5oIgoj IDEgIi4uL3N5c2RlcHMvZ2VuZXJpYy9iaXRzL3NlbGVjdC5oIiAxCiMgMzIgIi4uL21pc2Mvc3lz L3NlbGVjdC5oIiAyCgoKIyAxICIuLi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9iaXRzL3NpZ3Nl dC5oIiAxCiMgMjMgIi4uL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2JpdHMvc2lnc2V0LmgiCnR5 cGVkZWYgaW50IF9fc2lnX2F0b21pY190OwoKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICB1bnNp Z25lZCBsb25nIGludCBfX3ZhbFsoMTAyNCAvICg4ICogc2l6ZW9mICh1bnNpZ25lZCBsb25nIGlu dCkpKV07CiAgfSBfX3NpZ3NldF90OwojIDM1ICIuLi9taXNjL3N5cy9zZWxlY3QuaCIgMgoKCgp0 eXBlZGVmIF9fc2lnc2V0X3Qgc2lnc2V0X3Q7CgoKCgoKIyAxICIuLi9pbmNsdWRlL3RpbWUuaCIg MQoKCiMgMSAiLi4vdGltZS90aW1lLmgiIDEKIyAxMDYgIi4uL3RpbWUvdGltZS5oIgpzdHJ1Y3Qg dGltZXNwZWMKICB7CiAgICBfX3RpbWVfdCB0dl9zZWM7CiAgICBsb25nIGludCB0dl9uc2VjOwog IH07CiMgNCAiLi4vaW5jbHVkZS90aW1lLmgiIDIKIyA0NSAiLi4vbWlzYy9zeXMvc2VsZWN0Lmgi IDIKCiMgMSAiLi4vc3lzZGVwcy91bml4L3N5c3YvbGludXgveDg2XzY0L2JpdHMvdGltZS5oIiAx CiMgNjcgIi4uL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3g4Nl82NC9iaXRzL3RpbWUuaCIKc3Ry dWN0IHRpbWV2YWwKICB7CiAgICBfX3RpbWVfdCB0dl9zZWM7CiAgICBfX3N1c2Vjb25kc190IHR2 X3VzZWM7CiAgfTsKIyA0NyAiLi4vbWlzYy9zeXMvc2VsZWN0LmgiIDIKIyA1NSAiLi4vbWlzYy9z eXMvc2VsZWN0LmgiCnR5cGVkZWYgbG9uZyBpbnQgX19mZF9tYXNrOwoKCgoKCgoKdHlwZWRlZiBz dHJ1Y3QKICB7CgoKCiAgICBfX2ZkX21hc2sgZmRzX2JpdHNbMTAyNCAvICg4ICogc2l6ZW9mIChf X2ZkX21hc2spKV07CgoKCgoKICB9IGZkX3NldDsKCgoKCgoKdHlwZWRlZiBfX2ZkX21hc2sgZmRf bWFzazsKIyA5NSAiLi4vbWlzYy9zeXMvc2VsZWN0LmgiCgoKCgoKCgpleHRlcm4gaW50IHNlbGVj dCAoaW50IF9fbmZkcywgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fcmVhZGZkcywKICAgICAgICAgICAg ICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX3dyaXRlZmRzLAogICAgICAgICAgICAgICAgICAg ZmRfc2V0ICpfX3Jlc3RyaWN0IF9fZXhjZXB0ZmRzLAogICAgICAgICAgICAgICAgICAgc3RydWN0 IHRpbWV2YWwgKl9fcmVzdHJpY3QgX190aW1lb3V0KSA7CgoKCgoKZXh0ZXJuIGludCBwc2VsZWN0 IChpbnQgX19uZmRzLCBmZF9zZXQgKl9fcmVzdHJpY3QgX19yZWFkZmRzLAogICAgICAgICAgICAg ICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX3dyaXRlZmRzLAogICAgICAgICAgICAgICAgICAg IGZkX3NldCAqX19yZXN0cmljdCBfX2V4Y2VwdGZkcywKICAgICAgICAgICAgICAgICAgICBjb25z dCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVzdHJpY3QgX190aW1lb3V0LAogICAgICAgICAgICAgICAg ICAgIGNvbnN0IF9fc2lnc2V0X3QgKl9fcmVzdHJpY3QgX19zaWdtYXNrKSA7CgoKCiMgMyAiLi4v aW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIKCgpleHRlcm4gaW50IF9fcHNlbGVjdCAoaW50IF9fbmZk cywgZmRfc2V0ICpfX3JlYWRmZHMsCiAgICAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fd3Jp dGVmZHMsIGZkX3NldCAqX19leGNlcHRmZHMsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBz dHJ1Y3QgdGltZXNwZWMgKl9fdGltZW91dCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9f c2lnc2V0X3QgKl9fc2lnbWFzayk7CgpleHRlcm4gaW50IF9fc2VsZWN0IChpbnQgX19uZmRzLCBm ZF9zZXQgKl9fcmVzdHJpY3QgX19yZWFkZmRzLAogICAgICAgICAgICAgICAgICAgICBmZF9zZXQg Kl9fcmVzdHJpY3QgX193cml0ZWZkcywKICAgICAgICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jl c3RyaWN0IF9fZXhjZXB0ZmRzLAogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCAq X19yZXN0cmljdCBfX3RpbWVvdXQpOwojIDIxNiAiLi4vcG9zaXgvc3lzL3R5cGVzLmgiIDIKCgoj IDEgIi4uL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3N5cy9zeXNtYWNyb3MuaCIgMQojIDIxOSAi Li4vcG9zaXgvc3lzL3R5cGVzLmgiIDIKCgoKCnR5cGVkZWYgX19ibGtzaXplX3QgYmxrc2l6ZV90 OwoKCgoKCgp0eXBlZGVmIF9fYmxrY250X3QgYmxrY250X3Q7CgoKCnR5cGVkZWYgX19mc2Jsa2Nu dF90IGZzYmxrY250X3Q7CgoKCnR5cGVkZWYgX19mc2ZpbGNudF90IGZzZmlsY250X3Q7CiMgMjU3 ICIuLi9wb3NpeC9zeXMvdHlwZXMuaCIKdHlwZWRlZiBfX2Jsa2NudDY0X3QgYmxrY250NjRfdDsK dHlwZWRlZiBfX2ZzYmxrY250NjRfdCBmc2Jsa2NudDY0X3Q7CnR5cGVkZWYgX19mc2ZpbGNudDY0 X3QgZnNmaWxjbnQ2NF90OwoKCgojIDIgIi4uL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIKIyA0ICIu Li9pbmNsdWRlL3N0cmluZy5oIiAyCgpleHRlcm4gdm9pZCAqX19tZW1jY3B5ICh2b2lkICpfX2Rl c3QsIF9fY29uc3Qgdm9pZCAqX19zcmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9f Yywgc2l6ZV90IF9fbik7CgpleHRlcm4gc2l6ZV90IF9fc3RybmxlbiAoX19jb25zdCBjaGFyICpf X3N0cmluZywgc2l6ZV90IF9fbWF4bGVuKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp OwoKZXh0ZXJuIGNoYXIgKl9fc3Ryc2VwIChjaGFyICoqX19zdHJpbmdwLCBfX2NvbnN0IGNoYXIg Kl9fZGVsaW0pOwoKZXh0ZXJuIGludCBfX3N0cnZlcnNjbXAgKF9fY29uc3QgY2hhciAqX19zMSwg X19jb25zdCBjaGFyICpfX3MyKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0 ZXJuIGludCBfX3N0cm5jYXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAq X19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKQogICAgIF9fYXR0cmli dXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBfX3N0cmNhc2VjbXAgKF9fY29uc3QgY2hh ciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVf XykpOwoKZXh0ZXJuIGNoYXIgKl9fc3RyY2FzZXN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0YWNr LCBfX2NvbnN0IGNoYXIgKl9fbmVlZGxlKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp OwoKZXh0ZXJuIGNoYXIgKl9fc3RyZHVwIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nKQogICAgIF9f YXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CmV4dGVybiBjaGFyICpfX3N0cm5kdXAgKF9fY29u c3QgY2hhciAqX19zdHJpbmcsIHNpemVfdCBfX24pCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbWFs bG9jX18pKTsKCmV4dGVybiB2b2lkICpfX3Jhd21lbWNociAoX19jb25zdCB2b2lkICpfX3MsIGlu dCBfX2MpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqX19z dHJjaHJudWwgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKQogICAgIF9fYXR0cmlidXRlX18g KChfX3B1cmVfXykpOwoKZXh0ZXJuIHZvaWQgKl9fbWVtcmNociAoX19jb25zdCB2b2lkICpfX3Ms IGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7Cgpl eHRlcm4gdm9pZCAqX19tZW1jaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3Qg X19uKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBfX2ZmcyAo aW50IF9faSkgX19hdHRyaWJ1dGVfXyAoKGNvbnN0KSk7CgpleHRlcm4gY2hhciAqX19zdHJlcnJv cl9yIChpbnQgX19lcnJudW0sIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4pOwoKCgojIDEg Ii4uL3N0cmluZy9zdHJpbmcuaCIgMQojIDI4ICIuLi9zdHJpbmcvc3RyaW5nLmgiCgoKCgoKIyAx ICIvaG9tZS9jc2QvZHZsMy94ODYtNjQvbGliL2djYy1saWIveDg2XzY0LXVua25vd24tbGludXgv My4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMzQgIi4uL3N0cmluZy9zdHJpbmcuaCIgMgoK CgpleHRlcm4gdm9pZCAqbWVtY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAg ICAgICAgICAgICAgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSA7 CgoKZXh0ZXJuIHZvaWQgKm1lbW1vdmUgKHZvaWQgKl9fZGVzdCwgX19jb25zdCB2b2lkICpfX3Ny Yywgc2l6ZV90IF9fbikKICAgICA7CgoKCgoKZXh0ZXJuIHZvaWQgKm1lbWNjcHkgKHZvaWQgKl9f cmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsCiAgICAgICAg ICAgICAgICAgICAgICBpbnQgX19jLCBzaXplX3QgX19uKQogICAgIDsKCgoKCmV4dGVybiB2b2lk ICptZW1zZXQgKHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikgOwoKCmV4dGVybiBpbnQg bWVtY21wIChfX2NvbnN0IHZvaWQgKl9fczEsIF9fY29uc3Qgdm9pZCAqX19zMiwgc2l6ZV90IF9f bikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gdm9pZCAqbWVtY2hy IChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikKICAgICAgX19hdHRyaWJ1 dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gdm9pZCAqcmF3bWVtY2hyIChfX2NvbnN0IHZv aWQgKl9fcywgaW50IF9fYykgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHZv aWQgKm1lbXJjaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKQogICAg ICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBjaGFyICpzdHJjcHkgKGNo YXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAg ICAgOwoKZXh0ZXJuIGNoYXIgKnN0cm5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAg ICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3Qg X19uKSA7CgoKZXh0ZXJuIGNoYXIgKnN0cmNhdCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICA7CgpleHRlcm4gY2hhciAqc3RybmNh dCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3Ny YywKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pIDsKCgpleHRlcm4gaW50IHN0cmNt cCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgX19hdHRyaWJ1 dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IHN0cm5jbXAgKF9fY29uc3QgY2hhciAqX19z MSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uKQogICAgIF9fYXR0cmlidXRlX18gKChf X3B1cmVfXykpOwoKCmV4dGVybiBpbnQgc3RyY29sbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2Nv bnN0IGNoYXIgKl9fczIpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4g c2l6ZV90IHN0cnhmcm0gKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAg ICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgOwoKCgoK CiMgMSAiLi4vaW5jbHVkZS94bG9jYWxlLmgiIDEKIyAxICIuLi9sb2NhbGUveGxvY2FsZS5oIiAx CiMgMjggIi4uL2xvY2FsZS94bG9jYWxlLmgiCnR5cGVkZWYgc3RydWN0IF9fbG9jYWxlX3N0cnVj dAp7CgogIHN0cnVjdCBsb2NhbGVfZGF0YSAqX19sb2NhbGVzWzEzXTsKCgogIGNvbnN0IHVuc2ln bmVkIHNob3J0IGludCAqX19jdHlwZV9iOwogIGNvbnN0IGludCAqX19jdHlwZV90b2xvd2VyOwog IGNvbnN0IGludCAqX19jdHlwZV90b3VwcGVyOwp9ICpfX2xvY2FsZV90OwojIDIgIi4uL2luY2x1 ZGUveGxvY2FsZS5oIiAyCiMgMTA5ICIuLi9zdHJpbmcvc3RyaW5nLmgiIDIKCgpleHRlcm4gaW50 IF9fc3RyY29sbF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgX19s b2NhbGVfdCBfX2wpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gc2l6 ZV90IF9fc3RyeGZybV9sIChjaGFyICpfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19zcmMsIHNpemVf dCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sKSA7CgoKCgpl eHRlcm4gY2hhciAqc3RyZHVwIChfX2NvbnN0IGNoYXIgKl9fcykgX19hdHRyaWJ1dGVfXyAoKF9f bWFsbG9jX18pKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKnN0cm5kdXAgKF9fY29uc3QgY2hhciAqX19z dHJpbmcsIHNpemVfdCBfX24pCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKIyAx NTUgIi4uL3N0cmluZy9zdHJpbmcuaCIKZXh0ZXJuIGNoYXIgKnN0cmNociAoX19jb25zdCBjaGFy ICpfX3MsIGludCBfX2MpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIg KnN0cnJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSBfX2F0dHJpYnV0ZV9fICgoX19w dXJlX18pKTsKCgoKCmV4dGVybiBjaGFyICpzdHJjaHJudWwgKF9fY29uc3QgY2hhciAqX19zLCBp bnQgX19jKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBzaXplX3Qgc3Ry Y3NwbiAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19yZWplY3QpCiAgICAgX19h dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHNpemVfdCBzdHJzcG4gKF9fY29uc3Qg Y2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0KQogICAgIF9fYXR0cmlidXRlX18gKChf X3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0cnBicmsgKF9fY29uc3QgY2hhciAqX19zLCBfX2Nv bnN0IGNoYXIgKl9fYWNjZXB0KQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0 ZXJuIGNoYXIgKnN0cnN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0YWNrLCBfX2NvbnN0IGNoYXIg Kl9fbmVlZGxlKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gY2hh ciAqc3RyY2FzZXN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0YWNrLCBfX2NvbnN0IGNoYXIgKl9f bmVlZGxlKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gY2hhciAq c3RydG9rIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f ZGVsaW0pCiAgICAgOwoKCgpleHRlcm4gY2hhciAqX19zdHJ0b2tfciAoY2hhciAqX19yZXN0cmlj dCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19kZWxpbSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2 ZV9wdHIpIDsKCmV4dGVybiBjaGFyICpzdHJ0b2tfciAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAogICAgICAgICAgICAgICAgICAgICAgIGNo YXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIDsKCgoKCgoKZXh0ZXJuIHZvaWQgKm1lbW1lbSAo X19jb25zdCB2b2lkICpfX2hheXN0YWNrLCBzaXplX3QgX19oYXlzdGFja2xlbiwKICAgICAgICAg ICAgICAgICAgICAgX19jb25zdCB2b2lkICpfX25lZWRsZSwgc2l6ZV90IF9fbmVlZGxlbGVuKQog ICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gdm9pZCAqX19tZW1wY3B5 ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25z dCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSA7CmV4dGVybiB2b2lkICptZW1w Y3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgIF9fY29u c3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgOwoKCgoKZXh0ZXJuIHNpemVf dCBzdHJsZW4gKF9fY29uc3QgY2hhciAqX19zKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK CgoKCmV4dGVybiBzaXplX3Qgc3RybmxlbiAoX19jb25zdCBjaGFyICpfX3N0cmluZywgc2l6ZV90 IF9fbWF4bGVuKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIGNo YXIgKnN0cmVycm9yIChpbnQgX19lcnJudW0pIDsKCgoKZXh0ZXJuIGNoYXIgKnN0cmVycm9yX3Ig KGludCBfX2Vycm51bSwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikgOwoKCgoKZXh0ZXJu IHZvaWQgX19iemVybyAodm9pZCAqX19zLCBzaXplX3QgX19uKSA7CgoKCmV4dGVybiB2b2lkIGJj b3B5IChfX2NvbnN0IHZvaWQgKl9fc3JjLCB2b2lkICpfX2Rlc3QsIHNpemVfdCBfX24pIDsKCgpl eHRlcm4gdm9pZCBiemVybyAodm9pZCAqX19zLCBzaXplX3QgX19uKSA7CgoKZXh0ZXJuIGludCBi Y21wIChfX2NvbnN0IHZvaWQgKl9fczEsIF9fY29uc3Qgdm9pZCAqX19zMiwgc2l6ZV90IF9fbikK ICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gY2hhciAqaW5kZXggKF9f Y29uc3QgY2hhciAqX19zLCBpbnQgX19jKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpl eHRlcm4gY2hhciAqcmluZGV4IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgX19hdHRyaWJ1 dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBpbnQgZmZzIChpbnQgX19pKSBfX2F0dHJpYnV0 ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IGZmc2wgKGxvbmcgaW50IF9fbCkgX19h dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKX19leHRlbnNpb25fXyBleHRlcm4gaW50IGZmc2xs IChsb25nIGxvbmcgaW50IF9fbGwpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK CgoKZXh0ZXJuIGludCBzdHJjYXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hh ciAqX19zMikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gaW50IHN0 cm5jYXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90 IF9fbikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpleHRlcm4gaW50IF9f c3RyY2FzZWNtcF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgX19hdHRyaWJ1dGVfXyAo KF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IF9fc3RybmNhc2VjbXBfbCAoX19jb25zdCBjaGFyICpf X3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl X3QgX19uLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp OwoKCgoKCmV4dGVybiBjaGFyICpzdHJzZXAgKGNoYXIgKipfX3Jlc3RyaWN0IF9fc3RyaW5ncCwK ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0pIDsK CgoKCmV4dGVybiBpbnQgc3RydmVyc2NtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNo YXIgKl9fczIpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGNoYXIg KnN0cnNpZ25hbCAoaW50IF9fc2lnKSA7CgoKZXh0ZXJuIGNoYXIgKl9fc3RwY3B5IChjaGFyICpf X3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIDsK ZXh0ZXJuIGNoYXIgKnN0cGNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX3NyYykKICAgICA7CgoKCmV4dGVybiBjaGFyICpfX3N0cG5jcHkgKGNo YXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIDsKZXh0ZXJuIGNoYXIgKnN0cG5jcHkg KGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSA7CgoKZXh0ZXJuIGNoYXIgKnN0cmZy eSAoY2hhciAqX19zdHJpbmcpIDsKCgpleHRlcm4gdm9pZCAqbWVtZnJvYiAodm9pZCAqX19zLCBz aXplX3QgX19uKSA7CgoKCgoKCmV4dGVybiBjaGFyICpiYXNlbmFtZSAoX19jb25zdCBjaGFyICpf X2ZpbGVuYW1lKSA7CiMgMzU3ICIuLi9zdHJpbmcvc3RyaW5nLmgiCiMgMSAiLi4vc3lzZGVwcy94 ODZfNjQvYml0cy9zdHJpbmcuaCIgMQojIDM1OCAiLi4vc3RyaW5nL3N0cmluZy5oIiAyCgoKIyAx ICIuLi9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAxCiMgMSAiLi4vc3RyaW5nL2JpdHMvc3RyaW5n Mi5oIiAxCiMgNTIgIi4uL3N0cmluZy9iaXRzL3N0cmluZzIuaCIKIyAxICIuLi9pbmNsdWRlL2Vu ZGlhbi5oIiAxCiMgNTMgIi4uL3N0cmluZy9iaXRzL3N0cmluZzIuaCIgMgojIDM4NyAiLi4vc3Ry aW5nL2JpdHMvc3RyaW5nMi5oIgpleHRlcm4gdm9pZCAqX19yYXdtZW1jaHIgKGNvbnN0IHZvaWQg Kl9fcywgaW50IF9fYyk7CiMgOTE3ICIuLi9zdHJpbmcvYml0cy9zdHJpbmcyLmgiCmV4dGVybiBf X2lubGluZSBzaXplX3QgX19zdHJjc3BuX2MxIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fcmVq ZWN0KTsKZXh0ZXJuIF9faW5saW5lIHNpemVfdApfX3N0cmNzcG5fYzEgKF9fY29uc3QgY2hhciAq X19zLCBpbnQgX19yZWplY3QpCnsKICByZWdpc3RlciBzaXplX3QgX19yZXN1bHQgPSAwOwogIHdo aWxlIChfX3NbX19yZXN1bHRdICE9ICdcMCcgJiYgX19zW19fcmVzdWx0XSAhPSBfX3JlamVjdCkK ICAgICsrX19yZXN1bHQ7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgpleHRlcm4gX19pbmxpbmUgc2l6 ZV90IF9fc3RyY3Nwbl9jMiAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX3JlamVjdDEsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19yZWplY3QyKTsKZXh0ZXJuIF9f aW5saW5lIHNpemVfdApfX3N0cmNzcG5fYzIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19yZWpl Y3QxLCBpbnQgX19yZWplY3QyKQp7CiAgcmVnaXN0ZXIgc2l6ZV90IF9fcmVzdWx0ID0gMDsKICB3 aGlsZSAoX19zW19fcmVzdWx0XSAhPSAnXDAnICYmIF9fc1tfX3Jlc3VsdF0gIT0gX19yZWplY3Qx CiAgICAgICAgICYmIF9fc1tfX3Jlc3VsdF0gIT0gX19yZWplY3QyKQogICAgKytfX3Jlc3VsdDsK ICByZXR1cm4gX19yZXN1bHQ7Cn0KCmV4dGVybiBfX2lubGluZSBzaXplX3QgX19zdHJjc3BuX2Mz IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fcmVqZWN0MSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludCBfX3JlamVjdDIsIGludCBfX3JlamVjdDMpOwpleHRlcm4gX19p bmxpbmUgc2l6ZV90Cl9fc3RyY3Nwbl9jMyAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX3JlamVj dDEsIGludCBfX3JlamVjdDIsCiAgICAgICAgICAgICAgaW50IF9fcmVqZWN0MykKewogIHJlZ2lz dGVyIHNpemVfdCBfX3Jlc3VsdCA9IDA7CiAgd2hpbGUgKF9fc1tfX3Jlc3VsdF0gIT0gJ1wwJyAm JiBfX3NbX19yZXN1bHRdICE9IF9fcmVqZWN0MQogICAgICAgICAmJiBfX3NbX19yZXN1bHRdICE9 IF9fcmVqZWN0MiAmJiBfX3NbX19yZXN1bHRdICE9IF9fcmVqZWN0MykKICAgICsrX19yZXN1bHQ7 CiAgcmV0dXJuIF9fcmVzdWx0Owp9CiMgOTc0ICIuLi9zdHJpbmcvYml0cy9zdHJpbmcyLmgiCmV4 dGVybiBfX2lubGluZSBzaXplX3QgX19zdHJzcG5fYzEgKF9fY29uc3QgY2hhciAqX19zLCBpbnQg X19hY2NlcHQpOwpleHRlcm4gX19pbmxpbmUgc2l6ZV90Cl9fc3Ryc3BuX2MxIChfX2NvbnN0IGNo YXIgKl9fcywgaW50IF9fYWNjZXB0KQp7CiAgcmVnaXN0ZXIgc2l6ZV90IF9fcmVzdWx0ID0gMDsK CiAgd2hpbGUgKF9fc1tfX3Jlc3VsdF0gPT0gX19hY2NlcHQpCiAgICArK19fcmVzdWx0OwogIHJl dHVybiBfX3Jlc3VsdDsKfQoKZXh0ZXJuIF9faW5saW5lIHNpemVfdCBfX3N0cnNwbl9jMiAoX19j b25zdCBjaGFyICpfX3MsIGludCBfX2FjY2VwdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCBfX2FjY2VwdDIpOwpleHRlcm4gX19pbmxpbmUgc2l6ZV90Cl9fc3Ryc3Bu X2MyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYWNjZXB0MSwgaW50IF9fYWNjZXB0MikKewog IHJlZ2lzdGVyIHNpemVfdCBfX3Jlc3VsdCA9IDA7CgogIHdoaWxlIChfX3NbX19yZXN1bHRdID09 IF9fYWNjZXB0MSB8fCBfX3NbX19yZXN1bHRdID09IF9fYWNjZXB0MikKICAgICsrX19yZXN1bHQ7 CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgpleHRlcm4gX19pbmxpbmUgc2l6ZV90IF9fc3Ryc3BuX2Mz IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYWNjZXB0MSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50IF9fYWNjZXB0MiwgaW50IF9fYWNjZXB0Myk7CmV4dGVybiBfX2lu bGluZSBzaXplX3QKX19zdHJzcG5fYzMgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19hY2NlcHQx LCBpbnQgX19hY2NlcHQyLCBpbnQgX19hY2NlcHQzKQp7CiAgcmVnaXN0ZXIgc2l6ZV90IF9fcmVz dWx0ID0gMDsKCiAgd2hpbGUgKF9fc1tfX3Jlc3VsdF0gPT0gX19hY2NlcHQxIHx8IF9fc1tfX3Jl c3VsdF0gPT0gX19hY2NlcHQyCiAgICAgICAgIHx8IF9fc1tfX3Jlc3VsdF0gPT0gX19hY2NlcHQz KQogICAgKytfX3Jlc3VsdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KIyAxMDMxICIuLi9zdHJpbmcv Yml0cy9zdHJpbmcyLmgiCmV4dGVybiBfX2lubGluZSBjaGFyICpfX3N0cnBicmtfYzIgKF9fY29u c3QgY2hhciAqX19zLCBpbnQgX19hY2NlcHQxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50IF9fYWNjZXB0Mik7CmV4dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJwYnJr X2MyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYWNjZXB0MSwgaW50IF9fYWNjZXB0MikKewoK ICB3aGlsZSAoKl9fcyAhPSAnXDAnICYmICpfX3MgIT0gX19hY2NlcHQxICYmICpfX3MgIT0gX19h Y2NlcHQyKQogICAgKytfX3M7CiAgcmV0dXJuICpfX3MgPT0gJ1wwJyA/ICgodm9pZCAqKTApIDog KGNoYXIgKikgKHNpemVfdCkgX19zOwp9CgpleHRlcm4gX19pbmxpbmUgY2hhciAqX19zdHJwYnJr X2MzIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYWNjZXB0MSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCBfX2FjY2VwdDIsIGludCBfX2FjY2VwdDMpOwpleHRlcm4g X19pbmxpbmUgY2hhciAqCl9fc3RycGJya19jMyAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2Fj Y2VwdDEsIGludCBfX2FjY2VwdDIsCiAgICAgICAgICAgICAgaW50IF9fYWNjZXB0MykKewoKICB3 aGlsZSAoKl9fcyAhPSAnXDAnICYmICpfX3MgIT0gX19hY2NlcHQxICYmICpfX3MgIT0gX19hY2Nl cHQyCiAgICAgICAgICYmICpfX3MgIT0gX19hY2NlcHQzKQogICAgKytfX3M7CiAgcmV0dXJuICpf X3MgPT0gJ1wwJyA/ICgodm9pZCAqKTApIDogKGNoYXIgKikgKHNpemVfdCkgX19zOwp9CiMgMTA4 MyAiLi4vc3RyaW5nL2JpdHMvc3RyaW5nMi5oIgpleHRlcm4gX19pbmxpbmUgY2hhciAqX19zdHJ0 b2tfcl8xYyAoY2hhciAqX19zLCBjaGFyIF9fc2VwLCBjaGFyICoqX19uZXh0cCk7CmV4dGVybiBf X2lubGluZSBjaGFyICoKX19zdHJ0b2tfcl8xYyAoY2hhciAqX19zLCBjaGFyIF9fc2VwLCBjaGFy ICoqX19uZXh0cCkKewogIGNoYXIgKl9fcmVzdWx0OwogIGlmIChfX3MgPT0gKCh2b2lkICopMCkp CiAgICBfX3MgPSAqX19uZXh0cDsKICB3aGlsZSAoKl9fcyA9PSBfX3NlcCkKICAgICsrX19zOwog IF9fcmVzdWx0ID0gKCh2b2lkICopMCk7CiAgaWYgKCpfX3MgIT0gJ1wwJykKICAgIHsKICAgICAg X19yZXN1bHQgPSBfX3MrKzsKICAgICAgd2hpbGUgKCpfX3MgIT0gJ1wwJykKICAgICAgICBpZiAo Kl9fcysrID09IF9fc2VwKQogICAgICAgICAgewogICAgICAgICAgICBfX3NbLTFdID0gJ1wwJzsK ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICpfX25leHRwID0gX19zOwogICAg fQogIHJldHVybiBfX3Jlc3VsdDsKfQojIDExMTUgIi4uL3N0cmluZy9iaXRzL3N0cmluZzIuaCIK ZXh0ZXJuIGNoYXIgKl9fc3Ryc2VwX2cgKGNoYXIgKipfX3N0cmluZ3AsIF9fY29uc3QgY2hhciAq X19kZWxpbSk7CiMgMTEzMyAiLi4vc3RyaW5nL2JpdHMvc3RyaW5nMi5oIgpleHRlcm4gX19pbmxp bmUgY2hhciAqX19zdHJzZXBfMWMgKGNoYXIgKipfX3MsIGNoYXIgX19yZWplY3QpOwpleHRlcm4g X19pbmxpbmUgY2hhciAqCl9fc3Ryc2VwXzFjIChjaGFyICoqX19zLCBjaGFyIF9fcmVqZWN0KQp7 CiAgcmVnaXN0ZXIgY2hhciAqX19yZXR2YWwgPSAqX19zOwogIGlmIChfX3JldHZhbCAhPSAoKHZv aWQgKikwKSAmJiAoKl9fcyA9IChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29uc3RhbnRfcCAo X19yZWplY3QpICYmIChfX3JlamVjdCkgPT0gJ1wwJyA/IChjaGFyICopIF9fcmF3bWVtY2hyIChf X3JldHZhbCwgX19yZWplY3QpIDogc3RyY2hyIChfX3JldHZhbCwgX19yZWplY3QpKSkpICE9ICgo dm9pZCAqKTApKQogICAgKigqX19zKSsrID0gJ1wwJzsKICByZXR1cm4gX19yZXR2YWw7Cn0KCmV4 dGVybiBfX2lubGluZSBjaGFyICpfX3N0cnNlcF8yYyAoY2hhciAqKl9fcywgY2hhciBfX3JlamVj dDEsIGNoYXIgX19yZWplY3QyKTsKZXh0ZXJuIF9faW5saW5lIGNoYXIgKgpfX3N0cnNlcF8yYyAo Y2hhciAqKl9fcywgY2hhciBfX3JlamVjdDEsIGNoYXIgX19yZWplY3QyKQp7CiAgcmVnaXN0ZXIg Y2hhciAqX19yZXR2YWwgPSAqX19zOwogIGlmIChfX3JldHZhbCAhPSAoKHZvaWQgKikwKSkKICAg IHsKICAgICAgcmVnaXN0ZXIgY2hhciAqX19jcCA9IF9fcmV0dmFsOwogICAgICB3aGlsZSAoMSkK ICAgICAgICB7CiAgICAgICAgICBpZiAoKl9fY3AgPT0gJ1wwJykKICAgICAgICAgICAgewogICAg ICAgICAgICAgIF9fY3AgPSAoKHZvaWQgKikwKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgICAg ICB9CiAgICAgICAgICBpZiAoKl9fY3AgPT0gX19yZWplY3QxIHx8ICpfX2NwID09IF9fcmVqZWN0 MikKICAgICAgICAgICAgewogICAgICAgICAgICAgICpfX2NwKysgPSAnXDAnOwogICAgICAgICAg ICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICArK19fY3A7CiAgICAgICAgfQogICAg ICAqX19zID0gX19jcDsKICAgIH0KICByZXR1cm4gX19yZXR2YWw7Cn0KCmV4dGVybiBfX2lubGlu ZSBjaGFyICpfX3N0cnNlcF8zYyAoY2hhciAqKl9fcywgY2hhciBfX3JlamVjdDEsIGNoYXIgX19y ZWplY3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgX19yZWplY3Qz KTsKZXh0ZXJuIF9faW5saW5lIGNoYXIgKgpfX3N0cnNlcF8zYyAoY2hhciAqKl9fcywgY2hhciBf X3JlamVjdDEsIGNoYXIgX19yZWplY3QyLCBjaGFyIF9fcmVqZWN0MykKewogIHJlZ2lzdGVyIGNo YXIgKl9fcmV0dmFsID0gKl9fczsKICBpZiAoX19yZXR2YWwgIT0gKCh2b2lkICopMCkpCiAgICB7 CiAgICAgIHJlZ2lzdGVyIGNoYXIgKl9fY3AgPSBfX3JldHZhbDsKICAgICAgd2hpbGUgKDEpCiAg ICAgICAgewogICAgICAgICAgaWYgKCpfX2NwID09ICdcMCcpCiAgICAgICAgICAgIHsKICAgICAg ICAgICAgICBfX2NwID0gKCh2b2lkICopMCk7CiAgICAgICAgICBicmVhazsKICAgICAgICAgICAg fQogICAgICAgICAgaWYgKCpfX2NwID09IF9fcmVqZWN0MSB8fCAqX19jcCA9PSBfX3JlamVjdDIg fHwgKl9fY3AgPT0gX19yZWplY3QzKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgKl9fY3Ar KyA9ICdcMCc7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICsr X19jcDsKICAgICAgICB9CiAgICAgICpfX3MgPSBfX2NwOwogICAgfQogIHJldHVybiBfX3JldHZh bDsKfQojIDEyMDkgIi4uL3N0cmluZy9iaXRzL3N0cmluZzIuaCIKIyAxICIuLi9pbmNsdWRlL3N0 ZGxpYi5oIiAxCgoKCgoKCiMgMSAiLi4vc3RkbGliL3N0ZGxpYi5oIiAxCiMgMzMgIi4uL3N0ZGxp Yi9zdGRsaWIuaCIKIyAxICIvaG9tZS9jc2QvZHZsMy94ODYtNjQvbGliL2djYy1saWIveDg2XzY0 LXVua25vd24tbGludXgvMy4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMzQgIi4uL3N0ZGxp Yi9zdGRsaWIuaCIgMgoKCiMgNTI3ICIuLi9zdGRsaWIvc3RkbGliLmgiCmV4dGVybiB2b2lkICpt YWxsb2MgKHNpemVfdCBfX3NpemUpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgpleHRl cm4gdm9pZCAqY2FsbG9jIChzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSkKICAgICBfX2F0 dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwojIDg2NCAiLi4vc3RkbGliL3N0ZGxpYi5oIgoKIyA4 ICIuLi9pbmNsdWRlL3N0ZGxpYi5oIiAyCiMgMTIxMCAiLi4vc3RyaW5nL2JpdHMvc3RyaW5nMi5o IiAyCgoKCgpleHRlcm4gY2hhciAqX19zdHJkdXAgKF9fY29uc3QgY2hhciAqX19zdHJpbmcpIF9f YXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CiMgMTIzMyAiLi4vc3RyaW5nL2JpdHMvc3RyaW5n Mi5oIgpleHRlcm4gY2hhciAqX19zdHJuZHVwIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBzaXpl X3QgX19uKQogICAgIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CiMgMiAiLi4vaW5jbHVk ZS9iaXRzL3N0cmluZzIuaCIgMgojIDM2MSAiLi4vc3RyaW5nL3N0cmluZy5oIiAyCgoKCgojIDUw ICIuLi9pbmNsdWRlL3N0cmluZy5oIiAyCiMgMjUgIi4uL3N5c2RlcHMvaTM4Ni9pNjg2L2hwLXRp bWluZy5oIiAyCiMgMSAiLi4vc3lzZGVwcy91bml4L3N5c3YvbGludXgvc3lzL3BhcmFtLmgiIDEK IyAyMiAiLi4vc3lzZGVwcy91bml4L3N5c3YvbGludXgvc3lzL3BhcmFtLmgiCiMgMSAiLi4vaW5j bHVkZS9saW1pdHMuaCIgMQojIDEyNCAiLi4vaW5jbHVkZS9saW1pdHMuaCIKIyAxICIvaG9tZS9j c2QvZHZsMy94ODYtNjQvbGliL2djYy1saWIveDg2XzY0LXVua25vd24tbGludXgvMy4zL2luY2x1 ZGUvbGltaXRzLmgiIDEgMyA0CiMgMTI1ICIuLi9pbmNsdWRlL2xpbWl0cy5oIiAyCiMgMTQ0ICIu Li9pbmNsdWRlL2xpbWl0cy5oIgojIDEgIi4uL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDEK IyAxICIuLi9wb3NpeC9iaXRzL3Bvc2l4MV9saW0uaCIgMQojIDEyNiAiLi4vcG9zaXgvYml0cy9w b3NpeDFfbGltLmgiCiMgMSAiLi4vbGludXh0aHJlYWRzL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4 L2JpdHMvbG9jYWxfbGltLmgiIDEKIyAzNiAiLi4vbGludXh0aHJlYWRzL3N5c2RlcHMvdW5peC9z eXN2L2xpbnV4L2JpdHMvbG9jYWxfbGltLmgiCiMgMSAiL2hvbWUvY3NkL2R2bDMveDg2LTY0L3g4 Nl82NC11bmtub3duLWxpbnV4L3N5cy1pbmNsdWRlL2xpbnV4L2xpbWl0cy5oIiAxIDMgNAojIDM3 ICIuLi9saW51eHRocmVhZHMvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYml0cy9sb2NhbF9saW0u aCIgMgojIDEyNyAiLi4vcG9zaXgvYml0cy9wb3NpeDFfbGltLmgiIDIKIyAyICIuLi9pbmNsdWRl L2JpdHMvcG9zaXgxX2xpbS5oIiAyCiMgMTQ1ICIuLi9pbmNsdWRlL2xpbWl0cy5oIiAyCgoKCiMg MSAiLi4vaW5jbHVkZS9iaXRzL3Bvc2l4Ml9saW0uaCIgMQojIDEgIi4uL3Bvc2l4L2JpdHMvcG9z aXgyX2xpbS5oIiAxCiMgMiAiLi4vaW5jbHVkZS9iaXRzL3Bvc2l4Ml9saW0uaCIgMgojIDE0OSAi Li4vaW5jbHVkZS9saW1pdHMuaCIgMgoKCgojIDEgIi4uL2luY2x1ZGUvYml0cy94b3Blbl9saW0u aCIgMQojIDM0ICIuLi9pbmNsdWRlL2JpdHMveG9wZW5fbGltLmgiCiMgMSAiL2hvbWUvY3NkL2R2 bDMvZ2xpYmMvYnVpbGQvYml0cy9zdGRpb19saW0uaCIgMQojIDM1ICIuLi9pbmNsdWRlL2JpdHMv eG9wZW5fbGltLmgiIDIKIyAxNTMgIi4uL2luY2x1ZGUvbGltaXRzLmgiIDIKIyAyMyAiLi4vc3lz ZGVwcy91bml4L3N5c3YvbGludXgvc3lzL3BhcmFtLmgiIDIKCiMgMSAiL2hvbWUvY3NkL2R2bDMv eDg2LTY0L3g4Nl82NC11bmtub3duLWxpbnV4L3N5cy1pbmNsdWRlL2xpbnV4L3BhcmFtLmgiIDEg MyA0CgoKCiMgMSAiL2hvbWUvY3NkL2R2bDMveDg2LTY0L3g4Nl82NC11bmtub3duLWxpbnV4L3N5 cy1pbmNsdWRlL2FzbS9wYXJhbS5oIiAxIDMgNAojIDUgIi9ob21lL2NzZC9kdmwzL3g4Ni02NC94 ODZfNjQtdW5rbm93bi1saW51eC9zeXMtaW5jbHVkZS9saW51eC9wYXJhbS5oIiAyIDMgNAojIDI1 ICIuLi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zeXMvcGFyYW0uaCIgMgojIDQyICIuLi9zeXNk ZXBzL3VuaXgvc3lzdi9saW51eC9zeXMvcGFyYW0uaCIKIyAxICIuLi9pbmNsdWRlL3N5cy90eXBl cy5oIiAxCiMgNDMgIi4uL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3N5cy9wYXJhbS5oIiAyCiMg MjYgIi4uL3N5c2RlcHMvaTM4Ni9pNjg2L2hwLXRpbWluZy5oIiAyCiMgMSAiLi4vc3RkaW8tY29t bW9uL19pdG9hLmgiIDEKIyAyMiAiLi4vc3RkaW8tY29tbW9uL19pdG9hLmgiCiMgMSAiLi4vaW5j bHVkZS9zeXMvY2RlZnMuaCIgMQojIDIzICIuLi9zdGRpby1jb21tb24vX2l0b2EuaCIgMgoKCgoK CgpleHRlcm4gY2hhciAqX2l0b2EgKHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgdmFsdWUsIGNoYXIg KmJ1ZmxpbSwKICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYmFzZSwgaW50IHVwcGVy X2Nhc2UpOwoKc3RhdGljIGlubGluZSBjaGFyICogX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpCl9p dG9hX3dvcmQgKHVuc2lnbmVkIGxvbmcgdmFsdWUsIGNoYXIgKmJ1ZmxpbSwKICAgICAgICAgICAg dW5zaWduZWQgaW50IGJhc2UsIGludCB1cHBlcl9jYXNlKQp7CiAgZXh0ZXJuIGNvbnN0IGNoYXIg X2l0b2FfdXBwZXJfZGlnaXRzW10sIF9pdG9hX2xvd2VyX2RpZ2l0c1tdOwogIGNvbnN0IGNoYXIg KmRpZ2l0cyA9IHVwcGVyX2Nhc2UgPyBfaXRvYV91cHBlcl9kaWdpdHMgOiBfaXRvYV9sb3dlcl9k aWdpdHM7CiAgY2hhciAqYnAgPSBidWZsaW07CgogIHN3aXRjaCAoYmFzZSkKICAgIHsKCgoKCgoK CiAgICAgIGNhc2UgMTA6IGRvICotLWJwID0gZGlnaXRzW3ZhbHVlICUgMTBdOyB3aGlsZSAoKHZh bHVlIC89IDEwKSAhPSAwKTsgYnJlYWs7CiAgICAgIGNhc2UgMTY6IGRvICotLWJwID0gZGlnaXRz W3ZhbHVlICUgMTZdOyB3aGlsZSAoKHZhbHVlIC89IDE2KSAhPSAwKTsgYnJlYWs7CiAgICAgIGNh c2UgODogZG8gKi0tYnAgPSBkaWdpdHNbdmFsdWUgJSA4XTsgd2hpbGUgKCh2YWx1ZSAvPSA4KSAh PSAwKTsgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBkbwogICAgICAgICotLWJwID0gZGlnaXRz W3ZhbHVlICUgYmFzZV07CiAgICAgIHdoaWxlICgodmFsdWUgLz0gYmFzZSkgIT0gMCk7CiAgICB9 CiAgcmV0dXJuIGJwOwp9CgpzdGF0aWMgaW5saW5lIGNoYXIgKiBfX2F0dHJpYnV0ZV9fICgodW51 c2VkKSkKX2ZpdG9hX3dvcmQgKHVuc2lnbmVkIGxvbmcgdmFsdWUsIGNoYXIgKmJ1ZiwgdW5zaWdu ZWQgaW50IGJhc2UsIGludCB1cHBlcl9jYXNlKQp7CiAgY2hhciB0bXBidWZbc2l6ZW9mICh2YWx1 ZSkgKiA0XTsKICBjaGFyICpjcCA9IF9pdG9hX3dvcmQgKHZhbHVlLCB0bXBidWYgKyBzaXplb2Yg KHZhbHVlKSAqIDQsIGJhc2UsIHVwcGVyX2Nhc2UpOwogIHdoaWxlIChjcCA8IHRtcGJ1ZiArIHNp emVvZiAodmFsdWUpICogNCkKICAgICpidWYrKyA9ICpjcCsrOwogIHJldHVybiBidWY7Cn0KCnN0 YXRpYyBpbmxpbmUgY2hhciAqIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKQpfZml0b2EgKHVuc2ln bmVkIGxvbmcgbG9uZyB2YWx1ZSwgY2hhciAqYnVmLCB1bnNpZ25lZCBpbnQgYmFzZSwgaW50IHVw cGVyX2Nhc2UpCnsKICBjaGFyIHRtcGJ1ZltzaXplb2YgKHZhbHVlKSAqIDRdOwogIGNoYXIgKmNw ID0gX2l0b2EgKHZhbHVlLCB0bXBidWYgKyBzaXplb2YgKHZhbHVlKSAqIDQsIGJhc2UsIHVwcGVy X2Nhc2UpOwogIHdoaWxlIChjcCA8IHRtcGJ1ZiArIHNpemVvZiAodmFsdWUpICogNCkKICAgICpi dWYrKyA9ICpjcCsrOwogIHJldHVybiBidWY7Cn0KIyAyNyAiLi4vc3lzZGVwcy9pMzg2L2k2ODYv aHAtdGltaW5nLmgiIDIKIyA4NSAiLi4vc3lzZGVwcy9pMzg2L2k2ODYvaHAtdGltaW5nLmgiCnR5 cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBocF90aW1pbmdfdDsKCgoKZXh0ZXJuIGhwX3Rp bWluZ190IF9fbGliY19ocF90aW1pbmdfb3ZlcmhlYWQ7CiMgMyAiLi4vc3lzZGVwcy94ODZfNjQv aHAtdGltaW5nLmgiIDIKIyA4ICIuLi9pbmNsdWRlL2xpYmMtaW50ZXJuYWwuaCIgMgoKCmV4dGVy biB2b2lkIF9fbGliY19pbml0X3NlY3VyZSAodm9pZCk7CgoKZXh0ZXJuIHZvaWQgX19saWJjX2ds b2JhbF9jdG9ycyAodm9pZCk7CgoKCmV4dGVybiBpbnQgX19wcm9maWxlX2ZyZXF1ZW5jeSAodm9p ZCk7CgoKZXh0ZXJuIHZvaWQgX19jeWdfcHJvZmlsZV9mdW5jX2VudGVyICh2b2lkICp0aGlzX2Zu LCB2b2lkICpjYWxsX3NpdGUpOwpleHRlcm4gdm9pZCBfX2N5Z19wcm9maWxlX2Z1bmNfZXhpdCAo dm9pZCAqdGhpc19mbiwgdm9pZCAqY2FsbF9zaXRlKTsKCgpleHRlcm4gaHBfdGltaW5nX3QgX19n ZXRfY2xvY2tmcmVxICh2b2lkKTsKCgpleHRlcm4gdm9pZCBfX2xpYmNfZnJlZXJlcyAodm9pZCk7 CiMgNyAic29pbml0LmMiIDIKIyAxICIuLi9pbmNsdWRlL3N0ZGxpYi5oIiAxCgoKCgoKCiMgMSAi Li4vc3RkbGliL3N0ZGxpYi5oIiAxCiMgMzMgIi4uL3N0ZGxpYi9zdGRsaWIuaCIKIyAxICIvaG9t ZS9jc2QvZHZsMy94ODYtNjQvbGliL2djYy1saWIveDg2XzY0LXVua25vd24tbGludXgvMy4zL2lu Y2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMzI1ICIvaG9tZS9jc2QvZHZsMy94ODYtNjQvbGliL2dj Yy1saWIveDg2XzY0LXVua25vd24tbGludXgvMy4zL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAp0eXBl ZGVmIGludCB3Y2hhcl90OwojIDM0ICIuLi9zdGRsaWIvc3RkbGliLmgiIDIKCgoKCgoKCgojIDEg Ii4uL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2JpdHMvd2FpdGZsYWdzLmgiIDEKIyA0MyAiLi4v c3RkbGliL3N0ZGxpYi5oIiAyCiMgMSAiLi4vc3lzZGVwcy9nZW5lcmljL2JpdHMvd2FpdHN0YXR1 cy5oIiAxCiMgNjMgIi4uL3N5c2RlcHMvZ2VuZXJpYy9iaXRzL3dhaXRzdGF0dXMuaCIKIyAxICIu Li9pbmNsdWRlL2VuZGlhbi5oIiAxCiMgNjQgIi4uL3N5c2RlcHMvZ2VuZXJpYy9iaXRzL3dhaXRz dGF0dXMuaCIgMgoKdW5pb24gd2FpdAogIHsKICAgIGludCB3X3N0YXR1czsKICAgIHN0cnVjdAog ICAgICB7CgogICAgICAgIHVuc2lnbmVkIGludCBfX3dfdGVybXNpZzo3OwogICAgICAgIHVuc2ln bmVkIGludCBfX3dfY29yZWR1bXA6MTsKICAgICAgICB1bnNpZ25lZCBpbnQgX193X3JldGNvZGU6 ODsKICAgICAgICB1bnNpZ25lZCBpbnQ6MTY7CgoKCgoKCgogICAgICB9IF9fd2FpdF90ZXJtaW5h dGVkOwogICAgc3RydWN0CiAgICAgIHsKCiAgICAgICAgdW5zaWduZWQgaW50IF9fd19zdG9wdmFs Ojg7CiAgICAgICAgdW5zaWduZWQgaW50IF9fd19zdG9wc2lnOjg7CiAgICAgICAgdW5zaWduZWQg aW50OjE2OwoKCgoKCgogICAgICB9IF9fd2FpdF9zdG9wcGVkOwogIH07CiMgNDQgIi4uL3N0ZGxp Yi9zdGRsaWIuaCIgMgojIDY4ICIuLi9zdGRsaWIvc3RkbGliLmgiCnR5cGVkZWYgdW5pb24KICB7 CiAgICB1bmlvbiB3YWl0ICpfX3VwdHI7CiAgICBpbnQgKl9faXB0cjsKICB9IF9fV0FJVF9TVEFU VVMgX19hdHRyaWJ1dGVfXyAoKF9fdHJhbnNwYXJlbnRfdW5pb25fXykpOwojIDk0ICIuLi9zdGRs aWIvc3RkbGliLmgiCnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50IHF1b3Q7CiAgICBpbnQgcmVt OwogIH0gZGl2X3Q7CgoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgbG9uZyBpbnQgcXVvdDsKICAg IGxvbmcgaW50IHJlbTsKICB9IGxkaXZfdDsKCgoKCgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgc3Ry dWN0CiAgewogICAgbG9uZyBsb25nIGludCBxdW90OwogICAgbG9uZyBsb25nIGludCByZW07CiAg fSBsbGRpdl90OwojIDEzMyAiLi4vc3RkbGliL3N0ZGxpYi5oIgpleHRlcm4gc2l6ZV90IF9fY3R5 cGVfZ2V0X21iX2N1cl9tYXggKHZvaWQpIDsKCgoKZXh0ZXJuIGRvdWJsZSBhdG9mIChfX2NvbnN0 IGNoYXIgKl9fbnB0cikgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IGF0 b2kgKF9fY29uc3QgY2hhciAqX19ucHRyKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4 dGVybiBsb25nIGludCBhdG9sIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgX19hdHRyaWJ1dGVfXyAo KF9fcHVyZV9fKSk7CgoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxvbmcgbG9uZyBpbnQgYXRvbGwg KF9fY29uc3QgY2hhciAqX19ucHRyKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK CgpleHRlcm4gZG91YmxlIHN0cnRvZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwK ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSA7CgoKCmV4 dGVybiBmbG9hdCBzdHJ0b2YgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg ICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSA7CgpleHRlcm4gbG9u ZyBkb3VibGUgc3RydG9sZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSA7CgoKCmV4 dGVybiBsb25nIGludCBzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAg ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19i YXNlKSA7CgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgc3RydG91bCAoX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIg KipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIDsKCgoKX19leHRlbnNpb25f XwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b3EgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19l bmRwdHIsIGludCBfX2Jhc2UpIDsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcg bG9uZyBpbnQgc3RydG91cSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRw dHIsIGludCBfX2Jhc2UpCiAgICAgOwoKCgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxv bmcgaW50IHN0cnRvbGwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19i YXNlKSA7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHN0cnRv dWxsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jh c2UpCiAgICAgOwojIDIxMSAiLi4vc3RkbGliL3N0ZGxpYi5oIgojIDEgIi4uL2luY2x1ZGUveGxv Y2FsZS5oIiAxCiMgMjEyICIuLi9zdGRsaWIvc3RkbGliLmgiIDIKCgoKZXh0ZXJuIGxvbmcgaW50 IF9fc3RydG9sX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIDsKCmV4dGVybiB1 bnNpZ25lZCBsb25nIGludCBfX3N0cnRvdWxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0 cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg X19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKSA7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxv bmcgaW50IF9fc3RydG9sbF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIs IGludCBfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90 IF9fbG9jKSA7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9f c3RydG91bGxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNl LCBfX2xvY2FsZV90IF9fbG9jKQogICAgIDsKCmV4dGVybiBkb3VibGUgX19zdHJ0b2RfbCAoX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICBj aGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykKICAgICA7CgpleHRl cm4gZmxvYXQgX19zdHJ0b2ZfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBfX2xvY2Fs ZV90IF9fbG9jKSA7CgpleHRlcm4gbG9uZyBkb3VibGUgX19zdHJ0b2xkX2wgKF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hh ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X19sb2NhbGVfdCBfX2xvYykgOwoKCgoKCgpleHRlcm4gZG91YmxlIF9fc3RydG9kX2ludGVybmFs IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAg OwpleHRlcm4gZmxvYXQgX19zdHJ0b2ZfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJp Y3QgX19lbmRwdHIsIGludCBfX2dyb3VwKQogICAgIDsKZXh0ZXJuIGxvbmcgZG91YmxlIF9fc3Ry dG9sZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2dyb3VwKSA7Cgpl eHRlcm4gbG9uZyBpbnQgX19zdHJ0b2xfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVz dHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9f YmFzZSwgaW50IF9fZ3JvdXApIDsKCgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fc3RydG91 bF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRw dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jh c2UsIGludCBfX2dyb3VwKSA7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50 IF9fc3RydG9sbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBf X2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19i YXNlLCBpbnQgX19ncm91cCkgOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25n IGxvbmcgaW50IF9fc3RydG91bGxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19ucHRy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFy ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApCiAgICAgOwoKCgoKCgoK ZXh0ZXJuIF9faW5saW5lIGRvdWJsZQpzdHJ0b2QgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKQp7CiAgcmV0dXJuIF9fc3RydG9kX2lu dGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCAwKTsKfQpleHRlcm4gX19pbmxpbmUgbG9uZyBpbnQK c3RydG9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmlj dCBfX2VuZHB0ciwKICAgICAgICBpbnQgX19iYXNlKQp7CiAgcmV0dXJuIF9fc3RydG9sX2ludGVy bmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9CmV4dGVybiBfX2lubGluZSB1bnNp Z25lZCBsb25nIGludApzdHJ0b3VsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBj aGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgaW50IF9fYmFzZSkKewogIHJldHVy biBfX3N0cnRvdWxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KCgpl eHRlcm4gX19pbmxpbmUgZmxvYXQKc3RydG9mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u cHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikKewogIHJldHVybiBfX3N0cnRvZl9pbnRl cm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgMCk7Cn0KZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91Ymxl CnN0cnRvbGQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3Ry aWN0IF9fZW5kcHRyKQp7CiAgcmV0dXJuIF9fc3RydG9sZF9pbnRlcm5hbCAoX19ucHRyLCBfX2Vu ZHB0ciwgMCk7Cn0KCgoKX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgbG9uZyBsb25nIGlu dApzdHJ0b3EgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3Ry aWN0IF9fZW5kcHRyLAogICAgICAgIGludCBfX2Jhc2UpCnsKICByZXR1cm4gX19zdHJ0b2xsX2lu dGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9Cl9fZXh0ZW5zaW9uX18gZXh0 ZXJuIF9faW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQKc3RydG91cSAoX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAg IGludCBfX2Jhc2UpCnsKICByZXR1cm4gX19zdHJ0b3VsbF9pbnRlcm5hbCAoX19ucHRyLCBfX2Vu ZHB0ciwgX19iYXNlLCAwKTsKfQoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBsb25n IGxvbmcgaW50CnN0cnRvbGwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIg KipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICBpbnQgX19iYXNlKQp7CiAgcmV0dXJuIF9f c3RydG9sbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQpfX2V4dGVu c2lvbl9fIGV4dGVybiBfX2lubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgaW50CnN0cnRvdWxsIChf X2NvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRw dHIsCiAgICAgICAgICBpbnQgX19iYXNlKQp7CiAgcmV0dXJuIF9fc3RydG91bGxfaW50ZXJuYWwg KF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KCgpleHRlcm4gX19pbmxpbmUgZG91Ymxl CmF0b2YgKF9fY29uc3QgY2hhciAqX19ucHRyKQp7CiAgcmV0dXJuIHN0cnRvZCAoX19ucHRyLCAo Y2hhciAqKikgKCh2b2lkICopMCkpOwp9CmV4dGVybiBfX2lubGluZSBpbnQKYXRvaSAoX19jb25z dCBjaGFyICpfX25wdHIpCnsKICByZXR1cm4gKGludCkgc3RydG9sIChfX25wdHIsIChjaGFyICoq KSAoKHZvaWQgKikwKSwgMTApOwp9CmV4dGVybiBfX2lubGluZSBsb25nIGludAphdG9sIChfX2Nv bnN0IGNoYXIgKl9fbnB0cikKewogIHJldHVybiBzdHJ0b2wgKF9fbnB0ciwgKGNoYXIgKiopICgo dm9pZCAqKTApLCAxMCk7Cn0KCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBsb25nIGxv bmcgaW50CmF0b2xsIChfX2NvbnN0IGNoYXIgKl9fbnB0cikKewogIHJldHVybiBzdHJ0b2xsIChf X25wdHIsIChjaGFyICoqKSAoKHZvaWQgKikwKSwgMTApOwp9CiMgMzg0ICIuLi9zdGRsaWIvc3Rk bGliLmgiCmV4dGVybiBjaGFyICpsNjRhIChsb25nIGludCBfX24pIDsKCgpleHRlcm4gbG9uZyBp bnQgYTY0bCAoX19jb25zdCBjaGFyICpfX3MpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK CiMgMSAiLi4vaW5jbHVkZS9zeXMvdHlwZXMuaCIgMQojIDM5MSAiLi4vc3RkbGliL3N0ZGxpYi5o IiAyCgoKCgoKCmV4dGVybiBsb25nIGludCByYW5kb20gKHZvaWQpIDsKCgpleHRlcm4gdm9pZCBz cmFuZG9tICh1bnNpZ25lZCBpbnQgX19zZWVkKSA7CgoKCgoKZXh0ZXJuIGNoYXIgKmluaXRzdGF0 ZSAodW5zaWduZWQgaW50IF9fc2VlZCwgY2hhciAqX19zdGF0ZWJ1ZiwKICAgICAgICAgICAgICAg ICAgICAgICAgc2l6ZV90IF9fc3RhdGVsZW4pIDsKCgoKZXh0ZXJuIGNoYXIgKnNldHN0YXRlIChj aGFyICpfX3N0YXRlYnVmKSA7CgoKCgoKCgpzdHJ1Y3QgcmFuZG9tX2RhdGEKICB7CiAgICBpbnQz Ml90ICpmcHRyOwogICAgaW50MzJfdCAqcnB0cjsKICAgIGludDMyX3QgKnN0YXRlOwogICAgaW50 IHJhbmRfdHlwZTsKICAgIGludCByYW5kX2RlZzsKICAgIGludCByYW5kX3NlcDsKICAgIGludDMy X3QgKmVuZF9wdHI7CiAgfTsKCmV4dGVybiBpbnQgcmFuZG9tX3IgKHN0cnVjdCByYW5kb21fZGF0 YSAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAqX19yZXN0 cmljdCBfX3Jlc3VsdCkgOwoKZXh0ZXJuIGludCBzcmFuZG9tX3IgKHVuc2lnbmVkIGludCBfX3Nl ZWQsIHN0cnVjdCByYW5kb21fZGF0YSAqX19idWYpIDsKCmV4dGVybiBpbnQgaW5pdHN0YXRlX3Ig KHVuc2lnbmVkIGludCBfX3NlZWQsIGNoYXIgKl9fcmVzdHJpY3QgX19zdGF0ZWJ1ZiwKICAgICAg ICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc3RhdGVsZW4sCiAgICAgICAgICAgICAgICAgICAg ICAgIHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZikgOwoKZXh0ZXJuIGludCBz ZXRzdGF0ZV9yIChjaGFyICpfX3Jlc3RyaWN0IF9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmKSA7CgoKCgoKZXh0ZXJu IGludCByYW5kICh2b2lkKSA7CgpleHRlcm4gdm9pZCBzcmFuZCAodW5zaWduZWQgaW50IF9fc2Vl ZCkgOwoKCgpleHRlcm4gaW50IHJhbmRfciAodW5zaWduZWQgaW50ICpfX3NlZWQpIDsKCgoKCgoK CmV4dGVybiBkb3VibGUgZHJhbmQ0OCAodm9pZCkgOwpleHRlcm4gZG91YmxlIGVyYW5kNDggKHVu c2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSA7CgoKZXh0ZXJuIGxvbmcgaW50IGxyYW5kNDgg KHZvaWQpIDsKZXh0ZXJuIGxvbmcgaW50IG5yYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hz dWJpWzNdKSA7CgoKZXh0ZXJuIGxvbmcgaW50IG1yYW5kNDggKHZvaWQpIDsKZXh0ZXJuIGxvbmcg aW50IGpyYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSA7CgoKZXh0ZXJuIHZv aWQgc3JhbmQ0OCAobG9uZyBpbnQgX19zZWVkdmFsKSA7CmV4dGVybiB1bnNpZ25lZCBzaG9ydCBp bnQgKnNlZWQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2dlszXSkgOwpleHRlcm4gdm9p ZCBsY29uZzQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSkgOwoKCgoKCnN0cnVjdCBk cmFuZDQ4X2RhdGEKICB7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX194WzNdOwogICAgdW5zaWdu ZWQgc2hvcnQgaW50IF9fb2xkX3hbM107CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19jOwogICAg dW5zaWduZWQgc2hvcnQgaW50IF9faW5pdDsKICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19h OwogIH07CgoKZXh0ZXJuIGludCBkcmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVz dHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKl9fcmVzdHJpY3Qg X19yZXN1bHQpIDsKZXh0ZXJuIGludCBlcmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hz dWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0 cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqX19yZXN0cmljdCBf X3Jlc3VsdCkgOwoKCmV4dGVybiBpbnQgbHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpf X3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVz dHJpY3QgX19yZXN1bHQpIDsKZXh0ZXJuIGludCBucmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGlu dCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAq X19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jl c3RyaWN0IF9fcmVzdWx0KSA7CgoKZXh0ZXJuIGludCBtcmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4 X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGlu dCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgOwpleHRlcm4gaW50IGpyYW5kNDhfciAodW5zaWduZWQg c2hvcnQgaW50IF9feHN1YmlbM10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0 OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBp bnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIDsKCgpleHRlcm4gaW50IHNyYW5kNDhfciAobG9uZyBp bnQgX19zZWVkdmFsLCBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikKICAgICA7CgpleHRl cm4gaW50IHNlZWQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdLAogICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikgOwoKZXh0ZXJuIGlu dCBsY29uZzQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3BhcmFtWzddLAogICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpIDsKIyA1MzYgIi4uL3N0ZGxp Yi9zdGRsaWIuaCIKZXh0ZXJuIHZvaWQgKnJlYWxsb2MgKHZvaWQgKl9fcHRyLCBzaXplX3QgX19z aXplKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKZXh0ZXJuIHZvaWQgZnJlZSAodm9p ZCAqX19wdHIpIDsKCgoKZXh0ZXJuIHZvaWQgY2ZyZWUgKHZvaWQgKl9fcHRyKSA7CgoKCiMgMSAi Li4vaW5jbHVkZS9hbGxvY2EuaCIgMQoKCiMgMSAiLi4vc3RkbGliL2FsbG9jYS5oIiAxCiMgMjUg Ii4uL3N0ZGxpYi9hbGxvY2EuaCIKIyAxICIvaG9tZS9jc2QvZHZsMy94ODYtNjQvbGliL2djYy1s aWIveDg2XzY0LXVua25vd24tbGludXgvMy4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMjYg Ii4uL3N0ZGxpYi9hbGxvY2EuaCIgMgoKCgoKCgoKZXh0ZXJuIHZvaWQgKmFsbG9jYSAoc2l6ZV90 IF9fc2l6ZSkgOwoKCgoKCgojIDQgIi4uL2luY2x1ZGUvYWxsb2NhLmgiIDIKCgoKCmV4dGVybiB2 b2lkICpfX2FsbG9jYSAoc2l6ZV90IF9fc2l6ZSk7CiMgNTQ3ICIuLi9zdGRsaWIvc3RkbGliLmgi IDIKCgoKCmV4dGVybiB2b2lkICp2YWxsb2MgKHNpemVfdCBfX3NpemUpIF9fYXR0cmlidXRlX18g KChfX21hbGxvY19fKSk7CgoKCgpleHRlcm4gaW50IHBvc2l4X21lbWFsaWduICh2b2lkICoqX19t ZW1wdHIsIHNpemVfdCBfX2FsaWdubWVudCwgc2l6ZV90IF9fc2l6ZSkKICAgICBfX2F0dHJpYnV0 ZV9fICgoX19tYWxsb2NfXykpOwoKCgpleHRlcm4gdm9pZCBhYm9ydCAodm9pZCkgX19hdHRyaWJ1 dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgpleHRlcm4gaW50IGF0ZXhpdCAodm9pZCAoKl9fZnVu YykgKHZvaWQpKSA7CgoKCgpleHRlcm4gaW50IG9uX2V4aXQgKHZvaWQgKCpfX2Z1bmMpIChpbnQg X19zdGF0dXMsIHZvaWQgKl9fYXJnKSwgdm9pZCAqX19hcmcpCiAgICAgOwoKCgoKCmV4dGVybiB2 b2lkIGV4aXQgKGludCBfX3N0YXR1cykgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoK CgoKZXh0ZXJuIHZvaWQgX0V4aXQgKGludCBfX3N0YXR1cykgX19hdHRyaWJ1dGVfXyAoKF9fbm9y ZXR1cm5fXykpOwoKCgoKZXh0ZXJuIGNoYXIgKmdldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUp IDsKCgoKZXh0ZXJuIGNoYXIgKl9fc2VjdXJlX2dldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUp IDsKCgoKCgpleHRlcm4gaW50IHB1dGVudiAoY2hhciAqX19zdHJpbmcpIDsKCgoKCgpleHRlcm4g aW50IHNldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUsIF9fY29uc3QgY2hhciAqX192YWx1ZSwg aW50IF9fcmVwbGFjZSkKICAgICA7CgoKZXh0ZXJuIGludCB1bnNldGVudiAoX19jb25zdCBjaGFy ICpfX25hbWUpIDsKCgoKCgoKZXh0ZXJuIGludCBjbGVhcmVudiAodm9pZCkgOwojIDYyMyAiLi4v c3RkbGliL3N0ZGxpYi5oIgpleHRlcm4gY2hhciAqbWt0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSA7 CgoKCgoKCgpleHRlcm4gaW50IG1rc3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIDsKIyA2NDAgIi4u L3N0ZGxpYi9zdGRsaWIuaCIKZXh0ZXJuIGludCBta3N0ZW1wNjQgKGNoYXIgKl9fdGVtcGxhdGUp IDsKIyA2NTAgIi4uL3N0ZGxpYi9zdGRsaWIuaCIKZXh0ZXJuIGNoYXIgKm1rZHRlbXAgKGNoYXIg Kl9fdGVtcGxhdGUpIDsKCgoKCmV4dGVybiBpbnQgc3lzdGVtIChfX2NvbnN0IGNoYXIgKl9fY29t bWFuZCkgOwoKCgoKCgpleHRlcm4gY2hhciAqY2Fub25pY2FsaXplX2ZpbGVfbmFtZSAoX19jb25z dCBjaGFyICpfX25hbWUpIDsKIyA2NzIgIi4uL3N0ZGxpYi9zdGRsaWIuaCIKZXh0ZXJuIGNoYXIg KnJlYWxwYXRoIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19uYW1lLAogICAgICAgICAgICAg ICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19yZXNvbHZlZCkgOwoKCgoKCgp0eXBlZGVmIGlu dCAoKl9fY29tcGFyX2ZuX3QpIChfX2NvbnN0IHZvaWQgKiwgX19jb25zdCB2b2lkICopOwoKCnR5 cGVkZWYgX19jb21wYXJfZm5fdCBjb21wYXJpc29uX2ZuX3Q7CgoKCgoKZXh0ZXJuIHZvaWQgKmJz ZWFyY2ggKF9fY29uc3Qgdm9pZCAqX19rZXksIF9fY29uc3Qgdm9pZCAqX19iYXNlLAogICAgICAg ICAgICAgICAgICAgICAgc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUsIF9fY29tcGFyX2Zu X3QgX19jb21wYXIpOwoKCgpleHRlcm4gdm9pZCBxc29ydCAodm9pZCAqX19iYXNlLCBzaXplX3Qg X19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgIF9fY29tcGFyX2ZuX3Qg X19jb21wYXIpOwoKCgpleHRlcm4gaW50IGFicyAoaW50IF9feCkgX19hdHRyaWJ1dGVfXyAoKF9f Y29uc3RfXykpOwpleHRlcm4gbG9uZyBpbnQgbGFicyAobG9uZyBpbnQgX194KSBfX2F0dHJpYnV0 ZV9fICgoX19jb25zdF9fKSk7CgpfX2V4dGVuc2lvbl9fIGV4dGVybiBsb25nIGxvbmcgaW50IGxs YWJzIChsb25nIGxvbmcgaW50IF9feCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7 CgoKCgoKCmV4dGVybiBkaXZfdCBkaXYgKGludCBfX251bWVyLCBpbnQgX19kZW5vbSkKICAgICBf X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiBsZGl2X3QgbGRpdiAobG9uZyBpbnQg X19udW1lciwgbG9uZyBpbnQgX19kZW5vbSkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f KSk7CgpfX2V4dGVuc2lvbl9fIGV4dGVybiBsbGRpdl90IGxsZGl2IChsb25nIGxvbmcgaW50IF9f bnVtZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbG9uZyBpbnQg X19kZW5vbSkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CiMgNzI4ICIuLi9zdGRs aWIvc3RkbGliLmgiCmV4dGVybiBjaGFyICplY3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRp Z2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19y ZXN0cmljdCBfX3NpZ24pIDsKCgoKCmV4dGVybiBjaGFyICpmY3Z0IChkb3VibGUgX192YWx1ZSwg aW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAg IGludCAqX19yZXN0cmljdCBfX3NpZ24pIDsKCgoKCmV4dGVybiBjaGFyICpnY3Z0IChkb3VibGUg X192YWx1ZSwgaW50IF9fbmRpZ2l0LCBjaGFyICpfX2J1ZikgOwoKCgoKZXh0ZXJuIGNoYXIgKnFl Y3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAg ICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24pIDsKZXh0 ZXJuIGNoYXIgKnFmY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAg ICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBf X3NpZ24pIDsKZXh0ZXJuIGNoYXIgKnFnY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19u ZGlnaXQsIGNoYXIgKl9fYnVmKSA7CgoKCgpleHRlcm4gaW50IGVjdnRfciAoZG91YmxlIF9fdmFs dWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAg ICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAg ICAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuKSA7CmV4dGVybiBpbnQgZmN2dF9yIChkb3VibGUg X192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAg ICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYs CiAgICAgICAgICAgICAgICAgICBzaXplX3QgX19sZW4pIDsKCmV4dGVybiBpbnQgcWVjdnRfciAo bG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGlu dCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduLAogICAgICAgICAg ICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikgOwpleHRlcm4g aW50IHFmY3Z0X3IgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAg ICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2ln biwKICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19s ZW4pIDsKCgoKCgoKZXh0ZXJuIGludCBtYmxlbiAoX19jb25zdCBjaGFyICpfX3MsIHNpemVfdCBf X24pIDsKCgpleHRlcm4gaW50IG1idG93YyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3YywKICAg ICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24p IDsKCgpleHRlcm4gaW50IHdjdG9tYiAoY2hhciAqX19zLCB3Y2hhcl90IF9fd2NoYXIpIDsKCgoK ZXh0ZXJuIHNpemVfdCBtYnN0b3djcyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3Y3MsCiAgICAg ICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBf X24pIDsKCmV4dGVybiBzaXplX3Qgd2NzdG9tYnMgKGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAg ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2NzLCBz aXplX3QgX19uKQogICAgIDsKCgoKCgoKCmV4dGVybiBpbnQgcnBtYXRjaCAoX19jb25zdCBjaGFy ICpfX3Jlc3BvbnNlKSA7CiMgODA4ICIuLi9zdGRsaWIvc3RkbGliLmgiCmV4dGVybiBpbnQgZ2V0 c3Vib3B0IChjaGFyICoqX19yZXN0cmljdCBfX29wdGlvbnAsCiAgICAgICAgICAgICAgICAgICAg ICBjaGFyICpfX2NvbnN0ICpfX3Jlc3RyaWN0IF9fdG9rZW5zLAogICAgICAgICAgICAgICAgICAg ICAgY2hhciAqKl9fcmVzdHJpY3QgX192YWx1ZXApIDsKCgoKCgpleHRlcm4gdm9pZCBzZXRrZXkg KF9fY29uc3QgY2hhciAqX19rZXkpIDsKCgoKCgoKCmV4dGVybiBpbnQgcG9zaXhfb3BlbnB0IChp bnQgX19vZmxhZykgOwoKCgoKCgoKZXh0ZXJuIGludCBncmFudHB0IChpbnQgX19mZCkgOwoKCgpl eHRlcm4gaW50IHVubG9ja3B0IChpbnQgX19mZCkgOwoKCgoKZXh0ZXJuIGNoYXIgKnB0c25hbWUg KGludCBfX2ZkKSA7CgoKCgoKCmV4dGVybiBpbnQgcHRzbmFtZV9yIChpbnQgX19mZCwgY2hhciAq X19idWYsIHNpemVfdCBfX2J1ZmxlbikgOwoKCmV4dGVybiBpbnQgZ2V0cHQgKHZvaWQpIDsKCgoK CgoKZXh0ZXJuIGludCBnZXRsb2FkYXZnIChkb3VibGUgX19sb2FkYXZnW10sIGludCBfX25lbGVt KSA7CgoKCgoKCiMgOCAiLi4vaW5jbHVkZS9zdGRsaWIuaCIgMgoKCgpleHRlcm4gbG9uZyBpbnQg X19yYW5kb20gKHZvaWQpOwpleHRlcm4gdm9pZCBfX3NyYW5kb20gKHVuc2lnbmVkIGludCBfX3Nl ZWQpOwpleHRlcm4gY2hhciAqX19pbml0c3RhdGUgKHVuc2lnbmVkIGludCBfX3NlZWQsIGNoYXIg Kl9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc3RhdGVsZW4p OwpleHRlcm4gY2hhciAqX19zZXRzdGF0ZSAoY2hhciAqX19zdGF0ZWJ1Zik7CmV4dGVybiBpbnQg X19yYW5kb21fciAoc3RydWN0IHJhbmRvbV9kYXRhICpfX2J1ZiwgaW50MzJfdCAqX19yZXN1bHQp OwpleHRlcm4gaW50IF9fc3JhbmRvbV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCBzdHJ1Y3QgcmFu ZG9tX2RhdGEgKl9fYnVmKTsKZXh0ZXJuIGludCBfX2luaXRzdGF0ZV9yICh1bnNpZ25lZCBpbnQg X19zZWVkLCBjaGFyICpfX3N0YXRlYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf dCBfX3N0YXRlbGVuLCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fYnVmKTsKZXh0ZXJuIGludCBfX3Nl dHN0YXRlX3IgKGNoYXIgKl9fc3RhdGVidWYsIHN0cnVjdCByYW5kb21fZGF0YSAqX19idWYpOwpl eHRlcm4gaW50IF9fcmFuZF9yICh1bnNpZ25lZCBpbnQgKl9fc2VlZCk7CmV4dGVybiBpbnQgX19l cmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlciwgZG91YmxlICpfX3Jlc3VsdCk7 CmV4dGVybiBpbnQgX19ucmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAog ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlciwKICAg ICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdWx0KTsKZXh0ZXJuIGludCBfX2py YW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCiAgICAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAg ICAgICBsb25nIGludCAqX19yZXN1bHQpOwpleHRlcm4gaW50IF9fc3JhbmQ0OF9yIChsb25nIGlu dCBfX3NlZWR2YWwsCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEg Kl9fYnVmZmVyKTsKZXh0ZXJuIGludCBfX3NlZWQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19z ZWVkMTZ2WzNdLAogICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9f YnVmZmVyKTsKZXh0ZXJuIGludCBfX2xjb25nNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFy YW1bN10sCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVm ZmVyKTsKCgpleHRlcm4gaW50IF9fZHJhbmQ0OF9pdGVyYXRlICh1bnNpZ25lZCBzaG9ydCBpbnQg X194c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhf ZGF0YSAqX19idWZmZXIpOwoKZXh0ZXJuIGludCBfX3NldGVudiAoX19jb25zdCBjaGFyICpfX25h bWUsIF9fY29uc3QgY2hhciAqX192YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgaW50IF9fcmVw bGFjZSk7CmV4dGVybiBpbnQgX191bnNldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpOwpleHRl cm4gaW50IF9fY2xlYXJlbnYgKHZvaWQpOwpleHRlcm4gY2hhciAqX19jYW5vbmljYWxpemVfZmls ZV9uYW1lIChfX2NvbnN0IGNoYXIgKl9fbmFtZSk7CmV4dGVybiBjaGFyICpfX3JlYWxwYXRoIChf X2NvbnN0IGNoYXIgKl9fbmFtZSwgY2hhciAqX19yZXNvbHZlZCk7CmV4dGVybiBpbnQgX19wdHNu YW1lX3IgKGludCBfX2ZkLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKTsKZXh0ZXJuIGlu dCBfX2dldHB0ICh2b2lkKTsKZXh0ZXJuIGludCBfX3Bvc2l4X29wZW5wdCAoaW50IF9fb2ZsYWcp OwoKZXh0ZXJuIGludCBfX2FkZF90b19lbnZpcm9uIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBj aGFyICp2YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjb21i aW5lcywgaW50IHJlcGxhY2UpOwoKZXh0ZXJuIHZvaWQgX3F1aWNrc29ydCAodm9pZCAqY29uc3Qg cGJhc2UsIHNpemVfdCB0b3RhbF9lbGVtcywKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90 IHNpemUsIF9fY29tcGFyX2ZuX3QgY21wKTsKCmV4dGVybiBpbnQgX19vbl9leGl0ICh2b2lkICgq X19mdW5jKSAoaW50IF9fc3RhdHVzLCB2b2lkICpfX2FyZyksIHZvaWQgKl9fYXJnKTsKCmV4dGVy biBpbnQgX19jeGFfYXRleGl0ICh2b2lkICgqZnVuYykgKHZvaWQgKiksIHZvaWQgKmFyZywgdm9p ZCAqZCk7CgpleHRlcm4gdm9pZCBfX2N4YV9maW5hbGl6ZSAodm9pZCAqZCk7CgpleHRlcm4gaW50 IF9fcG9zaXhfbWVtYWxpZ24gKHZvaWQgKiptZW1wdHIsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVf dCBzaXplKQogICAgIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgpleHRlcm4gaW50IF9f bGliY19zeXN0ZW0gKGNvbnN0IGNoYXIgKmxpbmUpOwojIDggInNvaW5pdC5jIiAyCgoKIyAxICIu Li9zeXNkZXBzL2dlbmVyaWMvZ2NjZnJhbWUuaCIgMQojIDIwICIuLi9zeXNkZXBzL2dlbmVyaWMv Z2NjZnJhbWUuaCIKIyAxICIuLi9pbmNsdWRlL3N5cy90eXBlcy5oIiAxCiMgMjEgIi4uL3N5c2Rl cHMvZ2VuZXJpYy9nY2NmcmFtZS5oIiAyCgpzdHJ1Y3QgZHdhcmZfZmRlOwpzdHJ1Y3QgZmRlX3Zl Y3RvcjsKCnN0cnVjdCBvYmplY3QKewogIHZvaWQgKnBjX2JlZ2luOwogIHZvaWQgKnRiYXNlOwog IHZvaWQgKmRiYXNlOwogIHVuaW9uIHsKICAgIHN0cnVjdCBkd2FyZl9mZGUgKnNpbmdsZTsKICAg IHN0cnVjdCBkd2FyZl9mZGUgKiphcnJheTsKICAgIHN0cnVjdCBmZGVfdmVjdG9yICpzb3J0Owog IH0gdTsKCiAgdW5pb24gewogICAgc3RydWN0IHsKICAgICAgdW5zaWduZWQgbG9uZyBzb3J0ZWQg OiAxOwogICAgICB1bnNpZ25lZCBsb25nIGZyb21fYXJyYXkgOiAxOwogICAgICB1bnNpZ25lZCBs b25nIG1peGVkX2VuY29kaW5nIDogMTsKICAgICAgdW5zaWduZWQgbG9uZyBlbmNvZGluZyA6IDg7 CgoKICAgICAgdW5zaWduZWQgbG9uZyBjb3VudCA6IDIxOwogICAgfSBiOwogICAgc2l6ZV90IGk7 CiAgfSBzOwoKICBzdHJ1Y3Qgb2JqZWN0ICpuZXh0Owp9OwojIDExICJzb2luaXQuYyIgMgoKCnN0 YXRpYyB2b2lkICgqY29uc3QgX19DVE9SX0xJU1RfX1sxXSkgKHZvaWQpCiAgICAgX19hdHRyaWJ1 dGVfXyAoKHNlY3Rpb24gKCIuY3RvcnMiKSkpCiAgICAgPSB7ICh2b2lkICgqKSAodm9pZCkpIC0x IH07CnN0YXRpYyB2b2lkICgqY29uc3QgX19EVE9SX0xJU1RfX1sxXSkgKHZvaWQpCiAgICAgX19h dHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZHRvcnMiKSkpCiAgICAgPSB7ICh2b2lkICgqKSAodm9p ZCkpIC0xIH07CgpzdGF0aWMgaW5saW5lIHZvaWQKcnVuX2hvb2tzICh2b2lkICgqY29uc3QgbGlz dFtdKSAodm9pZCkpCnsKICB3aGlsZSAoKisrbGlzdCkKICAgICgqKmxpc3QpICgpOwp9CgoKc3Rh dGljIGNoYXIgX19FSF9GUkFNRV9CRUdJTl9fW10KICAgICBfX2F0dHJpYnV0ZV9fICgoc2VjdGlv biAoIi5laF9mcmFtZSIpKSkKICAgICA9IHsgfTsKCmV4dGVybiB2b2lkIF9fcmVnaXN0ZXJfZnJh bWVfaW5mbyAoY29uc3Qgdm9pZCAqLCBzdHJ1Y3Qgb2JqZWN0ICopOwpleHRlcm4gdm9pZCBfX3Jl Z2lzdGVyX2ZyYW1lX2luZm9fYmFzZXMgKGNvbnN0IHZvaWQgKiwgc3RydWN0IG9iamVjdCAqLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiwgdm9pZCAqKTsK ZXh0ZXJuIHZvaWQgX19kZXJlZ2lzdGVyX2ZyYW1lX2luZm8gKGNvbnN0IHZvaWQgKik7CmV4dGVy biB2b2lkIF9fZGVyZWdpc3Rlcl9mcmFtZV9pbmZvX2Jhc2VzIChjb25zdCB2b2lkICopOwoKCgoK CgoKdm9pZApfX2xpYmNfZ2xvYmFsX2N0b3JzICh2b2lkKQp7CgogIHJ1bl9ob29rcyAoX19DVE9S X0xJU1RfXyk7CgoKCiAgewogICAgc3RhdGljIHN0cnVjdCBvYmplY3Qgb2I7CiMgNjkgInNvaW5p dC5jIgogICAgX19yZWdpc3Rlcl9mcmFtZV9pbmZvIChfX0VIX0ZSQU1FX0JFR0lOX18sICZvYik7 CgogIH0KCgoKCn0KCgoKCnZvaWQgX2ZpbmkgKHZvaWQpIF9fYXR0cmlidXRlX18gKChzZWN0aW9u ICgiLmZpbmkiKSkpOwp2b2lkCl9maW5pICh2b2lkKQp7CgogIHJ1bl9ob29rcyAoX19EVE9SX0xJ U1RfXyk7CgoKCgoKICBfX2RlcmVnaXN0ZXJfZnJhbWVfaW5mbyAoX19FSF9GUkFNRV9CRUdJTl9f KTsKCgoKCgp9CgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCmJ1aWxkQWxsLnNoCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiMgVG9wIGxldmVs IG91dHB1dCBkaXIKQ1VSPWBwd2RgCk9VVFBVVD0kQ1VSL3g4Ni02NApta2RpciAtcCAkT1VUUFVU CmV4cG9ydCBQQVRIPSRQQVRIOiRPVVRQVVQvYmluCmV4cG9ydCBMRF9MSUJSQVJZX1BBVEg9JE9V VFBVVC9saWIKCiMgIEdldCBiaW51dGlscyBnb2luZwplY2hvICJCdWlsZGluZyBiaW51dGlscyIK QlVESVI9JENVUi9iaW51dGlscwpCVUJVSUxEPSRCVURJUi9idWlsZAoKbWtkaXIgLXAgJEJVRElS CmNkICRCVURJUgpjdnMgLWQgOnBzZXJ2ZXI6YW5vbmN2c0Bzb3VyY2VzLnJlZGhhdC5jb206L2N2 cy9zcmMgZ2V0IGJpbnV0aWxzCmlmIFsgJD8gLW5lIDAgXQp0aGVuCgllY2hvIEZhaWxlZCBjdnMK CWV4aXQgMQpmaQoKbWtkaXIgLXAgJEJVQlVJTEQKY2QgJEJVQlVJTEQKLi4vc3JjL2NvbmZpZ3Vy ZSAtLXRhcmdldD14ODZfNjQtdW5rbm93bi1saW51eCAtLXByZWZpeD0kT1VUUFVUCmlmIFsgJD8g LW5lIDAgXQp0aGVuCgllY2hvIEZhaWxlZCBjb25maWd1cmUKCWV4aXQgMQpmaQoKbWFrZSAmJiBt YWtlIGluc3RhbGwKaWYgWyAkPyAtbmUgMCBdCnRoZW4KCWVjaG8gRmFpbGVkIG1ha2UKCWV4aXQg MQpmaQoKCgojICBHZXQgZ2NjIGdvaW5nCmVjaG8gIkJ1aWxkaW5nIGdjYyIKR0NDRElSPSRDVVIv Z2NjCkdDQ1NSQ0RJUj0kR0NDRElSL2djYwpHQ0NCVUlMRD0kR0NDRElSL2J1aWxkCgpta2RpciAt cCAkR0NDRElSCmNkICRHQ0NESVIKY3ZzIC1kIDpwc2VydmVyOmFub25jdnNAc3VidmVyc2lvbnMu Z251Lm9yZzovY3Zzcm9vdC9nY2MgZ2V0IC1yIGdjYy0zXzMtYnJhbmNoIGdjYwppZiBbICQ/IC1u ZSAwIF0KdGhlbgoJZWNobyBGYWlsZWQgY3ZzCglleGl0IDEKZmkKCmNkICRHQ0NTUkNESVIKaWYg WyAkPyAtbmUgMCBdCnRoZW4KCWVjaG8gRmFpbGVkIHBhdGNoIGdjYwoJZXhpdCAxCmZpCgpta2Rp ciAtcCAkR0NDQlVJTEQKY2QgJEdDQ0JVSUxECkNGTEFHUz0iLU8yIC1EaW5oaWJpdF9saWJjIiAu Li9nY2MvY29uZmlndXJlIC0tdGFyZ2V0PXg4Nl82NC11bmtub3duLWxpbnV4IFwKICAtLXByZWZp eD0kT1VUUFVUIC0tZW5hYmxlLWxhbmd1YWdlcz1jIC0tZGlzYWJsZS1zaGFyZWQgXAogIC0tZGlz YWJsZS1tdWx0aWxpYiAtLWVuYWJsZS10aHJlYWRzPXNpbmdsZQppZiBbICQ/IC1uZSAwIF0KdGhl bgoJZWNobyBGYWlsZWQgY29uZmlndXJlCglleGl0IDEKZmkKCm1ha2UgJiYgbWFrZSBpbnN0YWxs CmlmIFsgJD8gLW5lIDAgXQp0aGVuCgllY2hvIEZhaWxlZCBtYWtlCglleGl0IDEKZmkKCiMgIEdl dCBrZXJuZWwKZWNobyAiR2V0dGluZyB0aGUga2VybmVsIgpLRElSPSRDVVIva2VybmVsCktCVUlM RD0kS0RJUi9saW51eApLSU5DQkFTRT0kT1VUUFVUL3g4Nl82NC11bmtub3duLWxpbnV4Cgpta2Rp ciAtcCAkS0RJUgpjZCAkS0RJUgpjdnMgLWQgOnBzZXJ2ZXI6YW5vbmN2c0BjdnMueDg2LTY0Lm9y ZzovY3ZzL1JlcG9zaXRvcnkgZ2V0IGxpbnV4CmlmIFsgJD8gLW5lIDAgXQp0aGVuCgllY2hvIEZh aWxlZCBjdnMKCWV4aXQgMQpmaQoKCgpjZCAkS0JVSUxECmlmIFsgJD8gLW5lIDAgXQp0aGVuCgll Y2hvIEZhaWxlZCBwYXRjaCBrZXJuZWwKCWV4aXQgMQpmaQoKbWFrZSBpbmNsdWRlL2xpbnV4L3Zl cnNpb24uaAppZiBbICQ/IC1uZSAwIF0KdGhlbgoJZWNobyBGYWlsZWQgbWFrZSB2ZXJzaW9uCgll eGl0IDEKZmkKCm1rZGlyIC1wICRLSU5DQkFTRS9pbmNsdWRlCmNkICRLSU5DQkFTRQppZiBbICEg LUwgc3lzLWluY2x1ZGUgXQp0aGVuCglsbiAtcyBpbmNsdWRlIHN5cy1pbmNsdWRlCmZpCmNkIGlu Y2x1ZGUKCiNsaW5rIGxpbnV4CmlmIFsgISAtTCBsaW51eCBdCnRoZW4KCWxuIC1zICRLQlVJTEQv aW5jbHVkZS9saW51eCBsaW51eApmaQppZiBbICQ/IC1uZSAwIF0KdGhlbgoJZWNobyBGYWlsZWQg bGluawoJZXhpdCAxCmZpCgojbGluayBhc20KaWYgWyAhIC1MIGFzbSBdCnRoZW4KCWxuIC1zICRL QlVJTEQvaW5jbHVkZS9hc20teDg2XzY0IGFzbQpmaQppZiBbICQ/IC1uZSAwIF0KdGhlbgoJZWNo byBGYWlsZWQgbGluawoJZXhpdCAxCmZpCgojICBHZXQgZ2xpYmMgZ29pbmcKZWNobyAiQnVpbGRp bmcgZ2xpYmMiCkdMSUJESVI9JENVUi9nbGliYwpHTElCQlVJTEQ9JEdMSUJESVIvYnVpbGQKCm1r ZGlyIC1wICRHTElCRElSCmNkICRHTElCRElSCmN2cyAtZCA6cHNlcnZlcjphbm9uY3ZzQHNvdXJj ZXMucmVkaGF0LmNvbTovY3ZzL2dsaWJjIGdldCAtciBnbGliYy0yLTItYnJhbmNoIGdsaWJjIApp ZiBbICQ/IC1uZSAwIF0KdGhlbgoJZWNobyBGYWlsZWQgY3ZzCglleGl0IDEKZmkKCm1rZGlyIC1w ICRHTElCQlVJTEQKY2QgJEdMSUJCVUlMRApDQz0kT1VUUFVUL2Jpbi94ODZfNjQtdW5rbm93bi1s aW51eC1nY2MgXAogIC4uL2xpYmMvY29uZmlndXJlIC0tZGlzYWJsZS1wcm9maWxlIFwKICAtLXBy ZWZpeD0kT1VUUFVUL3g4Nl82NC11bmtub3duLWxpbnV4IC0td2l0aG91dC1jdnMgXAogIC0tZW5h YmxlLWFkZC1vbnMgeDg2XzY0LXVua25vd24tbGludXgKaWYgWyAkPyAtbmUgMCBdCnRoZW4KCWVj aG8gRmFpbGVkIGNvbmZpZ3VyZQoJZXhpdCAxCmZpCgptYWtlICYmIG1ha2UgaW5zdGFsbAppZiBb ICQ/IC1uZSAwIF0KdGhlbgoJZWNobyBGYWlsZWQgbWFrZQoJZXhpdCAxCmZpCg==