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: [v4,3/4] edac: synopsys: Add EDAC ECC support for ZynqMP DDRC From: Manish Narani Message-Id: <1533374735-16662-4-git-send-email-manish.narani@xilinx.com> Date: Sat, 4 Aug 2018 14:55:34 +0530 To: robh+dt@kernel.org, mark.rutland@arm.com, catalin.marinas@arm.com, will.deacon@arm.com, michal.simek@xilinx.com, bp@alien8.de, mchehab@kernel.org, mdf@kernel.org, edgar.iglesias@xilinx.com, shubhrajyoti.datta@xilinx.com, naga.sureshkumar.relli@xilinx.com, bharat.kumar.gogada@xilinx.com, stefan.krsmanovic@aggios.com Cc: sgoud@xilinx.com, anirudh@xilinx.com, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-edac@vger.kernel.org, Manish Narani List-ID: QWRkIEVEQUMgRUNDIHN1cHBvcnQgZm9yIFp5bnFNUCBERFJDIElQLiBBbHNvIGFkZCBzdXBwb3J0 IGZvciBFQ0MgRXJyb3IKSW5qZWN0aW9uIGluIFp5bnFNUC4gVGhlIGNvcnJlY3RlZCBhbmQgdW5j b3JyZWN0ZWQgZXJyb3IgaW50ZXJydXB0cwpzdXBwb3J0IGlzIGFkZGVkLiBUaGUgUm93LCBDb2x1 bW4sIEJhbmssIEJhbmsgR3JvdXAgYW5kIFJhbmsgYml0cwpwb3NpdGlvbnMgYXJlIGRldGVybWlu ZWQgdmlhIEFkZHJlc3MgTWFwIHJlZ2lzdGVycyBvZiBTeW5vcHN5cyBERFJDLgoKU2lnbmVkLW9m Zi1ieTogTWFuaXNoIE5hcmFuaSA8bWFuaXNoLm5hcmFuaUB4aWxpbnguY29tPgotLS0KIGRyaXZl cnMvZWRhYy9LY29uZmlnICAgICAgICAgfCAgIDIgKy0KIGRyaXZlcnMvZWRhYy9zeW5vcHN5c19l ZGFjLmMgfCA4NjQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQog MiBmaWxlcyBjaGFuZ2VkLCA4NDggaW5zZXJ0aW9ucygrKSwgMTggZGVsZXRpb25zKC0pCgpkaWZm IC0tZ2l0IGEvZHJpdmVycy9lZGFjL0tjb25maWcgYi9kcml2ZXJzL2VkYWMvS2NvbmZpZwppbmRl eCA1NzMwNGIyLi5iMWZjN2ExNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL0tjb25maWcKKysr IGIvZHJpdmVycy9lZGFjL0tjb25maWcKQEAgLTQ0MSw3ICs0NDEsNyBAQCBjb25maWcgRURBQ19B TFRFUkFfU0RNTUMKIAogY29uZmlnIEVEQUNfU1lOT1BTWVMKIAl0cmlzdGF0ZSAiU3lub3BzeXMg RERSIE1lbW9yeSBDb250cm9sbGVyIgotCWRlcGVuZHMgb24gQVJDSF9aWU5RCisJZGVwZW5kcyBv biBBUkNIX1pZTlEgfHwgQVJNNjQKIAloZWxwCiAJICBTdXBwb3J0IGZvciBlcnJvciBkZXRlY3Rp b24gYW5kIGNvcnJlY3Rpb24gb24gdGhlIFN5bm9wc3lzIEREUgogCSAgbWVtb3J5IGNvbnRyb2xs ZXIuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvc3lub3BzeXNfZWRhYy5jIGIvZHJpdmVycy9l ZGFjL3N5bm9wc3lzX2VkYWMuYwppbmRleCBiM2M1NGU3Li44MmYyNzZiIDEwMDY0NAotLS0gYS9k cml2ZXJzL2VkYWMvc3lub3BzeXNfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9zeW5vcHN5c19l ZGFjLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9lZGFjLmg+CiAjaW5jbHVk ZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cisj aW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvb2YuaD4KIAogI2lu Y2x1ZGUgImVkYWNfbW9kdWxlLmgiCkBAIC05Niw2ICs5NywxNzAgQEAKICNkZWZpbmUgU0NSVUJf TU9ERV9NQVNLCQkweDcKICNkZWZpbmUgU0NSVUJfTU9ERV9TRUNERUQJMHg0CiAKKy8qIEREUiBF Q0MgUXVpcmtzICovCisjZGVmaW5lIEREUl9FQ0NfSU5UUl9TVVBQT1JUCUJJVCgwKQorCisvKiBE RFIgRUNDIFF1aXJrcyAqLworI2RlZmluZSBERFJfRUNDX0lOVFJfU1VQUE9SVAlCSVQoMCkKKyNk ZWZpbmUgRERSX0VDQ19EQVRBX1BPSVNPTl9TVVBQT1JUIEJJVCgxKQorCisvKiBaeW5xTVAgRW5o YW5jZWQgRERSIG1lbW9yeSBjb250cm9sbGVyIHJlZ2lzdGVycyB0aGF0IGFyZSByZWxldmFudCB0 byBFQ0MgKi8KKy8qIEVDQyBDb25maWd1cmF0aW9uIFJlZ2lzdGVycyAqLworI2RlZmluZSBFQ0Nf Q0ZHMF9PRlNUCTB4NzAKKyNkZWZpbmUgRUNDX0NGRzFfT0ZTVAkweDc0CisKKy8qIEVDQyBTdGF0 dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRUNDX1NUQVRfT0ZTVAkweDc4CisKKy8qIEVDQyBDbGVh ciBSZWdpc3RlciAqLworI2RlZmluZSBFQ0NfQ0xSX09GU1QJMHg3QworCisvKiBFQ0MgRXJyb3Ig Y291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRUNDX0VSUkNOVF9PRlNUCTB4ODAKKworLyogRUND IENvcnJlY3RlZCBFcnJvciBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lIEVDQ19DRUFERFIw X09GU1QJMHg4NAorI2RlZmluZSBFQ0NfQ0VBRERSMV9PRlNUCTB4ODgKKworLyogRUNDIFN5bmRy b21lIFJlZ2lzdGVycyAqLworI2RlZmluZSBFQ0NfQ1NZTkQwX09GU1QJMHg4QworI2RlZmluZSBF Q0NfQ1NZTkQxX09GU1QJMHg5MAorI2RlZmluZSBFQ0NfQ1NZTkQyX09GU1QJMHg5NAorCisvKiBF Q0MgQml0IE1hc2swIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRUNDX0JJVE1BU0swX09G U1QJMHg5OAorI2RlZmluZSBFQ0NfQklUTUFTSzFfT0ZTVAkweDlDCisjZGVmaW5lIEVDQ19CSVRN QVNLMl9PRlNUCTB4QTAKKworLyogRUNDIFVuQ29ycmVjdGVkIEVycm9yIEFkZHJlc3MgUmVnaXN0 ZXIgKi8KKyNkZWZpbmUgRUNDX1VFQUREUjBfT0ZTVAkweEE0CisjZGVmaW5lIEVDQ19VRUFERFIx X09GU1QJMHhBOAorCisvKiBFQ0MgU3luZHJvbWUgUmVnaXN0ZXJzICovCisjZGVmaW5lIEVDQ19V RVNZTkQwX09GU1QJMHhBQworI2RlZmluZSBFQ0NfVUVTWU5EMV9PRlNUCTB4QjAKKyNkZWZpbmUg RUNDX1VFU1lORDJfT0ZTVAkweEI0CisKKy8qIEVDQyBQb2lzb24gQWRkcmVzcyBSZWcgKi8KKyNk ZWZpbmUgRUNDX1BPSVNPTjBfT0ZTVAkweEI4CisjZGVmaW5lIEVDQ19QT0lTT04xX09GU1QJMHhC QworCisjZGVmaW5lIEVDQ19BRERSTUFQMF9PRkZTRVQJMHgyMDAKKworLyogQ29udHJvbCByZWdp c3RlciBiaXRmaWVsZCBkZWZpbml0aW9ucyAqLworI2RlZmluZSBFQ0NfQ1RSTF9CVVNXSURUSF9N QVNLCTB4MzAwMAorI2RlZmluZSBFQ0NfQ1RSTF9CVVNXSURUSF9TSElGVAkxMgorI2RlZmluZSBF Q0NfQ1RSTF9DTFJfQ0VfRVJSQ05UCUJJVCgyKQorI2RlZmluZSBFQ0NfQ1RSTF9DTFJfVUVfRVJS Q05UCUJJVCgzKQorCisvKiBERFIgQ29udHJvbCBSZWdpc3RlciB3aWR0aCBkZWZpbml0aW9ucyAg Ki8KKyNkZWZpbmUgRERSQ1RMX0VXRFRIXzE2CQkyCisjZGVmaW5lIEREUkNUTF9FV0RUSF8zMgkJ MQorI2RlZmluZSBERFJDVExfRVdEVEhfNjQJCTAKKworLyogRUNDIHN0YXR1cyByZWdpc3RlciBk ZWZpbml0aW9ucyAqLworI2RlZmluZSBFQ0NfU1RBVF9VRUNOVF9NQVNLCTB4RjAwMDAKKyNkZWZp bmUgRUNDX1NUQVRfVUVDTlRfU0hJRlQJMTYKKyNkZWZpbmUgRUNDX1NUQVRfQ0VDTlRfTUFTSwkw eEYwMAorI2RlZmluZSBFQ0NfU1RBVF9DRUNOVF9TSElGVAk4CisjZGVmaW5lIEVDQ19TVEFUX0JJ VE5VTV9NQVNLCTB4N0YKKworLyogRERSIFFPUyBJbnRlcnJ1cHQgcmVnaXN0ZXIgZGVmaW5pdGlv bnMgKi8KKyNkZWZpbmUgRERSX1FPU19JUlFfU1RBVF9PRlNUCTB4MjAyMDAKKyNkZWZpbmUgRERS X1FPU1VFX01BU0sJCTB4NAorI2RlZmluZQlERFJfUU9TQ0VfTUFTSwkJMHgyCisjZGVmaW5lCUVD Q19DRV9VRV9JTlRSX01BU0sJMHg2CisjZGVmaW5lIEREUl9RT1NfSVJRX0VOX09GU1QgICAgIDB4 MjAyMDgKKyNkZWZpbmUgRERSX1FPU19JUlFfREJfT0ZTVAkweDIwMjBDCisKKy8qIEVDQyBDb3Jy ZWN0ZWQgRXJyb3IgUmVnaXN0ZXIgTWFzayBhbmQgU2hpZnRzKi8KKyNkZWZpbmUgRUNDX0NFQURE UjBfUldfTUFTSwkweDNGRkZGCisjZGVmaW5lIEVDQ19DRUFERFIwX1JOS19NQVNLCUJJVCgyNCkK KyNkZWZpbmUgRUNDX0NFQUREUjFfQk5LR1JQX01BU0sJMHgzMDAwMDAwCisjZGVmaW5lIEVDQ19D RUFERFIxX0JOS05SX01BU0sJMHg3MDAwMAorI2RlZmluZSBFQ0NfQ0VBRERSMV9CTEtOUl9NQVNL CTB4RkZGCisjZGVmaW5lIEVDQ19DRUFERFIxX0JOS0dSUF9TSElGVAkyNAorI2RlZmluZSBFQ0Nf Q0VBRERSMV9CTktOUl9TSElGVAkxNgorCisvKiBFQ0MgUG9pc29uIHJlZ2lzdGVyIHNoaWZ0cyAq LworI2RlZmluZSBFQ0NfUE9JU09OMF9SQU5LX1NISUZUIDI0CisjZGVmaW5lIEVDQ19QT0lTT04x X0JBTktHUlBfU0hJRlQgMjgKKyNkZWZpbmUgRUNDX1BPSVNPTjFfQkFOS05SX1NISUZUIDI0CisK Ky8qIEREUiBNZW1vcnkgdHlwZSBkZWZpbmVzICovCisjZGVmaW5lIE1FTV9UWVBFX0REUjMJCTB4 MQorI2RlZmluZSBNRU1fVFlQRV9MUEREUjMJCTB4OAorI2RlZmluZSBNRU1fVFlQRV9ERFIyCQkw eDQKKyNkZWZpbmUgTUVNX1RZUEVfRERSNAkJMHgxMAorI2RlZmluZSBNRU1fVFlQRV9MUEREUjQJ CTB4MjAKKworLyogRERSQyBTb2Z0d2FyZSBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIERE UkNfU1dDVEwgMHgzMjAKKworLyogRERSQyBFQ0MgQ0UgJiBVRSBwb2lzb24gbWFzayAqLworI2Rl ZmluZSBFQ0NfQ0VQT0lTT05fTUFTSyAweDMKKyNkZWZpbmUgRUNDX1VFUE9JU09OX01BU0sgMHgx CisKKy8qIEREUkMgRGV2aWNlIGNvbmZpZyBtYXNrcyAqLworI2RlZmluZSBERFJDX01TVFJfREVW X0NPTkZJR19NQVNLIDB4QzAwMDAwMDAKKyNkZWZpbmUgRERSQ19NU1RSX0RFVl9DT05GSUdfU0hJ RlQJMzAKKyNkZWZpbmUgRERSQ19NU1RSX0RFVl9DT05GSUdfWDRfTUFTSwkweDAKKyNkZWZpbmUg RERSQ19NU1RSX0RFVl9DT05GSUdfWDhfTUFTSwkweDEKKyNkZWZpbmUgRERSQ19NU1RSX0RFVl9D T05GSUdfWDE2X01BU0sJMHgyCisjZGVmaW5lIEREUkNfTVNUUl9ERVZfQ09ORklHX1gzMl9NQVNL CTB4MworCisjZGVmaW5lIEREUl9NQVhfUk9XX1NISUZUCTE4CisjZGVmaW5lIEREUl9NQVhfQ09M X1NISUZUCTE0CisjZGVmaW5lIEREUl9NQVhfQkFOS19TSElGVAkzCisjZGVmaW5lIEREUl9NQVhf QkFOS0dSUF9TSElGVAkyCisKKyNkZWZpbmUgUk9XX01BWF9WQUxfTUFTSwkweEYKKyNkZWZpbmUg Q09MX01BWF9WQUxfTUFTSwkweEYKKyNkZWZpbmUgQkFOS19NQVhfVkFMX01BU0sJMHgxRgorI2Rl ZmluZSBCQU5LR1JQX01BWF9WQUxfTUFTSwkweDFGCisjZGVmaW5lIFJBTktfTUFYX1ZBTF9NQVNL CTB4MUYKKworI2RlZmluZSBST1dfQjBfQkFTRQkJNgorI2RlZmluZSBST1dfQjFfQkFTRQkJNwor I2RlZmluZSBST1dfQjJfQkFTRQkJOAorI2RlZmluZSBST1dfQjNfQkFTRQkJOQorI2RlZmluZSBS T1dfQjRfQkFTRQkJMTAKKyNkZWZpbmUgUk9XX0I1X0JBU0UJCTExCisjZGVmaW5lIFJPV19CNl9C QVNFCQkxMgorI2RlZmluZSBST1dfQjdfQkFTRQkJMTMKKyNkZWZpbmUgUk9XX0I4X0JBU0UJCTE0 CisjZGVmaW5lIFJPV19COV9CQVNFCQkxNQorI2RlZmluZSBST1dfQjEwX0JBU0UJCTE2CisjZGVm aW5lIFJPV19CMTFfQkFTRQkJMTcKKyNkZWZpbmUgUk9XX0IxMl9CQVNFCQkxOAorI2RlZmluZSBS T1dfQjEzX0JBU0UJCTE5CisjZGVmaW5lIFJPV19CMTRfQkFTRQkJMjAKKyNkZWZpbmUgUk9XX0Ix NV9CQVNFCQkyMQorI2RlZmluZSBST1dfQjE2X0JBU0UJCTIyCisjZGVmaW5lIFJPV19CMTdfQkFT RQkJMjMKKworI2RlZmluZSBDT0xfQjJfQkFTRQkJMgorI2RlZmluZSBDT0xfQjNfQkFTRQkJMwor I2RlZmluZSBDT0xfQjRfQkFTRQkJNAorI2RlZmluZSBDT0xfQjVfQkFTRQkJNQorI2RlZmluZSBD T0xfQjZfQkFTRQkJNgorI2RlZmluZSBDT0xfQjdfQkFTRQkJNworI2RlZmluZSBDT0xfQjhfQkFT RQkJOAorI2RlZmluZSBDT0xfQjlfQkFTRQkJOQorI2RlZmluZSBDT0xfQjEwX0JBU0UJCTEwCisj ZGVmaW5lIENPTF9CMTFfQkFTRQkJMTEKKyNkZWZpbmUgQ09MX0IxMl9CQVNFCQkxMgorI2RlZmlu ZSBDT0xfQjEzX0JBU0UJCTEzCisKKyNkZWZpbmUgQkFOS19CMF9CQVNFCQkyCisjZGVmaW5lIEJB TktfQjFfQkFTRQkJMworI2RlZmluZSBCQU5LX0IyX0JBU0UJCTQKKworI2RlZmluZSBCQU5LR1JQ X0IwX0JBU0UJCTIKKyNkZWZpbmUgQkFOS0dSUF9CMV9CQVNFCQkzCisKKyNkZWZpbmUgUkFOS19C MF9CQVNFCQk2CisKIC8qKgogICogc3RydWN0IGVjY19lcnJvcl9pbmZvIC0gRUNDIGVycm9yIGxv ZyBpbmZvcm1hdGlvbgogICogQHJvdzoJUm93IG51bWJlcgpAQCAtMTAzLDYgKzI2OCw4IEBACiAg KiBAYmFuazoJQmFuayBudW1iZXIKICAqIEBiaXRwb3M6CUJpdCBwb3NpdGlvbgogICogQGRhdGE6 CURhdGEgY2F1c2luZyB0aGUgZXJyb3IKKyAqIEBiYW5rZ3JwbnI6CUJhbmsgZ3JvdXAgbnVtYmVy CisgKiBAYmxrbnI6CUJsb2NrIG51bWJlcgogICovCiBzdHJ1Y3QgZWNjX2Vycm9yX2luZm8gewog CXUzMiByb3c7CkBAIC0xMTAsNiArMjc3LDggQEAgc3RydWN0IGVjY19lcnJvcl9pbmZvIHsKIAl1 MzIgYmFuazsKIAl1MzIgYml0cG9zOwogCXUzMiBkYXRhOworCXUzMiBiYW5rZ3JwbnI7CisJdTMy IGJsa25yOwogfTsKIAogLyoqCkBAIC0xMjgsMTIgKzI5NywxOCBAQCBzdHJ1Y3Qgc3lucHNfZWNj X3N0YXR1cyB7CiAKIC8qKgogICogc3RydWN0IHN5bnBzX2VkYWNfcHJpdiAtIEREUiBtZW1vcnkg Y29udHJvbGxlciBwcml2YXRlIGluc3RhbmNlIGRhdGEKLSAqIEBiYXNlYWRkcjoJQmFzZSBhZGRy ZXNzIG9mIHRoZSBERFIgY29udHJvbGxlcgotICogQG1lc3NhZ2U6CUJ1ZmZlciBmb3IgZnJhbWlu ZyB0aGUgZXZlbnQgc3BlY2lmaWMgaW5mbwotICogQHN0YXQ6CUVDQyBzdGF0dXMgaW5mb3JtYXRp b24KLSAqIEBwX2RhdGE6CVBvaW50ZXIgdG8gcGxhdGZvcm0gZGF0YQotICogQGNlX2NudDoJQ29y cmVjdGFibGUgRXJyb3IgY291bnQKLSAqIEB1ZV9jbnQ6CVVuY29ycmVjdGFibGUgRXJyb3IgY291 bnQKKyAqIEBiYXNlYWRkcjoJCUJhc2UgYWRkcmVzcyBvZiB0aGUgRERSIGNvbnRyb2xsZXIKKyAq IEBtZXNzYWdlOgkJQnVmZmVyIGZvciBmcmFtaW5nIHRoZSBldmVudCBzcGVjaWZpYyBpbmZvCisg KiBAc3RhdDoJCUVDQyBzdGF0dXMgaW5mb3JtYXRpb24KKyAqIEBwX2RhdGE6CQlQb2ludGVyIHRv IHBsYXRmb3JtIGRhdGEKKyAqIEBjZV9jbnQ6CQlDb3JyZWN0YWJsZSBFcnJvciBjb3VudAorICog QHVlX2NudDoJCVVuY29ycmVjdGFibGUgRXJyb3IgY291bnQKKyAqIEBwb2lzb25fYWRkcjoJRGF0 YSBwb2lzb24gYWRkcmVzcworICogQHJvd19zaGlmdDoJCVZhbHVlIG9mIHJvdyBzaGlmdHMKKyAq IEBjb2xfc2hpZnQ6CQlWYWx1ZSBvZiBjb2wgc2hpZnRzCisgKiBAYmFua19zaGlmdDoJCVZhbHVl IG9mIGJhbmsgc2hpZnRzCisgKiBAYmFua2dycF9zaGlmdDoJVmFsdWUgb2YgYmFuayBncm91cCBz aGlmdHMKKyAqIEByYW5rX3NoaWZ0OgkJVmFsdWUgb2YgcmFuayBzaGlmdHMKICAqLwogc3RydWN0 IHN5bnBzX2VkYWNfcHJpdiB7CiAJdm9pZCBfX2lvbWVtICpiYXNlYWRkcjsKQEAgLTE0Miw2ICsz MTcsMTIgQEAgc3RydWN0IHN5bnBzX2VkYWNfcHJpdiB7CiAJY29uc3Qgc3RydWN0IHN5bnBzX3Bs YXRmb3JtX2RhdGEgKnBfZGF0YTsKIAl1MzIgY2VfY250OwogCXUzMiB1ZV9jbnQ7CisJdWxvbmcg cG9pc29uX2FkZHI7CisJdTMyIHJvd19zaGlmdFsxOF07CisJdTMyIGNvbF9zaGlmdFsxNF07CisJ dTMyIGJhbmtfc2hpZnRbM107CisJdTMyIGJhbmtncnBfc2hpZnRbMl07CisJdTMyIHJhbmtfc2hp ZnRbMV07CiB9OwogCiAvKioKQEAgLTE2Niw3ICszNDcsNyBAQCBzdHJ1Y3Qgc3lucHNfcGxhdGZv cm1fZGF0YSB7CiAgKgogICogRGV0ZXJtaW5lcyB0aGVyZSBpcyBhbnkgZWNjIGVycm9yIG9yIG5v dAogICoKLSAqIFJldHVybjogb25lIGlmIHRoZXJlIGlzIG5vIGVycm9yIG90aGVyd2lzZSByZXR1 cm5zIHplcm8KKyAqIFJldHVybjogMSBpZiB0aGVyZSBpcyBubyBlcnJvciBvdGhlcndpc2UgcmV0 dXJucyAwCiAgKi8KIHN0YXRpYyBpbnQgc3lucHNfZWRhY19nZXRlcnJvcl9pbmZvKHN0cnVjdCBz eW5wc19lZGFjX3ByaXYgKnByaXYpCiB7CkBAIC0yMjEsNiArNDAyLDcyIEBAIHN0YXRpYyBpbnQg c3lucHNfZWRhY19nZXRlcnJvcl9pbmZvKHN0cnVjdCBzeW5wc19lZGFjX3ByaXYgKnByaXYpCiB9 CiAKIC8qKgorICogc3lucHNfZW5oX2VkYWNfZ2V0ZXJyb3JfaW5mbyAtIEdldCB0aGUgY3VycmVu dCBlY2MgZXJyb3IgaW5mbworICogQGJhc2U6CVBvaW50ZXIgdG8gdGhlIGJhc2UgYWRkcmVzcyBv ZiB0aGUgZGRyIG1lbW9yeSBjb250cm9sbGVyCisgKiBAcDoJCVBvaW50ZXIgdG8gdGhlIHN5bm9w c3lzIGVjYyBzdGF0dXMgc3RydWN0dXJlCisgKgorICogRGV0ZXJtaW5lcyB0aGVyZSBpcyBhbnkg ZWNjIGVycm9yIG9yIG5vdAorICoKKyAqIFJldHVybjogb25lIGlmIHRoZXJlIGlzIG5vIGVycm9y IG90aGVyd2lzZSByZXR1cm5zIHplcm8KKyAqLworc3RhdGljIGludCBzeW5wc19lbmhfZWRhY19n ZXRlcnJvcl9pbmZvKHN0cnVjdCBzeW5wc19lZGFjX3ByaXYgKnByaXYpCit7CisJdm9pZCBfX2lv bWVtICpiYXNlOworCXN0cnVjdCBzeW5wc19lY2Nfc3RhdHVzICpwOworCXUzMiByZWd2YWwsIGNs ZWFydmFsID0gMDsKKworCWlmICghcHJpdikKKwkJcmV0dXJuIDE7CisKKwliYXNlID0gcHJpdi0+ YmFzZWFkZHI7CisJcCA9ICZwcml2LT5zdGF0OworCisJcmVndmFsID0gcmVhZGwoYmFzZSArIEVD Q19TVEFUX09GU1QpOworCWlmICghcmVndmFsKQorCQlyZXR1cm4gMTsKKworCXAtPmNlX2NudCA9 IChyZWd2YWwgJiBFQ0NfU1RBVF9DRUNOVF9NQVNLKSA+PiBFQ0NfU1RBVF9DRUNOVF9TSElGVDsK KwlwLT51ZV9jbnQgPSAocmVndmFsICYgRUNDX1NUQVRfVUVDTlRfTUFTSykgPj4gRUNDX1NUQVRf VUVDTlRfU0hJRlQ7CisJcC0+Y2VpbmZvLmJpdHBvcyA9IChyZWd2YWwgJiBFQ0NfU1RBVF9CSVRO VU1fTUFTSyk7CisKKwlyZWd2YWwgPSByZWFkbChiYXNlICsgRUNDX0NFQUREUjBfT0ZTVCk7CisJ aWYgKCEocC0+Y2VfY250KSkKKwkJZ290byB1ZV9lcnI7CisKKwlwLT5jZWluZm8ucm93ID0gKHJl Z3ZhbCAmIEVDQ19DRUFERFIwX1JXX01BU0spOworCXJlZ3ZhbCA9IHJlYWRsKGJhc2UgKyBFQ0Nf Q0VBRERSMV9PRlNUKTsKKwlwLT5jZWluZm8uYmFuayA9IChyZWd2YWwgJiBFQ0NfQ0VBRERSMV9C TktOUl9NQVNLKSA+PgorCQkJCQlFQ0NfQ0VBRERSMV9CTktOUl9TSElGVDsKKwlwLT5jZWluZm8u YmFua2dycG5yID0gKHJlZ3ZhbCAmCUVDQ19DRUFERFIxX0JOS0dSUF9NQVNLKSA+PgorCQkJCQlF Q0NfQ0VBRERSMV9CTktHUlBfU0hJRlQ7CisJcC0+Y2VpbmZvLmJsa25yID0gKHJlZ3ZhbCAmIEVD Q19DRUFERFIxX0JMS05SX01BU0spOworCXAtPmNlaW5mby5kYXRhID0gcmVhZGwoYmFzZSArIEVD Q19DU1lORDBfT0ZTVCk7CisJZWRhY19kYmcoMywgImNlIGJpdCBwb3NpdGlvbjogJWQgZGF0YTog JWRcbiIsIHAtPmNlaW5mby5iaXRwb3MsCisJCSBwLT5jZWluZm8uZGF0YSk7CisKK3VlX2VycjoK KwlyZWd2YWwgPSByZWFkbChiYXNlICsgRUNDX1VFQUREUjBfT0ZTVCk7CisJaWYgKCEocC0+dWVf Y250KSkKKwkJZ290byBvdXQ7CisKKwlwLT51ZWluZm8ucm93ID0gKHJlZ3ZhbCAmIEVDQ19DRUFE RFIwX1JXX01BU0spOworCXJlZ3ZhbCA9IHJlYWRsKGJhc2UgKyBFQ0NfVUVBRERSMV9PRlNUKTsK KwlwLT51ZWluZm8uYmFua2dycG5yID0gKHJlZ3ZhbCAmIEVDQ19DRUFERFIxX0JOS0dSUF9NQVNL KSA+PgorCQkJCQlFQ0NfQ0VBRERSMV9CTktHUlBfU0hJRlQ7CisJcC0+dWVpbmZvLmJhbmsgPSAo cmVndmFsICYgRUNDX0NFQUREUjFfQk5LTlJfTUFTSykgPj4KKwkJCQkJRUNDX0NFQUREUjFfQk5L TlJfU0hJRlQ7CisJcC0+dWVpbmZvLmJsa25yID0gKHJlZ3ZhbCAmIEVDQ19DRUFERFIxX0JMS05S X01BU0spOworCXAtPnVlaW5mby5kYXRhID0gcmVhZGwoYmFzZSArIEVDQ19VRVNZTkQwX09GU1Qp Oworb3V0OgorCWNsZWFydmFsID0gRUNDX0NUUkxfQ0xSX0NFX0VSUiB8IEVDQ19DVFJMX0NMUl9D RV9FUlJDTlQ7CisJY2xlYXJ2YWwgfD0gRUNDX0NUUkxfQ0xSX1VFX0VSUiB8IEVDQ19DVFJMX0NM Ul9VRV9FUlJDTlQ7CisJd3JpdGVsKGNsZWFydmFsLCBiYXNlICsgRUNDX0NMUl9PRlNUKTsKKwl3 cml0ZWwoMHgwLCBiYXNlICsgRUNDX0NMUl9PRlNUKTsKKworCXJldHVybiAwOworfQorCisvKioK ICAqIHN5bnBzX2VkYWNfaGFuZGxlX2Vycm9yIC0gSGFuZGxlIGNvbnRyb2xsZXIgZXJyb3IgdHlw ZXMgQ0UgYW5kIFVFCiAgKiBAbWNpOglQb2ludGVyIHRvIHRoZSBlZGFjIG1lbW9yeSBjb250cm9s bGVyIGluc3RhbmNlCiAgKiBAcDoJCVBvaW50ZXIgdG8gdGhlIHN5bm9wc3lzIGVjYyBzdGF0dXMg c3RydWN0dXJlCkBAIC0yMzUsOSArNDgyLDE3IEBAIHN0YXRpYyB2b2lkIHN5bnBzX2VkYWNfaGFu ZGxlX2Vycm9yKHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSwKIAogCWlmIChwLT5jZV9jbnQpIHsK IAkJcGluZiA9ICZwLT5jZWluZm87Ci0JCXNucHJpbnRmKHByaXYtPm1lc3NhZ2UsIFNZTlBTX0VE QUNfTVNHX1NJWkUsCi0JCQkgIkREUiBFQ0MgZXJyb3IgdHlwZSA6JXMgUm93ICVkIEJhbmsgJWQg Q29sICVkICIsCi0JCQkgIkNFIiwgcGluZi0+cm93LCBwaW5mLT5iYW5rLCBwaW5mLT5jb2wpOwor CQlpZiAocHJpdi0+cF9kYXRhLT5xdWlya3MgPT0gMCkKKwkJCXNucHJpbnRmKHByaXYtPm1lc3Nh Z2UsIFNZTlBTX0VEQUNfTVNHX1NJWkUsCisJCQkJICJERFIgRUNDIGVycm9yIHR5cGUgOiVzIFJv dyAlZCBCYW5rICVkIENvbCAlZCAiLAorCQkJCSAiQ0UiLCBwaW5mLT5yb3csIHBpbmYtPmJhbmss IHBpbmYtPmNvbCk7CisJCWVsc2UKKwkJCXNucHJpbnRmKHByaXYtPm1lc3NhZ2UsIFNZTlBTX0VE QUNfTVNHX1NJWkUsCisJCQkJICJERFIgRUNDIGVycm9yIHR5cGUgOiVzIFJvdyAlZCBCYW5rICVk IENvbCAlZCAiCisJCQkJICJCYW5rR3JvdXAgTnVtYmVyICVkIEJsb2NrIE51bWJlciAlZCIsCisJ CQkJICJDRSIsIHBpbmYtPnJvdywgcGluZi0+YmFuaywgcGluZi0+Y29sLAorCQkJCSBwaW5mLT5i YW5rZ3JwbnIsIHBpbmYtPmJsa25yKTsKKwogCQllZGFjX21jX2hhbmRsZV9lcnJvcihIV19FVkVO VF9FUlJfQ09SUkVDVEVELCBtY2ksCiAJCQkJICAgICBwLT5jZV9jbnQsIDAsIDAsIDAsIDAsIDAs IC0xLAogCQkJCSAgICAgcHJpdi0+bWVzc2FnZSwgIiIpOwpAQCAtMjQ1LDkgKzUwMCwxNyBAQCBz dGF0aWMgdm9pZCBzeW5wc19lZGFjX2hhbmRsZV9lcnJvcihzdHJ1Y3QgbWVtX2N0bF9pbmZvICpt Y2ksCiAKIAlpZiAocC0+dWVfY250KSB7CiAJCXBpbmYgPSAmcC0+dWVpbmZvOwotCQlzbnByaW50 Zihwcml2LT5tZXNzYWdlLCBTWU5QU19FREFDX01TR19TSVpFLAotCQkJICJERFIgRUNDIGVycm9y IHR5cGUgOiVzIFJvdyAlZCBCYW5rICVkIENvbCAlZCAiLAotCQkJICJVRSIsIHBpbmYtPnJvdywg cGluZi0+YmFuaywgcGluZi0+Y29sKTsKKwkJaWYgKHByaXYtPnBfZGF0YS0+cXVpcmtzID09IDAp CisJCQlzbnByaW50Zihwcml2LT5tZXNzYWdlLCBTWU5QU19FREFDX01TR19TSVpFLAorCQkJCSAi RERSIEVDQyBlcnJvciB0eXBlIDolcyBSb3cgJWQgQmFuayAlZCBDb2wgJWQgIiwKKwkJCQkiVUUi LCBwaW5mLT5yb3csIHBpbmYtPmJhbmssIHBpbmYtPmNvbCk7CisJCWVsc2UKKwkJCXNucHJpbnRm KHByaXYtPm1lc3NhZ2UsIFNZTlBTX0VEQUNfTVNHX1NJWkUsCisJCQkJICJERFIgRUNDIGVycm9y IHR5cGUgOiVzIFJvdyAlZCBCYW5rICVkIENvbCAlZCAiCisJCQkJICJCYW5rR3JvdXAgTnVtYmVy ICVkIEJsb2NrIE51bWJlciAlZCIsCisJCQkJICJVRSIsIHBpbmYtPnJvdywgcGluZi0+YmFuaywg cGluZi0+Y29sLAorCQkJCSBwaW5mLT5iYW5rZ3JwbnIsIHBpbmYtPmJsa25yKTsKKwogCQllZGFj X21jX2hhbmRsZV9lcnJvcihIV19FVkVOVF9FUlJfVU5DT1JSRUNURUQsIG1jaSwKIAkJCQkgICAg IHAtPnVlX2NudCwgMCwgMCwgMCwgMCwgMCwgLTEsCiAJCQkJICAgICBwcml2LT5tZXNzYWdlLCAi Iik7CkBAIC0yNTcsNiArNTIwLDQxIEBAIHN0YXRpYyB2b2lkIHN5bnBzX2VkYWNfaGFuZGxlX2Vy cm9yKHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSwKIH0KIAogLyoqCisgKiBzeW5wc19lZGFjX2lu dHJfaGFuZGxlciAtIHN5bnBzIGVkYWMgaXNyCisgKiBAaXJxOiAgICAgICAgaXJxIG51bWJlcgor ICogQGRldl9pZDogICAgIGRldmljZSBpZCBwb25pdGVyCisgKgorICogVGhpcyBpcyB0aGUgSXNy IHJvdXRpbmUgY2FsbGVkIGJ5IGVkYWMgY29yZSBpbnRlcnJ1cHQgdGhyZWFkLgorICogVXNlZCB0 byBjaGVjayBhbmQgcG9zdCBFQ0MgZXJyb3JzLgorICoKKyAqIFJldHVybjogSVJRX05PTkUsIGlm IGludGVycnVwdCBub3Qgc2V0IG9yIElSUV9IQU5ETEVEIG90aGVyd2lzZQorICovCitzdGF0aWMg aXJxcmV0dXJuX3Qgc3lucHNfZWRhY19pbnRyX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lk KQoreworCXN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSA9IGRldl9pZDsKKwlzdHJ1Y3Qgc3lucHNf ZWRhY19wcml2ICpwcml2ID0gbWNpLT5wdnRfaW5mbzsKKwljb25zdCBzdHJ1Y3Qgc3lucHNfcGxh dGZvcm1fZGF0YSAqcF9kYXRhID0gcHJpdi0+cF9kYXRhOworCWludCBzdGF0dXMsIHJlZ3ZhbDsK KworCXJlZ3ZhbCA9IHJlYWRsKHByaXYtPmJhc2VhZGRyICsgRERSX1FPU19JUlFfU1RBVF9PRlNU KSAmCisJCQkoRERSX1FPU0NFX01BU0sgfCBERFJfUU9TVUVfTUFTSyk7CisJaWYgKCEocmVndmFs ICYgRUNDX0NFX1VFX0lOVFJfTUFTSykpCisJCXJldHVybiBJUlFfTk9ORTsKKwlzdGF0dXMgPSBw X2RhdGEtPmVkYWNfZ2V0ZXJyb3JfaW5mbyhwcml2KTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4g SVJRX05PTkU7CisKKwlwcml2LT5jZV9jbnQgKz0gcHJpdi0+c3RhdC5jZV9jbnQ7CisJcHJpdi0+ dWVfY250ICs9IHByaXYtPnN0YXQudWVfY250OworCXN5bnBzX2VkYWNfaGFuZGxlX2Vycm9yKG1j aSwgJnByaXYtPnN0YXQpOworCisJZWRhY19kYmcoMywgIlRvdGFsIGVycm9yIGNvdW50IGNlICVk IHVlICVkXG4iLAorCQkgcHJpdi0+Y2VfY250LCBwcml2LT51ZV9jbnQpOworCXdyaXRlbChyZWd2 YWwsIHByaXYtPmJhc2VhZGRyICsgRERSX1FPU19JUlFfU1RBVF9PRlNUKTsKKwlyZXR1cm4gSVJR X0hBTkRMRUQ7Cit9CisKKy8qKgogICogc3lucHNfZWRhY19jaGVjayAtIENoZWNrIGNvbnRyb2xs ZXIgZm9yIEVDQyBlcnJvcnMKICAqIEBtY2k6CVBvaW50ZXIgdG8gdGhlIGVkYWMgbWVtb3J5IGNv bnRyb2xsZXIgaW5zdGFuY2UKICAqCkBAIC0zMTIsNiArNjEwLDQwIEBAIHN0YXRpYyBlbnVtIGRl dl90eXBlIHN5bnBzX2VkYWNfZ2V0X2R0eXBlKGNvbnN0IHZvaWQgX19pb21lbSAqYmFzZSkKIH0K IAogLyoqCisgKiBzeW5wc19lbmhfZWRhY19nZXRfZHR5cGUgLSBSZXR1cm4gdGhlIGNvbnRyb2xs ZXIgbWVtb3J5IHdpZHRoCisgKiBAYmFzZToJUG9pbnRlciB0byB0aGUgZGRyIG1lbW9yeSBjb250 cm9sbGVyIGJhc2UgYWRkcmVzcworICoKKyAqIEdldCB0aGUgRURBQyBkZXZpY2UgdHlwZSB3aWR0 aCBhcHByb3ByaWF0ZSBmb3IgdGhlIGN1cnJlbnQgY29udHJvbGxlcgorICogY29uZmlndXJhdGlv bi4KKyAqCisgKiBSZXR1cm46IGEgZGV2aWNlIHR5cGUgd2lkdGggZW51bWVyYXRpb24uCisgKi8K K3N0YXRpYyBlbnVtIGRldl90eXBlIHN5bnBzX2VuaF9lZGFjX2dldF9kdHlwZShjb25zdCB2b2lk IF9faW9tZW0gKmJhc2UpCit7CisJZW51bSBkZXZfdHlwZSBkdDsKKwl1MzIgd2lkdGg7CisKKwl3 aWR0aCA9IHJlYWRsKGJhc2UgKyBDVFJMX09GU1QpOworCXdpZHRoID0gKHdpZHRoICYgRUNDX0NU UkxfQlVTV0lEVEhfTUFTSykgPj4KKwkJRUNDX0NUUkxfQlVTV0lEVEhfU0hJRlQ7CisJc3dpdGNo ICh3aWR0aCkgeworCWNhc2UgRERSQ1RMX0VXRFRIXzE2OgorCQlkdCA9IERFVl9YMjsKKwkJYnJl YWs7CisJY2FzZSBERFJDVExfRVdEVEhfMzI6CisJCWR0ID0gREVWX1g0OworCQlicmVhazsKKwlj YXNlIEREUkNUTF9FV0RUSF82NDoKKwkJZHQgPSBERVZfWDg7CisJCWJyZWFrOworCWRlZmF1bHQ6 CisJCWR0ID0gREVWX1VOS05PV047CisJfQorCisJcmV0dXJuIGR0OworfQorCisvKioKICAqIHN5 bnBzX2VkYWNfZ2V0X2VjY3N0YXRlIC0gUmV0dXJuIHRoZSBjb250cm9sbGVyIGVjYyBlbmFibGUv ZGlzYWJsZSBzdGF0dXMKICAqIEBiYXNlOglQb2ludGVyIHRvIHRoZSBkZHIgbWVtb3J5IGNvbnRy b2xsZXIgYmFzZSBhZGRyZXNzCiAgKgpAQCAtMzM3LDYgKzY2OSwzMiBAQCBzdGF0aWMgYm9vbCBz eW5wc19lZGFjX2dldF9lY2NzdGF0ZSh2b2lkIF9faW9tZW0gKmJhc2UpCiB9CiAKIC8qKgorICog c3lucHNfZW5oX2VkYWNfZ2V0X2VjY3N0YXRlIC0gUmV0dXJuIHRoZSBjb250cm9sbGVyIGVjYyBl bmFibGUvZGlzYWJsZSBzdGF0dXMKKyAqIEBiYXNlOglQb2ludGVyIHRvIHRoZSBkZHIgbWVtb3J5 IGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzCisgKgorICogR2V0IHRoZSBFQ0MgZW5hYmxlL2Rpc2Fi bGUgc3RhdHVzIGZvciB0aGUgY29udHJvbGxlcgorICoKKyAqIFJldHVybjogYSBlY2Mgc3RhdHVz IGJvb2xlYW4gaS5lIHRydWUvZmFsc2UgLSBlbmFibGVkL2Rpc2FibGVkLgorICovCitzdGF0aWMg Ym9vbCBzeW5wc19lbmhfZWRhY19nZXRfZWNjc3RhdGUodm9pZCBfX2lvbWVtICpiYXNlKQorewor CWVudW0gZGV2X3R5cGUgZHQ7CisJdTMyIGVjY3R5cGU7CisJYm9vbCBzdGF0ZSA9IGZhbHNlOwor CisJZHQgPSBzeW5wc19lbmhfZWRhY19nZXRfZHR5cGUoYmFzZSk7CisJaWYgKGR0ID09IERFVl9V TktOT1dOKQorCQlyZXR1cm4gc3RhdGU7CisKKwllY2N0eXBlID0gcmVhZGwoYmFzZSArIEVDQ19D RkcwX09GU1QpICYgU0NSVUJfTU9ERV9NQVNLOworCWlmICgoZWNjdHlwZSA9PSBTQ1JVQl9NT0RF X1NFQ0RFRCkgJiYKKwkgICAgKChkdCA9PSBERVZfWDIpIHx8IChkdCA9PSBERVZfWDQpIHx8IChk dCA9PSBERVZfWDgpKSkKKwkJc3RhdGUgPSB0cnVlOworCisJcmV0dXJuIHN0YXRlOworfQorCisv KioKICAqIHN5bnBzX2VkYWNfZ2V0X21lbXNpemUgLSByZWFkcyB0aGUgc2l6ZSBvZiB0aGUgYXR0 YWNoZWQgbWVtb3J5IGRldmljZQogICoKICAqIFJldHVybjogdGhlIG1lbW9yeSBzaXplIGluIGJ5 dGVzCkBAIC0zNzUsNiArNzMzLDM1IEBAIHN0YXRpYyBlbnVtIG1lbV90eXBlIHN5bnBzX2VkYWNf Z2V0X210eXBlKGNvbnN0IHZvaWQgX19pb21lbSAqYmFzZSkKIH0KIAogLyoqCisgKiBzeW5wc19l bmhfZWRhY19nZXRfbXR5cGUgLSBSZXR1cm5zIGNvbnRyb2xsZXIgbWVtb3J5IHR5cGUKKyAqIEBi YXNlOglwb2ludGVyIHRvIHRoZSBzeW5vcHN5cyBlY2Mgc3RhdHVzIHN0cnVjdHVyZQorICoKKyAq IEdldCB0aGUgRURBQyBtZW1vcnkgdHlwZSBhcHByb3ByaWF0ZSBmb3IgdGhlIGN1cnJlbnQgY29u dHJvbGxlcgorICogY29uZmlndXJhdGlvbi4KKyAqCisgKiBSZXR1cm46IGEgbWVtb3J5IHR5cGUg ZW51bWVyYXRpb24uCisgKi8KK3N0YXRpYyBlbnVtIG1lbV90eXBlIHN5bnBzX2VuaF9lZGFjX2dl dF9tdHlwZShjb25zdCB2b2lkIF9faW9tZW0gKmJhc2UpCit7CisJZW51bSBtZW1fdHlwZSBtdDsK Kwl1MzIgbWVtdHlwZTsKKworCW1lbXR5cGUgPSByZWFkbChiYXNlICsgQ1RSTF9PRlNUKTsKKwor CW10ID0gTUVNX1VOS05PV047CisJaWYgKChtZW10eXBlICYgTUVNX1RZUEVfRERSMykgfHwgKG1l bXR5cGUgJiBNRU1fVFlQRV9MUEREUjMpKQorCQltdCA9IE1FTV9ERFIzOworCWVsc2UgaWYgKG1l bXR5cGUgJiBNRU1fVFlQRV9ERFIyKQorCQltdCA9IE1FTV9SRERSMjsKKwllbHNlIGlmICgobWVt dHlwZSAmIE1FTV9UWVBFX0xQRERSNCkgfHwgKG1lbXR5cGUgJiBNRU1fVFlQRV9ERFI0KSkKKwkJ bXQgPSBNRU1fRERSNDsKKwllbHNlCisJCW10ID0gTUVNX0VNUFRZOworCisJcmV0dXJuIG10Owor fQorCisvKioKICAqIHN5bnBzX2VkYWNfaW5pdF9jc3Jvd3MgLSBJbml0aWFsaXplIHRoZSBjcyBy b3cgZGF0YQogICogQG1jaToJUG9pbnRlciB0byB0aGUgZWRhYyBtZW1vcnkgY29udHJvbGxlciBp bnN0YW5jZQogICoKQEAgLTQ0Miw4ICs4MjksMTMgQEAgc3RhdGljIGludCBzeW5wc19lZGFjX21j X2luaXQoc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLAogCW1jaS0+ZGV2X25hbWUgPSBTWU5QU19F REFDX01PRF9TVFJJTkc7CiAJbWNpLT5tb2RfbmFtZSA9IFNZTlBTX0VEQUNfTU9EX1ZFUjsKIAot CWVkYWNfb3Bfc3RhdGUgPSBFREFDX09QU1RBVEVfUE9MTDsKLQltY2ktPmVkYWNfY2hlY2sgPSBz eW5wc19lZGFjX2NoZWNrOworCWlmIChwcml2LT5wX2RhdGEtPnF1aXJrcyAmIEREUl9FQ0NfSU5U Ul9TVVBQT1JUKSB7CisJCWVkYWNfb3Bfc3RhdGUgPSBFREFDX09QU1RBVEVfSU5UOworCX0gZWxz ZSB7CisJCWVkYWNfb3Bfc3RhdGUgPSBFREFDX09QU1RBVEVfUE9MTDsKKwkJbWNpLT5lZGFjX2No ZWNrID0gc3lucHNfZWRhY19jaGVjazsKKwl9CisKIAltY2ktPmN0bF9wYWdlX3RvX3BoeXMgPSBO VUxMOwogCiAJc3RhdHVzID0gc3lucHNfZWRhY19pbml0X2Nzcm93cyhtY2kpOwpAQCAtNDU5LDEz ICs4NTEsNDA5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lucHNfcGxhdGZvcm1fZGF0YSB6eW5x X2VkYWNfZGVmID0gewogCS5xdWlya3MJCQk9IDAsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0 IHN5bnBzX3BsYXRmb3JtX2RhdGEgenlucW1wX2VuaF9lZGFjX2RlZiA9IHsKKwkuZWRhY19nZXRl cnJvcl9pbmZvCT0gc3lucHNfZW5oX2VkYWNfZ2V0ZXJyb3JfaW5mbywKKwkuZWRhY19nZXRfbXR5 cGUJCT0gc3lucHNfZW5oX2VkYWNfZ2V0X210eXBlLAorCS5lZGFjX2dldF9kdHlwZQkJPSBzeW5w c19lbmhfZWRhY19nZXRfZHR5cGUsCisJLmVkYWNfZ2V0X2VjY3N0YXRlCT0gc3lucHNfZW5oX2Vk YWNfZ2V0X2VjY3N0YXRlLAorCS5xdWlya3MJCQk9IChERFJfRUNDX0lOVFJfU1VQUE9SVCB8CisJ CQkJICAgRERSX0VDQ19EQVRBX1BPSVNPTl9TVVBQT1JUKSwKK307CisKIHN0YXRpYyBjb25zdCBz dHJ1Y3Qgb2ZfZGV2aWNlX2lkIHN5bnBzX2VkYWNfbWF0Y2hbXSA9IHsKIAl7IC5jb21wYXRpYmxl ID0gInhsbngsenlucS1kZHJjLWEwNSIsIC5kYXRhID0gKHZvaWQgKikmenlucV9lZGFjX2RlZiB9 LAorCXsgLmNvbXBhdGlibGUgPSAieGxueCx6eW5xbXAtZGRyYy0yLjQwYSIsCisJCQkJLmRhdGEg PSAodm9pZCAqKSZ6eW5xbXBfZW5oX2VkYWNfZGVmfSwKIAl7IC8qIGVuZCBvZiB0YWJsZSAqLyB9 CiB9OwogCiBNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBzeW5wc19lZGFjX21hdGNoKTsKIAorI2Rl ZmluZSB0b19tY2koaykgY29udGFpbmVyX29mKGssIHN0cnVjdCBtZW1fY3RsX2luZm8sIGRldikK KworLyoqCisgKiBkZHJfcG9pc29uX3NldHVwIC0JdXBkYXRlIHBvaXNvbiByZWdpc3RlcnMKKyAq IEBwcml2OgkJUG9pbnRlciB0byBzeW5wc19lZGFjX3ByaXYgc3RydWN0CisgKgorICogVXBkYXRl IHBvaXNvbiByZWdpc3RlcnMgYXMgcGVyIGRkciBtYXBwaW5nCisgKiBSZXR1cm46IG5vbmUuCisg Ki8KK3N0YXRpYyB2b2lkIGRkcl9wb2lzb25fc2V0dXAoc3RydWN0IHN5bnBzX2VkYWNfcHJpdiAq cHJpdikKK3sKKwlpbnQgY29sID0gMCwgcm93ID0gMCwgYmFuayA9IDAsIGJhbmtncnAgPSAwLCBy YW5rID0gMCwgcmVndmFsOworCWludCBpbmRleDsKKwl1bG9uZyBoaWZfYWRkciA9IDA7CisKKwlo aWZfYWRkciA9IHByaXYtPnBvaXNvbl9hZGRyID4+IDM7CisKKwlmb3IgKGluZGV4ID0gMDsgaW5k ZXggPCBERFJfTUFYX1JPV19TSElGVDsgaW5kZXgrKykgeworCQlpZiAocHJpdi0+cm93X3NoaWZ0 W2luZGV4XSkKKwkJCXJvdyB8PSAoKChoaWZfYWRkciA+PiBwcml2LT5yb3dfc2hpZnRbaW5kZXhd KSAmCisJCQkJCQlCSVQoMCkpIDw8IGluZGV4KTsKKwkJZWxzZQorCQkJYnJlYWs7CisJfQorCisJ Zm9yIChpbmRleCA9IDA7IGluZGV4IDwgRERSX01BWF9DT0xfU0hJRlQ7IGluZGV4KyspIHsKKwkJ aWYgKHByaXYtPmNvbF9zaGlmdFtpbmRleF0gfHwgaW5kZXggPCAzKQorCQkJY29sIHw9ICgoKGhp Zl9hZGRyID4+IHByaXYtPmNvbF9zaGlmdFtpbmRleF0pICYKKwkJCQkJCUJJVCgwKSkgPDwgaW5k ZXgpOworCQllbHNlCisJCQlicmVhazsKKwl9CisKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBE RFJfTUFYX0JBTktfU0hJRlQ7IGluZGV4KyspIHsKKwkJaWYgKHByaXYtPmJhbmtfc2hpZnRbaW5k ZXhdKQorCQkJYmFuayB8PSAoKChoaWZfYWRkciA+PiBwcml2LT5iYW5rX3NoaWZ0W2luZGV4XSkg JgorCQkJCQkJQklUKDApKSA8PCBpbmRleCk7CisJCWVsc2UKKwkJCWJyZWFrOworCX0KKworCWZv ciAoaW5kZXggPSAwOyBpbmRleCA8IEREUl9NQVhfQkFOS0dSUF9TSElGVDsgaW5kZXgrKykgewor CQlpZiAocHJpdi0+YmFua2dycF9zaGlmdFtpbmRleF0pCisJCQliYW5rZ3JwIHw9ICgoKGhpZl9h ZGRyID4+IHByaXYtPmJhbmtncnBfc2hpZnRbaW5kZXhdKQorCQkJCQkJJiBCSVQoMCkpIDw8IGlu ZGV4KTsKKwkJZWxzZQorCQkJYnJlYWs7CisJfQorCisJaWYgKHByaXYtPnJhbmtfc2hpZnRbMF0p CisJCXJhbmsgPSAoaGlmX2FkZHIgPj4gcHJpdi0+cmFua19zaGlmdFswXSkgJiBCSVQoMCk7CisK KwlyZWd2YWwgPSAocmFuayA8PCBFQ0NfUE9JU09OMF9SQU5LX1NISUZUKSB8IGNvbDsKKwl3cml0 ZWwocmVndmFsLCBwcml2LT5iYXNlYWRkciArIEVDQ19QT0lTT04wX09GU1QpOworCXJlZ3ZhbCA9 IChiYW5rZ3JwIDw8IEVDQ19QT0lTT04xX0JBTktHUlBfU0hJRlQpIHwKKwkJCSAoYmFuayA8PCBF Q0NfUE9JU09OMV9CQU5LTlJfU0hJRlQpIHwgcm93OworCXdyaXRlbChyZWd2YWwsIHByaXYtPmJh c2VhZGRyICsgRUNDX1BPSVNPTjFfT0ZTVCk7Cit9CisKKy8qKgorICogaW5qZWN0X2RhdGFfZXJy b3Jfc2hvdyAtIEdldCBQb2lzb24wICYgMSByZWdpc3RlciBjb250ZW50cworICogQGRldjoJUG9p bnRlciB0byB0aGUgZGV2aWNlIHN0cnVjdAorICogQG1hdHRyOglQb2ludGVyIHRvIGRldmljZSBh dHRyaWJ1dGVzCisgKiBAZGF0YToJUG9pbnRlciB0byB1c2VyIGRhdGEKKyAqCisgKiBHZXQgdGhl IFBvaXNvbjAgYW5kIFBvaXNvbjEgcmVnaXN0ZXIgY29udGVudHMKKyAqIFJldHVybjogTnVtYmVy IG9mIGJ5dGVzIGNvcGllZC4KKyAqLworc3RhdGljIHNzaXplX3QgaW5qZWN0X2RhdGFfZXJyb3Jf c2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmli dXRlICptYXR0ciwKKwkJCQkJICAgICAgY2hhciAqZGF0YSkKK3sKKwlzdHJ1Y3QgbWVtX2N0bF9p bmZvICptY2kgPSB0b19tY2koZGV2KTsKKwlzdHJ1Y3Qgc3lucHNfZWRhY19wcml2ICpwcml2ID0g bWNpLT5wdnRfaW5mbzsKKworCXJldHVybiBzcHJpbnRmKGRhdGEsICJQb2lzb24wIEFkZHI6IDB4 JTA4eFxuXHJQb2lzb24xIEFkZHI6IDB4JTA4eFxuXHIiCisJCQkiRXJyb3IgaW5qZWN0aW9uIEFk ZHJlc3M6IDB4JWx4XG5cciIsCisJCQlyZWFkbChwcml2LT5iYXNlYWRkciArIEVDQ19QT0lTT04w X09GU1QpLAorCQkJcmVhZGwocHJpdi0+YmFzZWFkZHIgKyBFQ0NfUE9JU09OMV9PRlNUKSwKKwkJ CXByaXYtPnBvaXNvbl9hZGRyKTsKK30KKworLyoqCisgKiBpbmplY3RfZGF0YV9lcnJvcl9zdG9y ZSAtIENvbmZpZ3VyZSBQb2lzb24wIFBvaXNvbjEgcmVnaXN0ZXJzCisgKiBAZGV2OglQb2ludGVy IHRvIHRoZSBkZXZpY2Ugc3RydWN0CisgKiBAbWF0dHI6CVBvaW50ZXIgdG8gZGV2aWNlIGF0dHJp YnV0ZXMKKyAqIEBkYXRhOglQb2ludGVyIHRvIHVzZXIgZGF0YQorICogQGNvdW50OglyZWFkIHRo ZSBzaXplIGJ5dGVzIGZyb20gYnVmZmVyCisgKgorICogQ29uZmlndXJlcyB0aGUgUG9pc29uMCBh bmQgUG9pc29uMSByZWdpc3RlciBjb250ZW50cyBhcyBwZXIgdXNlciBnaXZlbgorICogYWRkcmVz cworICogUmV0dXJuOiBOdW1iZXIgb2YgYnl0ZXMgY29waWVkLgorICovCitzdGF0aWMgc3NpemVf dCBpbmplY3RfZGF0YV9lcnJvcl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSAgICAg ICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqbWF0dHIsCisJCQkJCSAgICAgICBjb25zdCBjaGFy ICpkYXRhLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpID0gdG9f bWNpKGRldik7CisJc3RydWN0IHN5bnBzX2VkYWNfcHJpdiAqcHJpdiA9IG1jaS0+cHZ0X2luZm87 CisKKwlpZiAoa3N0cnRvdWwoZGF0YSwgMCwgJnByaXYtPnBvaXNvbl9hZGRyKSkKKwkJcmV0dXJu IC1FSU5WQUw7CisKKwlkZHJfcG9pc29uX3NldHVwKHByaXYpOworCisJcmV0dXJuIGNvdW50Owor fQorCisvKioKKyAqIGluamVjdF9kYXRhX3BvaXNvbl9zaG93IC0gU2hvd3MgdHlwZSBvZiBEYXRh IHBvaXNvbgorICogQGRldjoJUG9pbnRlciB0byB0aGUgZGV2aWNlIHN0cnVjdAorICogQG1hdHRy OglQb2ludGVyIHRvIGRldmljZSBhdHRyaWJ1dGVzCisgKiBAZGF0YToJUG9pbnRlciB0byB1c2Vy IGRhdGEKKyAqCisgKiBTaG93cyB0aGUgdHlwZSBvZiBFcnJvciBpbmplY3Rpb24gZW5hYmxlZCwg ZWl0aGVyIFVFIG9yIENFCisgKiBSZXR1cm46IE51bWJlciBvZiBieXRlcyBjb3BpZWQuCisgKi8K K3N0YXRpYyBzc2l6ZV90IGluamVjdF9kYXRhX3BvaXNvbl9zaG93KHN0cnVjdCBkZXZpY2UgKmRl diwKKwkJCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKm1hdHRyLAorCQkJCQkgICAg ICBjaGFyICpkYXRhKQoreworCXN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSA9IHRvX21jaShkZXYp OworCXN0cnVjdCBzeW5wc19lZGFjX3ByaXYgKnByaXYgPSBtY2ktPnB2dF9pbmZvOworCisJcmV0 dXJuIHNwcmludGYoZGF0YSwgIkRhdGEgUG9pc29uaW5nOiAlc1xuXHIiLAorCQkJKCgocmVhZGwo cHJpdi0+YmFzZWFkZHIgKyBFQ0NfQ0ZHMV9PRlNUKSkgJiAweDMpID09IDB4MykKKwkJCT8gKCJD b3JyZWN0YWJsZSBFcnJvciIpIDogKCJVbkNvcnJlY3RhYmxlIEVycm9yIikpOworfQorCisvKioK KyAqIGluamVjdF9kYXRhX3BvaXNvbl9zdG9yZSAtIEVuYmxlcyBEYXRhIHBvaXNvbiBDRS9VRQor ICogQGRldjoJUG9pbnRlciB0byB0aGUgZGV2aWNlIHN0cnVjdAorICogQG1hdHRyOglQb2ludGVy IHRvIGRldmljZSBhdHRyaWJ1dGVzCisgKiBAZGF0YToJUG9pbnRlciB0byB1c2VyIGRhdGEKKyAq IEBjb3VudDoJcmVhZCB0aGUgc2l6ZSBieXRlcyBmcm9tIGJ1ZmZlcgorICoKKyAqIEVuYWJsZXMg dGhlIENFIG9yIFVFIERhdGEgcG9pc29uCisgKiBSZXR1cm46IE51bWJlciBvZiBieXRlcyBjb3Bp ZWQuCisgKi8KK3N0YXRpYyBzc2l6ZV90IGluamVjdF9kYXRhX3BvaXNvbl9zdG9yZShzdHJ1Y3Qg ZGV2aWNlICpkZXYsCisJCQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqbWF0dHIs CisJCQkJCSAgICAgICBjb25zdCBjaGFyICpkYXRhLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0 IG1lbV9jdGxfaW5mbyAqbWNpID0gdG9fbWNpKGRldik7CisJc3RydWN0IHN5bnBzX2VkYWNfcHJp diAqcHJpdiA9IG1jaS0+cHZ0X2luZm87CisKKwl3cml0ZWwoMCwgcHJpdi0+YmFzZWFkZHIgKyBE RFJDX1NXQ1RMKTsKKwlpZiAoc3RybmNtcChkYXRhLCAiQ0UiLCAyKSA9PSAwKQorCQl3cml0ZWwo RUNDX0NFUE9JU09OX01BU0ssIHByaXYtPmJhc2VhZGRyICsgRUNDX0NGRzFfT0ZTVCk7CisJZWxz ZQorCQl3cml0ZWwoRUNDX1VFUE9JU09OX01BU0ssIHByaXYtPmJhc2VhZGRyICsgRUNDX0NGRzFf T0ZTVCk7CisJd3JpdGVsKDEsIHByaXYtPmJhc2VhZGRyICsgRERSQ19TV0NUTCk7CisKKwlyZXR1 cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUl9SVyhpbmplY3RfZGF0YV9lcnJvcik7 CitzdGF0aWMgREVWSUNFX0FUVFJfUlcoaW5qZWN0X2RhdGFfcG9pc29uKTsKKworLyoqCisgKiBz eW5wc19lZGFjX2NyZWF0ZV9zeXNmc19hdHRyaWJ1dGVzIC0gQ3JlYXRlIHN5c2ZzIGVudHJpZXMK KyAqIEBtY2k6CVBvaW50ZXIgdG8gdGhlIGVkYWMgbWVtb3J5IGNvbnRyb2xsZXIgaW5zdGFuY2UK KyAqCisgKiBDcmVhdGUgc3lzZnMgYXR0cmlidXRlcyBmb3IgaW5qZWN0aW5nIEVDQyBlcnJvcnMg dXNpbmcgZGF0YSBwb2lzb24uCisgKgorICogUmV0dXJuOiAwIGlmIHN5c2ZzIGNyZWF0aW9uIHdh cyBzdWNjZXNzZnVsLCBlbHNlIHJldHVybiBuZWdhdGl2ZSBlcnJvciBjb2RlLgorICovCitzdGF0 aWMgaW50IHN5bnBzX2VkYWNfY3JlYXRlX3N5c2ZzX2F0dHJpYnV0ZXMoc3RydWN0IG1lbV9jdGxf aW5mbyAqbWNpKQoreworCWludCByYzsKKworCXJjID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZtY2kt PmRldiwgJmRldl9hdHRyX2luamVjdF9kYXRhX2Vycm9yKTsKKwlpZiAocmMgPCAwKQorCQlyZXR1 cm4gcmM7CisJcmMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm1jaS0+ZGV2LCAmZGV2X2F0dHJfaW5q ZWN0X2RhdGFfcG9pc29uKTsKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7CisJcmV0dXJuIDA7 Cit9CisKKy8qKgorICogc3lucHNfZWRhY19yZW1vdmVfc3lzZnNfYXR0cmlidXRlcyAtIFJlbW92 ZXMgc3lzZnMgZW50cmllcworICogQG1jaToJUG9pbnRlciB0byB0aGUgZWRhYyBtZW1vcnkgY29u dHJvbGxlciBpbnN0YW5jZQorICoKKyAqIFJlbW92ZXMgc3lzZnMgYXR0cmlidXRlcy4KKyAqCisg KiBSZXR1cm46IG5vbmUuCisgKi8KK3N0YXRpYyB2b2lkIHN5bnBzX2VkYWNfcmVtb3ZlX3N5c2Zz X2F0dHJpYnV0ZXMoc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpKQoreworCWRldmljZV9yZW1vdmVf ZmlsZSgmbWNpLT5kZXYsICZkZXZfYXR0cl9pbmplY3RfZGF0YV9lcnJvcik7CisJZGV2aWNlX3Jl bW92ZV9maWxlKCZtY2ktPmRldiwgJmRldl9hdHRyX2luamVjdF9kYXRhX3BvaXNvbik7Cit9CisK Ky8qKgorICogc2V0dXBfYWRkcmVzc19tYXAgLQlTZXQgQWRkcmVzcyBNYXAgYnkgcXVlcnlpbmcg QUREUk1BUCByZWdpc3RlcnMKKyAqIEBwcml2OgkJUG9pbnRlciB0byBzeW5wc19lZGFjX3ByaXYg c3RydWN0CisgKgorICogU2V0IEFkZHJlc3MgTWFwIGJ5IHF1ZXJ5aW5nIEFERFJNQVAgcmVnaXN0 ZXJzCisgKiBSZXR1cm46IG5vbmUuCisgKi8KK3N0YXRpYyB2b2lkIHNldHVwX2FkZHJlc3NfbWFw KHN0cnVjdCBzeW5wc19lZGFjX3ByaXYgKnByaXYpCit7CisJdTMyIGFkZHJtYXBbMTJdLCBhZGRy bWFwX3Jvd19iMl8xMDsKKwlpbnQgaW5kZXg7CisJdTMyIHdpZHRoLCBtZW10eXBlOworCisJbWVt dHlwZSA9IHJlYWRsKHByaXYtPmJhc2VhZGRyICsgQ1RSTF9PRlNUKTsKKwl3aWR0aCA9IChtZW10 eXBlICYgRUNDX0NUUkxfQlVTV0lEVEhfTUFTSykgPj4gRUNDX0NUUkxfQlVTV0lEVEhfU0hJRlQ7 CisKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCAxMjsgaW5kZXgrKykgeworCQl1MzIgYWRkcm1h cF9vZmZzZXQ7CisKKwkJYWRkcm1hcF9vZmZzZXQgPSBFQ0NfQUREUk1BUDBfT0ZGU0VUICsgKGlu ZGV4ICogNCk7CisJCWFkZHJtYXBbaW5kZXhdID0gcmVhZGwocHJpdi0+YmFzZWFkZHIgKyBhZGRy bWFwX29mZnNldCk7CisJfQorCisJcHJpdi0+cm93X3NoaWZ0WzBdID0gKGFkZHJtYXBbNV0gJiBS T1dfTUFYX1ZBTF9NQVNLKSArIFJPV19CMF9CQVNFOworCXByaXYtPnJvd19zaGlmdFsxXSA9ICgo YWRkcm1hcFs1XSA+PiA4KSAmCisJCQlST1dfTUFYX1ZBTF9NQVNLKSArIFJPV19CMV9CQVNFOwor CisJYWRkcm1hcF9yb3dfYjJfMTAgPSAoYWRkcm1hcFs1XSA+PiAxNikgJiBST1dfTUFYX1ZBTF9N QVNLOworCWlmIChhZGRybWFwX3Jvd19iMl8xMCAhPSBST1dfTUFYX1ZBTF9NQVNLKSB7CisJCWZv ciAoaW5kZXggPSAyOyBpbmRleCA8IDExOyBpbmRleCsrKQorCQkJcHJpdi0+cm93X3NoaWZ0W2lu ZGV4XSA9IGFkZHJtYXBfcm93X2IyXzEwICsKKwkJCQlpbmRleCArIFJPV19CMF9CQVNFOworCisJ fSBlbHNlIHsKKwkJcHJpdi0+cm93X3NoaWZ0WzJdID0gKGFkZHJtYXBbOV0gJgorCQkJCVJPV19N QVhfVkFMX01BU0spICsgUk9XX0IyX0JBU0U7CisJCXByaXYtPnJvd19zaGlmdFszXSA9ICgoYWRk cm1hcFs5XSA+PiA4KSAmCisJCQkJUk9XX01BWF9WQUxfTUFTSykgKyBST1dfQjNfQkFTRTsKKwkJ cHJpdi0+cm93X3NoaWZ0WzRdID0gKChhZGRybWFwWzldID4+IDE2KSAmCisJCQkJUk9XX01BWF9W QUxfTUFTSykgKyBST1dfQjRfQkFTRTsKKwkJcHJpdi0+cm93X3NoaWZ0WzVdID0gKChhZGRybWFw WzldID4+IDI0KSAmCisJCQkJUk9XX01BWF9WQUxfTUFTSykgKyBST1dfQjVfQkFTRTsKKwkJcHJp di0+cm93X3NoaWZ0WzZdID0gKGFkZHJtYXBbMTBdICYKKwkJCQlST1dfTUFYX1ZBTF9NQVNLKSAr IFJPV19CNl9CQVNFOworCQlwcml2LT5yb3dfc2hpZnRbN10gPSAoKGFkZHJtYXBbMTBdID4+IDgp ICYKKwkJCQlST1dfTUFYX1ZBTF9NQVNLKSArIFJPV19CN19CQVNFOworCQlwcml2LT5yb3dfc2hp ZnRbOF0gPSAoKGFkZHJtYXBbMTBdID4+IDE2KSAmCisJCQkJUk9XX01BWF9WQUxfTUFTSykgKyBS T1dfQjhfQkFTRTsKKwkJcHJpdi0+cm93X3NoaWZ0WzldID0gKChhZGRybWFwWzEwXSA+PiAyNCkg JgorCQkJCVJPV19NQVhfVkFMX01BU0spICsgUk9XX0I5X0JBU0U7CisJCXByaXYtPnJvd19zaGlm dFsxMF0gPSAoYWRkcm1hcFsxMV0gJgorCQkJCVJPV19NQVhfVkFMX01BU0spICsgUk9XX0IxMF9C QVNFOworCX0KKworCXByaXYtPnJvd19zaGlmdFsxMV0gPSAoKChhZGRybWFwWzVdID4+IDI0KSAm IFJPV19NQVhfVkFMX01BU0spID09CisJCQkJUk9XX01BWF9WQUxfTUFTSykgPyAwIDogKCgoYWRk cm1hcFs1XSA+PiAyNCkgJgorCQkJCVJPV19NQVhfVkFMX01BU0spICsgUk9XX0IxMV9CQVNFKTsK Kwlwcml2LT5yb3dfc2hpZnRbMTJdID0gKChhZGRybWFwWzZdICYgUk9XX01BWF9WQUxfTUFTSykg PT0KKwkJCQlST1dfTUFYX1ZBTF9NQVNLKSA/IDAgOiAoKGFkZHJtYXBbNl0gJgorCQkJCVJPV19N QVhfVkFMX01BU0spICsgUk9XX0IxMl9CQVNFKTsKKwlwcml2LT5yb3dfc2hpZnRbMTNdID0gKCgo YWRkcm1hcFs2XSA+PiA4KSAmIFJPV19NQVhfVkFMX01BU0spID09CisJCQkJUk9XX01BWF9WQUxf TUFTSykgPyAwIDogKCgoYWRkcm1hcFs2XSA+PiA4KSAmCisJCQkJUk9XX01BWF9WQUxfTUFTSykg KyBST1dfQjEzX0JBU0UpOworCXByaXYtPnJvd19zaGlmdFsxNF0gPSAoKChhZGRybWFwWzZdID4+ IDE2KSAmIFJPV19NQVhfVkFMX01BU0spID09CisJCQkJUk9XX01BWF9WQUxfTUFTSykgPyAwIDog KCgoYWRkcm1hcFs2XSA+PiAxNikgJgorCQkJCVJPV19NQVhfVkFMX01BU0spICsgUk9XX0IxNF9C QVNFKTsKKwlwcml2LT5yb3dfc2hpZnRbMTVdID0gKCgoYWRkcm1hcFs2XSA+PiAyNCkgJiBST1df TUFYX1ZBTF9NQVNLKSA9PQorCQkJCVJPV19NQVhfVkFMX01BU0spID8gMCA6ICgoKGFkZHJtYXBb Nl0gPj4gMjQpICYKKwkJCQlST1dfTUFYX1ZBTF9NQVNLKSArIFJPV19CMTVfQkFTRSk7CisJcHJp di0+cm93X3NoaWZ0WzE2XSA9ICgoYWRkcm1hcFs3XSAmIFJPV19NQVhfVkFMX01BU0spID09CisJ CQkJUk9XX01BWF9WQUxfTUFTSykgPyAwIDogKChhZGRybWFwWzddICYKKwkJCQlST1dfTUFYX1ZB TF9NQVNLKSArIFJPV19CMTZfQkFTRSk7CisJcHJpdi0+cm93X3NoaWZ0WzE3XSA9ICgoKGFkZHJt YXBbN10gPj4gOCkgJiBST1dfTUFYX1ZBTF9NQVNLKSA9PQorCQkJCVJPV19NQVhfVkFMX01BU0sp ID8gMCA6ICgoKGFkZHJtYXBbN10gPj4gOCkgJgorCQkJCVJPV19NQVhfVkFMX01BU0spICsgUk9X X0IxN19CQVNFKTsKKworCXByaXYtPmNvbF9zaGlmdFswXSA9IDA7CisJcHJpdi0+Y29sX3NoaWZ0 WzFdID0gMTsKKwlwcml2LT5jb2xfc2hpZnRbMl0gPSAoYWRkcm1hcFsyXSAmIENPTF9NQVhfVkFM X01BU0spICsgQ09MX0IyX0JBU0U7CisJcHJpdi0+Y29sX3NoaWZ0WzNdID0gKChhZGRybWFwWzJd ID4+IDgpICYKKwkJCUNPTF9NQVhfVkFMX01BU0spICsgQ09MX0IzX0JBU0U7CisJcHJpdi0+Y29s X3NoaWZ0WzRdID0gKCgoYWRkcm1hcFsyXSA+PiAxNikgJiBDT0xfTUFYX1ZBTF9NQVNLKSA9PQor CQkJQ09MX01BWF9WQUxfTUFTSykgPyAwIDogKCgoYWRkcm1hcFsyXSA+PiAxNikgJgorCQkJCQlD T0xfTUFYX1ZBTF9NQVNLKSArIENPTF9CNF9CQVNFKTsKKwlwcml2LT5jb2xfc2hpZnRbNV0gPSAo KChhZGRybWFwWzJdID4+IDI0KSAmIENPTF9NQVhfVkFMX01BU0spID09CisJCQlDT0xfTUFYX1ZB TF9NQVNLKSA/IDAgOiAoKChhZGRybWFwWzJdID4+IDI0KSAmCisJCQkJCUNPTF9NQVhfVkFMX01B U0spICsgQ09MX0I1X0JBU0UpOworCXByaXYtPmNvbF9zaGlmdFs2XSA9ICgoYWRkcm1hcFszXSAm IENPTF9NQVhfVkFMX01BU0spID09CisJCQlDT0xfTUFYX1ZBTF9NQVNLKSA/IDAgOiAoKGFkZHJt YXBbM10gJgorCQkJCQlDT0xfTUFYX1ZBTF9NQVNLKSArIENPTF9CNl9CQVNFKTsKKwlwcml2LT5j b2xfc2hpZnRbN10gPSAoKChhZGRybWFwWzNdID4+IDgpICYgQ09MX01BWF9WQUxfTUFTSykgPT0K KwkJCUNPTF9NQVhfVkFMX01BU0spID8gMCA6ICgoKGFkZHJtYXBbM10gPj4gOCkgJgorCQkJCQlD T0xfTUFYX1ZBTF9NQVNLKSArIENPTF9CN19CQVNFKTsKKwlwcml2LT5jb2xfc2hpZnRbOF0gPSAo KChhZGRybWFwWzNdID4+IDE2KSAmIENPTF9NQVhfVkFMX01BU0spID09CisJCQlDT0xfTUFYX1ZB TF9NQVNLKSA/IDAgOiAoKChhZGRybWFwWzNdID4+IDE2KSAmCisJCQkJCUNPTF9NQVhfVkFMX01B U0spICsgQ09MX0I4X0JBU0UpOworCXByaXYtPmNvbF9zaGlmdFs5XSA9ICgoKGFkZHJtYXBbM10g Pj4gMjQpICYgQ09MX01BWF9WQUxfTUFTSykgPT0KKwkJCUNPTF9NQVhfVkFMX01BU0spID8gMCA6 ICgoKGFkZHJtYXBbM10gPj4gMjQpICYKKwkJCQkJQ09MX01BWF9WQUxfTUFTSykgKyBDT0xfQjlf QkFTRSk7CisJaWYgKHdpZHRoID09IEREUkNUTF9FV0RUSF82NCkgeworCQlpZiAobWVtdHlwZSAm IE1FTV9UWVBFX0xQRERSMykgeworCQkJcHJpdi0+Y29sX3NoaWZ0WzEwXSA9ICgoYWRkcm1hcFs0 XSAmCisJCQkJQ09MX01BWF9WQUxfTUFTSykgPT0gQ09MX01BWF9WQUxfTUFTSykgPyAwIDoKKwkJ CQkoKGFkZHJtYXBbNF0gJiBDT0xfTUFYX1ZBTF9NQVNLKSArCisJCQkJIENPTF9CMTBfQkFTRSk7 CisJCQlwcml2LT5jb2xfc2hpZnRbMTFdID0gKCgoYWRkcm1hcFs0XSA+PiA4KSAmCisJCQkJQ09M X01BWF9WQUxfTUFTSykgPT0gQ09MX01BWF9WQUxfTUFTSykgPyAwIDoKKwkJCQkoKChhZGRybWFw WzRdID4+IDgpICYgQ09MX01BWF9WQUxfTUFTSykgKworCQkJCSBDT0xfQjExX0JBU0UpOworCQl9 IGVsc2UgeworCQkJcHJpdi0+Y29sX3NoaWZ0WzExXSA9ICgoYWRkcm1hcFs0XSAmCisJCQkJQ09M X01BWF9WQUxfTUFTSykgPT0gQ09MX01BWF9WQUxfTUFTSykgPyAwIDoKKwkJCQkoKGFkZHJtYXBb NF0gJiBDT0xfTUFYX1ZBTF9NQVNLKSArCisJCQkJIENPTF9CMTBfQkFTRSk7CisJCQlwcml2LT5j b2xfc2hpZnRbMTNdID0gKCgoYWRkcm1hcFs0XSA+PiA4KSAmCisJCQkJQ09MX01BWF9WQUxfTUFT SykgPT0gQ09MX01BWF9WQUxfTUFTSykgPyAwIDoKKwkJCQkoKChhZGRybWFwWzRdID4+IDgpICYg Q09MX01BWF9WQUxfTUFTSykgKworCQkJCSBDT0xfQjExX0JBU0UpOworCQl9CisJfSBlbHNlIGlm ICh3aWR0aCA9PSBERFJDVExfRVdEVEhfMzIpIHsKKwkJaWYgKG1lbXR5cGUgJiBNRU1fVFlQRV9M UEREUjMpIHsKKwkJCXByaXYtPmNvbF9zaGlmdFsxMF0gPSAoKChhZGRybWFwWzNdID4+IDI0KSAm CisJCQkJQ09MX01BWF9WQUxfTUFTSykgPT0gQ09MX01BWF9WQUxfTUFTSykgPyAwIDoKKwkJCQko KChhZGRybWFwWzNdID4+IDI0KSAmIENPTF9NQVhfVkFMX01BU0spICsKKwkJCQkgQ09MX0I5X0JB U0UpOworCQkJcHJpdi0+Y29sX3NoaWZ0WzExXSA9ICgoYWRkcm1hcFs0XSAmCisJCQkJQ09MX01B WF9WQUxfTUFTSykgPT0gQ09MX01BWF9WQUxfTUFTSykgPyAwIDoKKwkJCQkoKGFkZHJtYXBbNF0g JiBDT0xfTUFYX1ZBTF9NQVNLKSArCisJCQkJIENPTF9CMTBfQkFTRSk7CisJCX0gZWxzZSB7CisJ CQlwcml2LT5jb2xfc2hpZnRbMTFdID0gKCgoYWRkcm1hcFszXSA+PiAyNCkgJgorCQkJCUNPTF9N QVhfVkFMX01BU0spID09IENPTF9NQVhfVkFMX01BU0spID8gMCA6CisJCQkJKCgoYWRkcm1hcFsz XSA+PiAyNCkgJiBDT0xfTUFYX1ZBTF9NQVNLKSArCisJCQkJIENPTF9COV9CQVNFKTsKKwkJCXBy aXYtPmNvbF9zaGlmdFsxM10gPSAoKGFkZHJtYXBbNF0gJgorCQkJCUNPTF9NQVhfVkFMX01BU0sp ID09IENPTF9NQVhfVkFMX01BU0spID8gMCA6CisJCQkJKChhZGRybWFwWzRdICYgQ09MX01BWF9W QUxfTUFTSykgKworCQkJCSBDT0xfQjEwX0JBU0UpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKG1l bXR5cGUgJiBNRU1fVFlQRV9MUEREUjMpIHsKKwkJCXByaXYtPmNvbF9zaGlmdFsxMF0gPSAoKChh ZGRybWFwWzNdID4+IDE2KSAmCisJCQkJQ09MX01BWF9WQUxfTUFTSykgPT0gQ09MX01BWF9WQUxf TUFTSykgPyAwIDoKKwkJCQkoKChhZGRybWFwWzNdID4+IDE2KSAmIENPTF9NQVhfVkFMX01BU0sp ICsKKwkJCQkgQ09MX0I4X0JBU0UpOworCQkJcHJpdi0+Y29sX3NoaWZ0WzExXSA9ICgoKGFkZHJt YXBbM10gPj4gMjQpICYKKwkJCQlDT0xfTUFYX1ZBTF9NQVNLKSA9PSBDT0xfTUFYX1ZBTF9NQVNL KSA/IDAgOgorCQkJCSgoKGFkZHJtYXBbM10gPj4gMjQpICYgQ09MX01BWF9WQUxfTUFTSykgKwor CQkJCSBDT0xfQjlfQkFTRSk7CisJCQlwcml2LT5jb2xfc2hpZnRbMTNdID0gKChhZGRybWFwWzRd ICYKKwkJCQlDT0xfTUFYX1ZBTF9NQVNLKSA9PSBDT0xfTUFYX1ZBTF9NQVNLKSA/IDAgOgorCQkJ CSgoYWRkcm1hcFs0XSAmIENPTF9NQVhfVkFMX01BU0spICsKKwkJCQkgQ09MX0IxMF9CQVNFKTsK KwkJfSBlbHNlIHsKKwkJCXByaXYtPmNvbF9zaGlmdFsxMV0gPSAoKChhZGRybWFwWzNdID4+IDE2 KSAmCisJCQkJQ09MX01BWF9WQUxfTUFTSykgPT0gQ09MX01BWF9WQUxfTUFTSykgPyAwIDoKKwkJ CQkoKChhZGRybWFwWzNdID4+IDE2KSAmIENPTF9NQVhfVkFMX01BU0spICsKKwkJCQkgQ09MX0I4 X0JBU0UpOworCQkJcHJpdi0+Y29sX3NoaWZ0WzEzXSA9ICgoKGFkZHJtYXBbM10gPj4gMjQpICYK KwkJCQlDT0xfTUFYX1ZBTF9NQVNLKSA9PSBDT0xfTUFYX1ZBTF9NQVNLKSA/IDAgOgorCQkJCSgo KGFkZHJtYXBbM10gPj4gMjQpICYgQ09MX01BWF9WQUxfTUFTSykgKworCQkJCSBDT0xfQjlfQkFT RSk7CisJCX0KKwl9CisKKwlpZiAod2lkdGgpIHsKKwkJZm9yIChpbmRleCA9IDk7IGluZGV4ID4g d2lkdGg7IGluZGV4LS0pIHsKKwkJCXByaXYtPmNvbF9zaGlmdFtpbmRleF0gPSBwcml2LT5jb2xf c2hpZnRbaW5kZXggLSB3aWR0aF07CisJCQlwcml2LT5jb2xfc2hpZnRbaW5kZXggLSB3aWR0aF0g PSAwOworCQl9CisJfQorCisJcHJpdi0+YmFua19zaGlmdFswXSA9IChhZGRybWFwWzFdICYgQkFO S19NQVhfVkFMX01BU0spICsgQkFOS19CMF9CQVNFOworCXByaXYtPmJhbmtfc2hpZnRbMV0gPSAo KGFkZHJtYXBbMV0gPj4gOCkgJgorCQkJCUJBTktfTUFYX1ZBTF9NQVNLKSArIEJBTktfQjFfQkFT RTsKKwlwcml2LT5iYW5rX3NoaWZ0WzJdID0gKCgoYWRkcm1hcFsxXSA+PiAxNikgJgorCQkJCUJB TktfTUFYX1ZBTF9NQVNLKSA9PSBCQU5LX01BWF9WQUxfTUFTSykgPyAwIDoKKwkJCQkoKChhZGRy bWFwWzFdID4+IDE2KSAmIEJBTktfTUFYX1ZBTF9NQVNLKSArCisJCQkJIEJBTktfQjJfQkFTRSk7 CisKKwlwcml2LT5iYW5rZ3JwX3NoaWZ0WzBdID0gKGFkZHJtYXBbOF0gJgorCQkJCUJBTktHUlBf TUFYX1ZBTF9NQVNLKSArIEJBTktHUlBfQjBfQkFTRTsKKwlwcml2LT5iYW5rZ3JwX3NoaWZ0WzFd ID0gKCgoYWRkcm1hcFs4XSA+PiA4KSAmIEJBTktHUlBfTUFYX1ZBTF9NQVNLKSA9PQorCQkJCUJB TktHUlBfTUFYX1ZBTF9NQVNLKSA/IDAgOiAoKChhZGRybWFwWzhdID4+IDgpCisJCQkJJiBCQU5L R1JQX01BWF9WQUxfTUFTSykgKyBCQU5LR1JQX0IxX0JBU0UpOworCisJcHJpdi0+cmFua19zaGlm dFswXSA9ICgoYWRkcm1hcFswXSAmIFJBTktfTUFYX1ZBTF9NQVNLKSA9PQorCQkJCVJBTktfTUFY X1ZBTF9NQVNLKSA/IDAgOiAoKGFkZHJtYXBbMF0gJgorCQkJCVJBTktfTUFYX1ZBTF9NQVNLKSAr IFJBTktfQjBfQkFTRSk7Cit9CisKIC8qKgogICogc3lucHNfZWRhY19tY19wcm9iZSAtIENoZWNr IGNvbnRyb2xsZXIgYW5kIGJpbmQgZHJpdmVyCiAgKiBAcGRldjoJUG9pbnRlciB0byB0aGUgcGxh dGZvcm1fZGV2aWNlIHN0cnVjdApAQCAtNDgwLDcgKzEyNjgsNyBAQCBzdGF0aWMgaW50IHN5bnBz X2VkYWNfbWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAlzdHJ1Y3QgbWVt X2N0bF9pbmZvICptY2k7CiAJc3RydWN0IGVkYWNfbWNfbGF5ZXIgbGF5ZXJzWzJdOwogCXN0cnVj dCBzeW5wc19lZGFjX3ByaXYgKnByaXY7Ci0JaW50IHJjOworCWludCByYywgaXJxLCBzdGF0dXM7 CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJdm9pZCBfX2lvbWVtICpiYXNlYWRkcjsKIAljb25z dCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaDsKQEAgLTUyOSw2ICsxMzE3LDI3IEBAIHN0YXRp YyBpbnQgc3lucHNfZWRhY19tY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQog CQlnb3RvIGZyZWVfZWRhY19tYzsKIAl9CiAKKwlpZiAocHJpdi0+cF9kYXRhLT5xdWlya3MgJiBE RFJfRUNDX0lOVFJfU1VQUE9SVCkgeworCQlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDAp OworCQlpZiAoaXJxIDwgMCkgeworCQkJZWRhY19wcmludGsoS0VSTl9FUlIsIEVEQUNfTUMsCisJ CQkJCSJObyBpcnEgJWQgaW4gRFRcbiIsIGlycSk7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQor CisJCXN0YXR1cyA9IGRldm1fcmVxdWVzdF9pcnEoJnBkZXYtPmRldiwgaXJxLAorCQkJc3lucHNf ZWRhY19pbnRyX2hhbmRsZXIsCisJCQkwLCBkZXZfbmFtZSgmcGRldi0+ZGV2KSwgbWNpKTsKKwkJ aWYgKHN0YXR1cyA8IDApIHsKKwkJCWVkYWNfcHJpbnRrKEtFUk5fRVJSLCBFREFDX01DLCAiRmFp bGVkIHRvIHJlcXVlc3QgSXJxXG4iKTsKKwkJCWdvdG8gZnJlZV9lZGFjX21jOworCQl9CisKKwkJ LyogRW5hYmxlIFVFL0NFIEludGVycnVwdHMgKi8KKwkJd3JpdGVsKChERFJfUU9TVUVfTUFTSyB8 IEREUl9RT1NDRV9NQVNLKSwKKwkJCXByaXYtPmJhc2VhZGRyICsgRERSX1FPU19JUlFfRU5fT0ZT VCk7CisJfQorCiAJcmMgPSBlZGFjX21jX2FkZF9tYyhtY2kpOwogCWlmIChyYykgewogCQllZGFj X3ByaW50ayhLRVJOX0VSUiwgRURBQ19NQywKQEAgLTUzNiwxMSArMTM0NSwyNCBAQCBzdGF0aWMg aW50IHN5bnBzX2VkYWNfbWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAkJ Z290byBmcmVlX2VkYWNfbWM7CiAJfQogCisJaWYgKHByaXYtPnBfZGF0YS0+cXVpcmtzICYgRERS X0VDQ19EQVRBX1BPSVNPTl9TVVBQT1JUKSB7CisJCWlmIChzeW5wc19lZGFjX2NyZWF0ZV9zeXNm c19hdHRyaWJ1dGVzKG1jaSkpIHsKKwkJCWVkYWNfcHJpbnRrKEtFUk5fRVJSLCBFREFDX01DLAor CQkJCQkiRmFpbGVkIHRvIGNyZWF0ZSBzeXNmcyBlbnRyaWVzXG4iKTsKKwkJCWdvdG8gZnJlZV9l ZGFjX21jOworCQl9CisJfQorCisJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBkZXYtPmRl di5vZl9ub2RlLAorCQkJCSAgICAieGxueCx6eW5xbXAtZGRyYy0yLjQwYSIpKQorCQlzZXR1cF9h ZGRyZXNzX21hcChwcml2KTsKKwogCS8qCiAJICogU3RhcnQgY2FwdHVyaW5nIHRoZSBjb3JyZWN0 YWJsZSBhbmQgdW5jb3JyZWN0YWJsZSBlcnJvcnMuIEEgd3JpdGUgb2YKIAkgKiAwIHN0YXJ0cyB0 aGUgY291bnRlcnMuCiAJICovCi0Jd3JpdGVsKDB4MCwgYmFzZWFkZHIgKyBFQ0NfQ1RSTF9PRlNU KTsKKwlpZiAoIShwcml2LT5wX2RhdGEtPnF1aXJrcyAmIEREUl9FQ0NfSU5UUl9TVVBQT1JUKSkK KwkJd3JpdGVsKDB4MCwgYmFzZWFkZHIgKyBFQ0NfQ1RSTF9PRlNUKTsKIAlyZXR1cm4gcmM7CiAK IGZyZWVfZWRhY19tYzoKQEAgLTU1OCw4ICsxMzgwLDE2IEBAIHN0YXRpYyBpbnQgc3lucHNfZWRh Y19tY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogc3RhdGljIGludCBzeW5w c19lZGFjX21jX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVj dCBtZW1fY3RsX2luZm8gKm1jaSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVj dCBzeW5wc19lZGFjX3ByaXYgKnByaXY7CiAKKwlwcml2ID0gbWNpLT5wdnRfaW5mbzsKKwlpZiAo cHJpdi0+cF9kYXRhLT5xdWlya3MgJiBERFJfRUNDX0lOVFJfU1VQUE9SVCkKKwkJLyogRGlzYWJs ZSBVRS9DRSBJbnRlcnJ1cHRzICovCisJCXdyaXRlbCgoRERSX1FPU1VFX01BU0sgfCBERFJfUU9T Q0VfTUFTSyksCisJCQlwcml2LT5iYXNlYWRkciArIEREUl9RT1NfSVJRX0RCX09GU1QpOwogCWVk YWNfbWNfZGVsX21jKCZwZGV2LT5kZXYpOworCWlmIChwcml2LT5wX2RhdGEtPnF1aXJrcyAmIERE Ul9FQ0NfREFUQV9QT0lTT05fU1VQUE9SVCkKKwkJc3lucHNfZWRhY19yZW1vdmVfc3lzZnNfYXR0 cmlidXRlcyhtY2kpOwogCWVkYWNfbWNfZnJlZShtY2kpOwogCiAJcmV0dXJuIDA7Cg==