From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 0BA85A0613 for ; Thu, 26 Sep 2019 17:58:15 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id D929F1B203; Thu, 26 Sep 2019 17:58:14 +0200 (CEST) Received: from EUR02-VE1-obe.outbound.protection.outlook.com (mail-eopbgr20046.outbound.protection.outlook.com [40.107.2.46]) by dpdk.org (Postfix) with ESMTP id DF2402BD8 for ; Thu, 26 Sep 2019 17:58:13 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Lywtt6gUgEXVcjU7jZHWgN4MyTcJnduRHgycjJT9GSa0+zEuGRVJWY2HNgCI32dQhoG7sC7Hfj/oI2u9eCUnHcYEPW5rmmw9fxymumUteUqx7Qd7a75L6nNVfX2McDdnJ904s1qRVNMVWdW+QKqGImv18GD9xdiB23ah6nJrXk0vKiGa/Z6VZLOuyuzvQgnM18yCnkZsV068w0qgDnt837rdA4jws/RFZGhi0NIg/QhlfEmO5S9UmYEhlftWNzhBKCK691FisRR3aVqz0ZpvE4YZjqQ7Jcf7F3FUMr4MUv5hDjFtt1nua9Xtw9XihhSAdFdUZAOMdOv4zmI/7a0WbA== 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=XD8bSbakObe7yFf8CGgCwJlGIcP8tH1EoKQ+vGH6Z4g=; b=JzWu1Onuast3UZJrF/r4sEqzfUSGsIhlujMTd84tOlN5S9JnleGbOQ+bk51hVxMbS7Zeyt+N0hGIzp4wMyBbPYbh0yNZe5zZNFl7DCilWmaQE7KuvV0hQ5tpP4B2XzQaVUE4GIFCOn4xBfnf/BPCnBLKBjL790Z5a8dGiOUA124JCeVTwgtjbGl6/9JiTCVBmX5Oc7vqJIzPUOt0ai73P73pJztvbiG0M8r5ERXKFwB6XYACx0AFdMJksFe8/m5er0ptV1dhIRCnd70TK5Xb8J3Gw9Ax5K1SfARbiSg8UpTvirDewNVA4ZFxJyxsESEAKN3jjA4IlZ0vt+1k/OCnkw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=mellanox.com; dmarc=pass action=none header.from=mellanox.com; dkim=pass header.d=mellanox.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=XD8bSbakObe7yFf8CGgCwJlGIcP8tH1EoKQ+vGH6Z4g=; b=Nzo62MNqQWo3EeZaJ1dpWKce2XzZ/qS8SVbtck1SNTRMF7ymhL1AdRbrLvh1jAOKT02oEuxSprdkhjsZ1VtykzM5vNDv3AFbOBoj+FgDMCBKavc3KWW5qkNdNzIU8T/uS1p44X0nsZW5SVIhRGgDV5m+e5FsUqw87HuWK8SwMFo= Received: from AM4PR05MB3425.eurprd05.prod.outlook.com (10.171.190.15) by AM4PR05MB3282.eurprd05.prod.outlook.com (10.171.187.159) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2305.17; Thu, 26 Sep 2019 15:58:12 +0000 Received: from AM4PR05MB3425.eurprd05.prod.outlook.com ([fe80::4c32:a34f:5558:a2c6]) by AM4PR05MB3425.eurprd05.prod.outlook.com ([fe80::4c32:a34f:5558:a2c6%7]) with mapi id 15.20.2284.028; Thu, 26 Sep 2019 15:58:12 +0000 From: Ori Kam To: Thomas Monjalon , Ferruh Yigit , Andrew Rybchenko CC: "dev@dpdk.org" , "jingjing.wu@intel.com" , "stephen@networkplumber.org" Thread-Topic: [dpdk-dev] [PATCH 01/13] ethdev: support setup function for hairpin queue Thread-Index: AQHVdHE376BqXpFSVE679td0sgL3bac9+ZXA Date: Thu, 26 Sep 2019 15:58:11 +0000 Message-ID: References: <1569479349-36962-1-git-send-email-orika@mellanox.com> <1569479349-36962-2-git-send-email-orika@mellanox.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=orika@mellanox.com; x-originating-ip: [193.47.165.251] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 3ea0ed46-3a34-443b-8a9d-08d7429a5552 x-ms-office365-filtering-ht: Tenant x-ms-traffictypediagnostic: AM4PR05MB3282: x-ld-processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:5516; x-forefront-prvs: 0172F0EF77 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(4636009)(136003)(396003)(366004)(39860400002)(376002)(346002)(13464003)(189003)(199004)(478600001)(8936002)(52536014)(14454004)(81156014)(81166006)(7736002)(305945005)(25786009)(5660300002)(2906002)(3846002)(6116002)(110136005)(54906003)(316002)(102836004)(66946007)(66066001)(76116006)(64756008)(66556008)(66476007)(33656002)(66446008)(30864003)(9686003)(4326008)(55016002)(229853002)(256004)(74316002)(14444005)(6436002)(99286004)(53546011)(6506007)(76176011)(71200400001)(7696005)(446003)(11346002)(26005)(6246003)(476003)(486006)(71190400001)(86362001)(186003)(579004); DIR:OUT; SFP:1101; SCL:1; SRVR:AM4PR05MB3282; H:AM4PR05MB3425.eurprd05.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: cC3llui9xdR54BKke3VUkT6YBQ2IGyDfgOqLKtvSxl8UmHkkFlye3yA0Zqpz+ELKSbI4hEbsov+dWclf4CHuunfjlTBw5cAEHYZRunwl1FJob3qfJiAbkEF9L+n6rfLJ1cnoqIBVqnrS+7PYEhgMOk2dBpaqQXwrKdNlOktznxDTALYFSB7cxLPpcr37BAeKtovUdKVU/W14a3zQuEf7wg4blO4qrWC1LRkdyYGXpxlLB0LmsQum6+xAHL5M54xU+IlUZac5A5ZxmUXCPOSGoEBLuLorD/uuD4sjnUe0TekBV26xF7U46DMS//2RimZg2lqIq0++09WipcteQ50CBnth8oKu1Cw2SKmT5tdwq9ZAuCc+IWYEk99UczImlHPV1buUSXsc7UUUbExhmKOL1gBZcWkf/OHsl1LvSH0khPk= x-ms-exchange-transport-forked: True Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3ea0ed46-3a34-443b-8a9d-08d7429a5552 X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Sep 2019 15:58:11.8385 (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-CrossTenant-userprincipalname: bNcFxE1IevcEQeB2gkJdEKpjMak6utsqnzGn7hCEklByhK4RxMvy3HQ282S0rwM5O5680K8iRiz2r94E65x6hQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM4PR05MB3282 Subject: Re: [dpdk-dev] [PATCH 01/13] ethdev: support setup function for hairpin queue X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" SGkgQW5kcmV3LA0KVGhhbmtzIGZvciB5b3VyIGNvbW1lbnRzIFBTQi4NCiANCj4gLS0tLS1Pcmln aW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogQW5kcmV3IFJ5YmNoZW5rbyA8YXJ5YmNoZW5rb0Bz b2xhcmZsYXJlLmNvbT4NCj4gT24gOS8yNi8xOSA5OjI4IEFNLCBPcmkgS2FtIHdyb3RlOg0KPiA+ IFRoaXMgY29tbWl0IGludHJvZHVjZSB0aGUgUlgvVFggaGFpcnBpbiBzZXR1cCBmdW5jdGlvbi4N Cj4NCj4gPiBSWC9UWCBzaG91bGQgYmUgUngvVHggaGVyZSBhbmQgZXZlcnl3aGVyZSBiZWxvdy4N Cj4gPg0KPiA+IEhhaXJwaW4gaXMgUlgvVFggcXVldWUgdGhhdCBpcyB1c2VkIGJ5IHRoZSBuaWMg aW4gb3JkZXIgdG8gb2ZmbG9hZA0KPiA+IHdpcmUgdG8gd2lyZSB0cmFmZmljLg0KPiA+DQo+ID4g RWFjaCBoYWlycGluIHF1ZXVlIGlzIGJpbmRlZCB0byBvbmUgb3IgbW9yZSBxdWV1ZXMgZnJvbSBv dGhlciB0eXBlLg0KPiA+IEZvciBleGFtcGxlIFRYIGhhaXJwaW4gcXVldWUgc2hvdWxkIGJlIGJp bmRlZCB0byBhdCBsZWFzdCAxIFJYIGhhaXJwaW4NCj4gPiBxdWV1ZSBhbmQgdmljZSB2ZXJzYS4N Cj4NCj4gSG93IHNob3VsZCBhcHBsaWNhdGlvbiBmaW5kIG91dCB0aGF0IGhhaXJwaW4gcXVldWVz IGFyZSBzdXBwb3J0ZWQ/DQoNCkl0IHNob3VsZCBiZSBzdGF0ZWQgaW4gdGhlIHJlbGVhc2Ugbm90 ZSBvZiB0aGUgRFBESywgd2hlbiBtYW51ZmFjdHVyZSBhZGRzIHN1cHBvcnQgZm9yIHRoaXMuDQpJ biBhZGRpdGlvbiBpZiB0aGUgYXBwbGljYXRpb24gdHJ5IHRvIHNldCBoYWlycGluIHF1ZXVlIGFu ZCBpdCBmYWlscyBpdCBjYW4gbWVhbiBkZXBlbmRpbmcgb24gdGhlDQplcnJvciB0aGF0IHRoZSBo YWlycGluIGlzIG5vdCBzdXBwb3J0ZWQuDQoNCj4gSG93IG1hbnk/DQoNClRoZXJlIGlzIG5vIGxp bWl0IHRvIHRoZSBudW1iZXIgb2YgaGFpcnBpbiBxdWV1ZXMgZnJvbSBhcHBsaWNhdGlvbiBhbGwg cXVldWVzIGNhbiBiZSBoYWlycGluIHF1ZXVlcy4NCg0KPiBIb3cgc2hvdWxkIGFwcGxpY2F0aW9u IGZpbmQgb3V0IHdoaWNoIHBvcnRzL3F1ZXVlcyBjb3VsZCBiZSB1c2VkIGZvcg0KPiBwaW5pbmc/ DQoNCkFsbCBwb3J0cyBhbmQgcXVldWVzIGNhbiBiZSBzdXBwb3J0ZWQsIGlmIHRoZSBhcHBsaWNh dGlvbiByZXF1ZXN0IGludmFsaWQgY29tYmluYXRpb24sIGZvciBleGFtcGxlDQppbiBjdXJyZW50 IE1lbGxhbm94IGltcGxlbWVudGF0aW9uIGJpbmRpbmcgYmV0d2VlbiB0d28gcG9ydHMgdGhlbiB0 aGUgc2V0dXAgZnVuY3Rpb24gd2lsbCAgZmFpbC4NCg0KSWYgeW91IHdvdWxkIGxpa2UgSSBjYW4g YWRkIGNhcGFiaWxpdHkgZm9yIHRoaXMsIGJ1dCB0aGVyZSBhcmUgdG9vIG1hbnkgb3B0aW9ucy4g Rm9yIGV4YW1wbGUgbnVtYmVyDQpvZiBxdWV1ZXMsIGJpbmRpbmcgbGltaXRhdGlvbnMgYWxsIG9m IHRob3NlIHdpbGwgYmUgdmVyeSBoYXJkIHRvIGRlY2xhcmUuIA0KDQoNCj4gSXMgaGFpci1waW5u aW5nIGRvbWFpbiBvbiBkZXZpY2UgbGV2ZWwgc3VmZmljaWVudCB0byBleHBvc2UgbGltaXRhdGlv bnM/DQo+DQpJJ20gc29ycnkgYnV0IEkgZG9u4oCZdCB1bmRlcnN0YW5kIHlvdXIgcXVlc3Rpb24u DQoNCj4gPiBTaWduZWQtb2ZmLWJ5OiBPcmkgS2FtIDxvcmlrYUBtZWxsYW5veC5jb20+DQo+ID4g LS0tDQo+ID4gICBsaWIvbGlicnRlX2V0aGRldi9ydGVfZXRoZGV2LmMgICAgICAgICAgIHwgMjEz DQo+PiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQo+ID4gICBsaWIvbGlicnRlX2V0 aGRldi9ydGVfZXRoZGV2LmggICAgICAgICAgIHwgMTQ1ICsrKysrKysrKysrKysrKysrKysrKw0K PiA+ICAgbGliL2xpYnJ0ZV9ldGhkZXYvcnRlX2V0aGRldl9jb3JlLmggICAgICB8ICAxOCArKysN Cj4gPiAgIGxpYi9saWJydGVfZXRoZGV2L3J0ZV9ldGhkZXZfdmVyc2lvbi5tYXAgfCAgIDQgKw0K PiA+ICAgNCBmaWxlcyBjaGFuZ2VkLCAzODAgaW5zZXJ0aW9ucygrKQ0KPiA+DQo+ID4gZGlmZiAt LWdpdCBhL2xpYi9saWJydGVfZXRoZGV2L3J0ZV9ldGhkZXYuYw0KPiA+IGIvbGliL2xpYnJ0ZV9l dGhkZXYvcnRlX2V0aGRldi5jIGluZGV4IDMwYjBjNzguLjQwMjFmMzggMTAwNjQ0DQo+ID4gLS0t IGEvbGliL2xpYnJ0ZV9ldGhkZXYvcnRlX2V0aGRldi5jDQo+ID4gKysrIGIvbGliL2xpYnJ0ZV9l dGhkZXYvcnRlX2V0aGRldi5jDQo+ID4gQEAgLTE3MDEsNiArMTcwMSwxMTUgQEAgc3RydWN0IHJ0 ZV9ldGhfZGV2ICoNCj4gPiAgIH0NCj4gPg0KPiA+ICAgaW50DQo+ID4gK3J0ZV9ldGhfcnhfaGFp cnBpbl9xdWV1ZV9zZXR1cCh1aW50MTZfdCBwb3J0X2lkLCB1aW50MTZfdA0KPiA+IHJ4X3F1ZXVl X2lkLA0KPiA+ICsJCQkgICAgICAgdWludDE2X3QgbmJfcnhfZGVzYywgdW5zaWduZWQgaW50IHNv Y2tldF9pZCwNCj4gPiArCQkJICAgICAgIGNvbnN0IHN0cnVjdCBydGVfZXRoX3J4Y29uZiAqcnhf Y29uZiwNCj4gPiArCQkJICAgICAgIGNvbnN0IHN0cnVjdCBydGVfZXRoX2hhaXJwaW5fY29uZiAq aGFpcnBpbl9jb25mKQ0KPg0KPiA+IEJlbG93IGNvZGUgZHVwbGljYXRlcyBydGVfZXRoX3J4X3F1 ZXVlX3NldHVwKCkgYSBsb3QgYW5kIGl0IGlzIHZlcnkgYmFkDQo+ID4gZnJvbSBtYWludGVuYW5j ZSBwb2ludCBvZiB2aWV3LiBTaW1pbGFyIHByb2JsZW0gd2l0aCBUeCBoYWlycGluIHF1ZXVlDQo+ ID4gc2V0dXAuDQo+ID4NCg0KSSdtIGF3YXJlIG9mIHRoYXQuIFRoZSByZWFzb25zIEkgY2hvb3Nl IGl0IGFyZTogKHNhbWUgZ29lcyB0byBUeCkNCjEuIHVzZSB0aGUgc2FtZSBmdW5jdGlvbiBhcHBy b2FjaCwgbWVhbmluZyB0byB1c2UgdGhlIGN1cnJlbnQgIHNldHVwIGZ1bmN0aW9uDQogICAgdGhl IGlzc3VlcyB3aXRoIHRoaXMgYXJlOg0KICAgICAqIEFQSSBicmVhay4NCiAgICAgKiBJdCB3aWxs IGhhdmUgZXh0cmEgcGFyYW1ldGVycywgZm9yIGV4YW1wbGUgbWVtcG9vbCB3aWxsIG5vdCBiZSB1 c2VkDQogICAgICAgIGZvciBoYWlycGluIGFuZCBoYWlycGluIGNvbmZpZ3VyYXRpb24gd2lsbCBu b3QgYmUgdXNlZCBmb3Igbm9ybWFsIHF1ZXVlLg0KICAgICAgICBJdCBpcyBwb3NzaWJsZSB0byB1 c2UgYSBzdHJ1Y3QgYnV0IGFnYWluIEFQSSBicmVhayBhbmQgc29tZSBmaWVsZHMgYXJlIG5vdCB1 c2VkLg0KICAgICAqIHdlIGFyZSBqdXN0IHN0YXJ0aW5nIHdpdGggdGhlIGhhaXJwaW4sIG1vc3Qg bGlrZWx5IHRoZXJlIHdpbGwgYmUgbW9kaWZpY2F0aW9uIHNvDQogICAgICAgICBpdCBpcyBiZXR0 ZXIgdG8gaGF2ZSBhIGRpZmZlcmVudCBmdW5jdGlvbi4NCiAgICAgKiBGcm9tIGFwcGxpY2F0aW9u IGhlIHVuZGVydGFuZCB0aGF0IHRoaXMgaXMgYSBkaWZmZXJlbnQga2luZCBvZiBxdWV1ZSwgd2hp Y2ggc2hvdWxkbid0IGJlIA0KICAgICAgICAgdXNlZCBieSB0aGUgYXBwbGljYXRpb24uDQoNCj4g PiArew0KPiA+ICsJaW50IHJldDsNCj4gPiArCXN0cnVjdCBydGVfZXRoX2RldiAqZGV2Ow0KPiA+ ICsJc3RydWN0IHJ0ZV9ldGhfZGV2X2luZm8gZGV2X2luZm87DQo+ID4gKwlzdHJ1Y3QgcnRlX2V0 aF9yeGNvbmYgbG9jYWxfY29uZjsNCj4gPiArCXZvaWQgKipyeHE7DQo+ID4gKw0KPiA+ICsJUlRF X0VUSF9WQUxJRF9QT1JUSURfT1JfRVJSX1JFVChwb3J0X2lkLCAtRUlOVkFMKTsNCj4gPiArDQo+ ID4gKwlkZXYgPSAmcnRlX2V0aF9kZXZpY2VzW3BvcnRfaWRdOw0KPiA+ICsJaWYgKHJ4X3F1ZXVl X2lkID49IGRldi0+ZGF0YS0+bmJfcnhfcXVldWVzKSB7DQo+ID4gKwkJUlRFX0VUSERFVl9MT0co RVJSLCAiSW52YWxpZCBSWCBxdWV1ZV9pZD0ldVxuIiwNCj4gcnhfcXVldWVfaWQpOw0KPiA+ICsJ CXJldHVybiAtRUlOVkFMOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCVJURV9GVU5DX1BUUl9PUl9F UlJfUkVUKCpkZXYtPmRldl9vcHMtPmRldl9pbmZvc19nZXQsIC0NCj4gRU5PVFNVUCk7DQo+ID4g KwlSVEVfRlVOQ19QVFJfT1JfRVJSX1JFVCgqZGV2LT5kZXZfb3BzLQ0KPiA+cnhfaGFpcnBpbl9x dWV1ZV9zZXR1cCwNCj4gPiArCQkJCS1FTk9UU1VQKTsNCj4gPiArDQo+ID4gKwlydGVfZXRoX2Rl dl9pbmZvX2dldChwb3J0X2lkLCAmZGV2X2luZm8pOw0KPiA+ICsNCj4gPiArCS8qIFVzZSBkZWZh dWx0IHNwZWNpZmllZCBieSBkcml2ZXIsIGlmIG5iX3J4X2Rlc2MgaXMgemVybyAqLw0KPiA+ICsJ aWYgKG5iX3J4X2Rlc2MgPT0gMCkgew0KPiA+ICsJCW5iX3J4X2Rlc2MgPSBkZXZfaW5mby5kZWZh dWx0X3J4cG9ydGNvbmYucmluZ19zaXplOw0KPiA+ICsJCS8qIElmIGRyaXZlciBkZWZhdWx0IGlz IGFsc28gemVybywgZmFsbCBiYWNrIG9uIEVBTCBkZWZhdWx0ICovDQo+ID4gKwkJaWYgKG5iX3J4 X2Rlc2MgPT0gMCkNCj4gPiArCQkJbmJfcnhfZGVzYyA9DQo+IFJURV9FVEhfREVWX0ZBTExCQUNL X1JYX1JJTkdTSVpFOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlmIChuYl9yeF9kZXNjID4gZGV2 X2luZm8ucnhfZGVzY19saW0ubmJfbWF4IHx8DQo+ID4gKwkJCW5iX3J4X2Rlc2MgPCBkZXZfaW5m by5yeF9kZXNjX2xpbS5uYl9taW4gfHwNCj4gPiArCQkJbmJfcnhfZGVzYyAlIGRldl9pbmZvLnJ4 X2Rlc2NfbGltLm5iX2FsaWduICE9IDApIHsNCj4gPiArDQo+ID4gKwkJUlRFX0VUSERFVl9MT0co RVJSLA0KPiA+ICsJCQkgICAgICAgIkludmFsaWQgdmFsdWUgZm9yIG5iX3J4X2Rlc2MoPSVodSks IHNob3VsZCBiZTogIg0KPiA+ICsJCQkgICAgICAgIjw9ICVodSwgPj0gJWh1LCBhbmQgYSBwcm9k dWN0IG9mICVodVxuIiwNCj4gPiArCQkJbmJfcnhfZGVzYywgZGV2X2luZm8ucnhfZGVzY19saW0u bmJfbWF4LA0KPiA+ICsJCQlkZXZfaW5mby5yeF9kZXNjX2xpbS5uYl9taW4sDQo+ID4gKwkJCWRl dl9pbmZvLnJ4X2Rlc2NfbGltLm5iX2FsaWduKTsNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4g PiArCX0NCj4gPiArDQo+ID4gKwlpZiAoZGV2LT5kYXRhLT5kZXZfc3RhcnRlZCAmJg0KPiA+ICsJ CSEoZGV2X2luZm8uZGV2X2NhcGEgJg0KPiA+ICsNCj4gCVJURV9FVEhfREVWX0NBUEFfUlVOVElN RV9SWF9RVUVVRV9TRVRVUCkpDQo+ID4gKwkJcmV0dXJuIC1FQlVTWTsNCj4gPiArDQo+ID4gKwlp ZiAoZGV2LT5kYXRhLT5kZXZfc3RhcnRlZCAmJg0KPiA+ICsJCShkZXYtPmRhdGEtPnJ4X3F1ZXVl X3N0YXRlW3J4X3F1ZXVlX2lkXSAhPQ0KPiA+ICsJCQlSVEVfRVRIX1FVRVVFX1NUQVRFX1NUT1BQ RUQpKQ0KPiA+ICsJCXJldHVybiAtRUJVU1k7DQo+ID4gKw0KPiA+ICsJcnhxID0gZGV2LT5kYXRh LT5yeF9xdWV1ZXM7DQo+ID4gKwlpZiAocnhxW3J4X3F1ZXVlX2lkXSkgew0KPiA+ICsJCVJURV9G VU5DX1BUUl9PUl9FUlJfUkVUKCpkZXYtPmRldl9vcHMtDQo+ID5yeF9xdWV1ZV9yZWxlYXNlLA0K PiA+ICsJCQkJCS1FTk9UU1VQKTsNCj4gPiArCQkoKmRldi0+ZGV2X29wcy0+cnhfcXVldWVfcmVs ZWFzZSkocnhxW3J4X3F1ZXVlX2lkXSk7DQo+ID4gKwkJcnhxW3J4X3F1ZXVlX2lkXSA9IE5VTEw7 DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKHJ4X2NvbmYgPT0gTlVMTCkNCj4gPiArCQlyeF9j b25mID0gJmRldl9pbmZvLmRlZmF1bHRfcnhjb25mOw0KPiA+ICsNCj4gPiArCWxvY2FsX2NvbmYg PSAqcnhfY29uZjsNCj4gPiArDQo+ID4gKwkvKg0KPiA+ICsJICogSWYgYW4gb2ZmbG9hZGluZyBo YXMgYWxyZWFkeSBiZWVuIGVuYWJsZWQgaW4NCj4gPiArCSAqIHJ0ZV9ldGhfZGV2X2NvbmZpZ3Vy ZSgpLCBpdCBoYXMgYmVlbiBlbmFibGVkIG9uIGFsbCBxdWV1ZXMsDQo+ID4gKwkgKiBzbyB0aGVy ZSBpcyBubyBuZWVkIHRvIGVuYWJsZSBpdCBpbiB0aGlzIHF1ZXVlIGFnYWluLg0KPiA+ICsJICog VGhlIGxvY2FsX2NvbmYub2ZmbG9hZHMgaW5wdXQgdG8gdW5kZXJseWluZyBQTUQgb25seSBjYXJy aWVzDQo+ID4gKwkgKiB0aG9zZSBvZmZsb2FkaW5ncyB3aGljaCBhcmUgb25seSBlbmFibGVkIG9u IHRoaXMgcXVldWUgYW5kDQo+ID4gKwkgKiBub3QgZW5hYmxlZCBvbiBhbGwgcXVldWVzLg0KPiA+ ICsJICovDQo+ID4gKwlsb2NhbF9jb25mLm9mZmxvYWRzICY9IH5kZXYtPmRhdGEtPmRldl9jb25m LnJ4bW9kZS5vZmZsb2FkczsNCj4gPiArDQo+ID4gKwkvKg0KPiA+ICsJICogTmV3IGFkZGVkIG9m ZmxvYWRpbmdzIGZvciB0aGlzIHF1ZXVlIGFyZSB0aG9zZSBub3QgZW5hYmxlZCBpbg0KPiA+ICsJ ICogcnRlX2V0aF9kZXZfY29uZmlndXJlKCkgYW5kIHRoZXkgbXVzdCBiZSBwZXItcXVldWUgdHlw ZS4NCj4gPiArCSAqIEEgcHVyZSBwZXItcG9ydCBvZmZsb2FkaW5nIGNhbid0IGJlIGVuYWJsZWQg b24gYSBxdWV1ZSB3aGlsZQ0KPiA+ICsJICogZGlzYWJsZWQgb24gYW5vdGhlciBxdWV1ZS4gQSBw dXJlIHBlci1wb3J0IG9mZmxvYWRpbmcgY2FuJ3QNCj4gPiArCSAqIGJlIGVuYWJsZWQgZm9yIGFu eSBxdWV1ZSBhcyBuZXcgYWRkZWQgb25lIGlmIGl0IGhhc24ndCBiZWVuDQo+ID4gKwkgKiBlbmFi bGVkIGluIHJ0ZV9ldGhfZGV2X2NvbmZpZ3VyZSgpLg0KPiA+ICsJICovDQo+ID4gKwlpZiAoKGxv Y2FsX2NvbmYub2ZmbG9hZHMgJiBkZXZfaW5mby5yeF9xdWV1ZV9vZmZsb2FkX2NhcGEpICE9DQo+ ID4gKwkgICAgIGxvY2FsX2NvbmYub2ZmbG9hZHMpIHsNCj4gPiArCQlSVEVfRVRIREVWX0xPRyhF UlIsDQo+ID4gKwkJCSJFdGhkZXYgcG9ydF9pZD0lZCByeF9xdWV1ZV9pZD0lZCwgIg0KPiA+ICsJ CQkibmV3IGFkZGVkIG9mZmxvYWRzIDB4JSJQUkl4NjQiIG11c3QgYmUgIg0KPiA+ICsJCQkid2l0 aGluIHBlci1xdWV1ZSBvZmZsb2FkIGNhcGFiaWxpdGllcyAiDQo+ID4gKwkJCSIweCUiUFJJeDY0 IiBpbiAlcygpXG4iLA0KPiA+ICsJCQlwb3J0X2lkLCByeF9xdWV1ZV9pZCwgbG9jYWxfY29uZi5v ZmZsb2FkcywNCj4gPiArCQkJZGV2X2luZm8ucnhfcXVldWVfb2ZmbG9hZF9jYXBhLA0KPiA+ICsJ CQlfX2Z1bmNfXyk7DQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ ICsJcmV0ID0gKCpkZXYtPmRldl9vcHMtPnJ4X2hhaXJwaW5fcXVldWVfc2V0dXApKGRldiwNCj4g cnhfcXVldWVfaWQsDQo+ID4gKwkJCQkJCSAgICAgIG5iX3J4X2Rlc2MsIHNvY2tldF9pZCwNCj4g PiArCQkJCQkJICAgICAgJmxvY2FsX2NvbmYsDQo+ID4gKwkJCQkJCSAgICAgIGhhaXJwaW5fY29u Zik7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIGV0aF9lcnIocG9ydF9pZCwgcmV0KTsNCj4gPiArfQ0K PiA+ICsNCj4gPiAraW50DQo+ID4gICBydGVfZXRoX3R4X3F1ZXVlX3NldHVwKHVpbnQxNl90IHBv cnRfaWQsIHVpbnQxNl90IHR4X3F1ZXVlX2lkLA0KPiA+ICAgCQkgICAgICAgdWludDE2X3QgbmJf dHhfZGVzYywgdW5zaWduZWQgaW50IHNvY2tldF9pZCwNCj4gPiAgIAkJICAgICAgIGNvbnN0IHN0 cnVjdCBydGVfZXRoX3R4Y29uZiAqdHhfY29uZikgQEAgLTE3OTksNg0KPiArMTkwOCwxMTANCj4g PiBAQCBzdHJ1Y3QgcnRlX2V0aF9kZXYgKg0KPiA+ICAgCQkgICAgICAgdHhfcXVldWVfaWQsIG5i X3R4X2Rlc2MsIHNvY2tldF9pZCwgJmxvY2FsX2NvbmYpKTsNCj4gPiAgIH0NCj4gPg0KPiA+ICtp bnQNCj4gPiArcnRlX2V0aF90eF9oYWlycGluX3F1ZXVlX3NldHVwKHVpbnQxNl90IHBvcnRfaWQs IHVpbnQxNl90DQo+IHR4X3F1ZXVlX2lkLA0KPiA+ICsJCQkgICAgICAgdWludDE2X3QgbmJfdHhf ZGVzYywgdW5zaWduZWQgaW50IHNvY2tldF9pZCwNCj4gPiArCQkJICAgICAgIGNvbnN0IHN0cnVj dCBydGVfZXRoX3R4Y29uZiAqdHhfY29uZiwNCj4gPiArCQkJICAgICAgIGNvbnN0IHN0cnVjdCBy dGVfZXRoX2hhaXJwaW5fY29uZiAqaGFpcnBpbl9jb25mKQ0KPiB7DQo+ID4gKwlzdHJ1Y3QgcnRl X2V0aF9kZXYgKmRldjsNCj4gPiArCXN0cnVjdCBydGVfZXRoX2Rldl9pbmZvIGRldl9pbmZvOw0K PiA+ICsJc3RydWN0IHJ0ZV9ldGhfdHhjb25mIGxvY2FsX2NvbmY7DQo+ID4gKwl2b2lkICoqdHhx Ow0KPiA+ICsNCj4gPiArCVJURV9FVEhfVkFMSURfUE9SVElEX09SX0VSUl9SRVQocG9ydF9pZCwg LUVJTlZBTCk7DQo+ID4gKw0KPiA+ICsJZGV2ID0gJnJ0ZV9ldGhfZGV2aWNlc1twb3J0X2lkXTsN Cj4gPiArCWlmICh0eF9xdWV1ZV9pZCA+PSBkZXYtPmRhdGEtPm5iX3R4X3F1ZXVlcykgew0KPiA+ ICsJCVJURV9FVEhERVZfTE9HKEVSUiwgIkludmFsaWQgVFggcXVldWVfaWQ9JXVcbiIsDQo+IHR4 X3F1ZXVlX2lkKTsNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArCX0NCj4gPiArDQo+ID4g KwlSVEVfRlVOQ19QVFJfT1JfRVJSX1JFVCgqZGV2LT5kZXZfb3BzLT5kZXZfaW5mb3NfZ2V0LCAt DQo+IEVOT1RTVVApOw0KPiA+ICsJUlRFX0ZVTkNfUFRSX09SX0VSUl9SRVQoKmRldi0+ZGV2X29w cy0NCj4gPnR4X2hhaXJwaW5fcXVldWVfc2V0dXAsDQo+ID4gKwkJCQktRU5PVFNVUCk7DQo+ID4g Kw0KPiA+ICsJcnRlX2V0aF9kZXZfaW5mb19nZXQocG9ydF9pZCwgJmRldl9pbmZvKTsNCj4gPiAr DQo+ID4gKwkvKiBVc2UgZGVmYXVsdCBzcGVjaWZpZWQgYnkgZHJpdmVyLCBpZiBuYl90eF9kZXNj IGlzIHplcm8gKi8NCj4gPiArCWlmIChuYl90eF9kZXNjID09IDApIHsNCj4gPiArCQluYl90eF9k ZXNjID0gZGV2X2luZm8uZGVmYXVsdF90eHBvcnRjb25mLnJpbmdfc2l6ZTsNCj4gPiArCQkvKiBJ ZiBkcml2ZXIgZGVmYXVsdCBpcyB6ZXJvLCBmYWxsIGJhY2sgb24gRUFMIGRlZmF1bHQgKi8NCj4g PiArCQlpZiAobmJfdHhfZGVzYyA9PSAwKQ0KPiA+ICsJCQluYl90eF9kZXNjID0NCj4gUlRFX0VU SF9ERVZfRkFMTEJBQ0tfVFhfUklOR1NJWkU7DQo+ID4gKwl9DQo+ID4gKwlpZiAobmJfdHhfZGVz YyA+IGRldl9pbmZvLnR4X2Rlc2NfbGltLm5iX21heCB8fA0KPiA+ICsJICAgIG5iX3R4X2Rlc2Mg PCBkZXZfaW5mby50eF9kZXNjX2xpbS5uYl9taW4gfHwNCj4gPiArCSAgICBuYl90eF9kZXNjICUg ZGV2X2luZm8udHhfZGVzY19saW0ubmJfYWxpZ24gIT0gMCkgew0KPiA+ICsJCVJURV9FVEhERVZf TE9HKEVSUiwNCj4gPiArCQkJICAgICAgICJJbnZhbGlkIHZhbHVlIGZvciBuYl90eF9kZXNjKD0l aHUpLCAiDQo+ID4gKwkJCSAgICAgICAic2hvdWxkIGJlOiA8PSAlaHUsID49ICVodSwgYW5kIGEg cHJvZHVjdCBvZiAiDQo+ID4gKwkJCSAgICAgICAiICVodVxuIiwNCj4gPiArCQkJICAgICAgIG5i X3R4X2Rlc2MsIGRldl9pbmZvLnR4X2Rlc2NfbGltLm5iX21heCwNCj4gPiArCQkJICAgICAgIGRl dl9pbmZvLnR4X2Rlc2NfbGltLm5iX21pbiwNCj4gPiArCQkJICAgICAgIGRldl9pbmZvLnR4X2Rl c2NfbGltLm5iX2FsaWduKTsNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArCX0NCj4gPiAr DQo+ID4gKwlpZiAoZGV2LT5kYXRhLT5kZXZfc3RhcnRlZCAmJg0KPiA+ICsJCSEoZGV2X2luZm8u ZGV2X2NhcGEgJg0KPiA+ICsJCSAgUlRFX0VUSF9ERVZfQ0FQQV9SVU5USU1FX1RYX1FVRVVFX1NF VFVQKSkNCj4gPiArCQlyZXR1cm4gLUVCVVNZOw0KPiA+ICsNCj4gPiArCWlmIChkZXYtPmRhdGEt PmRldl9zdGFydGVkICYmDQo+ID4gKwkJKGRldi0+ZGF0YS0+dHhfcXVldWVfc3RhdGVbdHhfcXVl dWVfaWRdICE9DQo+ID4gKwkJIFJURV9FVEhfUVVFVUVfU1RBVEVfU1RPUFBFRCkpDQo+ID4gKwkJ cmV0dXJuIC1FQlVTWTsNCj4gPiArDQo+ID4gKwl0eHEgPSBkZXYtPmRhdGEtPnR4X3F1ZXVlczsN Cj4gPiArCWlmICh0eHFbdHhfcXVldWVfaWRdKSB7DQo+ID4gKwkJUlRFX0ZVTkNfUFRSX09SX0VS Ul9SRVQoKmRldi0+ZGV2X29wcy0NCj4gPnR4X3F1ZXVlX3JlbGVhc2UsDQo+ID4gKwkJCQkJLUVO T1RTVVApOw0KPiA+ICsJCSgqZGV2LT5kZXZfb3BzLT50eF9xdWV1ZV9yZWxlYXNlKSh0eHFbdHhf cXVldWVfaWRdKTsNCj4gPiArCQl0eHFbdHhfcXVldWVfaWRdID0gTlVMTDsNCj4gPiArCX0NCj4g PiArDQo+ID4gKwlpZiAodHhfY29uZiA9PSBOVUxMKQ0KPiA+ICsJCXR4X2NvbmYgPSAmZGV2X2lu Zm8uZGVmYXVsdF90eGNvbmY7DQo+ID4gKw0KPiA+ICsJbG9jYWxfY29uZiA9ICp0eF9jb25mOw0K PiA+ICsNCj4gPiArCS8qDQo+ID4gKwkgKiBJZiBhbiBvZmZsb2FkaW5nIGhhcyBhbHJlYWR5IGJl ZW4gZW5hYmxlZCBpbg0KPiA+ICsJICogcnRlX2V0aF9kZXZfY29uZmlndXJlKCksIGl0IGhhcyBi ZWVuIGVuYWJsZWQgb24gYWxsIHF1ZXVlcywNCj4gPiArCSAqIHNvIHRoZXJlIGlzIG5vIG5lZWQg dG8gZW5hYmxlIGl0IGluIHRoaXMgcXVldWUgYWdhaW4uDQo+ID4gKwkgKiBUaGUgbG9jYWxfY29u Zi5vZmZsb2FkcyBpbnB1dCB0byB1bmRlcmx5aW5nIFBNRCBvbmx5IGNhcnJpZXMNCj4gPiArCSAq IHRob3NlIG9mZmxvYWRpbmdzIHdoaWNoIGFyZSBvbmx5IGVuYWJsZWQgb24gdGhpcyBxdWV1ZSBh bmQNCj4gPiArCSAqIG5vdCBlbmFibGVkIG9uIGFsbCBxdWV1ZXMuDQo+ID4gKwkgKi8NCj4gPiAr CWxvY2FsX2NvbmYub2ZmbG9hZHMgJj0gfmRldi0+ZGF0YS0+ZGV2X2NvbmYudHhtb2RlLm9mZmxv YWRzOw0KPiA+ICsNCj4gPiArCS8qDQo+ID4gKwkgKiBOZXcgYWRkZWQgb2ZmbG9hZGluZ3MgZm9y IHRoaXMgcXVldWUgYXJlIHRob3NlIG5vdCBlbmFibGVkIGluDQo+ID4gKwkgKiBydGVfZXRoX2Rl dl9jb25maWd1cmUoKSBhbmQgdGhleSBtdXN0IGJlIHBlci1xdWV1ZSB0eXBlLg0KPiA+ICsJICog QSBwdXJlIHBlci1wb3J0IG9mZmxvYWRpbmcgY2FuJ3QgYmUgZW5hYmxlZCBvbiBhIHF1ZXVlIHdo aWxlDQo+ID4gKwkgKiBkaXNhYmxlZCBvbiBhbm90aGVyIHF1ZXVlLiBBIHB1cmUgcGVyLXBvcnQg b2ZmbG9hZGluZyBjYW4ndA0KPiA+ICsJICogYmUgZW5hYmxlZCBmb3IgYW55IHF1ZXVlIGFzIG5l dyBhZGRlZCBvbmUgaWYgaXQgaGFzbid0IGJlZW4NCj4gPiArCSAqIGVuYWJsZWQgaW4gcnRlX2V0 aF9kZXZfY29uZmlndXJlKCkuDQo+ID4gKwkgKi8NCj4gPiArCWlmICgobG9jYWxfY29uZi5vZmZs b2FkcyAmIGRldl9pbmZvLnR4X3F1ZXVlX29mZmxvYWRfY2FwYSkgIT0NCj4gPiArCSAgICAgbG9j YWxfY29uZi5vZmZsb2Fkcykgew0KPiA+ICsJCVJURV9FVEhERVZfTE9HKEVSUiwNCj4gPiArCQkJ ICAgICAgICJFdGhkZXYgcG9ydF9pZD0lZCB0eF9xdWV1ZV9pZD0lZCwgbmV3DQo+IGFkZGVkICIN Cj4gPiArCQkJICAgICAgICJvZmZsb2FkcyAweCUiUFJJeDY0IiBtdXN0IGJlIHdpdGhpbiAiDQo+ ID4gKwkJCSAgICAgICAicGVyLXF1ZXVlIG9mZmxvYWQgY2FwYWJpbGl0aWVzIDB4JSJQUkl4NjQi ICINCj4gPiArCQkJICAgICAgICJpbiAlcygpXG4iLA0KPiA+ICsJCQkgICAgICAgcG9ydF9pZCwg dHhfcXVldWVfaWQsIGxvY2FsX2NvbmYub2ZmbG9hZHMsDQo+ID4gKwkJCSAgICAgICBkZXZfaW5m by50eF9xdWV1ZV9vZmZsb2FkX2NhcGEsDQo+ID4gKwkJCSAgICAgICBfX2Z1bmNfXyk7DQo+ID4g KwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIGV0aF9lcnIo cG9ydF9pZCwgKCpkZXYtPmRldl9vcHMtPnR4X2hhaXJwaW5fcXVldWVfc2V0dXApDQo+ID4gKwkJ ICAgICAgIChkZXYsIHR4X3F1ZXVlX2lkLCBuYl90eF9kZXNjLCBzb2NrZXRfaWQsICZsb2NhbF9j b25mLA0KPiA+ICsJCQloYWlycGluX2NvbmYpKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiAgIHZvaWQN Cj4gPiAgIHJ0ZV9ldGhfdHhfYnVmZmVyX2Ryb3BfY2FsbGJhY2soc3RydWN0IHJ0ZV9tYnVmICoq cGt0cywgdWludDE2X3QNCj4gdW5zZW50LA0KPiA+ICAgCQl2b2lkICp1c2VyZGF0YSBfX3J0ZV91 bnVzZWQpDQo+ID4gZGlmZiAtLWdpdCBhL2xpYi9saWJydGVfZXRoZGV2L3J0ZV9ldGhkZXYuaA0K PiA+IGIvbGliL2xpYnJ0ZV9ldGhkZXYvcnRlX2V0aGRldi5oIGluZGV4IDQ3NWRiZGEuLmIzYjE1 OTcgMTAwNjQ0DQo+ID4gLS0tIGEvbGliL2xpYnJ0ZV9ldGhkZXYvcnRlX2V0aGRldi5oDQo+ID4g KysrIGIvbGliL2xpYnJ0ZV9ldGhkZXYvcnRlX2V0aGRldi5oDQo+ID4gQEAgLTgwMyw2ICs4MDMs MzAgQEAgc3RydWN0IHJ0ZV9ldGhfdHhjb25mIHsNCj4gPiAgIAl1aW50NjRfdCBvZmZsb2FkczsN Cj4gPiAgIH07DQo+ID4NCj4gPiArI2RlZmluZSBSVEVfRVRIX01BWF9IQUlSUElOX1BFRVJTIDMy DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogQHdhcm5pbmcNCj4gPiArICogQGIgRVhQRVJJTUVO VEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlLCBvciBiZSByZW1vdmVkLCB3aXRob3V0IHByaW9yDQo+ ID4gK25vdGljZQ0KPiA+ICsgKg0KPiA+ICsgKiBBIHN0cnVjdHVyZSB1c2VkIHRvIGhvbGQgaGFp cnBpbiBwZWVyIGRhdGEuDQo+ID4gKyAqLw0KPiA+ICtzdHJ1Y3QgcnRlX2V0aF9oYWlycGluX3Bl ZXIgew0KPiA+ICsJdWludDE2X3QgcG9ydDsgLyoqPCBQZWVyIHBvcnQuICovDQo+ID4gKwl1aW50 MTZfdCBxdWV1ZTsgLyoqPCBQZWVyIHF1ZXVlLiAqLw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArLyoq DQo+ID4gKyAqIEB3YXJuaW5nDQo+ID4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5 IGNoYW5nZSwgb3IgYmUgcmVtb3ZlZCwgd2l0aG91dCBwcmlvcg0KPiA+ICtub3RpY2UNCj4gPiAr ICoNCj4gPiArICogQSBzdHJ1Y3R1cmUgdXNlZCB0byBjb25maWd1cmUgaGFpcnBpbiBiaW5kaW5n Lg0KPiA+ICsgKi8NCj4gPiArc3RydWN0IHJ0ZV9ldGhfaGFpcnBpbl9jb25mIHsNCj4gPiArCXVp bnQxNl90IHBlZXJfbjsgLyoqPCBUaGUgbnVtYmVyIG9mIHBlZXJzLiAqLw0KPiA+ICsJc3RydWN0 IHJ0ZV9ldGhfaGFpcnBpbl9wZWVyIHBlZXJzW1JURV9FVEhfTUFYX0hBSVJQSU5fUEVFUlNdOw0K PiB9Ow0KPiA+ICsNCj4gPiAgIC8qKg0KPiA+ICAgICogQSBzdHJ1Y3R1cmUgY29udGFpbnMgaW5m b3JtYXRpb24gYWJvdXQgSFcgZGVzY3JpcHRvciByaW5nIGxpbWl0YXRpb25zLg0KPiA+ICAgICov DQo+ID4gQEAgLTE3NjksNiArMTc5Myw2MCBAQCBpbnQgcnRlX2V0aF9yeF9xdWV1ZV9zZXR1cCh1 aW50MTZfdCBwb3J0X2lkLA0KPiB1aW50MTZfdCByeF9xdWV1ZV9pZCwNCj4gPiAgIAkJc3RydWN0 IHJ0ZV9tZW1wb29sICptYl9wb29sKTsNCj4gPg0KPiA+ICAgLyoqDQo+ID4gKyAqIEB3YXJuaW5n DQo+ID4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSwgb3IgYmUgcmVt b3ZlZCwgd2l0aG91dCBwcmlvcg0KPiA+ICsgbm90aWNlDQo+ID4gKyAqDQo+ID4gKyAqIEFsbG9j YXRlIGFuZCBzZXQgdXAgYSBoYWlycGluIHJlY2VpdmUgcXVldWUgZm9yIGFuIEV0aGVybmV0IGRl dmljZS4NCj4gPiArICoNCj4gPiArICogVGhlIGZ1bmN0aW9uIHNldCB1cCB0aGUgc2VsZWN0ZWQg cXVldWUgdG8gYmUgdXNlZCBpbiBoYWlycGluLg0KPiA+ICsgKg0KPiA+ICsgKiBAcGFyYW0gcG9y dF9pZA0KPiA+ICsgKiAgIFRoZSBwb3J0IGlkZW50aWZpZXIgb2YgdGhlIEV0aGVybmV0IGRldmlj ZS4NCj4gPiArICogQHBhcmFtIHJ4X3F1ZXVlX2lkDQo+ID4gKyAqICAgVGhlIGluZGV4IG9mIHRo ZSByZWNlaXZlIHF1ZXVlIHRvIHNldCB1cC4NCj4gPiArICogICBUaGUgdmFsdWUgbXVzdCBiZSBp biB0aGUgcmFuZ2UgWzAsIG5iX3J4X3F1ZXVlIC0gMV0gcHJldmlvdXNseQ0KPiBzdXBwbGllZA0K PiA+ICsgKiAgIHRvIHJ0ZV9ldGhfZGV2X2NvbmZpZ3VyZSgpLg0KPg0KPiBJcyBhbnkgUnggcXVl dWUgbWF5IGJlIHNldHVwIGFzIGhhaXJwaW4gcXVldWU/DQo+IENhbiBpdCBiZSBzdGlsbCB1c2Vk IGZvciByZWd1bGFyIHRyYWZmaWM/DQo+DQoNCk5vIGlmIGEgcXVldWUgaXMgdXNlZCBhcyBoYWly cGluIGl0IGNhbid0IGJlIHVzZWQgZm9yIG5vcm1hbCB0cmFmZmljLg0KVGhpcyBpcyBhbHNvIHdo eSBJIGxpa2UgdGhlIGlkZWEgb2YgdHdvIGRpZmZlcmVudCBmdW5jdGlvbnMsIGluIG9yZGVyIHRv IGNyZWF0ZQ0KVGhpcyBkaXN0aW5jdGlvbi4NCg0KPiA+ICsgKiBAcGFyYW0gbmJfcnhfZGVzYw0K PiA+ICsgKiAgIFRoZSBudW1iZXIgb2YgcmVjZWl2ZSBkZXNjcmlwdG9ycyB0byBhbGxvY2F0ZSBm b3IgdGhlIHJlY2VpdmUgcmluZy4NCj4NCj4gRG9lcyBpdCBzdGlsbCBtYWtlIHNlbnNlIGZvciBo YWlycGluIHF1ZXVlPw0KPg0KDQpZZXMsIHNpbmNlIGl0IGNhbiBhZmZlY3QgbWVtb3J5IHNpemUg dXNlZCBieSB0aGUgZGV2aWNlLCBhbmQgY2FuIGFmZmVjdCBwZXJmb3JtYW5jZS4NCg0KPiA+ICsg KiBAcGFyYW0gc29ja2V0X2lkDQo+ID4gKyAqICAgVGhlICpzb2NrZXRfaWQqIGFyZ3VtZW50IGlz IHRoZSBzb2NrZXQgaWRlbnRpZmllciBpbiBjYXNlIG9mIE5VTUEuDQo+ID4gKyAqICAgVGhlIHZh bHVlIGNhbiBiZSAqU09DS0VUX0lEX0FOWSogaWYgdGhlcmUgaXMgbm8gTlVNQSBjb25zdHJhaW50 DQo+IGZvcg0KPiA+ICsgKiAgIHRoZSBETUEgbWVtb3J5IGFsbG9jYXRlZCBmb3IgdGhlIHJlY2Vp dmUgZGVzY3JpcHRvcnMgb2YgdGhlIHJpbmcuDQo+DQo+IElzIGl0IHN0aWxsIHJlcXVpcmVkIHRv IGJlIHByb3ZpZGVkIGZvciBoYWlycGluIFJ4IHF1ZXVlPw0KPg0KDQpZZXMsIGZvciBpbnRlcm5h bCBQTUQgc3RydWN0dXJlcyB0byBiZSBhbGxvY2F0ZWQsIGJ1dCB3ZSBjYW4gaWYgcHJlc3NlZCBy ZW1vdmUgaXQuDQoNCj4gPiArICogQHBhcmFtIHJ4X2NvbmYNCj4gPiArICogICBUaGUgcG9pbnRl ciB0byB0aGUgY29uZmlndXJhdGlvbiBkYXRhIHRvIGJlIHVzZWQgZm9yIHRoZSByZWNlaXZlDQo+ IHF1ZXVlLg0KPiA+ICsgKiAgIE5VTEwgdmFsdWUgaXMgYWxsb3dlZCwgaW4gd2hpY2ggY2FzZSBk ZWZhdWx0IFJYIGNvbmZpZ3VyYXRpb24NCj4gPiArICogICB3aWxsIGJlIHVzZWQuDQo+ID4gKyAq ICAgVGhlICpyeF9jb25mKiBzdHJ1Y3R1cmUgY29udGFpbnMgYW4gKnJ4X3RocmVzaCogc3RydWN0 dXJlIHdpdGggdGhlDQo+IHZhbHVlcw0KPiA+ICsgKiAgIG9mIHRoZSBQcmVmZXRjaCwgSG9zdCwg YW5kIFdyaXRlLUJhY2sgdGhyZXNob2xkIHJlZ2lzdGVycyBvZiB0aGUNCj4gcmVjZWl2ZQ0KPiA+ ICsgKiAgIHJpbmcuDQo+ID4gKyAqICAgSW4gYWRkaXRpb24gaXQgY29udGFpbnMgdGhlIGhhcmR3 YXJlIG9mZmxvYWRzIGZlYXR1cmVzIHRvIGFjdGl2YXRlIHVzaW5nDQo+ID4gKyAqICAgdGhlIERF Vl9SWF9PRkZMT0FEXyogZmxhZ3MuDQo+ID4gKyAqICAgSWYgYW4gb2ZmbG9hZGluZyBzZXQgaW4g cnhfY29uZi0+b2ZmbG9hZHMNCj4gPiArICogICBoYXNuJ3QgYmVlbiBzZXQgaW4gdGhlIGlucHV0 IGFyZ3VtZW50IGV0aF9jb25mLT5yeG1vZGUub2ZmbG9hZHMNCj4gPiArICogICB0byBydGVfZXRo X2Rldl9jb25maWd1cmUoKSwgaXQgaXMgYSBuZXcgYWRkZWQgb2ZmbG9hZGluZywgaXQgbXVzdCBi ZQ0KPiA+ICsgKiAgIHBlci1xdWV1ZSB0eXBlIGFuZCBpdCBpcyBlbmFibGVkIGZvciB0aGUgcXVl dWUuDQo+ID4gKyAqICAgTm8gbmVlZCB0byByZXBlYXQgYW55IGJpdCBpbiByeF9jb25mLT5vZmZs b2FkcyB3aGljaCBoYXMgYWxyZWFkeSBiZWVuDQo+ID4gKyAqICAgZW5hYmxlZCBpbiBydGVfZXRo X2Rldl9jb25maWd1cmUoKSBhdCBwb3J0IGxldmVsLiBBbiBvZmZsb2FkaW5nDQo+IGVuYWJsZWQN Cj4gPiArICogICBhdCBwb3J0IGxldmVsIGNhbid0IGJlIGRpc2FibGVkIGF0IHF1ZXVlIGxldmVs Lg0KPg0KPiBXaGljaCBvZmZsb2FkcyBzdGlsbCBtYWtlIHNlbnNlIGluIHRoZSBjYXNlIG9mIGhh aXJwaW4gUnggcXVldWU/DQo+IFdoYXQgYWJvdXQgdGhyZXNoaG9kcywgZHJvcCBlbmFibGU/DQo+ DQoNCkRyb3AgYW5kIHRocmVzaG9sZHMgbWFrZSBzZW5zZSwgZm9yIGV4YW1wbGUgdGhlIGFwcGxp Y2F0aW9uIGNhbiBzdGF0ZSB0aGF0LA0KaW4gY2FzZSBvZiBiYWNrIHByZXNzdXJlIHRvIHN0YXJ0 IGRyb3BwaW5nIHBhY2tldHMgaW4gb3JkZXIgbm90IHRvIGFmZmVjdCB0aGUNCmVudGlyZSBuaWMu DQpyZWdhcmRpbmcgb2ZmbG9hZHMgbWFpbmx5IHZsYW4gc3RyaXAgb3IgdmxhbiBpbnNlcnQgYnV0 IHRob3NlIGNhbiBhbHNvIA0KYmUgdXNlZCBpbiBydGVfZmxvdy4NCkJ1dCBmdXR1cmUgb2ZmbG9h ZHMgbGlrZSBRb1Mgb3Igb3RoZXIgbWF5YmUgc2hhcmVkLg0KDQo+ID4gKyAqIEBwYXJhbSBoYWly cGluX2NvbmYNCj4gPiArICogICBUaGUgcG9pbnRlciB0byB0aGUgaGFpcnBpbiBiaW5kaW5nIGNv bmZpZ3VyYXRpb24uDQo+ID4gKyAqIEByZXR1cm4NCj4gPiArICogICAtIDA6IFN1Y2Nlc3MsIHJl Y2VpdmUgcXVldWUgY29ycmVjdGx5IHNldCB1cC4NCj4gPiArICogICAtIC1FSU5WQUw6IFRoZSBz aXplIG9mIG5ldHdvcmsgYnVmZmVycyB3aGljaCBjYW4gYmUgYWxsb2NhdGVkIGZyb20gdGhlDQo+ ID4gKyAqICAgICAgbWVtb3J5IHBvb2wgZG9lcyBub3QgZml0IHRoZSB2YXJpb3VzIGJ1ZmZlciBz aXplcyBhbGxvd2VkIGJ5IHRoZQ0KPiA+ICsgKiAgICAgIGRldmljZSBjb250cm9sbGVyLg0KPiA+ ICsgKiAgIC0gLUVOT01FTTogVW5hYmxlIHRvIGFsbG9jYXRlIHRoZSByZWNlaXZlIHJpbmcgZGVz Y3JpcHRvcnMgb3IgdG8NCj4gPiArICogICAgICBhbGxvY2F0ZSBuZXR3b3JrIG1lbW9yeSBidWZm ZXJzIGZyb20gdGhlIG1lbW9yeSBwb29sIHdoZW4NCj4gPiArICogICAgICBpbml0aWFsaXppbmcg cmVjZWl2ZSBkZXNjcmlwdG9ycy4NCj4gPiArICovDQo+ID4gK19fcnRlX2V4cGVyaW1lbnRhbA0K PiA+ICtpbnQgcnRlX2V0aF9yeF9oYWlycGluX3F1ZXVlX3NldHVwDQo+ID4gKwkodWludDE2X3Qg cG9ydF9pZCwgdWludDE2X3QgcnhfcXVldWVfaWQsDQo+ID4gKwkgdWludDE2X3QgbmJfcnhfZGVz YywgdW5zaWduZWQgaW50IHNvY2tldF9pZCwNCj4gPiArCSBjb25zdCBzdHJ1Y3QgcnRlX2V0aF9y eGNvbmYgKnJ4X2NvbmYsDQo+ID4gKwkgY29uc3Qgc3RydWN0IHJ0ZV9ldGhfaGFpcnBpbl9jb25m ICpoYWlycGluX2NvbmYpOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gICAgKiBBbGxvY2F0ZSBhbmQg c2V0IHVwIGEgdHJhbnNtaXQgcXVldWUgZm9yIGFuIEV0aGVybmV0IGRldmljZS4NCj4gPiAgICAq DQo+ID4gICAgKiBAcGFyYW0gcG9ydF9pZA0KPiA+IEBAIC0xODIxLDYgKzE4OTksNzMgQEAgaW50 IHJ0ZV9ldGhfdHhfcXVldWVfc2V0dXAodWludDE2X3QgcG9ydF9pZCwNCj4gdWludDE2X3QgdHhf cXVldWVfaWQsDQo+ID4gICAJCWNvbnN0IHN0cnVjdCBydGVfZXRoX3R4Y29uZiAqdHhfY29uZik7 DQo+ID4NCj4gPiAgIC8qKg0KPiA+ICsgKiBAd2FybmluZw0KPiA+ICsgKiBAYiBFWFBFUklNRU5U QUw6IHRoaXMgQVBJIG1heSBjaGFuZ2UsIG9yIGJlIHJlbW92ZWQsIHdpdGhvdXQgcHJpb3INCj4g PiArIG5vdGljZQ0KPiA+ICsgKg0KPiA+ICsgKiBBbGxvY2F0ZSBhbmQgc2V0IHVwIGEgdHJhbnNt aXQgaGFpcnBpbiBxdWV1ZSBmb3IgYW4gRXRoZXJuZXQgZGV2aWNlLg0KPiA+ICsgKg0KPiA+ICsg KiBAcGFyYW0gcG9ydF9pZA0KPiA+ICsgKiAgIFRoZSBwb3J0IGlkZW50aWZpZXIgb2YgdGhlIEV0 aGVybmV0IGRldmljZS4NCj4gPiArICogQHBhcmFtIHR4X3F1ZXVlX2lkDQo+ID4gKyAqICAgVGhl IGluZGV4IG9mIHRoZSB0cmFuc21pdCBxdWV1ZSB0byBzZXQgdXAuDQo+ID4gKyAqICAgVGhlIHZh bHVlIG11c3QgYmUgaW4gdGhlIHJhbmdlIFswLCBuYl90eF9xdWV1ZSAtIDFdIHByZXZpb3VzbHkN Cj4gc3VwcGxpZWQNCj4gPiArICogICB0byBydGVfZXRoX2Rldl9jb25maWd1cmUoKS4NCj4NCj4g SXMgYW55IFR4IHF1ZXVlIG1heSBiZSBzZXR1cCBhcyBoYWlycGluIHF1ZXVlPw0KPg0KDQpZZXMg anVzdCBsaWtlIGFueSBSeCBxdWV1ZS4NCg0KPiA+ICsgKiBAcGFyYW0gbmJfdHhfZGVzYw0KPiA+ ICsgKiAgIFRoZSBudW1iZXIgb2YgdHJhbnNtaXQgZGVzY3JpcHRvcnMgdG8gYWxsb2NhdGUgZm9y IHRoZSB0cmFuc21pdCByaW5nLg0KPg0KPiBJcyBpdCByZWFsbHkgcmVxdWlyZWQgZm9yIGhhaXJw aW4gcXVldWU/IEFyZSBtaW4vbWF4L2FsaWduIGxpbWl0cyBzdGlsbCB0aGUNCj4gc2FtZT8NCj4N ClRoZSBudW1iZXIgb2YgZGVzY3JpcHRvcnMgY2FuIGVmZmVjdCBtZW1vcnkgYW5kIHBlcmZvcm1h bmNlLg0KUmVnYXJkaW5nIG1pbi9tYXgvYWxpZ24gSSBndWVzcyB0aGlzIGRlcGVuZHMgb24gdGhl IGltcGxlbWVudGF0aW9uIGluIHRoZSBuaWMuDQoNCj4gPiArICogQHBhcmFtIHNvY2tldF9pZA0K PiA+ICsgKiAgIFRoZSAqc29ja2V0X2lkKiBhcmd1bWVudCBpcyB0aGUgc29ja2V0IGlkZW50aWZp ZXIgaW4gY2FzZSBvZiBOVU1BLg0KPiA+ICsgKiAgIEl0cyB2YWx1ZSBjYW4gYmUgKlNPQ0tFVF9J RF9BTlkqIGlmIHRoZXJlIGlzIG5vIE5VTUEgY29uc3RyYWludCBmb3INCj4gPiArICogICB0aGUg RE1BIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIHRoZSB0cmFuc21pdCBkZXNjcmlwdG9ycyBvZiB0aGUg cmluZy4NCj4NCj4gRG9lcyBpdCBzdGlsbCBtYWtlIHNlbnNlIGZvciBUeCBoYWlycGluIHF1ZXVl Pw0KPg0KDQpTYW1lIGFzIGZvciB0aGUgUlgsIGl0IGlzIHVzZWQgZm9yIGludGVybmFsIFBNRCBz dHJ1Y3R1cmVzLCBidXQgbWF5YmUgb24gDQpvdGhlciBuaWNzIHRoZXkgY2FuIHVzZSB0aGlzLg0K DQo+ID4gKyAqIEBwYXJhbSB0eF9jb25mDQo+ID4gKyAqICAgVGhlIHBvaW50ZXIgdG8gdGhlIGNv bmZpZ3VyYXRpb24gZGF0YSB0byBiZSB1c2VkIGZvciB0aGUgdHJhbnNtaXQNCj4gcXVldWUuDQo+ ID4gKyAqICAgTlVMTCB2YWx1ZSBpcyBhbGxvd2VkLCBpbiB3aGljaCBjYXNlIGRlZmF1bHQgUlgg Y29uZmlndXJhdGlvbg0KPiA+ICsgKiAgIHdpbGwgYmUgdXNlZC4NCj4gPiArICogICBUaGUgKnR4 X2NvbmYqIHN0cnVjdHVyZSBjb250YWlucyB0aGUgZm9sbG93aW5nIGRhdGE6DQo+ID4gKyAqICAg LSBUaGUgKnR4X3RocmVzaCogc3RydWN0dXJlIHdpdGggdGhlIHZhbHVlcyBvZiB0aGUgUHJlZmV0 Y2gsIEhvc3QsIGFuZA0KPiA+ICsgKiAgICAgV3JpdGUtQmFjayB0aHJlc2hvbGQgcmVnaXN0ZXJz IG9mIHRoZSB0cmFuc21pdCByaW5nLg0KPiA+ICsgKiAgICAgV2hlbiBzZXR0aW5nIFdyaXRlLUJh Y2sgdGhyZXNob2xkIHRvIHRoZSB2YWx1ZSBncmVhdGVyIHRoZW4gemVybywNCj4gPiArICogICAg ICp0eF9yc190aHJlc2gqIHZhbHVlIHNob3VsZCBiZSBleHBsaWNpdGx5IHNldCB0byBvbmUuDQo+ ID4gKyAqICAgLSBUaGUgKnR4X2ZyZWVfdGhyZXNoKiB2YWx1ZSBpbmRpY2F0ZXMgdGhlIFttaW5p bXVtXSBudW1iZXIgb2YNCj4gbmV0d29yaw0KPiA+ICsgKiAgICAgYnVmZmVycyB0aGF0IG11c3Qg YmUgcGVuZGluZyBpbiB0aGUgdHJhbnNtaXQgcmluZyB0byB0cmlnZ2VyIHRoZWlyDQo+ID4gKyAq ICAgICBbaW1wbGljaXRdIGZyZWVpbmcgYnkgdGhlIGRyaXZlciB0cmFuc21pdCBmdW5jdGlvbi4N Cj4gPiArICogICAtIFRoZSAqdHhfcnNfdGhyZXNoKiB2YWx1ZSBpbmRpY2F0ZXMgdGhlIFttaW5p bXVtXSBudW1iZXIgb2YNCj4gdHJhbnNtaXQNCj4gPiArICogICAgIGRlc2NyaXB0b3JzIHRoYXQg bXVzdCBiZSBwZW5kaW5nIGluIHRoZSB0cmFuc21pdCByaW5nIGJlZm9yZSBzZXR0aW5nDQo+IHRo ZQ0KPiA+ICsgKiAgICAgUlMgYml0IG9uIGEgZGVzY3JpcHRvciBieSB0aGUgZHJpdmVyIHRyYW5z bWl0IGZ1bmN0aW9uLg0KPiA+ICsgKiAgICAgVGhlICp0eF9yc190aHJlc2gqIHZhbHVlIHNob3Vs ZCBiZSBsZXNzIG9yIGVxdWFsIHRoZW4NCj4gPiArICogICAgICp0eF9mcmVlX3RocmVzaCogdmFs dWUsIGFuZCBib3RoIG9mIHRoZW0gc2hvdWxkIGJlIGxlc3MgdGhlbg0KPiA+ICsgKiAgICAgKm5i X3R4X2Rlc2MqIC0gMy4NCj4NCj4gSSdtIG5vdCBzdXJlIHRoYXQgZXZlcnl0aGluZyBhYm92ZSBt YWtlcyBzZW5zZSBmb3IgaGFpcnBpbiBUeCBxdWV1ZS4NCj4NCg0KWW91IGFyZSByaWdodCBub3Qg YWxsIG9mIHRoZW0gbWFrZSBzZW5zZSwNCkJ1dCBzaW5jZSBJIGRvbid0IGtub3cgb3RoZXIgbmlj cyBJIHByZWZlciB0byBnaXZlIHRoZW0gdGhvc2UgdmFsdWVzLCBpZiB0aGV5IG5lZWQgdGhlbS4N CklmIHlvdSB3aXNoIEkgY2FuIGNoYW5nZSB0aGUgZG9jdW1lbnRhdGlvbi4NCg0KPiA+ICsgKiAg IC0gVGhlICp0eHFfZmxhZ3MqIG1lbWJlciBjb250YWlucyBmbGFncyB0byBwYXNzIHRvIHRoZSBU WCBxdWV1ZQ0KPiBzZXR1cA0KPiA+ICsgKiAgICAgZnVuY3Rpb24gdG8gY29uZmlndXJlIHRoZSBi ZWhhdmlvciBvZiB0aGUgVFggcXVldWUuIFRoaXMgc2hvdWxkIGJlDQo+IHNldA0KPiA+ICsgKiAg ICAgdG8gMCBpZiBubyBzcGVjaWFsIGNvbmZpZ3VyYXRpb24gaXMgcmVxdWlyZWQuDQo+ID4gKyAq ICAgICBUaGlzIEFQSSBpcyBvYnNvbGV0ZSBhbmQgd2lsbCBiZSBkZXByZWNhdGVkLiBBcHBsaWNh dGlvbnMNCj4gPiArICogICAgIHNob3VsZCBzZXQgaXQgdG8gRVRIX1RYUV9GTEFHU19JR05PUkUg YW5kIHVzZQ0KPiA+ICsgKiAgICAgdGhlIG9mZmxvYWRzIGZpZWxkIGJlbG93Lg0KPg0KPiBUaGVy ZSBpcyBubyB0eHFfZmxhZ3MgZm9yIGEgbG9uZyB0aW1lIGFscmVhZHkuIFNvLCBJJ20gd29uZGVy aW5nIHdoZW4gaXQgd2FzDQo+IGNvcGllcyBmcm9tIHJ0ZV9ldGhfdHhfcXVldWVfc2V0dXAoKS4N Cj4NCk15IGJhZCBmcm9tIDE3LjExLiB3aWxsIGZpeC4NCg0KPiA+ICsgKiAgIC0gVGhlICpvZmZs b2FkcyogbWVtYmVyIGNvbnRhaW5zIFR4IG9mZmxvYWRzIHRvIGJlIGVuYWJsZWQuDQo+ID4gKyAq ICAgICBJZiBhbiBvZmZsb2FkaW5nIHNldCBpbiB0eF9jb25mLT5vZmZsb2Fkcw0KPiA+ICsgKiAg ICAgaGFzbid0IGJlZW4gc2V0IGluIHRoZSBpbnB1dCBhcmd1bWVudCBldGhfY29uZi0+dHhtb2Rl Lm9mZmxvYWRzDQo+ID4gKyAqICAgICB0byBydGVfZXRoX2Rldl9jb25maWd1cmUoKSwgaXQgaXMg YSBuZXcgYWRkZWQgb2ZmbG9hZGluZywgaXQgbXVzdCBiZQ0KPiA+ICsgKiAgICAgcGVyLXF1ZXVl IHR5cGUgYW5kIGl0IGlzIGVuYWJsZWQgZm9yIHRoZSBxdWV1ZS4NCj4gPiArICogICAgIE5vIG5l ZWQgdG8gcmVwZWF0IGFueSBiaXQgaW4gdHhfY29uZi0+b2ZmbG9hZHMgd2hpY2ggaGFzIGFscmVh ZHkNCj4gYmVlbg0KPiA+ICsgKiAgICAgZW5hYmxlZCBpbiBydGVfZXRoX2Rldl9jb25maWd1cmUo KSBhdCBwb3J0IGxldmVsLiBBbiBvZmZsb2FkaW5nDQo+IGVuYWJsZWQNCj4gPiArICogICAgIGF0 IHBvcnQgbGV2ZWwgY2FuJ3QgYmUgZGlzYWJsZWQgYXQgcXVldWUgbGV2ZWwuDQo+DQo+IFdoaWNo IG9mZmxvYWRzIGRvIHJlYWxseSBtYWtlIHNlbnNlIGFuZCB2YWxpZCB0byB1c2UgZm9yIGhhaXJw aW4gVHggcXVldWVzPw0KPiBEbyB3ZSBuZWVkIHNlcGFyYXRlIGNhcHMgZm9yIGhhaXJwaW4gb2Zm bG9hZHM/DQo+DQpJJ20gc3VyZSB0aGF0IHdlIHdpbGwgbmVlZCBjYXBzIGZvciBleGFtcGxlIFFv UyBidXQgSSBkb24ndCBrbm93IHdoaWNoIHlldC4NCg0KDQo+ID4gKyAqDQo+ID4gKyAqICAgICBO b3RlIHRoYXQgc2V0dGluZyAqdHhfZnJlZV90aHJlc2gqIG9yICp0eF9yc190aHJlc2gqIHZhbHVl IHRvIDANCj4gZm9yY2VzDQo+ID4gKyAqICAgICB0aGUgdHJhbnNtaXQgZnVuY3Rpb24gdG8gdXNl IGRlZmF1bHQgdmFsdWVzLg0KPiA+ICsgKiBAcGFyYW0gaGFpcnBpbl9jb25mDQo+ID4gKyAqICAg VGhlIGhhaXJwaW4gYmluZGluZyBjb25maWd1cmF0aW9uLg0KPiA+ICsgKg0KPiA+ICsgKiBAcmV0 dXJuDQo+ID4gKyAqICAgLSAwOiBTdWNjZXNzLCB0aGUgdHJhbnNtaXQgcXVldWUgaXMgY29ycmVj dGx5IHNldCB1cC4NCj4gPiArICogICAtIC1FTk9NRU06IFVuYWJsZSB0byBhbGxvY2F0ZSB0aGUg dHJhbnNtaXQgcmluZyBkZXNjcmlwdG9ycy4NCj4gPiArICovDQo+ID4gK19fcnRlX2V4cGVyaW1l bnRhbA0KPiA+ICtpbnQgcnRlX2V0aF90eF9oYWlycGluX3F1ZXVlX3NldHVwDQo+ID4gKwkodWlu dDE2X3QgcG9ydF9pZCwgdWludDE2X3QgdHhfcXVldWVfaWQsDQo+ID4gKwkgdWludDE2X3QgbmJf dHhfZGVzYywgdW5zaWduZWQgaW50IHNvY2tldF9pZCwNCj4gPiArCSBjb25zdCBzdHJ1Y3QgcnRl X2V0aF90eGNvbmYgKnR4X2NvbmYsDQo+ID4gKwkgY29uc3Qgc3RydWN0IHJ0ZV9ldGhfaGFpcnBp bl9jb25mICpoYWlycGluX2NvbmYpOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gICAgKiBSZXR1cm4g dGhlIE5VTUEgc29ja2V0IHRvIHdoaWNoIGFuIEV0aGVybmV0IGRldmljZSBpcyBjb25uZWN0ZWQN Cj4gPiAgICAqDQo+ID4gICAgKiBAcGFyYW0gcG9ydF9pZA0KPiA+DQo+DQo+IFtzbmlwXQ0K