From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by dpdk.org (Postfix) with ESMTP id B64932A7 for ; Tue, 6 Mar 2018 10:24:16 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 06 Mar 2018 01:24:14 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.47,430,1515484800"; d="scan'208";a="35839209" Received: from fmsmsx106.amr.corp.intel.com ([10.18.124.204]) by fmsmga001.fm.intel.com with ESMTP; 06 Mar 2018 01:24:14 -0800 Received: from fmsmsx116.amr.corp.intel.com (10.18.116.20) by FMSMSX106.amr.corp.intel.com (10.18.124.204) with Microsoft SMTP Server (TLS) id 14.3.319.2; Tue, 6 Mar 2018 01:24:14 -0800 Received: from shsmsx151.ccr.corp.intel.com (10.239.6.50) by fmsmsx116.amr.corp.intel.com (10.18.116.20) with Microsoft SMTP Server (TLS) id 14.3.319.2; Tue, 6 Mar 2018 01:24:13 -0800 Received: from shsmsx104.ccr.corp.intel.com ([169.254.5.125]) by SHSMSX151.ccr.corp.intel.com ([169.254.3.116]) with mapi id 14.03.0319.002; Tue, 6 Mar 2018 17:24:11 +0800 From: "Xu, Rosen" To: Shreyansh Jain CC: "dev@dpdk.org" , "Doherty, Declan" , "Zhang, Tianfei" Thread-Topic: [dpdk-dev] [RFC 1/4] drivers/bus/ifpga:Intel FPGA Bus Lib Code Thread-Index: AQHTtRHZcVWuR611mE+USkd+aM/P16PC7fFg Date: Tue, 6 Mar 2018 09:24:10 +0000 Message-ID: <0E78D399C70DA940A335608C6ED296D739F0EC2C@SHSMSX104.ccr.corp.intel.com> References: <1520300638-134954-1-git-send-email-rosen.xu@intel.com> <1520300638-134954-2-git-send-email-rosen.xu@intel.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiMDc2MzRlYWMtYjhlMi00NGMyLTgwMWYtMWIyYzk5YmZiODYyIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE2LjUuOS4zIiwiVHJ1c3RlZExhYmVsSGFzaCI6ImFnTmRITGROQXBrQ0lLblNHYnUwUk9SR2M5d25yV3N3S2NZMEhUQlpaUUU9In0= x-ctpclassification: CTP_NT dlp-product: dlpe-windows dlp-version: 11.0.0.116 dlp-reaction: no-action x-originating-ip: [10.239.127.40] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [dpdk-dev] [RFC 1/4] drivers/bus/ifpga:Intel FPGA Bus Lib Code 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: Tue, 06 Mar 2018 09:24:18 -0000 DQoNCi0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQpGcm9tOiBTaHJleWFuc2ggSmFpbiBbbWFp bHRvOnNocmV5YW5zaC5qYWluQG54cC5jb21dIA0KU2VudDogVHVlc2RheSwgTWFyY2ggMDYsIDIw MTggMTQ6MTANClRvOiBYdSwgUm9zZW4gPHJvc2VuLnh1QGludGVsLmNvbT4NCkNjOiBkZXZAZHBk ay5vcmc7IERvaGVydHksIERlY2xhbiA8ZGVjbGFuLmRvaGVydHlAaW50ZWwuY29tPjsgWmhhbmcs IFRpYW5mZWkgPHRpYW5mZWkuemhhbmdAaW50ZWwuY29tPg0KU3ViamVjdDogUmU6IFtkcGRrLWRl dl0gW1JGQyAxLzRdIGRyaXZlcnMvYnVzL2lmcGdhOkludGVsIEZQR0EgQnVzIExpYiBDb2RlDQoN CkhlbGxvIFJvc2VuLA0KDQpJIGhhdmUgc29tZSBpbml0aWFsIChhbmQgbW9zdCBvZiB0aGVtIHRy aXZpYWwpIGNvbW1lbnRzIGlubGluZS4uLg0KDQpPbiBUdWUsIE1hciA2LCAyMDE4IGF0IDc6MTMg QU0sIFJvc2VuIFh1IDxyb3Nlbi54dUBpbnRlbC5jb20+IHdyb3RlOg0KPiBTaWduZWQtb2ZmLWJ5 OiBSb3NlbiBYdSA8cm9zZW4ueHVAaW50ZWwuY29tPg0KPiAtLS0NCj4gIGRyaXZlcnMvYnVzL2lm cGdhL01ha2VmaWxlICAgICAgICAgICAgICAgICAgfCAgNjQgKysrKw0KPiAgZHJpdmVycy9idXMv aWZwZ2EvaWZwZ2FfYnVzLmMgICAgICAgICAgICAgICB8IDUyNyArKysrKysrKysrKysrKysrKysr KysrKysrKysrDQo+ICBkcml2ZXJzL2J1cy9pZnBnYS9pZnBnYV9jb21tb24uYyAgICAgICAgICAg IHwgMTY4ICsrKysrKysrKw0KPiAgZHJpdmVycy9idXMvaWZwZ2EvaWZwZ2FfY29tbW9uLmggICAg ICAgICAgICB8ICA0NiArKysNCj4gIGRyaXZlcnMvYnVzL2lmcGdhL2lmcGdhX2xvZ3MuaCAgICAg ICAgICAgICAgfCAgNTkgKysrKw0KPiAgZHJpdmVycy9idXMvaWZwZ2EvcnRlX2J1c19pZnBnYS5o ICAgICAgICAgICB8IDE1MyArKysrKysrKw0KPiAgZHJpdmVycy9idXMvaWZwZ2EvcnRlX2J1c19p ZnBnYV92ZXJzaW9uLm1hcCB8ICAgOCArDQo+ICA3IGZpbGVzIGNoYW5nZWQsIDEwMjUgaW5zZXJ0 aW9ucygrKQ0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvYnVzL2lmcGdhL01ha2VmaWxl ICBjcmVhdGUgbW9kZSAxMDA2NDQgDQo+IGRyaXZlcnMvYnVzL2lmcGdhL2lmcGdhX2J1cy5jICBj cmVhdGUgbW9kZSAxMDA2NDQgDQo+IGRyaXZlcnMvYnVzL2lmcGdhL2lmcGdhX2NvbW1vbi5jICBj cmVhdGUgbW9kZSAxMDA2NDQgDQo+IGRyaXZlcnMvYnVzL2lmcGdhL2lmcGdhX2NvbW1vbi5oICBj cmVhdGUgbW9kZSAxMDA2NDQgDQo+IGRyaXZlcnMvYnVzL2lmcGdhL2lmcGdhX2xvZ3MuaCAgY3Jl YXRlIG1vZGUgMTAwNjQ0IA0KPiBkcml2ZXJzL2J1cy9pZnBnYS9ydGVfYnVzX2lmcGdhLmggIGNy ZWF0ZSBtb2RlIDEwMDY0NCANCj4gZHJpdmVycy9idXMvaWZwZ2EvcnRlX2J1c19pZnBnYV92ZXJz aW9uLm1hcA0KPg0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9idXMvaWZwZ2EvTWFrZWZpbGUgYi9k cml2ZXJzL2J1cy9pZnBnYS9NYWtlZmlsZSANCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQgaW5kZXgg MDAwMDAwMC4uYzcxZjE4Ng0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2RyaXZlcnMvYnVzL2lm cGdhL01ha2VmaWxlDQo+IEBAIC0wLDAgKzEsNjQgQEANCj4gKyMgICBCU0QgTElDRU5TRQ0KPiAr Iw0KPiArIyAgIENvcHlyaWdodChjKSAyMDEwLTIwMTcgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCBy aWdodHMgcmVzZXJ2ZWQuDQo+ICsjICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4NCj4gKyMNCj4gKyMg ICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo IG9yIHdpdGhvdXQNCj4gKyMgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMNCj4gKyMgICBhcmUgbWV0Og0KPiArIw0KPiAr IyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi b3ZlIGNvcHlyaWdodA0KPiArIyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQo+ICsjICAgICAqIFJlZGlzdHJpYnV0aW9u cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0DQo+ICsj ICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lciBpbg0KPiArIyAgICAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlDQo+ICsjICAgICAgIGRpc3RyaWJ1dGlvbi4NCj4g KyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5h bWVzIG9mIGl0cw0KPiArIyAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQNCj4gKyMgICAgICAgZnJvbSB0aGlzIHNvZnR3 YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KPiArIw0KPiAr IyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO RCBDT05UUklCVVRPUlMNCj4gKyMgICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVA0KPiArIyAgIExJTUlURUQgVE8sIFRIRSBJ TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUg0KPiAr IyAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM TCBUSEUgQ09QWVJJR0hUDQo+ICsjICAgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsDQo+ICsjICAgU1BFQ0lBTCwgRVhF TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVA0KPiAr IyAgIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD RVM7IExPU1MgT0YgVVNFLA0KPiArIyAgIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQ0KPiArIyAgIFRIRU9SWSBPRiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQN Cj4gKyMgICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO WSBXQVkgT1VUIE9GIFRIRSBVU0UNCj4gKyMgICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KDQpBcyBvZiAxOC4wMiwg SSB0aGluayBhbGwgbGljZW5zaW5nIGhhcyBtb3ZlZCB0byBTUERYLiBNYXliZSBpbiBmb3JtYWwg cGF0Y2ggeW91IHNob3VsZCBjaGFuZ2UgdG8gdGhhdC4NClJvc2VuOiAgSSB3aWxsIG1vZGlmeSBp dA0KDQo+ICsNCj4gK2luY2x1ZGUgJChSVEVfU0RLKS9tay9ydGUudmFycy5taw0KPiArDQo+ICsj DQo+ICsjIGxpYnJhcnkgbmFtZQ0KPiArIw0KPiArTElCID0gbGlicnRlX2J1c19pZnBnYS5hDQo+ ICtMSUJBQklWRVIgOj0gMQ0KPiArRVhQT1JUX01BUCA6PSBydGVfYnVzX2lmcGdhX3ZlcnNpb24u bWFwDQo+ICsNCj4gK2lmZXEgKCQoQ09ORklHX1JURV9MSUJSVEVfRFBBQTJfREVCVUdfSU5JVCks eSkNCg0KSSB0aGluayB0aGlzIGlzIGNvcHktcGFzdGUgaXNzdWUgLSBpc24ndCBpdD8NClJvc2Vu OiB5ZXMNCihDT05GSUdfUlRFX0xJQlJURV9EUEFBMl9ERUJVR19JTklUKQ0KSSBzZWUgdGhhdCB5 b3UgaGF2ZSBhbHJlYWR5IGVuYWJsZWQgZHluYW1pYyBsb2dnaW5nIC0gaW4gd2hpY2ggY2FzZSB5 b3Ugd29uJ3QgbmVlZCB0aGlzIGFueXdheS4NClJvc2VuOiBvaw0KDQo+ICtDRkxBR1MgKz0gLU8w IC1nDQo+ICtDRkxBR1MgKz0gIi1Xbm8tZXJyb3IiDQo+ICtlbHNlDQo+ICtDRkxBR1MgKz0gLU8z DQo+ICtDRkxBR1MgKz0gJChXRVJST1JfRkxBR1MpDQo+ICtlbmRpZg0KPiArDQo+ICtDRkxBR1Mg Kz0gLUkkKFJURV9TREspL2RyaXZlcnMvYnVzL2lmcGdhIENGTEFHUyArPSANCj4gKy1JJChSVEVf U0RLKS9kcml2ZXJzL2J1cy9wY2kgQ0ZMQUdTICs9IA0KPiArLUkkKFJURV9TREspL2xpYi9saWJy dGVfZWFsL2xpbnV4YXBwL2VhbA0KPiArQ0ZMQUdTICs9IC1JJChSVEVfU0RLKS9saWIvbGlicnRl X2VhbC9jb21tb24NCj4gKyNDRkxBR1MgKz0gLUkkKFJURV9TREspL2xpYi9saWJydGVfcmF3ZGV2 ICNMRExJQlMgKz0gLWxydGVfZWFsIA0KPiArLWxydGVfbWJ1ZiAtbHJ0ZV9tZW1wb29sIC1scnRl X3JpbmcgLWxydGVfcmF3ZGV2IExETElCUyArPSAtbHJ0ZV9lYWwgDQo+ICstbHJ0ZV9tYnVmIC1s cnRlX21lbXBvb2wgLWxydGVfcmluZyAjTERMSUJTICs9IC1scnRlX2V0aGRldg0KPiArDQo+ICtW UEFUSCArPSAkKFNSQ0RJUikvYmFzZQ0KPiArDQo+ICtTUkNTLXkgKz0gXA0KPiArICAgICAgICBp ZnBnYV9idXMuYyBcDQo+ICsgICAgICAgIGlmcGdhX2NvbW1vbi5jDQo+ICsNCj4gK2luY2x1ZGUg JChSVEVfU0RLKS9tay9ydGUubGliLm1rDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2J1cy9pZnBn YS9pZnBnYV9idXMuYyANCj4gYi9kcml2ZXJzL2J1cy9pZnBnYS9pZnBnYV9idXMuYyBuZXcgZmls ZSBtb2RlIDEwMDY0NCBpbmRleCANCj4gMDAwMDAwMC4uMzgyZDU1MA0KPiAtLS0gL2Rldi9udWxs DQo+ICsrKyBiL2RyaXZlcnMvYnVzL2lmcGdhL2lmcGdhX2J1cy5jDQo+IEBAIC0wLDAgKzEsNTI3 IEBADQo+ICsvKi0NCj4gKyAqICAgQlNEIExJQ0VOU0UNCj4gKyAqDQo+ICsgKiAgIENvcHlyaWdo dChjKSAyMDEwLTIwMTQgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQo+ ICsgKiAgIENvcHlyaWdodCAyMDEzLTIwMTQgNldJTkQgUy5BLg0KPiArICogICBBbGwgcmlnaHRz IHJlc2VydmVkLg0KPiArICoNCj4gKyAqICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQo+ICsgKiAgIG1vZGlmaWNhdGlv biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucw0K PiArICogICBhcmUgbWV0Og0KPiArICoNCj4gKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQo+ICsgKiAgICAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIuDQo+ICsgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodA0KPiArICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluDQo+ICsgKiAgICAg ICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg dGhlDQo+ICsgKiAgICAgICBkaXN0cmlidXRpb24uDQo+ICsgKiAgICAgKiBOZWl0aGVyIHRoZSBu YW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzDQo+ICsgKiAgICAg ICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz IGRlcml2ZWQNCj4gKyAqICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCj4gKyAqDQo+ICsgKiAgIFRISVMgU09GVFdBUkUg SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMNCj4g KyAqICAgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM VURJTkcsIEJVVCBOT1QNCj4gKyAqICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SDQo+ICsgKiAgIEEgUEFSVElDVUxB UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU DQo+ICsgKiAgIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs IElORElSRUNULCBJTkNJREVOVEFMLA0KPiArICogICBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UDQo+ICsgKiAgIExJTUlURUQg VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg VVNFLA0KPiArICogICBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkNCj4gKyAqICAgVEhFT1JZIE9GIExJQUJJTElUWSwg V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KPiArICogICAo SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU IE9GIFRIRSBVU0UNCj4gKyAqICAgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCj4gKyAqLw0KDQpTYW1lIGFzIGFib3Zl IC0gU1BEWCBpZGVudGlmaWVyIHJhdGhlciB0aGFuIEJTRCBsaWNlbnNlIHBsYXRlLg0KUm9zZW46 IEkgd2lsbCBtb2RpZnkgaXQNCg0KPiArDQo+ICsNCj4gKyNpbmNsdWRlIDxzdHJpbmcuaD4NCj4g KyNpbmNsdWRlIDxpbnR0eXBlcy5oPg0KPiArI2luY2x1ZGUgPHN0ZGludC5oPg0KPiArI2luY2x1 ZGUgPHN0ZGxpYi5oPg0KPiArI2luY2x1ZGUgPHN0ZGlvLmg+DQo+ICsjaW5jbHVkZSA8c3lzL3F1 ZXVlLmg+DQo+ICsjaW5jbHVkZSA8c3lzL21tYW4uaD4NCj4gKyNpbmNsdWRlIDxzeXMvdHlwZXMu aD4NCj4gKyNpbmNsdWRlIDx1bmlzdGQuaD4NCj4gKyNpbmNsdWRlIDxmY250bC5oPg0KPiArDQo+ ICsjaW5jbHVkZSA8cnRlX2Vycm5vLmg+DQo+ICsjaW5jbHVkZSA8cnRlX2J1cy5oPg0KPiArI2lu Y2x1ZGUgPHJ0ZV9wZXJfbGNvcmUuaD4NCj4gKyNpbmNsdWRlIDxydGVfbWVtb3J5Lmg+DQo+ICsj aW5jbHVkZSA8cnRlX21lbXpvbmUuaD4NCj4gKyNpbmNsdWRlIDxydGVfZWFsLmg+DQo+ICsjaW5j bHVkZSA8cnRlX2NvbW1vbi5oPg0KPiArDQo+ICsjaW5jbHVkZSA8cnRlX2RldmFyZ3MuaD4NCj4g KyNpbmNsdWRlIDxydGVfcGNpLmg+DQo+ICsjaW5jbHVkZSA8cnRlX2J1c19wY2kuaD4NCj4gKyNp bmNsdWRlIDxydGVfa3ZhcmdzLmg+DQo+ICsjaW5jbHVkZSA8cnRlX2FsYXJtLmg+DQo+ICsNCj4g KyNpbmNsdWRlICJydGVfcmF3ZGV2LmgiDQo+ICsjaW5jbHVkZSAicnRlX3Jhd2Rldl9wbWQuaCIN Cj4gKyNpbmNsdWRlICJydGVfYnVzX2lmcGdhLmgiDQo+ICsjaW5jbHVkZSAiaWZwZ2FfbG9ncy5o Ig0KPiArI2luY2x1ZGUgImlmcGdhX2NvbW1vbi5oIg0KPiArDQo+ICtpbnQgaWZwZ2FfYnVzX2xv Z3R5cGU7DQo+ICsNCj4gKy8qcmVnaXN0ZXIgYSBpZnBnYSBidXMgYmFzZWQgZHJpdmVyICovIHZv aWQgDQo+ICtydGVfaWZwZ2FfZHJpdmVyX3JlZ2lzdGVyKHN0cnVjdCBydGVfYWZ1X2RyaXZlciAq ZHJpdmVyKSB7DQo+ICsgICAgICAgUlRFX1ZFUklGWShkcml2ZXIpOw0KPiArDQo+ICsgICAgICAg VEFJTFFfSU5TRVJUX1RBSUwoJnJ0ZV9pZnBnYV9idXMuZHJpdmVyX2xpc3QsIGRyaXZlciwgbmV4 dCk7IH0NCj4gKw0KPiArLyp1bi1yZWdpc3RlciBhIGZwZ2EgYnVzIGJhc2VkIGRyaXZlciAqLyB2 b2lkIA0KPiArcnRlX2lmcGdhX2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBydGVfYWZ1X2RyaXZl ciAqZHJpdmVyKSB7DQo+ICsgICAgICAgVEFJTFFfUkVNT1ZFKCZydGVfaWZwZ2FfYnVzLmRyaXZl cl9saXN0LCBkcml2ZXIsIG5leHQpOyB9DQo+ICsNCj4gK3N0YXRpYyBzdHJ1Y3QgcnRlX2FmdV9k ZXZpY2UgKg0KPiAraWZwZ2FfZmluZF9hZnVfZGV2KGNvbnN0IHN0cnVjdCBydGVfYWZ1X2lkICph ZnVfaWQpIHsNCj4gKyAgICAgICBzdHJ1Y3QgcnRlX2FmdV9kZXZpY2UgKmFmdV9kZXYgPSBOVUxM Ow0KPiArDQo+ICsgICAgICAgVEFJTFFfRk9SRUFDSCAoYWZ1X2RldiwgJnJ0ZV9pZnBnYV9idXMu YWZ1X2xpc3QsIG5leHQpIHsNCj4gKw0KPiArICAgICAgICBpZighaWZwZ2FfYWZ1X2lkX2NtcCgm YWZ1X2Rldi0+aWQsIGFmdV9pZCkpIHsNCj4gKyAgICAgICAgICAgIHJldHVybiBhZnVfZGV2Ow0K PiArICAgICAgICB9DQo+ICsgICAgICAgfQ0KPiArICAgICAgIHJldHVybiBOVUxMOw0KPiArfQ0K PiArDQo+ICtzdGF0aWMgY29uc3QgY2hhciAqdmFsaWRfYXJnc1tdID0gew0KPiArI2RlZmluZSBJ RlBHQV9BUkdfQkRGICAgICAgICAgICJiZGYiDQo+ICsgICAgICAgSUZQR0FfQVJHX0JERiwNCj4g KyNkZWZpbmUgSUZQR0FfQVJHX1BPUlQgICAgICAgICAicG9ydCINCj4gKyAgICAgICBJRlBHQV9B UkdfUE9SVCwNCj4gKyNkZWZpbmUgSUZQR0FfQVJHX1BBVEggICAgICAgICAicGF0aCINCj4gKyAg ICAgICBJRlBHQV9BUkdfUEFUSCwNCj4gKyNkZWZpbmUgSUZQR0FfQVJHX1VVSURfSElHSCAgICAi dXVpZF9oaWdoIg0KPiArICAgICAgIElGUEdBX0FSR19VVUlEX0hJR0gsDQo+ICsjZGVmaW5lIElG UEdBX0FSR19VVUlEX0xPVyAgICAgInV1aWRfbG93Ig0KPiArICAgICAgIElGUEdBX0FSR19VVUlE X0xPVywNCj4gKyNkZWZpbmUgSUZQR0FfQVJHX1BSX0VOQUJMRSAgICAgInByX2VuYWJsZSINCj4g KyAgICAgICBJRlBHQV9BUkdfUFJfRU5BQkxFLA0KPiArI2RlZmluZSBJRlBHQV9BUkdfREVCVUcg ICAgICAgICAiZGVidWciDQo+ICsgICAgICAgSUZQR0FfQVJHX0RFQlVHLA0KPiArICAgICAgIE5V TEwNCj4gK307DQo+ICsNCj4gKy8qDQo+ICsgKiBTY2FuIHRoZSBjb250ZW50IG9mIHRoZSBGUEdB IGJ1cywgYW5kIHRoZSBkZXZpY2VzIGluIHRoZSBkZXZpY2VzDQo+ICsgKiBsaXN0DQo+ICsgKi8N Cj4gK3N0YXRpYyBzdHJ1Y3QgcnRlX2FmdV9kZXZpY2UgKg0KPiArcnRlX2lmcGdhX3NjYW5fb25l KHN0cnVjdCBydGVfZGV2YXJncyAqZGV2YXJncykgew0KPiArICAgICAgIHN0cnVjdCBydGVfa3Zh cmdzICprdmxpc3QgPSBOVUxMOw0KPiArICAgICAgIHN0cnVjdCBydGVfYnVzICpwY2lfYnVzID0g TlVMTDsNCj4gKyAgICAgICBzdHJ1Y3QgcnRlX2RldmljZSAqZGV2ID0gTlVMTDsNCj4gKyAgICAg ICBzdHJ1Y3QgcnRlX3Jhd2RldiAqcmF3ZGV2Ow0KPiArICAgICAgIHN0cnVjdCBydGVfYWZ1X2Rl dmljZSAqYWZ1X2RldiA9IE5VTEw7DQo+ICsgICAgICAgc3RydWN0IHJ0ZV9hZnVfcHJfY29uZiBh ZnVfcHJfY29uZjsNCj4gKyAgICAgICBjaGFyIHJhd2Rldl9uYW1lW1JURV9SQVdERVZfTkFNRV9N QVhfTEVOXTsNCj4gKyAgICAgICBpbnQgcmV0Ow0KPiArICAgICAgIGNoYXIgKnBhdGggPSBOVUxM Ow0KPiArICAgICAgIGludCBwcl9lbmFibGUgPSAxOw0KPiArICAgICAgIGludCBkZWJ1ZyA9IDA7 DQo+ICsNCj4gKyAgICBtZW1zZXQoKGNoYXIgKikoJmFmdV9wcl9jb25mKSwgMCwgc2l6ZW9mKHN0 cnVjdCANCj4gKyBydGVfYWZ1X3ByX2NvbmYpKTsNCj4gKw0KPiArICAgIGt2bGlzdCA9IHJ0ZV9r dmFyZ3NfcGFyc2UoZGV2YXJncy0+YXJncywgdmFsaWRfYXJncyk7DQo+ICsgICAgaWYgKCFrdmxp c3QpIHsNCj4gKyAgICAgICBJRlBHQV9CVVNfRVJSKCJlcnJvciB3aGVuIHBhcnNpbmcgcGFyYW0i KTsNCj4gKyAgICAgICBnb3RvIGVuZDsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBpZiAocnRlX2t2 YXJnc19jb3VudChrdmxpc3QsIElGUEdBX0FSR19CREYpID09IDEpIHsNCj4gKyAgICAgICAgICAg ICAgIGlmIChydGVfa3ZhcmdzX3Byb2Nlc3Moa3ZsaXN0LCBJRlBHQV9BUkdfQkRGLA0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaWZwZ2FfZ2V0X2JkZl9hcmcsICZh ZnVfcHJfY29uZi5hZnVfaWQucGNpX2FkZHIpIDwgMCkgew0KPiArICAgICAgICAgICAgICAgICAg ICAgICBJRlBHQV9CVVNfRVJSKCJlcnJvciB0byBwYXJzZSAlcyIsDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBJRlBHQV9BUkdfQkRGKTsNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgZ290byBlbmQ7DQo+ICsgICAgICAgICAgICAgICB9DQo+ICsgICAgICAgfSBlbHNl IHsNCj4gKyAgICAgICAgICAgICAgIElGUEdBX0JVU19FUlIoImFyZyAlcyBpcyBtYW5kYXRvcnkg Zm9yIGlmcGdhIGJ1cyIsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgSUZQR0FfQVJHX1BB VEgpOw0KPiArICAgICAgICAgICAgICAgZ290byBlbmQ7DQo+ICsgICAgICAgfQ0KPiArDQo+ICsg ICAgaWYgKHJ0ZV9rdmFyZ3NfY291bnQoa3ZsaXN0LCBJRlBHQV9BUkdfUE9SVCkgPT0gMSkgew0K PiArICAgICAgICAgICAgICAgaWYgKHJ0ZV9rdmFyZ3NfcHJvY2Vzcyhrdmxpc3QsIElGUEdBX0FS R19QT1JULA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaWZwZ2Ff Z2V0X2ludGVnZXIzMl9hcmcsICZhZnVfcHJfY29uZi5hZnVfaWQucG9ydCkgPCAwKSB7DQo+ICsg ICAgICAgICAgICAgICAgICAgICAgIElGUEdBX0JVU19FUlIoImVycm9yIHRvIHBhcnNlICVzIiwN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElGUEdBX0FSR19QT1JUKTsN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgZ290byBlbmQ7DQo+ICsgICAgICAgICAgICAgICB9 DQo+ICsgICAgICAgfQ0KPiArICAgICAgIGVsc2Ugew0KPiArICAgICAgICAgICAgICAgSUZQR0Ff QlVTX0VSUigiYXJnICVzIGlzIG1hbmRhdG9yeSBmb3IgaWZwZ2EgYnVzIiwNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICBJRlBHQV9BUkdfUEFUSCk7DQo+ICsgICAgICAgICAgICAgICBnb3Rv IGVuZDsNCj4gKyAgICAgICB9DQo+ICsNCj4gKyAgICBpZiAocnRlX2t2YXJnc19jb3VudChrdmxp c3QsIElGUEdBX0FSR19QQVRIKSA9PSAxKSB7DQo+ICsgICAgICAgICAgICAgICBpZiAocnRlX2t2 YXJnc19wcm9jZXNzKGt2bGlzdCwgSUZQR0FfQVJHX1BBVEgsDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZpZnBnYV9nZXRfc3RyaW5nX2FyZywgJnBhdGgpIDwgMCkg ew0KPiArICAgICAgICAgICAgICAgICAgICAgICBJRlBHQV9CVVNfRVJSKCJlcnJvciB0byBwYXJz ZSAlcyIsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRlBHQV9BUkdf UEFUSCk7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZW5kOw0KPiArICAgICAgICAg ICAgICAgfQ0KPiArICAgICAgIH0gZWxzZSB7DQo+ICsgICAgICAgICAgICAgICBJRlBHQV9CVVNf RVJSKCJhcmcgJXMgaXMgbWFuZGF0b3J5IGZvciBpZnBnYSBidXMiLA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgIElGUEdBX0FSR19QQVRIKTsNCj4gKyAgICAgICAgICAgICAgIGdvdG8gZW5k Ow0KPiArICAgICAgIH0NCj4gKw0KPiArICAgICAgIGlmIChydGVfa3ZhcmdzX2NvdW50KGt2bGlz dCwgSUZQR0FfQVJHX1VVSURfSElHSCkgPT0gMSkgew0KPiArICAgICAgICAgICAgICAgaWYgKHJ0 ZV9rdmFyZ3NfcHJvY2Vzcyhrdmxpc3QsIElGUEdBX0FSR19VVUlEX0hJR0gsDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpZnBnYV9nZXRfaW50ZWdlcjY0X2FyZywg JmFmdV9wcl9jb25mLmFmdV9pZC51dWlkX2hpZ2gpIDwgMCkgew0KPiArICAgICAgICAgICAgICAg ICAgICAgICBJRlBHQV9CVVNfRVJSKCJlcnJvciB0byBwYXJzZSAlcyIsDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBJRlBHQV9BUkdfVVVJRF9ISUdIKTsNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgZ290byBlbmQ7DQo+ICsgICAgICAgICAgICAgICB9DQo+ICsgICAg ICAgfSBlbHNlIHsNCj4gKyAgICAgICAgICAgICAgIElGUEdBX0JVU19FUlIoImFyZyAlcyBpcyBt YW5kYXRvcnkgZm9yIGlmcGdhIGJ1cyIsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgSUZQ R0FfQVJHX1BBVEgpOw0KPiArICAgICAgICAgICAgICAgZ290byBlbmQ7DQo+ICsgICAgICAgfQ0K PiArDQo+ICsgICAgICAgaWYgKHJ0ZV9rdmFyZ3NfY291bnQoa3ZsaXN0LCBJRlBHQV9BUkdfVVVJ RF9MT1cpID09IDEpIHsNCj4gKyAgICAgICAgICAgICAgIGlmIChydGVfa3ZhcmdzX3Byb2Nlc3Mo a3ZsaXN0LCBJRlBHQV9BUkdfVVVJRF9MT1csDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZpZnBnYV9nZXRfaW50ZWdlcjY0X2FyZywgJmFmdV9wcl9jb25mLmFmdV9p ZC51dWlkX2xvdykgPCAwKSB7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgIElGUEdBX0JVU19F UlIoImVycm9yIHRvIHBhcnNlICVzIiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIElGUEdBX0FSR19VVUlEX0xPVyk7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgIGdv dG8gZW5kOw0KPiArICAgICAgICAgICAgICAgfQ0KPiArICAgICAgIH0gZWxzZSB7DQo+ICsgICAg ICAgICAgICAgICBJRlBHQV9CVVNfRVJSKCJhcmcgJXMgaXMgbWFuZGF0b3J5IGZvciBpZnBnYSBi dXMiLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgIElGUEdBX0FSR19QQVRIKTsNCj4gKyAg ICAgICAgICAgICAgIGdvdG8gZW5kOw0KPiArICAgICAgIH0NCj4gKw0KPiArICAgICAgIGlmIChy dGVfa3ZhcmdzX2NvdW50KGt2bGlzdCwgSUZQR0FfQVJHX1BSX0VOQUJMRSkgPT0gMSkgew0KPiAr ICAgICAgICAgICAgICAgaWYgKHJ0ZV9rdmFyZ3NfcHJvY2Vzcyhrdmxpc3QsIElGUEdBX0FSR19Q Ul9FTkFCTEUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpZnBn YV9nZXRfaW50ZWdlcjMyX2FyZywgJnByX2VuYWJsZSkgPCAwKSB7DQo+ICsgICAgICAgICAgICAg ICAgICAgICAgIElGUEdBX0JVU19FUlIoImVycm9yIHRvIHBhcnNlICVzIiwNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIElGUEdBX0FSR19VVUlEX0hJR0gpOw0KPiArICAg ICAgICAgICAgICAgICAgICAgICBnb3RvIGVuZDsNCj4gKyAgICAgICAgICAgICAgIH0NCj4gKyAg ICAgICB9DQo+ICsNCj4gKyAgICAgICBpZiAocnRlX2t2YXJnc19jb3VudChrdmxpc3QsIElGUEdB X0FSR19ERUJVRykgPT0gMSkgew0KPiArICAgICAgICAgICAgICAgaWYgKHJ0ZV9rdmFyZ3NfcHJv Y2Vzcyhrdmxpc3QsIElGUEdBX0FSR19ERUJVRywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJmlmcGdhX2dldF9pbnRlZ2VyMzJfYXJnLCAmZGVidWcpIDwgMCkgew0K PiArICAgICAgICAgICAgICAgICAgICAgICBJRlBHQV9CVVNfRVJSKCJlcnJvciB0byBwYXJzZSAl cyIsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRlBHQV9BUkdfVVVJ RF9ISUdIKTsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgZ290byBlbmQ7DQo+ICsgICAgICAg ICAgICAgICB9DQo+ICsgICAgICAgfQ0KPiArDQo+ICsgICAgICAgaWYoIWRlYnVnKQ0KPiArICAg ICAgIHsNCj4gKyAgICAgICAgICAgICAgIHBjaV9idXMgPSBydGVfYnVzX2ZpbmRfYnlfbmFtZSgi cGNpIik7DQo+ICsgICAgICAgICAgIGlmIChwY2lfYnVzID09IE5VTEwpIHsNCj4gKyAgICAgICAg ICAgICAgIElGUEdBX0JVU19FUlIoInVuYWJsZSB0byBmaW5kIFBDSSBidXNcbiIpOw0KPiArICAg ICAgICAgICAgICAgZ290byBlbmQ7DQo+ICsgICAgICAgICAgIH0NCj4gKw0KPiArICAgICAgICAg ICBkZXYgPSBwY2lfYnVzLT5maW5kX2RldmljZShOVUxMLCBpZnBnYV9wY2lfYWRkcl9jbXAsICZh ZnVfcHJfY29uZi5hZnVfaWQucGNpX2FkZHIpOw0KPiArICAgICAgICAgICBpZiAoZGV2ID09IE5V TEwpIHsNCj4gKyAgICAgICAgICAgICAgIElGUEdBX0JVU19FUlIoInVuYWJsZSB0byBmaW5kIFBD SSBkZXZpY2VcbiIpOw0KPiArICAgICAgICAgICAgICAgZ290byBlbmQ7DQo+ICsgICAgICAgICAg IH0NCj4gKyAgICAgICB9DQoNCkkgYW0gc2xpZ2h0bHkgY29uZnVzZWQgaGVyZS4gSSB0aG91Z2h0 IHRoaXMgaXMgbm90IG9uIFBDSSBidXMuIEJ1dCwgeW91IGFyZSBzZWFyY2hpbmcgZm9yIHRoZSBp RlBHQSBvbiB0aGUgUENJIGJ1cy4gSWYgc28sIHlvdSBzdGlsbCBuZWVkIGEgbmV3IGJ1cz8NClJv c2VuOiBpdCBqdXN0IHRvIGNvbmZpcm0gdGhlIFBDSSBidXMgaXMgc2V0dXAgYmVmb3JlIEZQR0Eg QlVTIFNjYW4uDQpJbiBjYXNlIHRoZSBkZXZpY2VzIGFyZSBzdGlsbCB2aXNpYmxlIG9uIHRoZSBQ Q0kgYnVzIGl0c2VsZiwgYSByYXdkZXYgZHJpdmVyIGNhbiBlYXNpbHkgaWRlbnRpZnkgKHByb2Jl IHRpbWUpIHRoZW0gYW5kIGF0dGFjaCBpdHNlbGYgdG8gdGhlbS4NCklzIG15IHVuZGVyc3RhbmRp bmcgd3Jvbmc/IChBc3N1bWluZyB0aGF0IG5vIFBDSSBkcml2ZXIgd2lsbCBpZGVudGlmeSB0aGUg ZGV2aWNlcyBhcyBpdHMgb3duIGFuZCBldmVudHVhbGx5IHRoZSByYXdkZXYgZHJpdmVyIHdvdWxk IGNsYWltDQp0aGVtLikNClJvc2VuOiBSYXdkZXYgRHJpdmVyIChiYXNlZCBQQ0kgRGV2aWRlKSB3 aWxsIGZpcnN0bHkgcHJvYmUgYmVmb3JlIEZQR0EgQlVTIFNjYW4uDQoNCj4gKyAgICAgICBlbHNl DQo+ICsgICAgICAgew0KPiArICAgICAgICAgICAgICAgSUZQR0FfQlVTX0RFQlVHKCJwY2lfYWRk ciBkb21haW4gICA6ICV4XG4iLCAgIGFmdV9wcl9jb25mLmFmdV9pZC5wY2lfYWRkci5kb21haW4p Ow0KPiArICAgICAgICAgICAgICAgSUZQR0FfQlVTX0RFQlVHKCJwY2lfYWRkciBidXMgICAgICA6 ICV4XG4iLCAgIGFmdV9wcl9jb25mLmFmdV9pZC5wY2lfYWRkci5idXMpOw0KPiArICAgICAgICAg ICAgICAgSUZQR0FfQlVTX0RFQlVHKCJwY2lfYWRkciBkZXZpZCAgICA6ICV4XG4iLCAgIGFmdV9w cl9jb25mLmFmdV9pZC5wY2lfYWRkci5kZXZpZCk7DQo+ICsgICAgICAgICAgICAgICBJRlBHQV9C VVNfREVCVUcoInBjaV9hZGRyIGZ1bmN0aW9uIDogJXhcbiIsICAgYWZ1X3ByX2NvbmYuYWZ1X2lk LnBjaV9hZGRyLmZ1bmN0aW9uKTsNCj4gKw0KPiArICAgICAgICAgICAgICAgSUZQR0FfQlVTX0RF QlVHKCJ1dWlkX2xvdyAgICAgICAgICA6ICVseFxuIiwgYWZ1X3ByX2NvbmYuYWZ1X2lkLnV1aWRf bG93KTsNCj4gKyAgICAgICAgICAgICAgIElGUEdBX0JVU19ERUJVRygidXVpZF9oaWdoICAgICAg ICAgOiAlbHhcbiIsIGFmdV9wcl9jb25mLmFmdV9pZC51dWlkX2hpZ2gpOw0KPiArDQo+ICsgICAg ICAgICAgICAgICBJRlBHQV9CVVNfREVCVUcoImFmdSBwb3J0ICAgICAgICAgIDogJXhcbiIsICAg YWZ1X3ByX2NvbmYuYWZ1X2lkLnBvcnQpOw0KPiArICAgICAgIH0NCj4gKw0KPiArICAgICAgIGlm IChpZnBnYV9maW5kX2FmdV9kZXYoJmFmdV9wcl9jb25mLmFmdV9pZCkpDQo+ICsgICAgICAgICAg ICAgICBnb3RvIGVuZDsNCj4gKw0KPiArICAgICAgIG1lbXNldChyYXdkZXZfbmFtZSwgc2l6ZW9m KHJhd2Rldl9uYW1lKSwgMCk7DQo+ICsgICAgICAgc25wcmludGYocmF3ZGV2X25hbWUsIFJURV9S QVdERVZfTkFNRV9NQVhfTEVOLCAiSUZQR0E6JXg6JXg6JXgiLCBhZnVfcHJfY29uZi5hZnVfaWQu cGNpX2FkZHIuYnVzLCBhZnVfcHJfY29uZi5hZnVfaWQucGNpX2FkZHIuZGV2aWQsIGFmdV9wcl9j b25mLmFmdV9pZC5wY2lfYWRkci5mdW5jdGlvbik7DQo+ICsgICAgICAgcmF3ZGV2ID0gcnRlX3Jh d2Rldl9wbWRfZ2V0X25hbWVkX2RldihyYXdkZXZfbmFtZSk7DQo+ICsgICAgICAgaWYoIXJhd2Rl dikNCj4gKyAgICAgICAgICAgICAgIGdvdG8gZW5kOw0KPiArDQo+ICsgICAgICAgcmF3ZGV2LT5k ZXZfb3BzLT5kZXZfc3RhcnQocmF3ZGV2KTsNCj4gKw0KPiArICAgICAgIGlmIChwcl9lbmFibGUp DQo+ICsgICAgICAgew0KPiArICAgICAgICAgICAgICAgcmV0PXJhd2Rldi0+ZGV2X29wcy0+Zmly bXdhcmVfbG9hZChyYXdkZXYsICZhZnVfcHJfY29uZik7DQo+ICsgICAgICAgICAgICAgICBpZiAo cmV0KSB7DQo+ICsgICAgICAgICAgICAgICBwcmludGYoImRvIHByIGVycm9yXG4iKTsNCj4gKyAg ICAgICAgICAgICAgIHJldHVybiBOVUxMOw0KPiArICAgICAgICAgICB9DQo+ICsgICAgICAgfQ0K PiArDQo+ICsgICAgICAgYWZ1X2RldiA9IGNhbGxvYygxLCBzaXplb2YoKmFmdV9kZXYpKTsNCj4g KyAgICAgICBpZiAoIWFmdV9kZXYpDQo+ICsgICAgICAgICAgICAgICBnb3RvIGVuZDsNCj4gKw0K PiArICAgICAgIGFmdV9kZXYtPmRldmljZS5kZXZhcmdzID0gZGV2YXJnczsNCj4gKyAgICAgICBh ZnVfZGV2LT5kZXZpY2UubnVtYV9ub2RlID0gU09DS0VUX0lEX0FOWTsNCj4gKyAgICAgICBhZnVf ZGV2LT5kZXZpY2UubmFtZSA9IGRldmFyZ3MtPm5hbWU7DQo+ICsgICAgICAgYWZ1X2Rldi0+cmF3 ZGV2ID0gcmF3ZGV2Ow0KPiArICAgICAgIGFmdV9kZXYtPmlkLnBjaV9hZGRyLmRvbWFpbiA9IGFm dV9wcl9jb25mLmFmdV9pZC5wY2lfYWRkci5kb21haW47DQo+ICsgICAgICAgYWZ1X2Rldi0+aWQu cGNpX2FkZHIuYnVzID0gYWZ1X3ByX2NvbmYuYWZ1X2lkLnBjaV9hZGRyLmJ1czsNCj4gKyAgICAg ICBhZnVfZGV2LT5pZC5wY2lfYWRkci5kZXZpZCA9IGFmdV9wcl9jb25mLmFmdV9pZC5wY2lfYWRk ci5kZXZpZDsNCj4gKyAgICAgICBhZnVfZGV2LT5pZC5wY2lfYWRkci5mdW5jdGlvbiA9IGFmdV9w cl9jb25mLmFmdV9pZC5wY2lfYWRkci5mdW5jdGlvbjsNCj4gKyAgICAgICBhZnVfZGV2LT5pZC51 dWlkX2xvdyAgPSBhZnVfcHJfY29uZi5hZnVfaWQudXVpZF9sb3c7DQo+ICsgICAgICAgYWZ1X2Rl di0+aWQudXVpZF9oaWdoID0gYWZ1X3ByX2NvbmYuYWZ1X2lkLnV1aWRfaGlnaDsNCj4gKyAgICAg ICBhZnVfZGV2LT5pZC5wb3J0ICAgICAgPSBhZnVfcHJfY29uZi5hZnVfaWQucG9ydDsNCj4gKw0K PiArICAgICAgIHJhd2Rldi0+ZGV2X29wcy0+ZGV2X2luZm9fZ2V0KHJhd2RldiwgYWZ1X2Rldik7 DQo+ICsNCj4gKyAgICByZXR1cm4gYWZ1X2RldjsNCj4gKw0KPiArZW5kOg0KPiArICAgICAgIGlm IChrdmxpc3QpDQo+ICsgICAgICAgICAgICAgICBydGVfa3ZhcmdzX2ZyZWUoa3ZsaXN0KTsNCj4g KyAgICAgICBpZiAocGF0aCkNCj4gKyAgICAgICAgICAgICAgIGZyZWUocGF0aCk7DQo+ICsNCj4g KyAgICAgICByZXR1cm4gTlVMTDsNCj4gK30NCj4gKw0KPiArLyoNCj4gKyAqIFNjYW4gdGhlIGNv bnRlbnQgb2YgdGhlIEZQR0EgYnVzLCBhbmQgdGhlIGRldmljZXMgaW4gdGhlIGRldmljZXMNCj4g KyAqIGxpc3QNCj4gKyAqLw0KPiArc3RhdGljIGludA0KPiArcnRlX2lmcGdhX3NjYW4odm9pZCkN Cj4gK3sNCj4gKyAgICAgICBzdHJ1Y3QgcnRlX2J1cyAqcGNpX2J1czsNCj4gKyAgICAgICBzdHJ1 Y3QgcnRlX2FmdV9kZXZpY2UgKmFmdV9kZXY7DQo+ICsgICAgICAgc3RydWN0IHJ0ZV9kZXZhcmdz ICpkZXZhcmdzOw0KPiArDQo+ICsgICAgcGNpX2J1cyA9IHJ0ZV9idXNfZmluZF9ieV9uYW1lKCJw Y2kiKTsNCj4gKyAgICAgICBpZiAocGNpX2J1cyA9PSBOVUxMKSB7DQo+ICsgICAgICAgICAgICAg ICBJRlBHQV9CVVNfRVJSKCJ1bmFibGUgdG8gZmluZCBQQ0kgYnVzXG4iKTsNCj4gKyAgICAgICAg ICAgICAgIHJldHVybiAtMTsNCj4gKyAgICAgICB9DQo+ICsNCj4gKyAgICAgICAvKiBmb3Igdmly dHVhbCBkZXZpY2VzIHdlIHNjYW4gdGhlIGRldmFyZ3NfbGlzdCBwb3B1bGF0ZWQgdmlhIGNtZGxp bmUgKi8NCj4gKyAgICAgICBUQUlMUV9GT1JFQUNIKGRldmFyZ3MsICZkZXZhcmdzX2xpc3QsIG5l eHQpIHsNCj4gKw0KPiArICAgICAgICAgICAgICAgaWYgKGRldmFyZ3MtPmJ1cyAhPSAmcnRlX2lm cGdhX2J1cy5idXMpDQo+ICsgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KPiArDQo+ ICsgICAgICAgICAgICAgICBhZnVfZGV2ID0gcnRlX2lmcGdhX3NjYW5fb25lKGRldmFyZ3MpOw0K PiArDQo+ICsgICAgICAgICAgIGlmKGFmdV9kZXYpDQo+ICsgICAgICAgICAgICAgICAgICAgVEFJ TFFfSU5TRVJUX1RBSUwoJnJ0ZV9pZnBnYV9idXMuYWZ1X2xpc3QsIGFmdV9kZXYsIG5leHQpOw0K PiArICAgICAgIH0NCj4gKw0KPiArICAgICAgIHJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0 aWMgaW50DQo+ICtpZnBnYV9wcm9iZV9vbmVfZHJpdmVyKHN0cnVjdCBydGVfYWZ1X2RyaXZlciAq ZHJ2LA0KPiArICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcnRlX2FmdV9kZXZpY2UgKmFm dV9kZXYpIHsNCj4gKyAgICAgICBpbnQgcmV0Ow0KPiArDQo+ICsgICAgaWYoKGRydi0+aWQucGNp X2FkZHIuYnVzID09IGFmdV9kZXYtPmlkLnBjaV9hZGRyLmJ1cykgJiYNCj4gKyAgICAgICAoZHJ2 LT5pZC5wY2lfYWRkci5kZXZpZCA9PSBhZnVfZGV2LT5pZC5wY2lfYWRkci5kZXZpZCkgJiYNCj4g KyAgICAgICAoZHJ2LT5pZC5wY2lfYWRkci5mdW5jdGlvbiA9PSBhZnVfZGV2LT5pZC5wY2lfYWRk ci5mdW5jdGlvbikgJiYNCj4gKyAgICAgICAoZHJ2LT5pZC51dWlkX2xvdyA9PSBhZnVfZGV2LT5p ZC51dWlkX2xvdykgJiYNCj4gKyAgICAgICAoZHJ2LT5pZC51dWlkX2hpZ2ggPT0gYWZ1X2Rldi0+ aWQudXVpZF9oaWdoKSAmJg0KPiArICAgICAgIChkcnYtPmlkLnBvcnQgPT0gYWZ1X2Rldi0+aWQu cG9ydCkpIHsNCj4gKw0KPiArICAgICAgICAgICAgICAgYWZ1X2Rldi0+ZHJpdmVyID0gZHJ2Ow0K PiArDQo+ICsgICAgICAgICAgICAgICAvKiBjYWxsIHRoZSBkcml2ZXIgcHJvYmUoKSBmdW5jdGlv biAqLw0KPiArICAgICAgICAgICAgICAgcmV0ID0gZHJ2LT5wcm9iZShhZnVfZGV2KTsNCj4gKyAg ICAgICAgICAgICAgIGlmIChyZXQpDQo+ICsgICAgICAgICAgICAgICAgICAgICAgIGFmdV9kZXYt PmRyaXZlciA9IE5VTEw7DQo+ICsgICAgICAgICAgICAgICByZXR1cm4gcmV0Ow0KPiArICAgIH0N Cj4gKw0KPiArICAgICAgIC8qIHJldHVybiBwb3NpdGl2ZSB2YWx1ZSBpZiBkcml2ZXIgZG9lc24n dCBzdXBwb3J0IHRoaXMgZGV2aWNlICovDQo+ICsgICAgICAgcmV0dXJuIDE7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyBpbnQNCj4gK2lmcGdhX3Byb2JlX2FsbF9kcml2ZXJzKHN0cnVjdCBydGVfYWZ1 X2RldmljZSAqYWZ1X2Rldikgew0KPiArICAgICAgIGNvbnN0IGNoYXIgKm5hbWU7DQo+ICsgICAg ICAgc3RydWN0IHJ0ZV9hZnVfZHJpdmVyICpkcnYgPSBOVUxMOw0KPiArICAgICAgIGludCByYzsN Cj4gKw0KPiArICAgICAgIGlmIChhZnVfZGV2ID09IE5VTEwpDQo+ICsgICAgICAgICAgICAgICBy ZXR1cm4gLTE7DQo+ICsNCj4gKyAgICAgICAvKiBDaGVjayBpZiBhIGRyaXZlciBpcyBhbHJlYWR5 IGxvYWRlZCAqLw0KPiArICAgICAgIGlmIChhZnVfZGV2LT5kcml2ZXIgIT0gTlVMTCkNCj4gKyAg ICAgICAgICAgICAgIHJldHVybiAwOw0KPiArDQo+ICsgICAgbmFtZSA9IHJ0ZV9pZnBnYV9kZXZp Y2VfbmFtZShhZnVfZGV2KTsNCj4gKyAgICBJRlBHQV9CVVNfREVCVUcoIlNlYXJjaCBkcml2ZXIg JXMgdG8gcHJvYmUgZGV2aWNlICVzXG4iLCBuYW1lLA0KPiArICAgICAgICAgICAgICAgcnRlX2lm cGdhX2RldmljZV9uYW1lKGFmdV9kZXYpKTsNCj4gKw0KPiArICAgICAgIFRBSUxRX0ZPUkVBQ0go ZHJ2LCAmcnRlX2lmcGdhX2J1cy5kcml2ZXJfbGlzdCwgbmV4dCkgew0KPiArICAgICAgICAgICAg ICAgcmMgPSBpZnBnYV9wcm9iZV9vbmVfZHJpdmVyKGRydiwgYWZ1X2Rldik7DQo+ICsgICAgICAg ICAgICAgICBpZiAocmMgPCAwKQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAvKiBuZWdhdGl2 ZSB2YWx1ZSBpcyBhbiBlcnJvciAqLw0KPiArICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g LTE7DQo+ICsgICAgICAgICAgICAgICBpZiAocmMgPiAwKQ0KPiArICAgICAgICAgICAgICAgICAg ICAgICAvKiBwb3NpdGl2ZSB2YWx1ZSBtZWFucyBkcml2ZXIgZG9lc24ndCBzdXBwb3J0IGl0ICov DQo+ICsgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KPiArICAgICAgICAgICAgICAg cmV0dXJuIDA7DQo+ICsgICAgICAgfQ0KPiArICAgICAgIHJldHVybiAxOw0KPiArIH0NCj4gKw0K PiArLyoNCj4gKyAqIFNjYW4gdGhlIGNvbnRlbnQgb2YgdGhlIFBDSSBidXMsIGFuZCBjYWxsIHRo ZSBwcm9iZSgpIGZ1bmN0aW9uIGZvcg0KPiArICogYWxsIHJlZ2lzdGVyZWQgZHJpdmVycyB0aGF0 IGhhdmUgYSBtYXRjaGluZyBlbnRyeSBpbiBpdHMgaWRfdGFibGUNCj4gKyAqIGZvciBkaXNjb3Zl cmVkIGRldmljZXMuDQo+ICsgKi8NCj4gK3N0YXRpYyBpbnQNCj4gK3J0ZV9pZnBnYV9wcm9iZSh2 b2lkKQ0KPiArew0KPiArICAgICAgIHN0cnVjdCBydGVfYWZ1X2RldmljZSAqYWZ1X2RldiA9IE5V TEw7DQo+ICsgICAgICAgaW50IHJldCA9IDA7DQo+ICsNCj4gKyAgICAgICBUQUlMUV9GT1JFQUNI IChhZnVfZGV2LCAmcnRlX2lmcGdhX2J1cy5hZnVfbGlzdCwgbmV4dCkgew0KPiArDQo+ICsgICAg ICAgIGlmIChhZnVfZGV2LT5kZXZpY2UuZHJpdmVyKQ0KPiArICAgICAgICAgICAgICAgICAgICAg ICBjb250aW51ZTsNCj4gKw0KPiArICAgICAgICAgICAgICAgcmV0ID0gaWZwZ2FfcHJvYmVfYWxs X2RyaXZlcnMoYWZ1X2Rldik7DQo+ICsgICAgICAgICAgICAgICBpZiAocmV0IDwgMCkNCj4gKyAg ICAgICAgICAgICAgICAgICBJRlBHQV9CVVNfRVJSKCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSAlcyBk ZXZpY2VcbiIsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnRlX2lmcGdhX2Rl dmljZV9uYW1lKGFmdV9kZXYpKTsNCj4gKyAgICAgICB9DQo+ICsNCj4gKyAgICAgICByZXR1cm4g MDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludA0KPiArcnRlX2lmcGdhX3BsdWcoc3RydWN0IHJ0 ZV9kZXZpY2UgKmRldikgew0KPiArICAgICAgIHJldHVybiBpZnBnYV9wcm9iZV9hbGxfZHJpdmVy cyhSVEVfREVWX1RPX0FGVShkZXYpKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBpZnBnYV9y ZW1vdmVfZHJpdmVyKHN0cnVjdCBydGVfYWZ1X2RldmljZSAqYWZ1X2Rldikgew0KPiArICAgICAg IGNvbnN0IGNoYXIgKm5hbWU7DQo+ICsgICAgICAgY29uc3Qgc3RydWN0IHJ0ZV9hZnVfZHJpdmVy ICpkcml2ZXI7DQo+ICsNCj4gKyAgICBuYW1lID0gcnRlX2lmcGdhX2RldmljZV9uYW1lKGFmdV9k ZXYpOw0KPiArICAgICAgIGlmICghYWZ1X2Rldi0+ZGV2aWNlLmRyaXZlcikgew0KPiArICAgICAg ICAgICAgICAgSUZQR0FfQlVTX0RFQlVHKCJubyBkcml2ZXIgYXR0YWNoIHRvIGRldmljZSAlc1xu IiwgbmFtZSk7DQo+ICsgICAgICAgICAgICAgICByZXR1cm4gMTsNCj4gKyAgICAgICB9DQo+ICsN Cj4gKyAgICAgICBkcml2ZXIgPSBjb250YWluZXJfb2YoYWZ1X2Rldi0+ZGV2aWNlLmRyaXZlciwg Y29uc3Qgc3RydWN0IHJ0ZV9hZnVfZHJpdmVyLA0KPiArICAgICAgICAgICAgICAgZHJpdmVyKTsN Cj4gKyAgICAgICByZXR1cm4gZHJpdmVyLT5yZW1vdmUoYWZ1X2Rldik7IH0NCj4gKw0KPiArc3Rh dGljIGludA0KPiArcnRlX2lmcGdhX3VucGx1ZyhzdHJ1Y3QgcnRlX2RldmljZSAqZGV2KSB7DQo+ ICsgICAgICAgc3RydWN0IHJ0ZV9hZnVfZGV2aWNlICphZnVfZGV2Ow0KPiArICAgICAgIHN0cnVj dCBydGVfZGV2YXJncyAqZGV2YXJnczsNCj4gKyAgICAgICBpbnQgcmV0Ow0KPiArDQo+ICsgICAg ICAgaWYgKGRldiA9PSBOVUxMKQ0KPiArICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+ ICsNCj4gKyAgICAgICBhZnVfZGV2ID0gUlRFX0RFVl9UT19BRlUoZGV2KTsNCj4gKyAgICAgICBp ZiAoIWRldikNCj4gKyAgICAgICAgICAgICAgIHJldHVybiAtRU5PRU5UOw0KPiArDQo+ICsgICAg ICAgZGV2YXJncyA9IGRldi0+ZGV2YXJnczsNCj4gKw0KPiArICAgICAgIHJldCA9IGlmcGdhX3Jl bW92ZV9kcml2ZXIoYWZ1X2Rldik7DQo+ICsgICAgICAgaWYgKHJldCkNCj4gKyAgICAgICAgICAg ICAgIHJldHVybiByZXQ7DQo+ICsNCj4gKyAgICAgICBUQUlMUV9SRU1PVkUoJnJ0ZV9pZnBnYV9i dXMuYWZ1X2xpc3QsIGFmdV9kZXYsIG5leHQpOw0KPiArDQo+ICsgICAgICAgVEFJTFFfUkVNT1ZF KCZkZXZhcmdzX2xpc3QsIGRldmFyZ3MsIG5leHQpOw0KPiArDQo+ICsgICAgICAgZnJlZShkZXZh cmdzLT5hcmdzKTsNCj4gKyAgICAgICBmcmVlKGRldmFyZ3MpOw0KPiArICAgICAgIGZyZWUoYWZ1 X2Rldik7DQo+ICsgICAgICAgcmV0dXJuIDA7DQo+ICsNCj4gK30NCj4gKw0KPiArc3RhdGljIHN0 cnVjdCBydGVfZGV2aWNlICoNCj4gK3J0ZV9pZnBnYV9maW5kX2RldmljZShjb25zdCBzdHJ1Y3Qg cnRlX2RldmljZSAqc3RhcnQsIHJ0ZV9kZXZfY21wX3QgY21wLA0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgDQo+ICsq ZGF0YSkgew0KPiArICAgICAgIHN0cnVjdCBydGVfYWZ1X2RldmljZSAqYWZ1X2RldjsNCj4gKw0K PiArICAgICAgIFRBSUxRX0ZPUkVBQ0goYWZ1X2RldiwgJnJ0ZV9pZnBnYV9idXMuYWZ1X2xpc3Qs IG5leHQpIHsNCj4gKyAgICAgICAgICAgICAgIGlmIChzdGFydCAmJiAmYWZ1X2Rldi0+ZGV2aWNl ID09IHN0YXJ0KSB7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gTlVMTDsNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQo+ICsgICAgICAgICAgICAgICB9DQo+ ICsgICAgICAgICAgICAgICBpZiAoY21wKCZhZnVfZGV2LT5kZXZpY2UsIGRhdGEpID09IDApDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAmYWZ1X2Rldi0+ZGV2aWNlOw0KPiArICAg ICAgIH0NCj4gKyAgICAgICByZXR1cm4gTlVMTDsNCj4gK30NCj4gK3N0YXRpYyBpbnQNCj4gK3J0 ZV9pZnBnYV9wYXJzZShjb25zdCBjaGFyICpuYW1lLCB2b2lkICphZGRyKSB7DQo+ICsgICAgICAg c3RydWN0IHJ0ZV9hZnVfZHJpdmVyICoqb3V0ID0gYWRkcjsNCj4gKyAgICAgICBzdHJ1Y3QgcnRl X2FmdV9kcml2ZXIgKmRyaXZlciA9IE5VTEw7DQo+ICsNCj4gKyAgICAgICBUQUlMUV9GT1JFQUNI KGRyaXZlciwgJnJ0ZV9pZnBnYV9idXMuZHJpdmVyX2xpc3QsIG5leHQpIHsNCj4gKyAgICAgICAg ICAgICAgIGlmIChzdHJuY21wKGRyaXZlci0+ZHJpdmVyLm5hbWUsIG5hbWUsDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdHJsZW4oZHJpdmVyLT5kcml2ZXIubmFtZSkpID09IDApDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KPiArICAgICAgICAgICAgICAgaWYgKGRy aXZlci0+ZHJpdmVyLmFsaWFzICYmDQo+ICsgICAgICAgICAgICAgICAgICAgc3RybmNtcChkcml2 ZXItPmRyaXZlci5hbGlhcywgbmFtZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0 cmxlbihkcml2ZXItPmRyaXZlci5hbGlhcykpID09IDApDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOw0KPiArICAgICAgIH0NCj4gKyAgICAgICBpZiAoZHJpdmVyICE9IE5VTEwgJiYN Cj4gKyAgICAgICAgICAgYWRkciAhPSBOVUxMKQ0KPiArICAgICAgICAgICAgICAgKm91dCA9IGRy aXZlcjsNCj4gKyAgICAgICByZXR1cm4gZHJpdmVyID09IE5VTEw7DQo+ICt9DQo+ICsNCj4gK3N0 cnVjdCBydGVfaWZwZ2FfYnVzIHJ0ZV9pZnBnYV9idXMgPSB7DQo+ICsgICAgICAgIC5idXMgPSB7 DQo+ICsgICAgICAgICAgICAgICAgLnNjYW4gICAgICAgID0gcnRlX2lmcGdhX3NjYW4sDQo+ICsg ICAgICAgICAgICAgICAgLnByb2JlICAgICAgID0gcnRlX2lmcGdhX3Byb2JlLA0KPiArICAgICAg ICAgICAgICAgIC5maW5kX2RldmljZSA9IHJ0ZV9pZnBnYV9maW5kX2RldmljZSwNCj4gKyAgICAg ICAgICAgIC5wbHVnICAgICAgICA9IHJ0ZV9pZnBnYV9wbHVnLA0KPiArICAgICAgICAgICAgLnVu cGx1ZyAgICAgID0gcnRlX2lmcGdhX3VucGx1ZywNCj4gKyAgICAgICAgICAgIC5wYXJzZSAgICAg ICA9IHJ0ZV9pZnBnYV9wYXJzZSwNCj4gKyAgICAgICAgfSwNCj4gKyAgICAgICAuYWZ1X2xpc3Qg ICAgPSBUQUlMUV9IRUFEX0lOSVRJQUxJWkVSKHJ0ZV9pZnBnYV9idXMuYWZ1X2xpc3QpLA0KPiAr ICAgICAgIC5kcml2ZXJfbGlzdCA9IA0KPiArVEFJTFFfSEVBRF9JTklUSUFMSVpFUihydGVfaWZw Z2FfYnVzLmRyaXZlcl9saXN0KSwNCj4gKyB9Ow0KPiArDQo+ICtSVEVfUkVHSVNURVJfQlVTKElG UEdBX0JVU19OQU1FLCBydGVfaWZwZ2FfYnVzLmJ1cyk7DQo+ICsNCj4gK1JURV9JTklUKGlmcGdh X2luaXRfbG9nKQ0KPiArew0KPiArICAgICAgIGlmcGdhX2J1c19sb2d0eXBlID0gcnRlX2xvZ19y ZWdpc3RlcigiYnVzLmlmcGdhIik7DQo+ICsgICAgICAgaWYgKGlmcGdhX2J1c19sb2d0eXBlID49 IDApDQo+ICsgICAgICAgICAgICAgICBydGVfbG9nX3NldF9sZXZlbChpZnBnYV9idXNfbG9ndHlw ZSwgUlRFX0xPR19OT1RJQ0UpOyANCj4gK30NCj4gKw0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9i dXMvaWZwZ2EvaWZwZ2FfY29tbW9uLmMgDQo+IGIvZHJpdmVycy9idXMvaWZwZ2EvaWZwZ2FfY29t bW9uLmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMC4uMmFhNmJiMA0K PiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2RyaXZlcnMvYnVzL2lmcGdhL2lmcGdhX2NvbW1vbi5j DQo+IEBAIC0wLDAgKzEsMTY4IEBADQo+ICsvKi0NCj4gKyAqICAgQlNEIExJQ0VOU0UNCj4gKyAq DQo+ICsgKiAgIENvcHlyaWdodChjKSAyMDEwLTIwMTQgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCBy aWdodHMgcmVzZXJ2ZWQuDQo+ICsgKiAgIENvcHlyaWdodCAyMDEzLTIwMTQgNldJTkQgUy5BLg0K PiArICogICBBbGwgcmlnaHRzIHJlc2VydmVkLg0KPiArICoNCj4gKyAqICAgUmVkaXN0cmlidXRp b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQo+ ICsgKiAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs b3dpbmcgY29uZGl0aW9ucw0KPiArICogICBhcmUgbWV0Og0KPiArICoNCj4gKyAqICAgICAqIFJl ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp Z2h0DQo+ICsgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIuDQo+ICsgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodA0KPiArICogICAgICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyIGluDQo+ICsgKiAgICAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp YWxzIHByb3ZpZGVkIHdpdGggdGhlDQo+ICsgKiAgICAgICBkaXN0cmlidXRpb24uDQo+ICsgKiAg ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMg b2YgaXRzDQo+ICsgKiAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQNCj4gKyAqICAgICAgIGZyb20gdGhpcyBzb2Z0d2Fy ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCj4gKyAqDQo+ICsg KiAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO RCBDT05UUklCVVRPUlMNCj4gKyAqICAgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QNCj4gKyAqICAgTElNSVRFRCBUTywgVEhF IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SDQo+ ICsgKiAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT SEFMTCBUSEUgQ09QWVJJR0hUDQo+ICsgKiAgIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLA0KPiArICogICBTUEVDSUFM LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U DQo+ICsgKiAgIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig U0VSVklDRVM7IExPU1MgT0YgVVNFLA0KPiArICogICBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkNCj4gKyAqICAgVEhF T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg T1IgVE9SVA0KPiArICogICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UNCj4gKyAqICAgT0YgVEhJUyBTT0ZUV0FSRSwg RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCj4gKyAq Lw0KPiArDQo+ICsNCj4gKyNpbmNsdWRlIDxzdHJpbmcuaD4NCj4gKyNpbmNsdWRlIDxpbnR0eXBl cy5oPg0KPiArI2luY2x1ZGUgPHN0ZGludC5oPg0KPiArI2luY2x1ZGUgPHN0ZGxpYi5oPg0KPiAr I2luY2x1ZGUgPHN0ZGlvLmg+DQo+ICsjaW5jbHVkZSA8c3lzL3F1ZXVlLmg+DQo+ICsjaW5jbHVk ZSA8c3lzL21tYW4uaD4NCj4gKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4NCj4gKyNpbmNsdWRlIDx1 bmlzdGQuaD4NCj4gKyNpbmNsdWRlIDxmY250bC5oPg0KPiArDQo+ICsjaW5jbHVkZSA8cnRlX2Vy cm5vLmg+DQo+ICsjaW5jbHVkZSA8cnRlX2J1cy5oPg0KPiArI2luY2x1ZGUgPHJ0ZV9wZXJfbGNv cmUuaD4NCj4gKyNpbmNsdWRlIDxydGVfbWVtb3J5Lmg+DQo+ICsjaW5jbHVkZSA8cnRlX21lbXpv bmUuaD4NCj4gKyNpbmNsdWRlIDxydGVfZWFsLmg+DQo+ICsjaW5jbHVkZSA8cnRlX2NvbW1vbi5o Pg0KPiArDQo+ICsjaW5jbHVkZSA8cnRlX2RldmFyZ3MuaD4NCj4gKyNpbmNsdWRlIDxydGVfcGNp Lmg+DQo+ICsjaW5jbHVkZSA8cnRlX2J1c19wY2kuaD4NCj4gKyNpbmNsdWRlIDxydGVfa3Zhcmdz Lmg+DQo+ICsjaW5jbHVkZSA8cnRlX2FsYXJtLmg+DQo+ICsNCj4gKyNpbmNsdWRlICJydGVfYnVz X2lmcGdhLmgiDQo+ICsjaW5jbHVkZSAiaWZwZ2FfbG9ncy5oIg0KPiArI2luY2x1ZGUgImlmcGdh X2NvbW1vbi5oIg0KPiArDQo+ICtpbnQgaWZwZ2FfZ2V0X3N0cmluZ19hcmcoY29uc3QgY2hhciAq a2V5IF9fcnRlX3VudXNlZCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj aGFyICp2YWx1ZSwgdm9pZCAqZXh0cmFfYXJncykgew0KPiArICAgICAgIGlmICghdmFsdWUgfHwg IWV4dHJhX2FyZ3MpDQo+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsNCj4gKw0KPiAr ICAgICAgICooY2hhciAqKilleHRyYV9hcmdzID0gc3RyZHVwKHZhbHVlKTsNCj4gKw0KPiArICAg ICAgIGlmICghKihjaGFyICoqKWV4dHJhX2FyZ3MpDQo+ICsgICAgICAgICAgICAgICByZXR1cm4g LUVOT01FTTsNCj4gKw0KPiArICAgICAgIHJldHVybiAwOw0KPiArfQ0KPiAraW50IGlmcGdhX2dl dF9pbnRlZ2VyMzJfYXJnKGNvbnN0IGNoYXIgKmtleSBfX3J0ZV91bnVzZWQsIGNvbnN0IGNoYXIg DQo+ICsqdmFsdWUsIHZvaWQgKmV4dHJhX2FyZ3MpIHsNCj4gKyAgICAgICBpZiAoIXZhbHVlIHx8 ICFleHRyYV9hcmdzKQ0KPiArICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+ICsNCj4g KyAgICAgICAqKGludCAqKWV4dHJhX2FyZ3MgPSBzdHJ0b3VsbCh2YWx1ZSwgTlVMTCwgMCk7DQo+ ICsNCj4gKyAgICAgICByZXR1cm4gMDsNCj4gK30NCj4gK2ludCBpZnBnYV9nZXRfaW50ZWdlcjY0 X2FyZyhjb25zdCBjaGFyICprZXkgX19ydGVfdW51c2VkLCBjb25zdCBjaGFyIA0KPiArKnZhbHVl LCB2b2lkICpleHRyYV9hcmdzKSB7DQo+ICsgICAgICAgaWYgKCF2YWx1ZSB8fCAhZXh0cmFfYXJn cykNCj4gKyAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiArDQo+ICsgICAgICAgKih1 aW50NjRfdCAqKWV4dHJhX2FyZ3MgPSBzdHJ0b3VsbCh2YWx1ZSwgTlVMTCwgMCk7DQo+ICsNCj4g KyAgICAgICByZXR1cm4gMDsNCj4gK30NCj4gK2ludCBpZnBnYV9nZXRfdW5zaWduZWRfbG9uZyhj b25zdCBjaGFyICpzdHIsIGludCBiYXNlKSB7DQo+ICsgICAgICAgdW5zaWduZWQgbG9uZyBudW07 DQo+ICsgICAgICAgY2hhciAqZW5kID0gTlVMTDsNCj4gKw0KPiArICAgICAgIGVycm5vID0gMDsN Cj4gKw0KPiArICAgICAgIG51bSA9IHN0cnRvdWwoc3RyLCAmZW5kLCBiYXNlKTsNCj4gKyAgICAg ICBpZiAoKHN0clswXSA9PSAnXDAnKSB8fCAoZW5kID09IE5VTEwpIHx8ICgqZW5kICE9ICdcMCcp IHx8IChlcnJubyAhPSAwKSkNCj4gKyAgICAgICAgICAgICAgIHJldHVybiAtMTsNCj4gKw0KPiAr ICAgICAgIHJldHVybiBudW07DQo+ICsNCj4gK30NCj4gK2ludCBpZnBnYV9nZXRfYmRmX2FyZyhj b25zdCBjaGFyICprZXkgX19ydGVfdW51c2VkLCBjb25zdCBjaGFyIA0KPiArKnZhbHVlLCB2b2lk ICpleHRyYV9hcmdzKSB7ICNkZWZpbmUgTUFYX1BBVEhfTEVOIDEwMjQNCj4gKyAgICAgICBzdHJ1 Y3QgcnRlX3BjaV9hZGRyICphZGRyOw0KPiArICAgICAgIGludCBudW1bNF07DQo+ICsgICAgICAg Y2hhciBzdHJbTUFYX1BBVEhfTEVOXTsNCj4gKyAgICAgICBpbnQgaSwgajsNCj4gKw0KPiArICAg ICAgIGlmICghdmFsdWUgfHwgIWV4dHJhX2FyZ3MpDQo+ICsgICAgICAgICAgICAgICByZXR1cm4g LUVJTlZBTDsNCj4gKw0KPiArICAgIGFkZHIgPSAoc3RydWN0IHJ0ZV9wY2lfYWRkciAqKWV4dHJh X2FyZ3M7DQo+ICsgICAgICAgc3RyY3B5KHN0ciwgdmFsdWUpOw0KPiArICAgICAgIG1lbXNldChu dW0sIDAsIDQgKiBzaXplb2YobnVtWzBdKSk7DQo+ICsgICAgICAgaSA9IHN0cmxlbihzdHIpIC0g MTsNCj4gKyAgICAgICBqID0gMzsNCj4gKyAgICAgICB3aGlsZSAoaSA+IDAgJiYgaiA+PSAwKSB7 DQo+ICsgICAgICAgICAgICAgICB3aGlsZSAoKHN0cltpIC0gMV0gIT0gJzonICYmIHN0cltpIC0g MV0gIT0gJy4nKSAmJiBpID4gMCkNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgaS0tOw0KPiAr ICAgICAgICAgICAgICAgbnVtW2otLV0gPSBpZnBnYV9nZXRfdW5zaWduZWRfbG9uZygmc3RyW2ld LCAxNik7DQo+ICsgICAgICAgICAgICAgICBpLS07DQo+ICsgICAgICAgICAgICAgICBpZiAoaSA+ PSAwKQ0KPiArICAgICAgICAgICAgICAgICAgICAgICBzdHJbaV0gPSAnXDAnOw0KPiArICAgICAg IH0NCj4gKyAgICAgICBhZGRyLT5kb21haW4gPSBudW1bMF07DQo+ICsgICAgICAgYWRkci0+YnVz ID0gbnVtWzFdOw0KPiArICAgICAgIGFkZHItPmRldmlkID0gbnVtWzJdOw0KPiArICAgICAgIGFk ZHItPmZ1bmN0aW9uID0gbnVtWzNdOw0KPiArICAgICAgIHByaW50ZigiWyVzXTogYmRmICUwNGQ6 JTAyZDolMDJkLiUwMmRcbiIsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgIF9fZnVuY19fLA0K PiArICAgICAgICAgICAgICAgICAgICAgICBhZGRyLT5kb21haW4sDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgIGFkZHItPmJ1cywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgYWRkci0+ZGV2 aWQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgIGFkZHItPmZ1bmN0aW9uKTsNCj4gKw0KPiAr ICAgICAgIHJldHVybiAwOw0KPiArfQ0KPiAraW50IGlmcGdhX2FmdV9pZF9jbXAoY29uc3Qgc3Ry dWN0IHJ0ZV9hZnVfaWQgKmFmdV9pZDAsIGNvbnN0IHN0cnVjdCANCj4gK3J0ZV9hZnVfaWQgKmFm dV9pZDEpIHsNCj4gKyAgICAgICBpZigoYWZ1X2lkMC0+cGNpX2FkZHIuYnVzICAgICAgID09IGFm dV9pZDEtPnBjaV9hZGRyLmJ1cykgJiYNCj4gKyAgICAgICAoYWZ1X2lkMC0+cGNpX2FkZHIuZGV2 aWQgICAgID09IGFmdV9pZDEtPnBjaV9hZGRyLmRldmlkKSAmJg0KPiArICAgICAgIChhZnVfaWQw LT5wY2lfYWRkci5mdW5jdGlvbiAgPT0gYWZ1X2lkMS0+cGNpX2FkZHIuZnVuY3Rpb24pICYmDQo+ ICsgICAgICAgKGFmdV9pZDAtPnV1aWRfbG93ICAgICAgICAgICA9PSBhZnVfaWQxLT51dWlkX2xv dykgJiYNCj4gKyAgICAgICAoYWZ1X2lkMC0+dXVpZF9oaWdoICAgICAgICAgID09IGFmdV9pZDEt PnV1aWRfaGlnaCkgJiYNCj4gKyAgICAgICAoYWZ1X2lkMC0+cG9ydCAgICAgICAgICAgICAgID09 IGFmdV9pZDEtPnBvcnQpKSB7DQo+ICsNCj4gKyAgICAgICAgcmV0dXJuIDA7DQo+ICsgICAgfQ0K PiArICAgIGVsc2UNCj4gKyAgICAgICByZXR1cm4gMTsNCj4gK30NCj4gK2ludCBpZnBnYV9wY2lf YWRkcl9jbXAoY29uc3Qgc3RydWN0IHJ0ZV9kZXZpY2UgKmRldiwgY29uc3Qgdm9pZCANCj4gKypf cGNpX2FkZHIpIHsNCj4gKyAgICAgICBzdHJ1Y3QgcnRlX3BjaV9kZXZpY2UgKnBkZXY7DQo+ICsg ICAgICAgY29uc3Qgc3RydWN0IHJ0ZV9wY2lfYWRkciAqcGFkZHIgPSBfcGNpX2FkZHI7DQo+ICsN Cj4gKyAgICAgICBwZGV2ID0gUlRFX0RFVl9UT19QQ0koKihzdHJ1Y3QgcnRlX2RldmljZSAqKiko dm9pZCAqKSZkZXYpOw0KPiArICAgICAgIHJldHVybiBydGVfZWFsX2NvbXBhcmVfcGNpX2FkZHIo JnBkZXYtPmFkZHIsIHBhZGRyKTsgfQ0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9idXMvaWZwZ2Ev aWZwZ2FfY29tbW9uLmggDQo+IGIvZHJpdmVycy9idXMvaWZwZ2EvaWZwZ2FfY29tbW9uLmgNCj4g bmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMC4uNTkwZmYyNw0KPiAtLS0gL2Rl di9udWxsDQo+ICsrKyBiL2RyaXZlcnMvYnVzL2lmcGdhL2lmcGdhX2NvbW1vbi5oDQo+IEBAIC0w LDAgKzEsNDYgQEANCj4gKy8qLQ0KPiArICogICBCU0QgTElDRU5TRQ0KPiArICoNCj4gKyAqICAg Q29weXJpZ2h0KGMpIDIwMTcgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu DQo+ICsgKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQo+ICsgKg0KPiArICogICBSZWRpc3RyaWJ1 dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQN Cj4gKyAqICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv bGxvd2luZyBjb25kaXRpb25zDQo+ICsgKiAgIGFyZSBtZXQ6DQo+ICsgKg0KPiArICogICAgICog UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5 cmlnaHQNCj4gKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCj4gKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0DQo+ICsgKiAgICAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIgaW4NCj4gKyAqICAgICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUNCj4gKyAqICAgICAgIGRpc3RyaWJ1dGlvbi4NCj4gKyAq ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1l cyBvZiBpdHMNCj4gKyAqICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZA0KPiArICogICAgICAgZnJvbSB0aGlzIHNvZnR3 YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KPiArICoNCj4g KyAqICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg QU5EIENPTlRSSUJVVE9SUw0KPiArICogICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVA0KPiArICogICBMSU1JVEVEIFRPLCBU SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IN Cj4gKyAqICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U IFNIQUxMIFRIRSBDT1BZUklHSFQNCj4gKyAqICAgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsDQo+ICsgKiAgIFNQRUNJ QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO T1QNCj4gKyAqICAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsDQo+ICsgKiAgIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQ0KPiArICogICBU SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ LCBPUiBUT1JUDQo+ICsgKiAgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQ0KPiArICogICBPRiBUSElTIFNPRlRXQVJF LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KPiAr ICovDQo+ICsjaWZuZGVmIF9JRlBHQV9DT01NT05fSF8NCj4gKyNkZWZpbmUgX0lGUEdBX0NPTU1P Tl9IXw0KPiArDQo+ICsjaW5jbHVkZSA8cnRlX3BjaS5oPg0KPiArDQo+ICtleHRlcm4gaW50IGlm cGdhX2dldF9zdHJpbmdfYXJnKGNvbnN0IGNoYXIgKmtleSBfX3J0ZV91bnVzZWQsIGNvbnN0IA0K PiArY2hhciAqdmFsdWUsIHZvaWQgKmV4dHJhX2FyZ3MpOyBleHRlcm4gaW50IA0KPiAraWZwZ2Ff Z2V0X2ludGVnZXIzMl9hcmcoY29uc3QgY2hhciAqa2V5IF9fcnRlX3VudXNlZCwgY29uc3QgY2hh ciANCj4gKyp2YWx1ZSwgdm9pZCAqZXh0cmFfYXJncyk7IGV4dGVybiBpbnQgaWZwZ2FfZ2V0X2lu dGVnZXI2NF9hcmcoY29uc3QgDQo+ICtjaGFyICprZXkgX19ydGVfdW51c2VkLCBjb25zdCBjaGFy ICp2YWx1ZSwgdm9pZCAqZXh0cmFfYXJncyk7IGV4dGVybiANCj4gK2ludCBpZnBnYV9nZXRfdW5z aWduZWRfbG9uZyhjb25zdCBjaGFyICpzdHIsIGludCBiYXNlKTsgZXh0ZXJuIGludCANCj4gK2lm cGdhX2dldF9iZGZfYXJnKGNvbnN0IGNoYXIgKmtleSBfX3J0ZV91bnVzZWQsIGNvbnN0IGNoYXIg KnZhbHVlLCANCj4gK3ZvaWQgKmV4dHJhX2FyZ3MpOyBleHRlcm4gaW50IGlmcGdhX2FmdV9pZF9j bXAoY29uc3Qgc3RydWN0IA0KPiArcnRlX2FmdV9pZCAqYWZ1X2lkMCwgY29uc3Qgc3RydWN0IHJ0 ZV9hZnVfaWQgKmFmdV9pZDEpOyBleHRlcm4gaW50IA0KPiAraWZwZ2FfcGNpX2FkZHJfY21wKGNv bnN0IHN0cnVjdCBydGVfZGV2aWNlICpkZXYsIGNvbnN0IHZvaWQgDQo+ICsqX3BjaV9hZGRyKTsN Cj4gKw0KPiArI2VuZGlmIC8qIF9JRlBHQV9DT01NT05fSF8gKi8NCj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvYnVzL2lmcGdhL2lmcGdhX2xvZ3MuaCANCj4gYi9kcml2ZXJzL2J1cy9pZnBnYS9pZnBn YV9sb2dzLmggbmV3IGZpbGUgbW9kZSAxMDA2NDQgaW5kZXggDQo+IDAwMDAwMDAuLmViNTYzOTMN Cj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9kcml2ZXJzL2J1cy9pZnBnYS9pZnBnYV9sb2dzLmgN Cj4gQEAgLTAsMCArMSw1OSBAQA0KPiArLyotDQo+ICsgKiAgIEJTRCBMSUNFTlNFDQo+ICsgKg0K PiArICogICBDb3B5cmlnaHQoYykgMjAxNyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyBy ZXNlcnZlZC4NCj4gKyAqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4NCj4gKyAqDQo+ICsgKiAgIFJl ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig d2l0aG91dA0KPiArICogICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMNCj4gKyAqICAgYXJlIG1ldDoNCj4gKyAqDQo+ICsg KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi b3ZlIGNvcHlyaWdodA0KPiArICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KPiArICogICAgICogUmVkaXN0cmlidXRp b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQNCj4g KyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lciBpbg0KPiArICogICAgICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90 aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQ0KPiArICogICAgICAgZGlzdHJpYnV0aW9u Lg0KPiArICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3Ig dGhlIG5hbWVzIG9mIGl0cw0KPiArICogICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkDQo+ICsgKiAgICAgICBmcm9tIHRo aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQo+ ICsgKg0KPiArICogICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTDQo+ICsgKiAgICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UDQo+ICsgKiAgIExJTUlU RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO RVNTIEZPUg0KPiArICogICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVA0KPiArICogICBPV05FUiBPUiBDT05UUklCVVRP UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwNCj4gKyAq ICAgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO RywgQlVUIE5PVA0KPiArICogICBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwNCj4gKyAqICAgREFUQSwgT1IgUFJPRklU UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZDQo+ ICsgKiAgIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM SUFCSUxJVFksIE9SIFRPUlQNCj4gKyAqICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFDQo+ICsgKiAgIE9GIFRISVMg U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B R0UuDQo+ICsgKi8NCj4gKyNpZm5kZWYgX0lGUEdBX0JVU19MT0dTX0hfDQo+ICsjZGVmaW5lIF9J RlBHQV9CVVNfTE9HU19IXw0KPiArDQo+ICsjaW5jbHVkZSA8cnRlX2xvZy5oPg0KPiArDQo+ICtl eHRlcm4gaW50IGlmcGdhX2J1c19sb2d0eXBlOw0KPiArDQo+ICsjZGVmaW5lIElGUEdBX0xPRyhs ZXZlbCwgZm10LCBhcmdzLi4uKSBcDQo+ICsgICAgICAgcnRlX2xvZyhSVEVfTE9HXyAjIyBsZXZl bCwgaWZwZ2FfYnVzX2xvZ3R5cGUsICIlcygpOiAiIGZtdCAiXG4iLCBcDQo+ICsgICAgICAgICAg ICAgICBfX2Z1bmNfXywgIyNhcmdzKQ0KPiArDQo+ICsjZGVmaW5lIElGUEdBX0JVU19MT0cobGV2 ZWwsIGZtdCwgYXJncy4uLikgXA0KPiArICAgICAgIHJ0ZV9sb2coUlRFX0xPR18gIyMgbGV2ZWws IGlmcGdhX2J1c19sb2d0eXBlLCAiJXMoKTogIiBmbXQgIlxuIiwgXA0KPiArICAgICAgICAgICAg ICAgX19mdW5jX18sICMjYXJncykNCj4gKw0KPiArI2RlZmluZSBJRlBHQV9CVVNfRlVOQ19UUkFD RSgpIElGUEdBX0JVU19MT0coREVCVUcsICI+PiIpDQo+ICsNCj4gKyNkZWZpbmUgSUZQR0FfQlVT X0RFQlVHKGZtdCwgYXJncy4uLikgXA0KPiArICAgICAgIElGUEdBX0JVU19MT0coREVCVUcsIGZt dCwgIyMgYXJncykgI2RlZmluZSBJRlBHQV9CVVNfSU5GTyhmbXQsIA0KPiArYXJncy4uLikgXA0K PiArICAgICAgIElGUEdBX0JVU19MT0coSU5GTywgZm10LCAjIyBhcmdzKSAjZGVmaW5lIElGUEdB X0JVU19FUlIoZm10LCANCj4gK2FyZ3MuLi4pIFwNCj4gKyAgICAgICBJRlBHQV9CVVNfTE9HKEVS UiwgZm10LCAjIyBhcmdzKSAjZGVmaW5lIElGUEdBX0JVU19XQVJOKGZtdCwgDQo+ICthcmdzLi4u KSBcDQo+ICsgICAgICAgSUZQR0FfQlVTX0xPRyhXQVJOSU5HLCBmbXQsICMjIGFyZ3MpDQo+ICsN Cj4gKyNlbmRpZiAvKiBfSUZQR0FfQlVTX0xPR1NfSF8gKi8NCj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvYnVzL2lmcGdhL3J0ZV9idXNfaWZwZ2EuaCANCj4gYi9kcml2ZXJzL2J1cy9pZnBnYS9ydGVf YnVzX2lmcGdhLmgNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMC4uNTQ5 MWE0NQ0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2RyaXZlcnMvYnVzL2lmcGdhL3J0ZV9idXNf aWZwZ2EuaA0KPiBAQCAtMCwwICsxLDE1MyBAQA0KPiArLyotDQo+ICsgKiAgIEJTRCBMSUNFTlNF DQo+ICsgKg0KPiArICogICBDb3B5cmlnaHQoYykgMjAxNiBSZWhpdmVUZWNoLiBBbGwgcmlnaHRz IHJlc2VydmVkLg0KPiArICoNCj4gKyAqICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQo+ICsgKiAgIG1vZGlmaWNhdGlv biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucw0K PiArICogICBhcmUgbWV0Og0KPiArICoNCj4gKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQo+ICsgKiAgICAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIuDQo+ICsgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodA0KPiArICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluDQo+ICsgKiAgICAg ICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg dGhlDQo+ICsgKiAgICAgICBkaXN0cmlidXRpb24uDQo+ICsgKiAgICAgKiBOZWl0aGVyIHRoZSBu YW1lIG9mIFJlaGl2ZVRlY2ggbm9yIHRoZSBuYW1lcyBvZiBpdHMNCj4gKyAqICAgICAgIGNvbnRy aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl ZA0KPiArICogICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig d3JpdHRlbiBwZXJtaXNzaW9uLg0KPiArICoNCj4gKyAqICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUw0KPiArICogICAi QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg QlVUIE5PVA0KPiArICogICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1INCj4gKyAqICAgQSBQQVJUSUNVTEFSIFBVUlBP U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQNCj4gKyAq ICAgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF Q1QsIElOQ0lERU5UQUwsDQo+ICsgKiAgIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QNCj4gKyAqICAgTElNSVRFRCBUTywgUFJP Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsDQo+ ICsgKiAgIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF UiBDQVVTRUQgQU5EIE9OIEFOWQ0KPiArICogICBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQo+ICsgKiAgIChJTkNMVURJ TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF IFVTRQ0KPiArICogICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KPiArICovDQo+ICsNCj4gKyNpZm5kZWYgX1JURV9C VVNfSUZQR0FfSF8NCj4gKyNkZWZpbmUgX1JURV9CVVNfSUZQR0FfSF8NCj4gKw0KPiArLyoqDQo+ ICsgKiBAZmlsZQ0KPiArICoNCj4gKyAqIFJURSBQQ0kgQnVzIEludGVyZmFjZQ0KDQpCdXMgSUZQ R0ENClJvc2VuOiB0aGFua3MgeW91IGNoZWNrDQoNCj4gKyAqLw0KPiArDQo+ICsjaWZkZWYgX19j cGx1c3BsdXMNCj4gK2V4dGVybiAiQyIgew0KPiArI2VuZGlmDQo+ICsNCj4gKyNpbmNsdWRlIDxy dGVfYnVzLmg+DQo+ICsjaW5jbHVkZSA8cnRlX3BjaS5oPg0KPiArDQo+ICsvKiogTmFtZSBvZiBJ bnRlbCBGUEdBIEJ1cyAqLw0KPiArI2RlZmluZSBJRlBHQV9CVVNfTkFNRSBpZnBnYQ0KPiArDQo+ ICsvKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyAqLw0KPiArc3RydWN0IHJ0ZV9hZnVfZGV2aWNlOw0K PiArc3RydWN0IHJ0ZV9hZnVfZHJpdmVyOw0KPiArDQo+ICsvKiogTGlzdCBvZiBJbnRlbCBBRlUg ZGV2aWNlcyAqLw0KPiArVEFJTFFfSEVBRChydGVfYWZ1X2RldmljZV9saXN0LCBydGVfYWZ1X2Rl dmljZSk7DQo+ICsvKiogTGlzdCBvZiBBRlUgZHJpdmVycyAqLw0KPiArVEFJTFFfSEVBRChydGVf YWZ1X2RyaXZlcl9saXN0LCBydGVfYWZ1X2RyaXZlcik7DQo+ICsNCj4gKyNkZWZpbmUgSUZQR0Ff QlVTX0JJVFNUUkVBTV9QQVRIX01BWF9MRU4gMjU2DQo+ICsNCj4gKy8qKg0KPiArICogQSBzdHJ1 Y3R1cmUgZGVzY3JpYmluZyBhbiBJRCBmb3IgYSBBRlUgZHJpdmVyLiBFYWNoIGRyaXZlciANCj4g K3Byb3ZpZGVzIGENCj4gKyAqIHRhYmxlIG9mIHRoZXNlIElEcyBmb3IgZWFjaCBkZXZpY2UgdGhh dCBpdCBzdXBwb3J0cy4NCj4gKyAqLw0KPiArc3RydWN0IHJ0ZV9hZnVfaWQgew0KPiArICAgICAg IHN0cnVjdCBydGVfcGNpX2FkZHIgcGNpX2FkZHI7DQo+ICsgICAgICAgdWludDY0X3QgdXVpZF9s b3c7DQo+ICsgICAgICAgdWludDY0X3QgdXVpZF9oaWdoOw0KPiArICAgICAgIGludCAgICAgIHBv cnQ7DQo+ICt9X19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOw0KPiArDQo+ICsvKioNCj4gKyAqIEEg c3RydWN0dXJlIHByIGNvbmZpZ3VyYXRpb24gQUZVIGRyaXZlci4NCj4gKyAqLw0KPiArDQo+ICtz dHJ1Y3QgcnRlX2FmdV9wcl9jb25mIHsNCj4gKyAgICAgICBzdHJ1Y3QgcnRlX2FmdV9pZCBhZnVf aWQ7DQo+ICsgICAgICAgaW50IHByX2VuYWJsZTsNCj4gKyAgICAgICBjaGFyICAgICAgICAgICAg YnNfcGF0aFtJRlBHQV9CVVNfQklUU1RSRUFNX1BBVEhfTUFYX0xFTl07DQo+ICt9Ow0KPiArDQo+ ICsjZGVmaW5lIEFGVV9QUklfU1RSX1NJWkUgKFBDSV9QUklfU1RSX1NJWkUgKyA4KQ0KPiArDQo+ ICsvKioNCj4gKyAqIEEgc3RydWN0dXJlIGRlc2NyaWJpbmcgYSBBRlUgZGV2aWNlLg0KPiArICov DQo+ICtzdHJ1Y3QgcnRlX2FmdV9kZXZpY2Ugew0KPiArICAgICAgIFRBSUxRX0VOVFJZKHJ0ZV9h ZnVfZGV2aWNlKSBuZXh0OyAgICAgICAvKio8IE5leHQgaW4gZGV2aWNlIGxpc3QuICovDQo+ICsg ICAgICAgc3RydWN0IHJ0ZV9kZXZpY2UgZGV2aWNlOyAgICAgICAgICAgICAgIC8qKjwgSW5oZXJp dCBjb3JlIGRldmljZSAqLw0KPiArICAgICAgIHN0cnVjdCBydGVfcmF3ZGV2ICpyYXdkZXY7DQo+ ICsgICAgICAgc3RydWN0IHJ0ZV9hZnVfaWQgaWQ7ICAgICAgICAgICAgICAgICAgIC8qKjwgQUZV IGlkIHdpdGhpbiBGUEdBLiAqLw0KPiArICAgICAgIHVpbnQzMl90IG51bV9yZWdpb247ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IG51bWJlciBvZiByZWdp b25zIGZvdW5kICovDQo+ICsgICAgICAgc3RydWN0IHJ0ZV9tZW1fcmVzb3VyY2UgbWVtX3Jlc291 cmNlW1BDSV9NQVhfUkVTT1VSQ0VdOw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKio8IFBDSSBNZW1vcnkgUmVzb3VyY2UgKi8NCj4gKyAgICAgICBz dHJ1Y3QgcnRlX2ludHJfaGFuZGxlIGludHJfaGFuZGxlOyAgICAgLyoqPCBJbnRlcnJ1cHQgaGFu ZGxlICovDQo+ICsgICAgICAgc3RydWN0IHJ0ZV9hZnVfZHJpdmVyICpkcml2ZXI7ICAgICAgICAg IC8qKjwgQXNzb2NpYXRlZCBkcml2ZXIgKi8NCj4gKyAgICAgICBjaGFyIHBhdGhbSUZQR0FfQlVT X0JJVFNUUkVBTV9QQVRIX01BWF9MRU5dOw0KPiArfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7 DQo+ICsNCj4gKy8qKg0KPiArICogQGludGVybmFsDQo+ICsgKiBIZWxwZXIgbWFjcm8gZm9yIGRy aXZlcnMgdGhhdCBuZWVkIHRvIGNvbnZlcnQgdG8gc3RydWN0IHJ0ZV9hZnVfZGV2aWNlLg0KPiAr ICovDQo+ICsjZGVmaW5lIFJURV9ERVZfVE9fQUZVKHB0cikgXA0KPiArICAgICAgIGNvbnRhaW5l cl9vZihwdHIsIHN0cnVjdCBydGVfYWZ1X2RldmljZSwgZGV2aWNlKQ0KPiArDQo+ICsvKioNCj4g KyAqIEluaXRpYWxpc2F0aW9uIGZ1bmN0aW9uIGZvciB0aGUgZHJpdmVyIGNhbGxlZCBkdXJpbmcg UENJIHByb2JpbmcuDQo+ICsgKi8NCj4gK3R5cGVkZWYgaW50IChhZnVfcHJvYmVfdCkoc3RydWN0 IHJ0ZV9hZnVfZGV2aWNlICopOw0KPiArDQo+ICsvKioNCj4gKyAqIFVuaW5pdGlhbGlzYXRpb24g ZnVuY3Rpb24gZm9yIHRoZSBkcml2ZXIgY2FsbGVkIGR1cmluZyBob3RwbHVnZ2luZy4NCj4gKyAq Lw0KPiArdHlwZWRlZiBpbnQgKGFmdV9yZW1vdmVfdCkoc3RydWN0IHJ0ZV9hZnVfZGV2aWNlICop Ow0KPiArDQo+ICsvKioNCj4gKyAqIEEgc3RydWN0dXJlIGRlc2NyaWJpbmcgYSBQQ0kgZGV2aWNl Lg0KDQpUcml2aWFsOiBBbiBBRlUgZGV2aWNlLCBwcm9iYWJseS4gKHNvcnJ5IGZvciBuaXRwaWNr aW5nIC0gSSBrbm93IHRoaXMgaXMgUkZDIC0gc28gaWdub3JlIGlmIHlvdSBhbHJlYWR5IGtub3cg YWJvdXQgdGhlc2UgY2hhbmdlcy4pDQpSb3NlbjogdGhhbmtzIHlvdSBjaGVjaw0KDQo+ICsgKi8N Cj4gK3N0cnVjdCBydGVfYWZ1X2RyaXZlciB7DQo+ICsgICAgICAgVEFJTFFfRU5UUlkocnRlX2Fm dV9kcml2ZXIpIG5leHQ7ICAgICAgIC8qKjwgTmV4dCBhZnUgZHJpdmVyLiAqLw0KPiArICAgICAg IHN0cnVjdCBydGVfZHJpdmVyIGRyaXZlcjsgICAgICAgICAgICAgICAvKio8IEluaGVyaXQgY29y ZSBkcml2ZXIuICovDQo+ICsgICAgICAgYWZ1X3Byb2JlX3QgKnByb2JlOyAgICAgICAgICAgICAg ICAgICAgIC8qKjwgRGV2aWNlIFByb2JlIGZ1bmN0aW9uLiAqLw0KPiArICAgICAgIGFmdV9yZW1v dmVfdCAqcmVtb3ZlOyAgICAgICAgICAgICAgICAgICAvKio8IERldmljZSBSZW1vdmUgZnVuY3Rp b24uICovDQo+ICsgICAgICAgc3RydWN0IHJ0ZV9hZnVfaWQgaWQ7ICAgICAgICAgICAgICAgICAg IC8qKjwgQUZVIGlkIHdpdGhpbiBGUEdBLiAqLw0KPiArICAgICAgIHVpbnQzMl90IGRydl9mbGFn czsgICAgICAgICAgICAgICAgICAgICAvKio8IEZsYWdzIGNvbnRvbGxpbmcgaGFuZGxpbmcgb2Yg ZGV2aWNlLiAqLw0KPiArfTsNCj4gKw0KPiArLyoqDQo+ICsgKiBTdHJ1Y3R1cmUgZGVzY3JpYmlu ZyB0aGUgSW50ZWwgRlBHQSBidXMgICovIHN0cnVjdCBydGVfaWZwZ2FfYnVzIHsNCj4gKyAgICAg ICBzdHJ1Y3QgcnRlX2J1cyBidXM7ICAgICAgICAgICAgICAgLyoqPCBJbmhlcml0IHRoZSBnZW5l cmljIGNsYXNzICovDQo+ICsgICAgICAgc3RydWN0IHJ0ZV9hZnVfZGV2aWNlX2xpc3QgYWZ1X2xp c3Q7ICAvKio8IExpc3Qgb2YgQUZVIGRldmljZXMgKi8NCj4gKyAgICAgICBzdHJ1Y3QgcnRlX2Fm dV9kcml2ZXJfbGlzdCBkcml2ZXJfbGlzdDsgIC8qKjwgTGlzdCBvZiBGUEdBIA0KPiArZHJpdmVy cyAqLyB9Ow0KPiArDQo+ICtzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKg0KPiArcnRlX2lmcGdh X2RldmljZV9uYW1lKGNvbnN0IHN0cnVjdCBydGVfYWZ1X2RldmljZSAqYWZ1KSB7DQo+ICsgICAg ICAgaWYgKGFmdSAmJiBhZnUtPmRldmljZS5uYW1lKQ0KPiArICAgICAgICAgICAgICAgcmV0dXJu IGFmdS0+ZGV2aWNlLm5hbWU7DQo+ICsgICAgICAgcmV0dXJuIE5VTEw7DQo+ICt9DQo+ICsNCj4g K2V4dGVybiBzdHJ1Y3QgcnRlX2lmcGdhX2J1cyBydGVfaWZwZ2FfYnVzOw0KPiArDQo+ICt2b2lk IHJ0ZV9pZnBnYV9kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IHJ0ZV9hZnVfZHJpdmVyICpkcml2ZXIp OyB2b2lkIA0KPiArcnRlX2lmcGdhX2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBydGVfYWZ1X2Ry aXZlciAqZHJpdmVyKTsNCj4gKw0KPiArI2VuZGlmIC8qIF9SVEVfQlVTX0lGUEdBX0hfICovDQo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2J1cy9pZnBnYS9ydGVfYnVzX2lmcGdhX3ZlcnNpb24ubWFw IA0KPiBiL2RyaXZlcnMvYnVzL2lmcGdhL3J0ZV9idXNfaWZwZ2FfdmVyc2lvbi5tYXANCj4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMC4uNGIyMzgwYQ0KPiAtLS0gL2Rldi9u dWxsDQo+ICsrKyBiL2RyaXZlcnMvYnVzL2lmcGdhL3J0ZV9idXNfaWZwZ2FfdmVyc2lvbi5tYXAN Cj4gQEAgLTAsMCArMSw4IEBADQo+ICtEUERLXzE3LjExIHsNCj4gKyAgICAgICBnbG9iYWw6DQo+ ICsNCj4gKyAgICBydGVfaWZwZ2FfZHJpdmVyX3JlZ2lzdGVyOw0KPiArICAgIHJ0ZV9pZnBnYV9k cml2ZXJfdW5yZWdpc3RlcjsNCj4gKw0KPiArICAgICAgIGxvY2FsOiAqOw0KPiArfTsNCj4gLS0N Cj4gMS44LjMuMQ0KPg0K