From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v5 1/5] drm: xlnx: Xilinx DRM KMS module Date: Mon, 19 Feb 2018 10:43:07 +0100 Message-ID: <20180219094307.GK22199@phenom.ffwll.local> References: <1517967400-16993-1-git-send-email-hyun.kwon@xilinx.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1517967400-16993-1-git-send-email-hyun.kwon@xilinx.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Hyun Kwon Cc: devicetree@vger.kernel.org, Michal Simek , dri-devel@lists.freedesktop.org, Rob Herring , Laurent Pinchart , Daniel Vetter List-Id: devicetree@vger.kernel.org T24gVHVlLCBGZWIgMDYsIDIwMTggYXQgMDU6MzY6MzZQTSAtMDgwMCwgSHl1biBLd29uIHdyb3Rl Ogo+IFhpbGlueCBoYXMgdmFyaW91cyBwbGF0Zm9ybXMgZm9yIGRpc3BsYXksIHdoZXJlIHVzZXJz IGNhbiBjcmVhdGUKPiB1c2luZyBtdWx0aXBsZSBJUHMgaW4gdGhlIHByb2dyYW1tYWJsZSBGUEdB IGZhYnJpYywgb3Igd2hlcmUKPiBzb21lIGhhcmRlbmVkIHBpZXBsaW5lIGlzIGF2YWlsYWJsZSBv biB0aGUgY2hpcC4gRnVydGhlcm1vcmUsCj4gaGFyZGVuZWQgcGlwZWxpbmUgY2FuIGFsc28gaW50 ZXJhY3Qgd2l0aCBzb2Z0IGxvZ2ljcyBpbiBGUEdBLgo+IAo+IFRoZSBYaWxpbnggRFJNIEtNUyBt b2R1bGUgaXMgdG8gaW50ZWdyYXRlIG11bHRpcGxlIHN1YmRldmljZXMgYW5kCj4gdG8gcmVwcmVz ZW50IHRoZSBlbnRpcmUgcGlwZWxpbmUgYXMgYSBzaW5nbGUgRFJNIGRldmljZS4gVGhlIG1vZHVs ZQo+IGluY2x1ZGVzIGhlbHBlciAoZXgsIGZyYW1lYnVmZmVyIGFuZCBnZW0gaGVscGVycykgYW5k Cj4gZ2x1ZSBsb2dpYyAoZXgsIGNydGMgaW50ZXJmYWNlKSBmdW5jdGlvbnMuCj4gCj4gU2lnbmVk LW9mZi1ieTogSHl1biBLd29uIDxoeXVuLmt3b25AeGlsaW54LmNvbT4KPiBBY2tlZC1ieTogRGFu aWVsIFZldHRlciA8ZGFuaWVsLnZldHRlckBmZndsbC5jaD4KCkxvb2tzIGFsbCByZWFkeSBmb3Ig bWVyZ2luZy4gRGlkIHlvdSBhcHBseSBmb3IgY29tbWl0IHJpZ2h0cyB0byBkcm0tbWlzYwphbHJl YWR5IHNvIHlvdSBjb3VsZCBwdXNoIHRoaXMgcmlnaHQgYXdheT8KLURhbmllbAoKPiAtLS0KPiB2 NQo+IC0gUmVkZWZpbmUgeGxueF9waXBlbGluZV9pbml0KCkKPiB2NAo+IC0gRml4IGEgYnVnIGlu IG9mIGdyYXBoIGJpbmRpbmcgaGFuZGxpbmcKPiAtIFJlbW92ZSB2YmxhbmsgY2FsbGJhY2tzIGZy b20geGxueF9jcnRjCj4gLSBSZW1vdmUgdGhlIGR0IGJpbmRpbmcuIFRoaXMgbW9kdWxlIGJlY29t ZXMgbW9yZSBsaWtlIGEgbGlicmFyeS4KPiAtIFJlcGhyYXNlIHRoZSBjb21taXQgbWVzc2FnZQo+ IHYzCj4gLSBBZGQgTGF1cmVudCBhcyBhIG1haW50YWluZXIKPiAtIEZpeCBtdWx0aXBsZS1yZWZl cmVuY2Ugb24gZ2VtIG9iamVjdHMKPiB2Mgo+IC0gQ2hhbmdlIHRoZSBTUERYIGlkZW50aWZpZXIg Zm9ybWF0Cj4gLSBNZXJnZSBwYXRjaGVzKGNydGMsIGdlbSwgZmIpIGludG8gc2luZ2xlIG9uZQo+ IHYyIG9mIHhsbnhfZHJ2Cj4gLSBSZW5hbWUga21zIHRvIGRpc3BsYXkgaW4geGxueF9kcnYKPiAt IFJlcGxhY2Ugc29tZSB4bG54IHNwZWNpZmljIGZiIGhlbHBlciB3aXRoIGNvbW1vbiBoZWxwZXJz IGluIHhsbnhfZHJ2Cj4gLSBEb24ndCBzZXQgdGhlIGNvbW1pdCB0YWlsIGNhbGxiYWNrIGluIHhs bnhfZHJ2Cj4gLSBTdXBwb3J0ICdwb3J0cycgZ3JhcGggYmluZGluZyBpbiB4bG54X2Rydgo+IHYy IG9mIHhsbnhfZmIKPiAtIFJlbW92ZSB3cmFwcGVycyBpbiB4bG54X2ZiCj4gLSBSZXBsYWNlIHNv bWUgZnVuY3Rpb25zIHdpdGggZHJtIGNvcmUgaGVscGVycyBpbiB4bG54X2ZiCj4gLS0tCj4gLS0t Cj4gIE1BSU5UQUlORVJTICAgICAgICAgICAgICAgICAgICAgIHwgICA5ICsKPiAgZHJpdmVycy9n cHUvZHJtL0tjb25maWcgICAgICAgICAgfCAgIDIgKwo+ICBkcml2ZXJzL2dwdS9kcm0vTWFrZWZp bGUgICAgICAgICB8ICAgMSArCj4gIGRyaXZlcnMvZ3B1L2RybS94bG54L0tjb25maWcgICAgIHwg IDEyICsKPiAgZHJpdmVycy9ncHUvZHJtL3hsbngvTWFrZWZpbGUgICAgfCAgIDIgKwo+ICBkcml2 ZXJzL2dwdS9kcm0veGxueC94bG54X2NydGMuYyB8IDE3NyArKysrKysrKysrKysrKwo+ICBkcml2 ZXJzL2dwdS9kcm0veGxueC94bG54X2NydGMuaCB8ICA3MCArKysrKysKPiAgZHJpdmVycy9ncHUv ZHJtL3hsbngveGxueF9kcnYuYyAgfCA1MDEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrCj4gIGRyaXZlcnMvZ3B1L2RybS94bG54L3hsbnhfZHJ2LmggIHwgIDMzICsrKwo+ ICBkcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2ZiLmMgICB8IDI5OCArKysrKysrKysrKysrKysr KysrKysrKwo+ICBkcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2ZiLmggICB8ICAzMyArKysKPiAg ZHJpdmVycy9ncHUvZHJtL3hsbngveGxueF9nZW0uYyAgfCAgNDcgKysrKwo+ICBkcml2ZXJzL2dw dS9kcm0veGxueC94bG54X2dlbS5oICB8ICAyNiArKwo+ICAxMyBmaWxlcyBjaGFuZ2VkLCAxMjEx IGluc2VydGlvbnMoKykKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS94bG54 L0tjb25maWcKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS94bG54L01ha2Vm aWxlCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2NydGMu Ywo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3hsbngveGxueF9jcnRjLmgK PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS94bG54L3hsbnhfZHJ2LmMKPiAg Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS94bG54L3hsbnhfZHJ2LmgKPiAgY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS94bG54L3hsbnhfZmIuYwo+ICBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3hsbngveGxueF9mYi5oCj4gIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2dlbS5jCj4gIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2dlbS5oCj4gCj4gZGlmZiAtLWdpdCBhL01B SU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKPiBpbmRleCA1YmMwODhmLi4wN2MwZTczIDEwMDY0NAo+ IC0tLSBhL01BSU5UQUlORVJTCj4gKysrIGIvTUFJTlRBSU5FUlMKPiBAQCAtNDc4OSw2ICs0Nzg5 LDE1IEBAIEY6CWRyaXZlcnMvZ3B1L2RybS9ldG5hdml2Lwo+ICBGOglpbmNsdWRlL3VhcGkvZHJt L2V0bmF2aXZfZHJtLmgKPiAgRjoJRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Rp c3BsYXkvZXRuYXZpdi8KPiAgCj4gK0RSTSBEUklWRVJTIEZPUiBYSUxJTlgKPiArTToJSHl1biBL d29uIDxoeXVuLmt3b25AeGlsaW54LmNvbT4KPiArTToJTGF1cmVudCBQaW5jaGFydCA8bGF1cmVu dC5waW5jaGFydEBpZGVhc29uYm9hcmQuY29tPgo+ICtMOglkcmktZGV2ZWxAbGlzdHMuZnJlZWRl c2t0b3Aub3JnCj4gK1M6CU1haW50YWluZWQKPiArRjoJZHJpdmVycy9ncHUvZHJtL3hsbngvCj4g K0Y6CURvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNwbGF5L3hsbngvCj4gK1Q6 CWdpdCBnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9kcm0vZHJtLW1pc2MKPiArCj4gIERS TSBEUklWRVJTIEZPUiBaVEUgWlgKPiAgTToJU2hhd24gR3VvIDxzaGF3bmd1b0BrZXJuZWwub3Jn Pgo+ICBMOglkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKPiBpbmRleCBk ZWVlZmE3Li41YTNlYzY2IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKPiBAQCAtMjg5LDYgKzI4OSw4IEBAIHNvdXJj ZSAiZHJpdmVycy9ncHUvZHJtL3BsMTExL0tjb25maWciCj4gIAo+ICBzb3VyY2UgImRyaXZlcnMv Z3B1L2RybS90dmUyMDAvS2NvbmZpZyIKPiAgCj4gK3NvdXJjZSAiZHJpdmVycy9ncHUvZHJtL3hs bngvS2NvbmZpZyIKPiArCj4gICMgS2VlcCBsZWdhY3kgZHJpdmVycyBsYXN0Cj4gIAo+ICBtZW51 Y29uZmlnIERSTV9MRUdBQ1kKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxl IGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCj4gaW5kZXggNTAwOTNmZi4uZjkzNTU3ZSAxMDA2 NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vTWFrZWZpbGUKPiBAQCAtMTAzLDMgKzEwMyw0IEBAIG9iai0kKENPTkZJR19EUk1fTVhTRkIp CSs9IG14c2ZiLwo+ICBvYmotJChDT05GSUdfRFJNX1RJTllEUk0pICs9IHRpbnlkcm0vCj4gIG9i ai0kKENPTkZJR19EUk1fUEwxMTEpICs9IHBsMTExLwo+ICBvYmotJChDT05GSUdfRFJNX1RWRTIw MCkgKz0gdHZlMjAwLwo+ICtvYmotJChDT05GSUdfRFJNX1hMTlgpCSs9IHhsbngvCj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94bG54L0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0veGxu eC9LY29uZmlnCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi4xOWZkN2Nk Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS94bG54L0tjb25maWcKPiBA QCAtMCwwICsxLDEyIEBACj4gK2NvbmZpZyBEUk1fWExOWAo+ICsJdHJpc3RhdGUgIlhpbGlueCBE Uk0gS01TIERyaXZlciIKPiArCWRlcGVuZHMgb24gRFJNICYmIE9GCj4gKwlzZWxlY3QgRFJNX0tN U19IRUxQRVIKPiArCXNlbGVjdCBEUk1fS01TX0NNQV9IRUxQRVIKPiArCXNlbGVjdCBEUk1fR0VN X0NNQV9IRUxQRVIKPiArCWhlbHAKPiArCSAgWGlsaW54IERSTSBLTVMgZHJpdmVyLiBDaG9vc2Ug dGhpcyBvcHRpb24gaWYgeW91IGhhdmUKPiArCSAgYSBYaWxpbnggU29DcyB3aXRoIGhhcmRlbmVk IGRpc3BsYXkgcGlwZWxpbmUgb3Igc29mdAo+ICsJICBkaXNwbGF5IHBpcGVsaW5lIHVzaW5nIFhp bGlueCBJUHMgaW4gRlBHQS4gVGhpcyBtb2R1bGUKPiArCSAgcHJvdmlkZXMgdGhlIGtlcm5lbCBt b2RlIHNldHRpbmcgZnVuY3Rpb25hbGl0aWVzCj4gKwkgIGZvciBYaWxpbnggZGlzcGxheSBkcml2 ZXJzLgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGxueC9NYWtlZmlsZSBiL2RyaXZl cnMvZ3B1L2RybS94bG54L01ha2VmaWxlCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAw MDAwMDAwLi5jNjBhMjgxCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS94 bG54L01ha2VmaWxlCj4gQEAgLTAsMCArMSwyIEBACj4gK3hsbnhfZHJtLW9ianMgKz0geGxueF9j cnRjLm8geGxueF9kcnYubyB4bG54X2ZiLm8geGxueF9nZW0ubwo+ICtvYmotJChDT05GSUdfRFJN X1hMTlgpICs9IHhsbnhfZHJtLm8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hsbngv eGxueF9jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2NydGMuYwo+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uZGU4MzkwNQo+IC0tLSAvZGV2L251bGwKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2NydGMuYwo+IEBAIC0wLDAgKzEsMTc3IEBA Cj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4gKy8qCj4gKyAqIFhpbGlu eCBEUk0gY3J0YyBkcml2ZXIKPiArICoKPiArICogIENvcHlyaWdodCAoQykgMjAxNyAtIDIwMTgg WGlsaW54LCBJbmMuCj4gKyAqCj4gKyAqICBBdXRob3I6IEh5dW4gV29vIEt3b24gPGh5dW4ua3dv bkB4aWxpbnguY29tPgo+ICsgKgo+ICsgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCj4gKyAqIExpY2Vuc2UgdmVyc2lv biAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCj4g KyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2Ug dGVybXMuCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ICsgKiBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCj4gKyAqIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4gKyAqLwo+ICsKPiAr I2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gKwo+ICsjaW5jbHVkZSA8bGludXgvbGlzdC5oPgo+ICsK PiArI2luY2x1ZGUgInhsbnhfY3J0Yy5oIgo+ICsjaW5jbHVkZSAieGxueF9kcnYuaCIKPiArCj4g Ky8qCj4gKyAqIE92ZXJ2aWV3Cj4gKyAqIC0tLS0tLS0tCj4gKyAqCj4gKyAqIFRoZSBYaWxpbngg Q1JUQyBsYXllciBpcyB0byBlbmFibGUgdGhlIGN1c3RvbSBpbnRlcmZhY2UgdG8gQ1JUQyBkcml2 ZXJzLgo+ICsgKiBUaGUgaW50ZXJmYWNlIGlzIHVzZWQgYnkgWGlsaW54IERSTSBkcml2ZXIgd2hl cmUgaXQgbmVlZHMgQ1JUQwo+ICsgKiBmdW5jdGlvbmFpbHR5LiBDUlRDIGRyaXZlcnMgc2hvdWxk IGF0dGFjaCB0aGUgZGVzaXJlZCBjYWxsYmFja3MKPiArICogdG8gc3RydWN0IHhsbnhfY3J0YyBh bmQgcmVnaXN0ZXIgdGhlIHhsbnhfY3J0YyB3aXRoIGNvcnJlY3Nwb25kaW5nCj4gKyAqIGRybV9k ZXZpY2UuIEl0J3MgaGlnaGx5IHJlY29tbWVuZGVkIENSVEMgZHJpdmVycyByZWdpc3RlciBhbGwg Y2FsbGJhY2tzCj4gKyAqIGV2ZW4gdGhvdWdoIG1hbnkgb2YgdGhlbSBhcmUgb3B0aW9uYWwuCj4g KyAqIFRoZSBDUlRDIGhlbHBlciBzaW1wbHkgd2Fsa3MgdGhyb3VnaCB0aGUgcmVnaXN0ZXJlZCBD UlRDIGRldmljZSwKPiArICogYW5kIGNhbGwgdGhlIGNhbGxiYWNrcy4KPiArICovCj4gKwo+ICsv KioKPiArICogc3RydWN0IHhsbnhfY3J0Y19oZWxwZXIgLSBYaWxpbnggQ1JUQyBoZWxwZXIKPiAr ICogQHhsbnhfY3J0Y3M6IGxpc3Qgb2YgWGlsaW54IENSVEMgZGV2aWNlcwo+ICsgKiBAbG9jazog bG9jayB0byBwcm90ZWN0IEB4bG54X2NydGNzCj4gKyAqIEBkcm06IGJhY2sgcG9pbnRlciB0byBE Uk0gY29yZQo+ICsgKi8KPiArc3RydWN0IHhsbnhfY3J0Y19oZWxwZXIgewo+ICsJc3RydWN0IGxp c3RfaGVhZCB4bG54X2NydGNzOwo+ICsJc3RydWN0IG11dGV4IGxvY2s7IC8qIGxvY2sgZm9yIEB4 bG54X2NydGNzICovCj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtOwo+ICt9Owo+ICsKPiArI2Rl ZmluZSBYTE5YX0NSVENfTUFYX0hFSUdIVF9XSURUSAlVSU5UX01BWAo+ICsKPiArdW5zaWduZWQg aW50IHhsbnhfY3J0Y19oZWxwZXJfZ2V0X2FsaWduKHN0cnVjdCB4bG54X2NydGNfaGVscGVyICpo ZWxwZXIpCj4gK3sKPiArCXN0cnVjdCB4bG54X2NydGMgKmNydGM7Cj4gKwl1bnNpZ25lZCBpbnQg YWxpZ24gPSAxLCB0bXA7Cj4gKwo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmaGVscGVy LT54bG54X2NydGNzLCBsaXN0KSB7Cj4gKwkJaWYgKGNydGMtPmdldF9hbGlnbikgewo+ICsJCQl0 bXAgPSBjcnRjLT5nZXRfYWxpZ24oY3J0Yyk7Cj4gKwkJCWFsaWduID0gQUxJR04oYWxpZ24sIHRt cCk7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCXJldHVybiBhbGlnbjsKPiArfQo+ICsKPiArdTY0IHhs bnhfY3J0Y19oZWxwZXJfZ2V0X2RtYV9tYXNrKHN0cnVjdCB4bG54X2NydGNfaGVscGVyICpoZWxw ZXIpCj4gK3sKPiArCXN0cnVjdCB4bG54X2NydGMgKmNydGM7Cj4gKwl1NjQgbWFzayA9IERNQV9C SVRfTUFTSyhzaXplb2YoZG1hX2FkZHJfdCkgKiA4KSwgdG1wOwo+ICsKPiArCWxpc3RfZm9yX2Vh Y2hfZW50cnkoY3J0YywgJmhlbHBlci0+eGxueF9jcnRjcywgbGlzdCkgewo+ICsJCWlmIChjcnRj LT5nZXRfZG1hX21hc2spIHsKPiArCQkJdG1wID0gY3J0Yy0+Z2V0X2RtYV9tYXNrKGNydGMpOwo+ ICsJCQltYXNrID0gbWluKG1hc2ssIHRtcCk7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCXJldHVybiBt YXNrOwo+ICt9Cj4gKwo+ICtpbnQgeGxueF9jcnRjX2hlbHBlcl9nZXRfbWF4X3dpZHRoKHN0cnVj dCB4bG54X2NydGNfaGVscGVyICpoZWxwZXIpCj4gK3sKPiArCXN0cnVjdCB4bG54X2NydGMgKmNy dGM7Cj4gKwl1bnNpZ25lZCBpbnQgd2lkdGggPSBYTE5YX0NSVENfTUFYX0hFSUdIVF9XSURUSCwg dG1wOwo+ICsKPiArCWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0YywgJmhlbHBlci0+eGxueF9jcnRj cywgbGlzdCkgewo+ICsJCWlmIChjcnRjLT5nZXRfbWF4X3dpZHRoKSB7Cj4gKwkJCXRtcCA9IGNy dGMtPmdldF9tYXhfd2lkdGgoY3J0Yyk7Cj4gKwkJCXdpZHRoID0gbWluKHdpZHRoLCB0bXApOwo+ ICsJCX0KPiArCX0KPiArCj4gKwlyZXR1cm4gd2lkdGg7Cj4gK30KPiArCj4gK2ludCB4bG54X2Ny dGNfaGVscGVyX2dldF9tYXhfaGVpZ2h0KHN0cnVjdCB4bG54X2NydGNfaGVscGVyICpoZWxwZXIp Cj4gK3sKPiArCXN0cnVjdCB4bG54X2NydGMgKmNydGM7Cj4gKwl1bnNpZ25lZCBpbnQgaGVpZ2h0 ID0gWExOWF9DUlRDX01BWF9IRUlHSFRfV0lEVEgsIHRtcDsKPiArCj4gKwlsaXN0X2Zvcl9lYWNo X2VudHJ5KGNydGMsICZoZWxwZXItPnhsbnhfY3J0Y3MsIGxpc3QpIHsKPiArCQlpZiAoY3J0Yy0+ Z2V0X21heF9oZWlnaHQpIHsKPiArCQkJdG1wID0gY3J0Yy0+Z2V0X21heF9oZWlnaHQoY3J0Yyk7 Cj4gKwkJCWhlaWdodCA9IG1pbihoZWlnaHQsIHRtcCk7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCXJl dHVybiBoZWlnaHQ7Cj4gK30KPiArCj4gK3VpbnQzMl90IHhsbnhfY3J0Y19oZWxwZXJfZ2V0X2Zv cm1hdChzdHJ1Y3QgeGxueF9jcnRjX2hlbHBlciAqaGVscGVyKQo+ICt7Cj4gKwlzdHJ1Y3QgeGxu eF9jcnRjICpjcnRjOwo+ICsJdTMyIGZvcm1hdCA9IDAsIHRtcDsKPiArCj4gKwlsaXN0X2Zvcl9l YWNoX2VudHJ5KGNydGMsICZoZWxwZXItPnhsbnhfY3J0Y3MsIGxpc3QpIHsKPiArCQlpZiAoY3J0 Yy0+Z2V0X2Zvcm1hdCkgewo+ICsJCQl0bXAgPSBjcnRjLT5nZXRfZm9ybWF0KGNydGMpOwo+ICsJ CQlpZiAoZm9ybWF0ICYmIGZvcm1hdCAhPSB0bXApCj4gKwkJCQlyZXR1cm4gMDsKPiArCQkJZm9y bWF0ID0gdG1wOwo+ICsJCX0KPiArCX0KPiArCj4gKwlyZXR1cm4gZm9ybWF0Owo+ICt9Cj4gKwo+ ICtzdHJ1Y3QgeGxueF9jcnRjX2hlbHBlciAqeGxueF9jcnRjX2hlbHBlcl9pbml0KHN0cnVjdCBk cm1fZGV2aWNlICpkcm0pCj4gK3sKPiArCXN0cnVjdCB4bG54X2NydGNfaGVscGVyICpoZWxwZXI7 Cj4gKwo+ICsJaGVscGVyID0gZGV2bV9remFsbG9jKGRybS0+ZGV2LCBzaXplb2YoKmhlbHBlciks IEdGUF9LRVJORUwpOwo+ICsJaWYgKCFoZWxwZXIpCj4gKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01F TSk7Cj4gKwo+ICsJSU5JVF9MSVNUX0hFQUQoJmhlbHBlci0+eGxueF9jcnRjcyk7Cj4gKwltdXRl eF9pbml0KCZoZWxwZXItPmxvY2spOwo+ICsJaGVscGVyLT5kcm0gPSBkcm07Cj4gKwo+ICsJcmV0 dXJuIGhlbHBlcjsKPiArfQo+ICsKPiArdm9pZCB4bG54X2NydGNfaGVscGVyX2Zpbmkoc3RydWN0 IGRybV9kZXZpY2UgKmRybSwKPiArCQkJICAgc3RydWN0IHhsbnhfY3J0Y19oZWxwZXIgKmhlbHBl cikKPiArewo+ICsJaWYgKFdBUk5fT04oaGVscGVyLT5kcm0gIT0gZHJtKSkKPiArCQlyZXR1cm47 Cj4gKwo+ICsJaWYgKFdBUk5fT04oIWxpc3RfZW1wdHkoJmhlbHBlci0+eGxueF9jcnRjcykpKQo+ ICsJCXJldHVybjsKPiArCj4gKwltdXRleF9kZXN0cm95KCZoZWxwZXItPmxvY2spOwo+ICsJZGV2 bV9rZnJlZShkcm0tPmRldiwgaGVscGVyKTsKPiArfQo+ICsKPiArdm9pZCB4bG54X2NydGNfcmVn aXN0ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgc3RydWN0IHhsbnhfY3J0YyAqY3J0YykKPiAr ewo+ICsJc3RydWN0IHhsbnhfY3J0Y19oZWxwZXIgKmhlbHBlciA9IHhsbnhfZ2V0X2NydGNfaGVs cGVyKGRybSk7Cj4gKwo+ICsJbXV0ZXhfbG9jaygmaGVscGVyLT5sb2NrKTsKPiArCWxpc3RfYWRk X3RhaWwoJmNydGMtPmxpc3QsICZoZWxwZXItPnhsbnhfY3J0Y3MpOwo+ICsJbXV0ZXhfdW5sb2Nr KCZoZWxwZXItPmxvY2spOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKHhsbnhfY3J0Y19yZWdp c3Rlcik7Cj4gKwo+ICt2b2lkIHhsbnhfY3J0Y191bnJlZ2lzdGVyKHN0cnVjdCBkcm1fZGV2aWNl ICpkcm0sIHN0cnVjdCB4bG54X2NydGMgKmNydGMpCj4gK3sKPiArCXN0cnVjdCB4bG54X2NydGNf aGVscGVyICpoZWxwZXIgPSB4bG54X2dldF9jcnRjX2hlbHBlcihkcm0pOwo+ICsKPiArCW11dGV4 X2xvY2soJmhlbHBlci0+bG9jayk7Cj4gKwlsaXN0X2RlbCgmY3J0Yy0+bGlzdCk7Cj4gKwltdXRl eF91bmxvY2soJmhlbHBlci0+bG9jayk7Cj4gK30KPiArRVhQT1JUX1NZTUJPTF9HUEwoeGxueF9j cnRjX3VucmVnaXN0ZXIpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGxueC94bG54 X2NydGMuaCBiL2RyaXZlcnMvZ3B1L2RybS94bG54L3hsbnhfY3J0Yy5oCj4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi5iZmY1ZTNkCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS94bG54L3hsbnhfY3J0Yy5oCj4gQEAgLTAsMCArMSw3MCBAQAo+ICsv LyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+ICsvKgo+ICsgKiBYaWxpbnggRFJN IGNydGMgaGVhZGVyCj4gKyAqCj4gKyAqICBDb3B5cmlnaHQgKEMpIDIwMTcgLSAyMDE4IFhpbGlu eCwgSW5jLgo+ICsgKgo+ICsgKiAgQXV0aG9yOiBIeXVuIFdvbyBLd29uIDxoeXVuLmt3b25AeGls aW54LmNvbT4KPiArICoKPiArICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwo+ICsgKiBMaWNlbnNlIHZlcnNpb24gMiwg YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAo+ICsgKiBt YXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1z Lgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+ICsgKiBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKi8KPiArCj4gKyNpZm5k ZWYgX1hMTlhfQ1JUQ19IXwo+ICsjZGVmaW5lIF9YTE5YX0NSVENfSF8KPiArCj4gKy8qKgo+ICsg KiBzdHJ1Y3QgeGxueF9jcnRjIC0gWGlsaW54IENSVEMgZGV2aWNlCj4gKyAqIEBjcnRjOiBEUk0g Q1JUQyBkZXZpY2UKPiArICogQGxpc3Q6IGxpc3Qgbm9kZSBmb3IgWGlsaW54IENSVEMgZGV2aWNl IGxpc3QKPiArICogQGdldF9hbGlnbjogR2V0IHRoZSBhbGlnbm1lbnQgcmVxdWlyZW1lbnQgb2Yg Q1JUQyBkZXZpY2UKPiArICogQGdldF9kbWFfbWFzazogR2V0IHRoZSBkbWEgbWFzayBvZiBDUlRD IGRldmljZQo+ICsgKiBAZ2V0X21heF93aWR0aDogR2V0IHRoZSBtYXhpbXVtIHN1cHBvcnRlZCB3 aWR0aAo+ICsgKiBAZ2V0X21heF9oZWlnaHQ6IEdldCB0aGUgbWF4aW11bSBzdXBwb3J0ZWQgaGVp Z2h0Cj4gKyAqIEBnZXRfZm9ybWF0OiBHZXQgdGhlIGN1cnJlbnQgZm9ybWF0IG9mIENSVEMgZGV2 aWNlCj4gKyAqLwo+ICtzdHJ1Y3QgeGxueF9jcnRjIHsKPiArCXN0cnVjdCBkcm1fY3J0YyBjcnRj Owo+ICsJc3RydWN0IGxpc3RfaGVhZCBsaXN0Owo+ICsJdW5zaWduZWQgaW50ICgqZ2V0X2FsaWdu KShzdHJ1Y3QgeGxueF9jcnRjICpjcnRjKTsKPiArCXU2NCAoKmdldF9kbWFfbWFzaykoc3RydWN0 IHhsbnhfY3J0YyAqY3J0Yyk7Cj4gKwlpbnQgKCpnZXRfbWF4X3dpZHRoKShzdHJ1Y3QgeGxueF9j cnRjICpjcnRjKTsKPiArCWludCAoKmdldF9tYXhfaGVpZ2h0KShzdHJ1Y3QgeGxueF9jcnRjICpj cnRjKTsKPiArCXVpbnQzMl90ICgqZ2V0X2Zvcm1hdCkoc3RydWN0IHhsbnhfY3J0YyAqY3J0Yyk7 Cj4gK307Cj4gKwo+ICsvKgo+ICsgKiBIZWxwZXIgZnVuY3Rpb25zOiB1c2VkIHdpdGhpbiBYbG54 IERSTQo+ICsgKi8KPiArCj4gK3N0cnVjdCB4bG54X2NydGNfaGVscGVyOwo+ICsKPiArdW5zaWdu ZWQgaW50IHhsbnhfY3J0Y19oZWxwZXJfZ2V0X2FsaWduKHN0cnVjdCB4bG54X2NydGNfaGVscGVy ICpoZWxwZXIpOwo+ICt1NjQgeGxueF9jcnRjX2hlbHBlcl9nZXRfZG1hX21hc2soc3RydWN0IHhs bnhfY3J0Y19oZWxwZXIgKmhlbHBlcik7Cj4gK2ludCB4bG54X2NydGNfaGVscGVyX2dldF9tYXhf d2lkdGgoc3RydWN0IHhsbnhfY3J0Y19oZWxwZXIgKmhlbHBlcik7Cj4gK2ludCB4bG54X2NydGNf aGVscGVyX2dldF9tYXhfaGVpZ2h0KHN0cnVjdCB4bG54X2NydGNfaGVscGVyICpoZWxwZXIpOwo+ ICt1aW50MzJfdCB4bG54X2NydGNfaGVscGVyX2dldF9mb3JtYXQoc3RydWN0IHhsbnhfY3J0Y19o ZWxwZXIgKmhlbHBlcik7Cj4gKwo+ICtzdHJ1Y3QgeGxueF9jcnRjX2hlbHBlciAqeGxueF9jcnRj X2hlbHBlcl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pOwo+ICt2b2lkIHhsbnhfY3J0Y19o ZWxwZXJfZmluaShzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLAo+ICsJCQkgICBzdHJ1Y3QgeGxueF9j cnRjX2hlbHBlciAqaGVscGVyKTsKPiArCj4gKy8qCj4gKyAqIENSVEMgcmVnaXN0cmF0aW9uOiB1 c2VkIGJ5IG90aGVyIHN1Yi1kcml2ZXIgbW9kdWxlcwo+ICsgKi8KPiArCj4gK3N0YXRpYyBpbmxp bmUgc3RydWN0IHhsbnhfY3J0YyAqdG9feGxueF9jcnRjKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykK PiArewo+ICsJcmV0dXJuIGNvbnRhaW5lcl9vZihjcnRjLCBzdHJ1Y3QgeGxueF9jcnRjLCBjcnRj KTsKPiArfQo+ICsKPiArdm9pZCB4bG54X2NydGNfcmVnaXN0ZXIoc3RydWN0IGRybV9kZXZpY2Ug KmRybSwgc3RydWN0IHhsbnhfY3J0YyAqY3J0Yyk7Cj4gK3ZvaWQgeGxueF9jcnRjX3VucmVnaXN0 ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgc3RydWN0IHhsbnhfY3J0YyAqY3J0Yyk7Cj4gKwo+ ICsjZW5kaWYgLyogX1hMTlhfQ1JUQ19IXyAqLwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0veGxueC94bG54X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL3hsbngveGxueF9kcnYuYwo+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uOGYwZTM1Nwo+IC0tLSAvZGV2L251 bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2Rydi5jCj4gQEAgLTAsMCArMSw1 MDEgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPiArLyoKPiArICog WGlsaW54IERSTSBLTVMgRHJpdmVyCj4gKyAqCj4gKyAqICBDb3B5cmlnaHQgKEMpIDIwMTMgLSAy MDE4IFhpbGlueCwgSW5jLgo+ICsgKgo+ICsgKiAgQXV0aG9yOiBIeXVuIFdvbyBLd29uIDxoeXVu Lmt3b25AeGlsaW54LmNvbT4KPiArICoKPiArICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwo+ICsgKiBMaWNlbnNlIHZl cnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFu ZAo+ICsgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRo b3NlIHRlcm1zLgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiArICogTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+ICsg KiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKi8KPiAr Cj4gKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWMuaD4K PiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2Ry bV9jcnRjX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9mYl9oZWxwZXIuaD4KPiArI2lu Y2x1ZGUgPGRybS9kcm1fZ2VtX2NtYV9oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fb2Yu aD4KPiArCj4gKyNpbmNsdWRlIDxsaW51eC9jb21wb25lbnQuaD4KPiArI2luY2x1ZGUgPGxpbnV4 L2RldmljZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5oPgo+ICsjaW5jbHVkZSA8bGlu dXgvbW9kdWxlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9vZl9ncmFwaC5oPgo+ICsjaW5jbHVkZSA8 bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9yZXNlcnZhdGlvbi5o Pgo+ICsKPiArI2luY2x1ZGUgInhsbnhfY3J0Yy5oIgo+ICsjaW5jbHVkZSAieGxueF9mYi5oIgo+ ICsjaW5jbHVkZSAieGxueF9nZW0uaCIKPiArCj4gKyNkZWZpbmUgRFJJVkVSX05BTUUJInhsbngi Cj4gKyNkZWZpbmUgRFJJVkVSX0RFU0MJIlhpbGlueCBEUk0gS01TIERyaXZlciIKPiArI2RlZmlu ZSBEUklWRVJfREFURQkiMjAxMzA1MDkiCj4gKyNkZWZpbmUgRFJJVkVSX01BSk9SCTEKPiArI2Rl ZmluZSBEUklWRVJfTUlOT1IJMAo+ICsKPiArc3RhdGljIHVpbnQgeGxueF9mYmRldl92cmVzID0g MjsKPiArbW9kdWxlX3BhcmFtX25hbWVkKGZiZGV2X3ZyZXMsIHhsbnhfZmJkZXZfdnJlcywgdWlu dCwgMDQ0NCk7Cj4gK01PRFVMRV9QQVJNX0RFU0MoZmJkZXZfdnJlcywKPiArCQkgImZiZGV2IHZp cnR1YWwgcmVzb2x1dGlvbiBtdWx0aXBsaWVyIGZvciBmYiAoZGVmYXVsdDogMikiKTsKPiArCj4g Ky8qKgo+ICsgKiBzdHJ1Y3QgeGxueF9kcm0gLSBYaWxpbnggRFJNIHByaXZhdGUgZGF0YQo+ICsg KiBAZHJtOiBEUk0gY29yZQo+ICsgKiBAY3J0YzogWGlsaW54IERSTSBDUlRDIGhlbHBlcgo+ICsg KiBAZmI6IERSTSBmYiBoZWxwZXIKPiArICogQG1hc3RlcjogbG9naWNhbCBtYXN0ZXIgZGV2aWNl IGZvciBwaXBlbGluZQo+ICsgKiBAc3VzcGVuZF9zdGF0ZTogYXRvbWljIHN0YXRlIGZvciBzdXNw ZW5kIC8gcmVzdW1lCj4gKyAqLwo+ICtzdHJ1Y3QgeGxueF9kcm0gewo+ICsJc3RydWN0IGRybV9k ZXZpY2UgKmRybTsKPiArCXN0cnVjdCB4bG54X2NydGNfaGVscGVyICpjcnRjOwo+ICsJc3RydWN0 IGRybV9mYl9oZWxwZXIgKmZiOwo+ICsJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbWFzdGVyOwo+ ICsJc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN1c3BlbmRfc3RhdGU7Cj4gK307Cj4gKwo+ICsv KioKPiArICogeGxueF9nZXRfY3J0Y19oZWxwZXIgLSBSZXR1cm4gdGhlIGNydGMgaGVscGVyIGlu c3RhbmNlCj4gKyAqIEBkcm06IERSTSBkZXZpY2UKPiArICoKPiArICogUmV0dXJuOiB0aGUgY3J0 YyBoZWxwZXIgaW5zdGFuY2UKPiArICovCj4gK3N0cnVjdCB4bG54X2NydGNfaGVscGVyICp4bG54 X2dldF9jcnRjX2hlbHBlcihzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQo+ICt7Cj4gKwlzdHJ1Y3Qg eGxueF9kcm0gKnhsbnhfZHJtID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiArCj4gKwlyZXR1cm4geGxu eF9kcm0tPmNydGM7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiB4bG54X2dldF9hbGlnbiAtIFJldHVy biB0aGUgYWxpZ24gcmVxdWlyZW1lbnQgdGhyb3VnaCBDUlRDIGhlbHBlcgo+ICsgKiBAZHJtOiBE Uk0gZGV2aWNlCj4gKyAqCj4gKyAqIFJldHVybjogdGhlIGFsaWdubWVudCByZXF1aXJlbWVudAo+ ICsgKi8KPiArdW5zaWduZWQgaW50IHhsbnhfZ2V0X2FsaWduKHN0cnVjdCBkcm1fZGV2aWNlICpk cm0pCj4gK3sKPiArCXN0cnVjdCB4bG54X2RybSAqeGxueF9kcm0gPSBkcm0tPmRldl9wcml2YXRl Owo+ICsKPiArCXJldHVybiB4bG54X2NydGNfaGVscGVyX2dldF9hbGlnbih4bG54X2RybS0+Y3J0 Yyk7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiB4bG54X2dldF9mb3JtYXQgLSBSZXR1cm4gdGhlIGN1 cnJlbnQgZm9ybWF0IG9mIENSVEMKPiArICogQGRybTogRFJNIGRldmljZQo+ICsgKgo+ICsgKiBS ZXR1cm46IHRoZSBjdXJyZW50IENSVEMgZm9ybWF0Cj4gKyAqLwo+ICt1aW50MzJfdCB4bG54X2dl dF9mb3JtYXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSkKPiArewo+ICsJc3RydWN0IHhsbnhfZHJt ICp4bG54X2RybSA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4gKwo+ICsJcmV0dXJuIHhsbnhfY3J0Y19o ZWxwZXJfZ2V0X2Zvcm1hdCh4bG54X2RybS0+Y3J0Yyk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IHhsbnhfb3V0cHV0X3BvbGxfY2hhbmdlZChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQo+ICt7Cj4g KwlzdHJ1Y3QgeGxueF9kcm0gKnhsbnhfZHJtID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiArCj4gKwlp ZiAoeGxueF9kcm0tPmZiKQo+ICsJCWRybV9mYl9oZWxwZXJfaG90cGx1Z19ldmVudCh4bG54X2Ry bS0+ZmIpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9tb2RlX2NvbmZpZ19m dW5jcyB4bG54X21vZGVfY29uZmlnX2Z1bmNzID0gewo+ICsJLmZiX2NyZWF0ZQkJPSB4bG54X2Zi X2NyZWF0ZSwKPiArCS5vdXRwdXRfcG9sbF9jaGFuZ2VkCT0geGxueF9vdXRwdXRfcG9sbF9jaGFu Z2VkLAo+ICsJLmF0b21pY19jaGVjawkJPSBkcm1fYXRvbWljX2hlbHBlcl9jaGVjaywKPiArCS5h dG9taWNfY29tbWl0CQk9IGRybV9hdG9taWNfaGVscGVyX2NvbW1pdCwKPiArfTsKPiArCj4gK3N0 YXRpYyB2b2lkIHhsbnhfbW9kZV9jb25maWdfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQo+ ICt7Cj4gKwlzdHJ1Y3QgeGxueF9kcm0gKnhsbnhfZHJtID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiAr CXN0cnVjdCB4bG54X2NydGNfaGVscGVyICpjcnRjID0geGxueF9kcm0tPmNydGM7Cj4gKwo+ICsJ ZHJtLT5tb2RlX2NvbmZpZy5taW5fd2lkdGggPSAwOwo+ICsJZHJtLT5tb2RlX2NvbmZpZy5taW5f aGVpZ2h0ID0gMDsKPiArCWRybS0+bW9kZV9jb25maWcubWF4X3dpZHRoID0geGxueF9jcnRjX2hl bHBlcl9nZXRfbWF4X3dpZHRoKGNydGMpOwo+ICsJZHJtLT5tb2RlX2NvbmZpZy5tYXhfaGVpZ2h0 ID0geGxueF9jcnRjX2hlbHBlcl9nZXRfbWF4X2hlaWdodChjcnRjKTsKPiArfQo+ICsKPiArc3Rh dGljIHZvaWQgeGxueF9sYXN0Y2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRybSkKPiArewo+ICsJ c3RydWN0IHhsbnhfZHJtICp4bG54X2RybSA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4gKwo+ICsJaWYg KHhsbnhfZHJtLT5mYikKPiArCQlkcm1fZmJfaGVscGVyX3Jlc3RvcmVfZmJkZXZfbW9kZV91bmxv Y2tlZCh4bG54X2RybS0+ZmIpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVf b3BlcmF0aW9ucyB4bG54X2ZvcHMgPSB7Cj4gKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCj4gKwku b3BlbgkJPSBkcm1fb3BlbiwKPiArCS5yZWxlYXNlCT0gZHJtX3JlbGVhc2UsCj4gKwkudW5sb2Nr ZWRfaW9jdGwJPSBkcm1faW9jdGwsCj4gKwkubW1hcAkJPSBkcm1fZ2VtX2NtYV9tbWFwLAo+ICsJ LnBvbGwJCT0gZHJtX3BvbGwsCj4gKwkucmVhZAkJPSBkcm1fcmVhZCwKPiArI2lmZGVmIENPTkZJ R19DT01QQVQKPiArCS5jb21wYXRfaW9jdGwJPSBkcm1fY29tcGF0X2lvY3RsLAo+ICsjZW5kaWYK PiArCS5sbHNlZWsJCT0gbm9vcF9sbHNlZWssCj4gK307Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGRy bV9kcml2ZXIgeGxueF9kcm1fZHJpdmVyID0gewo+ICsJLmRyaXZlcl9mZWF0dXJlcwkJPSBEUklW RVJfTU9ERVNFVCB8IERSSVZFUl9HRU0gfAo+ICsJCQkJCSAgRFJJVkVSX0FUT01JQyB8IERSSVZF Ul9QUklNRSwKPiArCS5sYXN0Y2xvc2UJCQk9IHhsbnhfbGFzdGNsb3NlLAo+ICsKPiArCS5wcmlt ZV9oYW5kbGVfdG9fZmQJCT0gZHJtX2dlbV9wcmltZV9oYW5kbGVfdG9fZmQsCj4gKwkucHJpbWVf ZmRfdG9faGFuZGxlCQk9IGRybV9nZW1fcHJpbWVfZmRfdG9faGFuZGxlLAo+ICsJLmdlbV9wcmlt ZV9leHBvcnQJCT0gZHJtX2dlbV9wcmltZV9leHBvcnQsCj4gKwkuZ2VtX3ByaW1lX2ltcG9ydAkJ PSBkcm1fZ2VtX3ByaW1lX2ltcG9ydCwKPiArCS5nZW1fcHJpbWVfZ2V0X3NnX3RhYmxlCQk9IGRy bV9nZW1fY21hX3ByaW1lX2dldF9zZ190YWJsZSwKPiArCS5nZW1fcHJpbWVfaW1wb3J0X3NnX3Rh YmxlCT0gZHJtX2dlbV9jbWFfcHJpbWVfaW1wb3J0X3NnX3RhYmxlLAo+ICsJLmdlbV9wcmltZV92 bWFwCQkJPSBkcm1fZ2VtX2NtYV9wcmltZV92bWFwLAo+ICsJLmdlbV9wcmltZV92dW5tYXAJCT0g ZHJtX2dlbV9jbWFfcHJpbWVfdnVubWFwLAo+ICsJLmdlbV9wcmltZV9tbWFwCQkJPSBkcm1fZ2Vt X2NtYV9wcmltZV9tbWFwLAo+ICsJLmdlbV9mcmVlX29iamVjdAkJPSBkcm1fZ2VtX2NtYV9mcmVl X29iamVjdCwKPiArCS5nZW1fdm1fb3BzCQkJPSAmZHJtX2dlbV9jbWFfdm1fb3BzLAo+ICsJLmR1 bWJfY3JlYXRlCQkJPSB4bG54X2dlbV9jbWFfZHVtYl9jcmVhdGUsCj4gKwkuZHVtYl9kZXN0cm95 CQkJPSBkcm1fZ2VtX2R1bWJfZGVzdHJveSwKPiArCj4gKwkuZm9wcwkJCQk9ICZ4bG54X2ZvcHMs Cj4gKwo+ICsJLm5hbWUJCQkJPSBEUklWRVJfTkFNRSwKPiArCS5kZXNjCQkJCT0gRFJJVkVSX0RF U0MsCj4gKwkuZGF0ZQkJCQk9IERSSVZFUl9EQVRFLAo+ICsJLm1ham9yCQkJCT0gRFJJVkVSX01B Sk9SLAo+ICsJLm1pbm9yCQkJCT0gRFJJVkVSX01JTk9SLAo+ICt9Owo+ICsKPiArc3RhdGljIGlu dCB4bG54X2JpbmQoc3RydWN0IGRldmljZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgeGxueF9kcm0g KnhsbnhfZHJtOwo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRybTsKPiArCWNvbnN0IHN0cnVjdCBk cm1fZm9ybWF0X2luZm8gKmluZm87Cj4gKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICptYXN0ZXIg PSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKPiArCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2LT5wYXJlbnQpOwo+ICsJaW50IHJldDsKPiArCXUz MiBmb3JtYXQ7Cj4gKwo+ICsJZHJtID0gZHJtX2Rldl9hbGxvYygmeGxueF9kcm1fZHJpdmVyLCAm cGRldi0+ZGV2KTsKPiArCWlmIChJU19FUlIoZHJtKSkKPiArCQlyZXR1cm4gUFRSX0VSUihkcm0p Owo+ICsKPiArCXhsbnhfZHJtID0gZGV2bV9remFsbG9jKGRybS0+ZGV2LCBzaXplb2YoKnhsbnhf ZHJtKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIXhsbnhfZHJtKSB7Cj4gKwkJcmV0ID0gLUVOT01F TTsKPiArCQlnb3RvIGVycl9kcm07Cj4gKwl9Cj4gKwo+ICsJZHJtX21vZGVfY29uZmlnX2luaXQo ZHJtKTsKPiArCWRybS0+bW9kZV9jb25maWcuZnVuY3MgPSAmeGxueF9tb2RlX2NvbmZpZ19mdW5j czsKPiArCj4gKwlyZXQgPSBkcm1fdmJsYW5rX2luaXQoZHJtLCAxKTsKPiArCWlmIChyZXQpIHsK PiArCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSB2YmxhbmtcbiIp Owo+ICsJCWdvdG8gZXJyX3hsbnhfZHJtOwo+ICsJfQo+ICsKPiArCWRybS0+aXJxX2VuYWJsZWQg PSAxOwo+ICsJZHJtLT5kZXZfcHJpdmF0ZSA9IHhsbnhfZHJtOwo+ICsJeGxueF9kcm0tPmRybSA9 IGRybTsKPiArCXhsbnhfZHJtLT5tYXN0ZXIgPSBtYXN0ZXI7Cj4gKwlkcm1fa21zX2hlbHBlcl9w b2xsX2luaXQoZHJtKTsKPiArCXBsYXRmb3JtX3NldF9kcnZkYXRhKG1hc3RlciwgeGxueF9kcm0p Owo+ICsKPiArCXhsbnhfZHJtLT5jcnRjID0geGxueF9jcnRjX2hlbHBlcl9pbml0KGRybSk7Cj4g KwlpZiAoSVNfRVJSKHhsbnhfZHJtLT5jcnRjKSkgewo+ICsJCXJldCA9IFBUUl9FUlIoeGxueF9k cm0tPmNydGMpOwo+ICsJCWdvdG8gZXJyX3hsbnhfZHJtOwo+ICsJfQo+ICsKPiArCXJldCA9IGNv bXBvbmVudF9iaW5kX2FsbCgmbWFzdGVyLT5kZXYsIGRybSk7Cj4gKwlpZiAocmV0KQo+ICsJCWdv dG8gZXJyX2NydGM7Cj4gKwo+ICsJeGxueF9tb2RlX2NvbmZpZ19pbml0KGRybSk7Cj4gKwlkcm1f bW9kZV9jb25maWdfcmVzZXQoZHJtKTsKPiArCWRtYV9zZXRfbWFzayhkcm0tPmRldiwgeGxueF9j cnRjX2hlbHBlcl9nZXRfZG1hX21hc2soeGxueF9kcm0tPmNydGMpKTsKPiArCj4gKwlmb3JtYXQg PSB4bG54X2NydGNfaGVscGVyX2dldF9mb3JtYXQoeGxueF9kcm0tPmNydGMpOwo+ICsJaW5mbyA9 IGRybV9mb3JtYXRfaW5mbyhmb3JtYXQpOwo+ICsJaWYgKGluZm8gJiYgaW5mby0+ZGVwdGggJiYg aW5mby0+Y3BwWzBdKSB7Cj4gKwkJdW5zaWduZWQgaW50IGFsaWduOwo+ICsKPiArCQlhbGlnbiA9 IHhsbnhfY3J0Y19oZWxwZXJfZ2V0X2FsaWduKHhsbnhfZHJtLT5jcnRjKTsKPiArCQl4bG54X2Ry bS0+ZmIgPSB4bG54X2ZiX2luaXQoZHJtLCBpbmZvLT5jcHBbMF0gKiA4LCAxLCBhbGlnbiwKPiAr CQkJCQkgICAgeGxueF9mYmRldl92cmVzKTsKPiArCQlpZiAoSVNfRVJSKHhsbnhfZHJtLT5mYikp IHsKPiArCQkJZGV2X2VycigmcGRldi0+ZGV2LAo+ICsJCQkJImZhaWxlZCB0byBpbml0aWFsaXpl IGRybSBmYlxuIik7Cj4gKwkJCXhsbnhfZHJtLT5mYiA9IE5VTEw7Cj4gKwkJfQo+ICsJfSBlbHNl IHsKPiArCQkvKiBmYmRldiBlbXVsYXRpb24gaXMgb3B0aW9uYWwgKi8KPiArCQlkZXZfaW5mbygm cGRldi0+ZGV2LCAiZmJkZXYgaXMgbm90IGluaXRpYWxpemVkXG4iKTsKPiArCX0KPiArCj4gKwly ZXQgPSBkcm1fZGV2X3JlZ2lzdGVyKGRybSwgMCk7Cj4gKwlpZiAocmV0IDwgMCkKPiArCQlnb3Rv IGVycl9mYjsKPiArCj4gKwlyZXR1cm4gMDsKPiArCj4gK2Vycl9mYjoKPiArCWlmICh4bG54X2Ry bS0+ZmIpCj4gKwkJeGxueF9mYl9maW5pKHhsbnhfZHJtLT5mYik7Cj4gKwljb21wb25lbnRfdW5i aW5kX2FsbChkcm0tPmRldiwgZHJtKTsKPiArZXJyX2NydGM6Cj4gKwl4bG54X2NydGNfaGVscGVy X2ZpbmkoZHJtLCB4bG54X2RybS0+Y3J0Yyk7Cj4gK2Vycl94bG54X2RybToKPiArCWRybV9tb2Rl X2NvbmZpZ19jbGVhbnVwKGRybSk7Cj4gK2Vycl9kcm06Cj4gKwlkcm1fZGV2X3VucmVmKGRybSk7 Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB4bG54X3VuYmluZChzdHJ1 Y3QgZGV2aWNlICpkZXYpCj4gK3sKPiArCXN0cnVjdCB4bG54X2RybSAqeGxueF9kcm0gPSBkZXZf Z2V0X2RydmRhdGEoZGV2KTsKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSB4bG54X2RybS0+ ZHJtOwo+ICsKPiArCWRybV9kZXZfdW5yZWdpc3Rlcihkcm0pOwo+ICsJaWYgKHhsbnhfZHJtLT5m YikKPiArCQl4bG54X2ZiX2ZpbmkoeGxueF9kcm0tPmZiKTsKPiArCWNvbXBvbmVudF91bmJpbmRf YWxsKCZ4bG54X2RybS0+bWFzdGVyLT5kZXYsIGRybSk7Cj4gKwl4bG54X2NydGNfaGVscGVyX2Zp bmkoZHJtLCB4bG54X2RybS0+Y3J0Yyk7Cj4gKwlkcm1fa21zX2hlbHBlcl9wb2xsX2ZpbmkoZHJt KTsKPiArCWRybV9tb2RlX2NvbmZpZ19jbGVhbnVwKGRybSk7Cj4gKwlkcm1fZGV2X3VucmVmKGRy bSk7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcG9uZW50X21hc3Rlcl9vcHMg eGxueF9tYXN0ZXJfb3BzID0gewo+ICsJLmJpbmQJPSB4bG54X2JpbmQsCj4gKwkudW5iaW5kCT0g eGxueF91bmJpbmQsCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IHhsbnhfb2ZfY29tcG9uZW50X3By b2JlKHN0cnVjdCBkZXZpY2UgKm1hc3Rlcl9kZXYsCj4gKwkJCQkgICBpbnQgKCpjb21wYXJlX29m KShzdHJ1Y3QgZGV2aWNlICosIHZvaWQgKiksCj4gKwkJCQkgICBjb25zdCBzdHJ1Y3QgY29tcG9u ZW50X21hc3Rlcl9vcHMgKm1fb3BzKQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBtYXN0 ZXJfZGV2LT5wYXJlbnQ7Cj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmVwLCAqcG9ydCwgKnJlbW90 ZSwgKnBhcmVudDsKPiArCXN0cnVjdCBjb21wb25lbnRfbWF0Y2ggKm1hdGNoID0gTlVMTDsKPiAr CWludCBpOwo+ICsKPiArCWlmICghZGV2LT5vZl9ub2RlKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ ICsKPiArCWNvbXBvbmVudF9tYXRjaF9hZGQobWFzdGVyX2RldiwgJm1hdGNoLCBjb21wYXJlX29m LCBkZXYtPm9mX25vZGUpOwo+ICsKPiArCWZvciAoaSA9IDA7IDsgaSsrKSB7Cj4gKwkJcG9ydCA9 IG9mX3BhcnNlX3BoYW5kbGUoZGV2LT5vZl9ub2RlLCAicG9ydHMiLCBpKTsKPiArCQlpZiAoIXBv cnQpCj4gKwkJCWJyZWFrOwo+ICsKPiArCQlwYXJlbnQgPSBwb3J0LT5wYXJlbnQ7Cj4gKwkJaWYg KCFvZl9ub2RlX2NtcChwYXJlbnQtPm5hbWUsICJwb3J0cyIpKQo+ICsJCQlwYXJlbnQgPSBwYXJl bnQtPnBhcmVudDsKPiArCQlwYXJlbnQgPSBvZl9ub2RlX2dldChwYXJlbnQpOwo+ICsKPiArCQlp ZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUocGFyZW50KSkgewo+ICsJCQlvZl9ub2RlX3B1dChw YXJlbnQpOwo+ICsJCQlvZl9ub2RlX3B1dChwb3J0KTsKPiArCQkJY29udGludWU7Cj4gKwkJfQo+ ICsKPiArCQljb21wb25lbnRfbWF0Y2hfYWRkKG1hc3Rlcl9kZXYsICZtYXRjaCwgY29tcGFyZV9v ZiwgcGFyZW50KTsKPiArCQlvZl9ub2RlX3B1dChwYXJlbnQpOwo+ICsJCW9mX25vZGVfcHV0KHBv cnQpOwo+ICsJfQo+ICsKPiArCXBhcmVudCA9IGRldi0+b2Zfbm9kZTsKPiArCWZvciAoaSA9IDA7 IDsgaSsrKSB7Cj4gKwkJcGFyZW50ID0gb2Zfbm9kZV9nZXQocGFyZW50KTsKPiArCQlpZiAoIW9m X2RldmljZV9pc19hdmFpbGFibGUocGFyZW50KSkgewo+ICsJCQlvZl9ub2RlX3B1dChwYXJlbnQp Owo+ICsJCQljb250aW51ZTsKPiArCQl9Cj4gKwo+ICsJCWZvcl9lYWNoX2VuZHBvaW50X29mX25v ZGUocGFyZW50LCBlcCkgewo+ICsJCQlyZW1vdGUgPSBvZl9ncmFwaF9nZXRfcmVtb3RlX3BvcnRf cGFyZW50KGVwKTsKPiArCQkJaWYgKCFyZW1vdGUgfHwgIW9mX2RldmljZV9pc19hdmFpbGFibGUo cmVtb3RlKSB8fAo+ICsJCQkgICAgcmVtb3RlID09IGRldi0+b2Zfbm9kZSkgewo+ICsJCQkJb2Zf bm9kZV9wdXQocmVtb3RlKTsKPiArCQkJCWNvbnRpbnVlOwo+ICsJCQl9IGVsc2UgaWYgKCFvZl9k ZXZpY2VfaXNfYXZhaWxhYmxlKHJlbW90ZS0+cGFyZW50KSkgewo+ICsJCQkJZGV2X3dhcm4oZGV2 LCAicGFyZW50IGRldiBvZiAlcyB1bmF2YWlsYWJsZVxuIiwKPiArCQkJCQkgcmVtb3RlLT5mdWxs X25hbWUpOwo+ICsJCQkJb2Zfbm9kZV9wdXQocmVtb3RlKTsKPiArCQkJCWNvbnRpbnVlOwo+ICsJ CQl9Cj4gKwkJCWNvbXBvbmVudF9tYXRjaF9hZGQobWFzdGVyX2RldiwgJm1hdGNoLCBjb21wYXJl X29mLAo+ICsJCQkJCSAgICByZW1vdGUpOwo+ICsJCQlvZl9ub2RlX3B1dChyZW1vdGUpOwo+ICsJ CX0KPiArCQlvZl9ub2RlX3B1dChwYXJlbnQpOwo+ICsKPiArCQlwb3J0ID0gb2ZfcGFyc2VfcGhh bmRsZShkZXYtPm9mX25vZGUsICJwb3J0cyIsIGkpOwo+ICsJCWlmICghcG9ydCkKPiArCQkJYnJl YWs7Cj4gKwo+ICsJCXBhcmVudCA9IHBvcnQtPnBhcmVudDsKPiArCQlpZiAoIW9mX25vZGVfY21w KHBhcmVudC0+bmFtZSwgInBvcnRzIikpCj4gKwkJCXBhcmVudCA9IHBhcmVudC0+cGFyZW50Owo+ ICsJCW9mX25vZGVfcHV0KHBvcnQpOwo+ICsJfQo+ICsKPiArCXJldHVybiBjb21wb25lbnRfbWFz dGVyX2FkZF93aXRoX21hdGNoKG1hc3Rlcl9kZXYsIG1fb3BzLCBtYXRjaCk7Cj4gK30KPiArCj4g K3N0YXRpYyBpbnQgeGxueF9jb21wYXJlX29mKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0 YSkKPiArewo+ICsJcmV0dXJuIGRldi0+b2Zfbm9kZSA9PSBkYXRhOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW50IHhsbnhfcGxhdGZvcm1fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikK PiArewo+ICsJcmV0dXJuIHhsbnhfb2ZfY29tcG9uZW50X3Byb2JlKCZwZGV2LT5kZXYsIHhsbnhf Y29tcGFyZV9vZiwKPiArCQkJCSAgICAgICAmeGxueF9tYXN0ZXJfb3BzKTsKPiArfQo+ICsKPiAr c3RhdGljIGludCB4bG54X3BsYXRmb3JtX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2KQo+ICt7Cj4gKwljb21wb25lbnRfbWFzdGVyX2RlbCgmcGRldi0+ZGV2LCAmeGxueF9tYXN0 ZXJfb3BzKTsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB4bG54X3BsYXRm b3JtX3NodXRkb3duKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gK3sKPiArCXN0cnVj dCB4bG54X2RybSAqeGxueF9kcm0gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKPiArCj4g Kwlkcm1fcHV0X2Rldih4bG54X2RybS0+ZHJtKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBfX21h eWJlX3VudXNlZCB4bG54X3BtX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQo+ICt7Cj4gKwlz dHJ1Y3QgeGxueF9kcm0gKnhsbnhfZHJtID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4gKwlzdHJ1 Y3QgZHJtX2RldmljZSAqZHJtID0geGxueF9kcm0tPmRybTsKPiArCj4gKwlkcm1fa21zX2hlbHBl cl9wb2xsX2Rpc2FibGUoZHJtKTsKPiArCj4gKwl4bG54X2RybS0+c3VzcGVuZF9zdGF0ZSA9IGRy bV9hdG9taWNfaGVscGVyX3N1c3BlbmQoZHJtKTsKPiArCWlmIChJU19FUlIoeGxueF9kcm0tPnN1 c3BlbmRfc3RhdGUpKSB7Cj4gKwkJZHJtX2ttc19oZWxwZXJfcG9sbF9lbmFibGUoZHJtKTsKPiAr CQlyZXR1cm4gUFRSX0VSUih4bG54X2RybS0+c3VzcGVuZF9zdGF0ZSk7Cj4gKwl9Cj4gKwo+ICsJ cmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgeGxueF9wbV9y ZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgeGxueF9kcm0gKnhsbnhf ZHJtID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0g eGxueF9kcm0tPmRybTsKPiArCj4gKwlkcm1fYXRvbWljX2hlbHBlcl9yZXN1bWUoZHJtLCB4bG54 X2RybS0+c3VzcGVuZF9zdGF0ZSk7Cj4gKwlkcm1fa21zX2hlbHBlcl9wb2xsX2VuYWJsZShkcm0p Owo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9w bV9vcHMgeGxueF9wbV9vcHMgPSB7Cj4gKwlTRVRfU1lTVEVNX1NMRUVQX1BNX09QUyh4bG54X3Bt X3N1c3BlbmQsIHhsbnhfcG1fcmVzdW1lKQo+ICt9Owo+ICsKPiArc3RhdGljIHN0cnVjdCBwbGF0 Zm9ybV9kcml2ZXIgeGxueF9kcml2ZXIgPSB7Cj4gKwkucHJvYmUJCQk9IHhsbnhfcGxhdGZvcm1f cHJvYmUsCj4gKwkucmVtb3ZlCQkJPSB4bG54X3BsYXRmb3JtX3JlbW92ZSwKPiArCS5zaHV0ZG93 bgkJPSB4bG54X3BsYXRmb3JtX3NodXRkb3duLAo+ICsJLmRyaXZlcgkJCT0gewo+ICsJCS5uYW1l CQk9ICJ4bG54LWRybSIsCj4gKwkJLnBtCQk9ICZ4bG54X3BtX29wcywKPiArCX0sCj4gK307Cj4g Kwo+ICsvKiBiaXRtYXAgZm9yIG1hc3RlciBpZCAqLwo+ICtzdGF0aWMgdTMyIHhsbnhfbWFzdGVy X2lkcyA9IEdFTk1BU0soMzEsIDApOwo+ICsKPiArLyoqCj4gKyAqIHhpbGlueF9kcm1fcGlwZWxp bmVfaW5pdCAtIEluaXRpYWxpemUgdGhlIGRybSBwaXBlbGluZSBmb3IgdGhlIGRldmljZQo+ICsg KiBAcGRldjogVGhlIHBsYXRmb3JtIGRldmljZSB0byBpbml0aWFsaXplIHRoZSBkcm0gcGlwZWxp bmUgZGV2aWNlCj4gKyAqCj4gKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIGRybSBw aXBlbGluZSBkZXZpY2UsIHN0cnVjdCBkcm1fZGV2aWNlLAo+ICsgKiBvbiBAcGRldiBieSBjcmVh dGluZyBhIGxvZ2ljYWwgbWFzdGVyIHBsYXRmb3JtIGRldmljZS4gVGhlIGxvZ2ljYWwgcGxhdGZv cm0KPiArICogZGV2aWNlIGFjdHMgYXMgYSBtYXN0ZXIgZGV2aWNlIHRvIGJpbmQgc2xhdmUgZGV2 aWNlcyBhbmQgcmVwcmVzZW50cwo+ICsgKiB0aGUgZW50aXJlIHBpcGVsaW5lLgo+ICsgKiBUaGUg bG9naWNhbCBtYXN0ZXIgdXNlcyB0aGUgcG9ydCBiaW5kaW5ncyBvZiB0aGUgY2FsbGluZyBkZXZp Y2UgdG8KPiArICogZmlndXJlIG91dCB0aGUgcGlwZWxpbmUgdG9wb2xvZ3kuCj4gKyAqCj4gKyAq IFJldHVybjogdGhlIGxvZ2ljYWwgbWFzdGVyIHBsYXRmb3JtIGRldmljZSBpZiB0aGUgZHJtIGRl dmljZSBpcyBpbml0aWFsaXplZAo+ICsgKiBvbiBAcGRldi4gRXJyb3IgY29kZSBvdGhlcndpc2Uu Cj4gKyAqLwo+ICtzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICp4bG54X2RybV9waXBlbGluZV9pbml0 KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gK3sKPiArCXN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKm1hc3RlcjsKPiArCWludCBpZCwgcmV0Owo+ICsKPiArCWlkID0gZmZzKHhsbnhfbWFz dGVyX2lkcyk7Cj4gKwlpZiAoIWlkKQo+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9TUEMpOwo+ICsK PiArCW1hc3RlciA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygieGxueC1kcm0iLCBpZCAtIDEpOwo+ ICsJaWYgKCFtYXN0ZXIpCj4gKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4gKwo+ICsJbWFz dGVyLT5kZXYucGFyZW50ID0gJnBkZXYtPmRldjsKPiArCXJldCA9IHBsYXRmb3JtX2RldmljZV9h ZGQobWFzdGVyKTsKPiArCWlmIChyZXQpCj4gKwkJZ290byBlcnJfb3V0Owo+ICsKPiArCVdBUk5f T04obWFzdGVyLT5pZCAhPSBpZCAtIDEpOwo+ICsJeGxueF9tYXN0ZXJfaWRzICY9IH5CSVQobWFz dGVyLT5pZCk7Cj4gKwlyZXR1cm4gbWFzdGVyOwo+ICsKPiArZXJyX291dDoKPiArCXBsYXRmb3Jt X2RldmljZV91bnJlZ2lzdGVyKG1hc3Rlcik7Cj4gKwlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICt9 Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKHhsbnhfZHJtX3BpcGVsaW5lX2luaXQpOwo+ICsKPiArLyoq Cj4gKyAqIHhpbGlueF9kcm1fcGlwZWxpbmVfZXhpdCAtIFJlbGVhc2UgdGhlIGRybSBwaXBlbGlu ZSBmb3IgdGhlIGRldmljZQo+ICsgKiBAbWFzdGVyOiBUaGUgbWFzdGVyIHBpcGVsaW5lIGRldmlj ZSB0byByZWxlYXNlCj4gKyAqCj4gKyAqIFJlbGVhc2UgdGhlIGxvZ2ljYWwgcGlwZWxpbmUgZGV2 aWNlIHJldHVybmVkIGJ5IHhsbnhfZHJtX3BpcGVsaW5lX2luaXQoKS4KPiArICovCj4gK3ZvaWQg eGxueF9kcm1fcGlwZWxpbmVfZXhpdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICptYXN0ZXIpCj4g K3sKPiArCXhsbnhfbWFzdGVyX2lkcyB8PSBCSVQobWFzdGVyLT5pZCk7Cj4gKwlwbGF0Zm9ybV9k ZXZpY2VfdW5yZWdpc3RlcihtYXN0ZXIpOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKHhsbnhf ZHJtX3BpcGVsaW5lX2V4aXQpOwo+ICsKPiArc3RhdGljIGludCBfX2luaXQgeGxueF9kcm1fZHJ2 X2luaXQodm9pZCkKPiArewo+ICsJcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ4bG54X2RyaXZl cik7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgX19leGl0IHhsbnhfZHJt X2Rydl9leGl0KHZvaWQpCj4gK3sKPiArCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ4bG54 X2RyaXZlcik7Cj4gK30KPiArCj4gK21vZHVsZV9pbml0KHhsbnhfZHJtX2Rydl9pbml0KTsKPiAr bW9kdWxlX2V4aXQoeGxueF9kcm1fZHJ2X2V4aXQpOwo+ICsKPiArTU9EVUxFX0FVVEhPUigiWGls aW54LCBJbmMuIik7Cj4gK01PRFVMRV9ERVNDUklQVElPTigiWGlsaW54IERSTSBLTVMgRHJpdmVy Iik7Cj4gK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL3hsbngveGxueF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS94bG54L3hsbnhfZHJ2LmgK PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjBmNjU5NWYKPiAtLS0gL2Rl di9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hsbngveGxueF9kcnYuaAo+IEBAIC0wLDAg KzEsMzMgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPiArLyoKPiAr ICogWGlsaW54IERSTSBLTVMgSGVhZGVyIGZvciBYaWxpbngKPiArICoKPiArICogIENvcHlyaWdo dCAoQykgMjAxMyAtIDIwMTggWGlsaW54LCBJbmMuCj4gKyAqCj4gKyAqICBBdXRob3I6IEh5dW4g V29vIEt3b24gPGh5dW5rQHhpbGlueC5jb20+Cj4gKyAqCj4gKyAqIFRoaXMgc29mdHdhcmUgaXMg bGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKPiArICog TGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLCBhbmQKPiArICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmll ZCB1bmRlciB0aG9zZSB0ZXJtcy4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gKyAqIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gKyAq IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKPiArICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K PiArICovCj4gKwo+ICsjaWZuZGVmIF9YTE5YX0RSVl9IXwo+ICsjZGVmaW5lIF9YTE5YX0RSVl9I Xwo+ICsKPiArc3RydWN0IGRybV9kZXZpY2U7Cj4gK3N0cnVjdCB4bG54X2NydGNfaGVscGVyOwo+ ICsKPiArc3RydWN0IHBsYXRmb3JtX2RldmljZSAqeGxueF9kcm1fcGlwZWxpbmVfaW5pdChzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpwYXJlbnQpOwo+ICt2b2lkIHhsbnhfZHJtX3BpcGVsaW5lX2V4 aXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGlwZWxpbmUpOwo+ICsKPiArdWludDMyX3QgeGxu eF9nZXRfZm9ybWF0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pOwo+ICt1bnNpZ25lZCBpbnQgeGxu eF9nZXRfYWxpZ24oc3RydWN0IGRybV9kZXZpY2UgKmRybSk7Cj4gK3N0cnVjdCB4bG54X2NydGNf aGVscGVyICp4bG54X2dldF9jcnRjX2hlbHBlcihzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKTsKPiAr c3RydWN0IHhsbnhfYnJpZGdlX2hlbHBlciAqeGxueF9nZXRfYnJpZGdlX2hlbHBlcihzdHJ1Y3Qg ZHJtX2RldmljZSAqZHJtKTsKPiArCj4gKyNlbmRpZiAvKiBfWExOWF9EUlZfSF8gKi8KPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hsbngveGxueF9mYi5jIGIvZHJpdmVycy9ncHUvZHJt L3hsbngveGxueF9mYi5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi5l NzIwODdkCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS94bG54L3hsbnhf ZmIuYwo+IEBAIC0wLDAgKzEsMjk4IEBACj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBH UEwtMi4wCj4gKy8qCj4gKyAqIFhpbGlueCBEUk0gS01TIEZyYW1lYnVmZmVyIGhlbHBlcgo+ICsg Kgo+ICsgKiAgQ29weXJpZ2h0IChDKSAyMDE1IC0gMjAxOCBYaWxpbngsIEluYy4KPiArICoKPiAr ICogIEF1dGhvcjogSHl1biBXb28gS3dvbiA8aHl1bi5rd29uQHhpbGlueC5jb20+Cj4gKyAqCj4g KyAqIEJhc2VkIG9uIGRybV9mYl9jbWFfaGVscGVyLmMKPiArICoKPiArICogIENvcHlyaWdodCAo QykgMjAxMiBBbmFsb2cgRGV2aWNlIEluYy4KPiArICoKPiArICogVGhpcyBzb2Z0d2FyZSBpcyBs aWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwo+ICsgKiBM aWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24sIGFuZAo+ICsgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVk IHVuZGVyIHRob3NlIHRlcm1zLgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiArICogYnV0IFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiArICog TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZQo+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9j cnRjLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxk cm0vZHJtX2ZiX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9nZW1fY21hX2hlbHBlci5o Pgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9nZW1fZnJhbWVidWZmZXJfaGVscGVyLmg+Cj4gKwo+ICsj aW5jbHVkZSAieGxueF9kcnYuaCIKPiArI2luY2x1ZGUgInhsbnhfZmIuaCIKPiArCj4gKyNkZWZp bmUgWExOWF9NQVhfUExBTkVTCTQKPiArCj4gK3N0cnVjdCB4bG54X2ZiZGV2IHsKPiArCXN0cnVj dCBkcm1fZmJfaGVscGVyIGZiX2hlbHBlcjsKPiArCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZi Owo+ICsJdW5zaWduZWQgaW50IGFsaWduOwo+ICsJdW5zaWduZWQgaW50IHZyZXNfbXVsdDsKPiAr fTsKPiArCj4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IHhsbnhfZmJkZXYgKnRvX2ZiZGV2KHN0cnVj dCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIpCj4gK3sKPiArCXJldHVybiBjb250YWluZXJfb2Yo ZmJfaGVscGVyLCBzdHJ1Y3QgeGxueF9mYmRldiwgZmJfaGVscGVyKTsKPiArfQo+ICsKPiArc3Rh dGljIHN0cnVjdCBkcm1fZnJhbWVidWZmZXJfZnVuY3MgeGxueF9mYl9mdW5jcyA9IHsKPiArCS5k ZXN0cm95CT0gZHJtX2dlbV9mYl9kZXN0cm95LAo+ICsJLmNyZWF0ZV9oYW5kbGUJPSBkcm1fZ2Vt X2ZiX2NyZWF0ZV9oYW5kbGUsCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50Cj4gK3hsbnhfZmJfaW9j dGwoc3RydWN0IGZiX2luZm8gKmluZm8sIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcg YXJnKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyID0gaW5mby0+cGFy Owo+ICsJdW5zaWduZWQgaW50IGk7Cj4gKwlpbnQgcmV0ID0gMDsKPiArCj4gKwlzd2l0Y2ggKGNt ZCkgewo+ICsJY2FzZSBGQklPX1dBSVRGT1JWU1lOQzoKPiArCQlmb3IgKGkgPSAwOyBpIDwgZmJf aGVscGVyLT5jcnRjX2NvdW50OyBpKyspIHsKPiArCQkJc3RydWN0IGRybV9tb2RlX3NldCAqbW9k ZV9zZXQ7Cj4gKwkJCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKPiArCj4gKwkJCW1vZGVfc2V0ID0g JmZiX2hlbHBlci0+Y3J0Y19pbmZvW2ldLm1vZGVfc2V0Owo+ICsJCQljcnRjID0gbW9kZV9zZXQt PmNydGM7Cj4gKwkJCXJldCA9IGRybV9jcnRjX3ZibGFua19nZXQoY3J0Yyk7Cj4gKwkJCWlmICgh cmV0KSB7Cj4gKwkJCQlkcm1fY3J0Y193YWl0X29uZV92YmxhbmsoY3J0Yyk7Cj4gKwkJCQlkcm1f Y3J0Y192YmxhbmtfcHV0KGNydGMpOwo+ICsJCQl9Cj4gKwkJfQo+ICsJCXJldHVybiByZXQ7Cj4g KwlkZWZhdWx0Ogo+ICsJCXJldHVybiAtRU5PVFRZOwo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGZiX29wcyB4bG54X2ZiZGV2X29wcyA9IHsKPiArCS5v d25lcgkJPSBUSElTX01PRFVMRSwKPiArCS5mYl9maWxscmVjdAk9IHN5c19maWxscmVjdCwKPiAr CS5mYl9jb3B5YXJlYQk9IHN5c19jb3B5YXJlYSwKPiArCS5mYl9pbWFnZWJsaXQJPSBzeXNfaW1h Z2VibGl0LAo+ICsJLmZiX2NoZWNrX3Zhcgk9IGRybV9mYl9oZWxwZXJfY2hlY2tfdmFyLAo+ICsJ LmZiX3NldF9wYXIJPSBkcm1fZmJfaGVscGVyX3NldF9wYXIsCj4gKwkuZmJfYmxhbmsJPSBkcm1f ZmJfaGVscGVyX2JsYW5rLAo+ICsJLmZiX3Bhbl9kaXNwbGF5CT0gZHJtX2ZiX2hlbHBlcl9wYW5f ZGlzcGxheSwKPiArCS5mYl9zZXRjbWFwCT0gZHJtX2ZiX2hlbHBlcl9zZXRjbWFwLAo+ICsJLmZi X2lvY3RsCT0geGxueF9mYl9pb2N0bCwKPiArfTsKPiArCj4gKy8qKgo+ICsgKiB4bG54X2ZiZGV2 X2NyZWF0ZSAtIENyZWF0ZSB0aGUgZmJkZXYgd2l0aCBhIGZyYW1lYnVmZmVyCj4gKyAqIEBmYl9o ZWxwZXI6IGZiIGhlbHBlciBzdHJ1Y3R1cmUKPiArICogQHNpemU6IGZyYW1lYnVmZmVyIHNpemUg aW5mbwo+ICsgKgo+ICsgKiBUaGlzIGZ1bmN0aW9uIGlzIGJhc2VkIG9uIGRybV9mYmRldl9jbWFf Y3JlYXRlKCkuCj4gKyAqCj4gKyAqIFJldHVybjogMCBpZiBzdWNjZXNzZnVsLCBvciB0aGUgZXJy b3IgY29kZS4KPiArICovCj4gK3N0YXRpYyBpbnQgeGxueF9mYmRldl9jcmVhdGUoc3RydWN0IGRy bV9mYl9oZWxwZXIgKmZiX2hlbHBlciwKPiArCQkJICAgICBzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9z dXJmYWNlX3NpemUgKnNpemUpCj4gK3sKPiArCXN0cnVjdCB4bG54X2ZiZGV2ICpmYmRldiA9IHRv X2ZiZGV2KGZiX2hlbHBlcik7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gZmJfaGVscGVy LT5kZXY7Cj4gKwlzdHJ1Y3QgZHJtX2dlbV9jbWFfb2JqZWN0ICpvYmo7Cj4gKwlzdHJ1Y3QgZHJt X2ZyYW1lYnVmZmVyICpmYjsKPiArCXVuc2lnbmVkIGludCBieXRlc19wZXJfcGl4ZWw7Cj4gKwl1 bnNpZ25lZCBsb25nIG9mZnNldDsKPiArCXN0cnVjdCBmYl9pbmZvICpmYmk7Cj4gKwlzaXplX3Qg Ynl0ZXM7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWRldl9kYmcoZHJtLT5kZXYsICJzdXJmYWNlIHdp ZHRoKCVkKSwgaGVpZ2h0KCVkKSBhbmQgYnBwKCVkKVxuIiwKPiArCQlzaXplLT5zdXJmYWNlX3dp ZHRoLCBzaXplLT5zdXJmYWNlX2hlaWdodCwgc2l6ZS0+c3VyZmFjZV9icHApOwo+ICsKPiArCXNp emUtPnN1cmZhY2VfaGVpZ2h0ICo9IGZiZGV2LT52cmVzX211bHQ7Cj4gKwlieXRlc19wZXJfcGl4 ZWwgPSBESVZfUk9VTkRfVVAoc2l6ZS0+c3VyZmFjZV9icHAsIDgpOwo+ICsJYnl0ZXMgPSBBTElH TihzaXplLT5zdXJmYWNlX3dpZHRoICogYnl0ZXNfcGVyX3BpeGVsLCBmYmRldi0+YWxpZ24pOwo+ ICsJYnl0ZXMgKj0gc2l6ZS0+c3VyZmFjZV9oZWlnaHQ7Cj4gKwo+ICsJb2JqID0gZHJtX2dlbV9j bWFfY3JlYXRlKGRybSwgYnl0ZXMpOwo+ICsJaWYgKElTX0VSUihvYmopKQo+ICsJCXJldHVybiBQ VFJfRVJSKG9iaik7Cj4gKwo+ICsJZmJpID0gZnJhbWVidWZmZXJfYWxsb2MoMCwgZHJtLT5kZXYp Owo+ICsJaWYgKCFmYmkpIHsKPiArCQlkZXZfZXJyKGRybS0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9j YXRlIGZyYW1lYnVmZmVyIGluZm8uXG4iKTsKPiArCQlyZXQgPSAtRU5PTUVNOwo+ICsJCWdvdG8g ZXJyX2RybV9nZW1fY21hX2ZyZWVfb2JqZWN0Owo+ICsJfQo+ICsKPiArCWZiZGV2LT5mYiA9IGRy bV9nZW1fZmJkZXZfZmJfY3JlYXRlKGRybSwgc2l6ZSwgZmJkZXYtPmFsaWduLCAmb2JqLT5iYXNl LAo+ICsJCQkJCSAgICAmeGxueF9mYl9mdW5jcyk7Cj4gKwlpZiAoSVNfRVJSKGZiZGV2LT5mYikp IHsKPiArCQlkZXZfZXJyKGRybS0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIERSTSBmcmFtZWJ1 ZmZlci5cbiIpOwo+ICsJCXJldCA9IFBUUl9FUlIoZmJkZXYtPmZiKTsKPiArCQlnb3RvIGVycl9m cmFtZWJ1ZmZlcl9yZWxlYXNlOwo+ICsJfQo+ICsKPiArCWZiID0gZmJkZXYtPmZiOwo+ICsJZmJf aGVscGVyLT5mYiA9IGZiOwo+ICsJZmJfaGVscGVyLT5mYmRldiA9IGZiaTsKPiArCWZiaS0+cGFy ID0gZmJfaGVscGVyOwo+ICsJZmJpLT5mbGFncyA9IEZCSU5GT19GTEFHX0RFRkFVTFQ7Cj4gKwlm YmktPmZib3BzID0gJnhsbnhfZmJkZXZfb3BzOwo+ICsKPiArCXJldCA9IGZiX2FsbG9jX2NtYXAo JmZiaS0+Y21hcCwgMjU2LCAwKTsKPiArCWlmIChyZXQpIHsKPiArCQlkZXZfZXJyKGRybS0+ZGV2 LCAiRmFpbGVkIHRvIGFsbG9jYXRlIGNvbG9yIG1hcC5cbiIpOwo+ICsJCWdvdG8gZXJyX2ZiX2Rl c3Ryb3k7Cj4gKwl9Cj4gKwo+ICsJZHJtX2ZiX2hlbHBlcl9maWxsX2ZpeChmYmksIGZiLT5waXRj aGVzWzBdLCBmYi0+Zm9ybWF0LT5kZXB0aCk7Cj4gKwlkcm1fZmJfaGVscGVyX2ZpbGxfdmFyKGZi aSwgZmJfaGVscGVyLCBmYi0+d2lkdGgsIGZiLT5oZWlnaHQpOwo+ICsJZmJpLT52YXIueXJlcyA9 IGZiLT5oZWlnaHQgLyBmYmRldi0+dnJlc19tdWx0Owo+ICsKPiArCW9mZnNldCA9IGZiaS0+dmFy LnhvZmZzZXQgKiBieXRlc19wZXJfcGl4ZWw7Cj4gKwlvZmZzZXQgKz0gZmJpLT52YXIueW9mZnNl dCAqIGZiLT5waXRjaGVzWzBdOwo+ICsKPiArCWRybS0+bW9kZV9jb25maWcuZmJfYmFzZSA9IChy ZXNvdXJjZV9zaXplX3Qpb2JqLT5wYWRkcjsKPiArCWZiaS0+c2NyZWVuX2Jhc2UgPSAoY2hhciBf X2lvbWVtICopKG9iai0+dmFkZHIgKyBvZmZzZXQpOwo+ICsJZmJpLT5maXguc21lbV9zdGFydCA9 ICh1bnNpZ25lZCBsb25nKShvYmotPnBhZGRyICsgb2Zmc2V0KTsKPiArCWZiaS0+c2NyZWVuX3Np emUgPSBieXRlczsKPiArCWZiaS0+Zml4LnNtZW1fbGVuID0gYnl0ZXM7Cj4gKwo+ICsJcmV0dXJu IDA7Cj4gKwo+ICtlcnJfZmJfZGVzdHJveToKPiArCWRybV9mcmFtZWJ1ZmZlcl91bnJlZ2lzdGVy X3ByaXZhdGUoZmIpOwo+ICsJZHJtX2dlbV9mYl9kZXN0cm95KGZiKTsKPiArZXJyX2ZyYW1lYnVm ZmVyX3JlbGVhc2U6Cj4gKwlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGZiaSk7Cj4gK2Vycl9kcm1fZ2Vt X2NtYV9mcmVlX29iamVjdDoKPiArCWRybV9nZW1fY21hX2ZyZWVfb2JqZWN0KCZvYmotPmJhc2Up Owo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBkcm1fZmJfaGVscGVy X2Z1bmNzIHhsbnhfZmJfaGVscGVyX2Z1bmNzID0gewo+ICsJLmZiX3Byb2JlID0geGxueF9mYmRl dl9jcmVhdGUsCj4gK307Cj4gKwo+ICsvKioKPiArICogeGxueF9mYl9pbml0IC0gQWxsb2NhdGUg YW5kIGluaXRpYWxpemVzIHRoZSBYaWxpbnggZnJhbWVidWZmZXIKPiArICogQGRybTogRFJNIGRl dmljZQo+ICsgKiBAcHJlZmVycmVkX2JwcDogcHJlZmVycmVkIGJpdHMgcGVyIHBpeGVsIGZvciB0 aGUgZGV2aWNlCj4gKyAqIEBtYXhfY29ubl9jb3VudDogbWF4aW11bSBudW1iZXIgb2YgY29ubmVj dG9ycwo+ICsgKiBAYWxpZ246IGFsaWdubWVudCB2YWx1ZSBmb3IgcGl0Y2gKPiArICogQHZyZXNf bXVsdDogbXVsdGlwbGllciBmb3IgdmlydHVhbCByZXNvbHV0aW9uCj4gKyAqCj4gKyAqIFRoaXMg ZnVuY3Rpb24gaXMgYmFzZWQgb24gZHJtX2ZiZGV2X2NtYV9pbml0KCkuCj4gKyAqCj4gKyAqIFJl dHVybjogYSBuZXdseSBhbGxvY2F0ZWQgZHJtX2ZiX2hlbHBlciBzdHJ1Y3Qgb3IgYSBFUlJfUFRS Lgo+ICsgKi8KPiArc3RydWN0IGRybV9mYl9oZWxwZXIgKgo+ICt4bG54X2ZiX2luaXQoc3RydWN0 IGRybV9kZXZpY2UgKmRybSwgaW50IHByZWZlcnJlZF9icHAsCj4gKwkgICAgIHVuc2lnbmVkIGlu dCBtYXhfY29ubl9jb3VudCwgdW5zaWduZWQgaW50IGFsaWduLAo+ICsJICAgICB1bnNpZ25lZCBp bnQgdnJlc19tdWx0KQo+ICt7Cj4gKwlzdHJ1Y3QgeGxueF9mYmRldiAqZmJkZXY7Cj4gKwlzdHJ1 Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyOwo+ICsJaW50IHJldDsKPiArCj4gKwlmYmRldiA9 IGt6YWxsb2Moc2l6ZW9mKCpmYmRldiksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFmYmRldikKPiAr CQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiArCj4gKwlmYmRldi0+dnJlc19tdWx0ID0gdnJl c19tdWx0Owo+ICsJZmJkZXYtPmFsaWduID0gYWxpZ247Cj4gKwlmYl9oZWxwZXIgPSAmZmJkZXYt PmZiX2hlbHBlcjsKPiArCWRybV9mYl9oZWxwZXJfcHJlcGFyZShkcm0sIGZiX2hlbHBlciwgJnhs bnhfZmJfaGVscGVyX2Z1bmNzKTsKPiArCj4gKwlyZXQgPSBkcm1fZmJfaGVscGVyX2luaXQoZHJt LCBmYl9oZWxwZXIsIG1heF9jb25uX2NvdW50KTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJZGV2 X2Vycihkcm0tPmRldiwgIkZhaWxlZCB0byBpbml0aWFsaXplIGRybSBmYiBoZWxwZXIuXG4iKTsK PiArCQlnb3RvIGVycl9mcmVlOwo+ICsJfQo+ICsKPiArCXJldCA9IGRybV9mYl9oZWxwZXJfc2lu Z2xlX2FkZF9hbGxfY29ubmVjdG9ycyhmYl9oZWxwZXIpOwo+ICsJaWYgKHJldCA8IDApIHsKPiAr CQlkZXZfZXJyKGRybS0+ZGV2LCAiRmFpbGVkIHRvIGFkZCBjb25uZWN0b3JzLlxuIik7Cj4gKwkJ Z290byBlcnJfZHJtX2ZiX2hlbHBlcl9maW5pOwo+ICsJfQo+ICsKPiArCXJldCA9IGRybV9mYl9o ZWxwZXJfaW5pdGlhbF9jb25maWcoZmJfaGVscGVyLCBwcmVmZXJyZWRfYnBwKTsKPiArCWlmIChy ZXQgPCAwKSB7Cj4gKwkJZGV2X2Vycihkcm0tPmRldiwgIkZhaWxlZCB0byBzZXQgaW5pdGlhbCBo dyBjb25maWd1cmF0aW9uLlxuIik7Cj4gKwkJZ290byBlcnJfZHJtX2ZiX2hlbHBlcl9maW5pOwo+ ICsJfQo+ICsKPiArCXJldHVybiBmYl9oZWxwZXI7Cj4gKwo+ICtlcnJfZHJtX2ZiX2hlbHBlcl9m aW5pOgo+ICsJZHJtX2ZiX2hlbHBlcl9maW5pKGZiX2hlbHBlcik7Cj4gK2Vycl9mcmVlOgo+ICsJ a2ZyZWUoZmJkZXYpOwo+ICsJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiArfQo+ICsKPiArLyoqCj4g KyAqIHhsbnhfZmJkZXZfZGVmaW9fZmluaSAtIEZyZWUgdGhlIGRlZmlvIGZiCj4gKyAqIEBmYmk6 IGZiX2luZm8gc3RydWN0Cj4gKyAqCj4gKyAqIFRoaXMgZnVuY3Rpb24gaXMgYmFzZWQgb24gZHJt X2ZiZGV2X2NtYV9kZWZpb19maW5pKCkuCj4gKyAqLwo+ICtzdGF0aWMgdm9pZCB4bG54X2ZiZGV2 X2RlZmlvX2Zpbmkoc3RydWN0IGZiX2luZm8gKmZiaSkKPiArewo+ICsJaWYgKCFmYmktPmZiZGVm aW8pCj4gKwkJcmV0dXJuOwo+ICsKPiArCWZiX2RlZmVycmVkX2lvX2NsZWFudXAoZmJpKTsKPiAr CWtmcmVlKGZiaS0+ZmJkZWZpbyk7Cj4gKwlrZnJlZShmYmktPmZib3BzKTsKPiArfQo+ICsKPiAr LyoqCj4gKyAqIHhsbnhfZmJkZXZfZmluaSAtIEZyZWUgdGhlIFhpbGlueCBmcmFtZWJ1ZmZlcgo+ ICsgKiBAZmJfaGVscGVyOiBkcm1fZmJfaGVscGVyIHN0cnVjdAo+ICsgKgo+ICsgKiBUaGlzIGZ1 bmN0aW9uIGlzIGJhc2VkIG9uIGRybV9mYmRldl9jbWFfZmluaSgpLgo+ICsgKi8KPiArdm9pZCB4 bG54X2ZiX2Zpbmkoc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlcikKPiArewo+ICsJc3Ry dWN0IHhsbnhfZmJkZXYgKmZiZGV2ID0gdG9fZmJkZXYoZmJfaGVscGVyKTsKPiArCj4gKwlkcm1f ZmJfaGVscGVyX3VucmVnaXN0ZXJfZmJpKCZmYmRldi0+ZmJfaGVscGVyKTsKPiArCWlmIChmYmRl di0+ZmJfaGVscGVyLmZiZGV2KQo+ICsJCXhsbnhfZmJkZXZfZGVmaW9fZmluaShmYmRldi0+ZmJf aGVscGVyLmZiZGV2KTsKPiArCj4gKwlpZiAoZmJkZXYtPmZiX2hlbHBlci5mYikKPiArCQlkcm1f ZnJhbWVidWZmZXJfcmVtb3ZlKGZiZGV2LT5mYl9oZWxwZXIuZmIpOwo+ICsKPiArCWRybV9mYl9o ZWxwZXJfZmluaSgmZmJkZXYtPmZiX2hlbHBlcik7Cj4gKwlrZnJlZShmYmRldik7Cj4gK30KPiAr Cj4gKy8qKgo+ICsgKiB4bG54X2ZiX2NyZWF0ZSAtIChzdHJ1Y3QgZHJtX21vZGVfY29uZmlnX2Z1 bmNzICopLT5mYl9jcmVhdGUgY2FsbGJhY2sKPiArICogQGRybTogRFJNIGRldmljZQo+ICsgKiBA ZmlsZV9wcml2OiBkcm0gZmlsZSBwcml2YXRlIGRhdGEKPiArICogQG1vZGVfY21kOiBtb2RlIGNv bW1hbmQgZm9yIGZiIGNyZWF0aW9uCj4gKyAqCj4gKyAqIFRoaXMgZnVuY3Rpb25zIGNyZWF0ZXMg YSBkcm1fZnJhbWVidWZmZXIgd2l0aCB4bG54X2ZiX2Z1bmNzIGZvciBnaXZlbiBtb2RlCj4gKyAq IEBtb2RlX2NtZC4gVGhpcyBmdW5jdGlvbnMgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBmb3IgdGhl IGZiX2NyZWF0ZSBjYWxsYmFjawo+ICsgKiBmdW5jdGlvbiBvZiBkcm1fbW9kZV9jb25maWdfZnVu Y3MuCj4gKyAqCj4gKyAqIFJldHVybjogYSBkcm1fZnJhbWVidWZmZXIgb2JqZWN0IGlmIHN1Y2Nl c3NmdWwsIG9yCj4gKyAqIEVSUl9QVFIgZnJvbSBkcm1fZ2VtX2ZiX2NyZWF0ZV93aXRoX2Z1bmNz KCkuCj4gKyAqLwo+ICtzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICoKPiAreGxueF9mYl9jcmVhdGUo c3RydWN0IGRybV9kZXZpY2UgKmRybSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCj4gKwkg ICAgICAgY29uc3Qgc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgKm1vZGVfY21kKQo+ICt7Cj4gKwly ZXR1cm4gZHJtX2dlbV9mYl9jcmVhdGVfd2l0aF9mdW5jcyhkcm0sIGZpbGVfcHJpdiwgbW9kZV9j bWQsCj4gKwkJCQkJICAgICZ4bG54X2ZiX2Z1bmNzKTsKPiArfQo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0veGxueC94bG54X2ZiLmggYi9kcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2Zi LmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjZlZmM5ODUKPiAtLS0g L2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hsbngveGxueF9mYi5oCj4gQEAgLTAs MCArMSwzMyBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+ICsvKgo+ ICsgKiBYaWxpbnggRFJNIEtNUyBGcmFtZWJ1ZmZlciBoZWxwZXIgaGVhZGVyCj4gKyAqCj4gKyAq ICBDb3B5cmlnaHQgKEMpIDIwMTUgLSAyMDE4IFhpbGlueCwgSW5jLgo+ICsgKgo+ICsgKiAgQXV0 aG9yOiBIeXVuIFdvbyBLd29uIDxoeXVuLmt3b25AeGlsaW54LmNvbT4KPiArICoKPiArICogVGhp cyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYwo+ICsgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAo+ICsgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRl ZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgo+ICsgKgo+ICsgKiBUaGlzIHByb2dy YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiAr ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQo+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgX1hMTlhfRkJfSF8KPiArI2RlZmlu ZSBfWExOWF9GQl9IXwo+ICsKPiArc3RydWN0IGRybV9mYl9oZWxwZXI7Cj4gKwo+ICtzdHJ1Y3Qg ZHJtX2ZyYW1lYnVmZmVyICoKPiAreGxueF9mYl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRy bSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCj4gKwkgICAgICAgY29uc3Qgc3RydWN0IGRy bV9tb2RlX2ZiX2NtZDIgKm1vZGVfY21kKTsKPiArc3RydWN0IGRybV9mYl9oZWxwZXIgKgo+ICt4 bG54X2ZiX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgaW50IHByZWZlcnJlZF9icHAsCj4g KwkgICAgIHVuc2lnbmVkIGludCBtYXhfY29ubl9jb3VudCwgdW5zaWduZWQgaW50IGFsaWduLAo+ ICsJICAgICB1bnNpZ25lZCBpbnQgdnJlc19tdWx0KTsKPiArdm9pZCB4bG54X2ZiX2Zpbmkoc3Ry dWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlcik7Cj4gKwo+ICsjZW5kaWYgLyogX1hMTlhfRkJf SF8gKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hsbngveGxueF9nZW0uYyBiL2Ry aXZlcnMvZ3B1L2RybS94bG54L3hsbnhfZ2VtLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGlu ZGV4IDAwMDAwMDAuLjRhNWQ1MzMKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL3hsbngveGxueF9nZW0uYwo+IEBAIC0wLDAgKzEsNDcgQEAKPiArLy8gU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEdQTC0yLjAKPiArLyoKPiArICogWGlsaW54IERSTSBLTVMgR0VNIGhlbHBl cgo+ICsgKgo+ICsgKiAgQ29weXJpZ2h0IChDKSAyMDE1IC0gMjAxOCBYaWxpbngsIEluYy4KPiAr ICoKPiArICogIEF1dGhvcjogSHl1biBXb28gS3dvbiA8aHl1bi5rd29uQHhpbGlueC5jb20+Cj4g KyAqCj4gKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMKPiArICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hl ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKPiArICogbWF5IGJlIGNvcGll ZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KPiArICoKPiAr ICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsCj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKPiArICogR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiArICovCj4gKwo+ICsjaW5jbHVkZSA8ZHJtL2Ry bVAuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fZ2VtX2NtYV9oZWxwZXIuaD4KPiArCj4gKyNpbmNs dWRlICJ4bG54X2Rydi5oIgo+ICsjaW5jbHVkZSAieGxueF9nZW0uaCIKPiArCj4gKy8qCj4gKyAq IHhsbnhfZ2VtX2NtYV9kdW1iX2NyZWF0ZSAtIChzdHJ1Y3QgZHJtX2RyaXZlciktPmR1bWJfY3Jl YXRlIGNhbGxiYWNrCj4gKyAqIEBmaWxlX3ByaXY6IGRybV9maWxlIG9iamVjdAo+ICsgKiBAZHJt OiBEUk0gb2JqZWN0Cj4gKyAqIEBhcmdzOiBpbmZvIGZvciBkdW1iIHNjYW5vdXQgYnVmZmVyIGNy ZWF0aW9uCj4gKyAqCj4gKyAqIFRoaXMgZnVuY3Rpb24gaXMgZm9yIGR1bWJfY3JlYXRlIGNhbGxi YWNrIG9mIGRybV9kcml2ZXIgc3RydWN0LiBTaW1wbHkKPiArICogaXQgd3JhcHMgYXJvdW5kIGRy bV9nZW1fY21hX2R1bWJfY3JlYXRlKCkgYW5kIHNldHMgdGhlIHBpdGNoIHZhbHVlCj4gKyAqIGJ5 IHJldHJpZXZpbmcgdGhlIHZhbHVlIGZyb20gdGhlIGRldmljZS4KPiArICoKPiArICogUmV0dXJu OiBUaGUgcmV0dXJuIHZhbHVlIGZyb20gZHJtX2dlbV9jbWFfZHVtYl9jcmVhdGUoKQo+ICsgKi8K PiAraW50IHhsbnhfZ2VtX2NtYV9kdW1iX2NyZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJp diwgc3RydWN0IGRybV9kZXZpY2UgKmRybSwKPiArCQkJICAgICBzdHJ1Y3QgZHJtX21vZGVfY3Jl YXRlX2R1bWIgKmFyZ3MpCj4gK3sKPiArCWludCBwaXRjaCA9IERJVl9ST1VORF9VUChhcmdzLT53 aWR0aCAqIGFyZ3MtPmJwcCwgOCk7Cj4gKwl1bnNpZ25lZCBpbnQgYWxpZ24gPSB4bG54X2dldF9h bGlnbihkcm0pOwo+ICsKPiArCWlmICghYXJncy0+cGl0Y2ggfHwgIUlTX0FMSUdORUQoYXJncy0+ cGl0Y2gsIGFsaWduKSkKPiArCQlhcmdzLT5waXRjaCA9IEFMSUdOKHBpdGNoLCBhbGlnbik7Cj4g Kwo+ICsJcmV0dXJuIGRybV9nZW1fY21hX2R1bWJfY3JlYXRlX2ludGVybmFsKGZpbGVfcHJpdiwg ZHJtLCBhcmdzKTsKPiArfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGxueC94bG54 X2dlbS5oIGIvZHJpdmVycy9ncHUvZHJtL3hsbngveGxueF9nZW0uaAo+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uZjM4MGRlOQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0veGxueC94bG54X2dlbS5oCj4gQEAgLTAsMCArMSwyNiBAQAo+ICsvLyBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+ICsvKgo+ICsgKiBYaWxpbnggRFJNIEtN UyBHRU0gaGVscGVyIGhlYWRlcgo+ICsgKgo+ICsgKiAgQ29weXJpZ2h0IChDKSAyMDE1IC0gMjAx OCBYaWxpbngsIEluYy4KPiArICoKPiArICogIEF1dGhvcjogSHl1biBXb28gS3dvbiA8aHl1bi5r d29uQHhpbGlueC5jb20+Cj4gKyAqCj4gKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKPiArICogTGljZW5zZSB2ZXJz aW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQK PiArICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9z ZSB0ZXJtcy4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gKyAqIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKPiArICog R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiArICovCj4gKwo+ ICsjaWZuZGVmIF9YTE5YX0dFTV9IXwo+ICsjZGVmaW5lIF9YTE5YX0dFTV9IXwo+ICsKPiAraW50 IHhsbnhfZ2VtX2NtYV9kdW1iX2NyZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKPiAr CQkJICAgICBzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLAo+ICsJCQkgICAgIHN0cnVjdCBkcm1fbW9k ZV9jcmVhdGVfZHVtYiAqYXJncyk7Cj4gKwo+ICsjZW5kaWYgLyogX1hMTlhfR0VNX0hfICovCj4g LS0gCj4gMi43LjQKPiAKPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwo+IGRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKPiBkcmktZGV2ZWxAbGlzdHMuZnJlZWRl c2t0b3Aub3JnCj4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9kcmktZGV2ZWwKCi0tIApEYW5pZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBD b3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5mZndsbC5jaApfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBs aXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9kcmktZGV2ZWwK