From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 14754 invoked by alias); 19 Feb 2013 16:11:13 -0000 Received: (qmail 14728 invoked by uid 22791); 19 Feb 2013 16:11:11 -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-f48.google.com (HELO mail-oa0-f48.google.com) (209.85.219.48) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 19 Feb 2013 16:10:58 +0000 Received: by mail-oa0-f48.google.com with SMTP id j1so6946178oag.7 for ; Tue, 19 Feb 2013 08:10:57 -0800 (PST) X-Received: by 10.182.72.5 with SMTP id z5mr7908432obu.24.1361290257618; Tue, 19 Feb 2013 08:10:57 -0800 (PST) MIME-Version: 1.0 Received: by 10.60.46.133 with HTTP; Tue, 19 Feb 2013 08:10:17 -0800 (PST) In-Reply-To: <1361187903.2217.1@abidh-ubunto1104> References: <1361187903.2217.1@abidh-ubunto1104> From: Hui Zhu Date: Tue, 19 Feb 2013 16:11: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=f46d044785333dd60304d61616cb 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/msg00500.txt.bz2 --f46d044785333dd60304d61616cb Content-Type: text/plain; charset=ISO-8859-1 Content-length: 7824 On Mon, Feb 18, 2013 at 7:45 PM, Abid, Hafiz wrote: > On 18/02/13 10:01:10, Hui Zhu wrote: >> >> 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? > > This code may be right. It just looked a bit confusing. Also tap and > user_data point to samething. One of the following 2 assignment seems > redundant. > *tap = ta; > user_data = &ta; > > Thanks for help me on this issue. I make clear about this part of code and I change this part of code to: if (*tap) { /* Add new TA to the tail of TARGET_ATTRIBUTES_LIST. */ (*tap)->next = ta; } else { /* The fist time call target_attribute_attr_handler. Just get USER_DATA from gdb_xml_parse_quick. */ target_attributes_list = ta; } /* Let USER_DATA save the address of new TA. */ *tap = ta; Thanks, Hui 2013-02-19 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. >> >> > >> >>+ 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 >> > --f46d044785333dd60304d61616cb 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_hdd90wke0 Content-length: 43400 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 IC0wLDAgKzEsNjc2IEBACisvKiBUYXJnZXQgYXR0cmlidXRlcyBmb3IgR0RC 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 cik7CisJfQorCisgICAgICB4ZnJlZSAodG1wLT5uYW1lKTsKKyAgICAgIHhm cmVlICh0bXApOworICAgIH0KKworICB0YXJnZXRfYXR0cmlidXRlc19saXN0 ID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQKK2luZm9fdGFyZ2V0X2F0dHJp YnV0ZXMgKGNoYXIgKmFyZ3MsIGludCBmcm9tX3R0eSkKK3sKKyAgc3RydWN0 IHRhcmdldF9hdHRyaWJ1dGUgKnRhOworICBzdHJ1Y3QgY2xlYW51cCAqYmFj a190bzsKKyAgc3RydWN0IHVpX291dCAqdWlvdXQgPSBjdXJyZW50X3Vpb3V0 OworICBpbnQgY291bnQgPSAwOworCisgIGlmICh0YXJnZXRfYXR0cmlidXRl c19saXN0ID09IE5VTEwpCisgICAgeworICAgICAgdWlfb3V0X21lc3NhZ2Ug KHVpb3V0LCAwLCBfKCJObyB0YXJnZXQgYXR0cmlidXRlcy5cbiIpKTsKKyAg ICAgIHJldHVybjsKKyAgICB9CisKKyAgZm9yICh0YSA9IHRhcmdldF9hdHRy aWJ1dGVzX2xpc3Q7IHRhOyB0YSA9IHRhLT5uZXh0KQorICAgIGNvdW50Kys7 CisKKyAgYmFja190byA9IG1ha2VfY2xlYW51cF91aV9vdXRfdGFibGVfYmVn aW5fZW5kICh1aW91dCwgNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb3VudCwgInRhcmdldC1hdHRyaWJ1 dGVzIik7CisgIHVpX291dF90YWJsZV9oZWFkZXIgKHVpb3V0LCAxNSwgdWlf bGVmdCwgIm5hbWUiLCAiTmFtZSIpOworICB1aV9vdXRfdGFibGVfaGVhZGVy ICh1aW91dCwgMTUsIHVpX2xlZnQsICJ0eXBlIiwgIlR5cGUiKTsKKyAgdWlf b3V0X3RhYmxlX2hlYWRlciAodWlvdXQsIDE1LCB1aV9sZWZ0LCAidGFyZ2V0 LW9ubHktY29uZC1jaGVjayIsCisJCSAgICAgICAiVGFyZ2V0LW9ubHktY29u ZC1jaGVjayIpOworICB1aV9vdXRfdGFibGVfaGVhZGVyICh1aW91dCwgMTUs IHVpX2xlZnQsICJhZ2VudCBhY2Nlc3MiLCAiQWdlbnQgYWNjZXNzIik7Cisg IHVpX291dF90YWJsZV9oZWFkZXIgKHVpb3V0LCAxNSwgdWlfbGVmdCwgImdk YiBhY2Nlc3MiLCAiR0RCIGFjY2VzcyIpOworICB1aV9vdXRfdGFibGVfaGVh ZGVyICh1aW91dCwgMTUsIHVpX2xlZnQsICJicmVha3BvaW50IHR5cGUiLAor CQkgICAgICAgIkJyZWFrcG9pbnQgdHlwZSIpOworCisgIHVpX291dF90YWJs ZV9ib2R5ICh1aW91dCk7CisgIGZvciAodGEgPSB0YXJnZXRfYXR0cmlidXRl c19saXN0OyB0YTsgdGEgPSB0YS0+bmV4dCkKKyAgICB7CisgICAgICBzdHJ1 Y3QgdGFyZ2V0X2F0dHJpYnV0ZV9hZGRyZXNzICp0YV9hZGRyOworICAgICAg Y2hhciBidWZbNTEyXTsKKyAgICAgIHN0cnVjdCBjbGVhbnVwICpiYWNrX3Rv MgorCT0gbWFrZV9jbGVhbnVwX3VpX291dF90dXBsZV9iZWdpbl9lbmQgKHVp b3V0LCAiYXR0cmlidXRlcyIpOworCisgICAgICBzbnByaW50ZiAoYnVmLCA1 MTIsICIkJXMiLCB0YS0+bmFtZSk7CisgICAgICB1aV9vdXRfZmllbGRfc3Ry aW5nICh1aW91dCwgIm5hbWUiLCBidWYpOworCisgICAgICBzd2l0Y2ggKHRh LT50eXBlKQorICAgICAgICB7CisJY2FzZSBUQVJHRVRfQVRUUklCVVRFX1RZ UEVfSU5UODoKKwkgIHVpX291dF9maWVsZF9zdHJpbmcgKHVpb3V0LCAidHlw ZSIsICJpbnQ4Iik7CisJICBicmVhazsKKwljYXNlIFRBUkdFVF9BVFRSSUJV VEVfVFlQRV9VSU5UODoKKwkgIHVpX291dF9maWVsZF9zdHJpbmcgKHVpb3V0 LCAidHlwZSIsICJ1aW50OCIpOworCSAgYnJlYWs7CisJY2FzZSBUQVJHRVRf QVRUUklCVVRFX1RZUEVfSU5UMTY6CisJICB1aV9vdXRfZmllbGRfc3RyaW5n ICh1aW91dCwgInR5cGUiLCAiaW50MTYiKTsKKwkgIGJyZWFrOworCWNhc2Ug VEFSR0VUX0FUVFJJQlVURV9UWVBFX1VJTlQxNjoKKwkgIHVpX291dF9maWVs ZF9zdHJpbmcgKHVpb3V0LCAidHlwZSIsICJ1aW50MTYiKTsKKwkgIGJyZWFr OworCWNhc2UgVEFSR0VUX0FUVFJJQlVURV9UWVBFX0lOVDMyOgorCSAgdWlf b3V0X2ZpZWxkX3N0cmluZyAodWlvdXQsICJ0eXBlIiwgImludDMyIik7CisJ ICBicmVhazsKKwljYXNlIFRBUkdFVF9BVFRSSUJVVEVfVFlQRV9VSU5UMzI6 CisJICB1aV9vdXRfZmllbGRfc3RyaW5nICh1aW91dCwgInR5cGUiLCAidWlu dDMyIik7CisJICBicmVhazsKKwljYXNlIFRBUkdFVF9BVFRSSUJVVEVfVFlQ RV9JTlQ2NDoKKwkgIHVpX291dF9maWVsZF9zdHJpbmcgKHVpb3V0LCAidHlw ZSIsICJpbnQ2NCIpOworCSAgYnJlYWs7CisJY2FzZSBUQVJHRVRfQVRUUklC VVRFX1RZUEVfVUlOVDY0OgorCSAgdWlfb3V0X2ZpZWxkX3N0cmluZyAodWlv dXQsICJ0eXBlIiwgInVpbnQ2NCIpOworCSAgYnJlYWs7CisJfQorCisgICAg ICB1aV9vdXRfZmllbGRfc3RyaW5nICh1aW91dCwgInRhcmdldC1vbmx5LWNv bmQtY2hlY2siLAorCQkJICAgdGEtPnRhcmdldF9vbmx5X2NvbmRfY2hlY2sg PyAieWVzIiA6ICJubyIpOworCisgICAgICBzbnByaW50ZiAoYnVmLCA1MTIs ICIlcyVzIiwKKwkJKHRhLT5hZ2VudF9hY2Nlc3MKKwkJICYgVEFSR0VUX0FU VFJJQlVURV9BQ0NFU1NfUkVBRCkgPyAicmVhZCAiIDogIiIsCisJCSh0YS0+ YWdlbnRfYWNjZXNzCisJCSAmIFRBUkdFVF9BVFRSSUJVVEVfQUNDRVNTX1dS SVRFKSA/ICJ3cml0ZSIgOiAiIik7CisgICAgICB1aV9vdXRfZmllbGRfc3Ry aW5nICh1aW91dCwgImFnZW50IGFjY2VzcyIsIGJ1Zik7CisKKyAgICAgIHNu cHJpbnRmIChidWYsIDUxMiwgIiVzJXMiLAorCQkodGEtPmdkYl9hY2Nlc3Mg JiBUQVJHRVRfQVRUUklCVVRFX0FDQ0VTU19SRUFEKSA/ICJyZWFkICIgOiAi IiwKKwkJKHRhLT5nZGJfYWNjZXNzCisJCSAmIFRBUkdFVF9BVFRSSUJVVEVf QUNDRVNTX1dSSVRFKSA/ICJ3cml0ZSIgOiAiIik7CisgICAgICB1aV9vdXRf ZmllbGRfc3RyaW5nICh1aW91dCwgImdkYiBhY2Nlc3MiLCBidWYpOworCisg ICAgICBzbnByaW50ZiAoYnVmLCA1MTIsICIlcyVzJXMlcyIsCisJCSh0YS0+ c3VwcG9ydCAmIFRBUkdFVF9BVFRSSUJVVEVfU1VQUE9SVF9TT0ZUV0FSRV9C UkVBS1BPSU5UKQorCQk/ICJzb2Z0d2FyZS1icmVha3BvaW50ICIgOiAiIiwK KwkJKHRhLT5zdXBwb3J0ICYgVEFSR0VUX0FUVFJJQlVURV9TVVBQT1JUX0hB UkRXQVJFX0JSRUFLUE9JTlQpCisJCT8gImhhcmR3YXJlLWJyZWFrcG9pbnQg IiA6ICIiLAorCQkodGEtPnN1cHBvcnQgJiBUQVJHRVRfQVRUUklCVVRFX1NV UFBPUlRfSEFSRFdBUkVfV0FUQ0hQT0lOVCkKKwkJPyAiaGFyZHdhcmUtd2F0 Y2hwb2ludCAiIDogIiIsCisJCSh0YS0+c3VwcG9ydCAmIFRBUkdFVF9BVFRS SUJVVEVfU1VQUE9SVF9UUkFDRVBPSU5UKQorCQk/ICJ0cmFjZXBvaW50ICIg OiAiIik7CisgICAgICB1aV9vdXRfZmllbGRfc3RyaW5nICh1aW91dCwgImJy ZWFrcG9pbnQgdHlwZSIsIGJ1Zik7CisKKyAgICAgIHVpX291dF90ZXh0ICh1 aW91dCwgIlxuIik7CisKKyAgICAgIGZvciAodGFfYWRkciA9IHRhLT5hZGRy ZXNzZXM7IHRhX2FkZHI7IHRhX2FkZHIgPSB0YV9hZGRyLT5wcmV2KQorICAg ICAgICB7CisJICB1aV9vdXRfc3BhY2VzICh1aW91dCwgMik7CisJICB1aV9v dXRfbWVzc2FnZSAodWlvdXQsIDAsICJzdGFydDolcyBlbmQ6JXNcbiIsCisJ CQkgIHBhZGRyZXNzICh0YXJnZXRfZ2RiYXJjaCAoKSwgdGFfYWRkci0+c3Rh cnQpLAorCQkJICBwYWRkcmVzcyAodGFyZ2V0X2dkYmFyY2ggKCksIHRhX2Fk ZHItPmVuZCkpOworCX0KKyAgICAgIGRvX2NsZWFudXBzIChiYWNrX3RvMik7 CisgICAgfQorCisgIGRvX2NsZWFudXBzIChiYWNrX3RvKTsKK30KKworI2lm ICFkZWZpbmVkKEhBVkVfTElCRVhQQVQpCisKK3ZvaWQKK2FkZF94bWxfdGFy Z2V0X2F0dHJpYnV0ZXMgKGNvbnN0IGNoYXIgKnRleHQpCit7CisgIGlmIChz dHJsZW4gKHRleHQpID4gMCkKKyAgICB3YXJuaW5nIChfKCJDYW4gbm90IHBh cnNlIFhNTCB0YXJnZXQgYXR0cmlidXRlczsgWE1MIHN1cHBvcnQgIgorCSAg ICAgICAid2FzIGRpc2FibGVkIGF0IGNvbXBpbGUgdGltZSIpKTsKK30KKwor I2Vsc2UKKworI2luY2x1ZGUgInhtbC1zdXBwb3J0LmgiCisKK3N0YXRpYyB2 b2lkCit0YXJnZXRfYXR0cmlidXRlX2F0dHJfaGFuZGxlciAoc3RydWN0IGdk Yl94bWxfcGFyc2VyICpwYXJzZXIsCisJCQkgICAgICAgY29uc3Qgc3RydWN0 IGdkYl94bWxfZWxlbWVudCAqZWxlbWVudCwKKwkJCSAgICAgICB2b2lkICp1 c2VyX2RhdGEsCisJCQkgICAgICAgVkVDKGdkYl94bWxfdmFsdWVfcykgKmF0 dHJpYnV0ZXMpCit7CisgIGNoYXIgKm5hbWUgPSBOVUxMOworICBpbnQgaSwg bGVuLCBpZCA9IC0xLCB0eXBlID0gMCwgdGFyZ2V0X29ubHlfY29uZF9jaGVj ayA9IDA7CisgIHN0cnVjdCBnZGJfeG1sX3ZhbHVlICphdHRycyA9IFZFQ19h ZGRyZXNzIChnZGJfeG1sX3ZhbHVlX3MsIGF0dHJpYnV0ZXMpOworICBzdHJ1 Y3QgdGFyZ2V0X2F0dHJpYnV0ZSAqdGEsICoqdGFwID0gdXNlcl9kYXRhOwor CisgIGxlbiA9IFZFQ19sZW5ndGggKGdkYl94bWxfdmFsdWVfcywgYXR0cmli dXRlcyk7CisgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKyAgICB7Cisg ICAgICBpZiAoc3RyY21wIChhdHRyc1tpXS5uYW1lLCAibmFtZSIpID09IDAp CisgICAgICAgIG5hbWUgPSBhdHRyc1tpXS52YWx1ZTsKKyAgICAgIGVsc2Ug aWYgKHN0cmNtcCAoYXR0cnNbaV0ubmFtZSwgImlkIikgPT0gMCkKKyAgICAg ICAgaWQgPSAqIChVTE9OR0VTVCAqKSBhdHRyc1tpXS52YWx1ZTsKKyAgICAg IGVsc2UgaWYgKHN0cmNtcCAoYXR0cnNbaV0ubmFtZSwgInR5cGUiKSA9PSAw KQorICAgICAgICB0eXBlID0gKiAoVUxPTkdFU1QgKikgYXR0cnNbaV0udmFs dWU7CisgICAgICBlbHNlIGlmIChzdHJjbXAgKGF0dHJzW2ldLm5hbWUsICJ0 YXJnZXQtb25seS1jb25kLWNoZWNrIikgPT0gMCkKKyAgICAgICAgdGFyZ2V0 X29ubHlfY29uZF9jaGVjayA9ICogKFVMT05HRVNUICopIGF0dHJzW2ldLnZh bHVlOworICAgICAgZWxzZQorICAgICAgICBnZGJfeG1sX2Vycm9yIChwYXJz ZXIsIF8oIlVua25vd24gYXR0cmlidXRlIG5hbWUgJyVzJy4iKSwKKwkJICAg ICAgIGF0dHJzW2ldLm5hbWUpOworICAgIH0KKworICBpZiAoIW5hbWUgfHwg aWQgPCAwKQorICAgIGdkYl94bWxfZXJyb3IgKHBhcnNlciwgXygiXCJuYW1l XCIgb3IgXCJpZFwiIGlzIG1pc3NlZC4iKSk7CisKKyAgaWYgKGZpbmRfdGFy Z2V0X2F0dHJpYnV0ZV9uYW1lIChuYW1lKSkKKyAgICBnZGJfeG1sX2Vycm9y IChwYXJzZXIsXygiXAorbmFtZSBcIiVzXCIgaXMgc2FtZSB3aXRoIGEgdGFy Z2V0IGF0dHJpYnV0ZS4iKSwgbmFtZSk7CisgIGlmIChmaW5kX3RhcmdldF9h dHRyaWJ1dGVfaWQgKGlkKSkKKyAgICBnZGJfeG1sX2Vycm9yIChwYXJzZXIs XygiaWQgXCIlZFwiIGlzIHNhbWUgd2l0aCBhIHRhcmdldCBhdHRyaWJ1dGUu IiksIGlkKTsKKworICB0YSA9IHh6YWxsb2MgKHNpemVvZiAoc3RydWN0IHRh cmdldF9hdHRyaWJ1dGUpKTsKKyAgdGEtPm5hbWUgPSB4c3RyZHVwIChuYW1l KTsKKyAgdGEtPmlkID0gaWQ7CisgIHRhLT50eXBlID0gdHlwZTsKKyAgdGEt PnRhcmdldF9vbmx5X2NvbmRfY2hlY2sgPSB0YXJnZXRfb25seV9jb25kX2No ZWNrOworCisgIGlmICgqdGFwKQorICAgIHsKKyAgICAgIC8qIEFkZCBuZXcg VEEgdG8gdGhlIHRhaWwgb2YgVEFSR0VUX0FUVFJJQlVURVNfTElTVC4gICov CisgICAgICAoKnRhcCktPm5leHQgPSB0YTsKKyAgICB9CisgIGVsc2UKKyAg ICB7CisgICAgICAvKiBUaGUgZmlzdCB0aW1lIGNhbGwgdGFyZ2V0X2F0dHJp YnV0ZV9hdHRyX2hhbmRsZXIuCisgICAgICAgICBKdXN0IGdldCBVU0VSX0RB VEEgZnJvbSBnZGJfeG1sX3BhcnNlX3F1aWNrLiAgKi8KKyAgICAgIHRhcmdl dF9hdHRyaWJ1dGVzX2xpc3QgPSB0YTsKKyAgICB9CisgIC8qIExldCBVU0VS X0RBVEEgc2F2ZSB0aGUgYWRkcmVzcyBvZiBuZXcgVEEuICAqLworICAqdGFw ID0gdGE7Cit9CisKK3N0YXRpYyB2b2lkCit0YXJnZXRfYXR0cmlidXRlX2Fj Y2Vzc19jaGlsZHJlbl9oYW5kbGVyIChzdHJ1Y3QgZ2RiX3htbF9wYXJzZXIg KnBhcnNlciwKKwkJCQkJICBjb25zdCBzdHJ1Y3QgZ2RiX3htbF9lbGVtZW50 ICplbGVtZW50LAorCQkJCQkgIHZvaWQgKnVzZXJfZGF0YSwKKwkJCQkJICBW RUMoZ2RiX3htbF92YWx1ZV9zKSAqYXR0cmlidXRlcykKK3sKKyAgc3RydWN0 IHRhcmdldF9hdHRyaWJ1dGUgKnRhID0gKihzdHJ1Y3QgdGFyZ2V0X2F0dHJp YnV0ZSAqKil1c2VyX2RhdGE7CisgIGludCBpLCBsZW4sIHRhX2FjY2VzcyA9 IDA7CisgIHN0cnVjdCBnZGJfeG1sX3ZhbHVlICphdHRycyA9IFZFQ19hZGRy ZXNzIChnZGJfeG1sX3ZhbHVlX3MsIGF0dHJpYnV0ZXMpOworCisgIGxlbiA9 IFZFQ19sZW5ndGggKGdkYl94bWxfdmFsdWVfcywgYXR0cmlidXRlcyk7Cisg IGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKyAgICB7CisgICAgICBpZiAo c3RyY21wIChhdHRyc1tpXS5uYW1lLCAicmVhZCIpID09IDApCisgICAgICAg IHsKKwkgIGlmICgqIChVTE9OR0VTVCAqKSBhdHRyc1tpXS52YWx1ZSkKKyAg ICAgICAgICAgIHRhX2FjY2VzcyB8PSBUQVJHRVRfQVRUUklCVVRFX0FDQ0VT U19SRUFEOworCX0KKyAgICAgIGVsc2UgaWYgKHN0cmNtcCAoYXR0cnNbaV0u bmFtZSwgIndyaXRlIikgPT0gMCkKKyAgICAgICAgeworCSAgaWYgKCogKFVM T05HRVNUICopIGF0dHJzW2ldLnZhbHVlKQorICAgICAgICAgICAgdGFfYWNj ZXNzIHw9IFRBUkdFVF9BVFRSSUJVVEVfQUNDRVNTX1dSSVRFOworCX0KKyAg ICAgIGVsc2UKKyAgICAgICAgZ2RiX3htbF9lcnJvciAocGFyc2VyLCBfKCJV bmtub3duIGF0dHJpYnV0ZSBuYW1lICclcycuIiksCisJCSAgICAgICBhdHRy c1tpXS5uYW1lKTsKKyAgICB9CisKKyAgaWYgKHN0cmNtcCAoZWxlbWVudC0+ bmFtZSwgImFnZW50IikgPT0gMCkKKyAgICB0YS0+YWdlbnRfYWNjZXNzID0g dGFfYWNjZXNzOworICBlbHNlCisgICAgdGEtPmdkYl9hY2Nlc3MgPSB0YV9h Y2Nlc3M7Cit9CisKK3N0YXRpYyB2b2lkCit0YXJnZXRfYXR0cmlidXRlX3N1 cHBvcnRfYXR0cl9oYW5kbGVyIChzdHJ1Y3QgZ2RiX3htbF9wYXJzZXIgKnBh cnNlciwKKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IGdkYl94bWxfZWxlbWVu dCAqZWxlbWVudCwKKwkJCQkgICAgICAgdm9pZCAqdXNlcl9kYXRhLAorCQkJ CSAgICAgICBWRUMoZ2RiX3htbF92YWx1ZV9zKSAqYXR0cmlidXRlcykKK3sK KyAgc3RydWN0IHRhcmdldF9hdHRyaWJ1dGUgKnRhID0gKihzdHJ1Y3QgdGFy Z2V0X2F0dHJpYnV0ZSAqKil1c2VyX2RhdGE7CisgIGludCBpLCBsZW4gPSAw OworICBzdHJ1Y3QgZ2RiX3htbF92YWx1ZSAqYXR0cnMgPSBWRUNfYWRkcmVz cyAoZ2RiX3htbF92YWx1ZV9zLCBhdHRyaWJ1dGVzKTsKKworICBsZW4gPSBW RUNfbGVuZ3RoIChnZGJfeG1sX3ZhbHVlX3MsIGF0dHJpYnV0ZXMpOworICBm b3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisgICAgeworICAgICAgaWYgKHN0 cmNtcCAoYXR0cnNbaV0ubmFtZSwgInNvZnR3YXJlLWJyZWFrcG9pbnQiKSA9 PSAwKQorICAgICAgICB7CisJICBpZiAoKiAoVUxPTkdFU1QgKikgYXR0cnNb aV0udmFsdWUpCisgICAgICAgICAgICB0YS0+c3VwcG9ydCB8PSBUQVJHRVRf QVRUUklCVVRFX1NVUFBPUlRfU09GVFdBUkVfQlJFQUtQT0lOVDsKKwl9Cisg ICAgICBlbHNlIGlmIChzdHJjbXAgKGF0dHJzW2ldLm5hbWUsICJoYXJkd2Fy ZS1icmVha3BvaW50IikgPT0gMCkKKyAgICAgICAgeworCSAgaWYgKCogKFVM T05HRVNUICopIGF0dHJzW2ldLnZhbHVlKQorICAgICAgICAgICAgdGEtPnN1 cHBvcnQgfD0gVEFSR0VUX0FUVFJJQlVURV9TVVBQT1JUX0hBUkRXQVJFX0JS RUFLUE9JTlQ7CisJfQorICAgICAgZWxzZSBpZiAoc3RyY21wIChhdHRyc1tp XS5uYW1lLCAiaGFyZHdhcmUtd2F0Y2hwb2ludCIpID09IDApCisgICAgICAg IHsKKwkgIGlmICgqIChVTE9OR0VTVCAqKSBhdHRyc1tpXS52YWx1ZSkKKyAg ICAgICAgICAgIHRhLT5zdXBwb3J0IHw9IFRBUkdFVF9BVFRSSUJVVEVfU1VQ UE9SVF9IQVJEV0FSRV9XQVRDSFBPSU5UOworCX0KKyAgICAgIGVsc2UgaWYg KHN0cmNtcCAoYXR0cnNbaV0ubmFtZSwgInRyYWNlcG9pbnQiKSA9PSAwKQor ICAgICAgICB7CisJICBpZiAoKiAoVUxPTkdFU1QgKikgYXR0cnNbaV0udmFs dWUpCisgICAgICAgICAgICB0YS0+c3VwcG9ydCB8PSBUQVJHRVRfQVRUUklC VVRFX1NVUFBPUlRfVFJBQ0VQT0lOVDsKKwl9CisgICAgICBlbHNlCisgICAg ICAgIGdkYl94bWxfZXJyb3IgKHBhcnNlciwgXygiVW5rbm93biBhdHRyaWJ1 dGUgbmFtZSAnJXMnLiIpLAorCQkgICAgICAgYXR0cnNbaV0ubmFtZSk7Cisg ICAgfQorfQorCitzdGF0aWMgdm9pZAordGFyZ2V0X2F0dHJpYnV0ZV9hZGRy ZXNzX2hhbmRsZXIgKHN0cnVjdCBnZGJfeG1sX3BhcnNlciAqcGFyc2VyLAor CQkJCSAgY29uc3Qgc3RydWN0IGdkYl94bWxfZWxlbWVudCAqZWxlbWVudCwK KwkJCQkgIHZvaWQgKnVzZXJfZGF0YSwKKwkJCQkgIFZFQyhnZGJfeG1sX3Zh bHVlX3MpICphdHRyaWJ1dGVzKQoreworICBpbnQgaSwgbGVuOworICBzdHJ1 Y3QgZ2RiX3htbF92YWx1ZSAqYXR0cnMgPSBWRUNfYWRkcmVzcyAoZ2RiX3ht bF92YWx1ZV9zLCBhdHRyaWJ1dGVzKTsKKyAgc3RydWN0IHRhcmdldF9hdHRy aWJ1dGUgKnRhID0gKihzdHJ1Y3QgdGFyZ2V0X2F0dHJpYnV0ZSAqKil1c2Vy X2RhdGE7CisgIENPUkVfQUREUiBzdGFydCA9IDAsIGVuZCA9IDA7CisgIHN0 cnVjdCB0YXJnZXRfYXR0cmlidXRlX2FkZHJlc3MgKnRhX2FkZHI7CisKKyAg bGVuID0gVkVDX2xlbmd0aCAoZ2RiX3htbF92YWx1ZV9zLCBhdHRyaWJ1dGVz KTsKKyAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorICAgIHsKKyAgICAg IGlmIChzdHJjbXAgKGF0dHJzW2ldLm5hbWUsICJzdGFydCIpID09IDApCisg ICAgICAgIHN0YXJ0ID0gKiAoVUxPTkdFU1QgKikgYXR0cnNbaV0udmFsdWU7 CisgICAgICBlbHNlIGlmIChzdHJjbXAgKGF0dHJzW2ldLm5hbWUsICJlbmQi KSA9PSAwKQorICAgICAgICBlbmQgPSAqIChVTE9OR0VTVCAqKSBhdHRyc1tp XS52YWx1ZTsKKyAgICAgIGVsc2UKKyAgICAgICAgZ2RiX3htbF9lcnJvciAo cGFyc2VyLCBfKCJVbmtub3duIGF0dHJpYnV0ZSBuYW1lICclcycuIiksCisJ CSAgICAgICBhdHRyc1tpXS5uYW1lKTsKKyAgICB9CisKKyAgdGFfYWRkciA9 IHhtYWxsb2MgKHNpemVvZiAoc3RydWN0IHRhcmdldF9hdHRyaWJ1dGVfYWRk cmVzcykpOworICB0YV9hZGRyLT5zdGFydCA9IHN0YXJ0OworICB0YV9hZGRy LT5lbmQgPSBlbmQ7CisKKyAgdGFfYWRkci0+cHJldiA9IHRhLT5hZGRyZXNz ZXM7CisgIHRhLT5hZGRyZXNzZXMgPSB0YV9hZGRyOworfQorCitjb25zdCBz dHJ1Y3QgZ2RiX3htbF9lbnVtIHRhcmdldF9hdHRyaWJ1dGVfdHlwZV9lbnVt c1tdID0geworICB7ICJpbnQ4IiwgVEFSR0VUX0FUVFJJQlVURV9UWVBFX0lO VDggfSwKKyAgeyAidWludDgiLCBUQVJHRVRfQVRUUklCVVRFX1RZUEVfVUlO VDggfSwKKyAgeyAiaW50MTYiLCBUQVJHRVRfQVRUUklCVVRFX1RZUEVfSU5U MTYgfSwKKyAgeyAidWludDE2IiwgVEFSR0VUX0FUVFJJQlVURV9UWVBFX1VJ TlQxNiB9LAorICB7ICJpbnQzMiIsIFRBUkdFVF9BVFRSSUJVVEVfVFlQRV9J TlQzMiB9LAorICB7ICJ1aW50MzIiLCBUQVJHRVRfQVRUUklCVVRFX1RZUEVf VUlOVDMyIH0sCisgIHsgImludDY0IiwgVEFSR0VUX0FUVFJJQlVURV9UWVBF X0lOVDY0IH0sCisgIHsgInVpbnQ2NCIsIFRBUkdFVF9BVFRSSUJVVEVfVFlQ RV9VSU5UNjQgfSwKKyAgeyBOVUxMLCAwIH0KK307CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgZ2RiX3htbF9hdHRyaWJ1dGUgdGFyZ2V0X2F0dHJpYnV0ZV9h dHRyW10gPSB7CisgIHsgIm5hbWUiLCBHREJfWE1MX0FGX05PTkUsIE5VTEws IE5VTEwgfSwKKyAgeyAiaWQiLCBHREJfWE1MX0FGX05PTkUsIGdkYl94bWxf cGFyc2VfYXR0cl91bG9uZ2VzdCwgTlVMTCB9LAorICB7ICJ0eXBlIiwgR0RC X1hNTF9BRl9OT05FLCBnZGJfeG1sX3BhcnNlX2F0dHJfZW51bSwKKyAgICB0 YXJnZXRfYXR0cmlidXRlX3R5cGVfZW51bXMgfSwKKyAgeyAidGFyZ2V0LW9u bHktY29uZC1jaGVjayIsIEdEQl9YTUxfQUZfT1BUSU9OQUwsIGdkYl94bWxf cGFyc2VfYXR0cl9lbnVtLAorICAgIGdkYl94bWxfZW51bXNfYm9vbGVhbiB9 LAorICB7IE5VTEwsIEdEQl9YTUxfQUZfTk9ORSwgTlVMTCwgTlVMTCB9Cit9 OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGdkYl94bWxfYXR0cmlidXRlCisJ CQl0YXJnZXRfYXR0cmlidXRlX2FjY2Vzc19jaGlsZHJlbl9hdHRyW10gPSB7 CisgIHsgInJlYWQiLCBHREJfWE1MX0FGX09QVElPTkFMLCBnZGJfeG1sX3Bh cnNlX2F0dHJfZW51bSwKKyAgICBnZGJfeG1sX2VudW1zX2Jvb2xlYW4gfSwK KyAgeyAid3JpdGUiLCBHREJfWE1MX0FGX09QVElPTkFMLCBnZGJfeG1sX3Bh cnNlX2F0dHJfZW51bSwKKyAgICBnZGJfeG1sX2VudW1zX2Jvb2xlYW4gfSwK KyAgeyBOVUxMLCBHREJfWE1MX0FGX05PTkUsIE5VTEwsIE5VTEwgfQorfTsK Kworc3RhdGljIGNvbnN0IHN0cnVjdCBnZGJfeG1sX2VsZW1lbnQgdGFyZ2V0 X2F0dHJpYnV0ZV9hY2Nlc3NfY2hpbGRyZW5bXSA9IHsKKyAgeyAiYWdlbnQi LCB0YXJnZXRfYXR0cmlidXRlX2FjY2Vzc19jaGlsZHJlbl9hdHRyLCBOVUxM LAorICAgIEdEQl9YTUxfRUZfT1BUSU9OQUwsIHRhcmdldF9hdHRyaWJ1dGVf YWNjZXNzX2NoaWxkcmVuX2hhbmRsZXIsIE5VTEwgfSwKKyAgeyAiZ2RiIiwg dGFyZ2V0X2F0dHJpYnV0ZV9hY2Nlc3NfY2hpbGRyZW5fYXR0ciwgTlVMTCwK KyAgICBHREJfWE1MX0VGX09QVElPTkFMLCB0YXJnZXRfYXR0cmlidXRlX2Fj Y2Vzc19jaGlsZHJlbl9oYW5kbGVyLCBOVUxMIH0sCisgIHsgTlVMTCwgTlVM TCwgTlVMTCwgR0RCX1hNTF9FRl9OT05FLCBOVUxMLCBOVUxMIH0KK307CisK K3N0YXRpYyBjb25zdCBzdHJ1Y3QgZ2RiX3htbF9hdHRyaWJ1dGUgdGFyZ2V0 X2F0dHJpYnV0ZV9zdXBwb3J0X2F0dHJbXSA9IHsKKyAgeyAic29mdHdhcmUt YnJlYWtwb2ludCIsIEdEQl9YTUxfQUZfT1BUSU9OQUwsIGdkYl94bWxfcGFy c2VfYXR0cl9lbnVtLAorICAgIGdkYl94bWxfZW51bXNfYm9vbGVhbiB9LAor ICB7ICJoYXJkd2FyZS1icmVha3BvaW50IiwgR0RCX1hNTF9BRl9PUFRJT05B TCwgZ2RiX3htbF9wYXJzZV9hdHRyX2VudW0sCisgICAgZ2RiX3htbF9lbnVt c19ib29sZWFuIH0sCisgIHsgImhhcmR3YXJlLXdhdGNocG9pbnQiLCBHREJf WE1MX0FGX09QVElPTkFMLCBnZGJfeG1sX3BhcnNlX2F0dHJfZW51bSwKKyAg ICBnZGJfeG1sX2VudW1zX2Jvb2xlYW4gfSwKKyAgeyAidHJhY2Vwb2ludCIs IEdEQl9YTUxfQUZfT1BUSU9OQUwsIGdkYl94bWxfcGFyc2VfYXR0cl9lbnVt LAorICAgIGdkYl94bWxfZW51bXNfYm9vbGVhbiB9LAorICB7IE5VTEwsIEdE Ql9YTUxfQUZfTk9ORSwgTlVMTCwgTlVMTCB9Cit9OworCitzdGF0aWMgY29u c3Qgc3RydWN0IGdkYl94bWxfYXR0cmlidXRlIHRhcmdldF9hdHRyaWJ1dGVf YWRkcmVzc19hdHRyW10gPSB7CisgIHsgInN0YXJ0IiwgR0RCX1hNTF9BRl9O T05FLCBnZGJfeG1sX3BhcnNlX2F0dHJfdWxvbmdlc3QsIE5VTEwgfSwKKyAg eyAiZW5kIiwgR0RCX1hNTF9BRl9OT05FLCBnZGJfeG1sX3BhcnNlX2F0dHJf dWxvbmdlc3QsIE5VTEwgfSwKKyAgeyBOVUxMLCBHREJfWE1MX0FGX05PTkUs IE5VTEwsIE5VTEwgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBnZGJf eG1sX2VsZW1lbnQgdGFyZ2V0X2F0dHJpYnV0ZV9hZGRyZXNzZXNfY2hpbGRy ZW5bXSA9IHsKKyAgeyAiYWRkcmVzcyIsIHRhcmdldF9hdHRyaWJ1dGVfYWRk cmVzc19hdHRyLCBOVUxMLAorICAgIEdEQl9YTUxfRUZfT1BUSU9OQUwgfCBH REJfWE1MX0VGX1JFUEVBVEFCTEUsCisgICAgdGFyZ2V0X2F0dHJpYnV0ZV9h ZGRyZXNzX2hhbmRsZXIsIE5VTEwgfSwKKyAgeyBOVUxMLCBOVUxMLCBOVUxM LCBHREJfWE1MX0VGX05PTkUsIE5VTEwsIE5VTEwgfQorfTsKKworc3RhdGlj IGNvbnN0IHN0cnVjdCBnZGJfeG1sX2VsZW1lbnQgdGFyZ2V0X2F0dHJpYnV0 ZV9lbGVtZW50c1tdID0geworICB7ICJhY2Nlc3MiLCBOVUxMLCB0YXJnZXRf YXR0cmlidXRlX2FjY2Vzc19jaGlsZHJlbiwKKyAgICBHREJfWE1MX0VGX05P TkUsIE5VTEwsIE5VTEwgfSwKKyAgeyAic3VwcG9ydCIsIHRhcmdldF9hdHRy aWJ1dGVfc3VwcG9ydF9hdHRyLCBOVUxMLAorICAgIEdEQl9YTUxfRUZfT1BU SU9OQUwsIHRhcmdldF9hdHRyaWJ1dGVfc3VwcG9ydF9hdHRyX2hhbmRsZXIs IE5VTEwgfSwKKyAgeyAiYWRkcmVzc2VzIiwgTlVMTCwgdGFyZ2V0X2F0dHJp YnV0ZV9hZGRyZXNzZXNfY2hpbGRyZW4sCisgICAgR0RCX1hNTF9FRl9PUFRJ T05BTCwgTlVMTCwgTlVMTCB9LAorICB7IE5VTEwsIE5VTEwsIE5VTEwsIEdE Ql9YTUxfRUZfTk9ORSwgTlVMTCwgTlVMTCB9Cit9OworCitzdGF0aWMgY29u c3Qgc3RydWN0IGdkYl94bWxfZWxlbWVudCB0YXJnZXRfYXR0cmlidXRlc19j aGlsZHJlbltdID0geworICB7ICJ0YXJnZXQtYXR0cmlidXRlIiwgdGFyZ2V0 X2F0dHJpYnV0ZV9hdHRyLCB0YXJnZXRfYXR0cmlidXRlX2VsZW1lbnRzLAor ICAgIEdEQl9YTUxfRUZfT1BUSU9OQUwgfCBHREJfWE1MX0VGX1JFUEVBVEFC TEUsCisgICAgdGFyZ2V0X2F0dHJpYnV0ZV9hdHRyX2hhbmRsZXIsIE5VTEwg fSwKKyAgeyBOVUxMLCBOVUxMLCBOVUxMLCBHREJfWE1MX0VGX05PTkUsIE5V TEwsIE5VTEwgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBnZGJfeG1s X2VsZW1lbnQgdGFyZ2V0X2F0dHJpYnV0ZXNfZWxlbWVudHNbXSA9IHsKKyAg eyAidGFyZ2V0LWF0dHJpYnV0ZXMiLCBOVUxMLCB0YXJnZXRfYXR0cmlidXRl c19jaGlsZHJlbiwKKyAgICBHREJfWE1MX0VGX05PTkUsIE5VTEwsIE5VTEwg fSwKKyAgeyBOVUxMLCBOVUxMLCBOVUxMLCBHREJfWE1MX0VGX05PTkUsIE5V TEwsIE5VTEwgfQorfTsKKwordm9pZAorYWRkX3htbF90YXJnZXRfYXR0cmli dXRlcyAoY29uc3QgY2hhciAqdGV4dCkKK3sKKyAgc3RydWN0IHRhcmdldF9h dHRyaWJ1dGUgKnRhID0gTlVMTDsKKyAgc3RydWN0IGNsZWFudXAgKmJhY2tf dG8gPSBtYWtlX2NsZWFudXAgKGNsZWFyX3RhcmdldF9hdHRyaWJ1dGVzLCBO VUxMKTsKKworICBjbGVhcl90YXJnZXRfYXR0cmlidXRlcyhOVUxMKTsKKyAg aWYgKGdkYl94bWxfcGFyc2VfcXVpY2sgKF8oInRhcmdldCBhdHRyaWJ1dGVz IiksIE5VTEwsCisJCQkgICB0YXJnZXRfYXR0cmlidXRlc19lbGVtZW50cywg dGV4dCwgJnRhKSA9PSAwKQorICAgIHsKKyAgICAgIGRpc2NhcmRfY2xlYW51 cHMgKGJhY2tfdG8pOworICAgICAgdHJhY2VfdmFyaWFibGVfbnVtYmVyX2No ZWNrICgpOworICAgIH0KKyAgZWxzZQorICAgIGRvX2NsZWFudXBzIChiYWNr X3RvKTsKK30KKworI2VuZGlmCisKK3N0cnVjdCB0eXBlICoKK3RhcmdldF9h dHRyaWJ1dGVfdHlwZSAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsIHN0cnVj dCB0YXJnZXRfYXR0cmlidXRlICp0YSkKK3sKKyAgc3RydWN0IHR5cGUgKnJl dCA9IGJ1aWx0aW5fdHlwZSAoZ2RiYXJjaCktPmJ1aWx0aW5fdWludDY0Owor CisgIHN3aXRjaCAodGEtPnR5cGUpCisgICAgeworICAgIGNhc2UgVEFSR0VU X0FUVFJJQlVURV9UWVBFX0lOVDg6CisgICAgICByZXQgPSBidWlsdGluX3R5 cGUgKGdkYmFyY2gpLT5idWlsdGluX2ludDg7CisgICAgICBicmVhazsKKyAg ICBjYXNlIFRBUkdFVF9BVFRSSUJVVEVfVFlQRV9VSU5UODoKKyAgICAgIHJl dCA9IGJ1aWx0aW5fdHlwZSAoZ2RiYXJjaCktPmJ1aWx0aW5fdWludDg7Cisg ICAgICBicmVhazsKKyAgICBjYXNlIFRBUkdFVF9BVFRSSUJVVEVfVFlQRV9J TlQxNjoKKyAgICAgIHJldCA9IGJ1aWx0aW5fdHlwZSAoZ2RiYXJjaCktPmJ1 aWx0aW5faW50MTY7CisgICAgICBicmVhazsKKyAgICBjYXNlIFRBUkdFVF9B VFRSSUJVVEVfVFlQRV9VSU5UMTY6CisgICAgICByZXQgPSBidWlsdGluX3R5 cGUgKGdkYmFyY2gpLT5idWlsdGluX3VpbnQxNjsKKyAgICAgIGJyZWFrOwor ICAgIGNhc2UgVEFSR0VUX0FUVFJJQlVURV9UWVBFX0lOVDMyOgorICAgICAg cmV0ID0gYnVpbHRpbl90eXBlIChnZGJhcmNoKS0+YnVpbHRpbl9pbnQzMjsK KyAgICAgIGJyZWFrOworICAgIGNhc2UgVEFSR0VUX0FUVFJJQlVURV9UWVBF X1VJTlQzMjoKKyAgICAgIHJldCA9IGJ1aWx0aW5fdHlwZSAoZ2RiYXJjaCkt PmJ1aWx0aW5fdWludDMyOworICAgICAgYnJlYWs7CisgICAgY2FzZSBUQVJH RVRfQVRUUklCVVRFX1RZUEVfSU5UNjQ6CisgICAgICByZXQgPSBidWlsdGlu X3R5cGUgKGdkYmFyY2gpLT5idWlsdGluX2ludDY0OworICAgICAgYnJlYWs7 CisgICAgY2FzZSBUQVJHRVRfQVRUUklCVVRFX1RZUEVfVUlOVDY0OgorICAg ICAgcmV0ID0gYnVpbHRpbl90eXBlIChnZGJhcmNoKS0+YnVpbHRpbl91aW50 NjQ7CisgICAgICBicmVhazsKKyAgICB9CisKKyAgcmV0dXJuIHJldDsKK30K Kworc3RhdGljIHZvaWQKK2xvYWRfdGFyZ2V0X2F0dHJpYnV0ZXNfY29tbWFu ZCAoY2hhciAqZXhwLCBpbnQgZnJvbV90dHkpCit7CisgIGNoYXIgKnRleHQg PSB4bWxfZmV0Y2hfY29udGVudF9mcm9tX2ZpbGUgKGV4cCwgTlVMTCk7CisK KyAgaWYgKHRleHQgPT0gTlVMTCkKKyAgICBlcnJvciAoXygiQ291bGQgbm90 IG9wZW4gXCIlc1wiIiksIGV4cCk7CisgIGFkZF94bWxfdGFyZ2V0X2F0dHJp YnV0ZXMgKHRleHQpOworfQorCitzdGF0aWMgdm9pZAorY2xlYXJfdGFyZ2V0 X2F0dHJpYnV0ZXNfY29tbWFuZCAoY2hhciAqZXhwLCBpbnQgZnJvbV90dHkp Cit7CisgIGNsZWFyX3RhcmdldF9hdHRyaWJ1dGVzIChOVUxMKTsKK30KKwor LyogUHJvdmlkZSBhIHByb3RvdHlwZSB0byBzaWxlbmNlIC1XbWlzc2luZy1w cm90b3R5cGVzLiAgKi8KK2V4dGVybiBpbml0aWFsaXplX2ZpbGVfZnR5cGUg X2luaXRpYWxpemVfdGFyZ2V0c19hdHRyaWJ1dGVzOworCit2b2lkCitfaW5p dGlhbGl6ZV90YXJnZXRzX2F0dHJpYnV0ZXMgKHZvaWQpCit7CisgIGFkZF9j bWQgKCJsb2FkLXRhcmdldC1hdHRyaWJ1dGVzIiwgY2xhc3NfbWFpbnRlbmFu Y2UsCisJICAgbG9hZF90YXJnZXRfYXR0cmlidXRlc19jb21tYW5kLAorCSAg IF8oIkxvYWQgdGFyZ2V0IGF0dHJpYnV0ZXMgZnJvbSBhIFhNTCBmaWxlLiIp LAorCSAgICZtYWludGVuYW5jZWxpc3QpOworCisgIGFkZF9jbWQgKCJjbGVh ci10YXJnZXQtYXR0cmlidXRlcyIsIGNsYXNzX21haW50ZW5hbmNlLAorCSAg IGNsZWFyX3RhcmdldF9hdHRyaWJ1dGVzX2NvbW1hbmQsCisJICAgXygiUmVt b3ZlIGFsbCB0YXJnZXQgYXR0cmlidXRlcy4iKSwKKwkgICAmbWFpbnRlbmFu Y2VsaXN0KTsKKworICBhZGRfaW5mbyAoInRhcmdldC1hdHRyaWJ1dGVzIiwg aW5mb190YXJnZXRfYXR0cmlidXRlcywgXygiXAorU3RhdHVzIG9mIHRhcmdl dCBhdHRyaWJ1dGVzLiIpKTsKK30KLS0tIC9kZXYvbnVsbAorKysgYi90YXJn ZXQtYXR0cmlidXRlcy5oCkBAIC0wLDAgKzEsMTA0IEBACisvKiBUYXJnZXQg YXR0cmlidXRlcyBmb3IgR0RCLCB0aGUgR05VIGRlYnVnZ2VyLgorCisgICBD b3B5cmlnaHQgKEMpIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ bmMuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdEQi4KKworICAgVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVk IGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIg dmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0 aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdp dGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251 Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBUQVJHRVRfQVRUUklC VVRFU19ICisjZGVmaW5lIFRBUkdFVF9BVFRSSUJVVEVTX0ggMQorCitlbnVt Cit7CisgIFRBUkdFVF9BVFRSSUJVVEVfVFlQRV9JTlQ4LAorICBUQVJHRVRf QVRUUklCVVRFX1RZUEVfVUlOVDgsCisgIFRBUkdFVF9BVFRSSUJVVEVfVFlQ RV9JTlQxNiwKKyAgVEFSR0VUX0FUVFJJQlVURV9UWVBFX1VJTlQxNiwKKyAg VEFSR0VUX0FUVFJJQlVURV9UWVBFX0lOVDMyLAorICBUQVJHRVRfQVRUUklC VVRFX1RZUEVfVUlOVDMyLAorICBUQVJHRVRfQVRUUklCVVRFX1RZUEVfSU5U NjQsCisgIFRBUkdFVF9BVFRSSUJVVEVfVFlQRV9VSU5UNjQsCit9OworCisj ZGVmaW5lIFRBUkdFVF9BVFRSSUJVVEVfQUNDRVNTX1JFQUQJMHgxCisjZGVm aW5lIFRBUkdFVF9BVFRSSUJVVEVfQUNDRVNTX1dSSVRFCTB4MgorCisjZGVm aW5lIFRBUkdFVF9BVFRSSUJVVEVfU1VQUE9SVF9TT0ZUV0FSRV9CUkVBS1BP SU5UCTB4MQorI2RlZmluZSBUQVJHRVRfQVRUUklCVVRFX1NVUFBPUlRfSEFS RFdBUkVfQlJFQUtQT0lOVAkweDIKKyNkZWZpbmUgVEFSR0VUX0FUVFJJQlVU RV9TVVBQT1JUX0hBUkRXQVJFX1dBVENIUE9JTlQJMHg0CisjZGVmaW5lIFRB UkdFVF9BVFRSSUJVVEVfU1VQUE9SVF9UUkFDRVBPSU5UCQkweDgKKworc3Ry dWN0IHRhcmdldF9hdHRyaWJ1dGVfYWRkcmVzcworICB7CisgICAgc3RydWN0 IHRhcmdldF9hdHRyaWJ1dGVfYWRkcmVzcyAqcHJldjsKKyAgICBDT1JFX0FE RFIJc3RhcnQ7CisgICAgQ09SRV9BRERSCWVuZDsKKyAgfTsKKworLyogVGhp cyBpcyB0aGUgY29yZSBzdHJ1Y3Qgb2YgYSB0YXJnZXQgYXR0cmlidXRlLgor ICAgV2hlbiBHREIgZ2V0IGEgdGFyZ2V0IGF0dHJpYnV0ZSBmcm9tIFhNTCwK KyAgIGl0IHdpbGwgYWxsb2MgYSBzdHJ1Y3QgZm9yIGl0LiAgKi8KKworc3Ry dWN0IHRhcmdldF9hdHRyaWJ1dGUKKyAgeworICAgIHN0cnVjdCB0YXJnZXRf YXR0cmlidXRlICpuZXh0OworICAgIGNoYXIgKm5hbWU7CisgICAgaW50IGlk OworICAgIGludCB0eXBlOworICAgIGludCB0YXJnZXRfb25seV9jb25kX2No ZWNrOworICAgIHVuc2lnbmVkIGludCBhZ2VudF9hY2Nlc3M7CisgICAgdW5z aWduZWQgaW50IGdkYl9hY2Nlc3M7CisgICAgdW5zaWduZWQgaW50IHN1cHBv cnQ7CisgICAgc3RydWN0IHRhcmdldF9hdHRyaWJ1dGVfYWRkcmVzcyAqYWRk cmVzc2VzOworICB9OworCisvKiBUaGlzIGlzIHRoZSBlcnJvciByZXBvcnQg c3RyaW5nIGZvciBmdW5jdGlvbgorICAgY2hlY2tfYWdlbnRfdGFyZ2V0X2F0 dHJpYnV0ZS4KKyAgIEJlY2F1c2Ugc29tZSBmdW5jdGlvbiBjYWxsIGNoZWNr X2FnZW50X3RhcmdldF9hdHRyaWJ1dGUKKyAgIHdpdGggVFJZX0NBVENILiAg VXNlIHRoaXMgc3RyaW5nIHJlcG9ydCBlcnJvci4gICovCisKK2V4dGVybiBj aGFyICpjaGVja19hZ2VudF90YXJnZXRfYXR0cmlidXRlX2Vycm9yOworCitl eHRlcm4gc3RydWN0IHRhcmdldF9hdHRyaWJ1dGUgKmZpbmRfdGFyZ2V0X2F0 dHJpYnV0ZV9uYW1lIChjb25zdCBjaGFyICpuYW1lKTsKK2V4dGVybiBzdHJ1 Y3QgdGFyZ2V0X2F0dHJpYnV0ZSAqZmluZF90YXJnZXRfYXR0cmlidXRlX2lk IChpbnQgaWQpOworCisvKiBTZXQgQkwgZm9yIGZ1bmN0aW9uIGNoZWNrX2Fn ZW50X3RhcmdldF9hdHRyaWJ1dGUKKyAgIGJlZm9yZSB0cmFuc2xhdGUgYSBz dHJpbmcgdG8gYWdlbnQgZXhwcmVzc2lvbiBieXRlY29kZS4gICovCisKK2V4 dGVybiBzdHJ1Y3QgY2xlYW51cCAqc2V0X2NoZWNrX2FnZW50X3RhcmdldF9h dHRyaWJ1dGUKKwkJCShzdHJ1Y3QgYnBfbG9jYXRpb24gKmJsKTsKKworLyog VGhlIGZ1bmN0aW9uIHRoYXQgdHJhbnNsYXRlIGEgc3RyaW5nIHRvIGFnZW50 IGV4cHJlc3Npb24gYnl0ZWNvZGUgY2FsbAorICAgY2hlY2tfYWdlbnRfdGFy Z2V0X2F0dHJpYnV0ZSB0byBjaGVjayBpZiBUQSBpcyBPSyB0byB1c2Ugd2l0 aAorICAgQkwgdGhhdCBzZXQgYnkgc2V0X2NoZWNrX2FnZW50X3RhcmdldF9h dHRyaWJ1dGUuICAqLworCitleHRlcm4gdm9pZCBjaGVja19hZ2VudF90YXJn ZXRfYXR0cmlidXRlIChzdHJ1Y3QgdGFyZ2V0X2F0dHJpYnV0ZSAqdGEsCisJ CQkJCSAgaW50IHdyaXRlKTsKKworLyogUmVtb3ZlIGFsbCB0aGUgdGFyZ2V0 IGF0dHJpYnV0ZXMgaW5zaWRlIHRoZSBHREIuICAqLworCitleHRlcm4gdm9p ZCBjbGVhcl90YXJnZXRfYXR0cmlidXRlcyAodm9pZCAqdW51c2VkKTsKKwor LyogUGFyc2UgdGFyZ2V0IGF0dHJpYnV0ZXMgb3V0IGZyb20gWE1MIGZvcm1h cnQgc3RyaW5nIFRFWFQKKyAgIGFuZCBhZGQgdGhlbSB0byBHREIuICAqLwor CitleHRlcm4gdm9pZCBhZGRfeG1sX3RhcmdldF9hdHRyaWJ1dGVzIChjb25z dCBjaGFyICp0ZXh0KTsKKworLyogUmV0dXJuIHRoZSB0eXBlIG9mIFRBLiAg Ki8KKworZXh0ZXJuIHN0cnVjdCB0eXBlICp0YXJnZXRfYXR0cmlidXRlX3R5 cGUgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLAorCQkJCQkgICBzdHJ1Y3Qg dGFyZ2V0X2F0dHJpYnV0ZSAqdGEpOworCisjZW5kaWYgLyogVEFSR0VUX0FU VFJJQlVURVNfSCAqLwotLS0gYS90YXJnZXQuaAorKysgYi90YXJnZXQuaApA QCAtMjg2LDcgKzI4Niw5IEBAIGVudW0gdGFyZ2V0X29iamVjdAogICAvKiBE YXJ3aW4gZHluYW1pYyBsaW5rZXIgaW5mbyBkYXRhLiAgKi8KICAgVEFSR0VU X09CSkVDVF9EQVJXSU5fRFlMRF9JTkZPLAogICAvKiBPcGVuVk1TIFVud2lu ZCBJbmZvcm1hdGlvbiBCbG9jay4gICovCi0gIFRBUkdFVF9PQkpFQ1RfT1BF TlZNU19VSUIKKyAgVEFSR0VUX09CSkVDVF9PUEVOVk1TX1VJQiwKKyAgLyog VGFyZ2V0IGF0dHJpYnV0ZXMuICAqLworICBUQVJHRVRfT0JKRUNUX0FUVFJJ QlVURVMsCiAgIC8qIFBvc3NpYmxlIGZ1dHVyZSBvYmplY3RzOiBUQVJHRVRf T0JKRUNUX0ZJTEUsIC4uLiAgKi8KIH07CiAKLS0tIGEvdHJhY2Vwb2ludC5j CisrKyBiL3RyYWNlcG9pbnQuYwpAQCAtNTMsNiArNTMsNyBAQAogI2luY2x1 ZGUgImV4Y2VwdGlvbnMuaCIKICNpbmNsdWRlICJjbGkvY2xpLXV0aWxzLmgi CiAjaW5jbHVkZSAicHJvYmUuaCIKKyNpbmNsdWRlICJ0YXJnZXQtYXR0cmli dXRlcy5oIgogCiAvKiByZWFkbGluZSBpbmNsdWRlIGZpbGVzICovCiAjaW5j bHVkZSAicmVhZGxpbmUvcmVhZGxpbmUuaCIKQEAgLTM0Miw2ICszNDMsMjEg QEAgZmluZF90cmFjZV9zdGF0ZV92YXJpYWJsZSAoY29uc3QgY2hhciAqbgog ICByZXR1cm4gTlVMTDsKIH0KIAorLyogTG9vayBmb3IgYSB0cmFjZSBzdGF0 ZSB2YXJpYWJsZSBvZiB0aGUgZ2l2ZW4gbnVtYmVyLiAgKi8KKworc3RhdGlj IHN0cnVjdCB0cmFjZV9zdGF0ZV92YXJpYWJsZSAqCitmaW5kX3RyYWNlX3N0 YXRlX3ZhcmlhYmxlX251bWJlciAoaW50IG51bWJlcikKK3sKKyAgc3RydWN0 IHRyYWNlX3N0YXRlX3ZhcmlhYmxlICp0c3Y7CisgIGludCBpeDsKKworICBm b3IgKGl4ID0gMDsgVkVDX2l0ZXJhdGUgKHRzdl9zLCB0dmFyaWFibGVzLCBp eCwgdHN2KTsgKytpeCkKKyAgICBpZiAobnVtYmVyID09IHRzdi0+bnVtYmVy KQorICAgICAgcmV0dXJuIHRzdjsKKworICByZXR1cm4gTlVMTDsKK30KKwog c3RhdGljIHZvaWQKIGRlbGV0ZV90cmFjZV9zdGF0ZV92YXJpYWJsZSAoY29u c3QgY2hhciAqbmFtZSkKIHsKQEAgLTM4Niw2ICs0MDIsNDEgQEAgdmFsaWRh dGVfdHJhY2Vfc3RhdGVfdmFyaWFibGVfbmFtZSAoY29ucwogICAgIGVycm9y IChfKCIkJXMgaXMgbm90IGEgdmFsaWQgdHJhY2Ugc3RhdGUgdmFyaWFibGUg bmFtZSIpLCBuYW1lKTsKIH0KIAorc3RhdGljIGludAordHJhY2VfdmFyaWFi bGVfbnVtYmVyX2NoZWNrXzEgKHN0cnVjdCB0cmFjZV9zdGF0ZV92YXJpYWJs ZSAqdHN2KQoreworICBpZiAoZmluZF90YXJnZXRfYXR0cmlidXRlX2lkICh0 c3YtPm51bWJlcikpCisgICAgeworICAgICAgaW50IG5ld19udW1iZXIgPSB0 c3YtPm51bWJlciArIDE7CisgICAgICB0c3YtPm51bWJlciA9IDA7CisgICAg ICB3aGlsZSAoZmluZF90YXJnZXRfYXR0cmlidXRlX2lkIChuZXdfbnVtYmVy KQorCSAgICAgfHwgZmluZF90cmFjZV9zdGF0ZV92YXJpYWJsZV9udW1iZXIg KG5ld19udW1iZXIpKQorCW5ld19udW1iZXIrKzsKKyAgICAgIHRzdi0+bnVt YmVyID0gbmV3X251bWJlcjsKKworICAgICAgcmV0dXJuIDE7CisgICAgfQor CisgIHJldHVybiAwOworfQorCit2b2lkCit0cmFjZV92YXJpYWJsZV9udW1i ZXJfY2hlY2sgKHZvaWQpCit7CisgIHN0cnVjdCB0cmFjZV9zdGF0ZV92YXJp YWJsZSAqdHN2OworICBpbnQgaXg7CisKKyAgZm9yIChpeCA9IDA7IFZFQ19p dGVyYXRlICh0c3ZfcywgdHZhcmlhYmxlcywgaXgsIHRzdik7ICsraXgpCisg ICAgeworICAgICAgaWYgKHRyYWNlX3ZhcmlhYmxlX251bWJlcl9jaGVja18x ICh0c3YpKQorICAgICAgICB7CisJICB3YXJuaW5nIChfKCJcCitudW1iZXIg b2YgdHJhY2UgdmFyaWFibGUgJCVzIGlzIHNhbWUgd2l0aCBhIHRzdiBjb21w YXRpYmxlIFxuXAordGFyZ2V0IGF0dHJpYnV0ZS4gIFNvIGl0IGlzIGNoYW5n ZWQgdG8gJWQuIiksIHRzdi0+bmFtZSwgdHN2LT5udW1iZXIpOworCX0KKyAg ICB9Cit9CisKIC8qIFRoZSAndHZhcmlhYmxlJyBjb21tYW5kIGNvbGxlY3Rz IGEgbmFtZSBhbmQgb3B0aW9uYWwgZXhwcmVzc2lvbiB0bwogICAgZXZhbHVh dGUgaW50byBhbiBpbml0aWFsIHZhbHVlLiAgKi8KIApAQCAtNDQzLDYgKzQ5 NCw4IEBAIHRyYWNlX3ZhcmlhYmxlX2NvbW1hbmQgKGNoYXIgKmFyZ3MsIGlu dAogCiAgIG9ic2VydmVyX25vdGlmeV90c3ZfY3JlYXRlZCAodHN2KTsKIAor ICB0cmFjZV92YXJpYWJsZV9udW1iZXJfY2hlY2tfMSAodHN2KTsKKwogICBw cmludGZfZmlsdGVyZWQgKF8oIlRyYWNlIHN0YXRlIHZhcmlhYmxlICQlcyAi CiAJCSAgICAgImNyZWF0ZWQsIHdpdGggaW5pdGlhbCB2YWx1ZSAlcy5cbiIp LAogCQkgICB0c3YtPm5hbWUsIHBsb25nZXN0ICh0c3YtPmluaXRpYWxfdmFs dWUpKTsKQEAgLTM2NzQsNiArMzcyNyw4IEBAIG1lcmdlX3VwbG9hZGVkX3Ry YWNlX3N0YXRlX3ZhcmlhYmxlcyAoc3QKICAgICBpZiAodHN2LT5udW1iZXIg PT0gMCkKICAgICAgIHRzdi0+bnVtYmVyID0gaGlnaGVzdCsrOwogCisgIHRy YWNlX3ZhcmlhYmxlX251bWJlcl9jaGVjaygpOworCiAgIGZyZWVfdXBsb2Fk ZWRfdHN2cyAodXBsb2FkZWRfdHN2cyk7CiB9CiAKLS0tIGEvdHJhY2Vwb2lu dC5oCisrKyBiL3RyYWNlcG9pbnQuaApAQCAtMjQ4LDYgKzI0OCw4IEBAIGV4 dGVybiB2b2lkIHZhbGlkYXRlX3RyYWNlX3N0YXRlX3ZhcmlhYmwKIGV4dGVy biBzdHJ1Y3QgdHJhY2Vfc3RhdGVfdmFyaWFibGUgKmZpbmRfdHJhY2Vfc3Rh dGVfdmFyaWFibGUgKGNvbnN0IGNoYXIgKm5hbWUpOwogZXh0ZXJuIHN0cnVj dCB0cmFjZV9zdGF0ZV92YXJpYWJsZSAqY3JlYXRlX3RyYWNlX3N0YXRlX3Zh cmlhYmxlIChjb25zdCBjaGFyICpuYW1lKTsKIAorZXh0ZXJuIHZvaWQgdHJh Y2VfdmFyaWFibGVfbnVtYmVyX2NoZWNrKHZvaWQpOworCiBleHRlcm4gaW50 IGVuY29kZV9zb3VyY2Vfc3RyaW5nIChpbnQgbnVtLCBVTE9OR0VTVCBhZGRy LAogCQkJCSBjaGFyICpzcmN0eXBlLCBjaGFyICpzcmMsCiAJCQkJIGNoYXIg KmJ1ZiwgaW50IGJ1Zl9zaXplKTsK --f46d044785333dd60304d61616cb--