From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 75692 invoked by alias); 25 Nov 2019 14:17:13 -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 75684 invoked by uid 89); 25 Nov 2019 14:17:13 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-12.7 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_2,RCVD_IN_DNSWL_NONE,SPF_HELO_PASS,SPF_PASS autolearn=ham version=3.3.1 spammy=changelogs, H*c:HHH X-HELO: NAM04-SN1-obe.outbound.protection.outlook.com Received: from mail-eopbgr700091.outbound.protection.outlook.com (HELO NAM04-SN1-obe.outbound.protection.outlook.com) (40.107.70.91) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 25 Nov 2019 14:17:11 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=bpkF2ESc2599SBiGiTbsUvGH8DwmsyrSuSWa0yps2a2zKoyCXeZ6TVHCrsumCVVg98BdgO0qrbtMy8suCXTuV1LX4jxPqgHBz1rBzqnbhpPGYfW5kQDGl6CaKHmzac6eCUBb6Zg2ARG5xAX30k2Eaxah3RIlUmbwO+a1EuvkzOhKLWSoQ5PAQN/C+aO3Ia9lJH2Zm3W0fJWPZi2HHiqiS19mPqWMbBUxu3G/CP/UARXYZAcHHw95vJpk6TuGCU21rci0FTDzjlU+ELZtpWu2kDT/myDe77/f3EiwtEpiZO+8ivGW/1ARFT3kAXmVYzezsGGcnrnhRWVpcXGklIMrzQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=rr1qsGMW+DOzN4vFrHZxOgTx6Yf/4hBZkJCpgJCTSY0=; b=BhHH3Z96ktE+nGS6FbTzAND8V8r9/era6eXo035nwvg5cgvjze0oWWkZ1h8byMoc9VSlbVwvDObzXgX+j0Smhc5HhCJrnKvkbmsiN1ycuqMp6oC3VOAUthbTcqfN+ZbSlUqqnq3oTn+o2JuWUpPKvDs32Sh92Ivfc3pqeybM6HXNevmogdqaqqa5i3Qa9aJFwGk4ztFVAVtduKjnK+7pKRE+/nrzHjwkPszG5HqyCxZGEvVcVHZpNXQo4dEtJGAXauntEAgfniUWChWlW8yvdTqOiPjdis1DUseiE5DIJM1FdtR0XQ/mf38svxpFuf1+T35RV1ZgnMluhm9WL1EvrQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=os.amperecomputing.com; dmarc=pass action=none header.from=os.amperecomputing.com; dkim=pass header.d=os.amperecomputing.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=os.amperecomputing.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=rr1qsGMW+DOzN4vFrHZxOgTx6Yf/4hBZkJCpgJCTSY0=; b=Tu99EVAP5SV0pko+4fXNyIanlWetopIGqI7/NxVnyiVMvRX24YBRAKA9tXt2MYBEOMDK682mpUfJSeJO/u9PncFmOwo+oyM4w96GWO1zZ+vThtTUyTFXS6aNNP8H/r05ruDsV7cOYG7FTUrHm7oX7dey8Bc43bWpapTxOz0l6BI= Received: from BYAPR01MB4869.prod.exchangelabs.com (20.177.226.139) by BYAPR01MB4822.prod.exchangelabs.com (20.177.228.12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2474.19; Mon, 25 Nov 2019 14:17:06 +0000 Received: from BYAPR01MB4869.prod.exchangelabs.com ([fe80::9d38:79f7:7ba4:bf96]) by BYAPR01MB4869.prod.exchangelabs.com ([fe80::9d38:79f7:7ba4:bf96%6]) with mapi id 15.20.2474.022; Mon, 25 Nov 2019 14:17:06 +0000 From: Feng Xue OS To: Martin Jambor , Jan Hubicka CC: luoxhu , "gcc-patches@gcc.gnu.org" Subject: Re: [PATCH] Support multi-versioning on self-recursive function (ipa/92133) Date: Mon, 25 Nov 2019 14:17:00 -0000 Message-ID: References: <20191114132346.r7m5kri6orassi5s@kam.mff.cuni.cz> <20191114152232.gfduf2xz63mifbkw@kam.mff.cuni.cz> <20191114203334.uhydecndfsq7xc5v@kam.mff.cuni.cz> , In-Reply-To: authentication-results: spf=none (sender IP is ) smtp.mailfrom=fxue@os.amperecomputing.com; x-ms-oob-tlc-oobclassifiers: OLM:7691; received-spf: None (protection.outlook.com: os.amperecomputing.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-ms-exchange-transport-forked: True Content-Type: multipart/mixed; boundary="_002_BYAPR01MB4869576853F1B76C31934161F74A0BYAPR01MB4869prod_" MIME-Version: 1.0 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: XaxiU1nPzyouVcGftG5g62xqJ8HPkN75Gq1QW/fISixsLLbLDVh/dw7xAmMBnkE0ZdXvzMwRPSHm2Iiurq/HSpPdIU5jNRjQ7cCo0+psiLo= X-IsSubscribed: yes X-SW-Source: 2019-11/txt/msg02325.txt.bz2 --_002_BYAPR01MB4869576853F1B76C31934161F74A0BYAPR01MB4869prod_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-length: 3847 Martin, Thanks for your review. I updated the patch with your comments. Feng --- 2019-11-15 Feng Xue PR ipa/92133 * doc/invoke.texi (ipa-cp-max-recursive-depth): Document new option. (ipa-cp-min-recursive-probability): Likewise. * params.opt (ipa-cp-max-recursive-depth): New. (ipa-cp-min-recursive-probability): Likewise. * ipa-cp.c (ipcp_lattice::add_value): Add two new parameters val_p and unlimited. (self_recursively_generated_p): New function. (get_val_across_arith_op): Likewise. (propagate_vals_across_arith_jfunc): Add constant propagation for self-recursive function. (incorporate_penalties): Do not penalize pure self-recursive function. (good_cloning_opportunity_p): Dump node_is_self_scc flag. (propagate_constants_topo): Set node_is_self_scc flag for cgraph node. (get_info_about_necessary_edges): Relax hotness check for edge to self-recursive function. * ipa-prop.h (ipa_node_params): Add new field node_is_self_scc. --- > The least important comment: Thanks for providing the ChangeLog but > sending ChangeLog in the patch itself makes it difficult for people to > apply the patch because the ChangeLog hunks will never apply cleanly. > That's why people send them in the email body when they email > gcc-patches. Hopefully we'll be putting ChangeLogs only into the commit > message soon and all of this will be a non-issue. Ok. >> + if (val_pos_p) >> + { >> + for (val =3D values; val && val !=3D *val_pos_p; val =3D val->nex= t); > Please put empty statements on a separate line (I think there is one > more in the patch IIRC). Done. >> + if (val_pos_p) >> + { >> + val->next =3D (*val_pos_p)->next; >> + (*val_pos_p)->next =3D val; >> + *val_pos_p =3D val; >> + } > I must say I am not a big fan of the val_pos_p parameter. Would simply > putting new values always at the end of the list work to reduce the > iterations? At this point the function has traversed all the values > already when searching if it is present, so it can remember the last > one and just add stuff after it. We need a parameter to record address of the added value, which will be used in constructing next one. To place new value at the end of list is a good i= dea, thus meaning of val_pos_p becomes simpler, it is only an out parameter now. >> + if (!src->val || cs->caller !=3D cs->callee->function_symbol () >> + || src->val =3D=3D val) >> + return false; > I'd suggest putting the condition calling function_symbol last. Original condition order can reduce unnecessary evaluations on src->val=3D= =3Dval, which is false in most situation, while cs->caller !=3D cs->callee->functio= n_symbol () is true.=20 >> + for (src_val =3D src_lat->values; src_val && src_val !=3D val; >> + src_val =3D src_val->next); > I think that GNU code style dictates that when a for does not fit on a > single line, the three bits have to be on a separate line each. Plus > please put the empty statement on its own line too. Done. >> +static tree >> +get_val_across_arith_op (enum tree_code opcode, >> + tree opnd1_type, >> + tree opnd2, >> + ipcp_value *src_val, >> + tree res_type) > The function should get at least a brief comment. Done. >> + for (ipcp_value_source *s =3D src_val->sources; s; >> + s =3D s->next) > I'm afraid you'll have to reformat this for loop too. Done. >> + if (self_recursively_generated_p (src_val)) >> + continue; > I think you are missing a necessary call to > dest_lat->set_contains_variable() here. Either call it or initialize > cstval to zero and call get_val_across_arith_op only when > self_recursively_generated_p returns false; Yes, this is a bug. Fixed. --_002_BYAPR01MB4869576853F1B76C31934161F74A0BYAPR01MB4869prod_ Content-Type: application/octet-stream; name="0001-Enable-recursive-function-versioning.patch" Content-Description: 0001-Enable-recursive-function-versioning.patch Content-Disposition: attachment; filename="0001-Enable-recursive-function-versioning.patch"; size=15207; creation-date="Mon, 25 Nov 2019 14:14:43 GMT"; modification-date="Mon, 25 Nov 2019 14:14:43 GMT" Content-Transfer-Encoding: base64 Content-length: 20614 RnJvbSA4ZTJmYThmOTdhODMyYzQxYTMyZGRjNTMxZDdkNWQ0MjZlZDFlZDE0 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBGZW5nIFh1ZSA8Znh1 ZUBvcy5hbXBlcmVjb21wdXRpbmcuY29tPgpEYXRlOiBUdWUsIDI0IFNlcCAy MDE5IDExOjQ4OjI2ICswODAwClN1YmplY3Q6IFtQQVRDSF0gRW5hYmxlIHJl Y3Vyc2l2ZSBmdW5jdGlvbiB2ZXJzaW9uaW5nCgotLS0KIGdjYy9kb2MvaW52 b2tlLnRleGkgICAgICAgICAgICAgICAgICAgIHwgICA3ICsKIGdjYy9pcGEt Y3AuYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMjIxICsrKysrKysr KysrKysrKysrKysrKystLS0KIGdjYy9pcGEtcHJvcC5oICAgICAgICAgICAg ICAgICAgICAgICAgIHwgICAyICsKIGdjYy9wYXJhbXMub3B0ICAgICAgICAg ICAgICAgICAgICAgICAgIHwgICA4ICsKIGdjYy90ZXN0c3VpdGUvZ2NjLmRn L2lwYS9pcGEtY2xvbmUtMi5jIHwgIDQ3ICsrKysrKwogNSBmaWxlcyBjaGFu Z2VkLCAyNTggaW5zZXJ0aW9ucygrKSwgMjcgZGVsZXRpb25zKC0pCiBjcmVh dGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvaXBhL2lwYS1j bG9uZS0yLmMKCmRpZmYgLS1naXQgYS9nY2MvZG9jL2ludm9rZS50ZXhpIGIv Z2NjL2RvYy9pbnZva2UudGV4aQppbmRleCA0MDNiZTQ3ZDg5My4uZDE2NWYz MWE4NjUgMTAwNjQ0Ci0tLSBhL2djYy9kb2MvaW52b2tlLnRleGkKKysrIGIv Z2NjL2RvYy9pbnZva2UudGV4aQpAQCAtMTIwMzUsNiArMTIwMzUsMTMgQEAg SVBBLUNQIGNhbGN1bGF0ZXMgaXRzIG93biBzY29yZSBvZiBjbG9uaW5nIHBy b2ZpdGFiaWxpdHkgaGV1cmlzdGljcwogYW5kIHBlcmZvcm1zIHRob3NlIGNs b25pbmcgb3Bwb3J0dW5pdGllcyB3aXRoIHNjb3JlcyB0aGF0IGV4Y2VlZAog QG9wdGlvbntpcGEtY3AtZXZhbC10aHJlc2hvbGR9LgogCitAaXRlbSBpcGEt Y3AtbWF4LXJlY3Vyc2l2ZS1kZXB0aAorTWF4aW11bSBkZXB0aCBvZiByZWN1 cnNpdmUgY2xvbmluZyBmb3Igc2VsZi1yZWN1cnNpdmUgZnVuY3Rpb24uCisK K0BpdGVtIGlwYS1jcC1taW4tcmVjdXJzaXZlLXByb2JhYmlsaXR5CitSZWN1 cnNpdmUgY2xvbmluZyBvbmx5IHdoZW4gdGhlIHByb2JhYmlsaXR5IG9mIGNh bGwgYmVpbmcgZXhlY3V0ZWQgZXhjZWVkcwordGhlIHBhcmFtZXRlci4KKwog QGl0ZW0gaXBhLWNwLXJlY3Vyc2lvbi1wZW5hbHR5CiBQZXJjZW50YWdlIHBl bmFsdHkgdGhlIHJlY3Vyc2l2ZSBmdW5jdGlvbnMgd2lsbCByZWNlaXZlIHdo ZW4gdGhleQogYXJlIGV2YWx1YXRlZCBmb3IgY2xvbmluZy4KZGlmZiAtLWdp dCBhL2djYy9pcGEtY3AuYyBiL2djYy9pcGEtY3AuYwppbmRleCAzMWE5OGEz ZDk4YS4uZjU4YzJiNGZlOTMgMTAwNjQ0Ci0tLSBhL2djYy9pcGEtY3AuYwor KysgYi9nY2MvaXBhLWNwLmMKQEAgLTIyOCw3ICsyMjgsOSBAQCBwdWJsaWM6 CiAgIGlubGluZSBib29sIHNldF9jb250YWluc192YXJpYWJsZSAoKTsKICAg Ym9vbCBhZGRfdmFsdWUgKHZhbHR5cGUgbmV3dmFsLCBjZ3JhcGhfZWRnZSAq Y3MsCiAJCSAgaXBjcF92YWx1ZTx2YWx0eXBlPiAqc3JjX3ZhbCA9IE5VTEws Ci0JCSAgaW50IHNyY19pZHggPSAwLCBIT1NUX1dJREVfSU5UIG9mZnNldCA9 IC0xKTsKKwkJICBpbnQgc3JjX2lkeCA9IDAsIEhPU1RfV0lERV9JTlQgb2Zm c2V0ID0gLTEsCisJCSAgaXBjcF92YWx1ZTx2YWx0eXBlPiAqKnZhbF9wID0g TlVMTCwKKwkJICBib29sIHVubGltaXRlZCA9IGZhbHNlKTsKICAgdm9pZCBw cmludCAoRklMRSAqIGYsIGJvb2wgZHVtcF9zb3VyY2VzLCBib29sIGR1bXBf YmVuZWZpdHMpOwogfTsKIApAQCAtMTgxNywyMiArMTgxOSwzMiBAQCBhbGxv Y2F0ZV9hbmRfaW5pdF9pcGNwX3ZhbHVlIChpcGFfcG9seW1vcnBoaWNfY2Fs bF9jb250ZXh0IHNvdXJjZSkKIC8qIFRyeSB0byBhZGQgTkVXVkFMIHRvIExB VCwgcG90ZW50aWFsbHkgY3JlYXRpbmcgYSBuZXcgaXBjcF92YWx1ZSBmb3Ig aXQuICBDUywKICAgIFNSQ19WQUwgU1JDX0lOREVYIGFuZCBPRkZTRVQgYXJl IG1lYW50IGZvciBhZGRfc291cmNlIGFuZCBoYXZlIHRoZSBzYW1lCiAgICBt ZWFuaW5nLiAgT0ZGU0VUIC0xIG1lYW5zIHRoZSBzb3VyY2UgaXMgc2NhbGFy IGFuZCBub3QgYSBwYXJ0IG9mIGFuCi0gICBhZ2dyZWdhdGUuICAqLworICAg YWdncmVnYXRlLiAgSWYgbm9uLU5VTEwsIFZBTF9QIHJlY29yZHMgYWRkcmVz cyBvZiBleGlzdGluZyBvciBuZXdseSBhZGRlZAorICAgaXBjcF92YWx1ZS4g IFVOTElNSVRFRCBtZWFucyB3aGV0aGVyIHZhbHVlIGNvdW50IHNob3VsZCBu b3QgZXhjZWVkIHRoZSBsaW1pdAorICAgZ2l2ZW4gYnkgUEFSQU1fSVBBX0NQ X1ZBTFVFX0xJU1RfU0laRS4gICovCiAKIHRlbXBsYXRlIDx0eXBlbmFtZSB2 YWx0eXBlPgogYm9vbAogaXBjcF9sYXR0aWNlPHZhbHR5cGU+OjphZGRfdmFs dWUgKHZhbHR5cGUgbmV3dmFsLCBjZ3JhcGhfZWRnZSAqY3MsCiAJCQkJICBp cGNwX3ZhbHVlPHZhbHR5cGU+ICpzcmNfdmFsLAotCQkJCSAgaW50IHNyY19p ZHgsIEhPU1RfV0lERV9JTlQgb2Zmc2V0KQorCQkJCSAgaW50IHNyY19pZHgs IEhPU1RfV0lERV9JTlQgb2Zmc2V0LAorCQkJCSAgaXBjcF92YWx1ZTx2YWx0 eXBlPiAqKnZhbF9wLAorCQkJCSAgYm9vbCB1bmxpbWl0ZWQpCiB7Ci0gIGlw Y3BfdmFsdWU8dmFsdHlwZT4gKnZhbDsKKyAgaXBjcF92YWx1ZTx2YWx0eXBl PiAqdmFsLCAqbGFzdF92YWwgPSBOVUxMOworCisgIGlmICh2YWxfcCkKKyAg ICAqdmFsX3AgPSBOVUxMOwogCiAgIGlmIChib3R0b20pCiAgICAgcmV0dXJu IGZhbHNlOwogCi0gIGZvciAodmFsID0gdmFsdWVzOyB2YWw7IHZhbCA9IHZh bC0+bmV4dCkKKyAgZm9yICh2YWwgPSB2YWx1ZXM7IHZhbDsgbGFzdF92YWwg PSB2YWwsIHZhbCA9IHZhbC0+bmV4dCkKICAgICBpZiAodmFsdWVzX2VxdWFs X2Zvcl9pcGNwX3AgKHZhbC0+dmFsdWUsIG5ld3ZhbCkpCiAgICAgICB7CisJ aWYgKHZhbF9wKQorCSAgKnZhbF9wID0gdmFsOworCiAJaWYgKGlwYV9lZGdl X3dpdGhpbl9zY2MgKGNzKSkKIAkgIHsKIAkgICAgaXBjcF92YWx1ZV9zb3Vy Y2U8dmFsdHlwZT4gKnM7CkBAIC0xODQ3LDcgKzE4NTksNyBAQCBpcGNwX2xh dHRpY2U8dmFsdHlwZT46OmFkZF92YWx1ZSAodmFsdHlwZSBuZXd2YWwsIGNn cmFwaF9lZGdlICpjcywKIAlyZXR1cm4gZmFsc2U7CiAgICAgICB9CiAKLSAg aWYgKHZhbHVlc19jb3VudCA9PSBwYXJhbV9pcGFfY3BfdmFsdWVfbGlzdF9z aXplKQorICBpZiAoIXVubGltaXRlZCAmJiB2YWx1ZXNfY291bnQgPT0gcGFy YW1faXBhX2NwX3ZhbHVlX2xpc3Rfc2l6ZSkKICAgICB7CiAgICAgICAvKiBX ZSBjYW4gb25seSBmcmVlIHNvdXJjZXMsIG5vdCB0aGUgdmFsdWVzIHRoZW1z ZWx2ZXMsIGJlY2F1c2Ugc291cmNlcwogCSBvZiBvdGhlciB2YWx1ZXMgaW4g dGhpcyBTQ0MgbWlnaHQgcG9pbnQgdG8gdGhlbS4gICAqLwpAQCAtMTg2MCw3 ICsxODcyLDYgQEAgaXBjcF9sYXR0aWNlPHZhbHR5cGU+OjphZGRfdmFsdWUg KHZhbHR5cGUgbmV3dmFsLCBjZ3JhcGhfZWRnZSAqY3MsCiAJICAgICAgaXBj cF9zb3VyY2VzX3Bvb2wucmVtb3ZlICgoaXBjcF92YWx1ZV9zb3VyY2U8dHJl ZT4qKXNyYyk7CiAJICAgIH0KIAl9Ci0KICAgICAgIHZhbHVlcyA9IE5VTEw7 CiAgICAgICByZXR1cm4gc2V0X3RvX2JvdHRvbSAoKTsKICAgICB9CkBAIC0x ODY4LDExICsxODc5LDgxIEBAIGlwY3BfbGF0dGljZTx2YWx0eXBlPjo6YWRk X3ZhbHVlICh2YWx0eXBlIG5ld3ZhbCwgY2dyYXBoX2VkZ2UgKmNzLAogICB2 YWx1ZXNfY291bnQrKzsKICAgdmFsID0gYWxsb2NhdGVfYW5kX2luaXRfaXBj cF92YWx1ZSAobmV3dmFsKTsKICAgdmFsLT5hZGRfc291cmNlIChjcywgc3Jj X3ZhbCwgc3JjX2lkeCwgb2Zmc2V0KTsKLSAgdmFsLT5uZXh0ID0gdmFsdWVz OwotICB2YWx1ZXMgPSB2YWw7CisgIHZhbC0+bmV4dCA9IE5VTEw7CisKKyAg LyogQWRkIHRoZSBuZXcgdmFsdWUgdG8gZW5kIG9mIHZhbHVlIGxpc3QsIHdo aWNoIGNhbiByZWR1Y2UgaXRlcmF0aW9ucworICAgICBvZiBwcm9wYWdhdGlv biBzdGFnZSBmb3IgcmVjdXJzaXZlIGZ1bmN0aW9uLiAgKi8KKyAgaWYgKGxh c3RfdmFsKQorICAgIGxhc3RfdmFsLT5uZXh0ID0gdmFsOworICBlbHNlCisg ICAgdmFsdWVzID0gdmFsOworCisgIGlmICh2YWxfcCkKKyAgICAqdmFsX3Ag PSB2YWw7CisKKyAgcmV0dXJuIHRydWU7Cit9CisKKy8qIFJldHVybiB0cnVl LCBpZiBhIGlwY3BfdmFsdWUgVkFMIGlzIG9yZ2luYXRlZCBmcm9tIHBhcmFt ZXRlciB2YWx1ZSBvZgorICAgc2VsZi1mZWVkaW5nIHJlY3Vyc2l2ZSBmdW5j dGlvbiBieSBhcHBseWluZyBub24tcGFzc3Rocm91Z2ggYXJpdGhtZXRpYwor ICAgdHJhbnNmb3JtYXRpb24uICAqLworCitzdGF0aWMgYm9vbAorc2VsZl9y ZWN1cnNpdmVseV9nZW5lcmF0ZWRfcCAoaXBjcF92YWx1ZTx0cmVlPiAqdmFs KQoreworICBjbGFzcyBpcGFfbm9kZV9wYXJhbXMgKmluZm8gPSBOVUxMOwor CisgIGZvciAoaXBjcF92YWx1ZV9zb3VyY2U8dHJlZT4gKnNyYyA9IHZhbC0+ c291cmNlczsgc3JjOyBzcmMgPSBzcmMtPm5leHQpCisgICAgeworICAgICAg Y2dyYXBoX2VkZ2UgKmNzID0gc3JjLT5jczsKKworICAgICAgaWYgKCFzcmMt PnZhbCB8fCBjcy0+Y2FsbGVyICE9IGNzLT5jYWxsZWUtPmZ1bmN0aW9uX3N5 bWJvbCAoKQorCSAgfHwgc3JjLT52YWwgPT0gdmFsKQorCXJldHVybiBmYWxz ZTsKKworICAgICAgaWYgKCFpbmZvKQorCWluZm8gPSBJUEFfTk9ERV9SRUYg KGNzLT5jYWxsZXIpOworCisgICAgICBjbGFzcyBpcGNwX3BhcmFtX2xhdHRp Y2VzICpwbGF0cyA9IGlwYV9nZXRfcGFybV9sYXR0aWNlcyAoaW5mbywKKwkJ CQkJCQkJc3JjLT5pbmRleCk7CisgICAgICBpcGNwX2xhdHRpY2U8dHJlZT4g KnNyY19sYXQgPSBzcmMtPm9mZnNldCA9PSAtMSA/ICZwbGF0cy0+aXRzZWxm CisJCQkJCQkgICAgICA6IHBsYXRzLT5hZ2dzOworICAgICAgaXBjcF92YWx1 ZTx0cmVlPiAqc3JjX3ZhbDsKKworICAgICAgZm9yIChzcmNfdmFsID0gc3Jj X2xhdC0+dmFsdWVzOyBzcmNfdmFsOyBzcmNfdmFsID0gc3JjX3ZhbC0+bmV4 dCkKKwlpZiAoc3JjX3ZhbCA9PSB2YWwpCisJICBicmVhazsKKworICAgICAg aWYgKCFzcmNfdmFsKQorCXJldHVybiBmYWxzZTsKKyAgICB9CisKICAgcmV0 dXJuIHRydWU7CiB9CiAKKy8qIEEgaGVscGVyIGZ1bmN0aW9uIHRoYXQgcmV0 dXJucyByZXN1bHQgb2Ygb3BlcmF0aW9uIHNwZWNpZmllZCBieSBPUENPREUg b24KKyAgIHRoZSB2YWx1ZSBvZiBTUkNfVkFMLiAgSWYgbm9uLU5VTEwsIE9Q TkQxX1RZUEUgaXMgZXhwZWN0ZWQgdHlwZSBmb3IgdGhlCisgICB2YWx1ZSBv ZiBTUkNfVkFMLiAgSWYgdGhlIG9wZXJhdGlvbiBpcyBiaW5hcnksIE9QTkQy IGlzIGEgY29uc3RhbnQgdmFsdWUKKyAgIGFjdGluZyBhcyBpdHMgc2Vjb25k IG9wZXJhbmQuICBJZiBub24tTlVMTCwgUkVTX1RZUEUgaXMgZXhwZWN0ZWQg dHlwZSBvZgorICAgdGhlIHJlc3VsdC4gICovCisKK3N0YXRpYyB0cmVlCitn ZXRfdmFsX2Fjcm9zc19hcml0aF9vcCAoZW51bSB0cmVlX2NvZGUgb3Bjb2Rl LAorCQkJIHRyZWUgb3BuZDFfdHlwZSwKKwkJCSB0cmVlIG9wbmQyLAorCQkJ IGlwY3BfdmFsdWU8dHJlZT4gKnNyY192YWwsCisJCQkgdHJlZSByZXNfdHlw ZSkKK3sKKyAgdHJlZSBvcG5kMSA9IHNyY192YWwtPnZhbHVlOworCisgIC8q IFNraXAgc291cmNlIHZhbHVlcyB0aGF0IGlzIGluY29tcGF0aWJsZSB3aXRo IHNwZWNpZmllZCB0eXBlLiAgKi8KKyAgaWYgKG9wbmQxX3R5cGUKKyAgICAg ICYmICF1c2VsZXNzX3R5cGVfY29udmVyc2lvbl9wIChvcG5kMV90eXBlLCBU UkVFX1RZUEUgKG9wbmQxKSkpCisgICAgcmV0dXJuIE5VTExfVFJFRTsKKwor ICByZXR1cm4gaXBhX2dldF9qZl9hcml0aF9yZXN1bHQgKG9wY29kZSwgb3Bu ZDEsIG9wbmQyLCByZXNfdHlwZSk7Cit9CisKIC8qIFByb3BhZ2F0ZSB2YWx1 ZXMgdGhyb3VnaCBhbiBhcml0aG1ldGljIHRyYW5zZm9ybWF0aW9uIGRlc2Ny aWJlZCBieSBhIGp1bXAKICAgIGZ1bmN0aW9uIGFzc29jaWF0ZWQgd2l0aCBl ZGdlIENTLCB0YWtpbmcgdmFsdWVzIGZyb20gU1JDX0xBVCBhbmQgcHV0dGlu ZwogICAgdGhlbSBpbnRvIERFU1RfTEFULiAgT1BORDFfVFlQRSBpcyBleHBl Y3RlZCB0eXBlIGZvciB0aGUgdmFsdWVzIGluIFNSQ19MQVQuCkBAIC0xODk2 LDI0ICsxOTc3LDc2IEBAIHByb3BhZ2F0ZV92YWxzX2Fjcm9zc19hcml0aF9q ZnVuYyAoY2dyYXBoX2VkZ2UgKmNzLAogICBpcGNwX3ZhbHVlPHRyZWU+ICpz cmNfdmFsOwogICBib29sIHJldCA9IGZhbHNlOwogCi0gIC8qIERvIG5vdCBj cmVhdGUgbmV3IHZhbHVlcyB3aGVuIHByb3BhZ2F0aW5nIHdpdGhpbiBhbiBT Q0MgYmVjYXVzZSBpZiB0aGVyZQotICAgICBhcmUgYXJpdGhtZXRpYyBmdW5j dGlvbnMgd2l0aCBjaXJjdWxhciBkZXBlbmRlbmNpZXMsIHRoZXJlIGlzIGlu ZmluaXRlCi0gICAgIG51bWJlciBvZiB0aGVtIGFuZCB3ZSB3b3VsZCBqdXN0 IG1ha2UgbGF0dGljZXMgYm90dG9tLiAgSWYgdGhpcyBjb25kaXRpb24KLSAg ICAgaXMgZXZlciByZWxheGVkIHdlIGhhdmUgdG8gZGV0ZWN0IHNlbGYtZmVl ZGluZyByZWN1cnNpdmUgY2FsbHMgaW4KLSAgICAgY2dyYXBoX2VkZ2VfYnJp bmdzX3ZhbHVlX3AgaW4gYSBzbWFydGVyIHdheS4gICovCisgIC8qIER1ZSB0 byBjaXJjdWxhciBkZXBlbmRlbmNpZXMsIHByb3BhZ2F0aW5nIHdpdGhpbiBh biBTQ0MgdGhyb3VnaCBhcml0aG1ldGljCisgICAgIHRyYW5zZm9ybWF0aW9u IHdvdWxkIGNyZWF0ZSBpbmZpbml0ZSBudW1iZXIgb2YgdmFsdWVzLiAgQnV0 IGZvcgorICAgICBzZWxmLWZlZWRpbmcgcmVjdXJzaXZlIGZ1bmN0aW9uLCB3 ZSBjb3VsZCBhbGxvdyBwcm9wYWdhdGlvbiBpbiBhIGxpbWl0ZWQKKyAgICAg Y291bnQsIGFuZCB0aGlzIGNhbiBlbmFibGUgYSBzaW1wbGUga2luZCBvZiBy ZWN1cnNpdmUgZnVuY3Rpb24gdmVyc2lvbmluZy4KKyAgICAgRm9yIG90aGVy IHNjZW5hcmlvLCB3ZSB3b3VsZCBqdXN0IG1ha2UgbGF0dGljZXMgYm90dG9t LiAgKi8KICAgaWYgKG9wY29kZSAhPSBOT1BfRVhQUiAmJiBpcGFfZWRnZV93 aXRoaW5fc2NjIChjcykpCi0gICAgcmV0ID0gZGVzdF9sYXQtPnNldF9jb250 YWluc192YXJpYWJsZSAoKTsKKyAgICB7CisgICAgICBpbnQgaTsKKworICAg ICAgaWYgKHNyY19sYXQgIT0gZGVzdF9sYXQgfHwgcGFyYW1faXBhX2NwX21h eF9yZWN1cnNpdmVfZGVwdGggPCAxKQorCXJldHVybiBkZXN0X2xhdC0+c2V0 X2NvbnRhaW5zX3ZhcmlhYmxlICgpOworCisgICAgICAvKiBObyBiZW5lZml0 IGlmIHJlY3Vyc2l2ZSBleGVjdXRpb24gaXMgaW4gbG93IHByb2JhYmlsaXR5 LiAgKi8KKyAgICAgIGlmIChjcy0+c3JlYWxfZnJlcXVlbmN5ICgpICogMTAw CisJICA8PSAoKHNyZWFsKSAxKSAqIHBhcmFtX2lwYV9jcF9taW5fcmVjdXJz aXZlX3Byb2JhYmlsaXR5KQorCXJldHVybiBkZXN0X2xhdC0+c2V0X2NvbnRh aW5zX3ZhcmlhYmxlICgpOworCisgICAgICBhdXRvX3ZlYzxpcGNwX3ZhbHVl PHRyZWU+ICosIDg+IHZhbF9zZWVkczsKKworICAgICAgZm9yIChzcmNfdmFs ID0gc3JjX2xhdC0+dmFsdWVzOyBzcmNfdmFsOyBzcmNfdmFsID0gc3JjX3Zh bC0+bmV4dCkKKwl7CisJICAvKiBOb3cgd2UgZG8gbm90IHVzZSBzZWxmLXJl Y3Vyc2l2ZWx5IGdlbmVyYXRlZCB2YWx1ZSBhcyBwcm9wYWdhdGlvbgorCSAg ICAgc291cmNlLCB0aGlzIGlzIGFic29sdXRlbHkgY29uc2VydmF0aXZlLCBi dXQgY291bGQgYXZvaWQgZXhwbG9zaW9uCisJICAgICBvZiBsYXR0aWNlJ3Mg dmFsdWUgc3BhY2UsIGVzcGVjaWFsbHkgd2hlbiBvbmUgcmVjdXJzaXZlIGZ1 bmN0aW9uCisJICAgICBjYWxscyBhbm90aGVyIHJlY3Vyc2l2ZS4gICovCisJ ICBpZiAoc2VsZl9yZWN1cnNpdmVseV9nZW5lcmF0ZWRfcCAoc3JjX3ZhbCkp CisJICAgIHsKKwkgICAgICBpcGNwX3ZhbHVlX3NvdXJjZTx0cmVlPiAqczsK KworCSAgICAgIC8qIElmIHRoZSBsYXR0aWNlIGhhcyBhbHJlYWR5IGJlZW4g cHJvcGFnYXRlZCBmb3IgdGhlIGNhbGwgc2l0ZSwKKwkJIG5vIG5lZWQgdG8g ZG8gdGhhdCBhZ2Fpbi4gICovCisJICAgICAgZm9yIChzID0gc3JjX3ZhbC0+ c291cmNlczsgczsgcyA9IHMtPm5leHQpCisJCWlmIChzLT5jcyA9PSBjcykK KwkJICByZXR1cm4gZGVzdF9sYXQtPnNldF9jb250YWluc192YXJpYWJsZSAo KTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB2YWxfc2VlZHMuc2FmZV9wdXNo IChzcmNfdmFsKTsKKwl9CisKKyAgICAgIC8qIFJlY3Vyc2l2ZWx5IGdlbmVy YXRlIGxhdHRpY2UgdmFsdWVzIHdpdGggYSBsaW1pdGVkIGNvdW50LiAgKi8K KyAgICAgIEZPUl9FQUNIX1ZFQ19FTFQgKHZhbF9zZWVkcywgaSwgc3JjX3Zh bCkKKwl7CisJICBmb3IgKGludCBqID0gMTsgaiA8IHBhcmFtX2lwYV9jcF9t YXhfcmVjdXJzaXZlX2RlcHRoOyBqKyspCisJICAgIHsKKwkgICAgICB0cmVl IGNzdHZhbCA9IGdldF92YWxfYWNyb3NzX2FyaXRoX29wIChvcGNvZGUsIG9w bmQxX3R5cGUsIG9wbmQyLAorCQkJCQkJICAgICBzcmNfdmFsLCByZXNfdHlw ZSk7CisJICAgICAgaWYgKCFjc3R2YWwpCisJCWJyZWFrOworCisJICAgICAg cmV0IHw9IGRlc3RfbGF0LT5hZGRfdmFsdWUgKGNzdHZhbCwgY3MsIHNyY192 YWwsIHNyY19pZHgsCisJCQkJCSAgc3JjX29mZnNldCwgJnNyY192YWwsIHRy dWUpOworCSAgICAgIGdjY19jaGVja2luZ19hc3NlcnQgKHNyY192YWwpOwor CSAgICB9CisJfQorICAgICAgcmV0IHw9IGRlc3RfbGF0LT5zZXRfY29udGFp bnNfdmFyaWFibGUgKCk7CisgICAgfQogICBlbHNlCiAgICAgZm9yIChzcmNf dmFsID0gc3JjX2xhdC0+dmFsdWVzOyBzcmNfdmFsOyBzcmNfdmFsID0gc3Jj X3ZhbC0+bmV4dCkKICAgICAgIHsKLQl0cmVlIG9wbmQxID0gc3JjX3ZhbC0+ dmFsdWU7Ci0JdHJlZSBjc3R2YWwgPSBOVUxMX1RSRUU7Ci0KLQkvKiBTa2lw IHNvdXJjZSB2YWx1ZXMgdGhhdCBpcyBpbmNvbXBhdGlibGUgd2l0aCBzcGVj aWZpZWQgdHlwZS4gICovCi0JaWYgKCFvcG5kMV90eXBlCi0JICAgIHx8IHVz ZWxlc3NfdHlwZV9jb252ZXJzaW9uX3AgKG9wbmQxX3R5cGUsIFRSRUVfVFlQ RSAob3BuZDEpKSkKLQkgIGNzdHZhbCA9IGlwYV9nZXRfamZfYXJpdGhfcmVz dWx0IChvcGNvZGUsIG9wbmQxLCBvcG5kMiwgcmVzX3R5cGUpOworCS8qIE5v dyB3ZSBkbyBub3QgdXNlIHNlbGYtcmVjdXJzaXZlbHkgZ2VuZXJhdGVkIHZh bHVlIGFzIHByb3BhZ2F0aW9uCisJICAgc291cmNlLCBvdGhlcndpc2UgaXQg aXMgZWFzeSB0byBtYWtlIHZhbHVlIHNwYWNlIG9mIG5vcm1hbCBsYXR0aWNl CisJICAgb3ZlcmZsb3cuICAqLworCWlmIChzZWxmX3JlY3Vyc2l2ZWx5X2dl bmVyYXRlZF9wIChzcmNfdmFsKSkKKwkgIHsKKwkgICAgcmV0IHw9IGRlc3Rf bGF0LT5zZXRfY29udGFpbnNfdmFyaWFibGUgKCk7CisJICAgIGNvbnRpbnVl OworCSAgfQogCisJdHJlZSBjc3R2YWwgPSBnZXRfdmFsX2Fjcm9zc19hcml0 aF9vcCAob3Bjb2RlLCBvcG5kMV90eXBlLCBvcG5kMiwKKwkJCQkJICAgICAg IHNyY192YWwsIHJlc190eXBlKTsKIAlpZiAoY3N0dmFsKQogCSAgcmV0IHw9 IGRlc3RfbGF0LT5hZGRfdmFsdWUgKGNzdHZhbCwgY3MsIHNyY192YWwsIHNy Y19pZHgsCiAJCQkJICAgICAgc3JjX29mZnNldCk7CkBAIC0zMDM4LDcgKzMx NzEsNyBAQCBoaW50X3RpbWVfYm9udXMgKGlwYV9oaW50cyBoaW50cykKIHN0 YXRpYyBpbmxpbmUgaW50NjRfdAogaW5jb3Jwb3JhdGVfcGVuYWx0aWVzIChp cGFfbm9kZV9wYXJhbXMgKmluZm8sIGludDY0X3QgZXZhbHVhdGlvbikKIHsK LSAgaWYgKGluZm8tPm5vZGVfd2l0aGluX3NjYykKKyAgaWYgKGluZm8tPm5v ZGVfd2l0aGluX3NjYyAmJiAhaW5mby0+bm9kZV9pc19zZWxmX3NjYykKICAg ICBldmFsdWF0aW9uID0gKGV2YWx1YXRpb24KIAkJICAqICgxMDAgLSBwYXJh bV9pcGFfY3BfcmVjdXJzaW9uX3BlbmFsdHkpKSAvIDEwMDsKIApAQCAtMzA4 Miw3ICszMjE1LDggQEAgZ29vZF9jbG9uaW5nX29wcG9ydHVuaXR5X3AgKHN0 cnVjdCBjZ3JhcGhfbm9kZSAqbm9kZSwgaW50IHRpbWVfYmVuZWZpdCwKIAkg IGNvdW50X3N1bS5kdW1wIChkdW1wX2ZpbGUpOwogCSAgZnByaW50ZiAoZHVt cF9maWxlLCAiJXMlcykgLT4gZXZhbHVhdGlvbjogIiAiJSIgUFJJZDY0CiAJ CSAiLCB0aHJlc2hvbGQ6ICVpXG4iLAotCQkgaW5mby0+bm9kZV93aXRoaW5f c2NjID8gIiwgc2NjIiA6ICIiLAorCQkgaW5mby0+bm9kZV93aXRoaW5fc2Nj CisJCSAgID8gKGluZm8tPm5vZGVfaXNfc2VsZl9zY2MgPyAiLCBzZWxmX3Nj YyIgOiAiLCBzY2MiKSA6ICIiLAogCQkgaW5mby0+bm9kZV9jYWxsaW5nX3Np bmdsZV9jYWxsID8gIiwgc2luZ2xlX2NhbGwiIDogIiIsCiAJCSBldmFsdWF0 aW9uLCBwYXJhbV9pcGFfY3BfZXZhbF90aHJlc2hvbGQpOwogCX0KQEAgLTMx MDAsNyArMzIzNCw4IEBAIGdvb2RfY2xvbmluZ19vcHBvcnR1bml0eV9wIChz dHJ1Y3QgY2dyYXBoX25vZGUgKm5vZGUsIGludCB0aW1lX2JlbmVmaXQsCiAJ CSAic2l6ZTogJWksIGZyZXFfc3VtOiAlaSVzJXMpIC0+IGV2YWx1YXRpb246 ICIKIAkJICIlIiBQUklkNjQgIiwgdGhyZXNob2xkOiAlaVxuIiwKIAkJIHRp bWVfYmVuZWZpdCwgc2l6ZV9jb3N0LCBmcmVxX3N1bSwKLQkJIGluZm8tPm5v ZGVfd2l0aGluX3NjYyA/ICIsIHNjYyIgOiAiIiwKKwkJIGluZm8tPm5vZGVf d2l0aGluX3NjYworCQkgICA/IChpbmZvLT5ub2RlX2lzX3NlbGZfc2NjID8g Iiwgc2VsZl9zY2MiIDogIiwgc2NjIikgOiAiIiwKIAkJIGluZm8tPm5vZGVf Y2FsbGluZ19zaW5nbGVfY2FsbCA/ICIsIHNpbmdsZV9jYWxsIiA6ICIiLAog CQkgZXZhbHVhdGlvbiwgcGFyYW1faXBhX2NwX2V2YWxfdGhyZXNob2xkKTsK IApAQCAtMzU5NCwxNCArMzcyOSwzMCBAQCBwcm9wYWdhdGVfY29uc3RhbnRz X3RvcG8gKGNsYXNzIGlwYV90b3BvX2luZm8gKnRvcG8pCiAgICAgICB3aGls ZSAodikKIAl7CiAJICBzdHJ1Y3QgY2dyYXBoX2VkZ2UgKmNzOworCSAgY2xh c3MgaXBhX25vZGVfcGFyYW1zICppbmZvID0gTlVMTDsKKwkgIGJvb2wgc2Vs Zl9zY2MgPSB0cnVlOwogCiAJICBmb3IgKGNzID0gdi0+Y2FsbGVlczsgY3M7 IGNzID0gY3MtPm5leHRfY2FsbGVlKQogCSAgICBpZiAoaXBhX2VkZ2Vfd2l0 aGluX3NjYyAoY3MpKQogCSAgICAgIHsKLQkJSVBBX05PREVfUkVGICh2KS0+ bm9kZV93aXRoaW5fc2NjID0gdHJ1ZTsKKwkJY2dyYXBoX25vZGUgKmNhbGxl ZSA9IGNzLT5jYWxsZWUtPmZ1bmN0aW9uX3N5bWJvbCAoKTsKKworCQlpZiAo diAhPSBjYWxsZWUpCisJCSAgc2VsZl9zY2MgPSBmYWxzZTsKKworCQlpZiAo IWluZm8pCisJCSAgeworCQkgICAgaW5mbyA9IElQQV9OT0RFX1JFRiAodik7 CisJCSAgICBpbmZvLT5ub2RlX3dpdGhpbl9zY2MgPSB0cnVlOworCQkgIH0K KwogCQlpZiAocHJvcGFnYXRlX2NvbnN0YW50c19hY3Jvc3NfY2FsbCAoY3Mp KQotCQkgIHB1c2hfbm9kZV90b19zdGFjayAodG9wbywgY3MtPmNhbGxlZS0+ ZnVuY3Rpb25fc3ltYm9sICgpKTsKKwkJICBwdXNoX25vZGVfdG9fc3RhY2sg KHRvcG8sIGNhbGxlZSk7CiAJICAgICAgfQorCisJICBpZiAoaW5mbykKKwkg ICAgaW5mby0+bm9kZV9pc19zZWxmX3NjYyA9IHNlbGZfc2NjOworCiAJICB2 ID0gcG9wX25vZGVfZnJvbV9zdGFjayAodG9wbyk7CiAJfQogCkBAIC0zOTgz LDYgKzQxMzQsOSBAQCBnZXRfaW5mb19hYm91dF9uZWNlc3NhcnlfZWRnZXMg KGlwY3BfdmFsdWU8dmFsdHlwZT4gKnZhbCwgY2dyYXBoX25vZGUgKmRlc3Qs CiAJICAgICAgaG90IHw9IGNzLT5tYXliZV9ob3RfcCAoKTsKIAkgICAgICBp ZiAoY3MtPmNhbGxlciAhPSBkZXN0KQogCQlub25fc2VsZl9yZWN1cnNpdmUg PSB0cnVlOworCSAgICAgIGVsc2UgaWYgKHNyYy0+dmFsKQorCQlnY2NfYXNz ZXJ0ICh2YWx1ZXNfZXF1YWxfZm9yX2lwY3BfcCAoc3JjLT52YWwtPnZhbHVl LAorCQkJCQkJICAgICB2YWwtPnZhbHVlKSk7CiAJICAgIH0KIAkgIGNzID0g Z2V0X25leHRfY2dyYXBoX2VkZ2VfY2xvbmUgKGNzKTsKIAl9CkBAIC0zOTk2 LDYgKzQxNTAsMTkgQEAgZ2V0X2luZm9fYWJvdXRfbmVjZXNzYXJ5X2VkZ2Vz IChpcGNwX3ZhbHVlPHZhbHR5cGU+ICp2YWwsIGNncmFwaF9ub2RlICpkZXN0 LAogICAqZnJlcV9zdW0gPSBmcmVxOwogICAqY291bnRfc3VtID0gY250Owog ICAqY2FsbGVyX2NvdW50ID0gY291bnQ7CisKKyAgaWYgKCFob3QgJiYgSVBB X05PREVfUkVGIChkZXN0KS0+bm9kZV93aXRoaW5fc2NjKQorICAgIHsKKyAg ICAgIHN0cnVjdCBjZ3JhcGhfZWRnZSAqY3M7CisKKyAgICAgIC8qIENvbGQg bm9uLVNDQyBzb3VyY2UgZWRnZSBjb3VsZCB0cmlnZ2VyIGhvdCByZWN1cnNp dmUgZXhlY3V0aW9uIG9mCisJIGZ1bmN0aW9uLiBDb25zaWRlciB0aGUgY2Fz ZSBhcyBob3QgYW5kIHJlbHkgb24gZm9sbG93aW5nIGNvc3QgbW9kZWwKKwkg Y29tcHV0YXRpb24gdG8gZnVydGhlciBzZWxlY3QgcmlnaHQgb25lLiAgKi8K KyAgICAgIGZvciAoY3MgPSBkZXN0LT5jYWxsZXJzOyBjczsgY3MgPSBjcy0+ bmV4dF9jYWxsZXIpCisJaWYgKGNzLT5jYWxsZXIgPT0gZGVzdCAmJiBjcy0+ bWF5YmVfaG90X3AgKCkpCisJICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKICAg cmV0dXJuIGhvdDsKIH0KIApkaWZmIC0tZ2l0IGEvZ2NjL2lwYS1wcm9wLmgg Yi9nY2MvaXBhLXByb3AuaAppbmRleCBlOWQ2YTVlODMwNS4uMTk1OGUxZWU5 Y2MgMTAwNjQ0Ci0tLSBhL2djYy9pcGEtcHJvcC5oCisrKyBiL2djYy9pcGEt cHJvcC5oCkBAIC00OTcsNiArNDk3LDggQEAgcHVibGljOgogICB1bnNpZ25l ZCBub2RlX2RlYWQgOiAxOwogICAvKiBOb2RlIGlzIGludm9sdmVkIGluIGEg cmVjdXJzaW9uLCBwb3RlbnRpb25hbGx5IGluZGlyZWN0LiAgKi8KICAgdW5z aWduZWQgbm9kZV93aXRoaW5fc2NjIDogMTsKKyAgLyogTm9kZSBjb250YWlu cyBvbmx5IGRpcmVjdCByZWN1cnNpb24uICAqLworICB1bnNpZ25lZCBub2Rl X2lzX3NlbGZfc2NjIDogMTsKICAgLyogTm9kZSBpcyBjYWxsaW5nIGEgcHJp dmF0ZSBmdW5jdGlvbiBjYWxsZWQgb25seSBvbmNlLiAgKi8KICAgdW5zaWdu ZWQgbm9kZV9jYWxsaW5nX3NpbmdsZV9jYWxsIDogMTsKICAgLyogRmFsc2Ug d2hlbiB0aGVyZSBpcyBzb21ldGhpbmcgbWFrZXMgdmVyc2lvbmluZyBpbXBv c3NpYmxlLiAgKi8KZGlmZiAtLWdpdCBhL2djYy9wYXJhbXMub3B0IGIvZ2Nj L3BhcmFtcy5vcHQKaW5kZXggNTg2YjUzOWVjNWYuLmY0YjgxMGRlZDQ0IDEw MDY0NAotLS0gYS9nY2MvcGFyYW1zLm9wdAorKysgYi9nY2MvcGFyYW1zLm9w dApAQCAtMTk4LDYgKzE5OCwxNCBAQCBUaHJlc2hvbGQgaXBhLWNwIG9wcG9y dHVuaXR5IGV2YWx1YXRpb24gdGhhdCBpcyBzdGlsbCBjb25zaWRlcmVkIGJl bmVmaWNpYWwgdG8gYwogQ29tbW9uIEpvaW5lZCBVSW50ZWdlciBWYXIocGFy YW1faXBhX2NwX2xvb3BfaGludF9ib251cykgSW5pdCg2NCkgUGFyYW0KIENv bXBpbGUtdGltZSBib251cyBJUEEtQ1AgYXNzaWducyB0byBjYW5kaWRhdGVz IHdoaWNoIG1ha2UgbG9vcCBib3VuZHMgb3Igc3RyaWRlcyBrbm93bi4KIAor LXBhcmFtPWlwYS1jcC1tYXgtcmVjdXJzaXZlLWRlcHRoPQorQ29tbW9uIEpv aW5lZCBVSW50ZWdlciBWYXIocGFyYW1faXBhX2NwX21heF9yZWN1cnNpdmVf ZGVwdGgpIEluaXQoNykgUGFyYW0KK01heGltdW0gZGVwdGggb2YgcmVjdXJz aXZlIGNsb25pbmcgZm9yIHNlbGYtcmVjdXJzaXZlIGZ1bmN0aW9uLgorCist cGFyYW09aXBhLWNwLW1pbi1yZWN1cnNpdmUtcHJvYmFiaWxpdHk9CitDb21t b24gSm9pbmVkIFVJbnRlZ2VyIFZhcihwYXJhbV9pcGFfY3BfbWluX3JlY3Vy c2l2ZV9wcm9iYWJpbGl0eSkgSW5pdCgyKSBQYXJhbQorUmVjdXJzaXZlIGNs b25pbmcgb25seSB3aGVuIHRoZSBwcm9iYWJpbGl0eSBvZiBjYWxsIGJlaW5n IGV4ZWN1dGVkIGV4Y2VlZHMgdGhlIHBhcmFtZXRlci4KKwogLXBhcmFtPWlw YS1jcC1yZWN1cnNpb24tcGVuYWx0eT0KIENvbW1vbiBKb2luZWQgVUludGVn ZXIgVmFyKHBhcmFtX2lwYV9jcF9yZWN1cnNpb25fcGVuYWx0eSkgSW5pdCg0 MCkgSW50ZWdlclJhbmdlKDAsIDEwMCkgUGFyYW0KIFBlcmNlbnRhZ2UgcGVu YWx0eSB0aGUgcmVjdXJzaXZlIGZ1bmN0aW9ucyB3aWxsIHJlY2VpdmUgd2hl biB0aGV5IGFyZSBldmFsdWF0ZWQgZm9yIGNsb25pbmcuCmRpZmYgLS1naXQg YS9nY2MvdGVzdHN1aXRlL2djYy5kZy9pcGEvaXBhLWNsb25lLTIuYyBiL2dj Yy90ZXN0c3VpdGUvZ2NjLmRnL2lwYS9pcGEtY2xvbmUtMi5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kNTEzMDIwZWU4Ygot LS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2lwYS9p cGEtY2xvbmUtMi5jCkBAIC0wLDAgKzEsNDcgQEAKKy8qIHsgZGctZG8gY29t cGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMyAtZmR1bXAtaXBhLWNw LWRldGFpbHMgLWZuby1lYXJseS1pbmxpbmluZyAtLXBhcmFtIGlwYS1jcC1t YXgtcmVjdXJzaXZlLWRlcHRoPTgiIH0gKi8KKworaW50IGZuKCk7CisKK2lu dCBkYXRhWzEwMF07CisKK2ludCByZWN1cl9mbiAoaW50IGkpCit7CisgIGlu dCBqOworICAgCisgIGlmIChpID09IDYpCisgICAgeworICAgICAgZm4oKTsK KyAgICAgIGZuKCk7CisgICAgICBmbigpOworICAgICAgZm4oKTsKKyAgICAg IGZuKCk7CisgICAgICBmbigpOworICAgICAgZm4oKTsKKyAgICAgIGZuKCk7 CisgICAgICBmbigpOworICAgICAgZm4oKTsKKyAgICAgIGZuKCk7CisgICAg ICBmbigpOworICAgICAgcmV0dXJuIDEwOworICAgIH0KKworICBkYXRhW2ld ID0gaTsgCisKKyAgZm9yIChqID0gMDsgaiA8IDEwMDsgaisrKQorICAgIHJl Y3VyX2ZuIChpICsgMSk7CisKKyAgcmV0dXJuIGk7IAorfQorCitpbnQgbWFp biAoKQoreworICBpbnQgaTsKKworICBmb3IgKGkgPSAwOyBpIDwgMTAwOyBp KyspCisgICAgcmVjdXJfZm4gKDEpICsgcmVjdXJfZm4gKC01KTsKKworICBy ZXR1cm4gMTsKK30KKworLyogeyBkZy1maW5hbCB7IHNjYW4taXBhLWR1bXAt dGltZXMgIkNyZWF0aW5nIGEgc3BlY2lhbGl6ZWQgbm9kZSBvZiByZWN1cl9m bi9cWzAtOVxdKlxcLiIgMTIgImNwIiB9IH0gKi8KLS0gCjIuMTcuMQoK --_002_BYAPR01MB4869576853F1B76C31934161F74A0BYAPR01MB4869prod_--