From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756713Ab0ICUW6 (ORCPT ); Fri, 3 Sep 2010 16:22:58 -0400 Received: from eu1sys200aog110.obsmtp.com ([207.126.144.129]:34447 "EHLO eu1sys200aog110.obsmtp.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753490Ab0ICUW5 (ORCPT ); Fri, 3 Sep 2010 16:22:57 -0400 From: Christophe Henri RICARD To: "linux-kernel@vger.kernel.org" Cc: "'Marcel Selhorst'" , "debora@linux.vnet.ibm.com" , "tpmdd-devel@lists.sourceforge.net" , Rajiv Andrade , "jmorris@namei.org" Date: Fri, 3 Sep 2010 21:54:12 +0200 Subject: [tpmdd-devel] ST19NP18 I2C driver submission + possible bug found in the last TPM kernel core Thread-Topic: [tpmdd-devel] ST19NP18 I2C driver submission + possible bug found in the last TPM kernel core Thread-Index: Acs+DAx5vSrGMui6So+3XxfhGeXruwNlO+BQ Message-ID: <0B9F1C5B86169C4EA9D042C251022E49105CD81DE1@SAFEX1MAIL3.st.com> References: <002501cacb5d$9c883650$d598a2f0$@ricard@st.com> <5C722288-63DA-494B-AD37-1B4CA5A35EA0@linux.vnet.ibm.com> <002801cacc24$385cdf60$a9169e20$@ricard@st.com> <1269551792.3027.5.camel@blackbox.ibm.com> <51078F5F-518D-4B08-8BB0-CEB672AD10FF@linux.vnet.ibm.com> <000601cae64a$a532aad0$ef980070$@ricard@st.com> <4BD98EEA.4060805@sirrix.com> <35E2570B-DD77-4CDB-9B13-7211E18E7000@linux.vnet.ibm.com> In-Reply-To: <35E2570B-DD77-4CDB-9B13-7211E18E7000@linux.vnet.ibm.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: acceptlanguage: en-US Content-Type: multipart/mixed; boundary="_002_0B9F1C5B86169C4EA9D042C251022E49105CD81DE1SAFEX1MAIL3st_" MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org --_002_0B9F1C5B86169C4EA9D042C251022E49105CD81DE1SAFEX1MAIL3st_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hi, Please find in attached file the tpm driver for the ST19NP18 device working= on a I2C bus. This driver use the Linux I2C cores, TPM cores and generic gpio interfaces. It has been tested with the latest stable kernel 2.6.35.4 available on kern= el.org. Let me know of your feedback. Best Regards Christophe RICARD. --------------------- Previous Message ------------------------------------= -------------- Hi Chris, Just submit it to LKML with us on CC, so I'll then ack and CC James Morris. Thanks --- Rajiv Andrade Security Development IBM Linux Technology Center --_002_0B9F1C5B86169C4EA9D042C251022E49105CD81DE1SAFEX1MAIL3st_ Content-Type: application/octet-stream; name="tpm_stm_st19_i2c.patch" Content-Description: tpm_stm_st19_i2c.patch Content-Disposition: attachment; filename="tpm_stm_st19_i2c.patch"; size=36725; creation-date="Fri, 03 Sep 2010 16:42:42 GMT"; modification-date="Fri, 03 Sep 2010 16:42:42 GMT" Content-Transfer-Encoding: base64 ZGlmZiAtdU5yIGxpbnV4LTIuNi4zNS40L0RvY3VtZW50YXRpb24vdHBtL3RwbV9zdG1fc3QxOV9p MmMudHh0IGxpbnV4LXRwbS9Eb2N1bWVudGF0aW9uL3RwbS90cG1fc3RtX3N0MTlfaTJjLnR4dAot LS0gbGludXgtMi42LjM1LjQvRG9jdW1lbnRhdGlvbi90cG0vdHBtX3N0bV9zdDE5X2kyYy50eHQJ MTk2OS0xMi0zMSAxODowMDowMC4wMDAwMDAwMDAgLTA2MDAKKysrIGxpbnV4LXRwbS9Eb2N1bWVu dGF0aW9uL3RwbS90cG1fc3RtX3N0MTlfaTJjLnR4dAkyMDEwLTA5LTAyIDA3OjIyOjM2LjMxNTA3 NjM3NCAtMDUwMApAQCAtMCwwICsxLDE2OCBAQAorLyoKKyAqIFNUTWljcm9lbGVjdHJvbmljcyBU UE0gSTJDIExpbnV4IGRyaXZlciBmb3IgVFBNIFNUMTlOUDE4CisgKiBDb3B5cmlnaHQgKEMpIDIw MDksIDIwMTAgU1RNaWNyb2VsZWN0cm9uaWNzCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQg YnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2Yg dGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor ICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk IGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGgg dGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B IDAyMTEwLTEzMDEgVVNBLgorICoKKyAqIFNUTWljcm9lbGVjdHJvbmljcyB2ZXJzaW9uIDEuMi4w LCBDb3B5cmlnaHQgKEMpIDIwMTAKKyAqIFNUTWljcm9lbGVjdHJvbmljcyBjb21lcyB3aXRoIEFC U09MVVRFTFkgTk8gV0FSUkFOVFkuCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3Ug YXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CisgKiB1bmRlciBjZXJ0YWluIGNvbmRpdGlv bnMuCisgKgorICogQEF1dGhvcjogQ2hyaXN0b3BoZSBSSUNBUkQgdHBtc3VwcG9ydEBzdC5jb20K KyAqLworCitQVVJQT1NFIE9GIFRIRSBET0NVTUVOVAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CitUaGlzIGRvY3VtZW50IGlzIGludGVuZCB0byBkZXNjcmliZSBob3cgdG8gaW5zdGFsbCB0aGUg VFBNIGRyaXZlciBmb3IKK1RQTSBTVDE5TlAxOCB1c2luZyBJMkMgcHJvdG9jb2xzLgorCisKK1BM QVRGT1JNIFVTRUQgRk9SIFRFU1RJTkcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitEdXJp bmcgdGhlIGRldmVsb3BtZW50LCBzZXZlcmFsIGVtYmVkZGVkIHBsYXRmb3JtcyBydW5uaW5nIEFS TSBDUFUgaGF2ZSBiZWVuCit1c2VkLgorVmFsaWRhdGVkIHBsYXRmb3JtcyBsaXN0aW5nOgorLSBU SSBCZWFnbGVib2FyZAorLSBTVE1pY3JvZWxlY3Ryb25pY3MgU3BlYXIgMzAwCistIFNUTWljcm9l bGVjdHJvbmljcyBTcGVhciA2MDAKKworUkVRVUlSRU1FTlRTCistLS0tLS0tLS0tLS0tCitTb2Z0 d2FyZQorPT09PT09PT09CitUaGlzIFRQTSBkcml2ZXIgY291bGQgYmUgaW5zdGFsbCB1bmRlciBh IGtlcm5lbCB3aGljaCBpbXBsZW1lbnQgYXQgbGVhc3QgdGhlCitmb2xsb3dpbmcgZmVhdHVyZXM6 CistIExpbnV4IEdFTkVSSUNfR1BJTyBwcm9ncmFtbWluZyBpbnRlcmZhY2VzLgorLSBJMkMgbmV3 IHN0eWxlIHByb2dyYW1taW5nIGludGVyZmFjZSBiYXNlICh3aXRoIHByb2JlICYgcmVtb3ZlIGZ1 bmN0aW9ucykKKy0gMSBJMkMgYWRhcHRlciAoSTJDIExpbnV4IGNvbnRyb2xsZXIgZHJpdmVyKSBv ciB1c2Ugb2YgSTJDX0dQSU8gZHJpdmVyIGZvciBJMkMKK2JpdGJhbmdpbmcuCisKKworSGFyZHdh cmUKKz09PT09PT09PQorVG8gcnVuIGEgVFBNIHRoZSBwbGF0Zm9ybSBuZWVkcyAgYXQgbGVhc3Q6 CistIDIgUG93ZXIgc3VwcGx5ICgzLjNWKS4KKy0gMSBJMkMgY29udHJvbGxlciBvciAyIEdQSU9z IHVzZWQgZm9yIFNEQSAmIFNDTCAoSTJDIGJpdCBiYW5nIG1ldGhvZCkuCistIDIgR1BJT3MgZm9y IHNpZ25hbHMgYWNjZXB0X2NvbW1hbmQgJiBkYXRhX2F2YWlsYWJsZS4KKworVFBNIEkyQyBzcGVl ZCBpcyAxMDBLaHogKE1heGltdW0pCisKK0FsbCBUUE0gc2lnbmFscyB3b3JrIGF0IDMuM1YKKwor SE9XIFRPIElOU1RBTEwKKy0tLS0tLS0tLS0tLS0tLQorUGxhdGZvcm0gaW5zdGFsbGF0aW9uIGZp bGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorKE4uQjogcGxhdGZvcm0gZmlsZSBpbiBh cmNoLzxwcm9jZXNzb3JfdHlwZT4vbWFjaC08cGxhdGZvcm0tbmFtZT4vCisKKworMSAtIFNvZnR3 YXJlIGludGVncmF0aW9uCis9PT09PT09PT09PT09PT09PT09PT09PT09Cis8cHJvY2Vzc29yX3R5 cGU+IGNvdWxkIGJlOiBhbHBoYSwgYXJtLCBhdnIzMiwgYmxhY2tmaW4sIGNyaXMsIGZydiwgaDgz MDAsIGlhNjQsCittMzJyLCBtNjhrLCBtNjhrbm9tbXUsIHBhcmlzYywgcG93ZXJwYywgczM5MCwg c2gsIHNwYXJjLCBzcGFyYzY0LCB1bSwgeDg2LAoreHRlbnNhLi4uCis8cGxhdGZvcm0tbmFtZT4g Y29ycmVzcG9uZHMgdG8geW91ciBwbGF0Zm9ybQorCitJbiB0aGUgZmlsZSB3aGVyZSB0aGUgbWFj aGluZV9pbml0KCkgZnVuY3Rpb24gZXhpc3RzLCB0aGUgZGV2ZWxvcGVyIG11c3QKK2RlY2xhcmU6 CistIDEgc3RydWN0IHN0MTlucDE4X3BsYXRmb3JtX2RhdGEgdG8gcHJvdmlkZSB3aGljaCBncGlv IHRoZSBkcml2ZXIgd2lsbCB1c2UuCisJKiBUaGUgYWNjZXB0X3BpbiBhbmQgZGF0YV9hdmFpbF9w aW4gZ3BpbyBhcmUgY29uZmlndXJlZCBhcyBpbnB1dCBvbmx5LgorCSogVGhpcyBncGlvIG1hbmFn ZW1lbnQgaXMgdW5kZXIgdGhlIHBsYXRmb3JtIGRldmVsb3BlciByZXNwb25zYWJpbGl0eS4KKwor RmluYWxseSBpbiB0aGUgbWFjaGluZV9pbml0KCkgZnVuY3Rpb24gcHJvdmlkZWQgaW4gdGhlIHNh bWUgZmlsZSwgdGhlIGRldmVsb3Blcgorc2hvdWxkIHVzZSB0aGUgd2VsbCBrbm93biBmdW5jdGlv biBpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygpIGZyb20gdGhlIEkyQyBMaW51eAorQVBJIENvcmUu CisKKzItIEhhcmR3YXJlIGludGVncmF0aW9uCis9PT09PT09PT09PT09PT09PT09PT09PT0KKy0g U1QgcmVjb21tZW5kcyBjb25uZWN0aW5nIFZQUzEgYW5kIFZQUzIgdG8gYm9hcmQgcG93ZXIgc3Vw cGx5IGFuZCBhdCBsZWFzdCB0d28KK0dORHMgKG9uIGVhY2ggc2lkZSBvZiBUU1NPUDI4IHBhY2th Z2UpLiAoU2VlIGRhdGFzaGVldCBmb3IgZnVydGhlciBpbmZvcm1hdGlvbnMpCisKKy0gQXMgdGhl IFNUMTlOUDE4IGhhcyBubyBpbnRlcm5hbCBwdWxsIHVwLCBTVCByZWNvbW1hbmRzIHRvIGhhZDoK KyAgKiAyIGV4dGVybmFsIHB1bGwgdXAgb24gU0RBICYgU0NMIHNpZ25hbHMgKFJwU0RBL1JwU0NM KSB3aXRoIHZhbHVlIGFjY29yZGluZwordG8gdGhlIGFiYWN1cyBvbiBwYWdlIDQwIG9yIHRoZSAi STJDIEJ1cyBzcGVjaWZpY2F0aW9uIiwgdmVyc2lvbiAyLjEgSmFudWFyeQorMjAwMC4KKworCitQ bGF0Zm9ybSBpbnRlZ3JhdGlvbiBhZHZpc2VzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQorCitGb3IgcG93ZXIgbWFuYWdlbWVudCBwdXJwb3NlcywgdGhlIGtlcm5lbCB3aWxsIHNlbmQg YSBUUE1fU2F2ZVN0YXRlIGNvbW1hbmQgaW4gdGhlCitzdXNwZW5kIHRwbSBkcml2ZXIgZnVuY3Rp b24uCitJZiB0aGUgcGxhdGZvcm0gZ2VuZXJhdGUgYSBUUE0gSW5pdCBldmVudCBvbiB3YWtldXAs IHRoZSBmaXJzdCBUUE0gY29tbWFuZCB0aGF0IHNob3VsZAorYmUgZXhlY3V0ZWQgYmVmb3JlIHRo ZSBMaW51eCBrZXJuZWwgaXMgYmFjayAocmVzdW1lIGZ1bmN0aW9uIGV4ZWN1dGlvbikgaXMKK1RQ TV9TdGFydHVwKFNUX1NUQVRFKS4KKworSGVyZSBpcyBhbiBleGFtcGxlIHdpdGggYmVhZ2xlYm9h cmQ6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0RlcGVuZGluZyBvbiB0 aGUgcGxhdGZvcm0sIHRoZSBkZXZlbG9wcGVyIHNob3VsZCBzcGVjaWZ5IGluCit0aGUgcGxhdGZv cm0gaW5pdCBmaWxlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb25zOgorLSBUaGUgcGxhdGZvcm0g Z3BpbydzIHVzZWQgdG8gbWFuYWdlZCB0aGUgdHBtJ3MgYWNjZXB0X3Bpbi9kYXRhX2F2YWlsX3Bp bgorKGluIGEgc3RydWN0IHN0MTlucDE4X3BsYXRmb3JtX2RhdGEgZGVjbGFyYXRpb24pLgorLSBU aGUgVFBNIEkyQyA3IGJpdHMgYWRkcmVzcyAoVFBNX0kyQ19TVDE5X0FERFJfV1IpIChpbiBhIHN0 cnVjdCBpMmNfYm9hcmRfaW5mbykuCisKK1RoZW4gdGhlIGRldmVsb3BwZXIgc2hvdWxkIGFkZCAg dGhlIFRQTSBzbGF2ZSBkZXZpY2UgdG8gdGhlIGdvb2QgaTJjIGFkYXB0ZXIgd2l0aCB0aGUKK2ky Y19yZWdpc3Rlcl9ib2FyZF9pbmZvIGZ1bmN0aW9uIChBc3N1bWluZyB0aGF0IHRoZSBncGlvIGFu ZCB0aGUgaTJjIGJ1cyBhcmUgd2VsbCBjb25maWd1cmVkKS4KKworZmlsZSBhcmNoXGFybVxtYWNo LW9tYXAyXGJvYXJkLW9tYXAzYmVhZ2xlLmMKK2FkZCB0aGUgZm9sbG93aW5nOgorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKworc3RhdGljIHN0cnVjdCBzdDE5bnAxOF9wbGF0Zm9ybV9kYXRhIHRwbV9kYXRhID0g eworICAgICAgICAuYWNjZXB0X3BpbiA9IDEzNSwKKyAgICAgICAgLmRhdGFfYXZhaWxfcGluID0g MTQzLAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIHRwbV9z dDE5X2kyY19ib2FyZF9pbmZvW10gPSB7CisgICAgICAgIHsKKyAgICAgICAgIEkyQ19CT0FSRF9J TkZPKFRQTV9EUklWRVJfTkFNRSwgVFBNX0kyQ19TVDE5X0FERFJfV1IpLAorICAgICAgICAgLnBs YXRmb3JtX2RhdGEgPSAmdHBtX2RhdGEsCisgICAgICAgICB9LAorfTsKKworLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCitUaGVuIGNvbXBsZXRlIHRoZSBiZWFnbGVib2FyZCBpbml0IHRvIGJlIGxpa2UgdGhhdDoK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorc3RhdGljIHZvaWQgX19pbml0IG9tYXAzX2JlYWdsZV9pbml0KHZv aWQpCit7CisgICAgICAgIG9tYXAzX211eF9pbml0KGJvYXJkX211eCwgT01BUF9QQUNLQUdFX0NC Qik7CisgICAgICAgIG9tYXAzX2JlYWdsZV9pMmNfaW5pdCgpOworICAgICAgICBwbGF0Zm9ybV9h ZGRfZGV2aWNlcyhvbWFwM19iZWFnbGVfZGV2aWNlcywKKyAgICAgICAgICAgICAgICAgICAgICAg IEFSUkFZX1NJWkUob21hcDNfYmVhZ2xlX2RldmljZXMpKTsKKyAgICAgICAgb21hcF9zZXJpYWxf aW5pdCgpOworCisgICAgICAgIG9tYXBfbXV4X2luaXRfZ3BpbygxNzAsIE9NQVBfUElOX0lOUFVU KTsKKyAgICAgICAgZ3Bpb19yZXF1ZXN0KDE3MCwgIkRWSV9uUEQiKTsKKyAgICAgICAgLyogUkVW SVNJVCBsZWF2ZSBEVkkgcG93ZXJlZCBkb3duIHVudGlsIGl0J3MgbmVlZGVkIC4uLiAqLworICAg ICAgICBncGlvX2RpcmVjdGlvbl9vdXRwdXQoMTcwLCB0cnVlKTsKKworICAgICAgICB1c2JfbXVz Yl9pbml0KCZtdXNiX2JvYXJkX2RhdGEpOworICAgICAgICB1c2JfZWhjaV9pbml0KCZlaGNpX3Bk YXRhKTsKKyAgICAgICAgb21hcDNiZWFnbGVfZmxhc2hfaW5pdCgpOworCisgICAgICAgIGJlYWds ZV9kaXNwbGF5X2luaXQoKTsKKworICAgICAgICAvKiBFbnN1cmUgU0RSQyBwaW5zIGFyZSBtdXgn ZCBmb3Igc2VsZi1yZWZyZXNoICovCisgICAgICAgIG9tYXBfbXV4X2luaXRfc2lnbmFsKCJzZHJj X2NrZTAiLCBPTUFQX1BJTl9PVVRQVVQpOworICAgICAgICBvbWFwX211eF9pbml0X3NpZ25hbCgi c2RyY19ja2UxIiwgT01BUF9QSU5fT1VUUFVUKTsKKyAgICAgICAgb21hcF9tdXhfaW5pdF9ncGlv KCgoc3RydWN0IHN0MTlucDE4X3BsYXRmb3JtX2RhdGEgKikKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIHRwbV9zdDE5X2kyY19ib2FyZF9pbmZvWzBdLnBsYXRmb3JtX2RhdGEpLT5kYXRhX2F2 YWlsX3BpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE9NQVBfUElOX0lOUFVUKTsKKwlv bWFwX211eF9pbml0X2dwaW8oKChzdHJ1Y3Qgc3QxOW5wMThfcGxhdGZvcm1fZGF0YSAqKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgdHBtX3N0MTlfaTJjX2JvYXJkX2luZm9bMF0ucGxhdGZv cm1fZGF0YSktPmFjY2VwdF9waW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPTUFQX1BJ Tl9JTlBVVCk7CisKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygzLCB0cG1fc3QxOV9pMmNfYm9h cmRfaW5mbywgQVJSQVlfU0laRSh0cG1fc3QxOV9pMmNfYm9hcmRfaW5mbykpOworfQpkaWZmIC11 TnIgbGludXgtMi42LjM1LjQvZHJpdmVycy9jaGFyL3RwbS9LY29uZmlnIGxpbnV4LXRwbS9kcml2 ZXJzL2NoYXIvdHBtL0tjb25maWcKLS0tIGxpbnV4LTIuNi4zNS40L2RyaXZlcnMvY2hhci90cG0v S2NvbmZpZwkyMDEwLTA4LTI2IDE4OjQ3OjEyLjAwMDAwMDAwMCAtMDUwMAorKysgbGludXgtdHBt L2RyaXZlcnMvY2hhci90cG0vS2NvbmZpZwkyMDEwLTA4LTMxIDEyOjUxOjAyLjk0NDQwNzc2MyAt MDUwMApAQCAtNjAsNCArNjAsMTMgQEAKIAkgIEZ1cnRoZXIgaW5mb3JtYXRpb24gb24gdGhpcyBk cml2ZXIgYW5kIHRoZSBzdXBwb3J0ZWQgaGFyZHdhcmUKIAkgIGNhbiBiZSBmb3VuZCBhdCBodHRw Oi8vd3d3LnByb3NlYy5ydWIuZGUvdHBtCiAKK2NvbmZpZyBUQ0dfU1QxOV9JMkMKKyAgICAgICAg dHJpc3RhdGUgIlNUTWljcm9lbGVjdHJvbmljcyBTVDE5IEkyQyBUUE0iCisgICAgICAgIGRlcGVu ZHMgb24gSTJDCisgICAgICAgIGRlcGVuZHMgb24gR1BJT0xJQgorICAgICAgICAtLS1oZWxwLS0t CisgICAgICAgIElmIHlvdSBoYXZlIGEgVFBNIHNlY3VyaXR5IGNoaXAgZnJvbSBTVE1pY3JvZWxl Y3Ryb25pY3Mgd29ya2luZyB3aXRoCisgICAgICAgIGFuIEkyQyBidXMgc2F5IFllcyBhbmQgaXQg d2lsbCBiZSBhY2Nlc3NpYmxlIGZyb20gd2l0aGluIExpbnV4LgorICAgICAgICBUbyBjb21waWxl IHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOyB0aGUgbW9kdWxlIHdpbGwg YmUKKyAgICAgICAgY2FsbGVkIHRwbV9zdG1fc3QxOV9pMmMuCiBlbmRpZiAjIFRDR19UUE0KZGlm ZiAtdU5yIGxpbnV4LTIuNi4zNS40L2RyaXZlcnMvY2hhci90cG0vTWFrZWZpbGUgbGludXgtdHBt L2RyaXZlcnMvY2hhci90cG0vTWFrZWZpbGUKLS0tIGxpbnV4LTIuNi4zNS40L2RyaXZlcnMvY2hh ci90cG0vTWFrZWZpbGUJMjAxMC0wOC0yNiAxODo0NzoxMi4wMDAwMDAwMDAgLTA1MDAKKysrIGxp bnV4LXRwbS9kcml2ZXJzL2NoYXIvdHBtL01ha2VmaWxlCTIwMTAtMDgtMzEgMTI6NTE6MDIuOTY0 NDA3NjkwIC0wNTAwCkBAIC05LDMgKzksNCBAQAogb2JqLSQoQ09ORklHX1RDR19OU0MpICs9IHRw bV9uc2Mubwogb2JqLSQoQ09ORklHX1RDR19BVE1FTCkgKz0gdHBtX2F0bWVsLm8KIG9iai0kKENP TkZJR19UQ0dfSU5GSU5FT04pICs9IHRwbV9pbmZpbmVvbi5vCitvYmotJChDT05GSUdfVENHX1NU MTlfSTJDKSArPSB0cG1fc3RtX3N0MTlfaTJjLm8KZGlmZiAtdU5yIGxpbnV4LTIuNi4zNS40L2Ry aXZlcnMvY2hhci90cG0vdHBtX3N0bV9zdDE5X2kyYy5jIGxpbnV4LXRwbS9kcml2ZXJzL2NoYXIv dHBtL3RwbV9zdG1fc3QxOV9pMmMuYwotLS0gbGludXgtMi42LjM1LjQvZHJpdmVycy9jaGFyL3Rw bS90cG1fc3RtX3N0MTlfaTJjLmMJMTk2OS0xMi0zMSAxODowMDowMC4wMDAwMDAwMDAgLTA2MDAK KysrIGxpbnV4LXRwbS9kcml2ZXJzL2NoYXIvdHBtL3RwbV9zdG1fc3QxOV9pMmMuYwkyMDEwLTA5 LTAyIDA2OjE3OjUyLjU0NDQ1MTU5OSAtMDUwMApAQCAtMCwwICsxLDgyMiBAQAorLyoKKyAqIFNU TWljcm9lbGVjdHJvbmljcyBUUE0gSTJDIExpbnV4IGRyaXZlciBmb3IgVFBNIFNUMTlOUDE4Cisg KiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgIFNUTWljcm9lbGVjdHJvbmljcworICoKKyAqIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlv bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQor ICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwg RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICogU1RNaWNyb2Vs ZWN0cm9uaWNzIHZlcnNpb24gMS4yLjAsIENvcHlyaWdodCAoQykgMjAxMAorICogU1RNaWNyb2Vs ZWN0cm9uaWNzIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqIFRoaXMgaXMg ZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKyAq IHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucy4KKyAqCisgKiBAQXV0aG9yOiBDaHJpc3RvcGhlIFJJ Q0FSRCB0cG1zdXBwb3J0QHN0LmNvbQorICoKKyAqIEBGaWxlOiB0cG1fc3RtX3N0MTlfaTJjLmMK KyAqCisgKiBAU3lub3BzaXM6CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgkwMi8xMi8yMDA4CisgKgkt IFN0YW5kIGFsb25lIGltcGxlbWVudGF0aW9uICh3aXRob3V0IGFueSBUUE0gYXBpKQorICogLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICoJMDMvMDIvMjAxMAorICoJLSBQb3dlciBtYW5hZ2VtZW50IChzdXNwZW5k IGFuZCByZXN1bWUgZnVuY3Rpb25zKQorICoJaW1wbGVtZW50YXRpb24KKyAqIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqCTAzLzE5LzIwMTAKKyAqCS0gVXNlIG9mIHRoZSBsaW51eCBrZXJuZWwgVFBNIGFwaSAt LT4gZHJpdmVyL2NoYXIvdHBtCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgkwNS8yNi8yMDEwCisgKgkt IFVwZGF0ZSBjb2RlIGZvciBjb2RlIHN1Ym1pc3Npb24gYW5kIGJ1ZyBmaXhlczoKKyAqCS0gQ29t bWVudHMgc3BlbGxpbmcgZml4ZXMKKyAqCS0gTGluZGVudCBzY3JpcHQgZXhlY3V0aW9uCisgKgkt IGNoZWNrcGF0Y2gucGwgc2NyaXB0IGV4ZWN1dGlvbgorICoJLSBmaXggc3lzbG9nIGVycm9yIHdo ZW4gbG9hZGVkIGFzIGEgbW9kdWxlOgorICoJICJyZWxlYXNlKCkgZnVuY3Rpb24gbWlzc2luZyBh bmQgbXVzdCBiZSBmaXhlZCIKKyAqCS0gbmFtZSBmaWxlcyBjaGFuZ2UgZnJvbQorICoJICBzdG1f c3QxOV90cG1faTJjIHRvIHRwbV9zdG1fc3QxOV9pMmMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCTA2 LzE1LzIwMTAKKyAqCS0gVXBkYXRlIGZvciBuZXcgdHBtIGNvcmUgZGV2aWNlLgorICoJbnVtX29w ZW5zIC0tPiBpc19vcGVuCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgkwNy8wOC8yMDEwCisgKgktIFVw ZGF0ZSBwcm9iZSwgcmVzdW1lIHN1c3BlbmQgZnVuY3Rpb25zCisgKgktIEZpeCBpc3N1ZSBzdXNw ZW5kIGJ1ZmZlciBhbmQgd29yayBhcm91bmQgcmVsYXRlZCB0byB0aGUKKyAqCWNoaXAtPmRhdGFf YnVmZmVyIG5vdCBhbGxvY2F0ZWQuCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUg PGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxp bnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ky Yy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy1pZC5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4K KyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4K KyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+Cisj aW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVk ZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGlu dXgvc2xhYi5oPgorCisjaW5jbHVkZSA8bGludXgvaTJjL3RwbV9zdG1fc3QxOV9pMmMuaD4KKwor I2luY2x1ZGUgInRwbS5oIgorCisjaW5jbHVkZSAidHBtX3N0bV9zdDE5X2kyYy5oIgorCisvKgor ICogQENvbW1lbnRzOiB0cG1fc3RtX3N0MTlfcGxhdGZvcm1fc3BlY2lmaWMuaCBkZWxpdmVyIHNo b3dzIGEgcGxhdGZvcm0gc3BlY2lmaWMKKyAqIGZpbGUgZXhhbXBsZS4KKyAqIEl0IGhhcyBiZWVu IGNyZWF0ZWQgdG8gc3BsaXQgVFBNIGRhdGFzIGFuZCBwbGF0Zm9ybS4KKyAqIFRoaXMgZXhhbXBs ZSBjb3VsZCBiZSB1c2VkIHdoZW4gdGhlIGRyaXZlciBpcyBidWlsdCBhcyBhIG1vZHVsZS4KKyAq IEluIGNhc2Ugb2Ygb3RoZXIgcGxhdGZvcm0sIHBsZWFzZSBhZGQgYSBzdHJ1Y3QgaTJjX2JvYXJk X2luZm8gaW4geW91ciBhcmNoLworICogcGxhdGZvcm0gZmlsZS4KKyAqLworc3RhdGljIHN0cnVj dCBzdDE5bnAxOF9wbGF0Zm9ybV9kYXRhICpwaW5faW5mb3M7CisKKy8qCisgKiBncGlvX3JlYWRw aW4gaXMgYSB3cmFwcGVyIHRvIHJlYWQgYSBncGlvIHZhbHVlLgorICogVXNlIGdlbmVyaWMgZ3Bp byBBUElzCisgKiBAcGFyYW06IHBpbl9pZCwgdGhlIHBpbiBpZGVudGlmaWVyIHdoZXJlIHRoZSB2 YWx1ZSB3aWxsIGJlIHJlYWQuCisgKiBAcmV0dXJuOiB0aGUgZ3BpbyB2YWx1ZSAoc2hvdWxkIGJl IDAgb3IgMSkgb3IgbmVnYXRpdmUgZXJybm8KKyAqLworc3RhdGljIGludCBncGlvX3JlYWRwaW4o aW50IHBpbl9pZCkKK3sKKwlpbnQgcmV0OworCXJldCA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KHBp bl9pZCk7CisJaWYgKHJldCA9PSAwKQorCQlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUocGluX2lkKTsK KwlyZXR1cm4gcmV0OworfQorCisvKgorICogZ3Bpb193cml0ZXBpbiBpcyBhIHdyYXBwZXIgdG8g d3JpdGUgYSBncGlvIHZhbHVlLgorICogVXNlIGdlbmVyaWMgZ3BpbyBBUElzLgorICogQHBhcmFt OiBwaW5faWQsIHRoZSBwaW4gaWRlbnRpZmllciB3aGVyZSB0aGUgdmFsdWUgd2lsbCBiZSB3cm90 ZS4KKyAqIEBwYXJhbTogdmFsdWUsIHRoZSB2YWx1ZSB0aGF0IHdpbGwgYmUgd3JpdHRlbi4KKyAq IEByZXR1cm46IDAgaW4gY2FzZSBvZiBzdWNjZXNzCisgKi8KKyNpZmRlZiBERUJVRworc3RhdGlj IGludCBncGlvX3dyaXRlcGluKGludCBwaW5faWQsIGludCB2YWx1ZSkKK3sKKwlpbnQgcmV0Owor CXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChwaW5faWQsIHZhbHVlKTsKKworCWlmIChyZXQg PT0gMCkKKwkJZ3Bpb19zZXRfdmFsdWUocGluX2lkLCB2YWx1ZSk7CisJcmV0dXJuIHJldDsKK30K KyNlbmRpZgorCitzdGF0aWMgaW50IHdhaXRfdW50aWxfZ29vZF9zaGFwZSh2b2lkKQoreworCWlu dCBzdGF0ZV9kYXRhID0gMDsKKwlpbnQgc3RhdGVfY29tbWFuZCA9IDA7CisJaW50IHRpbWVvdXQg PSBtc2Vjc190b19qaWZmaWVzKFNUQVJUVVBfV0FJVF9JTlRFUlZBTCk7CisJaW50IHRpbWUgPSBt c2Vjc190b19qaWZmaWVzKFRJQ0tfR1BJT19TUE9PTElORyk7CisJaW50IHJldCA9IDA7CisJd2Fp dF9xdWV1ZV9oZWFkX3QgcXVldWU7CisKKwlpbnQgd2FpdF90aW1lID0gMDsKKwlERUZJTkVfV0FJ VChfX3dhaXQpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnF1ZXVlKTsKKworCWRvIHsKKwkJcHJl cGFyZV90b193YWl0KCZxdWV1ZSwgJl9fd2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJc3Rh dGVfZGF0YSA9IGdwaW9fcmVhZHBpbihwaW5faW5mb3MtPmRhdGFfYXZhaWxfcGluKTsKKwkJc3Rh dGVfY29tbWFuZCA9IGdwaW9fcmVhZHBpbihwaW5faW5mb3MtPmFjY2VwdF9waW4pOworCisJCWlm IChzdGF0ZV9kYXRhID09IDAgJiYgc3RhdGVfY29tbWFuZCA+IDApCisJCQlyZXR1cm4gMDsKKwkJ ZWxzZSBpZiAod2FpdF90aW1lID49IHRpbWVvdXQpCisJCQlyZXR1cm4gLUVJTzsKKwkJZWxzZSBp ZiAoIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQlyZXQgPSBzY2hlZHVsZV90aW1lb3V0 KHRpbWUpOworCQkJd2FpdF90aW1lICs9IHRpbWU7CisJCX0gZWxzZQorCQkJcmV0ID0gLUVSRVNU QVJUU1lTOworCX0gd2hpbGUgKDEpOworCWZpbmlzaF93YWl0KCZxdWV1ZSwgJl9fd2FpdCk7CisK KwlyZXR1cm4gcmV0OworfQorCisvKgorICogd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX29uX2dw aW8gaXMgYSBmdW5jdGlvbiB0aGF0IHBvbGwgb24KKyAqIEdQSU8gZGF0YWF2YWlsYWJsZSBhbmQg R1BJTyBhY2NlcHRjb21tYW5kCisgKiBAcGFyYW06IHF1ZXVlLCB0aGUgcXVldWUgd2hlcmUgdGhl IHdvcmsgd2lsbCBiZSBzdG9yZWQKKyAqIEBwYXJhbTogdGltZW91dCwgbWF4aW1hbCBwb29saW5n IHRpbWUuCisgKiBAcmV0dXJuOiBEQVRBX09OIGluIGNhc2Ugb2YgZGF0YV9hdmFpbGFibGUgcGlu IGdvZXMgaGlnaCAobG9naWNhbCB2YWx1ZSAxKS4KKyAqIENPTU1BTkRfT04gaW4gY2FzZSBvZiBh Y2NlcHRfY29tbWFuZCBwaW4gZ29lcyBoaWdoIChsb2dpY2FsIHZhbHVlIDEpLgorICogLUVJTyBp biBjYXNlIG9mIGRhdGFfYXZhaWxhYmxlICYgYWNjZXB0X2NvbW1hbmQgcGluIGdvZXMgaGlnaAor ICoJCShsb2dpY2FsIHZhbHVlIDEpLgorICogLUVQRVJNIGluIGNhc2Ugb2YgZGF0YV9hdmFpbGFi bGUgJiBhY2NlcHRfY29tbWFuZCBwaW4gc3RpbGwgbG93CisgKgkJKGxvZ2ljYWwgdmFsdWUgMCku CisgKi8KK3N0YXRpYyBpbnQgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX29uX2dwaW8od2FpdF9x dWV1ZV9oZWFkX3QgcXVldWUsCisJCQkJCSAgICBpbnQgdGltZW91dCkKK3sKKwlpbnQgc3RhdGVf ZGF0YSA9IDA7CisJaW50IHN0YXRlX2NvbW1hbmQgPSAwOworCWludCByZXQgPSBtc2Vjc190b19q aWZmaWVzKFRJQ0tfR1BJT19TUE9PTElORyk7CisJc3RydWN0IHRwbV9jaGlwICpjaGlwID0KKwkg ICAgKHN0cnVjdCB0cG1fY2hpcCAqKWkyY19nZXRfY2xpZW50ZGF0YShwaW5faW5mb3MtPmNsaWVu dCk7CisJaW50IGxvbmdfdGltZW91dCA9CisJICAgIHRwbV9jYWxjX29yZGluYWxfZHVyYXRpb24o Y2hpcCwgVFBNX0kyQ19PUkRJTkFMX0xPTkcpOworCWludCB3YWl0X3RpbWUgPSAwOworCURFRklO RV9XQUlUKF9fd2FpdCk7CisKKwlpZiAodGltZW91dCA+IGxvbmdfdGltZW91dCkKKwkJdGltZW91 dCA9IGxvbmdfdGltZW91dDsKKworCWRvIHsKKwkJcHJlcGFyZV90b193YWl0KCZxdWV1ZSwgJl9f d2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJc3RhdGVfZGF0YSA9IGdwaW9fcmVhZHBpbihw aW5faW5mb3MtPmRhdGFfYXZhaWxfcGluKTsKKwkJc3RhdGVfY29tbWFuZCA9IGdwaW9fcmVhZHBp bihwaW5faW5mb3MtPmFjY2VwdF9waW4pOworCisJCWlmIChzdGF0ZV9kYXRhID4gMCB8fCBzdGF0 ZV9jb21tYW5kID4gMCkKKwkJCWJyZWFrOworCQllbHNlIGlmICh3YWl0X3RpbWUgPj0gdGltZW91 dCkKKwkJCWJyZWFrOworCQllbHNlIGlmICghc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJ CXJldCA9CisJCQkgICAgc2NoZWR1bGVfdGltZW91dChtc2Vjc190b19qaWZmaWVzCisJCQkJCSAg ICAgKFRJQ0tfR1BJT19TUE9PTElORykpOworCQkJd2FpdF90aW1lICs9IG1zZWNzX3RvX2ppZmZp ZXMoVElDS19HUElPX1NQT09MSU5HKTsKKwkJfSBlbHNlIHsKKwkJCXJldCA9IC1FUkVTVEFSVFNZ UzsKKwkJCWJyZWFrOworCQl9CisJfSB3aGlsZSAoMSk7CisJZmluaXNoX3dhaXQoJnF1ZXVlLCAm X193YWl0KTsKKworCXJldHVybiAoc3RhdGVfZGF0YSAmJiBzdGF0ZV9jb21tYW5kKSA/IC1FSU8g OiBzdGF0ZV9kYXRhID8gREFUQV9PTiA6CisJICAgIHN0YXRlX2NvbW1hbmQgPyBDT01NQU5EX09O IDogLUVQRVJNOworfQorCisvKgorICogcmVzcG9uc2VTaXplIHJldHVybiB0aGUgY29tbWFuZCBz aXplCisgKiBAcGFyYW06IGJ1ZmZlciwgY29tbWFuZCBidWZmZXIuCisgKiBAcGFyYW06IHNpemUs IHRoZSBidWZmZXIgc2l6ZS4KKyAqIEByZXR1cm46IHRoZSBjb21tYW5kIHNpemUuCisgKi8KK3N0 YXRpYyBpbnQgcmVzcG9uc2VTaXplKGNvbnN0IGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCit7 CisJc2l6ZV90IHZhbCA9IDA7CisJaWYgKHNpemUgPj0gVFBNX0hFQURFUl9TSVpFKSB7CisJCXZh bCA9IChzaXplX3QpICgoKHVuc2lnbmVkKWJ1ZmZlclsyXSkgPDwgMjQKKwkJCQl8ICgodW5zaWdu ZWQpYnVmZmVyWzNdKSA8PCAxNgorCQkJCXwgKCh1bnNpZ25lZClidWZmZXJbNF0pIDw8IDggfCAo dW5zaWduZWQpCisJCQkJYnVmZmVyWzVdKTsKKwl9CisKKwlpZiAodmFsIDwgVFBNX0JVRlNJWkUp CisJCXJldHVybiB2YWw7CisJZWxzZQorCQlyZXR1cm4gVFBNX0JVRlNJWkU7Cit9CisKKy8qCisg KiB0cG1fc3RtX2kyY19zZW5kIHNlbmQgVFBNIGNvbW1hbmRzIHRocm91Z2ggdGhlIEkyQyBidXMu CisgKiBCZWZvcmUgc2VuZGluZyBhbnkgVFBNIGNvbW1hbmRzLCB0cG1fc3RtX2kyY19zZW5kIHBv bGwgZGF0YV9hdmFpbGFibGUgYW5kCisgKiBhY2NlcHRfY29tbWFuZCBUUE0gR1BJT3MuCisgKgor ICogSW4gY2FzZSB0aGUgZGF0YV9hdmFpbGFibGUgaXMgaGlnaCAobG9naWNhbCB2YWx1ZSAxKSwg dHBtX3N0bV9pMmNfc2VuZCB3aWxsCisgKiBlbXB0eSB0aGUgVFBNIEZJRk8gYnkgcmVhZGluZyBh bGwgdGhlIGRhdGFzIHN0b3JlZCBpbnNpZGUgdGhlIFRQTS4KKyAqCisgKiBUaGVuLCBpZiB0aGUg YWNjZXB0X2NvbW1hbmQgVFBNIEdQSU8gaXMgaGlnaChsb2dpY2FsIHZhbHVlIDEpCisgKiB0cG1f c3RtX2kyY19zZW5kIHdpbGwgZmlyc3Qgc2VuZCB0aGUgMTAgYnl0ZXMgaGVhZGVyIG9mIHRoZSBU Q0cgY29tbWFuZHMgYW5kCisgKiB0aGVuIHNlbmQgdGhlIG90aGVycyBieXRlcyBieSA0MCBieXRl cyBibG9ja3MuCisgKgorICogZGF0YV9hdmFpbGFibGUgYW5kIGFjY2VwdF9jb21tYW5kIFRQTSBH UElPcyB3aWxsIGdvZXMgbG93IHdoZW4gdGhlIFRQTQorICogY29tcHV0ZSB0aGUgY29tbWFuZC4K KyAqCisgKiBAcGFyYW06IGNoaXAsIHRoZSB0cG1fY2hpcCBkZXNjcmlwdGlvbiBhcyBzcGVjaWZp ZWQgaW4gZHJpdmVyL2NoYXIvdHBtL3RwbS5oLgorICogQHBhcmFtOiBidWYsCXRoZSBidWZmZXIg dG8gc2VuZC4KKyAqIEBwYXJhbTogY291bnQsIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gc2VuZC4K KyAqIEByZXR1cm46IEluIGNhc2Ugb2Ygc3VjY2VzcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNlbnQu CisgKgkJCUluIG90aGVyIGNhc2UsIGEgPCAwIHZhbHVlIGRlc2NyaWJpbmcgdGhlIGlzc3VlLgor ICovCitzdGF0aWMgaW50IHRwbV9zdG1faTJjX3NlbmQoc3RydWN0IHRwbV9jaGlwICpjaGlwLCB1 bnNpZ25lZCBjaGFyICpidWYsCisJCQkgICAgc2l6ZV90IGNvdW50KQoreworCXUzMiByZXQgPSAw LCBpLCBzaXplLCBvcmRpbmFsLCBwaW4gPSAwOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7 CisKKyNpZmRlZiBERUJVRworCXByaW50ayhLRVJOX0lORk8gInRwbV9zdDE5X2kyYzogdHBtX3N0 bV9pMmNfc2VuZFxuIik7CisjZW5kaWYKKworCWlmIChjaGlwID09IE5VTEwpCisJCXJldHVybiAt RUJVU1k7CisJaWYgKGNvdW50IDwgVFBNX0hFQURFUl9TSVpFKQorCQlyZXR1cm4gLUVCVVNZOwor CWNsaWVudCA9IChzdHJ1Y3QgaTJjX2NsaWVudCAqKXBpbl9pbmZvcy0+Y2xpZW50OworCisJb3Jk aW5hbCA9IGJlMzJfdG9fY3B1KCooKF9fYmUzMiAqKSAoYnVmICsgNikpKTsKKworCS8qIGkyY19j bGllbnQgaW5pdGlhbGl6YXRpb24gKi8KKwljbGllbnQtPmZsYWdzID0gMDsKKworCS8qIFdhaXQg Zm9yIEFjY2VwdENtZCBzaWduYWwgaGlnaCAqLworCS8qIENoZWNrIGlmIGRhdGEgYXJlIGF2YWls YWJsZSBiZWZvcmUgKi8KKwkvKiBzZW5kaW5nIGRhdGEgKGRhdGFfYXZhaWxfcGluIGhpZ2h0KSAq LworCS8qIElmIGRhdGEgYXJlIGF2YWlsYWJsZSwgd2UgcmVhZCB0aGUgZGF0YSAqLworCWluaXRf d2FpdHF1ZXVlX2hlYWQoJnBpbl9pbmZvcy0+d3JpdGVfcXVldWUpOworCXBpbiA9IHdhaXRfZXZl bnRfaW50ZXJydXB0aWJsZV9vbl9ncGlvKHBpbl9pbmZvcy0+d3JpdGVfcXVldWUsCisJCQkJCSAg ICAgICB0cG1fY2FsY19vcmRpbmFsX2R1cmF0aW9uCisJCQkJCSAgICAgICAoY2hpcCwgb3JkaW5h bCkpOworCWlmIChwaW4gPCAwKSB7CisJCXJldCA9IHBpbjsKKwkJZ290byBlbmQ7CisJfQorCisJ Y2xpZW50LT5mbGFncyA9IEkyQ19NX1JEOworCisJc2l6ZSA9IFRQTV9IRUFERVJfU0laRTsKKwlm b3IgKGkgPSAwOyBwaW4gPT0gREFUQV9PTiAmJiBpIDwgc2l6ZTspIHsKKwkJcmV0ID0gaTJjX21h c3Rlcl9yZWN2KGNsaWVudCwKKwkJCQkgICAgICBwaW5faW5mb3MtPnRwbV9pMmNfYnVmZmVyWzFd LAorCQkJCSAgICAgIChpID09IDApID8gVFBNX0hFQURFUl9TSVpFIDoKKwkJCQkgICAgICBjb3Vu dCAtIGkgPiBUUE1fSTJDX0JMT0NLX1NJWkUgPworCQkJCSAgICAgIFRQTV9JMkNfQkxPQ0tfU0la RSA6IGNvdW50IC0gaSk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBlbmQ7CisJCWlmIChpID09 IDApCisJCQlzaXplID0KKwkJCSAgICByZXNwb25zZVNpemUocGluX2luZm9zLT50cG1faTJjX2J1 ZmZlclsxXSwgY291bnQpOworCQkoaSA9PSAwKSA/IChpICs9IFRQTV9IRUFERVJfU0laRSkgOiAo aSArPSBUUE1fSTJDX0JMT0NLX1NJWkUpOworCisJCWlmIChpIDwgc2l6ZSkKKwkJCXBpbiA9CisJ CQkgICAgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX29uX2dwaW8ocGluX2luZm9zLT4KKwkJCQkJ CQkgICAgIHdyaXRlX3F1ZXVlLAorCQkJCQkJCSAgICAgbXNlY3NfdG9famlmZmllcworCQkJCQkJ CSAgICAgKFRQTV9JMkNfU0hPUlQpKTsKKwl9CisKKwlwaW4gPSB3YWl0X2V2ZW50X2ludGVycnVw dGlibGVfb25fZ3BpbyhwaW5faW5mb3MtPndyaXRlX3F1ZXVlLAorCQkJCQkgICAgICAgbXNlY3Nf dG9famlmZmllcyhUUE1fSTJDX1NIT1JUKSk7CisKKwkvKiBpMmNfY2xpZW50IGluaXRpYWxpemF0 aW9uICovCisJY2xpZW50LT5mbGFncyA9IDA7CisKKwlzaXplID0gVFBNX0hFQURFUl9TSVpFOwor CWZvciAoaSA9IDA7IGkgPCBzaXplICYmIHBpbiA9PSBDT01NQU5EX09OOykgeworCQltZW1jcHko cGluX2luZm9zLT50cG1faTJjX2J1ZmZlclswXSwgYnVmICsgaSwKKwkJICAgICAgIChpID09IDAp ID8gVFBNX0hFQURFUl9TSVpFIDogY291bnQgLSBpID4KKwkJICAgICAgIFRQTV9JMkNfQkxPQ0tf U0laRSA/IFRQTV9JMkNfQkxPQ0tfU0laRSA6IGNvdW50IC0gaSk7CisKKwkJaWYgKGkgPT0gMCkg eworCQkJc2l6ZSA9IHJlc3BvbnNlU2l6ZShidWYsIGNvdW50KTsKKwkJCXNpemUgPSAoc2l6ZSA8 IGNvdW50ID8gc2l6ZSA6IGNvdW50KTsKKwkJfQorCQlyZXQgPQorCQkgICAgaTJjX21hc3Rlcl9z ZW5kKGNsaWVudCwKKwkJCQkgICAgcGluX2luZm9zLT50cG1faTJjX2J1ZmZlclswXSwKKwkJCQkg ICAgY291bnQgPj0gVFBNX0hFQURFUl9TSVpFID8gKGkgPT0KKwkJCQkJCQkJMCkgPworCQkJCSAg ICBUUE1fSEVBREVSX1NJWkUgOiBjb3VudCAtIGkgPgorCQkJCSAgICBUUE1fSTJDX0JMT0NLX1NJ WkUgPyBUUE1fSTJDX0JMT0NLX1NJWkUgOgorCQkJCSAgICBjb3VudCAtIGkgOiBjb3VudCk7CisJ CWlmIChyZXQgPCAwKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJ0cG1fc3QxOV9pMmM6IEZhaWxl ZCB0byBzZW5kIGRhdGFcbiIpOworCQkJZ290byBlbmQ7CisJCX0KKworCQkoaSA9PSAwKSA/IChp ICs9IFRQTV9IRUFERVJfU0laRSkgOiAoaSArPSBUUE1fSTJDX0JMT0NLX1NJWkUpOworCQkvKiBX YWl0IGZvciBBY2NlcHRDbWQgc2lnbmFsIGhpZ2h0ICovCisJCWlmIChpIDwgc2l6ZSkKKwkJCXBp biA9CisJCQkgICAgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX29uX2dwaW8ocGluX2luZm9zLT4K KwkJCQkJCQkgICAgIHdyaXRlX3F1ZXVlLAorCQkJCQkJCSAgICAgbXNlY3NfdG9famlmZmllcwor CQkJCQkJCSAgICAgKFRQTV9JMkNfU0hPUlQpKTsKKworCQlpZiAocGluICE9IENPTU1BTkRfT04p IHsKKwkJCXByaW50ayhLRVJOX0lORk8KKwkJCSAgICAgICAidHBtX3N0MTlfaTJjOiIKKwkJCSAg ICAgICAiIEZhaWxlZCB0byByZWFkIGdwaW8gcGluIChBY2NlcHRDbWQpXG4iKTsKKwkJCXJldCA9 IC1FSU87CisJCQlnb3RvIGVuZDsKKwkJfQorCX0KKwlpZiAoaSA9PSAwKSB7CisJCXByaW50ayhL RVJOX0lORk8KKwkJICAgICAgICJ0cG1fc3QxOV9pMmM6IEZhaWxlZCB0byByZWFkIGdwaW8gcGlu IChBY2NlcHRDbWQpXG4iKTsKKwkJcmV0ID0gLUVJTzsKKwl9CitlbmQ6CisJcmV0dXJuIHJldCA/ IHJldCA6IGNvdW50OworfQorCisvKgorICogdHBtX3N0bV9pMmNfcmVjdiByZWNlaXZlZCBUUE0g cmVzcG9uc2UgdGhyb3VnaCB0aGUgSTJDIGJ1cy4KKyAqIEJlZm9yZSByZWNlaXZpbmcgYW55IFRQ TSByZXNwb25zZSwgdHBtX3N0bV9pMmNfcmVjdiBwb2xsIGRhdGFfYXZhaWxhYmxlIGFuZAorICog YWNjZXB0X2NvbW1hbmQgVFBNIEdQSU9zLgorICoKKyAqIEluIGNhc2UgdGhlIGFjY2VwdF9jb21t YW5kIGlzIGhpZ2ggKGxvZ2ljYWwgdmFsdWUgMSksIHRwbV9zdG1faTJjX3JlY3Ygd2lsbAorICog ZG8gbm90aGluZy4KKyAqCisgKiBUaGVuLCBpZiB0aGUgZGF0YV9hdmFpbGFibGUgVFBNIEdQSU8g aXMgaGlnaChsb2dpY2FsIHZhbHVlIDEpCisgKiB0cG1fc3RtX2kyY19yZWN2IHdpbGwgZmlyc3Qg cmVjZWl2ZSB0aGUgMTAgYnl0ZXMgaGVhZGVyIG9mIHRoZSBUQ0cgVFBNCisgKiByZXNwb25zZSBh bmQgdGhlbiByZWNlaXZlIHRoZSBvdGhlcnMgYnl0ZXMgYnkgNDAgYnl0ZXMgYmxvY2tzLgorICoK KyAqIGFjY2VwdF9jb21tYW5kIFRQTSBHUElPcyB3aWxsIGdvZXMgaGlnaCB3aGVuIHRoZSBUUE0g Rm9mbyBpcyBlbXB0eS4KKyAqCisgKiBAcGFyYW06IGNoaXAsIHRoZSB0cG1fY2hpcCBkZXNjcmlw dGlvbiBhcyBzcGVjaWZpZWQgaW4gZHJpdmVyL2NoYXIvdHBtL3RwbS5oLgorICogQHBhcmFtOiBi dWYsCXRoZSBidWZmZXIgdG8gc3RvcmUgZGF0YXMuCisgKiBAcGFyYW06IGNvdW50LCB0aGUgbnVt YmVyIG9mIGJ5dGVzIHRvIHNlbmQuCisgKiBAcmV0dXJuOiBJbiBjYXNlIG9mIHN1Y2Nlc3MgdGhl IG51bWJlciBvZiBieXRlcyByZWNlaXZlZC4KKyAqCQkJSW4gb3RoZXIgY2FzZSwgYSA8IDAgdmFs dWUgZGVzY3JpYmluZyB0aGUgaXNzdWUuCisgKi8KK3N0YXRpYyBpbnQgdHBtX3N0bV9pMmNfcmVj dihzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKwkJCSAgICBzaXpl X3QgY291bnQpCit7CisJaW50IHJldCA9IDA7CisJaW50IGksIHNpemU7CisJaW50IHBpbiA9IDA7 CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKworI2lmZGVmIERFQlVHCisJcHJpbnRrKEtF Uk5fSU5GTyAidHBtX3N0MTlfaTJjOiB0cG1fc3RtX2kyY19yZWN2XG4iKTsKKyNlbmRpZgorCisJ aWYgKGNoaXAgPT0gTlVMTCkKKwkJcmV0dXJuIC1FQlVTWTsKKwlpZiAoY291bnQgPCBUUE1fSEVB REVSX1NJWkUpCisJCXJldHVybiAtRUJVU1k7CisKKwljbGllbnQgPSAoc3RydWN0IGkyY19jbGll bnQgKilwaW5faW5mb3MtPmNsaWVudDsKKworCS8qIENvbmZpZ3VyZSBUUE0gSTJDICovCisJY2xp ZW50LT5mbGFncyA9IEkyQ19NX1JEOworCisJLyogU3Bvb2wgb24gdGhlIGdvb2QgZ3BpbyBhcyBs b25nIGFzIHBpbiBHUElPIDMgbm90IEhJR0hUICovCisJaW5pdF93YWl0cXVldWVfaGVhZCgmY2hp cC0+dmVuZG9yLnJlYWRfcXVldWUpOworCXBpbiA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV9v bl9ncGlvKGNoaXAtPnZlbmRvci5yZWFkX3F1ZXVlLAorCQkJCQkgICAgICAgdHBtX2NhbGNfb3Jk aW5hbF9kdXJhdGlvbgorCQkJCQkgICAgICAgKGNoaXAsIFRQTV9JMkNfT1JESU5BTF9MT05HKSk7 CisKKwlzaXplID0gVFBNX0hFQURFUl9TSVpFOworCWZvciAoaSA9IDA7IGkgPCBzaXplICYmIHBp biA9PSBEQVRBX09OOykgeworCQlyZXQgPQorCQkgICAgaTJjX21hc3Rlcl9yZWN2KGNsaWVudCwK KwkJCQkgICAgcGluX2luZm9zLT50cG1faTJjX2J1ZmZlclsxXSwKKwkJCQkgICAgKGNvdW50ID49 IFRQTV9IRUFERVJfU0laRSA/IGkgPT0KKwkJCQkgICAgIDAgPyBUUE1fSEVBREVSX1NJWkUgOiAo c2l6ZSAtIGkpID4KKwkJCQkgICAgIFRQTV9JMkNfQkxPQ0tfU0laRSA/IFRQTV9JMkNfQkxPQ0tf U0laRSA6CisJCQkJICAgICBzaXplIC0gaSA6IGNvdW50KSk7CisJCWlmIChyZXQgPCAwKSB7CisJ CQlwcmludGsoS0VSTl9JTkZPCisJCQkgICAgICAgInRwbV9zdDE5X2kyYzoiCisJCQkgICAgICAg IiBGYWlsZWQgdG8gcmVhZCBncGlvIHBpbiAoRGF0YUF2YWxhaWJsZSlcbiIpOworCQkJZ290byBl bmQ7CisJCX0KKworCQlpZiAoYnVmICE9IE5VTEwpIHsKKwkJCW1lbWNweShidWYgKyBpLCBwaW5f aW5mb3MtPnRwbV9pMmNfYnVmZmVyWzFdLAorCQkJICAgICAgIChjb3VudCA+PSBUUE1fSEVBREVS X1NJWkUgPyBpID09IDAgPworCQkJCVRQTV9IRUFERVJfU0laRSA6IChzaXplIC0gaSkgPgorCQkJ CVRQTV9JMkNfQkxPQ0tfU0laRSA/IFRQTV9JMkNfQkxPQ0tfU0laRSA6IHNpemUgLQorCQkJCWkg OiBjb3VudCkpOworCisJCQlpZiAoaSA9PSAwKSB7CisJCQkJc2l6ZSA9IHJlc3BvbnNlU2l6ZShi dWYsIHNpemUpOworCQkJCWlmIChzaXplID4gY291bnQpCisJCQkJCXNpemUgPSBjb3VudDsKKwkJ CX0KKwkJfSBlbHNlIHsKKwkJCXByaW50ayhLRVJOX0lORk8gInRwbV9zdDE5X2kyYzogcmVhZCBi dWZmZXIgaXMgTlVMTFxuIik7CisJCQlnb3RvIGVuZDsKKwkJfQorCisJCShpID09IDApID8gKGkg Kz0gVFBNX0hFQURFUl9TSVpFKSA6IChpICs9IFRQTV9JMkNfQkxPQ0tfU0laRSk7CisKKwkJaWYg KGkgPCBzaXplKQorCQkJcGluID0KKwkJCSAgICB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfb25f Z3BpbyhjaGlwLT52ZW5kb3IuCisJCQkJCQkJICAgICByZWFkX3F1ZXVlLAorCQkJCQkJCSAgICAg bXNlY3NfdG9famlmZmllcworCQkJCQkJCSAgICAgKFRQTV9JMkNfU0hPUlQpKTsKKwl9CisKKwlp ZiAoaSA9PSAwKSB7CisJCXByaW50ayhLRVJOX0lORk8KKwkJICAgICAgICJ0cG1fc3QxOV9pMmM6 ICIKKwkJICAgICAgICJGYWlsZWQgdG8gcmVhZCBncGlvIHBpbiAoRGF0YUF2YWxhaWJsZSlcbiIp OworCQlyZXQgPSAtRUlPOworCQlnb3RvIGVuZDsKKwl9CisJcmV0dXJuIHNpemU7CitlbmQ6CisJ cmV0dXJuIHJldDsKK30KKworLyoKKyAqIHRwbV9zdG1faTJjX2NhbmNlbCwgY2FuY2VsIGlzIG5v dCBpbXBsZW1lbnRlZC4KKyAqIEBwYXJhbTogY2hpcCwgdGhlIHRwbV9jaGlwIGRlc2NyaXB0aW9u IGFzIHNwZWNpZmllZCBpbiBkcml2ZXIvY2hhci90cG0vdHBtLmguCisgKi8KK3N0YXRpYyB2b2lk IHRwbV9zdG1faTJjX2NhbmNlbChzdHJ1Y3QgdHBtX2NoaXAgKmNoaXApCit7Cit9CQkJCS8qIHRw bV9zdG1faTJjX2NhbmNlbCgpICovCisKKy8qCisgKiB0cG1fc3RtX2kyY19zdGF0dXMgaXMgbm90 IGltcGxlbWVudGVkIGJlY2F1c2UgVElTIHJlZ2lzdGVycyBhcmUgbm90CisgKiBpbXBsZW1lbnRl ZC4KKyAqLworc3RhdGljIHU4IHRwbV9zdG1faTJjX3N0YXR1cyhzdHJ1Y3QgdHBtX2NoaXAgKmNo aXApCit7CisJcmV0dXJuIC1FTk9TWVM7Cit9CQkJCS8qIHRwbV9zdG1faTJjX3N0YXR1cygpICov CisKKyNpZmRlZiBfTU9EVUxFCisKK3N0YXRpYyB2b2lkIHRwbV9zdDE5X2kyY19kdW1teShzdHJ1 Y3QgZGV2aWNlICpkZXYpCit7CisKK30JCQkJLyp0cG1fc3QxOV9pMmNfZHVtbXkoKSAqLworCisv KgorICogdHBtX3N0MTlfaTJjX3JlbGVhc2UgZG8gbm90aGluZworICogQHBhcmFtOiBrb2JqLCBu b3QgdXNlZAorICovCitzdGF0aWMgdm9pZCB0cG1fc3QxOV9pMmNfcmVsZWFzZShzdHJ1Y3Qga29i amVjdCAqa29iaikKK3sKKwlzdHJ1Y3QgdHBtX2NoaXAgKmNoaXA7CisJcHJpbnRrKEtFUk5fSU5G TyAidHBtX3N0MTlfaTJjX3JlbGVhc2VcbiIpOworCisJaWYgKF9jbGllbnQgIT0gTlVMTCkgewor CQljaGlwID0gKHN0cnVjdCB0cG1fY2hpcCAqKWkyY19nZXRfY2xpZW50ZGF0YShfY2xpZW50KTsK KworCQlpZiAoY2hpcCAhPSBOVUxMKSB7CisJCQljaGlwLT5yZWxlYXNlID0gdHBtX3N0MTlfaTJj X2R1bW15OworCQkJY2hpcC0+ZGV2LT5yZWxlYXNlKGNoaXAtPmRldik7CisJCX0KKwl9Cit9CQkJ CS8qIHRwbV9zdDE5X2kyY19yZWxlYXNlKCkgKi8KKyNlbmRpZiAvKl9NT0RVTEUgKi8KKy8qCisg KiB0cG1fc3QxOV9pMmNfaW9jdGwgcHJvdmlkZXMgMiBoYW5kbGVzOgorICogLSBUUE1JT0NfQ0FO Q0VMOiBhbGxvdyB0byBDQU5DRUwgYSBUUE0gY29tbWFuZHMgZXhlY3V0aW9uLgorICogICBTZWUg dHBtX3N0bV9pMmNfY2FuY2VsIGRlc2NyaXB0aW9uIGFib3ZlCisgKiAtIFRQTUlPQ19UUkFOU01J VDogYWxsb3cgdG8gdHJhbnNtaXQgYSBUUE0gY29tbWFuZHMuCisgKgorICogQHJldHVybjogSW4g Y2FzZSBvZiBzdWNjZXNzLCByZXR1cm4gVFBNIHJlc3BvbnNlIHNpemUuCisgKiBJbiBvdGhlciBj YXNlIHJldHVybiA8IDAgdmFsdWUgZGVzY3JpYmluZyB0aGUgaXNzdWUuCisgKi8KK3N0YXRpYyBz c2l6ZV90IHRwbV9zdDE5X2kyY19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmls ZSAqZmlsZSwKKwkJCQkgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorewor CWludCBpbl9zaXplID0gMCwgb3V0X3NpemUgPSAwOworCXN0cnVjdCB0cG1fY2hpcCAqY2hpcCA9 IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBUUE1JT0NfQ0FO Q0VMOgorCQl0cG1fc3RtX2kyY19jYW5jZWwoY2hpcCk7CisJCXJldHVybiAtRU5PU1lTOworCWNh c2UgVFBNSU9DX1RSQU5TTUlUOgorCQlpZiAoY29weV9mcm9tX3VzZXIocGluX2luZm9zLT50cG1f aTJjX2J1ZmZlclswXSwKKwkJICAgIChjb25zdCBjaGFyICopYXJnLCBUUE1fSEVBREVSX1NJWkUp KQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWluX3NpemUgPSByZXNwb25zZVNpemUocGluX2luZm9z LT50cG1faTJjX2J1ZmZlclswXSwKKwkJCQkgICAgICBUUE1fSEVBREVSX1NJWkUpOworCQlpZiAo aW5fc2l6ZSA+IHNpemVvZihwaW5faW5mb3MtPnRwbV9pMmNfYnVmZmVyWzBdKSkKKwkJCWluX3Np emUgPSBzaXplb2YocGluX2luZm9zLT50cG1faTJjX2J1ZmZlclswXSk7CisJCWlmIChjb3B5X2Zy b21fdXNlcihwaW5faW5mb3MtPnRwbV9pMmNfYnVmZmVyWzBdLAorCQkJCSAgIChjb25zdCBjaGFy ICopYXJnLCBpbl9zaXplKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQl0cG1fc3RtX2kyY19zZW5k KGNoaXAsIHBpbl9pbmZvcy0+dHBtX2kyY19idWZmZXJbMF0sIGluX3NpemUpOworCisJCW91dF9z aXplID0gdHBtX3N0bV9pMmNfcmVjdihjaGlwLCBwaW5faW5mb3MtPnRwbV9pMmNfYnVmZmVyWzFd LAorCQkJCQkgICAgVFBNX0JVRlNJWkUpOworCQlpZiAoY29weV90b191c2VyKChjaGFyICopYXJn LCBwaW5faW5mb3MtPnRwbV9pMmNfYnVmZmVyWzFdLAorCQkJCSBvdXRfc2l6ZSkpCisJCQlyZXR1 cm4gLUVGQVVMVDsKKwkJcmV0dXJuIG91dF9zaXplOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5P VFRZOworCX0KKwlyZXR1cm4gLUVOT1RUWTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxl X29wZXJhdGlvbnMgdHBtX3N0MTlfaTJjX2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUs CisJLmxsc2VlayA9IG5vX2xsc2VlaywKKwkucmVhZCA9IHRwbV9yZWFkLAorCS5pb2N0bCA9IHRw bV9zdDE5X2kyY19pb2N0bCwKKwkud3JpdGUgPSB0cG1fd3JpdGUsCisJLm9wZW4gPSB0cG1fb3Bl biwKKwkucmVsZWFzZSA9IHRwbV9yZWxlYXNlLAorfTsKKworc3RhdGljIERFVklDRV9BVFRSKHB1 YmVrLCBTX0lSVUdPLCB0cG1fc2hvd19wdWJlaywgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIo cGNycywgU19JUlVHTywgdHBtX3Nob3dfcGNycywgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIo ZW5hYmxlZCwgU19JUlVHTywgdHBtX3Nob3dfZW5hYmxlZCwgTlVMTCk7CitzdGF0aWMgREVWSUNF X0FUVFIoYWN0aXZlLCBTX0lSVUdPLCB0cG1fc2hvd19hY3RpdmUsIE5VTEwpOworc3RhdGljIERF VklDRV9BVFRSKG93bmVkLCBTX0lSVUdPLCB0cG1fc2hvd19vd25lZCwgTlVMTCk7CitzdGF0aWMg REVWSUNFX0FUVFIodGVtcF9kZWFjdGl2YXRlZCwgU19JUlVHTywgdHBtX3Nob3dfdGVtcF9kZWFj dGl2YXRlZCwgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIoY2FwcywgU19JUlVHTywgdHBtX3No b3dfY2Fwc18xXzIsIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGNhbmNlbCwgU19JV1VTUiB8 IFNfSVdHUlAsIE5VTEwsIHRwbV9zdG9yZV9jYW5jZWwpOworCitzdGF0aWMgc3RydWN0IGF0dHJp YnV0ZSAqc3RtX3RwbV9hdHRyc1tdID0geworCSZkZXZfYXR0cl9wdWJlay5hdHRyLAorCSZkZXZf YXR0cl9wY3JzLmF0dHIsCisJJmRldl9hdHRyX2VuYWJsZWQuYXR0ciwKKwkmZGV2X2F0dHJfYWN0 aXZlLmF0dHIsCisJJmRldl9hdHRyX293bmVkLmF0dHIsCisJJmRldl9hdHRyX3RlbXBfZGVhY3Rp dmF0ZWQuYXR0ciwKKwkmZGV2X2F0dHJfY2Fwcy5hdHRyLAorCSZkZXZfYXR0cl9jYW5jZWwuYXR0 ciwgTlVMTCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHN0bV90cG1fYXR0 cl9ncnAgPSB7CisJLmF0dHJzID0gc3RtX3RwbV9hdHRycworfTsKKworc3RhdGljIHN0cnVjdCB0 cG1fdmVuZG9yX3NwZWNpZmljIHN0X2kyY190cG0gPSB7CisJLnNlbmQgPSB0cG1fc3RtX2kyY19z ZW5kLAorCS5yZWN2ID0gdHBtX3N0bV9pMmNfcmVjdiwKKwkuY2FuY2VsID0gdHBtX3N0bV9pMmNf Y2FuY2VsLAorCS5zdGF0dXMgPSB0cG1fc3RtX2kyY19zdGF0dXMsCisJLmF0dHJfZ3JvdXAgPSAm c3RtX3RwbV9hdHRyX2dycCwKKwkubWlzY2RldiA9IHsuZm9wcyA9ICZ0cG1fc3QxOV9pMmNfZm9w cyx9LAorfTsKKworLyoKKyAqIHRwbV9zdDE5X2kyY19wcm9iZSBpbml0aWFsaXplIHRoZSBUUE0g ZGV2aWNlCisgKiBAcGFyYW06IGNsaWVudCwgdGhlIGkyY19jbGllbnQgZHJlc2NyaXB0aW9uIChU UE0gSTJDIGRlc2NyaXB0aW9uKS4KKyAqIEBwYXJhbTogaWQsIHRoZSBpMmNfZGV2aWNlX2lkIHN0 cnVjdC4KKyAqIEByZXR1cm46IDAgaW4gY2FzZSBvZiBzdWNjZXNzLgorICoJCQktMSBpbiBvdGhl ciBjYXNlLgorICovCitzdGF0aWMgaW50Cit0cG1fc3QxOV9pMmNfcHJvYmUoc3RydWN0IGkyY19j bGllbnQgKmNsaWVudCwgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCWludCBl cnI7CisJc3RydWN0IHRwbV9jaGlwICpjaGlwOworCXN0cnVjdCBzdDE5bnAxOF9wbGF0Zm9ybV9k YXRhICpwbGF0Zm9ybV9kYXRhOworCisJcHJpbnRrKEtFUk5fSU5GTyAidHBtX3N0MTlfaTJjOiB0 cG1fc3QxOV9pMmNfcHJvYmVcbiIpOworCisJZXJyID0gMDsKKworCS8qIENoZWNrIEkyQyBwbGF0 Zm9ybSBmdW5jdGlvbm5hbGl0aWVzICovCisJaWYgKGNsaWVudCA9PSBOVUxMKSB7CisJCXByaW50 ayhLRVJOX0lORk8gImNsaWVudCBpcyBOVUxMLiBleGl0aW5nLlxuIik7CisJCWVyciA9IC1FTk9E RVY7CisJCWdvdG8gZW5kOworCX0KKworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xp ZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19JMkMpKSB7CisJCXByaW50ayhLRVJOX0lORk8gInRwbV9z dDE5X2kyYzogY2xpZW50IG5vdCBpMmMgY2FwYWJsZVxuIik7CisJCWVyciA9IC1FTk9ERVY7CisJ CWdvdG8gZW5kOworCX0KKworCWNoaXAgPSB0cG1fcmVnaXN0ZXJfaGFyZHdhcmUoJmNsaWVudC0+ ZGV2LCAmc3RfaTJjX3RwbSk7CisJaWYgKCFjaGlwKSB7CisJCWVyciA9IC1FTk9ERVY7CisJCWdv dG8gZW5kOworCX0KKworCS8qCisJICogU1QxOSBUUE0gZG9lcyBub3Qgc3VwcG9ydCBpbnRlcnJ1 cHQuIGNoaXAtPnZlbmRvci5pcnEgaXMgb25seQorCSAqIHNldCB0byBhIHZhbHVlIGdyZWF0ZXIg dGhhdCAwIGJlY2F1c2Ugc3RhdHVzIGZ1bmN0aW9uIGhhdmUgbm8KKwkgKiBzZW5zZSB3aXRoIHRo aXMgZGV2aWNlIChUSVMgcmVnaXN0ZXIgbm90IGF2YWlsYWJsZSkKKwkgKi8KKwljaGlwLT52ZW5k b3IuaXJxID0gMTsKKworCXBsYXRmb3JtX2RhdGEgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRh OworCXBpbl9pbmZvcyA9IHBsYXRmb3JtX2RhdGE7CisJcGxhdGZvcm1fZGF0YS0+dHBtX2kyY19i dWZmZXJbMF0gPQorCSAgICBrbWFsbG9jKFRQTV9CVUZTSVpFICogc2l6ZW9mKHU4KSwgR0ZQX0tF Uk5FTCk7CisJaWYgKHBsYXRmb3JtX2RhdGEtPnRwbV9pMmNfYnVmZmVyWzBdID09IE5VTEwpIHsK KwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBfdHBtX2NsZWFuX2Fuc3dlcjsKKwl9CisJcGxhdGZv cm1fZGF0YS0+dHBtX2kyY19idWZmZXJbMV0gPQorCSAgICBrbWFsbG9jKFRQTV9CVUZTSVpFICog c2l6ZW9mKHU4KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHBsYXRmb3JtX2RhdGEtPnRwbV9pMmNfYnVm ZmVyWzFdID09IE5VTEwpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBfdHBtX2NsZWFuX3Jl c3BvbnNlOworCX0KKworCXBsYXRmb3JtX2RhdGEtPmNsaWVudCA9IGNsaWVudDsKKworCS8qIFJl Z2lzdGVyIEdQSU8gcGluIHRocm91Z2ggZ2VuZXJpYyBMaW51eCBHUElPIEFQSSAqLworCWVyciA9 IGdwaW9fcmVxdWVzdChwbGF0Zm9ybV9kYXRhLT5hY2NlcHRfcGluLCAiYWNjZXB0IGNvbW1hbmQi KTsKKwlpZiAoZXJyKQorCQlnb3RvIF9ncGlvX2luaXQ7CisKKwllcnIgPSBncGlvX3JlcXVlc3Qo cGxhdGZvcm1fZGF0YS0+ZGF0YV9hdmFpbF9waW4sICJkYXRhIGF2YWlsYWJsZSIpOworCWlmIChl cnIpCisJCWdvdG8gX2dwaW9faW5pdDsKKworCWVyciA9IHdhaXRfdW50aWxfZ29vZF9zaGFwZSgp OworCWlmIChlcnIpCisJCWdvdG8gX2dwaW9fc2V0OworCisJdHBtX2dldF90aW1lb3V0cyhjaGlw KTsKKworCS8qIGF0dGFjaCBjaGlwIGRhdGFzIHRvIGNsaWVudCAqLworCWkyY19zZXRfY2xpZW50 ZGF0YShjbGllbnQsIGNoaXApOworCXBpbl9pbmZvcy0+YkNoaXBGID0gZmFsc2U7CisKKwlwcmlu dGsoS0VSTl9JTkZPICJ0cG1fc3QxOV9pMmM6IFRQTSBJMkMgSW5pdGlhbGl6ZWRcbiIpOworCXJl dHVybiAwOworX2dwaW9fc2V0OgorX2dwaW9faW5pdDoKKwlpZiAocGxhdGZvcm1fZGF0YSkgewor CQlncGlvX2ZyZWUocGxhdGZvcm1fZGF0YS0+YWNjZXB0X3Bpbik7CisJCWdwaW9fZnJlZShwbGF0 Zm9ybV9kYXRhLT5kYXRhX2F2YWlsX3Bpbik7CisJfQorX3RwbV9jbGVhbl9yZXNwb25zZToKKwl0 cG1fcmVtb3ZlX2hhcmR3YXJlKGNoaXAtPmRldik7CisJaWYgKHBsYXRmb3JtX2RhdGEtPnRwbV9p MmNfYnVmZmVyWzFdICE9IE5VTEwpIHsKKwkJa2ZyZWUocGxhdGZvcm1fZGF0YS0+dHBtX2kyY19i dWZmZXJbMV0pOworCQlwbGF0Zm9ybV9kYXRhLT50cG1faTJjX2J1ZmZlclsxXSA9IE5VTEw7CisJ fQorX3RwbV9jbGVhbl9hbnN3ZXI6CisJaWYgKHBsYXRmb3JtX2RhdGEtPnRwbV9pMmNfYnVmZmVy WzBdICE9IE5VTEwpIHsKKwkJa2ZyZWUocGxhdGZvcm1fZGF0YS0+dHBtX2kyY19idWZmZXJbMF0p OworCQlwbGF0Zm9ybV9kYXRhLT50cG1faTJjX2J1ZmZlclswXSA9IE5VTEw7CisJfQorCXBpbl9p bmZvcy0+YkNoaXBGID0gdHJ1ZTsKK2VuZDoKKwlwcmludGsoS0VSTl9JTkZPICJ0cG1fc3QxOV9p MmM6IFRQTSBJMkMgaW5pdGlhbGlzYXRpb24gZmFpbFxuIik7CisJcmV0dXJuIGVycjsKK30KKwor LyoKKyAqIHRwbV9zdDE5X2kyY19yZW1vdmUgcmVtb3ZlIHRoZSBUUE0gZGV2aWNlCisgKiBAcGFy YW06IGNsaWVudCwgdGhlIGkyY19jbGllbnQgZHJlc2NyaXB0aW9uIChUUE0gSTJDIGRlc2NyaXB0 aW9uKS4KKwkJY2xlYXJfYml0KDAsICZjaGlwLT5pc19vcGVuKTsKKyAqIEByZXR1cm46IDAgaW4g Y2FzZSBvZiBzdWNjZXNzLgorICovCitzdGF0aWMgX19kZXZleGl0IGludCB0cG1fc3QxOV9pMmNf cmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IHRwbV9jaGlwICpj aGlwID0gKHN0cnVjdCB0cG1fY2hpcCAqKWkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXBy aW50ayhLRVJOX0lORk8gInRwbV9zdDE5X2kyYzogdHBtX3N0MTlfaTJjX3JlbW92ZVxuIik7CisK KwlpZiAocGluX2luZm9zICE9IE5VTEwpIHsKKwkJZ3Bpb19mcmVlKHBpbl9pbmZvcy0+YWNjZXB0 X3Bpbik7CisJCWdwaW9fZnJlZShwaW5faW5mb3MtPmRhdGFfYXZhaWxfcGluKTsKKworCQkvKiBD aGVjayBpZiBjaGlwIGhhcyBiZWVuIHByZXZpb3VzbHkgY2xlYW4gKi8KKwkJaWYgKHBpbl9pbmZv cy0+YkNoaXBGICE9IHRydWUpCisJCQl0cG1fcmVtb3ZlX2hhcmR3YXJlKGNoaXAtPmRldik7CisJ CWlmIChwaW5faW5mb3MtPnRwbV9pMmNfYnVmZmVyWzFdICE9IE5VTEwpIHsKKwkJCWtmcmVlKHBp bl9pbmZvcy0+dHBtX2kyY19idWZmZXJbMV0pOworCQkJcGluX2luZm9zLT50cG1faTJjX2J1ZmZl clsxXSA9IE5VTEw7CisJCX0KKwkJaWYgKHBpbl9pbmZvcy0+dHBtX2kyY19idWZmZXJbMF0gIT0g TlVMTCkgeworCQkJa2ZyZWUocGluX2luZm9zLT50cG1faTJjX2J1ZmZlclswXSk7CisJCQlwaW5f aW5mb3MtPnRwbV9pMmNfYnVmZmVyWzBdID0gTlVMTDsKKwkJfQorCX0KKworCXJldHVybiAwOwor fQorCisvKgorICogdHBtX3N0MTlfaTJjX3BtX3N1c3BlbmQgc3VzcGVuZCB0aGUgVFBNIGRldmlj ZQorICogQWRkZWQ6IFdvcmsgYXJvdW5kIHdoZW4gc3VzcGVuZCBhbmQgbm8gdHBtIGFwcGxpY2F0 aW9uIGlzIHJ1bm5pbmcsIHN1c3BlbmQKKyAqIG1heSBmYWlsIGJlY2F1c2UgY2hpcC0+ZGF0YV9i dWZmZXIgaXMgbm90IHNldCAob25seSBzZXQgaW4gdHBtX29wZW4gaW4gTGludXgKKyAqIFRQTSBj b3JlKQorICogQHBhcmFtOiBjbGllbnQsIHRoZSBpMmNfY2xpZW50IGRyZXNjcmlwdGlvbiAoVFBN IEkyQyBkZXNjcmlwdGlvbikuCisgKiBAcGFyYW06IG1lc2csIHRoZSBwb3dlciBtYW5hZ2VtZW50 IG1lc3NhZ2UuCisgKiBAcmV0dXJuOiAwIGluIGNhc2Ugb2Ygc3VjY2Vzcy4KKyAqLworc3RhdGlj IGludCB0cG1fc3QxOV9pMmNfcG1fc3VzcGVuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBw bV9tZXNzYWdlX3QgbWVzZykKK3sKKwlzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAgPQorCSAgICAoc3Ry dWN0IHRwbV9jaGlwICopaTJjX2dldF9jbGllbnRkYXRhKHBpbl9pbmZvcy0+Y2xpZW50KTsKKwlp bnQgcmV0ID0gMDsKKwlpZiAoY2hpcC0+ZGF0YV9idWZmZXIgPT0gTlVMTCkKKwkJY2hpcC0+ZGF0 YV9idWZmZXIgPSBwaW5faW5mb3MtPnRwbV9pMmNfYnVmZmVyWzBdOworCXJldCA9IHRwbV9wbV9z dXNwZW5kKCZjbGllbnQtPmRldiwgbWVzZyk7CisJcmV0dXJuIHJldDsKK30JCQkJLyogdHBtX3N0 MTlfaTJjX3N1c3BlbmQoKSAqLworCisvKgorICogdHBtX3N0MTlfaTJjX3BtX3Jlc3VtZSByZXN1 bWUgdGhlIFRQTSBkZXZpY2UKKyAqIFRoaXMgcGFydCBvZiB0aGUgTGludXggZHJpdmVyIHNob3Vs ZCBiZSBtb3ZlIGluIGFuIG90aGVyIHBhcnQgb3IKKyAqIGVudmlyb25tZW50IChib290bG9hZGVy ID8pCisgKiBAcGFyYW06IGNsaWVudCwgdGhlIGkyY19jbGllbnQgZHJlc2NyaXB0aW9uIChUUE0g STJDIGRlc2NyaXB0aW9uKS4KKyAqIEByZXR1cm46IDAgaW4gY2FzZSBvZiBzdWNjZXNzLgorICov CitzdGF0aWMgaW50IHRwbV9zdDE5X2kyY19wbV9yZXN1bWUoc3RydWN0IGkyY19jbGllbnQgKmNs aWVudCkKK3sKKwlzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAgPQorCSAgICAoc3RydWN0IHRwbV9jaGlw ICopaTJjX2dldF9jbGllbnRkYXRhKHBpbl9pbmZvcy0+Y2xpZW50KTsKKwlpbnQgcmV0ID0gMDsK KwlpZiAoY2hpcC0+ZGF0YV9idWZmZXIgPT0gTlVMTCkKKwkJY2hpcC0+ZGF0YV9idWZmZXIgPSBw aW5faW5mb3MtPnRwbV9pMmNfYnVmZmVyWzBdOworCXJldCA9IHRwbV9wbV9yZXN1bWUoJmNsaWVu dC0+ZGV2KTsKKwlyZXR1cm4gcmV0OworfQkJCQkvKiB0cG1fc3QxOV9pMmNfcG1fcmVzdW1lKCkg Ki8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHRwbV9zdDE5X2kyY19pZFtd ID0geworCXtUUE1fRFJJVkVSX05BTUUsIDB9LAorCXt9Cit9OworCitNT0RVTEVfREVWSUNFX1RB QkxFKGkyYywgdHBtX3N0MTlfaTJjX2lkKTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHRw bV9zdDE5X2kyY19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJICAgLm93bmVyID0gVEhJU19N T0RVTEUsCisJCSAgIC5uYW1lID0gVFBNX0RSSVZFUl9OQU1FLAorCQkgICB9LAorCS5wcm9iZSA9 IHRwbV9zdDE5X2kyY19wcm9iZSwKKwkucmVtb3ZlID0gdHBtX3N0MTlfaTJjX3JlbW92ZSwKKwku cmVzdW1lID0gdHBtX3N0MTlfaTJjX3BtX3Jlc3VtZSwKKwkuc3VzcGVuZCA9IHRwbV9zdDE5X2ky Y19wbV9zdXNwZW5kLAorCS5pZF90YWJsZSA9IHRwbV9zdDE5X2kyY19pZAorfTsKKworLyoKKyAq IHRwbV9zdDE5X2kyY19pbml0IGluaXRpYWxpemUgZHJpdmVyCisgKiBAcmV0dXJuOiAwIGlmIHN1 Y2Nlc3NmdWwsIGVsc2Ugbm9uIHplcm8gdmFsdWUuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHRw bV9zdDE5X2kyY19pbml0KHZvaWQpCit7CisJcHJpbnRrKEtFUk5fSU5GTyAidHBtX3N0MTlfaTJj OiB0cG1fc3QxOV9pMmNfaW5pdFxuIik7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZ0cG1fc3Qx OV9pMmNfZHJpdmVyKTsKK30KKworLyoKKyAqIHRwbV9zdDE5X2kyY19leGl0IFRoZSBrZXJuZWwg Y2FsbHMgdGhpcyBmdW5jdGlvbiBkdXJpbmcgdW5sb2FkaW5nIHRoZQorICogbW9kdWxlIG9yIGR1 cmluZyBzaHV0IGRvd24gcHJvY2VzcworICovCitzdGF0aWMgdm9pZCBfX2V4aXQgdHBtX3N0MTlf aTJjX2V4aXQodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPICJ0cG1fc3QxOV9pMmM6IHRwbV9z dDE5X2kyY19leGl0XG4iKTsKKwlpMmNfZGVsX2RyaXZlcigmdHBtX3N0MTlfaTJjX2RyaXZlcik7 Cit9CisKK21vZHVsZV9pbml0KHRwbV9zdDE5X2kyY19pbml0KTsKK21vZHVsZV9leGl0KHRwbV9z dDE5X2kyY19leGl0KTsKKworTU9EVUxFX0FVVEhPUigiQ2hyaXN0b3BoZSBSaWNhcmQgKHRwbXN1 cHBvcnRAc3QuY29tKSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTVE0gVFBNIEkyQyBTVDE5IERy aXZlciIpOworTU9EVUxFX1ZFUlNJT04oIjEuMi4wIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7 CmRpZmYgLXVOciBsaW51eC0yLjYuMzUuNC9kcml2ZXJzL2NoYXIvdHBtL3RwbV9zdG1fc3QxOV9p MmMuaCBsaW51eC10cG0vZHJpdmVycy9jaGFyL3RwbS90cG1fc3RtX3N0MTlfaTJjLmgKLS0tIGxp bnV4LTIuNi4zNS40L2RyaXZlcnMvY2hhci90cG0vdHBtX3N0bV9zdDE5X2kyYy5oCTE5NjktMTIt MzEgMTg6MDA6MDAuMDAwMDAwMDAwIC0wNjAwCisrKyBsaW51eC10cG0vZHJpdmVycy9jaGFyL3Rw bS90cG1fc3RtX3N0MTlfaTJjLmgJMjAxMC0wOS0wMyAwNzowOToyNC4yNjQzOTM0NzYgLTA1MDAK QEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIFNUTWljcm9lbGVjdHJvbmljcyBUUE0gSTJDIExpbnV4 IGRyaXZlciBmb3IgVFBNIFNUMTlOUDE4CisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgIFNU TWljcm9lbGVjdHJvbmljcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICog dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGlj ZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHBy b2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j LiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAt MTMwMSBVU0EuCisgKgorICogU1RNaWNyb2VsZWN0cm9uaWNzIHZlcnNpb24gMS4yLjAsIENvcHly aWdodCAoQykgMjAxMAorICogU1RNaWNyb2VsZWN0cm9uaWNzIGNvbWVzIHdpdGggQUJTT0xVVEVM WSBOTyBXQVJSQU5UWS4KKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2Vs Y29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKyAqIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucy4KKyAq CisgKiBAQXV0aG9yOiBDaHJpc3RvcGhlIFJJQ0FSRCB0cG1zdXBwb3J0QHN0LmNvbQorICoKKyAq IEBGaWxlOiBzdG1fc3QxOV90cG1faTJjLmgKKyAqCisgKiBARGF0ZTogMDIvMTIvMjAwOAorICov CisjaWZuZGVmIF9fU1RNX1NUMTlfVFBNX0kyQ19NQUlOX0hfXworI2RlZmluZSBfX1NUTV9TVDE5 X1RQTV9JMkNfTUFJTl9IX18KKworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxp bnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1 ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy1pZC5oPgorI2luY2x1ZGUgPGxp bnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgorCisjZGVmaW5lIE1JTk9S X05VTV9JMkMJCTIyNAorCisjZGVmaW5lIFRQTV9EUklWRVJfTkFNRQkJInN0MTlucDE4IgorCisj ZGVmaW5lCVRQTV9CVUZTSVpFCQkyMDQ4CisKKyNkZWZpbmUgVFBNX0hFQURFUl9TSVpFCQkxMAor I2RlZmluZSBUUE1fSTJDX0JMT0NLX1NJWkUJMHgyOAorCisjZGVmaW5lIFRQTV9JMkNfT1JESU5B TF9MT05HCTB4MEQJLyogVFBNX09SRF9UYWtlT3duZXJzaGlwICovCisKKyNkZWZpbmUgVFBNX0ky Q19TSE9SVAkyMDAwCS8qIDJzICovCisjZGVmaW5lIFRJQ0tfR1BJT19TUE9PTElORwkyCisjZGVm aW5lIFNUQVJUVVBfV0FJVF9JTlRFUlZBTAk4IC8qIDhtcyAqLworCisvKiBpb2N0bCBjb21tYW5k cyAqLworI2RlZmluZSBUUE1JT0NfQ0FOQ0VMCQlfSU8oJ1QnLCAweDAwKQkvKiBOb3Qgc3VwcG9y dGVkICovCisjZGVmaW5lIFRQTUlPQ19UUkFOU01JVAkJX0lPKCdUJywgMHgwMSkKKworI2RlZmlu ZSBEQVRBX09OCQkJICAxCS8qIGRhdGEgYXZhaWxhYmxlICovCisjZGVmaW5lIENPTU1BTkRfT04J CSAgMgkvKiBhY2NlcHQgY29tbWFuZCAqLworCisjZW5kaWYgLyogX19TVE1fU1QxOV9UUE1fSTJD X01BSU5fSF9fICovCmRpZmYgLXVOciBsaW51eC0yLjYuMzUuNC9pbmNsdWRlL2xpbnV4L2kyYy90 cG1fc3RtX3N0MTlfaTJjLmggbGludXgtdHBtL2luY2x1ZGUvbGludXgvaTJjL3RwbV9zdG1fc3Qx OV9pMmMuaAotLS0gbGludXgtMi42LjM1LjQvaW5jbHVkZS9saW51eC9pMmMvdHBtX3N0bV9zdDE5 X2kyYy5oCTE5NjktMTItMzEgMTg6MDA6MDAuMDAwMDAwMDAwIC0wNjAwCisrKyBsaW51eC10cG0v aW5jbHVkZS9saW51eC9pMmMvdHBtX3N0bV9zdDE5X2kyYy5oCTIwMTAtMDgtMzEgMTI6NTA6MzEu Nzc0NDEwODgxIC0wNTAwCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBTVE1pY3JvZWxlY3Ryb25p Y3MgVFBNIEkyQyBMaW51eCBkcml2ZXIgZm9yIFRQTSBTVDE5TlAxOAorICogQ29weXJpZ2h0IChD KSAyMDA5LCAyMDEwIFNUTWljcm9lbGVjdHJvbmljcworICogQ2hyaXN0b3BoZSBSSUNBUkQgdHBt c3VwcG9ydEBzdC5jb20KKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg b3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07 IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAq IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBV U0EuCisgKgorICogU1RNaWNyb2VsZWN0cm9uaWNzIHZlcnNpb24gMS4yLjAsIENvcHlyaWdodCAo QykgMjAxMAorICogU1RNaWNyb2VsZWN0cm9uaWNzIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBX QVJSQU5UWS4KKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0 byByZWRpc3RyaWJ1dGUgaXQKKyAqIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucy4KKyAqCisgKiBA RmlsZTogc3RtX3N0MTlfdHBtX2kyYy5oCisgKgorICogQERhdGU6IDA2LzE1LzIwMDgKKyAqLwor I2lmbmRlZiBfX1NUTV9TVDE5X1RQTV9JMkNfSF9fCisjZGVmaW5lIF9fU1RNX1NUMTlfVFBNX0ky Q19IX18KKworI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorCisjZGVmaW5lIFRQTV9EUklWRVJfTkFN RSAgICAgICAgICJzdDE5bnAxOCIKKyNkZWZpbmUgVFBNX0kyQ19TVDE5X0FERFJfV1IJKDB4MjYg Pj4gMSkKKworc3RydWN0IHN0MTlucDE4X3BsYXRmb3JtX2RhdGEgeworCWludCBhY2NlcHRfcGlu OwkvKiBhY2NlcHQgY29tbWFuZCBwaW4gKi8KKwlpbnQgZGF0YV9hdmFpbF9waW47LyogZGF0YSBh dmFpbGFibGUgcGluICovCisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKwlib29sIGJDaGlw RjsKKwl1OCAqdHBtX2kyY19idWZmZXJbMl07IC8qIDAgUmVxdWVzdCAxIFJlc3BvbnNlICovCisJ d2FpdF9xdWV1ZV9oZWFkX3Qgd3JpdGVfcXVldWU7Cit9OworCisjZW5kaWYgLyogX19TVE1fU1Qx OV9UUE1fSTJDX0hfXyAqLwo= --_002_0B9F1C5B86169C4EA9D042C251022E49105CD81DE1SAFEX1MAIL3st_--