From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 17585 invoked by alias); 8 Jun 2002 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 17564 invoked by uid 71); 8 Jun 2002 21:56:01 -0000 Resent-Date: 8 Jun 2002 21:56:01 -0000 Resent-Message-ID: <20020608215601.17563.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-To: nobody@gcc.gnu.org Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org, jona_hugh_rob@yahoo.co.uk Resent-Reply-To: gcc-gnats@gcc.gnu.org, jona_hugh_rob@yahoo.co.uk Received:(qmail 13971 invoked by uid 61); 8 Jun 2002 21:50:28 -0000 Message-Id:<20020608215028.13970.qmail@sources.redhat.com> Date: Sat, 08 Jun 2002 14:56:00 -0000 From: jona_hugh_rob@yahoo.co.uk Reply-To: jona_hugh_rob@yahoo.co.uk To: gcc-gnats@gcc.gnu.org Cc: jona_hugh_rob@yahoo.co.uk X-Send-Pr-Version:gnatsweb-2.9.3 (1.1.1.1.2.31) X-GNATS-Notify:jona_hugh_rob@yahoo.co.uk Subject: c++/6972: libgcc2.c GCC 3.1 Cross-compiler Compilation Errors X-SW-Source: 2002-06/txt/msg00191.txt.bz2 List-Id: >Number: 6972 >Category: c++ >Synopsis: libgcc2.c GCC 3.1 Cross-compiler Compilation Errors >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Sat Jun 08 14:56:00 PDT 2002 >Closed-Date: >Last-Modified: >Originator: Jonathan H. Roberts >Release: gcc-3.1 >Organization: >Environment: WindowsXP, Sony VAIO, 650 MHz Celeron, Cygwin Utilities, GCC-2.95.3 Native, binutils-2.12 compiled for arm-elf, $target=arm-elf, $prefix=d:/usr/local/arm cd d:/usr/local/arm CC=gcc ../gcc-3.1/configure --target=$target --prefix=$prefix --with-local-prefix=d:/usr/local/arm -v make >Description: After successfully compiling binutils-2.12 for arm-elf in the same d:/usr/local/arm directory, I attempted to compile gcc-3.1 for arm-elf target, using above command-line. Compilation progressed merrily for one hour and 5 minutes, when it terminated with the following error message: ../../gcc-3.1/gcc/libgcc2.c: In function '__ffsdi2': ../../gcc-3.1/gcc/libgcc2.c:349:internal error: Arithmetic exception Please submit a full bug report .. I then commented out the offending routine and recompiled but it terminated with the following error message: ../../gcc-3.1/gcc/libgcc2.c: In function '__cmpdi2': ../../gcc-3.1/gcc/libgcc2.c:816:internal error: Arithmetic exception Please submit a full bug report .. I then commented out the offending routine and recompiled but it terminated with the following error message: ../../gcc-3.1/gcc/libgcc2.c: In function '__ucmpdi2': ../../gcc-3.1/gcc/libgcc2.c:837:internal error: Arithmetic exception Please submit a full bug report .. I then commented out the offending routine and recompiled but it terminated with the following error message: ../../gcc-3.1/gcc/libgcc2.c: In function '__absvsi2': ../../gcc-3.1/gcc/libgcc2.c:193: warning: implicit declaration of function 'abort' ../../gcc-3.1/gcc/libgcc2.c:197:internal error: Arithmetic exception Please submit a full bug report >How-To-Repeat: As above.. >Fix: I tried #undef-ing these routines but it appeared to me that I perhaps am lacking some arm math header file, but I am not sure which ones I need. >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="libgcc2.c" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="libgcc2.c" LyogTW9yZSBzdWJyb3V0aW5lcyBuZWVkZWQgYnkgR0NDIG91dHB1dCBjb2RlIG9uIHNvbWUgbWFj aGluZXMuICAqLwovKiBDb21waWxlIHRoaXMgb25lIHdpdGggZ2NjLiAgKi8KLyogQ29weXJpZ2h0 IChDKSAxOTg5LCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5 LAogICAyMDAwLCAyMDAxICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KClRoaXMgZmls ZSBpcyBwYXJ0IG9mIEdDQy4KCkdDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCnRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlClNvZnR3YXJlIEZvdW5k YXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCnZl cnNpb24uCgpJbiBhZGRpdGlvbiB0byB0aGUgcGVybWlzc2lvbnMgaW4gdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlLCB0aGUKRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzIHlvdSB1 bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBsaW5rIHRoZQpjb21waWxlZCB2ZXJzaW9uIG9mIHRoaXMg ZmlsZSBpbnRvIGNvbWJpbmF0aW9ucyB3aXRoIG90aGVyIHByb2dyYW1zLAphbmQgdG8gZGlzdHJp YnV0ZSB0aG9zZSBjb21iaW5hdGlvbnMgd2l0aG91dCBhbnkgcmVzdHJpY3Rpb24gY29taW5nCmZy b20gdGhlIHVzZSBvZiB0aGlzIGZpbGUuICAoVGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgcmVz dHJpY3Rpb25zCmRvIGFwcGx5IGluIG90aGVyIHJlc3BlY3RzOyBmb3IgZXhhbXBsZSwgdGhleSBj b3ZlciBtb2RpZmljYXRpb24gb2YKdGhlIGZpbGUsIGFuZCBkaXN0cmlidXRpb24gd2hlbiBub3Qg bGlua2VkIGludG8gYSBjb21iaW5lCmV4ZWN1dGFibGUuKQoKR0NDIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQpXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBv cgpGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UKZm9yIG1vcmUgZGV0YWlscy4KCllvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCmFsb25nIHdpdGggR0ND OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKU29mdHdh cmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BCjAy MTExLTEzMDcsIFVTQS4gICovCgovKiBJdCBpcyBpbmNvcnJlY3QgdG8gaW5jbHVkZSBjb25maWcu aCBoZXJlLCBiZWNhdXNlIHRoaXMgZmlsZSBpcyBiZWluZwogICBjb21waWxlZCBmb3IgdGhlIHRh cmdldCwgYW5kIGhlbmNlIGRlZmluaXRpb25zIGNvbmNlcm5pbmcgb25seSB0aGUgaG9zdAogICBk byBub3QgYXBwbHkuICAqLwoKI2luY2x1ZGUgInRjb25maWcuaCIKI2luY2x1ZGUgInRzeXN0ZW0u aCIKCiNpbmNsdWRlICJtYWNobW9kZS5oIgoKLyogRG9uJ3QgdXNlIGBmYW5jeV9hYm9ydCcgaGVy ZSBldmVuIGlmIGNvbmZpZy5oIHNheXMgdG8gdXNlIGl0LiAgKi8KI2lmZGVmIGFib3J0CiN1bmRl ZiBhYm9ydAojZW5kaWYKCiNpbmNsdWRlICJsaWJnY2MyLmgiCgwKI2lmIGRlZmluZWQgKExfbmVn ZGkyKSB8fCBkZWZpbmVkIChMX2RpdmRpMykgfHwgZGVmaW5lZCAoTF9tb2RkaTMpCiNpZiBkZWZp bmVkIChMX2RpdmRpMykgfHwgZGVmaW5lZCAoTF9tb2RkaTMpCnN0YXRpYyBpbmxpbmUKI2VuZGlm CkRXdHlwZQpfX25lZ2RpMiAoRFd0eXBlIHUpCnsKICBEV3VuaW9uIHc7CiAgRFd1bmlvbiB1dTsK CiAgdXUubGwgPSB1OwoKICB3LnMubG93ID0gLXV1LnMubG93OwogIHcucy5oaWdoID0gLXV1LnMu aGlnaCAtICgoVVd0eXBlKSB3LnMubG93ID4gMCk7CgogIHJldHVybiB3LmxsOwp9CiNlbmRpZgoK I2lmZGVmIExfYWRkdnNpMwpXdHlwZQpfX2FkZHZzaTMgKFd0eXBlIGEsIFd0eXBlIGIpCnsKICBX dHlwZSB3OwoKICB3ID0gYSArIGI7CgogIGlmIChiID49IDAgPyB3IDwgYSA6IHcgPiBhKQogICAg YWJvcnQgKCk7CgogIHJldHVybiB3Owp9CiNlbmRpZgoMCiNpZmRlZiBMX2FkZHZkaTMKRFd0eXBl Cl9fYWRkdmRpMyAoRFd0eXBlIGEsIERXdHlwZSBiKQp7CiAgRFd0eXBlIHc7CgogIHcgPSBhICsg YjsKCiAgaWYgKGIgPj0gMCA/IHcgPCBhIDogdyA+IGEpCiAgICBhYm9ydCAoKTsKCiAgcmV0dXJu IHc7Cn0KI2VuZGlmCgwKI2lmZGVmIExfc3VidnNpMwpXdHlwZQpfX3N1YnZzaTMgKFd0eXBlIGEs IFd0eXBlIGIpCnsKI2lmZGVmIExfYWRkdnNpMwogIHJldHVybiBfX2FkZHZzaTMgKGEsICgtYikp OwojZWxzZQogIERXdHlwZSB3OwoKICB3ID0gYSAtIGI7CgogIGlmIChiID49IDAgPyB3ID4gYSA6 IHcgPCBhKQogICAgYWJvcnQgKCk7CgogIHJldHVybiB3OwojZW5kaWYKfQojZW5kaWYKDAojaWZk ZWYgTF9zdWJ2ZGkzCkRXdHlwZQpfX3N1YnZkaTMgKERXdHlwZSBhLCBEV3R5cGUgYikKewojaWZk ZWYgTF9hZGR2ZGkzCiAgcmV0dXJuIChhLCAoLWIpKTsKI2Vsc2UKICBEV3R5cGUgdzsKCiAgdyA9 IGEgLSBiOwoKICBpZiAoYiA+PSAwID8gdyA+IGEgOiB3IDwgYSkKICAgIGFib3J0ICgpOwoKICBy ZXR1cm4gdzsKI2VuZGlmCn0KI2VuZGlmCgwKI2lmZGVmIExfbXVsdnNpMwpXdHlwZQpfX211bHZz aTMgKFd0eXBlIGEsIFd0eXBlIGIpCnsKICBEV3R5cGUgdzsKCiAgdyA9IGEgKiBiOwoKICBpZiAo KChhID49IDApID09IChiID49IDApKSA/IHcgPCAwIDogdyA+IDApCiAgICBhYm9ydCAoKTsKCiAg cmV0dXJuIHc7Cn0KI2VuZGlmCgwKI2lmZGVmIExfbmVndnNpMgpXdHlwZQpfX25lZ3ZzaTIgKFd0 eXBlIGEpCnsKICAgV3R5cGUgdzsKCiAgIHcgID0gLWE7CgogIGlmIChhID49IDAgPyB3ID4gMCA6 IHcgPCAwKQogICAgYWJvcnQgKCk7CgogICByZXR1cm4gdzsKfQojZW5kaWYKDAojaWZkZWYgTF9u ZWd2ZGkyCkRXdHlwZQpfX25lZ3ZkaTIgKERXdHlwZSBhKQp7CiAgIERXdHlwZSB3OwoKICAgdyAg PSAtYTsKCiAgaWYgKGEgPj0gMCA/IHcgPiAwIDogdyA8IDApCiAgICBhYm9ydCAoKTsKCiAgIHJl dHVybiB3Owp9CiNlbmRpZgoMCiN1bmRlZiBMX2Fic3ZzaTIgLy8gSm9uYSAwOWp1bjAyIDA2OjQx CiNpZmRlZiBMX2Fic3ZzaTIKV3R5cGUKX19hYnN2c2kyIChXdHlwZSBhKQp7CiAgIFd0eXBlIHcg PSBhOwoKICAgaWYgKGEgPCAwKQojaWZkZWYgTF9uZWd2c2kyCiAgICAgdyA9IF9fbmVndnNpMiAo YSk7CiNlbHNlCiAgICAgdyA9IC1hOwoKICAgaWYgKHcgPCAwKQogICAgIGFib3J0ICgpOwojZW5k aWYKCiAgIHJldHVybiB3Owp9CiNlbmRpZgoMCiNpZmRlZiBMX2Fic3ZkaTIKRFd0eXBlCl9fYWJz dmRpMiAoRFd0eXBlIGEpCnsKICAgRFd0eXBlIHcgPSBhOwoKICAgaWYgKGEgPCAwKQojaWZkZWYg TF9uZWd2c2kyCiAgICAgdyA9IF9fbmVndnNpMiAoYSk7CiNlbHNlCiAgICAgdyA9IC1hOwoKICAg aWYgKHcgPCAwKQogICAgIGFib3J0ICgpOwojZW5kaWYKCiAgIHJldHVybiB3Owp9CiNlbmRpZgoM CiNpZmRlZiBMX211bHZkaTMKRFd0eXBlCl9fbXVsdmRpMyAoRFd0eXBlIHUsIERXdHlwZSB2KQp7 CiAgIERXdHlwZSB3OwoKICB3ID0gdSAqIHY7CgogIGlmICgoKHUgPj0gMCkgPT0gKHYgPj0gMCkp ID8gdyA8IDAgOiB3ID4gMCkKICAgIGFib3J0ICgpOwoKICByZXR1cm4gdzsKfQojZW5kaWYKDAoK LyogVW5sZXNzIHNoaWZ0IGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCB3aGl0aCBmdWxsIEFOU0kgcHJv dG90eXBlcywKICAgcGFyYW1ldGVyIGIgd2lsbCBiZSBwcm9tb3RlZCB0byBpbnQgaWYgd29yZF90 eXBlIGlzIHNtYWxsZXIgdGhhbiBhbiBpbnQuICAqLwojaWZkZWYgTF9sc2hyZGkzCkRXdHlwZQpf X2xzaHJkaTMgKERXdHlwZSB1LCB3b3JkX3R5cGUgYikKewogIERXdW5pb24gdzsKICB3b3JkX3R5 cGUgYm07CiAgRFd1bmlvbiB1dTsKCiAgaWYgKGIgPT0gMCkKICAgIHJldHVybiB1OwoKICB1dS5s bCA9IHU7CgogIGJtID0gKHNpemVvZiAoV3R5cGUpICogQklUU19QRVJfVU5JVCkgLSBiOwogIGlm IChibSA8PSAwKQogICAgewogICAgICB3LnMuaGlnaCA9IDA7CiAgICAgIHcucy5sb3cgPSAoVVd0 eXBlKSB1dS5zLmhpZ2ggPj4gLWJtOwogICAgfQogIGVsc2UKICAgIHsKICAgICAgVVd0eXBlIGNh cnJpZXMgPSAoVVd0eXBlKSB1dS5zLmhpZ2ggPDwgYm07CgogICAgICB3LnMuaGlnaCA9IChVV3R5 cGUpIHV1LnMuaGlnaCA+PiBiOwogICAgICB3LnMubG93ID0gKChVV3R5cGUpIHV1LnMubG93ID4+ IGIpIHwgY2FycmllczsKICAgIH0KCiAgcmV0dXJuIHcubGw7Cn0KI2VuZGlmCgojaWZkZWYgTF9h c2hsZGkzCkRXdHlwZQpfX2FzaGxkaTMgKERXdHlwZSB1LCB3b3JkX3R5cGUgYikKewogIERXdW5p b24gdzsKICB3b3JkX3R5cGUgYm07CiAgRFd1bmlvbiB1dTsKCiAgaWYgKGIgPT0gMCkKICAgIHJl dHVybiB1OwoKICB1dS5sbCA9IHU7CgogIGJtID0gKHNpemVvZiAoV3R5cGUpICogQklUU19QRVJf VU5JVCkgLSBiOwogIGlmIChibSA8PSAwKQogICAgewogICAgICB3LnMubG93ID0gMDsKICAgICAg dy5zLmhpZ2ggPSAoVVd0eXBlKSB1dS5zLmxvdyA8PCAtYm07CiAgICB9CiAgZWxzZQogICAgewog ICAgICBVV3R5cGUgY2FycmllcyA9IChVV3R5cGUpIHV1LnMubG93ID4+IGJtOwoKICAgICAgdy5z LmxvdyA9IChVV3R5cGUpIHV1LnMubG93IDw8IGI7CiAgICAgIHcucy5oaWdoID0gKChVV3R5cGUp IHV1LnMuaGlnaCA8PCBiKSB8IGNhcnJpZXM7CiAgICB9CgogIHJldHVybiB3LmxsOwp9CiNlbmRp ZgoKI2lmZGVmIExfYXNocmRpMwpEV3R5cGUKX19hc2hyZGkzIChEV3R5cGUgdSwgd29yZF90eXBl IGIpCnsKICBEV3VuaW9uIHc7CiAgd29yZF90eXBlIGJtOwogIERXdW5pb24gdXU7CgogIGlmIChi ID09IDApCiAgICByZXR1cm4gdTsKCiAgdXUubGwgPSB1OwoKICBibSA9IChzaXplb2YgKFd0eXBl KSAqIEJJVFNfUEVSX1VOSVQpIC0gYjsKICBpZiAoYm0gPD0gMCkKICAgIHsKICAgICAgLyogdy5z LmhpZ2ggPSAxLi4xIG9yIDAuLjAgKi8KICAgICAgdy5zLmhpZ2ggPSB1dS5zLmhpZ2ggPj4gKHNp emVvZiAoV3R5cGUpICogQklUU19QRVJfVU5JVCAtIDEpOwogICAgICB3LnMubG93ID0gdXUucy5o aWdoID4+IC1ibTsKICAgIH0KICBlbHNlCiAgICB7CiAgICAgIFVXdHlwZSBjYXJyaWVzID0gKFVX dHlwZSkgdXUucy5oaWdoIDw8IGJtOwoKICAgICAgdy5zLmhpZ2ggPSB1dS5zLmhpZ2ggPj4gYjsK ICAgICAgdy5zLmxvdyA9ICgoVVd0eXBlKSB1dS5zLmxvdyA+PiBiKSB8IGNhcnJpZXM7CiAgICB9 CgogIHJldHVybiB3LmxsOwp9CiNlbmRpZgoMCiN1bmRlZiBMX2Zmc2RpMiAvLyBKb25hIDA5anVu MDIgMDY6MzEKI2lmZGVmIExfZmZzZGkyCkRXdHlwZQpfX2Zmc2RpMiAoRFd0eXBlIHUpCnsKICBE V3VuaW9uIHV1OwogIFVXdHlwZSB3b3JkLCBjb3VudCwgYWRkOwoKICB1dS5sbCA9IHU7CiAgaWYg KHV1LnMubG93ICE9IDApCiAgICB3b3JkID0gdXUucy5sb3csIGFkZCA9IDA7CiAgZWxzZSBpZiAo dXUucy5oaWdoICE9IDApCiAgICB3b3JkID0gdXUucy5oaWdoLCBhZGQgPSBCSVRTX1BFUl9VTklU ICogc2l6ZW9mIChXdHlwZSk7CiAgZWxzZQogICAgcmV0dXJuIDA7CgogIGNvdW50X3RyYWlsaW5n X3plcm9zIChjb3VudCwgd29yZCk7CiAgcmV0dXJuIGNvdW50ICsgYWRkICsgMTsKfQojZW5kaWYK DAojaWZkZWYgTF9tdWxkaTMKRFd0eXBlCl9fbXVsZGkzIChEV3R5cGUgdSwgRFd0eXBlIHYpCnsK ICBEV3VuaW9uIHc7CiAgRFd1bmlvbiB1dSwgdnY7CgogIHV1LmxsID0gdSwKICB2di5sbCA9IHY7 CgogIHcubGwgPSBfX3VtdWxzaWRpMyAodXUucy5sb3csIHZ2LnMubG93KTsKICB3LnMuaGlnaCAr PSAoKFVXdHlwZSkgdXUucy5sb3cgKiAoVVd0eXBlKSB2di5zLmhpZ2gKCSAgICAgICArIChVV3R5 cGUpIHV1LnMuaGlnaCAqIChVV3R5cGUpIHZ2LnMubG93KTsKCiAgcmV0dXJuIHcubGw7Cn0KI2Vu ZGlmCgwKI2lmZGVmIExfdWRpdl93X3NkaXYKI2lmIGRlZmluZWQgKHNkaXZfcXJubmQpClVXdHlw ZQpfX3VkaXZfd19zZGl2IChVV3R5cGUgKnJwLCBVV3R5cGUgYTEsIFVXdHlwZSBhMCwgVVd0eXBl IGQpCnsKICBVV3R5cGUgcSwgcjsKICBVV3R5cGUgYzAsIGMxLCBiMTsKCiAgaWYgKChXdHlwZSkg ZCA+PSAwKQogICAgewogICAgICBpZiAoYTEgPCBkIC0gYTEgLSAoYTAgPj4gKFdfVFlQRV9TSVpF IC0gMSkpKQoJewoJICAvKiBkaXZpZGVuZCwgZGl2aXNvciwgYW5kIHF1b3RpZW50IGFyZSBub25u ZWdhdGl2ZSAqLwoJICBzZGl2X3Fybm5kIChxLCByLCBhMSwgYTAsIGQpOwoJfQogICAgICBlbHNl Cgl7CgkgIC8qIENvbXB1dGUgYzEqMl4zMiArIGMwID0gYTEqMl4zMiArIGEwIC0gMl4zMSpkICov CgkgIHN1Yl9kZG1tc3MgKGMxLCBjMCwgYTEsIGEwLCBkID4+IDEsIGQgPDwgKFdfVFlQRV9TSVpF IC0gMSkpOwoJICAvKiBEaXZpZGUgKGMxKjJeMzIgKyBjMCkgYnkgZCAqLwoJICBzZGl2X3Fybm5k IChxLCByLCBjMSwgYzAsIGQpOwoJICAvKiBBZGQgMl4zMSB0byBxdW90aWVudCAqLwoJICBxICs9 IChVV3R5cGUpIDEgPDwgKFdfVFlQRV9TSVpFIC0gMSk7Cgl9CiAgICB9CiAgZWxzZQogICAgewog ICAgICBiMSA9IGQgPj4gMTsJCQkvKiBkLzIsIGJldHdlZW4gMl4zMCBhbmQgMl4zMSAtIDEgKi8K ICAgICAgYzEgPSBhMSA+PiAxOwkJCS8qIEEvMiAqLwogICAgICBjMCA9IChhMSA8PCAoV19UWVBF X1NJWkUgLSAxKSkgKyAoYTAgPj4gMSk7CgogICAgICBpZiAoYTEgPCBiMSkJCQkvKiBBIDwgMl4z MipiMSwgc28gQS8yIDwgMl4zMSpiMSAqLwoJewoJICBzZGl2X3Fybm5kIChxLCByLCBjMSwgYzAs IGIxKTsgLyogKEEvMikgLyAoZC8yKSAqLwoKCSAgciA9IDIqciArIChhMCAmIDEpOwkJLyogUmVt YWluZGVyIGZyb20gQS8oMipiMSkgKi8KCSAgaWYgKChkICYgMSkgIT0gMCkKCSAgICB7CgkgICAg ICBpZiAociA+PSBxKQoJCXIgPSByIC0gcTsKCSAgICAgIGVsc2UgaWYgKHEgLSByIDw9IGQpCgkJ ewoJCSAgciA9IHIgLSBxICsgZDsKCQkgIHEtLTsKCQl9CgkgICAgICBlbHNlCgkJewoJCSAgciA9 IHIgLSBxICsgMipkOwoJCSAgcSAtPSAyOwoJCX0KCSAgICB9Cgl9CiAgICAgIGVsc2UgaWYgKGMx IDwgYjEpCQkJLyogU28gMl4zMSA8PSAoQS8yKS9iMSA8IDJeMzIgKi8KCXsKCSAgYzEgPSAoYjEg LSAxKSAtIGMxOwoJICBjMCA9IH5jMDsJCQkvKiBsb2dpY2FsIE5PVCAqLwoKCSAgc2Rpdl9xcm5u ZCAocSwgciwgYzEsIGMwLCBiMSk7IC8qIChBLzIpIC8gKGQvMikgKi8KCgkgIHEgPSB+cTsJCQkv KiAoQS8yKS9iMSAqLwoJICByID0gKGIxIC0gMSkgLSByOwoKCSAgciA9IDIqciArIChhMCAmIDEp OwkJLyogQS8oMipiMSkgKi8KCgkgIGlmICgoZCAmIDEpICE9IDApCgkgICAgewoJICAgICAgaWYg KHIgPj0gcSkKCQlyID0gciAtIHE7CgkgICAgICBlbHNlIGlmIChxIC0gciA8PSBkKQoJCXsKCQkg IHIgPSByIC0gcSArIGQ7CgkJICBxLS07CgkJfQoJICAgICAgZWxzZQoJCXsKCQkgIHIgPSByIC0g cSArIDIqZDsKCQkgIHEgLT0gMjsKCQl9CgkgICAgfQoJfQogICAgICBlbHNlCQkJCS8qIEltcGxp ZXMgYzEgPSBiMSAqLwoJewkJCQkvKiBIZW5jZSBhMSA9IGQgLSAxID0gMipiMSAtIDEgKi8KCSAg aWYgKGEwID49IC1kKQoJICAgIHsKCSAgICAgIHEgPSAtMTsKCSAgICAgIHIgPSBhMCArIGQ7Cgkg ICAgfQoJICBlbHNlCgkgICAgewoJICAgICAgcSA9IC0yOwoJICAgICAgciA9IGEwICsgMipkOwoJ ICAgIH0KCX0KICAgIH0KCiAgKnJwID0gcjsKICByZXR1cm4gcTsKfQojZWxzZQovKiBJZiBzZGl2 X3Fybm5kIGRvZXNuJ3QgZXhpc3QsIGRlZmluZSBkdW1teSBfX3VkaXZfd19zZGl2LiAgKi8KVVd0 eXBlCl9fdWRpdl93X3NkaXYgKFVXdHlwZSAqcnAgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18p KSwKCSAgICAgICBVV3R5cGUgYTEgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKSwKCSAgICAg ICBVV3R5cGUgYTAgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKSwKCSAgICAgICBVV3R5cGUg ZCBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpKQp7CiAgcmV0dXJuIDA7Cn0KI2VuZGlmCiNl bmRpZgoMCiNpZiAoZGVmaW5lZCAoTF91ZGl2ZGkzKSB8fCBkZWZpbmVkIChMX2RpdmRpMykgfHwg XAogICAgIGRlZmluZWQgKExfdW1vZGRpMykgfHwgZGVmaW5lZCAoTF9tb2RkaTMpKQojZGVmaW5l IExfdWRpdm1vZGRpNAojZW5kaWYKCiNpZmRlZiBMX2Nsegpjb25zdCBVUUl0eXBlIF9fY2x6X3Rh YltdID0KewogIDAsMSwyLDIsMywzLDMsMyw0LDQsNCw0LDQsNCw0LDQsNSw1LDUsNSw1LDUsNSw1 LDUsNSw1LDUsNSw1LDUsNSwKICA2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2 LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsCiAgNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3 LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LAogIDcsNyw3LDcsNyw3LDcsNyw3 LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNywKICA4LDgsOCw4 LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgs CiAgOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgs OCw4LDgsOCw4LAogIDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgs OCw4LDgsOCw4LDgsOCw4LDgsOCwKICA4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgs OCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsOCw4LDgsCn07CiNlbmRpZgoKI2lmZGVmIExfdWRpdm1v ZGRpNAoKI2lmIChkZWZpbmVkIChMX3VkaXZkaTMpIHx8IGRlZmluZWQgKExfZGl2ZGkzKSB8fCBc CiAgICAgZGVmaW5lZCAoTF91bW9kZGkzKSB8fCBkZWZpbmVkIChMX21vZGRpMykpCnN0YXRpYyBp bmxpbmUKI2VuZGlmClVEV3R5cGUKX191ZGl2bW9kZGk0IChVRFd0eXBlIG4sIFVEV3R5cGUgZCwg VURXdHlwZSAqcnApCnsKICBEV3VuaW9uIHd3OwogIERXdW5pb24gbm4sIGRkOwogIERXdW5pb24g cnI7CiAgVVd0eXBlIGQwLCBkMSwgbjAsIG4xLCBuMjsKICBVV3R5cGUgcTAsIHExOwogIFVXdHlw ZSBiLCBibTsKCiAgbm4ubGwgPSBuOwogIGRkLmxsID0gZDsKCiAgZDAgPSBkZC5zLmxvdzsKICBk MSA9IGRkLnMuaGlnaDsKICBuMCA9IG5uLnMubG93OwogIG4xID0gbm4ucy5oaWdoOwoKI2lmICFV RElWX05FRURTX05PUk1BTElaQVRJT04KICBpZiAoZDEgPT0gMCkKICAgIHsKICAgICAgaWYgKGQw ID4gbjEpCgl7CgkgIC8qIDBxID0gbm4gLyAwRCAqLwoKCSAgdWRpdl9xcm5uZCAocTAsIG4wLCBu MSwgbjAsIGQwKTsKCSAgcTEgPSAwOwoKCSAgLyogUmVtYWluZGVyIGluIG4wLiAgKi8KCX0KICAg ICAgZWxzZQoJewoJICAvKiBxcSA9IE5OIC8gMGQgKi8KCgkgIGlmIChkMCA9PSAwKQoJICAgIGQw ID0gMSAvIGQwOwkvKiBEaXZpZGUgaW50ZW50aW9uYWxseSBieSB6ZXJvLiAgKi8KCgkgIHVkaXZf cXJubmQgKHExLCBuMSwgMCwgbjEsIGQwKTsKCSAgdWRpdl9xcm5uZCAocTAsIG4wLCBuMSwgbjAs IGQwKTsKCgkgIC8qIFJlbWFpbmRlciBpbiBuMC4gICovCgl9CgogICAgICBpZiAocnAgIT0gMCkK CXsKCSAgcnIucy5sb3cgPSBuMDsKCSAgcnIucy5oaWdoID0gMDsKCSAgKnJwID0gcnIubGw7Cgl9 CiAgICB9CgojZWxzZSAvKiBVRElWX05FRURTX05PUk1BTElaQVRJT04gKi8KCiAgaWYgKGQxID09 IDApCiAgICB7CiAgICAgIGlmIChkMCA+IG4xKQoJewoJICAvKiAwcSA9IG5uIC8gMEQgKi8KCgkg IGNvdW50X2xlYWRpbmdfemVyb3MgKGJtLCBkMCk7CgoJICBpZiAoYm0gIT0gMCkKCSAgICB7Cgkg ICAgICAvKiBOb3JtYWxpemUsIGkuZS4gbWFrZSB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgb2Yg dGhlCgkJIGRlbm9taW5hdG9yIHNldC4gICovCgoJICAgICAgZDAgPSBkMCA8PCBibTsKCSAgICAg IG4xID0gKG4xIDw8IGJtKSB8IChuMCA+PiAoV19UWVBFX1NJWkUgLSBibSkpOwoJICAgICAgbjAg PSBuMCA8PCBibTsKCSAgICB9CgoJICB1ZGl2X3Fybm5kIChxMCwgbjAsIG4xLCBuMCwgZDApOwoJ ICBxMSA9IDA7CgoJICAvKiBSZW1haW5kZXIgaW4gbjAgPj4gYm0uICAqLwoJfQogICAgICBlbHNl Cgl7CgkgIC8qIHFxID0gTk4gLyAwZCAqLwoKCSAgaWYgKGQwID09IDApCgkgICAgZDAgPSAxIC8g ZDA7CS8qIERpdmlkZSBpbnRlbnRpb25hbGx5IGJ5IHplcm8uICAqLwoKCSAgY291bnRfbGVhZGlu Z196ZXJvcyAoYm0sIGQwKTsKCgkgIGlmIChibSA9PSAwKQoJICAgIHsKCSAgICAgIC8qIEZyb20g KG4xID49IGQwKSAvXCAodGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IG9mIGQwIGlzIHNldCksCgkJ IGNvbmNsdWRlICh0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgb2YgbjEgaXMgc2V0KSAvXCAodGhl CgkJIGxlYWRpbmcgcXVvdGllbnQgZGlnaXQgcTEgPSAxKS4KCgkJIFRoaXMgc3BlY2lhbCBjYXNl IGlzIG5lY2Vzc2FyeSwgbm90IGFuIG9wdGltaXphdGlvbi4KCQkgKFNoaWZ0cyBjb3VudHMgb2Yg V19UWVBFX1NJWkUgYXJlIHVuZGVmaW5lZC4pICAqLwoKCSAgICAgIG4xIC09IGQwOwoJICAgICAg cTEgPSAxOwoJICAgIH0KCSAgZWxzZQoJICAgIHsKCSAgICAgIC8qIE5vcm1hbGl6ZS4gICovCgoJ ICAgICAgYiA9IFdfVFlQRV9TSVpFIC0gYm07CgoJICAgICAgZDAgPSBkMCA8PCBibTsKCSAgICAg IG4yID0gbjEgPj4gYjsKCSAgICAgIG4xID0gKG4xIDw8IGJtKSB8IChuMCA+PiBiKTsKCSAgICAg IG4wID0gbjAgPDwgYm07CgoJICAgICAgdWRpdl9xcm5uZCAocTEsIG4xLCBuMiwgbjEsIGQwKTsK CSAgICB9CgoJICAvKiBuMSAhPSBkMC4uLiAgKi8KCgkgIHVkaXZfcXJubmQgKHEwLCBuMCwgbjEs IG4wLCBkMCk7CgoJICAvKiBSZW1haW5kZXIgaW4gbjAgPj4gYm0uICAqLwoJfQoKICAgICAgaWYg KHJwICE9IDApCgl7CgkgIHJyLnMubG93ID0gbjAgPj4gYm07CgkgIHJyLnMuaGlnaCA9IDA7Cgkg ICpycCA9IHJyLmxsOwoJfQogICAgfQojZW5kaWYgLyogVURJVl9ORUVEU19OT1JNQUxJWkFUSU9O ICovCgogIGVsc2UKICAgIHsKICAgICAgaWYgKGQxID4gbjEpCgl7CgkgIC8qIDAwID0gbm4gLyBE RCAqLwoKCSAgcTAgPSAwOwoJICBxMSA9IDA7CgoJICAvKiBSZW1haW5kZXIgaW4gbjFuMC4gICov CgkgIGlmIChycCAhPSAwKQoJICAgIHsKCSAgICAgIHJyLnMubG93ID0gbjA7CgkgICAgICByci5z LmhpZ2ggPSBuMTsKCSAgICAgICpycCA9IHJyLmxsOwoJICAgIH0KCX0KICAgICAgZWxzZQoJewoJ ICAvKiAwcSA9IE5OIC8gZGQgKi8KCgkgIGNvdW50X2xlYWRpbmdfemVyb3MgKGJtLCBkMSk7Cgkg IGlmIChibSA9PSAwKQoJICAgIHsKCSAgICAgIC8qIEZyb20gKG4xID49IGQxKSAvXCAodGhlIG1v c3Qgc2lnbmlmaWNhbnQgYml0IG9mIGQxIGlzIHNldCksCgkJIGNvbmNsdWRlICh0aGUgbW9zdCBz aWduaWZpY2FudCBiaXQgb2YgbjEgaXMgc2V0KSAvXCAodGhlCgkJIHF1b3RpZW50IGRpZ2l0IHEw ID0gMCBvciAxKS4KCgkJIFRoaXMgc3BlY2lhbCBjYXNlIGlzIG5lY2Vzc2FyeSwgbm90IGFuIG9w dGltaXphdGlvbi4gICovCgoJICAgICAgLyogVGhlIGNvbmRpdGlvbiBvbiB0aGUgbmV4dCBsaW5l IHRha2VzIGFkdmFudGFnZSBvZiB0aGF0CgkJIG4xID49IGQxICh0cnVlIGR1ZSB0byBwcm9ncmFt IGZsb3cpLiAgKi8KCSAgICAgIGlmIChuMSA+IGQxIHx8IG4wID49IGQwKQoJCXsKCQkgIHEwID0g MTsKCQkgIHN1Yl9kZG1tc3MgKG4xLCBuMCwgbjEsIG4wLCBkMSwgZDApOwoJCX0KCSAgICAgIGVs c2UKCQlxMCA9IDA7CgoJICAgICAgcTEgPSAwOwoKCSAgICAgIGlmIChycCAhPSAwKQoJCXsKCQkg IHJyLnMubG93ID0gbjA7CgkJICByci5zLmhpZ2ggPSBuMTsKCQkgICpycCA9IHJyLmxsOwoJCX0K CSAgICB9CgkgIGVsc2UKCSAgICB7CgkgICAgICBVV3R5cGUgbTEsIG0wOwoJICAgICAgLyogTm9y bWFsaXplLiAgKi8KCgkgICAgICBiID0gV19UWVBFX1NJWkUgLSBibTsKCgkgICAgICBkMSA9IChk MSA8PCBibSkgfCAoZDAgPj4gYik7CgkgICAgICBkMCA9IGQwIDw8IGJtOwoJICAgICAgbjIgPSBu MSA+PiBiOwoJICAgICAgbjEgPSAobjEgPDwgYm0pIHwgKG4wID4+IGIpOwoJICAgICAgbjAgPSBu MCA8PCBibTsKCgkgICAgICB1ZGl2X3Fybm5kIChxMCwgbjEsIG4yLCBuMSwgZDEpOwoJICAgICAg dW11bF9wcG1tIChtMSwgbTAsIHEwLCBkMCk7CgoJICAgICAgaWYgKG0xID4gbjEgfHwgKG0xID09 IG4xICYmIG0wID4gbjApKQoJCXsKCQkgIHEwLS07CgkJICBzdWJfZGRtbXNzIChtMSwgbTAsIG0x LCBtMCwgZDEsIGQwKTsKCQl9CgoJICAgICAgcTEgPSAwOwoKCSAgICAgIC8qIFJlbWFpbmRlciBp biAobjFuMCAtIG0xbTApID4+IGJtLiAgKi8KCSAgICAgIGlmIChycCAhPSAwKQoJCXsKCQkgIHN1 Yl9kZG1tc3MgKG4xLCBuMCwgbjEsIG4wLCBtMSwgbTApOwoJCSAgcnIucy5sb3cgPSAobjEgPDwg YikgfCAobjAgPj4gYm0pOwoJCSAgcnIucy5oaWdoID0gbjEgPj4gYm07CgkJICAqcnAgPSByci5s bDsKCQl9CgkgICAgfQoJfQogICAgfQoKICB3dy5zLmxvdyA9IHEwOwogIHd3LnMuaGlnaCA9IHEx OwogIHJldHVybiB3dy5sbDsKfQojZW5kaWYKCiNpZmRlZiBMX2RpdmRpMwpEV3R5cGUKX19kaXZk aTMgKERXdHlwZSB1LCBEV3R5cGUgdikKewogIHdvcmRfdHlwZSBjID0gMDsKICBEV3VuaW9uIHV1 LCB2djsKICBEV3R5cGUgdzsKCiAgdXUubGwgPSB1OwogIHZ2LmxsID0gdjsKCiAgaWYgKHV1LnMu aGlnaCA8IDApCiAgICBjID0gfmMsCiAgICB1dS5sbCA9IF9fbmVnZGkyICh1dS5sbCk7CiAgaWYg KHZ2LnMuaGlnaCA8IDApCiAgICBjID0gfmMsCiAgICB2di5sbCA9IF9fbmVnZGkyICh2di5sbCk7 CgogIHcgPSBfX3VkaXZtb2RkaTQgKHV1LmxsLCB2di5sbCwgKFVEV3R5cGUgKikgMCk7CiAgaWYg KGMpCiAgICB3ID0gX19uZWdkaTIgKHcpOwoKICByZXR1cm4gdzsKfQojZW5kaWYKCiNpZmRlZiBM X21vZGRpMwpEV3R5cGUKX19tb2RkaTMgKERXdHlwZSB1LCBEV3R5cGUgdikKewogIHdvcmRfdHlw ZSBjID0gMDsKICBEV3VuaW9uIHV1LCB2djsKICBEV3R5cGUgdzsKCiAgdXUubGwgPSB1OwogIHZ2 LmxsID0gdjsKCiAgaWYgKHV1LnMuaGlnaCA8IDApCiAgICBjID0gfmMsCiAgICB1dS5sbCA9IF9f bmVnZGkyICh1dS5sbCk7CiAgaWYgKHZ2LnMuaGlnaCA8IDApCiAgICB2di5sbCA9IF9fbmVnZGky ICh2di5sbCk7CgogICh2b2lkKSBfX3VkaXZtb2RkaTQgKHV1LmxsLCB2di5sbCwgJncpOwogIGlm IChjKQogICAgdyA9IF9fbmVnZGkyICh3KTsKCiAgcmV0dXJuIHc7Cn0KI2VuZGlmCgojaWZkZWYg TF91bW9kZGkzClVEV3R5cGUKX191bW9kZGkzIChVRFd0eXBlIHUsIFVEV3R5cGUgdikKewogIFVE V3R5cGUgdzsKCiAgKHZvaWQpIF9fdWRpdm1vZGRpNCAodSwgdiwgJncpOwoKICByZXR1cm4gdzsK fQojZW5kaWYKCiNpZmRlZiBMX3VkaXZkaTMKVURXdHlwZQpfX3VkaXZkaTMgKFVEV3R5cGUgbiwg VURXdHlwZSBkKQp7CiAgcmV0dXJuIF9fdWRpdm1vZGRpNCAobiwgZCwgKFVEV3R5cGUgKikgMCk7 Cn0KI2VuZGlmCgwKI3VuZGVmIExfY21wZGkyIC8vIEpvbmEgMDlqdW4wMiAwNjozMQojaWZkZWYg TF9jbXBkaTIKd29yZF90eXBlCl9fY21wZGkyIChEV3R5cGUgYSwgRFd0eXBlIGIpCnsKICBEV3Vu aW9uIGF1LCBidTsKCiAgYXUubGwgPSBhLCBidS5sbCA9IGI7CgogIGlmIChhdS5zLmhpZ2ggPCBi dS5zLmhpZ2gpCiAgICByZXR1cm4gMDsKICBlbHNlIGlmIChhdS5zLmhpZ2ggPiBidS5zLmhpZ2gp CiAgICByZXR1cm4gMjsKICBpZiAoKFVXdHlwZSkgYXUucy5sb3cgPCAoVVd0eXBlKSBidS5zLmxv dykKICAgIHJldHVybiAwOwogIGVsc2UgaWYgKChVV3R5cGUpIGF1LnMubG93ID4gKFVXdHlwZSkg YnUucy5sb3cpCiAgICByZXR1cm4gMjsKICByZXR1cm4gMTsKfQojZW5kaWYKI3VuZGVmIExfdWNt cGRpMiAvLyBKb25hIDA5anVuMDIgMDY6MzEKI2lmZGVmIExfdWNtcGRpMgp3b3JkX3R5cGUKX191 Y21wZGkyIChEV3R5cGUgYSwgRFd0eXBlIGIpCnsKICBEV3VuaW9uIGF1LCBidTsKCiAgYXUubGwg PSBhLCBidS5sbCA9IGI7CgogIGlmICgoVVd0eXBlKSBhdS5zLmhpZ2ggPCAoVVd0eXBlKSBidS5z LmhpZ2gpCiAgICByZXR1cm4gMDsKICBlbHNlIGlmICgoVVd0eXBlKSBhdS5zLmhpZ2ggPiAoVVd0 eXBlKSBidS5zLmhpZ2gpCiAgICByZXR1cm4gMjsKICBpZiAoKFVXdHlwZSkgYXUucy5sb3cgPCAo VVd0eXBlKSBidS5zLmxvdykKICAgIHJldHVybiAwOwogIGVsc2UgaWYgKChVV3R5cGUpIGF1LnMu bG93ID4gKFVXdHlwZSkgYnUucy5sb3cpCiAgICByZXR1cm4gMjsKICByZXR1cm4gMTsKfQojZW5k aWYKDAojaWYgZGVmaW5lZChMX2ZpeHVuc3RmZGkpICYmIChMSUJHQ0MyX0xPTkdfRE9VQkxFX1RZ UEVfU0laRSA9PSAxMjgpCiNkZWZpbmUgV09SRF9TSVpFIChzaXplb2YgKFd0eXBlKSAqIEJJVFNf UEVSX1VOSVQpCiNkZWZpbmUgSElHSF9XT1JEX0NPRUZGICgoKFVEV3R5cGUpIDEpIDw8IFdPUkRf U0laRSkKCkRXdHlwZQpfX2ZpeHVuc3RmREkgKFRGdHlwZSBhKQp7CiAgVEZ0eXBlIGI7CiAgVURX dHlwZSB2OwoKICBpZiAoYSA8IDApCiAgICByZXR1cm4gMDsKCiAgLyogQ29tcHV0ZSBoaWdoIHdv cmQgb2YgcmVzdWx0LCBhcyBhIGZsb251bS4gICovCiAgYiA9IChhIC8gSElHSF9XT1JEX0NPRUZG KTsKICAvKiBDb252ZXJ0IHRoYXQgdG8gZml4ZWQgKGJ1dCBub3QgdG8gRFd0eXBlISksCiAgICAg YW5kIHNoaWZ0IGl0IGludG8gdGhlIGhpZ2ggd29yZC4gICovCiAgdiA9IChVV3R5cGUpIGI7CiAg diA8PD0gV09SRF9TSVpFOwogIC8qIFJlbW92ZSBoaWdoIHBhcnQgZnJvbSB0aGUgVEZ0eXBlLCBs ZWF2aW5nIHRoZSBsb3cgcGFydCBhcyBmbG9udW0uICAqLwogIGEgLT0gKFRGdHlwZSl2OwogIC8q IENvbnZlcnQgdGhhdCB0byBmaXhlZCAoYnV0IG5vdCB0byBEV3R5cGUhKSBhbmQgYWRkIGl0IGlu LgogICAgIFNvbWV0aW1lcyBBIGNvbWVzIG91dCBuZWdhdGl2ZS4gIFRoaXMgaXMgc2lnbmlmaWNh bnQsIHNpbmNlCiAgICAgQSBoYXMgbW9yZSBiaXRzIHRoYW4gYSBsb25nIGludCBkb2VzLiAgKi8K ICBpZiAoYSA8IDApCiAgICB2IC09IChVV3R5cGUpICgtIGEpOwogIGVsc2UKICAgIHYgKz0gKFVX dHlwZSkgYTsKICByZXR1cm4gdjsKfQojZW5kaWYKCiNpZiBkZWZpbmVkKExfZml4dGZkaSkgJiYg KExJQkdDQzJfTE9OR19ET1VCTEVfVFlQRV9TSVpFID09IDEyOCkKRFd0eXBlCl9fZml4dGZkaSAo VEZ0eXBlIGEpCnsKICBpZiAoYSA8IDApCiAgICByZXR1cm4gLSBfX2ZpeHVuc3RmREkgKC1hKTsK ICByZXR1cm4gX19maXh1bnN0ZkRJIChhKTsKfQojZW5kaWYKCiNpZiBkZWZpbmVkKExfZml4dW5z eGZkaSkgJiYgKExJQkdDQzJfTE9OR19ET1VCTEVfVFlQRV9TSVpFID09IDk2KQojZGVmaW5lIFdP UkRfU0laRSAoc2l6ZW9mIChXdHlwZSkgKiBCSVRTX1BFUl9VTklUKQojZGVmaW5lIEhJR0hfV09S RF9DT0VGRiAoKChVRFd0eXBlKSAxKSA8PCBXT1JEX1NJWkUpCgpEV3R5cGUKX19maXh1bnN4ZkRJ IChYRnR5cGUgYSkKewogIFhGdHlwZSBiOwogIFVEV3R5cGUgdjsKCiAgaWYgKGEgPCAwKQogICAg cmV0dXJuIDA7CgogIC8qIENvbXB1dGUgaGlnaCB3b3JkIG9mIHJlc3VsdCwgYXMgYSBmbG9udW0u ICAqLwogIGIgPSAoYSAvIEhJR0hfV09SRF9DT0VGRik7CiAgLyogQ29udmVydCB0aGF0IHRvIGZp eGVkIChidXQgbm90IHRvIERXdHlwZSEpLAogICAgIGFuZCBzaGlmdCBpdCBpbnRvIHRoZSBoaWdo IHdvcmQuICAqLwogIHYgPSAoVVd0eXBlKSBiOwogIHYgPDw9IFdPUkRfU0laRTsKICAvKiBSZW1v dmUgaGlnaCBwYXJ0IGZyb20gdGhlIFhGdHlwZSwgbGVhdmluZyB0aGUgbG93IHBhcnQgYXMgZmxv bnVtLiAgKi8KICBhIC09IChYRnR5cGUpdjsKICAvKiBDb252ZXJ0IHRoYXQgdG8gZml4ZWQgKGJ1 dCBub3QgdG8gRFd0eXBlISkgYW5kIGFkZCBpdCBpbi4KICAgICBTb21ldGltZXMgQSBjb21lcyBv dXQgbmVnYXRpdmUuICBUaGlzIGlzIHNpZ25pZmljYW50LCBzaW5jZQogICAgIEEgaGFzIG1vcmUg Yml0cyB0aGFuIGEgbG9uZyBpbnQgZG9lcy4gICovCiAgaWYgKGEgPCAwKQogICAgdiAtPSAoVVd0 eXBlKSAoLSBhKTsKICBlbHNlCiAgICB2ICs9IChVV3R5cGUpIGE7CiAgcmV0dXJuIHY7Cn0KI2Vu ZGlmCgojaWYgZGVmaW5lZChMX2ZpeHhmZGkpICYmIChMSUJHQ0MyX0xPTkdfRE9VQkxFX1RZUEVf U0laRSA9PSA5NikKRFd0eXBlCl9fZml4eGZkaSAoWEZ0eXBlIGEpCnsKICBpZiAoYSA8IDApCiAg ICByZXR1cm4gLSBfX2ZpeHVuc3hmREkgKC1hKTsKICByZXR1cm4gX19maXh1bnN4ZkRJIChhKTsK fQojZW5kaWYKCiNpZmRlZiBMX2ZpeHVuc2RmZGkKI2RlZmluZSBXT1JEX1NJWkUgKHNpemVvZiAo V3R5cGUpICogQklUU19QRVJfVU5JVCkKI2RlZmluZSBISUdIX1dPUkRfQ09FRkYgKCgoVURXdHlw ZSkgMSkgPDwgV09SRF9TSVpFKQoKRFd0eXBlCl9fZml4dW5zZGZESSAoREZ0eXBlIGEpCnsKICBE RnR5cGUgYjsKICBVRFd0eXBlIHY7CgogIGlmIChhIDwgMCkKICAgIHJldHVybiAwOwoKICAvKiBD b21wdXRlIGhpZ2ggd29yZCBvZiByZXN1bHQsIGFzIGEgZmxvbnVtLiAgKi8KICBiID0gKGEgLyBI SUdIX1dPUkRfQ09FRkYpOwogIC8qIENvbnZlcnQgdGhhdCB0byBmaXhlZCAoYnV0IG5vdCB0byBE V3R5cGUhKSwKICAgICBhbmQgc2hpZnQgaXQgaW50byB0aGUgaGlnaCB3b3JkLiAgKi8KICB2ID0g KFVXdHlwZSkgYjsKICB2IDw8PSBXT1JEX1NJWkU7CiAgLyogUmVtb3ZlIGhpZ2ggcGFydCBmcm9t IHRoZSBERnR5cGUsIGxlYXZpbmcgdGhlIGxvdyBwYXJ0IGFzIGZsb251bS4gICovCiAgYSAtPSAo REZ0eXBlKXY7CiAgLyogQ29udmVydCB0aGF0IHRvIGZpeGVkIChidXQgbm90IHRvIERXdHlwZSEp IGFuZCBhZGQgaXQgaW4uCiAgICAgU29tZXRpbWVzIEEgY29tZXMgb3V0IG5lZ2F0aXZlLiAgVGhp cyBpcyBzaWduaWZpY2FudCwgc2luY2UKICAgICBBIGhhcyBtb3JlIGJpdHMgdGhhbiBhIGxvbmcg aW50IGRvZXMuICAqLwogIGlmIChhIDwgMCkKICAgIHYgLT0gKFVXdHlwZSkgKC0gYSk7CiAgZWxz ZQogICAgdiArPSAoVVd0eXBlKSBhOwogIHJldHVybiB2Owp9CiNlbmRpZgoKI2lmZGVmIExfZml4 ZGZkaQpEV3R5cGUKX19maXhkZmRpIChERnR5cGUgYSkKewogIGlmIChhIDwgMCkKICAgIHJldHVy biAtIF9fZml4dW5zZGZESSAoLWEpOwogIHJldHVybiBfX2ZpeHVuc2RmREkgKGEpOwp9CiNlbmRp ZgoKI2lmZGVmIExfZml4dW5zc2ZkaQojZGVmaW5lIFdPUkRfU0laRSAoc2l6ZW9mIChXdHlwZSkg KiBCSVRTX1BFUl9VTklUKQojZGVmaW5lIEhJR0hfV09SRF9DT0VGRiAoKChVRFd0eXBlKSAxKSA8 PCBXT1JEX1NJWkUpCgpEV3R5cGUKX19maXh1bnNzZkRJIChTRnR5cGUgb3JpZ2luYWxfYSkKewog IC8qIENvbnZlcnQgdGhlIFNGdHlwZSB0byBhIERGdHlwZSwgYmVjYXVzZSB0aGF0IGlzIHN1cmVs eSBub3QgZ29pbmcKICAgICB0byBsb3NlIGFueSBiaXRzLiAgU29tZSBkYXkgc29tZW9uZSBlbHNl IGNhbiB3cml0ZSBhIGZhc3RlciB2ZXJzaW9uCiAgICAgdGhhdCBhdm9pZHMgY29udmVydGluZyB0 byBERnR5cGUsIGFuZCB2ZXJpZnkgaXQgcmVhbGx5IHdvcmtzIHJpZ2h0LiAgKi8KICBERnR5cGUg YSA9IG9yaWdpbmFsX2E7CiAgREZ0eXBlIGI7CiAgVURXdHlwZSB2OwoKICBpZiAoYSA8IDApCiAg ICByZXR1cm4gMDsKCiAgLyogQ29tcHV0ZSBoaWdoIHdvcmQgb2YgcmVzdWx0LCBhcyBhIGZsb251 bS4gICovCiAgYiA9IChhIC8gSElHSF9XT1JEX0NPRUZGKTsKICAvKiBDb252ZXJ0IHRoYXQgdG8g Zml4ZWQgKGJ1dCBub3QgdG8gRFd0eXBlISksCiAgICAgYW5kIHNoaWZ0IGl0IGludG8gdGhlIGhp Z2ggd29yZC4gICovCiAgdiA9IChVV3R5cGUpIGI7CiAgdiA8PD0gV09SRF9TSVpFOwogIC8qIFJl bW92ZSBoaWdoIHBhcnQgZnJvbSB0aGUgREZ0eXBlLCBsZWF2aW5nIHRoZSBsb3cgcGFydCBhcyBm bG9udW0uICAqLwogIGEgLT0gKERGdHlwZSkgdjsKICAvKiBDb252ZXJ0IHRoYXQgdG8gZml4ZWQg KGJ1dCBub3QgdG8gRFd0eXBlISkgYW5kIGFkZCBpdCBpbi4KICAgICBTb21ldGltZXMgQSBjb21l cyBvdXQgbmVnYXRpdmUuICBUaGlzIGlzIHNpZ25pZmljYW50LCBzaW5jZQogICAgIEEgaGFzIG1v cmUgYml0cyB0aGFuIGEgbG9uZyBpbnQgZG9lcy4gICovCiAgaWYgKGEgPCAwKQogICAgdiAtPSAo VVd0eXBlKSAoLSBhKTsKICBlbHNlCiAgICB2ICs9IChVV3R5cGUpIGE7CiAgcmV0dXJuIHY7Cn0K I2VuZGlmCgojaWZkZWYgTF9maXhzZmRpCkRXdHlwZQpfX2ZpeHNmZGkgKFNGdHlwZSBhKQp7CiAg aWYgKGEgPCAwKQogICAgcmV0dXJuIC0gX19maXh1bnNzZkRJICgtYSk7CiAgcmV0dXJuIF9fZml4 dW5zc2ZESSAoYSk7Cn0KI2VuZGlmCgojaWYgZGVmaW5lZChMX2Zsb2F0ZGl4ZikgJiYgKExJQkdD QzJfTE9OR19ET1VCTEVfVFlQRV9TSVpFID09IDk2KQojZGVmaW5lIFdPUkRfU0laRSAoc2l6ZW9m IChXdHlwZSkgKiBCSVRTX1BFUl9VTklUKQojZGVmaW5lIEhJR0hfSEFMRldPUkRfQ09FRkYgKCgo VURXdHlwZSkgMSkgPDwgKFdPUkRfU0laRSAvIDIpKQojZGVmaW5lIEhJR0hfV09SRF9DT0VGRiAo KChVRFd0eXBlKSAxKSA8PCBXT1JEX1NJWkUpCgpYRnR5cGUKX19mbG9hdGRpeGYgKERXdHlwZSB1 KQp7CiAgWEZ0eXBlIGQ7CgogIGQgPSAoV3R5cGUpICh1ID4+IFdPUkRfU0laRSk7CiAgZCAqPSBI SUdIX0hBTEZXT1JEX0NPRUZGOwogIGQgKj0gSElHSF9IQUxGV09SRF9DT0VGRjsKICBkICs9IChV V3R5cGUpICh1ICYgKEhJR0hfV09SRF9DT0VGRiAtIDEpKTsKCiAgcmV0dXJuIGQ7Cn0KI2VuZGlm CgojaWYgZGVmaW5lZChMX2Zsb2F0ZGl0ZikgJiYgKExJQkdDQzJfTE9OR19ET1VCTEVfVFlQRV9T SVpFID09IDEyOCkKI2RlZmluZSBXT1JEX1NJWkUgKHNpemVvZiAoV3R5cGUpICogQklUU19QRVJf VU5JVCkKI2RlZmluZSBISUdIX0hBTEZXT1JEX0NPRUZGICgoKFVEV3R5cGUpIDEpIDw8IChXT1JE X1NJWkUgLyAyKSkKI2RlZmluZSBISUdIX1dPUkRfQ09FRkYgKCgoVURXdHlwZSkgMSkgPDwgV09S RF9TSVpFKQoKVEZ0eXBlCl9fZmxvYXRkaXRmIChEV3R5cGUgdSkKewogIFRGdHlwZSBkOwoKICBk ID0gKFd0eXBlKSAodSA+PiBXT1JEX1NJWkUpOwogIGQgKj0gSElHSF9IQUxGV09SRF9DT0VGRjsK ICBkICo9IEhJR0hfSEFMRldPUkRfQ09FRkY7CiAgZCArPSAoVVd0eXBlKSAodSAmIChISUdIX1dP UkRfQ09FRkYgLSAxKSk7CgogIHJldHVybiBkOwp9CiNlbmRpZgoKI2lmZGVmIExfZmxvYXRkaWRm CiNkZWZpbmUgV09SRF9TSVpFIChzaXplb2YgKFd0eXBlKSAqIEJJVFNfUEVSX1VOSVQpCiNkZWZp bmUgSElHSF9IQUxGV09SRF9DT0VGRiAoKChVRFd0eXBlKSAxKSA8PCAoV09SRF9TSVpFIC8gMikp CiNkZWZpbmUgSElHSF9XT1JEX0NPRUZGICgoKFVEV3R5cGUpIDEpIDw8IFdPUkRfU0laRSkKCkRG dHlwZQpfX2Zsb2F0ZGlkZiAoRFd0eXBlIHUpCnsKICBERnR5cGUgZDsKCiAgZCA9IChXdHlwZSkg KHUgPj4gV09SRF9TSVpFKTsKICBkICo9IEhJR0hfSEFMRldPUkRfQ09FRkY7CiAgZCAqPSBISUdI X0hBTEZXT1JEX0NPRUZGOwogIGQgKz0gKFVXdHlwZSkgKHUgJiAoSElHSF9XT1JEX0NPRUZGIC0g MSkpOwoKICByZXR1cm4gZDsKfQojZW5kaWYKCiNpZmRlZiBMX2Zsb2F0ZGlzZgojZGVmaW5lIFdP UkRfU0laRSAoc2l6ZW9mIChXdHlwZSkgKiBCSVRTX1BFUl9VTklUKQojZGVmaW5lIEhJR0hfSEFM RldPUkRfQ09FRkYgKCgoVURXdHlwZSkgMSkgPDwgKFdPUkRfU0laRSAvIDIpKQojZGVmaW5lIEhJ R0hfV09SRF9DT0VGRiAoKChVRFd0eXBlKSAxKSA8PCBXT1JEX1NJWkUpCiNkZWZpbmUgRElfU0la RSAoc2l6ZW9mIChEV3R5cGUpICogQklUU19QRVJfVU5JVCkKCi8qIERlZmluZSBjb2RlcyBmb3Ig YWxsIHRoZSBmbG9hdCBmb3JtYXRzIHRoYXQgd2Uga25vdyBvZi4gIE5vdGUKICAgdGhhdCB0aGlz IGlzIGNvcGllZCBmcm9tIHJlYWwuaC4gICovCgojZGVmaW5lIFVOS05PV05fRkxPQVRfRk9STUFU IDAKI2RlZmluZSBJRUVFX0ZMT0FUX0ZPUk1BVCAxCiNkZWZpbmUgVkFYX0ZMT0FUX0ZPUk1BVCAy CiNkZWZpbmUgSUJNX0ZMT0FUX0ZPUk1BVCAzCgovKiBEZWZhdWx0IHRvIElFRUUgZmxvYXQgaWYg bm90IHNwZWNpZmllZC4gIE5lYXJseSBhbGwgbWFjaGluZXMgdXNlIGl0LiAgKi8KI2lmbmRlZiBI T1NUX0ZMT0FUX0ZPUk1BVAojZGVmaW5lCUhPU1RfRkxPQVRfRk9STUFUCUlFRUVfRkxPQVRfRk9S TUFUCiNlbmRpZgoKI2lmIEhPU1RfRkxPQVRfRk9STUFUID09IElFRUVfRkxPQVRfRk9STUFUCiNk ZWZpbmUgREZfU0laRSA1MwojZGVmaW5lIFNGX1NJWkUgMjQKI2VuZGlmCgojaWYgSE9TVF9GTE9B VF9GT1JNQVQgPT0gSUJNX0ZMT0FUX0ZPUk1BVAojZGVmaW5lIERGX1NJWkUgNTYKI2RlZmluZSBT Rl9TSVpFIDI0CiNlbmRpZgoKI2lmIEhPU1RfRkxPQVRfRk9STUFUID09IFZBWF9GTE9BVF9GT1JN QVQKI2RlZmluZSBERl9TSVpFIDU2CiNkZWZpbmUgU0ZfU0laRSAyNAojZW5kaWYKClNGdHlwZQpf X2Zsb2F0ZGlzZiAoRFd0eXBlIHUpCnsKICAvKiBEbyB0aGUgY2FsY3VsYXRpb24gaW4gREZtb2Rl CiAgICAgc28gdGhhdCB3ZSBkb24ndCBsb3NlIGFueSBvZiB0aGUgcHJlY2lzaW9uIG9mIHRoZSBo aWdoIHdvcmQKICAgICB3aGlsZSBtdWx0aXBseWluZyBpdC4gICovCiAgREZ0eXBlIGY7CgogIC8q IFByb3RlY3QgYWdhaW5zdCBkb3VibGUtcm91bmRpbmcgZXJyb3IuCiAgICAgUmVwcmVzZW50IGFu eSBsb3ctb3JkZXIgYml0cywgdGhhdCBtaWdodCBiZSB0cnVuY2F0ZWQgaW4gREZtb2RlLAogICAg IGJ5IGEgYml0IHRoYXQgd29uJ3QgYmUgbG9zdC4gIFRoZSBiaXQgY2FuIGdvIGluIGFueXdoZXJl IGJlbG93IHRoZQogICAgIHJvdW5kaW5nIHBvc2l0aW9uIG9mIHRoZSBTRm1vZGUuICBBIGZpeGVk IG1hc2sgYW5kIGJpdCBwb3NpdGlvbgogICAgIGhhbmRsZXMgYWxsIHVzdWFsIGNvbmZpZ3VyYXRp b25zLiAgSXQgZG9lc24ndCBoYW5kbGUgdGhlIGNhc2UKICAgICBvZiAxMjgtYml0IERJbW9kZSwg aG93ZXZlci4gICovCiAgaWYgKERGX1NJWkUgPCBESV9TSVpFCiAgICAgICYmIERGX1NJWkUgPiAo RElfU0laRSAtIERGX1NJWkUgKyBTRl9TSVpFKSkKICAgIHsKI2RlZmluZSBSRVBfQklUICgoVURX dHlwZSkgMSA8PCAoRElfU0laRSAtIERGX1NJWkUpKQogICAgICBpZiAoISAoLSAoKERXdHlwZSkg MSA8PCBERl9TSVpFKSA8IHUKCSAgICAgJiYgdSA8ICgoRFd0eXBlKSAxIDw8IERGX1NJWkUpKSkK CXsKCSAgaWYgKChVRFd0eXBlKSB1ICYgKFJFUF9CSVQgLSAxKSkKCSAgICB1IHw9IFJFUF9CSVQ7 Cgl9CiAgICB9CiAgZiA9IChXdHlwZSkgKHUgPj4gV09SRF9TSVpFKTsKICBmICo9IEhJR0hfSEFM RldPUkRfQ09FRkY7CiAgZiAqPSBISUdIX0hBTEZXT1JEX0NPRUZGOwogIGYgKz0gKFVXdHlwZSkg KHUgJiAoSElHSF9XT1JEX0NPRUZGIC0gMSkpOwoKICByZXR1cm4gKFNGdHlwZSkgZjsKfQojZW5k aWYKCiNpZiBkZWZpbmVkKExfZml4dW5zeGZzaSkgJiYgTElCR0NDMl9MT05HX0RPVUJMRV9UWVBF X1NJWkUgPT0gOTYKLyogUmVlbmFibGUgdGhlIG5vcm1hbCB0eXBlcywgaW4gY2FzZSBsaW1pdHMu aCBuZWVkcyB0aGVtLiAgKi8KI3VuZGVmIGNoYXIKI3VuZGVmIHNob3J0CiN1bmRlZiBpbnQKI3Vu ZGVmIGxvbmcKI3VuZGVmIHVuc2lnbmVkCiN1bmRlZiBmbG9hdAojdW5kZWYgZG91YmxlCiN1bmRl ZiBNSU4KI3VuZGVmIE1BWAojaW5jbHVkZSA8bGltaXRzLmg+CgpVV3R5cGUKX19maXh1bnN4ZlNJ IChYRnR5cGUgYSkKewogIGlmIChhID49IC0gKERGdHlwZSkgV3R5cGVfTUlOKQogICAgcmV0dXJu IChXdHlwZSkgKGEgKyBXdHlwZV9NSU4pIC0gV3R5cGVfTUlOOwogIHJldHVybiAoV3R5cGUpIGE7 Cn0KI2VuZGlmCgojaWZkZWYgTF9maXh1bnNkZnNpCi8qIFJlZW5hYmxlIHRoZSBub3JtYWwgdHlw ZXMsIGluIGNhc2UgbGltaXRzLmggbmVlZHMgdGhlbS4gICovCiN1bmRlZiBjaGFyCiN1bmRlZiBz aG9ydAojdW5kZWYgaW50CiN1bmRlZiBsb25nCiN1bmRlZiB1bnNpZ25lZAojdW5kZWYgZmxvYXQK I3VuZGVmIGRvdWJsZQojdW5kZWYgTUlOCiN1bmRlZiBNQVgKI2luY2x1ZGUgPGxpbWl0cy5oPgoK VVd0eXBlCl9fZml4dW5zZGZTSSAoREZ0eXBlIGEpCnsKICBpZiAoYSA+PSAtIChERnR5cGUpIFd0 eXBlX01JTikKICAgIHJldHVybiAoV3R5cGUpIChhICsgV3R5cGVfTUlOKSAtIFd0eXBlX01JTjsK ICByZXR1cm4gKFd0eXBlKSBhOwp9CiNlbmRpZgoKI2lmZGVmIExfZml4dW5zc2ZzaQovKiBSZWVu YWJsZSB0aGUgbm9ybWFsIHR5cGVzLCBpbiBjYXNlIGxpbWl0cy5oIG5lZWRzIHRoZW0uICAqLwoj dW5kZWYgY2hhcgojdW5kZWYgc2hvcnQKI3VuZGVmIGludAojdW5kZWYgbG9uZwojdW5kZWYgdW5z aWduZWQKI3VuZGVmIGZsb2F0CiN1bmRlZiBkb3VibGUKI3VuZGVmIE1JTgojdW5kZWYgTUFYCiNp bmNsdWRlIDxsaW1pdHMuaD4KClVXdHlwZQpfX2ZpeHVuc3NmU0kgKFNGdHlwZSBhKQp7CiAgaWYg KGEgPj0gLSAoU0Z0eXBlKSBXdHlwZV9NSU4pCiAgICByZXR1cm4gKFd0eXBlKSAoYSArIFd0eXBl X01JTikgLSBXdHlwZV9NSU47CiAgcmV0dXJuIChXdHlwZSkgYTsKfQojZW5kaWYKDAovKiBGcm9t IGhlcmUgb24gZG93biwgdGhlIHJvdXRpbmVzIHVzZSBub3JtYWwgZGF0YSB0eXBlcy4gICovCgoj ZGVmaW5lIFNJdHlwZSBib2d1c190eXBlCiNkZWZpbmUgVVNJdHlwZSBib2d1c190eXBlCiNkZWZp bmUgREl0eXBlIGJvZ3VzX3R5cGUKI2RlZmluZSBVREl0eXBlIGJvZ3VzX3R5cGUKI2RlZmluZSBT RnR5cGUgYm9ndXNfdHlwZQojZGVmaW5lIERGdHlwZSBib2d1c190eXBlCiN1bmRlZiBXdHlwZQoj dW5kZWYgVVd0eXBlCiN1bmRlZiBIV3R5cGUKI3VuZGVmIFVIV3R5cGUKI3VuZGVmIERXdHlwZQoj dW5kZWYgVURXdHlwZQoKI3VuZGVmIGNoYXIKI3VuZGVmIHNob3J0CiN1bmRlZiBpbnQKI3VuZGVm IGxvbmcKI3VuZGVmIHVuc2lnbmVkCiN1bmRlZiBmbG9hdAojdW5kZWYgZG91YmxlCgwKI2lmZGVm IExfX2djY19iY21wCgovKiBMaWtlIGJjbXAgZXhjZXB0IHRoZSBzaWduIGlzIG1lYW5pbmdmdWwu CiAgIFJlc3VsdCBpcyBuZWdhdGl2ZSBpZiBTMSBpcyBsZXNzIHRoYW4gUzIsCiAgIHBvc2l0aXZl IGlmIFMxIGlzIGdyZWF0ZXIsIDAgaWYgUzEgYW5kIFMyIGFyZSBlcXVhbC4gICovCgppbnQKX19n Y2NfYmNtcCAoY29uc3QgdW5zaWduZWQgY2hhciAqczEsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnMy LCBzaXplX3Qgc2l6ZSkKewogIHdoaWxlIChzaXplID4gMCkKICAgIHsKICAgICAgdW5zaWduZWQg Y2hhciBjMSA9ICpzMSsrLCBjMiA9ICpzMisrOwogICAgICBpZiAoYzEgIT0gYzIpCglyZXR1cm4g YzEgLSBjMjsKICAgICAgc2l6ZS0tOwogICAgfQogIHJldHVybiAwOwp9CgojZW5kaWYKDAovKiBf X2VwcmludGYgdXNlZCB0byBiZSB1c2VkIGJ5IEdDQydzIHByaXZhdGUgdmVyc2lvbiBvZiA8YXNz ZXJ0Lmg+LgogICBXZSBubyBsb25nZXIgcHJvdmlkZSB0aGF0IGhlYWRlciwgYnV0IHRoaXMgcm91 dGluZSByZW1haW5zIGluIGxpYmdjYy5hCiAgIGZvciBiaW5hcnkgYmFja3dhcmQgY29tcGF0aWJp bGl0eS4gIE5vdGUgdGhhdCBpdCBpcyBub3QgaW5jbHVkZWQgaW4KICAgdGhlIHNoYXJlZCB2ZXJz aW9uIG9mIGxpYmdjYy4gICovCiNpZmRlZiBMX2VwcmludGYKI2lmbmRlZiBpbmhpYml0X2xpYmMK CiN1bmRlZiBOVUxMIC8qIEF2b2lkIGVycm9ycyBpZiBzdGRpby5oIGFuZCBvdXIgc3RkZGVmLmgg bWlzbWF0Y2guICAqLwojaW5jbHVkZSA8c3RkaW8uaD4KCnZvaWQKX19lcHJpbnRmIChjb25zdCBj aGFyICpzdHJpbmcsIGNvbnN0IGNoYXIgKmV4cHJlc3Npb24sCgkgICB1bnNpZ25lZCBpbnQgbGlu ZSwgY29uc3QgY2hhciAqZmlsZW5hbWUpCnsKICBmcHJpbnRmIChzdGRlcnIsIHN0cmluZywgZXhw cmVzc2lvbiwgbGluZSwgZmlsZW5hbWUpOwogIGZmbHVzaCAoc3RkZXJyKTsKICBhYm9ydCAoKTsK fQoKI2VuZGlmCiNlbmRpZgoKI2lmZGVmIExfYmIKCiNpZiBMT05HX1RZUEVfU0laRSA9PSBHQ09W X1RZUEVfU0laRQp0eXBlZGVmIGxvbmcgZ2Nvdl90eXBlOwojZWxzZQp0eXBlZGVmIGxvbmcgbG9u ZyBnY292X3R5cGU7CiNlbmRpZgoKCi8qIFN0cnVjdHVyZSBlbWl0dGVkIGJ5IC1hICAqLwpzdHJ1 Y3QgYmIKewogIGxvbmcgemVyb193b3JkOwogIGNvbnN0IGNoYXIgKmZpbGVuYW1lOwogIGdjb3Zf dHlwZSAqY291bnRzOwogIGxvbmcgbmNvdW50czsKICBzdHJ1Y3QgYmIgKm5leHQ7CiAgY29uc3Qg dW5zaWduZWQgbG9uZyAqYWRkcmVzc2VzOwoKICAvKiBPbGRlciBHQ0MncyBkaWQgbm90IGVtaXQg dGhlc2UgZmllbGRzLiAgKi8KICBsb25nIG53b3JkczsKICBjb25zdCBjaGFyICoqZnVuY3Rpb25z OwogIGNvbnN0IGxvbmcgKmxpbmVfbnVtczsKICBjb25zdCBjaGFyICoqZmlsZW5hbWVzOwogIGNo YXIgKmZsYWdzOwp9OwoKI2lmZGVmIEJMT0NLX1BST0ZJTEVSX0NPREUKQkxPQ0tfUFJPRklMRVJf Q09ERQojZWxzZQojaWZuZGVmIGluaGliaXRfbGliYwoKLyogU2ltcGxlIG1pbmRlZCBiYXNpYyBi bG9jayBwcm9maWxpbmcgb3V0cHV0IGR1bXBlciBmb3IKICAgc3lzdGVtcyB0aGF0IGRvbid0IHBy b3ZpZGUgdGNvdiBzdXBwb3J0LiAgQXQgcHJlc2VudCwKICAgaXQgcmVxdWlyZXMgYXRleGl0IGFu ZCBzdGRpby4gICovCgojdW5kZWYgTlVMTCAvKiBBdm9pZCBlcnJvcnMgaWYgc3RkaW8uaCBhbmQg b3VyIHN0ZGRlZi5oIG1pc21hdGNoLiAgKi8KI2luY2x1ZGUgPHN0ZGlvLmg+CgojaW5jbHVkZSAi Z2JsLWN0b3JzLmgiCiNpbmNsdWRlICJnY292LWlvLmgiCiNpbmNsdWRlIDxzdHJpbmcuaD4KI2lm ZGVmIFRBUkdFVF9IQVNfRl9TRVRMS1cKI2luY2x1ZGUgPGZjbnRsLmg+CiNpbmNsdWRlIDxlcnJu by5oPgojZW5kaWYKCnN0YXRpYyBzdHJ1Y3QgYmIgKmJiX2hlYWQ7Cgp2b2lkCl9fYmJfZXhpdF9m dW5jICh2b2lkKQp7CiAgRklMRSAqZGFfZmlsZTsKICBpbnQgaTsKICBzdHJ1Y3QgYmIgKnB0cjsK CiAgaWYgKGJiX2hlYWQgPT0gMCkKICAgIHJldHVybjsKCiAgaSA9IHN0cmxlbiAoYmJfaGVhZC0+ ZmlsZW5hbWUpIC0gMzsKCgogIGZvciAocHRyID0gYmJfaGVhZDsgcHRyICE9IChzdHJ1Y3QgYmIg KikgMDsgcHRyID0gcHRyLT5uZXh0KQogICAgewogICAgICBpbnQgZmlyc3RjaGFyOwoKICAgICAg LyogTWFrZSBzdXJlIHRoZSBvdXRwdXQgZmlsZSBleGlzdHMgLQogICAgICAgICBidXQgZG9uJ3Qg Y2xvYmJlciBleGl0aW5nIGRhdGEuICAqLwogICAgICBpZiAoKGRhX2ZpbGUgPSBmb3BlbiAocHRy LT5maWxlbmFtZSwgImEiKSkgIT0gMCkKCWZjbG9zZSAoZGFfZmlsZSk7CgogICAgICAvKiBOZWVk IHRvIHJlLW9wZW4gaW4gb3JkZXIgdG8gYmUgYWJsZSB0byB3cml0ZSBmcm9tIHRoZSBzdGFydC4g ICovCiAgICAgIGRhX2ZpbGUgPSBmb3BlbiAocHRyLT5maWxlbmFtZSwgInIrYiIpOwogICAgICAv KiBTb21lIG9sZCBzeXN0ZW1zIG1pZ2h0IG5vdCBhbGxvdyB0aGUgJ2InIG1vZGUgbW9kaWZpZXIu CiAgICAgICAgIFRoZXJlZm9yZSwgdHJ5IHRvIG9wZW4gd2l0aG91dCBpdC4gIFRoaXMgY2FuIGxl YWQgdG8gYSByYWNlCiAgICAgICAgIGNvbmRpdGlvbiBzbyB0aGF0IHdoZW4geW91IGRlbGV0ZSBh bmQgcmUtY3JlYXRlIHRoZSBmaWxlLCB0aGUKICAgICAgICAgZmlsZSBtaWdodCBiZSBvcGVuZWQg aW4gdGV4dCBtb2RlLCBidXQgdGhlbiwgeW91IHNob3VsZG4ndAogICAgICAgICBkZWxldGUgdGhl IGZpbGUgaW4gdGhlIGZpcnN0IHBsYWNlLiAgKi8KICAgICAgaWYgKGRhX2ZpbGUgPT0gMCkKCWRh X2ZpbGUgPSBmb3BlbiAocHRyLT5maWxlbmFtZSwgInIrIik7CiAgICAgIGlmIChkYV9maWxlID09 IDApCgl7CgkgIGZwcmludGYgKHN0ZGVyciwgImFyYyBwcm9maWxpbmc6IENhbid0IG9wZW4gb3V0 cHV0IGZpbGUgJXMuXG4iLAoJCSAgIHB0ci0+ZmlsZW5hbWUpOwoJICBjb250aW51ZTsKCX0KCiAg ICAgIC8qIEFmdGVyIGEgZm9yaywgYW5vdGhlciBwcm9jZXNzIG1pZ2h0IHRyeSB0byByZWFkIGFu ZC9vciB3cml0ZQogICAgICAgICB0aGUgc2FtZSBmaWxlIHNpbXVsdGFub3VzbHkuICBTbyBpZiB3 ZSBjYW4sIGxvY2sgdGhlIGZpbGUgdG8KICAgICAgICAgYXZvaWQgcmFjZSBjb25kaXRpb25zLiAg Ki8KI2lmIGRlZmluZWQgKFRBUkdFVF9IQVNfRl9TRVRMS1cpCiAgICAgIHsKCXN0cnVjdCBmbG9j ayBzX2Zsb2NrOwoKCXNfZmxvY2subF90eXBlID0gRl9XUkxDSzsKCXNfZmxvY2subF93aGVuY2Ug PSBTRUVLX1NFVDsKCXNfZmxvY2subF9zdGFydCA9IDA7CglzX2Zsb2NrLmxfbGVuID0gMTsKCXNf ZmxvY2subF9waWQgPSBnZXRwaWQgKCk7CgoJd2hpbGUgKGZjbnRsIChmaWxlbm8gKGRhX2ZpbGUp LCBGX1NFVExLVywgJnNfZmxvY2spCgkgICAgICAgJiYgZXJybm8gPT0gRUlOVFIpOwogICAgICB9 CiNlbmRpZgoKICAgICAgLyogSWYgdGhlIGZpbGUgaXMgbm90IGVtcHR5LCBhbmQgdGhlIG51bWJl ciBvZiBjb3VudHMgaW4gaXQgaXMgdGhlCiAgICAgICAgIHNhbWUsIHRoZW4gbWVyZ2UgdGhlbSBp bi4gICovCiAgICAgIGZpcnN0Y2hhciA9IGZnZXRjIChkYV9maWxlKTsKICAgICAgaWYgKGZpcnN0 Y2hhciA9PSBFT0YpCgl7CgkgIGlmIChmZXJyb3IgKGRhX2ZpbGUpKQoJICAgIHsKCSAgICAgIGZw cmludGYgKHN0ZGVyciwgImFyYyBwcm9maWxpbmc6IENhbid0IHJlYWQgb3V0cHV0IGZpbGUgIik7 CgkgICAgICBwZXJyb3IgKHB0ci0+ZmlsZW5hbWUpOwoJICAgIH0KCX0KICAgICAgZWxzZQoJewoJ ICBsb25nIG5fY291bnRzID0gMDsKCgkgIGlmICh1bmdldGMgKGZpcnN0Y2hhciwgZGFfZmlsZSkg PT0gRU9GKQoJICAgIHJld2luZCAoZGFfZmlsZSk7CgkgIGlmIChfX3JlYWRfbG9uZyAoJm5fY291 bnRzLCBkYV9maWxlLCA4KSAhPSAwKQoJICAgIHsKCSAgICAgIGZwcmludGYgKHN0ZGVyciwgImFy YyBwcm9maWxpbmc6IENhbid0IHJlYWQgb3V0cHV0IGZpbGUgJXMuXG4iLAoJCSAgICAgICBwdHIt PmZpbGVuYW1lKTsKCSAgICAgIGNvbnRpbnVlOwoJICAgIH0KCgkgIGlmIChuX2NvdW50cyA9PSBw dHItPm5jb3VudHMpCgkgICAgewoJICAgICAgaW50IGk7CgoJICAgICAgZm9yIChpID0gMDsgaSA8 IG5fY291bnRzOyBpKyspCgkJewoJCSAgZ2Nvdl90eXBlIHYgPSAwOwoKCQkgIGlmIChfX3JlYWRf Z2Nvdl90eXBlICgmdiwgZGFfZmlsZSwgOCkgIT0gMCkKCQkgICAgewoJCSAgICAgIGZwcmludGYg KHN0ZGVyciwKCQkJICAgICAgICJhcmMgcHJvZmlsaW5nOiBDYW4ndCByZWFkIG91dHB1dCBmaWxl ICVzLlxuIiwKCQkJICAgICAgIHB0ci0+ZmlsZW5hbWUpOwoJCSAgICAgIGJyZWFrOwoJCSAgICB9 CgkJICBwdHItPmNvdW50c1tpXSArPSB2OwoJCX0KCSAgICB9CgoJfQoKICAgICAgcmV3aW5kIChk YV9maWxlKTsKCiAgICAgIC8qID8/PyBTaG91bGQgZmlyc3Qgd3JpdGUgYSBoZWFkZXIgdG8gdGhl IGZpbGUuICBQcmVmZXJhYmx5LCBhIDQgYnl0ZQogICAgICAgICBtYWdpYyBudW1iZXIsIDQgYnl0 ZXMgY29udGFpbmluZyB0aGUgdGltZSB0aGUgcHJvZ3JhbSB3YXMKICAgICAgICAgY29tcGlsZWQs IDQgYnl0ZXMgY29udGFpbmluZyB0aGUgbGFzdCBtb2RpZmljYXRpb24gdGltZSBvZiB0aGUKICAg ICAgICAgc291cmNlIGZpbGUsIGFuZCA0IGJ5dGVzIGluZGljYXRpbmcgdGhlIGNvbXBpbGVyIG9w dGlvbnMgdXNlZC4KCiAgICAgICAgIFRoYXQgd2F5IHdlIGNhbiBlYXNpbHkgdmVyaWZ5IHRoYXQg dGhlIHByb3BlciBzb3VyY2UvZXhlY3V0YWJsZS8KICAgICAgICAgZGF0YSBmaWxlIGNvbWJpbmF0 aW9uIGlzIGJlaW5nIHVzZWQgZnJvbSBnY292LiAgKi8KCiAgICAgIGlmIChfX3dyaXRlX2djb3Zf dHlwZSAocHRyLT5uY291bnRzLCBkYV9maWxlLCA4KSAhPSAwKQoJewoKCSAgZnByaW50ZiAoc3Rk ZXJyLCAiYXJjIHByb2ZpbGluZzogRXJyb3Igd3JpdGluZyBvdXRwdXQgZmlsZSAlcy5cbiIsCgkJ ICAgcHRyLT5maWxlbmFtZSk7Cgl9CiAgICAgIGVsc2UKCXsKCSAgaW50IGo7CgkgIGdjb3ZfdHlw ZSAqY291bnRfcHRyID0gcHRyLT5jb3VudHM7CgkgIGludCByZXQgPSAwOwoJICBmb3IgKGogPSBw dHItPm5jb3VudHM7IGogPiAwOyBqLS0pCgkgICAgewoJICAgICAgaWYgKF9fd3JpdGVfZ2Nvdl90 eXBlICgqY291bnRfcHRyLCBkYV9maWxlLCA4KSAhPSAwKQoJCXsKCQkgIHJldCA9IDE7CgkJICBi cmVhazsKCQl9CgkgICAgICBjb3VudF9wdHIrKzsKCSAgICB9CgkgIGlmIChyZXQpCgkgICAgZnBy aW50ZiAoc3RkZXJyLCAiYXJjIHByb2ZpbGluZzogRXJyb3Igd3JpdGluZyBvdXRwdXQgZmlsZSAl cy5cbiIsCgkJICAgICBwdHItPmZpbGVuYW1lKTsKCX0KCiAgICAgIGlmIChmY2xvc2UgKGRhX2Zp bGUpID09IEVPRikKCWZwcmludGYgKHN0ZGVyciwgImFyYyBwcm9maWxpbmc6IEVycm9yIGNsb3Np bmcgb3V0cHV0IGZpbGUgJXMuXG4iLAoJCSBwdHItPmZpbGVuYW1lKTsKICAgIH0KCiAgcmV0dXJu Owp9Cgp2b2lkCl9fYmJfaW5pdF9mdW5jIChzdHJ1Y3QgYmIgKmJsb2NrcykKewogIC8qIFVzZXIg aXMgc3VwcG9zZWQgdG8gY2hlY2sgd2hldGhlciB0aGUgZmlyc3Qgd29yZCBpcyBub24tMCwKICAg ICBidXQganVzdCBpbiBjYXNlLi4uLiAgKi8KCiAgaWYgKGJsb2Nrcy0+emVyb193b3JkKQogICAg cmV0dXJuOwoKICAvKiBJbml0aWFsaXplIGRlc3RydWN0b3IuICAqLwogIGlmICghYmJfaGVhZCkK ICAgIGF0ZXhpdCAoX19iYl9leGl0X2Z1bmMpOwoKICAvKiBTZXQgdXAgbGlua2VkIGxpc3QuICAq LwogIGJsb2Nrcy0+emVyb193b3JkID0gMTsKICBibG9ja3MtPm5leHQgPSBiYl9oZWFkOwogIGJi X2hlYWQgPSBibG9ja3M7Cn0KCi8qIENhbGxlZCBiZWZvcmUgZm9yayBvciBleGVjIC0gd3JpdGUg b3V0IHByb2ZpbGUgaW5mb3JtYXRpb24gZ2F0aGVyZWQgc28KICAgZmFyIGFuZCByZXNldCBpdCB0 byB6ZXJvLiAgVGhpcyBhdm9pZHMgZHVwbGljYXRpb24gb3IgbG9zcyBvZiB0aGUKICAgcHJvZmls ZSBpbmZvcm1hdGlvbiBnYXRoZXJlZCBzbyBmYXIuICAqLwp2b2lkCl9fYmJfZm9ya19mdW5jICh2 b2lkKQp7CiAgc3RydWN0IGJiICpwdHI7CgogIF9fYmJfZXhpdF9mdW5jICgpOwogIGZvciAocHRy ID0gYmJfaGVhZDsgcHRyICE9IChzdHJ1Y3QgYmIgKikgMDsgcHRyID0gcHRyLT5uZXh0KQogICAg ewogICAgICBsb25nIGk7CiAgICAgIGZvciAoaSA9IHB0ci0+bmNvdW50cyAtIDE7IGkgPj0gMDsg aS0tKQoJcHRyLT5jb3VudHNbaV0gPSAwOwogICAgfQp9CgojZW5kaWYgLyogbm90IGluaGliaXRf bGliYyAqLwojZW5kaWYgLyogbm90IEJMT0NLX1BST0ZJTEVSX0NPREUgKi8KI2VuZGlmIC8qIExf YmIgKi8KDAojaWZkZWYgTF9jbGVhcl9jYWNoZQovKiBDbGVhciBwYXJ0IG9mIGFuIGluc3RydWN0 aW9uIGNhY2hlLiAgKi8KCiNkZWZpbmUgSU5TTl9DQUNIRV9QTEFORV9TSVpFIChJTlNOX0NBQ0hF X1NJWkUgLyBJTlNOX0NBQ0hFX0RFUFRIKQoKdm9pZApfX2NsZWFyX2NhY2hlIChjaGFyICpiZWcg X19hdHRyaWJ1dGVfXygoX191bnVzZWRfXykpLAoJICAgICAgIGNoYXIgKmVuZCBfX2F0dHJpYnV0 ZV9fKChfX3VudXNlZF9fKSkpCnsKI2lmZGVmIENMRUFSX0lOU05fQ0FDSEUKICBDTEVBUl9JTlNO X0NBQ0hFIChiZWcsIGVuZCk7CiNlbHNlCiNpZmRlZiBJTlNOX0NBQ0hFX1NJWkUKICBzdGF0aWMg Y2hhciBhcnJheVtJTlNOX0NBQ0hFX1NJWkUgKyBJTlNOX0NBQ0hFX1BMQU5FX1NJWkUgKyBJTlNO X0NBQ0hFX0xJTkVfV0lEVEhdOwogIHN0YXRpYyBpbnQgaW5pdGlhbGl6ZWQ7CiAgaW50IG9mZnNl dDsKICB2b2lkICpzdGFydF9hZGRyCiAgdm9pZCAqZW5kX2FkZHI7CiAgdHlwZWRlZiAoKmZ1bmN0 aW9uX3B0cikgKHZvaWQpOwoKI2lmIChJTlNOX0NBQ0hFX1NJWkUgLyBJTlNOX0NBQ0hFX0xJTkVf V0lEVEgpIDwgMTYKICAvKiBJdCdzIGNoZWFwZXIgdG8gY2xlYXIgdGhlIHdob2xlIGNhY2hlLgog ICAgIFB1dCBpbiBhIHNlcmllcyBvZiBqdW1wIGluc3RydWN0aW9ucyBzbyB0aGF0IGNhbGxpbmcg dGhlIGJlZ2lubmluZwogICAgIG9mIHRoZSBjYWNoZSB3aWxsIGNsZWFyIHRoZSB3aG9sZSB0aGlu Zy4gICovCgogIGlmICghIGluaXRpYWxpemVkKQogICAgewogICAgICBpbnQgcHRyID0gKCgoaW50 KSBhcnJheSArIElOU05fQ0FDSEVfTElORV9XSURUSCAtIDEpCgkJICYgLUlOU05fQ0FDSEVfTElO RV9XSURUSCk7CiAgICAgIGludCBlbmRfcHRyID0gcHRyICsgSU5TTl9DQUNIRV9TSVpFOwoKICAg ICAgd2hpbGUgKHB0ciA8IGVuZF9wdHIpCgl7CgkgICooSU5TVFJVQ1RJT05fVFlQRSAqKXB0cgoJ ICAgID0gSlVNUF9BSEVBRF9JTlNUUlVDVElPTiArIElOU05fQ0FDSEVfTElORV9XSURUSDsKCSAg cHRyICs9IElOU05fQ0FDSEVfTElORV9XSURUSDsKCX0KICAgICAgKihJTlNUUlVDVElPTl9UWVBF ICopIChwdHIgLSBJTlNOX0NBQ0hFX0xJTkVfV0lEVEgpID0gUkVUVVJOX0lOU1RSVUNUSU9OOwoK ICAgICAgaW5pdGlhbGl6ZWQgPSAxOwogICAgfQoKICAvKiBDYWxsIHRoZSBiZWdpbm5pbmcgb2Yg dGhlIHNlcXVlbmNlLiAgKi8KICAoKChmdW5jdGlvbl9wdHIpICgoKGludCkgYXJyYXkgKyBJTlNO X0NBQ0hFX0xJTkVfV0lEVEggLSAxKQoJCSAgICAmIC1JTlNOX0NBQ0hFX0xJTkVfV0lEVEgpKQog ICAoKSk7CgojZWxzZSAvKiBDYWNoZSBpcyBsYXJnZS4gICovCgogIGlmICghIGluaXRpYWxpemVk KQogICAgewogICAgICBpbnQgcHRyID0gKCgoaW50KSBhcnJheSArIElOU05fQ0FDSEVfTElORV9X SURUSCAtIDEpCgkJICYgLUlOU05fQ0FDSEVfTElORV9XSURUSCk7CgogICAgICB3aGlsZSAocHRy IDwgKGludCkgYXJyYXkgKyBzaXplb2YgYXJyYXkpCgl7CgkgICooSU5TVFJVQ1RJT05fVFlQRSAq KXB0ciA9IFJFVFVSTl9JTlNUUlVDVElPTjsKCSAgcHRyICs9IElOU05fQ0FDSEVfTElORV9XSURU SDsKCX0KCiAgICAgIGluaXRpYWxpemVkID0gMTsKICAgIH0KCiAgLyogRmluZCB0aGUgbG9jYXRp b24gaW4gYXJyYXkgdGhhdCBvY2N1cGllcyB0aGUgc2FtZSBjYWNoZSBsaW5lIGFzIEJFRy4gICov CgogIG9mZnNldCA9ICgoaW50KSBiZWcgJiAtSU5TTl9DQUNIRV9MSU5FX1dJRFRIKSAmIChJTlNO X0NBQ0hFX1BMQU5FX1NJWkUgLSAxKTsKICBzdGFydF9hZGRyID0gKCgoaW50KSAoYXJyYXkgKyBJ TlNOX0NBQ0hFX1BMQU5FX1NJWkUgLSAxKQoJCSAmIC1JTlNOX0NBQ0hFX1BMQU5FX1NJWkUpCgkJ KyBvZmZzZXQpOwoKICAvKiBDb21wdXRlIHRoZSBjYWNoZSBhbGlnbm1lbnQgb2YgdGhlIHBsYWNl IHRvIHN0b3AgY2xlYXJpbmcuICAqLwojaWYgMCAgLyogVGhpcyBpcyBub3QgbmVlZGVkIGZvciBn Y2MncyBwdXJwb3Nlcy4gICovCiAgLyogSWYgdGhlIGJsb2NrIHRvIGNsZWFyIGlzIGJpZ2dlciB0 aGFuIGEgY2FjaGUgcGxhbmUsCiAgICAgd2UgY2xlYXIgdGhlIGVudGlyZSBjYWNoZSwgYW5kIE9G RlNFVCBpcyBhbHJlYWR5IGNvcnJlY3QuICAqLwogIGlmIChlbmQgPCBiZWcgKyBJTlNOX0NBQ0hF X1BMQU5FX1NJWkUpCiNlbmRpZgogICAgb2Zmc2V0ID0gKCgoaW50KSAoZW5kICsgSU5TTl9DQUNI RV9MSU5FX1dJRFRIIC0gMSkKCSAgICAgICAmIC1JTlNOX0NBQ0hFX0xJTkVfV0lEVEgpCgkgICAg ICAmIChJTlNOX0NBQ0hFX1BMQU5FX1NJWkUgLSAxKSk7CgojaWYgSU5TTl9DQUNIRV9ERVBUSCA+ IDEKICBlbmRfYWRkciA9IChzdGFydF9hZGRyICYgLUlOU05fQ0FDSEVfUExBTkVfU0laRSkgKyBv ZmZzZXQ7CiAgaWYgKGVuZF9hZGRyIDw9IHN0YXJ0X2FkZHIpCiAgICBlbmRfYWRkciArPSBJTlNO X0NBQ0hFX1BMQU5FX1NJWkU7CgogIGZvciAocGxhbmUgPSAwOyBwbGFuZSA8IElOU05fQ0FDSEVf REVQVEg7IHBsYW5lKyspCiAgICB7CiAgICAgIGludCBhZGRyID0gc3RhcnRfYWRkciArIHBsYW5l ICogSU5TTl9DQUNIRV9QTEFORV9TSVpFOwogICAgICBpbnQgc3RvcCA9IGVuZF9hZGRyICsgcGxh bmUgKiBJTlNOX0NBQ0hFX1BMQU5FX1NJWkU7CgogICAgICB3aGlsZSAoYWRkciAhPSBzdG9wKQoJ ewoJICAvKiBDYWxsIHRoZSByZXR1cm4gaW5zdHJ1Y3Rpb24gYXQgQUREUi4gICovCgkgICgoZnVu Y3Rpb25fcHRyKSBhZGRyKSAoKTsKCgkgIGFkZHIgKz0gSU5TTl9DQUNIRV9MSU5FX1dJRFRIOwoJ fQogICAgfQojZWxzZSAvKiBqdXN0IG9uZSBwbGFuZSAqLwogIGRvCiAgICB7CiAgICAgIC8qIENh bGwgdGhlIHJldHVybiBpbnN0cnVjdGlvbiBhdCBTVEFSVF9BRERSLiAgKi8KICAgICAgKChmdW5j dGlvbl9wdHIpIHN0YXJ0X2FkZHIpICgpOwoKICAgICAgc3RhcnRfYWRkciArPSBJTlNOX0NBQ0hF X0xJTkVfV0lEVEg7CiAgICB9CiAgd2hpbGUgKChzdGFydF9hZGRyICUgSU5TTl9DQUNIRV9TSVpF KSAhPSBvZmZzZXQpOwojZW5kaWYgLyoganVzdCBvbmUgcGxhbmUgKi8KI2VuZGlmIC8qIENhY2hl IGlzIGxhcmdlICovCiNlbmRpZiAvKiBDYWNoZSBleGlzdHMgKi8KI2VuZGlmIC8qIENMRUFSX0lO U05fQ0FDSEUgKi8KfQoKI2VuZGlmIC8qIExfY2xlYXJfY2FjaGUgKi8KDAojaWZkZWYgTF90cmFt cG9saW5lCgovKiBKdW1wIHRvIGEgdHJhbXBvbGluZSwgbG9hZGluZyB0aGUgc3RhdGljIGNoYWlu IGFkZHJlc3MuICAqLwoKI2lmIGRlZmluZWQoV0lOTlQpICYmICEgZGVmaW5lZChfX0NZR1dJTl9f KSAmJiAhIGRlZmluZWQgKF9VV0lOKQoKbG9uZwpnZXRwYWdlc2l6ZSAodm9pZCkKewojaWZkZWYg X0FMUEhBXwogIHJldHVybiA4MTkyOwojZWxzZQogIHJldHVybiA0MDk2OwojZW5kaWYKfQoKI2lm ZGVmIF9faTM4Nl9fCmV4dGVybiBpbnQgVmlydHVhbFByb3RlY3QgKGNoYXIgKiwgaW50LCBpbnQs IGludCAqKSBfX2F0dHJpYnV0ZV9fKChzdGRjYWxsKSk7CiNlbmRpZgoKaW50Cm1wcm90ZWN0IChj aGFyICphZGRyLCBpbnQgbGVuLCBpbnQgcHJvdCkKewogIGludCBucCwgb3A7CgogIGlmIChwcm90 ID09IDcpCiAgICBucCA9IDB4NDA7CiAgZWxzZSBpZiAocHJvdCA9PSA1KQogICAgbnAgPSAweDIw OwogIGVsc2UgaWYgKHByb3QgPT0gNCkKICAgIG5wID0gMHgxMDsKICBlbHNlIGlmIChwcm90ID09 IDMpCiAgICBucCA9IDB4MDQ7CiAgZWxzZSBpZiAocHJvdCA9PSAxKQogICAgbnAgPSAweDAyOwog IGVsc2UgaWYgKHByb3QgPT0gMCkKICAgIG5wID0gMHgwMTsKCiAgaWYgKFZpcnR1YWxQcm90ZWN0 IChhZGRyLCBsZW4sIG5wLCAmb3ApKQogICAgcmV0dXJuIDA7CiAgZWxzZQogICAgcmV0dXJuIC0x Owp9CgojZW5kaWYgLyogV0lOTlQgJiYgISBfX0NZR1dJTl9fICYmICEgX1VXSU4gKi8KCiNpZmRl ZiBUUkFOU0ZFUl9GUk9NX1RSQU1QT0xJTkUKVFJBTlNGRVJfRlJPTV9UUkFNUE9MSU5FCiNlbmRp ZgoKI2lmIGRlZmluZWQgKE5lWFQpICYmIGRlZmluZWQgKF9fTUFDSF9fKQoKLyogTWFrZSBzdGFj ayBleGVjdXRhYmxlIHNvIHdlIGNhbiBjYWxsIHRyYW1wb2xpbmVzIG9uIHN0YWNrLgogICBUaGlz IGlzIGNhbGxlZCBmcm9tIElOSVRJQUxJWkVfVFJBTVBPTElORSBpbiBuZXh0LmguICAqLwojaWZk ZWYgTmVYVFN0ZXAyMQogI2luY2x1ZGUgPG1hY2guaD4KI2Vsc2UKICNpbmNsdWRlIDxtYWNoL21h Y2guaD4KI2VuZGlmCgp2b2lkCl9fZW5hYmxlX2V4ZWN1dGVfc3RhY2sgKGNoYXIgKmFkZHIpCnsK ICBrZXJuX3JldHVybl90IHI7CiAgY2hhciAqZWFkZHIgPSBhZGRyICsgVFJBTVBPTElORV9TSVpF OwogIHZtX2FkZHJlc3NfdCBhID0gKHZtX2FkZHJlc3NfdCkgYWRkcjsKCiAgLyogdHVybiBvbiBl eGVjdXRlIGFjY2VzcyBvbiBzdGFjayAqLwogIHIgPSB2bV9wcm90ZWN0ICh0YXNrX3NlbGYgKCks IGEsIFRSQU1QT0xJTkVfU0laRSwgRkFMU0UsIFZNX1BST1RfQUxMKTsKICBpZiAociAhPSBLRVJO X1NVQ0NFU1MpCiAgICB7CiAgICAgIG1hY2hfZXJyb3IoInZtX3Byb3RlY3QgVk1fUFJPVF9BTEwi LCByKTsKICAgICAgZXhpdCgxKTsKICAgIH0KCiAgLyogV2UgaW5saW5lIHRoZSBpLWNhY2hlIGlu dmFsaWRhdGlvbiBmb3Igc3BlZWQgKi8KCiNpZmRlZiBDTEVBUl9JTlNOX0NBQ0hFCiAgQ0xFQVJf SU5TTl9DQUNIRSAoYWRkciwgZWFkZHIpOwojZWxzZQogIF9fY2xlYXJfY2FjaGUgKChpbnQpIGFk ZHIsIChpbnQpIGVhZGRyKTsKI2VuZGlmCn0KCiNlbmRpZiAvKiBkZWZpbmVkIChOZVhUKSAmJiBk ZWZpbmVkIChfX01BQ0hfXykgKi8KCiNpZmRlZiBfX2NvbnZleF9fCgovKiBNYWtlIHN0YWNrIGV4 ZWN1dGFibGUgc28gd2UgY2FuIGNhbGwgdHJhbXBvbGluZXMgb24gc3RhY2suCiAgIFRoaXMgaXMg Y2FsbGVkIGZyb20gSU5JVElBTElaRV9UUkFNUE9MSU5FIGluIGNvbnZleC5oLiAgKi8KCiNpbmNs dWRlIDxzeXMvbW1hbi5oPgojaW5jbHVkZSA8c3lzL3ZtcGFyYW0uaD4KI2luY2x1ZGUgPG1hY2hp bmUvbWFjaHBhcmFtLmg+Cgp2b2lkCl9fZW5hYmxlX2V4ZWN1dGVfc3RhY2sgKHZvaWQpCnsKICBp bnQgZnA7CiAgc3RhdGljIHVuc2lnbmVkIGxvd2VzdCA9IFVTUlNUQUNLOwogIHVuc2lnbmVkIGN1 cnJlbnQgPSAodW5zaWduZWQpICZmcCAmIC1OQlBHOwoKICBpZiAobG93ZXN0ID4gY3VycmVudCkK ICAgIHsKICAgICAgdW5zaWduZWQgbGVuID0gbG93ZXN0IC0gY3VycmVudDsKICAgICAgbXJlbWFw IChjdXJyZW50LCAmbGVuLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFIHwgUFJPVF9FWEVDLCBNQVBf UFJJVkFURSk7CiAgICAgIGxvd2VzdCA9IGN1cnJlbnQ7CiAgICB9CgogIC8qIENsZWFyIGluc3Ry dWN0aW9uIGNhY2hlIGluIGNhc2UgYW4gb2xkIHRyYW1wb2xpbmUgaXMgaW4gaXQuICAqLwogIGFz bSAoInBpY2giKTsKfQojZW5kaWYgLyogX19jb252ZXhfXyAqLwoKI2lmZGVmIF9fc3lzVjg4X18K Ci8qIE1vZGlmaWVkIGZyb20gdGhlIGNvbnZleCAtY29kZSBhYm92ZS4gICovCgojaW5jbHVkZSA8 c3lzL3BhcmFtLmg+CiNpbmNsdWRlIDxlcnJuby5oPgojaW5jbHVkZSA8c3lzL204OGtiY3MuaD4K CnZvaWQKX19lbmFibGVfZXhlY3V0ZV9zdGFjayAodm9pZCkKewogIGludCBzYXZlX2Vycm5vOwog IHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvd2VzdCA9IFVTUlNUQUNLOwogIHVuc2lnbmVkIGxvbmcg Y3VycmVudCA9ICh1bnNpZ25lZCBsb25nKSAmc2F2ZV9lcnJubyAmIC1OQlBDOwoKICAvKiBJZ25v cmUgZXJybm8gYmVpbmcgc2V0LiBtZW1jdGwgc2V0cyBlcnJubyB0byBFSU5WQUwgd2hlbmV2ZXIg dGhlCiAgICAgYWRkcmVzcyBpcyBzZWVuIGFzICduZWdhdGl2ZScuIFRoYXQgaXMgdGhlIGNhc2Ug d2l0aCB0aGUgc3RhY2suICAqLwoKICBzYXZlX2Vycm5vPWVycm5vOwogIGlmIChsb3dlc3QgPiBj dXJyZW50KQogICAgewogICAgICB1bnNpZ25lZCBsZW49bG93ZXN0LWN1cnJlbnQ7CiAgICAgIG1l bWN0bChjdXJyZW50LGxlbixNQ1RfVEVYVCk7CiAgICAgIGxvd2VzdCA9IGN1cnJlbnQ7CiAgICB9 CiAgZWxzZQogICAgbWVtY3RsKGN1cnJlbnQsTkJQQyxNQ1RfVEVYVCk7CiAgZXJybm89c2F2ZV9l cnJubzsKfQoKI2VuZGlmIC8qIF9fc3lzVjg4X18gKi8KCiNpZmRlZiBfX3N5c1Y2OF9fCgojaW5j bHVkZSA8c3lzL3NpZ25hbC5oPgojaW5jbHVkZSA8ZXJybm8uaD4KCi8qIE1vdG9yb2xhIGZvcmdv dCB0byBwdXQgbWVtY3RsLm8gaW4gdGhlIGxpYnAgdmVyc2lvbiBvZiBsaWJjODgxLmEsCiAgIHNv IGRlZmluZSBpdCBoZXJlLCBiZWNhdXNlIHdlIG5lZWQgaXQgaW4gX19jbGVhcl9pbnNuX2NhY2hl IGJlbG93ICovCi8qIE9uIG9sZGVyIHZlcnNpb25zIG9mIHRoaXMgT1MsIG5vIG1lbWN0bCBvciBN Q1RfVEVYVCBhcmUgZGVmaW5lZDsKICAgaGVuY2Ugd2UgZW5hYmxlIHRoaXMgc3R1ZmYgb25seSBp ZiBNQ1RfVEVYVCBpcyAjZGVmaW5lJ2QuICAqLwoKI2lmZGVmIE1DVF9URVhUCmFzbSgiXG5cCgln bG9iYWwgbWVtY3RsXG5cCm1lbWN0bDpcblwKCW1vdnEgJjc1LCVkMFxuXAoJdHJhcCAmMFxuXAoJ YmNjLmIgbm9lcnJvclxuXAoJam1wIGNlcnJvciVcblwKbm9lcnJvcjpcblwKCW1vdnEgJjAsJWQw XG5cCglydHMiKTsKI2VuZGlmCgovKiBDbGVhciBpbnN0cnVjdGlvbiBjYWNoZSBzbyB3ZSBjYW4g Y2FsbCB0cmFtcG9saW5lcyBvbiBzdGFjay4KICAgVGhpcyBpcyBjYWxsZWQgZnJvbSBGSU5BTEla RV9UUkFNUE9MSU5FIGluIG1vdDMzMDAuaC4gICovCgp2b2lkCl9fY2xlYXJfaW5zbl9jYWNoZSAo dm9pZCkKewojaWZkZWYgTUNUX1RFWFQKICBpbnQgc2F2ZV9lcnJubzsKCiAgLyogUHJlc2VydmUg ZXJybm8sIGJlY2F1c2UgdXNlcnMgd291bGQgYmUgc3VycHJpc2VkIHRvIGhhdmUKICBlcnJubyBj aGFuZ2luZyB3aXRob3V0IGV4cGxpY2l0bHkgY2FsbGluZyBhbnkgc3lzdGVtLWNhbGwuICAqLwog IHNhdmVfZXJybm8gPSBlcnJubzsKCiAgLyogS2VlcCBpdCBzaW1wbGUgOiBtZW1jdGwgKE1DVF9U RVhUKSBhbHdheXMgZnVsbHkgY2xlYXJzIHRoZSBpbnNuIGNhY2hlLgogICAgIE5vIG5lZWQgdG8g dXNlIGFuIGFkZHJlc3MgZGVyaXZlZCBmcm9tIF9zdGFydCBvciAlc3AsIGFzIDAgd29ya3MgYWxz by4gICovCiAgbWVtY3RsKDAsIDQwOTYsIE1DVF9URVhUKTsKICBlcnJubyA9IHNhdmVfZXJybm87 CiNlbmRpZgp9CgojZW5kaWYgLyogX19zeXNWNjhfXyAqLwoKI2lmZGVmIF9fcHlyX18KCiN1bmRl ZiBOVUxMIC8qIEF2b2lkIGVycm9ycyBpZiBzdGRpby5oIGFuZCBvdXIgc3RkZGVmLmggbWlzbWF0 Y2guICAqLwojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN5cy9tbWFuLmg+CiNpbmNsdWRl IDxzeXMvdHlwZXMuaD4KI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgojaW5jbHVkZSA8c3lzL3ZtbWFj Lmg+CgovKiBNb2RpZmllZCBmcm9tIHRoZSBjb252ZXggLWNvZGUgYWJvdmUuCiAgIG1yZW1hcCBw cm9taXNlcyB0byBjbGVhciB0aGUgaS1jYWNoZS4gICovCgp2b2lkCl9fZW5hYmxlX2V4ZWN1dGVf c3RhY2sgKHZvaWQpCnsKICBpbnQgZnA7CiAgaWYgKG1wcm90ZWN0ICgoKHVuc2lnbmVkIGludCkm ZnAvUEFHU0laKSpQQUdTSVosIFBBR1NJWiwKCQlQUk9UX1JFQUR8UFJPVF9XUklURXxQUk9UX0VY RUMpKQogICAgewogICAgICBwZXJyb3IgKCJtcHJvdGVjdCBpbiBfX2VuYWJsZV9leGVjdXRlX3N0 YWNrIik7CiAgICAgIGZmbHVzaCAoc3RkZXJyKTsKICAgICAgYWJvcnQgKCk7CiAgICB9Cn0KI2Vu ZGlmIC8qIF9fcHlyX18gKi8KCiNpZiBkZWZpbmVkIChzb255X25ld3MpICYmIGRlZmluZWQgKFNZ U1RZUEVfQlNEKQoKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KI2lu Y2x1ZGUgPHN5cy9wYXJhbS5oPgojaW5jbHVkZSA8c3lzY2FsbC5oPgojaW5jbHVkZSA8bWFjaGlu ZS9zeXNuZXdzLmg+CgovKiBjYWNoZWZsdXNoIGZ1bmN0aW9uIGZvciBORVdTLU9TIDQuMi4KICAg VGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB0cmFtcG9saW5lLWluaXRpYWxpemUgY29kZQog ICBkZWZpbmVkIGluIGNvbmZpZy9taXBzL21pcHMuaC4gICovCgp2b2lkCmNhY2hlZmx1c2ggKGNo YXIgKmJlZywgaW50IHNpemUsIGludCBmbGFnKQp7CiAgaWYgKHN5c2NhbGwgKFNZU19zeXNuZXdz LCBORVdTX0NBQ0hFRkxVU0gsIGJlZywgc2l6ZSwgRkxVU0hfQkNBQ0hFKSkKICAgIHsKICAgICAg cGVycm9yICgiY2FjaGVfZmx1c2giKTsKICAgICAgZmZsdXNoIChzdGRlcnIpOwogICAgICBhYm9y dCAoKTsKICAgIH0KfQoKI2VuZGlmIC8qIHNvbnlfbmV3cyAqLwojZW5kaWYgLyogTF90cmFtcG9s aW5lICovCgwKI2lmbmRlZiBfX0NZR1dJTl9fCiNpZmRlZiBMX19tYWluCgojaW5jbHVkZSAiZ2Js LWN0b3JzLmgiCi8qIFNvbWUgc3lzdGVtcyB1c2UgX19tYWluIGluIGEgd2F5IGluY29tcGF0aWJs ZSB3aXRoIGl0cyB1c2UgaW4gZ2NjLCBpbiB0aGVzZQogICBjYXNlcyB1c2UgdGhlIG1hY3JvcyBO QU1FX19NQUlOIHRvIGdpdmUgYSBxdW90ZWQgc3ltYm9sIGFuZCBTWU1CT0xfX01BSU4gdG8KICAg Z2l2ZSB0aGUgc2FtZSBzeW1ib2wgd2l0aG91dCBxdW90ZXMgZm9yIGFuIGFsdGVybmF0aXZlIGVu dHJ5IHBvaW50LiAgWW91CiAgIG11c3QgZGVmaW5lIGJvdGgsIG9yIG5laXRoZXIuICAqLwojaWZu ZGVmIE5BTUVfX01BSU4KI2RlZmluZSBOQU1FX19NQUlOICJfX21haW4iCiNkZWZpbmUgU1lNQk9M X19NQUlOIF9fbWFpbgojZW5kaWYKCiNpZmRlZiBJTklUX1NFQ1RJT05fQVNNX09QCiN1bmRlZiBI QVNfSU5JVF9TRUNUSU9OCiNkZWZpbmUgSEFTX0lOSVRfU0VDVElPTgojZW5kaWYKCiNpZiAhZGVm aW5lZCAoSEFTX0lOSVRfU0VDVElPTikgfHwgIWRlZmluZWQgKE9CSkVDVF9GT1JNQVRfRUxGKQoK LyogU29tZSBFTEYgY3Jvc3NlcyB1c2UgY3J0c3R1ZmYuYyB0byBwcm92aWRlIF9fQ1RPUl9MSVNU X18sIGJ1dCB1c2UgdGhpcwogICBjb2RlIHRvIHJ1biBjb25zdHJ1Y3RvcnMuICBJbiB0aGF0IGNh c2UsIHdlIG5lZWQgdG8gaGFuZGxlIEVIIGhlcmUsIHRvby4gICovCgojaWZkZWYgRUhfRlJBTUVf U0VDVElPTl9OQU1FCiNpbmNsdWRlICJ1bndpbmQtZHcyLWZkZS5oIgpleHRlcm4gdW5zaWduZWQg Y2hhciBfX0VIX0ZSQU1FX0JFR0lOX19bXTsKI2VuZGlmCgovKiBSdW4gYWxsIHRoZSBnbG9iYWwg ZGVzdHJ1Y3RvcnMgb24gZXhpdCBmcm9tIHRoZSBwcm9ncmFtLiAgKi8KCnZvaWQKX19kb19nbG9i YWxfZHRvcnMgKHZvaWQpCnsKI2lmZGVmIERPX0dMT0JBTF9EVE9SU19CT0RZCiAgRE9fR0xPQkFM X0RUT1JTX0JPRFk7CiNlbHNlCiAgc3RhdGljIGZ1bmNfcHRyICpwID0gX19EVE9SX0xJU1RfXyAr IDE7CiAgd2hpbGUgKCpwKQogICAgewogICAgICBwKys7CiAgICAgICgqKHAtMSkpICgpOwogICAg fQojZW5kaWYKI2lmIGRlZmluZWQgKEVIX0ZSQU1FX1NFQ1RJT05fTkFNRSkgJiYgIWRlZmluZWQg KEhBU19JTklUX1NFQ1RJT04pCiAgewogICAgc3RhdGljIGludCBjb21wbGV0ZWQgPSAwOwogICAg aWYgKCEgY29tcGxldGVkKQogICAgICB7Cgljb21wbGV0ZWQgPSAxOwoJX19kZXJlZ2lzdGVyX2Zy YW1lX2luZm8gKF9fRUhfRlJBTUVfQkVHSU5fXyk7CiAgICAgIH0KICB9CiNlbmRpZgp9CiNlbmRp ZgoKI2lmbmRlZiBIQVNfSU5JVF9TRUNUSU9OCi8qIFJ1biBhbGwgdGhlIGdsb2JhbCBjb25zdHJ1 Y3RvcnMgb24gZW50cnkgdG8gdGhlIHByb2dyYW0uICAqLwoKdm9pZApfX2RvX2dsb2JhbF9jdG9y cyAodm9pZCkKewojaWZkZWYgRUhfRlJBTUVfU0VDVElPTl9OQU1FCiAgewogICAgc3RhdGljIHN0 cnVjdCBvYmplY3Qgb2JqZWN0OwogICAgX19yZWdpc3Rlcl9mcmFtZV9pbmZvIChfX0VIX0ZSQU1F X0JFR0lOX18sICZvYmplY3QpOwogIH0KI2VuZGlmCiAgRE9fR0xPQkFMX0NUT1JTX0JPRFk7CiAg YXRleGl0IChfX2RvX2dsb2JhbF9kdG9ycyk7Cn0KI2VuZGlmIC8qIG5vIEhBU19JTklUX1NFQ1RJ T04gKi8KCiNpZiAhZGVmaW5lZCAoSEFTX0lOSVRfU0VDVElPTikgfHwgZGVmaW5lZCAoSU5WT0tF X19tYWluKQovKiBTdWJyb3V0aW5lIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IGBtYWluJy4KICAg Q29tcGlsaW5nIGEgZ2xvYmFsIGZ1bmN0aW9uIG5hbWVkIGBtYWluJwogICBwcm9kdWNlcyBhbiBh dXRvbWF0aWMgY2FsbCB0byB0aGlzIGZ1bmN0aW9uIGF0IHRoZSBiZWdpbm5pbmcuCgogICBGb3Ig bWFueSBzeXN0ZW1zLCB0aGlzIHJvdXRpbmUgY2FsbHMgX19kb19nbG9iYWxfY3RvcnMuCiAgIEZv ciBzeXN0ZW1zIHdoaWNoIHN1cHBvcnQgYSAuaW5pdCBzZWN0aW9uIHdlIHVzZSB0aGUgLmluaXQg c2VjdGlvbgogICB0byBydW4gX19kb19nbG9iYWxfY3RvcnMsIHNvIHdlIG5lZWQgbm90IGRvIGFu eXRoaW5nIGhlcmUuICAqLwoKdm9pZApTWU1CT0xfX01BSU4gKCkKewogIC8qIFN1cHBvcnQgcmVj dXJzaXZlIGNhbGxzIHRvIGBtYWluJzogcnVuIGluaXRpYWxpemVycyBqdXN0IG9uY2UuICAqLwog IHN0YXRpYyBpbnQgaW5pdGlhbGl6ZWQ7CiAgaWYgKCEgaW5pdGlhbGl6ZWQpCiAgICB7CiAgICAg IGluaXRpYWxpemVkID0gMTsKICAgICAgX19kb19nbG9iYWxfY3RvcnMgKCk7CiAgICB9Cn0KI2Vu ZGlmIC8qIG5vIEhBU19JTklUX1NFQ1RJT04gb3IgSU5WT0tFX19tYWluICovCgojZW5kaWYgLyog TF9fbWFpbiAqLwojZW5kaWYgLyogX19DWUdXSU5fXyAqLwoMCiNpZmRlZiBMX2N0b3JzCgojaW5j bHVkZSAiZ2JsLWN0b3JzLmgiCgovKiBQcm92aWRlIGRlZmF1bHQgZGVmaW5pdGlvbnMgZm9yIHRo ZSBsaXN0cyBvZiBjb25zdHJ1Y3RvcnMgYW5kCiAgIGRlc3RydWN0b3JzLCBzbyB0aGF0IHdlIGRv bid0IGdldCBsaW5rZXIgZXJyb3JzLiAgVGhlc2Ugc3ltYm9scyBhcmUKICAgaW50ZW50aW9uYWxs eSBic3Mgc3ltYm9scywgc28gdGhhdCBnbGQgYW5kL29yIGNvbGxlY3Qgd2lsbCBwcm92aWRlCiAg IHRoZSByaWdodCB2YWx1ZXMuICAqLwoKLyogV2UgZGVjbGFyZSB0aGUgbGlzdHMgaGVyZSB3aXRo IHR3byBlbGVtZW50cyBlYWNoLAogICBzbyB0aGF0IHRoZXkgYXJlIHZhbGlkIGVtcHR5IGxpc3Rz IGlmIG5vIG90aGVyIGRlZmluaXRpb24gaXMgbG9hZGVkLgoKICAgSWYgd2UgYXJlIHVzaW5nIHRo ZSBvbGQgInNldCIgZXh0ZW5zaW9ucyB0byBoYXZlIHRoZSBnbnUgbGlua2VyCiAgIGNvbGxlY3Qg Y3RvcnMgYW5kIGR0b3JzLCB0aGVuIHdlIF9fQ1RPUl9MSVNUX18gYW5kIF9fRFRPUl9MSVNUX18K ICAgbXVzdCBiZSBpbiB0aGUgYnNzL2NvbW1vbiBzZWN0aW9uLgoKICAgTG9uZyB0ZXJtIG5vIHBv cnQgc2hvdWxkIHVzZSB0aG9zZSBleHRlbnNpb25zLiAgQnV0IG1hbnkgc3RpbGwgZG8uICAqLwoj aWYgIWRlZmluZWQoSU5JVF9TRUNUSU9OX0FTTV9PUCkgJiYgIWRlZmluZWQoQ1RPUl9MSVNUU19E RUZJTkVEX0VYVEVSTkFMTFkpCiNpZiBkZWZpbmVkIChUQVJHRVRfQVNNX0NPTlNUUlVDVE9SKSB8 fCBkZWZpbmVkIChVU0VfQ09MTEVDVDIpCmZ1bmNfcHRyIF9fQ1RPUl9MSVNUX19bMl0gPSB7MCwg MH07CmZ1bmNfcHRyIF9fRFRPUl9MSVNUX19bMl0gPSB7MCwgMH07CiNlbHNlCmZ1bmNfcHRyIF9f Q1RPUl9MSVNUX19bMl07CmZ1bmNfcHRyIF9fRFRPUl9MSVNUX19bMl07CiNlbmRpZgojZW5kaWYg Lyogbm8gSU5JVF9TRUNUSU9OX0FTTV9PUCBhbmQgbm90IENUT1JfTElTVFNfREVGSU5FRF9FWFRF Uk5BTExZICovCiNlbmRpZiAvKiBMX2N0b3JzICovCgwKI2lmZGVmIExfZXhpdAoKI2luY2x1ZGUg ImdibC1jdG9ycy5oIgoKI2lmZGVmIE5FRURfQVRFWElUCgojaWZuZGVmIE9OX0VYSVQKCiMgaW5j bHVkZSA8ZXJybm8uaD4KCnN0YXRpYyBmdW5jX3B0ciAqYXRleGl0X2NoYWluID0gMDsKc3RhdGlj IGxvbmcgYXRleGl0X2NoYWluX2xlbmd0aCA9IDA7CnN0YXRpYyB2b2xhdGlsZSBsb25nIGxhc3Rf YXRleGl0X2NoYWluX3Nsb3QgPSAtMTsKCmludAphdGV4aXQgKGZ1bmNfcHRyIGZ1bmMpCnsKICBp ZiAoKytsYXN0X2F0ZXhpdF9jaGFpbl9zbG90ID09IGF0ZXhpdF9jaGFpbl9sZW5ndGgpCiAgICB7 CiAgICAgIGF0ZXhpdF9jaGFpbl9sZW5ndGggKz0gMzI7CiAgICAgIGlmIChhdGV4aXRfY2hhaW4p CglhdGV4aXRfY2hhaW4gPSAoZnVuY19wdHIgKikgcmVhbGxvYyAoYXRleGl0X2NoYWluLCBhdGV4 aXRfY2hhaW5fbGVuZ3RoCgkJCQkJICAgICAqIHNpemVvZiAoZnVuY19wdHIpKTsKICAgICAgZWxz ZQoJYXRleGl0X2NoYWluID0gKGZ1bmNfcHRyICopIG1hbGxvYyAoYXRleGl0X2NoYWluX2xlbmd0 aAoJCQkJCSAgICAqIHNpemVvZiAoZnVuY19wdHIpKTsKICAgICAgaWYgKCEgYXRleGl0X2NoYWlu KQoJewoJICBhdGV4aXRfY2hhaW5fbGVuZ3RoID0gMDsKCSAgbGFzdF9hdGV4aXRfY2hhaW5fc2xv dCA9IC0xOwoJICBlcnJubyA9IEVOT01FTTsKCSAgcmV0dXJuICgtMSk7Cgl9CiAgICB9CiAgYXRl eGl0X2NoYWluW2xhc3RfYXRleGl0X2NoYWluX3Nsb3RdID0gZnVuYzsKICByZXR1cm4gKDApOwp9 CgpleHRlcm4gdm9pZCBfY2xlYW51cCAodm9pZCk7CmV4dGVybiB2b2lkIF9leGl0IChpbnQpIF9f YXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCnZvaWQKZXhpdCAoaW50IHN0YXR1cykKewog IGlmIChhdGV4aXRfY2hhaW4pCiAgICB7CiAgICAgIGZvciAoIDsgbGFzdF9hdGV4aXRfY2hhaW5f c2xvdC0tID49IDA7ICkKCXsKCSAgKCphdGV4aXRfY2hhaW5bbGFzdF9hdGV4aXRfY2hhaW5fc2xv dCArIDFdKSAoKTsKCSAgYXRleGl0X2NoYWluW2xhc3RfYXRleGl0X2NoYWluX3Nsb3QgKyAxXSA9 IDA7Cgl9CiAgICAgIGZyZWUgKGF0ZXhpdF9jaGFpbik7CiAgICAgIGF0ZXhpdF9jaGFpbiA9IDA7 CiAgICB9CiNpZmRlZiBFWElUX0JPRFkKICBFWElUX0JPRFk7CiNlbHNlCiAgX2NsZWFudXAgKCk7 CiNlbmRpZgogIF9leGl0IChzdGF0dXMpOwp9CgojZWxzZSAvKiBPTl9FWElUICovCgovKiBTaW1w bGU7IHdlIGp1c3QgbmVlZCBhIHdyYXBwZXIgZm9yIE9OX0VYSVQuICAqLwppbnQKYXRleGl0IChm dW5jX3B0ciBmdW5jKQp7CiAgcmV0dXJuIE9OX0VYSVQgKGZ1bmMpOwp9CgojZW5kaWYgLyogT05f RVhJVCAqLwojZW5kaWYgLyogTkVFRF9BVEVYSVQgKi8KCiNlbmRpZiAvKiBMX2V4aXQgKi8K