From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 10387 invoked by alias); 25 Oct 2017 10:58:06 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 10376 invoked by uid 89); 25 Oct 2017 10:58:05 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.0 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: mail-wr0-f172.google.com Received: from mail-wr0-f172.google.com (HELO mail-wr0-f172.google.com) (209.85.128.172) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 25 Oct 2017 10:58:01 +0000 Received: by mail-wr0-f172.google.com with SMTP id j15so11421442wre.8 for ; Wed, 25 Oct 2017 03:58:00 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=4dWmF2NbkG/WozAtqM1+1muhDwo2MkEDaa3MpaDevmM=; b=NTq9A13iGAS0CS738ORK5VSEzEe/OVREDHg7/zbAodfUQWa56lphCiN7fF1wUdW5C7 CBi6WmutELC3/4BbN7SxF29kVTp1ovG9wTvQ4EnPU7EmxxHT+WInH2Yot1sJuUcgXhmo 81hhxHj6d0oPJ/MtAsi0RXLzSbTejS3Qm78qAMTqlzxYUpyuv0BQWIlVyHeYoAgshxMa /lb7AqQ0RC6N47sw6CVOyFFXEesk37AsEkDCPgKtwVRQSq6c3K0HBBTQhSr63S8wIWHR uB7IdDNg5mGQJg8YMqBo4VNv4p9jrfckTgxp2Uih9KiJgxEjNtTUTJ6Czp+WvjO8XCNy BpoA== X-Gm-Message-State: AMCzsaWAgVBvwS3sMmaEo/Kxh//UPJa37JE++jTMNS7FjyTK29kb8Oi3 fE9zMsL6jR/e7G57P2xr95twYhjcpvHn4vSI0Sougw== X-Google-Smtp-Source: ABhQp+Q8f9krdqNut5bmKpk+I9uTGYwBtAF2CzmvPlXA2KSdKWNVOulDtZVONyJMfA+gqHtv2yFZgrwjgj92xcjvuKA= X-Received: by 10.223.183.7 with SMTP id l7mr1724320wre.139.1508929079167; Wed, 25 Oct 2017 03:57:59 -0700 (PDT) MIME-Version: 1.0 Received: by 10.223.151.103 with HTTP; Wed, 25 Oct 2017 03:57:58 -0700 (PDT) In-Reply-To: <20171024105608.GA62387@kam.mff.cuni.cz> References: <20170926002423.GB22198@kam.mff.cuni.cz> <20170929192803.GA92290@kam.mff.cuni.cz> <20171006130409.GB67693@kam.mff.cuni.cz> <20171007182345.GA64513@kam.mff.cuni.cz> <20171024105608.GA62387@kam.mff.cuni.cz> From: Prathamesh Kulkarni Date: Wed, 25 Oct 2017 11:18:00 -0000 Message-ID: Subject: Re: [RFC] propagate malloc attribute in ipa-pure-const pass To: Jan Hubicka Cc: gcc Patches , Richard Biener Content-Type: multipart/mixed; boundary="f403043897fcc18432055c5ced66" X-IsSubscribed: yes X-SW-Source: 2017-10/txt/msg01796.txt.bz2 --f403043897fcc18432055c5ced66 Content-Type: text/plain; charset="UTF-8" Content-length: 2102 On 24 October 2017 at 16:26, Jan Hubicka wrote: >> 2017-10-13 Prathamesh Kulkarni >> >> * cgraph.h (set_malloc_flag): Declare. >> * cgraph.c (set_malloc_flag_1): New function. >> (set_malloc_flag): Likewise. >> * ipa-fnsummary.h (ipa_call_summary): Add new field is_return_callee. >> * ipa-fnsummary.c (ipa_call_summary::reset): Set is_return_callee to >> false. >> (read_ipa_call_summary): Add support for reading is_return_callee. >> (write_ipa_call_summary): Stream is_return_callee. >> * ipa-inline.c (ipa_inline): Remove call to ipa_free_fn_summary. >> * ipa-pure-const.c: Add headers ssa.h, alloc-pool.h, symbol-summary.h, >> ipa-prop.h, ipa-fnsummary.h. >> (pure_const_names): Change to static. >> (malloc_state_e): Define. >> (malloc_state_names): Define. >> (funct_state_d): Add field malloc_state. >> (varying_state): Set malloc_state to STATE_MALLOC_BOTTOM. >> (check_retval_uses): New function. >> (malloc_candidate_p): Likewise. >> (analyze_function): Add support for malloc attribute. >> (pure_const_write_summary): Stream malloc_state. >> (pure_const_read_summary): Add support for reading malloc_state. >> (dump_malloc_lattice): New function. >> (propagate_malloc): New function. >> (ipa_pure_const::execute): Call propagate_malloc and >> ipa_free_fn_summary. >> (pass_local_pure_const::execute): Add support for malloc attribute. >> * ssa-iterators.h (RETURN_FROM_IMM_USE_STMT): New macro. >> >> testsuite/ >> * gcc.dg/ipa/propmalloc-1.c: New test-case. >> * gcc.dg/ipa/propmalloc-2.c: Likewise. >> * gcc.dg/ipa/propmalloc-3.c: Likewise. > > OK. > Perhaps we could also add -Wsuggest-sttribute=malloc and mention it in changes.html? Done in this version. In warn_function_malloc(), I passed false for known_finite param to suggest_attribute(). Does that look OK ? Validation in progress. OK to commit if passes ? Thanks, Prathamesh > > Thanks, > Honza --f403043897fcc18432055c5ced66 Content-Type: text/plain; charset="US-ASCII"; name="malloc-prop-0_20.txt" Content-Disposition: attachment; filename="malloc-prop-0_20.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_j96xb2c60 Content-length: 34620 MjAxNy0xMC0xMyAgUHJhdGhhbWVzaCBLdWxrYXJuaSAgPHByYXRoYW1lc2gu a3Vsa2FybmlAbGluYXJvLm9yZz4KCgkqIGNncmFwaC5oIChzZXRfbWFsbG9j X2ZsYWcpOiBEZWNsYXJlLgoJKiBjZ3JhcGguYyAoc2V0X21hbGxvY19mbGFn XzEpOiBOZXcgZnVuY3Rpb24uCgkoc2V0X21hbGxvY19mbGFnKTogTGlrZXdp c2UuCgkqIGlwYS1mbnN1bW1hcnkuaCAoaXBhX2NhbGxfc3VtbWFyeSk6IEFk ZCBuZXcgZmllbGQgaXNfcmV0dXJuX2NhbGxlZS4KCSogaXBhLWZuc3VtbWFy eS5jIChpcGFfY2FsbF9zdW1tYXJ5OjpyZXNldCk6IFNldCBpc19yZXR1cm5f Y2FsbGVlIHRvCglmYWxzZS4KCShyZWFkX2lwYV9jYWxsX3N1bW1hcnkpOiBB ZGQgc3VwcG9ydCBmb3IgcmVhZGluZyBpc19yZXR1cm5fY2FsbGVlLgoJKHdy aXRlX2lwYV9jYWxsX3N1bW1hcnkpOiBTdHJlYW0gaXNfcmV0dXJuX2NhbGxl ZS4KCSogaXBhLWlubGluZS5jIChpcGFfaW5saW5lKTogUmVtb3ZlIGNhbGwg dG8gaXBhX2ZyZWVfZm5fc3VtbWFyeS4KCSogaXBhLXB1cmUtY29uc3QuYzog QWRkIGhlYWRlcnMgc3NhLmgsIGFsbG9jLXBvb2wuaCwgc3ltYm9sLXN1bW1h cnkuaCwKCWlwYS1wcm9wLmgsIGlwYS1mbnN1bW1hcnkuaC4KCShwdXJlX2Nv bnN0X25hbWVzKTogQ2hhbmdlIHRvIHN0YXRpYy4KCShtYWxsb2Nfc3RhdGVf ZSk6IERlZmluZS4KCShtYWxsb2Nfc3RhdGVfbmFtZXMpOiBEZWZpbmUuCgko ZnVuY3Rfc3RhdGVfZCk6IEFkZCBmaWVsZCBtYWxsb2Nfc3RhdGUuCgkodmFy eWluZ19zdGF0ZSk6IFNldCBtYWxsb2Nfc3RhdGUgdG8gU1RBVEVfTUFMTE9D X0JPVFRPTS4KCShjaGVja19yZXR2YWxfdXNlcyk6IE5ldyBmdW5jdGlvbi4K CShtYWxsb2NfY2FuZGlkYXRlX3ApOiBMaWtld2lzZS4KCShhbmFseXplX2Z1 bmN0aW9uKTogQWRkIHN1cHBvcnQgZm9yIG1hbGxvYyBhdHRyaWJ1dGUuCgko cHVyZV9jb25zdF93cml0ZV9zdW1tYXJ5KTogU3RyZWFtIG1hbGxvY19zdGF0 ZS4KCShwdXJlX2NvbnN0X3JlYWRfc3VtbWFyeSk6IEFkZCBzdXBwb3J0IGZv ciByZWFkaW5nIG1hbGxvY19zdGF0ZS4KCShkdW1wX21hbGxvY19sYXR0aWNl KTogTmV3IGZ1bmN0aW9uLgoJKHByb3BhZ2F0ZV9tYWxsb2MpOiBOZXcgZnVu Y3Rpb24uCgkod2Fybl9mdW5jdGlvbl9tYWxsb2MpOiBOZXcgZnVuY3Rpb24u CgkoaXBhX3B1cmVfY29uc3Q6OmV4ZWN1dGUpOiBDYWxsIHByb3BhZ2F0ZV9t YWxsb2MgYW5kCglpcGFfZnJlZV9mbl9zdW1tYXJ5LgoJKHBhc3NfbG9jYWxf cHVyZV9jb25zdDo6ZXhlY3V0ZSk6IEFkZCBzdXBwb3J0IGZvciBtYWxsb2Mg YXR0cmlidXRlLgoJKiBzc2EtaXRlcmF0b3JzLmggKFJFVFVSTl9GUk9NX0lN TV9VU0VfU1RNVCk6IE5ldyBtYWNyby4KCSogZG9jL2ludm9rZS50ZXhpOiBE b2N1bWVudCBXc3VnZ2VzdC1hdHRyaWJ1dGU9bWFsbG9jLgoKdGVzdHN1aXRl LwoJKiBnY2MuZGcvaXBhL3Byb3BtYWxsb2MtMS5jOiBOZXcgdGVzdC1jYXNl LgoJKiBnY2MuZGcvaXBhL3Byb3BtYWxsb2MtMi5jOiBMaWtld2lzZS4KCSog Z2NjLmRnL2lwYS9wcm9wbWFsbG9jLTMuYzogTGlrZXdpc2UuCgpkaWZmIC0t Z2l0IGEvZ2NjL2NncmFwaC5jIGIvZ2NjL2NncmFwaC5jCmluZGV4IDNkMGNl ZmJkNDZiLi4wYWFkOTBkNTllYSAxMDA2NDQKLS0tIGEvZ2NjL2NncmFwaC5j CisrKyBiL2djYy9jZ3JhcGguYwpAQCAtMjUzMCw2ICsyNTMwLDUzIEBAIGNn cmFwaF9ub2RlOjpzZXRfbm90aHJvd19mbGFnIChib29sIG5vdGhyb3cpCiAg IHJldHVybiBjaGFuZ2VkOwogfQogCisvKiBXb3JrZXIgdG8gc2V0IG1hbGxv YyBmbGFnLiAgKi8KK3N0YXRpYyB2b2lkCitzZXRfbWFsbG9jX2ZsYWdfMSAo Y2dyYXBoX25vZGUgKm5vZGUsIGJvb2wgbWFsbG9jX3AsIGJvb2wgKmNoYW5n ZWQpCit7CisgIGlmIChtYWxsb2NfcCAmJiAhREVDTF9JU19NQUxMT0MgKG5v ZGUtPmRlY2wpKQorICAgIHsKKyAgICAgIERFQ0xfSVNfTUFMTE9DIChub2Rl LT5kZWNsKSA9IHRydWU7CisgICAgICAqY2hhbmdlZCA9IHRydWU7CisgICAg fQorCisgIGlwYV9yZWYgKnJlZjsKKyAgRk9SX0VBQ0hfQUxJQVMgKG5vZGUs IHJlZikKKyAgICB7CisgICAgICBjZ3JhcGhfbm9kZSAqYWxpYXMgPSBkeW5f Y2FzdDxjZ3JhcGhfbm9kZSAqPiAocmVmLT5yZWZlcnJpbmcpOworICAgICAg aWYgKCFtYWxsb2NfcCB8fCBhbGlhcy0+Z2V0X2F2YWlsYWJpbGl0eSAoKSA+ IEFWQUlMX0lOVEVSUE9TQUJMRSkKKwlzZXRfbWFsbG9jX2ZsYWdfMSAoYWxp YXMsIG1hbGxvY19wLCBjaGFuZ2VkKTsKKyAgICB9CisKKyAgZm9yIChjZ3Jh cGhfZWRnZSAqZSA9IG5vZGUtPmNhbGxlcnM7IGU7IGUgPSBlLT5uZXh0X2Nh bGxlcikKKyAgICBpZiAoZS0+Y2FsbGVyLT50aHVuay50aHVua19wCisJJiYg KCFtYWxsb2NfcCB8fCBlLT5jYWxsZXItPmdldF9hdmFpbGFiaWxpdHkgKCkg PiBBVkFJTF9JTlRFUlBPU0FCTEUpKQorICAgICAgc2V0X21hbGxvY19mbGFn XzEgKGUtPmNhbGxlciwgbWFsbG9jX3AsIGNoYW5nZWQpOworfQorCisvKiBT ZXQgREVDTF9JU19NQUxMT0Mgb24gTk9ERSdzIGRlY2wgYW5kIG9uIE5PREUn cyBhbGlhc2VzIGlmIGFueS4gICovCisKK2Jvb2wKK2NncmFwaF9ub2RlOjpz ZXRfbWFsbG9jX2ZsYWcgKGJvb2wgbWFsbG9jX3ApCit7CisgIGJvb2wgY2hh bmdlZCA9IGZhbHNlOworCisgIGlmICghbWFsbG9jX3AgfHwgZ2V0X2F2YWls YWJpbGl0eSAoKSA+IEFWQUlMX0lOVEVSUE9TQUJMRSkKKyAgICBzZXRfbWFs bG9jX2ZsYWdfMSAodGhpcywgbWFsbG9jX3AsICZjaGFuZ2VkKTsKKyAgZWxz ZQorICAgIHsKKyAgICAgIGlwYV9yZWYgKnJlZjsKKworICAgICAgRk9SX0VB Q0hfQUxJQVMgKHRoaXMsIHJlZikKKwl7CisJICBjZ3JhcGhfbm9kZSAqYWxp YXMgPSBkeW5fY2FzdDxjZ3JhcGhfbm9kZSAqPiAocmVmLT5yZWZlcnJpbmcp OworCSAgaWYgKCFtYWxsb2NfcCB8fCBhbGlhcy0+Z2V0X2F2YWlsYWJpbGl0 eSAoKSA+IEFWQUlMX0lOVEVSUE9TQUJMRSkKKwkgICAgc2V0X21hbGxvY19m bGFnXzEgKGFsaWFzLCBtYWxsb2NfcCwgJmNoYW5nZWQpOworCX0KKyAgICB9 CisgIHJldHVybiBjaGFuZ2VkOworfQorCiAvKiBXb3JrZXIgdG8gc2V0X2Nv bnN0X2ZsYWcuICAqLwogCiBzdGF0aWMgdm9pZApkaWZmIC0tZ2l0IGEvZ2Nj L2NncmFwaC5oIGIvZ2NjL2NncmFwaC5oCmluZGV4IDE3NThlOGIwOGMxLi44 NDgyNGU5ZjgxNCAxMDA2NDQKLS0tIGEvZ2NjL2NncmFwaC5oCisrKyBiL2dj Yy9jZ3JhcGguaApAQCAtMTE1MSw2ICsxMTUxLDEwIEBAIHB1YmxpYzoKICAg ICAgaWYgYW55IHRvIE5PVEhST1cuICAqLwogICBib29sIHNldF9ub3Rocm93 X2ZsYWcgKGJvb2wgbm90aHJvdyk7CiAKKyAgLyogU0VUIERFQ0xfSVNfTUFM TE9DIG9uIGNncmFwaF9ub2RlJ3MgZGVjbCBhbmQgb24gYWxpYXNlcyBvZiB0 aGUgbm9kZQorICAgICBpZiBhbnkuICAqLworICBib29sIHNldF9tYWxsb2Nf ZmxhZyAoYm9vbCBtYWxsb2NfcCk7CisKICAgLyogSWYgU0VUX0NPTlNUIGlz IHRydWUsIG1hcmsgZnVuY3Rpb24sIGFsaWFzZXMgYW5kIHRodW5rcyB0byBi ZSBFQ0ZfQ09OU1QuCiAgICAgSWYgU0VUX0NPTlNUIGlmIGZhbHNlLCBjbGVh ciB0aGUgZmxhZy4KIApkaWZmIC0tZ2l0IGEvZ2NjL2NvbW1vbi5vcHQgYi9n Y2MvY29tbW9uLm9wdAppbmRleCBkZmRlNmFkYmE5MS4uMDBkZmM5N2M0Y2Ig MTAwNjQ0Ci0tLSBhL2djYy9jb21tb24ub3B0CisrKyBiL2djYy9jb21tb24u b3B0CkBAIC03MzMsNiArNzMzLDEwIEBAIFdzdWdnZXN0LWF0dHJpYnV0ZT1u b3JldHVybgogQ29tbW9uIFZhcih3YXJuX3N1Z2dlc3RfYXR0cmlidXRlX25v cmV0dXJuKSBXYXJuaW5nCiBXYXJuIGFib3V0IGZ1bmN0aW9ucyB3aGljaCBt aWdodCBiZSBjYW5kaWRhdGVzIGZvciBfX2F0dHJpYnV0ZV9fKChub3JldHVy bikpLgogCitXc3VnZ2VzdC1hdHRyaWJ1dGU9bWFsbG9jCitDb21tb24gVmFy KHdhcm5fc3VnZ2VzdF9hdHRyaWJ1dGVfbWFsbG9jKSBXYXJuaW5nCitXYXJu IGFib3V0IGZ1bmN0aW9ucyB3aGljaCBtaWdodCBiZSBjYW5kaWRhdGVzIGZv ciBfX2F0dHJpYnV0ZV9fKChtYWxsb2MpKS4KKwogV3N1Z2dlc3QtZmluYWwt dHlwZXMKIENvbW1vbiBWYXIod2Fybl9zdWdnZXN0X2ZpbmFsX3R5cGVzKSBX YXJuaW5nCiBXYXJuIGFib3V0IEMrKyBwb2x5bW9ycGhpYyB0eXBlcyB3aGVy ZSBhZGRpbmcgZmluYWwga2V5d29yZCB3b3VsZCBpbXByb3ZlIGNvZGUgcXVh bGl0eS4KZGlmZiAtLWdpdCBhL2djYy9kb2MvaW52b2tlLnRleGkgYi9nY2Mv ZG9jL2ludm9rZS50ZXhpCmluZGV4IDVlMzljMGVmZWI5Li45N2I4OTFkNmQ2 OSAxMDA2NDQKLS0tIGEvZ2NjL2RvYy9pbnZva2UudGV4aQorKysgYi9nY2Mv ZG9jL2ludm9rZS50ZXhpCkBAIC0zMTUsNyArMzE1LDcgQEAgT2JqZWN0aXZl LUMgYW5kIE9iamVjdGl2ZS1DKysgRGlhbGVjdHN9LgogLVdzdGFjay1wcm90 ZWN0b3IgIC1Xc3RhY2stdXNhZ2U9QHZhcntsZW59ICAtV3N0cmljdC1hbGlh c2luZyBAZ29sCiAtV3N0cmljdC1hbGlhc2luZz1uICAtV3N0cmljdC1vdmVy ZmxvdyAgLVdzdHJpY3Qtb3ZlcmZsb3c9QHZhcntufSBAZ29sCiAtV3N0cmlu Z29wLW92ZXJmbG93PUB2YXJ7bn0gQGdvbAotLVdzdWdnZXN0LWF0dHJpYnV0 ZT1AcntbfXB1cmVAcnt8fWNvbnN0QHJ7fH1ub3JldHVybkBye3x9Zm9ybWF0 QHJ7XX0gQGdvbAorLVdzdWdnZXN0LWF0dHJpYnV0ZT1AcntbfXB1cmVAcnt8 fWNvbnN0QHJ7fH1ub3JldHVybkBye3x9Zm9ybWF0QHJ7fH1tYWxsb2NAcntd fSBAZ29sCiAtV3N1Z2dlc3QtZmluYWwtdHlwZXMgQGdvbCAgLVdzdWdnZXN0 LWZpbmFsLW1ldGhvZHMgIC1Xc3VnZ2VzdC1vdmVycmlkZSBAZ29sCiAtV21p c3NpbmctZm9ybWF0LWF0dHJpYnV0ZSAgLVdzdWJvYmplY3QtbGlua2FnZSBA Z29sCiAtV3N3aXRjaCAgLVdzd2l0Y2gtYm9vbCAgLVdzd2l0Y2gtZGVmYXVs dCAgLVdzd2l0Y2gtZW51bSBAZ29sCkBAIC01MTkwLDcgKzUxOTAsNyBAQCB3 aGV0aGVyIHRvIGlzc3VlIGEgd2FybmluZy4gIFNpbWlsYXJseSB0byBAb3B0 aW9uey1Xc3RyaW5nb3Atb3ZlcmZsb3c9M30gdGhpcwogc2V0dGluZyBvZiB0 aGUgb3B0aW9uIG1heSByZXN1bHQgaW4gd2FybmluZ3MgZm9yIGJlbmlnbiBj b2RlLgogQGVuZCB0YWJsZQogCi1AaXRlbSAtV3N1Z2dlc3QtYXR0cmlidXRl PUBye1t9cHVyZUBye3x9Y29uc3RAcnt8fW5vcmV0dXJuQHJ7fH1mb3JtYXRA cntdfQorQGl0ZW0gLVdzdWdnZXN0LWF0dHJpYnV0ZT1AcntbfXB1cmVAcnt8 fWNvbnN0QHJ7fH1ub3JldHVybkBye3x9Zm9ybWF0QHJ7fH1tYWxsb2NAcntd fQogQG9waW5kZXggV3N1Z2dlc3QtYXR0cmlidXRlPQogQG9waW5kZXggV25v LXN1Z2dlc3QtYXR0cmlidXRlPQogV2FybiBmb3IgY2FzZXMgd2hlcmUgYWRk aW5nIGFuIGF0dHJpYnV0ZSBtYXkgYmUgYmVuZWZpY2lhbC4gVGhlCkBAIC01 MjAwLDIxICs1MjAwLDI1IEBAIGF0dHJpYnV0ZXMgY3VycmVudGx5IHN1cHBv cnRlZCBhcmUgbGlzdGVkIGJlbG93LgogQGl0ZW0gLVdzdWdnZXN0LWF0dHJp YnV0ZT1wdXJlCiBAaXRlbXggLVdzdWdnZXN0LWF0dHJpYnV0ZT1jb25zdAog QGl0ZW14IC1Xc3VnZ2VzdC1hdHRyaWJ1dGU9bm9yZXR1cm4KK0BpdGVteCAt V3N1Z2dlc3QtYXR0cmlidXRlPW1hbGxvYwogQG9waW5kZXggV3N1Z2dlc3Qt YXR0cmlidXRlPXB1cmUKIEBvcGluZGV4IFduby1zdWdnZXN0LWF0dHJpYnV0 ZT1wdXJlCiBAb3BpbmRleCBXc3VnZ2VzdC1hdHRyaWJ1dGU9Y29uc3QKIEBv cGluZGV4IFduby1zdWdnZXN0LWF0dHJpYnV0ZT1jb25zdAogQG9waW5kZXgg V3N1Z2dlc3QtYXR0cmlidXRlPW5vcmV0dXJuCiBAb3BpbmRleCBXbm8tc3Vn Z2VzdC1hdHRyaWJ1dGU9bm9yZXR1cm4KK0BvcGluZGV4IFdzdWdnZXN0LWF0 dHJpYnV0ZT1tYWxsb2MKK0BvcGluZGV4IFduby1zdWdnZXN0LWF0dHJpYnV0 ZT1tYWxsb2MKIAogV2FybiBhYm91dCBmdW5jdGlvbnMgdGhhdCBtaWdodCBi ZSBjYW5kaWRhdGVzIGZvciBhdHRyaWJ1dGVzCi1AY29kZXtwdXJlfSwgQGNv ZGV7Y29uc3R9IG9yIEBjb2Rle25vcmV0dXJufS4gIFRoZSBjb21waWxlciBv bmx5IHdhcm5zIGZvcgotZnVuY3Rpb25zIHZpc2libGUgaW4gb3RoZXIgY29t cGlsYXRpb24gdW5pdHMgb3IgKGluIHRoZSBjYXNlIG9mIEBjb2Rle3B1cmV9 IGFuZAotQGNvZGV7Y29uc3R9KSBpZiBpdCBjYW5ub3QgcHJvdmUgdGhhdCB0 aGUgZnVuY3Rpb24gcmV0dXJucyBub3JtYWxseS4gQSBmdW5jdGlvbgotcmV0 dXJucyBub3JtYWxseSBpZiBpdCBkb2Vzbid0IGNvbnRhaW4gYW4gaW5maW5p dGUgbG9vcCBvciByZXR1cm4gYWJub3JtYWxseQotYnkgdGhyb3dpbmcsIGNh bGxpbmcgQGNvZGV7YWJvcnR9IG9yIHRyYXBwaW5nLiAgVGhpcyBhbmFseXNp cyByZXF1aXJlcyBvcHRpb24KLUBvcHRpb257LWZpcGEtcHVyZS1jb25zdH0s IHdoaWNoIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBhdCBAb3B0aW9uey1PfSBh bmQKLWhpZ2hlci4gIEhpZ2hlciBvcHRpbWl6YXRpb24gbGV2ZWxzIGltcHJv dmUgdGhlIGFjY3VyYWN5IG9mIHRoZSBhbmFseXNpcy4KK0Bjb2Rle3B1cmV9 LCBAY29kZXtjb25zdH0sIEBjb2Rle25vcmV0dXJufSBvciBAY29kZXttYWxs b2N9LiAgVGhlIGNvbXBpbGVyIG9ubHkKK3dhcm5zIGZvciBmdW5jdGlvbnMg dmlzaWJsZSBpbiBvdGhlciBjb21waWxhdGlvbiB1bml0cyBvciAoaW4gdGhl IGNhc2Ugb2YKK0Bjb2Rle3B1cmV9IGFuZCBAY29kZXtjb25zdH0pIGlmIGl0 IGNhbm5vdCBwcm92ZSB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zCitub3Jt YWxseS4gQSBmdW5jdGlvbiByZXR1cm5zIG5vcm1hbGx5IGlmIGl0IGRvZXNu J3QgY29udGFpbiBhbiBpbmZpbml0ZSBsb29wCitvciByZXR1cm4gYWJub3Jt YWxseSBieSB0aHJvd2luZywgY2FsbGluZyBAY29kZXthYm9ydH0gb3IgdHJh cHBpbmcuICBUaGlzCithbmFseXNpcyByZXF1aXJlcyBvcHRpb24gQG9wdGlv bnstZmlwYS1wdXJlLWNvbnN0fSwgd2hpY2ggaXMgZW5hYmxlZCBieSBkZWZh dWx0CithdCBAb3B0aW9uey1PfSBhbmQgaGlnaGVyLiAgSGlnaGVyIG9wdGlt aXphdGlvbiBsZXZlbHMgaW1wcm92ZSB0aGUgYWNjdXJhY3kgb2YKK3RoZSBh bmFseXNpcy4KIAogQGl0ZW0gLVdzdWdnZXN0LWF0dHJpYnV0ZT1mb3JtYXQK IEBpdGVteCAtV21pc3NpbmctZm9ybWF0LWF0dHJpYnV0ZQpkaWZmIC0tZ2l0 IGEvZ2NjL2lwYS1mbnN1bW1hcnkuYyBiL2djYy9pcGEtZm5zdW1tYXJ5LmMK aW5kZXggMDc2Y2NkNDBiZDcuLmY3MTMzOGU0MjRlIDEwMDY0NAotLS0gYS9n Y2MvaXBhLWZuc3VtbWFyeS5jCisrKyBiL2djYy9pcGEtZm5zdW1tYXJ5LmMK QEAgLTU0Miw2ICs1NDIsNyBAQCB2b2lkCiBpcGFfY2FsbF9zdW1tYXJ5Ojpy ZXNldCAoKQogewogICBjYWxsX3N0bXRfc2l6ZSA9IGNhbGxfc3RtdF90aW1l ID0gMDsKKyAgaXNfcmV0dXJuX2NhbGxlZV91bmNhcHR1cmVkID0gZmFsc2U7 CiAgIGlmIChwcmVkaWNhdGUpCiAgICAgZWRnZV9wcmVkaWNhdGVfcG9vbC5y ZW1vdmUgKHByZWRpY2F0ZSk7CiAgIHByZWRpY2F0ZSA9IE5VTEw7CkBAIC0z MjA0LDYgKzMyMDUsMTAgQEAgcmVhZF9pcGFfY2FsbF9zdW1tYXJ5IChzdHJ1 Y3QgbHRvX2lucHV0X2Jsb2NrICppYiwgc3RydWN0IGNncmFwaF9lZGdlICpl KQogICBlcy0+Y2FsbF9zdG10X3NpemUgPSBzdHJlYW1lcl9yZWFkX3Vod2kg KGliKTsKICAgZXMtPmNhbGxfc3RtdF90aW1lID0gc3RyZWFtZXJfcmVhZF91 aHdpIChpYik7CiAgIGVzLT5sb29wX2RlcHRoID0gc3RyZWFtZXJfcmVhZF91 aHdpIChpYik7CisKKyAgYml0cGFja19kIGJwID0gc3RyZWFtZXJfcmVhZF9i aXRwYWNrIChpYik7CisgIGVzLT5pc19yZXR1cm5fY2FsbGVlX3VuY2FwdHVy ZWQgPSBicF91bnBhY2tfdmFsdWUgKCZicCwgMSk7CisKICAgcC5zdHJlYW1f aW4gKGliKTsKICAgZWRnZV9zZXRfcHJlZGljYXRlIChlLCAmcCk7CiAgIGxl bmd0aCA9IHN0cmVhbWVyX3JlYWRfdWh3aSAoaWIpOwpAQCAtMzM2MCw2ICsz MzY1LDExIEBAIHdyaXRlX2lwYV9jYWxsX3N1bW1hcnkgKHN0cnVjdCBvdXRw dXRfYmxvY2sgKm9iLCBzdHJ1Y3QgY2dyYXBoX2VkZ2UgKmUpCiAgIHN0cmVh bWVyX3dyaXRlX3Vod2kgKG9iLCBlcy0+Y2FsbF9zdG10X3NpemUpOwogICBz dHJlYW1lcl93cml0ZV91aHdpIChvYiwgZXMtPmNhbGxfc3RtdF90aW1lKTsK ICAgc3RyZWFtZXJfd3JpdGVfdWh3aSAob2IsIGVzLT5sb29wX2RlcHRoKTsK KworICBiaXRwYWNrX2QgYnAgPSBiaXRwYWNrX2NyZWF0ZSAob2ItPm1haW5f c3RyZWFtKTsKKyAgYnBfcGFja192YWx1ZSAoJmJwLCBlcy0+aXNfcmV0dXJu X2NhbGxlZV91bmNhcHR1cmVkLCAxKTsKKyAgc3RyZWFtZXJfd3JpdGVfYml0 cGFjayAoJmJwKTsKKwogICBpZiAoZXMtPnByZWRpY2F0ZSkKICAgICBlcy0+ cHJlZGljYXRlLT5zdHJlYW1fb3V0IChvYik7CiAgIGVsc2UKZGlmZiAtLWdp dCBhL2djYy9pcGEtZm5zdW1tYXJ5LmggYi9nY2MvaXBhLWZuc3VtbWFyeS5o CmluZGV4IGY1MGQ2ODA2ZTYxLi5hNzk0YmQwOTMxOCAxMDA2NDQKLS0tIGEv Z2NjL2lwYS1mbnN1bW1hcnkuaAorKysgYi9nY2MvaXBhLWZuc3VtbWFyeS5o CkBAIC0xOTcsNyArMTk3LDkgQEAgc3RydWN0IGlwYV9jYWxsX3N1bW1hcnkK ICAgaW50IGNhbGxfc3RtdF90aW1lOwogICAvKiBEZXB0aCBvZiBsb29wIG5l c3QsIDAgbWVhbnMgbm8gbmVzdGluZy4gICovCiAgIHVuc2lnbmVkIGludCBs b29wX2RlcHRoOwotICAKKyAgLyogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNh bGxlciByZXR1cm5zIHRoZSB2YWx1ZSBvZiBpdCdzIGNhbGxlZS4gICovCisg IGJvb2wgaXNfcmV0dXJuX2NhbGxlZV91bmNhcHR1cmVkOworCiAgIC8qIEtl ZXAgYWxsIGZpZWxkIGVtcHR5IHNvIHN1bW1hcnkgZHVtcGluZyB3b3JrcyBk dXJpbmcgaXRzIGNvbXB1dGF0aW9uLgogICAgICBUaGlzIGlzIHVzZWZ1bCBm b3IgZGVidWdnaW5nLiAgKi8KICAgaXBhX2NhbGxfc3VtbWFyeSAoKQpkaWZm IC0tZ2l0IGEvZ2NjL2lwYS1pbmxpbmUuYyBiL2djYy9pcGEtaW5saW5lLmMK aW5kZXggZGQ0NmNiNjEzNjIuLmI4ZTY1ZTJmYTdlIDEwMDY0NAotLS0gYS9n Y2MvaXBhLWlubGluZS5jCisrKyBiL2djYy9pcGEtaW5saW5lLmMKQEAgLTI1 MjYsOSArMjUyNiw2IEBAIGlwYV9pbmxpbmUgKHZvaWQpCiAKICAgaWYgKGR1 bXBfZmlsZSkKICAgICBpcGFfZHVtcF9mbl9zdW1tYXJpZXMgKGR1bXBfZmls ZSk7Ci0gIC8qIEluIFdQQSB3ZSB1c2UgaW5saW5lIHN1bW1hcmllcyBmb3Ig cGFydGl0aW9uaW5nIHByb2Nlc3MuICAqLwotICBpZiAoIWZsYWdfd3BhKQot ICAgIGlwYV9mcmVlX2ZuX3N1bW1hcnkgKCk7CiAgIHJldHVybiByZW1vdmVf ZnVuY3Rpb25zID8gVE9ET19yZW1vdmVfZnVuY3Rpb25zIDogMDsKIH0KIApk aWZmIC0tZ2l0IGEvZ2NjL2lwYS1wdXJlLWNvbnN0LmMgYi9nY2MvaXBhLXB1 cmUtY29uc3QuYwppbmRleCBkYWM4ZjBkNWYyMS4uOTY1ZmRkNDE5NzUgMTAw NjQ0Ci0tLSBhL2djYy9pcGEtcHVyZS1jb25zdC5jCisrKyBiL2djYy9pcGEt cHVyZS1jb25zdC5jCkBAIC01Niw2ICs1NiwxMSBAQCBhbG9uZyB3aXRoIEdD Qzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQogI2luY2x1 ZGUgInRyZWUtc2NhbGFyLWV2b2x1dGlvbi5oIgogI2luY2x1ZGUgImludGwu aCIKICNpbmNsdWRlICJvcHRzLmgiCisjaW5jbHVkZSAic3NhLmgiCisjaW5j bHVkZSAiYWxsb2MtcG9vbC5oIgorI2luY2x1ZGUgInN5bWJvbC1zdW1tYXJ5 LmgiCisjaW5jbHVkZSAiaXBhLXByb3AuaCIKKyNpbmNsdWRlICJpcGEtZm5z dW1tYXJ5LmgiCiAKIC8qIExhdHRpY2UgdmFsdWVzIGZvciBjb25zdCBhbmQg cHVyZSBmdW5jdGlvbnMuICBFdmVyeXRoaW5nIHN0YXJ0cyBvdXQKICAgIGJl aW5nIGNvbnN0LCB0aGVuIG1heSBkcm9wIHRvIHB1cmUgYW5kIHRoZW4gbmVp dGhlciBkZXBlbmRpbmcgb24KQEAgLTY3LDcgKzcyLDE2IEBAIGVudW0gcHVy ZV9jb25zdF9zdGF0ZV9lCiAgIElQQV9ORUlUSEVSCiB9OwogCi1jb25zdCBj aGFyICpwdXJlX2NvbnN0X25hbWVzWzNdID0geyJjb25zdCIsICJwdXJlIiwg Im5laXRoZXIifTsKK3N0YXRpYyBjb25zdCBjaGFyICpwdXJlX2NvbnN0X25h bWVzWzNdID0geyJjb25zdCIsICJwdXJlIiwgIm5laXRoZXIifTsKKworZW51 bSBtYWxsb2Nfc3RhdGVfZQoreworICBTVEFURV9NQUxMT0NfVE9QLAorICBT VEFURV9NQUxMT0MsCisgIFNUQVRFX01BTExPQ19CT1RUT00KK307CisKK3N0 YXRpYyBjb25zdCBjaGFyICptYWxsb2Nfc3RhdGVfbmFtZXNbXSA9IHsibWFs bG9jX3RvcCIsICJtYWxsb2MiLCAibWFsbG9jX2JvdHRvbSJ9OwogCiAvKiBI b2xkZXIgZm9yIHRoZSBjb25zdF9zdGF0ZS4gIFRoZXJlIGlzIG9uZSBvZiB0 aGVzZSBwZXIgZnVuY3Rpb24KICAgIGRlY2wuICAqLwpAQCAtOTIsMTEgKzEw NiwxMyBAQCBzdHJ1Y3QgZnVuY3Rfc3RhdGVfZAogICAvKiBJZiBmdW5jdGlv biBjYW4gY2FsbCBmcmVlLCBtdW5tYXAgb3Igb3RoZXJ3aXNlIG1ha2UgcHJl dmlvdXNseQogICAgICBub24tdHJhcHBpbmcgbWVtb3J5IGFjY2Vzc2VzIHRy YXBwaW5nLiAgKi8KICAgYm9vbCBjYW5fZnJlZTsKKworICBlbnVtIG1hbGxv Y19zdGF0ZV9lIG1hbGxvY19zdGF0ZTsKIH07CiAKIC8qIFN0YXRlIHVzZWQg d2hlbiB3ZSBrbm93IG5vdGhpbmcgYWJvdXQgZnVuY3Rpb24uICAqLwogc3Rh dGljIHN0cnVjdCBmdW5jdF9zdGF0ZV9kIHZhcnlpbmdfc3RhdGUKLSAgID0g eyBJUEFfTkVJVEhFUiwgSVBBX05FSVRIRVIsIHRydWUsIHRydWUsIHRydWUs IHRydWUgfTsKKyAgID0geyBJUEFfTkVJVEhFUiwgSVBBX05FSVRIRVIsIHRy dWUsIHRydWUsIHRydWUsIHRydWUsIFNUQVRFX01BTExPQ19CT1RUT00gfTsK IAogCiB0eXBlZGVmIHN0cnVjdCBmdW5jdF9zdGF0ZV9kICogZnVuY3Rfc3Rh dGU7CkBAIC0yMTUsNiArMjMxLDE5IEBAIHdhcm5fZnVuY3Rpb25fY29uc3Qg KHRyZWUgZGVjbCwgYm9vbCBrbm93bl9maW5pdGUpCiAJCQkga25vd25fZmlu aXRlLCB3YXJuZWRfYWJvdXQsICJjb25zdCIpOwogfQogCisvKiBFbWl0IHN1 Z2dlc3Rpb24gYWJvdXQgX19hdHRyaWJ1dGVfXygobWFsbG9jKSkgZm9yIERF Q0wuICAqLworCitzdGF0aWMgdm9pZAord2Fybl9mdW5jdGlvbl9tYWxsb2Mg KHRyZWUgZGVjbCkKK3sKKyAgc3RhdGljIGhhc2hfc2V0PHRyZWU+ICp3YXJu ZWRfYWJvdXQ7CisgIHdhcm5lZF9hYm91dAorICAgID0gc3VnZ2VzdF9hdHRy aWJ1dGUgKE9QVF9Xc3VnZ2VzdF9hdHRyaWJ1dGVfbWFsbG9jLCBkZWNsLAor CQkJIGZhbHNlLCB3YXJuZWRfYWJvdXQsICJtYWxsb2MiKTsKK30KKworLyog RW1pdCBzdWdnZXN0aW9uIGFib3V0IF9fYXR0cmlidXRlX18oKG5vcmV0dXJu KSkgZm9yIERFQ0wuICAqLworCiBzdGF0aWMgdm9pZAogd2Fybl9mdW5jdGlv bl9ub3JldHVybiAodHJlZSBkZWNsKQogewpAQCAtODEyLDYgKzg0MSwxNDkg QEAgY2hlY2tfc3RtdCAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKmdzaXAsIGZ1 bmN0X3N0YXRlIGxvY2FsLCBib29sIGlwYSkKICAgICB9CiB9CiAKKy8qIENo ZWNrIHRoYXQgUkVUVkFMIGlzIHVzZWQgb25seSBpbiBTVE1UIGFuZCBpbiBj b21wYXJpc29ucyBhZ2FpbnN0IDAuCisgICBSRVRWQUwgaXMgcmV0dXJuIHZh bHVlIG9mIHRoZSBmdW5jdGlvbiBhbmQgU1RNVCBpcyByZXR1cm4gc3RtdC4g ICovCisKK3N0YXRpYyBib29sCitjaGVja19yZXR2YWxfdXNlcyAodHJlZSBy ZXR2YWwsIGdpbXBsZSAqc3RtdCkKK3sKKyAgaW1tX3VzZV9pdGVyYXRvciB1 c2VfaXRlcjsKKyAgZ2ltcGxlICp1c2Vfc3RtdDsKKworICBGT1JfRUFDSF9J TU1fVVNFX1NUTVQgKHVzZV9zdG10LCB1c2VfaXRlciwgcmV0dmFsKQorICAg IGlmIChnY29uZCAqY29uZCA9IGR5bl9jYXN0PGdjb25kICo+ICh1c2Vfc3Rt dCkpCisgICAgICB7CisJdHJlZSBvcDIgPSBnaW1wbGVfY29uZF9yaHMgKGNv bmQpOworCWlmICghaW50ZWdlcl96ZXJvcCAob3AyKSkKKwkgIFJFVFVSTl9G Uk9NX0lNTV9VU0VfU1RNVCAodXNlX2l0ZXIsIGZhbHNlKTsKKyAgICAgIH0K KyAgICBlbHNlIGlmIChnYXNzaWduICpnYSA9IGR5bl9jYXN0PGdhc3NpZ24g Kj4gKHVzZV9zdG10KSkKKyAgICAgIHsKKwllbnVtIHRyZWVfY29kZSBjb2Rl ID0gZ2ltcGxlX2Fzc2lnbl9yaHNfY29kZSAoZ2EpOworCWlmIChUUkVFX0NP REVfQ0xBU1MgKGNvZGUpICE9IHRjY19jb21wYXJpc29uKQorCSAgUkVUVVJO X0ZST01fSU1NX1VTRV9TVE1UICh1c2VfaXRlciwgZmFsc2UpOworCWlmICgh aW50ZWdlcl96ZXJvcCAoZ2ltcGxlX2Fzc2lnbl9yaHMyIChnYSkpKQorCSAg UkVUVVJOX0ZST01fSU1NX1VTRV9TVE1UICh1c2VfaXRlciwgZmFsc2UpOwor ICAgICAgfQorICAgIGVsc2UgaWYgKGlzX2dpbXBsZV9kZWJ1ZyAodXNlX3N0 bXQpKQorICAgICAgOworICAgIGVsc2UgaWYgKHVzZV9zdG10ICE9IHN0bXQp CisgICAgICBSRVRVUk5fRlJPTV9JTU1fVVNFX1NUTVQgKHVzZV9pdGVyLCBm YWxzZSk7CisKKyAgcmV0dXJuIHRydWU7Cit9CisKKy8qIG1hbGxvY19jYW5k aWRhdGVfcCgpIGNoZWNrcyBpZiBGVU4gY2FuIHBvc3NpYmx5IGJlIGFubm90 YXRlZCB3aXRoIG1hbGxvYworICAgYXR0cmlidXRlLiBDdXJyZW50bHkgdGhp cyBmdW5jdGlvbiBkb2VzIGEgdmVyeSBjb25zZXJ2YXRpdmUgYW5hbHlzaXMu CisgICBGVU4gaXMgY29uc2lkZXJlZCB0byBiZSBhIGNhbmRpZGF0ZSBpZgor ICAgMSkgSXQgcmV0dXJucyBhIHZhbHVlIG9mIHBvaW50ZXIgdHlwZS4KKyAg IDIpIFNTQV9OQU1FX0RFRl9TVE1UIChyZXR1cm5fdmFsdWUpIGlzIGVpdGhl ciBhIGZ1bmN0aW9uIGNhbGwgb3IKKyAgICAgIGEgcGhpLCBhbmQgZWxlbWVu dCBvZiBwaGkgaXMgZWl0aGVyIE5VTEwgb3IKKyAgICAgIFNTQV9OQU1FX0RF Rl9TVE1UKGVsZW1lbnQpIGlzIGZ1bmN0aW9uIGNhbGwuCisgICAzKSBUaGUg cmV0dXJuLXZhbHVlIGhhcyBpbW1lZGlhdGUgdXNlcyBvbmx5IHdpdGhpbiBj b21wYXJpc29ucyAoZ2NvbmQgb3IgZ2Fzc2lnbikKKyAgICAgIGFuZCByZXR1 cm5fc3RtdCAoYW5kIGxpa2V3aXNlIGEgcGhpIGFyZyBoYXMgaW1tZWRpYXRl IHVzZSBvbmx5IHdpdGhpbiBjb21wYXJpc29uCisgICAgICBvciB0aGUgcGhp IHN0bXQpLiAgKi8KKworc3RhdGljIGJvb2wKK21hbGxvY19jYW5kaWRhdGVf cCAoZnVuY3Rpb24gKmZ1biwgYm9vbCBpcGEpCit7CisgIGJhc2ljX2Jsb2Nr IGV4aXRfYmxvY2sgPSBFWElUX0JMT0NLX1BUUl9GT1JfRk4gKGZ1bik7Cisg IGVkZ2UgZTsKKyAgZWRnZV9pdGVyYXRvciBlaTsKKyAgY2dyYXBoX25vZGUg Km5vZGUgPSBjZ3JhcGhfbm9kZTo6Z2V0X2NyZWF0ZSAoZnVuLT5kZWNsKTsK KworI2RlZmluZSBEVU1QX0FORF9SRVRVUk4ocmVhc29uKSAgXAoreyAgXAor ICBpZiAoZHVtcF9maWxlICYmIChkdW1wX2ZsYWdzICYgVERGX0RFVEFJTFMp KSAgXAorICAgIGZwcmludGYgKGR1bXBfZmlsZSwgIiVzIiwgKHJlYXNvbikp OyAgXAorICByZXR1cm4gZmFsc2U7ICBcCit9CisKKyAgaWYgKEVER0VfQ09V TlQgKGV4aXRfYmxvY2stPnByZWRzKSA9PSAwKQorICAgIHJldHVybiBmYWxz ZTsKKworICBGT1JfRUFDSF9FREdFIChlLCBlaSwgZXhpdF9ibG9jay0+cHJl ZHMpCisgICAgeworICAgICAgZ2ltcGxlX3N0bXRfaXRlcmF0b3IgZ3NpID0g Z3NpX2xhc3RfYmIgKGUtPnNyYyk7CisgICAgICBncmV0dXJuICpyZXRfc3Rt dCA9IGR5bl9jYXN0PGdyZXR1cm4gKj4gKGdzaV9zdG10IChnc2kpKTsKKwor ICAgICAgaWYgKCFyZXRfc3RtdCkKKwlyZXR1cm4gZmFsc2U7CisKKyAgICAg IHRyZWUgcmV0dmFsID0gZ2ltcGxlX3JldHVybl9yZXR2YWwgKHJldF9zdG10 KTsKKyAgICAgIGlmICghcmV0dmFsKQorCURVTVBfQU5EX1JFVFVSTigiTm8g cmV0dXJuIHZhbHVlLiIpCisKKyAgICAgIGlmIChUUkVFX0NPREUgKHJldHZh bCkgIT0gU1NBX05BTUUKKwkgIHx8IFRSRUVfQ09ERSAoVFJFRV9UWVBFIChy ZXR2YWwpKSAhPSBQT0lOVEVSX1RZUEUpCisJRFVNUF9BTkRfUkVUVVJOKCJS ZXR1cm4gdmFsdWUgaXMgbm90IFNTQV9OQU1FIG9yIG5vdCBhIHBvaW50ZXIg dHlwZS4iKQorCisgICAgICBpZiAoIWNoZWNrX3JldHZhbF91c2VzIChyZXR2 YWwsIHJldF9zdG10KSkKKwlEVU1QX0FORF9SRVRVUk4oIlJldHVybiB2YWx1 ZSBoYXMgdXNlcyBvdXRzaWRlIHJldHVybiBzdG10IgorCQkJIiBhbmQgY29t cGFyaXNvbnMgYWdhaW5zdCAwLiIpCisKKyAgICAgIGdpbXBsZSAqZGVmID0g U1NBX05BTUVfREVGX1NUTVQgKHJldHZhbCk7CisgICAgICBpZiAoZ2NhbGwg KmNhbGxfc3RtdCA9IGR5bl9jYXN0PGdjYWxsICo+IChkZWYpKQorCXsKKwkg IHRyZWUgY2FsbGVlX2RlY2wgPSBnaW1wbGVfY2FsbF9mbmRlY2wgKGNhbGxf c3RtdCk7CisJICBpZiAoIWNhbGxlZV9kZWNsKQorCSAgICByZXR1cm4gZmFs c2U7CisKKwkgIGlmICghaXBhICYmICFERUNMX0lTX01BTExPQyAoY2FsbGVl X2RlY2wpKQorCSAgICBEVU1QX0FORF9SRVRVUk4oImNhbGxlZV9kZWNsIGRv ZXMgbm90IGhhdmUgbWFsbG9jIGF0dHJpYnV0ZSBmb3IiCisJCQkgICAgIiBu b24taXBhIG1vZGUuIikKKworCSAgY2dyYXBoX2VkZ2UgKmNzID0gbm9kZS0+ Z2V0X2VkZ2UgKGNhbGxfc3RtdCk7CisJICBpZiAoY3MpCisJICAgIHsKKwkg ICAgICBpcGFfY2FsbF9zdW1tYXJ5ICplcyA9IGlwYV9jYWxsX3N1bW1hcmll cy0+Z2V0IChjcyk7CisJICAgICAgZ2NjX2Fzc2VydCAoZXMpOworCSAgICAg IGVzLT5pc19yZXR1cm5fY2FsbGVlX3VuY2FwdHVyZWQgPSB0cnVlOworCSAg ICB9CisJfQorCisgICAgICBlbHNlIGlmIChncGhpICpwaGkgPSBkeW5fY2Fz dDxncGhpICo+IChkZWYpKQorCWZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBn aW1wbGVfcGhpX251bV9hcmdzIChwaGkpOyArK2kpCisJICB7CisJICAgIHRy ZWUgYXJnID0gZ2ltcGxlX3BoaV9hcmdfZGVmIChwaGksIGkpOworCSAgICBp ZiAoVFJFRV9DT0RFIChhcmcpICE9IFNTQV9OQU1FKQorCSAgICAgIERVTVBf QU5EX1JFVFVSTigicGhpIGFyZyBpcyBub3QgU1NBX05BTUUuIikKKwkgICAg aWYgKCEoYXJnID09IG51bGxfcG9pbnRlcl9ub2RlIHx8IGNoZWNrX3JldHZh bF91c2VzIChhcmcsIHBoaSkpKQorCSAgICAgIERVTVBfQU5EX1JFVFVSTigi cGhpIGFyZyBoYXMgdXNlcyBvdXRzaWRlIHBoaSIKKwkJCSAgICAgICIgYW5k IGNvbXBhcmlzb25zIGFnYWluc3QgMC4iKQorCisJICAgIGdpbXBsZSAqYXJn X2RlZiA9IFNTQV9OQU1FX0RFRl9TVE1UIChhcmcpOworCSAgICBnY2FsbCAq Y2FsbF9zdG10ID0gZHluX2Nhc3Q8Z2NhbGwgKj4gKGFyZ19kZWYpOworCSAg ICBpZiAoIWNhbGxfc3RtdCkKKwkgICAgICByZXR1cm4gZmFsc2U7CisJICAg IHRyZWUgY2FsbGVlX2RlY2wgPSBnaW1wbGVfY2FsbF9mbmRlY2wgKGNhbGxf c3RtdCk7CisJICAgIGlmICghY2FsbGVlX2RlY2wpCisJICAgICAgcmV0dXJu IGZhbHNlOworCSAgICBpZiAoIWlwYSAmJiAhREVDTF9JU19NQUxMT0MgKGNh bGxlZV9kZWNsKSkKKwkgICAgICBEVU1QX0FORF9SRVRVUk4oImNhbGxlZV9k ZWNsIGRvZXMgbm90IGhhdmUgbWFsbG9jIGF0dHJpYnV0ZSBmb3IiCisJCQkg ICAgICAiIG5vbi1pcGEgbW9kZS4iKQorCisJICAgIGNncmFwaF9lZGdlICpj cyA9IG5vZGUtPmdldF9lZGdlIChjYWxsX3N0bXQpOworCSAgICBpZiAoY3Mp CisJICAgICAgeworCQlpcGFfY2FsbF9zdW1tYXJ5ICplcyA9IGlwYV9jYWxs X3N1bW1hcmllcy0+Z2V0IChjcyk7CisJCWdjY19hc3NlcnQgKGVzKTsKKwkJ ZXMtPmlzX3JldHVybl9jYWxsZWVfdW5jYXB0dXJlZCA9IHRydWU7CisJICAg ICAgfQorCSAgfQorCisgICAgICBlbHNlCisJRFVNUF9BTkRfUkVUVVJOKCJk ZWZfc3RtdCBvZiByZXR1cm4gdmFsdWUgaXMgbm90IGEgY2FsbCBvciBwaGkt c3RtdC4iKQorICAgIH0KKworICBpZiAoZHVtcF9maWxlICYmIChkdW1wX2Zs YWdzICYgVERGX0RFVEFJTFMpKQorICAgIGZwcmludGYgKGR1bXBfZmlsZSwg IlxuRm91bmQgJXMgdG8gYmUgY2FuZGlkYXRlIGZvciBtYWxsb2MgYXR0cmli dXRlXG4iLAorCSAgICAgSURFTlRJRklFUl9QT0lOVEVSIChERUNMX05BTUUg KGZ1bi0+ZGVjbCkpKTsKKyAgcmV0dXJuIHRydWU7CisKKyN1bmRlZiBEVU1Q X0FORF9SRVRVUk4KK30KKwogCiAvKiBUaGlzIGlzIHRoZSBtYWluIHJvdXRp bmUgZm9yIGZpbmRpbmcgdGhlIHJlZmVyZW5jZSBwYXR0ZXJucyBmb3IKICAg IGdsb2JhbCB2YXJpYWJsZXMgd2l0aGluIGEgZnVuY3Rpb24gRk4uICAqLwpA QCAtOTIxLDYgKzEwOTMsMTQgQEAgZW5kOgogICBpZiAoVFJFRV9OT1RIUk9X IChkZWNsKSkKICAgICBsLT5jYW5fdGhyb3cgPSBmYWxzZTsKIAorICBsLT5t YWxsb2Nfc3RhdGUgPSBTVEFURV9NQUxMT0NfQk9UVE9NOworICBpZiAoREVD TF9JU19NQUxMT0MgKGRlY2wpKQorICAgIGwtPm1hbGxvY19zdGF0ZSA9IFNU QVRFX01BTExPQzsKKyAgZWxzZSBpZiAoaXBhICYmIG1hbGxvY19jYW5kaWRh dGVfcCAoREVDTF9TVFJVQ1RfRlVOQ1RJT04gKGRlY2wpLCB0cnVlKSkKKyAg ICBsLT5tYWxsb2Nfc3RhdGUgPSBTVEFURV9NQUxMT0NfVE9QOworICBlbHNl IGlmIChtYWxsb2NfY2FuZGlkYXRlX3AgKERFQ0xfU1RSVUNUX0ZVTkNUSU9O IChkZWNsKSwgZmFsc2UpKQorICAgIGwtPm1hbGxvY19zdGF0ZSA9IFNUQVRF X01BTExPQzsKKwogICBwb3BfY2Z1biAoKTsKICAgaWYgKGR1bXBfZmlsZSkK ICAgICB7CkBAIC05MzQsNiArMTExNCw4IEBAIGVuZDoKICAgICAgICAgZnBy aW50ZiAoZHVtcF9maWxlLCAiRnVuY3Rpb24gaXMgbG9jYWxseSBwdXJlLlxu Iik7CiAgICAgICBpZiAobC0+Y2FuX2ZyZWUpCiAJZnByaW50ZiAoZHVtcF9m aWxlLCAiRnVuY3Rpb24gY2FuIGxvY2FsbHkgZnJlZS5cbiIpOworICAgICAg aWYgKGwtPm1hbGxvY19zdGF0ZSA9PSBTVEFURV9NQUxMT0MpCisJZnByaW50 ZiAoZHVtcF9maWxlLCAiRnVuY3Rpb24gaXMgbG9jYWxseSBtYWxsb2MuXG4i KTsKICAgICB9CiAgIHJldHVybiBsOwogfQpAQCAtMTA2Nyw2ICsxMjQ5LDcg QEAgcHVyZV9jb25zdF93cml0ZV9zdW1tYXJ5ICh2b2lkKQogCSAgYnBfcGFj a192YWx1ZSAoJmJwLCBmcy0+bG9vcGluZywgMSk7CiAJICBicF9wYWNrX3Zh bHVlICgmYnAsIGZzLT5jYW5fdGhyb3csIDEpOwogCSAgYnBfcGFja192YWx1 ZSAoJmJwLCBmcy0+Y2FuX2ZyZWUsIDEpOworCSAgYnBfcGFja192YWx1ZSAo JmJwLCBmcy0+bWFsbG9jX3N0YXRlLCAyKTsKIAkgIHN0cmVhbWVyX3dyaXRl X2JpdHBhY2sgKCZicCk7CiAJfQogICAgIH0KQEAgLTExMjcsNiArMTMxMCw5 IEBAIHB1cmVfY29uc3RfcmVhZF9zdW1tYXJ5ICh2b2lkKQogCSAgICAgIGZz LT5sb29waW5nID0gYnBfdW5wYWNrX3ZhbHVlICgmYnAsIDEpOwogCSAgICAg IGZzLT5jYW5fdGhyb3cgPSBicF91bnBhY2tfdmFsdWUgKCZicCwgMSk7CiAJ ICAgICAgZnMtPmNhbl9mcmVlID0gYnBfdW5wYWNrX3ZhbHVlICgmYnAsIDEp OworCSAgICAgIGZzLT5tYWxsb2Nfc3RhdGUKKwkJCT0gKGVudW0gbWFsbG9j X3N0YXRlX2UpIGJwX3VucGFja192YWx1ZSAoJmJwLCAyKTsKKwogCSAgICAg IGlmIChkdW1wX2ZpbGUpCiAJCXsKIAkJICBpbnQgZmxhZ3MgPSBmbGFnc19m cm9tX2RlY2xfb3JfdHlwZSAobm9kZS0+ZGVjbCk7CkBAIC0xMTQ5LDYgKzEz MzUsOCBAQCBwdXJlX2NvbnN0X3JlYWRfc3VtbWFyeSAodm9pZCkKIAkJICAg IGZwcmludGYgKGR1bXBfZmlsZSwiICBmdW5jdGlvbiBpcyBsb2NhbGx5IHRo cm93aW5nXG4iKTsKIAkJICBpZiAoZnMtPmNhbl9mcmVlKQogCQkgICAgZnBy aW50ZiAoZHVtcF9maWxlLCIgIGZ1bmN0aW9uIGNhbiBsb2NhbGx5IGZyZWVc biIpOworCQkgIGZwcmludGYgKGR1bXBfZmlsZSwgIlxuIG1hbGxvYyBzdGF0 ZTogJXNcbiIsCisJCQkgICBtYWxsb2Nfc3RhdGVfbmFtZXNbZnMtPm1hbGxv Y19zdGF0ZV0pOwogCQl9CiAJICAgIH0KIApAQCAtMTY1OSw2ICsxODQ3LDEz MSBAQCBwcm9wYWdhdGVfbm90aHJvdyAodm9pZCkKICAgZnJlZSAob3JkZXIp OwogfQogCisvKiBEZWJ1Z2dpbmcgZnVuY3Rpb24gdG8gZHVtcCBzdGF0ZSBv ZiBtYWxsb2MgbGF0dGljZS4gICovCisKK0RFQlVHX0ZVTkNUSU9OCitzdGF0 aWMgdm9pZAorZHVtcF9tYWxsb2NfbGF0dGljZSAoRklMRSAqZHVtcF9maWxl LCBjb25zdCBjaGFyICpzKQoreworICBpZiAoIWR1bXBfZmlsZSkKKyAgICBy ZXR1cm47CisKKyAgZnByaW50ZiAoZHVtcF9maWxlLCAiXG5cbk1BTExPQyBM QVRUSUNFICVzOlxuIiwgcyk7CisgIGNncmFwaF9ub2RlICpub2RlOworICBG T1JfRUFDSF9GVU5DVElPTiAobm9kZSkKKyAgICB7CisgICAgICBmdW5jdF9z dGF0ZSBmcyA9IGdldF9mdW5jdGlvbl9zdGF0ZSAobm9kZSk7CisgICAgICBt YWxsb2Nfc3RhdGVfZSBzdGF0ZSA9IGZzLT5tYWxsb2Nfc3RhdGU7CisgICAg ICBmcHJpbnRmIChkdW1wX2ZpbGUsICIlczogJXNcbiIsIG5vZGUtPm5hbWUg KCksIG1hbGxvY19zdGF0ZV9uYW1lc1tzdGF0ZV0pOworICAgIH0KK30KKwor LyogUHJvcGFnYXRlIG1hbGxvYyBhdHRyaWJ1dGUgYWNyb3NzIHRoZSBjYWxs Z3JhcGguICAqLworCitzdGF0aWMgdm9pZAorcHJvcGFnYXRlX21hbGxvYyAo dm9pZCkKK3sKKyAgY2dyYXBoX25vZGUgKm5vZGU7CisgIEZPUl9FQUNIX0ZV TkNUSU9OIChub2RlKQorICAgIHsKKyAgICAgIGlmIChERUNMX0lTX01BTExP QyAobm9kZS0+ZGVjbCkpCisJaWYgKCFoYXNfZnVuY3Rpb25fc3RhdGUgKG5v ZGUpKQorCSAgeworCSAgICBmdW5jdF9zdGF0ZSBsID0gWENORVcgKHN0cnVj dCBmdW5jdF9zdGF0ZV9kKTsKKwkgICAgKmwgPSB2YXJ5aW5nX3N0YXRlOwor CSAgICBsLT5tYWxsb2Nfc3RhdGUgPSBTVEFURV9NQUxMT0M7CisJICAgIHNl dF9mdW5jdGlvbl9zdGF0ZSAobm9kZSwgbCk7CisJICB9CisgICAgfQorCisg IGR1bXBfbWFsbG9jX2xhdHRpY2UgKGR1bXBfZmlsZSwgIkluaXRpYWwiKTsK KyAgc3RydWN0IGNncmFwaF9ub2RlICoqb3JkZXIKKyAgICA9IFhORVdWRUMg KHN0cnVjdCBjZ3JhcGhfbm9kZSAqLCBzeW10YWItPmNncmFwaF9jb3VudCk7 CisgIGludCBvcmRlcl9wb3MgPSBpcGFfcmV2ZXJzZV9wb3N0b3JkZXIgKG9y ZGVyKTsKKyAgYm9vbCBjaGFuZ2VkID0gdHJ1ZTsKKworICB3aGlsZSAoY2hh bmdlZCkKKyAgICB7CisgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAv KiBXYWxrIGluIHBvc3RvcmRlci4gICovCisgICAgICBmb3IgKGludCBpID0g b3JkZXJfcG9zIC0gMTsgaSA+PSAwOyAtLWkpCisJeworCSAgY2dyYXBoX25v ZGUgKm5vZGUgPSBvcmRlcltpXTsKKwkgIGlmIChub2RlLT5hbGlhcworCSAg ICAgIHx8ICFub2RlLT5kZWZpbml0aW9uCisJICAgICAgfHwgIWhhc19mdW5j dGlvbl9zdGF0ZSAobm9kZSkpCisJICAgIGNvbnRpbnVlOworCisJICBmdW5j dF9zdGF0ZSBsID0gZ2V0X2Z1bmN0aW9uX3N0YXRlIChub2RlKTsKKworCSAg LyogRklYTUU6IGFkZCBzdXBwb3J0IGZvciBpbmRpcmVjdC1jYWxscy4gICov CisJICBpZiAobm9kZS0+aW5kaXJlY3RfY2FsbHMpCisJICAgIHsKKwkgICAg ICBsLT5tYWxsb2Nfc3RhdGUgPSBTVEFURV9NQUxMT0NfQk9UVE9NOworCSAg ICAgIGNvbnRpbnVlOworCSAgICB9CisKKwkgIGlmIChub2RlLT5nZXRfYXZh aWxhYmlsaXR5ICgpIDw9IEFWQUlMX0lOVEVSUE9TQUJMRSkKKwkgICAgewor CSAgICAgIGwtPm1hbGxvY19zdGF0ZSA9IFNUQVRFX01BTExPQ19CT1RUT007 CisJICAgICAgY29udGludWU7CisJICAgIH0KKworCSAgaWYgKGwtPm1hbGxv Y19zdGF0ZSA9PSBTVEFURV9NQUxMT0NfQk9UVE9NKQorCSAgICBjb250aW51 ZTsKKworCSAgdmVjPGNncmFwaF9ub2RlICo+IGNhbGxlZXMgPSB2TlVMTDsK KwkgIGZvciAoY2dyYXBoX2VkZ2UgKmNzID0gbm9kZS0+Y2FsbGVlczsgY3M7 IGNzID0gY3MtPm5leHRfY2FsbGVlKQorCSAgICB7CisJICAgICAgaXBhX2Nh bGxfc3VtbWFyeSAqZXMgPSBpcGFfY2FsbF9zdW1tYXJpZXMtPmdldCAoY3Mp OworCSAgICAgIGlmIChlcyAmJiBlcy0+aXNfcmV0dXJuX2NhbGxlZV91bmNh cHR1cmVkKQorCQljYWxsZWVzLnNhZmVfcHVzaCAoY3MtPmNhbGxlZSk7CisJ ICAgIH0KKworCSAgbWFsbG9jX3N0YXRlX2UgbmV3X3N0YXRlID0gbC0+bWFs bG9jX3N0YXRlOworCSAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IGNhbGxl ZXMubGVuZ3RoICgpOyBqKyspCisJICAgIHsKKwkgICAgICBjZ3JhcGhfbm9k ZSAqY2FsbGVlID0gY2FsbGVlc1tqXTsKKwkgICAgICBpZiAoIWhhc19mdW5j dGlvbl9zdGF0ZSAoY2FsbGVlKSkKKwkJeworCQkgIG5ld19zdGF0ZSA9IFNU QVRFX01BTExPQ19CT1RUT007CisJCSAgYnJlYWs7CisJCX0KKwkgICAgICBt YWxsb2Nfc3RhdGVfZSBjYWxsZWVfc3RhdGUgPSBnZXRfZnVuY3Rpb25fc3Rh dGUgKGNhbGxlZSktPm1hbGxvY19zdGF0ZTsKKwkgICAgICBpZiAobmV3X3N0 YXRlIDwgY2FsbGVlX3N0YXRlKQorCQluZXdfc3RhdGUgPSBjYWxsZWVfc3Rh dGU7CisJICAgIH0KKwkgIGlmIChuZXdfc3RhdGUgIT0gbC0+bWFsbG9jX3N0 YXRlKQorCSAgICB7CisJICAgICAgY2hhbmdlZCA9IHRydWU7CisJICAgICAg bC0+bWFsbG9jX3N0YXRlID0gbmV3X3N0YXRlOworCSAgICB9CisJfQorICAg IH0KKworICBGT1JfRUFDSF9ERUZJTkVEX0ZVTkNUSU9OIChub2RlKQorICAg IGlmIChoYXNfZnVuY3Rpb25fc3RhdGUgKG5vZGUpKQorICAgICAgeworCWZ1 bmN0X3N0YXRlIGwgPSBnZXRfZnVuY3Rpb25fc3RhdGUgKG5vZGUpOworCWlm ICghbm9kZS0+YWxpYXMKKwkgICAgJiYgbC0+bWFsbG9jX3N0YXRlID09IFNU QVRFX01BTExPQworCSAgICAmJiAhbm9kZS0+Z2xvYmFsLmlubGluZWRfdG8p CisJICB7CisJICAgIGlmIChkdW1wX2ZpbGUgJiYgKGR1bXBfZmxhZ3MgJiBU REZfREVUQUlMUykpCisJICAgICAgZnByaW50ZiAoZHVtcF9maWxlLCAiRnVu Y3Rpb24gJXMgZm91bmQgdG8gYmUgbWFsbG9jXG4iLAorCQkgICAgICAgbm9k ZS0+bmFtZSAoKSk7CisKKwkgICAgYm9vbCBtYWxsb2NfZGVjbF9wID0gREVD TF9JU19NQUxMT0MgKG5vZGUtPmRlY2wpOworCSAgICBub2RlLT5zZXRfbWFs bG9jX2ZsYWcgKHRydWUpOworCSAgICBpZiAoIW1hbGxvY19kZWNsX3AgJiYg d2Fybl9zdWdnZXN0X2F0dHJpYnV0ZV9tYWxsb2MpCisJCXdhcm5fZnVuY3Rp b25fbWFsbG9jIChub2RlLT5kZWNsKTsKKwkgIH0KKyAgICAgIH0KKworICBk dW1wX21hbGxvY19sYXR0aWNlIChkdW1wX2ZpbGUsICJhZnRlciBwcm9wYWdh dGlvbiIpOworICBpcGFfZnJlZV9wb3N0b3JkZXJfaW5mbyAoKTsKKyAgZnJl ZSAob3JkZXIpOworfQogCiAvKiBQcm9kdWNlIHRoZSBnbG9iYWwgaW5mb3Jt YXRpb24gYnkgcHJlZm9ybWluZyBhIHRyYW5zaXRpdmUgY2xvc3VyZQogICAg b24gdGhlIGxvY2FsIGluZm9ybWF0aW9uIHRoYXQgd2FzIHByb2R1Y2VkIGJ5 IGdlbmVyYXRlX3N1bW1hcnkuICAqLwpAQCAtMTY3Nyw2ICsxOTkwLDcgQEAg ZXhlY3V0ZSAoZnVuY3Rpb24gKikKICAgLyogTm90aHJvdyBtYWtlcyBtb3Jl IGZ1bmN0aW9uIHRvIG5vdCBsZWFkIHRvIHJldHVybiBhbmQgaW1wcm92ZQog ICAgICBsYXRlciBhbmFseXNpcy4gICovCiAgIHByb3BhZ2F0ZV9ub3Rocm93 ICgpOworICBwcm9wYWdhdGVfbWFsbG9jICgpOwogICByZW1vdmVfcCA9IHBy b3BhZ2F0ZV9wdXJlX2NvbnN0ICgpOwogCiAgIC8qIENsZWFudXAuICovCkBA IC0xNjg0LDYgKzE5OTgsMTAgQEAgZXhlY3V0ZSAoZnVuY3Rpb24gKikKICAg ICBpZiAoaGFzX2Z1bmN0aW9uX3N0YXRlIChub2RlKSkKICAgICAgIGZyZWUg KGdldF9mdW5jdGlvbl9zdGF0ZSAobm9kZSkpOwogICBmdW5jdF9zdGF0ZV92 ZWMucmVsZWFzZSAoKTsKKworICAvKiBJbiBXUEEgd2UgdXNlIGlubGluZSBz dW1tYXJpZXMgZm9yIHBhcnRpdGlvbmluZyBwcm9jZXNzLiAgKi8KKyAgaWYg KCFmbGFnX3dwYSkKKyAgICBpcGFfZnJlZV9mbl9zdW1tYXJ5ICgpOwogICBy ZXR1cm4gcmVtb3ZlX3AgPyBUT0RPX3JlbW92ZV9mdW5jdGlvbnMgOiAwOwog fQogCkBAIC0xODc3LDYgKzIxOTUsMTkgQEAgcGFzc19sb2NhbF9wdXJlX2Nv bnN0OjpleGVjdXRlIChmdW5jdGlvbiAqZnVuKQogCWZwcmludGYgKGR1bXBf ZmlsZSwgIkZ1bmN0aW9uIGZvdW5kIHRvIGJlIG5vdGhyb3c6ICVzXG4iLAog CQkgY3VycmVudF9mdW5jdGlvbl9uYW1lICgpKTsKICAgICB9CisKKyAgaWYg KGwtPm1hbGxvY19zdGF0ZSA9PSBTVEFURV9NQUxMT0MKKyAgICAgICYmICFE RUNMX0lTX01BTExPQyAoY3VycmVudF9mdW5jdGlvbl9kZWNsKSkKKyAgICB7 CisgICAgICBub2RlLT5zZXRfbWFsbG9jX2ZsYWcgKHRydWUpOworICAgICAg aWYgKHdhcm5fc3VnZ2VzdF9hdHRyaWJ1dGVfbWFsbG9jKQorCXdhcm5fZnVu Y3Rpb25fbWFsbG9jIChub2RlLT5kZWNsKTsKKyAgICAgIGNoYW5nZWQgPSB0 cnVlOworICAgICAgaWYgKGR1bXBfZmlsZSkKKwlmcHJpbnRmIChkdW1wX2Zp bGUsICJGdW5jdGlvbiBmb3VuZCB0byBiZSBtYWxsb2M6ICVzXG4iLAorCQkg bm9kZS0+bmFtZSAoKSk7CisgICAgfQorCiAgIGZyZWUgKGwpOwogICBpZiAo Y2hhbmdlZCkKICAgICByZXR1cm4gZXhlY3V0ZV9maXh1cF9jZmcgKCk7CmRp ZmYgLS1naXQgYS9nY2Mvc3NhLWl0ZXJhdG9ycy5oIGIvZ2NjL3NzYS1pdGVy YXRvcnMuaAppbmRleCBjOGFhNzdiZDRmMy4uNzQwY2JmMTNjYjIgMTAwNjQ0 Ci0tLSBhL2djYy9zc2EtaXRlcmF0b3JzLmgKKysrIGIvZ2NjL3NzYS1pdGVy YXRvcnMuaApAQCAtOTMsNiArOTMsMTIgQEAgc3RydWN0IGltbV91c2VfaXRl cmF0b3IKICAgICAgYnJlYWs7CQkJCQkJCVwKICAgIH0KIAorLyogU2ltaWxh cmx5IGZvciByZXR1cm4uICAqLworI2RlZmluZSBSRVRVUk5fRlJPTV9JTU1f VVNFX1NUTVQoSVRFUiwgVkFMKQkJCVwKKyAgewkJCQkJCQkJXAorICAgIGVu ZF9pbW1fdXNlX3N0bXRfdHJhdmVyc2UgKCYoSVRFUikpOwkJCVwKKyAgICBy ZXR1cm4gKFZBTCk7CQkJCQkJXAorICB9CiAKIC8qIFVzZSB0aGlzIGl0ZXJh dG9yIGluIGNvbWJpbmF0aW9uIHdpdGggRk9SX0VBQ0hfSU1NX1VTRV9TVE1U IHRvCiAgICBnZXQgYWNjZXNzIHRvIGVhY2ggb2NjdXJyZW5jZSBvZiBzc2F2 YXIgb24gdGhlIHN0bXQgcmV0dXJuZWQgYnkKZGlmZiAtLWdpdCBhL2djYy90 ZXN0c3VpdGUvZ2NjLmRnL2lwYS9wcm9wbWFsbG9jLTEuYyBiL2djYy90ZXN0 c3VpdGUvZ2NjLmRnL2lwYS9wcm9wbWFsbG9jLTEuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOWE5NWY4MTcwNzkKLS0tIC9k ZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9pcGEvcHJvcG1h bGxvYy0xLmMKQEAgLTAsMCArMSwyMSBAQAorLyogeyBkZy1kbyBjb21waWxl IH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1mZHVtcC1pcGEtcHVyZS1j b25zdC1kZXRhaWxzIiB9ICovCisKK19fYXR0cmlidXRlX18oKG5vaW5saW5l LCBub19pY2YsIHVzZWQpKQorc3RhdGljIHZvaWQgKmYoX19TSVpFX1RZUEVf XyBuKQoreworICB2b2lkICpwID0gX19idWlsdGluX21hbGxvYyAobik7Cisg IGlmIChwID09IDApCisgICAgX19idWlsdGluX2Fib3J0ICgpOworICByZXR1 cm4gcDsKK30KKworX19hdHRyaWJ1dGVfXygobm9pbmxpbmUsIG5vX2ljZiwg dXNlZCkpCitzdGF0aWMgdm9pZCAqYmFyKF9fU0laRV9UWVBFX18gbikKK3sK KyAgdm9pZCAqcCA9IGYgKG4pOworICByZXR1cm4gcDsKK30KKworLyogeyBk Zy1maW5hbCB7IHNjYW4taXBhLWR1bXAgIkZ1bmN0aW9uIGYgZm91bmQgdG8g YmUgbWFsbG9jIiAicHVyZS1jb25zdCIgfSB9ICovCisvKiB7IGRnLWZpbmFs IHsgc2Nhbi1pcGEtZHVtcCAiRnVuY3Rpb24gYmFyIGZvdW5kIHRvIGJlIG1h bGxvYyIgInB1cmUtY29uc3QiIH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rl c3RzdWl0ZS9nY2MuZGcvaXBhL3Byb3BtYWxsb2MtMi5jIGIvZ2NjL3Rlc3Rz dWl0ZS9nY2MuZGcvaXBhL3Byb3BtYWxsb2MtMi5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45NWIyZmQ3NGE3YQotLS0gL2Rl di9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2lwYS9wcm9wbWFs bG9jLTIuYwpAQCAtMCwwICsxLDIzIEBACisvKiB7IGRnLWRvIGNvbXBpbGUg fSAqLworLyogeyBkZy1vcHRpb25zICItTzIgLWZkdW1wLWlwYS1wdXJlLWNv bnN0LWRldGFpbHMiIH0gKi8KKworX19hdHRyaWJ1dGVfXygobm9pbmxpbmUs IHVzZWQsIG5vX2ljZikpCitzdGF0aWMgdm9pZCAqZm9vIChfX1NJWkVfVFlQ RV9fIG4pCit7CisgIHJldHVybiBfX2J1aWx0aW5fbWFsbG9jIChuICogMTAp OworfQorCitfX2F0dHJpYnV0ZV9fKChub2lubGluZSwgdXNlZCwgbm9faWNm KSkKK3N0YXRpYyB2b2lkICpiYXIoX19TSVpFX1RZUEVfXyBuLCBpbnQgY29u ZCkKK3sKKyAgdm9pZCAqcDsKKyAgaWYgKGNvbmQpCisgICAgcCA9IGZvbyAo bik7CisgIGVsc2UKKyAgICBwID0gX19idWlsdGluX21hbGxvYyAobik7CisK KyAgcmV0dXJuIHA7Cit9CisKKy8qIHsgZGctZmluYWwgeyBzY2FuLWlwYS1k dW1wICJGdW5jdGlvbiBmb28gZm91bmQgdG8gYmUgbWFsbG9jIiAicHVyZS1j b25zdCIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1pcGEtZHVtcCAi RnVuY3Rpb24gYmFyIGZvdW5kIHRvIGJlIG1hbGxvYyIgInB1cmUtY29uc3Qi IH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvaXBh L3Byb3BtYWxsb2MtMy5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvaXBhL3By b3BtYWxsb2MtMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwLi4xMzU1OGRkZDA3ZAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90 ZXN0c3VpdGUvZ2NjLmRnL2lwYS9wcm9wbWFsbG9jLTMuYwpAQCAtMCwwICsx LDI0IEBACisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRp b25zICItTzIgLWZkdW1wLWlwYS1wdXJlLWNvbnN0LWRldGFpbHMiIH0gKi8K Kworc3RhdGljIHZvaWQgKmZvbyhfX1NJWkVfVFlQRV9fLCBpbnQpIF9fYXR0 cmlidXRlX18oKG5vaW5saW5lLCBub19pY2YsIHVzZWQpKTsKKworX19hdHRy aWJ1dGVfXygobm9pbmxpbmUsIHVzZWQsIG5vX2ljZikpCitzdGF0aWMgdm9p ZCAqYmFyKF9fU0laRV9UWVBFX18gbiwgaW50IG0pCit7CisgIHJldHVybiBm b28gKG4sIG0pOworfQorCitzdGF0aWMgdm9pZCAqZm9vKF9fU0laRV9UWVBF X18gbiwgaW50IG0pCit7CisgIHZvaWQgKnA7CisgIGlmIChtID4gMCkKKyAg ICBwID0gYmFyIChuLCAtLW0pOworICBlbHNlCisgICAgcCA9IF9fYnVpbHRp bl9tYWxsb2MgKG4pOworCisgIHJldHVybiBwOworfQorCisvKiB7IGRnLWZp bmFsIHsgc2Nhbi1pcGEtZHVtcCAiRnVuY3Rpb24gZm9vIGZvdW5kIHRvIGJl IG1hbGxvYyIgInB1cmUtY29uc3QiIH0gfSAqLworLyogeyBkZy1maW5hbCB7 IHNjYW4taXBhLWR1bXAgIkZ1bmN0aW9uIGJhciBmb3VuZCB0byBiZSBtYWxs b2MiICJwdXJlLWNvbnN0IiB9IH0gKi8K --f403043897fcc18432055c5ced66 Content-Type: text/plain; charset="US-ASCII"; name="doc-changes.diff" Content-Disposition: attachment; filename="doc-changes.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_j96xc5hp1 Content-length: 631 SW5kZXg6IGNoYW5nZXMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD UyBmaWxlOiAvY3ZzL2djYy93d3dkb2NzL2h0ZG9jcy9nY2MtOC9jaGFuZ2Vz Lmh0bWwsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTUKZGlmZiAtcjEuMTUg Y2hhbmdlcy5odG1sCjM3YzM3LDM5CjwgICA8bGk+PC9saT4KLS0tCj4gICA8 bGk+VGhlIGlwYS1wdXJlLWNvbnN0IHBhc3MgaXMgZXh0ZW5kZWQgdG8gcHJv cGFnYXRlIG1hbGxvYyBhdHRyaWJ1dGUsIGFuZCB0aGUKPiAgIGNvcnJlc3Bv bmRpbmcgd2FybmluZyBvcHRpb24gPGNvZGU+V3N1Z2dlc3QtYXR0cmlidXRl PW1hbGxvYzwvY29kZT4gZW1pdHMgYQo+ICAgZGlhZ25vc3RpYyBmb3IgYSBm dW5jdGlvbiwgd2hpY2ggY2FuIGJlIGFubm90YXRlZCB3aXRoIG1hbGxvYyBh dHRyaWJ1dGUuPC9saT4K --f403043897fcc18432055c5ced66--