From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id A0DB2C10DCE for ; Thu, 12 Mar 2020 20:39:42 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 4A8172071B for ; Thu, 12 Mar 2020 20:39:42 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=netapp.onmicrosoft.com header.i=@netapp.onmicrosoft.com header.b="ICDu8Qf2" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726902AbgCLUjl (ORCPT ); Thu, 12 Mar 2020 16:39:41 -0400 Received: from mail-dm6nam10on2074.outbound.protection.outlook.com ([40.107.93.74]:43808 "EHLO NAM10-DM6-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726984AbgCLUjl (ORCPT ); Thu, 12 Mar 2020 16:39:41 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=iL3uzNS3upcjm0UKIJBfhPD7C/O59IAnItlp0HAMRVMA6Kv2+tDXAU/hjbsyMpTTTry80o6jwYOOfpZ9Yc9hV4+vUOwgL7Pp/N6QKDlHCgQ5sYLHqbwvnaQ0asDY4P5hStBz5qUJlfn2Sho9P0CDL36UL4gbrg106ebmXG0YI5g3B5qEIUEbJeyn2SZvH2MHuTTbenM26t5aNn1CullhaxDmmPDdN1bSAA7GWAdXzaBN3pSLogG8dfcxg7zj3m/pipO5s2zPJoNo/ywvMdNunZXI0FRMTwSClG8/Qml8m4V73ZtDSWGJKxSIAABNw0/Xre941+R4yzoxR1Cn2PaZBg== 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=4E+qZ61hPf+M+A2NWmdYVOIHhgbdjjzrxsSlCO+gEfE=; b=hBtvFbJsG0hB3lf7c1BHQ2jio+nWV+NqdhK/aX6mZ4pTbHw1I0gRT4bxph3oDBPk1jONB8d3l3u9AutGkrd2Sj2BnCq9iwVu8/WyKTjnfIaFp9Y/T8UXIeMkmjDdESh6jQQTnpAERdxbXmiO0J7ntrXKL2c1z7M9qiKdDOPubgeYXh5I2FfoaT4nc8LIpo6FH/0SgEY/UX1xpVtJ2zrKRwy4EIKOPCmTGd/X1IOVue+XowMSiKd8+IOShIGd6kLkb+7HOtE0yj1/PMoyh9UoQjHfsopcUcDpp5UMxLSlhr7J9m9YLNLfyI1su39VZwCLnHUYvRvoZYuHfobJyaIOVw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=netapp.com; dmarc=pass action=none header.from=netapp.com; dkim=pass header.d=netapp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netapp.onmicrosoft.com; s=selector1-netapp-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=4E+qZ61hPf+M+A2NWmdYVOIHhgbdjjzrxsSlCO+gEfE=; b=ICDu8Qf2eDhfTUF/IUYpdbF/TaQO1/STMU1HBUfXcC6m+ITkdPWi4DwZI5Mpsy47m0IG2pwymVbgak6Gw2xPESFVuYilo9YftL4rZ2fSeGBHd3xINRgz8DIUzv8iQh/3QFQHg9V5ol355/Uhcr0Spb1j+q7tyt+s139PYILmbB8= Received: from DM6PR06MB6617.namprd06.prod.outlook.com (2603:10b6:5:25f::14) by DM6PR06MB4170.namprd06.prod.outlook.com (2603:10b6:5:2b::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2793.17; Thu, 12 Mar 2020 20:39:28 +0000 Received: from DM6PR06MB6617.namprd06.prod.outlook.com ([fe80::f1d5:1417:3acd:c3be]) by DM6PR06MB6617.namprd06.prod.outlook.com ([fe80::f1d5:1417:3acd:c3be%6]) with mapi id 15.20.2793.018; Thu, 12 Mar 2020 20:39:28 +0000 From: "Schumaker, Anna" To: "fllinden@amazon.com" , "linux-nfs@vger.kernel.org" , "trond.myklebust@hammerspace.com" Subject: Re: [PATCH 13/13] NFSv4.2: add client side xattr caching. Thread-Topic: [PATCH 13/13] NFSv4.2: add client side xattr caching. Thread-Index: AQHV998o+HLVpHFjiUCUVog27Wj5Q6hFbOaA Date: Thu, 12 Mar 2020 20:39:28 +0000 Message-ID: <10e7305b1d90e73a4c08edd2ee56bcc9490c0d23.camel@netapp.com> References: <20200311195613.26108-1-fllinden@amazon.com> <20200311195613.26108-14-fllinden@amazon.com> In-Reply-To: <20200311195613.26108-14-fllinden@amazon.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Evolution 3.36.0 authentication-results: spf=none (sender IP is ) smtp.mailfrom=Anna.Schumaker@netapp.com; x-originating-ip: [68.42.68.242] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 28601ee1-2076-42dc-f2a5-08d7c6c575c9 x-ms-traffictypediagnostic: DM6PR06MB4170: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:3173; x-forefront-prvs: 0340850FCD x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(4636009)(366004)(136003)(376002)(39860400002)(346002)(396003)(199004)(71200400001)(8676002)(478600001)(186003)(26005)(8936002)(6506007)(81166006)(81156014)(36756003)(86362001)(2906002)(2616005)(110136005)(6512007)(316002)(66556008)(76116006)(66476007)(5660300002)(6486002)(66946007)(91956017)(66446008)(64756008)(30864003)(87944003)(579004)(559001);DIR:OUT;SFP:1101;SCL:1;SRVR:DM6PR06MB4170;H:DM6PR06MB6617.namprd06.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1; received-spf: None (protection.outlook.com: netapp.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 304t/UJNoGM08kd6tKMoo6tt0u3LtG5mEjg4QMVlVvJIkETVU7DnMkZ6PO2XgpOe71EjwDt+ozQ8yhLWmQeCwSlgkQ5XXOYg4C8bDa3/o/uI5SorcO5e0NQXacOTP+nC3te8DIFZmgJJQDhKj/A54elsFpbknutnhPqnZ3pYzxGchPP5GsWpo06bWXarDT5s2rhw6T2Udbki3H8AQB+HfXYLjPOHyYi3NY5iLFv+MWKOdneIjV2cdJFpdW1b+y3+eoXHMvLIU0GGcL4BCQU+NAneBYHclmHH0F2h8ne0r9Yiu06I0JtXjp5rug3jJt4hhSw5VQf4DGfG9IsAeJ65+i8mtOCNghLUzyQIR5kIVj4i0yvAH8JHK6AT9Tw/WIP8OiaN/dRbUAQLXRvzl2B1yNMfm5u/WgkI6GhiI2OJM56l9Y13zj4mNh/JkS0k2G2qOpxXzBix08ZkMIyq7EsOp0/OiK1Rzi+hZcQpk0C0/XbIguhM1k8V/w169Sspqf/6 x-ms-exchange-antispam-messagedata: Yki3lh4fix6sYfMmU5KnGac8b6uRzXfNvEcoozVI1FQ3u52R9JcxlCVIa1Ukzx3RYPqvcRLfgUJiEr3hkzKPde/Rx3dVEtGc+wxJeBYON5DxL2xlRxIX0EXYNYxKtXr50ZAUXp4YwHjRZI8SGwnk8A== x-ms-exchange-transport-forked: True Content-Type: text/plain; charset="utf-8" Content-ID: <9ECC3540A50BB74BAA53CB5DDCD12366@namprd06.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: netapp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 28601ee1-2076-42dc-f2a5-08d7c6c575c9 X-MS-Exchange-CrossTenant-originalarrivaltime: 12 Mar 2020 20:39:28.2155 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 4b0911a0-929b-4715-944b-c03745165b3a X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: y8WU2eGfscKhNiBRH3XypFxmWd6pQD39nC+gh0pagQ0dt8lgBs5YCh7Qx/QTNPDfmZpQ4zq87Q82awffWQL+6g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR06MB4170 Sender: linux-nfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org SGkgRnJhbmssDQoNCk9uIFdlZCwgMjAyMC0wMy0xMSBhdCAxOTo1NiArMDAwMCwgRnJhbmsgdmFu IGRlciBMaW5kZW4gd3JvdGU6DQo+IEltcGxlbWVudCBjbGllbnQgc2lkZSBjYWNoaW5nIGZvciBO RlN2NC4yIGV4dGVuZGVkIGF0dHJpYnV0ZXMuIFRoZSBjYWNoZQ0KPiBpcyBhIHBlci1pbm9kZSBo YXNodGFibGUsIHdpdGggbmFtZS92YWx1ZSBlbnRyaWVzLiBUaGVyZSBpcyBvbmUgc3BlY2lhbA0K PiBlbnRyeSBmb3IgdGhlIGxpc3R4YXR0ciBjYWNoZS4NCj4gDQo+IE5GUyBpbm9kZXMgaGF2ZSBh IHBvaW50ZXIgdG8gYSBjYWNoZSBzdHJ1Y3R1cmUuIFRoZSBjYWNoZSBzdHJ1Y3R1cmUgaXMNCj4g YWxsb2NhdGVkIG9uIGRlbWFuZCwgZnJlZWQgd2hlbiB0aGUgY2FjaGUgaXMgaW52YWxpZGF0ZWQu DQo+IA0KPiBNZW1vcnkgc2hyaW5rZXJzIGtlZXAgdGhlIHNpemUgaW4gY2hlY2suIExhcmdlIGVu dHJpZXMgKD4gUEFHRV9TSVpFKQ0KPiBhcmUgY29sbGVjdGVkIGJ5IGEgc2VwYXJhdGUgc2hyaW5r ZXIsIGFuZCBmcmVlZCBtb3JlIGFnZ3Jlc3NpdmVseQ0KPiB0aGFuIG90aGVycy4NCj4gDQo+IFNp Z25lZC1vZmYtYnk6IEZyYW5rIHZhbiBkZXIgTGluZGVuIDxmbGxpbmRlbkBhbWF6b24uY29tPg0K PiAtLS0NCj4gIGZzL25mcy9NYWtlZmlsZSAgICAgICAgICAgICB8ICAgIDEgKw0KPiAgZnMvbmZz L2lub2RlLmMgICAgICAgICAgICAgIHwgICAgOSArLQ0KPiAgZnMvbmZzL2ludGVybmFsLmggICAg ICAgICAgIHwgICAyMCArDQo+ICBmcy9uZnMvbmZzNDJwcm9jLmMgICAgICAgICAgfCAgIDEyICsN Cj4gIGZzL25mcy9uZnM0MnhhdHRyLmMgICAgICAgICB8IDEwODMNCj4gKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiAgZnMvbmZzL25mczRwcm9jLmMgICAgICAg ICAgIHwgICA0MiArLQ0KPiAgZnMvbmZzL25mczRzdXBlci5jICAgICAgICAgIHwgICAxMCArDQo+ ICBpbmNsdWRlL2xpbnV4L25mc19mcy5oICAgICAgfCAgICA2ICsNCj4gIGluY2x1ZGUvdWFwaS9s aW51eC9uZnNfZnMuaCB8ICAgIDEgKw0KPiAgOSBmaWxlcyBjaGFuZ2VkLCAxMTc3IGluc2VydGlv bnMoKyksIDcgZGVsZXRpb25zKC0pDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZnMvbmZzL25mczQy eGF0dHIuYw0KPiANCj4gZGlmZiAtLWdpdCBhL2ZzL25mcy9NYWtlZmlsZSBiL2ZzL25mcy9NYWtl ZmlsZQ0KPiBpbmRleCAyNDMzYzNlMDNjZmEuLjE5MWIzZTlhYTIzMiAxMDA2NDQNCj4gLS0tIGEv ZnMvbmZzL01ha2VmaWxlDQo+ICsrKyBiL2ZzL25mcy9NYWtlZmlsZQ0KPiBAQCAtMzEsNiArMzEs NyBAQCBuZnN2NC0kKENPTkZJR19ORlNfVVNFX0xFR0FDWV9ETlMpICs9IGNhY2hlX2xpYi5vDQo+ ICBuZnN2NC0kKENPTkZJR19TWVNDVEwpCSs9IG5mczRzeXNjdGwubw0KPiAgbmZzdjQtJChDT05G SUdfTkZTX1Y0XzEpCSs9IHBuZnMubyBwbmZzX2Rldi5vIHBuZnNfbmZzLm8NCj4gIG5mc3Y0LSQo Q09ORklHX05GU19WNF8yKQkrPSBuZnM0MnByb2Mubw0KPiArbmZzdjQtJChDT05GSUdfTkZTX1Y0 XzIpCSs9IG5mczQyeGF0dHIubw0KPiAgDQo+ICBvYmotJChDT05GSUdfUE5GU19GSUxFX0xBWU9V VCkgKz0gZmlsZWxheW91dC8NCj4gIG9iai0kKENPTkZJR19QTkZTX0JMT0NLKSArPSBibG9ja2xh eW91dC8NCj4gZGlmZiAtLWdpdCBhL2ZzL25mcy9pbm9kZS5jIGIvZnMvbmZzL2lub2RlLmMNCj4g aW5kZXggZDJiZTE1Mjc5NmVmLi45ZDQ5NTJkMjMwNmIgMTAwNjQ0DQo+IC0tLSBhL2ZzL25mcy9p bm9kZS5jDQo+ICsrKyBiL2ZzL25mcy9pbm9kZS5jDQo+IEBAIC0xOTQsNiArMTk0LDcgQEAgYm9v bCBuZnNfY2hlY2tfY2FjaGVfaW52YWxpZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZA0K PiBsb25nIGZsYWdzKQ0KPiAgDQo+ICAJcmV0dXJuIG5mc19jaGVja19jYWNoZV9pbnZhbGlkX25v dF9kZWxlZ2F0ZWQoaW5vZGUsIGZsYWdzKTsNCj4gIH0NCj4gK0VYUE9SVF9TWU1CT0xfR1BMKG5m c19jaGVja19jYWNoZV9pbnZhbGlkKTsNCj4gIA0KPiAgc3RhdGljIHZvaWQgbmZzX3NldF9jYWNo ZV9pbnZhbGlkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpDQo+ICB7 DQo+IEBAIC0yMzUsMTEgKzIzNiwxMyBAQCBzdGF0aWMgdm9pZCBuZnNfemFwX2NhY2hlc19sb2Nr ZWQoc3RydWN0IGlub2RlICppbm9kZSkNCj4gIAkJCQkJfCBORlNfSU5PX0lOVkFMSURfREFUQQ0K PiAgCQkJCQl8IE5GU19JTk9fSU5WQUxJRF9BQ0NFU1MNCj4gIAkJCQkJfCBORlNfSU5PX0lOVkFM SURfQUNMDQo+ICsJCQkJCXwgTkZTX0lOT19JTlZBTElEX1hBVFRSDQo+ICAJCQkJCXwgTkZTX0lO T19SRVZBTF9QQUdFQ0FDSEUpOw0KPiAgCX0gZWxzZQ0KPiAgCQluZnNfc2V0X2NhY2hlX2ludmFs aWQoaW5vZGUsIE5GU19JTk9fSU5WQUxJRF9BVFRSDQo+ICAJCQkJCXwgTkZTX0lOT19JTlZBTElE X0FDQ0VTUw0KPiAgCQkJCQl8IE5GU19JTk9fSU5WQUxJRF9BQ0wNCj4gKwkJCQkJfCBORlNfSU5P X0lOVkFMSURfWEFUVFINCj4gIAkJCQkJfCBORlNfSU5PX1JFVkFMX1BBR0VDQUNIRSk7DQo+ICAJ bmZzX3phcF9sYWJlbF9jYWNoZV9sb2NrZWQobmZzaSk7DQo+ICB9DQo+IEBAIC0xODg1LDcgKzE4 ODgsOCBAQCBzdGF0aWMgaW50IG5mc191cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwg c3RydWN0DQo+IG5mc19mYXR0ciAqZmF0dHIpDQo+ICAJCQlpZiAoIShoYXZlX3dyaXRlcnMgfHwg aGF2ZV9kZWxlZ2F0aW9uKSkgew0KPiAgCQkJCWludmFsaWQgfD0gTkZTX0lOT19JTlZBTElEX0RB VEENCj4gIAkJCQkJfCBORlNfSU5PX0lOVkFMSURfQUNDRVNTDQo+IC0JCQkJCXwgTkZTX0lOT19J TlZBTElEX0FDTDsNCj4gKwkJCQkJfCBORlNfSU5PX0lOVkFMSURfQUNMDQo+ICsJCQkJCXwgTkZT X0lOT19JTlZBTElEX1hBVFRSOw0KPiAgCQkJCS8qIEZvcmNlIHJldmFsaWRhdGUgb2YgYWxsIGF0 dHJpYnV0ZXMgKi8NCj4gIAkJCQlzYXZlX2NhY2hlX3ZhbGlkaXR5IHw9IE5GU19JTk9fSU5WQUxJ RF9DVElNRQ0KPiAgCQkJCQl8IE5GU19JTk9fSU5WQUxJRF9NVElNRQ0KPiBAQCAtMjA4NCw2ICsy MDg4LDkgQEAgc3RydWN0IGlub2RlICpuZnNfYWxsb2NfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2Nr ICpzYikNCj4gICNpZiBJU19FTkFCTEVEKENPTkZJR19ORlNfVjQpDQo+ICAJbmZzaS0+bmZzNF9h Y2wgPSBOVUxMOw0KPiAgI2VuZGlmIC8qIENPTkZJR19ORlNfVjQgKi8NCj4gKyNpZmRlZiBDT05G SUdfTkZTX1Y0XzINCj4gKwluZnNpLT54YXR0cl9jYWNoZSA9IE5VTEw7DQo+ICsjZW5kaWYNCj4g IAlyZXR1cm4gJm5mc2ktPnZmc19pbm9kZTsNCj4gIH0NCj4gIEVYUE9SVF9TWU1CT0xfR1BMKG5m c19hbGxvY19pbm9kZSk7DQo+IGRpZmYgLS1naXQgYS9mcy9uZnMvaW50ZXJuYWwuaCBiL2ZzL25m cy9pbnRlcm5hbC5oDQo+IGluZGV4IDFlM2E3ZTExOWM5My4uNjdiOGU0ZjdjNTU0IDEwMDY0NA0K PiAtLS0gYS9mcy9uZnMvaW50ZXJuYWwuaA0KPiArKysgYi9mcy9uZnMvaW50ZXJuYWwuaA0KPiBA QCAtNTc1LDYgKzU3NSwyNiBAQCBleHRlcm4gdm9pZCBuZnM0X3Rlc3Rfc2Vzc2lvbl90cnVuayhz dHJ1Y3QgcnBjX2NsbnQNCj4gKmNsbnQsDQo+ICAJCQkJc3RydWN0IHJwY194cHJ0ICp4cHJ0LA0K PiAgCQkJCXZvaWQgKmRhdGEpOw0KPiAgDQo+ICsjaWZkZWYgQ09ORklHX05GU19WNF8yDQo+ICtl eHRlcm4gaW50IF9faW5pdCBuZnM0X3hhdHRyX2NhY2hlX2luaXQodm9pZCk7DQo+ICtleHRlcm4g dm9pZCBuZnM0X3hhdHRyX2NhY2hlX2V4aXQodm9pZCk7DQo+ICtleHRlcm4gdm9pZCBuZnM0X3hh dHRyX2NhY2hlX2FkZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLA0KPiAr CQkJCSBjb25zdCBjaGFyICpidWYsIHN0cnVjdCBwYWdlICoqcGFnZXMsDQo+ICsJCQkJIHNzaXpl X3QgYnVmbGVuKTsNCj4gK2V4dGVybiB2b2lkIG5mczRfeGF0dHJfY2FjaGVfcmVtb3ZlKHN0cnVj dCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUpOw0KPiArZXh0ZXJuIHNzaXplX3QgbmZz NF94YXR0cl9jYWNoZV9nZXQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwN Cj4gKwkJCQljaGFyICpidWYsIHNzaXplX3QgYnVmbGVuKTsNCj4gK2V4dGVybiB2b2lkIG5mczRf eGF0dHJfY2FjaGVfc2V0X2xpc3Qoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqYnVm LA0KPiArCQkJCSAgICAgIHNzaXplX3QgYnVmbGVuKTsNCj4gK2V4dGVybiBzc2l6ZV90IG5mczRf eGF0dHJfY2FjaGVfbGlzdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjaGFyICpidWYsDQo+ICsJCQkJ ICAgICBzc2l6ZV90IGJ1Zmxlbik7DQo+ICtleHRlcm4gdm9pZCBuZnM0X3hhdHRyX2NhY2hlX3ph cChzdHJ1Y3QgaW5vZGUgKmlub2RlKTsNCj4gKyNlbHNlDQo+ICtzdGF0aWMgaW5saW5lIHZvaWQg bmZzNF94YXR0cl9jYWNoZV96YXAoc3RydWN0IGlub2RlICppbm9kZSkNCj4gK3sNCj4gK30NCj4g KyNlbmRpZg0KPiArDQoNClNhbWUgdGhpbmcgd2l0aCB0aGVzZSBmdW5jdGlvbnMuIFRoZSBnZW5l cmljIGNsaWVudCBkb2Vzbid0IG5lZWQgdG8ga25vdyBhYm91dA0KdGhlbSwgc28gcGxlYXNlIG1v dmUgaXQgaW50byBuZnM0X2ZzLmggaW5zdGVhZC4NCg0KVGhhbmtzLA0KQW5uYQ0KDQo+ICBzdGF0 aWMgaW5saW5lIHN0cnVjdCBpbm9kZSAqbmZzX2lncmFiX2FuZF9hY3RpdmUoc3RydWN0IGlub2Rl ICppbm9kZSkNCj4gIHsNCj4gIAlpbm9kZSA9IGlncmFiKGlub2RlKTsNCj4gZGlmZiAtLWdpdCBh L2ZzL25mcy9uZnM0MnByb2MuYyBiL2ZzL25mcy9uZnM0MnByb2MuYw0KPiBpbmRleCA4YzJlNTJi Yzk4NmEuLmUyMDA1MjI0NjlhZiAxMDA2NDQNCj4gLS0tIGEvZnMvbmZzL25mczQycHJvYy5jDQo+ ICsrKyBiL2ZzL25mcy9uZnM0MnByb2MuYw0KPiBAQCAtMTE4Miw2ICsxMTgyLDE4IEBAIHN0YXRp YyBzc2l6ZV90IF9uZnM0Ml9wcm9jX2dldHhhdHRyKHN0cnVjdCBpbm9kZQ0KPiAqaW5vZGUsIGNv bnN0IGNoYXIgKm5hbWUsDQo+ICAJaWYgKHJldCA8IDApDQo+ICAJCXJldHVybiByZXQ7DQo+ICAN Cj4gKwkvKg0KPiArCSAqIE5vcm1hbGx5LCB0aGUgY2FjaGluZyBpcyBkb25lIG9uZSBsYXllciB1 cCwgYnV0IGZvciBzdWNjZXNzZnVsDQo+ICsJICogUlBDUywgYWx3YXlzIGNhY2hlIHRoZSByZXN1 bHQgaGVyZSwgZXZlbiBpZiB0aGUgY2FsbGVyIHdhcw0KPiArCSAqIGp1c3QgcXVlcnlpbmcgdGhl IGxlbmd0aCwgb3IgaWYgdGhlIHJlcGx5IHdhcyB0b28gYmlnIGZvcg0KPiArCSAqIHRoZSBjYWxs ZXIuIFRoaXMgYXZvaWRzIGEgc2Vjb25kIFJQQyBpbiB0aGUgY2FzZSBvZiB0aGUNCj4gKwkgKiBj b21tb24gcXVlcnktYWxsb2MtcmV0cmlldmUgY3ljbGUgZm9yIHhhdHRycy4NCj4gKwkgKg0KPiAr CSAqIE5vdGUgdGhhdCB4YXR0cl9sZW4gaXMgYWx3YXlzIGNhcHBlZCB0byBYQVRUUl9TSVpFX01B WC4NCj4gKwkgKi8NCj4gKw0KPiArCW5mczRfeGF0dHJfY2FjaGVfYWRkKGlub2RlLCBuYW1lLCBO VUxMLCBwYWdlcywgcmVzLnhhdHRyX2xlbik7DQo+ICsNCj4gIAlpZiAoYnVmbGVuKSB7DQo+ICAJ CWlmIChyZXMueGF0dHJfbGVuID4gYnVmbGVuKQ0KPiAgCQkJcmV0dXJuIC1FUkFOR0U7DQo+IGRp ZmYgLS1naXQgYS9mcy9uZnMvbmZzNDJ4YXR0ci5jIGIvZnMvbmZzL25mczQyeGF0dHIuYw0KPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwMDAuLjIzZmRhYjk3N2EyYQ0K PiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2ZzL25mcy9uZnM0MnhhdHRyLmMNCj4gQEAgLTAsMCAr MSwxMDgzIEBADQo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KPiArDQo+ ICsvKg0KPiArICogQ29weXJpZ2h0IDIwMTksIDIwMjAgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMg YWZmaWxpYXRlcy4gQWxsIHJpZ2h0cw0KPiByZXNlcnZlZC4NCj4gKyAqDQo+ICsgKiBVc2VyIGV4 dGVuZGVkIGF0dHJpYnV0ZSBjbGllbnQgc2lkZSBjYWNoZSBmdW5jdGlvbnMuDQo+ICsgKg0KPiAr ICogQXV0aG9yOiBGcmFuayB2YW4gZGVyIExpbmRlbiA8ZmxsaW5kZW5AYW1hem9uLmNvbT4NCj4g KyAqLw0KPiArI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvbmZz X2ZzLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvaGFzaHRhYmxlLmg+DQo+ICsjaW5jbHVkZSA8bGlu dXgvcmVmY291bnQuaD4NCj4gKyNpbmNsdWRlIDx1YXBpL2xpbnV4L3hhdHRyLmg+DQo+ICsNCj4g KyNpbmNsdWRlICJuZnM0X2ZzLmgiDQo+ICsjaW5jbHVkZSAiaW50ZXJuYWwuaCINCj4gKw0KPiAr LyoNCj4gKyAqIFVzZXIgZXh0ZW5kZWQgYXR0cmlidXRlcyBjbGllbnQgc2lkZSBjYWNoaW5nIGlz IGltcGxlbWVudGVkIGJ5IGhhdmluZw0KPiArICogYSBjYWNoZSBzdHJ1Y3R1cmUgYXR0YWNoZWQg dG8gTkZTIGlub2Rlcy4gVGhpcyBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkDQo+ICsgKiB3aGVuIG5l ZWRlZCwgYW5kIGZyZWVkIHdoZW4gdGhlIGNhY2hlIGlzIHphcHBlZC4NCj4gKyAqDQo+ICsgKiBU aGUgY2FjaGUgc3RydWN0dXJlIGNvbnRhaW5zIGFzIGhhc2ggdGFibGUgb2YgZW50cmllcywgYW5k IGEgcG9pbnRlcg0KPiArICogdG8gYSBzcGVjaWFsLWNhc2VkIGVudHJ5IGZvciB0aGUgbGlzdHhh dHRyIGNhY2hlLg0KPiArICoNCj4gKyAqIEFjY2Vzc2luZyBhbmQgYWxsb2NhdGluZyAvIGZyZWVp bmcgdGhlIGNhY2hlcyBpcyBkb25lIHZpYSByZWZlcmVuY2UNCj4gKyAqIGNvdW50aW5nLiBUaGUg Y2FjaGUgZW50cmllcyB1c2UgYSBzaW1pbGFyIHJlZmNvdW50aW5nIHNjaGVtZS4NCj4gKyAqDQo+ ICsgKiBUaGlzIG1ha2VzIGZyZWVpbmcgYSBjYWNoZSwgYm90aCBmcm9tIHRoZSBzaHJpbmtlciBh bmQgZnJvbSB0aGUNCj4gKyAqIHphcCBjYWNoZSBwYXRoLCBlYXN5LiBJdCBhbHNvIG1lYW5zIHRo YXQsIGluIGN1cnJlbnQgdXNlIGNhc2VzLA0KPiArICogdGhlIGxhcmdlIG1ham9yaXR5IG9mIGlu b2RlcyB3aWxsIG5vdCB3YXN0ZSBhbnkgbWVtb3J5LCBhcyB0aGV5DQo+ICsgKiB3aWxsIG5ldmVy IGhhdmUgYW55IHVzZXIgZXh0ZW5kZWQgYXR0cmlidXRlcyBhc3NpZ25lZCB0byB0aGVtLg0KPiAr ICoNCj4gKyAqIEF0dHJpYnV0ZSBlbnRyaWVzIGFyZSBoYXNoZWQgaW4gdG8gYSBzaW1wbGUgaGFz aCB0YWJsZS4gVGhleSBhcmUNCj4gKyAqIGFsc28gcGFydCBvZiBhbiBMUlUuDQo+ICsgKg0KPiAr ICogVGhlcmUgYXJlIHRocmVlIHNocmlua2Vycy4NCj4gKyAqDQo+ICsgKiBUd28gc2hyaW5rZXJz IGRlYWwgd2l0aCB0aGUgY2FjaGUgZW50cmllcyB0aGVtc2VsdmVzOiBvbmUgZm9yDQo+ICsgKiBs YXJnZSBlbnRyaWVzICg+IFBBR0VfU0laRSksIGFuZCBvbmUgZm9yIHNtYWxsZXIgZW50cmllcy4g VGhlDQo+ICsgKiBzaHJpbmtlciBmb3IgdGhlIGxhcmdlciBlbnRyaWVzIHdvcmtzIG1vcmUgYWdn cmVzc2l2ZWx5IHRoYW4NCj4gKyAqIHRob3NlIGZvciB0aGUgc21hbGxlciBlbnRyaWVzLg0KPiAr ICoNCj4gKyAqIFRoZSBvdGhlciBzaHJpbmtlciBmcmVlcyB0aGUgY2FjaGUgc3RydWN0dXJlcyB0 aGVtc2VsdmVzLg0KPiArICovDQo+ICsNCj4gKy8qDQo+ICsgKiA2NCBidWNrZXRzIGlzIGEgZ29v ZCBkZWZhdWx0LiBUaGVyZSBpcyBsaWtlbHkgbm8gcmVhc29uYWJsZQ0KPiArICogd29ya2xvYWQg dGhhdCB1c2VzIG1vcmUgdGhhbiBldmVuIDY0IHVzZXIgZXh0ZW5kZWQgYXR0cmlidXRlcy4NCj4g KyAqIFlvdSBjYW4gY2VydGFpbmx5IGFkZCBhIGxvdCBtb3JlIC0gYnV0IHlvdSBnZXQgd2hhdCB5 b3UgYXNrIGZvcg0KPiArICogaW4gdGhvc2UgY2lyY3Vtc3RhbmNlcy4NCj4gKyAqLw0KPiArI2Rl ZmluZSBORlM0X1hBVFRSX0hBU0hfU0laRQk2NA0KPiArDQo+ICsjZGVmaW5lIE5GU0RCR19GQUNJ TElUWQlORlNEQkdfWEFUVFJDQUNIRQ0KPiArDQo+ICtzdHJ1Y3QgbmZzNF94YXR0cl9jYWNoZTsN Cj4gK3N0cnVjdCBuZnM0X3hhdHRyX2VudHJ5Ow0KPiArDQo+ICtzdHJ1Y3QgbmZzNF94YXR0cl9i dWNrZXQgew0KPiArCXNwaW5sb2NrX3QgbG9jazsNCj4gKwlzdHJ1Y3QgaGxpc3RfaGVhZCBobGlz dDsNCj4gKwlzdHJ1Y3QgbmZzNF94YXR0cl9jYWNoZSAqY2FjaGU7DQo+ICsJYm9vbCBkcmFpbmlu ZzsNCj4gK307DQo+ICsNCj4gK3N0cnVjdCBuZnM0X3hhdHRyX2NhY2hlIHsNCj4gKwlzdHJ1Y3Qg a3JlZiByZWY7DQo+ICsJc3BpbmxvY2tfdCBoYXNoX2xvY2s7CS8qIHByb3RlY3RzIGhhc2h0YWJs ZSBhbmQgbHJ1ICovDQo+ICsJc3RydWN0IG5mczRfeGF0dHJfYnVja2V0IGJ1Y2tldHNbTkZTNF9Y QVRUUl9IQVNIX1NJWkVdOw0KPiArCXN0cnVjdCBsaXN0X2hlYWQgbHJ1Ow0KPiArCXN0cnVjdCBs aXN0X2hlYWQgZGlzcG9zZTsNCj4gKwlhdG9taWNfbG9uZ190IG5lbnQ7DQo+ICsJc3BpbmxvY2tf dCBsaXN0eGF0dHJfbG9jazsNCj4gKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOw0KPiArCXN0cnVjdCBu ZnM0X3hhdHRyX2VudHJ5ICpsaXN0eGF0dHI7DQo+ICsJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7 DQo+ICt9Ow0KPiArDQo+ICtzdHJ1Y3QgbmZzNF94YXR0cl9lbnRyeSB7DQo+ICsJc3RydWN0IGty ZWYgcmVmOw0KPiArCXN0cnVjdCBobGlzdF9ub2RlIGhub2RlOw0KPiArCXN0cnVjdCBsaXN0X2hl YWQgbHJ1Ow0KPiArCXN0cnVjdCBsaXN0X2hlYWQgZGlzcG9zZTsNCj4gKwljaGFyICp4YXR0cl9u YW1lOw0KPiArCXZvaWQgKnhhdHRyX3ZhbHVlOw0KPiArCXNpemVfdCB4YXR0cl9zaXplOw0KPiAr CXN0cnVjdCBuZnM0X3hhdHRyX2J1Y2tldCAqYnVja2V0Ow0KPiArCXVpbnQzMl90IGZsYWdzOw0K PiArfTsNCj4gKw0KPiArI2RlZmluZQlORlM0X1hBVFRSX0VOVFJZX0VYVFZBTAkweDAwMDENCj4g Kw0KPiArLyoNCj4gKyAqIExSVSBsaXN0IG9mIE5GUyBpbm9kZXMgdGhhdCBoYXZlIHhhdHRyIGNh Y2hlcy4NCj4gKyAqLw0KPiArc3RhdGljIHN0cnVjdCBsaXN0X2xydSBuZnM0X3hhdHRyX2NhY2hl X2xydTsNCj4gK3N0YXRpYyBzdHJ1Y3QgbGlzdF9scnUgbmZzNF94YXR0cl9lbnRyeV9scnU7DQo+ ICtzdGF0aWMgc3RydWN0IGxpc3RfbHJ1IG5mczRfeGF0dHJfbGFyZ2VfZW50cnlfbHJ1Ow0KPiAr DQo+ICtzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKm5mczRfeGF0dHJfY2FjaGVfY2FjaGVwOw0K PiArDQo+ICtzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm5mczRfeGF0dHJfY2FjaGVf d3E7DQo+ICsNCj4gKy8qDQo+ICsgKiBIYXNoaW5nIGhlbHBlciBmdW5jdGlvbnMuDQo+ICsgKi8N Cj4gK3N0YXRpYyB2b2lkDQo+ICtuZnM0X3hhdHRyX2hhc2hfaW5pdChzdHJ1Y3QgbmZzNF94YXR0 cl9jYWNoZSAqY2FjaGUpDQo+ICt7DQo+ICsJdW5zaWduZWQgaW50IGk7DQo+ICsNCj4gKwlmb3Ig KGkgPSAwOyBpIDwgTkZTNF9YQVRUUl9IQVNIX1NJWkU7IGkrKykgew0KPiArCQlJTklUX0hMSVNU X0hFQUQoJmNhY2hlLT5idWNrZXRzW2ldLmhsaXN0KTsNCj4gKwkJc3Bpbl9sb2NrX2luaXQoJmNh Y2hlLT5idWNrZXRzW2ldLmxvY2spOw0KPiArCQljYWNoZS0+YnVja2V0c1tpXS5jYWNoZSA9IGNh Y2hlOw0KPiArCQljYWNoZS0+YnVja2V0c1tpXS5kcmFpbmluZyA9IGZhbHNlOw0KPiArCX0NCj4g K30NCj4gKw0KPiArLyoNCj4gKyAqIExvY2tpbmcgb3JkZXI6DQo+ICsgKiAxLiBpbm9kZSBpX2xv Y2sgb3IgYnVja2V0IGxvY2sNCj4gKyAqIDIuIGxpc3RfbHJ1IGxvY2sgKHRha2VuIGJ5IGxpc3Rf bHJ1XyogZnVuY3Rpb25zKQ0KPiArICovDQo+ICsNCj4gKy8qDQo+ICsgKiBXcmFwcGVyIGZ1bmN0 aW9ucyB0byBhZGQgYSBjYWNoZSBlbnRyeSB0byB0aGUgcmlnaHQgTFJVLg0KPiArICovDQo+ICtz dGF0aWMgYm9vbA0KPiArbmZzNF94YXR0cl9lbnRyeV9scnVfYWRkKHN0cnVjdCBuZnM0X3hhdHRy X2VudHJ5ICplbnRyeSkNCj4gK3sNCj4gKwlzdHJ1Y3QgbGlzdF9scnUgKmxydTsNCj4gKw0KPiAr CWxydSA9IChlbnRyeS0+ZmxhZ3MgJiBORlM0X1hBVFRSX0VOVFJZX0VYVFZBTCkgPw0KPiArCSAg ICAmbmZzNF94YXR0cl9sYXJnZV9lbnRyeV9scnUgOiAmbmZzNF94YXR0cl9lbnRyeV9scnU7DQo+ ICsNCj4gKwlyZXR1cm4gbGlzdF9scnVfYWRkKGxydSwgJmVudHJ5LT5scnUpOw0KPiArfQ0KPiAr DQo+ICtzdGF0aWMgYm9vbA0KPiArbmZzNF94YXR0cl9lbnRyeV9scnVfZGVsKHN0cnVjdCBuZnM0 X3hhdHRyX2VudHJ5ICplbnRyeSkNCj4gK3sNCj4gKwlzdHJ1Y3QgbGlzdF9scnUgKmxydTsNCj4g Kw0KPiArCWxydSA9IChlbnRyeS0+ZmxhZ3MgJiBORlM0X1hBVFRSX0VOVFJZX0VYVFZBTCkgPw0K PiArCSAgICAmbmZzNF94YXR0cl9sYXJnZV9lbnRyeV9scnUgOiAmbmZzNF94YXR0cl9lbnRyeV9s cnU7DQo+ICsNCj4gKwlyZXR1cm4gbGlzdF9scnVfZGVsKGxydSwgJmVudHJ5LT5scnUpOw0KPiAr fQ0KPiArDQo+ICsvKg0KPiArICogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgY2FjaGUgZW50cmll cy4gVGhleSBhcmUgdGhlIG5vcm1hbA0KPiArICogZXh0ZW5kZWQgYXR0cmlidXRlIG5hbWUvdmFs dWUgcGFpcnMsIGJ1dCBtYXkgYWxzbyBiZSBhIGxpc3R4YXR0cg0KPiArICogY2FjaGUuIFRob3Nl IGFsbG9jYXRpb25zIHVzZSB0aGUgc2FtZSBlbnRyeSBzbyB0aGF0IHRoZXkgY2FuIGJlDQo+ICsg KiB0cmVhdGVkIGFzIG9uZSBieSB0aGUgbWVtb3J5IHNocmlua2VyLg0KPiArICoNCj4gKyAqIHhh dHRyIGNhY2hlIGVudHJpZXMgYXJlIGFsbG9jYXRlZCB0b2dldGhlciB3aXRoIG5hbWVzLiBJZiB0 aGUNCj4gKyAqIHZhbHVlIGZpdHMgaW4gdG8gb25lIHBhZ2Ugd2l0aCB0aGUgZW50cnkgc3RydWN0 dXJlIGFuZCB0aGUgbmFtZSwNCj4gKyAqIGl0IHdpbGwgYWxzbyBiZSBwYXJ0IG9mIHRoZSBzYW1l IGFsbG9jYXRpb24gKGttYWxsb2MpLiBUaGlzIGlzDQo+ICsgKiBleHBlY3RlZCB0byBiZSB0aGUg dmFzdCBtYWpvcml0eSBvZiBjYXNlcy4gTGFyZ2VyIGFsbG9jYXRpb25zDQo+ICsgKiBoYXZlIGEg dmFsdWUgcG9pbnRlciB0aGF0IGlzIGFsbG9jYXRlZCBzZXBhcmF0ZWx5IGJ5IGt2bWFsbG9jLg0K PiArICoNCj4gKyAqIFBhcmFtZXRlcnM6DQo+ICsgKg0KPiArICogQG5hbWU6ICBOYW1lIG9mIHRo ZSBleHRlbmRlZCBhdHRyaWJ1dGUuIE5VTEwgZm9yIGxpc3R4YXR0ciBjYWNoZQ0KPiArICogICAg ICAgICBlbnRyeS4NCj4gKyAqIEB2YWx1ZTogVmFsdWUgb2YgYXR0cmlidXRlLCBvciBsaXN0eGF0 dHIgY2FjaGUuIE5VTEwgaWYgdGhlDQo+ICsgKiAgICAgICAgIHZhbHVlIGlzIHRvIGJlIGNvcGll ZCBmcm9tIHBhZ2VzIGluc3RlYWQuDQo+ICsgKiBAcGFnZXM6IFBhZ2VzIHRvIGNvcHkgdGhlIHZh bHVlIGZyb20sIGlmIG5vdCBOVUxMLiBQYXNzZWQgaW4gdG8NCj4gKyAqCSAgIG1ha2UgaXQgZWFz aWVyIHRvIGNvcHkgdGhlIHZhbHVlIGFmdGVyIGFuIFJQQywgZXZlbiBpZg0KPiArICoJICAgdGhl IHZhbHVlIHdpbGwgbm90IGJlIHBhc3NlZCB1cCB0byBhcHBsaWNhdGlvbiAoZS5nLg0KPiArICoJ ICAgZm9yIGEgJ3F1ZXJ5JyBnZXR4YXR0ciB3aXRoIE5VTEwgYnVmZmVyKS4NCj4gKyAqIEBsZW46 ICAgTGVuZ3RoIG9mIHRoZSB2YWx1ZS4gQ2FuIGJlIDAgZm9yIHplcm8tbGVuZ3RoIGF0dHJpYnVl cy4NCj4gKyAqICAgICAgICAgQHZhbHVlIGFuZCBAcGFnZXMgd2lsbCBiZSBOVUxMIGlmIEBsZW4g aXMgMC4NCj4gKyAqLw0KPiArc3RhdGljIHN0cnVjdCBuZnM0X3hhdHRyX2VudHJ5ICoNCj4gK25m czRfeGF0dHJfYWxsb2NfZW50cnkoY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqdmFsdWUs DQo+ICsJCSAgICAgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBzaXplX3QgbGVuKQ0KPiArew0KPiAr CXN0cnVjdCBuZnM0X3hhdHRyX2VudHJ5ICplbnRyeTsNCj4gKwl2b2lkICp2YWxwOw0KPiArCWNo YXIgKm5hbWVwOw0KPiArCXNpemVfdCBhbGxvY2xlbiwgc2xlbjsNCj4gKwljaGFyICpidWY7DQo+ ICsJdWludDMyX3QgZmxhZ3M7DQo+ICsNCj4gKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBu ZnM0X3hhdHRyX2VudHJ5KSArDQo+ICsJICAgIFhBVFRSX05BTUVfTUFYICsgMSA+IFBBR0VfU0la RSk7DQo+ICsNCj4gKwlhbGxvY2xlbiA9IHNpemVvZihzdHJ1Y3QgbmZzNF94YXR0cl9lbnRyeSk7 DQo+ICsJaWYgKG5hbWUgIT0gTlVMTCkgew0KPiArCQlzbGVuID0gc3RybGVuKG5hbWUpICsgMTsN Cj4gKwkJYWxsb2NsZW4gKz0gc2xlbjsNCj4gKwl9IGVsc2UNCj4gKwkJc2xlbiA9IDA7DQo+ICsN Cj4gKwlpZiAoYWxsb2NsZW4gKyBsZW4gPD0gUEFHRV9TSVpFKSB7DQo+ICsJCWFsbG9jbGVuICs9 IGxlbjsNCj4gKwkJZmxhZ3MgPSAwOw0KPiArCX0gZWxzZSB7DQo+ICsJCWZsYWdzID0gTkZTNF9Y QVRUUl9FTlRSWV9FWFRWQUw7DQo+ICsJfQ0KPiArDQo+ICsJYnVmID0ga21hbGxvYyhhbGxvY2xl biwgR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgR0ZQX05PRlMpOw0KPiArCWlmIChidWYgPT0gTlVMTCkN Cj4gKwkJcmV0dXJuIE5VTEw7DQo+ICsJZW50cnkgPSAoc3RydWN0IG5mczRfeGF0dHJfZW50cnkg KilidWY7DQo+ICsNCj4gKwlpZiAobmFtZSAhPSBOVUxMKSB7DQo+ICsJCW5hbWVwID0gYnVmICsg c2l6ZW9mKHN0cnVjdCBuZnM0X3hhdHRyX2VudHJ5KTsNCj4gKwkJbWVtY3B5KG5hbWVwLCBuYW1l LCBzbGVuKTsNCj4gKwl9IGVsc2Ugew0KPiArCQluYW1lcCA9IE5VTEw7DQo+ICsJfQ0KPiArDQo+ ICsNCj4gKwlpZiAoZmxhZ3MgJiBORlM0X1hBVFRSX0VOVFJZX0VYVFZBTCkgew0KPiArCQl2YWxw ID0ga3ZtYWxsb2MobGVuLCBHRlBfS0VSTkVMX0FDQ09VTlQgfCBHRlBfTk9GUyk7DQo+ICsJCWlm ICh2YWxwID09IE5VTEwpIHsNCj4gKwkJCWtmcmVlKGJ1Zik7DQo+ICsJCQlyZXR1cm4gTlVMTDsN Cj4gKwkJfQ0KPiArCX0gZWxzZSBpZiAobGVuICE9IDApIHsNCj4gKwkJdmFscCA9IGJ1ZiArIHNp emVvZihzdHJ1Y3QgbmZzNF94YXR0cl9lbnRyeSkgKyBzbGVuOw0KPiArCX0gZWxzZQ0KPiArCQl2 YWxwID0gTlVMTDsNCj4gKw0KPiArCWlmICh2YWxwICE9IE5VTEwpIHsNCj4gKwkJaWYgKHZhbHVl ICE9IE5VTEwpDQo+ICsJCQltZW1jcHkodmFscCwgdmFsdWUsIGxlbik7DQo+ICsJCWVsc2UNCj4g KwkJCV9jb3B5X2Zyb21fcGFnZXModmFscCwgcGFnZXMsIDAsIGxlbik7DQo+ICsJfQ0KPiArDQo+ ICsJZW50cnktPmZsYWdzID0gZmxhZ3M7DQo+ICsJZW50cnktPnhhdHRyX3ZhbHVlID0gdmFscDsN Cj4gKwlrcmVmX2luaXQoJmVudHJ5LT5yZWYpOw0KPiArCWVudHJ5LT54YXR0cl9uYW1lID0gbmFt ZXA7DQo+ICsJZW50cnktPnhhdHRyX3NpemUgPSBsZW47DQo+ICsJZW50cnktPmJ1Y2tldCA9IE5V TEw7DQo+ICsJSU5JVF9MSVNUX0hFQUQoJmVudHJ5LT5scnUpOw0KPiArCUlOSVRfTElTVF9IRUFE KCZlbnRyeS0+ZGlzcG9zZSk7DQo+ICsJSU5JVF9ITElTVF9OT0RFKCZlbnRyeS0+aG5vZGUpOw0K PiArDQo+ICsJcmV0dXJuIGVudHJ5Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZA0KPiArbmZz NF94YXR0cl9mcmVlX2VudHJ5KHN0cnVjdCBuZnM0X3hhdHRyX2VudHJ5ICplbnRyeSkNCj4gK3sN Cj4gKwlpZiAoZW50cnktPmZsYWdzICYgTkZTNF9YQVRUUl9FTlRSWV9FWFRWQUwpDQo+ICsJCWt2 ZnJlZShlbnRyeS0+eGF0dHJfdmFsdWUpOw0KPiArCWtmcmVlKGVudHJ5KTsNCj4gK30NCj4gKw0K PiArc3RhdGljIHZvaWQNCj4gK25mczRfeGF0dHJfZnJlZV9lbnRyeV9jYihzdHJ1Y3Qga3JlZiAq a3JlZikNCj4gK3sNCj4gKwlzdHJ1Y3QgbmZzNF94YXR0cl9lbnRyeSAqZW50cnk7DQo+ICsNCj4g KwllbnRyeSA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgbmZzNF94YXR0cl9lbnRyeSwgcmVm KTsNCj4gKw0KPiArCWlmIChXQVJOX09OKCFsaXN0X2VtcHR5KCZlbnRyeS0+bHJ1KSkpDQo+ICsJ CXJldHVybjsNCj4gKw0KPiArCW5mczRfeGF0dHJfZnJlZV9lbnRyeShlbnRyeSk7DQo+ICt9DQo+ ICsNCj4gK3N0YXRpYyB2b2lkDQo+ICtuZnM0X3hhdHRyX2ZyZWVfY2FjaGVfY2Ioc3RydWN0IGty ZWYgKmtyZWYpDQo+ICt7DQo+ICsJc3RydWN0IG5mczRfeGF0dHJfY2FjaGUgKmNhY2hlOw0KPiAr CWludCBpOw0KPiArDQo+ICsJY2FjaGUgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IG5mczRf eGF0dHJfY2FjaGUsIHJlZik7DQo+ICsNCj4gKwlmb3IgKGkgPSAwOyBpIDwgTkZTNF9YQVRUUl9I QVNIX1NJWkU7IGkrKykgew0KPiArCQlpZiAoV0FSTl9PTighaGxpc3RfZW1wdHkoJmNhY2hlLT5i dWNrZXRzW2ldLmhsaXN0KSkpDQo+ICsJCQlyZXR1cm47DQo+ICsJCWNhY2hlLT5idWNrZXRzW2ld LmRyYWluaW5nID0gZmFsc2U7DQo+ICsJfQ0KPiArDQo+ICsJY2FjaGUtPmxpc3R4YXR0ciA9IE5V TEw7DQo+ICsNCj4gKwlrbWVtX2NhY2hlX2ZyZWUobmZzNF94YXR0cl9jYWNoZV9jYWNoZXAsIGNh Y2hlKTsNCj4gKw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgc3RydWN0IG5mczRfeGF0dHJfY2FjaGUg Kg0KPiArbmZzNF94YXR0cl9hbGxvY19jYWNoZSh2b2lkKQ0KPiArew0KPiArCXN0cnVjdCBuZnM0 X3hhdHRyX2NhY2hlICpjYWNoZTsNCj4gKw0KPiArCWNhY2hlID0ga21lbV9jYWNoZV9hbGxvYyhu ZnM0X3hhdHRyX2NhY2hlX2NhY2hlcCwNCj4gKwkgICAgR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgR0ZQ X05PRlMpOw0KPiArCWlmIChjYWNoZSA9PSBOVUxMKQ0KPiArCQlyZXR1cm4gTlVMTDsNCj4gKw0K PiArCWtyZWZfaW5pdCgmY2FjaGUtPnJlZik7DQo+ICsJYXRvbWljX2xvbmdfc2V0KCZjYWNoZS0+ bmVudCwgMCk7DQo+ICsNCj4gKwlyZXR1cm4gY2FjaGU7DQo+ICt9DQo+ICsNCj4gKy8qDQo+ICsg KiBTZXQgdGhlIGxpc3R4YXR0ciBjYWNoZSwgd2hpY2ggaXMgYSBzcGVjaWFsLWNhc2VkIGNhY2hl IGVudHJ5Lg0KPiArICogVGhlIHNwZWNpYWwgdmFsdWUgRVJSX1BUUigtRVNUQUxFKSBpcyB1c2Vk IHRvIGluZGljYXRlIHRoYXQNCj4gKyAqIHRoZSBjYWNoZSBpcyBiZWluZyBkcmFpbmVkIC0gdGhp cyBwcmV2ZW50cyBhIG5ldyBsaXN0eGF0dHINCj4gKyAqIGNhY2hlIGZyb20gYmVpbmcgYWRkZWQg dG8gd2hhdCBpcyBub3cgYSBzdGFsZSBjYWNoZS4NCj4gKyAqLw0KPiArc3RhdGljIGludA0KPiAr bmZzNF94YXR0cl9zZXRfbGlzdGNhY2hlKHN0cnVjdCBuZnM0X3hhdHRyX2NhY2hlICpjYWNoZSwN Cj4gKwkJCSBzdHJ1Y3QgbmZzNF94YXR0cl9lbnRyeSAqbmV3KQ0KPiArew0KPiArCXN0cnVjdCBu ZnM0X3hhdHRyX2VudHJ5ICpvbGQ7DQo+ICsJaW50IHJldCA9IDE7DQo+ICsNCj4gKwlzcGluX2xv Y2soJmNhY2hlLT5saXN0eGF0dHJfbG9jayk7DQo+ICsNCj4gKwlvbGQgPSBjYWNoZS0+bGlzdHhh dHRyOw0KPiArDQo+ICsJaWYgKG9sZCA9PSBFUlJfUFRSKC1FU1RBTEUpKSB7DQo+ICsJCXJldCA9 IDA7DQo+ICsJCWdvdG8gb3V0Ow0KPiArCX0NCj4gKw0KPiArCWNhY2hlLT5saXN0eGF0dHIgPSBu ZXc7DQo+ICsJaWYgKG5ldyAhPSBOVUxMICYmIG5ldyAhPSBFUlJfUFRSKC1FU1RBTEUpKQ0KPiAr CQluZnM0X3hhdHRyX2VudHJ5X2xydV9hZGQobmV3KTsNCj4gKw0KPiArCWlmIChvbGQgIT0gTlVM TCkgew0KPiArCQluZnM0X3hhdHRyX2VudHJ5X2xydV9kZWwob2xkKTsNCj4gKwkJa3JlZl9wdXQo Jm9sZC0+cmVmLCBuZnM0X3hhdHRyX2ZyZWVfZW50cnlfY2IpOw0KPiArCX0NCj4gK291dDoNCj4g KwlzcGluX3VubG9jaygmY2FjaGUtPmxpc3R4YXR0cl9sb2NrKTsNCj4gKw0KPiArCXJldHVybiBy ZXQ7DQo+ICt9DQo+ICsNCj4gKy8qDQo+ICsgKiBVbmxpbmsgYSBjYWNoZSBmcm9tIGl0cyBwYXJl bnQgaW5vZGUsIGNsZWFyaW5nIG91dCBhbiBpbnZhbGlkDQo+ICsgKiBjYWNoZS4gTXVzdCBiZSBj YWxsZWQgd2l0aCBpX2xvY2sgaGVsZC4NCj4gKyAqLw0KPiArc3RhdGljIHN0cnVjdCBuZnM0X3hh dHRyX2NhY2hlICoNCj4gK25mczRfeGF0dHJfY2FjaGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqaW5v ZGUpDQo+ICt7DQo+ICsJc3RydWN0IG5mc19pbm9kZSAqbmZzaTsNCj4gKwlzdHJ1Y3QgbmZzNF94 YXR0cl9jYWNoZSAqb2xkY2FjaGU7DQo+ICsNCj4gKwluZnNpID0gTkZTX0koaW5vZGUpOw0KPiAr DQo+ICsJb2xkY2FjaGUgPSBuZnNpLT54YXR0cl9jYWNoZTsNCj4gKwlpZiAob2xkY2FjaGUgIT0g TlVMTCkgew0KPiArCQlsaXN0X2xydV9kZWwoJm5mczRfeGF0dHJfY2FjaGVfbHJ1LCAmb2xkY2Fj aGUtPmxydSk7DQo+ICsJCW9sZGNhY2hlLT5pbm9kZSA9IE5VTEw7DQo+ICsJfQ0KPiArCW5mc2kt PnhhdHRyX2NhY2hlID0gTlVMTDsNCj4gKwluZnNpLT5jYWNoZV92YWxpZGl0eSAmPSB+TkZTX0lO T19JTlZBTElEX1hBVFRSOw0KPiArDQo+ICsJcmV0dXJuIG9sZGNhY2hlOw0KPiArDQo+ICt9DQo+ ICsNCj4gKy8qDQo+ICsgKiBEaXNjYXJkIGEgY2FjaGUuIFVzdWFsbHkgY2FsbGVkIGJ5IGEgd29y a2VyLCBzaW5jZSB3YWxraW5nIGFsbA0KPiArICogdGhlIGVudHJpZXMgY2FuIHRha2UgdXAgc29t ZSBjeWNsZXMgdGhhdCB3ZSBkb24ndCB3YW50IHRvIHdhc3RlDQo+ICsgKiBpbiB0aGUgSS9PIHBh dGguIENhbiBhbHNvIGJlIGNhbGxlZCBmcm9tIHRoZSBzaHJpbmtlciBjYWxsYmFjay4NCj4gKyAq DQo+ICsgKiBUaGUgY2FjaGUgaXMgZGVhZCwgaXQgaGFzIGFscmVhZHkgYmVlbiB1bmxpbmtlZCBm cm9tIGl0cyBpbm9kZSwNCj4gKyAqIGFuZCBubyBsb25nZXIgYXBwZWFycyBvbiB0aGUgY2FjaGUg TFJVIGxpc3QuDQo+ICsgKg0KPiArICogTWFyayBhbGwgYnVja2V0cyBhcyBkcmFpbmluZywgc28g dGhhdCBubyBuZXcgZW50cmllcyBhcmUgYWRkZWQuIFRoaXMNCj4gKyAqIGNvdWxkIHN0aWxsIGhh cHBlbiBpbiB0aGUgdW5saWtlbHksIGJ1dCBwb3NzaWJsZSBjYXNlIHRoYXQgYW5vdGhlcg0KPiAr ICogdGhyZWFkIGhhZCBncmFiYmVkIGEgcmVmZXJlbmNlIGJlZm9yZSBpdCB3YXMgdW5saW5rZWQg ZnJvbSB0aGUgaW5vZGUsDQo+ICsgKiBhbmQgaXMgc3RpbGwgaG9sZGluZyBpdCBmb3IgYW4gYWRk IG9wZXJhdGlvbi4NCj4gKyAqDQo+ICsgKiBSZW1vdmUgYWxsIGVudHJpZXMgZnJvbSB0aGUgTFJV IGxpc3RzLCBzbyB0aGF0IHRoZXJlIGlzIG5vIGxvbmdlcg0KPiArICogYW55IHdheSB0byAnZmlu ZCcgdGhpcyBjYWNoZS4gVGhlbiwgcmVtb3ZlIHRoZSBlbnRyaWVzIGZyb20gdGhlIGhhc2gNCj4g KyAqIHRhYmxlLg0KPiArICoNCj4gKyAqIEF0IHRoYXQgcG9pbnQsIHRoZSBjYWNoZSB3aWxsIHJl bWFpbiBlbXB0eSBhbmQgY2FuIGJlIGZyZWVkIHdoZW4gdGhlIGZpbmFsDQo+ICsgKiByZWZlcmVu Y2UgZHJvcHMsIHdoaWNoIGlzIHZlcnkgbGlrZWx5IHRoZSBrcmVmX3B1dCBhdCB0aGUgZW5kIG9m DQo+ICsgKiB0aGlzIGZ1bmN0aW9uLCBvciB0aGUgb25lIGNhbGxlZCBpbW1lZGlhdGVseSBhZnRl cndhcmRzIGluIHRoZQ0KPiArICogc2hyaW5rZXIgY2FsbGJhY2suDQo+ICsgKi8NCj4gK3N0YXRp YyB2b2lkDQo+ICtuZnM0X3hhdHRyX2Rpc2NhcmRfY2FjaGUoc3RydWN0IG5mczRfeGF0dHJfY2Fj aGUgKmNhY2hlKQ0KPiArew0KPiArCXVuc2lnbmVkIGludCBpOw0KPiArCXN0cnVjdCBuZnM0X3hh dHRyX2VudHJ5ICplbnRyeTsNCj4gKwlzdHJ1Y3QgbmZzNF94YXR0cl9idWNrZXQgKmJ1Y2tldDsN Cj4gKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjsNCj4gKw0KPiArCW5mczRfeGF0dHJfc2V0X2xpc3Rj YWNoZShjYWNoZSwgRVJSX1BUUigtRVNUQUxFKSk7DQo+ICsNCj4gKwlmb3IgKGkgPSAwOyBpIDwg TkZTNF9YQVRUUl9IQVNIX1NJWkU7IGkrKykgew0KPiArCQlidWNrZXQgPSAmY2FjaGUtPmJ1Y2tl dHNbaV07DQo+ICsNCj4gKwkJc3Bpbl9sb2NrKCZidWNrZXQtPmxvY2spOw0KPiArCQlidWNrZXQt PmRyYWluaW5nID0gdHJ1ZTsNCj4gKwkJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnRyeSwg biwgJmJ1Y2tldC0+aGxpc3QsIGhub2RlKSB7DQo+ICsJCQluZnM0X3hhdHRyX2VudHJ5X2xydV9k ZWwoZW50cnkpOw0KPiArCQkJaGxpc3RfZGVsX2luaXQoJmVudHJ5LT5obm9kZSk7DQo+ICsJCQlr cmVmX3B1dCgmZW50cnktPnJlZiwgbmZzNF94YXR0cl9mcmVlX2VudHJ5X2NiKTsNCj4gKwkJfQ0K PiArCQlzcGluX3VubG9jaygmYnVja2V0LT5sb2NrKTsNCj4gKwl9DQo+ICsNCj4gKwlhdG9taWNf bG9uZ19zZXQoJmNhY2hlLT5uZW50LCAwKTsNCj4gKw0KPiArCWtyZWZfcHV0KCZjYWNoZS0+cmVm LCBuZnM0X3hhdHRyX2ZyZWVfY2FjaGVfY2IpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZA0K PiArbmZzNF94YXR0cl9kaXNjYXJkX2NhY2hlX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndv cmspDQo+ICt7DQo+ICsJc3RydWN0IG5mczRfeGF0dHJfY2FjaGUgKmNhY2hlID0gY29udGFpbmVy X29mKHdvcmssDQo+ICsJICAgIHN0cnVjdCBuZnM0X3hhdHRyX2NhY2hlLCB3b3JrKTsNCj4gKw0K PiArCW5mczRfeGF0dHJfZGlzY2FyZF9jYWNoZShjYWNoZSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRp YyB2b2lkDQo+ICtuZnM0X3hhdHRyX3JlYXBfY2FjaGUoc3RydWN0IG5mczRfeGF0dHJfY2FjaGUg KmNhY2hlKQ0KPiArew0KPiArCXF1ZXVlX3dvcmsobmZzNF94YXR0cl9jYWNoZV93cSwgJmNhY2hl LT53b3JrKTsNCj4gK30NCj4gKw0KPiArLyoNCj4gKyAqIEdldCBhIHJlZmVyZW5jZWQgY29weSBv ZiB0aGUgY2FjaGUgc3RydWN0dXJlLiBBdm9pZCBkb2luZyBhbGxvY3MNCj4gKyAqIHdoaWxlIGhv bGRpbmcgaV9sb2NrLiBXaGljaCBtZWFucyB0aGF0IHdlIGRvIHNvbWUgb3B0aW1pc3RpYyBhbGxv Y2F0aW9uLA0KPiArICogYW5kIG1pZ2h0IGhhdmUgdG8gZnJlZSB0aGUgcmVzdWx0IGluIHJhcmUg Y2FzZXMuDQo+ICsgKg0KPiArICogVGhpcyBmdW5jdGlvbiBvbmx5IGNoZWNrcyB0aGUgTkZTX0lO T19JTlZBTElEX1hBVFRSIGNhY2hlIHZhbGlkaXR5IGJpdA0KPiArICogYW5kIGFjdHMgYWNjb3Jk aW5nbHksIHJlcGxhY2luZyB0aGUgY2FjaGUgd2hlbiBuZWVkZWQuIEZvciB0aGUgcmVhZCBjYXNl DQo+ICsgKiAoIWFkZCksIHRoaXMgbWVhbnMgdGhhdCB0aGUgY2FsbGVyIG11c3QgbWFrZSBzdXJl IHRoYXQgdGhlIGNhY2hlDQo+ICsgKiBpcyB2YWxpZCBiZWZvcmUgY2FsaW5nIHRoaXMgZnVuY3Rp b24uIGdldHhhdHRyIGFuZCBsaXN0eGF0dHIgY2FsbA0KPiArICogcmV2YWxpZGF0ZV9pbm9kZSB0 byBkbyB0aGlzLiBUaGUgYXR0cmlidXRlIGNhY2hlIHRpbWVvdXQgKGZvciB0aGUNCj4gKyAqIG5v bi1kZWxlZ2F0ZWQgY2FzZSkgaXMgZXhwZWN0ZWQgdG8gYmUgZGVhbHQgd2l0aCBpbiB0aGUgcmV2 YWxpZGF0ZQ0KPiArICogY2FsbC4NCj4gKyAqLw0KPiArDQo+ICtzdGF0aWMgc3RydWN0IG5mczRf eGF0dHJfY2FjaGUgKg0KPiArbmZzNF94YXR0cl9nZXRfY2FjaGUoc3RydWN0IGlub2RlICppbm9k ZSwgaW50IGFkZCkNCj4gK3sNCj4gKwlzdHJ1Y3QgbmZzX2lub2RlICpuZnNpOw0KPiArCXN0cnVj dCBuZnM0X3hhdHRyX2NhY2hlICpjYWNoZSwgKm9sZGNhY2hlLCAqbmV3Y2FjaGU7DQo+ICsNCj4g KwluZnNpID0gTkZTX0koaW5vZGUpOw0KPiArDQo+ICsJY2FjaGUgPSBvbGRjYWNoZSA9IE5VTEw7 DQo+ICsNCj4gKwlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOw0KPiArDQo+ICsJaWYgKG5mc2kt PmNhY2hlX3ZhbGlkaXR5ICYgTkZTX0lOT19JTlZBTElEX1hBVFRSKQ0KPiArCQlvbGRjYWNoZSA9 IG5mczRfeGF0dHJfY2FjaGVfdW5saW5rKGlub2RlKTsNCj4gKwllbHNlDQo+ICsJCWNhY2hlID0g bmZzaS0+eGF0dHJfY2FjaGU7DQo+ICsNCj4gKwlpZiAoY2FjaGUgIT0gTlVMTCkNCj4gKwkJa3Jl Zl9nZXQoJmNhY2hlLT5yZWYpOw0KPiArDQo+ICsJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2sp Ow0KPiArDQo+ICsJaWYgKGFkZCAmJiBjYWNoZSA9PSBOVUxMKSB7DQo+ICsJCW5ld2NhY2hlID0g TlVMTDsNCj4gKw0KPiArCQljYWNoZSA9IG5mczRfeGF0dHJfYWxsb2NfY2FjaGUoKTsNCj4gKwkJ aWYgKGNhY2hlID09IE5VTEwpDQo+ICsJCQlnb3RvIG91dDsNCj4gKw0KPiArCQlzcGluX2xvY2so Jmlub2RlLT5pX2xvY2spOw0KPiArCQlpZiAobmZzaS0+Y2FjaGVfdmFsaWRpdHkgJiBORlNfSU5P X0lOVkFMSURfWEFUVFIpIHsNCj4gKwkJCS8qDQo+ICsJCQkgKiBUaGUgY2FjaGUgd2FzIGludmFs aWRhdGVkIGFnYWluLiBHaXZlIHVwLA0KPiArCQkJICogc2luY2Ugd2hhdCB3ZSB3YW50IHRvIGVu dGVyIGlzIG5vdyBsaWtlbHkNCj4gKwkJCSAqIG91dGRhdGVkIGFueXdheS4NCj4gKwkJCSAqLw0K PiArCQkJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOw0KPiArCQkJa3JlZl9wdXQoJmNhY2hl LT5yZWYsIG5mczRfeGF0dHJfZnJlZV9jYWNoZV9jYik7DQo+ICsJCQljYWNoZSA9IE5VTEw7DQo+ ICsJCQlnb3RvIG91dDsNCj4gKwkJfQ0KPiArDQo+ICsJCS8qDQo+ICsJCSAqIENoZWNrIGlmIHNv bWVvbmUgYmVhdCB1cyB0byBpdC4NCj4gKwkJICovDQo+ICsJCWlmIChuZnNpLT54YXR0cl9jYWNo ZSAhPSBOVUxMKSB7DQo+ICsJCQluZXdjYWNoZSA9IG5mc2ktPnhhdHRyX2NhY2hlOw0KPiArCQkJ a3JlZl9nZXQoJm5ld2NhY2hlLT5yZWYpOw0KPiArCQl9IGVsc2Ugew0KPiArCQkJa3JlZl9nZXQo JmNhY2hlLT5yZWYpOw0KPiArCQkJbmZzaS0+eGF0dHJfY2FjaGUgPSBjYWNoZTsNCj4gKwkJCWNh Y2hlLT5pbm9kZSA9IGlub2RlOw0KPiArCQkJbGlzdF9scnVfYWRkKCZuZnM0X3hhdHRyX2NhY2hl X2xydSwgJmNhY2hlLT5scnUpOw0KPiArCQl9DQo+ICsNCj4gKwkJc3Bpbl91bmxvY2soJmlub2Rl LT5pX2xvY2spOw0KPiArDQo+ICsJCS8qDQo+ICsJCSAqIElmIHRoZXJlIHdhcyBhIHJhY2UsIHRo cm93IGF3YXkgdGhlIGNhY2hlIHdlIGp1c3QNCj4gKwkJICogYWxsb2NhdGVkLCBhbmQgdXNlIHRo ZSBuZXcgb25lIGFsbG9jYXRlZCBieSBzb21lb25lDQo+ICsJCSAqIGVsc2UuDQo+ICsJCSAqLw0K PiArCQlpZiAobmV3Y2FjaGUgIT0gTlVMTCkgew0KPiArCQkJa3JlZl9wdXQoJmNhY2hlLT5yZWYs IG5mczRfeGF0dHJfZnJlZV9jYWNoZV9jYik7DQo+ICsJCQljYWNoZSA9IG5ld2NhY2hlOw0KPiAr CQl9DQo+ICsJfQ0KPiArDQo+ICtvdXQ6DQo+ICsJLyoNCj4gKwkgKiBEaXNjYXJkaW5nIGFuIG9s ZCBjYWNoZSBpcyBkb25lIHZpYSBhIHdvcmtxdWV1ZS4NCj4gKwkgKi8NCj4gKwlpZiAob2xkY2Fj aGUgIT0gTlVMTCkNCj4gKwkJbmZzNF94YXR0cl9yZWFwX2NhY2hlKG9sZGNhY2hlKTsNCj4gKw0K PiArCXJldHVybiBjYWNoZTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgbmZz NF94YXR0cl9idWNrZXQgKg0KPiArbmZzNF94YXR0cl9oYXNoX2J1Y2tldChzdHJ1Y3QgbmZzNF94 YXR0cl9jYWNoZSAqY2FjaGUsIGNvbnN0IGNoYXIgKm5hbWUpDQo+ICt7DQo+ICsJcmV0dXJuICZj YWNoZS0+YnVja2V0c1tqaGFzaChuYW1lLCBzdHJsZW4obmFtZSksIDApICYNCj4gKwkgICAgKEFS UkFZX1NJWkUoY2FjaGUtPmJ1Y2tldHMpIC0gMSldOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgc3Ry dWN0IG5mczRfeGF0dHJfZW50cnkgKg0KPiArbmZzNF94YXR0cl9nZXRfZW50cnkoc3RydWN0IG5m czRfeGF0dHJfYnVja2V0ICpidWNrZXQsIGNvbnN0IGNoYXIgKm5hbWUpDQo+ICt7DQo+ICsJc3Ry dWN0IG5mczRfeGF0dHJfZW50cnkgKmVudHJ5Ow0KPiArDQo+ICsJZW50cnkgPSBOVUxMOw0KPiAr DQo+ICsJaGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZidWNrZXQtPmhsaXN0LCBobm9kZSkg ew0KPiArCQlpZiAoIXN0cmNtcChlbnRyeS0+eGF0dHJfbmFtZSwgbmFtZSkpDQo+ICsJCQlicmVh azsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gZW50cnk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBp bnQNCj4gK25mczRfeGF0dHJfaGFzaF9hZGQoc3RydWN0IG5mczRfeGF0dHJfY2FjaGUgKmNhY2hl LA0KPiArCQkgICAgc3RydWN0IG5mczRfeGF0dHJfZW50cnkgKmVudHJ5KQ0KPiArew0KPiArCXN0 cnVjdCBuZnM0X3hhdHRyX2J1Y2tldCAqYnVja2V0Ow0KPiArCXN0cnVjdCBuZnM0X3hhdHRyX2Vu dHJ5ICpvbGRlbnRyeSA9IE5VTEw7DQo+ICsJaW50IHJldCA9IDE7DQo+ICsNCj4gKwlidWNrZXQg PSBuZnM0X3hhdHRyX2hhc2hfYnVja2V0KGNhY2hlLCBlbnRyeS0+eGF0dHJfbmFtZSk7DQo+ICsJ ZW50cnktPmJ1Y2tldCA9IGJ1Y2tldDsNCj4gKw0KPiArCXNwaW5fbG9jaygmYnVja2V0LT5sb2Nr KTsNCj4gKw0KPiArCWlmIChidWNrZXQtPmRyYWluaW5nKSB7DQo+ICsJCXJldCA9IDA7DQo+ICsJ CWdvdG8gb3V0Ow0KPiArCX0NCj4gKw0KPiArCW9sZGVudHJ5ID0gbmZzNF94YXR0cl9nZXRfZW50 cnkoYnVja2V0LCBlbnRyeS0+eGF0dHJfbmFtZSk7DQo+ICsJaWYgKG9sZGVudHJ5ICE9IE5VTEwp IHsNCj4gKwkJaGxpc3RfZGVsX2luaXQoJm9sZGVudHJ5LT5obm9kZSk7DQo+ICsJCW5mczRfeGF0 dHJfZW50cnlfbHJ1X2RlbChvbGRlbnRyeSk7DQo+ICsJfSBlbHNlIHsNCj4gKwkJYXRvbWljX2xv bmdfaW5jKCZjYWNoZS0+bmVudCk7DQo+ICsJfQ0KPiArDQo+ICsJaGxpc3RfYWRkX2hlYWQoJmVu dHJ5LT5obm9kZSwgJmJ1Y2tldC0+aGxpc3QpOw0KPiArCW5mczRfeGF0dHJfZW50cnlfbHJ1X2Fk ZChlbnRyeSk7DQo+ICsNCj4gK291dDoNCj4gKwlzcGluX3VubG9jaygmYnVja2V0LT5sb2NrKTsN Cj4gKw0KPiArCWlmIChvbGRlbnRyeSAhPSBOVUxMKQ0KPiArCQlrcmVmX3B1dCgmb2xkZW50cnkt PnJlZiwgbmZzNF94YXR0cl9mcmVlX2VudHJ5X2NiKTsNCj4gKw0KPiArCXJldHVybiByZXQ7DQo+ ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkDQo+ICtuZnM0X3hhdHRyX2hhc2hfcmVtb3ZlKHN0cnVj dCBuZnM0X3hhdHRyX2NhY2hlICpjYWNoZSwgY29uc3QgY2hhciAqbmFtZSkNCj4gK3sNCj4gKwlz dHJ1Y3QgbmZzNF94YXR0cl9idWNrZXQgKmJ1Y2tldDsNCj4gKwlzdHJ1Y3QgbmZzNF94YXR0cl9l bnRyeSAqZW50cnk7DQo+ICsNCj4gKwlidWNrZXQgPSBuZnM0X3hhdHRyX2hhc2hfYnVja2V0KGNh Y2hlLCBuYW1lKTsNCj4gKw0KPiArCXNwaW5fbG9jaygmYnVja2V0LT5sb2NrKTsNCj4gKw0KPiAr CWVudHJ5ID0gbmZzNF94YXR0cl9nZXRfZW50cnkoYnVja2V0LCBuYW1lKTsNCj4gKwlpZiAoZW50 cnkgIT0gTlVMTCkgew0KPiArCQlobGlzdF9kZWxfaW5pdCgmZW50cnktPmhub2RlKTsNCj4gKwkJ bmZzNF94YXR0cl9lbnRyeV9scnVfZGVsKGVudHJ5KTsNCj4gKwkJYXRvbWljX2xvbmdfZGVjKCZj YWNoZS0+bmVudCk7DQo+ICsJfQ0KPiArDQo+ICsJc3Bpbl91bmxvY2soJmJ1Y2tldC0+bG9jayk7 DQo+ICsNCj4gKwlpZiAoZW50cnkgIT0gTlVMTCkNCj4gKwkJa3JlZl9wdXQoJmVudHJ5LT5yZWYs IG5mczRfeGF0dHJfZnJlZV9lbnRyeV9jYik7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBzdHJ1Y3Qg bmZzNF94YXR0cl9lbnRyeSAqDQo+ICtuZnM0X3hhdHRyX2hhc2hfZmluZChzdHJ1Y3QgbmZzNF94 YXR0cl9jYWNoZSAqY2FjaGUsIGNvbnN0IGNoYXIgKm5hbWUpDQo+ICt7DQo+ICsJc3RydWN0IG5m czRfeGF0dHJfYnVja2V0ICpidWNrZXQ7DQo+ICsJc3RydWN0IG5mczRfeGF0dHJfZW50cnkgKmVu dHJ5Ow0KPiArDQo+ICsJYnVja2V0ID0gbmZzNF94YXR0cl9oYXNoX2J1Y2tldChjYWNoZSwgbmFt ZSk7DQo+ICsNCj4gKwlzcGluX2xvY2soJmJ1Y2tldC0+bG9jayk7DQo+ICsNCj4gKwllbnRyeSA9 IG5mczRfeGF0dHJfZ2V0X2VudHJ5KGJ1Y2tldCwgbmFtZSk7DQo+ICsJaWYgKGVudHJ5ICE9IE5V TEwpDQo+ICsJCWtyZWZfZ2V0KCZlbnRyeS0+cmVmKTsNCj4gKw0KPiArCXNwaW5fdW5sb2NrKCZi dWNrZXQtPmxvY2spOw0KPiArDQo+ICsJcmV0dXJuIGVudHJ5Ow0KPiArfQ0KPiArDQo+ICsvKg0K PiArICogRW50cnkgcG9pbnQgdG8gcmV0cmlldmUgYW4gZW50cnkgZnJvbSB0aGUgY2FjaGUuDQo+ ICsgKi8NCj4gK3NzaXplX3QgbmZzNF94YXR0cl9jYWNoZV9nZXQoc3RydWN0IGlub2RlICppbm9k ZSwgY29uc3QgY2hhciAqbmFtZSwgY2hhcg0KPiAqYnVmLA0KPiArCQkJIHNzaXplX3QgYnVmbGVu KQ0KPiArew0KPiArCXN0cnVjdCBuZnM0X3hhdHRyX2NhY2hlICpjYWNoZTsNCj4gKwlzdHJ1Y3Qg bmZzNF94YXR0cl9lbnRyeSAqZW50cnk7DQo+ICsJc3NpemVfdCByZXQ7DQo+ICsNCj4gKwljYWNo ZSA9IG5mczRfeGF0dHJfZ2V0X2NhY2hlKGlub2RlLCAwKTsNCj4gKwlpZiAoY2FjaGUgPT0gTlVM TCkNCj4gKwkJcmV0dXJuIC1FTk9FTlQ7DQo+ICsNCj4gKwlyZXQgPSAwOw0KPiArCWVudHJ5ID0g bmZzNF94YXR0cl9oYXNoX2ZpbmQoY2FjaGUsIG5hbWUpOw0KPiArDQo+ICsJaWYgKGVudHJ5ICE9 IE5VTEwpIHsNCj4gKwkJZHByaW50aygiJXM6IGNhY2hlIGhpdCAnJXMnLCBsZW4gJWx1XG4iLCBf X2Z1bmNfXywNCj4gKwkJICAgIGVudHJ5LT54YXR0cl9uYW1lLCAodW5zaWduZWQgbG9uZyllbnRy eS0+eGF0dHJfc2l6ZSk7DQo+ICsJCWlmIChidWZsZW4gPT0gMCkgew0KPiArCQkJLyogTGVuZ3Ro IHByb2JlIG9ubHkgKi8NCj4gKwkJCXJldCA9IGVudHJ5LT54YXR0cl9zaXplOw0KPiArCQl9IGVs c2UgaWYgKGJ1ZmxlbiA8IGVudHJ5LT54YXR0cl9zaXplKQ0KPiArCQkJcmV0ID0gLUVSQU5HRTsN Cj4gKwkJZWxzZSB7DQo+ICsJCQltZW1jcHkoYnVmLCBlbnRyeS0+eGF0dHJfdmFsdWUsIGVudHJ5 LT54YXR0cl9zaXplKTsNCj4gKwkJCXJldCA9IGVudHJ5LT54YXR0cl9zaXplOw0KPiArCQl9DQo+ ICsJCWtyZWZfcHV0KCZlbnRyeS0+cmVmLCBuZnM0X3hhdHRyX2ZyZWVfZW50cnlfY2IpOw0KPiAr CX0gZWxzZSB7DQo+ICsJCWRwcmludGsoIiVzOiBjYWNoZSBtaXNzICclcydcbiIsIF9fZnVuY19f LCBuYW1lKTsNCj4gKwkJcmV0ID0gLUVOT0VOVDsNCj4gKwl9DQo+ICsNCj4gKwlrcmVmX3B1dCgm Y2FjaGUtPnJlZiwgbmZzNF94YXR0cl9mcmVlX2NhY2hlX2NiKTsNCj4gKw0KPiArCXJldHVybiBy ZXQ7DQo+ICt9DQo+ICsNCj4gKy8qDQo+ICsgKiBSZXRyaWV2ZSBhIGNhY2hlZCBsaXN0IG9mIHhh dHRycyBmcm9tIHRoZSBjYWNoZS4NCj4gKyAqLw0KPiArc3NpemVfdCBuZnM0X3hhdHRyX2NhY2hl X2xpc3Qoc3RydWN0IGlub2RlICppbm9kZSwgY2hhciAqYnVmLCBzc2l6ZV90IGJ1ZmxlbikNCj4g K3sNCj4gKwlzdHJ1Y3QgbmZzNF94YXR0cl9jYWNoZSAqY2FjaGU7DQo+ICsJc3RydWN0IG5mczRf eGF0dHJfZW50cnkgKmVudHJ5Ow0KPiArCXNzaXplX3QgcmV0Ow0KPiArDQo+ICsJY2FjaGUgPSBu ZnM0X3hhdHRyX2dldF9jYWNoZShpbm9kZSwgMCk7DQo+ICsJaWYgKGNhY2hlID09IE5VTEwpDQo+ ICsJCXJldHVybiAtRU5PRU5UOw0KPiArDQo+ICsJc3Bpbl9sb2NrKCZjYWNoZS0+bGlzdHhhdHRy X2xvY2spOw0KPiArDQo+ICsJZW50cnkgPSBjYWNoZS0+bGlzdHhhdHRyOw0KPiArDQo+ICsJaWYg KGVudHJ5ICE9IE5VTEwgJiYgZW50cnkgIT0gRVJSX1BUUigtRVNUQUxFKSkgew0KPiArCQlpZiAo YnVmbGVuID09IDApIHsNCj4gKwkJCS8qIExlbmd0aCBwcm9iZSBvbmx5ICovDQo+ICsJCQlyZXQg PSBlbnRyeS0+eGF0dHJfc2l6ZTsNCj4gKwkJfSBlbHNlIGlmIChlbnRyeS0+eGF0dHJfc2l6ZSA+ IGJ1ZmxlbikNCj4gKwkJCXJldCA9IC1FUkFOR0U7DQo+ICsJCWVsc2Ugew0KPiArCQkJbWVtY3B5 KGJ1ZiwgZW50cnktPnhhdHRyX3ZhbHVlLCBlbnRyeS0+eGF0dHJfc2l6ZSk7DQo+ICsJCQlyZXQg PSBlbnRyeS0+eGF0dHJfc2l6ZTsNCj4gKwkJfQ0KPiArCX0gZWxzZSB7DQo+ICsJCXJldCA9IC1F Tk9FTlQ7DQo+ICsJfQ0KPiArDQo+ICsJc3Bpbl91bmxvY2soJmNhY2hlLT5saXN0eGF0dHJfbG9j ayk7DQo+ICsNCj4gKwlrcmVmX3B1dCgmY2FjaGUtPnJlZiwgbmZzNF94YXR0cl9mcmVlX2NhY2hl X2NiKTsNCj4gKw0KPiArCXJldHVybiByZXQ7DQo+ICt9DQo+ICsNCj4gKy8qDQo+ICsgKiBBZGQg YW4geGF0dHIgdG8gdGhlIGNhY2hlLg0KPiArICoNCj4gKyAqIFRoaXMgYWxzbyBpbnZhbGlkYXRl cyB0aGUgeGF0dHIgbGlzdCBjYWNoZS4NCj4gKyAqLw0KPiArdm9pZCBuZnM0X3hhdHRyX2NhY2hl X2FkZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLA0KPiArCQkJICBjb25z dCBjaGFyICpidWYsIHN0cnVjdCBwYWdlICoqcGFnZXMsIHNzaXplX3QgYnVmbGVuKQ0KPiArew0K PiArCXN0cnVjdCBuZnM0X3hhdHRyX2NhY2hlICpjYWNoZTsNCj4gKwlzdHJ1Y3QgbmZzNF94YXR0 cl9lbnRyeSAqZW50cnk7DQo+ICsNCj4gKwlkcHJpbnRrKCIlczogYWRkICclcycgbGVuICVsdVxu IiwgX19mdW5jX18sDQo+ICsJICAgIG5hbWUsICh1bnNpZ25lZCBsb25nKWJ1Zmxlbik7DQo+ICsN Cj4gKwljYWNoZSA9IG5mczRfeGF0dHJfZ2V0X2NhY2hlKGlub2RlLCAxKTsNCj4gKwlpZiAoY2Fj aGUgPT0gTlVMTCkNCj4gKwkJcmV0dXJuOw0KPiArDQo+ICsJZW50cnkgPSBuZnM0X3hhdHRyX2Fs bG9jX2VudHJ5KG5hbWUsIGJ1ZiwgcGFnZXMsIGJ1Zmxlbik7DQo+ICsJaWYgKGVudHJ5ID09IE5V TEwpDQo+ICsJCWdvdG8gb3V0Ow0KPiArDQo+ICsJKHZvaWQpbmZzNF94YXR0cl9zZXRfbGlzdGNh Y2hlKGNhY2hlLCBOVUxMKTsNCj4gKw0KPiArCWlmICghbmZzNF94YXR0cl9oYXNoX2FkZChjYWNo ZSwgZW50cnkpKQ0KPiArCQlrcmVmX3B1dCgmZW50cnktPnJlZiwgbmZzNF94YXR0cl9mcmVlX2Vu dHJ5X2NiKTsNCj4gKw0KPiArb3V0Og0KPiArCWtyZWZfcHV0KCZjYWNoZS0+cmVmLCBuZnM0X3hh dHRyX2ZyZWVfY2FjaGVfY2IpOw0KPiArfQ0KPiArDQo+ICsNCj4gKy8qDQo+ICsgKiBSZW1vdmUg YW4geGF0dHIgZnJvbSB0aGUgY2FjaGUuDQo+ICsgKg0KPiArICogVGhpcyBhbHNvIGludmFsaWRh dGVzIHRoZSB4YXR0ciBsaXN0IGNhY2hlLg0KPiArICovDQo+ICt2b2lkIG5mczRfeGF0dHJfY2Fj aGVfcmVtb3ZlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUpDQo+ICt7DQo+ ICsJc3RydWN0IG5mczRfeGF0dHJfY2FjaGUgKmNhY2hlOw0KPiArDQo+ICsJZHByaW50aygiJXM6 IHJlbW92ZSAnJXMnXG4iLCBfX2Z1bmNfXywgbmFtZSk7DQo+ICsNCj4gKwljYWNoZSA9IG5mczRf eGF0dHJfZ2V0X2NhY2hlKGlub2RlLCAwKTsNCj4gKwlpZiAoY2FjaGUgPT0gTlVMTCkNCj4gKwkJ cmV0dXJuOw0KPiArDQo+ICsJKHZvaWQpbmZzNF94YXR0cl9zZXRfbGlzdGNhY2hlKGNhY2hlLCBO VUxMKTsNCj4gKwluZnM0X3hhdHRyX2hhc2hfcmVtb3ZlKGNhY2hlLCBuYW1lKTsNCj4gKw0KPiAr CWtyZWZfcHV0KCZjYWNoZS0+cmVmLCBuZnM0X3hhdHRyX2ZyZWVfY2FjaGVfY2IpOw0KPiArfQ0K PiArDQo+ICsvKg0KPiArICogQ2FjaGUgbGlzdHhhdHRyIG91dHB1dCwgcmVwbGFjaW5nIGFueSBw b3NzaWJsZSBvbGQgb25lLg0KPiArICovDQo+ICt2b2lkIG5mczRfeGF0dHJfY2FjaGVfc2V0X2xp c3Qoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqYnVmLA0KPiArCQkJICAgICAgIHNz aXplX3QgYnVmbGVuKQ0KPiArew0KPiArCXN0cnVjdCBuZnM0X3hhdHRyX2NhY2hlICpjYWNoZTsN Cj4gKwlzdHJ1Y3QgbmZzNF94YXR0cl9lbnRyeSAqZW50cnk7DQo+ICsNCj4gKwljYWNoZSA9IG5m czRfeGF0dHJfZ2V0X2NhY2hlKGlub2RlLCAxKTsNCj4gKwlpZiAoY2FjaGUgPT0gTlVMTCkNCj4g KwkJcmV0dXJuOw0KPiArDQo+ICsJZW50cnkgPSBuZnM0X3hhdHRyX2FsbG9jX2VudHJ5KE5VTEws IGJ1ZiwgTlVMTCwgYnVmbGVuKTsNCj4gKwlpZiAoZW50cnkgPT0gTlVMTCkNCj4gKwkJZ290byBv dXQ7DQo+ICsNCj4gKwkvKg0KPiArCSAqIFRoaXMgaXMganVzdCB0aGVyZSB0byBiZSBhYmxlIHRv IGdldCB0byBidWNrZXQtPmNhY2hlLA0KPiArCSAqIHdoaWNoIGlzIG9idmlvdXNseSB0aGUgc2Ft ZSBmb3IgYWxsIGJ1Y2tldHMsIHNvIGp1c3QNCj4gKwkgKiB1c2UgYnVja2V0IDAuDQo+ICsJICov DQo+ICsJZW50cnktPmJ1Y2tldCA9ICZjYWNoZS0+YnVja2V0c1swXTsNCj4gKw0KPiArCWlmICgh bmZzNF94YXR0cl9zZXRfbGlzdGNhY2hlKGNhY2hlLCBlbnRyeSkpDQo+ICsJCWtyZWZfcHV0KCZl bnRyeS0+cmVmLCBuZnM0X3hhdHRyX2ZyZWVfZW50cnlfY2IpOw0KPiArDQo+ICtvdXQ6DQo+ICsJ a3JlZl9wdXQoJmNhY2hlLT5yZWYsIG5mczRfeGF0dHJfZnJlZV9jYWNoZV9jYik7DQo+ICt9DQo+ ICsNCj4gKy8qDQo+ICsgKiBaYXAgdGhlIGVudGlyZSBjYWNoZS4gQ2FsbGVkIHdoZW4gYW4gaW5v ZGUgaXMgZXZpY3RlZC4NCj4gKyAqLw0KPiArdm9pZCBuZnM0X3hhdHRyX2NhY2hlX3phcChzdHJ1 Y3QgaW5vZGUgKmlub2RlKQ0KPiArew0KPiArCXN0cnVjdCBuZnM0X3hhdHRyX2NhY2hlICpvbGRj YWNoZTsNCj4gKw0KPiArCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7DQo+ICsJb2xkY2FjaGUg PSBuZnM0X3hhdHRyX2NhY2hlX3VubGluayhpbm9kZSk7DQo+ICsJc3Bpbl91bmxvY2soJmlub2Rl LT5pX2xvY2spOw0KPiArDQo+ICsJaWYgKG9sZGNhY2hlKQ0KPiArCQluZnM0X3hhdHRyX2Rpc2Nh cmRfY2FjaGUob2xkY2FjaGUpOw0KPiArfQ0KPiArDQo+ICsvKg0KPiArICogVGhlIGVudHJ5IExS VSBpcyBzaHJ1bmsgbW9yZSBhZ2dyZXNzaXZlbHkgdGhhbiB0aGUgY2FjaGUgTFJVLA0KPiArICog Ynkgc2V0dGluZ3MgQHNlZWtzIHRvIDEuDQo+ICsgKg0KPiArICogQ2FjaGUgc3RydWN0dXJlcyBh cmUgZnJlZWQgb25seSB3aGVuIHRoZXkndmUgYmVjb21lIGVtcHR5LCBhZnRlcg0KPiArICogcHJ1 bmluZyBhbGwgYnV0IG9uZSBlbnRyeS4NCj4gKyAqLw0KPiArDQo+ICtzdGF0aWMgdW5zaWduZWQg bG9uZyBuZnM0X3hhdHRyX2NhY2hlX2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLA0KPiAr CQkJCQkgICAgc3RydWN0IHNocmlua19jb250cm9sICpzYyk7DQo+ICtzdGF0aWMgdW5zaWduZWQg bG9uZyBuZnM0X3hhdHRyX2VudHJ5X2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLA0KPiAr CQkJCQkgICAgc3RydWN0IHNocmlua19jb250cm9sICpzYyk7DQo+ICtzdGF0aWMgdW5zaWduZWQg bG9uZyBuZnM0X3hhdHRyX2NhY2hlX3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssDQo+ICsJ CQkJCSAgIHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpOw0KPiArc3RhdGljIHVuc2lnbmVkIGxv bmcgbmZzNF94YXR0cl9lbnRyeV9zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLA0KPiArCQkJ CQkgICBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKTsNCj4gKw0KPiArc3RhdGljIHN0cnVjdCBz aHJpbmtlciBuZnM0X3hhdHRyX2NhY2hlX3Nocmlua2VyID0gew0KPiArCS5jb3VudF9vYmplY3Rz CT0gbmZzNF94YXR0cl9jYWNoZV9jb3VudCwNCj4gKwkuc2Nhbl9vYmplY3RzCT0gbmZzNF94YXR0 cl9jYWNoZV9zY2FuLA0KPiArCS5zZWVrcwkJPSBERUZBVUxUX1NFRUtTLA0KPiArCS5mbGFncwkJ PSBTSFJJTktFUl9NRU1DR19BV0FSRSwNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBzdHJ1Y3Qgc2hy aW5rZXIgbmZzNF94YXR0cl9lbnRyeV9zaHJpbmtlciA9IHsNCj4gKwkuY291bnRfb2JqZWN0cwk9 IG5mczRfeGF0dHJfZW50cnlfY291bnQsDQo+ICsJLnNjYW5fb2JqZWN0cwk9IG5mczRfeGF0dHJf ZW50cnlfc2NhbiwNCj4gKwkuc2Vla3MJCT0gREVGQVVMVF9TRUVLUywNCj4gKwkuYmF0Y2gJCT0g NTEyLA0KPiArCS5mbGFncwkJPSBTSFJJTktFUl9NRU1DR19BV0FSRSwNCj4gK307DQo+ICsNCj4g K3N0YXRpYyBzdHJ1Y3Qgc2hyaW5rZXIgbmZzNF94YXR0cl9sYXJnZV9lbnRyeV9zaHJpbmtlciA9 IHsNCj4gKwkuY291bnRfb2JqZWN0cwk9IG5mczRfeGF0dHJfZW50cnlfY291bnQsDQo+ICsJLnNj YW5fb2JqZWN0cwk9IG5mczRfeGF0dHJfZW50cnlfc2NhbiwNCj4gKwkuc2Vla3MJCT0gMSwNCj4g KwkuYmF0Y2gJCT0gNTEyLA0KPiArCS5mbGFncwkJPSBTSFJJTktFUl9NRU1DR19BV0FSRSwNCj4g K307DQo+ICsNCj4gK3N0YXRpYyBlbnVtIGxydV9zdGF0dXMNCj4gK2NhY2hlX2xydV9pc29sYXRl KHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sDQo+ICsJc3RydWN0IGxpc3RfbHJ1X29uZSAqbHJ1LCBz cGlubG9ja190ICpscnVfbG9jaywgdm9pZCAqYXJnKQ0KPiArew0KPiArCXN0cnVjdCBsaXN0X2hl YWQgKmRpc3Bvc2UgPSBhcmc7DQo+ICsJc3RydWN0IGlub2RlICppbm9kZTsNCj4gKwlzdHJ1Y3Qg bmZzNF94YXR0cl9jYWNoZSAqY2FjaGUgPSBjb250YWluZXJfb2YoaXRlbSwNCj4gKwkgICAgc3Ry dWN0IG5mczRfeGF0dHJfY2FjaGUsIGxydSk7DQo+ICsNCj4gKwlpZiAoYXRvbWljX2xvbmdfcmVh ZCgmY2FjaGUtPm5lbnQpID4gMSkNCj4gKwkJcmV0dXJuIExSVV9TS0lQOw0KPiArDQo+ICsJLyoN Cj4gKwkgKiBJZiBhIGNhY2hlIHN0cnVjdHVyZSBpcyBvbiB0aGUgTFJVIGxpc3QsIHdlIGtub3cg dGhhdA0KPiArCSAqIGl0cyBpbm9kZSBpcyB2YWxpZC4gVHJ5IHRvIGxvY2sgaXQgdG8gYnJlYWsg dGhlIGxpbmsuDQo+ICsJICogU2luY2Ugd2UncmUgaW52ZXJ0aW5nIHRoZSBsb2NrIG9yZGVyIGhl cmUsIG9ubHkgdHJ5Lg0KPiArCSAqLw0KPiArCWlub2RlID0gY2FjaGUtPmlub2RlOw0KPiArDQo+ ICsJaWYgKCFzcGluX3RyeWxvY2soJmlub2RlLT5pX2xvY2spKQ0KPiArCQlyZXR1cm4gTFJVX1NL SVA7DQo+ICsNCj4gKwlrcmVmX2dldCgmY2FjaGUtPnJlZik7DQo+ICsNCj4gKwljYWNoZS0+aW5v ZGUgPSBOVUxMOw0KPiArCU5GU19JKGlub2RlKS0+eGF0dHJfY2FjaGUgPSBOVUxMOw0KPiArCU5G U19JKGlub2RlKS0+Y2FjaGVfdmFsaWRpdHkgJj0gfk5GU19JTk9fSU5WQUxJRF9YQVRUUjsNCj4g KwlsaXN0X2xydV9pc29sYXRlKGxydSwgJmNhY2hlLT5scnUpOw0KPiArDQo+ICsJc3Bpbl91bmxv Y2soJmlub2RlLT5pX2xvY2spOw0KPiArDQo+ICsJbGlzdF9hZGRfdGFpbCgmY2FjaGUtPmRpc3Bv c2UsIGRpc3Bvc2UpOw0KPiArCXJldHVybiBMUlVfUkVNT1ZFRDsNCj4gK30NCj4gKw0KPiArc3Rh dGljIHVuc2lnbmVkIGxvbmcNCj4gK25mczRfeGF0dHJfY2FjaGVfc2NhbihzdHJ1Y3Qgc2hyaW5r ZXIgKnNocmluaywgc3RydWN0IHNocmlua19jb250cm9sICpzYykNCj4gK3sNCj4gKwlMSVNUX0hF QUQoZGlzcG9zZSk7DQo+ICsJdW5zaWduZWQgbG9uZyBmcmVlZDsNCj4gKwlzdHJ1Y3QgbmZzNF94 YXR0cl9jYWNoZSAqY2FjaGU7DQo+ICsNCj4gKwlmcmVlZCA9IGxpc3RfbHJ1X3Nocmlua193YWxr KCZuZnM0X3hhdHRyX2NhY2hlX2xydSwgc2MsDQo+ICsJICAgIGNhY2hlX2xydV9pc29sYXRlLCAm ZGlzcG9zZSk7DQo+ICsJd2hpbGUgKCFsaXN0X2VtcHR5KCZkaXNwb3NlKSkgew0KPiArCQljYWNo ZSA9IGxpc3RfZmlyc3RfZW50cnkoJmRpc3Bvc2UsIHN0cnVjdCBuZnM0X3hhdHRyX2NhY2hlLA0K PiArCQkgICAgZGlzcG9zZSk7DQo+ICsJCWxpc3RfZGVsX2luaXQoJmNhY2hlLT5kaXNwb3NlKTsN Cj4gKwkJbmZzNF94YXR0cl9kaXNjYXJkX2NhY2hlKGNhY2hlKTsNCj4gKwkJa3JlZl9wdXQoJmNh Y2hlLT5yZWYsIG5mczRfeGF0dHJfZnJlZV9jYWNoZV9jYik7DQo+ICsJfQ0KPiArDQo+ICsJcmV0 dXJuIGZyZWVkOw0KPiArfQ0KPiArDQo+ICsNCj4gK3N0YXRpYyB1bnNpZ25lZCBsb25nDQo+ICtu ZnM0X3hhdHRyX2NhY2hlX2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLCBzdHJ1Y3Qgc2hy aW5rX2NvbnRyb2wgKnNjKQ0KPiArew0KPiArCXVuc2lnbmVkIGxvbmcgY291bnQ7DQo+ICsNCj4g Kwljb3VudCA9IGxpc3RfbHJ1X2NvdW50KCZuZnM0X3hhdHRyX2NhY2hlX2xydSk7DQo+ICsJcmV0 dXJuIHZmc19wcmVzc3VyZV9yYXRpbyhjb3VudCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBlbnVt IGxydV9zdGF0dXMNCj4gK2VudHJ5X2xydV9pc29sYXRlKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0s DQo+ICsJc3RydWN0IGxpc3RfbHJ1X29uZSAqbHJ1LCBzcGlubG9ja190ICpscnVfbG9jaywgdm9p ZCAqYXJnKQ0KPiArew0KPiArCXN0cnVjdCBsaXN0X2hlYWQgKmRpc3Bvc2UgPSBhcmc7DQo+ICsJ c3RydWN0IG5mczRfeGF0dHJfYnVja2V0ICpidWNrZXQ7DQo+ICsJc3RydWN0IG5mczRfeGF0dHJf Y2FjaGUgKmNhY2hlOw0KPiArCXN0cnVjdCBuZnM0X3hhdHRyX2VudHJ5ICplbnRyeSA9IGNvbnRh aW5lcl9vZihpdGVtLA0KPiArCSAgICBzdHJ1Y3QgbmZzNF94YXR0cl9lbnRyeSwgbHJ1KTsNCj4g Kw0KPiArCWJ1Y2tldCA9IGVudHJ5LT5idWNrZXQ7DQo+ICsJY2FjaGUgPSBidWNrZXQtPmNhY2hl Ow0KPiArDQo+ICsJLyoNCj4gKwkgKiBVbmhvb2sgdGhlIGVudHJ5IGZyb20gaXRzIHBhcmVudCAo ZWl0aGVyIGEgY2FjaGUgYnVja2V0DQo+ICsJICogb3IgYSBjYWNoZSBzdHJ1Y3R1cmUgaWYgaXQn cyBhIGxpc3R4YXR0ciBidWYpLCBzbyB0aGF0DQo+ICsJICogaXQncyBubyBsb25nZXIgZm91bmQu IFRoZW4gYWRkIGl0IHRvIHRoZSBpc29sYXRlIGxpc3QsDQo+ICsJICogdG8gYmUgZnJlZWQgbGF0 ZXIuDQo+ICsJICoNCj4gKwkgKiBJbiBib3RoIGNhc2VzLCB3ZSdyZSByZXZlcnRpbmcgbG9jayBv cmRlciwgc28gdXNlDQo+ICsJICogdHJ5bG9jayBhbmQgc2tpcCB0aGUgZW50cnkgaWYgd2UgY2Fu J3QgZ2V0IHRoZSBsb2NrLg0KPiArCSAqLw0KPiArCWlmIChlbnRyeS0+eGF0dHJfbmFtZSAhPSBO VUxMKSB7DQo+ICsJCS8qIFJlZ3VsYXIgY2FjaGUgZW50cnkgKi8NCj4gKwkJaWYgKCFzcGluX3Ry eWxvY2soJmJ1Y2tldC0+bG9jaykpDQo+ICsJCQlyZXR1cm4gTFJVX1NLSVA7DQo+ICsNCj4gKwkJ a3JlZl9nZXQoJmVudHJ5LT5yZWYpOw0KPiArDQo+ICsJCWhsaXN0X2RlbF9pbml0KCZlbnRyeS0+ aG5vZGUpOw0KPiArCQlhdG9taWNfbG9uZ19kZWMoJmNhY2hlLT5uZW50KTsNCj4gKwkJbGlzdF9s cnVfaXNvbGF0ZShscnUsICZlbnRyeS0+bHJ1KTsNCj4gKw0KPiArCQlzcGluX3VubG9jaygmYnVj a2V0LT5sb2NrKTsNCj4gKwl9IGVsc2Ugew0KPiArCQkvKiBMaXN0eGF0dHIgY2FjaGUgZW50cnkg Ki8NCj4gKwkJaWYgKCFzcGluX3RyeWxvY2soJmNhY2hlLT5saXN0eGF0dHJfbG9jaykpDQo+ICsJ CQlyZXR1cm4gTFJVX1NLSVA7DQo+ICsNCj4gKwkJa3JlZl9nZXQoJmVudHJ5LT5yZWYpOw0KPiAr DQo+ICsJCWNhY2hlLT5saXN0eGF0dHIgPSBOVUxMOw0KPiArCQlsaXN0X2xydV9pc29sYXRlKGxy dSwgJmVudHJ5LT5scnUpOw0KPiArDQo+ICsJCXNwaW5fdW5sb2NrKCZjYWNoZS0+bGlzdHhhdHRy X2xvY2spOw0KPiArCX0NCj4gKw0KPiArCWxpc3RfYWRkX3RhaWwoJmVudHJ5LT5kaXNwb3NlLCBk aXNwb3NlKTsNCj4gKwlyZXR1cm4gTFJVX1JFTU9WRUQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB1 bnNpZ25lZCBsb25nDQo+ICtuZnM0X3hhdHRyX2VudHJ5X3NjYW4oc3RydWN0IHNocmlua2VyICpz aHJpbmssIHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpDQo+ICt7DQo+ICsJTElTVF9IRUFEKGRp c3Bvc2UpOw0KPiArCXVuc2lnbmVkIGxvbmcgZnJlZWQ7DQo+ICsJc3RydWN0IG5mczRfeGF0dHJf ZW50cnkgKmVudHJ5Ow0KPiArCXN0cnVjdCBsaXN0X2xydSAqbHJ1Ow0KPiArDQo+ICsJbHJ1ID0g KHNocmluayA9PSAmbmZzNF94YXR0cl9sYXJnZV9lbnRyeV9zaHJpbmtlcikgPw0KPiArCSAgICAm bmZzNF94YXR0cl9sYXJnZV9lbnRyeV9scnUgOiAmbmZzNF94YXR0cl9lbnRyeV9scnU7DQo+ICsN Cj4gKwlmcmVlZCA9IGxpc3RfbHJ1X3Nocmlua193YWxrKGxydSwgc2MsIGVudHJ5X2xydV9pc29s YXRlLCAmZGlzcG9zZSk7DQo+ICsNCj4gKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmRpc3Bvc2UpKSB7 DQo+ICsJCWVudHJ5ID0gbGlzdF9maXJzdF9lbnRyeSgmZGlzcG9zZSwgc3RydWN0IG5mczRfeGF0 dHJfZW50cnksDQo+ICsJCSAgICBkaXNwb3NlKTsNCj4gKwkJbGlzdF9kZWxfaW5pdCgmZW50cnkt PmRpc3Bvc2UpOw0KPiArDQo+ICsJCS8qDQo+ICsJCSAqIERyb3AgdHdvIHJlZmVyZW5jZXM6IHRo ZSBvbmUgdGhhdCB3ZSBqdXN0IGdyYWJiZWQNCj4gKwkJICogaW4gZW50cnlfbHJ1X2lzb2xhdGUs IGFuZCB0aGUgb25lIHRoYXQgd2FzIHNldA0KPiArCQkgKiB3aGVuIHRoZSBlbnRyeSB3YXMgZmly c3QgYWxsb2NhdGVkLg0KPiArCQkgKi8NCj4gKwkJa3JlZl9wdXQoJmVudHJ5LT5yZWYsIG5mczRf eGF0dHJfZnJlZV9lbnRyeV9jYik7DQo+ICsJCWtyZWZfcHV0KCZlbnRyeS0+cmVmLCBuZnM0X3hh dHRyX2ZyZWVfZW50cnlfY2IpOw0KPiArCX0NCj4gKw0KPiArCXJldHVybiBmcmVlZDsNCj4gK30N Cj4gKw0KPiArc3RhdGljIHVuc2lnbmVkIGxvbmcNCj4gK25mczRfeGF0dHJfZW50cnlfY291bnQo c3RydWN0IHNocmlua2VyICpzaHJpbmssIHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpDQo+ICt7 DQo+ICsJdW5zaWduZWQgbG9uZyBjb3VudDsNCj4gKwlzdHJ1Y3QgbGlzdF9scnUgKmxydTsNCj4g Kw0KPiArCWxydSA9IChzaHJpbmsgPT0gJm5mczRfeGF0dHJfbGFyZ2VfZW50cnlfc2hyaW5rZXIp ID8NCj4gKwkgICAgJm5mczRfeGF0dHJfbGFyZ2VfZW50cnlfbHJ1IDogJm5mczRfeGF0dHJfZW50 cnlfbHJ1Ow0KPiArDQo+ICsJY291bnQgPSBsaXN0X2xydV9jb3VudChscnUpOw0KPiArCXJldHVy biB2ZnNfcHJlc3N1cmVfcmF0aW8oY291bnQpOw0KPiArfQ0KPiArDQo+ICsNCj4gK3N0YXRpYyB2 b2lkIG5mczRfeGF0dHJfY2FjaGVfaW5pdF9vbmNlKHZvaWQgKnApDQo+ICt7DQo+ICsJc3RydWN0 IG5mczRfeGF0dHJfY2FjaGUgKmNhY2hlID0gKHN0cnVjdCBuZnM0X3hhdHRyX2NhY2hlICopcDsN Cj4gKw0KPiArCXNwaW5fbG9ja19pbml0KCZjYWNoZS0+bGlzdHhhdHRyX2xvY2spOw0KPiArCWF0 b21pY19sb25nX3NldCgmY2FjaGUtPm5lbnQsIDApOw0KPiArCW5mczRfeGF0dHJfaGFzaF9pbml0 KGNhY2hlKTsNCj4gKwljYWNoZS0+bGlzdHhhdHRyID0gTlVMTDsNCj4gKwlJTklUX1dPUksoJmNh Y2hlLT53b3JrLCBuZnM0X3hhdHRyX2Rpc2NhcmRfY2FjaGVfd29ya2VyKTsNCj4gKwlJTklUX0xJ U1RfSEVBRCgmY2FjaGUtPmxydSk7DQo+ICsJSU5JVF9MSVNUX0hFQUQoJmNhY2hlLT5kaXNwb3Nl KTsNCj4gK30NCj4gKw0KPiAraW50IF9faW5pdCBuZnM0X3hhdHRyX2NhY2hlX2luaXQodm9pZCkN Cj4gK3sNCj4gKwlpbnQgcmV0ID0gMDsNCj4gKw0KPiArCW5mczRfeGF0dHJfY2FjaGVfY2FjaGVw ID0ga21lbV9jYWNoZV9jcmVhdGUoIm5mczRfeGF0dHJfY2FjaGVfY2FjaGUiLA0KPiArCSAgICBz aXplb2Yoc3RydWN0IG5mczRfeGF0dHJfY2FjaGUpLCAwLA0KPiArCSAgICAoU0xBQl9SRUNMQUlN X0FDQ09VTlR8U0xBQl9NRU1fU1BSRUFEfFNMQUJfQUNDT1VOVCksDQo+ICsJICAgIG5mczRfeGF0 dHJfY2FjaGVfaW5pdF9vbmNlKTsNCj4gKwlpZiAobmZzNF94YXR0cl9jYWNoZV9jYWNoZXAgPT0g TlVMTCkNCj4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ICsNCj4gKwlyZXQgPSBsaXN0X2xydV9pbml0 X21lbWNnKCZuZnM0X3hhdHRyX2xhcmdlX2VudHJ5X2xydSwNCj4gKwkgICAgJm5mczRfeGF0dHJf bGFyZ2VfZW50cnlfc2hyaW5rZXIpOw0KPiArCWlmIChyZXQpDQo+ICsJCWdvdG8gb3V0NDsNCj4g Kw0KPiArCXJldCA9IGxpc3RfbHJ1X2luaXRfbWVtY2coJm5mczRfeGF0dHJfZW50cnlfbHJ1LA0K PiArCSAgICAmbmZzNF94YXR0cl9lbnRyeV9zaHJpbmtlcik7DQo+ICsJaWYgKHJldCkNCj4gKwkJ Z290byBvdXQzOw0KPiArDQo+ICsJcmV0ID0gbGlzdF9scnVfaW5pdF9tZW1jZygmbmZzNF94YXR0 cl9jYWNoZV9scnUsDQo+ICsJICAgICZuZnM0X3hhdHRyX2NhY2hlX3Nocmlua2VyKTsNCj4gKwlp ZiAocmV0KQ0KPiArCQlnb3RvIG91dDI7DQo+ICsNCj4gKwluZnM0X3hhdHRyX2NhY2hlX3dxID0g YWxsb2Nfd29ya3F1ZXVlKCJuZnM0X3hhdHRyIiwgV1FfTUVNX1JFQ0xBSU0sIDApOw0KPiArCWlm IChuZnM0X3hhdHRyX2NhY2hlX3dxID09IE5VTEwpDQo+ICsJCWdvdG8gb3V0MTsNCj4gKw0KPiAr CXJldCA9IHJlZ2lzdGVyX3Nocmlua2VyKCZuZnM0X3hhdHRyX2NhY2hlX3Nocmlua2VyKTsNCj4g KwlpZiAocmV0KQ0KPiArCQlnb3RvIG91dDA7DQo+ICsNCj4gKwlyZXQgPSByZWdpc3Rlcl9zaHJp bmtlcigmbmZzNF94YXR0cl9lbnRyeV9zaHJpbmtlcik7DQo+ICsJaWYgKHJldCkNCj4gKwkJZ290 byBvdXQ7DQo+ICsNCj4gKwlyZXQgPSByZWdpc3Rlcl9zaHJpbmtlcigmbmZzNF94YXR0cl9sYXJn ZV9lbnRyeV9zaHJpbmtlcik7DQo+ICsJaWYgKCFyZXQpDQo+ICsJCXJldHVybiAwOw0KPiArDQo+ ICsJdW5yZWdpc3Rlcl9zaHJpbmtlcigmbmZzNF94YXR0cl9lbnRyeV9zaHJpbmtlcik7DQo+ICtv dXQ6DQo+ICsJdW5yZWdpc3Rlcl9zaHJpbmtlcigmbmZzNF94YXR0cl9jYWNoZV9zaHJpbmtlcik7 DQo+ICtvdXQwOg0KPiArCWRlc3Ryb3lfd29ya3F1ZXVlKG5mczRfeGF0dHJfY2FjaGVfd3EpOw0K PiArb3V0MToNCj4gKwlsaXN0X2xydV9kZXN0cm95KCZuZnM0X3hhdHRyX2NhY2hlX2xydSk7DQo+ ICtvdXQyOg0KPiArCWxpc3RfbHJ1X2Rlc3Ryb3koJm5mczRfeGF0dHJfZW50cnlfbHJ1KTsNCj4g K291dDM6DQo+ICsJbGlzdF9scnVfZGVzdHJveSgmbmZzNF94YXR0cl9sYXJnZV9lbnRyeV9scnUp Ow0KPiArb3V0NDoNCj4gKwlrbWVtX2NhY2hlX2Rlc3Ryb3kobmZzNF94YXR0cl9jYWNoZV9jYWNo ZXApOw0KPiArDQo+ICsJcmV0dXJuIHJldDsNCj4gK30NCj4gKw0KPiArdm9pZCBuZnM0X3hhdHRy X2NhY2hlX2V4aXQodm9pZCkNCj4gK3sNCj4gKwl1bnJlZ2lzdGVyX3Nocmlua2VyKCZuZnM0X3hh dHRyX2VudHJ5X3Nocmlua2VyKTsNCj4gKwl1bnJlZ2lzdGVyX3Nocmlua2VyKCZuZnM0X3hhdHRy X2NhY2hlX3Nocmlua2VyKTsNCj4gKwlsaXN0X2xydV9kZXN0cm95KCZuZnM0X3hhdHRyX2VudHJ5 X2xydSk7DQo+ICsJbGlzdF9scnVfZGVzdHJveSgmbmZzNF94YXR0cl9jYWNoZV9scnUpOw0KPiAr CWttZW1fY2FjaGVfZGVzdHJveShuZnM0X3hhdHRyX2NhY2hlX2NhY2hlcCk7DQo+ICsJZGVzdHJv eV93b3JrcXVldWUobmZzNF94YXR0cl9jYWNoZV93cSk7DQo+ICt9DQo+IGRpZmYgLS1naXQgYS9m cy9uZnMvbmZzNHByb2MuYyBiL2ZzL25mcy9uZnM0cHJvYy5jDQo+IGluZGV4IDZkZjk0ODU3ZjVi Yi4uMDc5YzFhYzg0Y2VlIDEwMDY0NA0KPiAtLS0gYS9mcy9uZnMvbmZzNHByb2MuYw0KPiArKysg Yi9mcy9uZnMvbmZzNHByb2MuYw0KPiBAQCAtNzQ1OSw2ICs3NDU5LDcgQEAgc3RhdGljIGludCBu ZnM0X3hhdHRyX3NldF9uZnM0X3VzZXIoY29uc3Qgc3RydWN0DQo+IHhhdHRyX2hhbmRsZXIgKmhh bmRsZXIsDQo+ICAJCQkJICAgIHNpemVfdCBidWZsZW4sIGludCBmbGFncykNCj4gIHsNCj4gIAlz dHJ1Y3QgbmZzX2FjY2Vzc19lbnRyeSBjYWNoZTsNCj4gKwlpbnQgcmV0Ow0KPiAgDQo+ICAJaWYg KCFuZnNfc2VydmVyX2NhcGFibGUoaW5vZGUsIE5GU19DQVBfWEFUVFIpKQ0KPiAgCQlyZXR1cm4g LUVPUE5PVFNVUFA7DQo+IEBAIC03NDc3LDEwICs3NDc4LDE3IEBAIHN0YXRpYyBpbnQgbmZzNF94 YXR0cl9zZXRfbmZzNF91c2VyKGNvbnN0IHN0cnVjdA0KPiB4YXR0cl9oYW5kbGVyICpoYW5kbGVy LA0KPiAgCQkJcmV0dXJuIC1FQUNDRVM7DQo+ICAJfQ0KPiAgDQo+IC0JaWYgKGJ1ZiA9PSBOVUxM KQ0KPiAtCQlyZXR1cm4gbmZzNDJfcHJvY19yZW1vdmV4YXR0cihpbm9kZSwga2V5KTsNCj4gLQll bHNlDQo+IC0JCXJldHVybiBuZnM0Ml9wcm9jX3NldHhhdHRyKGlub2RlLCBrZXksIGJ1ZiwgYnVm bGVuLCBmbGFncyk7DQo+ICsJaWYgKGJ1ZiA9PSBOVUxMKSB7DQo+ICsJCXJldCA9IG5mczQyX3By b2NfcmVtb3ZleGF0dHIoaW5vZGUsIGtleSk7DQo+ICsJCWlmICghcmV0KQ0KPiArCQkJbmZzNF94 YXR0cl9jYWNoZV9yZW1vdmUoaW5vZGUsIGtleSk7DQo+ICsJfSBlbHNlIHsNCj4gKwkJcmV0ID0g bmZzNDJfcHJvY19zZXR4YXR0cihpbm9kZSwga2V5LCBidWYsIGJ1ZmxlbiwgZmxhZ3MpOw0KPiAr CQlpZiAoIXJldCkNCj4gKwkJCW5mczRfeGF0dHJfY2FjaGVfYWRkKGlub2RlLCBrZXksIGJ1Ziwg TlVMTCwgYnVmbGVuKTsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gcmV0Ow0KPiAgfQ0KPiAgDQo+ ICBzdGF0aWMgaW50IG5mczRfeGF0dHJfZ2V0X25mczRfdXNlcihjb25zdCBzdHJ1Y3QgeGF0dHJf aGFuZGxlciAqaGFuZGxlciwNCj4gQEAgLTc0ODgsNiArNzQ5Niw3IEBAIHN0YXRpYyBpbnQgbmZz NF94YXR0cl9nZXRfbmZzNF91c2VyKGNvbnN0IHN0cnVjdA0KPiB4YXR0cl9oYW5kbGVyICpoYW5k bGVyLA0KPiAgCQkJCSAgICBjb25zdCBjaGFyICprZXksIHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1Zmxl bikNCj4gIHsNCj4gIAlzdHJ1Y3QgbmZzX2FjY2Vzc19lbnRyeSBjYWNoZTsNCj4gKwlzc2l6ZV90 IHJldDsNCj4gIA0KPiAgCWlmICghbmZzX3NlcnZlcl9jYXBhYmxlKGlub2RlLCBORlNfQ0FQX1hB VFRSKSkNCj4gIAkJcmV0dXJuIC1FT1BOT1RTVVBQOw0KPiBAQCAtNzQ5Nyw3ICs3NTA2LDE3IEBA IHN0YXRpYyBpbnQgbmZzNF94YXR0cl9nZXRfbmZzNF91c2VyKGNvbnN0IHN0cnVjdA0KPiB4YXR0 cl9oYW5kbGVyICpoYW5kbGVyLA0KPiAgCQkJcmV0dXJuIC1FQUNDRVM7DQo+ICAJfQ0KPiAgDQo+ IC0JcmV0dXJuIG5mczQyX3Byb2NfZ2V0eGF0dHIoaW5vZGUsIGtleSwgYnVmLCBidWZsZW4pOw0K PiArCXJldCA9IG5mc19yZXZhbGlkYXRlX2lub2RlKE5GU19TRVJWRVIoaW5vZGUpLCBpbm9kZSk7 DQo+ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJuIHJldDsNCj4gKw0KPiArCXJldCA9IG5mczRfeGF0 dHJfY2FjaGVfZ2V0KGlub2RlLCBrZXksIGJ1ZiwgYnVmbGVuKTsNCj4gKwlpZiAocmV0ID49IDAg fHwgKHJldCA8IDAgJiYgcmV0ICE9IC1FTk9FTlQpKQ0KPiArCQlyZXR1cm4gcmV0Ow0KPiArDQo+ ICsJcmV0ID0gbmZzNDJfcHJvY19nZXR4YXR0cihpbm9kZSwga2V5LCBidWYsIGJ1Zmxlbik7DQo+ ICsNCj4gKwlyZXR1cm4gcmV0Ow0KPiAgfQ0KPiAgDQo+ICBzdGF0aWMgc3NpemVfdA0KPiBAQCAt NzUwNSw3ICs3NTI0LDcgQEAgbmZzNF9saXN0eGF0dHJfbmZzNF91c2VyKHN0cnVjdCBpbm9kZSAq aW5vZGUsIGNoYXINCj4gKmxpc3QsIHNpemVfdCBsaXN0X2xlbikNCj4gIHsNCj4gIAl1NjQgY29v a2llOw0KPiAgCWJvb2wgZW9mOw0KPiAtCWludCByZXQsIHNpemU7DQo+ICsJc3NpemVfdCByZXQs IHNpemU7DQo+ICAJY2hhciAqYnVmOw0KPiAgCXNpemVfdCBidWZsZW47DQo+ICAJc3RydWN0IG5m c19hY2Nlc3NfZW50cnkgY2FjaGU7DQo+IEBAIC03NTE4LDYgKzc1MzcsMTQgQEAgbmZzNF9saXN0 eGF0dHJfbmZzNF91c2VyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNoYXINCj4gKmxpc3QsIHNpemVf dCBsaXN0X2xlbikNCj4gIAkJCXJldHVybiAwOw0KPiAgCX0NCj4gIA0KPiArCXJldCA9IG5mc19y ZXZhbGlkYXRlX2lub2RlKE5GU19TRVJWRVIoaW5vZGUpLCBpbm9kZSk7DQo+ICsJaWYgKHJldCkN Cj4gKwkJcmV0dXJuIHJldDsNCj4gKw0KPiArCXJldCA9IG5mczRfeGF0dHJfY2FjaGVfbGlzdChp bm9kZSwgbGlzdCwgbGlzdF9sZW4pOw0KPiArCWlmIChyZXQgPj0gMCB8fCAocmV0IDwgMCAmJiBy ZXQgIT0gLUVOT0VOVCkpDQo+ICsJCXJldHVybiByZXQ7DQo+ICsNCj4gIAljb29raWUgPSAwOw0K PiAgCWVvZiA9IGZhbHNlOw0KPiAgCWJ1ZmxlbiA9IGxpc3RfbGVuID8gbGlzdF9sZW4gOiBYQVRU Ul9MSVNUX01BWDsNCj4gQEAgLTc1MzcsNiArNzU2NCw5IEBAIG5mczRfbGlzdHhhdHRyX25mczRf dXNlcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjaGFyDQo+ICpsaXN0LCBzaXplX3QgbGlzdF9sZW4p DQo+ICAJCXNpemUgKz0gcmV0Ow0KPiAgCX0NCj4gIA0KPiArCWlmIChsaXN0X2xlbikNCj4gKwkJ bmZzNF94YXR0cl9jYWNoZV9zZXRfbGlzdChpbm9kZSwgbGlzdCwgc2l6ZSk7DQo+ICsNCj4gIAly ZXR1cm4gc2l6ZTsNCj4gIH0NCj4gIA0KPiBkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRzdXBlci5j IGIvZnMvbmZzL25mczRzdXBlci5jDQo+IGluZGV4IDE0NzVmOTMyZDdkYS4uMGMxYWI4NDZiODNk IDEwMDY0NA0KPiAtLS0gYS9mcy9uZnMvbmZzNHN1cGVyLmMNCj4gKysrIGIvZnMvbmZzL25mczRz dXBlci5jDQo+IEBAIC02OSw2ICs2OSw3IEBAIHN0YXRpYyB2b2lkIG5mczRfZXZpY3RfaW5vZGUo c3RydWN0IGlub2RlICppbm9kZSkNCj4gIAlwbmZzX2Rlc3Ryb3lfbGF5b3V0KE5GU19JKGlub2Rl KSk7DQo+ICAJLyogRmlyc3QgY2FsbCBzdGFuZGFyZCBORlMgY2xlYXJfaW5vZGUoKSBjb2RlICov DQo+ICAJbmZzX2NsZWFyX2lub2RlKGlub2RlKTsNCj4gKwluZnM0X3hhdHRyX2NhY2hlX3phcChp bm9kZSk7DQo+ICB9DQo+ICANCj4gIHN0cnVjdCBuZnNfcmVmZXJyYWxfY291bnQgew0KPiBAQCAt MjY4LDYgKzI2OSwxMiBAQCBzdGF0aWMgaW50IF9faW5pdCBpbml0X25mc192NCh2b2lkKQ0KPiAg CWlmIChlcnIpDQo+ICAJCWdvdG8gb3V0MTsNCj4gIA0KPiArI2lmZGVmIENPTkZJR19ORlNfVjRf Mg0KPiArCWVyciA9IG5mczRfeGF0dHJfY2FjaGVfaW5pdCgpOw0KPiArCWlmIChlcnIpDQo+ICsJ CWdvdG8gb3V0MjsNCj4gKyNlbmRpZg0KPiArDQo+ICAJZXJyID0gbmZzNF9yZWdpc3Rlcl9zeXNj dGwoKTsNCj4gIAlpZiAoZXJyKQ0KPiAgCQlnb3RvIG91dDI7DQo+IEBAIC0yODgsNiArMjk1LDkg QEAgc3RhdGljIHZvaWQgX19leGl0IGV4aXRfbmZzX3Y0KHZvaWQpDQo+ICAJbmZzNF9wbmZzX3Yz X2RzX2Nvbm5lY3RfdW5sb2FkKCk7DQo+ICANCj4gIAl1bnJlZ2lzdGVyX25mc192ZXJzaW9uKCZu ZnNfdjQpOw0KPiArI2lmZGVmIENPTkZJR19ORlNfVjRfMg0KPiArCW5mczRfeGF0dHJfY2FjaGVf ZXhpdCgpOw0KPiArI2VuZGlmDQo+ICAJbmZzNF91bnJlZ2lzdGVyX3N5c2N0bCgpOw0KPiAgCW5m c19pZG1hcF9xdWl0KCk7DQo+ICAJbmZzX2Ruc19yZXNvbHZlcl9kZXN0cm95KCk7DQo+IGRpZmYg LS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc19mcy5oIGIvaW5jbHVkZS9saW51eC9uZnNfZnMuaA0K PiBpbmRleCAxZmNmZWY2NzBhNGEuLmMwOGNjMjJkOWMzMiAxMDA2NDQNCj4gLS0tIGEvaW5jbHVk ZS9saW51eC9uZnNfZnMuaA0KPiArKysgYi9pbmNsdWRlL2xpbnV4L25mc19mcy5oDQo+IEBAIC0x MDIsNiArMTAyLDggQEAgc3RydWN0IG5mc19kZWxlZ2F0aW9uOw0KPiAgDQo+ICBzdHJ1Y3QgcG9z aXhfYWNsOw0KPiAgDQo+ICtzdHJ1Y3QgbmZzNF94YXR0cl9jYWNoZTsNCj4gKw0KPiAgLyoNCj4g ICAqIG5mcyBmcyBpbm9kZSBkYXRhIGluIG1lbW9yeQ0KPiAgICovDQo+IEBAIC0xODgsNiArMTkw LDEwIEBAIHN0cnVjdCBuZnNfaW5vZGUgew0KPiAgCXN0cnVjdCBmc2NhY2hlX2Nvb2tpZQkqZnNj YWNoZTsNCj4gICNlbmRpZg0KPiAgCXN0cnVjdCBpbm9kZQkJdmZzX2lub2RlOw0KPiArDQo+ICsj aWZkZWYgQ09ORklHX05GU19WNF8yDQo+ICsJc3RydWN0IG5mczRfeGF0dHJfY2FjaGUgKnhhdHRy X2NhY2hlOw0KPiArI2VuZGlmDQo+ICB9Ow0KPiAgDQo+ICBzdHJ1Y3QgbmZzNF9jb3B5X3N0YXRl IHsNCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9uZnNfZnMuaCBiL2luY2x1ZGUv dWFwaS9saW51eC9uZnNfZnMuaA0KPiBpbmRleCA3YmNjOGNkNjgzMWQuLjNhZmUzNzY3YzU1ZCAx MDA2NDQNCj4gLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L25mc19mcy5oDQo+ICsrKyBiL2luY2x1 ZGUvdWFwaS9saW51eC9uZnNfZnMuaA0KPiBAQCAtNTYsNiArNTYsNyBAQA0KPiAgI2RlZmluZSBO RlNEQkdfUE5GUwkJMHgxMDAwDQo+ICAjZGVmaW5lIE5GU0RCR19QTkZTX0xECQkweDIwMDANCj4g ICNkZWZpbmUgTkZTREJHX1NUQVRFCQkweDQwMDANCj4gKyNkZWZpbmUgTkZTREJHX1hBVFRSQ0FD SEUJMHg4MDAwDQo+ICAjZGVmaW5lIE5GU0RCR19BTEwJCTB4RkZGRg0KPiAgDQo+ICANCg==