From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 11733 invoked by alias); 10 Sep 2010 13:26:42 -0000 Received: (qmail 11723 invoked by uid 22791); 10 Sep 2010 13:26:41 -0000 X-SWARE-Spam-Status: No, hits=-1.9 required=5.0 tests=BAYES_00 X-Spam-Check-By: sourceware.org Received: from eu1sys200aog102.obsmtp.com (HELO eu1sys200aog102.obsmtp.com) (207.126.144.113) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 10 Sep 2010 13:26:35 +0000 Received: from source ([167.4.1.35]) (using TLSv1) by eu1sys200aob102.postini.com ([207.126.147.11]) with SMTP ID DSNKTIoyBMuZpFFoRm+sOyxhs3WUP5nREQOr@postini.com; Fri, 10 Sep 2010 13:26:33 UTC Received: from zeta.dmz-us.st.com (ns4.st.com [167.4.80.115]) by beta.dmz-us.st.com (STMicroelectronics) with ESMTP id 000B5154 for ; Fri, 10 Sep 2010 13:22:57 +0000 (GMT) Received: from Webmail-eu.st.com (safex1hubcas6.st.com [10.75.90.73]) by zeta.dmz-us.st.com (STMicroelectronics) with ESMTP id DA903373 for ; Fri, 10 Sep 2010 13:26:10 +0000 (GMT) Received: from SAFEX1MAIL2.st.com ([10.75.90.4]) by Safex1hubcas6.st.com ([10.75.90.73]) with mapi; Fri, 10 Sep 2010 15:25:49 +0200 From: Serge CHATROUX To: "gdb-patches@sourceware.org" Date: Fri, 10 Sep 2010 13:58:00 -0000 Subject: GDB 7.2 - Patch proposal for the use of GDB/Python scripts on MinGW Message-ID: x-cr-hashedpuzzle: AI1c AOms Bouw EEnl EqjY FEW2 Ge8c Gq1g HMk2 H8pf If1G I0rn JGzr JYhf KSW6 Kzyu;1;ZwBkAGIALQBwAGEAdABjAGgAZQBzAEAAcwBvAHUAcgBjAGUAdwBhAHIAZQAuAG8AcgBnAA==;Sosha1_v1;7;{C223862B-2400-4E8C-B69D-4BC0F97AF472};cwBlAHIAZwBlAC4AYwBoAGEAdAByAG8AdQB4AEAAcwB0AC4AYwBvAG0A;Fri, 10 Sep 2010 13:25:45 GMT;RwBEAEIAIAA3AC4AMgAgAC0AIABQAGEAdABjAGgAIABwAHIAbwBwAG8AcwBhAGwAIABmAG8AcgAgAHQAaABlACAAdQBzAGUAIABvAGYAIABHAEQAQgAvAFAAeQB0AGgAbwBuACAAcwBjAHIAaQBwAHQAcwAgAG8AbgAgAE0AaQBuAEcAVwA= x-cr-puzzleid: {C223862B-2400-4E8C-B69D-4BC0F97AF472} Content-Type: multipart/mixed; boundary="_002_A42F0F6AD104734CAC7D6B1963F60DD80116E3AF4F8ASAFEX1MAIL2_" MIME-Version: 1.0 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2010-09/txt/msg00217.txt.bz2 --_002_A42F0F6AD104734CAC7D6B1963F60DD80116E3AF4F8ASAFEX1MAIL2_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Content-length: 2511 I compile gdb 7.2 using MINGW tools and I enable the Python scripting suppo= rt by giving the path to a Python for Windows install directory. gdb/configure --with-x=3Dno --with-python=3D/c/DATA/tmp/build/MINGW32_N= T-5.1/install-python=20 Python for windows ------------------ I get the python 2.6.x from http://www.python.org/download/ I have to make some modifications in Python distribution because header fil= es and libraries directories are not the same between Linux and Windows Pyt= hon distribution. In order to fit gdb sources (Linux-based), I modify the Python distribution: - Go to python windows install directory - Create directory include\python2.6 - Move files from include to include\python2.6 - Copy file libs\libpython26.a to lib directory and rename it to libpython2= .6.a In the future, it could be useful that GDB sources (configure, Makefile.in)= fit also Python Windows-specific packaging. GDB modifications ----------------- I also modify the gdb/python sources to solve the following issues: - Add some tests to disable Python scripting if Python is not available on = the host at runtime.=20 I detect if the PYTHONHOME variable is set. This enhancement is maybe not= useful for everybody. - I have to modify some gdb python files because the files 'python-function= .c', python-cmd.c (...) define some 'static PyTypeObject'. The field 'tp_new' of these static variables is statically initialized wi= th the python 'PyType_GenericNew' function.=20 In Windows port of Python, this function is declared as a dllimport one a= nd cannot be copied at compilation time in a static variable. For these files, I modified the source code - to initialize the 'tp_new' fields to '0' in the static variables and - to affect the proper 'PyType_GenericNew' value in the 'gdbpy_initia= lize_commands', 'gdbpy_initialize_frames' (...).=20 - I also modified python-config.py to get python shared library path when P= ython is compiled in shared library mode. Otherwise the shared library is t= aken from Linux distribution, not from the Python given by --with-python fl= ag. - When sourcing a Python script using 'source file.py' command, we cannot u= se 'PyRun_SimpleFile' because Python may not be compiled using the same MSV= CRT DLL than GDB, so the FILE* stream will not be known in this DLL. This generates an error when the MSVCRT will try to lock the file handle. I hope that this patch will be useful and that I followed the gdb coding ru= les. Regards --_002_A42F0F6AD104734CAC7D6B1963F60DD80116E3AF4F8ASAFEX1MAIL2_ Content-Type: application/octet-stream; name="gdb.python-for-mingw.diff" Content-Description: gdb.python-for-mingw.diff Content-Disposition: attachment; filename="gdb.python-for-mingw.diff"; size=15076; creation-date="Fri, 10 Sep 2010 09:30:20 GMT"; modification-date="Fri, 10 Sep 2010 11:08:03 GMT" Content-Transfer-Encoding: base64 Content-length: 20440 ZGlmZiAtY3AgcHl0aG9uLWdkYi03LjIvcHktY21kLmMgcHl0aG9uLWdkYi9w eS1jbWQuYwoqKiogcHl0aG9uLWdkYi03LjIvcHktY21kLmMJRnJpIFNlcCAx MCAwOToyNzo0MCAyMDEwCi0tLSBweXRob24tZ2RiL3B5LWNtZC5jCUZyaSBT ZXAgMTAgMTE6MDg6MDAgMjAxMAoqKioqKioqKioqKioqKiogZ2RicHlfaW5p dGlhbGl6ZV9jb21tYW5kcyAodm9pZCkKKioqIDUyNiw1MzEgKioqKgotLS0g NTI2LDU0MSAtLS0tCiAgICBpZiAoUHlUeXBlX1JlYWR5ICgmY21kcHlfb2Jq ZWN0X3R5cGUpIDwgMCkKICAgICAgcmV0dXJuOwogIAorICNpZmRlZiBfX01J TkdXMzJfXworICAgLyogCisgCSBJIGhhdmUgdG8gbW9kaWZ5IHNvbWUgZ2Ri IHB5dGhvbiBmaWxlcyBiZWNhdXNlIHRoZSBmaWxlcyAncHl0aG9uLWZ1bmN0 aW9uLmMnLCBweXRob24tY21kLmMgYW5kIHB5dGhvbi1mcmFtZS5jIGRlZmlu ZSBzb21lICdzdGF0aWMgUHlUeXBlT2JqZWN0Jy4KKyAgICAgIFRoZSBmaWVs ZCAndHBfbmV3JyBvZiB0aGVzZSBzdGF0aWMgdmFyaWFibGVzIHN0YXRpY2Fs bHkgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgcHl0aG9uICdQeVR5cGVfR2VuZXJp Y05ldycgZnVuY3Rpb24uIAorICAgICAgSW4gV2luZG93cyBwb3J0IG9mIFB5 dGhvbiwgdGhpcyBmdW5jdGlvbiBpcyBkZWNsYXJlZCBhcyBhIGRsbGltcG9y dCBmdW5jdGlvbiBhbmQgY2FuIG5vdCBiZSBjb3BpZWQgYXQgY29tcGlsYXRp b24gdGltZSBpbiBhIHN0YXRpYyB2YXJpYWJsZS4KKyAgICAgIEZvciB0aGVz ZSAzIGZpbGVzLCBJIG1vZGlmeSB0aGUgc291cmNlIGNvZGUgdG8gaW5pdGlh bGl6ZSB0aGUgJ3RwX25ldycgZmllbGRzIHRvICcwJyBpbiB0aGUgc3RhdGlj IHZhcmlhYmxlcyBhbmQgdG8gYWZmZWN0IHRoZSBwcm9wZXIgJ1B5VHlwZV9H ZW5lcmljTmV3JyB2YWx1ZSBpbiB0aGUgJ2dkYnB5X2luaXRpYWxpemVfY29t bWFuZHMnLCAnZ2RicHlfaW5pdGlhbGl6ZV9mcmFtZXMnIGFuZCAnZ2RicHlf aW5pdGlhbGl6ZV9mdW5jdGlvbnMnLgorICAgKi8KKyAgIGNtZHB5X29iamVj dF90eXBlLnRwX25ldyA9IFB5VHlwZV9HZW5lcmljTmV3OworICNlbmRpZgor IAogICAgLyogTm90ZTogYWxpYXMgYW5kIHVzZXIgYXJlIHNwZWNpYWw7IHBz ZXVkbyBhcHBlYXJzIHRvIGJlIHVudXNlZCwKICAgICAgIGFuZCB0aGVyZSBp cyBubyByZWFzb24gdG8gZXhwb3NlIHR1aSBvciB4ZGIsIEkgdGhpbmsuICAq LwogICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50IChnZGJfbW9kdWxl LCAiQ09NTUFORF9OT05FIiwgbm9fY2xhc3MpIDwgMAoqKioqKioqKioqKioq Kiogc3RhdGljIFB5VHlwZU9iamVjdCBjbWRweV9vYmplY3RfdHlwZSA9Cioq KiA2MTAsNjE2ICoqKioKLS0tIDYyMCw2MzAgLS0tLQogICAgMCwJCQkJICAv KiB0cF9kaWN0b2Zmc2V0ICovCiAgICBjbWRweV9pbml0LAkJCSAgLyogdHBf aW5pdCAqLwogICAgMCwJCQkJICAvKiB0cF9hbGxvYyAqLworICNpZmRlZiBf X01JTkdXMzJfXworICAgMAkJCQkgIC8qIHRwX25ldyAqLworICNlbHNlCiAg ICBQeVR5cGVfR2VuZXJpY05ldwkJICAvKiB0cF9uZXcgKi8KKyAjZW5kaWYK ICB9OwogIAogIAwKZGlmZiAtY3AgcHl0aG9uLWdkYi03LjIvcHktZnJhbWUu YyBweXRob24tZ2RiL3B5LWZyYW1lLmMKKioqIHB5dGhvbi1nZGItNy4yL3B5 LWZyYW1lLmMJRnJpIFNlcCAxMCAwOToyNzo0MCAyMDEwCi0tLSBweXRob24t Z2RiL3B5LWZyYW1lLmMJRnJpIFNlcCAxMCAxMTowODowMCAyMDEwCioqKioq KioqKioqKioqKiBnZGJweV9pbml0aWFsaXplX2ZyYW1lcyAodm9pZCkKKioq IDU2OCw1NzMgKioqKgotLS0gNTY4LDU4MyAtLS0tCiAgICBpZiAoUHlUeXBl X1JlYWR5ICgmZnJhbWVfb2JqZWN0X3R5cGUpIDwgMCkKICAgICAgcmV0dXJu OwogIAorICNpZmRlZiBfX01JTkdXMzJfXworICAgLyogCisgICAgICBJIGhh dmUgdG8gbW9kaWZ5IHNvbWUgZ2RiIHB5dGhvbiBmaWxlcyBiZWNhdXNlIHRo ZSBmaWxlcyAncHl0aG9uLWZ1bmN0aW9uLmMnLCBweXRob24tY21kLmMgYW5k IHB5dGhvbi1mcmFtZS5jIGRlZmluZSBzb21lICdzdGF0aWMgUHlUeXBlT2Jq ZWN0Jy4KKyAgICAgIFRoZSBmaWVsZCAndHBfbmV3JyBvZiB0aGVzZSBzdGF0 aWMgdmFyaWFibGVzIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQgd2l0aCB0aGUg cHl0aG9uICdQeVR5cGVfR2VuZXJpY05ldycgZnVuY3Rpb24uIAorICAgICAg SW4gV2luZG93cyBwb3J0IG9mIFB5dGhvbiwgdGhpcyBmdW5jdGlvbiBpcyBk ZWNsYXJlZCBhcyBhIGRsbGltcG9ydCBmdW5jdGlvbiBhbmQgY2FuIG5vdCBi ZSBjb3BpZWQgYXQgY29tcGlsYXRpb24gdGltZSBpbiBhIHN0YXRpYyB2YXJp YWJsZS4KKyAgICAgIEZvciB0aGVzZSAzIGZpbGVzLCBJIG1vZGlmeSB0aGUg c291cmNlIGNvZGUgdG8gaW5pdGlhbGl6ZSB0aGUgJ3RwX25ldycgZmllbGRz IHRvICcwJyBpbiB0aGUgc3RhdGljIHZhcmlhYmxlcyBhbmQgdG8gYWZmZWN0 IHRoZSBwcm9wZXIgJ1B5VHlwZV9HZW5lcmljTmV3JyB2YWx1ZSBpbiB0aGUg J2dkYnB5X2luaXRpYWxpemVfY29tbWFuZHMnLCAnZ2RicHlfaW5pdGlhbGl6 ZV9mcmFtZXMnIGFuZCAnZ2RicHlfaW5pdGlhbGl6ZV9mdW5jdGlvbnMnLgor ICAgKi8KKyAgIGZyYW1lX29iamVjdF90eXBlLnRwX25ldyA9IFB5VHlwZV9H ZW5lcmljTmV3OworICNlbmRpZgorIAogICAgLyogTm90ZTogVGhlc2Ugd291 bGQgcHJvYmFibHkgYmUgYmVzdCBleHBvc2VkIGFzIGNsYXNzIGF0dHJpYnV0 ZXMgb2YgRnJhbWUsCiAgICAgICBidXQgSSBkb24ndCBrbm93IGhvdyB0byBk byBpdCBleGNlcHQgYnkgbWVzc2luZyB3aXRoIHRoZSB0eXBlJ3MgZGljdGlv bmFyeS4KICAgICAgIFRoYXQgc2VlbXMgdG9vIG1lc3N5LiAgKi8KKioqKioq KioqKioqKioqIHN0YXRpYyBQeVR5cGVPYmplY3QgZnJhbWVfb2JqZWN0X3R5 cGUgPSAKKioqIDY3Miw2NzYgKioqKgotLS0gNjgyLDY5MCAtLS0tCiAgICAw LAkJCQkgIC8qIHRwX2RpY3RvZmZzZXQgKi8KICAgIDAsCQkJCSAgLyogdHBf aW5pdCAqLwogICAgMCwJCQkJICAvKiB0cF9hbGxvYyAqLworICNpZmRlZiBf X01JTkdXMzJfXworICAgMAkJCQkgIC8qIHRwX25ldyAqLworICNlbHNlCiAg ICBQeVR5cGVfR2VuZXJpY05ldwkJICAvKiB0cF9uZXcgKi8KKyAjZW5kaWYK ICB9OwpkaWZmIC1jcCBweXRob24tZ2RiLTcuMi9weS1mdW5jdGlvbi5jIHB5 dGhvbi1nZGIvcHktZnVuY3Rpb24uYwoqKiogcHl0aG9uLWdkYi03LjIvcHkt ZnVuY3Rpb24uYwlGcmkgU2VwIDEwIDA5OjI3OjQwIDIwMTAKLS0tIHB5dGhv bi1nZGIvcHktZnVuY3Rpb24uYwlGcmkgU2VwIDEwIDExOjA4OjAwIDIwMTAK KioqKioqKioqKioqKioqIGdkYnB5X2luaXRpYWxpemVfZnVuY3Rpb25zICh2 b2lkKQoqKiogMTMwLDEzNSAqKioqCi0tLSAxMzAsMTQ1IC0tLS0KICAgIGlm IChQeVR5cGVfUmVhZHkgKCZmbnB5X29iamVjdF90eXBlKSA8IDApCiAgICAg IHJldHVybjsKICAKKyAjaWZkZWYgX19NSU5HVzMyX18KKyAgIC8qIAorICAg ICAgSSBoYXZlIHRvIG1vZGlmeSBzb21lIGdkYiBweXRob24gZmlsZXMgYmVj YXVzZSB0aGUgZmlsZXMgJ3B5dGhvbi1mdW5jdGlvbi5jJywgcHl0aG9uLWNt ZC5jIGFuZCBweXRob24tZnJhbWUuYyBkZWZpbmUgc29tZSAnc3RhdGljIFB5 VHlwZU9iamVjdCcuCisgICAgICBUaGUgZmllbGQgJ3RwX25ldycgb2YgdGhl c2Ugc3RhdGljIHZhcmlhYmxlcyBzdGF0aWNhbGx5IGluaXRpYWxpemVkIHdp dGggdGhlIHB5dGhvbiAnUHlUeXBlX0dlbmVyaWNOZXcnIGZ1bmN0aW9uLiAK KyAgICAgIEluIFdpbmRvd3MgcG9ydCBvZiBQeXRob24sIHRoaXMgZnVuY3Rp b24gaXMgZGVjbGFyZWQgYXMgYSBkbGxpbXBvcnQgZnVuY3Rpb24gYW5kIGNh biBub3QgYmUgY29waWVkIGF0IGNvbXBpbGF0aW9uIHRpbWUgaW4gYSBzdGF0 aWMgdmFyaWFibGUuCisgICAgICBGb3IgdGhlc2UgMyBmaWxlcywgSSBtb2Rp ZnkgdGhlIHNvdXJjZSBjb2RlIHRvIGluaXRpYWxpemUgdGhlICd0cF9uZXcn IGZpZWxkcyB0byAnMCcgaW4gdGhlIHN0YXRpYyB2YXJpYWJsZXMgYW5kIHRv IGFmZmVjdCB0aGUgcHJvcGVyICdQeVR5cGVfR2VuZXJpY05ldycgdmFsdWUg aW4gdGhlICdnZGJweV9pbml0aWFsaXplX2NvbW1hbmRzJywgJ2dkYnB5X2lu aXRpYWxpemVfZnJhbWVzJyBhbmQgJ2dkYnB5X2luaXRpYWxpemVfZnVuY3Rp b25zJy4KKyAgICovCisgICBmbnB5X29iamVjdF90eXBlLnRwX25ldyA9IFB5 VHlwZV9HZW5lcmljTmV3OworICNlbmRpZgorIAogICAgUHlfSU5DUkVGICgm Zm5weV9vYmplY3RfdHlwZSk7CiAgICBQeU1vZHVsZV9BZGRPYmplY3QgKGdk Yl9tb2R1bGUsICJGdW5jdGlvbiIsIChQeU9iamVjdCAqKSAmZm5weV9vYmpl Y3RfdHlwZSk7CiAgfQoqKioqKioqKioqKioqKiogc3RhdGljIFB5VHlwZU9i amVjdCBmbnB5X29iamVjdF90eXBlID0KKioqIDE3NiwxODAgKioqKgotLS0g MTg2LDE5NCAtLS0tCiAgICAwLAkJCQkgIC8qIHRwX2RpY3RvZmZzZXQgKi8K ICAgIGZucHlfaW5pdCwJCQkgIC8qIHRwX2luaXQgKi8KICAgIDAsCQkJCSAg LyogdHBfYWxsb2MgKi8KKyAjaWZkZWYgX19NSU5HVzMyX18KKyAgIDAJCQkJ ICAvKiB0cF9uZXcgKi8KKyAjZWxzZQogICAgUHlUeXBlX0dlbmVyaWNOZXcJ CSAgLyogdHBfbmV3ICovCisgI2VuZGlmCiAgfTsKZGlmZiAtY3AgcHl0aG9u LWdkYi03LjIvcHktaW5mZXJpb3IuYyBweXRob24tZ2RiL3B5LWluZmVyaW9y LmMKKioqIHB5dGhvbi1nZGItNy4yL3B5LWluZmVyaW9yLmMJRnJpIFNlcCAx MCAwOToyNzo0MCAyMDEwCi0tLSBweXRob24tZ2RiL3B5LWluZmVyaW9yLmMJ RnJpIFNlcCAxMCAxMTowODowMCAyMDEwCioqKioqKioqKioqKioqKiBnZGJw eV9pbml0aWFsaXplX2luZmVyaW9yICh2b2lkKQoqKiogNTkzLDU5OCAqKioq Ci0tLSA1OTMsNjA4IC0tLS0KICAgIGlmIChQeVR5cGVfUmVhZHkgKCZtZW1i dWZfb2JqZWN0X3R5cGUpIDwgMCkKICAgICAgcmV0dXJuOwogIAorICNpZmRl ZiBfX01JTkdXMzJfXworICAgLyogCisgICAgICBJIGhhdmUgdG8gbW9kaWZ5 IHNvbWUgZ2RiIHB5dGhvbiBmaWxlcyBiZWNhdXNlIHRoZSBmaWxlcyAncHl0 aG9uLWZ1bmN0aW9uLmMnLCBweXRob24tY21kLmMgYW5kIHB5dGhvbi1mcmFt ZS5jIGRlZmluZSBzb21lICdzdGF0aWMgUHlUeXBlT2JqZWN0Jy4KKyAgICAg IFRoZSBmaWVsZCAndHBfbmV3JyBvZiB0aGVzZSBzdGF0aWMgdmFyaWFibGVz IHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgcHl0aG9uICdQeVR5 cGVfR2VuZXJpY05ldycgZnVuY3Rpb24uIAorICAgICAgSW4gV2luZG93cyBw b3J0IG9mIFB5dGhvbiwgdGhpcyBmdW5jdGlvbiBpcyBkZWNsYXJlZCBhcyBh IGRsbGltcG9ydCBmdW5jdGlvbiBhbmQgY2FuIG5vdCBiZSBjb3BpZWQgYXQg Y29tcGlsYXRpb24gdGltZSBpbiBhIHN0YXRpYyB2YXJpYWJsZS4KKyAgICAg IEZvciB0aGVzZSAzIGZpbGVzLCBJIG1vZGlmeSB0aGUgc291cmNlIGNvZGUg dG8gaW5pdGlhbGl6ZSB0aGUgJ3RwX25ldycgZmllbGRzIHRvICcwJyBpbiB0 aGUgc3RhdGljIHZhcmlhYmxlcyBhbmQgdG8gYWZmZWN0IHRoZSBwcm9wZXIg J1B5VHlwZV9HZW5lcmljTmV3JyB2YWx1ZSBpbiB0aGUgJ2dkYnB5X2luaXRp YWxpemVfY29tbWFuZHMnLCAnZ2RicHlfaW5pdGlhbGl6ZV9mcmFtZXMnIGFu ZCAnZ2RicHlfaW5pdGlhbGl6ZV9mdW5jdGlvbnMnLgorICAgKi8KKyAgIG1l bWJ1Zl9vYmplY3RfdHlwZS50cF9uZXcgPSBQeVR5cGVfR2VuZXJpY05ldzsK KyAjZW5kaWYKKyAKICAgIFB5X0lOQ1JFRiAoJm1lbWJ1Zl9vYmplY3RfdHlw ZSk7CiAgICBQeU1vZHVsZV9BZGRPYmplY3QgKGdkYl9tb2R1bGUsICJNZW1i dWYiLCAoUHlPYmplY3QgKikKICAJCSAgICAgICZtZW1idWZfb2JqZWN0X3R5 cGUpOwoqKioqKioqKioqKioqKiogc3RhdGljIFB5VHlwZU9iamVjdCBtZW1i dWZfb2JqZWN0X3R5cGUgPQoqKiogNzI0LDcyOCAqKioqCi0tLSA3MzQsNzQy IC0tLS0KICAgIDAsCQkJCSAgLyogdHBfZGljdG9mZnNldCAqLwogICAgMCwJ CQkJICAvKiB0cF9pbml0ICovCiAgICAwLAkJCQkgIC8qIHRwX2FsbG9jICov CisgI2lmZGVmIF9fTUlOR1czMl9fCisgICAwCQkJCSAgLyogdHBfbmV3ICov CisgI2Vsc2UKICAgIFB5VHlwZV9HZW5lcmljTmV3CQkgIC8qIHRwX25ldyAq LworICNlbmRpZgogIH07CmRpZmYgLWNwIHB5dGhvbi1nZGItNy4yL3B5LXBh cmFtLmMgcHl0aG9uLWdkYi9weS1wYXJhbS5jCioqKiBweXRob24tZ2RiLTcu Mi9weS1wYXJhbS5jCUZyaSBTZXAgMTAgMDk6Mjc6NDAgMjAxMAotLS0gcHl0 aG9uLWdkYi9weS1wYXJhbS5jCUZyaSBTZXAgMTAgMTE6MDg6MDAgMjAxMAoq KioqKioqKioqKioqKiogZ2RicHlfaW5pdGlhbGl6ZV9wYXJhbWV0ZXJzICh2 b2lkKQoqKiogNTU1LDU2MCAqKioqCi0tLSA1NTUsNTcwIC0tLS0KICAgIGlm IChQeVR5cGVfUmVhZHkgKCZwYXJtcHlfb2JqZWN0X3R5cGUpIDwgMCkKICAg ICAgcmV0dXJuOwogIAorICNpZmRlZiBfX01JTkdXMzJfXworICAgLyogCisg ICAgICBJIGhhdmUgdG8gbW9kaWZ5IHNvbWUgZ2RiIHB5dGhvbiBmaWxlcyBi ZWNhdXNlIHRoZSBmaWxlcyAncHl0aG9uLWZ1bmN0aW9uLmMnLCBweXRob24t Y21kLmMgYW5kIHB5dGhvbi1mcmFtZS5jIGRlZmluZSBzb21lICdzdGF0aWMg UHlUeXBlT2JqZWN0Jy4KKyAgICAgIFRoZSBmaWVsZCAndHBfbmV3JyBvZiB0 aGVzZSBzdGF0aWMgdmFyaWFibGVzIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQg d2l0aCB0aGUgcHl0aG9uICdQeVR5cGVfR2VuZXJpY05ldycgZnVuY3Rpb24u IAorICAgICAgSW4gV2luZG93cyBwb3J0IG9mIFB5dGhvbiwgdGhpcyBmdW5j dGlvbiBpcyBkZWNsYXJlZCBhcyBhIGRsbGltcG9ydCBmdW5jdGlvbiBhbmQg Y2FuIG5vdCBiZSBjb3BpZWQgYXQgY29tcGlsYXRpb24gdGltZSBpbiBhIHN0 YXRpYyB2YXJpYWJsZS4KKyAgICAgIEZvciB0aGVzZSAzIGZpbGVzLCBJIG1v ZGlmeSB0aGUgc291cmNlIGNvZGUgdG8gaW5pdGlhbGl6ZSB0aGUgJ3RwX25l dycgZmllbGRzIHRvICcwJyBpbiB0aGUgc3RhdGljIHZhcmlhYmxlcyBhbmQg dG8gYWZmZWN0IHRoZSBwcm9wZXIgJ1B5VHlwZV9HZW5lcmljTmV3JyB2YWx1 ZSBpbiB0aGUgJ2dkYnB5X2luaXRpYWxpemVfY29tbWFuZHMnLCAnZ2RicHlf aW5pdGlhbGl6ZV9mcmFtZXMnIGFuZCAnZ2RicHlfaW5pdGlhbGl6ZV9mdW5j dGlvbnMnLgorICAgKi8KKyAgIHBhcm1weV9vYmplY3RfdHlwZS50cF9uZXcg PSBQeVR5cGVfR2VuZXJpY05ldzsKKyAjZW5kaWYKKyAKICAgIHNldF9kb2Nf Y3N0ID0gUHlTdHJpbmdfRnJvbVN0cmluZyAoInNldF9kb2MiKTsKICAgIGlm ICghIHNldF9kb2NfY3N0KQogICAgICByZXR1cm47CioqKioqKioqKioqKioq KiBzdGF0aWMgUHlUeXBlT2JqZWN0IHBhcm1weV9vYmplY3RfdHlwZSA9Cioq KiA2MTcsNjIxICoqKioKLS0tIDYyNyw2MzUgLS0tLQogICAgMCwJCQkJICAv KiB0cF9kaWN0b2Zmc2V0ICovCiAgICBwYXJtcHlfaW5pdCwJCQkgIC8qIHRw X2luaXQgKi8KICAgIDAsCQkJCSAgLyogdHBfYWxsb2MgKi8KKyAjaWZkZWYg X19NSU5HVzMyX18KKyAgIDAJCQkJICAvKiB0cF9uZXcgKi8KKyAjZWxzZQog ICAgUHlUeXBlX0dlbmVyaWNOZXcJCSAgLyogdHBfbmV3ICovCisgI2VuZGlm CiAgfTsKZGlmZiAtY3AgcHl0aG9uLWdkYi03LjIvcHktcHJldHR5cHJpbnQu YyBweXRob24tZ2RiL3B5LXByZXR0eXByaW50LmMKKioqIHB5dGhvbi1nZGIt Ny4yL3B5LXByZXR0eXByaW50LmMJRnJpIFNlcCAxMCAwOToyNzo0MCAyMDEw Ci0tLSBweXRob24tZ2RiL3B5LXByZXR0eXByaW50LmMJRnJpIFNlcCAxMCAx MTowODowMCAyMDEwCioqKioqKioqKioqKioqKiBhcHBseV92YWxfcHJldHR5 X3ByaW50ZXIgKHN0cnVjdCB0eXBlICp0CioqKiA2MTcsNjIyICoqKioKLS0t IDYxNyw2MjcgLS0tLQogICAgc3RydWN0IGNsZWFudXAgKmNsZWFudXBzOwog ICAgaW50IHJlc3VsdCA9IDA7CiAgICBpbnQgaXNfcHlfbm9uZSA9IDA7Cisg CisgICAvKiBEbyBub3QgZW5hYmxlIHB5dGhvbiBzY3JpcHRpbmcgaWYgdGhl IFBZVEhPTkhPTUUgdmFyaWFibGUgaXMgdW5kZWZpbmVkICovCisgICBpZiAo aGF2ZV9weXRob24oKSA9PSAwKQorICAgICByZXR1cm4gMDsKKyAKICAgIGNs ZWFudXBzID0gZW5zdXJlX3B5dGhvbl9lbnYgKGdkYmFyY2gsIGxhbmd1YWdl KTsKICAKICAgIC8qIEluc3RhbnRpYXRlIHRoZSBwcmludGVyLiAgKi8KZGlm ZiAtY3AgcHl0aG9uLWdkYi03LjIvcHktdmFsdWUuYyBweXRob24tZ2RiL3B5 LXZhbHVlLmMKKioqIHB5dGhvbi1nZGItNy4yL3B5LXZhbHVlLmMJRnJpIFNl cCAxMCAwOToyNzo0MCAyMDEwCi0tLSBweXRob24tZ2RiL3B5LXZhbHVlLmMJ RnJpIFNlcCAxMCAxMTowODowMCAyMDEwCioqKioqKioqKioqKioqKiBwcmVz ZXJ2ZV9weXRob25fdmFsdWVzIChzdHJ1Y3Qgb2JqZmlsZSAqCioqKiAxNTgs MTYzICoqKioKLS0tIDE1OCwxNjcgLS0tLQogIHsKICAgIHZhbHVlX29iamVj dCAqaXRlcjsKICAKKyAgIC8qIERvIG5vdCBlbmFibGUgcHl0aG9uIHNjcmlw dGluZyBpZiB0aGUgUFlUSE9OSE9NRSB2YXJpYWJsZSBpcyB1bmRlZmluZWQg Ki8KKyAgIGlmIChoYXZlX3B5dGhvbigpID09IDApCisgICAgIHJldHVybjsK KyAKICAgIGZvciAoaXRlciA9IHZhbHVlc19pbl9weXRob247IGl0ZXI7IGl0 ZXIgPSBpdGVyLT5uZXh0KQogICAgICBwcmVzZXJ2ZV9vbmVfdmFsdWUgKGl0 ZXItPnZhbHVlLCBvYmpmaWxlLCBjb3BpZWRfdHlwZXMpOwogIH0KZGlmZiAt Y3AgcHl0aG9uLWdkYi03LjIvcHl0aG9uLWNvbmZpZy5weSBweXRob24tZ2Ri L3B5dGhvbi1jb25maWcucHkKKioqIHB5dGhvbi1nZGItNy4yL3B5dGhvbi1j b25maWcucHkJRnJpIFNlcCAxMCAwOToyNzo0MCAyMDEwCi0tLSBweXRob24t Z2RiL3B5dGhvbi1jb25maWcucHkJRnJpIFNlcCAxMCAxMTowODowMCAyMDEw CioqKioqKioqKioqKioqKiBlbGlmIG9wdCBpbiAoJy0tbGlicycsICctLWxk ZmxhZ3MnKToKKioqIDUwLDU0ICoqKioKLS0tIDUwLDU5IC0tLS0KICAgICAg IyBzaGFyZWQgbGlicmFyeSBpbiBwcmVmaXgvbGliLy4KICAgICAgaWYgb3B0 ID09ICctLWxkZmxhZ3MnIGFuZCBub3QgZ2V0dmFyKCdQeV9FTkFCTEVfU0hB UkVEJyk6CiAgICAgICAgICBsaWJzLmluc2VydCgwLCAnLUwnICsgZ2V0dmFy KCdMSUJQTCcpKQorIAorICAgICAjIEdldCBweXRob24gc2hhcmVkIGxpYnJh cnkgcGF0aAorICAgICBpZiBvcHQgPT0gJy0tbGRmbGFncycgYW5kIGdldHZh cignUHlfRU5BQkxFX1NIQVJFRCcpOgorICAgICAgICAgbGlicy5pbnNlcnQo MCwgJy1MJyArIGdldHZhcignTElCRElSJykpICAgICAgICAKKyAgICAgICAg IAogICAgICBwcmludCAnICcuam9pbihsaWJzKQogIApkaWZmIC1jcCBweXRo b24tZ2RiLTcuMi9weXRob24taW50ZXJuYWwuaCBweXRob24tZ2RiL3B5dGhv bi1pbnRlcm5hbC5oCioqKiBweXRob24tZ2RiLTcuMi9weXRob24taW50ZXJu YWwuaAlGcmkgU2VwIDEwIDA5OjI3OjQwIDIwMTAKLS0tIHB5dGhvbi1nZGIv cHl0aG9uLWludGVybmFsLmgJRnJpIFNlcCAxMCAxMTowODowMCAyMDEwCioq KioqKioqKioqKioqKgoqKiogMjYsMzEgKioqKgotLS0gMjYsMzQgLS0tLQog ICAgIG5lZWRlZCBieSBweXBvcnQuaC4gICovCiAgI2luY2x1ZGUgPHN0ZGlu dC5oPgogIAorIC8qIERvIG5vdCBlbmFibGUgcHl0aG9uIHNjcmlwdGluZyBp ZiB0aGUgUFlUSE9OSE9NRSB2YXJpYWJsZSBpcyB1bmRlZmluZWQgKi8KKyBp bnQgaGF2ZV9weXRob24oKTsKKyAKICAvKiAvdXNyL2luY2x1ZGUvZmVhdHVy ZXMuaCBvbiBsaW51eCBzeXN0ZW1zIHdpbGwgZGVmaW5lIF9QT1NJWF9DX1NP VVJDRQogICAgIGlmIGl0IHNlZXMgX0dOVV9TT1VSQ0UgKHdoaWNoIGNvbmZp Zy5oIHdpbGwgZGVmaW5lKS4KICAgICBweWNvbmZpZy5oIGRlZmluZXMgX1BP U0lYX0NfU09VUkNFIHRvIGEgZGlmZmVyZW50IHZhbHVlIHRoYW4KZGlmZiAt Y3AgcHl0aG9uLWdkYi03LjIvcHl0aG9uLmMgcHl0aG9uLWdkYi9weXRob24u YwoqKiogcHl0aG9uLWdkYi03LjIvcHl0aG9uLmMJRnJpIFNlcCAxMCAwOToy Nzo0MCAyMDEwCi0tLSBweXRob24tZ2RiL3B5dGhvbi5jCUZyaSBTZXAgMTAg MTE6MDg6MDAgMjAxMAoqKioqKioqKioqKioqKiogUHlPYmplY3QgKmdkYnB5 X2VuYWJsZWRfY3N0OwoqKiogNjEsNjYgKioqKgotLS0gNjEsNzMgLS0tLQog IC8qIFRoZSBHZGJFcnJvciBleGNlcHRpb24uICAqLwogIFB5T2JqZWN0ICpn ZGJweV9nZGJlcnJvcl9leGM7CiAgCisgLyogRG8gbm90IGVuYWJsZSBweXRo b24gc2NyaXB0aW5nIGlmIHRoZSBQWVRIT05IT01FIHZhcmlhYmxlIGlzIHVu ZGVmaW5lZCAqLworIGludCBoYXZlUHl0aG9uID0gMTsKKyBpbnQgaGF2ZV9w eXRob24oKQorIHsKKyAgIHJldHVybiBoYXZlUHl0aG9uOworIH0KKyAKICAv KiBBcmNoaXRlY3R1cmUgYW5kIGxhbmd1YWdlIHRvIGJlIHVzZWQgaW4gY2Fs bGJhY2tzIGZyb20KICAgICB0aGUgUHl0aG9uIGludGVycHJldGVyLiAgKi8K ICBzdHJ1Y3QgZ2RiYXJjaCAqcHl0aG9uX2dkYmFyY2g7CioqKioqKioqKioq KioqKiBldmFsX3B5dGhvbl9mcm9tX2NvbnRyb2xfY29tbWFuZCAoc3RydWN0 CioqKiAxNDcsMTUyICoqKioKLS0tIDE1NCwxNjUgLS0tLQogICAgY2hhciAq c2NyaXB0OwogICAgc3RydWN0IGNsZWFudXAgKmNsZWFudXA7CiAgCisgICAv KiBEbyBub3QgZW5hYmxlIHB5dGhvbiBzY3JpcHRpbmcgaWYgdGhlIFBZVEhP TkhPTUUgdmFyaWFibGUgaXMgdW5kZWZpbmVkICovCisgICBpZiAoaGF2ZVB5 dGhvbiA9PSAwKQorICAgICB7CisgICAgICAgcmV0dXJuOworICAgICB9Cisg CiAgICBpZiAoY21kLT5ib2R5X2NvdW50ICE9IDEpCiAgICAgIGVycm9yIChf KCJJbnZhbGlkIFwicHl0aG9uXCIgYmxvY2sgc3RydWN0dXJlLiIpKTsKICAK KioqKioqKioqKioqKioqIHB5dGhvbl9jb21tYW5kIChjaGFyICphcmcsIGlu dCBmcm9tX3R0eSkKKioqIDE3MSwxNzYgKioqKgotLS0gMTg0LDIwOSAtLS0t CiAgewogICAgc3RydWN0IGNsZWFudXAgKmNsZWFudXA7CiAgCisgICAvKiBE byBub3QgZW5hYmxlIHB5dGhvbiBzY3JpcHRpbmcgaWYgdGhlIFBZVEhPTkhP TUUgdmFyaWFibGUgaXMgdW5kZWZpbmVkICovCisgI2lmZGVmIEhBVkVfUFlU SE9OCisgICBpZiAoaGF2ZVB5dGhvbiA9PSAwKQorICAgICB7CisgICAgICAg d2hpbGUgKGFyZyAmJiAqYXJnICYmIGlzc3BhY2UgKCphcmcpKQorIAkrK2Fy ZzsKKyAgICAgICBpZiAoYXJnICYmICphcmcpCisgCWVycm9yIChfKCJQeXRo b24gc2NyaXB0aW5nIGlzIG5vdCBzdXBwb3J0ZWQgd2hlbiB0aGUgUFlUSE9O SE9NRSB2YXJpYWJsZSBpcyB1bmRlZmluZWQuIikpOworICAgICAgIGVsc2UK KyAJeworIAkgIHN0cnVjdCBjb21tYW5kX2xpbmUgKmwgPSBnZXRfY29tbWFu ZF9saW5lIChweXRob25fY29udHJvbCwgIiIpOworIAkgIHN0cnVjdCBjbGVh bnVwICpjbGVhbnVwcyA9IG1ha2VfY2xlYW51cF9mcmVlX2NvbW1hbmRfbGlu ZXMgKCZsKTsKKyAJICBleGVjdXRlX2NvbnRyb2xfY29tbWFuZF91bnRyYWNl ZCAobCk7CisgCSAgZG9fY2xlYW51cHMgKGNsZWFudXBzKTsKKyAJfQorICAg ICAgIHJldHVybjsKKyAgICAgfQorICNlbmRpZiAvKiBIQVZFX1BZVEhPTiAq LworIAorIAogICAgY2xlYW51cCA9IGVuc3VyZV9weXRob25fZW52IChnZXRf Y3VycmVudF9hcmNoICgpLCBjdXJyZW50X2xhbmd1YWdlKTsKICAgIHdoaWxl IChhcmcgJiYgKmFyZyAmJiBpc3NwYWNlICgqYXJnKSkKICAgICAgKythcmc7 CioqKioqKioqKioqKioqKiBzb3VyY2VfcHl0aG9uX3NjcmlwdCAoRklMRSAq c3RyZWFtLCBjb25zCioqKiA0MDMsNDEzICoqKioKLS0tIDQzNiw0NjcgLS0t LQogIHsKICAgIHN0cnVjdCBjbGVhbnVwICpjbGVhbnVwOwogIAorICNpZmRl ZiBIQVZFX1BZVEhPTgorICAgLyogRG8gbm90IGVuYWJsZSBweXRob24gc2Ny aXB0aW5nIGlmIHRoZSBQWVRIT05IT01FIHZhcmlhYmxlIGlzIHVuZGVmaW5l ZCAqLworICAgaWYgKGhhdmVQeXRob24gPT0gMCkKKyAgICAgeworICAgICAg IGVycm9yIChfKCJQeXRob24gc2NyaXB0aW5nIGlzIG5vdCBzdXBwb3J0ZWQg d2hlbiB0aGUgUFlUSE9OSE9NRSB2YXJpYWJsZSBpcyB1bmRlZmluZWQuIikp OworICAgICAgIHJldHVybjsKKyAgICAgfQorICNlbmRpZiAvKiBIQVZFX1BZ VEhPTiAqLworIAogICAgY2xlYW51cCA9IGVuc3VyZV9weXRob25fZW52IChn ZXRfY3VycmVudF9hcmNoICgpLCBjdXJyZW50X2xhbmd1YWdlKTsKICAKKyAj aWZkZWYgX19NSU5HVzMyX18KKyAgIHsKKyAgICAgLyogV2UgY2FuIG5vdCB1 c2UgJ1B5UnVuX1NpbXBsZUZpbGUnIGJlY2F1c2UgUHl0aG9uIG1heSBub3Qg YmUgY29tcGlsZWQgdXNpbmcgdGhlIHNhbWUgTVNWQ1JUIERMTCB0aGFuIEdE QgorICAgICAgICBzbyB0aGUgRklMRSogc3RyZWFtIHdpbGwgbm90IGJlIGtu b3duIGluIHRoaXMgRExMLiBUaGlzIGdlbmVyYXRlIGFuIGVycm9yIHdoZW4g dGhlIE1TVkNSVCB3aWxsIHRyeSB0byBsb2NrIHRoZSBmaWxlIGhhbmRsZS4g Ki8KKyAgICAgUHlPYmplY3QqIFB5RmlsZU9iamVjdCA9IFB5RmlsZV9Gcm9t U3RyaW5nKCAoY2hhciopIGZpbGUsICJyIik7IAorICAgICBpZiAoUHlGaWxl T2JqZWN0ID09IE5VTEwpCisgICAgICAgZXJyb3IgKF8oIkNvdWxkIG5vdCBz b3VyY2UgZmlsZSAlcy4iKSwgZmlsZSk7CisgICAgIFB5UnVuX1NpbXBsZUZp bGUoUHlGaWxlX0FzRmlsZShQeUZpbGVPYmplY3QpLCBmaWxlKTsgCisgICAg IFB5X0RFQ1JFRihQeUZpbGVPYmplY3QpOworICAgfQorICNlbHNlCiAgICAv KiBOb3RlOiBJZiBhbiBleGNlcHRpb24gb2NjdXJzIHB5dGhvbiB3aWxsIHBy aW50IHRoZSB0cmFjZWJhY2sgYW5kCiAgICAgICBjbGVhciB0aGUgZXJyb3Ig aW5kaWNhdG9yLiAgKi8KICAgIFB5UnVuX1NpbXBsZUZpbGUgKHN0cmVhbSwg ZmlsZSk7CisgI2VuZGlmCiAgCiAgICBkb19jbGVhbnVwcyAoY2xlYW51cCk7 CiAgfQoqKioqKioqKioqKioqKiogc291cmNlX3B5dGhvbl9zY3JpcHRfZm9y X29iamZpbGUgKHN0cnVjdAoqKiogNTE2LDUyNCAqKioqCi0tLSA1NzAsNTkw IC0tLS0KICAgIGNsZWFudXBzID0gZW5zdXJlX3B5dGhvbl9lbnYgKGdldF9v YmpmaWxlX2FyY2ggKG9iamZpbGUpLCBjdXJyZW50X2xhbmd1YWdlKTsKICAg IGdkYnB5X2N1cnJlbnRfb2JqZmlsZSA9IG9iamZpbGU7CiAgCisgI2lmZGVm IF9fTUlOR1czMl9fCisgICB7CisgICAgIC8qIFdlIGNhbiBub3QgdXNlICdQ eVJ1bl9TaW1wbGVGaWxlJyBiZWNhdXNlIFB5dGhvbiBtYXkgbm90IGJlIGNv bXBpbGVkIHVzaW5nIHRoZSBzYW1lIE1TVkNSVCBETEwgdGhhbiBHREIKKyAg ICAgICAgc28gdGhlIEZJTEUqIHN0cmVhbSB3aWxsIG5vdCBiZSBrbm93biBp biB0aGlzIERMTC4gVGhpcyBnZW5lcmF0ZSBhbiBlcnJvciB3aGVuIHRoZSBN U1ZDUlQgd2lsbCB0cnkgdG8gbG9jayB0aGUgZmlsZSBoYW5kbGUuICovCisg ICAgIFB5T2JqZWN0KiBQeUZpbGVPYmplY3QgPSBQeUZpbGVfRnJvbVN0cmlu ZyggKGNoYXIqKSBmaWxlLCAiciIpOyAKKyAgICAgaWYgKFB5RmlsZU9iamVj dCA9PSBOVUxMKQorICAgICAgIGVycm9yIChfKCJDb3VsZCBub3Qgc291cmNl IGZpbGUgJXMuIiksIGZpbGUpOworICAgICBQeVJ1bl9TaW1wbGVGaWxlKFB5 RmlsZV9Bc0ZpbGUoUHlGaWxlT2JqZWN0KSwgZmlsZSk7IAorICAgICBQeV9E RUNSRUYoUHlGaWxlT2JqZWN0KTsKKyAgIH0KKyAjZWxzZQogICAgLyogTm90 ZTogSWYgYW4gZXhjZXB0aW9uIG9jY3VycyBweXRob24gd2lsbCBwcmludCB0 aGUgdHJhY2ViYWNrIGFuZAogICAgICAgY2xlYXIgdGhlIGVycm9yIGluZGlj YXRvci4gICovCiAgICBQeVJ1bl9TaW1wbGVGaWxlIChzdHJlYW0sIGZpbGUp OworICNlbmRpZgogIAogICAgZG9fY2xlYW51cHMgKGNsZWFudXBzKTsKICAg IGdkYnB5X2N1cnJlbnRfb2JqZmlsZSA9IE5VTEw7CioqKioqKioqKioqKioq KiBleHRlcm4gaW5pdGlhbGl6ZV9maWxlX2Z0eXBlIF9pbml0aWFsaXplCioq KiA2MzMsNjM4ICoqKioKLS0tIDY5OSw3MTkgLS0tLQogIHZvaWQKICBfaW5p dGlhbGl6ZV9weXRob24gKHZvaWQpCiAgeworICAgLyogRG8gbm90IGVuYWJs ZSBweXRob24gc2NyaXB0aW5nIGlmIHRoZSBQWVRIT05IT01FIHZhcmlhYmxl IGlzIHVuZGVmaW5lZCAqLworICNpZmRlZiBIQVZFX1BZVEhPTgorICAgaWYg KGdldGVudiggIlBZVEhPTkhPTUUiKSA9PSBOVUxMKQorICAgICB7CisgICAg ICAgIGhhdmVQeXRob24gPSAwOworICAgICAgICBhZGRfY29tICgicHl0aG9u IiwgY2xhc3Nfb2JzY3VyZSwgcHl0aG9uX2NvbW1hbmQsCisgCQlfKCJcCisg RXZhbHVhdGUgYSBQeXRob24gY29tbWFuZC5cblwKKyBcblwKKyBQeXRob24g c2NyaXB0aW5nIGlzIG5vdCBzdXBwb3J0ZWQgd2hlbiB0aGUgUFlUSE9OSE9N RSB2YXJpYWJsZSBpcyB1bmRlZmluZWQuIikKKyAJCSk7CisgICAgIH0KKyAg IGVsc2UKKyAjZW5kaWYgLyogSEFWRV9QWVRIT04gKi8KKyAKICAgIGFkZF9j b20gKCJweXRob24iLCBjbGFzc19vYnNjdXJlLCBweXRob25fY29tbWFuZCwK ICAjaWZkZWYgSEFWRV9QWVRIT04KICAJICAgXygiXAoqKioqKioqKioqKioq KiogRW5hYmxlcyBvciBkaXNhYmxlcyBwcmludGluZyBvZiBQeXRob24gcwoq KiogNjgzLDY4OCAqKioqCi0tLSA3NjQsNzc4IC0tLS0KICAgIFB5X1NldFBy b2dyYW1OYW1lIChjb25jYXQgKGxkaXJuYW1lIChweXRob25fbGliZGlyKSwg U0xBU0hfU1RSSU5HLCAiYmluIiwKICAJCQkgICAgIFNMQVNIX1NUUklORywg InB5dGhvbiIsIE5VTEwpKTsKICAjZW5kaWYKKyAKKyAgIC8qIERvIG5vdCBl bmFibGUgcHl0aG9uIHNjcmlwdGluZyBpZiB0aGUgUFlUSE9OSE9NRSB2YXJp YWJsZSBpcyB1bmRlZmluZWQgKi8KKyAjaWZkZWYgSEFWRV9QWVRIT04KKyAg IGlmIChoYXZlUHl0aG9uID09IDApCisgICAgIHsKKyAgICAgICByZXR1cm47 CisgICAgIH0KKyAjZW5kaWYgLyogSEFWRV9QWVRIT04gKi8KKyAKICAKICAg IFB5X0luaXRpYWxpemUgKCk7CiAgICBQeUV2YWxfSW5pdFRocmVhZHMgKCk7 Cg== --_002_A42F0F6AD104734CAC7D6B1963F60DD80116E3AF4F8ASAFEX1MAIL2_--