From mboxrd@z Thu Jan 1 00:00:00 1970 From: Shawn Guo Subject: [PATCH v2 2/2] drm: zte: add initial vou drm driver Date: Sat, 24 Sep 2016 22:26:25 +0800 Message-ID: <1474727185-24180-3-git-send-email-shawn.guo@linaro.org> References: <1474727185-24180-1-git-send-email-shawn.guo@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1474727185-24180-1-git-send-email-shawn.guo@linaro.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Daniel Vetter , David Airlie Cc: Mark Rutland , devicetree@vger.kernel.org, Baoyou Xie , dri-devel@lists.freedesktop.org, Rob Herring , Jun Nie , linux-arm-kernel@lists.infradead.org List-Id: devicetree@vger.kernel.org SXQgYWRkcyB0aGUgaW5pdGlhbCBaVEUgVk9VIGRpc3BsYXkgY29udHJvbGxlciBEUk0gZHJpdmVy LiAgVGhlcmUgYXJlCnN0aWxsIHNvbWUgZmVhdHVyZXMgdG8gYmUgYWRkZWQsIGxpa2Ugb3Zlcmxh eSBwbGFuZSwgc2NhbGluZywgYW5kIG1vcmUKb3V0cHV0IGRldmljZXMgc3VwcG9ydC4gIEJ1dCBp dCdzIGFscmVhZHkgdXNlZnVsIHdpdGggZHVhbCBDUlRDcyBhbmQKSERNSSBtb25pdG9yIHdvcmtp bmcuCgpJdCdzIGJlZW4gdGVzdGVkIG9uIERlYmlhbiBKZXNzaWUgTFhERSBkZXNrdG9wIHdpdGgg bW9kZXNldHRpbmcgZHJpdmVyLgoKU2lnbmVkLW9mZi1ieTogU2hhd24gR3VvIDxzaGF3bi5ndW9A bGluYXJvLm9yZz4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyAgICAgICAgICB8ICAgMiAr CiBkcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9k cm0venRlL0tjb25maWcgICAgICB8ICAgOCArCiBkcml2ZXJzL2dwdS9kcm0venRlL01ha2VmaWxl ICAgICB8ICAgOCArCiBkcml2ZXJzL2dwdS9kcm0venRlL3p4X2NydGMuYyAgICB8IDY5MSArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS96dGUv enhfY3J0Yy5oICAgIHwgIDQ3ICsrKwogZHJpdmVycy9ncHUvZHJtL3p0ZS96eF9kcm1fZHJ2LmMg fCAyNTggKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0venRlL3p4X2RybV9kcnYuaCB8 ICAyMiArKwogZHJpdmVycy9ncHUvZHJtL3p0ZS96eF9oZG1pLmMgICAgfCA1NDAgKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0venRlL3p4X3BsYW5lLmMgICB8 IDM2MiArKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL3p0ZS96eF9wbGFuZS5o ICAgfCAgMjYgKysKIDExIGZpbGVzIGNoYW5nZWQsIDE5NjUgaW5zZXJ0aW9ucygrKQogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS96dGUvS2NvbmZpZwogY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS96dGUvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2dwdS9kcm0venRlL3p4X2NydGMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS96dGUvenhfY3J0Yy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3p0 ZS96eF9kcm1fZHJ2LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0venRlL3p4 X2RybV9kcnYuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS96dGUvenhfaGRt aS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3p0ZS96eF9wbGFuZS5jCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3p0ZS96eF9wbGFuZS5oCgpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwpp bmRleCA0ODMwNTlhMjJiMWIuLmE5MWY4Y2VjYmUwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKQEAgLTIyMyw2ICsyMjMs OCBAQCBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9oaXNpbGljb24vS2NvbmZpZyIKIAogc291cmNl ICJkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZpZyIKIAorc291cmNlICJkcml2ZXJzL2dw dS9kcm0venRlL0tjb25maWciCisKICMgS2VlcCBsZWdhY3kgZHJpdmVycyBsYXN0CiAKIG1lbnVj b25maWcgRFJNX0xFR0FDWQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlIGIv ZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCmluZGV4IDQzOWQ4OWIyNWFlMC4uZmU0NjFjOTRkMjY2 IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUv ZHJtL01ha2VmaWxlCkBAIC04NSwzICs4NSw0IEBAIG9iai0kKENPTkZJR19EUk1fRlNMX0RDVSkg Kz0gZnNsLWRjdS8KIG9iai0kKENPTkZJR19EUk1fRVROQVZJVikgKz0gZXRuYXZpdi8KIG9iai0k KENPTkZJR19EUk1fQVJDUEdVKSs9IGFyYy8KIG9iai15CQkJKz0gaGlzaWxpY29uLworb2JqLSQo Q09ORklHX0RSTV9aVEUpCSs9IHp0ZS8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS96dGUv S2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS96dGUvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMDAuLjQwNjViMjg0MGYxYwotLS0gL2Rldi9udWxsCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS96dGUvS2NvbmZpZwpAQCAtMCwwICsxLDggQEAKK2NvbmZpZyBEUk1fWlRF CisJdHJpc3RhdGUgIkRSTSBTdXBwb3J0IGZvciBaVEUgU29DcyIKKwlkZXBlbmRzIG9uIERSTSAm JiBBUkNIX1pYCisJc2VsZWN0IERSTV9LTVNfQ01BX0hFTFBFUgorCXNlbGVjdCBEUk1fS01TX0ZC X0hFTFBFUgorCXNlbGVjdCBEUk1fS01TX0hFTFBFUgorCWhlbHAKKwkgIENob29zZSB0aGlzIG9w dGlvbiB0byBlbmFibGUgRFJNIG9uIFpURSBaWCBTb0NzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL3p0ZS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS96dGUvTWFrZWZpbGUKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5iNDA5NjhkYzc0OWYKLS0tIC9kZXYv bnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0venRlL01ha2VmaWxlCkBAIC0wLDAgKzEsOCBAQAor enhkcm0teSA6PSBcCisJenhfZHJtX2Rydi5vIFwKKwl6eF9jcnRjLm8gXAorCXp4X3BsYW5lLm8g XAorCXp4X2hkbWkubworCitvYmotJChDT05GSUdfRFJNX1pURSkgKz0genhkcm0ubworCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0venRlL3p4X2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS96 dGUvenhfY3J0Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uODE4 YmY5MDcyNTczCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3p0ZS96eF9jcnRj LmMKQEAgLTAsMCArMSw2OTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxNiBMaW5hcm8gTHRkLgor ICogQ29weXJpZ2h0IDIwMTYgWlRFIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cisg KiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZl cnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24u CisgKgorICovCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRv bWljX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgorI2luY2x1ZGUgPGRybS9k cm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2hlbHBlci5oPgorI2luY2x1 ZGUgPGRybS9kcm1fZmJfY21hX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZ2VtX2NtYV9o ZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX29mLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wbGFu ZV9oZWxwZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21w b25lbnQuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8dmlkZW8v dmlkZW9tb2RlLmg+CisKKyNpbmNsdWRlICJ6eF9kcm1fZHJ2LmgiCisjaW5jbHVkZSAienhfY3J0 Yy5oIgorI2luY2x1ZGUgInp4X3BsYW5lLmgiCisKKy8qIE9TRCAoR1BDX0dMT0JBTCkgcmVnaXN0 ZXJzICovCisjZGVmaW5lIE9TRF9JTlRfU1RBCQkJMHgwNAorI2RlZmluZSBPU0RfSU5UX0NMUlNU QQkJCTB4MDgKKyNkZWZpbmUgT1NEX0lOVF9NU0sJCQkweDBjCisjZGVmaW5lIE9TRF9JTlRfQVVY X1VQVAkJCUJJVCgxNCkKKyNkZWZpbmUgT1NEX0lOVF9NQUlOX1VQVAkJQklUKDEzKQorI2RlZmlu ZSBPU0RfSU5UX0dMMV9MQlcJCQlCSVQoMTApCisjZGVmaW5lIE9TRF9JTlRfR0wwX0xCVwkJCUJJ VCg5KQorI2RlZmluZSBPU0RfSU5UX1ZMMl9MQlcJCQlCSVQoOCkKKyNkZWZpbmUgT1NEX0lOVF9W TDFfTEJXCQkJQklUKDcpCisjZGVmaW5lIE9TRF9JTlRfVkwwX0xCVwkJCUJJVCg2KQorI2RlZmlu ZSBPU0RfSU5UX0JVU19FUlIJCQlCSVQoMykKKyNkZWZpbmUgT1NEX0lOVF9DRkdfRVJSCQkJQklU KDIpCisjZGVmaW5lIE9TRF9JTlRfRVJST1IgKFwKKwlPU0RfSU5UX0dMMV9MQlcgfCBPU0RfSU5U X0dMMF9MQlcgfCBcCisJT1NEX0lOVF9WTDJfTEJXIHwgT1NEX0lOVF9WTDFfTEJXIHwgT1NEX0lO VF9WTDBfTEJXIHwgXAorCU9TRF9JTlRfQlVTX0VSUiB8IE9TRF9JTlRfQ0ZHX0VSUiBcCispCisj ZGVmaW5lIE9TRF9JTlRfRU5BQkxFIChPU0RfSU5UX0VSUk9SIHwgT1NEX0lOVF9BVVhfVVBUIHwg T1NEX0lOVF9NQUlOX1VQVCkKKyNkZWZpbmUgT1NEX0NUUkwwCQkJMHgxMAorI2RlZmluZSBPU0Rf Q1RSTDBfR0wwX0VOCQlCSVQoNykKKyNkZWZpbmUgT1NEX0NUUkwwX0dMMF9TRUwJCUJJVCg2KQor I2RlZmluZSBPU0RfQ1RSTDBfR0wxX0VOCQlCSVQoNSkKKyNkZWZpbmUgT1NEX0NUUkwwX0dMMV9T RUwJCUJJVCg0KQorI2RlZmluZSBPU0RfUlNUX0NMUgkJCTB4MWMKKyNkZWZpbmUgUlNUX1BFUl9G UkFNRQkJCUJJVCgxOSkKKworLyogTWFpbi9BdXggY2hhbm5lbCByZWdpc3RlcnMgKi8KKyNkZWZp bmUgT1NEX01BSU5fQ0hOCQkJMHg0NzAKKyNkZWZpbmUgT1NEX0FVWF9DSE4JCQkweDRkMAorI2Rl ZmluZSBDSE5fQ1RSTDAJCQkweDAwCisjZGVmaW5lIENITl9FTkFCTEUJCQlCSVQoMCkKKyNkZWZp bmUgQ0hOX0NUUkwxCQkJMHgwNAorI2RlZmluZSBDSE5fU0NSRUVOX1dfU0hJRlQJCTE4CisjZGVm aW5lIENITl9TQ1JFRU5fV19NQVNLCQkoMHgxZmZmIDw8IENITl9TQ1JFRU5fV19TSElGVCkKKyNk ZWZpbmUgQ0hOX1NDUkVFTl9IX1NISUZUCQk1CisjZGVmaW5lIENITl9TQ1JFRU5fSF9NQVNLCQko MHgxZmZmIDw8IENITl9TQ1JFRU5fSF9TSElGVCkKKyNkZWZpbmUgQ0hOX1VQREFURQkJCTB4MDgK KworLyogVElNSU5HX0NUUkwgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRJTUlOR19UQ19FTkFCTEUJ CTB4MDQKKyNkZWZpbmUgQVVYX1RDX0VOCQkJQklUKDEpCisjZGVmaW5lIE1BSU5fVENfRU4JCQlC SVQoMCkKKyNkZWZpbmUgRklSX01BSU5fQUNUSVZFCQkJMHgwOAorI2RlZmluZSBGSVJfQVVYX0FD VElWRQkJCTB4MGMKKyNkZWZpbmUgRklSX01BSU5fSF9USU1JTkcJCTB4MTAKKyNkZWZpbmUgRklS X01BSU5fVl9USU1JTkcJCTB4MTQKKyNkZWZpbmUgRklSX0FVWF9IX1RJTUlORwkJMHgxOAorI2Rl ZmluZSBGSVJfQVVYX1ZfVElNSU5HCQkweDFjCisjZGVmaW5lIFNZTkNfV0lERV9TSElGVAkJCTIy CisjZGVmaW5lIFNZTkNfV0lERV9NQVNLCQkJKDB4M2ZmIDw8IFNZTkNfV0lERV9TSElGVCkKKyNk ZWZpbmUgQkFDS19QT1JDSF9TSElGVAkJMTEKKyNkZWZpbmUgQkFDS19QT1JDSF9NQVNLCQkJKDB4 N2ZmIDw8IEJBQ0tfUE9SQ0hfU0hJRlQpCisjZGVmaW5lIEZST05UX1BPUkNIX1NISUZUCQkwCisj ZGVmaW5lIEZST05UX1BPUkNIX01BU0sJCSgweDdmZiA8PCBGUk9OVF9QT1JDSF9TSElGVCkKKyNk ZWZpbmUgVElNSU5HX0NUUkwJCQkweDIwCisjZGVmaW5lIEFVWF9QT0xfU0hJRlQJCQkzCisjZGVm aW5lIEFVWF9QT0xfTUFTSwkJCSgweDcgPDwgQVVYX1BPTF9TSElGVCkKKyNkZWZpbmUgTUFJTl9Q T0xfU0hJRlQJCQkwCisjZGVmaW5lIE1BSU5fUE9MX01BU0sJCQkoMHg3IDw8IE1BSU5fUE9MX1NI SUZUKQorI2RlZmluZSBQT0xfREVfU0hJRlQJCQkyCisjZGVmaW5lIFBPTF9WU1lOQ19TSElGVAkJ CTEKKyNkZWZpbmUgUE9MX0hTWU5DX1NISUZUCQkJMAorI2RlZmluZSBUSU1JTkdfSU5UX0NUUkwJ CQkweDI0CisjZGVmaW5lIFRJTUlOR19JTlRfU1RBVEUJCTB4MjgKKyNkZWZpbmUgVElNSU5HX0lO VF9BVVhfRlJBTUUJCUJJVCgzKQorI2RlZmluZSBUSU1JTkdfSU5UX01BSU5fRlJBTUUJCUJJVCgx KQorI2RlZmluZSBUSU1JTkdfSU5UX0FVWF9GUkFNRV9TRUxfVlNXCSgweDIgPDwgMTApCisjZGVm aW5lIFRJTUlOR19JTlRfTUFJTl9GUkFNRV9TRUxfVlNXCSgweDIgPDwgNikKKyNkZWZpbmUgVElN SU5HX0lOVF9FTkFCTEUgKFwKKwlUSU1JTkdfSU5UX01BSU5fRlJBTUVfU0VMX1ZTVyB8IFRJTUlO R19JTlRfQVVYX0ZSQU1FX1NFTF9WU1cgfCBcCisJVElNSU5HX0lOVF9NQUlOX0ZSQU1FIHwgVElN SU5HX0lOVF9BVVhfRlJBTUUgXAorKQorI2RlZmluZSBUSU1JTkdfTUFJTl9TSElGVAkJMHgyYwor I2RlZmluZSBUSU1JTkdfQVVYX1NISUZUCQkweDMwCisjZGVmaW5lIEhfU0hJRlRfVkFMCQkJMHgw MDQ4CisjZGVmaW5lIFRJTUlOR19NQUlOX1BJX1NISUZUCQkweDY4CisjZGVmaW5lIFRJTUlOR19B VVhfUElfU0hJRlQJCTB4NmMKKyNkZWZpbmUgSF9QSV9TSElGVF9WQUwJCQkweDAwMGYKKworLyog RFRSQyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgRFRSQ19GMF9DVFJMCQkJMHgyYworI2RlZmluZSBE VFJDX0YxX0NUUkwJCQkweDVjCisjZGVmaW5lIERUUkNfREVDT01QUkVTU19CWVBBU1MJCUJJVCgx NykKKyNkZWZpbmUgRFRSQ19ERVRJTEVfQ1RSTAkJMHg2OAorI2RlZmluZSBUSUxFMlJBU1RFU0NB Tl9CWVBBU1NfTU9ERQlCSVQoMzApCisjZGVmaW5lIERFVElMRV9BUklEUl9NT0RFX01BU0sJCSgw eDMgPDwgMCkKKyNkZWZpbmUgREVUSUxFX0FSSURfQUxMCQkJMAorI2RlZmluZSBERVRJTEVfQVJJ RF9JTl9BUklEUgkJMQorI2RlZmluZSBERVRJTEVfQVJJRF9CWVBfQlVUX0FSSURSCTIKKyNkZWZp bmUgREVUSUxFX0FSSURfSU5fQVJJRFIyCQkzCisjZGVmaW5lIERUUkNfQVJJRAkJCTB4NmMKKyNk ZWZpbmUgRFRSQ19ERUMyRERSX0FSSUQJCTB4NzAKKworLyogVk9VX0NUUkwgcmVnaXN0ZXJzICov CisjZGVmaW5lIFZPVV9JTkZfRU4JCQkweDAwCisjZGVmaW5lIFZPVV9JTkZfQ0hfU0VMCQkJMHgw NAorI2RlZmluZSBWT1VfSU5GX0RBVEFfU0VMCQkweDA4CisjZGVmaW5lIFZPVV9TT0ZUX1JTVAkJ CTB4MTQKKyNkZWZpbmUgVk9VX0NMS19TRUwJCQkweDE4CisjZGVmaW5lIFZPVV9DTEtfR0wxX1NF TAkJCUJJVCg1KQorI2RlZmluZSBWT1VfQ0xLX0dMMF9TRUwJCQlCSVQoNCkKKyNkZWZpbmUgVk9V X0NMS19SRVFFTgkJCTB4MjAKKyNkZWZpbmUgVk9VX0NMS19FTgkJCTB4MjQKKworLyogT1RGUFBV X0NUUkwgcmVnaXN0ZXJzICovCisjZGVmaW5lIE9URlBQVV9SU1pfREFUQV9TT1VSQ0UJCTB4MDQK KworI2RlZmluZSBHTF9OVU0JCQkJMgorI2RlZmluZSBWTF9OVU0JCQkJMworCitlbnVtIHZvdV9j aG5fdHlwZSB7CisJVk9VX0NITl9NQUlOLAorCVZPVV9DSE5fQVVYLAorfTsKKworc3RydWN0IHp4 X2NydGMgeworCXN0cnVjdCBkcm1fY3J0YyBjcnRjOworCXN0cnVjdCBkcm1fcGxhbmUgKnByaW1h cnk7CisJc3RydWN0IGRldmljZSAqZGV2OworCXZvaWQgX19pb21lbSAqY2hucmVnOworCWVudW0g dm91X2Nobl90eXBlIGNobl90eXBlOworCXN0cnVjdCBjbGsgKnBpeGNsazsKK307CisKKyNkZWZp bmUgdG9fenhfY3J0Yyh4KQljb250YWluZXJfb2YoY3J0Yywgc3RydWN0IHp4X2NydGMsIGNydGMp CisKK3N0cnVjdCB6eF92b3VfaHcgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwl2b2lkIF9faW9t ZW0gKm9zZDsKKwl2b2lkIF9faW9tZW0gKnRpbWluZzsKKwl2b2lkIF9faW9tZW0gKnZvdWN0bDsK Kwl2b2lkIF9faW9tZW0gKm90ZnBwdTsKKwl2b2lkIF9faW9tZW0gKmR0cmM7CisJc3RydWN0IGNs ayAqYXhpX2NsazsKKwlzdHJ1Y3QgY2xrICpwcHVfY2xrOworCXN0cnVjdCBjbGsgKm1haW5fY2xr OworCXN0cnVjdCBjbGsgKmF1eF9jbGs7CisJc3RydWN0IHp4X2NydGMgKm1haW5fY3J0YzsKKwlz dHJ1Y3QgenhfY3J0YyAqYXV4X2NydGM7Cit9OworCitzdGF0aWMgaW5saW5lIGJvb2wgaXNfbWFp bl9jcnRjKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgenhfY3J0YyAqemNydGMg PSB0b196eF9jcnRjKGNydGMpOworCisJcmV0dXJuIHpjcnRjLT5jaG5fdHlwZSA9PSBWT1VfQ0hO X01BSU47Cit9CisKK3ZvaWQgdm91X2luZl9lbmFibGUoc3RydWN0IHZvdV9pbmYgKmluZikKK3sK KwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIgPSBpbmYtPmVuY29kZXI7CisJc3RydWN0IGRy bV9kZXZpY2UgKmRybSA9IGVuY29kZXItPmRldjsKKwlzdHJ1Y3QgenhfZHJtX3ByaXZhdGUgKnBy aXYgPSBkcm0tPmRldl9wcml2YXRlOworCXN0cnVjdCB6eF92b3VfaHcgKnZvdSA9IHByaXYtPnZv dTsKKwlib29sIGlzX21haW4gPSBpc19tYWluX2NydGMoZW5jb2Rlci0+Y3J0Yyk7CisJdTMyIGRh dGFfc2VsX3NoaWZ0ID0gaW5mLT5pZCA8PCAxOworCXUzMiB2YWw7CisKKwkvKiBTZWxlY3QgZGF0 YSBmb3JtYXQgKi8KKwl2YWwgPSByZWFkbCh2b3UtPnZvdWN0bCArIFZPVV9JTkZfREFUQV9TRUwp OworCXZhbCAmPSB+KDB4MyA8PCBkYXRhX3NlbF9zaGlmdCk7CisJdmFsIHw9IGluZi0+ZGF0YV9z ZWwgPDwgZGF0YV9zZWxfc2hpZnQ7CisJd3JpdGVsKHZhbCwgdm91LT52b3VjdGwgKyBWT1VfSU5G X0RBVEFfU0VMKTsKKworCS8qIFNlbGVjdCBjaGFubmVsICovCisJdmFsID0gcmVhZGwodm91LT52 b3VjdGwgKyBWT1VfSU5GX0NIX1NFTCk7CisJaWYgKGlzX21haW4pCisJCXZhbCAmPSB+KDEgPDwg aW5mLT5pZCk7CisJZWxzZQorCQl2YWwgfD0gMSA8PCBpbmYtPmlkOworCXdyaXRlbCh2YWwsIHZv dS0+dm91Y3RsICsgVk9VX0lORl9DSF9TRUwpOworCisJLyogU2VsZWN0IGludGVyZmFjZSBjbG9j a3MgKi8KKwl2YWwgPSByZWFkbCh2b3UtPnZvdWN0bCArIFZPVV9DTEtfU0VMKTsKKwlpZiAoaXNf bWFpbikKKwkJdmFsICY9IH5pbmYtPmNsb2Nrc19zZWxfYml0czsKKwllbHNlCisJCXZhbCB8PSBp bmYtPmNsb2Nrc19zZWxfYml0czsKKwl3cml0ZWwodmFsLCB2b3UtPnZvdWN0bCArIFZPVV9DTEtf U0VMKTsKKworCS8qIEVuYWJsZSBpbnRlcmZhY2UgY2xvY2tzICovCisJdmFsID0gcmVhZGwodm91 LT52b3VjdGwgKyBWT1VfQ0xLX0VOKTsKKwl2YWwgfD0gaW5mLT5jbG9ja3NfZW5fYml0czsKKwl3 cml0ZWwodmFsLCB2b3UtPnZvdWN0bCArIFZPVV9DTEtfRU4pOworCisJLyogRW5hYmxlIHRoZSBk ZXZpY2UgKi8KKwl2YWwgPSByZWFkbCh2b3UtPnZvdWN0bCArIFZPVV9JTkZfRU4pOworCXZhbCB8 PSAxIDw8IGluZi0+aWQ7CisJd3JpdGVsKHZhbCwgdm91LT52b3VjdGwgKyBWT1VfSU5GX0VOKTsK K30KKwordm9pZCB2b3VfaW5mX2Rpc2FibGUoc3RydWN0IHZvdV9pbmYgKmluZikKK3sKKwlzdHJ1 Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIgPSBpbmYtPmVuY29kZXI7CisJc3RydWN0IGRybV9kZXZp Y2UgKmRybSA9IGVuY29kZXItPmRldjsKKwlzdHJ1Y3QgenhfZHJtX3ByaXZhdGUgKnByaXYgPSBk cm0tPmRldl9wcml2YXRlOworCXN0cnVjdCB6eF92b3VfaHcgKnZvdSA9IHByaXYtPnZvdTsKKwl1 MzIgdmFsOworCisJLyogRGlzYWJsZSB0aGUgZGV2aWNlICovCisJdmFsID0gcmVhZGwodm91LT52 b3VjdGwgKyBWT1VfSU5GX0VOKTsKKwl2YWwgJj0gfigxIDw8IGluZi0+aWQpOworCXdyaXRlbCh2 YWwsIHZvdS0+dm91Y3RsICsgVk9VX0lORl9FTik7CisKKwkvKiBEaXNhYmxlIGludGVyZmFjZSBj bG9ja3MgKi8KKwl2YWwgPSByZWFkbCh2b3UtPnZvdWN0bCArIFZPVV9DTEtfRU4pOworCXZhbCAm PSB+aW5mLT5jbG9ja3NfZW5fYml0czsKKwl3cml0ZWwodmFsLCB2b3UtPnZvdWN0bCArIFZPVV9D TEtfRU4pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdm91X2Nobl9zZXRfdXBkYXRlKHN0cnVj dCB6eF9jcnRjICp6Y3J0YykKK3sKKwl3cml0ZWwoMSwgemNydGMtPmNobnJlZyArIENITl9VUERB VEUpOworfQorCitzdGF0aWMgdm9pZCB6eF9jcnRjX2VuYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNy dGMpCit7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPSAmY3J0Yy0+c3RhdGUtPmFk anVzdGVkX21vZGU7CisJc3RydWN0IHp4X2NydGMgKnpjcnRjID0gdG9fenhfY3J0YyhjcnRjKTsK KwlzdHJ1Y3Qgenhfdm91X2h3ICp2b3UgPSBkZXZfZ2V0X2RydmRhdGEoemNydGMtPmRldik7CisJ Ym9vbCBpc19tYWluID0gaXNfbWFpbl9jcnRjKGNydGMpOworCXN0cnVjdCB2aWRlb21vZGUgdm07 CisJdTMyIHBvbCA9IDA7CisJdTMyIHZhbDsKKworCWRybV9kaXNwbGF5X21vZGVfdG9fdmlkZW9t b2RlKG1vZGUsICZ2bSk7CisKKwkvKiBTZXQgdXAgdGltaW5nIHBhcmFtZXRlcnMgKi8KKwl2YWwg PSAodm0udmFjdGl2ZSAtIDEpIDw8IDE2OworCXZhbCB8PSAodm0uaGFjdGl2ZSAtIDEpICYgMHhm ZmZmOworCXdyaXRlbCh2YWwsIHZvdS0+dGltaW5nICsgKGlzX21haW4gPyBGSVJfTUFJTl9BQ1RJ VkUgOiBGSVJfQVVYX0FDVElWRSkpOworCisJdmFsID0gKCh2bS5oc3luY19sZW4gLSAxKSA8PCBT WU5DX1dJREVfU0hJRlQpICYgU1lOQ19XSURFX01BU0s7CisJdmFsIHw9ICgodm0uaGJhY2tfcG9y Y2ggLSAxKSA8PCBCQUNLX1BPUkNIX1NISUZUKSAmIEJBQ0tfUE9SQ0hfTUFTSzsKKwl2YWwgfD0g KCh2bS5oZnJvbnRfcG9yY2ggLSAxKSA8PCBGUk9OVF9QT1JDSF9TSElGVCkgJiBGUk9OVF9QT1JD SF9NQVNLOworCXdyaXRlbCh2YWwsIHZvdS0+dGltaW5nICsgKGlzX21haW4gPyBGSVJfTUFJTl9I X1RJTUlORyA6CisJCQkJCSAgICAgRklSX0FVWF9IX1RJTUlORykpOworCisJdmFsID0gKCh2bS52 c3luY19sZW4gLSAxKSA8PCBTWU5DX1dJREVfU0hJRlQpICYgU1lOQ19XSURFX01BU0s7CisJdmFs IHw9ICgodm0udmJhY2tfcG9yY2ggLSAxKSA8PCBCQUNLX1BPUkNIX1NISUZUKSAmIEJBQ0tfUE9S Q0hfTUFTSzsKKwl2YWwgfD0gKCh2bS52ZnJvbnRfcG9yY2ggLSAxKSA8PCBGUk9OVF9QT1JDSF9T SElGVCkgJiBGUk9OVF9QT1JDSF9NQVNLOworCXdyaXRlbCh2YWwsIHZvdS0+dGltaW5nICsgKGlz X21haW4gPyBGSVJfTUFJTl9WX1RJTUlORyA6CisJCQkJCSAgICAgRklSX0FVWF9WX1RJTUlORykp OworCisJLyogU2V0IHVwIHBvbGFyaXRpZXMgKi8KKwlpZiAodm0uZmxhZ3MgJiBESVNQTEFZX0ZM QUdTX1ZTWU5DX0xPVykKKwkJcG9sIHw9IDEgPDwgUE9MX1ZTWU5DX1NISUZUOworCWlmICh2bS5m bGFncyAmIERJU1BMQVlfRkxBR1NfSFNZTkNfTE9XKQorCQlwb2wgfD0gMSA8PCBQT0xfSFNZTkNf U0hJRlQ7CisKKwl2YWwgPSByZWFkbCh2b3UtPnRpbWluZyArIFRJTUlOR19DVFJMKTsKKwl2YWwg Jj0gfihpc19tYWluID8gTUFJTl9QT0xfTUFTSyA6IEFVWF9QT0xfTUFTSyk7CisJdmFsIHw9IHBv bCA8PCAoaXNfbWFpbiA/IE1BSU5fUE9MX1NISUZUIDogQVVYX1BPTF9TSElGVCk7CisJd3JpdGVs KHZhbCwgdm91LT50aW1pbmcgKyBUSU1JTkdfQ1RSTCk7CisKKwkvKiBTZXR1cCBTSElGVCByZWdp c3RlciBieSBmb2xsb3dpbmcgd2hhdCBaVEUgQlNQIGRvZXMgKi8KKwl3cml0ZWwoSF9TSElGVF9W QUwsIHZvdS0+dGltaW5nICsgKGlzX21haW4gPyBUSU1JTkdfTUFJTl9TSElGVCA6CisJCQkJCQkg ICAgIFRJTUlOR19BVVhfU0hJRlQpKTsKKwl3cml0ZWwoSF9QSV9TSElGVF9WQUwsIHZvdS0+dGlt aW5nICsgKGlzX21haW4gPyBUSU1JTkdfTUFJTl9QSV9TSElGVCA6CisJCQkJCQkJVElNSU5HX0FV WF9QSV9TSElGVCkpOworCisJLyogRW5hYmxlIFRJTUlOR19DVFJMICovCisJdmFsID0gcmVhZGwo dm91LT50aW1pbmcgKyBUSU1JTkdfVENfRU5BQkxFKTsKKwl2YWwgfD0gaXNfbWFpbiA/IE1BSU5f VENfRU4gOiBBVVhfVENfRU47CisJd3JpdGVsKHZhbCwgdm91LT50aW1pbmcgKyBUSU1JTkdfVENf RU5BQkxFKTsKKworCS8qIENvbmZpZ3VyZSBjaGFubmVsIHNjcmVlbiBzaXplICovCisJdmFsID0g cmVhZGwoemNydGMtPmNobnJlZyArIENITl9DVFJMMSk7CisJdmFsICY9IH4oQ0hOX1NDUkVFTl9X X01BU0sgfCBDSE5fU0NSRUVOX0hfTUFTSyk7CisJdmFsIHw9ICh2bS5oYWN0aXZlIDw8IENITl9T Q1JFRU5fV19TSElGVCkgJiBDSE5fU0NSRUVOX1dfTUFTSzsKKwl2YWwgfD0gKHZtLnZhY3RpdmUg PDwgQ0hOX1NDUkVFTl9IX1NISUZUKSAmIENITl9TQ1JFRU5fSF9NQVNLOworCXdyaXRlbCh2YWws IHpjcnRjLT5jaG5yZWcgKyBDSE5fQ1RSTDEpOworCisJLyogVXBkYXRlIGNoYW5uZWwgKi8KKwl2 b3VfY2huX3NldF91cGRhdGUoemNydGMpOworCisJLyogRW5hYmxlIGNoYW5uZWwgKi8KKwl2YWwg PSByZWFkbCh6Y3J0Yy0+Y2hucmVnICsgQ0hOX0NUUkwwKTsKKwl2YWwgfD0gQ0hOX0VOQUJMRTsK Kwl3cml0ZWwodmFsLCB6Y3J0Yy0+Y2hucmVnICsgQ0hOX0NUUkwwKTsKKworCS8qIEVuYWJsZSBH cmFwaGljIExheWVyICovCisJdmFsID0gcmVhZGwodm91LT5vc2QgKyBPU0RfQ1RSTDApOworCXZh bCB8PSBpc19tYWluID8gT1NEX0NUUkwwX0dMMF9FTiA6IE9TRF9DVFJMMF9HTDFfRU47CisJd3Jp dGVsKHZhbCwgdm91LT5vc2QgKyBPU0RfQ1RSTDApOworCisJZHJtX2NydGNfdmJsYW5rX29uKGNy dGMpOworCisJLyogRW5hYmxlIHBpeGVsIGNsb2NrICovCisJY2xrX3NldF9yYXRlKHpjcnRjLT5w aXhjbGssIG1vZGUtPmNsb2NrICogMTAwMCk7CisJY2xrX3ByZXBhcmVfZW5hYmxlKHpjcnRjLT5w aXhjbGspOworfQorCitzdGF0aWMgdm9pZCB6eF9jcnRjX2Rpc2FibGUoc3RydWN0IGRybV9jcnRj ICpjcnRjKQoreworCXN0cnVjdCB6eF9jcnRjICp6Y3J0YyA9IHRvX3p4X2NydGMoY3J0Yyk7CisJ c3RydWN0IHp4X3ZvdV9odyAqdm91ID0gZGV2X2dldF9kcnZkYXRhKHpjcnRjLT5kZXYpOworCWJv b2wgaXNfbWFpbiA9IGlzX21haW5fY3J0YyhjcnRjKTsKKwl1MzIgdmFsOworCisJY2xrX2Rpc2Fi bGVfdW5wcmVwYXJlKHpjcnRjLT5waXhjbGspOworCisJZHJtX2NydGNfdmJsYW5rX29mZihjcnRj KTsKKworCS8qIERpc2FibGUgR3JhcGhpYyBMYXllciAqLworCXZhbCA9IHJlYWRsKHZvdS0+b3Nk ICsgT1NEX0NUUkwwKTsKKwl2YWwgJj0gfihpc19tYWluID8gT1NEX0NUUkwwX0dMMF9FTiA6IE9T RF9DVFJMMF9HTDFfRU4pOworCXdyaXRlbCh2YWwsIHZvdS0+b3NkICsgT1NEX0NUUkwwKTsKKwor CS8qIERpc2FibGUgY2hhbm5lbCAqLworCXZhbCA9IHJlYWRsKHpjcnRjLT5jaG5yZWcgKyBDSE5f Q1RSTDApOworCXZhbCAmPSB+Q0hOX0VOQUJMRTsKKwl3cml0ZWwodmFsLCB6Y3J0Yy0+Y2hucmVn ICsgQ0hOX0NUUkwwKTsKKworCS8qIERpc2FibGUgVElNSU5HX0NUUkwgKi8KKwl2YWwgPSByZWFk bCh2b3UtPnRpbWluZyArIFRJTUlOR19UQ19FTkFCTEUpOworCXZhbCAmPSB+KGlzX21haW4gPyBN QUlOX1RDX0VOIDogQVVYX1RDX0VOKTsKKwl3cml0ZWwodmFsLCB2b3UtPnRpbWluZyArIFRJTUlO R19UQ19FTkFCTEUpOworfQorCitzdGF0aWMgdm9pZCB6eF9jcnRjX2F0b21pY19iZWdpbihzdHJ1 Y3QgZHJtX2NydGMgKmNydGMsCisJCQkJIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpCit7 CisJc3RydWN0IGRybV9wZW5kaW5nX3ZibGFua19ldmVudCAqZXZlbnQgPSBjcnRjLT5zdGF0ZS0+ ZXZlbnQ7CisKKwlpZiAoZXZlbnQpIHsKKwkJY3J0Yy0+c3RhdGUtPmV2ZW50ID0gTlVMTDsKKwor CQlzcGluX2xvY2tfaXJxKCZjcnRjLT5kZXYtPmV2ZW50X2xvY2spOworCQlpZiAoZHJtX2NydGNf dmJsYW5rX2dldChjcnRjKSA9PSAwKQorCQkJZHJtX2NydGNfYXJtX3ZibGFua19ldmVudChjcnRj LCBldmVudCk7CisJCWVsc2UKKwkJCWRybV9jcnRjX3NlbmRfdmJsYW5rX2V2ZW50KGNydGMsIGV2 ZW50KTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZjcnRjLT5kZXYtPmV2ZW50X2xvY2spOworCX0KK30K Kworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3MgenhfY3J0Y19oZWxw ZXJfZnVuY3MgPSB7CisJLmVuYWJsZSA9IHp4X2NydGNfZW5hYmxlLAorCS5kaXNhYmxlID0genhf Y3J0Y19kaXNhYmxlLAorCS5hdG9taWNfYmVnaW4gPSB6eF9jcnRjX2F0b21pY19iZWdpbiwKK307 CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2NydGNfZnVuY3MgenhfY3J0Y19mdW5jcyA9IHsK KwkuZGVzdHJveSA9IGRybV9jcnRjX2NsZWFudXAsCisJLnNldF9jb25maWcgPSBkcm1fYXRvbWlj X2hlbHBlcl9zZXRfY29uZmlnLAorCS5wYWdlX2ZsaXAgPSBkcm1fYXRvbWljX2hlbHBlcl9wYWdl X2ZsaXAsCisJLnJlc2V0ID0gZHJtX2F0b21pY19oZWxwZXJfY3J0Y19yZXNldCwKKwkuYXRvbWlj X2R1cGxpY2F0ZV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2NydGNfZHVwbGljYXRlX3N0YXRl LAorCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2NydGNfZGVzdHJv eV9zdGF0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgenhfY3J0YyAqenhfY3J0Y19pbml0KHN0cnVj dCBkcm1fZGV2aWNlICpkcm0sCisJCQkJICAgIGVudW0gdm91X2Nobl90eXBlIGNobl90eXBlKQor eworCXN0cnVjdCB6eF9kcm1fcHJpdmF0ZSAqcHJpdiA9IGRybS0+ZGV2X3ByaXZhdGU7CisJc3Ry dWN0IHp4X3ZvdV9odyAqdm91ID0gcHJpdi0+dm91OworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHZv dS0+ZGV2OworCXN0cnVjdCB6eF9sYXllcl9kYXRhIGRhdGE7CisJc3RydWN0IHp4X2NydGMgKnpj cnRjOworCWludCByZXQ7CisKKwl6Y3J0YyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqemNy dGMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXpjcnRjKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVN KTsKKworCXpjcnRjLT5kZXYgPSBkZXY7CisJemNydGMtPmNobl90eXBlID0gY2huX3R5cGU7CisK KwlpZiAoY2huX3R5cGUgPT0gVk9VX0NITl9NQUlOKSB7CisJCWRhdGEubGF5ZXIgPSB2b3UtPm9z ZCArIDB4MTMwOworCQlkYXRhLmNzYyA9IHZvdS0+b3NkICsgMHg1ODA7CisJCWRhdGEuaGJzYyA9 IHZvdS0+b3NkICsgMHg4MjA7CisJCWRhdGEucnN6ID0gdm91LT5vdGZwcHUgKyAweDYwMDsKKwkJ emNydGMtPmNobnJlZyA9IHZvdS0+b3NkICsgT1NEX01BSU5fQ0hOOworCX0gZWxzZSB7CisJCWRh dGEubGF5ZXIgPSB2b3UtPm9zZCArIDB4MjAwOworCQlkYXRhLmNzYyA9IHZvdS0+b3NkICsgMHg1 ZDA7CisJCWRhdGEuaGJzYyA9IHZvdS0+b3NkICsgMHg4NjA7CisJCWRhdGEucnN6ID0gdm91LT5v dGZwcHUgKyAweDgwMDsKKwkJemNydGMtPmNobnJlZyA9IHZvdS0+b3NkICsgT1NEX0FVWF9DSE47 CisJfQorCisJemNydGMtPnBpeGNsayA9IGRldm1fY2xrX2dldChkZXYsIChjaG5fdHlwZSA9PSBW T1VfQ0hOX01BSU4pID8KKwkJCQkJICAibWFpbl93Y2xrIiA6ICJhdXhfd2NsayIpOworCWlmIChJ U19FUlIoemNydGMtPnBpeGNsaykpCisJCXJldHVybiBFUlJfUFRSKFBUUl9FUlIoemNydGMtPnBp eGNsaykpOworCisJemNydGMtPnByaW1hcnkgPSB6eF9wbGFuZV9pbml0KGRybSwgZGV2LCAmZGF0 YSwgRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSk7CisJaWYgKElTX0VSUih6Y3J0Yy0+cHJpbWFyeSkp CisJCXJldHVybiBFUlJfUFRSKFBUUl9FUlIoemNydGMtPnByaW1hcnkpKTsKKworCXJldCA9IGRy bV9jcnRjX2luaXRfd2l0aF9wbGFuZXMoZHJtLCAmemNydGMtPmNydGMsIHpjcnRjLT5wcmltYXJ5 LCBOVUxMLAorCQkJCQkmenhfY3J0Y19mdW5jcywgTlVMTCk7CisJaWYgKHJldCkKKwkJcmV0dXJu IEVSUl9QVFIocmV0KTsKKworCWRybV9jcnRjX2hlbHBlcl9hZGQoJnpjcnRjLT5jcnRjLCAmenhf Y3J0Y19oZWxwZXJfZnVuY3MpOworCisJcmV0dXJuIHpjcnRjOworfQorCitpbnQgenhfY3J0Y19l bmFibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHVuc2lnbmVkIGludCBwaXBlKQor eworCXN0cnVjdCB6eF9kcm1fcHJpdmF0ZSAqcHJpdiA9IGRybS0+ZGV2X3ByaXZhdGU7CisJc3Ry dWN0IHp4X3ZvdV9odyAqdm91ID0gcHJpdi0+dm91OworCXUzMiBpbnRjdGw7CisKKwlpbnRjdGwg PSByZWFkbCh2b3UtPnRpbWluZyArIFRJTUlOR19JTlRfQ1RSTCk7CisJaWYgKHBpcGUgPT0gMCkK KwkJaW50Y3RsIHw9IFRJTUlOR19JTlRfTUFJTl9GUkFNRTsKKwllbHNlCisJCWludGN0bCB8PSBU SU1JTkdfSU5UX0FVWF9GUkFNRTsKKwl3cml0ZWwoaW50Y3RsLCB2b3UtPnRpbWluZyArIFRJTUlO R19JTlRfQ1RSTCk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCB6eF9jcnRjX2Rpc2FibGVfdmJs YW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHVuc2lnbmVkIGludCBwaXBlKQoreworCXN0cnVj dCB6eF9kcm1fcHJpdmF0ZSAqcHJpdiA9IGRybS0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IHp4X3Zv dV9odyAqdm91ID0gcHJpdi0+dm91OworCXUzMiBpbnRjdGw7CisKKwlpbnRjdGwgPSByZWFkbCh2 b3UtPnRpbWluZyArIFRJTUlOR19JTlRfQ1RSTCk7CisJaWYgKHBpcGUgPT0gMCkKKwkJaW50Y3Rs ICY9IH5USU1JTkdfSU5UX01BSU5fRlJBTUU7CisJZWxzZQorCQlpbnRjdGwgJj0gflRJTUlOR19J TlRfQVVYX0ZSQU1FOworCXdyaXRlbChpbnRjdGwsIHZvdS0+dGltaW5nICsgVElNSU5HX0lOVF9D VFJMKTsKK30KKworc3RhdGljIGlycXJldHVybl90IHZvdV9pcnFfaGFuZGxlcihpbnQgaXJxLCB2 b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHp4X3ZvdV9odyAqdm91ID0gZGV2X2lkOworCXUzMiBz dGF0ZTsKKworCS8qIEhhbmRsZSBUSU1JTkdfQ1RSTCBmcmFtZSBpbnRlcnJ1cHRzICovCisJc3Rh dGUgPSByZWFkbCh2b3UtPnRpbWluZyArIFRJTUlOR19JTlRfU1RBVEUpOworCXdyaXRlbChzdGF0 ZSwgdm91LT50aW1pbmcgKyBUSU1JTkdfSU5UX1NUQVRFKTsKKworCWlmIChzdGF0ZSAmIFRJTUlO R19JTlRfTUFJTl9GUkFNRSkKKwkJZHJtX2NydGNfaGFuZGxlX3ZibGFuaygmdm91LT5tYWluX2Ny dGMtPmNydGMpOworCisJaWYgKHN0YXRlICYgVElNSU5HX0lOVF9BVVhfRlJBTUUpCisJCWRybV9j cnRjX2hhbmRsZV92YmxhbmsoJnZvdS0+YXV4X2NydGMtPmNydGMpOworCisJLyogSGFuZGxlIE9T RCBpbnRlcnJ1cHRzICovCisJc3RhdGUgPSByZWFkbCh2b3UtPm9zZCArIE9TRF9JTlRfU1RBKTsK Kwl3cml0ZWwoc3RhdGUsIHZvdS0+b3NkICsgT1NEX0lOVF9DTFJTVEEpOworCisJaWYgKHN0YXRl ICYgT1NEX0lOVF9NQUlOX1VQVCkgeworCQl2b3VfY2huX3NldF91cGRhdGUodm91LT5tYWluX2Ny dGMpOworCQl6eF9wbGFuZV9zZXRfdXBkYXRlKHZvdS0+bWFpbl9jcnRjLT5wcmltYXJ5KTsKKwl9 CisKKwlpZiAoc3RhdGUgJiBPU0RfSU5UX0FVWF9VUFQpIHsKKwkJdm91X2Nobl9zZXRfdXBkYXRl KHZvdS0+YXV4X2NydGMpOworCQl6eF9wbGFuZV9zZXRfdXBkYXRlKHZvdS0+YXV4X2NydGMtPnBy aW1hcnkpOworCX0KKworCWlmIChzdGF0ZSAmIE9TRF9JTlRfRVJST1IpCisJCWRldl9lcnIodm91 LT5kZXYsICJPU0QgRVJST1I6IDB4JTA4eCFcbiIsIHN0YXRlKTsKKworCXJldHVybiBJUlFfSEFO RExFRDsKK30KKworc3RhdGljIHZvaWQgdm91X2R0cmNfaW5pdChzdHJ1Y3Qgenhfdm91X2h3ICp2 b3UpCit7CisJdTMyIHZhbDsKKworCXZhbCA9IHJlYWRsKHZvdS0+ZHRyYyArIERUUkNfREVUSUxF X0NUUkwpOworCS8qIENsZWFyIGJpdCBmb3IgYnlwYXNzIGJ5IElEICovCisJdmFsICY9IH5USUxF MlJBU1RFU0NBTl9CWVBBU1NfTU9ERTsKKwkvKiBTZWxlY3QgQVJJRFIgbW9kZSAqLworCXZhbCAm PSB+REVUSUxFX0FSSURSX01PREVfTUFTSzsKKwl2YWwgfD0gREVUSUxFX0FSSURfSU5fQVJJRFI7 CisJd3JpdGVsKHZhbCwgdm91LT5kdHJjICsgRFRSQ19ERVRJTEVfQ1RSTCk7CisKKwkvKiBCeXBh c3MgZGVjb21wcmVzc2lvbiBmb3IgYm90aCBmcmFtZXMgKi8KKwl2YWwgPSByZWFkbCh2b3UtPmR0 cmMgKyBEVFJDX0YwX0NUUkwpOworCXZhbCB8PSBEVFJDX0RFQ09NUFJFU1NfQllQQVNTOworCXdy aXRlbCh2YWwsIHZvdS0+ZHRyYyArIERUUkNfRjBfQ1RSTCk7CisKKwl2YWwgPSByZWFkbCh2b3Ut PmR0cmMgKyBEVFJDX0YxX0NUUkwpOworCXZhbCB8PSBEVFJDX0RFQ09NUFJFU1NfQllQQVNTOwor CXdyaXRlbCh2YWwsIHZvdS0+ZHRyYyArIERUUkNfRjFfQ1RSTCk7CisKKwkvKiBTZXQgdXAgQVJJ RCByZWdpc3RlciAqLworCXZhbCA9IDB4MGU7CisJdmFsIHw9IDB4MGYgPDwgODsKKwl2YWwgfD0g MHgwZSA8PCAxNjsKKwl2YWwgfD0gMHgwZiA8PCAyNDsKKwl3cml0ZWwodmFsLCB2b3UtPmR0cmMg KyBEVFJDX0FSSUQpOworCisJLyogU2V0IHVwIERFQzJERFJfQVJJRCByZWdpc3RlciAqLworCXZh bCA9IDB4MGU7CisJdmFsIHw9IDB4MGYgPDwgODsKKwl3cml0ZWwodmFsLCB2b3UtPmR0cmMgKyBE VFJDX0RFQzJERFJfQVJJRCk7Cit9CisKK3N0YXRpYyB2b2lkIHZvdV9od19pbml0KHN0cnVjdCB6 eF92b3VfaHcgKnZvdSkKK3sKKwl1MzIgdmFsOworCisJLyogU2V0IEdMMCB0byBtYWluIGNoYW5u ZWwgYW5kIEdMMSB0byBhdXggY2hhbm5lbCAqLworCXZhbCA9IHJlYWRsKHZvdS0+b3NkICsgT1NE X0NUUkwwKTsKKwl2YWwgJj0gfk9TRF9DVFJMMF9HTDBfU0VMOworCXZhbCB8PSBPU0RfQ1RSTDBf R0wxX1NFTDsKKwl3cml0ZWwodmFsLCB2b3UtPm9zZCArIE9TRF9DVFJMMCk7CisKKwkvKiBSZWxl YXNlIHJlc2V0IGZvciBhbGwgVk9VIG1vZHVsZXMgKi8KKwl3cml0ZWwofjAsIHZvdS0+dm91Y3Rs ICsgVk9VX1NPRlRfUlNUKTsKKworCS8qIFNlbGVjdCBtYWluIGNsb2NrIGZvciBHTDAgYW5kIGF1 eCBjbG9jayBmb3IgR0wxIG1vZHVsZSAqLworCXZhbCA9IHJlYWRsKHZvdS0+dm91Y3RsICsgVk9V X0NMS19TRUwpOworCXZhbCAmPSB+Vk9VX0NMS19HTDBfU0VMOworCXZhbCB8PSBWT1VfQ0xLX0dM MV9TRUw7CisJd3JpdGVsKHZhbCwgdm91LT52b3VjdGwgKyBWT1VfQ0xLX1NFTCk7CisKKwkvKiBF bmFibGUgY2xvY2sgYXV0by1nYXRpbmcgZm9yIGFsbCBWT1UgbW9kdWxlcyAqLworCXdyaXRlbCh+ MCwgdm91LT52b3VjdGwgKyBWT1VfQ0xLX1JFUUVOKTsKKworCS8qIEVuYWJsZSBhbGwgVk9VIG1v ZHVsZSBjbG9ja3MgKi8KKwl3cml0ZWwofjAsIHZvdS0+dm91Y3RsICsgVk9VX0NMS19FTik7CisK KwkvKiBDbGVhciBib3RoIE9TRCBhbmQgVElNSU5HX0NUUkwgaW50ZXJydXB0IHN0YXRlICovCisJ d3JpdGVsKH4wLCB2b3UtPm9zZCArIE9TRF9JTlRfQ0xSU1RBKTsKKwl3cml0ZWwofjAsIHZvdS0+ dGltaW5nICsgVElNSU5HX0lOVF9TVEFURSk7CisKKwkvKiBFbmFibGUgT1NEIGFuZCBUSU1JTkdf Q1RSTCBpbnRlcnJydXB0cyAqLworCXdyaXRlbChPU0RfSU5UX0VOQUJMRSwgdm91LT5vc2QgKyBP U0RfSU5UX01TSyk7CisJd3JpdGVsKFRJTUlOR19JTlRfRU5BQkxFLCB2b3UtPnRpbWluZyArIFRJ TUlOR19JTlRfQ1RSTCk7CisKKwkvKiBTZWxlY3QgR1BDIGFzIGlucHV0IHRvIGdsL3ZsIHNjYWxl ciBhcyBhIHNhbmUgZGVmYXVsdCBzZXR0aW5nICovCisJd3JpdGVsKDB4MmEsIHZvdS0+b3RmcHB1 ICsgT1RGUFBVX1JTWl9EQVRBX1NPVVJDRSk7CisKKwkvKgorCSAqIE5lZWRzIHRvIHJlc2V0IGNo YW5uZWwgYW5kIGxheWVyIGxvZ2ljIHBlciBmcmFtZSB3aGVuIGZyYW1lIHN0YXJ0cworCSAqIHRv IGdldCBWT1Ugd29yayBwcm9wZXJseS4KKwkgKi8KKwl2YWwgPSByZWFkbCh2b3UtPm9zZCArIE9T RF9SU1RfQ0xSKTsKKwl2YWwgfD0gUlNUX1BFUl9GUkFNRTsKKwl3cml0ZWwodmFsLCB2b3UtPm9z ZCArIE9TRF9SU1RfQ0xSKTsKKworCXZvdV9kdHJjX2luaXQodm91KTsKK30KKworc3RhdGljIGlu dCB6eF9jcnRjX2JpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIs IHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRm b3JtX2RldmljZShkZXYpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBkYXRhOworCXN0cnVj dCB6eF9kcm1fcHJpdmF0ZSAqcHJpdiA9IGRybS0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IHJlc291 cmNlICpyZXM7CisJc3RydWN0IHp4X3ZvdV9odyAqdm91OworCWludCBpcnE7CisJaW50IHJldDsK KworCXZvdSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqdm91KSwgR0ZQX0tFUk5FTCk7CisJ aWYgKCF2b3UpCisJCXJldHVybiAtRU5PTUVNOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291 cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgIm9zZCIpOworCXZvdS0+b3NkID0gZGV2 bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKHZvdS0+b3NkKSkKKwkJ cmV0dXJuIFBUUl9FUlIodm91LT5vc2QpOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNl X2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgInRpbWluZ19jdHJsIik7CisJdm91LT50aW1p bmcgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpOworCWlmIChJU19FUlIodm91LT50 aW1pbmcpKQorCQlyZXR1cm4gUFRSX0VSUih2b3UtPnRpbWluZyk7CisKKwlyZXMgPSBwbGF0Zm9y bV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAiZHRyYyIpOworCXZv dS0+ZHRyYyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJlcyk7CisJaWYgKElTX0VSUih2 b3UtPmR0cmMpKQorCQlyZXR1cm4gUFRSX0VSUih2b3UtPmR0cmMpOworCisJcmVzID0gcGxhdGZv cm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgInZvdV9jdHJsIik7 CisJdm91LT52b3VjdGwgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpOworCWlmIChJ U19FUlIodm91LT52b3VjdGwpKQorCQlyZXR1cm4gUFRSX0VSUih2b3UtPnZvdWN0bCk7CisKKwly ZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAi b3RmcHB1Iik7CisJdm91LT5vdGZwcHUgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMp OworCWlmIChJU19FUlIodm91LT5vdGZwcHUpKQorCQlyZXR1cm4gUFRSX0VSUih2b3UtPm90ZnBw dSk7CisKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChpcnEgPCAwKQor CQlyZXR1cm4gaXJxOworCisJdm91LT5heGlfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgImFjbGsi KTsKKwlpZiAoSVNfRVJSKHZvdS0+YXhpX2NsaykpCisJCXJldHVybiBQVFJfRVJSKHZvdS0+YXhp X2Nsayk7CisKKwl2b3UtPnBwdV9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAicHB1X3djbGsiKTsK KwlpZiAoSVNfRVJSKHZvdS0+cHB1X2NsaykpCisJCXJldHVybiBQVFJfRVJSKHZvdS0+cHB1X2Ns ayk7CisKKwljbGtfcHJlcGFyZV9lbmFibGUodm91LT5heGlfY2xrKTsKKwljbGtfcHJlcGFyZV9l bmFibGUodm91LT5wcHVfY2xrKTsKKworCXZvdS0+ZGV2ID0gZGV2OworCXByaXYtPnZvdSA9IHZv dTsKKwlkZXZfc2V0X2RydmRhdGEoZGV2LCB2b3UpOworCisJdm91X2h3X2luaXQodm91KTsKKwor CXJldCA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBpcnEsIHZvdV9pcnFfaGFuZGxlciwgMCwgInp4 X3ZvdSIsIHZvdSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwl2b3UtPm1haW5f Y3J0YyA9IHp4X2NydGNfaW5pdChkcm0sIFZPVV9DSE5fTUFJTik7CisJaWYgKElTX0VSUih2b3Ut Pm1haW5fY3J0YykpCisJCXJldHVybiBQVFJfRVJSKHZvdS0+bWFpbl9jcnRjKTsKKworCXZvdS0+ YXV4X2NydGMgPSB6eF9jcnRjX2luaXQoZHJtLCBWT1VfQ0hOX0FVWCk7CisJaWYgKElTX0VSUih2 b3UtPmF1eF9jcnRjKSkKKwkJcmV0dXJuIFBUUl9FUlIodm91LT5hdXhfY3J0Yyk7CisKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIHZvaWQgenhfY3J0Y191bmJpbmQoc3RydWN0IGRldmljZSAqZGV2 LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsCisJCQkgICB2b2lkICpkYXRhKQoreworCXN0cnVjdCB6 eF92b3VfaHcgKnZvdSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJY2xrX2Rpc2FibGVfdW5w cmVwYXJlKHZvdS0+YXhpX2Nsayk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHZvdS0+cHB1X2Ns ayk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcG9uZW50X29wcyB6eF9jcnRjX2NvbXBv bmVudF9vcHMgPSB7CisJLmJpbmQgPSB6eF9jcnRjX2JpbmQsCisJLnVuYmluZCA9IHp4X2NydGNf dW5iaW5kLAorfTsKKworc3RhdGljIGludCB6eF9jcnRjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYpCit7CisJcmV0dXJuIGNvbXBvbmVudF9hZGQoJnBkZXYtPmRldiwgJnp4X2Ny dGNfY29tcG9uZW50X29wcyk7Cit9CisKK3N0YXRpYyBpbnQgenhfY3J0Y19yZW1vdmUoc3RydWN0 IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwljb21wb25lbnRfZGVsKCZwZGV2LT5kZXYsICZ6 eF9jcnRjX2NvbXBvbmVudF9vcHMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3Ry dWN0IG9mX2RldmljZV9pZCB6eF9jcnRjX29mX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9 ICJ6dGUsengyOTY3MTgtZHBjIiwgfSwKKwl7IC8qIGVuZCAqLyB9LAorfTsKK01PRFVMRV9ERVZJ Q0VfVEFCTEUob2YsIHp4X2NydGNfb2ZfbWF0Y2gpOworCitzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVy IHp4X2NydGNfZHJpdmVyID0geworCS5wcm9iZSA9IHp4X2NydGNfcHJvYmUsCisJLnJlbW92ZSA9 IHp4X2NydGNfcmVtb3ZlLAorCS5kcml2ZXIJPSB7CisJCS5uYW1lID0gInp4LWNydGMiLAorCQku b2ZfbWF0Y2hfdGFibGUJPSB6eF9jcnRjX29mX21hdGNoLAorCX0sCit9OwpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL3p0ZS96eF9jcnRjLmggYi9kcml2ZXJzL2dwdS9kcm0venRlL3p4X2Ny dGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmY4ODkyMDgwNTRj ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS96dGUvenhfY3J0Yy5oCkBAIC0w LDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxNiBMaW5hcm8gTHRkLgorICogQ29weXJp Z2h0IDIwMTYgWlRFIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBh cworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICov CisKKyNpZm5kZWYgX19aWF9DUlRDX0hfXworI2RlZmluZSBfX1pYX0NSVENfSF9fCisKKyNkZWZp bmUgVk9VX0NSVENfTUFTSwkJMHgzCisKKy8qIFZPVSBvdXRwdXQgaW50ZXJmYWNlcyAqLworZW51 bSB2b3VfaW5mX2lkIHsKKwlWT1VfSERNSQk9IDAsCisJVk9VX1JHQl9MQ0QJPSAxLAorCVZPVV9U Vl9FTkMJPSAyLAorCVZPVV9NSVBJX0RTSQk9IDMsCisJVk9VX0xWRFMJPSA0LAorCVZPVV9WR0EJ CT0gNSwKK307CisKK2VudW0gdm91X2luZl9kYXRhX3NlbCB7CisJVk9VX1lVVjQ0NAk9IDAsCisJ Vk9VX1JHQl8xMDEwMTAJPSAxLAorCVZPVV9SR0JfODg4CT0gMiwKKwlWT1VfUkdCXzY2Ngk9IDMs Cit9OworCitzdHJ1Y3Qgdm91X2luZiB7CisJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOwor CWVudW0gdm91X2luZl9pZCBpZDsKKwllbnVtIHZvdV9pbmZfZGF0YV9zZWwgZGF0YV9zZWw7CisJ dTMyIGNsb2Nrc19lbl9iaXRzOworCXUzMiBjbG9ja3Nfc2VsX2JpdHM7Cit9OworCit2b2lkIHZv dV9pbmZfZW5hYmxlKHN0cnVjdCB2b3VfaW5mICppbmYpOwordm9pZCB2b3VfaW5mX2Rpc2FibGUo c3RydWN0IHZvdV9pbmYgKmluZik7CisKK2ludCB6eF9jcnRjX2VuYWJsZV92Ymxhbmsoc3RydWN0 IGRybV9kZXZpY2UgKmRybSwgdW5zaWduZWQgaW50IHBpcGUpOwordm9pZCB6eF9jcnRjX2Rpc2Fi bGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHVuc2lnbmVkIGludCBwaXBlKTsKKwor I2VuZGlmIC8qIF9fWlhfQ1JUQ19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS96 dGUvenhfZHJtX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL3p0ZS96eF9kcm1fZHJ2LmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi41MWZhZmI4ZTVmNDMKLS0tIC9kZXYv bnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0venRlL3p4X2RybV9kcnYuYwpAQCAtMCwwICsxLDI1 OCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE2IExpbmFybyBMdGQuCisgKiBDb3B5cmlnaHQgMjAx NiBaVEUgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBw dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2lu Y2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5j bHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvY29tcG9uZW50Lmg+CisjaW5jbHVk ZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2dyYXBoLmg+CisjaW5jbHVkZSA8 bGludXgvb2ZfcGxhdGZvcm0uaD4KKworI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8 ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+CisjaW5j bHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZmJfaGVscGVy Lmg+CisjaW5jbHVkZSA8ZHJtL2RybV9mYl9jbWFfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2Ry bV9nZW1fY21hX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fb2YuaD4KKworI2luY2x1ZGUg Inp4X2RybV9kcnYuaCIKKyNpbmNsdWRlICJ6eF9jcnRjLmgiCisKK3N0YXRpYyB2b2lkIHp4X2Ry bV9mYl9vdXRwdXRfcG9sbF9jaGFuZ2VkKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCit7CisJc3Ry dWN0IHp4X2RybV9wcml2YXRlICpwcml2ID0gZHJtLT5kZXZfcHJpdmF0ZTsKKworCWRybV9mYmRl dl9jbWFfaG90cGx1Z19ldmVudChwcml2LT5mYmRldik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgZHJtX21vZGVfY29uZmlnX2Z1bmNzIHp4X2RybV9tb2RlX2NvbmZpZ19mdW5jcyA9IHsKKwku ZmJfY3JlYXRlID0gZHJtX2ZiX2NtYV9jcmVhdGUsCisJLm91dHB1dF9wb2xsX2NoYW5nZWQgPSB6 eF9kcm1fZmJfb3V0cHV0X3BvbGxfY2hhbmdlZCwKKwkuYXRvbWljX2NoZWNrID0gZHJtX2F0b21p Y19oZWxwZXJfY2hlY2ssCisJLmF0b21pY19jb21taXQgPSBkcm1fYXRvbWljX2hlbHBlcl9jb21t aXQsCit9OworCitzdGF0aWMgdm9pZCB6eF9kcm1fbGFzdGNsb3NlKHN0cnVjdCBkcm1fZGV2aWNl ICpkcm0pCit7CisJc3RydWN0IHp4X2RybV9wcml2YXRlICpwcml2ID0gZHJtLT5kZXZfcHJpdmF0 ZTsKKworCWRybV9mYmRldl9jbWFfcmVzdG9yZV9tb2RlKHByaXYtPmZiZGV2KTsKK30KKworc3Rh dGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgenhfZHJtX2ZvcHMgPSB7CisJLm93bmVy ID0gVEhJU19NT0RVTEUsCisJLm9wZW4gPSBkcm1fb3BlbiwKKwkucmVsZWFzZSA9IGRybV9yZWxl YXNlLAorCS51bmxvY2tlZF9pb2N0bCA9IGRybV9pb2N0bCwKKyNpZmRlZiBDT05GSUdfQ09NUEFU CisJLmNvbXBhdF9pb2N0bCA9IGRybV9jb21wYXRfaW9jdGwsCisjZW5kaWYKKwkucG9sbCA9IGRy bV9wb2xsLAorCS5yZWFkID0gZHJtX3JlYWQsCisJLmxsc2VlayA9IG5vb3BfbGxzZWVrLAorCS5t bWFwID0gZHJtX2dlbV9jbWFfbW1hcCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2RyaXZlciB6 eF9kcm1fZHJpdmVyID0geworCS5kcml2ZXJfZmVhdHVyZXMgPSBEUklWRVJfR0VNIHwgRFJJVkVS X01PREVTRVQgfCBEUklWRVJfUFJJTUUgfAorCQkJICAgRFJJVkVSX0FUT01JQywKKwkubGFzdGNs b3NlID0genhfZHJtX2xhc3RjbG9zZSwKKwkuZ2V0X3ZibGFua19jb3VudGVyID0gZHJtX3ZibGFu a19ub19od19jb3VudGVyLAorCS5lbmFibGVfdmJsYW5rID0genhfY3J0Y19lbmFibGVfdmJsYW5r LAorCS5kaXNhYmxlX3ZibGFuayA9IHp4X2NydGNfZGlzYWJsZV92YmxhbmssCisJLmdlbV9mcmVl X29iamVjdCA9IGRybV9nZW1fY21hX2ZyZWVfb2JqZWN0LAorCS5nZW1fdm1fb3BzID0gJmRybV9n ZW1fY21hX3ZtX29wcywKKwkuZHVtYl9jcmVhdGUgPSBkcm1fZ2VtX2NtYV9kdW1iX2NyZWF0ZSwK KwkuZHVtYl9tYXBfb2Zmc2V0ID0gZHJtX2dlbV9jbWFfZHVtYl9tYXBfb2Zmc2V0LAorCS5kdW1i X2Rlc3Ryb3kgPSBkcm1fZ2VtX2R1bWJfZGVzdHJveSwKKwkucHJpbWVfaGFuZGxlX3RvX2ZkID0g ZHJtX2dlbV9wcmltZV9oYW5kbGVfdG9fZmQsCisJLnByaW1lX2ZkX3RvX2hhbmRsZSA9IGRybV9n ZW1fcHJpbWVfZmRfdG9faGFuZGxlLAorCS5nZW1fcHJpbWVfZXhwb3J0ID0gZHJtX2dlbV9wcmlt ZV9leHBvcnQsCisJLmdlbV9wcmltZV9pbXBvcnQgPSBkcm1fZ2VtX3ByaW1lX2ltcG9ydCwKKwku Z2VtX3ByaW1lX2dldF9zZ190YWJsZSA9IGRybV9nZW1fY21hX3ByaW1lX2dldF9zZ190YWJsZSwK KwkuZ2VtX3ByaW1lX2ltcG9ydF9zZ190YWJsZSA9IGRybV9nZW1fY21hX3ByaW1lX2ltcG9ydF9z Z190YWJsZSwKKwkuZ2VtX3ByaW1lX3ZtYXAgPSBkcm1fZ2VtX2NtYV9wcmltZV92bWFwLAorCS5n ZW1fcHJpbWVfdnVubWFwID0gZHJtX2dlbV9jbWFfcHJpbWVfdnVubWFwLAorCS5nZW1fcHJpbWVf bW1hcCA9IGRybV9nZW1fY21hX3ByaW1lX21tYXAsCisJLmZvcHMgPSAmenhfZHJtX2ZvcHMsCisJ Lm5hbWUgPSAiengtdm91IiwKKwkuZGVzYyA9ICJaVEUgVk9VIENvbnRyb2xsZXIgRFJNIiwKKwku ZGF0ZSA9ICIyMDE2MDgxMSIsCisJLm1ham9yID0gMSwKKwkubWlub3IgPSAwLAorfTsKKworc3Rh dGljIGludCB6eF9kcm1fYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9k ZXZpY2UgKmRybTsKKwlzdHJ1Y3QgenhfZHJtX3ByaXZhdGUgKnByaXY7CisJaW50IHJldDsKKwor CXByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKKwlp ZiAoIXByaXYpCisJCXJldHVybiAtRU5PTUVNOworCisJZHJtID0gZHJtX2Rldl9hbGxvYygmenhf ZHJtX2RyaXZlciwgZGV2KTsKKwlpZiAoIWRybSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkcm0t PmRldl9wcml2YXRlID0gcHJpdjsKKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBkcm0pOworCisJZHJt X21vZGVfY29uZmlnX2luaXQoZHJtKTsKKwlkcm0tPm1vZGVfY29uZmlnLm1pbl93aWR0aCA9IDE2 OworCWRybS0+bW9kZV9jb25maWcubWluX2hlaWdodCA9IDE2OworCWRybS0+bW9kZV9jb25maWcu bWF4X3dpZHRoID0gNDA5NjsKKwlkcm0tPm1vZGVfY29uZmlnLm1heF9oZWlnaHQgPSA0MDk2Owor CWRybS0+bW9kZV9jb25maWcuZnVuY3MgPSAmenhfZHJtX21vZGVfY29uZmlnX2Z1bmNzOworCisJ cmV0ID0gZHJtX2Rldl9yZWdpc3Rlcihkcm0sIDApOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2Zy ZWU7CisKKwlyZXQgPSBjb21wb25lbnRfYmluZF9hbGwoZGV2LCBkcm0pOworCWlmIChyZXQpIHsK KwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYmluZCBhbGwgY29tcG9uZW50c1xuIik7CisJCWdvdG8g b3V0X3VucmVnaXN0ZXI7CisJfQorCisJcmV0ID0gZHJtX3ZibGFua19pbml0KGRybSwgZHJtLT5t b2RlX2NvbmZpZy5udW1fY3J0Yyk7CisJaWYgKHJldCA8IDApIHsKKwkJRFJNX0VSUk9SKCJmYWls ZWQgdG8gaW5pdGlhbGlzZSB2YmxhbmtcbiIpOworCQlnb3RvIG91dF91bmJpbmQ7CisJfQorCisJ LyoKKwkgKiBXZSB3aWxsIG1hbmFnZSBpcnEgaGFuZGxlciBvbiBvdXIgb3duLiAgSW4gdGhpcyBj YXNlLCBpcnFfZW5hYmxlZAorCSAqIG5lZWQgdG8gYmUgdHJ1ZSBmb3IgdXNpbmcgdmJsYW5rIGNv cmUgc3VwcG9ydC4KKwkgKi8KKwlkcm0tPmlycV9lbmFibGVkID0gdHJ1ZTsKKworCWRybV9tb2Rl X2NvbmZpZ19yZXNldChkcm0pOworCWRybV9rbXNfaGVscGVyX3BvbGxfaW5pdChkcm0pOworCisJ cHJpdi0+ZmJkZXYgPSBkcm1fZmJkZXZfY21hX2luaXQoZHJtLCAzMiwgZHJtLT5tb2RlX2NvbmZp Zy5udW1fY3J0YywKKwkJCQkJIGRybS0+bW9kZV9jb25maWcubnVtX2Nvbm5lY3Rvcik7CisJaWYg KElTX0VSUihwcml2LT5mYmRldikpIHsKKwkJcmV0ID0gUFRSX0VSUihwcml2LT5mYmRldik7CisJ CXByaXYtPmZiZGV2ID0gTlVMTDsKKwkJZ290byBvdXRfZmluaTsKKwl9CisKKwlyZXR1cm4gMDsK Kworb3V0X2Zpbmk6CisJZHJtX2ttc19oZWxwZXJfcG9sbF9maW5pKGRybSk7CisJZHJtX21vZGVf Y29uZmlnX2NsZWFudXAoZHJtKTsKKwlkcm1fdmJsYW5rX2NsZWFudXAoZHJtKTsKK291dF91bmJp bmQ6CisJY29tcG9uZW50X3VuYmluZF9hbGwoZGV2LCBkcm0pOworb3V0X3VucmVnaXN0ZXI6CisJ ZHJtX2Rldl91bnJlZ2lzdGVyKGRybSk7CitvdXRfZnJlZToKKwlkZXZfc2V0X2RydmRhdGEoZGV2 LCBOVUxMKTsKKwlkcm1fZGV2X3VucmVmKGRybSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGlj IHZvaWQgenhfZHJtX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9k ZXZpY2UgKmRybSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB6eF9kcm1fcHJpdmF0 ZSAqcHJpdiA9IGRybS0+ZGV2X3ByaXZhdGU7CisKKwlpZiAocHJpdi0+ZmJkZXYpIHsKKwkJZHJt X2ZiZGV2X2NtYV9maW5pKHByaXYtPmZiZGV2KTsKKwkJcHJpdi0+ZmJkZXYgPSBOVUxMOworCX0K Kwlkcm1fa21zX2hlbHBlcl9wb2xsX2ZpbmkoZHJtKTsKKwljb21wb25lbnRfdW5iaW5kX2FsbChk ZXYsIGRybSk7CisJZHJtX3ZibGFua19jbGVhbnVwKGRybSk7CisJZHJtX21vZGVfY29uZmlnX2Ns ZWFudXAoZHJtKTsKKwlkcm1fZGV2X3VucmVnaXN0ZXIoZHJtKTsKKwlkcm1fZGV2X3VucmVmKGRy bSk7CisJZHJtLT5kZXZfcHJpdmF0ZSA9IE5VTEw7CisJZGV2X3NldF9kcnZkYXRhKGRldiwgTlVM TCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcG9uZW50X21hc3Rlcl9vcHMgenhfZHJt X21hc3Rlcl9vcHMgPSB7CisJLmJpbmQgPSB6eF9kcm1fYmluZCwKKwkudW5iaW5kID0genhfZHJt X3VuYmluZCwKK307CisKK3N0YXRpYyBpbnQgY29tcGFyZV9vZihzdHJ1Y3QgZGV2aWNlICpkZXYs IHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIGRldi0+b2Zfbm9kZSA9PSBkYXRhOworfQorCitzdGF0 aWMgaW50IHp4X2RybV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0 cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IGRldmljZV9ub2RlICpwYXJl bnQgPSBkZXYtPm9mX25vZGU7CisJc3RydWN0IGRldmljZV9ub2RlICpjaGlsZDsKKwlzdHJ1Y3Qg Y29tcG9uZW50X21hdGNoICptYXRjaCA9IE5VTEw7CisJaW50IHJldDsKKworCXJldCA9IG9mX3Bs YXRmb3JtX3BvcHVsYXRlKHBhcmVudCwgTlVMTCwgTlVMTCwgZGV2KTsKKwlpZiAocmV0KQorCQly ZXR1cm4gcmV0OworCisJZm9yX2VhY2hfYXZhaWxhYmxlX2NoaWxkX29mX25vZGUocGFyZW50LCBj aGlsZCkgeworCQljb21wb25lbnRfbWF0Y2hfYWRkKGRldiwgJm1hdGNoLCBjb21wYXJlX29mLCBj aGlsZCk7CisJCW9mX25vZGVfcHV0KGNoaWxkKTsKKwl9CisKKwlyZXR1cm4gY29tcG9uZW50X21h c3Rlcl9hZGRfd2l0aF9tYXRjaChkZXYsICZ6eF9kcm1fbWFzdGVyX29wcywgbWF0Y2gpOworfQor CitzdGF0aWMgaW50IHp4X2RybV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikK K3sKKwljb21wb25lbnRfbWFzdGVyX2RlbCgmcGRldi0+ZGV2LCAmenhfZHJtX21hc3Rlcl9vcHMp OworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB6eF9k cm1fb2ZfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gInp0ZSx6eDI5NjcxOC12b3UiLCB9 LAorCXsgLyogZW5kICovIH0sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgenhfZHJtX29m X21hdGNoKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgenhfZHJtX3BsYXRmb3Jt X2RyaXZlciA9IHsKKwkucHJvYmUgPSB6eF9kcm1fcHJvYmUsCisJLnJlbW92ZSA9IHp4X2RybV9y ZW1vdmUsCisJLmRyaXZlcgk9IHsKKwkJLm5hbWUgPSAiengtZHJtIiwKKwkJLm9mX21hdGNoX3Rh YmxlCT0genhfZHJtX29mX21hdGNoLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3Jt X2RyaXZlciAqZHJpdmVyc1tdID0geworCSZ6eF9jcnRjX2RyaXZlciwKKwkmenhfaGRtaV9kcml2 ZXIsCisJJnp4X2RybV9wbGF0Zm9ybV9kcml2ZXIsCit9OworCitzdGF0aWMgaW50IHp4X2RybV9p bml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX3JlZ2lzdGVyX2RyaXZlcnMoZHJpdmVycywg QVJSQVlfU0laRShkcml2ZXJzKSk7Cit9Cittb2R1bGVfaW5pdCh6eF9kcm1faW5pdCk7CisKK3N0 YXRpYyB2b2lkIHp4X2RybV9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fdW5yZWdpc3Rlcl9kcml2 ZXJzKGRyaXZlcnMsIEFSUkFZX1NJWkUoZHJpdmVycykpOworfQorbW9kdWxlX2V4aXQoenhfZHJt X2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJTaGF3biBHdW8gPHNoYXduLmd1b0BsaW5hcm8ub3Jn PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJaVEUgWlggVk9VIERSTSBkcml2ZXIiKTsKK01PRFVM RV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS96dGUvenhf ZHJtX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL3p0ZS96eF9kcm1fZHJ2LmgKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4xNGM3NDk5NDkxNTEKLS0tIC9kZXYvbnVsbAor KysgYi9kcml2ZXJzL2dwdS9kcm0venRlL3p4X2RybV9kcnYuaApAQCAtMCwwICsxLDIyIEBACisv KgorICogQ29weXJpZ2h0IDIwMTYgTGluYXJvIEx0ZC4KKyAqIENvcHlyaWdodCAyMDE2IFpURSBD b3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hl ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaWZuZGVmIF9f WlhfRFJNX0RSVl9IX18KKyNkZWZpbmUgX19aWF9EUk1fRFJWX0hfXworCitzdHJ1Y3QgenhfZHJt X3ByaXZhdGUgeworCXN0cnVjdCBkcm1fZmJkZXZfY21hICpmYmRldjsKKwlzdHJ1Y3Qgenhfdm91 X2h3ICp2b3U7Cit9OworCitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciB6eF9jcnRjX2Ry aXZlcjsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHp4X2hkbWlfZHJpdmVyOworCisj ZW5kaWYgLyogX19aWF9EUk1fRFJWX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L3p0ZS96eF9oZG1pLmMgYi9kcml2ZXJzL2dwdS9kcm0venRlL3p4X2hkbWkuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjVhYWFiODQ5M2IxYgotLS0gL2Rldi9udWxs CisrKyBiL2RyaXZlcnMvZ3B1L2RybS96dGUvenhfaGRtaS5jCkBAIC0wLDAgKzEsNTQwIEBACisv KgorICogQ29weXJpZ2h0IDIwMTYgTGluYXJvIEx0ZC4KKyAqIENvcHlyaWdodCAyMDE2IFpURSBD b3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hl ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8 ZHJtL2RybV9vZi5oPgorI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9h dG9taWNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgorI2luY2x1 ZGUgPGRybS9kcm1fZWRpZC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxp bnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZXJy Lmg+CisjaW5jbHVkZSA8bGludXgvaGRtaS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9zeXNjb24u aD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgor I2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBvbmVudC5o PgorCisjaW5jbHVkZSAienhfY3J0Yy5oIgorCisjZGVmaW5lIEZVTkNfU0VMCQkJMHgwMDBiCisj ZGVmaW5lIEZVTkNfSERNSV9FTgkJCUJJVCgwKQorI2RlZmluZSBDTEtQV0QJCQkJMHgwMDBkCisj ZGVmaW5lIENMS1BXRF9QRElEQ0sJCQlCSVQoMikKKyNkZWZpbmUgUFdEX1NSU1QJCQkweDAwMTAK KyNkZWZpbmUgUDJUX0NUUkwJCQkweDAwNjYKKyNkZWZpbmUgUDJUX0RDX1BLVF9FTgkJCUJJVCg3 KQorI2RlZmluZSBMMV9JTlRSX1NUQVQJCQkweDAwN2UKKyNkZWZpbmUgTDFfSU5UUl9TVEFUX0lO VFIxCQlCSVQoMCkKKyNkZWZpbmUgSU5UUjFfU1RBVAkJCTB4MDA4ZgorI2RlZmluZSBJTlRSMV9N QVNLCQkJMHgwMDk1CisjZGVmaW5lIElOVFIxX01PTklUT1JfREVURUNUCQkoQklUKDUpIHwgQklU KDYpKQorI2RlZmluZSBaWF9ERENfQUREUgkJCTB4MDBlZAorI2RlZmluZSBaWF9ERENfU0VHTQkJ CTB4MDBlZQorI2RlZmluZSBaWF9ERENfT0ZGU0VUCQkJMHgwMGVmCisjZGVmaW5lIFpYX0REQ19E SU5fQ05UMQkJCTB4MDBmMAorI2RlZmluZSBaWF9ERENfRElOX0NOVDIJCQkweDAwZjEKKyNkZWZp bmUgWlhfRERDX0NNRAkJCTB4MDBmMworI2RlZmluZSBERENfQ01EX01BU0sJCQkweGYKKyNkZWZp bmUgRERDX0NNRF9DTEVBUl9GSUZPCQkweDkKKyNkZWZpbmUgRERDX0NNRF9TRVFVRU5USUFMX1JF QUQJCTB4MgorI2RlZmluZSBaWF9ERENfREFUQQkJCTB4MDBmNAorI2RlZmluZSBaWF9ERENfRE9V VF9DTlQJCQkweDAwZjUKKyNkZWZpbmUgRERDX0RPVVRfQ05UX01BU0sJCTB4MWYKKyNkZWZpbmUg VEVTVF9UWENUUkwJCQkweDAwZjcKKyNkZWZpbmUgVEVTVF9UWENUUkxfSERNSV9NT0RFCQlCSVQo MSkKKyNkZWZpbmUgSERNSUNUTDQJCQkweDAyMzUKKyNkZWZpbmUgVFBJX0hQRF9SU0VOCQkJMHgw NjNiCisjZGVmaW5lIFRQSV9IUERfQ09OTkVDVElPTgkJKEJJVCgxKSB8IEJJVCgyKSkKKyNkZWZp bmUgVFBJX0lORk9fRlNFTAkJCTB4MDZiZgorI2RlZmluZSBGU0VMX0FWSQkJCTAKKyNkZWZpbmUg RlNFTF9HQkQJCQkxCisjZGVmaW5lIEZTRUxfQVVESU8JCQkyCisjZGVmaW5lIEZTRUxfU1BECQkJ MworI2RlZmluZSBGU0VMX01QRUcJCQk0CisjZGVmaW5lIEZTRUxfVlNJRgkJCTUKKyNkZWZpbmUg VFBJX0lORk9fQjAJCQkweDA2YzAKKyNkZWZpbmUgVFBJX0lORk9fRU4JCQkweDA2ZGYKKyNkZWZp bmUgVFBJX0lORk9fVFJBTlNfRU4JCUJJVCg3KQorI2RlZmluZSBUUElfSU5GT19UUkFOU19SUFQJ CUJJVCg2KQorI2RlZmluZSBUUElfRERDX01BU1RFUl9FTgkJMHgwNmY4CisjZGVmaW5lIEhXX0RE Q19NQVNURVIJCQlCSVQoNykKKworI2RlZmluZSBaWF9IRE1JX0lORk9GUkFNRV9TSVpFCQkzMQor CitzdHJ1Y3QgenhfaGRtaSB7CisJc3RydWN0IGRybV9jb25uZWN0b3IgY29ubmVjdG9yOworCXN0 cnVjdCBkcm1fZW5jb2RlciBlbmNvZGVyOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3Qg ZHJtX2RldmljZSAqZHJtOworCXZvaWQgX19pb21lbSAqbW1pbzsKKwlzdHJ1Y3QgY2xrICpjZWNf Y2xrOworCXN0cnVjdCBjbGsgKm9zY19jbGs7CisJc3RydWN0IGNsayAqeGNsazsKKwlib29sIHNp bmtfaXNfaGRtaTsKKwlib29sIHNpbmtfaGFzX2F1ZGlvOworCXN0cnVjdCB2b3VfaW5mICppbmY7 Cit9OworCisjZGVmaW5lIHRvX3p4X2hkbWkoeCkJY29udGFpbmVyX29mKHgsIHN0cnVjdCB6eF9o ZG1pLCB4KQorCitzdGF0aWMgc3RydWN0IHZvdV9pbmYgdm91X2luZl9oZG1pID0geworCS5pZCA9 IFZPVV9IRE1JLAorCS5kYXRhX3NlbCA9IFZPVV9ZVVY0NDQsCisJLmNsb2Nrc19lbl9iaXRzID0g QklUKDI0KSB8IEJJVCgxOCkgfCBCSVQoNiksCisJLmNsb2Nrc19zZWxfYml0cyA9IEJJVCgxMykg fCBCSVQoMiksCit9OworCitzdGF0aWMgaW5saW5lIHU4IGhkbWlfcmVhZGIoc3RydWN0IHp4X2hk bWkgKmhkbWksIHUxNiBvZmZzZXQpCit7CisJcmV0dXJuIHJlYWRsX3JlbGF4ZWQoaGRtaS0+bW1p byArIG9mZnNldCAqIDQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaGRtaV93cml0ZWIoc3Ry dWN0IHp4X2hkbWkgKmhkbWksIHUxNiBvZmZzZXQsIHU4IHZhbCkKK3sKKwl3cml0ZWxfcmVsYXhl ZCh2YWwsIGhkbWktPm1taW8gKyBvZmZzZXQgKiA0KTsKK30KKworc3RhdGljIGludCB6eF9oZG1p X2luZm9mcmFtZV90cmFucyhzdHJ1Y3QgenhfaGRtaSAqaGRtaSwKKwkJCQkgICB1bmlvbiBoZG1p X2luZm9mcmFtZSAqZnJhbWUsIHU4IGZzZWwpCit7CisJdTggYnVmZmVyW1pYX0hETUlfSU5GT0ZS QU1FX1NJWkVdOworCXU4IHZhbDsKKwlzc2l6ZV90IG51bTsKKwlpbnQgaTsKKworCWhkbWlfd3Jp dGViKGhkbWksIFRQSV9JTkZPX0ZTRUwsIGZzZWwpOworCisJbnVtID0gaGRtaV9pbmZvZnJhbWVf cGFjayhmcmFtZSwgYnVmZmVyLCBaWF9IRE1JX0lORk9GUkFNRV9TSVpFKTsKKwlpZiAobnVtIDwg MCkKKwkJcmV0dXJuIG51bTsKKworCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykKKwkJaGRtaV93 cml0ZWIoaGRtaSwgVFBJX0lORk9fQjAgKyBpLCBidWZmZXJbaV0pOworCisJdmFsID0gaGRtaV9y ZWFkYihoZG1pLCBUUElfSU5GT19FTik7CisJdmFsIHw9IFRQSV9JTkZPX1RSQU5TX0VOIHwgVFBJ X0lORk9fVFJBTlNfUlBUOworCWhkbWlfd3JpdGViKGhkbWksIFRQSV9JTkZPX0VOLCB2YWwpOwor CisJcmV0dXJuIG51bTsKK30KKworc3RhdGljIGludCB6eF9oZG1pX2NvbmZpZ192aWRlb192c2ko c3RydWN0IHp4X2hkbWkgKmhkbWksCisJCQkJICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpt b2RlKQoreworCXVuaW9uIGhkbWlfaW5mb2ZyYW1lIGZyYW1lOworCWludCByZXQ7CisKKwlyZXQg PSBkcm1faGRtaV92ZW5kb3JfaW5mb2ZyYW1lX2Zyb21fZGlzcGxheV9tb2RlKCZmcmFtZS52ZW5k b3IuaGRtaSwKKwkJCQkJCQkgIG1vZGUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwly ZXR1cm4genhfaGRtaV9pbmZvZnJhbWVfdHJhbnMoaGRtaSwgJmZyYW1lLCBGU0VMX1ZTSUYpOwor fQorCitzdGF0aWMgaW50IHp4X2hkbWlfY29uZmlnX3ZpZGVvX2F2aShzdHJ1Y3QgenhfaGRtaSAq aGRtaSwKKwkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJdW5pb24g aGRtaV9pbmZvZnJhbWUgZnJhbWU7CisJaW50IHJldDsKKworCXJldCA9IGRybV9oZG1pX2F2aV9p bmZvZnJhbWVfZnJvbV9kaXNwbGF5X21vZGUoJmZyYW1lLmF2aSwgbW9kZSk7CisJaWYgKHJldCkK KwkJcmV0dXJuIHJldDsKKworCS8qIFdlIGFsd2F5cyB1c2UgWVVWNDQ0IGZvciBIRE1JIG91dHB1 dC4gKi8KKwlmcmFtZS5hdmkuY29sb3JzcGFjZSA9IEhETUlfQ09MT1JTUEFDRV9ZVVY0NDQ7CisK KwlyZXR1cm4genhfaGRtaV9pbmZvZnJhbWVfdHJhbnMoaGRtaSwgJmZyYW1lLCBGU0VMX0FWSSk7 Cit9CisKK3N0YXRpYyB2b2lkIHp4X2hkbWlfZW5jb2Rlcl9tb2RlX3NldChzdHJ1Y3QgZHJtX2Vu Y29kZXIgKmVuY29kZXIsCisJCQkJICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwK KwkJCQkgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGpfbW9kZSkKK3sKKwlzdHJ1Y3Qg enhfaGRtaSAqaGRtaSA9IHRvX3p4X2hkbWkoZW5jb2Rlcik7CisKKwlpZiAoaGRtaS0+c2lua19p c19oZG1pKSB7CisJCXp4X2hkbWlfY29uZmlnX3ZpZGVvX2F2aShoZG1pLCBtb2RlKTsKKwkJenhf aGRtaV9jb25maWdfdmlkZW9fdnNpKGhkbWksIG1vZGUpOworCX0KK30KKworc3RhdGljIHZvaWQg enhfaGRtaV9lbmNvZGVyX2VuYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJ c3RydWN0IHp4X2hkbWkgKmhkbWkgPSB0b196eF9oZG1pKGVuY29kZXIpOworCisJdm91X2luZl9l bmFibGUoaGRtaS0+aW5mKTsKK30KKworc3RhdGljIHZvaWQgenhfaGRtaV9lbmNvZGVyX2Rpc2Fi bGUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCXN0cnVjdCB6eF9oZG1pICpoZG1p ID0gdG9fenhfaGRtaShlbmNvZGVyKTsKKworCXZvdV9pbmZfZGlzYWJsZShoZG1pLT5pbmYpOwor fQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcyB6eF9oZG1p X2VuY29kZXJfaGVscGVyX2Z1bmNzID0geworCS5lbmFibGUJPSB6eF9oZG1pX2VuY29kZXJfZW5h YmxlLAorCS5kaXNhYmxlID0genhfaGRtaV9lbmNvZGVyX2Rpc2FibGUsCisJLm1vZGVfc2V0ID0g enhfaGRtaV9lbmNvZGVyX21vZGVfc2V0LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1f ZW5jb2Rlcl9mdW5jcyB6eF9oZG1pX2VuY29kZXJfZnVuY3MgPSB7CisJLmRlc3Ryb3kgPSBkcm1f ZW5jb2Rlcl9jbGVhbnVwLAorfTsKKworc3RhdGljIGludCB6eF9oZG1pX2dldF9lZGlkX2Jsb2Nr KHZvaWQgKmRhdGEsIHU4ICpidWYsIHVuc2lnbmVkIGludCBibG9jaywKKwkJCQkgIHNpemVfdCBs ZW4pCit7CisJc3RydWN0IHp4X2hkbWkgKmhkbWkgPSBkYXRhOworCWludCByZXRyeSA9IDA7CisJ aW50IHJldCA9IDA7CisJaW50IGkgPSAwOworCXU4IHZhbDsKKworCS8qIEVuYWJsZSBEREMgbWFz dGVyIGFjY2VzcyAqLworCXZhbCA9IGhkbWlfcmVhZGIoaGRtaSwgVFBJX0REQ19NQVNURVJfRU4p OworCXZhbCB8PSBIV19ERENfTUFTVEVSOworCWhkbWlfd3JpdGViKGhkbWksIFRQSV9ERENfTUFT VEVSX0VOLCB2YWwpOworCisJaGRtaV93cml0ZWIoaGRtaSwgWlhfRERDX0FERFIsIDB4YTApOwor CWhkbWlfd3JpdGViKGhkbWksIFpYX0REQ19PRkZTRVQsIGJsb2NrICogRURJRF9MRU5HVEgpOwor CS8qIEJpdHMgWzk6OF0gb2YgYnl0ZXMgKi8KKwloZG1pX3dyaXRlYihoZG1pLCBaWF9ERENfRElO X0NOVDIsIChsZW4gPj4gOCkgJiAweGZmKTsKKwkvKiBCaXRzIFs3OjBdIG9mIGJ5dGVzICovCisJ aGRtaV93cml0ZWIoaGRtaSwgWlhfRERDX0RJTl9DTlQxLCBsZW4gJiAweGZmKTsKKworCS8qIENs ZWFyIEZJRk8gKi8KKwl2YWwgPSBoZG1pX3JlYWRiKGhkbWksIFpYX0REQ19DTUQpOworCXZhbCAm PSB+RERDX0NNRF9NQVNLOworCXZhbCB8PSBERENfQ01EX0NMRUFSX0ZJRk87CisJaGRtaV93cml0 ZWIoaGRtaSwgWlhfRERDX0NNRCwgdmFsKTsKKworCS8qIEtpY2sgb2ZmIHRoZSByZWFkICovCisJ dmFsID0gaGRtaV9yZWFkYihoZG1pLCBaWF9ERENfQ01EKTsKKwl2YWwgJj0gfkREQ19DTURfTUFT SzsKKwl2YWwgfD0gRERDX0NNRF9TRVFVRU5USUFMX1JFQUQ7CisJaGRtaV93cml0ZWIoaGRtaSwg WlhfRERDX0NNRCwgdmFsKTsKKworCXdoaWxlIChsZW4gPiAwKSB7CisJCWludCBjbnQsIGo7CisK KwkJLyogRklGTyBuZWVkcyBzb21lIHRpbWUgdG8gZ2V0IHJlYWR5ICovCisJCXVzbGVlcF9yYW5n ZSg1MDAsIDEwMDApOworCisJCWNudCA9IGhkbWlfcmVhZGIoaGRtaSwgWlhfRERDX0RPVVRfQ05U KSAmIEREQ19ET1VUX0NOVF9NQVNLOworCQlpZiAoY250ID09IDApIHsKKwkJCWlmICgrK3JldHJ5 ID4gNSkgeworCQkJCWRldl9lcnIoaGRtaS0+ZGV2LCAiRERDIHJlYWQgdGltZWQgb3V0ISIpOwor CQkJCXJldCA9IC1FVElNRURPVVQ7CisJCQkJYnJlYWs7CisJCQl9CisJCQljb250aW51ZTsKKwkJ fQorCisJCWZvciAoaiA9IDA7IGogPCBjbnQ7IGorKykKKwkJCWJ1ZltpKytdID0gaGRtaV9yZWFk YihoZG1pLCBaWF9ERENfREFUQSk7CisJCWxlbiAtPSBjbnQ7CisJfQorCisJLyogRGlzYWJsZSBE REMgbWFzdGVyIGFjY2VzcyAqLworCXZhbCA9IGhkbWlfcmVhZGIoaGRtaSwgVFBJX0REQ19NQVNU RVJfRU4pOworCXZhbCAmPSB+SFdfRERDX01BU1RFUjsKKwloZG1pX3dyaXRlYihoZG1pLCBUUElf RERDX01BU1RFUl9FTiwgdmFsKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgenhf aGRtaV9jb25uZWN0b3JfZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3Ip Cit7CisJc3RydWN0IHp4X2hkbWkgKmhkbWkgPSB0b196eF9oZG1pKGNvbm5lY3Rvcik7CisJc3Ry dWN0IGVkaWQgKmVkaWQ7CisJaW50IHJldCA9IDA7CisKKwllZGlkID0gZHJtX2RvX2dldF9lZGlk KGNvbm5lY3RvciwgenhfaGRtaV9nZXRfZWRpZF9ibG9jaywgaGRtaSk7CisJaWYgKGVkaWQpIHsK KwkJaGRtaS0+c2lua19pc19oZG1pID0gZHJtX2RldGVjdF9oZG1pX21vbml0b3IoZWRpZCk7CisJ CWhkbWktPnNpbmtfaGFzX2F1ZGlvID0gZHJtX2RldGVjdF9tb25pdG9yX2F1ZGlvKGVkaWQpOwor CQlkcm1fbW9kZV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVydHkoY29ubmVjdG9yLCBlZGlk KTsKKwkJcmV0ID0gZHJtX2FkZF9lZGlkX21vZGVzKGNvbm5lY3RvciwgZWRpZCk7CisJCWtmcmVl KGVkaWQpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBlbnVtIGRybV9tb2RlX3N0 YXR1cworenhfaGRtaV9jb25uZWN0b3JfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAq Y29ubmVjdG9yLAorCQkJICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwly ZXR1cm4gTU9ERV9PSzsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fY29ubmVjdG9yX2hlbHBlcl9m dW5jcyB6eF9oZG1pX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgPSB7CisJLmdldF9tb2RlcyA9IHp4 X2hkbWlfY29ubmVjdG9yX2dldF9tb2RlcywKKwkubW9kZV92YWxpZCA9IHp4X2hkbWlfY29ubmVj dG9yX21vZGVfdmFsaWQsCit9OworCitzdGF0aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cwor enhfaGRtaV9jb25uZWN0b3JfZGV0ZWN0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3Is IGJvb2wgZm9yY2UpCit7CisJc3RydWN0IHp4X2hkbWkgKmhkbWkgPSB0b196eF9oZG1pKGNvbm5l Y3Rvcik7CisKKwlyZXR1cm4gKGhkbWlfcmVhZGIoaGRtaSwgVFBJX0hQRF9SU0VOKSAmIFRQSV9I UERfQ09OTkVDVElPTikgPworCQljb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZCA6IGNvbm5lY3Rv cl9zdGF0dXNfZGlzY29ubmVjdGVkOworfQorCitzdGF0aWMgdm9pZCB6eF9oZG1pX2Nvbm5lY3Rv cl9kZXN0cm95KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJZHJtX2Nvbm5l Y3Rvcl91bnJlZ2lzdGVyKGNvbm5lY3Rvcik7CisJZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwKGNvbm5l Y3Rvcik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5jcyB6eF9o ZG1pX2Nvbm5lY3Rvcl9mdW5jcyA9IHsKKwkuZHBtcyA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5l Y3Rvcl9kcG1zLAorCS5maWxsX21vZGVzID0gZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVfY29ubmVj dG9yX21vZGVzLAorCS5kZXRlY3QgPSB6eF9oZG1pX2Nvbm5lY3Rvcl9kZXRlY3QsCisJLmRlc3Ry b3kgPSB6eF9oZG1pX2Nvbm5lY3Rvcl9kZXN0cm95LAorCS5yZXNldCA9IGRybV9hdG9taWNfaGVs cGVyX2Nvbm5lY3Rvcl9yZXNldCwKKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRybV9hdG9t aWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19kZXN0cm95X3N0 YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rlc3Ryb3lfc3RhdGUsCit9OworCitz dGF0aWMgaW50IHp4X2hkbWlfcmVnaXN0ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgc3RydWN0 IHp4X2hkbWkgKmhkbWkpCit7CisJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyID0gJmhkbWkt PmVuY29kZXI7CisKKwllbmNvZGVyLT5wb3NzaWJsZV9jcnRjcyA9IFZPVV9DUlRDX01BU0s7CisK Kwlkcm1fZW5jb2Rlcl9pbml0KGRybSwgZW5jb2RlciwgJnp4X2hkbWlfZW5jb2Rlcl9mdW5jcywK KwkJCSBEUk1fTU9ERV9FTkNPREVSX1RNRFMsIE5VTEwpOworCWRybV9lbmNvZGVyX2hlbHBlcl9h ZGQoZW5jb2RlciwgJnp4X2hkbWlfZW5jb2Rlcl9oZWxwZXJfZnVuY3MpOworCisJaGRtaS0+Y29u bmVjdG9yLnBvbGxlZCA9IERSTV9DT05ORUNUT1JfUE9MTF9IUEQ7CisKKwlkcm1fY29ubmVjdG9y X2luaXQoZHJtLCAmaGRtaS0+Y29ubmVjdG9yLCAmenhfaGRtaV9jb25uZWN0b3JfZnVuY3MsCisJ CQkgICBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUEpOworCWRybV9jb25uZWN0b3JfaGVscGVyX2Fk ZCgmaGRtaS0+Y29ubmVjdG9yLAorCQkJCSAmenhfaGRtaV9jb25uZWN0b3JfaGVscGVyX2Z1bmNz KTsKKworCWRybV9tb2RlX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2RlcigmaGRtaS0+Y29ubmVjdG9y LCBlbmNvZGVyKTsKKwlkcm1fY29ubmVjdG9yX3JlZ2lzdGVyKCZoZG1pLT5jb25uZWN0b3IpOwor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCB6eF9oZG1pX2lycV90aHJlYWQo aW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCB6eF9oZG1pICpoZG1pID0gZGV2X2lk OworCisJZHJtX2hlbHBlcl9ocGRfaXJxX2V2ZW50KGhkbWktPmNvbm5lY3Rvci5kZXYpOworCisJ cmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgenhfaGRtaV9pcnFf aGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHp4X2hkbWkgKmhkbWkg PSBkZXZfaWQ7CisJdTggbHN0YXQ7CisKKwlsc3RhdCA9IGhkbWlfcmVhZGIoaGRtaSwgTDFfSU5U Ul9TVEFUKTsKKworCS8qIE1vbml0b3IgZGV0ZWN0L0hQRCBpbnRlcnJ1cHQgKi8KKwlpZiAobHN0 YXQgJiBMMV9JTlRSX1NUQVRfSU5UUjEpIHsKKwkJdTggc3RhdCA9IGhkbWlfcmVhZGIoaGRtaSwg SU5UUjFfU1RBVCk7CisKKwkJaGRtaV93cml0ZWIoaGRtaSwgSU5UUjFfU1RBVCwgc3RhdCk7CisJ CWlmIChzdGF0ICYgSU5UUjFfTU9OSVRPUl9ERVRFQ1QpCisJCQlyZXR1cm4gSVJRX1dBS0VfVEhS RUFEOworCX0KKworCXJldHVybiBJUlFfTk9ORTsKK30KKworc3RhdGljIHZvaWQgenhfaGRtaV9w aHlfc3RhcnQoc3RydWN0IHp4X2hkbWkgKmhkbWkpCit7CisJLyogQ29weSBmcm9tIFpURSBCU1Ag Y29kZSAqLworCWhkbWlfd3JpdGViKGhkbWksIDB4MjIyLCAweDApOworCWhkbWlfd3JpdGViKGhk bWksIDB4MjI0LCAweDQpOworCWhkbWlfd3JpdGViKGhkbWksIDB4OTA5LCAweDApOworCWhkbWlf d3JpdGViKGhkbWksIDB4N2IwLCAweDkwKTsKKwloZG1pX3dyaXRlYihoZG1pLCAweDdiMSwgMHgw MCk7CisJaGRtaV93cml0ZWIoaGRtaSwgMHg3YjIsIDB4YTcpOworCWhkbWlfd3JpdGViKGhkbWks IDB4N2I4LCAweGFhKTsKKwloZG1pX3dyaXRlYihoZG1pLCAweDdiMiwgMHhhNyk7CisJaGRtaV93 cml0ZWIoaGRtaSwgMHg3YjMsIDB4MGYpOworCWhkbWlfd3JpdGViKGhkbWksIDB4N2I0LCAweDBm KTsKKwloZG1pX3dyaXRlYihoZG1pLCAweDdiNSwgMHg1NSk7CisJaGRtaV93cml0ZWIoaGRtaSwg MHg3YjcsIDB4MDMpOworCWhkbWlfd3JpdGViKGhkbWksIDB4N2I5LCAweDEyKTsKKwloZG1pX3dy aXRlYihoZG1pLCAweDdiYSwgMHgzMik7CisJaGRtaV93cml0ZWIoaGRtaSwgMHg3YmMsIDB4Njgp OworCWhkbWlfd3JpdGViKGhkbWksIDB4N2JlLCAweDQwKTsKKwloZG1pX3dyaXRlYihoZG1pLCAw eDdiZiwgMHg4NCk7CisJaGRtaV93cml0ZWIoaGRtaSwgMHg3YzEsIDB4MGYpOworCWhkbWlfd3Jp dGViKGhkbWksIDB4N2M4LCAweDAyKTsKKwloZG1pX3dyaXRlYihoZG1pLCAweDdjOSwgMHgwMyk7 CisJaGRtaV93cml0ZWIoaGRtaSwgMHg3Y2EsIDB4NDApOworCWhkbWlfd3JpdGViKGhkbWksIDB4 N2RjLCAweDMxKTsKKwloZG1pX3dyaXRlYihoZG1pLCAweDdlMiwgMHgwNCk7CisJaGRtaV93cml0 ZWIoaGRtaSwgMHg3ZTAsIDB4MDYpOworCWhkbWlfd3JpdGViKGhkbWksIDB4N2NiLCAweDY4KTsK KwloZG1pX3dyaXRlYihoZG1pLCAweDdmOSwgMHgwMik7CisJaGRtaV93cml0ZWIoaGRtaSwgMHg3 YjYsIDB4MDIpOworCWhkbWlfd3JpdGViKGhkbWksIDB4N2YzLCAweDApOworfQorCitzdGF0aWMg dm9pZCB6eF9oZG1pX2h3X2luaXQoc3RydWN0IHp4X2hkbWkgKmhkbWkpCit7CisJdTggdmFsOwor CisJLyogU29mdHdhcmUgcmVzZXQgKi8KKwloZG1pX3dyaXRlYihoZG1pLCBQV0RfU1JTVCwgMSk7 CisKKwkvKiBFbmFibGUgcGNsayAqLworCXZhbCA9IGhkbWlfcmVhZGIoaGRtaSwgQ0xLUFdEKTsK Kwl2YWwgfD0gQ0xLUFdEX1BESURDSzsKKwloZG1pX3dyaXRlYihoZG1pLCBDTEtQV0QsIHZhbCk7 CisKKwkvKiBFbmFibGUgSERNSSBmb3IgVFggKi8KKwl2YWwgPSBoZG1pX3JlYWRiKGhkbWksIEZV TkNfU0VMKTsKKwl2YWwgfD0gRlVOQ19IRE1JX0VOOworCWhkbWlfd3JpdGViKGhkbWksIEZVTkNf U0VMLCB2YWwpOworCisJLyogRW5hYmxlIGRlZXAgY29sb3IgcGFja2V0ICovCisJdmFsID0gaGRt aV9yZWFkYihoZG1pLCBQMlRfQ1RSTCk7CisJdmFsIHw9IFAyVF9EQ19QS1RfRU47CisJaGRtaV93 cml0ZWIoaGRtaSwgUDJUX0NUUkwsIHZhbCk7CisKKwkvKiBFbmFibGUgSERNSS9NSEwgbW9kZSBm b3Igb3V0cHV0ICovCisJdmFsID0gaGRtaV9yZWFkYihoZG1pLCBURVNUX1RYQ1RSTCk7CisJdmFs IHw9IFRFU1RfVFhDVFJMX0hETUlfTU9ERTsKKwloZG1pX3dyaXRlYihoZG1pLCBURVNUX1RYQ1RS TCwgdmFsKTsKKworCS8qIENvbmZpZ3VyZSByZWdfcWNfc2VsICovCisJaGRtaV93cml0ZWIoaGRt aSwgSERNSUNUTDQsIDB4Myk7CisKKwkvKiBFbmFibGUgaW50ZXJydXB0ICovCisJdmFsID0gaGRt aV9yZWFkYihoZG1pLCBJTlRSMV9NQVNLKTsKKwl2YWwgfD0gSU5UUjFfTU9OSVRPUl9ERVRFQ1Q7 CisJaGRtaV93cml0ZWIoaGRtaSwgSU5UUjFfTUFTSywgdmFsKTsKKworCS8qIENsZWFyIHJlc2V0 IGZvciBub3JtYWwgb3BlcmF0aW9uICovCisJaGRtaV93cml0ZWIoaGRtaSwgUFdEX1NSU1QsIDAp OworCisJLyogU3RhcnQgdXAgcGh5ICovCisJenhfaGRtaV9waHlfc3RhcnQoaGRtaSk7Cit9CisK K3N0YXRpYyBpbnQgenhfaGRtaV9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmlj ZSAqbWFzdGVyLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYg PSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gZGF0 YTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3QgenhfaGRtaSAqaGRtaTsKKwlzdHJ1 Y3Qgdm91X2luZiAqaW5mOworCWludCBpcnE7CisJaW50IHJldDsKKworCWhkbWkgPSBkZXZtX2t6 YWxsb2MoZGV2LCBzaXplb2YoKmhkbWkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWhkbWkpCisJCXJl dHVybiAtRU5PTUVNOworCisJaGRtaS0+ZGV2ID0gZGV2OworCWhkbWktPmRybSA9IGRybTsKKwor CWluZiA9ICZ2b3VfaW5mX2hkbWk7CisJaW5mLT5lbmNvZGVyID0gJmhkbWktPmVuY29kZXI7CisJ aGRtaS0+aW5mID0gaW5mOworCisJZGV2X3NldF9kcnZkYXRhKGRldiwgaGRtaSk7CisKKwlyZXMg PSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWhkbWkt Pm1taW8gPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpOworCWlmIChJU19FUlIoaGRt aS0+bW1pbykpCisJCXJldHVybiBQVFJfRVJSKGhkbWktPm1taW8pOworCisJaXJxID0gcGxhdGZv cm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoaXJxIDwgMCkKKwkJcmV0dXJuIGlycTsKKworCWhk bWktPmNlY19jbGsgPSBkZXZtX2Nsa19nZXQoaGRtaS0+ZGV2LCAib3NjX2NlYyIpOworCWlmIChJ U19FUlIoaGRtaS0+Y2VjX2NsaykpCisJCXJldHVybiBQVFJfRVJSKGhkbWktPmNlY19jbGspOwor CisJaGRtaS0+b3NjX2NsayA9IGRldm1fY2xrX2dldChoZG1pLT5kZXYsICJvc2NfY2xrIik7CisJ aWYgKElTX0VSUihoZG1pLT5vc2NfY2xrKSkKKwkJcmV0dXJuIFBUUl9FUlIoaGRtaS0+b3NjX2Ns ayk7CisKKwloZG1pLT54Y2xrID0gZGV2bV9jbGtfZ2V0KGhkbWktPmRldiwgInhjbGsiKTsKKwlp ZiAoSVNfRVJSKGhkbWktPnhjbGspKQorCQlyZXR1cm4gUFRSX0VSUihoZG1pLT54Y2xrKTsKKwor CXp4X2hkbWlfaHdfaW5pdChoZG1pKTsKKworCWNsa19wcmVwYXJlX2VuYWJsZShoZG1pLT5jZWNf Y2xrKTsKKwljbGtfcHJlcGFyZV9lbmFibGUoaGRtaS0+b3NjX2Nsayk7CisJY2xrX3ByZXBhcmVf ZW5hYmxlKGhkbWktPnhjbGspOworCisJcmV0ID0genhfaGRtaV9yZWdpc3Rlcihkcm0sIGhkbWkp OworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFk ZWRfaXJxKGRldiwgaXJxLCB6eF9oZG1pX2lycV9oYW5kbGVyLAorCQkJCQl6eF9oZG1pX2lycV90 aHJlYWQsIElSUUZfU0hBUkVELAorCQkJCQlkZXZfbmFtZShkZXYpLCBoZG1pKTsKKworCXJldHVy biAwOworfQorCitzdGF0aWMgdm9pZCB6eF9oZG1pX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYs IHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKKwkJCSAgIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHp4 X2hkbWkgKmhkbWkgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWNsa19kaXNhYmxlX3VucHJl cGFyZShoZG1pLT5jZWNfY2xrKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaGRtaS0+b3NjX2Ns ayk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhkbWktPnhjbGspOworfQorCitzdGF0aWMgY29u c3Qgc3RydWN0IGNvbXBvbmVudF9vcHMgenhfaGRtaV9jb21wb25lbnRfb3BzID0geworCS5iaW5k ID0genhfaGRtaV9iaW5kLAorCS51bmJpbmQgPSB6eF9oZG1pX3VuYmluZCwKK307CisKK3N0YXRp YyBpbnQgenhfaGRtaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJl dHVybiBjb21wb25lbnRfYWRkKCZwZGV2LT5kZXYsICZ6eF9oZG1pX2NvbXBvbmVudF9vcHMpOwor fQorCitzdGF0aWMgaW50IHp4X2hkbWlfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYpCit7CisJY29tcG9uZW50X2RlbCgmcGRldi0+ZGV2LCAmenhfaGRtaV9jb21wb25lbnRfb3Bz KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgenhf aGRtaV9vZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAienRlLHp4Mjk2NzE4LWhkbWki LCB9LAorCXsgLyogZW5kICovIH0sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgenhfaGRt aV9vZl9tYXRjaCk7CisKK3N0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgenhfaGRtaV9kcml2ZXIgPSB7 CisJLnByb2JlID0genhfaGRtaV9wcm9iZSwKKwkucmVtb3ZlID0genhfaGRtaV9yZW1vdmUsCisJ LmRyaXZlcgk9IHsKKwkJLm5hbWUgPSAiengtaGRtaSIsCisJCS5vZl9tYXRjaF90YWJsZQk9IHp4 X2hkbWlfb2ZfbWF0Y2gsCisJfSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0venRl L3p4X3BsYW5lLmMgYi9kcml2ZXJzL2dwdS9kcm0venRlL3p4X3BsYW5lLmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4zMjZjYzFmZjc5NTAKLS0tIC9kZXYvbnVsbAor KysgYi9kcml2ZXJzL2dwdS9kcm0venRlL3p4X3BsYW5lLmMKQEAgLTAsMCArMSwzNjIgQEAKKy8q CisgKiBDb3B5cmlnaHQgMjAxNiBMaW5hcm8gTHRkLgorICogQ29weXJpZ2h0IDIwMTYgWlRFIENv cnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVk IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxk cm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgorI2luY2x1ZGUg PGRybS9kcm1fZmJfY21hX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZ2VtX2NtYV9oZWxw ZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX21vZGVzZXRfaGVscGVyX3Z0YWJsZXMuaD4KKyNpbmNs dWRlIDxkcm0vZHJtX3BsYW5lX2hlbHBlci5oPgorCisjaW5jbHVkZSAienhfY3J0Yy5oIgorI2lu Y2x1ZGUgInp4X3BsYW5lLmgiCisKKy8qIEdMIHJlZ2lzdGVycyAqLworI2RlZmluZSBHTF9DVFJM MAkJCTB4MDAKKyNkZWZpbmUgR0xfVVBEQVRFCQkJQklUKDUpCisjZGVmaW5lIEdMX0NUUkwxCQkJ MHgwNAorI2RlZmluZSBHTF9EQVRBX0ZNVF9TSElGVAkJMAorI2RlZmluZSBHTF9EQVRBX0ZNVF9N QVNLCQkoMHhmIDw8IEdMX0RBVEFfRk1UX1NISUZUKQorI2RlZmluZSBHTF9GTVRfQVJHQjg4ODgJ CQkwCisjZGVmaW5lIEdMX0ZNVF9SR0I4ODgJCQkxCisjZGVmaW5lIEdMX0ZNVF9SR0I1NjUJCQky CisjZGVmaW5lIEdMX0ZNVF9BUkdCMTU1NQkJCTMKKyNkZWZpbmUgR0xfRk1UX0FSR0I0NDQ0CQkJ NAorI2RlZmluZSBHTF9DVFJMMgkJCTB4MDgKKyNkZWZpbmUgR0xfR0xPQkFMX0FMUEhBX1NISUZU CQk4CisjZGVmaW5lIEdMX0dMT0JBTF9BTFBIQV9NQVNLCQkoMHhmZiA8PCBHTF9HTE9CQUxfQUxQ SEFfU0hJRlQpCisjZGVmaW5lIEdMX0NUUkwzCQkJMHgwYworI2RlZmluZSBHTF9TQ0FMRVJfQllQ QVNTX01PREUJCUJJVCgwKQorI2RlZmluZSBHTF9TVFJJREUJCQkweDE4CisjZGVmaW5lIEdMX0FE RFIJCQkJMHgxYworI2RlZmluZSBHTF9TUkNfU0laRQkJCTB4MzgKKyNkZWZpbmUgR0xfU1JDX1df U0hJRlQJCQkxNgorI2RlZmluZSBHTF9TUkNfV19NQVNLCQkJKDB4M2ZmZiA8PCBHTF9TUkNfV19T SElGVCkKKyNkZWZpbmUgR0xfU1JDX0hfU0hJRlQJCQkwCisjZGVmaW5lIEdMX1NSQ19IX01BU0sJ CQkoMHgzZmZmIDw8IEdMX1NSQ19IX1NISUZUKQorI2RlZmluZSBHTF9QT1NfU1RBUlQJCQkweDlj CisjZGVmaW5lIEdMX1BPU19FTkQJCQkweGEwCisjZGVmaW5lIEdMX1BPU19YX1NISUZUCQkJMTYK KyNkZWZpbmUgR0xfUE9TX1hfTUFTSwkJCSgweDFmZmYgPDwgR0xfUE9TX1hfU0hJRlQpCisjZGVm aW5lIEdMX1BPU19ZX1NISUZUCQkJMAorI2RlZmluZSBHTF9QT1NfWV9NQVNLCQkJKDB4MWZmZiA8 PCBHTF9QT1NfWV9TSElGVCkKKworLyogQ1NDIHJlZ2lzdGVycyAqLworI2RlZmluZSBDU0NfQ1RS TDAJCQkweDMwCisjZGVmaW5lIENTQ19DT1ZfTU9ERV9TSElGVAkJMTYKKyNkZWZpbmUgQ1NDX0NP Vl9NT0RFX01BU0sJCSgweGZmZmYgPDwgQ1NDX0NPVl9NT0RFX1NISUZUKQorI2RlZmluZSBDU0Nf QlQ2MDFfSU1BR0VfUkdCMllDQkNSCTAKKyNkZWZpbmUgQ1NDX0JUNjAxX0lNQUdFX1lDQkNSMlJH QgkxCisjZGVmaW5lIENTQ19CVDYwMV9WSURFT19SR0IyWUNCQ1IJMgorI2RlZmluZSBDU0NfQlQ2 MDFfVklERU9fWUNCQ1IyUkdCCTMKKyNkZWZpbmUgQ1NDX0JUNzA5X0lNQUdFX1JHQjJZQ0JDUgk0 CisjZGVmaW5lIENTQ19CVDcwOV9JTUFHRV9ZQ0JDUjJSR0IJNQorI2RlZmluZSBDU0NfQlQ3MDlf VklERU9fUkdCMllDQkNSCTYKKyNkZWZpbmUgQ1NDX0JUNzA5X1ZJREVPX1lDQkNSMlJHQgk3Cisj ZGVmaW5lIENTQ19CVDIwMjBfSU1BR0VfUkdCMllDQkNSCTgKKyNkZWZpbmUgQ1NDX0JUMjAyMF9J TUFHRV9ZQ0JDUjJSR0IJOQorI2RlZmluZSBDU0NfQlQyMDIwX1ZJREVPX1JHQjJZQ0JDUgkxMAor I2RlZmluZSBDU0NfQlQyMDIwX1ZJREVPX1lDQkNSMlJHQgkxMQorI2RlZmluZSBDU0NfV09SS19F TkFCTEUJCQlCSVQoMCkKKworLyogUlNaIHJlZ2lzdGVycyAqLworI2RlZmluZSBSU1pfU1JDX0NG RwkJCTB4MDAKKyNkZWZpbmUgUlNaX0RFU1RfQ0ZHCQkJMHgwNAorI2RlZmluZSBSU1pfRU5BQkxF X0NGRwkJCTB4MTQKKworLyogSEJTQyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgSEJTQ19TQVRVUkFU SU9OCQkJMHgwMAorI2RlZmluZSBIQlNDX0hVRQkJCTB4MDQKKyNkZWZpbmUgSEJTQ19CUklHSFQJ CQkweDA4CisjZGVmaW5lIEhCU0NfQ09OVFJBU1QJCQkweDBjCisjZGVmaW5lIEhCU0NfVEhSRVNI T0xEX0NPTDEJCTB4MTAKKyNkZWZpbmUgSEJTQ19USFJFU0hPTERfQ09MMgkJMHgxNAorI2RlZmlu ZSBIQlNDX1RIUkVTSE9MRF9DT0wzCQkweDE4CisjZGVmaW5lIEhCU0NfQ1RSTDAJCQkweDI4Cisj ZGVmaW5lIEhCU0NfQ1RSTF9FTgkJCUJJVCgyKQorCitzdHJ1Y3QgenhfcGxhbmUgeworCXN0cnVj dCBkcm1fcGxhbmUgcGxhbmU7CisJdm9pZCBfX2lvbWVtICpsYXllcjsKKwl2b2lkIF9faW9tZW0g KmNzYzsKKwl2b2lkIF9faW9tZW0gKmhic2M7CisJdm9pZCBfX2lvbWVtICpyc3o7Cit9OworCisj ZGVmaW5lIHRvX3p4X3BsYW5lKHBsYW5lKQljb250YWluZXJfb2YocGxhbmUsIHN0cnVjdCB6eF9w bGFuZSwgcGxhbmUpCisKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBnbF9mb3JtYXRzW10gPSB7CisJ RFJNX0ZPUk1BVF9BUkdCODg4OCwKKwlEUk1fRk9STUFUX1hSR0I4ODg4LAorCURSTV9GT1JNQVRf UkdCODg4LAorCURSTV9GT1JNQVRfUkdCNTY1LAorCURSTV9GT1JNQVRfQVJHQjE1NTUsCisJRFJN X0ZPUk1BVF9BUkdCNDQ0NCwKK307CisKK3N0YXRpYyBpbnQgenhfZ2xfcGxhbmVfYXRvbWljX2No ZWNrKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAorCQkJCSAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0 YXRlICpzdGF0ZSkKK3sKKwl1MzIgc3JjX3csIHNyY19oOworCisJc3JjX3cgPSBzdGF0ZS0+c3Jj X3cgPj4gMTY7CisJc3JjX2ggPSBzdGF0ZS0+c3JjX2ggPj4gMTY7CisKKwkvKiBUT0RPOiBzdXBw b3J0IHNjYWxpbmcgb2YgdGhlIHBsYW5lIHNvdXJjZSAqLworCWlmICgoc3JjX3cgIT0gc3RhdGUt PmNydGNfdykgfHwgKHNyY19oICE9IHN0YXRlLT5jcnRjX2gpKQorCQlyZXR1cm4gLUVJTlZBTDsK KworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHp4X2dsX2dldF9mbXQodWludDMyX3QgZm9y bWF0KQoreworCXN3aXRjaCAoZm9ybWF0KSB7CisJY2FzZSBEUk1fRk9STUFUX0FSR0I4ODg4Ogor CWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKKwkJcmV0dXJuIEdMX0ZNVF9BUkdCODg4ODsKKwlj YXNlIERSTV9GT1JNQVRfUkdCODg4OgorCQlyZXR1cm4gR0xfRk1UX1JHQjg4ODsKKwljYXNlIERS TV9GT1JNQVRfUkdCNTY1OgorCQlyZXR1cm4gR0xfRk1UX1JHQjU2NTsKKwljYXNlIERSTV9GT1JN QVRfQVJHQjE1NTU6CisJCXJldHVybiBHTF9GTVRfQVJHQjE1NTU7CisJY2FzZSBEUk1fRk9STUFU X0FSR0I0NDQ0OgorCQlyZXR1cm4gR0xfRk1UX0FSR0I0NDQ0OworCWRlZmF1bHQ6CisJCVdBUk5f T05DRSgxLCAiaW52YWxpZCBwaXhlbCBmb3JtYXQgJWRcbiIsIGZvcm1hdCk7CisJCXJldHVybiAt RUlOVkFMOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIHp4X2dsX3NldF91cGRhdGUoc3Ry dWN0IHp4X3BsYW5lICp6cGxhbmUpCit7CisJdm9pZCBfX2lvbWVtICpsYXllciA9IHpwbGFuZS0+ bGF5ZXI7CisJdTMyIHZhbDsKKworCXZhbCA9IHJlYWRsKGxheWVyICsgR0xfQ1RSTDApOworCXZh bCB8PSBHTF9VUERBVEU7CisJd3JpdGVsKHZhbCwgbGF5ZXIgKyBHTF9DVFJMMCk7Cit9CisKK3N0 YXRpYyBpbmxpbmUgdm9pZCB6eF9nbF9yc3pfc2V0X3VwZGF0ZShzdHJ1Y3QgenhfcGxhbmUgKnpw bGFuZSkKK3sKKwl3cml0ZWwoMSwgenBsYW5lLT5yc3ogKyBSU1pfRU5BQkxFX0NGRyk7Cit9CisK K3ZvaWQgenhfcGxhbmVfc2V0X3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKK3sKKwlz dHJ1Y3QgenhfcGxhbmUgKnpwbGFuZSA9IHRvX3p4X3BsYW5lKHBsYW5lKTsKKworCXp4X2dsX3Jz el9zZXRfdXBkYXRlKHpwbGFuZSk7CisJenhfZ2xfc2V0X3VwZGF0ZSh6cGxhbmUpOworfQorCitz dGF0aWMgdm9pZCB6eF9nbF9yc3pfc2V0dXAoc3RydWN0IHp4X3BsYW5lICp6cGxhbmUsIHUzMiBz cmNfdywgdTMyIHNyY19oLAorCQkJICAgIHUzMiBkc3RfdywgdTMyIGRzdF9oKQoreworCXZvaWQg X19pb21lbSAqcnN6ID0genBsYW5lLT5yc3o7CisJdTMyIHZhbDsKKworCXZhbCA9ICgoc3JjX2gg LSAxKSAmIDB4ZmZmZikgPDwgMTY7CisJdmFsIHw9IChzcmNfdyAtIDEpICYgMHhmZmZmOworCXdy aXRlbCh2YWwsIHJzeiArIFJTWl9TUkNfQ0ZHKTsKKworCXZhbCA9ICgoZHN0X2ggLSAxKSAmIDB4 ZmZmZikgPDwgMTY7CisJdmFsIHw9IChkc3RfdyAtIDEpICYgMHhmZmZmOworCXdyaXRlbCh2YWws IHJzeiArIFJTWl9ERVNUX0NGRyk7CisKKwl6eF9nbF9yc3pfc2V0X3VwZGF0ZSh6cGxhbmUpOwor fQorCitzdGF0aWMgdm9pZCB6eF9nbF9wbGFuZV9hdG9taWNfdXBkYXRlKHN0cnVjdCBkcm1fcGxh bmUgKnBsYW5lLAorCQkJCSAgICAgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm9sZF9zdGF0ZSkK K3sKKwlzdHJ1Y3QgenhfcGxhbmUgKnpwbGFuZSA9IHRvX3p4X3BsYW5lKHBsYW5lKTsKKwlzdHJ1 Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lLT5zdGF0ZS0+ZmI7CisJc3RydWN0IGRybV9n ZW1fY21hX29iamVjdCAqY21hX29iajsKKwl2b2lkIF9faW9tZW0gKmxheWVyID0genBsYW5lLT5s YXllcjsKKwl2b2lkIF9faW9tZW0gKmNzYyA9IHpwbGFuZS0+Y3NjOworCXZvaWQgX19pb21lbSAq aGJzYyA9IHpwbGFuZS0+aGJzYzsKKwl1MzIgc3JjX3gsIHNyY195LCBzcmNfdywgc3JjX2g7CisJ dTMyIGRzdF94LCBkc3RfeSwgZHN0X3csIGRzdF9oOworCXVuc2lnbmVkIGludCBkZXB0aCwgYnBw OworCXVpbnQzMl90IGZvcm1hdDsKKwlkbWFfYWRkcl90IHBhZGRyOworCXUzMiBzdHJpZGU7CisJ aW50IGZtdDsKKwl1MzIgdmFsOworCisJaWYgKCFmYikKKwkJcmV0dXJuOworCisJZm9ybWF0ID0g ZmItPnBpeGVsX2Zvcm1hdDsKKwlzdHJpZGUgPSBmYi0+cGl0Y2hlc1swXTsKKworCXNyY194ID0g cGxhbmUtPnN0YXRlLT5zcmNfeCA+PiAxNjsKKwlzcmNfeSA9IHBsYW5lLT5zdGF0ZS0+c3JjX3kg Pj4gMTY7CisJc3JjX3cgPSBwbGFuZS0+c3RhdGUtPnNyY193ID4+IDE2OworCXNyY19oID0gcGxh bmUtPnN0YXRlLT5zcmNfaCA+PiAxNjsKKworCWRzdF94ID0gcGxhbmUtPnN0YXRlLT5jcnRjX3g7 CisJZHN0X3kgPSBwbGFuZS0+c3RhdGUtPmNydGNfeTsKKwlkc3RfdyA9IHBsYW5lLT5zdGF0ZS0+ Y3J0Y193OworCWRzdF9oID0gcGxhbmUtPnN0YXRlLT5jcnRjX2g7CisKKwlkcm1fZmJfZ2V0X2Jw cF9kZXB0aChmb3JtYXQsICZkZXB0aCwgJmJwcCk7CisKKwljbWFfb2JqID0gZHJtX2ZiX2NtYV9n ZXRfZ2VtX29iaihmYiwgMCk7CisJcGFkZHIgPSBjbWFfb2JqLT5wYWRkciArIGZiLT5vZmZzZXRz WzBdOworCXBhZGRyICs9IHNyY195ICogc3RyaWRlICsgc3JjX3ggKiBicHAgLyA4OworCXdyaXRl bChwYWRkciwgbGF5ZXIgKyBHTF9BRERSKTsKKworCS8qIFNldCB1cCBzb3VyY2UgaGVpZ2h0L3dp ZHRoIHJlZ2lzdGVyICovCisJdmFsID0gKHNyY193IDw8IEdMX1NSQ19XX1NISUZUKSAmIEdMX1NS Q19XX01BU0s7CisJdmFsIHw9IChzcmNfaCA8PCBHTF9TUkNfSF9TSElGVCkgJiBHTF9TUkNfSF9N QVNLOworCXdyaXRlbCh2YWwsIGxheWVyICsgR0xfU1JDX1NJWkUpOworCisJLyogU2V0IHVwIHN0 YXJ0IHBvc2l0aW9uIHJlZ2lzdGVyICovCisJdmFsID0gKGRzdF94IDw8IEdMX1BPU19YX1NISUZU KSAmIEdMX1BPU19YX01BU0s7CisJdmFsIHw9IChkc3RfeSA8PCBHTF9QT1NfWV9TSElGVCkgJiBH TF9QT1NfWV9NQVNLOworCXdyaXRlbCh2YWwsIGxheWVyICsgR0xfUE9TX1NUQVJUKTsKKworCS8q IFNldCB1cCBlbmQgcG9zaXRpb24gcmVnaXN0ZXIgKi8KKwl2YWwgPSAoKGRzdF94ICsgZHN0X3cp IDw8IEdMX1BPU19YX1NISUZUKSAmIEdMX1BPU19YX01BU0s7CisJdmFsIHw9ICgoZHN0X3kgKyBk c3RfaCkgPDwgR0xfUE9TX1lfU0hJRlQpICYgR0xfUE9TX1lfTUFTSzsKKwl3cml0ZWwodmFsLCBs YXllciArIEdMX1BPU19FTkQpOworCisJLyogU2V0IHVwIHN0cmlkZSByZWdpc3RlciAqLworCXdy aXRlbChzdHJpZGUgJiAweGZmZmYsIGxheWVyICsgR0xfU1RSSURFKTsKKworCS8qIFNldCB1cCBn cmFwaGljIGxheWVyIGRhdGEgZm9ybWF0ICovCisJZm10ID0genhfZ2xfZ2V0X2ZtdChmb3JtYXQp OworCWlmIChmbXQgPj0gMCkgeworCQl2YWwgPSByZWFkbChsYXllciArIEdMX0NUUkwxKTsKKwkJ dmFsICY9IH5HTF9EQVRBX0ZNVF9NQVNLOworCQl2YWwgfD0gZm10IDw8IEdMX0RBVEFfRk1UX1NI SUZUOworCQl3cml0ZWwodmFsLCBsYXllciArIEdMX0NUUkwxKTsKKwl9CisKKwkvKiBJbml0aWFs aXplIGdsb2JhbCBhbHBoYSB3aXRoIGEgc2FuZSB2YWx1ZSAqLworCXZhbCA9IHJlYWRsKGxheWVy ICsgR0xfQ1RSTDIpOworCXZhbCAmPSB+R0xfR0xPQkFMX0FMUEhBX01BU0s7CisJdmFsIHw9IDB4 ZmYgPDwgR0xfR0xPQkFMX0FMUEhBX1NISUZUOworCXdyaXRlbCh2YWwsIGxheWVyICsgR0xfQ1RS TDIpOworCisJLyogU2V0dXAgQ1NDIGZvciB0aGUgR0wgKi8KKwl2YWwgPSByZWFkbChjc2MgKyBD U0NfQ1RSTDApOworCXZhbCAmPSB+Q1NDX0NPVl9NT0RFX01BU0s7CisJaWYgKGRzdF9oID4gNzIw KQorCQl2YWwgfD0gQ1NDX0JUNzA5X0lNQUdFX1JHQjJZQ0JDUiA8PCBDU0NfQ09WX01PREVfU0hJ RlQ7CisJZWxzZQorCQl2YWwgfD0gQ1NDX0JUNjAxX0lNQUdFX1JHQjJZQ0JDUiA8PCBDU0NfQ09W X01PREVfU0hJRlQ7CisJdmFsIHw9IENTQ19XT1JLX0VOQUJMRTsKKwl3cml0ZWwodmFsLCBjc2Mg KyBDU0NfQ1RSTDApOworCisJLyogQWx3YXlzIHVzZSBzY2FsZXIgc2luY2UgaXQgZXhpc3RzICov CisJdmFsID0gcmVhZGwobGF5ZXIgKyBHTF9DVFJMMyk7CisJdmFsIHw9IEdMX1NDQUxFUl9CWVBB U1NfTU9ERTsJLyogc2V0IGZvciBub3QgYnlwYXNzICovCisJd3JpdGVsKHZhbCwgbGF5ZXIgKyBH TF9DVFJMMyk7CisKKwl6eF9nbF9yc3pfc2V0dXAoenBsYW5lLCBzcmNfdywgc3JjX2gsIGRzdF93 LCBkc3RfaCk7CisKKwkvKiBFbmFibGUgSEJTQyBibG9jayAqLworCXZhbCA9IHJlYWRsKGhic2Mg KyBIQlNDX0NUUkwwKTsKKwl2YWwgfD0gSEJTQ19DVFJMX0VOOworCXdyaXRlbCh2YWwsIGhic2Mg KyBIQlNDX0NUUkwwKTsKKworCXp4X2dsX3NldF91cGRhdGUoenBsYW5lKTsKK30KKworc3RhdGlj IGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfaGVscGVyX2Z1bmNzIHp4X2dsX3BsYW5lX2hlbHBlcl9m dW5jcyA9IHsKKwkuYXRvbWljX2NoZWNrID0genhfZ2xfcGxhbmVfYXRvbWljX2NoZWNrLAorCS5h dG9taWNfdXBkYXRlID0genhfZ2xfcGxhbmVfYXRvbWljX3VwZGF0ZSwKK307CisKK3N0YXRpYyB2 b2lkIHp4X3BsYW5lX2Rlc3Ryb3koc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCit7CisJZHJtX3Bs YW5lX2hlbHBlcl9kaXNhYmxlKHBsYW5lKTsKKwlkcm1fcGxhbmVfY2xlYW51cChwbGFuZSk7Cit9 CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzIHp4X3BsYW5lX2Z1bmNzID0g eworCS51cGRhdGVfcGxhbmUgPSBkcm1fYXRvbWljX2hlbHBlcl91cGRhdGVfcGxhbmUsCisJLmRp c2FibGVfcGxhbmUgPSBkcm1fYXRvbWljX2hlbHBlcl9kaXNhYmxlX3BsYW5lLAorCS5kZXN0cm95 ID0genhfcGxhbmVfZGVzdHJveSwKKwkucmVzZXQgPSBkcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9y ZXNldCwKKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX3BsYW5l X2R1cGxpY2F0ZV9zdGF0ZSwKKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRvbWljX2hl bHBlcl9wbGFuZV9kZXN0cm95X3N0YXRlLAorfTsKKworc3RhdGljIHZvaWQgenhfcGxhbmVfaGJz Y19pbml0KHN0cnVjdCB6eF9wbGFuZSAqenBsYW5lKQoreworCXZvaWQgX19pb21lbSAqaGJzYyA9 IHpwbGFuZS0+aGJzYzsKKworCS8qCisJICogIEluaXRpYWxpemUgSEJTQyBibG9jayB3aXRoIGEg c2FuZSBjb25maWd1cmF0aW9uIHBlciByZWNvbW1lZGF0aW9uCisJICogIGZyb20gWlRFIEJTUCBj b2RlLgorCSAqLworCXdyaXRlbCgweDIwMCwgaGJzYyArIEhCU0NfU0FUVVJBVElPTik7CisJd3Jp dGVsKDB4MCwgaGJzYyArIEhCU0NfSFVFKTsKKwl3cml0ZWwoMHgwLCBoYnNjICsgSEJTQ19CUklH SFQpOworCXdyaXRlbCgweDIwMCwgaGJzYyArIEhCU0NfQ09OVFJBU1QpOworCisJd3JpdGVsKCgw eDNhYyA8PCAxNikgfCAweDQwLCBoYnNjICsgSEJTQ19USFJFU0hPTERfQ09MMSk7CisJd3JpdGVs KCgweDNjMCA8PCAxNikgfCAweDQwLCBoYnNjICsgSEJTQ19USFJFU0hPTERfQ09MMik7CisJd3Jp dGVsKCgweDNjMCA8PCAxNikgfCAweDQwLCBoYnNjICsgSEJTQ19USFJFU0hPTERfQ09MMyk7Cit9 CisKK3N0cnVjdCBkcm1fcGxhbmUgKnp4X3BsYW5lX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRy bSwgc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCB6eF9sYXllcl9kYXRhICpkYXRhLAor CQkJCWVudW0gZHJtX3BsYW5lX3R5cGUgdHlwZSkKK3sKKwljb25zdCBzdHJ1Y3QgZHJtX3BsYW5l X2hlbHBlcl9mdW5jcyAqaGVscGVyOworCXN0cnVjdCB6eF9wbGFuZSAqenBsYW5lOworCXN0cnVj dCBkcm1fcGxhbmUgKnBsYW5lOworCWNvbnN0IHVpbnQzMl90ICpmb3JtYXRzOworCXVuc2lnbmVk IGludCBmb3JtYXRfY291bnQ7CisJaW50IHJldDsKKworCXpwbGFuZSA9IGRldm1fa3phbGxvYyhk ZXYsIHNpemVvZigqenBsYW5lKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF6cGxhbmUpCisJCXJldHVy biBFUlJfUFRSKC1FTk9NRU0pOworCisJcGxhbmUgPSAmenBsYW5lLT5wbGFuZTsKKworCXpwbGFu ZS0+bGF5ZXIgPSBkYXRhLT5sYXllcjsKKwl6cGxhbmUtPmhic2MgPSBkYXRhLT5oYnNjOworCXpw bGFuZS0+Y3NjID0gZGF0YS0+Y3NjOworCXpwbGFuZS0+cnN6ID0gZGF0YS0+cnN6OworCisJenhf cGxhbmVfaGJzY19pbml0KHpwbGFuZSk7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIERSTV9Q TEFORV9UWVBFX1BSSU1BUlk6CisJCWhlbHBlciA9ICZ6eF9nbF9wbGFuZV9oZWxwZXJfZnVuY3M7 CisJCWZvcm1hdHMgPSBnbF9mb3JtYXRzOworCQlmb3JtYXRfY291bnQgPSBBUlJBWV9TSVpFKGds X2Zvcm1hdHMpOworCQlicmVhazsKKwljYXNlIERSTV9QTEFORV9UWVBFX09WRVJMQVk6CisJCS8q IFRPRE86IGFkZCB2aWRlbyBsYXllciAodmwpIHN1cHBvcnQgKi8KKwkJYnJlYWs7CisJZGVmYXVs dDoKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7CisJfQorCisJcmV0ID0gZHJtX3VuaXZlcnNh bF9wbGFuZV9pbml0KGRybSwgcGxhbmUsIFZPVV9DUlRDX01BU0ssCisJCQkJICAgICAgICZ6eF9w bGFuZV9mdW5jcywgZm9ybWF0cywgZm9ybWF0X2NvdW50LAorCQkJCSAgICAgICB0eXBlLCBOVUxM KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCisJZHJtX3BsYW5lX2hlbHBl cl9hZGQocGxhbmUsIGhlbHBlcik7CisKKwlyZXR1cm4gcGxhbmU7Cit9CmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0venRlL3p4X3BsYW5lLmggYi9kcml2ZXJzL2dwdS9kcm0venRlL3p4X3Bs YW5lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4yYjgyY2Q1NThk OWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0venRlL3p4X3BsYW5lLmgKQEAg LTAsMCArMSwyNiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE2IExpbmFybyBMdGQuCisgKiBDb3B5 cmlnaHQgMjAxNiBaVEUgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAy IGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisg Ki8KKworI2lmbmRlZiBfX1pYX1BMQU5FX0hfXworI2RlZmluZSBfX1pYX1BMQU5FX0hfXworCitz dHJ1Y3QgenhfbGF5ZXJfZGF0YSB7CisJdm9pZCBfX2lvbWVtICpsYXllcjsKKwl2b2lkIF9faW9t ZW0gKmNzYzsKKwl2b2lkIF9faW9tZW0gKmhic2M7CisJdm9pZCBfX2lvbWVtICpyc3o7Cit9Owor CitzdHJ1Y3QgZHJtX3BsYW5lICp6eF9wbGFuZV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0s IHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgenhfbGF5ZXJfZGF0YSAqZGF0YSwKKwkJ CQllbnVtIGRybV9wbGFuZV90eXBlIHR5cGUpOwordm9pZCB6eF9wbGFuZV9zZXRfdXBkYXRlKHN0 cnVjdCBkcm1fcGxhbmUgKnBsYW5lKTsKKworI2VuZGlmIC8qIF9fWlhfUExBTkVfSF9fICovCi0t IAoxLjkuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K ZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0 dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==