From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 14559 invoked by alias); 22 Jul 2009 23:16:18 -0000 Received: (qmail 14506 invoked by uid 22791); 22 Jul 2009 23:16:13 -0000 X-SWARE-Spam-Status: No, hits=-0.3 required=5.0 tests=AWL,BAYES_00,HK_OBFDOM,J_CHICKENPOX_12,KAM_STOCKGEN,SARE_MSGID_LONG40,SPF_PASS X-Spam-Check-By: sourceware.org Received: from mail-bw0-f205.google.com (HELO mail-bw0-f205.google.com) (209.85.218.205) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 22 Jul 2009 23:16:02 +0000 Received: by bwz1 with SMTP id 1so500748bwz.24 for ; Wed, 22 Jul 2009 16:15:58 -0700 (PDT) MIME-Version: 1.0 Received: by 10.239.161.74 with SMTP id g10mr157260hbd.92.1248304558139; Wed, 22 Jul 2009 16:15:58 -0700 (PDT) From: Reid Kleckner Date: Thu, 23 Jul 2009 01:58:00 -0000 Message-ID: <9a9942200907221615o570e749fh5cb186c1600f159c@mail.gmail.com> Subject: [RFA] Add interface for registering JITed code To: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=001485f33676c26bda046f538d12 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: 2009-07/txt/msg00573.txt.bz2 --001485f33676c26bda046f538d12 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-length: 4449 Hi, I'm working on unladen swallow, and we're trying to speed up Python by using the LLVM JIT. However, when we merge back to mainline, we want developers to be able to debug CPython with GDB. So that means we need LLVM to generate dwarf debug info, and we need to register it with GDB. After talking with some GDB developers here at Google, we decided the best way to do this was to mirror the dlopen/dlclose interface. On the LLVM side, for each JITed function we create a small ELF in memory with the debug info and symbol. LLVM then writes a little code entry struct describing the ELF, adds it to a linked list, and calls __jit_debug_register_code. I've added a breakpoint at __jit_debug_register_code and a corresponding event handler on the GDB side, which then reads the code entry out of another special global symbol (__jit_debug_descriptor). GDB then copies over the ELF and creates a BFD with it in memory, as is done in symbol-file-from-memory. Then it can call add_symbol_file_from_bfd with the BFD, and life is good. If GDB attaches while the program is running, it reads the linked list of code entries from the descriptor and registers each ELF as above. If LLVM frees machine code, then it sets the action enum in the descriptor to JIT_UNREGISTER, points the descriptor at the relevant code entry, and calls __jit_debug_register_code again. This way, GDB can turn around and free the corresponding object file. It's a nicer interface than the shared library interface because it actually passes the relevant entry, so you don't have to iterate over the linked list in the inferior. Finally, if the inferior exits, GDB goes through and tosses out all the JITed object files. One nice thing about this interface is that we don't have to reinvent another "file" format to encode the debug information, but it is annoying that it requires the JIT to link in an object file writer. Right now LLVM only has call frame information support (which they use for dwarf exception handling), but they have plans to add more after this summer. With this interface, we don't have to change anything on the GDB side when that happens. Here is a demo of what this does on x86_64, which relies on call frame information to produce a backtrace. Without the interface, the backtrace is totally garbled (it has way too many frames) in addition to not having symbols: [rnk@knuckles llvm-gdb-64]$ gdb Debug/bin/lli GNU gdb 6.8-gg16 ... (gdb) run t.bc ... Program received signal SIGSEGV, Segmentation fault. [Switching to Thread 0x7ffff7fd86f0 (LWP 15017)] (gdb) bt #0 0x00007ffff61441a4 in ?? () #1 0x0000000000000003 in ?? () #2 0x0000000000000004 in ?? () #3 0x00037ffff5f43fd0 in ?? () #4 0x00007ffff614411c in ?? () #5 0x00027fff00000003 in ?? () #6 0x00007ffff61440aa in ?? () #7 0x01000002f5f43ff0 in ?? () #8 0x00007ffff614402c in ?? () #9 0x0100000000000001 in ?? () #10 0x0000000001438a40 in ?? () #11 0x00007fff00000001 in ?? () #12 0x0000000000b84d63 in llvm::JIT::runFunction (this=0x1405900, F=0x1402e10, ArgValues=@0x7fffffffdfd0) at /home/rnk/llvm-gdb/lib/ExecutionEngine/JIT/JIT.cpp:411 #13 0x0000000000ba8985 in llvm::ExecutionEngine::runFunctionAsMain ( this=0x1405900, Fn=0x1402e10, argv=@0x13efab8, envp=0x7fffffffe3a0) at /home/rnk/llvm-gdb/lib/ExecutionEngine/ExecutionEngine.cpp:378 #14 0x00000000007e8635 in main (argc=2, argv=0x7fffffffe388, envp=0x7fffffffe3a0) at /home/rnk/llvm-gdb/tools/lli/lli.cpp:220 (gdb) With the interface, it has symbols and no extra frames: [rnk@knuckles llvm-gdb-64]$ ../gdb-jit-64/gdb/gdb Debug/bin/lli ... (gdb) run t.bc ... Program received signal SIGSEGV, Segmentation fault. 0x00007ffff61441a4 in baz () (gdb) bt #0 0x00007ffff61441a4 in baz () #1 0x00007ffff614411c in bar () #2 0x00007ffff61440aa in foo () #3 0x00007ffff614402c in main () #4 0x0000000000b84d63 in llvm::JIT::runFunction (this=0x1405900, F=0x1402e10, ArgValues=...) at /home/rnk/llvm-gdb/lib/ExecutionEngine/JIT/JIT.cpp:411 #5 0x0000000000ba8985 in llvm::ExecutionEngine::runFunctionAsMain ( this=0x1405900, Fn=0x1402e10, argv=..., envp=0x7fffffffe390) at /home/rnk/llvm-gdb/lib/ExecutionEngine/ExecutionEngine.cpp:378 #6 0x00000000007e8635 in main (argc=2, argv=0x7fffffffe378, envp=0x7fffffffe390) at /home/rnk/llvm-gdb/tools/lli/lli.cpp:220 (gdb) I've tested this on x86_64 debugging both 64-bit and 32-bit inferiors. Please review! Thanks, Reid --001485f33676c26bda046f538d12 Content-Type: text/plain; charset=US-ASCII; name="jit-patch.txt" Content-Disposition: attachment; filename="jit-patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fxgo8mvc0 Content-length: 42530 MjAwOS0wNy0yMiAgUmVpZCBLbGVja25lciAgPHJlaWRAa2xlY2tuZXIubmV0 PgoKCUFkZCBpbnRlcmZhY2UgZm9yIEpJVCBjb2RlIGdlbmVyYXRpb24uCgkq IE1ha2VmaWxlLmluIChTRklMRVMpOiBBZGQgaml0LmMuCgkoSEZJTEVTX05P X1NSQ0RJUik6IEFkZCBqaXQuaC4KCShDT01NT05fT0JTKTogQWRkIGppdC5v LgoJKiBqaXQuYzogTmV3IGZpbGUuCgkqIGppdC5oOiBOZXcgZmlsZS4KCSog YnJlYWtwb2ludC5oOgoJKGVudW0gYnB0eXBlKTogQWRkIGJwX2ppdF9ldmVu dCB0byBlbnVtLgoJKiBicmVha3BvaW50LmM6CgkoYnBzdGF0X3doYXQpOiBV cGRhdGUgZXZlbnQgdGFibGUgZm9yIGJwX2ppdF9ldmVudC4KCShwcmludF9p dF90eXBpY2FsKTogQWRkZWQgY2FzZSBmb3IgYnBfaml0X2V2ZW50LgoJKHBy aW50X29uZV9icmVha3BvaW50X2xvY2F0aW9uKTogQWRkZWQgY2FzZSBmb3Ig YnBfaml0X2V2ZW50LgoJKG1lbnRpb24pOiBBZGRlZCBjYXNlIGZvciBicF9q aXRfZXZlbnQuCgkoZGVsZXRlX2NvbW1hbmQpOiBBZGRlZCBjYXNlIGZvciBi cF9qaXRfZXZlbnQuCgkoYnJlYWtwb2ludF9yZV9zZXRfb25lKTogQWRkZWQg Y2FzZSBmb3IgYnBfaml0X2V2ZW50LgoJKGNyZWF0ZV9qaXRfZXZlbnRfYnJl YWtwb2ludCk6IE5ldy4KCSogaW5mcnVuLmMgKGhhbmRsZV9pbmZlcmlvcl9l dmVudCk6IEFkZCBoYW5kbGVyIGZvciBqaXQgZXZlbnQuCgkqIHN5bWZpbGUu aDoKCShzeW1ib2xfZmlsZV9hZGRfZnJvbV9sb2NhbF9tZW1vcnkpOiBOZXcu Cgkoc3ltYm9sX2ZpbGVfYWRkX2Zyb21fbWVtb3J5KTogQWRkZWQgZGVjbGFy YXRpb24uCgkoc3ltYm9sX2ZpbGVfZ3Vlc3NfdGVtcGxhdGUpOiBOZXcuCgkq IHN5bWZpbGUtbWVtLmM6CgkoYmZkX29wZW5fZnJvbV9tZW1vcnkpOiBOZXcu Cgkoc3ltYm9sX2ZpbGVfYWRkX2Zyb21fbG9jYWxfbWVtb3J5KTogTmV3LgoJ KHN5bWJvbF9maWxlX2FkZF9mcm9tX21lbW9yeSk6IE1vZGlmaWVkIHRvIHVz ZSBuZXcgY29tbW9uIGNvZGUuCgkoc3ltYm9sX2ZpbGVfYWRkX2Zyb21fbWVt b3J5X2NvbW1vbik6IE5ldy4KCShzeW1ib2xfZmlsZV9ndWVzc190ZW1wbGF0 ZSk6IE5ldy4KCSogb2JqZmlsZXMuYyAoZnJlZV9vYmpmaWxlKTogRml4ZWQg YSBtZW1vcnkgbGVhay4KCkluZGV4OiBnZGIvTWFrZWZpbGUuaW4KPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9N YWtlZmlsZS5pbix2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMDg2CmRpZmYg LXUgLXAgLXUgLXIxLjEwODYgTWFrZWZpbGUuaW4KLS0tIGdkYi9NYWtlZmls ZS5pbgkyOCBNYXkgMjAwOSAwMTowNToxMyAtMDAwMAkxLjEwODYKKysrIGdk Yi9NYWtlZmlsZS5pbgkyMiBKdWwgMjAwOSAyMjoyNjowNyAtMDAwMApAQCAt NjczLDcgKzY3Myw4IEBAIFNGSUxFUyA9IGFkYS1leHAueSBhZGEtbGFuZy5j IGFkYS10eXBlcHIKIAl3cmFwcGVyLmMgXAogCXhtbC10ZGVzYy5jIHhtbC1z dXBwb3J0LmMgXAogCWluZmVyaW9yLmMgZ2RiX3VzbGVlcC5jIFwKLQlyZWNv cmQuYworCXJlY29yZC5jIFwKKwlqaXQuYwogCiBMSU5URklMRVMgPSAkKFNG SUxFUykgJChZWUZJTEVTKSAkKENPTkZJR19TUkNTKSBpbml0LmMKIApAQCAt NzQ0LDcgKzc0NSw3IEBAIGNvbmZpZy9yczYwMDAvbm0tcnM2MDAwLmggdG9w LmggYnNkLWt2bS4KIGFubm90YXRlLmggc2ltLXJlZ25vLmggZGljdGlvbmFy eS5oIGRmcC5oIG1haW4uaCBmcmFtZS11bndpbmQuaAlcCiByZW1vdGUtZmls ZWlvLmggaTM4Ni1saW51eC10ZGVwLmggdmF4LXRkZXAuaCBvYmpjLWxhbmcu aCBcCiBzZW50aW5lbC1mcmFtZS5oIGJjYWNoZS5oIHN5bWZpbGUuaCB3aW5k b3dzLXRkZXAuaCBsaW51eC10ZGVwLmggXAotZ2RiX3VzbGVlcC5oCitnZGJf dXNsZWVwLmggaml0LmgKIAogIyBIZWFkZXIgZmlsZXMgdGhhdCBhbHJlYWR5 IGhhdmUgc3JjZGlyIGluIHRoZW0sIG9yIHdoaWNoIGFyZSBpbiBvYmpkaXIu CiAKQEAgLTgyNSw3ICs4MjYsOCBAQCBDT01NT05fT0JTID0gJChERVBGSUxF UykgJChDT05GSUdfT0JTKSAkCiAJc29saWIubyBzb2xpYi1udWxsLm8gXAog CXByb2xvZ3VlLXZhbHVlLm8gbWVtb3J5LW1hcC5vIHhtbC1zdXBwb3J0Lm8g XAogCXRhcmdldC1kZXNjcmlwdGlvbnMubyB0YXJnZXQtbWVtb3J5Lm8geG1s LXRkZXNjLm8geG1sLWJ1aWx0aW4ubyBcCi0JaW5mZXJpb3IubyBvc2RhdGEu byBnZGJfdXNsZWVwLm8gcmVjb3JkLm8KKwlpbmZlcmlvci5vIG9zZGF0YS5v IGdkYl91c2xlZXAubyByZWNvcmQubyBcCisJaml0Lm8KIAogVFNPQlMgPSBp bmZsb3cubwogCkluZGV4OiBnZGIvYnJlYWtwb2ludC5jCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvYnJlYWtw b2ludC5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQwMwpkaWZmIC11IC1w IC11IC1yMS40MDMgYnJlYWtwb2ludC5jCi0tLSBnZGIvYnJlYWtwb2ludC5j CTggSnVuIDIwMDkgMTY6MDU6MTQgLTAwMDAJMS40MDMKKysrIGdkYi9icmVh a3BvaW50LmMJMjIgSnVsIDIwMDkgMjI6MjY6MDggLTAwMDAKQEAgLTI1MTAs NiArMjUxMCw3IEBAIHByaW50X2l0X3R5cGljYWwgKGJwc3RhdCBicykKICAg ICBjYXNlIGJwX3dhdGNocG9pbnRfc2NvcGU6CiAgICAgY2FzZSBicF9jYWxs X2R1bW15OgogICAgIGNhc2UgYnBfdHJhY2Vwb2ludDoKKyAgICBjYXNlIGJw X2ppdF9ldmVudDoKICAgICBkZWZhdWx0OgogICAgICAgcmVzdWx0ID0gUFJJ TlRfVU5LTk9XTjsKICAgICAgIGJyZWFrOwpAQCAtMzIzMiw2ICszMjMzLDkg QEAgYnBzdGF0X3doYXQgKGJwc3RhdCBicykKICAgICAgIC8qIFdlIGhpdCB0 aGUgc2hhcmVkIGxpYnJhcnkgZXZlbnQgYnJlYWtwb2ludC4gICovCiAgICAg ICBzaGxpYl9ldmVudCwKIAorICAgICAgLyogV2UgaGl0IHRoZSBqaXQgZXZl bnQgYnJlYWtwb2ludC4gICovCisgICAgICBqaXRfZXZlbnQsCisKICAgICAg IC8qIFRoaXMgaXMganVzdCB1c2VkIHRvIGNvdW50IGhvdyBtYW55IGVudW1z IHRoZXJlIGFyZS4gICovCiAgICAgICBjbGFzc19sYXN0CiAgICAgfTsKQEAg LTMyNDcsNiArMzI1MSw3IEBAIGJwc3RhdF93aGF0IChicHN0YXQgYnMpCiAj ZGVmaW5lIGNsciBCUFNUQVRfV0hBVF9DTEVBUl9MT05HSk1QX1JFU1VNRQog I2RlZmluZSBzciBCUFNUQVRfV0hBVF9TVEVQX1JFU1VNRQogI2RlZmluZSBz aGwgQlBTVEFUX1dIQVRfQ0hFQ0tfU0hMSUJTCisjZGVmaW5lIGppdCBCUFNU QVRfV0hBVF9DSEVDS19KSVQKIAogLyogIkNhbid0IGhhcHBlbi4iICBNaWdo dCB3YW50IHRvIHByaW50IGFuIGVycm9yIG1lc3NhZ2UuCiAgICBhYm9ydCgp IGlzIG5vdCBvdXQgb2YgdGhlIHF1ZXN0aW9uLCBidXQgY2hhbmNlcyBhcmUg R0RCIGlzIGp1c3QKQEAgLTMyNjcsMTIgKzMyNzIsMTMgQEAgYnBzdGF0X3do YXQgKGJwc3RhdCBicykKICAgICAgYmFjayBhbmQgZGVjaWRlIHNvbWV0aGlu ZyBvZiBhIGxvd2VyIHByaW9yaXR5IGlzIGJldHRlci4gIFRoZQogICAgICBv cmRlcmluZyBpczoKIAotICAgICBrYyAgIDwgY2xyIHNnbCBzaGwgc2xyIHNu IHNyIHNzCi0gICAgIHNnbCAgPCBzaGwgc2xyIHNuIHNyIHNzCi0gICAgIHNs ciAgPCBlcnIgc2hsIHNuIHNyIHNzCi0gICAgIGNsciAgPCBlcnIgc2hsIHNu IHNyIHNzCi0gICAgIHNzICAgPCBzaGwgc24gc3IKLSAgICAgc24gICA8IHNo bCBzcgorICAgICBrYyAgIDwgaml0IGNsciBzZ2wgc2hsIHNsciBzbiBzciBz cworICAgICBzZ2wgIDwgaml0IHNobCBzbHIgc24gc3Igc3MKKyAgICAgc2xy ICA8IGppdCBlcnIgc2hsIHNuIHNyIHNzCisgICAgIGNsciAgPCBqaXQgZXJy IHNobCBzbiBzciBzcworICAgICBzcyAgIDwgaml0IHNobCBzbiBzcgorICAg ICBzbiAgIDwgaml0IHNobCBzcgorICAgICBqaXQgIDwgc2hsIHNyCiAgICAg IHNobCAgPCBzcgogICAgICBzciAgIDwKIApAQCAtMzI5MCwyOCArMzI5Niwx OCBAQCBicHN0YXRfd2hhdCAoYnBzdGF0IGJzKQogICAgIHRhYmxlWyhpbnQp IGNsYXNzX2xhc3RdWyhpbnQpIEJQU1RBVF9XSEFUX0xBU1RdID0KICAgewog ICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZCBhY3Rpb24g Ki8KLSAgLyogICAgICAga2MgICAgc3MgICAgc24gICAgc2dsICAgIHNsciAg IGNsciAgIHNyICAgc2hsCi0gICAqLwotLypub19lZmZlY3QgKi8KLSAgICB7 a2MsIHNzLCBzbiwgc2dsLCBzbHIsIGNsciwgc3IsIHNobH0sCi0vKndwX3Np bGVudCAqLwotICAgIHtzcywgc3MsIHNuLCBzcywgc3MsIHNzLCBzciwgc2hs fSwKLS8qd3Bfbm9pc3kgKi8KLSAgICB7c24sIHNuLCBzbiwgc24sIHNuLCBz biwgc3IsIHNobH0sCi0vKmJwX25vc3RvcCAqLwotICAgIHtzZ2wsIHNzLCBz biwgc2dsLCBzbHIsIHNsciwgc3IsIHNobH0sCi0vKmJwX3NpbGVudCAqLwot ICAgIHtzcywgc3MsIHNuLCBzcywgc3MsIHNzLCBzciwgc2hsfSwKLS8qYnBf bm9pc3kgKi8KLSAgICB7c24sIHNuLCBzbiwgc24sIHNuLCBzbiwgc3IsIHNo bH0sCi0vKmxvbmdfanVtcCAqLwotICAgIHtzbHIsIHNzLCBzbiwgc2xyLCBz bHIsIGVyciwgc3IsIHNobH0sCi0vKmxvbmdfcmVzdW1lICovCi0gICAge2Ns ciwgc3MsIHNuLCBlcnIsIGVyciwgZXJyLCBzciwgc2hsfSwKLS8qc3RlcF9y ZXN1bWUgKi8KLSAgICB7c3IsIHNyLCBzciwgc3IsIHNyLCBzciwgc3IsIHNy fSwKLS8qc2hsaWIgKi8KLSAgICB7c2hsLCBzaGwsIHNobCwgc2hsLCBzaGws IHNobCwgc3IsIHNobH0KKyAgLyogICAgICAgICAgICAgICBrYyAgIHNzICAg c24gICBzZ2wgIHNsciAgY2xyICBzciAgc2hsICBqaXQgKi8KKy8qIG5vX2Vm ZmVjdCAqLyAgIHtrYywgIHNzLCAgc24sICBzZ2wsIHNsciwgY2xyLCBzciwg c2hsLCBqaXR9LAorLyogd3Bfc2lsZW50ICovICAge3NzLCAgc3MsICBzbiwg IHNzLCAgc3MsICBzcywgIHNyLCBzaGwsIGppdH0sCisvKiB3cF9ub2lzeSAq LyAgICB7c24sICBzbiwgIHNuLCAgc24sICBzbiwgIHNuLCAgc3IsIHNobCwg aml0fSwKKy8qIGJwX25vc3RvcCAqLyAgIHtzZ2wsIHNzLCAgc24sICBzZ2ws IHNsciwgc2xyLCBzciwgc2hsLCBqaXR9LAorLyogYnBfc2lsZW50ICovICAg e3NzLCAgc3MsICBzbiwgIHNzLCAgc3MsICBzcywgIHNyLCBzaGwsIGppdH0s CisvKiBicF9ub2lzeSAqLyAgICB7c24sICBzbiwgIHNuLCAgc24sICBzbiwg IHNuLCAgc3IsIHNobCwgaml0fSwKKy8qIGxvbmdfanVtcCAqLyAgIHtzbHIs IHNzLCAgc24sICBzbHIsIHNsciwgZXJyLCBzciwgc2hsLCBqaXR9LAorLyog bG9uZ19yZXN1bWUgKi8ge2Nsciwgc3MsICBzbiwgIGVyciwgZXJyLCBlcnIs IHNyLCBzaGwsIGppdH0sCisvKiBzdGVwX3Jlc3VtZSAqLyB7c3IsICBzciwg IHNyLCAgc3IsICBzciwgIHNyLCAgc3IsIHNyLCAgc3IgfSwKKy8qIHNobGli ICovICAgICAgIHtzaGwsIHNobCwgc2hsLCBzaGwsIHNobCwgc2hsLCBzciwg c2hsLCBzaGx9LAorLyogaml0X2V2ZW50ICovICAge2ppdCwgaml0LCBqaXQs IGppdCwgaml0LCBqaXQsIHNyLCBqaXQsIGppdH0KICAgfTsKIAogI3VuZGVm IGtjCkBAIC0zMzI0LDYgKzMzMjAsNyBAQCBicHN0YXRfd2hhdCAoYnBzdGF0 IGJzKQogI3VuZGVmIHNyCiAjdW5kZWYgdHMKICN1bmRlZiBzaGwKKyN1bmRl ZiBqaXQKICAgZW51bSBicHN0YXRfd2hhdF9tYWluX2FjdGlvbiBjdXJyZW50 X2FjdGlvbiA9IEJQU1RBVF9XSEFUX0tFRVBfQ0hFQ0tJTkc7CiAgIHN0cnVj dCBicHN0YXRfd2hhdCByZXR2YWw7CiAKQEAgLTMzOTQsNiArMzM5MSw5IEBA IGJwc3RhdF93aGF0IChicHN0YXQgYnMpCiAJY2FzZSBicF9zaGxpYl9ldmVu dDoKIAkgIGJzX2NsYXNzID0gc2hsaWJfZXZlbnQ7CiAJICBicmVhazsKKwlj YXNlIGJwX2ppdF9ldmVudDoKKwkgIGJzX2NsYXNzID0gaml0X2V2ZW50Owor CSAgYnJlYWs7CiAJY2FzZSBicF90aHJlYWRfZXZlbnQ6CiAJY2FzZSBicF9v dmVybGF5X2V2ZW50OgogCSAgYnNfY2xhc3MgPSBicF9ub3N0b3A7CkBAIC0z NTI0LDYgKzM1MjQsNyBAQCBwcmludF9vbmVfYnJlYWtwb2ludF9sb2NhdGlv biAoc3RydWN0IGJyCiAgICAge2JwX292ZXJsYXlfZXZlbnQsICJvdmVybGF5 IGV2ZW50cyJ9LAogICAgIHticF9jYXRjaHBvaW50LCAiY2F0Y2hwb2ludCJ9 LAogICAgIHticF90cmFjZXBvaW50LCAidHJhY2Vwb2ludCJ9LAorICAgIHti cF9qaXRfZXZlbnQsICJqaXQgZXZlbnRzIn0sCiAgIH07CiAgIAogICBzdGF0 aWMgY2hhciBicGVuYWJsZXNbXSA9ICJueW5ueSI7CkBAIC0zNjUxLDYgKzM2 NTIsNyBAQCBwcmludF9vbmVfYnJlYWtwb2ludF9sb2NhdGlvbiAoc3RydWN0 IGJyCiAgICAgICBjYXNlIGJwX3RocmVhZF9ldmVudDoKICAgICAgIGNhc2Ug YnBfb3ZlcmxheV9ldmVudDoKICAgICAgIGNhc2UgYnBfdHJhY2Vwb2ludDoK KyAgICAgIGNhc2UgYnBfaml0X2V2ZW50OgogCWlmIChvcHRzLmFkZHJlc3Nw cmludCkKIAkgIHsKIAkgICAgYW5ub3RhdGVfZmllbGQgKDQpOwpAQCAtNDI2 Niw2ICs0MjY4LDcgQEAgYWxsb2NhdGVfYnBfbG9jYXRpb24gKHN0cnVjdCBi cmVha3BvaW50IAogICAgIGNhc2UgYnBfc2hsaWJfZXZlbnQ6CiAgICAgY2Fz ZSBicF90aHJlYWRfZXZlbnQ6CiAgICAgY2FzZSBicF9vdmVybGF5X2V2ZW50 OgorICAgIGNhc2UgYnBfaml0X2V2ZW50OgogICAgICAgbG9jLT5sb2NfdHlw ZSA9IGJwX2xvY19zb2Z0d2FyZV9icmVha3BvaW50OwogICAgICAgYnJlYWs7 CiAgICAgY2FzZSBicF9oYXJkd2FyZV9icmVha3BvaW50OgpAQCAtNDUzMCw2 ICs0NTMzLDE2IEBAIHN0cnVjdCBsYW5nX2FuZF9yYWRpeAogICB9OwogCiAK K3N0cnVjdCBicmVha3BvaW50ICoKK2NyZWF0ZV9qaXRfZXZlbnRfYnJlYWtw b2ludCAoQ09SRV9BRERSIGFkZHJlc3MpCit7CisgIHN0cnVjdCBicmVha3Bv aW50ICpiOworCisgIGIgPSBjcmVhdGVfaW50ZXJuYWxfYnJlYWtwb2ludCAo YWRkcmVzcywgYnBfaml0X2V2ZW50KTsKKyAgdXBkYXRlX2dsb2JhbF9sb2Nh dGlvbl9saXN0X25vdGhyb3cgKDEpOworICByZXR1cm4gYjsKK30KKwogdm9p ZAogcmVtb3ZlX3NvbGliX2V2ZW50X2JyZWFrcG9pbnRzICh2b2lkKQogewpA QCAtNTE1NSw2ICs1MTY4LDcgQEAgbWVudGlvbiAoc3RydWN0IGJyZWFrcG9p bnQgKmIpCiAgICAgICBjYXNlIGJwX3NobGliX2V2ZW50OgogICAgICAgY2Fz ZSBicF90aHJlYWRfZXZlbnQ6CiAgICAgICBjYXNlIGJwX292ZXJsYXlfZXZl bnQ6CisgICAgICBjYXNlIGJwX2ppdF9ldmVudDoKIAlicmVhazsKICAgICAg IH0KIApAQCAtNzM5OCw2ICs3NDEyLDcgQEAgZGVsZXRlX2NvbW1hbmQgKGNo YXIgKmFyZywgaW50IGZyb21fdHR5KQogICAgICAgewogCWlmIChiLT50eXBl ICE9IGJwX2NhbGxfZHVtbXkgJiYKIAkgICAgYi0+dHlwZSAhPSBicF9zaGxp Yl9ldmVudCAmJgorCSAgICBiLT50eXBlICE9IGJwX2ppdF9ldmVudCAmJgog CSAgICBiLT50eXBlICE9IGJwX3RocmVhZF9ldmVudCAmJgogCSAgICBiLT50 eXBlICE9IGJwX292ZXJsYXlfZXZlbnQgJiYKIAkgICAgYi0+bnVtYmVyID49 IDApCkBAIC03NDE1LDYgKzc0MzAsNyBAQCBkZWxldGVfY29tbWFuZCAoY2hh ciAqYXJnLCBpbnQgZnJvbV90dHkpCiAJICB7CiAJICAgIGlmIChiLT50eXBl ICE9IGJwX2NhbGxfZHVtbXkgJiYKIAkJYi0+dHlwZSAhPSBicF9zaGxpYl9l dmVudCAmJgorCQliLT50eXBlICE9IGJwX2ppdF9ldmVudCAmJgogCQliLT50 eXBlICE9IGJwX3RocmVhZF9ldmVudCAmJgogCQliLT50eXBlICE9IGJwX292 ZXJsYXlfZXZlbnQgJiYKIAkJYi0+bnVtYmVyID49IDApCkBAIC03NzM2LDYg Kzc3NTIsNyBAQCBicmVha3BvaW50X3JlX3NldF9vbmUgKHZvaWQgKmJpbnQp CiAgICAgY2FzZSBicF9zdGVwX3Jlc3VtZToKICAgICBjYXNlIGJwX2xvbmdq bXA6CiAgICAgY2FzZSBicF9sb25nam1wX3Jlc3VtZToKKyAgICBjYXNlIGJw X2ppdF9ldmVudDoKICAgICAgIGJyZWFrOwogICAgIH0KIApJbmRleDogZ2Ri L2JyZWFrcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl OiAvY3ZzL3NyYy9zcmMvZ2RiL2JyZWFrcG9pbnQuaCx2CnJldHJpZXZpbmcg cmV2aXNpb24gMS45MgpkaWZmIC11IC1wIC11IC1yMS45MiBicmVha3BvaW50 LmgKLS0tIGdkYi9icmVha3BvaW50LmgJMjQgTWF5IDIwMDkgMTg6MDA6MDgg LTAwMDAJMS45MgorKysgZ2RiL2JyZWFrcG9pbnQuaAkyMiBKdWwgMjAwOSAy MjoyNjowOCAtMDAwMApAQCAtMTEzLDYgKzExMyw5IEBAIGVudW0gYnB0eXBl CiAgICAgYnBfY2F0Y2hwb2ludCwKIAogICAgIGJwX3RyYWNlcG9pbnQsCisK KyAgICAvKiBFdmVudCBmb3IgSklUIGNvbXBpbGVkIGNvZGUgZ2VuZXJhdGlv biBvciBkZWxldGlvbi4gICovCisgICAgYnBfaml0X2V2ZW50LAogICB9Owog CiAvKiBTdGF0ZXMgb2YgZW5hYmxlbWVudCBvZiBicmVha3BvaW50LiAqLwpA QCAtNTM1LDYgKzUzOCw5IEBAIGVudW0gYnBzdGF0X3doYXRfbWFpbl9hY3Rp b24KICAgICAgICBrZWVwIGNoZWNraW5nLiAgKi8KICAgICBCUFNUQVRfV0hB VF9DSEVDS19TSExJQlMsCiAKKyAgICAvKiBDaGVjayBmb3IgbmV3IEpJVGVk IGNvZGUuICAqLworICAgIEJQU1RBVF9XSEFUX0NIRUNLX0pJVCwKKwogICAg IC8qIFRoaXMgaXMganVzdCB1c2VkIHRvIGtlZXAgdHJhY2sgb2YgaG93IG1h bnkgZW51bXMgdGhlcmUgYXJlLiAgKi8KICAgICBCUFNUQVRfV0hBVF9MQVNU CiAgIH07CkBAIC04MjcsNiArODMzLDggQEAgZXh0ZXJuIHZvaWQgbWFya19i cmVha3BvaW50c19vdXQgKHZvaWQpOwogCiBleHRlcm4gdm9pZCBtYWtlX2Jy ZWFrcG9pbnRfcGVybWFuZW50IChzdHJ1Y3QgYnJlYWtwb2ludCAqKTsKIAor ZXh0ZXJuIHN0cnVjdCBicmVha3BvaW50ICpjcmVhdGVfaml0X2V2ZW50X2Jy ZWFrcG9pbnQgKENPUkVfQUREUik7CisKIGV4dGVybiBzdHJ1Y3QgYnJlYWtw b2ludCAqY3JlYXRlX3NvbGliX2V2ZW50X2JyZWFrcG9pbnQgKENPUkVfQURE Uik7CiAKIGV4dGVybiBzdHJ1Y3QgYnJlYWtwb2ludCAqY3JlYXRlX3RocmVh ZF9ldmVudF9icmVha3BvaW50IChDT1JFX0FERFIpOwpJbmRleDogZ2RiL2lu ZnJ1bi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv c3JjL3NyYy9nZGIvaW5mcnVuLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu Mzg1CmRpZmYgLXUgLXAgLXUgLXIxLjM4NSBpbmZydW4uYwotLS0gZ2RiL2lu ZnJ1bi5jCTcgSnVuIDIwMDkgMTY6NDY6NDggLTAwMDAJMS4zODUKKysrIGdk Yi9pbmZydW4uYwkyMiBKdWwgMjAwOSAyMjoyNjowOCAtMDAwMApAQCAtNDks NiArNDksNyBAQAogI2luY2x1ZGUgIm1pL21pLWNvbW1vbi5oIgogI2luY2x1 ZGUgImV2ZW50LXRvcC5oIgogI2luY2x1ZGUgInJlY29yZC5oIgorI2luY2x1 ZGUgImppdC5oIgogCiAvKiBQcm90b3R5cGVzIGZvciBsb2NhbCBmdW5jdGlv bnMgKi8KIApAQCAtMzQ2Miw2ICszNDYzLDIyIEBAIGluZnJ1bjogQlBTVEFU X1dIQVRfU0VUX0xPTkdKTVBfUkVTVU1FICgKIAl9CiAJYnJlYWs7CiAKKyAg ICAgIGNhc2UgQlBTVEFUX1dIQVRfQ0hFQ0tfSklUOgorICAgICAgICBpZiAo ZGVidWdfaW5mcnVuKQorICAgICAgICAgIGZwcmludGZfdW5maWx0ZXJlZCAo Z2RiX3N0ZGxvZywgImluZnJ1bjogQlBTVEFUX1dIQVRfQ0hFQ0tfSklUXG4i KTsKKworICAgICAgICAvKiBTd2l0Y2ggdGVybWluYWwgZm9yIGFueSBtZXNz YWdlcyBwcm9kdWNlZCBieSBicmVha3BvaW50X3JlX3NldC4gICovCisgICAg ICAgIHRhcmdldF90ZXJtaW5hbF9vdXJzX2Zvcl9vdXRwdXQgKCk7CisKKyAg ICAgICAgaml0X2V2ZW50X2hhbmRsZXIgKCk7CisKKyAgICAgICAgdGFyZ2V0 X3Rlcm1pbmFsX2luZmVyaW9yICgpOworCisgICAgICAgIC8qIFdlIHdhbnQg dG8gc3RlcCBvdmVyIHRoaXMgYnJlYWtwb2ludCwgdGhlbiBrZWVwIGdvaW5n LiAgKi8KKyAgICAgICAgZWNzLT5ldmVudF90aHJlYWQtPnN0ZXBwaW5nX292 ZXJfYnJlYWtwb2ludCA9IDE7CisKKyAgICAgICAgYnJlYWs7CisKICAgICAg IGNhc2UgQlBTVEFUX1dIQVRfTEFTVDoKIAkvKiBOb3QgYSByZWFsIGNvZGUs IGJ1dCBsaXN0ZWQgaGVyZSB0byBzaHV0IHVwIGdjYyAtV2FsbC4gICovCiAK SW5kZXg6IGdkYi9qaXQuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm aWxlOiBnZGIvaml0LmMKZGlmZiAtTiBnZGIvaml0LmMKLS0tIC9kZXYvbnVs bAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBnZGIvaml0LmMJMjIg SnVsIDIwMDkgMjI6MjY6MDggLTAwMDAKQEAgLTAsMCArMSwzMDAgQEAKKy8q IEhhbmRsZSBKSVQgY29kZSBnZW5lcmF0aW9uIGluIHRoZSBpbmZlcmlvciBm b3IgR0RCLCB0aGUgR05VIERlYnVnZ2VyLgorCisgICBDb3B5cmlnaHQgKEMp IDIwMDkKKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisg ICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHREIuCisKKyAgIFRoaXMgcHJvZ3Jh bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24g MyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55 IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAg YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK KyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMg cHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGlj ZW5zZXMvPi4gICovCisKKyNpbmNsdWRlICJkZWZzLmgiCisKKyNpbmNsdWRl ICJqaXQuaCIKKyNpbmNsdWRlICJicmVha3BvaW50LmgiCisjaW5jbHVkZSAi Z2RiY29yZS5oIgorI2luY2x1ZGUgIm9ic2VydmVyLmgiCisjaW5jbHVkZSAi b2JqZmlsZXMuaCIKKyNpbmNsdWRlICJzeW1maWxlLmgiCisjaW5jbHVkZSAi c3ltdGFiLmgiCisjaW5jbHVkZSAidGFyZ2V0LmgiCisKK3N0YXRpYyBjb25z dCBjaGFyICpjb25zdCBqaXRfYnJlYWtfbmFtZSA9ICJfX2ppdF9kZWJ1Z19y ZWdpc3Rlcl9jb2RlIjsKKworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGpp dF9kZXNjcmlwdG9yX25hbWUgPSAiX19qaXRfZGVidWdfZGVzY3JpcHRvciI7 CisKKy8qIFRoaXMgaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIEpJVCBkZXNjcmlw dG9yIGluIHRoZSBpbmZlcmlvci4gICovCisKK3N0YXRpYyBDT1JFX0FERFIg aml0X2Rlc2NyaXB0b3JfYWRkcjsKKworLyogVGhpcyBpcyBhIGxpbmtlZCBs aXN0IG1hcHBpbmcgY29kZSBlbnRyeSBhZGRyZXNzZXMgdG8gb2JqZmlsZXMu ICAqLworCitzdGF0aWMgc3RydWN0IGppdF9vYmpfbGluayAqaml0X29iamZp bGVzID0gTlVMTDsKKworLyogSGVscGVyIG1ldGhvZCBmb3IgcmVhZGluZyB0 aGUgZ2xvYmFsIEpJVCBkZXNjcmlwdG9yIGZyb20gcmVtb3RlIG1lbW9yeS4g ICovCisKK3N0YXRpYyBpbnQKK2ppdF9yZWFkX2Rlc2NyaXB0b3IgKHN0cnVj dCBqaXRfZGVzY3JpcHRvciAqZGVzY3JpcHRvcikKK3sKKyAgaW50IGVycjsK KyAgc3RydWN0IHR5cGUgKnB0cl90eXBlOworICBpbnQgcHRyX3NpemU7Cisg IGludCBkZXNjX3NpemU7CisgIGdkYl9ieXRlICpkZXNjX2J1ZjsKKworICAv KiBGaWd1cmUgb3V0IGhvdyBiaWcgdGhlIGRlc2NyaXB0b3IgaXMgb24gdGhl IHJlbW90ZSBhbmQgaG93IHRvIHJlYWQgaXQuICAqLworICBwdHJfdHlwZSA9 IGJ1aWx0aW5fdHlwZSAodGFyZ2V0X2dkYmFyY2gpLT5idWlsdGluX2RhdGFf cHRyOworICBwdHJfc2l6ZSA9IFRZUEVfTEVOR1RIIChwdHJfdHlwZSk7Cisg IGRlc2Nfc2l6ZSA9IDggKyAyICogcHRyX3NpemU7ICAvKiBUd28gMzItYml0 IGludHMgYW5kIHR3byBwb2ludGVycy4gICovCisgIGRlc2NfYnVmID0gYWxs b2NhIChkZXNjX3NpemUpOworCisgIC8qIFJlYWQgdGhlIGRlc2NyaXB0b3Iu ICAqLworICBlcnIgPSB0YXJnZXRfcmVhZF9tZW1vcnkgKGppdF9kZXNjcmlw dG9yX2FkZHIsIGRlc2NfYnVmLCBkZXNjX3NpemUpOworICBpZiAoZXJyKQor ICAgIHsKKyAgICAgIGVycm9yIChfKCJVbmFibGUgdG8gcmVhZCBKSVQgZGVz Y3JpcHRvciBmcm9tIHJlbW90ZSBtZW1vcnkhXG4iKSk7CisgICAgICByZXR1 cm4gZXJyOworICAgIH0KKworICAvKiBGaXggdGhlIGVuZGlhbm5lc3MgdG8g bWF0Y2ggdGhlIGhvc3QuICAqLworICBkZXNjcmlwdG9yLT52ZXJzaW9uID0g ZXh0cmFjdF91bnNpZ25lZF9pbnRlZ2VyICgmZGVzY19idWZbMF0sIDQpOwor ICBkZXNjcmlwdG9yLT5hY3Rpb25fZmxhZyA9IGV4dHJhY3RfdW5zaWduZWRf aW50ZWdlciAoJmRlc2NfYnVmWzRdLCA0KTsKKyAgZGVzY3JpcHRvci0+cmVs ZXZhbnRfZW50cnkgPSBleHRyYWN0X3R5cGVkX2FkZHJlc3MgKCZkZXNjX2J1 Zls4XSwgcHRyX3R5cGUpOworICBkZXNjcmlwdG9yLT5maXJzdF9lbnRyeSA9 IGV4dHJhY3RfdHlwZWRfYWRkcmVzcworICAgICAgKCZkZXNjX2J1Zls4ICsg cHRyX3NpemVdLCBwdHJfdHlwZSk7CisKKyAgcmV0dXJuIDA7Cit9CisKKy8q IEhlbHBlciBtZXRob2QgZm9yIHJlYWRpbmcgYSBKSVRlZCBjb2RlIGVudHJ5 IGZyb20gcmVtb3RlIG1lbW9yeS4gICovCisKK3N0YXRpYyBpbnQKK2ppdF9y ZWFkX2NvZGVfZW50cnkgKENPUkVfQUREUiBjb2RlX2FkZHIsIHN0cnVjdCBq aXRfY29kZV9lbnRyeSAqY29kZV9lbnRyeSkKK3sKKyAgaW50IGVycjsKKyAg c3RydWN0IHR5cGUgKnB0cl90eXBlOworICBpbnQgcHRyX3NpemU7CisgIGlu dCBlbnRyeV9zaXplOworICBnZGJfYnl0ZSAqZW50cnlfYnVmOworCisgIC8q IEZpZ3VyZSBvdXQgaG93IGJpZyB0aGUgZW50cnkgaXMgb24gdGhlIHJlbW90 ZSBhbmQgaG93IHRvIHJlYWQgaXQuICAqLworICBwdHJfdHlwZSA9IGJ1aWx0 aW5fdHlwZSAodGFyZ2V0X2dkYmFyY2gpLT5idWlsdGluX2RhdGFfcHRyOwor ICBwdHJfc2l6ZSA9IFRZUEVfTEVOR1RIIChwdHJfdHlwZSk7CisgIGVudHJ5 X3NpemUgPSAzICogcHRyX3NpemUgKyA4OyAgLyogVGhyZWUgcG9pbnRlcnMg YW5kIG9uZSA2NC1iaXQgaW50LiAgKi8KKyAgZW50cnlfYnVmID0gYWxsb2Nh IChlbnRyeV9zaXplKTsKKworICAvKiBSZWFkIHRoZSBlbnRyeS4gICovCisg IGVyciA9IHRhcmdldF9yZWFkX21lbW9yeSAoY29kZV9hZGRyLCBlbnRyeV9i dWYsIGVudHJ5X3NpemUpOworICBpZiAoZXJyKQorICAgIHsKKyAgICAgIGVy cm9yIChfKCJVbmFibGUgdG8gcmVhZCBKSVQgY29kZSBlbnRyeSBmcm9tIHJl bW90ZSBtZW1vcnkhXG4iKSk7CisgICAgICByZXR1cm4gZXJyOworICAgIH0K KworICAvKiBGaXggdGhlIGVuZGlhbm5lc3MgdG8gbWF0Y2ggdGhlIGhvc3Qu ICAqLworICBwdHJfdHlwZSA9IGJ1aWx0aW5fdHlwZSAodGFyZ2V0X2dkYmFy Y2gpLT5idWlsdGluX2RhdGFfcHRyOworICBjb2RlX2VudHJ5LT5uZXh0X2Vu dHJ5ID0gZXh0cmFjdF90eXBlZF9hZGRyZXNzICgmZW50cnlfYnVmWzBdLCBw dHJfdHlwZSk7CisgIGNvZGVfZW50cnktPnByZXZfZW50cnkgPSBleHRyYWN0 X3R5cGVkX2FkZHJlc3MKKyAgICAgICgmZW50cnlfYnVmW3B0cl9zaXplXSwg cHRyX3R5cGUpOworICBjb2RlX2VudHJ5LT5zeW1maWxlX2FkZHIgPSBleHRy YWN0X3R5cGVkX2FkZHJlc3MKKyAgICAgICgmZW50cnlfYnVmWzIgKiBwdHJf c2l6ZV0sIHB0cl90eXBlKTsKKyAgY29kZV9lbnRyeS0+c3ltZmlsZV9zaXpl ID0gZXh0cmFjdF91bnNpZ25lZF9pbnRlZ2VyCisgICAgICAoJmVudHJ5X2J1 ZlszICogcHRyX3NpemVdLCA4KTsKKworICByZXR1cm4gMDsKK30KKworLyog VGhpcyBmdW5jdGlvbiByZWdpc3RlcnMgY29kZSBhc3NvY2lhdGVkIHdpdGgg YSBKSVQgY29kZSBlbnRyeS4gIEl0IHVzZXMgdGhlCisgICBwb2ludGVyIGFu ZCBzaXplIHBhaXIgaW4gdGhlIGVudHJ5IHRvIHJlYWQgdGhlIHN5bWJvbCBm aWxlIGZyb20gdGhlIHJlbW90ZQorICAgYW5kIHRoZW4gY2FsbHMgc3ltYm9s X2ZpbGVfYWRkX2Zyb21fbG9jYWxfbWVtb3J5IHRvIGFkZCBpdCBhcyB0aG91 Z2ggaXQgd2VyZQorICAgYSBzeW1ib2wgZmlsZSBhZGRlZCBieSB0aGUgdXNl ci4gICovCisKK3N0YXRpYyB2b2lkCitqaXRfcmVnaXN0ZXJfY29kZSAoQ09S RV9BRERSIGVudHJ5X2FkZHIsIHN0cnVjdCBqaXRfY29kZV9lbnRyeSAqY29k ZV9lbnRyeSkKK3sKKyAgYmZkICp0ZW1wbDsKKyAgYmZkICpuYmZkOworICBi ZmRfYnl0ZSAqYnVmZmVyOworICBiZmRfc2l6ZV90eXBlIHNpemU7CisgIGlu dCBlcnI7CisgIHN0cnVjdCBzZWN0aW9uX2FkZHJfaW5mbyAqc2FpOworICBz dHJ1Y3Qgb2JqZmlsZSAqb2JqZmlsZTsKKyAgc3RydWN0IGppdF9vYmpfbGlu ayAqbGluazsKKworICAvKiBXZSBuZWVkIHNvbWUgcmVwcmVzZW50YXRpdmUg YmZkIHRvIGtub3cgdGhlIHRhcmdldCB3ZSBhcmUgbG9va2luZyBhdC4gICov CisgIHRlbXBsID0gc3ltYm9sX2ZpbGVfZ3Vlc3NfdGVtcGxhdGUgKCk7Cisg IGlmICh0ZW1wbCA9PSBOVUxMKQorICAgIGVycm9yIChfKCJcCitDYW5ub3Qg YWRkIHN5bWJvbCBmaWxlIGZvciBKSVRlZCBjb2RlIHdpdGhvdXQgYW4gb2Jq ZWN0IGZpbGUgdGVtcGxhdGUuIikpOworCisgIC8qIFJlYWQgdGhlIHN5bWZp bGUgZnJvbSByZW1vdGUgbWVtb3J5LiAgKi8KKyAgc2l6ZSA9IGNvZGVfZW50 cnktPnN5bWZpbGVfc2l6ZTsKKyAgYnVmZmVyID0geG1hbGxvYyAoc2l6ZSk7 CisgIGVyciA9IHRhcmdldF9yZWFkX21lbW9yeSAoY29kZV9lbnRyeS0+c3lt ZmlsZV9hZGRyLCBidWZmZXIsIHNpemUpOworICBpZiAoZXJyKQorICAgIHsK KyAgICAgIGZyZWUgKGJ1ZmZlcik7CisgICAgICBlcnJvciAoXygiVW5hYmxl IHRvIHJlYWQgSklUZWQgc3ltZmlsZSBmcm9tIHJlbW90ZSBtZW1vcnkuIikp OworICAgICAgcmV0dXJuOworICAgIH0KKworICAvKiBDcmVhdGUgYSBuZXcg QkZEIGZyb20gdGhlIGJ1ZmZlciBpbiBtZW1vcnkgYW5kIGFkZCBpdCBhcyBh IHN5bWJvbCBmaWxlLiAgKi8KKyAgb2JqZmlsZSA9IHN5bWJvbF9maWxlX2Fk ZF9mcm9tX2xvY2FsX21lbW9yeSAodGVtcGwsIGJ1ZmZlciwgc2l6ZSk7Cisg IGlmIChvYmpmaWxlID09IE5VTEwpCisgICAgZnJlZSAoYnVmZmVyKTsKKwor ICAvKiBSZW1lbWJlciBhIG1hcHBpbmcgZnJvbSBlbnRyeV9hZGRyIHRvIG9i amZpbGUuICAqLworICBsaW5rID0geG1hbGxvYyAoc2l6ZW9mIChzdHJ1Y3Qg aml0X29ial9saW5rKSk7CisgIGxpbmstPm5leHQgPSBqaXRfb2JqZmlsZXM7 CisgIGxpbmstPmVudHJ5X2FkZHIgPSBlbnRyeV9hZGRyOworICBsaW5rLT5v YmpmaWxlID0gb2JqZmlsZTsKKyAgaml0X29iamZpbGVzID0gbGluazsKK30K KworLyogVGhpcyBmdW5jdGlvbiB1bnJlZ2lzdGVycyBKSVRlZCBjb2RlIGFu ZCBmcmVlcyB0aGUgY29ycmVzcG9uZGluZyBvYmpmaWxlLiAgKi8KKworc3Rh dGljIHZvaWQKK2ppdF91bnJlZ2lzdGVyX2NvZGUgKHN0cnVjdCBqaXRfb2Jq X2xpbmsgKipsYXN0X3B0ciwgc3RydWN0IGppdF9vYmpfbGluayAqbGluaykK K3sKKyAgLyogQ3V0IHRoZSBsaW5rIGZyb20gdGhlIGNoYWluLCBhbmQgZnJl ZSBib3RoIHRoZSBsaW5rIGFuZCB0aGUgb2JqZmlsZS4gICovCisgICpsYXN0 X3B0ciA9IGxpbmstPm5leHQ7CisgIGZyZWVfb2JqZmlsZSAobGluay0+b2Jq ZmlsZSk7CisgIHhmcmVlIChsaW5rKTsKK30KKworLyogVGhpcyBmdW5jdGlv biByZWFkcyBhbnkgZXhpc3RpbmcgY29kZSBlbnRyaWVzIGluIHRoZSBsaW5r ZWQgbGlzdCBhbmQgaW5zZXJ0cworICAgdGhlIGJyZWFrcG9pbnQgc28gd2Ug Y2FuIGxpc3RlbiBmb3IgYW55IG1vcmUuICAqLworCitzdGF0aWMgdm9pZAor aml0X2luZmVyaW9yX2NyZWF0ZWRfaG9vayAoc3RydWN0IHRhcmdldF9vcHMg Km9iamZpbGUsIGludCBmcm9tX3R0eSkKK3sKKyAgc3RydWN0IG1pbmltYWxf c3ltYm9sICpyZWdfc3ltYm9sOworICBzdHJ1Y3QgbWluaW1hbF9zeW1ib2wg KmRlc2Nfc3ltYm9sOworICBDT1JFX0FERFIgcmVnX2FkZHI7CisgIHN0cnVj dCBqaXRfZGVzY3JpcHRvciBkZXNjcmlwdG9yOworICBzdHJ1Y3Qgaml0X2Nv ZGVfZW50cnkgY3VyX2VudHJ5OworICBDT1JFX0FERFIgY3VyX2VudHJ5X2Fk ZHI7CisgIGludCBlcnI7CisKKyAgLyogTG9va3VwIHRoZSByZWdpc3RyYXRp b24gc3ltYm9sLiAgSWYgaXQgaXMgbWlzc2luZywgdGhlbiB3ZSBhc3N1bWUg d2UgYXJlCisgICAgIG5vdCBhdHRhY2hlZCB0byBhIEpJVC4gICovCisgIHJl Z19zeW1ib2wgPSBsb29rdXBfbWluaW1hbF9zeW1ib2wgKGppdF9icmVha19u YW1lLCBOVUxMLCBOVUxMKTsKKyAgaWYgKHJlZ19zeW1ib2wgPT0gTlVMTCkK KyAgICByZXR1cm47CisgIHJlZ19hZGRyID0gU1lNQk9MX1ZBTFVFX0FERFJF U1MgKHJlZ19zeW1ib2wpOworICBpZiAocmVnX2FkZHIgPT0gKENPUkVfQURE UilOVUxMKQorICAgIHJldHVybjsKKworICAvKiBMb29rdXAgdGhlIGRlc2Ny aXB0b3Igc3ltYm9sIGFuZCBjYWNoZSB0aGUgYWRkci4gIElmIGl0IGlzIG1p c3NpbmcsIHdlCisgICAgIGFzc3VtZSB3ZSBhcmUgbm90IGF0dGFjaGVkIHRv IGEgSklUIGFuZCByZXR1cm4gZWFybHkuICAqLworICBkZXNjX3N5bWJvbCA9 IGxvb2t1cF9taW5pbWFsX3N5bWJvbCAoaml0X2Rlc2NyaXB0b3JfbmFtZSwg TlVMTCwgTlVMTCk7CisgIGlmIChkZXNjX3N5bWJvbCA9PSBOVUxMKQorICAg IHJldHVybjsKKyAgaml0X2Rlc2NyaXB0b3JfYWRkciA9IFNZTUJPTF9WQUxV RV9BRERSRVNTIChkZXNjX3N5bWJvbCk7CisgIGlmIChqaXRfZGVzY3JpcHRv cl9hZGRyID09IChDT1JFX0FERFIpTlVMTCkKKyAgICByZXR1cm47CisKKyAg LyogUmVhZCB0aGUgZGVzY3JpcHRvciBzbyB3ZSBjYW4gY2hlY2sgdGhlIHZl cnNpb24gbnVtYmVyIGFuZCBsb2FkIGFueSBhbHJlYWR5CisgICAgIEpJVGVk IGZ1bmN0aW9ucy4gICovCisgIGVyciA9IGppdF9yZWFkX2Rlc2NyaXB0b3Ig KCZkZXNjcmlwdG9yKTsKKyAgaWYgKGVycikgcmV0dXJuOworCisgIC8qIENo ZWNrIHRoYXQgdGhlIHZlcnNpb24gbnVtYmVyIGFncmVlcyB3aXRoIHRoYXQg d2Ugc3VwcG9ydC4gICovCisgIGlmIChkZXNjcmlwdG9yLnZlcnNpb24gIT0g MSkKKyAgICB7CisgICAgICBlcnJvciAoXygiVW5zdXBwb3J0ZWQgSklUIHBy b3RvY29sIHZlcnNpb24gaW4gZGVzY3JpcHRvciFcbiIpKTsKKyAgICAgIHJl dHVybjsKKyAgICB9CisKKyAgLyogUHV0IGEgYnJlYWtwb2ludCBpbiB0aGUg cmVnaXN0cmF0aW9uIHN5bWJvbC4gICovCisgIGNyZWF0ZV9qaXRfZXZlbnRf YnJlYWtwb2ludCAocmVnX2FkZHIpOworCisgIC8qIElmIHdlJ3ZlIGF0dGFj aGVkIHRvIGEgcnVubmluZyBwcm9ncmFtLCB3ZSBuZWVkIHRvIGNoZWNrIHRo ZSBkZXNjcmlwdG9yIHRvCisgICAgIHJlZ2lzdGVyIGFueSBmdW5jdGlvbnMg dGhhdCB3ZXJlIGFscmVhZHkgZ2VuZXJhdGVkLiAgKi8KKyAgZm9yIChjdXJf ZW50cnlfYWRkciA9IGRlc2NyaXB0b3IuZmlyc3RfZW50cnk7CisgICAgICAg Y3VyX2VudHJ5X2FkZHIgIT0gMDsKKyAgICAgICBjdXJfZW50cnlfYWRkciA9 IGN1cl9lbnRyeS5uZXh0X2VudHJ5KQorICAgIHsKKyAgICAgIGVyciA9IGpp dF9yZWFkX2NvZGVfZW50cnkgKGN1cl9lbnRyeV9hZGRyLCAmY3VyX2VudHJ5 KTsKKyAgICAgIGlmIChlcnIpIHJldHVybjsKKyAgICAgIGppdF9yZWdpc3Rl cl9jb2RlIChjdXJfZW50cnlfYWRkciwgJmN1cl9lbnRyeSk7CisgICAgfQor fQorCisvKiBUaGlzIGZ1bmN0aW9uIGNsZWFucyB1cCBhbnkgY29kZSBlbnRy aWVzIGxlZnQgb3ZlciB3aGVuIHRoZSBpbmZlcmlvciBleGl0cy4KKyAgIFdl IGdldCBsZWZ0IG92ZXIgY29kZSB3aGVuIHRoZSBpbmZlcmlvciBleGl0cyB3 aXRob3V0IHVucmVnaXN0ZXJpbmcgaXRzIGNvZGUsCisgICBmb3IgZXhhbXBs ZSB3aGVuIGl0IGNyYXNoZXMuICAqLworCitzdGF0aWMgdm9pZAoraml0X2lu ZmVyaW9yX2V4aXRfaG9vayAoaW50IHBpZCkKK3sKKyAgd2hpbGUgKGppdF9v YmpmaWxlcyAhPSBOVUxMKQorICAgIHsKKyAgICAgIGppdF91bnJlZ2lzdGVy X2NvZGUgKCZqaXRfb2JqZmlsZXMsIGppdF9vYmpmaWxlcyk7CisgICAgfQor fQorCit2b2lkCitqaXRfZXZlbnRfaGFuZGxlciAodm9pZCkKK3sKKyAgc3Ry dWN0IGppdF9kZXNjcmlwdG9yIGRlc2NyaXB0b3I7CisgIHN0cnVjdCBqaXRf Y29kZV9lbnRyeSBjb2RlX2VudHJ5OworICBpbnQgZXJyOworICBDT1JFX0FE RFIgZW50cnlfYWRkcjsKKyAgc3RydWN0IGppdF9vYmpfbGluayAqbGluazsK KyAgc3RydWN0IGppdF9vYmpfbGluayAqKmxhc3RfcHRyOworCisgIC8qIFJl YWQgdGhlIGRlc2NyaXB0b3IgZnJvbSByZW1vdGUgbWVtb3J5LiAgKi8KKyAg aml0X3JlYWRfZGVzY3JpcHRvciAoJmRlc2NyaXB0b3IpOworICBlbnRyeV9h ZGRyID0gZGVzY3JpcHRvci5yZWxldmFudF9lbnRyeTsKKworICAvKiBEbyB0 aGUgY29ycmVzcG9uZGluZyBhY3Rpb24uICovCisgIHN3aXRjaCAoZGVzY3Jp cHRvci5hY3Rpb25fZmxhZykKKyAgICB7CisgICAgY2FzZSBKSVRfTk9BQ1RJ T046CisgICAgICBicmVhazsKKyAgICBjYXNlIEpJVF9SRUdJU1RFUjoKKyAg ICAgIGVyciA9IGppdF9yZWFkX2NvZGVfZW50cnkgKGVudHJ5X2FkZHIsICZj b2RlX2VudHJ5KTsKKyAgICAgIGlmIChlcnIpIHJldHVybjsKKyAgICAgIGpp dF9yZWdpc3Rlcl9jb2RlIChlbnRyeV9hZGRyLCAmY29kZV9lbnRyeSk7Cisg ICAgICBicmVhazsKKyAgICBjYXNlIEpJVF9VTlJFR0lTVEVSOgorICAgICAg LyogTG9vayB1cCB0aGUgbGluayB3aXRoIHRoaXMgY29kZSBlbnRyeSBhZGRy ZXNzLiAgKi8KKyAgICAgIGZvciAobGFzdF9wdHIgPSAmaml0X29iamZpbGVz LCBsaW5rID0gKmxhc3RfcHRyOyBsaW5rICE9IE5VTEw7CisgICAgICAgICAg IGxhc3RfcHRyID0gJmxpbmstPm5leHQsIGxpbmsgPSAqbGFzdF9wdHIpCisg ICAgICAgIHsKKyAgICAgICAgICBpZiAobGluay0+ZW50cnlfYWRkciA9PSBl bnRyeV9hZGRyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBqaXRf dW5yZWdpc3Rlcl9jb2RlIChsYXN0X3B0ciwgbGluayk7CisgICAgICAgICAg ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg cHJpbnRmX3VuZmlsdGVyZWQgKCJVbmFibGUgdG8gZmluZCBKSVRlZCBjb2Rl IGVudHJ5IGF0IGFkZHJlc3M6ICVwXG4iLAorICAgICAgICAgICAgICAgICAg ICAgICAgICh2b2lkKillbnRyeV9hZGRyKTsKKyAgICAgIGJyZWFrOworICAg IGRlZmF1bHQ6CisgICAgICBlcnJvciAoXygiVW5rbm93biBhY3Rpb25fZmxh ZyB2YWx1ZSBpbiBKSVQgZGVzY3JpcHRvciFcbiIpKTsKKyAgICAgIGJyZWFr OworICAgIH0KK30KKworLyogUHJvdmlkZSBhIHByb3RvdHlwZSB0byBzaWxl bmNlIC1XbWlzc2luZy1wcm90b3R5cGVzLiAgKi8KKworZXh0ZXJuIHZvaWQg X2luaXRpYWxpemVfaml0ICh2b2lkKTsKKwordm9pZAorX2luaXRpYWxpemVf aml0ICh2b2lkKQoreworICBvYnNlcnZlcl9hdHRhY2hfaW5mZXJpb3JfY3Jl YXRlZCAoaml0X2luZmVyaW9yX2NyZWF0ZWRfaG9vayk7CisgIG9ic2VydmVy X2F0dGFjaF9pbmZlcmlvcl9leGl0IChqaXRfaW5mZXJpb3JfZXhpdF9ob29r KTsKK30KSW5kZXg6IGdkYi9qaXQuaAo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 ClJDUyBmaWxlOiBnZGIvaml0LmgKZGlmZiAtTiBnZGIvaml0LmgKLS0tIC9k ZXYvbnVsbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBnZGIvaml0 LmgJMjIgSnVsIDIwMDkgMjI6MjY6MDggLTAwMDAKQEAgLTAsMCArMSw4MSBA QAorLyogSklUIGRlY2xhcmF0aW9ucyBmb3IgR0RCLCB0aGUgR05VIERlYnVn Z2VyLgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDkKKyAgIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBv ZiBHREIuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IK KyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAg IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAg IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSBy ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2Vl IDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5k ZWYgSklUX0gKKyNkZWZpbmUgSklUX0gKKworLyogV2hlbiB0aGUgSklUIGJy ZWFrcG9pbnQgZmlyZXMsIHRoZSBpbmZlcmlvciB3YW50cyB1cyB0byB0YWtl IG9uZSBvZiB0aGVzZQorICAgYWN0aW9ucy4gICovCisKK3R5cGVkZWYgZW51 bQoreworICBKSVRfTk9BQ1RJT04gPSAwLAorICBKSVRfUkVHSVNURVIsCisg IEpJVF9VTlJFR0lTVEVSCit9IGppdF9hY3Rpb25zX3Q7CisKKy8qIFRoaXMg c3RydWN0IGRlc2NyaWJlcyBhIHNpbmdsZSBzeW1ib2wgZmlsZSBpbiBhIGxp bmtlZCBsaXN0IG9mIHN5bWJvbCBmaWxlcworICAgZGVzY3JpYmluZyBnZW5l cmF0ZWQgY29kZS4gIEFzIHRoZSBpbmZlcmlvciBnZW5lcmF0ZXMgY29kZSwg aXQgYWRkcyB0aGVzZQorICAgZW50cmllcyB0byB0aGUgbGlzdCwgYW5kIHdo ZW4gd2UgYXR0YWNoIHRvIHRoZSBpbmZlcmlvciwgd2UgcmVhZCB0aGVtIGFs bC4KKyAgIFRoZSBsaXN0IGlzIHNpbmdseSBsaW5rZWQuICBGb3IgdGhlIGZp cnN0IGVsZW1lbnQgcHJldl9lbnRyeSBzaG91bGQgYmUgTlVMTCwKKyAgIGFu ZCBmb3IgdGhlIGxhc3QgZWxlbWVudCBuZXh0X2VudHJ5IHNob3VsZCBiZSBO VUxMLiAgKi8KKworc3RydWN0IGppdF9jb2RlX2VudHJ5Cit7CisgIENPUkVf QUREUiBuZXh0X2VudHJ5OworICBDT1JFX0FERFIgcHJldl9lbnRyeTsKKyAg Q09SRV9BRERSIHN5bWZpbGVfYWRkcjsKKyAgdWludDY0X3Qgc3ltZmlsZV9z aXplOworfTsKKworLyogVGhpcyBpcyB0aGUgZ2xvYmFsIGRlc2NyaXB0b3Ig dGhhdCB0aGUgaW5mZXJpb3IgdXNlcyB0byBjb21tdW5pY2F0ZQorICAgaW5m b3JtYXRpb24gdG8gdGhlIGRlYnVnZ2VyLiAgVG8gYWxlcnQgdGhlIGRlYnVn Z2VyIHRvIHRha2UgYW4gYWN0aW9uLCB0aGUKKyAgIGluZmVyaW9yIHNldHMg dGhlIGFjdGlvbl9mbGFnIHRvIHRoZSBhcHByb3ByaWF0ZSBlbnVtIHZhbHVl LCB1cGRhdGVzCisgICByZWxldmFudF9lbnRyeSB0byBwb2ludCB0byB0aGUg cmVsZXZhbnQgY29kZSBlbnRyeSwgYW5kIGNhbGxzIHRoZSBmdW5jdGlvbiBh dAorICAgdGhlIHdlbGwta25vd24gc3ltYm9sIHdpdGggb3VyIGJyZWFrcG9p bnQuICBXZSB0aGVuIHJlYWQgdGhpcyBkZXNjcmlwdG9yIGZyb20KKyAgIGFu b3RoZXIgZ2xvYmFsIHdlbGwta25vd24gc3ltYm9sLiAgKi8KKworc3RydWN0 IGppdF9kZXNjcmlwdG9yCit7CisgIHVpbnQzMl90IHZlcnNpb247CisgIC8q IFRoaXMgc2hvdWxkIGJlIGppdF9hY3Rpb25zX3QsIGJ1dCB3ZSB3YW50IHRv IGJlIHNwZWNpZmljIGFib3V0IHRoZQorICAgICBiaXQtd2lkdGguICAqLwor ICB1aW50MzJfdCBhY3Rpb25fZmxhZzsKKyAgQ09SRV9BRERSIHJlbGV2YW50 X2VudHJ5OworICBDT1JFX0FERFIgZmlyc3RfZW50cnk7Cit9OworCisvKiBU aGlzIHN0cnVjdCBpcyB1c2VkIHRvIGZvcm0gYSBsaW5rZWQgbGlzdCBtYXBw aW5nIHRoZSBhZGRyZXNzIG9mIHRoZSBKSVQgY29kZQorICAgZW50cnkgaW4g dGhlIGluZmVyaW9yJ3MgYWRkcmVzcyBzcGFjZSB0byB0aGUgY29ycmVzcG9u ZGluZyBvYmplY3QgZmlsZSBpbgorICAgR0RCLiAgVGhlc2UgYXJlIHVzZWQg dG8gdW5yZWdpc3RlciBvYmpmaWxlcyBmb3IgY29kZSB0aGF0IGhhcyBiZWVu IGZyZWVkLiAgKi8KKworc3RydWN0IGppdF9vYmpfbGluaworeworICBzdHJ1 Y3Qgaml0X29ial9saW5rICpuZXh0OworICBDT1JFX0FERFIgZW50cnlfYWRk cjsKKyAgc3RydWN0IG9iamZpbGUgKm9iamZpbGU7Cit9OworCisvKiBUaGlz IGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBoYW5kbGVfaW5mZXJpb3JfZXZlbnQg d2hlbiBpdCBkZWNpZGVzIHRoYXQgdGhlIEpJVAorICAgZXZlbnQgYnJlYWtw b2ludCBoYXMgZmlyZWQuICAqLworCitleHRlcm4gdm9pZCBqaXRfZXZlbnRf aGFuZGxlciAodm9pZCk7CisKKyNlbmRpZiAvKiBKSVRfSCAqLwpJbmRleDog Z2RiL29iamZpbGVzLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls ZTogL2N2cy9zcmMvc3JjL2dkYi9vYmpmaWxlcy5jLHYKcmV0cmlldmluZyBy ZXZpc2lvbiAxLjgzCmRpZmYgLXUgLXAgLXUgLXIxLjgzIG9iamZpbGVzLmMK LS0tIGdkYi9vYmpmaWxlcy5jCTE0IE1heSAyMDA5IDIzOjMzOjA4IC0wMDAw CTEuODMKKysrIGdkYi9vYmpmaWxlcy5jCTIyIEp1bCAyMDA5IDIyOjI2OjA4 IC0wMDAwCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlICJkZWZzLmgi CiAjaW5jbHVkZSAiYmZkLmgiCQkvKiBCaW5hcnkgRmlsZSBEZXNjcmlwdGlv biAqLworI2luY2x1ZGUgImxpYmJmZC5oIgogI2luY2x1ZGUgInN5bXRhYi5o IgogI2luY2x1ZGUgInN5bWZpbGUuaCIKICNpbmNsdWRlICJvYmpmaWxlcy5o IgpAQCAtNDMwLDkgKzQzMSwxOSBAQCBmcmVlX29iamZpbGUgKHN0cnVjdCBv YmpmaWxlICpvYmpmaWxlKQogICBpZiAob2JqZmlsZS0+b2JmZCAhPSBOVUxM ICYmICEob2JqZmlsZS0+ZmxhZ3MgJiBPQkpGX0tFRVBCRkQpKQogICAgIHsK ICAgICAgIGNoYXIgKm5hbWUgPSBiZmRfZ2V0X2ZpbGVuYW1lIChvYmpmaWxl LT5vYmZkKTsKKyAgICAgIHN0cnVjdCBiZmRfaW5fbWVtb3J5ICpiaW0gPSBO VUxMOworICAgICAgLyogSGFjayB0byB3b3JrIGFyb3VuZCB0aGUgZmFjdCB0 aGF0IEJGRCBkb2VzIG5vdCB0YWtlIG93bmVyc2hpcCBvZiB0aGUKKyAgICAg ICAgIG1lbW9yeSBmb3IgZmlsZXMgYWxsb2NhdGVkIGluIG1lbW9yeS4gICov CisgICAgICBpZiAob2JqZmlsZS0+b2JmZC0+ZmxhZ3MgJiBCRkRfSU5fTUVN T1JZKQorICAgICAgICBiaW0gPSAoc3RydWN0IGJmZF9pbl9tZW1vcnkgKikg b2JqZmlsZS0+b2JmZC0+aW9zdHJlYW07CiAgICAgICBpZiAoIWJmZF9jbG9z ZSAob2JqZmlsZS0+b2JmZCkpCiAJd2FybmluZyAoXygiY2Fubm90IGNsb3Nl IFwiJXNcIjogJXMiKSwKIAkJIG5hbWUsIGJmZF9lcnJtc2cgKGJmZF9nZXRf ZXJyb3IgKCkpKTsKKyAgICAgIGlmIChiaW0gIT0gTlVMTCkKKyAgICAgICAg eworICAgICAgICAgIHhmcmVlIChiaW0tPmJ1ZmZlcik7CisgICAgICAgICAg eGZyZWUgKGJpbSk7CisgICAgICAgIH0KICAgICAgIHhmcmVlIChuYW1lKTsK ICAgICB9CiAKSW5kZXg6IGdkYi9zeW1maWxlLW1lbS5jCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvc3ltZmls ZS1tZW0uYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNwpkaWZmIC11IC1w IC11IC1yMS4xNyBzeW1maWxlLW1lbS5jCi0tLSBnZGIvc3ltZmlsZS1tZW0u YwkyMSBGZWIgMjAwOSAxNjoxNDo0OSAtMDAwMAkxLjE3CisrKyBnZGIvc3lt ZmlsZS1tZW0uYwkyMiBKdWwgMjAwOSAyMjoyNjowOCAtMDAwMApAQCAtNTQs MzcgKzU0LDIzIEBACiAjaW5jbHVkZSAib2JzZXJ2ZXIuaCIKICNpbmNsdWRl ICJhdXh2LmgiCiAjaW5jbHVkZSAiZWxmL2NvbW1vbi5oIgorI2luY2x1ZGUg ImJmZC5oIgorI2luY2x1ZGUgImxpYmJmZC5oIgorI2luY2x1ZGUgPHRpbWUu aD4KIAogCi0vKiBSZWFkIGluZmVyaW9yIG1lbW9yeSBhdCBBRERSIHRvIGZp bmQgdGhlIGhlYWRlciBvZiBhIGxvYWRlZCBvYmplY3QgZmlsZQotICAgYW5k IHJlYWQgaXRzIGluLWNvcmUgc3ltYm9scyBvdXQgb2YgaW5mZXJpb3IgbWVt b3J5LiAgVEVNUEwgaXMgYSBiZmQKLSAgIHJlcHJlc2VudGluZyB0aGUgdGFy Z2V0J3MgZm9ybWF0LiAgTkFNRSBpcyB0aGUgbmFtZSB0byB1c2UgZm9yIHRo aXMKLSAgIHN5bWJvbCBmaWxlIGluIG1lc3NhZ2VzOyBpdCBjYW4gYmUgTlVM TCBvciBhIG1hbGxvYy1hbGxvY2F0ZWQgc3RyaW5nCi0gICB3aGljaCB3aWxs IGJlIGF0dGFjaGVkIHRvIHRoZSBCRkQuICAqLworLyogQ29tbW9uIGNvZGUg Zm9yIHN5bWJvbF9maWxlX2FkZF9mcm9tX21lbW9yeSBhbmQKKyAgIHN5bWJv bF9maWxlX2FkZF9mcm9tX2xvY2FsX21lbW9yeS4gICovCisKIHN0YXRpYyBz dHJ1Y3Qgb2JqZmlsZSAqCi1zeW1ib2xfZmlsZV9hZGRfZnJvbV9tZW1vcnkg KHN0cnVjdCBiZmQgKnRlbXBsLCBDT1JFX0FERFIgYWRkciwgY2hhciAqbmFt ZSwKLQkJCSAgICAgaW50IGZyb21fdHR5KQorc3ltYm9sX2ZpbGVfYWRkX2Zy b21fbWVtb3J5X2NvbW1vbiAoc3RydWN0IGJmZCAqbmJmZCwgYmZkX3ZtYSBs b2FkYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCBmcm9tX3R0eSkKIHsKICAgc3RydWN0IG9iamZpbGUgKm9iamY7Ci0g IHN0cnVjdCBiZmQgKm5iZmQ7CiAgIHN0cnVjdCBiZmRfc2VjdGlvbiAqc2Vj OwotICBiZmRfdm1hIGxvYWRiYXNlOwogICBzdHJ1Y3Qgc2VjdGlvbl9hZGRy X2luZm8gKnNhaTsKICAgdW5zaWduZWQgaW50IGk7CiAKLSAgaWYgKGJmZF9n ZXRfZmxhdm91ciAodGVtcGwpICE9IGJmZF90YXJnZXRfZWxmX2ZsYXZvdXIp Ci0gICAgZXJyb3IgKF8oImFkZC1zeW1ib2wtZmlsZS1mcm9tLW1lbW9yeSBu b3Qgc3VwcG9ydGVkIGZvciB0aGlzIHRhcmdldCIpKTsKLQotICBuYmZkID0g YmZkX2VsZl9iZmRfZnJvbV9yZW1vdGVfbWVtb3J5ICh0ZW1wbCwgYWRkciwg JmxvYWRiYXNlLAotCQkJCQkgdGFyZ2V0X3JlYWRfbWVtb3J5KTsKLSAgaWYg KG5iZmQgPT0gTlVMTCkKLSAgICBlcnJvciAoXygiRmFpbGVkIHRvIHJlYWQg YSB2YWxpZCBvYmplY3QgZmlsZSBpbWFnZSBmcm9tIG1lbW9yeS4iKSk7Ci0K LSAgaWYgKG5hbWUgPT0gTlVMTCkKLSAgICBuYmZkLT5maWxlbmFtZSA9IHhz dHJkdXAgKCJzaGFyZWQgb2JqZWN0IHJlYWQgZnJvbSB0YXJnZXQgbWVtb3J5 Iik7Ci0gIGVsc2UKLSAgICBuYmZkLT5maWxlbmFtZSA9IG5hbWU7Ci0KICAg aWYgKCFiZmRfY2hlY2tfZm9ybWF0IChuYmZkLCBiZmRfb2JqZWN0KSkKICAg ICB7CiAgICAgICAvKiBGSVhNRTogc2hvdWxkIGJlIGNoZWNraW5nIGZvciBl cnJvcnMgZnJvbSBiZmRfY2xvc2UgKGZvciBvbmUgdGhpbmcsCkBAIC0xMTYs NiArMTAyLDEyMSBAQCBzeW1ib2xfZmlsZV9hZGRfZnJvbV9tZW1vcnkgKHN0 cnVjdCBiZmQgCiAgIHJldHVybiBvYmpmOwogfQogCisvKiBSZWFkIGluZmVy aW9yIG1lbW9yeSBhdCBBRERSIHRvIGZpbmQgdGhlIGhlYWRlciBvZiBhIGxv YWRlZCBvYmplY3QgZmlsZQorICAgYW5kIHJlYWQgaXRzIGluLWNvcmUgc3lt Ym9scyBvdXQgb2YgaW5mZXJpb3IgbWVtb3J5LiAgVEVNUEwgaXMgYSBiZmQK KyAgIHJlcHJlc2VudGluZyB0aGUgdGFyZ2V0J3MgZm9ybWF0LiAgTkFNRSBp cyB0aGUgbmFtZSB0byB1c2UgZm9yIHRoaXMKKyAgIHN5bWJvbCBmaWxlIGlu IG1lc3NhZ2VzOyBpdCBjYW4gYmUgTlVMTCBvciBhIG1hbGxvYy1hbGxvY2F0 ZWQgc3RyaW5nCisgICB3aGljaCB3aWxsIGJlIGF0dGFjaGVkIHRvIHRoZSBC RkQuICAqLworCitzdHJ1Y3Qgb2JqZmlsZSAqCitzeW1ib2xfZmlsZV9hZGRf ZnJvbV9tZW1vcnkgKHN0cnVjdCBiZmQgKnRlbXBsLCBDT1JFX0FERFIgYWRk ciwgY2hhciAqbmFtZSwKKwkJCSAgICAgaW50IGZyb21fdHR5KQoreworICBz dHJ1Y3QgYmZkICpuYmZkOworICBiZmRfdm1hIGxvYWRiYXNlOworCisgIGlm IChiZmRfZ2V0X2ZsYXZvdXIgKHRlbXBsKSAhPSBiZmRfdGFyZ2V0X2VsZl9m bGF2b3VyKQorICAgIGVycm9yIChfKCJhZGQtc3ltYm9sLWZpbGUtZnJvbS1t ZW1vcnkgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyB0YXJnZXQiKSk7CisKKyAg bmJmZCA9IGJmZF9lbGZfYmZkX2Zyb21fcmVtb3RlX21lbW9yeSAodGVtcGws IGFkZHIsICZsb2FkYmFzZSwKKwkJCQkJIHRhcmdldF9yZWFkX21lbW9yeSk7 CisgIGlmIChuYmZkID09IE5VTEwpCisgICAgZXJyb3IgKF8oIkZhaWxlZCB0 byByZWFkIGEgdmFsaWQgb2JqZWN0IGZpbGUgaW1hZ2UgZnJvbSBtZW1vcnku IikpOworCisgIGlmIChuYW1lID09IE5VTEwpCisgICAgbmJmZC0+ZmlsZW5h bWUgPSB4c3RyZHVwICgic2hhcmVkIG9iamVjdCByZWFkIGZyb20gdGFyZ2V0 IG1lbW9yeSIpOworICBlbHNlCisgICAgbmJmZC0+ZmlsZW5hbWUgPSBuYW1l OworCisgIHJldHVybiBzeW1ib2xfZmlsZV9hZGRfZnJvbV9tZW1vcnlfY29t bW9uIChuYmZkLCBsb2FkYmFzZSwgZnJvbV90dHkpOworfQorCisvKiBDcmVh dGUgYSBuZXcgQkZEIGZvciBhIGZpbGUgdGhhdCBpcyBhbHJlYWR5IGxvYWRl ZCBpbnRvIG1lbW9yeS4gIFRoaXMgZG9lcworICAgbm90IHRha2Ugb3duZXJz aGlwIG9mIGJ1ZmZlciBvciBmaWxlbmFtZSwgYW5kIHRoZSBjYWxsZXIgbXVz dCBmcmVlIHRoZW0uCisgICBUaGlzIGNvZGUgaXMgYmFzZWQgb24gYmZkX2Zy b21fcmVtb3RlX21lbW9yeSBpbiBiZmQvZWxmY29kZS5oLCBhbmQgc2hvdWxk CisgICBwcm9iYWJseSBsaXZlIGluc2lkZSBvZiB0aGUgYmZkIGxpYnJhcnku ICAqLworCitzdGF0aWMgYmZkICoKK2JmZF9vcGVuX2Zyb21fbWVtb3J5IChz dHJ1Y3QgYmZkICp0ZW1wbCwgYmZkX2J5dGUgKmJ1ZmZlciwKKyAgICAgICAg ICAgICAgICAgICAgICBiZmRfc2l6ZV90eXBlIHNpemUsIGNvbnN0IGNoYXIg KmZpbGVuYW1lKQoreworICBiZmQgKm5iZmQ7CisgIHN0cnVjdCBiZmRfaW5f bWVtb3J5ICpiaW07CisKKyAgYmltID0gYmZkX21hbGxvYyAoc2l6ZW9mIChz dHJ1Y3QgYmZkX2luX21lbW9yeSkpOworICBpZiAoYmltID09IE5VTEwpCisg ICAgcmV0dXJuIE5VTEw7CisgIGJpbS0+YnVmZmVyID0gYnVmZmVyOworICBi aW0tPnNpemUgPSBzaXplOworCisgIG5iZmQgPSBfYmZkX25ld19iZmQgKCk7 CisgIGlmIChuYmZkID09IE5VTEwpCisgICAgeworICAgICAgZnJlZSAoYmlt KTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgbmJmZC0+ZmlsZW5h bWUgPSBmaWxlbmFtZTsKKyAgbmJmZC0+eHZlYyA9IHRlbXBsLT54dmVjOwor ICBuYmZkLT5pb3N0cmVhbSA9IGJpbTsKKyAgbmJmZC0+ZmxhZ3MgPSBCRkRf SU5fTUVNT1JZOworICBuYmZkLT5kaXJlY3Rpb24gPSByZWFkX2RpcmVjdGlv bjsKKyAgbmJmZC0+bXRpbWUgPSB0aW1lIChOVUxMKTsKKyAgbmJmZC0+bXRp bWVfc2V0ID0gVFJVRTsKKworICByZXR1cm4gbmJmZDsKK30KKworLyogQWRk IGEgc3ltYm9sIGZpbGUgZnJvbSBsb2NhbCBtZW1vcnkuICBUaGlzIGRpZmZl cnMgZnJvbQorICAgc3ltYm9sX2ZpbGVfYWRkX2Zyb21fbWVtb3J5IGluIHRo YXQgaXQgYXNzdW1lcyB0aGF0IHdlIGhhdmUgdGhlIGVudGlyZQorICAgc3lt Ym9sIGZpbGUgbGFpZCBvdXQgaW4gbWVtb3J5IGFuZCB3ZSBkb24ndCBuZWVk IHRvIHVzZQorICAgYmZkX2VsZl9iZmRfZnJvbV9yZW1vdGVfbWVtb3J5IHRv IHJlY29uc3RydWN0IHRoZSBFTEYgZnJvbSB0aGUgcHJvZ3JhbQorICAgaGVh ZGVycy4gKi8KKworc3RydWN0IG9iamZpbGUgKgorc3ltYm9sX2ZpbGVfYWRk X2Zyb21fbG9jYWxfbWVtb3J5IChzdHJ1Y3QgYmZkICp0ZW1wbCwgYmZkX2J5 dGUgKmJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYmZkX3NpemVfdHlwZSBzaXplKQoreworICBiZmQgKm5iZmQ7CisgIGlu dCBlcnI7CisgIHN0cnVjdCBzZWN0aW9uX2FkZHJfaW5mbyAqc2FpOworICBi ZmRfdm1hIGxvYWRiYXNlOworICBjb25zdCBjaGFyICpmaWxlbmFtZTsKKwor ICAvKiBUaGUgZmlsZW5hbWUgbXVzdCBiZSBzdHJkdXAnZCBvciBHREIgd2ls bCBjcmFzaCB3aGVuIGZyZWVpbmcgdGhlIG9iamVjdAorICAgICBmaWxlLiAg Ki8KKyAgZmlsZW5hbWUgPSB4c3RyZHVwICgiPGluLW1lbW9yeT4iKTsKKwor ICAvKiBDcmVhdGUgYSBuZXcgQkZEIGZyb20gdGhlIGJ1ZmZlciBpbiBtZW1v cnkgYW5kIGFkZCBpdCBhcyBhIHN5bWJvbCBmaWxlLiAgKi8KKyAgbmJmZCA9 IGJmZF9vcGVuX2Zyb21fbWVtb3J5ICh0ZW1wbCwgYnVmZmVyLCBzaXplLCBm aWxlbmFtZSk7CisgIGlmIChuYmZkID09IE5VTEwpCisgICAgeworICAgICAg ZXJyb3IgKF8oIlVuYWJsZSB0byBjcmVhdGUgQkZEIGZyb20gbG9jYWwgbWVt b3J5OiAlcyIpLAorICAgICAgICAgICAgIGJmZF9lcnJtc2cgKGJmZF9nZXRf ZXJyb3IgKCkpKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAv KiBXZSBzZXQgbG9hZGJhc2UgdG8gMCBhbmQgYXNzdW1lIHRoYXQgdGhlIHN5 bWJvbCBmaWxlIHdlJ3JlIGxvYWRpbmcgaGFzIHRoZQorICAgICBhYnNvbHV0 ZSBhZGRyZXNzZXMgc2V0IGluIHRoZSBFTEYuICAqLworICBsb2FkYmFzZSA9 IDA7CisgIHJldHVybiBzeW1ib2xfZmlsZV9hZGRfZnJvbV9tZW1vcnlfY29t bW9uIChuYmZkLCBsb2FkYmFzZSwgMCk7Cit9CisKKy8qIFVzZSB0aGUgQkZE IG9mIHRoZSBtYWluIGV4ZWN1dGFibGUgdG8gZ3Vlc3Mgd2hhdCBraW5kIG9m IG9iamVjdCBmaWxlIHdlIHdhbnQKKyAgIHRvIGFkZC4gIFRoaXMgaXMgdXNl ZCBmb3IgYWRkaW5nIHN5bWJvbCBmaWxlcyBmcm9tIG1lbW9yeSwgd2hlcmUg d2UgZG9uJ3QKKyAgIGtub3cgdGhlIGZvcm1hdCBvZiB0aGUgZmlsZS4gICov CisKK3N0cnVjdCBiZmQgKgorc3ltYm9sX2ZpbGVfZ3Vlc3NfdGVtcGxhdGUg KHZvaWQpCit7CisgIHN0cnVjdCBiZmQgKnRlbXBsOworCisgIGlmIChzeW1m aWxlX29iamZpbGUgIT0gTlVMTCkKKyAgICB0ZW1wbCA9IHN5bWZpbGVfb2Jq ZmlsZS0+b2JmZDsKKyAgZWxzZQorICAgIHRlbXBsID0gZXhlY19iZmQ7CisK KyAgcmV0dXJuIHRlbXBsOworfQogCiBzdGF0aWMgdm9pZAogYWRkX3N5bWJv bF9maWxlX2Zyb21fbWVtb3J5X2NvbW1hbmQgKGNoYXIgKmFyZ3MsIGludCBm cm9tX3R0eSkKQEAgLTEyOSwxMCArMjMwLDcgQEAgYWRkX3N5bWJvbF9maWxl X2Zyb21fbWVtb3J5X2NvbW1hbmQgKGNoYQogICBhZGRyID0gcGFyc2VfYW5k X2V2YWxfYWRkcmVzcyAoYXJncyk7CiAKICAgLyogV2UgbmVlZCBzb21lIHJl cHJlc2VudGF0aXZlIGJmZCB0byBrbm93IHRoZSB0YXJnZXQgd2UgYXJlIGxv b2tpbmcgYXQuICAqLwotICBpZiAoc3ltZmlsZV9vYmpmaWxlICE9IE5VTEwp Ci0gICAgdGVtcGwgPSBzeW1maWxlX29iamZpbGUtPm9iZmQ7Ci0gIGVsc2UK LSAgICB0ZW1wbCA9IGV4ZWNfYmZkOworICB0ZW1wbCA9IHN5bWJvbF9maWxl X2d1ZXNzX3RlbXBsYXRlICgpOwogICBpZiAodGVtcGwgPT0gTlVMTCkKICAg ICBlcnJvciAoXygiXAogTXVzdCB1c2Ugc3ltYm9sLWZpbGUgb3IgZXhlYy1m aWxlIGJlZm9yZSBhZGQtc3ltYm9sLWZpbGUtZnJvbS1tZW1vcnkuIikpOwpJ bmRleDogZ2RiL3N5bWZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD UyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL3N5bWZpbGUuaCx2CnJldHJpZXZp bmcgcmV2aXNpb24gMS41MApkaWZmIC11IC1wIC11IC1yMS41MCBzeW1maWxl LmgKLS0tIGdkYi9zeW1maWxlLmgJMjIgTWF5IDIwMDkgMjM6NDk6MTQgLTAw MDAJMS41MAorKysgZ2RiL3N5bWZpbGUuaAkyMiBKdWwgMjAwOSAyMjoyNjow OCAtMDAwMApAQCAtMzkyLDQgKzM5MiwxNyBAQCBleHRlcm4gdm9pZCBlbGZt ZGVidWdfYnVpbGRfcHN5bXRhYnMgKHN0CiAJCQkJICAgICAgY29uc3Qgc3Ry dWN0IGVjb2ZmX2RlYnVnX3N3YXAgKiwKIAkJCQkgICAgICBhc2VjdGlvbiAq KTsKIAorLyogRnJvbSBzeW1maWxlLW1lbS5jICovCisKK2V4dGVybiBzdHJ1 Y3QgYmZkICpzeW1ib2xfZmlsZV9ndWVzc190ZW1wbGF0ZSAodm9pZCk7CisK K2V4dGVybiBzdHJ1Y3Qgb2JqZmlsZSAqc3ltYm9sX2ZpbGVfYWRkX2Zyb21f bWVtb3J5IChzdHJ1Y3QgYmZkICp0ZW1wbCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JFX0FERFIg YWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmcm9tX3R0 eSk7CisKK2V4dGVybiBzdHJ1Y3Qgb2JqZmlsZSAqc3ltYm9sX2ZpbGVfYWRk X2Zyb21fbG9jYWxfbWVtb3J5IChzdHJ1Y3QgYmZkICp0ZW1wbCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBiZmRfYnl0ZSAqYnVmZmVyLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJmZF9z aXplX3R5cGUgc2l6ZSk7CisKICNlbmRpZiAvKiAhZGVmaW5lZChTWU1GSUxF X0gpICovCg== --001485f33676c26bda046f538d12--