From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Zhong Subject: [v2 PATCH 4/4] drm/rockchip: cdn-dp: add cdn DP support for rk3399 Date: Mon, 13 Jun 2016 17:39:49 +0800 Message-ID: <1465810789-22303-5-git-send-email-zyw@rock-chips.com> References: <1465810789-22303-1-git-send-email-zyw@rock-chips.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1465810789-22303-1-git-send-email-zyw@rock-chips.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dianders@chromium.org, tfiga@chromium.org, heiko@sntech.de, yzq@rock-chips.com, groeck@chromium.org Cc: linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-rockchip@lists.infradead.org, Chris Zhong , linux-arm-kernel@lists.infradead.org List-Id: linux-rockchip.vger.kernel.org QWRkIHN1cHBvcnQgZm9yIGNkbiBEUCBjb250cm9sbGVyIHdoaWNoIGlzIGVtYmVkZGVkIGluIHRo ZSByazMzOTkKU29Dcy4gVGhlIERQIGlzIGNvbXBsaWFudCB3aXRoIERpc3BsYXlQb3J0IFNwZWNp ZmljYXRpb24sClZlcnNpb24gMS4zLCBUaGlzIElQIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgcm9j a2NoaXAgdHlwZS1jIFBIWSBJUC4KVGhlcmUgaXMgYSB1Q1BVIGluIERQIGNvbnRyb2xsZXIsIGl0 IG5lZWQgYSBmaXJtd2FyZSB0byB3b3JrLApwbGVhc2UgcHV0IHRoZSBmaXJtd2FyZSBmaWxlIHRv IC9saWIvZmlybXdhcmUvY2RuL2RwdHguYmluLiBUaGUKdUNQVSBpbiBjaGFyZ2Ugb2YgYXV4IGNv bW11bmljYXRpb24gYW5kIGxpbmsgdHJhaW5pbmcsIHRoZSBob3N0IHVzZQptYWlsYm94IHRvIGNv bW11bmljYXRlIHdpdGggdGhlIHVjcHUuClRoZSBkY2xrIHBpbl9wb2wgb2Ygdm9wIG11c3Qgbm90 IGJlIGludmVydCBmb3IgRFAuCgpTaWduZWQtb2ZmLWJ5OiBDaHJpcyBaaG9uZyA8enl3QHJvY2st Y2hpcHMuY29tPgoKLS0tCgpDaGFuZ2VzIGluIHYyOgotIEFscGhhYmV0aWMgb3JkZXIKLSByZW1v dmUgZXhjZXNzIGVycm9yIG1lc3NhZ2UKLSB1c2UgZGVmaW5lIGNsa19yYXRlCi0gY2hlY2sgYWxs IHJldHVybiB2YWx1ZQotIHJlbW92ZSBkZXZfc2V0X25hbWUoZHAtPmRldiwgImNkbi1kcCIpOwot IHVzZSBzY2hlZHVsZV9kZWxheWVkX3dvcmsKLSByZW1vdmUgbmV2ZXItY2FsbGVkIGZ1bmN0aW9u cwotIHJlbW92ZSBzb21lIHVubmVjZXNzYXJ5ICgpCgpDaGFuZ2VzIGluIHYxOgotIHVzZSBleHRj b24gQVBJCi0gdXNlIGhkbWktY29kZWMgZm9yIHRoZSBEUCBBc29jCi0gZG8gbm90IGluaXRpYWxp emUgdGhlICJyZXQiCi0gcHJpbnRrIGEgZXJyIGxvZyB3aGVuIGRybV9vZl9lbmNvZGVyX2FjdGl2 ZV9lbmRwb2ludF9pZAotIG1vZGlmeSB0aGUgZGNsayBwaW5fcG9sIHRvIGEgc2luZ2xlIGxpbmUK CiBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvS2NvbmZpZyAgICAgICAgICAgIHwgICA5ICsKIGRy aXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9NYWtlZmlsZSAgICAgICAgICAgfCAgIDEgKwogZHJpdmVy cy9ncHUvZHJtL3JvY2tjaGlwL2Nkbi1kcC1jb3JlLmMgICAgICB8IDY5NCArKysrKysrKysrKysr KysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9jZG4tZHAtY29yZS5oICAg ICAgfCAxMDggKysrKysKIGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9jZG4tZHAtcmVnLmMgICAg ICAgfCA3MTcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL3Jv Y2tjaGlwL2Nkbi1kcC1yZWcuaCAgICAgICB8IDQwNCArKysrKysrKysrKysrKysrCiBkcml2ZXJz L2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3ZvcC5jIHwgICA2ICstCiBkcml2ZXJzL2dw dS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3ZvcC5oIHwgICAyICsKIGRyaXZlcnMvZ3B1L2Ry bS9yb2NrY2hpcC9yb2NrY2hpcF92b3BfcmVnLmMgfCAgIDIgKwogOSBmaWxlcyBjaGFuZ2VkLCAx OTQyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2dwdS9kcm0vcm9ja2NoaXAvY2RuLWRwLWNvcmUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9jZG4tZHAtY29yZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2Nkbi1kcC1yZWcuYwogY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9jZG4tZHAtcmVnLmgKCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vcm9ja2NoaXAvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9L Y29uZmlnCmluZGV4IGQzMGJkYzMuLjIwZGE5YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9yb2NrY2hpcC9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9LY29uZmln CkBAIC0yNSw2ICsyNSwxNSBAQCBjb25maWcgUk9DS0NISVBfQU5BTE9HSVhfRFAKIAkgIGZvciB0 aGUgQW5hbG9naXggQ29yZSBEUCBkcml2ZXIuIElmIHlvdSB3YW50IHRvIGVuYWJsZSBEUAogCSAg b24gUkszMjg4IGJhc2VkIFNvQywgeW91IHNob3VsZCBzZWxldCB0aGlzIG9wdGlvbi4KIAorY29u ZmlnIFJPQ0tDSElQX0NETl9EUAorICAgICAgICB0cmlzdGF0ZSAiUm9ja2NoaXAgY2RuIERQIgor ICAgICAgICBkZXBlbmRzIG9uIERSTV9ST0NLQ0hJUAorICAgICAgICBoZWxwCisJICBUaGlzIHNl bGVjdHMgc3VwcG9ydCBmb3IgUm9ja2NoaXAgU29DIHNwZWNpZmljIGV4dGVuc2lvbnMKKwkgIGZv ciB0aGUgY2RuIERwIGRyaXZlci4gSWYgeW91IHdhbnQgdG8gZW5hYmxlIERwIG9uCisJICBSSzMz OTkgYmFzZWQgU29DLCB5b3Ugc2hvdWxkIHNlbGV0IHRoaXMKKwkgIG9wdGlvbi4KKwogY29uZmln IFJPQ0tDSElQX0RXX0hETUkKICAgICAgICAgdHJpc3RhdGUgIlJvY2tjaGlwIHNwZWNpZmljIGV4 dGVuc2lvbnMgZm9yIFN5bm9wc3lzIERXIEhETUkiCiAgICAgICAgIGRlcGVuZHMgb24gRFJNX1JP Q0tDSElQCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvTWFrZWZpbGUgYi9k cml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvTWFrZWZpbGUKaW5kZXggMDVkMDcxMy4uYWJkZWNkNSAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL01ha2VmaWxlCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9yb2NrY2hpcC9NYWtlZmlsZQpAQCAtNyw2ICs3LDcgQEAgcm9ja2NoaXBkcm0t eSA6PSByb2NrY2hpcF9kcm1fZHJ2Lm8gcm9ja2NoaXBfZHJtX2ZiLm8gXAogcm9ja2NoaXBkcm0t JChDT05GSUdfRFJNX0ZCREVWX0VNVUxBVElPTikgKz0gcm9ja2NoaXBfZHJtX2ZiZGV2Lm8KIAog b2JqLSQoQ09ORklHX1JPQ0tDSElQX0FOQUxPR0lYX0RQKSArPSBhbmFsb2dpeF9kcC1yb2NrY2hp cC5vCitvYmotJChDT05GSUdfUk9DS0NISVBfQ0ROX0RQKSArPSBjZG4tZHAtY29yZS5vIGNkbi1k cC1yZWcubwogb2JqLSQoQ09ORklHX1JPQ0tDSElQX0RXX0hETUkpICs9IGR3X2hkbWktcm9ja2No aXAubwogb2JqLSQoQ09ORklHX1JPQ0tDSElQX0RXX01JUElfRFNJKSArPSBkdy1taXBpLWRzaS5v CiBvYmotJChDT05GSUdfUk9DS0NISVBfSU5OT19IRE1JKSArPSBpbm5vX2hkbWkubwpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2Nkbi1kcC1jb3JlLmMgYi9kcml2ZXJzL2dw dS9kcm0vcm9ja2NoaXAvY2RuLWRwLWNvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi40ZTdmMDM2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tj aGlwL2Nkbi1kcC1jb3JlLmMKQEAgLTAsMCArMSw2OTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp IEZ1emhvdSBSb2NrY2hpcCBFbGVjdHJvbmljcyBDby5MdGQKKyAqIEF1dGhvcjogQ2hyaXMgWmhv bmcgPHp5d0Byb2NrLWNoaXBzLmNvbT4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2Vk IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZl cnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFu ZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9z ZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxkcm0v ZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgorI2luY2x1ZGUgPGRy bS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2RwX2hlbHBlci5oPgorI2lu Y2x1ZGUgPGRybS9kcm1fZWRpZC5oPgorI2luY2x1ZGUgPGRybS9kcm1fb2YuaD4KKworI2luY2x1 ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBvbmVudC5oPgorI2luY2x1ZGUg PGxpbnV4L2V4dGNvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8 bGludXgvcmVnbWFwLmg+CisjaW5jbHVkZSA8bGludXgvcmVzZXQuaD4KKyNpbmNsdWRlIDxsaW51 eC9tZmQvc3lzY29uLmg+CisjaW5jbHVkZSA8bGludXgvcGh5L3BoeS1yb2NrY2hpcC10eXBlYy5o PgorCisjaW5jbHVkZSA8c291bmQvaGRtaS1jb2RlYy5oPgorCisjaW5jbHVkZSA8dmlkZW8vb2Zf dmlkZW9tb2RlLmg+CisjaW5jbHVkZSA8dmlkZW8vdmlkZW9tb2RlLmg+CisKKyNpbmNsdWRlICJj ZG4tZHAtcmVnLmgiCisjaW5jbHVkZSAiY2RuLWRwLWNvcmUuaCIKKyNpbmNsdWRlICJyb2NrY2hp cF9kcm1fdm9wLmgiCisKKyNkZWZpbmUgY29ubmVjdG9yX3RvX2RwKGMpIFwKKwkJY29udGFpbmVy X29mKGMsIHN0cnVjdCBjZG5fZHBfZGV2aWNlLCBjb25uZWN0b3IpCisKKyNkZWZpbmUgZW5jb2Rl cl90b19kcChjKSBcCisJCWNvbnRhaW5lcl9vZihjLCBzdHJ1Y3QgY2RuX2RwX2RldmljZSwgZW5j b2RlcikKKworLyogZHAgZ3JmIHJlZ2lzdGVyIG9mZnNldCAqLworI2RlZmluZSBEUF9WT1BfU0VM CQkweDYyMjQKKyNkZWZpbmUgRFBfU0VMX1ZPUF9MSVQJCUJJVCgxMikKKyNkZWZpbmUgRFBfQ0xL X1JBVEUJCTIwMDAwMDAwMAorI2RlZmluZSBXQUlUX0hQRF9TVEFCTEUJCTEwMDAKKworc3RhdGlj IGludCBjZG5fZHBfY2xrX2VuYWJsZShzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHApCit7CisJaW50 IHJldDsKKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShkcC0+cGNsayk7CisJaWYgKHJldCA8 IDApIHsKKwkJZGV2X2VycihkcC0+ZGV2LCAiY2Fubm90IGVuYWJsZSBkcCBwY2xrICVkXG4iLCBy ZXQpOworCQlnb3RvIGVycl9wY2xrOworCX0KKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShk cC0+Y29yZV9jbGspOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZHAtPmRldiwgImNhbm5v dCBlbmFibGUgY29yZV9jbGsgJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2NvcmVfY2xrOworCX0K KworCXJldCA9IGNsa19zZXRfcmF0ZShkcC0+Y29yZV9jbGssIERQX0NMS19SQVRFKTsKKwlpZiAo cmV0IDwgMCkgeworCQlkZXZfZXJyKGRwLT5kZXYsICJjYW5ub3Qgc2V0IGRwIGNvcmUgY2xrIHRv ICVkICVkXG4iLAorCQkJRFBfQ0xLX1JBVEUsIHJldCk7CisJCWdvdG8gZXJyX3NldF9yYXRlOwor CX0KKworCS8qIG5vdGljZSBmdyB0aGUgY2xrIGZyZXEgdmFsdWUgKi8KKwljZG5fZHBfc2V0X2Z3 X2NsayhkcCwgRFBfQ0xLX1JBVEUpOworCisJcmV0dXJuIDA7CisKK2Vycl9zZXRfcmF0ZToKKwlj bGtfZGlzYWJsZV91bnByZXBhcmUoZHAtPmNvcmVfY2xrKTsKK2Vycl9jb3JlX2NsazoKKwljbGtf ZGlzYWJsZV91bnByZXBhcmUoZHAtPnBjbGspOworZXJyX3BjbGs6CisJcmV0dXJuIHJldDsKK30K Kworc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMKK2Nkbl9kcF9jb25uZWN0b3JfZGV0 ZWN0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIGJvb2wgZm9yY2UpCit7CisJc3Ry dWN0IGNkbl9kcF9kZXZpY2UgKmRwID0gY29ubmVjdG9yX3RvX2RwKGNvbm5lY3Rvcik7CisKKwly ZXR1cm4gZHAtPmhwZF9zdGF0dXMgPyBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZCA6CisJCQkJ Y29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7Cit9CisKK3N0YXRpYyB2b2lkIGNkbl9kcF9j b25uZWN0b3JfZGVzdHJveShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCWRy bV9jb25uZWN0b3JfdW5yZWdpc3Rlcihjb25uZWN0b3IpOworCWRybV9jb25uZWN0b3JfY2xlYW51 cChjb25uZWN0b3IpOworfQorCitzdGF0aWMgc3RydWN0IGRybV9jb25uZWN0b3JfZnVuY3MgY2Ru X2RwX2F0b21pY19jb25uZWN0b3JfZnVuY3MgPSB7CisJLmRwbXMgPSBkcm1fYXRvbWljX2hlbHBl cl9jb25uZWN0b3JfZHBtcywKKwkuZGV0ZWN0ID0gY2RuX2RwX2Nvbm5lY3Rvcl9kZXRlY3QsCisJ LmRlc3Ryb3kgPSBjZG5fZHBfY29ubmVjdG9yX2Rlc3Ryb3ksCisJLmZpbGxfbW9kZXMgPSBkcm1f aGVscGVyX3Byb2JlX3NpbmdsZV9jb25uZWN0b3JfbW9kZXMsCisJLnJlc2V0ID0gZHJtX2F0b21p Y19oZWxwZXJfY29ubmVjdG9yX3Jlc2V0LAorCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHJt X2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZSwKKwkuYXRvbWljX2Rlc3Ry b3lfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZGVzdHJveV9zdGF0ZSwKK307 CisKK3N0YXRpYyBpbnQgY2RuX2RwX2Nvbm5lY3Rvcl9nZXRfbW9kZXMoc3RydWN0IGRybV9jb25u ZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAgPSBjb25uZWN0 b3JfdG9fZHAoY29ubmVjdG9yKTsKKwlzdHJ1Y3QgZWRpZCAqZWRpZDsKKworCWlmICghZHAtPmZ3 X2xvYWRlZCkKKwkJcmV0dXJuIDA7CisKKwllZGlkID0gZHJtX2RvX2dldF9lZGlkKGNvbm5lY3Rv ciwgY2RuX2RwX2dldF9lZGlkX2Jsb2NrLCBkcCk7CisJaWYgKGVkaWQpIHsKKwkJZGV2X2RiZyhk cC0+ZGV2LCAiZ290IGVkaWQ6IHdpZHRoWyVkXSB4IGhlaWdodFslZF1cbiIsCisJCQllZGlkLT53 aWR0aF9jbSwgZWRpZC0+aGVpZ2h0X2NtKTsKKworCQlkcC0+c2lua19oYXNfYXVkaW8gPSBkcm1f ZGV0ZWN0X21vbml0b3JfYXVkaW8oZWRpZCk7CisJCWRybV9tb2RlX2Nvbm5lY3Rvcl91cGRhdGVf ZWRpZF9wcm9wZXJ0eShjb25uZWN0b3IsIGVkaWQpOworCQlkcm1fYWRkX2VkaWRfbW9kZXMoY29u bmVjdG9yLCBlZGlkKTsKKwkJLyogU3RvcmUgdGhlIEVMRCAqLworCQlkcm1fZWRpZF90b19lbGQo Y29ubmVjdG9yLCBlZGlkKTsKKwkJa2ZyZWUoZWRpZCk7CisJfSBlbHNlIHsKKwkJZGV2X2RiZyhk cC0+ZGV2LCAiZmFpbGVkIHRvIGdldCBlZGlkXG4iKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIHN0cnVjdCBkcm1fZW5jb2RlciAqCisJY2RuX2RwX2Nvbm5lY3Rvcl9iZXN0X2VuY29k ZXIoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgY2RuX2RwX2Rl dmljZSAqZHAgPSBjb25uZWN0b3JfdG9fZHAoY29ubmVjdG9yKTsKKworCXJldHVybiAmZHAtPmVu Y29kZXI7Cit9CisKK3N0YXRpYyBpbnQgY2RuX2RwX2Nvbm5lY3Rvcl9tb2RlX3ZhbGlkKHN0cnVj dCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCisJCQkJICAgICAgIHN0cnVjdCBkcm1fZGlzcGxh eV9tb2RlICptb2RlKQoreworCXN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCA9IGNvbm5lY3Rvcl90 b19kcChjb25uZWN0b3IpOworCXN0cnVjdCBkcm1fZGlzcGxheV9pbmZvICpkaXNwbGF5X2luZm8g PSAmZHAtPmNvbm5lY3Rvci5kaXNwbGF5X2luZm87CisJbG9uZyByZXF1ZXN0ZWQgPSBtb2RlLT5j bG9jayAqIGRpc3BsYXlfaW5mby0+YnBjICogMyAvIDEwMDA7CisJbG9uZyBhY3R1YWwsIHJhdGU7 CisKKwlyYXRlID0gZHJtX2RwX2J3X2NvZGVfdG9fbGlua19yYXRlKGRwLT5saW5rLnJhdGUpOwor CWFjdHVhbCA9IHJhdGUgKiBkcC0+bGluay5udW1fbGFuZXMgLyAxMDA7CisKKwkvKiBlZmZpY2ll bmN5IGlzIGFib3V0IDAuOCAqLworCWFjdHVhbCA9IGFjdHVhbCAqIDggLyAxMDsKKworCWlmIChy ZXF1ZXN0ZWQgPiBhY3R1YWwpIHsKKwkJZGV2X2RiZyhkcC0+ZGV2LCAicmVxdWVzdGVkPSVsZCwg YWN0dWFsPSVsZCwgY2xvY2s9JWQsIGJwYz0gJWRcbiIsCisJCQlyZXF1ZXN0ZWQsIGFjdHVhbCwg bW9kZS0+Y2xvY2ssIGRpc3BsYXlfaW5mby0+YnBjKTsKKwkJcmV0dXJuIE1PREVfSF9JTExFR0FM OworCX0KKworCXJldHVybiBNT0RFX09LOworfQorCitzdGF0aWMgc3RydWN0IGRybV9jb25uZWN0 b3JfaGVscGVyX2Z1bmNzIGNkbl9kcF9jb25uZWN0b3JfaGVscGVyX2Z1bmNzID0geworCS5nZXRf bW9kZXMgPSBjZG5fZHBfY29ubmVjdG9yX2dldF9tb2RlcywKKwkuYmVzdF9lbmNvZGVyID0gY2Ru X2RwX2Nvbm5lY3Rvcl9iZXN0X2VuY29kZXIsCisJLm1vZGVfdmFsaWQgPSBjZG5fZHBfY29ubmVj dG9yX21vZGVfdmFsaWQsCit9OworCitzdGF0aWMgdm9pZCBjZG5fZHBfY29tbWl0KHN0cnVjdCBk cm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAgPSBlbmNv ZGVyX3RvX2RwKGVuY29kZXIpOworCisJaWYgKGNkbl9kcF9zZXRfdmlkZW9fc3RhdHVzKGRwLCBD T05UUk9MX1ZJREVPX0lETEUpKQorCQlyZXR1cm47CisKKwlpZiAoY2RuX2RwX2NvbmZpZ192aWRl byhkcCkpIHsKKwkJZGV2X2VycihkcC0+ZGV2LCAidW5hYmxlIHRvIGNvbmZpZyB2aWRlb1xuIik7 CisJCXJldHVybjsKKwl9CisKKwlpZiAoY2RuX2RwX3NldF92aWRlb19zdGF0dXMoZHAsIENPTlRS T0xfVklERU9fVkFMSUQpKQorCQlyZXR1cm47CisKKwlkcC0+ZHBtc19tb2RlID0gRFJNX01PREVf RFBNU19PTjsKK30KKworc3RhdGljIHZvaWQgY2RuX2RwX2VuY29kZXJfbW9kZV9zZXQoc3RydWN0 IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJCSAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAq bW9kZSwKKwkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkKQoreworCXN0 cnVjdCBjZG5fZHBfZGV2aWNlICpkcCA9IGVuY29kZXJfdG9fZHAoZW5jb2Rlcik7CisJc3RydWN0 IGRybV9kaXNwbGF5X2luZm8gKmRpc3BsYXlfaW5mbyA9ICZkcC0+Y29ubmVjdG9yLmRpc3BsYXlf aW5mbzsKKwlzdHJ1Y3Qgcm9ja2NoaXBfY3J0Y19zdGF0ZSAqc3RhdGU7CisJc3RydWN0IHZpZGVv X2luZm8gKnZpZGVvID0gJmRwLT52aWRlb19pbmZvOworCWludCByZXQsIHZhbDsKKworCXN3aXRj aCAoZGlzcGxheV9pbmZvLT5icGMpIHsKKwljYXNlIDE2OgorCWNhc2UgMTI6CisJY2FzZSAxMDoK KwkJdmlkZW8tPmNvbG9yX2RlcHRoID0gMTA7CisJCWJyZWFrOworCWNhc2UgNjoKKwkJdmlkZW8t PmNvbG9yX2RlcHRoID0gNjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdmlkZW8tPmNvbG9yX2Rl cHRoID0gODsKKwkJYnJlYWs7CisJfQorCisJdmlkZW8tPmNvbG9yX2ZtdCA9IFBYTF9SR0I7CisK Kwl2aWRlby0+dl9zeW5jX3BvbGFyaXR5ID0gISEobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFH X05WU1lOQyk7CisJdmlkZW8tPmhfc3luY19wb2xhcml0eSA9ICEhKG1vZGUtPmZsYWdzICYgRFJN X01PREVfRkxBR19OSFNZTkMpOworCisJcmV0ID0gZHJtX29mX2VuY29kZXJfYWN0aXZlX2VuZHBv aW50X2lkKGRwLT5kZXYtPm9mX25vZGUsIGVuY29kZXIpOworCWlmIChyZXQgPCAwKSB7CisJCWRl dl9lcnIoZHAtPmRldiwgIkNvdWxkIG5vdCBnZXQgdm9wIGlkLCAlZCIsIHJldCk7CisJCXJldHVy bjsKKwl9CisKKwlzdGF0ZSA9IHRvX3JvY2tjaGlwX2NydGNfc3RhdGUoZW5jb2Rlci0+Y3J0Yy0+ c3RhdGUpOworCWlmIChyZXQpIHsKKwkJdmFsID0gRFBfU0VMX1ZPUF9MSVQgfCAoRFBfU0VMX1ZP UF9MSVQgPDwgMTYpOworCQlzdGF0ZS0+b3V0cHV0X21vZGUgPSBST0NLQ0hJUF9PVVRfTU9ERV9Q ODg4OworCX0gZWxzZSB7CisJCXZhbCA9IERQX1NFTF9WT1BfTElUIDw8IDE2OworCQlzdGF0ZS0+ b3V0cHV0X21vZGUgPSBST0NLQ0hJUF9PVVRfTU9ERV9BQUFBOworCX0KKwlyZXQgPSByZWdtYXBf d3JpdGUoZHAtPmdyZiwgRFBfVk9QX1NFTCwgdmFsKTsKKwlpZiAocmV0ICE9IDApCisJCWRldl9l cnIoZHAtPmRldiwgIkNvdWxkIG5vdCB3cml0ZSB0byBHUkY6ICVkXG4iLCByZXQpOworCisJbWVt Y3B5KCZkcC0+bW9kZSwgYWRqdXN0ZWQsIHNpemVvZigqbW9kZSkpOworfQorCitzdGF0aWMgdm9p ZCBjZG5fZHBfZW5jb2Rlcl9lbmFibGUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQorewor CXN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCA9IGVuY29kZXJfdG9fZHAoZW5jb2Rlcik7CisKKwlp ZiAoZHAtPmRwbXNfbW9kZSAhPSBEUk1fTU9ERV9EUE1TX09OKQorCQljZG5fZHBfY29tbWl0KGVu Y29kZXIpOworfQorCitzdGF0aWMgdm9pZCBjZG5fZHBfZW5jb2Rlcl9kaXNhYmxlKHN0cnVjdCBk cm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAgPSBlbmNv ZGVyX3RvX2RwKGVuY29kZXIpOworCisJaWYgKGRwLT5kcG1zX21vZGUgIT0gRFJNX01PREVfRFBN U19PRkYpIHsKKwkJY2RuX2RwX3NldF92aWRlb19zdGF0dXMoZHAsIENPTlRST0xfVklERU9fSURM RSk7CisJCWRwLT5kcG1zX21vZGUgPSBEUk1fTU9ERV9EUE1TX09GRjsKKwl9Cit9CisKK3N0YXRp YyBpbnQKK2Nkbl9kcF9lbmNvZGVyX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2VuY29kZXIgKmVu Y29kZXIsCisJCQkgICAgc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQkJICAg IHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRlKQoreworCXN0cnVjdCByb2Nr Y2hpcF9jcnRjX3N0YXRlICpzID0gdG9fcm9ja2NoaXBfY3J0Y19zdGF0ZShjcnRjX3N0YXRlKTsK KworCXMtPm91dHB1dF9tb2RlID0gUk9DS0NISVBfT1VUX01PREVfQUFBQTsKKwlzLT5vdXRwdXRf dHlwZSA9IERSTV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9ydDsKKworCXJldHVybiAwOworfQor CitzdGF0aWMgc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcyBjZG5fZHBfZW5jb2Rlcl9o ZWxwZXJfZnVuY3MgPSB7CisJLm1vZGVfc2V0ID0gY2RuX2RwX2VuY29kZXJfbW9kZV9zZXQsCisJ LmVuYWJsZSA9IGNkbl9kcF9lbmNvZGVyX2VuYWJsZSwKKwkuZGlzYWJsZSA9IGNkbl9kcF9lbmNv ZGVyX2Rpc2FibGUsCisJLmF0b21pY19jaGVjayA9IGNkbl9kcF9lbmNvZGVyX2F0b21pY19jaGVj aywKK307CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2VuY29kZXJfZnVuY3MgY2RuX2RwX2VuY29kZXJf ZnVuY3MgPSB7CisJLmRlc3Ryb3kgPSBkcm1fZW5jb2Rlcl9jbGVhbnVwLAorfTsKKworc3RhdGlj IGludCBjZG5fZHBfZmlybXdhcmVfaW5pdChzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHApCit7CisJ aW50IHJldDsKKwljb25zdCB1MzIgKmlyYW1fZGF0YSwgKmRyYW1fZGF0YTsKKwljb25zdCBzdHJ1 Y3QgZmlybXdhcmUgKmZ3OworCWNvbnN0IHN0cnVjdCBjZG5fZmlybXdhcmVfaGVhZGVyICpoZHI7 CisKKwlpZiAoZHAtPmZ3X2xvYWRlZCkKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSByZXF1ZXN0X2Zp cm13YXJlKCZmdywgImNkbi9kcHR4LmJpbiIsIGRwLT5kZXYpOworCWlmIChyZXQgPCAwKSB7CisJ CWRldl9lcnIoZHAtPmRldiwgImZhaWxlZCB0byByZXF1ZXN0IGZpcm13YXJlICVkXG4iLCByZXQp OworCQlyZXR1cm4gcmV0OworCX0KKworCWhkciA9IChzdHJ1Y3QgY2RuX2Zpcm13YXJlX2hlYWRl ciAqKWZ3LT5kYXRhOworCWlmIChmdy0+c2l6ZSAhPSBsZTMyX3RvX2NwdShoZHItPnNpemVfYnl0 ZXMpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlyYW1fZGF0YSA9IChjb25zdCB1MzIgKikoZnct PmRhdGEgKyBoZHItPmhlYWRlcl9zaXplKTsKKwlkcmFtX2RhdGEgPSAoY29uc3QgdTMyICopKGZ3 LT5kYXRhICsgaGRyLT5oZWFkZXJfc2l6ZSArIGhkci0+aXJhbV9zaXplKTsKKworCXJldCA9IGNk bl9kcF9sb2FkX2Zpcm13YXJlKGRwLCBpcmFtX2RhdGEsIGhkci0+aXJhbV9zaXplLAorCQkJCSAg IGRyYW1fZGF0YSwgaGRyLT5kcmFtX3NpemUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisK KwlyZXQgPSBjZG5fZHBfYWN0aXZlKGRwLCB0cnVlKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIo ZHAtPmRldiwgImFjdGl2ZSB1Y3B1IGZhaWxlZDogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7 CisJfQorCisJcmV0dXJuIGNkbl9kcF9ldmVudF9jb25maWcoZHApOworfQorCitzdGF0aWMgaW50 IGNkbl9kcF9pbml0KHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCkKK3sKKwlzdHJ1Y3QgZGV2aWNl ICpkZXYgPSBkcC0+ZGV2OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkZXYtPm9mX25vZGU7 CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYp OworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCByZXQ7CisKKwlkcC0+Z3JmID0gc3lzY29u X3JlZ21hcF9sb29rdXBfYnlfcGhhbmRsZShucCwgInJvY2tjaGlwLGdyZiIpOworCWlmIChJU19F UlIoZHAtPmdyZikpIHsKKwkJZGV2X2VycihkZXYsICJjZG4tZHAgbmVlZHMgcm9ja2NoaXAsZ3Jm IHByb3BlcnR5XG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoZHAtPmdyZik7CisJfQorCisJZHAtPmly cSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGRwLT5pcnEgPCAwKSB7CisJCWRl dl9lcnIoZGV2LCAiY2RuLWRwIGNhbiBub3QgZ2V0IGlycVxuIik7CisJCXJldHVybiBkcC0+aXJx OworCX0KKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01F TSwgMCk7CisJZHAtPnJlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpOworCWlm IChJU19FUlIoZHAtPnJlZ3MpKSB7CisJCWRldl9lcnIoZGV2LCAiaW9yZW1hcCByZWcgZmFpbGVk XG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoZHAtPnJlZ3MpOworCX0KKworCWRwLT5jb3JlX2NsayA9 IGRldm1fY2xrX2dldChkZXYsICJjb3JlX2NsayIpOworCWlmIChJU19FUlIoZHAtPmNvcmVfY2xr KSkgeworCQlkZXZfZXJyKGRldiwgImNhbm5vdCBnZXQgY29yZV9jbGtfZHBcbiIpOworCQlyZXR1 cm4gUFRSX0VSUihkcC0+Y29yZV9jbGspOworCX0KKworCWRwLT5wY2xrID0gZGV2bV9jbGtfZ2V0 KGRldiwgInBjbGsiKTsKKwlpZiAoSVNfRVJSKGRwLT5wY2xrKSkgeworCQlkZXZfZXJyKGRldiwg ImNhbm5vdCBnZXQgcGNsa1xuIik7CisJCXJldHVybiBQVFJfRVJSKGRwLT5wY2xrKTsKKwl9CisK KwlkcC0+c3BkaWZfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgInNwZGlmIik7CisJaWYgKElTX0VS UihkcC0+c3BkaWZfY2xrKSkgeworCQlkZXZfZXJyKGRldiwgImNhbm5vdCBnZXQgc3BkaWZfY2xr XG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoZHAtPnNwZGlmX2Nsayk7CisJfQorCisJZHAtPmRwbXNf bW9kZSA9IERSTV9NT0RFX0RQTVNfT0ZGOworCisJcmV0ID0gY2RuX2RwX2Nsa19lbmFibGUoZHAp OworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJZHBfY2xvY2tfcmVzZXRfc2VxKGRw KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNkbl9kcF9hdWRpb19od19wYXJhbXMo c3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IGhkbWlfY29kZWNfZGFpZm10ICpkYWlm bXQsCisJCQkJICBzdHJ1Y3QgaGRtaV9jb2RlY19wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3Qg Y2RuX2RwX2RldmljZSAqZHAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgcmV0OworCXN0 cnVjdCBhdWRpb19pbmZvIGF1ZGlvID0geworCQkuc2FtcGxlX3dpZHRoID0gcGFyYW1zLT5zYW1w bGVfd2lkdGgsCisJCS5zYW1wbGVfcmF0ZSA9IHBhcmFtcy0+c2FtcGxlX3JhdGUsCisJCS5jaGFu bmVscyA9IHBhcmFtcy0+Y2hhbm5lbHMsCisJfTsKKworCWlmICghZHAtPmVuY29kZXIuY3J0YykK KwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzd2l0Y2ggKGRhaWZtdC0+Zm10KSB7CisJY2FzZSBIRE1J X0kyUzoKKwkJYXVkaW8uZm9ybWF0ID0gQUZNVF9JMlM7CisJCWJyZWFrOworCWNhc2UgSERNSV9T UERJRjoKKwkJYXVkaW8uZm9ybWF0ID0gQUZNVF9TUERJRjsKKwkJYnJlYWs7CisJZGVmYXVsdDoK KwkJZGV2X2VycihkZXYsICIlczogSW52YWxpZCBmb3JtYXQgJWRcbiIsIF9fZnVuY19fLCBkYWlm bXQtPmZtdCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldCA9IGNkbl9kcF9hdWRpb19j b25maWdfc2V0KGRwLCAmYXVkaW8pOworCWlmICghcmV0KQorCQlkcC0+YXVkaW9faW5mbyA9IGF1 ZGlvOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgY2RuX2RwX2F1ZGlvX3NodXRk b3duKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAgPSBk ZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgcmV0ID0gY2RuX2RwX2F1ZGlvX3N0b3AoZHAsICZk cC0+YXVkaW9faW5mbyk7CisKKwlpZiAoIXJldCkKKwkJZHAtPmF1ZGlvX2luZm8uZm9ybWF0ID0g QUZNVF9VTlVTRUQ7Cit9CisKK3N0YXRpYyBpbnQgY2RuX2RwX2F1ZGlvX2RpZ2l0YWxfbXV0ZShz dHJ1Y3QgZGV2aWNlICpkZXYsIGJvb2wgZW5hYmxlKQoreworCXN0cnVjdCBjZG5fZHBfZGV2aWNl ICpkcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmV0dXJuIGNkbl9kcF9hdWRpb19tdXRl KGRwLCBlbmFibGUpOworfQorCitzdGF0aWMgaW50IGNkbl9kcF9hdWRpb19nZXRfZWxkKHN0cnVj dCBkZXZpY2UgKmRldiwgdWludDhfdCAqYnVmLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBjZG5f ZHBfZGV2aWNlICpkcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBkcm1fbW9kZV9j b25maWcgKmNvbmZpZyA9ICZkcC0+ZW5jb2Rlci5kZXYtPm1vZGVfY29uZmlnOworCXN0cnVjdCBk cm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisJaW50IHJldCA9IC1FTk9ERVY7CisKKwltdXRleF9s b2NrKCZjb25maWctPm11dGV4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm5lY3RvciwgJmNv bmZpZy0+Y29ubmVjdG9yX2xpc3QsIGhlYWQpIHsKKwkJaWYgKCZkcC0+ZW5jb2RlciA9PSBjb25u ZWN0b3ItPmVuY29kZXIpIHsKKwkJCW1lbWNweShidWYsIGNvbm5lY3Rvci0+ZWxkLAorCQkJICAg ICAgIG1pbihzaXplb2YoY29ubmVjdG9yLT5lbGQpLCBsZW4pKTsKKwkJCXJldCA9IDA7CisJCX0K Kwl9CisJbXV0ZXhfdW5sb2NrKCZjb25maWctPm11dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisK K3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRtaV9jb2RlY19vcHMgYXVkaW9fY29kZWNfb3BzID0gewor CS5od19wYXJhbXMgPSBjZG5fZHBfYXVkaW9faHdfcGFyYW1zLAorCS5hdWRpb19zaHV0ZG93biA9 IGNkbl9kcF9hdWRpb19zaHV0ZG93biwKKwkuZGlnaXRhbF9tdXRlID0gY2RuX2RwX2F1ZGlvX2Rp Z2l0YWxfbXV0ZSwKKwkuZ2V0X2VsZCA9IGNkbl9kcF9hdWRpb19nZXRfZWxkLAorfTsKKworc3Rh dGljIGludCBjZG5fZHBfYXVkaW9fY29kZWNfaW5pdChzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAs CisJCQkJICAgc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBoZG1pX2NvZGVjX3BkYXRh IGNvZGVjX2RhdGEgPSB7CisJCS5pMnMgPSAxLAorCQkuc3BkaWYgPSAxLAorCQkub3BzID0gJmF1 ZGlvX2NvZGVjX29wcywKKwkJLm1heF9pMnNfY2hhbm5lbHMgPSA4LAorCX07CisKKwlkcC0+YXVk aW9fcGRldiA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9kYXRhKAorCQkJIGRldiwgSERNSV9D T0RFQ19EUlZfTkFNRSwgUExBVEZPUk1fREVWSURfQVVUTywKKwkJCSAmY29kZWNfZGF0YSwgc2l6 ZW9mKGNvZGVjX2RhdGEpKTsKKworCXJldHVybiBQVFJfRVJSX09SX1pFUk8oZHAtPmF1ZGlvX3Bk ZXYpOworfQorCitzdGF0aWMgaW50IGNkbl9kcF9wZF9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxv Y2sgKm5iLAorCQkJICAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHJpdikKK3sKKwlzdHJ1 Y3QgY2RuX2RwX2RldmljZSAqZHA7CisJc3RydWN0IGV4dGNvbl9kZXYgKmVkZXYgPSBwcml2Owor CWludCB2YWx1ZSA9IGVkZXYtPnN0YXRlOworCXU4IG1hcDsKKworCWRwID0gY29udGFpbmVyX29m KG5iLCBzdHJ1Y3QgY2RuX2RwX2RldmljZSwgZXZlbnRfbmIpOworCisJbWFwID0gR0VUX1BJTl9N QVAodmFsdWUpOworCisJLyoKKwkgKiBpZiB0aGUgb2xkIHN0YXRlIGlzIG5vdCBwbHVnZ2VkLCBh bmQgdGhlIG1hcCBpcyAwLCB0aGUgZGV2aWNlIGlzCisJICogY2VydGFpbmx5IG5vdCBEUC4KKwkg Ki8KKwlpZiAoIW1hcCAmJiAhZHAtPnBsdWdnZWQpCisJCXJldHVybiAwOworCisJZHAtPnBsdWdn ZWQgPSBHRVRfUExVR0dFRCh2YWx1ZSk7CisJZHAtPmZsaXAgPSBHRVRfRkxJUCh2YWx1ZSk7CisK KwlpZiAobWFwICYgKFBJTl9NQVBfQiB8IFBJTl9NQVBfRCB8IFBJTl9NQVBfRikpCisJCWRwLT5j YXBfbGFuZXMgPSAyOworCWVsc2UKKwkJZHAtPmNhcF9sYW5lcyA9IDQ7CisKKwlzY2hlZHVsZV9k ZWxheWVkX3dvcmsoJmRwLT5ldmVudF93cSwgbXNlY3NfdG9famlmZmllcyhXQUlUX0hQRF9TVEFC TEUpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjZG5fZHBfcGRfZXZlbnRfd3Eo c3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcDsK KwlpbnQgcmV0OworCisJZHAgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGNkbl9kcF9kZXZp Y2UsIGV2ZW50X3dxLndvcmspOworCisJaWYgKGNkbl9kcF9maXJtd2FyZV9pbml0KGRwKSkKKwkJ cmV0dXJuOworCisJcmV0ID0gY2RuX2RwX2dldF9ocGRfc3RhdHVzKGRwKTsKKwlpZiAocmV0IDw9 IDApIHsKKwkJLyogcmVhZCBocGQgc3RhdHVzIGZhaWxlZCwgb3IgdGhlIGhwZCBkb2VzIG5vdCBl eGlzdC4gKi8KKwkJZHAtPmhwZF9zdGF0dXMgPSBmYWxzZTsKKwkJZHJtX2hlbHBlcl9ocGRfaXJx X2V2ZW50KGRwLT5kcm1fZGV2KTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogU2V0IHRoZSBj YXBhYmlsaXR5IGFuZCBzdGFydCB0aGUgdHJhaW5pbmcgcHJvY2VzcyBvbmNlCisJICogdGhlIGhw ZCBpcyBkZXRlY3RlZC4KKwkgKi8KKwlyZXQgPSBjZG5fZHBfc2V0X2hvc3RfY2FwKGRwKTsKKwlp ZiAocmV0KSB7CisJCWRldl9lcnIoZHAtPmRldiwgInNldCBob3N0IGNhcGFiaWxpdGllcyBmYWls ZWRcbiIpOworCQlyZXR1cm47CisJfQorCisJcmV0ID0gY2RuX2RwX3RyYWluaW5nX3N0YXJ0KGRw KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZHAtPmRldiwgImh3IGx0IGVycjolZFxuIiwgcmV0 KTsKKwkJcmV0dXJuOworCX0KKworCXJldCA9IGNkbl9kcF9nZXRfbHRfc3RhdHVzKGRwKTsKKwlp ZiAocmV0KSB7CisJCWRldl9lcnIoZHAtPmRldiwgImh3IGx0IGdldCBzdGF0dXMgZmFpbGVkXG4i KTsKKwkJcmV0dXJuOworCX0KKworCWRldl9pbmZvKGRwLT5kZXYsICJyYXRlOiVkLCBsYW5lczol ZFxuIiwKKwkJIGRwLT5saW5rLnJhdGUsIGRwLT5saW5rLm51bV9sYW5lcyk7CisKKwlkcC0+aHBk X3N0YXR1cyA9IHRydWU7CisJZHJtX2hlbHBlcl9ocGRfaXJxX2V2ZW50KGRwLT5kcm1fZGV2KTsK K30KKworc3RhdGljIGludCBjZG5fZHBfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBk ZXZpY2UgKm1hc3RlciwKKwkJICAgICAgIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGNkbl9kcF9k ZXZpY2UgKmRwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGRybV9lbmNvZGVyICpl bmNvZGVyOworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisJc3RydWN0IGRybV9k ZXZpY2UgKmRybV9kZXYgPSBkYXRhOworCWludCByZXQ7CisKKwlyZXQgPSBjZG5fZHBfaW5pdChk cCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlkcC0+ZHJtX2RldiA9IGRybV9k ZXY7CisKKwllbmNvZGVyID0gJmRwLT5lbmNvZGVyOworCisJZW5jb2Rlci0+cG9zc2libGVfY3J0 Y3MgPSBkcm1fb2ZfZmluZF9wb3NzaWJsZV9jcnRjcyhkcm1fZGV2LAorCQkJCQkJCSAgICAgZGV2 LT5vZl9ub2RlKTsKKwlEUk1fREVCVUdfS01TKCJwb3NzaWJsZV9jcnRjcyA9IDB4JXhcbiIsIGVu Y29kZXItPnBvc3NpYmxlX2NydGNzKTsKKworCXJldCA9IGRybV9lbmNvZGVyX2luaXQoZHJtX2Rl diwgZW5jb2RlciwgJmNkbl9kcF9lbmNvZGVyX2Z1bmNzLAorCQkJICAgICAgIERSTV9NT0RFX0VO Q09ERVJfVE1EUywgTlVMTCk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBp bml0aWFsaXplIGVuY29kZXIgd2l0aCBkcm1cbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRy bV9lbmNvZGVyX2hlbHBlcl9hZGQoZW5jb2RlciwgJmNkbl9kcF9lbmNvZGVyX2hlbHBlcl9mdW5j cyk7CisKKwljb25uZWN0b3IgPSAmZHAtPmNvbm5lY3RvcjsKKwljb25uZWN0b3ItPnBvbGxlZCA9 IERSTV9DT05ORUNUT1JfUE9MTF9IUEQ7CisJY29ubmVjdG9yLT5kcG1zID0gRFJNX01PREVfRFBN U19PRkY7CisKKwlyZXQgPSBkcm1fY29ubmVjdG9yX2luaXQoZHJtX2RldiwgY29ubmVjdG9yLAor CQkJCSAmY2RuX2RwX2F0b21pY19jb25uZWN0b3JfZnVuY3MsCisJCQkJIERSTV9NT0RFX0NPTk5F Q1RPUl9EaXNwbGF5UG9ydCk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBp bml0aWFsaXplIGNvbm5lY3RvciB3aXRoIGRybVxuIik7CisJCWdvdG8gZXJyX2ZyZWVfZW5jb2Rl cjsKKwl9CisKKwlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoY29ubmVjdG9yLCAmY2RuX2RwX2Nv bm5lY3Rvcl9oZWxwZXJfZnVuY3MpOworCisJcmV0ID0gZHJtX21vZGVfY29ubmVjdG9yX2F0dGFj aF9lbmNvZGVyKGNvbm5lY3RvciwgZW5jb2Rlcik7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1Io ImZhaWxlZCB0byBhdHRhY2ggY29ubmVjdG9yIGFuZCBlbmNvZGVyXG4iKTsKKwkJZ290byBlcnJf ZnJlZV9jb25uZWN0b3I7CisJfQorCisJY2RuX2RwX2F1ZGlvX2NvZGVjX2luaXQoZHAsIGRldik7 CisKKwlkcC0+ZXZlbnRfbmIubm90aWZpZXJfY2FsbCA9IGNkbl9kcF9wZF9ldmVudDsKKwlJTklU X0RFTEFZRURfV09SSygmZHAtPmV2ZW50X3dxLCBjZG5fZHBfcGRfZXZlbnRfd3EpOworCXJldCA9 IGV4dGNvbl9yZWdpc3Rlcl9ub3RpZmllcihkcC0+ZXh0Y29uLCBFWFRDT05fVVNCLAorCQkJCSAg ICAgICAmZHAtPmV2ZW50X25iKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAicmVnaXRz dGVyIG5vdGlmZXIgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsK KworZXJyX2ZyZWVfY29ubmVjdG9yOgorCWRybV9jb25uZWN0b3JfY2xlYW51cChjb25uZWN0b3Ip OworZXJyX2ZyZWVfZW5jb2RlcjoKKwlkcm1fZW5jb2Rlcl9jbGVhbnVwKGVuY29kZXIpOworCXJl dHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGNkbl9kcF91bmJpbmQoc3RydWN0IGRldmljZSAq ZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGNkbl9k cF9kZXZpY2UgKmRwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGRybV9lbmNvZGVy ICplbmNvZGVyID0gJmRwLT5lbmNvZGVyOworCisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIo ZHAtPmF1ZGlvX3BkZXYpOworCWNkbl9kcF9lbmNvZGVyX2Rpc2FibGUoZW5jb2Rlcik7CisJZW5j b2Rlci0+ZnVuY3MtPmRlc3Ryb3koZW5jb2Rlcik7CisJZHJtX2Nvbm5lY3Rvcl91bnJlZ2lzdGVy KCZkcC0+Y29ubmVjdG9yKTsKKwlkcm1fY29ubmVjdG9yX2NsZWFudXAoJmRwLT5jb25uZWN0b3Ip OworCWRybV9lbmNvZGVyX2NsZWFudXAoZW5jb2Rlcik7CisKKwlleHRjb25fdW5yZWdpc3Rlcl9u b3RpZmllcihkcC0+ZXh0Y29uLCBFWFRDT05fVVNCLAorCQkJCSAgICZkcC0+ZXZlbnRfbmIpOwor fQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbXBvbmVudF9vcHMgY2RuX2RwX2NvbXBvbmVudF9v cHMgPSB7CisJLmJpbmQgPSBjZG5fZHBfYmluZCwKKwkudW5iaW5kID0gY2RuX2RwX3VuYmluZCwK K307CisKK3N0YXRpYyBpbnQgY2RuX2RwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgY2RuX2Rw X2RldmljZSAqZHA7CisKKwlkcCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqZHApLCBHRlBf S0VSTkVMKTsKKwlpZiAoIWRwKQorCQlyZXR1cm4gLUVOT01FTTsKKwlkcC0+ZGV2ID0gZGV2Owor CisJZHAtPmV4dGNvbiA9IGV4dGNvbl9nZXRfZWRldl9ieV9waGFuZGxlKGRldiwgMCk7CisJaWYg KElTX0VSUihkcC0+ZXh0Y29uKSkgeworCQlpZiAoUFRSX0VSUihkcC0+ZXh0Y29uKSA9PSAtRVBS T0JFX0RFRkVSKQorCQkJcmV0dXJuIC1FUFJPQkVfREVGRVI7CisJCWRldl9lcnIoZGV2LCAiSW52 YWxpZCBvciBtaXNzaW5nIGV4dGNvblxuIik7CisJCXJldHVybiBQVFJfRVJSKGRwLT5leHRjb24p OworCX0KKworCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGRwKTsKKworCXJldHVybiBjb21wb25lbnRf YWRkKGRldiwgJmNkbl9kcF9jb21wb25lbnRfb3BzKTsKK30KKworc3RhdGljIGludCBjZG5fZHBf cmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJY29tcG9uZW50X2RlbCgm cGRldi0+ZGV2LCAmY2RuX2RwX2NvbXBvbmVudF9vcHMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGNkbl9kcF9kdF9pZHNbXSA9IHsKKwl7LmNv bXBhdGlibGUgPSAicm9ja2NoaXAsY2RuLWRwIix9LAorCXt9Cit9OworCitNT0RVTEVfREVWSUNF X1RBQkxFKG9mLCBjZG5fZHBfZHRfaWRzKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2 ZXIgY2RuX2RwX2RyaXZlciA9IHsKKwkucHJvYmUgPSBjZG5fZHBfcHJvYmUsCisJLnJlbW92ZSA9 IGNkbl9kcF9yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJICAgLm5hbWUgPSAiY2RuLWRwIiwKKwkJ ICAgLm93bmVyID0gVEhJU19NT0RVTEUsCisJCSAgIC5vZl9tYXRjaF90YWJsZSA9IG9mX21hdGNo X3B0cihjZG5fZHBfZHRfaWRzKSwKKwl9LAorfTsKKworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihj ZG5fZHBfZHJpdmVyKTsKKworTU9EVUxFX0FVVEhPUigiQ2hyaXMgWmhvbmcgPHp5d0Byb2NrLWNo aXBzLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiY2RuIERQIERyaXZlciIpOworTU9EVUxF X0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlw L2Nkbi1kcC1jb3JlLmggYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvY2RuLWRwLWNvcmUuaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTYzNTIwCi0tLSAvZGV2L251bGwK KysrIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2Nkbi1kcC1jb3JlLmgKQEAgLTAsMCArMSwx MDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQ2hyaXMgWmhvbmcgPHp5d0Byb2NrLWNo aXBzLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxNiBST0NLQ0hJUCwgSW5jLgorICoKKyAqIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIHByb2dyYW0g aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgorICovCisKKyNpZm5kZWYgX1JPQ0tDSElQX0VEUF9DT1JFX0gKKyNkZWZpbmUgX1JPQ0tD SElQX0VEUF9DT1JFX0gKKworI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8ZHJtL2Ry bV9jcnRjX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZHBfaGVscGVyLmg+CisjaW5jbHVk ZSA8ZHJtL2RybV9wYW5lbC5oPgorI2luY2x1ZGUgInJvY2tjaGlwX2RybV9kcnYuaCIKKyNpbmNs dWRlICJjZG4tZHAtcmVnLmgiCisKK2VudW0gQVVESU9fRk9STUFUIHsKKwlBRk1UX0kyUyA9IDAs CisJQUZNVF9TUERJRiA9IDEsCisJQUZNVF9VTlVTRUQsCit9OworCitzdHJ1Y3QgYXVkaW9faW5m byB7CisJZW51bSBBVURJT19GT1JNQVQgZm9ybWF0OworCWludCBzYW1wbGVfcmF0ZTsKKwlpbnQg Y2hhbm5lbHM7CisJaW50IHNhbXBsZV93aWR0aDsKK307CisKK3N0cnVjdCB2aWRlb19pbmZvIHsK Kwlib29sIGhfc3luY19wb2xhcml0eTsKKwlib29sIHZfc3luY19wb2xhcml0eTsKKwlib29sIGlu dGVybGFjZWQ7CisJaW50IGNvbG9yX2RlcHRoOworCWVudW0gVklDX1BYTF9FTkNPRElOR19GT1JN QVQgY29sb3JfZm10OworfTsKKworc3RydWN0IGNkbl9maXJtd2FyZV9oZWFkZXIgeworCXUzMiBz aXplX2J5dGVzOyAvKiBzaXplIG9mIHRoZSBlbnRpcmUgaGVhZGVyK2ltYWdlKHMpIGluIGJ5dGVz ICovCisJdTMyIGhlYWRlcl9zaXplOyAvKiBzaXplIG9mIGp1c3QgdGhlIGhlYWRlciBpbiBieXRl cyAqLworCXUzMiBpcmFtX3NpemU7IC8qIHNpemUgb2YgaXJhbSAqLworCXUzMiBkcmFtX3NpemU7 IC8qIHNpemUgb2YgZHJhbSAqLworfTsKKworc3RydWN0IGNkbl9kcF9kZXZpY2UgeworCXN0cnVj dCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2RldjsKKwlzdHJ1Y3QgZHJt X2Nvbm5lY3RvciBjb25uZWN0b3I7CisJc3RydWN0IGRybV9lbmNvZGVyIGVuY29kZXI7CisJc3Ry dWN0IGRybV9kaXNwbGF5X21vZGUgbW9kZTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICphdWRp b19wZGV2OworCisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsJLyogY2RuIGRwIGZpcm13YXJl ICovCisJdW5zaWduZWQgaW50IGZ3X3ZlcnNpb247CS8qIGNkbiBmdyB2ZXJzaW9uICovCisJYm9v bCBmd19sb2FkZWQ7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCXN0cnVjdCByZWdtYXAgKmdyZjsK Kwl1bnNpZ25lZCBpbnQgaXJxOworCXN0cnVjdCBjbGsgKmNvcmVfY2xrOworCXN0cnVjdCBjbGsg KnBjbGs7CisJc3RydWN0IGNsayAqc3BkaWZfY2xrOworCXN0cnVjdCBhdWRpb19pbmZvIGF1ZGlv X2luZm87CisJc3RydWN0IHZpZGVvX2luZm8gdmlkZW9faW5mbzsKKwlzdHJ1Y3QgZXh0Y29uX2Rl dgkqZXh0Y29uOworCXN0cnVjdCBub3RpZmllcl9ibG9jawlldmVudF9uYjsKKwlzdHJ1Y3QgZGVs YXllZF93b3JrCWV2ZW50X3dxOworCisJYm9vbCBwbHVnZ2VkOworCWJvb2wgaHBkX3N0YXR1czsK KwlpbnQgY2FwX2xhbmVzOworCWJvb2wgZmxpcDsKKworCWludCBkcG1zX21vZGU7CisJc3RydWN0 IGRybV9kcF9saW5rIGxpbms7CisJYm9vbCBzaW5rX2hhc19hdWRpbzsKK307CisKK3ZvaWQgZHBf Y2xvY2tfcmVzZXRfc2VxKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCk7CisKK3ZvaWQgY2RuX2Rw X3NldF9md19jbGsoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwLCBpbnQgY2xrKTsKK2ludCBjZG5f ZHBfbG9hZF9maXJtd2FyZShzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsIGNvbnN0IHUzMiAqaV9t ZW0sCisJCQkgdTMyIGlfc2l6ZSwgY29uc3QgdTMyICpkX21lbSwgdTMyIGRfc2l6ZSk7CitpbnQg Y2RuX2RwX2FjdGl2ZShzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsIGJvb2wgZW5hYmxlKTsKK2lu dCBjZG5fZHBfc2V0X2hvc3RfY2FwKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCk7CitpbnQgY2Ru X2RwX2V2ZW50X2NvbmZpZyhzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHApOworaW50IGNkbl9kcF9n ZXRfZXZlbnQoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwKTsKK2ludCBjZG5fZHBfZ2V0X2hwZF9z dGF0dXMoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwKTsKK2ludCBjZG5fZHBfZHBjZF93cml0ZShz dHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsIHUzMiBhZGRyLCB1OCB2YWx1ZSk7CitpbnQgY2RuX2Rw X2RwY2RfcmVhZChzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsIHUzMiBhZGRyKTsKK2ludCBjZG5f ZHBfZ2V0X2VkaWRfYmxvY2sodm9pZCAqZHAsIHU4ICplZGlkLAorCQkJICB1bnNpZ25lZCBpbnQg YmxvY2ssIHNpemVfdCBsZW5ndGgpOworaW50IGNkbl9kcF90cmFpbmluZ19zdGFydChzdHJ1Y3Qg Y2RuX2RwX2RldmljZSAqZHApOworaW50IGNkbl9kcF9nZXRfbHRfc3RhdHVzKHN0cnVjdCBjZG5f ZHBfZGV2aWNlICpkcCk7CitpbnQgY2RuX2RwX3NldF92aWRlb19zdGF0dXMoc3RydWN0IGNkbl9k cF9kZXZpY2UgKmRwLCBpbnQgYWN0aXZlKTsKK2ludCBjZG5fZHBfY29uZmlnX3ZpZGVvKHN0cnVj dCBjZG5fZHBfZGV2aWNlICpkcCk7CitpbnQgY2RuX2RwX2F1ZGlvX3N0b3Aoc3RydWN0IGNkbl9k cF9kZXZpY2UgKmRwLCBzdHJ1Y3QgYXVkaW9faW5mbyAqYXVkaW8pOworaW50IGNkbl9kcF9hdWRp b19tdXRlKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgYm9vbCBlbmFibGUpOworaW50IGNkbl9k cF9hdWRpb19jb25maWdfc2V0KHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgc3RydWN0IGF1ZGlv X2luZm8gKmF1ZGlvKTsKKworI2VuZGlmICAvKiBfUk9DS0NISVBfRURQX0NPUkVfSCAqLwpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2Nkbi1kcC1yZWcuYyBiL2RyaXZlcnMv Z3B1L2RybS9yb2NrY2hpcC9jZG4tZHAtcmVnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uODIyNzdiYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yb2Nr Y2hpcC9jZG4tZHAtcmVnLmMKQEAgLTAsMCArMSw3MTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp IEZ1emhvdSBSb2NrY2hpcCBFbGVjdHJvbmljcyBDby5MdGQKKyAqIEF1dGhvcjogQ2hyaXMgWmhv bmcgPHp5d0Byb2NrLWNoaXBzLmNvbT4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2Vk IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZl cnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFu ZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9z ZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51 eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxh eS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb2xsLmg+Cisj aW5jbHVkZSA8bGludXgvcmVzZXQuaD4KKworI2luY2x1ZGUgImNkbi1kcC1jb3JlLmgiCisjaW5j bHVkZSAiY2RuLWRwLXJlZy5oIgorCisjZGVmaW5lIEZXX0FMSVZFX1RJTUVPVVRfVVMJCTEwMDAw MDAKKyNkZWZpbmUgTUFJTEJPWF9USU1FT1VUX1VTCQk1MDAwMDAwCisKK3ZvaWQgY2RuX2RwX3Nl dF9md19jbGsoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwLCBpbnQgY2xrKQoreworCXdyaXRlbChj bGsgLyAxMDAwMDAwLCBkcC0+cmVncyArIFNXX0NMS19IKTsKK30KKwordm9pZCBkcF9jbG9ja19y ZXNldF9zZXEoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwKQoreworCXdyaXRlbCgweGZmZiwgZHAt PnJlZ3MgKyBTT1VSQ0VfRFBUWF9DQVIpOworCXdyaXRlbCgweDcsIGRwLT5yZWdzICsgU09VUkNF X1BIWV9DQVIpOworCXdyaXRlbCgweGYsIGRwLT5yZWdzICsgU09VUkNFX1BLVF9DQVIpOworCXdy aXRlbCgweGZmLCBkcC0+cmVncyArIFNPVVJDRV9BSUZfQ0FSKTsKKwl3cml0ZWwoMHhmLCBkcC0+ cmVncyArIFNPVVJDRV9DSVBIRVJfQ0FSKTsKKwl3cml0ZWwoMHgzLCBkcC0+cmVncyArIFNPVVJD RV9DUllQVE9fQ0FSKTsKKwl3cml0ZWwoMCwgZHAtPnJlZ3MgKyBBUEJfSU5UX01BU0spOworfQor CitzdGF0aWMgaW50IGNkbl9kcF9tYWlsYm94X3JlYWQoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRw KQoreworCWludCB2YWwsIHJldDsKKworCWlmICghZHAtPmZ3X2xvYWRlZCkKKwkJcmV0dXJuIDA7 CisKKwlyZXQgPSByZWFkeF9wb2xsX3RpbWVvdXQocmVhZGwsIGRwLT5yZWdzICsgTUFJTEJPWF9F TVBUWV9BRERSLAorCQkJCSB2YWwsICF2YWwsIDEwMDAsIE1BSUxCT1hfVElNRU9VVF9VUyk7CisJ aWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkcC0+ZGV2LCAiZmFpbGVkIHRvIHJlYWQgbWFpbGJv eCwga2VlcCBhbGl2ZSA9ICV4XG4iLAorCQkJcmVhZGwoZHAtPnJlZ3MgKyBLRUVQX0FMSVZFKSk7 CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIHJlYWRsKGRwLT5yZWdzICsgTUFJTEJPWDBf UkRfREFUQSkgJiAweGZmOworfQorCitzdGF0aWMgaW50IGNkcF9kcF9tYWlsYm94X3dyaXRlKHN0 cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgdTggdmFsKQoreworCWludCByZXQsIGZ1bGw7CisKKwlp ZiAoIWRwLT5md19sb2FkZWQpCisJCXJldHVybiAwOworCisJcmV0ID0gcmVhZHhfcG9sbF90aW1l b3V0KHJlYWRsLCBkcC0+cmVncyArIE1BSUxCT1hfRlVMTF9BRERSLAorCQkJCSBmdWxsLCAhZnVs bCwgMTAwMCwgTUFJTEJPWF9USU1FT1VUX1VTKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJy KGRwLT5kZXYsICJtYWlsYm94IGlzIGZ1bGwsIGtlZXAgYWxpdmUgPSAleFxuIiwKKwkJCXJlYWRs KGRwLT5yZWdzICsgS0VFUF9BTElWRSkpOworCQlyZXR1cm4gcmV0OworCX0KKworCXdyaXRlbCh2 YWwsIGRwLT5yZWdzICsgTUFJTEJPWDBfV1JfREFUQSk7CisKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIGludCBjZG5fZHBfbWFpbGJveF9yZXNwb25zZShzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAs IHU4IG1vZHVsZV9pZCwKKwkJCQkgICB1OCBvcGNvZGUsIHU4ICpidWZmLCB1OCBidWZmX3NpemUp Cit7CisJaW50IHJldCwgaSA9IDA7CisJdTggaGVhZGVyWzRdOworCisJLyogcmVhZCB0aGUgaGVh ZGVyIG9mIHRoZSBtZXNzYWdlICovCisJd2hpbGUgKGkgPCA0KSB7CisJCXJldCA9IGNkbl9kcF9t YWlsYm94X3JlYWQoZHApOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJaGVh ZGVyW2krK10gPSByZXQ7CisJfQorCisJaWYgKG9wY29kZSAhPSBoZWFkZXJbMF0gfHwgbW9kdWxl X2lkICE9IGhlYWRlclsxXSB8fAorCSAgICBidWZmX3NpemUgIT0gKChoZWFkZXJbMl0gPDwgOCkg fCBoZWFkZXJbM10pKSB7CisJCWRldl9lcnIoZHAtPmRldiwgIm1haWxib3ggcmVzcG9uc2UgZmFp bGVkIik7CisKKwkJLyoKKwkJICogSWYgdGhlIG1lc3NhZ2UgaW4gbWFpbGJveCBpcyBub3Qgd2hh dCB3ZSB3YW50LCB3ZSBuZWVkIHRvCisJCSAqIGNsZWFyIHRoZSBtYWlsYm94IGJ5IHJlYWQuCisJ CSAqLworCQlpID0gKGhlYWRlclsyXSA8PCA4KSB8IGhlYWRlclszXTsKKwkJd2hpbGUgKGktLSkK KwkJCWlmIChjZG5fZHBfbWFpbGJveF9yZWFkKGRwKSA8IDApCisJCQkJYnJlYWs7CisKKwkJcmV0 dXJuIC1FSU5WQUw7CisJfQorCisJaSA9IDA7CisJd2hpbGUgKGkgPCBidWZmX3NpemUpIHsKKwkJ cmV0ID0gY2RuX2RwX21haWxib3hfcmVhZChkcCk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJu IHJldDsKKworCQlidWZmW2krK10gPSByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBpbnQgY2RuX2RwX21haWxib3hfc2VuZChzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsIHU4IG1v ZHVsZV9pZCwKKwkJCSAgICAgICB1OCBvcGNvZGUsIHUxNiBzaXplLCB1OCAqbWVzc2FnZSkKK3sK Kwl1OCBoZWFkZXJbNF07CisJaW50IHJldCwgaTsKKworCWhlYWRlclswXSA9IG9wY29kZTsKKwlo ZWFkZXJbMV0gPSBtb2R1bGVfaWQ7CisJaGVhZGVyWzJdID0gc2l6ZSA+PiA4OworCWhlYWRlclsz XSA9IHNpemUgJiAweGZmOworCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQlyZXQgPSBj ZHBfZHBfbWFpbGJveF93cml0ZShkcCwgaGVhZGVyW2ldKTsKKwkJaWYgKHJldCkKKwkJCXJldHVy biByZXQ7CisJfQorCisJd2hpbGUgKHNpemUtLSkgeworCQlyZXQgPSBjZHBfZHBfbWFpbGJveF93 cml0ZShkcCwgKm1lc3NhZ2UrKyk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKwor CXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNkbl9kcF9yZWdfd3JpdGUoc3RydWN0IGNkbl9k cF9kZXZpY2UgKmRwLCB1MTYgYWRkciwgdTMyIHZhbCkKK3sKKwl1OCBtc2dbNl07CisKKwltc2db MF0gPSAoYWRkciA+PiA4KSAmIDB4ZmY7CisJbXNnWzFdID0gYWRkciAmIDB4ZmY7CisJbXNnWzJd ID0gKHZhbCA+PiAyNCkgJiAweGZmOworCW1zZ1szXSA9ICh2YWwgPj4gMTYpICYgMHhmZjsKKwlt c2dbNF0gPSAodmFsID4+IDgpICYgMHhmZjsKKwltc2dbNV0gPSB2YWwgJiAweGZmOworCXJldHVy biBjZG5fZHBfbWFpbGJveF9zZW5kKGRwLCBNQl9NT0RVTEVfSURfRFBfVFgsIERQVFhfV1JJVEVf UkVHSVNURVIsCisJCQkJICAgQVJSQVlfU0laRShtc2cpLCBtc2cpOworfQorCitpbnQgY2RuX2Rw X2xvYWRfZmlybXdhcmUoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwLCBjb25zdCB1MzIgKmlfbWVt LAorCQkJIHUzMiBpX3NpemUsIGNvbnN0IHUzMiAqZF9tZW0sIHUzMiBkX3NpemUpCit7CisJaW50 IGksIHJlZywgcmV0OworCisJLyogcmVzZXQgdWNwdSBiZWZvcmUgbG9hZCBmaXJtd2FyZSovCisJ d3JpdGVsKEFQQl9JUkFNX1BBVEggfCBBUEJfRFJBTV9QQVRIIHwgQVBCX1hUX1JFU0VULAorCSAg ICAgICBkcC0+cmVncyArIEFQQl9DVFJMKTsKKworCWZvciAoaSA9IDA7IGkgPCBpX3NpemU7IGkg Kz0gNCkKKwkJd3JpdGVsKCppX21lbSsrLCBkcC0+cmVncyArIEFERFJfSU1FTSArIGkpOworCisJ Zm9yIChpID0gMDsgaSA8IGRfc2l6ZTsgaSArPSA0KQorCQl3cml0ZWwoKmRfbWVtKyssIGRwLT5y ZWdzICsgQUREUl9ETUVNICsgaSk7CisKKwkvKiB1bi1yZXNldCB1Y3B1ICovCisJd3JpdGVsKDAs IGRwLT5yZWdzICsgQVBCX0NUUkwpOworCisJLyogY2hlY2sgdGhlIGtlZXAgYWxpdmUgcmVnaXN0 ZXIgdG8gbWFrZSBzdXJlIGZ3IHdvcmtpbmcgKi8KKwlyZXQgPSByZWFkeF9wb2xsX3RpbWVvdXQo cmVhZGwsIGRwLT5yZWdzICsgS0VFUF9BTElWRSwKKwkJCQkgcmVnLCByZWcsIDIwMDAsIEZXX0FM SVZFX1RJTUVPVVRfVVMpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZHAtPmRldiwgImZh aWxlZCB0byBsb2FkZWQgdGhlIEZXIHJlZyA9ICV4XG4iLCByZWcpOworCQlyZXR1cm4gLUVJTlZB TDsKKwl9CisKKwlyZWcgPSByZWFkbChkcC0+cmVncyArIFZFUl9MKSAmIDB4ZmY7CisJZHAtPmZ3 X3ZlcnNpb24gPSByZWc7CisJcmVnID0gcmVhZGwoZHAtPnJlZ3MgKyBWRVJfSCkgJiAweGZmOwor CWRwLT5md192ZXJzaW9uIHw9IHJlZyA8PCA4OworCXJlZyA9IHJlYWRsKGRwLT5yZWdzICsgVkVS X0xJQl9MX0FERFIpICYgMHhmZjsKKwlkcC0+ZndfdmVyc2lvbiB8PSByZWcgPDwgMTY7CisJcmVn ID0gcmVhZGwoZHAtPnJlZ3MgKyBWRVJfTElCX0hfQUREUikgJiAweGZmOworCWRwLT5md192ZXJz aW9uIHw9IHJlZyA8PCAyNDsKKworCWRwLT5md19sb2FkZWQgPSAxOworCisJcmV0dXJuIDA7Cit9 CisKK2ludCBjZG5fZHBfcmVnX3dyaXRlX2JpdChzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsIHUx NiBhZGRyLCB1OCBzdGFydF9iaXQsCisJCQkgdTggYml0c19ubywgdTMyIHZhbCkKK3sKKwl1OCBm aWVsZFs4XTsKKworCWZpZWxkWzBdID0gKGFkZHIgPj4gOCkgJiAweGZmOworCWZpZWxkWzFdID0g YWRkciAmIDB4ZmY7CisJZmllbGRbMl0gPSBzdGFydF9iaXQ7CisJZmllbGRbM10gPSBiaXRzX25v OworCWZpZWxkWzRdID0gKHZhbCA+PiAyNCkgJiAweGZmOworCWZpZWxkWzVdID0gKHZhbCA+PiAx NikgJiAweGZmOworCWZpZWxkWzZdID0gKHZhbCA+PiA4KSAmIDB4ZmY7CisJZmllbGRbN10gPSB2 YWwgJiAweGZmOworCisJcmV0dXJuIGNkbl9kcF9tYWlsYm94X3NlbmQoZHAsIE1CX01PRFVMRV9J RF9EUF9UWCwgRFBUWF9XUklURV9GSUVMRCwKKwkJCSAgICBzaXplb2YoZmllbGQpLCBmaWVsZCk7 Cit9CisKK2ludCBjZG5fZHBfYWN0aXZlKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgYm9vbCBl bmFibGUpCit7CisJdTggYWN0aXZlID0gZW5hYmxlID8gMSA6IDA7CisJdTggcmVzcDsKKwlpbnQg cmV0OworCisJLyogc2V0IGZpcm13YXJlIHN0YXR1cywgMTogYXZ0aXZlOyAwOiBzdGFuZGJ5ICov CisJcmV0ID0gY2RuX2RwX21haWxib3hfc2VuZChkcCwgTUJfTU9EVUxFX0lEX0dFTkVSQUwsCisJ CQkJICBHRU5FUkFMX01BSU5fQ09OVFJPTCwgMSwgJmFjdGl2ZSk7CisJaWYgKHJldCkKKwkJcmV0 dXJuIHJldDsKKworCXJldCA9IGNkbl9kcF9tYWlsYm94X3Jlc3BvbnNlKGRwLCBNQl9NT0RVTEVf SURfR0VORVJBTCwKKwkJCQkgICAgICBHRU5FUkFMX01BSU5fQ09OVFJPTCwgJnJlc3AsIDEpOwor CWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gcmVzcCA/IDAgOiAtRUlOVkFMOwor fQorCitpbnQgY2RuX2RwX3NldF9ob3N0X2NhcChzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHApCit7 CisJdTggbXNnWzhdOworCWludCByZXQ7CisKKwltc2dbMF0gPSBEUF9MSU5LX0JXXzVfNDsKKwlt c2dbMV0gPSBkcC0+Y2FwX2xhbmVzOworCW1zZ1syXSA9IFZPTFRBR0VfTEVWRUxfMjsKKwltc2db M10gPSBQUkVfRU1QSEFTSVNfTEVWRUxfMzsKKwltc2dbNF0gPSBQUkJTNyB8IEQxMF8yIHwgVFJB SU5JTkdfUFROMSB8IFRSQUlOSU5HX1BUTjI7CisJbXNnWzVdID0gRkFTVF9MVF9OT1RfU1VQUE9S VDsKKwltc2dbNl0gPSBMQU5FX01BUFBJTkdfTk9STUFMOworCW1zZ1s3XSA9IEVOSEFOQ0VEOwor CisJcmV0ID0gY2RuX2RwX21haWxib3hfc2VuZChkcCwgTUJfTU9EVUxFX0lEX0RQX1RYLAorCQkJ CSAgRFBUWF9TRVRfSE9TVF9DQVBBQklMSVRJRVMsCisJCQkJICBBUlJBWV9TSVpFKG1zZyksIG1z Zyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGNkbl9kcF9yZWdfd3JpdGUo ZHAsIERQX0FVWF9TV0FQX0lOVkVSU0lPTl9DT05UUk9MLAorCQkJICAgICAgIEFVWF9IT1NUX0lO VkVSVCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOworfQorCitpbnQg Y2RuX2RwX2V2ZW50X2NvbmZpZyhzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHApCit7CisJdTggbXNn WzVdID0gezAsIDAsIDAsIDAsIDB9OworCisJbXNnWzBdID0gRFBUWF9FVkVOVF9FTkFCTEVfSFBE IHwgRFBUWF9FVkVOVF9FTkFCTEVfVFJBSU5JTkc7CisKKwlyZXR1cm4gY2RuX2RwX21haWxib3hf c2VuZChkcCwgTUJfTU9EVUxFX0lEX0RQX1RYLCBEUFRYX0VOQUJMRV9FVkVOVCwKKwkJCQkgICAg QVJSQVlfU0laRShtc2cpLCBtc2cpOworfQorCitpbnQgY2RuX2RwX2dldF9ldmVudChzdHJ1Y3Qg Y2RuX2RwX2RldmljZSAqZHApCit7CisJcmV0dXJuIHJlYWRsKGRwLT5yZWdzICsgU1dfRVZFTlRT MCk7Cit9CisKK2ludCBjZG5fZHBfZ2V0X2hwZF9zdGF0dXMoc3RydWN0IGNkbl9kcF9kZXZpY2Ug KmRwKQoreworCXU4IHN0YXR1czsKKwlpbnQgcmV0OworCisJcmV0ID0gY2RuX2RwX21haWxib3hf c2VuZChkcCwgTUJfTU9EVUxFX0lEX0RQX1RYLCBEUFRYX0hQRF9TVEFURSwKKwkJCQkgIDAsIE5V TEwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBjZG5fZHBfbWFpbGJveF9y ZXNwb25zZShkcCwgTUJfTU9EVUxFX0lEX0RQX1RYLAorCQkJCSAgICAgIERQVFhfSFBEX1NUQVRF LCAmc3RhdHVzLCAxKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIHN0YXR1 czsKK30KKworaW50IGNkbl9kcF9nZXRfZWRpZF9ibG9jayh2b2lkICpkYXRhLCB1OCAqZWRpZCwK KwkJCSAgdW5zaWduZWQgaW50IGJsb2NrLCBzaXplX3QgbGVuZ3RoKQoreworCXN0cnVjdCBjZG5f ZHBfZGV2aWNlICpkcCA9IGRhdGE7CisJdTggbXNnWzJdLCByZWdbRURJRF9EQVRBICsgRURJRF9C TE9DS19TSVpFXTsKKwlpbnQgcmV0OworCisJaWYgKGxlbmd0aCAhPSBFRElEX0JMT0NLX1NJWkUp CisJCXJldHVybiAtRUlOVkFMOworCisJbXNnWzBdID0gYmxvY2sgLyAyOworCW1zZ1sxXSA9IGJs b2NrICUgMjsKKworCXJldCA9IGNkbl9kcF9tYWlsYm94X3NlbmQoZHAsIE1CX01PRFVMRV9JRF9E UF9UWCwgRFBUWF9HRVRfRURJRCwKKwkJCQkgIDIsIG1zZyk7CisJaWYgKHJldCkKKwkJcmV0dXJu IHJldDsKKworCXJldCA9IGNkbl9kcF9tYWlsYm94X3Jlc3BvbnNlKGRwLCBNQl9NT0RVTEVfSURf RFBfVFgsCisJCQkJICAgICAgRFBUWF9HRVRfRURJRCwgcmVnLAorCQkJCSAgICAgIEVESURfREFU QSArIEVESURfQkxPQ0tfU0laRSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChy ZWdbRURJRF9MRU5HVEhfQllURV0gIT0gRURJRF9CTE9DS19TSVpFIHx8CisJICAgIHJlZ1tFRElE X1NFR01FTlRfQlVNQkVSXSAhPSBibG9jayAvIDIpIHsKKwkJZGV2X2VycihkcC0+ZGV2LCAiZWRp ZCBibG9jayBzaXplIGVyclxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW1lbWNweShl ZGlkLCAmcmVnW0VESURfREFUQV0sIEVESURfQkxPQ0tfU0laRSk7CisKKwlyZXR1cm4gMDsKK30K KworaW50IGNkbl9kcF90cmFpbmluZ19zdGFydChzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHApCit7 CisJdTggbXNnLCBldmVudFsyXTsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisJaW50IHJldDsK KworCW1zZyA9IExJTktfVFJBSU5JTkdfUlVOOworCisJLyogc3RhcnQgdHJhaW5pbmcgKi8KKwly ZXQgPSBjZG5fZHBfbWFpbGJveF9zZW5kKGRwLCBNQl9NT0RVTEVfSURfRFBfVFgsIERQVFhfVFJB SU5JTkdfQ09OVFJPTCwKKwkJCQkgIDEsICZtc2cpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7 CisKKwkvKiB0aGUgd2hvbGUgdHJhaW5pbmcgc2hvdWxkIGZpbmlzaCBpbiA1MDBtcyAqLworCXRp bWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg1MDApOworCXdoaWxlICgxKSB7CisJ CW1zbGVlcCgyMCk7CisJCXJldCA9IGNkbl9kcF9tYWlsYm94X3NlbmQoZHAsIE1CX01PRFVMRV9J RF9EUF9UWCwKKwkJCQkJICBEUFRYX1JFQURfRVZFTlQsIDAsIE5VTEwpOworCQlpZiAocmV0KQor CQkJcmV0dXJuIHJldDsKKworCQlyZXQgPSBjZG5fZHBfbWFpbGJveF9yZXNwb25zZShkcCwgTUJf TU9EVUxFX0lEX0RQX1RYLAorCQkJCQkgICAgICBEUFRYX1JFQURfRVZFTlQsIGV2ZW50LCAyKTsK KwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJaWYgKGV2ZW50WzFdICYgRVFfUEhBU0Vf RklOSVNIRUQpCisJCQlicmVhazsKKworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0 KSkKKwkJCXJldHVybiAtRVRJTUVET1VUOworCX0KKworCXJldHVybiAwOworfQorCitpbnQgY2Ru X2RwX2dldF9sdF9zdGF0dXMoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwKQoreworCXU4IHN0YXR1 c1sxMF07CisJaW50IHJldDsKKworCXJldCA9IGNkbl9kcF9tYWlsYm94X3NlbmQoZHAsIE1CX01P RFVMRV9JRF9EUF9UWCwgRFBUWF9SRUFEX0xJTktfU1RBVCwKKwkJCQkgIDAsIE5VTEwpOworCWlm IChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBjZG5fZHBfbWFpbGJveF9yZXNwb25zZShk cCwgTUJfTU9EVUxFX0lEX0RQX1RYLAorCQkJCSAgICAgIERQVFhfUkVBRF9MSU5LX1NUQVQsIHN0 YXR1cywgMTApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlkcC0+bGluay5yYXRlID0g c3RhdHVzWzBdOworCWRwLT5saW5rLm51bV9sYW5lcyA9IHN0YXR1c1sxXTsKKworCXJldHVybiAw OworfQorCitpbnQgY2RuX2RwX3NldF92aWRlb19zdGF0dXMoc3RydWN0IGNkbl9kcF9kZXZpY2Ug KmRwLCBpbnQgYWN0aXZlKQoreworCXU4IG1zZzsKKworCW1zZyA9ICEhYWN0aXZlOworCisJcmV0 dXJuIGNkbl9kcF9tYWlsYm94X3NlbmQoZHAsIE1CX01PRFVMRV9JRF9EUF9UWCwgRFBUWF9TRVRf VklERU8sCisJCQkJICAgMSwgJm1zZyk7Cit9CisKK3N0YXRpYyBpbnQgY2RuX2RwX2dldF9tc2Ff bWlzYyhzdHJ1Y3QgdmlkZW9faW5mbyAqdmlkZW8sCisJCQkgICAgICAgc3RydWN0IGRybV9kaXNw bGF5X21vZGUgKm1vZGUpCit7CisJdTggdmFsMCwgdmFsMTsKKwl1MzIgbXNhX21pc2M7CisKKwlz d2l0Y2ggKHZpZGVvLT5jb2xvcl9mbXQpIHsKKwljYXNlIFBYTF9SR0I6CisJY2FzZSBZX09OTFk6 CisJCXZhbDAgPSAwOworCQlicmVhazsKKwljYXNlIFlDQkNSXzRfNF80OgorCQl2YWwwID0gNjsK KwkJYnJlYWs7CisJY2FzZSBZQ0JDUl80XzJfMjoKKwkJdmFsMCA9IDU7CisJCWJyZWFrOworCWNh c2UgWUNCQ1JfNF8yXzA6CisJCXZhbDAgPSA1OworCQlicmVhazsKKwl9OworCisJc3dpdGNoICh2 aWRlby0+Y29sb3JfZGVwdGgpIHsKKwljYXNlIDY6CisJCXZhbDEgPSAwOworCQlicmVhazsKKwlj YXNlIDg6CisJCXZhbDEgPSAxOworCQlicmVhazsKKwljYXNlIDEwOgorCQl2YWwxID0gMjsKKwkJ YnJlYWs7CisJY2FzZSAxMjoKKwkJdmFsMSA9IDM7CisJCWJyZWFrOworCWNhc2UgMTY6CisJCXZh bDEgPSA0OworCQlicmVhazsKKwl9OworCisJbXNhX21pc2MgPSAyICogdmFsMCArIDMyICogdmFs MSArCisJCSAgICgodmlkZW8tPmNvbG9yX2ZtdCA9PSBZX09OTFkpID8gKDEgPDwgMTQpIDogMCk7 CisKKwlyZXR1cm4gbXNhX21pc2M7Cit9CisKK2ludCBjZG5fZHBfY29uZmlnX3ZpZGVvKHN0cnVj dCBjZG5fZHBfZGV2aWNlICpkcCkKK3sKKwlzdHJ1Y3QgdmlkZW9faW5mbyAqdmlkZW8gPSAmZHAt PnZpZGVvX2luZm87CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPSAmZHAtPm1vZGU7 CisJdTMyIHZhbCwgbGlua19yYXRlOworCXU4IGJpdF9wZXJfcGl4OworCWludCByZXQ7CisKKwli aXRfcGVyX3BpeCA9ICh2aWRlby0+Y29sb3JfZm10ID09IFlDQkNSXzRfMl8yKSA/CisJCSAgICAg ICh2aWRlby0+Y29sb3JfZGVwdGggKiAyKSA6ICh2aWRlby0+Y29sb3JfZGVwdGggKiAzKTsKKwor CXZhbCA9IFZJRl9CWVBBU1NfSU5URVJMQUNFOworCisJcmV0ID0gY2RuX2RwX3JlZ193cml0ZShk cCwgQk5EX0hTWU5DMlZTWU5DLCB2YWwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwly ZXQgPSBjZG5fZHBfcmVnX3dyaXRlKGRwLCBIU1lOQzJWU1lOQ19QT0xfQ1RSTCwgMCk7CisJaWYg KHJldCkKKwkJcmV0dXJuIHJldDsKKworCWxpbmtfcmF0ZSA9IGRybV9kcF9id19jb2RlX3RvX2xp bmtfcmF0ZShkcC0+bGluay5yYXRlKSAvIDEwMDA7CisKKwl2YWwgPSBUVV9TSVpFICogbW9kZS0+ Y2xvY2sgKiBiaXRfcGVyX3BpeDsKKwl2YWwgLz0gZHAtPmxpbmsubnVtX2xhbmVzICogbGlua19y YXRlICogOCAqIDEwMDA7CisJaWYgKG1vZGUtPmNsb2NrID4gNTAwMDAwKQorCQl2YWwrKzsKKwl2 YWwgKz0gVFVfU0laRSA8PCA4OworCisJcmV0ID0gY2RuX2RwX3JlZ193cml0ZShkcCwgRFBfRlJB TUVSX1RVLCB2YWwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlzd2l0Y2ggKHZpZGVv LT5jb2xvcl9kZXB0aCkgeworCWNhc2UgNjoKKwkJdmFsID0gQkNTXzY7CisJCWJyZWFrOworCWNh c2UgODoKKwkJdmFsID0gQkNTXzg7CisJCWJyZWFrOworCWNhc2UgMTA6CisJCXZhbCA9IEJDU18x MDsKKwkJYnJlYWs7CisJY2FzZSAxMjoKKwkJdmFsID0gQkNTXzEyOworCQlicmVhazsKKwljYXNl IDE2OgorCQl2YWwgPSBCQ1NfMTY7CisJCWJyZWFrOworCX07CisKKwl2YWwgKz0gdmlkZW8tPmNv bG9yX2ZtdCA8PCA4OworCXJldCA9IGNkbl9kcF9yZWdfd3JpdGUoZHAsIERQX0ZSQU1FUl9QWExf UkVQUiwgdmFsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJdmFsID0gdmlkZW8tPmhf c3luY19wb2xhcml0eSA/IERQX0ZSQU1FUl9TUF9IU1AgOiAwOworCXZhbCB8PSB2aWRlby0+dl9z eW5jX3BvbGFyaXR5ID8gRFBfRlJBTUVSX1NQX1ZTUCA6IDA7CisJcmV0ID0gY2RuX2RwX3JlZ193 cml0ZShkcCwgRFBfRlJBTUVSX1NQLCB2YWwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisK Kwl2YWwgPSAobW9kZS0+aHN5bmNfc3RhcnQgLSBtb2RlLT5oZGlzcGxheSkgPDwgMTY7CisJdmFs IHw9IG1vZGUtPmh0b3RhbCAtIG1vZGUtPmhzeW5jX2VuZDsKKwlyZXQgPSBjZG5fZHBfcmVnX3dy aXRlKGRwLCBEUF9GUk9OVF9CQUNLX1BPUkNILCB2YWwpOworCWlmIChyZXQpCisJCXJldHVybiBy ZXQ7CisKKwl2YWwgPSBtb2RlLT5oZGlzcGxheSAqIGJpdF9wZXJfcGl4IC8gODsKKwlyZXQgPSBj ZG5fZHBfcmVnX3dyaXRlKGRwLCBEUF9CWVRFX0NPVU5ULCB2YWwpOworCWlmIChyZXQpCisJCXJl dHVybiByZXQ7CisKKwl2YWwgPSBtb2RlLT5odG90YWwgfCAoKG1vZGUtPmh0b3RhbCAtIG1vZGUt PmhzeW5jX3N0YXJ0KSA8PCAxNik7CisJcmV0ID0gY2RuX2RwX3JlZ193cml0ZShkcCwgTVNBX0hP UklaT05UQUxfMCwgdmFsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJdmFsID0gbW9k ZS0+aHN5bmNfZW5kIC0gbW9kZS0+aHN5bmNfc3RhcnQ7CisJdmFsIHw9IChtb2RlLT5oZGlzcGxh eSA8PCAxNikgfCAodmlkZW8tPmhfc3luY19wb2xhcml0eSA8PCAxNSk7CisJcmV0ID0gY2RuX2Rw X3JlZ193cml0ZShkcCwgTVNBX0hPUklaT05UQUxfMSwgdmFsKTsKKwlpZiAocmV0KQorCQlyZXR1 cm4gcmV0OworCisJdmFsID0gbW9kZS0+dnRvdGFsOworCXZhbCB8PSAoKG1vZGUtPnZ0b3RhbCAt IG1vZGUtPnZzeW5jX3N0YXJ0KSA8PCAxNik7CisKKwlyZXQgPSBjZG5fZHBfcmVnX3dyaXRlKGRw LCBNU0FfVkVSVElDQUxfMCwgdmFsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJdmFs ID0gbW9kZS0+dnN5bmNfZW5kIC0gbW9kZS0+dnN5bmNfc3RhcnQ7CisJdmFsIHw9IG1vZGUtPnZk aXNwbGF5IDw8IDE2OworCXZhbCB8PSAodmlkZW8tPnZfc3luY19wb2xhcml0eSA8PCAxNSk7CisJ cmV0ID0gY2RuX2RwX3JlZ193cml0ZShkcCwgTVNBX1ZFUlRJQ0FMXzEsIHZhbCk7CisJaWYgKHJl dCkKKwkJcmV0dXJuIHJldDsKKworCXZhbCA9IGNkbl9kcF9nZXRfbXNhX21pc2ModmlkZW8sIG1v ZGUpOworCXJldCA9IGNkbl9kcF9yZWdfd3JpdGUoZHAsIE1TQV9NSVNDLCB2YWwpOworCWlmIChy ZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBjZG5fZHBfcmVnX3dyaXRlKGRwLCBTVFJFQU1f Q09ORklHLCAxKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJdmFsID0gbW9kZS0+aHN5 bmNfZW5kIC0gbW9kZS0+aHN5bmNfc3RhcnQ7CisJdmFsIHw9IChtb2RlLT5oZGlzcGxheSA8PCAx Nik7CisJcmV0ID0gY2RuX2RwX3JlZ193cml0ZShkcCwgRFBfSE9SSVpPTlRBTCwgdmFsKTsKKwlp ZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJdmFsID0gbW9kZS0+dnRvdGFsOworCXZhbCAtPSAo bW9kZS0+dnRvdGFsIC0gbW9kZS0+dmRpc3BsYXkpOworCXZhbCB8PSAobW9kZS0+dnRvdGFsIC0g bW9kZS0+dnN5bmNfc3RhcnQpIDw8IDE2OworCisJcmV0ID0gY2RuX2RwX3JlZ193cml0ZShkcCwg RFBfVkVSVElDQUxfMCwgdmFsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJdmFsID0g bW9kZS0+dnRvdGFsOworCXJldCA9IGNkbl9kcF9yZWdfd3JpdGUoZHAsIERQX1ZFUlRJQ0FMXzEs IHZhbCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXZhbCA9ICAwOworCXJldHVybiBj ZG5fZHBfcmVnX3dyaXRlX2JpdChkcCwgRFBfVkJfSUQsIDIsIDEsIHZhbCk7Cit9CisKK2ludCBj ZG5fZHBfYXVkaW9fc3RvcChzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsIHN0cnVjdCBhdWRpb19p bmZvICphdWRpbykKK3sKKwlpbnQgcmV0ID0gY2RuX2RwX3JlZ193cml0ZShkcCwgQVVESU9fUEFD S19DT05UUk9MLCBBVURJT19QQUNLX0VOKDApKTsKKworCWlmIChyZXQpCisJCXJldHVybiByZXQ7 CisKKwlpZiAoYXVkaW8tPmZvcm1hdCA9PSBBRk1UX1NQRElGKQorCQljbGtfZGlzYWJsZV91bnBy ZXBhcmUoZHAtPnNwZGlmX2Nsayk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGNkbl9kcF9hdWRp b19tdXRlKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgYm9vbCBlbmFibGUpCit7CisJcmV0dXJu IGNkbl9kcF9yZWdfd3JpdGVfYml0KGRwLCBEUF9WQl9JRCwgNCwgMSwgZW5hYmxlKTsKK30KKwor aW50IGNkbl9kcF9hdWRpb19jb25maWdfc2V0KHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgc3Ry dWN0IGF1ZGlvX2luZm8gKmF1ZGlvKQoreworCWludCBsYW5lc19wYXJhbSwgaTJzX3BvcnRfZW5f dmFsLCB2YWwsIGk7CisJaW50IHJldDsKKworCWlmIChhdWRpby0+Y2hhbm5lbHMgPT0gMiAmJiBk cC0+bGluay5udW1fbGFuZXMgPT0gMSkKKwkJbGFuZXNfcGFyYW0gPSAxOworCWVsc2UgaWYgKGF1 ZGlvLT5jaGFubmVscyA9PSAyKQorCQlsYW5lc19wYXJhbSA9IDM7CisJZWxzZQorCQlsYW5lc19w YXJhbSA9IDA7CisKKwlpZiAoYXVkaW8tPmNoYW5uZWxzID09IDIpCisJCWkyc19wb3J0X2VuX3Zh bCA9IDE7CisJZWxzZSBpZiAoYXVkaW8tPmNoYW5uZWxzID09IDQpCisJCWkyc19wb3J0X2VuX3Zh bCA9IDM7CisJZWxzZQorCQlpMnNfcG9ydF9lbl92YWwgPSAweGY7CisKKwlyZXQgPSBjZG5fZHBf cmVnX3dyaXRlKGRwLCBDTV9MQU5FX0NUUkwsIDB4ODAwMCk7CisJaWYgKHJldCkKKwkJcmV0dXJu IHJldDsKKworCXJldCA9IGNkbl9kcF9yZWdfd3JpdGUoZHAsIENNX0NUUkwsIDApOworCWlmIChy ZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoYXVkaW8tPmZvcm1hdCA9PSBBRk1UX0kyUykgewor CQl3cml0ZWwoMHgwLCBkcC0+cmVncyArIFNQRElGX0NUUkxfQUREUik7CisKKwkJd3JpdGVsKFNZ TkNfV1JfVE9fQ0hfWkVSTywgZHAtPnJlZ3MgKyBGSUZPX0NOVEwpOworCisJCXZhbCA9IGF1ZGlv LT5jaGFubmVscyAtIDE7CisJCXZhbCB8PSAoYXVkaW8tPmNoYW5uZWxzIC8gMiAtIDEpIDw8IDU7 CisJCXZhbCB8PSBCSVQoOCk7CisJCXZhbCB8PSBsYW5lc19wYXJhbSA8PCAxMTsKKwkJd3JpdGVs KHZhbCwgZHAtPnJlZ3MgKyBTTVBMMlBLVF9DTkZHKTsKKworCQlpZiAoYXVkaW8tPnNhbXBsZV93 aWR0aCA9PSAxNikKKwkJCXZhbCA9IDA7CisJCWVsc2UgaWYgKGF1ZGlvLT5zYW1wbGVfd2lkdGgg PT0gMjQpCisJCQl2YWwgPSAxIDw8IDk7CisJCWVsc2UKKwkJCXZhbCA9IDIgPDwgOTsKKworCQl2 YWwgfD0gKGF1ZGlvLT5jaGFubmVscyAtIDEpIDw8IDI7CisJCXZhbCB8PSBpMnNfcG9ydF9lbl92 YWwgPDwgMTc7CisJCXZhbCB8PSAyIDw8IDExOworCQl3cml0ZWwodmFsLCBkcC0+cmVncyArIEFV RElPX1NSQ19DTkZHKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgKGF1ZGlvLT5jaGFubmVscyArIDEp IC8gMjsgaSsrKSB7CisJCQlpZiAoYXVkaW8tPnNhbXBsZV93aWR0aCA9PSAxNikKKwkJCQl2YWwg PSAoMHgwOCA8PCA4KSB8ICgweDA4IDw8IDIwKTsKKwkJCWVsc2UgaWYgKGF1ZGlvLT5zYW1wbGVf d2lkdGggPT0gMjQpCisJCQkJdmFsID0gKDB4MGIgPDwgOCkgfCAoMHgwYiA8PCAyMCk7CisKKwkJ CXZhbCB8PSAoKDIgKiBpKSA8PCA0KSB8ICgoMiAqIGkgKyAxKSA8PCAxNik7CisJCQl3cml0ZWwo dmFsLCBkcC0+cmVncyArIFNUVFNfQklUX0NIKGkpKTsKKwkJfQorCisJCXN3aXRjaCAoYXVkaW8t PnNhbXBsZV9yYXRlKSB7CisJCWNhc2UgMzIwMDA6CisJCQl2YWwgPSBTQU1QTElOR19GUkVRKDMp IHwKKwkJCSAgICAgIE9SSUdJTkFMX1NBTVBfRlJFUSgweGMpOworCQkJYnJlYWs7CisJCWNhc2Ug NDQxMDA6CisJCQl2YWwgPSBTQU1QTElOR19GUkVRKDApIHwKKwkJCSAgICAgIE9SSUdJTkFMX1NB TVBfRlJFUSgweGYpOworCQkJYnJlYWs7CisJCWNhc2UgNDgwMDA6CisJCQl2YWwgPSBTQU1QTElO R19GUkVRKDIpIHwKKwkJCSAgICAgIE9SSUdJTkFMX1NBTVBfRlJFUSgweGQpOworCQkJYnJlYWs7 CisJCWNhc2UgODgyMDA6CisJCQl2YWwgPSBTQU1QTElOR19GUkVRKDgpIHwKKwkJCSAgICAgIE9S SUdJTkFMX1NBTVBfRlJFUSgweDcpOworCQkJYnJlYWs7CisJCWNhc2UgOTYwMDA6CisJCQl2YWwg PSBTQU1QTElOR19GUkVRKDB4YSkgfAorCQkJICAgICAgT1JJR0lOQUxfU0FNUF9GUkVRKDUpOwor CQkJYnJlYWs7CisJCWNhc2UgMTc2NDAwOgorCQkJdmFsID0gU0FNUExJTkdfRlJFUSgweGMpIHwK KwkJCSAgICAgIE9SSUdJTkFMX1NBTVBfRlJFUSgzKTsKKwkJCWJyZWFrOworCQljYXNlIDE5MjAw MDoKKwkJCXZhbCA9IFNBTVBMSU5HX0ZSRVEoMHhlKSB8CisJCQkgICAgICBPUklHSU5BTF9TQU1Q X0ZSRVEoMSk7CisJCQlicmVhazsKKwkJfQorCQl2YWwgfD0gNDsKKwkJd3JpdGVsKHZhbCwgZHAt PnJlZ3MgKyBDT01fQ0hfU1RUU19CSVRTKTsKKworCQl3cml0ZWwoMiwgZHAtPnJlZ3MgKyBTTVBM MlBLVF9DTlRMKTsKKwkJd3JpdGVsKDIsIGRwLT5yZWdzICsgQVVESU9fU1JDX0NOVEwpOworCX0g ZWxzZSB7CisJCXZhbCA9IDB4MUYwNzA3OworCQl3cml0ZWwodmFsLCBkcC0+cmVncyArIFNQRElG X0NUUkxfQUREUik7CisKKwkJd3JpdGVsKFNZTkNfV1JfVE9fQ0hfWkVSTywgZHAtPnJlZ3MgKyBG SUZPX0NOVEwpOworCisJCXZhbCA9IDB4MTAxIHwgKDMgPDwgMTEpOworCQl3cml0ZWwodmFsLCBk cC0+cmVncyArIFNNUEwyUEtUX0NORkcpOworCQl3cml0ZWwoMiwgZHAtPnJlZ3MgKyBTTVBMMlBL VF9DTlRMKTsKKworCQl2YWwgPSAweDNGMDcwNzsKKwkJd3JpdGVsKHZhbCwgZHAtPnJlZ3MgKyBT UERJRl9DVFJMX0FERFIpOworCX0KKworCWlmIChhdWRpby0+Zm9ybWF0ID09IEFGTVRfU1BESUYp IHsKKwkJY2xrX3ByZXBhcmVfZW5hYmxlKGRwLT5zcGRpZl9jbGspOworCQljbGtfc2V0X3JhdGUo ZHAtPnNwZGlmX2NsaywgNDAwMDAwMDAwKTsKKwl9CisKKwlyZXR1cm4gY2RuX2RwX3JlZ193cml0 ZShkcCwgQVVESU9fUEFDS19DT05UUk9MLCBBVURJT19QQUNLX0VOKDEpKTsKK30KZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9jZG4tZHAtcmVnLmggYi9kcml2ZXJzL2dwdS9k cm0vcm9ja2NoaXAvY2RuLWRwLXJlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLmU3NzVmMTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAv Y2RuLWRwLXJlZy5oCkBAIC0wLDAgKzEsNDA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSBGdXpo b3UgUm9ja2NoaXAgRWxlY3Ryb25pY3MgQ28uTHRkCisgKiBBdXRob3I6IENocmlzIFpob25nIDx6 eXdAcm9jay1jaGlwcy5jb20+CisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9u IDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAq IG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVy bXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9DRE5fRFBfUkVH X0gKKyNkZWZpbmUgX0NETl9EUF9SRUdfSAorCisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisK KyNkZWZpbmUgQUREUl9JTUVNCQkweDEwMDAwCisjZGVmaW5lIEFERFJfRE1FTQkJMHgyMDAwMAor CisvKiBBUEIgQ0ZHIGFkZHIgKi8KKyNkZWZpbmUgQVBCX0NUUkwJCQkwCisjZGVmaW5lIFhUX0lO VF9DVFJMCQkJMHgwNAorI2RlZmluZSBNQUlMQk9YX0ZVTExfQUREUgkJMHgwOAorI2RlZmluZSBN QUlMQk9YX0VNUFRZX0FERFIJCTB4MGMKKyNkZWZpbmUgTUFJTEJPWDBfV1JfREFUQQkJMHgxMAor I2RlZmluZSBNQUlMQk9YMF9SRF9EQVRBCQkweDE0CisjZGVmaW5lIEtFRVBfQUxJVkUJCQkweDE4 CisjZGVmaW5lIFZFUl9MCQkJCTB4MWMKKyNkZWZpbmUgVkVSX0gJCQkJMHgyMAorI2RlZmluZSBW RVJfTElCX0xfQUREUgkJCTB4MjQKKyNkZWZpbmUgVkVSX0xJQl9IX0FERFIJCQkweDI4CisjZGVm aW5lIFNXX0RFQlVHX0wJCQkweDJjCisjZGVmaW5lIFNXX0RFQlVHX0gJCQkweDMwCisjZGVmaW5l IE1BSUxCT1hfSU5UX01BU0sJCTB4MzQKKyNkZWZpbmUgTUFJTEJPWF9JTlRfU1RBVFVTCQkweDM4 CisjZGVmaW5lIFNXX0NMS19MCQkJMHgzYworI2RlZmluZSBTV19DTEtfSAkJCTB4NDAKKyNkZWZp bmUgU1dfRVZFTlRTMAkJCTB4NDQKKyNkZWZpbmUgU1dfRVZFTlRTMQkJCTB4NDgKKyNkZWZpbmUg U1dfRVZFTlRTMgkJCTB4NGMKKyNkZWZpbmUgU1dfRVZFTlRTMwkJCTB4NTAKKyNkZWZpbmUgWFRf T0NEX0NUUkwJCQkweDYwCisjZGVmaW5lIEFQQl9JTlRfTUFTSwkJCTB4NmMKKyNkZWZpbmUgQVBC X1NUQVRVU19NQVNLCQkJMHg3MAorCisvKiBhdWRpbyBkZWNvZGVyIGFkZHIgKi8KKyNkZWZpbmUg QVVESU9fU1JDX0NOVEwJCQkweDMwMDAwCisjZGVmaW5lIEFVRElPX1NSQ19DTkZHCQkJMHgzMDAw NAorI2RlZmluZSBDT01fQ0hfU1RUU19CSVRTCQkweDMwMDA4CisjZGVmaW5lIFNUVFNfQklUX0NI KHgpCQkJKDB4MzAwMGMgKyAoKHgpIDw8IDIpKQorI2RlZmluZSBTUERJRl9DVFJMX0FERFIJCQkw eDMwMDRjCisjZGVmaW5lIFNQRElGX0NIMV9DU18zMTAwX0FERFIJCTB4MzAwNTAKKyNkZWZpbmUg U1BESUZfQ0gxX0NTXzYzMzJfQUREUgkJMHgzMDA1NAorI2RlZmluZSBTUERJRl9DSDFfQ1NfOTU2 NF9BRERSCQkweDMwMDU4CisjZGVmaW5lIFNQRElGX0NIMV9DU18xMjc5Nl9BRERSCQkweDMwMDVj CisjZGVmaW5lIFNQRElGX0NIMV9DU18xNTkxMjhfQUREUgkweDMwMDYwCisjZGVmaW5lIFNQRElG X0NIMV9DU18xOTExNjBfQUREUgkweDMwMDY0CisjZGVmaW5lIFNQRElGX0NIMl9DU18zMTAwX0FE RFIJCTB4MzAwNjgKKyNkZWZpbmUgU1BESUZfQ0gyX0NTXzYzMzJfQUREUgkJMHgzMDA2YworI2Rl ZmluZSBTUERJRl9DSDJfQ1NfOTU2NF9BRERSCQkweDMwMDcwCisjZGVmaW5lIFNQRElGX0NIMl9D U18xMjc5Nl9BRERSCQkweDMwMDc0CisjZGVmaW5lIFNQRElGX0NIMl9DU18xNTkxMjhfQUREUgkw eDMwMDc4CisjZGVmaW5lIFNQRElGX0NIMl9DU18xOTExNjBfQUREUgkweDMwMDdjCisjZGVmaW5l IFNNUEwyUEtUX0NOVEwJCQkweDMwMDgwCisjZGVmaW5lIFNNUEwyUEtUX0NORkcJCQkweDMwMDg0 CisjZGVmaW5lIEZJRk9fQ05UTAkJCTB4MzAwODgKKyNkZWZpbmUgRklGT19TVFRTCQkJMHgzMDA4 YworCisvKiBzb3VyY2UgcGlmIGFkZHIgKi8KKyNkZWZpbmUgU09VUkNFX1BJRl9XUl9BRERSCQkw eDMwODAwCisjZGVmaW5lIFNPVVJDRV9QSUZfV1JfUkVRCQkweDMwODA0CisjZGVmaW5lIFNPVVJD RV9QSUZfUkRfQUREUgkJMHgzMDgwOAorI2RlZmluZSBTT1VSQ0VfUElGX1JEX1JFUQkJMHgzMDgw YworI2RlZmluZSBTT1VSQ0VfUElGX0RBVEFfV1IJCTB4MzA4MTAKKyNkZWZpbmUgU09VUkNFX1BJ Rl9EQVRBX1JECQkweDMwODE0CisjZGVmaW5lIFNPVVJDRV9QSUZfRklGTzFfRkxVU0gJCTB4MzA4 MTgKKyNkZWZpbmUgU09VUkNFX1BJRl9GSUZPMl9GTFVTSAkJMHgzMDgxYworI2RlZmluZSBTT1VS Q0VfUElGX1NUQVRVUwkJMHgzMDgyMAorI2RlZmluZSBTT1VSQ0VfUElGX0lOVEVSUlVQVF9TT1VS Q0UJMHgzMDgyNAorI2RlZmluZSBTT1VSQ0VfUElGX0lOVEVSUlVQVF9NQVNLCTB4MzA4MjgKKyNk ZWZpbmUgU09VUkNFX1BJRl9QS1RfQUxMT0NfUkVHCTB4MzA4MmMKKyNkZWZpbmUgU09VUkNFX1BJ Rl9QS1RfQUxMT0NfV1JfRU4JMHgzMDgzMAorI2RlZmluZSBTT1VSQ0VfUElGX1NXX1JFU0VUCQkw eDMwODM0CisKKy8qIGJlbGxvdyByZWdpc3RlcnMgbmVlZCBhY2Nlc3MgYnkgbWFpbGJveCAqLwor Lyogc291cmNlIGNhciBhZGRyICovCisjZGVmaW5lIFNPVVJDRV9IRFRYX0NBUgkJCTB4MDkwMAor I2RlZmluZSBTT1VSQ0VfRFBUWF9DQVIJCQkweDA5MDQKKyNkZWZpbmUgU09VUkNFX1BIWV9DQVIJ CQkweDA5MDgKKyNkZWZpbmUgU09VUkNFX0NFQ19DQVIJCQkweDA5MGMKKyNkZWZpbmUgU09VUkNF X0NCVVNfQ0FSCQkJMHgwOTEwCisjZGVmaW5lIFNPVVJDRV9QS1RfQ0FSCQkJMHgwOTE4CisjZGVm aW5lIFNPVVJDRV9BSUZfQ0FSCQkJMHgwOTFjCisjZGVmaW5lIFNPVVJDRV9DSVBIRVJfQ0FSCQkw eDA5MjAKKyNkZWZpbmUgU09VUkNFX0NSWVBUT19DQVIJCTB4MDkyNAorCisvKiBjbG9jayBtZXRl cnMgYWRkciAqLworI2RlZmluZSBDTV9DVFJMCQkJCTB4MGEwMAorI2RlZmluZSBDTV9JMlNfQ1RS TAkJCTB4MGEwNAorI2RlZmluZSBDTV9TUERJRl9DVFJMCQkJMHgwYTA4CisjZGVmaW5lIENNX1ZJ RF9DVFJMCQkJMHgwYTBjCisjZGVmaW5lIENNX0xBTkVfQ1RSTAkJCTB4MGExMAorI2RlZmluZSBJ MlNfTk1fU1RBQkxFCQkJMHgwYTE0CisjZGVmaW5lIEkyU19OQ1RTX1NUQUJMRQkJCTB4MGExOAor I2RlZmluZSBTUERJRl9OTV9TVEFCTEUJCQkweDBhMWMKKyNkZWZpbmUgU1BESUZfTkNUU19TVEFC TEUJCTB4MGEyMAorI2RlZmluZSBOTVZJRF9NRUFTX1NUQUJMRQkJMHgwYTI0CisjZGVmaW5lIEky U19NRUFTCQkJMHgwYTQwCisjZGVmaW5lIFNQRElGX01FQVMJCQkweDBhODAKKyNkZWZpbmUgTk1W SURfTUVBUwkJCTB4MGFjMAorCisvKiBzb3VyY2UgdmlmIGFkZHIgKi8KKyNkZWZpbmUgQk5EX0hT WU5DMlZTWU5DCQkJMHgwYjAwCisjZGVmaW5lIEhTWU5DMlZTWU5DX0YxX0wxCQkweDBiMDQKKyNk ZWZpbmUgSFNZTkMyVlNZTkNfRjJfTDEJCTB4MGIwOAorI2RlZmluZSBIU1lOQzJWU1lOQ19TVEFU VVMJCTB4MGIwYworI2RlZmluZSBIU1lOQzJWU1lOQ19QT0xfQ1RSTAkJMHgwYjEwCisKKy8qIGRw dHggcGh5IGFkZHIgKi8KKyNkZWZpbmUgRFBfVFhfUEhZX0NPTkZJR19SRUcJCTB4MjAwMAorI2Rl ZmluZSBEUF9UWF9QSFlfU1RBVFVTX1JFRwkJMHgyMDA0CisjZGVmaW5lIERQX1RYX1BIWV9TV19S RVNFVAkJMHgyMDA4CisjZGVmaW5lIERQX1RYX1BIWV9TQ1JBTUJMRVJfU0VFRAkweDIwMGMKKyNk ZWZpbmUgRFBfVFhfUEhZX1RSQUlOSU5HXzAxXzA0CTB4MjAxMAorI2RlZmluZSBEUF9UWF9QSFlf VFJBSU5JTkdfMDVfMDgJMHgyMDE0CisjZGVmaW5lIERQX1RYX1BIWV9UUkFJTklOR18wOV8xMAkw eDIwMTgKKyNkZWZpbmUgVEVTVF9DT1IJCQkweDIzZmMKKworLyogZHB0eCBocGQgYWRkciAqLwor I2RlZmluZSBIUERfSVJRX0RFVF9NSU5fVElNRVIJCTB4MjEwMAorI2RlZmluZSBIUERfSVJRX0RF VF9NQVhfVElNRVIJCTB4MjEwNAorI2RlZmluZSBIUERfVU5QTEdFRF9ERVRfTUlOX1RJTUVSCTB4 MjEwOAorI2RlZmluZSBIUERfU1RBQkxFX1RJTUVSCQkweDIxMGMKKyNkZWZpbmUgSFBEX0ZJTFRF Ul9USU1FUgkJMHgyMTEwCisjZGVmaW5lIEhQRF9FVkVOVF9NQVNLCQkJMHgyMTFjCisjZGVmaW5l IEhQRF9FVkVOVF9ERVQJCQkweDIxMjAKKworLyogZHB5eCBmcmFtZXIgYWRkciAqLworI2RlZmlu ZSBEUF9GUkFNRVJfR0xPQkFMX0NPTkZJRwkJMHgyMjAwCisjZGVmaW5lIERQX1NXX1JFU0VUCQkJ MHgyMjA0CisjZGVmaW5lIERQX0ZSQU1FUl9UVQkJCTB4MjIwOAorI2RlZmluZSBEUF9GUkFNRVJf UFhMX1JFUFIJCTB4MjIwYworI2RlZmluZSBEUF9GUkFNRVJfU1AJCQkweDIyMTAKKyNkZWZpbmUg QVVESU9fUEFDS19DT05UUk9MCQkweDIyMTQKKyNkZWZpbmUgRFBfVkNfVEFCTEUoeCkJCQkoMHgy MjE4ICsgKCh4KSA8PCAyKSkKKyNkZWZpbmUgRFBfVkJfSUQJCQkweDIyNTgKKyNkZWZpbmUgRFBf TVRQSF9MVlBfQ09OVFJPTAkJMHgyMjVjCisjZGVmaW5lIERQX01UUEhfU1lNQk9MX1ZBTFVFUwkJ MHgyMjYwCisjZGVmaW5lIERQX01UUEhfRUNGX0NPTlRST0wJCTB4MjI2NAorI2RlZmluZSBEUF9N VFBIX0FDVF9DT05UUk9MCQkweDIyNjgKKyNkZWZpbmUgRFBfTVRQSF9TVEFUVVMJCQkweDIyNmMK KyNkZWZpbmUgRFBfSU5URVJSVVBUX1NPVVJDRQkJMHgyMjcwCisjZGVmaW5lIERQX0lOVEVSUlVQ VF9NQVNLCQkweDIyNzQKKyNkZWZpbmUgRFBfRlJPTlRfQkFDS19QT1JDSAkJMHgyMjc4CisjZGVm aW5lIERQX0JZVEVfQ09VTlQJCQkweDIyN2MKKworLyogZHB0eCBzdHJlYW0gYWRkciAqLworI2Rl ZmluZSBNU0FfSE9SSVpPTlRBTF8wCQkweDIyODAKKyNkZWZpbmUgTVNBX0hPUklaT05UQUxfMQkJ MHgyMjg0CisjZGVmaW5lIE1TQV9WRVJUSUNBTF8wCQkJMHgyMjg4CisjZGVmaW5lIE1TQV9WRVJU SUNBTF8xCQkJMHgyMjhjCisjZGVmaW5lIE1TQV9NSVNDCQkJMHgyMjkwCisjZGVmaW5lIFNUUkVB TV9DT05GSUcJCQkweDIyOTQKKyNkZWZpbmUgQVVESU9fUEFDS19TVEFUVVMJCTB4MjI5OAorI2Rl ZmluZSBWSUZfU1RBVFVTCQkJMHgyMjljCisjZGVmaW5lIFBDS19TVFVGRl9TVEFUVVNfMAkJMHgy MmEwCisjZGVmaW5lIFBDS19TVFVGRl9TVEFUVVNfMQkJMHgyMmE0CisjZGVmaW5lIElORk9fUEFD S19TVEFUVVMJCTB4MjJhOAorI2RlZmluZSBSQVRFX0dPVkVSTk9SX1NUQVRVUwkJMHgyMmFjCisj ZGVmaW5lIERQX0hPUklaT05UQUwJCQkweDIyYjAKKyNkZWZpbmUgRFBfVkVSVElDQUxfMAkJCTB4 MjJiNAorI2RlZmluZSBEUF9WRVJUSUNBTF8xCQkJMHgyMmI4CisjZGVmaW5lIERQX0JMT0NLX1NE UAkJCTB4MjJiYworCisvKiBkcHR4IGdsYmwgYWRkciAqLworI2RlZmluZSBEUFRYX0xBTkVfRU4J CQkweDIzMDAKKyNkZWZpbmUgRFBUWF9FTkhOQ0QJCQkweDIzMDQKKyNkZWZpbmUgRFBUWF9JTlRf TUFTSwkJCTB4MjMwOAorI2RlZmluZSBEUFRYX0lOVF9TVEFUVVMJCQkweDIzMGMKKworLyogZHAg YXV4IGFkZHIgKi8KKyNkZWZpbmUgRFBfQVVYX0hPU1RfQ09OVFJPTAkJMHgyODAwCisjZGVmaW5l IERQX0FVWF9JTlRFUlJVUFRfU09VUkNFCQkweDI4MDQKKyNkZWZpbmUgRFBfQVVYX0lOVEVSUlVQ VF9NQVNLCQkweDI4MDgKKyNkZWZpbmUgRFBfQVVYX1NXQVBfSU5WRVJTSU9OX0NPTlRST0wJMHgy ODBjCisjZGVmaW5lIERQX0FVWF9TRU5EX05BQ0tfVFJBTlNBQ1RJT04JMHgyODEwCisjZGVmaW5l IERQX0FVWF9DTEVBUl9SWAkJCTB4MjgxNAorI2RlZmluZSBEUF9BVVhfQ0xFQVJfVFgJCQkweDI4 MTgKKyNkZWZpbmUgRFBfQVVYX1RJTUVSX1NUT1AJCTB4MjgxYworI2RlZmluZSBEUF9BVVhfVElN RVJfQ0xFQVIJCTB4MjgyMAorI2RlZmluZSBEUF9BVVhfUkVTRVRfU1cJCQkweDI4MjQKKyNkZWZp bmUgRFBfQVVYX0RJVklERV8yTQkJMHgyODI4CisjZGVmaW5lIERQX0FVWF9UWF9QUkVBQ0hBUkdF X0xFTkdUSAkweDI4MmMKKyNkZWZpbmUgRFBfQVVYX0ZSRVFVRU5DWV8xTV9NQVgJCTB4MjgzMAor I2RlZmluZSBEUF9BVVhfRlJFUVVFTkNZXzFNX01JTgkJMHgyODM0CisjZGVmaW5lIERQX0FVWF9S WF9QUkVfTUlOCQkweDI4MzgKKyNkZWZpbmUgRFBfQVVYX1JYX1BSRV9NQVgJCTB4MjgzYworI2Rl ZmluZSBEUF9BVVhfVElNRVJfUFJFU0VUCQkweDI4NDAKKyNkZWZpbmUgRFBfQVVYX05BQ0tfRk9S TUFUCQkweDI4NDQKKyNkZWZpbmUgRFBfQVVYX1RYX0RBVEEJCQkweDI4NDgKKyNkZWZpbmUgRFBf QVVYX1JYX0RBVEEJCQkweDI4NGMKKyNkZWZpbmUgRFBfQVVYX1RYX1NUQVRVUwkJMHgyODUwCisj ZGVmaW5lIERQX0FVWF9SWF9TVEFUVVMJCTB4Mjg1NAorI2RlZmluZSBEUF9BVVhfUlhfQ1lDTEVf Q09VTlRFUgkJMHgyODU4CisjZGVmaW5lIERQX0FVWF9NQUlOX1NUQVRFUwkJMHgyODVjCisjZGVm aW5lIERQX0FVWF9NQUlOX1RJTUVSCQkweDI4NjAKKyNkZWZpbmUgRFBfQVVYX0FGRV9PVVQJCQkw eDI4NjQKKworLyogY3J5cHRvIGFkZHIgKi8KKyNkZWZpbmUgQ1JZUFRPX0hEQ1BfUkVWSVNJT04J CTB4NTgwMAorI2RlZmluZSBIRENQX0NSWVBUT19DT05GSUcJCTB4NTgwNAorI2RlZmluZSBDUllQ VE9fSU5URVJSVVBUX1NPVVJDRQkJMHg1ODA4CisjZGVmaW5lIENSWVBUT19JTlRFUlJVUFRfTUFT SwkJMHg1ODBjCisjZGVmaW5lIENSWVBUTzIyX0NPTkZJRwkJCTB4NTgxOAorI2RlZmluZSBDUllQ VE8yMl9TVEFUVVMJCQkweDU4MWMKKyNkZWZpbmUgU0hBXzI1Nl9EQVRBX0lOCQkJMHg1ODNjCisj ZGVmaW5lIFNIQV8yNTZfREFUQV9PVVRfKHgpCQkoMHg1ODUwICsgKCh4KSA8PCAyKSkKKyNkZWZp bmUgQUVTXzMyX0tFWV8oeCkJCQkoMHg1ODcwICsgKCh4KSA8PCAyKSkKKyNkZWZpbmUgQUVTXzMy X0RBVEFfSU4JCQkweDU4ODAKKyNkZWZpbmUgQUVTXzMyX0RBVEFfT1VUXyh4KQkJKDB4NTg4NCAr ICgoeCkgPDwgMikpCisjZGVmaW5lIENSWVBUTzE0X0NPTkZJRwkJCTB4NThhMAorI2RlZmluZSBD UllQVE8xNF9TVEFUVVMJCQkweDU4YTQKKyNkZWZpbmUgQ1JZUFRPMTRfUFJOTV9PVVQJCTB4NThh OAorI2RlZmluZSBDUllQVE8xNF9LTV8wCQkJMHg1OGFjCisjZGVmaW5lIENSWVBUTzE0X0tNXzEJ CQkweDU4YjAKKyNkZWZpbmUgQ1JZUFRPMTRfQU5fMAkJCTB4NThiNAorI2RlZmluZSBDUllQVE8x NF9BTl8xCQkJMHg1OGI4CisjZGVmaW5lIENSWVBUTzE0X1lPVVJfS1NWXzAJCTB4NThiYworI2Rl ZmluZSBDUllQVE8xNF9ZT1VSX0tTVl8xCQkweDU4YzAKKyNkZWZpbmUgQ1JZUFRPMTRfTUlfMAkJ CTB4NThjNAorI2RlZmluZSBDUllQVE8xNF9NSV8xCQkJMHg1OGM4CisjZGVmaW5lIENSWVBUTzE0 X1RJXzAJCQkweDU4Y2MKKyNkZWZpbmUgQ1JZUFRPMTRfS0lfMAkJCTB4NThkMAorI2RlZmluZSBD UllQVE8xNF9LSV8xCQkJMHg1OGQ0CisjZGVmaW5lIENSWVBUTzE0X0JMT0NLU19OVU0JCTB4NThk OAorI2RlZmluZSBDUllQVE8xNF9LRVlfTUVNX0RBVEFfMAkJMHg1OGRjCisjZGVmaW5lIENSWVBU TzE0X0tFWV9NRU1fREFUQV8xCQkweDU4ZTAKKyNkZWZpbmUgQ1JZUFRPMTRfU0hBMV9NU0dfREFU QQkJMHg1OGU0CisjZGVmaW5lIENSWVBUTzE0X1NIQTFfVl9WQUxVRV8oeCkJKDB4NThlOCArICgo eCkgPDwgMikpCisjZGVmaW5lIFRSTkdfQ1RSTAkJCTB4NThmYworI2RlZmluZSBUUk5HX0RBVEFf UkRZCQkJMHg1OTAwCisjZGVmaW5lIFRSTkdfREFUQQkJCTB4NTkwNAorCisvKiBjaXBoZXIgYWRk ciAqLworI2RlZmluZSBIRENQX1JFVklTSU9OCQkJMHg2MDAwMAorI2RlZmluZSBJTlRFUlJVUFRf U09VUkNFCQkweDYwMDA0CisjZGVmaW5lIElOVEVSUlVQVF9NQVNLCQkJMHg2MDAwOAorI2RlZmlu ZSBIRENQX0NJUEhFUl9DT05GSUcJCTB4NjAwMGMKKyNkZWZpbmUgQUVTXzEyOF9LRVlfMAkJCTB4 NjAwMTAKKyNkZWZpbmUgQUVTXzEyOF9LRVlfMQkJCTB4NjAwMTQKKyNkZWZpbmUgQUVTXzEyOF9L RVlfMgkJCTB4NjAwMTgKKyNkZWZpbmUgQUVTXzEyOF9LRVlfMwkJCTB4NjAwMWMKKyNkZWZpbmUg QUVTXzEyOF9SQU5ET01fMAkJMHg2MDAyMAorI2RlZmluZSBBRVNfMTI4X1JBTkRPTV8xCQkweDYw MDI0CisjZGVmaW5lIENJUEhFUjE0X0tNXzAJCQkweDYwMDI4CisjZGVmaW5lIENJUEhFUjE0X0tN XzEJCQkweDYwMDJjCisjZGVmaW5lIENJUEhFUjE0X1NUQVRVUwkJCTB4NjAwMzAKKyNkZWZpbmUg Q0lQSEVSMTRfUklfUEpfU1RBVFVTCQkweDYwMDM0CisjZGVmaW5lIENJUEhFUl9NT0RFCQkJMHg2 MDAzOAorI2RlZmluZSBDSVBIRVIxNF9BTl8wCQkJMHg2MDAzYworI2RlZmluZSBDSVBIRVIxNF9B Tl8xCQkJMHg2MDA0MAorI2RlZmluZSBDSVBIRVIyMl9BVVRICQkJMHg2MDA0NAorI2RlZmluZSBD SVBIRVIxNF9SMF9EUF9TVEFUVVMJCTB4NjAwNDgKKyNkZWZpbmUgQ0lQSEVSMTRfQk9PVFNUUkFQ CQkweDYwMDRjCisKKyNkZWZpbmUgQVBCX0lSQU1fUEFUSAkJCUJJVCgyKQorI2RlZmluZSBBUEJf RFJBTV9QQVRICQkJQklUKDEpCisjZGVmaW5lIEFQQl9YVF9SRVNFVAkJCUJJVCgwKQorCisvKiBt YWlsYm94ICovCisjZGVmaW5lIE1CX09QQ09ERV9JRAkJCTAKKyNkZWZpbmUgTUJfTU9EVUxFX0lE CQkJMQorI2RlZmluZSBNQl9TSVpFX01TQl9JRAkJCTIKKyNkZWZpbmUgTUJfU0laRV9MU0JfSUQJ CQkzCisjZGVmaW5lIE1CX0RBVEFfSUQJCQk0CisKKyNkZWZpbmUgTUJfTU9EVUxFX0lEX0RQX1RY CQkweDAxCisjZGVmaW5lIE1CX01PRFVMRV9JRF9IRENQX1RYCQkweDA3CisjZGVmaW5lIE1CX01P RFVMRV9JRF9IRENQX1JYCQkweDA4CisjZGVmaW5lIE1CX01PRFVMRV9JRF9IRENQX0dFTkVSQUwJ MHgwOQorI2RlZmluZSBNQl9NT0RVTEVfSURfR0VORVJBTAkJMHgwYQorCisvKiBnZW5lcmFsIG9w Y29kZSAqLworI2RlZmluZSBHRU5FUkFMX01BSU5fQ09OVFJPTCAgICAgICAgICAgIDB4MDEKKyNk ZWZpbmUgR0VORVJBTF9URVNUX0VDSE8gICAgICAgICAgICAgICAweDAyCisjZGVmaW5lIEdFTkVS QUxfQlVTX1NFVFRJTkdTICAgICAgICAgICAgMHgwMworI2RlZmluZSBHRU5FUkFMX1RFU1RfQUND RVNTICAgICAgICAgICAgIDB4MDQKKworI2RlZmluZSBEUFRYX1NFVF9QT1dFUl9NTkcJCQkweDAw CisjZGVmaW5lIERQVFhfU0VUX0hPU1RfQ0FQQUJJTElUSUVTCQkweDAxCisjZGVmaW5lIERQVFhf R0VUX0VESUQJCQkJMHgwMgorI2RlZmluZSBEUFRYX1JFQURfRFBDRAkJCQkweDAzCisjZGVmaW5l IERQVFhfV1JJVEVfRFBDRAkJCQkweDA0CisjZGVmaW5lIERQVFhfRU5BQkxFX0VWRU5UCQkJMHgw NQorI2RlZmluZSBEUFRYX1dSSVRFX1JFR0lTVEVSCQkJMHgwNgorI2RlZmluZSBEUFRYX1JFQURf UkVHSVNURVIJCQkweDA3CisjZGVmaW5lIERQVFhfV1JJVEVfRklFTEQJCQkweDA4CisjZGVmaW5l IERQVFhfVFJBSU5JTkdfQ09OVFJPTAkJCTB4MDkKKyNkZWZpbmUgRFBUWF9SRUFEX0VWRU5UCQkJ CTB4MGEKKyNkZWZpbmUgRFBUWF9SRUFEX0xJTktfU1RBVAkJCTB4MGIKKyNkZWZpbmUgRFBUWF9T RVRfVklERU8JCQkJMHgwYworI2RlZmluZSBEUFRYX1NFVF9BVURJTwkJCQkweDBkCisjZGVmaW5l IERQVFhfR0VUX0xBU1RfQVVYX1NUQVVTCQkJMHgwZQorI2RlZmluZSBEUFRYX1NFVF9MSU5LX0JS RUFLX1BPSU5UCQkweDBmCisjZGVmaW5lIERQVFhfRk9SQ0VfTEFORVMJCQkweDEwCisjZGVmaW5l IERQVFhfSFBEX1NUQVRFCQkJCTB4MTEKKworI2RlZmluZSBEUFRYX0VWRU5UX0VOQUJMRV9IUEQJ CQlCSVQoMCkKKyNkZWZpbmUgRFBUWF9FVkVOVF9FTkFCTEVfVFJBSU5JTkcJCUJJVCgxKQorCisj ZGVmaW5lIExJTktfVFJBSU5JTkdfTk9UX0FDVElWRQkJMAorI2RlZmluZSBMSU5LX1RSQUlOSU5H X1JVTgkJCTEKKyNkZWZpbmUgTElOS19UUkFJTklOR19SRVNUQVJUCQkJMgorCisjZGVmaW5lIENP TlRST0xfVklERU9fSURMRQkJCTAKKyNkZWZpbmUgQ09OVFJPTF9WSURFT19WQUxJRAkJCTEKKwor I2RlZmluZSBWSUZfQllQQVNTX0lOVEVSTEFDRQkJCUJJVCgxMykKKyNkZWZpbmUgSU5URVJMQUNF X0ZNVF9ERVQJCQlCSVQoMTIpCisjZGVmaW5lIElOVEVSTEFDRV9EVENUX1dJTgkJCTB4MjAKKwor I2RlZmluZSBEUF9GUkFNRVJfU1BfSU5URVJMQUNFX0VOCQlCSVQoMikKKyNkZWZpbmUgRFBfRlJB TUVSX1NQX0hTUAkJCUJJVCgxKQorI2RlZmluZSBEUF9GUkFNRVJfU1BfVlNQCQkJQklUKDApCisK Ky8qIGNhcGFiaWxpdHkgKi8KKyNkZWZpbmUgQVVYX0hPU1RfSU5WRVJUCQkJCTMKKyNkZWZpbmUJ RkFTVF9MVF9TVVBQT1JUCQkJCTEKKyNkZWZpbmUgRkFTVF9MVF9OT1RfU1VQUE9SVAkJCTAKKyNk ZWZpbmUgTEFORV9NQVBQSU5HX05PUk1BTAkJCTB4ZTQKKyNkZWZpbmUgTEFORV9NQVBQSU5HX0ZM SVBQRUQJCQkweDFiCisjZGVmaW5lIEVOSEFOQ0VECQkJCTEKKworI2RlZmluZQlGVUxMX0xUX1NU QVJURUQJCQkJQklUKDApCisjZGVmaW5lIEZBU0VfTFRfU1RBUlRFRAkJCQlCSVQoMSkKKyNkZWZp bmUgQ0xLX1JFQ09WRVJZX0ZJTklTSEVECQkJQklUKDIpCisjZGVmaW5lIEVRX1BIQVNFX0ZJTklT SEVECQkJQklUKDMpCisjZGVmaW5lIEZBU0VfTFRfU1RBUlRfRklOSVNIRUQJCQlCSVQoNCkKKyNk ZWZpbmUgQ0xLX1JFQ09WRVJZX0ZBSUxFRAkJCUJJVCg1KQorI2RlZmluZSBFUV9QSEFTRV9GQUlM RUQJCQkJQklUKDYpCisjZGVmaW5lIEZBU0VfTFRfRkFJTEVECQkJCUJJVCg3KQorCisjZGVmaW5l IERQVFhfSFBEX0VWRU5UCQkJCUJJVCgwKQorI2RlZmluZSBEUFRYX1RSQUlOSU5HX0VWRU5UCQkJ QklUKDEpCisjZGVmaW5lIEhEQ1BfVFhfU1RBVFVTX0VWRU5UCQkJQklUKDQpCisjZGVmaW5lIEhE Q1AyX1RYX0lTX0tNX1NUT1JFRF9FVkVOVAkJQklUKDUpCisjZGVmaW5lIEhEQ1AyX1RYX1NUT1JF X0tNX0VWRU5UCQkJQklUKDYpCisjZGVmaW5lIEhEQ1BfVFhfSVNfUkVDRUlWRVJfSURfVkFMSURf RVZFTlQJQklUKDcpCisKKyNkZWZpbmUgRURJRF9MRU5HVEhfQllURQkJCTAKKyNkZWZpbmUgRURJ RF9TRUdNRU5UX0JVTUJFUgkJCTEKKyNkZWZpbmUgRURJRF9EQVRBCQkJCTIKKyNkZWZpbmUgRURJ RF9CTE9DS19TSVpFCQkJCTEyOAorCisjZGVmaW5lIFRVX1NJWkUJCQkJCTY0CisKKy8qIGF1ZGlv ICovCisjZGVmaW5lIEFVRElPX1BBQ0tfRU4oeCkJCQkoKHgpIDw8IDgpCisjZGVmaW5lIFNBTVBM SU5HX0ZSRVEoeCkJCQkoKHgpIDw8IDE2KQorI2RlZmluZSBPUklHSU5BTF9TQU1QX0ZSRVEoeCkJ CQkoKHgpIDw8IDI0KQorI2RlZmluZSBTWU5DX1dSX1RPX0NIX1pFUk8JCQlCSVQoMSkKKworZW51 bSB2b2x0YWdlX3N3aW5nX2xldmVsIHsKKwlWT0xUQUdFX0xFVkVMXzAsCisJVk9MVEFHRV9MRVZF TF8xLAorCVZPTFRBR0VfTEVWRUxfMiwKKwlWT0xUQUdFX0xFVkVMXzMsCit9OworCitlbnVtIHBy ZV9lbXBoYXNpc19sZXZlbCB7CisJUFJFX0VNUEhBU0lTX0xFVkVMXzAsCisJUFJFX0VNUEhBU0lT X0xFVkVMXzEsCisJUFJFX0VNUEhBU0lTX0xFVkVMXzIsCisJUFJFX0VNUEhBU0lTX0xFVkVMXzMs Cit9OworCitlbnVtIHBhdHRlcm5fc2V0IHsKKwlQUkJTNwkJPSBCSVQoMCksCisJRDEwXzIJCT0g QklUKDEpLAorCVRSQUlOSU5HX1BUTjEJPSBCSVQoMiksCisJVFJBSU5JTkdfUFROMgk9IEJJVCgz KSwKKwlEUF9OT05FCQk9IEJJVCg0KQorfTsKKworZW51bSBWSUNfUFhMX0VOQ09ESU5HX0ZPUk1B VCB7CisJUFhMX1JHQiA9IDB4MSwKKwlZQ0JDUl80XzRfNCA9IDB4MiwKKwlZQ0JDUl80XzJfMiA9 IDB4NCwKKwlZQ0JDUl80XzJfMCA9IDB4OCwKKwlZX09OTFkgPSAweDEwLAorfTsKKworZW51bSBW SUNfQ09MT1JfREVQVEggeworCUJDU182ID0gMHgxLAorCUJDU184ID0gMHgyLAorCUJDU18xMCA9 IDB4NCwKKwlCQ1NfMTIgPSAweDgsCisJQkNTXzE2ID0gMHgxMCwKK307CisKKyNlbmRpZiAvKiBf Q0ROX0RQX1JFR19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9j a2NoaXBfZHJtX3ZvcC5jIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV92 b3AuYwppbmRleCBlZGQ3ZWMyLi45ODMwMmIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v cm9ja2NoaXAvcm9ja2NoaXBfZHJtX3ZvcC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hp cC9yb2NrY2hpcF9kcm1fdm9wLmMKQEAgLTk2OSw3ICs5NjksNyBAQCBzdGF0aWMgdm9pZCB2b3Bf Y3J0Y19lbmFibGUoc3RydWN0IGRybV9jcnRjICpjcnRjKQogCQl2b3BfZHNwX2hvbGRfdmFsaWRf aXJxX2Rpc2FibGUodm9wKTsKIAl9CiAKLQlwaW5fcG9sID0gMHg4OworCXBpbl9wb2wgPSAocy0+ b3V0cHV0X3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX0Rpc3BsYXlQb3J0KSA/IDAgOiAweDg7 CiAJcGluX3BvbCB8PSAoYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX05IU1lO QykgPyAwIDogMTsKIAlwaW5fcG9sIHw9IChhZGp1c3RlZF9tb2RlLT5mbGFncyAmIERSTV9NT0RF X0ZMQUdfTlZTWU5DKSA/IDAgOiAoMSA8PCAxKTsKIAlWT1BfQ1RSTF9TRVQodm9wLCBwaW5fcG9s LCBwaW5fcG9sKTsKQEAgLTk5MSw2ICs5OTEsMTAgQEAgc3RhdGljIHZvaWQgdm9wX2NydGNfZW5h YmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIAkJVk9QX0NUUkxfU0VUKHZvcCwgbWlwaV9waW5f cG9sLCBwaW5fcG9sKTsKIAkJVk9QX0NUUkxfU0VUKHZvcCwgbWlwaV9lbiwgMSk7CiAJCWJyZWFr OworCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0Rpc3BsYXlQb3J0OgorCQlWT1BfQ1RSTF9TRVQo dm9wLCBkcF9waW5fcG9sLCBwaW5fcG9sKTsKKwkJVk9QX0NUUkxfU0VUKHZvcCwgZHBfZW4sIDEp OworCQlicmVhazsKIAlkZWZhdWx0OgogCQlEUk1fRVJST1IoInVuc3VwcG9ydCBjb25uZWN0b3Jf dHlwZVslZF1cbiIsIHMtPm91dHB1dF90eXBlKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3ZvcC5oIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tj aGlwL3JvY2tjaGlwX2RybV92b3AuaAppbmRleCBmZjRmNTJlLi41MGEwNDVjIDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3ZvcC5oCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fdm9wLmgKQEAgLTQ1LDYgKzQ1LDcgQEAg c3RydWN0IHZvcF9jdHJsIHsKIAlzdHJ1Y3Qgdm9wX3JlZyBlZHBfZW47CiAJc3RydWN0IHZvcF9y ZWcgaGRtaV9lbjsKIAlzdHJ1Y3Qgdm9wX3JlZyBtaXBpX2VuOworCXN0cnVjdCB2b3BfcmVnIGRw X2VuOwogCXN0cnVjdCB2b3BfcmVnIG91dF9tb2RlOwogCXN0cnVjdCB2b3BfcmVnIGRpdGhlcl9k b3duOwogCXN0cnVjdCB2b3BfcmVnIGRpdGhlcl91cDsKQEAgLTUzLDYgKzU0LDcgQEAgc3RydWN0 IHZvcF9jdHJsIHsKIAlzdHJ1Y3Qgdm9wX3JlZyBoZG1pX3Bpbl9wb2w7CiAJc3RydWN0IHZvcF9y ZWcgZWRwX3Bpbl9wb2w7CiAJc3RydWN0IHZvcF9yZWcgbWlwaV9waW5fcG9sOworCXN0cnVjdCB2 b3BfcmVnIGRwX3Bpbl9wb2w7CiAKIAlzdHJ1Y3Qgdm9wX3JlZyBodG90YWxfcHc7CiAJc3RydWN0 IHZvcF9yZWcgaGFjdF9zdF9lbmQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2No aXAvcm9ja2NoaXBfdm9wX3JlZy5jIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlw X3ZvcF9yZWcuYwppbmRleCA1YjFhZTFmLi5kY2YxNzJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfdm9wX3JlZy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9y b2NrY2hpcC9yb2NrY2hpcF92b3BfcmVnLmMKQEAgLTI4MSw2ICsyODEsNyBAQCBzdGF0aWMgY29u c3Qgc3RydWN0IHZvcF9kYXRhIHJrMzI4OF92b3AgPSB7CiBzdGF0aWMgY29uc3Qgc3RydWN0IHZv cF9jdHJsIHJrMzM5OV9jdHJsX2RhdGEgPSB7CiAJLnN0YW5kYnkgPSBWT1BfUkVHKFJLMzM5OV9T WVNfQ1RSTCwgMHgxLCAyMiksCiAJLmdhdGVfZW4gPSBWT1BfUkVHKFJLMzM5OV9TWVNfQ1RSTCwg MHgxLCAyMyksCisJLmRwX2VuID0gVk9QX1JFRyhSSzMzOTlfU1lTX0NUUkwsIDB4MSwgMTEpLAog CS5yZ2JfZW4gPSBWT1BfUkVHKFJLMzM5OV9TWVNfQ1RSTCwgMHgxLCAxMiksCiAJLmhkbWlfZW4g PSBWT1BfUkVHKFJLMzM5OV9TWVNfQ1RSTCwgMHgxLCAxMyksCiAJLmVkcF9lbiA9IFZPUF9SRUco UkszMzk5X1NZU19DVFJMLCAweDEsIDE0KSwKQEAgLTI5MCw2ICsyOTEsNyBAQCBzdGF0aWMgY29u c3Qgc3RydWN0IHZvcF9jdHJsIHJrMzM5OV9jdHJsX2RhdGEgPSB7CiAJLmRhdGFfYmxhbmsgPSBW T1BfUkVHKFJLMzM5OV9EU1BfQ1RSTDAsIDB4MSwgMTkpLAogCS5vdXRfbW9kZSA9IFZPUF9SRUco UkszMzk5X0RTUF9DVFJMMCwgMHhmLCAwKSwKIAkucmdiX3Bpbl9wb2wgPSBWT1BfUkVHKFJLMzM5 OV9EU1BfQ1RSTDEsIDB4ZiwgMTYpLAorCS5kcF9waW5fcG9sID0gVk9QX1JFRyhSSzMzOTlfRFNQ X0NUUkwxLCAweGYsIDE2KSwKIAkuaGRtaV9waW5fcG9sID0gVk9QX1JFRyhSSzMzOTlfRFNQX0NU UkwxLCAweGYsIDIwKSwKIAkuZWRwX3Bpbl9wb2wgPSBWT1BfUkVHKFJLMzM5OV9EU1BfQ1RSTDEs IDB4ZiwgMjQpLAogCS5taXBpX3Bpbl9wb2wgPSBWT1BfUkVHKFJLMzM5OV9EU1BfQ1RSTDEsIDB4 ZiwgMjgpLAotLSAKMi42LjMKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVz a3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9k cmktZGV2ZWwK