From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa4.mentor.iphmx.com (esa4.mentor.iphmx.com [68.232.137.252]) by sourceware.org (Postfix) with ESMTPS id 06A233983826 for ; Fri, 9 Jul 2021 11:17:12 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 06A233983826 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mentor.com IronPort-SDR: 2Fn3a6DN8SOPabtSZiAg8uHcDZbFuEtx15DkQu6sMQw/Ql2LCHC4YtaplX1f3NXzdd/i86gIJG PlEQ/QU58Nm5ur/sTLKYp+hPBFa8uw0eH42o1SLQorxn4US8P33YR0Qjg1nVlLmMwK749zO6gn lGdCZIGaZUwISr6m14un+XzIoIaxSvWOa/ULtERw1pDm1wZil2t52eQKhXLfW8DDfeaht23dr7 7DE0fdh8mkJPy3S9qFvXqgHHCZHKVsIHi9zDh8GmMPXCwMv92Yu3JtG8SGdk9bYqgOm9cE8v8b y7w= X-IronPort-AV: E=Sophos;i="5.84,226,1620720000"; d="scan'208";a="63508662" Received: from orw-gwy-02-in.mentorg.com ([192.94.38.167]) by esa4.mentor.iphmx.com with ESMTP; 09 Jul 2021 03:16:23 -0800 IronPort-SDR: Bvrh1kj+TH0qsyy5aFh6LZw0CBC6MJJyIuZnAtZ+tzj4pxKru396zgg2KZml0d0/6eWER1U+Jb sHxeURbmoGoNhZ5z6mX7L9SlWrPKIqsO53T06erPn+ZqV+N0U51SgMalJ2O+a92IlX9YfmSdjB 7yPQT+eKu4TBDiqUsotstret7h3Q9kaqDXrMW4KeTm0KcLMM5mVaT+vd9vfg47GDhg8Jc31lG/ TGQl22vl69gr/FEMK/qLslMY1ovmNoyJIM10HlztngTDOVXmrFVpVtfHZ/e1LeO+pK8dKrZ/Er w00= From: Kwok Cheung Yeung Subject: [WIP, OpenMP] OpenMP metadirectives support To: GCC Patches , Jakub Jelinek Message-ID: <8d413974-0068-3a31-6ae5-d36c1be06d06@codesourcery.com> Date: Fri, 9 Jul 2021 12:16:15 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------C9296576E93407F8DBC031D6" Content-Language: en-GB X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: svr-ies-mbx-05.mgc.mentorg.com (139.181.222.5) To SVR-IES-MBX-04.mgc.mentorg.com (139.181.222.4) X-Spam-Status: No, score=-12.4 required=5.0 tests=BAYES_00, GIT_PATCH_0, HEADER_FROM_DIFFERENT_DOMAINS, KAM_DMARC_STATUS, KAM_SHORT, SPF_HELO_PASS, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 09 Jul 2021 11:17:18 -0000 --------------C9296576E93407F8DBC031D6 Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 7bit Hello This is a WIP implementation of metadirectives as defined in the OpenMP 5.0 spec. I intend to add support for metadirectives as specified in OpenMP 5.1 later (where the directive can be selected dynamically at runtime), but am concentrating on the static part for now. Parsing has only been implemented in the C frontend so far. I am especially interested in feedback regarding certain aspects of the implementation before I become too committed to the current design. 1) When parsing each directive variant, a vector of tokens is constructed and populated with the tokens for a regular equivalent pragma, along with the tokens for its clauses and the body. The parser routine for that pragma type is then called with these tokens, and the entire resulting parse tree is stored as a sub-tree of the metadirective tree structure. This results in the body being parsed and stored once for each directive variant. I believe this is necessary because the body is parsed differently if there is a 'for' in the directive (using c_parser_omp_for_loop) compared to if there is not, plus clauses in the directive (e.g. tile, collapse) can change how the for loop is parsed. As an optimisation, identical body trees could be merged together, but that can come later. 2) Selectors in the device set (i.e. kind, isa, arch) resolve differently depending on whether the program is running on a target or on the host. Since we don't keep multiple versions of a function for each target on the host compiler, resolving metadirectives with these selectors needs to be delayed until after LTO streaming, at which point the host or offload compiler can make the appropriate decision. One negative of this is that the metadirective Gimple representation lasts beyond the OMP expand stage, when generally we would expect all OMP directives to have been expanded to something else. 3) In the OpenMP examples (version 5.0.1), section 9.7, the example metadirective.3.c does not work as expected. #pragma omp declare target void exp_pi_diff(double *d, double my_pi){ #pragma omp metadirective \ when( construct={target}: distribute parallel for ) \ default( parallel for simd) ... int main() { ... #pragma omp target teams map(tofrom: d[0:N]) exp_pi_diff(d,my_pi); ... exp_pi_diff(d,my_pi); In the first call to exp_pi_diff in an '#pragma omp target' construct, the metadirective is expected to expand to 'distribute parallel for', but in the second (without the '#pragma omp target'), it should expand to 'parallel for simd'. During OMP expansion of the 'omp target', it creates a child function that calls exp_pi_diff: __attribute__((omp target entrypoint)) void main._omp_fn.0 (const struct .omp_data_t.12 & restrict .omp_data_i) { ... : __builtin_GOMP_teams (0, 0); exp_pi_diff (d.13, my_pi); This is not a problem on the offload compiler (since by definition its copy of exp_pi_diff must be in a 'target'), but if the host device is used, the same version of exp_pi_diff is called in both target and non-target contexts. What would be the best way to solve this? Offhand, I can think of two solutions: (a) Recursively go through all functions that can be reached via a target region and create clones for each, redirecting all function calls in the clones to the new cloned versions. Resolve the metadirectives in the clones and originals separately. (b) Make the construct selector a dynamic selector when OpenMP 5.1 metadirective support is implemented. Keep track of the current construct list every time an OpenMP construct is entered or exited, and make the decision at runtime. Thanks Kwok --------------C9296576E93407F8DBC031D6 Content-Type: text/plain; charset="UTF-8"; name="omp_metadirectives_wip.patch" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="omp_metadirectives_wip.patch" ZGlmZiAtLWdpdCBhL2djYy9NYWtlZmlsZS5pbiBiL2djYy9NYWtlZmlsZS5pbgppbmRleCAx MTY0NTU0ZTZkNi4uMjhlMjlmYWI5M2QgMTAwNjQ0Ci0tLSBhL2djYy9NYWtlZmlsZS5pbgor KysgYi9nY2MvTWFrZWZpbGUuaW4KQEAgLTE1MDUsNiArMTUwNSw3IEBAIE9CSlMgPSBcCiAJ b21wLWdlbmVyYWwubyBcCiAJb21wLWxvdy5vIFwKIAlvbXAtb2FjYy1rZXJuZWxzLWRlY29t cG9zZS5vIFwKKyAgICAgICAgb21wLWV4cGFuZC1tZXRhZGlyZWN0aXZlLm8gXAogCW9tcC1z aW1kLWNsb25lLm8gXAogCW9wdC1wcm9ibGVtLm8gXAogCW9wdGFicy5vIFwKZGlmZiAtLWdp dCBhL2djYy9jLWZhbWlseS9jLXByYWdtYS5jIGIvZ2NjL2MtZmFtaWx5L2MtcHJhZ21hLmMK aW5kZXggNGY4ZThlMDEyOGMuLjAxZGMxZTZkOWMwIDEwMDY0NAotLS0gYS9nY2MvYy1mYW1p bHkvYy1wcmFnbWEuYworKysgYi9nY2MvYy1mYW1pbHkvYy1wcmFnbWEuYwpAQCAtMTMxMiwx MiArMTMxMiwxNCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG9tcF9wcmFnbWFfZGVmIG9tcF9w cmFnbWFzW10gPSB7CiAgIHsgImFsbG9jYXRlIiwgUFJBR01BX09NUF9BTExPQ0FURSB9LAog ICB7ICJhdG9taWMiLCBQUkFHTUFfT01QX0FUT01JQyB9LAogICB7ICJiYXJyaWVyIiwgUFJB R01BX09NUF9CQVJSSUVSIH0sCisgIHsgImJlZ2luIiwgUFJBR01BX09NUF9CRUdJTiB9LAog ICB7ICJjYW5jZWwiLCBQUkFHTUFfT01QX0NBTkNFTCB9LAogICB7ICJjYW5jZWxsYXRpb24i LCBQUkFHTUFfT01QX0NBTkNFTExBVElPTl9QT0lOVCB9LAogICB7ICJjcml0aWNhbCIsIFBS QUdNQV9PTVBfQ1JJVElDQUwgfSwKICAgeyAiZGVwb2JqIiwgUFJBR01BX09NUF9ERVBPQkog fSwKLSAgeyAiZW5kIiwgUFJBR01BX09NUF9FTkRfREVDTEFSRV9UQVJHRVQgfSwKKyAgeyAi ZW5kIiwgUFJBR01BX09NUF9FTkQgfSwKICAgeyAiZmx1c2giLCBQUkFHTUFfT01QX0ZMVVNI IH0sCisgIHsgIm1ldGFkaXJlY3RpdmUiLCBQUkFHTUFfT01QX01FVEFESVJFQ1RJVkUgfSwK ICAgeyAicmVxdWlyZXMiLCBQUkFHTUFfT01QX1JFUVVJUkVTIH0sCiAgIHsgInNlY3Rpb24i LCBQUkFHTUFfT01QX1NFQ1RJT04gfSwKICAgeyAic2VjdGlvbnMiLCBQUkFHTUFfT01QX1NF Q1RJT05TIH0sCkBAIC0xMzg3LDYgKzEzODksNDEgQEAgY19wcF9sb29rdXBfcHJhZ21hICh1 bnNpZ25lZCBpbnQgaWQsIGNvbnN0IGNoYXIgKipzcGFjZSwgY29uc3QgY2hhciAqKm5hbWUp CiAgIGdjY191bnJlYWNoYWJsZSAoKTsKIH0KIAorc3RhdGljIGludAorY19wcF9sb29rdXBf cHJhZ21hX2J5X25hbWVfMSAoY29uc3Qgdm9pZCAqbmFtZSwgY29uc3Qgdm9pZCAqZWxlbSkK K3sKKyAgY29uc3Qgc3RydWN0IG9tcF9wcmFnbWFfZGVmICpwcmFnbWFfZGVmCisgICAgPSAo Y29uc3Qgc3RydWN0IG9tcF9wcmFnbWFfZGVmICopIGVsZW07CisKKyAgcmV0dXJuIHN0cmNt cCAoKGNvbnN0IGNoYXIgKikgbmFtZSwgcHJhZ21hX2RlZi0+bmFtZSk7Cit9CisKK2VudW0g cHJhZ21hX2tpbmQKK2NfcHBfbG9va3VwX3ByYWdtYV9ieV9uYW1lIChjb25zdCBjaGFyICpu YW1lKQoreworICBjb25zdCBpbnQgbl9vbXBfcHJhZ21hcyA9IHNpemVvZiAob21wX3ByYWdt YXMpIC8gc2l6ZW9mICgqb21wX3ByYWdtYXMpOworICBjb25zdCBpbnQgbl9vbXBfcHJhZ21h c19zaW1kID0gc2l6ZW9mIChvbXBfcHJhZ21hc19zaW1kKQorCQkJCSAvIHNpemVvZiAoKm9t cF9wcmFnbWFzX3NpbWQpOworCisgIHZvaWQgKnJlc3VsdCA9IGJzZWFyY2ggKG5hbWUsIG9t cF9wcmFnbWFzLCBuX29tcF9wcmFnbWFzLAorCQkJICBzaXplb2YgKCpvbXBfcHJhZ21hcyks CisJCQkgIGNfcHBfbG9va3VwX3ByYWdtYV9ieV9uYW1lXzEpOworICBpZiAoIXJlc3VsdCkK KyAgICByZXN1bHQgPSBic2VhcmNoIChuYW1lLCBvbXBfcHJhZ21hc19zaW1kLCBuX29tcF9w cmFnbWFzX3NpbWQsCisJCSAgICAgIHNpemVvZiAoKm9tcF9wcmFnbWFzX3NpbWQpLAorCQkg ICAgICBjX3BwX2xvb2t1cF9wcmFnbWFfYnlfbmFtZV8xKTsKKworICBpZiAocmVzdWx0KQor ICAgIHsKKyAgICAgIGNvbnN0IHN0cnVjdCBvbXBfcHJhZ21hX2RlZiAqZGVmCisJPSAoY29u c3Qgc3RydWN0IG9tcF9wcmFnbWFfZGVmICopIHJlc3VsdDsKKworICAgICAgcmV0dXJuIChl bnVtIHByYWdtYV9raW5kKSBkZWYtPmlkOworICAgIH0KKworICByZXR1cm4gUFJBR01BX05P TkU7Cit9CisKIC8qIEZyb250LWVuZCB3cmFwcGVycyBmb3IgcHJhZ21hIHJlZ2lzdHJhdGlv biB0byBhdm9pZCBkcmFnZ2luZwogICAgY3BwbGliLmggaW4gYWxtb3N0IGV2ZXJ5d2hlcmUu ICAqLwogCmRpZmYgLS1naXQgYS9nY2MvYy1mYW1pbHkvYy1wcmFnbWEuaCBiL2djYy9jLWZh bWlseS9jLXByYWdtYS5oCmluZGV4IDZjMzRmZmE1YmU0Li42ZDQ2OThkNDFiYSAxMDA2NDQK LS0tIGEvZ2NjL2MtZmFtaWx5L2MtcHJhZ21hLmgKKysrIGIvZ2NjL2MtZmFtaWx5L2MtcHJh Z21hLmgKQEAgLTQ1LDE3ICs0NSwxOSBAQCBlbnVtIHByYWdtYV9raW5kIHsKICAgUFJBR01B X09NUF9BTExPQ0FURSwKICAgUFJBR01BX09NUF9BVE9NSUMsCiAgIFBSQUdNQV9PTVBfQkFS UklFUiwKKyAgUFJBR01BX09NUF9CRUdJTiwKICAgUFJBR01BX09NUF9DQU5DRUwsCiAgIFBS QUdNQV9PTVBfQ0FOQ0VMTEFUSU9OX1BPSU5ULAogICBQUkFHTUFfT01QX0NSSVRJQ0FMLAog ICBQUkFHTUFfT01QX0RFQ0xBUkUsCiAgIFBSQUdNQV9PTVBfREVQT0JKLAogICBQUkFHTUFf T01QX0RJU1RSSUJVVEUsCi0gIFBSQUdNQV9PTVBfRU5EX0RFQ0xBUkVfVEFSR0VULAorICBQ UkFHTUFfT01QX0VORCwKICAgUFJBR01BX09NUF9GTFVTSCwKICAgUFJBR01BX09NUF9GT1Is CiAgIFBSQUdNQV9PTVBfTE9PUCwKICAgUFJBR01BX09NUF9NQVNURVIsCisgIFBSQUdNQV9P TVBfTUVUQURJUkVDVElWRSwKICAgUFJBR01BX09NUF9PUkRFUkVELAogICBQUkFHTUFfT01Q X1BBUkFMTEVMLAogICBQUkFHTUFfT01QX1JFUVVJUkVTLApAQCAtMjUyLDYgKzI1NCw3IEBA IGV4dGVybiBlbnVtIGNwcF90dHlwZSBjX2xleF93aXRoX2ZsYWdzICh0cmVlICosIGxvY2F0 aW9uX3QgKiwgdW5zaWduZWQgY2hhciAqLAogCQkJCQlpbnQpOwogCiBleHRlcm4gdm9pZCBj X3BwX2xvb2t1cF9wcmFnbWEgKHVuc2lnbmVkIGludCwgY29uc3QgY2hhciAqKiwgY29uc3Qg Y2hhciAqKik7CitleHRlcm4gZW51bSBwcmFnbWFfa2luZCBjX3BwX2xvb2t1cF9wcmFnbWFf YnlfbmFtZSAoY29uc3QgY2hhciAqKTsKIAogZXh0ZXJuIEdUWSgoKSkgdHJlZSBwcmFnbWFf ZXh0ZXJuX3ByZWZpeDsKIApkaWZmIC0tZ2l0IGEvZ2NjL2MvYy1wYXJzZXIuYyBiL2djYy9j L2MtcGFyc2VyLmMKaW5kZXggYjk5MzBkNDg3ZmQuLmZhODA3NTMwY2E3IDEwMDY0NAotLS0g YS9nY2MvYy9jLXBhcnNlci5jCisrKyBiL2djYy9jL2MtcGFyc2VyLmMKQEAgLTE1ODMsOCAr MTU4MywxMiBAQCBlbnVtIHByYWdtYV9jb250ZXh0IHsgcHJhZ21hX2V4dGVybmFsLCBwcmFn bWFfc3RydWN0LCBwcmFnbWFfcGFyYW0sCiBzdGF0aWMgYm9vbCBjX3BhcnNlcl9wcmFnbWEg KGNfcGFyc2VyICosIGVudW0gcHJhZ21hX2NvbnRleHQsIGJvb2wgKik7CiBzdGF0aWMgdm9p ZCBjX3BhcnNlcl9vbXBfY2FuY2VsbGF0aW9uX3BvaW50IChjX3BhcnNlciAqLCBlbnVtIHBy YWdtYV9jb250ZXh0KTsKIHN0YXRpYyBib29sIGNfcGFyc2VyX29tcF90YXJnZXQgKGNfcGFy c2VyICosIGVudW0gcHJhZ21hX2NvbnRleHQsIGJvb2wgKik7CitzdGF0aWMgdm9pZCBjX3Bh cnNlcl9vbXBfYmVnaW4gKGNfcGFyc2VyICosIGJvb2wgKik7CitzdGF0aWMgdm9pZCBjX3Bh cnNlcl9vbXBfZW5kIChjX3BhcnNlciAqKTsKIHN0YXRpYyB2b2lkIGNfcGFyc2VyX29tcF9l bmRfZGVjbGFyZV90YXJnZXQgKGNfcGFyc2VyICopOwogc3RhdGljIHZvaWQgY19wYXJzZXJf b21wX2RlY2xhcmUgKGNfcGFyc2VyICosIGVudW0gcHJhZ21hX2NvbnRleHQpOworc3RhdGlj IHRyZWUgY19wYXJzZXJfb21wX21ldGFkaXJlY3RpdmUgKGxvY2F0aW9uX3QsIGNfcGFyc2Vy ICosIGNoYXIgKiwKKwkJCQkJb21wX2NsYXVzZV9tYXNrLCB0cmVlICosIGJvb2wgKiwgYm9v bCk7CiBzdGF0aWMgdm9pZCBjX3BhcnNlcl9vbXBfcmVxdWlyZXMgKGNfcGFyc2VyICopOwog c3RhdGljIGJvb2wgY19wYXJzZXJfb21wX29yZGVyZWQgKGNfcGFyc2VyICosIGVudW0gcHJh Z21hX2NvbnRleHQsIGJvb2wgKik7CiBzdGF0aWMgdm9pZCBjX3BhcnNlcl9vYWNjX3JvdXRp bmUgKGNfcGFyc2VyICosIGVudW0gcHJhZ21hX2NvbnRleHQpOwpAQCAtMTI0MDIsOCArMTI0 MDYsMTIgQEAgY19wYXJzZXJfcHJhZ21hIChjX3BhcnNlciAqcGFyc2VyLCBlbnVtIHByYWdt YV9jb250ZXh0IGNvbnRleHQsIGJvb2wgKmlmX3ApCiAgICAgY2FzZSBQUkFHTUFfT01QX1RB UkdFVDoKICAgICAgIHJldHVybiBjX3BhcnNlcl9vbXBfdGFyZ2V0IChwYXJzZXIsIGNvbnRl eHQsIGlmX3ApOwogCi0gICAgY2FzZSBQUkFHTUFfT01QX0VORF9ERUNMQVJFX1RBUkdFVDoK LSAgICAgIGNfcGFyc2VyX29tcF9lbmRfZGVjbGFyZV90YXJnZXQgKHBhcnNlcik7CisgICAg Y2FzZSBQUkFHTUFfT01QX0JFR0lOOgorICAgICAgY19wYXJzZXJfb21wX2JlZ2luIChwYXJz ZXIsIGlmX3ApOworICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY2FzZSBQUkFHTUFfT01Q X0VORDoKKyAgICAgIGNfcGFyc2VyX29tcF9lbmQgKHBhcnNlcik7CiAgICAgICByZXR1cm4g ZmFsc2U7CiAKICAgICBjYXNlIFBSQUdNQV9PTVBfU0NBTjoKQEAgLTE4MTk1LDYgKzE4MjAz LDcgQEAgY19wYXJzZXJfb21wX2Zvcl9sb29wIChsb2NhdGlvbl90IGxvYywgY19wYXJzZXIg KnBhcnNlciwgZW51bSB0cmVlX2NvZGUgY29kZSwKICAgbG9jYXRpb25fdCBmb3JfbG9jOwog ICBib29sIHRpbGluZyA9IGZhbHNlOwogICBib29sIGluc2NhbiA9IGZhbHNlOworCiAgIHZl Yzx0cmVlLCB2YV9nYz4gKmZvcl9ibG9jayA9IG1ha2VfdHJlZV92ZWN0b3IgKCk7CiAKICAg Zm9yIChjbCA9IGNsYXVzZXM7IGNsOyBjbCA9IE9NUF9DTEFVU0VfQ0hBSU4gKGNsKSkKQEAg LTIwOTM0LDYgKzIwOTQzLDYwIEBAIGNfcGFyc2VyX29tcF9lbmRfZGVjbGFyZV90YXJnZXQg KGNfcGFyc2VyICpwYXJzZXIpCiAgICAgY3VycmVudF9vbXBfZGVjbGFyZV90YXJnZXRfYXR0 cmlidXRlLS07CiB9CiAKK3N0YXRpYyB2b2lkCitjX3BhcnNlcl9vbXBfYmVnaW4gKGNfcGFy c2VyICpwYXJzZXIsIGJvb2wgKmlmX3ApCit7CisgIGxvY2F0aW9uX3QgbG9jID0gY19wYXJz ZXJfcGVla190b2tlbiAocGFyc2VyKS0+bG9jYXRpb247CisgIGNfcGFyc2VyX2NvbnN1bWVf cHJhZ21hKHBhcnNlcik7CisgIGlmIChjX3BhcnNlcl9wZWVrX3Rva2VuIChwYXJzZXIpLT50 eXBlID09IENQUF9OQU1FKQorICAgIHsKKyAgICAgIGNvbnN0IGNoYXIgKnAgPSBJREVOVElG SUVSX1BPSU5URVIgKGNfcGFyc2VyX3BlZWtfdG9rZW4gKHBhcnNlciktPnZhbHVlKTsKKwor ICAgICAgaWYgKHN0cmNtcCAocCwgIm1ldGFkaXJlY3RpdmUiKSA9PSAwKQorCXsKKwkgIGNo YXIgcF9uYW1lW3NpemVvZiAiI3ByYWdtYSBvbXAgdGVhbXMgZGlzdHJpYnV0ZSBwYXJhbGxl bCBmb3Igc2ltZCJdOworCSAgb21wX2NsYXVzZV9tYXNrIG1hc2sgKDApOworCisJICBjX3Bh cnNlcl9jb25zdW1lX3Rva2VuIChwYXJzZXIpOworCSAgY19wYXJzZXJfb21wX21ldGFkaXJl Y3RpdmUgKGxvYywgcGFyc2VyLCBwX25hbWUsIG1hc2ssIE5VTEwsIGlmX3AsCisJCQkJICAg ICAgdHJ1ZSk7CisJICByZXR1cm47CisJfQorICAgIH0KKworICBlcnJvcl9hdCAobG9jLCAi ZXhwZWN0ZWQgJTxiZWdpbiBtZXRhZGlyZWN0aXZlJT4iKTsKKyAgY19wYXJzZXJfc2tpcF90 b19wcmFnbWFfZW9sIChwYXJzZXIpOworfQorCitzdGF0aWMgdm9pZAorY19wYXJzZXJfb21w X2VuZCAoY19wYXJzZXIgKnBhcnNlcikKK3sKKyAgbG9jYXRpb25fdCBsb2MgPSBjX3BhcnNl cl9wZWVrX3Rva2VuIChwYXJzZXIpLT5sb2NhdGlvbjsKKworICBpZiAoY19wYXJzZXJfcGVl a18ybmRfdG9rZW4gKHBhcnNlciktPnR5cGUgPT0gQ1BQX05BTUUpCisgICAgeworICAgICAg Y29uc3QgY2hhciAqcAorCT0gSURFTlRJRklFUl9QT0lOVEVSIChjX3BhcnNlcl9wZWVrXzJu ZF90b2tlbiAocGFyc2VyKS0+dmFsdWUpOworCisgICAgICBpZiAoc3RyY21wIChwLCAiZGVj bGFyZSIpID09IDApCisJeworCSAgY19wYXJzZXJfb21wX2VuZF9kZWNsYXJlX3RhcmdldCAo cGFyc2VyKTsKKwkgIHJldHVybjsKKwl9CisgICAgICBlbHNlIGlmIChzdHJjbXAgKHAsICJt ZXRhZGlyZWN0aXZlIikgPT0gMCkKKwl7CisJICAvKiBUaGUgcHJhZ21hICdvbXAgZW5kIG1l dGFkaXJlY3RpdmUnIHNob3VsZCBoYXZlIGJlZW4gY29uc3VtZWQKKwkgICAgIHdoZW4gcHJv Y2Vzc2luZyB0aGUgbWV0YWRpcmVjdGl2ZS4gICovCisJICBlcnJvcl9hdCAobG9jLCAiJTwj cHJhZ21hIG9tcCBlbmQgbWV0YWRpcmVjdGl2ZSU+IHdpdGhvdXQgIgorCQkJICJjb3JyZXNw b25kaW5nICU8I3ByYWdtYSBvbXAgYmVnaW4gbWV0YWRpcmVjdGl2ZSU+Iik7CisJfQorICAg IH0KKyAgZWxzZQorICAgIGVycm9yX2F0IChsb2MsICJleHBlY3RlZCAlPGVuZCBkZWNsYXJl IHRhcmdldCU+IG9yICU8ZW5kIG1ldGFkaXJlY3RpdmUlPiIpOworCisgIGNfcGFyc2VyX3Nr aXBfdG9fcHJhZ21hX2VvbCAocGFyc2VyKTsKK30KKwogCiAvKiBPcGVuTVAgNC4wCiAgICAj cHJhZ21hIG9tcCBkZWNsYXJlIHJlZHVjdGlvbiAocmVkdWN0aW9uLWlkIDogdHlwZW5hbWUt bGlzdCA6IGV4cHJlc3Npb24pIFwKQEAgLTIxNjA3LDYgKzIxNjcwLDI5NSBAQCBjX3BhcnNl cl9vbXBfdGFza2xvb3AgKGxvY2F0aW9uX3QgbG9jLCBjX3BhcnNlciAqcGFyc2VyLAogICBy ZXR1cm4gcmV0OwogfQogCisvKiBPcGVuTVAgNS4wOgorCisgICMgcHJhZ21hIG9tcCBtZXRh ZGlyZWN0aXZlIFtjbGF1c2VbLCBjbGF1c2VdXQorCisgICMgcHJhZ21hIG9tcCBiZWdpbiBt ZXRhZGlyZWN0aXZlIFtjbGF1c2VbLCBjbGF1c2VdXQorICAjIHByYWdtYSBvbXAgZW5kIG1l dGFkaXJlY3RpdmUKKyovCisKK3N0YXRpYyB0cmVlCitjX3BhcnNlcl9vbXBfbWV0YWRpcmVj dGl2ZSAobG9jYXRpb25fdCBsb2MsIGNfcGFyc2VyICpwYXJzZXIsCisJCQkgICAgY2hhciAq cF9uYW1lLCBvbXBfY2xhdXNlX21hc2sgbWFzaywgdHJlZSAqY2NsYXVzZXMsCisJCQkgICAg Ym9vbCAqaWZfcCwKKwkJCSAgICBib29sIGJlZ2luX2VuZF9wKQoreworICB0cmVlIHJldDsK KyAgYm9vbCBhbGxfc2VsZWN0b3JzX3Jlc29sdmVhYmxlID0gdHJ1ZTsKKyAgYXV0b192ZWM8 YXV0b192ZWM8Y190b2tlbj4gPiBkaXJlY3RpdmVfdG9rZW5zOworICBhdXRvX3ZlYzx0cmVl PiBjdHhzOworICBib29sIGRlZmF1bHRfc2VlbiA9IGZhbHNlOworCisgIHJldCA9IG1ha2Vf bm9kZSAoT01QX01FVEFESVJFQ1RJVkUpOworICBTRVRfRVhQUl9MT0NBVElPTiAocmV0LCBs b2MpOworICBUUkVFX1RZUEUgKHJldCkgPSB2b2lkX3R5cGVfbm9kZTsKKyAgT01QX01FVEFE SVJFQ1RJVkVfQ0xBVVNFUyAocmV0KSA9IE5VTExfVFJFRTsKKyAgc3RyY2F0IChwX25hbWUs ICIgbWV0YWRpcmVjdGl2ZSIpOworCisgIHdoaWxlIChjX3BhcnNlcl9uZXh0X3Rva2VuX2lz X25vdCAocGFyc2VyLCBDUFBfUFJBR01BX0VPTCkpCisgICAgeworICAgICAgaWYgKGNfcGFy c2VyX25leHRfdG9rZW5faXNfbm90IChwYXJzZXIsIENQUF9OQU1FKQorCSAgJiYgY19wYXJz ZXJfbmV4dF90b2tlbl9pc19ub3QgKHBhcnNlciwgQ1BQX0tFWVdPUkQpKQorCXsKKwkgIGNf cGFyc2VyX2Vycm9yIChwYXJzZXIsICJleHBlY3RlZCAlPHdoZW4lPiBvciAlPGRlZmF1bHQl PiIpOworCSAgcmV0dXJuIE5VTExfVFJFRTsKKwl9CisKKyAgICAgIGxvY2F0aW9uX3QgbWF0 Y2hfbG9jID0gY19wYXJzZXJfcGVla190b2tlbiAocGFyc2VyKS0+bG9jYXRpb247CisgICAg ICBjb25zdCBjaGFyICpwID0gSURFTlRJRklFUl9QT0lOVEVSIChjX3BhcnNlcl9wZWVrX3Rv a2VuIChwYXJzZXIpLT52YWx1ZSk7CisgICAgICBjX3BhcnNlcl9jb25zdW1lX3Rva2VuIChw YXJzZXIpOworICAgICAgYm9vbCBkZWZhdWx0X3AgPSBzdHJjbXAgKHAsICJkZWZhdWx0Iikg PT0gMDsKKyAgICAgIGlmIChkZWZhdWx0X3ApCisJeworCSAgaWYgKGRlZmF1bHRfc2VlbikK KwkgICAgeworCSAgICAgIGNfcGFyc2VyX2Vycm9yIChwYXJzZXIsICJ0aGVyZSBjYW4gb25s eSBiZSBvbmUgZGVmYXVsdCBjbGF1c2UiKTsKKwkgICAgICByZXR1cm4gTlVMTF9UUkVFOwor CSAgICB9CisJICBlbHNlCisJICAgIGRlZmF1bHRfc2VlbiA9IHRydWU7CisJfQorICAgICAg aWYgKHN0cmNtcCAocCwgIndoZW4iKSA9PSAwIHx8IGRlZmF1bHRfcCkKKwl7CisJICBtYXRj aGluZ19wYXJlbnMgcGFyZW5zOworCSAgdHJlZSBjdHggPSBOVUxMX1RSRUU7CisJICBib29s IHNraXAgPSBmYWxzZTsKKwkgIGlmICghcGFyZW5zLnJlcXVpcmVfb3BlbiAocGFyc2VyKSkK KwkgICAgcmV0dXJuIGVycm9yX21hcmtfbm9kZTsKKworCSAgaWYgKCFkZWZhdWx0X3ApCisJ ICAgIHsKKwkgICAgICBjdHggPSBjX3BhcnNlcl9vbXBfY29udGV4dF9zZWxlY3Rvcl9zcGVj aWZpY2F0aW9uIChwYXJzZXIsCisJCQkJCQkJCSBOVUxMX1RSRUUpOworCSAgICAgIGlmIChj dHggPT0gZXJyb3JfbWFya19ub2RlKQorCQlyZXR1cm4gTlVMTF9UUkVFOworCSAgICAgIGN0 eCA9IGNfb21wX2NoZWNrX2NvbnRleHRfc2VsZWN0b3IgKG1hdGNoX2xvYywgY3R4KTsKKwkg ICAgICBpZiAoY3R4ID09IGVycm9yX21hcmtfbm9kZSkKKwkJcmV0dXJuIE5VTExfVFJFRTsK KworCSAgICAgIHN3aXRjaCAob21wX2NvbnRleHRfc2VsZWN0b3JfbWF0Y2hlcyAoY3R4LCB0 cnVlKSkKKwkJeworCQljYXNlIC0xOgorCQkgIGFsbF9zZWxlY3RvcnNfcmVzb2x2ZWFibGUg PSBmYWxzZTsKKwkJICBicmVhazsKKwkJY2FzZSAxOgorCQkgIGJyZWFrOworCQljYXNlIDA6 CisJCSAgLyogUmVtb3ZlIHRoZSBzZWxlY3RvciBmcm9tIGZ1cnRoZXIgY29uc2lkZXJhdGlv bi4gICovCisJCSAgc2tpcCA9IHRydWU7CisJCSAgYnJlYWs7CisJCX0KKworCSAgICAgIGlm IChjX3BhcnNlcl9uZXh0X3Rva2VuX2lzX25vdCAocGFyc2VyLCBDUFBfQ09MT04pKQorCQl7 CisJCSAgY19wYXJzZXJfZXJyb3IgKHBhcnNlciwgImV4cGVjdGVkIGNvbG9uIik7CisJCSAg cmV0dXJuIE5VTExfVFJFRTsKKwkJfQorCSAgICAgIGNfcGFyc2VyX2NvbnN1bWVfdG9rZW4g KHBhcnNlcik7CisJICAgIH0KKworCSAgLyogUmVhZCBpbiB0aGUgZGlyZWN0aXZlIHR5cGUg YW5kIGNyZWF0ZSBhIGR1bW15IHByYWdtYSB0b2tlbiBmb3IKKwkgICAgIGl0LiAgKi8KKwkg IGNfdG9rZW4gKnRva2VuID0gY19wYXJzZXJfcGVla190b2tlbiAocGFyc2VyKTsKKwkgIGlm ICh0b2tlbi0+dHlwZSAhPSBDUFBfTkFNRSkKKwkgICAgeworCSAgICAgIGNfcGFyc2VyX2Vy cm9yIChwYXJzZXIsICJleHBlY3RlZCBkaXJlY3RpdmUgbmFtZSIpOworCSAgICAgIHJldHVy biBOVUxMX1RSRUU7CisJICAgIH0KKworCSAgbG9jYXRpb25fdCBsb2MgPSBjX3BhcnNlcl9w ZWVrX3Rva2VuIChwYXJzZXIpLT5sb2NhdGlvbjsKKwkgIGNvbnN0IGNoYXIgKnAKKwkgICAg PSBJREVOVElGSUVSX1BPSU5URVIgKGNfcGFyc2VyX3BlZWtfdG9rZW4gKHBhcnNlciktPnZh bHVlKTsKKwkgIGVudW0gcHJhZ21hX2tpbmQgcF9raW5kID0gY19wcF9sb29rdXBfcHJhZ21h X2J5X25hbWUgKHApOworCisJICBjX3BhcnNlcl9jb25zdW1lX3Rva2VuIChwYXJzZXIpOwor CSAgaWYgKHBfa2luZCA9PSBQUkFHTUFfTk9ORSkKKwkgICAgeworCSAgICAgIGNfcGFyc2Vy X2Vycm9yIChwYXJzZXIsICJ1bmtub3duIGRpcmVjdGl2ZSBuYW1lIik7CisJICAgICAgcmV0 dXJuIE5VTExfVFJFRTsKKwkgICAgfQorCisJICBpZiAoIXNraXApCisJICAgIHsKKwkgICAg ICBjX3Rva2VuIHByYWdtYV90b2tlbjsKKwkgICAgICBwcmFnbWFfdG9rZW4udHlwZSA9IENQ UF9QUkFHTUE7CisJICAgICAgcHJhZ21hX3Rva2VuLmxvY2F0aW9uID0gbG9jOworCSAgICAg IHByYWdtYV90b2tlbi5wcmFnbWFfa2luZCA9IHBfa2luZDsKKworCSAgICAgIGRpcmVjdGl2 ZV90b2tlbnMuc2FmZV9wdXNoIChhdXRvX3ZlYzxjX3Rva2VuPiAoKSk7CisJICAgICAgZGly ZWN0aXZlX3Rva2Vucy5sYXN0ICgpLnNhZmVfcHVzaCAocHJhZ21hX3Rva2VuKTsKKworCSAg ICAgIGN0eHMuc2FmZV9wdXNoIChjdHgpOworCSAgICB9CisKKwkgIC8qIFJlYWQgaW4gdG9r ZW5zIGZvciB0aGUgZGlyZWN0aXZlIGNsYXVzZXMuICAqLworCSAgYXV0b192ZWM8Y190b2tl bj4gKnRva2VucyA9IHNraXAgPyBOVUxMIDogJmRpcmVjdGl2ZV90b2tlbnMubGFzdCAoKTsK KwkgIGludCBuZXN0aW5nX2RlcHRoID0gMDsKKwkgIHdoaWxlICgxKQorCSAgICB7CisJICAg ICAgY190b2tlbiAqdG9rZW4gPSBjX3BhcnNlcl9wZWVrX3Rva2VuIChwYXJzZXIpOworCSAg ICAgIHN3aXRjaCAodG9rZW4tPnR5cGUpCisJCXsKKwkJY2FzZSBDUFBfRU9GOgorCQljYXNl IENQUF9QUkFHTUFfRU9MOgorCQkgIGJyZWFrOworCQljYXNlIENQUF9PUEVOX1BBUkVOOgor CQkgICsrbmVzdGluZ19kZXB0aDsKKwkJICBnb3RvIGFkZDsKKwkJY2FzZSBDUFBfQ0xPU0Vf UEFSRU46CisJCSAgaWYgKG5lc3RpbmdfZGVwdGgtLSA9PSAwKQorCQkgICAgYnJlYWs7CisJ CSAgZ290byBhZGQ7CisJCWRlZmF1bHQ6CisJCWFkZDoKKwkJICBpZiAoIXNraXApCisJCSAg ICB0b2tlbnMtPnNhZmVfcHVzaCAoKnRva2VuKTsKKwkJICBjX3BhcnNlcl9jb25zdW1lX3Rv a2VuIChwYXJzZXIpOworCQkgIGNvbnRpbnVlOworCQl9CisJICAgICAgYnJlYWs7CisJICAg IH0KKworCSAgY19wYXJzZXJfY29uc3VtZV90b2tlbiAocGFyc2VyKTsKKworCSAgaWYgKCFz a2lwKQorCSAgICB7CisJICAgICAgY190b2tlbiBlb2xfdG9rZW47CisJICAgICAgbWVtc2V0 ICgmZW9sX3Rva2VuLCAwLCBzaXplb2YgKGVvbF90b2tlbikpOworCSAgICAgIGVvbF90b2tl bi50eXBlID0gQ1BQX1BSQUdNQV9FT0w7CisJICAgICAgdG9rZW5zLT5zYWZlX3B1c2ggKGVv bF90b2tlbik7CisJICAgIH0KKwl9CisgICAgICBlbHNlIHsKKwljX3BhcnNlcl9lcnJvciAo cGFyc2VyLCAiZXhwZWN0ZWQgJTx3aGVuJT4gb3IgJTxkZWZhdWx0JT4iKTsKKwlyZXR1cm4g TlVMTF9UUkVFOworICAgICAgfQorICAgIH0KKyAgY19wYXJzZXJfc2tpcF90b19wcmFnbWFf ZW9sIChwYXJzZXIpOworCisgIC8qIEFkZCB0aGUgYm9keSB0b2tlbnMgdG8gdGhlIHRva2Vu cyBmb3IgZWFjaCBjYW5kaWRhdGUgZGlyZWN0aXZlLiAgKi8KKyAgaW50IG5lc3RpbmdfZGVw dGggPSAwOworICBpbnQgYnJhY2tldF9kZXB0aCA9IDA7CisgIHdoaWxlICgxKQorICAgIHsK KyAgICAgIGludCBpOworICAgICAgYXV0b192ZWM8Y190b2tlbj4gKnRva2VuczsKKyAgICAg IGNfdG9rZW4gKnRva2VuID0gY19wYXJzZXJfcGVla190b2tlbiAocGFyc2VyKTsKKyAgICAg IGJvb2wgc3RvcCA9IGZhbHNlOworCisgICAgICBpZiAoYmVnaW5fZW5kX3ApCisJeworCSAg LyogS2VlcCByZWFkaW5nIHVudGlsICcjcHJhZ21hIGVuZCBtZXRhZGlyZWN0aXZlJyBpcyBy ZWFkLiAgKi8KKwkgIHN3aXRjaCAodG9rZW4tPnR5cGUpCisJICB7CisJICBjYXNlIENQUF9Q UkFHTUE6CisJICAgIGlmICh0b2tlbi0+cHJhZ21hX2tpbmQgPT0gUFJBR01BX09NUF9FTkQp CisJICAgICAgeworCQljX3Rva2VuICpuZXh0X3Rva2VuID0gY19wYXJzZXJfcGVla18ybmRf dG9rZW4gKHBhcnNlcik7CisJCWlmIChuZXh0X3Rva2VuLT50eXBlID09IENQUF9OQU1FCisJ CSAgICAmJiBzdHJjbXAgKElERU5USUZJRVJfUE9JTlRFUiAobmV4dF90b2tlbi0+dmFsdWUp LAorCQkJICAgICAgICJtZXRhZGlyZWN0aXZlIikgPT0gMCkKKwkJICB7CisJCSAgICBjX3Bh cnNlcl9jb25zdW1lX3ByYWdtYSAocGFyc2VyKTsKKwkJICAgIGNfcGFyc2VyX2NvbnN1bWVf dG9rZW4gKHBhcnNlcik7CisJCSAgICBjX3BhcnNlcl9za2lwX3RvX3ByYWdtYV9lb2wgKHBh cnNlcik7CisJCSAgICBicmVhazsKKwkJICB9CisJICAgICAgfQorCSAgZGVmYXVsdDoKKwkg ICAgRk9SX0VBQ0hfVkVDX0VMVCAoZGlyZWN0aXZlX3Rva2VucywgaSwgdG9rZW5zKQorCSAg ICAgIHRva2Vucy0+c2FmZV9wdXNoICgqdG9rZW4pOworCSAgICBpZiAodG9rZW4tPnR5cGUg PT0gQ1BQX1BSQUdNQSkKKwkgICAgICBjX3BhcnNlcl9jb25zdW1lX3ByYWdtYSAocGFyc2Vy KTsKKwkgICAgZWxzZSBpZiAodG9rZW4tPnR5cGUgPT0gQ1BQX1BSQUdNQV9FT0wpCisJICAg ICAgY19wYXJzZXJfc2tpcF90b19wcmFnbWFfZW9sIChwYXJzZXIpOworCSAgICBlbHNlCisJ ICAgICAgY19wYXJzZXJfY29uc3VtZV90b2tlbiAocGFyc2VyKTsKKwkgICAgY29udGludWU7 CisJICB9CisJICBicmVhazsKKwl9CisgICAgICBlbHNlCisJeworCSAgc3dpdGNoICh0b2tl bi0+dHlwZSkKKwkgICAgeworCSAgICBjYXNlIENQUF9FT0Y6CisJICAgICAgYnJlYWs7CisJ ICAgIGNhc2UgQ1BQX09QRU5fQlJBQ0U6CisJICAgICAgKytuZXN0aW5nX2RlcHRoOworCSAg ICAgIGdvdG8gYWRkMjsKKwkgICAgY2FzZSBDUFBfQ0xPU0VfQlJBQ0U6CisJICAgICAgaWYg KC0tbmVzdGluZ19kZXB0aCA9PSAwKQorCQlzdG9wID0gdHJ1ZTsKKwkgICAgICBnb3RvIGFk ZDI7CisJICAgIGNhc2UgQ1BQX09QRU5fUEFSRU46CisJICAgICAgKyticmFja2V0X2RlcHRo OworCSAgICAgIGdvdG8gYWRkMjsKKwkgICAgY2FzZSBDUFBfQ0xPU0VfUEFSRU46CisJICAg ICAgLS1icmFja2V0X2RlcHRoOworCSAgICAgIGdvdG8gYWRkMjsKKwkgICAgY2FzZSBDUFBf U0VNSUNPTE9OOgorCSAgICAgIGlmIChuZXN0aW5nX2RlcHRoID09IDAgJiYgYnJhY2tldF9k ZXB0aCA9PSAwKQorCQlzdG9wID0gdHJ1ZTsKKwkgICAgICBnb3RvIGFkZDI7CisJICAgIGRl ZmF1bHQ6CisJICAgIGFkZDI6CisJICAgICAgRk9SX0VBQ0hfVkVDX0VMVCAoZGlyZWN0aXZl X3Rva2VucywgaSwgdG9rZW5zKQorCQl0b2tlbnMtPnNhZmVfcHVzaCAoKnRva2VuKTsKKwkg ICAgICBpZiAodG9rZW4tPnR5cGUgPT0gQ1BQX1BSQUdNQSkKKwkJY19wYXJzZXJfY29uc3Vt ZV9wcmFnbWEgKHBhcnNlcik7CisJICAgICAgZWxzZSBpZiAodG9rZW4tPnR5cGUgPT0gQ1BQ X1BSQUdNQV9FT0wpCisJCWNfcGFyc2VyX3NraXBfdG9fcHJhZ21hX2VvbCAocGFyc2VyKTsK KwkgICAgICBlbHNlCisJCWNfcGFyc2VyX2NvbnN1bWVfdG9rZW4gKHBhcnNlcik7CisJICAg ICAgaWYgKHN0b3ApCisJCWJyZWFrOworCSAgICAgIGNvbnRpbnVlOworCSAgICB9CisJICBi cmVhazsKKwl9CisgICAgfQorCisgIC8qIFByb2Nlc3MgZWFjaCBjYW5kaWRhdGUgZGlyZWN0 aXZlLiAgKi8KKyAgYXV0b192ZWM8Y190b2tlbj4gKnRva2VuczsKKyAgaW50IGk7CisgIEZP Ul9FQUNIX1ZFQ19FTFQgKGRpcmVjdGl2ZV90b2tlbnMsIGksIHRva2VucykKKyAgICB7Cisg ICAgICAvKiBNYWtlIHN1cmUgbm90aGluZyB0cmllcyB0byByZWFkIHBhc3QgdGhlIGVuZCBv ZiB0aGUgdG9rZW5zLiAgKi8KKyAgICAgIGNfdG9rZW4gZW9mX3Rva2VuOworICAgICAgbWVt c2V0ICgmZW9mX3Rva2VuLCAwLCBzaXplb2YgKGVvZl90b2tlbikpOworICAgICAgZW9mX3Rv a2VuLnR5cGUgPSBDUFBfRU9GOworICAgICAgdG9rZW5zLT5zYWZlX3B1c2ggKGVvZl90b2tl bik7CisgICAgICB0b2tlbnMtPnNhZmVfcHVzaCAoZW9mX3Rva2VuKTsKKworICAgICAgdW5z aWduZWQgaW50IHRva2Vuc19hdmFpbCA9IHBhcnNlci0+dG9rZW5zX2F2YWlsOworICAgICAg Z2NjX2Fzc2VydCAocGFyc2VyLT50b2tlbnMgPT0gJnBhcnNlci0+dG9rZW5zX2J1ZlswXSk7 CisgICAgICBwYXJzZXItPnRva2VucyA9IHRva2Vucy0+YWRkcmVzcyAoKTsKKyAgICAgIHBh cnNlci0+dG9rZW5zX2F2YWlsID0gdG9rZW5zLT5sZW5ndGggKCk7CisKKyAgICAgIHRyZWUg YmxvY2sgPSBjX2JlZ2luX2NvbXBvdW5kX3N0bXQgKGZhbHNlKTsKKyAgICAgIGNfcGFyc2Vy X29tcF9jb25zdHJ1Y3QgKHBhcnNlciwgaWZfcCk7CisgICAgICBibG9jayA9IGNfZW5kX2Nv bXBvdW5kX3N0bXQgKGxvYywgYmxvY2ssIGZhbHNlKTsKKworICAgICAgdHJlZSB2YXJpYW50 ID0gYnVpbGRfdHJlZV9saXN0IChjdHhzW2ldLCBibG9jayk7CisgICAgICBPTVBfTUVUQURJ UkVDVElWRV9DTEFVU0VTIChyZXQpCisJPSBjaGFpbm9uIChPTVBfTUVUQURJUkVDVElWRV9D TEFVU0VTIChyZXQpLCB2YXJpYW50KTsKKworICAgICAgcGFyc2VyLT50b2tlbnMgPSAmcGFy c2VyLT50b2tlbnNfYnVmWzBdOworICAgICAgcGFyc2VyLT50b2tlbnNfYXZhaWwgPSB0b2tl bnNfYXZhaWw7CisgICAgfQorCisgIGlmIChhbGxfc2VsZWN0b3JzX3Jlc29sdmVhYmxlKQor ICAgIHsKKyAgICAgIHJldCA9IG9tcF9yZXNvbHZlX21ldGFkaXJlY3RpdmUgKHJldCk7Cisg ICAgICBnY2NfYXNzZXJ0IChyZXQgIT0gTlVMTF9UUkVFKTsKKyAgICB9CisgIGFkZF9zdG10 IChyZXQpOworCisgIHJldHVybiByZXQ7Cit9CisKIC8qIE1haW4gZW50cnkgcG9pbnQgdG8g cGFyc2luZyBtb3N0IE9wZW5NUCBwcmFnbWFzLiAgKi8KIAogc3RhdGljIHZvaWQKQEAgLTIx Njc2LDYgKzIyMDI4LDExIEBAIGNfcGFyc2VyX29tcF9jb25zdHJ1Y3QgKGNfcGFyc2VyICpw YXJzZXIsIGJvb2wgKmlmX3ApCiAgICAgICBzdHJjcHkgKHBfbmFtZSwgIiNwcmFnbWEgb21w Iik7CiAgICAgICBzdG10ID0gY19wYXJzZXJfb21wX21hc3RlciAobG9jLCBwYXJzZXIsIHBf bmFtZSwgbWFzaywgTlVMTCwgaWZfcCk7CiAgICAgICBicmVhazsKKyAgICBjYXNlIFBSQUdN QV9PTVBfTUVUQURJUkVDVElWRToKKyAgICAgIHN0cmNweSAocF9uYW1lLCAiI3ByYWdtYSBv bXAiKTsKKyAgICAgIHN0bXQgPSBjX3BhcnNlcl9vbXBfbWV0YWRpcmVjdGl2ZSAobG9jLCBw YXJzZXIsIHBfbmFtZSwgbWFzaywgTlVMTCwKKwkJCQkJIGlmX3AsIGZhbHNlKTsKKyAgICAg IGJyZWFrOwogICAgIGNhc2UgUFJBR01BX09NUF9QQVJBTExFTDoKICAgICAgIHN0cmNweSAo cF9uYW1lLCAiI3ByYWdtYSBvbXAiKTsKICAgICAgIHN0bXQgPSBjX3BhcnNlcl9vbXBfcGFy YWxsZWwgKGxvYywgcGFyc2VyLCBwX25hbWUsIG1hc2ssIE5VTEwsIGlmX3ApOwpAQCAtMjE3 MTMsNyArMjIwNzAsNiBAQCBjX3BhcnNlcl9vbXBfY29uc3RydWN0IChjX3BhcnNlciAqcGFy c2VyLCBib29sICppZl9wKQogICAgIGdjY19hc3NlcnQgKEVYUFJfTE9DQVRJT04gKHN0bXQp ICE9IFVOS05PV05fTE9DQVRJT04pOwogfQogCi0KIC8qIE9wZW5NUCAyLjU6CiAgICAjIHBy YWdtYSBvbXAgdGhyZWFkcHJpdmF0ZSAodmFyaWFibGUtbGlzdCkgKi8KIApkaWZmIC0tZ2l0 IGEvZ2NjL2NwL3BhcnNlci5jIGIvZ2NjL2NwL3BhcnNlci5jCmluZGV4IGYzNTAzYjEzYTVh Li5lMjU4NGMxODU3MSAxMDA2NDQKLS0tIGEvZ2NjL2NwL3BhcnNlci5jCisrKyBiL2djYy9j cC9wYXJzZXIuYwpAQCAtNDM1NDMsNiArNDM1NDMsMzIgQEAgY3BfcGFyc2VyX29tcF9lbmRf ZGVjbGFyZV90YXJnZXQgKGNwX3BhcnNlciAqcGFyc2VyLCBjcF90b2tlbiAqcHJhZ21hX3Rv aykKICAgICBzY29wZV9jaGFpbi0+b21wX2RlY2xhcmVfdGFyZ2V0X2F0dHJpYnV0ZS0tOwog fQogCitzdGF0aWMgdm9pZAorY3BfcGFyc2VyX29tcF9lbmQgKGNwX3BhcnNlciAqcGFyc2Vy LCBjcF90b2tlbiAqcHJhZ21hX3RvaykKK3sKKyAgY29uc3QgY2hhciAqcCA9ICIiOworICBp ZiAoY3BfbGV4ZXJfbmV4dF90b2tlbl9pcyAocGFyc2VyLT5sZXhlciwgQ1BQX05BTUUpKQor ICAgIHsKKyAgICAgIHRyZWUgaWQgPSBjcF9sZXhlcl9wZWVrX3Rva2VuIChwYXJzZXItPmxl eGVyKS0+dS52YWx1ZTsKKyAgICAgIHAgPSBJREVOVElGSUVSX1BPSU5URVIgKGlkKTsKKyAg ICB9CisgIGlmIChzdHJjbXAgKHAsICJkZWNsYXJlIikgPT0gMCkKKyAgICB7CisgICAgICBj cF9wYXJzZXJfb21wX2VuZF9kZWNsYXJlX3RhcmdldCAocGFyc2VyLCBwcmFnbWFfdG9rKTsK KyAgICAgIHJldHVybjsKKyAgICB9CisgIGVsc2UgaWYgKHN0cmNtcCAocCwgIm1ldGFkaXJl Y3RpdmUiKSA9PSAwKQorICAgIC8qIFRoZSBwcmFnbWEgJ29tcCBlbmQgbWV0YWRpcmVjdGl2 ZScgc2hvdWxkIGhhdmUgYmVlbiBjb25zdW1lZAorICAgICAgIHdoZW4gcHJvY2Vzc2luZyB0 aGUgbWV0YWRpcmVjdGl2ZS4gICovCisgICAgZXJyb3JfYXQgKHByYWdtYV90b2stPmxvY2F0 aW9uLAorCSAgICAgICIlPCNwcmFnbWEgb21wIGVuZCBtZXRhZGlyZWN0aXZlJT4gd2l0aG91 dCBjb3JyZXNwb25kaW5nICIKKwkgICAgICAiJTwjcHJhZ21hIG9tcCBiZWdpbiBtZXRhZGly ZWN0aXZlJT4iKTsKKyAgZWxzZQorICAgIGVycm9yX2F0IChwcmFnbWFfdG9rLT5sb2NhdGlv biwKKwkgICAgICAiZXhwZWN0ZWQgJTxkZWNsYXJlIHRhcmdldCU+IG9yICU8bWV0YWRpcmVj dGl2ZSU+Iik7CisgIGNwX3BhcnNlcl9za2lwX3RvX3ByYWdtYV9lb2wgKHBhcnNlciwgcHJh Z21hX3Rvayk7Cit9CisKIC8qIEhlbHBlciBmdW5jdGlvbiBvZiBjcF9wYXJzZXJfb21wX2Rl Y2xhcmVfcmVkdWN0aW9uLiAgUGFyc2UgdGhlIGNvbWJpbmVyCiAgICBleHByZXNzaW9uIGFu ZCBvcHRpb25hbCBpbml0aWFsaXplciBjbGF1c2Ugb2YKICAgICNwcmFnbWEgb21wIGRlY2xh cmUgcmVkdWN0aW9uLiAgV2Ugc3RvcmUgdGhlIGV4cHJlc3Npb24ocykgYXMKQEAgLTQ1MjU5 LDggKzQ1Mjg1LDggQEAgY3BfcGFyc2VyX3ByYWdtYSAoY3BfcGFyc2VyICpwYXJzZXIsIGVu dW0gcHJhZ21hX2NvbnRleHQgY29udGV4dCwgYm9vbCAqaWZfcCkKICAgICAgIHBvcF9vbXBf cHJpdmF0aXphdGlvbl9jbGF1c2VzIChzdG10KTsKICAgICAgIHJldHVybiByZXQ7CiAKLSAg ICBjYXNlIFBSQUdNQV9PTVBfRU5EX0RFQ0xBUkVfVEFSR0VUOgotICAgICAgY3BfcGFyc2Vy X29tcF9lbmRfZGVjbGFyZV90YXJnZXQgKHBhcnNlciwgcHJhZ21hX3Rvayk7CisgICAgY2Fz ZSBQUkFHTUFfT01QX0VORDoKKyAgICAgIGNwX3BhcnNlcl9vbXBfZW5kIChwYXJzZXIsIHBy YWdtYV90b2spOwogICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY2FzZSBQUkFHTUFfT01Q X1NDQU46CmRpZmYgLS1naXQgYS9nY2MvZ2ltcGxlLWxvdy5jIGIvZ2NjL2dpbXBsZS1sb3cu YwppbmRleCBmYTdkNGRlMzBjMC4uYjY4YjBjYmIwNmMgMTAwNjQ0Ci0tLSBhL2djYy9naW1w bGUtbG93LmMKKysrIGIvZ2NjL2dpbXBsZS1sb3cuYwpAQCAtMjM0LDYgKzIzNCwzOSBAQCBs b3dlcl9vbXBfZGlyZWN0aXZlIChnaW1wbGVfc3RtdF9pdGVyYXRvciAqZ3NpLCBzdHJ1Y3Qg bG93ZXJfZGF0YSAqZGF0YSkKICAgZ3NpX25leHQgKGdzaSk7CiB9CiAKKy8qIExvd2VyIHRo ZSBPcGVuTVAgbWV0YWRpcmVjdGl2ZSBzdGF0ZW1lbnQgcG9pbnRlZCBieSBHU0kuICAqLwor CitzdGF0aWMgdm9pZAorbG93ZXJfb21wX21ldGFkaXJlY3RpdmUgKGdpbXBsZV9zdG10X2l0 ZXJhdG9yICpnc2ksIHN0cnVjdCBsb3dlcl9kYXRhICpkYXRhKQoreworICBnaW1wbGUgKnN0 bXQgPSBnc2lfc3RtdCAoKmdzaSk7CisgIGdpbXBsZSAqYm9keSA9IGdpbXBsZV9vbXBfbWV0 YWRpcmVjdGl2ZV9ib2RpZXMgKHN0bXQpOworICB0cmVlIHN1Y2NfbGFiZWwgPSBjcmVhdGVf YXJ0aWZpY2lhbF9sYWJlbCAoVU5LTk9XTl9MT0NBVElPTik7CisgIHVuc2lnbmVkIGk7CisK KyAgZm9yIChpID0gMDsgaSA8IGdpbXBsZV9vbXBfbWV0YWRpcmVjdGl2ZV9udW1fY2xhdXNl cyAoc3RtdCk7IGkrKykKKyAgICB7CisgICAgICB0cmVlIGxhYmVsID0gY3JlYXRlX2FydGlm aWNpYWxfbGFiZWwgKFVOS05PV05fTE9DQVRJT04pOworICAgICAgZ2ltcGxlICpnID0gZ2lt cGxlX2J1aWxkX2xhYmVsIChsYWJlbCk7CisKKyAgICAgIGdzaV9pbnNlcnRfYWZ0ZXIgKGdz aSwgZywgR1NJX0NPTlRJTlVFX0xJTktJTkcpOworICAgICAgbG93ZXJfc2VxdWVuY2UgKGdp bXBsZV9vbXBfYm9keV9wdHIgKGJvZHkpLCBkYXRhKTsKKyAgICAgIGdzaV9pbnNlcnRfc2Vx X2FmdGVyIChnc2ksIGdpbXBsZV9vbXBfYm9keSAoYm9keSksIEdTSV9DT05USU5VRV9MSU5L SU5HKTsKKyAgICAgIGdzaV9pbnNlcnRfYWZ0ZXIgKGdzaSwgZ2ltcGxlX2J1aWxkX2dvdG8g KHN1Y2NfbGFiZWwpLAorCQkJR1NJX0NPTlRJTlVFX0xJTktJTkcpOworICAgICAgZ2ltcGxl X29tcF9tZXRhZGlyZWN0aXZlX3NldF9sYWJlbCAoc3RtdCwgaSwgbGFiZWwpOworCisgICAg ICBib2R5ID0gYm9keS0+bmV4dDsKKyAgICB9CisKKyAgZ3NpX2luc2VydF9hZnRlciAoZ3Np LCBnaW1wbGVfYnVpbGRfbGFiZWwgKHN1Y2NfbGFiZWwpLAorCQkgICAgR1NJX0NPTlRJTlVF X0xJTktJTkcpOworICBnaW1wbGVfb21wX21ldGFkaXJlY3RpdmVfc2V0X3N1Y2NfbGFiZWwg KHN0bXQsIHN1Y2NfbGFiZWwpOworICBnaW1wbGVfb21wX21ldGFkaXJlY3RpdmVfc2V0X2Jv ZGllcyAoc3RtdCwgTlVMTCk7CisKKyAgZ3NpX25leHQgKGdzaSk7Cit9CisKIAogLyogTG93 ZXIgc3RhdGVtZW50IEdTSS4gIERBVEEgaXMgcGFzc2VkIHRocm91Z2ggdGhlIHJlY3Vyc2lv bi4gIFdlIHRyeSB0bwogICAgdHJhY2sgdGhlIGZhbGx0aHJ1bmVzcyBvZiBzdGF0ZW1lbnRz IGFuZCBnZXQgcmlkIG9mIHVucmVhY2hhYmxlIHJldHVybgpAQCAtMzk4LDYgKzQzMSwxMiBA QCBsb3dlcl9zdG10IChnaW1wbGVfc3RtdF9pdGVyYXRvciAqZ3NpLCBzdHJ1Y3QgbG93ZXJf ZGF0YSAqZGF0YSkKICAgICAgIGRhdGEtPmNhbm5vdF9mYWxsdGhydSA9IGZhbHNlOwogICAg ICAgcmV0dXJuOwogCisgICAgY2FzZSBHSU1QTEVfT01QX01FVEFESVJFQ1RJVkU6CisgICAg ICBkYXRhLT5jYW5ub3RfZmFsbHRocnUgPSBmYWxzZTsKKyAgICAgIGxvd2VyX29tcF9tZXRh ZGlyZWN0aXZlIChnc2ksIGRhdGEpOworICAgICAgZGF0YS0+Y2Fubm90X2ZhbGx0aHJ1ID0g ZmFsc2U7CisgICAgICByZXR1cm47CisKICAgICBjYXNlIEdJTVBMRV9UUkFOU0FDVElPTjoK ICAgICAgIGxvd2VyX3NlcXVlbmNlIChnaW1wbGVfdHJhbnNhY3Rpb25fYm9keV9wdHIgKAog CQkJYXNfYSA8Z3RyYW5zYWN0aW9uICo+IChzdG10KSksCmRpZmYgLS1naXQgYS9nY2MvZ2lt cGxlLXByZXR0eS1wcmludC5jIGIvZ2NjL2dpbXBsZS1wcmV0dHktcHJpbnQuYwppbmRleCAw ZWYwMWU2NDIwYi4uZTdhNGJhMTE3MWIgMTAwNjQ0Ci0tLSBhL2djYy9naW1wbGUtcHJldHR5 LXByaW50LmMKKysrIGIvZ2NjL2dpbXBsZS1wcmV0dHktcHJpbnQuYwpAQCAtMTk3OCw2ICsx OTc4LDY0IEBAIGR1bXBfZ2ltcGxlX29tcF9yZXR1cm4gKHByZXR0eV9wcmludGVyICpidWZm ZXIsIGNvbnN0IGdpbXBsZSAqZ3MsIGludCBzcGMsCiAgICAgfQogfQogCisvKiBEdW1wIGEg R0lNUExFX09NUF9NRVRBRElSRUNUSVZFIHR1cGxlIG9uIHRoZSBwcmV0dHlfcHJpbnRlciBC VUZGRVIuICAqLworCitzdGF0aWMgdm9pZAorZHVtcF9naW1wbGVfb21wX21ldGFkaXJlY3Rp dmUgKHByZXR0eV9wcmludGVyICpidWZmZXIsIGNvbnN0IGdpbXBsZSAqZ3MsCisJCQkgICAg ICAgaW50IHNwYywgZHVtcF9mbGFnc190IGZsYWdzKQoreworICBpZiAoZmxhZ3MgJiBUREZf UkFXKQorICAgIHsKKyAgICAgIGR1bXBfZ2ltcGxlX2ZtdCAoYnVmZmVyLCBzcGMsIGZsYWdz LCAiJUcgPCUrQk9EWSA8JVM+ID4iLCBncywKKwkJICAgICAgIGdpbXBsZV9vbXBfYm9keSAo Z3MpKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBwcF9zdHJpbmcgKGJ1ZmZlciwg IiNwcmFnbWEgb21wIG1ldGFkaXJlY3RpdmUiKTsKKyAgICAgIG5ld2xpbmVfYW5kX2luZGVu dCAoYnVmZmVyLCBzcGMgKyAyKTsKKworICAgICAgZ2ltcGxlICpib2R5ID0gZ2ltcGxlX29t cF9tZXRhZGlyZWN0aXZlX2JvZGllcyAoZ3MpOworICAgICAgYm9vbCBoYXNfYm9kaWVzX3Ag PSBib2R5ICE9IE5VTEw7CisgICAgICB1bnNpZ25lZCBudW1fY2xhdXNlcyA9IGdpbXBsZV9v bXBfbWV0YWRpcmVjdGl2ZV9udW1fY2xhdXNlcyAoZ3MpOworCisgICAgICBmb3IgKHVuc2ln bmVkIGkgPSAwOyBpIDwgbnVtX2NsYXVzZXM7IGkrKykKKwl7CisJICB0cmVlIHNlbGVjdG9y ID0gZ2ltcGxlX29tcF9tZXRhZGlyZWN0aXZlX3NlbGVjdG9yIChncywgaSk7CisKKwkgIGlm IChzZWxlY3RvciA9PSBOVUxMX1RSRUUpCisJICAgIHBwX3N0cmluZyAoYnVmZmVyLCAiZGVm YXVsdDoiKTsKKwkgIGVsc2UKKwkgICAgeworCSAgICAgIHBwX3N0cmluZyAoYnVmZmVyLCAi d2hlbiAoIik7CisJICAgICAgZHVtcF9nZW5lcmljX25vZGUgKGJ1ZmZlciwgc2VsZWN0b3Is IHNwYywgZmxhZ3MsIGZhbHNlKTsKKwkgICAgICBwcF9zdHJpbmcgKGJ1ZmZlciwgIik6Iik7 CisJICAgIH0KKworCSAgaWYgKGhhc19ib2RpZXNfcCkKKwkgICAgeworCSAgICAgIG5ld2xp bmVfYW5kX2luZGVudCAoYnVmZmVyLCBzcGMgKyA0KTsKKwkgICAgICBwcF9sZWZ0X2JyYWNl IChidWZmZXIpOworCSAgICAgIHBwX25ld2xpbmUgKGJ1ZmZlcik7CisJICAgICAgZHVtcF9n aW1wbGVfc2VxIChidWZmZXIsIGdpbXBsZV9vbXBfYm9keSAoYm9keSksIHNwYyArIDYsIGZs YWdzKTsKKwkgICAgICBuZXdsaW5lX2FuZF9pbmRlbnQgKGJ1ZmZlciwgc3BjICsgNCk7CisJ ICAgICAgcHBfcmlnaHRfYnJhY2UgKGJ1ZmZlcik7CisKKwkgICAgICBib2R5ID0gYm9keS0+ bmV4dDsKKwkgICAgICBpZiAoYm9keSkKKwkJbmV3bGluZV9hbmRfaW5kZW50IChidWZmZXIs IHNwYyArIDIpOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICB0cmVlIGxhYmVs ID0gZ2ltcGxlX29tcF9tZXRhZGlyZWN0aXZlX2xhYmVsIChncywgaSk7CisJICAgICAgcHBf c3RyaW5nIChidWZmZXIsICIgIik7CisJICAgICAgZHVtcF9nZW5lcmljX25vZGUgKGJ1ZmZl ciwgbGFiZWwsIHNwYywgZmxhZ3MsIGZhbHNlKTsKKwkgICAgICBpZiAoaSAhPSBudW1fY2xh dXNlcyAtIDEpCisJCW5ld2xpbmVfYW5kX2luZGVudCAoYnVmZmVyLCBzcGMgKyAyKTsKKwkg ICAgfQorCX0KKyAgICB9Cit9CisKIC8qIER1bXAgYSBHSU1QTEVfVFJBTlNBQ1RJT04gdHVw bGUgb24gdGhlIHByZXR0eV9wcmludGVyIEJVRkZFUi4gICovCiAKIHN0YXRpYyB2b2lkCkBA IC0yNzI5LDYgKzI3ODcsMTIgQEAgcHBfZ2ltcGxlX3N0bXRfMSAocHJldHR5X3ByaW50ZXIg KmJ1ZmZlciwgY29uc3QgZ2ltcGxlICpncywgaW50IHNwYywKIAkJCQlmbGFncyk7CiAgICAg ICBicmVhazsKIAorICAgIGNhc2UgR0lNUExFX09NUF9NRVRBRElSRUNUSVZFOgorICAgICAg ZHVtcF9naW1wbGVfb21wX21ldGFkaXJlY3RpdmUgKGJ1ZmZlciwKKwkJCQkgICAgIGFzX2Eg PGNvbnN0IGdvbXBfbWV0YWRpcmVjdGl2ZSAqPiAoZ3MpLAorCQkJCSAgICAgc3BjLCBmbGFn cyk7CisgICAgICBicmVhazsKKwogICAgIGNhc2UgR0lNUExFX0NBVENIOgogICAgICAgZHVt cF9naW1wbGVfY2F0Y2ggKGJ1ZmZlciwgYXNfYSA8Y29uc3QgZ2NhdGNoICo+IChncyksIHNw YywgZmxhZ3MpOwogICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9nY2MvZ2ltcGxlLXN0cmVh bWVyLWluLmMgYi9nY2MvZ2ltcGxlLXN0cmVhbWVyLWluLmMKaW5kZXggMWM5NzlmNDM4YTUu LjY2YmJjMmU4ZTBhIDEwMDY0NAotLS0gYS9nY2MvZ2ltcGxlLXN0cmVhbWVyLWluLmMKKysr IGIvZ2NjL2dpbXBsZS1zdHJlYW1lci1pbi5jCkBAIC0xNTEsNiArMTUxLDcgQEAgaW5wdXRf Z2ltcGxlX3N0bXQgKGNsYXNzIGx0b19pbnB1dF9ibG9jayAqaWIsIGNsYXNzIGRhdGFfaW4g KmRhdGFfaW4sCiAgICAgY2FzZSBHSU1QTEVfQ09ORDoKICAgICBjYXNlIEdJTVBMRV9HT1RP OgogICAgIGNhc2UgR0lNUExFX0RFQlVHOgorICAgIGNhc2UgR0lNUExFX09NUF9NRVRBRElS RUNUSVZFOgogICAgICAgZm9yIChpID0gMDsgaSA8IG51bV9vcHM7IGkrKykKIAl7CiAJICB0 cmVlICpvcHAsIG9wID0gc3RyZWFtX3JlYWRfdHJlZSAoaWIsIGRhdGFfaW4pOwpAQCAtMTg4 LDYgKzE4OSwxMCBAQCBpbnB1dF9naW1wbGVfc3RtdCAoY2xhc3MgbHRvX2lucHV0X2Jsb2Nr ICppYiwgY2xhc3MgZGF0YV9pbiAqZGF0YV9pbiwKIAkgIGVsc2UKIAkgICAgZ2ltcGxlX2Nh bGxfc2V0X2ZudHlwZSAoY2FsbF9zdG10LCBzdHJlYW1fcmVhZF90cmVlIChpYiwgZGF0YV9p bikpOwogCX0KKyAgICAgIGlmIChnb21wX21ldGFkaXJlY3RpdmUgKm1ldGFkaXJlY3RpdmVf c3RtdAorCSAgICA9IGR5bl9jYXN0IDxnb21wX21ldGFkaXJlY3RpdmUqPiAoc3RtdCkpCisJ Z2ltcGxlX29tcF9tZXRhZGlyZWN0aXZlX3NldF9zdWNjX2xhYmVsIChtZXRhZGlyZWN0aXZl X3N0bXQsCisJCQkJCQkgc3RyZWFtX3JlYWRfdHJlZSAoaWIsIGRhdGFfaW4pKTsKICAgICAg IGJyZWFrOwogCiAgICAgY2FzZSBHSU1QTEVfTk9QOgpkaWZmIC0tZ2l0IGEvZ2NjL2dpbXBs ZS1zdHJlYW1lci1vdXQuYyBiL2djYy9naW1wbGUtc3RyZWFtZXItb3V0LmMKaW5kZXggZmNi ZjkyMzAwZDQuLmYwZGRkNmE4MWEzIDEwMDY0NAotLS0gYS9nY2MvZ2ltcGxlLXN0cmVhbWVy LW91dC5jCisrKyBiL2djYy9naW1wbGUtc3RyZWFtZXItb3V0LmMKQEAgLTEyNyw2ICsxMjcs NyBAQCBvdXRwdXRfZ2ltcGxlX3N0bXQgKHN0cnVjdCBvdXRwdXRfYmxvY2sgKm9iLCBzdHJ1 Y3QgZnVuY3Rpb24gKmZuLCBnaW1wbGUgKnN0bXQpCiAgICAgY2FzZSBHSU1QTEVfQ09ORDoK ICAgICBjYXNlIEdJTVBMRV9HT1RPOgogICAgIGNhc2UgR0lNUExFX0RFQlVHOgorICAgIGNh c2UgR0lNUExFX09NUF9NRVRBRElSRUNUSVZFOgogICAgICAgZm9yIChpID0gMDsgaSA8IGdp bXBsZV9udW1fb3BzIChzdG10KTsgaSsrKQogCXsKIAkgIHRyZWUgb3AgPSBnaW1wbGVfb3Ag KHN0bXQsIGkpOwpAQCAtMTY5LDYgKzE3MCw4IEBAIG91dHB1dF9naW1wbGVfc3RtdCAoc3Ry dWN0IG91dHB1dF9ibG9jayAqb2IsIHN0cnVjdCBmdW5jdGlvbiAqZm4sIGdpbXBsZSAqc3Rt dCkKIAkgIGVsc2UKIAkgICAgc3RyZWFtX3dyaXRlX3RyZWUgKG9iLCBnaW1wbGVfY2FsbF9m bnR5cGUgKHN0bXQpLCB0cnVlKTsKIAl9CisgICAgICBpZiAoZ2ltcGxlX2NvZGUgKHN0bXQp ID09IEdJTVBMRV9PTVBfTUVUQURJUkVDVElWRSkKKwlzdHJlYW1fd3JpdGVfdHJlZSAob2Is IGdpbXBsZV9vbXBfbWV0YWRpcmVjdGl2ZV9zdWNjX2xhYmVsIChzdG10KSwgdHJ1ZSk7CiAg ICAgICBicmVhazsKIAogICAgIGNhc2UgR0lNUExFX05PUDoKZGlmZiAtLWdpdCBhL2djYy9n aW1wbGUtd2Fsay5jIGIvZ2NjL2dpbXBsZS13YWxrLmMKaW5kZXggZTRhNTVmMWVlYjYuLmFk N2UxYzA4MzllIDEwMDY0NAotLS0gYS9nY2MvZ2ltcGxlLXdhbGsuYworKysgYi9nY2MvZ2lt cGxlLXdhbGsuYwpAQCAtNjc0LDYgKzY3NCwyMSBAQCB3YWxrX2dpbXBsZV9zdG10IChnaW1w bGVfc3RtdF9pdGVyYXRvciAqZ3NpLCB3YWxrX3N0bXRfZm4gY2FsbGJhY2tfc3RtdCwKIAly ZXR1cm4gd2ktPmNhbGxiYWNrX3Jlc3VsdDsKICAgICAgIGJyZWFrOwogCisgICAgY2FzZSBH SU1QTEVfT01QX01FVEFESVJFQ1RJVkU6CisgICAgICB7CisJZ2ltcGxlICpib2R5ID0gZ2lt cGxlX29tcF9tZXRhZGlyZWN0aXZlX2JvZGllcyAoc3RtdCk7CisKKwl3aGlsZSAoYm9keSkK KwkgIHsKKwkgICAgcmV0ID0gd2Fsa19naW1wbGVfc2VxX21vZCAoZ2ltcGxlX29tcF9ib2R5 X3B0ciAoYm9keSksCisJCQkJICAgICAgIGNhbGxiYWNrX3N0bXQsIGNhbGxiYWNrX29wLCB3 aSk7CisJICAgIGlmIChyZXQpCisJICAgICAgcmV0dXJuIHdpLT5jYWxsYmFja19yZXN1bHQ7 CisJICAgIGJvZHkgPSBib2R5LT5uZXh0OworCSAgfQorICAgICAgfQorICAgICAgYnJlYWs7 CisKICAgICBjYXNlIEdJTVBMRV9XSVRIX0NMRUFOVVBfRVhQUjoKICAgICAgIHJldCA9IHdh bGtfZ2ltcGxlX3NlcV9tb2QgKGdpbXBsZV93Y2VfY2xlYW51cF9wdHIgKHN0bXQpLCBjYWxs YmFja19zdG10LAogCQkJICAgICBjYWxsYmFja19vcCwgd2kpOwpkaWZmIC0tZ2l0IGEvZ2Nj L2dpbXBsZS5jIGIvZ2NjL2dpbXBsZS5jCmluZGV4IGYxMDQ0ZTljNjMwLi5mOTQwMDlkMzlm MyAxMDA2NDQKLS0tIGEvZ2NjL2dpbXBsZS5jCisrKyBiL2djYy9naW1wbGUuYwpAQCAtMTIz NCw2ICsxMjM0LDI4IEBAIGdpbXBsZV9idWlsZF9vbXBfYXRvbWljX3N0b3JlICh0cmVlIHZh bCwgZW51bSBvbXBfbWVtb3J5X29yZGVyIG1vKQogICByZXR1cm4gcDsKIH0KIAorLyogQnVp bGQgYSBHSU1QTEVfT01QX01FVEFESVJFQ1RJVkUgc3RhdGVtZW50LiAgKi8KKworZ29tcF9t ZXRhZGlyZWN0aXZlICoKK2dpbXBsZV9idWlsZF9vbXBfbWV0YWRpcmVjdGl2ZSAoaW50IGNs YXVzZV9jb3VudCkKK3sKKyAgZ29tcF9tZXRhZGlyZWN0aXZlICpwCisgICAgPSBhc19hIDxn b21wX21ldGFkaXJlY3RpdmUgKj4gKGdpbXBsZV9hbGxvYyAoR0lNUExFX09NUF9NRVRBRElS RUNUSVZFLAorCQkJCQkJIGNsYXVzZV9jb3VudCAqIDIpKTsKKyAgZ2ltcGxlX29tcF9tZXRh ZGlyZWN0aXZlX3NldF9ib2RpZXMgKHAsIE5VTEwpOworICByZXR1cm4gcDsKK30KKworCitn b21wX21ldGFkaXJlY3RpdmVfYm9keSAqCitnaW1wbGVfYnVpbGRfb21wX21ldGFkaXJlY3Rp dmVfYm9keSAoZ2ltcGxlX3NlcSBib2R5KQoreworICBnb21wX21ldGFkaXJlY3RpdmVfYm9k eSAqbV9ib2R5ID0gYXNfYSA8Z29tcF9tZXRhZGlyZWN0aXZlX2JvZHkgKj4KKyAgICAoZ2lt cGxlX2FsbG9jIChHSU1QTEVfT01QX01FVEFESVJFQ1RJVkVfQk9EWSwgMCkpOworICBnaW1w bGVfb21wX3NldF9ib2R5IChtX2JvZHksIGJvZHkpOworICByZXR1cm4gbV9ib2R5OworfQor CiAvKiBCdWlsZCBhIEdJTVBMRV9UUkFOU0FDVElPTiBzdGF0ZW1lbnQuICAqLwogCiBndHJh bnNhY3Rpb24gKgpkaWZmIC0tZ2l0IGEvZ2NjL2dpbXBsZS5kZWYgYi9nY2MvZ2ltcGxlLmRl ZgppbmRleCAwYWMwY2Y3MmJmYS4uMWRhNjhjMTZhOTEgMTAwNjQ0Ci0tLSBhL2djYy9naW1w bGUuZGVmCisrKyBiL2djYy9naW1wbGUuZGVmCkBAIC0zODQsNiArMzg0LDEzIEBAIERFRkdT Q09ERShHSU1QTEVfT01QX1RFQU1TLCAiZ2ltcGxlX29tcF90ZWFtcyIsIEdTU19PTVBfUEFS QUxMRUxfTEFZT1VUKQogICAgQ0xBVVNFUyBpcyBhbiBPTVBfQ0xBVVNFIGNoYWluIGhvbGRp bmcgdGhlIGFzc29jaWF0ZWQgY2xhdXNlcy4gICovCiBERUZHU0NPREUoR0lNUExFX09NUF9P UkRFUkVELCAiZ2ltcGxlX29tcF9vcmRlcmVkIiwgR1NTX09NUF9TSU5HTEVfTEFZT1VUKQog CisvKiBHSU1QTEVfT01QX01FVEFESVJFQ1RJVkUgcmVwcmVzZW50cyAjcHJhZ21hIG9tcCBt ZXRhZGlyZWN0aXZlLiAgKi8KK0RFRkdTQ09ERShHSU1QTEVfT01QX01FVEFESVJFQ1RJVkUs ICJnaW1wbGVfb21wX21ldGFkaXJlY3RpdmUiLAorCSAgR1NTX09NUF9NRVRBRElSRUNUSVZF KQorCitERUZHU0NPREUoR0lNUExFX09NUF9NRVRBRElSRUNUSVZFX0JPRFksICJnaW1wbGVf b21wX21ldGFkaXJlY3RpdmVfYm9keSIsCisJICBHU1NfT01QX01FVEFESVJFQ1RJVkVfQk9E WSkKKwogLyogR0lNUExFX1BSRURJQ1QgPFBSRURJQ1QsIE9VVENPTUU+IHNwZWNpZmllcyBh IGhpbnQgZm9yIGJyYW5jaCBwcmVkaWN0aW9uLgogCiAgICBQUkVESUNUIGlzIG9uZSBvZiB0 aGUgcHJlZGljdG9ycyBmcm9tIHByZWRpY3QuZGVmLgpkaWZmIC0tZ2l0IGEvZ2NjL2dpbXBs ZS5oIGIvZ2NjL2dpbXBsZS5oCmluZGV4IDkxYjkyYjRhNGQxLi5jNTI4OGFmMmJkNyAxMDA2 NDQKLS0tIGEvZ2NjL2dpbXBsZS5oCisrKyBiL2djYy9naW1wbGUuaApAQCAtODIyLDYgKzgy MiwyOSBAQCBzdHJ1Y3QgR1RZKCh0YWcoIkdTU19PTVBfQVRPTUlDX1NUT1JFX0xBWU9VVCIp KSkKICAgICAgICAgIHN0bXQtPmNvZGUgPT0gR0lNUExFX09NUF9SRVRVUk4uICAqLwogfTsK IAorc3RydWN0IEdUWSgodGFnKCJHU1NfT01QX01FVEFESVJFQ1RJVkVfQk9EWSIpKSkKKyAg Z29tcF9tZXRhZGlyZWN0aXZlX2JvZHkgOiBwdWJsaWMgZ2ltcGxlX3N0YXRlbWVudF9vbXBf c2luZ2xlX2xheW91dAoreworICAgIC8qIE5vIGV4dHJhIGZpZWxkczsgYWRkcyBpbnZhcmlh bnQ6CisgICAgICAgc3RtdC0+Y29kZSA9PSBHSU1QTEVfT01QX01FVEFESVJFQ1RJVkVfQk9E WS4gICovCit9OworCitzdHJ1Y3QgR1RZKCh0YWcoIkdTU19PTVBfTUVUQURJUkVDVElWRSIp KSkKKyAgZ29tcF9tZXRhZGlyZWN0aXZlIDogcHVibGljIGdpbXBsZV9zdGF0ZW1lbnRfd2l0 aF9vcHNfYmFzZQoreworICAvKiBbIFdPUkQgMS03IF0gOiBiYXNlIGNsYXNzICovCisKKyAg LyogWyBXT1JEIDggXSAgKi8KKyAgZ29tcF9tZXRhZGlyZWN0aXZlX2JvZHkgKmJvZGllczsK KworICAvKiBbIFdPUkQgOSBdIDogYSBsYWJlbCBhZnRlciB0aGUgbWV0YWRpcmVjdGl2ZQor ICAgICBhbmQgYWxsIHRoZSBjYW5kaWRhdGUgYm9kaWVzICAqLworICB0cmVlIHN1Y2NfbGFi ZWw7CisKKyAgLyogWyBXT1JEIDEwIF0gOiBvcGVyYW5kIHZlY3Rvci4gICovCisgIHRyZWUg R1RZKChsZW5ndGggKCIlaC5udW1fb3BzIikpKSBvcFsxXTsKK307CisKIC8qIEdJTVBMRV9U UkFOU0FDVElPTi4gICovCiAKIC8qIEJpdHMgdG8gYmUgc3RvcmVkIGluIHRoZSBHSU1QTEVf VFJBTlNBQ1RJT04gc3ViY29kZS4gICovCkBAIC0xMjMzLDYgKzEyNTYsMjIgQEAgaXNfYV9o ZWxwZXIgPGdvbXBfdGFzayAqPjo6dGVzdCAoZ2ltcGxlICpncykKICAgcmV0dXJuIGdzLT5j b2RlID09IEdJTVBMRV9PTVBfVEFTSzsKIH0KIAordGVtcGxhdGUgPD4KK3RlbXBsYXRlIDw+ CitpbmxpbmUgYm9vbAoraXNfYV9oZWxwZXIgPGdvbXBfbWV0YWRpcmVjdGl2ZSAqPjo6dGVz dCAoZ2ltcGxlICpncykKK3sKKyAgcmV0dXJuIGdzLT5jb2RlID09IEdJTVBMRV9PTVBfTUVU QURJUkVDVElWRTsKK30KKwordGVtcGxhdGUgPD4KK3RlbXBsYXRlIDw+CitpbmxpbmUgYm9v bAoraXNfYV9oZWxwZXIgPGdvbXBfbWV0YWRpcmVjdGl2ZV9ib2R5ICo+Ojp0ZXN0IChnaW1w bGUgKmdzKQoreworICByZXR1cm4gZ3MtPmNvZGUgPT0gR0lNUExFX09NUF9NRVRBRElSRUNU SVZFX0JPRFk7Cit9CisKIHRlbXBsYXRlIDw+CiB0ZW1wbGF0ZSA8PgogaW5saW5lIGJvb2wK QEAgLTE0NzUsNiArMTUxNCwyMiBAQCBpc19hX2hlbHBlciA8Y29uc3QgZ29tcF90YXNrICo+ Ojp0ZXN0IChjb25zdCBnaW1wbGUgKmdzKQogICByZXR1cm4gZ3MtPmNvZGUgPT0gR0lNUExF X09NUF9UQVNLOwogfQogCit0ZW1wbGF0ZSA8PgordGVtcGxhdGUgPD4KK2lubGluZSBib29s Citpc19hX2hlbHBlciA8Y29uc3QgZ29tcF9tZXRhZGlyZWN0aXZlICo+Ojp0ZXN0IChjb25z dCBnaW1wbGUgKmdzKQoreworICByZXR1cm4gZ3MtPmNvZGUgPT0gR0lNUExFX09NUF9NRVRB RElSRUNUSVZFOworfQorCit0ZW1wbGF0ZSA8PgordGVtcGxhdGUgPD4KK2lubGluZSBib29s Citpc19hX2hlbHBlciA8Y29uc3QgZ29tcF9tZXRhZGlyZWN0aXZlX2JvZHkgKj46OnRlc3Qg KGNvbnN0IGdpbXBsZSAqZ3MpCit7CisgIHJldHVybiBncy0+Y29kZSA9PSBHSU1QTEVfT01Q X01FVEFESVJFQ1RJVkVfQk9EWTsKK30KKwogdGVtcGxhdGUgPD4KIHRlbXBsYXRlIDw+CiBp bmxpbmUgYm9vbApAQCAtMTU3Miw2ICsxNjI3LDggQEAgZ29tcF90ZWFtcyAqZ2ltcGxlX2J1 aWxkX29tcF90ZWFtcyAoZ2ltcGxlX3NlcSwgdHJlZSk7CiBnb21wX2F0b21pY19sb2FkICpn aW1wbGVfYnVpbGRfb21wX2F0b21pY19sb2FkICh0cmVlLCB0cmVlLAogCQkJCQkJZW51bSBv bXBfbWVtb3J5X29yZGVyKTsKIGdvbXBfYXRvbWljX3N0b3JlICpnaW1wbGVfYnVpbGRfb21w X2F0b21pY19zdG9yZSAodHJlZSwgZW51bSBvbXBfbWVtb3J5X29yZGVyKTsKK2dvbXBfbWV0 YWRpcmVjdGl2ZSAqZ2ltcGxlX2J1aWxkX29tcF9tZXRhZGlyZWN0aXZlIChpbnQgY2xhdXNl X2NvdW50KTsKK2dvbXBfbWV0YWRpcmVjdGl2ZV9ib2R5ICpnaW1wbGVfYnVpbGRfb21wX21l dGFkaXJlY3RpdmVfYm9keSAoZ2ltcGxlX3NlcSBib2R5KTsKIGd0cmFuc2FjdGlvbiAqZ2lt cGxlX2J1aWxkX3RyYW5zYWN0aW9uIChnaW1wbGVfc2VxKTsKIGV4dGVybiB2b2lkIGdpbXBs ZV9zZXFfYWRkX3N0bXQgKGdpbXBsZV9zZXEgKiwgZ2ltcGxlICopOwogZXh0ZXJuIHZvaWQg Z2ltcGxlX3NlcV9hZGRfc3RtdF93aXRob3V0X3VwZGF0ZSAoZ2ltcGxlX3NlcSAqLCBnaW1w bGUgKik7CkBAIC0xODI3LDYgKzE4ODQsNyBAQCBnaW1wbGVfaGFzX3N1YnN0YXRlbWVudHMg KGdpbXBsZSAqZykKICAgICBjYXNlIEdJTVBMRV9PTVBfVEFSR0VUOgogICAgIGNhc2UgR0lN UExFX09NUF9URUFNUzoKICAgICBjYXNlIEdJTVBMRV9PTVBfQ1JJVElDQUw6CisgICAgY2Fz ZSBHSU1QTEVfT01QX01FVEFESVJFQ1RJVkU6CiAgICAgY2FzZSBHSU1QTEVfV0lUSF9DTEVB TlVQX0VYUFI6CiAgICAgY2FzZSBHSU1QTEVfVFJBTlNBQ1RJT046CiAgICAgICByZXR1cm4g dHJ1ZTsKQEAgLTI0NzksMTIgKzI1MzcsMjEgQEAgZ2ltcGxlX29wcyAoZ2ltcGxlICpncykK IH0KIAogCisvKiBSZXR1cm4gdHJ1ZSBpZiBHSU1QTEUgc3RhdGVtZW50IEcgaGFzIGFueSBv cGVyYW5kcywgaW5jbHVkaW5nIGFueSB0aGF0CisgICBzaG91bGQgbm90IGJlIHByb2Nlc3Nl ZCBieSB0aGUgU1NBIHBhc3Nlcy4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorZ2ltcGxl X2hhc19vcHNfMSAoY29uc3QgZ2ltcGxlICpnKQoreworICByZXR1cm4gZ2ltcGxlX2hhc19v cHMgKGcpIHx8IGdpbXBsZV9jb2RlIChnKSA9PSBHSU1QTEVfT01QX01FVEFESVJFQ1RJVkU7 Cit9CisKIC8qIFJldHVybiBvcGVyYW5kIEkgZm9yIHN0YXRlbWVudCBHUy4gICovCiAKIHN0 YXRpYyBpbmxpbmUgdHJlZQogZ2ltcGxlX29wIChjb25zdCBnaW1wbGUgKmdzLCB1bnNpZ25l ZCBpKQogewotICBpZiAoZ2ltcGxlX2hhc19vcHMgKGdzKSkKKyAgaWYgKGdpbXBsZV9oYXNf b3BzXzEgKGdzKSkKICAgICB7CiAgICAgICBnY2NfZ2ltcGxlX2NoZWNraW5nX2Fzc2VydCAo aSA8IGdpbXBsZV9udW1fb3BzIChncykpOwogICAgICAgcmV0dXJuIGdpbXBsZV9vcHMgKENP TlNUX0NBU1RfR0lNUExFIChncykpW2ldOwpAQCAtMjQ5OCw3ICsyNTY1LDcgQEAgZ2ltcGxl X29wIChjb25zdCBnaW1wbGUgKmdzLCB1bnNpZ25lZCBpKQogc3RhdGljIGlubGluZSB0cmVl ICoKIGdpbXBsZV9vcF9wdHIgKGdpbXBsZSAqZ3MsIHVuc2lnbmVkIGkpCiB7Ci0gIGlmIChn aW1wbGVfaGFzX29wcyAoZ3MpKQorICBpZiAoZ2ltcGxlX2hhc19vcHNfMSAoZ3MpKQogICAg IHsKICAgICAgIGdjY19naW1wbGVfY2hlY2tpbmdfYXNzZXJ0IChpIDwgZ2ltcGxlX251bV9v cHMgKGdzKSk7CiAgICAgICByZXR1cm4gZ2ltcGxlX29wcyAoZ3MpICsgaTsKQEAgLTI1MTIs NyArMjU3OSw3IEBAIGdpbXBsZV9vcF9wdHIgKGdpbXBsZSAqZ3MsIHVuc2lnbmVkIGkpCiBz dGF0aWMgaW5saW5lIHZvaWQKIGdpbXBsZV9zZXRfb3AgKGdpbXBsZSAqZ3MsIHVuc2lnbmVk IGksIHRyZWUgb3ApCiB7Ci0gIGdjY19naW1wbGVfY2hlY2tpbmdfYXNzZXJ0IChnaW1wbGVf aGFzX29wcyAoZ3MpICYmIGkgPCBnaW1wbGVfbnVtX29wcyAoZ3MpKTsKKyAgZ2NjX2dpbXBs ZV9jaGVja2luZ19hc3NlcnQgKGdpbXBsZV9oYXNfb3BzXzEgKGdzKSAmJiBpIDwgZ2ltcGxl X251bV9vcHMgKGdzKSk7CiAKICAgLyogTm90ZS4gIEl0IG1heSBiZSB0ZW1wdGluZyB0byBh c3NlcnQgdGhhdCBPUCBtYXRjaGVzCiAgICAgIGlzX2dpbXBsZV9vcGVyYW5kLCBidXQgdGhh dCB3b3VsZCBiZSB3cm9uZy4gIERpZmZlcmVudCB0dXBsZXMKQEAgLTYzMzAsNiArNjM5Nyw3 NyBAQCBnaW1wbGVfb21wX2NvbnRpbnVlX3NldF9jb250cm9sX3VzZSAoZ29tcF9jb250aW51 ZSAqY29udF9zdG10LCB0cmVlIHVzZSkKICAgY29udF9zdG10LT5jb250cm9sX3VzZSA9IHVz ZTsKIH0KIAorCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9vbXBfbWV0YWRpcmVjdGl2 ZV9zdWNjX2xhYmVsIChjb25zdCBnaW1wbGUgKmcpCit7CisgIGNvbnN0IGdvbXBfbWV0YWRp cmVjdGl2ZSAqb21wX21ldGFkaXJlY3RpdmUKKyAgICA9IGFzX2EgPGNvbnN0IGdvbXBfbWV0 YWRpcmVjdGl2ZSAqPiAoZyk7CisgIHJldHVybiBvbXBfbWV0YWRpcmVjdGl2ZS0+c3VjY19s YWJlbDsKK30KKworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9vbXBfbWV0YWRpcmVj dGl2ZV9zZXRfc3VjY19sYWJlbCAoZ2ltcGxlICpnLCB0cmVlIHN1Y2NfbGFiZWwpCit7Cisg IGdvbXBfbWV0YWRpcmVjdGl2ZSAqb21wX21ldGFkaXJlY3RpdmUgPSBhc19hIDxnb21wX21l dGFkaXJlY3RpdmUgKj4gKGcpOworICBvbXBfbWV0YWRpcmVjdGl2ZS0+c3VjY19sYWJlbCA9 IHN1Y2NfbGFiZWw7Cit9CisKKworc3RhdGljIGlubGluZSBnb21wX21ldGFkaXJlY3RpdmVf Ym9keSAqCitnaW1wbGVfb21wX21ldGFkaXJlY3RpdmVfYm9kaWVzIChjb25zdCBnaW1wbGUg KmcpCit7CisgIGNvbnN0IGdvbXBfbWV0YWRpcmVjdGl2ZSAqb21wX21ldGFkaXJlY3RpdmUK KyAgICA9IGFzX2EgPGNvbnN0IGdvbXBfbWV0YWRpcmVjdGl2ZSAqPiAoZyk7CisgIHJldHVy biBvbXBfbWV0YWRpcmVjdGl2ZS0+Ym9kaWVzOworfQorCisKK3N0YXRpYyBpbmxpbmUgdm9p ZAorZ2ltcGxlX29tcF9tZXRhZGlyZWN0aXZlX3NldF9ib2RpZXMgKGdpbXBsZSAqZywKKwkJ CQkgICAgIGdvbXBfbWV0YWRpcmVjdGl2ZV9ib2R5ICpib2RpZXMpCit7CisgIGdvbXBfbWV0 YWRpcmVjdGl2ZSAqb21wX21ldGFkaXJlY3RpdmUgPSBhc19hIDxnb21wX21ldGFkaXJlY3Rp dmUgKj4gKGcpOworICBvbXBfbWV0YWRpcmVjdGl2ZS0+Ym9kaWVzID0gYm9kaWVzOworfQor CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQKK2dpbXBsZV9vbXBfbWV0YWRpcmVjdGl2ZV9u dW1fY2xhdXNlcyAoY29uc3QgZ2ltcGxlICpnKQoreworICByZXR1cm4gZ2ltcGxlX251bV9v cHMgKGcpIC8gMjsKK30KKworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9vbXBfbWV0 YWRpcmVjdGl2ZV9zZWxlY3RvciAoY29uc3QgZ2ltcGxlICpnLCB1bnNpZ25lZCBuKQorewor ICByZXR1cm4gZ2ltcGxlX29wIChnLCBuICogMik7Cit9CisKKworc3RhdGljIGlubGluZSB2 b2lkCitnaW1wbGVfb21wX21ldGFkaXJlY3RpdmVfc2V0X3NlbGVjdG9yIChnaW1wbGUgKmcs IHVuc2lnbmVkIG4sIHRyZWUgc2VsZWN0b3IpCit7CisgIHJldHVybiBnaW1wbGVfc2V0X29w IChnLCBuICogMiwgc2VsZWN0b3IpOworfQorCisKK3N0YXRpYyBpbmxpbmUgdHJlZQorZ2lt cGxlX29tcF9tZXRhZGlyZWN0aXZlX2xhYmVsIChjb25zdCBnaW1wbGUgKmcsIHVuc2lnbmVk IG4pCit7CisgIHJldHVybiBnaW1wbGVfb3AgKGcsIG4gKiAyICsgMSk7Cit9CisKKworc3Rh dGljIGlubGluZSB2b2lkCitnaW1wbGVfb21wX21ldGFkaXJlY3RpdmVfc2V0X2xhYmVsIChn aW1wbGUgKmcsIHVuc2lnbmVkIG4sIHRyZWUgbGFiZWwpCit7CisgIHJldHVybiBnaW1wbGVf c2V0X29wIChnLCBuICogMiArIDEsIGxhYmVsKTsKK30KKworCiAvKiBSZXR1cm4gYSBwb2lu dGVyIHRvIHRoZSBib2R5IGZvciB0aGUgR0lNUExFX1RSQU5TQUNUSU9OIHN0YXRlbWVudAog ICAgVFJBTlNBQ1RJT05fU1RNVC4gICovCiAKQEAgLTY0NzgsNiArNjYxNiw3IEBAIGdpbXBs ZV9yZXR1cm5fc2V0X3JldHZhbCAoZ3JldHVybiAqZ3MsIHRyZWUgcmV0dmFsKQogICAgIGNh c2UgR0lNUExFX09NUF9SRVRVUk46CQkJXAogICAgIGNhc2UgR0lNUExFX09NUF9BVE9NSUNf TE9BRDoJCVwKICAgICBjYXNlIEdJTVBMRV9PTVBfQVRPTUlDX1NUT1JFOgkJXAorICAgIGNh c2UgR0lNUExFX09NUF9NRVRBRElSRUNUSVZFOgkJXAogICAgIGNhc2UgR0lNUExFX09NUF9D T05USU5VRQogCiBzdGF0aWMgaW5saW5lIGJvb2wKZGlmZiAtLWdpdCBhL2djYy9naW1wbGlm eS5jIGIvZ2NjL2dpbXBsaWZ5LmMKaW5kZXggMjczMGYyMjUxODcuLjQ5ZjRiY2IwMWYzIDEw MDY0NAotLS0gYS9nY2MvZ2ltcGxpZnkuYworKysgYi9nY2MvZ2ltcGxpZnkuYwpAQCAtNTY0 Niw2ICs1NjQ2LDcgQEAgaXNfZ2ltcGxlX3N0bXQgKHRyZWUgdCkKICAgICBjYXNlIE9NUF9U QVNLR1JPVVA6CiAgICAgY2FzZSBPTVBfT1JERVJFRDoKICAgICBjYXNlIE9NUF9DUklUSUNB TDoKKyAgICBjYXNlIE9NUF9NRVRBRElSRUNUSVZFOgogICAgIGNhc2UgT01QX1RBU0s6CiAg ICAgY2FzZSBPTVBfVEFSR0VUOgogICAgIGNhc2UgT01QX1RBUkdFVF9EQVRBOgpAQCAtMTM3 ODUsNiArMTM3ODYsNDkgQEAgZ2ltcGxpZnlfb21wX29yZGVyZWQgKHRyZWUgZXhwciwgZ2lt cGxlX3NlcSBib2R5KQogICByZXR1cm4gZ2ltcGxlX2J1aWxkX29tcF9vcmRlcmVkIChib2R5 LCBPTVBfT1JERVJFRF9DTEFVU0VTIChleHByKSk7CiB9CiAKK3N0YXRpYyBlbnVtIGdpbXBs aWZ5X3N0YXR1cworZ2ltcGxpZnlfb21wX21ldGFkaXJlY3RpdmUgKHRyZWUgKmV4cHJfcCwg Z2ltcGxlX3NlcSAqcHJlX3AsIGdpbXBsZV9zZXEgKnBvc3RfcCwKKwkJCSAgICBib29sICgq Z2ltcGxlX3Rlc3RfZikgKHRyZWUpLCBmYWxsYmFja190IGZhbGxiYWNrKQoreworICBnb21w X21ldGFkaXJlY3RpdmVfYm9keSAqZmlyc3RfYm9keSA9IE5VTEw7CisgIGdvbXBfbWV0YWRp cmVjdGl2ZV9ib2R5ICpwcmV2X2JvZHkgPSBOVUxMOworICBhdXRvX3ZlYzx0cmVlPiBzZWxl Y3RvcnM7CisgIHVuc2lnbmVkIGk7CisgIHRyZWUgY2xhdXNlID0gT01QX01FVEFESVJFQ1RJ VkVfQ0xBVVNFUyAoKmV4cHJfcCk7CisKKyAgd2hpbGUgKGNsYXVzZSkKKyAgICB7CisgICAg ICB0cmVlIHNlbGVjdG9yID0gVFJFRV9QVVJQT1NFIChjbGF1c2UpOworICAgICAgdHJlZSBk aXJlY3RpdmUgPSBUUkVFX1ZBTFVFIChjbGF1c2UpOworCisgICAgICBzZWxlY3RvcnMuc2Fm ZV9wdXNoIChzZWxlY3Rvcik7CisgICAgICBnb21wX21ldGFkaXJlY3RpdmVfYm9keSAqYm9k eQorCT0gZ2ltcGxlX2J1aWxkX29tcF9tZXRhZGlyZWN0aXZlX2JvZHkgKE5VTEwpOworICAg ICAgZ2ltcGxpZnlfc3RtdCAoJmRpcmVjdGl2ZSwgZ2ltcGxlX29tcF9ib2R5X3B0ciAoYm9k eSkpOworICAgICAgaWYgKCFmaXJzdF9ib2R5KQorCWZpcnN0X2JvZHkgPSBib2R5OworICAg ICAgaWYgKHByZXZfYm9keSkKKwl7CisJICBwcmV2X2JvZHktPm5leHQgPSBib2R5OworCSAg Ym9keS0+cHJldiA9IHByZXZfYm9keTsKKwl9CisgICAgICBwcmV2X2JvZHkgPSBib2R5Owor CisgICAgICBjbGF1c2UgPSBUUkVFX0NIQUlOIChjbGF1c2UpOworICAgIH0KKworICBnb21w X21ldGFkaXJlY3RpdmUgKnN0bXQKKyAgICA9IGdpbXBsZV9idWlsZF9vbXBfbWV0YWRpcmVj dGl2ZSAoc2VsZWN0b3JzLmxlbmd0aCAoKSk7CisgIGdpbXBsZV9vbXBfbWV0YWRpcmVjdGl2 ZV9zZXRfYm9kaWVzIChzdG10LCBmaXJzdF9ib2R5KTsKKyAgZ2ltcGxpZnlfc2VxX2FkZF9z dG10IChwcmVfcCwgc3RtdCk7CisKKyAgdHJlZSBzZWxlY3RvcjsKKyAgRk9SX0VBQ0hfVkVD X0VMVCAoc2VsZWN0b3JzLCBpLCBzZWxlY3RvcikKKyAgICBnaW1wbGVfb21wX21ldGFkaXJl Y3RpdmVfc2V0X3NlbGVjdG9yIChzdG10LCBpLCBzZWxlY3Rvcik7CisKKyAgcmV0dXJuIEdT X0FMTF9ET05FOworfQorCiAvKiBDb252ZXJ0IHRoZSBHRU5FUklDIGV4cHJlc3Npb24gdHJl ZSAqRVhQUl9QIHRvIEdJTVBMRS4gIElmIHRoZQogICAgZXhwcmVzc2lvbiBwcm9kdWNlcyBh IHZhbHVlIHRvIGJlIHVzZWQgYXMgYW4gb3BlcmFuZCBpbnNpZGUgYSBHSU1QTEUKICAgIHN0 YXRlbWVudCwgdGhlIHZhbHVlIHdpbGwgYmUgc3RvcmVkIGJhY2sgaW4gKkVYUFJfUC4gIFRo aXMgdmFsdWUgd2lsbApAQCAtMTQ2ODAsNiArMTQ3MjQsMTEgQEAgZ2ltcGxpZnlfZXhwciAo dHJlZSAqZXhwcl9wLCBnaW1wbGVfc2VxICpwcmVfcCwgZ2ltcGxlX3NlcSAqcG9zdF9wLAog CSAgcmV0ID0gZ2ltcGxpZnlfb21wX2F0b21pYyAoZXhwcl9wLCBwcmVfcCk7CiAJICBicmVh azsKIAorCWNhc2UgT01QX01FVEFESVJFQ1RJVkU6CisJICByZXQgPSBnaW1wbGlmeV9vbXBf bWV0YWRpcmVjdGl2ZSAoZXhwcl9wLCBwcmVfcCwgcG9zdF9wLAorCQkJCQkgICAgZ2ltcGxl X3Rlc3RfZiwgZmFsbGJhY2spOworCSAgYnJlYWs7CisKIAljYXNlIFRSQU5TQUNUSU9OX0VY UFI6CiAJICByZXQgPSBnaW1wbGlmeV90cmFuc2FjdGlvbiAoZXhwcl9wLCBwcmVfcCk7CiAJ ICBicmVhazsKZGlmZiAtLWdpdCBhL2djYy9nc3N0cnVjdC5kZWYgYi9nY2MvZ3NzdHJ1Y3Qu ZGVmCmluZGV4IDhmNzc3ZTJiYjk1Li5mMjJhYzFmNjVjYiAxMDA2NDQKLS0tIGEvZ2NjL2dz c3RydWN0LmRlZgorKysgYi9nY2MvZ3NzdHJ1Y3QuZGVmCkBAIC01MCw0ICs1MCw2IEBAIERF RkdTU1RSVUNUKEdTU19PTVBfU0lOR0xFX0xBWU9VVCwgZ2ltcGxlX3N0YXRlbWVudF9vbXBf c2luZ2xlX2xheW91dCwgZmFsc2UpCiBERUZHU1NUUlVDVChHU1NfT01QX0NPTlRJTlVFLCBn b21wX2NvbnRpbnVlLCBmYWxzZSkKIERFRkdTU1RSVUNUKEdTU19PTVBfQVRPTUlDX0xPQUQs IGdvbXBfYXRvbWljX2xvYWQsIGZhbHNlKQogREVGR1NTVFJVQ1QoR1NTX09NUF9BVE9NSUNf U1RPUkVfTEFZT1VULCBnb21wX2F0b21pY19zdG9yZSwgZmFsc2UpCitERUZHU1NUUlVDVChH U1NfT01QX01FVEFESVJFQ1RJVkUsIGdvbXBfbWV0YWRpcmVjdGl2ZSwgdHJ1ZSkKK0RFRkdT U1RSVUNUKEdTU19PTVBfTUVUQURJUkVDVElWRV9CT0RZLCBnb21wX21ldGFkaXJlY3RpdmVf Ym9keSwgZmFsc2UpCiBERUZHU1NUUlVDVChHU1NfVFJBTlNBQ1RJT04sIGd0cmFuc2FjdGlv biwgZmFsc2UpCmRpZmYgLS1naXQgYS9nY2Mvb21wLWV4cGFuZC1tZXRhZGlyZWN0aXZlLmNj IGIvZ2NjL29tcC1leHBhbmQtbWV0YWRpcmVjdGl2ZS5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uZjQ2MjBkZjU3N2EKLS0tIC9kZXYvbnVsbAorKysgYi9n Y2Mvb21wLWV4cGFuZC1tZXRhZGlyZWN0aXZlLmNjCkBAIC0wLDAgKzEsMTI1IEBACisvKiBF eHBhbmQgYW4gT3Blbk1QIG1ldGFkaXJlY3RpdmUuCisKKyAgIENvcHlyaWdodCAoQykgMjAy MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQg b2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh dGVyCit2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2 ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0 aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3 LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs dWRlICJzeXN0ZW0uaCIKKyNpbmNsdWRlICJjb3JldHlwZXMuaCIKKyNpbmNsdWRlICJiYWNr ZW5kLmgiCisjaW5jbHVkZSAidGFyZ2V0LmgiCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1 ZGUgImxhbmdob29rcy5oIgorI2luY2x1ZGUgImdpbXBsZS5oIgorI2luY2x1ZGUgInRyZWUt cGFzcy5oIgorI2luY2x1ZGUgImNncmFwaC5oIgorI2luY2x1ZGUgImZvbGQtY29uc3QuaCIK KyNpbmNsdWRlICJnaW1wbGlmeS5oIgorI2luY2x1ZGUgImdpbXBsZS1pdGVyYXRvci5oIgor I2luY2x1ZGUgImdpbXBsZS13YWxrLmgiCisjaW5jbHVkZSAiZ29tcC1jb25zdGFudHMuaCIK KyNpbmNsdWRlICJvbXAtZ2VuZXJhbC5oIgorI2luY2x1ZGUgImRpYWdub3N0aWMtY29yZS5o IgorI2luY2x1ZGUgInRyZWUtY2ZnLmgiCisjaW5jbHVkZSAiY2ZnYW5hbC5oIgorCitzdGF0 aWMgdm9pZAorb21wX2V4cGFuZF9tZXRhZGlyZWN0aXZlIChmdW5jdGlvbiAqZnVuLCBiYXNp Y19ibG9jayBiYikKK3sKKyAgZ2ltcGxlICpzdG10ID0gbGFzdF9zdG10IChiYik7CisgIHRy ZWUgc2VsZWN0ZWRfbGFiZWwgPSBvbXBfcmVzb2x2ZV9tZXRhZGlyZWN0aXZlIChzdG10KTsK KworICAvKiBUaGlzIGlzIHRoZSBsYXN0IGNoYW5jZSBmb3IgdGhlIG1ldGFkaXJlY3RpdmUg dG8gYmUgcmVzb2x2ZWQuICAqLworICBpZiAoIXNlbGVjdGVkX2xhYmVsKQorICAgIGdjY191 bnJlYWNoYWJsZSAoKTsKKworICAvKiBEZWxldGUgYWxsIHZhcmlhbnQgQkJzIGV4Y2VwdCBm b3IgdGhlIHNlbGVjdGVkIG9uZS4gICovCisgIGNhbGN1bGF0ZV9kb21pbmFuY2VfaW5mbyAo Q0RJX0RPTUlOQVRPUlMpOworICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZ2ltcGxlX29t cF9tZXRhZGlyZWN0aXZlX251bV9jbGF1c2VzIChzdG10KTsgaSsrKQorICAgIHsKKyAgICAg IHRyZWUgbGFiZWwgPSBnaW1wbGVfb21wX21ldGFkaXJlY3RpdmVfbGFiZWwgKHN0bXQsIGkp OworICAgICAgZWRnZSBlZGdlID0gZmluZF9lZGdlIChiYiwgbGFiZWxfdG9fYmxvY2sgKGZ1 biwgbGFiZWwpKTsKKyAgICAgIGlmIChsYWJlbCA9PSBzZWxlY3RlZF9sYWJlbCkKKwllZGdl LT5mbGFncyB8PSBFREdFX0ZBTExUSFJVOworICAgICAgZWxzZQorCXJlbW92ZV9lZGdlX2Fu ZF9kb21pbmF0ZWRfYmxvY2tzIChlZGdlKTsKKyAgICB9CisKKyAgLyogUmVtb3ZlIHRoZSBt ZXRhZGlyZWN0aXZlIHN0YXRlbWVudC4gICovCisgIGdpbXBsZV9zdG10X2l0ZXJhdG9yIGdz aSA9IGdzaV9sYXN0X2JiIChiYik7CisgIGdzaV9yZW1vdmUgKCZnc2ksIHRydWUpOworfQor CituYW1lc3BhY2UgeworCitjb25zdCBwYXNzX2RhdGEgcGFzc19kYXRhX29tcF9leHBhbmRf bWV0YWRpcmVjdGl2ZSA9Cit7CisgIEdJTVBMRV9QQVNTLCAvKiB0eXBlICovCisgICJvbXBf ZXhwYW5kX21ldGFkaXJlY3RpdmUiLCAvKiBuYW1lICovCisgIE9QVEdST1VQX09NUCwgLyog b3B0aW5mb19mbGFncyAqLworICBUVl9OT05FLCAvKiB0dl9pZCAqLworICBQUk9QX2dpbXBs ZV9sY2YsIC8qIHByb3BlcnRpZXNfcmVxdWlyZWQgKi8KKyAgMCwgLyogcHJvcGVydGllc19w cm92aWRlZCAqLworICAwLCAvKiBwcm9wZXJ0aWVzX2Rlc3Ryb3llZCAqLworICAwLCAvKiB0 b2RvX2ZsYWdzX3N0YXJ0ICovCisgIDAsIC8qIHRvZG9fZmxhZ3NfZmluaXNoICovCit9Owor CitjbGFzcyBwYXNzX29tcF9leHBhbmRfbWV0YWRpcmVjdGl2ZSA6IHB1YmxpYyBnaW1wbGVf b3B0X3Bhc3MKK3sKK3B1YmxpYzoKKyAgcGFzc19vbXBfZXhwYW5kX21ldGFkaXJlY3RpdmUg KGdjYzo6Y29udGV4dCAqY3R4dCkKKyAgICA6IGdpbXBsZV9vcHRfcGFzcyAocGFzc19kYXRh X29tcF9leHBhbmRfbWV0YWRpcmVjdGl2ZSwgY3R4dCkKKyAge30KKworICAvKiBvcHRfcGFz cyBtZXRob2RzOiAqLworICB2aXJ0dWFsIGJvb2wgZ2F0ZSAoZnVuY3Rpb24gKikKKyAgewor ICAgIHJldHVybiAoZmxhZ19vcGVubXApOworICB9CisKKyAgdmlydHVhbCB1bnNpZ25lZCBp bnQgZXhlY3V0ZSAoZnVuY3Rpb24gKmZ1bik7Cit9OyAvLyBjbGFzcyBwYXNzX29tcF9vYWNj X2tlcm5lbHNfZGVjb21wb3NlCisKK3Vuc2lnbmVkIGludAorcGFzc19vbXBfZXhwYW5kX21l dGFkaXJlY3RpdmU6OmV4ZWN1dGUgKGZ1bmN0aW9uICpmdW4pCit7CisgIGJhc2ljX2Jsb2Nr IGJiOworICBhdXRvX3ZlYzxiYXNpY19ibG9jaz4gbWV0YWRpcmVjdGl2ZV9iYnM7CisKKyAg Rk9SX0VBQ0hfQkJfRk4gKGJiLCBmdW4pCisgICAgeworICAgICAgZ2ltcGxlICpzdG10ID0g bGFzdF9zdG10IChiYik7CisgICAgICBpZiAoc3RtdCAmJiBpc19hPGdvbXBfbWV0YWRpcmVj dGl2ZSAqPiAoc3RtdCkpCisJbWV0YWRpcmVjdGl2ZV9iYnMuc2FmZV9wdXNoIChiYik7Cisg ICAgfQorCisgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtZXRhZGlyZWN0aXZlX2Jicy5s ZW5ndGggKCk7IGkrKykKKyAgICBvbXBfZXhwYW5kX21ldGFkaXJlY3RpdmUgKGZ1biwgbWV0 YWRpcmVjdGl2ZV9iYnNbaV0pOworCisgIHJldHVybiAwOworfQorCit9IC8vIGFub24gbmFt ZXNwYWNlCisKKworZ2ltcGxlX29wdF9wYXNzICoKK21ha2VfcGFzc19vbXBfZXhwYW5kX21l dGFkaXJlY3RpdmUgKGdjYzo6Y29udGV4dCAqY3R4dCkKK3sKKyAgcmV0dXJuIG5ldyBwYXNz X29tcF9leHBhbmRfbWV0YWRpcmVjdGl2ZSAoY3R4dCk7Cit9CmRpZmYgLS1naXQgYS9nY2Mv b21wLWV4cGFuZC5jIGIvZ2NjL29tcC1leHBhbmQuYwppbmRleCAwZjg0M2JhZDc5YS4uMmMx YWZmYjY0ZjggMTAwNjQ0Ci0tLSBhL2djYy9vbXAtZXhwYW5kLmMKKysrIGIvZ2NjL29tcC1l eHBhbmQuYwpAQCAtOTg2Niw2ICs5ODY2LDIyIEBAIGV4cGFuZF9vbXBfdGFyZ2V0IChzdHJ1 Y3Qgb21wX3JlZ2lvbiAqcmVnaW9uKQogICAgIH0KIH0KIAorc3RhdGljIHZvaWQKK2V4cGFu ZF9vbXBfbWV0YWRpcmVjdGl2ZSAoc3RydWN0IG9tcF9yZWdpb24gKnJlZ2lvbikKK3sKKyAg Z29tcF9tZXRhZGlyZWN0aXZlICpzdG10CisgICAgPSBhc19hIDxnb21wX21ldGFkaXJlY3Rp dmUgKj4gKGxhc3Rfc3RtdCAocmVnaW9uLT5lbnRyeSkpOworICB0cmVlIHN1Y2NfbGFiZWwg PSBnaW1wbGVfb21wX21ldGFkaXJlY3RpdmVfc3VjY19sYWJlbCAoc3RtdCk7CisgIGJhc2lj X2Jsb2NrIHN1Y2NfYmIgPSBsYWJlbF90b19ibG9jayAoY2Z1biwgc3VjY19sYWJlbCk7Cisg IGdpbXBsZV9zdG10X2l0ZXJhdG9yIGdzaSA9IGdzaV9zdGFydF9iYiAoc3VjY19iYik7Cisg IHdoaWxlICghZ3NpX2VuZF9wIChnc2kpCisJICYmIGdpbXBsZV9jb2RlIChnc2lfc3RtdCAo Z3NpKSkgIT0gR0lNUExFX09NUF9SRVRVUk4pCisgICAgZ3NpX25leHQgKCZnc2kpOworCisg IGdjY19hc3NlcnQgKGdpbXBsZV9jb2RlIChnc2lfc3RtdCAoZ3NpKSkgPT0gR0lNUExFX09N UF9SRVRVUk4pOworICBnc2lfcmVtb3ZlICgmZ3NpLCB0cnVlKTsKK30KKwogLyogRXhwYW5k IHRoZSBwYXJhbGxlbCByZWdpb24gdHJlZSByb290ZWQgYXQgUkVHSU9OLiAgRXhwYW5zaW9u CiAgICBwcm9jZWVkcyBpbiBkZXB0aC1maXJzdCBvcmRlci4gIElubmVybW9zdCByZWdpb25z IGFyZSBleHBhbmRlZAogICAgZmlyc3QuICBUaGlzIHdheSwgcGFyYWxsZWwgcmVnaW9ucyB0 aGF0IHJlcXVpcmUgYSBuZXcgZnVuY3Rpb24gdG8KQEAgLTk5NTIsNiArOTk2OCwxMCBAQCBl eHBhbmRfb21wIChzdHJ1Y3Qgb21wX3JlZ2lvbiAqcmVnaW9uKQogCSAgZXhwYW5kX29tcF90 YXJnZXQgKHJlZ2lvbik7CiAJICBicmVhazsKIAorCWNhc2UgR0lNUExFX09NUF9NRVRBRElS RUNUSVZFOgorCSAgZXhwYW5kX29tcF9tZXRhZGlyZWN0aXZlIChyZWdpb24pOworCSAgYnJl YWs7CisKIAlkZWZhdWx0OgogCSAgZ2NjX3VucmVhY2hhYmxlICgpOwogCX0KQEAgLTEwMzg4 LDYgKzEwNDA4LDI0IEBAIG9tcF9tYWtlX2dpbXBsZV9lZGdlcyAoYmFzaWNfYmxvY2sgYmIs IHN0cnVjdCBvbXBfcmVnaW9uICoqcmVnaW9uLAogCX0KICAgICAgIGJyZWFrOwogCisgICAg Y2FzZSBHSU1QTEVfT01QX01FVEFESVJFQ1RJVkU6CisgICAgICAvKiBDcmVhdGUgYW4gZWRn ZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBib2R5IG9mIGVhY2ggY2FuZGlkYXRlCisJIGRp cmVjdGl2ZS4gICovCisgICAgICB7CisJdW5zaWduZWQgaTsKKwljdXJfcmVnaW9uID0gbmV3 X29tcF9yZWdpb24gKGJiLCBjb2RlLCBjdXJfcmVnaW9uKTsKKwlnaW1wbGUgKnN0bXQgPSBs YXN0X3N0bXQgKGJiKTsKKwlmb3IgKGkgPSAwOyBpIDwgZ2ltcGxlX29tcF9tZXRhZGlyZWN0 aXZlX251bV9jbGF1c2VzIChzdG10KTsgaSsrKQorCSAgeworCSAgICB0cmVlIGRlc3QgPSBn aW1wbGVfb21wX21ldGFkaXJlY3RpdmVfbGFiZWwgKHN0bXQsIGkpOworCSAgICBiYXNpY19i bG9jayBkZXN0X2JiID0gbGFiZWxfdG9fYmxvY2sgKGNmdW4sIGRlc3QpOworCSAgICBtYWtl X2VkZ2UgKGJiLCBkZXN0X2JiLCAwKTsKKwkgIH0KKworCWZhbGx0aHJ1ID0gZmFsc2U7Cisg ICAgICB9CisgICAgICBicmVhazsKKwogICAgIGRlZmF1bHQ6CiAgICAgICBnY2NfdW5yZWFj aGFibGUgKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvZ2NjL29tcC1nZW5lcmFsLmMgYi9nY2Mv b21wLWdlbmVyYWwuYwppbmRleCBhMWJiOWQ4ZDI1ZC4uNDgzOWE5ODQ5YmMgMTAwNjQ0Ci0t LSBhL2djYy9vbXAtZ2VuZXJhbC5jCisrKyBiL2djYy9vbXAtZ2VuZXJhbC5jCkBAIC00NCw2 ICs0NCw3IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBu b3Qgc2VlCiAjaW5jbHVkZSAidHJlZS1pdGVyYXRvci5oIgogI2luY2x1ZGUgImRhdGEtc3Ry ZWFtZXIuaCIKICNpbmNsdWRlICJzdHJlYW1lci1ob29rcy5oIgorI2luY2x1ZGUgInRyZWUt cHJldHR5LXByaW50LmgiCiAKIGVudW0gb21wX3JlcXVpcmVzIG9tcF9yZXF1aXJlc19tYXNr OwogCkBAIC0xMTAwLDggKzExMDEsMTMgQEAgb21wX2NvbnRleHRfbmFtZV9saXN0X3Byb3Ag KHRyZWUgcHJvcCkKICAgIG90aGVycyBuZWVkIHRvIHdhaXQgdW50aWwgdGhlIHdob2xlIFRV IGlzIHBhcnNlZCwgb3RoZXJzIG5lZWQgdG8gd2FpdCB1bnRpbAogICAgSVBBLCBvdGhlcnMg dW50aWwgdmVjdG9yaXphdGlvbi4gICovCiAKKyNkZWZpbmUgREVMQVlfTUVUQURJUkVDVElW RVNfQUZURVJfTFRPIHsgXAorICBpZiAobWV0YWRpcmVjdGl2ZV9wICYmICEoY2Z1bi0+Y3Vy cl9wcm9wZXJ0aWVzICYgUFJPUF9naW1wbGVfbG9tcF9kZXYpKQlcCisgICAgcmV0dXJuIC0x OwlcCit9CisKIGludAotb21wX2NvbnRleHRfc2VsZWN0b3JfbWF0Y2hlcyAodHJlZSBjdHgp CitvbXBfY29udGV4dF9zZWxlY3Rvcl9tYXRjaGVzICh0cmVlIGN0eCwgYm9vbCBtZXRhZGly ZWN0aXZlX3ApCiB7CiAgIGludCByZXQgPSAxOwogICBmb3IgKHRyZWUgdDEgPSBjdHg7IHQx OyB0MSA9IFRSRUVfQ0hBSU4gKHQxKSkKQEAgLTEyMjIsNiArMTIyOCw4IEBAIG9tcF9jb250 ZXh0X3NlbGVjdG9yX21hdGNoZXMgKHRyZWUgY3R4KQogCQkgICAgY29uc3QgY2hhciAqYXJj aCA9IG9tcF9jb250ZXh0X25hbWVfbGlzdF9wcm9wICh0Myk7CiAJCSAgICBpZiAoYXJjaCA9 PSBOVUxMKQogCQkgICAgICByZXR1cm4gMDsKKwkJICAgIERFTEFZX01FVEFESVJFQ1RJVkVT X0FGVEVSX0xUTzsKKwogCQkgICAgaW50IHIgPSAwOwogCQkgICAgaWYgKHRhcmdldG0ub21w LmRldmljZV9raW5kX2FyY2hfaXNhICE9IE5VTEwpCiAJCSAgICAgIHIgPSB0YXJnZXRtLm9t cC5kZXZpY2Vfa2luZF9hcmNoX2lzYSAob21wX2RldmljZV9hcmNoLApAQCAtMTM0MCw2ICsx MzQ4LDggQEAgb21wX2NvbnRleHRfc2VsZWN0b3JfbWF0Y2hlcyAodHJlZSBjdHgpCiAJCQkg IHJldHVybiAwOwogCQkJY29udGludWU7CiAJCSAgICAgIH0KKwkJICAgIERFTEFZX01FVEFE SVJFQ1RJVkVTX0FGVEVSX0xUTzsKKwogCQkgICAgaW50IHIgPSAwOwogCQkgICAgaWYgKHRh cmdldG0ub21wLmRldmljZV9raW5kX2FyY2hfaXNhICE9IE5VTEwpCiAJCSAgICAgIHIgPSB0 YXJnZXRtLm9tcC5kZXZpY2Vfa2luZF9hcmNoX2lzYSAob21wX2RldmljZV9raW5kLApAQCAt MTM3OSw2ICsxMzg5LDggQEAgb21wX2NvbnRleHRfc2VsZWN0b3JfbWF0Y2hlcyAodHJlZSBj dHgpCiAJCSAgICBjb25zdCBjaGFyICppc2EgPSBvbXBfY29udGV4dF9uYW1lX2xpc3RfcHJv cCAodDMpOwogCQkgICAgaWYgKGlzYSA9PSBOVUxMKQogCQkgICAgICByZXR1cm4gMDsKKwkJ ICAgIERFTEFZX01FVEFESVJFQ1RJVkVTX0FGVEVSX0xUTzsKKwogCQkgICAgaW50IHIgPSAw OwogCQkgICAgaWYgKHRhcmdldG0ub21wLmRldmljZV9raW5kX2FyY2hfaXNhICE9IE5VTEwp CiAJCSAgICAgIHIgPSB0YXJnZXRtLm9tcC5kZXZpY2Vfa2luZF9hcmNoX2lzYSAob21wX2Rl dmljZV9pc2EsCkBAIC0xNDQ1LDYgKzE0NTcsOCBAQCBvbXBfY29udGV4dF9zZWxlY3Rvcl9t YXRjaGVzICh0cmVlIGN0eCkKICAgcmV0dXJuIHJldDsKIH0KIAorI3VuZGVmIERFTEFZX01F VEFESVJFQ1RJVkVTX0FGVEVSX0xUTworCiAvKiBDb21wYXJlIGNvbnN0cnVjdD17c2ltZH0g Q0xBVVNFUzEgd2l0aCBDTEFVU0VTMiwgcmV0dXJuIDAvLTEvMS8yIGFzCiAgICBpbiBvbXBf Y29udGV4dF9zZWxlY3Rvcl9zZXRfY29tcGFyZS4gICovCiAKQEAgLTI0NTksNiArMjQ3Mywx NjEgQEAgb21wX2x0b19pbnB1dF9kZWNsYXJlX3ZhcmlhbnRfYWx0IChsdG9faW5wdXRfYmxv Y2sgKmliLCBjZ3JhcGhfbm9kZSAqbm9kZSwKIAkJCQkJCSBJTlNFUlQpID0gZW50cnlwOwog fQogCit0cmVlCitvbXBfcmVzb2x2ZV9tZXRhZGlyZWN0aXZlICh0cmVlIG1ldGFkaXJlY3Rp dmUpCit7CisgIGF1dG9fdmVjIDx0cmVlLCAxNj4gY2xhdXNlczsKKyAgYXV0b192ZWMgPHdp ZGVzdF9pbnQsIDE2PiBzY29yZXM7CisgIHRyZWUgY2xhdXNlID0gT01QX01FVEFESVJFQ1RJ VkVfQ0xBVVNFUyAobWV0YWRpcmVjdGl2ZSk7CisgIHRyZWUgZGVmYXVsdF92YXJpYW50ID0g TlVMTF9UUkVFOworCisgIHdoaWxlIChjbGF1c2UpCisgICAgeworICAgICAgdHJlZSBzZWxl Y3RvciA9IFRSRUVfUFVSUE9TRSAoY2xhdXNlKTsKKyAgICAgIHdpZGVzdF9pbnQgc2NvcmU7 CisKKyAgICAgIGlmIChzZWxlY3RvciA9PSBOVUxMX1RSRUUpCisJZGVmYXVsdF92YXJpYW50 ID0gVFJFRV9WQUxVRSAoY2xhdXNlKTsKKyAgICAgIGVsc2UKKwlzd2l0Y2ggKG9tcF9jb250 ZXh0X3NlbGVjdG9yX21hdGNoZXMgKHNlbGVjdG9yLCB0cnVlKSkKKwkgIHsKKwkgIGNhc2Ug LTE6CisJICAgIHJldHVybiBOVUxMX1RSRUU7CisJICBjYXNlIDE6CisJICAgIGNsYXVzZXMu c2FmZV9wdXNoIChjbGF1c2UpOworCSAgICAvKiBUT0RPOiBIYW5kbGUgU0lNRCBzY29yZT8g ICovCisJICAgIG9tcF9jb250ZXh0X2NvbXB1dGVfc2NvcmUgKHNlbGVjdG9yLCAmc2NvcmUs IGZhbHNlKTsKKwkgICAgc2NvcmVzLnNhZmVfcHVzaCAoc2NvcmUpOworCSAgICBicmVhazsK KwkgIGNhc2UgMDoKKwkgICAgYnJlYWs7CisJICB9CisgICAgICBjbGF1c2UgPSBUUkVFX0NI QUlOIChjbGF1c2UpOworICAgIH0KKworICAvKiBUT0RPOiBIYW5kbGUgY2FzZSB3aGVyZSB0 aGVyZSBpcyBubyBkZWZhdWx0LiAgKi8KKyAgaWYgKGNsYXVzZXMuaXNfZW1wdHkgKCkpCisg ICAgeworICAgICAgaWYgKGR1bXBfZmlsZSkKKwlmcHJpbnRmIChkdW1wX2ZpbGUsICJTZWxl Y3RpbmcgZGVmYXVsdCBkaXJlY3RpdmUgdmFyaWFudFxuIik7CisgICAgICByZXR1cm4gZGVm YXVsdF92YXJpYW50OworICAgIH0KKworICAvKiBBIGNvbnRleHQgc2VsZWN0b3IgdGhhdCBp cyBhIHN0cmljdCBzdWJzZXQgb2YgYW5vdGhlciBjb250ZXh0IHNlbGVjdG9yCisgICAgIGhh cyBhIHNjb3JlIG9mIHplcm8uICAqLworICB0cmVlIGNsYXVzZTEsIGNsYXVzZTI7CisgIHVu c2lnbmVkIGludCBpLCBqOworICBGT1JfRUFDSF9WRUNfRUxUIChjbGF1c2VzLCBpLCBjbGF1 c2UxKQorICAgIEZPUl9FQUNIX1ZFQ19FTFRfRlJPTSAoY2xhdXNlcywgaiwgY2xhdXNlMiwg aSArIDEpCisgICAgICB7CisJaW50IHIgPSBvbXBfY29udGV4dF9zZWxlY3Rvcl9jb21wYXJl IChUUkVFX1BVUlBPU0UgKGNsYXVzZTEpLAorCQkJCQkgICAgICBUUkVFX1BVUlBPU0UgKGNs YXVzZTIpKTsKKwlpZiAociA9PSAtMSkKKwkgIHsKKwkgICAgLyogY3R4MSBpcyBhIHN0cmlj dCBzdWJzZXQgb2YgY3R4Mi4gICovCisJICAgIHNjb3Jlc1tpXSA9IDA7CisJICAgIGJyZWFr OworCSAgfQorCWVsc2UgaWYgKHIgPT0gMSkKKwkgIC8qIGN0eDIgaXMgYSBzdHJpY3Qgc3Vi c2V0IG9mIGN0eDEuICAqLworCSAgc2NvcmVzW2pdID0gMDsKKyAgICAgIH0KKworICB3aWRl c3RfaW50IHNjb3JlLCBoaWdoZXN0X3Njb3JlID0gLTE7CisgIEZPUl9FQUNIX1ZFQ19FTFQg KHNjb3JlcywgaSwgc2NvcmUpCisgICAgaWYgKHNjb3JlID4gaGlnaGVzdF9zY29yZSkKKyAg ICAgIHsKKwloaWdoZXN0X3Njb3JlID0gc2NvcmU7CisJY2xhdXNlID0gY2xhdXNlc1tpXTsK KyAgICAgIH0KKworICBpZiAoZHVtcF9maWxlKQorICAgIHsKKyAgICAgIGZwcmludGYgKGR1 bXBfZmlsZSwgIlNlbGVjdGluZyBkaXJlY3RpdmUgdmFyaWFudCB3aXRoIHNlbGVjdG9yOiIp OworICAgICAgcHJpbnRfZ2VuZXJpY19leHByIChkdW1wX2ZpbGUsIFRSRUVfUFVSUE9TRSAo Y2xhdXNlKSk7CisgICAgICBmcHJpbnRmIChkdW1wX2ZpbGUsICJcbiIpOworICAgIH0KKyAg cmV0dXJuIFRSRUVfVkFMVUUgKGNsYXVzZSk7Cit9CisKK3RyZWUKK29tcF9yZXNvbHZlX21l dGFkaXJlY3RpdmUgKGdpbXBsZSAqZ3MpCit7CisgIGF1dG9fdmVjIDx0cmVlLCAxNj4gbGFi ZWxzOworICBhdXRvX3ZlYyA8dHJlZSwgMTY+IHNlbGVjdG9yczsKKyAgYXV0b192ZWMgPHdp ZGVzdF9pbnQsIDE2PiBzY29yZXM7CisgIHRyZWUgZGVmYXVsdF9sYWJlbCA9IGdpbXBsZV9v bXBfbWV0YWRpcmVjdGl2ZV9zdWNjX2xhYmVsIChncyk7CisKKyAgZm9yICh1bnNpZ25lZCBp ID0gMDsgaSA8IGdpbXBsZV9vbXBfbWV0YWRpcmVjdGl2ZV9udW1fY2xhdXNlcyAoZ3MpOyBp KyspCisgICAgeworICAgICAgdHJlZSBzZWxlY3RvciA9IGdpbXBsZV9vbXBfbWV0YWRpcmVj dGl2ZV9zZWxlY3RvciAoZ3MsIGkpOworICAgICAgd2lkZXN0X2ludCBzY29yZTsKKyAgICAg IGlmIChzZWxlY3RvciA9PSBOVUxMX1RSRUUpCisJZGVmYXVsdF9sYWJlbCA9IGdpbXBsZV9v bXBfbWV0YWRpcmVjdGl2ZV9sYWJlbCAoZ3MsIGkpOworICAgICAgZWxzZQorCXN3aXRjaCAo b21wX2NvbnRleHRfc2VsZWN0b3JfbWF0Y2hlcyAoc2VsZWN0b3IsIHRydWUpKQorCSAgewor CSAgY2FzZSAtMToKKwkgICAgcmV0dXJuIE5VTEw7CisJICBjYXNlIDE6CisJICAgIGxhYmVs cy5zYWZlX3B1c2ggKGdpbXBsZV9vbXBfbWV0YWRpcmVjdGl2ZV9sYWJlbCAoZ3MsIGkpKTsK KwkgICAgc2VsZWN0b3JzLnNhZmVfcHVzaCAoc2VsZWN0b3IpOworCSAgICAvKiBUT0RPOiBI YW5kbGUgU0lNRCBzY29yZT8uICAqLworCSAgICBvbXBfY29udGV4dF9jb21wdXRlX3Njb3Jl IChzZWxlY3RvciwgJnNjb3JlLCBmYWxzZSk7CisJICAgIHNjb3Jlcy5zYWZlX3B1c2ggKHNj b3JlKTsKKwkgICAgYnJlYWs7CisJICBjYXNlIDA6CisJICAgIGJyZWFrOworCSAgfQorICAg IH0KKworICBpZiAoc2NvcmVzLmlzX2VtcHR5ICgpKQorICAgIHsKKyAgICAgIGlmIChkdW1w X2ZpbGUpCisJZnByaW50ZiAoZHVtcF9maWxlLCAiU2VsZWN0aW5nIGRlZmF1bHQgZGlyZWN0 aXZlIHZhcmlhbnRcbiIpOworICAgICAgcmV0dXJuIGRlZmF1bHRfbGFiZWw7CisgICAgfQor CisgIC8qIEEgY29udGV4dCBzZWxlY3RvciB0aGF0IGlzIGEgc3RyaWN0IHN1YnNldCBvZiBh bm90aGVyIGNvbnRleHQgc2VsZWN0b3IKKyAgICAgaGFzIGEgc2NvcmUgb2YgemVyby4gICov CisgIHRyZWUgY3R4MSwgY3R4MjsKKyAgdW5zaWduZWQgaW50IGksIGo7CisgIEZPUl9FQUNI X1ZFQ19FTFQgKHNlbGVjdG9ycywgaSwgY3R4MSkKKyAgICBGT1JfRUFDSF9WRUNfRUxUX0ZS T00gKHNlbGVjdG9ycywgaiwgY3R4MiwgaSArIDEpCisgICAgICB7CisJaW50IHIgPSBvbXBf Y29udGV4dF9zZWxlY3Rvcl9jb21wYXJlIChjdHgxLCBjdHgyKTsKKwlpZiAociA9PSAtMSkK KwkgIHsKKwkgICAgLyogY3R4MSBpcyBhIHN0cmljdCBzdWJzZXQgb2YgY3R4Mi4gICovCisJ ICAgIHNjb3Jlc1tpXSA9IDA7CisJICAgIGJyZWFrOworCSAgfQorCWVsc2UgaWYgKHIgPT0g MSkKKwkgIC8qIGN0eDIgaXMgYSBzdHJpY3Qgc3Vic2V0IG9mIGN0eDEuICAqLworCSAgc2Nv cmVzW2pdID0gMDsKKyAgICAgIH0KKworICB1bnNpZ25lZCBoaWdoZXN0X2luZGV4ID0gMDsK KyAgd2lkZXN0X2ludCBzY29yZSwgaGlnaGVzdF9zY29yZSA9IC0xOworICBGT1JfRUFDSF9W RUNfRUxUIChzY29yZXMsIGksIHNjb3JlKQorICB7CisgICAgaWYgKHNjb3JlID4gaGlnaGVz dF9zY29yZSkKKyAgICAgIHsKKwloaWdoZXN0X3Njb3JlID0gc2NvcmU7CisJaGlnaGVzdF9p bmRleCA9IGk7CisgICAgICB9CisgIH0KKworICBpZiAoZHVtcF9maWxlKQorICAgIHsKKyAg ICAgIGZwcmludGYgKGR1bXBfZmlsZSwgIlNlbGVjdGluZyBkaXJlY3RpdmUgdmFyaWFudCB3 aXRoIHNlbGVjdG9yOiIpOworICAgICAgcHJpbnRfZ2VuZXJpY19leHByIChkdW1wX2ZpbGUs IHNlbGVjdG9yc1toaWdoZXN0X2luZGV4XSk7CisgICAgICBmcHJpbnRmIChkdW1wX2ZpbGUs ICJcbiIpOworICAgIH0KKworICByZXR1cm4gbGFiZWxzW2hpZ2hlc3RfaW5kZXhdOworfQor CiAvKiBFbmNvZGUgYW4gb2FjYyBsYXVuY2ggYXJndW1lbnQuICBUaGlzIG1hdGNoZXMgdGhl IEdPTVBfTEFVTkNIX1BBQ0sKICAgIG1hY3JvIG9uIGdvbXAtY29uc3RhbnRzLmguICBXZSBk byBub3QgY2hlY2sgZm9yIG92ZXJmbG93LiAgKi8KIApkaWZmIC0tZ2l0IGEvZ2NjL29tcC1n ZW5lcmFsLmggYi9nY2Mvb21wLWdlbmVyYWwuaAppbmRleCBhYTA0ODk1ZTE2ZC4uNDdjZWEy ZWFlMDEgMTAwNjQ0Ci0tLSBhL2djYy9vbXAtZ2VuZXJhbC5oCisrKyBiL2djYy9vbXAtZ2Vu ZXJhbC5oCkBAIC0xMDQsMTAgKzEwNCwxMiBAQCBleHRlcm4gdHJlZSBmaW5kX2NvbWJpbmVk X29tcF9mb3IgKHRyZWUgKiwgaW50ICosIHZvaWQgKik7CiBleHRlcm4gcG9seV91aW50NjQg b21wX21heF92ZiAodm9pZCk7CiBleHRlcm4gaW50IG9tcF9tYXhfc2ltdF92ZiAodm9pZCk7 CiBleHRlcm4gaW50IG9tcF9jb25zdHJ1Y3Rvcl90cmFpdHNfdG9fY29kZXMgKHRyZWUsIGVu dW0gdHJlZV9jb2RlICopOwotZXh0ZXJuIGludCBvbXBfY29udGV4dF9zZWxlY3Rvcl9tYXRj aGVzICh0cmVlKTsKK2V4dGVybiBpbnQgb21wX2NvbnRleHRfc2VsZWN0b3JfbWF0Y2hlcyAo dHJlZSwgYm9vbCA9IGZhbHNlKTsKIGV4dGVybiBpbnQgb21wX2NvbnRleHRfc2VsZWN0b3Jf c2V0X2NvbXBhcmUgKGNvbnN0IGNoYXIgKiwgdHJlZSwgdHJlZSk7CiBleHRlcm4gdHJlZSBv bXBfZ2V0X2NvbnRleHRfc2VsZWN0b3IgKHRyZWUsIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hh ciAqKTsKIGV4dGVybiB0cmVlIG9tcF9yZXNvbHZlX2RlY2xhcmVfdmFyaWFudCAodHJlZSk7 CitleHRlcm4gdHJlZSBvbXBfcmVzb2x2ZV9tZXRhZGlyZWN0aXZlICh0cmVlKTsKK2V4dGVy biB0cmVlIG9tcF9yZXNvbHZlX21ldGFkaXJlY3RpdmUgKGdpbXBsZSAqKTsKIGV4dGVybiB0 cmVlIG9hY2NfbGF1bmNoX3BhY2sgKHVuc2lnbmVkIGNvZGUsIHRyZWUgZGV2aWNlLCB1bnNp Z25lZCBvcCk7CiBleHRlcm4gdHJlZSBvYWNjX3JlcGxhY2VfZm5fYXR0cmliX2F0dHIgKHRy ZWUgYXR0cmlicywgdHJlZSBkaW1zKTsKIGV4dGVybiB2b2lkIG9hY2NfcmVwbGFjZV9mbl9h dHRyaWIgKHRyZWUgZm4sIHRyZWUgZGltcyk7CmRpZmYgLS1naXQgYS9nY2Mvb21wLWxvdy5j IGIvZ2NjL29tcC1sb3cuYwppbmRleCBkMTEzNmQxODFiMy4uYzU0MDAwY2ZiOWQgMTAwNjQ0 Ci0tLSBhL2djYy9vbXAtbG93LmMKKysrIGIvZ2NjL29tcC1sb3cuYwpAQCAtMTc5LDYgKzE3 OSwxMCBAQCBzdHJ1Y3Qgb21wX2NvbnRleHQKICAgLyogT25seSB1c2VkIGZvciBvbXAgdGFy Z2V0IGNvbnRleHRzLiAgVHJ1ZSBpZiBhbiBPcGVuTVAgY29uc3RydWN0IG90aGVyCiAgICAg IHRoYW4gdGVhbXMgaXMgc3RyaWN0bHkgbmVzdGVkIGluIGl0LiAgKi8KICAgYm9vbCBub250 ZWFtc19uZXN0ZWRfcDsKKworICAvKiBPbmx5IHVzZWQgZm9yIG9tcCBtZXRhZGlyZWN0aXZl cy4gIExpbmtzIHRvIHRoZSBuZXh0IHNoYWxsb3cKKyAgICAgY2xvbmUgb2YgdGhpcyBjb250 ZXh0LiAgKi8KKyAgc3RydWN0IG9tcF9jb250ZXh0ICpuZXh0X2Nsb25lOwogfTsKIAogc3Rh dGljIHNwbGF5X3RyZWUgYWxsX2NvbnRleHRzOwpAQCAtOTY0LDYgKzk2OCw3IEBAIG5ld19v bXBfY29udGV4dCAoZ2ltcGxlICpzdG10LCBvbXBfY29udGV4dCAqb3V0ZXJfY3R4KQogICBz cGxheV90cmVlX2luc2VydCAoYWxsX2NvbnRleHRzLCAoc3BsYXlfdHJlZV9rZXkpIHN0bXQs CiAJCSAgICAgKHNwbGF5X3RyZWVfdmFsdWUpIGN0eCk7CiAgIGN0eC0+c3RtdCA9IHN0bXQ7 CisgIGN0eC0+bmV4dF9jbG9uZSA9IE5VTEw7CiAKICAgaWYgKG91dGVyX2N0eCkKICAgICB7 CkBAIC05OTMsNiArOTk4LDE3IEBAIG5ld19vbXBfY29udGV4dCAoZ2ltcGxlICpzdG10LCBv bXBfY29udGV4dCAqb3V0ZXJfY3R4KQogICByZXR1cm4gY3R4OwogfQogCitzdGF0aWMgb21w X2NvbnRleHQgKgorY2xvbmVfb21wX2NvbnRleHQgKG9tcF9jb250ZXh0ICpjdHgpCit7Cisg IG9tcF9jb250ZXh0ICpjbG9uZV9jdHggPSBYQ05FVyAob21wX2NvbnRleHQpOworCisgIG1l bWNweSAoY2xvbmVfY3R4LCBjdHgsIHNpemVvZiAob21wX2NvbnRleHQpKTsKKyAgY3R4LT5u ZXh0X2Nsb25lID0gY2xvbmVfY3R4OworCisgIHJldHVybiBjbG9uZV9jdHg7Cit9CisKIHN0 YXRpYyBnaW1wbGVfc2VxIG1heWJlX2NhdGNoX2V4Y2VwdGlvbiAoZ2ltcGxlX3NlcSk7CiAK IC8qIEZpbmFsaXplIHRhc2sgY29weWZuLiAgKi8KQEAgLTEwMzksNiArMTA1NSwxNCBAQCBk ZWxldGVfb21wX2NvbnRleHQgKHNwbGF5X3RyZWVfdmFsdWUgdmFsdWUpCiB7CiAgIG9tcF9j b250ZXh0ICpjdHggPSAob21wX2NvbnRleHQgKikgdmFsdWU7CiAKKyAgLyogRGVsZXRlIGNs b25lcy4gICovCisgIG9tcF9jb250ZXh0ICpjbG9uZSA9IGN0eC0+bmV4dF9jbG9uZTsKKyAg d2hpbGUgKGNsb25lKQorICAgIHsKKyAgICAgIGNsb25lID0gY2xvbmUtPm5leHRfY2xvbmU7 CisgICAgICBYREVMRVRFIChjbG9uZSk7CisgICAgfQorCiAgIGRlbGV0ZSBjdHgtPmNiLmRl Y2xfbWFwOwogCiAgIGlmIChjdHgtPmZpZWxkX21hcCkKQEAgLTEwNzMsNiArMTA5Nyw3IEBA IGRlbGV0ZV9vbXBfY29udGV4dCAoc3BsYXlfdHJlZV92YWx1ZSB2YWx1ZSkKICAgZGVsZXRl IGN0eC0+bGFzdHByaXZhdGVfY29uZGl0aW9uYWxfbWFwOwogICBkZWxldGUgY3R4LT5hbGxv Y2F0ZV9tYXA7CiAKKwogICBYREVMRVRFIChjdHgpOwogfQogCkBAIC0zMDA4LDYgKzMwMzMs MjMgQEAgc2Nhbl9vbXBfdGVhbXMgKGdvbXBfdGVhbXMgKnN0bXQsIG9tcF9jb250ZXh0ICpv dXRlcl9jdHgpCiAgICAgY3R4LT5yZWNvcmRfdHlwZSA9IGN0eC0+cmVjZWl2ZXJfZGVjbCA9 IE5VTEw7CiB9CiAKKy8qIFNjYW4gYW4gT3Blbk1QIG1ldGFkaXJlY3RpdmUuICAqLworCitz dGF0aWMgdm9pZAorc2Nhbl9vbXBfbWV0YWRpcmVjdGl2ZSAoZ29tcF9tZXRhZGlyZWN0aXZl ICpzdG10LCBvbXBfY29udGV4dCAqb3V0ZXJfY3R4KQoreworICBnb21wX21ldGFkaXJlY3Rp dmVfYm9keSAqYm9keSA9IGdpbXBsZV9vbXBfbWV0YWRpcmVjdGl2ZV9ib2RpZXMgKHN0bXQp OworCisgIHdoaWxlIChib2R5KQorICAgIHsKKyAgICAgIGdpbXBsZV9zZXEgKmJvZHlfcCA9 IGdpbXBsZV9vbXBfYm9keV9wdHIgKGJvZHkpOworICAgICAgb21wX2NvbnRleHQgKmN0eCA9 IG91dGVyX2N0eCA/IGNsb25lX29tcF9jb250ZXh0IChvdXRlcl9jdHgpIDogTlVMTDsKKyAg ICAgIHNjYW5fb21wIChib2R5X3AsIGN0eCk7CisKKyAgICAgIGJvZHkgPSAoZ29tcF9tZXRh ZGlyZWN0aXZlX2JvZHkgKikgYm9keS0+bmV4dDsKKyAgICB9Cit9CisKIC8qIENoZWNrIG5l c3RpbmcgcmVzdHJpY3Rpb25zLiAgKi8KIHN0YXRpYyBib29sCiBjaGVja19vbXBfbmVzdGlu Z19yZXN0cmljdGlvbnMgKGdpbXBsZSAqc3RtdCwgb21wX2NvbnRleHQgKmN0eCkKQEAgLTQw NDUsNiArNDA4NywxMCBAQCBzY2FuX29tcF8xX3N0bXQgKGdpbXBsZV9zdG10X2l0ZXJhdG9y ICpnc2ksIGJvb2wgKmhhbmRsZWRfb3BzX3AsCiAJc2Nhbl9vbXBfdGVhbXMgKGFzX2EgPGdv bXBfdGVhbXMgKj4gKHN0bXQpLCBjdHgpOwogICAgICAgYnJlYWs7CiAKKyAgICBjYXNlIEdJ TVBMRV9PTVBfTUVUQURJUkVDVElWRToKKyAgICAgIHNjYW5fb21wX21ldGFkaXJlY3RpdmUg KGFzX2EgPGdvbXBfbWV0YWRpcmVjdGl2ZSAqPiAoc3RtdCksIGN0eCk7CisgICAgICBicmVh azsKKwogICAgIGNhc2UgR0lNUExFX0JJTkQ6CiAgICAgICB7CiAJdHJlZSB2YXI7CkBAIC0x MDEyOSw2ICsxMDE3NSwyMiBAQCBsb3dlcl9vbXBfZm9yX2xhc3Rwcml2YXRlIChzdHJ1Y3Qg b21wX2Zvcl9kYXRhICpmZCwgZ2ltcGxlX3NlcSAqYm9keV9wLAogICAgIH0KIH0KIAorc3Rh dGljIHZvaWQKK2xvd2VyX29tcF9tZXRhZGlyZWN0aXZlIChnaW1wbGVfc3RtdF9pdGVyYXRv ciAqZ3NpX3AsIG9tcF9jb250ZXh0ICpjdHgpCit7CisgIGdpbXBsZSAqc3RtdCA9IGdzaV9z dG10ICgqZ3NpX3ApOworICBnb21wX21ldGFkaXJlY3RpdmVfYm9keSAqYm9keSA9IGdpbXBs ZV9vbXBfbWV0YWRpcmVjdGl2ZV9ib2RpZXMgKHN0bXQpOworICB3aGlsZSAoYm9keSkKKyAg ICB7CisgICAgICBnaW1wbGVfc2VxICpib2R5X3AgPSBnaW1wbGVfb21wX2JvZHlfcHRyIChi b2R5KTsKKyAgICAgIG9tcF9jb250ZXh0ICpjdHggPSBtYXliZV9sb29rdXBfY3R4ICgqYm9k eV9wKTsKKyAgICAgIGxvd2VyX29tcCAoYm9keV9wLCBjdHgpOworICAgICAgYm9keSA9IChn b21wX21ldGFkaXJlY3RpdmVfYm9keSAqKSAoYm9keS0+bmV4dCk7CisgICAgfQorICBnc2lf aW5zZXJ0X2FmdGVyIChnc2lfcCwgZ2ltcGxlX2J1aWxkX29tcF9yZXR1cm4gKHRydWUpLAor CQkgICAgR1NJX0NPTlRJTlVFX0xJTktJTkcpOworfQorCiAvKiBDYWxsYmFjayBmb3Igd2Fs a19naW1wbGVfc2VxLiAgRmluZCAjcHJhZ21hIG9tcCBzY2FuIHN0YXRlbWVudC4gICovCiAK IHN0YXRpYyB0cmVlCkBAIC0xMzQ3NCw2ICsxMzUzNiw5IEBAIGxvd2VyX29tcF8xIChnaW1w bGVfc3RtdF9pdGVyYXRvciAqZ3NpX3AsIG9tcF9jb250ZXh0ICpjdHgpCiAgICAgICBlbHNl CiAJbG93ZXJfb21wX3RlYW1zIChnc2lfcCwgY3R4KTsKICAgICAgIGJyZWFrOworICAgIGNh c2UgR0lNUExFX09NUF9NRVRBRElSRUNUSVZFOgorICAgICAgbG93ZXJfb21wX21ldGFkaXJl Y3RpdmUgKGdzaV9wLCBjdHgpOworICAgICAgYnJlYWs7CiAgICAgY2FzZSBHSU1QTEVfQ0FM TDoKICAgICAgIHRyZWUgZm5kZWNsOwogICAgICAgY2FsbF9zdG10ID0gYXNfYSA8Z2NhbGwg Kj4gKHN0bXQpOwpkaWZmIC0tZ2l0IGEvZ2NjL3Bhc3Nlcy5kZWYgYi9nY2MvcGFzc2VzLmRl ZgppbmRleCA5NDVkMmJjNzk3Yy4uOWFhZDQ5OGYyNjYgMTAwNjQ0Ci0tLSBhL2djYy9wYXNz ZXMuZGVmCisrKyBiL2djYy9wYXNzZXMuZGVmCkBAIC0xODYsNiArMTg2LDcgQEAgYWxvbmcg d2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKICAgTkVYVF9Q QVNTIChwYXNzX29hY2NfZGV2aWNlX2xvd2VyKTsKICAgTkVYVF9QQVNTIChwYXNzX29tcF9k ZXZpY2VfbG93ZXIpOwogICBORVhUX1BBU1MgKHBhc3Nfb21wX3RhcmdldF9saW5rKTsKKyAg TkVYVF9QQVNTIChwYXNzX29tcF9leHBhbmRfbWV0YWRpcmVjdGl2ZSk7CiAgIE5FWFRfUEFT UyAocGFzc19hZGp1c3RfYWxpZ25tZW50KTsKICAgTkVYVF9QQVNTIChwYXNzX2FsbF9vcHRp bWl6YXRpb25zKTsKICAgUFVTSF9JTlNFUlRfUEFTU0VTX1dJVEhJTiAocGFzc19hbGxfb3B0 aW1pemF0aW9ucykKZGlmZiAtLWdpdCBhL2djYy90cmVlLWNmZy5jIGIvZ2NjL3RyZWUtY2Zn LmMKaW5kZXggMDIyNTY1ODBjOTguLjUyNWU5NDVhMmQ3IDEwMDY0NAotLS0gYS9nY2MvdHJl ZS1jZmcuYworKysgYi9nY2MvdHJlZS1jZmcuYwpAQCAtMTY2OCw2ICsxNjY4LDIzIEBAIGNs ZWFudXBfZGVhZF9sYWJlbHMgKHZvaWQpCiAJICB9CiAJICBicmVhazsKIAorCWNhc2UgR0lN UExFX09NUF9NRVRBRElSRUNUSVZFOgorCSAgeworCSAgICBpbnQgaTsKKwkgICAgZm9yIChp ID0gMDsgaSA8IGdpbXBsZV9vbXBfbWV0YWRpcmVjdGl2ZV9udW1fY2xhdXNlcyAoc3RtdCk7 IGkrKykKKwkgICAgICB7CisJCWxhYmVsID0gZ2ltcGxlX29tcF9tZXRhZGlyZWN0aXZlX2xh YmVsIChzdG10LCBpKTsKKwkJbmV3X2xhYmVsID0gbWFpbl9ibG9ja19sYWJlbCAobGFiZWws IGxhYmVsX2Zvcl9iYik7CisJCWlmIChuZXdfbGFiZWwgIT0gbGFiZWwpCisJCSAgZ2ltcGxl X29tcF9tZXRhZGlyZWN0aXZlX3NldF9sYWJlbCAoc3RtdCwgaSwgbmV3X2xhYmVsKTsKKwkg ICAgICB9CisJICAgIGxhYmVsID0gZ2ltcGxlX29tcF9tZXRhZGlyZWN0aXZlX3N1Y2NfbGFi ZWwgKHN0bXQpOworCSAgICBuZXdfbGFiZWwgPSBtYWluX2Jsb2NrX2xhYmVsIChsYWJlbCwg bGFiZWxfZm9yX2JiKTsKKwkgICAgaWYgKG5ld19sYWJlbCAhPSBsYWJlbCkKKwkgICAgICBn aW1wbGVfb21wX21ldGFkaXJlY3RpdmVfc2V0X3N1Y2NfbGFiZWwgKHN0bXQsIG5ld19sYWJl bCk7CisJICB9CisJICBicmVhazsKKwogCWRlZmF1bHQ6CiAJICBicmVhazsKICAgICAgIH0K QEAgLTYwNzgsNiArNjA5NSwyMiBAQCBnaW1wbGVfcmVkaXJlY3RfZWRnZV9hbmRfYnJhbmNo IChlZGdlIGUsIGJhc2ljX2Jsb2NrIGRlc3QpCiAJCQkJICAgICAgICAgICBnaW1wbGVfYmxv Y2tfbGFiZWwgKGRlc3QpKTsKICAgICAgIGJyZWFrOwogCisgICAgY2FzZSBHSU1QTEVfT01Q X01FVEFESVJFQ1RJVkU6CisgICAgICB7CisJZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGdp bXBsZV9vbXBfbWV0YWRpcmVjdGl2ZV9udW1fY2xhdXNlcyAoc3RtdCk7IGkrKykKKwkgIHsK KwkgICAgdHJlZSBsYWJlbCA9IGdpbXBsZV9vbXBfbWV0YWRpcmVjdGl2ZV9sYWJlbCAoc3Rt dCwgaSk7CisJICAgIGlmIChsYWJlbF90b19ibG9jayAoY2Z1biwgbGFiZWwpID09IGUtPmRl c3QpCisJICAgICAgZ2ltcGxlX29tcF9tZXRhZGlyZWN0aXZlX3NldF9sYWJlbCAoc3RtdCwg aSwKKwkJCQkJCSAgZ2ltcGxlX2Jsb2NrX2xhYmVsIChkZXN0KSk7CisJICB9CisJdHJlZSBs YWJlbCA9IGdpbXBsZV9vbXBfbWV0YWRpcmVjdGl2ZV9zdWNjX2xhYmVsIChzdG10KTsKKwlp ZiAobGFiZWxfdG9fYmxvY2sgKGNmdW4sIGxhYmVsKSA9PSBlLT5kZXN0KQorCSAgZ2ltcGxl X29tcF9tZXRhZGlyZWN0aXZlX3NldF9zdWNjX2xhYmVsIChzdG10LAorCQkJCQkJICAgZ2lt cGxlX2Jsb2NrX2xhYmVsIChkZXN0KSk7CisgICAgICB9CisgICAgICBicmVhazsKKwogICAg IGRlZmF1bHQ6CiAgICAgICAvKiBPdGhlcndpc2UgaXQgbXVzdCBiZSBhIGZhbGx0aHJ1IGVk Z2UsIGFuZCB3ZSBkb24ndCBuZWVkIHRvCiAJIGRvIGFueXRoaW5nIGJlc2lkZXMgcmVkaXJl Y3RpbmcgaXQuICAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtaW5saW5lLmMgYi9nY2MvdHJl ZS1pbmxpbmUuYwppbmRleCA4Zjk0NWI4OGMxMi4uM2EyMTI2OGI5M2IgMTAwNjQ0Ci0tLSBh L2djYy90cmVlLWlubGluZS5jCisrKyBiL2djYy90cmVlLWlubGluZS5jCkBAIC00NTM0LDYg KzQ1MzQsMTIgQEAgZXN0aW1hdGVfbnVtX2luc25zIChnaW1wbGUgKnN0bXQsIGVuaV93ZWln aHRzICp3ZWlnaHRzKQogICAgICAgcmV0dXJuICh3ZWlnaHRzLT5vbXBfY29zdAogICAgICAg ICAgICAgICArIGVzdGltYXRlX251bV9pbnNuc19zZXEgKGdpbXBsZV9vbXBfYm9keSAoc3Rt dCksIHdlaWdodHMpKTsKIAorICAgIGNhc2UgR0lNUExFX09NUF9NRVRBRElSRUNUSVZFOgor ICAgICAgLyogVGhlIGFjdHVhbCBpbnN0cnVjdGlvbiB3aWxsIGRpc2FwcGVhciBldmVudHVh bGx5LCBzbyBtZXRhZGlyZWN0aXZlCisJIHN0YXRlbWVudHMgaGF2ZSB6ZXJvIGNvc3QuICAq LworICAgICAgZ2NjX2Fzc2VydCAoZ2ltcGxlX29tcF9ib2R5IChzdG10KSA9PSBOVUxMKTsK KyAgICAgIHJldHVybiAwOworCiAgICAgY2FzZSBHSU1QTEVfVFJBTlNBQ1RJT046CiAgICAg ICByZXR1cm4gKHdlaWdodHMtPnRtX2Nvc3QKIAkgICAgICArIGVzdGltYXRlX251bV9pbnNu c19zZXEgKGdpbXBsZV90cmFuc2FjdGlvbl9ib2R5ICgKZGlmZiAtLWdpdCBhL2djYy90cmVl LXBhc3MuaCBiL2djYy90cmVlLXBhc3MuaAppbmRleCAxNTY5M2ZlZTE1MC4uYzAyZGRhODlm NmEgMTAwNjQ0Ci0tLSBhL2djYy90cmVlLXBhc3MuaAorKysgYi9nY2MvdHJlZS1wYXNzLmgK QEAgLTQxOCw2ICs0MTgsNyBAQCBleHRlcm4gZ2ltcGxlX29wdF9wYXNzICptYWtlX3Bhc3Nf bG93ZXJfc3dpdGNoX08wIChnY2M6OmNvbnRleHQgKmN0eHQpOwogZXh0ZXJuIGdpbXBsZV9v cHRfcGFzcyAqbWFrZV9wYXNzX2xvd2VyX3ZlY3RvciAoZ2NjOjpjb250ZXh0ICpjdHh0KTsK IGV4dGVybiBnaW1wbGVfb3B0X3Bhc3MgKm1ha2VfcGFzc19sb3dlcl92ZWN0b3Jfc3NhIChn Y2M6OmNvbnRleHQgKmN0eHQpOwogZXh0ZXJuIGdpbXBsZV9vcHRfcGFzcyAqbWFrZV9wYXNz X29tcF9vYWNjX2tlcm5lbHNfZGVjb21wb3NlIChnY2M6OmNvbnRleHQgKmN0eHQpOworZXh0 ZXJuIGdpbXBsZV9vcHRfcGFzcyAqbWFrZV9wYXNzX29tcF9leHBhbmRfbWV0YWRpcmVjdGl2 ZSAoZ2NjOjpjb250ZXh0ICpjdHh0KTsKIGV4dGVybiBnaW1wbGVfb3B0X3Bhc3MgKm1ha2Vf cGFzc19sb3dlcl9vbXAgKGdjYzo6Y29udGV4dCAqY3R4dCk7CiBleHRlcm4gZ2ltcGxlX29w dF9wYXNzICptYWtlX3Bhc3NfZGlhZ25vc2Vfb21wX2Jsb2NrcyAoZ2NjOjpjb250ZXh0ICpj dHh0KTsKIGV4dGVybiBnaW1wbGVfb3B0X3Bhc3MgKm1ha2VfcGFzc19leHBhbmRfb21wIChn Y2M6OmNvbnRleHQgKmN0eHQpOwpkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtcHJldHR5LXByaW50 LmMgYi9nY2MvdHJlZS1wcmV0dHktcHJpbnQuYwppbmRleCAwYTU3NWViOWRhZC4uNWI2MDFh MzAzYzYgMTAwNjQ0Ci0tLSBhL2djYy90cmVlLXByZXR0eS1wcmludC5jCisrKyBiL2djYy90 cmVlLXByZXR0eS1wcmludC5jCkBAIC0zNjI2LDYgKzM2MjYsMzQgQEAgZHVtcF9nZW5lcmlj X25vZGUgKHByZXR0eV9wcmludGVyICpwcCwgdHJlZSBub2RlLCBpbnQgc3BjLCBkdW1wX2Zs YWdzX3QgZmxhZ3MsCiAgICAgICBpc19leHByID0gZmFsc2U7CiAgICAgICBicmVhazsKIAor ICAgIGNhc2UgT01QX01FVEFESVJFQ1RJVkU6CisgICAgICB7CisJcHBfc3RyaW5nIChwcCwg IiNwcmFnbWEgb21wIG1ldGFkaXJlY3RpdmUiKTsKKwluZXdsaW5lX2FuZF9pbmRlbnQgKHBw LCBzcGMgKyAyKTsKKwlwcF9sZWZ0X2JyYWNlIChwcCk7CisKKwl0cmVlIGNsYXVzZSA9IE9N UF9NRVRBRElSRUNUSVZFX0NMQVVTRVMgKG5vZGUpOworCXdoaWxlIChjbGF1c2UgIT0gTlVM TF9UUkVFKQorCSAgeworCSAgICBuZXdsaW5lX2FuZF9pbmRlbnQgKHBwLCBzcGMgKyA0KTsK KwkgICAgaWYgKFRSRUVfUFVSUE9TRSAoY2xhdXNlKSA9PSBOVUxMX1RSRUUpCisJICAgICAg cHBfc3RyaW5nIChwcCwgImRlZmF1bHQ6Iik7CisJICAgIGVsc2UKKwkgICAgICB7CisJCXBw X3N0cmluZyAocHAsICJ3aGVuICgiKTsKKwkJZHVtcF9nZW5lcmljX25vZGUgKHBwLCBUUkVF X1BVUlBPU0UgKGNsYXVzZSksIHNwYyArIDQsIGZsYWdzLAorCQkJCSAgIGZhbHNlKTsKKwkJ cHBfc3RyaW5nIChwcCwgIik6Iik7CisJICAgICAgfQorCSAgICBuZXdsaW5lX2FuZF9pbmRl bnQgKHBwLCBzcGMgKyA2KTsKKwkgICAgZHVtcF9nZW5lcmljX25vZGUgKHBwLCBUUkVFX1ZB TFVFIChjbGF1c2UpLCBzcGMgKyA2LCBmbGFncywgZmFsc2UpOworCSAgICBjbGF1c2UgPSBU UkVFX0NIQUlOIChjbGF1c2UpOworCSAgfQorCW5ld2xpbmVfYW5kX2luZGVudCAocHAsIHNw YyArIDIpOworCXBwX3JpZ2h0X2JyYWNlIChwcCk7CisgICAgICB9CisgICAgICBicmVhazsK KwogICAgIGNhc2UgVFJBTlNBQ1RJT05fRVhQUjoKICAgICAgIGlmIChUUkFOU0FDVElPTl9F WFBSX09VVEVSIChub2RlKSkKIAlwcF9zdHJpbmcgKHBwLCAiX190cmFuc2FjdGlvbl9hdG9t aWMgW1tvdXRlcl1dIik7CmRpZmYgLS1naXQgYS9nY2MvdHJlZS1zc2Etb3BlcmFuZHMuYyBi L2djYy90cmVlLXNzYS1vcGVyYW5kcy5jCmluZGV4IGMxNTU3NTQxNmRkLi5lZTI2NDUxZDcx NyAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUtc3NhLW9wZXJhbmRzLmMKKysrIGIvZ2NjL3RyZWUt c3NhLW9wZXJhbmRzLmMKQEAgLTk3OCw2ICs5NzgsOSBAQCBvcGVyYW5kc19zY2FubmVyOjpw YXJzZV9zc2Ffb3BlcmFuZHMgKCkKICAgICAgIGFwcGVuZF92dXNlIChnaW1wbGVfdm9wIChm bikpOwogICAgICAgZ290byBkb19kZWZhdWx0OwogCisgICAgY2FzZSBHSU1QTEVfT01QX01F VEFESVJFQ1RJVkU6CisgICAgICBicmVhazsKKwogICAgIGNhc2UgR0lNUExFX0NBTEw6CiAg ICAgICAvKiBBZGQgY2FsbC1jbG9iYmVyZWQgb3BlcmFuZHMsIGlmIG5lZWRlZC4gICovCiAg ICAgICBtYXliZV9hZGRfY2FsbF92b3BzIChhc19hIDxnY2FsbCAqPiAoc3RtdCkpOwpkaWZm IC0tZ2l0IGEvZ2NjL3RyZWUuZGVmIGIvZ2NjL3RyZWUuZGVmCmluZGV4IGVkYTA1MGJkYzU1 Li45ZDUwYzczOTUzOSAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUuZGVmCisrKyBiL2djYy90cmVl LmRlZgpAQCAtMTI2NCw2ICsxMjY0LDExIEBAIERFRlRSRUVDT0RFIChPTVBfVEFSR0VUX0VO VEVSX0RBVEEsICJvbXBfdGFyZ2V0X2VudGVyX2RhdGEiLCB0Y2Nfc3RhdGVtZW50LCAxKQog ICAgT3BlcmFuZCAwOiBPTVBfVEFSR0VUX0VYSVRfREFUQV9DTEFVU0VTOiBMaXN0IG9mIGNs YXVzZXMuICAqLwogREVGVFJFRUNPREUgKE9NUF9UQVJHRVRfRVhJVF9EQVRBLCAib21wX3Rh cmdldF9leGl0X2RhdGEiLCB0Y2Nfc3RhdGVtZW50LCAxKQogCisvKiBPcGVuTVAgLSAjcHJh Z21hIG9tcCBtZXRhZGlyZWN0aXZlIFtjbGF1c2UxIC4uLiBjbGF1c2VOXQorICAgT3BlcmFu ZCAwOiBPTVBfTUVUQURJUkVDVElWRV9DTEFVU0VTOiBMaXN0IG9mIHNlbGVjdG9ycyBhbmQg ZGlyZWN0aXZlCisJdmFyaWFudHMuICAqLworREVGVFJFRUNPREUgKE9NUF9NRVRBRElSRUNU SVZFLCAib21wX21ldGFkaXJlY3RpdmUiLCB0Y2Nfc3RhdGVtZW50LCAxKQorCiAvKiBPTVBf QVRPTUlDIHRocm91Z2ggT01QX0FUT01JQ19DQVBUVVJFX05FVyBtdXN0IGJlIGNvbnNlY3V0 aXZlLAogICAgb3IgT01QX0FUT01JQ19TRVFfQ1NUIG5lZWRzIGFkanVzdGluZy4gICovCiAK ZGlmZiAtLWdpdCBhL2djYy90cmVlLmggYi9nY2MvdHJlZS5oCmluZGV4IDY0NjEyY2ZhMzY4 Li4wZDc0Y2M3NWNlMSAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUuaAorKysgYi9nY2MvdHJlZS5o CkBAIC0xNDU5LDYgKzE0NTksOSBAQCBjbGFzcyBhdXRvX3N1cHByZXNzX2xvY2F0aW9uX3dy YXBwZXJzCiAjZGVmaW5lIE9NUF9UQVJHRVRfRVhJVF9EQVRBX0NMQVVTRVMoTk9ERSlcCiAg IFRSRUVfT1BFUkFORCAoT01QX1RBUkdFVF9FWElUX0RBVEFfQ0hFQ0sgKE5PREUpLCAwKQog CisjZGVmaW5lIE9NUF9NRVRBRElSRUNUSVZFX0NMQVVTRVMoTk9ERSkgXAorICBUUkVFX09Q RVJBTkQgKE9NUF9NRVRBRElSRUNUSVZFX0NIRUNLIChOT0RFKSwgMCkKKwogI2RlZmluZSBP TVBfU0NBTl9CT0RZKE5PREUpCVRSRUVfT1BFUkFORCAoT01QX1NDQU5fQ0hFQ0sgKE5PREUp LCAwKQogI2RlZmluZSBPTVBfU0NBTl9DTEFVU0VTKE5PREUpCVRSRUVfT1BFUkFORCAoT01Q X1NDQU5fQ0hFQ0sgKE5PREUpLCAxKQogCg== --------------C9296576E93407F8DBC031D6--