From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-eopbgr60046.outbound.protection.outlook.com [40.107.6.46]) by dpdk.org (Postfix) with ESMTP id E09311322C for ; Thu, 11 Jan 2018 18:20:11 +0100 (CET) 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; bh=fu9rHWKuoXbAGonsSegF78tM6gU8C0+TUoG9rdRzAyw=; b=ls0iAmshmegRvueRFB98T8l51nnaqR4Gd46qlkS5Bc8TYgQj54tCA5F/lmXoB+BDlfUlOVoAtItDTK9TZYiIBtgJuv6QjIf8oV3olFfVTcXhIxYZphhOyXxpt9k8zk2ICfqQKMbEIeorwjLJoyD+4M9LwdgtmkkFvYkfKd5TmcU= Received: from AM0PR0502MB3875.eurprd05.prod.outlook.com (52.133.48.17) by AM0PR0502MB3651.eurprd05.prod.outlook.com (52.133.46.144) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.386.5; Thu, 11 Jan 2018 17:20:09 +0000 Received: from AM0PR0502MB3875.eurprd05.prod.outlook.com ([fe80::400a:77ed:6956:4c5f]) by AM0PR0502MB3875.eurprd05.prod.outlook.com ([fe80::400a:77ed:6956:4c5f%13]) with mapi id 15.20.0386.008; Thu, 11 Jan 2018 17:20:09 +0000 From: Ophir Munk To: Pascal Mazon , "dev@dpdk.org" CC: Thomas Monjalon , Olga Shern Thread-Topic: [PATCH v3 2/2] net/tap: implement RSS with eBPF classifier and action Thread-Index: AQHTieGIds4n/ZQEeEeg3gix4FEI/6Ns5V2AgAIHApA= Date: Thu, 11 Jan 2018 17:20:09 +0000 Message-ID: References: <1514455745-17349-1-git-send-email-ophirmu@mellanox.com> <1515567969-27946-1-git-send-email-ophirmu@mellanox.com> <1515567969-27946-3-git-send-email-ophirmu@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=ophirmu@mellanox.com; x-originating-ip: [193.47.165.251] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; AM0PR0502MB3651; 7:/6rwow7rQCVQWpFJGMKp8WsE+LwxeeYGI6aQo7D277mR6/sVeo7rPAUTj5RchpI5wz3He9zL68tMo9OgUKAjcQs/muQjulJCp/QIx1JsaCsZ94xqTN1/NBvQKAL0GnjUQdHAHPYoa2NUnQRYjB/CPyTf6TwdJThSGtea0ABL7v7B4kICeyr0SJ/ZWmHXick+X323Q6g4d5wy+5Iz+p/saPL9zmwZNpjzlXFIsBUBZDOGE1urQNXFE2Nz35y79CgV x-ms-exchange-antispam-srfa-diagnostics: SSOS; x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: 98f3ad41-80c1-4fd1-cf42-08d55917910f x-microsoft-antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020069)(4652020)(48565401081)(5600026)(4604075)(3008032)(2017052603307)(7153060)(7193020); SRVR:AM0PR0502MB3651; x-ms-traffictypediagnostic: AM0PR0502MB3651: x-ld-processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(211171220733660); x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(6040470)(2401047)(5005006)(8121501046)(3002001)(3231023)(944501134)(93006095)(93001095)(10201501046)(6055026)(6041268)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123564045)(20161123560045)(20161123562045)(6072148)(201708071742011); SRVR:AM0PR0502MB3651; BCL:0; PCL:0; RULEID:(100000803101)(100110400095); SRVR:AM0PR0502MB3651; x-forefront-prvs: 0549E6FD50 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(346002)(366004)(376002)(39380400002)(39860400002)(396003)(199004)(189003)(13464003)(24454002)(25786009)(14454004)(229853002)(76176011)(7696005)(97736004)(478600001)(5660300001)(110136005)(2900100001)(3280700002)(8936002)(3660700001)(6116002)(3846002)(2950100002)(54906003)(99286004)(105586002)(6436002)(81156014)(316002)(2501003)(8676002)(81166006)(106356001)(5250100002)(93886005)(66066001)(68736007)(86362001)(305945005)(6246003)(2906002)(7736002)(55016002)(53546011)(6506007)(9686003)(74316002)(4326008)(102836004)(53936002)(107886003)(59450400001)(33656002)(16200700003)(53946003)(569006); DIR:OUT; SFP:1101; SCL:1; SRVR:AM0PR0502MB3651; H:AM0PR0502MB3875.eurprd05.prod.outlook.com; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: Wm6tNLWfTdJ7QIDxmt9zjda+sTbz5We2bh3fQeu/hH7+OI80arVnCCBf5m0L18E6bLFmHqs7C1lwoo2BZtxhmQ== spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM 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: 98f3ad41-80c1-4fd1-cf42-08d55917910f X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Jan 2018 17:20:09.4082 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR0502MB3651 Subject: Re: [dpdk-dev] [PATCH v3 2/2] net/tap: implement RSS with eBPF classifier and action 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: , X-List-Received-Date: Thu, 11 Jan 2018 17:20:12 -0000 SGkgUGFzY2FsLA0KUGxlYXNlIHNlZSBpbmxpbmUNCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2Ut LS0tLQ0KPiBGcm9tOiBQYXNjYWwgTWF6b24gW21haWx0bzpwYXNjYWwubWF6b25ANndpbmQuY29t XQ0KPiBTZW50OiBXZWRuZXNkYXksIEphbnVhcnkgMTAsIDIwMTggMTI6MjAgUE0NCj4gVG86IE9w aGlyIE11bmsgPG9waGlybXVAbWVsbGFub3guY29tPjsgZGV2QGRwZGsub3JnDQo+IENjOiBUaG9t YXMgTW9uamFsb24gPHRob21hc0Btb25qYWxvbi5uZXQ+OyBPbGdhIFNoZXJuDQo+IDxvbGdhc0Bt ZWxsYW5veC5jb20+DQo+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggdjMgMi8yXSBuZXQvdGFwOiBpbXBs ZW1lbnQgUlNTIHdpdGggZUJQRiBjbGFzc2lmaWVyIGFuZA0KPiBhY3Rpb24NCj4gDQo+IE9rLCBu b3cgSSBnZXQgd2h5IEFSUkFZX1NJWkUgd2FzIHdoZXJlIGl0IHdhcy4gTmV2ZXJtaW5kLg0KPiAN Cj4gSSB0aGluayB5b3UncmUgZG9pbmcgdG9vIG11Y2ggaW4gb25lIHBhdGNoLiBBcyB0aGUgc3Vi amVjdCBpcyBub3QgdHJpdmlhbCwgSQ0KPiB3b3VsZCByYXRoZXIgaGF2ZSBpdCBzcGxpdC4NCj4g Q2FuIHlvdSBtYWtlIGEgZmlyc3QgcGF0Y2ggdGhhdCBqdXN0IGFkZHMgc3VwcG9ydCBmb3Igc2V2 ZXJhbCBhY3Rpb25zLCB0aGVuDQo+IHlvdXIgcGF0Y2ggdGhhdCBhZGRzIEJQRiBydWxlIHN1cHBv cnQ/DQo+IA0KPiBPdGhlcndpc2UgeW91ciBjb2RlIGxvb2tzIG5lYXQuDQo+IA0KPiBDb21tZW50 cyBpbmxpbmUuDQoNCkFsbCBjb21tZW50cyBhY2NlcHRlZCBmb3IgdjQsIHNlZSBpbmxpbmUNCg0K PiANCj4gQmVzdCByZWdhcmRzLA0KPiANCj4gUGFzY2FsDQo+IA0KPiBPbiAxMC8wMS8yMDE4IDA4 OjA2LCBPcGhpciBNdW5rIHdyb3RlOg0KPiA+IEFkZCBCUEYgY2xhc3NpZmllciBmb3IgZWFjaCBU QVAgcXVldWUuIEFjY29yZGluZyB0byB0aGlzIGNsYXNzaWZpZXINCj4gPiBwYWNrZXRzIG1hcmtl ZCB3aXRoIGFuIFJTUyBxdWV1ZSB3aWxsIGJlIGRpcmVjdGVkIHRvIHRoaXMgcXVldWUgdXNpbmcN Cj4gPiBhIHRyYWZmaWMgY29udHJvbCB3aXRoICJza2JlZGl0IiBhY3Rpb24uDQo+ID4gVGhlIEJQ RiBjbGFzc2lmaWVyIHByb2dyYW0gaXMgZG93bmxvYWRlZCB0byB0aGUga2VybmVsIG9uY2UgcGVy IFRBUCBSeA0KPiA+IHF1ZXVlLg0KPiA+DQo+ID4gQWRkIFJTUyBCUEYgbWFwIGVudHJ5IGZvciBl YWNoIG5ldyBSU1MgcnVsZS4gQSBCUEYgbWFwIGVudHJ5IGNvbnRhaW5zDQo+ID4gdGhlIFJTUyBx dWV1ZXMgb2YgdGhhdCBydWxlLg0KPiA+DQo+ID4gQWRkIEJQRiBhY3Rpb24gZm9yIGVhY2ggbmV3 IFJTUyBydWxlIGluIHdoaWNoIHRoZSBUb2VwbGl0eiBSU1MgaGFzaCBpcw0KPiA+IGNhbGN1bGF0 ZWQgYmFzZWQgb24gTDMgYWRkcmVzc2VzIGFuZCBMNCBwb3J0cy4gTWFyayB0aGUgcGFja2V0IHdp dGgNCj4gPiB0aGUgUlNTIHF1ZXVlIGFjY29yZGluZyB0aGUgcmVzdWx0aW5nIFJTUyBoYXNoLCB0 aGVuIHJlY2xhc3NpZnkgdGhlIHBhY2tldC4NCj4gPg0KPiA+IFNpZ25lZC1vZmYtYnk6IE9waGly IE11bmsgPG9waGlybXVAbWVsbGFub3guY29tPg0KPiA+IC0tLQ0KPiA+ICBkcml2ZXJzL25ldC90 YXAvTWFrZWZpbGUgICAgICAgIHwgIDIwICsrDQo+ID4gIGRyaXZlcnMvbmV0L3RhcC9ydGVfZXRo X3RhcC5oICAgfCAgIDkgKy0NCj4gPiAgZHJpdmVycy9uZXQvdGFwL3RhcF9icGZfaW5zbnMuYyB8 ICA2MiArKystDQo+ID4gIGRyaXZlcnMvbmV0L3RhcC90YXBfZmxvdy5jICAgICAgfCA2MzUNCj4g KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLQ0KPiA+ICBkcml2ZXJzL25l dC90YXAvdGFwX2Zsb3cuaCAgICAgIHwgIDEwICsNCj4gPiAgZHJpdmVycy9uZXQvdGFwL3RhcF9y c3MuaCAgICAgICB8ICAzMiArKw0KPiA+ICBkcml2ZXJzL25ldC90YXAvdGFwX3RjbXNncy5oICAg IHwgICA0ICsNCj4gPiAgNyBmaWxlcyBjaGFuZ2VkLCA2NzUgaW5zZXJ0aW9ucygrKSwgOTcgZGVs ZXRpb25zKC0pICBjcmVhdGUgbW9kZQ0KPiA+IDEwMDY0NCBkcml2ZXJzL25ldC90YXAvdGFwX3Jz cy5oDQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGFwL01ha2VmaWxlIGIvZHJp dmVycy9uZXQvdGFwL01ha2VmaWxlIGluZGV4DQo+ID4gZmVhYTViNy4uMGU3YzQ5NCAxMDA2NDQN Cj4gPiAtLS0gYS9kcml2ZXJzL25ldC90YXAvTWFrZWZpbGUNCj4gPiArKysgYi9kcml2ZXJzL25l dC90YXAvTWFrZWZpbGUNCj4gPiBAQCAtNjAsNiArNjAsMjYgQEAgdGFwX2F1dG9jb25mLmgubmV3 OiAkKFJURV9TREspL2J1aWxkdG9vbHMvYXV0by0NCj4gY29uZmlnLWguc2gNCj4gPiAgCQllbnVt IFRDQV9GTE9XRVJfS0VZX1ZMQU5fUFJJTyBcDQo+ID4gIAkJJChBVVRPQ09ORl9PVVRQVVQpDQo+ ID4gIAkkUSBzaCAtLSAnJDwnICckQCcgXA0KPiA+ICsJCUhBVkVfVENfQlBGIFwNCj4gPiArCQls aW51eC9wa3RfY2xzLmggXA0KPiA+ICsJCWVudW0gVENBX0JQRl9VTlNQRUMgXA0KPiA+ICsJCSQo QVVUT0NPTkZfT1VUUFVUKQ0KPiA+ICsJJFEgc2ggLS0gJyQ8JyAnJEAnIFwNCj4gPiArCQlIQVZF X1RDX0JQRl9GRCBcDQo+ID4gKwkJbGludXgvcGt0X2Nscy5oIFwNCj4gPiArCQllbnVtIFRDQV9C UEZfRkQgXA0KPiA+ICsJCSQoQVVUT0NPTkZfT1VUUFVUKQ0KPiA+ICsJJFEgc2ggLS0gJyQ8JyAn JEAnIFwNCj4gPiArCQlIQVZFX1RDX0FDVF9CUEYgXA0KPiA+ICsJCWxpbnV4L3RjX2FjdC90Y19i cGYuaCBcDQo+ID4gKwkJZW51bSBUQ0FfQUNUX0JQRl9VTlNQRUMgXA0KPiA+ICsJCSQoQVVUT0NP TkZfT1VUUFVUKQ0KPiA+ICsJJFEgc2ggLS0gJyQ8JyAnJEAnIFwNCj4gPiArCQlIQVZFX1RDX0FD VF9CUEZfRkQgXA0KPiA+ICsJCWxpbnV4L3RjX2FjdC90Y19icGYuaCBcDQo+ID4gKwkJZW51bSBU Q0FfQUNUX0JQRl9GRCBcDQo+ID4gKwkJJChBVVRPQ09ORl9PVVRQVVQpDQo+ID4gKwkkUSBzaCAt LSAnJDwnICckQCcgXA0KPiA+ICAJCUhBVkVfQlBGX1BST0dfTE9BRCBcDQo+ID4gIAkJbGludXgv YnBmLmggXA0KPiA+ICAJCWVudW0gQlBGX1BST0dfTE9BRCBcDQo+ID4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvbmV0L3RhcC9ydGVfZXRoX3RhcC5oDQo+ID4gYi9kcml2ZXJzL25ldC90YXAvcnRlX2V0 aF90YXAuaCBpbmRleCA4MjlmMzJmLi5jMTg1NDczIDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMv bmV0L3RhcC9ydGVfZXRoX3RhcC5oDQo+ID4gKysrIGIvZHJpdmVycy9uZXQvdGFwL3J0ZV9ldGhf dGFwLmgNCj4gPiBAQCAtNDUsNyArNDUsNyBAQA0KPiA+ICAjaW5jbHVkZSA8cnRlX2V0aGVyLmg+ DQo+ID4NCj4gPiAgI2lmZGVmIElGRl9NVUxUSV9RVUVVRQ0KPiA+IC0jZGVmaW5lIFJURV9QTURf VEFQX01BWF9RVUVVRVMJMTYNCj4gPiArI2RlZmluZSBSVEVfUE1EX1RBUF9NQVhfUVVFVUVTCVRB UF9NQVhfUVVFVUVTDQo+ID4gICNlbHNlDQo+ID4gICNkZWZpbmUgUlRFX1BNRF9UQVBfTUFYX1FV RVVFUwkxDQo+ID4gICNlbmRpZg0KPiA+IEBAIC05MCw2ICs5MCwxMyBAQCBzdHJ1Y3QgcG1kX2lu dGVybmFscyB7DQo+ID4gIAlpbnQgaW9jdGxfc29jazsgICAgICAgICAgICAgICAgICAgLyogc29j a2V0IGZvciBpb2N0bCBjYWxscyAqLw0KPiA+ICAJaW50IG5sc2tfZmQ7ICAgICAgICAgICAgICAg ICAgICAgIC8qIE5ldGxpbmsgc29ja2V0IGZkICovDQo+ID4gIAlpbnQgZmxvd19pc29sYXRlOyAg ICAgICAgICAgICAgICAgLyogMSBpZiBmbG93IGlzb2xhdGlvbiBpcyBlbmFibGVkICovDQo+ID4g KwlpbnQgZmxvd2VyX3N1cHBvcnQ7ICAgICAgICAgICAgICAgLyogMSBpZiBrZXJuZWwgc3VwcG9y dHMsIGVsc2UgMCAqLw0KPiA+ICsJaW50IGZsb3dlcl92bGFuX3N1cHBvcnQ7ICAgICAgICAgIC8q IDEgaWYga2VybmVsIHN1cHBvcnRzLCBlbHNlIDAgKi8NCj4gPiArCWludCByc3NfZW5hYmxlZDsg ICAgICAgICAgICAgICAgICAvKiAxIGlmIFJTUyBpcyBlbmFibGVkLCBlbHNlIDAgKi8NCj4gPiAr CS8qIGltcGxpY2l0IHJ1bGVzIHNldCB3aGVuIFJTUyBpcyBlbmFibGVkICovDQo+ID4gKwlpbnQg bWFwX2ZkOyAgICAgICAgICAgICAgICAgICAgICAgLyogQlBGIFJTUyBtYXAgZmQgKi8NCj4gPiAr CWludCBicGZfZmRbUlRFX1BNRF9UQVBfTUFYX1FVRVVFU107LyogTGlzdCBvZiBicGYgZmRzIHBl cg0KPiBxdWV1ZSAqLw0KPiA+ICsJTElTVF9IRUFEKHRhcF9yc3NfZmxvd3MsIHJ0ZV9mbG93KSBy c3NfZmxvd3M7DQo+ID4gIAlMSVNUX0hFQUQodGFwX2Zsb3dzLCBydGVfZmxvdykgZmxvd3M7ICAg ICAgICAvKiBydGVfZmxvdyBydWxlcyAqLw0KPiA+ICAJLyogaW1wbGljaXQgcnRlX2Zsb3cgcnVs ZXMgc2V0IHdoZW4gYSByZW1vdGUgZGV2aWNlIGlzIGFjdGl2ZSAqLw0KPiA+ICAJTElTVF9IRUFE KHRhcF9pbXBsaWNpdF9mbG93cywgcnRlX2Zsb3cpIGltcGxpY2l0X2Zsb3dzOyBkaWZmIC0tZ2l0 DQo+ID4gYS9kcml2ZXJzL25ldC90YXAvdGFwX2JwZl9pbnNucy5jIGIvZHJpdmVycy9uZXQvdGFw L3RhcF9icGZfaW5zbnMuYw0KPiA+IGluZGV4IDI1YWE4MmMuLmJmOTVmMmQgMTAwNjQ0DQo+ID4g LS0tIGEvZHJpdmVycy9uZXQvdGFwL3RhcF9icGZfaW5zbnMuYw0KPiA+ICsrKyBiL2RyaXZlcnMv bmV0L3RhcC90YXBfYnBmX2luc25zLmMNCj4gPiBAQCAtMTgzMCw3ICsxODMwLDcgQEAgc3RhdGlj IGludCBicGZfbG9hZChlbnVtIGJwZl9wcm9nX3R5cGUgdHlwZSwNCj4gPiAgCQkgIHNpemVfdCBp bnNuc19jbnQsDQo+ID4gIAkJICBjb25zdCBjaGFyICpsaWNlbnNlKQ0KPiA+ICB7DQo+ID4gLQl1 bmlvbiBicGZfYXR0ciBhdHRyOw0KPiA+ICsJdW5pb24gYnBmX2F0dHIgYXR0ciA9IHt9Ow0KPiAN Cj4gU2hvdWxkIGJlIHNxdWFzaGVkIGluIHByZXZpb3VzIGNvbW1pdC4NCj4gDQoNCkRvbmUgZm9y IHY0DQoNCj4gPg0KPiA+ICAJYnplcm8oJmF0dHIsIHNpemVvZihhdHRyKSk7DQo+ID4gIAlhdHRy LnByb2dfdHlwZSA9IHR5cGU7DQo+ID4gQEAgLTE4NDMsMyArMTg0Myw2MyBAQCBzdGF0aWMgaW50 IGJwZl9sb2FkKGVudW0gYnBmX3Byb2dfdHlwZSB0eXBlLA0KPiA+DQo+ID4gIAlyZXR1cm4gc3lz X2JwZihCUEZfUFJPR19MT0FELCAmYXR0ciwgc2l6ZW9mKGF0dHIpKTsgIH0NCj4gPiArDQo+ID4g Ky8qKg0KPiA+ICsgKiBDcmVhdGUgQlBGIG1hcCBmb3IgUlNTIHJ1bGVzDQo+ID4gKyAqDQo+ID4g KyAqIEBwYXJhbVtpbl0ga2V5X3NpemUNCj4gPiArICogICBtYXAgUlNTIGtleSBzaXplDQo+ID4g KyAqDQo+ID4gKyAqIEBwYXJhbVtpbl0gdmFsdWVfc2l6ZQ0KPiA+ICsgKiAgIE1hcCBSU1MgdmFs dWUgc2l6ZQ0KPiA+ICsgKg0KPiA+ICsgKiBAcGFyYW1baW5dIG1heF9lbnRyaWVzDQo+ID4gKyAq ICAgTWFwIG1heCBudW1iZXIgb2YgUlNTIGVudHJpZXMgKGxpbWl0IG9uIG1heCBSU1MgcnVsZXMp DQo+ID4gKyAqDQo+ID4gKyAqIEByZXR1cm4NCj4gPiArICogICAtMSBpZiBCUEYgbWFwIGNvdWxk bid0IGJlIGNyZWF0ZWQsIG1hcCBmZCBvdGhlcndpc2UNCj4gPiArICovDQo+ID4gK2ludCB0YXBf Zmxvd19icGZfcnNzX21hcF9jcmVhdGUodW5zaWduZWQgaW50IGtleV9zaXplLA0KPiA+ICsJCXVu c2lnbmVkIGludCB2YWx1ZV9zaXplLA0KPiA+ICsJCXVuc2lnbmVkIGludCBtYXhfZW50cmllcykN Cj4gPiArew0KPiA+ICsJdW5pb24gYnBmX2F0dHIgYXR0ciA9IHt9Ow0KPiA+ICsNCj4gPiArCWJ6 ZXJvKCZhdHRyLCBzaXplb2YoYXR0cikpOw0KPiA+ICsJYXR0ci5tYXBfdHlwZSAgICA9IEJQRl9N QVBfVFlQRV9IQVNIOw0KPiA+ICsJYXR0ci5rZXlfc2l6ZSAgICA9IGtleV9zaXplOw0KPiA+ICsJ YXR0ci52YWx1ZV9zaXplICA9IHZhbHVlX3NpemU7DQo+ID4gKwlhdHRyLm1heF9lbnRyaWVzID0g bWF4X2VudHJpZXM7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHN5c19icGYoQlBGX01BUF9DUkVBVEUs ICZhdHRyLCBzaXplb2YoYXR0cikpOyB9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogVXBkYXRl IFJTUyBlbnRyeSBpbiBCUEYgbWFwDQo+ID4gKyAqDQo+ID4gKyAqIEBwYXJhbVtpbl0gZmQNCj4g PiArICogICBSU1MgbWFwIGZkDQo+ID4gKyAqDQo+ID4gKyAqIEBwYXJhbVtpbl0ga2V5DQo+ID4g KyAqICAgUG9pbnRlciB0byBSU1Mga2V5IHdob3NlIGVudHJ5IGlzIHVwZGF0ZWQNCj4gPiArICoN Cj4gPiArICogQHBhcmFtW2luXSB2YWx1ZQ0KPiA+ICsgKiAgIFBvaW50ZXIgdG8gUlNTIG5ldyB1 cGRhdGVkIHZhbHVlDQo+ID4gKyAqDQo+ID4gKyAqIEByZXR1cm4NCj4gPiArICogICAtMSBpZiBS U1MgZW50cnkgZmFpbGVkIHRvIGJlIHVwZGF0ZWQsIDAgb3RoZXJ3aXNlDQo+ID4gKyAqLw0KPiA+ ICtpbnQgdGFwX2Zsb3dfYnBmX3VwZGF0ZV9yc3NfZWxlbShpbnQgZmQsIHZvaWQgKmtleSwgdm9p ZCAqdmFsdWUpIHsNCj4gPiArCXVuaW9uIGJwZl9hdHRyIGF0dHIgPSB7fTsNCj4gPiArDQo+ID4g KwliemVybygmYXR0ciwgc2l6ZW9mKGF0dHIpKTsNCj4gPiArDQo+ID4gKwlhdHRyLm1hcF90eXBl ID0gQlBGX01BUF9UWVBFX0hBU0g7DQo+ID4gKwlhdHRyLm1hcF9mZCA9IGZkOw0KPiA+ICsJYXR0 ci5rZXkgPSBwdHJfdG9fdTY0KGtleSk7DQo+ID4gKwlhdHRyLnZhbHVlID0gcHRyX3RvX3U2NCh2 YWx1ZSk7DQo+ID4gKwlhdHRyLmZsYWdzID0gQlBGX0FOWTsNCj4gPiArDQo+ID4gKwlyZXR1cm4g c3lzX2JwZihCUEZfTUFQX1VQREFURV9FTEVNLCAmYXR0ciwgc2l6ZW9mKGF0dHIpKTsgfQ0KPiA+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90YXAvdGFwX2Zsb3cuYyBiL2RyaXZlcnMvbmV0L3Rh cC90YXBfZmxvdy5jDQo+ID4gaW5kZXggOTBiMjY1NC4uN2M1MTYxNCAxMDA2NDQNCj4gPiAtLS0g YS9kcml2ZXJzL25ldC90YXAvdGFwX2Zsb3cuYw0KPiA+ICsrKyBiL2RyaXZlcnMvbmV0L3RhcC90 YXBfZmxvdy5jDQo+ID4gQEAgLTMzLDcgKzMzLDkgQEANCj4gPg0KPiA+ICAjaW5jbHVkZSA8ZXJy bm8uaD4NCj4gPiAgI2luY2x1ZGUgPHN0cmluZy5oPg0KPiA+ICsjaW5jbHVkZSA8dW5pc3RkLmg+ DQo+ID4gICNpbmNsdWRlIDxzeXMvcXVldWUuaD4NCj4gPiArI2luY2x1ZGUgPHN5cy9yZXNvdXJj ZS5oPg0KPiA+DQo+ID4gICNpbmNsdWRlIDxydGVfYnl0ZW9yZGVyLmg+DQo+ID4gICNpbmNsdWRl IDxydGVfamhhc2guaD4NCj4gPiBAQCAtNDIsNiArNDQsNyBAQA0KPiA+ICAjaW5jbHVkZSA8dGFw X2Zsb3cuaD4NCj4gPiAgI2luY2x1ZGUgPHRhcF9hdXRvY29uZi5oPg0KPiA+ICAjaW5jbHVkZSA8 dGFwX3RjbXNncy5oPg0KPiA+ICsjaW5jbHVkZSA8dGFwX3Jzcy5oPg0KPiA+DQo+ID4gICNpZm5k ZWYgSEFWRV9UQ19GTE9XRVINCj4gPiAgLyoNCj4gPiBAQCAtODEsMTIgKzg0LDc4IEBAIGVudW0g ew0KPiA+ICAJVENBX0ZMT1dFUl9LRVlfVkxBTl9FVEhfVFlQRSwgICAvKiBiZTE2ICovDQo+ID4g IH07DQo+ID4gICNlbmRpZg0KPiA+ICsvKg0KPiA+ICsgKiBGb3Iga2VybmVscyA8IDQuMiBCUEYg cmVsYXRlZCBlbnVtcyBtYXkgbm90IGJlIGRlZmluZWQuDQo+ID4gKyAqIFJ1bnRpbWUgY2hlY2tz IHdpbGwgYmUgY2FycmllZCBvdXQgdG8gZ3JhY2VmdWxseSByZXBvcnQgb24gVEMNCj4gPiArbWVz c2FnZXMgdGhhdA0KPiA+ICsgKiBhcmUgcmVqZWN0ZWQgYnkgdGhlIGtlcm5lbC4gUmVqZWN0aW9u IHJlYXNvbnMgbWF5IGJlIGR1ZSB0bzoNCj4gPiArICogMS4gZW51bSBpcyBub3QgZGVmaW5lZA0K PiA+ICsgKiAyLiBlbnVtIGlzIGRlZmluZWQgYnV0IGtlcmVubCBpcyBub3QgY29uZmlndXJlZCB0 byBzdXBwb3J0IEJQRg0KPiA+ICtzeXN0ZW0gY2FsbHMsDQo+IA0KPiBUeXBvIGF0ICJrZXJlbmwi Lg0KDQpGaXhlZCBmb3IgdjQNCg0KPiANCj4gPiArICogICAgQlBGIGNsYXNzaWZpY2F0aW9ucyBv ciBCUEYgYWN0aW9ucy4NCj4gPiArICovDQo+ID4gKyNpZm5kZWYgSEFWRV9UQ19CUEYNCj4gPiAr ZW51bSB7DQo+ID4gKwlUQ0FfQlBGX1VOU1BFQywNCj4gPiArCVRDQV9CUEZfQUNULA0KPiA+ICsJ VENBX0JQRl9QT0xJQ0UsDQo+ID4gKwlUQ0FfQlBGX0NMQVNTSUQsDQo+ID4gKwlUQ0FfQlBGX09Q U19MRU4sDQo+ID4gKwlUQ0FfQlBGX09QUywNCj4gPiArfTsNCj4gPiArI2VuZGlmDQo+ID4gKyNp Zm5kZWYgSEFWRV9UQ19CUEZfRkQNCj4gPiArZW51bSB7DQo+ID4gKwlUQ0FfQlBGX0ZEID0gVENB X0JQRl9PUFMgKyAxLA0KPiA+ICsJVENBX0JQRl9OQU1FLA0KPiA+ICt9Ow0KPiA+ICsjZW5kaWYN Cj4gPiArI2lmbmRlZiBIQVZFX1RDX0FDVF9CUEYNCj4gPiArI2RlZmluZSB0Y19nZW4gXA0KPiA+ ICsJX191MzIgICAgICAgICAgICAgICAgIGluZGV4OyBcDQo+ID4gKwlfX3UzMiAgICAgICAgICAg ICAgICAgY2FwYWI7IFwNCj4gPiArCWludCAgICAgICAgICAgICAgICAgICBhY3Rpb247IFwNCj4g PiArCWludCAgICAgICAgICAgICAgICAgICByZWZjbnQ7IFwNCj4gPiArCWludCAgICAgICAgICAg ICAgICAgICBiaW5kY250DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgdGNfYWN0X2JwZiB7DQo+ID4gKwl0 Y19nZW47DQo+ID4gK307DQo+ID4gKw0KPiA+ICtlbnVtIHsNCj4gPiArCVRDQV9BQ1RfQlBGX1VO U1BFQywNCj4gPiArCVRDQV9BQ1RfQlBGX1RNLA0KPiA+ICsJVENBX0FDVF9CUEZfUEFSTVMsDQo+ ID4gKwlUQ0FfQUNUX0JQRl9PUFNfTEVOLA0KPiA+ICsJVENBX0FDVF9CUEZfT1BTLA0KPiA+ICt9 Ow0KPiA+ICsNCj4gPiArI2VuZGlmDQo+ID4gKyNpZm5kZWYgSEFWRV9UQ19BQ1RfQlBGX0ZEDQo+ ID4gK2VudW0gew0KPiA+ICsJVENBX0FDVF9CUEZfRkQgPSBUQ0FfQUNUX0JQRl9PUFMgKyAxLA0K PiA+ICsJVENBX0FDVF9CUEZfTkFNRSwNCj4gPiArfTsNCj4gPiArI2VuZGlmDQo+ID4gKw0KPiA+ ICsvKiBSU1Mga2V5IG1hbmFnZW1lbnQgKi8NCj4gPiArZW51bSBicGZfcnNzX2tleV9lIHsNCj4g PiArCUtFWV9DTURfR0VUID0gMSwNCj4gPiArCUtFWV9DTURfUkVMRUFTRSwNCj4gPiArCUtFWV9D TURfSU5JVCwNCj4gPiArCUtFWV9DTURfREVJTklULA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArZW51 bSBrZXlfc3RhdHVzX2Ugew0KPiA+ICsJS0VZX1NUQVRfVU5TUEVDLA0KPiA+ICsJS0VZX1NUQVRf VVNFRCwNCj4gPiArCUtFWV9TVEFUX0FWQUlMQUJMRSwNCj4gPiArfTsNCj4gPg0KPiA+ICAjZGVm aW5lIElTT0xBVEVfSEFORExFIDENCj4gPg0KPiA+ICBzdHJ1Y3QgcnRlX2Zsb3cgew0KPiA+ICAJ TElTVF9FTlRSWShydGVfZmxvdykgbmV4dDsgLyogUG9pbnRlciB0byB0aGUgbmV4dCBydGVfZmxv dyBzdHJ1Y3R1cmUNCj4gKi8NCj4gPiAgCXN0cnVjdCBydGVfZmxvdyAqcmVtb3RlX2Zsb3c7IC8q IGFzc29jaWF0ZWQgcmVtb3RlIGZsb3cgKi8NCj4gPiArCWludCBicGZfZmRbU0VDX01BWF07IC8q IGxpc3Qgb2YgYmZzIGZkcyBwZXIgRUxGIHNlY3Rpb24gKi8NCj4gPiAgCXN0cnVjdCBubG1zZyBt c2c7DQo+ID4gIH07DQo+ID4NCj4gPiBAQCAtMTA0LDYgKzE3MywyNCBAQCBzdHJ1Y3QgcmVtb3Rl X3J1bGUgew0KPiA+ICAJaW50IG1pcnJlZDsNCj4gPiAgfTsNCj4gPg0KPiA+ICtzdHJ1Y3QgYWN0 aW9uX2RhdGEgew0KPiA+ICsJY2hhciBpZFsxNl07DQo+ID4gKw0KPiA+ICsJdW5pb24gew0KPiA+ ICsJCXN0cnVjdCB0Y19nYWN0IGdhY3Q7DQo+ID4gKwkJc3RydWN0IHRjX21pcnJlZCBtaXJyZWQ7 DQo+ID4gKwkJc3RydWN0IHNrYmVkaXQgew0KPiA+ICsJCQlzdHJ1Y3QgdGNfc2tiZWRpdCBza2Jl ZGl0Ow0KPiA+ICsJCQl1aW50MTZfdCBxdWV1ZTsNCj4gPiArCQl9IHNrYmVkaXQ7DQo+ID4gKwkJ c3RydWN0IGJwZiB7DQo+ID4gKwkJCXN0cnVjdCB0Y19hY3RfYnBmIGJwZjsNCj4gPiArCQkJaW50 IGJwZl9mZDsNCj4gPiArCQkJY29uc3QgY2hhciAqYW5ub3RhdGlvbjsNCj4gPiArCQl9IGJwZjsN Cj4gPiArCX07DQo+ID4gK307DQo+ID4gKw0KPiA+ICBzdGF0aWMgaW50IHRhcF9mbG93X2NyZWF0 ZV9ldGgoY29uc3Qgc3RydWN0IHJ0ZV9mbG93X2l0ZW0gKml0ZW0sIHZvaWQNCj4gPiAqZGF0YSk7 ICBzdGF0aWMgaW50IHRhcF9mbG93X2NyZWF0ZV92bGFuKGNvbnN0IHN0cnVjdCBydGVfZmxvd19p dGVtDQo+ID4gKml0ZW0sIHZvaWQgKmRhdGEpOyAgc3RhdGljIGludCB0YXBfZmxvd19jcmVhdGVf aXB2NChjb25zdCBzdHJ1Y3QNCj4gPiBydGVfZmxvd19pdGVtICppdGVtLCB2b2lkICpkYXRhKTsg QEAgLTEzNCw2ICsyMjEsMTQgQEANCj4gdGFwX2Zsb3dfaXNvbGF0ZShzdHJ1Y3QgcnRlX2V0aF9k ZXYgKmRldiwNCj4gPiAgCQkgaW50IHNldCwNCj4gPiAgCQkgc3RydWN0IHJ0ZV9mbG93X2Vycm9y ICplcnJvcik7DQo+ID4NCj4gPiArc3RhdGljIGludCBicGZfcnNzX2tleShlbnVtIGJwZl9yc3Nf a2V5X2UgY21kLCBfX3UzMiAqa2V5X2lkeCk7DQo+ID4gK3N0YXRpYyBpbnQgcnNzX2VuYWJsZShz dHJ1Y3QgcG1kX2ludGVybmFscyAqcG1kLA0KPiA+ICsJCQljb25zdCBzdHJ1Y3QgcnRlX2Zsb3df YXR0ciAqYXR0ciwNCj4gPiArCQkJc3RydWN0IHJ0ZV9mbG93X2Vycm9yICplcnJvcik7DQo+ID4g K3N0YXRpYyBpbnQgcnNzX2FkZF9hY3Rpb25zKHN0cnVjdCBydGVfZmxvdyAqZmxvdywgc3RydWN0 IHBtZF9pbnRlcm5hbHMNCj4gKnBtZCwNCj4gPiArCQkJY29uc3Qgc3RydWN0IHJ0ZV9mbG93X2Fj dGlvbl9yc3MgKnJzcywNCj4gPiArCQkJc3RydWN0IHJ0ZV9mbG93X2Vycm9yICplcnJvcik7DQo+ ID4gKw0KPiA+ICBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0ZV9mbG93X29wcyB0YXBfZmxvd19vcHMg PSB7DQo+ID4gIAkudmFsaWRhdGUgPSB0YXBfZmxvd192YWxpZGF0ZSwNCj4gPiAgCS5jcmVhdGUg PSB0YXBfZmxvd19jcmVhdGUsDQo+ID4gQEAgLTgxOSwxMTEgKzkxNCw5NyBAQCB0YXBfZmxvd19p dGVtX3ZhbGlkYXRlKGNvbnN0IHN0cnVjdA0KPiA+IHJ0ZV9mbG93X2l0ZW0gKml0ZW0sICB9DQo+ ID4NCj4gPiAgLyoqDQo+ID4gLSAqIFRyYW5zZm9ybSBhIERST1AvUEFTU1RIUlUgYWN0aW9uIGl0 ZW0gaW4gdGhlIHByb3ZpZGVkIGZsb3cgZm9yIFRDLg0KPiA+ICsgKiBDb25maWd1cmUgdGhlIGtl cm5lbCB3aXRoIGEgVEMgYWN0aW9uIGFuZCBpdHMgY29uZmlndXJlZA0KPiA+ICsgcGFyYW1ldGVy cw0KPiA+ICsgKiBIYW5kbGVkIGFjdGlvbnM6ICJnYWN0IiwgIm1pcnJlZCIsICJza2JlZGl0Iiwg ImJwZiINCj4gPiAgICoNCj4gPiAtICogQHBhcmFtW2luLCBvdXRdIGZsb3cNCj4gPiAtICogICBG bG93IHRvIGJlIGZpbGxlZC4NCj4gPiAtICogQHBhcmFtW2luXSBhY3Rpb24NCj4gPiAtICogICBB cHByb3ByaWF0ZSBhY3Rpb24gdG8gYmUgc2V0IGluIHRoZSBUQ0FfR0FDVF9QQVJNUyBzdHJ1Y3R1 cmUuDQo+ID4gKyAqIEBwYXJhbVtpbl0gZmxvdw0KPiA+ICsgKiAgIFBvaW50ZXIgdG8gcnRlIGZs b3cgY29udGFpbmluZyB0aGUgbmV0bGluayBtZXNzYWdlDQo+ID4gICAqDQo+ID4gLSAqIEByZXR1 cm4NCj4gPiAtICogICAwIGlmIGNoZWNrcyBhcmUgYWxyaWdodCwgLTEgb3RoZXJ3aXNlLg0KPiA+ IC0gKi8NCj4gPiAtc3RhdGljIGludA0KPiA+IC1hZGRfYWN0aW9uX2dhY3Qoc3RydWN0IHJ0ZV9m bG93ICpmbG93LCBpbnQgYWN0aW9uKSAtew0KPiA+IC0Jc3RydWN0IG5sbXNnICptc2cgPSAmZmxv dy0+bXNnOw0KPiA+IC0Jc2l6ZV90IGFjdF9pbmRleCA9IDE7DQo+ID4gLQlzdHJ1Y3QgdGNfZ2Fj dCBwID0gew0KPiA+IC0JCS5hY3Rpb24gPSBhY3Rpb24NCj4gPiAtCX07DQo+ID4gLQ0KPiA+IC0J aWYgKHRhcF9ubGF0dHJfbmVzdGVkX3N0YXJ0KG1zZywgVENBX0ZMT1dFUl9BQ1QpIDwgMCkNCj4g PiAtCQlyZXR1cm4gLTE7DQo+ID4gLQlpZiAodGFwX25sYXR0cl9uZXN0ZWRfc3RhcnQobXNnLCBh Y3RfaW5kZXgrKykgPCAwKQ0KPiA+IC0JCXJldHVybiAtMTsNCj4gPiAtCXRhcF9ubGF0dHJfYWRk KCZtc2ctPm5oLCBUQ0FfQUNUX0tJTkQsIHNpemVvZigiZ2FjdCIpLCAiZ2FjdCIpOw0KPiA+IC0J aWYgKHRhcF9ubGF0dHJfbmVzdGVkX3N0YXJ0KG1zZywgVENBX0FDVF9PUFRJT05TKSA8IDApDQo+ ID4gLQkJcmV0dXJuIC0xOw0KPiA+IC0JdGFwX25sYXR0cl9hZGQoJm1zZy0+bmgsIFRDQV9HQUNU X1BBUk1TLCBzaXplb2YocCksICZwKTsNCj4gPiAtCXRhcF9ubGF0dHJfbmVzdGVkX2ZpbmlzaCht c2cpOyAvKiBuZXN0ZWQgVENBX0FDVF9PUFRJT05TICovDQo+ID4gLQl0YXBfbmxhdHRyX25lc3Rl ZF9maW5pc2gobXNnKTsgLyogbmVzdGVkIGFjdF9pbmRleCAqLw0KPiA+IC0JdGFwX25sYXR0cl9u ZXN0ZWRfZmluaXNoKG1zZyk7IC8qIG5lc3RlZCBUQ0FfRkxPV0VSX0FDVCAqLw0KPiA+IC0JcmV0 dXJuIDA7DQo+ID4gLX0NCj4gPiAtDQo+ID4gLS8qKg0KPiA+IC0gKiBUcmFuc2Zvcm0gYSBNSVJS RUQgYWN0aW9uIGl0ZW0gaW4gdGhlIHByb3ZpZGVkIGZsb3cgZm9yIFRDLg0KPiA+ICsgKiBAcGFy YW1baW4sIG91dF0gYWN0X2luZGV4DQo+ID4gKyAqICAgUG9pbnRlciB0byBhY3Rpb24gc2VxdWVu Y2UgbnVtYmVyIGluIHRoZSBUQyBjb21tYW5kDQo+ID4gICAqDQo+ID4gLSAqIEBwYXJhbVtpbiwg b3V0XSBmbG93DQo+ID4gLSAqICAgRmxvdyB0byBiZSBmaWxsZWQuDQo+ID4gLSAqIEBwYXJhbVtp bl0gaWZpbmRleA0KPiA+IC0gKiAgIE5ldGRldmljZSBpZmluZGV4LCB3aGVyZSB0byBtaXJyb3Iv cmVkaXJlY3QgcGFja2V0IHRvLg0KPiA+IC0gKiBAcGFyYW1baW5dIGFjdGlvbl90eXBlDQo+ID4g LSAqICAgRWl0aGVyIFRDQV9FR1JFU1NfUkVESVIgZm9yIHJlZGlyZWN0aW9uIG9yIFRDQV9FR1JF U1NfTUlSUk9SIGZvcg0KPiBtaXJyb3JpbmcuDQo+ID4gKyAqIEBwYXJhbVtpbl0gYWRhdGENCj4g PiArICogIFBvaW50ZXIgdG8gc3RydWN0IGhvbGRpbmcgdGhlIGFjdGlvbiBwYXJhbWV0ZXJzDQo+ ID4gICAqDQo+ID4gICAqIEByZXR1cm4NCj4gPiAtICogICAwIGlmIGNoZWNrcyBhcmUgYWxyaWdo dCwgLTEgb3RoZXJ3aXNlLg0KPiA+ICsgKiAgIC0xIG9uIGZhaWx1cmUsIDAgb24gc3VjY2Vzcw0K PiA+ICAgKi8NCj4gPiAgc3RhdGljIGludA0KPiA+IC1hZGRfYWN0aW9uX21pcnJlZChzdHJ1Y3Qg cnRlX2Zsb3cgKmZsb3csIHVpbnQxNl90IGlmaW5kZXgsIHVpbnQxNl90DQo+ID4gYWN0aW9uX3R5 cGUpDQo+ID4gK2FkZF9hY3Rpb24oc3RydWN0IHJ0ZV9mbG93ICpmbG93LCBzaXplX3QgKmFjdF9p bmRleCwgc3RydWN0DQo+ID4gK2FjdGlvbl9kYXRhICphZGF0YSkNCj4gPiAgew0KPiA+ICAJc3Ry dWN0IG5sbXNnICptc2cgPSAmZmxvdy0+bXNnOw0KPiA+IC0Jc2l6ZV90IGFjdF9pbmRleCA9IDE7 DQo+ID4gLQlzdHJ1Y3QgdGNfbWlycmVkIHAgPSB7DQo+ID4gLQkJLmVhY3Rpb24gPSBhY3Rpb25f dHlwZSwNCj4gPiAtCQkuaWZpbmRleCA9IGlmaW5kZXgsDQo+ID4gLQl9Ow0KPiA+DQo+ID4gLQlp ZiAodGFwX25sYXR0cl9uZXN0ZWRfc3RhcnQobXNnLCBUQ0FfRkxPV0VSX0FDVCkgPCAwKQ0KPiA+ IC0JCXJldHVybiAtMTsNCj4gPiAtCWlmICh0YXBfbmxhdHRyX25lc3RlZF9zdGFydChtc2csIGFj dF9pbmRleCsrKSA8IDApDQo+ID4gKwlpZiAodGFwX25sYXR0cl9uZXN0ZWRfc3RhcnQobXNnLCAo KmFjdF9pbmRleCkrKykgPCAwKQ0KPiA+ICAJCXJldHVybiAtMTsNCj4gPiAtCXRhcF9ubGF0dHJf YWRkKCZtc2ctPm5oLCBUQ0FfQUNUX0tJTkQsIHNpemVvZigibWlycmVkIiksDQo+ICJtaXJyZWQi KTsNCj4gPiArDQo+ID4gKwl0YXBfbmxhdHRyX2FkZCgmbXNnLT5uaCwgVENBX0FDVF9LSU5ELA0K PiA+ICsJCQkJc3RybGVuKGFkYXRhLT5pZCkgKyAxLCBhZGF0YS0+aWQpOw0KPiA+ICAJaWYgKHRh cF9ubGF0dHJfbmVzdGVkX3N0YXJ0KG1zZywgVENBX0FDVF9PUFRJT05TKSA8IDApDQo+ID4gIAkJ cmV0dXJuIC0xOw0KPiA+IC0JaWYgKGFjdGlvbl90eXBlID09IFRDQV9FR1JFU1NfTUlSUk9SKQ0K PiA+IC0JCXAuYWN0aW9uID0gVENfQUNUX1BJUEU7DQo+ID4gLQllbHNlIC8qIFJFRElSRUNUICov DQo+ID4gLQkJcC5hY3Rpb24gPSBUQ19BQ1RfU1RPTEVOOw0KPiA+IC0JdGFwX25sYXR0cl9hZGQo Jm1zZy0+bmgsIFRDQV9NSVJSRURfUEFSTVMsIHNpemVvZihwKSwgJnApOw0KPiA+ICsJaWYgKHN0 cmNtcCgiZ2FjdCIsIGFkYXRhLT5pZCkgPT0gMCkgew0KPiA+ICsJCXRhcF9ubGF0dHJfYWRkKCZt c2ctPm5oLCBUQ0FfR0FDVF9QQVJNUywgc2l6ZW9mKGFkYXRhLQ0KPiA+Z2FjdCksDQo+ID4gKwkJ CSAgICZhZGF0YS0+Z2FjdCk7DQo+ID4gKwl9IGVsc2UgaWYgKHN0cmNtcCgibWlycmVkIiwgYWRh dGEtPmlkKSA9PSAwKSB7DQo+ID4gKwkJaWYgKGFkYXRhLT5taXJyZWQuZWFjdGlvbiA9PSBUQ0Ff RUdSRVNTX01JUlJPUikNCj4gPiArCQkJYWRhdGEtPm1pcnJlZC5hY3Rpb24gPSBUQ19BQ1RfUElQ RTsNCj4gPiArCQllbHNlIC8qIFJFRElSRUNUICovDQo+ID4gKwkJCWFkYXRhLT5taXJyZWQuYWN0 aW9uID0gVENfQUNUX1NUT0xFTjsNCj4gPiArCQl0YXBfbmxhdHRyX2FkZCgmbXNnLT5uaCwgVENB X01JUlJFRF9QQVJNUywNCj4gPiArCQkJICAgc2l6ZW9mKGFkYXRhLT5taXJyZWQpLA0KPiA+ICsJ CQkgICAmYWRhdGEtPm1pcnJlZCk7DQo+ID4gKwl9IGVsc2UgaWYgKHN0cmNtcCgic2tiZWRpdCIs IGFkYXRhLT5pZCkgPT0gMCkgew0KPiA+ICsJCXRhcF9ubGF0dHJfYWRkKCZtc2ctPm5oLCBUQ0Ff U0tCRURJVF9QQVJNUywNCj4gPiArCQkJICAgc2l6ZW9mKGFkYXRhLT5za2JlZGl0LnNrYmVkaXQp LA0KPiA+ICsJCQkgICAmYWRhdGEtPnNrYmVkaXQuc2tiZWRpdCk7DQo+ID4gKwkJdGFwX25sYXR0 cl9hZGQxNigmbXNnLT5uaCwNCj4gVENBX1NLQkVESVRfUVVFVUVfTUFQUElORywNCj4gPiArCQkJ ICAgICBhZGF0YS0+c2tiZWRpdC5xdWV1ZSk7DQo+ID4gKwl9IGVsc2UgaWYgKHN0cmNtcCgiYnBm IiwgYWRhdGEtPmlkKSA9PSAwKSB7DQo+ID4gKwkJdGFwX25sYXR0cl9hZGQzMigmbXNnLT5uaCwg VENBX0FDVF9CUEZfRkQsIGFkYXRhLQ0KPiA+YnBmLmJwZl9mZCk7DQo+ID4gKwkJdGFwX25sYXR0 cl9hZGQoJm1zZy0+bmgsIFRDQV9BQ1RfQlBGX05BTUUsDQo+ID4gKwkJCSAgIHN0cmxlbihhZGF0 YS0+YnBmLmFubm90YXRpb24pICsgMSwNCj4gPiArCQkJICAgYWRhdGEtPmJwZi5hbm5vdGF0aW9u KTsNCj4gPiArCQl0YXBfbmxhdHRyX2FkZCgmbXNnLT5uaCwgVENBX0FDVF9CUEZfUEFSTVMsDQo+ ID4gKwkJCSAgIHNpemVvZihhZGF0YS0+YnBmLmJwZiksDQo+ID4gKwkJCSAgICZhZGF0YS0+YnBm LmJwZik7DQo+ID4gKwl9IGVsc2Ugew0KPiA+ICsJCXJldHVybiAtMTsNCj4gPiArCX0NCj4gPiAg CXRhcF9ubGF0dHJfbmVzdGVkX2ZpbmlzaChtc2cpOyAvKiBuZXN0ZWQgVENBX0FDVF9PUFRJT05T ICovDQo+ID4gIAl0YXBfbmxhdHRyX25lc3RlZF9maW5pc2gobXNnKTsgLyogbmVzdGVkIGFjdF9p bmRleCAqLw0KPiA+IC0JdGFwX25sYXR0cl9uZXN0ZWRfZmluaXNoKG1zZyk7IC8qIG5lc3RlZCBU Q0FfRkxPV0VSX0FDVCAqLw0KPiA+ICAJcmV0dXJuIDA7DQo+ID4gIH0NCj4gPg0KPiA+ICAvKioN Cj4gPiAtICogVHJhbnNmb3JtIGEgUVVFVUUgYWN0aW9uIGl0ZW0gaW4gdGhlIHByb3ZpZGVkIGZs b3cgZm9yIFRDLg0KPiA+ICsgKiBIZWxwZXIgZnVuY3Rpb24gdG8gc2VuZCBhIHNlcmllIG9mIFRD IGFjdGlvbnMgdG8gdGhlIGtlcm5lbA0KPiA+ICAgKg0KPiA+IC0gKiBAcGFyYW1baW4sIG91dF0g Zmxvdw0KPiA+IC0gKiAgIEZsb3cgdG8gYmUgZmlsbGVkLg0KPiA+IC0gKiBAcGFyYW1baW5dIHF1 ZXVlDQo+ID4gLSAqICAgUXVldWUgaWQgdG8gdXNlLg0KPiA+ICsgKiBAcGFyYW1baW5dIGZsb3cN Cj4gPiArICogICBQb2ludGVyIHRvIHJ0ZSBmbG93IGNvbnRhaW5pbmcgdGhlIG5ldGxpbmsgbWVz c2FnZQ0KPiA+ICsgKg0KPiA+ICsgKiBAcGFyYW1baW5dIG5iX2FjdGlvbnMNCj4gPiArICogICBO dW1iZXIgb2YgYWN0aW9ucyBpbiBhbiBhcnJheSBvZiBhY3Rpb24gc3RydWN0cw0KPiA+ICsgKg0K PiA+ICsgKiBAcGFyYW1baW5dIGRhdGENCj4gPiArICogICBQb2ludGVyIHRvIGFuIGFycmF5IG9m IGFjdGlvbiBzdHJ1Y3RzDQo+ID4gKyAqDQo+ID4gKyAqIEBwYXJhbVtpbl0gY2xhc3NpZmllcl9h Y3Rpb25zDQo+ID4gKyAqICAgVGhlIGNsYXNzaWZpZXIgb24gYmVoYXZlIG9mIHdoaWNoIHRoZSBh Y3Rpb25zIGFyZSBjb25maWd1cmVkDQo+ID4gICAqDQo+ID4gICAqIEByZXR1cm4NCj4gPiAtICog ICAwIGlmIGNoZWNrcyBhcmUgYWxyaWdodCwgLTEgb3RoZXJ3aXNlLg0KPiA+ICsgKiAgIC0xIG9u IGZhaWx1cmUsIDAgb24gc3VjY2Vzcw0KPiA+ICAgKi8NCj4gPiAgc3RhdGljIGludA0KPiA+IC1h ZGRfYWN0aW9uX3NrYmVkaXQoc3RydWN0IHJ0ZV9mbG93ICpmbG93LCB1aW50MTZfdCBxdWV1ZSkN Cj4gPiArYWRkX2FjdGlvbnMoc3RydWN0IHJ0ZV9mbG93ICpmbG93LCBpbnQgbmJfYWN0aW9ucywg c3RydWN0IGFjdGlvbl9kYXRhDQo+ICpkYXRhLA0KPiA+ICsJICAgIGludCBjbGFzc2lmaWVyX2Fj dGlvbikNCj4gPiAgew0KPiA+ICAJc3RydWN0IG5sbXNnICptc2cgPSAmZmxvdy0+bXNnOw0KPiA+ ICAJc2l6ZV90IGFjdF9pbmRleCA9IDE7DQo+ID4gLQlzdHJ1Y3QgdGNfc2tiZWRpdCBwID0gew0K PiA+IC0JCS5hY3Rpb24gPSBUQ19BQ1RfUElQRQ0KPiA+IC0JfTsNCj4gPiArCWludCBpOw0KPiA+ DQo+ID4gLQlpZiAodGFwX25sYXR0cl9uZXN0ZWRfc3RhcnQobXNnLCBUQ0FfRkxPV0VSX0FDVCkg PCAwKQ0KPiA+IC0JCXJldHVybiAtMTsNCj4gPiAtCWlmICh0YXBfbmxhdHRyX25lc3RlZF9zdGFy dChtc2csIGFjdF9pbmRleCsrKSA8IDApDQo+ID4gKwlpZiAodGFwX25sYXR0cl9uZXN0ZWRfc3Rh cnQobXNnLCBjbGFzc2lmaWVyX2FjdGlvbikgPCAwKQ0KPiA+ICAJCXJldHVybiAtMTsNCj4gPiAt CXRhcF9ubGF0dHJfYWRkKCZtc2ctPm5oLCBUQ0FfQUNUX0tJTkQsIHNpemVvZigic2tiZWRpdCIp LA0KPiAic2tiZWRpdCIpOw0KPiA+IC0JaWYgKHRhcF9ubGF0dHJfbmVzdGVkX3N0YXJ0KG1zZywg VENBX0FDVF9PUFRJT05TKSA8IDApDQo+ID4gLQkJcmV0dXJuIC0xOw0KPiA+IC0JdGFwX25sYXR0 cl9hZGQoJm1zZy0+bmgsIFRDQV9TS0JFRElUX1BBUk1TLCBzaXplb2YocCksICZwKTsNCj4gPiAt CXRhcF9ubGF0dHJfYWRkMTYoJm1zZy0+bmgsIFRDQV9TS0JFRElUX1FVRVVFX01BUFBJTkcsDQo+ IHF1ZXVlKTsNCj4gPiAtCXRhcF9ubGF0dHJfbmVzdGVkX2ZpbmlzaChtc2cpOyAvKiBuZXN0ZWQg VENBX0FDVF9PUFRJT05TICovDQo+ID4gLQl0YXBfbmxhdHRyX25lc3RlZF9maW5pc2gobXNnKTsg LyogbmVzdGVkIGFjdF9pbmRleCAqLw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IG5iX2FjdGlvbnM7 IGkrKykNCj4gPiArCQlpZiAoYWRkX2FjdGlvbihmbG93LCAmYWN0X2luZGV4LCBkYXRhICsgaSkg PCAwKQ0KPiA+ICsJCQlyZXR1cm4gLTE7DQo+ID4gIAl0YXBfbmxhdHRyX25lc3RlZF9maW5pc2go bXNnKTsgLyogbmVzdGVkIFRDQV9GTE9XRVJfQUNUICovDQo+ID4gIAlyZXR1cm4gMDsNCj4gPiAg fQ0KPiA+IEBAIC05ODcsNyArMTA2OCw4IEBAIHByaXZfZmxvd19wcm9jZXNzKHN0cnVjdCBwbWRf aW50ZXJuYWxzICpwbWQsDQo+ID4gIAkJcmV0dXJuIC1ydGVfZXJybm87DQo+ID4gIAl9IGVsc2Ug aWYgKGZsb3cpIHsNCj4gPiAgCQl1aW50MTZfdCBncm91cCA9IGF0dHItPmdyb3VwIDw8IEdST1VQ X1NISUZUOw0KPiA+IC0JCXVpbnQxNl90IHByaW8gPSBncm91cCB8IChhdHRyLT5wcmlvcml0eSAr IFBSSU9SSVRZX09GRlNFVCk7DQo+ID4gKwkJdWludDE2X3QgcHJpbyA9IGdyb3VwIHwgKGF0dHIt PnByaW9yaXR5ICsNCj4gPiArCQkJCVJTU19QUklPUklUWV9PRkZTRVQgKyBQUklPUklUWV9PRkZT RVQpOw0KPiA+ICAJCWZsb3ctPm1zZy50LnRjbV9pbmZvID0gVENfSF9NQUtFKHByaW8gPDwgMTYs DQo+ID4gIAkJCQkJCSBmbG93LT5tc2cudC50Y21faW5mbyk7DQo+ID4gIAl9DQo+ID4gQEAgLTEw NTYsNyArMTEzOCwxMiBAQCBwcml2X2Zsb3dfcHJvY2VzcyhzdHJ1Y3QgcG1kX2ludGVybmFscyAq cG1kLA0KPiA+ICAJCX0NCj4gPiAgCX0NCj4gPiAgCWlmIChtaXJyZWQgJiYgZmxvdykgew0KPiA+ IC0JCXVpbnQxNl90IGlmX2luZGV4ID0gcG1kLT5pZl9pbmRleDsNCj4gPiArCQlzdHJ1Y3QgYWN0 aW9uX2RhdGEgYWRhdGEgPSB7DQo+ID4gKwkJCS5pZCA9ICJtaXJyZWQiLA0KPiA+ICsJCQkubWly cmVkID0gew0KPiA+ICsJCQkJLmVhY3Rpb24gPSBtaXJyZWQsDQo+ID4gKwkJCX0sDQo+ID4gKwkJ fTsNCj4gPg0KPiA+ICAJCS8qDQo+ID4gIAkJICogSWYgYXR0ci0+ZWdyZXNzICYmIG1pcnJlZCwg dGhlbiB0aGlzIGlzIGEgc3BlY2lhbCBAQCAtDQo+IDEwNjQsOQ0KPiA+ICsxMTUxLDEzIEBAIHBy aXZfZmxvd19wcm9jZXNzKHN0cnVjdCBwbWRfaW50ZXJuYWxzICpwbWQsDQo+ID4gIAkJICogcmVk aXJlY3QgcGFja2V0cyBjb21pbmcgZnJvbSB0aGUgRFBESyBBcHAsIG91dA0KPiA+ICAJCSAqIHRo cm91Z2ggdGhlIHJlbW90ZSBuZXRkZXZpY2UuDQo+ID4gIAkJICovDQo+ID4gLQkJaWYgKGF0dHIt PmVncmVzcykNCj4gPiAtCQkJaWZfaW5kZXggPSBwbWQtPnJlbW90ZV9pZl9pbmRleDsNCj4gPiAt CQlpZiAoYWRkX2FjdGlvbl9taXJyZWQoZmxvdywgaWZfaW5kZXgsIG1pcnJlZCkgPCAwKQ0KPiA+ ICsJCWFkYXRhLm1pcnJlZC5pZmluZGV4ID0gYXR0ci0+aW5ncmVzcyA/IHBtZC0+aWZfaW5kZXgg Og0KPiA+ICsJCQlwbWQtPnJlbW90ZV9pZl9pbmRleDsNCj4gPiArCQlpZiAobWlycmVkID09IFRD QV9FR1JFU1NfTUlSUk9SKQ0KPiA+ICsJCQlhZGF0YS5taXJyZWQuYWN0aW9uID0gVENfQUNUX1BJ UEU7DQo+ID4gKwkJZWxzZQ0KPiA+ICsJCQlhZGF0YS5taXJyZWQuYWN0aW9uID0gVENfQUNUX1NU T0xFTjsNCj4gPiArCQlpZiAoYWRkX2FjdGlvbnMoZmxvdywgMSwgJmFkYXRhLCBUQ0FfRkxPV0VS X0FDVCkgPCAwKQ0KPiA+ICAJCQlnb3RvIGV4aXRfYWN0aW9uX25vdF9zdXBwb3J0ZWQ7DQo+ID4g IAkJZWxzZQ0KPiA+ICAJCQlnb3RvIGVuZDsNCj4gPiBAQCAtMTA4MCwxNCArMTE3MSwzMyBAQCBw cml2X2Zsb3dfcHJvY2VzcyhzdHJ1Y3QgcG1kX2ludGVybmFscw0KPiAqcG1kLA0KPiA+ICAJCQlp ZiAoYWN0aW9uKQ0KPiA+ICAJCQkJZ290byBleGl0X2FjdGlvbl9ub3Rfc3VwcG9ydGVkOw0KPiA+ ICAJCQlhY3Rpb24gPSAxOw0KPiA+IC0JCQlpZiAoZmxvdykNCj4gPiAtCQkJCWVyciA9IGFkZF9h Y3Rpb25fZ2FjdChmbG93LCBUQ19BQ1RfU0hPVCk7DQo+ID4gKwkJCWlmIChmbG93KSB7DQo+ID4g KwkJCQlzdHJ1Y3QgYWN0aW9uX2RhdGEgYWRhdGEgPSB7DQo+ID4gKwkJCQkJLmlkID0gImdhY3Qi LA0KPiA+ICsJCQkJCS5nYWN0ID0gew0KPiA+ICsJCQkJCQkuYWN0aW9uID0gVENfQUNUX1NIT1Qs DQo+ID4gKwkJCQkJfSwNCj4gPiArCQkJCX07DQo+ID4gKw0KPiA+ICsJCQkJZXJyID0gYWRkX2Fj dGlvbnMoZmxvdywgMSwgJmFkYXRhLA0KPiA+ICsJCQkJCQkgIFRDQV9GTE9XRVJfQUNUKTsNCj4g PiArCQkJfQ0KPiA+ICAJCX0gZWxzZSBpZiAoYWN0aW9ucy0+dHlwZSA9PQ0KPiBSVEVfRkxPV19B Q1RJT05fVFlQRV9QQVNTVEhSVSkgew0KPiA+ICAJCQlpZiAoYWN0aW9uKQ0KPiA+ICAJCQkJZ290 byBleGl0X2FjdGlvbl9ub3Rfc3VwcG9ydGVkOw0KPiA+ICAJCQlhY3Rpb24gPSAxOw0KPiA+IC0J CQlpZiAoZmxvdykNCj4gPiAtCQkJCWVyciA9IGFkZF9hY3Rpb25fZ2FjdChmbG93LA0KPiBUQ19B Q1RfVU5TUEVDKTsNCj4gPiArCQkJaWYgKGZsb3cpIHsNCj4gPiArCQkJCXN0cnVjdCBhY3Rpb25f ZGF0YSBhZGF0YSA9IHsNCj4gPiArCQkJCQkuaWQgPSAiZ2FjdCIsDQo+ID4gKwkJCQkJLmdhY3Qg PSB7DQo+ID4gKwkJCQkJCS8qIGNvbnRpbnVlICovDQo+ID4gKwkJCQkJCS5hY3Rpb24gPSBUQ19B Q1RfVU5TUEVDLA0KPiA+ICsJCQkJCX0sDQo+ID4gKwkJCQl9Ow0KPiA+ICsNCj4gPiArCQkJCWVy ciA9IGFkZF9hY3Rpb25zKGZsb3csIDEsICZhZGF0YSwNCj4gPiArCQkJCQkJICBUQ0FfRkxPV0VS X0FDVCk7DQo+ID4gKwkJCX0NCj4gPiAgCQl9IGVsc2UgaWYgKGFjdGlvbnMtPnR5cGUgPT0NCj4g UlRFX0ZMT1dfQUNUSU9OX1RZUEVfUVVFVUUpIHsNCj4gPiAgCQkJY29uc3Qgc3RydWN0IHJ0ZV9m bG93X2FjdGlvbl9xdWV1ZSAqcXVldWUgPQ0KPiA+ICAJCQkJKGNvbnN0IHN0cnVjdCBydGVfZmxv d19hY3Rpb25fcXVldWUgKikgQEAgLQ0KPiAxMDk5LDIyICsxMjA5LDM1IEBADQo+ID4gcHJpdl9m bG93X3Byb2Nlc3Moc3RydWN0IHBtZF9pbnRlcm5hbHMgKnBtZCwNCj4gPiAgCQkJaWYgKCFxdWV1 ZSB8fA0KPiA+ICAJCQkgICAgKHF1ZXVlLT5pbmRleCA+IHBtZC0+ZGV2LT5kYXRhLT5uYl9yeF9x dWV1ZXMgLQ0KPiAxKSkNCj4gPiAgCQkJCWdvdG8gZXhpdF9hY3Rpb25fbm90X3N1cHBvcnRlZDsN Cj4gPiAtCQkJaWYgKGZsb3cpDQo+ID4gLQkJCQllcnIgPSBhZGRfYWN0aW9uX3NrYmVkaXQoZmxv dywgcXVldWUtDQo+ID5pbmRleCk7DQo+ID4gKwkJCWlmIChmbG93KSB7DQo+ID4gKwkJCQlzdHJ1 Y3QgYWN0aW9uX2RhdGEgYWRhdGEgPSB7DQo+ID4gKwkJCQkJLmlkID0gInNrYmVkaXQiLA0KPiA+ ICsJCQkJCS5za2JlZGl0ID0gew0KPiA+ICsJCQkJCQkuc2tiZWRpdCA9IHsNCj4gPiArCQkJCQkJ CS5hY3Rpb24gPQ0KPiBUQ19BQ1RfUElQRSwNCj4gPiArCQkJCQkJfSwNCj4gPiArCQkJCQkJLnF1 ZXVlID0gcXVldWUtPmluZGV4LA0KPiA+ICsJCQkJCX0sDQo+ID4gKwkJCQl9Ow0KPiA+ICsNCj4g PiArCQkJCWVyciA9IGFkZF9hY3Rpb25zKGZsb3csIDEsICZhZGF0YSwNCj4gPiArCQkJCQlUQ0Ff RkxPV0VSX0FDVCk7DQo+ID4gKwkJCX0NCj4gPiAgCQl9IGVsc2UgaWYgKGFjdGlvbnMtPnR5cGUg PT0gUlRFX0ZMT1dfQUNUSU9OX1RZUEVfUlNTKSB7DQo+ID4gLQkJCS8qIEZha2UgUlNTIHN1cHBv cnQuICovDQo+ID4gIAkJCWNvbnN0IHN0cnVjdCBydGVfZmxvd19hY3Rpb25fcnNzICpyc3MgPQ0K PiA+ICAJCQkJKGNvbnN0IHN0cnVjdCBydGVfZmxvd19hY3Rpb25fcnNzICopDQo+ID4gIAkJCQlh Y3Rpb25zLT5jb25mOw0KPiA+DQo+ID4gLQkJCWlmIChhY3Rpb24pDQo+ID4gLQkJCQlnb3RvIGV4 aXRfYWN0aW9uX25vdF9zdXBwb3J0ZWQ7DQo+ID4gLQkJCWFjdGlvbiA9IDE7DQo+ID4gLQkJCWlm ICghcnNzIHx8IHJzcy0+bnVtIDwgMSB8fA0KPiA+IC0JCQkgICAgKHJzcy0+cXVldWVbMF0gPiBw bWQtPmRldi0+ZGF0YS0+bmJfcnhfcXVldWVzIC0NCj4gMSkpDQo+ID4gKwkJCWlmIChhY3Rpb24r KykNCj4gPiAgCQkJCWdvdG8gZXhpdF9hY3Rpb25fbm90X3N1cHBvcnRlZDsNCj4gPiAtCQkJaWYg KGZsb3cpDQo+ID4gLQkJCQllcnIgPSBhZGRfYWN0aW9uX3NrYmVkaXQoZmxvdywgcnNzLQ0KPiA+ cXVldWVbMF0pOw0KPiA+ICsNCj4gPiArCQkJaWYgKCFwbWQtPnJzc19lbmFibGVkKSB7DQo+ID4g KwkJCQllcnIgPSByc3NfZW5hYmxlKHBtZCwgYXR0ciwgZXJyb3IpOw0KPiA+ICsJCQkJaWYgKGVy cikNCj4gPiArCQkJCQlnb3RvIGV4aXRfYWN0aW9uX25vdF9zdXBwb3J0ZWQ7DQo+ID4gKwkJCX0N Cj4gPiArCQkJaWYgKGZsb3cgJiYgcnNzKQ0KPiA+ICsJCQkJZXJyID0gcnNzX2FkZF9hY3Rpb25z KGZsb3csIHBtZCwgcnNzLCBlcnJvcik7DQo+ID4gIAkJfSBlbHNlIHsNCj4gPiAgCQkJZ290byBl eGl0X2FjdGlvbl9ub3Rfc3VwcG9ydGVkOw0KPiA+ICAJCX0NCj4gPiBAQCAtMTMyNiw2ICsxNDQ5 LDcgQEAgdGFwX2Zsb3dfZGVzdHJveV9wbWQoc3RydWN0IHBtZF9pbnRlcm5hbHMNCj4gKnBtZCwN Cj4gPiAgCQkgICAgIHN0cnVjdCBydGVfZmxvd19lcnJvciAqZXJyb3IpDQo+ID4gIHsNCj4gPiAg CXN0cnVjdCBydGVfZmxvdyAqcmVtb3RlX2Zsb3cgPSBmbG93LT5yZW1vdGVfZmxvdzsNCj4gPiAr CWludCBpOw0KPiA+ICAJaW50IHJldCA9IDA7DQo+ID4NCj4gPiAgCUxJU1RfUkVNT1ZFKGZsb3cs IG5leHQpOw0KPiA+IEBAIC0xMzUxLDYgKzE0NzUsMTMgQEAgdGFwX2Zsb3dfZGVzdHJveV9wbWQo c3RydWN0IHBtZF9pbnRlcm5hbHMNCj4gKnBtZCwNCj4gPiAgCQkJImNvdWxkbid0IHJlY2VpdmUg a2VybmVsIGFjayB0byBvdXIgcmVxdWVzdCIpOw0KPiA+ICAJCWdvdG8gZW5kOw0KPiA+ICAJfQ0K PiA+ICsJLyogQ2xvc2Ugb3BlbmVkIEJQRiBmaWxlIGRlc2NyaXB0b3JzIG9mIHRoaXMgZmxvdyAq Lw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IFNFQ19NQVg7IGkrKykNCj4gPiArCQlpZiAoZmxvdy0+ YnBmX2ZkW2ldICE9IDApIHsNCj4gPiArCQkJY2xvc2UoZmxvdy0+YnBmX2ZkW2ldKTsNCj4gPiAr CQkJZmxvdy0+YnBmX2ZkW2ldID0gMDsNCj4gPiArCQl9DQo+ID4gKw0KPiA+ICAJaWYgKHJlbW90 ZV9mbG93KSB7DQo+ID4gIAkJcmVtb3RlX2Zsb3ctPm1zZy5uaC5ubG1zZ19mbGFncyA9IE5MTV9G X1JFUVVFU1QgfA0KPiBOTE1fRl9BQ0s7DQo+ID4gIAkJcmVtb3RlX2Zsb3ctPm1zZy5uaC5ubG1z Z190eXBlID0gUlRNX0RFTFRGSUxURVI7IEBADQo+IC0xNjM1LDYNCj4gPiArMTc2NiwzMjAgQEAg dGFwX2Zsb3dfaW1wbGljaXRfZmx1c2goc3RydWN0IHBtZF9pbnRlcm5hbHMgKnBtZCwgc3RydWN0 DQo+IHJ0ZV9mbG93X2Vycm9yICplcnJvcikNCj4gPiAgCXJldHVybiAwOw0KPiA+ICB9DQo+ID4N Cj4gPiArI2RlZmluZSBNQVhfUlNTX0tFWVMgMjU2DQo+ID4gKyNkZWZpbmUgU0VDX05BTUVfQ0xT X1EgImNsc19xIg0KPiA+ICsNCj4gPiArY29uc3QgY2hhciAqc2VjX25hbWVbU0VDX01BWF0gPSB7 DQo+ID4gKwlbU0VDX0wzX0w0XSA9ICJsM19sNCIsDQo+ID4gK307DQo+ID4gKw0KPiA+ICsvKioN Cj4gPiArICogRW5hYmxlIFJTUyBvbiB0YXA6IGNyZWF0ZSBUQyBydWxlcyBmb3IgcXVldWluZy4N Cj4gPiArICoNCj4gPiArICogQHBhcmFtW2luLCBvdXRdIHBtZA0KPiA+ICsgKiAgIFBvaW50ZXIg dG8gcHJpdmF0ZSBzdHJ1Y3R1cmUuDQo+ID4gKyAqDQo+ID4gKyAqIEBwYXJhbVtpbl0gYXR0cg0K PiA+ICsgKiAgIFBvaW50ZXIgdG8gcnRlX2Zsb3cgdG8gZ2V0IGZsb3cgZ3JvdXANCj4gPiArICoN Cj4gPiArICogQHBhcmFtW291dF0gZXJyb3INCj4gPiArICogICBQb2ludGVyIHRvIGVycm9yIHJl cG9ydGluZyBpZiBub3QgTlVMTC4NCj4gPiArICoNCj4gPiArICogQHJldHVybiAwIG9uIHN1Y2Nl c3MsIG5lZ2F0aXZlIHZhbHVlIG9uIGZhaWx1cmUuDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgaW50 IHJzc19lbmFibGUoc3RydWN0IHBtZF9pbnRlcm5hbHMgKnBtZCwNCj4gPiArCQkJY29uc3Qgc3Ry dWN0IHJ0ZV9mbG93X2F0dHIgKmF0dHIsDQo+ID4gKwkJCXN0cnVjdCBydGVfZmxvd19lcnJvciAq ZXJyb3IpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBydGVfZmxvdyAqcnNzX2Zsb3cgPSBOVUxMOw0K PiA+ICsJc3RydWN0IG5sbXNnICptc2cgPSBOVUxMOw0KPiA+ICsJLyogNDA5NiBpcyB0aGUgbWF4 aW11bSBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zIGZvciBhIEJQRiBwcm9ncmFtICovDQo+ID4gKwlj aGFyIGFubm90YXRpb25bNjRdOw0KPiA+ICsJaW50IGk7DQo+ID4gKwlpbnQgZXJyID0gMDsNCj4g PiArDQo+ID4gKwkvKiB1bmxpbWl0IGxvY2tlZCBtZW1vcnkgKi8NCj4gPiArCXN0cnVjdCBybGlt aXQgbGltaXQgPSB7DQo+ID4gKwkJLnJsaW1fY3VyID0gUkxJTV9JTkZJTklUWSwNCj4gPiArCQku cmxpbV9tYXggPSBSTElNX0lORklOSVRZLA0KPiA+ICsJfTsNCj4gPiArCXNldHJsaW1pdChSTElN SVRfTUVNTE9DSywgJmxpbWl0KTsNCj4gPiArDQo+ID4gKwkgLyogR2V0IGEgbmV3IG1hcCBrZXkg Zm9yIGEgbmV3IFJTUyBydWxlICovDQo+ID4gKwllcnIgPSBicGZfcnNzX2tleShLRVlfQ01EX0lO SVQsIE5VTEwpOw0KPiA+ICsJaWYgKGVyciA8IDApIHsNCj4gPiArCQlydGVfZmxvd19lcnJvcl9z ZXQoDQo+ID4gKwkJCWVycm9yLCBFSU5WQUwsIFJURV9GTE9XX0VSUk9SX1RZUEVfSEFORExFLA0K PiBOVUxMLA0KPiA+ICsJCQkiRmFpbGVkIHRvIGluaXRpYWxpemUgQlBGIFJTUyBrZXlzIik7DQo+ ID4gKw0KPiA+ICsJCXJldHVybiAtMTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwkvKg0KPiA+ICsJ ICogIENyZWF0ZSBCUEYgUlNTIE1BUA0KPiA+ICsJICovDQo+ID4gKwlwbWQtPm1hcF9mZCA9IHRh cF9mbG93X2JwZl9yc3NfbWFwX2NyZWF0ZShzaXplb2YoX191MzIpLCAvKiBrZXkNCj4gc2l6ZSAq Lw0KPiA+ICsJCQkJc2l6ZW9mKHN0cnVjdCByc3Nfa2V5KSwNCj4gPiArCQkJCU1BWF9SU1NfS0VZ Uyk7DQo+ID4gKwlpZiAocG1kLT5tYXBfZmQgPCAwKSB7DQo+ID4gKwkJUlRFX0xPRyhFUlIsIFBN RCwNCj4gPiArCQkJIkZhaWxlZCB0byBjcmVhdGUgQlBGIG1hcCAoJWQpOiAlc1xuIiwNCj4gPiAr CQkJCWVycm5vLCBzdHJlcnJvcihlcnJubykpOw0KPiA+ICsJCXJ0ZV9mbG93X2Vycm9yX3NldCgN Cj4gPiArCQkJZXJyb3IsIEVOT1RTVVAsIFJURV9GTE9XX0VSUk9SX1RZUEVfSEFORExFLA0KPiBO VUxMLA0KPiA+ICsJCQkiS2VybmVsIHRvbyBvbGQgb3Igbm90IGNvbmZpZ3VyZWQgIg0KPiA+ICsJ CQkidG8gc3VwcG9ydCBCUEYgbWFwcyIpOw0KPiA+ICsNCj4gPiArCQlyZXR1cm4gLUVOT1RTVVA7 DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJLyoNCj4gPiArCSAqIEFkZCBhIHJ1bGUgcGVyIHF1ZXVl IHRvIG1hdGNoIHJlY2xhc3NpZmllZCBwYWNrZXRzIGFuZCBkaXJlY3QgdGhlbQ0KPiB0bw0KPiA+ ICsJICogdGhlIGNvcnJlY3QgcXVldWUuDQo+ID4gKwkgKi8NCj4gPiArCWZvciAoaSA9IDA7IGkg PCBwbWQtPmRldi0+ZGF0YS0+bmJfcnhfcXVldWVzOyBpKyspIHsNCj4gPiArCQlwbWQtPmJwZl9m ZFtpXSA9IHRhcF9mbG93X2JwZl9jbHNfcShpKTsNCj4gPiArCQlpZiAocG1kLT5icGZfZmRbaV0g PCAwKSB7DQo+ID4gKwkJCVJURV9MT0coRVJSLCBQTUQsDQo+ID4gKwkJCQkiRmFpbGVkIHRvIGxv YWQgQlBGIHNlY3Rpb24gJXMgZm9yIHF1ZXVlICVkIiwNCj4gPiArCQkJCVNFQ19OQU1FX0NMU19R LCBpKTsNCj4gPiArCQkJcnRlX2Zsb3dfZXJyb3Jfc2V0KA0KPiA+ICsJCQkJZXJyb3IsIEVOT1RT VVAsDQo+IFJURV9GTE9XX0VSUk9SX1RZUEVfSEFORExFLA0KPiA+ICsJCQkJTlVMTCwNCj4gPiAr CQkJCSJLZXJuZWwgdG9vIG9sZCBvciBub3QgY29uZmlndXJlZCAiDQo+ID4gKwkJCQkidG8gc3Vw cG9ydCBCUEYgcHJvZ3JhbXMgbG9hZGluZyIpOw0KPiA+ICsNCj4gPiArCQkJcmV0dXJuIC1FTk9U U1VQOw0KPiA+ICsJCX0NCj4gPiArDQo+ID4gKwkJcnNzX2Zsb3cgPSBydGVfbWFsbG9jKF9fZnVu Y19fLCBzaXplb2Yoc3RydWN0IHJ0ZV9mbG93KSwgMCk7DQo+ID4gKwkJaWYgKCFyc3NfZmxvdykg ew0KPiA+ICsJCQlSVEVfTE9HKEVSUiwgUE1ELA0KPiA+ICsJCQkJIkNhbm5vdCBhbGxvY2F0ZSBt ZW1vcnkgZm9yIHJ0ZV9mbG93Iik7DQo+ID4gKwkJCXJldHVybiAtMTsNCj4gPiArCQl9DQo+ID4g KwkJbXNnID0gJnJzc19mbG93LT5tc2c7DQo+ID4gKwkJdGNfaW5pdF9tc2cobXNnLCBwbWQtPmlm X2luZGV4LCBSVE1fTkVXVEZJTFRFUiwNCj4gTkxNX0ZfUkVRVUVTVCB8DQo+ID4gKwkJCSAgICBO TE1fRl9BQ0sgfCBOTE1fRl9FWENMIHwgTkxNX0ZfQ1JFQVRFKTsNCj4gPiArCQltc2ctPnQudGNt X2luZm8gPSBUQ19IX01BS0UoMCwgaHRvbnMoRVRIX1BfQUxMKSk7DQo+ID4gKwkJdGFwX2Zsb3df c2V0X2hhbmRsZShyc3NfZmxvdyk7DQo+ID4gKwkJdWludDE2X3QgZ3JvdXAgPSBhdHRyLT5ncm91 cCA8PCBHUk9VUF9TSElGVDsNCj4gPiArCQl1aW50MTZfdCBwcmlvID0gZ3JvdXAgfCAoaSArIFBS SU9SSVRZX09GRlNFVCk7DQo+ID4gKwkJbXNnLT50LnRjbV9pbmZvID0gVENfSF9NQUtFKHByaW8g PDwgMTYsIG1zZy0NCj4gPnQudGNtX2luZm8pOw0KPiA+ICsJCW1zZy0+dC50Y21fcGFyZW50ID0N Cj4gVENfSF9NQUtFKE1VTFRJUV9NQUpPUl9IQU5ETEUsIDApOw0KPiA+ICsNCj4gPiArCQl0YXBf bmxhdHRyX2FkZCgmbXNnLT5uaCwgVENBX0tJTkQsIHNpemVvZigiYnBmIiksICJicGYiKTsNCj4g PiArCQlpZiAodGFwX25sYXR0cl9uZXN0ZWRfc3RhcnQobXNnLCBUQ0FfT1BUSU9OUykgPCAwKQ0K PiA+ICsJCQlyZXR1cm4gLTE7DQo+ID4gKwkJdGFwX25sYXR0cl9hZGQzMigmbXNnLT5uaCwgVENB X0JQRl9GRCwgcG1kLT5icGZfZmRbaV0pOw0KPiA+ICsJCXNucHJpbnRmKGFubm90YXRpb24sIHNp emVvZihhbm5vdGF0aW9uKSwgIlslcyVkXSIsDQo+ID4gKwkJCVNFQ19OQU1FX0NMU19RLCBpKTsN Cj4gPiArCQl0YXBfbmxhdHRyX2FkZCgmbXNnLT5uaCwgVENBX0JQRl9OQU1FLA0KPiBzdHJsZW4o YW5ub3RhdGlvbikgKyAxLA0KPiA+ICsJCQkgICBhbm5vdGF0aW9uKTsNCj4gPiArCQkvKiBBY3Rp b25zICovDQo+ID4gKwkJew0KPiA+ICsJCQlzdHJ1Y3QgYWN0aW9uX2RhdGEgYWRhdGEgPSB7DQo+ ID4gKwkJCQkuaWQgPSAic2tiZWRpdCIsDQo+ID4gKwkJCQkuc2tiZWRpdCA9IHsNCj4gPiArCQkJ CQkuc2tiZWRpdCA9IHsNCj4gPiArCQkJCQkJLmFjdGlvbiA9IFRDX0FDVF9QSVBFLA0KPiA+ICsJ CQkJCX0sDQo+ID4gKwkJCQkJLnF1ZXVlID0gaSwNCj4gPiArCQkJCX0sDQo+ID4gKwkJCX07DQo+ ID4gKwkJCWlmIChhZGRfYWN0aW9ucyhyc3NfZmxvdywgMSwgJmFkYXRhLCBUQ0FfQlBGX0FDVCkg PA0KPiAwKQ0KPiA+ICsJCQkJcmV0dXJuIC0xOw0KPiA+ICsJCX0NCj4gPiArCQl0YXBfbmxhdHRy X25lc3RlZF9maW5pc2gobXNnKTsgLyogbmVzdGVkIFRDQV9PUFRJT05TICovDQo+ID4gKw0KPiA+ ICsJCS8qIE5ldGxpbmsgbWVzc2FnZSBpcyBub3cgcmVhZHkgdG8gYmUgc2VudCAqLw0KPiA+ICsJ CWlmICh0YXBfbmxfc2VuZChwbWQtPm5sc2tfZmQsICZtc2ctPm5oKSA8IDApDQo+ID4gKwkJCXJl dHVybiAtMTsNCj4gPiArCQllcnIgPSB0YXBfbmxfcmVjdl9hY2socG1kLT5ubHNrX2ZkKTsNCj4g PiArCQlpZiAoZXJyIDwgMCkgew0KPiA+ICsJCQlSVEVfTE9HKEVSUiwgUE1ELA0KPiA+ICsJCQkJ Iktlcm5lbCByZWZ1c2VkIFRDIGZpbHRlciBydWxlIGNyZWF0aW9uICglZCk6DQo+ICVzXG4iLA0K PiA+ICsJCQkJZXJybm8sIHN0cmVycm9yKGVycm5vKSk7DQo+ID4gKwkJCXJldHVybiBlcnI7DQo+ ID4gKwkJfQ0KPiA+ICsJCUxJU1RfSU5TRVJUX0hFQUQoJnBtZC0+cnNzX2Zsb3dzLCByc3NfZmxv dywgbmV4dCk7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcG1kLT5yc3NfZW5hYmxlZCA9IDE7DQo+ ID4gKwlyZXR1cm4gZXJyOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogTWFuYWdl IGJwZiBSU1Mga2V5cyByZXBvc2l0b3J5IHdpdGggb3BlcmF0aW9uczogaW5pdCwgZ2V0LCByZWxl YXNlDQo+ID4gKyAqDQo+ID4gKyAqIEBwYXJhbVtpbl0gY21kDQo+ID4gKyAqICAgQ29tbWFuZCBv biBSU1Mga2V5czogaW5pdCwgZ2V0LCByZWxlYXNlDQo+ID4gKyAqDQo+ID4gKyAqIEBwYXJhbVtp biwgb3V0XSBrZXlfaWR4DQo+ID4gKyAqICAgUG9pbnRlciB0byBSU1MgS2V5IGluZGV4IChvdXQg Zm9yIGdldCBjb21tYW5kLCBpbiBmb3IgcmVsZWFzZQ0KPiBjb21tYW5kKQ0KPiA+ICsgKg0KPiA+ ICsgKiBAcmV0dXJuIC0xIGlmIGNvdWxkbid0IGdldCwgcmVsZWFzZSBvciBpbml0IHRoZSBSU1Mg a2V5cywgMCBvdGhlcndpc2UuDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgaW50IGJwZl9yc3Nfa2V5 KGVudW0gYnBmX3Jzc19rZXlfZSBjbWQsIF9fdTMyICprZXlfaWR4KSB7DQo+ID4gKwlfX3UzMiBp Ow0KPiA+ICsJaW50IGVyciA9IC0xOw0KPiA+ICsJc3RhdGljIF9fdTMyIG51bV91c2VkX2tleXM7 DQo+ID4gKwlzdGF0aWMgX191MzIgcnNzX2tleXNbTUFYX1JTU19LRVlTXSA9IHtLRVlfU1RBVF9V TlNQRUN9Ow0KPiA+ICsJc3RhdGljIF9fdTMyIHJzc19rZXlzX2luaXRpYWxpemVkOw0KPiA+ICsN Cj4gPiArCXN3aXRjaCAoY21kKSB7DQo+ID4gKwljYXNlIEtFWV9DTURfR0VUOg0KPiA+ICsJCWlm ICghcnNzX2tleXNfaW5pdGlhbGl6ZWQpDQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsNCj4gPiArCQlp ZiAobnVtX3VzZWRfa2V5cyA9PSBBUlJBWV9TSVpFKHJzc19rZXlzKSkNCj4gPiArCQkJYnJlYWs7 DQo+ID4gKw0KPiA+ICsJCSprZXlfaWR4ID0gbnVtX3VzZWRfa2V5cyAlIEFSUkFZX1NJWkUocnNz X2tleXMpOw0KPiA+ICsJCXdoaWxlIChyc3Nfa2V5c1sqa2V5X2lkeF0gPT0gS0VZX1NUQVRfVVNF RCkNCj4gPiArCQkJKmtleV9pZHggPSAoKmtleV9pZHggKyAxKSAlIEFSUkFZX1NJWkUocnNzX2tl eXMpOw0KPiA+ICsNCj4gPiArCQlyc3Nfa2V5c1sqa2V5X2lkeF0gPSBLRVlfU1RBVF9VU0VEOw0K PiA+ICsJCW51bV91c2VkX2tleXMrKzsNCj4gPiArCQllcnIgPSAwOw0KPiA+ICsJYnJlYWs7DQo+ ID4gKw0KPiA+ICsJY2FzZSBLRVlfQ01EX1JFTEVBU0U6DQo+ID4gKwkJaWYgKCFyc3Nfa2V5c19p bml0aWFsaXplZCkNCj4gPiArCQkJYnJlYWs7DQo+ID4gKw0KPiA+ICsJCWlmIChyc3Nfa2V5c1sq a2V5X2lkeF0gPT0gS0VZX1NUQVRfVVNFRCkgew0KPiA+ICsJCQlyc3Nfa2V5c1sqa2V5X2lkeF0g PSBLRVlfU1RBVF9BVkFJTEFCTEU7DQo+ID4gKwkJCW51bV91c2VkX2tleXMtLTsNCj4gPiArCQkJ ZXJyID0gMDsNCj4gPiArCQl9DQo+ID4gKwlicmVhazsNCj4gPiArDQo+ID4gKwljYXNlIEtFWV9D TURfSU5JVDoNCj4gPiArCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyc3Nfa2V5cyk7IGkr KykNCj4gPiArCQkJcnNzX2tleXNbaV0gPSBLRVlfU1RBVF9BVkFJTEFCTEU7DQo+ID4gKw0KPiA+ ICsJCXJzc19rZXlzX2luaXRpYWxpemVkID0gMTsNCj4gPiArCQludW1fdXNlZF9rZXlzID0gMDsN Cj4gPiArCQllcnIgPSAwOw0KPiA+ICsJYnJlYWs7DQo+ID4gKw0KPiA+ICsJY2FzZSBLRVlfQ01E X0RFSU5JVDoNCj4gPiArCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyc3Nfa2V5cyk7IGkr KykNCj4gPiArCQkJcnNzX2tleXNbaV0gPSBLRVlfU1RBVF9VTlNQRUM7DQo+ID4gKw0KPiA+ICsJ CXJzc19rZXlzX2luaXRpYWxpemVkID0gMDsNCj4gPiArCQludW1fdXNlZF9rZXlzID0gMDsNCj4g PiArCQllcnIgPSAwOw0KPiA+ICsJYnJlYWs7DQo+ID4gKw0KPiA+ICsJZGVmYXVsdDoNCj4gPiAr CQlicmVhazsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gZXJyOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICsvKioNCj4gPiArICogQWRkIFJTUyBoYXNoIGNhbGN1bGF0aW9ucyBhbmQgcXVldWUg c2VsZWN0aW9uDQo+ID4gKyAqDQo+ID4gKyAqIEBwYXJhbVtpbiwgb3V0XSBwbWQNCj4gPiArICog ICBQb2ludGVyIHRvIGludGVybmFsIHN0cnVjdHVyZS4gVXNlZCB0byBzZXQvZ2V0IFJTUyBtYXAg ZmQNCj4gPiArICoNCj4gPiArICogQHBhcmFtW2luXSByc3MNCj4gPiArICogICBQb2ludGVyIHRv IFJTUyBmbG93IGFjdGlvbnMNCj4gPiArICoNCj4gPiArICogQHBhcmFtW291dF0gZXJyb3INCj4g PiArICogICBQb2ludGVyIHRvIGVycm9yIHJlcG9ydGluZyBpZiBub3QgTlVMTC4NCj4gPiArICoN Cj4gPiArICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG9uIGZhaWx1cmUg ICovIHN0YXRpYyBpbnQNCj4gPiArcnNzX2FkZF9hY3Rpb25zKHN0cnVjdCBydGVfZmxvdyAqZmxv dywgc3RydWN0IHBtZF9pbnRlcm5hbHMgKnBtZCwNCj4gPiArCQkJICAgY29uc3Qgc3RydWN0IHJ0 ZV9mbG93X2FjdGlvbl9yc3MgKnJzcywNCj4gPiArCQkJICAgc3RydWN0IHJ0ZV9mbG93X2Vycm9y ICplcnJvcikNCj4gPiArew0KPiA+ICsJLyogNDA5NiBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2Yg aW5zdHJ1Y3Rpb25zIGZvciBhIEJQRiBwcm9ncmFtICovDQo+ID4gKwlpbnQgaTsNCj4gPiArCV9f dTMyIGtleV9pZHg7DQo+ID4gKwlpbnQgZXJyOw0KPiA+ICsJc3RydWN0IHJzc19rZXkgcnNzX2Vu dHJ5ID0geyAuaGFzaF9maWVsZHMgPSAwLA0KPiA+ICsJCQkJICAgICAua2V5X3NpemUgPSAwIH07 DQo+ID4gKw0KPiA+ICsJLyogR2V0IGEgbmV3IG1hcCBrZXkgZm9yIGEgbmV3IFJTUyBydWxlICov DQo+ID4gKwllcnIgPSBicGZfcnNzX2tleShLRVlfQ01EX0dFVCwgJmtleV9pZHgpOw0KPiA+ICsJ aWYgKGVyciA8IDApIHsNCj4gPiArCQlydGVfZmxvd19lcnJvcl9zZXQoDQo+ID4gKwkJCWVycm9y LCBFSU5WQUwsIFJURV9GTE9XX0VSUk9SX1RZUEVfSEFORExFLA0KPiBOVUxMLA0KPiA+ICsJCQki RmFpbGVkIHRvIGdldCBCUEYgUlNTIGtleSIpOw0KPiA+ICsNCj4gPiArCQlyZXR1cm4gLTE7DQo+ ID4gKwl9DQo+ID4gKw0KPiA+ICsJLyogVXBkYXRlIFJTUyBtYXAgZW50cnkgd2l0aCBxdWV1ZXMg Ki8NCj4gPiArCXJzc19lbnRyeS5uYl9xdWV1ZXMgPSByc3MtPm51bTsNCj4gPiArCWZvciAoaSA9 IDA7IGkgPCByc3MtPm51bTsgaSsrKQ0KPiA+ICsJCXJzc19lbnRyeS5xdWV1ZXNbaV0gPSByc3Mt PnF1ZXVlW2ldOw0KPiA+ICsJcnNzX2VudHJ5Lmhhc2hfZmllbGRzID0NCj4gPiArCQkoMSA8PCBI QVNIX0ZJRUxEX0lQVjRfTDNfTDQpIHwgKDEgPDwNCj4gSEFTSF9GSUVMRF9JUFY2X0wzX0w0KTsN Cj4gPiArDQo+ID4gKwkvKiBBZGQgdGhpcyBSU1MgZW50cnkgdG8gbWFwICovDQo+ID4gKwllcnIg PSB0YXBfZmxvd19icGZfdXBkYXRlX3Jzc19lbGVtKHBtZC0+bWFwX2ZkLCAma2V5X2lkeCwNCj4g PiArJnJzc19lbnRyeSk7DQo+ID4gKw0KPiA+ICsJaWYgKGVycikgew0KPiA+ICsJCVJURV9MT0co RVJSLCBQTUQsDQo+ID4gKwkJCSJGYWlsZWQgdG8gdXBkYXRlIEJQRiBtYXAgZW50cnkgIyV1ICgl ZCk6ICVzXG4iLA0KPiA+ICsJCQlrZXlfaWR4LCBlcnJubywgc3RyZXJyb3IoZXJybm8pKTsNCj4g PiArCQlydGVfZmxvd19lcnJvcl9zZXQoDQo+ID4gKwkJCWVycm9yLCBFTk9UU1VQLCBSVEVfRkxP V19FUlJPUl9UWVBFX0hBTkRMRSwNCj4gTlVMTCwNCj4gPiArCQkJIktlcm5lbCB0b28gb2xkIG9y IG5vdCBjb25maWd1cmVkICINCj4gPiArCQkJInRvIHN1cHBvcnQgQlBGIG1hcHMgdXBkYXRlcyIp Ow0KPiA+ICsNCj4gPiArCQlyZXR1cm4gLUVOT1RTVVA7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsN Cj4gPiArCS8qDQo+ID4gKwkgKiBMb2FkIGJwZiBydWxlcyB0byBjYWxjdWxhdGUgaGFzaCBmb3Ig dGhpcyBrZXlfaWR4DQo+ID4gKwkgKi8NCj4gPiArDQo+ID4gKwlmbG93LT5icGZfZmRbU0VDX0wz X0w0XSA9DQo+ID4gKwkJdGFwX2Zsb3dfYnBmX2NhbGNfbDNfbDRfaGFzaChrZXlfaWR4LCBwbWQt Pm1hcF9mZCk7DQo+ID4gKwlpZiAoZmxvdy0+YnBmX2ZkW1NFQ19MM19MNF0gPCAwKSB7DQo+ID4g KwkJUlRFX0xPRyhFUlIsIFBNRCwNCj4gPiArCQkJIkZhaWxlZCB0byBsb2FkIEJQRiBzZWN0aW9u ICVzICglZCk6ICVzXG4iLA0KPiA+ICsJCQkJc2VjX25hbWVbU0VDX0wzX0w0XSwgZXJybm8sDQo+ IHN0cmVycm9yKGVycm5vKSk7DQo+ID4gKwkJcnRlX2Zsb3dfZXJyb3Jfc2V0KA0KPiA+ICsJCQll cnJvciwgRU5PVFNVUCwgUlRFX0ZMT1dfRVJST1JfVFlQRV9IQU5ETEUsDQo+IE5VTEwsDQo+ID4g KwkJCSJLZXJuZWwgdG9vIG9sZCBvciBub3QgY29uZmlndXJlZCAiDQo+ID4gKwkJCSJ0byBzdXBw b3J0IEJQRiBwcm9ncmFtIGxvYWRpbmciKTsNCj4gPiArDQo+ID4gKwkJcmV0dXJuIC1FTk9UU1VQ Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCS8qIEFjdGlvbnMgKi8NCj4gPiArCXsNCj4gPiArCQlz dHJ1Y3QgYWN0aW9uX2RhdGEgYWRhdGFbXSA9IHsNCj4gPiArCQkJew0KPiA+ICsJCQkJLmlkID0g ImJwZiIsDQo+ID4gKwkJCQkuYnBmID0gew0KPiA+ICsJCQkJCS5icGZfZmQgPSBmbG93LT5icGZf ZmRbU0VDX0wzX0w0XSwNCj4gPiArCQkJCQkuYW5ub3RhdGlvbiA9IHNlY19uYW1lW1NFQ19MM19M NF0sDQo+ID4gKwkJCQkJLmJwZiA9IHsNCj4gPiArCQkJCQkJLmFjdGlvbiA9IFRDX0FDVF9QSVBF LA0KPiA+ICsJCQkJCX0sDQo+ID4gKwkJCQl9LA0KPiA+ICsJCQl9LA0KPiA+ICsJCX07DQo+ID4g Kw0KPiA+ICsJCWlmIChhZGRfYWN0aW9ucyhmbG93LCBBUlJBWV9TSVpFKGFkYXRhKSwgYWRhdGEs DQo+ID4gKwkJCVRDQV9GTE9XRVJfQUNUKSA8IDApDQo+ID4gKwkJCXJldHVybiAtMTsNCj4gPiAr CX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiAgLyoqDQo+ID4g ICAqIE1hbmFnZSBmaWx0ZXIgb3BlcmF0aW9ucy4NCj4gPiAgICoNCj4gPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9uZXQvdGFwL3RhcF9mbG93LmggYi9kcml2ZXJzL25ldC90YXAvdGFwX2Zsb3cuaA0K PiA+IGluZGV4IDZjYzAxYjQuLmRiYjdmZjYgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9uZXQv dGFwL3RhcF9mbG93LmgNCj4gPiArKysgYi9kcml2ZXJzL25ldC90YXAvdGFwX2Zsb3cuaA0KPiA+ IEBAIC0zNyw2ICszNyw3IEBADQo+ID4gICNpbmNsdWRlIDxydGVfZmxvdy5oPg0KPiA+ICAjaW5j bHVkZSA8cnRlX2Zsb3dfZHJpdmVyLmg+DQo+ID4gICNpbmNsdWRlIDxydGVfZXRoX3RhcC5oPg0K PiA+ICsjaW5jbHVkZSA8dGFwX2F1dG9jb25mLmg+DQo+ID4NCj4gPiAgLyoqDQo+ID4gICAqIElu IFRDLCBwcmlvcml0eSAwIG1lYW5zIHdlIHJlcXVpcmUgdGhlIGtlcm5lbCB0byBhbGxvY2F0ZSBv bmUgZm9yIHVzLg0KPiA+IEBAIC00OSw2ICs1MCw3IEBADQo+ID4gICNkZWZpbmUgR1JPVVBfTUFT SyAoMHhmKQ0KPiA+ICAjZGVmaW5lIEdST1VQX1NISUZUIDEyDQo+ID4gICNkZWZpbmUgTUFYX0dS T1VQIEdST1VQX01BU0sNCj4gPiArI2RlZmluZSBSU1NfUFJJT1JJVFlfT0ZGU0VUIDI1Ng0KPiAN Cj4gU2hvdWxkbid0IFJTU19QUklPUklUWV9PRkZTRVQgYmUgZXF1YWwgdG8gdGhlIG51bWJlciBv ZiBxdWV1ZXMsIGFzDQo+IHRoZXJlJ3Mgb25lIGltcGxpY2l0IHJ1bGUgKHNrYmVkaXQgYWN0aW9u KSBwZXIgcXVldWUgYXQgc3RhcnQ/DQo+IA0KDQpEb25lIGZvciB2NA0KDQo+ID4NCj4gPiAgI2Rl ZmluZSBBUlJBWV9TSVpFKGEpIChzaXplb2YoYSkgLyBzaXplb2YoYVswXSkpDQo+ID4NCj4gPiBA QCAtNjksNiArNzEsMTEgQEAgZW51bSBpbXBsaWNpdF9ydWxlX2luZGV4IHsNCj4gPiAgCVRBUF9S RU1PVEVfTUFYX0lEWCwNCj4gPiAgfTsNCj4gPg0KPiA+ICtlbnVtIGJwZl9mZF9pZHggew0KPiA+ ICsJU0VDX0wzX0w0LA0KPiA+ICsJU0VDX01BWCwNCj4gPiArfTsNCj4gPiArDQo+ID4gIGludCB0 YXBfZGV2X2ZpbHRlcl9jdHJsKHN0cnVjdCBydGVfZXRoX2RldiAqZGV2LA0KPiA+ICAJCQllbnVt IHJ0ZV9maWx0ZXJfdHlwZSBmaWx0ZXJfdHlwZSwNCj4gPiAgCQkJZW51bSBydGVfZmlsdGVyX29w IGZpbHRlcl9vcCwNCj4gPiBAQCAtODQsNSArOTEsOCBAQCBpbnQgdGFwX2Zsb3dfaW1wbGljaXRf Zmx1c2goc3RydWN0IHBtZF9pbnRlcm5hbHMNCj4gPiAqcG1kLA0KPiA+DQo+ID4gIGludCB0YXBf Zmxvd19icGZfY2xzX3EoX191MzIgcXVldWVfaWR4KTsgIGludA0KPiA+IHRhcF9mbG93X2JwZl9j YWxjX2wzX2w0X2hhc2goX191MzIga2V5X2lkeCwgaW50IG1hcF9mZCk7DQo+ID4gK2ludCB0YXBf Zmxvd19icGZfcnNzX21hcF9jcmVhdGUodW5zaWduZWQgaW50IGtleV9zaXplLCB1bnNpZ25lZCBp bnQNCj4gdmFsdWVfc2l6ZSwNCj4gPiArCQkJdW5zaWduZWQgaW50IG1heF9lbnRyaWVzKTsNCj4g PiAraW50IHRhcF9mbG93X2JwZl91cGRhdGVfcnNzX2VsZW0oaW50IGZkLCB2b2lkICprZXksIHZv aWQgKnZhbHVlKTsNCj4gPg0KPiA+ICAjZW5kaWYgLyogX1RBUF9GTE9XX0hfICovDQo+ID4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RhcC90YXBfcnNzLmggYi9kcml2ZXJzL25ldC90YXAvdGFw X3Jzcy5oIG5ldw0KPiA+IGZpbGUgbW9kZSAxMDA2NDQgaW5kZXggMDAwMDAwMC4uNWUxMjUzMQ0K PiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9kcml2ZXJzL25ldC90YXAvdGFwX3Jzcy5oDQo+ ID4gQEAgLTAsMCArMSwzMiBAQA0KPiA+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNE LTMtQ2xhdXNlDQo+ID4gKyAqIENvcHlyaWdodCAyMDE3IE1lbGxhbm94IFRlY2hub2xvZ2llcywg THRkLg0KPiA+ICsgKi8NCj4gPiArDQo+ID4gKyNpZm5kZWYgX1RBUF9SU1NfSF8NCj4gPiArI2Rl ZmluZSBfVEFQX1JTU19IXw0KPiA+ICsNCj4gPiArI2RlZmluZSBUQVBfTUFYX1FVRVVFUyAxNg0K PiA+ICsNCj4gPiArLyogaGFzaGVkIGZpZWxkcyBmb3IgUlNTICovDQo+ID4gK2VudW0gaGFzaF9m aWVsZCB7DQo+ID4gKwlIQVNIX0ZJRUxEX0lQVjRfTDMsCS8qIElQdjQgc3JjL2RzdCBhZGRyICov DQo+ID4gKwlIQVNIX0ZJRUxEX0lQVjRfTDNfTDQsCS8qIElQdjQgc3JjL2RzdCBhZGRyICsgTDQg c3JjL2RzdCBwb3J0cw0KPiAqLw0KPiA+ICsJSEFTSF9GSUVMRF9JUFY2X0wzLAkvKiBJUHY2IHNy Yy9kc3QgYWRkciAqLw0KPiA+ICsJSEFTSF9GSUVMRF9JUFY2X0wzX0w0LAkvKiBJUHY2IHNyYy9k c3QgYWRkciArIEw0IHNyYy9kc3QgcG9ydHMNCj4gKi8NCj4gPiArCUhBU0hfRklFTERfTDJfU1JD LAkvKiBFdGhlcm5ldCBzcmMgYWRkciAqLw0KPiA+ICsJSEFTSF9GSUVMRF9MMl9EU1QsCS8qIEV0 aGVybmV0IGRzdCBhZGRyICovDQo+ID4gKwlIQVNIX0ZJRUxEX0wzX1NSQywJLyogTDMgc3JjIGFk ZHIgKi8NCj4gPiArCUhBU0hfRklFTERfTDNfRFNULAkvKiBMMyBkc3QgYWRkciAqLw0KPiA+ICsJ SEFTSF9GSUVMRF9MNF9TUkMsCS8qIFRDUC9VRFAgc3JjIHBvcnRzICovDQo+ID4gKwlIQVNIX0ZJ RUxEX0w0X0RTVCwJLyogVENQL1VEUCBkc3QgcG9ydHMgKi8NCj4gPiArfTsNCj4gPiArDQo+ID4g K3N0cnVjdCByc3Nfa2V5IHsNCj4gPiArCSBfX3U4IGtleVsxMjhdOw0KPiA+ICsJX191MzIgaGFz aF9maWVsZHM7DQo+ID4gKwlfX3UzMiBrZXlfc2l6ZTsNCj4gPiArCV9fdTMyIHF1ZXVlc1tUQVBf TUFYX1FVRVVFU107DQo+ID4gKwlfX3UzMiBuYl9xdWV1ZXM7DQo+ID4gK30gX19hdHRyaWJ1dGVf XygocGFja2VkKSk7DQo+ID4gKw0KPiA+ICsjZW5kaWYgLyogX1RBUF9SU1NfSF8gKi8NCj4gPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGFwL3RhcF90Y21zZ3MuaA0KPiA+IGIvZHJpdmVycy9u ZXQvdGFwL3RhcF90Y21zZ3MuaCBpbmRleCA3ODk1OTU3Li4wN2M1MDc0IDEwMDY0NA0KPiA+IC0t LSBhL2RyaXZlcnMvbmV0L3RhcC90YXBfdGNtc2dzLmgNCj4gPiArKysgYi9kcml2ZXJzL25ldC90 YXAvdGFwX3RjbXNncy5oDQo+ID4gQEAgLTM0LDYgKzM0LDcgQEANCj4gPiAgI2lmbmRlZiBfVEFQ X1RDTVNHU19IXw0KPiA+ICAjZGVmaW5lIF9UQVBfVENNU0dTX0hfDQo+ID4NCj4gPiArI2luY2x1 ZGUgPHRhcF9hdXRvY29uZi5oPg0KPiA+ICAjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4NCj4g PiAgI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPg0KPiA+ICAjaW5jbHVkZSA8bGludXgvcGt0 X3NjaGVkLmg+DQo+ID4gQEAgLTQxLDYgKzQyLDkgQEANCj4gPiAgI2luY2x1ZGUgPGxpbnV4L3Rj X2FjdC90Y19taXJyZWQuaD4NCj4gPiAgI2luY2x1ZGUgPGxpbnV4L3RjX2FjdC90Y19nYWN0Lmg+ DQo+ID4gICNpbmNsdWRlIDxsaW51eC90Y19hY3QvdGNfc2tiZWRpdC5oPg0KPiA+ICsjaWZkZWYg SEFWRV9UQ19BQ1RfQlBGDQo+ID4gKyNpbmNsdWRlIDxsaW51eC90Y19hY3QvdGNfYnBmLmg+DQo+ ID4gKyNlbmRpZg0KPiA+ICAjaW5jbHVkZSA8aW50dHlwZXMuaD4NCj4gPg0KPiA+ICAjaW5jbHVk ZSA8cnRlX2V0aGVyLmg+DQoNCg==