From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chandan Uddaraju Subject: [DPU PATCH 3/3] drm/msm/dp: add support for DP PLL driver Date: Wed, 10 Oct 2018 10:15:59 -0700 Message-ID: <1539191759-14836-4-git-send-email-chandanu@codeaurora.org> References: <1539191759-14836-1-git-send-email-chandanu@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1539191759-14836-1-git-send-email-chandanu-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org Cc: dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, nganji-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, hoegsberg-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org, abhinavk-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, jsanka-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, Chandan Uddaraju List-Id: linux-arm-msm@vger.kernel.org QWRkIHRoZSBuZWVkZWQgRFAgUExMIHNwZWNpZmljIGZpbGVzIHRvIHN1cHBvcnQKZGlzcGxheSBw b3J0IGludGVyZmFjZSBvbiBtc20gdGFyZ2V0cy4KClRoZSBEUCBkcml2ZXIgY2FsbHMgdGhlIERQ IFBMTCBkcml2ZXIgcmVnaXN0cmF0aW9uLgpUaGUgRFAgZHJpdmVyIHNldHMgdGhlIGxpbmsgYW5k IHBpeGVsIGNsb2NrIHNvdXJjZXMuCgpTaWduZWQtb2ZmLWJ5OiBDaGFuZGFuIFVkZGFyYWp1IDxj aGFuZGFudUBjb2RlYXVyb3JhLm9yZz4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL0tjb25maWcg ICAgICAgICAgICAgICAgICAgfCAgMTYgKwogZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZSAg ICAgICAgICAgICAgICAgIHwgICA2ICsKIGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfY3RybC5j ICAgICAgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2Rpc3BsYXku YyAgICAgICAgICAgfCAgNTAgKysrCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2Rpc3BsYXku aCAgICAgICAgICAgfCAgIDMgKwogZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9wYXJzZXIuaCAg ICAgICAgICAgIHwgICAzICsKIGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcG93ZXIuYyAgICAg ICAgICAgICB8ICA3NyArKystCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3Bvd2VyLmggICAg ICAgICAgICAgfCAgIDIgKwogZHJpdmVycy9ncHUvZHJtL21zbS9kcC9wbGwvZHBfcGxsLmMgICAg ICAgICAgIHwgMTUzICsrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL3BsbC9kcF9wbGwu aCAgICAgICAgICAgfCAgNjQgKysrKwogZHJpdmVycy9ncHUvZHJtL21zbS9kcC9wbGwvZHBfcGxs XzEwbm0uYyAgICAgIHwgNDAxICsrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9t c20vZHAvcGxsL2RwX3BsbF8xMG5tLmggICAgICB8ICA5NCArKysrKwogZHJpdmVycy9ncHUvZHJt L21zbS9kcC9wbGwvZHBfcGxsXzEwbm1fdXRpbC5jIHwgNTMxICsrKysrKysrKysrKysrKysrKysr KysrKysrCiAxMyBmaWxlcyBjaGFuZ2VkLCAxMzg5IGluc2VydGlvbnMoKyksIDEyIGRlbGV0aW9u cygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvcGxsL2RwX3Bs bC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9wbGwvZHBfcGxs LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL3BsbC9kcF9wbGxf MTBubS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9wbGwvZHBf cGxsXzEwbm0uaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvcGxs L2RwX3BsbF8xMG5tX3V0aWwuYwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vS2Nv bmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vS2NvbmZpZwppbmRleCBjMzYzZjI0Li4xZTBiOTE1 OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9LY29uZmlnCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9tc20vS2NvbmZpZwpAQCAtNTgsNiArNTgsMjIgQEAgY29uZmlnIERSTV9NU01fRFAK IAkgIGRyaXZlci4gRFAgZXh0ZXJuYWwgZGlzcGxheSBzdXBwb3J0IGlzIGVuYWJsZWQKIAkgIHRo cm91Z2ggdGhpcyBjb25maWcgb3B0aW9uLiBJdCBjYW4gYmUgcHJpbWFyeSBvcgogCSAgc2Vjb25k YXJ5IGRpc3BsYXkgb24gZGV2aWNlLgorCitjb25maWcgRFJNX01TTV9EUF9QTEwKKwlib29sICJF bmFibGUgRFAgUExMIGRyaXZlciBpbiBNU00gRFJNIgorCWRlcGVuZHMgb24gRFJNX01TTV9EUCAm JiBDT01NT05fQ0xLCisJZGVmYXVsdCB5CisJaGVscAorCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIHRv IGVuYWJsZSBEUCBQTEwgZHJpdmVyIHdoaWNoIHByb3ZpZGVzIERQCisJICBzb3VyY2UgY2xvY2tz IHVuZGVyIGNvbW1vbiBjbG9jayBmcmFtZXdvcmsuCisKK2NvbmZpZyBEUk1fTVNNX0RQXzEwTk1f UExMCisJYm9vbCAiRW5hYmxlIERQIDEwbm0gUExMIGRyaXZlciBpbiBNU00gRFJNICh1c2VkIGJ5 IFNETTg0NSkiCisJZGVwZW5kcyBvbiBEUk1fTVNNX0RQCisJZGVmYXVsdCB5CisJaGVscAorCSAg Q2hvb3NlIHRoaXMgb3B0aW9uIGlmIERQIFBMTCBvbiBTRE04NDUgaXMgdXNlZCBvbiB0aGUgcGxh dGZvcm0uCisKIGNvbmZpZyBEUk1fTVNNX0RTSQogCWJvb2wgIkVuYWJsZSBEU0kgc3VwcG9ydCBp biBNU00gRFJNIGRyaXZlciIKIAlkZXBlbmRzIG9uIERSTV9NU00KZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9tc20vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlCmlu ZGV4IDc2NWE4ZDguLjhkMTgzNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vTWFr ZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZQpAQCAtMTM3LDQgKzEzNywx MCBAQCBtc20tJChDT05GSUdfRFJNX01TTV9EU0lfMTROTV9QSFkpICs9IGRzaS9wbGwvZHNpX3Bs bF8xNG5tLm8KIG1zbS0kKENPTkZJR19EUk1fTVNNX0RTSV8xME5NX1BIWSkgKz0gZHNpL3BsbC9k c2lfcGxsXzEwbm0ubwogZW5kaWYKIAoraWZlcSAoJChDT05GSUdfRFJNX01TTV9EUF9QTEwpLHkp Cittc20teSArPSBkcC9wbGwvZHBfcGxsLm8KK21zbS15ICs9IGRwL3BsbC9kcF9wbGxfMTBubS5v Cittc20teSArPSBkcC9wbGwvZHBfcGxsXzEwbm1fdXRpbC5vCitlbmRpZgorCiBvYmotJChDT05G SUdfRFJNX01TTSkJKz0gbXNtLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAv ZHBfY3RybC5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9jdHJsLmMKaW5kZXggMDhhNTJm NS4uZTIzYmVlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9jdHJsLmMK KysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9jdHJsLmMKQEAgLTEwNTEsNiArMTA1MSw3 IEBAIHN0YXRpYyBpbnQgZHBfY3RybF9lbmFibGVfbWFpbmxpbmtfY2xvY2tzKHN0cnVjdCBkcF9j dHJsX3ByaXZhdGUgKmN0cmwpCiB7CiAJaW50IHJldCA9IDA7CiAKKwljdHJsLT5wb3dlci0+c2V0 X2xpbmtfY2xrX3BhcmVudChjdHJsLT5wb3dlcik7CiAJY3RybC0+cG93ZXItPnNldF9waXhlbF9j bGtfcGFyZW50KGN0cmwtPnBvd2VyKTsKIAogCWRwX2N0cmxfc2V0X2Nsb2NrX3JhdGUoY3RybCwg ImN0cmxfbGlua19jbGsiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9k aXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2Rpc3BsYXkuYwppbmRleCA4Yzk4 Mzk5Li4yYmY2NjM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2Rpc3Bs YXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2Rpc3BsYXkuYwpAQCAtNzIsNiAr NzIsNDggQEAgc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSB7CiAJe30KIH07CiAKK3N0YXRpYyBp bnQgZHBfZ2V0X3BsbChzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlICpkcF9wcml2KQoreworCXN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBOVUxMOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZp Y2UgKnBsbF9wZGV2OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGxsX25vZGU7CisJc3RydWN0IGRw X3BhcnNlciAqZHBfcGFyc2VyID0gTlVMTDsKKworCWlmICghZHBfcHJpdikgeworCQlwcl9lcnIo IkludmFsaWQgQXJndW1lbnRzXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcGRldiA9 IGRwX3ByaXYtPnBkZXY7CisJZHBfcGFyc2VyID0gZHBfcHJpdi0+cGFyc2VyOworCisJaWYgKCFk cF9wYXJzZXIpIHsKKwkJcHJfZXJyKCJQYXJzZXIgbm90IGluaXRpYWxpemVkLlxuIik7CisJCXJl dHVybiAtRUlOVkFMOworCX0KKworCXBsbF9ub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShwZGV2LT5k ZXYub2Zfbm9kZSwgInBsbC1ub2RlIiwgMCk7CisJaWYgKCFwbGxfbm9kZSkgeworCQlkZXZfZXJy KCZwZGV2LT5kZXYsICJjYW5ub3QgZmluZCBwbGwgZGV2aWNlXG4iKTsKKwkJcmV0dXJuIC1FTlhJ TzsKKwl9CisKKwlwbGxfcGRldiA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUocGxsX25vZGUpOwor CWlmIChwbGxfcGRldikKKwkJZHBfcGFyc2VyLT5wbGwgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShw bGxfcGRldik7CisKKwlvZl9ub2RlX3B1dChwbGxfbm9kZSk7CisKKwlpZiAoIXBsbF9wZGV2IHx8 ICFkcF9wYXJzZXItPnBsbCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlczogcGxsIGRyaXZl ciBpcyBub3QgcmVhZHlcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FUFJPQkVfREVGRVI7CisJ fQorCisJZHBfcGFyc2VyLT5wbGxfZGV2ID0gZ2V0X2RldmljZSgmcGxsX3BkZXYtPmRldik7CisK KwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGlycXJldHVybl90IGRwX2Rpc3BsYXlfaXJxKGludCBp cnEsIHZvaWQgKmRldl9pZCkKIHsKIAlzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlICpkcCA9IGRl dl9pZDsKQEAgLTEyNSw2ICsxNjcsMTIgQEAgc3RhdGljIGludCBkcF9kaXNwbGF5X2JpbmQoc3Ry dWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsCiAJCWdvdG8gZW5kOwogCX0K IAorCXJjID0gZHBfZ2V0X3BsbChkcCk7CisJaWYgKHJjKSB7CisJCXByX2VycigiIERQIGdldCBQ TEwgaW5zdGFuY2UgZmFpbGVkXG4iKTsKKwkJZ290byBlbmQ7CisJfQorCiAJcmMgPSBkcC0+YXV4 LT5kcm1fYXV4X3JlZ2lzdGVyKGRwLT5hdXgpOwogCWlmIChyYykgewogCQlwcl9lcnIoIkRSTSBE UCBBVVggcmVnaXN0ZXIgZmFpbGVkXG4iKTsKQEAgLTkyMSw2ICs5NjksNyBAQCBpbnQgX19pbml0 IG1zbV9kcF9yZWdpc3Rlcih2b2lkKQogewogCWludCByZXQ7CiAKKwltc21fZHBfcGxsX2RyaXZl cl9yZWdpc3RlcigpOwogCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZHBfZGlzcGxh eV9kcml2ZXIpOwogCWlmIChyZXQpIHsKIAkJcHJfZXJyKCJkcml2ZXIgcmVnaXN0ZXIgZmFpbGVk Iik7CkBAIC05MzIsNiArOTgxLDcgQEAgaW50IF9faW5pdCBtc21fZHBfcmVnaXN0ZXIodm9pZCkK IAogdm9pZCBfX2V4aXQgbXNtX2RwX3VucmVnaXN0ZXIodm9pZCkKIHsKKwltc21fZHBfcGxsX2Ry aXZlcl91bnJlZ2lzdGVyKCk7CiAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmRwX2Rpc3Bs YXlfZHJpdmVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9k aXNwbGF5LmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2Rpc3BsYXkuaAppbmRleCBjYTVl YWU1Li45Y2Q2YTZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2Rpc3Bs YXkuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2Rpc3BsYXkuaApAQCAtNTIsNCAr NTIsNyBAQCBzdHJ1Y3QgbXNtX2RwIHsKIAogaW50IGRwX2Rpc3BsYXlfZ2V0X251bV9vZl9kaXNw bGF5cyh2b2lkKTsKIGludCBkcF9kaXNwbGF5X2dldF9kaXNwbGF5cyh2b2lkICoqZGlzcGxheXMs IGludCBjb3VudCk7Cit2b2lkIF9faW5pdCBtc21fZHBfcGxsX2RyaXZlcl9yZWdpc3Rlcih2b2lk KTsKK3ZvaWQgX19leGl0IG1zbV9kcF9wbGxfZHJpdmVyX3VucmVnaXN0ZXIodm9pZCk7CisKICNl bmRpZiAvKiBfRFBfRElTUExBWV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21z bS9kcC9kcF9wYXJzZXIuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcGFyc2VyLmgKaW5k ZXggYjM5ZWEwMi4uMzcyOTk3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9k cF9wYXJzZXIuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3BhcnNlci5oCkBAIC0x Niw2ICsxNiw3IEBACiAjZGVmaW5lIF9EUF9QQVJTRVJfSF8KIAogI2luY2x1ZGUgImRwdV9pb191 dGlsLmgiCisjaW5jbHVkZSAicGxsL2RwX3BsbC5oIgogCiAjZGVmaW5lIERQX0xBQkVMICJNRFNT IERQIERJU1BMQVkiCiAjZGVmaW5lIEFVWF9DRkdfTEVOCTEwCkBAIC0xNzUsNiArMTc2LDggQEAg c3RydWN0IGRwX3BhcnNlciB7CiAJc3RydWN0IGRwX3BpbmN0cmwgcGluY3RybDsKIAlzdHJ1Y3Qg ZHBfaW8gaW87CiAJc3RydWN0IGRwX2Rpc3BsYXlfZGF0YSBkaXNwX2RhdGE7CisJc3RydWN0IG1z bV9kcF9wbGwgKnBsbDsKKwlzdHJ1Y3QgZGV2aWNlICpwbGxfZGV2OwogCiAJdTggbF9tYXBbNF07 CiAJc3RydWN0IGRwX2F1eF9jZmcgYXV4X2NmZ1tBVVhfQ0ZHX0xFTl07CmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3Bvd2VyLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rw L2RwX3Bvd2VyLmMKaW5kZXggMWQ1ODQ4MC4uM2ExNjc5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL21zbS9kcC9kcF9wb3dlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBf cG93ZXIuYwpAQCAtMjMsNyArMjMsOSBAQCBzdHJ1Y3QgZHBfcG93ZXJfcHJpdmF0ZSB7CiAJc3Ry dWN0IGRwX3BhcnNlciAqcGFyc2VyOwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CiAJ c3RydWN0IGNsayAqcGl4ZWxfY2xrX3JjZzsKLQlzdHJ1Y3QgY2xrICpwaXhlbF9wYXJlbnQ7CisJ c3RydWN0IGNsayAqbGlua19jbGtfc3JjOworCXN0cnVjdCBjbGsgKnBpeGVsX3Byb3ZpZGVyOwor CXN0cnVjdCBjbGsgKmxpbmtfcHJvdmlkZXI7CiAKIAlzdHJ1Y3QgZHBfcG93ZXIgZHBfcG93ZXI7 CiAKQEAgLTE1NCw2ICsxNTYsMTYgQEAgc3RhdGljIGludCBkcF9wb3dlcl9jbGtfaW5pdChzdHJ1 Y3QgZHBfcG93ZXJfcHJpdmF0ZSAqcG93ZXIsIGJvb2wgZW5hYmxlKQogCQlnb3RvIGV4aXQ7CiAJ fQogCisJaWYgKHBvd2VyLT5wYXJzZXItPnBsbCAmJiBwb3dlci0+cGFyc2VyLT5wbGwtPmdldF9w cm92aWRlcikgeworCQlyYyA9IHBvd2VyLT5wYXJzZXItPnBsbC0+Z2V0X3Byb3ZpZGVyKHBvd2Vy LT5wYXJzZXItPnBsbCwKKwkJCQkmcG93ZXItPmxpbmtfcHJvdmlkZXIsICZwb3dlci0+cGl4ZWxf cHJvdmlkZXIpOworCQlpZiAocmMpIHsKKwkJCXByX2luZm8oIiVzOiBjYW4ndCBnZXQgcHJvdmlk ZXIgZnJvbSBwbGwsIGRvbid0IHNldCBwYXJlbnRcbiIsCisJCQkJX19mdW5jX18pOworCQkJcmV0 dXJuIDA7CisJCX0KKwl9CisKIAlpZiAoZW5hYmxlKSB7CiAJCXJjID0gbXNtX2Rzc19nZXRfY2xr KGRldiwgY29yZS0+Y2xrX2NvbmZpZywgY29yZS0+bnVtX2Nsayk7CiAJCWlmIChyYykgewpAQCAt MTczLDE3ICsxODUsMTAgQEAgc3RhdGljIGludCBkcF9wb3dlcl9jbGtfaW5pdChzdHJ1Y3QgZHBf cG93ZXJfcHJpdmF0ZSAqcG93ZXIsIGJvb2wgZW5hYmxlKQogCQlpZiAoSVNfRVJSKHBvd2VyLT5w aXhlbF9jbGtfcmNnKSkgewogCQkJcHJfZGVidWcoIlVuYWJsZSB0byBnZXQgRFAgcGl4ZWwgY2xr IFJDR1xuIik7CiAJCQlwb3dlci0+cGl4ZWxfY2xrX3JjZyA9IE5VTEw7Ci0JCX0KLQotCQlwb3dl ci0+cGl4ZWxfcGFyZW50ID0gZGV2bV9jbGtfZ2V0KGRldiwgInBpeGVsX3BhcmVudCIpOwotCQlp ZiAoSVNfRVJSKHBvd2VyLT5waXhlbF9wYXJlbnQpKSB7Ci0JCQlwcl9kZWJ1ZygiVW5hYmxlIHRv IGdldCBEUCBwaXhlbCBSQ0cgcGFyZW50XG4iKTsKLQkJCXBvd2VyLT5waXhlbF9wYXJlbnQgPSBO VUxMOworCQkJcmMgPSAtRU5PREVWOworCQkJZ290byBjdHJsX2dldF9lcnJvcjsKIAkJfQogCX0g ZWxzZSB7Ci0JCWlmIChwb3dlci0+cGl4ZWxfcGFyZW50KQotCQkJZGV2bV9jbGtfcHV0KGRldiwg cG93ZXItPnBpeGVsX3BhcmVudCk7Ci0KIAkJaWYgKHBvd2VyLT5waXhlbF9jbGtfcmNnKQogCQkJ ZGV2bV9jbGtfcHV0KGRldiwgcG93ZXItPnBpeGVsX2Nsa19yY2cpOwogCkBAIC00NTksNiArNDY0 LDQ5IEBAIHN0YXRpYyB2b2lkIGRwX3Bvd2VyX2NsaWVudF9kZWluaXQoc3RydWN0IGRwX3Bvd2Vy ICpkcF9wb3dlcikKIAogfQogCitzdGF0aWMgaW50IGRwX3Bvd2VyX3NldF9saW5rX2Nsa19wYXJl bnQoc3RydWN0IGRwX3Bvd2VyICpkcF9wb3dlcikKK3sKKwlpbnQgcmMgPSAwOworCXN0cnVjdCBk cF9wb3dlcl9wcml2YXRlICpwb3dlcjsKKwl1MzIgbnVtOworCXN0cnVjdCBkc3NfY2xrICpjZmc7 CisJY2hhciAqbmFtZSA9ICJjdHJsX2xpbmtfY2xrIjsKKworCWlmICghZHBfcG93ZXIpIHsKKwkJ cHJfZXJyKCJpbnZhbGlkIHBvd2VyIGRhdGFcbiIpOworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8g ZXhpdDsKKwl9CisKKwlwb3dlciA9IGNvbnRhaW5lcl9vZihkcF9wb3dlciwgc3RydWN0IGRwX3Bv d2VyX3ByaXZhdGUsIGRwX3Bvd2VyKTsKKworCW51bSA9IHBvd2VyLT5wYXJzZXItPm1wW0RQX0NU UkxfUE1dLm51bV9jbGs7CisJY2ZnID0gcG93ZXItPnBhcnNlci0+bXBbRFBfQ1RSTF9QTV0uY2xr X2NvbmZpZzsKKworCXdoaWxlIChudW0gJiYgc3RyY21wKGNmZy0+Y2xrX25hbWUsIG5hbWUpKSB7 CisJCW51bS0tOworCQljZmcrKzsKKwl9CisKKwlpZiAobnVtICYmIHBvd2VyLT5saW5rX3Byb3Zp ZGVyKSB7CisJCXBvd2VyLT5saW5rX2Nsa19zcmMgPSBjbGtfZ2V0X3BhcmVudChjZmctPmNsayk7 CisJCQlpZiAocG93ZXItPmxpbmtfY2xrX3NyYykgeworCQkJCWNsa19zZXRfcGFyZW50KHBvd2Vy LT5saW5rX2Nsa19zcmMsIHBvd2VyLT5saW5rX3Byb3ZpZGVyKTsKKwkJCQlwcl9kZWJ1ZygiJXM6 IGlzIHRoZSBwYXJlbnQgb2YgY2xrPSVzXG4iLAorCQkJCQkJX19jbGtfZ2V0X25hbWUocG93ZXIt PmxpbmtfcHJvdmlkZXIpLAorCQkJCQkJX19jbGtfZ2V0X25hbWUocG93ZXItPmxpbmtfY2xrX3Ny YykpOworCQkJfSBlbHNlIHsKKwkJCQlwcl9lcnIoImNvdWxkbid0IGdldCBwYXJlbnQgZm9yIGNs az0lc1xuIiwgbmFtZSk7CisJCQkJcmMgPSAtRUlOVkFMOworCQkJfQorCX0gZWxzZSB7CisJCXBy X2VycigiJXMgY2xvY2sgY291bGQgbm90IGJlIHNldCBwYXJlbnRcbiIsIG5hbWUpOworCQlyYyA9 IC1FSU5WQUw7CisJfQorZXhpdDoKKwlyZXR1cm4gcmM7Cit9CisKIHN0YXRpYyBpbnQgZHBfcG93 ZXJfc2V0X3BpeGVsX2Nsa19wYXJlbnQoc3RydWN0IGRwX3Bvd2VyICpkcF9wb3dlcikKIHsKIAlp bnQgcmMgPSAwOwpAQCAtNDcyLDggKzUyMCwxMiBAQCBzdGF0aWMgaW50IGRwX3Bvd2VyX3NldF9w aXhlbF9jbGtfcGFyZW50KHN0cnVjdCBkcF9wb3dlciAqZHBfcG93ZXIpCiAKIAlwb3dlciA9IGNv bnRhaW5lcl9vZihkcF9wb3dlciwgc3RydWN0IGRwX3Bvd2VyX3ByaXZhdGUsIGRwX3Bvd2VyKTsK IAotCWlmIChwb3dlci0+cGl4ZWxfY2xrX3JjZyAmJiBwb3dlci0+cGl4ZWxfcGFyZW50KQotCQlj bGtfc2V0X3BhcmVudChwb3dlci0+cGl4ZWxfY2xrX3JjZywgcG93ZXItPnBpeGVsX3BhcmVudCk7 CisJaWYgKHBvd2VyLT5waXhlbF9jbGtfcmNnICYmIHBvd2VyLT5waXhlbF9wcm92aWRlcikgewor CQljbGtfc2V0X3BhcmVudChwb3dlci0+cGl4ZWxfY2xrX3JjZywgcG93ZXItPnBpeGVsX3Byb3Zp ZGVyKTsKKwkJcHJfZGVidWcoIiVzOiBpcyB0aGUgcGFyZW50IG9mIGNsaz0lc1xuIiwKKwkJCQkJ X19jbGtfZ2V0X25hbWUocG93ZXItPnBpeGVsX3Byb3ZpZGVyKSwKKwkJCQkJX19jbGtfZ2V0X25h bWUocG93ZXItPnBpeGVsX2Nsa19yY2cpKTsKKwl9CiBleGl0OgogCXJldHVybiByYzsKIH0KQEAg LTU3Nyw2ICs2MjksNyBAQCBzdHJ1Y3QgZHBfcG93ZXIgKmRwX3Bvd2VyX2dldChzdHJ1Y3QgZHBf cGFyc2VyICpwYXJzZXIpCiAJZHBfcG93ZXItPmluaXQgPSBkcF9wb3dlcl9pbml0OwogCWRwX3Bv d2VyLT5kZWluaXQgPSBkcF9wb3dlcl9kZWluaXQ7CiAJZHBfcG93ZXItPmNsa19lbmFibGUgPSBk cF9wb3dlcl9jbGtfZW5hYmxlOworCWRwX3Bvd2VyLT5zZXRfbGlua19jbGtfcGFyZW50ID0gZHBf cG93ZXJfc2V0X2xpbmtfY2xrX3BhcmVudDsKIAlkcF9wb3dlci0+c2V0X3BpeGVsX2Nsa19wYXJl bnQgPSBkcF9wb3dlcl9zZXRfcGl4ZWxfY2xrX3BhcmVudDsKIAlkcF9wb3dlci0+cG93ZXJfY2xp ZW50X2luaXQgPSBkcF9wb3dlcl9jbGllbnRfaW5pdDsKIAlkcF9wb3dlci0+cG93ZXJfY2xpZW50 X2RlaW5pdCA9IGRwX3Bvd2VyX2NsaWVudF9kZWluaXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vbXNtL2RwL2RwX3Bvd2VyLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3Bvd2Vy LmgKaW5kZXggZDFhZGFhZi4uNWVmZmQzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21z bS9kcC9kcF9wb3dlci5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcG93ZXIuaApA QCAtMjQsNiArMjQsNyBAQAogICogQGluaXQ6IGluaXRpYWxpemVzIHRoZSByZWd1bGF0b3JzL2Nv cmUgY2xvY2tzL0dQSU9zL3BpbmN0cmwKICAqIEBkZWluaXQ6IHR1cm5zIG9mZiB0aGUgcmVndWxh dG9ycy9jb3JlIGNsb2Nrcy9HUElPcy9waW5jdHJsCiAgKiBAY2xrX2VuYWJsZTogZW5hYmxlL2Rp c2FibGUgdGhlIERQIGNsb2NrcworICogQHNldF9saW5rX2Nsa19wYXJlbnQ6IHNldCB0aGUgcGFy ZW50IG9mIERQIGxpbmsgY2xvY2sKICAqIEBzZXRfcGl4ZWxfY2xrX3BhcmVudDogc2V0IHRoZSBw YXJlbnQgb2YgRFAgcGl4ZWwgY2xvY2sKICAqLwogc3RydWN0IGRwX3Bvd2VyIHsKQEAgLTMxLDYg KzMyLDcgQEAgc3RydWN0IGRwX3Bvd2VyIHsKIAlpbnQgKCpkZWluaXQpKHN0cnVjdCBkcF9wb3dl ciAqcG93ZXIpOwogCWludCAoKmNsa19lbmFibGUpKHN0cnVjdCBkcF9wb3dlciAqcG93ZXIsIGVu dW0gZHBfcG1fdHlwZSBwbV90eXBlLAogCQkJCWJvb2wgZW5hYmxlKTsKKwlpbnQgKCpzZXRfbGlu a19jbGtfcGFyZW50KShzdHJ1Y3QgZHBfcG93ZXIgKnBvd2VyKTsKIAlpbnQgKCpzZXRfcGl4ZWxf Y2xrX3BhcmVudCkoc3RydWN0IGRwX3Bvd2VyICpwb3dlcik7CiAJaW50ICgqcG93ZXJfY2xpZW50 X2luaXQpKHN0cnVjdCBkcF9wb3dlciAqcG93ZXIpOwogCXZvaWQgKCpwb3dlcl9jbGllbnRfZGVp bml0KShzdHJ1Y3QgZHBfcG93ZXIgKnBvd2VyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZHAvcGxsL2RwX3BsbC5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9wbGwvZHBfcGxs LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg2MTJiNQotLS0gL2Rldi9u dWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvcGxsL2RwX3BsbC5jCkBAIC0wLDAgKzEs MTUzIEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24u IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAor ICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2luY2x1ZGUgImRw X3BsbC5oIgorCitpbnQgbXNtX2RwX3BsbF91dGlsX3BhcnNlX2R0X2Nsb2NrKHN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYsCisJCQkJCXN0cnVjdCBtc21fZHBfcGxsICpwbGwpCit7CisJdTMy IGkgPSAwLCByYyA9IDA7CisJc3RydWN0IGRzc19tb2R1bGVfcG93ZXIgKm1wID0gJnBsbC0+bXA7 CisJY29uc3QgY2hhciAqY2xvY2tfbmFtZTsKKwl1MzIgY2xvY2tfcmF0ZTsKKworCW1wLT5udW1f Y2xrID0gb2ZfcHJvcGVydHlfY291bnRfc3RyaW5ncyhwZGV2LT5kZXYub2Zfbm9kZSwKKwkJCQkJ CQkiY2xvY2stbmFtZXMiKTsKKwlpZiAobXAtPm51bV9jbGsgPD0gMCkgeworCQlwcl9lcnIoImNs b2NrcyBhcmUgbm90IGRlZmluZWRcbiIpOworCQlnb3RvIGNsa19lcnI7CisJfQorCisJbXAtPmNs a19jb25maWcgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwKKwkJCXNpemVvZihzdHJ1Y3QgZHNz X2NsaykgKiBtcC0+bnVtX2NsaywgR0ZQX0tFUk5FTCk7CisJaWYgKCFtcC0+Y2xrX2NvbmZpZykg eworCQlyYyA9IC1FTk9NRU07CisJCW1wLT5udW1fY2xrID0gMDsKKwkJZ290byBjbGtfZXJyOwor CX0KKworCWZvciAoaSA9IDA7IGkgPCBtcC0+bnVtX2NsazsgaSsrKSB7CisJCW9mX3Byb3BlcnR5 X3JlYWRfc3RyaW5nX2luZGV4KHBkZXYtPmRldi5vZl9ub2RlLCAiY2xvY2stbmFtZXMiLAorCQkJ CQkJCWksICZjbG9ja19uYW1lKTsKKwkJc3RybGNweShtcC0+Y2xrX2NvbmZpZ1tpXS5jbGtfbmFt ZSwgY2xvY2tfbmFtZSwKKwkJCQlzaXplb2YobXAtPmNsa19jb25maWdbaV0uY2xrX25hbWUpKTsK KworCQlvZl9wcm9wZXJ0eV9yZWFkX3UzMl9pbmRleChwZGV2LT5kZXYub2Zfbm9kZSwgImNsb2Nr LXJhdGUiLAorCQkJCQkJCWksICZjbG9ja19yYXRlKTsKKwkJbXAtPmNsa19jb25maWdbaV0ucmF0 ZSA9IGNsb2NrX3JhdGU7CisKKwkJaWYgKCFjbG9ja19yYXRlKQorCQkJbXAtPmNsa19jb25maWdb aV0udHlwZSA9IERTU19DTEtfQUhCOworCQllbHNlCisJCQltcC0+Y2xrX2NvbmZpZ1tpXS50eXBl ID0gRFNTX0NMS19QQ0xLOworCX0KKworY2xrX2VycjoKKwlyZXR1cm4gcmM7Cit9CisKK3N0cnVj dCBtc21fZHBfcGxsICptc21fZHBfcGxsX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl diwKKwkJCWVudW0gbXNtX2RwX3BsbF90eXBlIHR5cGUsIGludCBpZCkKK3sKKwlzdHJ1Y3QgZGV2 aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBtc21fZHBfcGxsICpwbGw7CisKKwlzd2l0 Y2ggKHR5cGUpIHsKKwljYXNlIE1TTV9EUF9QTExfMTBOTToKKwkJcGxsID0gbXNtX2RwX3BsbF8x MG5tX2luaXQocGRldiwgaWQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwbGwgPSBFUlJfUFRS KC1FTlhJTyk7CisJCWJyZWFrOworCX0KKworCWlmIChJU19FUlIocGxsKSkgeworCQlkZXZfZXJy KGRldiwgIiVzOiBmYWlsZWQgdG8gaW5pdCBEUCBQTExcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJu IHBsbDsKKwl9CisKKwlwbGwtPnR5cGUgPSB0eXBlOworCisJREJHKCJEUDolZCBQTEwgcmVnaXN0 ZXJlZCIsIGlkKTsKKworCXJldHVybiBwbGw7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2Zf ZGV2aWNlX2lkIGRwX3BsbF9kdF9tYXRjaFtdID0geworI2lmZGVmIENPTkZJR19EUk1fTVNNX0RQ XzEwTk1fUExMCisJeyAuY29tcGF0aWJsZSA9ICJxY29tLGRwLXBsbC0xMG5tIiB9LAorI2VuZGlm CisJe30KK307CisKK3N0YXRpYyBpbnQgZHBfcGxsX2RyaXZlcl9wcm9iZShzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtc21fZHBfcGxsICpwbGw7CisJc3RydWN0IGRl dmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRj aDsKKwllbnVtIG1zbV9kcF9wbGxfdHlwZSB0eXBlOworCisJbWF0Y2ggPSBvZl9tYXRjaF9ub2Rl KGRwX3BsbF9kdF9tYXRjaCwgZGV2LT5vZl9ub2RlKTsKKwlpZiAoIW1hdGNoKQorCQlyZXR1cm4g LUVOT0RFVjsKKworCWlmICghc3RyY21wKG1hdGNoLT5jb21wYXRpYmxlLCAicWNvbSxkcC1wbGwt MTBubSIpKQorCQl0eXBlID0gTVNNX0RQX1BMTF8xME5NOworCWVsc2UKKwkJdHlwZSA9IE1TTV9E UF9QTExfTUFYOworCisJcGxsID0gbXNtX2RwX3BsbF9pbml0KHBkZXYsIHR5cGUsIDApOworCWlm IChJU19FUlJfT1JfTlVMTChwbGwpKSB7CisJCWRldl9pbmZvKGRldiwKKwkJCSIlczogcGxsIGlu aXQgZmFpbGVkOiAlbGQsIG5lZWQgc2VwYXJhdGUgcGxsIGNsayBkcml2ZXJcbiIsCisJCQlfX2Z1 bmNfXywgUFRSX0VSUihwbGwpKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcGxhdGZvcm1f c2V0X2RydmRhdGEocGRldiwgcGxsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRw X3BsbF9kcml2ZXJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3Ry dWN0IG1zbV9kcF9wbGwgKnBsbCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJaWYg KHBsbCkgeworCQkvL21zbV9kc2lfcGxsX2Rlc3Ryb3kocGxsKTsKKwkJcGxsID0gTlVMTDsKKwl9 CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCXJldHVybiAwOworfQor CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBkcF9wbGxfcGxhdGZvcm1fZHJpdmVyID0g eworCS5wcm9iZSAgICAgID0gZHBfcGxsX2RyaXZlcl9wcm9iZSwKKwkucmVtb3ZlICAgICA9IGRw X3BsbF9kcml2ZXJfcmVtb3ZlLAorCS5kcml2ZXIgICAgID0geworCQkubmFtZSAgID0gIm1zbV9k cF9wbGwiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBkcF9wbGxfZHRfbWF0Y2gsCisJfSwKK307CisK K3ZvaWQgX19pbml0IG1zbV9kcF9wbGxfZHJpdmVyX3JlZ2lzdGVyKHZvaWQpCit7CisJcGxhdGZv cm1fZHJpdmVyX3JlZ2lzdGVyKCZkcF9wbGxfcGxhdGZvcm1fZHJpdmVyKTsKK30KKwordm9pZCBf X2V4aXQgbXNtX2RwX3BsbF9kcml2ZXJfdW5yZWdpc3Rlcih2b2lkKQoreworCXBsYXRmb3JtX2Ry aXZlcl91bnJlZ2lzdGVyKCZkcF9wbGxfcGxhdGZvcm1fZHJpdmVyKTsKK30KZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvcGxsL2RwX3BsbC5oIGIvZHJpdmVycy9ncHUvZHJtL21z bS9kcC9wbGwvZHBfcGxsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUy YTgxYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvcGxsL2RwX3Bs bC5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxNi0yMDE4LCBUaGUgTGlu dXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQor ICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2 ZXJzaW9uIDIgYW5kCisgKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisg KiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLwor CisjaWZuZGVmIF9fRFBfUExMX0gKKyNkZWZpbmUgX19EUF9QTExfSAorCisjaW5jbHVkZSA8bGlu dXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+CisjaW5jbHVkZSA8bGlu dXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlICJkcHVfaW9fdXRpbC5oIgorI2luY2x1 ZGUgIm1zbV9kcnYuaCIKKworI2RlZmluZSBQTExfUkVHX1coYmFzZSwgb2Zmc2V0LCBkYXRhKQlc CisJCQkJd3JpdGVsX3JlbGF4ZWQoKGRhdGEpLCAoYmFzZSkgKyAob2Zmc2V0KSkKKyNkZWZpbmUg UExMX1JFR19SKGJhc2UsIG9mZnNldCkJcmVhZGxfcmVsYXhlZCgoYmFzZSkgKyAob2Zmc2V0KSkK KworZW51bSBtc21fZHBfcGxsX3R5cGUgeworCU1TTV9EUF9QTExfMTBOTSwKKwlNU01fRFBfUExM X01BWAorfTsKKworc3RydWN0IG1zbV9kcF9wbGwgeworCWVudW0gbXNtX2RwX3BsbF90eXBlIHR5 cGU7CisJc3RydWN0IGNsa19odyBjbGtfaHc7CisJdW5zaWduZWQgbG9uZwlyYXRlOwkJLyogY3Vy cmVudCB2Y28gcmF0ZSAqLworCXU2NAkJbWluX3JhdGU7CS8qIG1pbiB2Y28gcmF0ZSAqLworCXU2 NAkJbWF4X3JhdGU7CS8qIG1heCB2Y28gcmF0ZSAqLworCWJvb2wJCXBsbF9vbjsKKwl2b2lkCQkq cHJpdjsKKwkvKiBQbGwgc3BlY2lmaWMgcmVzb3VyY2VzIGxpa2UgR1BJTywgcG93ZXIgc3VwcGx5 LCBjbG9ja3MsIGV0YyovCisJc3RydWN0IGRzc19tb2R1bGVfcG93ZXIgbXA7CisJaW50ICgqZ2V0 X3Byb3ZpZGVyKShzdHJ1Y3QgbXNtX2RwX3BsbCAqcGxsLAorCQkJc3RydWN0IGNsayAqKmxpbmtf Y2xrX3Byb3ZpZGVyLAorCQkJc3RydWN0IGNsayAqKnBpeGVsX2Nsa19wcm92aWRlcik7Cit9Owor CisjZGVmaW5lIGh3X2Nsa190b19wbGwoeCkgY29udGFpbmVyX29mKHgsIHN0cnVjdCBtc21fZHBf cGxsLCBjbGtfaHcpCisKK3N0cnVjdCBtc21fZHBfcGxsICptc21fZHBfcGxsX2luaXQoc3RydWN0 IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJCWVudW0gbXNtX2RwX3BsbF90eXBlIHR5cGUsIGlu dCBpZCk7CisKK2ludCBtc21fZHBfcGxsX3V0aWxfcGFyc2VfZHRfY2xvY2soc3RydWN0IHBsYXRm b3JtX2RldmljZSAqcGRldiwKKwkJCQkJc3RydWN0IG1zbV9kcF9wbGwgKnBsbCk7CisKKyNpZmRl ZiBDT05GSUdfRFJNX01TTV9EUF8xME5NX1BMTAorc3RydWN0IG1zbV9kcF9wbGwgKm1zbV9kcF9w bGxfMTBubV9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCBpZCk7CisjZWxz ZQorc3RydWN0IG1zbV9kcF9wbGwgKm1zbV9kcF9wbGxfMTBubV9pbml0KHN0cnVjdCBwbGF0Zm9y bV9kZXZpY2UgKnBkZXYsIGludCBpZCkKK3sKKwlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKK30K KyNlbmRpZgorI2VuZGlmIC8qIF9fRFBfUExMX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vZHAvcGxsL2RwX3BsbF8xMG5tLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL3Bs bC9kcF9wbGxfMTBubS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExODA0 MTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL3BsbC9kcF9wbGxf MTBubS5jCkBAIC0wLDAgKzEsNDAxIEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxOCwgVGhl IExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgdmVyc2lvbiAyIGFuZAorICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg Ki8KKworLyoKKyAqIERpc3BsYXkgUG9ydCBQTEwgZHJpdmVyIGJsb2NrIGRpYWdyYW0gZm9yIGJy YW5jaCBjbG9ja3MKKyAqCisgKgkJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAq CQl8ICAgICAgICAgRFBfVkNPX0NMSyAgICAgICAgICAgfAorICoJCXwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8CisgKgkJfCAgICArLS0tLS0tLS0tLS0tLS0tLS0tLSsgICAgIHwKKyAq CQl8ICAgIHwgICAoRFAgUExML1ZDTykgICAgfCAgICAgfAorICoJCXwgICAgKy0tLS0tLS0tLSst LS0tLS0tLS0rICAgICB8CisgKgkJfCAgICAgICAgICAgICAgdiAgICAgICAgICAgICAgIHwKKyAq CQl8ICAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rICAgfAorICoJCXwgICB8IGhzY2xrX2RpdnNl bF9jbGtfc3JjIHwgICB8CisgKgkJfCAgICstLS0tLS0tLS0tKy0tLS0tLS0tLS0tKyAgIHwKKyAq CQkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICoJCQkJfAorICoJICstLS0tLS0t LS0tLS08LS0tLS0tLS0tdi0tLS0tLS0tLS0tLT4tLS0tLS0tLS0tKworICoJIHwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogKy0tLS0tdi0tLS0tLS0t LS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiB8IGRwX2xpbmtfY2xr X3NyYyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqIHwgICAgZGl2c2Vs X3RlbiAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogKy0tLS0tLS0t LSstLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKgl8ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKgl8ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKgl2ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2CisgKiBJbnB1dCB0byBESVNQQ0Mg YmxvY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqIGZvciBsaW5rIGNsaywg Y3J5cHRvIGNsayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogYW5kIGludGVyZmFj ZSBjbG9jayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKgkJCQkJCQl8Cisg KgkJCQkJCQl8CisgKgkrLS0tLS0tLS08LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0t LTwtLS0rCisgKgl8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfAorICog Ky0tLS0tLS12LS0tLS0tKyAgKy0tLS0tLS0tdi0tLS0tKyAgKy0tLS0tLS0tdi0tLS0tLSsKKyAq IHwgdmNvX2RpdmlkZWQgIHwgIHwgdmNvX2RpdmlkZWQgIHwgIHwgdmNvX2RpdmlkZWQgICB8Cisg KiB8ICAgIF9jbGtfc3JjICB8ICB8ICAgIF9jbGtfc3JjICB8ICB8ICAgIF9jbGtfc3JjICAgfAor ICogfCAgICAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgIHwK KyAqIHxkaXZzZWxfc2l4ICAgIHwgIHwgIGRpdnNlbF90d28gIHwgIHwgIGRpdnNlbF9mb3VyICB8 CisgKiArLS0tLS0tLSstLS0tLS0rICArLS0tLS0rLS0tLS0tLS0rICArLS0tLS0tLS0rLS0tLS0t KworICogICAgICAgICB8CSAgICAgICAgICAgfAkJICAgICAgICB8CisgKgl2LS0tLS0tLT4tLS0t LS0tLS0tdi0tLS0tLS0tLS0tLS08LS0tLS0tdgorICogICAgICAgICAgICAgICAgICAgICAgICAg fAorICoJCSstLS0tLS0tLS0tKy0tLS0tLS0tLSsKKyAqCQl8ICAgdmNvX2RpdmlkZWRfY2xrICB8 CisgKgkJfCAgICAgICBfc3JjX211eCAgICAgfAorICoJCSstLS0tLS0tLS0rLS0tLS0tLS0tLSsK KyAqICAgICAgICAgICAgICAgICAgICAgICAgfAorICogICAgICAgICAgICAgICAgICAgICAgICB2 CisgKiAgICAgICAgICAgICAgSW5wdXQgdG8gRElTUENDIGJsb2NrCisgKiAgICAgICAgICAgICAg Zm9yIERQIHBpeGVsIGNsb2NrCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4K KyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1 ZGUgPGxpbnV4L3JlZ21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorCisjaW5jbHVkZSAi ZHBfcGxsXzEwbm0uaCIKKworI2RlZmluZSBOVU1fUFJPVklERURfQ0xLUwkJMgorCisjZGVmaW5l IERQX0xJTktfQ0xLX1NSQwkJCTAKKyNkZWZpbmUgRFBfUElYRUxfQ0xLX1NSQwkJMQorCitzdGF0 aWMgc3RydWN0IGRwX3BsbF8xMG5tICpkcF9wZGI7CisKKy8qIE9wIHN0cnVjdHVyZXMgKi8KK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX29wcyBkcF8xMG5tX3Zjb19jbGtfb3BzID0geworCS5yZWNh bGNfcmF0ZSA9IGRwX3Zjb19yZWNhbGNfcmF0ZV8xMG5tLAorCS5zZXRfcmF0ZSA9IGRwX3Zjb19z ZXRfcmF0ZV8xMG5tLAorCS5yb3VuZF9yYXRlID0gZHBfdmNvX3JvdW5kX3JhdGVfMTBubSwKKwku cHJlcGFyZSA9IGRwX3Zjb19wcmVwYXJlXzEwbm0sCisJLnVucHJlcGFyZSA9IGRwX3Zjb191bnBy ZXBhcmVfMTBubSwKK307CisKK3N0cnVjdCBkcF9wbGxfMTBubV9wY2xrc2VsIHsKKwlzdHJ1Y3Qg Y2xrX2h3IGh3OworCisJLyogZGl2aWRlciBwYXJhbXMgKi8KKwl1OCBzaGlmdDsKKwl1OCB3aWR0 aDsKKwl1OCBmbGFnczsgLyogc2FtZSBmbGFncyBhcyB1c2VkIGJ5IGNsa19kaXZpZGVyIHN0cnVj dCAqLworCisJc3RydWN0IGRwX3BsbF8xMG5tICpwbGw7Cit9OworI2RlZmluZSB0b19wbGxfMTBu bV9wY2xrc2VsKF9odykgY29udGFpbmVyX29mKF9odywgc3RydWN0IGRwX3BsbF8xMG5tX3BjbGtz ZWwsIGh3KQorCitzdGF0aWMgaW50IGRwX211eF9zZXRfcGFyZW50XzEwbm0oc3RydWN0IGNsa19o dyAqaHcsIHU4IHZhbCkKK3sKKwlzdHJ1Y3QgZHBfcGxsXzEwbm1fcGNsa3NlbCAqcGNsa3NlbCA9 IHRvX3BsbF8xMG5tX3BjbGtzZWwoaHcpOworCXN0cnVjdCBkcF9wbGxfMTBubSAqZHBfcmVzID0g cGNsa3NlbC0+cGxsOworCXUzMiBhdXhjbGtfZGl2OworCisJYXV4Y2xrX2RpdiA9IFBMTF9SRUdf UihkcF9yZXMtPnBoeV9iYXNlLCBEUF9QSFlfVkNPX0RJVik7CisJYXV4Y2xrX2RpdiAmPSB+MHgw MzsJLyogYml0cyAwIHRvIDEgKi8KKworCWlmICh2YWwgPT0gMCkgLyogbXV4IHBhcmVudCBpbmRl eCA9IDAgKi8KKwkJYXV4Y2xrX2RpdiB8PSAxOworCWVsc2UgaWYgKHZhbCA9PSAxKSAvKiBtdXgg cGFyZW50IGluZGV4ID0gMSAqLworCQlhdXhjbGtfZGl2IHw9IDI7CisJZWxzZSBpZiAodmFsID09 IDIpIC8qIG11eCBwYXJlbnQgaW5kZXggPSAyICovCisJCWF1eGNsa19kaXYgfD0gMDsKKworCVBM TF9SRUdfVyhkcF9yZXMtPnBoeV9iYXNlLAorCQkJRFBfUEhZX1ZDT19ESVYsIGF1eGNsa19kaXYp OworCS8qIE1ha2Ugc3VyZSB0aGUgUEhZIHJlZ2lzdGVycyB3cml0ZXMgYXJlIGRvbmUgKi8KKwl3 bWIoKTsKKwlwcl9kZWJ1ZygiJXM6IG11eD0lZCBhdXhjbGtfZGl2PSV4XG4iLCBfX2Z1bmNfXywg dmFsLCBhdXhjbGtfZGl2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdTggZHBfbXV4X2dl dF9wYXJlbnRfMTBubShzdHJ1Y3QgY2xrX2h3ICpodykKK3sKKwl1MzIgYXV4Y2xrX2RpdiA9IDA7 CisJc3RydWN0IGRwX3BsbF8xMG5tX3BjbGtzZWwgKnBjbGtzZWwgPSB0b19wbGxfMTBubV9wY2xr c2VsKGh3KTsKKwlzdHJ1Y3QgZHBfcGxsXzEwbm0gKmRwX3JlcyA9IHBjbGtzZWwtPnBsbDsKKwl1 OCB2YWwgPSAwOworCisJcHJfZXJyKCJjbGtfaHctPmluaXQtPm5hbWUgPSAlc1xuIiwgaHctPmlu aXQtPm5hbWUpOworCWF1eGNsa19kaXYgPSBQTExfUkVHX1IoZHBfcmVzLT5waHlfYmFzZSwgRFBf UEhZX1ZDT19ESVYpOworCWF1eGNsa19kaXYgJj0gMHgwMzsKKworCWlmIChhdXhjbGtfZGl2ID09 IDEpIC8qIERlZmF1bHQgZGl2aWRlciAqLworCQl2YWwgPSAwOworCWVsc2UgaWYgKGF1eGNsa19k aXYgPT0gMikKKwkJdmFsID0gMTsKKwllbHNlIGlmIChhdXhjbGtfZGl2ID09IDApCisJCXZhbCA9 IDI7CisKKwlwcl9kZWJ1ZygiJXM6IGF1eGNsa19kaXY9JWQsIHZhbD0lZFxuIiwgX19mdW5jX18s IGF1eGNsa19kaXYsIHZhbCk7CisKKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgaW50IGNsa19t dXhfZGV0ZXJtaW5lX3JhdGUoc3RydWN0IGNsa19odyAqaHcsCisJCQkJICAgICBzdHJ1Y3QgY2xr X3JhdGVfcmVxdWVzdCAqcmVxKQoreworCWludCByZXQgPSAwOworCisJcmV0ID0gX19jbGtfbXV4 X2RldGVybWluZV9yYXRlX2Nsb3Nlc3QoaHcsIHJlcSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJl dDsKKworCS8qIFNldCB0aGUgbmV3IHBhcmVudCBvZiBtdXggaWYgdGhlcmUgaXMgYSBuZXcgdmFs aWQgcGFyZW50ICovCisJaWYgKGh3LT5jbGsgJiYgcmVxLT5iZXN0X3BhcmVudF9ody0+Y2xrKQor CQljbGtfc2V0X3BhcmVudChody0+Y2xrLCByZXEtPmJlc3RfcGFyZW50X2h3LT5jbGspOworCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG11eF9yZWNhbGNfcmF0ZShzdHJ1 Y3QgY2xrX2h3ICpodywKKwkJCQkJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSkKK3sKKwlzdHJ1 Y3QgY2xrICpkaXZfY2xrID0gTlVMTCwgKnZjb19jbGsgPSBOVUxMOworCXN0cnVjdCBtc21fZHBf cGxsICp2Y28gPSBOVUxMOworCisJZGl2X2NsayA9IGNsa19nZXRfcGFyZW50KGh3LT5jbGspOwor CWlmICghZGl2X2NsaykKKwkJcmV0dXJuIDA7CisKKwl2Y29fY2xrID0gY2xrX2dldF9wYXJlbnQo ZGl2X2Nsayk7CisJaWYgKCF2Y29fY2xrKQorCQlyZXR1cm4gMDsKKworCXZjbyA9IGh3X2Nsa190 b19wbGwoX19jbGtfZ2V0X2h3KHZjb19jbGspKTsKKwlpZiAoIXZjbykKKwkJcmV0dXJuIDA7CisK KwlpZiAodmNvLT5yYXRlID09IERQX1ZDT19IU0NMS19SQVRFXzgxMDBNSFpESVYxMDAwKQorCQly ZXR1cm4gKHZjby0+cmF0ZSAvIDYpOworCWVsc2UgaWYgKHZjby0+cmF0ZSA9PSBEUF9WQ09fSFND TEtfUkFURV81NDAwTUhaRElWMTAwMCkKKwkJcmV0dXJuICh2Y28tPnJhdGUgLyA0KTsKKwllbHNl CisJCXJldHVybiAodmNvLT5yYXRlIC8gMik7Cit9CisKK3N0YXRpYyBpbnQgZHBfcGxsXzEwbm1f Z2V0X3Byb3ZpZGVyKHN0cnVjdCBtc21fZHBfcGxsICpwbGwsCisJCQkJICAgICBzdHJ1Y3QgY2xr ICoqbGlua19jbGtfcHJvdmlkZXIsCisJCQkJICAgICBzdHJ1Y3QgY2xrICoqcGl4ZWxfY2xrX3By b3ZpZGVyKQoreworCXN0cnVjdCBkcF9wbGxfMTBubSAqcGxsXzEwbm0gPSB0b19kcF9wbGxfMTBu bShwbGwpOworCXN0cnVjdCBjbGtfaHdfb25lY2VsbF9kYXRhICpod19kYXRhID0gcGxsXzEwbm0t Pmh3X2RhdGE7CisKKwlpZiAobGlua19jbGtfcHJvdmlkZXIpCisJCSpsaW5rX2Nsa19wcm92aWRl ciA9IGh3X2RhdGEtPmh3c1tEUF9MSU5LX0NMS19TUkNdLT5jbGs7CisJaWYgKHBpeGVsX2Nsa19w cm92aWRlcikKKwkJKnBpeGVsX2Nsa19wcm92aWRlciA9IGh3X2RhdGEtPmh3c1tEUF9QSVhFTF9D TEtfU1JDXS0+Y2xrOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xr X29wcyBkcF8xMG5tX3BjbGtzZWxfY2xrX29wcyA9IHsKKwkuZ2V0X3BhcmVudCA9IGRwX211eF9n ZXRfcGFyZW50XzEwbm0sCisJLnNldF9wYXJlbnQgPSBkcF9tdXhfc2V0X3BhcmVudF8xMG5tLAor CS5yZWNhbGNfcmF0ZSA9IG11eF9yZWNhbGNfcmF0ZSwKKwkuZGV0ZXJtaW5lX3JhdGUgPSBjbGtf bXV4X2RldGVybWluZV9yYXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtfaHcgKmRwX3BsbF8x MG5tX3BpeGVsX2Nsa19zZWwoc3RydWN0IGRwX3BsbF8xMG5tICpwbGxfMTBubSkKK3sKKwlzdHJ1 Y3QgZGV2aWNlICpkZXYgPSAmcGxsXzEwbm0tPnBkZXYtPmRldjsKKwlzdHJ1Y3QgZHBfcGxsXzEw bm1fcGNsa3NlbCAqcGxsX3BjbGtzZWw7CisJc3RydWN0IGNsa19pbml0X2RhdGEgcGNsa3NlbF9p bml0ID0geworCQkucGFyZW50X25hbWVzID0gKGNvbnN0IGNoYXIgKltdKXsKKwkJCQkiZHBfdmNv X2RpdnNlbF90d29fY2xrX3NyYyIsCisJCQkJImRwX3Zjb19kaXZzZWxfZm91cl9jbGtfc3JjIiwK KwkJCQkiZHBfdmNvX2RpdnNlbF9zaXhfY2xrX3NyYyIgfSwKKwkJLm51bV9wYXJlbnRzID0gMywK KwkJLm5hbWUgPSAiZHBfdmNvX2RpdmlkZWRfY2xrX3NyY19tdXgiLAorCQkuZmxhZ3MgPSBDTEtf SUdOT1JFX1VOVVNFRCwKKwkJLm9wcyA9ICZkcF8xMG5tX3BjbGtzZWxfY2xrX29wcywKKwl9Owor CWludCByZXQ7CisKKwlwbGxfcGNsa3NlbCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcGxs X3BjbGtzZWwpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBsbF9wY2xrc2VsKQorCQlyZXR1cm4gRVJS X1BUUigtRU5PTUVNKTsKKworCXBsbF9wY2xrc2VsLT5wbGwgPSBwbGxfMTBubTsKKwlwbGxfcGNs a3NlbC0+c2hpZnQgPSAwOworCXBsbF9wY2xrc2VsLT53aWR0aCA9IDQ7CisJcGxsX3BjbGtzZWwt PmZsYWdzID0gQ0xLX0RJVklERVJfT05FX0JBU0VEOworCXBsbF9wY2xrc2VsLT5ody5pbml0ID0g JnBjbGtzZWxfaW5pdDsKKworCXJldCA9IGNsa19od19yZWdpc3RlcihkZXYsICZwbGxfcGNsa3Nl bC0+aHcpOworCWlmIChyZXQpCisJCXJldHVybiBFUlJfUFRSKHJldCk7CisKKwlyZXR1cm4gJnBs bF9wY2xrc2VsLT5odzsKK30KKworc3RhdGljIGludCBkcF9wbGxfMTBubV9yZWdpc3RlcihzdHJ1 Y3QgZHBfcGxsXzEwbm0gKnBsbF8xMG5tKQoreworCWNoYXIgY2xrX25hbWVbMzJdLCBwYXJlbnRb MzJdLCB2Y29fbmFtZVszMl07CisJc3RydWN0IGNsa19pbml0X2RhdGEgdmNvX2luaXQgPSB7CisJ CS5wYXJlbnRfbmFtZXMgPSAoY29uc3QgY2hhciAqW10peyAiYmlfdGN4byIgfSwKKwkJLm51bV9w YXJlbnRzID0gMSwKKwkJLm5hbWUgPSB2Y29fbmFtZSwKKwkJLmZsYWdzID0gQ0xLX0lHTk9SRV9V TlVTRUQsCisJCS5vcHMgPSAmZHBfMTBubV92Y29fY2xrX29wcywKKwl9OworCXN0cnVjdCBkZXZp Y2UgKmRldiA9ICZwbGxfMTBubS0+cGRldi0+ZGV2OworCXN0cnVjdCBjbGtfaHcgKipod3MgPSBw bGxfMTBubS0+aHdzOworCXN0cnVjdCBjbGtfaHdfb25lY2VsbF9kYXRhICpod19kYXRhOworCXN0 cnVjdCBjbGtfaHcgKmh3OworCWludCBudW0gPSAwOworCWludCByZXQ7CisKKwlEQkcoIkRQLT5p ZCA9ICVkIiwgcGxsXzEwbm0tPmlkKTsKKworCWh3X2RhdGEgPSBkZXZtX2t6YWxsb2MoZGV2LCBz aXplb2YoKmh3X2RhdGEpICsKKwkJCSAgICAgICBOVU1fUFJPVklERURfQ0xLUyAqIHNpemVvZihz dHJ1Y3QgY2xrX2h3ICopLAorCQkJICAgICAgIEdGUF9LRVJORUwpOworCWlmICghaHdfZGF0YSkK KwkJcmV0dXJuIC1FTk9NRU07CisKKwlzbnByaW50Zih2Y29fbmFtZSwgMzIsICJkcF92Y29fY2xr Iik7CisJcGxsXzEwbm0tPmJhc2UuY2xrX2h3LmluaXQgPSAmdmNvX2luaXQ7CisJcmV0ID0gY2xr X2h3X3JlZ2lzdGVyKGRldiwgJnBsbF8xMG5tLT5iYXNlLmNsa19odyk7CisJaWYgKHJldCkKKwkJ cmV0dXJuIHJldDsKKwlod3NbbnVtKytdID0gJnBsbF8xMG5tLT5iYXNlLmNsa19odzsKKworCXNu cHJpbnRmKGNsa19uYW1lLCAzMiwgImRwX2xpbmtfY2xrX2RpdnNlbF90ZW4iKTsKKwlzbnByaW50 ZihwYXJlbnQsIDMyLCAiZHBfdmNvX2NsayIpOworCWh3ID0gY2xrX2h3X3JlZ2lzdGVyX2ZpeGVk X2ZhY3RvcihkZXYsIGNsa19uYW1lLCBwYXJlbnQsCisJCQkJCSAgQ0xLX1NFVF9SQVRFX1BBUkVO VCwgMSwgMTApOworCWlmIChJU19FUlIoaHcpKQorCQlyZXR1cm4gUFRSX0VSUihodyk7CisJaHdz W251bSsrXSA9IGh3OworCWh3X2RhdGEtPmh3c1tEUF9MSU5LX0NMS19TUkNdID0gaHc7CisKKwlz bnByaW50ZihjbGtfbmFtZSwgMzIsICJkcF92Y29fZGl2c2VsX3R3b19jbGtfc3JjIik7CisJc25w cmludGYocGFyZW50LCAzMiwgImRwX3Zjb19jbGsiKTsKKwlodyA9IGNsa19od19yZWdpc3Rlcl9m aXhlZF9mYWN0b3IoZGV2LCBjbGtfbmFtZSwgcGFyZW50LAorCQkJCQkgIDAsIDEsIDIpOworCWlm IChJU19FUlIoaHcpKQorCQlyZXR1cm4gUFRSX0VSUihodyk7CisJaHdzW251bSsrXSA9IGh3Owor CisJc25wcmludGYoY2xrX25hbWUsIDMyLCAiZHBfdmNvX2RpdnNlbF9mb3VyX2Nsa19zcmMiKTsK KwlzbnByaW50ZihwYXJlbnQsIDMyLCAiZHBfdmNvX2NsayIpOworCWh3ID0gY2xrX2h3X3JlZ2lz dGVyX2ZpeGVkX2ZhY3RvcihkZXYsIGNsa19uYW1lLCBwYXJlbnQsCisJCQkJCSAgMCwgMSwgNCk7 CisJaWYgKElTX0VSUihodykpCisJCXJldHVybiBQVFJfRVJSKGh3KTsKKwlod3NbbnVtKytdID0g aHc7CisKKwlzbnByaW50ZihjbGtfbmFtZSwgMzIsICJkcF92Y29fZGl2c2VsX3NpeF9jbGtfc3Jj Iik7CisJc25wcmludGYocGFyZW50LCAzMiwgImRwX3Zjb19jbGsiKTsKKwlodyA9IGNsa19od19y ZWdpc3Rlcl9maXhlZF9mYWN0b3IoZGV2LCBjbGtfbmFtZSwgcGFyZW50LAorCQkJCQkgIDAsIDEs IDYpOworCWlmIChJU19FUlIoaHcpKQorCQlyZXR1cm4gUFRSX0VSUihodyk7CisJaHdzW251bSsr XSA9IGh3OworCisJaHcgPSBkcF9wbGxfMTBubV9waXhlbF9jbGtfc2VsKHBsbF8xMG5tKTsKKwlp ZiAoSVNfRVJSKGh3KSkKKwkJcmV0dXJuIFBUUl9FUlIoaHcpOworCisJaHdzW251bSsrXSA9IGh3 OworCWh3X2RhdGEtPmh3c1tEUF9QSVhFTF9DTEtfU1JDXSA9IGh3OworCisJcGxsXzEwbm0tPm51 bV9od3MgPSBudW07CisKKwlod19kYXRhLT5udW0gPSBOVU1fUFJPVklERURfQ0xLUzsKKwlwbGxf MTBubS0+aHdfZGF0YSA9IGh3X2RhdGE7CisKKwlyZXQgPSBvZl9jbGtfYWRkX2h3X3Byb3ZpZGVy KGRldi0+b2Zfbm9kZSwgb2ZfY2xrX2h3X29uZWNlbGxfZ2V0LAorCQkJCSAgICAgcGxsXzEwbm0t Pmh3X2RhdGEpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gcmVnaXN0 ZXIgY2xrIHByb3ZpZGVyOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1 cm4gcmV0OworfQorCitzdHJ1Y3QgbXNtX2RwX3BsbCAqbXNtX2RwX3BsbF8xMG5tX2luaXQoc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IGlkKQoreworCXN0cnVjdCBkcF9wbGxfMTBu bSAqZHBfMTBubV9wbGw7CisJc3RydWN0IG1zbV9kcF9wbGwgKnBsbDsKKwlpbnQgcmV0OworCisJ aWYgKCFwZGV2KQorCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKKworCWRwXzEwbm1fcGxsID0g ZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqZHBfMTBubV9wbGwpLCBHRlBfS0VSTkVM KTsKKwlpZiAoIWRwXzEwbm1fcGxsKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCURC RygiRFAgUExMJWQiLCBpZCk7CisKKwlkcF8xMG5tX3BsbC0+cGRldiA9IHBkZXY7CisJZHBfMTBu bV9wbGwtPmlkID0gaWQ7CisJZHBfcGRiID0gZHBfMTBubV9wbGw7CisKKwlkcF8xMG5tX3BsbC0+ cGxsX2Jhc2UgPSBtc21faW9yZW1hcChwZGV2LCAicGxsX2Jhc2UiLCAiRFBfUExMIik7CisJaWYg KElTX0VSUl9PUl9OVUxMKGRwXzEwbm1fcGxsLT5wbGxfYmFzZSkpIHsKKwkJZGV2X2VycigmcGRl di0+ZGV2LCAiZmFpbGVkIHRvIG1hcCBDTU4gUExMIGJhc2VcbiIpOworCQlyZXR1cm4gRVJSX1BU UigtRU5PTUVNKTsKKwl9CisKKwlkcF8xMG5tX3BsbC0+cGh5X2Jhc2UgPSBtc21faW9yZW1hcChw ZGV2LCAicGh5X2Jhc2UiLCAiRFBfUEhZIik7CisJaWYgKElTX0VSUl9PUl9OVUxMKGRwXzEwbm1f cGxsLT5waHlfYmFzZSkpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIG1hcCBD TU4gUEhZIGJhc2VcbiIpOworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwl9CisKKwlkcF8x MG5tX3BsbC0+bG5fdHgwX2Jhc2UgPSBtc21faW9yZW1hcChwZGV2LCAibG5fdHgwX2Jhc2UiLCAi RFBfTE5fVFgwIik7CisJaWYgKElTX0VSUl9PUl9OVUxMKGRwXzEwbm1fcGxsLT5sbl90eDBfYmFz ZSkpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIG1hcCBDTU4gTE5fVFgwIGJh c2VcbiIpOworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwl9CisKKwlkcF8xMG5tX3BsbC0+ bG5fdHgxX2Jhc2UgPSBtc21faW9yZW1hcChwZGV2LCAibG5fdHgxX2Jhc2UiLCAiRFBfTE5fVFgx Iik7CisJaWYgKElTX0VSUl9PUl9OVUxMKGRwXzEwbm1fcGxsLT5sbl90eDFfYmFzZSkpIHsKKwkJ ZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIG1hcCBDTU4gTE5fVFgxIGJhc2VcbiIpOwor CQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwl9CisKKwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFk X3UzMihwZGV2LT5kZXYub2Zfbm9kZSwgImNlbGwtaW5kZXgiLAorCQkJCSZkcF8xMG5tX3BsbC0+ aW5kZXgpOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCJVbmFibGUgdG8gZ2V0IHRoZSBjZWxsLWlu ZGV4IHJldD0lZFxuIiwgcmV0KTsKKwkJZHBfMTBubV9wbGwtPmluZGV4ID0gMDsKKwl9CisKKwly ZXQgPSBtc21fZHBfcGxsX3V0aWxfcGFyc2VfZHRfY2xvY2socGRldiwgJmRwXzEwbm1fcGxsLT5i YXNlKTsKKwlpZiAocmV0KSB7CisJCXByX2VycigiVW5hYmxlIHRvIHBhcnNlIGR0IGNsb2NrcyBy ZXQ9JWRcbiIsIHJldCk7CisJCXJldHVybiBFUlJfUFRSKHJldCk7CisJfQorCisJcmV0ID0gZHBf cGxsXzEwbm1fcmVnaXN0ZXIoZHBfMTBubV9wbGwpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycigm cGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIFBMTDogJWRcbiIsIHJldCk7CisJCXJldHVy biBFUlJfUFRSKHJldCk7CisJfQorCisJcGxsID0gJmRwXzEwbm1fcGxsLT5iYXNlOworCXBsbC0+ bWluX3JhdGUgPSBEUF9WQ09fSFNDTEtfUkFURV8xNjIwTUhaRElWMTAwMDsKKwlwbGwtPm1heF9y YXRlID0gRFBfVkNPX0hTQ0xLX1JBVEVfODEwME1IWkRJVjEwMDA7CisJcGxsLT5nZXRfcHJvdmlk ZXIgPSBkcF9wbGxfMTBubV9nZXRfcHJvdmlkZXI7CisKKwlyZXR1cm4gcGxsOworfQpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9wbGwvZHBfcGxsXzEwbm0uaCBiL2RyaXZlcnMv Z3B1L2RybS9tc20vZHAvcGxsL2RwX3BsbF8xMG5tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uZjk2NmJlYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9t c20vZHAvcGxsL2RwX3BsbF8xMG5tLmgKQEAgLTAsMCArMSw5NCBAQAorLyogQ29weXJpZ2h0IChj KSAyMDE2LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor ICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKKyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1 Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJv Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisgKgorICovCisKKyNpZm5kZWYgX19EUF9QTExfMTBOTV9ICisjZGVmaW5lIF9f RFBfUExMXzEwTk1fSAorCisjaW5jbHVkZSAiZHBfcGxsLmgiCisjaW5jbHVkZSAiZHBfcmVnLmgi CisKKyNkZWZpbmUgRFBfVkNPX0hTQ0xLX1JBVEVfMTYyME1IWkRJVjEwMDAJMTYyMDAwMFVMCisj ZGVmaW5lIERQX1ZDT19IU0NMS19SQVRFXzI3MDBNSFpESVYxMDAwCTI3MDAwMDBVTAorI2RlZmlu ZSBEUF9WQ09fSFNDTEtfUkFURV81NDAwTUhaRElWMTAwMAk1NDAwMDAwVUwKKyNkZWZpbmUgRFBf VkNPX0hTQ0xLX1JBVEVfODEwME1IWkRJVjEwMDAJODEwMDAwMFVMCisKKyNkZWZpbmUgTlVNX0RQ X0NMT0NLU19NQVgJCQk2CisKKyNkZWZpbmUgRFBfUEhZX1BMTF9QT0xMX1NMRUVQX1VTCQk1MDAK KyNkZWZpbmUgRFBfUEhZX1BMTF9QT0xMX1RJTUVPVVRfVVMJCTEwMDAwCisKKyNkZWZpbmUgRFBf VkNPX1JBVEVfODEwME1IWkRJVjEwMDAJCTgxMDAwMDBVTAorI2RlZmluZSBEUF9WQ09fUkFURV85 NzIwTUhaRElWMTAwMAkJOTcyMDAwMFVMCisjZGVmaW5lIERQX1ZDT19SQVRFXzEwODAwTUhaRElW MTAwMAkJMTA4MDAwMDBVTAorCitzdHJ1Y3QgZHBfcGxsXzEwbm0geworCXN0cnVjdCBtc21fZHBf cGxsIGJhc2U7CisKKwlpbnQgaWQ7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwor CXZvaWQgX19pb21lbSAqcGxsX2Jhc2U7CisJdm9pZCBfX2lvbWVtICpwaHlfYmFzZTsKKwl2b2lk IF9faW9tZW0gKmxuX3R4MF9iYXNlOworCXZvaWQgX19pb21lbSAqbG5fdHgxX2Jhc2U7CisKKwkv KiBwcml2YXRlIGNsb2NrczogKi8KKwlzdHJ1Y3QgY2xrX2h3ICpod3NbTlVNX0RQX0NMT0NLU19N QVhdOworCXUzMiBudW1faHdzOworCisJLyogY2xvY2stcHJvdmlkZXI6ICovCisJc3RydWN0IGNs a19od19vbmVjZWxsX2RhdGEgKmh3X2RhdGE7CisKKwkvKiBsYW5lIGFuZCBvcmllbnRhdGlvbiBz ZXR0aW5ncyAqLworCXU4IGxhbmVfY250OworCXU4IG9yaWVudGF0aW9uOworCisJLyogQ09NIFBI WSBzZXR0aW5ncyAqLworCXUzMiBoc2Nsa19zZWw7CisJdTMyIGRlY19zdGFydF9tb2RlMDsKKwl1 MzIgZGl2X2ZyYWNfc3RhcnQxX21vZGUwOworCXUzMiBkaXZfZnJhY19zdGFydDJfbW9kZTA7CisJ dTMyIGRpdl9mcmFjX3N0YXJ0M19tb2RlMDsKKwl1MzIgaW50ZWdsb29wX2dhaW4wX21vZGUwOwor CXUzMiBpbnRlZ2xvb3BfZ2FpbjFfbW9kZTA7CisJdTMyIHZjb190dW5lX21hcDsKKwl1MzIgbG9j a19jbXAxX21vZGUwOworCXUzMiBsb2NrX2NtcDJfbW9kZTA7CisJdTMyIGxvY2tfY21wM19tb2Rl MDsKKwl1MzIgbG9ja19jbXBfZW47CisKKwkvKiBQSFkgdmNvIGRpdmlkZXIgKi8KKwl1MzIgcGh5 X3Zjb19kaXY7CisJLyoKKwkgKiBDZXJ0YWluIHBsbCdzIG5lZWRzIHRvIHVwZGF0ZSB0aGUgc2Ft ZSB2Y28gcmF0ZSBhZnRlciByZXN1bWUgaW4KKwkgKiBzdXNwZW5kL3Jlc3VtZSBzY2VuYXJpby4g Q2FjaGVkIHRoZSB2Y28gcmF0ZSBmb3Igc3VjaCBwbGxzLgorCSAqLworCXVuc2lnbmVkIGxvbmcJ dmNvX2NhY2hlZF9yYXRlOworCXUzMgkJY2FjaGVkX2NmZzA7CisJdTMyCQljYWNoZWRfY2ZnMTsK Kwl1MzIJCWNhY2hlZF9vdXRkaXY7CisKKwl1aW50MzJfdCBpbmRleDsKK307CisKKyNkZWZpbmUg dG9fZHBfcGxsXzEwbm0oeCkJY29udGFpbmVyX29mKHgsIHN0cnVjdCBkcF9wbGxfMTBubSwgYmFz ZSkKKworaW50IGRwX3Zjb19zZXRfcmF0ZV8xMG5tKHN0cnVjdCBjbGtfaHcgKmh3LCB1bnNpZ25l ZCBsb25nIHJhdGUsCisJCQkJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSk7Cit1bnNpZ25lZCBs b25nIGRwX3Zjb19yZWNhbGNfcmF0ZV8xMG5tKHN0cnVjdCBjbGtfaHcgKmh3LAorCQkJCXVuc2ln bmVkIGxvbmcgcGFyZW50X3JhdGUpOworbG9uZyBkcF92Y29fcm91bmRfcmF0ZV8xMG5tKHN0cnVj dCBjbGtfaHcgKmh3LCB1bnNpZ25lZCBsb25nIHJhdGUsCisJCQkJdW5zaWduZWQgbG9uZyAqcGFy ZW50X3JhdGUpOworaW50IGRwX3Zjb19wcmVwYXJlXzEwbm0oc3RydWN0IGNsa19odyAqaHcpOwor dm9pZCBkcF92Y29fdW5wcmVwYXJlXzEwbm0oc3RydWN0IGNsa19odyAqaHcpOworI2VuZGlmIC8q IF9fRFBfUExMXzEwTk1fSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9w bGwvZHBfcGxsXzEwbm1fdXRpbC5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9wbGwvZHBfcGxs XzEwbm1fdXRpbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllYjY4ODEK LS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL3BsbC9kcF9wbGxfMTBu bV91dGlsLmMKQEAgLTAsMCArMSw1MzEgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxNi0yMDE4LCBU aGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSB2ZXJzaW9uIDIgYW5kCisgKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK KyAqLworCisjZGVmaW5lIHByX2ZtdChmbXQpCSIlczogIiBmbXQsIF9fZnVuY19fCisKKyNpbmNs dWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxs aW51eC9pb3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSAiZHBf cGxsLmgiCisjaW5jbHVkZSAiZHBfcGxsXzEwbm0uaCIKKyNpbmNsdWRlICJkcF9leHRjb24uaCIK Kworc3RhdGljIGludCBkcF92Y29fcGxsX2luaXRfZGJfMTBubShzdHJ1Y3QgbXNtX2RwX3BsbCAq cGxsLAorCQl1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJc3RydWN0IGRwX3BsbF8xMG5tICpkcF9y ZXMgPSB0b19kcF9wbGxfMTBubShwbGwpOworCXUzMiBzcGFyZV92YWx1ZSA9IDA7CisKKwlzcGFy ZV92YWx1ZSA9IFBMTF9SRUdfUihkcF9yZXMtPnBoeV9iYXNlLCBEUF9QSFlfU1BBUkUwKTsKKwlk cF9yZXMtPmxhbmVfY250ID0gc3BhcmVfdmFsdWUgJiAweDBGOworCWRwX3Jlcy0+b3JpZW50YXRp b24gPSAoc3BhcmVfdmFsdWUgJiAweEYwKSA+PiA0OworCisJcHJfZGVidWcoIiVzOiBzcGFyZV92 YWx1ZT0weCV4LCBsbl9jbnQ9MHgleCwgb3JpZW50YXRpb249MHgleFxuIiwKKwkJCV9fZnVuY19f LCBzcGFyZV92YWx1ZSwgZHBfcmVzLT5sYW5lX2NudCwgZHBfcmVzLT5vcmllbnRhdGlvbik7CisK Kwlzd2l0Y2ggKHJhdGUpIHsKKwljYXNlIERQX1ZDT19IU0NMS19SQVRFXzE2MjBNSFpESVYxMDAw OgorCQlwcl9kZWJ1ZygiJXM6IFZDTyByYXRlOiAlbGRcbiIsIF9fZnVuY19fLAorCQkJCURQX1ZD T19SQVRFXzk3MjBNSFpESVYxMDAwKTsKKwkJZHBfcmVzLT5oc2Nsa19zZWwgPSAweDBjOworCQlk cF9yZXMtPmRlY19zdGFydF9tb2RlMCA9IDB4Njk7CisJCWRwX3Jlcy0+ZGl2X2ZyYWNfc3RhcnQx X21vZGUwID0gMHgwMDsKKwkJZHBfcmVzLT5kaXZfZnJhY19zdGFydDJfbW9kZTAgPSAweDgwOwor CQlkcF9yZXMtPmRpdl9mcmFjX3N0YXJ0M19tb2RlMCA9IDB4MDc7CisJCWRwX3Jlcy0+aW50ZWds b29wX2dhaW4wX21vZGUwID0gMHgzZjsKKwkJZHBfcmVzLT5pbnRlZ2xvb3BfZ2FpbjFfbW9kZTAg PSAweDAwOworCQlkcF9yZXMtPnZjb190dW5lX21hcCA9IDB4MDA7CisJCWRwX3Jlcy0+bG9ja19j bXAxX21vZGUwID0gMHg2ZjsKKwkJZHBfcmVzLT5sb2NrX2NtcDJfbW9kZTAgPSAweDA4OworCQlk cF9yZXMtPmxvY2tfY21wM19tb2RlMCA9IDB4MDA7CisJCWRwX3Jlcy0+cGh5X3Zjb19kaXYgPSAw eDE7CisJCWRwX3Jlcy0+bG9ja19jbXBfZW4gPSAweDAwOworCQlicmVhazsKKwljYXNlIERQX1ZD T19IU0NMS19SQVRFXzI3MDBNSFpESVYxMDAwOgorCQlwcl9kZWJ1ZygiJXM6IFZDTyByYXRlOiAl bGRcbiIsIF9fZnVuY19fLAorCQkJCURQX1ZDT19SQVRFXzEwODAwTUhaRElWMTAwMCk7CisJCWRw X3Jlcy0+aHNjbGtfc2VsID0gMHgwNDsKKwkJZHBfcmVzLT5kZWNfc3RhcnRfbW9kZTAgPSAweDY5 OworCQlkcF9yZXMtPmRpdl9mcmFjX3N0YXJ0MV9tb2RlMCA9IDB4MDA7CisJCWRwX3Jlcy0+ZGl2 X2ZyYWNfc3RhcnQyX21vZGUwID0gMHg4MDsKKwkJZHBfcmVzLT5kaXZfZnJhY19zdGFydDNfbW9k ZTAgPSAweDA3OworCQlkcF9yZXMtPmludGVnbG9vcF9nYWluMF9tb2RlMCA9IDB4M2Y7CisJCWRw X3Jlcy0+aW50ZWdsb29wX2dhaW4xX21vZGUwID0gMHgwMDsKKwkJZHBfcmVzLT52Y29fdHVuZV9t YXAgPSAweDAwOworCQlkcF9yZXMtPmxvY2tfY21wMV9tb2RlMCA9IDB4MGY7CisJCWRwX3Jlcy0+ bG9ja19jbXAyX21vZGUwID0gMHgwZTsKKwkJZHBfcmVzLT5sb2NrX2NtcDNfbW9kZTAgPSAweDAw OworCQlkcF9yZXMtPnBoeV92Y29fZGl2ID0gMHgxOworCQlkcF9yZXMtPmxvY2tfY21wX2VuID0g MHgwMDsKKwkJYnJlYWs7CisJY2FzZSBEUF9WQ09fSFNDTEtfUkFURV81NDAwTUhaRElWMTAwMDoK KwkJcHJfZGVidWcoIiVzOiBWQ08gcmF0ZTogJWxkXG4iLCBfX2Z1bmNfXywKKwkJCQlEUF9WQ09f UkFURV8xMDgwME1IWkRJVjEwMDApOworCQlkcF9yZXMtPmhzY2xrX3NlbCA9IDB4MDA7CisJCWRw X3Jlcy0+ZGVjX3N0YXJ0X21vZGUwID0gMHg4YzsKKwkJZHBfcmVzLT5kaXZfZnJhY19zdGFydDFf bW9kZTAgPSAweDAwOworCQlkcF9yZXMtPmRpdl9mcmFjX3N0YXJ0Ml9tb2RlMCA9IDB4MDA7CisJ CWRwX3Jlcy0+ZGl2X2ZyYWNfc3RhcnQzX21vZGUwID0gMHgwYTsKKwkJZHBfcmVzLT5pbnRlZ2xv b3BfZ2FpbjBfbW9kZTAgPSAweDNmOworCQlkcF9yZXMtPmludGVnbG9vcF9nYWluMV9tb2RlMCA9 IDB4MDA7CisJCWRwX3Jlcy0+dmNvX3R1bmVfbWFwID0gMHgwMDsKKwkJZHBfcmVzLT5sb2NrX2Nt cDFfbW9kZTAgPSAweDFmOworCQlkcF9yZXMtPmxvY2tfY21wMl9tb2RlMCA9IDB4MWM7CisJCWRw X3Jlcy0+bG9ja19jbXAzX21vZGUwID0gMHgwMDsKKwkJZHBfcmVzLT5waHlfdmNvX2RpdiA9IDB4 MjsKKwkJZHBfcmVzLT5sb2NrX2NtcF9lbiA9IDB4MDA7CisJCWJyZWFrOworCWNhc2UgRFBfVkNP X0hTQ0xLX1JBVEVfODEwME1IWkRJVjEwMDA6CisJCXByX2RlYnVnKCIlczogVkNPIHJhdGU6ICVs ZFxuIiwgX19mdW5jX18sCisJCQkJRFBfVkNPX1JBVEVfODEwME1IWkRJVjEwMDApOworCQlkcF9y ZXMtPmhzY2xrX3NlbCA9IDB4MDM7CisJCWRwX3Jlcy0+ZGVjX3N0YXJ0X21vZGUwID0gMHg2OTsK KwkJZHBfcmVzLT5kaXZfZnJhY19zdGFydDFfbW9kZTAgPSAweDAwOworCQlkcF9yZXMtPmRpdl9m cmFjX3N0YXJ0Ml9tb2RlMCA9IDB4ODA7CisJCWRwX3Jlcy0+ZGl2X2ZyYWNfc3RhcnQzX21vZGUw ID0gMHgwNzsKKwkJZHBfcmVzLT5pbnRlZ2xvb3BfZ2FpbjBfbW9kZTAgPSAweDNmOworCQlkcF9y ZXMtPmludGVnbG9vcF9nYWluMV9tb2RlMCA9IDB4MDA7CisJCWRwX3Jlcy0+dmNvX3R1bmVfbWFw ID0gMHgwMDsKKwkJZHBfcmVzLT5sb2NrX2NtcDFfbW9kZTAgPSAweDJmOworCQlkcF9yZXMtPmxv Y2tfY21wMl9tb2RlMCA9IDB4MmE7CisJCWRwX3Jlcy0+bG9ja19jbXAzX21vZGUwID0gMHgwMDsK KwkJZHBfcmVzLT5waHlfdmNvX2RpdiA9IDB4MDsKKwkJZHBfcmVzLT5sb2NrX2NtcF9lbiA9IDB4 MDg7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGludCBkcF9jb25maWdfdmNvX3JhdGVfMTBubShzdHJ1Y3QgbXNtX2Rw X3BsbCAqcGxsLAorCQl1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJdTMyIHJlcyA9IDA7CisJc3Ry dWN0IGRwX3BsbF8xMG5tICpkcF9yZXMgPSB0b19kcF9wbGxfMTBubShwbGwpOworCisJcmVzID0g ZHBfdmNvX3BsbF9pbml0X2RiXzEwbm0ocGxsLCByYXRlKTsKKwlpZiAocmVzKSB7CisJCXByX2Vy cigiVkNPIEluaXQgREIgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIHJlczsKKwl9CisKKwlpZiAoZHBf cmVzLT5sYW5lX2NudCAhPSA0KSB7CisJCWlmIChkcF9yZXMtPm9yaWVudGF0aW9uID09IE9SSUVO VEFUSU9OX0NDMikKKwkJCVBMTF9SRUdfVyhkcF9yZXMtPnBoeV9iYXNlLCBEUF9QSFlfUERfQ1RM LCAweDZkKTsKKwkJZWxzZQorCQkJUExMX1JFR19XKGRwX3Jlcy0+cGh5X2Jhc2UsIERQX1BIWV9Q RF9DVEwsIDB4NzUpOworCX0gZWxzZSB7CisJCVBMTF9SRUdfVyhkcF9yZXMtPnBoeV9iYXNlLCBE UF9QSFlfUERfQ1RMLCAweDdkKTsKKwl9CisKKwkvKiBNYWtlIHN1cmUgdGhlIFBIWSByZWdpc3Rl ciB3cml0ZXMgYXJlIGRvbmUgKi8KKwl3bWIoKTsKKworCVBMTF9SRUdfVyhkcF9yZXMtPnBsbF9i YXNlLCBRU0VSREVTX0NPTV9TVlNfTU9ERV9DTEtfU0VMLCAweDAxKTsKKwlQTExfUkVHX1coZHBf cmVzLT5wbGxfYmFzZSwgUVNFUkRFU19DT01fU1lTQ0xLX0VOX1NFTCwgMHgzNyk7CisJUExMX1JF R19XKGRwX3Jlcy0+cGxsX2Jhc2UsIFFTRVJERVNfQ09NX1NZU19DTEtfQ1RSTCwgMHgwMik7CisJ UExMX1JFR19XKGRwX3Jlcy0+cGxsX2Jhc2UsIFFTRVJERVNfQ09NX0NMS19FTkFCTEUxLCAweDBl KTsKKwlQTExfUkVHX1coZHBfcmVzLT5wbGxfYmFzZSwgUVNFUkRFU19DT01fU1lTQ0xLX0JVRl9F TkFCTEUsIDB4MDYpOworCVBMTF9SRUdfVyhkcF9yZXMtPnBsbF9iYXNlLCBRU0VSREVTX0NPTV9D TEtfU0VMLCAweDMwKTsKKwlQTExfUkVHX1coZHBfcmVzLT5wbGxfYmFzZSwgUVNFUkRFU19DT01f Q01OX0NPTkZJRywgMHgwMik7CisKKwkvKiBEaWZmZXJlbnQgZm9yIGVhY2ggY2xvY2sgcmF0ZXMg Ki8KKwlQTExfUkVHX1coZHBfcmVzLT5wbGxfYmFzZSwKKwkJUVNFUkRFU19DT01fSFNDTEtfU0VM LCBkcF9yZXMtPmhzY2xrX3NlbCk7CisJUExMX1JFR19XKGRwX3Jlcy0+cGxsX2Jhc2UsCisJCVFT RVJERVNfQ09NX0RFQ19TVEFSVF9NT0RFMCwgZHBfcmVzLT5kZWNfc3RhcnRfbW9kZTApOworCVBM TF9SRUdfVyhkcF9yZXMtPnBsbF9iYXNlLAorCQlRU0VSREVTX0NPTV9ESVZfRlJBQ19TVEFSVDFf TU9ERTAsIGRwX3Jlcy0+ZGl2X2ZyYWNfc3RhcnQxX21vZGUwKTsKKwlQTExfUkVHX1coZHBfcmVz LT5wbGxfYmFzZSwKKwkJUVNFUkRFU19DT01fRElWX0ZSQUNfU1RBUlQyX01PREUwLCBkcF9yZXMt PmRpdl9mcmFjX3N0YXJ0Ml9tb2RlMCk7CisJUExMX1JFR19XKGRwX3Jlcy0+cGxsX2Jhc2UsCisJ CVFTRVJERVNfQ09NX0RJVl9GUkFDX1NUQVJUM19NT0RFMCwgZHBfcmVzLT5kaXZfZnJhY19zdGFy dDNfbW9kZTApOworCVBMTF9SRUdfVyhkcF9yZXMtPnBsbF9iYXNlLAorCQlRU0VSREVTX0NPTV9J TlRFR0xPT1BfR0FJTjBfTU9ERTAsIGRwX3Jlcy0+aW50ZWdsb29wX2dhaW4wX21vZGUwKTsKKwlQ TExfUkVHX1coZHBfcmVzLT5wbGxfYmFzZSwKKwkJUVNFUkRFU19DT01fSU5URUdMT09QX0dBSU4x X01PREUwLCBkcF9yZXMtPmludGVnbG9vcF9nYWluMV9tb2RlMCk7CisJUExMX1JFR19XKGRwX3Jl cy0+cGxsX2Jhc2UsCisJCVFTRVJERVNfQ09NX1ZDT19UVU5FX01BUCwgZHBfcmVzLT52Y29fdHVu ZV9tYXApOworCVBMTF9SRUdfVyhkcF9yZXMtPnBsbF9iYXNlLAorCQlRU0VSREVTX0NPTV9MT0NL X0NNUDFfTU9ERTAsIGRwX3Jlcy0+bG9ja19jbXAxX21vZGUwKTsKKwlQTExfUkVHX1coZHBfcmVz LT5wbGxfYmFzZSwKKwkJUVNFUkRFU19DT01fTE9DS19DTVAyX01PREUwLCBkcF9yZXMtPmxvY2tf Y21wMl9tb2RlMCk7CisJUExMX1JFR19XKGRwX3Jlcy0+cGxsX2Jhc2UsCisJCVFTRVJERVNfQ09N X0xPQ0tfQ01QM19NT0RFMCwgZHBfcmVzLT5sb2NrX2NtcDNfbW9kZTApOworCS8qIE1ha2Ugc3Vy ZSB0aGUgUExMIHJlZ2lzdGVyIHdyaXRlcyBhcmUgZG9uZSAqLworCXdtYigpOworCisJUExMX1JF R19XKGRwX3Jlcy0+cGxsX2Jhc2UsIFFTRVJERVNfQ09NX0JHX1RJTUVSLCAweDBhKTsKKwlQTExf UkVHX1coZHBfcmVzLT5wbGxfYmFzZSwgUVNFUkRFU19DT01fQ09SRUNMS19ESVZfTU9ERTAsIDB4 MGEpOworCVBMTF9SRUdfVyhkcF9yZXMtPnBsbF9iYXNlLCBRU0VSREVTX0NPTV9WQ09fVFVORV9D VFJMLCAweDAwKTsKKwlQTExfUkVHX1coZHBfcmVzLT5wbGxfYmFzZSwgUVNFUkRFU19DT01fQklB U19FTl9DTEtCVUZMUl9FTiwgMHgzZik7CisJUExMX1JFR19XKGRwX3Jlcy0+cGxsX2Jhc2UsIFFT RVJERVNfQ09NX0NPUkVfQ0xLX0VOLCAweDFmKTsKKwlQTExfUkVHX1coZHBfcmVzLT5wbGxfYmFz ZSwgUVNFUkRFU19DT01fUExMX0lWQ08sIDB4MDcpOworCVBMTF9SRUdfVyhkcF9yZXMtPnBsbF9i YXNlLAorCQlRU0VSREVTX0NPTV9MT0NLX0NNUF9FTiwgZHBfcmVzLT5sb2NrX2NtcF9lbik7CisJ UExMX1JFR19XKGRwX3Jlcy0+cGxsX2Jhc2UsIFFTRVJERVNfQ09NX1BMTF9DQ1RSTF9NT0RFMCwg MHgzNik7CisJUExMX1JFR19XKGRwX3Jlcy0+cGxsX2Jhc2UsIFFTRVJERVNfQ09NX1BMTF9SQ1RS TF9NT0RFMCwgMHgxNik7CisJUExMX1JFR19XKGRwX3Jlcy0+cGxsX2Jhc2UsIFFTRVJERVNfQ09N X0NQX0NUUkxfTU9ERTAsIDB4MDYpOworCS8qIE1ha2Ugc3VyZSB0aGUgUEhZIHJlZ2lzdGVyIHdy aXRlcyBhcmUgZG9uZSAqLworCXdtYigpOworCisJaWYgKGRwX3Jlcy0+b3JpZW50YXRpb24gPT0g T1JJRU5UQVRJT05fQ0MyKQorCQlQTExfUkVHX1coZHBfcmVzLT5waHlfYmFzZSwgRFBfUEhZX01P REUsIDB4NGMpOworCWVsc2UKKwkJUExMX1JFR19XKGRwX3Jlcy0+cGh5X2Jhc2UsIERQX1BIWV9N T0RFLCAweDVjKTsKKwkvKiBNYWtlIHN1cmUgdGhlIFBMTCByZWdpc3RlciB3cml0ZXMgYXJlIGRv bmUgKi8KKwl3bWIoKTsKKworCS8qIFRYIExhbmUgY29uZmlndXJhdGlvbiAqLworCVBMTF9SRUdf VyhkcF9yZXMtPnBoeV9iYXNlLAorCQkJRFBfUEhZX1RYMF9UWDFfTEFORV9DVEwsIDB4MDUpOwor CVBMTF9SRUdfVyhkcF9yZXMtPnBoeV9iYXNlLAorCQkJRFBfUEhZX1RYMl9UWDNfTEFORV9DVEws IDB4MDUpOworCisJLyogVFgtMCByZWdpc3RlciBjb25maWd1cmF0aW9uICovCisJUExMX1JFR19X KGRwX3Jlcy0+bG5fdHgwX2Jhc2UsIFRYbl9UUkFOU0NFSVZFUl9CSUFTX0VOLCAweDFhKTsKKwlQ TExfUkVHX1coZHBfcmVzLT5sbl90eDBfYmFzZSwgVFhuX1ZNT0RFX0NUUkwxLCAweDQwKTsKKwlQ TExfUkVHX1coZHBfcmVzLT5sbl90eDBfYmFzZSwgVFhuX1BSRV9TVEFMTF9MRE9fQk9PU1RfRU4s IDB4MzApOworCVBMTF9SRUdfVyhkcF9yZXMtPmxuX3R4MF9iYXNlLCBUWG5fSU5URVJGQUNFX1NF TEVDVCwgMHgzZCk7CisJUExMX1JFR19XKGRwX3Jlcy0+bG5fdHgwX2Jhc2UsIFRYbl9DTEtCVUZf RU5BQkxFLCAweDBmKTsKKwlQTExfUkVHX1coZHBfcmVzLT5sbl90eDBfYmFzZSwgVFhuX1JFU0VU X1RTWU5DX0VOLCAweDAzKTsKKwlQTExfUkVHX1coZHBfcmVzLT5sbl90eDBfYmFzZSwgVFhuX1RS QU5fRFJWUl9FTVBfRU4sIDB4MDMpOworCVBMTF9SRUdfVyhkcF9yZXMtPmxuX3R4MF9iYXNlLAor CQlUWG5fUEFSUkFURV9SRUNfREVURUNUX0lETEVfRU4sIDB4MDApOworCVBMTF9SRUdfVyhkcF9y ZXMtPmxuX3R4MF9iYXNlLCBUWG5fVFhfSU5URVJGQUNFX01PREUsIDB4MDApOworCVBMTF9SRUdf VyhkcF9yZXMtPmxuX3R4MF9iYXNlLCBUWG5fVFhfQkFORCwgMHg0KTsKKworCS8qIFRYLTEgcmVn aXN0ZXIgY29uZmlndXJhdGlvbiAqLworCVBMTF9SRUdfVyhkcF9yZXMtPmxuX3R4MV9iYXNlLCBU WG5fVFJBTlNDRUlWRVJfQklBU19FTiwgMHgxYSk7CisJUExMX1JFR19XKGRwX3Jlcy0+bG5fdHgx X2Jhc2UsIFRYbl9WTU9ERV9DVFJMMSwgMHg0MCk7CisJUExMX1JFR19XKGRwX3Jlcy0+bG5fdHgx X2Jhc2UsIFRYbl9QUkVfU1RBTExfTERPX0JPT1NUX0VOLCAweDMwKTsKKwlQTExfUkVHX1coZHBf cmVzLT5sbl90eDFfYmFzZSwgVFhuX0lOVEVSRkFDRV9TRUxFQ1QsIDB4M2QpOworCVBMTF9SRUdf VyhkcF9yZXMtPmxuX3R4MV9iYXNlLCBUWG5fQ0xLQlVGX0VOQUJMRSwgMHgwZik7CisJUExMX1JF R19XKGRwX3Jlcy0+bG5fdHgxX2Jhc2UsIFRYbl9SRVNFVF9UU1lOQ19FTiwgMHgwMyk7CisJUExM X1JFR19XKGRwX3Jlcy0+bG5fdHgxX2Jhc2UsIFRYbl9UUkFOX0RSVlJfRU1QX0VOLCAweDAzKTsK KwlQTExfUkVHX1coZHBfcmVzLT5sbl90eDFfYmFzZSwKKwkJVFhuX1BBUlJBVEVfUkVDX0RFVEVD VF9JRExFX0VOLCAweDAwKTsKKwlQTExfUkVHX1coZHBfcmVzLT5sbl90eDFfYmFzZSwgVFhuX1RY X0lOVEVSRkFDRV9NT0RFLCAweDAwKTsKKwlQTExfUkVHX1coZHBfcmVzLT5sbl90eDFfYmFzZSwg VFhuX1RYX0JBTkQsIDB4NCk7CisJLyogTWFrZSBzdXJlIHRoZSBQSFkgcmVnaXN0ZXIgd3JpdGVz IGFyZSBkb25lICovCisJd21iKCk7CisKKwkvKiBkZXBlbmRlbnQgb24gdGhlIHZjbyBmcmVxdWVu Y3kgKi8KKwlQTExfUkVHX1coZHBfcmVzLT5waHlfYmFzZSwgRFBfUEhZX1ZDT19ESVYsIGRwX3Jl cy0+cGh5X3Zjb19kaXYpOworCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGJvb2wgZHBfMTBu bV9wbGxfbG9ja19zdGF0dXMoc3RydWN0IGRwX3BsbF8xMG5tICpkcF9yZXMpCit7CisJdTMyIHN0 YXR1czsKKwlib29sIHBsbF9sb2NrZWQ7CisKKwkvKiBwb2xsIGZvciBQTEwgbG9jayBzdGF0dXMg Ki8KKwlpZiAocmVhZGxfcG9sbF90aW1lb3V0X2F0b21pYygoZHBfcmVzLT5wbGxfYmFzZSArCisJ CQlRU0VSREVTX0NPTV9DX1JFQURZX1NUQVRVUyksCisJCQlzdGF0dXMsCisJCQkoKHN0YXR1cyAm IEJJVCgwKSkgPiAwKSwKKwkJCURQX1BIWV9QTExfUE9MTF9TTEVFUF9VUywKKwkJCURQX1BIWV9Q TExfUE9MTF9USU1FT1VUX1VTKSkgeworCQlwcl9lcnIoIiVzOiBDX1JFQURZIHN0YXR1cyBpcyBu b3QgaGlnaC4gU3RhdHVzPSV4XG4iLAorCQkJCV9fZnVuY19fLCBzdGF0dXMpOworCQlwbGxfbG9j a2VkID0gZmFsc2U7CisJfSBlbHNlIHsKKwkJcGxsX2xvY2tlZCA9IHRydWU7CisJfQorCisJcmV0 dXJuIHBsbF9sb2NrZWQ7Cit9CisKK3N0YXRpYyBib29sIGRwXzEwbm1fcGh5X3JkeV9zdGF0dXMo c3RydWN0IGRwX3BsbF8xMG5tICpkcF9yZXMpCit7CisJdTMyIHN0YXR1czsKKwlib29sIHBoeV9y ZWFkeSA9IHRydWU7CisKKwkvKiBwb2xsIGZvciBQSFkgcmVhZHkgc3RhdHVzICovCisJaWYgKHJl YWRsX3BvbGxfdGltZW91dF9hdG9taWMoKGRwX3Jlcy0+cGh5X2Jhc2UgKworCQkJRFBfUEhZX1NU QVRVUyksCisJCQlzdGF0dXMsCisJCQkoKHN0YXR1cyAmIChCSVQoMSkpKSA+IDApLAorCQkJRFBf UEhZX1BMTF9QT0xMX1NMRUVQX1VTLAorCQkJRFBfUEhZX1BMTF9QT0xMX1RJTUVPVVRfVVMpKSB7 CisJCXByX2VycigiJXM6IFBoeV9yZWFkeSBpcyBub3QgaGlnaC4gU3RhdHVzPSV4XG4iLAorCQkJ CV9fZnVuY19fLCBzdGF0dXMpOworCQlwaHlfcmVhZHkgPSBmYWxzZTsKKwl9CisKKwlyZXR1cm4g cGh5X3JlYWR5OworfQorCitzdGF0aWMgaW50IGRwX3BsbF9lbmFibGVfMTBubShzdHJ1Y3QgY2xr X2h3ICpodykKK3sKKwlpbnQgcmMgPSAwOworCXN0cnVjdCBtc21fZHBfcGxsICpwbGwgPSBod19j bGtfdG9fcGxsKGh3KTsKKwlzdHJ1Y3QgZHBfcGxsXzEwbm0gKmRwX3JlcyA9IHRvX2RwX3BsbF8x MG5tKHBsbCk7CisJdTMyIGJpYXNfZW4sIGRydnJfZW47CisKKwlQTExfUkVHX1coZHBfcmVzLT5w aHlfYmFzZSwgRFBfUEhZX0FVWF9DRkcyLCAweDA0KTsKKwlQTExfUkVHX1coZHBfcmVzLT5waHlf YmFzZSwgRFBfUEhZX0NGRywgMHgwMSk7CisJUExMX1JFR19XKGRwX3Jlcy0+cGh5X2Jhc2UsIERQ X1BIWV9DRkcsIDB4MDUpOworCVBMTF9SRUdfVyhkcF9yZXMtPnBoeV9iYXNlLCBEUF9QSFlfQ0ZH LCAweDAxKTsKKwlQTExfUkVHX1coZHBfcmVzLT5waHlfYmFzZSwgRFBfUEhZX0NGRywgMHgwOSk7 CisJd21iKCk7IC8qIE1ha2Ugc3VyZSB0aGUgUEhZIHJlZ2lzdGVyIHdyaXRlcyBhcmUgZG9uZSAq LworCisJUExMX1JFR19XKGRwX3Jlcy0+cGxsX2Jhc2UsIFFTRVJERVNfQ09NX1JFU0VUU01fQ05U UkwsIDB4MjApOworCXdtYigpOwkvKiBNYWtlIHN1cmUgdGhlIFBMTCByZWdpc3RlciB3cml0ZXMg YXJlIGRvbmUgKi8KKworCWlmICghZHBfMTBubV9wbGxfbG9ja19zdGF0dXMoZHBfcmVzKSkgewor CQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gbG9ja19lcnI7CisJfQorCisJUExMX1JFR19XKGRwX3Jl cy0+cGh5X2Jhc2UsIERQX1BIWV9DRkcsIDB4MTkpOworCS8qIE1ha2Ugc3VyZSB0aGUgUEhZIHJl Z2lzdGVyIHdyaXRlcyBhcmUgZG9uZSAqLworCXdtYigpOworCS8qIHBvbGwgZm9yIFBIWSByZWFk eSBzdGF0dXMgKi8KKwlpZiAoIWRwXzEwbm1fcGh5X3JkeV9zdGF0dXMoZHBfcmVzKSkgeworCQly YyA9IC1FSU5WQUw7CisJCWdvdG8gbG9ja19lcnI7CisJfQorCisJcHJfZGVidWcoIiVzOiBQTEwg aXMgbG9ja2VkXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAoZHBfcmVzLT5sYW5lX2NudCA9PSAxKSB7 CisJCWJpYXNfZW4gPSAweDNlOworCQlkcnZyX2VuID0gMHgxMzsKKwl9IGVsc2UgeworCQliaWFz X2VuID0gMHgzZjsKKwkJZHJ2cl9lbiA9IDB4MTA7CisJfQorCisJaWYgKGRwX3Jlcy0+bGFuZV9j bnQgIT0gNCkgeworCQlpZiAoZHBfcmVzLT5vcmllbnRhdGlvbiA9PSBPUklFTlRBVElPTl9DQzEp IHsKKwkJCVBMTF9SRUdfVyhkcF9yZXMtPmxuX3R4MV9iYXNlLAorCQkJCVRYbl9ISUdIWl9EUlZS X0VOLCBkcnZyX2VuKTsKKwkJCVBMTF9SRUdfVyhkcF9yZXMtPmxuX3R4MV9iYXNlLAorCQkJCVRY bl9UUkFOU0NFSVZFUl9CSUFTX0VOLCBiaWFzX2VuKTsKKwkJfSBlbHNlIHsKKwkJCVBMTF9SRUdf VyhkcF9yZXMtPmxuX3R4MF9iYXNlLAorCQkJCVRYbl9ISUdIWl9EUlZSX0VOLCBkcnZyX2VuKTsK KwkJCVBMTF9SRUdfVyhkcF9yZXMtPmxuX3R4MF9iYXNlLAorCQkJCVRYbl9UUkFOU0NFSVZFUl9C SUFTX0VOLCBiaWFzX2VuKTsKKwkJfQorCX0gZWxzZSB7CisJCVBMTF9SRUdfVyhkcF9yZXMtPmxu X3R4MF9iYXNlLCBUWG5fSElHSFpfRFJWUl9FTiwgZHJ2cl9lbik7CisJCVBMTF9SRUdfVyhkcF9y ZXMtPmxuX3R4MF9iYXNlLAorCQkJVFhuX1RSQU5TQ0VJVkVSX0JJQVNfRU4sIGJpYXNfZW4pOwor CQlQTExfUkVHX1coZHBfcmVzLT5sbl90eDFfYmFzZSwgVFhuX0hJR0haX0RSVlJfRU4sIGRydnJf ZW4pOworCQlQTExfUkVHX1coZHBfcmVzLT5sbl90eDFfYmFzZSwKKwkJCVRYbl9UUkFOU0NFSVZF Ul9CSUFTX0VOLCBiaWFzX2VuKTsKKwl9CisKKwlQTExfUkVHX1coZHBfcmVzLT5sbl90eDBfYmFz ZSwgVFhuX1RYX1BPTF9JTlYsIDB4MGEpOworCVBMTF9SRUdfVyhkcF9yZXMtPmxuX3R4MV9iYXNl LCBUWG5fVFhfUE9MX0lOViwgMHgwYSk7CisJUExMX1JFR19XKGRwX3Jlcy0+cGh5X2Jhc2UsIERQ X1BIWV9DRkcsIDB4MTgpOworCXVkZWxheSgyMDAwKTsKKworCVBMTF9SRUdfVyhkcF9yZXMtPnBo eV9iYXNlLCBEUF9QSFlfQ0ZHLCAweDE5KTsKKworCS8qCisJICogTWFrZSBzdXJlIGFsbCB0aGUg cmVnaXN0ZXIgd3JpdGVzIGFyZSBjb21wbGV0ZWQgYmVmb3JlCisJICogZG9pbmcgYW55IG90aGVy IG9wZXJhdGlvbgorCSAqLworCXdtYigpOworCisJLyogcG9sbCBmb3IgUEhZIHJlYWR5IHN0YXR1 cyAqLworCWlmICghZHBfMTBubV9waHlfcmR5X3N0YXR1cyhkcF9yZXMpKSB7CisJCXJjID0gLUVJ TlZBTDsKKwkJZ290byBsb2NrX2VycjsKKwl9CisKKwlQTExfUkVHX1coZHBfcmVzLT5sbl90eDBf YmFzZSwgVFhuX1RYX0RSVl9MVkwsIDB4MzgpOworCVBMTF9SRUdfVyhkcF9yZXMtPmxuX3R4MV9i YXNlLCBUWG5fVFhfRFJWX0xWTCwgMHgzOCk7CisJUExMX1JFR19XKGRwX3Jlcy0+bG5fdHgwX2Jh c2UsIFRYbl9UWF9FTVBfUE9TVDFfTFZMLCAweDIwKTsKKwlQTExfUkVHX1coZHBfcmVzLT5sbl90 eDFfYmFzZSwgVFhuX1RYX0VNUF9QT1NUMV9MVkwsIDB4MjApOworCVBMTF9SRUdfVyhkcF9yZXMt PmxuX3R4MF9iYXNlLCBUWG5fUkVTX0NPREVfTEFORV9PRkZTRVRfVFgsIDB4MDYpOworCVBMTF9S RUdfVyhkcF9yZXMtPmxuX3R4MV9iYXNlLCBUWG5fUkVTX0NPREVfTEFORV9PRkZTRVRfVFgsIDB4 MDYpOworCVBMTF9SRUdfVyhkcF9yZXMtPmxuX3R4MF9iYXNlLCBUWG5fUkVTX0NPREVfTEFORV9P RkZTRVRfUlgsIDB4MDcpOworCVBMTF9SRUdfVyhkcF9yZXMtPmxuX3R4MV9iYXNlLCBUWG5fUkVT X0NPREVfTEFORV9PRkZTRVRfUlgsIDB4MDcpOworCS8qIE1ha2Ugc3VyZSB0aGUgUEhZIHJlZ2lz dGVyIHdyaXRlcyBhcmUgZG9uZSAqLworCXdtYigpOworCitsb2NrX2VycjoKKwlyZXR1cm4gcmM7 Cit9CisKK3N0YXRpYyBpbnQgZHBfcGxsX2Rpc2FibGVfMTBubShzdHJ1Y3QgY2xrX2h3ICpodykK K3sKKwlpbnQgcmMgPSAwOworCXN0cnVjdCBtc21fZHBfcGxsICpwbGwgPSBod19jbGtfdG9fcGxs KGh3KTsKKwlzdHJ1Y3QgZHBfcGxsXzEwbm0gKmRwX3JlcyA9IHRvX2RwX3BsbF8xMG5tKHBsbCk7 CisKKwkvKiBBc3NlcnQgRFAgUEhZIHBvd2VyIGRvd24gKi8KKwlQTExfUkVHX1coZHBfcmVzLT5w aHlfYmFzZSwgRFBfUEhZX1BEX0NUTCwgMHgyKTsKKwkvKgorCSAqIE1ha2Ugc3VyZSBhbGwgdGhl IHJlZ2lzdGVyIHdyaXRlcyB0byBkaXNhYmxlIFBMTCBhcmUKKwkgKiBjb21wbGV0ZWQgYmVmb3Jl IGRvaW5nIGFueSBvdGhlciBvcGVyYXRpb24KKwkgKi8KKwl3bWIoKTsKKworCXJldHVybiByYzsK K30KKworCitpbnQgZHBfdmNvX3ByZXBhcmVfMTBubShzdHJ1Y3QgY2xrX2h3ICpodykKK3sKKwlp bnQgcmMgPSAwOworCXN0cnVjdCBtc21fZHBfcGxsICpwbGwgPSBod19jbGtfdG9fcGxsKGh3KTsK KwlzdHJ1Y3QgZHBfcGxsXzEwbm0gKmRwX3JlcyA9IHRvX2RwX3BsbF8xMG5tKHBsbCk7CisKKwlw cl9kZWJ1ZygicmF0ZT0lbGRcbiIsIHBsbC0+cmF0ZSk7CisJaWYgKChkcF9yZXMtPnZjb19jYWNo ZWRfcmF0ZSAhPSAwKQorCQkmJiAoZHBfcmVzLT52Y29fY2FjaGVkX3JhdGUgPT0gcGxsLT5yYXRl KSkgeworCQlyYyA9IHBsbC0+Y2xrX2h3LmluaXQtPm9wcy0+c2V0X3JhdGUoaHcsCisJCQlkcF9y ZXMtPnZjb19jYWNoZWRfcmF0ZSwgZHBfcmVzLT52Y29fY2FjaGVkX3JhdGUpOworCQlpZiAocmMp IHsKKwkJCXByX2VycigiaW5kZXg9JWQgdmNvX3NldF9yYXRlIGZhaWxlZC4gcmM9JWRcbiIsCisJ CQkJcmMsIGRwX3Jlcy0+aW5kZXgpOworCQkJZ290byBlcnJvcjsKKwkJfQorCX0KKworCXJjID0g ZHBfcGxsX2VuYWJsZV8xMG5tKGh3KTsKKwlpZiAocmMpIHsKKwkJcHJfZXJyKCJuZHg9JWQgZmFp bGVkIHRvIGVuYWJsZSBkcCBwbGxcbiIsCisJCQkJCWRwX3Jlcy0+aW5kZXgpOworCQlnb3RvIGVy cm9yOworCX0KKworCXBsbC0+cGxsX29uID0gdHJ1ZTsKK2Vycm9yOgorCXJldHVybiByYzsKK30K Kwordm9pZCBkcF92Y29fdW5wcmVwYXJlXzEwbm0oc3RydWN0IGNsa19odyAqaHcpCit7CisJc3Ry dWN0IG1zbV9kcF9wbGwgKnBsbCA9IGh3X2Nsa190b19wbGwoaHcpOworCXN0cnVjdCBkcF9wbGxf MTBubSAqZHBfcmVzID0gdG9fZHBfcGxsXzEwbm0ocGxsKTsKKworCWlmICghZHBfcmVzKSB7CisJ CXByX2VycigiSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJcbiIpOworCQlyZXR1cm47CisJfQorCisJ aWYgKCFwbGwtPnBsbF9vbikgeworCQlwcl9lcnIoInBsbCByZXNvdXJjZSBjYW4ndCBiZSBlbmFi bGVkXG4iKTsKKwkJcmV0dXJuOworCX0KKwlkcF9yZXMtPnZjb19jYWNoZWRfcmF0ZSA9IHBsbC0+ cmF0ZTsKKwlkcF9wbGxfZGlzYWJsZV8xMG5tKGh3KTsKKworCS8vZHBfcmVzLT5oYW5kb2ZmX3Jl c291cmNlcyA9IGZhbHNlOworCXBsbC0+cGxsX29uID0gZmFsc2U7Cit9CisKK2ludCBkcF92Y29f c2V0X3JhdGVfMTBubShzdHJ1Y3QgY2xrX2h3ICpodywgdW5zaWduZWQgbG9uZyByYXRlLAorCQkJ CQl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKQoreworCXN0cnVjdCBtc21fZHBfcGxsICpwbGwg PSBod19jbGtfdG9fcGxsKGh3KTsKKwlpbnQgcmM7CisKKwlwcl9kZWJ1ZygiRFAgbGFuZSBDTEsg cmF0ZT0lbGRcbiIsIHJhdGUpOworCisJcmMgPSBkcF9jb25maWdfdmNvX3JhdGVfMTBubShwbGws IHJhdGUpOworCWlmIChyYykKKwkJcHJfZXJyKCIlczogRmFpbGVkIHRvIHNldCBjbGsgcmF0ZVxu IiwgX19mdW5jX18pOworCisJcGxsLT5yYXRlID0gcmF0ZTsKKworCXJldHVybiAwOworfQorCit1 bnNpZ25lZCBsb25nIGRwX3Zjb19yZWNhbGNfcmF0ZV8xMG5tKHN0cnVjdCBjbGtfaHcgKmh3LAor CQkJCQl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKQoreworCXN0cnVjdCBtc21fZHBfcGxsICpw bGwgPSBod19jbGtfdG9fcGxsKGh3KTsKKwlzdHJ1Y3QgZHBfcGxsXzEwbm0gKmRwX3JlcyA9IHRv X2RwX3BsbF8xMG5tKHBsbCk7CisJdTMyIGRpdiwgaHNjbGtfZGl2LCBsaW5rX2Nsa19kaXYgPSAw OworCXU2NCB2Y29fcmF0ZTsKKworCWRpdiA9IFBMTF9SRUdfUihkcF9yZXMtPnBsbF9iYXNlLCBR U0VSREVTX0NPTV9IU0NMS19TRUwpOworCWRpdiAmPSAweDBmOworCisJaWYgKGRpdiA9PSAxMikK KwkJaHNjbGtfZGl2ID0gNjsgLyogRGVmYXVsdCAqLworCWVsc2UgaWYgKGRpdiA9PSA0KQorCQlo c2Nsa19kaXYgPSA0OworCWVsc2UgaWYgKGRpdiA9PSAwKQorCQloc2Nsa19kaXYgPSAyOworCWVs c2UgaWYgKGRpdiA9PSAzKQorCQloc2Nsa19kaXYgPSAxOworCWVsc2UgeworCQlwcl9kZWJ1Zygi dW5rbm93biBkaXZpZGVyLiBmb3JjaW5nIHRvIGRlZmF1bHRcbiIpOworCQloc2Nsa19kaXYgPSA1 OworCX0KKworCWRpdiA9IFBMTF9SRUdfUihkcF9yZXMtPnBoeV9iYXNlLCBEUF9QSFlfQVVYX0NG RzIpOworCWRpdiA+Pj0gMjsKKworCWlmICgoZGl2ICYgMHgzKSA9PSAwKQorCQlsaW5rX2Nsa19k aXYgPSA1OworCWVsc2UgaWYgKChkaXYgJiAweDMpID09IDEpCisJCWxpbmtfY2xrX2RpdiA9IDEw OworCWVsc2UgaWYgKChkaXYgJiAweDMpID09IDIpCisJCWxpbmtfY2xrX2RpdiA9IDIwOworCWVs c2UKKwkJcHJfZXJyKCIlczogdW5zdXBwb3J0ZWQgZGl2LiBQaHlfbW9kZTogJWRcbiIsIF9fZnVu Y19fLCBkaXYpOworCisJaWYgKGxpbmtfY2xrX2RpdiA9PSAyMCkgeworCQl2Y29fcmF0ZSA9IERQ X1ZDT19IU0NMS19SQVRFXzI3MDBNSFpESVYxMDAwOworCX0gZWxzZSB7CisJCWlmIChoc2Nsa19k aXYgPT0gNikKKwkJCXZjb19yYXRlID0gRFBfVkNPX0hTQ0xLX1JBVEVfMTYyME1IWkRJVjEwMDA7 CisJCWVsc2UgaWYgKGhzY2xrX2RpdiA9PSA0KQorCQkJdmNvX3JhdGUgPSBEUF9WQ09fSFNDTEtf UkFURV8yNzAwTUhaRElWMTAwMDsKKwkJZWxzZSBpZiAoaHNjbGtfZGl2ID09IDIpCisJCQl2Y29f cmF0ZSA9IERQX1ZDT19IU0NMS19SQVRFXzU0MDBNSFpESVYxMDAwOworCQllbHNlCisJCQl2Y29f cmF0ZSA9IERQX1ZDT19IU0NMS19SQVRFXzgxMDBNSFpESVYxMDAwOworCX0KKworCXByX2RlYnVn KCJyZXR1cm5pbmcgdmNvIHJhdGUgPSAlbHVcbiIsICh1bnNpZ25lZCBsb25nKXZjb19yYXRlKTsK KworCWRwX3Jlcy0+dmNvX2NhY2hlZF9yYXRlID0gcGxsLT5yYXRlID0gdmNvX3JhdGU7CisJcmV0 dXJuICh1bnNpZ25lZCBsb25nKXZjb19yYXRlOworfQorCitsb25nIGRwX3Zjb19yb3VuZF9yYXRl XzEwbm0oc3RydWN0IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKKwkJCXVuc2lnbmVk IGxvbmcgKnBhcmVudF9yYXRlKQoreworCXVuc2lnbmVkIGxvbmcgcnJhdGUgPSByYXRlOworCXN0 cnVjdCBtc21fZHBfcGxsICpwbGwgPSBod19jbGtfdG9fcGxsKGh3KTsKKworCWlmIChyYXRlIDw9 IHBsbC0+bWluX3JhdGUpCisJCXJyYXRlID0gcGxsLT5taW5fcmF0ZTsKKwllbHNlIGlmIChyYXRl IDw9IERQX1ZDT19IU0NMS19SQVRFXzI3MDBNSFpESVYxMDAwKQorCQlycmF0ZSA9IERQX1ZDT19I U0NMS19SQVRFXzI3MDBNSFpESVYxMDAwOworCWVsc2UgaWYgKHJhdGUgPD0gRFBfVkNPX0hTQ0xL X1JBVEVfNTQwME1IWkRJVjEwMDApCisJCXJyYXRlID0gRFBfVkNPX0hTQ0xLX1JBVEVfNTQwME1I WkRJVjEwMDA7CisJZWxzZQorCQlycmF0ZSA9IHBsbC0+bWF4X3JhdGU7CisKKwlwcl9kZWJ1Zygi JXM6IHJyYXRlPSVsZFxuIiwgX19mdW5jX18sIHJyYXRlKTsKKworCSpwYXJlbnRfcmF0ZSA9IHJy YXRlOworCXJldHVybiBycmF0ZTsKK30KKwotLSAKVGhlIFF1YWxjb21tIElubm92YXRpb24gQ2Vu dGVyLCBJbmMuIGlzIGEgbWVtYmVyIG9mIHRoZSBDb2RlIEF1cm9yYSBGb3J1bSwKYSBMaW51eCBG b3VuZGF0aW9uIENvbGxhYm9yYXRpdmUgUHJvamVjdAoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KRnJlZWRyZW5vIG1haWxpbmcgbGlzdApGcmVlZHJlbm9A bGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxt YW4vbGlzdGluZm8vZnJlZWRyZW5vCg==