From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 4665 invoked by alias); 18 Feb 2013 10:02:04 -0000 Received: (qmail 4628 invoked by uid 22791); 18 Feb 2013 10:02:01 -0000 X-SWARE-Spam-Status: No, hits=-1.9 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,KAM_STOCKTIP,KHOP_RCVD_TRUST,KHOP_THREADED,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE,TW_XZ,TW_YM X-Spam-Check-By: sourceware.org Received: from mail-oa0-f44.google.com (HELO mail-oa0-f44.google.com) (209.85.219.44) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 18 Feb 2013 10:01:50 +0000 Received: by mail-oa0-f44.google.com with SMTP id h1so5686051oag.3 for ; Mon, 18 Feb 2013 02:01:50 -0800 (PST) X-Received: by 10.60.27.136 with SMTP id t8mr5697626oeg.92.1361181710235; Mon, 18 Feb 2013 02:01:50 -0800 (PST) MIME-Version: 1.0 Received: by 10.60.46.133 with HTTP; Mon, 18 Feb 2013 02:01:10 -0800 (PST) In-Reply-To: References: <503DCEC5.2010308@mentor.com> <503E2A7A.2030709@codesourcery.com> From: Hui Zhu Date: Mon, 18 Feb 2013 10:02:00 -0000 Message-ID: Subject: Re: [PATCH] target attributes [1/5] core and load from target function To: "Abid, Hafiz" Cc: "Qi, Yao" , "Zhu, Hui" , gdb-patches ml Content-Type: multipart/mixed; boundary=e89a8fb1fe2a50381204d5fcd026 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: 2013-02/txt/msg00444.txt.bz2 --e89a8fb1fe2a50381204d5fcd026 Content-Type: text/plain; charset=ISO-8859-1 Content-length: 5424 On Fri, Nov 30, 2012 at 2:03 PM, Abid, Hafiz wrote: > Hi, > >>+ ta = xzalloc (sizeof (struct target_attribute)); >>+ ta->name = xstrdup (name); > This name is not freed and will leak. Added xfree in clear_target_attributes. > >>+ if (*tap) >>+ (*tap)->next = ta; >>+ else >>+ target_attributes_list = ta; >>+ *tap = ta; >>+ >>+ user_data = &ta; > > So you are assigning ta to (*tap) and (*tap)->next. Then user_data is also being assigned. It did not look right to me. I wanted to bring it in your attention in case it is a typo. user_data will always point to the last one of target_attributes_list. Could you tell me which part is wrong? > >>+ unsigned int agent_access; >>+ unsigned int gdb_access; > I can understand the access mode for GDB. But what agent_access means and how it will effect a user? There is the introduce of agent http://sourceware.org/gdb/current/onlinedocs/gdb/Agent-Expressions.html Post a new version according to your review. Thanks, Hui 2013-02-18 Hui Zhu * Makefile.in (SFILES): Add target-attributes.c. (HFILES_NO_SRCDIR): Add target-attributes.h. (COMMON_OBS): Add target-attributes.o. * breakpoint.h (breakpoint): Add target_only_cond_check. * remote.c (target-attributes.h): New include. (PACKET_qXfer_target_attributes_read): New enum. (remote_start_remote): Add handler for target attributes. (remote_protocol_features): Add "qXfer:target-attributes:read". (remote_xfer_partial): Add handler for TARGET_OBJECT_ATTRIBUTES. (_initialize_remote): Add command "set remote target-attributes-packet". (target-attributes.c, target-attributes.h): New files. * tracepoint.c (target-attributes.h): New include. (find_trace_state_variable_number, trace_variable_number_check_1, trace_variable_number_check): New functions. (trace_variable_command): Call trace_variable_number_check_1. (merge_uploaded_trace_state_variables): Call trace_variable_number_check. tracepoint.h (trace_variable_number_check): New extern. > >> -----Original Message----- >> From: gdb-patches-owner@sourceware.org [mailto:gdb-patches- >> owner@sourceware.org] On Behalf Of Hui Zhu >> Sent: Wednesday, November 21, 2012 8:55 AM >> To: Qi, Yao >> Cc: Zhu, Hui; gdb-patches ml >> Subject: Re: [PATCH] target attributes [1/5] core and load from target >> function >> >> On Sun, Sep 2, 2012 at 6:37 PM, Hui Zhu wrote: >> > On Wed, Aug 29, 2012 at 10:43 PM, Yao Qi >> wrote: >> >> On 08/29/2012 04:11 PM, Hui Zhu wrote: >> >>> +static void >> >>> +target_attribute_address_handler (struct gdb_xml_parser *parser, >> >>> + const struct gdb_xml_element >> *element, >> >>> + void *user_data, >> >>> + VEC(gdb_xml_value_s) *attributes) { >> >>> + int i, len; >> >>> + struct gdb_xml_value *attrs = VEC_address (gdb_xml_value_s, >> >>> +attributes); >> >>> + struct target_attribute *ta = *(struct target_attribute >> >>> +**)user_data; >> >>> + CORE_ADDR start, end; >> >>> + struct target_attribute_address *ta_addr; >> >> >> >> I happen to see some compilation warnings on my new Fedora 16 box, >> >> while these warnings don't appear on my Ubuntu box. >> >> >> >> ... -Werror -c -o target-memory.o -MT target-memory.o -MMD -MP -MF >> >> .deps/target-memory.Tpo ../../../git/gdb/target-memory.c >> >> ../../../git/gdb/target-attributes.c: In function >> 'target_attribute_address_handler': >> >> ../../../git/gdb/target-attributes.c:487:16: error: 'end' may be >> used >> >> uninitialized in this function [-Werror=uninitialized] >> >> ../../../git/gdb/target-attributes.c:486:18: error: 'start' may be >> >> used uninitialized in this function [-Werror=uninitialized] >> >> ../../../git/gdb/target-attributes.c: In function >> 'target_attribute_attr_handler': >> >> ../../../git/gdb/target-attributes.c:376:12: error: 'type' may be >> >> used uninitialized in this function [-Werror=uninitialized] >> >> ../../../git/gdb/target-attributes.c: In function >> 'target_attribute_type': >> >> ../../../git/gdb/target-attributes.c:632:3: error: 'ret' may be used >> >> uninitialized in this function [-Werror=uninitialized] >> >> cc1: all warnings being treated as errors >> >> make: *** [target-attributes.o] Error 1 >> >> >> >> The gcc I am using is 4.6.3 >> >> $ gcc --version >> >> gcc (GCC) 4.6.3 20120306 (Red Hat 4.6.3-2) >> >> >> >> We have to get these warnings fixed. >> >> >> >>> + >> >>> + len = VEC_length (gdb_xml_value_s, attributes); for (i = 0; i < >> >>> + len; i++) >> >>> + { >> >>> + if (strcmp (attrs[i].name, "start") == 0) >> >>> + start = * (ULONGEST *) attrs[i].value; >> >>> + else if (strcmp (attrs[i].name, "end") == 0) >> >>> + end = * (ULONGEST *) attrs[i].value; >> >>> + else >> >>> + gdb_xml_error (parser, _("Unknown attribute name '%s'."), >> >>> + attrs[i].name); >> >>> + } >> >>> + >> >>> + ta_addr = xmalloc (sizeof (struct target_attribute_address)); >> >>> + ta_addr->start = start; ta_addr->end = end; >> >>> + >> >>> + ta_addr->prev = ta->addresses; >> >>> + ta->addresses = ta_addr; >> >>> +} >> >> >> >> -- >> >> Yao >> > >> > Thanks. I post a new version. >> > >> > Best, >> > Hui >> >> Got some error when built with trunk. Post a new version for this >> error. >> >> Thanks, >> Hui --e89a8fb1fe2a50381204d5fcd026 Content-Type: text/plain; charset=US-ASCII; name="target_attribute_load.txt" Content-Disposition: attachment; filename="target_attribute_load.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hdbgeqfq0 Content-length: 43066 LS0tIGEvTWFrZWZpbGUuaW4KKysrIGIvTWFrZWZpbGUuaW4KQEAgLTc0Miw3 ICs3NDIsNyBAQCBTRklMRVMgPSBhZGEtZXhwLnkgYWRhLWxhbmcuYyBhZGEt dHlwZXByCiAJc29saWIuYyBzb2xpYi10YXJnZXQuYyBzb3VyY2UuYyBcCiAJ c3RhYnNyZWFkLmMgc3RhY2suYyBwcm9iZS5jIHN0YXAtcHJvYmUuYyBzdGQt cmVncy5jIFwKIAlzeW1maWxlLmMgc3ltZmlsZS1tZW0uYyBzeW1taXNjLmMg c3ltdGFiLmMgXAotCXRhcmdldC5jIHRhcmdldC1kZXNjcmlwdGlvbnMuYyB0 YXJnZXQtbWVtb3J5LmMgXAorCXRhcmdldC5jIHRhcmdldC1hdHRyaWJ1dGVz LmMgdGFyZ2V0LWRlc2NyaXB0aW9ucy5jIHRhcmdldC1tZW1vcnkuYyBcCiAJ dGhyZWFkLmMgdG9wLmMgdHJhY2Vwb2ludC5jIFwKIAl0cmFkLWZyYW1lLmMg XAogCXRyYW1wLWZyYW1lLmMgXApAQCAtODM1LDcgKzgzNSw3IEBAIGdudWxp Yi9pbXBvcnQvc3RkZGVmLmluLmggZ251bGliL2ltcG9ydC8KIGNvbW1vbi9j b21tb24tdXRpbHMuaCBjb21tb24veG1sLXV0aWxzLmggY29tbW9uL2J1ZmZl ci5oIGNvbW1vbi9wdGlkLmggXAogY29tbW9uL2Zvcm1hdC5oIGNvbW1vbi9o b3N0LWRlZnMuaCB1dGlscy5oIGNvbW1vbi9xdWV1ZS5oIFwKIGNvbW1vbi9s aW51eC1vc2RhdGEuaCBnZGItZGxmY24uaCBhdXRvLWxvYWQuaCBwcm9iZS5o IHN0YXAtcHJvYmUuaCBcCi1nZGJfYmZkLmggc3BhcmMtcmF2ZW5zY2FyLXRo cmVhZC5oIHBwYy1yYXZlbnNjYXItdGhyZWFkLmgKK2dkYl9iZmQuaCBzcGFy Yy1yYXZlbnNjYXItdGhyZWFkLmggcHBjLXJhdmVuc2Nhci10aHJlYWQuaCB0 YXJnZXQtYXR0cmlidXRlcy5oCiAKICMgSGVhZGVyIGZpbGVzIHRoYXQgYWxy ZWFkeSBoYXZlIHNyY2RpciBpbiB0aGVtLCBvciB3aGljaCBhcmUgaW4gb2Jq ZGlyLgogCkBAIC05MjQsNyArOTI0LDggQEAgQ09NTU9OX09CUyA9ICQoREVQ RklMRVMpICQoQ09ORklHX09CUykgJAogCXNvbGliLm8gc29saWItdGFyZ2V0 Lm8gXAogCXByb2xvZ3VlLXZhbHVlLm8gbWVtb3J5LW1hcC5vIG1lbXJhbmdl Lm8gXAogCXhtbC1zdXBwb3J0Lm8geG1sLXN5c2NhbGwubyB4bWwtdXRpbHMu byBcCi0JdGFyZ2V0LWRlc2NyaXB0aW9ucy5vIHRhcmdldC1tZW1vcnkubyB4 bWwtdGRlc2MubyB4bWwtYnVpbHRpbi5vIFwKKwl0YXJnZXQtYXR0cmlidXRl cy5vIHRhcmdldC1kZXNjcmlwdGlvbnMubyB0YXJnZXQtbWVtb3J5Lm8gXAor CXhtbC10ZGVzYy5vIHhtbC1idWlsdGluLm8gXAogCWluZmVyaW9yLm8gb3Nk YXRhLm8gZ2RiX3VzbGVlcC5vIHJlY29yZC5vIGdjb3JlLm8gXAogCWdkYl92 ZWNzLm8gaml0Lm8gcHJvZ3NwYWNlLm8gc2tpcC5vIHByb2JlLm8gXAogCWNv bW1vbi11dGlscy5vIGJ1ZmZlci5vIHB0aWQubyBnZGItZGxmY24ubyBjb21t b24tYWdlbnQubyBcCi0tLSBhL2JyZWFrcG9pbnQuaAorKysgYi9icmVha3Bv aW50LmgKQEAgLTcyNiw2ICs3MjYsMTEgQEAgc3RydWN0IGJyZWFrcG9pbnQK ICAgICAgICB0aGVyZSBpcyBubyBjb25kaXRpb24uICAqLwogICAgIGNoYXIg KmNvbmRfc3RyaW5nOwogCisgICAgLyogSWYgVHJ1ZSwgdGhlIEdEQiBzaWRl IGNhbm5vdCBkbyB0aGUgY29uZGl0aW9uIGNoZWNrIGZvcgorICAgICAgIHRo ZSBjb25kaXRpb24gb2YgdGhpcyBicmVha3BvaW50IGFuZCB0aGlzIGNvbmRp dGlvbiBvbmx5IGNhbgorICAgICAgIGJlIGNoZWNrZWQgaW4gYWdlbnQgc2lk ZS4gICovCisgICAgaW50IHRhcmdldF9vbmx5X2NvbmRfY2hlY2s7CisKICAg ICAvKiBTdHJpbmcgZm9ybSBvZiBleHRyYSBwYXJhbWV0ZXJzLCBvciBOVUxM IGlmIHRoZXJlIGFyZSBub25lLiAgKi8KICAgICBjaGFyICpleHRyYV9zdHJp bmc7CiAKLS0tIGEvcmVtb3RlLmMKKysrIGIvcmVtb3RlLmMKQEAgLTQ0LDYg KzQ0LDcgQEAKICNpbmNsdWRlICJjbGkvY2xpLXNldHNob3cuaCIKICNpbmNs dWRlICJ0YXJnZXQtZGVzY3JpcHRpb25zLmgiCiAjaW5jbHVkZSAiZ2RiX2Jm ZC5oIgorI2luY2x1ZGUgInRhcmdldC1hdHRyaWJ1dGVzLmgiCiAKICNpbmNs dWRlIDxjdHlwZS5oPgogI2luY2x1ZGUgPHN5cy90aW1lLmg+CkBAIC0xMjg0 LDYgKzEyODUsNyBAQCBlbnVtIHsKICAgUEFDS0VUX3FYZmVyX2ZkcGljLAog ICBQQUNLRVRfUURpc2FibGVSYW5kb21pemF0aW9uLAogICBQQUNLRVRfUUFn ZW50LAorICBQQUNLRVRfcVhmZXJfdGFyZ2V0X2F0dHJpYnV0ZXNfcmVhZCwK ICAgUEFDS0VUX01BWAogfTsKIApAQCAtMzU1OSw2ICszNTYxLDIyIEBAIHJl bW90ZV9zdGFydF9yZW1vdGUgKGludCBmcm9tX3R0eSwgc3RydWMKIAlyZW1v dGVfY2hlY2tfc3ltYm9scyAoc3ltZmlsZV9vYmpmaWxlKTsKICAgICB9CiAK KyAgaWYgKHJlbW90ZV9wcm90b2NvbF9wYWNrZXRzW1BBQ0tFVF9xWGZlcl90 YXJnZXRfYXR0cmlidXRlc19yZWFkXS5zdXBwb3J0CisJIT0gUEFDS0VUX0RJ U0FCTEUpCisgICAgeworICAgICAgY2hhciAqdGV4dDsKKworICAgICAgdGV4 dCA9IHRhcmdldF9yZWFkX3N0cmFsbG9jICgmY3VycmVudF90YXJnZXQsIFRB UkdFVF9PQkpFQ1RfQVRUUklCVVRFUywKKwkJCQkgICBOVUxMKTsKKyAgICAg IGlmICh0ZXh0ICE9IE5VTEwpCisJeworCSAgc3RydWN0IGNsZWFudXAgKmJh Y2tfdG8gPSBtYWtlX2NsZWFudXAgKHhmcmVlLCB0ZXh0KTsKKworICAgICAg ICAgIGFkZF94bWxfdGFyZ2V0X2F0dHJpYnV0ZXMgKHRleHQpOworCSAgZG9f Y2xlYW51cHMgKGJhY2tfdG8pOworCX0KKyAgICB9CisKICAgLyogUG9zc2li bHkgdGhlIHRhcmdldCBoYXMgYmVlbiBlbmdhZ2VkIGluIGEgdHJhY2UgcnVu IHN0YXJ0ZWQKICAgICAgcHJldmlvdXNseTsgZmluZCBvdXQgd2hlcmUgdGhp bmdzIGFyZSBhdC4gICovCiAgIGlmIChyZW1vdGVfZ2V0X3RyYWNlX3N0YXR1 cyAoY3VycmVudF90cmFjZV9zdGF0dXMgKCkpICE9IC0xKQpAQCAtMzk5NSw2 ICs0MDEzLDggQEAgc3RhdGljIHN0cnVjdCBwcm90b2NvbF9mZWF0dXJlIHJl bW90ZV9wcgogICB7ICJRQWdlbnQiLCBQQUNLRVRfRElTQUJMRSwgcmVtb3Rl X3N1cHBvcnRlZF9wYWNrZXQsIFBBQ0tFVF9RQWdlbnR9LAogICB7ICJ0cmFj ZW56IiwgUEFDS0VUX0RJU0FCTEUsCiAgICAgcmVtb3RlX3N0cmluZ190cmFj aW5nX2ZlYXR1cmUsIC0xIH0sCisgIHsgInFYZmVyOnRhcmdldC1hdHRyaWJ1 dGVzOnJlYWQiLCBQQUNLRVRfRElTQUJMRSwgcmVtb3RlX3N1cHBvcnRlZF9w YWNrZXQsCisgICAgUEFDS0VUX3FYZmVyX3RhcmdldF9hdHRyaWJ1dGVzX3Jl YWQgfSwKIH07CiAKIHN0YXRpYyBjaGFyICpyZW1vdGVfc3VwcG9ydF94bWw7 CkBAIC04Nzk2LDYgKzg4MTYsMTIgQEAgcmVtb3RlX3hmZXJfcGFydGlhbCAo c3RydWN0IHRhcmdldF9vcHMgKgogICAgICAgcmV0dXJuIHJlbW90ZV9yZWFk X3F4ZmVyIChvcHMsICJ1aWIiLCBhbm5leCwgcmVhZGJ1Ziwgb2Zmc2V0LCBs ZW4sCiAJCQkJJnJlbW90ZV9wcm90b2NvbF9wYWNrZXRzW1BBQ0tFVF9xWGZl cl91aWJdKTsKIAorICAgIGNhc2UgVEFSR0VUX09CSkVDVF9BVFRSSUJVVEVT OgorICAgICAgZ2RiX2Fzc2VydCAoYW5uZXggPT0gTlVMTCk7CisgICAgICBy ZXR1cm4gcmVtb3RlX3JlYWRfcXhmZXIKKwkob3BzLCAidGFyZ2V0LWF0dHJp YnV0ZXMiLCBhbm5leCwgcmVhZGJ1Ziwgb2Zmc2V0LCBsZW4sCisJICZyZW1v dGVfcHJvdG9jb2xfcGFja2V0c1tQQUNLRVRfcVhmZXJfdGFyZ2V0X2F0dHJp YnV0ZXNfcmVhZF0pOworCiAgICAgZGVmYXVsdDoKICAgICAgIHJldHVybiAt MTsKICAgICB9CkBAIC0xMTc1NSw2ICsxMTc4MSwxMCBAQCBTaG93IHRoZSBt YXhpbXVtIHNpemUgb2YgdGhlIGFkZHJlc3MgKGluCiAgIGFkZF9wYWNrZXRf Y29uZmlnX2NtZCAoJnJlbW90ZV9wcm90b2NvbF9wYWNrZXRzW1BBQ0tFVF9R QWdlbnRdLAogCQkJICJRQWdlbnQiLCAiYWdlbnQiLCAwKTsKIAorICBhZGRf cGFja2V0X2NvbmZpZ19jbWQKKyAgICAoJnJlbW90ZV9wcm90b2NvbF9wYWNr ZXRzW1BBQ0tFVF9xWGZlcl90YXJnZXRfYXR0cmlidXRlc19yZWFkXSwKKyAg ICAgInFYZmVyOnRhcmdldC1hdHRyaWJ1dGVzOnJlYWQiLCAidGFyZ2V0LWF0 dHJpYnV0ZXMiLCAwKTsKKwogICAvKiBLZWVwIHRoZSBvbGQgYGBzZXQgcmVt b3RlIFotcGFja2V0IC4uLicnIHdvcmtpbmcuICBFYWNoIGluZGl2aWR1YWwK ICAgICAgWiBzdWItcGFja2V0IGhhcyBpdHMgb3duIHNldCBhbmQgc2hvdyBj b21tYW5kcywgYnV0IHVzZXJzIG1heQogICAgICBoYXZlIHNldHMgdG8gdGhp cyB2YXJpYWJsZSBpbiB0aGVpciAuZ2RiaW5pdCBmaWxlcyAob3IgaW4gdGhl aXIKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQtYXR0cmlidXRlcy5jCkBA IC0wLDAgKzEsNjcwIEBACisvKiBUYXJnZXQgYXR0cmlidXRlcyBmb3IgR0RC LCB0aGUgR05VIGRlYnVnZ2VyLgorCisgICBDb3B5cmlnaHQgKEMpIDIwMTIg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgZmls ZSBpcyBwYXJ0IG9mIEdEQi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBM aWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy c2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNo b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAg SWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAg Ki8KKworI2luY2x1ZGUgImRlZnMuaCIKKyNpbmNsdWRlICJnZGJfc3RyaW5n LmgiCisjaW5jbHVkZSAidWktb3V0LmgiCisjaW5jbHVkZSAidHJhY2Vwb2lu dC5oIgorI2luY2x1ZGUgImdkYmNtZC5oIgorI2luY2x1ZGUgInRhcmdldC1h dHRyaWJ1dGVzLmgiCisKK3N0YXRpYyBzdHJ1Y3QgdGFyZ2V0X2F0dHJpYnV0 ZSAqdGFyZ2V0X2F0dHJpYnV0ZXNfbGlzdDsKKworc3RydWN0IHRhcmdldF9h dHRyaWJ1dGUgKgorZmluZF90YXJnZXRfYXR0cmlidXRlX25hbWUgKGNvbnN0 IGNoYXIgKm5hbWUpCit7CisgIHN0cnVjdCB0YXJnZXRfYXR0cmlidXRlICp0 YTsKKworICBmb3IgKHRhID0gdGFyZ2V0X2F0dHJpYnV0ZXNfbGlzdDsgdGE7 IHRhID0gdGEtPm5leHQpCisgICAgeworICAgICAgaWYgKHN0cmNtcCAodGEt Pm5hbWUsIG5hbWUpID09IDApCisJcmV0dXJuIHRhOworICAgIH0KKworICBy ZXR1cm4gTlVMTDsKK30KKworc3RydWN0IHRhcmdldF9hdHRyaWJ1dGUgKgor ZmluZF90YXJnZXRfYXR0cmlidXRlX2lkIChpbnQgaWQpCit7CisgIHN0cnVj dCB0YXJnZXRfYXR0cmlidXRlICp0YTsKKworICBmb3IgKHRhID0gdGFyZ2V0 X2F0dHJpYnV0ZXNfbGlzdDsgdGE7IHRhID0gdGEtPm5leHQpCisgICAgewor ICAgICAgaWYgKGlkID09IHRhLT5pZCkKKwlyZXR1cm4gdGE7CisgICAgfQor CisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGJwX2xvY2F0 aW9uICpjaGVja19hZ2VudF90YXJnZXRfYXR0cmlidXRlX2JsID0gTlVMTDsK K2NoYXIgKmNoZWNrX2FnZW50X3RhcmdldF9hdHRyaWJ1dGVfZXJyb3IgPSBO VUxMOworCitzdGF0aWMgdm9pZAorY2xlYXJfY2hlY2tfYWdlbnRfdGFyZ2V0 X2F0dHJpYnV0ZSAodm9pZCAqdW51c2VkKQoreworICBjaGVja19hZ2VudF90 YXJnZXRfYXR0cmlidXRlX2JsID0gTlVMTDsKK30KKworc3RydWN0IGNsZWFu dXAgKgorc2V0X2NoZWNrX2FnZW50X3RhcmdldF9hdHRyaWJ1dGUgKHN0cnVj dCBicF9sb2NhdGlvbiAqYmwpCit7CisgIGNoZWNrX2FnZW50X3RhcmdldF9h dHRyaWJ1dGVfYmwgPSBibDsKKyAgY2hlY2tfYWdlbnRfdGFyZ2V0X2F0dHJp YnV0ZV9lcnJvciA9IE5VTEw7CisKKyAgcmV0dXJuIG1ha2VfY2xlYW51cCAo Y2xlYXJfY2hlY2tfYWdlbnRfdGFyZ2V0X2F0dHJpYnV0ZSwgTlVMTCk7Cit9 CisKK3ZvaWQKK2NoZWNrX2FnZW50X3RhcmdldF9hdHRyaWJ1dGUgKHN0cnVj dCB0YXJnZXRfYXR0cmlidXRlICp0YSwgaW50IHdyaXRlKQoreworICBzdGF0 aWMgY2hhciBlcnJvcl9zdHJbMjU2XTsKKyAgY2hlY2tfYWdlbnRfdGFyZ2V0 X2F0dHJpYnV0ZV9lcnJvciA9IGVycm9yX3N0cjsKKworICBpZiAod3JpdGUp CisgICAgeworICAgICAgaWYgKCh0YS0+YWdlbnRfYWNjZXNzICYgVEFSR0VU X0FUVFJJQlVURV9BQ0NFU1NfV1JJVEUpID09IDApCisgICAgICAgIHsKKwkg IHNucHJpbnRmIChlcnJvcl9zdHIsIDI1NiwgXygiJCVzIGNhbm5vdCBiZSB3 cml0dGVuIGluIGFnZW50IGNvZGUuIiksCisJCSAgICB0YS0+bmFtZSk7CisJ ICBlcnJvciAoXygiJCVzIGNhbm5vdCBiZSB3cml0dGVuIGluIGFnZW50IGNv ZGUuIiksIHRhLT5uYW1lKTsKKwl9CisgICAgfQorICBlbHNlCisgICAgewor ICAgICAgaWYgKCh0YS0+YWdlbnRfYWNjZXNzICYgVEFSR0VUX0FUVFJJQlVU RV9BQ0NFU1NfUkVBRCkgPT0gMCkKKyAgICAgICAgeworCSAgc25wcmludGYg KGVycm9yX3N0ciwgMjU2LCBfKCIkJXMgY2Fubm90IGJlIHJlYWQgaW4gYWdl bnQgY29kZS4iKSwKKwkJICAgIHRhLT5uYW1lKTsKKwkgIGVycm9yIChfKCIk JXMgY2Fubm90IGJlIHJlYWQgaW4gYWdlbnQgY29kZS4iKSwgdGEtPm5hbWUp OworCX0KKyAgICB9CisKKyAgaWYgKGNoZWNrX2FnZW50X3RhcmdldF9hdHRy aWJ1dGVfYmwpCisgICAgeworICAgICAgc3RydWN0IHRhcmdldF9hdHRyaWJ1 dGVfYWRkcmVzcyAqdGFfYWRkcjsKKworICAgICAgaWYgKHRhLT50YXJnZXRf b25seV9jb25kX2NoZWNrKQorICAgICAgICBjaGVja19hZ2VudF90YXJnZXRf YXR0cmlidXRlX2JsLT5vd25lci0+dGFyZ2V0X29ubHlfY29uZF9jaGVjayA9 IDE7CisKKyAgICAgIHN3aXRjaCAoY2hlY2tfYWdlbnRfdGFyZ2V0X2F0dHJp YnV0ZV9ibC0+bG9jX3R5cGUpCisJeworCWNhc2UgYnBfbG9jX3NvZnR3YXJl X2JyZWFrcG9pbnQ6CisJICBpZiAoKHRhLT5zdXBwb3J0CisJICAgICAgICYg VEFSR0VUX0FUVFJJQlVURV9TVVBQT1JUX1NPRlRXQVJFX0JSRUFLUE9JTlQp ID09IDApCisJICAgIHsKKwkgICAgICBzbnByaW50ZiAoZXJyb3Jfc3RyLCAy NTYsCisJCQlfKCIkJXMgY2Fubm90IGJlIHVzZWQgaW4gc29mdHdhcmUgYnJl YWtwb2ludC4iKSwKKwkJCXRhLT5uYW1lKTsKKwkgICAgICBlcnJvciAoXygi JCVzIGNhbm5vdCBiZSB1c2VkIGluIHNvZnR3YXJlIGJyZWFrcG9pbnQuIiks IHRhLT5uYW1lKTsKKwkgICAgfQorCSAgYnJlYWs7CisJY2FzZSBicF9sb2Nf aGFyZHdhcmVfYnJlYWtwb2ludDoKKwkgIGlmICgodGEtPnN1cHBvcnQKKwkg ICAgICAgJiBUQVJHRVRfQVRUUklCVVRFX1NVUFBPUlRfSEFSRFdBUkVfQlJF QUtQT0lOVCkgPT0gMCkKKwkgICAgeworCSAgICAgIHNucHJpbnRmIChlcnJv cl9zdHIsIDI1NiwKKwkJCV8oIiQlcyBjYW5ub3QgYmUgdXNlZCBpbiBoYXJk d2FyZSBicmVha3BvaW50LiIpLAorCQkJdGEtPm5hbWUpOworCSAgICAgIGVy cm9yIChfKCIkJXMgY2Fubm90IGJlIHVzZWQgaW4gaGFyZHdhcmUgYnJlYWtw b2ludC4iKSwKKwkJICAgICB0YS0+bmFtZSk7CisJICAgIH0KKwkgIGJyZWFr OworCWNhc2UgYnBfbG9jX2hhcmR3YXJlX3dhdGNocG9pbnQ6CisJICBpZiAo KHRhLT5zdXBwb3J0CisJICAgICAgICYgVEFSR0VUX0FUVFJJQlVURV9TVVBQ T1JUX0hBUkRXQVJFX1dBVENIUE9JTlQpID09IDApCisJICAgIHsKKwkgICAg ICBzbnByaW50ZiAoZXJyb3Jfc3RyLCAyNTYsCisJCQlfKCIkJXMgY2Fubm90 IGJlIHVzZWQgaW4gaGFyZHdhcmUgd2F0Y2hwb2ludC4iKSwKKwkJCXRhLT5u YW1lKTsKKwkgICAgICBlcnJvciAoXygiJCVzIGNhbm5vdCBiZSB1c2VkIGlu IGhhcmR3YXJlIHdhdGNocG9pbnQuIiksCisJCSAgICAgdGEtPm5hbWUpOwor CSAgICB9CisJICBicmVhazsKKwlkZWZhdWx0OgorCSAgaWYgKGNoZWNrX2Fn ZW50X3RhcmdldF9hdHRyaWJ1dGVfYmwtPm93bmVyLT50eXBlID09IGJwX3Ry YWNlcG9pbnQKKwkgICAgICB8fCBjaGVja19hZ2VudF90YXJnZXRfYXR0cmli dXRlX2JsLT5vd25lci0+dHlwZQorCQkgICA9PSBicF9mYXN0X3RyYWNlcG9p bnQKKwkgICAgICB8fCBjaGVja19hZ2VudF90YXJnZXRfYXR0cmlidXRlX2Js LT5vd25lci0+dHlwZQorCQkgICA9PSBicF9zdGF0aWNfdHJhY2Vwb2ludCkK KwkgICAgeworCSAgICAgIHNucHJpbnRmIChlcnJvcl9zdHIsIDI1NiwKKwkJ CV8oIiQlcyBjYW5ub3QgYmUgdXNlZCBpbiB0cmFjZXBvaW50LiIpLCB0YS0+ bmFtZSk7CisJICAgICAgaWYgKCh0YS0+c3VwcG9ydCAmIFRBUkdFVF9BVFRS SUJVVEVfU1VQUE9SVF9UUkFDRVBPSU5UKSA9PSAwKQorCSAgICAgICAgZXJy b3IgKF8oIiQlcyBjYW5ub3QgYmUgdXNlZCBpbiB0cmFjZXBvaW50LiIpLCB0 YS0+bmFtZSk7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIHNu cHJpbnRmIChlcnJvcl9zdHIsIDI1NiwKKwkJCV8oIiQlcyBjYW5ub3QgYmUg dXNlZCBpbiBicmVha3BvaW50ICVkLiIpLAorCQkJdGEtPm5hbWUsCisJCQlj aGVja19hZ2VudF90YXJnZXRfYXR0cmlidXRlX2JsLT5vd25lci0+bnVtYmVy KTsKKwkgICAgICBlcnJvciAoXygiJCVzIGNhbm5vdCBiZSB1c2VkIGluIGJy ZWFrcG9pbnQgJWQuIiksIHRhLT5uYW1lLAorCQkgICAgIGNoZWNrX2FnZW50 X3RhcmdldF9hdHRyaWJ1dGVfYmwtPm93bmVyLT5udW1iZXIpOworCSAgICB9 CisJICBicmVhazsKKwl9CisKKyAgICAgIGlmICh0YS0+YWRkcmVzc2VzKQor CXsKKyAgICAgICAgICBmb3IgKHRhX2FkZHIgPSB0YS0+YWRkcmVzc2VzOyB0 YV9hZGRyOyB0YV9hZGRyID0gdGFfYWRkci0+cHJldikKKwkgICAgeworCSAg ICAgIGlmIChjaGVja19hZ2VudF90YXJnZXRfYXR0cmlidXRlX2JsLT5hZGRy ZXNzID49IHRhX2FkZHItPnN0YXJ0CisJCSAgJiYgY2hlY2tfYWdlbnRfdGFy Z2V0X2F0dHJpYnV0ZV9ibC0+YWRkcmVzcyA8PSB0YV9hZGRyLT5lbmQpCisJ CWJyZWFrOworCSAgICB9CisJICBpZiAoIXRhX2FkZHIpCisJICAgIHsKKwkg ICAgICBzbnByaW50ZiAoZXJyb3Jfc3RyLCAyNTYsCisJCQlfKCJcCiskJXMg Y2Fubm90IGJlIHVzZWQgaW4gYnJlYWtwb2ludCAlZCBiZWNhdXNlIHRoZSBh ZGRyZXNzIGxpbWl0LiIpLCB0YS0+bmFtZSwKKwkJCWNoZWNrX2FnZW50X3Rh cmdldF9hdHRyaWJ1dGVfYmwtPm93bmVyLT5udW1iZXIpOworCSAgICAgIGVy cm9yIChfKCJcCiskJXMgY2Fubm90IGJlIHVzZWQgaW4gYnJlYWtwb2ludCAl ZCBiZWNhdXNlIHRoZSBhZGRyZXNzIGxpbWl0LiIpLCB0YS0+bmFtZSwKKwkJ ICAgY2hlY2tfYWdlbnRfdGFyZ2V0X2F0dHJpYnV0ZV9ibC0+b3duZXItPm51 bWJlcik7CisJICAgIH0KKwl9CisgICAgfQorCisgIGNoZWNrX2FnZW50X3Rh cmdldF9hdHRyaWJ1dGVfZXJyb3IgPSBOVUxMOworfQorCit2b2lkCitjbGVh cl90YXJnZXRfYXR0cmlidXRlcyAodm9pZCAqdW51c2VkKQoreworICBzdHJ1 Y3QgdGFyZ2V0X2F0dHJpYnV0ZSAqdGEsICp0bXA7CisKKyAgZm9yICh0YSA9 IHRhcmdldF9hdHRyaWJ1dGVzX2xpc3Q7IHRhOykKKyAgICB7CisgICAgICBz dHJ1Y3QgdGFyZ2V0X2F0dHJpYnV0ZV9hZGRyZXNzICp0YV9hZGRyLCAqdG1w X2FkZHI7CisKKyAgICAgIHRtcCA9IHRhOworICAgICAgdGEgPSB0YS0+bmV4 dDsKKworICAgICAgZm9yICh0YV9hZGRyID0gdG1wLT5hZGRyZXNzZXM7IHRh X2FkZHI7KQorICAgICAgICB7CisJICB0bXBfYWRkciA9IHRhX2FkZHI7CisJ ICB0YV9hZGRyID0gdGFfYWRkci0+cHJldjsKKwkgIHhmcmVlICh0bXBfYWRk cik7CisJfQorCisgICAgICB4ZnJlZSAodG1wLT5uYW1lKQorICAgICAgeGZy ZWUgKHRtcCk7CisgICAgfQorCisgIHRhcmdldF9hdHRyaWJ1dGVzX2xpc3Qg PSBOVUxMOworfQorCitzdGF0aWMgdm9pZAoraW5mb190YXJnZXRfYXR0cmli dXRlcyAoY2hhciAqYXJncywgaW50IGZyb21fdHR5KQoreworICBzdHJ1Y3Qg dGFyZ2V0X2F0dHJpYnV0ZSAqdGE7CisgIHN0cnVjdCBjbGVhbnVwICpiYWNr X3RvOworICBzdHJ1Y3QgdWlfb3V0ICp1aW91dCA9IGN1cnJlbnRfdWlvdXQ7 CisgIGludCBjb3VudCA9IDA7CisKKyAgaWYgKHRhcmdldF9hdHRyaWJ1dGVz X2xpc3QgPT0gTlVMTCkKKyAgICB7CisgICAgICB1aV9vdXRfbWVzc2FnZSAo dWlvdXQsIDAsIF8oIk5vIHRhcmdldCBhdHRyaWJ1dGVzLlxuIikpOworICAg ICAgcmV0dXJuOworICAgIH0KKworICBmb3IgKHRhID0gdGFyZ2V0X2F0dHJp YnV0ZXNfbGlzdDsgdGE7IHRhID0gdGEtPm5leHQpCisgICAgY291bnQrKzsK KworICBiYWNrX3RvID0gbWFrZV9jbGVhbnVwX3VpX291dF90YWJsZV9iZWdp bl9lbmQgKHVpb3V0LCA2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvdW50LCAidGFyZ2V0LWF0dHJpYnV0 ZXMiKTsKKyAgdWlfb3V0X3RhYmxlX2hlYWRlciAodWlvdXQsIDE1LCB1aV9s ZWZ0LCAibmFtZSIsICJOYW1lIik7CisgIHVpX291dF90YWJsZV9oZWFkZXIg KHVpb3V0LCAxNSwgdWlfbGVmdCwgInR5cGUiLCAiVHlwZSIpOworICB1aV9v dXRfdGFibGVfaGVhZGVyICh1aW91dCwgMTUsIHVpX2xlZnQsICJ0YXJnZXQt b25seS1jb25kLWNoZWNrIiwKKwkJICAgICAgICJUYXJnZXQtb25seS1jb25k LWNoZWNrIik7CisgIHVpX291dF90YWJsZV9oZWFkZXIgKHVpb3V0LCAxNSwg dWlfbGVmdCwgImFnZW50IGFjY2VzcyIsICJBZ2VudCBhY2Nlc3MiKTsKKyAg dWlfb3V0X3RhYmxlX2hlYWRlciAodWlvdXQsIDE1LCB1aV9sZWZ0LCAiZ2Ri IGFjY2VzcyIsICJHREIgYWNjZXNzIik7CisgIHVpX291dF90YWJsZV9oZWFk ZXIgKHVpb3V0LCAxNSwgdWlfbGVmdCwgImJyZWFrcG9pbnQgdHlwZSIsCisJ CSAgICAgICAiQnJlYWtwb2ludCB0eXBlIik7CisKKyAgdWlfb3V0X3RhYmxl X2JvZHkgKHVpb3V0KTsKKyAgZm9yICh0YSA9IHRhcmdldF9hdHRyaWJ1dGVz X2xpc3Q7IHRhOyB0YSA9IHRhLT5uZXh0KQorICAgIHsKKyAgICAgIHN0cnVj dCB0YXJnZXRfYXR0cmlidXRlX2FkZHJlc3MgKnRhX2FkZHI7CisgICAgICBj aGFyIGJ1Zls1MTJdOworICAgICAgc3RydWN0IGNsZWFudXAgKmJhY2tfdG8y CisJPSBtYWtlX2NsZWFudXBfdWlfb3V0X3R1cGxlX2JlZ2luX2VuZCAodWlv dXQsICJhdHRyaWJ1dGVzIik7CisKKyAgICAgIHNucHJpbnRmIChidWYsIDUx MiwgIiQlcyIsIHRhLT5uYW1lKTsKKyAgICAgIHVpX291dF9maWVsZF9zdHJp bmcgKHVpb3V0LCAibmFtZSIsIGJ1Zik7CisKKyAgICAgIHN3aXRjaCAodGEt PnR5cGUpCisgICAgICAgIHsKKwljYXNlIFRBUkdFVF9BVFRSSUJVVEVfVFlQ RV9JTlQ4OgorCSAgdWlfb3V0X2ZpZWxkX3N0cmluZyAodWlvdXQsICJ0eXBl IiwgImludDgiKTsKKwkgIGJyZWFrOworCWNhc2UgVEFSR0VUX0FUVFJJQlVU RV9UWVBFX1VJTlQ4OgorCSAgdWlfb3V0X2ZpZWxkX3N0cmluZyAodWlvdXQs ICJ0eXBlIiwgInVpbnQ4Iik7CisJICBicmVhazsKKwljYXNlIFRBUkdFVF9B VFRSSUJVVEVfVFlQRV9JTlQxNjoKKwkgIHVpX291dF9maWVsZF9zdHJpbmcg KHVpb3V0LCAidHlwZSIsICJpbnQxNiIpOworCSAgYnJlYWs7CisJY2FzZSBU QVJHRVRfQVRUUklCVVRFX1RZUEVfVUlOVDE2OgorCSAgdWlfb3V0X2ZpZWxk X3N0cmluZyAodWlvdXQsICJ0eXBlIiwgInVpbnQxNiIpOworCSAgYnJlYWs7 CisJY2FzZSBUQVJHRVRfQVRUUklCVVRFX1RZUEVfSU5UMzI6CisJICB1aV9v dXRfZmllbGRfc3RyaW5nICh1aW91dCwgInR5cGUiLCAiaW50MzIiKTsKKwkg IGJyZWFrOworCWNhc2UgVEFSR0VUX0FUVFJJQlVURV9UWVBFX1VJTlQzMjoK KwkgIHVpX291dF9maWVsZF9zdHJpbmcgKHVpb3V0LCAidHlwZSIsICJ1aW50 MzIiKTsKKwkgIGJyZWFrOworCWNhc2UgVEFSR0VUX0FUVFJJQlVURV9UWVBF X0lOVDY0OgorCSAgdWlfb3V0X2ZpZWxkX3N0cmluZyAodWlvdXQsICJ0eXBl IiwgImludDY0Iik7CisJICBicmVhazsKKwljYXNlIFRBUkdFVF9BVFRSSUJV VEVfVFlQRV9VSU5UNjQ6CisJICB1aV9vdXRfZmllbGRfc3RyaW5nICh1aW91 dCwgInR5cGUiLCAidWludDY0Iik7CisJICBicmVhazsKKwl9CisKKyAgICAg IHVpX291dF9maWVsZF9zdHJpbmcgKHVpb3V0LCAidGFyZ2V0LW9ubHktY29u ZC1jaGVjayIsCisJCQkgICB0YS0+dGFyZ2V0X29ubHlfY29uZF9jaGVjayA/ ICJ5ZXMiIDogIm5vIik7CisKKyAgICAgIHNucHJpbnRmIChidWYsIDUxMiwg IiVzJXMiLAorCQkodGEtPmFnZW50X2FjY2VzcworCQkgJiBUQVJHRVRfQVRU UklCVVRFX0FDQ0VTU19SRUFEKSA/ICJyZWFkICIgOiAiIiwKKwkJKHRhLT5h Z2VudF9hY2Nlc3MKKwkJICYgVEFSR0VUX0FUVFJJQlVURV9BQ0NFU1NfV1JJ VEUpID8gIndyaXRlIiA6ICIiKTsKKyAgICAgIHVpX291dF9maWVsZF9zdHJp bmcgKHVpb3V0LCAiYWdlbnQgYWNjZXNzIiwgYnVmKTsKKworICAgICAgc25w cmludGYgKGJ1ZiwgNTEyLCAiJXMlcyIsCisJCSh0YS0+Z2RiX2FjY2VzcyAm IFRBUkdFVF9BVFRSSUJVVEVfQUNDRVNTX1JFQUQpID8gInJlYWQgIiA6ICIi LAorCQkodGEtPmdkYl9hY2Nlc3MKKwkJICYgVEFSR0VUX0FUVFJJQlVURV9B Q0NFU1NfV1JJVEUpID8gIndyaXRlIiA6ICIiKTsKKyAgICAgIHVpX291dF9m aWVsZF9zdHJpbmcgKHVpb3V0LCAiZ2RiIGFjY2VzcyIsIGJ1Zik7CisKKyAg ICAgIHNucHJpbnRmIChidWYsIDUxMiwgIiVzJXMlcyVzIiwKKwkJKHRhLT5z dXBwb3J0ICYgVEFSR0VUX0FUVFJJQlVURV9TVVBQT1JUX1NPRlRXQVJFX0JS RUFLUE9JTlQpCisJCT8gInNvZnR3YXJlLWJyZWFrcG9pbnQgIiA6ICIiLAor CQkodGEtPnN1cHBvcnQgJiBUQVJHRVRfQVRUUklCVVRFX1NVUFBPUlRfSEFS RFdBUkVfQlJFQUtQT0lOVCkKKwkJPyAiaGFyZHdhcmUtYnJlYWtwb2ludCAi IDogIiIsCisJCSh0YS0+c3VwcG9ydCAmIFRBUkdFVF9BVFRSSUJVVEVfU1VQ UE9SVF9IQVJEV0FSRV9XQVRDSFBPSU5UKQorCQk/ICJoYXJkd2FyZS13YXRj aHBvaW50ICIgOiAiIiwKKwkJKHRhLT5zdXBwb3J0ICYgVEFSR0VUX0FUVFJJ QlVURV9TVVBQT1JUX1RSQUNFUE9JTlQpCisJCT8gInRyYWNlcG9pbnQgIiA6 ICIiKTsKKyAgICAgIHVpX291dF9maWVsZF9zdHJpbmcgKHVpb3V0LCAiYnJl YWtwb2ludCB0eXBlIiwgYnVmKTsKKworICAgICAgdWlfb3V0X3RleHQgKHVp b3V0LCAiXG4iKTsKKworICAgICAgZm9yICh0YV9hZGRyID0gdGEtPmFkZHJl c3NlczsgdGFfYWRkcjsgdGFfYWRkciA9IHRhX2FkZHItPnByZXYpCisgICAg ICAgIHsKKwkgIHVpX291dF9zcGFjZXMgKHVpb3V0LCAyKTsKKwkgIHVpX291 dF9tZXNzYWdlICh1aW91dCwgMCwgInN0YXJ0OiVzIGVuZDolc1xuIiwKKwkJ CSAgcGFkZHJlc3MgKHRhcmdldF9nZGJhcmNoICgpLCB0YV9hZGRyLT5zdGFy dCksCisJCQkgIHBhZGRyZXNzICh0YXJnZXRfZ2RiYXJjaCAoKSwgdGFfYWRk ci0+ZW5kKSk7CisJfQorICAgICAgZG9fY2xlYW51cHMgKGJhY2tfdG8yKTsK KyAgICB9CisKKyAgZG9fY2xlYW51cHMgKGJhY2tfdG8pOworfQorCisjaWYg IWRlZmluZWQoSEFWRV9MSUJFWFBBVCkKKwordm9pZAorYWRkX3htbF90YXJn ZXRfYXR0cmlidXRlcyAoY29uc3QgY2hhciAqdGV4dCkKK3sKKyAgaWYgKHN0 cmxlbiAodGV4dCkgPiAwKQorICAgIHdhcm5pbmcgKF8oIkNhbiBub3QgcGFy c2UgWE1MIHRhcmdldCBhdHRyaWJ1dGVzOyBYTUwgc3VwcG9ydCAiCisJICAg ICAgICJ3YXMgZGlzYWJsZWQgYXQgY29tcGlsZSB0aW1lIikpOworfQorCisj ZWxzZQorCisjaW5jbHVkZSAieG1sLXN1cHBvcnQuaCIKKworc3RhdGljIHZv aWQKK3RhcmdldF9hdHRyaWJ1dGVfYXR0cl9oYW5kbGVyIChzdHJ1Y3QgZ2Ri X3htbF9wYXJzZXIgKnBhcnNlciwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3Qg Z2RiX3htbF9lbGVtZW50ICplbGVtZW50LAorCQkJICAgICAgIHZvaWQgKnVz ZXJfZGF0YSwKKwkJCSAgICAgICBWRUMoZ2RiX3htbF92YWx1ZV9zKSAqYXR0 cmlidXRlcykKK3sKKyAgY2hhciAqbmFtZSA9IE5VTEw7CisgIGludCBpLCBs ZW4sIGlkID0gLTEsIHR5cGUgPSAwLCB0YXJnZXRfb25seV9jb25kX2NoZWNr ID0gMDsKKyAgc3RydWN0IGdkYl94bWxfdmFsdWUgKmF0dHJzID0gVkVDX2Fk ZHJlc3MgKGdkYl94bWxfdmFsdWVfcywgYXR0cmlidXRlcyk7CisgIHN0cnVj dCB0YXJnZXRfYXR0cmlidXRlICp0YSwgKip0YXAgPSB1c2VyX2RhdGE7CisK KyAgbGVuID0gVkVDX2xlbmd0aCAoZ2RiX3htbF92YWx1ZV9zLCBhdHRyaWJ1 dGVzKTsKKyAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorICAgIHsKKyAg ICAgIGlmIChzdHJjbXAgKGF0dHJzW2ldLm5hbWUsICJuYW1lIikgPT0gMCkK KyAgICAgICAgbmFtZSA9IGF0dHJzW2ldLnZhbHVlOworICAgICAgZWxzZSBp ZiAoc3RyY21wIChhdHRyc1tpXS5uYW1lLCAiaWQiKSA9PSAwKQorICAgICAg ICBpZCA9ICogKFVMT05HRVNUICopIGF0dHJzW2ldLnZhbHVlOworICAgICAg ZWxzZSBpZiAoc3RyY21wIChhdHRyc1tpXS5uYW1lLCAidHlwZSIpID09IDAp CisgICAgICAgIHR5cGUgPSAqIChVTE9OR0VTVCAqKSBhdHRyc1tpXS52YWx1 ZTsKKyAgICAgIGVsc2UgaWYgKHN0cmNtcCAoYXR0cnNbaV0ubmFtZSwgInRh cmdldC1vbmx5LWNvbmQtY2hlY2siKSA9PSAwKQorICAgICAgICB0YXJnZXRf b25seV9jb25kX2NoZWNrID0gKiAoVUxPTkdFU1QgKikgYXR0cnNbaV0udmFs dWU7CisgICAgICBlbHNlCisgICAgICAgIGdkYl94bWxfZXJyb3IgKHBhcnNl ciwgXygiVW5rbm93biBhdHRyaWJ1dGUgbmFtZSAnJXMnLiIpLAorCQkgICAg ICAgYXR0cnNbaV0ubmFtZSk7CisgICAgfQorCisgIGlmICghbmFtZSB8fCBp ZCA8IDApCisgICAgZ2RiX3htbF9lcnJvciAocGFyc2VyLCBfKCJcIm5hbWVc IiBvciBcImlkXCIgaXMgbWlzc2VkLiIpKTsKKworICBpZiAoZmluZF90YXJn ZXRfYXR0cmlidXRlX25hbWUgKG5hbWUpKQorICAgIGdkYl94bWxfZXJyb3Ig KHBhcnNlcixfKCJcCituYW1lIFwiJXNcIiBpcyBzYW1lIHdpdGggYSB0YXJn ZXQgYXR0cmlidXRlLiIpLCBuYW1lKTsKKyAgaWYgKGZpbmRfdGFyZ2V0X2F0 dHJpYnV0ZV9pZCAoaWQpKQorICAgIGdkYl94bWxfZXJyb3IgKHBhcnNlcixf KCJpZCBcIiVkXCIgaXMgc2FtZSB3aXRoIGEgdGFyZ2V0IGF0dHJpYnV0ZS4i KSwgaWQpOworCisgIHRhID0geHphbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgdGFy Z2V0X2F0dHJpYnV0ZSkpOworICB0YS0+bmFtZSA9IHhzdHJkdXAgKG5hbWUp OworICB0YS0+aWQgPSBpZDsKKyAgdGEtPnR5cGUgPSB0eXBlOworICB0YS0+ dGFyZ2V0X29ubHlfY29uZF9jaGVjayA9IHRhcmdldF9vbmx5X2NvbmRfY2hl Y2s7CisKKyAgaWYgKCp0YXApCisgICAgKCp0YXApLT5uZXh0ID0gdGE7Cisg IGVsc2UKKyAgICB0YXJnZXRfYXR0cmlidXRlc19saXN0ID0gdGE7CisgICp0 YXAgPSB0YTsKKworICB1c2VyX2RhdGEgPSAmdGE7Cit9CisKK3N0YXRpYyB2 b2lkCit0YXJnZXRfYXR0cmlidXRlX2FjY2Vzc19jaGlsZHJlbl9oYW5kbGVy IChzdHJ1Y3QgZ2RiX3htbF9wYXJzZXIgKnBhcnNlciwKKwkJCQkJICBjb25z dCBzdHJ1Y3QgZ2RiX3htbF9lbGVtZW50ICplbGVtZW50LAorCQkJCQkgIHZv aWQgKnVzZXJfZGF0YSwKKwkJCQkJICBWRUMoZ2RiX3htbF92YWx1ZV9zKSAq YXR0cmlidXRlcykKK3sKKyAgc3RydWN0IHRhcmdldF9hdHRyaWJ1dGUgKnRh ID0gKihzdHJ1Y3QgdGFyZ2V0X2F0dHJpYnV0ZSAqKil1c2VyX2RhdGE7Cisg IGludCBpLCBsZW4sIHRhX2FjY2VzcyA9IDA7CisgIHN0cnVjdCBnZGJfeG1s X3ZhbHVlICphdHRycyA9IFZFQ19hZGRyZXNzIChnZGJfeG1sX3ZhbHVlX3Ms IGF0dHJpYnV0ZXMpOworCisgIGxlbiA9IFZFQ19sZW5ndGggKGdkYl94bWxf dmFsdWVfcywgYXR0cmlidXRlcyk7CisgIGZvciAoaSA9IDA7IGkgPCBsZW47 IGkrKykKKyAgICB7CisgICAgICBpZiAoc3RyY21wIChhdHRyc1tpXS5uYW1l LCAicmVhZCIpID09IDApCisgICAgICAgIHsKKwkgIGlmICgqIChVTE9OR0VT VCAqKSBhdHRyc1tpXS52YWx1ZSkKKyAgICAgICAgICAgIHRhX2FjY2VzcyB8 PSBUQVJHRVRfQVRUUklCVVRFX0FDQ0VTU19SRUFEOworCX0KKyAgICAgIGVs c2UgaWYgKHN0cmNtcCAoYXR0cnNbaV0ubmFtZSwgIndyaXRlIikgPT0gMCkK KyAgICAgICAgeworCSAgaWYgKCogKFVMT05HRVNUICopIGF0dHJzW2ldLnZh bHVlKQorICAgICAgICAgICAgdGFfYWNjZXNzIHw9IFRBUkdFVF9BVFRSSUJV VEVfQUNDRVNTX1dSSVRFOworCX0KKyAgICAgIGVsc2UKKyAgICAgICAgZ2Ri X3htbF9lcnJvciAocGFyc2VyLCBfKCJVbmtub3duIGF0dHJpYnV0ZSBuYW1l ICclcycuIiksCisJCSAgICAgICBhdHRyc1tpXS5uYW1lKTsKKyAgICB9CisK KyAgaWYgKHN0cmNtcCAoZWxlbWVudC0+bmFtZSwgImFnZW50IikgPT0gMCkK KyAgICB0YS0+YWdlbnRfYWNjZXNzID0gdGFfYWNjZXNzOworICBlbHNlCisg ICAgdGEtPmdkYl9hY2Nlc3MgPSB0YV9hY2Nlc3M7Cit9CisKK3N0YXRpYyB2 b2lkCit0YXJnZXRfYXR0cmlidXRlX3N1cHBvcnRfYXR0cl9oYW5kbGVyIChz dHJ1Y3QgZ2RiX3htbF9wYXJzZXIgKnBhcnNlciwKKwkJCQkgICAgICAgY29u c3Qgc3RydWN0IGdkYl94bWxfZWxlbWVudCAqZWxlbWVudCwKKwkJCQkgICAg ICAgdm9pZCAqdXNlcl9kYXRhLAorCQkJCSAgICAgICBWRUMoZ2RiX3htbF92 YWx1ZV9zKSAqYXR0cmlidXRlcykKK3sKKyAgc3RydWN0IHRhcmdldF9hdHRy aWJ1dGUgKnRhID0gKihzdHJ1Y3QgdGFyZ2V0X2F0dHJpYnV0ZSAqKil1c2Vy X2RhdGE7CisgIGludCBpLCBsZW4gPSAwOworICBzdHJ1Y3QgZ2RiX3htbF92 YWx1ZSAqYXR0cnMgPSBWRUNfYWRkcmVzcyAoZ2RiX3htbF92YWx1ZV9zLCBh dHRyaWJ1dGVzKTsKKworICBsZW4gPSBWRUNfbGVuZ3RoIChnZGJfeG1sX3Zh bHVlX3MsIGF0dHJpYnV0ZXMpOworICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBp KyspCisgICAgeworICAgICAgaWYgKHN0cmNtcCAoYXR0cnNbaV0ubmFtZSwg InNvZnR3YXJlLWJyZWFrcG9pbnQiKSA9PSAwKQorICAgICAgICB7CisJICBp ZiAoKiAoVUxPTkdFU1QgKikgYXR0cnNbaV0udmFsdWUpCisgICAgICAgICAg ICB0YS0+c3VwcG9ydCB8PSBUQVJHRVRfQVRUUklCVVRFX1NVUFBPUlRfU09G VFdBUkVfQlJFQUtQT0lOVDsKKwl9CisgICAgICBlbHNlIGlmIChzdHJjbXAg KGF0dHJzW2ldLm5hbWUsICJoYXJkd2FyZS1icmVha3BvaW50IikgPT0gMCkK KyAgICAgICAgeworCSAgaWYgKCogKFVMT05HRVNUICopIGF0dHJzW2ldLnZh bHVlKQorICAgICAgICAgICAgdGEtPnN1cHBvcnQgfD0gVEFSR0VUX0FUVFJJ QlVURV9TVVBQT1JUX0hBUkRXQVJFX0JSRUFLUE9JTlQ7CisJfQorICAgICAg ZWxzZSBpZiAoc3RyY21wIChhdHRyc1tpXS5uYW1lLCAiaGFyZHdhcmUtd2F0 Y2hwb2ludCIpID09IDApCisgICAgICAgIHsKKwkgIGlmICgqIChVTE9OR0VT VCAqKSBhdHRyc1tpXS52YWx1ZSkKKyAgICAgICAgICAgIHRhLT5zdXBwb3J0 IHw9IFRBUkdFVF9BVFRSSUJVVEVfU1VQUE9SVF9IQVJEV0FSRV9XQVRDSFBP SU5UOworCX0KKyAgICAgIGVsc2UgaWYgKHN0cmNtcCAoYXR0cnNbaV0ubmFt ZSwgInRyYWNlcG9pbnQiKSA9PSAwKQorICAgICAgICB7CisJICBpZiAoKiAo VUxPTkdFU1QgKikgYXR0cnNbaV0udmFsdWUpCisgICAgICAgICAgICB0YS0+ c3VwcG9ydCB8PSBUQVJHRVRfQVRUUklCVVRFX1NVUFBPUlRfVFJBQ0VQT0lO VDsKKwl9CisgICAgICBlbHNlCisgICAgICAgIGdkYl94bWxfZXJyb3IgKHBh cnNlciwgXygiVW5rbm93biBhdHRyaWJ1dGUgbmFtZSAnJXMnLiIpLAorCQkg ICAgICAgYXR0cnNbaV0ubmFtZSk7CisgICAgfQorfQorCitzdGF0aWMgdm9p ZAordGFyZ2V0X2F0dHJpYnV0ZV9hZGRyZXNzX2hhbmRsZXIgKHN0cnVjdCBn ZGJfeG1sX3BhcnNlciAqcGFyc2VyLAorCQkJCSAgY29uc3Qgc3RydWN0IGdk Yl94bWxfZWxlbWVudCAqZWxlbWVudCwKKwkJCQkgIHZvaWQgKnVzZXJfZGF0 YSwKKwkJCQkgIFZFQyhnZGJfeG1sX3ZhbHVlX3MpICphdHRyaWJ1dGVzKQor eworICBpbnQgaSwgbGVuOworICBzdHJ1Y3QgZ2RiX3htbF92YWx1ZSAqYXR0 cnMgPSBWRUNfYWRkcmVzcyAoZ2RiX3htbF92YWx1ZV9zLCBhdHRyaWJ1dGVz KTsKKyAgc3RydWN0IHRhcmdldF9hdHRyaWJ1dGUgKnRhID0gKihzdHJ1Y3Qg dGFyZ2V0X2F0dHJpYnV0ZSAqKil1c2VyX2RhdGE7CisgIENPUkVfQUREUiBz dGFydCA9IDAsIGVuZCA9IDA7CisgIHN0cnVjdCB0YXJnZXRfYXR0cmlidXRl X2FkZHJlc3MgKnRhX2FkZHI7CisKKyAgbGVuID0gVkVDX2xlbmd0aCAoZ2Ri X3htbF92YWx1ZV9zLCBhdHRyaWJ1dGVzKTsKKyAgZm9yIChpID0gMDsgaSA8 IGxlbjsgaSsrKQorICAgIHsKKyAgICAgIGlmIChzdHJjbXAgKGF0dHJzW2ld Lm5hbWUsICJzdGFydCIpID09IDApCisgICAgICAgIHN0YXJ0ID0gKiAoVUxP TkdFU1QgKikgYXR0cnNbaV0udmFsdWU7CisgICAgICBlbHNlIGlmIChzdHJj bXAgKGF0dHJzW2ldLm5hbWUsICJlbmQiKSA9PSAwKQorICAgICAgICBlbmQg PSAqIChVTE9OR0VTVCAqKSBhdHRyc1tpXS52YWx1ZTsKKyAgICAgIGVsc2UK KyAgICAgICAgZ2RiX3htbF9lcnJvciAocGFyc2VyLCBfKCJVbmtub3duIGF0 dHJpYnV0ZSBuYW1lICclcycuIiksCisJCSAgICAgICBhdHRyc1tpXS5uYW1l KTsKKyAgICB9CisKKyAgdGFfYWRkciA9IHhtYWxsb2MgKHNpemVvZiAoc3Ry dWN0IHRhcmdldF9hdHRyaWJ1dGVfYWRkcmVzcykpOworICB0YV9hZGRyLT5z dGFydCA9IHN0YXJ0OworICB0YV9hZGRyLT5lbmQgPSBlbmQ7CisKKyAgdGFf YWRkci0+cHJldiA9IHRhLT5hZGRyZXNzZXM7CisgIHRhLT5hZGRyZXNzZXMg PSB0YV9hZGRyOworfQorCitjb25zdCBzdHJ1Y3QgZ2RiX3htbF9lbnVtIHRh cmdldF9hdHRyaWJ1dGVfdHlwZV9lbnVtc1tdID0geworICB7ICJpbnQ4Iiwg VEFSR0VUX0FUVFJJQlVURV9UWVBFX0lOVDggfSwKKyAgeyAidWludDgiLCBU QVJHRVRfQVRUUklCVVRFX1RZUEVfVUlOVDggfSwKKyAgeyAiaW50MTYiLCBU QVJHRVRfQVRUUklCVVRFX1RZUEVfSU5UMTYgfSwKKyAgeyAidWludDE2Iiwg VEFSR0VUX0FUVFJJQlVURV9UWVBFX1VJTlQxNiB9LAorICB7ICJpbnQzMiIs IFRBUkdFVF9BVFRSSUJVVEVfVFlQRV9JTlQzMiB9LAorICB7ICJ1aW50MzIi LCBUQVJHRVRfQVRUUklCVVRFX1RZUEVfVUlOVDMyIH0sCisgIHsgImludDY0 IiwgVEFSR0VUX0FUVFJJQlVURV9UWVBFX0lOVDY0IH0sCisgIHsgInVpbnQ2 NCIsIFRBUkdFVF9BVFRSSUJVVEVfVFlQRV9VSU5UNjQgfSwKKyAgeyBOVUxM LCAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZ2RiX3htbF9hdHRy aWJ1dGUgdGFyZ2V0X2F0dHJpYnV0ZV9hdHRyW10gPSB7CisgIHsgIm5hbWUi LCBHREJfWE1MX0FGX05PTkUsIE5VTEwsIE5VTEwgfSwKKyAgeyAiaWQiLCBH REJfWE1MX0FGX05PTkUsIGdkYl94bWxfcGFyc2VfYXR0cl91bG9uZ2VzdCwg TlVMTCB9LAorICB7ICJ0eXBlIiwgR0RCX1hNTF9BRl9OT05FLCBnZGJfeG1s X3BhcnNlX2F0dHJfZW51bSwKKyAgICB0YXJnZXRfYXR0cmlidXRlX3R5cGVf ZW51bXMgfSwKKyAgeyAidGFyZ2V0LW9ubHktY29uZC1jaGVjayIsIEdEQl9Y TUxfQUZfT1BUSU9OQUwsIGdkYl94bWxfcGFyc2VfYXR0cl9lbnVtLAorICAg IGdkYl94bWxfZW51bXNfYm9vbGVhbiB9LAorICB7IE5VTEwsIEdEQl9YTUxf QUZfTk9ORSwgTlVMTCwgTlVMTCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3Ry dWN0IGdkYl94bWxfYXR0cmlidXRlCisJCQl0YXJnZXRfYXR0cmlidXRlX2Fj Y2Vzc19jaGlsZHJlbl9hdHRyW10gPSB7CisgIHsgInJlYWQiLCBHREJfWE1M X0FGX09QVElPTkFMLCBnZGJfeG1sX3BhcnNlX2F0dHJfZW51bSwKKyAgICBn ZGJfeG1sX2VudW1zX2Jvb2xlYW4gfSwKKyAgeyAid3JpdGUiLCBHREJfWE1M X0FGX09QVElPTkFMLCBnZGJfeG1sX3BhcnNlX2F0dHJfZW51bSwKKyAgICBn ZGJfeG1sX2VudW1zX2Jvb2xlYW4gfSwKKyAgeyBOVUxMLCBHREJfWE1MX0FG X05PTkUsIE5VTEwsIE5VTEwgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVj dCBnZGJfeG1sX2VsZW1lbnQgdGFyZ2V0X2F0dHJpYnV0ZV9hY2Nlc3NfY2hp bGRyZW5bXSA9IHsKKyAgeyAiYWdlbnQiLCB0YXJnZXRfYXR0cmlidXRlX2Fj Y2Vzc19jaGlsZHJlbl9hdHRyLCBOVUxMLAorICAgIEdEQl9YTUxfRUZfT1BU SU9OQUwsIHRhcmdldF9hdHRyaWJ1dGVfYWNjZXNzX2NoaWxkcmVuX2hhbmRs ZXIsIE5VTEwgfSwKKyAgeyAiZ2RiIiwgdGFyZ2V0X2F0dHJpYnV0ZV9hY2Nl c3NfY2hpbGRyZW5fYXR0ciwgTlVMTCwKKyAgICBHREJfWE1MX0VGX09QVElP TkFMLCB0YXJnZXRfYXR0cmlidXRlX2FjY2Vzc19jaGlsZHJlbl9oYW5kbGVy LCBOVUxMIH0sCisgIHsgTlVMTCwgTlVMTCwgTlVMTCwgR0RCX1hNTF9FRl9O T05FLCBOVUxMLCBOVUxMIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg Z2RiX3htbF9hdHRyaWJ1dGUgdGFyZ2V0X2F0dHJpYnV0ZV9zdXBwb3J0X2F0 dHJbXSA9IHsKKyAgeyAic29mdHdhcmUtYnJlYWtwb2ludCIsIEdEQl9YTUxf QUZfT1BUSU9OQUwsIGdkYl94bWxfcGFyc2VfYXR0cl9lbnVtLAorICAgIGdk Yl94bWxfZW51bXNfYm9vbGVhbiB9LAorICB7ICJoYXJkd2FyZS1icmVha3Bv aW50IiwgR0RCX1hNTF9BRl9PUFRJT05BTCwgZ2RiX3htbF9wYXJzZV9hdHRy X2VudW0sCisgICAgZ2RiX3htbF9lbnVtc19ib29sZWFuIH0sCisgIHsgImhh cmR3YXJlLXdhdGNocG9pbnQiLCBHREJfWE1MX0FGX09QVElPTkFMLCBnZGJf eG1sX3BhcnNlX2F0dHJfZW51bSwKKyAgICBnZGJfeG1sX2VudW1zX2Jvb2xl YW4gfSwKKyAgeyAidHJhY2Vwb2ludCIsIEdEQl9YTUxfQUZfT1BUSU9OQUws IGdkYl94bWxfcGFyc2VfYXR0cl9lbnVtLAorICAgIGdkYl94bWxfZW51bXNf Ym9vbGVhbiB9LAorICB7IE5VTEwsIEdEQl9YTUxfQUZfTk9ORSwgTlVMTCwg TlVMTCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGdkYl94bWxfYXR0 cmlidXRlIHRhcmdldF9hdHRyaWJ1dGVfYWRkcmVzc19hdHRyW10gPSB7Cisg IHsgInN0YXJ0IiwgR0RCX1hNTF9BRl9OT05FLCBnZGJfeG1sX3BhcnNlX2F0 dHJfdWxvbmdlc3QsIE5VTEwgfSwKKyAgeyAiZW5kIiwgR0RCX1hNTF9BRl9O T05FLCBnZGJfeG1sX3BhcnNlX2F0dHJfdWxvbmdlc3QsIE5VTEwgfSwKKyAg eyBOVUxMLCBHREJfWE1MX0FGX05PTkUsIE5VTEwsIE5VTEwgfQorfTsKKwor c3RhdGljIGNvbnN0IHN0cnVjdCBnZGJfeG1sX2VsZW1lbnQgdGFyZ2V0X2F0 dHJpYnV0ZV9hZGRyZXNzZXNfY2hpbGRyZW5bXSA9IHsKKyAgeyAiYWRkcmVz cyIsIHRhcmdldF9hdHRyaWJ1dGVfYWRkcmVzc19hdHRyLCBOVUxMLAorICAg IEdEQl9YTUxfRUZfT1BUSU9OQUwgfCBHREJfWE1MX0VGX1JFUEVBVEFCTEUs CisgICAgdGFyZ2V0X2F0dHJpYnV0ZV9hZGRyZXNzX2hhbmRsZXIsIE5VTEwg fSwKKyAgeyBOVUxMLCBOVUxMLCBOVUxMLCBHREJfWE1MX0VGX05PTkUsIE5V TEwsIE5VTEwgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBnZGJfeG1s X2VsZW1lbnQgdGFyZ2V0X2F0dHJpYnV0ZV9lbGVtZW50c1tdID0geworICB7 ICJhY2Nlc3MiLCBOVUxMLCB0YXJnZXRfYXR0cmlidXRlX2FjY2Vzc19jaGls ZHJlbiwKKyAgICBHREJfWE1MX0VGX05PTkUsIE5VTEwsIE5VTEwgfSwKKyAg eyAic3VwcG9ydCIsIHRhcmdldF9hdHRyaWJ1dGVfc3VwcG9ydF9hdHRyLCBO VUxMLAorICAgIEdEQl9YTUxfRUZfT1BUSU9OQUwsIHRhcmdldF9hdHRyaWJ1 dGVfc3VwcG9ydF9hdHRyX2hhbmRsZXIsIE5VTEwgfSwKKyAgeyAiYWRkcmVz c2VzIiwgTlVMTCwgdGFyZ2V0X2F0dHJpYnV0ZV9hZGRyZXNzZXNfY2hpbGRy ZW4sCisgICAgR0RCX1hNTF9FRl9PUFRJT05BTCwgTlVMTCwgTlVMTCB9LAor ICB7IE5VTEwsIE5VTEwsIE5VTEwsIEdEQl9YTUxfRUZfTk9ORSwgTlVMTCwg TlVMTCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGdkYl94bWxfZWxl bWVudCB0YXJnZXRfYXR0cmlidXRlc19jaGlsZHJlbltdID0geworICB7ICJ0 YXJnZXQtYXR0cmlidXRlIiwgdGFyZ2V0X2F0dHJpYnV0ZV9hdHRyLCB0YXJn ZXRfYXR0cmlidXRlX2VsZW1lbnRzLAorICAgIEdEQl9YTUxfRUZfT1BUSU9O QUwgfCBHREJfWE1MX0VGX1JFUEVBVEFCTEUsCisgICAgdGFyZ2V0X2F0dHJp YnV0ZV9hdHRyX2hhbmRsZXIsIE5VTEwgfSwKKyAgeyBOVUxMLCBOVUxMLCBO VUxMLCBHREJfWE1MX0VGX05PTkUsIE5VTEwsIE5VTEwgfQorfTsKKworc3Rh dGljIGNvbnN0IHN0cnVjdCBnZGJfeG1sX2VsZW1lbnQgdGFyZ2V0X2F0dHJp YnV0ZXNfZWxlbWVudHNbXSA9IHsKKyAgeyAidGFyZ2V0LWF0dHJpYnV0ZXMi LCBOVUxMLCB0YXJnZXRfYXR0cmlidXRlc19jaGlsZHJlbiwKKyAgICBHREJf WE1MX0VGX05PTkUsIE5VTEwsIE5VTEwgfSwKKyAgeyBOVUxMLCBOVUxMLCBO VUxMLCBHREJfWE1MX0VGX05PTkUsIE5VTEwsIE5VTEwgfQorfTsKKwordm9p ZAorYWRkX3htbF90YXJnZXRfYXR0cmlidXRlcyAoY29uc3QgY2hhciAqdGV4 dCkKK3sKKyAgc3RydWN0IHRhcmdldF9hdHRyaWJ1dGUgKnRhID0gTlVMTDsK KyAgc3RydWN0IGNsZWFudXAgKmJhY2tfdG8gPSBtYWtlX2NsZWFudXAgKGNs ZWFyX3RhcmdldF9hdHRyaWJ1dGVzLCBOVUxMKTsKKworICBjbGVhcl90YXJn ZXRfYXR0cmlidXRlcyhOVUxMKTsKKyAgaWYgKGdkYl94bWxfcGFyc2VfcXVp Y2sgKF8oInRhcmdldCBhdHRyaWJ1dGVzIiksIE5VTEwsCisJCQkgICB0YXJn ZXRfYXR0cmlidXRlc19lbGVtZW50cywgdGV4dCwgJnRhKSA9PSAwKQorICAg IHsKKyAgICAgIGRpc2NhcmRfY2xlYW51cHMgKGJhY2tfdG8pOworICAgICAg dHJhY2VfdmFyaWFibGVfbnVtYmVyX2NoZWNrICgpOworICAgIH0KKyAgZWxz ZQorICAgIGRvX2NsZWFudXBzIChiYWNrX3RvKTsKK30KKworI2VuZGlmCisK K3N0cnVjdCB0eXBlICoKK3RhcmdldF9hdHRyaWJ1dGVfdHlwZSAoc3RydWN0 IGdkYmFyY2ggKmdkYmFyY2gsIHN0cnVjdCB0YXJnZXRfYXR0cmlidXRlICp0 YSkKK3sKKyAgc3RydWN0IHR5cGUgKnJldCA9IGJ1aWx0aW5fdHlwZSAoZ2Ri YXJjaCktPmJ1aWx0aW5fdWludDY0OworCisgIHN3aXRjaCAodGEtPnR5cGUp CisgICAgeworICAgIGNhc2UgVEFSR0VUX0FUVFJJQlVURV9UWVBFX0lOVDg6 CisgICAgICByZXQgPSBidWlsdGluX3R5cGUgKGdkYmFyY2gpLT5idWlsdGlu X2ludDg7CisgICAgICBicmVhazsKKyAgICBjYXNlIFRBUkdFVF9BVFRSSUJV VEVfVFlQRV9VSU5UODoKKyAgICAgIHJldCA9IGJ1aWx0aW5fdHlwZSAoZ2Ri YXJjaCktPmJ1aWx0aW5fdWludDg7CisgICAgICBicmVhazsKKyAgICBjYXNl IFRBUkdFVF9BVFRSSUJVVEVfVFlQRV9JTlQxNjoKKyAgICAgIHJldCA9IGJ1 aWx0aW5fdHlwZSAoZ2RiYXJjaCktPmJ1aWx0aW5faW50MTY7CisgICAgICBi cmVhazsKKyAgICBjYXNlIFRBUkdFVF9BVFRSSUJVVEVfVFlQRV9VSU5UMTY6 CisgICAgICByZXQgPSBidWlsdGluX3R5cGUgKGdkYmFyY2gpLT5idWlsdGlu X3VpbnQxNjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgVEFSR0VUX0FUVFJJ QlVURV9UWVBFX0lOVDMyOgorICAgICAgcmV0ID0gYnVpbHRpbl90eXBlIChn ZGJhcmNoKS0+YnVpbHRpbl9pbnQzMjsKKyAgICAgIGJyZWFrOworICAgIGNh c2UgVEFSR0VUX0FUVFJJQlVURV9UWVBFX1VJTlQzMjoKKyAgICAgIHJldCA9 IGJ1aWx0aW5fdHlwZSAoZ2RiYXJjaCktPmJ1aWx0aW5fdWludDMyOworICAg ICAgYnJlYWs7CisgICAgY2FzZSBUQVJHRVRfQVRUUklCVVRFX1RZUEVfSU5U NjQ6CisgICAgICByZXQgPSBidWlsdGluX3R5cGUgKGdkYmFyY2gpLT5idWls dGluX2ludDY0OworICAgICAgYnJlYWs7CisgICAgY2FzZSBUQVJHRVRfQVRU UklCVVRFX1RZUEVfVUlOVDY0OgorICAgICAgcmV0ID0gYnVpbHRpbl90eXBl IChnZGJhcmNoKS0+YnVpbHRpbl91aW50NjQ7CisgICAgICBicmVhazsKKyAg ICB9CisKKyAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQKK2xvYWRf dGFyZ2V0X2F0dHJpYnV0ZXNfY29tbWFuZCAoY2hhciAqZXhwLCBpbnQgZnJv bV90dHkpCit7CisgIGNoYXIgKnRleHQgPSB4bWxfZmV0Y2hfY29udGVudF9m cm9tX2ZpbGUgKGV4cCwgTlVMTCk7CisKKyAgaWYgKHRleHQgPT0gTlVMTCkK KyAgICBlcnJvciAoXygiQ291bGQgbm90IG9wZW4gXCIlc1wiIiksIGV4cCk7 CisgIGFkZF94bWxfdGFyZ2V0X2F0dHJpYnV0ZXMgKHRleHQpOworfQorCitz dGF0aWMgdm9pZAorY2xlYXJfdGFyZ2V0X2F0dHJpYnV0ZXNfY29tbWFuZCAo Y2hhciAqZXhwLCBpbnQgZnJvbV90dHkpCit7CisgIGNsZWFyX3RhcmdldF9h dHRyaWJ1dGVzIChOVUxMKTsKK30KKworLyogUHJvdmlkZSBhIHByb3RvdHlw ZSB0byBzaWxlbmNlIC1XbWlzc2luZy1wcm90b3R5cGVzLiAgKi8KK2V4dGVy biBpbml0aWFsaXplX2ZpbGVfZnR5cGUgX2luaXRpYWxpemVfdGFyZ2V0c19h dHRyaWJ1dGVzOworCit2b2lkCitfaW5pdGlhbGl6ZV90YXJnZXRzX2F0dHJp YnV0ZXMgKHZvaWQpCit7CisgIGFkZF9jbWQgKCJsb2FkLXRhcmdldC1hdHRy aWJ1dGVzIiwgY2xhc3NfbWFpbnRlbmFuY2UsCisJICAgbG9hZF90YXJnZXRf YXR0cmlidXRlc19jb21tYW5kLAorCSAgIF8oIkxvYWQgdGFyZ2V0IGF0dHJp YnV0ZXMgZnJvbSBhIFhNTCBmaWxlLiIpLAorCSAgICZtYWludGVuYW5jZWxp c3QpOworCisgIGFkZF9jbWQgKCJjbGVhci10YXJnZXQtYXR0cmlidXRlcyIs IGNsYXNzX21haW50ZW5hbmNlLAorCSAgIGNsZWFyX3RhcmdldF9hdHRyaWJ1 dGVzX2NvbW1hbmQsCisJICAgXygiUmVtb3ZlIGFsbCB0YXJnZXQgYXR0cmli dXRlcy4iKSwKKwkgICAmbWFpbnRlbmFuY2VsaXN0KTsKKworICBhZGRfaW5m byAoInRhcmdldC1hdHRyaWJ1dGVzIiwgaW5mb190YXJnZXRfYXR0cmlidXRl cywgXygiXAorU3RhdHVzIG9mIHRhcmdldCBhdHRyaWJ1dGVzLiIpKTsKK30K LS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQtYXR0cmlidXRlcy5oCkBAIC0w LDAgKzEsMTA0IEBACisvKiBUYXJnZXQgYXR0cmlidXRlcyBmb3IgR0RCLCB0 aGUgR05VIGRlYnVnZ2VyLgorCisgICBDb3B5cmlnaHQgKEMpIDIwMTIgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgZmlsZSBp cyBwYXJ0IG9mIEdEQi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkK KyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNl bnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv bi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3Vs ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYg bm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8K KworI2lmbmRlZiBUQVJHRVRfQVRUUklCVVRFU19ICisjZGVmaW5lIFRBUkdF VF9BVFRSSUJVVEVTX0ggMQorCitlbnVtCit7CisgIFRBUkdFVF9BVFRSSUJV VEVfVFlQRV9JTlQ4LAorICBUQVJHRVRfQVRUUklCVVRFX1RZUEVfVUlOVDgs CisgIFRBUkdFVF9BVFRSSUJVVEVfVFlQRV9JTlQxNiwKKyAgVEFSR0VUX0FU VFJJQlVURV9UWVBFX1VJTlQxNiwKKyAgVEFSR0VUX0FUVFJJQlVURV9UWVBF X0lOVDMyLAorICBUQVJHRVRfQVRUUklCVVRFX1RZUEVfVUlOVDMyLAorICBU QVJHRVRfQVRUUklCVVRFX1RZUEVfSU5UNjQsCisgIFRBUkdFVF9BVFRSSUJV VEVfVFlQRV9VSU5UNjQsCit9OworCisjZGVmaW5lIFRBUkdFVF9BVFRSSUJV VEVfQUNDRVNTX1JFQUQJMHgxCisjZGVmaW5lIFRBUkdFVF9BVFRSSUJVVEVf QUNDRVNTX1dSSVRFCTB4MgorCisjZGVmaW5lIFRBUkdFVF9BVFRSSUJVVEVf U1VQUE9SVF9TT0ZUV0FSRV9CUkVBS1BPSU5UCTB4MQorI2RlZmluZSBUQVJH RVRfQVRUUklCVVRFX1NVUFBPUlRfSEFSRFdBUkVfQlJFQUtQT0lOVAkweDIK KyNkZWZpbmUgVEFSR0VUX0FUVFJJQlVURV9TVVBQT1JUX0hBUkRXQVJFX1dB VENIUE9JTlQJMHg0CisjZGVmaW5lIFRBUkdFVF9BVFRSSUJVVEVfU1VQUE9S VF9UUkFDRVBPSU5UCQkweDgKKworc3RydWN0IHRhcmdldF9hdHRyaWJ1dGVf YWRkcmVzcworICB7CisgICAgc3RydWN0IHRhcmdldF9hdHRyaWJ1dGVfYWRk cmVzcyAqcHJldjsKKyAgICBDT1JFX0FERFIJc3RhcnQ7CisgICAgQ09SRV9B RERSCWVuZDsKKyAgfTsKKworLyogVGhpcyBpcyB0aGUgY29yZSBzdHJ1Y3Qg b2YgYSB0YXJnZXQgYXR0cmlidXRlLgorICAgV2hlbiBHREIgZ2V0IGEgdGFy Z2V0IGF0dHJpYnV0ZSBmcm9tIFhNTCwKKyAgIGl0IHdpbGwgYWxsb2MgYSBz dHJ1Y3QgZm9yIGl0LiAgKi8KKworc3RydWN0IHRhcmdldF9hdHRyaWJ1dGUK KyAgeworICAgIHN0cnVjdCB0YXJnZXRfYXR0cmlidXRlICpuZXh0OworICAg IGNoYXIgKm5hbWU7CisgICAgaW50IGlkOworICAgIGludCB0eXBlOworICAg IGludCB0YXJnZXRfb25seV9jb25kX2NoZWNrOworICAgIHVuc2lnbmVkIGlu dCBhZ2VudF9hY2Nlc3M7CisgICAgdW5zaWduZWQgaW50IGdkYl9hY2Nlc3M7 CisgICAgdW5zaWduZWQgaW50IHN1cHBvcnQ7CisgICAgc3RydWN0IHRhcmdl dF9hdHRyaWJ1dGVfYWRkcmVzcyAqYWRkcmVzc2VzOworICB9OworCisvKiBU aGlzIGlzIHRoZSBlcnJvciByZXBvcnQgc3RyaW5nIGZvciBmdW5jdGlvbgor ICAgY2hlY2tfYWdlbnRfdGFyZ2V0X2F0dHJpYnV0ZS4KKyAgIEJlY2F1c2Ug c29tZSBmdW5jdGlvbiBjYWxsIGNoZWNrX2FnZW50X3RhcmdldF9hdHRyaWJ1 dGUKKyAgIHdpdGggVFJZX0NBVENILiAgVXNlIHRoaXMgc3RyaW5nIHJlcG9y dCBlcnJvci4gICovCisKK2V4dGVybiBjaGFyICpjaGVja19hZ2VudF90YXJn ZXRfYXR0cmlidXRlX2Vycm9yOworCitleHRlcm4gc3RydWN0IHRhcmdldF9h dHRyaWJ1dGUgKmZpbmRfdGFyZ2V0X2F0dHJpYnV0ZV9uYW1lIChjb25zdCBj aGFyICpuYW1lKTsKK2V4dGVybiBzdHJ1Y3QgdGFyZ2V0X2F0dHJpYnV0ZSAq ZmluZF90YXJnZXRfYXR0cmlidXRlX2lkIChpbnQgaWQpOworCisvKiBTZXQg QkwgZm9yIGZ1bmN0aW9uIGNoZWNrX2FnZW50X3RhcmdldF9hdHRyaWJ1dGUK KyAgIGJlZm9yZSB0cmFuc2xhdGUgYSBzdHJpbmcgdG8gYWdlbnQgZXhwcmVz c2lvbiBieXRlY29kZS4gICovCisKK2V4dGVybiBzdHJ1Y3QgY2xlYW51cCAq c2V0X2NoZWNrX2FnZW50X3RhcmdldF9hdHRyaWJ1dGUKKwkJCShzdHJ1Y3Qg YnBfbG9jYXRpb24gKmJsKTsKKworLyogVGhlIGZ1bmN0aW9uIHRoYXQgdHJh bnNsYXRlIGEgc3RyaW5nIHRvIGFnZW50IGV4cHJlc3Npb24gYnl0ZWNvZGUg Y2FsbAorICAgY2hlY2tfYWdlbnRfdGFyZ2V0X2F0dHJpYnV0ZSB0byBjaGVj ayBpZiBUQSBpcyBPSyB0byB1c2Ugd2l0aAorICAgQkwgdGhhdCBzZXQgYnkg c2V0X2NoZWNrX2FnZW50X3RhcmdldF9hdHRyaWJ1dGUuICAqLworCitleHRl cm4gdm9pZCBjaGVja19hZ2VudF90YXJnZXRfYXR0cmlidXRlIChzdHJ1Y3Qg dGFyZ2V0X2F0dHJpYnV0ZSAqdGEsCisJCQkJCSAgaW50IHdyaXRlKTsKKwor LyogUmVtb3ZlIGFsbCB0aGUgdGFyZ2V0IGF0dHJpYnV0ZXMgaW5zaWRlIHRo ZSBHREIuICAqLworCitleHRlcm4gdm9pZCBjbGVhcl90YXJnZXRfYXR0cmli dXRlcyAodm9pZCAqdW51c2VkKTsKKworLyogUGFyc2UgdGFyZ2V0IGF0dHJp YnV0ZXMgb3V0IGZyb20gWE1MIGZvcm1hcnQgc3RyaW5nIFRFWFQKKyAgIGFu ZCBhZGQgdGhlbSB0byBHREIuICAqLworCitleHRlcm4gdm9pZCBhZGRfeG1s X3RhcmdldF9hdHRyaWJ1dGVzIChjb25zdCBjaGFyICp0ZXh0KTsKKworLyog UmV0dXJuIHRoZSB0eXBlIG9mIFRBLiAgKi8KKworZXh0ZXJuIHN0cnVjdCB0 eXBlICp0YXJnZXRfYXR0cmlidXRlX3R5cGUgKHN0cnVjdCBnZGJhcmNoICpn ZGJhcmNoLAorCQkJCQkgICBzdHJ1Y3QgdGFyZ2V0X2F0dHJpYnV0ZSAqdGEp OworCisjZW5kaWYgLyogVEFSR0VUX0FUVFJJQlVURVNfSCAqLwotLS0gYS90 YXJnZXQuaAorKysgYi90YXJnZXQuaApAQCAtMjg2LDcgKzI4Niw5IEBAIGVu dW0gdGFyZ2V0X29iamVjdAogICAvKiBEYXJ3aW4gZHluYW1pYyBsaW5rZXIg aW5mbyBkYXRhLiAgKi8KICAgVEFSR0VUX09CSkVDVF9EQVJXSU5fRFlMRF9J TkZPLAogICAvKiBPcGVuVk1TIFVud2luZCBJbmZvcm1hdGlvbiBCbG9jay4g ICovCi0gIFRBUkdFVF9PQkpFQ1RfT1BFTlZNU19VSUIKKyAgVEFSR0VUX09C SkVDVF9PUEVOVk1TX1VJQiwKKyAgLyogVGFyZ2V0IGF0dHJpYnV0ZXMuICAq LworICBUQVJHRVRfT0JKRUNUX0FUVFJJQlVURVMsCiAgIC8qIFBvc3NpYmxl IGZ1dHVyZSBvYmplY3RzOiBUQVJHRVRfT0JKRUNUX0ZJTEUsIC4uLiAgKi8K IH07CiAKLS0tIGEvdHJhY2Vwb2ludC5jCisrKyBiL3RyYWNlcG9pbnQuYwpA QCAtNTMsNiArNTMsNyBAQAogI2luY2x1ZGUgImV4Y2VwdGlvbnMuaCIKICNp bmNsdWRlICJjbGkvY2xpLXV0aWxzLmgiCiAjaW5jbHVkZSAicHJvYmUuaCIK KyNpbmNsdWRlICJ0YXJnZXQtYXR0cmlidXRlcy5oIgogCiAvKiByZWFkbGlu ZSBpbmNsdWRlIGZpbGVzICovCiAjaW5jbHVkZSAicmVhZGxpbmUvcmVhZGxp bmUuaCIKQEAgLTM0Miw2ICszNDMsMjEgQEAgZmluZF90cmFjZV9zdGF0ZV92 YXJpYWJsZSAoY29uc3QgY2hhciAqbgogICByZXR1cm4gTlVMTDsKIH0KIAor LyogTG9vayBmb3IgYSB0cmFjZSBzdGF0ZSB2YXJpYWJsZSBvZiB0aGUgZ2l2 ZW4gbnVtYmVyLiAgKi8KKworc3RhdGljIHN0cnVjdCB0cmFjZV9zdGF0ZV92 YXJpYWJsZSAqCitmaW5kX3RyYWNlX3N0YXRlX3ZhcmlhYmxlX251bWJlciAo aW50IG51bWJlcikKK3sKKyAgc3RydWN0IHRyYWNlX3N0YXRlX3ZhcmlhYmxl ICp0c3Y7CisgIGludCBpeDsKKworICBmb3IgKGl4ID0gMDsgVkVDX2l0ZXJh dGUgKHRzdl9zLCB0dmFyaWFibGVzLCBpeCwgdHN2KTsgKytpeCkKKyAgICBp ZiAobnVtYmVyID09IHRzdi0+bnVtYmVyKQorICAgICAgcmV0dXJuIHRzdjsK KworICByZXR1cm4gTlVMTDsKK30KKwogc3RhdGljIHZvaWQKIGRlbGV0ZV90 cmFjZV9zdGF0ZV92YXJpYWJsZSAoY29uc3QgY2hhciAqbmFtZSkKIHsKQEAg LTM4Niw2ICs0MDIsNDEgQEAgdmFsaWRhdGVfdHJhY2Vfc3RhdGVfdmFyaWFi bGVfbmFtZSAoY29ucwogICAgIGVycm9yIChfKCIkJXMgaXMgbm90IGEgdmFs aWQgdHJhY2Ugc3RhdGUgdmFyaWFibGUgbmFtZSIpLCBuYW1lKTsKIH0KIAor c3RhdGljIGludAordHJhY2VfdmFyaWFibGVfbnVtYmVyX2NoZWNrXzEgKHN0 cnVjdCB0cmFjZV9zdGF0ZV92YXJpYWJsZSAqdHN2KQoreworICBpZiAoZmlu ZF90YXJnZXRfYXR0cmlidXRlX2lkICh0c3YtPm51bWJlcikpCisgICAgewor ICAgICAgaW50IG5ld19udW1iZXIgPSB0c3YtPm51bWJlciArIDE7CisgICAg ICB0c3YtPm51bWJlciA9IDA7CisgICAgICB3aGlsZSAoZmluZF90YXJnZXRf YXR0cmlidXRlX2lkIChuZXdfbnVtYmVyKQorCSAgICAgfHwgZmluZF90cmFj ZV9zdGF0ZV92YXJpYWJsZV9udW1iZXIgKG5ld19udW1iZXIpKQorCW5ld19u dW1iZXIrKzsKKyAgICAgIHRzdi0+bnVtYmVyID0gbmV3X251bWJlcjsKKwor ICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgIHJldHVybiAwOworfQorCit2 b2lkCit0cmFjZV92YXJpYWJsZV9udW1iZXJfY2hlY2sgKHZvaWQpCit7Cisg IHN0cnVjdCB0cmFjZV9zdGF0ZV92YXJpYWJsZSAqdHN2OworICBpbnQgaXg7 CisKKyAgZm9yIChpeCA9IDA7IFZFQ19pdGVyYXRlICh0c3ZfcywgdHZhcmlh YmxlcywgaXgsIHRzdik7ICsraXgpCisgICAgeworICAgICAgaWYgKHRyYWNl X3ZhcmlhYmxlX251bWJlcl9jaGVja18xICh0c3YpKQorICAgICAgICB7CisJ ICB3YXJuaW5nIChfKCJcCitudW1iZXIgb2YgdHJhY2UgdmFyaWFibGUgJCVz IGlzIHNhbWUgd2l0aCBhIHRzdiBjb21wYXRpYmxlIFxuXAordGFyZ2V0IGF0 dHJpYnV0ZS4gIFNvIGl0IGlzIGNoYW5nZWQgdG8gJWQuIiksIHRzdi0+bmFt ZSwgdHN2LT5udW1iZXIpOworCX0KKyAgICB9Cit9CisKIC8qIFRoZSAndHZh cmlhYmxlJyBjb21tYW5kIGNvbGxlY3RzIGEgbmFtZSBhbmQgb3B0aW9uYWwg ZXhwcmVzc2lvbiB0bwogICAgZXZhbHVhdGUgaW50byBhbiBpbml0aWFsIHZh bHVlLiAgKi8KIApAQCAtNDQzLDYgKzQ5NCw4IEBAIHRyYWNlX3ZhcmlhYmxl X2NvbW1hbmQgKGNoYXIgKmFyZ3MsIGludAogCiAgIG9ic2VydmVyX25vdGlm eV90c3ZfY3JlYXRlZCAodHN2KTsKIAorICB0cmFjZV92YXJpYWJsZV9udW1i ZXJfY2hlY2tfMSAodHN2KTsKKwogICBwcmludGZfZmlsdGVyZWQgKF8oIlRy YWNlIHN0YXRlIHZhcmlhYmxlICQlcyAiCiAJCSAgICAgImNyZWF0ZWQsIHdp dGggaW5pdGlhbCB2YWx1ZSAlcy5cbiIpLAogCQkgICB0c3YtPm5hbWUsIHBs b25nZXN0ICh0c3YtPmluaXRpYWxfdmFsdWUpKTsKQEAgLTM2NzQsNiArMzcy Nyw4IEBAIG1lcmdlX3VwbG9hZGVkX3RyYWNlX3N0YXRlX3ZhcmlhYmxlcyAo c3QKICAgICBpZiAodHN2LT5udW1iZXIgPT0gMCkKICAgICAgIHRzdi0+bnVt YmVyID0gaGlnaGVzdCsrOwogCisgIHRyYWNlX3ZhcmlhYmxlX251bWJlcl9j aGVjaygpOworCiAgIGZyZWVfdXBsb2FkZWRfdHN2cyAodXBsb2FkZWRfdHN2 cyk7CiB9CiAKLS0tIGEvdHJhY2Vwb2ludC5oCisrKyBiL3RyYWNlcG9pbnQu aApAQCAtMjQ4LDYgKzI0OCw4IEBAIGV4dGVybiB2b2lkIHZhbGlkYXRlX3Ry YWNlX3N0YXRlX3ZhcmlhYmwKIGV4dGVybiBzdHJ1Y3QgdHJhY2Vfc3RhdGVf dmFyaWFibGUgKmZpbmRfdHJhY2Vfc3RhdGVfdmFyaWFibGUgKGNvbnN0IGNo YXIgKm5hbWUpOwogZXh0ZXJuIHN0cnVjdCB0cmFjZV9zdGF0ZV92YXJpYWJs ZSAqY3JlYXRlX3RyYWNlX3N0YXRlX3ZhcmlhYmxlIChjb25zdCBjaGFyICpu YW1lKTsKIAorZXh0ZXJuIHZvaWQgdHJhY2VfdmFyaWFibGVfbnVtYmVyX2No ZWNrKHZvaWQpOworCiBleHRlcm4gaW50IGVuY29kZV9zb3VyY2Vfc3RyaW5n IChpbnQgbnVtLCBVTE9OR0VTVCBhZGRyLAogCQkJCSBjaGFyICpzcmN0eXBl LCBjaGFyICpzcmMsCiAJCQkJIGNoYXIgKmJ1ZiwgaW50IGJ1Zl9zaXplKTsK --e89a8fb1fe2a50381204d5fcd026--