From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 2187 invoked by alias); 20 Aug 2009 22:34:05 -0000 Received: (qmail 2173 invoked by uid 22791); 20 Aug 2009 22:34:01 -0000 X-SWARE-Spam-Status: No, hits=-1.8 required=5.0 tests=AWL,BAYES_00,SARE_MSGID_LONG40,SPF_PASS X-Spam-Check-By: sourceware.org Received: from smtp-out.google.com (HELO smtp-out.google.com) (216.239.33.17) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 20 Aug 2009 22:33:52 +0000 Received: from spaceape7.eur.corp.google.com (spaceape7.eur.corp.google.com [172.28.16.141]) by smtp-out.google.com with ESMTP id n7KMXm8o018677 for ; Thu, 20 Aug 2009 23:33:48 +0100 Received: from gxk9 (gxk9.prod.google.com [10.202.11.9]) by spaceape7.eur.corp.google.com with ESMTP id n7KMXTqi009885 for ; Thu, 20 Aug 2009 15:33:46 -0700 Received: by gxk9 with SMTP id 9so334887gxk.13 for ; Thu, 20 Aug 2009 15:33:45 -0700 (PDT) MIME-Version: 1.0 Received: by 10.150.239.19 with SMTP id m19mr738408ybh.247.1250807625117; Thu, 20 Aug 2009 15:33:45 -0700 (PDT) In-Reply-To: <7e6c8d660907071424j7e96ffb3r5b129ba97040d7e1@mail.gmail.com> References: <7e6c8d660907071424j7e96ffb3r5b129ba97040d7e1@mail.gmail.com> Date: Thu, 20 Aug 2009 22:51:00 -0000 Message-ID: Subject: Re: [RFA] Rewrite data cache to use splay tree From: Doug Evans To: Jacob Potter Cc: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=000e0cd290802d704404719a583a X-System-Of-Record: true X-IsSubscribed: yes 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-08/txt/msg00331.txt.bz2 --000e0cd290802d704404719a583a Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 3651 On Tue, Jul 7, 2009 at 2:24 PM, Jacob Potter wrote: > Here's the first part of the dcache rewrite and stack caching changes > I've been working on. This patch re-implements the cache using a splay > tree, along with a linked list for an oldest-first replacement policy. > It also makes the cache write-through, rather than the old > partially-implemented writeback functionality. > > I couldn't find a good place to store separate cache structures for > different inferiors; I think the answer is to just clear the cache > when current_target is changed, which I'll do in the second patch. > > - Jacob > > 2009-07-07 =A0Jacob Potter =A0 > > =A0 =A0 =A0 =A0* dcache.c (ENTRY_INVALID, ENTRY_VALID, ENTRY_DIRTY): Dele= te. > =A0 =A0 =A0 =A0(state_chars): Delete. > =A0 =A0 =A0 =A0(struct dcache_block): Clean up; remove state and anydirty= fields. > =A0 =A0 =A0 =A0(struct dcache_struct): Redefine as a splay tree and linke= d list. > =A0 =A0 =A0 =A0(dcache_writeback): Remove declaration. > =A0 =A0 =A0 =A0(dcache_invalidate, dcache_hit): Rewrite for new cache str= ucture. > =A0 =A0 =A0 =A0(dcache_write_line): Delete. > =A0 =A0 =A0 =A0(dcache_read_line, dcache_alloc): Rewrite for new cache st= ructure. > =A0 =A0 =A0 =A0(dcache_writeback): Delete. > =A0 =A0 =A0 =A0(dcache_peek_byte): Clean up; remove "invalid" state check. > =A0 =A0 =A0 =A0(dcache_poke_byte): Rewrite for new cache structure; clari= fy comment. > =A0 =A0 =A0 =A0(dcache_splay_tree_compare): New function. > =A0 =A0 =A0 =A0(dcache_init, dcache_free): Rewrite for new cache structur= e. > =A0 =A0 =A0 =A0(dcache_xfer_memory): Rewrite for new write-through cache = structure. > =A0 =A0 =A0 =A0(dcache_update, dcache_print_line): New functions. > =A0 =A0 =A0 =A0(dcache_info): Rewrite for new cache structure. > =A0 =A0 =A0 =A0(_initialize_dcache): Rewrite for new cache structure. > =A0 =A0 =A0 =A0* dcache.h (dcache_xfer_memory): Update definition. > =A0 =A0 =A0 =A0(dcache_update, dcache_stack_enabled_p): Declare. > =A0 =A0 =A0 =A0* target.c (memory_xfer_partial): Update calls to dcache_x= fer_memory. > Hi. I checked in a sligntly modified version of this patch. The actual stack caching patch is still todo. 2009-08-20 Jacob Potter Replace dcache with splay tree. Remove partially implemented writeback support. * dcache.c: Include splay-tree.h. (LINE_SIZE_POWER): Change from 5 to 6. (DCACHE_SIZE): Change from 64 to 4096. (ENTRY_INVALID, ENTRY_VALID, ENTRY_DIRTY): Delete. (state_chars): Delete. (struct dcache_block): Clean up; remove state and anydirty fields. (struct dcache_struct): Redefine as a splay tree and linked list. (last_cache): Make static. (dcache_invalidate, dcache_hit): Rewrite for new cache structure. (dcache_read_line, dcache_alloc): Rewrite for new cache structure. (dcache_write_line): Delete. (dcache_writeback): Delete. (dcache_peek_byte): Clean up; remove "invalid" state check. (dcache_poke_byte): Rewrite for new cache structure; clarify commen= t. (dcache_splay_tree_compare): New function. (dcache_init, dcache_free): Rewrite for new cache structure. (dcache_xfer_memory): Rewrite for new write-through cache structure. (dcache_print_line): New function. (dcache_info): Rewrite for new cache structure. (_initialize_dcache): Update "info dcache" help text. * dcache.h (dcache_xfer_memory): Update declaration. * target.c (memory_xfer_partial): Update calls to dcache_xfer_memor= y. --000e0cd290802d704404719a583a Content-Type: text/plain; charset=US-ASCII; name="gdb-090820-jdpotter-dcache-rewrite-1.patch.txt" Content-Disposition: attachment; filename="gdb-090820-jdpotter-dcache-rewrite-1.patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fym2je351 Content-length: 33400 MjAwOS0wOC0yMCAgSmFjb2IgUG90dGVyICA8amRwb3R0ZXJAZ29vZ2xlLmNv bT4KCglSZXBsYWNlIGRjYWNoZSB3aXRoIHNwbGF5IHRyZWUuCglSZW1vdmUg cGFydGlhbGx5IGltcGxlbWVudGVkIHdyaXRlYmFjayBzdXBwb3J0LgoJKiBk Y2FjaGUuYzogSW5jbHVkZSBzcGxheS10cmVlLmguCgkoTElORV9TSVpFX1BP V0VSKTogQ2hhbmdlIGZyb20gNSB0byA2LgoJKERDQUNIRV9TSVpFKTogQ2hh bmdlIGZyb20gNjQgdG8gNDA5Ni4KCShFTlRSWV9JTlZBTElELCBFTlRSWV9W QUxJRCwgRU5UUllfRElSVFkpOiBEZWxldGUuCgkoc3RhdGVfY2hhcnMpOiBE ZWxldGUuCgkoc3RydWN0IGRjYWNoZV9ibG9jayk6IENsZWFuIHVwOyByZW1v dmUgc3RhdGUgYW5kIGFueWRpcnR5IGZpZWxkcy4KCShzdHJ1Y3QgZGNhY2hl X3N0cnVjdCk6IFJlZGVmaW5lIGFzIGEgc3BsYXkgdHJlZSBhbmQgbGlua2Vk IGxpc3QuCgkobGFzdF9jYWNoZSk6IE1ha2Ugc3RhdGljLgoJKGRjYWNoZV9p bnZhbGlkYXRlLCBkY2FjaGVfaGl0KTogUmV3cml0ZSBmb3IgbmV3IGNhY2hl IHN0cnVjdHVyZS4KCShkY2FjaGVfcmVhZF9saW5lLCBkY2FjaGVfYWxsb2Mp OiBSZXdyaXRlIGZvciBuZXcgY2FjaGUgc3RydWN0dXJlLgoJKGRjYWNoZV93 cml0ZV9saW5lKTogRGVsZXRlLgoJKGRjYWNoZV93cml0ZWJhY2spOiBEZWxl dGUuCgkoZGNhY2hlX3BlZWtfYnl0ZSk6IENsZWFuIHVwOyByZW1vdmUgImlu dmFsaWQiIHN0YXRlIGNoZWNrLgoJKGRjYWNoZV9wb2tlX2J5dGUpOiBSZXdy aXRlIGZvciBuZXcgY2FjaGUgc3RydWN0dXJlOyBjbGFyaWZ5IGNvbW1lbnQu CgkoZGNhY2hlX3NwbGF5X3RyZWVfY29tcGFyZSk6IE5ldyBmdW5jdGlvbi4K CShkY2FjaGVfaW5pdCwgZGNhY2hlX2ZyZWUpOiBSZXdyaXRlIGZvciBuZXcg Y2FjaGUgc3RydWN0dXJlLgoJKGRjYWNoZV94ZmVyX21lbW9yeSk6IFJld3Jp dGUgZm9yIG5ldyB3cml0ZS10aHJvdWdoIGNhY2hlIHN0cnVjdHVyZS4KCShk Y2FjaGVfcHJpbnRfbGluZSk6IE5ldyBmdW5jdGlvbi4KCShkY2FjaGVfaW5m byk6IFJld3JpdGUgZm9yIG5ldyBjYWNoZSBzdHJ1Y3R1cmUuCgkoX2luaXRp YWxpemVfZGNhY2hlKTogVXBkYXRlICJpbmZvIGRjYWNoZSIgaGVscCB0ZXh0 LgoJKiBkY2FjaGUuaCAoZGNhY2hlX3hmZXJfbWVtb3J5KTogVXBkYXRlIGRl Y2xhcmF0aW9uLgoJKiB0YXJnZXQuYyAobWVtb3J5X3hmZXJfcGFydGlhbCk6 IFVwZGF0ZSBjYWxscyB0byBkY2FjaGVfeGZlcl9tZW1vcnkuCgpJbmRleDog ZGNhY2hlLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2 cy9zcmMvc3JjL2dkYi9kY2FjaGUuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24g MS4zMwpkaWZmIC11IC1wIC1yMS4zMyBkY2FjaGUuYwotLS0gZGNhY2hlLmMJ MiBKdWwgMjAwOSAxNzoyMTowNSAtMDAwMAkxLjMzCisrKyBkY2FjaGUuYwky MCBBdWcgMjAwOSAyMjowOTo0NyAtMDAwMApAQCAtMjQsNTcgKzI0LDM0IEBA CiAjaW5jbHVkZSAiZ2RiX3N0cmluZy5oIgogI2luY2x1ZGUgImdkYmNvcmUu aCIKICNpbmNsdWRlICJ0YXJnZXQuaCIKKyNpbmNsdWRlICJzcGxheS10cmVl LmgiCiAKIC8qIFRoZSBkYXRhIGNhY2hlIGNvdWxkIGxlYWQgdG8gaW5jb3Jy ZWN0IHJlc3VsdHMgYmVjYXVzZSBpdCBkb2Vzbid0CiAgICBrbm93IGFib3V0 IHZvbGF0aWxlIHZhcmlhYmxlcywgdGh1cyBtYWtpbmcgaXQgaW1wb3NzaWJs ZSB0byBkZWJ1ZwogICAgZnVuY3Rpb25zIHdoaWNoIHVzZSBtZW1vcnkgbWFw cGVkIEkvTyBkZXZpY2VzLiAgU2V0IHRoZSBub2NhY2hlCiAgICBtZW1vcnkg cmVnaW9uIGF0dHJpYnV0ZSBpbiB0aG9zZSBjYXNlcy4KIAotICAgSW4gZ2Vu ZXJhbCB0aGUgZGNhY2hlIHNwZWVkcyB1cCBwZXJmb3JtYW5jZSwgc29tZSBz cGVlZCBpbXByb3ZlbWVudAorICAgSW4gZ2VuZXJhbCB0aGUgZGNhY2hlIHNw ZWVkcyB1cCBwZXJmb3JtYW5jZS4gIFNvbWUgc3BlZWQgaW1wcm92ZW1lbnQK ICAgIGNvbWVzIGZyb20gdGhlIGFjdHVhbCBjYWNoaW5nIG1lY2hhbmlzbSwg YnV0IHRoZSBtYWpvciBnYWluIGlzIGluCiAgICB0aGUgcmVkdWN0aW9uIG9m IHRoZSByZW1vdGUgcHJvdG9jb2wgb3ZlcmhlYWQ7IGluc3RlYWQgb2YgcmVh ZGluZwogICAgb3Igd3JpdGluZyBhIGxhcmdlIGFyZWEgb2YgbWVtb3J5IGlu IDQgYnl0ZSByZXF1ZXN0cywgdGhlIGNhY2hlCi0gICBidW5kbGVzIHVwIHRo ZSByZXF1ZXN0cyBpbnRvIDMyIGJ5dGUgKGFjdHVhbGx5IExJTkVfU0laRSkg Y2h1bmtzLgotICAgUmVkdWNpbmcgdGhlIG92ZXJoZWFkIHRvIGFuIGVpZ2h0 aCBvZiB3aGF0IGl0IHdhcy4gIFRoaXMgaXMgdmVyeQotICAgb2J2aW91cyB3 aGVuIGRpc3BsYXlpbmcgYSBsYXJnZSBhbW91bnQgb2YgZGF0YSwKLQotICAg ZWcsIHgvMjAweCAwIAotCi0gICBjYWNoaW5nICAgICB8ICAgbm8gICAgeWVz IAotICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKLSAgIGZpcnN0 IHRpbWUgIHwgICA0IHNlYyAgMiBzZWMgaW1wcm92ZW1lbnQgZHVlIHRvIGNo dW5raW5nIAotICAgc2Vjb25kIHRpbWUgfCAgIDQgc2VjICAwIHNlYyBpbXBy b3ZlbWVudCBkdWUgdG8gY2FjaGluZwotCi0gICBUaGUgY2FjaGUgc3RydWN0 dXJlIGlzIHVudXN1YWwsIHdlIGtlZXAgYSBudW1iZXIgb2YgY2FjaGUgYmxv Y2tzCi0gICAoRENBQ0hFX1NJWkUpIGFuZCBlYWNoIG9uZSBjYWNoZXMgYSBM SU5FX1NJWkVlZCBhcmVhIG9mIG1lbW9yeS4KLSAgIFdpdGhpbiBlYWNoIGxp bmUgd2UgcmVtZW1iZXIgdGhlIGFkZHJlc3Mgb2YgdGhlIGxpbmUgKGFsd2F5 cyBhCi0gICBtdWx0aXBsZSBvZiB0aGUgTElORV9TSVpFKSBhbmQgYSB2ZWN0 b3Igb2YgYnl0ZXMgb3ZlciB0aGUgcmFuZ2UuCi0gICBUaGVyZSdzIGFub3Ro ZXIgdmVjdG9yIHdoaWNoIGNvbnRhaW5zIHRoZSBzdGF0ZSBvZiB0aGUgYnl0 ZXMuCi0KLSAgIEVOVFJZX0lOVkFMSUQgbWVhbnMgdGhhdCB0aGUgYnl0ZSBp cyBqdXN0IHBsYWluIHdyb25nLCBhbmQgaGFzIG5vCi0gICBjb3JyZXNwb25k ZW5jZSB3aXRoIGFueXRoaW5nIGVsc2UgKGFzIGl0IHdvdWxkIHdoZW4gdGhl IGNhY2hlIGlzCi0gICB0dXJuZWQgb24sIGJ1dCBub3RoaW5nIGhhcyBiZWVu IGRvbmUgdG8gaXQpLgotCi0gICBFTlRSWV9ESVJUWSBtZWFucyB0aGF0IHRo ZSBieXRlIGhhcyBzb21lIGRhdGEgaW4gaXQgd2hpY2ggc2hvdWxkIGJlCi0g ICB3cml0dGVuIG91dCB0byB0aGUgcmVtb3RlIHRhcmdldCBvbmUgZGF5LCBi dXQgY29udGFpbnMgY29ycmVjdAotICAgZGF0YS4KLQotICAgRU5UUllfVkFM SUQgbWVhbnMgdGhhdCB0aGUgZGF0YSBpcyB0aGUgc2FtZSBpbiB0aGUgY2Fj aGUgYXMgaXQgaXMgaW4KLSAgIHJlbW90ZSBtZW1vcnkuCi0KLQotICAgVGhl IEVOVFJZX0RJUlRZIHN0YXRlIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIEdEQiBs aWtlcyB0byB3cml0ZSBsYXJnZQotICAgbHVtcHMgb2YgbWVtb3J5IGluIHNt YWxsIGJpdHMuICBJZiB0aGUgY2FjaGluZyBtZWNoYW5pc20gZGlkbid0Ci0g ICBtYWludGFpbiB0aGUgRElSVFkgaW5mb3JtYXRpb24sIHRoZW4gc29tZXRo aW5nIGxpa2UgYSB0d28gYnl0ZQotICAgd3JpdGUgd291bGQgbWVhbiB0aGF0 IHRoZSBlbnRpcmUgY2FjaGUgbGluZSB3b3VsZCBoYXZlIHRvIGJlIHJlYWQs Ci0gICB0aGUgdHdvIGJ5dGVzIG1vZGlmaWVkIGFuZCB0aGVuIHdyaXR0ZW4g b3V0IGFnYWluLiAgVGhlIGFsdGVybmF0aXZlCi0gICB3b3VsZCBiZSB0byBu b3QgcmVhZCBpbiB0aGUgY2FjaGUgbGluZSBpbiB0aGUgZmlyc3QgcGxhY2Us IGFuZCBqdXN0Ci0gICB3cml0ZSB0aGUgdHdvIGJ5dGVzIGRpcmVjdGx5IGlu dG8gdGFyZ2V0IG1lbW9yeS4gIFRoZSB0cm91YmxlIHdpdGgKLSAgIHRoYXQg aXMgdGhhdCBpdCByZWFsbHkgbmFpbHMgcGVyZm9ybWFuY2UsIGJlY2F1c2Ug b2YgdGhlIHJlbW90ZQotICAgcHJvdG9jb2wgb3ZlcmhlYWQuICBUaGlzIHdh eSwgYWxsIHRob3NlIGxpdHRsZSB3cml0ZXMgYXJlIGJ1bmRsZWQKLSAgIHVw IGludG8gYW4gZW50aXJlIGNhY2hlIGxpbmUgd3JpdGUgaW4gb25lIGdvLCB3 aXRob3V0IGhhdmluZyB0bwotICAgcmVhZCB0aGUgY2FjaGUgbGluZSBpbiB0 aGUgZmlyc3QgcGxhY2UuCi0gKi8KKyAgIGJ1bmRsZXMgdXAgdGhlIHJlcXVl c3RzIGludG8gTElORV9TSVpFIGNodW5rcywgcmVkdWNpbmcgb3ZlcmhlYWQK KyAgIHNpZ25pZmljYW50bHkuICBUaGlzIGlzIG1vc3QgdXNlZnVsIHdoZW4g YWNjZXNzaW5nIGEgbGFyZ2UgYW1vdW50CisgICBvZiBkYXRhLCBzdWNoIGFz IHdoZW4gcGVyZm9ybWluZyBhIGJhY2t0cmFjZS4KKworICAgVGhlIGNhY2hl IGlzIGEgc3BsYXkgdHJlZSBhbG9uZyB3aXRoIGEgbGlua2VkIGxpc3QgZm9y IHJlcGxhY2VtZW50LgorICAgRWFjaCBibG9jayBjYWNoZXMgYSBMSU5FX1NJ WkUgYXJlYSBvZiBtZW1vcnkuICBXdGloaW4gZWFjaCBsaW5lIHdlIHJlbWVt YmVyCisgICB0aGUgYWRkcmVzcyBvZiB0aGUgbGluZSAod2hpY2ggbXVzdCBi ZSBhIG11bHRpcGxlIG9mIExJTkVfU0laRSkgYW5kIHRoZQorICAgYWN0dWFs IGRhdGEgYmxvY2suCisKKyAgIExpbmVzIGFyZSBvbmx5IGFsbG9jYXRlZCBh cyBuZWVkZWQsIHNvIERDQUNIRV9TSVpFIHJlYWxseSBzcGVjaWZpZXMgdGhl CisgICAqbWF4aW11bSogbnVtYmVyIG9mIGxpbmVzIGluIHRoZSBjYWNoZS4K KworICAgQXQgcHJlc2VudCwgdGhlIGNhY2hlIGlzIHdyaXRlLXRocm91Z2gg cmF0aGVyIHRoYW4gd3JpdGViYWNrOiBhcyBzb29uCisgICBhcyBkYXRhIGlz IHdyaXR0ZW4gdG8gdGhlIGNhY2hlLCBpdCBpcyBhbHNvIGltbWVkaWF0ZWx5 IHdyaXR0ZW4gdG8KKyAgIHRoZSB0YXJnZXQuICBUaGVyZWZvcmUsIGNhY2hl IGxpbmVzIGFyZSBuZXZlciAiZGlydHkiLiAgV2hldGhlciBhIGdpdmVuCisg ICBsaW5lIGlzIHZhbGlkIG9yIG5vdCBkZXBlbmRzIG9uIHdoZXJlIGl0IGlz IHN0b3JlZCBpbiB0aGUgZGNhY2hlX3N0cnVjdDsKKyAgIHRoZXJlIGlzIG5v IHBlci1ibG9jayB2YWxpZCBmbGFnLiAgKi8KIAogLyogTk9URTogSW50ZXJh Y3Rpb24gb2YgZGNhY2hlIGFuZCBtZW1vcnkgcmVnaW9uIGF0dHJpYnV0ZXMK IApAQCAtODksMjAgKzY2LDE2IEBACiAgICB0aGUgbGFzdCBiaXQgb2YgdGhl IC50ZXh0IHNlZ21lbnQgYW5kIHRoZSBmaXJzdCBiaXQgb2YgdGhlIC5kYXRh CiAgICBzZWdtZW50IGZhbGwgd2l0aGluIHRoZSBzYW1lIGRjYWNoZSBwYWdl IHdpdGggYSByby9jYWNoZWFibGUgbWVtb3J5CiAgICByZWdpb24gZGVmaW5l ZCBmb3IgdGhlIC50ZXh0IHNlZ21lbnQgYW5kIGEgcncvbm9uLWNhY2hlYWJs ZSBtZW1vcnkKLSAgIHJlZ2lvbiBkZWZpbmVkIGZvciB0aGUgLmRhdGEgc2Vn bWVudC4gKi8KKyAgIHJlZ2lvbiBkZWZpbmVkIGZvciB0aGUgLmRhdGEgc2Vn bWVudC4gICovCiAKLS8qIFRoaXMgdmFsdWUgcmVndWxhdGVzIHRoZSBudW1i ZXIgb2YgY2FjaGUgYmxvY2tzIHN0b3JlZC4KLSAgIFNtYWxsZXIgdmFsdWVz IHJlZHVjZSB0aGUgdGltZSBzcGVudCBzZWFyY2hpbmcgZm9yIGEgY2FjaGUK LSAgIGxpbmUsIGFuZCByZWR1Y2UgbWVtb3J5IHJlcXVpcmVtZW50cywgYnV0 IGluY3JlYXNlIHRoZSByaXNrCi0gICBvZiBhIGxpbmUgbm90IGJlaW5nIGlu IG1lbW9yeSAqLwotCi0jZGVmaW5lIERDQUNIRV9TSVpFIDY0Ci0KLS8qIFRo aXMgdmFsdWUgcmVndWxhdGVzIHRoZSBzaXplIG9mIGEgY2FjaGUgbGluZS4g IFNtYWxsZXIgdmFsdWVzCi0gICByZWR1Y2UgdGhlIHRpbWUgdGFrZW4gdG8g cmVhZCBhIHNpbmdsZSBieXRlLCBidXQgcmVkdWNlIG92ZXJhbGwKLSAgIHRo cm91Z2hwdXQuICAqLwotCi0jZGVmaW5lIExJTkVfU0laRV9QT1dFUiAoNSkK Ky8qIFRoZSBtYXhpbXVtIG51bWJlciBvZiBsaW5lcyBzdG9yZWQuICBUaGUg dG90YWwgc2l6ZSBvZiB0aGUgY2FjaGUgaXMKKyAgIGVxdWFsIHRvIERDQUNI RV9TSVpFIHRpbWVzIExJTkVfU0laRS4gICovCisjZGVmaW5lIERDQUNIRV9T SVpFIDQwOTYKKworLyogVGhlIHNpemUgb2YgYSBjYWNoZSBsaW5lLiAgU21h bGxlciB2YWx1ZXMgcmVkdWNlIHRoZSB0aW1lIHRha2VuIHRvCisgICByZWFk IGEgc2luZ2xlIGJ5dGUgYW5kIG1ha2UgdGhlIGNhY2hlIG1vcmUgZ3JhbnVs YXIsIGJ1dCBpbmNyZWFzZQorICAgb3ZlcmhlYWQgYW5kIHJlZHVjZSB0aGUg ZWZmZWN0aXZlbmVzcyBvZiB0aGUgY2FjaGUgYXMgYSBwcmVmZXRjaGVyLiAg Ki8KKyNkZWZpbmUgTElORV9TSVpFX1BPV0VSIDYKICNkZWZpbmUgTElORV9T SVpFICgxIDw8IExJTkVfU0laRV9QT1dFUikKIAogLyogRWFjaCBjYWNoZSBi bG9jayBob2xkcyBMSU5FX1NJWkUgYnl0ZXMgb2YgZGF0YQpAQCAtMTEyLDU5 ICs4NSwyNSBAQAogI2RlZmluZSBYRk9STSh4KSAJKCh4KSAmIExJTkVfU0la RV9NQVNLKQogI2RlZmluZSBNQVNLKHgpICAgICAgICAgKCh4KSAmIH5MSU5F X1NJWkVfTUFTSykKIAotCi0jZGVmaW5lIEVOVFJZX0lOVkFMSUQgMCAvKiBk YXRhIGF0IHRoaXMgYnl0ZSBpcyB3cm9uZyAqLwotI2RlZmluZSBFTlRSWV9E SVJUWSAgIDEgLyogZGF0YSBhdCB0aGlzIGJ5dGUgbmVlZHMgdG8gYmUgd3Jp dHRlbiBiYWNrICovCi0jZGVmaW5lIEVOVFJZX1ZBTElEICAgMiAvKiBkYXRh IGF0IHRoaXMgYnl0ZSBpcyBzYW1lIGFzIGluIG1lbW9yeSAqLwotCi0vKiBG b3IgY2FjaGUgc3RhdGUgZGlzcGxheSBieSAiaW5mbyBkY2FjaGUiLgotICAg VGhlIGxldHRlcnMgSSxELFYgbWFwIHRvCi0gICBJID0gRU5UUllfSU5WQUxJ RAotICAgRCA9IEVOVFJZX0RJUlRZCi0gICBWID0gRU5UUllfVkFMSUQgICov Ci1zdGF0aWMgY29uc3QgY2hhciBzdGF0ZV9jaGFyc1szXSA9IHsgJ0knLCAn RCcsICdWJyB9OwotCiBzdHJ1Y3QgZGNhY2hlX2Jsb2NrCi0gIHsKLSAgICBz dHJ1Y3QgZGNhY2hlX2Jsb2NrICpwOwkvKiBuZXh0IGluIGxpc3QgKi8KLSAg ICBDT1JFX0FERFIgYWRkcjsJCS8qIEFkZHJlc3MgZm9yIHdoaWNoIGRhdGEg aXMgcmVjb3JkZWQuICAqLwotICAgIGdkYl9ieXRlIGRhdGFbTElORV9TSVpF XTsJLyogYnl0ZXMgYXQgZ2l2ZW4gYWRkcmVzcyAqLwotICAgIHVuc2lnbmVk IGNoYXIgc3RhdGVbTElORV9TSVpFXTsJLyogd2hhdCBzdGF0ZSB0aGUgZGF0 YSBpcyBpbiAqLwotCi0gICAgLyogd2hldGhlciBhbnl0aGluZyBpbiBzdGF0 ZSBpcyBkaXJ0eSAtIHVzZWQgdG8gc3BlZWQgdXAgdGhlIAotICAgICAgIGRp cnR5IHNjYW4uICovCi0gICAgaW50IGFueWRpcnR5OwotCi0gICAgaW50IHJl ZnM7Ci0gIH07Ci0KLQotLyogRklYTUU6IGRjYWNoZV9zdHJ1Y3QgdXNlZCB0 byBoYXZlIGEgY2FjaGVfaGFzX3N0dWZmIGZpZWxkIHRoYXQgd2FzCi0gICB1 c2VkIHRvIHJlY29yZCB3aGV0aGVyIHRoZSBjYWNoZSBoYWQgYmVlbiBhY2Nl c3NlZC4gIFRoaXMgd2FzIHVzZWQKLSAgIHRvIGludmFsaWRhdGUgdGhlIGNh Y2hlIHdoZW5ldmVyIGNhY2hpbmcgd2FzIChyZS0pZW5hYmxlZCAoaWYgdGhl Ci0gICBjYWNoZSB3YXMgZGlzYWJsZWQgYW5kIGxhdGVyIHJlLWVuYWJsZWQs IGl0IGNvdWxkIGNvbnRhaW4gc3RhbGUKLSAgIGRhdGEpLiAgVGhpcyB3YXMg bm90IG5lZWRlZCBiZWNhdXNlIHRoZSBjYWNoZSBpcyB3cml0ZSB0aHJvdWdo IGFuZAotICAgdGhlIGNvZGUgdGhhdCBlbmFibGVzLCBkaXNhYmxlcywgYW5k IGRlbGV0ZXMgbWVtb3J5IHJlZ2lvbiBhbGwKLSAgIGludmFsaWRhdGUgdGhl IGNhY2hlLgotCi0gICBUaGlzIGlzIG92ZXJraWxsLCBzaW5jZSBpdCBhbHNv IGludmFsaWRhdGVzIGNhY2hlIGxpbmVzIGZyb20KLSAgIHVucmVsYXRlZCBy ZWdpb25zLiAgT25lIHdheSB0aGlzIGNvdWxkIGJlIGFkZHJlc3NlZCBieSBh ZGRpbmcgYQotICAgbmV3IGZ1bmN0aW9uIHRoYXQgdGFrZXMgYW4gYWRkcmVz cyBhbmQgYSBsZW5ndGggYW5kIGludmFsaWRhdGVzCi0gICBvbmx5IHRob3Nl IGNhY2hlIGxpbmVzIHRoYXQgbWF0Y2guICovCit7CisgIHN0cnVjdCBkY2Fj aGVfYmxvY2sgKm5ld2VyOwkvKiBmb3IgTFJVIGFuZCBmcmVlIGxpc3QgKi8K KyAgQ09SRV9BRERSIGFkZHI7CQkvKiBhZGRyZXNzIG9mIGRhdGEgKi8KKyAg Z2RiX2J5dGUgZGF0YVtMSU5FX1NJWkVdOwkvKiBieXRlcyBhdCBnaXZlbiBh ZGRyZXNzICovCisgIGludCByZWZzOwkJCS8qICMgaGl0cyAqLworfTsKIAog c3RydWN0IGRjYWNoZV9zdHJ1Y3QKLSAgewotICAgIC8qIGZyZWUgbGlzdCAq LwotICAgIHN0cnVjdCBkY2FjaGVfYmxvY2sgKmZyZWVfaGVhZDsKLSAgICBz dHJ1Y3QgZGNhY2hlX2Jsb2NrICpmcmVlX3RhaWw7Ci0KLSAgICAvKiBpbiB1 c2UgbGlzdCAqLwotICAgIHN0cnVjdCBkY2FjaGVfYmxvY2sgKnZhbGlkX2hl YWQ7Ci0gICAgc3RydWN0IGRjYWNoZV9ibG9jayAqdmFsaWRfdGFpbDsKLQot ICAgIC8qIFRoZSBjYWNoZSBpdHNlbGYuICovCi0gICAgc3RydWN0IGRjYWNo ZV9ibG9jayAqdGhlX2NhY2hlOwotICB9OworeworICBzcGxheV90cmVlIHRy ZWU7CisgIHN0cnVjdCBkY2FjaGVfYmxvY2sgKm9sZGVzdDsKKyAgc3RydWN0 IGRjYWNoZV9ibG9jayAqbmV3ZXN0OworCisgIHN0cnVjdCBkY2FjaGVfYmxv Y2sgKmZyZWVsaXN0OworCisgIC8qIFRoZSBudW1iZXIgb2YgaW4tdXNlIGxp bmVzIGluIHRoZSBjYWNoZS4gICovCisgIGludCBzaXplOworfTsKIAogc3Rh dGljIHN0cnVjdCBkY2FjaGVfYmxvY2sgKmRjYWNoZV9oaXQgKERDQUNIRSAq ZGNhY2hlLCBDT1JFX0FERFIgYWRkcik7CiAKQEAgLTE3NCw4ICsxMTMsNiBA QCBzdGF0aWMgaW50IGRjYWNoZV9yZWFkX2xpbmUgKERDQUNIRSAqZGNhCiAK IHN0YXRpYyBzdHJ1Y3QgZGNhY2hlX2Jsb2NrICpkY2FjaGVfYWxsb2MgKERD QUNIRSAqZGNhY2hlLCBDT1JFX0FERFIgYWRkcik7CiAKLXN0YXRpYyBpbnQg ZGNhY2hlX3dyaXRlYmFjayAoRENBQ0hFICpkY2FjaGUpOwotCiBzdGF0aWMg dm9pZCBkY2FjaGVfaW5mbyAoY2hhciAqZXhwLCBpbnQgdHR5KTsKIAogdm9p ZCBfaW5pdGlhbGl6ZV9kY2FjaGUgKHZvaWQpOwpAQCAtMTkwLDE0MCArMTI3 LDU0IEBAIHNob3dfZGNhY2hlX2VuYWJsZWRfcCAoc3RydWN0IHVpX2ZpbGUg KmYKIH0KIAogCi1EQ0FDSEUgKmxhc3RfY2FjaGU7CQkvKiBVc2VkIGJ5IGlu Zm8gZGNhY2hlICovCi0KK3N0YXRpYyBEQ0FDSEUgKmxhc3RfY2FjaGU7IC8q IFVzZWQgYnkgaW5mbyBkY2FjaGUgKi8KIAogLyogRnJlZSBhbGwgdGhlIGRh dGEgY2FjaGUgYmxvY2tzLCB0aHVzIGRpc2NhcmRpbmcgYWxsIGNhY2hlZCBk YXRhLiAgKi8KIAogdm9pZAogZGNhY2hlX2ludmFsaWRhdGUgKERDQUNIRSAq ZGNhY2hlKQogewotICBpbnQgaTsKLSAgZGNhY2hlLT52YWxpZF9oZWFkID0g MDsKLSAgZGNhY2hlLT52YWxpZF90YWlsID0gMDsKKyAgc3RydWN0IGRjYWNo ZV9ibG9jayAqYmxvY2ssICpuZXh0OwogCi0gIGRjYWNoZS0+ZnJlZV9oZWFk ID0gMDsKLSAgZGNhY2hlLT5mcmVlX3RhaWwgPSAwOworICBibG9jayA9IGRj YWNoZS0+b2xkZXN0OwogCi0gIGZvciAoaSA9IDA7IGkgPCBEQ0FDSEVfU0la RTsgaSsrKQorICB3aGlsZSAoYmxvY2spCiAgICAgewotICAgICAgc3RydWN0 IGRjYWNoZV9ibG9jayAqZGIgPSBkY2FjaGUtPnRoZV9jYWNoZSArIGk7Cisg ICAgICBzcGxheV90cmVlX3JlbW92ZSAoZGNhY2hlLT50cmVlLCAoc3BsYXlf dHJlZV9rZXkpIGJsb2NrLT5hZGRyKTsKKyAgICAgIG5leHQgPSBibG9jay0+ bmV3ZXI7CiAKLSAgICAgIGlmICghZGNhY2hlLT5mcmVlX2hlYWQpCi0JZGNh Y2hlLT5mcmVlX2hlYWQgPSBkYjsKLSAgICAgIGVsc2UKLQlkY2FjaGUtPmZy ZWVfdGFpbC0+cCA9IGRiOwotICAgICAgZGNhY2hlLT5mcmVlX3RhaWwgPSBk YjsKLSAgICAgIGRiLT5wID0gMDsKKyAgICAgIGJsb2NrLT5uZXdlciA9IGRj YWNoZS0+ZnJlZWxpc3Q7CisgICAgICBkY2FjaGUtPmZyZWVsaXN0ID0gYmxv Y2s7CisKKyAgICAgIGJsb2NrID0gbmV4dDsKICAgICB9CiAKLSAgcmV0dXJu OworICBkY2FjaGUtPm9sZGVzdCA9IE5VTEw7CisgIGRjYWNoZS0+bmV3ZXN0 ID0gTlVMTDsKKyAgZGNhY2hlLT5zaXplID0gMDsKIH0KIAogLyogSWYgYWRk ciBpcyBwcmVzZW50IGluIHRoZSBkY2FjaGUsIHJldHVybiB0aGUgYWRkcmVz cyBvZiB0aGUgYmxvY2sKLSAgIGNvbnRhaW5pbmcgaXQuICovCisgICBjb250 YWluaW5nIGl0LiAgKi8KIAogc3RhdGljIHN0cnVjdCBkY2FjaGVfYmxvY2sg KgogZGNhY2hlX2hpdCAoRENBQ0hFICpkY2FjaGUsIENPUkVfQUREUiBhZGRy KQogewogICBzdHJ1Y3QgZGNhY2hlX2Jsb2NrICpkYjsKIAotICAvKiBTZWFy Y2ggYWxsIGNhY2hlIGJsb2NrcyBmb3Igb25lIHRoYXQgaXMgYXQgdGhpcyBh ZGRyZXNzLiAgKi8KLSAgZGIgPSBkY2FjaGUtPnZhbGlkX2hlYWQ7CisgIHNw bGF5X3RyZWVfbm9kZSBub2RlID0gc3BsYXlfdHJlZV9sb29rdXAgKGRjYWNo ZS0+dHJlZSwKKwkJCQkJICAgIChzcGxheV90cmVlX2tleSkgTUFTSyAoYWRk cikpOwogCi0gIHdoaWxlIChkYikKLSAgICB7Ci0gICAgICBpZiAoTUFTSyAo YWRkcikgPT0gZGItPmFkZHIpCi0JewotCSAgZGItPnJlZnMrKzsKLQkgIHJl dHVybiBkYjsKLQl9Ci0gICAgICBkYiA9IGRiLT5wOwotICAgIH0KKyAgaWYg KCFub2RlKQorICAgIHJldHVybiBOVUxMOwogCi0gIHJldHVybiBOVUxMOwor ICBkYiA9IChzdHJ1Y3QgZGNhY2hlX2Jsb2NrICopIG5vZGUtPnZhbHVlOwor ICBkYi0+cmVmcysrOworICByZXR1cm4gZGI7CiB9CiAKLS8qIE1ha2Ugc3Vy ZSB0aGF0IGFueXRoaW5nIGluIHRoaXMgbGluZSB3aGljaCBuZWVkcyB0bwot ICAgYmUgd3JpdHRlbiBpcy4gKi8KLQotc3RhdGljIGludAotZGNhY2hlX3dy aXRlX2xpbmUgKERDQUNIRSAqZGNhY2hlLCBzdHJ1Y3QgZGNhY2hlX2Jsb2Nr ICpkYikKLXsKLSAgQ09SRV9BRERSIG1lbWFkZHI7Ci0gIGdkYl9ieXRlICpt eWFkZHI7Ci0gIGludCBsZW47Ci0gIGludCByZXM7Ci0gIGludCByZWdfbGVu OwotICBzdHJ1Y3QgbWVtX3JlZ2lvbiAqcmVnaW9uOwotCi0gIGlmICghZGIt PmFueWRpcnR5KQotICAgIHJldHVybiAxOwotCi0gIGxlbiA9IExJTkVfU0la RTsKLSAgbWVtYWRkciA9IGRiLT5hZGRyOwotICBteWFkZHIgID0gZGItPmRh dGE7Ci0KLSAgd2hpbGUgKGxlbiA+IDApCi0gICAgewotICAgICAgaW50IHM7 Ci0gICAgICBpbnQgZTsKLSAgICAgIGludCBkaXJ0eV9sZW47Ci0gICAgICAK LSAgICAgIHJlZ2lvbiA9IGxvb2t1cF9tZW1fcmVnaW9uKG1lbWFkZHIpOwot ICAgICAgaWYgKG1lbWFkZHIgKyBsZW4gPCByZWdpb24tPmhpKQotCXJlZ19s ZW4gPSBsZW47Ci0gICAgICBlbHNlCi0JcmVnX2xlbiA9IHJlZ2lvbi0+aGkg LSBtZW1hZGRyOwotCi0gICAgICBpZiAoIXJlZ2lvbi0+YXR0cmliLmNhY2hl IHx8IHJlZ2lvbi0+YXR0cmliLm1vZGUgPT0gTUVNX1JPKQotCXsKLQkgIG1l bWFkZHIgKz0gcmVnX2xlbjsKLQkgIG15YWRkciAgKz0gcmVnX2xlbjsKLQkg IGxlbiAgICAgLT0gcmVnX2xlbjsKLQkgIGNvbnRpbnVlOwotCX0KKy8qIEZp bGwgYSBjYWNoZSBsaW5lIGZyb20gdGFyZ2V0IG1lbW9yeS4gICovCiAKLSAg ICAgIHdoaWxlIChyZWdfbGVuID4gMCkKLQl7Ci0JICBzID0gWEZPUk0obWVt YWRkcik7Ci0JICB3aGlsZSAocmVnX2xlbiA+IDApIHsKLQkgICAgaWYgKGRi LT5zdGF0ZVtzXSA9PSBFTlRSWV9ESVJUWSkKLQkgICAgICBicmVhazsKLQkg ICAgcysrOwotCSAgICByZWdfbGVuLS07Ci0KLQkgICAgbWVtYWRkcisrOwot CSAgICBteWFkZHIrKzsKLQkgICAgbGVuLS07Ci0JICB9Ci0KLQkgIGUgPSBz OwotCSAgd2hpbGUgKHJlZ19sZW4gPiAwKSB7Ci0JICAgIGlmIChkYi0+c3Rh dGVbZV0gIT0gRU5UUllfRElSVFkpCi0JICAgICAgYnJlYWs7Ci0JICAgIGUr KzsKLQkgICAgcmVnX2xlbi0tOwotCSAgfQotCi0JICBkaXJ0eV9sZW4gPSBl IC0gczsKLQkgIHJlcyA9IHRhcmdldF93cml0ZSAoJmN1cnJlbnRfdGFyZ2V0 LCBUQVJHRVRfT0JKRUNUX1JBV19NRU1PUlksCi0JCQkgICAgICBOVUxMLCBt eWFkZHIsIG1lbWFkZHIsIGRpcnR5X2xlbik7Ci0JICBpZiAocmVzIDwgZGly dHlfbGVuKQotCSAgICByZXR1cm4gMDsKLQotCSAgbWVtc2V0ICgmZGItPnN0 YXRlW1hGT1JNKG1lbWFkZHIpXSwgRU5UUllfVkFMSUQsIHJlcyk7Ci0JICBt ZW1hZGRyICs9IHJlczsKLQkgIG15YWRkciArPSByZXM7Ci0JICBsZW4gLT0g cmVzOwotCX0KLSAgICB9Ci0KLSAgZGItPmFueWRpcnR5ID0gMDsKLSAgcmV0 dXJuIDE7Ci19Ci0KLS8qIFJlYWQgY2FjaGUgbGluZSAqLwogc3RhdGljIGlu dAogZGNhY2hlX3JlYWRfbGluZSAoRENBQ0hFICpkY2FjaGUsIHN0cnVjdCBk Y2FjaGVfYmxvY2sgKmRiKQogewpAQCAtMzM0LDI2ICsxODUsMjAgQEAgZGNh Y2hlX3JlYWRfbGluZSAoRENBQ0hFICpkY2FjaGUsIHN0cnVjdAogICBpbnQg cmVnX2xlbjsKICAgc3RydWN0IG1lbV9yZWdpb24gKnJlZ2lvbjsKIAotICAv KiBJZiB0aGVyZSBhcmUgYW55IGRpcnR5IGJ5dGVzIGluIHRoZSBsaW5lLCBp dCBtdXN0IGJlIHdyaXR0ZW4KLSAgICAgYmVmb3JlIGEgbmV3IGxpbmUgY2Fu IGJlIHJlYWQgKi8KLSAgaWYgKGRiLT5hbnlkaXJ0eSkKLSAgICB7Ci0gICAg ICBpZiAoIWRjYWNoZV93cml0ZV9saW5lIChkY2FjaGUsIGRiKSkKLQlyZXR1 cm4gMDsKLSAgICB9Ci0gIAogICBsZW4gPSBMSU5FX1NJWkU7CiAgIG1lbWFk ZHIgPSBkYi0+YWRkcjsKICAgbXlhZGRyICA9IGRiLT5kYXRhOwogCiAgIHdo aWxlIChsZW4gPiAwKQogICAgIHsKLSAgICAgIHJlZ2lvbiA9IGxvb2t1cF9t ZW1fcmVnaW9uKG1lbWFkZHIpOwotICAgICAgaWYgKG1lbWFkZHIgKyBsZW4g PCByZWdpb24tPmhpKQorICAgICAgLyogRG9uJ3Qgb3ZlcnJ1biBpZiB0aGlz IGJsb2NrIGlzIHJpZ2h0IGF0IHRoZSBlbmQgb2YgdGhlIHJlZ2lvbi4gICov CisgICAgICByZWdpb24gPSBsb29rdXBfbWVtX3JlZ2lvbiAobWVtYWRkcik7 CisgICAgICBpZiAocmVnaW9uLT5oaSA9PSAwIHx8IG1lbWFkZHIgKyBsZW4g PCByZWdpb24tPmhpKQogCXJlZ19sZW4gPSBsZW47CiAgICAgICBlbHNlCiAJ cmVnX2xlbiA9IHJlZ2lvbi0+aGkgLSBtZW1hZGRyOwogCisgICAgICAvKiBT a2lwIG5vbi1jYWNoZWFibGUvbm9uLXJlYWRhYmxlIHJlZ2lvbnMuICAqLwog ICAgICAgaWYgKCFyZWdpb24tPmF0dHJpYi5jYWNoZSB8fCByZWdpb24tPmF0 dHJpYi5tb2RlID09IE1FTV9XTykKIAl7CiAJICBtZW1hZGRyICs9IHJlZ19s ZW47CkBAIC0zNzIsOSArMjE3LDYgQEAgZGNhY2hlX3JlYWRfbGluZSAoRENB Q0hFICpkY2FjaGUsIHN0cnVjdAogICAgICAgbGVuIC09IHJlczsKICAgICB9 CiAKLSAgbWVtc2V0IChkYi0+c3RhdGUsIEVOVFJZX1ZBTElELCBzaXplb2Yg KGRiLT5kYXRhKSk7Ci0gIGRiLT5hbnlkaXJ0eSA9IDA7Ci0gIAogICByZXR1 cm4gMTsKIH0KIApAQCAtMzg2LDYxICsyMjgsNDcgQEAgZGNhY2hlX2FsbG9j IChEQ0FDSEUgKmRjYWNoZSwgQ09SRV9BRERSIAogewogICBzdHJ1Y3QgZGNh Y2hlX2Jsb2NrICpkYjsKIAotICAvKiBUYWtlIHNvbWV0aGluZyBmcm9tIHRo ZSBmcmVlIGxpc3QgKi8KLSAgZGIgPSBkY2FjaGUtPmZyZWVfaGVhZDsKLSAg aWYgKGRiKQorICBpZiAoZGNhY2hlLT5zaXplID49IERDQUNIRV9TSVpFKQog ICAgIHsKLSAgICAgIGRjYWNoZS0+ZnJlZV9oZWFkID0gZGItPnA7CisgICAg ICAvKiBFdmljdCB0aGUgbGVhc3QgcmVjZW50bHkgdXNlZCBsaW5lLiAgKi8K KyAgICAgIGRiID0gZGNhY2hlLT5vbGRlc3Q7CisgICAgICBkY2FjaGUtPm9s ZGVzdCA9IGRiLT5uZXdlcjsKKworICAgICAgc3BsYXlfdHJlZV9yZW1vdmUg KGRjYWNoZS0+dHJlZSwgKHNwbGF5X3RyZWVfa2V5KSBkYi0+YWRkcik7CiAg ICAgfQogICBlbHNlCiAgICAgewotICAgICAgLyogTm90aGluZyBsZWZ0IG9u IGZyZWUgbGlzdCwgc28gZ3JhYiBvbmUgZnJvbSB0aGUgdmFsaWQgbGlzdCAq LwotICAgICAgZGIgPSBkY2FjaGUtPnZhbGlkX2hlYWQ7CisgICAgICBkYiA9 IGRjYWNoZS0+ZnJlZWxpc3Q7CisgICAgICBpZiAoZGIpCisgICAgICAgIGRj YWNoZS0+ZnJlZWxpc3QgPSBkYi0+bmV3ZXI7CisgICAgICBlbHNlCisJZGIg PSB4bWFsbG9jIChzaXplb2YgKHN0cnVjdCBkY2FjaGVfYmxvY2spKTsKIAot ICAgICAgaWYgKCFkY2FjaGVfd3JpdGVfbGluZSAoZGNhY2hlLCBkYikpCi0J cmV0dXJuIE5VTEw7Ci0gICAgICAKLSAgICAgIGRjYWNoZS0+dmFsaWRfaGVh ZCA9IGRiLT5wOworICAgICAgZGNhY2hlLT5zaXplKys7CiAgICAgfQogCi0g IGRiLT5hZGRyID0gTUFTSyhhZGRyKTsKKyAgZGItPmFkZHIgPSBNQVNLIChh ZGRyKTsKKyAgZGItPm5ld2VyID0gTlVMTDsKICAgZGItPnJlZnMgPSAwOwot ICBkYi0+YW55ZGlydHkgPSAwOwotICBtZW1zZXQgKGRiLT5zdGF0ZSwgRU5U UllfSU5WQUxJRCwgc2l6ZW9mIChkYi0+ZGF0YSkpOwogCi0gIC8qIGFwcGVu ZCB0aGlzIGxpbmUgdG8gZW5kIG9mIHZhbGlkIGxpc3QgKi8KLSAgaWYgKCFk Y2FjaGUtPnZhbGlkX2hlYWQpCi0gICAgZGNhY2hlLT52YWxpZF9oZWFkID0g ZGI7Ci0gIGVsc2UKLSAgICBkY2FjaGUtPnZhbGlkX3RhaWwtPnAgPSBkYjsK LSAgZGNhY2hlLT52YWxpZF90YWlsID0gZGI7Ci0gIGRiLT5wID0gMDsKKyAg aWYgKGRjYWNoZS0+bmV3ZXN0KQorICAgIGRjYWNoZS0+bmV3ZXN0LT5uZXdl ciA9IGRiOwogCi0gIHJldHVybiBkYjsKLX0KKyAgZGNhY2hlLT5uZXdlc3Qg PSBkYjsKIAotLyogV3JpdGViYWNrIGFueSBkaXJ0eSBsaW5lcy4gKi8KLXN0 YXRpYyBpbnQKLWRjYWNoZV93cml0ZWJhY2sgKERDQUNIRSAqZGNhY2hlKQot ewotICBzdHJ1Y3QgZGNhY2hlX2Jsb2NrICpkYjsKKyAgaWYgKCFkY2FjaGUt Pm9sZGVzdCkKKyAgICBkY2FjaGUtPm9sZGVzdCA9IGRiOwogCi0gIGRiID0g ZGNhY2hlLT52YWxpZF9oZWFkOworICBzcGxheV90cmVlX2luc2VydCAoZGNh Y2hlLT50cmVlLCAoc3BsYXlfdHJlZV9rZXkpIGRiLT5hZGRyLAorCQkgICAg IChzcGxheV90cmVlX3ZhbHVlKSBkYik7CiAKLSAgd2hpbGUgKGRiKQotICAg IHsKLSAgICAgIGlmICghZGNhY2hlX3dyaXRlX2xpbmUgKGRjYWNoZSwgZGIp KQotCXJldHVybiAwOwotICAgICAgZGIgPSBkYi0+cDsKLSAgICB9Ci0gIHJl dHVybiAxOworICByZXR1cm4gZGI7CiB9CiAKLQogLyogVXNpbmcgdGhlIGRh dGEgY2FjaGUgRENBQ0hFIHJldHVybiB0aGUgY29udGVudHMgb2YgdGhlIGJ5 dGUgYXQKICAgIGFkZHJlc3MgQUREUiBpbiB0aGUgcmVtb3RlIG1hY2hpbmUu ICAKIAotICAgUmV0dXJucyAwIG9uIGVycm9yLiAqLworICAgUmV0dXJucyAx IGZvciBzdWNjZXNzLCAwIGZvciBlcnJvci4gICovCiAKIHN0YXRpYyBpbnQK IGRjYWNoZV9wZWVrX2J5dGUgKERDQUNIRSAqZGNhY2hlLCBDT1JFX0FERFIg YWRkciwgZ2RiX2J5dGUgKnB0cikKQEAgLTQ1MCwxMyArMjc4LDggQEAgZGNh Y2hlX3BlZWtfYnl0ZSAoRENBQ0hFICpkY2FjaGUsIENPUkVfQQogICBpZiAo IWRiKQogICAgIHsKICAgICAgIGRiID0gZGNhY2hlX2FsbG9jIChkY2FjaGUs IGFkZHIpOwotICAgICAgaWYgKCFkYikKLQlyZXR1cm4gMDsKLSAgICB9Ci0g IAotICBpZiAoZGItPnN0YXRlW1hGT1JNIChhZGRyKV0gPT0gRU5UUllfSU5W QUxJRCkKLSAgICB7Ci0gICAgICBpZiAoIWRjYWNoZV9yZWFkX2xpbmUoZGNh Y2hlLCBkYikpCisKKyAgICAgIGlmICghZGNhY2hlX3JlYWRfbGluZSAoZGNh Y2hlLCBkYikpCiAgICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKQEAgLTQ2 NCw1NSArMjg3LDc4IEBAIGRjYWNoZV9wZWVrX2J5dGUgKERDQUNIRSAqZGNh Y2hlLCBDT1JFX0EKICAgcmV0dXJuIDE7CiB9CiAKLQogLyogV3JpdGUgdGhl IGJ5dGUgYXQgUFRSIGludG8gQUREUiBpbiB0aGUgZGF0YSBjYWNoZS4KLSAg IFJldHVybiB6ZXJvIG9uIHdyaXRlIGVycm9yLgotICovCisKKyAgIFRoZSBj YWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGFsc28gcHJvbXB0bHkgd3JpdGlu ZyB0aGUgZGF0YQorICAgdGhyb3VnaCB0byB0YXJnZXQgbWVtb3J5LgorCisg ICBJZiBhZGRyIGlzIG5vdCBpbiBjYWNoZSwgdGhpcyBmdW5jdGlvbiBkb2Vz IG5vdGhpbmc7IHdyaXRpbmcgdG8KKyAgIGFuIGFyZWEgb2YgbWVtb3J5IHdo aWNoIHdhc24ndCBwcmVzZW50IGluIHRoZSBjYWNoZSBkb2Vzbid0IGNhdXNl CisgICBpdCB0byBiZSBsb2FkZWQgaW4uCisKKyAgIEFsd2F5cyByZXR1cm4g MSB0byBzaW1wbGlmeSBkY2FjaGVfeGZlcl9tZW1vcnkuICAqLwogCiBzdGF0 aWMgaW50CiBkY2FjaGVfcG9rZV9ieXRlIChEQ0FDSEUgKmRjYWNoZSwgQ09S RV9BRERSIGFkZHIsIGdkYl9ieXRlICpwdHIpCiB7CiAgIHN0cnVjdCBkY2Fj aGVfYmxvY2sgKmRiID0gZGNhY2hlX2hpdCAoZGNhY2hlLCBhZGRyKTsKIAot ICBpZiAoIWRiKQotICAgIHsKLSAgICAgIGRiID0gZGNhY2hlX2FsbG9jIChk Y2FjaGUsIGFkZHIpOwotICAgICAgaWYgKCFkYikKLQlyZXR1cm4gMDsKLSAg ICB9CisgIGlmIChkYikKKyAgICBkYi0+ZGF0YVtYRk9STSAoYWRkcildID0g KnB0cjsKIAotICBkYi0+ZGF0YVtYRk9STSAoYWRkcildID0gKnB0cjsKLSAg ZGItPnN0YXRlW1hGT1JNIChhZGRyKV0gPSBFTlRSWV9ESVJUWTsKLSAgZGIt PmFueWRpcnR5ID0gMTsKICAgcmV0dXJuIDE7CiB9CiAKK3N0YXRpYyBpbnQK K2RjYWNoZV9zcGxheV90cmVlX2NvbXBhcmUgKHNwbGF5X3RyZWVfa2V5IGEs IHNwbGF5X3RyZWVfa2V5IGIpCit7CisgIGlmIChhID4gYikKKyAgICByZXR1 cm4gMTsKKyAgZWxzZSBpZiAoYSA9PSBiKQorICAgIHJldHVybiAwOworICBl bHNlCisgICAgcmV0dXJuIC0xOworfQorCiAvKiBJbml0aWFsaXplIHRoZSBk YXRhIGNhY2hlLiAgKi8KKwogRENBQ0hFICoKIGRjYWNoZV9pbml0ICh2b2lk KQogewotICBpbnQgY3NpemUgPSBzaXplb2YgKHN0cnVjdCBkY2FjaGVfYmxv Y2spICogRENBQ0hFX1NJWkU7CiAgIERDQUNIRSAqZGNhY2hlOworICBpbnQg aTsKIAogICBkY2FjaGUgPSAoRENBQ0hFICopIHhtYWxsb2MgKHNpemVvZiAo KmRjYWNoZSkpOwogCi0gIGRjYWNoZS0+dGhlX2NhY2hlID0gKHN0cnVjdCBk Y2FjaGVfYmxvY2sgKikgeG1hbGxvYyAoY3NpemUpOwotICBtZW1zZXQgKGRj YWNoZS0+dGhlX2NhY2hlLCAwLCBjc2l6ZSk7Ci0KLSAgZGNhY2hlX2ludmFs aWRhdGUgKGRjYWNoZSk7Ci0KKyAgZGNhY2hlLT50cmVlID0gc3BsYXlfdHJl ZV9uZXcgKGRjYWNoZV9zcGxheV90cmVlX2NvbXBhcmUsCisJCQkJIE5VTEws CisJCQkJIE5VTEwpOworCisgIGRjYWNoZS0+b2xkZXN0ID0gTlVMTDsKKyAg ZGNhY2hlLT5uZXdlc3QgPSBOVUxMOworICBkY2FjaGUtPmZyZWVsaXN0ID0g TlVMTDsKKyAgZGNhY2hlLT5zaXplID0gMDsKICAgbGFzdF9jYWNoZSA9IGRj YWNoZTsKKwogICByZXR1cm4gZGNhY2hlOwogfQogCi0vKiBGcmVlIGEgZGF0 YSBjYWNoZSAqLworLyogRnJlZSBhIGRhdGEgY2FjaGUuICAqLworCiB2b2lk CiBkY2FjaGVfZnJlZSAoRENBQ0hFICpkY2FjaGUpCiB7CisgIHN0cnVjdCBk Y2FjaGVfYmxvY2sgKmRiLCAqbmV4dDsKKwogICBpZiAobGFzdF9jYWNoZSA9 PSBkY2FjaGUpCiAgICAgbGFzdF9jYWNoZSA9IE5VTEw7CiAKLSAgeGZyZWUg KGRjYWNoZS0+dGhlX2NhY2hlKTsKKyAgc3BsYXlfdHJlZV9kZWxldGUgKGRj YWNoZS0+dHJlZSk7CisgIGZvciAoZGIgPSBkY2FjaGUtPmZyZWVsaXN0OyBk YiAhPSBOVUxMOyBkYiA9IG5leHQpCisgICAgeworICAgICAgbmV4dCA9IGRi LT5uZXdlcjsKKyAgICAgIHhmcmVlIChkYik7CisgICAgfQogICB4ZnJlZSAo ZGNhY2hlKTsKIH0KIApAQCAtNTIwLDY2ICszNjYsMTM4IEBAIGRjYWNoZV9m cmVlIChEQ0FDSEUgKmRjYWNoZSkKICAgIHRvIG9yIGZyb20gZGVidWdnZXIg YWRkcmVzcyBNWUFERFIuICBXcml0ZSB0byBpbmZlcmlvciBpZiBTSE9VTERf V1JJVEUgaXMKICAgIG5vbnplcm8uIAogCi0gICBSZXR1cm5zIGxlbmd0aCBv ZiBkYXRhIHdyaXR0ZW4gb3IgcmVhZDsgMCBmb3IgZXJyb3IuICAKLQotICAg VGhpcyByb3V0aW5lIGlzIGluZGVuZGVkIHRvIGJlIGNhbGxlZCBieSByZW1v dGVfeGZlcl8gZnVuY3Rpb25zLiAqLworICAgUmV0dXJucyBsZW5ndGggb2Yg ZGF0YSB3cml0dGVuIG9yIHJlYWQ7IDAgZm9yIGVycm9yLiAgKi8KIAogaW50 Ci1kY2FjaGVfeGZlcl9tZW1vcnkgKERDQUNIRSAqZGNhY2hlLCBDT1JFX0FE RFIgbWVtYWRkciwgZ2RiX2J5dGUgKm15YWRkciwKK2RjYWNoZV94ZmVyX21l bW9yeSAoc3RydWN0IHRhcmdldF9vcHMgKm9wcywgRENBQ0hFICpkY2FjaGUs CisJCSAgICBDT1JFX0FERFIgbWVtYWRkciwgZ2RiX2J5dGUgKm15YWRkciwK IAkJICAgIGludCBsZW4sIGludCBzaG91bGRfd3JpdGUpCiB7CiAgIGludCBp OworICBpbnQgcmVzOwogICBpbnQgKCp4ZnVuYykgKERDQUNIRSAqZGNhY2hl LCBDT1JFX0FERFIgYWRkciwgZ2RiX2J5dGUgKnB0cik7CiAgIHhmdW5jID0g c2hvdWxkX3dyaXRlID8gZGNhY2hlX3Bva2VfYnl0ZSA6IGRjYWNoZV9wZWVr X2J5dGU7CiAKKyAgLyogRG8gd3JpdGUtdGhyb3VnaCBmaXJzdCwgc28gdGhh dCBpZiBpdCBmYWlscywgd2UgZG9uJ3Qgd3JpdGUgdG8KKyAgICAgdGhlIGNh Y2hlIGF0IGFsbC4gICovCisKKyAgaWYgKHNob3VsZF93cml0ZSkKKyAgICB7 CisgICAgICByZXMgPSB0YXJnZXRfd3JpdGUgKG9wcywgVEFSR0VUX09CSkVD VF9SQVdfTUVNT1JZLAorCQkJICBOVUxMLCBteWFkZHIsIG1lbWFkZHIsIGxl bik7CisgICAgICBpZiAocmVzIDwgbGVuKQorCXJldHVybiAwOworICAgIH0K KyAgICAgIAogICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCiAgICAgewog ICAgICAgaWYgKCF4ZnVuYyAoZGNhY2hlLCBtZW1hZGRyICsgaSwgbXlhZGRy ICsgaSkpCiAJcmV0dXJuIDA7CiAgICAgfQorICAgIAorICByZXR1cm4gbGVu OworfQogCi0gIC8qIEZJWE1FOiBUaGVyZSBtYXkgYmUgc29tZSBiZW5lZml0 IGZyb20gbW92aW5nIHRoZSBjYWNoZSB3cml0ZWJhY2sKLSAgICAgdG8gYSBo aWdoZXIgbGF5ZXIsIGFzIGl0IGNvdWxkIG9jY3VyIGFmdGVyIGEgc2VxdWVu Y2Ugb2Ygc21hbGxlcgotICAgICB3cml0ZXMgaGF2ZSBiZWVuIGNvbXBsZXRl ZCAoYXMgd2hlbiBhIHN0YWNrIGZyYW1lIGlzIGNvbnN0cnVjdGVkCi0gICAg IGZvciBhbiBpbmZlcmlvciBmdW5jdGlvbiBjYWxsKS4gIE5vdGUgdGhhdCBv bmx5IG1vdmluZyBpdCB1cCBvbmUKLSAgICAgbGV2ZWwgdG8gdGFyZ2V0X3hm ZXJfbWVtb3J5KCkgKGFsc28gdGFyZ2V0X3hmZXJfbWVtb3J5X3BhcnRpYWwo KSkKLSAgICAgaXMgbm90IHN1ZmZpY2VudCwgc2luY2Ugd2Ugd2FudCB0byBj b2FsZXNjZSBtZW1vcnkgdHJhbnNmZXJzIHRoYXQKLSAgICAgYXJlICJsb2dp Y2FsbHkiIGNvbm5lY3RlZCBidXQgbm90IGFjdHVhbGx5IGEgc2luZ2xlIGNh bGwgdG8gb25lCi0gICAgIG9mIHRoZSBtZW1vcnkgdHJhbnNmZXIgZnVuY3Rp b25zLiAqLworLyogRklYTUU6IFRoZXJlIHdvdWxkIGJlIHNvbWUgYmVuZWZp dCB0byBtYWtpbmcgdGhlIGNhY2hlIHdyaXRlLWJhY2sgYW5kCisgICBtb3Zp bmcgdGhlIHdyaXRlYmFjayBvcGVyYXRpb24gdG8gYSBoaWdoZXIgbGF5ZXIs IGFzIGl0IGNvdWxkIG9jY3VyCisgICBhZnRlciBhIHNlcXVlbmNlIG9mIHNt YWxsZXIgd3JpdGVzIGhhdmUgYmVlbiBjb21wbGV0ZWQgKGFzIHdoZW4gYSBz dGFjaworICAgZnJhbWUgaXMgY29uc3RydWN0ZWQgZm9yIGFuIGluZmVyaW9y IGZ1bmN0aW9uIGNhbGwpLiAgTm90ZSB0aGF0IG9ubHkKKyAgIG1vdmluZyBp dCB1cCBvbmUgbGV2ZWwgdG8gdGFyZ2V0X3hmZXJfbWVtb3J5W19wYXJ0aWFs XSgpIGlzIG5vdAorICAgc3VmZmljaWVudCBzaW5jZSB3ZSB3YW50IHRvIGNv YWxlc2NlIG1lbW9yeSB0cmFuc2ZlcnMgdGhhdCBhcmUKKyAgICJsb2dpY2Fs bHkiIGNvbm5lY3RlZCBidXQgbm90IGFjdHVhbGx5IGEgc2luZ2xlIGNhbGwg dG8gb25lIG9mIHRoZQorICAgbWVtb3J5IHRyYW5zZmVyIGZ1bmN0aW9ucy4g ICovCiAKLSAgaWYgKHNob3VsZF93cml0ZSkKLSAgICBkY2FjaGVfd3JpdGVi YWNrIChkY2FjaGUpOworc3RhdGljIHZvaWQKK2RjYWNoZV9wcmludF9saW5l IChpbnQgaW5kZXgpCit7CisgIHNwbGF5X3RyZWVfbm9kZSBuOworICBzdHJ1 Y3QgZGNhY2hlX2Jsb2NrICpkYjsKKyAgaW50IGksIGo7CisKKyAgaWYgKCFs YXN0X2NhY2hlKQorICAgIHsKKyAgICAgIHByaW50Zl9maWx0ZXJlZCAoXygi Tm8gZGF0YSBjYWNoZSBhdmFpbGFibGUuXG4iKSk7CisgICAgICByZXR1cm47 CisgICAgfQorCisgIG4gPSBzcGxheV90cmVlX21pbiAobGFzdF9jYWNoZS0+ dHJlZSk7CisKKyAgZm9yIChpID0gaW5kZXg7IGkgPiAwOyAtLWkpCisgICAg eworICAgICAgaWYgKCFuKQorCWJyZWFrOworICAgICAgbiA9IHNwbGF5X3Ry ZWVfc3VjY2Vzc29yIChsYXN0X2NhY2hlLT50cmVlLCBuLT5rZXkpOworICAg IH0KKworICBpZiAoIW4pCisgICAgeworICAgICAgcHJpbnRmX2ZpbHRlcmVk IChfKCJObyBzdWNoIGNhY2hlIGxpbmUgZXhpc3RzLlxuIikpOworICAgICAg cmV0dXJuOworICAgIH0KICAgICAKLSAgcmV0dXJuIGxlbjsKKyAgZGIgPSAo c3RydWN0IGRjYWNoZV9ibG9jayAqKSBuLT52YWx1ZTsKKworICBwcmludGZf ZmlsdGVyZWQgKF8oIkxpbmUgJWQ6IGFkZHJlc3MgJWx4IFslZCBoaXRzXVxu IiksCisJCSAgaW5kZXgsIGRiLT5hZGRyLCBkYi0+cmVmcyk7CisKKyAgZm9y IChqID0gMDsgaiA8IExJTkVfU0laRTsgaisrKQorICAgIHsKKyAgICAgIHBy aW50Zl9maWx0ZXJlZCAoIiUwMnggIiwgZGItPmRhdGFbal0pOworCisgICAg ICAvKiBQcmludCBhIG5ld2xpbmUgZXZlcnkgMTYgYnl0ZXMgKDQ4IGNoYXJh Y3RlcnMpICovCisgICAgICBpZiAoKGogJSAxNiA9PSAxNSkgJiYgKGogIT0g TElORV9TSVpFIC0gMSkpCisJcHJpbnRmX2ZpbHRlcmVkICgiXG4iKTsKKyAg ICB9CisgIHByaW50Zl9maWx0ZXJlZCAoIlxuIik7CiB9CiAKIHN0YXRpYyB2 b2lkCiBkY2FjaGVfaW5mbyAoY2hhciAqZXhwLCBpbnQgdHR5KQogewotICBz dHJ1Y3QgZGNhY2hlX2Jsb2NrICpwOworICBzcGxheV90cmVlX25vZGUgbjsK KyAgaW50IGksIHJlZmNvdW50LCBsaW5lbm87CisKKyAgaWYgKGV4cCkKKyAg ICB7CisgICAgICBjaGFyICpsaW5lc3RhcnQ7CisgICAgICBpID0gc3RydG9s IChleHAsICZsaW5lc3RhcnQsIDEwKTsKKyAgICAgIGlmIChsaW5lc3RhcnQg PT0gZXhwIHx8IGkgPCAwKQorCXsKKwkgIHByaW50Zl9maWx0ZXJlZCAoXygi VXNhZ2U6IGluZm8gZGNhY2hlIFtsaW5lbnVtYmVyXVxuIikpOworICAgICAg ICAgIHJldHVybjsKKwl9CisKKyAgICAgIGRjYWNoZV9wcmludF9saW5lIChp KTsKKyAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgcHJpbnRmX2ZpbHRlcmVk IChfKCJEY2FjaGUgbGluZSB3aWR0aCAlZCwgZGVwdGggJWRcbiIpLAorICBw cmludGZfZmlsdGVyZWQgKF8oIkRjYWNoZSBsaW5lIHdpZHRoICVkLCBtYXhp bXVtIHNpemUgJWRcbiIpLAogCQkgICBMSU5FX1NJWkUsIERDQUNIRV9TSVpF KTsKIAotICBpZiAobGFzdF9jYWNoZSkKKyAgaWYgKCFsYXN0X2NhY2hlKQog ICAgIHsKLSAgICAgIHByaW50Zl9maWx0ZXJlZCAoXygiQ2FjaGUgc3RhdGU6 XG4iKSk7CisgICAgICBwcmludGZfZmlsdGVyZWQgKF8oIk5vIGRhdGEgY2Fj aGUgYXZhaWxhYmxlLlxuIikpOworICAgICAgcmV0dXJuOworICAgIH0KIAot ICAgICAgZm9yIChwID0gbGFzdF9jYWNoZS0+dmFsaWRfaGVhZDsgcDsgcCA9 IHAtPnApCi0JewotCSAgaW50IGo7Ci0JICBwcmludGZfZmlsdGVyZWQgKF8o IkxpbmUgYXQgJXMsIHJlZmVyZW5jZWQgJWQgdGltZXNcbiIpLAotCQkJICAg cGFkZHJlc3MgKHRhcmdldF9nZGJhcmNoLCBwLT5hZGRyKSwgcC0+cmVmcyk7 Ci0KLQkgIGZvciAoaiA9IDA7IGogPCBMSU5FX1NJWkU7IGorKykKLQkgICAg cHJpbnRmX2ZpbHRlcmVkICgiJTAyeCIsIHAtPmRhdGFbal0gJiAweEZGKTsK LQkgIHByaW50Zl9maWx0ZXJlZCAoKCJcbiIpKTsKLQotCSAgZm9yIChqID0g MDsgaiA8IExJTkVfU0laRTsgaisrKQotCSAgICBwcmludGZfZmlsdGVyZWQg KCIgJWMiLCBzdGF0ZV9jaGFyc1twLT5zdGF0ZVtqXV0pOwotCSAgcHJpbnRm X2ZpbHRlcmVkICgiXG4iKTsKLQl9CisgIHJlZmNvdW50ID0gMDsKKworICBu ID0gc3BsYXlfdHJlZV9taW4gKGxhc3RfY2FjaGUtPnRyZWUpOworICBpID0g MDsKKworICB3aGlsZSAobikKKyAgICB7CisgICAgICBzdHJ1Y3QgZGNhY2hl X2Jsb2NrICpkYiA9IChzdHJ1Y3QgZGNhY2hlX2Jsb2NrICopIG4tPnZhbHVl OworCisgICAgICBwcmludGZfZmlsdGVyZWQgKF8oIkxpbmUgJWQ6IGFkZHJl c3MgJWx4IFslZCBoaXRzXVxuIiksCisJCSAgICAgICBpLCBkYi0+YWRkciwg ZGItPnJlZnMpOworICAgICAgaSsrOworICAgICAgcmVmY291bnQgKz0gZGIt PnJlZnM7CisKKyAgICAgIG4gPSBzcGxheV90cmVlX3N1Y2Nlc3NvciAobGFz dF9jYWNoZS0+dHJlZSwgbi0+a2V5KTsKICAgICB9CisKKyAgcHJpbnRmX2Zp bHRlcmVkIChfKCJDYWNoZSBzdGF0ZTogJWQgYWN0aXZlIGxpbmVzLCAlZCBo aXRzXG4iKSwgaSwgcmVmY291bnQpOwogfQogCiB2b2lkCkBAIC02MDEsOCAr NTE5LDcgQEAgdm9sYXRpbGUgcmVnaXN0ZXJzIGFyZSBpbiB1c2UuICBCeSBk ZWZhdQogICBhZGRfaW5mbyAoImRjYWNoZSIsIGRjYWNoZV9pbmZvLAogCSAg ICBfKCJcCiBQcmludCBpbmZvcm1hdGlvbiBvbiB0aGUgZGNhY2hlIHBlcmZv cm1hbmNlLlxuXAotVGhlIHN0YXRlIG9mIGVhY2ggY2FjaGVkIGJ5dGUgaXMg cmVwcmVzZW50ZWQgYnkgYSBsZXR0ZXI6XG5cCi0gIEkgPSBpbnZhbGlkXG5c Ci0gIEQgPSBkaXJ0eVxuXAotICBWID0gdmFsaWQiKSk7CitXaXRoIG5vIGFy Z3VtZW50cywgdGhpcyBjb21tYW5kIHByaW50cyB0aGUgY2FjaGUgY29uZmln dXJhdGlvbiBhbmQgYVxuXAorc3VtbWFyeSBvZiBlYWNoIGxpbmUgaW4gdGhl IGNhY2hlLiAgVXNlIFwiaW5mbyBkY2FjaGUgPGxpbmVubz4gdG8gZHVtcFwi XG5cCit0aGUgY29udGVudHMgb2YgYSBnaXZlbiBsaW5lLiIpKTsKIH0KSW5k ZXg6IGRjYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6 IC9jdnMvc3JjL3NyYy9nZGIvZGNhY2hlLmgsdgpyZXRyaWV2aW5nIHJldmlz aW9uIDEuMTQKZGlmZiAtdSAtcCAtcjEuMTQgZGNhY2hlLmgKLS0tIGRjYWNo ZS5oCTMgSmFuIDIwMDkgMDU6NTc6NTEgLTAwMDAJMS4xNAorKysgZGNhY2hl LmgJMjAgQXVnIDIwMDkgMjI6MDk6NDcgLTAwMDAKQEAgLTM1LDcgKzM1LDcg QEAgdm9pZCBkY2FjaGVfZnJlZSAoRENBQ0hFICopOwogCiAvKiBTaW1wbGUg dG8gY2FsbCBmcm9tIDxyZW1vdGU+X3hmZXJfbWVtb3J5ICovCiAKLWludCBk Y2FjaGVfeGZlcl9tZW1vcnkgKERDQUNIRSAqY2FjaGUsIENPUkVfQUREUiBt ZW0sIGdkYl9ieXRlICpteSwKLQkJCWludCBsZW4sIGludCBzaG91bGRfd3Jp dGUpOworaW50IGRjYWNoZV94ZmVyX21lbW9yeSAoc3RydWN0IHRhcmdldF9v cHMgKm9wcywgRENBQ0hFICpjYWNoZSwgQ09SRV9BRERSIG1lbSwKKwkJCWdk Yl9ieXRlICpteSwgaW50IGxlbiwgaW50IHNob3VsZF93cml0ZSk7CiAKICNl bmRpZiAvKiBEQ0FDSEVfSCAqLwpJbmRleDogdGFyZ2V0LmMKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi90YXJn ZXQuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yMjAKZGlmZiAtdSAtcCAt cjEuMjIwIHRhcmdldC5jCi0tLSB0YXJnZXQuYwkxNCBBdWcgMjAwOSAxNDoy ODoxNCAtMDAwMAkxLjIyMAorKysgdGFyZ2V0LmMJMjAgQXVnIDIwMDkgMjI6 MDk6NDcgLTAwMDAKQEAgLTEyMjUsMTYgKzEyMjUsMTQgQEAgbWVtb3J5X3hm ZXJfcGFydGlhbCAoc3RydWN0IHRhcmdldF9vcHMgKgogCiAgIGlmIChyZWdp b24tPmF0dHJpYi5jYWNoZSkKICAgICB7Ci0gICAgICAvKiBGSVhNRSBkcm93 LzIwMDYtMDgtMDk6IFRoaXMgY2FsbCBkaXNjYXJkcyBPUFMsIHNvIHRoZSBy YXcKLQkgbWVtb3J5IHJlcXVlc3Qgd2lsbCBzdGFydCBiYWNrIGF0IGN1cnJl bnRfdGFyZ2V0LiAgKi8KICAgICAgIGlmIChyZWFkYnVmICE9IE5VTEwpCi0J cmVzID0gZGNhY2hlX3hmZXJfbWVtb3J5ICh0YXJnZXRfZGNhY2hlLCBtZW1h ZGRyLCByZWFkYnVmLAorCXJlcyA9IGRjYWNoZV94ZmVyX21lbW9yeSAob3Bz LCB0YXJnZXRfZGNhY2hlLCBtZW1hZGRyLCByZWFkYnVmLAogCQkJCSAgcmVn X2xlbiwgMCk7CiAgICAgICBlbHNlCiAJLyogRklYTUUgZHJvdy8yMDA2LTA4 LTA5OiBJZiB3ZSdyZSBnb2luZyB0byBwcmVzZXJ2ZSBjb25zdAogCSAgIGNv cnJlY3RuZXNzIGRjYWNoZV94ZmVyX21lbW9yeSBzaG91bGQgdGFrZSByZWFk YnVmIGFuZAogCSAgIHdyaXRlYnVmLiAgKi8KLQlyZXMgPSBkY2FjaGVfeGZl cl9tZW1vcnkgKHRhcmdldF9kY2FjaGUsIG1lbWFkZHIsCisJcmVzID0gZGNh Y2hlX3hmZXJfbWVtb3J5IChvcHMsIHRhcmdldF9kY2FjaGUsIG1lbWFkZHIs CiAJCQkJICAodm9pZCAqKSB3cml0ZWJ1ZiwKIAkJCQkgIHJlZ19sZW4sIDEp OwogICAgICAgaWYgKHJlcyA8PSAwKQo= --000e0cd290802d704404719a583a--