From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Zhong Subject: [PATCH v15 3/5] drm/rockchip: cdn-dp: add cdn DP support for rk3399 Date: Fri, 9 Sep 2016 19:15:46 -0700 Message-ID: <1473473748-22331-4-git-send-email-zyw@rock-chips.com> References: <1473473748-22331-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: <1473473748-22331-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, myungjoo.ham@samsung.com, cw00.choi@samsung.com, wulf@rock-chips.com, marcheu@chromium.org, briannorris@chromium.org, zhengxing@rock-chips.com, cychiang@chromium.org, hychao@chromium.org, broonie@kernel.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 IC9saWIvZmlybXdhcmUvcm9ja2NoaXAvZHB0eC5iaW4uIFRoZQp1Q1BVIGluIGNoYXJnZSBvZiBh dXggY29tbXVuaWNhdGlvbiBhbmQgbGluayB0cmFpbmluZywgdGhlIGhvc3QgdXNlCm1haWxib3gg dG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgdWNwdS4KVGhlIGRjbGsgcGluX3BvbCBvZiB2b3AgbXVz dCBub3QgYmUgaW52ZXJ0IGZvciBEUC4KClNpZ25lZC1vZmYtYnk6IENocmlzIFpob25nIDx6eXdA cm9jay1jaGlwcy5jb20+ClNpZ25lZC1vZmYtYnk6IFNlYW4gUGF1bCA8c2VhbnBhdWxAY2hyb21p dW0ub3JnPgpSZXZpZXdlZC1ieTogU2VhbiBQYXVsIDxzZWFucGF1bEBjaHJvbWl1bS5vcmc+CkFj a2VkLWJ5OiBNYXJrIFlhbyA8bWFyay55YW9Acm9jay1jaGlwcy5jb20+CgotLS0KCkNoYW5nZXMg aW4gdjE1OgpDaHJpcyBaaG9uZydzIGNoYW5nZXM6Ci0gZml4IGRpc2FibGUgcGh5IHVuYmFsYW5j ZQotIHN1cHBvcnQgQXBwbGUgRG9jayBob3QtcGx1ZyBpbiBIRE1JIHBvcnQKLSByZXRyYWluaW5n IHdoZW4gQXBwbGUgRG9jayBocGQgaXJxIGNvbWluZwpTZWFuIFBhdWwncyBjaGFuZ2VzOgotIFJl c3RydWN0dXJlZCB0aGUgd29ya2VyCi0gU3luY2hyb25pemVkIGJldHdlZW4gd29ya2VyICYgZHJt IGhvb2tzCi0gUHJvcGVybHkgaW1wbGVtZW50ZWQgZW5hYmxlL2Rpc2FibGUKLSBBZGRlZCBlcnJv ciBjaGVja2luZwotIFVzZSBkZXZtIHZhcmlhbnQgb2YgZXh0Y29uCi0gVXNlIERSTV9ERVZfKiBs b2dnaW5nCi0gUmVmYWN0b3JlZCBjb2RlIHRvIChob3BlZnVsbHkpIGJlIG1vcmUgY2xlYXIKCkNo YW5nZXMgaW4gdjE0OgotIE1vZGlmeSBzb21lIGdyYW1tYXRpY2FsIGVycm9ycwotIHJlbW92ZSB0 aGUgbXV0ZXggYXJvdW5kIGNkbl9kcF9hdWRpb19nZXRfZWxkCi0gcG93ZXIgb24gdGhlIHBvd2Vy IGRvbWFpbiBhZnRlciBjbGtfZW5hYmxlCi0gcmV0cnkgdG8gcmVhZCBlZGlkCi0gY2hhbmdlIHN1 cGVyIHNwZWVkIHByb3BlcnR5IG5hbWUgdG8gRVhUQ09OX1BST1BfVVNCX1NTCi0gZG8gYSBjb3Jy ZWN0IG1vZGVfdmFsaWQgY2hlY2sgd2hlbiBicGMgaXMgMAoKQ2hhbmdlcyBpbiB2MTM6Ci0gc3Vw cG9ydCBzdXNwZW5kL3Jlc3VtZQotIHN3aXRjaCBwb3dlciBkb21haW4gZHluYW1pY2FsbHkKLSBy ZS10cmFpbmluZyB3aGVuIGhwZCBzaWduYWwgaXMgdHJpZ2dlcmVkCgpDaGFuZ2VzIGluIHYxMjoK LSB1c2UgRVhUQ09OX1BST1BfVVNCX1NVUEVSU1BFRUQgdG8gcmVwbGFjZSBFWFRDT05fVVNCX0hP U1QKCkNoYW5nZXMgaW4gdjExOgotIGFkZCBiZXN0X2VuY29kZXIgYmFjaywgc2luY2UgaXQgcmVx dWlyZWQgYnkgZHJtX2F0b21pY19oZWxwZXJfY2hlY2sKCkNoYW5nZXMgaW4gdjEwOgotIHJlbW92 ZSBiZXN0X2VuY29kZXIgb3BzCi0gc3VwcG9ydCByZWFkIHNpbmsgY291bnQgZnJvbSBEUENECi0g Y29udHJvbCB0aGUgZ3JmX2NsayBpbiBEUAoKQ2hhbmdlcyBpbiB2OToKLSBkbyBub3QgbmVlZCBy ZXNldCB0aGUgcGh5IGJlZm9yZSBwb3dlcl9vbgotIGFkZCBhIG9yaWVudGF0aW9uIGluZm9ybWF0 aW9uIGZvciBzZXRfY2FwYWJpbGl0eQotIHJldHJ5IHRvIHJlYWQgZHBjZCBpbiAxMCBzZWNvbmRz CgpDaGFuZ2VzIGluIHY4OgotIG9wdGltaXphdGlvbiB0aGUgZXJyIGxvZwoKQ2hhbmdlcyBpbiB2 NzoKLSBzdXBwb3J0IGZpcm13YXJlIHN0YW5kYnkgd2hlbiBubyBkcHR4IGNvbm5lY3Rpb24KLSBv cHRpbWl6YXRpb24gdGhlIGNhbGN1bGF0aW9uIG9mIHR1IHNpemUgYW5kIHZhbGlkIHN5bWJvbAoK Q2hhbmdlcyBpbiB2NjoKLSBhZGQgYSBwb3J0IHN0cnVjdAotIHNlbGVjdCBTTkRfU09DX0hETUlf Q09ERUMKLSBmb3JjZSByZXNldCB0aGUgcGh5IHdoZW4gaHBkIGRldGVjdGVkCgpDaGFuZ2VzIGlu IHY1OgotIGFscGhhYmV0aWNhbCBvcmRlcgotIGRvIG5vdCB1c2UgbG9uZywgdXNlIHUzMiBvciB1 NjQKLSByZXR1cm4gTU9ERV9DTE9DS19ISUdIIHdoZW4gcmVxdWVzdGVkID4gYWN0dWFsCi0gT3B0 aW1pemVkIENvZGluZyBTdHlsZQotIGFkZCBhIGZvcm11bGEgdG8gZ2V0IGJldHRlciB0dSBzaXpl IGFuZCBzeW1ib2wgdmFsdWUuCi0gbW9kaWZ5IGFjY29yZGluZyB0byBTZWFuIFBhdWwncyBjb21t ZW50cwotIGZpeGVkIHRoZSBmd193YWl0IGFsd2F5cyAwCgpDaGFuZ2VzIGluIHY0OgotIHVzZSBw aHkgZnJhbWV3b3JrIHRvIGNvbnRyb2wgRFAgcGh5Ci0gc3VwcG9ydCAyIHBoeXMKCkNoYW5nZXMg aW4gdjM6Ci0gdXNlIEVYVENPTl9ESVNQX0RQIGFuZCBFWFRDT05fRElTUF9EUF9BTFQgY2FibGUg dG8gZ2V0IGRwIHBvcnQgc3RhdGUuCi0gcmVzZXQgc3BkaWYgYmVmb3JlIGNvbmZpZyBpdAotIG1v ZGlmeSB0aGUgZmlybXdhcmUgY2xrIHRvIDEwME1oegotIHJldHJ5IGxvYWQgZmlybXdhcmUgaWYg ZncgZmlsZSBpcyByZXF1ZXN0ZWQgdG9vIGVhcmx5CgpDaGFuZ2VzIGluIHYyOgotIEFscGhhYmV0 aWMgb3JkZXIKLSByZW1vdmUgZXhjZXNzIGVycm9yIG1lc3NhZ2UKLSB1c2UgZGVmaW5lIGNsa19y YXRlCi0gY2hlY2sgYWxsIHJldHVybiB2YWx1ZQotIHJlbW92ZSBkZXZfc2V0X25hbWUoZHAtPmRl diwgImNkbi1kcCIpOwotIHVzZSBzY2hlZHVsZV9kZWxheWVkX3dvcmsKLSByZW1vdmUgbmV2ZXIt Y2FsbGVkIGZ1bmN0aW9ucwotIHJlbW92ZSBzb21lIHVubmVjZXNzYXJ5ICgpCgpDaGFuZ2VzIGlu IHYxOgotIHVzZSBleHRjb24gQVBJCi0gdXNlIGhkbWktY29kZWMgZm9yIHRoZSBEUCBBc29jCi0g ZG8gbm90IGluaXRpYWxpemUgdGhlICJyZXQiCi0gcHJpbnRrIGEgZXJyIGxvZyB3aGVuIGRybV9v Zl9lbmNvZGVyX2FjdGl2ZV9lbmRwb2ludF9pZAotIG1vZGlmeSB0aGUgZGNsayBwaW5fcG9sIHRv IGEgc2luZ2xlIGxpbmUKCiBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvS2NvbmZpZyAgICAgICAg ICAgIHwgICAxMCArCiBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvTWFrZWZpbGUgICAgICAgICAg IHwgICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvY2RuLWRwLWNvcmUuYyAgICAgIHwg MTE2MSArKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hp cC9jZG4tZHAtY29yZS5oICAgICAgfCAgMTA4ICsrKwogZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlw L2Nkbi1kcC1yZWcuYyAgICAgICB8ICA5NTYgKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVy cy9ncHUvZHJtL3JvY2tjaGlwL2Nkbi1kcC1yZWcuaCAgICAgICB8ICA0ODIgKysrKysrKysrKysK IGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fdm9wLmMgfCAgIDEzICstCiBk cml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3ZvcC5oIHwgICAgOSArCiBkcml2 ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfdm9wX3JlZy5jIHwgICAgMiArCiA5IGZpbGVz IGNoYW5nZWQsIDI3MzkgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvY2RuLWRwLWNvcmUuYwogY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9jZG4tZHAtY29yZS5oCiBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2Nkbi1kcC1yZWcuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9jZG4tZHAtcmVnLmgKCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2Ry bS9yb2NrY2hpcC9LY29uZmlnCmluZGV4IGQzMGJkYzMuLjIwYWFhZmUgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yb2Nr Y2hpcC9LY29uZmlnCkBAIC0yNSw2ICsyNSwxNiBAQCBjb25maWcgUk9DS0NISVBfQU5BTE9HSVhf RFAKIAkgIGZvciB0aGUgQW5hbG9naXggQ29yZSBEUCBkcml2ZXIuIElmIHlvdSB3YW50IHRvIGVu YWJsZSBEUAogCSAgb24gUkszMjg4IGJhc2VkIFNvQywgeW91IHNob3VsZCBzZWxldCB0aGlzIG9w dGlvbi4KIAorY29uZmlnIFJPQ0tDSElQX0NETl9EUAorICAgICAgICB0cmlzdGF0ZSAiUm9ja2No aXAgY2RuIERQIgorICAgICAgICBkZXBlbmRzIG9uIERSTV9ST0NLQ0hJUAorCXNlbGVjdCBTTkRf U09DX0hETUlfQ09ERUMgaWYgU05EX1NPQworICAgICAgICBoZWxwCisJICBUaGlzIHNlbGVjdHMg c3VwcG9ydCBmb3IgUm9ja2NoaXAgU29DIHNwZWNpZmljIGV4dGVuc2lvbnMKKwkgIGZvciB0aGUg Y2RuIERQIGRyaXZlci4gSWYgeW91IHdhbnQgdG8gZW5hYmxlIERwIG9uCisJICBSSzMzOTkgYmFz ZWQgU29DLCB5b3Ugc2hvdWxkIHNlbGVjdCB0aGlzCisJICBvcHRpb24uCisKIGNvbmZpZyBST0NL Q0hJUF9EV19IRE1JCiAgICAgICAgIHRyaXN0YXRlICJSb2NrY2hpcCBzcGVjaWZpYyBleHRlbnNp b25zIGZvciBTeW5vcHN5cyBEVyBIRE1JIgogICAgICAgICBkZXBlbmRzIG9uIERSTV9ST0NLQ0hJ UApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL01ha2VmaWxlIGIvZHJpdmVy cy9ncHUvZHJtL3JvY2tjaGlwL01ha2VmaWxlCmluZGV4IDk3NDYzNjUuLjZhMDc4MDkgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dw dS9kcm0vcm9ja2NoaXAvTWFrZWZpbGUKQEAgLTcsNiArNyw3IEBAIHJvY2tjaGlwZHJtLXkgOj0g cm9ja2NoaXBfZHJtX2Rydi5vIHJvY2tjaGlwX2RybV9mYi5vIFwKIHJvY2tjaGlwZHJtLSQoQ09O RklHX0RSTV9GQkRFVl9FTVVMQVRJT04pICs9IHJvY2tjaGlwX2RybV9mYmRldi5vCiAKIG9iai0k KENPTkZJR19ST0NLQ0hJUF9BTkFMT0dJWF9EUCkgKz0gYW5hbG9naXhfZHAtcm9ja2NoaXAubwor b2JqLSQoQ09ORklHX1JPQ0tDSElQX0NETl9EUCkgKz0gY2RuLWRwLWNvcmUubyBjZG4tZHAtcmVn Lm8KIG9iai0kKENPTkZJR19ST0NLQ0hJUF9EV19IRE1JKSArPSBkd19oZG1pLXJvY2tjaGlwLm8K IG9iai0kKENPTkZJR19ST0NLQ0hJUF9EV19NSVBJX0RTSSkgKz0gZHctbWlwaS1kc2kubwogb2Jq LSQoQ09ORklHX1JPQ0tDSElQX0lOTk9fSERNSSkgKz0gaW5ub19oZG1pLm8KZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9jZG4tZHAtY29yZS5jIGIvZHJpdmVycy9ncHUvZHJt L3JvY2tjaGlwL2Nkbi1kcC1jb3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uOGQ3MDhkMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9j ZG4tZHAtY29yZS5jCkBAIC0wLDAgKzEsMTE2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgRnV6 aG91IFJvY2tjaGlwIEVsZWN0cm9uaWNzIENvLkx0ZAorICogQXV0aG9yOiBDaHJpcyBaaG9uZyA8 enl3QHJvY2stY2hpcHMuY29tPgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lv biAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisg KiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRl cm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGRybS9kcm1Q Lmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2Ry bV9jcnRjX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZHBfaGVscGVyLmg+CisjaW5jbHVk ZSA8ZHJtL2RybV9lZGlkLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9vZi5oPgorCisjaW5jbHVkZSA8 bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvY29tcG9uZW50Lmg+CisjaW5jbHVkZSA8bGlu dXgvZXh0Y29uLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51 eC9yZWdtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9yZXNldC5oPgorI2luY2x1ZGUgPGxpbnV4L21m ZC9zeXNjb24uaD4KKyNpbmNsdWRlIDxsaW51eC9waHkvcGh5Lmg+CisKKyNpbmNsdWRlIDxzb3Vu ZC9oZG1pLWNvZGVjLmg+CisKKyNpbmNsdWRlICJjZG4tZHAtY29yZS5oIgorI2luY2x1ZGUgImNk bi1kcC1yZWcuaCIKKyNpbmNsdWRlICJyb2NrY2hpcF9kcm1fdm9wLmgiCisKKyNkZWZpbmUgY29u bmVjdG9yX3RvX2RwKGMpIFwKKwkJY29udGFpbmVyX29mKGMsIHN0cnVjdCBjZG5fZHBfZGV2aWNl LCBjb25uZWN0b3IpCisKKyNkZWZpbmUgZW5jb2Rlcl90b19kcChjKSBcCisJCWNvbnRhaW5lcl9v ZihjLCBzdHJ1Y3QgY2RuX2RwX2RldmljZSwgZW5jb2RlcikKKworI2RlZmluZSBHUkZfU09DX0NP TjkJCTB4NjIyNAorI2RlZmluZSBEUF9TRUxfVk9QX0xJVAkJQklUKDEyKQorI2RlZmluZSBHUkZf U09DX0NPTjI2CQkweDYyNjgKKyNkZWZpbmUgVVBIWV9TRUxfQklUCQkzCisjZGVmaW5lIFVQSFlf U0VMX01BU0sJCUJJVCgxOSkKKyNkZWZpbmUgRFBUWF9IUERfU0VMCQkoMyA8PCAxMikKKyNkZWZp bmUgRFBUWF9IUERfREVMCQkoMiA8PCAxMikKKyNkZWZpbmUgRFBUWF9IUERfU0VMX01BU0sJKDMg PDwgMjgpCisKKyNkZWZpbmUgQ0ROX0ZXX1RJTUVPVVRfTVMJKDY0ICogMTAwMCkKKyNkZWZpbmUg Q0ROX0RQQ0RfVElNRU9VVF9NUwk1MDAwCisjZGVmaW5lIENETl9EUF9GSVJNV0FSRQkJInJvY2tj aGlwL2RwdHguYmluIgorCitzdHJ1Y3QgY2RuX2RwX2RhdGEgeworCXU4IG1heF9waHk7Cit9Owor CitzdHJ1Y3QgY2RuX2RwX2RhdGEgcmszMzk5X2Nkbl9kcCA9IHsKKwkubWF4X3BoeSA9IDIsCit9 OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBjZG5fZHBfZHRfaWRzW10gPSB7 CisJeyAuY29tcGF0aWJsZSA9ICJyb2NrY2hpcCxyazMzOTktY2RuLWRwIiwKKwkJLmRhdGEgPSAo dm9pZCAqKSZyazMzOTlfY2RuX2RwIH0sCisJe30KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUo b2YsIGNkbl9kcF9kdF9pZHMpOworCitzdGF0aWMgaW50IGNkbl9kcF9ncmZfd3JpdGUoc3RydWN0 IGNkbl9kcF9kZXZpY2UgKmRwLAorCQkJICAgIHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGlu dCB2YWwpCit7CisJaW50IHJldDsKKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShkcC0+Z3Jm X2Nsayk7CisJaWYgKHJldCkgeworCQlEUk1fREVWX0VSUk9SKGRwLT5kZXYsICJGYWlsZWQgdG8g cHJlcGFyZV9lbmFibGUgZ3JmIGNsb2NrXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQg PSByZWdtYXBfd3JpdGUoZHAtPmdyZiwgcmVnLCB2YWwpOworCWlmIChyZXQpIHsKKwkJRFJNX0RF Vl9FUlJPUihkcC0+ZGV2LCAiQ291bGQgbm90IHdyaXRlIHRvIEdSRjogJWRcbiIsIHJldCk7CisJ CXJldHVybiByZXQ7CisJfQorCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRwLT5ncmZfY2xrKTsK KworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNkbl9kcF9jbGtfZW5hYmxlKHN0cnVjdCBj ZG5fZHBfZGV2aWNlICpkcCkKK3sKKwlpbnQgcmV0OworCXUzMiByYXRlOworCisJcmV0ID0gY2xr X3ByZXBhcmVfZW5hYmxlKGRwLT5wY2xrKTsKKwlpZiAocmV0IDwgMCkgeworCQlEUk1fREVWX0VS Uk9SKGRwLT5kZXYsICJjYW5ub3QgZW5hYmxlIGRwIHBjbGsgJWRcbiIsIHJldCk7CisJCWdvdG8g ZXJyX3BjbGs7CisJfQorCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGRwLT5jb3JlX2Nsayk7 CisJaWYgKHJldCA8IDApIHsKKwkJRFJNX0RFVl9FUlJPUihkcC0+ZGV2LCAiY2Fubm90IGVuYWJs ZSBjb3JlX2NsayAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfY29yZV9jbGs7CisJfQorCisJcmV0 ID0gcG1fcnVudGltZV9nZXRfc3luYyhkcC0+ZGV2KTsKKwlpZiAocmV0IDwgMCkgeworCQlEUk1f REVWX0VSUk9SKGRwLT5kZXYsICJjYW5ub3QgZ2V0IHBtIHJ1bnRpbWUgJWRcbiIsIHJldCk7CisJ CWdvdG8gZXJyX3BjbGs7CisJfQorCisJcmVzZXRfY29udHJvbF9hc3NlcnQoZHAtPmRwdHhfcnN0 KTsKKwlyZXNldF9jb250cm9sX2Fzc2VydChkcC0+YXBiX3JzdCk7CisJcmVzZXRfY29udHJvbF9k ZWFzc2VydChkcC0+ZHB0eF9yc3QpOworCXJlc2V0X2NvbnRyb2xfZGVhc3NlcnQoZHAtPmFwYl9y c3QpOworCisJcmF0ZSA9IGNsa19nZXRfcmF0ZShkcC0+Y29yZV9jbGspOworCWlmIChyYXRlIDwg MCkgeworCQlEUk1fREVWX0VSUk9SKGRwLT5kZXYsICJnZXQgY2xrIHJhdGUgZmFpbGVkOiAlZFxu IiwgcmF0ZSk7CisJCWdvdG8gZXJyX3NldF9yYXRlOworCX0KKworCWNkbl9kcF9zZXRfZndfY2xr KGRwLCByYXRlKTsKKwljZG5fZHBfY2xvY2tfcmVzZXQoZHApOworCisJcmV0dXJuIDA7CisKK2Vy cl9zZXRfcmF0ZToKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHAtPmNvcmVfY2xrKTsKK2Vycl9j b3JlX2NsazoKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHAtPnBjbGspOworZXJyX3BjbGs6CisJ cmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgY2RuX2RwX2Nsa19kaXNhYmxlKHN0cnVjdCBj ZG5fZHBfZGV2aWNlICpkcCkKK3sKKwlwbV9ydW50aW1lX3B1dF9zeW5jKGRwLT5kZXYpOworCWNs a19kaXNhYmxlX3VucHJlcGFyZShkcC0+cGNsayk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRw LT5jb3JlX2Nsayk7Cit9CisKK3N0YXRpYyBpbnQgY2RuX2RwX2dldF9wb3J0X2xhbmVzKHN0cnVj dCBjZG5fZHBfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgZXh0Y29uX2RldiAqZWRldiA9IHBvcnQt PmV4dGNvbjsKKwl1bmlvbiBleHRjb25fcHJvcGVydHlfdmFsdWUgcHJvcGVydHk7CisJdTggbGFu ZXMgPSAwOworCWludCBkcHR4OworCisJZHB0eCA9IGV4dGNvbl9nZXRfc3RhdGUoZWRldiwgRVhU Q09OX0RJU1BfRFApOworCWlmIChkcHR4ID4gMCkgeworCQlleHRjb25fZ2V0X3Byb3BlcnR5KGVk ZXYsIEVYVENPTl9ESVNQX0RQLAorCQkJCSAgICBFWFRDT05fUFJPUF9VU0JfU1MsICZwcm9wZXJ0 eSk7CisJCWlmIChwcm9wZXJ0eS5pbnR2YWwpCisJCQlsYW5lcyA9IDI7CisJCWVsc2UKKwkJCWxh bmVzID0gNDsKKwl9CisKKwlyZXR1cm4gbGFuZXM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2RuX2Rw X3BvcnQgKmNkbl9kcF9jb25uZWN0ZWRfcG9ydChzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHApCit7 CisJc3RydWN0IGNkbl9kcF9wb3J0ICpwb3J0OworCWludCBpLCBsYW5lczsKKworCWlmIChkcC0+ bm9fc2luaykKKwkJcmV0dXJuIE5VTEw7CisKKwlmb3IgKGkgPSAwOyBpIDwgZHAtPnBvcnRzOyBp KyspIHsKKwkJcG9ydCA9IGRwLT5wb3J0W2ldOworCQlsYW5lcyA9IGNkbl9kcF9nZXRfcG9ydF9s YW5lcyhwb3J0KTsKKwkJaWYgKGxhbmVzKQorCQkJcmV0dXJuIHBvcnQ7CisJfQorCXJldHVybiBO VUxMOworfQorCitzdGF0aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cworY2RuX2RwX2Nvbm5l Y3Rvcl9kZXRlY3Qoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgYm9vbCBmb3JjZSkK K3sKKwlzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAgPSBjb25uZWN0b3JfdG9fZHAoY29ubmVjdG9y KTsKKwllbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIHN0YXR1cyA9IGNvbm5lY3Rvcl9zdGF0dXNf ZGlzY29ubmVjdGVkOworCisJbXV0ZXhfbG9jaygmZHAtPmxvY2spOworCWlmIChkcC0+YWN0aXZl ICYmIGRwLT5lbmFibGVkKQorCQlzdGF0dXMgPSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsK KwltdXRleF91bmxvY2soJmRwLT5sb2NrKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRp YyB2b2lkIGNkbl9kcF9jb25uZWN0b3JfZGVzdHJveShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29u bmVjdG9yKQoreworCWRybV9jb25uZWN0b3JfdW5yZWdpc3Rlcihjb25uZWN0b3IpOworCWRybV9j b25uZWN0b3JfY2xlYW51cChjb25uZWN0b3IpOworfQorCitzdGF0aWMgc3RydWN0IGRybV9jb25u ZWN0b3JfZnVuY3MgY2RuX2RwX2F0b21pY19jb25uZWN0b3JfZnVuY3MgPSB7CisJLmRwbXMgPSBk cm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZHBtcywKKwkuZGV0ZWN0ID0gY2RuX2RwX2Nvbm5l Y3Rvcl9kZXRlY3QsCisJLmRlc3Ryb3kgPSBjZG5fZHBfY29ubmVjdG9yX2Rlc3Ryb3ksCisJLmZp bGxfbW9kZXMgPSBkcm1faGVscGVyX3Byb2JlX3NpbmdsZV9jb25uZWN0b3JfbW9kZXMsCisJLnJl c2V0ID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX3Jlc2V0LAorCS5hdG9taWNfZHVwbGlj YXRlX3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZSwK KwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZGVz dHJveV9zdGF0ZSwKK307CisKK3N0YXRpYyBpbnQgY2RuX2RwX2Nvbm5lY3Rvcl9nZXRfbW9kZXMo c3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgY2RuX2RwX2Rldmlj ZSAqZHAgPSBjb25uZWN0b3JfdG9fZHAoY29ubmVjdG9yKTsKKwlzdHJ1Y3QgZWRpZCAqZWRpZDsK KwlpbnQgcmV0ID0gMDsKKworCW11dGV4X2xvY2soJmRwLT5sb2NrKTsKKwlpZiAoV0FSTl9PTigh ZHAtPmZ3X2xvYWRlZCkpCisJCWdvdG8gb3V0OworCisJZWRpZCA9IGRybV9kb19nZXRfZWRpZChj b25uZWN0b3IsIGNkbl9kcF9nZXRfZWRpZF9ibG9jaywgZHApOworCWlmIChlZGlkKSB7CisJCURS TV9ERVZfREVCVUdfS01TKGRwLT5kZXYsICJnb3QgZWRpZDogd2lkdGhbJWRdIHggaGVpZ2h0WyVk XVxuIiwKKwkJCQkgIGVkaWQtPndpZHRoX2NtLCBlZGlkLT5oZWlnaHRfY20pOworCisJCWRwLT5z aW5rX2hhc19hdWRpbyA9IGRybV9kZXRlY3RfbW9uaXRvcl9hdWRpbyhlZGlkKTsKKwkJcmV0ID0g ZHJtX2FkZF9lZGlkX21vZGVzKGNvbm5lY3RvciwgZWRpZCk7CisJCWlmIChyZXQpIHsKKwkJCWRy bV9tb2RlX2Nvbm5lY3Rvcl91cGRhdGVfZWRpZF9wcm9wZXJ0eShjb25uZWN0b3IsCisJCQkJCQkJ CWVkaWQpOworCQkJZHJtX2VkaWRfdG9fZWxkKGNvbm5lY3RvciwgZWRpZCk7CisJCX0KKwkJa2Zy ZWUoZWRpZCk7CisJfQorCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZkcC0+bG9jayk7CisJcmV0dXJu IHJldDsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fZW5jb2RlciAqCitjZG5fZHBfY29ubmVjdG9y X2Jlc3RfZW5jb2RlcihzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXN0cnVj dCBjZG5fZHBfZGV2aWNlICpkcCA9IGNvbm5lY3Rvcl90b19kcChjb25uZWN0b3IpOworCisJcmV0 dXJuICZkcC0+ZW5jb2RlcjsKK30KKworc3RhdGljIGludCBjZG5fZHBfY29ubmVjdG9yX21vZGVf dmFsaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCQkgICAgICAgc3RydWN0 IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwID0g Y29ubmVjdG9yX3RvX2RwKGNvbm5lY3Rvcik7CisJc3RydWN0IGRybV9kaXNwbGF5X2luZm8gKmRp c3BsYXlfaW5mbyA9ICZkcC0+Y29ubmVjdG9yLmRpc3BsYXlfaW5mbzsKKwl1MzIgcmVxdWVzdGVk LCBhY3R1YWwsIHJhdGUsIHNpbmtfbWF4LCBzb3VyY2VfbWF4ID0gMDsKKwl1OCBsYW5lcywgYnBj LCBpOworCisJc3dpdGNoIChkaXNwbGF5X2luZm8tPmJwYykgeworCWNhc2UgMTY6CisJY2FzZSAx MjoKKwljYXNlIDEwOgorCQlicGMgPSAxMDsKKwkJYnJlYWs7CisJY2FzZSA2OgorCQlicGMgPSA2 OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicGMgPSA4OworCQlicmVhazsKKwl9CisKKwlyZXF1 ZXN0ZWQgPSBtb2RlLT5jbG9jayAqIGJwYyAqIDMgLyAxMDAwOworCisJLyogZmluZCB0aGUgcnVu bmluZyBwb3J0ICovCisJZm9yIChpID0gMDsgaSA8IGRwLT5wb3J0czsgaSsrKSB7CisJCWlmIChk cC0+cG9ydFtpXS0+cGh5X2VuYWJsZWQpIHsKKwkJCXNvdXJjZV9tYXggPSBkcC0+cG9ydFtpXS0+ bGFuZXM7CisJCQlicmVhazsKKwkJfQorCX0KKworCXNpbmtfbWF4ID0gZHJtX2RwX21heF9sYW5l X2NvdW50KGRwLT5kcGNkKTsKKwlsYW5lcyA9IG1pbihzb3VyY2VfbWF4LCBzaW5rX21heCk7CisK Kwlzb3VyY2VfbWF4ID0gZHJtX2RwX2J3X2NvZGVfdG9fbGlua19yYXRlKENETl9EUF9NQVhfTElO S19SQVRFKTsKKwlzaW5rX21heCA9IGRybV9kcF9tYXhfbGlua19yYXRlKGRwLT5kcGNkKTsKKwly YXRlID0gbWluKHNvdXJjZV9tYXgsIHNpbmtfbWF4KTsKKworCWFjdHVhbCA9IHJhdGUgKiBsYW5l cyAvIDEwMDsKKworCS8qIGVmZmljaWVuY3kgaXMgYWJvdXQgMC44ICovCisJYWN0dWFsID0gYWN0 dWFsICogOCAvIDEwOworCisJaWYgKHJlcXVlc3RlZCA+IGFjdHVhbCkgeworCQlEUk1fREVWX0RF QlVHX0tNUyhkcC0+ZGV2LAorCQkJCSAgInJlcXVlc3RlZD0lZCwgYWN0dWFsPSVkLCBjbG9jaz0l ZFxuIiwKKwkJCQkgIHJlcXVlc3RlZCwgYWN0dWFsLCBtb2RlLT5jbG9jayk7CisJCXJldHVybiBN T0RFX0NMT0NLX0hJR0g7CisJfQorCisJcmV0dXJuIE1PREVfT0s7Cit9CisKK3N0YXRpYyBzdHJ1 Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgY2RuX2RwX2Nvbm5lY3Rvcl9oZWxwZXJfZnVu Y3MgPSB7CisJLmdldF9tb2RlcyA9IGNkbl9kcF9jb25uZWN0b3JfZ2V0X21vZGVzLAorCS5iZXN0 X2VuY29kZXIgPSBjZG5fZHBfY29ubmVjdG9yX2Jlc3RfZW5jb2RlciwKKwkubW9kZV92YWxpZCA9 IGNkbl9kcF9jb25uZWN0b3JfbW9kZV92YWxpZCwKK307CisKK3N0YXRpYyBpbnQgY2RuX2RwX2Zp cm13YXJlX2luaXQoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwKQoreworCWludCByZXQ7CisJY29u c3QgdTMyICppcmFtX2RhdGEsICpkcmFtX2RhdGE7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpm dyA9IGRwLT5mdzsKKwljb25zdCBzdHJ1Y3QgY2RuX2Zpcm13YXJlX2hlYWRlciAqaGRyOworCisJ aGRyID0gKHN0cnVjdCBjZG5fZmlybXdhcmVfaGVhZGVyICopZnctPmRhdGE7CisJaWYgKGZ3LT5z aXplICE9IGxlMzJfdG9fY3B1KGhkci0+c2l6ZV9ieXRlcykpIHsKKwkJRFJNX0RFVl9FUlJPUihk cC0+ZGV2LCAiZmlybXdhcmUgaXMgaW52YWxpZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0K KworCWlyYW1fZGF0YSA9IChjb25zdCB1MzIgKikoZnctPmRhdGEgKyBoZHItPmhlYWRlcl9zaXpl KTsKKwlkcmFtX2RhdGEgPSAoY29uc3QgdTMyICopKGZ3LT5kYXRhICsgaGRyLT5oZWFkZXJfc2l6 ZSArIGhkci0+aXJhbV9zaXplKTsKKworCXJldCA9IGNkbl9kcF9sb2FkX2Zpcm13YXJlKGRwLCBp cmFtX2RhdGEsIGhkci0+aXJhbV9zaXplLAorCQkJCSAgIGRyYW1fZGF0YSwgaGRyLT5kcmFtX3Np emUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBjZG5fZHBfc2V0X2Zpcm13 YXJlX2FjdGl2ZShkcCwgdHJ1ZSk7CisJaWYgKHJldCkgeworCQlEUk1fREVWX0VSUk9SKGRwLT5k ZXYsICJhY3RpdmUgdWNwdSBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0K KworCXJldHVybiBjZG5fZHBfZXZlbnRfY29uZmlnKGRwKTsKK30KKworc3RhdGljIGludCBjZG5f ZHBfZ2V0X3NpbmtfY2FwYWJpbGl0eShzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsCisJCQkJICAg ICAgc3RydWN0IGNkbl9kcF9wb3J0ICpwb3J0KQoreworCXU4IHNpbmtfY291bnQ7CisJaW50IHJl dDsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhD RE5fRFBDRF9USU1FT1VUX01TKTsKKworCS8qCisJICogQXR0ZW1wdCB0byByZWFkIHNpbmsgY291 bnQgJiBzaW5rIGNhcGFiaWxpdHksIHJldHJ5IGluIGNhc2UgdGhlIHNpbmsKKwkgKiBtYXkgbm90 IGJlIHJlYWR5LgorCSAqCisJICogU2lua3MgYXJlICpzdXBwb3NlZCogdG8gY29tZSB1cCB3aXRo aW4gMW1zIGZyb20gYW4gb2ZmIHN0YXRlLCBidXQKKwkgKiBzb21lIGRvY2tzIG5lZWQgbW9yZSB0 aW1lIHRvIHBvd2VyIHVwLgorCSAqLworCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1l b3V0KSkgeworCQlyZXQgPSBjZG5fZHBfZHBjZF9yZWFkKGRwLCBEUF9TSU5LX0NPVU5ULCAmc2lu a19jb3VudCwgMSk7CisJCWlmICghcmV0KSB7CisJCQlEUk1fREVWX0RFQlVHX0tNUyhkcC0+ZGV2 LCAiZ2V0IGRwY2Qgc3VjY2VzcyFcbiIpOworCisJCQlzaW5rX2NvdW50ID0gRFBfR0VUX1NJTktf Q09VTlQoc2lua19jb3VudCk7CisJCQlpZiAoIXNpbmtfY291bnQpIHsKKwkJCQlEUk1fREVWX0VS Uk9SKGRwLT5kZXYsICJTaW5rIGNvdW50IGlzIDBcbiIpOworCQkJCXJldHVybiAtRU5PREVWOwor CQkJfQorCisJCQlyZXQgPSBjZG5fZHBfZHBjZF9yZWFkKGRwLCBEUF9EUENEX1JFViwgZHAtPmRw Y2QsCisJCQkJCSAgICAgICBEUF9SRUNFSVZFUl9DQVBfU0laRSk7CisJCQlpZiAocmV0KQorCQkJ CWNvbnRpbnVlOworCisJCQlyZXR1cm4gMDsKKworCQl9IGVsc2UgaWYgKCFleHRjb25fZ2V0X3N0 YXRlKHBvcnQtPmV4dGNvbiwgRVhUQ09OX0RJU1BfRFApKSB7CisJCQlicmVhazsKKwkJfQorCQl1 c2xlZXBfcmFuZ2UoNTAwMCwgMTAwMDApOworCX0KKworCWRldl9lcnIoZHAtPmRldiwgImdldCBk cGNkIGZhaWxlZCFcbiIpOworCXJldHVybiAtRVRJTUVET1VUOworfQorCitzdGF0aWMgaW50IGNk bl9kcF9lbmFibGVfcGh5KHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgc3RydWN0IGNkbl9kcF9w b3J0ICpwb3J0KQoreworCXVuaW9uIGV4dGNvbl9wcm9wZXJ0eV92YWx1ZSBwcm9wZXJ0eTsKKwlp bnQgcmV0OworCisJcmV0ID0gY2RuX2RwX2dyZl93cml0ZShkcCwgR1JGX1NPQ19DT04yNiwKKwkJ CSAgICAgICAocG9ydC0+aWQgPDwgVVBIWV9TRUxfQklUKSB8IFVQSFlfU0VMX01BU0spOworCWlm IChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoIXBvcnQtPnBoeV9lbmFibGVkKSB7CisJCXJl dCA9IHBoeV9wb3dlcl9vbihwb3J0LT5waHkpOworCQlpZiAocmV0KSB7CisJCQlEUk1fREVWX0VS Uk9SKGRwLT5kZXYsICJwaHkgcG93ZXIgb24gZmFpbGVkOiAlZFxuIiwKKwkJCQkgICAgICByZXQp OworCQkJZ290byBlcnJfcGh5OworCQl9CisJCXBvcnQtPnBoeV9lbmFibGVkID0gdHJ1ZTsKKwl9 CisKKwlyZXQgPSBjZG5fZHBfZ3JmX3dyaXRlKGRwLCBHUkZfU09DX0NPTjI2LAorCQkJICAgICAg IERQVFhfSFBEX1NFTF9NQVNLIHwgRFBUWF9IUERfU0VMKTsKKwlpZiAocmV0KSB7CisJCURSTV9E RVZfRVJST1IoZHAtPmRldiwgIkZhaWxlZCB0byB3cml0ZSBIUERfU0VMICVkXG4iLCByZXQpOwor CQlnb3RvIGVycl9wb3dlcl9vbjsKKwl9CisKKwlyZXQgPSBjZG5fZHBfZ2V0X2hwZF9zdGF0dXMo ZHApOworCWlmIChyZXQgPD0gMCkgeworCQlpZiAoIXJldCkKKwkJCURSTV9ERVZfRVJST1IoZHAt PmRldiwgImhwZCBkb2VzIG5vdCBleGlzdFxuIik7CisJCWdvdG8gZXJyX3Bvd2VyX29uOworCX0K KworCXJldCA9IGV4dGNvbl9nZXRfcHJvcGVydHkocG9ydC0+ZXh0Y29uLCBFWFRDT05fRElTUF9E UCwKKwkJCQkgIEVYVENPTl9QUk9QX1VTQl9UWVBFQ19QT0xBUklUWSwgJnByb3BlcnR5KTsKKwlp ZiAocmV0KSB7CisJCURSTV9ERVZfRVJST1IoZHAtPmRldiwgImdldCBwcm9wZXJ0eSBmYWlsZWRc biIpOworCQlnb3RvIGVycl9wb3dlcl9vbjsKKwl9CisKKwlwb3J0LT5sYW5lcyA9IGNkbl9kcF9n ZXRfcG9ydF9sYW5lcyhwb3J0KTsKKwlyZXQgPSBjZG5fZHBfc2V0X2hvc3RfY2FwKGRwLCBwb3J0 LT5sYW5lcywgcHJvcGVydHkuaW50dmFsKTsKKwlpZiAocmV0KSB7CisJCURSTV9ERVZfRVJST1Io ZHAtPmRldiwgInNldCBob3N0IGNhcGFiaWxpdGllcyBmYWlsZWQ6ICVkXG4iLAorCQkJICAgICAg cmV0KTsKKwkJZ290byBlcnJfcG93ZXJfb247CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9wb3dl cl9vbjoKKwlpZiAocGh5X3Bvd2VyX29mZihwb3J0LT5waHkpKQorCQlEUk1fREVWX0VSUk9SKGRw LT5kZXYsICJwaHkgcG93ZXIgb2ZmIGZhaWxlZDogJWQiLCByZXQpOworCWVsc2UKKwkJcG9ydC0+ cGh5X2VuYWJsZWQgPSBmYWxzZTsKKworZXJyX3BoeToKKwljZG5fZHBfZ3JmX3dyaXRlKGRwLCBH UkZfU09DX0NPTjI2LAorCQkJIERQVFhfSFBEX1NFTF9NQVNLIHwgRFBUWF9IUERfREVMKTsKKwly ZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGNkbl9kcF9kaXNhYmxlX3BoeShzdHJ1Y3QgY2Ru X2RwX2RldmljZSAqZHAsCisJCQkgICAgICBzdHJ1Y3QgY2RuX2RwX3BvcnQgKnBvcnQpCit7CisJ aW50IHJldDsKKworCWlmIChwb3J0LT5waHlfZW5hYmxlZCkgeworCQlyZXQgPSBwaHlfcG93ZXJf b2ZmKHBvcnQtPnBoeSk7CisJCWlmIChyZXQpIHsKKwkJCURSTV9ERVZfRVJST1IoZHAtPmRldiwg InBoeSBwb3dlciBvZmYgZmFpbGVkOiAlZCIsIHJldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJ fQorCisJcG9ydC0+cGh5X2VuYWJsZWQgPSBmYWxzZTsKKwlwb3J0LT5sYW5lcyA9IDA7CisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2RuX2RwX2VuYWJsZShzdHJ1Y3QgY2RuX2RwX2Rldmlj ZSAqZHApCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgY2RuX2RwX3BvcnQgKnBvcnQ7CisKKwlpZiAo ZHAtPmFjdGl2ZSkKKwkJcmV0dXJuIDA7CisKKwlwb3J0ID0gY2RuX2RwX2Nvbm5lY3RlZF9wb3J0 KGRwKTsKKwlpZiAoIXBvcnQpIHsKKwkJRFJNX0RFVl9FUlJPUihkcC0+ZGV2LCAiQ2FuJ3QgZW5h YmxlIHdpdGhvdXQgY29ubmVjdGlvblxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJl dCA9IGNkbl9kcF9jbGtfZW5hYmxlKGRwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJ cmV0ID0gY2RuX2RwX2Zpcm13YXJlX2luaXQoZHApOworCWlmIChyZXQpIHsKKwkJRFJNX0RFVl9F UlJPUihkcC0+ZGV2LCAiZmlybXdhcmUgaW5pdCBmYWlsZWQ6ICVkIiwgcmV0KTsKKwkJZ290byBl cnJfY2xrX2Rpc2FibGU7CisJfQorCisJcmV0ID0gY2RuX2RwX2VuYWJsZV9waHkoZHAsIHBvcnQp OworCWlmIChyZXQpCisJCWdvdG8gZXJyX2Nsa19kaXNhYmxlOworCisJcmV0ID0gY2RuX2RwX2dl dF9zaW5rX2NhcGFiaWxpdHkoZHAsIHBvcnQpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX3BoeV9k aXNhYmxlOworCisJZHAtPmFjdGl2ZSA9IHRydWU7CisJcmV0dXJuIDA7CisKK2Vycl9waHlfZGlz YWJsZToKKwljZG5fZHBfZGlzYWJsZV9waHkoZHAsIHBvcnQpOworZXJyX2Nsa19kaXNhYmxlOgor CWNkbl9kcF9jbGtfZGlzYWJsZShkcCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBj ZG5fZHBfZGlzYWJsZShzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHApCit7CisJaW50IHJldCwgaTsK KworCWlmICghZHAtPmFjdGl2ZSkKKwkJcmV0dXJuIDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgZHAt PnBvcnRzOyBpKyspIHsKKwkJaWYgKGNkbl9kcF9nZXRfcG9ydF9sYW5lcyhkcC0+cG9ydFtpXSkp CisJCQljZG5fZHBfZGlzYWJsZV9waHkoZHAsIGRwLT5wb3J0W2ldKTsKKwl9CisKKwlyZXQgPSBj ZG5fZHBfZ3JmX3dyaXRlKGRwLCBHUkZfU09DX0NPTjI2LAorCQkJICAgICAgIERQVFhfSFBEX1NF TF9NQVNLIHwgRFBUWF9IUERfREVMKTsKKwlpZiAocmV0KSB7CisJCURSTV9ERVZfRVJST1IoZHAt PmRldiwgIkZhaWxlZCB0byBjbGVhciBocGQgc2VsICVkXG4iLAorCQkJICAgICAgcmV0KTsKKwkJ cmV0dXJuIHJldDsKKwl9CisKKwljZG5fZHBfc2V0X2Zpcm13YXJlX2FjdGl2ZShkcCwgZmFsc2Up OworCWNkbl9kcF9jbGtfZGlzYWJsZShkcCk7CisJZHAtPmFjdGl2ZSA9IGZhbHNlOworCWRwLT5u b19zaW5rID0gZmFsc2U7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNkbl9kcF9lbmNv ZGVyX21vZGVfc2V0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKKwkJCQkgICAgc3RydWN0 IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkJICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl ICphZGp1c3RlZCkKK3sKKwlzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAgPSBlbmNvZGVyX3RvX2Rw KGVuY29kZXIpOworCXN0cnVjdCBkcm1fZGlzcGxheV9pbmZvICpkaXNwbGF5X2luZm8gPSAmZHAt PmNvbm5lY3Rvci5kaXNwbGF5X2luZm87CisJc3RydWN0IHJvY2tjaGlwX2NydGNfc3RhdGUgKnN0 YXRlOworCXN0cnVjdCB2aWRlb19pbmZvICp2aWRlbyA9ICZkcC0+dmlkZW9faW5mbzsKKwlpbnQg cmV0LCB2YWw7CisKKwlzd2l0Y2ggKGRpc3BsYXlfaW5mby0+YnBjKSB7CisJY2FzZSAxNjoKKwlj YXNlIDEyOgorCWNhc2UgMTA6CisJCXZpZGVvLT5jb2xvcl9kZXB0aCA9IDEwOworCQlicmVhazsK KwljYXNlIDY6CisJCXZpZGVvLT5jb2xvcl9kZXB0aCA9IDY7CisJCWJyZWFrOworCWRlZmF1bHQ6 CisJCXZpZGVvLT5jb2xvcl9kZXB0aCA9IDg7CisJCWJyZWFrOworCX0KKworCXZpZGVvLT5jb2xv cl9mbXQgPSBQWExfUkdCOworCisJdmlkZW8tPnZfc3luY19wb2xhcml0eSA9ICEhKG1vZGUtPmZs YWdzICYgRFJNX01PREVfRkxBR19OVlNZTkMpOworCXZpZGVvLT5oX3N5bmNfcG9sYXJpdHkgPSAh IShtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfTkhTWU5DKTsKKworCXJldCA9IGRybV9vZl9l bmNvZGVyX2FjdGl2ZV9lbmRwb2ludF9pZChkcC0+ZGV2LT5vZl9ub2RlLCBlbmNvZGVyKTsKKwlp ZiAocmV0IDwgMCkgeworCQlEUk1fREVWX0VSUk9SKGRwLT5kZXYsICJDb3VsZCBub3QgZ2V0IHZv cCBpZCwgJWQiLCByZXQpOworCQlyZXR1cm47CisJfQorCisJRFJNX0RFVl9ERUJVR19LTVMoZHAt PmRldiwgInZvcCAlcyBvdXRwdXQgdG8gY2RuLWRwXG4iLAorCQkJICAocmV0KSA/ICJMSVQiIDog IkJJRyIpOworCXN0YXRlID0gdG9fcm9ja2NoaXBfY3J0Y19zdGF0ZShlbmNvZGVyLT5jcnRjLT5z dGF0ZSk7CisJaWYgKHJldCkgeworCQl2YWwgPSBEUF9TRUxfVk9QX0xJVCB8IChEUF9TRUxfVk9Q X0xJVCA8PCAxNik7CisJCXN0YXRlLT5vdXRwdXRfbW9kZSA9IFJPQ0tDSElQX09VVF9NT0RFX1A4 ODg7CisJfSBlbHNlIHsKKwkJdmFsID0gRFBfU0VMX1ZPUF9MSVQgPDwgMTY7CisJCXN0YXRlLT5v dXRwdXRfbW9kZSA9IFJPQ0tDSElQX09VVF9NT0RFX0FBQUE7CisJfQorCisJcmV0ID0gY2RuX2Rw X2dyZl93cml0ZShkcCwgR1JGX1NPQ19DT045LCB2YWwpOworCWlmIChyZXQpCisJCXJldHVybjsK KworCW1lbWNweSgmZHAtPm1vZGUsIGFkanVzdGVkLCBzaXplb2YoKm1vZGUpKTsKK30KKworc3Rh dGljIHZvaWQgY2RuX2RwX2VuY29kZXJfZW5hYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rl cikKK3sKKwlzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAgPSBlbmNvZGVyX3RvX2RwKGVuY29kZXIp OworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZkcC0+bG9jayk7CisJaWYgKCFkcC0+YWN0aXZl KSB7CisJCXJldCA9IGNkbl9kcF9lbmFibGUoZHApOworCQlpZiAocmV0KSB7CisJCQlEUk1fREVW X0VSUk9SKGRwLT5kZXYsICJGYWlsZWQgdG8gZW5hYmxlIGVuY29kZXIgJWRcbiIsCisJCQkJICAg ICAgcmV0KTsKKwkJfQorCX0KKworCXJldCA9IGNkbl9kcF90cmFpbmluZ19zdGFydChkcCk7CisJ aWYgKHJldCkgeworCQlEUk1fREVWX0VSUk9SKGRwLT5kZXYsICJGYWlsZWQgdG8gc3RhcnQgdHJh aW5pbmcgJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IGNkbl9kcF9nZXRf dHJhaW5pbmdfc3RhdHVzKGRwKTsKKwlpZiAocmV0KSB7CisJCURSTV9ERVZfRVJST1IoZHAtPmRl diwgIkZhaWxlZCB0byBnZXQgdHJhaW5pbmcgc3RhdCAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXQ7 CisJfQorCisJRFJNX0RFVl9JTkZPKGRwLT5kZXYsICJyYXRlOjB4JXgsIGxhbmVzOiVkXG4iLCBk cC0+bGluay5yYXRlLAorCQkgICAgIGRwLT5saW5rLm51bV9sYW5lcyk7CisKKwlpZiAoY2RuX2Rw X3NldF92aWRlb19zdGF0dXMoZHAsIENPTlRST0xfVklERU9fSURMRSkpIHsKKwkJRFJNX0RFVl9F UlJPUihkcC0+ZGV2LCAiRmFpbGVkIHRvIGlkbGUgdmlkZW9cbiIpOworCQlnb3RvIG91dDsKKwl9 CisKKwlpZiAoY2RuX2RwX2NvbmZpZ192aWRlbyhkcCkpIHsKKwkJRFJNX0RFVl9FUlJPUihkcC0+ ZGV2LCAiRmFpbGVkIHRvIGNvbmZpZyB2aWRlb1xuIik7CisJCWdvdG8gb3V0OworCX0KKworCWlm IChjZG5fZHBfc2V0X3ZpZGVvX3N0YXR1cyhkcCwgQ09OVFJPTF9WSURFT19WQUxJRCkpIHsKKwkJ RFJNX0RFVl9FUlJPUihkcC0+ZGV2LCAiRmFpbGVkIHRvIHZhbGlkIHZpZGVvXG4iKTsKKwkJZ290 byBvdXQ7CisJfQorCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZkcC0+bG9jayk7Cit9CisKK3N0YXRp YyB2b2lkIGNkbl9kcF9lbmNvZGVyX2Rpc2FibGUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVy KQoreworCXN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCA9IGVuY29kZXJfdG9fZHAoZW5jb2Rlcik7 CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJmRwLT5sb2NrKTsKKwlpZiAoZHAtPmFjdGl2ZSkg eworCQlyZXQgPSBjZG5fZHBfZGlzYWJsZShkcCk7CisJCWlmIChyZXQpIHsKKwkJCURSTV9ERVZf RVJST1IoZHAtPmRldiwgIkZhaWxlZCB0byBkaXNhYmxlIGVuY29kZXIgJWRcbiIsCisJCQkJICAg ICAgcmV0KTsKKwkJfQorCX0KKwltdXRleF91bmxvY2soJmRwLT5sb2NrKTsKK30KKworc3RhdGlj IGludCBjZG5fZHBfZW5jb2Rlcl9hdG9taWNfY2hlY2soc3RydWN0IGRybV9lbmNvZGVyICplbmNv ZGVyLAorCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCisJCQkJ ICAgICAgIHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRlKQoreworCXN0cnVj dCByb2NrY2hpcF9jcnRjX3N0YXRlICpzID0gdG9fcm9ja2NoaXBfY3J0Y19zdGF0ZShjcnRjX3N0 YXRlKTsKKworCXMtPm91dHB1dF9tb2RlID0gUk9DS0NISVBfT1VUX01PREVfQUFBQTsKKwlzLT5v dXRwdXRfdHlwZSA9IERSTV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9ydDsKKworCXJldHVybiAw OworfQorCitzdGF0aWMgc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcyBjZG5fZHBfZW5j b2Rlcl9oZWxwZXJfZnVuY3MgPSB7CisJLm1vZGVfc2V0ID0gY2RuX2RwX2VuY29kZXJfbW9kZV9z ZXQsCisJLmVuYWJsZSA9IGNkbl9kcF9lbmNvZGVyX2VuYWJsZSwKKwkuZGlzYWJsZSA9IGNkbl9k cF9lbmNvZGVyX2Rpc2FibGUsCisJLmF0b21pY19jaGVjayA9IGNkbl9kcF9lbmNvZGVyX2F0b21p Y19jaGVjaywKK307CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2VuY29kZXJfZnVuY3MgY2RuX2RwX2Vu Y29kZXJfZnVuY3MgPSB7CisJLmRlc3Ryb3kgPSBkcm1fZW5jb2Rlcl9jbGVhbnVwLAorfTsKKwor c3RhdGljIGludCBjZG5fZHBfcGFyc2VfZHQoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwKQorewor CXN0cnVjdCBkZXZpY2UgKmRldiA9IGRwLT5kZXY7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9 IGRldi0+b2Zfbm9kZTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZv cm1fZGV2aWNlKGRldik7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisKKwlkcC0+Z3JmID0gc3lz Y29uX3JlZ21hcF9sb29rdXBfYnlfcGhhbmRsZShucCwgInJvY2tjaGlwLGdyZiIpOworCWlmIChJ U19FUlIoZHAtPmdyZikpIHsKKwkJRFJNX0RFVl9FUlJPUihkZXYsICJjZG4tZHAgbmVlZHMgcm9j a2NoaXAsZ3JmIHByb3BlcnR5XG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoZHAtPmdyZik7CisJfQor CisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsK KwlkcC0+cmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJlcyk7CisJaWYgKElTX0VS UihkcC0+cmVncykpIHsKKwkJRFJNX0RFVl9FUlJPUihkZXYsICJpb3JlbWFwIHJlZyBmYWlsZWRc biIpOworCQlyZXR1cm4gUFRSX0VSUihkcC0+cmVncyk7CisJfQorCisJZHAtPmNvcmVfY2xrID0g ZGV2bV9jbGtfZ2V0KGRldiwgImNvcmUtY2xrIik7CisJaWYgKElTX0VSUihkcC0+Y29yZV9jbGsp KSB7CisJCURSTV9ERVZfRVJST1IoZGV2LCAiY2Fubm90IGdldCBjb3JlX2Nsa19kcFxuIik7CisJ CXJldHVybiBQVFJfRVJSKGRwLT5jb3JlX2Nsayk7CisJfQorCisJZHAtPnBjbGsgPSBkZXZtX2Ns a19nZXQoZGV2LCAicGNsayIpOworCWlmIChJU19FUlIoZHAtPnBjbGspKSB7CisJCURSTV9ERVZf RVJST1IoZGV2LCAiY2Fubm90IGdldCBwY2xrXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoZHAtPnBj bGspOworCX0KKworCWRwLT5zcGRpZl9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAic3BkaWYiKTsK KwlpZiAoSVNfRVJSKGRwLT5zcGRpZl9jbGspKSB7CisJCURSTV9ERVZfRVJST1IoZGV2LCAiY2Fu bm90IGdldCBzcGRpZl9jbGtcbiIpOworCQlyZXR1cm4gUFRSX0VSUihkcC0+c3BkaWZfY2xrKTsK Kwl9CisKKwlkcC0+Z3JmX2NsayA9IGRldm1fY2xrX2dldChkZXYsICJncmYiKTsKKwlpZiAoSVNf RVJSKGRwLT5ncmZfY2xrKSkgeworCQlEUk1fREVWX0VSUk9SKGRldiwgImNhbm5vdCBnZXQgZ3Jm IGNsa1xuIik7CisJCXJldHVybiBQVFJfRVJSKGRwLT5ncmZfY2xrKTsKKwl9CisKKwlkcC0+c3Bk aWZfcnN0ID0gZGV2bV9yZXNldF9jb250cm9sX2dldChkZXYsICJzcGRpZiIpOworCWlmIChJU19F UlIoZHAtPnNwZGlmX3JzdCkpIHsKKwkJRFJNX0RFVl9FUlJPUihkZXYsICJubyBzcGRpZiByZXNl dCBjb250cm9sIGZvdW5kXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoZHAtPnNwZGlmX3JzdCk7CisJ fQorCisJZHAtPmRwdHhfcnN0ID0gZGV2bV9yZXNldF9jb250cm9sX2dldChkZXYsICJkcHR4Iik7 CisJaWYgKElTX0VSUihkcC0+ZHB0eF9yc3QpKSB7CisJCURSTV9ERVZfRVJST1IoZGV2LCAibm8g dXBoeSByZXNldCBjb250cm9sIGZvdW5kXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoZHAtPmRwdHhf cnN0KTsKKwl9CisKKwlkcC0+YXBiX3JzdCA9IGRldm1fcmVzZXRfY29udHJvbF9nZXQoZGV2LCAi YXBiIik7CisJaWYgKElTX0VSUihkcC0+YXBiX3JzdCkpIHsKKwkJRFJNX0RFVl9FUlJPUihkZXYs ICJubyBhcGIgcmVzZXQgY29udHJvbCBmb3VuZFxuIik7CisJCXJldHVybiBQVFJfRVJSKGRwLT5h cGJfcnN0KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjZG5fZHBfYXVkaW9f aHdfcGFyYW1zKHN0cnVjdCBkZXZpY2UgKmRldiwgIHZvaWQgKmRhdGEsCisJCQkJICBzdHJ1Y3Qg aGRtaV9jb2RlY19kYWlmbXQgKmRhaWZtdCwKKwkJCQkgIHN0cnVjdCBoZG1pX2NvZGVjX3BhcmFt cyAqcGFyYW1zKQoreworCXN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCA9IGRldl9nZXRfZHJ2ZGF0 YShkZXYpOworCXN0cnVjdCBhdWRpb19pbmZvIGF1ZGlvID0geworCQkuc2FtcGxlX3dpZHRoID0g cGFyYW1zLT5zYW1wbGVfd2lkdGgsCisJCS5zYW1wbGVfcmF0ZSA9IHBhcmFtcy0+c2FtcGxlX3Jh dGUsCisJCS5jaGFubmVscyA9IHBhcmFtcy0+Y2hhbm5lbHMsCisJfTsKKwlpbnQgcmV0OworCisJ aWYgKCFkcC0+ZW5jb2Rlci5jcnRjKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXN3aXRjaCAoZGFp Zm10LT5mbXQpIHsKKwljYXNlIEhETUlfSTJTOgorCQlhdWRpby5mb3JtYXQgPSBBRk1UX0kyUzsK KwkJYnJlYWs7CisJY2FzZSBIRE1JX1NQRElGOgorCQlhdWRpby5mb3JtYXQgPSBBRk1UX1NQRElG OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlEUk1fREVWX0VSUk9SKGRldiwgIkludmFsaWQgZm9y bWF0ICVkXG4iLCBkYWlmbXQtPmZtdCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldCA9 IGNkbl9kcF9hdWRpb19jb25maWcoZHAsICZhdWRpbyk7CisJaWYgKCFyZXQpCisJCWRwLT5hdWRp b19pbmZvID0gYXVkaW87CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBjZG5fZHBf YXVkaW9fc2h1dGRvd24oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQoreworCXN0cnVj dCBjZG5fZHBfZGV2aWNlICpkcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCByZXQ7CisK KwlpZiAoIWRwLT5lbmNvZGVyLmNydGMpCisJCXJldHVybjsKKworCXJldCA9IGNkbl9kcF9hdWRp b19zdG9wKGRwLCAmZHAtPmF1ZGlvX2luZm8pOworCWlmICghcmV0KQorCQlkcC0+YXVkaW9faW5m by5mb3JtYXQgPSBBRk1UX1VOVVNFRDsKK30KKworc3RhdGljIGludCBjZG5fZHBfYXVkaW9fZGln aXRhbF9tdXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCQkgICAgIGJvb2wg ZW5hYmxlKQoreworCXN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCA9IGRldl9nZXRfZHJ2ZGF0YShk ZXYpOworCisJaWYgKCFkcC0+ZW5jb2Rlci5jcnRjKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJl dHVybiBjZG5fZHBfYXVkaW9fbXV0ZShkcCwgZW5hYmxlKTsKK30KKworc3RhdGljIGludCBjZG5f ZHBfYXVkaW9fZ2V0X2VsZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQkJdTgg KmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAgPSBkZXZfZ2V0 X2RydmRhdGEoZGV2KTsKKworCW1lbWNweShidWYsIGRwLT5jb25uZWN0b3IuZWxkLCBtaW4oc2l6 ZW9mKGRwLT5jb25uZWN0b3IuZWxkKSwgbGVuKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGNvbnN0IHN0cnVjdCBoZG1pX2NvZGVjX29wcyBhdWRpb19jb2RlY19vcHMgPSB7CisJLmh3X3Bh cmFtcyA9IGNkbl9kcF9hdWRpb19od19wYXJhbXMsCisJLmF1ZGlvX3NodXRkb3duID0gY2RuX2Rw X2F1ZGlvX3NodXRkb3duLAorCS5kaWdpdGFsX211dGUgPSBjZG5fZHBfYXVkaW9fZGlnaXRhbF9t dXRlLAorCS5nZXRfZWxkID0gY2RuX2RwX2F1ZGlvX2dldF9lbGQsCit9OworCitzdGF0aWMgaW50 IGNkbl9kcF9hdWRpb19jb2RlY19pbml0KHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwKKwkJCQkg ICBzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGhkbWlfY29kZWNfcGRhdGEgY29kZWNf ZGF0YSA9IHsKKwkJLmkycyA9IDEsCisJCS5zcGRpZiA9IDEsCisJCS5vcHMgPSAmYXVkaW9fY29k ZWNfb3BzLAorCQkubWF4X2kyc19jaGFubmVscyA9IDgsCisJfTsKKworCWRwLT5hdWRpb19wZGV2 ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX2RhdGEoCisJCQkgZGV2LCBIRE1JX0NPREVDX0RS Vl9OQU1FLCBQTEFURk9STV9ERVZJRF9BVVRPLAorCQkJICZjb2RlY19kYXRhLCBzaXplb2YoY29k ZWNfZGF0YSkpOworCisJcmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhkcC0+YXVkaW9fcGRldik7Cit9 CisKK3N0YXRpYyBpbnQgY2RuX2RwX3JlcXVlc3RfZmlybXdhcmUoc3RydWN0IGNkbl9kcF9kZXZp Y2UgKmRwKQoreworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyAr IG1zZWNzX3RvX2ppZmZpZXMoQ0ROX0ZXX1RJTUVPVVRfTVMpOworCXVuc2lnbmVkIGxvbmcgc2xl ZXAgPSAxMDAwOworCisJV0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKCZkcC0+bG9jaykpOworCisJ aWYgKGRwLT5md19sb2FkZWQpCisJCXJldHVybiAwOworCisJLyogRHJvcCB0aGUgbG9jayBiZWZv cmUgZ2V0dGluZyB0aGUgZmlybXdhcmUgdG8gYXZvaWQgYmxvY2tpbmcgYm9vdCAqLworCW11dGV4 X3VubG9jaygmZHAtPmxvY2spOworCisJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVv dXQpKSB7CisJCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmRwLT5mdywgQ0ROX0RQX0ZJUk1XQVJF LCBkcC0+ZGV2KTsKKwkJaWYgKHJldCA9PSAtRU5PRU5UKSB7CisJCQltc2xlZXAoc2xlZXApOwor CQkJc2xlZXAgKj0gMjsKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgaWYgKHJldCkgeworCQkJRFJN X0RFVl9FUlJPUihkcC0+ZGV2LAorCQkJCSAgICAgICJmYWlsZWQgdG8gcmVxdWVzdCBmaXJtd2Fy ZTogJWRcbiIsIHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWRwLT5md19sb2FkZWQgPSB0 cnVlOworCQlyZXQgPSAwOworCQlnb3RvIG91dDsKKwl9CisKKwlEUk1fREVWX0VSUk9SKGRwLT5k ZXYsICJUaW1lZCBvdXQgdHJ5aW5nIHRvIGxvYWQgZmlybXdhcmVcbiIpOworCXJldCA9IC1FVElN RURPVVQ7CitvdXQ6CisJbXV0ZXhfbG9jaygmZHAtPmxvY2spOworCXJldHVybiByZXQ7Cit9CisK K3N0YXRpYyB2b2lkIGNkbl9kcF9wZF9ldmVudF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29y aykKK3sKKwlzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAgPSBjb250YWluZXJfb2Yod29yaywgc3Ry dWN0IGNkbl9kcF9kZXZpY2UsCisJCQkJCQlldmVudF93b3JrKTsKKwl1bmlvbiBleHRjb25fcHJv cGVydHlfdmFsdWUgcHJvcGVydHk7CisJc3RydWN0IGNkbl9kcF9wb3J0ICpwb3J0OworCWludCBy ZXQsIGksIGxhbmVzOworCWJvb2wgaHBkX2V2ZW50ID0gZmFsc2U7CisJYm9vbCByZV90cmFpbmlu ZyA9IGZhbHNlOworCXU4IHNpbmtfY291bnQ7CisKKwlEUk1fREVWX0lORk8oZHAtPmRldiwgIlJl Y2VpdmVkIERQIGhvdHBsdWcgZXZlbnRcbiIpOworCisJbXV0ZXhfbG9jaygmZHAtPmxvY2spOwor CWlmICghZHAtPmVuYWJsZWQpCisJCWdvdG8gb3V0OworCisJcmV0ID0gY2RuX2RwX3JlcXVlc3Rf ZmlybXdhcmUoZHApOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJLyogV2UgbWlnaHQgbmVl ZCB0byBub3RpZnkgdXNlcnNwYWNlIGZvciBldmVyeXRoaW5nIGJlbG93IGhlcmUgKi8KKwlocGRf ZXZlbnQgPSB0cnVlOworCisJLyogRGlzYWJsZSBhbnkgcG9ydHMgdGhhdCBoYXZlIGp1c3QgYmVj b21lIGluYWN0aXZlICovCisJZm9yIChpID0gMDsgaSA8IGRwLT5wb3J0czsgaSsrKSB7CisJCXBv cnQgPSBkcC0+cG9ydFtpXTsKKwkJbGFuZXMgPSBjZG5fZHBfZ2V0X3BvcnRfbGFuZXMocG9ydCk7 CisJCWlmIChsYW5lcyAmJiBkcC0+YWN0aXZlKSB7CisJCQlleHRjb25fZ2V0X3Byb3BlcnR5KHBv cnQtPmV4dGNvbiwgRVhUQ09OX0RJU1BfRFAsCisJCQkJCSAgICBFWFRDT05fUFJPUF9ESVNQX0hQ RCwgJnByb3BlcnR5KTsKKworCQkJcmV0ID0gY2RuX2RwX2RwY2RfcmVhZChkcCwgRFBfU0lOS19D T1VOVCwKKwkJCQkJICAgICAgICZzaW5rX2NvdW50LCAxKTsKKwkJCWlmIChyZXQgfHwgIXNpbmtf Y291bnQpIHsKKwkJCQlkcC0+bm9fc2luayA9IHRydWU7CisJCQkJbGFuZXMgPSAwOworCQkJfSBl bHNlIGlmIChwcm9wZXJ0eS5pbnR2YWwpIHsKKwkJCQlyZV90cmFpbmluZyA9IHRydWU7CisJCQkJ Z290byBvdXQ7CisJCQl9CisJCX0KKworCQlpZiAoIWxhbmVzICYmIHBvcnQtPmxhbmVzKQorCQkJ Y2RuX2RwX2Rpc2FibGVfcGh5KGRwLCBwb3J0KTsKKwl9CisKKwkvKiBQb3dlciBvbi9vZmYgdGhl IGJsb2NrIGFuZCBwb3J0cyAqLworCWlmICghY2RuX2RwX2Nvbm5lY3RlZF9wb3J0KGRwKSkgewor CQlyZXQgPSBjZG5fZHBfZGlzYWJsZShkcCk7CisJCWlmIChyZXQpIHsKKwkJCURSTV9ERVZfRVJS T1IoZHAtPmRldiwgIkRpc2FibGUgZHAgZmFpbGVkICVkXG4iLCByZXQpOworCQkJZ290byBvdXQ7 CisJCX0KKworCX0gZWxzZSBpZiAoIWRwLT5hY3RpdmUpIHsKKwkJcmV0ID0gY2RuX2RwX2VuYWJs ZShkcCk7CisJCWlmIChyZXQpIHsKKwkJCURSTV9ERVZfRVJST1IoZHAtPmRldiwgIkZhaWxlZCB0 byBlbmFibGUgZHAgJWRcbiIsIHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworb3V0Ogor CW11dGV4X3VubG9jaygmZHAtPmxvY2spOworCisJaWYgKGhwZF9ldmVudCkKKwkJZHJtX2hlbHBl cl9ocGRfaXJxX2V2ZW50KGRwLT5kcm1fZGV2KTsKKworCWlmIChyZV90cmFpbmluZykKKwkJY2Ru X2RwX2VuY29kZXJfZW5hYmxlKCZkcC0+ZW5jb2Rlcik7Cit9CisKK3N0YXRpYyBpbnQgY2RuX2Rw X3BkX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCisJCQkgICB1bnNpZ25lZCBsb25n IGV2ZW50LCB2b2lkICpwcml2KQoreworCXN0cnVjdCBjZG5fZHBfcG9ydCAqcG9ydCA9IGNvbnRh aW5lcl9vZihuYiwgc3RydWN0IGNkbl9kcF9wb3J0LAorCQkJCQkJZXZlbnRfbmIpOworCXN0cnVj dCBjZG5fZHBfZGV2aWNlICpkcCA9IHBvcnQtPmRwOworCisJLyoKKwkgKiBJdCB3b3VsZCBiZSBu aWNlIHRvIGJlIGFibGUgdG8ganVzdCBkbyB0aGUgd29yayBpbmxpbmUgcmlnaHQgaGVyZS4KKwkg KiBIb3dldmVyLCB3ZSBuZWVkIHRvIG1ha2UgYSBidW5jaCBvZiBjYWxscyB0aGF0IG1pZ2h0IHNs ZWVwIGluIG9yZGVyCisJICogdG8gdHVybiBvbiB0aGUgYmxvY2svcGh5LCBzbyB1c2UgYSB3b3Jr ZXIgaW5zdGVhZC4KKwkgKi8KKwlzY2hlZHVsZV93b3JrKCZkcC0+ZXZlbnRfd29yayk7CisKKwly ZXR1cm4gTk9USUZZX0RPTkU7Cit9CisKK3N0YXRpYyBpbnQgY2RuX2RwX2JpbmQoc3RydWN0IGRl dmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0 IGNkbl9kcF9kZXZpY2UgKmRwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGRybV9l bmNvZGVyICplbmNvZGVyOworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisJc3Ry dWN0IGNkbl9kcF9wb3J0ICpwb3J0OworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2ID0gZGF0 YTsKKwlpbnQgcmV0LCBpOworCisJcG1fcnVudGltZV9lbmFibGUoZGV2KTsKKworCXJldCA9IGNk bl9kcF9wYXJzZV9kdChkcCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlkcC0+ ZHJtX2RldiA9IGRybV9kZXY7CisJZHAtPmVuYWJsZWQgPSB0cnVlOworCWRwLT5hY3RpdmUgPSBm YWxzZTsKKworCW11dGV4X2luaXQoJmRwLT5sb2NrKTsKKwlJTklUX1dPUksoJmRwLT5ldmVudF93 b3JrLCBjZG5fZHBfcGRfZXZlbnRfd29yayk7CisKKwllbmNvZGVyID0gJmRwLT5lbmNvZGVyOwor CisJZW5jb2Rlci0+cG9zc2libGVfY3J0Y3MgPSBkcm1fb2ZfZmluZF9wb3NzaWJsZV9jcnRjcyhk cm1fZGV2LAorCQkJCQkJCSAgICAgZGV2LT5vZl9ub2RlKTsKKwlEUk1fREVCVUdfS01TKCJwb3Nz aWJsZV9jcnRjcyA9IDB4JXhcbiIsIGVuY29kZXItPnBvc3NpYmxlX2NydGNzKTsKKworCXJldCA9 IGRybV9lbmNvZGVyX2luaXQoZHJtX2RldiwgZW5jb2RlciwgJmNkbl9kcF9lbmNvZGVyX2Z1bmNz LAorCQkJICAgICAgIERSTV9NT0RFX0VOQ09ERVJfVE1EUywgTlVMTCk7CisJaWYgKHJldCkgewor CQlEUk1fRVJST1IoImZhaWxlZCB0byBpbml0aWFsaXplIGVuY29kZXIgd2l0aCBkcm1cbiIpOwor CQlyZXR1cm4gcmV0OworCX0KKworCWRybV9lbmNvZGVyX2hlbHBlcl9hZGQoZW5jb2RlciwgJmNk bl9kcF9lbmNvZGVyX2hlbHBlcl9mdW5jcyk7CisKKwljb25uZWN0b3IgPSAmZHAtPmNvbm5lY3Rv cjsKKwljb25uZWN0b3ItPnBvbGxlZCA9IERSTV9DT05ORUNUT1JfUE9MTF9IUEQ7CisJY29ubmVj dG9yLT5kcG1zID0gRFJNX01PREVfRFBNU19PRkY7CisKKwlyZXQgPSBkcm1fY29ubmVjdG9yX2lu aXQoZHJtX2RldiwgY29ubmVjdG9yLAorCQkJCSAmY2RuX2RwX2F0b21pY19jb25uZWN0b3JfZnVu Y3MsCisJCQkJIERSTV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9ydCk7CisJaWYgKHJldCkgewor CQlEUk1fRVJST1IoImZhaWxlZCB0byBpbml0aWFsaXplIGNvbm5lY3RvciB3aXRoIGRybVxuIik7 CisJCWdvdG8gZXJyX2ZyZWVfZW5jb2RlcjsKKwl9CisKKwlkcm1fY29ubmVjdG9yX2hlbHBlcl9h ZGQoY29ubmVjdG9yLCAmY2RuX2RwX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOworCisJcmV0ID0g ZHJtX21vZGVfY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKGNvbm5lY3RvciwgZW5jb2Rlcik7CisJ aWYgKHJldCkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBhdHRhY2ggY29ubmVjdG9yIGFuZCBl bmNvZGVyXG4iKTsKKwkJZ290byBlcnJfZnJlZV9jb25uZWN0b3I7CisJfQorCisJY2RuX2RwX2F1 ZGlvX2NvZGVjX2luaXQoZHAsIGRldik7CisKKwlmb3IgKGkgPSAwOyBpIDwgZHAtPnBvcnRzOyBp KyspIHsKKwkJcG9ydCA9IGRwLT5wb3J0W2ldOworCisJCXBvcnQtPmV2ZW50X25iLm5vdGlmaWVy X2NhbGwgPSBjZG5fZHBfcGRfZXZlbnQ7CisJCXJldCA9IGRldm1fZXh0Y29uX3JlZ2lzdGVyX25v dGlmaWVyKGRwLT5kZXYsIHBvcnQtPmV4dGNvbiwKKwkJCQkJCSAgICBFWFRDT05fRElTUF9EUCwK KwkJCQkJCSAgICAmcG9ydC0+ZXZlbnRfbmIpOworCQlpZiAocmV0KSB7CisJCQlEUk1fREVWX0VS Uk9SKGRldiwKKwkJCQkgICAgICAicmVnaXN0ZXIgRVhUQ09OX0RJU1BfRFAgbm90aWZpZXIgZXJy XG4iKTsKKwkJCWdvdG8gZXJyX2ZyZWVfY29ubmVjdG9yOworCQl9CisKKwkJaWYgKGV4dGNvbl9n ZXRfc3RhdGUocG9ydC0+ZXh0Y29uLCBFWFRDT05fRElTUF9EUCkpCisJCQlzY2hlZHVsZV93b3Jr KCZkcC0+ZXZlbnRfd29yayk7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9mcmVlX2Nvbm5lY3Rv cjoKKwlkcm1fY29ubmVjdG9yX2NsZWFudXAoY29ubmVjdG9yKTsKK2Vycl9mcmVlX2VuY29kZXI6 CisJZHJtX2VuY29kZXJfY2xlYW51cChlbmNvZGVyKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0 aWMgdm9pZCBjZG5fZHBfdW5iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAq bWFzdGVyLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCA9IGRldl9n ZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciA9ICZkcC0+ZW5j b2RlcjsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yID0gJmRwLT5jb25uZWN0b3I7 CisKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihkcC0+YXVkaW9fcGRldik7CisJY2RuX2Rw X2VuY29kZXJfZGlzYWJsZShlbmNvZGVyKTsKKwllbmNvZGVyLT5mdW5jcy0+ZGVzdHJveShlbmNv ZGVyKTsKKwljb25uZWN0b3ItPmZ1bmNzLT5kZXN0cm95KGNvbm5lY3Rvcik7CisKKwlwbV9ydW50 aW1lX2Rpc2FibGUoZGV2KTsKKwlyZWxlYXNlX2Zpcm13YXJlKGRwLT5mdyk7Cit9CisKK3N0YXRp YyBjb25zdCBzdHJ1Y3QgY29tcG9uZW50X29wcyBjZG5fZHBfY29tcG9uZW50X29wcyA9IHsKKwku YmluZCA9IGNkbl9kcF9iaW5kLAorCS51bmJpbmQgPSBjZG5fZHBfdW5iaW5kLAorfTsKKworaW50 IGNkbl9kcF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgY2RuX2RwX2Rl dmljZSAqZHAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChkcC0+YWN0aXZlKQorCQly ZXR1cm4gY2RuX2RwX2Rpc2FibGUoZHApOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBjZG5fZHBf cmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAg PSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXNjaGVkdWxlX3dvcmsoJmRwLT5ldmVudF93b3Jr KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjZG5fZHBfcHJvYmUoc3RydWN0IHBsYXRm b3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Owor CWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoOworCXN0cnVjdCBjZG5fZHBfZGF0YSAq ZHBfZGF0YTsKKwlzdHJ1Y3QgY2RuX2RwX3BvcnQgKnBvcnQ7CisJc3RydWN0IGNkbl9kcF9kZXZp Y2UgKmRwOworCXN0cnVjdCBleHRjb25fZGV2ICpleHRjb247CisJc3RydWN0IHBoeSAqcGh5Owor CWludCBpOworCisJZHAgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmRwKSwgR0ZQX0tFUk5F TCk7CisJaWYgKCFkcCkKKwkJcmV0dXJuIC1FTk9NRU07CisJZHAtPmRldiA9IGRldjsKKworCW1h dGNoID0gb2ZfbWF0Y2hfbm9kZShjZG5fZHBfZHRfaWRzLCBwZGV2LT5kZXYub2Zfbm9kZSk7CisJ ZHBfZGF0YSA9IChzdHJ1Y3QgY2RuX2RwX2RhdGEgKiltYXRjaC0+ZGF0YTsKKworCWZvciAoaSA9 IDA7IGkgPCBkcF9kYXRhLT5tYXhfcGh5OyBpKyspIHsKKwkJZXh0Y29uID0gZXh0Y29uX2dldF9l ZGV2X2J5X3BoYW5kbGUoZGV2LCBpKTsKKwkJcGh5ID0gZGV2bV9vZl9waHlfZ2V0X2J5X2luZGV4 KGRldiwgZGV2LT5vZl9ub2RlLCBpKTsKKworCQlpZiAoUFRSX0VSUihleHRjb24pID09IC1FUFJP QkVfREVGRVIgfHwKKwkJICAgIFBUUl9FUlIocGh5KSA9PSAtRVBST0JFX0RFRkVSKQorCQkJcmV0 dXJuIC1FUFJPQkVfREVGRVI7CisKKwkJaWYgKElTX0VSUihleHRjb24pIHx8IElTX0VSUihwaHkp KQorCQkJY29udGludWU7CisKKwkJcG9ydCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcG9y dCksIEdGUF9LRVJORUwpOworCQlpZiAoIWRwKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJcG9y dC0+ZXh0Y29uID0gZXh0Y29uOworCQlwb3J0LT5waHkgPSBwaHk7CisJCXBvcnQtPmRwID0gZHA7 CisJCXBvcnQtPmlkID0gaTsKKwkJZHAtPnBvcnRbZHAtPnBvcnRzKytdID0gcG9ydDsKKwl9CisK KwlpZiAoIWRwLT5wb3J0cykgeworCQlEUk1fREVWX0VSUk9SKGRldiwgIm1pc3NpbmcgZXh0Y29u IG9yIHBoeVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRldl9zZXRfZHJ2ZGF0YShk ZXYsIGRwKTsKKworCXJldHVybiBjb21wb25lbnRfYWRkKGRldiwgJmNkbl9kcF9jb21wb25lbnRf b3BzKTsKK30KKworc3RhdGljIGludCBjZG5fZHBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZp Y2UgKnBkZXYpCit7CisJY29tcG9uZW50X2RlbCgmcGRldi0+ZGV2LCAmY2RuX2RwX2NvbXBvbmVu dF9vcHMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29w cyBjZG5fZHBfcG1fb3BzID0geworCVNFVF9TWVNURU1fU0xFRVBfUE1fT1BTKGNkbl9kcF9zdXNw ZW5kLAorCQkJCWNkbl9kcF9yZXN1bWUpCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2Ry aXZlciBjZG5fZHBfZHJpdmVyID0geworCS5wcm9iZSA9IGNkbl9kcF9wcm9iZSwKKwkucmVtb3Zl ID0gY2RuX2RwX3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkgICAubmFtZSA9ICJjZG4tZHAiLAor CQkgICAub3duZXIgPSBUSElTX01PRFVMRSwKKwkJICAgLm9mX21hdGNoX3RhYmxlID0gb2ZfbWF0 Y2hfcHRyKGNkbl9kcF9kdF9pZHMpLAorCQkgICAucG0gPSAmY2RuX2RwX3BtX29wcywKKwl9LAor fTsKKworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihjZG5fZHBfZHJpdmVyKTsKKworTU9EVUxFX0FV VEhPUigiQ2hyaXMgWmhvbmcgPHp5d0Byb2NrLWNoaXBzLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQ VElPTigiY2RuIERQIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2Nkbi1kcC1jb3JlLmggYi9kcml2ZXJzL2dw dS9kcm0vcm9ja2NoaXAvY2RuLWRwLWNvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi5jMGY3ZDA0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tj aGlwL2Nkbi1kcC1jb3JlLmgKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp IDIwMTYgQ2hyaXMgWmhvbmcgPHp5d0Byb2NrLWNoaXBzLmNvbT4KKyAqIENvcHlyaWdodCAoQykg MjAxNiBST0NLQ0hJUCwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQor ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUg TGljZW5zZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX0NETl9E UF9DT1JFX0gKKyNkZWZpbmUgX0NETl9EUF9DT1JFX0gKKworI2luY2x1ZGUgPGRybS9kcm1QLmg+ CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZHBf aGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wYW5lbC5oPgorI2luY2x1ZGUgInJvY2tjaGlw X2RybV9kcnYuaCIKKworI2RlZmluZSBNQVhfUEhZCQkyCisKK2VudW0gYXVkaW9fZm9ybWF0IHsK KwlBRk1UX0kyUyA9IDAsCisJQUZNVF9TUERJRiA9IDEsCisJQUZNVF9VTlVTRUQsCit9OworCitz dHJ1Y3QgYXVkaW9faW5mbyB7CisJZW51bSBhdWRpb19mb3JtYXQgZm9ybWF0OworCWludCBzYW1w bGVfcmF0ZTsKKwlpbnQgY2hhbm5lbHM7CisJaW50IHNhbXBsZV93aWR0aDsKK307CisKK2VudW0g dmljX3B4bF9lbmNvZGluZ19mb3JtYXQgeworCVBYTF9SR0IgPSAweDEsCisJWUNCQ1JfNF80XzQg PSAweDIsCisJWUNCQ1JfNF8yXzIgPSAweDQsCisJWUNCQ1JfNF8yXzAgPSAweDgsCisJWV9PTkxZ ID0gMHgxMCwKK307CisKK3N0cnVjdCB2aWRlb19pbmZvIHsKKwlib29sIGhfc3luY19wb2xhcml0 eTsKKwlib29sIHZfc3luY19wb2xhcml0eTsKKwlib29sIGludGVybGFjZWQ7CisJaW50IGNvbG9y X2RlcHRoOworCWVudW0gdmljX3B4bF9lbmNvZGluZ19mb3JtYXQgY29sb3JfZm10OworfTsKKwor c3RydWN0IGNkbl9maXJtd2FyZV9oZWFkZXIgeworCXUzMiBzaXplX2J5dGVzOyAvKiBzaXplIG9m IHRoZSBlbnRpcmUgaGVhZGVyK2ltYWdlKHMpIGluIGJ5dGVzICovCisJdTMyIGhlYWRlcl9zaXpl OyAvKiBzaXplIG9mIGp1c3QgdGhlIGhlYWRlciBpbiBieXRlcyAqLworCXUzMiBpcmFtX3NpemU7 IC8qIHNpemUgb2YgaXJhbSAqLworCXUzMiBkcmFtX3NpemU7IC8qIHNpemUgb2YgZHJhbSAqLwor fTsKKworc3RydWN0IGNkbl9kcF9wb3J0IHsKKwlzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHA7CisJ c3RydWN0IG5vdGlmaWVyX2Jsb2NrIGV2ZW50X25iOworCXN0cnVjdCBleHRjb25fZGV2ICpleHRj b247CisJc3RydWN0IHBoeSAqcGh5OworCXU4IGxhbmVzOworCWJvb2wgcGh5X2VuYWJsZWQ7CisJ dTggaWQ7Cit9OworCitzdHJ1Y3QgY2RuX2RwX2RldmljZSB7CisJc3RydWN0IGRldmljZSAqZGV2 OworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2OworCXN0cnVjdCBkcm1fY29ubmVjdG9yIGNv bm5lY3RvcjsKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgZW5jb2RlcjsKKwlzdHJ1Y3QgZHJtX2Rpc3Bs YXlfbW9kZSBtb2RlOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmF1ZGlvX3BkZXY7CisJc3Ry dWN0IHdvcmtfc3RydWN0IGV2ZW50X3dvcms7CisKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKKwlib29s IGVuYWJsZWQ7CisJYm9vbCBhY3RpdmU7CisKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3Owkv KiBjZG4gZHAgZmlybXdhcmUgKi8KKwl1bnNpZ25lZCBpbnQgZndfdmVyc2lvbjsJLyogY2RuIGZ3 IHZlcnNpb24gKi8KKwlib29sIGZ3X2xvYWRlZDsKKworCXZvaWQgX19pb21lbSAqcmVnczsKKwlz dHJ1Y3QgcmVnbWFwICpncmY7CisJc3RydWN0IGNsayAqY29yZV9jbGs7CisJc3RydWN0IGNsayAq cGNsazsKKwlzdHJ1Y3QgY2xrICpzcGRpZl9jbGs7CisJc3RydWN0IGNsayAqZ3JmX2NsazsKKwlz dHJ1Y3QgcmVzZXRfY29udHJvbCAqc3BkaWZfcnN0OworCXN0cnVjdCByZXNldF9jb250cm9sICpk cHR4X3JzdDsKKwlzdHJ1Y3QgcmVzZXRfY29udHJvbCAqYXBiX3JzdDsKKwlzdHJ1Y3QgYXVkaW9f aW5mbyBhdWRpb19pbmZvOworCXN0cnVjdCB2aWRlb19pbmZvIHZpZGVvX2luZm87CisJc3RydWN0 IGRybV9kcF9saW5rIGxpbms7CisJc3RydWN0IGNkbl9kcF9wb3J0ICpwb3J0W01BWF9QSFldOwor CXU4IHBvcnRzOworCisJdTggZHBjZFtEUF9SRUNFSVZFUl9DQVBfU0laRV07CisJYm9vbCBzaW5r X2hhc19hdWRpbzsKKwlib29sIG5vX3Npbms7Cit9OworI2VuZGlmICAvKiBfQ0ROX0RQX0NPUkVf SCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2Nkbi1kcC1yZWcuYyBi L2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9jZG4tZHAtcmVnLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uOGQ3ZDFjOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9yb2NrY2hpcC9jZG4tZHAtcmVnLmMKQEAgLTAsMCArMSw5NTYgQEAKKy8qCisgKiBDb3B5 cmlnaHQgKEMpIEZ1emhvdSBSb2NrY2hpcCBFbGVjdHJvbmljcyBDby5MdGQKKyAqIEF1dGhvcjog Q2hyaXMgWmhvbmcgPHp5d0Byb2NrLWNoaXBzLmNvbT4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlz IGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBM aWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1 bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNs dWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxs aW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW9w b2xsLmg+CisjaW5jbHVkZSA8bGludXgvcmVzZXQuaD4KKworI2luY2x1ZGUgImNkbi1kcC1jb3Jl LmgiCisjaW5jbHVkZSAiY2RuLWRwLXJlZy5oIgorCisjZGVmaW5lIENETl9EUF9TUERJRl9DTEsJ CTIwMDAwMDAwMAorI2RlZmluZSBGV19BTElWRV9USU1FT1VUX1VTCQkxMDAwMDAwCisjZGVmaW5l IE1BSUxCT1hfUkVUUllfVVMJCTEwMDAKKyNkZWZpbmUgTUFJTEJPWF9USU1FT1VUX1VTCQk1MDAw MDAwCisjZGVmaW5lIExJTktfVFJBSU5JTkdfUkVUUllfTVMJCTIwCisjZGVmaW5lIExJTktfVFJB SU5JTkdfVElNRU9VVF9NUwk1MDAKKwordm9pZCBjZG5fZHBfc2V0X2Z3X2NsayhzdHJ1Y3QgY2Ru X2RwX2RldmljZSAqZHAsIHUzMiBjbGspCit7CisJd3JpdGVsKGNsayAvIDEwMDAwMDAsIGRwLT5y ZWdzICsgU1dfQ0xLX0gpOworfQorCit2b2lkIGNkbl9kcF9jbG9ja19yZXNldChzdHJ1Y3QgY2Ru X2RwX2RldmljZSAqZHApCit7CisJdTMyIHZhbDsKKworCXZhbCA9IERQVFhfRlJNUl9EQVRBX0NM S19SU1ROX0VOIHwKKwkgICAgICBEUFRYX0ZSTVJfREFUQV9DTEtfRU4gfAorCSAgICAgIERQVFhf UEhZX0RBVEFfUlNUTl9FTiB8CisJICAgICAgRFBUWF9QSFlfREFUQV9DTEtfRU4gfAorCSAgICAg IERQVFhfUEhZX0NIQVJfUlNUTl9FTiB8CisJICAgICAgRFBUWF9QSFlfQ0hBUl9DTEtfRU4gfAor CSAgICAgIFNPVVJDRV9BVVhfU1lTX0NMS19SU1ROX0VOIHwKKwkgICAgICBTT1VSQ0VfQVVYX1NZ U19DTEtfRU4gfAorCSAgICAgIERQVFhfU1lTX0NMS19SU1ROX0VOIHwKKwkgICAgICBEUFRYX1NZ U19DTEtfRU4gfAorCSAgICAgIENGR19EUFRYX1ZJRl9DTEtfUlNUTl9FTiB8CisJICAgICAgQ0ZH X0RQVFhfVklGX0NMS19FTjsKKwl3cml0ZWwodmFsLCBkcC0+cmVncyArIFNPVVJDRV9EUFRYX0NB Uik7CisKKwl2YWwgPSBTT1VSQ0VfUEhZX1JTVE5fRU4gfCBTT1VSQ0VfUEhZX0NMS19FTjsKKwl3 cml0ZWwodmFsLCBkcC0+cmVncyArIFNPVVJDRV9QSFlfQ0FSKTsKKworCXZhbCA9IFNPVVJDRV9Q S1RfU1lTX1JTVE5fRU4gfAorCSAgICAgIFNPVVJDRV9QS1RfU1lTX0NMS19FTiB8CisJICAgICAg U09VUkNFX1BLVF9EQVRBX1JTVE5fRU4gfAorCSAgICAgIFNPVVJDRV9QS1RfREFUQV9DTEtfRU47 CisJd3JpdGVsKHZhbCwgZHAtPnJlZ3MgKyBTT1VSQ0VfUEtUX0NBUik7CisKKwl2YWwgPSBTUERJ Rl9DRFJfQ0xLX1JTVE5fRU4gfAorCSAgICAgIFNQRElGX0NEUl9DTEtfRU4gfAorCSAgICAgIFNP VVJDRV9BSUZfU1lTX1JTVE5fRU4gfAorCSAgICAgIFNPVVJDRV9BSUZfU1lTX0NMS19FTiB8CisJ ICAgICAgU09VUkNFX0FJRl9DTEtfUlNUTl9FTiB8CisJICAgICAgU09VUkNFX0FJRl9DTEtfRU47 CisJd3JpdGVsKHZhbCwgZHAtPnJlZ3MgKyBTT1VSQ0VfQUlGX0NBUik7CisKKwl2YWwgPSBTT1VS Q0VfQ0lQSEVSX1NZU1RFTV9DTEtfUlNUTl9FTiB8CisJICAgICAgU09VUkNFX0NJUEhFUl9TWVNf Q0xLX0VOIHwKKwkgICAgICBTT1VSQ0VfQ0lQSEVSX0NIQVJfQ0xLX1JTVE5fRU4gfAorCSAgICAg IFNPVVJDRV9DSVBIRVJfQ0hBUl9DTEtfRU47CisJd3JpdGVsKHZhbCwgZHAtPnJlZ3MgKyBTT1VS Q0VfQ0lQSEVSX0NBUik7CisKKwl2YWwgPSBTT1VSQ0VfQ1JZUFRPX1NZU19DTEtfUlNUTl9FTiB8 CisJICAgICAgU09VUkNFX0NSWVBUT19TWVNfQ0xLX0VOOworCXdyaXRlbCh2YWwsIGRwLT5yZWdz ICsgU09VUkNFX0NSWVBUT19DQVIpOworCisJdmFsID0gfihNQUlMQk9YX0lOVF9NQVNLX0JJVCB8 IFBJRl9JTlRfTUFTS19CSVQpICYgQUxMX0lOVF9NQVNLOworCXdyaXRlbCh2YWwsIGRwLT5yZWdz ICsgQVBCX0lOVF9NQVNLKTsKK30KKworc3RhdGljIGludCBjZG5fZHBfbWFpbGJveF9yZWFkKHN0 cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgYm9vbCBmb3JjZSkKK3sKKwlpbnQgdmFsLCByZXQ7CisK KwlyZXQgPSByZWFkeF9wb2xsX3RpbWVvdXQocmVhZGwsIGRwLT5yZWdzICsgTUFJTEJPWF9FTVBU WV9BRERSLAorCQkJCSB2YWwsICF2YWwsIE1BSUxCT1hfUkVUUllfVVMsCisJCQkJIE1BSUxCT1hf VElNRU9VVF9VUyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gcmVh ZGwoZHAtPnJlZ3MgKyBNQUlMQk9YMF9SRF9EQVRBKSAmIDB4ZmY7Cit9CisKK3N0YXRpYyBpbnQg Y2RwX2RwX21haWxib3hfd3JpdGUoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwLCB1OCB2YWwsIGJv b2wgZm9yY2UpCit7CisJaW50IHJldCwgZnVsbDsKKworCXJldCA9IHJlYWR4X3BvbGxfdGltZW91 dChyZWFkbCwgZHAtPnJlZ3MgKyBNQUlMQk9YX0ZVTExfQUREUiwKKwkJCQkgZnVsbCwgIWZ1bGws IE1BSUxCT1hfUkVUUllfVVMsCisJCQkJIE1BSUxCT1hfVElNRU9VVF9VUyk7CisJaWYgKHJldCA8 IDApCisJCXJldHVybiByZXQ7CisKKwl3cml0ZWwodmFsLCBkcC0+cmVncyArIE1BSUxCT1gwX1dS X0RBVEEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2RuX2RwX21haWxib3hfdmFs aWRhdGVfcmVjZWl2ZShzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsCisJCQkJCSAgIHU4IG1vZHVs ZV9pZCwgdTggb3Bjb2RlLAorCQkJCQkgICB1OCByZXFfc2l6ZSkKK3sKKwl1MzIgbWJveF9zaXpl LCBpOworCXU4IGhlYWRlcls0XTsKKwlpbnQgcmV0OworCisJLyogcmVhZCB0aGUgaGVhZGVyIG9m IHRoZSBtZXNzYWdlICovCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQlyZXQgPSBjZG5f ZHBfbWFpbGJveF9yZWFkKGRwLCAwKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0Owor CisJCWhlYWRlcltpXSA9IHJldDsKKwl9CisKKwltYm94X3NpemUgPSAoaGVhZGVyWzJdIDw8IDgp IHwgaGVhZGVyWzNdOworCisJaWYgKG9wY29kZSAhPSBoZWFkZXJbMF0gfHwgbW9kdWxlX2lkICE9 IGhlYWRlclsxXSB8fAorCSAgICByZXFfc2l6ZSAhPSBtYm94X3NpemUpIHsKKwkJLyoKKwkJICog SWYgdGhlIG1lc3NhZ2UgaW4gbWFpbGJveCBpcyBub3Qgd2hhdCB3ZSB3YW50LCB3ZSBuZWVkIHRv CisJCSAqIGNsZWFyIHRoZSBtYWlsYm94IGJ5IHJlYWRpbmcgaXRzIGNvbnRlbnRzLgorCQkgKi8K KwkJZm9yIChpID0gMDsgaSA8IG1ib3hfc2l6ZTsgaSsrKQorCQkJaWYgKGNkbl9kcF9tYWlsYm94 X3JlYWQoZHAsIDApIDwgMCkKKwkJCQlicmVhazsKKworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjZG5fZHBfbWFpbGJveF9yZWFkX3JlY2VpdmUo c3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwLAorCQkJCSAgICAgICB1OCAqYnVmZiwgdTggYnVmZl9z aXplKQoreworCXUzMiBpOworCWludCByZXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgYnVmZl9zaXpl OyBpKyspIHsKKwkJcmV0ID0gY2RuX2RwX21haWxib3hfcmVhZChkcCwgMCk7CisJCWlmIChyZXQg PCAwKQorCQkJcmV0dXJuIHJldDsKKworCQlidWZmW2ldID0gcmV0OworCX0KKworCXJldHVybiAw OworfQorCitzdGF0aWMgaW50IGNkbl9kcF9tYWlsYm94X3NlbmQoc3RydWN0IGNkbl9kcF9kZXZp Y2UgKmRwLCB1OCBtb2R1bGVfaWQsCisJCQkgICAgICAgdTggb3Bjb2RlLCB1MTYgc2l6ZSwgdTgg Km1lc3NhZ2UpCit7CisJdTggaGVhZGVyWzRdOworCWludCByZXQsIGk7CisKKwloZWFkZXJbMF0g PSBvcGNvZGU7CisJaGVhZGVyWzFdID0gbW9kdWxlX2lkOworCWhlYWRlclsyXSA9IChzaXplID4+ IDgpICYgMHhmZjsKKwloZWFkZXJbM10gPSBzaXplICYgMHhmZjsKKworCWZvciAoaSA9IDA7IGkg PCA0OyBpKyspIHsKKwkJcmV0ID0gY2RwX2RwX21haWxib3hfd3JpdGUoZHAsIGhlYWRlcltpXSwg MCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCWZvciAoaSA9IDA7IGkgPCBz aXplOyBpKyspIHsKKwkJcmV0ID0gY2RwX2RwX21haWxib3hfd3JpdGUoZHAsIG1lc3NhZ2VbaV0s IDApOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIGludCBjZG5fZHBfcmVnX3dyaXRlKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgdTE2 IGFkZHIsIHUzMiB2YWwpCit7CisJdTggbXNnWzZdOworCisJbXNnWzBdID0gKGFkZHIgPj4gOCkg JiAweGZmOworCW1zZ1sxXSA9IGFkZHIgJiAweGZmOworCW1zZ1syXSA9ICh2YWwgPj4gMjQpICYg MHhmZjsKKwltc2dbM10gPSAodmFsID4+IDE2KSAmIDB4ZmY7CisJbXNnWzRdID0gKHZhbCA+PiA4 KSAmIDB4ZmY7CisJbXNnWzVdID0gdmFsICYgMHhmZjsKKwlyZXR1cm4gY2RuX2RwX21haWxib3hf c2VuZChkcCwgTUJfTU9EVUxFX0lEX0RQX1RYLCBEUFRYX1dSSVRFX1JFR0lTVEVSLAorCQkJCSAg IHNpemVvZihtc2cpLCBtc2cpOworfQorCitzdGF0aWMgaW50IGNkbl9kcF9yZWdfd3JpdGVfYml0 KHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgdTE2IGFkZHIsCisJCQkJdTggc3RhcnRfYml0LCB1 OCBiaXRzX25vLCB1MzIgdmFsKQoreworCXU4IGZpZWxkWzhdOworCisJZmllbGRbMF0gPSAoYWRk ciA+PiA4KSAmIDB4ZmY7CisJZmllbGRbMV0gPSBhZGRyICYgMHhmZjsKKwlmaWVsZFsyXSA9IHN0 YXJ0X2JpdDsKKwlmaWVsZFszXSA9IGJpdHNfbm87CisJZmllbGRbNF0gPSAodmFsID4+IDI0KSAm IDB4ZmY7CisJZmllbGRbNV0gPSAodmFsID4+IDE2KSAmIDB4ZmY7CisJZmllbGRbNl0gPSAodmFs ID4+IDgpICYgMHhmZjsKKwlmaWVsZFs3XSA9IHZhbCAmIDB4ZmY7CisKKwlyZXR1cm4gY2RuX2Rw X21haWxib3hfc2VuZChkcCwgTUJfTU9EVUxFX0lEX0RQX1RYLCBEUFRYX1dSSVRFX0ZJRUxELAor CQkJCSAgIHNpemVvZihmaWVsZCksIGZpZWxkKTsKK30KKworaW50IGNkbl9kcF9kcGNkX3JlYWQo c3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwLCB1MzIgYWRkciwgdTggKmRhdGEsIHUxNiBsZW4pCit7 CisJdTggbXNnWzVdLCByZWdbNV07CisJaW50IHJldDsKKworCW1zZ1swXSA9IChsZW4gPj4gOCkg JiAweGZmOworCW1zZ1sxXSA9IGxlbiAmIDB4ZmY7CisJbXNnWzJdID0gKGFkZHIgPj4gMTYpICYg MHhmZjsKKwltc2dbM10gPSAoYWRkciA+PiA4KSAmIDB4ZmY7CisJbXNnWzRdID0gYWRkciAmIDB4 ZmY7CisJcmV0ID0gY2RuX2RwX21haWxib3hfc2VuZChkcCwgTUJfTU9EVUxFX0lEX0RQX1RYLCBE UFRYX1JFQURfRFBDRCwKKwkJCQkgIHNpemVvZihtc2cpLCBtc2cpOworCWlmIChyZXQpCisJCWdv dG8gZXJyX2RwY2RfcmVhZDsKKworCXJldCA9IGNkbl9kcF9tYWlsYm94X3ZhbGlkYXRlX3JlY2Vp dmUoZHAsIE1CX01PRFVMRV9JRF9EUF9UWCwKKwkJCQkJICAgICAgRFBUWF9SRUFEX0RQQ0QsCisJ CQkJCSAgICAgIHNpemVvZihyZWcpICsgbGVuKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9kcGNk X3JlYWQ7CisKKwlyZXQgPSBjZG5fZHBfbWFpbGJveF9yZWFkX3JlY2VpdmUoZHAsIHJlZywgc2l6 ZW9mKHJlZykpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2RwY2RfcmVhZDsKKworCXJldCA9IGNk bl9kcF9tYWlsYm94X3JlYWRfcmVjZWl2ZShkcCwgZGF0YSwgbGVuKTsKKworZXJyX2RwY2RfcmVh ZDoKKwlyZXR1cm4gcmV0OworfQorCitpbnQgY2RuX2RwX2RwY2Rfd3JpdGUoc3RydWN0IGNkbl9k cF9kZXZpY2UgKmRwLCB1MzIgYWRkciwgdTggdmFsdWUpCit7CisJdTggbXNnWzZdLCByZWdbNV07 CisJaW50IHJldDsKKworCW1zZ1swXSA9IDA7CisJbXNnWzFdID0gMTsKKwltc2dbMl0gPSAoYWRk ciA+PiAxNikgJiAweGZmOworCW1zZ1szXSA9IChhZGRyID4+IDgpICYgMHhmZjsKKwltc2dbNF0g PSBhZGRyICYgMHhmZjsKKwltc2dbNV0gPSB2YWx1ZTsKKwlyZXQgPSBjZG5fZHBfbWFpbGJveF9z ZW5kKGRwLCBNQl9NT0RVTEVfSURfRFBfVFgsIERQVFhfV1JJVEVfRFBDRCwKKwkJCQkgIHNpemVv Zihtc2cpLCBtc2cpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2RwY2Rfd3JpdGU7CisKKwlyZXQg PSBjZG5fZHBfbWFpbGJveF92YWxpZGF0ZV9yZWNlaXZlKGRwLCBNQl9NT0RVTEVfSURfRFBfVFgs CisJCQkJCSAgICAgIERQVFhfV1JJVEVfRFBDRCwgc2l6ZW9mKHJlZykpOworCWlmIChyZXQpCisJ CWdvdG8gZXJyX2RwY2Rfd3JpdGU7CisKKwlyZXQgPSBjZG5fZHBfbWFpbGJveF9yZWFkX3JlY2Vp dmUoZHAsIHJlZywgc2l6ZW9mKHJlZykpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2RwY2Rfd3Jp dGU7CisKKwlpZiAoYWRkciAhPSAocmVnWzJdIDw8IDE2IHwgcmVnWzNdIDw8IDggfCByZWdbNF0p KQorCQlyZXQgPSAtRUlOVkFMOworCitlcnJfZHBjZF93cml0ZToKKwlpZiAocmV0KQorCQlEUk1f REVWX0VSUk9SKGRwLT5kZXYsICJkcGNkIHdyaXRlIGZhaWxlZDogJWRcbiIsIHJldCk7CisJcmV0 dXJuIHJldDsKK30KKworaW50IGNkbl9kcF9sb2FkX2Zpcm13YXJlKHN0cnVjdCBjZG5fZHBfZGV2 aWNlICpkcCwgY29uc3QgdTMyICppX21lbSwKKwkJCSB1MzIgaV9zaXplLCBjb25zdCB1MzIgKmRf bWVtLCB1MzIgZF9zaXplKQoreworCXUzMiByZWc7CisJaW50IGksIHJldDsKKworCS8qIHJlc2V0 IHVjcHUgYmVmb3JlIGxvYWQgZmlybXdhcmUqLworCXdyaXRlbChBUEJfSVJBTV9QQVRIIHwgQVBC X0RSQU1fUEFUSCB8IEFQQl9YVF9SRVNFVCwKKwkgICAgICAgZHAtPnJlZ3MgKyBBUEJfQ1RSTCk7 CisKKwlmb3IgKGkgPSAwOyBpIDwgaV9zaXplOyBpICs9IDQpCisJCXdyaXRlbCgqaV9tZW0rKywg ZHAtPnJlZ3MgKyBBRERSX0lNRU0gKyBpKTsKKworCWZvciAoaSA9IDA7IGkgPCBkX3NpemU7IGkg Kz0gNCkKKwkJd3JpdGVsKCpkX21lbSsrLCBkcC0+cmVncyArIEFERFJfRE1FTSArIGkpOworCisJ LyogdW4tcmVzZXQgdWNwdSAqLworCXdyaXRlbCgwLCBkcC0+cmVncyArIEFQQl9DVFJMKTsKKwor CS8qIGNoZWNrIHRoZSBrZWVwIGFsaXZlIHJlZ2lzdGVyIHRvIG1ha2Ugc3VyZSBmdyB3b3JraW5n ICovCisJcmV0ID0gcmVhZHhfcG9sbF90aW1lb3V0KHJlYWRsLCBkcC0+cmVncyArIEtFRVBfQUxJ VkUsCisJCQkJIHJlZywgcmVnLCAyMDAwLCBGV19BTElWRV9USU1FT1VUX1VTKTsKKwlpZiAocmV0 IDwgMCkgeworCQlEUk1fREVWX0VSUk9SKGRwLT5kZXYsICJmYWlsZWQgdG8gbG9hZGVkIHRoZSBG VyByZWcgPSAleFxuIiwKKwkJCSAgICAgIHJlZyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwor CXJlZyA9IHJlYWRsKGRwLT5yZWdzICsgVkVSX0wpICYgMHhmZjsKKwlkcC0+ZndfdmVyc2lvbiA9 IHJlZzsKKwlyZWcgPSByZWFkbChkcC0+cmVncyArIFZFUl9IKSAmIDB4ZmY7CisJZHAtPmZ3X3Zl cnNpb24gfD0gcmVnIDw8IDg7CisJcmVnID0gcmVhZGwoZHAtPnJlZ3MgKyBWRVJfTElCX0xfQURE UikgJiAweGZmOworCWRwLT5md192ZXJzaW9uIHw9IHJlZyA8PCAxNjsKKwlyZWcgPSByZWFkbChk cC0+cmVncyArIFZFUl9MSUJfSF9BRERSKSAmIDB4ZmY7CisJZHAtPmZ3X3ZlcnNpb24gfD0gcmVn IDw8IDI0OworCisJZGV2X2RiZyhkcC0+ZGV2LCAiZmlybXdhcmUgdmVyc2lvbjogJXhcbiIsIGRw LT5md192ZXJzaW9uKTsKKworCXJldHVybiAwOworfQorCitpbnQgY2RuX2RwX3NldF9maXJtd2Fy ZV9hY3RpdmUoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwLCBib29sIGVuYWJsZSkKK3sKKwl1OCBt c2dbNV07CisJaW50IHJldCwgaTsKKworCW1zZ1swXSA9IEdFTkVSQUxfTUFJTl9DT05UUk9MOwor CW1zZ1sxXSA9IE1CX01PRFVMRV9JRF9HRU5FUkFMOworCW1zZ1syXSA9IDA7CisJbXNnWzNdID0g MTsKKwltc2dbNF0gPSBlbmFibGUgPyBGV19BQ1RJVkUgOiBGV19TVEFOREJZOworCisJZm9yIChp ID0gMDsgaSA8IHNpemVvZihtc2cpOyBpKyspIHsKKwkJcmV0ID0gY2RwX2RwX21haWxib3hfd3Jp dGUoZHAsIG1zZ1tpXSwgMSk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycl9zZXRfZmlybXdhcmVf YWN0aXZlOworCX0KKworCS8qIHJlYWQgdGhlIGZpcm13YXJlIHN0YXRlICovCisJZm9yIChpID0g MDsgaSA8IHNpemVvZihtc2cpOyBpKyspICB7CisJCXJldCA9IGNkbl9kcF9tYWlsYm94X3JlYWQo ZHAsIDEpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZXJyX3NldF9maXJtd2FyZV9hY3RpdmU7 CisKKwkJbXNnW2ldID0gcmV0OworCX0KKworCXJldCA9IDA7CisKK2Vycl9zZXRfZmlybXdhcmVf YWN0aXZlOgorCWlmIChyZXQgPCAwKQorCQlEUk1fREVWX0VSUk9SKGRwLT5kZXYsICJzZXQgZmly bXdhcmUgYWN0aXZlIGZhaWxlZFxuIik7CisJcmV0dXJuIHJldDsKK30KKworaW50IGNkbl9kcF9z ZXRfaG9zdF9jYXAoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwLCB1OCBsYW5lcywgYm9vbCBmbGlw KQoreworCXU4IG1zZ1s4XTsKKwlpbnQgcmV0OworCisJbXNnWzBdID0gQ0ROX0RQX01BWF9MSU5L X1JBVEU7CisJbXNnWzFdID0gbGFuZXM7CisJbXNnWzJdID0gVk9MVEFHRV9MRVZFTF8yOworCW1z Z1szXSA9IFBSRV9FTVBIQVNJU19MRVZFTF8zOworCW1zZ1s0XSA9IFBUUzEgfCBQVFMyIHwgUFRT MyB8IFBUUzQ7CisJbXNnWzVdID0gRkFTVF9MVF9OT1RfU1VQUE9SVDsKKwltc2dbNl0gPSBmbGlw ID8gTEFORV9NQVBQSU5HX0ZMSVBQRUQgOiBMQU5FX01BUFBJTkdfTk9STUFMOworCW1zZ1s3XSA9 IEVOSEFOQ0VEOworCisJcmV0ID0gY2RuX2RwX21haWxib3hfc2VuZChkcCwgTUJfTU9EVUxFX0lE X0RQX1RYLAorCQkJCSAgRFBUWF9TRVRfSE9TVF9DQVBBQklMSVRJRVMsCisJCQkJICBzaXplb2Yo bXNnKSwgbXNnKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9zZXRfaG9zdF9jYXA7CisKKwlyZXQg PSBjZG5fZHBfcmVnX3dyaXRlKGRwLCBEUF9BVVhfU1dBUF9JTlZFUlNJT05fQ09OVFJPTCwKKwkJ CSAgICAgICBBVVhfSE9TVF9JTlZFUlQpOworCitlcnJfc2V0X2hvc3RfY2FwOgorCWlmIChyZXQp CisJCURSTV9ERVZfRVJST1IoZHAtPmRldiwgInNldCBob3N0IGNhcCBmYWlsZWQ6ICVkXG4iLCBy ZXQpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBjZG5fZHBfZXZlbnRfY29uZmlnKHN0cnVjdCBj ZG5fZHBfZGV2aWNlICpkcCkKK3sKKwl1OCBtc2dbNV07CisJaW50IHJldDsKKworCW1lbXNldCht c2csIDAsIHNpemVvZihtc2cpKTsKKworCW1zZ1swXSA9IERQVFhfRVZFTlRfRU5BQkxFX0hQRCB8 IERQVFhfRVZFTlRfRU5BQkxFX1RSQUlOSU5HOworCisJcmV0ID0gY2RuX2RwX21haWxib3hfc2Vu ZChkcCwgTUJfTU9EVUxFX0lEX0RQX1RYLCBEUFRYX0VOQUJMRV9FVkVOVCwKKwkJCQkgIHNpemVv Zihtc2cpLCBtc2cpOworCWlmIChyZXQpCisJCURSTV9ERVZfRVJST1IoZHAtPmRldiwgInNldCBl dmVudCBjb25maWcgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3Uz MiBjZG5fZHBfZ2V0X2V2ZW50KHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCkKK3sKKwlyZXR1cm4g cmVhZGwoZHAtPnJlZ3MgKyBTV19FVkVOVFMwKTsKK30KKworaW50IGNkbl9kcF9nZXRfaHBkX3N0 YXR1cyhzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHApCit7CisJdTggc3RhdHVzOworCWludCByZXQ7 CisKKwlyZXQgPSBjZG5fZHBfbWFpbGJveF9zZW5kKGRwLCBNQl9NT0RVTEVfSURfRFBfVFgsIERQ VFhfSFBEX1NUQVRFLAorCQkJCSAgMCwgTlVMTCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZ2V0 X2hwZDsKKworCXJldCA9IGNkbl9kcF9tYWlsYm94X3ZhbGlkYXRlX3JlY2VpdmUoZHAsIE1CX01P RFVMRV9JRF9EUF9UWCwKKwkJCQkJICAgICAgRFBUWF9IUERfU1RBVEUsIHNpemVvZihzdGF0dXMp KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9nZXRfaHBkOworCisJcmV0ID0gY2RuX2RwX21haWxi b3hfcmVhZF9yZWNlaXZlKGRwLCAmc3RhdHVzLCBzaXplb2Yoc3RhdHVzKSk7CisJaWYgKHJldCkK KwkJZ290byBlcnJfZ2V0X2hwZDsKKworCXJldHVybiBzdGF0dXM7CisKK2Vycl9nZXRfaHBkOgor CURSTV9ERVZfRVJST1IoZHAtPmRldiwgImdldCBocGQgc3RhdHVzIGZhaWxlZDogJWRcbiIsIHJl dCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGNkbl9kcF9nZXRfZWRpZF9ibG9jayh2b2lkICpk YXRhLCB1OCAqZWRpZCwKKwkJCSAgdW5zaWduZWQgaW50IGJsb2NrLCBzaXplX3QgbGVuZ3RoKQor eworCXN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCA9IGRhdGE7CisJdTggbXNnWzJdLCByZWdbMl0s IGk7CisJaW50IHJldDsKKworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJbXNnWzBdID0g YmxvY2sgLyAyOworCQltc2dbMV0gPSBibG9jayAlIDI7CisKKwkJcmV0ID0gY2RuX2RwX21haWxi b3hfc2VuZChkcCwgTUJfTU9EVUxFX0lEX0RQX1RYLCBEUFRYX0dFVF9FRElELAorCQkJCQkgIHNp emVvZihtc2cpLCBtc2cpOworCQlpZiAocmV0KQorCQkJY29udGludWU7CisKKwkJcmV0ID0gY2Ru X2RwX21haWxib3hfdmFsaWRhdGVfcmVjZWl2ZShkcCwgTUJfTU9EVUxFX0lEX0RQX1RYLAorCQkJ CQkJICAgICAgRFBUWF9HRVRfRURJRCwKKwkJCQkJCSAgICAgIHNpemVvZihyZWcpICsgbGVuZ3Ro KTsKKwkJaWYgKHJldCkKKwkJCWNvbnRpbnVlOworCisJCXJldCA9IGNkbl9kcF9tYWlsYm94X3Jl YWRfcmVjZWl2ZShkcCwgcmVnLCBzaXplb2YocmVnKSk7CisJCWlmIChyZXQpCisJCQljb250aW51 ZTsKKworCQlyZXQgPSBjZG5fZHBfbWFpbGJveF9yZWFkX3JlY2VpdmUoZHAsIGVkaWQsIGxlbmd0 aCk7CisJCWlmIChyZXQpCisJCQljb250aW51ZTsKKworCQlpZiAocmVnWzBdID09IGxlbmd0aCAm JiByZWdbMV0gPT0gYmxvY2sgLyAyKQorCQkJYnJlYWs7CisJfQorCisJaWYgKHJldCkKKwkJRFJN X0RFVl9FUlJPUihkcC0+ZGV2LCAiZ2V0IGJsb2NrWyVkXSBlZGlkIGZhaWxlZDogJWRcbiIsIGJs b2NrLAorCQkJICAgICAgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCBjZG5fZHBfdHJh aW5pbmdfc3RhcnQoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwKQoreworCXVuc2lnbmVkIGxvbmcg dGltZW91dDsKKwl1OCBtc2csIGV2ZW50WzJdOworCWludCByZXQ7CisKKwltc2cgPSBMSU5LX1RS QUlOSU5HX1JVTjsKKworCS8qIHN0YXJ0IHRyYWluaW5nICovCisJcmV0ID0gY2RuX2RwX21haWxi b3hfc2VuZChkcCwgTUJfTU9EVUxFX0lEX0RQX1RYLCBEUFRYX1RSQUlOSU5HX0NPTlRST0wsCisJ CQkJICBzaXplb2YobXNnKSwgJm1zZyk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfdHJhaW5pbmdf c3RhcnQ7CisKKwl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoTElOS19UUkFJ TklOR19USU1FT1VUX01TKTsKKwl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkp IHsKKwkJbXNsZWVwKExJTktfVFJBSU5JTkdfUkVUUllfTVMpOworCQlyZXQgPSBjZG5fZHBfbWFp bGJveF9zZW5kKGRwLCBNQl9NT0RVTEVfSURfRFBfVFgsCisJCQkJCSAgRFBUWF9SRUFEX0VWRU5U LCAwLCBOVUxMKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyX3RyYWluaW5nX3N0YXJ0OworCisJ CXJldCA9IGNkbl9kcF9tYWlsYm94X3ZhbGlkYXRlX3JlY2VpdmUoZHAsIE1CX01PRFVMRV9JRF9E UF9UWCwKKwkJCQkJCSAgICAgIERQVFhfUkVBRF9FVkVOVCwKKwkJCQkJCSAgICAgIHNpemVvZihl dmVudCkpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJfdHJhaW5pbmdfc3RhcnQ7CisKKwkJcmV0 ID0gY2RuX2RwX21haWxib3hfcmVhZF9yZWNlaXZlKGRwLCBldmVudCwgc2l6ZW9mKGV2ZW50KSk7 CisJCWlmIChyZXQpCisJCQlnb3RvIGVycl90cmFpbmluZ19zdGFydDsKKworCQlpZiAoZXZlbnRb MV0gJiBFUV9QSEFTRV9GSU5JU0hFRCkKKwkJCXJldHVybiAwOworCX0KKworCXJldCA9IC1FVElN RURPVVQ7CisKK2Vycl90cmFpbmluZ19zdGFydDoKKwlEUk1fREVWX0VSUk9SKGRwLT5kZXYsICJ0 cmFpbmluZyBmYWlsZWQ6ICVkXG4iLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBjZG5f ZHBfZ2V0X3RyYWluaW5nX3N0YXR1cyhzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHApCit7CisJdTgg c3RhdHVzWzEwXTsKKwlpbnQgcmV0OworCisJcmV0ID0gY2RuX2RwX21haWxib3hfc2VuZChkcCwg TUJfTU9EVUxFX0lEX0RQX1RYLCBEUFRYX1JFQURfTElOS19TVEFULAorCQkJCSAgMCwgTlVMTCk7 CisJaWYgKHJldCkKKwkJZ290byBlcnJfZ2V0X3RyYWluaW5nX3N0YXR1czsKKworCXJldCA9IGNk bl9kcF9tYWlsYm94X3ZhbGlkYXRlX3JlY2VpdmUoZHAsIE1CX01PRFVMRV9JRF9EUF9UWCwKKwkJ CQkJICAgICAgRFBUWF9SRUFEX0xJTktfU1RBVCwKKwkJCQkJICAgICAgc2l6ZW9mKHN0YXR1cykp OworCWlmIChyZXQpCisJCWdvdG8gZXJyX2dldF90cmFpbmluZ19zdGF0dXM7CisKKwlyZXQgPSBj ZG5fZHBfbWFpbGJveF9yZWFkX3JlY2VpdmUoZHAsIHN0YXR1cywgc2l6ZW9mKHN0YXR1cykpOwor CWlmIChyZXQpCisJCWdvdG8gZXJyX2dldF90cmFpbmluZ19zdGF0dXM7CisKKwlkcC0+bGluay5y YXRlID0gc3RhdHVzWzBdOworCWRwLT5saW5rLm51bV9sYW5lcyA9IHN0YXR1c1sxXTsKKworZXJy X2dldF90cmFpbmluZ19zdGF0dXM6CisJaWYgKHJldCkKKwkJRFJNX0RFVl9FUlJPUihkcC0+ZGV2 LCAiZ2V0IHRyYWluaW5nIHN0YXR1cyBmYWlsZWQ6ICVkXG4iLCByZXQpOworCXJldHVybiByZXQ7 Cit9CisKK2ludCBjZG5fZHBfc2V0X3ZpZGVvX3N0YXR1cyhzdHJ1Y3QgY2RuX2RwX2RldmljZSAq ZHAsIGludCBhY3RpdmUpCit7CisJdTggbXNnOworCWludCByZXQ7CisKKwltc2cgPSAhIWFjdGl2 ZTsKKworCXJldCA9IGNkbl9kcF9tYWlsYm94X3NlbmQoZHAsIE1CX01PRFVMRV9JRF9EUF9UWCwg RFBUWF9TRVRfVklERU8sCisJCQkJICBzaXplb2YobXNnKSwgJm1zZyk7CisJaWYgKHJldCkKKwkJ RFJNX0RFVl9FUlJPUihkcC0+ZGV2LCAic2V0IHZpZGVvIHN0YXR1cyBmYWlsZWQ6ICVkXG4iLCBy ZXQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBjZG5fZHBfZ2V0X21zYV9taXNj KHN0cnVjdCB2aWRlb19pbmZvICp2aWRlbywKKwkJCSAgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlf bW9kZSAqbW9kZSkKK3sKKwl1MzIgbXNhX21pc2M7CisJdTggdmFsWzJdOworCisJc3dpdGNoICh2 aWRlby0+Y29sb3JfZm10KSB7CisJY2FzZSBQWExfUkdCOgorCWNhc2UgWV9PTkxZOgorCQl2YWxb MF0gPSAwOworCQlicmVhazsKKwkvKiBzZXQgWVVWIGRlZmF1bHQgY29sb3Igc3BhY2UgY29udmVy c2lvbiB0byBCVDYwMSAqLworCWNhc2UgWUNCQ1JfNF80XzQ6CisJCXZhbFswXSA9IDYgKyBCVF82 MDEgKiA4OworCQlicmVhazsKKwljYXNlIFlDQkNSXzRfMl8yOgorCQl2YWxbMF0gPSA1ICsgQlRf NjAxICogODsKKwkJYnJlYWs7CisJY2FzZSBZQ0JDUl80XzJfMDoKKwkJdmFsWzBdID0gNTsKKwkJ YnJlYWs7CisJfTsKKworCXN3aXRjaCAodmlkZW8tPmNvbG9yX2RlcHRoKSB7CisJY2FzZSA2Ogor CQl2YWxbMV0gPSAwOworCQlicmVhazsKKwljYXNlIDg6CisJCXZhbFsxXSA9IDE7CisJCWJyZWFr OworCWNhc2UgMTA6CisJCXZhbFsxXSA9IDI7CisJCWJyZWFrOworCWNhc2UgMTI6CisJCXZhbFsx XSA9IDM7CisJCWJyZWFrOworCWNhc2UgMTY6CisJCXZhbFsxXSA9IDQ7CisJCWJyZWFrOworCX07 CisKKwltc2FfbWlzYyA9IDIgKiB2YWxbMF0gKyAzMiAqIHZhbFsxXSArCisJCSAgICgodmlkZW8t PmNvbG9yX2ZtdCA9PSBZX09OTFkpID8gKDEgPDwgMTQpIDogMCk7CisKKwlyZXR1cm4gbXNhX21p c2M7Cit9CisKK2ludCBjZG5fZHBfY29uZmlnX3ZpZGVvKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpk cCkKK3sKKwlzdHJ1Y3QgdmlkZW9faW5mbyAqdmlkZW8gPSAmZHAtPnZpZGVvX2luZm87CisJc3Ry dWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPSAmZHAtPm1vZGU7CisJdTY0IHN5bWJvbCwgdG1w OworCXUzMiB2YWwsIGxpbmtfcmF0ZTsKKwl1OCBiaXRfcGVyX3BpeCwgdHVfc2l6ZV9yZWcgPSBU VV9TSVpFOworCWludCByZXQ7CisKKwliaXRfcGVyX3BpeCA9ICh2aWRlby0+Y29sb3JfZm10ID09 IFlDQkNSXzRfMl8yKSA/CisJCSAgICAgICh2aWRlby0+Y29sb3JfZGVwdGggKiAyKSA6ICh2aWRl by0+Y29sb3JfZGVwdGggKiAzKTsKKworCWxpbmtfcmF0ZSA9IGRybV9kcF9id19jb2RlX3RvX2xp bmtfcmF0ZShkcC0+bGluay5yYXRlKSAvIDEwMDA7CisKKwl2YWwgPSBWSUZfQllQQVNTX0lOVEVS TEFDRTsKKwlyZXQgPSBjZG5fZHBfcmVnX3dyaXRlKGRwLCBCTkRfSFNZTkMyVlNZTkMsIHZhbCk7 CisJaWYgKHJldCkKKwkJZ290byBlcnJfY29uZmlnX3ZpZGVvOworCisJcmV0ID0gY2RuX2RwX3Jl Z193cml0ZShkcCwgSFNZTkMyVlNZTkNfUE9MX0NUUkwsIDApOworCWlmIChyZXQpCisJCWdvdG8g ZXJyX2NvbmZpZ192aWRlbzsKKworCS8qCisJICogZ2V0IGEgYmVzdCB0dV9zaXplIGFuZCB2YWxp ZCBzeW1ib2w6CisJICogMS4gY2hvc2UgTGNsayBmcmVxKDE2Mk1oeiwgMjcwTWh6LCA1NDBNaHop LCBzZXQgVFUgdG8gMzIKKwkgKiAyLiBjYWxjdWxhdGUgVlModmFsaWQgc3ltYm9sKSA9IFRVICog UGNsayAqIEJwcCAvIChMY2xrICogTGFuZXMpCisJICogMy4gaWYgVlMgPiAqLjg1IG9yIFZTIDwg Ki4xIG9yIFZTIDwgMiBvciBUVSA8IFZTICsgNCwgdGhlbiBzZXQKKwkgKiAgICBUVSArPSAyIGFu ZCByZXBlYXQgMm5kIHN0ZXAuCisJICovCisJZG8geworCQl0dV9zaXplX3JlZyArPSAyOworCQl0 bXAgPSB0dV9zaXplX3JlZyAqIG1vZGUtPmNsb2NrICogYml0X3Blcl9waXg7CisJCXRtcCAvPSBk cC0+bGluay5udW1fbGFuZXMgKiBsaW5rX3JhdGUgKiA4OworCQlzeW1ib2wgPSB0bXAgLyAxMDAw OworCX0gd2hpbGUgKChzeW1ib2wgPD0gMSkgfHwgKHR1X3NpemVfcmVnIC0gc3ltYm9sIDwgNCkg fHwKKwkJICh0bXAgJSAxMDAwID4gODUwKSB8fCAodG1wICUgMTAwMCA8IDEwMCkpOworCisJdmFs ID0gc3ltYm9sICsgKHR1X3NpemVfcmVnIDw8IDgpOworCXJldCA9IGNkbl9kcF9yZWdfd3JpdGUo ZHAsIERQX0ZSQU1FUl9UVSwgdmFsKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9jb25maWdfdmlk ZW87CisKKwkvKiBzZXQgdGhlIEZJRk8gQnVmZmVyIHNpemUgKi8KKwl2YWwgPSAoKG1vZGUtPmNs b2NrICogKHN5bWJvbCArIDEpIC8gMTAwMCkgKyBsaW5rX3JhdGUpOworCXZhbCAvPSAoZHAtPmxp bmsubnVtX2xhbmVzICogbGlua19yYXRlKTsKKwl2YWwgPSA4ICogKHN5bWJvbCArIDEpIC8gYml0 X3Blcl9waXggLSB2YWw7CisJdmFsICs9IDI7CisJcmV0ID0gY2RuX2RwX3JlZ193cml0ZShkcCwg RFBfVkNfVEFCTEUoMTUpLCB2YWwpOworCisJc3dpdGNoICh2aWRlby0+Y29sb3JfZGVwdGgpIHsK KwljYXNlIDY6CisJCXZhbCA9IEJDU182OworCQlicmVhazsKKwljYXNlIDg6CisJCXZhbCA9IEJD U184OworCQlicmVhazsKKwljYXNlIDEwOgorCQl2YWwgPSBCQ1NfMTA7CisJCWJyZWFrOworCWNh c2UgMTI6CisJCXZhbCA9IEJDU18xMjsKKwkJYnJlYWs7CisJY2FzZSAxNjoKKwkJdmFsID0gQkNT XzE2OworCQlicmVhazsKKwl9OworCisJdmFsICs9IHZpZGVvLT5jb2xvcl9mbXQgPDwgODsKKwly ZXQgPSBjZG5fZHBfcmVnX3dyaXRlKGRwLCBEUF9GUkFNRVJfUFhMX1JFUFIsIHZhbCk7CisJaWYg KHJldCkKKwkJZ290byBlcnJfY29uZmlnX3ZpZGVvOworCisJdmFsID0gdmlkZW8tPmhfc3luY19w b2xhcml0eSA/IERQX0ZSQU1FUl9TUF9IU1AgOiAwOworCXZhbCB8PSB2aWRlby0+dl9zeW5jX3Bv bGFyaXR5ID8gRFBfRlJBTUVSX1NQX1ZTUCA6IDA7CisJcmV0ID0gY2RuX2RwX3JlZ193cml0ZShk cCwgRFBfRlJBTUVSX1NQLCB2YWwpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2NvbmZpZ192aWRl bzsKKworCXZhbCA9IChtb2RlLT5oc3luY19zdGFydCAtIG1vZGUtPmhkaXNwbGF5KSA8PCAxNjsK Kwl2YWwgfD0gbW9kZS0+aHRvdGFsIC0gbW9kZS0+aHN5bmNfZW5kOworCXJldCA9IGNkbl9kcF9y ZWdfd3JpdGUoZHAsIERQX0ZST05UX0JBQ0tfUE9SQ0gsIHZhbCk7CisJaWYgKHJldCkKKwkJZ290 byBlcnJfY29uZmlnX3ZpZGVvOworCisJdmFsID0gbW9kZS0+aGRpc3BsYXkgKiBiaXRfcGVyX3Bp eCAvIDg7CisJcmV0ID0gY2RuX2RwX3JlZ193cml0ZShkcCwgRFBfQllURV9DT1VOVCwgdmFsKTsK KwlpZiAocmV0KQorCQlnb3RvIGVycl9jb25maWdfdmlkZW87CisKKwl2YWwgPSBtb2RlLT5odG90 YWwgfCAoKG1vZGUtPmh0b3RhbCAtIG1vZGUtPmhzeW5jX3N0YXJ0KSA8PCAxNik7CisJcmV0ID0g Y2RuX2RwX3JlZ193cml0ZShkcCwgTVNBX0hPUklaT05UQUxfMCwgdmFsKTsKKwlpZiAocmV0KQor CQlnb3RvIGVycl9jb25maWdfdmlkZW87CisKKwl2YWwgPSBtb2RlLT5oc3luY19lbmQgLSBtb2Rl LT5oc3luY19zdGFydDsKKwl2YWwgfD0gKG1vZGUtPmhkaXNwbGF5IDw8IDE2KSB8ICh2aWRlby0+ aF9zeW5jX3BvbGFyaXR5IDw8IDE1KTsKKwlyZXQgPSBjZG5fZHBfcmVnX3dyaXRlKGRwLCBNU0Ff SE9SSVpPTlRBTF8xLCB2YWwpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2NvbmZpZ192aWRlbzsK KworCXZhbCA9IG1vZGUtPnZ0b3RhbDsKKwl2YWwgfD0gKChtb2RlLT52dG90YWwgLSBtb2RlLT52 c3luY19zdGFydCkgPDwgMTYpOworCXJldCA9IGNkbl9kcF9yZWdfd3JpdGUoZHAsIE1TQV9WRVJU SUNBTF8wLCB2YWwpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2NvbmZpZ192aWRlbzsKKworCXZh bCA9IG1vZGUtPnZzeW5jX2VuZCAtIG1vZGUtPnZzeW5jX3N0YXJ0OworCXZhbCB8PSBtb2RlLT52 ZGlzcGxheSA8PCAxNiB8ICh2aWRlby0+dl9zeW5jX3BvbGFyaXR5IDw8IDE1KTsKKwlyZXQgPSBj ZG5fZHBfcmVnX3dyaXRlKGRwLCBNU0FfVkVSVElDQUxfMSwgdmFsKTsKKwlpZiAocmV0KQorCQln b3RvIGVycl9jb25maWdfdmlkZW87CisKKwl2YWwgPSBjZG5fZHBfZ2V0X21zYV9taXNjKHZpZGVv LCBtb2RlKTsKKwlyZXQgPSBjZG5fZHBfcmVnX3dyaXRlKGRwLCBNU0FfTUlTQywgdmFsKTsKKwlp ZiAocmV0KQorCQlnb3RvIGVycl9jb25maWdfdmlkZW87CisKKwlyZXQgPSBjZG5fZHBfcmVnX3dy aXRlKGRwLCBTVFJFQU1fQ09ORklHLCAxKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9jb25maWdf dmlkZW87CisKKwl2YWwgPSBtb2RlLT5oc3luY19lbmQgLSBtb2RlLT5oc3luY19zdGFydDsKKwl2 YWwgfD0gKG1vZGUtPmhkaXNwbGF5IDw8IDE2KTsKKwlyZXQgPSBjZG5fZHBfcmVnX3dyaXRlKGRw LCBEUF9IT1JJWk9OVEFMLCB2YWwpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2NvbmZpZ192aWRl bzsKKworCXZhbCA9IG1vZGUtPnZ0b3RhbDsKKwl2YWwgLT0gKG1vZGUtPnZ0b3RhbCAtIG1vZGUt PnZkaXNwbGF5KTsKKwl2YWwgfD0gKG1vZGUtPnZ0b3RhbCAtIG1vZGUtPnZzeW5jX3N0YXJ0KSA8 PCAxNjsKKwlyZXQgPSBjZG5fZHBfcmVnX3dyaXRlKGRwLCBEUF9WRVJUSUNBTF8wLCB2YWwpOwor CWlmIChyZXQpCisJCWdvdG8gZXJyX2NvbmZpZ192aWRlbzsKKworCXZhbCA9IG1vZGUtPnZ0b3Rh bDsKKwlyZXQgPSBjZG5fZHBfcmVnX3dyaXRlKGRwLCBEUF9WRVJUSUNBTF8xLCB2YWwpOworCWlm IChyZXQpCisJCWdvdG8gZXJyX2NvbmZpZ192aWRlbzsKKworCXZhbCA9ICAwOworCXJldCA9IGNk bl9kcF9yZWdfd3JpdGVfYml0KGRwLCBEUF9WQl9JRCwgMiwgMSwgdmFsKTsKKworZXJyX2NvbmZp Z192aWRlbzoKKwlpZiAocmV0KQorCQlEUk1fREVWX0VSUk9SKGRwLT5kZXYsICJjb25maWcgdmlk ZW8gZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgY2RuX2RwX2F1 ZGlvX3N0b3Aoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwLCBzdHJ1Y3QgYXVkaW9faW5mbyAqYXVk aW8pCit7CisJdTMyIHZhbDsKKwlpbnQgcmV0OworCisJcmV0ID0gY2RuX2RwX3JlZ193cml0ZShk cCwgQVVESU9fUEFDS19DT05UUk9MLCAwKTsKKwlpZiAocmV0KSB7CisJCURSTV9ERVZfRVJST1Io ZHAtPmRldiwgImF1ZGlvIHN0b3AgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsK Kwl9CisKKwl2YWwgPSBTUERJRl9BVkdfU0VMIHwgU1BESUZfSklUVEVSX0JZUEFTUzsKKwl2YWwg fD0gU1BESUZfRklGT19NSURfUkFOR0UoMHhlMCk7CisJdmFsIHw9IFNQRElGX0pJVFRFUl9USFJT SCgweGUwKTsKKwl2YWwgfD0gU1BESUZfSklUVEVSX0FWR19XSU4oNyk7CisJd3JpdGVsKHZhbCwg ZHAtPnJlZ3MgKyBTUERJRl9DVFJMX0FERFIpOworCisJLyogY2xlYXJuIHRoZSBhdWRpbyBjb25m aWcgYW5kIHJlc2V0ICovCisJd3JpdGVsKDAsIGRwLT5yZWdzICsgQVVESU9fU1JDX0NOVEwpOwor CXdyaXRlbCgwLCBkcC0+cmVncyArIEFVRElPX1NSQ19DTkZHKTsKKwl3cml0ZWwoQVVESU9fU1df UlNULCBkcC0+cmVncyArIEFVRElPX1NSQ19DTlRMKTsKKwl3cml0ZWwoMCwgZHAtPnJlZ3MgKyBB VURJT19TUkNfQ05UTCk7CisKKwkvKiByZXNldCBzbXBsMnBja3QgY29tcG9uZW50ICAqLworCXdy aXRlbCgwLCBkcC0+cmVncyArIFNNUEwyUEtUX0NOVEwpOworCXdyaXRlbChBVURJT19TV19SU1Qs IGRwLT5yZWdzICsgU01QTDJQS1RfQ05UTCk7CisJd3JpdGVsKDAsIGRwLT5yZWdzICsgU01QTDJQ S1RfQ05UTCk7CisKKwkvKiByZXNldCBGSUZPICovCisJd3JpdGVsKEFVRElPX1NXX1JTVCwgZHAt PnJlZ3MgKyBGSUZPX0NOVEwpOworCXdyaXRlbCgwLCBkcC0+cmVncyArIEZJRk9fQ05UTCk7CisK KwlpZiAoYXVkaW8tPmZvcm1hdCA9PSBBRk1UX1NQRElGKQorCQljbGtfZGlzYWJsZV91bnByZXBh cmUoZHAtPnNwZGlmX2Nsayk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGNkbl9kcF9hdWRpb19t dXRlKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgYm9vbCBlbmFibGUpCit7CisJaW50IHJldDsK KworCXJldCA9IGNkbl9kcF9yZWdfd3JpdGVfYml0KGRwLCBEUF9WQl9JRCwgNCwgMSwgZW5hYmxl KTsKKwlpZiAocmV0KQorCQlEUk1fREVWX0VSUk9SKGRwLT5kZXYsICJhdWRpbyBtdXRlIGZhaWxl ZDogJWRcbiIsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBjZG5fZHBf YXVkaW9fY29uZmlnX2kycyhzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsCisJCQkJICAgIHN0cnVj dCBhdWRpb19pbmZvICphdWRpbykKK3sKKwlpbnQgc3ViX3Bja3RfbnVtID0gMSwgaTJzX3BvcnRf ZW5fdmFsID0gMHhmLCBpOworCXUzMiB2YWw7CisKKwlpZiAoYXVkaW8tPmNoYW5uZWxzID09IDIp IHsKKwkJaWYgKGRwLT5saW5rLm51bV9sYW5lcyA9PSAxKQorCQkJc3ViX3Bja3RfbnVtID0gMjsK KwkJZWxzZQorCQkJc3ViX3Bja3RfbnVtID0gNDsKKworCQlpMnNfcG9ydF9lbl92YWwgPSAxOwor CX0gZWxzZSBpZiAoYXVkaW8tPmNoYW5uZWxzID09IDQpIHsKKwkJaTJzX3BvcnRfZW5fdmFsID0g MzsKKwl9CisKKwl3cml0ZWwoMHgwLCBkcC0+cmVncyArIFNQRElGX0NUUkxfQUREUik7CisKKwl3 cml0ZWwoU1lOQ19XUl9UT19DSF9aRVJPLCBkcC0+cmVncyArIEZJRk9fQ05UTCk7CisKKwl2YWwg PSBNQVhfTlVNX0NIKGF1ZGlvLT5jaGFubmVscyk7CisJdmFsIHw9IE5VTV9PRl9JMlNfUE9SVFMo YXVkaW8tPmNoYW5uZWxzKTsKKwl2YWwgfD0gQVVESU9fVFlQRV9MUENNOworCXZhbCB8PSBDRkdf U1VCX1BDS1RfTlVNKHN1Yl9wY2t0X251bSk7CisJd3JpdGVsKHZhbCwgZHAtPnJlZ3MgKyBTTVBM MlBLVF9DTkZHKTsKKworCWlmIChhdWRpby0+c2FtcGxlX3dpZHRoID09IDE2KQorCQl2YWwgPSAw OworCWVsc2UgaWYgKGF1ZGlvLT5zYW1wbGVfd2lkdGggPT0gMjQpCisJCXZhbCA9IDEgPDwgOTsK KwllbHNlCisJCXZhbCA9IDIgPDwgOTsKKworCXZhbCB8PSBBVURJT19DSF9OVU0oYXVkaW8tPmNo YW5uZWxzKTsKKwl2YWwgfD0gSTJTX0RFQ19QT1JUX0VOKGkyc19wb3J0X2VuX3ZhbCk7CisJdmFs IHw9IFRSQU5TX1NNUExfV0lEVEhfMzI7CisJd3JpdGVsKHZhbCwgZHAtPnJlZ3MgKyBBVURJT19T UkNfQ05GRyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgKGF1ZGlvLT5jaGFubmVscyArIDEpIC8gMjsg aSsrKSB7CisJCWlmIChhdWRpby0+c2FtcGxlX3dpZHRoID09IDE2KQorCQkJdmFsID0gKDB4MDgg PDwgOCkgfCAoMHgwOCA8PCAyMCk7CisJCWVsc2UgaWYgKGF1ZGlvLT5zYW1wbGVfd2lkdGggPT0g MjQpCisJCQl2YWwgPSAoMHgwYiA8PCA4KSB8ICgweDBiIDw8IDIwKTsKKworCQl2YWwgfD0gKCgy ICogaSkgPDwgNCkgfCAoKDIgKiBpICsgMSkgPDwgMTYpOworCQl3cml0ZWwodmFsLCBkcC0+cmVn cyArIFNUVFNfQklUX0NIKGkpKTsKKwl9CisKKwlzd2l0Y2ggKGF1ZGlvLT5zYW1wbGVfcmF0ZSkg eworCWNhc2UgMzIwMDA6CisJCXZhbCA9IFNBTVBMSU5HX0ZSRVEoMykgfAorCQkgICAgICBPUklH SU5BTF9TQU1QX0ZSRVEoMHhjKTsKKwkJYnJlYWs7CisJY2FzZSA0NDEwMDoKKwkJdmFsID0gU0FN UExJTkdfRlJFUSgwKSB8CisJCSAgICAgIE9SSUdJTkFMX1NBTVBfRlJFUSgweGYpOworCQlicmVh azsKKwljYXNlIDQ4MDAwOgorCQl2YWwgPSBTQU1QTElOR19GUkVRKDIpIHwKKwkJICAgICAgT1JJ R0lOQUxfU0FNUF9GUkVRKDB4ZCk7CisJCWJyZWFrOworCWNhc2UgODgyMDA6CisJCXZhbCA9IFNB TVBMSU5HX0ZSRVEoOCkgfAorCQkgICAgICBPUklHSU5BTF9TQU1QX0ZSRVEoMHg3KTsKKwkJYnJl YWs7CisJY2FzZSA5NjAwMDoKKwkJdmFsID0gU0FNUExJTkdfRlJFUSgweGEpIHwKKwkJICAgICAg T1JJR0lOQUxfU0FNUF9GUkVRKDUpOworCQlicmVhazsKKwljYXNlIDE3NjQwMDoKKwkJdmFsID0g U0FNUExJTkdfRlJFUSgweGMpIHwKKwkJICAgICAgT1JJR0lOQUxfU0FNUF9GUkVRKDMpOworCQli cmVhazsKKwljYXNlIDE5MjAwMDoKKwkJdmFsID0gU0FNUExJTkdfRlJFUSgweGUpIHwKKwkJICAg ICAgT1JJR0lOQUxfU0FNUF9GUkVRKDEpOworCQlicmVhazsKKwl9CisJdmFsIHw9IDQ7CisJd3Jp dGVsKHZhbCwgZHAtPnJlZ3MgKyBDT01fQ0hfU1RUU19CSVRTKTsKKworCXdyaXRlbChTTVBMMlBL VF9FTiwgZHAtPnJlZ3MgKyBTTVBMMlBLVF9DTlRMKTsKKwl3cml0ZWwoSTJTX0RFQ19TVEFSVCwg ZHAtPnJlZ3MgKyBBVURJT19TUkNfQ05UTCk7Cit9CisKK3N0YXRpYyB2b2lkIGNkbl9kcF9hdWRp b19jb25maWdfc3BkaWYoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwKQoreworCXUzMiB2YWw7CisK Kwl2YWwgPSBTUERJRl9BVkdfU0VMIHwgU1BESUZfSklUVEVSX0JZUEFTUzsKKwl2YWwgfD0gU1BE SUZfRklGT19NSURfUkFOR0UoMHhlMCk7CisJdmFsIHw9IFNQRElGX0pJVFRFUl9USFJTSCgweGUw KTsKKwl2YWwgfD0gU1BESUZfSklUVEVSX0FWR19XSU4oNyk7CisJd3JpdGVsKHZhbCwgZHAtPnJl Z3MgKyBTUERJRl9DVFJMX0FERFIpOworCisJd3JpdGVsKFNZTkNfV1JfVE9fQ0hfWkVSTywgZHAt PnJlZ3MgKyBGSUZPX0NOVEwpOworCisJdmFsID0gTUFYX05VTV9DSCgyKSB8IEFVRElPX1RZUEVf TFBDTSB8IENGR19TVUJfUENLVF9OVU0oNCk7CisJd3JpdGVsKHZhbCwgZHAtPnJlZ3MgKyBTTVBM MlBLVF9DTkZHKTsKKwl3cml0ZWwoU01QTDJQS1RfRU4sIGRwLT5yZWdzICsgU01QTDJQS1RfQ05U TCk7CisKKwl2YWwgPSBTUERJRl9FTkFCTEUgfCBTUERJRl9BVkdfU0VMIHwgU1BESUZfSklUVEVS X0JZUEFTUzsKKwl2YWwgfD0gU1BESUZfRklGT19NSURfUkFOR0UoMHhlMCk7CisJdmFsIHw9IFNQ RElGX0pJVFRFUl9USFJTSCgweGUwKTsKKwl2YWwgfD0gU1BESUZfSklUVEVSX0FWR19XSU4oNyk7 CisJd3JpdGVsKHZhbCwgZHAtPnJlZ3MgKyBTUERJRl9DVFJMX0FERFIpOworCisJY2xrX3ByZXBh cmVfZW5hYmxlKGRwLT5zcGRpZl9jbGspOworCWNsa19zZXRfcmF0ZShkcC0+c3BkaWZfY2xrLCBD RE5fRFBfU1BESUZfQ0xLKTsKK30KKworaW50IGNkbl9kcF9hdWRpb19jb25maWcoc3RydWN0IGNk bl9kcF9kZXZpY2UgKmRwLCBzdHJ1Y3QgYXVkaW9faW5mbyAqYXVkaW8pCit7CisJaW50IHJldDsK KworCS8qIHJlc2V0IHRoZSBzcGRpZiBjbGsgYmVmb3JlIGNvbmZpZyAqLworCWlmIChhdWRpby0+ Zm9ybWF0ID09IEFGTVRfU1BESUYpIHsKKwkJcmVzZXRfY29udHJvbF9hc3NlcnQoZHAtPnNwZGlm X3JzdCk7CisJCXJlc2V0X2NvbnRyb2xfZGVhc3NlcnQoZHAtPnNwZGlmX3JzdCk7CisJfQorCisJ cmV0ID0gY2RuX2RwX3JlZ193cml0ZShkcCwgQ01fTEFORV9DVFJMLCBMQU5FX1JFRl9DWUMpOwor CWlmIChyZXQpCisJCWdvdG8gZXJyX2F1ZGlvX2NvbmZpZzsKKworCXJldCA9IGNkbl9kcF9yZWdf d3JpdGUoZHAsIENNX0NUUkwsIDApOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2F1ZGlvX2NvbmZp ZzsKKworCWlmIChhdWRpby0+Zm9ybWF0ID09IEFGTVRfSTJTKQorCQljZG5fZHBfYXVkaW9fY29u ZmlnX2kycyhkcCwgYXVkaW8pOworCWVsc2UgaWYgKGF1ZGlvLT5mb3JtYXQgPT0gQUZNVF9TUERJ RikKKwkJY2RuX2RwX2F1ZGlvX2NvbmZpZ19zcGRpZihkcCk7CisKKwlyZXQgPSBjZG5fZHBfcmVn X3dyaXRlKGRwLCBBVURJT19QQUNLX0NPTlRST0wsIEFVRElPX1BBQ0tfRU4pOworCitlcnJfYXVk aW9fY29uZmlnOgorCWlmIChyZXQpCisJCURSTV9ERVZfRVJST1IoZHAtPmRldiwgImF1ZGlvIGNv bmZpZyBmYWlsZWQ6ICVkXG4iLCByZXQpOworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvY2RuLWRwLXJlZy5oIGIvZHJpdmVycy9ncHUvZHJtL3Jv Y2tjaGlwL2Nkbi1kcC1yZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42 YWMzNjc0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2Nkbi1k cC1yZWcuaApAQCAtMCwwICsxLDQ4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgRnV6aG91IFJv Y2tjaGlwIEVsZWN0cm9uaWNzIENvLkx0ZAorICogQXV0aG9yOiBDaHJpcyBaaG9uZyA8enl3QHJv Y2stY2hpcHMuY29tPgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBh cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkg YmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgor ICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfQ0ROX0RQX1JFR19ICisj ZGVmaW5lIF9DRE5fRFBfUkVHX0gKKworI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorCisjZGVm aW5lIEFERFJfSU1FTQkJMHgxMDAwMAorI2RlZmluZSBBRERSX0RNRU0JCTB4MjAwMDAKKworLyog QVBCIENGRyBhZGRyICovCisjZGVmaW5lIEFQQl9DVFJMCQkJMAorI2RlZmluZSBYVF9JTlRfQ1RS TAkJCTB4MDQKKyNkZWZpbmUgTUFJTEJPWF9GVUxMX0FERFIJCTB4MDgKKyNkZWZpbmUgTUFJTEJP WF9FTVBUWV9BRERSCQkweDBjCisjZGVmaW5lIE1BSUxCT1gwX1dSX0RBVEEJCTB4MTAKKyNkZWZp bmUgTUFJTEJPWDBfUkRfREFUQQkJMHgxNAorI2RlZmluZSBLRUVQX0FMSVZFCQkJMHgxOAorI2Rl ZmluZSBWRVJfTAkJCQkweDFjCisjZGVmaW5lIFZFUl9ICQkJCTB4MjAKKyNkZWZpbmUgVkVSX0xJ Ql9MX0FERFIJCQkweDI0CisjZGVmaW5lIFZFUl9MSUJfSF9BRERSCQkJMHgyOAorI2RlZmluZSBT V19ERUJVR19MCQkJMHgyYworI2RlZmluZSBTV19ERUJVR19ICQkJMHgzMAorI2RlZmluZSBNQUlM Qk9YX0lOVF9NQVNLCQkweDM0CisjZGVmaW5lIE1BSUxCT1hfSU5UX1NUQVRVUwkJMHgzOAorI2Rl ZmluZSBTV19DTEtfTAkJCTB4M2MKKyNkZWZpbmUgU1dfQ0xLX0gJCQkweDQwCisjZGVmaW5lIFNX X0VWRU5UUzAJCQkweDQ0CisjZGVmaW5lIFNXX0VWRU5UUzEJCQkweDQ4CisjZGVmaW5lIFNXX0VW RU5UUzIJCQkweDRjCisjZGVmaW5lIFNXX0VWRU5UUzMJCQkweDUwCisjZGVmaW5lIFhUX09DRF9D VFJMCQkJMHg2MAorI2RlZmluZSBBUEJfSU5UX01BU0sJCQkweDZjCisjZGVmaW5lIEFQQl9TVEFU VVNfTUFTSwkJCTB4NzAKKworLyogYXVkaW8gZGVjb2RlciBhZGRyICovCisjZGVmaW5lIEFVRElP X1NSQ19DTlRMCQkJMHgzMDAwMAorI2RlZmluZSBBVURJT19TUkNfQ05GRwkJCTB4MzAwMDQKKyNk ZWZpbmUgQ09NX0NIX1NUVFNfQklUUwkJMHgzMDAwOAorI2RlZmluZSBTVFRTX0JJVF9DSCh4KQkJ CSgweDMwMDBjICsgKCh4KSA8PCAyKSkKKyNkZWZpbmUgU1BESUZfQ1RSTF9BRERSCQkJMHgzMDA0 YworI2RlZmluZSBTUERJRl9DSDFfQ1NfMzEwMF9BRERSCQkweDMwMDUwCisjZGVmaW5lIFNQRElG X0NIMV9DU182MzMyX0FERFIJCTB4MzAwNTQKKyNkZWZpbmUgU1BESUZfQ0gxX0NTXzk1NjRfQURE UgkJMHgzMDA1OAorI2RlZmluZSBTUERJRl9DSDFfQ1NfMTI3OTZfQUREUgkJMHgzMDA1YworI2Rl ZmluZSBTUERJRl9DSDFfQ1NfMTU5MTI4X0FERFIJMHgzMDA2MAorI2RlZmluZSBTUERJRl9DSDFf Q1NfMTkxMTYwX0FERFIJMHgzMDA2NAorI2RlZmluZSBTUERJRl9DSDJfQ1NfMzEwMF9BRERSCQkw eDMwMDY4CisjZGVmaW5lIFNQRElGX0NIMl9DU182MzMyX0FERFIJCTB4MzAwNmMKKyNkZWZpbmUg U1BESUZfQ0gyX0NTXzk1NjRfQUREUgkJMHgzMDA3MAorI2RlZmluZSBTUERJRl9DSDJfQ1NfMTI3 OTZfQUREUgkJMHgzMDA3NAorI2RlZmluZSBTUERJRl9DSDJfQ1NfMTU5MTI4X0FERFIJMHgzMDA3 OAorI2RlZmluZSBTUERJRl9DSDJfQ1NfMTkxMTYwX0FERFIJMHgzMDA3YworI2RlZmluZSBTTVBM MlBLVF9DTlRMCQkJMHgzMDA4MAorI2RlZmluZSBTTVBMMlBLVF9DTkZHCQkJMHgzMDA4NAorI2Rl ZmluZSBGSUZPX0NOVEwJCQkweDMwMDg4CisjZGVmaW5lIEZJRk9fU1RUUwkJCTB4MzAwOGMKKwor Lyogc291cmNlIHBpZiBhZGRyICovCisjZGVmaW5lIFNPVVJDRV9QSUZfV1JfQUREUgkJMHgzMDgw MAorI2RlZmluZSBTT1VSQ0VfUElGX1dSX1JFUQkJMHgzMDgwNAorI2RlZmluZSBTT1VSQ0VfUElG X1JEX0FERFIJCTB4MzA4MDgKKyNkZWZpbmUgU09VUkNFX1BJRl9SRF9SRVEJCTB4MzA4MGMKKyNk ZWZpbmUgU09VUkNFX1BJRl9EQVRBX1dSCQkweDMwODEwCisjZGVmaW5lIFNPVVJDRV9QSUZfREFU QV9SRAkJMHgzMDgxNAorI2RlZmluZSBTT1VSQ0VfUElGX0ZJRk8xX0ZMVVNICQkweDMwODE4Cisj ZGVmaW5lIFNPVVJDRV9QSUZfRklGTzJfRkxVU0gJCTB4MzA4MWMKKyNkZWZpbmUgU09VUkNFX1BJ Rl9TVEFUVVMJCTB4MzA4MjAKKyNkZWZpbmUgU09VUkNFX1BJRl9JTlRFUlJVUFRfU09VUkNFCTB4 MzA4MjQKKyNkZWZpbmUgU09VUkNFX1BJRl9JTlRFUlJVUFRfTUFTSwkweDMwODI4CisjZGVmaW5l IFNPVVJDRV9QSUZfUEtUX0FMTE9DX1JFRwkweDMwODJjCisjZGVmaW5lIFNPVVJDRV9QSUZfUEtU X0FMTE9DX1dSX0VOCTB4MzA4MzAKKyNkZWZpbmUgU09VUkNFX1BJRl9TV19SRVNFVAkJMHgzMDgz NAorCisvKiBiZWxsb3cgcmVnaXN0ZXJzIG5lZWQgYWNjZXNzIGJ5IG1haWxib3ggKi8KKy8qIHNv dXJjZSBjYXIgYWRkciAqLworI2RlZmluZSBTT1VSQ0VfSERUWF9DQVIJCQkweDA5MDAKKyNkZWZp bmUgU09VUkNFX0RQVFhfQ0FSCQkJMHgwOTA0CisjZGVmaW5lIFNPVVJDRV9QSFlfQ0FSCQkJMHgw OTA4CisjZGVmaW5lIFNPVVJDRV9DRUNfQ0FSCQkJMHgwOTBjCisjZGVmaW5lIFNPVVJDRV9DQlVT X0NBUgkJCTB4MDkxMAorI2RlZmluZSBTT1VSQ0VfUEtUX0NBUgkJCTB4MDkxOAorI2RlZmluZSBT T1VSQ0VfQUlGX0NBUgkJCTB4MDkxYworI2RlZmluZSBTT1VSQ0VfQ0lQSEVSX0NBUgkJMHgwOTIw CisjZGVmaW5lIFNPVVJDRV9DUllQVE9fQ0FSCQkweDA5MjQKKworLyogY2xvY2sgbWV0ZXJzIGFk ZHIgKi8KKyNkZWZpbmUgQ01fQ1RSTAkJCQkweDBhMDAKKyNkZWZpbmUgQ01fSTJTX0NUUkwJCQkw eDBhMDQKKyNkZWZpbmUgQ01fU1BESUZfQ1RSTAkJCTB4MGEwOAorI2RlZmluZSBDTV9WSURfQ1RS TAkJCTB4MGEwYworI2RlZmluZSBDTV9MQU5FX0NUUkwJCQkweDBhMTAKKyNkZWZpbmUgSTJTX05N X1NUQUJMRQkJCTB4MGExNAorI2RlZmluZSBJMlNfTkNUU19TVEFCTEUJCQkweDBhMTgKKyNkZWZp bmUgU1BESUZfTk1fU1RBQkxFCQkJMHgwYTFjCisjZGVmaW5lIFNQRElGX05DVFNfU1RBQkxFCQkw eDBhMjAKKyNkZWZpbmUgTk1WSURfTUVBU19TVEFCTEUJCTB4MGEyNAorI2RlZmluZSBJMlNfTUVB UwkJCTB4MGE0MAorI2RlZmluZSBTUERJRl9NRUFTCQkJMHgwYTgwCisjZGVmaW5lIE5NVklEX01F QVMJCQkweDBhYzAKKworLyogc291cmNlIHZpZiBhZGRyICovCisjZGVmaW5lIEJORF9IU1lOQzJW U1lOQwkJCTB4MGIwMAorI2RlZmluZSBIU1lOQzJWU1lOQ19GMV9MMQkJMHgwYjA0CisjZGVmaW5l IEhTWU5DMlZTWU5DX0YyX0wxCQkweDBiMDgKKyNkZWZpbmUgSFNZTkMyVlNZTkNfU1RBVFVTCQkw eDBiMGMKKyNkZWZpbmUgSFNZTkMyVlNZTkNfUE9MX0NUUkwJCTB4MGIxMAorCisvKiBkcHR4IHBo eSBhZGRyICovCisjZGVmaW5lIERQX1RYX1BIWV9DT05GSUdfUkVHCQkweDIwMDAKKyNkZWZpbmUg RFBfVFhfUEhZX1NUQVRVU19SRUcJCTB4MjAwNAorI2RlZmluZSBEUF9UWF9QSFlfU1dfUkVTRVQJ CTB4MjAwOAorI2RlZmluZSBEUF9UWF9QSFlfU0NSQU1CTEVSX1NFRUQJMHgyMDBjCisjZGVmaW5l IERQX1RYX1BIWV9UUkFJTklOR18wMV8wNAkweDIwMTAKKyNkZWZpbmUgRFBfVFhfUEhZX1RSQUlO SU5HXzA1XzA4CTB4MjAxNAorI2RlZmluZSBEUF9UWF9QSFlfVFJBSU5JTkdfMDlfMTAJMHgyMDE4 CisjZGVmaW5lIFRFU1RfQ09SCQkJMHgyM2ZjCisKKy8qIGRwdHggaHBkIGFkZHIgKi8KKyNkZWZp bmUgSFBEX0lSUV9ERVRfTUlOX1RJTUVSCQkweDIxMDAKKyNkZWZpbmUgSFBEX0lSUV9ERVRfTUFY X1RJTUVSCQkweDIxMDQKKyNkZWZpbmUgSFBEX1VOUExHRURfREVUX01JTl9USU1FUgkweDIxMDgK KyNkZWZpbmUgSFBEX1NUQUJMRV9USU1FUgkJMHgyMTBjCisjZGVmaW5lIEhQRF9GSUxURVJfVElN RVIJCTB4MjExMAorI2RlZmluZSBIUERfRVZFTlRfTUFTSwkJCTB4MjExYworI2RlZmluZSBIUERf RVZFTlRfREVUCQkJMHgyMTIwCisKKy8qIGRweXggZnJhbWVyIGFkZHIgKi8KKyNkZWZpbmUgRFBf RlJBTUVSX0dMT0JBTF9DT05GSUcJCTB4MjIwMAorI2RlZmluZSBEUF9TV19SRVNFVAkJCTB4MjIw NAorI2RlZmluZSBEUF9GUkFNRVJfVFUJCQkweDIyMDgKKyNkZWZpbmUgRFBfRlJBTUVSX1BYTF9S RVBSCQkweDIyMGMKKyNkZWZpbmUgRFBfRlJBTUVSX1NQCQkJMHgyMjEwCisjZGVmaW5lIEFVRElP X1BBQ0tfQ09OVFJPTAkJMHgyMjE0CisjZGVmaW5lIERQX1ZDX1RBQkxFKHgpCQkJKDB4MjIxOCAr ICgoeCkgPDwgMikpCisjZGVmaW5lIERQX1ZCX0lECQkJMHgyMjU4CisjZGVmaW5lIERQX01UUEhf TFZQX0NPTlRST0wJCTB4MjI1YworI2RlZmluZSBEUF9NVFBIX1NZTUJPTF9WQUxVRVMJCTB4MjI2 MAorI2RlZmluZSBEUF9NVFBIX0VDRl9DT05UUk9MCQkweDIyNjQKKyNkZWZpbmUgRFBfTVRQSF9B Q1RfQ09OVFJPTAkJMHgyMjY4CisjZGVmaW5lIERQX01UUEhfU1RBVFVTCQkJMHgyMjZjCisjZGVm aW5lIERQX0lOVEVSUlVQVF9TT1VSQ0UJCTB4MjI3MAorI2RlZmluZSBEUF9JTlRFUlJVUFRfTUFT SwkJMHgyMjc0CisjZGVmaW5lIERQX0ZST05UX0JBQ0tfUE9SQ0gJCTB4MjI3OAorI2RlZmluZSBE UF9CWVRFX0NPVU5UCQkJMHgyMjdjCisKKy8qIGRwdHggc3RyZWFtIGFkZHIgKi8KKyNkZWZpbmUg TVNBX0hPUklaT05UQUxfMAkJMHgyMjgwCisjZGVmaW5lIE1TQV9IT1JJWk9OVEFMXzEJCTB4MjI4 NAorI2RlZmluZSBNU0FfVkVSVElDQUxfMAkJCTB4MjI4OAorI2RlZmluZSBNU0FfVkVSVElDQUxf MQkJCTB4MjI4YworI2RlZmluZSBNU0FfTUlTQwkJCTB4MjI5MAorI2RlZmluZSBTVFJFQU1fQ09O RklHCQkJMHgyMjk0CisjZGVmaW5lIEFVRElPX1BBQ0tfU1RBVFVTCQkweDIyOTgKKyNkZWZpbmUg VklGX1NUQVRVUwkJCTB4MjI5YworI2RlZmluZSBQQ0tfU1RVRkZfU1RBVFVTXzAJCTB4MjJhMAor I2RlZmluZSBQQ0tfU1RVRkZfU1RBVFVTXzEJCTB4MjJhNAorI2RlZmluZSBJTkZPX1BBQ0tfU1RB VFVTCQkweDIyYTgKKyNkZWZpbmUgUkFURV9HT1ZFUk5PUl9TVEFUVVMJCTB4MjJhYworI2RlZmlu ZSBEUF9IT1JJWk9OVEFMCQkJMHgyMmIwCisjZGVmaW5lIERQX1ZFUlRJQ0FMXzAJCQkweDIyYjQK KyNkZWZpbmUgRFBfVkVSVElDQUxfMQkJCTB4MjJiOAorI2RlZmluZSBEUF9CTE9DS19TRFAJCQkw eDIyYmMKKworLyogZHB0eCBnbGJsIGFkZHIgKi8KKyNkZWZpbmUgRFBUWF9MQU5FX0VOCQkJMHgy MzAwCisjZGVmaW5lIERQVFhfRU5ITkNECQkJMHgyMzA0CisjZGVmaW5lIERQVFhfSU5UX01BU0sJ CQkweDIzMDgKKyNkZWZpbmUgRFBUWF9JTlRfU1RBVFVTCQkJMHgyMzBjCisKKy8qIGRwIGF1eCBh ZGRyICovCisjZGVmaW5lIERQX0FVWF9IT1NUX0NPTlRST0wJCTB4MjgwMAorI2RlZmluZSBEUF9B VVhfSU5URVJSVVBUX1NPVVJDRQkJMHgyODA0CisjZGVmaW5lIERQX0FVWF9JTlRFUlJVUFRfTUFT SwkJMHgyODA4CisjZGVmaW5lIERQX0FVWF9TV0FQX0lOVkVSU0lPTl9DT05UUk9MCTB4MjgwYwor I2RlZmluZSBEUF9BVVhfU0VORF9OQUNLX1RSQU5TQUNUSU9OCTB4MjgxMAorI2RlZmluZSBEUF9B VVhfQ0xFQVJfUlgJCQkweDI4MTQKKyNkZWZpbmUgRFBfQVVYX0NMRUFSX1RYCQkJMHgyODE4Cisj ZGVmaW5lIERQX0FVWF9USU1FUl9TVE9QCQkweDI4MWMKKyNkZWZpbmUgRFBfQVVYX1RJTUVSX0NM RUFSCQkweDI4MjAKKyNkZWZpbmUgRFBfQVVYX1JFU0VUX1NXCQkJMHgyODI0CisjZGVmaW5lIERQ X0FVWF9ESVZJREVfMk0JCTB4MjgyOAorI2RlZmluZSBEUF9BVVhfVFhfUFJFQUNIQVJHRV9MRU5H VEgJMHgyODJjCisjZGVmaW5lIERQX0FVWF9GUkVRVUVOQ1lfMU1fTUFYCQkweDI4MzAKKyNkZWZp bmUgRFBfQVVYX0ZSRVFVRU5DWV8xTV9NSU4JCTB4MjgzNAorI2RlZmluZSBEUF9BVVhfUlhfUFJF X01JTgkJMHgyODM4CisjZGVmaW5lIERQX0FVWF9SWF9QUkVfTUFYCQkweDI4M2MKKyNkZWZpbmUg RFBfQVVYX1RJTUVSX1BSRVNFVAkJMHgyODQwCisjZGVmaW5lIERQX0FVWF9OQUNLX0ZPUk1BVAkJ MHgyODQ0CisjZGVmaW5lIERQX0FVWF9UWF9EQVRBCQkJMHgyODQ4CisjZGVmaW5lIERQX0FVWF9S WF9EQVRBCQkJMHgyODRjCisjZGVmaW5lIERQX0FVWF9UWF9TVEFUVVMJCTB4Mjg1MAorI2RlZmlu ZSBEUF9BVVhfUlhfU1RBVFVTCQkweDI4NTQKKyNkZWZpbmUgRFBfQVVYX1JYX0NZQ0xFX0NPVU5U RVIJCTB4Mjg1OAorI2RlZmluZSBEUF9BVVhfTUFJTl9TVEFURVMJCTB4Mjg1YworI2RlZmluZSBE UF9BVVhfTUFJTl9USU1FUgkJMHgyODYwCisjZGVmaW5lIERQX0FVWF9BRkVfT1VUCQkJMHgyODY0 CisKKy8qIGNyeXB0byBhZGRyICovCisjZGVmaW5lIENSWVBUT19IRENQX1JFVklTSU9OCQkweDU4 MDAKKyNkZWZpbmUgSERDUF9DUllQVE9fQ09ORklHCQkweDU4MDQKKyNkZWZpbmUgQ1JZUFRPX0lO VEVSUlVQVF9TT1VSQ0UJCTB4NTgwOAorI2RlZmluZSBDUllQVE9fSU5URVJSVVBUX01BU0sJCTB4 NTgwYworI2RlZmluZSBDUllQVE8yMl9DT05GSUcJCQkweDU4MTgKKyNkZWZpbmUgQ1JZUFRPMjJf U1RBVFVTCQkJMHg1ODFjCisjZGVmaW5lIFNIQV8yNTZfREFUQV9JTgkJCTB4NTgzYworI2RlZmlu ZSBTSEFfMjU2X0RBVEFfT1VUXyh4KQkJKDB4NTg1MCArICgoeCkgPDwgMikpCisjZGVmaW5lIEFF U18zMl9LRVlfKHgpCQkJKDB4NTg3MCArICgoeCkgPDwgMikpCisjZGVmaW5lIEFFU18zMl9EQVRB X0lOCQkJMHg1ODgwCisjZGVmaW5lIEFFU18zMl9EQVRBX09VVF8oeCkJCSgweDU4ODQgKyAoKHgp IDw8IDIpKQorI2RlZmluZSBDUllQVE8xNF9DT05GSUcJCQkweDU4YTAKKyNkZWZpbmUgQ1JZUFRP MTRfU1RBVFVTCQkJMHg1OGE0CisjZGVmaW5lIENSWVBUTzE0X1BSTk1fT1VUCQkweDU4YTgKKyNk ZWZpbmUgQ1JZUFRPMTRfS01fMAkJCTB4NThhYworI2RlZmluZSBDUllQVE8xNF9LTV8xCQkJMHg1 OGIwCisjZGVmaW5lIENSWVBUTzE0X0FOXzAJCQkweDU4YjQKKyNkZWZpbmUgQ1JZUFRPMTRfQU5f MQkJCTB4NThiOAorI2RlZmluZSBDUllQVE8xNF9ZT1VSX0tTVl8wCQkweDU4YmMKKyNkZWZpbmUg Q1JZUFRPMTRfWU9VUl9LU1ZfMQkJMHg1OGMwCisjZGVmaW5lIENSWVBUTzE0X01JXzAJCQkweDU4 YzQKKyNkZWZpbmUgQ1JZUFRPMTRfTUlfMQkJCTB4NThjOAorI2RlZmluZSBDUllQVE8xNF9USV8w CQkJMHg1OGNjCisjZGVmaW5lIENSWVBUTzE0X0tJXzAJCQkweDU4ZDAKKyNkZWZpbmUgQ1JZUFRP MTRfS0lfMQkJCTB4NThkNAorI2RlZmluZSBDUllQVE8xNF9CTE9DS1NfTlVNCQkweDU4ZDgKKyNk ZWZpbmUgQ1JZUFRPMTRfS0VZX01FTV9EQVRBXzAJCTB4NThkYworI2RlZmluZSBDUllQVE8xNF9L RVlfTUVNX0RBVEFfMQkJMHg1OGUwCisjZGVmaW5lIENSWVBUTzE0X1NIQTFfTVNHX0RBVEEJCTB4 NThlNAorI2RlZmluZSBDUllQVE8xNF9TSEExX1ZfVkFMVUVfKHgpCSgweDU4ZTggKyAoKHgpIDw8 IDIpKQorI2RlZmluZSBUUk5HX0NUUkwJCQkweDU4ZmMKKyNkZWZpbmUgVFJOR19EQVRBX1JEWQkJ CTB4NTkwMAorI2RlZmluZSBUUk5HX0RBVEEJCQkweDU5MDQKKworLyogY2lwaGVyIGFkZHIgKi8K KyNkZWZpbmUgSERDUF9SRVZJU0lPTgkJCTB4NjAwMDAKKyNkZWZpbmUgSU5URVJSVVBUX1NPVVJD RQkJMHg2MDAwNAorI2RlZmluZSBJTlRFUlJVUFRfTUFTSwkJCTB4NjAwMDgKKyNkZWZpbmUgSERD UF9DSVBIRVJfQ09ORklHCQkweDYwMDBjCisjZGVmaW5lIEFFU18xMjhfS0VZXzAJCQkweDYwMDEw CisjZGVmaW5lIEFFU18xMjhfS0VZXzEJCQkweDYwMDE0CisjZGVmaW5lIEFFU18xMjhfS0VZXzIJ CQkweDYwMDE4CisjZGVmaW5lIEFFU18xMjhfS0VZXzMJCQkweDYwMDFjCisjZGVmaW5lIEFFU18x MjhfUkFORE9NXzAJCTB4NjAwMjAKKyNkZWZpbmUgQUVTXzEyOF9SQU5ET01fMQkJMHg2MDAyNAor I2RlZmluZSBDSVBIRVIxNF9LTV8wCQkJMHg2MDAyOAorI2RlZmluZSBDSVBIRVIxNF9LTV8xCQkJ MHg2MDAyYworI2RlZmluZSBDSVBIRVIxNF9TVEFUVVMJCQkweDYwMDMwCisjZGVmaW5lIENJUEhF UjE0X1JJX1BKX1NUQVRVUwkJMHg2MDAzNAorI2RlZmluZSBDSVBIRVJfTU9ERQkJCTB4NjAwMzgK KyNkZWZpbmUgQ0lQSEVSMTRfQU5fMAkJCTB4NjAwM2MKKyNkZWZpbmUgQ0lQSEVSMTRfQU5fMQkJ CTB4NjAwNDAKKyNkZWZpbmUgQ0lQSEVSMjJfQVVUSAkJCTB4NjAwNDQKKyNkZWZpbmUgQ0lQSEVS MTRfUjBfRFBfU1RBVFVTCQkweDYwMDQ4CisjZGVmaW5lIENJUEhFUjE0X0JPT1RTVFJBUAkJMHg2 MDA0YworCisjZGVmaW5lIERQVFhfRlJNUl9EQVRBX0NMS19SU1ROX0VOCUJJVCgxMSkKKyNkZWZp bmUgRFBUWF9GUk1SX0RBVEFfQ0xLX0VOCQlCSVQoMTApCisjZGVmaW5lIERQVFhfUEhZX0RBVEFf UlNUTl9FTgkJQklUKDkpCisjZGVmaW5lIERQVFhfUEhZX0RBVEFfQ0xLX0VOCQlCSVQoOCkKKyNk ZWZpbmUgRFBUWF9QSFlfQ0hBUl9SU1ROX0VOCQlCSVQoNykKKyNkZWZpbmUgRFBUWF9QSFlfQ0hB Ul9DTEtfRU4JCUJJVCg2KQorI2RlZmluZSBTT1VSQ0VfQVVYX1NZU19DTEtfUlNUTl9FTglCSVQo NSkKKyNkZWZpbmUgU09VUkNFX0FVWF9TWVNfQ0xLX0VOCQlCSVQoNCkKKyNkZWZpbmUgRFBUWF9T WVNfQ0xLX1JTVE5fRU4JCUJJVCgzKQorI2RlZmluZSBEUFRYX1NZU19DTEtfRU4JCQlCSVQoMikK KyNkZWZpbmUgQ0ZHX0RQVFhfVklGX0NMS19SU1ROX0VOCUJJVCgxKQorI2RlZmluZSBDRkdfRFBU WF9WSUZfQ0xLX0VOCQlCSVQoMCkKKworI2RlZmluZSBTT1VSQ0VfUEhZX1JTVE5fRU4JCUJJVCgx KQorI2RlZmluZSBTT1VSQ0VfUEhZX0NMS19FTgkJQklUKDApCisKKyNkZWZpbmUgU09VUkNFX1BL VF9TWVNfUlNUTl9FTgkJQklUKDMpCisjZGVmaW5lIFNPVVJDRV9QS1RfU1lTX0NMS19FTgkJQklU KDIpCisjZGVmaW5lIFNPVVJDRV9QS1RfREFUQV9SU1ROX0VOCQlCSVQoMSkKKyNkZWZpbmUgU09V UkNFX1BLVF9EQVRBX0NMS19FTgkJQklUKDApCisKKyNkZWZpbmUgU1BESUZfQ0RSX0NMS19SU1RO X0VOCQlCSVQoNSkKKyNkZWZpbmUgU1BESUZfQ0RSX0NMS19FTgkJQklUKDQpCisjZGVmaW5lIFNP VVJDRV9BSUZfU1lTX1JTVE5fRU4JCUJJVCgzKQorI2RlZmluZSBTT1VSQ0VfQUlGX1NZU19DTEtf RU4JCUJJVCgyKQorI2RlZmluZSBTT1VSQ0VfQUlGX0NMS19SU1ROX0VOCQlCSVQoMSkKKyNkZWZp bmUgU09VUkNFX0FJRl9DTEtfRU4JCUJJVCgwKQorCisjZGVmaW5lIFNPVVJDRV9DSVBIRVJfU1lT VEVNX0NMS19SU1ROX0VOCUJJVCgzKQorI2RlZmluZSBTT1VSQ0VfQ0lQSEVSX1NZU19DTEtfRU4J CUJJVCgyKQorI2RlZmluZSBTT1VSQ0VfQ0lQSEVSX0NIQVJfQ0xLX1JTVE5fRU4JCUJJVCgxKQor I2RlZmluZSBTT1VSQ0VfQ0lQSEVSX0NIQVJfQ0xLX0VOCQlCSVQoMCkKKworI2RlZmluZSBTT1VS Q0VfQ1JZUFRPX1NZU19DTEtfUlNUTl9FTglCSVQoMSkKKyNkZWZpbmUgU09VUkNFX0NSWVBUT19T WVNfQ0xLX0VOCUJJVCgwKQorCisjZGVmaW5lIEFQQl9JUkFNX1BBVEgJCQlCSVQoMikKKyNkZWZp bmUgQVBCX0RSQU1fUEFUSAkJCUJJVCgxKQorI2RlZmluZSBBUEJfWFRfUkVTRVQJCQlCSVQoMCkK KworI2RlZmluZSBNQUlMQk9YX0lOVF9NQVNLX0JJVAkJQklUKDEpCisjZGVmaW5lIFBJRl9JTlRf TUFTS19CSVQJCUJJVCgwKQorI2RlZmluZSBBTExfSU5UX01BU0sJCQkzCisKKy8qIG1haWxib3gg Ki8KKyNkZWZpbmUgTUJfT1BDT0RFX0lECQkJMAorI2RlZmluZSBNQl9NT0RVTEVfSUQJCQkxCisj ZGVmaW5lIE1CX1NJWkVfTVNCX0lECQkJMgorI2RlZmluZSBNQl9TSVpFX0xTQl9JRAkJCTMKKyNk ZWZpbmUgTUJfREFUQV9JRAkJCTQKKworI2RlZmluZSBNQl9NT0RVTEVfSURfRFBfVFgJCTB4MDEK KyNkZWZpbmUgTUJfTU9EVUxFX0lEX0hEQ1BfVFgJCTB4MDcKKyNkZWZpbmUgTUJfTU9EVUxFX0lE X0hEQ1BfUlgJCTB4MDgKKyNkZWZpbmUgTUJfTU9EVUxFX0lEX0hEQ1BfR0VORVJBTAkweDA5Cisj ZGVmaW5lIE1CX01PRFVMRV9JRF9HRU5FUkFMCQkweDBhCisKKy8qIGdlbmVyYWwgb3Bjb2RlICov CisjZGVmaW5lIEdFTkVSQUxfTUFJTl9DT05UUk9MICAgICAgICAgICAgMHgwMQorI2RlZmluZSBH RU5FUkFMX1RFU1RfRUNITyAgICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgR0VORVJBTF9CVVNf U0VUVElOR1MgICAgICAgICAgICAweDAzCisjZGVmaW5lIEdFTkVSQUxfVEVTVF9BQ0NFU1MgICAg ICAgICAgICAgMHgwNAorCisjZGVmaW5lIERQVFhfU0VUX1BPV0VSX01ORwkJCTB4MDAKKyNkZWZp bmUgRFBUWF9TRVRfSE9TVF9DQVBBQklMSVRJRVMJCTB4MDEKKyNkZWZpbmUgRFBUWF9HRVRfRURJ RAkJCQkweDAyCisjZGVmaW5lIERQVFhfUkVBRF9EUENECQkJCTB4MDMKKyNkZWZpbmUgRFBUWF9X UklURV9EUENECQkJCTB4MDQKKyNkZWZpbmUgRFBUWF9FTkFCTEVfRVZFTlQJCQkweDA1CisjZGVm aW5lIERQVFhfV1JJVEVfUkVHSVNURVIJCQkweDA2CisjZGVmaW5lIERQVFhfUkVBRF9SRUdJU1RF UgkJCTB4MDcKKyNkZWZpbmUgRFBUWF9XUklURV9GSUVMRAkJCTB4MDgKKyNkZWZpbmUgRFBUWF9U UkFJTklOR19DT05UUk9MCQkJMHgwOQorI2RlZmluZSBEUFRYX1JFQURfRVZFTlQJCQkJMHgwYQor I2RlZmluZSBEUFRYX1JFQURfTElOS19TVEFUCQkJMHgwYgorI2RlZmluZSBEUFRYX1NFVF9WSURF TwkJCQkweDBjCisjZGVmaW5lIERQVFhfU0VUX0FVRElPCQkJCTB4MGQKKyNkZWZpbmUgRFBUWF9H RVRfTEFTVF9BVVhfU1RBVVMJCQkweDBlCisjZGVmaW5lIERQVFhfU0VUX0xJTktfQlJFQUtfUE9J TlQJCTB4MGYKKyNkZWZpbmUgRFBUWF9GT1JDRV9MQU5FUwkJCTB4MTAKKyNkZWZpbmUgRFBUWF9I UERfU1RBVEUJCQkJMHgxMQorCisjZGVmaW5lIEZXX1NUQU5EQlkJCQkJMAorI2RlZmluZSBGV19B Q1RJVkUJCQkJMQorCisjZGVmaW5lIERQVFhfRVZFTlRfRU5BQkxFX0hQRAkJCUJJVCgwKQorI2Rl ZmluZSBEUFRYX0VWRU5UX0VOQUJMRV9UUkFJTklORwkJQklUKDEpCisKKyNkZWZpbmUgTElOS19U UkFJTklOR19OT1RfQUNUSVZFCQkwCisjZGVmaW5lIExJTktfVFJBSU5JTkdfUlVOCQkJMQorI2Rl ZmluZSBMSU5LX1RSQUlOSU5HX1JFU1RBUlQJCQkyCisKKyNkZWZpbmUgQ09OVFJPTF9WSURFT19J RExFCQkJMAorI2RlZmluZSBDT05UUk9MX1ZJREVPX1ZBTElECQkJMQorCisjZGVmaW5lIFZJRl9C WVBBU1NfSU5URVJMQUNFCQkJQklUKDEzKQorI2RlZmluZSBJTlRFUkxBQ0VfRk1UX0RFVAkJCUJJ VCgxMikKKyNkZWZpbmUgSU5URVJMQUNFX0RUQ1RfV0lOCQkJMHgyMAorCisjZGVmaW5lIERQX0ZS QU1FUl9TUF9JTlRFUkxBQ0VfRU4JCUJJVCgyKQorI2RlZmluZSBEUF9GUkFNRVJfU1BfSFNQCQkJ QklUKDEpCisjZGVmaW5lIERQX0ZSQU1FUl9TUF9WU1AJCQlCSVQoMCkKKworLyogY2FwYWJpbGl0 eSAqLworI2RlZmluZSBBVVhfSE9TVF9JTlZFUlQJCQkJMworI2RlZmluZQlGQVNUX0xUX1NVUFBP UlQJCQkJMQorI2RlZmluZSBGQVNUX0xUX05PVF9TVVBQT1JUCQkJMAorI2RlZmluZSBMQU5FX01B UFBJTkdfTk9STUFMCQkJMHgxYgorI2RlZmluZSBMQU5FX01BUFBJTkdfRkxJUFBFRAkJCTB4ZTQK KyNkZWZpbmUgRU5IQU5DRUQJCQkJMQorCisjZGVmaW5lCUZVTExfTFRfU1RBUlRFRAkJCQlCSVQo MCkKKyNkZWZpbmUgRkFTRV9MVF9TVEFSVEVECQkJCUJJVCgxKQorI2RlZmluZSBDTEtfUkVDT1ZF UllfRklOSVNIRUQJCQlCSVQoMikKKyNkZWZpbmUgRVFfUEhBU0VfRklOSVNIRUQJCQlCSVQoMykK KyNkZWZpbmUgRkFTRV9MVF9TVEFSVF9GSU5JU0hFRAkJCUJJVCg0KQorI2RlZmluZSBDTEtfUkVD T1ZFUllfRkFJTEVECQkJQklUKDUpCisjZGVmaW5lIEVRX1BIQVNFX0ZBSUxFRAkJCQlCSVQoNikK KyNkZWZpbmUgRkFTRV9MVF9GQUlMRUQJCQkJQklUKDcpCisKKyNkZWZpbmUgRFBUWF9IUERfRVZF TlQJCQkJQklUKDApCisjZGVmaW5lIERQVFhfVFJBSU5JTkdfRVZFTlQJCQlCSVQoMSkKKyNkZWZp bmUgSERDUF9UWF9TVEFUVVNfRVZFTlQJCQlCSVQoNCkKKyNkZWZpbmUgSERDUDJfVFhfSVNfS01f U1RPUkVEX0VWRU5UCQlCSVQoNSkKKyNkZWZpbmUgSERDUDJfVFhfU1RPUkVfS01fRVZFTlQJCQlC SVQoNikKKyNkZWZpbmUgSERDUF9UWF9JU19SRUNFSVZFUl9JRF9WQUxJRF9FVkVOVAlCSVQoNykK KworI2RlZmluZSBUVV9TSVpFCQkJCQkzMAorI2RlZmluZSBDRE5fRFBfTUFYX0xJTktfUkFURQkJ CURQX0xJTktfQldfNV80CisKKy8qIGF1ZGlvICovCisjZGVmaW5lIEFVRElPX1BBQ0tfRU4JCQkJ QklUKDgpCisjZGVmaW5lIFNBTVBMSU5HX0ZSRVEoeCkJCQkoKCh4KSAmIDB4ZikgPDwgMTYpCisj ZGVmaW5lIE9SSUdJTkFMX1NBTVBfRlJFUSh4KQkJCSgoKHgpICYgMHhmKSA8PCAyNCkKKyNkZWZp bmUgU1lOQ19XUl9UT19DSF9aRVJPCQkJQklUKDEpCisjZGVmaW5lIEkyU19ERUNfU1RBUlQJCQkJ QklUKDEpCisjZGVmaW5lIEFVRElPX1NXX1JTVAkJCQlCSVQoMCkKKyNkZWZpbmUgU01QTDJQS1Rf RU4JCQkJQklUKDEpCisjZGVmaW5lIE1BWF9OVU1fQ0goeCkJCQkJKCgoeCkgJiAweDFmKSAtIDEp CisjZGVmaW5lIE5VTV9PRl9JMlNfUE9SVFMoeCkJCQkoKCgoeCkgLyAyIC0gMSkgJiAweDMpIDw8 IDUpCisjZGVmaW5lIEFVRElPX1RZUEVfTFBDTQkJCQkoMiA8PCA3KQorI2RlZmluZSBDRkdfU1VC X1BDS1RfTlVNKHgpCQkJKCgoKHgpIC0gMSkgJiAweDcpIDw8IDExKQorI2RlZmluZSBBVURJT19D SF9OVU0oeCkJCQkJKCgoKHgpIC0gMSkgJiAweDFmKSA8PCAyKQorI2RlZmluZSBUUkFOU19TTVBM X1dJRFRIXzE2CQkJMAorI2RlZmluZSBUUkFOU19TTVBMX1dJRFRIXzI0CQkJQklUKDExKQorI2Rl ZmluZSBUUkFOU19TTVBMX1dJRFRIXzMyCQkJKDIgPDwgMTEpCisjZGVmaW5lIEkyU19ERUNfUE9S VF9FTih4KQkJCSgoKHgpICYgMHhmKSA8PCAxNykKKyNkZWZpbmUgU1BESUZfRU5BQkxFCQkJCUJJ VCgyMSkKKyNkZWZpbmUgU1BESUZfQVZHX1NFTAkJCQlCSVQoMjApCisjZGVmaW5lIFNQRElGX0pJ VFRFUl9CWVBBU1MJCQlCSVQoMTkpCisjZGVmaW5lIFNQRElGX0ZJRk9fTUlEX1JBTkdFKHgpCQkJ KCgoeCkgJiAweGZmKSA8PCAxMSkKKyNkZWZpbmUgU1BESUZfSklUVEVSX1RIUlNIKHgpCQkJKCgo eCkgJiAweGZmKSA8PCAzKQorI2RlZmluZSBTUERJRl9KSVRURVJfQVZHX1dJTih4KQkJCSgoeCkg JiAweDcpCisKKy8qIFJlZmVybmNlIGN5Y2xlcyB3aGVuIHVzaW5nIGxhbmUgY2xvY2sgYXMgcmVm ZXJuY2UgKi8KKyNkZWZpbmUgTEFORV9SRUZfQ1lDCQkJCTB4ODAwMAorCitlbnVtIHZvbHRhZ2Vf c3dpbmdfbGV2ZWwgeworCVZPTFRBR0VfTEVWRUxfMCwKKwlWT0xUQUdFX0xFVkVMXzEsCisJVk9M VEFHRV9MRVZFTF8yLAorCVZPTFRBR0VfTEVWRUxfMywKK307CisKK2VudW0gcHJlX2VtcGhhc2lz X2xldmVsIHsKKwlQUkVfRU1QSEFTSVNfTEVWRUxfMCwKKwlQUkVfRU1QSEFTSVNfTEVWRUxfMSwK KwlQUkVfRU1QSEFTSVNfTEVWRUxfMiwKKwlQUkVfRU1QSEFTSVNfTEVWRUxfMywKK307CisKK2Vu dW0gcGF0dGVybl9zZXQgeworCVBUUzEJCT0gQklUKDApLAorCVBUUzIJCT0gQklUKDEpLAorCVBU UzMJCT0gQklUKDIpLAorCVBUUzQJCT0gQklUKDMpLAorCURQX05PTkUJCT0gQklUKDQpCit9Owor CitlbnVtIHZpY19jb2xvcl9kZXB0aCB7CisJQkNTXzYgPSAweDEsCisJQkNTXzggPSAweDIsCisJ QkNTXzEwID0gMHg0LAorCUJDU18xMiA9IDB4OCwKKwlCQ1NfMTYgPSAweDEwLAorfTsKKworZW51 bSB2aWNfYnRfdHlwZSB7CisJQlRfNjAxID0gMHgwLAorCUJUXzcwOSA9IDB4MSwKK307CisKK3Zv aWQgY2RuX2RwX2Nsb2NrX3Jlc2V0KHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCk7CisKK3ZvaWQg Y2RuX2RwX3NldF9md19jbGsoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwLCB1MzIgY2xrKTsKK2lu dCBjZG5fZHBfbG9hZF9maXJtd2FyZShzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsIGNvbnN0IHUz MiAqaV9tZW0sCisJCQkgdTMyIGlfc2l6ZSwgY29uc3QgdTMyICpkX21lbSwgdTMyIGRfc2l6ZSk7 CitpbnQgY2RuX2RwX3NldF9maXJtd2FyZV9hY3RpdmUoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRw LCBib29sIGVuYWJsZSk7CitpbnQgY2RuX2RwX3NldF9ob3N0X2NhcChzdHJ1Y3QgY2RuX2RwX2Rl dmljZSAqZHAsIHU4IGxhbmVzLCBib29sIGZsaXApOworaW50IGNkbl9kcF9ldmVudF9jb25maWco c3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwKTsKK3UzMiBjZG5fZHBfZ2V0X2V2ZW50KHN0cnVjdCBj ZG5fZHBfZGV2aWNlICpkcCk7CitpbnQgY2RuX2RwX2dldF9ocGRfc3RhdHVzKHN0cnVjdCBjZG5f ZHBfZGV2aWNlICpkcCk7CitpbnQgY2RuX2RwX2RwY2Rfd3JpdGUoc3RydWN0IGNkbl9kcF9kZXZp Y2UgKmRwLCB1MzIgYWRkciwgdTggdmFsdWUpOworaW50IGNkbl9kcF9kcGNkX3JlYWQoc3RydWN0 IGNkbl9kcF9kZXZpY2UgKmRwLCB1MzIgYWRkciwgdTggKmRhdGEsIHUxNiBsZW4pOworaW50IGNk bl9kcF9nZXRfZWRpZF9ibG9jayh2b2lkICpkcCwgdTggKmVkaWQsCisJCQkgIHVuc2lnbmVkIGlu dCBibG9jaywgc2l6ZV90IGxlbmd0aCk7CitpbnQgY2RuX2RwX3RyYWluaW5nX3N0YXJ0KHN0cnVj dCBjZG5fZHBfZGV2aWNlICpkcCk7CitpbnQgY2RuX2RwX2dldF90cmFpbmluZ19zdGF0dXMoc3Ry dWN0IGNkbl9kcF9kZXZpY2UgKmRwKTsKK2ludCBjZG5fZHBfc2V0X3ZpZGVvX3N0YXR1cyhzdHJ1 Y3QgY2RuX2RwX2RldmljZSAqZHAsIGludCBhY3RpdmUpOworaW50IGNkbl9kcF9jb25maWdfdmlk ZW8oc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwKTsKK2ludCBjZG5fZHBfYXVkaW9fc3RvcChzdHJ1 Y3QgY2RuX2RwX2RldmljZSAqZHAsIHN0cnVjdCBhdWRpb19pbmZvICphdWRpbyk7CitpbnQgY2Ru X2RwX2F1ZGlvX211dGUoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwLCBib29sIGVuYWJsZSk7Citp bnQgY2RuX2RwX2F1ZGlvX2NvbmZpZyhzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsIHN0cnVjdCBh dWRpb19pbmZvICphdWRpbyk7CisjZW5kaWYgLyogX0NETl9EUF9SRUdfSCAqLwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV92b3AuYyBiL2RyaXZlcnMv Z3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fdm9wLmMKaW5kZXggYTcxMTU4OS4uY2M3M2Q1 NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV92b3Au YworKysgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3ZvcC5jCkBAIC0x MDQ4LDkgKzEwNDgsMTEgQEAgc3RhdGljIHZvaWQgdm9wX2NydGNfZW5hYmxlKHN0cnVjdCBkcm1f Y3J0YyAqY3J0YykKIAkJdm9wX2RzcF9ob2xkX3ZhbGlkX2lycV9kaXNhYmxlKHZvcCk7CiAJfQog Ci0JcGluX3BvbCA9IDB4ODsKLQlwaW5fcG9sIHw9IChhZGp1c3RlZF9tb2RlLT5mbGFncyAmIERS TV9NT0RFX0ZMQUdfTkhTWU5DKSA/IDAgOiAxOwotCXBpbl9wb2wgfD0gKGFkanVzdGVkX21vZGUt PmZsYWdzICYgRFJNX01PREVfRkxBR19OVlNZTkMpID8gMCA6ICgxIDw8IDEpOworCXBpbl9wb2wg PSBCSVQoRENMS19JTlZFUlQpOworCXBpbl9wb2wgfD0gKGFkanVzdGVkX21vZGUtPmZsYWdzICYg RFJNX01PREVfRkxBR19OSFNZTkMpID8KKwkJICAgMCA6IEJJVChIU1lOQ19QT1NJVElWRSk7CisJ cGluX3BvbCB8PSAoYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX05WU1lOQykg PworCQkgICAwIDogQklUKFZTWU5DX1BPU0lUSVZFKTsKIAlWT1BfQ1RSTF9TRVQodm9wLCBwaW5f cG9sLCBwaW5fcG9sKTsKIAogCXN3aXRjaCAocy0+b3V0cHV0X3R5cGUpIHsKQEAgLTEwNzAsNiAr MTA3MiwxMSBAQCBzdGF0aWMgdm9pZCB2b3BfY3J0Y19lbmFibGUoc3RydWN0IGRybV9jcnRjICpj cnRjKQogCQlWT1BfQ1RSTF9TRVQodm9wLCBtaXBpX3Bpbl9wb2wsIHBpbl9wb2wpOwogCQlWT1Bf Q1RSTF9TRVQodm9wLCBtaXBpX2VuLCAxKTsKIAkJYnJlYWs7CisJY2FzZSBEUk1fTU9ERV9DT05O RUNUT1JfRGlzcGxheVBvcnQ6CisJCXBpbl9wb2wgJj0gfkJJVChEQ0xLX0lOVkVSVCk7CisJCVZP UF9DVFJMX1NFVCh2b3AsIGRwX3Bpbl9wb2wsIHBpbl9wb2wpOworCQlWT1BfQ1RSTF9TRVQodm9w LCBkcF9lbiwgMSk7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCURSTV9ERVZfRVJST1Iodm9wLT5k ZXYsICJ1bnN1cHBvcnRlZCBjb25uZWN0b3JfdHlwZSBbJWRdXG4iLAogCQkJICAgICAgcy0+b3V0 cHV0X3R5cGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlw X2RybV92b3AuaCBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fdm9wLmgK aW5kZXggMWRiYzUyNi4uNWE0ZmFhODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yb2Nr Y2hpcC9yb2NrY2hpcF9kcm1fdm9wLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3Jv Y2tjaGlwX2RybV92b3AuaApAQCAtNDUsNiArNDUsNyBAQCBzdHJ1Y3Qgdm9wX2N0cmwgewogCXN0 cnVjdCB2b3BfcmVnIGVkcF9lbjsKIAlzdHJ1Y3Qgdm9wX3JlZyBoZG1pX2VuOwogCXN0cnVjdCB2 b3BfcmVnIG1pcGlfZW47CisJc3RydWN0IHZvcF9yZWcgZHBfZW47CiAJc3RydWN0IHZvcF9yZWcg b3V0X21vZGU7CiAJc3RydWN0IHZvcF9yZWcgZGl0aGVyX2Rvd247CiAJc3RydWN0IHZvcF9yZWcg ZGl0aGVyX3VwOwpAQCAtNTMsNiArNTQsNyBAQCBzdHJ1Y3Qgdm9wX2N0cmwgewogCXN0cnVjdCB2 b3BfcmVnIGhkbWlfcGluX3BvbDsKIAlzdHJ1Y3Qgdm9wX3JlZyBlZHBfcGluX3BvbDsKIAlzdHJ1 Y3Qgdm9wX3JlZyBtaXBpX3Bpbl9wb2w7CisJc3RydWN0IHZvcF9yZWcgZHBfcGluX3BvbDsKIAog CXN0cnVjdCB2b3BfcmVnIGh0b3RhbF9wdzsKIAlzdHJ1Y3Qgdm9wX3JlZyBoYWN0X3N0X2VuZDsK QEAgLTI0NCw2ICsyNDYsMTMgQEAgZW51bSBzY2FsZV9kb3duX21vZGUgewogCVNDQUxFX0RPV05f QVZHID0gMHgxCiB9OwogCitlbnVtIHZvcF9wb2wgeworCUhTWU5DX1BPU0lUSVZFID0gMCwKKwlW U1lOQ19QT1NJVElWRSA9IDEsCisJREVOX05FR0FUSVZFICAgPSAyLAorCURDTEtfSU5WRVJUICAg ID0gMworfTsKKwogI2RlZmluZSBGUkFDXzE2XzE2KG11bHQsIGRpdikgICAgKCgobXVsdCkgPDwg MTYpIC8gKGRpdikpCiAjZGVmaW5lIFNDTF9GVF9ERUZBVUxUX0ZJWFBPSU5UX1NISUZUCTEyCiAj ZGVmaW5lIFNDTF9NQVhfVlNLSVBMSU5FUwkJNApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L3JvY2tjaGlwL3JvY2tjaGlwX3ZvcF9yZWcuYyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9y b2NrY2hpcF92b3BfcmVnLmMKaW5kZXggZWVhODQyNy4uYWFlZGU2YiAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX3ZvcF9yZWcuYworKysgYi9kcml2ZXJzL2dw dS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfdm9wX3JlZy5jCkBAIC0yODMsNiArMjgzLDcgQEAgc3Rh dGljIGNvbnN0IHN0cnVjdCB2b3BfZGF0YSByazMyODhfdm9wID0gewogc3RhdGljIGNvbnN0IHN0 cnVjdCB2b3BfY3RybCByazMzOTlfY3RybF9kYXRhID0gewogCS5zdGFuZGJ5ID0gVk9QX1JFRyhS SzMzOTlfU1lTX0NUUkwsIDB4MSwgMjIpLAogCS5nYXRlX2VuID0gVk9QX1JFRyhSSzMzOTlfU1lT X0NUUkwsIDB4MSwgMjMpLAorCS5kcF9lbiA9IFZPUF9SRUcoUkszMzk5X1NZU19DVFJMLCAweDEs IDExKSwKIAkucmdiX2VuID0gVk9QX1JFRyhSSzMzOTlfU1lTX0NUUkwsIDB4MSwgMTIpLAogCS5o ZG1pX2VuID0gVk9QX1JFRyhSSzMzOTlfU1lTX0NUUkwsIDB4MSwgMTMpLAogCS5lZHBfZW4gPSBW T1BfUkVHKFJLMzM5OV9TWVNfQ1RSTCwgMHgxLCAxNCksCkBAIC0yOTIsNiArMjkzLDcgQEAgc3Rh dGljIGNvbnN0IHN0cnVjdCB2b3BfY3RybCByazMzOTlfY3RybF9kYXRhID0gewogCS5kYXRhX2Js YW5rID0gVk9QX1JFRyhSSzMzOTlfRFNQX0NUUkwwLCAweDEsIDE5KSwKIAkub3V0X21vZGUgPSBW T1BfUkVHKFJLMzM5OV9EU1BfQ1RSTDAsIDB4ZiwgMCksCiAJLnJnYl9waW5fcG9sID0gVk9QX1JF RyhSSzMzOTlfRFNQX0NUUkwxLCAweGYsIDE2KSwKKwkuZHBfcGluX3BvbCA9IFZPUF9SRUcoUksz Mzk5X0RTUF9DVFJMMSwgMHhmLCAxNiksCiAJLmhkbWlfcGluX3BvbCA9IFZPUF9SRUcoUkszMzk5 X0RTUF9DVFJMMSwgMHhmLCAyMCksCiAJLmVkcF9waW5fcG9sID0gVk9QX1JFRyhSSzMzOTlfRFNQ X0NUUkwxLCAweGYsIDI0KSwKIAkubWlwaV9waW5fcG9sID0gVk9QX1JFRyhSSzMzOTlfRFNQX0NU UkwxLCAweGYsIDI4KSwKLS0gCjEuOS4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9kcmktZGV2ZWwK