From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [RFC][PATCH 2/2] drm/arm: Add support for Mali Display Processors Date: Tue, 12 Apr 2016 17:58:11 +0200 Message-ID: <20160412155810.GH2510@phenom.ffwll.local> References: <1459527712-9488-1-git-send-email-Liviu.Dudau@arm.com> <1459527712-9488-3-git-send-email-Liviu.Dudau@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1459527712-9488-3-git-send-email-Liviu.Dudau@arm.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Liviu Dudau Cc: devicetree@vger.kernel.org, LKML , DRI devel List-Id: devicetree@vger.kernel.org T24gRnJpLCBBcHIgMDEsIDIwMTYgYXQgMDU6MjE6NTJQTSArMDEwMCwgTGl2aXUgRHVkYXUgd3Jv dGU6Cj4gQWRkIHN1cHBvcnQgZm9yIHRoZSBuZXcgZmFtaWx5IG9mIERpc3BsYXkgUHJvY2Vzc29y cyBmcm9tIEFSTSBMdGQuCj4gVGhpcyBjb21taXQgYWRkcyBiYXNpYyBzdXBwb3J0IGZvciBNYWxp IERQNTAwLCBEUDU1MCBhbmQgRFA2NTAKPiBwYXJ0cywgd2l0aCBvbmx5IHRoZSBkaXNwbGF5IGVu Z2luZSBiZWluZyBzdXBwb3J0ZWQgYXQgdGhlIG1vbWVudC4KPiAKPiBDYzogRGF2aWQgQnJvd24g PERhdmlkLkJyb3duQGFybS5jb20+Cj4gQ2M6IEJyaWFuIFN0YXJrZXkgPEJyaWFuLlN0YXJrZXlA YXJtLmNvbT4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBMaXZpdSBEdWRhdSA8TGl2aXUuRHVkYXVAYXJt LmNvbT4KCk9rLCBvbiAybmQgbG9vayBzb21ldGhpbmcgcHV6emxpbmc6IFdoZXJlIGFyZSB0aGUK ZHJtX2VuY29kZXIvZHJtX2Nvbm5lY3RvcnMgaW4gdGhpcyBkcml2ZXI/IFNvbWVob3cgSSB0aGlu ayBqdXN0IHRoZXNlCnBhcnRzIGhlcmUgd29uJ3QgbGlnaHQgdXAgYSBsb3QgLi4uCi1EYW5pZWwK Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9hcm0vS2NvbmZpZyAgICAgICAgIHwgIDE1ICsKPiAg ZHJpdmVycy9ncHUvZHJtL2FybS9NYWtlZmlsZSAgICAgICAgfCAgIDIgKwo+ICBkcml2ZXJzL2dw dS9kcm0vYXJtL21hbGlkcF9jcnRjLmMgICB8IDI3NiArKysrKysrKysrKysrCj4gIGRyaXZlcnMv Z3B1L2RybS9hcm0vbWFsaWRwX2Rydi5jICAgIHwgNDg2ICsrKysrKysrKysrKysrKysrKysrKysK PiAgZHJpdmVycy9ncHUvZHJtL2FybS9tYWxpZHBfZHJ2LmggICAgfCAgNDkgKysrCj4gIGRyaXZl cnMvZ3B1L2RybS9hcm0vbWFsaWRwX2h3LmMgICAgIHwgNzc3ICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKwo+ICBkcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9ody5oICAgICB8 IDE5MiArKysrKysrKysKPiAgZHJpdmVycy9ncHUvZHJtL2FybS9tYWxpZHBfcGxhbmVzLmMgfCAz NDIgKysrKysrKysrKysrKysrKwo+ICBkcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9yZWdzLmgg ICB8IDE3MiArKysrKysrKwo+ICA5IGZpbGVzIGNoYW5nZWQsIDIzMTEgaW5zZXJ0aW9ucygrKQo+ ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2FybS9tYWxpZHBfY3J0Yy5jCj4g IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9kcnYuYwo+ICBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2FybS9tYWxpZHBfZHJ2LmgKPiAgY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX2h3LmMKPiAgY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX2h3LmgKPiAgY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX3BsYW5lcy5jCj4gIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9yZWdzLmgKPiAKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2FybS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL2FybS9L Y29uZmlnCj4gaW5kZXggZWFlZDQ1NC4uZTViNWI2YiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vYXJtL0tjb25maWcKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYXJtL0tjb25maWcKPiBA QCAtMjUsMyArMjUsMTggQEAgY29uZmlnIERSTV9IRExDRF9TSE9XX1VOREVSUlVOCj4gIAkgIEVu YWJsZSB0aGlzIG9wdGlvbiB0byBzaG93IGluIHJlZCBjb2xvdXIgdGhlIHBpeGVscyB0aGF0IHRo ZQo+ICAJICBIRExDRCBkZXZpY2UgZGlkIG5vdCBmZXRjaCBmcm9tIGZyYW1lYnVmZmVyIGR1ZSB0 byB1bmRlcnJ1bgo+ICAJICBjb25kaXRpb25zLgo+ICsKPiArY29uZmlnIERSTV9NQUxJX0RJU1BM QVkKPiArCXRyaXN0YXRlICJBUk0gTWFsaSBEaXNwbGF5IFByb2Nlc3NvciIKPiArCWRlcGVuZHMg b24gRFJNICYmIE9GICYmIChBUk0gfHwgQVJNNjQpCj4gKwlkZXBlbmRzIG9uIENPTU1PTl9DTEsK PiArCXNlbGVjdCBEUk1fQVJNCj4gKwlzZWxlY3QgRFJNX0tNU19IRUxQRVIKPiArCXNlbGVjdCBE Uk1fS01TX0NNQV9IRUxQRVIKPiArCXNlbGVjdCBEUk1fR0VNX0NNQV9IRUxQRVIKPiArCXNlbGVj dCBWSURFT01PREVfSEVMUEVSUwo+ICsJaGVscAo+ICsJICBDaG9vc2UgdGhpcyBvcHRpb24gaWYg eW91IHdhbnQgdG8gY29tcGlsZSB0aGUgQVJNIE1hbGkgRGlzcGxheQo+ICsJICBQcm9jZXNzb3Ig ZHJpdmVyLiBJdCBzdXBwb3J0cyBhbGwgdGhlIHZhcmlhbnRzIG9mIHRoZSBoYXJkd2FyZS4KPiAr Cj4gKwkgIElmIGNvbXBpbGVkIGFzIGEgbW9kdWxlIGl0IHdpbGwgYmUgY2FsbGVkIG1hbGlkcC4K PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FybS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1 L2RybS9hcm0vTWFrZWZpbGUKPiBpbmRleCA4OWRjYjdiLi4zZTc2ZTZjIDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9hcm0vTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYXJt L01ha2VmaWxlCj4gQEAgLTEsMiArMSw0IEBACj4gIGhkbGNkLXkgOj0gaGRsY2RfZHJ2Lm8gaGRs Y2RfY3J0Yy5vCj4gIG9iai0kKENPTkZJR19EUk1fSERMQ0QpCSs9IGhkbGNkLm8KPiArbWFsaWRw LXkgOj0gbWFsaWRwX2Rydi5vIG1hbGlkcF9ody5vIG1hbGlkcF9wbGFuZXMubyBtYWxpZHBfY3J0 Yy5vCj4gK29iai0kKENPTkZJR19EUk1fTUFMSV9ESVNQTEFZKQkrPSBtYWxpZHAubwo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9jcnRjLmMgYi9kcml2ZXJzL2dwdS9k cm0vYXJtL21hbGlkcF9jcnRjLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAw MDAuLmFhNDlmZDQKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FybS9t YWxpZHBfY3J0Yy5jCj4gQEAgLTAsMCArMSwyNzYgQEAKPiArLyoKPiArICogKEMpIENPUFlSSUdI VCAyMDE2IEFSTSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+ICsgKiBBdXRob3I6IExp dml1IER1ZGF1IDxMaXZpdS5EdWRhdUBhcm0uY29tPgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZSBhbmQgaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUKPiArICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQo+ICsgKiBGb3VuZGF0aW9uLCBhbmQgYW55IHVzZSBi eSB5b3Ugb2YgdGhpcyBwcm9ncmFtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zCj4gKyAqIG9mIHN1 Y2ggR05VIGxpY2VuY2UuCj4gKyAqCj4gKyAqIEFSTSBNYWxpIERQNTAwL0RQNTUwL0RQNjUwIGRy aXZlciAoY3J0YyBvcGVyYXRpb25zKQo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxkcm0vZHJtUC5o Pgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWMuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fYXRv bWljX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+Cj4gKyNpbmNsdWRlIDxk cm0vZHJtX2NydGNfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KPiArI2luY2x1 ZGUgPHZpZGVvL3ZpZGVvbW9kZS5oPgo+ICsKPiArI2luY2x1ZGUgIm1hbGlkcF9kcnYuaCIKPiAr I2luY2x1ZGUgIm1hbGlkcF9ody5oIgo+ICsKPiArc3RhdGljIGJvb2wgbWFsaWRwX2NydGNfbW9k ZV9maXh1cChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gKwkJCQkgICBjb25zdCBzdHJ1Y3QgZHJt X2Rpc3BsYXlfbW9kZSAqbW9kZSwKPiArCQkJCSAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICph ZGp1c3RlZF9tb2RlKQo+ICt7Cj4gKwlzdHJ1Y3QgbWFsaWRwX2RybSAqbWFsaWRwID0gY3J0Y190 b19tYWxpZHBfZGV2aWNlKGNydGMpOwo+ICsJc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2 ID0gbWFsaWRwLT5kZXY7Cj4gKwo+ICsJLyoKPiArCSAqIGNoZWNrIHRoYXQgdGhlIGhhcmR3YXJl IGNhbiBkcml2ZSB0aGUgcmVxdWlyZWQgY2xvY2sgcmF0ZSwKPiArCSAqIGJ1dCBza2lwIHRoZSBj aGVjayBpZiB0aGUgY2xvY2sgaXMgbWVhbnQgdG8gYmUgZGlzYWJsZWQgKHJlcV9yYXRlID0gMCkK PiArCSAqLwo+ICsJbG9uZyByYXRlLCByZXFfcmF0ZSA9IG1vZGUtPmNydGNfY2xvY2sgKiAxMDAw Owo+ICsKPiArCWlmIChyZXFfcmF0ZSkgewo+ICsJCXJhdGUgPSBjbGtfcm91bmRfcmF0ZShod2Rl di0+bWNsaywgcmVxX3JhdGUpOwo+ICsJCWlmIChyYXRlIDwgcmVxX3JhdGUpIHsKPiArCQkJRFJN X0RFQlVHX0RSSVZFUigibWNsayBjbG9jayB1bmFibGUgdG8gcmVhY2ggJWQga0h6XG4iLAo+ICsJ CQkJCSBtb2RlLT5jcnRjX2Nsb2NrKTsKPiArCQkJcmV0dXJuIGZhbHNlOwo+ICsJCX0KPiArCj4g KwkJcmF0ZSA9IGNsa19yb3VuZF9yYXRlKGh3ZGV2LT5weGxjbGssIHJlcV9yYXRlKTsKPiArCQlp ZiAocmF0ZSAhPSByZXFfcmF0ZSkgewo+ICsJCQlEUk1fREVCVUdfRFJJVkVSKCJweGxjbGsgZG9l c24ndCBzdXBwb3J0ICVsZCBIelxuIiwKPiArCQkJCQkgcmVxX3JhdGUpOwo+ICsJCQlyZXR1cm4g ZmFsc2U7Cj4gKwkJfQo+ICsKPiArCQlhZGp1c3RlZF9tb2RlLT5jcnRjX2Nsb2NrID0gcmF0ZSAv IDEwMDA7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHRydWU7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IG1hbGlkcF9jcnRjX21vZGVfc2V0X25vZmIoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ICt7Cj4g KwlzdHJ1Y3QgbWFsaWRwX2RybSAqbWFsaWRwID0gY3J0Y190b19tYWxpZHBfZGV2aWNlKGNydGMp Owo+ICsJc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2ID0gbWFsaWRwLT5kZXY7Cj4gKwlz dHJ1Y3QgdmlkZW9tb2RlIHZtOwo+ICsKPiArCWRybV9kaXNwbGF5X21vZGVfdG9fdmlkZW9tb2Rl KCZjcnRjLT5zdGF0ZS0+YWRqdXN0ZWRfbW9kZSwgJnZtKTsKPiArCj4gKwkvKiBtY2xrIG5lZWRz IHRvIGJlIHNldCB0byB0aGUgc2FtZSBvciBoaWdoZXIgcmF0ZSB0aGFuIHB4bGNsayAqLwo+ICsJ Y2xrX3NldF9yYXRlKGh3ZGV2LT5tY2xrLCBjcnRjLT5zdGF0ZS0+YWRqdXN0ZWRfbW9kZS5jcnRj X2Nsb2NrICogMTAwMCk7Cj4gKwljbGtfc2V0X3JhdGUoaHdkZXYtPnB4bGNsaywgY3J0Yy0+c3Rh dGUtPmFkanVzdGVkX21vZGUuY3J0Y19jbG9jayAqIDEwMDApOwo+ICsKPiArCWh3ZGV2LT5tb2Rl c2V0KGh3ZGV2LCAmdm0pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBtYWxpZHBfY3J0Y19lbmFi bGUoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ICt7Cj4gKwlzdHJ1Y3QgbWFsaWRwX2RybSAqbWFs aWRwID0gY3J0Y190b19tYWxpZHBfZGV2aWNlKGNydGMpOwo+ICsJc3RydWN0IG1hbGlkcF9od19k ZXZpY2UgKmh3ZGV2ID0gbWFsaWRwLT5kZXY7Cj4gKwo+ICsJY2xrX3ByZXBhcmVfZW5hYmxlKGh3 ZGV2LT5weGxjbGspOwo+ICsJaHdkZXYtPmxlYXZlX2NvbmZpZ19tb2RlKGh3ZGV2KTsKPiArfQo+ ICsKPiArc3RhdGljIHZvaWQgbWFsaWRwX2NydGNfZGlzYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNy dGMpCj4gK3sKPiArCXN0cnVjdCBtYWxpZHBfZHJtICptYWxpZHAgPSBjcnRjX3RvX21hbGlkcF9k ZXZpY2UoY3J0Yyk7Cj4gKwlzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYgPSBtYWxpZHAt PmRldjsKPiArCj4gKwlpZiAoY3J0Yy0+ZW5hYmxlZCkgewo+ICsJCWh3ZGV2LT5lbnRlcl9jb25m aWdfbW9kZShod2Rldik7Cj4gKwkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGh3ZGV2LT5weGxjbGsp Owo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IG1hbGlkcF9jcnRjX2F0b21pY19jaGVjayhz dHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gKwkJCQkgICAgc3RydWN0IGRybV9jcnRjX3N0YXRlICpz dGF0ZSkKPiArewo+ICsJc3RydWN0IG1hbGlkcF9kcm0gKm1hbGlkcCA9IGNydGNfdG9fbWFsaWRw X2RldmljZShjcnRjKTsKPiArCXN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2RldiA9IG1hbGlk cC0+ZGV2Owo+ICsJc3RydWN0IGRybV9wbGFuZSAqcGxhbmU7Cj4gKwlzdHJ1Y3QgZHJtX3BsYW5l X3N0YXRlICpwc3RhdGU7Cj4gKwl1MzIgcm90X21lbV9mcmVlLCByb3RfbWVtX3VzYWJsZTsKPiAr CWludCByb3RhdGVkX3BsYW5lcyA9IDA7Cj4gKwo+ICsJLyoKPiArCSAqIGNoZWNrIGlmIHRoZXJl IGlzIGVub3VnaCByb3RhdGlvbiBtZW1vcnkgYXZhaWxhYmxlIGZvciBwbGFuZXMKPiArCSAqIHRo YXQgbmVlZCA5MMKwIGFuZCAyNzDCsCByb3RhdGlvbi4gRWFjaCBwbGFuZSBoYXMgc2V0IGl0cyBy ZXF1aXJlZAo+ICsJICogbWVtb3J5IHNpemUgaW4gdGhlIC0+cGxhbmVfY2hlY2soKSBjYWxsYmFj aywgaGVyZSB3ZSBvbmx5IG1ha2UKPiArCSAqIHN1cmUgdGhhdCB0aGUgc3VtcyBhcmUgbGVzcyB0 aGF0IHRoZSB0b3RhbCB1c2FibGUgbWVtb3J5Lgo+ICsJICoKPiArCSAqIFRoZSByb3RhdGlvbiBt ZW1vcnkgYWxsb2NhdGlvbiBhbGdvcml0aG0gKGZvciBlYWNoIHBsYW5lKToKPiArCSAqICBhLiBJ ZiBubyBtb3JlIHJvdGF0ZWQgcGxhbmVzIGV4aXN0LCBhbGwgcmVtYWluaW5nIHJvdGF0ZQo+ICsJ ICogICAgIG1lbW9yeSBpbiB0aGUgYmFuayBpcyBhdmFpbGFibGUgZm9yIHVzZSBieSB0aGUgcGxh bmUuCj4gKwkgKiAgYi4gSWYgb3RoZXIgcm90YXRlZCBwbGFuZXMgZXhpc3QsIGFuZCBwbGFuZSdz IGxheWVyIElEIGlzCj4gKwkgKiAgICAgREVfVklERU8xLCBpdCBjYW4gdXNlIGFsbCB0aGUgbWVt b3J5IGZyb20gZmlyc3QgYmFuayBpZgo+ICsJICogICAgIHNlY29uZGFyeSByb3RhdGlvbiBtZW1v cnkgYmFuayBpcyBhdmFpbGFibGUsIG90aGVyd2lzZSBpdCBjYW4KPiArCSAqICAgICB1c2UgdXAg dG8gaGFsZiB0aGUgYmFuaydzIG1lbW9yeS4KPiArCSAqICBjLiBJZiBvdGhlciByb3RhdGVkIHBs YW5lcyBleGlzdCwgYW5kIHBsYW5lJ3MgbGF5ZXIgSUQgaXMgbm90Cj4gKwkgKiAgICAgREVfVklE RU8xLCBpdCBjYW4gdXNlIGhhbGYgb2YgdGhlIGF2YWlsYWJsZSBtZW1vcnkKPiArCSAqCj4gKwkg KiBOb3RlOiB0aGlzIGFsZ29yaXRobSBhc3N1bWVzIHRoYXQgdGhlIG9yZGVyIGluIHdoaWNoIHRo ZSBwbGFuZXMgYXJlCj4gKwkgKiBjaGVja2VkIGFsd2F5cyBoYXMgREVfVklERU8xIHBsYW5lIGZp cnN0IGluIHRoZSBsaXN0IGlmIGl0IGlzCj4gKwkgKiByb3RhdGVkLiBCZWNhdXNlIHRoYXQgaXMg aG93IHdlIGNyZWF0ZSB0aGUgcGxhbmVzIGluIHRoZSBmaXJzdAo+ICsJICogcGxhY2UsIHVuZGVy IGN1cnJlbnQgRFJNIHZlcnNpb24gdGhpbmdzIHdvcmssIGJ1dCBpZiBldmVyIHRoZSBvcmRlcgo+ ICsJICogaW4gd2hpY2ggZHJtX2F0b21pY19jcnRjX3N0YXRlX2Zvcl9lYWNoX3BsYW5lKCkgaXRl cmF0ZXMgb3ZlciBwbGFuZXMKPiArCSAqIGNoYW5nZXMsIHdlIG5lZWQgdG8gcHJlLXNvcnQgdGhl IHBsYW5lcyBiZWZvcmUgdmFsaWRhdGlvbi4KPiArCSAqLwo+ICsKPiArCS8qIGZpcnN0IGNvdW50 IHRoZSBudW1iZXIgb2Ygcm90YXRlZCBwbGFuZXMgKi8KPiArCWRybV9hdG9taWNfY3J0Y19zdGF0 ZV9mb3JfZWFjaF9wbGFuZShwbGFuZSwgc3RhdGUpIHsKPiArCQlwc3RhdGUgPSBkcm1fYXRvbWlj X2dldF9wbGFuZV9zdGF0ZShzdGF0ZS0+c3RhdGUsIHBsYW5lKTsKPiArCQlpZiAocHN0YXRlLT5y b3RhdGlvbiAmIE1BTElEUF9ST1RBVEVEX01BU0spCj4gKwkJCXJvdGF0ZWRfcGxhbmVzKys7Cj4g Kwl9Cj4gKwo+ICsJcm90X21lbV9mcmVlID0gaHdkZXYtPnJvdGF0aW9uX21lbW9yeVswXTsKPiAr CS8qCj4gKwkgKiBpZiB3ZSBoYXZlIG1vcmUgdGhhbiAxIHBsYW5lIHVzaW5nIHJvdGF0aW9uIG1l bW9yeSwgdXNlIHRoZSBzZWNvbmQKPiArCSAqIGJsb2NrIG9mIHJvdGF0aW9uIG1lbW9yeSBhcyB3 ZWxsCj4gKwkgKi8KPiArCWlmIChyb3RhdGVkX3BsYW5lcyA+IDEpCj4gKwkJcm90X21lbV9mcmVl ICs9IGh3ZGV2LT5yb3RhdGlvbl9tZW1vcnlbMV07Cj4gKwo+ICsJLyogbm93IHZhbGlkYXRlIHRo ZSByb3RhdGlvbiBtZW1vcnkgcmVxdWlyZW1lbnRzICovCj4gKwlkcm1fYXRvbWljX2NydGNfc3Rh dGVfZm9yX2VhY2hfcGxhbmUocGxhbmUsIHN0YXRlKSB7Cj4gKwkJc3RydWN0IG1hbGlkcF9wbGFu ZSAqbXAgPSB0b19tYWxpZHBfcGxhbmUocGxhbmUpOwo+ICsKPiArCQlwc3RhdGUgPSBkcm1fYXRv bWljX2dldF9wbGFuZV9zdGF0ZShzdGF0ZS0+c3RhdGUsIHBsYW5lKTsKPiArCQlpZiAocHN0YXRl LT5yb3RhdGlvbiAmIE1BTElEUF9ST1RBVEVEX01BU0spIHsKPiArCQkJLyogcHJvY2VzcyBjdXJy ZW50IHBsYW5lICovCj4gKwkJCXJvdGF0ZWRfcGxhbmVzLS07Cj4gKwo+ICsJCQlpZiAoIXJvdGF0 ZWRfcGxhbmVzKSB7Cj4gKwkJCQkvKiBubyBtb3JlIHJvdGF0ZWQgcGxhbmVzLCB3ZSBjYW4gdXNl IHdoYXQncyBsZWZ0ICovCj4gKwkJCQlyb3RfbWVtX3VzYWJsZSA9IHJvdF9tZW1fZnJlZTsKPiAr CQkJfSBlbHNlIHsKPiArCQkJCWlmICgobXAtPmxheWVyLT5pZCAhPSBERV9WSURFTzEpIHx8Cj4g KwkJCQkgICAgKGh3ZGV2LT5yb3RhdGlvbl9tZW1vcnlbMV0gPT0gMCkpCj4gKwkJCQkJcm90X21l bV91c2FibGUgPSByb3RfbWVtX2ZyZWUgLyAyOwo+ICsJCQkJZWxzZQo+ICsJCQkJCXJvdF9tZW1f dXNhYmxlID0gaHdkZXYtPnJvdGF0aW9uX21lbW9yeVswXTsKPiArCQkJfQo+ICsKPiArCQkJcm90 X21lbV9mcmVlIC09IHJvdF9tZW1fdXNhYmxlOwo+ICsKPiArCQkJaWYgKG1wLT5yb3RtZW1fc2l6 ZSA+IHJvdF9tZW1fdXNhYmxlKQo+ICsJCQkJcmV0dXJuIC1FSU5WQUw7Cj4gKwkJfQo+ICsJfQo+ ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBtYWxpZHBfY3J0Y19hdG9t aWNfYmVnaW4oc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ICsJCQkJICAgICBzdHJ1Y3QgZHJtX2Ny dGNfc3RhdGUgKm9sZF9zdGF0ZSkKPiArewo+ICsJc3RydWN0IG1hbGlkcF9kcm0gKm1hbGlkcCA9 IGNydGNfdG9fbWFsaWRwX2RldmljZShjcnRjKTsKPiArCj4gKwlpZiAoY3J0Yy0+c3RhdGUtPmV2 ZW50KSB7Cj4gKwkJc3RydWN0IGRybV9wZW5kaW5nX3ZibGFua19ldmVudCAqZXZlbnQgPSBjcnRj LT5zdGF0ZS0+ZXZlbnQ7Cj4gKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKPiArCj4gKwkJY3J0Yy0+ c3RhdGUtPmV2ZW50ID0gTlVMTDsKPiArCQlldmVudC0+cGlwZSA9IGRybV9jcnRjX2luZGV4KGNy dGMpOwo+ICsKPiArCQlXQVJOX09OKGRybV9jcnRjX3ZibGFua19nZXQoY3J0YykgIT0gMCk7Cj4g Kwo+ICsJCXNwaW5fbG9ja19pcnFzYXZlKCZjcnRjLT5kZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsK PiArCQlsaXN0X2FkZF90YWlsKCZldmVudC0+YmFzZS5saW5rLCAmbWFsaWRwLT5ldmVudF9saXN0 KTsKPiArCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcnRjLT5kZXYtPmV2ZW50X2xvY2ssIGZs YWdzKTsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQgbWFsaWRwX2NydGNfYXRvbWljX2Zs dXNoKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiArCQkJCSAgICAgc3RydWN0IGRybV9jcnRjX3N0 YXRlICpvbGRfc3RhdGUpCj4gK3sKPiArCXN0cnVjdCBtYWxpZHBfZHJtICptYWxpZHAgPSBjcnRj X3RvX21hbGlkcF9kZXZpY2UoY3J0Yyk7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gY3J0 Yy0+ZGV2Owo+ICsJaW50IHJldCA9IG1hbGlkcF93YWl0X2NvbmZpZ192YWxpZChkcm0pOwo+ICsK PiArCWlmICghcmV0KSB7Cj4gKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKPiArCQlzdHJ1Y3QgZHJt X3BlbmRpbmdfdmJsYW5rX2V2ZW50ICplOwo+ICsKPiArCQlzcGluX2xvY2tfaXJxc2F2ZSgmZHJt LT5ldmVudF9sb2NrLCBmbGFncyk7Cj4gKwkJZSA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbCgm bWFsaWRwLT5ldmVudF9saXN0LCB0eXBlb2YoKmUpLAo+ICsJCQkJCSAgICAgYmFzZS5saW5rKTsK PiArCQlpZiAoZSkgewo+ICsJCQlsaXN0X2RlbCgmZS0+YmFzZS5saW5rKTsKPiArCQkJZHJtX2Ny dGNfc2VuZF92YmxhbmtfZXZlbnQoJm1hbGlkcC0+Y3J0YywgZSk7Cj4gKwkJCWRybV9jcnRjX3Zi bGFua19wdXQoJm1hbGlkcC0+Y3J0Yyk7Cj4gKwkJfQo+ICsJCXNwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJmRybS0+ZXZlbnRfbG9jaywgZmxhZ3MpOwo+ICsJfSBlbHNlIHsKPiArCQlEUk1fREVCVUdf RFJJVkVSKCJ0aW1lZCBvdXQgd2FpdGluZyBmb3IgdXBkYXRlZCBjb25maWd1cmF0aW9uXG4iKTsK PiArCX0KPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVu Y3MgbWFsaWRwX2NydGNfaGVscGVyX2Z1bmNzID0gewo+ICsJLm1vZGVfZml4dXAgPSBtYWxpZHBf Y3J0Y19tb2RlX2ZpeHVwLAo+ICsJLm1vZGVfc2V0ID0gZHJtX2hlbHBlcl9jcnRjX21vZGVfc2V0 LAo+ICsJLm1vZGVfc2V0X2Jhc2UgPSBkcm1faGVscGVyX2NydGNfbW9kZV9zZXRfYmFzZSwKPiAr CS5tb2RlX3NldF9ub2ZiID0gbWFsaWRwX2NydGNfbW9kZV9zZXRfbm9mYiwKPiArCS5lbmFibGUg PSBtYWxpZHBfY3J0Y19lbmFibGUsCj4gKwkuZGlzYWJsZSA9IG1hbGlkcF9jcnRjX2Rpc2FibGUs Cj4gKwkuYXRvbWljX2NoZWNrID0gbWFsaWRwX2NydGNfYXRvbWljX2NoZWNrLAo+ICsJLmF0b21p Y19iZWdpbiA9IG1hbGlkcF9jcnRjX2F0b21pY19iZWdpbiwKPiArCS5hdG9taWNfZmx1c2ggPSBt YWxpZHBfY3J0Y19hdG9taWNfZmx1c2gsCj4gK307Cj4gKwo+ICtzdGF0aWMgdm9pZCBtYWxpZHBf Y3J0Y19kZXN0cm95KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiArewo+ICsJc3RydWN0IG1hbGlk cF9kcm0gKm1hbGlkcCA9IGNydGNfdG9fbWFsaWRwX2RldmljZShjcnRjKTsKPiArCXN0cnVjdCBt YWxpZHBfaHdfZGV2aWNlICpod2RldiA9IG1hbGlkcC0+ZGV2Owo+ICsKPiArCWNsa19kaXNhYmxl X3VucHJlcGFyZShod2Rldi0+cHhsY2xrKTsKPiArCWNsa19kaXNhYmxlX3VucHJlcGFyZShod2Rl di0+bWNsayk7Cj4gKwlkcm1fY3J0Y19jbGVhbnVwKGNydGMpOwo+ICt9Cj4gKwo+ICtzdGF0aWMg Y29uc3Qgc3RydWN0IGRybV9jcnRjX2Z1bmNzIG1hbGlkcF9jcnRjX2Z1bmNzID0gewo+ICsJLmRl c3Ryb3kgPSBtYWxpZHBfY3J0Y19kZXN0cm95LAo+ICsJLnNldF9jb25maWcgPSBkcm1fYXRvbWlj X2hlbHBlcl9zZXRfY29uZmlnLAo+ICsJLnBhZ2VfZmxpcCA9IGRybV9hdG9taWNfaGVscGVyX3Bh Z2VfZmxpcCwKPiArCS5yZXNldCA9IGRybV9hdG9taWNfaGVscGVyX2NydGNfcmVzZXQsCj4gKwku YXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2NydGNfZHVwbGljYXRl X3N0YXRlLAo+ICsJLmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY3J0 Y19kZXN0cm95X3N0YXRlLAo+ICt9Owo+ICsKPiAraW50IG1hbGlkcF9jcnRjX2luaXQoc3RydWN0 IGRybV9kZXZpY2UgKmRybSkKPiArewo+ICsJc3RydWN0IG1hbGlkcF9kcm0gKm1hbGlkcCA9IGRy bS0+ZGV2X3ByaXZhdGU7Cj4gKwlzdHJ1Y3QgZHJtX3BsYW5lICpwcmltYXJ5ID0gTlVMTCwgKnBs YW5lOwo+ICsJaW50IHJldDsKPiArCj4gKwlkcm1fZm9yX2VhY2hfcGxhbmUocGxhbmUsIGRybSkg ewo+ICsJCWlmIChwbGFuZS0+dHlwZSA9PSBEUk1fUExBTkVfVFlQRV9QUklNQVJZKSB7Cj4gKwkJ CXByaW1hcnkgPSBwbGFuZTsKPiArCQkJYnJlYWs7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCWlmICgh cHJpbWFyeSkgewo+ICsJCURSTV9FUlJPUigibm8gcHJpbWFyeSBwbGFuZSBmb3VuZFxuIik7Cj4g KwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gZHJtX2NydGNfaW5pdF93aXRo X3BsYW5lcyhkcm0sICZtYWxpZHAtPmNydGMsIHByaW1hcnksIE5VTEwsCj4gKwkJCQkJJm1hbGlk cF9jcnRjX2Z1bmNzLCBOVUxMKTsKPiArCj4gKwlpZiAocmV0KSB7Cj4gKwkJbWFsaWRwX2RlX3Bs YW5lc19kZXN0cm95KGRybSk7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlkcm1fY3J0 Y19oZWxwZXJfYWRkKCZtYWxpZHAtPmNydGMsICZtYWxpZHBfY3J0Y19oZWxwZXJfZnVuY3MpOwo+ ICsJcmV0dXJuIDA7Cj4gK30KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FybS9tYWxp ZHBfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9kcnYuYwo+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uZGU0NTk4NAo+IC0tLSAvZGV2L251bGwKPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9kcnYuYwo+IEBAIC0wLDAgKzEsNDg2IEBACj4g Ky8qCj4gKyAqIChDKSBDT1BZUklHSFQgMjAxNiBBUk0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNl cnZlZC4KPiArICogQXV0aG9yOiBMaXZpdSBEdWRhdSA8TGl2aXUuRHVkYXVAYXJtLmNvbT4KPiAr ICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmUgYW5kIGlzIHByb3ZpZGVkIHRv IHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlCj4gKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKPiArICogRm91 bmRhdGlvbiwgYW5kIGFueSB1c2UgYnkgeW91IG9mIHRoaXMgcHJvZ3JhbSBpcyBzdWJqZWN0IHRv IHRoZSB0ZXJtcwo+ICsgKiBvZiBzdWNoIEdOVSBsaWNlbmNlLgo+ICsgKgo+ICsgKiBBUk0gTWFs aSBEUDUwMC9EUDU1MC9EUDY1MCBLTVMvRFJNIGRyaXZlcgo+ICsgKi8KPiArCj4gKyNpbmNsdWRl IDxsaW51eC9tb2R1bGUuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgo+ICsjaW5jbHVkZSA8 bGludXgvY29tcG9uZW50Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KPiArI2lu Y2x1ZGUgPGxpbnV4L29mX2dyYXBoLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9vZl9yZXNlcnZlZF9t ZW0uaD4KPiArCj4gKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9h dG9taWNfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KPiArI2luY2x1ZGUg PGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fZmJfaGVscGVyLmg+ Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2NtYV9oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9k cm1fZ2VtX2NtYV9oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fb2YuaD4KPiArCj4gKyNp bmNsdWRlICJtYWxpZHBfZHJ2LmgiCj4gKyNpbmNsdWRlICJtYWxpZHBfcmVncy5oIgo+ICsjaW5j bHVkZSAibWFsaWRwX2h3LmgiCj4gKwo+ICsjZGVmaW5lIE1BTElEUF9DT05GX1ZBTElEX1RJTUVP VVQJMjUwCj4gKwo+ICsvKgo+ICsgKiBzZXQgdGhlICJjb25maWcgdmFsaWQiIGJpdCBhbmQgd2Fp dCB1bnRpbCB0aGUgaGFyZHdhcmUKPiArICogYWN0cyBvbiBpdAo+ICsgKi8KPiAraW50IG1hbGlk cF93YWl0X2NvbmZpZ192YWxpZChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQo+ICt7Cj4gKwlzdHJ1 Y3QgbWFsaWRwX2RybSAqbWFsaWRwID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiArCXN0cnVjdCBtYWxp ZHBfaHdfZGV2aWNlICpod2RldiA9IG1hbGlkcC0+ZGV2Owo+ICsJaW50IHJldDsKPiArCj4gKwlo d2Rldi0+c2V0X2NvbmZpZ192YWxpZChod2Rldik7Cj4gKwkvKiBkb24ndCB3YWl0IGZvciBjb25m aWdfdmFsaWQgZmxhZyBpZiB3ZSBhcmUgaW4gY29uZmlnIG1vZGUgKi8KPiArCWlmIChod2Rldi0+ aW5fY29uZmlnX21vZGUoaHdkZXYpKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCXJldCA9IHdhaXRf ZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KG1hbGlkcC0+d3EsCj4gKwkJCWF0b21pY19yZWFk KCZtYWxpZHAtPmNvbmZpZ192YWxpZCkgPT0gMSwKPiArCQkJbXNlY3NfdG9famlmZmllcyhNQUxJ RFBfQ09ORl9WQUxJRF9USU1FT1VUKSk7Cj4gKwo+ICsJcmV0dXJuIChyZXQgPiAwKSA/IDAgOiAt RVRJTUVET1VUOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBtYWxpZHBfb3V0cHV0X3BvbGxfY2hh bmdlZChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQo+ICt7Cj4gKwlzdHJ1Y3QgbWFsaWRwX2RybSAq bWFsaWRwID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiArCj4gKwlpZiAobWFsaWRwLT5mYmRldikKPiAr CQlkcm1fZmJkZXZfY21hX2hvdHBsdWdfZXZlbnQobWFsaWRwLT5mYmRldik7Cj4gK30KPiArCj4g K3N0YXRpYyBpbnQgbWFsaWRwX2F0b21pY19jb21taXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwK PiArCQkJCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKPiArCQkJCWJvb2wgYXN5bmMp Cj4gK3sKPiArCS8qCj4gKwkgKiBUb0RvOiBpbnZlc3RpZ2F0ZSB0aGUgYXN5bmMgcGF0aCB0byBt YWtlIHN1cmUgdGhhdAo+ICsJICogb3BlcmF0aW9ucyBhcmUgc3VibWl0dGVkIGNvcnJlY3RseSB0 byB0aGUgaGFyZHdhcmUsCj4gKwkgKiByYXRoZXIgdGhhbiBpZ25vcmluZyB0aGUgYXN5bmMgcGFy YW0KPiArCSAqLwo+ICsJcmV0dXJuIGRybV9hdG9taWNfaGVscGVyX2NvbW1pdChkZXYsIHN0YXRl LCBmYWxzZSk7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX21vZGVfY29uZmln X2Z1bmNzIG1hbGlkcF9tb2RlX2NvbmZpZ19mdW5jcyA9IHsKPiArCS5mYl9jcmVhdGUgPSBkcm1f ZmJfY21hX2NyZWF0ZSwKPiArCS5vdXRwdXRfcG9sbF9jaGFuZ2VkID0gbWFsaWRwX291dHB1dF9w b2xsX2NoYW5nZWQsCj4gKwkuYXRvbWljX2NoZWNrID0gZHJtX2F0b21pY19oZWxwZXJfY2hlY2ss Cj4gKwkuYXRvbWljX2NvbW1pdCA9IG1hbGlkcF9hdG9taWNfY29tbWl0LAo+ICt9Owo+ICsKPiAr c3RhdGljIGludCBtYWxpZHBfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCB1 bnNpZ25lZCBpbnQgY3J0YykKPiArewo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2 b2lkIG1hbGlkcF9kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCB1bnNpZ25l ZCBpbnQgcGlwZSkKPiArewo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IG1hbGlkcF9pbml0KHN0cnVj dCBkcm1fZGV2aWNlICpkcm0pCj4gK3sKPiArCWludCByZXQ7Cj4gKwlzdHJ1Y3QgbWFsaWRwX2Ry bSAqbWFsaWRwID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiArCXN0cnVjdCBtYWxpZHBfaHdfZGV2aWNl ICpod2RldiA9IG1hbGlkcC0+ZGV2Owo+ICsKPiArCWRybV9tb2RlX2NvbmZpZ19pbml0KGRybSk7 Cj4gKwo+ICsJZHJtLT5tb2RlX2NvbmZpZy5taW5fd2lkdGggPSBod2Rldi0+bWluX2xpbmVfc2l6 ZTsKPiArCWRybS0+bW9kZV9jb25maWcubWluX2hlaWdodCA9IGh3ZGV2LT5taW5fbGluZV9zaXpl Owo+ICsJZHJtLT5tb2RlX2NvbmZpZy5tYXhfd2lkdGggPSBod2Rldi0+bWF4X2xpbmVfc2l6ZTsK PiArCWRybS0+bW9kZV9jb25maWcubWF4X2hlaWdodCA9IGh3ZGV2LT5tYXhfbGluZV9zaXplOwo+ ICsJZHJtLT5tb2RlX2NvbmZpZy5mdW5jcyA9ICZtYWxpZHBfbW9kZV9jb25maWdfZnVuY3M7Cj4g Kwo+ICsJcmV0ID0gbWFsaWRwX2RlX3BsYW5lc19pbml0KGRybSk7Cj4gKwlpZiAocmV0IDwgMCkg ewo+ICsJCURSTV9FUlJPUigiRmFpbGVkIHRvIGluaXRpYWxpc2UgcGxhbmVzXG4iKTsKPiArCQln b3RvIHBsYW5lX2luaXRfZmFpbDsKPiArCX0KPiArCj4gKwlyZXQgPSBtYWxpZHBfY3J0Y19pbml0 KGRybSk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gaW5pdGlhbGlz ZSBDUlRDXG4iKTsKPiArCQlnb3RvIGNydGNfaW5pdF9mYWlsOwo+ICsJfQo+ICsKPiArCXJldHVy biAwOwo+ICsKPiArY3J0Y19pbml0X2ZhaWw6Cj4gKwltYWxpZHBfZGVfcGxhbmVzX2Rlc3Ryb3ko ZHJtKTsKPiArcGxhbmVfaW5pdF9mYWlsOgo+ICsJZHJtX21vZGVfY29uZmlnX2NsZWFudXAoZHJt KTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IG1hbGlkcF9pcnFf aW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICt7Cj4gKwlpbnQgaXJxX2RlLCBp cnFfc2UsIHJldCA9IDA7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gZGV2X2dldF9kcnZk YXRhKCZwZGV2LT5kZXYpOwo+ICsKPiArCS8qIGZldGNoIHRoZSBpbnRlcnJ1cHRzIGZyb20gRFQg Ki8KPiArCWlycV9kZSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsICJERSIpOwo+ICsJ aWYgKGlycV9kZSA8IDApIHsKPiArCQlEUk1fRVJST1IoIm5vICdERScgSVJRIHNwZWNpZmllZCFc biIpOwo+ICsJCXJldHVybiBpcnFfZGU7Cj4gKwl9Cj4gKwlpcnFfc2UgPSBwbGF0Zm9ybV9nZXRf aXJxX2J5bmFtZShwZGV2LCAiU0UiKTsKPiArCWlmIChpcnFfc2UgPCAwKSB7Cj4gKwkJRFJNX0VS Uk9SKCJubyAnU0UnIElSUSBzcGVjaWZpZWQhXG4iKTsKPiArCQlyZXR1cm4gaXJxX3NlOwo+ICsJ fQo+ICsKPiArCXJldCA9IG1hbGlkcF9kZV9pcnFfaW5pdChkcm0sIGlycV9kZSk7Cj4gKwlpZiAo cmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJcmV0ID0gbWFsaWRwX3NlX2lycV9pbml0KGRy bSwgaXJxX3NlKTsKPiArCWlmIChyZXQpIHsKPiArCQltYWxpZHBfZGVfaXJxX2NsZWFudXAoZHJt KTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCBtYWxpZHBfbGFzdGNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCj4gK3sK PiArCXN0cnVjdCBtYWxpZHBfZHJtICptYWxpZHAgPSBkcm0tPmRldl9wcml2YXRlOwo+ICsKPiAr CWRybV9mYmRldl9jbWFfcmVzdG9yZV9tb2RlKG1hbGlkcC0+ZmJkZXYpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzID0gewo+ICsJLm93bmVyID0g VEhJU19NT0RVTEUsCj4gKwkub3BlbiA9IGRybV9vcGVuLAo+ICsJLnJlbGVhc2UgPSBkcm1fcmVs ZWFzZSwKPiArCS51bmxvY2tlZF9pb2N0bCA9IGRybV9pb2N0bCwKPiArI2lmZGVmIENPTkZJR19D T01QQVQKPiArCS5jb21wYXRfaW9jdGwgPSBkcm1fY29tcGF0X2lvY3RsLAo+ICsjZW5kaWYKPiAr CS5wb2xsID0gZHJtX3BvbGwsCj4gKwkucmVhZCA9IGRybV9yZWFkLAo+ICsJLmxsc2VlayA9IG5v b3BfbGxzZWVrLAo+ICsJLm1tYXAgPSBkcm1fZ2VtX2NtYV9tbWFwLAo+ICt9Owo+ICsKPiArc3Rh dGljIHN0cnVjdCBkcm1fZHJpdmVyIG1hbGlkcF9kcml2ZXIgPSB7Cj4gKwkuZHJpdmVyX2ZlYXR1 cmVzID0gRFJJVkVSX0dFTSB8IERSSVZFUl9NT0RFU0VUIHwgRFJJVkVSX0FUT01JQyB8Cj4gKwkJ CSAgIERSSVZFUl9QUklNRSwKPiArCS5sYXN0Y2xvc2UgPSBtYWxpZHBfbGFzdGNsb3NlLAo+ICsJ LmdldF92YmxhbmtfY291bnRlciA9IGRybV92Ymxhbmtfbm9faHdfY291bnRlciwKPiArCS5lbmFi bGVfdmJsYW5rID0gbWFsaWRwX2VuYWJsZV92YmxhbmssCj4gKwkuZGlzYWJsZV92YmxhbmsgPSBt YWxpZHBfZGlzYWJsZV92YmxhbmssCj4gKwkuZ2VtX2ZyZWVfb2JqZWN0ID0gZHJtX2dlbV9jbWFf ZnJlZV9vYmplY3QsCj4gKwkuZ2VtX3ZtX29wcyA9ICZkcm1fZ2VtX2NtYV92bV9vcHMsCj4gKwku ZHVtYl9jcmVhdGUgPSBkcm1fZ2VtX2NtYV9kdW1iX2NyZWF0ZSwKPiArCS5kdW1iX21hcF9vZmZz ZXQgPSBkcm1fZ2VtX2NtYV9kdW1iX21hcF9vZmZzZXQsCj4gKwkuZHVtYl9kZXN0cm95ID0gZHJt X2dlbV9kdW1iX2Rlc3Ryb3ksCj4gKwkucHJpbWVfaGFuZGxlX3RvX2ZkID0gZHJtX2dlbV9wcmlt ZV9oYW5kbGVfdG9fZmQsCj4gKwkucHJpbWVfZmRfdG9faGFuZGxlID0gZHJtX2dlbV9wcmltZV9m ZF90b19oYW5kbGUsCj4gKwkuZ2VtX3ByaW1lX2V4cG9ydCA9IGRybV9nZW1fcHJpbWVfZXhwb3J0 LAo+ICsJLmdlbV9wcmltZV9pbXBvcnQgPSBkcm1fZ2VtX3ByaW1lX2ltcG9ydCwKPiArCS5nZW1f cHJpbWVfZ2V0X3NnX3RhYmxlID0gZHJtX2dlbV9jbWFfcHJpbWVfZ2V0X3NnX3RhYmxlLAo+ICsJ LmdlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUgPSBkcm1fZ2VtX2NtYV9wcmltZV9pbXBvcnRfc2df dGFibGUsCj4gKwkuZ2VtX3ByaW1lX3ZtYXAgPSBkcm1fZ2VtX2NtYV9wcmltZV92bWFwLAo+ICsJ LmdlbV9wcmltZV92dW5tYXAgPSBkcm1fZ2VtX2NtYV9wcmltZV92dW5tYXAsCj4gKwkuZ2VtX3By aW1lX21tYXAgPSBkcm1fZ2VtX2NtYV9wcmltZV9tbWFwLAo+ICsJLmZvcHMgPSAmZm9wcywKPiAr CS5uYW1lID0gIm1hbGktZHAiLAo+ICsJLmRlc2MgPSAiQVJNIE1hbGkgRGlzcGxheSBQcm9jZXNz b3IgZHJpdmVyIiwKPiArCS5kYXRlID0gIjIwMTYwMTA2IiwKPiArCS5tYWpvciA9IDEsCj4gKwku bWlub3IgPSAwLAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQg IG1hbGlkcF9kcm1fb2ZfbWF0Y2hbXSA9IHsKPiArCXsKPiArCQkuY29tcGF0aWJsZSA9ICJhcm0s bWFsaS1kcDUwMCIsCj4gKwkJLmRhdGEgPSAmbWFsaWRwX2RldmljZVtNQUxJRFBfNTAwXQo+ICsJ fSwKPiArCXsKPiArCQkuY29tcGF0aWJsZSA9ICJhcm0sbWFsaS1kcDU1MCIsCj4gKwkJLmRhdGEg PSAmbWFsaWRwX2RldmljZVtNQUxJRFBfNTUwXQo+ICsJfSwKPiArCXsKPiArCQkuY29tcGF0aWJs ZSA9ICJhcm0sbWFsaS1kcDY1MCIsCj4gKwkJLmRhdGEgPSAmbWFsaWRwX2RldmljZVtNQUxJRFBf NjUwXQo+ICsJfSwKPiArCXt9LAo+ICt9Owo+ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBtYWxp ZHBfZHJtX29mX21hdGNoKTsKPiArCj4gKyNkZWZpbmUgTUFYX09VVFBVVF9DSEFOTkVMUwkzCj4g Kwo+ICtzdGF0aWMgaW50IG1hbGlkcF9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldikKPiArewo+ICsJ c3RydWN0IHJlc291cmNlICpyZXM7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtOwo+ICsJc3Ry dWN0IG1hbGlkcF9kcm0gKm1hbGlkcDsKPiArCXN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2Rl djsKPiArCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2Uo ZGV2KTsKPiArCS8qIG51bWJlciBvZiBsaW5lcyBmb3IgdGhlIFIsIEcgYW5kIEIgb3V0cHV0ICov Cj4gKwl1OCBvdXRwdXRfd2lkdGhbTUFYX09VVFBVVF9DSEFOTkVMU107Cj4gKwlpbnQgcmV0ID0g MCwgaTsKPiArCXUzMiB2ZXJzaW9uLCBvdXRfZGVwdGggPSAwOwo+ICsKPiArCW1hbGlkcCA9IGRl dm1fa3phbGxvYyhkZXYsIHNpemVvZigqbWFsaWRwKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIW1h bGlkcCkKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwlod2RldiA9IGRldm1fa3phbGxvYyhk ZXYsIHNpemVvZigqaHdkZXYpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghaHdkZXYpCj4gKwkJcmV0 dXJuIC1FTk9NRU07Cj4gKwo+ICsJLyoKPiArCSAqIGNvcHkgdGhlIGFzc29jaWF0ZWQgZGF0YSBm cm9tIG1hbGlkcF9kcm1fb2ZfbWF0Y2ggdG8gYXZvaWQKPiArCSAqIGhhdmluZyB0byBrZWVwIGEg cmVmZXJlbmNlIHRvIHRoZSBPRiBub2RlIGFmdGVyIGJpbmRpbmcKPiArCSAqLwo+ICsJbWVtY3B5 KGh3ZGV2LCBvZl9kZXZpY2VfZ2V0X21hdGNoX2RhdGEoZGV2KSwgc2l6ZW9mKCpod2RldikpOwo+ ICsJbWFsaWRwLT5kZXYgPSBod2RldjsKPiArCj4gKwlJTklUX0xJU1RfSEVBRCgmbWFsaWRwLT5l dmVudF9saXN0KTsKPiArCj4gKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9S RVNPVVJDRV9NRU0sIDApOwo+ICsJaHdkZXYtPnJlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2Uo ZGV2LCByZXMpOwo+ICsJaWYgKElTX0VSUihod2Rldi0+cmVncykpIHsKPiArCQlEUk1fRVJST1Io IkZhaWxlZCB0byBtYXAgY29udHJvbCByZWdpc3RlcnMgYXJlYVxuIik7Cj4gKwkJcmV0dXJuIFBU Ul9FUlIoaHdkZXYtPnJlZ3MpOwo+ICsJfQo+ICsKPiArCWh3ZGV2LT5wY2xrID0gZGV2bV9jbGtf Z2V0KGRldiwgInBjbGsiKTsKPiArCWlmIChJU19FUlIoaHdkZXYtPnBjbGspKQo+ICsJCXJldHVy biBQVFJfRVJSKGh3ZGV2LT5wY2xrKTsKPiArCj4gKwlod2Rldi0+YWNsayA9IGRldm1fY2xrX2dl dChkZXYsICJhY2xrIik7Cj4gKwlpZiAoSVNfRVJSKGh3ZGV2LT5hY2xrKSkKPiArCQlyZXR1cm4g UFRSX0VSUihod2Rldi0+YWNsayk7Cj4gKwo+ICsJaHdkZXYtPm1jbGsgPSBkZXZtX2Nsa19nZXQo ZGV2LCAibWNsayIpOwo+ICsJaWYgKElTX0VSUihod2Rldi0+bWNsaykpCj4gKwkJcmV0dXJuIFBU Ul9FUlIoaHdkZXYtPm1jbGspOwo+ICsKPiArCWh3ZGV2LT5weGxjbGsgPSBkZXZtX2Nsa19nZXQo ZGV2LCAicHhsY2xrIik7Cj4gKwlpZiAoSVNfRVJSKGh3ZGV2LT5weGxjbGspKQo+ICsJCXJldHVy biBQVFJfRVJSKGh3ZGV2LT5weGxjbGspOwo+ICsKPiArCS8qIEdldCB0aGUgb3B0aW9uYWwgZnJh bWVidWZmZXIgbWVtb3J5IHJlc291cmNlICovCj4gKwlyZXQgPSBvZl9yZXNlcnZlZF9tZW1fZGV2 aWNlX2luaXQoZGV2KTsKPiArCWlmIChyZXQgJiYgcmV0ICE9IC1FTk9ERVYpCj4gKwkJcmV0dXJu IHJldDsKPiArCj4gKwlkcm0gPSBkcm1fZGV2X2FsbG9jKCZtYWxpZHBfZHJpdmVyLCBkZXYpOwo+ ICsJaWYgKCFkcm0pIHsKPiArCQlyZXQgPSAtRU5PTUVNOwo+ICsJCWdvdG8gYWxsb2NfZmFpbDsK PiArCX0KPiArCj4gKwkvKiBFbmFibGUgQVBCIGNsb2NrIGluIG9yZGVyIHRvIGdldCBhY2Nlc3Mg dG8gdGhlIHJlZ2lzdGVycyAqLwo+ICsJY2xrX3ByZXBhcmVfZW5hYmxlKGh3ZGV2LT5wY2xrKTsK PiArCS8qCj4gKwkgKiBFbmFibGUgQVhJIGNsb2NrIGFuZCBtYWluIGNsb2NrIHNvIHRoYXQgcHJl ZmV0Y2ggY2FuIHN0YXJ0IG9uY2UKPiArCSAqIHRoZSByZWdpc3RlcnMgYXJlIHNldAo+ICsJICov Cj4gKwljbGtfcHJlcGFyZV9lbmFibGUoaHdkZXYtPmFjbGspOwo+ICsJY2xrX3ByZXBhcmVfZW5h YmxlKGh3ZGV2LT5tY2xrKTsKPiArCj4gKwlyZXQgPSBod2Rldi0+cXVlcnlfaHcoaHdkZXYpOwo+ ICsJaWYgKHJldCkgewo+ICsJCURSTV9FUlJPUigiSW52YWxpZCBIVyBjb25maWd1cmF0aW9uXG4i KTsKPiArCQlnb3RvIHF1ZXJ5X2h3X2ZhaWw7Cj4gKwl9Cj4gKwo+ICsJdmVyc2lvbiA9IG1hbGlk cF9od19yZWFkKGh3ZGV2LCBod2Rldi0+bWFwLmRjX2Jhc2UgKyBNQUxJRFBfREVfQ09SRV9JRCk7 Cj4gKwlEUk1fSU5GTygiZm91bmQgQVJNIE1hbGktRFAlM3ggdmVyc2lvbiByJWRwJWRcbiIsIHZl cnNpb24gPj4gMTYsCj4gKwkJICh2ZXJzaW9uID4+IDEyKSAmIDB4ZiwgKHZlcnNpb24gPj4gOCkg JiAweGYpOwo+ICsKPiArCS8qIHNldCB0aGUgbnVtYmVyIG9mIGxpbmVzIHVzZWQgZm9yIG91dHB1 dCBvZiBSR0IgZGF0YSAqLwo+ICsJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91OF9hcnJheShkZXYt Pm9mX25vZGUsCj4gKwkJCQkJImFybSxtYWxpZHAtb3V0cHV0LXBvcnQtbGluZXMiLAo+ICsJCQkJ CW91dHB1dF93aWR0aCwgTUFYX09VVFBVVF9DSEFOTkVMUyk7Cj4gKwlpZiAocmV0KQo+ICsJCWdv dG8gcXVlcnlfaHdfZmFpbDsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgTUFYX09VVFBVVF9DSEFO TkVMUzsgaSsrKQo+ICsJCW91dF9kZXB0aCA9IChvdXRfZGVwdGggPDwgOCkgfCAob3V0cHV0X3dp ZHRoW2ldICYgMHhmKTsKPiArCW1hbGlkcF9od193cml0ZShod2Rldiwgb3V0X2RlcHRoLCBod2Rl di0+bWFwLm91dF9kZXB0aF9iYXNlKTsKPiArCj4gKwlkcm0tPmRldl9wcml2YXRlID0gbWFsaWRw Owo+ICsJZGV2X3NldF9kcnZkYXRhKGRldiwgZHJtKTsKPiArCWF0b21pY19zZXQoJm1hbGlkcC0+ Y29uZmlnX3ZhbGlkLCAwKTsKPiArCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm1hbGlkcC0+d3EpOwo+ ICsKPiArCXJldCA9IG1hbGlkcF9pbml0KGRybSk7Cj4gKwlpZiAocmV0IDwgMCkKPiArCQlnb3Rv IGluaXRfZmFpbDsKPiArCj4gKwlyZXQgPSBkcm1fZGV2X3JlZ2lzdGVyKGRybSwgMCk7Cj4gKwlp ZiAocmV0KQo+ICsJCWdvdG8gcmVnaXN0ZXJfZmFpbDsKPiArCj4gKwkvKiBTZXQgdGhlIENSVEMn cyBwb3J0IHNvIHRoYXQgdGhlIGVuY29kZXIgY29tcG9uZW50IGNhbiBmaW5kIGl0ICovCj4gKwlt YWxpZHAtPmNydGMucG9ydCA9IG9mX2dyYXBoX2dldF9uZXh0X2VuZHBvaW50KGRldi0+b2Zfbm9k ZSwgTlVMTCk7Cj4gKwo+ICsJcmV0ID0gY29tcG9uZW50X2JpbmRfYWxsKGRldiwgZHJtKTsKPiAr CW9mX25vZGVfcHV0KG1hbGlkcC0+Y3J0Yy5wb3J0KTsKPiArCj4gKwlpZiAocmV0KSB7Cj4gKwkJ RFJNX0VSUk9SKCJGYWlsZWQgdG8gYmluZCBhbGwgY29tcG9uZW50c1xuIik7Cj4gKwkJZ290byBi aW5kX2ZhaWw7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gZHJtX3ZibGFua19pbml0KGRybSwgZHJtLT5t b2RlX2NvbmZpZy5udW1fY3J0Yyk7Cj4gKwlpZiAocmV0IDwgMCkgewo+ICsJCURSTV9FUlJPUigi ZmFpbGVkIHRvIGluaXRpYWxpc2UgdmJsYW5rXG4iKTsKPiArCQlnb3RvIHZibGFua19mYWlsOwo+ ICsJfQo+ICsJZHJtLT52YmxhbmtfZGlzYWJsZV9hbGxvd2VkID0gdHJ1ZTsKPiArCj4gKwlyZXQg PSBtYWxpZHBfaXJxX2luaXQocGRldik7Cj4gKwlpZiAocmV0IDwgMCkKPiArCQlnb3RvIGlycV9p bml0X2ZhaWw7Cj4gKwo+ICsJZHJtX21vZGVfY29uZmlnX3Jlc2V0KGRybSk7Cj4gKwo+ICsJZHJt X2hlbHBlcl9kaXNhYmxlX3VudXNlZF9mdW5jdGlvbnMoZHJtKTsKPiArCW1hbGlkcC0+ZmJkZXYg PSBkcm1fZmJkZXZfY21hX2luaXQoZHJtLCAzMiwgZHJtLT5tb2RlX2NvbmZpZy5udW1fY3J0YywK PiArCQkJCQkgICBkcm0tPm1vZGVfY29uZmlnLm51bV9jb25uZWN0b3IpOwo+ICsKPiArCWlmIChJ U19FUlIobWFsaWRwLT5mYmRldikpIHsKPiArCQlyZXQgPSBQVFJfRVJSKG1hbGlkcC0+ZmJkZXYp Owo+ICsJCW1hbGlkcC0+ZmJkZXYgPSBOVUxMOwo+ICsJCWdvdG8gZmJkZXZfZmFpbDsKPiArCX0K PiArCj4gKwlkcm1fa21zX2hlbHBlcl9wb2xsX2luaXQoZHJtKTsKPiArCXJldHVybiAwOwo+ICsK PiArZmJkZXZfZmFpbDoKPiArCW1hbGlkcF9zZV9pcnFfY2xlYW51cChkcm0pOwo+ICsJbWFsaWRw X2RlX2lycV9jbGVhbnVwKGRybSk7Cj4gK2lycV9pbml0X2ZhaWw6Cj4gKwlkcm1fdmJsYW5rX2Ns ZWFudXAoZHJtKTsKPiArdmJsYW5rX2ZhaWw6Cj4gKwljb21wb25lbnRfdW5iaW5kX2FsbChkZXYs IGRybSk7Cj4gK2JpbmRfZmFpbDoKPiArCWRybV9kZXZfdW5yZWdpc3Rlcihkcm0pOwo+ICtyZWdp c3Rlcl9mYWlsOgo+ICsJbWFsaWRwX2RlX3BsYW5lc19kZXN0cm95KGRybSk7Cj4gKwlkcm1fbW9k ZV9jb25maWdfY2xlYW51cChkcm0pOwo+ICtpbml0X2ZhaWw6Cj4gKwlkcm0tPmRldl9wcml2YXRl ID0gTlVMTDsKPiArCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwo+ICtxdWVyeV9od19mYWls Ogo+ICsJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGh3ZGV2LT5tY2xrKTsKPiArCWNsa19kaXNhYmxl X3VucHJlcGFyZShod2Rldi0+YWNsayk7Cj4gKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaHdkZXYt PnBjbGspOwo+ICsJZHJtX2Rldl91bnJlZihkcm0pOwo+ICthbGxvY19mYWlsOgo+ICsJb2ZfcmVz ZXJ2ZWRfbWVtX2RldmljZV9yZWxlYXNlKGRldik7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ ICsKPiArc3RhdGljIHZvaWQgbWFsaWRwX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gK3sK PiArCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiArCXN0 cnVjdCBtYWxpZHBfZHJtICptYWxpZHAgPSBkcm0tPmRldl9wcml2YXRlOwo+ICsJc3RydWN0IG1h bGlkcF9od19kZXZpY2UgKmh3ZGV2ID0gbWFsaWRwLT5kZXY7Cj4gKwo+ICsJaWYgKG1hbGlkcC0+ ZmJkZXYpIHsKPiArCQlkcm1fZmJkZXZfY21hX2ZpbmkobWFsaWRwLT5mYmRldik7Cj4gKwkJbWFs aWRwLT5mYmRldiA9IE5VTEw7Cj4gKwl9Cj4gKwlkcm1fa21zX2hlbHBlcl9wb2xsX2ZpbmkoZHJt KTsKPiArCW1hbGlkcF9zZV9pcnFfY2xlYW51cChkcm0pOwo+ICsJbWFsaWRwX2RlX2lycV9jbGVh bnVwKGRybSk7Cj4gKwlkcm1fdmJsYW5rX2NsZWFudXAoZHJtKTsKPiArCWNvbXBvbmVudF91bmJp bmRfYWxsKGRldiwgZHJtKTsKPiArCWRybV9kZXZfdW5yZWdpc3Rlcihkcm0pOwo+ICsJbWFsaWRw X2RlX3BsYW5lc19kZXN0cm95KGRybSk7Cj4gKwlkcm1fbW9kZV9jb25maWdfY2xlYW51cChkcm0p Owo+ICsJZHJtLT5kZXZfcHJpdmF0ZSA9IE5VTEw7Cj4gKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBO VUxMKTsKPiArCWNsa19kaXNhYmxlX3VucHJlcGFyZShod2Rldi0+bWNsayk7Cj4gKwljbGtfZGlz YWJsZV91bnByZXBhcmUoaHdkZXYtPmFjbGspOwo+ICsJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGh3 ZGV2LT5wY2xrKTsKPiArCWRybV9kZXZfdW5yZWYoZHJtKTsKPiArCW9mX3Jlc2VydmVkX21lbV9k ZXZpY2VfcmVsZWFzZShkZXYpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGNvbXBv bmVudF9tYXN0ZXJfb3BzIG1hbGlkcF9tYXN0ZXJfb3BzID0gewo+ICsJLmJpbmQgPSBtYWxpZHBf YmluZCwKPiArCS51bmJpbmQgPSBtYWxpZHBfdW5iaW5kLAo+ICt9Owo+ICsKPiArc3RhdGljIGlu dCBtYWxpZHBfY29tcGFyZV9kZXYoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQo+ICt7 Cj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGF0YTsKPiArCj4gKwlyZXR1cm4gZGV2LT5v Zl9ub2RlID09IG5wOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IG1hbGlkcF9wbGF0Zm9ybV9wcm9i ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNlX25v ZGUgKnBvcnQsICplcDsKPiArCXN0cnVjdCBjb21wb25lbnRfbWF0Y2ggKm1hdGNoID0gTlVMTDsK PiArCj4gKwlpZiAoIXBkZXYtPmRldi5vZl9ub2RlKQo+ICsJCXJldHVybiAtRU5PREVWOwo+ICsK PiArCS8qIHRoZXJlIGlzIG9ubHkgb25lIG91dHB1dCBwb3J0IGluc2lkZSBlYWNoIGRldmljZSwg ZmluZCBpdCAqLwo+ICsJZXAgPSBvZl9ncmFwaF9nZXRfbmV4dF9lbmRwb2ludChwZGV2LT5kZXYu b2Zfbm9kZSwgTlVMTCk7Cj4gKwlpZiAoIWVwKQo+ICsJCXJldHVybiAtRU5PREVWOwo+ICsKPiAr CWlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShlcCkpIHsKPiArCQlvZl9ub2RlX3B1dChlcCk7 Cj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gKwl9Cj4gKwo+ICsJLyogYWRkIHRoZSByZW1vdGUgZW5j b2RlciBwb3J0IGFzIGNvbXBvbmVudCAqLwo+ICsJcG9ydCA9IG9mX2dyYXBoX2dldF9yZW1vdGVf cG9ydF9wYXJlbnQoZXApOwo+ICsJb2Zfbm9kZV9wdXQoZXApOwo+ICsJaWYgKCFwb3J0IHx8ICFv Zl9kZXZpY2VfaXNfYXZhaWxhYmxlKHBvcnQpKSB7Cj4gKwkJb2Zfbm9kZV9wdXQocG9ydCk7Cj4g KwkJcmV0dXJuIC1FQUdBSU47Cj4gKwl9Cj4gKwo+ICsJY29tcG9uZW50X21hdGNoX2FkZCgmcGRl di0+ZGV2LCAmbWF0Y2gsIG1hbGlkcF9jb21wYXJlX2RldiwgcG9ydCk7Cj4gKwlyZXR1cm4gY29t cG9uZW50X21hc3Rlcl9hZGRfd2l0aF9tYXRjaCgmcGRldi0+ZGV2LCAmbWFsaWRwX21hc3Rlcl9v cHMsCj4gKwkJCQkJICAgICAgIG1hdGNoKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBtYWxpZHBf cGxhdGZvcm1fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gK3sKPiArCWNv bXBvbmVudF9tYXN0ZXJfZGVsKCZwZGV2LT5kZXYsICZtYWxpZHBfbWFzdGVyX29wcyk7Cj4gKwly ZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbWFsaWRw X3BsYXRmb3JtX2RyaXZlciA9IHsKPiArCS5wcm9iZQkJPSBtYWxpZHBfcGxhdGZvcm1fcHJvYmUs Cj4gKwkucmVtb3ZlCQk9IG1hbGlkcF9wbGF0Zm9ybV9yZW1vdmUsCj4gKwkuZHJpdmVyCT0gewo+ ICsJCS5uYW1lID0gIm1hbGktZHAiLAo+ICsJCS5vZl9tYXRjaF90YWJsZQk9IG1hbGlkcF9kcm1f b2ZfbWF0Y2gsCj4gKwl9LAo+ICt9Owo+ICsKPiArbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihtYWxp ZHBfcGxhdGZvcm1fZHJpdmVyKTsKPiArCj4gK01PRFVMRV9BVVRIT1IoIkxpdml1IER1ZGF1IDxM aXZpdS5EdWRhdUBhcm0uY29tPiIpOwo+ICtNT0RVTEVfREVTQ1JJUFRJT04oIkFSTSBNYWxpIERQ IERSTSBkcml2ZXIiKTsKPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9hcm0v bWFsaWRwX2Rydi5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi43ZGUw ZGE2Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX2Ry di5oCj4gQEAgLTAsMCArMSw0OSBAQAo+ICsvKgo+ICsgKiAoQykgQ09QWVJJR0hUIDIwMTYgQVJN IExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4gKyAqIEF1dGhvcjogTGl2aXUgRHVkYXUg PExpdml1LkR1ZGF1QGFybS5jb20+Cj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlIGFuZCBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQo+ICsg KiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRo ZSBGcmVlIFNvZnR3YXJlCj4gKyAqIEZvdW5kYXRpb24sIGFuZCBhbnkgdXNlIGJ5IHlvdSBvZiB0 aGlzIHByb2dyYW0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMKPiArICogb2Ygc3VjaCBHTlUgbGlj ZW5jZS4KPiArICoKPiArICogQVJNIE1hbGkgRFA1MDAvRFA1NTAvRFA2NTAgS01TL0RSTSBkcml2 ZXIgc3RydWN0dXJlcwo+ICsgKi8KPiArCj4gKyNpZm5kZWYgX19NQUxJRFBfRFJWX0hfXwo+ICsj ZGVmaW5lIF9fTUFMSURQX0RSVl9IX18KPiArCj4gKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgo+ ICsjaW5jbHVkZSA8bGludXgvd2FpdC5oPgo+ICsjaW5jbHVkZSAibWFsaWRwX2h3LmgiCj4gKwo+ ICtzdHJ1Y3QgbWFsaWRwX2RybSB7Cj4gKwlzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqZGV2Owo+ ICsJc3RydWN0IGRybV9mYmRldl9jbWEgKmZiZGV2Owo+ICsJc3RydWN0IGxpc3RfaGVhZCBldmVu dF9saXN0Owo+ICsJc3RydWN0IGRybV9jcnRjIGNydGM7Cj4gKwl3YWl0X3F1ZXVlX2hlYWRfdCB3 cTsKPiArCWF0b21pY190IGNvbmZpZ192YWxpZDsKPiArfTsKPiArCj4gKyNkZWZpbmUgY3J0Y190 b19tYWxpZHBfZGV2aWNlKHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgbWFsaWRwX2RybSwgY3J0 YykKPiArCj4gK3N0cnVjdCBtYWxpZHBfcGxhbmUgewo+ICsJc3RydWN0IGRybV9wbGFuZSBiYXNl Owo+ICsJc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2Owo+ICsJY29uc3Qgc3RydWN0IG1h bGlkcF9sYXllciAqbGF5ZXI7Cj4gKwkvKiBzaXplIG9mIHRoZSByZXF1aXJlZCByb3RhdGlvbiBt ZW1vcnkgd2hlbiBwbGFuZSBpcyByb3RhdGVkICovCj4gKwl1MzIgcm90bWVtX3NpemU7Cj4gK307 Cj4gKwo+ICsjZGVmaW5lIHRvX21hbGlkcF9wbGFuZSh4KSBjb250YWluZXJfb2YoeCwgc3RydWN0 IG1hbGlkcF9wbGFuZSwgYmFzZSkKPiArCj4gK2ludCBtYWxpZHBfd2FpdF9jb25maWdfdmFsaWQo c3RydWN0IGRybV9kZXZpY2UgKmRybSk7Cj4gK2ludCBtYWxpZHBfZGVfcGxhbmVzX2luaXQoc3Ry dWN0IGRybV9kZXZpY2UgKmRybSk7Cj4gK3ZvaWQgbWFsaWRwX2RlX3BsYW5lc19kZXN0cm95KHN0 cnVjdCBkcm1fZGV2aWNlICpkcm0pOwo+ICtpbnQgbWFsaWRwX2NydGNfaW5pdChzdHJ1Y3QgZHJt X2RldmljZSAqZHJtKTsKPiArCj4gKy8qIG9mdGVuIHVzZWQgY29tYmluYXRpb24gb2Ygcm90YXRp b25hbCBiaXRzICovCj4gKyNkZWZpbmUgTUFMSURQX1JPVEFURURfTUFTSwkoQklUKERSTV9ST1RB VEVfOTApIHwgQklUKERSTV9ST1RBVEVfMjcwKSkKPiArCj4gKyNlbmRpZiAgLyogX19NQUxJRFBf RFJWX0hfXyAqLwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9ody5j IGIvZHJpdmVycy9ncHUvZHJtL2FybS9tYWxpZHBfaHcuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 Cj4gaW5kZXggMDAwMDAwMC4uZTg0MGQ2OQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vYXJtL21hbGlkcF9ody5jCj4gQEAgLTAsMCArMSw3NzcgQEAKPiArLyoKPiArICog KEMpIENPUFlSSUdIVCAyMDE2IEFSTSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+ICsg KiBBdXRob3I6IExpdml1IER1ZGF1IDxMaXZpdS5EdWRhdUBhcm0uY29tPgo+ICsgKgo+ICsgKiBU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZSBhbmQgaXMgcHJvdmlkZWQgdG8geW91IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUKPiArICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lv biAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQo+ICsgKiBGb3VuZGF0aW9uLCBh bmQgYW55IHVzZSBieSB5b3Ugb2YgdGhpcyBwcm9ncmFtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1z Cj4gKyAqIG9mIHN1Y2ggR05VIGxpY2VuY2UuCj4gKyAqCj4gKyAqIEFSTSBNYWxpIERQNTAwL0RQ NTUwL0RQNjUwIGhhcmR3YXJlIG1hbmlwdWxhdGlvbiByb3V0aW5lcy4gVGhpcyBpcyB3aGVyZQo+ ICsgKiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHZhcmlvdXMgdmVyc2lvbnMgb2YgdGhlIGhhcmR3 YXJlIGlzIGJlaW5nIGRlYWx0IHdpdGgKPiArICogaW4gYW4gYXR0ZW1wdCB0byBwcm92aWRlIHRv IHRoZSByZXN0IG9mIHRoZSBkcml2ZXIgY29kZSBhIHVuaWZpZWQgdmlldwo+ICsgKi8KPiArCj4g KyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgo+ICsjaW5jbHVkZSA8bGludXgvaW8uaD4KPiArI2lu Y2x1ZGUgPGRybS9kcm1QLmg+Cj4gKyNpbmNsdWRlIDx2aWRlby92aWRlb21vZGUuaD4KPiArI2lu Y2x1ZGUgPHZpZGVvL2Rpc3BsYXlfdGltaW5nLmg+Cj4gKwo+ICsjaW5jbHVkZSAibWFsaWRwX2Ry di5oIgo+ICsjaW5jbHVkZSAibWFsaWRwX2h3LmgiCj4gKyNpbmNsdWRlICJtYWxpZHBfcmVncy5o Igo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBtYWxpZHBfaW5wdXRfZm9ybWF0IG1hbGlkcDUw MF9kZV9mb3JtYXRzW10gPSB7Cj4gKwkvKiAgICBsYXllcnMgc3VwcG9ydGluZyB0aGUgZm9ybWF0 LCAgICAgaW50ZXJuYWwgaWQsICAgICAgZm91cmNjICovCj4gKwl7IERFX1ZJREVPMSB8IERFX0dS QVBISUNTMSB8IERFX0dSQVBISUNTMiwgIDAsIERSTV9GT1JNQVRfQVJHQjIxMDEwMTAgfSwKPiAr CXsgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfR1JBUEhJQ1MyLCAgMSwgRFJNX0ZPUk1B VF9BQkdSMjEwMTAxMCB9LAo+ICsJeyBERV9WSURFTzEgfCBERV9HUkFQSElDUzEgfCBERV9HUkFQ SElDUzIsICAyLCBEUk1fRk9STUFUX0FSR0I4ODg4IH0sCj4gKwl7IERFX1ZJREVPMSB8IERFX0dS QVBISUNTMSB8IERFX0dSQVBISUNTMiwgIDMsIERSTV9GT1JNQVRfQUJHUjg4ODggfSwKPiArCXsg REVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfR1JBUEhJQ1MyLCAgNCwgRFJNX0ZPUk1BVF9Y UkdCODg4OCB9LAo+ICsJeyBERV9WSURFTzEgfCBERV9HUkFQSElDUzEgfCBERV9HUkFQSElDUzIs ICA1LCBEUk1fRk9STUFUX1hCR1I4ODg4IH0sCj4gKwl7IERFX1ZJREVPMSB8IERFX0dSQVBISUNT MSB8IERFX0dSQVBISUNTMiwgIDYsIERSTV9GT1JNQVRfUkdCODg4IH0sCj4gKwl7IERFX1ZJREVP MSB8IERFX0dSQVBISUNTMSB8IERFX0dSQVBISUNTMiwgIDcsIERSTV9GT1JNQVRfQkdSODg4IH0s Cj4gKwl7IERFX1ZJREVPMSB8IERFX0dSQVBISUNTMSB8IERFX0dSQVBISUNTMiwgIDgsIERSTV9G T1JNQVRfUkdCQTU1NTEgfSwKPiArCXsgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfR1JB UEhJQ1MyLCAgOSwgRFJNX0ZPUk1BVF9BQkdSMTU1NSB9LAo+ICsJeyBERV9WSURFTzEgfCBERV9H UkFQSElDUzEgfCBERV9HUkFQSElDUzIsIDEwLCBEUk1fRk9STUFUX1JHQjU2NSB9LAo+ICsJeyBE RV9WSURFTzEgfCBERV9HUkFQSElDUzEgfCBERV9HUkFQSElDUzIsIDExLCBEUk1fRk9STUFUX0JH UjU2NSB9LAo+ICsJeyBERV9WSURFTzEsIDEyLCBEUk1fRk9STUFUX1VZVlkgfSwKPiArCXsgREVf VklERU8xLCAxMywgRFJNX0ZPUk1BVF9ZVVlWIH0sCj4gKwl7IERFX1ZJREVPMSwgMTQsIERSTV9G T1JNQVRfTlYxMiB9LAo+ICsJeyBERV9WSURFTzEsIDE1LCBEUk1fRk9STUFUX1lVVjQyMCB9LAo+ ICt9Owo+ICsKPiArI2RlZmluZSBNQUxJRFBfSUQoX19ncm91cCwgX19mb3JtYXQpIFwKPiArCSgo KChfX2dyb3VwKSAmIDB4NykgPDwgMykgfCAoKF9fZm9ybWF0KSAmIDB4NykpCj4gKwo+ICsjZGVm aW5lIE1BTElEUF9DT01NT05fRk9STUFUUyBcCj4gKwkvKiAgICBsYXllcnMgc3VwcG9ydGluZyB0 aGUgZm9ybWF0LCAgICAgIGludGVybmFsIGlkLCAgICAgIGZvdXJjYyAqLyBcCj4gKwl7IERFX1ZJ REVPMSB8IERFX0dSQVBISUNTMSB8IERFX1ZJREVPMiwgTUFMSURQX0lEKDAsIDApLCBEUk1fRk9S TUFUX0FSR0IyMTAxMDEwIH0sIFwKPiArCXsgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVf VklERU8yLCBNQUxJRFBfSUQoMCwgMSksIERSTV9GT1JNQVRfQUJHUjIxMDEwMTAgfSwgXAo+ICsJ eyBERV9WSURFTzEgfCBERV9HUkFQSElDUzEgfCBERV9WSURFTzIsIE1BTElEUF9JRCgwLCAyKSwg RFJNX0ZPUk1BVF9SR0JBMTAxMDEwMiB9LCBcCj4gKwl7IERFX1ZJREVPMSB8IERFX0dSQVBISUNT MSB8IERFX1ZJREVPMiwgTUFMSURQX0lEKDAsIDMpLCBEUk1fRk9STUFUX0JHUkExMDEwMTAyIH0s IFwKPiArCXsgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfVklERU8yIHwgREVfU01BUlQs IE1BTElEUF9JRCgxLCAwKSwgRFJNX0ZPUk1BVF9BUkdCODg4OCB9LCBcCj4gKwl7IERFX1ZJREVP MSB8IERFX0dSQVBISUNTMSB8IERFX1ZJREVPMiB8IERFX1NNQVJULCBNQUxJRFBfSUQoMSwgMSks IERSTV9GT1JNQVRfQUJHUjg4ODggfSwgXAo+ICsJeyBERV9WSURFTzEgfCBERV9HUkFQSElDUzEg fCBERV9WSURFTzIgfCBERV9TTUFSVCwgTUFMSURQX0lEKDEsIDIpLCBEUk1fRk9STUFUX1JHQkE4 ODg4IH0sIFwKPiArCXsgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfVklERU8yIHwgREVf U01BUlQsIE1BTElEUF9JRCgxLCAzKSwgRFJNX0ZPUk1BVF9CR1JBODg4OCB9LCBcCj4gKwl7IERF X1ZJREVPMSB8IERFX0dSQVBISUNTMSB8IERFX1ZJREVPMiB8IERFX1NNQVJULCBNQUxJRFBfSUQo MiwgMCksIERSTV9GT1JNQVRfWFJHQjg4ODggfSwgXAo+ICsJeyBERV9WSURFTzEgfCBERV9HUkFQ SElDUzEgfCBERV9WSURFTzIgfCBERV9TTUFSVCwgTUFMSURQX0lEKDIsIDEpLCBEUk1fRk9STUFU X1hCR1I4ODg4IH0sIFwKPiArCXsgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfVklERU8y IHwgREVfU01BUlQsIE1BTElEUF9JRCgyLCAyKSwgRFJNX0ZPUk1BVF9SR0JYODg4OCB9LCBcCj4g Kwl7IERFX1ZJREVPMSB8IERFX0dSQVBISUNTMSB8IERFX1ZJREVPMiB8IERFX1NNQVJULCBNQUxJ RFBfSUQoMiwgMyksIERSTV9GT1JNQVRfQkdSWDg4ODggfSwgXAo+ICsJeyBERV9WSURFTzEgfCBE RV9HUkFQSElDUzEgfCBERV9WSURFTzIsIE1BTElEUF9JRCgzLCAwKSwgRFJNX0ZPUk1BVF9SR0I4 ODggfSwgXAo+ICsJeyBERV9WSURFTzEgfCBERV9HUkFQSElDUzEgfCBERV9WSURFTzIsIE1BTElE UF9JRCgzLCAxKSwgRFJNX0ZPUk1BVF9CR1I4ODggfSwgXAo+ICsJeyBERV9WSURFTzEgfCBERV9H UkFQSElDUzEgfCBERV9WSURFTzIsIE1BTElEUF9JRCg0LCAwKSwgRFJNX0ZPUk1BVF9SR0JBNTU1 MSB9LCBcCj4gKwl7IERFX1ZJREVPMSB8IERFX0dSQVBISUNTMSB8IERFX1ZJREVPMiwgTUFMSURQ X0lEKDQsIDEpLCBEUk1fRk9STUFUX0FCR1IxNTU1IH0sIFwKPiArCXsgREVfVklERU8xIHwgREVf R1JBUEhJQ1MxIHwgREVfVklERU8yLCBNQUxJRFBfSUQoNCwgMiksIERSTV9GT1JNQVRfUkdCNTY1 IH0sCVwKPiArCXsgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfVklERU8yLCBNQUxJRFBf SUQoNCwgMyksIERSTV9GT1JNQVRfQkdSNTY1IH0sCVwKPiArCXsgREVfVklERU8xIHwgREVfVklE RU8yLCBNQUxJRFBfSUQoNSwgMiksIERSTV9GT1JNQVRfWVVZViB9LCBcCj4gKwl7IERFX1ZJREVP MSB8IERFX1ZJREVPMiwgTUFMSURQX0lEKDUsIDMpLCBEUk1fRk9STUFUX1VZVlkgfSwgXAo+ICsJ eyBERV9WSURFTzEgfCBERV9WSURFTzIsIE1BTElEUF9JRCg1LCA2KSwgRFJNX0ZPUk1BVF9OVjEy IH0sIFwKPiArCXsgREVfVklERU8xIHwgREVfVklERU8yLCBNQUxJRFBfSUQoNSwgNyksIERSTV9G T1JNQVRfWVVWNDIwIH0KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWFsaWRwX2lucHV0X2Zv cm1hdCBtYWxpZHA1NTBfZGVfZm9ybWF0c1tdID0gewo+ICsJTUFMSURQX0NPTU1PTl9GT1JNQVRT LAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBtYWxpZHBfaW5wdXRfZm9ybWF0IG1h bGlkcDY1MF9kZV9mb3JtYXRzW10gPSB7Cj4gKwlNQUxJRFBfQ09NTU9OX0ZPUk1BVFMsCj4gK307 Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG1hbGlkcF9sYXllciBtYWxpZHA1MDBfbGF5ZXJz W10gPSB7Cj4gKwl7IERFX1ZJREVPMSwgTUFMSURQNTAwX0RFX0xWX0JBU0UsIE1BTElEUDUwMF9E RV9MVl9QVFJfQkFTRSB9LAo+ICsJeyBERV9HUkFQSElDUzEsIE1BTElEUDUwMF9ERV9MRzFfQkFT RSwgTUFMSURQNTAwX0RFX0xHMV9QVFJfQkFTRSB9LAo+ICsJeyBERV9HUkFQSElDUzIsIE1BTElE UDUwMF9ERV9MRzJfQkFTRSwgTUFMSURQNTAwX0RFX0xHMl9QVFJfQkFTRSB9LAo+ICt9Owo+ICsK PiArc3RhdGljIGNvbnN0IHN0cnVjdCBtYWxpZHBfbGF5ZXIgbWFsaWRwNTUwX2xheWVyc1tdID0g ewo+ICsJeyBERV9WSURFTzEsIE1BTElEUDU1MF9ERV9MVjFfQkFTRSwgTUFMSURQNTUwX0RFX0xW MV9QVFJfQkFTRSB9LAo+ICsJeyBERV9HUkFQSElDUzEsIE1BTElEUDU1MF9ERV9MR19CQVNFLCBN QUxJRFA1NTBfREVfTEdfUFRSX0JBU0UgfSwKPiArCXsgREVfVklERU8yLCBNQUxJRFA1NTBfREVf TFYyX0JBU0UsIE1BTElEUDU1MF9ERV9MVjJfUFRSX0JBU0UgfSwKPiArCXsgREVfU01BUlQsIE1B TElEUDU1MF9ERV9MU19CQVNFLCBNQUxJRFA1NTBfREVfTFNfUFRSX0JBU0UgfSwKPiArfTsKPiAr Cj4gKyNkZWZpbmUgTUFMSURQX0RFX0RFRkFVTFRfUFJFRkVUQ0hfU1RBUlQJNQo+ICsKPiAraW50 IG1hbGlkcDUwMF9xdWVyeV9odyhzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYpCj4gK3sK PiArCXUzMiBjb25mID0gbWFsaWRwX2h3X3JlYWQoaHdkZXYsIE1BTElEUDUwMF9DT05GSUdfSUQp Owo+ICsJdTggbG5fc2l6ZV9tdWx0ID0gKDEgPDwgKChjb25mID4+IDQpICYgMHgxKSk7Cj4gKwo+ ICsJaWYgKGNvbmYgJiBNQUxJRFBfSFdfRkVBVFVSRV9EUykKPiArCQlod2Rldi0+ZmVhdHVyZXMg fD0gTUFMSURQX0hXX0ZFQVRVUkVfRFM7Cj4gKwlod2Rldi0+bWluX2xpbmVfc2l6ZSA9IDI7Cj4g Kwlod2Rldi0+bWF4X2xpbmVfc2l6ZSA9IFNaXzJLICogbG5fc2l6ZV9tdWx0Owo+ICsJaHdkZXYt PnJvdGF0aW9uX21lbW9yeVswXSA9IFNaXzFLICogNjQgKiBsbl9zaXplX211bHQ7Cj4gKwlod2Rl di0+cm90YXRpb25fbWVtb3J5WzFdID0gMDsgLyogbm8gc2Vjb25kIHJvdGF0aW9uIG1lbW9yeSBi YW5rICovCj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3ZvaWQgbWFsaWRwNTAwX2VudGVy X2NvbmZpZ19tb2RlKHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2RldikKPiArewo+ICsJdTMy IHN0YXR1cywgY291bnQgPSAzMDsKPiArCj4gKwltYWxpZHBfaHdfc2V0Yml0cyhod2RldiwgTUFM SURQNTAwX0RDX0NPTkZJR19SRVEsIE1BTElEUDUwMF9EQ19DT05UUk9MKTsKPiArCXdoaWxlIChj b3VudCkgewo+ICsJCXN0YXR1cyA9IG1hbGlkcF9od19yZWFkKGh3ZGV2LCBod2Rldi0+bWFwLmRj X2Jhc2UgKyBNQUxJRFBfUkVHX1NUQVRVUyk7Cj4gKwkJaWYgKChzdGF0dXMgJiBNQUxJRFA1MDBf RENfQ09ORklHX1JFUSkgPT0gTUFMSURQNTAwX0RDX0NPTkZJR19SRVEpCj4gKwkJCWJyZWFrOwo+ ICsJCS8qCj4gKwkJICogZW50ZXJpbmcgY29uZmlnIG1vZGUgY2FuIHRha2UgYXMgbG9uZyBhcyB0 aGUgcmVuZGVyaW5nCj4gKwkJICogb2YgYSBmdWxsIGZyYW1lLCBoZW5jZSB0aGUgbG9uZyBzbGVl cCBoZXJlCj4gKwkJICovCj4gKwkJdXNsZWVwX3JhbmdlKDEwMDAsIDEwMDAwKTsKPiArCQljb3Vu dC0tOwo+ICsJfQo+ICsJV0FSTihjb3VudCA9PSAwLCAidGltZW91dCB3aGlsZSBlbnRlcmluZyBj b25maWcgbW9kZSIpOwo+ICt9Cj4gKwo+ICt2b2lkIG1hbGlkcDUwMF9sZWF2ZV9jb25maWdfbW9k ZShzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYpCj4gK3sKPiArCXUzMiBzdGF0dXMsIGNv dW50ID0gMzA7Cj4gKwo+ICsJbWFsaWRwX2h3X2NsZWFyYml0cyhod2RldiwgTUFMSURQNTAwX0RD X0NPTkZJR19SRVEsIE1BTElEUDUwMF9EQ19DT05UUk9MKTsKPiArCXdoaWxlIChjb3VudCkgewo+ ICsJCXN0YXR1cyA9IG1hbGlkcF9od19yZWFkKGh3ZGV2LCBod2Rldi0+bWFwLmRjX2Jhc2UgKyBN QUxJRFBfUkVHX1NUQVRVUyk7Cj4gKwkJaWYgKChzdGF0dXMgJiBNQUxJRFA1MDBfRENfQ09ORklH X1JFUSkgPT0gMCkKPiArCQkJYnJlYWs7Cj4gKwkJdXNsZWVwX3JhbmdlKDEwMCwgMTAwMCk7Cj4g KwkJY291bnQtLTsKPiArCX0KPiArCVdBUk4oY291bnQgPT0gMCwgInRpbWVvdXQgd2hpbGUgbGVh dmluZyBjb25maWcgbW9kZSIpOwo+ICt9Cj4gKwo+ICtib29sIG1hbGlkcDUwMF9pbl9jb25maWdf bW9kZShzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYpCj4gK3sKPiArCXUzMiBzdGF0dXM7 Cj4gKwo+ICsJc3RhdHVzID0gbWFsaWRwX2h3X3JlYWQoaHdkZXYsIGh3ZGV2LT5tYXAuZGNfYmFz ZSArIE1BTElEUF9SRUdfU1RBVFVTKTsKPiArCWlmICgoc3RhdHVzICYgTUFMSURQNTAwX0RDX0NP TkZJR19SRVEpID09IE1BTElEUDUwMF9EQ19DT05GSUdfUkVRKQo+ICsJCXJldHVybiB0cnVlOwo+ ICsKPiArCXJldHVybiBmYWxzZTsKPiArfQo+ICsKPiArdm9pZCBtYWxpZHA1MDBfc2V0X2NvbmZp Z192YWxpZChzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYpCj4gK3sKPiArCW1hbGlkcF9o d19zZXRiaXRzKGh3ZGV2LCBNQUxJRFBfQ0ZHX1ZBTElELCBNQUxJRFA1MDBfQ09ORklHX1ZBTElE KTsKPiArfQo+ICsKPiArdm9pZCBtYWxpZHA1MDBfbW9kZXNldChzdHJ1Y3QgbWFsaWRwX2h3X2Rl dmljZSAqaHdkZXYsIHN0cnVjdCB2aWRlb21vZGUgKm1vZGUpCj4gK3sKPiArCXUzMiB2YWwgPSAw Owo+ICsKPiArCW1hbGlkcF9od19jbGVhcmJpdHMoaHdkZXYsIE1BTElEUDUwMF9EQ19DTEVBUl9N QVNLLCBNQUxJRFA1MDBfRENfQ09OVFJPTCk7Cj4gKwlpZiAobW9kZS0+ZmxhZ3MgJiBESVNQTEFZ X0ZMQUdTX0hTWU5DX0hJR0gpCj4gKwkJdmFsIHw9IE1BTElEUDUwMF9IU1lOQ1BPTDsKPiArCWlm IChtb2RlLT5mbGFncyAmIERJU1BMQVlfRkxBR1NfVlNZTkNfSElHSCkKPiArCQl2YWwgfD0gTUFM SURQNTAwX1ZTWU5DUE9MOwo+ICsJdmFsIHw9IE1BTElEUF9ERV9ERUZBVUxUX1BSRUZFVENIX1NU QVJUOwo+ICsJbWFsaWRwX2h3X3NldGJpdHMoaHdkZXYsIHZhbCwgTUFMSURQNTAwX0RDX0NPTlRS T0wpOwo+ICsKPiArCS8qCj4gKwkgKiBNYWxpLURQNTAwIGVuY29kZXMgdGhlIGJhY2tncm91bmQg Y29sb3IgbGlrZSB0aGlzOgo+ICsJICogICAgLSByZWQgICBAIE1BTElEUDUwMF9CR05EX0NPTE9S WzEyOjBdCj4gKwkgKiAgICAtIGdyZWVuIEAgTUFMSURQNTAwX0JHTkRfQ09MT1JbMjc6MTZdCj4g KwkgKiAgICAtIGJsdWUgIEAgKE1BTElEUDUwMF9CR05EX0NPTE9SICsgNClbMTI6MF0KPiArCSAq Lwo+ICsJdmFsID0gKChNQUxJRFBfQkdORF9DT0xPUl9HICYgMHhmZmYpIDw8IDE2KSB8Cj4gKwkg ICAgICAoTUFMSURQX0JHTkRfQ09MT1JfUiAmIDB4ZmZmKTsKPiArCW1hbGlkcF9od193cml0ZSho d2RldiwgdmFsLCBNQUxJRFA1MDBfQkdORF9DT0xPUik7Cj4gKwltYWxpZHBfaHdfd3JpdGUoaHdk ZXYsIE1BTElEUF9CR05EX0NPTE9SX0IsIE1BTElEUDUwMF9CR05EX0NPTE9SICsgNCk7Cj4gKwo+ ICsJdmFsID0gTUFMSURQX0RFX0hfRlJPTlRQT1JDSChtb2RlLT5oZnJvbnRfcG9yY2gpIHwKPiAr CQlNQUxJRFBfREVfSF9CQUNLUE9SQ0gobW9kZS0+aGJhY2tfcG9yY2gpOwo+ICsJbWFsaWRwX2h3 X3dyaXRlKGh3ZGV2LCB2YWwsIE1BTElEUDUwMF9USU1JTkdTX0JBU0UgKyBNQUxJRFBfREVfSF9U SU1JTkdTKTsKPiArCj4gKwl2YWwgPSBNQUxJRFA1MDBfREVfVl9GUk9OVFBPUkNIKG1vZGUtPnZm cm9udF9wb3JjaCkgfAo+ICsJCU1BTElEUF9ERV9WX0JBQ0tQT1JDSChtb2RlLT52YmFja19wb3Jj aCk7Cj4gKwltYWxpZHBfaHdfd3JpdGUoaHdkZXYsIHZhbCwgTUFMSURQNTAwX1RJTUlOR1NfQkFT RSArIE1BTElEUF9ERV9WX1RJTUlOR1MpOwo+ICsKPiArCXZhbCA9IE1BTElEUF9ERV9IX1NZTkNX SURUSChtb2RlLT5oc3luY19sZW4pIHwKPiArCQlNQUxJRFBfREVfVl9TWU5DV0lEVEgobW9kZS0+ dnN5bmNfbGVuKTsKPiArCW1hbGlkcF9od193cml0ZShod2RldiwgdmFsLCBNQUxJRFA1MDBfVElN SU5HU19CQVNFICsgTUFMSURQX0RFX1NZTkNfV0lEVEgpOwo+ICsKPiArCXZhbCA9IE1BTElEUF9E RV9IX0FDVElWRShtb2RlLT5oYWN0aXZlKSB8IE1BTElEUF9ERV9WX0FDVElWRShtb2RlLT52YWN0 aXZlKTsKPiArCW1hbGlkcF9od193cml0ZShod2RldiwgdmFsLCBNQUxJRFA1MDBfVElNSU5HU19C QVNFICsgTUFMSURQX0RFX0hWX0FDVElWRSk7Cj4gKwo+ICsJaWYgKG1vZGUtPmZsYWdzICYgRElT UExBWV9GTEFHU19JTlRFUkxBQ0VEKQo+ICsJCW1hbGlkcF9od19zZXRiaXRzKGh3ZGV2LCBNQUxJ RFBfRElTUF9GVU5DX0lMQUNFRCwgTUFMSURQX0RFX0RJU1BMQVlfRlVOQyk7Cj4gKwllbHNlCj4g KwkJbWFsaWRwX2h3X2NsZWFyYml0cyhod2RldiwgTUFMSURQX0RJU1BfRlVOQ19JTEFDRUQsIE1B TElEUF9ERV9ESVNQTEFZX0ZVTkMpOwo+ICt9Cj4gKwo+ICtpbnQgbWFsaWRwNTAwX3JvdG1lbV9y ZXF1aXJlZChzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYsIHUxNiB3LCB1MTYgaCwgdTMy IGZtdCkKPiArewo+ICsJdW5zaWduZWQgaW50IGRlcHRoOwo+ICsJaW50IGJwcDsKPiArCj4gKwkv KiBSR0I4ODggb3IgQkdSODg4IGNhbid0IGJlIHJvdGF0ZWQgKi8KPiArCWlmICgoZm10ID09IERS TV9GT1JNQVRfUkdCODg4KSB8fCAoZm10ID09IERSTV9GT1JNQVRfQkdSODg4KSkKPiArCQlyZXR1 cm4gLUVJTlZBTDsKPiArCj4gKwkvKgo+ICsJICogRWFjaCBsYXllciBuZWVkcyBlbm91Z2ggcm90 YXRpb24gbWVtb3J5IHRvIGZpdCA4IGxpbmVzCj4gKwkgKiB3b3J0aCBvZiBwaXhlbCBkYXRhLiBS ZXF1aXJlZCBzaXplIGlzIHRoZW46Cj4gKwkgKiAgICBzaXplID0gKHJvdGF0ZWRfd2lkdGggKiBi cHAgKiA4ICkgLyA4Owo+ICsJICovCj4gKwlkcm1fZmJfZ2V0X2JwcF9kZXB0aChmbXQsICZkZXB0 aCwgJmJwcCk7Cj4gKwo+ICsJcmV0dXJuIHcgKiBicHA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg bWFsaWRwNTUwX3F1ZXJ5X2h3KHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2RldikKPiArewo+ ICsJdTMyIGNvbmYgPSBtYWxpZHBfaHdfcmVhZChod2RldiwgTUFMSURQNTUwX0NPTkZJR19JRCk7 Cj4gKwl1OCBsbl9zaXplID0gKGNvbmYgPj4gNCkgJiAweDMsIHJzaXplOwo+ICsKPiArCWlmIChj b25mICYgTUFMSURQX0hXX0ZFQVRVUkVfRFMpCj4gKwkJaHdkZXYtPmZlYXR1cmVzIHw9IE1BTElE UF9IV19GRUFUVVJFX0RTOwo+ICsKPiArCWh3ZGV2LT5taW5fbGluZV9zaXplID0gMjsKPiArCj4g Kwlzd2l0Y2ggKGxuX3NpemUpIHsKPiArCWNhc2UgMDoKPiArCQlod2Rldi0+bWF4X2xpbmVfc2l6 ZSA9IFNaXzJLOwo+ICsJCS8qIHR3byBiYW5rcyBvZiA2NEtCIGZvciByb3RhdGlvbiBtZW1vcnkg Ki8KPiArCQlyc2l6ZSA9IDY0Owo+ICsJCWJyZWFrOwo+ICsJY2FzZSAxOgo+ICsJCWh3ZGV2LT5t YXhfbGluZV9zaXplID0gU1pfNEs7Cj4gKwkJLyogdHdvIGJhbmtzIG9mIDEyOEtCIGZvciByb3Rh dGlvbiBtZW1vcnkgKi8KPiArCQlyc2l6ZSA9IDEyODsKPiArCQlicmVhazsKPiArCWNhc2UgMjoK PiArCQlod2Rldi0+bWF4X2xpbmVfc2l6ZSA9IDEyODA7Cj4gKwkJLyogdHdvIGJhbmtzIG9mIDQw S0IgZm9yIHJvdGF0aW9uIG1lbW9yeSAqLwo+ICsJCXJzaXplID0gNDA7Cj4gKwkJYnJlYWs7Cj4g KwljYXNlIDM6Cj4gKwkJLyogcmVzZXJ2ZWQgdmFsdWUgKi8KPiArCQlod2Rldi0+bWF4X2xpbmVf c2l6ZSA9IDA7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJaHdkZXYtPnJvdGF0 aW9uX21lbW9yeVswXSA9IGh3ZGV2LT5yb3RhdGlvbl9tZW1vcnlbMV0gPSByc2l6ZSAqIFNaXzFL Owo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3ZvaWQgbWFsaWRwNTUwX2VudGVyX2NvbmZpZ19t b2RlKHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2RldikKPiArewo+ICsJdTMyIHN0YXR1cywg Y291bnQgPSAzMDsKPiArCj4gKwltYWxpZHBfaHdfc2V0Yml0cyhod2RldiwgTUFMSURQNTUwX0RD X0NPTkZJR19SRVEsIE1BTElEUDU1MF9EQ19DT05UUk9MKTsKPiArCXdoaWxlIChjb3VudCkgewo+ ICsJCXN0YXR1cyA9IG1hbGlkcF9od19yZWFkKGh3ZGV2LCBod2Rldi0+bWFwLmRjX2Jhc2UgKyBN QUxJRFBfUkVHX1NUQVRVUyk7Cj4gKwkJaWYgKChzdGF0dXMgJiBNQUxJRFA1NTBfRENfQ09ORklH X1JFUSkgPT0gTUFMSURQNTUwX0RDX0NPTkZJR19SRVEpCj4gKwkJCWJyZWFrOwo+ICsJCXVzbGVl cF9yYW5nZSgxMDAsIDEwMDApOwo+ICsJCWNvdW50LS07Cj4gKwl9Cj4gKwlXQVJOKGNvdW50ID09 IDAsICJ0aW1lb3V0IHdoaWxlIGVudGVyaW5nIGNvbmZpZyBtb2RlIik7Cj4gK30KPiArCj4gK3Zv aWQgbWFsaWRwNTUwX2xlYXZlX2NvbmZpZ19tb2RlKHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpo d2RldikKPiArewo+ICsJdTMyIHN0YXR1cywgY291bnQgPSAzMDsKPiArCj4gKwltYWxpZHBfaHdf Y2xlYXJiaXRzKGh3ZGV2LCBNQUxJRFA1NTBfRENfQ09ORklHX1JFUSwgTUFMSURQNTUwX0RDX0NP TlRST0wpOwo+ICsJd2hpbGUgKGNvdW50KSB7Cj4gKwkJc3RhdHVzID0gbWFsaWRwX2h3X3JlYWQo aHdkZXYsIGh3ZGV2LT5tYXAuZGNfYmFzZSArIE1BTElEUF9SRUdfU1RBVFVTKTsKPiArCQlpZiAo KHN0YXR1cyAmIE1BTElEUDU1MF9EQ19DT05GSUdfUkVRKSA9PSAwKQo+ICsJCQlicmVhazsKPiAr CQl1c2xlZXBfcmFuZ2UoMTAwLCAxMDAwKTsKPiArCQljb3VudC0tOwo+ICsJfQo+ICsJV0FSTihj b3VudCA9PSAwLCAidGltZW91dCB3aGlsZSBsZWF2aW5nIGNvbmZpZyBtb2RlIik7Cj4gK30KPiAr Cj4gK2Jvb2wgbWFsaWRwNTUwX2luX2NvbmZpZ19tb2RlKHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNl ICpod2RldikKPiArewo+ICsJdTMyIHN0YXR1czsKPiArCj4gKwlzdGF0dXMgPSBtYWxpZHBfaHdf cmVhZChod2RldiwgaHdkZXYtPm1hcC5kY19iYXNlICsgTUFMSURQX1JFR19TVEFUVVMpOwo+ICsJ aWYgKChzdGF0dXMgJiBNQUxJRFA1NTBfRENfQ09ORklHX1JFUSkgPT0gTUFMSURQNTUwX0RDX0NP TkZJR19SRVEpCj4gKwkJcmV0dXJuIHRydWU7Cj4gKwo+ICsJcmV0dXJuIGZhbHNlOwo+ICt9Cj4g Kwo+ICt2b2lkIG1hbGlkcDU1MF9zZXRfY29uZmlnX3ZhbGlkKHN0cnVjdCBtYWxpZHBfaHdfZGV2 aWNlICpod2RldikKPiArewo+ICsJbWFsaWRwX2h3X3NldGJpdHMoaHdkZXYsIE1BTElEUF9DRkdf VkFMSUQsIE1BTElEUDU1MF9DT05GSUdfVkFMSUQpOwo+ICt9Cj4gKwo+ICt2b2lkIG1hbGlkcDU1 MF9tb2Rlc2V0KHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2Rldiwgc3RydWN0IHZpZGVvbW9k ZSAqbW9kZSkKPiArewo+ICsJdTMyIHZhbCA9IE1BTElEUF9ERV9ERUZBVUxUX1BSRUZFVENIX1NU QVJUOwo+ICsKPiArCW1hbGlkcF9od193cml0ZShod2RldiwgdmFsLCBNQUxJRFA1NTBfREVfQ09O VFJPTCk7Cj4gKwkvKgo+ICsJICogTWFsaS1EUDU1MCBhbmQgTWFsaS1EUDY1MCBlbmNvZGUgdGhl IGJhY2tncm91bmQgY29sb3IgbGlrZSB0aGlzOgo+ICsJICogICAtIHJlZCAgIEAgTUFMSURQNTUw X0RFX0JHTkRfQ09MT1JbMjM6MTZdCj4gKwkgKiAgIC0gZ3JlZW4gQCBNQUxJRFA1NTBfREVfQkdO RF9DT0xPUlsxNTo4XQo+ICsJICogICAtIGJsdWUgIEAgTUFMSURQNTUwX0RFX0JHTkRfQ09MT1Jb NzowXQo+ICsJICoKPiArCSAqIFdlIG5lZWQgdG8gdHJ1bmNhdGUgdGhlIGxlYXN0IHNpZ25pZmlj YW50IDQgYml0cyBmcm9tIHRoZSBkZWZhdWx0Cj4gKwkgKiBNQUxJRFBfQkdORF9DT0xPUl94IHZh bHVlcwo+ICsJICovCj4gKwl2YWwgPSAoKChNQUxJRFBfQkdORF9DT0xPUl9SID4+IDQpICYgMHhm ZikgPDwgMTYpIHwKPiArCSAgICAgICgoKE1BTElEUF9CR05EX0NPTE9SX0cgPj4gNCkgJiAweGZm KSA8PCA4KSB8Cj4gKwkgICAgICAoKE1BTElEUF9CR05EX0NPTE9SX0IgPj4gNCkgJiAweGZmKTsK PiArCW1hbGlkcF9od193cml0ZShod2RldiwgdmFsLCBNQUxJRFA1NTBfREVfQkdORF9DT0xPUik7 Cj4gKwo+ICsJdmFsID0gTUFMSURQX0RFX0hfRlJPTlRQT1JDSChtb2RlLT5oZnJvbnRfcG9yY2gp IHwKPiArCQlNQUxJRFBfREVfSF9CQUNLUE9SQ0gobW9kZS0+aGJhY2tfcG9yY2gpOwo+ICsJbWFs aWRwX2h3X3dyaXRlKGh3ZGV2LCB2YWwsIE1BTElEUDU1MF9USU1JTkdTX0JBU0UgKyBNQUxJRFBf REVfSF9USU1JTkdTKTsKPiArCj4gKwl2YWwgPSBNQUxJRFA1NTBfREVfVl9GUk9OVFBPUkNIKG1v ZGUtPnZmcm9udF9wb3JjaCkgfAo+ICsJCU1BTElEUF9ERV9WX0JBQ0tQT1JDSChtb2RlLT52YmFj a19wb3JjaCk7Cj4gKwltYWxpZHBfaHdfd3JpdGUoaHdkZXYsIHZhbCwgTUFMSURQNTUwX1RJTUlO R1NfQkFTRSArIE1BTElEUF9ERV9WX1RJTUlOR1MpOwo+ICsKPiArCXZhbCA9IE1BTElEUF9ERV9I X1NZTkNXSURUSChtb2RlLT5oc3luY19sZW4pIHwKPiArCQlNQUxJRFBfREVfVl9TWU5DV0lEVEgo bW9kZS0+dnN5bmNfbGVuKTsKPiArCWlmIChtb2RlLT5mbGFncyAmIERJU1BMQVlfRkxBR1NfSFNZ TkNfSElHSCkKPiArCQl2YWwgfD0gTUFMSURQNTUwX0hTWU5DUE9MOwo+ICsJaWYgKG1vZGUtPmZs YWdzICYgRElTUExBWV9GTEFHU19WU1lOQ19ISUdIKQo+ICsJCXZhbCB8PSBNQUxJRFA1NTBfVlNZ TkNQT0w7Cj4gKwltYWxpZHBfaHdfd3JpdGUoaHdkZXYsIHZhbCwgTUFMSURQNTUwX1RJTUlOR1Nf QkFTRSArIE1BTElEUF9ERV9TWU5DX1dJRFRIKTsKPiArCj4gKwl2YWwgPSBNQUxJRFBfREVfSF9B Q1RJVkUobW9kZS0+aGFjdGl2ZSkgfCBNQUxJRFBfREVfVl9BQ1RJVkUobW9kZS0+dmFjdGl2ZSk7 Cj4gKwltYWxpZHBfaHdfd3JpdGUoaHdkZXYsIHZhbCwgTUFMSURQNTUwX1RJTUlOR1NfQkFTRSAr IE1BTElEUF9ERV9IVl9BQ1RJVkUpOwo+ICsKPiArCWlmIChtb2RlLT5mbGFncyAmIERJU1BMQVlf RkxBR1NfSU5URVJMQUNFRCkKPiArCQltYWxpZHBfaHdfc2V0Yml0cyhod2RldiwgTUFMSURQX0RJ U1BfRlVOQ19JTEFDRUQsIE1BTElEUF9ERV9ESVNQTEFZX0ZVTkMpOwo+ICsJZWxzZQo+ICsJCW1h bGlkcF9od19jbGVhcmJpdHMoaHdkZXYsIE1BTElEUF9ESVNQX0ZVTkNfSUxBQ0VELCBNQUxJRFBf REVfRElTUExBWV9GVU5DKTsKPiArfQo+ICsKPiAraW50IG1hbGlkcDU1MF9yb3RtZW1fcmVxdWly ZWQoc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2LCB1MTYgdywgdTE2IGgsIHUzMiBmbXQp Cj4gK3sKPiArCXUzMiBieXRlc19wZXJfY29sOwo+ICsKPiArCS8qIHJhdyBSR0I4ODggb3IgQkdS ODg4IGNhbid0IGJlIHJvdGF0ZWQgKi8KPiArCWlmICgoZm10ID09IERSTV9GT1JNQVRfUkdCODg4 KSB8fCAoZm10ID09IERSTV9GT1JNQVRfQkdSODg4KSkKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiAr Cj4gKwlzd2l0Y2ggKGZtdCkgewo+ICsJLyogOCBsaW5lcyBhdCA0IGJ5dGVzIHBlciBwaXhlbCAq Lwo+ICsJY2FzZSBEUk1fRk9STUFUX0FSR0IyMTAxMDEwOgo+ICsJY2FzZSBEUk1fRk9STUFUX0FC R1IyMTAxMDEwOgo+ICsJY2FzZSBEUk1fRk9STUFUX1JHQkExMDEwMTAyOgo+ICsJY2FzZSBEUk1f Rk9STUFUX0JHUkExMDEwMTAyOgo+ICsJY2FzZSBEUk1fRk9STUFUX0FSR0I4ODg4Ogo+ICsJY2Fz ZSBEUk1fRk9STUFUX0FCR1I4ODg4Ogo+ICsJY2FzZSBEUk1fRk9STUFUX1JHQkE4ODg4Ogo+ICsJ Y2FzZSBEUk1fRk9STUFUX0JHUkE4ODg4Ogo+ICsJY2FzZSBEUk1fRk9STUFUX1hSR0I4ODg4Ogo+ ICsJY2FzZSBEUk1fRk9STUFUX1hCR1I4ODg4Ogo+ICsJY2FzZSBEUk1fRk9STUFUX1JHQlg4ODg4 Ogo+ICsJY2FzZSBEUk1fRk9STUFUX0JHUlg4ODg4Ogo+ICsJY2FzZSBEUk1fRk9STUFUX1JHQjg4 ODoKPiArCWNhc2UgRFJNX0ZPUk1BVF9CR1I4ODg6Cj4gKwkvKiAxNiBsaW5lcyBhdCAyIGJ5dGVz IHBlciBwaXhlbCAqLwo+ICsJY2FzZSBEUk1fRk9STUFUX1JHQkE1NTUxOgo+ICsJY2FzZSBEUk1f Rk9STUFUX0FCR1IxNTU1Ogo+ICsJY2FzZSBEUk1fRk9STUFUX1JHQjU2NToKPiArCWNhc2UgRFJN X0ZPUk1BVF9CR1I1NjU6Cj4gKwljYXNlIERSTV9GT1JNQVRfVVlWWToKPiArCWNhc2UgRFJNX0ZP Uk1BVF9ZVVlWOgo+ICsJCWJ5dGVzX3Blcl9jb2wgPSAzMjsKPiArCQlicmVhazsKPiArCS8qIDE2 IGxpbmVzIGF0IDEuNSBieXRlcyBwZXIgcGl4ZWwgKi8KPiArCWNhc2UgRFJNX0ZPUk1BVF9OVjEy Ogo+ICsJY2FzZSBEUk1fRk9STUFUX1lVVjQyMDoKPiArCQlieXRlc19wZXJfY29sID0gMjQ7Cj4g KwkJYnJlYWs7Cj4gKwlkZWZhdWx0Ogo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiAr CXJldHVybiB3ICogYnl0ZXNfcGVyX2NvbDsKPiArfQo+ICsKPiArc3RhdGljIGludCBtYWxpZHA2 NTBfcXVlcnlfaHcoc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2KQo+ICt7Cj4gKwl1MzIg Y29uZiA9IG1hbGlkcF9od19yZWFkKGh3ZGV2LCBNQUxJRFA1NTBfQ09ORklHX0lEKTsKPiArCXU4 IGxuX3NpemUgPSAoY29uZiA+PiA0KSAmIDB4MywgcnNpemU7Cj4gKwo+ICsJaWYgKGNvbmYgJiBN QUxJRFBfSFdfRkVBVFVSRV9EUykKPiArCQlod2Rldi0+ZmVhdHVyZXMgfD0gTUFMSURQX0hXX0ZF QVRVUkVfRFM7Cj4gKwo+ICsJaHdkZXYtPm1pbl9saW5lX3NpemUgPSA0Owo+ICsKPiArCXN3aXRj aCAobG5fc2l6ZSkgewo+ICsJY2FzZSAwOgo+ICsJY2FzZSAyOgo+ICsJCS8qIHJlc2VydmVkIHZh bHVlcyAqLwo+ICsJCWh3ZGV2LT5tYXhfbGluZV9zaXplID0gMDsKPiArCQlyZXR1cm4gLUVJTlZB TDsKPiArCWNhc2UgMToKPiArCQlod2Rldi0+bWF4X2xpbmVfc2l6ZSA9IFNaXzRLOwo+ICsJCS8q IHR3byBiYW5rcyBvZiAxMjhLQiBmb3Igcm90YXRpb24gbWVtb3J5ICovCj4gKwkJcnNpemUgPSAx Mjg7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIDM6Cj4gKwkJaHdkZXYtPm1heF9saW5lX3NpemUgPSAy NTYwOwo+ICsJCS8qIHR3byBiYW5rcyBvZiA4MEtCIGZvciByb3RhdGlvbiBtZW1vcnkgKi8KPiAr CQlyc2l6ZSA9IDgwOwo+ICsJfQo+ICsKPiArCWh3ZGV2LT5yb3RhdGlvbl9tZW1vcnlbMF0gPSBo d2Rldi0+cm90YXRpb25fbWVtb3J5WzFdID0gcnNpemUgKiBTWl8xSzsKPiArCXJldHVybiAwOwo+ ICt9Cj4gKwo+ICtjb25zdCBzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSBtYWxpZHBfZGV2aWNlW01B TElEUF9NQVhfREVWSUNFU10gPSB7Cj4gKwlbTUFMSURQXzUwMF0gPSB7Cj4gKwkJLm1hcCA9IHsK PiArCQkJLnNlX2Jhc2UgPSBNQUxJRFA1MDBfU0VfQkFTRSwKPiArCQkJLmRjX2Jhc2UgPSBNQUxJ RFA1MDBfRENfQkFTRSwKPiArCQkJLmRlX2lycV9tYXAgPSB7Cj4gKwkJCQkuaXJxX21hc2sgPSBN QUxJRFBfREVfSVJRX1VOREVSUlVOIHwKPiArCQkJCQkgICAgTUFMSURQNTAwX0RFX0lSUV9BWElf RVJSIHwKPiArCQkJCQkgICAgTUFMSURQNTAwX0RFX0lSUV9WU1lOQyB8Cj4gKwkJCQkJICAgIE1B TElEUDUwMF9ERV9JUlFfR0xPQkFMLAo+ICsJCQkJLnZzeW5jX2lycSA9IE1BTElEUDUwMF9ERV9J UlFfVlNZTkMsCj4gKwkJCX0sCj4gKwkJCS5zZV9pcnFfbWFwID0gewo+ICsJCQkJLmlycV9tYXNr ID0gTUFMSURQNTAwX1NFX0lSUV9DT05GX01PREUsCj4gKwkJCQkudnN5bmNfaXJxID0gMCwKPiAr CQkJfSwKPiArCQkJLmRjX2lycV9tYXAgPSB7Cj4gKwkJCQkuaXJxX21hc2sgPSBNQUxJRFA1MDBf REVfSVJRX0NPTkZfVkFMSUQsCj4gKwkJCQkudnN5bmNfaXJxID0gTUFMSURQNTAwX0RFX0lSUV9D T05GX1ZBTElELAo+ICsJCQl9LAo+ICsJCQkubGF5ZXJzID0gbWFsaWRwNTAwX2xheWVycywKPiAr CQkJLm5fbGF5ZXJzID0gQVJSQVlfU0laRShtYWxpZHA1MDBfbGF5ZXJzKSwKPiArCQkJLmlucHV0 X2Zvcm1hdHMgPSBtYWxpZHA1MDBfZGVfZm9ybWF0cywKPiArCQkJLm5faW5wdXRfZm9ybWF0cyA9 IEFSUkFZX1NJWkUobWFsaWRwNTAwX2RlX2Zvcm1hdHMpLAo+ICsJCQkub3V0X2RlcHRoX2Jhc2Ug PSBNQUxJRFA1MDBfT1VUUFVUX0RFUFRILAo+ICsJCQkuZmVhdHVyZXMgPSAwLAkvKiBubyBDTEVB UklSUSByZWdpc3RlciAqLwo+ICsJCX0sCj4gKwkJLnF1ZXJ5X2h3ID0gbWFsaWRwNTAwX3F1ZXJ5 X2h3LAo+ICsJCS5lbnRlcl9jb25maWdfbW9kZSA9IG1hbGlkcDUwMF9lbnRlcl9jb25maWdfbW9k ZSwKPiArCQkubGVhdmVfY29uZmlnX21vZGUgPSBtYWxpZHA1MDBfbGVhdmVfY29uZmlnX21vZGUs Cj4gKwkJLmluX2NvbmZpZ19tb2RlID0gbWFsaWRwNTAwX2luX2NvbmZpZ19tb2RlLAo+ICsJCS5z ZXRfY29uZmlnX3ZhbGlkID0gbWFsaWRwNTAwX3NldF9jb25maWdfdmFsaWQsCj4gKwkJLm1vZGVz ZXQgPSBtYWxpZHA1MDBfbW9kZXNldCwKPiArCQkucm90bWVtX3JlcXVpcmVkID0gbWFsaWRwNTAw X3JvdG1lbV9yZXF1aXJlZCwKPiArCX0sCj4gKwlbTUFMSURQXzU1MF0gPSB7Cj4gKwkJLm1hcCA9 IHsKPiArCQkJLnNlX2Jhc2UgPSBNQUxJRFA1NTBfU0VfQkFTRSwKPiArCQkJLmRjX2Jhc2UgPSBN QUxJRFA1NTBfRENfQkFTRSwKPiArCQkJLmRlX2lycV9tYXAgPSB7Cj4gKwkJCQkuaXJxX21hc2sg PSBNQUxJRFBfREVfSVJRX1VOREVSUlVOIHwKPiArCQkJCQkgICAgTUFMSURQNTUwX0RFX0lSUV9W U1lOQywKPiArCQkJCS52c3luY19pcnEgPSBNQUxJRFA1NTBfREVfSVJRX1ZTWU5DLAo+ICsJCQl9 LAo+ICsJCQkuc2VfaXJxX21hcCA9IHsKPiArCQkJCS5pcnFfbWFzayA9IE1BTElEUDU1MF9TRV9J UlFfRU9XIHwKPiArCQkJCQkgICAgTUFMSURQNTUwX1NFX0lSUV9BWElfRVJSLAo+ICsJCQl9LAo+ ICsJCQkuZGNfaXJxX21hcCA9IHsKPiArCQkJCS5pcnFfbWFzayA9IE1BTElEUDU1MF9EQ19JUlFf Q09ORl9WQUxJRCwKPiArCQkJCS52c3luY19pcnEgPSBNQUxJRFA1NTBfRENfSVJRX0NPTkZfVkFM SUQsCj4gKwkJCX0sCj4gKwkJCS5sYXllcnMgPSBtYWxpZHA1NTBfbGF5ZXJzLAo+ICsJCQkubl9s YXllcnMgPSBBUlJBWV9TSVpFKG1hbGlkcDU1MF9sYXllcnMpLAo+ICsJCQkuaW5wdXRfZm9ybWF0 cyA9IG1hbGlkcDU1MF9kZV9mb3JtYXRzLAo+ICsJCQkubl9pbnB1dF9mb3JtYXRzID0gQVJSQVlf U0laRShtYWxpZHA1NTBfZGVfZm9ybWF0cyksCj4gKwkJCS5vdXRfZGVwdGhfYmFzZSA9IE1BTElE UDU1MF9ERV9PVVRQVVRfREVQVEgsCj4gKwkJCS5mZWF0dXJlcyA9IE1BTElEUF9SRUdNQVBfSEFT X0NMRUFSSVJRLAo+ICsJCX0sCj4gKwkJLnF1ZXJ5X2h3ID0gbWFsaWRwNTUwX3F1ZXJ5X2h3LAo+ ICsJCS5lbnRlcl9jb25maWdfbW9kZSA9IG1hbGlkcDU1MF9lbnRlcl9jb25maWdfbW9kZSwKPiAr CQkubGVhdmVfY29uZmlnX21vZGUgPSBtYWxpZHA1NTBfbGVhdmVfY29uZmlnX21vZGUsCj4gKwkJ LmluX2NvbmZpZ19tb2RlID0gbWFsaWRwNTUwX2luX2NvbmZpZ19tb2RlLAo+ICsJCS5zZXRfY29u ZmlnX3ZhbGlkID0gbWFsaWRwNTUwX3NldF9jb25maWdfdmFsaWQsCj4gKwkJLm1vZGVzZXQgPSBt YWxpZHA1NTBfbW9kZXNldCwKPiArCQkucm90bWVtX3JlcXVpcmVkID0gbWFsaWRwNTUwX3JvdG1l bV9yZXF1aXJlZCwKPiArCX0sCj4gKwlbTUFMSURQXzY1MF0gPSB7Cj4gKwkJLm1hcCA9IHsKPiAr CQkJLnNlX2Jhc2UgPSBNQUxJRFA1NTBfU0VfQkFTRSwKPiArCQkJLmRjX2Jhc2UgPSBNQUxJRFA1 NTBfRENfQkFTRSwKPiArCQkJLmRlX2lycV9tYXAgPSB7Cj4gKwkJCQkuaXJxX21hc2sgPSBNQUxJ RFBfREVfSVJRX1VOREVSUlVOIHwKPiArCQkJCQkgICAgTUFMSURQNjUwX0RFX0lSUV9EUklGVCB8 Cj4gKwkJCQkJICAgIE1BTElEUDU1MF9ERV9JUlFfVlNZTkMsCj4gKwkJCQkudnN5bmNfaXJxID0g TUFMSURQNTUwX0RFX0lSUV9WU1lOQywKPiArCQkJfSwKPiArCQkJLnNlX2lycV9tYXAgPSB7Cj4g KwkJCQkuaXJxX21hc2sgPSBNQUxJRFA1NTBfU0VfSVJRX0VPVyB8Cj4gKwkJCQkJICAgIE1BTElE UDU1MF9TRV9JUlFfQVhJX0VSUiwKPiArCQkJfSwKPiArCQkJLmRjX2lycV9tYXAgPSB7Cj4gKwkJ CQkuaXJxX21hc2sgPSBNQUxJRFA1NTBfRENfSVJRX0NPTkZfVkFMSUQsCj4gKwkJCQkudnN5bmNf aXJxID0gTUFMSURQNTUwX0RDX0lSUV9DT05GX1ZBTElELAo+ICsJCQl9LAo+ICsJCQkubGF5ZXJz ID0gbWFsaWRwNTUwX2xheWVycywKPiArCQkJLm5fbGF5ZXJzID0gQVJSQVlfU0laRShtYWxpZHA1 NTBfbGF5ZXJzKSwKPiArCQkJLmlucHV0X2Zvcm1hdHMgPSBtYWxpZHA2NTBfZGVfZm9ybWF0cywK PiArCQkJLm5faW5wdXRfZm9ybWF0cyA9IEFSUkFZX1NJWkUobWFsaWRwNjUwX2RlX2Zvcm1hdHMp LAo+ICsJCQkub3V0X2RlcHRoX2Jhc2UgPSBNQUxJRFA1NTBfREVfT1VUUFVUX0RFUFRILAo+ICsJ CQkuZmVhdHVyZXMgPSBNQUxJRFBfUkVHTUFQX0hBU19DTEVBUklSUSwKPiArCQl9LAo+ICsJCS5x dWVyeV9odyA9IG1hbGlkcDY1MF9xdWVyeV9odywKPiArCQkuZW50ZXJfY29uZmlnX21vZGUgPSBt YWxpZHA1NTBfZW50ZXJfY29uZmlnX21vZGUsCj4gKwkJLmxlYXZlX2NvbmZpZ19tb2RlID0gbWFs aWRwNTUwX2xlYXZlX2NvbmZpZ19tb2RlLAo+ICsJCS5pbl9jb25maWdfbW9kZSA9IG1hbGlkcDU1 MF9pbl9jb25maWdfbW9kZSwKPiArCQkuc2V0X2NvbmZpZ192YWxpZCA9IG1hbGlkcDU1MF9zZXRf Y29uZmlnX3ZhbGlkLAo+ICsJCS5tb2Rlc2V0ID0gbWFsaWRwNTUwX21vZGVzZXQsCj4gKwkJLnJv dG1lbV9yZXF1aXJlZCA9IG1hbGlkcDU1MF9yb3RtZW1fcmVxdWlyZWQsCj4gKwl9LAo+ICt9Owo+ ICsKPiArdTggbWFsaWRwX2h3X2dldF9mb3JtYXRfaWQoY29uc3Qgc3RydWN0IG1hbGlkcF9od19y ZWdtYXAgKm1hcCwKPiArCQkJICAgdTggbGF5ZXJfaWQsIHUzMiBmb3JtYXQpCj4gK3sKPiArCXU4 IGk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IG1hcC0+bl9pbnB1dF9mb3JtYXRzOyBpKyspIHsK PiArCQlpZiAoKChtYXAtPmlucHV0X2Zvcm1hdHNbaV0ubGF5ZXIgJiBsYXllcl9pZCkgPT0gbGF5 ZXJfaWQpICYmCj4gKwkJICAgIChtYXAtPmlucHV0X2Zvcm1hdHNbaV0uZm9ybWF0ID09IGZvcm1h dCkpCj4gKwkJCXJldHVybiBtYXAtPmlucHV0X2Zvcm1hdHNbaV0uaWQ7Cj4gKwl9Cj4gKwo+ICsJ cmV0dXJuICh1OCktMTsKPiArfQo+ICsKPiArCj4gK3UzMiBtYWxpZHBfaHdfcmVhZChzdHJ1Y3Qg bWFsaWRwX2h3X2RldmljZSAqaHdkZXYsIHUzMiByZWcpCj4gK3sKPiArCXUzMiB2YWx1ZSA9IHJl YWRsKGh3ZGV2LT5yZWdzICsgcmVnKTsKPiArCXJldHVybiB2YWx1ZTsKPiArfQo+ICsKPiArdm9p ZCBtYWxpZHBfaHdfd3JpdGUoc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2LCB1MzIgdmFs dWUsIHUzMiByZWcpCj4gK3sKPiArCXdyaXRlbCh2YWx1ZSwgaHdkZXYtPnJlZ3MgKyByZWcpOwo+ ICt9Cj4gKwo+ICt2b2lkIG1hbGlkcF9od19zZXRiaXRzKHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNl ICpod2RldiwgdTMyIG1hc2ssIHUzMiByZWcpCj4gK3sKPiArCXUzMiBkYXRhID0gbWFsaWRwX2h3 X3JlYWQoaHdkZXYsIHJlZyk7Cj4gKwo+ICsJZGF0YSB8PSBtYXNrOwo+ICsJbWFsaWRwX2h3X3dy aXRlKGh3ZGV2LCBkYXRhLCByZWcpOwo+ICt9Cj4gKwo+ICt2b2lkIG1hbGlkcF9od19jbGVhcmJp dHMoc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2LCB1MzIgbWFzaywgdTMyIHJlZykKPiAr ewo+ICsJdTMyIGRhdGEgPSBtYWxpZHBfaHdfcmVhZChod2RldiwgcmVnKTsKPiArCj4gKwlkYXRh ICY9IH5tYXNrOwo+ICsJbWFsaWRwX2h3X3dyaXRlKGh3ZGV2LCBkYXRhLCByZWcpOwo+ICt9Cj4g Kwo+ICt2b2lkIG1hbGlkcF9od19jbGVhcl9pcnEoc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3 ZGV2LCB1OCBibG9jaywgdTMyIGlycSkKPiArewo+ICsJdTMyIGJhc2UgPSAwOwo+ICsKPiArCXN3 aXRjaCAoYmxvY2spIHsKPiArCWNhc2UgTUFMSURQX0RFX0JMT0NLOgo+ICsJCWJhc2UgPSAwOwo+ ICsJCWJyZWFrOwo+ICsJY2FzZSBNQUxJRFBfU0VfQkxPQ0s6Cj4gKwkJYmFzZSA9IGh3ZGV2LT5t YXAuc2VfYmFzZTsKPiArCQlicmVhazsKPiArCWNhc2UgTUFMSURQX0RDX0JMT0NLOgo+ICsJCWJh c2UgPSBod2Rldi0+bWFwLmRjX2Jhc2U7Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gKwo+ICsJaWYgKGh3 ZGV2LT5tYXAuZmVhdHVyZXMgJiBNQUxJRFBfUkVHTUFQX0hBU19DTEVBUklSUSkKPiArCQltYWxp ZHBfaHdfd3JpdGUoaHdkZXYsIGlycSwgYmFzZSArIE1BTElEUF9SRUdfQ0xFQVJJUlEpOwo+ICsJ ZWxzZQo+ICsJCW1hbGlkcF9od193cml0ZShod2RldiwgaXJxLCBiYXNlICsgTUFMSURQX1JFR19T VEFUVVMpOwo+ICt9Cj4gKwo+ICt2b2lkIG1hbGlkcF9od19kaXNhYmxlX2lycShzdHJ1Y3QgbWFs aWRwX2h3X2RldmljZSAqaHdkZXYsIHU4IGJsb2NrLCB1MzIgaXJxKQo+ICt7Cj4gKwl1MzIgYmFz ZSA9IDA7Cj4gKwo+ICsJc3dpdGNoIChibG9jaykgewo+ICsJY2FzZSBNQUxJRFBfREVfQkxPQ0s6 Cj4gKwkJYmFzZSA9IDA7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIE1BTElEUF9TRV9CTE9DSzoKPiAr CQliYXNlID0gaHdkZXYtPm1hcC5zZV9iYXNlOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBNQUxJRFBf RENfQkxPQ0s6Cj4gKwkJYmFzZSA9IGh3ZGV2LT5tYXAuZGNfYmFzZTsKPiArCQlicmVhazsKPiAr CX0KPiArCj4gKwltYWxpZHBfaHdfY2xlYXJiaXRzKGh3ZGV2LCBpcnEsIGJhc2UgKyBNQUxJRFBf UkVHX01BU0tJUlEpOwo+ICt9Cj4gKwo+ICt2b2lkIG1hbGlkcF9od19lbmFibGVfaXJxKHN0cnVj dCBtYWxpZHBfaHdfZGV2aWNlICpod2RldiwgdTggYmxvY2ssIHUzMiBpcnEpCj4gK3sKPiArCXUz MiBiYXNlID0gMDsKPiArCj4gKwlzd2l0Y2ggKGJsb2NrKSB7Cj4gKwljYXNlIE1BTElEUF9ERV9C TE9DSzoKPiArCQliYXNlID0gMDsKPiArCQlicmVhazsKPiArCWNhc2UgTUFMSURQX1NFX0JMT0NL Ogo+ICsJCWJhc2UgPSBod2Rldi0+bWFwLnNlX2Jhc2U7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIE1B TElEUF9EQ19CTE9DSzoKPiArCQliYXNlID0gaHdkZXYtPm1hcC5kY19iYXNlOwo+ICsJCWJyZWFr Owo+ICsJfQo+ICsKPiArCW1hbGlkcF9od19zZXRiaXRzKGh3ZGV2LCBpcnEsIGJhc2UgKyBNQUxJ RFBfUkVHX01BU0tJUlEpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaXJxcmV0dXJuX3QgbWFsaWRwX2Rl X2lycShpbnQgaXJxLCB2b2lkICphcmcpCj4gK3sKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0g PSBhcmc7Cj4gKwlzdHJ1Y3QgbWFsaWRwX2RybSAqbWFsaWRwID0gZHJtLT5kZXZfcHJpdmF0ZTsK PiArCXN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2RldjsKPiArCWNvbnN0IHN0cnVjdCBtYWxp ZHBfaXJxX21hcCAqZGU7Cj4gKwl1MzIgc3RhdHVzLCBtYXNrLCBkY19zdGF0dXM7Cj4gKwlpcnFy ZXR1cm5fdCByZXQgPSBJUlFfTk9ORTsKPiArCj4gKwlpZiAoIWRybS0+ZGV2X3ByaXZhdGUpCj4g KwkJcmV0dXJuIElSUV9IQU5ETEVEOwo+ICsKPiArCWh3ZGV2ID0gbWFsaWRwLT5kZXY7Cj4gKwlk ZSA9ICZod2Rldi0+bWFwLmRlX2lycV9tYXA7Cj4gKwo+ICsJLyogZmlyc3QgaGFuZGxlIHRoZSBj b25maWcgdmFsaWQgSVJRICovCj4gKwlkY19zdGF0dXMgPSBtYWxpZHBfaHdfcmVhZChod2Rldiwg aHdkZXYtPm1hcC5kY19iYXNlICsgTUFMSURQX1JFR19TVEFUVVMpOwo+ICsJaWYgKGRjX3N0YXR1 cyAmIGh3ZGV2LT5tYXAuZGNfaXJxX21hcC52c3luY19pcnEpIHsKPiArCQkvKiB3ZSBoYXZlIGEg cGFnZSBmbGlwIGV2ZW50ICovCj4gKwkJYXRvbWljX3NldCgmbWFsaWRwLT5jb25maWdfdmFsaWQs IDEpOwo+ICsJCW1hbGlkcF9od19jbGVhcl9pcnEoaHdkZXYsIE1BTElEUF9EQ19CTE9DSywgZGNf c3RhdHVzKTsKPiArCQlyZXQgPSBJUlFfV0FLRV9USFJFQUQ7Cj4gKwl9Cj4gKwo+ICsJc3RhdHVz ID0gbWFsaWRwX2h3X3JlYWQoaHdkZXYsIE1BTElEUF9SRUdfU1RBVFVTKTsKPiArCWlmICghKHN0 YXR1cyAmIGRlLT5pcnFfbWFzaykpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwltYXNrID0gbWFs aWRwX2h3X3JlYWQoaHdkZXYsIE1BTElEUF9SRUdfTUFTS0lSUSk7Cj4gKwlzdGF0dXMgJj0gbWFz azsKPiArCWlmIChzdGF0dXMgJiBkZS0+dnN5bmNfaXJxKQo+ICsJCWRybV9jcnRjX2hhbmRsZV92 YmxhbmsoJm1hbGlkcC0+Y3J0Yyk7Cj4gKwo+ICsJbWFsaWRwX2h3X2NsZWFyX2lycShod2Rldiwg TUFMSURQX0RFX0JMT0NLLCBzdGF0dXMpOwo+ICsKPiArCXJldHVybiAocmV0ID09IElSUV9OT05F KSA/IElSUV9IQU5ETEVEIDogcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaXJxcmV0dXJuX3QgbWFs aWRwX2RlX2lycV90aHJlYWRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpCj4gK3sKPiArCXN0 cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBhcmc7Cj4gKwlzdHJ1Y3QgbWFsaWRwX2RybSAqbWFsaWRw ID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiArCj4gKwl3YWtlX3VwKCZtYWxpZHAtPndxKTsKPiArCj4g KwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cj4gK30KPiArCj4gK2ludCBtYWxpZHBfZGVfaXJxX2luaXQo c3RydWN0IGRybV9kZXZpY2UgKmRybSwgaW50IGlycSkKPiArewo+ICsJc3RydWN0IG1hbGlkcF9k cm0gKm1hbGlkcCA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4gKwlzdHJ1Y3QgbWFsaWRwX2h3X2Rldmlj ZSAqaHdkZXYgPSBtYWxpZHAtPmRldjsKPiArCWludCByZXQ7Cj4gKwo+ICsJLyogZW5zdXJlIGlu dGVycnVwdHMgYXJlIGRpc2FibGVkICovCj4gKwltYWxpZHBfaHdfZGlzYWJsZV9pcnEoaHdkZXYs IE1BTElEUF9EQ19CTE9DSywgfjApOwo+ICsJbWFsaWRwX2h3X2NsZWFyX2lycShod2RldiwgTUFM SURQX0RDX0JMT0NLLCB+MCk7Cj4gKwltYWxpZHBfaHdfZGlzYWJsZV9pcnEoaHdkZXYsIE1BTElE UF9ERV9CTE9DSywgfjApOwo+ICsJbWFsaWRwX2h3X2NsZWFyX2lycShod2RldiwgTUFMSURQX0RF X0JMT0NLLCB+MCk7Cj4gKwo+ICsJcmV0ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycShkcm0t PmRldiwgaXJxLCBtYWxpZHBfZGVfaXJxLAo+ICsJCQkJCW1hbGlkcF9kZV9pcnFfdGhyZWFkX2hh bmRsZXIsCj4gKwkJCQkJSVJRRl9TSEFSRUQsICJtYWxpZHAtZGUiLCBkcm0pOwo+ICsJaWYgKHJl dCA8IDApIHsKPiArCQlEUk1fRVJST1IoImZhaWxlZCB0byBpbnN0YWxsIERFIElSUSBoYW5kbGVy XG4iKTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCS8qIGZpcnN0IGVuYWJsZSB0aGUg REMgYmxvY2sgSVJRcyAqLwo+ICsJbWFsaWRwX2h3X2VuYWJsZV9pcnEoaHdkZXYsIE1BTElEUF9E Q19CTE9DSywKPiArCQkJICAgICBod2Rldi0+bWFwLmRjX2lycV9tYXAuaXJxX21hc2spOwo+ICsK PiArCS8qIG5vdyBlbmFibGUgdGhlIERFIGJsb2NrIElSUXMgKi8KPiArCW1hbGlkcF9od19lbmFi bGVfaXJxKGh3ZGV2LCBNQUxJRFBfREVfQkxPQ0ssCj4gKwkJCSAgICAgaHdkZXYtPm1hcC5kZV9p cnFfbWFwLmlycV9tYXNrKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArdm9pZCBtYWxp ZHBfZGVfaXJxX2NsZWFudXAoc3RydWN0IGRybV9kZXZpY2UgKmRybSkKPiArewo+ICsJc3RydWN0 IG1hbGlkcF9kcm0gKm1hbGlkcCA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4gKwlzdHJ1Y3QgbWFsaWRw X2h3X2RldmljZSAqaHdkZXYgPSBtYWxpZHAtPmRldjsKPiArCj4gKwltYWxpZHBfaHdfZGlzYWJs ZV9pcnEoaHdkZXYsIE1BTElEUF9ERV9CTE9DSywKPiArCQkJICAgICAgaHdkZXYtPm1hcC5kZV9p cnFfbWFwLmlycV9tYXNrKTsKPiArCW1hbGlkcF9od19kaXNhYmxlX2lycShod2RldiwgTUFMSURQ X0RDX0JMT0NLLAo+ICsJCQkgICAgICBod2Rldi0+bWFwLmRjX2lycV9tYXAuaXJxX21hc2spOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgaXJxcmV0dXJuX3QgbWFsaWRwX3NlX2lycShpbnQgaXJxLCB2b2lk ICphcmcpCj4gK3sKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBhcmc7Cj4gKwlzdHJ1Y3Qg bWFsaWRwX2RybSAqbWFsaWRwID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiArCXN0cnVjdCBtYWxpZHBf aHdfZGV2aWNlICpod2RldiA9IG1hbGlkcC0+ZGV2Owo+ICsJdTMyIHN0YXR1cywgbWFzazsKPiAr Cj4gKwlzdGF0dXMgPSBtYWxpZHBfaHdfcmVhZChod2RldiwgaHdkZXYtPm1hcC5zZV9iYXNlICsg TUFMSURQX1JFR19TVEFUVVMpOwo+ICsJaWYgKCEoc3RhdHVzICYgaHdkZXYtPm1hcC5zZV9pcnFf bWFwLmlycV9tYXNrKSkKPiArCQlyZXR1cm4gSVJRX05PTkU7Cj4gKwo+ICsJbWFzayA9IG1hbGlk cF9od19yZWFkKGh3ZGV2LCBod2Rldi0+bWFwLnNlX2Jhc2UgKyBNQUxJRFBfUkVHX01BU0tJUlEp Owo+ICsJc3RhdHVzID0gbWFsaWRwX2h3X3JlYWQoaHdkZXYsIGh3ZGV2LT5tYXAuc2VfYmFzZSAr IE1BTElEUF9SRUdfU1RBVFVTKTsKPiArCXN0YXR1cyAmPSBtYXNrOwo+ICsJLyogVG9Ebzogc3Rh dHVzIGRlY29kaW5nIGFuZCBmaXJpbmcgdXAgb2YgVlNZTkMgYW5kIHBhZ2UgZmxpcCBldmVudHMg Ki8KPiArCj4gKwltYWxpZHBfaHdfY2xlYXJfaXJxKGh3ZGV2LCBNQUxJRFBfU0VfQkxPQ0ssIHN0 YXR1cyk7Cj4gKwkvKiByZXR1cm4gSVJRX1dBS0VfVEhSRUFEOyAqLwo+ICsJcmV0dXJuIElSUV9I QU5ETEVEOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaXJxcmV0dXJuX3QgbWFsaWRwX3NlX2lycV90aHJl YWRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpCj4gK3sKPiArCXJldHVybiBJUlFfSEFORExF RDsKPiArfQo+ICsKPiAraW50IG1hbGlkcF9zZV9pcnFfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAq ZHJtLCBpbnQgaXJxKQo+ICt7Cj4gKwlzdHJ1Y3QgbWFsaWRwX2RybSAqbWFsaWRwID0gZHJtLT5k ZXZfcHJpdmF0ZTsKPiArCXN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2RldiA9IG1hbGlkcC0+ ZGV2Owo+ICsJaW50IHJldDsKPiArCj4gKwkvKiBlbnN1cmUgaW50ZXJydXB0cyBhcmUgZGlzYWJs ZWQgKi8KPiArCW1hbGlkcF9od19kaXNhYmxlX2lycShod2RldiwgTUFMSURQX1NFX0JMT0NLLCB+ MCk7Cj4gKwltYWxpZHBfaHdfY2xlYXJfaXJxKGh3ZGV2LCBNQUxJRFBfU0VfQkxPQ0ssIH4wKTsK PiArCj4gKwlyZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKGRybS0+ZGV2LCBpcnEsIG1h bGlkcF9zZV9pcnEsCj4gKwkJCQkJbWFsaWRwX3NlX2lycV90aHJlYWRfaGFuZGxlciwKPiArCQkJ CQlJUlFGX1NIQVJFRCwgIm1hbGlkcC1zZSIsIGRybSk7Cj4gKwlpZiAocmV0IDwgMCkgewo+ICsJ CURSTV9FUlJPUigiZmFpbGVkIHRvIGluc3RhbGwgU0UgSVJRIGhhbmRsZXJcbiIpOwo+ICsJCXJl dHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJbWFsaWRwX2h3X2VuYWJsZV9pcnEoaHdkZXYsIE1BTElE UF9TRV9CTE9DSywKPiArCQkJICAgICBod2Rldi0+bWFwLnNlX2lycV9tYXAuaXJxX21hc2spOwo+ ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICt2b2lkIG1hbGlkcF9zZV9pcnFfY2xlYW51cChz dHJ1Y3QgZHJtX2RldmljZSAqZHJtKQo+ICt7Cj4gKwlzdHJ1Y3QgbWFsaWRwX2RybSAqbWFsaWRw ID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiArCXN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2RldiA9 IG1hbGlkcC0+ZGV2Owo+ICsKPiArCW1hbGlkcF9od19kaXNhYmxlX2lycShod2RldiwgTUFMSURQ X1NFX0JMT0NLLAo+ICsJCQkgICAgICBod2Rldi0+bWFwLnNlX2lycV9tYXAuaXJxX21hc2spOwo+ ICt9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX2h3LmggYi9kcml2 ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9ody5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRl eCAwMDAwMDAwLi4xMjBhMDc5Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9hcm0vbWFsaWRwX2h3LmgKPiBAQCAtMCwwICsxLDE5MiBAQAo+ICsvKgo+ICsgKgo+ICsgKiAo QykgQ09QWVJJR0hUIDIwMTMtMjAxNiBBUk0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K PiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmUgYW5kIGlzIHByb3ZpZGVk IHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlCj4gKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKPiArICog Rm91bmRhdGlvbiwgYW5kIGFueSB1c2UgYnkgeW91IG9mIHRoaXMgcHJvZ3JhbSBpcyBzdWJqZWN0 IHRvIHRoZSB0ZXJtcwo+ICsgKiBvZiBzdWNoIEdOVSBsaWNlbmNlLgo+ICsgKgo+ICsgKiBBUk0g TWFsaSBEUCBoYXJkd2FyZSBtYW5pcHVsYXRpb24gcm91dGluZXMuCj4gKyAqLwo+ICsKPiArI2lm bmRlZiBfX01BTElEUF9IV19IX18KPiArI2RlZmluZSBfX01BTElEUF9IV19IX18KPiArCj4gKyNp bmNsdWRlIDxkcm0vZHJtX2ZvdXJjYy5oPgo+ICsjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+Cj4g Kwo+ICtzdHJ1Y3QgdmlkZW9tb2RlOwo+ICtzdHJ1Y3QgY2xrOwo+ICsKPiArLyogTWFsaSBEUCBJ UCBibG9ja3MgKi8KPiArZW51bSB7Cj4gKwlNQUxJRFBfREVfQkxPQ0sgPSAwLAo+ICsJTUFMSURQ X1NFX0JMT0NLLAo+ICsJTUFMSURQX0RDX0JMT0NLCj4gK307Cj4gKwo+ICsvKiBNYWxpIERQIGxh eWVyIElEcyAqLwo+ICtlbnVtIHsKPiArCURFX1ZJREVPMSA9IEJJVCgwKSwKPiArCURFX0dSQVBI SUNTMSA9IEJJVCgxKSwKPiArCURFX0dSQVBISUNTMiA9IEJJVCgyKSwgLyogdXNlZCBvbmx5IGlu IERQNTAwICovCj4gKwlERV9WSURFTzIgPSBCSVQoMyksCj4gKwlERV9TTUFSVCA9IEJJVCg0KSwK PiArfTsKPiArCj4gK3N0cnVjdCBtYWxpZHBfaW5wdXRfZm9ybWF0IHsKPiArCXU4IGxheWVyOwkJ LyogYml0bWFzayBvZiBsYXllcnMgc3VwcG9ydGluZyBpdCAqLwo+ICsJdTggaWQ7CQkJLyogdXNl ZCBpbnRlcm5hbGx5ICovCj4gKwl1MzIgZm9ybWF0OwkJLyogRFJNIGZvdXJjYyAqLwo+ICt9Owo+ ICsKPiArLyoKPiArICogaGlkZSB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiByZWdpc3RlciBtYXBz Cj4gKyAqIGJ5IHVzaW5nIGEgY29tbW9uIHN0cnVjdHVyZSB0byBob2xkIHRoZQo+ICsgKiBiYXNl IHJlZ2lzdGVyIG9mZnNldHMKPiArICovCj4gKwo+ICtzdHJ1Y3QgbWFsaWRwX2lycV9tYXAgewo+ ICsJdTMyIGlycV9tYXNrOwkJLyogbWFzayBvZiBJUlFzIHRoYXQgY2FuIGJlIGVuYWJsZWQgaW4g dGhlIGJsb2NrICovCj4gKwl1MzIgdnN5bmNfaXJxOwkJLyogSVJRIGJpdCB1c2VkIGZvciBzaWdu YWxpbmcgZHVyaW5nIFZTWU5DICovCj4gK307Cj4gKwo+ICtzdHJ1Y3QgbWFsaWRwX2xheWVyIHsK PiArCXU4IGlkOwkJCS8qIGxheWVyIElEICovCj4gKwl1MTYgYmFzZTsJCS8qIGFkZHJlc3Mgb2Zm c2V0IGZvciB0aGUgcmVnaXN0ZXIgYmFuayAqLwo+ICsJdTE2IHB0cjsJCS8qIGFkZHJlc3Mgb2Zm c2V0IGZvciB0aGUgcG9pbnRlciByZWdpc3RlciAqLwo+ICt9Owo+ICsKPiArLyogcmVnbWFwIGZl YXR1cmVzICovCj4gKyNkZWZpbmUgTUFMSURQX1JFR01BUF9IQVNfQ0xFQVJJUlEJKDEgPDwgMCkK PiArCj4gK3N0cnVjdCBtYWxpZHBfaHdfcmVnbWFwIHsKPiArCS8qIGFkZHJlc3Mgb2Zmc2V0IG9m IHRoZSBERSByZWdpc3RlciBiYW5rICovCj4gKwkvKiBpcyBhbHdheXMgMHgwMDAwICovCj4gKwkv KiBhZGRyZXNzIG9mZnNldCBvZiB0aGUgU0UgcmVnaXN0ZXJzIGJhbmsgKi8KPiArCWNvbnN0IHUx NiBzZV9iYXNlOwo+ICsJLyogYWRkcmVzcyBvZmZzZXQgb2YgdGhlIERDIHJlZ2lzdGVycyBiYW5r ICovCj4gKwljb25zdCB1MTYgZGNfYmFzZTsKPiArCj4gKwljb25zdCBzdHJ1Y3QgbWFsaWRwX2ly cV9tYXAgZGVfaXJxX21hcDsKPiArCWNvbnN0IHN0cnVjdCBtYWxpZHBfaXJxX21hcCBzZV9pcnFf bWFwOwo+ICsJY29uc3Qgc3RydWN0IG1hbGlkcF9pcnFfbWFwIGRjX2lycV9tYXA7Cj4gKwo+ICsJ LyogbGlzdCBvZiBzdXBwb3J0ZWQgbGF5ZXJzICovCj4gKwljb25zdCBzdHJ1Y3QgbWFsaWRwX2xh eWVyICpsYXllcnM7Cj4gKwljb25zdCB1OCBuX2xheWVyczsKPiArCj4gKwkvKiBsaXN0IG9mIHN1 cHBvcnRlZCBpbnB1dCBmb3JtYXRzIGZvciBlYWNoIGxheWVyICovCj4gKwljb25zdCBzdHJ1Y3Qg bWFsaWRwX2lucHV0X2Zvcm1hdCAqaW5wdXRfZm9ybWF0czsKPiArCWNvbnN0IHU4IG5faW5wdXRf Zm9ybWF0czsKPiArCj4gKwkvKiBhZGRyZXNzIG9mZnNldCBmb3IgdGhlIG91dHB1dCBkZXB0aCBy ZWdpc3RlciAqLwo+ICsJY29uc3QgdTE2IG91dF9kZXB0aF9iYXNlOwo+ICsKPiArCS8qIGJpdG1h cCB3aXRoIHJlZ2lzdGVyIG1hcCBmZWF0dXJlcyAqLwo+ICsJY29uc3QgdTggZmVhdHVyZXM7Cj4g K307Cj4gKwo+ICsvKiBoYXJkd2FyZSBmZWF0dXJlcyAqLwo+ICsjZGVmaW5lIE1BTElEUF9IV19G RUFUVVJFX0RTCQkoMSA8PCAwKQkvKiBzcGxpdCBzY3JlZW4gKi8KPiArCj4gK3N0cnVjdCBtYWxp ZHBfaHdfZGV2aWNlIHsKPiArCWNvbnN0IHN0cnVjdCBtYWxpZHBfaHdfcmVnbWFwIG1hcDsKPiAr CXZvaWQgX19pb21lbSAqcmVnczsKPiArCj4gKwkvKiBBUEIgY2xvY2sgKi8KPiArCXN0cnVjdCBj bGsgKnBjbGs7Cj4gKwkvKiBBWEkgY2xvY2sgKi8KPiArCXN0cnVjdCBjbGsgKmFjbGs7Cj4gKwkv KiBtYWluIGNsb2NrIGZvciBkaXNwbGF5IGNvcmUgKi8KPiArCXN0cnVjdCBjbGsgKm1jbGs7Cj4g KwkvKiBwaXhlbCBjbG9jayBmb3IgZGlzcGxheSBjb3JlICovCj4gKwlzdHJ1Y3QgY2xrICpweGxj bGs7Cj4gKwo+ICsJLyoKPiArCSAqIFZhbGlkYXRlIHRoZSBkcml2ZXIgaW5zdGFuY2UgYWdhaW5z dCB0aGUgaGFyZHdhcmUgYml0cwo+ICsJICovCj4gKwlpbnQgKCpxdWVyeV9odykoc3RydWN0IG1h bGlkcF9od19kZXZpY2UgKmh3ZGV2KTsKPiArCj4gKwkvKgo+ICsJICogU2V0IHRoZSBoYXJkd2Fy ZSBpbnRvIGNvbmZpZyBtb2RlLCByZWFkeSB0byBhY2NlcHQgbW9kZSBjaGFuZ2VzCj4gKwkgKi8K PiArCXZvaWQgKCplbnRlcl9jb25maWdfbW9kZSkoc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3 ZGV2KTsKPiArCj4gKwkvKgo+ICsJICogVGVsbCBoYXJkd2FyZSB0byBleGl0IGNvbmZpZ3VyYXRp b24gbW9kZQo+ICsJICovCj4gKwl2b2lkICgqbGVhdmVfY29uZmlnX21vZGUpKHN0cnVjdCBtYWxp ZHBfaHdfZGV2aWNlICpod2Rldik7Cj4gKwo+ICsJLyoKPiArCSAqIFF1ZXJ5IGlmIGhhcmR3YXJl IGlzIGluIGNvbmZpZ3VyYXRpb24gbW9kZQo+ICsJICovCj4gKwlib29sICgqaW5fY29uZmlnX21v ZGUpKHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2Rldik7Cj4gKwo+ICsJLyoKPiArCSAqIFNl dCBjb25maWd1cmF0aW9uIHZhbGlkIGZsYWcgZm9yIGhhcmR3YXJlIHBhcmFtZXRlcnMgdGhhdCBj YW4KPiArCSAqIGJlIGNoYW5nZWQgb3V0c2lkZSB0aGUgY29uZmlndXJhdGlvbiBtb2RlLiBIYXJk d2FyZSB3aWxsIHVzZQo+ICsJICogdGhlIG5ldyBzZXR0aW5ncyB3aGVuIGNvbmZpZyB2YWxpZCBp cyBzZXQgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUKPiArCSAqIGN1cnJlbnQgYnVmZmVyIHNjYW5vdXQK PiArCSAqLwo+ICsJdm9pZCAoKnNldF9jb25maWdfdmFsaWQpKHN0cnVjdCBtYWxpZHBfaHdfZGV2 aWNlICpod2Rldik7Cj4gKwo+ICsJLyoKPiArCSAqIFNldCBhIG5ldyBtb2RlIGluIGhhcmR3YXJl LiBSZXF1aXJlcyB0aGUgaGFyZHdhcmUgdG8gYmUgaW4KPiArCSAqIGNvbmZpZ3VyYXRpb24gbW9k ZSBiZWZvcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuCj4gKwkgKi8KPiArCXZvaWQgKCptb2Rl c2V0KShzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYsIHN0cnVjdCB2aWRlb21vZGUgKm0p Owo+ICsKPiArCS8qCj4gKwkgKiBDYWxjdWxhdGUgdGhlIHJlcXVpcmVkIHJvdGF0aW9uIG1lbW9y eSBnaXZlbiB0aGUgYWN0aXZlIGFyZWEKPiArCSAqIGFuZCB0aGUgYnVmZmVyIGZvcm1hdC4KPiAr CSAqLwo+ICsJaW50ICgqcm90bWVtX3JlcXVpcmVkKShzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAq aHdkZXYsIHUxNiB3LCB1MTYgaCwgdTMyIGZtdCk7Cj4gKwo+ICsJdTggZmVhdHVyZXM7Cj4gKwo+ ICsJdTggbWluX2xpbmVfc2l6ZTsKPiArCXUxNiBtYXhfbGluZV9zaXplOwo+ICsKPiArCS8qIHNp emUgb2YgbWVtb3J5IHVzZWQgZm9yIHJvdGF0aW5nIGxheWVycywgdXAgdG8gdHdvIGJhbmtzIGF2 YWlsYWJsZSAqLwo+ICsJdTMyIHJvdGF0aW9uX21lbW9yeVsyXTsKPiArfTsKPiArCj4gKy8qIFN1 cHBvcnRlZCB2YXJpYW50cyBvZiB0aGUgaGFyZHdhcmUgKi8KPiArZW51bSB7Cj4gKwlNQUxJRFBf NTAwID0gMCwKPiArCU1BTElEUF81NTAsCj4gKwlNQUxJRFBfNjUwLAo+ICsJLyoga2VlcCB0aGUg bmV4dCBlbnRyeSBsYXN0ICovCj4gKwlNQUxJRFBfTUFYX0RFVklDRVMKPiArfTsKPiArCj4gK2V4 dGVybiBjb25zdCBzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSBtYWxpZHBfZGV2aWNlW01BTElEUF9N QVhfREVWSUNFU107Cj4gKwo+ICt1MzIgbWFsaWRwX2h3X3JlYWQoc3RydWN0IG1hbGlkcF9od19k ZXZpY2UgKmh3ZGV2LCB1MzIgcmVnKTsKPiArdm9pZCBtYWxpZHBfaHdfd3JpdGUoc3RydWN0IG1h bGlkcF9od19kZXZpY2UgKmh3ZGV2LCB1MzIgdmFsdWUsIHUzMiByZWcpOwo+ICt2b2lkIG1hbGlk cF9od19zZXRiaXRzKHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2RldiwgdTMyIG1hc2ssIHUz MiByZWcpOwo+ICt2b2lkIG1hbGlkcF9od19jbGVhcmJpdHMoc3RydWN0IG1hbGlkcF9od19kZXZp Y2UgKmh3ZGV2LCB1MzIgbWFzaywgdTMyIHJlZyk7Cj4gK3ZvaWQgbWFsaWRwX2h3X2NsZWFyX2ly cShzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYsIHU4IGJsb2NrLCB1MzIgaXJxKTsKPiAr dm9pZCBtYWxpZHBfaHdfZGlzYWJsZV9pcnEoc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2 LCB1OCBibG9jaywgdTMyIGlycSk7Cj4gK3ZvaWQgbWFsaWRwX2h3X2VuYWJsZV9pcnEoc3RydWN0 IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2LCB1OCBibG9jaywgdTMyIGlycSk7Cj4gKwo+ICtpbnQg bWFsaWRwX2RlX2lycV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIGludCBpcnEpOwo+ICtp bnQgbWFsaWRwX3NlX2lycV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIGludCBpcnEpOwo+ ICt2b2lkIG1hbGlkcF9kZV9pcnFfY2xlYW51cChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKTsKPiAr dm9pZCBtYWxpZHBfc2VfaXJxX2NsZWFudXAoc3RydWN0IGRybV9kZXZpY2UgKmRybSk7Cj4gKwo+ ICt1OCBtYWxpZHBfaHdfZ2V0X2Zvcm1hdF9pZChjb25zdCBzdHJ1Y3QgbWFsaWRwX2h3X3JlZ21h cCAqbWFwLAo+ICsJCQkgICB1OCBsYXllcl9pZCwgdTMyIGZvcm1hdCk7Cj4gKwo+ICsvKgo+ICsg KiBiYWNrZ3JvdW5kIGNvbG9yIGNvbXBvbmVudHMgYXJlIGRlZmluZWQgYXMgMTJiaXRzIHZhbHVl cywKPiArICogdGhleSB3aWxsIGJlIHNoaWZ0ZWQgcmlnaHQgd2hlbiBzdG9yZWQgb24gaGFyZHdh cmUgdGhhdAo+ICsgKiBzdXBwb3J0cyBvbmx5IDhiaXRzIHBlciBjaGFubmVsCj4gKyAqLwo+ICsj ZGVmaW5lIE1BTElEUF9CR05EX0NPTE9SX1IJCTB4MDAwCj4gKyNkZWZpbmUgTUFMSURQX0JHTkRf Q09MT1JfRwkJMHgwMDAKPiArI2RlZmluZSBNQUxJRFBfQkdORF9DT0xPUl9CCQkweDAwMAo+ICsK PiArI2VuZGlmICAvKiBfX01BTElEUF9IV19IX18gKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2FybS9tYWxpZHBfcGxhbmVzLmMgYi9kcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9w bGFuZXMuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uNmYyMDEwOQo+ IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9wbGFuZXMu Ywo+IEBAIC0wLDAgKzEsMzQyIEBACj4gKy8qCj4gKyAqIChDKSBDT1BZUklHSFQgMjAxNiBBUk0g TGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiArICogQXV0aG9yOiBMaXZpdSBEdWRhdSA8 TGl2aXUuRHVkYXVAYXJtLmNvbT4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m dHdhcmUgYW5kIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlCj4gKyAq IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUKPiArICogRm91bmRhdGlvbiwgYW5kIGFueSB1c2UgYnkgeW91IG9mIHRo aXMgcHJvZ3JhbSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcwo+ICsgKiBvZiBzdWNoIEdOVSBsaWNl bmNlLgo+ICsgKgo+ICsgKiBBUk0gTWFsaSBEUCBwbGFuZSBtYW5pcHVsYXRpb24gcm91dGluZXMu Cj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJt X2F0b21pY19oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fZmJfY21hX2hlbHBlci5oPgo+ ICsjaW5jbHVkZSA8ZHJtL2RybV9nZW1fY21hX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2Ry bV9wbGFuZV9oZWxwZXIuaD4KPiArCj4gKyNpbmNsdWRlICJtYWxpZHBfaHcuaCIKPiArI2luY2x1 ZGUgIm1hbGlkcF9kcnYuaCIKPiArCj4gKy8qIExheWVyIHNwZWNpZmljIHJlZ2lzdGVyIG9mZnNl dHMgKi8KPiArI2RlZmluZSBNQUxJRFBfTEFZRVJfRk9STUFUCQkweDAwMAo+ICsjZGVmaW5lIE1B TElEUF9MQVlFUl9DT05UUk9MCQkweDAwNAo+ICsjZGVmaW5lICAgTEFZRVJfRU5BQkxFCQkJKDEg PDwgMCkKPiArI2RlZmluZSAgIExBWUVSX1JPVF9PRkZTRVQJCTgKPiArI2RlZmluZSAgIExBWUVS X0hfRkxJUAkJCSgxIDw8IDEwKQo+ICsjZGVmaW5lICAgTEFZRVJfVl9GTElQCQkJKDEgPDwgMTEp Cj4gKyNkZWZpbmUgICBMQVlFUl9ST1RfTUFTSwkJKDB4ZiA8PCA4KQo+ICsjZGVmaW5lIE1BTElE UF9MQVlFUl9TSVpFCQkweDAwYwo+ICsjZGVmaW5lICAgTEFZRVJfSF9WQUwoeCkJCSgoKHgpICYg MHgxZmZmKSA8PCAwKQo+ICsjZGVmaW5lICAgTEFZRVJfVl9WQUwoeCkJCSgoKHgpICYgMHgxZmZm KSA8PCAxNikKPiArI2RlZmluZSBNQUxJRFBfTEFZRVJfQ09NUF9TSVpFCQkweDAxMAo+ICsjZGVm aW5lIE1BTElEUF9MQVlFUl9PRkZTRVQJCTB4MDE0Cj4gKyNkZWZpbmUgTUFMSURQX0xBWUVSX1NU UklERQkJMHgwMTgKPiArCj4gK3N0YXRpYyB2b2lkIG1hbGlkcF9kZV9wbGFuZV9kZXN0cm95KHN0 cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQo+ICt7Cj4gKwlzdHJ1Y3QgbWFsaWRwX3BsYW5lICptcCA9 IHRvX21hbGlkcF9wbGFuZShwbGFuZSk7Cj4gKwo+ICsJaWYgKG1wLT5iYXNlLmZiKQo+ICsJCWRy bV9mcmFtZWJ1ZmZlcl91bnJlZmVyZW5jZShtcC0+YmFzZS5mYik7Cj4gKwo+ICsJZHJtX3BsYW5l X2hlbHBlcl9kaXNhYmxlKHBsYW5lKTsKPiArCWRybV9wbGFuZV9jbGVhbnVwKHBsYW5lKTsKPiAr CWRldm1fa2ZyZWUocGxhbmUtPmRldi0+ZGV2LCBtcCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg bWFsaWRwX2RlX2F0b21pY191cGRhdGVfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4g KwkJCQkJIHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiArCQkJCQkgc3RydWN0IGRybV9mcmFtZWJ1 ZmZlciAqZmIsCj4gKwkJCQkJIGludCBjcnRjX3gsIGludCBjcnRjX3ksCj4gKwkJCQkJIHVuc2ln bmVkIGludCBjcnRjX3csCj4gKwkJCQkJIHVuc2lnbmVkIGludCBjcnRjX2gsCj4gKwkJCQkJIHVp bnQzMl90IHNyY194LCB1aW50MzJfdCBzcmNfeSwKPiArCQkJCQkgdWludDMyX3Qgc3JjX3csIHVp bnQzMl90IHNyY19oKQo+ICt7Cj4gKwlyZXR1cm4gZHJtX2F0b21pY19oZWxwZXJfdXBkYXRlX3Bs YW5lKHBsYW5lLCBjcnRjLCBmYiwgY3J0Y194LCBjcnRjX3ksCj4gKwkJCQkJICAgICAgY3J0Y193 LCBjcnRjX2gsIHNyY194LCBzcmNfeSwKPiArCQkJCQkgICAgICBzcmNfdywgc3JjX2gpOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgaW50IG1hbGlkcF9kZV9wbGFuZV9hdG9taWNfc2V0X3Byb3BlcnR5KHN0 cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICsJCQkJCSAgICAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0 YXRlICpzdGF0ZSwKPiArCQkJCQkgICAgICAgc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHks Cj4gKwkJCQkJICAgICAgIHVpbnQ2NF90IHZhbCkKPiArewo+ICsJcmV0dXJuIGRybV9hdG9taWNf aGVscGVyX3BsYW5lX3NldF9wcm9wZXJ0eShwbGFuZSwgcHJvcGVydHksIHZhbCk7Cj4gK30KPiAr Cj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzIG1hbGlkcF9kZV9wbGFuZV9m dW5jcyA9IHsKPiArCS51cGRhdGVfcGxhbmUgPSBtYWxpZHBfZGVfYXRvbWljX3VwZGF0ZV9wbGFu ZSwKPiArCS5kaXNhYmxlX3BsYW5lID0gZHJtX2F0b21pY19oZWxwZXJfZGlzYWJsZV9wbGFuZSwK PiArCS5kZXN0cm95ID0gbWFsaWRwX2RlX3BsYW5lX2Rlc3Ryb3ksCj4gKwkucmVzZXQgPSBkcm1f YXRvbWljX2hlbHBlcl9wbGFuZV9yZXNldCwKPiArCS5zZXRfcHJvcGVydHkgPSBkcm1fYXRvbWlj X2hlbHBlcl9wbGFuZV9zZXRfcHJvcGVydHksCj4gKwkuYXRvbWljX3NldF9wcm9wZXJ0eSA9IG1h bGlkcF9kZV9wbGFuZV9hdG9taWNfc2V0X3Byb3BlcnR5LAo+ICsJLmF0b21pY19kdXBsaWNhdGVf c3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kdXBsaWNhdGVfc3RhdGUsCj4gKwkuYXRv bWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kZXN0cm95X3N0YXRl LAo+ICt9Owo+ICsKPiArc3RhdGljIGludCBtYWxpZHBfZGVfcGxhbmVfY2hlY2soc3RydWN0IGRy bV9wbGFuZSAqcGxhbmUsCj4gKwkJCQkgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUpCj4g K3sKPiArCXN0cnVjdCBtYWxpZHBfcGxhbmUgKm1wID0gdG9fbWFsaWRwX3BsYW5lKHBsYW5lKTsK PiArCXUzMiBzcmNfdywgc3JjX2g7Cj4gKwo+ICsJaWYgKCFzdGF0ZS0+Y3J0YyB8fCAhc3RhdGUt PmZiKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCXNyY193ID0gc3RhdGUtPnNyY193ID4+IDE2Owo+ ICsJc3JjX2ggPSBzdGF0ZS0+c3JjX2ggPj4gMTY7Cj4gKwo+ICsJaWYgKChzdGF0ZS0+Y3J0Y193 ID4gbXAtPmh3ZGV2LT5tYXhfbGluZV9zaXplKSB8fAo+ICsJICAgIChzdGF0ZS0+Y3J0Y19oID4g bXAtPmh3ZGV2LT5tYXhfbGluZV9zaXplKSB8fAo+ICsJICAgIChzdGF0ZS0+Y3J0Y193IDwgbXAt Pmh3ZGV2LT5taW5fbGluZV9zaXplKSB8fAo+ICsJICAgIChzdGF0ZS0+Y3J0Y19oIDwgbXAtPmh3 ZGV2LT5taW5fbGluZV9zaXplKSB8fAo+ICsJICAgIChzdGF0ZS0+Y3J0Y193ICE9IHNyY193KSB8 fCAoc3RhdGUtPmNydGNfaCAhPSBzcmNfaCkpCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJ bXAtPnJvdG1lbV9zaXplID0gMDsKPiArCWlmIChzdGF0ZS0+cm90YXRpb24gJiBNQUxJRFBfUk9U QVRFRF9NQVNLKSB7Cj4gKwkJaW50IHZhbDsKPiArCj4gKwkJLyogU01BUlQgbGF5ZXIgY2FuJ3Qg YmUgcm90YXRlZCAqLwo+ICsJCWlmIChtcC0+bGF5ZXItPmlkID09IERFX1NNQVJUKQo+ICsJCQly ZXR1cm4gLUVJTlZBTDsKPiArCj4gKwkJdmFsID0gbXAtPmh3ZGV2LT5yb3RtZW1fcmVxdWlyZWQo bXAtPmh3ZGV2LCBzdGF0ZS0+Y3J0Y19oLAo+ICsJCQkJCQkgc3RhdGUtPmNydGNfdywKPiArCQkJ CQkJIHN0YXRlLT5mYi0+cGl4ZWxfZm9ybWF0KTsKPiArCQlpZiAodmFsIDwgMCkKPiArCQkJcmV0 dXJuIHZhbDsKPiArCj4gKwkJbXAtPnJvdG1lbV9zaXplID0gdmFsOwo+ICsJfQo+ICsKPiArCXJl dHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBtYWxpZHBfZGVfcGxhbmVfdXBkYXRlKHN0 cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICsJCQkJICAgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAq b2xkX3N0YXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2dlbV9jbWFfb2JqZWN0ICpvYmo7Cj4gKwlz dHJ1Y3QgbWFsaWRwX3BsYW5lICptcDsKPiArCWNvbnN0IHN0cnVjdCBtYWxpZHBfaHdfcmVnbWFw ICptYXA7Cj4gKwl1OCBmb3JtYXRfaWQ7Cj4gKwl1MTYgcHRyOwo+ICsJdTMyIGZvcm1hdCwgc3Jj X3csIHNyY19oLCBkZXN0X3csIGRlc3RfaCwgdmFsID0gMDsKPiArCWludCBudW1fcGxhbmVzLCBp Owo+ICsKPiArCWlmICghcGxhbmUtPnN0YXRlLT5jcnRjIHx8ICFwbGFuZS0+c3RhdGUtPmZiKQo+ ICsJCXJldHVybjsKPiArCj4gKwltcCA9IHRvX21hbGlkcF9wbGFuZShwbGFuZSk7Cj4gKwo+ICsj aWZkZWYgTUFMSURQX0VOQUJMRV9CR05EX0NPTE9SX0FTX1BSSU1BUllfUExBTkUKPiArCS8qIHNr aXAgdGhlIHByaW1hcnkgcGxhbmUsIGl0IGlzIHVzaW5nIHRoZSBiYWNrZ3JvdW5kIGNvbG9yICov Cj4gKwlpZiAoIW1wLT5sYXllciB8fCAhbXAtPmxheWVyLT5pZCkKPiArCQlyZXR1cm47Cj4gKyNl bmRpZgo+ICsKPiArCW1hcCA9ICZtcC0+aHdkZXYtPm1hcDsKPiArCWZvcm1hdCA9IHBsYW5lLT5z dGF0ZS0+ZmItPnBpeGVsX2Zvcm1hdDsKPiArCWZvcm1hdF9pZCA9IG1hbGlkcF9od19nZXRfZm9y bWF0X2lkKG1hcCwgbXAtPmxheWVyLT5pZCwgZm9ybWF0KTsKPiArCWlmIChmb3JtYXRfaWQgPT0g KHU4KS0xKQo+ICsJCXJldHVybjsKPiArCj4gKwludW1fcGxhbmVzID0gZHJtX2Zvcm1hdF9udW1f cGxhbmVzKGZvcm1hdCk7Cj4gKwo+ICsJLyogY29udmVydCBzcmMgdmFsdWVzIGZyb20gUTE2IGZp eGVkIHBvaW50IHRvIGludGVnZXIgKi8KPiArCXNyY193ID0gcGxhbmUtPnN0YXRlLT5zcmNfdyA+ PiAxNjsKPiArCXNyY19oID0gcGxhbmUtPnN0YXRlLT5zcmNfaCA+PiAxNjsKPiArCWlmIChwbGFu ZS0+c3RhdGUtPnJvdGF0aW9uICYgTUFMSURQX1JPVEFURURfTUFTSykgewo+ICsJCWRlc3RfdyA9 IHBsYW5lLT5zdGF0ZS0+Y3J0Y19oOwo+ICsJCWRlc3RfaCA9IHBsYW5lLT5zdGF0ZS0+Y3J0Y193 Owo+ICsJfSBlbHNlIHsKPiArCQlkZXN0X3cgPSBwbGFuZS0+c3RhdGUtPmNydGNfdzsKPiArCQlk ZXN0X2ggPSBwbGFuZS0+c3RhdGUtPmNydGNfaDsKPiArCX0KPiArCURSTV9ERUJVR19EUklWRVIo InNyY193ID0gJWQsIHNyY19oID0gJWQsIGRlc3RfdyA9ICVkLCBkZXN0X2ggPSAlZFxuIiwKPiAr CQkJIHNyY193LCBzcmNfaCwgZGVzdF93LCBkZXN0X2gpOwo+ICsKPiArCW1hbGlkcF9od193cml0 ZShtcC0+aHdkZXYsIGZvcm1hdF9pZCwgbXAtPmxheWVyLT5iYXNlKTsKPiArCj4gKwlmb3IgKGkg PSAwOyBpIDwgbnVtX3BsYW5lczsgaSsrKSB7Cj4gKwkJLyogY2FsY3VsYXRlIHRoZSBvZmZzZXQg Zm9yIHRoZSBsYXllcidzIHBsYW5lIHJlZ2lzdGVycyAqLwo+ICsJCXB0ciA9IG1wLT5sYXllci0+ cHRyICsgKGkgPDwgNCk7Cj4gKwo+ICsJCW9iaiA9IGRybV9mYl9jbWFfZ2V0X2dlbV9vYmoocGxh bmUtPnN0YXRlLT5mYiwgaSk7Cj4gKwkJbWFsaWRwX2h3X3dyaXRlKG1wLT5od2RldiwgbG93ZXJf MzJfYml0cyhvYmotPnBhZGRyKSwgcHRyKTsKPiArCQltYWxpZHBfaHdfd3JpdGUobXAtPmh3ZGV2 LCB1cHBlcl8zMl9iaXRzKG9iai0+cGFkZHIpLCBwdHIgKyA0KTsKPiArCQltYWxpZHBfaHdfd3Jp dGUobXAtPmh3ZGV2LCBwbGFuZS0+c3RhdGUtPmZiLT5waXRjaGVzW2ldLAo+ICsJCQkJbXAtPmxh eWVyLT5iYXNlICsgTUFMSURQX0xBWUVSX1NUUklERSk7Cj4gKwl9Cj4gKwo+ICsJbWFsaWRwX2h3 X3dyaXRlKG1wLT5od2RldiwgTEFZRVJfSF9WQUwoc3JjX3cpIHwgTEFZRVJfVl9WQUwoc3JjX2gp LAo+ICsJCQltcC0+bGF5ZXItPmJhc2UgKyBNQUxJRFBfTEFZRVJfU0laRSk7Cj4gKwo+ICsJbWFs aWRwX2h3X3dyaXRlKG1wLT5od2RldiwgTEFZRVJfSF9WQUwoZGVzdF93KSB8IExBWUVSX1ZfVkFM KGRlc3RfaCksCj4gKwkJCW1wLT5sYXllci0+YmFzZSArIE1BTElEUF9MQVlFUl9DT01QX1NJWkUp Owo+ICsKPiArCW1hbGlkcF9od193cml0ZShtcC0+aHdkZXYsIExBWUVSX0hfVkFMKHBsYW5lLT5z dGF0ZS0+Y3J0Y194KSB8Cj4gKwkJCUxBWUVSX1ZfVkFMKHBsYW5lLT5zdGF0ZS0+Y3J0Y195KSwK PiArCQkJbXAtPmxheWVyLT5iYXNlICsgTUFMSURQX0xBWUVSX09GRlNFVCk7Cj4gKwo+ICsJLyog Zmlyc3QgY2xlYXIgdGhlIHJvdGF0aW9uIGJpdHMgaW4gdGhlIHJlZ2lzdGVyICovCj4gKwltYWxp ZHBfaHdfY2xlYXJiaXRzKG1wLT5od2RldiwgTEFZRVJfUk9UX01BU0ssCj4gKwkJCSAgICBtcC0+ bGF5ZXItPmJhc2UgKyBNQUxJRFBfTEFZRVJfQ09OVFJPTCk7Cj4gKwo+ICsJLyogc2V0dXAgdGhl IHJvdGF0aW9uIGFuZCBheGlzIGZsaXAgYml0cyAqLwo+ICsJaWYgKHBsYW5lLT5zdGF0ZS0+cm90 YXRpb24gJiBEUk1fUk9UQVRFX01BU0spCj4gKwkJdmFsID0gaWxvZzIocGxhbmUtPnN0YXRlLT5y b3RhdGlvbiAmIERSTV9ST1RBVEVfTUFTSykgPDwgTEFZRVJfUk9UX09GRlNFVDsKPiArCWlmIChw bGFuZS0+c3RhdGUtPnJvdGF0aW9uICYgQklUKERSTV9SRUZMRUNUX1gpKQo+ICsJCXZhbCB8PSBM QVlFUl9WX0ZMSVA7Cj4gKwlpZiAocGxhbmUtPnN0YXRlLT5yb3RhdGlvbiAmIEJJVChEUk1fUkVG TEVDVF9ZKSkKPiArCQl2YWwgfD0gTEFZRVJfSF9GTElQOwo+ICsKPiArCS8qIHNldCB0aGUgJ2Vu YWJsZSBsYXllcicgYml0ICovCj4gKwl2YWwgfD0gTEFZRVJfRU5BQkxFOwo+ICsKPiArCW1hbGlk cF9od19zZXRiaXRzKG1wLT5od2RldiwgdmFsLAo+ICsJCQkgIG1wLT5sYXllci0+YmFzZSArIE1B TElEUF9MQVlFUl9DT05UUk9MKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgbWFsaWRwX2RlX3Bs YW5lX2Rpc2FibGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gKwkJCQkgICAgc3RydWN0IGRy bV9wbGFuZV9zdGF0ZSAqc3RhdGUpCj4gK3sKPiArCXN0cnVjdCBtYWxpZHBfcGxhbmUgKm1wID0g dG9fbWFsaWRwX3BsYW5lKHBsYW5lKTsKPiArCj4gKwkvKiBUb0RvOiBmaWd1cmUgb3V0IHRoZSBh dHRhY2hlZCBmcmFtZWJ1ZmZlciBsaWZlY3ljbGUgKi8KPiArCW1hbGlkcF9od19jbGVhcmJpdHMo bXAtPmh3ZGV2LCBMQVlFUl9FTkFCTEUsCj4gKwkJCSAgICBtcC0+bGF5ZXItPmJhc2UgKyBNQUxJ RFBfTEFZRVJfQ09OVFJPTCk7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3Bs YW5lX2hlbHBlcl9mdW5jcyBtYWxpZHBfZGVfcGxhbmVfaGVscGVyX2Z1bmNzID0gewo+ICsJLnBy ZXBhcmVfZmIgPSBOVUxMLAo+ICsJLmNsZWFudXBfZmIgPSBOVUxMLAo+ICsJLmF0b21pY19jaGVj ayA9IG1hbGlkcF9kZV9wbGFuZV9jaGVjaywKPiArCS5hdG9taWNfdXBkYXRlID0gbWFsaWRwX2Rl X3BsYW5lX3VwZGF0ZSwKPiArCS5hdG9taWNfZGlzYWJsZSA9IG1hbGlkcF9kZV9wbGFuZV9kaXNh YmxlLAo+ICt9Owo+ICsKPiArI2lmZGVmIE1BTElEUF9FTkFCTEVfQkdORF9DT0xPUl9BU19QUklN QVJZX1BMQU5FCj4gK3N0YXRpYyBjb25zdCB1aW50MzJfdCBzYWZlX21vZGVzZXRfZm9ybWF0c1td ID0gewo+ICsJRFJNX0ZPUk1BVF9YUkdCODg4OCwKPiArCURSTV9GT1JNQVRfQVJHQjg4ODgsCj4g K307Cj4gKwo+ICtzdGF0aWMgaW50IG1hbGlkcF9kZV9jcmVhdGVfcHJpbWFyeV9wbGFuZShzdHJ1 Y3QgZHJtX2RldmljZSAqZHJtKQo+ICt7Cj4gKwlzdHJ1Y3QgbWFsaWRwX2RybSAqbWFsaWRwID0g ZHJtLT5kZXZfcHJpdmF0ZTsKPiArCXN0cnVjdCBtYWxpZHBfcGxhbmUgKnBsYW5lOwo+ICsJaW50 IHJldDsKPiArCj4gKwlwbGFuZSA9IGRldm1fa3phbGxvYyhkcm0tPmRldiwgc2l6ZW9mKCpwbGFu ZSksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFwbGFuZSkKPiArCQlyZXR1cm4gLUVOT01FTTsKPiAr Cj4gKwlyZXQgPSBkcm1fdW5pdmVyc2FsX3BsYW5lX2luaXQoZHJtLCAmcGxhbmUtPmJhc2UsIDAs Cj4gKwkJCQkgICAgICAgJm1hbGlkcF9kZV9wbGFuZV9mdW5jcywKPiArCQkJCSAgICAgICBzYWZl X21vZGVzZXRfZm9ybWF0cywKPiArCQkJCSAgICAgICBBUlJBWV9TSVpFKHNhZmVfbW9kZXNldF9m b3JtYXRzKSwKPiArCQkJCSAgICAgICBEUk1fUExBTkVfVFlQRV9QUklNQVJZLCBOVUxMKTsKPiAr CWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlkcm1fcGxhbmVfaGVscGVyX2FkZCgm cGxhbmUtPmJhc2UsICZtYWxpZHBfZGVfcGxhbmVfaGVscGVyX2Z1bmNzKTsKPiArCXBsYW5lLT5o d2RldiA9IG1hbGlkcC0+ZGV2Owo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKyNlbmRpZgo+ICsK PiAraW50IG1hbGlkcF9kZV9wbGFuZXNfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQo+ICt7 Cj4gKwlzdHJ1Y3QgbWFsaWRwX2RybSAqbWFsaWRwID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiArCWNv bnN0IHN0cnVjdCBtYWxpZHBfaHdfcmVnbWFwICptYXAgPSAmbWFsaWRwLT5kZXYtPm1hcDsKPiAr CXN0cnVjdCBtYWxpZHBfcGxhbmUgKnBsYW5lID0gTlVMTDsKPiArCWVudW0gZHJtX3BsYW5lX3R5 cGUgcGxhbmVfdHlwZTsKPiArCXVuc2lnbmVkIGxvbmcgY3J0Y3MgPSAxIDw8IGRybS0+bW9kZV9j b25maWcubnVtX2NydGM7Cj4gKwl1MzIgKmZvcm1hdHM7Cj4gKwlpbnQgcmV0LCBpLCBqLCBuOwo+ ICsKPiArI2lmZGVmIE1BTElEUF9FTkFCTEVfQkdORF9DT0xPUl9BU19QUklNQVJZX1BMQU5FCj4g KwlyZXQgPSBtYWxpZHBfZGVfY3JlYXRlX3ByaW1hcnlfcGxhbmUoZHJtKTsKPiArCWlmIChyZXQp Cj4gKwkJcmV0dXJuIHJldDsKPiArCXBsYW5lX3R5cGUgPSBEUk1fUExBTkVfVFlQRV9PVkVSTEFZ Owo+ICsjZW5kaWYKPiArCj4gKwlmb3JtYXRzID0ga2NhbGxvYyhtYXAtPm5faW5wdXRfZm9ybWF0 cywgc2l6ZW9mKCpmb3JtYXRzKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIWZvcm1hdHMpIHsKPiAr CQlyZXQgPSAtRU5PTUVNOwo+ICsJCWdvdG8gY2xlYW51cDsKPiArCX0KPiArCj4gKwlmb3IgKGkg PSAwOyBpIDwgbWFwLT5uX2xheWVyczsgaSsrKSB7Cj4gKwkJdTggaWQgPSBtYXAtPmxheWVyc1tp XS5pZDsKPiArCj4gKwkJcGxhbmUgPSBkZXZtX2t6YWxsb2MoZHJtLT5kZXYsIHNpemVvZigqcGxh bmUpLCBHRlBfS0VSTkVMKTsKPiArCQlpZiAoIXBsYW5lKSB7Cj4gKwkJCXJldCA9IC1FTk9NRU07 Cj4gKwkJCWdvdG8gY2xlYW51cDsKPiArCQl9Cj4gKwo+ICsJCS8qIGJ1aWxkIHRoZSBsaXN0IG9m IERSTSBzdXBwb3J0ZWQgZm9ybWF0cyBiYXNlZCBvbiB0aGUgbWFwICovCj4gKwkJZm9yIChuID0g MCwgaiA9IDA7ICBqIDwgbWFwLT5uX2lucHV0X2Zvcm1hdHM7IGorKykgewo+ICsJCQlpZiAoKG1h cC0+aW5wdXRfZm9ybWF0c1tqXS5sYXllciAmIGlkKSA9PSBpZCkKPiArCQkJCWZvcm1hdHNbbisr XSA9IG1hcC0+aW5wdXRfZm9ybWF0c1tqXS5mb3JtYXQ7Cj4gKwkJfQo+ICsKPiArI2lmbmRlZiBN QUxJRFBfRU5BQkxFX0JHTkRfQ09MT1JfQVNfUFJJTUFSWV9QTEFORQo+ICsJCXBsYW5lX3R5cGUg PSAoaSA9PSAwKSA/IERSTV9QTEFORV9UWVBFX1BSSU1BUlkgOgo+ICsJCQkJCURSTV9QTEFORV9U WVBFX09WRVJMQVk7Cj4gKyNlbmRpZgo+ICsJCXJldCA9IGRybV91bml2ZXJzYWxfcGxhbmVfaW5p dChkcm0sICZwbGFuZS0+YmFzZSwgY3J0Y3MsCj4gKwkJCQkJICAgICAgICZtYWxpZHBfZGVfcGxh bmVfZnVuY3MsIGZvcm1hdHMsCj4gKwkJCQkJICAgICAgIG4sIHBsYW5lX3R5cGUsIE5VTEwpOwo+ ICsJCWlmIChyZXQgPCAwKQo+ICsJCQlnb3RvIGNsZWFudXA7Cj4gKwo+ICsJCWlmICghZHJtLT5t b2RlX2NvbmZpZy5yb3RhdGlvbl9wcm9wZXJ0eSkgewo+ICsJCQl1bnNpZ25lZCBsb25nIGZsYWdz ID0gQklUKERSTV9ST1RBVEVfMCkgfAo+ICsJCQkJCSAgICAgIEJJVChEUk1fUk9UQVRFXzkwKSB8 Cj4gKwkJCQkJICAgICAgQklUKERSTV9ST1RBVEVfMTgwKSB8Cj4gKwkJCQkJICAgICAgQklUKERS TV9ST1RBVEVfMjcwKSB8Cj4gKwkJCQkJICAgICAgQklUKERSTV9SRUZMRUNUX1gpIHwKPiArCQkJ CQkgICAgICBCSVQoRFJNX1JFRkxFQ1RfWSk7Cj4gKwkJCWRybS0+bW9kZV9jb25maWcucm90YXRp b25fcHJvcGVydHkgPQo+ICsJCQkJZHJtX21vZGVfY3JlYXRlX3JvdGF0aW9uX3Byb3BlcnR5KGRy bSwgZmxhZ3MpOwo+ICsJCX0KPiArCQlpZiAoZHJtLT5tb2RlX2NvbmZpZy5yb3RhdGlvbl9wcm9w ZXJ0eSkKPiArCQkJZHJtX29iamVjdF9hdHRhY2hfcHJvcGVydHkoJnBsYW5lLT5iYXNlLmJhc2Us Cj4gKwkJCQkJCSAgIGRybS0+bW9kZV9jb25maWcucm90YXRpb25fcHJvcGVydHksCj4gKwkJCQkJ CSAgIEJJVChEUk1fUk9UQVRFXzApKTsKPiArCj4gKwkJZHJtX3BsYW5lX2hlbHBlcl9hZGQoJnBs YW5lLT5iYXNlLAo+ICsJCQkJICAgICAmbWFsaWRwX2RlX3BsYW5lX2hlbHBlcl9mdW5jcyk7Cj4g KwkJcGxhbmUtPmh3ZGV2ID0gbWFsaWRwLT5kZXY7Cj4gKwkJcGxhbmUtPmxheWVyID0gJm1hcC0+ bGF5ZXJzW2ldOwo+ICsJfQo+ICsKPiArCWtmcmVlKGZvcm1hdHMpOwo+ICsKPiArCXJldHVybiAw Owo+ICsKPiArY2xlYW51cDoKPiArCW1hbGlkcF9kZV9wbGFuZXNfZGVzdHJveShkcm0pOwo+ICsJ a2ZyZWUoZm9ybWF0cyk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArdm9pZCBtYWxp ZHBfZGVfcGxhbmVzX2Rlc3Ryb3koc3RydWN0IGRybV9kZXZpY2UgKmRybSkKPiArewo+ICsJc3Ry dWN0IGRybV9wbGFuZSAqcCwgKnB0Owo+ICsKPiArCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShw LCBwdCwgJmRybS0+bW9kZV9jb25maWcucGxhbmVfbGlzdCwgaGVhZCkgewo+ICsJCWRybV9wbGFu ZV9jbGVhbnVwKHApOwo+ICsJfQo+ICt9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9h cm0vbWFsaWRwX3JlZ3MuaCBiL2RyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX3JlZ3MuaAo+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uNzNmZWNiMwo+IC0tLSAvZGV2L251 bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9yZWdzLmgKPiBAQCAtMCwwICsx LDE3MiBAQAo+ICsvKgo+ICsgKiAoQykgQ09QWVJJR0hUIDIwMTYgQVJNIExpbWl0ZWQuIEFsbCBy aWdodHMgcmVzZXJ2ZWQuCj4gKyAqIEF1dGhvcjogTGl2aXUgRHVkYXUgPExpdml1LkR1ZGF1QGFy bS5jb20+Cj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlIGFuZCBpcyBw cm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQo+ICsgKiBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl Cj4gKyAqIEZvdW5kYXRpb24sIGFuZCBhbnkgdXNlIGJ5IHlvdSBvZiB0aGlzIHByb2dyYW0gaXMg c3ViamVjdCB0byB0aGUgdGVybXMKPiArICogb2Ygc3VjaCBHTlUgbGljZW5jZS4KPiArICoKPiAr ICogQVJNIE1hbGkgRFA1MDAvRFA1NTAvRFA2NTAgcmVnaXN0ZXJzIGRlZmluaXRpb24uCj4gKyAq Lwo+ICsKPiArI2lmbmRlZiBfX01BTElEUF9SRUdTX0hfXwo+ICsjZGVmaW5lIF9fTUFMSURQX1JF R1NfSF9fCj4gKwo+ICsvKgo+ICsgKiBhYmJyZXZpYXRpb25zIHVzZWQ6Cj4gKyAqICAgIC0gREMg LSBkaXNwbGF5IGNvcmUgKGdlbmVyYWwgc2V0dGluZ3MpCj4gKyAqICAgIC0gREUgLSBkaXNwbGF5 IGVuZ2luZQo+ICsgKiAgICAtIFNFIC0gc2NhbGluZyBlbmdpbmUKPiArICovCj4gKwo+ICsvKiBp bnRlcnJ1cHQgYml0IG1hc2tzICovCj4gKyNkZWZpbmUgTUFMSURQX0RFX0lSUV9VTkRFUlJVTgkJ CSgxIDw8IDApCj4gKwo+ICsjZGVmaW5lIE1BTElEUDUwMF9ERV9JUlFfQVhJX0VSUgkJKDEgPDwg NCkKPiArI2RlZmluZSBNQUxJRFA1MDBfREVfSVJRX1ZTWU5DCQkJKDEgPDwgNSkKPiArI2RlZmlu ZSBNQUxJRFA1MDBfREVfSVJRX1BST0dfTElORQkJKDEgPDwgNikKPiArI2RlZmluZSBNQUxJRFA1 MDBfREVfSVJRX1NBVFVSQVRJT04JCSgxIDw8IDcpCj4gKyNkZWZpbmUgTUFMSURQNTAwX0RFX0lS UV9DT05GX1ZBTElECQkoMSA8PCA4KQo+ICsjZGVmaW5lIE1BTElEUDUwMF9ERV9JUlFfQ09ORl9N T0RFCQkoMSA8PCAxMSkKPiArI2RlZmluZSBNQUxJRFA1MDBfREVfSVJRX0NPTkZfQUNUSVZFCQko MSA8PCAxNykKPiArI2RlZmluZSBNQUxJRFA1MDBfREVfSVJRX1BNX0FDVElWRQkJKDEgPDwgMTgp Cj4gKyNkZWZpbmUgTUFMSURQNTAwX0RFX0lSUV9URVNUTU9ERV9BQ1RJVkUJKDEgPDwgMTkpCj4g KyNkZWZpbmUgTUFMSURQNTAwX0RFX0lSUV9GT1JDRV9CTE5LX0FDVElWRQkoMSA8PCAyNCkKPiAr I2RlZmluZSBNQUxJRFA1MDBfREVfSVJRX0FYSV9CVVNZCQkoMSA8PCAyOCkKPiArI2RlZmluZSBN QUxJRFA1MDBfREVfSVJRX0dMT0JBTAkJCSgxIDw8IDMxKQo+ICsjZGVmaW5lIE1BTElEUDUwMF9T RV9JUlFfQ09ORl9NT0RFCQkoMSA8PCAwKQo+ICsjZGVmaW5lIE1BTElEUDUwMF9TRV9JUlFfQ09O Rl9WQUxJRAkJKDEgPDwgNCkKPiArI2RlZmluZSBNQUxJRFA1MDBfU0VfSVJRX0lOSVRfQlVTWQkJ KDEgPDwgNSkKPiArI2RlZmluZSBNQUxJRFA1MDBfU0VfSVJRX0FYSV9FUlJPUgkJKDEgPDwgOCkK PiArI2RlZmluZSBNQUxJRFA1MDBfU0VfSVJRX09WRVJSVU4JCSgxIDw8IDkpCj4gKyNkZWZpbmUg TUFMSURQNTAwX1NFX0lSUV9QUk9HX0xJTkUxCQkoMSA8PCAxMikKPiArI2RlZmluZSBNQUxJRFA1 MDBfU0VfSVJRX1BST0dfTElORTIJCSgxIDw8IDEzKQo+ICsjZGVmaW5lIE1BTElEUDUwMF9TRV9J UlFfQ09ORl9BQ1RJVkUJCSgxIDw8IDE3KQo+ICsjZGVmaW5lIE1BTElEUDUwMF9TRV9JUlFfUE1f QUNUSVZFCQkoMSA8PCAxOCkKPiArI2RlZmluZSBNQUxJRFA1MDBfU0VfSVJRX0FYSV9CVVNZCQko MSA8PCAyOCkKPiArI2RlZmluZSBNQUxJRFA1MDBfU0VfSVJRX0dMT0JBTAkJCSgxIDw8IDMxKQo+ ICsKPiArI2RlZmluZSBNQUxJRFA1NTBfREVfSVJRX1NBVFVSQVRJT04JCSgxIDw8IDgpCj4gKyNk ZWZpbmUgTUFMSURQNTUwX0RFX0lSUV9WU1lOQwkJCSgxIDw8IDEyKQo+ICsjZGVmaW5lIE1BTElE UDU1MF9ERV9JUlFfUFJPR19MSU5FCQkoMSA8PCAxMykKPiArI2RlZmluZSBNQUxJRFA1NTBfREVf SVJRX0FYSV9FUlIJCSgxIDw8IDE2KQo+ICsjZGVmaW5lIE1BTElEUDU1MF9TRV9JUlFfRU9XCQkJ KDEgPDwgMCkKPiArI2RlZmluZSBNQUxJRFA1NTBfU0VfSVJRX0FYSV9FUlIJCSgxIDw8IDE2KQo+ ICsjZGVmaW5lIE1BTElEUDU1MF9EQ19JUlFfQ09ORl9WQUxJRAkJKDEgPDwgMCkKPiArI2RlZmlu ZSBNQUxJRFA1NTBfRENfSVJRX0NPTkZfTU9ERQkJKDEgPDwgNCkKPiArI2RlZmluZSBNQUxJRFA1 NTBfRENfSVJRX0NPTkZfQUNUSVZFCQkoMSA8PCAxNikKPiArI2RlZmluZSBNQUxJRFA1NTBfRENf SVJRX0RFCQkJKDEgPDwgMjApCj4gKyNkZWZpbmUgTUFMSURQNTUwX0RDX0lSUV9TRQkJCSgxIDw8 IDI0KQo+ICsKPiArI2RlZmluZSBNQUxJRFA2NTBfREVfSVJRX0RSSUZUCQkJKDEgPDwgNCkKPiAr Cj4gKy8qIGJpdCBtYXNrcyB0aGF0IGFyZSBjb21tb24gYmV0d2VlbiBwcm9kdWN0cyAqLwo+ICsj ZGVmaW5lICAgTUFMSURQX0NGR19WQUxJRAkJKDEgPDwgMCkKPiArI2RlZmluZSAgIE1BTElEUF9E SVNQX0ZVTkNfSUxBQ0VECSgxIDw8IDgpCj4gKwo+ICsvKiByZWdpc3RlciBvZmZzZXRzIGZvciBJ UlEgbWFuYWdlbWVudCAqLwo+ICsjZGVmaW5lIE1BTElEUF9SRUdfU1RBVFVTCQkweDAwMDAwCj4g KyNkZWZpbmUgTUFMSURQX1JFR19TRVRJUlEJCTB4MDAwMDQKPiArI2RlZmluZSBNQUxJRFBfUkVH X01BU0tJUlEJCTB4MDAwMDgKPiArI2RlZmluZSBNQUxJRFBfUkVHX0NMRUFSSVJRCQkweDAwMDBj Cj4gKwo+ICsvKiByZWdpc3RlciBvZmZzZXRzICovCj4gKyNkZWZpbmUgTUFMSURQX0RFX0NPUkVf SUQJCTB4MDAwMTgKPiArI2RlZmluZSBNQUxJRFBfREVfRElTUExBWV9GVU5DCQkweDAwMDIwCj4g Kwo+ICsvKiB0aGVzZSBvZmZzZXRzIGFyZSByZWxhdGl2ZSB0byBNQUxJRFA1eDBfVElNSU5HU19C QVNFICovCj4gKyNkZWZpbmUgTUFMSURQX0RFX0hfVElNSU5HUwkJMHgwCj4gKyNkZWZpbmUgTUFM SURQX0RFX1ZfVElNSU5HUwkJMHg0Cj4gKyNkZWZpbmUgTUFMSURQX0RFX1NZTkNfV0lEVEgJCTB4 OAo+ICsjZGVmaW5lIE1BTElEUF9ERV9IVl9BQ1RJVkUJCTB4Ywo+ICsKPiArLyogbWFjcm9zIHRv IHNldCB2YWx1ZXMgaW50byByZWdpc3RlcnMgKi8KPiArI2RlZmluZSBNQUxJRFBfREVfSF9GUk9O VFBPUkNIKHgpCSgoKHgpICYgMHhmZmYpIDw8IDApCj4gKyNkZWZpbmUgTUFMSURQX0RFX0hfQkFD S1BPUkNIKHgpCSgoKHgpICYgMHgzZmYpIDw8IDE2KQo+ICsjZGVmaW5lIE1BTElEUDUwMF9ERV9W X0ZST05UUE9SQ0goeCkJKCgoeCkgJiAweGZmKSA8PCAwKQo+ICsjZGVmaW5lIE1BTElEUDU1MF9E RV9WX0ZST05UUE9SQ0goeCkJKCgoeCkgJiAweGZmZikgPDwgMCkKPiArI2RlZmluZSBNQUxJRFBf REVfVl9CQUNLUE9SQ0goeCkJKCgoeCkgJiAweGZmKSA8PCAxNikKPiArI2RlZmluZSBNQUxJRFBf REVfSF9TWU5DV0lEVEgoeCkJKCgoeCkgJiAweDNmZikgPDwgMCkKPiArI2RlZmluZSBNQUxJRFBf REVfVl9TWU5DV0lEVEgoeCkJKCgoeCkgJiAweGZmKSA8PCAxNikKPiArI2RlZmluZSBNQUxJRFBf REVfSF9BQ1RJVkUoeCkJCSgoKHgpICYgMHgxZmZmKSA8PCAwKQo+ICsjZGVmaW5lIE1BTElEUF9E RV9WX0FDVElWRSh4KQkJKCgoeCkgJiAweDFmZmYpIDw8IDE2KQo+ICsKPiArLyogcmVnaXN0ZXIg b2Zmc2V0cyBhbmQgYml0cyBzcGVjaWZpYyB0byBEUDUwMCAqLwo+ICsjZGVmaW5lIE1BTElEUDUw MF9EQ19CQVNFCQkweDAwMDAwCj4gKyNkZWZpbmUgTUFMSURQNTAwX0RDX0NPTlRST0wJCTB4MDAw MGMKPiArI2RlZmluZSAgIE1BTElEUDUwMF9EQ19DT05GSUdfUkVRCSgxIDw8IDE3KQo+ICsjZGVm aW5lICAgTUFMSURQNTAwX0hTWU5DUE9MCQkoMSA8PCAyMCkKPiArI2RlZmluZSAgIE1BTElEUDUw MF9WU1lOQ1BPTAkJKDEgPDwgMjEpCj4gKyNkZWZpbmUgICBNQUxJRFA1MDBfRENfQ0xFQVJfTUFT SwkweDMwMGZmZgo+ICsjZGVmaW5lIE1BTElEUDUwMF9ERV9MSU5FX0NPVU5URVIJMHgwMDAxMAo+ ICsjZGVmaW5lIE1BTElEUDUwMF9ERV9BWElfQ09OVFJPTAkweDAwMDE0Cj4gKyNkZWZpbmUgTUFM SURQNTAwX0RFX1NFQ1VSRV9DVFJMCTB4MDAwMWMKPiArI2RlZmluZSBNQUxJRFA1MDBfREVfQ0hS T01BX0tFWQkJMHgwMDAyNAo+ICsjZGVmaW5lIE1BTElEUDUwMF9USU1JTkdTX0JBU0UJCTB4MDAw MjgKPiArCj4gKyNkZWZpbmUgTUFMSURQNTAwX0NPTkZJR18zRAkJMHgwMDAzOAo+ICsjZGVmaW5l IE1BTElEUDUwMF9CR05EX0NPTE9SCQkweDAwMDNjCj4gKyNkZWZpbmUgTUFMSURQNTAwX09VVFBV VF9ERVBUSAkJMHgwMDA0NAo+ICsjZGVmaW5lIE1BTElEUDUwMF9ZVVZfUkdCX0NPRUYJCTB4MDAw NDgKPiArI2RlZmluZSBNQUxJRFA1MDBfQ09MT1JfQURKX0NPRUYJMHgwMDA3OAo+ICsjZGVmaW5l IE1BTElEUDUwMF9DT0VGX1RBQkxFX0FERFIJMHgwMDBhOAo+ICsjZGVmaW5lIE1BTElEUDUwMF9D T0VGX1RBQkxFX0RBVEEJMHgwMDBhYwo+ICsjZGVmaW5lIE1BTElEUDUwMF9ERV9MVl9CQVNFCQkw eDAwMTAwCj4gKyNkZWZpbmUgTUFMSURQNTAwX0RFX0xWX1BUUl9CQVNFCTB4MDAxMjQKPiArI2Rl ZmluZSBNQUxJRFA1MDBfREVfTEcxX0JBU0UJCTB4MDAyMDAKPiArI2RlZmluZSBNQUxJRFA1MDBf REVfTEcxX1BUUl9CQVNFCTB4MDAyMWMKPiArI2RlZmluZSBNQUxJRFA1MDBfREVfTEcyX0JBU0UJ CTB4MDAzMDAKPiArI2RlZmluZSBNQUxJRFA1MDBfREVfTEcyX1BUUl9CQVNFCTB4MDAzMWMKPiAr I2RlZmluZSBNQUxJRFA1MDBfU0VfQkFTRQkJMHgwMGMwMAo+ICsjZGVmaW5lIE1BTElEUDUwMF9T RV9QVFJfQkFTRQkJMHgwMGUwYwo+ICsjZGVmaW5lIE1BTElEUDUwMF9EQ19JUlFfQkFTRQkJMHgw MGYwMAo+ICsjZGVmaW5lIE1BTElEUDUwMF9DT05GSUdfVkFMSUQJCTB4MDBmMDAKPiArI2RlZmlu ZSBNQUxJRFA1MDBfQ09ORklHX0lECQkweDAwZmQ0Cj4gKwo+ICsvKiByZWdpc3RlciBvZmZzZXRz IGFuZCBiaXRzIHNwZWNpZmljIHRvIERQNTUwL0RQNjUwICovCj4gKyNkZWZpbmUgTUFMSURQNTUw X0RFX0NPTlRST0wJCTB4MDAwMTAKPiArI2RlZmluZSBNQUxJRFA1NTBfREVfTElORV9DT1VOVEVS CTB4MDAwMTQKPiArI2RlZmluZSBNQUxJRFA1NTBfREVfQVhJX0NPTlRST0wJMHgwMDAxOAo+ICsj ZGVmaW5lIE1BTElEUDU1MF9ERV9RT1MJCTB4MDAwMWMKPiArI2RlZmluZSBNQUxJRFA1NTBfVElN SU5HU19CQVNFCQkweDAwMDMwCj4gKyNkZWZpbmUgTUFMSURQNTUwX0hTWU5DUE9MCQkoMSA8PCAx MikKPiArI2RlZmluZSBNQUxJRFA1NTBfVlNZTkNQT0wJCSgxIDw8IDI4KQo+ICsKPiArI2RlZmlu ZSBNQUxJRFA1NTBfREVfRElTUF9TSURFQkFORAkweDAwMDQwCj4gKyNkZWZpbmUgTUFMSURQNTUw X0RFX0JHTkRfQ09MT1IJCTB4MDAwNDQKPiArI2RlZmluZSBNQUxJRFA1NTBfREVfT1VUUFVUX0RF UFRICTB4MDAwNGMKPiArI2RlZmluZSBNQUxJRFA1NTBfREVfQ09MT1JfQ09FRgkJMHgwMDA1MAo+ ICsjZGVmaW5lIE1BTElEUDU1MF9ERV9DT0VGX1RBQkxFX0FERFIJMHgwMDA4MAo+ICsjZGVmaW5l IE1BTElEUDU1MF9ERV9DT0VGX1RBQkxFX0RBVEEJMHgwMDA4NAo+ICsjZGVmaW5lIE1BTElEUDU1 MF9ERV9MVjFfQkFTRQkJMHgwMDEwMAo+ICsjZGVmaW5lIE1BTElEUDU1MF9ERV9MVjFfUFRSX0JB U0UJMHgwMDEyNAo+ICsjZGVmaW5lIE1BTElEUDU1MF9ERV9MVjJfQkFTRQkJMHgwMDIwMAo+ICsj ZGVmaW5lIE1BTElEUDU1MF9ERV9MVjJfUFRSX0JBU0UJMHgwMDIyNAo+ICsjZGVmaW5lIE1BTElE UDU1MF9ERV9MR19CQVNFCQkweDAwMzAwCj4gKyNkZWZpbmUgTUFMSURQNTUwX0RFX0xHX1BUUl9C QVNFCTB4MDAzMWMKPiArI2RlZmluZSBNQUxJRFA1NTBfREVfTFNfQkFTRQkJMHgwMDQwMAo+ICsj ZGVmaW5lIE1BTElEUDU1MF9ERV9MU19QVFJfQkFTRQkweDAwNDJjCj4gKyNkZWZpbmUgTUFMSURQ NTUwX0RFX1BFUkZfQkFTRQkJMHgwMDUwMAo+ICsjZGVmaW5lIE1BTElEUDU1MF9TRV9CQVNFCQkw eDA4MDAwCj4gKyNkZWZpbmUgTUFMSURQNTUwX0RDX0JBU0UJCTB4MGMwMDAKPiArI2RlZmluZSBN QUxJRFA1NTBfRENfQ09OVFJPTAkJMHgwYzAxMAo+ICsjZGVmaW5lICAgTUFMSURQNTUwX0RDX0NP TkZJR19SRVEJKDEgPDwgMTYpCj4gKyNkZWZpbmUgTUFMSURQNTUwX0NPTkZJR19WQUxJRAkJMHgw YzAxNAo+ICsjZGVmaW5lIE1BTElEUDU1MF9DT05GSUdfSUQJCTB4MGZmZDQKPiArCj4gKy8qCj4g KyAqIFN0YXJ0aW5nIHdpdGggRFA1NTAgdGhlIHJlZ2lzdGVyIG1hcCBibG9ja3MgaGFzIGJlZW4g c3RhbmRhcmRpc2VkIHRvIHRoZQo+ICsgKiBmb2xsb3dpbmcgbGF5b3V0Ogo+ICsgKgo+ICsgKiAg IE9mZnNldCAgICAgICAgICAgIEJsb2NrIHJlZ2lzdGVycwo+ICsgKiAgMHgwMDAwMCAgICAgICAg ICAgIERpc3BsYXkgRW5naW5lCj4gKyAqICAweDA4MDAwICAgICAgICAgICAgU2NhbGluZyBFbmdp bmUKPiArICogIDB4MGMwMDAgICAgICAgICAgICBEaXNwbGF5IENvcmUKPiArICogIDB4MTAwMDAg ICAgICAgICAgICBTZWN1cmUgY29udHJvbAo+ICsgKgo+ICsgKiBUaGUgb2xkIERQNTAwIElQIG1p eGVzIHNvbWUgREMgd2l0aCB0aGUgREUgcmVnaXN0ZXJzLCBoZW5jZSB0aGUgbmVlZAo+ICsgKiBm b3IgYSBtYXBwaW5nIHN0cnVjdHVyZS4KPiArICovCj4gKwo+ICsjZW5kaWYgLyogX19NQUxJRFBf UkVHU19IX18gKi8KPiAtLSAKPiAyLjcuMQo+IAo+IF9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCj4gZHJpLWRldmVsIG1haWxpbmcgbGlzdAo+IGRyaS1kZXZl bEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAoKLS0gCkRhbmllbCBWZXR0ZXIKU29mdHdhcmUgRW5n aW5lZXIsIEludGVsIENvcnBvcmF0aW9uCmh0dHA6Ly9ibG9nLmZmd2xsLmNoCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxp c3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=