From mboxrd@z Thu Jan 1 00:00:00 1970 From: Liu Ying Subject: Re: [PATCH RFC v6 16/21] drm: panel: Add support for Himax HX8369A MIPI DSI panel Date: Tue, 30 Dec 2014 10:39:19 +0800 Message-ID: <54A21057.3030901@freescale.com> References: <1419835168-9034-1-git-send-email-Ying.Liu@freescale.com> <1419835168-9034-17-git-send-email-Ying.Liu@freescale.com> <54A11A65.1040509@samsung.com> <54A127D2.7080904@freescale.com> <54A131FB.8040809@samsung.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <54A131FB.8040809@samsung.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Andrzej Hajda , dri-devel@lists.freedesktop.org Cc: stefan.wahren@i2se.com, devicetree@vger.kernel.org, linux@arm.linux.org.uk, kernel@pengutronix.de, linux-kernel@vger.kernel.org, mturquette@linaro.org, linux-arm-kernel@lists.infradead.org, andyshrk@gmail.com List-Id: devicetree@vger.kernel.org T24gMTIvMjkvMjAxNCAwNjo1MCBQTSwgQW5kcnplaiBIYWpkYSB3cm90ZToKPiBPbiAxMi8yOS8y MDE0IDExOjA3IEFNLCBMaXUgWWluZyB3cm90ZToKPj4gT24gMTIvMjkvMjAxNCAwNTowOSBQTSwg QW5kcnplaiBIYWpkYSB3cm90ZToKPj4+IE9uIDEyLzI5LzIwMTQgMDc6MzkgQU0sIExpdSBZaW5n IHdyb3RlOgo+Pj4+IFRoaXMgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBIaW1heCBIWDgzNjlBIE1J UEkgRFNJIHBhbmVsLgo+Pj4+Cj4+Pj4gU2lnbmVkLW9mZi1ieTogTGl1IFlpbmcgPFlpbmcuTGl1 QGZyZWVzY2FsZS5jb20+Cj4+Pj4gLS0tCj4+Pj4gdjUtPnY2Ogo+Pj4+ICAgICogTWFrZSB0aGUg Y2hlY2twYXRjaC5wbCBzY3JpcHQgYmUgaGFwcGllci4KPj4+PiAgICAqIERvIG5vdCBzZXQgdGhl IGRzaSBjaGFubmVsIG51bWJlciB0byBiZSB6ZXJvIGluIHByb2JlKCksIGJlY2F1c2UgdGhlIE1J UEkgRFNJCj4+Pj4gICAgICBidXMgZHJpdmVyIHdvdWxkIHNldCBpdC4KPj4+Pgo+Pj4+IHY0LT52 NToKPj4+PiAgICAqIEFkZHJlc3MgQW5kcnplaiBIYWpkYSdzIGNvbW1lbnRzLgo+Pj4+ICAgICog R2V0IHRoZSBicy1ncGlvcyBwcm9wZXJ0eSBpbnN0ZWFkIG9mIHRoZSBic1szOjBdLWdwaW9zIHBy b3BlcnRpZXMuCj4+Pj4gICAgKiBJbXBsZW1lbnQgZXJyb3IgcHJvcGFnYXRpb24gZm9yIHBhbmVs IHJlZ2lzdGVyIGNvbmZpZ3VyYXRpb25zLgo+Pj4+ICAgICogT3RoZXIgbWlub3IgY2hhbmdlcyB0 byBpbXByb3ZlIHRoZSBjb2RlIHF1YWxpdHkuCj4+Pj4KPj4+PiB2My0+djQ6Cj4+Pj4gICAgKiBN b3ZlIHRoZSByZWxldmFudCBkdC1iaW5kaW5ncyB0byBhIHNlcGFyYXRlIHBhdGNoIHRvIGFkZHJl c3MgU3RlZmFuCj4+Pj4gICAgICBXYWhyZW4ncyBjb21tZW50Lgo+Pj4+Cj4+Pj4gdjItPnYzOgo+ Pj4+ICAgICogU29ydCB0aGUgaW5jbHVkZWQgaGVhZGVyIGZpbGVzIGFscGhhYmV0aWNhbGx5Lgo+ Pj4+Cj4+Pj4gdjEtPnYyOgo+Pj4+ICAgICogQWRkcmVzcyBhbG1vc3QgYWxsIGNvbW1lbnRzIGZy b20gVGhpZXJyeSBSZWRpbmcuCj4+Pj4gICAgKiBSZW1vdmUgc2V2ZXJhbCBEVCBwcm9wZXJ0aWVz IGFzIHRoZXkgY2FuIGJlIGltcGxpZWQgYnkgdGhlIGNvbXBhdGlibGUgc3RyaW5nLgo+Pj4+ICAg ICogQWRkIHRoZSBISU1BWC9oaW1heCBwcmVmaXhlcyB0byB0aGUgZHJpdmVyJ3MgS2NvbmZpZyBu YW1lIGFuZCBkcml2ZXIgbmFtZS4KPj4+PiAgICAqIE1vdmUgdGhlIGRyaXZlcidzIE1ha2VmaWxl IGVudHJ5IHBsYWNlIHRvIHNvcnQgdGhlIGVudHJpZXMgYWxwaGFiZXRpY2FsbHkuCj4+Pj4gICAg KiBSZXVzZSBzZXZlcmFsIHN0YW5kYXJkIERDUyBmdW5jdGlvbnMgaW5zdGVhZCBvZiBpbnZlbnRp bmcgd2hlZWxzLgo+Pj4+ICAgICogTW92ZSB0aGUgcGFuZWwgcmVzZXR0aW5nIGFuZCBwb3dlciBs b2dpY3MgdG8gdGhlIGRyaXZlciBwcm9iZS9yZW1vdmUgc3RhZ2VzLgo+Pj4+ICAgICAgVGhpcyBt YXkgc2ltcGxpZnkgcGFuZWwgcHJlcGFyZS91bnByZXBhcmUgaG9va3MuIFRoZSBwb3dlciBjb25z dW1wdGlvbiBzaG91bGQKPj4+PiAgICAgIG5vdCBjaGFuZ2UgYSBsb3QgYXQgRFBNUyBzaW5jZSB0 aGUgcGFuZWwgZW50ZXJzIHNsZWVwIG1vZGUgYXQgdGhhdCB0aW1lLgo+Pj4+ICAgICogQWRkIHRo ZSBtb2R1bGUgYXV0aG9yLgo+Pj4+ICAgICogT3RoZXIgbWlub3IgY2hhbmdlcywgc3VjaCBhcyBj b2Rpbmcgc3R5bGUgaXNzdWVzLgo+Pj4+Cj4+Pj4gICAgZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tj b25maWcgICAgICAgICAgICAgICB8ICAgNSArCj4+Pj4gICAgZHJpdmVycy9ncHUvZHJtL3BhbmVs L01ha2VmaWxlICAgICAgICAgICAgICB8ICAgMSArCj4+Pj4gICAgZHJpdmVycy9ncHUvZHJtL3Bh bmVsL3BhbmVsLWhpbWF4LWh4ODM2OWEuYyB8IDYxNCArKysrKysrKysrKysrKysrKysrKysrKysr KysrCj4+Pj4gICAgMyBmaWxlcyBjaGFuZ2VkLCA2MjAgaW5zZXJ0aW9ucygrKQo+Pj4+ICAgIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwtaGltYXgtaHg4MzY5 YS5jCj4+Pj4KPj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcg Yi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZpZwo+Pj4+IGluZGV4IDAyNGU5OGUuLjgxYjBi ZjAgMTAwNjQ0Cj4+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcKPj4+PiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZpZwo+Pj4+IEBAIC0xNiw2ICsxNiwxMSBA QCBjb25maWcgRFJNX1BBTkVMX1NJTVBMRQo+Pj4+ICAgIAkgIHRoYXQgaXQgY2FuIGJlIGF1dG9t YXRpY2FsbHkgdHVybmVkIG9mZiB3aGVuIHRoZSBwYW5lbCBnb2VzIGludG8gYQo+Pj4+ICAgIAkg IGxvdyBwb3dlciBzdGF0ZS4KPj4+Pgo+Pj4+ICtjb25maWcgRFJNX1BBTkVMX0hJTUFYX0hYODM2 OUEKPj4+PiArCXRyaXN0YXRlICJIaW1heCBIWDgzNjlBIHBhbmVsIgo+Pj4+ICsJZGVwZW5kcyBv biBPRgo+Pj4+ICsJc2VsZWN0IERSTV9NSVBJX0RTSQo+Pj4+ICsKPj4+PiAgICBjb25maWcgRFJN X1BBTkVMX0xEOTA0MAo+Pj4+ICAgIAl0cmlzdGF0ZSAiTEQ5MDQwIFJHQi9TUEkgcGFuZWwiCj4+ Pj4gICAgCWRlcGVuZHMgb24gT0YgJiYgU1BJCj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9wYW5lbC9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtlZmlsZQo+Pj4+ IGluZGV4IDRiMmEwNDMuLmQ1ZGJlMDYgMTAwNjQ0Cj4+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L3BhbmVsL01ha2VmaWxlCj4+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL01ha2VmaWxl Cj4+Pj4gQEAgLTEsNCArMSw1IEBACj4+Pj4gICAgb2JqLSQoQ09ORklHX0RSTV9QQU5FTF9TSU1Q TEUpICs9IHBhbmVsLXNpbXBsZS5vCj4+Pj4gK29iai0kKENPTkZJR19EUk1fUEFORUxfSElNQVhf SFg4MzY5QSkgKz0gcGFuZWwtaGltYXgtaHg4MzY5YS5vCj4+Pj4gICAgb2JqLSQoQ09ORklHX0RS TV9QQU5FTF9MRDkwNDApICs9IHBhbmVsLWxkOTA0MC5vCj4+Pj4gICAgb2JqLSQoQ09ORklHX0RS TV9QQU5FTF9TNkU4QUEwKSArPSBwYW5lbC1zNmU4YWEwLm8KPj4+PiAgICBvYmotJChDT05GSUdf RFJNX1BBTkVMX1NIQVJQX0xRMTAxUjFTWDAxKSArPSBwYW5lbC1zaGFycC1scTEwMXIxc3gwMS5v Cj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC1oaW1heC1oeDgz NjlhLmMgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwtaGltYXgtaHg4MzY5YS5jCj4+Pj4g bmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4+PiBpbmRleCAwMDAwMDAwLi5lZWUzNmE3Cj4+Pj4gLS0t IC9kZXYvbnVsbAo+Pj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC1oaW1heC1o eDgzNjlhLmMKPj4+PiBAQCAtMCwwICsxLDYxNCBAQAo+Pj4+ICsvKgo+Pj4+ICsgKiBIaW1heCBI WDgzNjlBIHBhbmVsIGRyaXZlci4KPj4+PiArICoKPj4+PiArICogQ29weXJpZ2h0IChDKSAyMDEx LTIwMTQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KPj4+PiArICoKPj4+PiArICogVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkKPj4+PiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKPj4+PiArICogcHVibGlzaGVkIGJ5IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24uCj4+Pj4gKyAqCj4+Pj4gKyAqIFRoaXMgZHJpdmVyIGlzIGJh c2VkIG9uIFNhbXN1bmcgczZlOGFhMCBwYW5lbCBkcml2ZXIuCj4+Pj4gKyAqLwo+Pj4+ICsKPj4+ PiArI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4+Pj4gKyNpbmNsdWRlIDxkcm0vZHJtX21pcGlfZHNp Lmg+Cj4+Pj4gKyNpbmNsdWRlIDxkcm0vZHJtX3BhbmVsLmg+Cj4+Pj4gKwo+Pj4+ICsjaW5jbHVk ZSA8bGludXgvZ3Bpby9jb25zdW1lci5oPgo+Pj4+ICsjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNl Lmg+Cj4+Pj4gKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KPj4+PiArCj4+ Pj4gKyNpbmNsdWRlIDx2aWRlby9taXBpX2Rpc3BsYXkuaD4KPj4+PiArI2luY2x1ZGUgPHZpZGVv L29mX3ZpZGVvbW9kZS5oPgo+Pj4+ICsjaW5jbHVkZSA8dmlkZW8vdmlkZW9tb2RlLmg+Cj4+Pj4g Kwo+Pj4+ICsjZGVmaW5lIFdSRElTQlYJCTB4NTEKPj4+PiArI2RlZmluZSBXUkNUUkxECQkweDUz Cj4+Pj4gKyNkZWZpbmUgV1JDQUJDCQkweDU1Cj4+Pj4gKyNkZWZpbmUgU0VUUE9XRVIJMHhiMQo+ Pj4+ICsjZGVmaW5lIFNFVERJU1AJCTB4YjIKPj4+PiArI2RlZmluZSBTRVRDWUMJCTB4YjQKPj4+ PiArI2RlZmluZSBTRVRWQ09NCQkweGI2Cj4+Pj4gKyNkZWZpbmUgU0VURVhUQwkJMHhiOQo+Pj4+ ICsjZGVmaW5lIFNFVE1JUEkJCTB4YmEKPj4+PiArI2RlZmluZSBTRVRQQU5FTAkweGNjCj4+Pj4g KyNkZWZpbmUgU0VUR0lQCQkweGQ1Cj4+Pj4gKyNkZWZpbmUgU0VUR0FNTUEJMHhlMAo+Pj4+ICsK Pj4+PiArI2RlZmluZSBIWDgzNjlBX01JTl9CUklHSFRORVNTCTB4MDAKPj4+PiArI2RlZmluZSBI WDgzNjlBX01BWF9CUklHSFRORVNTCTB4ZmYKPj4+PiArCj4+Pj4gK2VudW0gaHg4MzY5YV9tcHVf aW50ZXJmYWNlIHsKPj4+PiArCUhYODM2OUFfREJJX1RZUEVfQV84QklULAo+Pj4+ICsJSFg4MzY5 QV9EQklfVFlQRV9BXzlCSVQsCj4+Pj4gKwlIWDgzNjlBX0RCSV9UWVBFX0FfMTZCSVQsCj4+Pj4g KwlIWDgzNjlBX0RCSV9UWVBFX0FfMThCSVQsCj4+Pj4gKwlIWDgzNjlBX0RCSV9UWVBFX0JfOEJJ VCwKPj4+PiArCUhYODM2OUFfREJJX1RZUEVfQl85QklULAo+Pj4+ICsJSFg4MzY5QV9EQklfVFlQ RV9CXzE2QklULAo+Pj4+ICsJSFg4MzY5QV9EQklfVFlQRV9CXzE4QklULAo+Pj4+ICsJSFg4MzY5 QV9EU0lfQ01EX01PREUsCj4+Pj4gKwlIWDgzNjlBX0RCSV9UWVBFX0JfMjRCSVQsCj4+Pj4gKwlI WDgzNjlBX0RTSV9WSURFT19NT0RFLAo+Pj4+ICsJSFg4MzY5QV9NRERJLAo+Pj4+ICsJSFg4MzY5 QV9EUElfREJJX1RZUEVfQ19PUFQxLAo+Pj4+ICsJSFg4MzY5QV9EUElfREJJX1RZUEVfQ19PUFQy LAo+Pj4+ICsJSFg4MzY5QV9EUElfREJJX1RZUEVfQ19PUFQzCj4+Pj4gK307Cj4+Pj4gKwo+Pj4+ ICtlbnVtIGh4ODM2OWFfcmVzb2x1dGlvbiB7Cj4+Pj4gKwlIWDgzNjlBX1JFU180ODBfODY0LAo+ Pj4+ICsJSFg4MzY5QV9SRVNfNDgwXzg1NCwKPj4+PiArCUhYODM2OUFfUkVTXzQ4MF84MDAsCj4+ Pj4gKwlIWDgzNjlBX1JFU180ODBfNjQwLAo+Pj4+ICsJSFg4MzY5QV9SRVNfMzYwXzY0MCwKPj4+ PiArCUhYODM2OUFfUkVTXzQ4MF83MjAsCj4+Pj4gK307Cj4+Pj4gKwo+Pj4+ICtzdHJ1Y3QgaHg4 MzY5YV9wYW5lbF9kZXNjIHsKPj4+PiArCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpt b2RlOwo+Pj4+ICsKPj4+PiArCS8qIG1zICovCj4+Pj4gKwl1bnNpZ25lZCBpbnQgcG93ZXJfb25f ZGVsYXk7Cj4+Pj4gKwl1bnNpZ25lZCBpbnQgcmVzZXRfZGVsYXk7Cj4+Pj4gKwo+Pj4+ICsJdW5z aWduZWQgaW50IGRzaV9sYW5lczsKPj4+PiArfTsKPj4+PiArCj4+Pj4gK3N0cnVjdCBoeDgzNjlh IHsKPj4+PiArCXN0cnVjdCBkZXZpY2UgKmRldjsKPj4+PiArCXN0cnVjdCBkcm1fcGFuZWwgcGFu ZWw7Cj4+Pj4gKwo+Pj4+ICsJY29uc3Qgc3RydWN0IGh4ODM2OWFfcGFuZWxfZGVzYyAqcGQ7Cj4+ Pj4gKwo+Pj4+ICsJc3RydWN0IHJlZ3VsYXRvcl9idWxrX2RhdGEgc3VwcGxpZXNbNV07Cj4+Pj4g KwlzdHJ1Y3QgZ3Bpb19kZXNjICpyZXNldF9ncGlvOwo+Pj4+ICsJc3RydWN0IGdwaW9fZGVzYyAq YnNfZ3Bpb1s0XTsKPj4+PiArCXU4IHJlc19zZWw7Cj4+Pj4gK307Cj4+Pj4gKwo+Pj4+ICtzdGF0 aWMgaW5saW5lIHN0cnVjdCBoeDgzNjlhICpwYW5lbF90b19oeDgzNjlhKHN0cnVjdCBkcm1fcGFu ZWwgKnBhbmVsKQo+Pj4+ICt7Cj4+Pj4gKwlyZXR1cm4gY29udGFpbmVyX29mKHBhbmVsLCBzdHJ1 Y3QgaHg4MzY5YSwgcGFuZWwpOwo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMgaW50IGh4ODM2 OWFfZGNzX3dyaXRlKHN0cnVjdCBoeDgzNjlhICpjdHgsIGNvbnN0IGNoYXIgKmZ1bmMsCj4+Pj4g KwkJCSAgICAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbikKPj4+PiArewo+Pj4+ICsJc3Ry dWN0IG1pcGlfZHNpX2RldmljZSAqZHNpID0gdG9fbWlwaV9kc2lfZGV2aWNlKGN0eC0+ZGV2KTsK Pj4+PiArCXNzaXplX3QgcmV0Owo+Pj4+ICsKPj4+PiArCXJldCA9IG1pcGlfZHNpX2Rjc193cml0 ZV9idWZmZXIoZHNpLCBkYXRhLCBsZW4pOwo+Pj4+ICsJaWYgKHJldCA8IDApIHsKPj4+PiArCQlk ZXZfZXJyKGN0eC0+ZGV2LCAiJXMgZmFpbGVkOiAlZFxuIiwgZnVuYywgcmV0KTsKPj4+PiArCQly ZXR1cm4gcmV0Owo+Pj4+ICsJfQo+Pj4+ICsJcmV0dXJuIDA7Cj4+PiBOaXRwaWNrLiBZb3UgY2Fu IHJlcGxhY2UgNCBsaW5lcyBhYm92ZSB3aXRoOgo+Pj4gICAgICAgaWYgKHJldCA8IDApCj4+PiAg ICAgICAgICAgZGV2X2VycihjdHgtPmRldiwgIiVzIGZhaWxlZDogJWRcbiIsIGZ1bmMsIHJldCk7 Cj4+PiAgICAgICByZXR1cm4gcmV0Owo+PiBJJ2xsIGRvIHRoYXQuCj4+Cj4+Pj4gK30KPj4+PiAr Cj4+Pj4gKyNkZWZpbmUgaHg4MzY5YV9kY3Nfd3JpdGVfc2VxKGN0eCwgc2VxLi4uKSBcCj4+Pj4g Kyh7IFwKPj4+PiArCWNvbnN0IHU4IGRbXSA9IHsgc2VxIH07IFwKPj4+PiArCUJVSUxEX0JVR19P Tl9NU0coQVJSQVlfU0laRShkKSA+IDY0LCBcCj4+Pj4gKwkJCSAiRENTIHNlcXVlbmNlIHRvbyBi aWcgZm9yIHN0YWNrIik7IFwKPj4+PiArCWh4ODM2OWFfZGNzX3dyaXRlKGN0eCwgX19mdW5jX18s IGQsIEFSUkFZX1NJWkUoZCkpOyBcCj4+Pj4gK30pCj4+Pj4gKwo+Pj4+ICsjZGVmaW5lIGh4ODM2 OWFfZGNzX3dyaXRlX3NlcV9zdGF0aWMoY3R4LCBzZXEuLi4pIFwKPj4+PiArKHsgXAo+Pj4+ICsJ c3RhdGljIGNvbnN0IHU4IGRbXSA9IHsgc2VxIH07IFwKPj4+PiArCWh4ODM2OWFfZGNzX3dyaXRl KGN0eCwgX19mdW5jX18sIGQsIEFSUkFZX1NJWkUoZCkpOyBcCj4+Pj4gK30pCj4+Pj4gKwo+Pj4+ ICtzdGF0aWMgaW50IGh4ODM2OWFfZHNpX3NldF9kaXNwbGF5X3JlbGF0ZWRfcmVnaXN0ZXIoc3Ry dWN0IGh4ODM2OWEgKmN0eCkKPj4+PiArewo+Pj4+ICsJdTggc2VjX3AgPSAoY3R4LT5yZXNfc2Vs IDw8IDQpIHwgMHgwMzsKPj4+PiArCj4+Pj4gKwlyZXR1cm4gaHg4MzY5YV9kY3Nfd3JpdGVfc2Vx KGN0eCwgU0VURElTUCwgMHgwMCwgc2VjX3AsIDB4MDMsCj4+Pj4gKwkJCSAgIDB4MDMsIDB4NzAs IDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsCj4+Pj4gKwkJCSAgIDB4MDAsIDB4MDMsIDB4 MDMsIDB4MDAsIDB4MDEpOwo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMgaW50IGh4ODM2OWFf ZHNpX3NldF9kaXNwbGF5X3dhdmVmb3JtX2N5Y2xlKHN0cnVjdCBoeDgzNjlhICpjdHgpCj4+Pj4g K3sKPj4+PiArCXJldHVybiBoeDgzNjlhX2Rjc193cml0ZV9zZXFfc3RhdGljKGN0eCwgU0VUQ1lD LCAweDAwLCAweDFkLAo+Pj4+ICsJCQkJCTB4NWYsIDB4MGUsIDB4MDYpOwo+Pj4+ICt9Cj4+Pj4g Kwo+Pj4+ICtzdGF0aWMgaW50IGh4ODM2OWFfZHNpX3NldF9naXAoc3RydWN0IGh4ODM2OWEgKmN0 eCkKPj4+PiArewo+Pj4+ICsJcmV0dXJuIGh4ODM2OWFfZGNzX3dyaXRlX3NlcV9zdGF0aWMoY3R4 LCBTRVRHSVAsIDB4MDAsIDB4MDQsCj4+Pj4gKwkJCQkgMHgwMywgMHgwMCwgMHgwMSwgMHgwNSwg MHgxYywgMHg3MCwKPj4+PiArCQkJCSAweDAxLCAweDAzLCAweDAwLCAweDAwLCAweDQwLCAweDA2 LAo+Pj4+ICsJCQkJIDB4NTEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDYsCj4+Pj4gKwkJ CQkgMHg1MCwgMHgwNywgMHgwNywgMHgwZiwgMHgwNCk7Cj4+Pj4gK30KPj4+PiArCj4+Pj4gK3N0 YXRpYyBpbnQgaHg4MzY5YV9kc2lfc2V0X3Bvd2VyKHN0cnVjdCBoeDgzNjlhICpjdHgpCj4+Pj4g K3sKPj4+PiArCXJldHVybiBoeDgzNjlhX2Rjc193cml0ZV9zZXFfc3RhdGljKGN0eCwgU0VUUE9X RVIsIDB4MDEsIDB4MDAsCj4+Pj4gKwkJCQkgICAweDM0LCAweDA2LCAweDAwLCAweDBmLCAweDBm LCAweDJhLAo+Pj4+ICsJCQkJICAgMHgzMiwgMHgzZiwgMHgzZiwgMHgwNywgMHgzYSwgMHgwMSwK Pj4+PiArCQkJCSAgIDB4ZTYsIDB4ZTYsIDB4ZTYsIDB4ZTYsIDB4ZTYpOwo+Pj4+ICt9Cj4+Pj4g Kwo+Pj4+ICtzdGF0aWMgaW50IGh4ODM2OWFfZHNpX3NldF92Y29tX3ZvbHRhZ2Uoc3RydWN0IGh4 ODM2OWEgKmN0eCkKPj4+PiArewo+Pj4+ICsJcmV0dXJuIGh4ODM2OWFfZGNzX3dyaXRlX3NlcV9z dGF0aWMoY3R4LCBTRVRWQ09NLCAweDU2LCAweDU2KTsKPj4+PiArfQo+Pj4+ICsKPj4+PiArc3Rh dGljIGludCBoeDgzNjlhX2RzaV9zZXRfcGFuZWwoc3RydWN0IGh4ODM2OWEgKmN0eCkKPj4+PiAr ewo+Pj4+ICsJcmV0dXJuIGh4ODM2OWFfZGNzX3dyaXRlX3NlcV9zdGF0aWMoY3R4LCBTRVRQQU5F TCwgMHgwMik7Cj4+Pj4gK30KPj4+PiArCj4+Pj4gK3N0YXRpYyBpbnQgaHg4MzY5YV9kc2lfc2V0 X2dhbW1hX2N1cnZlKHN0cnVjdCBoeDgzNjlhICpjdHgpCj4+Pj4gK3sKPj4+PiArCXJldHVybiBo eDgzNjlhX2Rjc193cml0ZV9zZXFfc3RhdGljKGN0eCwgU0VUR0FNTUEsIDB4MDAsIDB4MWQsCj4+ Pj4gKwkJCQkgICAweDIyLCAweDM4LCAweDNkLCAweDNmLCAweDJlLCAweDRhLAo+Pj4+ICsJCQkJ ICAgMHgwNiwgMHgwZCwgMHgwZiwgMHgxMywgMHgxNSwgMHgxMywKPj4+PiArCQkJCSAgIDB4MTYs IDB4MTAsIDB4MTksIDB4MDAsIDB4MWQsIDB4MjIsCj4+Pj4gKwkJCQkgICAweDM4LCAweDNkLCAw eDNmLCAweDJlLCAweDRhLCAweDA2LAo+Pj4+ICsJCQkJICAgMHgwZCwgMHgwZiwgMHgxMywgMHgx NSwgMHgxMywgMHgxNiwKPj4+PiArCQkJCSAgIDB4MTAsIDB4MTkpOwo+Pj4+ICt9Cj4+Pj4gKwo+ Pj4+ICtzdGF0aWMgaW50IGh4ODM2OWFfZHNpX3NldF9taXBpKHN0cnVjdCBoeDgzNjlhICpjdHgp Cj4+Pj4gK3sKPj4+PiArCXU4IGVsZXZlbnRoX3AgPSBjdHgtPnBkLT5kc2lfbGFuZXMgPT0gMiA/ IDB4MTEgOiAweDEwOwo+Pj4+ICsKPj4+PiArCXJldHVybiBoeDgzNjlhX2Rjc193cml0ZV9zZXEo Y3R4LCBTRVRNSVBJLCAweDAwLCAweGEwLCAweGM2LAo+Pj4+ICsJCQkJIDB4MDAsIDB4MGEsIDB4 MDAsIDB4MTAsIDB4MzAsIDB4NmYsCj4+Pj4gKwkJCQkgMHgwMiwgZWxldmVudGhfcCwgMHgxOCwg MHg0MCk7Cj4+Pj4gK30KPj4+PiArCj4+Pj4gK3N0YXRpYyBpbnQgaHg4MzY5YV9kc2lfc2V0X2lu dGVyZmFjZV9waXhlbF9mb21hdChzdHJ1Y3QgaHg4MzY5YSAqY3R4KQo+Pj4+ICt7Cj4+Pj4gKwlz dHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2kgPSB0b19taXBpX2RzaV9kZXZpY2UoY3R4LT5kZXYp Owo+Pj4+ICsJdTggZm9ybWF0Owo+Pj4+ICsJaW50IHJldDsKPj4+PiArCj4+Pj4gKwlzd2l0Y2gg KGRzaS0+Zm9ybWF0KSB7Cj4+Pj4gKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I4ODg6Cj4+Pj4gKwlj YXNlIE1JUElfRFNJX0ZNVF9SR0I2NjY6Cj4+Pj4gKwkJZm9ybWF0ID0gMHg3NzsKPj4+PiArCQli cmVhazsKPj4+PiArCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjU2NToKPj4+PiArCQlmb3JtYXQgPSAw eDU1Owo+Pj4+ICsJCWJyZWFrOwo+Pj4+ICsJY2FzZSBNSVBJX0RTSV9GTVRfUkdCNjY2X1BBQ0tF RDoKPj4+PiArCQlmb3JtYXQgPSAweDY2Owo+Pj4+ICsJCWJyZWFrOwo+Pj4+ICsJZGVmYXVsdDoK Pj4+PiArCQlkZXZfZXJyKGN0eC0+ZGV2LCAidW5zdXBwb3J0ZWQgRFNJIHBpeGVsIGZvcm1hdFxu Iik7Cj4+Pj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+Pj4gKwl9Cj4+Pj4gKwo+Pj4+ICsJcmV0ID0g bWlwaV9kc2lfZGNzX3NldF9waXhlbF9mb3JtYXQoZHNpLCBmb3JtYXQpOwo+Pj4+ICsJaWYgKHJl dCA8IDApCj4+Pj4gKwkJZGV2X2VycihjdHgtPmRldiwgIiVzIGZhaWxlZDogJWRcbiIsIF9fZnVu Y19fLCByZXQpOwo+Pj4+ICsJcmV0dXJuIHJldDsKPj4+PiArfQo+Pj4gVGhpcyBmdW5jdGlvbnMg Y291bGQgYmUgYWxzbyBEU0kgaGVscGVyLCBpdCBpcyBub3Qgc3BlY2lmaWMgdG8gdGhpcyBwYW5l bCwKPj4+IGJ1dCBpdCBpcyBqdXN0IGEgc3VnZ2VzdGlvbi4KPj4gQW55IGRvY3VtZW50YXRpb24g Y2FuIHJlZmxlY3QgdGhpcyBjb3VsZCBiZSBhIGNvbW1vbiBEU0kgaGVscGVyLAo+PiBtYXliZSB0 aGUgTUlQSSBEU0kgc3BlYz8KPj4gSSB3cm90ZSB0aGlzIGZ1bmN0aW9uIGJ5IHRha2luZyB0aGUg SFg4MzY5QSBwYW5lbCBkYXRhIHNoZWV0IGFzIGEKPj4gcmVmZXJlbmNlLgo+Cj4gTUlQSSBEU0kg c3BlY2lmaWNhdGlvbiBkZXNjcmliZXMgTUlQSV9EU0lfRk1UXyogdmFsdWVzIGFuZAo+IE1JUEkg RENTIHNwZWNpZmljYXRpb24gZGVzY3JpYmVzICdmb3JtYXQnIHZhbHVlcyAoaWUuIDB4NzcsIDB4 NTUsIDB4NjYpLgo+IEZvciByZWZlcmVuY2UgcGxlYXNlIGxvb2sgZm9yIHBocmFzZSAiVGFibGUg NiBJbnRlcmZhY2UgUGl4ZWwgRm9ybWF0cyIgaW4KPiBNSVBJIERDUyBzcGVjaWZpY2F0aW9uIChv ciBpbiBnb29nbGUgOikgKS4KCk5vdywgSSBmaW5kIHRoZSB0YWJsZSA2IHlvdSBtZW50aW9uZWQu CkkgY2FsbGVkIHRoZSBjb21tb24gRFNJIGhlbHBlciBtaXBpX2RzaV9kY3Nfc2V0X3BpeGVsX2Zv cm1hdCgpIHRvIHNldAp0aGUgZm9ybWF0LiAgSXQgc2VlbXMgdGhhdCB0aGUgaGVscGVyIGdpdmVz IHNwZWNpZmljIGRyaXZlcnMgdGhlCmZsZXhpYmlsaXR5IHRvIHByb3ZpZGUgdGhlIHBhcmFtZXRl ciAnZm9ybWF0JyBhbmQgdGhpcyBkcml2ZXIgdXNlcyB0aGUKZmxleGliaWxpdHkgdG8gc2V0IHRo ZSBwYXJhbWV0ZXIgdG8gYmUgMHg3Ny8weDY2LzB4NTUuCkkgc2VlIHRoZSBTaGFycCBscTEwMXIx c3gwMSBwYW5lbCBkcml2ZXIgY2FsbHMgdGhlIGhlbHBlciBhcyB3ZWxsLgpJdCBzZXRzIHRoZSBw YXJhbWV0ZXIgJ2Zvcm1hdCcgdG8gYmUgTUlQSV9EU0lfUElYRUxfRk1UXzI0QklUIHdoaWNoIGlz CmRlZmluZWQgYXMgMHg3LgpJIHRoaW5rIHRoZSBTaGFycCBwYW5lbCBzdXBwb3J0cyB0aGUgREJJ IGludGVyZmFjZSBvbmx5LCBwZXJoYXBzLgpUaGUgSGltYXggSFg5MzY5QSBwYW5lbCBzdXBwb3J0 cyBib3RoIHRoZSBEUEkgYW5kIHRoZSBEQkkgaW50ZXJmYWNlcywKdGh1cywgdGhpcyBkcml2ZXIg c2V0cyBEWzY6NF0gYW5kIERbMjowXSB0byBiZSAweDcgLSBmaW5hbGx5IDB4NzcuCgpTbywgYmFz aWNhbGx5LCBJIHByZWZlciBub3QgdG8gYWRkIGFub3RoZXIgRFNJIGhlbHBlciB0byBzZXQgdGhl IHBpeGVsCmZvcm1hdCBpbiB0aGlzIHBhdGNoIHNldC4gIFRoYW5rcyBmb3IgeW91ciBzdWdnZXN0 aW9uIGFueXdheS4KCj4KPj4KPj4+PiArCj4+Pj4gK3N0YXRpYyBpbnQgaHg4MzY5YV9kc2lfc2V0 X2NvbHVtbl9hZGRyZXNzKHN0cnVjdCBoeDgzNjlhICpjdHgpCj4+Pj4gK3sKPj4+PiArCXN0cnVj dCBtaXBpX2RzaV9kZXZpY2UgKmRzaSA9IHRvX21pcGlfZHNpX2RldmljZShjdHgtPmRldik7Cj4+ Pj4gKwljb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9IGN0eC0+cGQtPm1vZGU7 Cj4+Pj4gKwlpbnQgcmV0Owo+Pj4+ICsKPj4+PiArCXJldCA9IG1pcGlfZHNpX2Rjc19zZXRfY29s dW1uX2FkZHJlc3MoZHNpLCAwLCBtb2RlLT5oZGlzcGxheSAtIDEpOwo+Pj4+ICsJaWYgKHJldCA8 IDApCj4+Pj4gKwkJZGV2X2VycihjdHgtPmRldiwgIiVzIGZhaWxlZDogJWRcbiIsIF9fZnVuY19f LCByZXQpOwo+Pj4+ICsJcmV0dXJuIHJldDsKPj4+PiArfQo+Pj4+ICsKPj4+PiArc3RhdGljIGlu dCBoeDgzNjlhX2RzaV9zZXRfcGFnZV9hZGRyZXNzKHN0cnVjdCBoeDgzNjlhICpjdHgpCj4+Pj4g K3sKPj4+PiArCXN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaSA9IHRvX21pcGlfZHNpX2Rldmlj ZShjdHgtPmRldik7Cj4+Pj4gKwljb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9 IGN0eC0+cGQtPm1vZGU7Cj4+Pj4gKwlpbnQgcmV0Owo+Pj4+ICsKPj4+PiArCXJldCA9IG1pcGlf ZHNpX2Rjc19zZXRfcGFnZV9hZGRyZXNzKGRzaSwgMCwgbW9kZS0+dmRpc3BsYXkgLSAxKTsKPj4+ PiArCWlmIChyZXQgPCAwKQo+Pj4+ICsJCWRldl9lcnIoY3R4LT5kZXYsICIlcyBmYWlsZWQ6ICVk XG4iLCBfX2Z1bmNfXywgcmV0KTsKPj4+PiArCXJldHVybiByZXQ7Cj4+Pj4gK30KPj4+PiArCj4+ Pj4gK3N0YXRpYyBpbnQgaHg4MzY5YV9kc2lfd3JpdGVfZGlzcGxheV9icmlnaHRuZXNzKHN0cnVj dCBoeDgzNjlhICpjdHgsCj4+Pj4gKwkJCQkJCXU4IGJyaWdodG5lc3MpCj4+Pj4gK3sKPj4+PiAr CXJldHVybiBoeDgzNjlhX2Rjc193cml0ZV9zZXEoY3R4LCBXUkRJU0JWLCBicmlnaHRuZXNzKTsK Pj4+PiArfQo+Pj4+ICsKPj4+PiArc3RhdGljIGludCBoeDgzNjlhX2RzaV93cml0ZV9jYWJjKHN0 cnVjdCBoeDgzNjlhICpjdHgpCj4+Pj4gK3sKPj4+PiArCXJldHVybiBoeDgzNjlhX2Rjc193cml0 ZV9zZXFfc3RhdGljKGN0eCwgV1JDQUJDLCAweDAxKTsKPj4+PiArfQo+Pj4+ICsKPj4+PiArc3Rh dGljIGludCBoeDgzNjlhX2RzaV93cml0ZV9jb250cm9sX2Rpc3BsYXkoc3RydWN0IGh4ODM2OWEg KmN0eCkKPj4+PiArewo+Pj4+ICsJcmV0dXJuIGh4ODM2OWFfZGNzX3dyaXRlX3NlcV9zdGF0aWMo Y3R4LCBXUkNUUkxELCAweDI0KTsKPj4+PiArfQo+Pj4+ICsKPj4+PiArI2RlZmluZSBoeDgzNjlh X2RzaV9pbml0X2hlbHBlcihjdHgsIHJldCwgbmFtZSkgXAo+Pj4+ICsoeyBcCj4+Pj4gKwlyZXQg PSBoeDgzNjlhX2RzaV8jI25hbWUoY3R4KTsgXAo+Pj4+ICsJaWYgKHJldCA8IDApIFwKPj4+PiAr CQlyZXR1cm4gcmV0OyBcCj4+Pj4gK30pCj4+PiBZZWFoLCBhbm90aGVyIGhhY2sgdG8gZ2V0IHJp ZCBvZiByZWR1bmRhbnQgY29kZSA6KQo+Pj4gVHdvIHVnbHkgdGhpbmdzIGhlcmU6ICMjIGFuZCBy ZXR1cm4gZnJvbSBtYWNyby4KPj4+Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMgaW50IGh4ODM2OWFfZHNp X3BhbmVsX2luaXQoc3RydWN0IGh4ODM2OWEgKmN0eCkKPj4+PiArewo+Pj4+ICsJaW50IHJldDsK Pj4+PiArCj4+Pj4gKwloeDgzNjlhX2RzaV9pbml0X2hlbHBlcihjdHgsIHJldCwgc2V0X2Rpc3Bs YXlfcmVsYXRlZF9yZWdpc3Rlcik7Cj4+Pj4gKwloeDgzNjlhX2RzaV9pbml0X2hlbHBlcihjdHgs IHJldCwgc2V0X2Rpc3BsYXlfd2F2ZWZvcm1fY3ljbGUpOwo+Pj4+ICsJaHg4MzY5YV9kc2lfaW5p dF9oZWxwZXIoY3R4LCByZXQsIHNldF9naXApOwo+Pj4+ICsJaHg4MzY5YV9kc2lfaW5pdF9oZWxw ZXIoY3R4LCByZXQsIHNldF9wb3dlcik7Cj4+Pj4gKwloeDgzNjlhX2RzaV9pbml0X2hlbHBlcihj dHgsIHJldCwgc2V0X3Zjb21fdm9sdGFnZSk7Cj4+Pj4gKwloeDgzNjlhX2RzaV9pbml0X2hlbHBl cihjdHgsIHJldCwgc2V0X3BhbmVsKTsKPj4+PiArCWh4ODM2OWFfZHNpX2luaXRfaGVscGVyKGN0 eCwgcmV0LCBzZXRfZ2FtbWFfY3VydmUpOwo+Pj4+ICsJaHg4MzY5YV9kc2lfaW5pdF9oZWxwZXIo Y3R4LCByZXQsIHNldF9taXBpKTsKPj4+PiArCWh4ODM2OWFfZHNpX2luaXRfaGVscGVyKGN0eCwg cmV0LCBzZXRfaW50ZXJmYWNlX3BpeGVsX2ZvbWF0KTsKPj4+PiArCWh4ODM2OWFfZHNpX2luaXRf aGVscGVyKGN0eCwgcmV0LCBzZXRfY29sdW1uX2FkZHJlc3MpOwo+Pj4+ICsJaHg4MzY5YV9kc2lf aW5pdF9oZWxwZXIoY3R4LCByZXQsIHNldF9wYWdlX2FkZHJlc3MpOwo+Pj4+ICsJaHg4MzY5YV9k c2lfaW5pdF9oZWxwZXIoY3R4LCByZXQsIHdyaXRlX2NhYmMpOwo+Pj4+ICsJaHg4MzY5YV9kc2lf aW5pdF9oZWxwZXIoY3R4LCByZXQsIHdyaXRlX2NvbnRyb2xfZGlzcGxheSk7Cj4+PiBNYXliZSBp dCB3b3VsZCBiZSBiZXR0ZXIgdG8gcmVwbGFjZSB0aGUgaGFjayBhYm92ZSB3aXRoIHNvbWV0aGlu ZyBsaWtlOgo+Pj4gewo+Pj4gICAgICAgaW50ICgqKShzdHJ1Y3QgaHg4MzY5YSAqY3R4KSBmdW5j c1tdID0gewo+Pj4gICAgICAgICAgIGh4ODM2OWFfZHNpX3NldF9kaXNwbGF5X3JlbGF0ZWRfcmVn aXN0ZXIsCj4+PiAgICAgICAgICAgaHg4MzY5YV9kc2lfc2V0X2Rpc3BsYXlfd2F2ZWZvcm1fY3lj bGUsCj4+PiAgICAgICAgICAgLi4uCj4+PiAgICAgICAgfTsKPj4+ICAgICAgIGludCByZXQsIGk7 Cj4+Pgo+Pj4gICAgICAgZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZnVuY3MpOyArK2kpIHsK Pj4+ICAgICAgICAgICByZXQgPSBmdW5jc1tpXShjdHgpOwo+Pj4gICAgICAgICAgIGlmIChyZXQp Cj4+PiAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4+PiAgICAgICB9Cj4+IEknbGwgY2hhbmdl IHRvIHVzZSB0aGlzLiAgVGhhbmtzLgo+Pgo+Pj4+ICsKPj4+PiArCXJldHVybiAwOwo+Pj4+ICt9 Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMgaW50IGh4ODM2OWFfZHNpX3NldF9leHRlbnNpb25fY29tbWFu ZChzdHJ1Y3QgaHg4MzY5YSAqY3R4KQo+Pj4+ICt7Cj4+Pj4gKwlyZXR1cm4gaHg4MzY5YV9kY3Nf d3JpdGVfc2VxX3N0YXRpYyhjdHgsIFNFVEVYVEMsIDB4ZmYsIDB4ODMsIDB4NjkpOwo+Pj4+ICt9 Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMgaW50IGh4ODM2OWFfZHNpX3NldF9tYXhpbXVtX3JldHVybl9w YWNrZXRfc2l6ZShzdHJ1Y3QgaHg4MzY5YSAqY3R4LAo+Pj4+ICsJCQkJCQkgICAgICB1MTYgc2l6 ZSkKPj4+PiArewo+Pj4+ICsJc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpID0gdG9fbWlwaV9k c2lfZGV2aWNlKGN0eC0+ZGV2KTsKPj4+PiArCWludCByZXQ7Cj4+Pj4gKwo+Pj4+ICsJcmV0ID0g bWlwaV9kc2lfc2V0X21heGltdW1fcmV0dXJuX3BhY2tldF9zaXplKGRzaSwgc2l6ZSk7Cj4+Pj4g KwlpZiAocmV0IDwgMCkKPj4+PiArCQlkZXZfZXJyKGN0eC0+ZGV2LAo+Pj4+ICsJCQkiZXJyb3Ig JWQgc2V0dGluZyBtYXhpbXVtIHJldHVybiBwYWNrZXQgc2l6ZSB0byAlZFxuIiwKPj4+PiArCQkJ cmV0LCBzaXplKTsKPj4+PiArCXJldHVybiByZXQ7Cj4+Pj4gK30KPj4+PiArCj4+Pj4gK3N0YXRp YyBpbnQgaHg4MzY5YV9kc2lfc2V0X3NlcXVlbmNlKHN0cnVjdCBoeDgzNjlhICpjdHgpCj4+Pj4g K3sKPj4+PiArCXN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaSA9IHRvX21pcGlfZHNpX2Rldmlj ZShjdHgtPmRldik7Cj4+Pj4gKwlpbnQgcmV0Owo+Pj4+ICsKPj4+PiArCXJldCA9IGh4ODM2OWFf ZHNpX3NldF9leHRlbnNpb25fY29tbWFuZChjdHgpOwo+Pj4+ICsJaWYgKHJldCA8IDApCj4+Pj4g KwkJZ290byBvdXQ7Cj4+Pj4gKwo+Pj4+ICsJcmV0ID0gaHg4MzY5YV9kc2lfc2V0X21heGltdW1f cmV0dXJuX3BhY2tldF9zaXplKGN0eCwgNCk7Cj4+Pj4gKwlpZiAocmV0IDwgMCkKPj4+PiArCQln b3RvIG91dDsKPj4+PiArCj4+Pj4gKwlyZXQgPSBoeDgzNjlhX2RzaV9wYW5lbF9pbml0KGN0eCk7 Cj4+Pj4gKwlpZiAocmV0IDwgMCkKPj4+PiArCQlnb3RvIG91dDsKPj4+PiArCj4+Pj4gKwlyZXQg PSBtaXBpX2RzaV9kY3NfZXhpdF9zbGVlcF9tb2RlKGRzaSk7Cj4+Pj4gKwlpZiAocmV0IDwgMCkg ewo+Pj4+ICsJCWRldl9lcnIoY3R4LT5kZXYsICJmYWlsZWQgdG8gZXhpdCBzbGVlcCBtb2RlOiAl ZFxuIiwgcmV0KTsKPj4+PiArCQlnb3RvIG91dDsKPj4+PiArCX0KPj4+PiArCj4+Pj4gKwlyZXQg PSBtaXBpX2RzaV9kY3Nfc2V0X2Rpc3BsYXlfb24oZHNpKTsKPj4+PiArCWlmIChyZXQgPCAwKSB7 Cj4+Pj4gKwkJZGV2X2VycihjdHgtPmRldiwgImZhaWxlZCB0byBzZXQgZGlzcGxheSBvbjogJWRc biIsIHJldCk7Cj4+Pj4gKwkJZ290byBvdXQ7Cj4+Pj4gKwl9Cj4+Pj4gKwo+Pj4+ICsJLyoKPj4+ PiArCSAqIEl0J3MgbmVjZXNzYXJ5IHRvIHdhaXQgMTIwbXNlYyBhZnRlciBzZW5kaW5nIHRoZSBT bGVlcCBPdXQKPj4+PiArCSAqIGNvbW1hbmQgYmVmb3JlIFNsZWVwIEluIGNvbW1hbmQgY2FuIGJl IHNlbnQsIGFjY29yZGluZyB0bwo+Pj4+ICsJICogdGhlIEhYODM2OUEgZGF0YSBzaGVldC4KPj4+ PiArCSAqLwo+Pj4+ICsJbXNsZWVwKDEyMCk7Cj4+Pj4gK291dDoKPj4+PiArCXJldHVybiByZXQ7 Cj4+Pj4gK30KPj4+PiArCj4+Pj4gK3N0YXRpYyBpbnQgaHg4MzY5YV9kc2lfZGlzYWJsZShzdHJ1 Y3QgZHJtX3BhbmVsICpwYW5lbCkKPj4+PiArewo+Pj4+ICsJc3RydWN0IGh4ODM2OWEgKmN0eCA9 IHBhbmVsX3RvX2h4ODM2OWEocGFuZWwpOwo+Pj4+ICsKPj4+PiArCXJldHVybiBoeDgzNjlhX2Rz aV93cml0ZV9kaXNwbGF5X2JyaWdodG5lc3MoY3R4LAo+Pj4+ICsJCQkJCQlIWDgzNjlBX01JTl9C UklHSFRORVNTKTsKPj4+PiArfQo+Pj4+ICsKPj4+PiArc3RhdGljIGludCBoeDgzNjlhX2RzaV91 bnByZXBhcmUoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCj4+Pj4gK3sKPj4+PiArCXN0cnVjdCBo eDgzNjlhICpjdHggPSBwYW5lbF90b19oeDgzNjlhKHBhbmVsKTsKPj4+PiArCXN0cnVjdCBtaXBp X2RzaV9kZXZpY2UgKmRzaSA9IHRvX21pcGlfZHNpX2RldmljZShjdHgtPmRldik7Cj4+Pj4gKwlp bnQgcmV0Owo+Pj4+ICsKPj4+PiArCXJldCA9IG1pcGlfZHNpX2Rjc19lbnRlcl9zbGVlcF9tb2Rl KGRzaSk7Cj4+Pj4gKwlpZiAocmV0IDwgMCkgewo+Pj4+ICsJCWRldl9lcnIoY3R4LT5kZXYsICJm YWlsZWQgdG8gZW50ZXIgc2xlZXAgbW9kZTogJWRcbiIsIHJldCk7Cj4+Pj4gKwkJZ290byBvdXQ7 Cj4+Pj4gKwl9Cj4+Pj4gKwo+Pj4+ICsJcmV0ID0gbWlwaV9kc2lfZGNzX3NldF9kaXNwbGF5X29m Zihkc2kpOwo+Pj4+ICsJaWYgKHJldCA8IDApIHsKPj4+PiArCQlkZXZfZXJyKGN0eC0+ZGV2LCAi ZmFpbGVkIHRvIHNldCBkaXNwbGF5IG9mZjogJWRcbiIsIHJldCk7Cj4+Pj4gKwkJZ290byBvdXQ7 Cj4+Pj4gKwl9Cj4+Pj4gKwo+Pj4+ICsJLyoKPj4+PiArCSAqIFRoaXMgaXMgdG8gYWxsb3cgdGlt ZSBmb3IgdGhlIHN1cHBseSB2b2x0YWdlcyBhbmQgY2xvY2sKPj4+PiArCSAqIGNpcmN1aXRzIHRv IHN0YWJsaXplLCBhY2NvcmRpbmcgdG8gdGhlIEhYODM2OUEgZGF0YSBzaGVldC4KPj4+PiArCSAq Lwo+Pj4+ICsJbXNsZWVwKDUpOwo+Pj4+ICtvdXQ6Cj4+Pj4gKwlyZXR1cm4gcmV0Owo+Pj4+ICt9 Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMgaW50IGh4ODM2OWFfZHNpX3ByZXBhcmUoc3RydWN0IGRybV9w YW5lbCAqcGFuZWwpCj4+Pj4gK3sKPj4+PiArCXN0cnVjdCBoeDgzNjlhICpjdHggPSBwYW5lbF90 b19oeDgzNjlhKHBhbmVsKTsKPj4+PiArCj4+Pj4gKwlyZXR1cm4gaHg4MzY5YV9kc2lfc2V0X3Nl cXVlbmNlKGN0eCk7Cj4+Pj4gK30KPj4+PiArCj4+Pj4gK3N0YXRpYyBpbnQgaHg4MzY5YV9kc2lf ZW5hYmxlKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQo+Pj4+ICt7Cj4+Pj4gKwlzdHJ1Y3QgaHg4 MzY5YSAqY3R4ID0gcGFuZWxfdG9faHg4MzY5YShwYW5lbCk7Cj4+Pj4gKwo+Pj4+ICsJcmV0dXJu IGh4ODM2OWFfZHNpX3dyaXRlX2Rpc3BsYXlfYnJpZ2h0bmVzcyhjdHgsCj4+Pj4gKwkJCQkJCUhY ODM2OUFfTUFYX0JSSUdIVE5FU1MpOwo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMgaW50IGh4 ODM2OWFfZ2V0X21vZGVzKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQo+Pj4+ICt7Cj4+Pj4gKwlz dHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yID0gcGFuZWwtPmNvbm5lY3RvcjsKPj4+PiAr CXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBwYW5lbC0+ZHJtOwo+Pj4+ICsJc3RydWN0IGh4ODM2 OWEgKmN0eCA9IHBhbmVsX3RvX2h4ODM2OWEocGFuZWwpOwo+Pj4+ICsJc3RydWN0IGRybV9kaXNw bGF5X21vZGUgKm1vZGU7Cj4+Pj4gKwljb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbSA9 IGN0eC0+cGQtPm1vZGU7Cj4+Pj4gKwo+Pj4+ICsJbW9kZSA9IGRybV9tb2RlX2R1cGxpY2F0ZShk cm0sIG0pOwo+Pj4+ICsJaWYgKCFtb2RlKSB7Cj4+Pj4gKwkJZGV2X2Vycihkcm0tPmRldiwgImZh aWxlZCB0byBhZGQgbW9kZSAldXgldUAldVxuIiwKPj4+PiArCQkJbS0+aGRpc3BsYXksIG0tPnZk aXNwbGF5LCBtLT52cmVmcmVzaCk7Cj4+Pj4gKwkJcmV0dXJuIDA7Cj4+Pj4gKwl9Cj4+Pj4gKwo+ Pj4+ICsJZHJtX21vZGVfc2V0X25hbWUobW9kZSk7Cj4+Pj4gKwltb2RlLT50eXBlID0gRFJNX01P REVfVFlQRV9EUklWRVIgfCBEUk1fTU9ERV9UWVBFX1BSRUZFUlJFRDsKPj4+PiArCj4+Pj4gKwlj b25uZWN0b3ItPmRpc3BsYXlfaW5mby5icGMgPSA4Owo+Pj4+ICsJY29ubmVjdG9yLT5kaXNwbGF5 X2luZm8ud2lkdGhfbW0gPSBtb2RlLT53aWR0aF9tbTsKPj4+PiArCWNvbm5lY3Rvci0+ZGlzcGxh eV9pbmZvLmhlaWdodF9tbSA9IG1vZGUtPmhlaWdodF9tbTsKPj4+PiArCj4+Pj4gKwlkcm1fbW9k ZV9wcm9iZWRfYWRkKGNvbm5lY3RvciwgbW9kZSk7Cj4+Pj4gKwo+Pj4+ICsJcmV0dXJuIDE7Cj4+ Pj4gK30KPj4+PiArCj4+Pj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BhbmVsX2Z1bmNzIGh4 ODM2OWFfZHNpX2RybV9mdW5jcyA9IHsKPj4+PiArCS5kaXNhYmxlID0gaHg4MzY5YV9kc2lfZGlz YWJsZSwKPj4+PiArCS51bnByZXBhcmUgPSBoeDgzNjlhX2RzaV91bnByZXBhcmUsCj4+Pj4gKwku cHJlcGFyZSA9IGh4ODM2OWFfZHNpX3ByZXBhcmUsCj4+Pj4gKwkuZW5hYmxlID0gaHg4MzY5YV9k c2lfZW5hYmxlLAo+Pj4+ICsJLmdldF9tb2RlcyA9IGh4ODM2OWFfZ2V0X21vZGVzLAo+Pj4+ICt9 Owo+Pj4+ICsKPj4+PiArc3RhdGljIGludCBoeDgzNjlhX3Bvd2VyX29uKHN0cnVjdCBoeDgzNjlh ICpjdHgpCj4+Pj4gK3sKPj4+PiArCWludCByZXQ7Cj4+Pj4gKwo+Pj4+ICsJcmV0ID0gcmVndWxh dG9yX2J1bGtfZW5hYmxlKEFSUkFZX1NJWkUoY3R4LT5zdXBwbGllcyksIGN0eC0+c3VwcGxpZXMp Owo+Pj4+ICsJaWYgKHJldCA8IDApCj4+Pj4gKwkJcmV0dXJuIHJldDsKPj4+PiArCj4+Pj4gKwlt c2xlZXAoY3R4LT5wZC0+cG93ZXJfb25fZGVsYXkpOwo+Pj4+ICsKPj4+PiArCWdwaW9kX3NldF92 YWx1ZShjdHgtPnJlc2V0X2dwaW8sIDEpOwo+Pj4+ICsJdXNsZWVwX3JhbmdlKDUwLCA2MCk7Cj4+ Pj4gKwlncGlvZF9zZXRfdmFsdWUoY3R4LT5yZXNldF9ncGlvLCAwKTsKPj4+PiArCj4+Pj4gKwlt c2xlZXAoY3R4LT5wZC0+cmVzZXRfZGVsYXkpOwo+Pj4+ICsKPj4+PiArCXJldHVybiAwOwo+Pj4+ ICt9Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMgaW50IGh4ODM2OWFfcG93ZXJfb2ZmKHN0cnVjdCBoeDgz NjlhICpjdHgpCj4+Pj4gK3sKPj4+PiArCXJldHVybiByZWd1bGF0b3JfYnVsa19kaXNhYmxlKEFS UkFZX1NJWkUoY3R4LT5zdXBwbGllcyksCj4+Pj4gKwkJCQkgICAgICBjdHgtPnN1cHBsaWVzKTsK Pj4+PiArfQo+Pj4+ICsKPj4+PiArc3RhdGljIHZvaWQgaHg4MzY5YV92bV90b19yZXNfc2VsKHN0 cnVjdCBoeDgzNjlhICpjdHgpCj4+Pj4gK3sKPj4+PiArCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxh eV9tb2RlICptb2RlID0gY3R4LT5wZC0+bW9kZTsKPj4+PiArCj4+Pj4gKwlzd2l0Y2ggKG1vZGUt PmhkaXNwbGF5KSB7Cj4+Pj4gKwljYXNlIDQ4MDoKPj4+PiArCQlzd2l0Y2ggKG1vZGUtPnZkaXNw bGF5KSB7Cj4+Pj4gKwkJY2FzZSA4NjQ6Cj4+Pj4gKwkJCWN0eC0+cmVzX3NlbCA9IEhYODM2OUFf UkVTXzQ4MF84NjQ7Cj4+Pj4gKwkJCWJyZWFrOwo+Pj4+ICsJCWNhc2UgODU0Ogo+Pj4+ICsJCQlj dHgtPnJlc19zZWwgPSBIWDgzNjlBX1JFU180ODBfODU0Owo+Pj4+ICsJCQlicmVhazsKPj4+PiAr CQljYXNlIDgwMDoKPj4+PiArCQkJY3R4LT5yZXNfc2VsID0gSFg4MzY5QV9SRVNfNDgwXzgwMDsK Pj4+PiArCQkJYnJlYWs7Cj4+Pj4gKwkJY2FzZSA2NDA6Cj4+Pj4gKwkJCWN0eC0+cmVzX3NlbCA9 IEhYODM2OUFfUkVTXzQ4MF82NDA7Cj4+Pj4gKwkJCWJyZWFrOwo+Pj4+ICsJCWNhc2UgNzIwOgo+ Pj4+ICsJCQljdHgtPnJlc19zZWwgPSBIWDgzNjlBX1JFU180ODBfNzIwOwo+Pj4+ICsJCQlicmVh azsKPj4+PiArCQlkZWZhdWx0Ogo+Pj4+ICsJCQlicmVhazsKPj4+PiArCQl9Cj4+Pj4gKwkJYnJl YWs7Cj4+Pj4gKwljYXNlIDM2MDoKPj4+PiArCQlpZiAobW9kZS0+dmRpc3BsYXkgPT0gNjQwKQo+ Pj4+ICsJCQljdHgtPnJlc19zZWwgPSBIWDgzNjlBX1JFU18zNjBfNjQwOwo+Pj4+ICsJCWJyZWFr Owo+Pj4+ICsJZGVmYXVsdDoKPj4+PiArCQlicmVhazsKPj4+PiArCX0KPj4+PiArfQo+Pj4+ICsK Pj4+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlIHRydWx5X3RmdDQ4MDgw MF8xNl9lX21vZGUgPSB7Cj4+Pj4gKwkuY2xvY2sgPSAyNjQwMCwKPj4+PiArCS5oZGlzcGxheSA9 IDQ4MCwKPj4+PiArCS5oc3luY19zdGFydCA9IDQ4MCArIDgsCj4+Pj4gKwkuaHN5bmNfZW5kID0g NDgwICsgOCArIDgsCj4+Pj4gKwkuaHRvdGFsID0gNDgwICsgOCArIDggKyA4LAo+Pj4+ICsJLnZk aXNwbGF5ID0gODAwLAo+Pj4+ICsJLnZzeW5jX3N0YXJ0ID0gODAwICsgNiwKPj4+PiArCS52c3lu Y19lbmQgPSA4MDAgKyA2ICsgNiwKPj4+PiArCS52dG90YWwgPSA4MDAgKyA2ICsgNiArIDYsCj4+ Pj4gKwkudnJlZnJlc2ggPSA2MCwKPj4+PiArCS53aWR0aF9tbSA9IDQ1LAo+Pj4+ICsJLmhlaWdo dF9tbSA9IDc2LAo+Pj4+ICt9Owo+Pj4+ICsKPj4+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBoeDgz NjlhX3BhbmVsX2Rlc2MgdHJ1bHlfdGZ0NDgwODAwXzE2X2VfZHNpID0gewo+Pj4+ICsJLm1vZGUg PSAmdHJ1bHlfdGZ0NDgwODAwXzE2X2VfbW9kZSwKPj4+PiArCS5wb3dlcl9vbl9kZWxheSA9IDEw LAo+Pj4+ICsJLnJlc2V0X2RlbGF5ID0gMTAsCj4+Pj4gKwkuZHNpX2xhbmVzID0gMiwKPj4+PiAr fTsKPj4+PiArCj4+Pj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGh4ODM2OWFf ZHNpX29mX21hdGNoW10gPSB7Cj4+Pj4gKwl7Cj4+Pj4gKwkJLmNvbXBhdGlibGUgPSAidHJ1bHks dGZ0NDgwODAwLTE2LWUtZHNpIiwKPj4+PiArCQkuZGF0YSA9ICZ0cnVseV90ZnQ0ODA4MDBfMTZf ZV9kc2ksCj4+Pj4gKwl9LCB7Cj4+Pj4gKwkJLyogc2VudGluZWwgKi8KPj4+PiArCX0sCj4+Pj4g K307Cj4+Pj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGh4ODM2OWFfZHNpX29mX21hdGNoKTsK Pj4+PiArCj4+Pj4gK3N0YXRpYyBpbnQgaHg4MzY5YV9kc2lfcHJvYmUoc3RydWN0IG1pcGlfZHNp X2RldmljZSAqZHNpKQo+Pj4+ICt7Cj4+Pj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZHNpLT5k ZXY7Cj4+Pj4gKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICpvZl9pZCA9Cj4+Pj4gKwkJCW9m X21hdGNoX2RldmljZShoeDgzNjlhX2RzaV9vZl9tYXRjaCwgZGV2KTsKPj4+PiArCXN0cnVjdCBo eDgzNjlhICpjdHg7Cj4+Pj4gKwlpbnQgcmV0LCBpOwo+Pj4+ICsKPj4+PiArCWN0eCA9IGRldm1f a3phbGxvYyhkZXYsIHNpemVvZigqY3R4KSwgR0ZQX0tFUk5FTCk7Cj4+Pj4gKwlpZiAoIWN0eCkK Pj4+PiArCQlyZXR1cm4gLUVOT01FTTsKPj4+PiArCj4+Pj4gKwljdHgtPmRldiA9IGRldjsKPj4+ PiArCj4+Pj4gKwlpZiAob2ZfaWQpIHsKPj4+PiArCQljdHgtPnBkID0gb2ZfaWQtPmRhdGE7Cj4+ Pj4gKwl9IGVsc2Ugewo+Pj4+ICsJCWRldl9lcnIoZGV2LCAiY2Fubm90IGZpbmQgY29tcGF0aWJs ZSBkZXZpY2VcbiIpOwo+Pj4+ICsJCXJldHVybiAtRU5PREVWOwo+Pj4+ICsJfQo+Pj4+ICsKPj4+ PiArCWh4ODM2OWFfdm1fdG9fcmVzX3NlbChjdHgpOwo+Pj4+ICsKPj4+PiArCWN0eC0+c3VwcGxp ZXNbMF0uc3VwcGx5ID0gInZkZDEiOwo+Pj4+ICsJY3R4LT5zdXBwbGllc1sxXS5zdXBwbHkgPSAi dmRkMiI7Cj4+Pj4gKwljdHgtPnN1cHBsaWVzWzJdLnN1cHBseSA9ICJ2ZGQzIjsKPj4+PiArCWN0 eC0+c3VwcGxpZXNbM10uc3VwcGx5ID0gImRzaS12Y2MiOwo+Pj4+ICsJY3R4LT5zdXBwbGllc1s0 XS5zdXBwbHkgPSAidnBwIjsKPj4+PiArCXJldCA9IGRldm1fcmVndWxhdG9yX2J1bGtfZ2V0KGRl diwgQVJSQVlfU0laRShjdHgtPnN1cHBsaWVzKSwKPj4+PiArCQkJCSAgICAgIGN0eC0+c3VwcGxp ZXMpOwo+Pj4+ICsJaWYgKHJldCA8IDApIHsKPj4+PiArCQlkZXZfaW5mbyhkZXYsICJmYWlsZWQg dG8gZ2V0IHJlZ3VsYXRvcnM6ICVkXG4iLCByZXQpOwo+Pj4+ICsJCXJldHVybiByZXQ7Cj4+Pj4g Kwl9Cj4+Pj4gKwo+Pj4+ICsJY3R4LT5yZXNldF9ncGlvID0gZGV2bV9ncGlvZF9nZXQoZGV2LCAi cmVzZXQiLCBHUElPRF9PVVRfTE9XKTsKPj4+PiArCWlmIChJU19FUlIoY3R4LT5yZXNldF9ncGlv KSkgewo+Pj4+ICsJCWRldl9pbmZvKGRldiwgImNhbm5vdCBnZXQgcmVzZXQtZ3Bpb3MgJWxkXG4i LAo+Pj4+ICsJCQkgUFRSX0VSUihjdHgtPnJlc2V0X2dwaW8pKTsKPj4+PiArCQlyZXR1cm4gUFRS X0VSUihjdHgtPnJlc2V0X2dwaW8pOwo+Pj4+ICsJfQo+Pj4+ICsKPj4+PiArCWZvciAoaSA9IDA7 IGkgPCA0OyBpKyspIHsKPj4+PiArCQljdHgtPmJzX2dwaW9baV0gPSBkZXZtX2dwaW9kX2dldF9p bmRleChkZXYsICJicyIsIGksCj4+Pj4gKwkJCQkJCQlHUElPRF9PVVRfSElHSCk7Cj4+Pj4gKwkJ aWYgKCFJU19FUlJfT1JfTlVMTChjdHgtPmJzX2dwaW9baV0pKQo+Pj4+ICsJCQlkZXZfZGJnKGRl diwgImJzJWQtZ3BpbyBpcyBjb25maWd1cmVkXG4iLCBpKTsKPj4+IEFyZSB5b3Ugc3VyZSB5b3Ug d2FudCB0byBjb250aW51ZSBwcm9iZSBvbiBlcnJvciBkdXJpbmcgZ2V0dGluZyBncGlvcz8KPj4g VGhlcmUgY291bGQgYmUgaG9sZXMgaW4gdGhlIGdwaW8gbGlzdCBhcyBtZW50aW9uZWQgaW4gWzFd Lgo+PiBGb3IgdGhpcyBwYW5lbCwgdGhlIHBvdGVudGlhbCBob2xlcyBtZWFuIHRoYXQgdGhlIHJl bGV2YW50Cj4+IGdwaW9zIGFyZSBub3QgY29udHJvbGxlZCBieSB0aGUgZHJpdmVyIGJ1dCBvbmx5 IGJ5IHRoZQo+PiBoYXJkd2FyZS4KPj4KPj4gUGVyaGFwcywgSSBuZWVkIHRvIGhhbmRsZSB0aGUg ZXJyb3IgY2FzZS4KPj4gSSB0cmllZCB0byBpbXBsZW1lbnQgaXQgaW4gdGhlIGZvbGxvd2luZyB3 YXkuCj4+Cj4+IGN0eC0+YnNfZ3Bpb1tpXSA9IGRldm1fZ3Bpb2RfZ2V0X2luZGV4KGRldiwgImJz IiwgaSwKPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUElPRF9P VVRfSElHSCk7Cj4+IGlmICghSVNfRVJSX09SX05VTEwoY3R4LT5ic19ncGlvW2ldKSkgewo+PiAg ICAgICBkZXZfZGJnKGRldiwgImJzJWQtZ3BpbyBpcyBjb25maWd1cmVkXG4iLCBpKTsKPj4gfSBl bHNlIGlmIChJU19FUlIoY3R4LT5ic19ncGlvW2ldKSkgewo+PiAgICAgICBkZXZfaW5mbyhkZXYs ICJmYWlsZWQgdG8gZ2V0IGJzJWQtZ3Bpb1xuIiwgaSk7Cj4+ICAgICAgIHJldHVybiBQVFJfRVJS KGN0eC0+YnNfZ3Bpb1tpXSk7Cj4+IH0KPj4KPj4gQnV0LCBJIGdldCB0aGlzIGluIGRtZXNnLiAg QW55IGlkZWE/Cj4+IFsgICAgMS42MjU2MzRdIHBhbmVsLWh4ODM2OWEtZHNpIDIxZTAwMDAubWlw aS4wOiBmYWlsZWQgdG8gZ2V0IGJzMC1ncGlvCj4+IFsgICAgMS42MzMwNjBdIHBhbmVsLWh4ODM2 OWEtZHNpOiBwcm9iZSBvZiAyMWUwMDAwLm1pcGkuMCBmYWlsZWQgd2l0aAo+PiBlcnJvciAtMgo+ Cj4gSSBndWVzcyB5b3Ugc2hvdWxkIHVzZSBkZXZtX2dwaW9kX2dldF9pbmRleF9vcHRpb25hbCAu CgpZb3UgYXJlIHJpZ2h0LiAgVGhhbmtzLgoKUmVnYXJkcywKTGl1IFlpbmcKCj4KPiBSZWdhcmRz Cj4gQW5kcnplago+Cj4+Cj4+IFsxXSBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mv Z3Bpby9ncGlvLnR4dC4KPj4KPj4gUmVnYXJkcywKPj4KPj4gTGl1IFlpbmcKPj4KPj4+IEFmdGVy IGFkZHJlc3NpbmcgYWJvdmUgY29tbWVudHMgeW91IGNhbiBhZGQ6Cj4+Pgo+Pj4gUmV2aWV3ZWQt Ynk6IEFuZHJ6ZWogSGFqZGEgPGEuaGFqZGFAc2Ftc3VuZy5jb20+Cj4+Pgo+Pj4KPj4+Cj4+PiBS ZWdhcmRzCj4+PiBBbmRyemVqCj4+Pgo+Pj4KPj4+PiArCX0KPj4+PiArCj4+Pj4gKwlyZXQgPSBo eDgzNjlhX3Bvd2VyX29uKGN0eCk7Cj4+Pj4gKwlpZiAocmV0IDwgMCkgewo+Pj4+ICsJCWRldl9l cnIoZGV2LCAiY2Fubm90IHBvd2VyIG9uXG4iKTsKPj4+PiArCQlyZXR1cm4gcmV0Owo+Pj4+ICsJ fQo+Pj4+ICsKPj4+PiArCWRybV9wYW5lbF9pbml0KCZjdHgtPnBhbmVsKTsKPj4+PiArCWN0eC0+ cGFuZWwuZGV2ID0gZGV2Owo+Pj4+ICsJY3R4LT5wYW5lbC5mdW5jcyA9ICZoeDgzNjlhX2RzaV9k cm1fZnVuY3M7Cj4+Pj4gKwo+Pj4+ICsJcmV0ID0gZHJtX3BhbmVsX2FkZCgmY3R4LT5wYW5lbCk7 Cj4+Pj4gKwlpZiAocmV0IDwgMCkKPj4+PiArCQlyZXR1cm4gcmV0Owo+Pj4+ICsKPj4+PiArCW1p cGlfZHNpX3NldF9kcnZkYXRhKGRzaSwgY3R4KTsKPj4+PiArCj4+Pj4gKwlkc2ktPmxhbmVzID0g Y3R4LT5wZC0+ZHNpX2xhbmVzOwo+Pj4+ICsJZHNpLT5mb3JtYXQgPSBNSVBJX0RTSV9GTVRfUkdC ODg4Owo+Pj4+ICsJZHNpLT5tb2RlX2ZsYWdzID0gTUlQSV9EU0lfTU9ERV9WSURFTyB8Cj4+Pj4g KwkJCSAgTUlQSV9EU0lfTU9ERV9WSURFT19CVVJTVCB8Cj4+Pj4gKwkJCSAgTUlQSV9EU0lfTU9E RV9WSURFT19TWU5DX1BVTFNFOwo+Pj4+ICsJcmV0ID0gbWlwaV9kc2lfYXR0YWNoKGRzaSk7Cj4+ Pj4gKwlpZiAocmV0IDwgMCkKPj4+PiArCQlkcm1fcGFuZWxfcmVtb3ZlKCZjdHgtPnBhbmVsKTsK Pj4+PiArCj4+Pj4gKwlyZXR1cm4gcmV0Owo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMgaW50 IGh4ODM2OWFfZHNpX3JlbW92ZShzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2kpCj4+Pj4gK3sK Pj4+PiArCXN0cnVjdCBoeDgzNjlhICpjdHggPSBtaXBpX2RzaV9nZXRfZHJ2ZGF0YShkc2kpOwo+ Pj4+ICsKPj4+PiArCW1pcGlfZHNpX2RldGFjaChkc2kpOwo+Pj4+ICsJZHJtX3BhbmVsX3JlbW92 ZSgmY3R4LT5wYW5lbCk7Cj4+Pj4gKwlyZXR1cm4gaHg4MzY5YV9wb3dlcl9vZmYoY3R4KTsKPj4+ PiArfQo+Pj4+ICsKPj4+PiArc3RhdGljIHN0cnVjdCBtaXBpX2RzaV9kcml2ZXIgaHg4MzY5YV9k c2lfZHJpdmVyID0gewo+Pj4+ICsJLnByb2JlID0gaHg4MzY5YV9kc2lfcHJvYmUsCj4+Pj4gKwku cmVtb3ZlID0gaHg4MzY5YV9kc2lfcmVtb3ZlLAo+Pj4+ICsJLmRyaXZlciA9IHsKPj4+PiArCQku bmFtZSA9ICJwYW5lbC1oeDgzNjlhLWRzaSIsCj4+Pj4gKwkJLm9mX21hdGNoX3RhYmxlID0gaHg4 MzY5YV9kc2lfb2ZfbWF0Y2gsCj4+Pj4gKwl9LAo+Pj4+ICt9Owo+Pj4+ICttb2R1bGVfbWlwaV9k c2lfZHJpdmVyKGh4ODM2OWFfZHNpX2RyaXZlcik7Cj4+Pj4gKwo+Pj4+ICtNT0RVTEVfREVTQ1JJ UFRJT04oIkhpbWF4IEhYODM2OUEgcGFuZWwgZHJpdmVyIik7Cj4+Pj4gK01PRFVMRV9BVVRIT1Io IkxpdSBZaW5nIDxZaW5nLkxpdUBmcmVlc2NhbGUuY29tPiIpOwo+Pj4+ICtNT0RVTEVfTElDRU5T RSgiR1BMIHYyIik7Cj4KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2 ZWwK