From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 2/2] drm: Add new driver for MXSFB controller Date: Sun, 28 Aug 2016 18:44:49 +0200 Message-ID: <20160828164449.GZ10980@phenom.ffwll.local> References: <20160826142742.7236-1-marex@denx.de> <20160826142742.7236-2-marex@denx.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x243.google.com (mail-wm0-x243.google.com [IPv6:2a00:1450:400c:c09::243]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6E77B891B1 for ; Sun, 28 Aug 2016 16:44:54 +0000 (UTC) Received: by mail-wm0-x243.google.com with SMTP id q128so6480321wma.1 for ; Sun, 28 Aug 2016 09:44:54 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20160826142742.7236-2-marex@denx.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Marek Vasut Cc: Fabio Estevam , Shawn Guo , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gRnJpLCBBdWcgMjYsIDIwMTYgYXQgMDQ6Mjc6NDJQTSArMDIwMCwgTWFyZWsgVmFzdXQgd3Jv dGU6Cj4gQWRkIG5ldyBkcml2ZXIgZm9yIHRoZSBNWFNGQiBjb250cm9sbGVyIGZvdW5kIGluIGku TVgyMy8yOC82U1ggLgo+IFRoZSBNWFNGQiBjb250cm9sbGVyIGlzIGEgc2ltcGxlIGZyYW1lYnVm ZmVyIGNvbnRyb2xsZXIgd2l0aCBvbmUKPiBwYXJhbGxlbCBMQ0Qgb3V0cHV0LiBVbmxpa2UgdGhl IE1YU0ZCIGZiZGV2IGRyaXZlciB0aGF0IGlzIHVzZWQKPiBvbiB0aGVzZSBzeXN0ZW1zIG5vdywg dGhpcyBkcml2ZXIgdXNlcyB0aGUgRFJNL0tNUyBmcmFtZXdvcmsuCj4gCj4gU2lnbmVkLW9mZi1i eTogTWFyZWsgVmFzdXQgPG1hcmV4QGRlbnguZGU+Cj4gQ2M6IEx1Y2FzIFN0YWNoIDxsLnN0YWNo QHBlbmd1dHJvbml4LmRlPgo+IENjOiBGYWJpbyBFc3RldmFtIDxmYWJpby5lc3RldmFtQG54cC5j b20+Cj4gQ2M6IFNoYXduIEd1byA8c2hhd25ndW9Aa2VybmVsLm9yZz4KPiAtLS0KPiAgTUFJTlRB SU5FUlMgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNiArCj4gIGRyaXZlcnMvZ3B1L2RybS9L Y29uZmlnICAgICAgICAgICAgfCAgIDIgKwo+ICBkcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgICAg ICAgICAgIHwgICAxICsKPiAgZHJpdmVycy9ncHUvZHJtL214c2ZiL0tjb25maWcgICAgICB8ICAx OCArKwo+ICBkcml2ZXJzL2dwdS9kcm0vbXhzZmIvTWFrZWZpbGUgICAgIHwgICAyICsKPiAgZHJp dmVycy9ncHUvZHJtL214c2ZiL214c2ZiX2NydGMuYyB8IDM5NSArKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrCj4gIGRyaXZlcnMvZ3B1L2RybS9teHNmYi9teHNmYl9kcnYuYyAg fCAzMjQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIGRyaXZlcnMvZ3B1L2RybS9t eHNmYi9teHNmYl9kcnYuaCAgfCAgNTggKysrKysrCj4gIGRyaXZlcnMvZ3B1L2RybS9teHNmYi9t eHNmYl9vdXQuYyAgfCAyNjQgKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICBkcml2ZXJzL2dw dS9kcm0vbXhzZmIvbXhzZmJfcmVncy5oIHwgMTEyICsrKysrKysrKysrCj4gIDEwIGZpbGVzIGNo YW5nZWQsIDExODIgaW5zZXJ0aW9ucygrKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL214c2ZiL0tjb25maWcKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS9teHNmYi9NYWtlZmlsZQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL214 c2ZiL214c2ZiX2NydGMuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL214 c2ZiL214c2ZiX2Rydi5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXhz ZmIvbXhzZmJfZHJ2LmgKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9teHNm Yi9teHNmYl9vdXQuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL214c2Zi L214c2ZiX3JlZ3MuaAo+IAo+IGRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJT Cj4gaW5kZXggOGMyMDMyMy4uMzliMTZiNCAxMDA2NDQKPiAtLS0gYS9NQUlOVEFJTkVSUwo+ICsr KyBiL01BSU5UQUlORVJTCj4gQEAgLTc3ODEsNiArNzc4MSwxMiBAQCBUOglnaXQgZ2l0Oi8vbGlu dXh0di5vcmcvbWtydWZreS90dW5lcnMuZ2l0Cj4gIFM6CU1haW50YWluZWQKPiAgRjoJZHJpdmVy cy9tZWRpYS90dW5lcnMvbXhsNTAwN3QuKgo+ICAKPiArTVhTRkIgRFJNIERSSVZFUgo+ICtNOglN YXJlayBWYXN1dCA8bWFyZXhAZGVueC5kZT4KPiArUzoJU3VwcG9ydGVkCj4gK0Y6CWRyaXZlcnMv Z3B1L2RybS9teHNmYi8KPiArRjoJRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Rp c3BsYXkvbXhzZmItZHJtLnR4dAo+ICsKPiAgTVlSSUNPTSBNWVJJLTEwRyAxMEdiRSBEUklWRVIg KE1ZUkkxMEdFKQo+ICBNOglIeW9uZy1Zb3ViIEtpbSA8aHlraW1AbXlyaS5jb20+Cj4gIEw6CW5l dGRldkB2Z2VyLmtlcm5lbC5vcmcKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL0tjb25m aWcgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwo+IGluZGV4IGZjMzU3MzEuLjViMWU3YmMgMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vS2NvbmZpZwo+IEBAIC0yOTAsMyArMjkwLDUgQEAgc291cmNlICJkcml2ZXJzL2dwdS9kcm0v YXJjL0tjb25maWciCj4gIHNvdXJjZSAiZHJpdmVycy9ncHUvZHJtL2hpc2lsaWNvbi9LY29uZmln Igo+ICAKPiAgc291cmNlICJkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZpZyIKPiArCj4g K3NvdXJjZSAiZHJpdmVycy9ncHUvZHJtL214c2ZiL0tjb25maWciCj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQo+IGluZGV4 IGJlNDNhZmIuLmNiYjYzOGQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxl Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCj4gQEAgLTgyLDMgKzgyLDQgQEAgb2Jq LSQoQ09ORklHX0RSTV9GU0xfRENVKSArPSBmc2wtZGN1Lwo+ICBvYmotJChDT05GSUdfRFJNX0VU TkFWSVYpICs9IGV0bmF2aXYvCj4gIG9iai0kKENPTkZJR19EUk1fQVJDUEdVKSs9IGFyYy8KPiAg b2JqLXkJCQkrPSBoaXNpbGljb24vCj4gK29iai0kKENPTkZJR19EUk1fTVhTRkIpCSs9IG14c2Zi Lwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXhzZmIvS2NvbmZpZyBiL2RyaXZlcnMv Z3B1L2RybS9teHNmYi9LY29uZmlnCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAw MDAwLi4wYjZjYjU5Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9teHNm Yi9LY29uZmlnCj4gQEAgLTAsMCArMSwxOCBAQAo+ICtjb25maWcgRFJNX01YUwo+ICsJYm9vbAo+ ICsJaGVscAo+ICsJICBDaG9vc2UgdGhpcyBvcHRpb24gdG8gc2VsZWN0IGRyaXZlcnMgZm9yIE1Y UyBGQiBkZXZpY2VzCj4gKwo+ICtjb25maWcgRFJNX01YU0ZCCj4gKwl0cmlzdGF0ZSAiaS5NWDIz L2kuTVgyOC9pLk1YNlNYIE1YU0ZCIExDRCBjb250cm9sbGVyIgo+ICsJZGVwZW5kcyBvbiBEUk0g JiYgT0YKPiArCWRlcGVuZHMgb24gQ09NTU9OX0NMSwo+ICsJc2VsZWN0IERSTV9NWFMKPiArCXNl bGVjdCBEUk1fS01TX0hFTFBFUgo+ICsJc2VsZWN0IERSTV9LTVNfRkJfSEVMUEVSCj4gKwlzZWxl Y3QgRFJNX0tNU19DTUFfSEVMUEVSCj4gKwloZWxwCj4gKwkgIENob29zZSB0aGlzIG9wdGlvbiBp ZiB5b3UgaGF2ZSBhbiBpLk1YMjMvaS5NWDI4L2kuTVg2U1ggTVhTRkIKPiArCSAgTENEIGNvbnRy b2xsZXIuCj4gKwo+ICsJICBJZiBNIGlzIHNlbGVjdGVkIHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxs ZWQgbXhzZmIuCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9teHNmYi9NYWtlZmlsZSBi L2RyaXZlcnMvZ3B1L2RybS9teHNmYi9NYWtlZmlsZQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4g aW5kZXggMDAwMDAwMC4uODU3ZjNhNAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vbXhzZmIvTWFrZWZpbGUKPiBAQCAtMCwwICsxLDIgQEAKPiArbXhzZmIteSA6PSBteHNm Yl9kcnYubyBteHNmYl9jcnRjLm8gbXhzZmJfb3V0Lm8KPiArb2JqLSQoQ09ORklHX0RSTV9NWFNG QikJKz0gbXhzZmIubwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXhzZmIvbXhzZmJf Y3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL214c2ZiL214c2ZiX2NydGMuYwo+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uNWQyZTJhMQo+IC0tLSAvZGV2L251bGwKPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vbXhzZmIvbXhzZmJfY3J0Yy5jCj4gQEAgLTAsMCArMSwzOTUgQEAK PiArLyoKPiArICogQ29weXJpZ2h0IChDKSAyMDE2IE1hcmVrIFZhc3V0IDxtYXJleEBkZW54LmRl Pgo+ICsgKgo+ICsgKiBUaGlzIGNvZGUgaXMgYmFzZWQgb24gZHJpdmVycy92aWRlby9mYmRldi9t eHNmYi5jIDoKPiArICogQ29weXJpZ2h0IChDKSAyMDEwIEp1ZXJnZW4gQmVpc2VydCwgUGVuZ3V0 cm9uaXgKPiArICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgRnJlZXNjYWxlIFNlbWljb25kdWN0 b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KPiArICogQ29weXJpZ2h0IChDKSAyMDA4IEVt YmVkZGVkIEFsbGV5IFNvbHV0aW9ucywgSW5jIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCj4gKyAqCj4g KyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IKPiArICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UKPiArICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKPiArICogb2YgdGhlIExpY2Vuc2UsIG9yIChh dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv Zgo+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlCj4gKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gKyNpbmNsdWRlIDxk cm0vZHJtX2F0b21pY19oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgo+ICsj aW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9mYl9o ZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fZmJfY21hX2hlbHBlci5oPgo+ICsjaW5jbHVk ZSA8ZHJtL2RybV9nZW1fY21hX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9vZi5oPgo+ ICsjaW5jbHVkZSA8ZHJtL2RybV9wbGFuZV9oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2Ns ay5oPgo+ICsjaW5jbHVkZSA8bGludXgvaW9wb2xsLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9vZl9n cmFwaC5oPgo+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9zaW1wbGVmYi5oPgo+ICsj aW5jbHVkZSA8dmlkZW8vdmlkZW9tb2RlLmg+Cj4gKwo+ICsjaW5jbHVkZSAibXhzZmJfZHJ2Lmgi Cj4gKyNpbmNsdWRlICJteHNmYl9yZWdzLmgiCj4gKwo+ICtzdGF0aWMgdm9pZCBteHNmYl9lbmFi bGVfYXhpX2NsayhzdHJ1Y3QgbXhzZmJfZHJtX3ByaXZhdGUgKm14c2ZiKQo+ICt7Cj4gKwlpZiAo bXhzZmItPmNsa19heGkpCj4gKwkJY2xrX3ByZXBhcmVfZW5hYmxlKG14c2ZiLT5jbGtfYXhpKTsK PiArfQo+ICsKPiArc3RhdGljIHZvaWQgbXhzZmJfZGlzYWJsZV9heGlfY2xrKHN0cnVjdCBteHNm Yl9kcm1fcHJpdmF0ZSAqbXhzZmIpCj4gK3sKPiArCWlmIChteHNmYi0+Y2xrX2F4aSkKPiArCQlj bGtfZGlzYWJsZV91bnByZXBhcmUobXhzZmItPmNsa19heGkpOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dTMyIHNldF9oc3luY19wdWxzZV93aWR0aChzdHJ1Y3QgbXhzZmJfZHJtX3ByaXZhdGUgKm14c2Zi LCB1MzIgdmFsKQo+ICt7Cj4gKwlyZXR1cm4gKHZhbCAmIG14c2ZiLT5kZXZkYXRhLT5oc193ZHRo X21hc2spIDw8Cj4gKwkJbXhzZmItPmRldmRhdGEtPmhzX3dkdGhfc2hpZnQ7Cj4gK30KPiArCj4g K3N0YXRpYyBzdHJ1Y3Qgc2ltcGxlZmJfZm9ybWF0IHN1cHBvcnRlZF9mb3JtYXRzW10gPSBTSU1Q TEVGQl9GT1JNQVRTOwo+ICsKPiArLyoKPiArICogU2V0dXAgdGhlIE1YU0ZCIHJlZ2lzdGVycyBm b3IgZGVjb2RpbmcgdGhlIHBpeGVscyBvdXQgb2YgdGhlIGZyYW1lYnVmZmVyCj4gKyAqLwo+ICtz dGF0aWMgaW50IG14c2ZiX3NldF9waXhlbF9mbXQoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ICt7 Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gY3J0Yy0+ZGV2Owo+ICsJc3RydWN0IG14c2Zi X2RybV9wcml2YXRlICpteHNmYiA9IGNydGNfdG9fbXhzZmJfcHJpdihjcnRjKTsKPiArCXN0cnVj dCBzaW1wbGVmYl9mb3JtYXQgKmZvcm1hdCA9IE5VTEw7Cj4gKwl1MzIgcGl4ZWxfZm9ybWF0LCBj dHJsOwo+ICsJaW50IGk7Cj4gKwo+ICsJcGl4ZWxfZm9ybWF0ID0gY3J0Yy0+cHJpbWFyeS0+c3Rh dGUtPmZiLT5waXhlbF9mb3JtYXQ7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUo c3VwcG9ydGVkX2Zvcm1hdHMpOyBpKyspIHsKPiArCQlpZiAoc3VwcG9ydGVkX2Zvcm1hdHNbaV0u Zm91cmNjID09IHBpeGVsX2Zvcm1hdCkKPiArCQkJZm9ybWF0ID0gJnN1cHBvcnRlZF9mb3JtYXRz W2ldOwo+ICsJfQo+ICsKPiArCWlmIChXQVJOX09OKCFmb3JtYXQpKQo+ICsJCXJldHVybiAwOwo+ ICsKPiArCWN0cmwgPSBDVFJMX0JZUEFTU19DT1VOVCB8IENUUkxfTUFTVEVSOwo+ICsKPiArCS8q Cj4gKwkgKiBXQVJOSU5HOiBUaGUgYnVzIHdpZHRoLCBDVFJMX1NFVF9CVVNfV0lEVEgoKSwgaXMg Y29uZmlndXJlZCB0bwo+ICsJICogbWF0Y2ggdGhlIHNlbGVjdGVkIG1vZGUgaGVyZS4gVGhpcyBk aWZmZXJzIGZyb20gdGhlIG9yaWdpbmFsCj4gKwkgKiBNWFNGQiBkcml2ZXIsIHdoaWNoIGhhZCB0 aGUgb3B0aW9uIHRvIGNvbmZpZ3VyZSB0aGUgYnVzIHdpZHRoCj4gKwkgKiB0byBhcmJpdHJhcnkg dmFsdWUuIFRoaXMgbGltaXRhdGlvbiBzaG91bGQgbm90IHBvc2UgYW4gaXNzdWUuCj4gKwkgKi8K PiArCj4gKwlzd2l0Y2ggKGZvcm1hdC0+Zm91cmNjKSB7Cj4gKwljYXNlIERSTV9GT1JNQVRfUkdC NTY1Ogo+ICsJCWRldl9kYmcoZHJtLT5kZXYsICJTZXR0aW5nIHVwIFJHQjU2NSBtb2RlXG4iKTsK PiArCQljdHJsIHw9IENUUkxfU0VUX0JVU19XSURUSChTVE1MQ0RJRl8xNkJJVCk7Cj4gKwkJY3Ry bCB8PSBDVFJMX1NFVF9XT1JEX0xFTkdUSCgwKTsKPiArCQl3cml0ZWwoQ1RSTDFfU0VUX0JZVEVf UEFDS0FHSU5HKDB4ZiksIG14c2ZiLT5iYXNlICsgTENEQ19DVFJMMSk7Cj4gKwkJYnJlYWs7Cj4g KwljYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6Cj4gKwkJZGV2X2RiZyhkcm0tPmRldiwgIlNldHRp bmcgdXAgWFJHQjg4ODggbW9kZVxuIik7Cj4gKwkJY3RybCB8PSBDVFJMX1NFVF9CVVNfV0lEVEgo U1RNTENESUZfMjRCSVQpOwo+ICsJCWN0cmwgfD0gQ1RSTF9TRVRfV09SRF9MRU5HVEgoMyk7Cj4g KwkJLyogRG8gbm90IHVzZSBwYWNrZWQgcGl4ZWxzID0gb25lIHBpeGVsIHBlciB3b3JkIGluc3Rl YWQgKi8KPiArCQl3cml0ZWwoQ1RSTDFfU0VUX0JZVEVfUEFDS0FHSU5HKDB4NyksIG14c2ZiLT5i YXNlICsgTENEQ19DVFJMMSk7Cj4gKwkJYnJlYWs7Cj4gKwlkZWZhdWx0Ogo+ICsJCWRldl9lcnIo ZHJtLT5kZXYsICJVbmhhbmRsZWQgY29sb3IgZm9ybWF0ICVzXG4iLAo+ICsJCQlmb3JtYXQtPm5h bWUpOwo+ICsJCXJldHVybiAtRUlOVkFMOwoKWW91IG5lZWQgdG8gY2hlY2sgc3VjaCBmYWlsdXJl cyBpbiB0aGUgYXRvbWljX2NoZWNrIGNvZGUsIGRvaW5nIGl0IG9ubHkgaW4KYXRvbWljX2NvbW1p dCAob3IgYW55dGhpbmcgY2FsbGVkIGZyb20gdGhhdCkgaXMgd2F5IHRvbyBsYXRlLgoKSWYgeW91 IGRvIGNoZWNrIHRoaXMgYWxyZWFkeSAoc2ltcGx5IHJlc3RyaWN0IHRoZSBsaXN0IG9mIHN1cHBv cnQgZm91cmNjCmNvZGVzIHRvIG9ubHkgdGhlIDIgYWJvdmUpLCB0aGVuIHlvdSBjYW4gZG8gYSBX QVJOX09OICsgcmV0dXJuOyBhbmQgY2hhbmdlCnRoZSByZXR1cm4gdmFsdWUgZnJvbSBpbnQgdG8g dm9pZCBoZXJlLgoKPiArCX0KPiArCj4gKwl3cml0ZWwoY3RybCwgbXhzZmItPmJhc2UgKyBMQ0RD X0NUUkwpOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIG14c2ZiX2VuYWJs ZV9jb250cm9sbGVyKHN0cnVjdCBteHNmYl9kcm1fcHJpdmF0ZSAqbXhzZmIpCj4gK3sKPiArCXUz MiByZWc7Cj4gKwo+ICsJaWYgKG14c2ZiLT5jbGtfZGlzcF9heGkpCj4gKwkJY2xrX3ByZXBhcmVf ZW5hYmxlKG14c2ZiLT5jbGtfZGlzcF9heGkpOwo+ICsJY2xrX3ByZXBhcmVfZW5hYmxlKG14c2Zi LT5jbGspOwo+ICsJbXhzZmJfZW5hYmxlX2F4aV9jbGsobXhzZmIpOwo+ICsKPiArCS8qIElmIGl0 IHdhcyBkaXNhYmxlZCwgcmUtZW5hYmxlIHRoZSBtb2RlIGFnYWluICovCj4gKwl3cml0ZWwoQ1RS TF9ET1RDTEtfTU9ERSwgbXhzZmItPmJhc2UgKyBMQ0RDX0NUUkwgKyBSRUdfU0VUKTsKPiArCj4g KwkvKiBFbmFibGUgdGhlIFNZTkMgc2lnbmFscyBmaXJzdCwgdGhlbiB0aGUgRE1BIGVuZ2luZSAq Lwo+ICsJcmVnID0gcmVhZGwobXhzZmItPmJhc2UgKyBMQ0RDX1ZEQ1RSTDQpOwo+ICsJcmVnIHw9 IFZEQ1RSTDRfU1lOQ19TSUdOQUxTX09OOwo+ICsJd3JpdGVsKHJlZywgbXhzZmItPmJhc2UgKyBM Q0RDX1ZEQ1RSTDQpOwo+ICsKPiArCXdyaXRlbChDVFJMX1JVTiwgbXhzZmItPmJhc2UgKyBMQ0RD X0NUUkwgKyBSRUdfU0VUKTsKPiArCj4gKwlteHNmYi0+ZW5hYmxlZCA9IDE7Cj4gK30KPiArCj4g K3N0YXRpYyB2b2lkIG14c2ZiX2Rpc2FibGVfY29udHJvbGxlcihzdHJ1Y3QgbXhzZmJfZHJtX3By aXZhdGUgKm14c2ZiKQo+ICt7Cj4gKwl1MzIgcmVnOwo+ICsKPiArCS8qCj4gKwkgKiBFdmVuIGlm IHdlIGRpc2FibGUgdGhlIGNvbnRyb2xsZXIgaGVyZSwgaXQgd2lsbCBzdGlsbCBjb250aW51ZQo+ ICsJICogdW50aWwgaXRzIEZJRk9zIGFyZSBydW5uaW5nIG91dCBvZiBkYXRhCj4gKwkgKi8KPiAr CXdyaXRlbChDVFJMX0RPVENMS19NT0RFLCBteHNmYi0+YmFzZSArIExDRENfQ1RSTCArIFJFR19D TFIpOwo+ICsKPiArCXJlYWRsX3BvbGxfdGltZW91dChteHNmYi0+YmFzZSArIExDRENfQ1RSTCwg cmVnLCAhKHJlZyAmIENUUkxfUlVOKSwKPiArCQkJICAgMCwgMTAwMCk7Cj4gKwo+ICsJcmVnID0g cmVhZGwobXhzZmItPmJhc2UgKyBMQ0RDX1ZEQ1RSTDQpOwo+ICsJcmVnICY9IH5WRENUUkw0X1NZ TkNfU0lHTkFMU19PTjsKPiArCXdyaXRlbChyZWcsIG14c2ZiLT5iYXNlICsgTENEQ19WRENUUkw0 KTsKPiArCj4gKwlteHNmYl9kaXNhYmxlX2F4aV9jbGsobXhzZmIpOwo+ICsKPiArCWNsa19kaXNh YmxlX3VucHJlcGFyZShteHNmYi0+Y2xrKTsKPiArCWlmIChteHNmYi0+Y2xrX2Rpc3BfYXhpKQo+ ICsJCWNsa19kaXNhYmxlX3VucHJlcGFyZShteHNmYi0+Y2xrX2Rpc3BfYXhpKTsKPiArCj4gKwlt eHNmYi0+ZW5hYmxlZCA9IDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIG14c2ZiX2NydGNfbW9k ZV9zZXRfbm9mYihzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gK3sKPiArCXN0cnVjdCBteHNmYl9k cm1fcHJpdmF0ZSAqbXhzZmIgPSBjcnRjX3RvX214c2ZiX3ByaXYoY3J0Yyk7Cj4gKwlzdHJ1Y3Qg ZHJtX2Rpc3BsYXlfbW9kZSAqbSA9ICZjcnRjLT5zdGF0ZS0+YWRqdXN0ZWRfbW9kZTsKPiArCWNv bnN0IHUzMiBidXNfZmxhZ3MgPSBteHNmYi0+b3V0cHV0LmNvbm5lY3Rvci5kaXNwbGF5X2luZm8u YnVzX2ZsYWdzOwo+ICsJdTMyIHZkY3RybDAsIHZzeW5jX3B1bHNlX2xlbiwgaHN5bmNfcHVsc2Vf bGVuOwo+ICsJYm9vbCByZWVuYWJsZSA9IGZhbHNlOwo+ICsJaW50IGVycjsKPiArCj4gKwkvKgo+ ICsJICogSXQgc2VlbXMsIHlvdSBjYW4ndCByZS1wcm9ncmFtIHRoZSBjb250cm9sbGVyIGlmIGl0 IGlzIHN0aWxsCj4gKwkgKiBydW5uaW5nLiBUaGlzIG1heSBsZWFkIHRvIHNoaWZ0ZWQgcGljdHVy ZXMgKEZJRk8gaXNzdWU/KSwgc28KPiArCSAqIGZpcnN0IHN0b3AgdGhlIGNvbnRyb2xsZXIgYW5k IGRyYWluIGl0cyBGSUZPcy4KPiArCSAqLwo+ICsJaWYgKG14c2ZiLT5lbmFibGVkKSB7Cj4gKwkJ cmVlbmFibGUgPSB0cnVlOwo+ICsJCW14c2ZiX2Rpc2FibGVfY29udHJvbGxlcihteHNmYik7Cj4g Kwl9CgpUaGUgYXRvbWljIGNvcmUgc2hvdWxkIGtlZXAgcGVyZmVjdCB0cmFjayBvZiB0aGUgc3Rh dGUgb2YgeW91ciBjb250cm9sbGVyCmFuZCBuZXZlciBhc2t5IG91IHRvIHJlLWVuYWJsZSBpdCB3 aGVuIGl0J3MgYWxyZWFkeSBlbmFibGVkLiBQbGVhc2UgcmVtb3ZlCnRoaXMgY29kZSAoYW5kIHRo ZSAtPmVuYWJsZWQgdHJhY2tpbmcsIGl0IHNob3VsZCBiZSByZWR1bmRhbnQpLgoKSWYgdGhpcyBk b2Vzbid0IHdvcmsgdGhlbiB3ZSBoYXZlIGEgYnVnIGluIHRoZSBhdG9taWMgY29yZS4KCj4gKwo+ ICsJbXhzZmJfZW5hYmxlX2F4aV9jbGsobXhzZmIpOwo+ICsKPiArCS8qIENsZWFyIHRoZSBGSUZP cyAqLwo+ICsJd3JpdGVsKENUUkwxX0ZJRk9fQ0xFQVIsIG14c2ZiLT5iYXNlICsgTENEQ19DVFJM MSArIFJFR19TRVQpOwo+ICsKPiArCWVyciA9IG14c2ZiX3NldF9waXhlbF9mbXQoY3J0Yyk7Cj4g KwlpZiAoZXJyKQo+ICsJCXJldHVybjsKPiArCj4gKwljbGtfc2V0X3JhdGUobXhzZmItPmNsaywg bS0+Y3J0Y19jbG9jayAqIDEwMDApOwo+ICsKPiArCXdyaXRlbChUUkFOU0ZFUl9DT1VOVF9TRVRf VkNPVU5UKG0tPmNydGNfdmRpc3BsYXkpIHwKPiArCSAgICAgICBUUkFOU0ZFUl9DT1VOVF9TRVRf SENPVU5UKG0tPmNydGNfaGRpc3BsYXkpLAo+ICsJICAgICAgIG14c2ZiLT5iYXNlICsgbXhzZmIt PmRldmRhdGEtPnRyYW5zZmVyX2NvdW50KTsKPiArCj4gKwl2c3luY19wdWxzZV9sZW4gPSBtLT5j cnRjX3ZzeW5jX2VuZCAtIG0tPmNydGNfdnN5bmNfc3RhcnQ7Cj4gKwo+ICsJdmRjdHJsMCA9IFZE Q1RSTDBfRU5BQkxFX1BSRVNFTlQgfAkvKiBBbHdheXMgaW4gRE9UQ0xPQ0sgbW9kZSAqLwo+ICsJ CSAgVkRDVFJMMF9WU1lOQ19QRVJJT0RfVU5JVCB8Cj4gKwkJICBWRENUUkwwX1ZTWU5DX1BVTFNF X1dJRFRIX1VOSVQgfAo+ICsJCSAgVkRDVFJMMF9TRVRfVlNZTkNfUFVMU0VfV0lEVEgodnN5bmNf cHVsc2VfbGVuKTsKPiArCWlmIChtLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfUEhTWU5DKQo+ICsJ CXZkY3RybDAgfD0gVkRDVFJMMF9IU1lOQ19BQ1RfSElHSDsKPiArCWlmIChtLT5mbGFncyAmIERS TV9NT0RFX0ZMQUdfUFZTWU5DKQo+ICsJCXZkY3RybDAgfD0gVkRDVFJMMF9WU1lOQ19BQ1RfSElH SDsKPiArCWlmIChidXNfZmxhZ3MgJiBEUk1fQlVTX0ZMQUdfREVfSElHSCkKPiArCQl2ZGN0cmww IHw9IFZEQ1RSTDBfRU5BQkxFX0FDVF9ISUdIOwo+ICsJaWYgKGJ1c19mbGFncyAmIERSTV9CVVNf RkxBR19QSVhEQVRBX05FR0VER0UpCj4gKwkJdmRjdHJsMCB8PSBWRENUUkwwX0RPVENMS19BQ1Rf RkFMTElORzsKPiArCj4gKwl3cml0ZWwodmRjdHJsMCwgbXhzZmItPmJhc2UgKyBMQ0RDX1ZEQ1RS TDApOwo+ICsKPiArCS8qIEZyYW1lIGxlbmd0aCBpbiBsaW5lcy4gKi8KPiArCXdyaXRlbChtLT5j cnRjX3Z0b3RhbCwgbXhzZmItPmJhc2UgKyBMQ0RDX1ZEQ1RSTDEpOwo+ICsKPiArCS8qIExpbmUg bGVuZ3RoIGluIHVuaXRzIG9mIGNsb2NrcyBvciBwaXhlbHMuICovCj4gKwloc3luY19wdWxzZV9s ZW4gPSBtLT5jcnRjX2hzeW5jX2VuZCAtIG0tPmNydGNfaHN5bmNfc3RhcnQ7Cj4gKwl3cml0ZWwo c2V0X2hzeW5jX3B1bHNlX3dpZHRoKG14c2ZiLCBoc3luY19wdWxzZV9sZW4pIHwKPiArCSAgICAg ICBWRENUUkwyX1NFVF9IU1lOQ19QRVJJT0QobS0+Y3J0Y19odG90YWwpLAo+ICsJICAgICAgIG14 c2ZiLT5iYXNlICsgTENEQ19WRENUUkwyKTsKPiArCj4gKwl3cml0ZWwoU0VUX0hPUl9XQUlUX0NO VChtLT5jcnRjX2hibGFua19lbmQgLSBtLT5jcnRjX2hzeW5jX2VuZCkgfAo+ICsJICAgICAgIFNF VF9WRVJUX1dBSVRfQ05UKG0tPmNydGNfdmJsYW5rX2VuZCAtIG0tPmNydGNfdnN5bmNfZW5kKSwK PiArCSAgICAgICBteHNmYi0+YmFzZSArIExDRENfVkRDVFJMMyk7Cj4gKwo+ICsJd3JpdGVsKFNF VF9ET1RDTEtfSF9WQUxJRF9EQVRBX0NOVChtLT5oZGlzcGxheSksCj4gKwkgICAgICAgbXhzZmIt PmJhc2UgKyBMQ0RDX1ZEQ1RSTDQpOwo+ICsKPiArCW14c2ZiX2Rpc2FibGVfYXhpX2NsayhteHNm Yik7Cj4gKwo+ICsJaWYgKHJlZW5hYmxlKQo+ICsJCW14c2ZiX2VuYWJsZV9jb250cm9sbGVyKG14 c2ZiKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgbXhzZmJfY3J0Y19lbmFibGUoc3RydWN0IGRy bV9jcnRjICpjcnRjKQo+ICt7Cj4gKwlzdHJ1Y3QgbXhzZmJfZHJtX3ByaXZhdGUgKm14c2ZiID0g Y3J0Y190b19teHNmYl9wcml2KGNydGMpOwo+ICsKPiArCW14c2ZiX2NydGNfbW9kZV9zZXRfbm9m YihjcnRjKTsKPiArCW14c2ZiX2VuYWJsZV9jb250cm9sbGVyKG14c2ZiKTsKPiArfQo+ICsKPiAr c3RhdGljIHZvaWQgbXhzZmJfY3J0Y19kaXNhYmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiAr ewo+ICsJc3RydWN0IG14c2ZiX2RybV9wcml2YXRlICpteHNmYiA9IGNydGNfdG9fbXhzZmJfcHJp dihjcnRjKTsKPiArCj4gKwlpZiAoIWNydGMtPnN0YXRlLT5hY3RpdmUpCj4gKwkJcmV0dXJuOwo+ ICsKPiArCW14c2ZiX2Rpc2FibGVfY29udHJvbGxlcihteHNmYik7Cj4gK30KPiArCj4gK3N0YXRp YyBpbnQgbXhzZmJfY3J0Y19hdG9taWNfY2hlY2soc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ICsJ CQkJICAgc3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSkKPiArewo+ICsJc3RydWN0IG14c2Zi X2RybV9wcml2YXRlICpteHNmYiA9IGNydGNfdG9fbXhzZmJfcHJpdihjcnRjKTsKPiArCXN0cnVj dCBkcm1fZGlzcGxheV9tb2RlICptb2RlID0gJnN0YXRlLT5hZGp1c3RlZF9tb2RlOwo+ICsJbG9u ZyByYXRlLCBjbGtfcmF0ZSA9IG1vZGUtPmNsb2NrICogMTAwMDsKPiArCj4gKwlpZiAoIW1vZGUt PmNsb2NrKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCXJhdGUgPSBjbGtfcm91bmRfcmF0ZShteHNm Yi0+Y2xrLCBjbGtfcmF0ZSk7Cj4gKwkvKiBjbG9jayByZXF1aXJlZCBieSBtb2RlIG5vdCBzdXBw b3J0ZWQgYnkgaGFyZHdhcmUgKi8KPiArCWlmIChyYXRlICE9IGNsa19yYXRlKQo+ICsJCXJldHVy biAtRUlOVkFMOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBteHNm Yl9jcnRjX2F0b21pY19iZWdpbihzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gKwkJCQkgICAgc3Ry dWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSkKPiArewo+ICsJc3RydWN0IGRybV9wZW5kaW5nX3Zi bGFua19ldmVudCAqZXZlbnQgPSBjcnRjLT5zdGF0ZS0+ZXZlbnQ7Cj4gKwo+ICsJaWYgKGV2ZW50 KSB7Cj4gKwkJY3J0Yy0+c3RhdGUtPmV2ZW50ID0gTlVMTDsKPiArCj4gKwkJc3Bpbl9sb2NrX2ly cSgmY3J0Yy0+ZGV2LT5ldmVudF9sb2NrKTsKPiArCQlpZiAoZHJtX2NydGNfdmJsYW5rX2dldChj cnRjKSA9PSAwKQo+ICsJCQlkcm1fY3J0Y19hcm1fdmJsYW5rX2V2ZW50KGNydGMsIGV2ZW50KTsK PiArCQllbHNlCj4gKwkJCWRybV9jcnRjX3NlbmRfdmJsYW5rX2V2ZW50KGNydGMsIGV2ZW50KTsK PiArCQlzcGluX3VubG9ja19pcnEoJmNydGMtPmRldi0+ZXZlbnRfbG9jayk7Cj4gKwl9Cj4gK30K PiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzIG14c2ZiX2Ny dGNfaGVscGVyX2Z1bmNzID0gewo+ICsJLm1vZGVfc2V0CT0gZHJtX2hlbHBlcl9jcnRjX21vZGVf c2V0LAo+ICsJLm1vZGVfc2V0X2Jhc2UJPSBkcm1faGVscGVyX2NydGNfbW9kZV9zZXRfYmFzZSwK PiArCS5tb2RlX3NldF9ub2ZiCT0gbXhzZmJfY3J0Y19tb2RlX3NldF9ub2ZiLAo+ICsJLmVuYWJs ZQkJPSBteHNmYl9jcnRjX2VuYWJsZSwKPiArCS5kaXNhYmxlCT0gbXhzZmJfY3J0Y19kaXNhYmxl LAo+ICsJLnByZXBhcmUJPSBteHNmYl9jcnRjX2Rpc2FibGUsCj4gKwkuY29tbWl0CQk9IG14c2Zi X2NydGNfZW5hYmxlLAo+ICsJLmF0b21pY19jaGVjawk9IG14c2ZiX2NydGNfYXRvbWljX2NoZWNr LAo+ICsJLmF0b21pY19iZWdpbgk9IG14c2ZiX2NydGNfYXRvbWljX2JlZ2luLAo+ICt9OwoKSSB0 aGluayB0aGlzIGRyaXZlciBpcyBhIHBlcmZlY3QgZXhhbXBsZSBmb3IgdXNpbmcgdGhlIHJlY2Vu dGx5LW1lcmdlZApkcm1fc2ltcGxlX2ttc19oZWxwZXIgZnJhbWV3b3JrIC0gaXQgd2lsbCBhbGxv dyB5b3UgdG8gcmVtb3ZlIGEgbG90IG9mIHRoZQpib2lsZXItcGxhdGUgeW91IGhhdmUgaGVyZS4g UGxlYXNlIG1ha2Ugc3VyZSB5b3UncmUgdXNpbmcgdGhlIGxhdGVzdApkcm0tbWlzYyBjb2RlIGlu IGxpbnV4LW5leHQsIHNpbmNlIHRoYXQgY29udGFpbnMgYW4gaW1wb3J0YW50IGZpeCB0byB0aGVz ZQpoZWxwZXJzLgoKVGhlcmUncyBhbHNvIHNvbWUga2VybmVsLWRvYyBmb3IgdGhlc2UgbmV3IGhl bHBlcnMsIHdoaWNoIHNob3VsZCBoZWxwIGluCmNvbnZlcnRpbmcgeW91ciBkcml2ZXI6CgpodHRw czovLzAxLm9yZy9saW51eGdyYXBoaWNzL2dmeC1kb2NzL2RybS9ncHUvZHJtLWttcy1oZWxwZXJz Lmh0bWwjc2ltcGxlLWttcy1oZWxwZXItcmVmZXJlbmNlCgo+ICsKPiArc3RhdGljIHZvaWQgbXhz ZmJfcGxhbmVfYXRvbWljX3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiArCQkJCSAg ICAgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgbXhzZmJf ZHJtX3ByaXZhdGUgKm14c2ZiID0gcGxhbmUtPmRldi0+ZGV2X3ByaXZhdGU7Cj4gKwlzdHJ1Y3Qg ZHJtX2dlbV9jbWFfb2JqZWN0ICpnZW07Cj4gKwo+ICsJaWYgKCFwbGFuZS0+c3RhdGUtPmNydGMg fHwgIXBsYW5lLT5zdGF0ZS0+ZmIpCj4gKwkJcmV0dXJuOwo+ICsKPiArCWdlbSA9IGRybV9mYl9j bWFfZ2V0X2dlbV9vYmoocGxhbmUtPnN0YXRlLT5mYiwgMCk7Cj4gKwo+ICsJbXhzZmJfZW5hYmxl X2F4aV9jbGsobXhzZmIpOwo+ICsJd3JpdGVsKGdlbS0+cGFkZHIsIG14c2ZiLT5iYXNlICsgbXhz ZmItPmRldmRhdGEtPm5leHRfYnVmKTsKPiArCW14c2ZiX2Rpc2FibGVfYXhpX2NsayhteHNmYik7 Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2hlbHBlcl9mdW5jcyBt eHNmYl9wbGFuZV9oZWxwZXJfZnVuY3MgPSB7Cj4gKwkuYXRvbWljX3VwZGF0ZQk9IG14c2ZiX3Bs YW5lX2F0b21pY191cGRhdGUsCj4gK307Cj4gKwo+ICtzdGF0aWMgdm9pZCBteHNmYl9wbGFuZV9k ZXN0cm95KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQo+ICt7Cj4gKwlkcm1fcGxhbmVfaGVscGVy X2Rpc2FibGUocGxhbmUpOwo+ICsJZHJtX3BsYW5lX2NsZWFudXAocGxhbmUpOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wbGFuZV9mdW5jcyBteHNmYl9wbGFuZV9mdW5jcyA9 IHsKPiArCS51cGRhdGVfcGxhbmUJCT0gZHJtX2F0b21pY19oZWxwZXJfdXBkYXRlX3BsYW5lLAo+ ICsJLmRpc2FibGVfcGxhbmUJCT0gZHJtX2F0b21pY19oZWxwZXJfZGlzYWJsZV9wbGFuZSwKPiAr CS5kZXN0cm95CQk9IG14c2ZiX3BsYW5lX2Rlc3Ryb3ksCj4gKwkucmVzZXQJCQk9IGRybV9hdG9t aWNfaGVscGVyX3BsYW5lX3Jlc2V0LAo+ICsJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBkcm1f YXRvbWljX2hlbHBlcl9wbGFuZV9kdXBsaWNhdGVfc3RhdGUsCj4gKwkuYXRvbWljX2Rlc3Ryb3lf c3RhdGUJPSBkcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kZXN0cm95X3N0YXRlLAo+ICt9Owo+ICsK PiArc3RhdGljIHN0cnVjdCBkcm1fcGxhbmUgKm14c2ZiX3BsYW5lX2luaXQoc3RydWN0IGRybV9k ZXZpY2UgKmRybSkKPiArewo+ICsJc3RydWN0IG14c2ZiX2RybV9wcml2YXRlICpteHNmYiA9IGRy bS0+ZGV2X3ByaXZhdGU7Cj4gKwlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSA9IE5VTEw7Cj4gKwl1 MzIgZm9ybWF0c1tBUlJBWV9TSVpFKHN1cHBvcnRlZF9mb3JtYXRzKV0sIGk7Cj4gKwlpbnQgcmV0 Owo+ICsKPiArCXBsYW5lID0gZGV2bV9remFsbG9jKGRybS0+ZGV2LCBzaXplb2YoKnBsYW5lKSwg R0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIXBsYW5lKQo+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0p Owo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHN1cHBvcnRlZF9mb3JtYXRzKTsg aSsrKQo+ICsJCWZvcm1hdHNbaV0gPSBzdXBwb3J0ZWRfZm9ybWF0c1tpXS5mb3VyY2M7Cj4gKwo+ ICsJcmV0ID0gZHJtX3VuaXZlcnNhbF9wbGFuZV9pbml0KGRybSwgcGxhbmUsIDB4ZmYsICZteHNm Yl9wbGFuZV9mdW5jcywKPiArCQkJCSAgICAgICBmb3JtYXRzLCBBUlJBWV9TSVpFKGZvcm1hdHMp LAo+ICsJCQkJICAgICAgIERSTV9QTEFORV9UWVBFX1BSSU1BUlksIE5VTEwpOwo+ICsJaWYgKHJl dCkgewo+ICsJCWRldm1fa2ZyZWUoZHJtLT5kZXYsIHBsYW5lKTsKPiArCQlyZXR1cm4gRVJSX1BU UihyZXQpOwo+ICsJfQo+ICsKPiArCWRybV9wbGFuZV9oZWxwZXJfYWRkKHBsYW5lLCAmbXhzZmJf cGxhbmVfaGVscGVyX2Z1bmNzKTsKPiArCW14c2ZiLT5wbGFuZSA9IHBsYW5lOwo+ICsKPiArCXJl dHVybiBwbGFuZTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgbXhzZmJfY3J0Y19jbGVhbnVwKHN0 cnVjdCBkcm1fY3J0YyAqY3J0YykKPiArewo+ICsJbXhzZmJfY3J0Y19kaXNhYmxlKGNydGMpOwo+ ICsJZHJtX2NydGNfY2xlYW51cChjcnRjKTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVj dCBkcm1fY3J0Y19mdW5jcyBteHNmYl9jcnRjX2Z1bmNzID0gewo+ICsJLmRlc3Ryb3kJCT0gbXhz ZmJfY3J0Y19jbGVhbnVwLAo+ICsJLnNldF9jb25maWcJCT0gZHJtX2F0b21pY19oZWxwZXJfc2V0 X2NvbmZpZywKPiArCS5wYWdlX2ZsaXAJCT0gZHJtX2F0b21pY19oZWxwZXJfcGFnZV9mbGlwLAo+ ICsJLnJlc2V0CQkJPSBkcm1fYXRvbWljX2hlbHBlcl9jcnRjX3Jlc2V0LAo+ICsJLmF0b21pY19k dXBsaWNhdGVfc3RhdGUJPSBkcm1fYXRvbWljX2hlbHBlcl9jcnRjX2R1cGxpY2F0ZV9zdGF0ZSwK PiArCS5hdG9taWNfZGVzdHJveV9zdGF0ZQk9IGRybV9hdG9taWNfaGVscGVyX2NydGNfZGVzdHJv eV9zdGF0ZSwKPiArfTsKPiArCj4gK2ludCBteHNmYl9zZXR1cF9jcnRjKHN0cnVjdCBkcm1fZGV2 aWNlICpkcm0pCj4gK3sKPiArCXN0cnVjdCBteHNmYl9kcm1fcHJpdmF0ZSAqbXhzZmIgPSBkcm0t PmRldl9wcml2YXRlOwo+ICsJc3RydWN0IGRybV9wbGFuZSAqcHJpbWFyeTsKPiArCWludCByZXQ7 Cj4gKwo+ICsJcHJpbWFyeSA9IG14c2ZiX3BsYW5lX2luaXQoZHJtKTsKPiArCWlmIChJU19FUlIo cHJpbWFyeSkpCj4gKwkJcmV0dXJuIFBUUl9FUlIocHJpbWFyeSk7Cj4gKwo+ICsJcmV0ID0gZHJt X2NydGNfaW5pdF93aXRoX3BsYW5lcyhkcm0sICZteHNmYi0+Y3J0YywgcHJpbWFyeSwgTlVMTCwK PiArCQkJCQkmbXhzZmJfY3J0Y19mdW5jcywgTlVMTCk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJbXhz ZmJfcGxhbmVfZGVzdHJveShwcmltYXJ5KTsKPiArCQlkZXZtX2tmcmVlKGRybS0+ZGV2LCBwcmlt YXJ5KTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCWRybV9jcnRjX2hlbHBlcl9hZGQo Jm14c2ZiLT5jcnRjLCAmbXhzZmJfY3J0Y19oZWxwZXJfZnVuY3MpOwo+ICsJcmV0dXJuIDA7Cj4g K30KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL214c2ZiL214c2ZiX2Rydi5jIGIvZHJp dmVycy9ncHUvZHJtL214c2ZiL214c2ZiX2Rydi5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBp bmRleCAwMDAwMDAwLi5iYmM4MjBmCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9teHNmYi9teHNmYl9kcnYuYwo+IEBAIC0wLDAgKzEsMzI0IEBACj4gKy8qCj4gKyAqIENv cHlyaWdodCAoQykgMjAxNiBNYXJlayBWYXN1dCA8bWFyZXhAZGVueC5kZT4KPiArICoKPiArICog VGhpcyBjb2RlIGlzIGJhc2VkIG9uIGRyaXZlcnMvdmlkZW8vZmJkZXYvbXhzZmIuYyA6Cj4gKyAq IENvcHlyaWdodCAoQykgMjAxMCBKdWVyZ2VuIEJlaXNlcnQsIFBlbmd1dHJvbml4Cj4gKyAqIENv cHlyaWdodCAoQykgMjAwOC0yMDA5IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBS aWdodHMgUmVzZXJ2ZWQuCj4gKyAqIENvcHlyaWdodCAoQykgMjAwOCBFbWJlZGRlZCBBbGxleSBT b2x1dGlvbnMsIEluYyBBbGwgUmlnaHRzIFJlc2VydmVkLgo+ICsgKgo+ICsgKiBUaGlzIHByb2dy YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCj4gKyAq IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlCj4gKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl aXRoZXIgdmVyc2lvbiAyCj4gKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiArICogYnV0IFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiArICogTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+ ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKi8K PiArCj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3NwaW5s b2NrLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2NvbXBv bmVudC5oPgo+ICsjaW5jbHVkZSA8bGludXgvbGlzdC5oPgo+ICsjaW5jbHVkZSA8bGludXgvb2Zf ZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9vZl9ncmFwaC5oPgo+ICsjaW5jbHVkZSA8bGlu dXgvb2ZfcmVzZXJ2ZWRfbWVtLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+Cj4g Kwo+ICsjaW5jbHVkZSA8ZHJtL2RybVAuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hl bHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJt X2NydGNfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2hlbHBlci5oPgo+ICsjaW5j bHVkZSA8ZHJtL2RybV9mYl9jbWFfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2dlbV9j bWFfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX29mLmg+Cj4gKwo+ICsjaW5jbHVkZSAi bXhzZmJfZHJ2LmgiCj4gKyNpbmNsdWRlICJteHNmYl9yZWdzLmgiCj4gKwo+ICtlbnVtIG14c2Zi X2RldnR5cGUgewo+ICsJTVhTRkJfVjMsCj4gKwlNWFNGQl9WNCwKPiArfTsKPiArCj4gK3N0YXRp YyBjb25zdCBzdHJ1Y3QgbXhzZmJfZGV2ZGF0YSBteHNmYl9kZXZkYXRhW10gPSB7Cj4gKwlbTVhT RkJfVjNdID0gewo+ICsJCS50cmFuc2Zlcl9jb3VudAk9IExDRENfVjNfVFJBTlNGRVJfQ09VTlQs Cj4gKwkJLmN1cl9idWYJPSBMQ0RDX1YzX0NVUl9CVUYsCj4gKwkJLm5leHRfYnVmCT0gTENEQ19W M19ORVhUX0JVRiwKPiArCQkuZGVidWcwCQk9IExDRENfVjNfREVCVUcwLAo+ICsJCS5oc193ZHRo X21hc2sJPSAweGZmLAo+ICsJCS5oc193ZHRoX3NoaWZ0CT0gMjQsCj4gKwkJLmlwdmVyc2lvbgk9 IDMsCj4gKwl9LAo+ICsJW01YU0ZCX1Y0XSA9IHsKPiArCQkudHJhbnNmZXJfY291bnQJPSBMQ0RD X1Y0X1RSQU5TRkVSX0NPVU5ULAo+ICsJCS5jdXJfYnVmCT0gTENEQ19WNF9DVVJfQlVGLAo+ICsJ CS5uZXh0X2J1Zgk9IExDRENfVjRfTkVYVF9CVUYsCj4gKwkJLmRlYnVnMAkJPSBMQ0RDX1Y0X0RF QlVHMCwKPiArCQkuaHNfd2R0aF9tYXNrCT0gMHgzZmZmLAo+ICsJCS5oc193ZHRoX3NoaWZ0CT0g MTgsCj4gKwkJLmlwdmVyc2lvbgk9IDQsCj4gKwl9LAo+ICt9Owo+ICsKPiArc3RhdGljIHZvaWQg bXhzZmJfZmJfb3V0cHV0X3BvbGxfY2hhbmdlZChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQo+ICt7 Cj4gKwlzdHJ1Y3QgbXhzZmJfZHJtX3ByaXZhdGUgKm14c2ZiID0gZHJtLT5kZXZfcHJpdmF0ZTsK PiArCj4gKwlpZiAobXhzZmItPmZiZGV2KSB7Cj4gKwkJZHJtX2ZiZGV2X2NtYV9ob3RwbHVnX2V2 ZW50KG14c2ZiLT5mYmRldik7Cj4gKwl9IGVsc2Ugewo+ICsJCW14c2ZiLT5mYmRldiA9IGRybV9m YmRldl9jbWFfaW5pdChkcm0sIDMyLAo+ICsJCQkJCWRybS0+bW9kZV9jb25maWcubnVtX2NydGMs Cj4gKwkJCQkJZHJtLT5tb2RlX2NvbmZpZy5udW1fY29ubmVjdG9yKTsKPiArCQlpZiAoSVNfRVJS KG14c2ZiLT5mYmRldikpCj4gKwkJCW14c2ZiLT5mYmRldiA9IE5VTEw7Cj4gKwl9Cj4gK30KClRo ZXJlJ3MgcGF0Y2hlcyBmcm9tIFRoaWVycnkgUmVkZGluZyB0byBtYWtlIGRlbGF5ZWQgZmJkZXYg aW5pdCBzdXBwb3J0ZWQKaW4gdGhlIGZiZGV2IGhlbHBlcnMgdGhlbXNlbHZlcyAoaW5zdGVhZCBv ZiByZWludmVudGluZyBpdCBpbiBldmVyeSBkcml2ZXIKbGlrZSB5b3UgZG8gaGVyZSkuIFBsZWFz ZSBoZWxwIGdldCB0aG9zZSBwYXRjaGVzIGxhbmRlZCZyZXZpZXdlZCwgSSdsbApwaW5nIFRoaWVy cnkgdG8gZ2l2ZSB5b3UgdGhlIHJlbGV2YW50IHBvaW50ZXJzLgoKPiArCj4gK3N0YXRpYyBpbnQg bXhzZmJfYXRvbWljX2NvbW1pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICsJCQkgICAgICAg c3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLCBib29sIG5vbmJsb2NrKQo+ICt7Cj4gKwly ZXR1cm4gZHJtX2F0b21pY19oZWxwZXJfY29tbWl0KGRldiwgc3RhdGUsIGZhbHNlKTsKCkF0b21p YyBoZWxwZXJzIHN1cHBvcnQgYXN5bmMgY29tbWl0IG5vd2FkYXlzLCBubyBuZWVkIGFueSBtb3Jl IGZvciB0aGlzCmhhY2suCgo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9tb2Rl X2NvbmZpZ19mdW5jcyBteHNmYl9tb2RlX2NvbmZpZ19mdW5jcyA9IHsKPiArCS5mYl9jcmVhdGUJ CT0gZHJtX2ZiX2NtYV9jcmVhdGUsCj4gKwkub3V0cHV0X3BvbGxfY2hhbmdlZAk9IG14c2ZiX2Zi X291dHB1dF9wb2xsX2NoYW5nZWQsCj4gKwkuYXRvbWljX2NoZWNrCQk9IGRybV9hdG9taWNfaGVs cGVyX2NoZWNrLAo+ICsJLmF0b21pY19jb21taXQJCT0gbXhzZmJfYXRvbWljX2NvbW1pdCwKPiAr fTsKPiArCj4gK3N0YXRpYyBpbnQgbXhzZmJfbG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCB1 bnNpZ25lZCBsb25nIGZsYWdzKQo+ICt7Cj4gKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2 ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRybS0+ZGV2KTsKPiArCXN0cnVjdCBteHNmYl9kcm1fcHJp dmF0ZSAqbXhzZmI7Cj4gKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKPiArCWludCByZXQ7Cj4gKwo+ ICsJbXhzZmIgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpteHNmYiksIEdGUF9L RVJORUwpOwo+ICsJaWYgKCFteHNmYikKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwlkcm0t PmRldl9wcml2YXRlID0gbXhzZmI7Cj4gKwlteHNmYi0+ZGV2ZGF0YSA9ICZteHNmYl9kZXZkYXRh W3BkZXYtPmlkX2VudHJ5LT5kcml2ZXJfZGF0YV07Cj4gKwo+ICsJcmVzID0gcGxhdGZvcm1fZ2V0 X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKPiArCW14c2ZiLT5iYXNlID0gZGV2 bV9pb3JlbWFwX3Jlc291cmNlKGRybS0+ZGV2LCByZXMpOwo+ICsJaWYgKElTX0VSUihteHNmYi0+ YmFzZSkpCj4gKwkJcmV0dXJuIFBUUl9FUlIobXhzZmItPmJhc2UpOwo+ICsKPiArCW14c2ZiLT5j bGsgPSBkZXZtX2Nsa19nZXQoZHJtLT5kZXYsIE5VTEwpOwo+ICsJaWYgKElTX0VSUihteHNmYi0+ Y2xrKSkKPiArCQlyZXR1cm4gUFRSX0VSUihteHNmYi0+Y2xrKTsKPiArCj4gKwlteHNmYi0+Y2xr X2F4aSA9IGRldm1fY2xrX2dldChkcm0tPmRldiwgImF4aSIpOwo+ICsJaWYgKElTX0VSUihteHNm Yi0+Y2xrX2F4aSkpCj4gKwkJbXhzZmItPmNsa19heGkgPSBOVUxMOwo+ICsKPiArCW14c2ZiLT5j bGtfZGlzcF9heGkgPSBkZXZtX2Nsa19nZXQoZHJtLT5kZXYsICJkaXNwX2F4aSIpOwo+ICsJaWYg KElTX0VSUihteHNmYi0+Y2xrX2Rpc3BfYXhpKSkKPiArCQlteHNmYi0+Y2xrX2Rpc3BfYXhpID0g TlVMTDsKPiArCj4gKwlyZXQgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KGRybS0+ZGV2LCBE TUFfQklUX01BU0soMzIpKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlw bV9ydW50aW1lX2VuYWJsZShkcm0tPmRldik7Cj4gKwo+ICsJcmV0ID0gZHJtX3ZibGFua19pbml0 KGRybSwgZHJtLT5tb2RlX2NvbmZpZy5udW1fY3J0Yyk7Cj4gKwlpZiAocmV0IDwgMCkgewo+ICsJ CWRldl9lcnIoZHJtLT5kZXYsICJGYWlsZWQgdG8gaW5pdGlhbGlzZSB2YmxhbmtcbiIpOwo+ICsJ CWdvdG8gZXJyX3ZibGFuazsKPiArCX0KPiArCj4gKwkvKiBNb2Rlc2V0IGluaXQgKi8KPiArCWRy bV9tb2RlX2NvbmZpZ19pbml0KGRybSk7Cj4gKwo+ICsJcmV0ID0gbXhzZmJfY3JlYXRlX291dHB1 dHMoZHJtKTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJZGV2X2Vycihkcm0tPmRldiwgIkZhaWxl ZCB0byBjcmVhdGUgb3V0cHV0c1xuIik7Cj4gKwkJZ290byBlcnJfdmJsYW5rOwo+ICsJfQo+ICsK PiArCXJldCA9IG14c2ZiX3NldHVwX2NydGMoZHJtKTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJ ZGV2X2Vycihkcm0tPmRldiwgIkZhaWxlZCB0byBjcmVhdGUgY3J0Y1xuIik7Cj4gKwkJZ290byBl cnJfdmJsYW5rOwo+ICsJfQo+ICsKPiArCWRybS0+bW9kZV9jb25maWcubWluX3dpZHRoCT0gTVhT RkJfTUlOX1hSRVM7Cj4gKwlkcm0tPm1vZGVfY29uZmlnLm1pbl9oZWlnaHQJPSBNWFNGQl9NSU5f WVJFUzsKPiArCWRybS0+bW9kZV9jb25maWcubWF4X3dpZHRoCT0gTVhTRkJfTUFYX1hSRVM7Cj4g Kwlkcm0tPm1vZGVfY29uZmlnLm1heF9oZWlnaHQJPSBNWFNGQl9NQVhfWVJFUzsKPiArCWRybS0+ bW9kZV9jb25maWcuZnVuY3MJCT0gJm14c2ZiX21vZGVfY29uZmlnX2Z1bmNzOwo+ICsKPiArCWRy bV9tb2RlX2NvbmZpZ19yZXNldChkcm0pOwo+ICsKPiArCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBk ZXYsIGRybSk7Cj4gKwo+ICsJZHJtX2ttc19oZWxwZXJfcG9sbF9pbml0KGRybSk7Cj4gKwo+ICsJ ZHJtX2hlbHBlcl9ocGRfaXJxX2V2ZW50KGRybSk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gKwo+ICtl cnJfdmJsYW5rOgo+ICsJcG1fcnVudGltZV9kaXNhYmxlKGRybS0+ZGV2KTsKPiArCj4gKwlyZXR1 cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBteHNmYl91bmxvYWQoc3RydWN0IGRybV9k ZXZpY2UgKmRybSkKPiArewo+ICsJc3RydWN0IG14c2ZiX2RybV9wcml2YXRlICpteHNmYiA9IGRy bS0+ZGV2X3ByaXZhdGU7Cj4gKwo+ICsJaWYgKG14c2ZiLT5mYmRldikKPiArCQlkcm1fZmJkZXZf Y21hX2ZpbmkobXhzZmItPmZiZGV2KTsKPiArCj4gKwlkcm1fa21zX2hlbHBlcl9wb2xsX2Zpbmko ZHJtKTsKPiArCWRybV9tb2RlX2NvbmZpZ19jbGVhbnVwKGRybSk7Cj4gKwlkcm1fdmJsYW5rX2Ns ZWFudXAoZHJtKTsKPiArCj4gKwlkcm0tPmRldl9wcml2YXRlID0gTlVMTDsKPiArCj4gKwlwbV9y dW50aW1lX2Rpc2FibGUoZHJtLT5kZXYpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBteHNmYl9s YXN0Y2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRybSkKPiArewo+ICsJc3RydWN0IG14c2ZiX2Ry bV9wcml2YXRlICpteHNmYiA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4gKwo+ICsJZHJtX2ZiZGV2X2Nt YV9yZXN0b3JlX21vZGUobXhzZmItPmZiZGV2KTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0 cnVjdCBmaWxlX29wZXJhdGlvbnMgZm9wcyA9IHsKPiArCS5vd25lcgkJPSBUSElTX01PRFVMRSwK PiArCS5vcGVuCQk9IGRybV9vcGVuLAo+ICsJLnJlbGVhc2UJPSBkcm1fcmVsZWFzZSwKPiArCS51 bmxvY2tlZF9pb2N0bAk9IGRybV9pb2N0bCwKPiArI2lmZGVmIENPTkZJR19DT01QQVQKPiArCS5j b21wYXRfaW9jdGwJPSBkcm1fY29tcGF0X2lvY3RsLAo+ICsjZW5kaWYKPiArCS5wb2xsCQk9IGRy bV9wb2xsLAo+ICsJLnJlYWQJCT0gZHJtX3JlYWQsCj4gKwkubGxzZWVrCQk9IG5vb3BfbGxzZWVr LAo+ICsJLm1tYXAJCT0gZHJtX2dlbV9jbWFfbW1hcCwKPiArfTsKPiArCj4gK3N0YXRpYyBzdHJ1 Y3QgZHJtX2RyaXZlciBteHNmYl9kcml2ZXIgPSB7Cj4gKwkuZHJpdmVyX2ZlYXR1cmVzCT0gRFJJ VkVSX0dFTSB8IERSSVZFUl9NT0RFU0VUIHwKPiArCQkJCSAgRFJJVkVSX1BSSU1FIHwgRFJJVkVS X0FUT01JQywKPiArCS5sYXN0Y2xvc2UJCT0gbXhzZmJfbGFzdGNsb3NlLAo+ICsJLmdlbV9mcmVl X29iamVjdAk9IGRybV9nZW1fY21hX2ZyZWVfb2JqZWN0LAo+ICsJLmdlbV92bV9vcHMJCT0gJmRy bV9nZW1fY21hX3ZtX29wcywKPiArCS5kdW1iX2NyZWF0ZQkJPSBkcm1fZ2VtX2NtYV9kdW1iX2Ny ZWF0ZSwKPiArCS5kdW1iX21hcF9vZmZzZXQJPSBkcm1fZ2VtX2NtYV9kdW1iX21hcF9vZmZzZXQs Cj4gKwkuZHVtYl9kZXN0cm95CQk9IGRybV9nZW1fZHVtYl9kZXN0cm95LAo+ICsJLnByaW1lX2hh bmRsZV90b19mZAk9IGRybV9nZW1fcHJpbWVfaGFuZGxlX3RvX2ZkLAo+ICsJLnByaW1lX2ZkX3Rv X2hhbmRsZQk9IGRybV9nZW1fcHJpbWVfZmRfdG9faGFuZGxlLAo+ICsJLmdlbV9wcmltZV9leHBv cnQJPSBkcm1fZ2VtX3ByaW1lX2V4cG9ydCwKPiArCS5nZW1fcHJpbWVfaW1wb3J0CT0gZHJtX2dl bV9wcmltZV9pbXBvcnQsCj4gKwkuZ2VtX3ByaW1lX2dldF9zZ190YWJsZQk9IGRybV9nZW1fY21h X3ByaW1lX2dldF9zZ190YWJsZSwKPiArCS5nZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlID0gZHJt X2dlbV9jbWFfcHJpbWVfaW1wb3J0X3NnX3RhYmxlLAo+ICsJLmdlbV9wcmltZV92bWFwCQk9IGRy bV9nZW1fY21hX3ByaW1lX3ZtYXAsCj4gKwkuZ2VtX3ByaW1lX3Z1bm1hcAk9IGRybV9nZW1fY21h X3ByaW1lX3Z1bm1hcCwKPiArCS5nZW1fcHJpbWVfbW1hcAkJPSBkcm1fZ2VtX2NtYV9wcmltZV9t bWFwLAo+ICsJLmZvcHMJPSAmZm9wcywKPiArCS5uYW1lCT0gIm14c2ZiLWRybSIsCj4gKwkuZGVz Ywk9ICJNWFNGQiBDb250cm9sbGVyIERSTSIsCj4gKwkuZGF0ZQk9ICIyMDE2MDgyNCIsCj4gKwku bWFqb3IJPSAxLAo+ICsJLm1pbm9yCT0gMCwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlX2lkIG14c2ZiX2RldnR5cGVbXSA9IHsKPiArCXsgLm5hbWUgPSAi aW14MjMtZmIiLCAuZHJpdmVyX2RhdGEgPSBNWFNGQl9WMywgfSwKPiArCXsgLm5hbWUgPSAiaW14 MjgtZmIiLCAuZHJpdmVyX2RhdGEgPSBNWFNGQl9WNCwgfSwKPiArCXsgLyogc2VudGluZWwgKi8g fQo+ICt9Owo+ICtNT0RVTEVfREVWSUNFX1RBQkxFKHBsYXRmb3JtLCBteHNmYl9kZXZ0eXBlKTsK PiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG14c2ZiX2R0X2lkc1tdID0g ewo+ICsJeyAuY29tcGF0aWJsZSA9ICJmc2wsaW14MjMtbGNkaWYiLCAuZGF0YSA9ICZteHNmYl9k ZXZ0eXBlWzBdLCB9LAo+ICsJeyAuY29tcGF0aWJsZSA9ICJmc2wsaW14MjgtbGNkaWYiLCAuZGF0 YSA9ICZteHNmYl9kZXZ0eXBlWzFdLCB9LAo+ICsJeyAvKiBzZW50aW5lbCAqLyB9Cj4gK307Cj4g K01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG14c2ZiX2R0X2lkcyk7Cj4gKwo+ICtzdGF0aWMgaW50 IG14c2ZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gK3sKPiArCXN0cnVj dCBkcm1fZGV2aWNlICpkcm07Cj4gKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICpvZl9pZCA9 Cj4gKwkJCW9mX21hdGNoX2RldmljZShteHNmYl9kdF9pZHMsICZwZGV2LT5kZXYpOwo+ICsJaW50 IHJldDsKPiArCj4gKwlpZiAoIXBkZXYtPmRldi5vZl9ub2RlKQo+ICsJCXJldHVybiAtRU5PREVW Owo+ICsKPiArCWlmIChvZl9pZCkKPiArCQlwZGV2LT5pZF9lbnRyeSA9IG9mX2lkLT5kYXRhOwo+ ICsKPiArCWRybSA9IGRybV9kZXZfYWxsb2MoJm14c2ZiX2RyaXZlciwgJnBkZXYtPmRldik7Cj4g KwlpZiAoIWRybSkKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwlyZXQgPSBteHNmYl9sb2Fk KGRybSwgMCk7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gZXJyX2ZyZWU7Cj4gKwo+ICsJcmV0ID0g ZHJtX2Rldl9yZWdpc3Rlcihkcm0sIDApOwo+ICsJaWYgKHJldCkKPiArCQlnb3RvIGVycl91bmxv YWQ7Cj4gKwo+ICsJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9yZWdpc3Rlcl9hbGwoZHJtKTsKCk5vIG5l ZWQgYW55bW9yZSB0byBjYWxsIGNvbm5lY3Rvcl9yZWdpc3Rlci91bnJlZ2lzdGVyX2FsbCB5b3Vy c2VsZi4gUGxlYXNlCnJlbW92ZSBoZXJlIGFuZCBpbiB0aGUgdW5sb2FkIGNvZGUuCgo+ICsJaWYg KHJldCkgewo+ICsJCURSTV9FUlJPUigiRmFpbGVkIHRvIGJpbmQgYWxsIGNvbXBvbmVudHNcbiIp Owo+ICsJCWdvdG8gZXJyX3VucmVnaXN0ZXI7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gKwo+ ICtlcnJfdW5yZWdpc3RlcjoKPiArCWRybV9kZXZfdW5yZWdpc3Rlcihkcm0pOwo+ICtlcnJfdW5s b2FkOgo+ICsJbXhzZmJfdW5sb2FkKGRybSk7Cj4gK2Vycl9mcmVlOgo+ICsJZHJtX2Rldl91bnJl Zihkcm0pOwo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgbXhzZmJf cmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gK3sKPiArCXN0cnVjdCBkcm1f ZGV2aWNlICpkcm0gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKPiArCj4gKwltdXRleF9s b2NrKCZkcm0tPm1vZGVfY29uZmlnLm11dGV4KTsKPiArCWRybV9jb25uZWN0b3JfdW5yZWdpc3Rl cl9hbGwoZHJtKTsKPiArCW11dGV4X3VubG9jaygmZHJtLT5tb2RlX2NvbmZpZy5tdXRleCk7Cj4g Kwo+ICsJZHJtX2Rldl91bnJlZ2lzdGVyKGRybSk7Cj4gKwlteHNmYl91bmxvYWQoZHJtKTsKPiAr CWRybV9kZXZfdW5yZWYoZHJtKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGlj IHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXhzZmJfcGxhdGZvcm1fZHJpdmVyID0gewo+ICsJLnBy b2JlCQk9IG14c2ZiX3Byb2JlLAo+ICsJLnJlbW92ZQkJPSBteHNmYl9yZW1vdmUsCj4gKwkuaWRf dGFibGUJPSBteHNmYl9kZXZ0eXBlLAo+ICsJLmRyaXZlcgk9IHsKPiArCQkubmFtZQkJPSAibXhz ZmIiLAo+ICsJCS5vZl9tYXRjaF90YWJsZQk9IG14c2ZiX2R0X2lkcywKPiArCX0sCj4gK307Cj4g Kwo+ICttb2R1bGVfcGxhdGZvcm1fZHJpdmVyKG14c2ZiX3BsYXRmb3JtX2RyaXZlcik7Cj4gKwo+ ICtNT0RVTEVfQVVUSE9SKCJNYXJlayBWYXN1dCA8bWFyZXhAZGVueC5kZT4iKTsKPiArTU9EVUxF X0RFU0NSSVBUSU9OKCJGcmVlc2NhbGUgTVhTIERSTS9LTVMgZHJpdmVyIik7Cj4gK01PRFVMRV9M SUNFTlNFKCJHUEwiKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL214c2ZiL214c2Zi X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL214c2ZiL214c2ZiX2Rydi5oCj4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi5hZmExZTM0Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9teHNmYi9teHNmYl9kcnYuaAo+IEBAIC0wLDAgKzEsNTggQEAKPiAr LyoKPiArICogQ29weXJpZ2h0IChDKSAyMDE2IE1hcmVrIFZhc3V0IDxtYXJleEBkZW54LmRlPgo+ ICsgKgo+ICsgKiBpLk1YMjMvaS5NWDI4L2kuTVg2U1ggTVhTRkIgTENEIGNvbnRyb2xsZXIgZHJp dmVyLgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCj4gKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCj4gKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCj4gKyAqIG9mIHRoZSBM aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgo+ICsgKiBUaGlz IHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1 bCwKPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgX19NWFNGQl9EUlZfSF9f Cj4gKyNkZWZpbmUgX19NWFNGQl9EUlZfSF9fCj4gKwo+ICtzdHJ1Y3QgbXhzZmJfZGV2ZGF0YSB7 Cj4gKwl1bnNpZ25lZCBpbnQJIHRyYW5zZmVyX2NvdW50Owo+ICsJdW5zaWduZWQgaW50CSBjdXJf YnVmOwo+ICsJdW5zaWduZWQgaW50CSBuZXh0X2J1ZjsKPiArCXVuc2lnbmVkIGludAkgZGVidWcw Owo+ICsJdW5zaWduZWQgaW50CSBoc193ZHRoX21hc2s7Cj4gKwl1bnNpZ25lZCBpbnQJIGhzX3dk dGhfc2hpZnQ7Cj4gKwl1bnNpZ25lZCBpbnQJIGlwdmVyc2lvbjsKPiArfTsKPiArCj4gK3N0cnVj dCBteHNmYl9yZ2Jfb3V0cHV0IHsKPiArCXN0cnVjdCBkcm1fY29ubmVjdG9yCWNvbm5lY3RvcjsK PiArCXN0cnVjdCBkcm1fZW5jb2RlcgllbmNvZGVyOwo+ICsJc3RydWN0IGRybV9wYW5lbAkqcGFu ZWw7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgbXhzZmJfZHJtX3ByaXZhdGUgewo+ICsJc3RydWN0IGNs awkJKmNsazsKPiArCXN0cnVjdCBjbGsJCSpjbGtfYXhpOwo+ICsJc3RydWN0IGNsawkJKmNsa19k aXNwX2F4aTsKPiArCXZvaWQgX19pb21lbQkJKmJhc2U7CS8qIHJlZ2lzdGVycyAqLwo+ICsKPiAr CXN0cnVjdCBkcm1fZmJkZXZfY21hCSpmYmRldjsKPiArCXN0cnVjdCBkcm1fY3J0YwkJY3J0YzsK PiArCXN0cnVjdCBkcm1fcGxhbmUJKnBsYW5lOwo+ICsJc3RydWN0IGRybV9hdG9taWNfc3RhdGUJ KnN0YXRlOwo+ICsKPiArCXN0cnVjdCBteHNmYl9yZ2Jfb3V0cHV0CW91dHB1dDsKPiArCj4gKwlj b25zdCBzdHJ1Y3QgbXhzZmJfZGV2ZGF0YSAqZGV2ZGF0YTsKPiArCWJvb2wgZW5hYmxlZDsKPiAr fTsKPiArCj4gKyNkZWZpbmUgY3J0Y190b19teHNmYl9wcml2KHgpCWNvbnRhaW5lcl9vZih4LCBz dHJ1Y3QgbXhzZmJfZHJtX3ByaXZhdGUsIGNydGMpCj4gKwo+ICtpbnQgbXhzZmJfc2V0dXBfY3J0 YyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKPiAraW50IG14c2ZiX2NyZWF0ZV9vdXRwdXRzKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYpOwo+ICt2b2lkIG14c2ZiX3NldF9zY2Fub3V0KHN0cnVjdCBt eHNmYl9kcm1fcHJpdmF0ZSAqbXhzZmIpOwo+ICsKPiArI2VuZGlmIC8qIF9fTVhTRkJfRFJWX0hf XyAqLwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXhzZmIvbXhzZmJfb3V0LmMgYi9k cml2ZXJzL2dwdS9kcm0vbXhzZmIvbXhzZmJfb3V0LmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ IGluZGV4IDAwMDAwMDAuLmZmYzRiMjkKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL214c2ZiL214c2ZiX291dC5jCj4gQEAgLTAsMCArMSwyNjQgQEAKPiArLyoKPiArICog Q29weXJpZ2h0IChDKSAyMDE2IE1hcmVrIFZhc3V0IDxtYXJleEBkZW54LmRlPgo+ICsgKgo+ICsg KiBUaGlzIGNvZGUgaXMgYmFzZWQgb24gZHJpdmVycy9ncHUvZHJtL2F0bWVsLWhsY2RjL2F0bWVs X2hsY2RjX291dHB1dC5jIDoKPiArICogQ29weXJpZ2h0IChDKSAyMDE0IFRyYXBoYW5kbGVyCj4g KyAqIENvcHlyaWdodCAoQykgMjAxNCBGcmVlIEVsZWN0cm9ucwo+ICsgKiBDb3B5cmlnaHQgKEMp IDIwMTQgQXRtZWwKPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgo+ICsgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQo+ICsgKiBhcyBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgo+ICsgKiBv ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KPiAr ICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsCj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKPiArICogR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiArICovCj4gKwo+ICsjaW5jbHVkZSA8bGludXgv b2ZfZ3JhcGguaD4KPiArCj4gKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5oPgo+ICsjaW5jbHVk ZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4K PiArI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1f ZmJfY21hX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9nZW1fY21hX2hlbHBlci5oPgo+ ICsjaW5jbHVkZSA8ZHJtL2RybV9wYW5lbC5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9wbGFuZV9o ZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gKwo+ICsjaW5jbHVkZSAibXhzZmJf ZHJ2LmgiCj4gKwo+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBteHNmYl9yZ2Jfb3V0cHV0ICoKPiAr ZHJtX2Nvbm5lY3Rvcl90b19teHNmYl9yZ2Jfb3V0cHV0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpj b25uZWN0b3IpCj4gK3sKPiArCXJldHVybiBjb250YWluZXJfb2YoY29ubmVjdG9yLCBzdHJ1Y3Qg bXhzZmJfcmdiX291dHB1dCwKPiArCQkJICAgIGNvbm5lY3Rvcik7Cj4gK30KPiArCj4gK3N0YXRp YyBpbmxpbmUgc3RydWN0IG14c2ZiX3JnYl9vdXRwdXQgKgo+ICtkcm1fZW5jb2Rlcl90b19teHNm Yl9yZ2Jfb3V0cHV0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKPiArewo+ICsJcmV0dXJu IGNvbnRhaW5lcl9vZihlbmNvZGVyLCBzdHJ1Y3QgbXhzZmJfcmdiX291dHB1dCwgZW5jb2Rlcik7 Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIG14c2ZiX3JnYl9lbmNvZGVyX2VuYWJsZShzdHJ1Y3Qg ZHJtX2VuY29kZXIgKmVuY29kZXIpCj4gK3sKPiArCXN0cnVjdCBteHNmYl9yZ2Jfb3V0cHV0ICpy Z2IgPQo+ICsJCQlkcm1fZW5jb2Rlcl90b19teHNmYl9yZ2Jfb3V0cHV0KGVuY29kZXIpOwo+ICsK PiArCWlmIChyZ2ItPnBhbmVsKSB7Cj4gKwkJZHJtX3BhbmVsX3ByZXBhcmUocmdiLT5wYW5lbCk7 Cj4gKwkJZHJtX3BhbmVsX2VuYWJsZShyZ2ItPnBhbmVsKTsKPiArCX0KPiArfQo+ICsKPiArc3Rh dGljIHZvaWQgbXhzZmJfcmdiX2VuY29kZXJfZGlzYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVu Y29kZXIpCj4gK3sKPiArCXN0cnVjdCBteHNmYl9yZ2Jfb3V0cHV0ICpyZ2IgPQo+ICsJCQlkcm1f ZW5jb2Rlcl90b19teHNmYl9yZ2Jfb3V0cHV0KGVuY29kZXIpOwo+ICsKPiArCWlmIChyZ2ItPnBh bmVsKSB7Cj4gKwkJZHJtX3BhbmVsX2Rpc2FibGUocmdiLT5wYW5lbCk7Cj4gKwkJZHJtX3BhbmVs X3VucHJlcGFyZShyZ2ItPnBhbmVsKTsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0 cnVjdAo+ICtkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3MgbXhzZmJfcGFuZWxfZW5jb2Rlcl9oZWxw ZXJfZnVuY3MgPSB7Cj4gKwkuZGlzYWJsZQk9IG14c2ZiX3JnYl9lbmNvZGVyX2Rpc2FibGUsCj4g KwkuZW5hYmxlCQk9IG14c2ZiX3JnYl9lbmNvZGVyX2VuYWJsZSwKPiArfTsKPiArCj4gK3N0YXRp YyB2b2lkIG14c2ZiX3JnYl9lbmNvZGVyX2Rlc3Ryb3koc3RydWN0IGRybV9lbmNvZGVyICplbmNv ZGVyKQo+ICt7Cj4gKwlkcm1fZW5jb2Rlcl9jbGVhbnVwKGVuY29kZXIpOwo+ICsJbWVtc2V0KGVu Y29kZXIsIDAsIHNpemVvZigqZW5jb2RlcikpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3Ry dWN0IGRybV9lbmNvZGVyX2Z1bmNzIG14c2ZiX3BhbmVsX2VuY29kZXJfZnVuY3MgPSB7Cj4gKwku ZGVzdHJveSA9IG14c2ZiX3JnYl9lbmNvZGVyX2Rlc3Ryb3ksCj4gK307Cj4gKwo+ICtzdGF0aWMg aW50IG14c2ZiX3BhbmVsX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9y KQo+ICt7Cj4gKwlzdHJ1Y3QgbXhzZmJfcmdiX291dHB1dCAqcmdiID0KPiArCQkJZHJtX2Nvbm5l Y3Rvcl90b19teHNmYl9yZ2Jfb3V0cHV0KGNvbm5lY3Rvcik7Cj4gKwo+ICsJaWYgKHJnYi0+cGFu ZWwpCj4gKwkJcmV0dXJuIHJnYi0+cGFuZWwtPmZ1bmNzLT5nZXRfbW9kZXMocmdiLT5wYW5lbCk7 Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgbXhzZmJfcmdiX21vZGVf dmFsaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiArCQkJCXN0cnVjdCBkcm1f ZGlzcGxheV9tb2RlICptb2RlKQo+ICt7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGlj IHN0cnVjdCBkcm1fZW5jb2RlciAqCj4gK214c2ZiX3JnYl9iZXN0X2VuY29kZXIoc3RydWN0IGRy bV9jb25uZWN0b3IgKmNvbm5lY3RvcikKPiArewo+ICsJc3RydWN0IG14c2ZiX3JnYl9vdXRwdXQg KnJnYiA9Cj4gKwkJCWRybV9jb25uZWN0b3JfdG9fbXhzZmJfcmdiX291dHB1dChjb25uZWN0b3Ip Owo+ICsKPiArCXJldHVybiAmcmdiLT5lbmNvZGVyOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qg c3RydWN0Cj4gK2RybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzIG14c2ZiX3BhbmVsX2Nvbm5lY3Rv cl9oZWxwZXJfZnVuY3MgPSB7Cj4gKwkuZ2V0X21vZGVzID0gbXhzZmJfcGFuZWxfZ2V0X21vZGVz LAo+ICsJLm1vZGVfdmFsaWQgPSBteHNmYl9yZ2JfbW9kZV92YWxpZCwKPiArCS5iZXN0X2VuY29k ZXIgPSBteHNmYl9yZ2JfYmVzdF9lbmNvZGVyLAo+ICt9Owo+ICsKPiArc3RhdGljIGVudW0gZHJt X2Nvbm5lY3Rvcl9zdGF0dXMKPiArbXhzZmJfcGFuZWxfY29ubmVjdG9yX2RldGVjdChzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBib29sIGZvcmNlKQo+ICt7Cj4gKwlzdHJ1Y3QgbXhz ZmJfcmdiX291dHB1dCAqcmdiID0KPiArCQkJZHJtX2Nvbm5lY3Rvcl90b19teHNmYl9yZ2Jfb3V0 cHV0KGNvbm5lY3Rvcik7Cj4gKwo+ICsJaWYgKHJnYi0+cGFuZWwpCj4gKwkJcmV0dXJuIGNvbm5l Y3Rvcl9zdGF0dXNfY29ubmVjdGVkOwo+ICsKPiArCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Rp c2Nvbm5lY3RlZDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgbXhzZmJfcGFuZWxfY29ubmVjdG9y X2Rlc3Ryb3koc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKPiArewo+ICsJc3RydWN0 IG14c2ZiX3JnYl9vdXRwdXQgKnJnYiA9Cj4gKwkJCWRybV9jb25uZWN0b3JfdG9fbXhzZmJfcmdi X291dHB1dChjb25uZWN0b3IpOwo+ICsKPiArCWlmIChyZ2ItPnBhbmVsKQo+ICsJCWRybV9wYW5l bF9kZXRhY2gocmdiLT5wYW5lbCk7Cj4gKwo+ICsJZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwKGNvbm5l Y3Rvcik7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5j cyBteHNmYl9wYW5lbF9jb25uZWN0b3JfZnVuY3MgPSB7Cj4gKwkuZHBtcwkJCT0gZHJtX2F0b21p Y19oZWxwZXJfY29ubmVjdG9yX2RwbXMsCj4gKwkuZGV0ZWN0CQkJPSBteHNmYl9wYW5lbF9jb25u ZWN0b3JfZGV0ZWN0LAo+ICsJLmZpbGxfbW9kZXMJCT0gZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVf Y29ubmVjdG9yX21vZGVzLAo+ICsJLmRlc3Ryb3kJCT0gbXhzZmJfcGFuZWxfY29ubmVjdG9yX2Rl c3Ryb3ksCj4gKwkucmVzZXQJCQk9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9yZXNldCwK PiArCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlCT0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9y X2R1cGxpY2F0ZV9zdGF0ZSwKPiArCS5hdG9taWNfZGVzdHJveV9zdGF0ZQk9IGRybV9hdG9taWNf aGVscGVyX2Nvbm5lY3Rvcl9kZXN0cm95X3N0YXRlLAo+ICt9Owo+ICsKPiArc3RhdGljIGludCBt eHNmYl9jaGVja19lbmRwb2ludChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLAo+ICsJCQkJY29uc3Qg c3RydWN0IG9mX2VuZHBvaW50ICplcCkKPiArewo+ICsJc3RydWN0IGRldmljZV9ub2RlICpucDsK PiArCXZvaWQgKm9iajsKPiArCj4gKwlucCA9IG9mX2dyYXBoX2dldF9yZW1vdGVfcG9ydF9wYXJl bnQoZXAtPmxvY2FsX25vZGUpOwo+ICsKPiArCW9iaiA9IG9mX2RybV9maW5kX3BhbmVsKG5wKTsK PiArCWlmICghb2JqKQo+ICsJCW9iaiA9IG9mX2RybV9maW5kX2JyaWRnZShucCk7Cj4gKwo+ICsJ b2Zfbm9kZV9wdXQobnApOwo+ICsKPiArCXJldHVybiBvYmogPyAwIDogLUVQUk9CRV9ERUZFUjsK PiArfQo+ICsKPiArc3RhdGljIGludCBteHNmYl9hdHRhY2hfZW5kcG9pbnQoc3RydWN0IGRybV9k ZXZpY2UgKmRybSwKPiArCQkJCSBjb25zdCBzdHJ1Y3Qgb2ZfZW5kcG9pbnQgKmVwKQo+ICt7Cj4g KwlzdHJ1Y3QgbXhzZmJfZHJtX3ByaXZhdGUgKm14c2ZiID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiAr CXN0cnVjdCBteHNmYl9yZ2Jfb3V0cHV0ICpvdXRwdXQgPSAmbXhzZmItPm91dHB1dDsKPiArCXN0 cnVjdCBkZXZpY2Vfbm9kZSAqbnA7Cj4gKwlzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbDsKPiArCXN0 cnVjdCBkcm1fYnJpZGdlICpicmlkZ2U7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWRybV9lbmNvZGVy X2hlbHBlcl9hZGQoJm91dHB1dC0+ZW5jb2RlciwKPiArCQkJICAgICAgICZteHNmYl9wYW5lbF9l bmNvZGVyX2hlbHBlcl9mdW5jcyk7Cj4gKwlyZXQgPSBkcm1fZW5jb2Rlcl9pbml0KGRybSwgJm91 dHB1dC0+ZW5jb2RlciwKPiArCQkJICAgICAgICZteHNmYl9wYW5lbF9lbmNvZGVyX2Z1bmNzLAo+ ICsJCQkgICAgICAgRFJNX01PREVfRU5DT0RFUl9OT05FLCBOVUxMKTsKPiArCWlmIChyZXQpCj4g KwkJcmV0dXJuIHJldDsKPiArCj4gKwlvdXRwdXQtPmVuY29kZXIucG9zc2libGVfY3J0Y3MgPSAw eDE7Cj4gKwo+ICsJbnAgPSBvZl9ncmFwaF9nZXRfcmVtb3RlX3BvcnRfcGFyZW50KGVwLT5sb2Nh bF9ub2RlKTsKPiArCj4gKwlyZXQgPSAtRVBST0JFX0RFRkVSOwo+ICsKPiArCXBhbmVsID0gb2Zf ZHJtX2ZpbmRfcGFuZWwobnApOwo+ICsJaWYgKHBhbmVsKSB7Cj4gKwkJb2Zfbm9kZV9wdXQobnAp Owo+ICsJCW91dHB1dC0+Y29ubmVjdG9yLmRwbXMgPSBEUk1fTU9ERV9EUE1TX09GRjsKPiArCQlv dXRwdXQtPmNvbm5lY3Rvci5wb2xsZWQgPSBEUk1fQ09OTkVDVE9SX1BPTExfQ09OTkVDVDsKPiAr CQlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJm91dHB1dC0+Y29ubmVjdG9yLAo+ICsJCQkJJm14 c2ZiX3BhbmVsX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOwo+ICsJCXJldCA9IGRybV9jb25uZWN0 b3JfaW5pdChkcm0sICZvdXRwdXQtPmNvbm5lY3RvciwKPiArCQkJCQkgJm14c2ZiX3BhbmVsX2Nv bm5lY3Rvcl9mdW5jcywKPiArCQkJCQkgRFJNX01PREVfQ09OTkVDVE9SX1Vua25vd24pOwo+ICsJ CWlmIChyZXQpCj4gKwkJCWdvdG8gZXJyX2VuY29kZXJfY2xlYW51cDsKPiArCj4gKwkJZHJtX21v ZGVfY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKCZvdXRwdXQtPmNvbm5lY3RvciwKPiArCQkJCQkJ ICAmb3V0cHV0LT5lbmNvZGVyKTsKPiArCj4gKwkJcmV0ID0gZHJtX3BhbmVsX2F0dGFjaChwYW5l bCwgJm91dHB1dC0+Y29ubmVjdG9yKTsKPiArCQlpZiAocmV0KSB7Cj4gKwkJCWRybV9jb25uZWN0 b3JfY2xlYW51cCgmb3V0cHV0LT5jb25uZWN0b3IpOwo+ICsJCQlnb3RvIGVycl9lbmNvZGVyX2Ns ZWFudXA7Cj4gKwkJfQo+ICsKPiArCQlvdXRwdXQtPnBhbmVsID0gcGFuZWw7Cj4gKwo+ICsJCXJl dHVybiAwOwo+ICsJfQo+ICsKPiArCWJyaWRnZSA9IG9mX2RybV9maW5kX2JyaWRnZShucCk7Cj4g KwlvZl9ub2RlX3B1dChucCk7Cj4gKwo+ICsJaWYgKGJyaWRnZSkgewo+ICsJCW91dHB1dC0+ZW5j b2Rlci5icmlkZ2UgPSBicmlkZ2U7Cj4gKwkJYnJpZGdlLT5lbmNvZGVyID0gJm91dHB1dC0+ZW5j b2RlcjsKPiArCQlyZXQgPSBkcm1fYnJpZGdlX2F0dGFjaChkcm0sIGJyaWRnZSk7Cj4gKwkJaWYg KCFyZXQpCj4gKwkJCXJldHVybiAwOwo+ICsJfQo+ICsKPiArZXJyX2VuY29kZXJfY2xlYW51cDoK PiArCWRybV9lbmNvZGVyX2NsZWFudXAoJm91dHB1dC0+ZW5jb2Rlcik7Cj4gKwo+ICsJcmV0dXJu IHJldDsKPiArfQo+ICsKPiAraW50IG14c2ZiX2NyZWF0ZV9vdXRwdXRzKHN0cnVjdCBkcm1fZGV2 aWNlICpkcm0pCj4gK3sKPiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZXBfbnAgPSBOVUxMOwo+ICsJ c3RydWN0IG9mX2VuZHBvaW50IGVwOwo+ICsJaW50IHJldDsKPiArCj4gKwlmb3JfZWFjaF9lbmRw b2ludF9vZl9ub2RlKGRybS0+ZGV2LT5vZl9ub2RlLCBlcF9ucCkgewo+ICsJCXJldCA9IG9mX2dy YXBoX3BhcnNlX2VuZHBvaW50KGVwX25wLCAmZXApOwo+ICsJCWlmICghcmV0KQo+ICsJCQlyZXQg PSBteHNmYl9jaGVja19lbmRwb2ludChkcm0sICZlcCk7Cj4gKwo+ICsJCWlmIChyZXQpIHsKPiAr CQkJb2Zfbm9kZV9wdXQoZXBfbnApOwo+ICsJCQlyZXR1cm4gcmV0Owo+ICsJCX0KPiArCX0KPiAr Cj4gKwlmb3JfZWFjaF9lbmRwb2ludF9vZl9ub2RlKGRybS0+ZGV2LT5vZl9ub2RlLCBlcF9ucCkg ewo+ICsJCXJldCA9IG9mX2dyYXBoX3BhcnNlX2VuZHBvaW50KGVwX25wLCAmZXApOwo+ICsJCWlm ICghcmV0KQo+ICsJCQlyZXQgPSBteHNmYl9hdHRhY2hfZW5kcG9pbnQoZHJtLCAmZXApOwo+ICsK PiArCQlpZiAocmV0KSB7Cj4gKwkJCW9mX25vZGVfcHV0KGVwX25wKTsKPiArCQkJcmV0dXJuIHJl dDsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL214c2ZiL214c2ZiX3JlZ3MuaCBiL2RyaXZlcnMvZ3B1L2RybS9teHNmYi9t eHNmYl9yZWdzLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLmU5YTAw NmEKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL214c2ZiL214c2ZiX3Jl Z3MuaAo+IEBAIC0wLDAgKzEsMTEyIEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCAoQykgMjAxMCBK dWVyZ2VuIEJlaXNlcnQsIFBlbmd1dHJvbml4Cj4gKyAqIENvcHlyaWdodCAoQykgMjAxNiBNYXJl ayBWYXN1dCA8bWFyZXhAZGVueC5kZT4KPiArICoKPiArICogaS5NWDIzL2kuTVgyOC9pLk1YNlNY IE1YU0ZCIExDRCBjb250cm9sbGVyIGRyaXZlci4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgo+ICsgKiBtb2Rp ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQo+ ICsgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy IHZlcnNpb24gMgo+ICsgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg bGF0ZXIgdmVyc2lvbi4KPiArICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gKyAqIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKPiArICog R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiArICovCj4gKwo+ ICsjaWZuZGVmIF9fTVhTRkJfUkVHU19IX18KPiArI2RlZmluZSBfX01YU0ZCX1JFR1NfSF9fCj4g Kwo+ICsjZGVmaW5lIFJFR19TRVQJNAo+ICsjZGVmaW5lIFJFR19DTFIJOAo+ICsKPiArI2RlZmlu ZSBMQ0RDX0NUUkwJCQkweDAwCj4gKyNkZWZpbmUgTENEQ19DVFJMMQkJCTB4MTAKPiArI2RlZmlu ZSBMQ0RDX1YzX1RSQU5TRkVSX0NPVU5UCQkweDIwCj4gKyNkZWZpbmUgTENEQ19WNF9UUkFOU0ZF Ul9DT1VOVAkJMHgzMAo+ICsjZGVmaW5lIExDRENfVjRfQ1VSX0JVRgkJCTB4NDAKPiArI2RlZmlu ZSBMQ0RDX1Y0X05FWFRfQlVGCQkweDUwCj4gKyNkZWZpbmUgTENEQ19WM19DVVJfQlVGCQkJMHgz MAo+ICsjZGVmaW5lIExDRENfVjNfTkVYVF9CVUYJCTB4NDAKPiArI2RlZmluZSBMQ0RDX1ZEQ1RS TDAJCQkweDcwCj4gKyNkZWZpbmUgTENEQ19WRENUUkwxCQkJMHg4MAo+ICsjZGVmaW5lIExDRENf VkRDVFJMMgkJCTB4OTAKPiArI2RlZmluZSBMQ0RDX1ZEQ1RSTDMJCQkweGEwCj4gKyNkZWZpbmUg TENEQ19WRENUUkw0CQkJMHhiMAo+ICsjZGVmaW5lIExDRENfVjRfREVCVUcwCQkJMHgxZDAKPiAr I2RlZmluZSBMQ0RDX1YzX0RFQlVHMAkJCTB4MWYwCj4gKwo+ICsjZGVmaW5lIENUUkxfU0ZUUlNU CQkJKDEgPDwgMzEpCj4gKyNkZWZpbmUgQ1RSTF9DTEtHQVRFCQkJKDEgPDwgMzApCj4gKyNkZWZp bmUgQ1RSTF9CWVBBU1NfQ09VTlQJCSgxIDw8IDE5KQo+ICsjZGVmaW5lIENUUkxfVlNZTkNfTU9E RQkJCSgxIDw8IDE4KQo+ICsjZGVmaW5lIENUUkxfRE9UQ0xLX01PREUJCSgxIDw8IDE3KQo+ICsj ZGVmaW5lIENUUkxfREFUQV9TRUxFQ1QJCSgxIDw8IDE2KQo+ICsjZGVmaW5lIENUUkxfU0VUX0JV U19XSURUSCh4KQkJKCgoeCkgJiAweDMpIDw8IDEwKQo+ICsjZGVmaW5lIENUUkxfR0VUX0JVU19X SURUSCh4KQkJKCgoeCkgPj4gMTApICYgMHgzKQo+ICsjZGVmaW5lIENUUkxfU0VUX1dPUkRfTEVO R1RIKHgpCQkoKCh4KSAmIDB4MykgPDwgOCkKPiArI2RlZmluZSBDVFJMX0dFVF9XT1JEX0xFTkdU SCh4KQkJKCgoeCkgPj4gOCkgJiAweDMpCj4gKyNkZWZpbmUgQ1RSTF9NQVNURVIJCQkoMSA8PCA1 KQo+ICsjZGVmaW5lIENUUkxfREYxNgkJCSgxIDw8IDMpCj4gKyNkZWZpbmUgQ1RSTF9ERjE4CQkJ KDEgPDwgMikKPiArI2RlZmluZSBDVFJMX0RGMjQJCQkoMSA8PCAxKQo+ICsjZGVmaW5lIENUUkxf UlVOCQkJKDEgPDwgMCkKPiArCj4gKyNkZWZpbmUgQ1RSTDFfRklGT19DTEVBUgkJKDEgPDwgMjEp Cj4gKyNkZWZpbmUgQ1RSTDFfU0VUX0JZVEVfUEFDS0FHSU5HKHgpCSgoKHgpICYgMHhmKSA8PCAx NikKPiArI2RlZmluZSBDVFJMMV9HRVRfQllURV9QQUNLQUdJTkcoeCkJKCgoeCkgPj4gMTYpICYg MHhmKQo+ICsKPiArI2RlZmluZSBUUkFOU0ZFUl9DT1VOVF9TRVRfVkNPVU5UKHgpCSgoKHgpICYg MHhmZmZmKSA8PCAxNikKPiArI2RlZmluZSBUUkFOU0ZFUl9DT1VOVF9HRVRfVkNPVU5UKHgpCSgo KHgpID4+IDE2KSAmIDB4ZmZmZikKPiArI2RlZmluZSBUUkFOU0ZFUl9DT1VOVF9TRVRfSENPVU5U KHgpCSgoeCkgJiAweGZmZmYpCj4gKyNkZWZpbmUgVFJBTlNGRVJfQ09VTlRfR0VUX0hDT1VOVCh4 KQkoKHgpICYgMHhmZmZmKQo+ICsKPiArI2RlZmluZSBWRENUUkwwX0VOQUJMRV9QUkVTRU5UCQko MSA8PCAyOCkKPiArI2RlZmluZSBWRENUUkwwX1ZTWU5DX0FDVF9ISUdICQkoMSA8PCAyNykKPiAr I2RlZmluZSBWRENUUkwwX0hTWU5DX0FDVF9ISUdICQkoMSA8PCAyNikKPiArI2RlZmluZSBWRENU UkwwX0RPVENMS19BQ1RfRkFMTElORwkoMSA8PCAyNSkKPiArI2RlZmluZSBWRENUUkwwX0VOQUJM RV9BQ1RfSElHSAkJKDEgPDwgMjQpCj4gKyNkZWZpbmUgVkRDVFJMMF9WU1lOQ19QRVJJT0RfVU5J VAkoMSA8PCAyMSkKPiArI2RlZmluZSBWRENUUkwwX1ZTWU5DX1BVTFNFX1dJRFRIX1VOSVQJKDEg PDwgMjApCj4gKyNkZWZpbmUgVkRDVFJMMF9IQUxGX0xJTkUJCSgxIDw8IDE5KQo+ICsjZGVmaW5l IFZEQ1RSTDBfSEFMRl9MSU5FX01PREUJCSgxIDw8IDE4KQo+ICsjZGVmaW5lIFZEQ1RSTDBfU0VU X1ZTWU5DX1BVTFNFX1dJRFRIKHgpICgoeCkgJiAweDNmZmZmKQo+ICsjZGVmaW5lIFZEQ1RSTDBf R0VUX1ZTWU5DX1BVTFNFX1dJRFRIKHgpICgoeCkgJiAweDNmZmZmKQo+ICsKPiArI2RlZmluZSBW RENUUkwyX1NFVF9IU1lOQ19QRVJJT0QoeCkJKCh4KSAmIDB4M2ZmZmYpCj4gKyNkZWZpbmUgVkRD VFJMMl9HRVRfSFNZTkNfUEVSSU9EKHgpCSgoeCkgJiAweDNmZmZmKQo+ICsKPiArI2RlZmluZSBW RENUUkwzX01VWF9TWU5DX1NJR05BTFMJKDEgPDwgMjkpCj4gKyNkZWZpbmUgVkRDVFJMM19WU1lO Q19PTkxZCQkoMSA8PCAyOCkKPiArI2RlZmluZSBTRVRfSE9SX1dBSVRfQ05UKHgpCQkoKCh4KSAm IDB4ZmZmKSA8PCAxNikKPiArI2RlZmluZSBHRVRfSE9SX1dBSVRfQ05UKHgpCQkoKCh4KSA+PiAx NikgJiAweGZmZikKPiArI2RlZmluZSBTRVRfVkVSVF9XQUlUX0NOVCh4KQkJKCh4KSAmIDB4ZmZm ZikKPiArI2RlZmluZSBHRVRfVkVSVF9XQUlUX0NOVCh4KQkJKCh4KSAmIDB4ZmZmZikKPiArCj4g KyNkZWZpbmUgVkRDVFJMNF9TRVRfRE9UQ0xLX0RMWSh4KQkoKCh4KSAmIDB4NykgPDwgMjkpIC8q IHY0IG9ubHkgKi8KPiArI2RlZmluZSBWRENUUkw0X0dFVF9ET1RDTEtfRExZKHgpCSgoKHgpID4+ IDI5KSAmIDB4NykgLyogdjQgb25seSAqLwo+ICsjZGVmaW5lIFZEQ1RSTDRfU1lOQ19TSUdOQUxT X09OCQkoMSA8PCAxOCkKPiArI2RlZmluZSBTRVRfRE9UQ0xLX0hfVkFMSURfREFUQV9DTlQoeCkJ KCh4KSAmIDB4M2ZmZmYpCj4gKwo+ICsjZGVmaW5lIERFQlVHMF9IU1lOQwkJCSgxIDwgMjYpCj4g KyNkZWZpbmUgREVCVUcwX1ZTWU5DCQkJKDEgPCAyNSkKPiArCj4gKyNkZWZpbmUgTVhTRkJfTUlO X1hSRVMJCQkxMjAKPiArI2RlZmluZSBNWFNGQl9NSU5fWVJFUwkJCTEyMAo+ICsjZGVmaW5lIE1Y U0ZCX01BWF9YUkVTCQkJMHhmZmZmCj4gKyNkZWZpbmUgTVhTRkJfTUFYX1lSRVMJCQkweGZmZmYK PiArCj4gKyNkZWZpbmUgUkVEIDAKPiArI2RlZmluZSBHUkVFTiAxCj4gKyNkZWZpbmUgQkxVRSAy Cj4gKyNkZWZpbmUgVFJBTlNQIDMKPiArCj4gKyNkZWZpbmUgU1RNTENESUZfOEJJVCAgMSAvKiBw aXhlbCBkYXRhIGJ1cyB0byB0aGUgZGlzcGxheSBpcyBvZiA4IGJpdCB3aWR0aCAqLwo+ICsjZGVm aW5lIFNUTUxDRElGXzE2QklUIDAgLyogcGl4ZWwgZGF0YSBidXMgdG8gdGhlIGRpc3BsYXkgaXMg b2YgMTYgYml0IHdpZHRoICovCj4gKyNkZWZpbmUgU1RNTENESUZfMThCSVQgMiAvKiBwaXhlbCBk YXRhIGJ1cyB0byB0aGUgZGlzcGxheSBpcyBvZiAxOCBiaXQgd2lkdGggKi8KPiArI2RlZmluZSBT VE1MQ0RJRl8yNEJJVCAzIC8qIHBpeGVsIGRhdGEgYnVzIHRvIHRoZSBkaXNwbGF5IGlzIG9mIDI0 IGJpdCB3aWR0aCAqLwo+ICsKPiArI2RlZmluZSBNWFNGQl9TWU5DX0RBVEFfRU5BQkxFX0hJR0hf QUNUCSgxIDw8IDYpCj4gKyNkZWZpbmUgTVhTRkJfU1lOQ19ET1RDTEtfRkFMTElOR19BQ1QJKDEg PDwgNykgLyogbmVnYXRpdmUgZWRnZSBzYW1wbGluZyAqLwo+ICsKPiArI2VuZGlmIC8qIF9fTVhT RkJfUkVHU19IX18gKi8KPiAtLSAKPiAyLjkuMwo+IAo+IF9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCj4gZHJpLWRldmVsIG1haWxpbmcgbGlzdAo+IGRyaS1k ZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAoKLS0gCkRhbmllbCBWZXR0ZXIKU29mdHdhcmUg RW5naW5lZXIsIEludGVsIENvcnBvcmF0aW9uCmh0dHA6Ly9ibG9nLmZmd2xsLmNoCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5n IGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVk ZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=