From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thierry Reding Subject: [PATCH v2 04/17] drm/tegra: dsi: Add ganged mode support Date: Mon, 3 Nov 2014 10:27:35 +0100 Message-ID: <1415006868-318-4-git-send-email-thierry.reding@gmail.com> References: <1415006868-318-1-git-send-email-thierry.reding@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-pa0-f52.google.com (mail-pa0-f52.google.com [209.85.220.52]) by gabe.freedesktop.org (Postfix) with ESMTP id 1E8126E473 for ; Mon, 3 Nov 2014 01:28:11 -0800 (PST) Received: by mail-pa0-f52.google.com with SMTP id fa1so11690769pad.25 for ; Mon, 03 Nov 2014 01:28:11 -0800 (PST) In-Reply-To: <1415006868-318-1-git-send-email-thierry.reding@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Thierry Reding Cc: dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org RnJvbTogVGhpZXJyeSBSZWRpbmcgPHRyZWRpbmdAbnZpZGlhLmNvbT4KCkltcGxlbWVudCBnYW5n ZWQgbW9kZSBzdXBwb3J0IGZvciB0aGUgVGVncmEgRFNJIGRyaXZlci4gVGhlIERTSSBob3N0CmNv bnRyb2xsZXIgdG8gZ2FuZyB1cCB3aXRoIGlzIHNwZWNpZmllZCB2aWEgYSBwaGFuZGxlIGluIHRo ZSBkZXZpY2UgdHJlZQphbmQgdGhlIHJlc29sdmVkIERTSSBob3N0IGNvbnRyb2xsZXIgdXNlZCBm b3IgdGhlIHByb2dyYW1taW5nIG9mIHRoZQpnYW5nZWQtbW9kZSByZWdpc3RlcnMuCgpTaWduZWQt b2ZmLWJ5OiBUaGllcnJ5IFJlZGluZyA8dHJlZGluZ0BudmlkaWEuY29tPgotLS0KQ2hhbmdlcyBp biB2MjoKLSBrZWVwIHRyYWNrIG9mIHRoZSBudW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQgdG8v ZnJvbSBwZXJpcGhlcmFsCi0gdXNlIG5ld2x5IGludHJvZHVjZWQgbWlwaV9kc2lfY3JlYXRlX3Bh Y2tldCgpCi0gZXh0cmFjdCBGSUZPIHdyaXRlIGludG8gc2VwYXJhdGUgZnVuY3Rpb24KCiAuLi4v YmluZGluZ3MvZ3B1L252aWRpYSx0ZWdyYTIwLWhvc3QxeC50eHQgICAgICAgICB8ICAgMiArCiBk cml2ZXJzL2dwdS9kcm0vdGVncmEvZHNpLmMgICAgICAgICAgICAgICAgICAgICAgICB8IDc5MiAr KysrKysrKysrKysrKysrKystLS0KIGRyaXZlcnMvZ3B1L2RybS90ZWdyYS9kc2kuaCAgICAgICAg ICAgICAgICAgICAgICAgIHwgIDE0ICstCiAzIGZpbGVzIGNoYW5nZWQsIDY5MSBpbnNlcnRpb25z KCspLCAxMTcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0 cmVlL2JpbmRpbmdzL2dwdS9udmlkaWEsdGVncmEyMC1ob3N0MXgudHh0IGIvRG9jdW1lbnRhdGlv bi9kZXZpY2V0cmVlL2JpbmRpbmdzL2dwdS9udmlkaWEsdGVncmEyMC1ob3N0MXgudHh0CmluZGV4 IGI0OGY0ZWYzMWQ5My4uNGMzMmVmMGI3ZGI4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2Rl dmljZXRyZWUvYmluZGluZ3MvZ3B1L252aWRpYSx0ZWdyYTIwLWhvc3QxeC50eHQKKysrIGIvRG9j dW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2dwdS9udmlkaWEsdGVncmEyMC1ob3N0MXgu dHh0CkBAIC0xOTEsNiArMTkxLDggQEAgb2YgdGhlIGZvbGxvd2luZyBob3N0MXggY2xpZW50IG1v ZHVsZXM6CiAgIC0gbnZpZGlhLGhwZC1ncGlvOiBzcGVjaWZpZXMgYSBHUElPIHVzZWQgZm9yIGhv dHBsdWcgZGV0ZWN0aW9uCiAgIC0gbnZpZGlhLGVkaWQ6IHN1cHBsaWVzIGEgYmluYXJ5IEVESUQg YmxvYgogICAtIG52aWRpYSxwYW5lbDogcGhhbmRsZSBvZiBhIGRpc3BsYXkgcGFuZWwKKyAgLSBu dmlkaWEsZ2FuZ2VkLW1vZGU6IGNvbnRhaW5zIGEgcGhhbmRsZSB0byBhIHNlY29uZCBEU0kgY29u dHJvbGxlciB0byBnYW5nCisgICAgdXAgd2l0aCBpbiBvcmRlciB0byBzdXBwb3J0IHVwIHRvIDgg ZGF0YSBsYW5lcwogCiAtIHNvcjogc2VyaWFsIG91dHB1dCByZXNvdXJjZQogCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vdGVncmEvZHNpLmMgYi9kcml2ZXJzL2dwdS9kcm0vdGVncmEvZHNp LmMKaW5kZXggNTg0Yjc3MWQ4YjJmLi44OTQwMzYwY2NjOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS90ZWdyYS9kc2kuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdGVncmEvZHNpLmMKQEAg LTExLDYgKzExLDcgQEAKICNpbmNsdWRlIDxsaW51eC9ob3N0MXguaD4KICNpbmNsdWRlIDxsaW51 eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3Bs YXRmb3JtLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8 bGludXgvcmVzZXQuaD4KIApAQCAtNTQsNiArNTUsMTAgQEAgc3RydWN0IHRlZ3JhX2RzaSB7CiAK IAl1bnNpZ25lZCBpbnQgdmlkZW9fZmlmb19kZXB0aDsKIAl1bnNpZ25lZCBpbnQgaG9zdF9maWZv X2RlcHRoOworCisJLyogZm9yIGdhbmdlZC1tb2RlIHN1cHBvcnQgKi8KKwlzdHJ1Y3QgdGVncmFf ZHNpICptYXN0ZXI7CisJc3RydWN0IHRlZ3JhX2RzaSAqc2xhdmU7CiB9OwogCiBzdGF0aWMgaW5s aW5lIHN0cnVjdCB0ZWdyYV9kc2kgKgpAQCAtMzE4LDYgKzMyMywyMSBAQCBzdGF0aWMgY29uc3Qg dTMyIHBrdF9zZXFfdmlkZW9fbm9uX2J1cnN0X3N5bmNfZXZlbnRzW05VTV9QS1RfU0VRXSA9IHsK IAlbMTFdID0gUEtUX0lEMChNSVBJX0RTSV9CTEFOS0lOR19QQUNLRVQpIHwgUEtUX0xFTjAoNCks CiB9OwogCitzdGF0aWMgY29uc3QgdTMyIHBrdF9zZXFfY29tbWFuZF9tb2RlW05VTV9QS1RfU0VR XSA9IHsKKwlbIDBdID0gMCwKKwlbIDFdID0gMCwKKwlbIDJdID0gMCwKKwlbIDNdID0gMCwKKwlb IDRdID0gMCwKKwlbIDVdID0gMCwKKwlbIDZdID0gUEtUX0lEMChNSVBJX0RTSV9EQ1NfTE9OR19X UklURSkgfCBQS1RfTEVOMCgzKSB8IFBLVF9MUCwKKwlbIDddID0gMCwKKwlbIDhdID0gMCwKKwlb IDldID0gMCwKKwlbMTBdID0gUEtUX0lEMChNSVBJX0RTSV9EQ1NfTE9OR19XUklURSkgfCBQS1Rf TEVOMCg1KSB8IFBLVF9MUCwKKwlbMTFdID0gMCwKK307CisKIHN0YXRpYyBpbnQgdGVncmFfZHNp X3NldF9waHlfdGltaW5nKHN0cnVjdCB0ZWdyYV9kc2kgKmRzaSkKIHsKIAlzdHJ1Y3QgbWlwaV9k cGh5X3RpbWluZyB0aW1pbmc7CkBAIC0zMjksNyArMzQ5LDcgQEAgc3RhdGljIGludCB0ZWdyYV9k c2lfc2V0X3BoeV90aW1pbmcoc3RydWN0IHRlZ3JhX2RzaSAqZHNpKQogCWlmIChyYXRlIDwgMCkK IAkJcmV0dXJuIHJhdGU7CiAKLQlwZXJpb2QgPSBESVZfUk9VTkRfQ0xPU0VTVCgxMDAwMDAwMDAw VUwsIHJhdGUgKiAyKTsKKwlwZXJpb2QgPSBESVZfUk9VTkRfQ0xPU0VTVChOU0VDX1BFUl9TRUMs IHJhdGUgKiAyKTsKIAogCWVyciA9IG1pcGlfZHBoeV90aW1pbmdfZ2V0X2RlZmF1bHQoJnRpbWlu ZywgcGVyaW9kKTsKIAlpZiAoZXJyIDwgMCkKQEAgLTQyNiwyNiArNDQ2LDU5IEBAIHN0YXRpYyBp bnQgdGVncmFfZHNpX2dldF9mb3JtYXQoZW51bSBtaXBpX2RzaV9waXhlbF9mb3JtYXQgZm9ybWF0 LAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHRlZ3JhX291dHB1dF9kc2lfZW5hYmxlKHN0 cnVjdCB0ZWdyYV9vdXRwdXQgKm91dHB1dCkKK3N0YXRpYyB2b2lkIHRlZ3JhX2RzaV9nYW5nZWRf ZW5hYmxlKHN0cnVjdCB0ZWdyYV9kc2kgKmRzaSwgdW5zaWduZWQgaW50IHN0YXJ0LAorCQkJCSAg ICB1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKwl1MzIgdmFsdWU7CisKKwl0ZWdyYV9kc2lfd3JpdGVs KGRzaSwgc3RhcnQsIERTSV9HQU5HRURfTU9ERV9TVEFSVCk7CisJdGVncmFfZHNpX3dyaXRlbChk c2ksIHNpemUgPDwgMTYgfCBzaXplLCBEU0lfR0FOR0VEX01PREVfU0laRSk7CisKKwl2YWx1ZSA9 IERTSV9HQU5HRURfTU9ERV9DT05UUk9MX0VOQUJMRTsKKwl0ZWdyYV9kc2lfd3JpdGVsKGRzaSwg dmFsdWUsIERTSV9HQU5HRURfTU9ERV9DT05UUk9MKTsKK30KKworc3RhdGljIHZvaWQgdGVncmFf ZHNpX2VuYWJsZShzdHJ1Y3QgdGVncmFfZHNpICpkc2kpCit7CisJdTMyIHZhbHVlOworCisJdmFs dWUgPSB0ZWdyYV9kc2lfcmVhZGwoZHNpLCBEU0lfUE9XRVJfQ09OVFJPTCk7CisJdmFsdWUgfD0g RFNJX1BPV0VSX0NPTlRST0xfRU5BQkxFOworCXRlZ3JhX2RzaV93cml0ZWwoZHNpLCB2YWx1ZSwg RFNJX1BPV0VSX0NPTlRST0wpOworCisJaWYgKGRzaS0+c2xhdmUpCisJCXRlZ3JhX2RzaV9lbmFi bGUoZHNpLT5zbGF2ZSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdGVncmFfZHNpX2dldF9s YW5lcyhzdHJ1Y3QgdGVncmFfZHNpICpkc2kpCit7CisJaWYgKGRzaS0+bWFzdGVyKQorCQlyZXR1 cm4gZHNpLT5tYXN0ZXItPmxhbmVzICsgZHNpLT5sYW5lczsKKworCWlmIChkc2ktPnNsYXZlKQor CQlyZXR1cm4gZHNpLT5sYW5lcyArIGRzaS0+c2xhdmUtPmxhbmVzOworCisJcmV0dXJuIGRzaS0+ bGFuZXM7Cit9CisKK3N0YXRpYyBpbnQgdGVncmFfZHNpX2NvbmZpZ3VyZShzdHJ1Y3QgdGVncmFf ZHNpICpkc2ksIHVuc2lnbmVkIGludCBwaXBlLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBkcm1f ZGlzcGxheV9tb2RlICptb2RlKQogewotCXN0cnVjdCB0ZWdyYV9kYyAqZGMgPSB0b190ZWdyYV9k YyhvdXRwdXQtPmVuY29kZXIuY3J0Yyk7Ci0Jc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUg PSAmZGMtPmJhc2UubW9kZTsKIAl1bnNpZ25lZCBpbnQgaGFjdCwgaHN3LCBoYnAsIGhmcCwgaSwg bXVsLCBkaXY7Ci0Jc3RydWN0IHRlZ3JhX2RzaSAqZHNpID0gdG9fZHNpKG91dHB1dCk7CiAJZW51 bSB0ZWdyYV9kc2lfZm9ybWF0IGZvcm1hdDsKLQl1bnNpZ25lZCBsb25nIHZhbHVlOwogCWNvbnN0 IHUzMiAqcGt0X3NlcTsKKwl1MzIgdmFsdWU7CiAJaW50IGVycjsKIAotCWlmIChkc2ktPmVuYWJs ZWQpCi0JCXJldHVybiAwOwotCiAJaWYgKGRzaS0+ZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX1ZJREVP X1NZTkNfUFVMU0UpIHsKIAkJRFJNX0RFQlVHX0tNUygiTm9uLWJ1cnN0IHZpZGVvIG1vZGUgd2l0 aCBzeW5jIHB1bHNlc1xuIik7CiAJCXBrdF9zZXEgPSBwa3Rfc2VxX3ZpZGVvX25vbl9idXJzdF9z eW5jX3B1bHNlczsKLQl9IGVsc2UgeworCX0gZWxzZSBpZiAoZHNpLT5mbGFncyAmIE1JUElfRFNJ X01PREVfVklERU8pIHsKIAkJRFJNX0RFQlVHX0tNUygiTm9uLWJ1cnN0IHZpZGVvIG1vZGUgd2l0 aCBzeW5jIGV2ZW50c1xuIik7CiAJCXBrdF9zZXEgPSBwa3Rfc2VxX3ZpZGVvX25vbl9idXJzdF9z eW5jX2V2ZW50czsKKwl9IGVsc2UgeworCQlEUk1fREVCVUdfS01TKCJDb21tYW5kIG1vZGVcbiIp OworCQlwa3Rfc2VxID0gcGt0X3NlcV9jb21tYW5kX21vZGU7CiAJfQogCiAJZXJyID0gdGVncmFf ZHNpX2dldF9tdWxkaXYoZHNpLT5mb3JtYXQsICZtdWwsICZkaXYpOwpAQCAtNDU2LDI4ICs1MDks MjkgQEAgc3RhdGljIGludCB0ZWdyYV9vdXRwdXRfZHNpX2VuYWJsZShzdHJ1Y3QgdGVncmFfb3V0 cHV0ICpvdXRwdXQpCiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKLQllcnIgPSBjbGtf ZW5hYmxlKGRzaS0+Y2xrKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQotCXJlc2V0 X2NvbnRyb2xfZGVhc3NlcnQoZHNpLT5yc3QpOwotCiAJdmFsdWUgPSBEU0lfQ09OVFJPTF9DSEFO TkVMKDApIHwgRFNJX0NPTlRST0xfRk9STUFUKGZvcm1hdCkgfAogCQlEU0lfQ09OVFJPTF9MQU5F Uyhkc2ktPmxhbmVzIC0gMSkgfAotCQlEU0lfQ09OVFJPTF9TT1VSQ0UoZGMtPnBpcGUpOworCQlE U0lfQ09OVFJPTF9TT1VSQ0UocGlwZSk7CiAJdGVncmFfZHNpX3dyaXRlbChkc2ksIHZhbHVlLCBE U0lfQ09OVFJPTCk7CiAKIAl0ZWdyYV9kc2lfd3JpdGVsKGRzaSwgZHNpLT52aWRlb19maWZvX2Rl cHRoLCBEU0lfTUFYX1RIUkVTSE9MRCk7CiAKLQl2YWx1ZSA9IERTSV9IT1NUX0NPTlRST0xfSFMg fCBEU0lfSE9TVF9DT05UUk9MX0NTIHwKLQkJRFNJX0hPU1RfQ09OVFJPTF9FQ0M7CisJdmFsdWUg PSBEU0lfSE9TVF9DT05UUk9MX0hTOwogCXRlZ3JhX2RzaV93cml0ZWwoZHNpLCB2YWx1ZSwgRFNJ X0hPU1RfQ09OVFJPTCk7CiAKIAl2YWx1ZSA9IHRlZ3JhX2RzaV9yZWFkbChkc2ksIERTSV9DT05U Uk9MKTsKKwogCWlmIChkc2ktPmZsYWdzICYgTUlQSV9EU0lfQ0xPQ0tfTk9OX0NPTlRJTlVPVVMp CiAJCXZhbHVlIHw9IERTSV9DT05UUk9MX0hTX0NMS19DVFJMOworCiAJdmFsdWUgJj0gfkRTSV9D T05UUk9MX1RYX1RSSUcoMyk7Ci0JdmFsdWUgJj0gfkRTSV9DT05UUk9MX0RDU19FTkFCTEU7CisK KwkvKiBlbmFibGUgRENTIGNvbW1hbmRzIGZvciBjb21tYW5kIG1vZGUgKi8KKwlpZiAoZHNpLT5m bGFncyAmIE1JUElfRFNJX01PREVfVklERU8pCisJCXZhbHVlICY9IH5EU0lfQ09OVFJPTF9EQ1Nf RU5BQkxFOworCWVsc2UKKwkJdmFsdWUgfD0gRFNJX0NPTlRST0xfRENTX0VOQUJMRTsKKwogCXZh bHVlIHw9IERTSV9DT05UUk9MX1ZJREVPX0VOQUJMRTsKIAl2YWx1ZSAmPSB+RFNJX0NPTlRST0xf SE9TVF9FTkFCTEU7CiAJdGVncmFfZHNpX3dyaXRlbChkc2ksIHZhbHVlLCBEU0lfQ09OVFJPTCk7 CkBAIC00ODksMjggKzU0MywxMDYgQEAgc3RhdGljIGludCB0ZWdyYV9vdXRwdXRfZHNpX2VuYWJs ZShzdHJ1Y3QgdGVncmFfb3V0cHV0ICpvdXRwdXQpCiAJZm9yIChpID0gMDsgaSA8IE5VTV9QS1Rf U0VROyBpKyspCiAJCXRlZ3JhX2RzaV93cml0ZWwoZHNpLCBwa3Rfc2VxW2ldLCBEU0lfUEtUX1NF UV8wX0xPICsgaSk7CiAKLQkvKiBob3Jpem9udGFsIGFjdGl2ZSBwaXhlbHMgKi8KLQloYWN0ID0g bW9kZS0+aGRpc3BsYXkgKiBtdWwgLyBkaXY7CisJaWYgKGRzaS0+ZmxhZ3MgJiBNSVBJX0RTSV9N T0RFX1ZJREVPKSB7CisJCS8qIGhvcml6b250YWwgYWN0aXZlIHBpeGVscyAqLworCQloYWN0ID0g bW9kZS0+aGRpc3BsYXkgKiBtdWwgLyBkaXY7CisKKwkJLyogaG9yaXpvbnRhbCBzeW5jIHdpZHRo ICovCisJCWhzdyA9IChtb2RlLT5oc3luY19lbmQgLSBtb2RlLT5oc3luY19zdGFydCkgKiBtdWwg LyBkaXY7CisJCWhzdyAtPSAxMDsKIAotCS8qIGhvcml6b250YWwgc3luYyB3aWR0aCAqLwotCWhz dyA9IChtb2RlLT5oc3luY19lbmQgLSBtb2RlLT5oc3luY19zdGFydCkgKiBtdWwgLyBkaXY7Ci0J aHN3IC09IDEwOworCQkvKiBob3Jpem9udGFsIGJhY2sgcG9yY2ggKi8KKwkJaGJwID0gKG1vZGUt Pmh0b3RhbCAtIG1vZGUtPmhzeW5jX2VuZCkgKiBtdWwgLyBkaXY7CisJCWhicCAtPSAxNDsKIAot CS8qIGhvcml6b250YWwgYmFjayBwb3JjaCAqLwotCWhicCA9IChtb2RlLT5odG90YWwgLSBtb2Rl LT5oc3luY19lbmQpICogbXVsIC8gZGl2OwotCWhicCAtPSAxNDsKKwkJLyogaG9yaXpvbnRhbCBm cm9udCBwb3JjaCAqLworCQloZnAgPSAobW9kZS0+aHN5bmNfc3RhcnQgLSBtb2RlLT5oZGlzcGxh eSkgKiBtdWwgLyBkaXY7CisJCWhmcCAtPSA4OworCisJCXRlZ3JhX2RzaV93cml0ZWwoZHNpLCBo c3cgPDwgMTYgfCAwLCBEU0lfUEtUX0xFTl8wXzEpOworCQl0ZWdyYV9kc2lfd3JpdGVsKGRzaSwg aGFjdCA8PCAxNiB8IGhicCwgRFNJX1BLVF9MRU5fMl8zKTsKKwkJdGVncmFfZHNpX3dyaXRlbChk c2ksIGhmcCwgRFNJX1BLVF9MRU5fNF81KTsKKwkJdGVncmFfZHNpX3dyaXRlbChkc2ksIDB4MGYw ZiA8PCAxNiwgRFNJX1BLVF9MRU5fNl83KTsKKworCQkvKiBzZXQgU09MIGRlbGF5IChmb3Igbm9u LWJ1cnN0IG1vZGUgb25seSkgKi8KKwkJdGVncmFfZHNpX3dyaXRlbChkc2ksIDggKiBtdWwgLyBk aXYsIERTSV9TT0xfREVMQVkpOworCisJCS8qIFRPRE86IGltcGxlbWVudCBnYW5nZWQgbW9kZSAq LworCX0gZWxzZSB7CisJCXUxNiBieXRlczsKKworCQlpZiAoZHNpLT5tYXN0ZXIgfHwgZHNpLT5z bGF2ZSkgeworCQkJLyoKKwkJCSAqIEZvciBnYW5nZWQgbW9kZSwgYXNzdW1lIHN5bW1ldHJpYyBs ZWZ0LXJpZ2h0IG1vZGUuCisJCQkgKi8KKwkJCWJ5dGVzID0gMSArIChtb2RlLT5oZGlzcGxheSAv IDIpICogbXVsIC8gZGl2OworCQl9IGVsc2UgeworCQkJLyogMSBieXRlIChEQ1MgY29tbWFuZCkg KyBwaXhlbCBkYXRhICovCisJCQlieXRlcyA9IDEgKyBtb2RlLT5oZGlzcGxheSAqIG11bCAvIGRp djsKKwkJfQorCisJCXRlZ3JhX2RzaV93cml0ZWwoZHNpLCAwLCBEU0lfUEtUX0xFTl8wXzEpOwor CQl0ZWdyYV9kc2lfd3JpdGVsKGRzaSwgYnl0ZXMgPDwgMTYsIERTSV9QS1RfTEVOXzJfMyk7CisJ CXRlZ3JhX2RzaV93cml0ZWwoZHNpLCBieXRlcyA8PCAxNiwgRFNJX1BLVF9MRU5fNF81KTsKKwkJ dGVncmFfZHNpX3dyaXRlbChkc2ksIDAsIERTSV9QS1RfTEVOXzZfNyk7CisKKwkJdmFsdWUgPSBN SVBJX0RDU19XUklURV9NRU1PUllfU1RBUlQgPDwgOCB8CisJCQlNSVBJX0RDU19XUklURV9NRU1P UllfQ09OVElOVUU7CisJCXRlZ3JhX2RzaV93cml0ZWwoZHNpLCB2YWx1ZSwgRFNJX0RDU19DTURT KTsKKworCQkvKiBzZXQgU09MIGRlbGF5ICovCisJCWlmIChkc2ktPm1hc3RlciB8fCBkc2ktPnNs YXZlKSB7CisJCQl1bnNpZ25lZCBpbnQgbGFuZXMgPSB0ZWdyYV9kc2lfZ2V0X2xhbmVzKGRzaSk7 CisJCQl1bnNpZ25lZCBsb25nIGRlbGF5LCBiY2xrLCBiY2xrX2dhbmdlZDsKKworCQkJLyogU09M IHRvIHZhbGlkLCB2YWxpZCB0byBGSUZPIGFuZCBGSUZPIHdyaXRlIGRlbGF5ICovCisJCQlkZWxh eSA9IDQgKyA0ICsgMjsKKwkJCWRlbGF5ID0gRElWX1JPVU5EX1VQKGRlbGF5ICogbXVsLCBkaXYg KiBsYW5lcyk7CisJCQkvKiBGSUZPIHJlYWQgZGVsYXkgKi8KKwkJCWRlbGF5ID0gZGVsYXkgKyA2 OworCisJCQliY2xrID0gRElWX1JPVU5EX1VQKG1vZGUtPmh0b3RhbCAqIG11bCwgZGl2ICogbGFu ZXMpOworCQkJYmNsa19nYW5nZWQgPSBESVZfUk9VTkRfVVAoYmNsayAqIGxhbmVzIC8gMiwgbGFu ZXMpOworCQkJdmFsdWUgPSBiY2xrIC0gYmNsa19nYW5nZWQgKyBkZWxheSArIDIwOworCQl9IGVs c2UgeworCQkJLyogVE9ETzogcmV2aXNpdCBmb3Igbm9uLWdhbmdlZCBtb2RlICovCisJCQl2YWx1 ZSA9IDggKiBtdWwgLyBkaXY7CisJCX0KKworCQl0ZWdyYV9kc2lfd3JpdGVsKGRzaSwgdmFsdWUs IERTSV9TT0xfREVMQVkpOworCX0KIAotCS8qIGhvcml6b250YWwgZnJvbnQgcG9yY2ggKi8KLQlo ZnAgPSAobW9kZS0+aHN5bmNfc3RhcnQgIC0gbW9kZS0+aGRpc3BsYXkpICogbXVsIC8gZGl2Owot CWhmcCAtPSA4OworCWlmIChkc2ktPnNsYXZlKSB7CisJCWVyciA9IHRlZ3JhX2RzaV9jb25maWd1 cmUoZHNpLT5zbGF2ZSwgcGlwZSwgbW9kZSk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVy cjsKKworCQkvKgorCQkgKiBUT0RPOiBTdXBwb3J0IG1vZGVzIG90aGVyIHRoYW4gc3ltbWV0cmlj YWwgbGVmdC1yaWdodAorCQkgKiBzcGxpdC4KKwkJICovCisJCXRlZ3JhX2RzaV9nYW5nZWRfZW5h YmxlKGRzaSwgMCwgbW9kZS0+aGRpc3BsYXkgLyAyKTsKKwkJdGVncmFfZHNpX2dhbmdlZF9lbmFi bGUoZHNpLT5zbGF2ZSwgbW9kZS0+aGRpc3BsYXkgLyAyLAorCQkJCQltb2RlLT5oZGlzcGxheSAv IDIpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRlZ3JhX291dHB1dF9kc2lf ZW5hYmxlKHN0cnVjdCB0ZWdyYV9vdXRwdXQgKm91dHB1dCkKK3sKKwlzdHJ1Y3QgdGVncmFfZGMg KmRjID0gdG9fdGVncmFfZGMob3V0cHV0LT5lbmNvZGVyLmNydGMpOworCWNvbnN0IHN0cnVjdCBk cm1fZGlzcGxheV9tb2RlICptb2RlID0gJmRjLT5iYXNlLm1vZGU7CisJc3RydWN0IHRlZ3JhX2Rz aSAqZHNpID0gdG9fZHNpKG91dHB1dCk7CisJdTMyIHZhbHVlOworCWludCBlcnI7CiAKLQl0ZWdy YV9kc2lfd3JpdGVsKGRzaSwgaHN3IDw8IDE2IHwgMCwgRFNJX1BLVF9MRU5fMF8xKTsKLQl0ZWdy YV9kc2lfd3JpdGVsKGRzaSwgaGFjdCA8PCAxNiB8IGhicCwgRFNJX1BLVF9MRU5fMl8zKTsKLQl0 ZWdyYV9kc2lfd3JpdGVsKGRzaSwgaGZwLCBEU0lfUEtUX0xFTl80XzUpOwotCXRlZ3JhX2RzaV93 cml0ZWwoZHNpLCAweDBmMGYgPDwgMTYsIERTSV9QS1RfTEVOXzZfNyk7CisJaWYgKGRzaS0+ZW5h YmxlZCkKKwkJcmV0dXJuIDA7CiAKLQkvKiBzZXQgU09MIGRlbGF5ICovCi0JdGVncmFfZHNpX3dy aXRlbChkc2ksIDggKiBtdWwgLyBkaXYsIERTSV9TT0xfREVMQVkpOworCWVyciA9IHRlZ3JhX2Rz aV9jb25maWd1cmUoZHNpLCBkYy0+cGlwZSwgbW9kZSk7CisJaWYgKGVyciA8IDApCisJCXJldHVy biBlcnI7CiAKIAkvKiBlbmFibGUgZGlzcGxheSBjb250cm9sbGVyICovCiAJdmFsdWUgPSB0ZWdy YV9kY19yZWFkbChkYywgRENfRElTUF9ESVNQX1dJTl9PUFRJT05TKTsKQEAgLTUzMSwyOCArNjYz LDc5IEBAIHN0YXRpYyBpbnQgdGVncmFfb3V0cHV0X2RzaV9lbmFibGUoc3RydWN0IHRlZ3JhX291 dHB1dCAqb3V0cHV0KQogCXRlZ3JhX2RjX3dyaXRlbChkYywgR0VORVJBTF9BQ1RfUkVRLCBEQ19D TURfU1RBVEVfQ09OVFJPTCk7CiAKIAkvKiBlbmFibGUgRFNJIGNvbnRyb2xsZXIgKi8KLQl2YWx1 ZSA9IHRlZ3JhX2RzaV9yZWFkbChkc2ksIERTSV9QT1dFUl9DT05UUk9MKTsKLQl2YWx1ZSB8PSBE U0lfUE9XRVJfQ09OVFJPTF9FTkFCTEU7Ci0JdGVncmFfZHNpX3dyaXRlbChkc2ksIHZhbHVlLCBE U0lfUE9XRVJfQ09OVFJPTCk7CisJdGVncmFfZHNpX2VuYWJsZShkc2kpOwogCiAJZHNpLT5lbmFi bGVkID0gdHJ1ZTsKIAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHRlZ3JhX2RzaV93YWl0 X2lkbGUoc3RydWN0IHRlZ3JhX2RzaSAqZHNpLCB1bnNpZ25lZCBsb25nIHRpbWVvdXQpCit7CisJ dTMyIHZhbHVlOworCisJdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKHRpbWVv dXQpOworCisJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKSB7CisJCXZhbHVl ID0gdGVncmFfZHNpX3JlYWRsKGRzaSwgRFNJX1NUQVRVUyk7CisJCWlmICh2YWx1ZSAmIERTSV9T VEFUVVNfSURMRSkKKwkJCXJldHVybiAwOworCisJCXVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTsK Kwl9CisKKwlyZXR1cm4gLUVUSU1FRE9VVDsKK30KKworc3RhdGljIHZvaWQgdGVncmFfZHNpX3Zp ZGVvX2Rpc2FibGUoc3RydWN0IHRlZ3JhX2RzaSAqZHNpKQoreworCXUzMiB2YWx1ZTsKKworCXZh bHVlID0gdGVncmFfZHNpX3JlYWRsKGRzaSwgRFNJX0NPTlRST0wpOworCXZhbHVlICY9IH5EU0lf Q09OVFJPTF9WSURFT19FTkFCTEU7CisJdGVncmFfZHNpX3dyaXRlbChkc2ksIHZhbHVlLCBEU0lf Q09OVFJPTCk7CisKKwlpZiAoZHNpLT5zbGF2ZSkKKwkJdGVncmFfZHNpX3ZpZGVvX2Rpc2FibGUo ZHNpLT5zbGF2ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlZ3JhX2RzaV9nYW5nZWRfZGlzYWJsZShz dHJ1Y3QgdGVncmFfZHNpICpkc2kpCit7CisJdGVncmFfZHNpX3dyaXRlbChkc2ksIDAsIERTSV9H QU5HRURfTU9ERV9TVEFSVCk7CisJdGVncmFfZHNpX3dyaXRlbChkc2ksIDAsIERTSV9HQU5HRURf TU9ERV9TSVpFKTsKKwl0ZWdyYV9kc2lfd3JpdGVsKGRzaSwgMCwgRFNJX0dBTkdFRF9NT0RFX0NP TlRST0wpOworfQorCitzdGF0aWMgdm9pZCB0ZWdyYV9kc2lfZGlzYWJsZShzdHJ1Y3QgdGVncmFf ZHNpICpkc2kpCit7CisJdTMyIHZhbHVlOworCisJaWYgKGRzaS0+c2xhdmUpIHsKKwkJdGVncmFf ZHNpX2dhbmdlZF9kaXNhYmxlKGRzaS0+c2xhdmUpOworCQl0ZWdyYV9kc2lfZ2FuZ2VkX2Rpc2Fi bGUoZHNpKTsKKwl9CisKKwl2YWx1ZSA9IHRlZ3JhX2RzaV9yZWFkbChkc2ksIERTSV9QT1dFUl9D T05UUk9MKTsKKwl2YWx1ZSAmPSB+RFNJX1BPV0VSX0NPTlRST0xfRU5BQkxFOworCXRlZ3JhX2Rz aV93cml0ZWwoZHNpLCB2YWx1ZSwgRFNJX1BPV0VSX0NPTlRST0wpOworCisJaWYgKGRzaS0+c2xh dmUpCisJCXRlZ3JhX2RzaV9kaXNhYmxlKGRzaS0+c2xhdmUpOworCisJdXNsZWVwX3JhbmdlKDUw MDAsIDEwMDAwKTsKK30KKwogc3RhdGljIGludCB0ZWdyYV9vdXRwdXRfZHNpX2Rpc2FibGUoc3Ry dWN0IHRlZ3JhX291dHB1dCAqb3V0cHV0KQogewogCXN0cnVjdCB0ZWdyYV9kYyAqZGMgPSB0b190 ZWdyYV9kYyhvdXRwdXQtPmVuY29kZXIuY3J0Yyk7CiAJc3RydWN0IHRlZ3JhX2RzaSAqZHNpID0g dG9fZHNpKG91dHB1dCk7CiAJdW5zaWduZWQgbG9uZyB2YWx1ZTsKKwlpbnQgZXJyOwogCiAJaWYg KCFkc2ktPmVuYWJsZWQpCiAJCXJldHVybiAwOwogCi0JLyogZGlzYWJsZSBEU0kgY29udHJvbGxl ciAqLwotCXZhbHVlID0gdGVncmFfZHNpX3JlYWRsKGRzaSwgRFNJX1BPV0VSX0NPTlRST0wpOwot CXZhbHVlICY9IH5EU0lfUE9XRVJfQ09OVFJPTF9FTkFCTEU7Ci0JdGVncmFfZHNpX3dyaXRlbChk c2ksIHZhbHVlLCBEU0lfUE9XRVJfQ09OVFJPTCk7CisJdGVncmFfZHNpX3ZpZGVvX2Rpc2FibGUo ZHNpKTsKIAogCS8qCiAJICogVGhlIGZvbGxvd2luZyBhY2Nlc3NlcyByZWdpc3RlcnMgb2YgdGhl IGRpc3BsYXkgY29udHJvbGxlciwgc28gbWFrZQpAQCAtNTc2LDM5ICs3NTksNjggQEAgc3RhdGlj IGludCB0ZWdyYV9vdXRwdXRfZHNpX2Rpc2FibGUoc3RydWN0IHRlZ3JhX291dHB1dCAqb3V0cHV0 KQogCQl0ZWdyYV9kY193cml0ZWwoZGMsIEdFTkVSQUxfQUNUX1JFUSwgRENfQ01EX1NUQVRFX0NP TlRST0wpOwogCX0KIAotCWNsa19kaXNhYmxlKGRzaS0+Y2xrKTsKKwllcnIgPSB0ZWdyYV9kc2lf d2FpdF9pZGxlKGRzaSwgMTAwKTsKKwlpZiAoZXJyIDwgMCkKKwkJZGV2X2RiZyhkc2ktPmRldiwg ImZhaWxlZCB0byBpZGxlIERTSTogJWRcbiIsIGVycik7CisKKwl0ZWdyYV9kc2lfZGlzYWJsZShk c2kpOwogCiAJZHNpLT5lbmFibGVkID0gZmFsc2U7CiAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGlj IHZvaWQgdGVncmFfZHNpX3NldF90aW1lb3V0KHN0cnVjdCB0ZWdyYV9kc2kgKmRzaSwgdW5zaWdu ZWQgbG9uZyBiY2xrLAorCQkJCSAgdW5zaWduZWQgaW50IHZyZWZyZXNoKQoreworCXVuc2lnbmVk IGludCB0aW1lb3V0OworCXUzMiB2YWx1ZTsKKworCS8qIG9uZSBmcmFtZSBoaWdoLXNwZWVkIHRy YW5zbWlzc2lvbiB0aW1lb3V0ICovCisJdGltZW91dCA9IChiY2xrIC8gdnJlZnJlc2gpIC8gNTEy OworCXZhbHVlID0gRFNJX1RJTUVPVVRfTFJYKDB4MjAwMCkgfCBEU0lfVElNRU9VVF9IVFgodGlt ZW91dCk7CisJdGVncmFfZHNpX3dyaXRlbChkc2ksIHZhbHVlLCBEU0lfVElNRU9VVF8wKTsKKwor CS8qIDIgbXMgcGVyaXBoZXJhbCB0aW1lb3V0IGZvciBwYW5lbCAqLworCXRpbWVvdXQgPSAyICog YmNsayAvIDUxMiAqIDEwMDA7CisJdmFsdWUgPSBEU0lfVElNRU9VVF9QUih0aW1lb3V0KSB8IERT SV9USU1FT1VUX1RBKDB4MjAwMCk7CisJdGVncmFfZHNpX3dyaXRlbChkc2ksIHZhbHVlLCBEU0lf VElNRU9VVF8xKTsKKworCXZhbHVlID0gRFNJX1RBTExZX1RBKDApIHwgRFNJX1RBTExZX0xSWCgw KSB8IERTSV9UQUxMWV9IVFgoMCk7CisJdGVncmFfZHNpX3dyaXRlbChkc2ksIHZhbHVlLCBEU0lf VE9fVEFMTFkpOworCisJaWYgKGRzaS0+c2xhdmUpCisJCXRlZ3JhX2RzaV9zZXRfdGltZW91dChk c2ktPnNsYXZlLCBiY2xrLCB2cmVmcmVzaCk7Cit9CisKIHN0YXRpYyBpbnQgdGVncmFfb3V0cHV0 X2RzaV9zZXR1cF9jbG9jayhzdHJ1Y3QgdGVncmFfb3V0cHV0ICpvdXRwdXQsCiAJCQkJCXN0cnVj dCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyBwY2xrLAogCQkJCQl1bnNpZ25lZCBpbnQgKmRpdnAp CiB7CiAJc3RydWN0IHRlZ3JhX2RjICpkYyA9IHRvX3RlZ3JhX2RjKG91dHB1dC0+ZW5jb2Rlci5j cnRjKTsKIAlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9ICZkYy0+YmFzZS5tb2RlOwot CXVuc2lnbmVkIGludCB0aW1lb3V0LCBtdWwsIGRpdiwgdnJlZnJlc2g7CiAJc3RydWN0IHRlZ3Jh X2RzaSAqZHNpID0gdG9fZHNpKG91dHB1dCk7Ci0JdW5zaWduZWQgbG9uZyBiY2xrLCBwbGxkLCB2 YWx1ZTsKKwl1bnNpZ25lZCBpbnQgbXVsLCBkaXYsIHZyZWZyZXNoLCBsYW5lczsKKwl1bnNpZ25l ZCBsb25nIGJjbGssIHBsbGQ7CiAJaW50IGVycjsKIAorCWxhbmVzID0gdGVncmFfZHNpX2dldF9s YW5lcyhkc2kpOworCiAJZXJyID0gdGVncmFfZHNpX2dldF9tdWxkaXYoZHNpLT5mb3JtYXQsICZt dWwsICZkaXYpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JRFJNX0RFQlVHX0tN UygibXVsOiAldSwgZGl2OiAldSwgbGFuZXM6ICV1XG4iLCBtdWwsIGRpdiwgZHNpLT5sYW5lcyk7 CisJRFJNX0RFQlVHX0tNUygibXVsOiAldSwgZGl2OiAldSwgbGFuZXM6ICV1XG4iLCBtdWwsIGRp diwgbGFuZXMpOwogCXZyZWZyZXNoID0gZHJtX21vZGVfdnJlZnJlc2gobW9kZSk7CiAJRFJNX0RF QlVHX0tNUygidnJlZnJlc2g6ICV1XG4iLCB2cmVmcmVzaCk7CiAKIAkvKiBjb21wdXRlIGJ5dGUg Y2xvY2sgKi8KLQliY2xrID0gKHBjbGsgKiBtdWwpIC8gKGRpdiAqIGRzaS0+bGFuZXMpOworCWJj bGsgPSAocGNsayAqIG11bCkgLyAoZGl2ICogbGFuZXMpOwogCiAJLyoKIAkgKiBDb21wdXRlIGJp dCBjbG9jayBhbmQgcm91bmQgdXAgdG8gdGhlIG5leHQgTUh6LgogCSAqLwotCXBsbGQgPSBESVZf Uk9VTkRfVVAoYmNsayAqIDgsIDEwMDAwMDApICogMTAwMDAwMDsKKwlwbGxkID0gRElWX1JPVU5E X1VQKGJjbGsgKiA4LCBVU0VDX1BFUl9TRUMpICogVVNFQ19QRVJfU0VDOwogCiAJLyoKIAkgKiBX ZSBkaXZpZGUgdGhlIGZyZXF1ZW5jeSBieSB0d28gaGVyZSwgYnV0IHdlIG1ha2UgdXAgZm9yIHRo YXQgYnkKQEAgLTY0MCwyNSArODUyLDEzIEBAIHN0YXRpYyBpbnQgdGVncmFfb3V0cHV0X2RzaV9z ZXR1cF9jbG9jayhzdHJ1Y3QgdGVncmFfb3V0cHV0ICpvdXRwdXQsCiAJICogbm90IHdvcmtpbmcg cHJvcGVybHkgb3RoZXJ3aXNlLiBQZXJoYXBzIHRoZSBQTExzIGNhbm5vdCBnZW5lcmF0ZQogCSAq IGZyZXF1ZW5jaWVzIHN1ZmZpY2llbnRseSBoaWdoLgogCSAqLwotCSpkaXZwID0gKCg4ICogbXVs KSAvIChkaXYgKiBkc2ktPmxhbmVzKSkgLSAyOworCSpkaXZwID0gKCg4ICogbXVsKSAvIChkaXYg KiBsYW5lcykpIC0gMjsKIAogCS8qCiAJICogWFhYOiBNb3ZlIHRoZSBiZWxvdyBzb21ld2hlcmUg ZWxzZSBzbyB0aGF0IHdlIGRvbid0IG5lZWQgdG8gaGF2ZQogCSAqIGFjY2VzcyB0byB0aGUgdnJl ZnJlc2ggaW4gdGhpcyBmdW5jdGlvbj8KIAkgKi8KLQotCS8qIG9uZSBmcmFtZSBoaWdoLXNwZWVk IHRyYW5zbWlzc2lvbiB0aW1lb3V0ICovCi0JdGltZW91dCA9IChiY2xrIC8gdnJlZnJlc2gpIC8g NTEyOwotCXZhbHVlID0gRFNJX1RJTUVPVVRfTFJYKDB4MjAwMCkgfCBEU0lfVElNRU9VVF9IVFgo dGltZW91dCk7Ci0JdGVncmFfZHNpX3dyaXRlbChkc2ksIHZhbHVlLCBEU0lfVElNRU9VVF8wKTsK LQotCS8qIDIgbXMgcGVyaXBoZXJhbCB0aW1lb3V0IGZvciBwYW5lbCAqLwotCXRpbWVvdXQgPSAy ICogYmNsayAvIDUxMiAqIDEwMDA7Ci0JdmFsdWUgPSBEU0lfVElNRU9VVF9QUih0aW1lb3V0KSB8 IERTSV9USU1FT1VUX1RBKDB4MjAwMCk7Ci0JdGVncmFfZHNpX3dyaXRlbChkc2ksIHZhbHVlLCBE U0lfVElNRU9VVF8xKTsKLQotCXZhbHVlID0gRFNJX1RBTExZX1RBKDApIHwgRFNJX1RBTExZX0xS WCgwKSB8IERTSV9UQUxMWV9IVFgoMCk7Ci0JdGVncmFfZHNpX3dyaXRlbChkc2ksIHZhbHVlLCBE U0lfVE9fVEFMTFkpOworCXRlZ3JhX2RzaV9zZXRfdGltZW91dChkc2ksIGJjbGssIHZyZWZyZXNo KTsKIAogCXJldHVybiAwOwogfQpAQCAtNjk1LDcgKzg5NSw3IEBAIHN0YXRpYyBpbnQgdGVncmFf ZHNpX3BhZF9lbmFibGUoc3RydWN0IHRlZ3JhX2RzaSAqZHNpKQogCiBzdGF0aWMgaW50IHRlZ3Jh X2RzaV9wYWRfY2FsaWJyYXRlKHN0cnVjdCB0ZWdyYV9kc2kgKmRzaSkKIHsKLQl1bnNpZ25lZCBs b25nIHZhbHVlOworCXUzMiB2YWx1ZTsKIAogCXRlZ3JhX2RzaV93cml0ZWwoZHNpLCAwLCBEU0lf UEFEX0NPTlRST0xfMCk7CiAJdGVncmFfZHNpX3dyaXRlbChkc2ksIDAsIERTSV9QQURfQ09OVFJP TF8xKTsKQEAgLTcyMCwxNCArOTIwLDE3IEBAIHN0YXRpYyBpbnQgdGVncmFfZHNpX2luaXQoc3Ry dWN0IGhvc3QxeF9jbGllbnQgKmNsaWVudCkKIAlzdHJ1Y3QgdGVncmFfZHNpICpkc2kgPSBob3N0 MXhfY2xpZW50X3RvX2RzaShjbGllbnQpOwogCWludCBlcnI7CiAKLQlkc2ktPm91dHB1dC50eXBl ID0gVEVHUkFfT1VUUFVUX0RTSTsKLQlkc2ktPm91dHB1dC5kZXYgPSBjbGllbnQtPmRldjsKLQlk c2ktPm91dHB1dC5vcHMgPSAmZHNpX29wczsKLQotCWVyciA9IHRlZ3JhX291dHB1dF9pbml0KGRy bSwgJmRzaS0+b3V0cHV0KTsKLQlpZiAoZXJyIDwgMCkgewotCQlkZXZfZXJyKGNsaWVudC0+ZGV2 LCAib3V0cHV0IHNldHVwIGZhaWxlZDogJWRcbiIsIGVycik7Ci0JCXJldHVybiBlcnI7CisJLyog R2FuZ3N0ZXJzIG11c3Qgbm90IHJlZ2lzdGVyIHRoZWlyIG93biBvdXRwdXRzLiAqLworCWlmICgh ZHNpLT5tYXN0ZXIpIHsKKwkJZHNpLT5vdXRwdXQudHlwZSA9IFRFR1JBX09VVFBVVF9EU0k7CisJ CWRzaS0+b3V0cHV0LmRldiA9IGNsaWVudC0+ZGV2OworCQlkc2ktPm91dHB1dC5vcHMgPSAmZHNp X29wczsKKworCQllcnIgPSB0ZWdyYV9vdXRwdXRfaW5pdChkcm0sICZkc2ktPm91dHB1dCk7CisJ CWlmIChlcnIgPCAwKSB7CisJCQlkZXZfZXJyKGNsaWVudC0+ZGV2LCAib3V0cHV0IHNldHVwIGZh aWxlZDogJWRcbiIsIGVycik7CisJCQlyZXR1cm4gZXJyOworCQl9CiAJfQogCiAJaWYgKElTX0VO QUJMRUQoQ09ORklHX0RFQlVHX0ZTKSkgewpAQCAtNzM2LDEyICs5MzksNiBAQCBzdGF0aWMgaW50 IHRlZ3JhX2RzaV9pbml0KHN0cnVjdCBob3N0MXhfY2xpZW50ICpjbGllbnQpCiAJCQlkZXZfZXJy KGRzaS0+ZGV2LCAiZGVidWdmcyBzZXR1cCBmYWlsZWQ6ICVkXG4iLCBlcnIpOwogCX0KIAotCWVy ciA9IHRlZ3JhX2RzaV9wYWRfY2FsaWJyYXRlKGRzaSk7Ci0JaWYgKGVyciA8IDApIHsKLQkJZGV2 X2Vycihkc2ktPmRldiwgIk1JUEkgY2FsaWJyYXRpb24gZmFpbGVkOiAlZFxuIiwgZXJyKTsKLQkJ cmV0dXJuIGVycjsKLQl9Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNzU2LDE2ICs5NTMsMjAgQEAg c3RhdGljIGludCB0ZWdyYV9kc2lfZXhpdChzdHJ1Y3QgaG9zdDF4X2NsaWVudCAqY2xpZW50KQog CQkJZGV2X2Vycihkc2ktPmRldiwgImRlYnVnZnMgY2xlYW51cCBmYWlsZWQ6ICVkXG4iLCBlcnIp OwogCX0KIAotCWVyciA9IHRlZ3JhX291dHB1dF9kaXNhYmxlKCZkc2ktPm91dHB1dCk7Ci0JaWYg KGVyciA8IDApIHsKLQkJZGV2X2VycihjbGllbnQtPmRldiwgIm91dHB1dCBmYWlsZWQgdG8gZGlz YWJsZTogJWRcbiIsIGVycik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JZXJyID0gdGVncmFfb3V0 cHV0X2V4aXQoJmRzaS0+b3V0cHV0KTsKLQlpZiAoZXJyIDwgMCkgewotCQlkZXZfZXJyKGNsaWVu dC0+ZGV2LCAib3V0cHV0IGNsZWFudXAgZmFpbGVkOiAlZFxuIiwgZXJyKTsKLQkJcmV0dXJuIGVy cjsKKwlpZiAoIWRzaS0+bWFzdGVyKSB7CisJCWVyciA9IHRlZ3JhX291dHB1dF9kaXNhYmxlKCZk c2ktPm91dHB1dCk7CisJCWlmIChlcnIgPCAwKSB7CisJCQlkZXZfZXJyKGNsaWVudC0+ZGV2LCAi b3V0cHV0IGZhaWxlZCB0byBkaXNhYmxlOiAlZFxuIiwKKwkJCQllcnIpOworCQkJcmV0dXJuIGVy cjsKKwkJfQorCisJCWVyciA9IHRlZ3JhX291dHB1dF9leGl0KCZkc2ktPm91dHB1dCk7CisJCWlm IChlcnIgPCAwKSB7CisJCQlkZXZfZXJyKGNsaWVudC0+ZGV2LCAib3V0cHV0IGNsZWFudXAgZmFp bGVkOiAlZFxuIiwKKwkJCQllcnIpOworCQkJcmV0dXJuIGVycjsKKwkJfQogCX0KIAogCXJldHVy biAwOwpAQCAtNzkyLDIwICs5OTMsMzI0IEBAIHN0YXRpYyBpbnQgdGVncmFfZHNpX3NldHVwX2Ns b2NrcyhzdHJ1Y3QgdGVncmFfZHNpICpkc2kpCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25z dCBjaGFyICogY29uc3QgZXJyb3JfcmVwb3J0WzE2XSA9IHsKKwkiU29UIEVycm9yIiwKKwkiU29U IFN5bmMgRXJyb3IiLAorCSJFb1QgU3luYyBFcnJvciIsCisJIkVzY2FwZSBNb2RlIEVudHJ5IENv bW1hbmQgRXJyb3IiLAorCSJMb3ctUG93ZXIgVHJhbnNtaXQgU3luYyBFcnJvciIsCisJIlBlcmlw aGVyYWwgVGltZW91dCBFcnJvciIsCisJIkZhbHNlIENvbnRyb2wgRXJyb3IiLAorCSJDb250ZW50 aW9uIERldGVjdGVkIiwKKwkiRUNDIEVycm9yLCBzaW5nbGUtYml0IiwKKwkiRUNDIEVycm9yLCBt dWx0aS1iaXQiLAorCSJDaGVja3N1bSBFcnJvciIsCisJIkRTSSBEYXRhIFR5cGUgTm90IFJlY29n bml6ZWQiLAorCSJEU0kgVkMgSUQgSW52YWxpZCIsCisJIkludmFsaWQgVHJhbnNtaXNzaW9uIExl bmd0aCIsCisJIlJlc2VydmVkIiwKKwkiRFNJIFByb3RvY29sIFZpb2xhdGlvbiIsCit9OworCitz dGF0aWMgc3NpemVfdCB0ZWdyYV9kc2lfcmVhZF9yZXNwb25zZShzdHJ1Y3QgdGVncmFfZHNpICpk c2ksCisJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBtaXBpX2RzaV9tc2cgKm1zZywKKwkJCQkgICAg ICAgc2l6ZV90IGNvdW50KQoreworCXU4ICpyeCA9IG1zZy0+cnhfYnVmOworCXVuc2lnbmVkIGlu dCBpLCBqLCBrOworCXNpemVfdCBzaXplID0gMDsKKwl1MTYgZXJyb3JzOworCXUzMiB2YWx1ZTsK KworCS8qIHJlYWQgYW5kIHBhcnNlIHBhY2tldCBoZWFkZXIgKi8KKwl2YWx1ZSA9IHRlZ3JhX2Rz aV9yZWFkbChkc2ksIERTSV9SRF9EQVRBKTsKKworCXN3aXRjaCAodmFsdWUgJiAweDNmKSB7CisJ Y2FzZSBNSVBJX0RTSV9SWF9BQ0tOT1dMRURHRV9BTkRfRVJST1JfUkVQT1JUOgorCQllcnJvcnMg PSAodmFsdWUgPj4gOCkgJiAweGZmZmY7CisJCWRldl9kYmcoZHNpLT5kZXYsICJBY2tub3dsZWRn ZSBhbmQgZXJyb3IgcmVwb3J0OiAlMDR4XG4iLAorCQkJZXJyb3JzKTsKKwkJZm9yIChpID0gMDsg aSA8IEFSUkFZX1NJWkUoZXJyb3JfcmVwb3J0KTsgaSsrKQorCQkJaWYgKGVycm9ycyAmIEJJVChp KSkKKwkJCQlkZXZfZGJnKGRzaS0+ZGV2LCAiICAlMnU6ICVzXG4iLCBpLAorCQkJCQllcnJvcl9y ZXBvcnRbaV0pOworCQlicmVhazsKKworCWNhc2UgTUlQSV9EU0lfUlhfRENTX1NIT1JUX1JFQURf UkVTUE9OU0VfMUJZVEU6CisJCXJ4WzBdID0gKHZhbHVlID4+IDgpICYgMHhmZjsKKwkJc2l6ZSA9 IDE7CisJCWJyZWFrOworCisJY2FzZSBNSVBJX0RTSV9SWF9EQ1NfU0hPUlRfUkVBRF9SRVNQT05T RV8yQllURToKKwkJcnhbMF0gPSAodmFsdWUgPj4gIDgpICYgMHhmZjsKKwkJcnhbMV0gPSAodmFs dWUgPj4gMTYpICYgMHhmZjsKKwkJc2l6ZSA9IDI7CisJCWJyZWFrOworCisJY2FzZSBNSVBJX0RT SV9SWF9EQ1NfTE9OR19SRUFEX1JFU1BPTlNFOgorCQlzaXplID0gKCh2YWx1ZSA+PiA4KSAmIDB4 ZmYwMCkgfCAoKHZhbHVlID4+IDgpICYgMHhmZik7CisJCWJyZWFrOworCisJY2FzZSBNSVBJX0RT SV9SWF9HRU5FUklDX0xPTkdfUkVBRF9SRVNQT05TRToKKwkJc2l6ZSA9ICgodmFsdWUgPj4gOCkg JiAweGZmMDApIHwgKCh2YWx1ZSA+PiA4KSAmIDB4ZmYpOworCQlicmVhazsKKworCWRlZmF1bHQ6 CisJCWRldl9lcnIoZHNpLT5kZXYsICJ1bmhhbmRsZWQgcmVzcG9uc2UgdHlwZTogJTAyeFxuIiwK KwkJCXZhbHVlICYgMHgzZik7CisJCXJldHVybiAtRVBST1RPOworCX0KKworCXNpemUgPSBtaW4o c2l6ZSwgbXNnLT5yeF9sZW4pOworCisJaWYgKG1zZy0+cnhfYnVmICYmIHNpemUgPiAwKSB7CisJ CWZvciAoaSA9IDAsIGogPSAwOyBpIDwgY291bnQgLSAxOyBpKyssIGogKz0gNCkgeworCQkJdTgg KnJ4ID0gbXNnLT5yeF9idWYgKyBqOworCisJCQl2YWx1ZSA9IHRlZ3JhX2RzaV9yZWFkbChkc2ks IERTSV9SRF9EQVRBKTsKKworCQkJZm9yIChrID0gMDsgayA8IDQgJiYgKGogKyBrKSA8IG1zZy0+ cnhfbGVuOyBrKyspCisJCQkJcnhbaiArIGtdID0gKHZhbHVlID4+IChrIDw8IDMpKSAmIDB4ZmY7 CisJCX0KKwl9CisKKwlyZXR1cm4gc2l6ZTsKK30KKworc3RhdGljIGludCB0ZWdyYV9kc2lfdHJh bnNtaXQoc3RydWN0IHRlZ3JhX2RzaSAqZHNpLCB1bnNpZ25lZCBsb25nIHRpbWVvdXQpCit7CisJ dGVncmFfZHNpX3dyaXRlbChkc2ksIERTSV9UUklHR0VSX0hPU1QsIERTSV9UUklHR0VSKTsKKwor CXRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyh0aW1lb3V0KTsKKworCXdoaWxl ICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSkgeworCQl1MzIgdmFsdWUgPSB0ZWdyYV9k c2lfcmVhZGwoZHNpLCBEU0lfVFJJR0dFUik7CisJCWlmICgodmFsdWUgJiBEU0lfVFJJR0dFUl9I T1NUKSA9PSAwKQorCQkJcmV0dXJuIDA7CisKKwkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOwor CX0KKworCURSTV9ERUJVR19LTVMoInRpbWVvdXQgd2FpdGluZyBmb3IgdHJhbnNtaXNzaW9uIHRv IGNvbXBsZXRlXG4iKTsKKwlyZXR1cm4gLUVUSU1FRE9VVDsKK30KKworc3RhdGljIGludCB0ZWdy YV9kc2lfd2FpdF9mb3JfcmVzcG9uc2Uoc3RydWN0IHRlZ3JhX2RzaSAqZHNpLAorCQkJCSAgICAg ICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpCit7CisJdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190 b19qaWZmaWVzKDI1MCk7CisKKwl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkp IHsKKwkJdTMyIHZhbHVlID0gdGVncmFfZHNpX3JlYWRsKGRzaSwgRFNJX1NUQVRVUyk7CisJCXU4 IGNvdW50ID0gdmFsdWUgJiAweDFmOworCisJCWlmIChjb3VudCA+IDApCisJCQlyZXR1cm4gY291 bnQ7CisKKwkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOworCX0KKworCURSTV9ERUJVR19LTVMo InBlcmlwaGVyYWwgcmV0dXJuZWQgbm8gZGF0YVxuIik7CisJcmV0dXJuIC1FVElNRURPVVQ7Cit9 CisKK3N0YXRpYyB2b2lkIHRlZ3JhX2RzaV93cml0ZXNsKHN0cnVjdCB0ZWdyYV9kc2kgKmRzaSwg dW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkgICAgICBjb25zdCB2b2lkICpidWZmZXIsIHNpemVf dCBzaXplKQoreworCWNvbnN0IHU4ICpidWYgPSBidWZmZXI7CisJc2l6ZV90IGksIGo7CisJdTMy IHZhbHVlOworCisJZm9yIChqID0gMDsgaiA8IHNpemU7IGogKz0gNCkgeworCQl2YWx1ZSA9IDA7 CisKKwkJZm9yIChpID0gMDsgaSA8IDQgJiYgaiArIGkgPCBzaXplOyBpKyspCisJCQl2YWx1ZSB8 PSBidWZbaiArIGldIDw8IChpIDw8IDMpOworCisJCXRlZ3JhX2RzaV93cml0ZWwoZHNpLCB2YWx1 ZSwgRFNJX1dSX0RBVEEpOworCX0KK30KKworc3RhdGljIHNzaXplX3QgdGVncmFfZHNpX2hvc3Rf dHJhbnNmZXIoc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QsCisJCQkJICAgICAgIGNvbnN0IHN0 cnVjdCBtaXBpX2RzaV9tc2cgKm1zZykKK3sKKwlzdHJ1Y3QgdGVncmFfZHNpICpkc2kgPSBob3N0 X3RvX3RlZ3JhKGhvc3QpOworCXN0cnVjdCBtaXBpX2RzaV9wYWNrZXQgcGFja2V0OworCWNvbnN0 IHU4ICpoZWFkZXI7CisJc2l6ZV90IGNvdW50OworCXNzaXplX3QgZXJyOworCXUzMiB2YWx1ZTsK KworCWVyciA9IG1pcGlfZHNpX2NyZWF0ZV9wYWNrZXQoJnBhY2tldCwgbXNnKTsKKwlpZiAoZXJy IDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWhlYWRlciA9IHBhY2tldC5oZWFkZXI7CisKKwkvKiBt YXhpbXVtIEZJRk8gZGVwdGggaXMgMTkyMCB3b3JkcyAqLworCWlmIChwYWNrZXQuc2l6ZSA+IGRz aS0+dmlkZW9fZmlmb19kZXB0aCAqIDQpCisJCXJldHVybiAtRU5PU1BDOworCisJLyogcmVzZXQg dW5kZXJmbG93L292ZXJmbG93IGZsYWdzICovCisJdmFsdWUgPSB0ZWdyYV9kc2lfcmVhZGwoZHNp LCBEU0lfU1RBVFVTKTsKKwlpZiAodmFsdWUgJiAoRFNJX1NUQVRVU19VTkRFUkZMT1cgfCBEU0lf U1RBVFVTX09WRVJGTE9XKSkgeworCQl2YWx1ZSA9IERTSV9IT1NUX0NPTlRST0xfRklGT19SRVNF VDsKKwkJdGVncmFfZHNpX3dyaXRlbChkc2ksIHZhbHVlLCBEU0lfSE9TVF9DT05UUk9MKTsKKwkJ dXNsZWVwX3JhbmdlKDEwLCAyMCk7CisJfQorCisJdmFsdWUgPSB0ZWdyYV9kc2lfcmVhZGwoZHNp LCBEU0lfUE9XRVJfQ09OVFJPTCk7CisJdmFsdWUgfD0gRFNJX1BPV0VSX0NPTlRST0xfRU5BQkxF OworCXRlZ3JhX2RzaV93cml0ZWwoZHNpLCB2YWx1ZSwgRFNJX1BPV0VSX0NPTlRST0wpOworCisJ dXNsZWVwX3JhbmdlKDUwMDAsIDEwMDAwKTsKKworCXZhbHVlID0gRFNJX0hPU1RfQ09OVFJPTF9D UkNfUkVTRVQgfCBEU0lfSE9TVF9DT05UUk9MX1RYX1RSSUdfSE9TVCB8CisJCURTSV9IT1NUX0NP TlRST0xfQ1MgfCBEU0lfSE9TVF9DT05UUk9MX0VDQzsKKworCWlmICgobXNnLT5mbGFncyAmIE1J UElfRFNJX01TR19VU0VfTFBNKSA9PSAwKQorCQl2YWx1ZSB8PSBEU0lfSE9TVF9DT05UUk9MX0hT OworCisJLyoKKwkgKiBUaGUgaG9zdCBGSUZPIGhhcyBhIG1heGltdW0gb2YgNjQgd29yZHMsIHNv IGxhcmdlciB0cmFuc21pc3Npb25zCisJICogbmVlZCB0byB1c2UgdGhlIHZpZGVvIEZJRk8uCisJ ICovCisJaWYgKHBhY2tldC5zaXplID4gZHNpLT5ob3N0X2ZpZm9fZGVwdGggKiA0KQorCQl2YWx1 ZSB8PSBEU0lfSE9TVF9DT05UUk9MX0ZJRk9fU0VMOworCisJdGVncmFfZHNpX3dyaXRlbChkc2ks IHZhbHVlLCBEU0lfSE9TVF9DT05UUk9MKTsKKworCS8qCisJICogRm9yIHJlYWRzIGFuZCBtZXNz YWdlcyB3aXRoIGV4cGxpY2l0bHkgcmVxdWVzdGVkIEFDSywgZ2VuZXJhdGUgYQorCSAqIEJUQSBz ZXF1ZW5jZSBhZnRlciB0aGUgdHJhbnNtaXNzaW9uIG9mIHRoZSBwYWNrZXQuCisJICovCisJaWYg KChtc2ctPmZsYWdzICYgTUlQSV9EU0lfTVNHX1JFUV9BQ0spIHx8CisJICAgIChtc2ctPnJ4X2J1 ZiAmJiBtc2ctPnJ4X2xlbiA+IDApKSB7CisJCXZhbHVlID0gdGVncmFfZHNpX3JlYWRsKGRzaSwg RFNJX0hPU1RfQ09OVFJPTCk7CisJCXZhbHVlIHw9IERTSV9IT1NUX0NPTlRST0xfUEtUX0JUQTsK KwkJdGVncmFfZHNpX3dyaXRlbChkc2ksIHZhbHVlLCBEU0lfSE9TVF9DT05UUk9MKTsKKwl9CisK Kwl2YWx1ZSA9IERTSV9DT05UUk9MX0xBTkVTKDApIHwgRFNJX0NPTlRST0xfSE9TVF9FTkFCTEU7 CisJdGVncmFfZHNpX3dyaXRlbChkc2ksIHZhbHVlLCBEU0lfQ09OVFJPTCk7CisKKwkvKiB3cml0 ZSBwYWNrZXQgaGVhZGVyLCBFQ0MgaXMgZ2VuZXJhdGVkIGJ5IGhhcmR3YXJlICovCisJdmFsdWUg PSBoZWFkZXJbMl0gPDwgMTYgfCBoZWFkZXJbMV0gPDwgOCB8IGhlYWRlclswXTsKKwl0ZWdyYV9k c2lfd3JpdGVsKGRzaSwgdmFsdWUsIERTSV9XUl9EQVRBKTsKKworCS8qIHdyaXRlIHBheWxvYWQg KGlmIGFueSkgKi8KKwlpZiAocGFja2V0LnBheWxvYWRfbGVuZ3RoID4gMCkKKwkJdGVncmFfZHNp X3dyaXRlc2woZHNpLCBEU0lfV1JfREFUQSwgcGFja2V0LnBheWxvYWQsCisJCQkJICBwYWNrZXQu cGF5bG9hZF9sZW5ndGgpOworCisJZXJyID0gdGVncmFfZHNpX3RyYW5zbWl0KGRzaSwgMjUwKTsK KwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWlmICgobXNnLT5mbGFncyAmIE1JUElf RFNJX01TR19SRVFfQUNLKSB8fAorCSAgICAobXNnLT5yeF9idWYgJiYgbXNnLT5yeF9sZW4gPiAw KSkgeworCQllcnIgPSB0ZWdyYV9kc2lfd2FpdF9mb3JfcmVzcG9uc2UoZHNpLCAyNTApOworCQlp ZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisKKwkJY291bnQgPSBlcnI7CisKKwkJdmFsdWUg PSB0ZWdyYV9kc2lfcmVhZGwoZHNpLCBEU0lfUkRfREFUQSk7CisJCXN3aXRjaCAodmFsdWUpIHsK KwkJY2FzZSAweDg0OgorCQkJLyoKKwkJCWRldl9kYmcoZHNpLT5kZXYsICJBQ0tcbiIpOworCQkJ Ki8KKwkJCWJyZWFrOworCisJCWNhc2UgMHg4NzoKKwkJCS8qCisJCQlkZXZfZGJnKGRzaS0+ZGV2 LCAiRVNDQVBFXG4iKTsKKwkJCSovCisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZGV2X2Vy cihkc2ktPmRldiwgInVua25vd24gc3RhdHVzOiAlMDh4XG4iLCB2YWx1ZSk7CisJCQlicmVhazsK KwkJfQorCisJCWlmIChjb3VudCA+IDEpIHsKKwkJCWVyciA9IHRlZ3JhX2RzaV9yZWFkX3Jlc3Bv bnNlKGRzaSwgbXNnLCBjb3VudCk7CisJCQlpZiAoZXJyIDwgMCkKKwkJCQlkZXZfZXJyKGRzaS0+ ZGV2LAorCQkJCQkiZmFpbGVkIHRvIHBhcnNlIHJlc3BvbnNlOiAlemRcbiIsCisJCQkJCWVycik7 CisJCQllbHNlIHsKKwkJCQkvKgorCQkJCSAqIEZvciByZWFkIGNvbW1hbmRzLCByZXR1cm4gdGhl IG51bWJlciBvZgorCQkJCSAqIGJ5dGVzIHJldHVybmVkIGJ5IHRoZSBwZXJpcGhlcmFsLgorCQkJ CSAqLworCQkJCWNvdW50ID0gZXJyOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJLyoKKwkJICog Rm9yIHdyaXRlIGNvbW1hbmRzLCB3ZSBoYXZlIHRyYW5zbWl0dGVkIHRoZSA0LWJ5dGUgaGVhZGVy CisJCSAqIHBsdXMgdGhlIHZhcmlhYmxlLWxlbmd0aCBwYXlsb2FkLgorCQkgKi8KKwkJY291bnQg PSA0ICsgcGFja2V0LnBheWxvYWRfbGVuZ3RoOworCX0KKworCXJldHVybiBjb3VudDsKK30KKwor c3RhdGljIGludCB0ZWdyYV9kc2lfZ2FuZ2VkX3NldHVwKHN0cnVjdCB0ZWdyYV9kc2kgKmRzaSkK K3sKKwlzdHJ1Y3QgY2xrICpwYXJlbnQ7CisJaW50IGVycjsKKworCS8qIG1ha2Ugc3VyZSBib3Ro IERTSSBjb250cm9sbGVycyBzaGFyZSB0aGUgc2FtZSBQTEwgKi8KKwlwYXJlbnQgPSBjbGtfZ2V0 X3BhcmVudChkc2ktPnNsYXZlLT5jbGspOworCWlmICghcGFyZW50KQorCQlyZXR1cm4gLUVJTlZB TDsKKworCWVyciA9IGNsa19zZXRfcGFyZW50KHBhcmVudCwgZHNpLT5jbGtfcGFyZW50KTsKKwlp ZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50 IHRlZ3JhX2RzaV9ob3N0X2F0dGFjaChzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCwKIAkJCQkg c3RydWN0IG1pcGlfZHNpX2RldmljZSAqZGV2aWNlKQogewogCXN0cnVjdCB0ZWdyYV9kc2kgKmRz aSA9IGhvc3RfdG9fdGVncmEoaG9zdCk7Ci0Jc3RydWN0IHRlZ3JhX291dHB1dCAqb3V0cHV0ID0g JmRzaS0+b3V0cHV0OwogCiAJZHNpLT5mbGFncyA9IGRldmljZS0+bW9kZV9mbGFnczsKIAlkc2kt PmZvcm1hdCA9IGRldmljZS0+Zm9ybWF0OwogCWRzaS0+bGFuZXMgPSBkZXZpY2UtPmxhbmVzOwog Ci0Jb3V0cHV0LT5wYW5lbCA9IG9mX2RybV9maW5kX3BhbmVsKGRldmljZS0+ZGV2Lm9mX25vZGUp OwotCWlmIChvdXRwdXQtPnBhbmVsKSB7Ci0JCWlmIChvdXRwdXQtPmNvbm5lY3Rvci5kZXYpCisJ aWYgKGRzaS0+c2xhdmUpIHsKKwkJaW50IGVycjsKKworCQlkZXZfZGJnKGRzaS0+ZGV2LCAiYXR0 YWNoaW5nIGR1YWwtY2hhbm5lbCBkZXZpY2UgJXNcbiIsCisJCQlkZXZfbmFtZSgmZGV2aWNlLT5k ZXYpKTsKKworCQllcnIgPSB0ZWdyYV9kc2lfZ2FuZ2VkX3NldHVwKGRzaSk7CisJCWlmIChlcnIg PCAwKSB7CisJCQlkZXZfZXJyKGRzaS0+ZGV2LCAiZmFpbGVkIHRvIHNldCB1cCBnYW5nZWQgbW9k ZTogJWRcbiIsCisJCQkJZXJyKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwl9CisKKwkvKgorCSAq IFNsYXZlcyBkb24ndCBoYXZlIGEgcGFuZWwgYXNzb2NpYXRlZCB3aXRoIHRoZW0sIHNvIHRoZXkg cHJvdmlkZQorCSAqIG1lcmVseSB0aGUgc2Vjb25kIGNoYW5uZWwuCisJICovCisJaWYgKCFkc2kt Pm1hc3RlcikgeworCQlzdHJ1Y3QgdGVncmFfb3V0cHV0ICpvdXRwdXQgPSAmZHNpLT5vdXRwdXQ7 CisKKwkJb3V0cHV0LT5wYW5lbCA9IG9mX2RybV9maW5kX3BhbmVsKGRldmljZS0+ZGV2Lm9mX25v ZGUpOworCQlpZiAob3V0cHV0LT5wYW5lbCAmJiBvdXRwdXQtPmNvbm5lY3Rvci5kZXYpIHsKKwkJ CWRybV9wYW5lbF9hdHRhY2gob3V0cHV0LT5wYW5lbCwgJm91dHB1dC0+Y29ubmVjdG9yKTsKIAkJ CWRybV9oZWxwZXJfaHBkX2lycV9ldmVudChvdXRwdXQtPmNvbm5lY3Rvci5kZXYpOworCQl9CiAJ fQogCiAJcmV0dXJuIDA7CkBAIC04MTgsMTAgKzEzMjMsMTAgQEAgc3RhdGljIGludCB0ZWdyYV9k c2lfaG9zdF9kZXRhY2goc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QsCiAJc3RydWN0IHRlZ3Jh X291dHB1dCAqb3V0cHV0ID0gJmRzaS0+b3V0cHV0OwogCiAJaWYgKG91dHB1dC0+cGFuZWwgJiYg JmRldmljZS0+ZGV2ID09IG91dHB1dC0+cGFuZWwtPmRldikgeworCQlvdXRwdXQtPnBhbmVsID0g TlVMTDsKKwogCQlpZiAob3V0cHV0LT5jb25uZWN0b3IuZGV2KQogCQkJZHJtX2hlbHBlcl9ocGRf aXJxX2V2ZW50KG91dHB1dC0+Y29ubmVjdG9yLmRldik7Ci0KLQkJb3V0cHV0LT5wYW5lbCA9IE5V TEw7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC04MzAsOCArMTMzNSwyOSBAQCBzdGF0aWMgaW50IHRl Z3JhX2RzaV9ob3N0X2RldGFjaChzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCwKIHN0YXRpYyBj b25zdCBzdHJ1Y3QgbWlwaV9kc2lfaG9zdF9vcHMgdGVncmFfZHNpX2hvc3Rfb3BzID0gewogCS5h dHRhY2ggPSB0ZWdyYV9kc2lfaG9zdF9hdHRhY2gsCiAJLmRldGFjaCA9IHRlZ3JhX2RzaV9ob3N0 X2RldGFjaCwKKwkudHJhbnNmZXIgPSB0ZWdyYV9kc2lfaG9zdF90cmFuc2ZlciwKIH07CiAKK3N0 YXRpYyBpbnQgdGVncmFfZHNpX2dhbmdlZF9wcm9iZShzdHJ1Y3QgdGVncmFfZHNpICpkc2kpCit7 CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKworCW5wID0gb2ZfcGFyc2VfcGhhbmRsZShkc2kt PmRldi0+b2Zfbm9kZSwgIm52aWRpYSxnYW5nZWQtbW9kZSIsIDApOworCWlmIChucCkgeworCQlz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpnYW5nc3RlciA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUo bnApOworCisJCWRzaS0+c2xhdmUgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShnYW5nc3Rlcik7CisJ CW9mX25vZGVfcHV0KG5wKTsKKworCQlpZiAoIWRzaS0+c2xhdmUpCisJCQlyZXR1cm4gLUVQUk9C RV9ERUZFUjsKKworCQlkc2ktPnNsYXZlLT5tYXN0ZXIgPSBkc2k7CisJfQorCisJcmV0dXJuIDA7 Cit9CisKIHN0YXRpYyBpbnQgdGVncmFfZHNpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXYpCiB7CiAJc3RydWN0IHRlZ3JhX2RzaSAqZHNpOwpAQCAtODQ2LDEwICsxMzcyLDE2IEBA IHN0YXRpYyBpbnQgdGVncmFfZHNpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYp CiAJZHNpLT52aWRlb19maWZvX2RlcHRoID0gMTkyMDsKIAlkc2ktPmhvc3RfZmlmb19kZXB0aCA9 IDY0OwogCisJZXJyID0gdGVncmFfZHNpX2dhbmdlZF9wcm9iZShkc2kpOworCWlmIChlcnIgPCAw KQorCQlyZXR1cm4gZXJyOworCiAJZXJyID0gdGVncmFfb3V0cHV0X3Byb2JlKCZkc2ktPm91dHB1 dCk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKKwlkc2ktPm91dHB1dC5jb25uZWN0 b3IucG9sbGVkID0gRFJNX0NPTk5FQ1RPUl9QT0xMX0hQRDsKKwogCS8qCiAJICogQXNzdW1lIHRo ZXNlIHZhbHVlcyBieSBkZWZhdWx0LiBXaGVuIGEgRFNJIHBlcmlwaGVyYWwgZHJpdmVyCiAJICog YXR0YWNoZXMgdG8gdGhlIERTSSBob3N0LCB0aGUgcGFyYW1ldGVycyB3aWxsIGJlIHRha2VuIGZy b20KQEAgLTg2Myw2OCArMTM5NSw4MyBAQCBzdGF0aWMgaW50IHRlZ3JhX2RzaV9wcm9iZShzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCWlmIChJU19FUlIoZHNpLT5yc3QpKQogCQlyZXR1 cm4gUFRSX0VSUihkc2ktPnJzdCk7CiAKKwllcnIgPSByZXNldF9jb250cm9sX2RlYXNzZXJ0KGRz aS0+cnN0KTsKKwlpZiAoZXJyIDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQg dG8gYnJpbmcgRFNJIG91dCBvZiByZXNldDogJWRcbiIsCisJCQllcnIpOworCQlyZXR1cm4gZXJy OworCX0KKwogCWRzaS0+Y2xrID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsIE5VTEwpOwogCWlm IChJU19FUlIoZHNpLT5jbGspKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBnZXQg RFNJIGNsb2NrXG4iKTsKLQkJcmV0dXJuIFBUUl9FUlIoZHNpLT5jbGspOworCQllcnIgPSBQVFJf RVJSKGRzaS0+Y2xrKTsKKwkJZ290byByZXNldDsKIAl9CiAKIAllcnIgPSBjbGtfcHJlcGFyZV9l bmFibGUoZHNpLT5jbGspOwogCWlmIChlcnIgPCAwKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwg ImNhbm5vdCBlbmFibGUgRFNJIGNsb2NrXG4iKTsKLQkJcmV0dXJuIGVycjsKKwkJZ290byByZXNl dDsKIAl9CiAKIAlkc2ktPmNsa19scCA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCAibHAiKTsK IAlpZiAoSVNfRVJSKGRzaS0+Y2xrX2xwKSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5u b3QgZ2V0IGxvdy1wb3dlciBjbG9ja1xuIik7Ci0JCXJldHVybiBQVFJfRVJSKGRzaS0+Y2xrX2xw KTsKKwkJZXJyID0gUFRSX0VSUihkc2ktPmNsa19scCk7CisJCWdvdG8gZGlzYWJsZV9jbGs7CiAJ fQogCiAJZXJyID0gY2xrX3ByZXBhcmVfZW5hYmxlKGRzaS0+Y2xrX2xwKTsKIAlpZiAoZXJyIDwg MCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgZW5hYmxlIGxvdy1wb3dlciBjbG9j a1xuIik7Ci0JCXJldHVybiBlcnI7CisJCWdvdG8gZGlzYWJsZV9jbGs7CiAJfQogCiAJZHNpLT5j bGtfcGFyZW50ID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsICJwYXJlbnQiKTsKIAlpZiAoSVNf RVJSKGRzaS0+Y2xrX3BhcmVudCkpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IGdl dCBwYXJlbnQgY2xvY2tcbiIpOwotCQlyZXR1cm4gUFRSX0VSUihkc2ktPmNsa19wYXJlbnQpOwot CX0KLQotCWVyciA9IGNsa19wcmVwYXJlX2VuYWJsZShkc2ktPmNsa19wYXJlbnQpOwotCWlmIChl cnIgPCAwKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBlbmFibGUgcGFyZW50IGNs b2NrXG4iKTsKLQkJcmV0dXJuIGVycjsKKwkJZXJyID0gUFRSX0VSUihkc2ktPmNsa19wYXJlbnQp OworCQlnb3RvIGRpc2FibGVfY2xrX2xwOwogCX0KIAogCWRzaS0+dmRkID0gZGV2bV9yZWd1bGF0 b3JfZ2V0KCZwZGV2LT5kZXYsICJhdmRkLWRzaS1jc2kiKTsKIAlpZiAoSVNfRVJSKGRzaS0+dmRk KSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgZ2V0IFZERCBzdXBwbHlcbiIpOwot CQlyZXR1cm4gUFRSX0VSUihkc2ktPnZkZCk7CisJCWVyciA9IFBUUl9FUlIoZHNpLT52ZGQpOwor CQlnb3RvIGRpc2FibGVfY2xrX2xwOwogCX0KIAogCWVyciA9IHJlZ3VsYXRvcl9lbmFibGUoZHNp LT52ZGQpOwogCWlmIChlcnIgPCAwKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBl bmFibGUgVkREIHN1cHBseVxuIik7Ci0JCXJldHVybiBlcnI7CisJCWdvdG8gZGlzYWJsZV9jbGtf bHA7CiAJfQogCiAJZXJyID0gdGVncmFfZHNpX3NldHVwX2Nsb2Nrcyhkc2kpOwogCWlmIChlcnIg PCAwKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBzZXR1cCBjbG9ja3NcbiIpOwot CQlyZXR1cm4gZXJyOworCQlnb3RvIGRpc2FibGVfdmRkOwogCX0KIAogCXJlZ3MgPSBwbGF0Zm9y bV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWRzaS0+cmVncyA9IGRl dm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByZWdzKTsKLQlpZiAoSVNfRVJSKGRzaS0+ cmVncykpCi0JCXJldHVybiBQVFJfRVJSKGRzaS0+cmVncyk7CisJaWYgKElTX0VSUihkc2ktPnJl Z3MpKSB7CisJCWVyciA9IFBUUl9FUlIoZHNpLT5yZWdzKTsKKwkJZ290byBkaXNhYmxlX3ZkZDsK Kwl9CiAKIAlkc2ktPm1pcGkgPSB0ZWdyYV9taXBpX3JlcXVlc3QoJnBkZXYtPmRldik7Ci0JaWYg KElTX0VSUihkc2ktPm1pcGkpKQotCQlyZXR1cm4gUFRSX0VSUihkc2ktPm1pcGkpOworCWlmIChJ U19FUlIoZHNpLT5taXBpKSkgeworCQllcnIgPSBQVFJfRVJSKGRzaS0+bWlwaSk7CisJCWdvdG8g ZGlzYWJsZV92ZGQ7CisJfQorCisJZXJyID0gdGVncmFfZHNpX3BhZF9jYWxpYnJhdGUoZHNpKTsK KwlpZiAoZXJyIDwgMCkgeworCQlkZXZfZXJyKGRzaS0+ZGV2LCAiTUlQSSBjYWxpYnJhdGlvbiBm YWlsZWQ6ICVkXG4iLCBlcnIpOworCQlnb3RvIG1pcGlfZnJlZTsKKwl9CiAKIAlkc2ktPmhvc3Qu b3BzID0gJnRlZ3JhX2RzaV9ob3N0X29wczsKIAlkc2ktPmhvc3QuZGV2ID0gJnBkZXYtPmRldjsK QEAgLTkzMiw3ICsxNDc5LDcgQEAgc3RhdGljIGludCB0ZWdyYV9kc2lfcHJvYmUoc3RydWN0IHBs YXRmb3JtX2RldmljZSAqcGRldikKIAllcnIgPSBtaXBpX2RzaV9ob3N0X3JlZ2lzdGVyKCZkc2kt Pmhvc3QpOwogCWlmIChlcnIgPCAwKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0 byByZWdpc3RlciBEU0kgaG9zdDogJWRcbiIsIGVycik7Ci0JCXJldHVybiBlcnI7CisJCWdvdG8g bWlwaV9mcmVlOwogCX0KIAogCUlOSVRfTElTVF9IRUFEKCZkc2ktPmNsaWVudC5saXN0KTsKQEAg LTk0MywxMiArMTQ5MCwyNiBAQCBzdGF0aWMgaW50IHRlZ3JhX2RzaV9wcm9iZShzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2KQogCWlmIChlcnIgPCAwKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRl diwgImZhaWxlZCB0byByZWdpc3RlciBob3N0MXggY2xpZW50OiAlZFxuIiwKIAkJCWVycik7Ci0J CXJldHVybiBlcnI7CisJCWdvdG8gdW5yZWdpc3RlcjsKIAl9CiAKIAlwbGF0Zm9ybV9zZXRfZHJ2 ZGF0YShwZGV2LCBkc2kpOwogCiAJcmV0dXJuIDA7CisKK3VucmVnaXN0ZXI6CisJbWlwaV9kc2lf aG9zdF91bnJlZ2lzdGVyKCZkc2ktPmhvc3QpOworbWlwaV9mcmVlOgorCXRlZ3JhX21pcGlfZnJl ZShkc2ktPm1pcGkpOworZGlzYWJsZV92ZGQ6CisJcmVndWxhdG9yX2Rpc2FibGUoZHNpLT52ZGQp OworZGlzYWJsZV9jbGtfbHA6CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+Y2xrX2xwKTsK K2Rpc2FibGVfY2xrOgorCWNsa19kaXNhYmxlX3VucHJlcGFyZShkc2ktPmNsayk7CityZXNldDoK KwlyZXNldF9jb250cm9sX2Fzc2VydChkc2ktPnJzdCk7CisJcmV0dXJuIGVycjsKIH0KIAogc3Rh dGljIGludCB0ZWdyYV9kc2lfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCkBA IC05NjcsNyArMTUyOCw2IEBAIHN0YXRpYyBpbnQgdGVncmFfZHNpX3JlbW92ZShzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2KQogCXRlZ3JhX21pcGlfZnJlZShkc2ktPm1pcGkpOwogCiAJcmVn dWxhdG9yX2Rpc2FibGUoZHNpLT52ZGQpOwotCWNsa19kaXNhYmxlX3VucHJlcGFyZShkc2ktPmNs a19wYXJlbnQpOwogCWNsa19kaXNhYmxlX3VucHJlcGFyZShkc2ktPmNsa19scCk7CiAJY2xrX2Rp c2FibGVfdW5wcmVwYXJlKGRzaS0+Y2xrKTsKIAlyZXNldF9jb250cm9sX2Fzc2VydChkc2ktPnJz dCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdGVncmEvZHNpLmggYi9kcml2ZXJzL2dw dS9kcm0vdGVncmEvZHNpLmgKaW5kZXggNWNlNjEwZDA4ZDc3Li5iYWQxMDA2YTUxNTAgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9kc2kuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0v dGVncmEvZHNpLmgKQEAgLTIxLDkgKzIxLDE2IEBACiAjZGVmaW5lIERTSV9JTlRfU1RBVFVTCQkJ MHgwZAogI2RlZmluZSBEU0lfSU5UX01BU0sJCQkweDBlCiAjZGVmaW5lIERTSV9IT1NUX0NPTlRS T0wJCTB4MGYKKyNkZWZpbmUgRFNJX0hPU1RfQ09OVFJPTF9GSUZPX1JFU0VUCSgxIDw8IDIxKQor I2RlZmluZSBEU0lfSE9TVF9DT05UUk9MX0NSQ19SRVNFVAkoMSA8PCAyMCkKKyNkZWZpbmUgRFNJ X0hPU1RfQ09OVFJPTF9UWF9UUklHX1NPTAkoMCA8PCAxMikKKyNkZWZpbmUgRFNJX0hPU1RfQ09O VFJPTF9UWF9UUklHX0ZJRk8JKDEgPDwgMTIpCisjZGVmaW5lIERTSV9IT1NUX0NPTlRST0xfVFhf VFJJR19IT1NUCSgyIDw8IDEyKQogI2RlZmluZSBEU0lfSE9TVF9DT05UUk9MX1JBVwkJKDEgPDwg NikKICNkZWZpbmUgRFNJX0hPU1RfQ09OVFJPTF9IUwkJKDEgPDwgNSkKLSNkZWZpbmUgRFNJX0hP U1RfQ09OVFJPTF9CVEEJCSgxIDw8IDIpCisjZGVmaW5lIERTSV9IT1NUX0NPTlRST0xfRklGT19T RUwJKDEgPDwgNCkKKyNkZWZpbmUgRFNJX0hPU1RfQ09OVFJPTF9JTU1fQlRBCSgxIDw8IDMpCisj ZGVmaW5lIERTSV9IT1NUX0NPTlRST0xfUEtUX0JUQQkoMSA8PCAyKQogI2RlZmluZSBEU0lfSE9T VF9DT05UUk9MX0NTCQkoMSA8PCAxKQogI2RlZmluZSBEU0lfSE9TVF9DT05UUk9MX0VDQwkJKDEg PDwgMCkKICNkZWZpbmUgRFNJX0NPTlRST0wJCQkweDEwCkBAIC0zOSw5ICs0NiwxMyBAQAogI2Rl ZmluZSBEU0lfU09MX0RFTEFZCQkJMHgxMQogI2RlZmluZSBEU0lfTUFYX1RIUkVTSE9MRAkJMHgx MgogI2RlZmluZSBEU0lfVFJJR0dFUgkJCTB4MTMKKyNkZWZpbmUgRFNJX1RSSUdHRVJfSE9TVAkJ KDEgPDwgMSkKKyNkZWZpbmUgRFNJX1RSSUdHRVJfVklERU8JCSgxIDw8IDApCiAjZGVmaW5lIERT SV9UWF9DUkMJCQkweDE0CiAjZGVmaW5lIERTSV9TVEFUVVMJCQkweDE1CiAjZGVmaW5lIERTSV9T VEFUVVNfSURMRQkJCSgxIDw8IDEwKQorI2RlZmluZSBEU0lfU1RBVFVTX1VOREVSRkxPVwkJKDEg PDwgIDkpCisjZGVmaW5lIERTSV9TVEFUVVNfT1ZFUkZMT1cJCSgxIDw8ICA4KQogI2RlZmluZSBE U0lfSU5JVF9TRVFfQ09OVFJPTAkJMHgxYQogI2RlZmluZSBEU0lfSU5JVF9TRVFfREFUQV8wCQkw eDFiCiAjZGVmaW5lIERTSV9JTklUX1NFUV9EQVRBXzEJCTB4MWMKQEAgLTEwNCw2ICsxMTUsNyBA QAogI2RlZmluZSBEU0lfUEFEX0NPTlRST0xfMwkJMHg1MQogI2RlZmluZSBEU0lfUEFEX0NPTlRS T0xfNAkJMHg1MgogI2RlZmluZSBEU0lfR0FOR0VEX01PREVfQ09OVFJPTAkJMHg1MworI2RlZmlu ZSBEU0lfR0FOR0VEX01PREVfQ09OVFJPTF9FTkFCTEUJKDEgPDwgMCkKICNkZWZpbmUgRFNJX0dB TkdFRF9NT0RFX1NUQVJUCQkweDU0CiAjZGVmaW5lIERTSV9HQU5HRURfTU9ERV9TSVpFCQkweDU1 CiAjZGVmaW5lIERTSV9SQVdfREFUQV9CWVRFX0NPVU5UCQkweDU2Ci0tIAoyLjEuMgoKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxp bmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK