From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [1/2] EDAC: Add Aspeed AST2500 EDAC driver From: Stefan Schaeckeler Message-Id: <20181231132000.3894E6E85603@corona.crabdance.com> Date: Mon, 31 Dec 2018 05:20:00 -0800 (PST) To: robh+dt@kernel.org, mark.rutland@arm.com, joel@jms.id.au, andrew@aj.id.au, bp@alien8.de, mchehab@kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-aspeed@lists.ozlabs.org, linux-edac@vger.kernel.org, sschaeck@cisco.com List-ID: TGV0IG1lIHN0YXJ0IHdpdGggcmV2aWV3aW5nIG15IG93biBkcml2ZXIuIFBlcmhhcHMgc29tZW9u ZSBjb3VsZCByZXZpZXcgaXQgYXMgd2VsbCwgcGxlYXNlPwoKSSBmb3VuZCBhIGNvc21ldGljIGlz c3VlIGFuZCBhIGJ1Zy4gU2VlIGlubGluZS4KCgo+IEZyb206ICAgU3RlZmFuIFNjaGFlY2tlbGVy IDxzY2hhZWNzbkBnbXgubmV0Pgo+IAo+IEZyb206IFN0ZWZhbiBNIFNjaGFlY2tlbGVyIDxzc2No YWVja0BjaXNjby5jb20+Cj4gCj4gQWRkIHN1cHBvcnQgZm9yIHRoZSBBc3BlZWQgQVNUMjUwMCBT b0MgRURBQyBkcml2ZXIuCj4gCj4gU2lnbmVkLW9mZi1ieTogU3RlZmFuIE0gU2NoYWVja2VsZXIg PHNzY2hhZWNrQGNpc2NvLmNvbT4KPiAtLS0KPiAgTUFJTlRBSU5FUlMgICAgICAgICAgICAgICAg ICAgICAgfCAgIDYgKwo+ICBhcmNoL2FybS9ib290L2R0cy9hc3BlZWQtZzUuZHRzaSB8ICAgNyAr Cj4gIGRyaXZlcnMvZWRhYy9LY29uZmlnICAgICAgICAgICAgIHwgICA3ICsKPiAgZHJpdmVycy9l ZGFjL01ha2VmaWxlICAgICAgICAgICAgfCAgIDEgKwo+ICBkcml2ZXJzL2VkYWMvYXNwZWVkX2Vk YWMuYyAgICAgICB8IDQ1NyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIDUgZmls ZXMgY2hhbmdlZCwgNDc4IGluc2VydGlvbnMoKykKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvZWRhYy9hc3BlZWRfZWRhYy5jCj4gCj4gZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJ TlRBSU5FUlMKPiBpbmRleCAzMzE4ZjMwOTAzYjIuLjFmZWI5MmIxNDAyOSAxMDA2NDQKPiAtLS0g YS9NQUlOVEFJTkVSUwo+ICsrKyBiL01BSU5UQUlORVJTCj4gQEAgLTUzMTUsNiArNTMxNSwxMiBA QCBMOglsaW51eC1lZGFjQHZnZXIua2VybmVsLm9yZwo+ICBTOglNYWludGFpbmVkCj4gIEY6CWRy aXZlcnMvZWRhYy9hbWQ2NF9lZGFjKgo+ICAKPiArRURBQy1BU1QyNTAwCj4gK006CVN0ZWZhbiBT Y2hhZWNrZWxlciA8c3NjaGFlY2tAY2lzY28uY29tPgo+ICtTOglTdXBwb3J0ZWQKPiArRjoJZHJp dmVycy9lZGFjL2FzcGVlZF9lZGFjLmMKPiArRjoJRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2Jp bmRpbmdzL2VkYWMvYXNwZWVkLXNkcmFtLWVkYWMudHh0Cj4gKwo+ICBFREFDLUNBTFhFREEKPiAg TToJUm9iZXJ0IFJpY2h0ZXIgPHJyaWNAa2VybmVsLm9yZz4KPiAgTDoJbGludXgtZWRhY0B2Z2Vy Lmtlcm5lbC5vcmcKPiBkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYXNwZWVkLWc1LmR0 c2kgYi9hcmNoL2FybS9ib290L2R0cy9hc3BlZWQtZzUuZHRzaQo+IGluZGV4IGQxMDc0NTlmYzBm OC4uYjRlNDc5YWI1YTJkIDEwMDY0NAo+IC0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FzcGVlZC1n NS5kdHNpCj4gKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXNwZWVkLWc1LmR0c2kKPiBAQCAtNDcs NiArNDcsMTMgQEAKPiAgCQlyZWcgPSA8MHg4MDAwMDAwMCAwPjsKPiAgCX07Cj4gIAo+ICsJZWRh Yzogc2RyYW1AMWU2ZTAwMDAgewo+ICsJCWNvbXBhdGlibGUgPSAiYXNwZWVkLGFzdDI1MDAtc2Ry YW0tZWRhYyI7Cj4gKwkJcmVnID0gPDB4MWU2ZTAwMDAgMHgxNzQ+Owo+ICsJCWludGVycnVwdHMg PSA8MD47Cj4gKwkJc3RhdHVzID0gImRpc2FibGVkIjsKPiArCX07Cj4gKwo+ICAJYWhiIHsKPiAg CQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOwo+ICAJCSNhZGRyZXNzLWNlbGxzID0gPDE+Owo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvS2NvbmZpZyBiL2RyaXZlcnMvZWRhYy9LY29uZmln Cj4gaW5kZXggNDFjOWNjZGQyMGQ2Li42NzgzNDQzMGIwYTEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy cy9lZGFjL0tjb25maWcKPiArKysgYi9kcml2ZXJzL2VkYWMvS2NvbmZpZwo+IEBAIC00NzUsNCAr NDc1LDExIEBAIGNvbmZpZyBFREFDX1FDT00KPiAgCSAgRm9yIGRlYnVnZ2luZyBpc3N1ZXMgaGF2 aW5nIHRvIGRvIHdpdGggc3RhYmlsaXR5IGFuZCBvdmVyYWxsIHN5c3RlbQo+ICAJICBoZWFsdGgs IHlvdSBzaG91bGQgcHJvYmFibHkgc2F5ICdZJyBoZXJlLgo+ICAKPiArY29uZmlnIEVEQUNfQVNQ RUVECj4gKwl0cmlzdGF0ZSAiQXNwZWVkIEFTVCAyNTAwIFNvQyIKPiArCWRlcGVuZHMgb24gTUFD SF9BU1BFRURfRzUKPiArCWhlbHAKPiArCSAgU3VwcG9ydCBmb3IgZXJyb3IgZGV0ZWN0aW9uIGFu ZCBjb3JyZWN0aW9uIG9uIHRoZQo+ICsJICBBc3BlZWQgQVNUIDI1MDAgU29DLgo+ICsKPiAgZW5k aWYgIyBFREFDCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9NYWtlZmlsZSBiL2RyaXZlcnMv ZWRhYy9NYWtlZmlsZQo+IGluZGV4IDcxNjA5NmQwOGVhMC4uZTFmMjNkNGZmODYwIDEwMDY0NAo+ IC0tLSBhL2RyaXZlcnMvZWRhYy9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvZWRhYy9NYWtlZmls ZQo+IEBAIC03OCwzICs3OCw0IEBAIG9iai0kKENPTkZJR19FREFDX1NZTk9QU1lTKQkJKz0gc3lu b3BzeXNfZWRhYy5vCj4gIG9iai0kKENPTkZJR19FREFDX1hHRU5FKQkJKz0geGdlbmVfZWRhYy5v Cj4gIG9iai0kKENPTkZJR19FREFDX1RJKQkJCSs9IHRpX2VkYWMubwo+ICBvYmotJChDT05GSUdf RURBQ19RQ09NKQkJCSs9IHFjb21fZWRhYy5vCj4gK29iai0kKENPTkZJR19FREFDX0FTUEVFRCkJ CSs9IGFzcGVlZF9lZGFjLm8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2FzcGVlZF9lZGFj LmMgYi9kcml2ZXJzL2VkYWMvYXNwZWVkX2VkYWMuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4g aW5kZXggMDAwMDAwMDAwMDAwLi5kNmVkMTE5OTA5ZWIKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIv ZHJpdmVycy9lZGFjL2FzcGVlZF9lZGFjLmMKPiBAQCAtMCwwICsxLDQ1NyBAQAo+ICsvLyBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsKPiArLyoKPiArICogQ29weXJpZ2h0IDIwMTgg Q2lzY28gU3lzdGVtcwo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCj4gKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCj4gKyAqIGFzIHB1Ymxpc2hl ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgo+ICsgKiAy IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgo+ ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxsaW51eC9lZGFjLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9t b2R1bGUuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2lu dGVycnVwdC5oPgo+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4gKyNpbmNs dWRlIDxsaW51eC9zdG9wX21hY2hpbmUuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2lvLmg+Cj4gKyNp bmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4K PiArI2luY2x1ZGUgPGFzbS9wYWdlLmg+CgpJbmNsdWRpbmcgYXNtL3BhZ2UuaCBkb2VzIG5vdCBz ZWVtIHRvIGJlIG5lY2Vzc2FyeS4KCgo+ICsjaW5jbHVkZSAiZWRhY19tb2R1bGUuaCIKPiArCj4g Kwo+ICsjZGVmaW5lIERSVl9OQU1FICJhc3BlZWQtZWRhYyIKPiArCj4gKwo+ICsvKiByZWdpc3Rl cnMgKi8KPiArI2RlZmluZSBBU1BFRURfTUNSX1BST1QgICAgICAgIDB4MDAgLyogcHJvdGVjdGlv biBrZXkgcmVnaXN0ZXIgKi8KPiArI2RlZmluZSBBU1BFRURfTUNSX0NPTkYgICAgICAgIDB4MDQg LyogY29uZmlndXJhdGlvbiByZWdpc3RlciAqLwo+ICsjZGVmaW5lIEFTUEVFRF9NQ1JfSU5UUl9D VFJMICAgMHg1MCAvKiBpbnRlcnJ1cHQgY29udHJvbC9zdGF0dXMgcmVnaXN0ZXIgKi8KPiArI2Rl ZmluZSBBU1BFRURfTUNSX0FERFJfVU5SRUMgIDB4NTggLyogYWRkcmVzcyBvZiBmaXJzdCB1bi1y ZWNvdmVyYWJsZSBlcnJvciAqLwo+ICsjZGVmaW5lIEFTUEVFRF9NQ1JfQUREUl9SRUMgICAgMHg1 YyAvKiBhZGRyZXNzIG9mIGxhc3QgcmVjb3ZlcmFibGUgZXJyb3IgKi8KPiArI2RlZmluZSBBU1BF RURfTUNSX0xBU1QgICAgICAgIEFTUEVFRF9NQ1JfQUREUl9SRUMKPiArCj4gKwo+ICsvKiBiaXRz IGFuZCBtYXNrcyAqLwo+ICsjZGVmaW5lIEFTUEVFRF9NQ1JfUFJPVF9QQVNTV0QJICAgICAgICAg ICAgMHhmYzYwMDMwOQo+ICsjZGVmaW5lIEFTUEVFRF9NQ1JfQ09ORl9EUkFNX1RZUEUgICAgICAg ICAgICAgICBCSVQoNCkKPiArI2RlZmluZSBBU1BFRURfTUNSX0NPTkZfRUNDICAgICAgICAgICAg ICAgICAgICAgQklUKDcpCj4gKyNkZWZpbmUgQVNQRUVEX01DUl9JTlRSX0NUUkxfQ0xFQVIgICAg ICAgICAgICAgQklUKDMxKQo+ICsjZGVmaW5lIEFTUEVFRF9NQ1JfSU5UUl9DVFJMX0NOVF9SRUMg ICBHRU5NQVNLKDIzLCAxNikKPiArI2RlZmluZSBBU1BFRURfTUNSX0lOVFJfQ1RSTF9DTlRfVU5S RUMgR0VOTUFTSygxNSwgMTIpCj4gKyNkZWZpbmUgQVNQRUVEX01DUl9JTlRSX0NUUkxfRU5BQkxF ICAoQklUKDApIHwgQklUKDEpKQo+ICsKPiArCj4gKwo+ICtzdGF0aWMgaW50IGFzcGVlZF9lZGFj X3JlZ21hcF9yZWdfd3JpdGUodm9pZCAqY29udGV4dCwgdW5zaWduZWQgaW50IHJlZywKPiArCQkJ CQl1bnNpZ25lZCBpbnQgdmFsKQo+ICt7Cj4gKwl2b2lkIF9faW9tZW0gKnJlZ3MgPSAodm9pZCBf X2lvbWVtICopY29udGV4dDsKPiArCj4gKwkvKiBlbmFibGUgd3JpdGUgdG8gTUNSIHJlZ2lzdGVy IHNldCAqLwo+ICsJd3JpdGVsKEFTUEVFRF9NQ1JfUFJPVF9QQVNTV0QsIHJlZ3MgKyBBU1BFRURf TUNSX1BST1QpOwo+ICsKPiArCXdyaXRlbCh2YWwsIHJlZ3MgKyByZWcpOwo+ICsKPiArCS8qIGRp c2FibGUgd3JpdGUgdG8gTUNSIHJlZ2lzdGVyIHNldCAqLwo+ICsJd3JpdGVsKH5BU1BFRURfTUNS X1BST1RfUEFTU1dELCByZWdzICsgQVNQRUVEX01DUl9QUk9UKTsKPiArCj4gKwlyZXR1cm4gMDsK PiArfQo+ICsKPiArCj4gK3N0YXRpYyBpbnQgYXNwZWVkX2VkYWNfcmVnbWFwX3JlZ19yZWFkKHZv aWQgKmNvbnRleHQsIHVuc2lnbmVkIGludCByZWcsCj4gKwkJCQkgICAgICAgdW5zaWduZWQgaW50 ICp2YWwpCj4gK3sKPiArCXZvaWQgX19pb21lbSAqcmVncyA9ICh2b2lkIF9faW9tZW0gKiljb250 ZXh0Owo+ICsKPiArCSp2YWwgPSByZWFkbChyZWdzICsgcmVnKTsKPiArCj4gKwlyZXR1cm4gMDsK PiArfQo+ICsKPiArc3RhdGljIGJvb2wgYXNwZWVkX2VkYWNfcmVnbWFwX2lzX3ZvbGF0aWxlKHN0 cnVjdCBkZXZpY2UgKmRldiwKPiArCQkJCQkgICB1bnNpZ25lZCBpbnQgcmVnKQo+ICt7Cj4gKwlz d2l0Y2ggKHJlZykgewo+ICsJY2FzZSBBU1BFRURfTUNSX1BST1Q6Cj4gKwljYXNlIEFTUEVFRF9N Q1JfSU5UUl9DVFJMOgo+ICsJY2FzZSBBU1BFRURfTUNSX0FERFJfVU5SRUM6Cj4gKwljYXNlIEFT UEVFRF9NQ1JfQUREUl9SRUM6Cj4gKwkJcmV0dXJuIHRydWU7Cj4gKwlkZWZhdWx0Ogo+ICsJCXJl dHVybiBmYWxzZTsKPiArCX0KPiArfQo+ICsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVn bWFwX2NvbmZpZyBhc3BlZWRfZWRhY19yZWdtYXBfY29uZmlnID0gewo+ICsJLnJlZ19iaXRzID0g MzIsCj4gKwkudmFsX2JpdHMgPSAzMiwKPiArCS5yZWdfc3RyaWRlID0gNCwKPiArCS5tYXhfcmVn aXN0ZXIgPSBBU1BFRURfTUNSX0xBU1QsCj4gKwkucmVnX3dyaXRlID0gYXNwZWVkX2VkYWNfcmVn bWFwX3JlZ193cml0ZSwKPiArCS5yZWdfcmVhZCA9IGFzcGVlZF9lZGFjX3JlZ21hcF9yZWdfcmVh ZCwKPiArCS52b2xhdGlsZV9yZWcgPSBhc3BlZWRfZWRhY19yZWdtYXBfaXNfdm9sYXRpbGUsCj4g KwkuZmFzdF9pbyA9IHRydWUsCj4gK307Cj4gKwo+ICsKPiArc3RhdGljIHN0cnVjdCByZWdtYXAg KmFzcGVlZF9lZGFjX3JlZ21hcDsKPiArCj4gKwo+ICtzdGF0aWMgdm9pZCBhc3BlZWRfZWRhY19j b3VudF9yZWMoc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLAo+ICsJCQkJICB1OCByZWNfY250LAo+ ICsJCQkJICB1MzIgcmVjX2FkZHIpCj4gK3sKPiArCXN0cnVjdCBjc3Jvd19pbmZvICpjc3JvdyA9 IG1jaS0+Y3Nyb3dzWzBdOwo+ICsJdTMyIHBhZ2UsIG9mZnNldCwgc3luZHJvbWU7Cj4gKwo+ICsJ aWYgKHJlY19jbnQgPiAwKSB7Cj4gKwkJLyogcmVwb3J0IGZpcnN0IGZldyBlcnJvcnMgKGlmIHRo ZXJlIGFyZSkgKi8KPiArCQkvKiBub3RlOiBubyBhZGRyZXNzZXMgYXJlIHJlY29yZGVkICovCj4g KwkJaWYgKHJlY19jbnQgPiAxKSB7Cj4gKwkJCXBhZ2UgPSAwOyAvKiBub3QgYXZhaWxhYmxlICov Cj4gKwkJCW9mZnNldCA9IDA7ICAvKiBub3QgYXZhaWxhYmxlICovCj4gKwkJCXN5bmRyb21lID0g MDsgLyogbm90IGF2YWlsYWJsZSAqLwo+ICsJCQllZGFjX21jX2hhbmRsZV9lcnJvcihIV19FVkVO VF9FUlJfQ09SUkVDVEVELCBtY2ksCj4gKwkJCQkJICAgICByZWNfY250LTEsIHBhZ2UsIG9mZnNl dCwKPiArCQkJCQkgICAgIHN5bmRyb21lLCAwLCAwLCAtMSwKPiArCQkJCQkgICAgICJhZGRyZXNz KGVzKSBub3QgYXZhaWxhYmxlIiwgIiIpOwo+ICsJCX0KPiArCj4gKwkJLyogcmVwb3J0IGxhc3Qg ZXJyb3IgKi8KPiArCQkvKiBub3RlOiByZWNfYWRkciBpcyB0aGUgbGFzdCByZWNvdmVyYWJsZSBl cnJvciBhZGRyICovCj4gKwkJcGFnZSA9IHJlY19hZGRyID4+IFBBR0VfU0hJRlQ7Cj4gKwkJb2Zm c2V0ID0gcmVjX2FkZHIgJiB+UEFHRV9NQVNLOwo+ICsJCXN5bmRyb21lID0gMDsgLyogbm90IGF2 YWlsYWJsZSAqLwo+ICsJCWVkYWNfbWNfaGFuZGxlX2Vycm9yKEhXX0VWRU5UX0VSUl9DT1JSRUNU RUQsIG1jaSwgMSwKPiArCQkJCSAgICAgY3Nyb3ctPmZpcnN0X3BhZ2UgKyBwYWdlLCBvZmZzZXQs IHN5bmRyb21lLAo+ICsJCQkJICAgICAwLCAwLCAtMSwgIiIsICIiKTsKPiArCX0KPiArfQo+ICsK PiArCj4gK3N0YXRpYyB2b2lkIGFzcGVlZF9lZGFjX2NvdW50X3VuX3JlYyhzdHJ1Y3QgbWVtX2N0 bF9pbmZvICptY2ksCj4gKwkJCQkgICAgIHU4IHVuX3JlY19jbnQsCj4gKwkJCQkgICAgIHUzMiB1 bl9yZWNfYWRkcikKPiArewo+ICsJc3RydWN0IGNzcm93X2luZm8gKmNzcm93ID0gbWNpLT5jc3Jv d3NbMF07Cj4gKwl1MzIgcGFnZSwgb2Zmc2V0LCBzeW5kcm9tZTsKPiArCj4gKwlpZiAodW5fcmVj X2NudCA+IDApIHsKPiArCQkvKiByZXBvcnQgMS4gZXJyb3IgKi8KPiArCQkvKiBub3RlOiB1bl9y ZWNfYWRkciBpcyB0aGUgZmlyc3QgdW5yZWNvdmVyYWJsZSBlcnJvciBhZGRyICovCj4gKwkJcGFn ZSA9IHVuX3JlY19hZGRyID4+IFBBR0VfU0hJRlQ7Cj4gKwkJb2Zmc2V0ID0gdW5fcmVjX2FkZHIg JiB+UEFHRV9NQVNLOwo+ICsJCXN5bmRyb21lID0gMDsgLyogbm90IGF2YWlsYWJsZSAqLwo+ICsJ CWVkYWNfbWNfaGFuZGxlX2Vycm9yKEhXX0VWRU5UX0VSUl9VTkNPUlJFQ1RFRCwgbWNpLCAxLAo+ ICsJCQkJICAgICBjc3Jvdy0+Zmlyc3RfcGFnZSArIHBhZ2UsIG9mZnNldCwgc3luZHJvbWUsCj4g KwkJCQkgICAgIDAsIDAsIC0xLCAiIiwgIiIpOwo+ICsKPiArCQkvKiByZXBvcnQgZnVydGhlciBl cnJvcnMgKGlmIHRoZXJlIGFyZSkgKi8KPiArCQkvKiBub3RlOiBubyBhZGRyZXNzZXMgYXJlIHJl Y29yZGVkICovCj4gKwkJaWYgKHVuX3JlY19jbnQgPiAxKSB7Cj4gKwkJCXBhZ2UgPSAwOyAgLyog bm90IGF2YWlsYWJsZSAqLwo+ICsJCQlvZmZzZXQgPSAwOyAgLyogbm90IGF2YWlsYWJsZSAqLwo+ ICsJCQlzeW5kcm9tZSA9IDA7IC8qIG5vdCBhdmFpbGFibGUgKi8KPiArCQkJZWRhY19tY19oYW5k bGVfZXJyb3IoSFdfRVZFTlRfRVJSX1VOQ09SUkVDVEVELCBtY2ksCj4gKwkJCQkJICAgICB1bl9y ZWNfY250LTEsIHBhZ2UsIG9mZnNldCwKPiArCQkJCQkgICAgIHN5bmRyb21lLCAwLCAwLCAtMSwK PiArCQkJCQkgICAgICJhZGRyZXNzKGVzKSBub3QgYXZhaWxhYmxlIiwgIiIpOwo+ICsJCX0KPiAr CX0KPiArfQo+ICsKPiArCj4gK3N0YXRpYyB2b2lkIGFzcGVlZF9lZGFjX2VuYWJsZV9pbnRlcnJ1 cHRzKHZvaWQpCj4gK3sKPiArCj4gKwlyZWdtYXBfdXBkYXRlX2JpdHMoYXNwZWVkX2VkYWNfcmVn bWFwLCBBU1BFRURfTUNSX0lOVFJfQ1RSTCwKPiArCQkJICAgQVNQRUVEX01DUl9JTlRSX0NUUkxf RU5BQkxFLAo+ICsJCQkgICBBU1BFRURfTUNSX0lOVFJfQ1RSTF9FTkFCTEUpOwo+ICt9Cj4gKwo+ ICsKPiArc3RhdGljIHZvaWQgYXNwZWVkX2VkYWNfZGlzYWJsZV9pbnRlcnJ1cHRzKHZvaWQpCj4g K3sKPiArCXJlZ21hcF91cGRhdGVfYml0cyhhc3BlZWRfZWRhY19yZWdtYXAsIEFTUEVFRF9NQ1Jf SU5UUl9DVFJMLAo+ICsJCQkgICBBU1BFRURfTUNSX0lOVFJfQ1RSTF9FTkFCTEUsIDApOwo+ICt9 Cj4gKwo+ICsKPiArc3RhdGljIHZvaWQgYXNwZWVkX2VkYWNfY2xlYXJfaW50ZXJydXB0cyh2b2lk KQo+ICt7Cj4gKwlyZWdtYXBfdXBkYXRlX2JpdHMoYXNwZWVkX2VkYWNfcmVnbWFwLCBBU1BFRURf TUNSX0lOVFJfQ1RSTCwKPiArCQkJICAgQVNQRUVEX01DUl9JTlRSX0NUUkxfQ0xFQVIsCj4gKwkJ CSAgIEFTUEVFRF9NQ1JfSU5UUl9DVFJMX0NMRUFSKTsKPiArCj4gKwlyZWdtYXBfdXBkYXRlX2Jp dHMoYXNwZWVkX2VkYWNfcmVnbWFwLCBBU1BFRURfTUNSX0lOVFJfQ1RSTCwKPiArCQkJICAgQVNQ RUVEX01DUl9JTlRSX0NUUkxfQ0xFQVIsIDApOwo+ICt9Cj4gKwo+ICsKPiArc3RhdGljIGlycXJl dHVybl90IGFzcGVlZF9lZGFjX2lzcihpbnQgaXJxLCB2b2lkICphcmcpCj4gK3sKPiArCXU4ICBy ZWNfY250LCB1bl9yZWNfY250Owo+ICsJdTMyIHJlY19hZGRyLCB1bl9yZWNfYWRkcjsKPiArCXN0 cnVjdCBtZW1fY3RsX2luZm8gKm1jaSA9IGFyZzsKPiArCXUzMiByZWc1MCwgcmVnNWMsIHJlZzU4 Owo+ICsKPiArCXJlZ21hcF9yZWFkKGFzcGVlZF9lZGFjX3JlZ21hcCwgQVNQRUVEX01DUl9JTlRS X0NUUkwsICZyZWc1MCk7Cj4gKwlkZXZfZGJnKG1jaS0+cGRldiwgInJlY2VpdmVkIGVkYWMgaW50 ZXJydXB0IHcvIG1tYyByZWdpc3RlciA1MDogMHgleFxuIiwKPiArCQlyZWc1MCk7Cj4gKwo+ICsJ LyogY29sbGVjdCBkYXRhIGFib3V0IHJlY292ZXJhYmxlIGFuZCB1bnJlY292ZXJhYmxlIGVycm9y cyAqLwo+ICsJcmVjX2NudCA9IChyZWc1MCAmIEFTUEVFRF9NQ1JfSU5UUl9DVFJMX0NOVF9SRUMp ID4+IDE2Owo+ICsJdW5fcmVjX2NudCA9IChyZWc1MCAmIEFTUEVFRF9NQ1JfSU5UUl9DVFJMX0NO VF9VTlJFQykgPj4gMTI7Cj4gKwo+ICsJZGV2X2RiZyhtY2ktPnBkZXYsICIlZCByZWNvdmVyYWJs ZSBpbnRlcnJ1cHRzIGFuZCAlZCB1bnJlY292ZXJhYmxlIGludGVycnVwdHNcbiIsCj4gKwkJcmVj X2NudCwgdW5fcmVjX2NudCk7Cj4gKwo+ICsJcmVnbWFwX3JlYWQoYXNwZWVkX2VkYWNfcmVnbWFw LCBBU1BFRURfTUNSX0FERFJfVU5SRUMsICZyZWc1OCk7Cj4gKwl1bl9yZWNfYWRkciA9IHJlZzU4 ID4+IDQ7CgpOb3cgSSBiZXR0ZXIgdW5kZXJzdGFuZCByZWc1OC4gVGhpcyBpcyBmcm9tIGFzcGVl ZCBkb2NzOgoKLSAtIC0gc25pcCAtIC0gLQozMTozMCByZXNlcnZlZCAoMCkKMjk6NCAgQWRkcmVz cyBvZiBmaXJzdCB1bi1yZWNvdmVyYWJsZSBFQ0MgZXJyb3IKMzowICAgcmVzZXJ2ZWQgKDApCi0g LSAtIHNuaXAgLSAtIC0KCkJpdHMgMzowIGFyZSBpbmRlZWQgcGFydCBvZiB0aGUgYWRkcmVzcywg YnV0IHRoZWlyIHZhbHVlcyBhcmUgbm90IGtub3duIGFuZCBzbwpzaW1wbHkgaGFyZGNvZGVkIHRv IDAwMDAuIFRoaXMgaXMgYmVjYXVzZSB0aGVyZSBpcyBvbmUgRUNDIGJ5dGUgZm9yIGV2ZXJ5IDgK Ynl0ZXMgYW5kIHNvIHRoZSBwcmVjaXNpb24gaXMgOC1ieXRlLgoKSW4gb3RoZXIgd29yZHMsIHRo ZSB3aG9sZSByZWdpc3RlciBob2xkcyB0aGUgYWRkcmVzcyBvZiB0aGUgZmlyc3QKdW4tcmVjb3Zl cmFibGUgRUNDIGVycm9yIGFuZCBzbyB0aGUgc2hpZnQgbXVzdCBiZSByZW1vdmVkOgoKIAl1bl9y ZWNfYWRkciA9IHJlZzU4OwoKClNhbml0eSBjaGVjazogYW4gYWRkcmVzcyBzcGFjZSBvZiAyOS00 KzEgYml0cyB3b3VsZCBiZSBxdWl0ZSBzbWFsbC4gVGhlIGNvcnJlY3QKYWRkcmVzcyBzcGFjZSBp cyAzMCBiaXRzLgoKCj4gKwlyZWdtYXBfcmVhZChhc3BlZWRfZWRhY19yZWdtYXAsIEFTUEVFRF9N Q1JfQUREUl9SRUMsICZyZWc1Yyk7Cj4gKwlyZWNfYWRkciA9IHJlZzVjID4+IDQ7CgpTYW1lIGFz IGFib3ZlLgoKCj4gKwkvKiBjbGVhciBpbnRlcnJ1cHQgZmxhZ3MgYW5kIGVycm9yIGNvdW50ZXJz OiAqLwo+ICsJYXNwZWVkX2VkYWNfY2xlYXJfaW50ZXJydXB0cygpOwo+ICsKPiArCS8qIHByb2Nl c3MgcmVjb3ZlcmFibGUgYW5kIHVucmVjb3ZlcmFibGUgZXJyb3JzICovCj4gKwlpZiAocmVjX2Nu dCA+IDApCj4gKwkJYXNwZWVkX2VkYWNfY291bnRfcmVjKG1jaSwgcmVjX2NudCwgcmVjX2FkZHIp Owo+ICsKPiArCWlmICh1bl9yZWNfY250ID4gMCkKPiArCQlhc3BlZWRfZWRhY19jb3VudF91bl9y ZWMobWNpLCB1bl9yZWNfY250LCB1bl9yZWNfYWRkcik7Cj4gKwo+ICsJaWYgKChyZWNfY250ID09 IDApICYmICh1bl9yZWNfY250ID09IDApKQo+ICsJCWRldl9kYmcobWNpLT5wZGV2LCAicmVjZWl2 ZWQgZWRhYyBpbnRlcnJ1cHQsIGJ1dCBkaWQgbm90IGZpbmQgYW55IGVjYyBjb3VudGVyc1xuIik7 Cj4gKwo+ICsJcmVnbWFwX3JlYWQoYXNwZWVkX2VkYWNfcmVnbWFwLCBBU1BFRURfTUNSX0lOVFJf Q1RSTCwgJnJlZzUwKTsKPiArCWRldl9kYmcobWNpLT5wZGV2LCAiZWRhYyBpbnRlcnJ1cHQgaGFu ZGxlZC4gbW1jIHJlZyA1MCBpcyBub3c6IDB4JXhcbiIsCj4gKwkJcmVnNTApOwo+ICsKPiArCXJl dHVybiBJUlFfSEFORExFRDsKPiArfQo+ICsKPiArCj4gK3N0YXRpYyBpbnQgYXNwZWVkX2VkYWNf Y29uZmlnX2lycSh2b2lkICpjdHgsCj4gKwkJCQkgIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYpCj4gK3sKPiArCWludCBpcnE7Cj4gKwlpbnQgcmM7Cj4gKwo+ICsJLyogcmVnaXN0ZXIgaW50 ZXJydXB0IGhhbmRsZXIgKi8KPiArCj4gKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDAp Owo+ICsJZGV2X2RiZygmcGRldi0+ZGV2LCAiZ290IGlycSAlZFxuIiwgaXJxKTsKPiArCWlmICgh aXJxKQo+ICsJCXJldHVybiAtRU5PREVWOwo+ICsKPiArCXJjID0gZGV2bV9yZXF1ZXN0X2lycSgm cGRldi0+ZGV2LCBpcnEsIGFzcGVlZF9lZGFjX2lzciwKPiArCQkJICAgICAgSVJRRl9UUklHR0VS X0hJR0gsIERSVl9OQU1FLCBjdHgpOwo+ICsJaWYgKHJjKSB7Cj4gKwkJZGV2X2VycigmcGRldi0+ ZGV2LCAidW5hYmxlIHRvIHJlcXVlc3QgaXJxICVkXG4iLCBpcnEpOwo+ICsJCXJldHVybiByYzsK PiArCX0KPiArCj4gKwkvKiBlbmFibGUgaW50ZXJydXB0cyAqLwo+ICsJYXNwZWVkX2VkYWNfZW5h YmxlX2ludGVycnVwdHMoKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArCj4gK3N0YXRp YyBpbnQgYXNwZWVkX2VkYWNfaW5pdF9jc3Jvd3Moc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpKQo+ ICt7Cj4gKwlzdHJ1Y3QgY3Nyb3dfaW5mbyAqY3Nyb3cgPSBtY2ktPmNzcm93c1swXTsKPiArCXN0 cnVjdCBkaW1tX2luZm8gKmRpbW07Cj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwo+ICsJdTMy IG5yX3BhZ2VzLCBkcmFtX3R5cGU7Cj4gKwlzdHJ1Y3QgcmVzb3VyY2UgcjsKPiArCXUzMiByZWcw NDsKPiArCWludCByYzsKPiArCj4gKwkvKiByZXRyaWV2ZSBpbmZvIGFib3V0IHBoeXNpY2FsIG1l bW9yeSBmcm9tIGRldmljZSB0cmVlICovCj4gKwlucCA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIv bWVtb3J5Iik7Cj4gKwo+ICsJaWYgKCFucCkgewo+ICsJCWRldl9lcnIobWNpLT5wZGV2LCAiZHQ6 IG1pc3NpbmcgL21lbW9yeSBub2RlXG4iKTsKPiArCQlyZXR1cm4gLUVOT0RFVjsKPiArCX07Cj4g Kwo+ICsJcmMgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5wLCAwLCAmcik7Cj4gKwo+ICsJb2Zf bm9kZV9wdXQobnApOwo+ICsKPiArCWlmIChyYykgewo+ICsJCWRldl9lcnIobWNpLT5wZGV2LCAi ZHQ6IGZhaWxlZCByZXF1ZXN0aW5nIHJlc291cmNlIGZvciAvbWVtb3J5IG5vZGVcbiIpOwo+ICsJ CXJldHVybiByYzsKPiArCX07Cj4gKwo+ICsJZGV2X2RiZyhtY2ktPnBkZXYsICJkdDogL21lbW9y eSBub2RlIHJlc291cmNlczogZmlyc3QgcGFnZSByLnN0YXJ0PTB4JXgsIHJlc291cmNlX3NpemU9 MHgleCwgUEFHRV9TSElGVCBtYWNybz0weCV4XG4iLAo+ICsJCXIuc3RhcnQsIHJlc291cmNlX3Np emUoJnIpLCBQQUdFX1NISUZUKTsKPiArCj4gKwljc3Jvdy0+Zmlyc3RfcGFnZSA9IHIuc3RhcnQg Pj4gUEFHRV9TSElGVDsKPiArCW5yX3BhZ2VzID0gcmVzb3VyY2Vfc2l6ZSgmcikgPj4gUEFHRV9T SElGVDsKPiArCWNzcm93LT5sYXN0X3BhZ2UgPSBjc3Jvdy0+Zmlyc3RfcGFnZSArIG5yX3BhZ2Vz IC0gMTsKPiArCj4gKwlyZWdtYXBfcmVhZChhc3BlZWRfZWRhY19yZWdtYXAsIEFTUEVFRF9NQ1Jf Q09ORiwgJnJlZzA0KTsKPiArCWRyYW1fdHlwZSA9IChyZWcwNCAmIEFTUEVFRF9NQ1JfQ09ORl9E UkFNX1RZUEUpID8gTUVNX0REUjQgOiBNRU1fRERSMzsKPiArCj4gKwlkaW1tID0gY3Nyb3ctPmNo YW5uZWxzWzBdLT5kaW1tOwo+ICsJZGltbS0+bXR5cGUgPSBkcmFtX3R5cGU7Cj4gKwlkaW1tLT5l ZGFjX21vZGUgPSBFREFDX1NFQ0RFRDsKPiArCWRpbW0tPm5yX3BhZ2VzID0gbnJfcGFnZXMgLyBj c3Jvdy0+bnJfY2hhbm5lbHM7Cj4gKwo+ICsJZGV2X2RiZyhtY2ktPnBkZXYsICJpbml0aWFsaXpl ZCBkaW1tIHdpdGggZmlyc3RfcGFnZT0weCVseCBhbmQgbnJfcGFnZXM9MHgleFxuIiwKPiArCQlj c3Jvdy0+Zmlyc3RfcGFnZSwgbnJfcGFnZXMpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ ICsKPiArc3RhdGljIGludCBhc3BlZWRfZWRhY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl ICpwZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Owo+ICsJdm9p ZCBfX2lvbWVtICpyZWdzOwo+ICsJc3RydWN0IHJlc291cmNlICpyZXM7Cj4gKwlzdHJ1Y3QgbWVt X2N0bF9pbmZvICptY2k7Cj4gKwlzdHJ1Y3QgZWRhY19tY19sYXllciBsYXllcnNbMl07Cj4gKwlz dHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwo+ICsJdTMyIHJlZzA0Owo+ICsJaW50IHJjOwo+ICsKPiAr CS8qIHNldHVwIHJlZ21hcCAqLwo+ICsJbnAgPSBkZXYtPm9mX25vZGU7Cj4gKwo+ICsJcmVzID0g cGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKPiArCWlmICgh cmVzKQo+ICsJCXJldHVybiAtRU5PRU5UOwo+ICsKPiArCXJlZ3MgPSBkZXZtX2lvcmVtYXBfcmVz b3VyY2UoZGV2LCByZXMpOwo+ICsJaWYgKElTX0VSUihyZWdzKSkKPiArCQlyZXR1cm4gUFRSX0VS UihyZWdzKTsKPiArCj4gKwlhc3BlZWRfZWRhY19yZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0KGRl diwgTlVMTCwgKF9fZm9yY2Ugdm9pZCAqKXJlZ3MsCj4gKwkJCQkJICAgICAgICZhc3BlZWRfZWRh Y19yZWdtYXBfY29uZmlnKTsKPiArCWlmIChJU19FUlIoYXNwZWVkX2VkYWNfcmVnbWFwKSkKPiAr CQlyZXR1cm4gUFRSX0VSUihhc3BlZWRfZWRhY19yZWdtYXApOwo+ICsKPiArCS8qIGJhaWwgb3V0 IGlmIEVDQyBtb2RlIGlzIG5vdCBjb25maWd1cmVkICovCj4gKwlyZWdtYXBfcmVhZChhc3BlZWRf ZWRhY19yZWdtYXAsIEFTUEVFRF9NQ1JfQ09ORiwgJnJlZzA0KTsKPiArCWlmICghKHJlZzA0ICYg QVNQRUVEX01DUl9DT05GX0VDQykpIHsKPiArCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJFQ0MgbW9k ZSBpcyBub3QgY29uZmlndXJlZCBpbiB1LWJvb3RcbiIpOwo+ICsJCXJldHVybiAtRVBFUk07Cj4g Kwl9Cj4gKwo+ICsJZWRhY19vcF9zdGF0ZSA9IEVEQUNfT1BTVEFURV9JTlQ7Cj4gKwo+ICsJLyog YWxsb2NhdGUgJiBpbml0IEVEQUMgTUMgZGF0YSBzdHJ1Y3R1cmUgKi8KPiArCWxheWVyc1swXS50 eXBlID0gRURBQ19NQ19MQVlFUl9DSElQX1NFTEVDVDsKPiArCWxheWVyc1swXS5zaXplID0gMTsK PiArCWxheWVyc1swXS5pc192aXJ0X2Nzcm93ID0gdHJ1ZTsKPiArCWxheWVyc1sxXS50eXBlID0g RURBQ19NQ19MQVlFUl9DSEFOTkVMOwo+ICsJbGF5ZXJzWzFdLnNpemUgPSAxOwo+ICsJbGF5ZXJz WzFdLmlzX3ZpcnRfY3Nyb3cgPSBmYWxzZTsKPiArCj4gKwltY2kgPSBlZGFjX21jX2FsbG9jKDAs IEFSUkFZX1NJWkUobGF5ZXJzKSwgbGF5ZXJzLCAwKTsKPiArCWlmIChtY2kgPT0gTlVMTCkKPiAr CQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwltY2ktPnBkZXYgPSAmcGRldi0+ZGV2Owo+ICsJbWNp LT5tdHlwZV9jYXAgPSBNRU1fRkxBR19ERFIzIHwgTUVNX0ZMQUdfRERSNDsKPiArCW1jaS0+ZWRh Y19jdGxfY2FwID0gRURBQ19GTEFHX1NFQ0RFRDsKPiArCW1jaS0+ZWRhY19jYXAgPSBFREFDX0ZM QUdfU0VDREVEOwo+ICsJbWNpLT5zY3J1Yl9jYXAgPSBTQ1JVQl9GTEFHX0hXX1NSQzsKPiArCW1j aS0+c2NydWJfbW9kZSA9IFNDUlVCX0hXX1NSQzsKPiArCW1jaS0+bW9kX25hbWUgPSBEUlZfTkFN RTsKPiArCW1jaS0+Y3RsX25hbWUgPSAiTUlDIjsKPiArCW1jaS0+ZGV2X25hbWUgPSBkZXZfbmFt ZSgmcGRldi0+ZGV2KTsKPiArCj4gKwlyYyA9IGFzcGVlZF9lZGFjX2luaXRfY3Nyb3dzKG1jaSk7 Cj4gKwlpZiAocmMpIHsKPiArCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gaW5pdCBj c3Jvd3NcbiIpOwo+ICsJCWdvdG8gcHJvYmVfZXhpdDAyOwo+ICsJfQo+ICsKPiArCXBsYXRmb3Jt X3NldF9kcnZkYXRhKHBkZXYsIG1jaSk7Cj4gKwo+ICsJLyogcmVnaXN0ZXIgd2l0aCBlZGFjIGNv cmUgKi8KPiArCXJjID0gZWRhY19tY19hZGRfbWMobWNpKTsKPiArCWlmIChyYykgewo+ICsJCWRl dl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciB3aXRoIEVEQUMgY29yZVxuIik7 Cj4gKwkJZ290byBwcm9iZV9leGl0MDI7Cj4gKwl9Cj4gKwo+ICsJLyogcmVnaXN0ZXIgaW50ZXJy dXB0IGhhbmRsZXIgYW5kIGVuYWJsZSBpbnRlcnJ1cHRzICovCj4gKwlyYyA9IGFzcGVlZF9lZGFj X2NvbmZpZ19pcnEobWNpLCBwZGV2KTsKPiArCWlmIChyYykgewo+ICsJCWRldl9lcnIoJnBkZXYt PmRldiwgImZhaWxlZCBzZXR0aW5nIHVwIGlycVxuIik7Cj4gKwkJZ290byBwcm9iZV9leGl0MDE7 Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gKwo+ICtwcm9iZV9leGl0MDE6Cj4gKwllZGFjX21j X2RlbF9tYygmcGRldi0+ZGV2KTsKPiArcHJvYmVfZXhpdDAyOgo+ICsJZWRhY19tY19mcmVlKG1j aSk7Cj4gKwlyZXR1cm4gcmM7Cj4gK30KPiArCj4gKwo+ICtzdGF0aWMgaW50IGFzcGVlZF9lZGFj X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgbWVt X2N0bF9pbmZvICptY2k7Cj4gKwo+ICsJLyogZGlzYWJsZSBpbnRlcnJ1cHRzICovCj4gKwlhc3Bl ZWRfZWRhY19kaXNhYmxlX2ludGVycnVwdHMoKTsKPiArCj4gKwkvKiBmcmVlIHJlc291cmNlcyAq Lwo+ICsJbWNpID0gZWRhY19tY19kZWxfbWMoJnBkZXYtPmRldik7Cj4gKwlpZiAobWNpKQo+ICsJ CWVkYWNfbWNfZnJlZShtY2kpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICsKPiArc3Rh dGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYXNwZWVkX2VkYWNfb2ZfbWF0Y2hbXSA9IHsK PiArCXsgLmNvbXBhdGlibGUgPSAiYXNwZWVkLGFzdDI1MDAtc2RyYW0tZWRhYyIgfSwKPiArCXt9 LAo+ICt9Owo+ICsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGFzcGVlZF9l ZGFjX2RyaXZlciA9IHsKPiArCS5kcml2ZXIJCT0gewo+ICsJCS5uYW1lCT0gRFJWX05BTUUsCj4g KwkJLm9mX21hdGNoX3RhYmxlID0gYXNwZWVkX2VkYWNfb2ZfbWF0Y2gKPiArCX0sCj4gKwkucHJv YmUJCT0gYXNwZWVkX2VkYWNfcHJvYmUsCj4gKwkucmVtb3ZlCQk9IGFzcGVlZF9lZGFjX3JlbW92 ZQo+ICt9Owo+ICsKPiArCj4gK3N0YXRpYyBpbnQgX19pbml0IGFzcGVlZF9lZGFjX2luaXQodm9p ZCkKPiArewo+ICsJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYXNwZWVkX2VkYWNf ZHJpdmVyKTsKPiArfQo+ICsKPiArCj4gK3N0YXRpYyB2b2lkIF9fZXhpdCBhc3BlZWRfZWRhY19l eGl0KHZvaWQpCj4gK3sKPiArCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhc3BlZWRfZWRh Y19kcml2ZXIpOwo+ICt9Cj4gKwo+ICsKPiArbW9kdWxlX2luaXQoYXNwZWVkX2VkYWNfaW5pdCk7 Cj4gK21vZHVsZV9leGl0KGFzcGVlZF9lZGFjX2V4aXQpOwo+ICsKPiArCj4gK01PRFVMRV9MSUNF TlNFKCJHUEwiKTsKPiArTU9EVUxFX0FVVEhPUigiU3RlZmFuIFNjaGFlY2tlbGVyIDxzc2NoYWVj a0BjaXNjby5jb20+Iik7Cj4gK01PRFVMRV9ERVNDUklQVElPTigiQXNwZWVkIEFTVDI1MDAgRURB QyBkcml2ZXIiKTsKPiArTU9EVUxFX1ZFUlNJT04oIjEuMCIpOwo+IC0tIAo+IDIuMTkuMQo+IAoK IFN0ZWZhbgo=