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=-7.1 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_PASS,URIBL_BLOCKED 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 76416C10F03 for ; Tue, 23 Apr 2019 17:58:40 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 0895120835 for ; Tue, 23 Apr 2019 17:58:40 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=Mellanox.com header.i=@Mellanox.com header.b="rV4YtHTe" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728708AbfDWR6i (ORCPT ); Tue, 23 Apr 2019 13:58:38 -0400 Received: from mail-eopbgr00062.outbound.protection.outlook.com ([40.107.0.62]:33858 "EHLO EUR02-AM5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727656AbfDWR6i (ORCPT ); Tue, 23 Apr 2019 13:58:38 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=xrmpNxKEilrgh18yMGgIe+FTZ3CoZGeQ/WdCALRy8v4=; b=rV4YtHTeSdH8RXpwwQIBBjxJ0+mEguz9z4JcoRkS7BvydKWUcY4Lk7z8M6JJG/sw/eLetoJbuF2ef729lsqFjWwAh5Gc2TVHXUHwVxUqHN2Bmh+Tt1tUU2s7NPCi/3AXm0MoipS3JWHYjfg5i9TQYPRbFckf3go8Daq7cqt3Seo= Received: from DB8PR05MB5898.eurprd05.prod.outlook.com (20.179.9.32) by DB8PR05MB5898.eurprd05.prod.outlook.com (20.179.9.32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1813.12; Tue, 23 Apr 2019 17:58:22 +0000 Received: from DB8PR05MB5898.eurprd05.prod.outlook.com ([fe80::85d8:bf39:8cc9:16c3]) by DB8PR05MB5898.eurprd05.prod.outlook.com ([fe80::85d8:bf39:8cc9:16c3%3]) with mapi id 15.20.1813.017; Tue, 23 Apr 2019 17:58:22 +0000 From: Saeed Mahameed To: "davem@davemloft.net" , "maxime.chevallier@bootlin.com" CC: "miquel.raynal@bootlin.com" , "linux-kernel@vger.kernel.org" , "linux@armlinux.org.uk" , "thomas.petazzoni@bootlin.com" , "mw@semihalf.com" , "gregory.clement@bootlin.com" , "netdev@vger.kernel.org" , "stefanc@marvell.com" , "nadavh@marvell.com" , "linux-arm-kernel@lists.infradead.org" , "antoine.tenart@bootlin.com" Subject: Re: [PATCH net-next v2] net: mvpp2: cls: Add Classification offload support Thread-Topic: [PATCH net-next v2] net: mvpp2: cls: Add Classification offload support Thread-Index: AQHU+alMGCHmeegJL0m0xxs+vFmZxKZKCPGA Date: Tue, 23 Apr 2019 17:58:22 +0000 Message-ID: References: <20190423075031.26074-1-maxime.chevallier@bootlin.com> In-Reply-To: <20190423075031.26074-1-maxime.chevallier@bootlin.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Evolution 3.30.5 (3.30.5-1.fc29) authentication-results: spf=none (sender IP is ) smtp.mailfrom=saeedm@mellanox.com; x-originating-ip: [209.116.155.178] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: f9733bed-dce6-4a48-ec5d-08d6c81546d6 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(5600141)(711020)(4605104)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020);SRVR:DB8PR05MB5898; x-ms-traffictypediagnostic: DB8PR05MB5898: x-ms-exchange-purlcount: 1 x-microsoft-antispam-prvs: x-forefront-prvs: 0016DEFF96 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(366004)(396003)(346002)(136003)(39860400002)(376002)(199004)(189003)(71190400001)(71200400001)(2906002)(486006)(110136005)(25786009)(2616005)(476003)(11346002)(5660300002)(6506007)(14454004)(58126008)(54906003)(256004)(6436002)(14444005)(76176011)(6486002)(478600001)(966005)(4326008)(118296001)(99286004)(446003)(30864003)(316002)(186003)(64756008)(6116002)(229853002)(66066001)(66446008)(7736002)(6512007)(36756003)(7416002)(26005)(81156014)(53936002)(81166006)(8676002)(66476007)(6306002)(66556008)(8936002)(53946003)(91956017)(68736007)(86362001)(3846002)(97736004)(73956011)(76116006)(6246003)(102836004)(2501003)(66946007)(305945005)(579004)(559001);DIR:OUT;SFP:1101;SCL:1;SRVR:DB8PR05MB5898;H:DB8PR05MB5898.eurprd05.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: llD9BM0mSV+2XsxTdM96crFDG2Lg8W32GnDxu6qcCwKbwPqol4+Q5EmpEXU/HmjJGQ+lt+woh8nyOA8gsQvdob8TvY/2XDd1wFx0XFHMCzMPPVkFOrDy6ZoBafwDC61UjksI+G4cuEAQ1LT2V2RNG0P32ux+9qgNpauBrBZkoWvu/4fo1nD0RNMc7hGEuokOw//MC8g6eyfb7nnAQXQEG7Jt1fYru1b7kHZBGPcsHxAYqQxSVEV8R7wBtOoIQTNU9KE54KsU1pZ2dLh5GIGvt6wAplJs+soZHM0ZCLjBjFMQMW74U9h85lOh156MUJ190p2mRI/YV4ONkGuGWidHygevDT8aT7jRneFGsWqke/1EGKL8oC1D01IJTRShAQ7k+sJnlhdAo5wRCKC/nxCEgjvQA+D7np2M6wDLgTBF2zY= Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: f9733bed-dce6-4a48-ec5d-08d6c81546d6 X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Apr 2019 17:58:22.6851 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR05MB5898 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org T24gVHVlLCAyMDE5LTA0LTIzIGF0IDA5OjUwICswMjAwLCBNYXhpbWUgQ2hldmFsbGllciB3cm90 ZToNCj4gVGhpcyBjb21taXQgaW50cm9kdWNlcyBiYXNpYyBjbGFzc2lmaWNhdGlvbiBvZmZsb2Fk aW5nIHN1cHBvcnQgZm9yDQo+IHRoZQ0KPiBQUHYyIGNvbnRyb2xsZXIuDQo+IA0KPiBUaGUgUFB2 MiBjbGFzc2lmaWVyIGhhcyBtYW55IGNsYXNzaWZpY2F0aW9uIGVuZ2luZXMsIGZvciBub3cgd2Ug b25seQ0KPiB1c2UNCj4gdGhlIEMyIFRDQU0gbWF0Y2ggZW5naW5lLg0KPiANCj4gVGhpcyBlbmdp bmUgYWxsb3dzIHRvIHBlcmZvcm0gdGVybmFyeSBsb29rdXBzIG9uIDY0IGJpdHMga2V5cyAoY2Fs bGVkDQo+IEhlYWRlciBFeHRyYWN0ZWQgS2V5KSwgdGhhdCBhcmUgYnVpbHQgYnkgZXh0cmFjdGlu ZyBmaWVsZHMgZnJvbSB0aGUNCj4gcGFja2V0DQo+IGhlYWRlciBhbmQgY29uY2F0ZW5hdGluZyB0 aGVtLiBBdCBtb3N0IDQgZmllbGRzIGNhbiBiZSBleHRyYWN0ZWQgZm9yDQo+IGENCj4gc2luZ2xl IGxvb2t1cC4NCj4gDQo+IFRoaXMgYmFzaWMgaW1wbGVtZW50YXRpb24gYWxsb3dzIHRvIGJ1aWxk IHRoZSBIRUsgZnJvbSB0aGUgZm9sbG93aW5nDQo+IGZpZWxkcyA6DQo+ICAtIEw0IHNvdXJjZSBh bmQgZGVzdGluYXRpb24gcG9ydHMgKGZvciBVRFAgYW5kIFRDUCkNCj4gDQo+IE1vcmUgZmllbGRz IGFyZSB0byBiZSBhZGRlZCBpbiB0aGUgZnV0dXJlLg0KPiANCj4gQ2xhc3NpZmljYXRpb24gZmxv d3MgYXJlIGFkZGVkIHRocm91Z2ggdGhlIGV0aHRvb2wgaW50ZXJmYWNlLCB1c2luZw0KPiB0aGUN Cj4gbmV3bHkgaW50cm9kdWNlZCBmbG93X3J1bGUgaW5mcmFzdHJ1Y3R1cmUgYXMgYW4gaW50ZXJu YWwgcnVsZQ0KPiByZXByZXNlbnRhdGlvbiwgYWxsb3dpbmcgdG8gbW9yZSBlYXNpbHkgaW1wbGVt ZW50IHRjIGZsb3dlciBydWxlcyBpZg0KPiBuZWVkIGJlLg0KPiANCj4gRmxvd3MgYXJlIHNlcGFy YXRlZCBiYXNlZCBvbiB0aGVpciBmbG93LXR5cGUgKHN1cHBvcnRlZCBmbG93LXR5cGVzDQo+IGFy ZQ0KPiB0Y3A0LCB1ZHA0LCB0Y3A2LCB1ZHA2LCBpcDQsIGlwNiBhbmQgZXRoZXIpLCBlYWNoIHR5 cGUgY2FuIGNvbnRhaW4gdXANCj4gdG8NCj4gNyBjbGFzc2lmaWNhdGlvbiBydWxlcy4gTm90ZSB0 aGF0IHRoZSBtb3N0IHNwZWNpZmljIGZsb3ctdHlwZSBpcw0KPiBhbHdheXMNCj4gdXNlZCwgbWVh bmluZyB0aGF0IGEgcnVsZSBpbiB0aGUgdGNwNCBmbG93IHdpbGwgc3VwZXJzZWVkIGEgcnVsZSBp bg0KPiB0aGUNCj4gaXA0IGZsb3cgbWF0Y2hpbmcgdGhlIHNhbWUga2V5KQ0KPiANCj4gV2hlbiBp bnNlcnRpbmcgYSBydWxlIGluIGEgZ2l2ZW4gZmxvdywgdGhlIGxvY2F0aW9uIGdpdmVuIGlzIHJl bGF0aXZlDQo+IHRvDQo+IHRoZSBmbG93IDoNCj4gDQo+IGV0aHRvb2wgLU4gZXRoMCBmbG93LXR5 cGUgdWRwNCBkc3QtcG9ydCAxMjM0IGFjdGlvbiAyIGxvYyAwDQo+IA0KPiBldGh0b29sIC1OIGV0 aDAgZmxvdy10eXBlIHRjcDQgZHN0LXBvcnQgMTIzNCBhY3Rpb24gMyBsb2MgMA0KPiANCj4gSG93 ZXZlciB3aGVuIHJlbW92aW5nIGEgcnVsZSwgdGhlIGdsb2JhbCBsb2NhdGlvbiBpcyB0byBiZSB1 c2VkLiBUaGlzDQo+IGxvY2F0aW9uIGNhbiBiZSByZXRyaWV2ZWQgYnkgdXNpbmcgZXRodG9vbCAt biA8aW50ZXJmYWNlPi4NCj4gDQoNCkkgYW0gbm90IHN1cmUgd2hhdCB5b3UgbWVhbiBieSAidGhl IGxvY2F0aW9uIGdpdmVuIGlzIHJlbGF0aXZlIHRvIHRoZQ0KZmxvdyIsIGl0IHNlZW1zIGxpa2Ug dGhlIHJ1bGUgd2lsbCBlbmQgdXAgaW4gYSBkaWZmZXJlbnQgbG9jYXRpb24gdGhhbg0KdGhlIHVz ZXIgaW50ZW5kZWQsIGJ1dCBsb29raW5nIGF0IGV0aHRvb2wgZG9jdW1lbnRhdGlvbiBpdCBjbGVh cmx5IHNheXMNCnRoYXQgdGhlIGxvY2F0aW9uIHRoZSB1c2VyIHByb3ZpZGVzIGlzIGFuIGFic29s dXRlIHJ1bGUgaWQvbG9jYXRpb24sDQp3aGljaCB3aWxsIGJlIHVzZWQgdG8gZGVsZXRlIHRoaXMg cnVsZS4NCg0KZnJvbSAibWFuIGV0aHRvb2wiOg0KbG9jIE46DQpTcGVjaWZ5IHRoZSBsb2NhdGlv bi9JRCB0byBpbnNlcnQgdGhlIHJ1bGUuIFRoaXMgd2lsbCBvdmVyd3JpdGUgYW55DQpydWxlIHBy ZXNlbnQgaW4gdGhhdCBsb2NhdGlvbiBhbmQgd2lsbCBub3QgZ28gdGhyb3VnaCBhbnkgb2YgdGhl IHJ1bGUNCm9yZGVyaW5nIHByb2Nlc3MuDQoNCmRlbGV0ZSBODQpEZWxldGVzIHRoZSBSWCBjbGFz c2lmaWNhdGlvbiBydWxlIHdpdGggdGhlIGdpdmVuIElELg0KDQpTbyB0aGUgYWJvdmUgZXhhbXBs ZSBzaG91bGQgcmVzdWx0IGluIG9uZSBmbG93IHJ1bGUgaW4geW91ciBoYXJkd2FyZS4NCmJ1dCBh Y2NvcmRpbmcgdGhlIGNvZGUgYmVsb3cgdGhlIGNhbGN1bGF0ZWQgaW5kZXggaW4NCm12cHAyX2V0 aHRvb2xfY2xzX3J1bGVfaW5zIG1pZ2h0IGVuZCB1cCBkaWZmZXJlbnQgdGhhbiB0aGUgcmVxdWVz dGVkDQpsb2NhdGlvbiwgd2hpY2ggd2lsbCBjb25mdXNlIHRoZSB1c2VyLg0KDQoNCj4gVGhpcyBj b21taXQgb25seSBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIHRoZSAic3RlZXIgdG8gcnhxIiBhY3Rp b24uDQo+IA0KPiBTaWduZWQtb2ZmLWJ5OiBNYXhpbWUgQ2hldmFsbGllciA8bWF4aW1lLmNoZXZh bGxpZXJAYm9vdGxpbi5jb20+DQo+IC0tLQ0KPiBWMjogLSBSZS1hcnJhbmdlZCBzdHJ1Y3QgbXZw cDJfcmZzX3J1bGUgdG8gbWluaW1pemUgZ2FwcyBvbiA2NCBiaXRzDQo+IHN5c3RlbXMsDQo+ICAg ICBhcyBzdWdnZXN0ZWQgYnkgRGF2aWQuDQo+IA0KPiAgICAgLSBGaXhlZCBhIHNtYXRjaCBlcnJv ciBpbmRpY2F0aW5nIGEgcG9zc2libGUgb3V0LW9mLWJvdW5kIGFycmF5DQo+IGFjY2Vzcw0KPiAg ICAgd2hlbiBhY2Nlc3NpbmcgdGhlIGludGVybmFsIGxpc3Qgb2YgcnVsZXMuDQo+IA0KPiAgICAg LSBPdGhlciBzbWF0Y2ggd2FybmluZ3Mgc2F5aW5nIHRoYXQgc29tZSBpbmRpY2VzIGNhbid0IGJl DQo+IG5lZ2F0aXZlZCB3ZXJlDQo+ICAgICAgIG5vdCBmaXhlZCBvbiBwdXJwb3NlLCBldmVuIHRo b3VnaCBubyBwYXRoIGxlYWRzIHRvIHRoZXNlDQo+IGluZGljaWVzIGJlaW5nDQo+ICAgICAgIG5l Z2F0aXZlIHJpZ2h0IG5vdywgZnV0dXJlIHdvcmsgY291bGQgbGVhZCB0byBjYXNlcyB3aGVyZQ0K PiBpbmRpY2VzIGFyZW4ndA0KPiAgICAgICB2YWxpZC4NCj4gDQo+ICBkcml2ZXJzL25ldC9ldGhl cm5ldC9tYXJ2ZWxsL212cHAyL212cHAyLmggICAgfCAgNTAgKysNCj4gIC4uLi9uZXQvZXRoZXJu ZXQvbWFydmVsbC9tdnBwMi9tdnBwMl9jbHMuYyAgICB8IDQ1OA0KPiArKysrKysrKysrKysrKysr Ky0NCj4gIC4uLi9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9tdnBwMl9jbHMuaCAgICB8ICA1 NiArKy0NCj4gIC4uLi9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9tdnBwMl9tYWluLmMgICB8 ICAyNCArLQ0KPiAgNCBmaWxlcyBjaGFuZ2VkLCA1NzMgaW5zZXJ0aW9ucygrKSwgMTUgZGVsZXRp b25zKC0pDQo+IA0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9t dnBwMi9tdnBwMi5oDQo+IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9tdnBw Mi5oDQo+IGluZGV4IDY3Y2NlMjczNjgwNi4uZGNiOTNhZmI2NTY5IDEwMDY0NA0KPiAtLS0gYS9k cml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyLmgNCj4gKysrIGIvZHJpdmVy cy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9tdnBwMi5oDQo+IEBAIC0xNCw2ICsxNCw3IEBA DQo+ICAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+DQo+ICAjaW5jbHVkZSA8bGludXgvcGh5 Lmg+DQo+ICAjaW5jbHVkZSA8bGludXgvcGh5bGluay5oPg0KPiArI2luY2x1ZGUgPG5ldC9mbG93 X29mZmxvYWQuaD4NCj4gIA0KPiAgLyogRmlmbyBSZWdpc3RlcnMgKi8NCj4gICNkZWZpbmUgTVZQ UDJfUlhfREFUQV9GSUZPX1NJWkVfUkVHKHBvcnQpCSgweDAwICsgNCAqIChwb3J0KSkNCj4gQEAg LTEyNiw2ICsxMjcsNyBAQA0KPiAgI2RlZmluZSBNVlBQMjJfQ0xTX0MyX1RDQU1fREFUQTQJCTB4 MWIyMA0KPiAgI2RlZmluZSAgICAgTVZQUDIyX0NMU19DMl9MVV9UWVBFKGx1KQkJKChsdSkgJiAw eDNmKQ0KPiAgI2RlZmluZSAgICAgTVZQUDIyX0NMU19DMl9QT1JUX0lEKHBvcnQpCQkoKHBvcnQp IDw8IDgpDQo+ICsjZGVmaW5lICAgICBNVlBQMjJfQ0xTX0MyX1BPUlRfTUFTSwkJKDB4ZmYgPDwg OCkNCj4gICNkZWZpbmUgTVZQUDIyX0NMU19DMl9UQ0FNX0lOVgkJCTB4MWIyNA0KPiAgI2RlZmlu ZSAgICAgTVZQUDIyX0NMU19DMl9UQ0FNX0lOVl9CSVQJCUJJVCgzMSkNCj4gICNkZWZpbmUgTVZQ UDIyX0NMU19DMl9ISVRfQ1RSCQkJMHgxYjUwDQo+IEBAIC02MTUsNiArNjE3LDEwIEBADQo+ICAj ZGVmaW5lIE1WUFAyX0JJVF9JTl9XT1JEKGJpdCkJCSgoYml0KSAlIDMyKQ0KPiAgDQo+ICAjZGVm aW5lIE1WUFAyX05fUFJTX0ZMT1dTCQk1Mg0KPiArI2RlZmluZSBNVlBQMl9OX1JGU19FTlRSSUVT X1BFUl9GTE9XCTcNCj4gKw0KPiArLyogVGhlcmUgYXJlIDcgc3VwcG9ydGVkIGhpZ2gtbGV2ZWwg Zmxvd3MgKi8NCj4gKyNkZWZpbmUgTVZQUDJfTl9SRlNfUlVMRVMJCShNVlBQMl9OX1JGU19FTlRS SUVTX1BFUl9GTE9XICoNCj4gNykNCj4gIA0KPiAgLyogUlNTIGNvbnN0YW50cyAqLw0KPiAgI2Rl ZmluZSBNVlBQMjJfUlNTX1RBQkxFX0VOVFJJRVMJMzINCj4gQEAgLTgxMiw2ICs4MTgsNDYgQEAg c3RydWN0IG12cHAyX3F1ZXVlX3ZlY3RvciB7DQo+ICAJc3RydWN0IGNwdW1hc2sgKm1hc2s7DQo+ ICB9Ow0KPiAgDQo+ICsvKiBJbnRlcm5hbCByZXByZXNlbnRpb24gb2YgYSBGbG93IFN0ZWVyaW5n IHJ1bGUgKi8NCj4gK3N0cnVjdCBtdnBwMl9yZnNfcnVsZSB7DQo+ICsJLyogUnVsZSBsb2NhdGlv biBpbnNpZGUgdGhlIGZsb3cqLw0KPiArCWludCBsb2M7DQo+ICsNCj4gKwkvKiBGbG93IHR5cGUs IHN1Y2ggYXMgVENQX1Y0X0ZMT1csIElQNl9GTE9XLCBldGMuICovDQo+ICsJaW50IGZsb3dfdHlw ZTsNCj4gKw0KPiArCS8qIFRoZSBsb29rdXAgdHlwZSB1c2VkIGJ5IHRoaXMgZmxvdy4gVGhpcyBh bGxvd3MgdGhlDQo+IGNsYXNzaWZpY2F0aW9uDQo+ICsJICogZW5naW5lcyB0byBkaWZmZXJlbnRp YXRlIGJldHdlZW4gZW50cmllcyB0aGF0IG1hdGNoIHRoZSBzYW1lDQo+ICsJICogcGFyYW1ldGVy cw0KPiArCSAqLw0KPiArCWludCBsdV90eXBlOw0KPiArDQo+ICsJLyogSW5kZXggb2YgdGhlIGVu dHJ5IGhhbmRsaW5nIHRoaXMgcnVsZSBpbiB0aGUgZmxvdyB0YWJsZSAqLw0KPiArCWludCBmbHRf aW5kZXg7DQo+ICsNCj4gKwkvKiBJbmRleCBvZiB0aGUgQzIgVENBTSBlbnRyeSBoYW5kbGluZyB0 aGlzIHJ1bGUgKi8NCj4gKwlpbnQgYzJfaW5kZXg7DQo+ICsNCj4gKwkvKiBIZWFkZXIgZmllbGRz IHRoYXQgbmVlZHMgdG8gYmUgZXh0cmFjdGVkIHRvIG1hdGNoIHRoaXMgZmxvdw0KPiAqLw0KPiAr CXUxNiBoZWtfZmllbGRzOw0KPiArDQo+ICsJLyogQ0xTIGVuZ2luZSA6IG9ubHkgYzIgaXMgc3Vw cG9ydGVkIGZvciBub3cuICovDQo+ICsJdTggZW5naW5lOw0KPiArDQo+ICsJLyogVENBTSBrZXkg YW5kIG1hc2sgZm9yIEMyLWJhc2VkIHN0ZWVyaW5nLiBUaGVzZSBmaWVsZHMgc2hvdWxkDQo+IGJl DQo+ICsJICogZW5jYXBzdWxhdGVkIGluIGEgdW5pb24gc2hvdWxkIHdlIGFkZCBtb3JlIGVuZ2lu ZXMuDQo+ICsJICovDQo+ICsJdTY0IGMyX3RjYW07DQo+ICsJdTY0IGMyX3RjYW1fbWFzazsNCj4g Kw0KPiArCXN0cnVjdCBmbG93X3J1bGUgKmZsb3c7DQo+ICt9Ow0KPiArDQo+ICtzdHJ1Y3QgbXZw cDJfZXRodG9vbF9mcyB7DQo+ICsJc3RydWN0IG12cHAyX3Jmc19ydWxlIHJ1bGU7DQo+ICsJc3Ry dWN0IGV0aHRvb2xfcnhuZmMgcnhuZmM7DQo+ICt9Ow0KPiArDQo+ICBzdHJ1Y3QgbXZwcDJfcG9y dCB7DQo+ICAJdTggaWQ7DQo+ICANCj4gQEAgLTg4Myw2ICs5MjksMTAgQEAgc3RydWN0IG12cHAy X3BvcnQgew0KPiAgDQo+ICAJLyogUlNTIGluZGlyZWN0aW9uIHRhYmxlICovDQo+ICAJdTMyIGlu ZGlyW01WUFAyMl9SU1NfVEFCTEVfRU5UUklFU107DQo+ICsNCj4gKwkvKiBMaXN0IG9mIHN0ZWVy aW5nIHJ1bGVzIGFjdGl2ZSBvbiB0aGF0IHBvcnQgKi8NCj4gKwlzdHJ1Y3QgbXZwcDJfZXRodG9v bF9mcyAqcmZzX3J1bGVzW01WUFAyX05fUkZTX1JVTEVTXTsNCj4gKwlpbnQgbl9yZnNfcnVsZXM7 DQo+ICB9Ow0KPiAgDQo+ICAvKiBUaGUgbXZwcDJfdHhfZGVzYyBhbmQgbXZwcDJfcnhfZGVzYyBz dHJ1Y3R1cmVzIGRlc2NyaWJlIHRoZQ0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJu ZXQvbWFydmVsbC9tdnBwMi9tdnBwMl9jbHMuYw0KPiBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21h cnZlbGwvbXZwcDIvbXZwcDJfY2xzLmMNCj4gaW5kZXggMTA4Nzk3NGQzYjk4Li43NDU3ZTJhYjU3 ZWIgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZwcDIvbXZw cDJfY2xzLmMNCj4gKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9tdnBw Ml9jbHMuYw0KPiBAQCAtNDQ4LDYgKzQ0OCwxNyBAQCBzdGF0aWMgdm9pZCBtdnBwMl9jbHNfZmxv d19wb3J0X2FkZChzdHJ1Y3QNCj4gbXZwcDJfY2xzX2Zsb3dfZW50cnkgKmZlLA0KPiAgCWZlLT5k YXRhWzBdIHw9IE1WUFAyX0NMU19GTE9XX1RCTDBfUE9SVF9JRChwb3J0KTsNCj4gIH0NCj4gIA0K PiArc3RhdGljIHZvaWQgbXZwcDJfY2xzX2Zsb3dfcG9ydF9yZW1vdmUoc3RydWN0IG12cHAyX2Ns c19mbG93X2VudHJ5DQo+ICpmZSwNCj4gKwkJCQkgICAgICAgdTMyIHBvcnQpDQo+ICt7DQo+ICsJ ZmUtPmRhdGFbMF0gJj0gfk1WUFAyX0NMU19GTE9XX1RCTDBfUE9SVF9JRChwb3J0KTsNCj4gK30N Cj4gKw0KPiArc3RhdGljIHU4IG12cHAyX2Nsc19mbG93X3BtYXBfZ2V0KHN0cnVjdCBtdnBwMl9j bHNfZmxvd19lbnRyeSAqZmUpDQo+ICt7DQo+ICsJcmV0dXJuIChmZS0+ZGF0YVswXSA+PiA0KSAm IE1WUFAyX0NMU19GTE9XX1RCTDBfUE9SVF9JRF9NQVNLOw0KPiArfQ0KPiArDQo+ICBzdGF0aWMg dm9pZCBtdnBwMl9jbHNfZmxvd19sdV90eXBlX3NldChzdHJ1Y3QgbXZwcDJfY2xzX2Zsb3dfZW50 cnkNCj4gKmZlLA0KPiAgCQkJCSAgICAgICB1OCBsdV90eXBlKQ0KPiAgew0KPiBAQCAtNDU1LDYg KzQ2NiwxMiBAQCBzdGF0aWMgdm9pZCBtdnBwMl9jbHNfZmxvd19sdV90eXBlX3NldChzdHJ1Y3QN Cj4gbXZwcDJfY2xzX2Zsb3dfZW50cnkgKmZlLA0KPiAgCWZlLT5kYXRhWzFdIHw9IE1WUFAyX0NM U19GTE9XX1RCTDFfTFVfVFlQRShsdV90eXBlKTsNCj4gIH0NCj4gIA0KPiArc3RhdGljIHU4IG12 cHAyX2Nsc19mbG93X2x1X3R5cGVfZ2V0KHN0cnVjdCBtdnBwMl9jbHNfZmxvd19lbnRyeQ0KPiAq ZmUpDQo+ICt7DQo+ICsJcmV0dXJuIChmZS0+ZGF0YVsxXSAmDQo+ICsJCU1WUFAyX0NMU19GTE9X X1RCTDFfTFVfVFlQRShNVlBQMl9DTFNfTFVfVFlQRV9NQVNLKSkgPj4NCj4gMzsNCj4gK30NCj4g Kw0KPiAgLyogSW5pdGlhbGl6ZSB0aGUgcGFyc2VyIGVudHJ5IGZvciB0aGUgZ2l2ZW4gZmxvdyAq Lw0KPiAgc3RhdGljIHZvaWQgbXZwcDJfY2xzX2Zsb3dfcHJzX2luaXQoc3RydWN0IG12cHAyICpw cml2LA0KPiAgCQkJCSAgICBjb25zdCBzdHJ1Y3QgbXZwcDJfY2xzX2Zsb3cgKmZsb3cpDQo+IEBA IC01MzksNiArNTU2LDM1IEBAIHZvaWQgbXZwcDJfY2xzX2MyX3JlYWQoc3RydWN0IG12cHAyICpw cml2LCBpbnQNCj4gaW5kZXgsDQo+ICAJYzItPnZhbGlkID0gISh2YWwgJiBNVlBQMjJfQ0xTX0My X1RDQU1fSU5WX0JJVCk7DQo+ICB9DQo+ICANCj4gK3N0YXRpYyBpbnQgbXZwcDJfY2xzX2MyX3Bv cnRfZmxvd19nZXRfdHlwZShpbnQgZmxvd190eXBlKQ0KPiArew0KPiArCXN3aXRjaCAoZmxvd190 eXBlKSB7DQo+ICsJY2FzZSBUQ1BfVjRfRkxPVzoNCj4gKwkJcmV0dXJuIE1WUFAyMl9GTE9XX1RD UDQ7DQo+ICsJY2FzZSBUQ1BfVjZfRkxPVzoNCj4gKwkJcmV0dXJuIE1WUFAyMl9GTE9XX1RDUDY7 DQo+ICsJY2FzZSBVRFBfVjRfRkxPVzoNCj4gKwkJcmV0dXJuIE1WUFAyMl9GTE9XX1VEUDQ7DQo+ ICsJY2FzZSBVRFBfVjZfRkxPVzoNCj4gKwkJcmV0dXJuIE1WUFAyMl9GTE9XX1VEUDY7DQo+ICsJ Y2FzZSBJUFY0X0ZMT1c6DQo+ICsJCXJldHVybiBNVlBQMjJfRkxPV19JUDQ7DQo+ICsJY2FzZSBJ UFY2X0ZMT1c6DQo+ICsJCXJldHVybiBNVlBQMjJfRkxPV19JUDY7DQo+ICsJZGVmYXVsdDoNCj4g KwkJcmV0dXJuIC1FT1BOT1RTVVBQOw0KPiArCX0NCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBt dnBwMl9jbHNfYzJfcG9ydF9mbG93X2luZGV4KHN0cnVjdCBtdnBwMl9wb3J0ICpwb3J0LCBpbnQN Cj4gbHVfdHlwZSwNCj4gKwkJCQkJaW50IGxvYykNCj4gK3sNCj4gKwlpZiAobG9jID49IE1WUFAy Ml9DTFNfQzJfUE9SVF9OX1JGUykNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsNCj4gKwlyZXR1 cm4gTVZQUDIyX0NMU19DMl9SRlNfTE9DKHBvcnQtPmlkLCBsdV90eXBlLCBsb2MpOw0KPiArfQ0K PiArDQo+ICAvKiBJbml0aWFsaXplIHRoZSBmbG93IHRhYmxlIGVudHJpZXMgZm9yIHRoZSBnaXZl biBmbG93ICovDQo+ICBzdGF0aWMgdm9pZCBtdnBwMl9jbHNfZmxvd19pbml0KHN0cnVjdCBtdnBw MiAqcHJpdiwNCj4gIAkJCQljb25zdCBzdHJ1Y3QgbXZwcDJfY2xzX2Zsb3cgKmZsb3cpDQo+IEBA IC01NjUsNyArNjExLDcgQEAgc3RhdGljIHZvaWQgbXZwcDJfY2xzX2Zsb3dfaW5pdChzdHJ1Y3Qg bXZwcDINCj4gKnByaXYsDQo+ICANCj4gIAltdnBwMl9jbHNfZmxvd19lbmdfc2V0KCZmZSwgTVZQ UDIyX0NMU19FTkdJTkVfQzIpOw0KPiAgCW12cHAyX2Nsc19mbG93X3BvcnRfaWRfc2VsKCZmZSwg dHJ1ZSk7DQo+IC0JbXZwcDJfY2xzX2Zsb3dfbHVfdHlwZV9zZXQoJmZlLCBNVlBQMl9DTFNfTFVf QUxMKTsNCj4gKwltdnBwMl9jbHNfZmxvd19sdV90eXBlX3NldCgmZmUsIE1WUFAyMl9GTE9XX0VU SEVSKTsNCj4gIA0KPiAgCS8qIEFkZCBhbGwgcG9ydHMgKi8NCj4gIAlmb3IgKGkgPSAwOyBpIDwg TVZQUDJfTUFYX1BPUlRTOyBpKyspDQo+IEBAIC02NTIsNiArNjk4LDI2IEBAIHN0YXRpYyBpbnQg bXZwcDJfZmxvd19zZXRfaGVrX2ZpZWxkcyhzdHJ1Y3QNCj4gbXZwcDJfY2xzX2Zsb3dfZW50cnkg KmZlLA0KPiAgCXJldHVybiAwOw0KPiAgfQ0KPiAgDQo+ICsvKiBSZXR1cm5zIHRoZSBzaXplLCBp biBiaXRzLCBvZiB0aGUgY29ycmVzcG9uZGluZyBIRUsgZmllbGQgKi8NCj4gK3N0YXRpYyBpbnQg bXZwcDJfY2xzX2hla19maWVsZF9zaXplKHUzMiBmaWVsZCkNCj4gK3sNCj4gKwlzd2l0Y2ggKGZp ZWxkKSB7DQo+ICsJY2FzZSBNVlBQMjJfQ0xTX0hFS19PUFRfTUFDX0RBOg0KPiArCQlyZXR1cm4g NDg7DQo+ICsJY2FzZSBNVlBQMjJfQ0xTX0hFS19PUFRfSVA0U0E6DQo+ICsJY2FzZSBNVlBQMjJf Q0xTX0hFS19PUFRfSVA0REE6DQo+ICsJCXJldHVybiAzMjsNCj4gKwljYXNlIE1WUFAyMl9DTFNf SEVLX09QVF9JUDZTQToNCj4gKwljYXNlIE1WUFAyMl9DTFNfSEVLX09QVF9JUDZEQToNCj4gKwkJ cmV0dXJuIDEyODsNCj4gKwljYXNlIE1WUFAyMl9DTFNfSEVLX09QVF9MNFNJUDoNCj4gKwljYXNl IE1WUFAyMl9DTFNfSEVLX09QVF9MNERJUDoNCj4gKwkJcmV0dXJuIDE2Ow0KPiArCWRlZmF1bHQ6 DQo+ICsJCXJldHVybiAtMTsNCj4gKwl9DQo+ICt9DQo+ICsNCj4gIGNvbnN0IHN0cnVjdCBtdnBw Ml9jbHNfZmxvdyAqbXZwcDJfY2xzX2Zsb3dfZ2V0KGludCBmbG93KQ0KPiAgew0KPiAgCWlmIChm bG93ID49IE1WUFAyX05fUFJTX0ZMT1dTKQ0KPiBAQCAtODEwLDcgKzg3Niw3IEBAIHN0YXRpYyB2 b2lkIG12cHAyX3BvcnRfYzJfY2xzX2luaXQoc3RydWN0DQo+IG12cHAyX3BvcnQgKnBvcnQpDQo+ ICANCj4gIAkvKiBNYXRjaCBvbiBMb29rdXAgVHlwZSAqLw0KPiAgCWMyLnRjYW1bNF0gfD0NCj4g TVZQUDIyX0NMU19DMl9UQ0FNX0VOKE1WUFAyMl9DTFNfQzJfTFVfVFlQRShNVlBQMl9DTFNfTFVf VFlQRV9NQVNLKSk7DQo+IC0JYzIudGNhbVs0XSB8PSBNVlBQMjJfQ0xTX0MyX0xVX1RZUEUoTVZQ UDJfQ0xTX0xVX0FMTCk7DQo+ICsJYzIudGNhbVs0XSB8PSBNVlBQMjJfQ0xTX0MyX0xVX1RZUEUo TVZQUDIyX0ZMT1dfRVRIRVIpOw0KPiAgDQo+ICAJLyogVXBkYXRlIFJTUyBzdGF0dXMgYWZ0ZXIg bWF0Y2hpbmcgdGhpcyBlbnRyeSAqLw0KPiAgCWMyLmFjdCA9IE1WUFAyMl9DTFNfQzJfQUNUX1JT U19FTihNVlBQMjJfQzJfVVBEX0xPQ0spOw0KPiBAQCAtOTQ0LDYgKzEwMTAsMTggQEAgdm9pZCBt dnBwMjJfcG9ydF9yc3NfZGlzYWJsZShzdHJ1Y3QgbXZwcDJfcG9ydA0KPiAqcG9ydCkNCj4gIAlt dnBwMl9yc3NfcG9ydF9jMl9kaXNhYmxlKHBvcnQpOw0KPiAgfQ0KPiAgDQo+ICtzdGF0aWMgdm9p ZCBtdnBwMjJfcG9ydF9jMl9sb29rdXBfZGlzYWJsZShzdHJ1Y3QgbXZwcDJfcG9ydCAqcG9ydCwN Cj4gaW50IGVudHJ5KQ0KPiArew0KPiArCXN0cnVjdCBtdnBwMl9jbHNfYzJfZW50cnkgYzI7DQo+ ICsNCj4gKwltdnBwMl9jbHNfYzJfcmVhZChwb3J0LT5wcml2LCBlbnRyeSwgJmMyKTsNCj4gKw0K PiArCS8qIENsZWFyIHRoZSBwb3J0IG1hcCBzbyB0aGF0IHRoZSBlbnRyeSBkb2Vzbid0IG1hdGNo IGFueW1vcmUNCj4gKi8NCj4gKwljMi50Y2FtWzRdICY9IH4oTVZQUDIyX0NMU19DMl9QT1JUX0lE KEJJVChwb3J0LT5pZCkpKTsNCj4gKw0KPiArCW12cHAyX2Nsc19jMl93cml0ZShwb3J0LT5wcml2 LCAmYzIpOw0KPiArfQ0KPiArDQo+ICAvKiBTZXQgQ1BVIHF1ZXVlIG51bWJlciBmb3Igb3ZlcnNp emUgcGFja2V0cyAqLw0KPiAgdm9pZCBtdnBwMl9jbHNfb3ZlcnNpemVfcnhxX3NldChzdHJ1Y3Qg bXZwcDJfcG9ydCAqcG9ydCkNCj4gIHsNCj4gQEAgLTk2MCw2ICsxMDM4LDM4MiBAQCB2b2lkIG12 cHAyX2Nsc19vdmVyc2l6ZV9yeHFfc2V0KHN0cnVjdA0KPiBtdnBwMl9wb3J0ICpwb3J0KQ0KPiAg CW12cHAyX3dyaXRlKHBvcnQtPnByaXYsIE1WUFAyX0NMU19TV0ZXRF9QQ1RSTF9SRUcsIHZhbCk7 DQo+ICB9DQo+ICANCj4gK3N0YXRpYyBpbnQgbXZwcDJfcG9ydF9jMl90Y2FtX3J1bGVfYWRkKHN0 cnVjdCBtdnBwMl9wb3J0ICpwb3J0LA0KPiArCQkJCSAgICAgICBzdHJ1Y3QgbXZwcDJfcmZzX3J1 bGUgKnJ1bGUpDQo+ICt7DQo+ICsJc3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5ICphY3Q7DQo+ICsJ c3RydWN0IG12cHAyX2Nsc19jMl9lbnRyeSBjMjsNCj4gKwl1OCBxaCwgcWwsIHBtYXA7DQo+ICsN Cj4gKwltZW1zZXQoJmMyLCAwLCBzaXplb2YoYzIpKTsNCj4gKw0KPiArCWMyLmluZGV4ID0gbXZw cDJfY2xzX2MyX3BvcnRfZmxvd19pbmRleChwb3J0LCBydWxlLT5sdV90eXBlLA0KPiBydWxlLT5s b2MpOw0KPiArCWlmIChjMi5pbmRleCA8IDApDQo+ICsJCXJldHVybiAtRUlOVkFMOw0KPiArDQo+ ICsJYWN0ID0gJnJ1bGUtPmZsb3ctPmFjdGlvbi5lbnRyaWVzWzBdOw0KPiArDQo+ICsJcnVsZS0+ YzJfaW5kZXggPSBjMi5pbmRleDsNCj4gKw0KPiArCWMyLnRjYW1bMF0gPSAocnVsZS0+YzJfdGNh bSAmIDB4ZmZmZikgfA0KPiArCQkgICAgICgocnVsZS0+YzJfdGNhbV9tYXNrICYgMHhmZmZmKSA8 PCAxNik7DQo+ICsJYzIudGNhbVsxXSA9ICgocnVsZS0+YzJfdGNhbSA+PiAxNikgJiAweGZmZmYp IHwNCj4gKwkJICAgICAoKChydWxlLT5jMl90Y2FtX21hc2sgPj4gMTYpICYgMHhmZmZmKSA8PCAx Nik7DQo+ICsJYzIudGNhbVsyXSA9ICgocnVsZS0+YzJfdGNhbSA+PiAzMikgJiAweGZmZmYpIHwN Cj4gKwkJICAgICAoKChydWxlLT5jMl90Y2FtX21hc2sgPj4gMzIpICYgMHhmZmZmKSA8PCAxNik7 DQo+ICsJYzIudGNhbVszXSA9ICgocnVsZS0+YzJfdGNhbSA+PiA0OCkgJiAweGZmZmYpIHwNCj4g KwkJICAgICAoKChydWxlLT5jMl90Y2FtX21hc2sgPj4gNDgpICYgMHhmZmZmKSA8PCAxNik7DQo+ ICsNCj4gKwlwbWFwID0gQklUKHBvcnQtPmlkKTsNCj4gKwljMi50Y2FtWzRdID0gTVZQUDIyX0NM U19DMl9QT1JUX0lEKHBtYXApOw0KPiArCWMyLnRjYW1bNF0gfD0NCj4gTVZQUDIyX0NMU19DMl9U Q0FNX0VOKE1WUFAyMl9DTFNfQzJfUE9SVF9JRChwbWFwKSk7DQo+ICsNCj4gKwkvKiBNYXRjaCBv biBMb29rdXAgVHlwZSAqLw0KPiArCWMyLnRjYW1bNF0gfD0NCj4gTVZQUDIyX0NMU19DMl9UQ0FN X0VOKE1WUFAyMl9DTFNfQzJfTFVfVFlQRShNVlBQMl9DTFNfTFVfVFlQRV9NQVNLKSk7DQo+ICsJ YzIudGNhbVs0XSB8PSBNVlBQMjJfQ0xTX0MyX0xVX1RZUEUocnVsZS0+bHVfdHlwZSk7DQo+ICsN Cj4gKwkvKiBNYXJrIHBhY2tldCBhcyAiZm9yd2FyZGVkIHRvIHNvZnR3YXJlIiwgbmVlZGVkIGZv ciBSU1MgKi8NCj4gKwljMi5hY3QgfD0gTVZQUDIyX0NMU19DMl9BQ1RfRldEKE1WUFAyMl9DMl9G V0RfU1dfTE9DSyk7DQo+ICsNCj4gKwljMi5hY3QgfD0gTVZQUDIyX0NMU19DMl9BQ1RfUUhJR0go TVZQUDIyX0MyX1VQRF9MT0NLKSB8DQo+ICsJCSAgIE1WUFAyMl9DTFNfQzJfQUNUX1FMT1coTVZQ UDIyX0MyX1VQRF9MT0NLKTsNCj4gKw0KPiArCXFoID0gKChhY3QtPnF1ZXVlLmluZGV4ICsgcG9y dC0+Zmlyc3RfcnhxKSA+PiAzKSAmDQo+IE1WUFAyMl9DTFNfQzJfQVRUUjBfUUhJR0hfTUFTSzsN Cj4gKwlxbCA9IChhY3QtPnF1ZXVlLmluZGV4ICsgcG9ydC0+Zmlyc3RfcnhxKSAmDQo+IE1WUFAy Ml9DTFNfQzJfQVRUUjBfUUxPV19NQVNLOw0KPiArDQo+ICsJYzIuYXR0clswXSA9IE1WUFAyMl9D TFNfQzJfQVRUUjBfUUhJR0gocWgpIHwNCj4gKwkJICAgICAgTVZQUDIyX0NMU19DMl9BVFRSMF9R TE9XKHFsKTsNCj4gKw0KPiArCWMyLnZhbGlkID0gdHJ1ZTsNCj4gKw0KPiArCW12cHAyX2Nsc19j Ml93cml0ZShwb3J0LT5wcml2LCAmYzIpOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyBpbnQgbXZwcDJfcG9ydF9jMl9yZnNfcnVsZV9pbnNlcnQoc3RydWN0IG12cHAy X3BvcnQgKnBvcnQsDQo+ICsJCQkJCSBzdHJ1Y3QgbXZwcDJfcmZzX3J1bGUgKnJ1bGUpDQo+ICt7 DQo+ICsJcmV0dXJuIG12cHAyX3BvcnRfYzJfdGNhbV9ydWxlX2FkZChwb3J0LCBydWxlKTsNCj4g K30NCj4gKw0KPiArc3RhdGljIGludCBtdnBwMl9wb3J0X2Zsb3dfdGFibGVfZmluZChzdHJ1Y3Qg bXZwcDIgKnByaXYsIGludA0KPiBmbG93X2lkLA0KPiArCQkJCSAgICAgIHU4IGVuZ2luZSwgdTgg bHVfdHlwZSwgdTE2DQo+IGhla19maWVsZHMpDQo+ICt7DQo+ICsJc3RydWN0IG12cHAyX2Nsc19m bG93X2VudHJ5IGZlOw0KPiArCXUxNiBmbG93X2hla19maWVsZHM7DQo+ICsJaW50IGksIGZsb3df ZW5naW5lOw0KPiArCXU4IGZsb3dfbHVfdHlwZTsNCj4gKw0KPiArCS8qIEl0ZXJhdGUgb24gYWxs IGZsb3cgdGFibGUgZW50cmllcyBmb3IgdGhpcyBJRCAqLw0KPiArCWZvciAoaSA9IE1WUFAyX0NM U19GTFRfRklSU1QoZmxvd19pZCk7DQo+ICsJICAgICBpIDwgTVZQUDJfQ0xTX0ZMVF9MQVNUKGZs b3dfaWQpOyBpKyspIHsNCj4gKwkJbXZwcDJfY2xzX2Zsb3dfcmVhZChwcml2LCBpLCAmZmUpOw0K PiArDQo+ICsJCWZsb3dfaGVrX2ZpZWxkcyA9IG12cHAyX2Zsb3dfZ2V0X2hla19maWVsZHMoJmZl KTsNCj4gKwkJaWYgKGZsb3dfaGVrX2ZpZWxkcyAhPSBoZWtfZmllbGRzKQ0KPiArCQkJY29udGlu dWU7DQo+ICsNCj4gKwkJZmxvd19lbmdpbmUgPSBtdnBwMl9jbHNfZmxvd19lbmdfZ2V0KCZmZSk7 DQo+ICsJCWlmIChmbG93X2VuZ2luZSAhPSBlbmdpbmUpDQo+ICsJCQljb250aW51ZTsNCj4gKw0K PiArCQlmbG93X2x1X3R5cGUgPSBtdnBwMl9jbHNfZmxvd19sdV90eXBlX2dldCgmZmUpOw0KPiAr CQlpZiAoZmxvd19sdV90eXBlICE9IGx1X3R5cGUpDQo+ICsJCQljb250aW51ZTsNCj4gKw0KPiAr CQlyZXR1cm4gaTsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gLTE7DQo+ICt9DQo+ICsNCj4gK3N0 YXRpYyBpbnQgbXZwcDJfcG9ydF9mbG93X3RhYmxlX2ZpbmRfZnJlZShzdHJ1Y3QgbXZwcDIgKnBy aXYsIGludA0KPiBmbG93X2lkKQ0KPiArew0KPiArCXN0cnVjdCBtdnBwMl9jbHNfZmxvd19lbnRy eSBmZTsNCj4gKwl1OCBwbWFwOw0KPiArCWludCBpOw0KPiArDQo+ICsJbWVtc2V0KCZmZSwgMCwg c2l6ZW9mKGZlKSk7DQo+ICsJZm9yIChpID0gMDsgaSA8IE1WUFAyX05fUkZTX0VOVFJJRVNfUEVS X0ZMT1c7IGkrKykgew0KPiArCQltdnBwMl9jbHNfZmxvd19yZWFkKHByaXYsIE1WUFAyX0NMU19G TFRfQzJfUkZTKGZsb3dfaWQsDQo+IGkpLA0KPiArCQkJCSAgICAmZmUpOw0KPiArDQo+ICsJCS8q IGdldCBwbWFwICovDQo+ICsJCXBtYXAgPSBtdnBwMl9jbHNfZmxvd19wbWFwX2dldCgmZmUpOw0K PiArCQlpZiAoIXBtYXApDQo+ICsJCQlyZXR1cm4gTVZQUDJfQ0xTX0ZMVF9DMl9SRlMoZmxvd19p ZCwgaSk7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIC0xOw0KPiArfQ0KPiArDQo+ICsvKioNCj4g KyAqIEl0J3MgcG9zc2libGUgdGhhdCBtdWx0aXBsZSBkaWZmZXJlbnQgcmZzIHJ1bGVzIHVzZSB0 aGUgc2FtZQ0KPiBmbG93X3RhYmxlDQo+ICsgKiBlbnRyeSwgaWYgdGhlIHJ1bGVzIHVzZSB0aGUg c2FtZSBrZXkgYW5kIHRoZSBzYW1lIGVuZ2luZS4gSW4gdGhhdA0KPiBjYXNlLA0KPiArICogd2Ug bXVzdCBtYWtlIHN1cmUgbm90IHRvIGRlbGV0ZSB0aGlzIGZsb3dfdGFibGUgZW50cnkgd2hlbg0K PiByZW1vdmluZyB0aGUNCj4gKyAqIHJ1bGUsIHVubGVzcyBpdCdzIHRoZSBsYXN0IHJ1bGUgdGhh dCB1c2VzIHRoaXMgZW50cnkuDQo+ICsgKi8NCj4gK3N0YXRpYyBib29sIG12cHAyX3BvcnRfZmx0 X2hhc19zaWJsaW5ncyhzdHJ1Y3QgbXZwcDJfcG9ydCAqcG9ydCwNCj4gKwkJCQkJc3RydWN0IG12 cHAyX3Jmc19ydWxlICpydWxlKQ0KPiArew0KPiArCXN0cnVjdCBtdnBwMl9ldGh0b29sX2ZzICpl ZnM7DQo+ICsJaW50IGk7DQo+ICsNCj4gKwlmb3IgKGkgPSAwOyBpIDwgTVZQUDJfTl9SRlNfUlVM RVM7IGkrKykgew0KPiArCQllZnMgPSBwb3J0LT5yZnNfcnVsZXNbaV07DQo+ICsJCWlmICghZWZz KQ0KPiArCQkJY29udGludWU7DQo+ICsJCS8qIFNraXAgdGhlIGVudHJ5IHdlIGFyZSB0cnlpbmcg dG8gZmluZCB0aGUgc2libGluZyBvZg0KPiAqLw0KPiArCQlpZiAoZWZzLT5ydWxlLmxvYyA9PSBy dWxlLT5sb2MpDQo+ICsJCQljb250aW51ZTsNCj4gKwkJaWYgKGVmcy0+cnVsZS5mbHRfaW5kZXgg PT0gcnVsZS0+Zmx0X2luZGV4KQ0KPiArCQkJcmV0dXJuIHRydWU7DQo+ICsJfQ0KPiArDQo+ICsJ cmV0dXJuIGZhbHNlOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IG12cHAyX3BvcnRfY2xzX3Jm c19ydWxlX3JlbW92ZShzdHJ1Y3QgbXZwcDJfcG9ydCAqcG9ydCwNCj4gKwkJCQkJICBzdHJ1Y3Qg bXZwcDJfcmZzX3J1bGUgKnJ1bGUpDQo+ICt7DQo+ICsJc3RydWN0IG12cHAyX2Nsc19mbG93X2Vu dHJ5IGZlOw0KPiArDQo+ICsJaWYgKHJ1bGUtPmZsdF9pbmRleCA+PSAwICYmDQo+ICsJICAgICFt dnBwMl9wb3J0X2ZsdF9oYXNfc2libGluZ3MocG9ydCwgcnVsZSkpIHsNCj4gKwkJbXZwcDJfY2xz X2Zsb3dfcmVhZChwb3J0LT5wcml2LCBydWxlLT5mbHRfaW5kZXgsICZmZSk7DQo+ICsJCW12cHAy X2Nsc19mbG93X3BvcnRfcmVtb3ZlKCZmZSwgQklUKHBvcnQtPmlkKSk7DQo+ICsJCW12cHAyX2Ns c19mbG93X3dyaXRlKHBvcnQtPnByaXYsICZmZSk7DQo+ICsJfQ0KPiArDQo+ICsJaWYgKHJ1bGUt PmMyX2luZGV4ID49IDApDQo+ICsJCW12cHAyMl9wb3J0X2MyX2xvb2t1cF9kaXNhYmxlKHBvcnQs IHJ1bGUtPmMyX2luZGV4KTsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0 aWMgaW50IG12cHAyX3BvcnRfZmx0X3Jmc19ydWxlX2luc2VydChzdHJ1Y3QgbXZwcDJfcG9ydCAq cG9ydCwNCj4gKwkJCQkJICBzdHJ1Y3QgbXZwcDJfcmZzX3J1bGUgKnJ1bGUpDQo+ICt7DQo+ICsJ Y29uc3Qgc3RydWN0IG12cHAyX2Nsc19mbG93ICpmbG93Ow0KPiArCXN0cnVjdCBtdnBwMiAqcHJp diA9IHBvcnQtPnByaXY7DQo+ICsJc3RydWN0IG12cHAyX2Nsc19mbG93X2VudHJ5IGZlOw0KPiAr CWludCBpbmRleCwgcmV0LCBpOw0KPiArDQo+ICsJaWYgKHJ1bGUtPmVuZ2luZSAhPSBNVlBQMjJf Q0xTX0VOR0lORV9DMikNCj4gKwkJcmV0dXJuIC1FT1BOT1RTVVBQOw0KPiArDQo+ICsJcmV0ID0g bXZwcDJfcG9ydF9jMl9yZnNfcnVsZV9pbnNlcnQocG9ydCwgcnVsZSk7DQo+ICsJaWYgKHJldCkN Cj4gKwkJcmV0dXJuIHJldDsNCj4gKw0KPiArCWZvcl9lYWNoX2Nsc19mbG93X2lkX3dpdGhfdHlw ZShpLCBydWxlLT5mbG93X3R5cGUpIHsNCj4gKwkJZmxvdyA9IG12cHAyX2Nsc19mbG93X2dldChp KTsNCj4gKwkJaWYgKCFmbG93KQ0KPiArCQkJcmV0dXJuIDA7DQo+ICsNCj4gKwkJLyogRG9uJ3Qg cGVyZm9ybSBzdGVlcmluZyBvbiBIRUsgZmllbGRzIHRoYXQgYXJlbid0DQo+IHJlbGV2YW50DQo+ ICsJCSAqIGZvciB0aGlzIGZsb3csIGUuZy4gc3RlZXJpbmcgb24gVkxBTiB0YWcgd2hlbiBpbiBh bg0KPiB1bnRhZ2dlZA0KPiArCQkgKiBmbG93Lg0KPiArCQkgKi8NCj4gKwkJaWYgKChydWxlLT5o ZWtfZmllbGRzIHwgZmxvdy0+c3VwcG9ydGVkX2hhc2hfb3B0cykgIT0NCj4gKwkJICAgIGZsb3ct PnN1cHBvcnRlZF9oYXNoX29wdHMpDQo+ICsJCQlyZXR1cm4gMDsNCj4gKw0KPiArCQlpbmRleCA9 IG12cHAyX3BvcnRfZmxvd190YWJsZV9maW5kKHByaXYsIGZsb3ctPmZsb3dfaWQsDQo+ICsJCQkJ CQkgICBydWxlLT5lbmdpbmUsIHJ1bGUtDQo+ID5sdV90eXBlLA0KPiArCQkJCQkJICAgcnVsZS0+ aGVrX2ZpZWxkcyk7DQo+ICsNCj4gKwkJLyogSWYgdGhlcmUgYWxyZWFkeSBpcyBhIGZsb3cgZW50 cnkgdGhhdCBtYXRjaGVzIG91cg0KPiArCQkgKiBwYXJhbWV0ZXJzDQo+ICsJCSAqLw0KPiArCQlp ZiAoaW5kZXggPj0gMCkgew0KPiArCQkJcnVsZS0+Zmx0X2luZGV4ID0gaW5kZXg7DQo+ICsJCQlt dnBwMl9jbHNfZmxvd19yZWFkKHByaXYsIGluZGV4LCAmZmUpOw0KPiArCQkJbXZwcDJfY2xzX2Zs b3dfcG9ydF9hZGQoJmZlLCBCSVQocG9ydC0+aWQpKTsNCj4gKwkJCW12cHAyX2Nsc19mbG93X3dy aXRlKHByaXYsICZmZSk7DQo+ICsJCQljb250aW51ZTsNCj4gKwkJfSBlbHNlIHsNCj4gKwkJCWlu ZGV4ID0gbXZwcDJfcG9ydF9mbG93X3RhYmxlX2ZpbmRfZnJlZShwcml2LA0KPiArCQkJCQkJCQlm bG93LQ0KPiA+Zmxvd19pZCk7DQo+ICsJCQlpZiAoaW5kZXggPCAwKQ0KPiArCQkJCXJldHVybiAt RU9QTk9UU1VQUDsNCj4gKwkJfQ0KPiArDQo+ICsJCS8qIENyZWF0ZSBlbnRyeSAqLw0KPiArCQly dWxlLT5mbHRfaW5kZXggPSBpbmRleDsNCj4gKwkJbXZwcDJfY2xzX2Zsb3dfcmVhZChwcml2LCBp bmRleCwgJmZlKTsNCj4gKw0KPiArCQltdnBwMl9jbHNfZmxvd19lbmdfc2V0KCZmZSwgcnVsZS0+ ZW5naW5lKTsNCj4gKwkJbXZwcDJfY2xzX2Zsb3dfcG9ydF9pZF9zZWwoJmZlLCB0cnVlKTsNCj4g KwkJbXZwcDJfZmxvd19zZXRfaGVrX2ZpZWxkcygmZmUsIHJ1bGUtPmhla19maWVsZHMpOw0KPiAr CQltdnBwMl9jbHNfZmxvd19sdV90eXBlX3NldCgmZmUsIHJ1bGUtPmx1X3R5cGUpOw0KPiArCQlt dnBwMl9jbHNfZmxvd19wb3J0X2FkZCgmZmUsIDB4Zik7DQo+ICsNCj4gKwkJbXZwcDJfY2xzX2Zs b3dfd3JpdGUocHJpdiwgJmZlKTsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4g Kw0KPiArc3RhdGljIGludCBtdnBwMl9jbHNfYzJfYnVpbGRfbWF0Y2goc3RydWN0IG12cHAyX3Jm c19ydWxlICpydWxlKQ0KPiArew0KPiArCXN0cnVjdCBmbG93X3J1bGUgKmZsb3cgPSBydWxlLT5m bG93Ow0KPiArCXN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqYWN0Ow0KPiArCWludCBvZmZzID0g NjQ7DQo+ICsNCj4gKwlhY3QgPSAmZmxvdy0+YWN0aW9uLmVudHJpZXNbMF07DQo+ICsNCj4gKwlp ZiAoZmxvd19ydWxlX21hdGNoX2tleShmbG93LCBGTE9XX0RJU1NFQ1RPUl9LRVlfUE9SVFMpKSB7 DQo+ICsJCXN0cnVjdCBmbG93X21hdGNoX3BvcnRzIG1hdGNoOw0KPiArDQo+ICsJCWZsb3dfcnVs ZV9tYXRjaF9wb3J0cyhmbG93LCAmbWF0Y2gpOw0KPiArCQlpZiAobWF0Y2gubWFzay0+c3JjKSB7 DQo+ICsJCQlydWxlLT5oZWtfZmllbGRzIHw9IE1WUFAyMl9DTFNfSEVLX09QVF9MNFNJUDsNCj4g KwkJCW9mZnMgLT0NCj4gbXZwcDJfY2xzX2hla19maWVsZF9zaXplKE1WUFAyMl9DTFNfSEVLX09Q VF9MNFNJUCk7DQo+ICsNCj4gKwkJCXJ1bGUtPmMyX3RjYW0gfD0gKCh1NjQpbnRvaHMobWF0Y2gu a2V5LT5zcmMpKQ0KPiA8PCBvZmZzOw0KPiArCQkJcnVsZS0+YzJfdGNhbV9tYXNrIHw9ICgodTY0 KW50b2hzKG1hdGNoLm1hc2stDQo+ID5zcmMpKSA8PCBvZmZzOw0KPiArCQl9DQo+ICsNCj4gKwkJ aWYgKG1hdGNoLm1hc2stPmRzdCkgew0KPiArCQkJcnVsZS0+aGVrX2ZpZWxkcyB8PSBNVlBQMjJf Q0xTX0hFS19PUFRfTDRESVA7DQo+ICsJCQlvZmZzIC09DQo+IG12cHAyX2Nsc19oZWtfZmllbGRf c2l6ZShNVlBQMjJfQ0xTX0hFS19PUFRfTDRESVApOw0KPiArDQo+ICsJCQlydWxlLT5jMl90Y2Ft IHw9ICgodTY0KW50b2hzKG1hdGNoLmtleS0+ZHN0KSkNCj4gPDwgb2ZmczsNCj4gKwkJCXJ1bGUt PmMyX3RjYW1fbWFzayB8PSAoKHU2NCludG9ocyhtYXRjaC5tYXNrLQ0KPiA+ZHN0KSkgPDwgb2Zm czsNCj4gKwkJfQ0KPiArCX0NCj4gKw0KPiArCWlmIChod2VpZ2h0MTYocnVsZS0+aGVrX2ZpZWxk cykgPiBNVlBQMl9GTE9XX05fRklFTERTKQ0KPiArCQlyZXR1cm4gLUVPUE5PVFNVUFA7DQo+ICsN Cj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBtdnBwMl9jbHNfcmZzX3Bh cnNlX3J1bGUoc3RydWN0IG12cHAyX3Jmc19ydWxlICpydWxlKQ0KPiArew0KPiArCXN0cnVjdCBm bG93X3J1bGUgKmZsb3cgPSBydWxlLT5mbG93Ow0KPiArCXN0cnVjdCBmbG93X2FjdGlvbl9lbnRy eSAqYWN0Ow0KPiArDQo+ICsJYWN0ID0gJmZsb3ctPmFjdGlvbi5lbnRyaWVzWzBdOw0KPiArCWlm IChhY3QtPmlkICE9IEZMT1dfQUNUSU9OX1FVRVVFKQ0KPiArCQlyZXR1cm4gLUVPUE5PVFNVUFA7 DQo+ICsNCj4gKwkvKiBGb3Igbm93LCBvbmx5IHVzZSB0aGUgQzIgZW5naW5lIHdoaWNoIGhhcyBh IEhFSyBzaXplIGxpbWl0ZWQNCj4gdG8gNjQNCj4gKwkgKiBiaXRzIGZvciBUQ0FNIG1hdGNoaW5n Lg0KPiArCSAqLw0KPiArCXJ1bGUtPmVuZ2luZSA9IE1WUFAyMl9DTFNfRU5HSU5FX0MyOw0KPiAr DQo+ICsJaWYgKG12cHAyX2Nsc19jMl9idWlsZF9tYXRjaChydWxlKSkNCj4gKwkJcmV0dXJuIC1F SU5WQUw7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiAraW50IG12cHAyX2V0aHRv b2xfY2xzX3J1bGVfZ2V0KHN0cnVjdCBtdnBwMl9wb3J0ICpwb3J0LA0KPiArCQkJICAgICAgIHN0 cnVjdCBldGh0b29sX3J4bmZjICpyeG5mYykNCj4gK3sNCj4gKwlzdHJ1Y3QgbXZwcDJfZXRodG9v bF9mcyAqZWZzOw0KPiArDQo+ICsJaWYgKHJ4bmZjLT5mcy5sb2NhdGlvbiA+PSBNVlBQMl9OX1JG U19SVUxFUykNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsNCj4gKwllZnMgPSBwb3J0LT5yZnNf cnVsZXNbcnhuZmMtPmZzLmxvY2F0aW9uXTsNCj4gKwlpZiAoIWVmcykNCj4gKwkJcmV0dXJuIC1F Tk9FTlQ7DQo+ICsNCj4gKwltZW1jcHkocnhuZmMsICZlZnMtPnJ4bmZjLCBzaXplb2YoZWZzLT5y eG5mYykpOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK2ludCBtdnBwMl9ldGh0 b29sX2Nsc19ydWxlX2lucyhzdHJ1Y3QgbXZwcDJfcG9ydCAqcG9ydCwNCj4gKwkJCSAgICAgICBz dHJ1Y3QgZXRodG9vbF9yeG5mYyAqaW5mbykNCj4gK3sNCj4gKwlzdHJ1Y3QgZXRodG9vbF9yeF9m bG93X3NwZWNfaW5wdXQgaW5wdXQgPSB7fTsNCj4gKwlzdHJ1Y3QgZXRodG9vbF9yeF9mbG93X3J1 bGUgKmV0aHRvb2xfcnVsZTsNCj4gKwlzdHJ1Y3QgbXZwcDJfZXRodG9vbF9mcyAqZWZzLCAqb2xk X2VmczsNCj4gKwlpbnQgcmV0ID0gMCwgaW5kZXg7DQo+ICsNCj4gKwlpZiAoaW5mby0+ZnMubG9j YXRpb24gPj0gTVZQUDIyX0NMU19DMl9QT1JUX05fUkZTIHx8DQo+ICsJICAgIGluZm8tPmZzLmxv Y2F0aW9uIDwgMCkNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsNCj4gKwllZnMgPSBremFsbG9j KHNpemVvZigqZWZzKSwgR0ZQX0tFUk5FTCk7DQo+ICsJaWYgKCFlZnMpDQo+ICsJCXJldHVybiAt RU5PTUVNOw0KPiArDQo+ICsJaW5wdXQuZnMgPSAmaW5mby0+ZnM7DQo+ICsNCj4gKwlldGh0b29s X3J1bGUgPSBldGh0b29sX3J4X2Zsb3dfcnVsZV9jcmVhdGUoJmlucHV0KTsNCj4gKwlpZiAoSVNf RVJSKGV0aHRvb2xfcnVsZSkpIHsNCj4gKwkJcmV0ID0gUFRSX0VSUihldGh0b29sX3J1bGUpOw0K PiArCQlnb3RvIGNsZWFuX3J1bGU7DQo+ICsJfQ0KPiArDQo+ICsJZWZzLT5ydWxlLmZsb3cgPSBl dGh0b29sX3J1bGUtPnJ1bGU7DQo+ICsJZWZzLT5ydWxlLmZsb3dfdHlwZSA9IGluZm8tPmZzLmZs b3dfdHlwZSAmIH4oRkxPV19FWFQgfA0KPiBGTE9XX01BQ19FWFQgfA0KPiArCQkJCQkJICAgICBG TE9XX1JTUyk7DQo+ICsJZWZzLT5ydWxlLmx1X3R5cGUgPSBtdnBwMl9jbHNfYzJfcG9ydF9mbG93 X2dldF90eXBlKGVmcy0NCj4gPnJ1bGUuZmxvd190eXBlKTsNCj4gKw0KPiArCXJldCA9IG12cHAy X2Nsc19yZnNfcGFyc2VfcnVsZSgmZWZzLT5ydWxlKTsNCj4gKwlpZiAocmV0KQ0KPiArCQlnb3Rv IGNsZWFuX2V0aF9ydWxlOw0KPiArDQo+ICsJZWZzLT5ydWxlLmxvYyA9IGluZm8tPmZzLmxvY2F0 aW9uOw0KPiArDQo+ICsJaW5kZXggPSAoZWZzLT5ydWxlLmx1X3R5cGUgLSAxKSAqIE1WUFAyMl9D TFNfQzJfUE9SVF9OX0ZMT1dTICsNCj4gKwkJZWZzLT5ydWxlLmxvYzsNCj4gKw0KPiArCS8qIFJl cGxhY2UgYW4gYWxyZWFkeSBleGlzdGluZyBydWxlICovDQo+ICsJaWYgKHBvcnQtPnJmc19ydWxl c1tpbmRleF0pIHsNCj4gKwkJb2xkX2VmcyA9IHBvcnQtPnJmc19ydWxlc1tpbmRleF07DQo+ICsJ CXJldCA9IG12cHAyX3BvcnRfY2xzX3Jmc19ydWxlX3JlbW92ZShwb3J0LCAmb2xkX2Vmcy0NCj4g PnJ1bGUpOw0KPiArCQlpZiAocmV0KQ0KPiArCQkJZ290byBjbGVhbl9ldGhfcnVsZTsNCj4gKwkJ a2ZyZWUob2xkX2Vmcyk7DQo+ICsJfQ0KPiArDQo+ICsJcmV0ID0gbXZwcDJfcG9ydF9mbHRfcmZz X3J1bGVfaW5zZXJ0KHBvcnQsICZlZnMtPnJ1bGUpOw0KPiArCWlmIChyZXQpDQo+ICsJCWdvdG8g Y2xlYW5fZXRoX3J1bGU7DQo+ICsNCj4gKwlpbmZvLT5mcy5sb2NhdGlvbiA9IGluZGV4Ow0KPiAr DQo+ICsJbWVtY3B5KCZlZnMtPnJ4bmZjLCBpbmZvLCBzaXplb2YoKmluZm8pKTsNCj4gKwlwb3J0 LT5yZnNfcnVsZXNbaW5kZXhdID0gZWZzOw0KPiArCXBvcnQtPm5fcmZzX3J1bGVzKys7DQo+ICsN Cj4gK2NsZWFuX2V0aF9ydWxlOg0KPiArCWV0aHRvb2xfcnhfZmxvd19ydWxlX2Rlc3Ryb3koZXRo dG9vbF9ydWxlKTsNCj4gK2NsZWFuX3J1bGU6DQo+ICsJa2ZyZWUoZWZzKTsNCj4gKwlyZXR1cm4g cmV0Ow0KPiArfQ0KPiArDQo+ICtpbnQgbXZwcDJfZXRodG9vbF9jbHNfcnVsZV9kZWwoc3RydWN0 IG12cHAyX3BvcnQgKnBvcnQsDQo+ICsJCQkgICAgICAgc3RydWN0IGV0aHRvb2xfcnhuZmMgKmlu Zm8pDQo+ICt7DQo+ICsJc3RydWN0IG12cHAyX2V0aHRvb2xfZnMgKmVmczsNCj4gKwlpbnQgcmV0 Ow0KPiArDQo+ICsJZWZzID0gcG9ydC0+cmZzX3J1bGVzW2luZm8tPmZzLmxvY2F0aW9uXTsNCj4g KwlpZiAoIWVmcykNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsNCj4gKwkvKiBSZW1vdmUgdGhl IHJ1bGUgZnJvbSB0aGUgZW5naW5lcy4gKi8NCj4gKwlyZXQgPSBtdnBwMl9wb3J0X2Nsc19yZnNf cnVsZV9yZW1vdmUocG9ydCwgJmVmcy0+cnVsZSk7DQo+ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJu IHJldDsNCj4gKw0KPiArCXBvcnQtPm5fcmZzX3J1bGVzLS07DQo+ICsJcG9ydC0+cmZzX3J1bGVz W2luZm8tPmZzLmxvY2F0aW9uXSA9IE5VTEw7DQo+ICsJa2ZyZWUoZWZzKTsNCj4gKw0KPiArCXJl dHVybiAwOw0KPiArfQ0KPiArDQo+ICBzdGF0aWMgaW5saW5lIHUzMiBtdnBwMjJfcnhmaF9pbmRp cihzdHJ1Y3QgbXZwcDJfcG9ydCAqcG9ydCwgdTMyDQo+IHJ4cSkNCj4gIHsNCj4gIAlpbnQgbnJ4 cXMsIGNwdSwgY3B1cyA9IG51bV9wb3NzaWJsZV9jcHVzKCk7DQo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyX2Nscy5oDQo+IGIvZHJpdmVycy9u ZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9tdnBwMl9jbHMuaA0KPiBpbmRleCA5NjMwNGZmYzVk NDkuLjFkOTFkNWQzYjBlMSAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFy dmVsbC9tdnBwMi9tdnBwMl9jbHMuaA0KPiArKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2 ZWxsL212cHAyL212cHAyX2Nscy5oDQo+IEBAIC0xMDcsMTUgKzEwNyw0MyBAQCBzdHJ1Y3QgbXZw cDJfY2xzX2MyX2VudHJ5IHsNCj4gIAl1OCB2YWxpZDsNCj4gIH07DQo+ICANCj4gK2VudW0gbXZw cDJfbHVfdHlwZSB7DQo+ICsJLyogTFUgVHlwZSAwIGlzIHRoZSBkZWZhdWx0IHZhbHVlLCBpdCBz aG91bGRuJ3QgYmUgdXNlZCwgdG8NCj4gYXZvaWQNCj4gKwkgKiBzcHVyaW91cyBtYXRjaGVzLg0K PiArCSAqLw0KPiArCU1WUFAyMl9GTE9XX1RDUDQgPSAxLA0KPiArCU1WUFAyMl9GTE9XX1RDUDYs DQo+ICsJTVZQUDIyX0ZMT1dfVURQNCwNCj4gKwlNVlBQMjJfRkxPV19VRFA2LA0KPiArCU1WUFAy Ml9GTE9XX0lQNCwNCj4gKwlNVlBQMjJfRkxPV19JUDYsDQo+ICsJTVZQUDIyX0ZMT1dfRVRIRVIs DQo+ICsJTVZQUDIyX0ZMT1dfTEFTVCA9IE1WUFAyMl9GTE9XX0VUSEVSLA0KPiArfTsNCj4gKw0K PiAgLyogQ2xhc3NpZmllciBDMiBlbmdpbmUgZW50cmllcyAqLw0KPiAgI2RlZmluZSBNVlBQMjJf Q0xTX0MyX05fRU5UUklFUwkJMjU2DQo+ICANCj4gIC8qIE51bWJlciBvZiBwZXItcG9ydCBkZWRp Y2F0ZWQgZW50cmllcyBpbiB0aGUgQzIgVENBTSAqLw0KPiAtI2RlZmluZSBNVlBQMjJfQ0xTX0My X1BPUlRfUkFOR0UJOA0KPiArI2RlZmluZSBNVlBQMjJfQ0xTX0MyX1BPUlRfRkxPV19SQU5HRQk4 DQo+ICsjZGVmaW5lIE1WUFAyMl9DTFNfQzJfUE9SVF9OX1JGUwlNVlBQMl9OX1JGU19FTlRSSUVT X1BFUl9GTE9XDQo+ICsNCj4gKy8qIFdlIGhhdmUgb25lIEMyIHJhbmdlIHBlciBzdXBwb3J0ZWQg ZmxvdyB0eXBlIDogaXA0LCBpNiwgdGNwNCwNCj4gdGNwNiwgdWRwNCwgdWRwNiAqLw0KPiArI2Rl ZmluZSBNVlBQMjJfQ0xTX0MyX1BPUlRfTl9GTE9XUwkoTVZQUDIyX0ZMT1dfTEFTVCkNCj4gKw0K PiArLyogRWFjaCBwb3J0IGhhcyBvZW4gcmFuZ2UgcGVyIGZsb3cgdHlwZSArIG9uZSBlbnRyeSBj b250cm9saW5nIHRoZQ0KPiBnbG9iYWwgUlNTDQo+ICsgKiBzZXR0aW5nIGFuZCB0aGUgZGVmYXVs dCByeCBxdWV1ZQ0KPiArICovDQo+ICsjZGVmaW5lIE1WUFAyMl9DTFNfQzJfUE9SVF9SQU5HRQko TVZQUDIyX0NMU19DMl9QT1JUX0ZMT1dfUkFOR0UNCj4gKiBcDQo+ICsJCQkJCSBNVlBQMjJfQ0xT X0MyX1BPUlRfTl9GTE9XUyArDQo+IDEpDQo+ICsNCj4gKyNkZWZpbmUgTVZQUDIyX0NMU19DMl9Q T1JUX0ZJUlNUKHApCSgocCkgKg0KPiBNVlBQMjJfQ0xTX0MyX1BPUlRfUkFOR0UpDQo+ICsjZGVm aW5lIE1WUFAyMl9DTFNfQzJfUlNTX0VOVFJZKHApCShNVlBQMjJfQ0xTX0MyX1BPUlRfRklSU1Qo KHApICsNCj4gMSkgLSAxKQ0KPiAgDQo+IC0jZGVmaW5lIE1WUFAyMl9DTFNfQzJfUE9SVF9GSVJT VChwKQkoTVZQUDIyX0NMU19DMl9OX0VOVFJJRVMgLSBcDQo+IC0JCQkJCSgocCkgKg0KPiBNVlBQ MjJfQ0xTX0MyX1BPUlRfUkFOR0UpKQ0KPiAtI2RlZmluZSBNVlBQMjJfQ0xTX0MyX1JTU19FTlRS WShwKQkoTVZQUDIyX0NMU19DMl9QT1JUX0ZJUlNUKHApIC0NCj4gMSkNCj4gKyNkZWZpbmUgTVZQ UDIyX0NMU19DMl9QT1JUX0ZMT1dfRklSU1QocCwgZikJKE1WUFAyMl9DTFNfQzJfUE9SVF9GSVIN Cj4gU1QocCkgKyBcDQo+ICsJCQkJCQkgKChmKSAtIDEpICoNCj4gTVZQUDIyX0NMU19DMl9QT1JU X0ZMT1dfUkFOR0UpDQo+ICsNCj4gKyNkZWZpbmUgTVZQUDIyX0NMU19DMl9SRlNfTE9DKHAsIGYs IGxvYykJKE1WUFAyMl9DTFNfQzJfUE9SVF9GTE8NCj4gV19GSVJTVChwLCBmKSArIChsb2MpKQ0K PiAgDQo+ICAvKiBQYWNrZXQgZmxvdyBJRCAqLw0KPiAgZW51bSBtdnBwMl9wcnNfZmxvdyB7DQo+ IEBAIC0xNDUsMTAgKzE3Myw2IEBAIGVudW0gbXZwcDJfcHJzX2Zsb3cgew0KPiAgCU1WUFAyX0ZM X0xBU1QsDQo+ICB9Ow0KPiAgDQo+IC1lbnVtIG12cHAyX2Nsc19sdV90eXBlIHsNCj4gLQlNVlBQ Ml9DTFNfTFVfQUxMID0gMCwNCj4gLX07DQo+IC0NCj4gIC8qIExVIFR5cGUgZGVmaW5lZCBmb3Ig YWxsIGVuZ2luZXMsIGFuZCBzcGVjaWZpZWQgaW4gdGhlIGZsb3cgdGFibGUNCj4gKi8NCj4gICNk ZWZpbmUgTVZQUDJfQ0xTX0xVX1RZUEVfTUFTSwkJCTB4M2YNCj4gIA0KPiBAQCAtMTY4LDExICsx OTIsMTIgQEAgc3RydWN0IG12cHAyX2Nsc19mbG93IHsNCj4gIAlzdHJ1Y3QgbXZwcDJfcHJzX3Jl c3VsdF9pbmZvIHByc19yaTsNCj4gIH07DQo+ICANCj4gLSNkZWZpbmUgTVZQUDJfQ0xTX0ZMVF9F TlRSSUVTX1BFUl9GTE9XCQkoTVZQUDJfTUFYX1BPUlQNCj4gUyArIDEpDQo+ICsjZGVmaW5lIE1W UFAyX0NMU19GTFRfRU5UUklFU19QRVJfRkxPVwkJKE1WUFAyX01BWF9QT1JUDQo+IFMgKyAxICsg TVZQUDJfTl9SRlNfRU5UUklFU19QRVJfRkxPVykNCj4gICNkZWZpbmUgTVZQUDJfQ0xTX0ZMVF9G SVJTVChpZCkJCQkoKChpZCkgLQ0KPiBNVlBQMl9GTF9TVEFSVCkgKiBcDQo+ICAJCQkJCQkgTVZQ UDJfQ0xTX0ZMVF9FTlRSSUVTXw0KPiBQRVJfRkxPVykNCj4gLSNkZWZpbmUgTVZQUDJfQ0xTX0ZM VF9DMl9SU1NfRU5UUlkoaWQpCQkoTVZQUDJfQ0xTX0ZMVF8NCj4gRklSU1QoaWQpKQ0KPiAtI2Rl ZmluZSBNVlBQMl9DTFNfRkxUX0hBU0hfRU5UUlkocG9ydCwgaWQpCShNVlBQMl9DTFNfRkxUX0My X1JTU19FDQo+IE5UUlkoaWQpICsgKHBvcnQpICsgMSkNCj4gKyNkZWZpbmUgTVZQUDJfQ0xTX0ZM VF9DMl9SRlMoaWQsIHJmc19uKQkJKE1WUFAyX0NMU19GTFRfDQo+IEZJUlNUKGlkKSArIChyZnNf bikpDQo+ICsjZGVmaW5lIE1WUFAyX0NMU19GTFRfQzJfUlNTX0VOVFJZKGlkKQkJKE1WUFAyX0NM U19GTFRfDQo+IEMyX1JGUyhpZCwgTVZQUDJfTl9SRlNfRU5UUklFU19QRVJfRkxPVykpDQo+ICsj ZGVmaW5lIE1WUFAyX0NMU19GTFRfSEFTSF9FTlRSWShwb3J0LCBpZCkJKE1WUFAyX0NMU19GTFRf QzJfUlNTX0UNCj4gTlRSWShpZCkgKyAxICsgKHBvcnQpKQ0KPiAgI2RlZmluZSBNVlBQMl9DTFNf RkxUX0xBU1QoaWQpCQkJKE1WUFAyX0NMU19GTFRfDQo+IEZJUlNUKGlkKSArIFwNCj4gIAkJCQkJ CSBNVlBQMl9DTFNfRkxUX0VOVFJJRVNfDQo+IFBFUl9GTE9XIC0gMSkNCj4gIA0KPiBAQCAtMjQ2 LDQgKzI3MSwxMyBAQCB1MzIgbXZwcDJfY2xzX2MyX2hpdF9jb3VudChzdHJ1Y3QgbXZwcDIgKnBy aXYsDQo+IGludCBjMl9pbmRleCk7DQo+ICB2b2lkIG12cHAyX2Nsc19jMl9yZWFkKHN0cnVjdCBt dnBwMiAqcHJpdiwgaW50IGluZGV4LA0KPiAgCQkgICAgICAgc3RydWN0IG12cHAyX2Nsc19jMl9l bnRyeSAqYzIpOw0KPiAgDQo+ICtpbnQgbXZwcDJfZXRodG9vbF9jbHNfcnVsZV9nZXQoc3RydWN0 IG12cHAyX3BvcnQgKnBvcnQsDQo+ICsJCQkgICAgICAgc3RydWN0IGV0aHRvb2xfcnhuZmMgKnJ4 bmZjKTsNCj4gKw0KPiAraW50IG12cHAyX2V0aHRvb2xfY2xzX3J1bGVfaW5zKHN0cnVjdCBtdnBw Ml9wb3J0ICpwb3J0LA0KPiArCQkJICAgICAgIHN0cnVjdCBldGh0b29sX3J4bmZjICppbmZvKTsN Cj4gKw0KPiAraW50IG12cHAyX2V0aHRvb2xfY2xzX3J1bGVfZGVsKHN0cnVjdCBtdnBwMl9wb3J0 ICpwb3J0LA0KPiArCQkJICAgICAgIHN0cnVjdCBldGh0b29sX3J4bmZjICppbmZvKTsNCj4gKw0K PiAgI2VuZGlmDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212 cHAyL212cHAyX21haW4uYw0KPiBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZwcDIv bXZwcDJfbWFpbi5jDQo+IGluZGV4IGYxMjhlYTIyYjMzOS4uZDM4OTUyZWI3YWE5IDEwMDY0NA0K PiAtLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyX21haW4uYw0K PiArKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyX21haW4uYw0K PiBAQCAtMzkzNyw3ICszOTM3LDcgQEAgc3RhdGljIGludCBtdnBwMl9ldGh0b29sX2dldF9yeG5m YyhzdHJ1Y3QNCj4gbmV0X2RldmljZSAqZGV2LA0KPiAgCQkJCSAgIHN0cnVjdCBldGh0b29sX3J4 bmZjICppbmZvLCB1MzINCj4gKnJ1bGVzKQ0KPiAgew0KPiAgCXN0cnVjdCBtdnBwMl9wb3J0ICpw b3J0ID0gbmV0ZGV2X3ByaXYoZGV2KTsNCj4gLQlpbnQgcmV0ID0gMDsNCj4gKwlpbnQgcmV0ID0g MCwgaSwgbG9jID0gMDsNCj4gIA0KPiAgCWlmICghbXZwcDIyX3Jzc19pc19zdXBwb3J0ZWQoKSkN Cj4gIAkJcmV0dXJuIC1FT1BOT1RTVVBQOw0KPiBAQCAtMzk0OSw2ICszOTQ5LDE4IEBAIHN0YXRp YyBpbnQgbXZwcDJfZXRodG9vbF9nZXRfcnhuZmMoc3RydWN0DQo+IG5ldF9kZXZpY2UgKmRldiwN Cj4gIAljYXNlIEVUSFRPT0xfR1JYUklOR1M6DQo+ICAJCWluZm8tPmRhdGEgPSBwb3J0LT5ucnhx czsNCj4gIAkJYnJlYWs7DQo+ICsJY2FzZSBFVEhUT09MX0dSWENMU1JMQ05UOg0KPiArCQlpbmZv LT5ydWxlX2NudCA9IHBvcnQtPm5fcmZzX3J1bGVzOw0KPiArCQlicmVhazsNCj4gKwljYXNlIEVU SFRPT0xfR1JYQ0xTUlVMRToNCj4gKwkJcmV0ID0gbXZwcDJfZXRodG9vbF9jbHNfcnVsZV9nZXQo cG9ydCwgaW5mbyk7DQo+ICsJCWJyZWFrOw0KPiArCWNhc2UgRVRIVE9PTF9HUlhDTFNSTEFMTDoN Cj4gKwkJZm9yIChpID0gMDsgaSA8IE1WUFAyX05fUkZTX1JVTEVTOyBpKyspIHsNCj4gKwkJCWlm IChwb3J0LT5yZnNfcnVsZXNbaV0pDQo+ICsJCQkJcnVsZXNbbG9jKytdID0gaTsNCj4gKwkJfQ0K PiArCQlicmVhazsNCj4gIAlkZWZhdWx0Og0KPiAgCQlyZXR1cm4gLUVOT1RTVVBQOw0KPiAgCX0N Cj4gQEAgLTM5NjksNiArMzk4MSwxMiBAQCBzdGF0aWMgaW50IG12cHAyX2V0aHRvb2xfc2V0X3J4 bmZjKHN0cnVjdA0KPiBuZXRfZGV2aWNlICpkZXYsDQo+ICAJY2FzZSBFVEhUT09MX1NSWEZIOg0K PiAgCQlyZXQgPSBtdnBwMl9ldGh0b29sX3J4Zmhfc2V0KHBvcnQsIGluZm8pOw0KPiAgCQlicmVh azsNCj4gKwljYXNlIEVUSFRPT0xfU1JYQ0xTUkxJTlM6DQo+ICsJCXJldCA9IG12cHAyX2V0aHRv b2xfY2xzX3J1bGVfaW5zKHBvcnQsIGluZm8pOw0KPiArCQlicmVhazsNCj4gKwljYXNlIEVUSFRP T0xfU1JYQ0xTUkxERUw6DQo+ICsJCXJldCA9IG12cHAyX2V0aHRvb2xfY2xzX3J1bGVfZGVsKHBv cnQsIGluZm8pOw0KPiArCQlicmVhazsNCj4gIAlkZWZhdWx0Og0KPiAgCQlyZXR1cm4gLUVPUE5P VFNVUFA7DQo+ICAJfQ0KPiBAQCAtNTA0MCw4ICs1MDU4LDEwIEBAIHN0YXRpYyBpbnQgbXZwcDJf cG9ydF9wcm9iZShzdHJ1Y3QNCj4gcGxhdGZvcm1fZGV2aWNlICpwZGV2LA0KPiAgCWRldi0+aHdf ZmVhdHVyZXMgfD0gZmVhdHVyZXMgfCBORVRJRl9GX1JYQ1NVTSB8IE5FVElGX0ZfR1JPIHwNCj4g IAkJCSAgICBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVI7DQo+ICANCj4gLQlpZiAobXZwcDIy X3Jzc19pc19zdXBwb3J0ZWQoKSkNCj4gKwlpZiAobXZwcDIyX3Jzc19pc19zdXBwb3J0ZWQoKSkg ew0KPiAgCQlkZXYtPmh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfUlhIQVNIOw0KPiArCQlkZXYtPmZl YXR1cmVzIHw9IE5FVElGX0ZfTlRVUExFOw0KPiArCX0NCj4gIA0KDQpJIGRvbid0IHRoaW5rIHlv dSBuZWVkIHRoaXMgZmxhZywgdGhpcyBmbGFnIGlzIGZvciBhIGRpZmZlcmVudCBmZWF0dXJlIA0K bmVlZGVkIGZvciBuZXRkZXYgbmRvICIubmRvX3J4X2Zsb3dfc3RlZXIiLCBBY2NlbGVyYXRlZCBS ZWNlaXZlIEZsb3cNClN0ZWVyaW5nIHdoaWNoIGlzIHRvdGFsbHkgZGlmZmVyZW50IGZyb20gdXNl ciBjb250cm9sbGVkIGV0aHRvb2wgZmxvdw0Kc3RlZXJpbmcgZmVhdHVyZSB5b3UgYWRkZWQgaW4g dGhpcyBwYXRjaC4NCg0KaHR0cHM6Ly9hY2Nlc3MucmVkaGF0LmNvbS9kb2N1bWVudGF0aW9uL2Vu LXVzL3JlZF9oYXRfZW50ZXJwcmlzZV9saW51eC82L2h0bWwvcGVyZm9ybWFuY2VfdHVuaW5nX2d1 aWRlL25ldHdvcmstYWNjLXJmcw0KDQoNCj4gIAlpZiAocG9ydC0+cG9vbF9sb25nLT5pZCA9PSBN VlBQMl9CTV9KVU1CTyAmJiBwb3J0LT5pZCAhPSAwKSB7DQo+ICAJCWRldi0+ZmVhdHVyZXMgJj0g fihORVRJRl9GX0lQX0NTVU0gfA0KPiBORVRJRl9GX0lQVjZfQ1NVTSk7DQo=