From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.0 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 18ECFC433E6 for ; Mon, 31 Aug 2020 20:03:20 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id DB20E2078B for ; Mon, 31 Aug 2020 20:03:19 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org DB20E2078B Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 320D76E43A; Mon, 31 Aug 2020 20:03:16 +0000 (UTC) Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id B2AF66E378 for ; Mon, 31 Aug 2020 20:03:05 +0000 (UTC) IronPort-SDR: hhRK801a5P+CSCvTxknvztpNApp6w7s2we00GNb++w0lXHUWWylq/79cxwJJVIDLOXjUdADs30 VsFb6RF13D1w== X-IronPort-AV: E=McAfee;i="6000,8403,9730"; a="156308791" X-IronPort-AV: E=Sophos;i="5.76,376,1592895600"; d="scan'208";a="156308791" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 31 Aug 2020 13:03:05 -0700 IronPort-SDR: PCnUA4O6D3gEkT04dOSdV75ghT4mCQ6j4lcw8yJmzsZ8iYA8h3mw9pA1OaHzrXqhktZrhRIQ/c ZgWsZKn4NdpQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.76,376,1592895600"; d="scan'208";a="325054068" Received: from sgovind3-mobl.amr.corp.intel.com (HELO achrisan-DESK2.amr.corp.intel.com) ([10.255.86.92]) by fmsmga004.fm.intel.com with ESMTP; 31 Aug 2020 13:03:04 -0700 From: Anitha Chrisanthus To: dri-devel@lists.freedesktop.org, anitha.chrisanthus@intel.com, bob.j.paauwe@intel.com, edmund.j.dea@intel.com Subject: [PATCH v7 2/4] drm/kmb: Add support for KeemBay Display Date: Mon, 31 Aug 2020 13:02:50 -0700 Message-Id: <1598904172-30865-3-git-send-email-anitha.chrisanthus@intel.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1598904172-30865-1-git-send-email-anitha.chrisanthus@intel.com> References: <1598904172-30865-1-git-send-email-anitha.chrisanthus@intel.com> MIME-Version: 1.0 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: daniel.vetter@intel.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" VGhpcyBpcyBhIGJhc2ljIEtNUyBhdG9taWMgbW9kZXNldHRpbmcgZGlzcGxheSBkcml2ZXIgZm9y IEtlZW1CYXkgZmFtaWx5IG9mClNPQ3MuIERyaXZlciBoYXMgbm8gMkQgb3IgM0QgZ3JhcGhpY3Mu SXQgY2FsbHMgaW50byB0aGUgQURWIGJyaWRnZQpkcml2ZXIgYXQgdGhlIGNvbm5lY3RvciBsZXZl bC4KClNpbmdsZSBDUlRDIHdpdGggTENEIGNvbnRyb2xsZXItPm1pcGkgRFNJLT4gQURWIGJyaWRn ZQoKT25seSAxMDgwcCByZXNvbHV0aW9uIGFuZCBzaW5nbGUgcGxhbmUgaXMgc3VwcG9ydGVkIGF0 IHRoaXMgdGltZS4KCnYyOiBtb3ZlZCBleHRlcm4gdG8gLmgsIHJlbW92ZWQgbGljZW5zZSB0ZXh0 CiAgICB1c2UgZHJtX2Rldl9pbml0LCB1cGNsYXNzZWQgZGV2X3ByaXZhdGUsIHJlbW92ZWQgSEFW RV9JUlEuKFNhbSkKCnYzOiBTcXVhc2hlZCBhbGwgNTkgY29tbWl0cyB0byBvbmUKCnY0OiByZXZp ZXcgY2hhbmdlcyBmcm9tIFNhbSBSYXZuYm9yZwoJcmVuYW1lZCBkZXZfcCB0byBrbWIKCW1vdmVk IGNsb2NrcyB1bmRlciBrbWJfY2xvY2ssIGNvbnNvbGlkYXRlZCBjbGsgaW5pdGlhbGl6YXRpb25z Cgl1c2UgZHJtbSBmdW5jdGlvbnMKCXVzZSBEUk1fR0VNX0NNQV9EUklWRVJfT1BTX1ZNQVAKCnY1 OiBjb3JyZWN0ZWQgc3BlbGxpbmdzCnY2OiBjb3JyZWN0ZWQgY2hlY2twYXRjaCB3YXJuaW5ncwp2 NzogcmV2aWV3IGNoYW5nZXMgU2FtIFJhdm5ib3JnIGFuZCBUaG9tYXMgWmltbWVybWFuCglyZW1v dmVkIGttYl9jcnRjLmgga21iX2NydGNfY2xlYW51cCAoVGhvbWFzKQoJcmVuYW1lZCBtb2RlX3Nl dCwga21iX2xvYWQsIGlubGluZWQgdW5sb2FkIChUaG9tYXMpCgltb3ZlZCByZW1haW5pbmcgbG9n Z2luZyB0byBkcm1fKihUaG9tYXMpCglyZS1vcmdlZCBkcml2ZXIgaW5pdGlhbGl6YXRpb24gKFRo b21hcykKCW1vdmVkIHBsYW5lX3N0YXR1cyB0byBkcm1fcHJpdmF0ZSAoU2FtKQoJcmVtb3ZlZCB1 bm5lY2Vzc2FyeSBsb2dzIGFuZCBkZWZpbmVzIGFuZCBpZmRlZiBjb2RlcyAoU2FtKQoJY2FsbCBo ZWxwZXJfY2hlY2sgaW4gcGxhbmVfYXRvbWljX2NoZWNrIChTYW0pCglyZW5hbWVkIHNldCB0byBn ZXQgZm9yIGJwcCBhbmQgZm9ybWF0IGZ1bmN0aW9ucyhTYW0pCgl1c2UgZHJtIGhlbHBlciBmdW5j dGlvbnMgZm9yIHJlc2V0LCBkdXBsaWNhdGUvZGVzdHJveSBzdGF0ZSBpbnN0ZWFkCglvZiBrbWIg ZnVuY3Rpb25zIChTYW0pCglyZW1vdmVkIGttYl9wcml2IGZyb20ga21iX3BsYW5lIGFuZCByZW1v dmVkIGttYl9wbGFuZV9zdGF0ZSAoU2FtKQoKQ2M6IFNhbSBSYXZuYm9yZyA8c2FtQHJhdm5ib3Jn Lm9yZz4KU2lnbmVkLW9mZi1ieTogQW5pdGhhIENocmlzYW50aHVzIDxhbml0aGEuY2hyaXNhbnRo dXNAaW50ZWwuY29tPgpSZXZpZXdlZC1ieTogQm9iIFBhYXV3ZSA8Ym9iLmoucGFhdXdlQGludGVs LmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0va21iL2ttYl9jcnRjLmMgIHwgMjI0ICsrKysrKysr KysrKysKIGRyaXZlcnMvZ3B1L2RybS9rbWIva21iX2Rydi5jICAgfCA2NzYgKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2ttYi9rbWJfZHJ2 LmggICB8IDE3MCArKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0va21iL2ttYl9wbGFuZS5jIHwg NDgwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9rbWIva21i X3BsYW5lLmggfCAxMTAgKysrKysrKwogNSBmaWxlcyBjaGFuZ2VkLCAxNjYwIGluc2VydGlvbnMo KykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0va21iL2ttYl9jcnRjLmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0va21iL2ttYl9kcnYuYwogY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9rbWIva21iX2Rydi5oCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL2ttYi9rbWJfcGxhbmUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS9rbWIva21iX3BsYW5lLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0va21iL2ttYl9jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0va21iL2ttYl9jcnRjLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY4NDMzMQotLS0gL2Rldi9udWxsCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9rbWIva21iX2NydGMuYwpAQCAtMCwwICsxLDIyNCBAQAorLy8gU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQorLyoKKyAqIENvcHlyaWdodCDCqSAy MDE4LTIwMjAgSW50ZWwgQ29ycG9yYXRpb24KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+ CisjaW5jbHVkZSA8bGludXgvb2ZfZ3JhcGguaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9k YXRhL3NpbXBsZWZiLmg+CisKKyNpbmNsdWRlIDx2aWRlby92aWRlb21vZGUuaD4KKworI2luY2x1 ZGUgPGRybS9kcm1fYXRvbWljLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+ CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBl ci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZGVidWdmcy5oPgorI2luY2x1ZGUgPGRybS9kcm1fZGV2 aWNlLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9kcnYuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2Nt YV9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2hlbHBlci5oPgorI2luY2x1ZGUgPGRy bS9kcm1fZ2VtX2NtYV9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX29mLmg+CisjaW5jbHVk ZSA8ZHJtL2RybV9wbGFuZV9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3ZibGFuay5oPgor CisjaW5jbHVkZSAia21iX2Rydi5oIgorI2luY2x1ZGUgImttYl9kc2kuaCIKKyNpbmNsdWRlICJr bWJfcGxhbmUuaCIKKyNpbmNsdWRlICJrbWJfcmVncy5oIgorCitzdHJ1Y3Qga21iX2NydGNfdGlt aW5nIHsKKwl1MzIgdmZyb250X3BvcmNoOworCXUzMiB2YmFja19wb3JjaDsKKwl1MzIgdnN5bmNf bGVuOworCXUzMiBoZnJvbnRfcG9yY2g7CisJdTMyIGhiYWNrX3BvcmNoOworCXUzMiBoc3luY19s ZW47Cit9OworCitzdGF0aWMgaW50IGttYl9jcnRjX2VuYWJsZV92Ymxhbmsoc3RydWN0IGRybV9j cnRjICpjcnRjKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CisJc3Ry dWN0IGttYl9kcm1fcHJpdmF0ZSAqa21iID0gdG9fa21iKGRldik7CisKKwkvKiBDbGVhciBpbnRl cnJ1cHQgKi8KKwlrbWJfd3JpdGVfbGNkKGttYiwgTENEX0lOVF9DTEVBUiwgTENEX0lOVF9WRVJU X0NPTVApOworCS8qIFNldCB3aGljaCBpbnRlcnZhbCB0byBnZW5lcmF0ZSB2ZXJ0aWNhbCBpbnRl cnJ1cHQgKi8KKwlrbWJfd3JpdGVfbGNkKGttYiwgTENEX1ZTVEFUVVNfQ09NUEFSRSwKKwkJICAg ICAgTENEX1ZTVEFUVVNfQ09NUEFSRV9WU1lOQyk7CisJLyogRW5hYmxlIHZlcnRpY2FsIGludGVy cnVwdCAqLworCWttYl9zZXRfYml0bWFza19sY2Qoa21iLCBMQ0RfSU5UX0VOQUJMRSwKKwkJCSAg ICBMQ0RfSU5UX1ZFUlRfQ09NUCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGttYl9j cnRjX2Rpc2FibGVfdmJsYW5rKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgZHJt X2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OworCXN0cnVjdCBrbWJfZHJtX3ByaXZhdGUgKmttYiA9 IHRvX2ttYihkZXYpOworCisJLyogQ2xlYXIgaW50ZXJydXB0ICovCisJa21iX3dyaXRlX2xjZChr bWIsIExDRF9JTlRfQ0xFQVIsIExDRF9JTlRfVkVSVF9DT01QKTsKKwkvKiBEaXNhYmxlIHZlcnRp Y2FsIGludGVycnVwdCAqLworCWttYl9jbHJfYml0bWFza19sY2Qoa21iLCBMQ0RfSU5UX0VOQUJM RSwKKwkJCSAgICBMQ0RfSU5UX1ZFUlRfQ09NUCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg ZHJtX2NydGNfZnVuY3Mga21iX2NydGNfZnVuY3MgPSB7CisJLmRlc3Ryb3kgPSBkcm1fY3J0Y19j bGVhbnVwLAorCS5zZXRfY29uZmlnID0gZHJtX2F0b21pY19oZWxwZXJfc2V0X2NvbmZpZywKKwku cGFnZV9mbGlwID0gZHJtX2F0b21pY19oZWxwZXJfcGFnZV9mbGlwLAorCS5yZXNldCA9IGRybV9h dG9taWNfaGVscGVyX2NydGNfcmVzZXQsCisJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBkcm1f YXRvbWljX2hlbHBlcl9jcnRjX2R1cGxpY2F0ZV9zdGF0ZSwKKwkuYXRvbWljX2Rlc3Ryb3lfc3Rh dGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jcnRjX2Rlc3Ryb3lfc3RhdGUsCisJLmVuYWJsZV92Ymxh bmsgPSBrbWJfY3J0Y19lbmFibGVfdmJsYW5rLAorCS5kaXNhYmxlX3ZibGFuayA9IGttYl9jcnRj X2Rpc2FibGVfdmJsYW5rLAorfTsKKworc3RhdGljIHZvaWQga21iX2NydGNfc2V0X21vZGUoc3Ry dWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5k ZXY7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm0gPSAmY3J0Yy0+c3RhdGUtPmFkanVzdGVk X21vZGU7CisJc3RydWN0IGttYl9jcnRjX3RpbWluZyB2bTsKKwlpbnQgdnN5bmNfc3RhcnRfb2Zm c2V0OworCWludCB2c3luY19lbmRfb2Zmc2V0OworCXN0cnVjdCBrbWJfZHJtX3ByaXZhdGUgKmtt YiA9IHRvX2ttYihkZXYpOworCXVuc2lnbmVkIGludCB2YWwgPSAwOworCisJLyogSW5pdGlhbGl6 ZSBtaXBpICovCisJa21iX2RzaV9od19pbml0KGRldiwgbSk7CisJZHJtX2luZm8oZGV2LAorCQkg InZmcD0gJWQgdmJwPSAlZCB2c3ljX2xlbj0lZCBoZnA9JWQgaGJwPSVkIGhzeW5jX2xlbj0lZFxu IiwKKwkJIG0tPmNydGNfdnN5bmNfc3RhcnQgLSBtLT5jcnRjX3ZkaXNwbGF5LAorCQkgbS0+Y3J0 Y192dG90YWwgLSBtLT5jcnRjX3ZzeW5jX2VuZCwKKwkJIG0tPmNydGNfdnN5bmNfZW5kIC0gbS0+ Y3J0Y192c3luY19zdGFydCwKKwkJIG0tPmNydGNfaHN5bmNfc3RhcnQgLSBtLT5jcnRjX2hkaXNw bGF5LAorCQkgbS0+Y3J0Y19odG90YWwgLSBtLT5jcnRjX2hzeW5jX2VuZCwKKwkJIG0tPmNydGNf aHN5bmNfZW5kIC0gbS0+Y3J0Y19oc3luY19zdGFydCk7CisJdmFsID0ga21iX3JlYWRfbGNkKGtt YiwgTENEX0lOVF9FTkFCTEUpOworCWttYl9jbHJfYml0bWFza19sY2Qoa21iLCBMQ0RfSU5UX0VO QUJMRSwgdmFsKTsKKwlrbWJfc2V0X2JpdG1hc2tfbGNkKGttYiwgTENEX0lOVF9DTEVBUiwgfjB4 MCk7CisJdm0udmZyb250X3BvcmNoID0gMjsKKwl2bS52YmFja19wb3JjaCA9IDI7CisJdm0udnN5 bmNfbGVuID0gODsKKwl2bS5oZnJvbnRfcG9yY2ggPSAwOworCXZtLmhiYWNrX3BvcmNoID0gMDsK Kwl2bS5oc3luY19sZW4gPSAyODsKKworCXZzeW5jX3N0YXJ0X29mZnNldCA9ICBtLT5jcnRjX3Zz eW5jX3N0YXJ0IC0gIG0tPmNydGNfaHN5bmNfc3RhcnQ7CisJdnN5bmNfZW5kX29mZnNldCA9ICBt LT5jcnRjX3ZzeW5jX2VuZCAtIG0tPmNydGNfaHN5bmNfZW5kOworCisJZHJtX2RiZyhkZXYsICIl cyA6ICVkYWN0aXZlIGhlaWdodD0gJWQgdmJwPSVkIHZmcD0lZCB2c3luYy13PSVkIGgtYWN0aXZl PSVkIGgtYnA9JWQgaC1mcD0lZCBoeXNuYy1sPSVkIiwKKwkJX19mdW5jX18sIF9fTElORV9fLAor CQkJbS0+Y3J0Y192ZGlzcGxheSwgdm0udmJhY2tfcG9yY2gsIHZtLnZmcm9udF9wb3JjaCwKKwkJ CXZtLnZzeW5jX2xlbiwgbS0+Y3J0Y19oZGlzcGxheSwgdm0uaGJhY2tfcG9yY2gsCisJCQl2bS5o ZnJvbnRfcG9yY2gsIHZtLmhzeW5jX2xlbik7CisJa21iX3dyaXRlX2xjZChrbWIsIExDRF9WX0FD VElWRUhFSUdIVCwKKwkJICAgICAgbS0+Y3J0Y192ZGlzcGxheSAtIDEpOworCWttYl93cml0ZV9s Y2Qoa21iLCBMQ0RfVl9CQUNLUE9SQ0gsIHZtLnZiYWNrX3BvcmNoKTsKKwlrbWJfd3JpdGVfbGNk KGttYiwgTENEX1ZfRlJPTlRQT1JDSCwgdm0udmZyb250X3BvcmNoKTsKKwlrbWJfd3JpdGVfbGNk KGttYiwgTENEX1ZTWU5DX1dJRFRILCB2bS52c3luY19sZW4gLSAxKTsKKwlrbWJfd3JpdGVfbGNk KGttYiwgTENEX0hfQUNUSVZFV0lEVEgsCisJCSAgICAgIG0tPmNydGNfaGRpc3BsYXkgLSAxKTsK KwlrbWJfd3JpdGVfbGNkKGttYiwgTENEX0hfQkFDS1BPUkNILCB2bS5oYmFja19wb3JjaCk7CisJ a21iX3dyaXRlX2xjZChrbWIsIExDRF9IX0ZST05UUE9SQ0gsIHZtLmhmcm9udF9wb3JjaCk7CisJ a21iX3dyaXRlX2xjZChrbWIsIExDRF9IU1lOQ19XSURUSCwgdm0uaHN5bmNfbGVuIC0gMSk7CisJ LyogVGhpcyBpcyBoYXJkY29kZWQgYXMgMCBpbiB0aGUgTXlyaWFkeCBjb2RlICovCisJa21iX3dy aXRlX2xjZChrbWIsIExDRF9WU1lOQ19TVEFSVCwgMCk7CisJa21iX3dyaXRlX2xjZChrbWIsIExD RF9WU1lOQ19FTkQsIDApOworCS8qIEJhY2sgZ3JvdW5kIGNvbG9yICovCisJa21iX3dyaXRlX2xj ZChrbWIsIExDRF9CR19DT0xPVVJfTFMsIDB4NCk7CisJaWYgKG0tPmZsYWdzID09IERSTV9NT0RF X0ZMQUdfSU5URVJMQUNFKSB7CisJCWttYl93cml0ZV9sY2Qoa21iLAorCQkJICAgICAgTENEX1ZT WU5DX1dJRFRIX0VWRU4sIHZtLnZzeW5jX2xlbiAtIDEpOworCQlrbWJfd3JpdGVfbGNkKGttYiwK KwkJCSAgICAgIExDRF9WX0JBQ0tQT1JDSF9FVkVOLCB2bS52YmFja19wb3JjaCk7CisJCWttYl93 cml0ZV9sY2Qoa21iLAorCQkJICAgICAgTENEX1ZfRlJPTlRQT1JDSF9FVkVOLCB2bS52ZnJvbnRf cG9yY2gpOworCQlrbWJfd3JpdGVfbGNkKGttYiwgTENEX1ZfQUNUSVZFSEVJR0hUX0VWRU4sCisJ CQkgICAgICBtLT5jcnRjX3ZkaXNwbGF5IC0gMSk7CisJCS8qIFRoaXMgaXMgaGFyZGNvZGVkIGFz IDEwIGluIHRoZSBNeXJpYWR4IGNvZGUgKi8KKwkJa21iX3dyaXRlX2xjZChrbWIsIExDRF9WU1lO Q19TVEFSVF9FVkVOLCAxMCk7CisJCWttYl93cml0ZV9sY2Qoa21iLCBMQ0RfVlNZTkNfRU5EX0VW RU4sIDEwKTsKKwl9CisJa21iX3dyaXRlX2xjZChrbWIsIExDRF9USU1JTkdfR0VOX1RSSUcsIEVO QUJMRSk7CisJa21iX3NldF9iaXRtYXNrX2xjZChrbWIsIExDRF9DT05UUk9MLCBMQ0RfQ1RSTF9F TkFCTEUpOworCWttYl9zZXRfYml0bWFza19sY2Qoa21iLCBMQ0RfSU5UX0VOQUJMRSwgdmFsKTsK K30KKworc3RhdGljIHZvaWQga21iX2NydGNfYXRvbWljX2VuYWJsZShzdHJ1Y3QgZHJtX2NydGMg KmNydGMsCisJCQkJICAgc3RydWN0IGRybV9jcnRjX3N0YXRlICpvbGRfc3RhdGUpCit7CisJc3Ry dWN0IGttYl9kcm1fcHJpdmF0ZSAqbGNkID0gY3J0Y190b19rbWJfcHJpdihjcnRjKTsKKworCWNs a19wcmVwYXJlX2VuYWJsZShsY2QtPmNsayk7CisJa21iX2NydGNfc2V0X21vZGUoY3J0Yyk7CisJ ZHJtX2NydGNfdmJsYW5rX29uKGNydGMpOworfQorCitzdGF0aWMgdm9pZCBrbWJfY3J0Y19hdG9t aWNfZGlzYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkJICAgIHN0cnVjdCBkcm1fY3J0 Y19zdGF0ZSAqb2xkX3N0YXRlKQoreworCXN0cnVjdCBrbWJfZHJtX3ByaXZhdGUgKmxjZCA9IGNy dGNfdG9fa21iX3ByaXYoY3J0Yyk7CisKKwkvKiBkdWUgdG8gaHcgbGltaXRhdGlvbnMsIHBsYW5l cyBuZWVkIHRvIGJlIG9mZiB3aGVuIGNydGMgaXMgb2ZmICovCisJZHJtX2F0b21pY19oZWxwZXJf ZGlzYWJsZV9wbGFuZXNfb25fY3J0YyhvbGRfc3RhdGUsIGZhbHNlKTsKKworCWRybV9jcnRjX3Zi bGFua19vZmYoY3J0Yyk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGxjZC0+Y2xrKTsKK30KKwor c3RhdGljIHZvaWQga21iX2NydGNfYXRvbWljX2JlZ2luKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywK KwkJCQkgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IGRybV9kZXZp Y2UgKmRldiA9IGNydGMtPmRldjsKKwlzdHJ1Y3Qga21iX2RybV9wcml2YXRlICprbWIgPSB0b19r bWIoZGV2KTsKKworCWttYl9jbHJfYml0bWFza19sY2Qoa21iLCBMQ0RfSU5UX0VOQUJMRSwKKwkJ CSAgICBMQ0RfSU5UX1ZFUlRfQ09NUCk7Cit9CisKK3N0YXRpYyB2b2lkIGttYl9jcnRjX2F0b21p Y19mbHVzaChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkJICBzdHJ1Y3QgZHJtX2NydGNfc3Rh dGUgKnN0YXRlKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CisJc3Ry dWN0IGttYl9kcm1fcHJpdmF0ZSAqa21iID0gdG9fa21iKGRldik7CisKKwlrbWJfc2V0X2JpdG1h c2tfbGNkKGttYiwgTENEX0lOVF9FTkFCTEUsCisJCQkgICAgTENEX0lOVF9WRVJUX0NPTVApOwor CisJc3Bpbl9sb2NrX2lycSgmY3J0Yy0+ZGV2LT5ldmVudF9sb2NrKTsKKwlpZiAoY3J0Yy0+c3Rh dGUtPmV2ZW50KQorCQlkcm1fY3J0Y19zZW5kX3ZibGFua19ldmVudChjcnRjLCBjcnRjLT5zdGF0 ZS0+ZXZlbnQpOworCWNydGMtPnN0YXRlLT5ldmVudCA9IE5VTEw7CisJc3Bpbl91bmxvY2tfaXJx KCZjcnRjLT5kZXYtPmV2ZW50X2xvY2spOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9j cnRjX2hlbHBlcl9mdW5jcyBrbWJfY3J0Y19oZWxwZXJfZnVuY3MgPSB7CisJLmF0b21pY19iZWdp biA9IGttYl9jcnRjX2F0b21pY19iZWdpbiwKKwkuYXRvbWljX2VuYWJsZSA9IGttYl9jcnRjX2F0 b21pY19lbmFibGUsCisJLmF0b21pY19kaXNhYmxlID0ga21iX2NydGNfYXRvbWljX2Rpc2FibGUs CisJLmF0b21pY19mbHVzaCA9IGttYl9jcnRjX2F0b21pY19mbHVzaCwKK307CisKK2ludCBrbWJf c2V0dXBfY3J0YyhzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQoreworCXN0cnVjdCBrbWJfZHJtX3By aXZhdGUgKmttYiA9IHRvX2ttYihkcm0pOworCXN0cnVjdCBrbWJfcGxhbmUgKnByaW1hcnk7CisJ aW50IHJldDsKKworCXByaW1hcnkgPSBrbWJfcGxhbmVfaW5pdChkcm0pOworCWlmIChJU19FUlIo cHJpbWFyeSkpCisJCXJldHVybiBQVFJfRVJSKHByaW1hcnkpOworCisJcmV0ID0gZHJtX2NydGNf aW5pdF93aXRoX3BsYW5lcyhkcm0sICZrbWItPmNydGMsICZwcmltYXJ5LT5iYXNlX3BsYW5lLAor CQkJCQlOVUxMLCAma21iX2NydGNfZnVuY3MsIE5VTEwpOworCWlmIChyZXQpIHsKKwkJa21iX3Bs YW5lX2Rlc3Ryb3koJnByaW1hcnktPmJhc2VfcGxhbmUpOworCQlyZXR1cm4gcmV0OworCX0KKwor CWRybV9jcnRjX2hlbHBlcl9hZGQoJmttYi0+Y3J0YywgJmttYl9jcnRjX2hlbHBlcl9mdW5jcyk7 CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0va21iL2ttYl9kcnYu YyBiL2RyaXZlcnMvZ3B1L2RybS9rbWIva21iX2Rydi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLmU0MTMwOTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0v a21iL2ttYl9kcnYuYwpAQCAtMCwwICsxLDY3NiBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjAtb25seQorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE4LTIwMjAgSW50ZWwgQ29y cG9yYXRpb24KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgv Y29uc29sZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1 bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9ncmFwaC5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3Jl c2VydmVkX21lbS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1 ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCisj aW5jbHVkZSA8ZHJtL2RybS5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljLmg+CisjaW5jbHVk ZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+Cisj aW5jbHVkZSA8ZHJtL2RybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2Rydi5oPgorI2lu Y2x1ZGUgPGRybS9kcm1fZmJfY21hX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZmJfaGVs cGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9nZW1fY21hX2hlbHBlci5oPgorI2luY2x1ZGUgPGRy bS9kcm1fZ2VtX2ZyYW1lYnVmZmVyX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1faW9jdGwu aD4KKyNpbmNsdWRlIDxkcm0vZHJtX2lycS5oPgorI2luY2x1ZGUgPGRybS9kcm1fb2YuaD4KKyNp bmNsdWRlIDxkcm0vZHJtX3Byb2JlX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fdmJsYW5r Lmg+CisKKyNpbmNsdWRlICJrbWJfZHJ2LmgiCisjaW5jbHVkZSAia21iX2RzaS5oIgorI2luY2x1 ZGUgImttYl9yZWdzLmgiCisKK2ludCBrbWJfdW5kZXJfZmxvdyA9IDAsIGttYl9mbHVzaF9kb25l ID0gMCwgbGF5ZXJfbm8gPSAwOworc3RhdGljIHN0cnVjdCBrbWJfY2xvY2sga21iX2NsazsKKwor c3RhdGljIHN0cnVjdCBkcm1fYnJpZGdlICphZHZfYnJpZGdlOworCitpbnQga21iX2Rpc3BsYXlf Y2xrX2VuYWJsZShzdHJ1Y3Qga21iX2RybV9wcml2YXRlICprbWIpCit7CisJaW50IHJldCA9IDA7 CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoa21iX2Nsay5jbGtfbGNkKTsKKwlpZiAocmV0 KSB7CisJCWRybV9lcnIoJmttYi0+ZHJtLCAiRmFpbGVkIHRvIGVuYWJsZSBMQ0QgY2xvY2s6ICVk XG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJs ZShrbWJfY2xrLmNsa19taXBpKTsKKwlpZiAocmV0KSB7CisJCWRybV9lcnIoJmttYi0+ZHJtLCAi RmFpbGVkIHRvIGVuYWJsZSBNSVBJIGNsb2NrOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsK Kwl9CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoa21iX2Nsay5jbGtfbWlwaV9lY2ZnKTsK KwlpZiAocmV0KSB7CisJCWRybV9lcnIoJmttYi0+ZHJtLAorCQkJIkZhaWxlZCB0byBlbmFibGUg TUlQSV9FQ0ZHIGNsb2NrOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQg PSBjbGtfcHJlcGFyZV9lbmFibGUoa21iX2Nsay5jbGtfbWlwaV9jZmcpOworCWlmIChyZXQpIHsK KwkJZHJtX2Vycigma21iLT5kcm0sCisJCQkiRmFpbGVkIHRvIGVuYWJsZSBNSVBJX0NGRyBjbG9j azogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCURSTV9JTkZPKCJTVUNDRVNTIDog ZW5hYmxlZCBMQ0QgTUlQSSBjbG9ja3NcbiIpOworCXJldHVybiAwOworfQorCitpbnQga21iX2lu aXRpYWxpemVfY2xvY2tzKHN0cnVjdCBrbWJfZHJtX3ByaXZhdGUgKmttYiwgc3RydWN0IGRldmlj ZSAqZGV2KQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqdnB1X2RldjsKKwl1bnNpZ25lZCBsb25n IGNsazsKKwlpbnQgcmV0ID0gMDsKKworCWttYl9jbGsuY2xrX2xjZCA9IGNsa19nZXQoZGV2LCAi Y2xrX2xjZCIpOworCWlmIChJU19FUlIoa21iX2Nsay5jbGtfbGNkKSkgeworCQlkcm1fZXJyKCZr bWItPmRybSwgImNsa19nZXQoKSBmYWlsZWQgY2xrX2xjZFxuIik7CisJCXJldHVybiBQVFJfRVJS KGttYl9jbGsuY2xrX2xjZCk7CisJfQorCisJa21iX2Nsay5jbGtfbWlwaSA9IGNsa19nZXQoZGV2 LCAiY2xrX21pcGkiKTsKKwlpZiAoSVNfRVJSKGttYl9jbGsuY2xrX21pcGkpKSB7CisJCWRybV9l cnIoJmttYi0+ZHJtLCAiY2xrX2dldCgpIGZhaWxlZCBjbGtfbWlwaVxuIik7CisJCXJldHVybiBQ VFJfRVJSKGttYl9jbGsuY2xrX21pcGkpOworCX0KKworCWttYl9jbGsuY2xrX21pcGlfZWNmZyA9 IGNsa19nZXQoZGV2LCAiY2xrX21pcGlfZWNmZyIpOworCWlmIChJU19FUlIoa21iX2Nsay5jbGtf bWlwaV9lY2ZnKSkgeworCQlkcm1fZXJyKCZrbWItPmRybSwgImNsa19nZXQoKSBmYWlsZWQgY2xr X21pcGlfZWNmZ1xuIik7CisJCXJldHVybiBQVFJfRVJSKGttYl9jbGsuY2xrX21pcGlfZWNmZyk7 CisJfQorCisJa21iX2Nsay5jbGtfbWlwaV9jZmcgPSBjbGtfZ2V0KGRldiwgImNsa19taXBpX2Nm ZyIpOworCWlmIChJU19FUlIoa21iX2Nsay5jbGtfbWlwaV9jZmcpKSB7CisJCWRybV9lcnIoJmtt Yi0+ZHJtLCAiY2xrX2dldCgpIGZhaWxlZCBjbGtfbWlwaV9jZmdcbiIpOworCQlyZXR1cm4gUFRS X0VSUihrbWJfY2xrLmNsa19taXBpX2NmZyk7CisJfQorCXZwdV9kZXYgPSBvZl9maW5kX25vZGVf YnlfcGF0aCgiL3NvYy92cHUtaXBjIik7CisJa21iX2Nsay5jbGtfcGxsMCA9IG9mX2Nsa19nZXRf YnlfbmFtZSh2cHVfZGV2LCAicGxsXzBfb3V0XzAiKTsKKwlpZiAoSVNfRVJSKGttYl9jbGsuY2xr X3BsbDApKSB7CisJCWRybV9lcnIoJmttYi0+ZHJtLCAiY2xrX2dldCgpIGZhaWxlZCBjbGtfcGxs MCAiKTsKKwkJcmV0dXJuIFBUUl9FUlIoa21iX2Nsay5jbGtfcGxsMCk7CisJfQorCWttYi0+c3lz X2Nsa19taHogPSBjbGtfZ2V0X3JhdGUoa21iX2Nsay5jbGtfcGxsMCkgLyAxMDAwMDAwOworCWRy bV9pbmZvKCZrbWItPmRybSwgInN5c3RlbSBjbGsgPSAlZCBNaHoiLCBrbWItPnN5c19jbGtfbWh6 KTsKKworCS8qIFNldCBMQ0QgY2xvY2sgdG8gMjAwIE1oeiAqLworCWNsa19zZXRfcmF0ZShrbWJf Y2xrLmNsa19sY2QsIEtNQl9MQ0RfREVGQVVMVF9DTEspOworCWlmIChjbGtfZ2V0X3JhdGUoa21i X2Nsay5jbGtfbGNkKSAhPSBLTUJfTENEX0RFRkFVTFRfQ0xLKSB7CisJCWRybV9lcnIoJmttYi0+ ZHJtLCAiZmFpbGVkIHRvIHNldCB0byBjbGtfbGNkIHRvICVkXG4iLAorCQkJS01CX0xDRF9ERUZB VUxUX0NMSyk7CisJCXJldHVybiAtMTsKKwl9CisJZHJtX2RiZygma21iLT5kcm0sICJjbGtfbGNk ID0gJWxkXG4iLCBjbGtfZ2V0X3JhdGUoa21iX2Nsay5jbGtfbGNkKSk7CisKKwkvKiBTZXQgTUlQ SSBjbG9jayB0byAyNCBNaHogKi8KKwljbGtfc2V0X3JhdGUoa21iX2Nsay5jbGtfbWlwaSwgS01C X01JUElfREVGQVVMVF9DTEspOworCWlmIChjbGtfZ2V0X3JhdGUoa21iX2Nsay5jbGtfbWlwaSkg IT0gS01CX01JUElfREVGQVVMVF9DTEspIHsKKwkJZHJtX2Vycigma21iLT5kcm0sICJmYWlsZWQg dG8gc2V0IHRvIGNsa19taXBpIHRvICVkXG4iLAorCQkJS01CX01JUElfREVGQVVMVF9DTEspOwor CQlyZXR1cm4gLTE7CisJfQorCWRybV9kYmcoJmttYi0+ZHJtLCAiY2xrX21pcGkgPSAlbGRcbiIs IGNsa19nZXRfcmF0ZShrbWJfY2xrLmNsa19taXBpKSk7CisKKwljbGsgPSBjbGtfZ2V0X3JhdGUo a21iX2Nsay5jbGtfbWlwaV9lY2ZnKTsKKwlpZiAoY2xrICE9IEtNQl9NSVBJX0RFRkFVTFRfQ0ZH X0NMSykgeworCQkvKiBTZXQgTUlQSV9FQ0ZHIGNsb2NrIHRvIDI0IE1oeiAqLworCQljbGtfc2V0 X3JhdGUoa21iX2Nsay5jbGtfbWlwaV9lY2ZnLCBLTUJfTUlQSV9ERUZBVUxUX0NGR19DTEspOwor CQljbGsgPSBjbGtfZ2V0X3JhdGUoa21iX2Nsay5jbGtfbWlwaV9lY2ZnKTsKKwkJaWYgKGNsayAh PSBLTUJfTUlQSV9ERUZBVUxUX0NGR19DTEspIHsKKwkJCWRybV9lcnIoJmttYi0+ZHJtLAorCQkJ CSJmYWlsZWQgdG8gc2V0IHRvIGNsa19taXBpX2VjZmcgdG8gJWRcbiIsCisJCQkJIEtNQl9NSVBJ X0RFRkFVTFRfQ0ZHX0NMSyk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwljbGsgPSBjbGtf Z2V0X3JhdGUoa21iX2Nsay5jbGtfbWlwaV9jZmcpOworCWlmIChjbGsgIT0gS01CX01JUElfREVG QVVMVF9DRkdfQ0xLKSB7CisJCS8qIFNldCBNSVBJX0NGRyBjbG9jayB0byAyNCBNaHogKi8KKwkJ Y2xrX3NldF9yYXRlKGttYl9jbGsuY2xrX21pcGlfY2ZnLCAyNDAwMDAwMCk7CisJCWNsayA9IGNs a19nZXRfcmF0ZShrbWJfY2xrLmNsa19taXBpX2NmZyk7CisJCWlmIChjbGsgIT0gS01CX01JUElf REVGQVVMVF9DRkdfQ0xLKSB7CisJCQlkcm1fZXJyKCZrbWItPmRybSwKKwkJCQkiZmFpbGVkIHRv IHNldCBjbGtfbWlwaV9jZmcgdG8gJWRcbiIsCisJCQkJICBLTUJfTUlQSV9ERUZBVUxUX0NGR19D TEspOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCisJcmV0ID0ga21iX2Rpc3BsYXlfY2xrX2Vu YWJsZShrbWIpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBFbmFibGUgTVNTX0NB TV9DTEtfQ1RSTCBmb3IgTUlQSSBUWCBhbmQgTENEICovCisJa21iX3NldF9iaXRtYXNrX21zc2Nh bShrbWIsIE1TU19DQU1fQ0xLX0NUUkwsIDB4MWZmZik7CisJa21iX3NldF9iaXRtYXNrX21zc2Nh bShrbWIsIE1TU19DQU1fUlNUTl9DVFJMLCAweGZmZmZmZmZmKTsKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIGludCBrbWJfZGlzcGxheV9jbGtfZGlzYWJsZSh2b2lkKQoreworCWlmIChrbWJfY2xr LmNsa19sY2QpCisJCWNsa19kaXNhYmxlX3VucHJlcGFyZShrbWJfY2xrLmNsa19sY2QpOworCWlm IChrbWJfY2xrLmNsa19taXBpKQorCQljbGtfZGlzYWJsZV91bnByZXBhcmUoa21iX2Nsay5jbGtf bWlwaSk7CisJaWYgKGttYl9jbGsuY2xrX21pcGlfZWNmZykKKwkJY2xrX2Rpc2FibGVfdW5wcmVw YXJlKGttYl9jbGsuY2xrX21pcGlfZWNmZyk7CisJaWYgKGttYl9jbGsuY2xrX21pcGlfY2ZnKQor CQljbGtfZGlzYWJsZV91bnByZXBhcmUoa21iX2Nsay5jbGtfbWlwaV9jZmcpOworCXJldHVybiAw OworfQorCitzdGF0aWMgdm9pZCBfX2lvbWVtICprbWJfbWFwX21taW8oc3RydWN0IGRybV9kZXZp Y2UgKmRybSwgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRybS0+ZGV2KTsKKwl2 b2lkIF9faW9tZW0gKm1lbTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUo cGRldiwgSU9SRVNPVVJDRV9NRU0sIG5hbWUpOworCWlmICghcmVzKSB7CisJCWRybV9lcnIoZHJt LCAiZmFpbGVkIHRvIGdldCByZXNvdXJjZSBmb3IgJXMiLCBuYW1lKTsKKwkJcmV0dXJuIEVSUl9Q VFIoLUVOT01FTSk7CisJfQorCW1lbSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkcm0tPmRldiwg cmVzKTsKKwlpZiAoSVNfRVJSKG1lbSkpCisJCWRybV9lcnIoZHJtLCAiZmFpbGVkIHRvIGlvcmVt YXAgJXMgcmVnaXN0ZXJzIiwgbmFtZSk7CisJcmV0dXJuIG1lbTsKK30KKworc3RhdGljIGludCBr bWJfaHdfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCB1bnNpZ25lZCBsb25nIGZsYWdzKQor eworCXN0cnVjdCBrbWJfZHJtX3ByaXZhdGUgKmttYiA9IHRvX2ttYihkcm0pOworCXN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZHJtLT5kZXYpOworCWlu dCBpcnFfbGNkOworCWludCByZXQgPSAwOworCisJLyogTWFwIExDRCBNTUlPIHJlZ2lzdGVycyAq LworCWttYi0+bGNkX21taW8gPSBrbWJfbWFwX21taW8oZHJtLCAibGNkX3JlZ3MiKTsKKwlpZiAo SVNfRVJSKGttYi0+bGNkX21taW8pKSB7CisJCWRybV9lcnIoJmttYi0+ZHJtLCAiZmFpbGVkIHRv IG1hcCBMQ0QgcmVnaXN0ZXJzXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogTWFw IE1JUEkgTU1JTyByZWdpc3RlcnMgKi8KKwlrbWItPm1pcGlfbW1pbyA9IGttYl9tYXBfbW1pbyhk cm0sICJtaXBpX3JlZ3MiKTsKKwlpZiAoSVNfRVJSKGttYi0+bWlwaV9tbWlvKSkgeworCQlkcm1f ZXJyKCZrbWItPmRybSwgImZhaWxlZCB0byBtYXAgTUlQSSByZWdpc3RlcnNcbiIpOworCQlpb3Vu bWFwKGttYi0+bGNkX21taW8pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBUaGlzIGlz IG9ubHkgZm9yIE1JUElfVFhfTVNTX0xDRF9NSVBJX0NGRyBhbmQKKwkgKiBNU1NfQ0FNX0NMS19D VFJMIHJlZ2lzdGVyCisJICovCisJa21iLT5tc3NjYW1fbW1pbyA9IGttYl9tYXBfbW1pbyhkcm0s ICJtc3NjYW1fcmVncyIpOworCWlmIChJU19FUlIoa21iLT5tc3NjYW1fbW1pbykpIHsKKwkJZHJt X2Vycigma21iLT5kcm0sICJmYWlsZWQgdG8gbWFwIE1TU0NBTSByZWdpc3RlcnNcbiIpOworCQlp b3VubWFwKGttYi0+bGNkX21taW8pOworCQlpb3VubWFwKGttYi0+bWlwaV9tbWlvKTsKKwkJcmV0 dXJuIC1FTk9NRU07CisJfQorCisJaWYgKElTX0VSUihrbWItPm1zc2NhbV9tbWlvKSkgeworCQlk cm1fZXJyKCZrbWItPmRybSwgImZhaWxlZCB0byBtYXAgTVNTQ0FNIHJlZ2lzdGVyc1xuIik7CisJ CWlvdW5tYXAoa21iLT5sY2RfbW1pbyk7CisJCWlvdW5tYXAoa21iLT5taXBpX21taW8pOworCQly ZXR1cm4gLUVOT01FTTsKKwl9CisJLyogRW5hYmxlIGRpc3BsYXkgY2xvY2tzICovCisJa21iX2lu aXRpYWxpemVfY2xvY2tzKGttYiwgJnBkZXYtPmRldik7CisKKwkvKiBSZWdpc3RlciBpcnFzIGhl cmUgLSBzZWN0aW9uIDE3LjMgaW4gZGF0YWJvb2sKKwkgKiBsaXN0cyBMQ0QgYXQgNzkgYW5kIDgy IGZvciBNSVBJIHVuZGVyIE1TUyBDUFUgLQorCSAqIGZpcm13YXJlIGhhcyByZWRpcmVjdGVkIDc5 IHRvIEE1MyBJUlEgMzMKKwkgKi8KKworCS8qIEFsbG9jYXRlIExDRCBpbnRlcnJ1cHQgcmVzb3Vy Y2VzICovCisJaXJxX2xjZCA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsICJpcnFfbGNk Iik7CisJaWYgKGlycV9sY2QgPCAwKSB7CisJCWRybV9lcnIoJmttYi0+ZHJtLCAiaXJxX2xjZCBu b3QgZm91bmQiKTsKKwkJZ290byBzZXR1cF9mYWlsOworCX0KKworCS8qIEdldCB0aGUgb3B0aW9u YWwgZnJhbWVidWZmZXIgbWVtb3J5IHJlc291cmNlICovCisJcmV0ID0gb2ZfcmVzZXJ2ZWRfbWVt X2RldmljZV9pbml0KGRybS0+ZGV2KTsKKwlpZiAocmV0ICYmIHJldCAhPSAtRU5PREVWKQorCQly ZXR1cm4gcmV0OworCisJc3Bpbl9sb2NrX2luaXQoJmttYi0+aXJxX2xvY2spOworCisJa21iLT5p cnFfbGNkID0gaXJxX2xjZDsKKworCXJldHVybiAwOworCisgc2V0dXBfZmFpbDoKKwlvZl9yZXNl cnZlZF9tZW1fZGV2aWNlX3JlbGVhc2UoZHJtLT5kZXYpOworCisJcmV0dXJuIHJldDsKK30KKwor c3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9jb25maWdfZnVuY3Mga21iX21vZGVfY29uZmln X2Z1bmNzID0geworCS5mYl9jcmVhdGUgPSBkcm1fZ2VtX2ZiX2NyZWF0ZSwKKwkuYXRvbWljX2No ZWNrID0gZHJtX2F0b21pY19oZWxwZXJfY2hlY2ssCisJLmF0b21pY19jb21taXQgPSBkcm1fYXRv bWljX2hlbHBlcl9jb21taXQsCit9OworCitzdGF0aWMgaW50IGttYl9zZXR1cF9tb2RlX2NvbmZp ZyhzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQoreworCWludCByZXQ7CisJc3RydWN0IGttYl9kcm1f cHJpdmF0ZSAqa21iID0gdG9fa21iKGRybSk7CisKKwlyZXQgPSBkcm1tX21vZGVfY29uZmlnX2lu aXQoZHJtKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCWRybS0+bW9kZV9jb25maWcubWlu X3dpZHRoID0gS01CX01JTl9XSURUSDsKKwlkcm0tPm1vZGVfY29uZmlnLm1pbl9oZWlnaHQgPSBL TUJfTUlOX0hFSUdIVDsKKwlkcm0tPm1vZGVfY29uZmlnLm1heF93aWR0aCA9IEtNQl9NQVhfV0lE VEg7CisJZHJtLT5tb2RlX2NvbmZpZy5tYXhfaGVpZ2h0ID0gS01CX01BWF9IRUlHSFQ7CisJZHJt LT5tb2RlX2NvbmZpZy5mdW5jcyA9ICZrbWJfbW9kZV9jb25maWdfZnVuY3M7CisKKwlyZXQgPSBr bWJfc2V0dXBfY3J0Yyhkcm0pOworCWlmIChyZXQgPCAwKSB7CisJCWRybV9lcnIoZHJtLCAiZmFp bGVkIHRvIGNyZWF0ZSBjcnRjXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBJbml0aWFs aXplIE1JUEkgRFNJICovCisJcmV0ID0ga21iX2RzaV9pbml0KGRybSwgYWR2X2JyaWRnZSk7CisJ aWYgKHJldCkgeworCQlkcm1fZXJyKGRybSwgImZhaWxlZCB0byBpbml0aWFsaXplIERTSVxuIik7 CisJCXJldHVybiByZXQ7CisJfQorCisJLyogU2V0IHRoZSBDUlRDJ3MgcG9ydCBzbyB0aGF0IHRo ZSBlbmNvZGVyIGNvbXBvbmVudCBjYW4gZmluZCBpdCAqLworCWttYi0+Y3J0Yy5wb3J0ID0gb2Zf Z3JhcGhfZ2V0X3BvcnRfYnlfaWQoZHJtLT5kZXYtPm9mX25vZGUsIDApOworCXJldCA9IGRybV92 YmxhbmtfaW5pdChkcm0sIGRybS0+bW9kZV9jb25maWcubnVtX2NydGMpOworCWlmIChyZXQgPCAw KSB7CisJCWRybV9lcnIoZHJtLCAiZmFpbGVkIHRvIGluaXRpYWxpemUgdmJsYW5rXG4iKTsKKwkJ cG1fcnVudGltZV9kaXNhYmxlKGRybS0+ZGV2KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkcm1f bW9kZV9jb25maWdfcmVzZXQoZHJtKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlycXJldHVy bl90IGhhbmRsZV9sY2RfaXJxKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQg bG9uZyBzdGF0dXMsIHZhbCwgdmFsMTsKKwlpbnQgcGxhbmVfaWQsIGRtYTBfc3RhdGUsIGRtYTFf c3RhdGU7CisJc3RydWN0IGttYl9kcm1fcHJpdmF0ZSAqa21iID0gdG9fa21iKGRldik7CisKKwlz dGF0dXMgPSBrbWJfcmVhZF9sY2Qoa21iLCBMQ0RfSU5UX1NUQVRVUyk7CisKKwlpZiAoc3RhdHVz ICYgTENEX0lOVF9FT0YpIHsKKwkJa21iX3dyaXRlX2xjZChrbWIsIExDRF9JTlRfQ0xFQVIsIExD RF9JTlRfRU9GKTsKKworCQkvKiBXaGVuIGRpc2FibGluZy9lbmFibGluZyBMQ0QgbGF5ZXJzLCB0 aGUgY2hhbmdlIHRha2VzIGVmZmVjdAorCQkgKiBpbW1lZGlhdGVseSBhbmQgZG9lcyBub3Qgd2Fp dCBmb3IgRU9GIChlbmQgb2YgZnJhbWUpLgorCQkgKiBXaGVuIGttYl9wbGFuZV9hdG9taWNfZGlz YWJsZSBpcyBjYWxsZWQsIG1hcmsgdGhlIHBsYW5lIGFzCisJCSAqIGRpc2FibGVkIGJ1dCBhY3R1 YWxseSBkaXNhYmxlIHRoZSBwbGFuZSB3aGVuIEVPRiBpcnEgaXMKKwkJICogYmVpbmcgaGFuZGxl ZC4KKwkJICovCisJCWZvciAocGxhbmVfaWQgPSBMQVlFUl8wOworCQkJCXBsYW5lX2lkIDwgS01C X01BWF9QTEFORVM7IHBsYW5lX2lkKyspIHsKKwkJCWlmIChrbWItPnBsYW5lX3N0YXR1c1twbGFu ZV9pZF0uZGlzYWJsZSkgeworCQkJCWttYl9jbHJfYml0bWFza19sY2Qoa21iLAorCQkJCQkJICAg IExDRF9MQVlFUm5fRE1BX0NGRworCQkJCQkJICAgIChwbGFuZV9pZCksCisJCQkJCQkgICAgTENE X0RNQV9MQVlFUl9FTkFCTEUpOworCisJCQkJa21iX2Nscl9iaXRtYXNrX2xjZChrbWIsIExDRF9D T05UUk9MLAorCQkJCQkJICAgIGttYi0+cGxhbmVfc3RhdHVzW3BsYW5lX2lkXS5jdHJsKTsKKwor CQkJCWttYi0+cGxhbmVfc3RhdHVzW3BsYW5lX2lkXS5kaXNhYmxlID0gZmFsc2U7CisJCQl9CisJ CX0KKwkJaWYgKGttYl91bmRlcl9mbG93KSB7CisJCQkvKiBETUEgUmVjb3ZlcnkgYWZ0ZXIgdW5k ZXJmbG93ICovCisJCQlkbWEwX3N0YXRlID0gKGxheWVyX25vID09IDApID8KKwkJCSAgICBMQ0Rf VklERU8wX0RNQTBfU1RBVEUgOiBMQ0RfVklERU8xX0RNQTBfU1RBVEU7CisJCQlkbWExX3N0YXRl ID0gKGxheWVyX25vID09IDApID8KKwkJCSAgICBMQ0RfVklERU8wX0RNQTFfU1RBVEUgOiBMQ0Rf VklERU8xX0RNQTFfU1RBVEU7CisKKwkJCWRvIHsKKwkJCQlrbWJfd3JpdGVfbGNkKGttYiwgTENE X0ZJRk9fRkxVU0gsIDEpOworCQkJCXZhbCA9IGttYl9yZWFkX2xjZChrbWIsIGRtYTBfc3RhdGUp CisJCQkJICAgICYgTENEX0RNQV9TVEFURV9BQ1RJVkU7CisJCQkJdmFsMSA9IGttYl9yZWFkX2xj ZChrbWIsIGRtYTFfc3RhdGUpCisJCQkJICAgICYgTENEX0RNQV9TVEFURV9BQ1RJVkU7CisJCQl9 IHdoaWxlICgodmFsIHx8IHZhbDEpKTsKKwkJCS8qIGRpc2FibGUgZG1hICovCisJCQlrbWJfY2xy X2JpdG1hc2tfbGNkKGttYiwgTENEX0xBWUVSbl9ETUFfQ0ZHKGxheWVyX25vKSwKKwkJCQkJICAg IExDRF9ETUFfTEFZRVJfRU5BQkxFKTsKKwkJCWttYl93cml0ZV9sY2Qoa21iLCBMQ0RfRklGT19G TFVTSCwgMSk7CisJCQlrbWJfZmx1c2hfZG9uZSA9IDE7CisJCQlrbWJfdW5kZXJfZmxvdyA9IDA7 CisJCX0KKwl9CisKKwlpZiAoc3RhdHVzICYgTENEX0lOVF9MSU5FX0NNUCkgeworCQkvKiBjbGVh ciBsaW5lIGNvbXBhcmUgaW50ZXJydXB0ICovCisJCWttYl93cml0ZV9sY2Qoa21iLCBMQ0RfSU5U X0NMRUFSLCBMQ0RfSU5UX0xJTkVfQ01QKTsKKwl9CisKKwlpZiAoc3RhdHVzICYgTENEX0lOVF9W RVJUX0NPTVApIHsKKwkJLyogUmVhZCBWU1RBVFVTICovCisJCXZhbCA9IGttYl9yZWFkX2xjZChr bWIsIExDRF9WU1RBVFVTKTsKKwkJdmFsID0gKHZhbCAmIExDRF9WU1RBVFVTX1ZFUlRJQ0FMX1NU QVRVU19NQVNLKTsKKwkJc3dpdGNoICh2YWwpIHsKKwkJY2FzZSBMQ0RfVlNUQVRVU19DT01QQVJF X1ZTWU5DOgorCQkJLyogQ2xlYXIgdmVydGljYWwgY29tcGFyZSBpbnRlcnJ1cHQgKi8KKwkJCWtt Yl93cml0ZV9sY2Qoa21iLCBMQ0RfSU5UX0NMRUFSLCBMQ0RfSU5UX1ZFUlRfQ09NUCk7CisJCQlp ZiAoa21iX2ZsdXNoX2RvbmUpIHsKKwkJCQlrbWJfc2V0X2JpdG1hc2tfbGNkKGttYiwKKwkJCQkJ CSAgICBMQ0RfTEFZRVJuX0RNQV9DRkcKKwkJCQkJCSAgICAobGF5ZXJfbm8pLAorCQkJCQkJICAg IExDRF9ETUFfTEFZRVJfRU5BQkxFKTsKKwkJCQlrbWJfZmx1c2hfZG9uZSA9IDA7CisJCQl9CisJ CQlkcm1faGFuZGxlX3ZibGFuayhkZXYsIDApOworCQkJYnJlYWs7CisJCWNhc2UgTENEX1ZTVEFU VVNfQ09NUEFSRV9CQUNLUE9SQ0g6CisJCWNhc2UgTENEX1ZTVEFUVVNfQ09NUEFSRV9BQ1RJVkU6 CisJCWNhc2UgTENEX1ZTVEFUVVNfQ09NUEFSRV9GUk9OVF9QT1JDSDoKKwkJCWttYl93cml0ZV9s Y2Qoa21iLCBMQ0RfSU5UX0NMRUFSLCBMQ0RfSU5UX1ZFUlRfQ09NUCk7CisJCQlicmVhazsKKwkJ fQorCX0KKwlpZiAoc3RhdHVzICYgTENEX0lOVF9ETUFfRVJSKSB7CisJCXZhbCA9CisJCSAgICAo c3RhdHVzICYgTENEX0lOVF9ETUFfRVJSICYKKwkJICAgICBrbWJfcmVhZF9sY2Qoa21iLCBMQ0Rf SU5UX0VOQUJMRSkpOworCQkvKiBMQVlFUjAgLSBWTDAgKi8KKwkJaWYgKHZhbCAmIChMQVlFUjBf RE1BX0ZJRk9fVU5ERVJGTE9XIHwKKwkJCSAgIExBWUVSMF9ETUFfQ0JfRklGT19VTkRFUkZMT1cg fAorCQkJICAgTEFZRVIwX0RNQV9DUl9GSUZPX1VOREVSRkxPVykpIHsKKwkJCWttYl91bmRlcl9m bG93Kys7CisJCQlkcm1faW5mbygma21iLT5kcm0sCisJCQkJICIhTEFZRVIwOlZMMCBETUEgVU5E RVJGTE9XIHZhbCA9IDB4JWx4LHVuZGVyX2Zsb3c9JWQiLAorCQkJICAgICB2YWwsIGttYl91bmRl cl9mbG93KTsKKwkJCS8qIGRpc2FibGUgdW5kZXJmbG93IGludGVycnVwdCAqLworCQkJa21iX2Ns cl9iaXRtYXNrX2xjZChrbWIsIExDRF9JTlRfRU5BQkxFLAorCQkJCQkgICAgTEFZRVIwX0RNQV9G SUZPX1VOREVSRkxPVyB8CisJCQkJCSAgICBMQVlFUjBfRE1BX0NCX0ZJRk9fVU5ERVJGTE9XIHwK KwkJCQkJICAgIExBWUVSMF9ETUFfQ1JfRklGT19VTkRFUkZMT1cpOworCQkJa21iX3NldF9iaXRt YXNrX2xjZChrbWIsIExDRF9JTlRfQ0xFQVIsCisJCQkJCSAgICBMQVlFUjBfRE1BX0NCX0ZJRk9f VU5ERVJGTE9XIHwKKwkJCQkJICAgIExBWUVSMF9ETUFfRklGT19VTkRFUkZMT1cgfAorCQkJCQkg ICAgTEFZRVIwX0RNQV9DUl9GSUZPX1VOREVSRkxPVyk7CisJCQkvKiBkaXNhYmxlIGF1dG8gcmVz dGFydCBtb2RlICovCisJCQlrbWJfY2xyX2JpdG1hc2tfbGNkKGttYiwgTENEX0xBWUVSbl9ETUFf Q0ZHKDApLAorCQkJCQkgICAgTENEX0RNQV9MQVlFUl9DT05UX1BJTkdfUE9OR19VUERBVEUpOwor CQkJbGF5ZXJfbm8gPSAwOworCQl9CisKKwkJaWYgKHZhbCAmIExBWUVSMF9ETUFfRklGT19PVkVS RkxPVykKKwkJCWRybV9kYmcoJmttYi0+ZHJtLAorCQkJCSJMQVlFUjA6VkwwIERNQSBPVkVSRkxP VyB2YWwgPSAweCVseCIsIHZhbCk7CisJCWlmICh2YWwgJiBMQVlFUjBfRE1BX0NCX0ZJRk9fT1ZF UkZMT1cpCisJCQlkcm1fZGJnKCZrbWItPmRybSwKKwkJCQkiTEFZRVIwOlZMMCBETUEgQ0IgT1ZF UkZMT1cgdmFsID0gMHglbHgiLCB2YWwpOworCQlpZiAodmFsICYgTEFZRVIwX0RNQV9DUl9GSUZP X09WRVJGTE9XKQorCQkJZHJtX2RiZygma21iLT5kcm0sCisJCQkJIkxBWUVSMDpWTDAgRE1BIENS IE9WRVJGTE9XIHZhbCA9IDB4JWx4IiwgdmFsKTsKKworCQkvKiBMQVlFUjEgLSBWTDEgKi8KKwkJ aWYgKHZhbCAmIChMQVlFUjFfRE1BX0ZJRk9fVU5ERVJGTE9XIHwKKwkJCSAgIExBWUVSMV9ETUFf Q0JfRklGT19VTkRFUkZMT1cgfAorCQkJICAgTEFZRVIxX0RNQV9DUl9GSUZPX1VOREVSRkxPVykp IHsKKwkJCWttYl91bmRlcl9mbG93Kys7CisJCQlkcm1faW5mbygma21iLT5kcm0sCisJCQkJICIh TEFZRVIxOlZMMSBETUEgVU5ERVJGTE9XIHZhbCA9IDB4JWx4LCB1bmRlcl9mbG93PSVkIiwKKwkJ CSAgICAgdmFsLCBrbWJfdW5kZXJfZmxvdyk7CisJCQkvKiBkaXNhYmxlIHVuZGVyZmxvdyBpbnRl cnJ1cHQgKi8KKwkJCWttYl9jbHJfYml0bWFza19sY2Qoa21iLCBMQ0RfSU5UX0VOQUJMRSwKKwkJ CQkJICAgIExBWUVSMV9ETUFfRklGT19VTkRFUkZMT1cgfAorCQkJCQkgICAgTEFZRVIxX0RNQV9D Ql9GSUZPX1VOREVSRkxPVyB8CisJCQkJCSAgICBMQVlFUjFfRE1BX0NSX0ZJRk9fVU5ERVJGTE9X KTsKKwkJCWttYl9zZXRfYml0bWFza19sY2Qoa21iLCBMQ0RfSU5UX0NMRUFSLAorCQkJCQkgICAg TEFZRVIxX0RNQV9DQl9GSUZPX1VOREVSRkxPVyB8CisJCQkJCSAgICBMQVlFUjFfRE1BX0ZJRk9f VU5ERVJGTE9XIHwKKwkJCQkJICAgIExBWUVSMV9ETUFfQ1JfRklGT19VTkRFUkZMT1cpOworCQkJ LyogZGlzYWJsZSBhdXRvIHJlc3RhcnQgbW9kZSAqLworCQkJa21iX2Nscl9iaXRtYXNrX2xjZChr bWIsIExDRF9MQVlFUm5fRE1BX0NGRygxKSwKKwkJCQkJICAgIExDRF9ETUFfTEFZRVJfQ09OVF9Q SU5HX1BPTkdfVVBEQVRFKTsKKwkJCWxheWVyX25vID0gMTsKKwkJfQorCisJCS8qIExBWUVSMSAt IFZMMSAqLworCQlpZiAodmFsICYgTEFZRVIxX0RNQV9GSUZPX09WRVJGTE9XKQorCQkJZHJtX2Ri Zygma21iLT5kcm0sCisJCQkJIkxBWUVSMTpWTDEgRE1BIE9WRVJGTE9XIHZhbCA9IDB4JWx4Iiwg dmFsKTsKKwkJaWYgKHZhbCAmIExBWUVSMV9ETUFfQ0JfRklGT19PVkVSRkxPVykKKwkJCWRybV9k YmcoJmttYi0+ZHJtLAorCQkJCSJMQVlFUjE6VkwxIERNQSBDQiBPVkVSRkxPVyB2YWwgPSAweCVs eCIsIHZhbCk7CisJCWlmICh2YWwgJiBMQVlFUjFfRE1BX0NSX0ZJRk9fT1ZFUkZMT1cpCisJCQlk cm1fZGJnKCZrbWItPmRybSwKKwkJCQkiTEFZRVIxOlZMMSBETUEgQ1IgT1ZFUkZMT1cgdmFsID0g MHglbHgiLCB2YWwpOworCisJCS8qIExBWUVSMiAtIEdMMCAqLworCQlpZiAodmFsICYgTEFZRVIy X0RNQV9GSUZPX1VOREVSRkxPVykKKwkJCWRybV9kYmcoJmttYi0+ZHJtLAorCQkJCSJMQVlFUjI6 R0wwIERNQSBVTkRFUkZMT1cgdmFsID0gMHglbHgiLCB2YWwpOworCQlpZiAodmFsICYgTEFZRVIy X0RNQV9GSUZPX09WRVJGTE9XKQorCQkJZHJtX2RiZygma21iLT5kcm0sCisJCQkJIkxBWUVSMjpH TDAgRE1BIE9WRVJGTE9XIHZhbCA9IDB4JWx4IiwgdmFsKTsKKworCQkvKiBMQVlFUjMgLSBHTDEg Ki8KKwkJaWYgKHZhbCAmIExBWUVSM19ETUFfRklGT19VTkRFUkZMT1cpCisJCQlkcm1fZGJnKCZr bWItPmRybSwKKwkJCQkiTEFZRVIzOkdMMSBETUEgVU5ERVJGTE9XIHZhbCA9IDB4JWx4IiwgdmFs KTsKKwkJaWYgKHZhbCAmIExBWUVSM19ETUFfRklGT19VTkRFUkZMT1cpCisJCQlkcm1fZGJnKCZr bWItPmRybSwKKwkJCQkiTEFZRVIzOkdMMSBETUEgT1ZFUkZMT1cgdmFsID0gMHglbHgiLCB2YWwp OworCX0KKworCWlmIChzdGF0dXMgJiBMQ0RfSU5UX0xBWUVSKSB7CisJCS8qIENsZWFyIGxheWVy IGludGVycnVwdHMgKi8KKwkJa21iX3dyaXRlX2xjZChrbWIsIExDRF9JTlRfQ0xFQVIsIExDRF9J TlRfTEFZRVIpOworCX0KKworCS8qIENsZWFyIGFsbCBpbnRlcnJ1cHRzICovCisJa21iX3NldF9i aXRtYXNrX2xjZChrbWIsIExDRF9JTlRfQ0xFQVIsIDEpOworCXJldHVybiBJUlFfSEFORExFRDsK K30KKworLyogSVJRIGhhbmRsZXIgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBrbWJfaXNyKGludCBp cnEsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gKHN0cnVjdCBkcm1f ZGV2aWNlICopYXJnOworCisJaGFuZGxlX2xjZF9pcnEoZGV2KTsKKwlyZXR1cm4gSVJRX0hBTkRM RUQ7Cit9CisKK3N0YXRpYyB2b2lkIGttYl9pcnFfcmVzZXQoc3RydWN0IGRybV9kZXZpY2UgKmRy bSkKK3sKKwlrbWJfd3JpdGVfbGNkKHRvX2ttYihkcm0pLCBMQ0RfSU5UX0NMRUFSLCAweEZGRkYp OworCWttYl93cml0ZV9sY2QodG9fa21iKGRybSksIExDRF9JTlRfRU5BQkxFLCAwKTsKK30KKwor REVGSU5FX0RSTV9HRU1fQ01BX0ZPUFMoZm9wcyk7CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2RyaXZl ciBrbWJfZHJpdmVyID0geworCS5kcml2ZXJfZmVhdHVyZXMgPSBEUklWRVJfR0VNIHwKKwkgICAg RFJJVkVSX01PREVTRVQgfCBEUklWRVJfQVRPTUlDLAorCS5pcnFfaGFuZGxlciA9IGttYl9pc3Is CisJLmlycV9wcmVpbnN0YWxsID0ga21iX2lycV9yZXNldCwKKwkuaXJxX3VuaW5zdGFsbCA9IGtt Yl9pcnFfcmVzZXQsCisJLyogR0VNIE9wZXJhdGlvbnMgKi8KKwkuZm9wcyA9ICZmb3BzLAorCURS TV9HRU1fQ01BX0RSSVZFUl9PUFNfVk1BUCwKKwkubmFtZSA9ICJrbWItZHJtIiwKKwkuZGVzYyA9 ICJLRUVNQkFZIERJU1BMQVkgRFJJVkVSICIsCisJLmRhdGUgPSAiMjAxOTAxMjIiLAorCS5tYWpv ciA9IDEsCisJLm1pbm9yID0gMCwKK307CisKK3N0YXRpYyBpbnQga21iX3JlbW92ZShzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5k ZXY7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0 cnVjdCBrbWJfZHJtX3ByaXZhdGUgKmttYiA9IHRvX2ttYihkcm0pOworCisJZHJtX2Rldl91bnJl Z2lzdGVyKGRybSk7CisJZHJtX2ttc19oZWxwZXJfcG9sbF9maW5pKGRybSk7CisJb2Zfbm9kZV9w dXQoa21iLT5jcnRjLnBvcnQpOworCWttYi0+Y3J0Yy5wb3J0ID0gTlVMTDsKKwlwbV9ydW50aW1l X2dldF9zeW5jKGRybS0+ZGV2KTsKKwlkcm1faXJxX3VuaW5zdGFsbChkcm0pOworCXBtX3J1bnRp bWVfcHV0X3N5bmMoZHJtLT5kZXYpOworCXBtX3J1bnRpbWVfZGlzYWJsZShkcm0tPmRldik7CisK KwlvZl9yZXNlcnZlZF9tZW1fZGV2aWNlX3JlbGVhc2UoZHJtLT5kZXYpOworCisJLyogUmVsZWFz ZSBjbGtzICovCisJa21iX2Rpc3BsYXlfY2xrX2Rpc2FibGUoKTsKKwljbGtfcHV0KGttYl9jbGsu Y2xrX2xjZCk7CisJY2xrX3B1dChrbWJfY2xrLmNsa19taXBpKTsKKworCWRldl9zZXRfZHJ2ZGF0 YShkZXYsIE5VTEwpOworCisJLyogVW5yZWdpc3RlciBEU0kgaG9zdCAqLworCWttYl9kc2lfaG9z dF91bnJlZ2lzdGVyKCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQga21iX3Byb2JlKHN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gZ2V0 X2RldmljZSgmcGRldi0+ZGV2KTsKKwlzdHJ1Y3Qga21iX2RybV9wcml2YXRlICprbWI7CisJaW50 IHJldCA9IDA7CisKKwkvKiBUaGUgYnJpZGdlIChBRFYgNzUzNSkgd2lsbCByZXR1cm4gLUVQUk9C RV9ERUZFUiB1bnRpbCBpdAorCSAqIGhhcyBhIG1pcGlfZHNpX2hvc3QgdG8gcmVnaXN0ZXIgaXRz IGRldmljZSB0by4gU28sIHdlCisJICogZmlyc3QgcmVnaXN0ZXIgdGhlIERTSSBob3N0IGR1cmlu ZyBwcm9iZSB0aW1lLCBhbmQgdGhlbiByZXR1cm4KKwkgKiAtRVBST0JFX0RFRkVSIHVudGlsIHRo ZSBicmlkZ2UgaXMgbG9hZGVkLiBQcm9iZSB3aWxsIGJlIGNhbGxlZCBhZ2FpbgorCSAqICBhbmQg dGhlbiB0aGUgcmVzdCBvZiB0aGUgZHJpdmVyIGluaXRpYWxpemF0aW9uIGNhbiBwcm9jZWVkCisJ ICogIGFmdGVyd2FyZHMgYW5kIHRoZSBicmlkZ2UgY2FuIGJlIHN1Y2Nlc3NmdWxseSBhdHRhY2hl ZC4KKwkgKi8KKwlhZHZfYnJpZGdlID0ga21iX2RzaV9ob3N0X2JyaWRnZV9pbml0KGRldik7CisK KwlpZiAoYWR2X2JyaWRnZSA9PSBFUlJfUFRSKC1FUFJPQkVfREVGRVIpKSB7CisJCXJldHVybiAt RVBST0JFX0RFRkVSOworCX0gZWxzZSBpZiAoSVNfRVJSKGFkdl9icmlkZ2UpKSB7CisJCURSTV9F UlJPUigicHJvYmUgZmFpbGVkIHRvIGluaXRpYWxpemUgRFNJIGhvc3QgYnJpZGdlXG4iKTsKKwkJ cmV0dXJuIFBUUl9FUlIoYWR2X2JyaWRnZSk7CisJfQorCisJLyogQ3JlYXRlIERSTSBkZXZpY2Ug Ki8KKwlrbWIgPSBkZXZtX2RybV9kZXZfYWxsb2MoZGV2LCAma21iX2RyaXZlciwKKwkJCQkgc3Ry dWN0IGttYl9kcm1fcHJpdmF0ZSwgZHJtKTsKKwlpZiAoSVNfRVJSKGttYikpCisJCXJldHVybiBQ VFJfRVJSKGttYik7CisKKwlkZXZfc2V0X2RydmRhdGEoZGV2LCAma21iLT5kcm0pOworCisJcmV0 ID0ga21iX2h3X2luaXQoJmttYi0+ZHJtLCAwKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9mcmVl MTsKKworCXJldCA9IGttYl9zZXR1cF9tb2RlX2NvbmZpZygma21iLT5kcm0pOworCWlmIChyZXQp CisJCWdvdG8gZXJyX2ZyZWU7CisKKwlyZXQgPSBkcm1faXJxX2luc3RhbGwoJmttYi0+ZHJtLCBr bWItPmlycV9sY2QpOworCWlmIChyZXQgPCAwKSB7CisJCWRybV9lcnIoJmttYi0+ZHJtLCAiZmFp bGVkIHRvIGluc3RhbGwgSVJRIGhhbmRsZXJcbiIpOworCQlnb3RvIGVycl9pcnE7CisJfQorCisJ ZHJtX2ttc19oZWxwZXJfcG9sbF9pbml0KCZrbWItPmRybSk7CisKKwkvKiBSZWdpc3RlciBncmFw aGljcyBkZXZpY2Ugd2l0aCB0aGUga2VybmVsICovCisJcmV0ID0gZHJtX2Rldl9yZWdpc3Rlcigm a21iLT5kcm0sIDApOworCWlmIChyZXQpCisJCWdvdG8gZXJyX3JlZ2lzdGVyOworCisJcmV0dXJu IDA7CisKKyBlcnJfcmVnaXN0ZXI6CisJZHJtX2ttc19oZWxwZXJfcG9sbF9maW5pKCZrbWItPmRy bSk7CisgZXJyX2lycToKKwlwbV9ydW50aW1lX2Rpc2FibGUoa21iLT5kcm0uZGV2KTsKKyBlcnJf ZnJlZToKKwlkcm1fY3J0Y19jbGVhbnVwKCZrbWItPmNydGMpOworCWRybV9tb2RlX2NvbmZpZ19j bGVhbnVwKCZrbWItPmRybSk7CisgZXJyX2ZyZWUxOgorCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5V TEwpOworCWttYl9kc2lfaG9zdF91bnJlZ2lzdGVyKCk7CisKKwlyZXR1cm4gcmV0OworfQorCitz dGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBrbWJfb2ZfbWF0Y2hbXSA9IHsKKwl7LmNv bXBhdGlibGUgPSAiaW50ZWwsa21iX2Rpc3BsYXkifSwKKwl7fSwKK307CisKK01PRFVMRV9ERVZJ Q0VfVEFCTEUob2YsIGttYl9vZl9tYXRjaCk7CisKK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQg a21iX3BtX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1fZGV2aWNl ICpkcm0gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qga21iX2RybV9wcml2YXRlICpr bWIgPSBkcm0gPyB0b19rbWIoZHJtKSA6IE5VTEw7CisKKwlkcm1fa21zX2hlbHBlcl9wb2xsX2Rp c2FibGUoZHJtKTsKKworCWttYi0+c3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9zdXNwZW5kKGRy bSk7CisJaWYgKElTX0VSUihrbWItPnN0YXRlKSkgeworCQlkcm1fa21zX2hlbHBlcl9wb2xsX2Vu YWJsZShkcm0pOworCQlyZXR1cm4gUFRSX0VSUihrbWItPnN0YXRlKTsKKwl9CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGludCBfX21heWJlX3VudXNlZCBrbWJfcG1fcmVzdW1lKHN0cnVjdCBk ZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gZGV2X2dldF9kcnZkYXRh KGRldik7CisJc3RydWN0IGttYl9kcm1fcHJpdmF0ZSAqa21iID0gZHJtID8gdG9fa21iKGRybSkg OiBOVUxMOworCisJaWYgKCFrbWIpCisJCXJldHVybiAwOworCisJZHJtX2F0b21pY19oZWxwZXJf cmVzdW1lKGRybSwga21iLT5zdGF0ZSk7CisJZHJtX2ttc19oZWxwZXJfcG9sbF9lbmFibGUoZHJt KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgU0lNUExFX0RFVl9QTV9PUFMoa21iX3BtX29w cywga21iX3BtX3N1c3BlbmQsIGttYl9wbV9yZXN1bWUpOworCitzdGF0aWMgc3RydWN0IHBsYXRm b3JtX2RyaXZlciBrbWJfcGxhdGZvcm1fZHJpdmVyID0geworCS5wcm9iZSA9IGttYl9wcm9iZSwK KwkucmVtb3ZlID0ga21iX3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJrbWItZHJt IiwKKwkJLnBtID0gJmttYl9wbV9vcHMsCisJCS5vZl9tYXRjaF90YWJsZSA9IGttYl9vZl9tYXRj aCwKKwl9LAorfTsKKworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihrbWJfcGxhdGZvcm1fZHJpdmVy KTsKKworTU9EVUxFX0FVVEhPUigiSW50ZWwgQ29ycG9yYXRpb24iKTsKK01PRFVMRV9ERVNDUklQ VElPTigiS2VlbWJheSBEaXNwbGF5IGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIp OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2ttYi9rbWJfZHJ2LmggYi9kcml2ZXJzL2dw dS9kcm0va21iL2ttYl9kcnYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4z NTJmMmQyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2ttYi9rbWJfZHJ2LmgK QEAgLTAsMCArMSwxNzAgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9u bHkKKyAqCisgKiBDb3B5cmlnaHQgwqkgMjAxOC0yMDIwIEludGVsIENvcnBvcmF0aW9uCisgKi8K KworI2lmbmRlZiBfX0tNQl9EUlZfSF9fCisjZGVmaW5lIF9fS01CX0RSVl9IX18KKworI2luY2x1 ZGUgImttYl9wbGFuZS5oIgorI2luY2x1ZGUgImttYl9yZWdzLmgiCisKKyNkZWZpbmUgS01CX01B WF9XSURUSAkJCTE5MjAgLyptYXggd2lkdGggaW4gcGl4ZWxzICovCisjZGVmaW5lIEtNQl9NQVhf SEVJR0hUCQkJMTA4MCAvKm1heCBoZWlnaHQgaW4gcGl4ZWxzICovCisjZGVmaW5lIEtNQl9NSU5f V0lEVEggICAgICAgICAgICAgICAgICAgMTkyMCAvKm1heCB3aWR0aCBpbiBwaXhlbHMgKi8KKyNk ZWZpbmUgS01CX01JTl9IRUlHSFQgICAgICAgICAgICAgICAgICAxMDgwIC8qbWF4IGhlaWdodCBp biBwaXhlbHMgKi8KKyNkZWZpbmUgS01CX0xDRF9ERUZBVUxUX0NMSwkJMjAwMDAwMDAwCisjZGVm aW5lIEtNQl9NSVBJX0RFRkFVTFRfQ0xLCQkyNDAwMDAwMAorI2RlZmluZSBLTUJfTUlQSV9ERUZB VUxUX0NGR19DTEsJMjQwMDAwMDAKKyNkZWZpbmUgS01CX1NZU19DTEtfTUhaCQkJNTAwCisKKyNk ZWZpbmUgSUNBTV9NTUlPCQkweDNiMTAwMDAwCisjZGVmaW5lIElDQU1fTENEX09GRlNFVAkJMHgx MDgwCisjZGVmaW5lIElDQU1fTU1JT19TSVpFCQkweDIwMDAKKworc3RydWN0IGttYl9kcm1fcHJp dmF0ZSB7CisJc3RydWN0IGRybV9kZXZpY2UJCWRybTsKKwl2b2lkIF9faW9tZW0JCQkqbGNkX21t aW87CisJdm9pZCBfX2lvbWVtCQkJKm1pcGlfbW1pbzsKKwl2b2lkIF9faW9tZW0JCQkqbXNzY2Ft X21taW87CisJc3RydWN0IGNsawkJCSpjbGs7CisJc3RydWN0IGRybV9jcnRjCQkJY3J0YzsKKwlz dHJ1Y3Qga21iX3BsYW5lCQkqcGxhbmU7CisJc3RydWN0IGRybV9hdG9taWNfc3RhdGUJCSpzdGF0 ZTsKKwlzcGlubG9ja190CQkJaXJxX2xvY2s7CisJaW50CQkJCWlycV9sY2Q7CisJaW50CQkJCWly cV9taXBpOworCWludAkJCQlzeXNfY2xrX21oejsKKwlkbWFfYWRkcl90CQkJZmJfYWRkcjsKKwlz dHJ1Y3QgbGF5ZXJfc3RhdHVzCQlwbGFuZV9zdGF0dXNbS01CX01BWF9QTEFORVNdOworfTsKKwor c3RydWN0IGttYl9jbG9jayB7CisJc3RydWN0IGNsayAqY2xrX2xjZDsKKwlzdHJ1Y3QgY2xrICpj bGtfbWlwaTsKKwlzdHJ1Y3QgY2xrICpjbGtfbWlwaV9lY2ZnOworCXN0cnVjdCBjbGsgKmNsa19t aXBpX2NmZzsKKwlzdHJ1Y3QgY2xrICpjbGtfcGxsMDsKK307CisKK3N0YXRpYyBpbmxpbmUgc3Ry dWN0IGttYl9kcm1fcHJpdmF0ZSAqdG9fa21iKGNvbnN0IHN0cnVjdCBkcm1fZGV2aWNlICpkZXYp Cit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBrbWJfZHJtX3ByaXZhdGUsIGRy bSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGttYl9kcm1fcHJpdmF0ZSAqY3J0Y190b19r bWJfcHJpdihjb25zdCBzdHJ1Y3QgZHJtX2NydGMgKngpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9v Zih4LCBzdHJ1Y3Qga21iX2RybV9wcml2YXRlLCBjcnRjKTsKK30KKworc3RydWN0IGJsdF9sYXll cl9jb25maWcgeworCXVuc2lnbmVkIGNoYXIgbGF5ZXJfZm9ybWF0OworfTsKKworc3RhdGljIGlu bGluZSB2b2lkIGttYl93cml0ZV9sY2Qoc3RydWN0IGttYl9kcm1fcHJpdmF0ZSAqZGV2X3AsCisJ CQkJIHVuc2lnbmVkIGludCByZWcsIHUzMiB2YWx1ZSkKK3sKKwl3cml0ZWwodmFsdWUsIChkZXZf cC0+bGNkX21taW8gKyByZWcpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGttYl93cml0ZV9t aXBpKHN0cnVjdCBrbWJfZHJtX3ByaXZhdGUgKmRldl9wLAorCQkJCSAgdW5zaWduZWQgaW50IHJl ZywgdTMyIHZhbHVlKQoreworCXdyaXRlbCh2YWx1ZSwgKGRldl9wLT5taXBpX21taW8gKyByZWcp KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGttYl93cml0ZV9tc3NjYW0oc3RydWN0IGttYl9k cm1fcHJpdmF0ZSAqZGV2X3AsCisJCQkJICAgIHVuc2lnbmVkIGludCByZWcsIHUzMiB2YWx1ZSkK K3sKKwl3cml0ZWwodmFsdWUsIChkZXZfcC0+bXNzY2FtX21taW8gKyByZWcpKTsKK30KKworc3Rh dGljIGlubGluZSB1MzIga21iX3JlYWRfbXNzY2FtKHN0cnVjdCBrbWJfZHJtX3ByaXZhdGUgKmRl dl9wLAorCQkJCSAgdW5zaWduZWQgaW50IHJlZykKK3sKKwlyZXR1cm4gcmVhZGwoZGV2X3AtPm1z c2NhbV9tbWlvICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGttYl9zZXRfYml0bWFz a19tc3NjYW0oc3RydWN0IGttYl9kcm1fcHJpdmF0ZSAqZGV2X3AsCisJCQkJCSAgdW5zaWduZWQg aW50IHJlZywgdTMyIG1hc2spCit7CisJdTMyIHJlZ192YWwgPSBrbWJfcmVhZF9tc3NjYW0oZGV2 X3AsIHJlZyk7CisKKwlrbWJfd3JpdGVfbXNzY2FtKGRldl9wLCByZWcsIChyZWdfdmFsIHwgbWFz aykpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBrbWJfcmVhZF9sY2Qoc3RydWN0IGttYl9kcm1f cHJpdmF0ZSAqZGV2X3AsIHVuc2lnbmVkIGludCByZWcpCit7CisJcmV0dXJuIHJlYWRsKGRldl9w LT5sY2RfbW1pbyArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBrbWJfc2V0X2JpdG1h c2tfbGNkKHN0cnVjdCBrbWJfZHJtX3ByaXZhdGUgKmRldl9wLAorCQkJCSAgICAgICB1bnNpZ25l ZCBpbnQgcmVnLCB1MzIgbWFzaykKK3sKKwl1MzIgcmVnX3ZhbCA9IGttYl9yZWFkX2xjZChkZXZf cCwgcmVnKTsKKworCWttYl93cml0ZV9sY2QoZGV2X3AsIHJlZywgKHJlZ192YWwgfCBtYXNrKSk7 Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBrbWJfY2xyX2JpdG1hc2tfbGNkKHN0cnVjdCBrbWJf ZHJtX3ByaXZhdGUgKmRldl9wLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgcmVnLCB1MzIgbWFz aykKK3sKKwl1MzIgcmVnX3ZhbCA9IGttYl9yZWFkX2xjZChkZXZfcCwgcmVnKTsKKworCWttYl93 cml0ZV9sY2QoZGV2X3AsIHJlZywgKHJlZ192YWwgJiAofm1hc2spKSk7Cit9CisKK3N0YXRpYyBp bmxpbmUgdTMyIGttYl9yZWFkX21pcGkoc3RydWN0IGttYl9kcm1fcHJpdmF0ZSAqZGV2X3AsIHVu c2lnbmVkIGludCByZWcpCit7CisJcmV0dXJuIHJlYWRsKGRldl9wLT5taXBpX21taW8gKyByZWcp OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQga21iX3dyaXRlX2JpdHNfbWlwaShzdHJ1Y3Qga21i X2RybV9wcml2YXRlICpkZXZfcCwKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IHJlZywgdTMyIG9m ZnNldCwKKwkJCQkgICAgICAgdTMyIG51bV9iaXRzLCB1MzIgdmFsdWUpCit7CisJdTMyIHJlZ192 YWwgPSBrbWJfcmVhZF9taXBpKGRldl9wLCByZWcpOworCXUzMiBtYXNrID0gKDEgPDwgbnVtX2Jp dHMpIC0gMTsKKworCXZhbHVlICY9IG1hc2s7CisJbWFzayA8PD0gb2Zmc2V0OworCXJlZ192YWwg Jj0gKH5tYXNrKTsKKwlyZWdfdmFsIHw9ICh2YWx1ZSA8PCBvZmZzZXQpOworCWttYl93cml0ZV9t aXBpKGRldl9wLCByZWcsIHJlZ192YWwpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQga21iX3Nl dF9iaXRfbWlwaShzdHJ1Y3Qga21iX2RybV9wcml2YXRlICpkZXZfcCwKKwkJCQkgICAgdW5zaWdu ZWQgaW50IHJlZywgdTMyIG9mZnNldCkKK3sKKwl1MzIgcmVnX3ZhbCA9IGttYl9yZWFkX21pcGko ZGV2X3AsIHJlZyk7CisKKwlrbWJfd3JpdGVfbWlwaShkZXZfcCwgcmVnLCByZWdfdmFsIHwgKDEg PDwgb2Zmc2V0KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBrbWJfY2xyX2JpdF9taXBpKHN0 cnVjdCBrbWJfZHJtX3ByaXZhdGUgKmRldl9wLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgcmVnLCB1 MzIgb2Zmc2V0KQoreworCXUzMiByZWdfdmFsID0ga21iX3JlYWRfbWlwaShkZXZfcCwgcmVnKTsK KworCWttYl93cml0ZV9taXBpKGRldl9wLCByZWcsIHJlZ192YWwgJiAofigxIDw8IG9mZnNldCkp KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGttYl9zZXRfYml0bWFza19taXBpKHN0cnVjdCBr bWJfZHJtX3ByaXZhdGUgKmRldl9wLAorCQkJCQl1bnNpZ25lZCBpbnQgcmVnLCB1MzIgbWFzaykK K3sKKwl1MzIgcmVnX3ZhbCA9IGttYl9yZWFkX21pcGkoZGV2X3AsIHJlZyk7CisKKwlrbWJfd3Jp dGVfbWlwaShkZXZfcCwgcmVnLCAocmVnX3ZhbCB8IG1hc2spKTsKK30KKworc3RhdGljIGlubGlu ZSB2b2lkIGttYl9jbHJfYml0bWFza19taXBpKHN0cnVjdCBrbWJfZHJtX3ByaXZhdGUgKmRldl9w LAorCQkJCQl1bnNpZ25lZCBpbnQgcmVnLCB1MzIgbWFzaykKK3sKKwl1MzIgcmVnX3ZhbCA9IGtt Yl9yZWFkX21pcGkoZGV2X3AsIHJlZyk7CisKKwlrbWJfd3JpdGVfbWlwaShkZXZfcCwgcmVnLCAo cmVnX3ZhbCAmICh+bWFzaykpKTsKK30KKworaW50IGttYl9zZXR1cF9jcnRjKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYpOwordm9pZCBrbWJfc2V0X3NjYW5vdXQoc3RydWN0IGttYl9kcm1fcHJpdmF0 ZSAqbGNkKTsKKyNlbmRpZiAvKiBfX0tNQl9EUlZfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0va21iL2ttYl9wbGFuZS5jIGIvZHJpdmVycy9ncHUvZHJtL2ttYi9rbWJfcGxhbmUu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWU3Nzg2Ci0tLSAvZGV2L251 bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2ttYi9rbWJfcGxhbmUuYwpAQCAtMCwwICsxLDQ4MCBA QAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQorLyoKKyAqIENvcHly aWdodCDCqSAyMDE4LTIwMjAgSW50ZWwgQ29ycG9yYXRpb24KKyAqLworCisjaW5jbHVkZSA8ZHJt L2RybV9hdG9taWMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KKyNpbmNs dWRlIDxkcm0vZHJtX2NydGMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+Cisj aW5jbHVkZSA8ZHJtL2RybV9mYl9jbWFfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9mYl9o ZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2ZvdXJjYy5oPgorI2luY2x1ZGUgPGRybS9kcm1f Z2VtX2NtYV9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX21hbmFnZWQuaD4KKyNpbmNsdWRl IDxkcm0vZHJtX3BsYW5lX2hlbHBlci5oPgorCisjaW5jbHVkZSAia21iX2Rydi5oIgorI2luY2x1 ZGUgImttYl9wbGFuZS5oIgorI2luY2x1ZGUgImttYl9yZWdzLmgiCisKK2NvbnN0IHUzMiBsYXll cl9pcnFzW10gPSB7CisJTENEX0lOVF9WTDAsCisJTENEX0lOVF9WTDEsCisJTENEX0lOVF9HTDAs CisJTENEX0lOVF9HTDEKK307CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY2hlY2tfcGl4ZWxfZm9y bWF0KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLCB1MzIgZm9ybWF0KQoreworCWludCBpOworCisJ Zm9yIChpID0gMDsgaSA8IHBsYW5lLT5mb3JtYXRfY291bnQ7IGkrKykgeworCQlpZiAocGxhbmUt PmZvcm1hdF90eXBlc1tpXSA9PSBmb3JtYXQpCisJCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC1F SU5WQUw7Cit9CisKK3N0YXRpYyBpbnQga21iX3BsYW5lX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJt X3BsYW5lICpwbGFuZSwKKwkJCQkgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQorewor CXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiOworCWludCByZXQ7CisJc3RydWN0IGRybV9jcnRj X3N0YXRlICpjcnRjX3N0YXRlOworCWJvb2wgY2FuX3Bvc2l0aW9uOworCisJZmIgPSBzdGF0ZS0+ ZmI7CisJaWYgKCFmYiB8fCAhc3RhdGUtPmNydGMpCisJCXJldHVybiAwOworCisJcmV0ID0gY2hl Y2tfcGl4ZWxfZm9ybWF0KHBsYW5lLCBmYi0+Zm9ybWF0LT5mb3JtYXQpOworCWlmIChyZXQpCisJ CXJldHVybiByZXQ7CisKKwlpZiAoc3RhdGUtPmNydGNfdyA+IEtNQl9NQVhfV0lEVEggfHwgc3Rh dGUtPmNydGNfaCA+IEtNQl9NQVhfSEVJR0hUKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoc3Rh dGUtPmNydGNfdyA8IEtNQl9NSU5fV0lEVEggfHwgc3RhdGUtPmNydGNfaCA8IEtNQl9NSU5fSEVJ R0hUKQorCQlyZXR1cm4gLUVJTlZBTDsKKwljYW5fcG9zaXRpb24gPSAocGxhbmUtPnR5cGUgPT0g RFJNX1BMQU5FX1RZUEVfT1ZFUkxBWSk7CisJY3J0Y19zdGF0ZSA9CisJCWRybV9hdG9taWNfZ2V0 X2V4aXN0aW5nX2NydGNfc3RhdGUoc3RhdGUtPnN0YXRlLCBzdGF0ZS0+Y3J0Yyk7CisJcmV0dXJu IGRybV9hdG9taWNfaGVscGVyX2NoZWNrX3BsYW5lX3N0YXRlKHN0YXRlLCBjcnRjX3N0YXRlLAor CQkJCQkJIERSTV9QTEFORV9IRUxQRVJfTk9fU0NBTElORywKKwkJCQkJCSBEUk1fUExBTkVfSEVM UEVSX05PX1NDQUxJTkcsCisJCQkJCQkgY2FuX3Bvc2l0aW9uLCB0cnVlKTsKK30KKworc3RhdGlj IHZvaWQga21iX3BsYW5lX2F0b21pY19kaXNhYmxlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAor CQkJCSAgICAgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IGttYl9w bGFuZSAqa21iX3BsYW5lID0gdG9fa21iX3BsYW5lKHBsYW5lKTsKKwlpbnQgcGxhbmVfaWQgPSBr bWJfcGxhbmUtPmlkOworCXN0cnVjdCBrbWJfZHJtX3ByaXZhdGUgKmttYjsKKworCWttYiA9IHRv X2ttYihwbGFuZS0+ZGV2KTsKKworCXN3aXRjaCAocGxhbmVfaWQpIHsKKwljYXNlIExBWUVSXzA6 CisJCWttYi0+cGxhbmVfc3RhdHVzW3BsYW5lX2lkXS5jdHJsID0gTENEX0NUUkxfVkwxX0VOQUJM RTsKKwkJYnJlYWs7CisJY2FzZSBMQVlFUl8xOgorCQlrbWItPnBsYW5lX3N0YXR1c1twbGFuZV9p ZF0uY3RybCA9IExDRF9DVFJMX1ZMMl9FTkFCTEU7CisJCWJyZWFrOworCWNhc2UgTEFZRVJfMjoK KwkJa21iLT5wbGFuZV9zdGF0dXNbcGxhbmVfaWRdLmN0cmwgPSBMQ0RfQ1RSTF9HTDFfRU5BQkxF OworCQlicmVhazsKKwljYXNlIExBWUVSXzM6CisJCWttYi0+cGxhbmVfc3RhdHVzW3BsYW5lX2lk XS5jdHJsID0gTENEX0NUUkxfR0wyX0VOQUJMRTsKKwkJYnJlYWs7CisJfQorCisJa21iLT5wbGFu ZV9zdGF0dXNbcGxhbmVfaWRdLmRpc2FibGUgPSB0cnVlOworfQorCit1bnNpZ25lZCBpbnQgZ2V0 X3BpeGVsX2Zvcm1hdCh1MzIgZm9ybWF0KQoreworCXVuc2lnbmVkIGludCB2YWwgPSAwOworCisJ c3dpdGNoIChmb3JtYXQpIHsKKwkJLyogcGxhbmFyIGZvcm1hdHMgKi8KKwljYXNlIERSTV9GT1JN QVRfWVVWNDQ0OgorCQl2YWwgPSBMQ0RfTEFZRVJfRk9STUFUX1lDQkNSNDQ0UExBTiB8IExDRF9M QVlFUl9QTEFOQVJfU1RPUkFHRTsKKwkJYnJlYWs7CisJY2FzZSBEUk1fRk9STUFUX1lWVTQ0NDoK KwkJdmFsID0gTENEX0xBWUVSX0ZPUk1BVF9ZQ0JDUjQ0NFBMQU4gfCBMQ0RfTEFZRVJfUExBTkFS X1NUT1JBR0UKKwkJICAgIHwgTENEX0xBWUVSX0NSQ0JfT1JERVI7CisJCWJyZWFrOworCWNhc2Ug RFJNX0ZPUk1BVF9ZVVY0MjI6CisJCXZhbCA9IExDRF9MQVlFUl9GT1JNQVRfWUNCQ1I0MjJQTEFO IHwgTENEX0xBWUVSX1BMQU5BUl9TVE9SQUdFOworCQlicmVhazsKKwljYXNlIERSTV9GT1JNQVRf WVZVNDIyOgorCQl2YWwgPSBMQ0RfTEFZRVJfRk9STUFUX1lDQkNSNDIyUExBTiB8IExDRF9MQVlF Ul9QTEFOQVJfU1RPUkFHRQorCQkgICAgfCBMQ0RfTEFZRVJfQ1JDQl9PUkRFUjsKKwkJYnJlYWs7 CisJY2FzZSBEUk1fRk9STUFUX1lVVjQyMDoKKwkJdmFsID0gTENEX0xBWUVSX0ZPUk1BVF9ZQ0JD UjQyMFBMQU4gfCBMQ0RfTEFZRVJfUExBTkFSX1NUT1JBR0U7CisJCWJyZWFrOworCWNhc2UgRFJN X0ZPUk1BVF9ZVlU0MjA6CisJCXZhbCA9IExDRF9MQVlFUl9GT1JNQVRfWUNCQ1I0MjBQTEFOIHwg TENEX0xBWUVSX1BMQU5BUl9TVE9SQUdFCisJCSAgICB8IExDRF9MQVlFUl9DUkNCX09SREVSOwor CQlicmVhazsKKwljYXNlIERSTV9GT1JNQVRfTlYxMjoKKwkJdmFsID0gTENEX0xBWUVSX0ZPUk1B VF9OVjEyIHwgTENEX0xBWUVSX1BMQU5BUl9TVE9SQUdFOworCQlicmVhazsKKwljYXNlIERSTV9G T1JNQVRfTlYyMToKKwkJdmFsID0gTENEX0xBWUVSX0ZPUk1BVF9OVjEyIHwgTENEX0xBWUVSX1BM QU5BUl9TVE9SQUdFCisJCSAgICB8IExDRF9MQVlFUl9DUkNCX09SREVSOworCQlicmVhazsKKwkJ LyogcGFja2VkIGZvcm1hdHMgKi8KKwkJLyogbG9va3MgaHcgcmVxdWlyZXMgQiAmIEcgdG8gYmUg c3dhcHBlZCB3aGVuIFJHQiAqLworCWNhc2UgRFJNX0ZPUk1BVF9SR0IzMzI6CisJCXZhbCA9IExD RF9MQVlFUl9GT1JNQVRfUkdCMzMyIHwgTENEX0xBWUVSX0JHUl9PUkRFUjsKKwkJYnJlYWs7CisJ Y2FzZSBEUk1fRk9STUFUX1hCR1I0NDQ0OgorCQl2YWwgPSBMQ0RfTEFZRVJfRk9STUFUX1JHQlg0 NDQ0OworCQlicmVhazsKKwljYXNlIERSTV9GT1JNQVRfQVJHQjQ0NDQ6CisJCXZhbCA9IExDRF9M QVlFUl9GT1JNQVRfUkdCQTQ0NDQgfCBMQ0RfTEFZRVJfQkdSX09SREVSOworCQlicmVhazsKKwlj YXNlIERSTV9GT1JNQVRfQUJHUjQ0NDQ6CisJCXZhbCA9IExDRF9MQVlFUl9GT1JNQVRfUkdCQTQ0 NDQ7CisJCWJyZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9YUkdCMTU1NToKKwkJdmFsID0gTENEX0xB WUVSX0ZPUk1BVF9YUkdCMTU1NSB8IExDRF9MQVlFUl9CR1JfT1JERVI7CisJCWJyZWFrOworCWNh c2UgRFJNX0ZPUk1BVF9YQkdSMTU1NToKKwkJdmFsID0gTENEX0xBWUVSX0ZPUk1BVF9YUkdCMTU1 NTsKKwkJYnJlYWs7CisJY2FzZSBEUk1fRk9STUFUX0FSR0IxNTU1OgorCQl2YWwgPSBMQ0RfTEFZ RVJfRk9STUFUX1JHQkExNTU1IHwgTENEX0xBWUVSX0JHUl9PUkRFUjsKKwkJYnJlYWs7CisJY2Fz ZSBEUk1fRk9STUFUX0FCR1IxNTU1OgorCQl2YWwgPSBMQ0RfTEFZRVJfRk9STUFUX1JHQkExNTU1 OworCQlicmVhazsKKwljYXNlIERSTV9GT1JNQVRfUkdCNTY1OgorCQl2YWwgPSBMQ0RfTEFZRVJf Rk9STUFUX1JHQjU2NSB8IExDRF9MQVlFUl9CR1JfT1JERVI7CisJCWJyZWFrOworCWNhc2UgRFJN X0ZPUk1BVF9CR1I1NjU6CisJCXZhbCA9IExDRF9MQVlFUl9GT1JNQVRfUkdCNTY1OworCQlicmVh azsKKwljYXNlIERSTV9GT1JNQVRfUkdCODg4OgorCQl2YWwgPSBMQ0RfTEFZRVJfRk9STUFUX1JH Qjg4OCB8IExDRF9MQVlFUl9CR1JfT1JERVI7CisJCWJyZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9C R1I4ODg6CisJCXZhbCA9IExDRF9MQVlFUl9GT1JNQVRfUkdCODg4OworCQlicmVhazsKKwljYXNl IERSTV9GT1JNQVRfWFJHQjg4ODg6CisJCXZhbCA9IExDRF9MQVlFUl9GT1JNQVRfUkdCWDg4ODgg fCBMQ0RfTEFZRVJfQkdSX09SREVSOworCQlicmVhazsKKwljYXNlIERSTV9GT1JNQVRfWEJHUjg4 ODg6CisJCXZhbCA9IExDRF9MQVlFUl9GT1JNQVRfUkdCWDg4ODg7CisJCWJyZWFrOworCWNhc2Ug RFJNX0ZPUk1BVF9BUkdCODg4ODoKKwkJdmFsID0gTENEX0xBWUVSX0ZPUk1BVF9SR0JBODg4OCB8 IExDRF9MQVlFUl9CR1JfT1JERVI7CisJCWJyZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9BQkdSODg4 ODoKKwkJdmFsID0gTENEX0xBWUVSX0ZPUk1BVF9SR0JBODg4ODsKKwkJYnJlYWs7CisJfQorCURS TV9JTkZPX09OQ0UoIiVzIDogJWQgZm9ybWF0PTB4JXggdmFsPTB4JXhcbiIsCisJCSAgICAgIF9f ZnVuY19fLCBfX0xJTkVfXywgZm9ybWF0LCB2YWwpOworCXJldHVybiB2YWw7Cit9CisKK3Vuc2ln bmVkIGludCBnZXRfYml0c19wZXJfcGl4ZWwoY29uc3Qgc3RydWN0IGRybV9mb3JtYXRfaW5mbyAq Zm9ybWF0KQoreworCXUzMiBicHAgPSAwOworCXVuc2lnbmVkIGludCB2YWwgPSAwOworCisJaWYg KGZvcm1hdC0+bnVtX3BsYW5lcyA+IDEpIHsKKwkJdmFsID0gTENEX0xBWUVSXzhCUFA7CisJCXJl dHVybiB2YWw7CisJfQorCisJYnBwICs9IDggKiBmb3JtYXQtPmNwcFswXTsKKworCXN3aXRjaCAo YnBwKSB7CisJY2FzZSA4OgorCQl2YWwgPSBMQ0RfTEFZRVJfOEJQUDsKKwkJYnJlYWs7CisJY2Fz ZSAxNjoKKwkJdmFsID0gTENEX0xBWUVSXzE2QlBQOworCQlicmVhazsKKwljYXNlIDI0OgorCQl2 YWwgPSBMQ0RfTEFZRVJfMjRCUFA7CisJCWJyZWFrOworCWNhc2UgMzI6CisJCXZhbCA9IExDRF9M QVlFUl8zMkJQUDsKKwkJYnJlYWs7CisJfQorCisJRFJNX0RFQlVHKCJicHA9JWQgdmFsPTB4JXhc biIsIGJwcCwgdmFsKTsKKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgdm9pZCBjb25maWdfY3Nj KHN0cnVjdCBrbWJfZHJtX3ByaXZhdGUgKmttYiwgaW50IHBsYW5lX2lkKQoreworCS8qIFlVViB0 byBSR0IgY29udmVyc2lvbiB1c2luZyB0aGUgZml4ZWQgbWF0cml4IGNzY19jb2VmX2xjZCAqLwor CWttYl93cml0ZV9sY2Qoa21iLCBMQ0RfTEFZRVJuX0NTQ19DT0VGRjExKHBsYW5lX2lkKSwgY3Nj X2NvZWZfbGNkWzBdKTsKKwlrbWJfd3JpdGVfbGNkKGttYiwgTENEX0xBWUVSbl9DU0NfQ09FRkYx MihwbGFuZV9pZCksIGNzY19jb2VmX2xjZFsxXSk7CisJa21iX3dyaXRlX2xjZChrbWIsIExDRF9M QVlFUm5fQ1NDX0NPRUZGMTMocGxhbmVfaWQpLCBjc2NfY29lZl9sY2RbMl0pOworCWttYl93cml0 ZV9sY2Qoa21iLCBMQ0RfTEFZRVJuX0NTQ19DT0VGRjIxKHBsYW5lX2lkKSwgY3NjX2NvZWZfbGNk WzNdKTsKKwlrbWJfd3JpdGVfbGNkKGttYiwgTENEX0xBWUVSbl9DU0NfQ09FRkYyMihwbGFuZV9p ZCksIGNzY19jb2VmX2xjZFs0XSk7CisJa21iX3dyaXRlX2xjZChrbWIsIExDRF9MQVlFUm5fQ1ND X0NPRUZGMjMocGxhbmVfaWQpLCBjc2NfY29lZl9sY2RbNV0pOworCWttYl93cml0ZV9sY2Qoa21i LCBMQ0RfTEFZRVJuX0NTQ19DT0VGRjMxKHBsYW5lX2lkKSwgY3NjX2NvZWZfbGNkWzZdKTsKKwlr bWJfd3JpdGVfbGNkKGttYiwgTENEX0xBWUVSbl9DU0NfQ09FRkYzMihwbGFuZV9pZCksIGNzY19j b2VmX2xjZFs3XSk7CisJa21iX3dyaXRlX2xjZChrbWIsIExDRF9MQVlFUm5fQ1NDX0NPRUZGMzMo cGxhbmVfaWQpLCBjc2NfY29lZl9sY2RbOF0pOworCWttYl93cml0ZV9sY2Qoa21iLCBMQ0RfTEFZ RVJuX0NTQ19PRkYxKHBsYW5lX2lkKSwgY3NjX2NvZWZfbGNkWzldKTsKKwlrbWJfd3JpdGVfbGNk KGttYiwgTENEX0xBWUVSbl9DU0NfT0ZGMihwbGFuZV9pZCksIGNzY19jb2VmX2xjZFsxMF0pOwor CWttYl93cml0ZV9sY2Qoa21iLCBMQ0RfTEFZRVJuX0NTQ19PRkYzKHBsYW5lX2lkKSwgY3NjX2Nv ZWZfbGNkWzExXSk7Cit9CisKK3N0YXRpYyB2b2lkIGttYl9wbGFuZV9hdG9taWNfdXBkYXRlKHN0 cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAorCQkJCSAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpz dGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYjsKKwlzdHJ1Y3Qga21iX2RybV9w cml2YXRlICprbWI7CisJdW5zaWduZWQgaW50IHdpZHRoOworCXVuc2lnbmVkIGludCBoZWlnaHQ7 CisJdW5zaWduZWQgaW50IGRtYV9sZW47CisJc3RydWN0IGttYl9wbGFuZSAqa21iX3BsYW5lOwor CXVuc2lnbmVkIGludCBkbWFfY2ZnOworCXVuc2lnbmVkIGludCBjdHJsID0gMCwgdmFsID0gMCwg b3V0X2Zvcm1hdCA9IDA7CisJdW5zaWduZWQgaW50IHNyY193LCBzcmNfaCwgY3J0Y194LCBjcnRj X3k7CisJdW5zaWduZWQgY2hhciBwbGFuZV9pZDsKKwlpbnQgbnVtX3BsYW5lczsKKwlzdGF0aWMg ZG1hX2FkZHJfdCBhZGRyW01BWF9TVUJfUExBTkVTXTsKKworCWlmICghcGxhbmUgfHwgIXBsYW5l LT5zdGF0ZSB8fCAhc3RhdGUpCisJCXJldHVybjsKKworCWZiID0gcGxhbmUtPnN0YXRlLT5mYjsK KwlpZiAoIWZiKQorCQlyZXR1cm47CisJbnVtX3BsYW5lcyA9IGZiLT5mb3JtYXQtPm51bV9wbGFu ZXM7CisJa21iX3BsYW5lID0gdG9fa21iX3BsYW5lKHBsYW5lKTsKKwlwbGFuZV9pZCA9IGttYl9w bGFuZS0+aWQ7CisKKwlrbWIgPSB0b19rbWIocGxhbmUtPmRldik7CisKKwlpZiAoa21iX3VuZGVy X2Zsb3cgfHwga21iX2ZsdXNoX2RvbmUpIHsKKwkJZHJtX2RiZygma21iLT5kcm0sICJwbGFuZV91 cGRhdGU6dW5kZXJmbG93ISEhISByZXR1cm5pbmciKTsKKwkJcmV0dXJuOworCX0KKworCXNyY193 ID0gKHBsYW5lLT5zdGF0ZS0+c3JjX3cgPj4gMTYpOworCXNyY19oID0gcGxhbmUtPnN0YXRlLT5z cmNfaCA+PiAxNjsKKwljcnRjX3ggPSBwbGFuZS0+c3RhdGUtPmNydGNfeDsKKwljcnRjX3kgPSBw bGFuZS0+c3RhdGUtPmNydGNfeTsKKworCWRybV9kYmcoJmttYi0+ZHJtLAorCQkic3JjX3c9JWQg c3JjX2g9JWQsIGZiLT5mb3JtYXQtPmZvcm1hdD0weCV4IGZiLT5mbGFncz0weCV4XG4iLAorCQkg IHNyY193LCBzcmNfaCwgZmItPmZvcm1hdC0+Zm9ybWF0LCBmYi0+ZmxhZ3MpOworCisJd2lkdGgg PSBmYi0+d2lkdGg7CisJaGVpZ2h0ID0gZmItPmhlaWdodDsKKwlkbWFfbGVuID0gKHdpZHRoICog aGVpZ2h0ICogZmItPmZvcm1hdC0+Y3BwWzBdKTsKKwlkcm1fZGJnKCZrbWItPmRybSwgImRtYV9s ZW49JWQgIiwgZG1hX2xlbik7CisJa21iX3dyaXRlX2xjZChrbWIsIExDRF9MQVlFUm5fRE1BX0xF TihwbGFuZV9pZCksIGRtYV9sZW4pOworCWttYl93cml0ZV9sY2Qoa21iLCBMQ0RfTEFZRVJuX0RN QV9MRU5fU0hBRE9XKHBsYW5lX2lkKSwgZG1hX2xlbik7CisJa21iX3dyaXRlX2xjZChrbWIsIExD RF9MQVlFUm5fRE1BX0xJTkVfVlNUUklERShwbGFuZV9pZCksCisJCSAgICAgIGZiLT5waXRjaGVz WzBdKTsKKwlrbWJfd3JpdGVfbGNkKGttYiwgTENEX0xBWUVSbl9ETUFfTElORV9XSURUSChwbGFu ZV9pZCksCisJCSAgICAgICh3aWR0aCAqIGZiLT5mb3JtYXQtPmNwcFswXSkpOworCisJYWRkcltZ X1BMQU5FXSA9IGRybV9mYl9jbWFfZ2V0X2dlbV9hZGRyKGZiLCBwbGFuZS0+c3RhdGUsIDApOwor CWttYi0+ZmJfYWRkciA9IGFkZHJbWV9QTEFORV07CisJa21iX3dyaXRlX2xjZChrbWIsIExDRF9M QVlFUm5fRE1BX1NUQVJUX0FERFIocGxhbmVfaWQpLAorCQkgICAgICBhZGRyW1lfUExBTkVdICsg ZmItPm9mZnNldHNbMF0pOworCXZhbCA9IGdldF9waXhlbF9mb3JtYXQoZmItPmZvcm1hdC0+Zm9y bWF0KTsKKwl2YWwgfD0gZ2V0X2JpdHNfcGVyX3BpeGVsKGZiLT5mb3JtYXQpOworCS8qIFByb2dy YW0gQ2IvQ3IgZm9yIHBsYW5hciBmb3JtYXRzICovCisJaWYgKG51bV9wbGFuZXMgPiAxKSB7CisJ CWttYl93cml0ZV9sY2Qoa21iLCBMQ0RfTEFZRVJuX0RNQV9DQl9MSU5FX1ZTVFJJREUocGxhbmVf aWQpLAorCQkJICAgICAgd2lkdGggKiBmYi0+Zm9ybWF0LT5jcHBbMF0pOworCQlrbWJfd3JpdGVf bGNkKGttYiwgTENEX0xBWUVSbl9ETUFfQ0JfTElORV9XSURUSChwbGFuZV9pZCksCisJCQkgICAg ICAod2lkdGggKiBmYi0+Zm9ybWF0LT5jcHBbMF0pKTsKKworCQlhZGRyW1VfUExBTkVdID0gZHJt X2ZiX2NtYV9nZXRfZ2VtX2FkZHIoZmIsIHBsYW5lLT5zdGF0ZSwKKwkJCQkJCQlVX1BMQU5FKTsK KwkJLyogY2hlY2sgaWYgQ2IvQ3IgaXMgc3dhcHBlZCovCisJCWlmIChudW1fcGxhbmVzID09IDMg JiYgKHZhbCAmIExDRF9MQVlFUl9DUkNCX09SREVSKSkKKwkJCWttYl93cml0ZV9sY2Qoa21iLAor CQkJCSAgICAgIExDRF9MQVlFUm5fRE1BX1NUQVJUX0NSX0FEUihwbGFuZV9pZCksCisJCQkJCWFk ZHJbVV9QTEFORV0pOworCQllbHNlCisJCQlrbWJfd3JpdGVfbGNkKGttYiwKKwkJCQkgICAgICBM Q0RfTEFZRVJuX0RNQV9TVEFSVF9DQl9BRFIocGxhbmVfaWQpLAorCQkJCQlhZGRyW1VfUExBTkVd KTsKKworCQlpZiAobnVtX3BsYW5lcyA9PSAzKSB7CisJCQlrbWJfd3JpdGVfbGNkKGttYiwKKwkJ CQkgICAgICBMQ0RfTEFZRVJuX0RNQV9DUl9MSU5FX1ZTVFJJREUocGxhbmVfaWQpLAorCQkJCSAg ICAgICgod2lkdGgpICogZmItPmZvcm1hdC0+Y3BwWzBdKSk7CisKKwkJCWttYl93cml0ZV9sY2Qo a21iLAorCQkJCSAgICAgIExDRF9MQVlFUm5fRE1BX0NSX0xJTkVfV0lEVEgocGxhbmVfaWQpLAor CQkJCSAgICAgICgod2lkdGgpICogZmItPmZvcm1hdC0+Y3BwWzBdKSk7CisKKwkJCWFkZHJbVl9Q TEFORV0gPSBkcm1fZmJfY21hX2dldF9nZW1fYWRkcihmYiwKKwkJCQkJCQkJcGxhbmUtPnN0YXRl LAorCQkJCQkJCQlWX1BMQU5FKTsKKworCQkJLyogY2hlY2sgaWYgQ2IvQ3IgaXMgc3dhcHBlZCov CisJCQlpZiAodmFsICYgTENEX0xBWUVSX0NSQ0JfT1JERVIpCisJCQkJa21iX3dyaXRlX2xjZChr bWIsCisJCQkJCSAgICAgIExDRF9MQVlFUm5fRE1BX1NUQVJUX0NCX0FEUihwbGFuZV9pZCksCisJ CQkJCSAgICAgIGFkZHJbVl9QTEFORV0pOworCQkJZWxzZQorCQkJCWttYl93cml0ZV9sY2Qoa21i LAorCQkJCQkgICAgICBMQ0RfTEFZRVJuX0RNQV9TVEFSVF9DUl9BRFIocGxhbmVfaWQpLAorCQkJ CQkgICAgICBhZGRyW1ZfUExBTkVdKTsKKwkJfQorCX0KKworCWttYl93cml0ZV9sY2Qoa21iLCBM Q0RfTEFZRVJuX1dJRFRIKHBsYW5lX2lkKSwgc3JjX3cgLSAxKTsKKwlrbWJfd3JpdGVfbGNkKGtt YiwgTENEX0xBWUVSbl9IRUlHSFQocGxhbmVfaWQpLCBzcmNfaCAtIDEpOworCWttYl93cml0ZV9s Y2Qoa21iLCBMQ0RfTEFZRVJuX0NPTF9TVEFSVChwbGFuZV9pZCksIGNydGNfeCk7CisJa21iX3dy aXRlX2xjZChrbWIsIExDRF9MQVlFUm5fUk9XX1NUQVJUKHBsYW5lX2lkKSwgY3J0Y195KTsKKwor CXZhbCB8PSBMQ0RfTEFZRVJfRklGT18xMDA7CisKKwlpZiAodmFsICYgTENEX0xBWUVSX1BMQU5B Ul9TVE9SQUdFKSB7CisJCXZhbCB8PSBMQ0RfTEFZRVJfQ1NDX0VOOworCisJCS8qIEVuYWJsZSBD U0MgaWYgaW5wdXQgaXMgcGxhbmFyIGFuZCBvdXRwdXQgaXMgUkdCICovCisJCWNvbmZpZ19jc2Mo a21iLCBwbGFuZV9pZCk7CisJfQorCisJa21iX3dyaXRlX2xjZChrbWIsIExDRF9MQVlFUm5fQ0ZH KHBsYW5lX2lkKSwgdmFsKTsKKworCXN3aXRjaCAocGxhbmVfaWQpIHsKKwljYXNlIExBWUVSXzA6 CisJCWN0cmwgPSBMQ0RfQ1RSTF9WTDFfRU5BQkxFOworCQlicmVhazsKKwljYXNlIExBWUVSXzE6 CisJCWN0cmwgPSBMQ0RfQ1RSTF9WTDJfRU5BQkxFOworCQlicmVhazsKKwljYXNlIExBWUVSXzI6 CisJCWN0cmwgPSBMQ0RfQ1RSTF9HTDFfRU5BQkxFOworCQlicmVhazsKKwljYXNlIExBWUVSXzM6 CisJCWN0cmwgPSBMQ0RfQ1RSTF9HTDJfRU5BQkxFOworCQlicmVhazsKKwl9CisKKwljdHJsIHw9 IExDRF9DVFJMX1BST0dSRVNTSVZFIHwgTENEX0NUUkxfVElNX0dFTl9FTkFCTEUKKwkgICAgfCBM Q0RfQ1RSTF9DT05USU5VT1VTIHwgTENEX0NUUkxfT1VUUFVUX0VOQUJMRUQ7CisKKwkvKiBMQ0Qg aXMgY29ubmVjdGVkIHRvIE1JUEkgb24ga21iCisJICogVGhlcmVmb3JlIHRoaXMgYml0IGlzIHJl cXVpcmVkIGZvciBEU0kgVHgKKwkgKi8KKwljdHJsIHw9IExDRF9DVFJMX1ZIU1lOQ19JRExFX0xW TDsKKworCWttYl9zZXRfYml0bWFza19sY2Qoa21iLCBMQ0RfQ09OVFJPTCwgY3RybCk7CisKKwkv KiBGSVhNRSBubyBkb2Mgb24gaG93IHRvIHNldCBvdXRwdXQgZm9ybWF0LHRoZXNlIHZhbHVlcyBh cmUKKwkgKiB0YWtlbiBmcm9tIHRoZSBNeXJpYWR4IHRlc3RzCisJICovCisJb3V0X2Zvcm1hdCB8 PSBMQ0RfT1VURl9GT1JNQVRfUkdCODg4OworCisJLyogTGVhdmUgUkdCIG9yZGVyLGNvbnZlcnNp b24gbW9kZSBhbmQgY2xpcCBtb2RlIHRvIGRlZmF1bHQgKi8KKwkvKiBkbyBub3QgaW50ZXJsZWF2 ZSBSR0IgY2hhbm5lbHMgZm9yIG1pcGkgVHggY29tcGF0aWJpbGl0eSAqLworCW91dF9mb3JtYXQg fD0gTENEX09VVEZfTUlQSV9SR0JfTU9ERTsKKwlrbWJfd3JpdGVfbGNkKGttYiwgTENEX09VVF9G T1JNQVRfQ0ZHLCBvdXRfZm9ybWF0KTsKKworCWRtYV9jZmcgPSBMQ0RfRE1BX0xBWUVSX0VOQUJM RSB8IExDRF9ETUFfTEFZRVJfVlNUUklERV9FTiB8CisJICAgIExDRF9ETUFfTEFZRVJfQ09OVF9V UERBVEUgfCBMQ0RfRE1BX0xBWUVSX0FYSV9CVVJTVF8xNjsKKworCS8qIEVuYWJsZSBETUEgKi8K KwlrbWJfd3JpdGVfbGNkKGttYiwgTENEX0xBWUVSbl9ETUFfQ0ZHKHBsYW5lX2lkKSwgZG1hX2Nm Zyk7CisJZHJtX2RiZygma21iLT5kcm0sICJkbWFfY2ZnPTB4JXggTENEX0RNQV9DRkc9MHgleFxu IiwgZG1hX2NmZywKKwkJa21iX3JlYWRfbGNkKGttYiwgTENEX0xBWUVSbl9ETUFfQ0ZHKHBsYW5l X2lkKSkpOworCisJa21iX3NldF9iaXRtYXNrX2xjZChrbWIsIExDRF9JTlRfQ0xFQVIsIExDRF9J TlRfRU9GIHwKKwkJCUxDRF9JTlRfRE1BX0VSUik7CisJa21iX3NldF9iaXRtYXNrX2xjZChrbWIs IExDRF9JTlRfRU5BQkxFLCBMQ0RfSU5UX0VPRiB8CisJCQlMQ0RfSU5UX0RNQV9FUlIpOworfQor CitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wbGFuZV9oZWxwZXJfZnVuY3Mga21iX3BsYW5lX2hl bHBlcl9mdW5jcyA9IHsKKwkuYXRvbWljX2NoZWNrID0ga21iX3BsYW5lX2F0b21pY19jaGVjaywK KwkuYXRvbWljX3VwZGF0ZSA9IGttYl9wbGFuZV9hdG9taWNfdXBkYXRlLAorCS5hdG9taWNfZGlz YWJsZSA9IGttYl9wbGFuZV9hdG9taWNfZGlzYWJsZQorfTsKKwordm9pZCBrbWJfcGxhbmVfZGVz dHJveShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKK3sKKwlzdHJ1Y3Qga21iX3BsYW5lICprbWJf cGxhbmUgPSB0b19rbWJfcGxhbmUocGxhbmUpOworCisJZHJtX3BsYW5lX2NsZWFudXAocGxhbmUp OworCWtmcmVlKGttYl9wbGFuZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5l X2Z1bmNzIGttYl9wbGFuZV9mdW5jcyA9IHsKKwkudXBkYXRlX3BsYW5lID0gZHJtX2F0b21pY19o ZWxwZXJfdXBkYXRlX3BsYW5lLAorCS5kaXNhYmxlX3BsYW5lID0gZHJtX2F0b21pY19oZWxwZXJf ZGlzYWJsZV9wbGFuZSwKKwkuZGVzdHJveSA9IGttYl9wbGFuZV9kZXN0cm95LAorCS5yZXNldCA9 IGRybV9hdG9taWNfaGVscGVyX3BsYW5lX3Jlc2V0LAorCS5hdG9taWNfZHVwbGljYXRlX3N0YXRl ID0gZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZHVwbGljYXRlX3N0YXRlLAorCS5hdG9taWNfZGVz dHJveV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX3BsYW5lX2Rlc3Ryb3lfc3RhdGUsCit9Owor CitzdHJ1Y3Qga21iX3BsYW5lICprbWJfcGxhbmVfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJt KQoreworCXN0cnVjdCBrbWJfZHJtX3ByaXZhdGUgKmttYiA9IHRvX2ttYihkcm0pOworCXN0cnVj dCBrbWJfcGxhbmUgKnBsYW5lID0gTlVMTDsKKwlzdHJ1Y3Qga21iX3BsYW5lICpwcmltYXJ5ID0g TlVMTDsKKwlpbnQgaSA9IDA7CisJaW50IHJldCA9IDA7CisJZW51bSBkcm1fcGxhbmVfdHlwZSBw bGFuZV90eXBlOworCWNvbnN0IHUzMiAqcGxhbmVfZm9ybWF0czsKKwlpbnQgbnVtX3BsYW5lX2Zv cm1hdHM7CisKKwlmb3IgKGkgPSAwOyBpIDwgS01CX01BWF9QTEFORVM7IGkrKykgeworCQlwbGFu ZSA9IGRybW1fa3phbGxvYyhkcm0sIHNpemVvZigqcGxhbmUpLCBHRlBfS0VSTkVMKTsKKworCQlp ZiAoIXBsYW5lKSB7CisJCQlkcm1fZXJyKGRybSwgIkZhaWxlZCB0byBhbGxvY2F0ZSBwbGFuZVxu Iik7CisJCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwkJfQorCisJCXBsYW5lX3R5cGUgPSAo aSA9PSAwKSA/IERSTV9QTEFORV9UWVBFX1BSSU1BUlkgOgorCQkgICAgRFJNX1BMQU5FX1RZUEVf T1ZFUkxBWTsKKwkJaWYgKGkgPCAyKSB7CisJCQlwbGFuZV9mb3JtYXRzID0ga21iX2Zvcm1hdHNf djsKKwkJCW51bV9wbGFuZV9mb3JtYXRzID0gQVJSQVlfU0laRShrbWJfZm9ybWF0c192KTsKKwkJ fSBlbHNlIHsKKwkJCXBsYW5lX2Zvcm1hdHMgPSBrbWJfZm9ybWF0c19nOworCQkJbnVtX3BsYW5l X2Zvcm1hdHMgPSBBUlJBWV9TSVpFKGttYl9mb3JtYXRzX2cpOworCQl9CisKKwkJcmV0ID0gZHJt X3VuaXZlcnNhbF9wbGFuZV9pbml0KGRybSwgJnBsYW5lLT5iYXNlX3BsYW5lLAorCQkJCQkgICAg ICAgUE9TU0lCTEVfQ1JUQ1MsICZrbWJfcGxhbmVfZnVuY3MsCisJCQkJCSAgICAgICBwbGFuZV9m b3JtYXRzLCBudW1fcGxhbmVfZm9ybWF0cywKKwkJCQkJICAgICAgIE5VTEwsIHBsYW5lX3R5cGUs ICJwbGFuZSAlZCIsIGkpOworCQlpZiAocmV0IDwgMCkgeworCQkJZHJtX2Vycihkcm0sICJkcm1f dW5pdmVyc2FsX3BsYW5lX2luaXQgZmFpbGVkIChyZXQ9JWQpIiwKKwkJCQlyZXQpOworCQkJZ290 byBjbGVhbnVwOworCQl9CisJCWRybV9kYmcoZHJtLCAiJXMgOiAlZCBpPSVkIHR5cGU9JWQiLAor CQkJX19mdW5jX18sIF9fTElORV9fLAorCQkJICBpLCBwbGFuZV90eXBlKTsKKwkJZHJtX3BsYW5l X2hlbHBlcl9hZGQoJnBsYW5lLT5iYXNlX3BsYW5lLAorCQkJCSAgICAgJmttYl9wbGFuZV9oZWxw ZXJfZnVuY3MpOworCQlpZiAocGxhbmVfdHlwZSA9PSBEUk1fUExBTkVfVFlQRV9QUklNQVJZKSB7 CisJCQlwcmltYXJ5ID0gcGxhbmU7CisJCQlrbWItPnBsYW5lID0gcGxhbmU7CisJCX0KKwkJZHJt X2RiZyhkcm0sICIlcyA6ICVkIHByaW1hcnk9JXBcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywKKwkJ CSZwcmltYXJ5LT5iYXNlX3BsYW5lKTsKKwkJcGxhbmUtPmlkID0gaTsKKwl9CisKKwlyZXR1cm4g cHJpbWFyeTsKK2NsZWFudXA6CisJZHJtbV9rZnJlZShkcm0sIHBsYW5lKTsKKwlyZXR1cm4gRVJS X1BUUihyZXQpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2ttYi9rbWJfcGxhbmUu aCBiL2RyaXZlcnMvZ3B1L2RybS9rbWIva21iX3BsYW5lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uMTQxY2RhYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9rbWIva21iX3BsYW5lLmgKQEAgLTAsMCArMSwxMTAgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBHUEwtMi4wLW9ubHkKKyAqCisgKiBDb3B5cmlnaHQgwqkgMjAxOC0yMDIwIEludGVs IENvcnBvcmF0aW9uCisgKi8KKworI2lmbmRlZiBfX0tNQl9QTEFORV9IX18KKyNkZWZpbmUgX19L TUJfUExBTkVfSF9fCisKK2V4dGVybiBpbnQga21iX3VuZGVyX2Zsb3c7CitleHRlcm4gaW50IGtt Yl9mbHVzaF9kb25lOworCisjZGVmaW5lIExDRF9JTlRfVkwwX0VSUiAoKExBWUVSMF9ETUFfRklG T19VTkRFUkZMT1cpIHwgXAorCQkJKExBWUVSMF9ETUFfRklGT19PVkVSRkxPVykgfCBcCisJCQko TEFZRVIwX0RNQV9DQl9GSUZPX09WRVJGTE9XKSB8IFwKKwkJCShMQVlFUjBfRE1BX0NCX0ZJRk9f VU5ERVJGTE9XKSB8IFwKKwkJCShMQVlFUjBfRE1BX0NSX0ZJRk9fT1ZFUkZMT1cpIHwgXAorCQkJ KExBWUVSMF9ETUFfQ1JfRklGT19VTkRFUkZMT1cpKQorCisjZGVmaW5lIExDRF9JTlRfVkwxX0VS UiAoKExBWUVSMV9ETUFfRklGT19VTkRFUkZMT1cpIHwgXAorCQkJKExBWUVSMV9ETUFfRklGT19P VkVSRkxPVykgfCBcCisJCQkoTEFZRVIxX0RNQV9DQl9GSUZPX09WRVJGTE9XKSB8IFwKKwkJCShM QVlFUjFfRE1BX0NCX0ZJRk9fVU5ERVJGTE9XKSB8IFwKKwkJCShMQVlFUjFfRE1BX0NSX0ZJRk9f T1ZFUkZMT1cpIHwgXAorCQkJKExBWUVSMV9ETUFfQ1JfRklGT19VTkRFUkZMT1cpKQorCisjZGVm aW5lIExDRF9JTlRfR0wwX0VSUiAoTEFZRVIyX0RNQV9GSUZPX09WRVJGTE9XIHwgTEFZRVIyX0RN QV9GSUZPX1VOREVSRkxPVykKKyNkZWZpbmUgTENEX0lOVF9HTDFfRVJSIChMQVlFUjNfRE1BX0ZJ Rk9fT1ZFUkZMT1cgfCBMQVlFUjNfRE1BX0ZJRk9fVU5ERVJGTE9XKQorI2RlZmluZSBMQ0RfSU5U X1ZMMCAoTEFZRVIwX0RNQV9ET05FIHwgTEFZRVIwX0RNQV9JRExFIHwgTENEX0lOVF9WTDBfRVJS KQorI2RlZmluZSBMQ0RfSU5UX1ZMMSAoTEFZRVIxX0RNQV9ET05FIHwgTEFZRVIxX0RNQV9JRExF IHwgTENEX0lOVF9WTDFfRVJSKQorI2RlZmluZSBMQ0RfSU5UX0dMMCAoTEFZRVIyX0RNQV9ET05F IHwgTEFZRVIyX0RNQV9JRExFIHwgTENEX0lOVF9HTDBfRVJSKQorI2RlZmluZSBMQ0RfSU5UX0dM MSAoTEFZRVIzX0RNQV9ET05FIHwgTEFZRVIzX0RNQV9JRExFIHwgTENEX0lOVF9HTDFfRVJSKQor I2RlZmluZSBMQ0RfSU5UX0RNQV9FUlIgKExDRF9JTlRfVkwwX0VSUiB8IExDRF9JTlRfVkwxX0VS UiBcCisJCXwgTENEX0lOVF9HTDBfRVJSIHwgTENEX0lOVF9HTDFfRVJSKQorCisjZGVmaW5lIFBP U1NJQkxFX0NSVENTIDEKKyNkZWZpbmUgdG9fa21iX3BsYW5lKHgpIGNvbnRhaW5lcl9vZih4LCBz dHJ1Y3Qga21iX3BsYW5lLCBiYXNlX3BsYW5lKQorCitlbnVtIGxheWVyX2lkIHsKKwlMQVlFUl8w LAorCUxBWUVSXzEsCisJTEFZRVJfMiwKKwlMQVlFUl8zLAorCS8qIEtNQl9NQVhfUExBTkVTICov Cit9OworCisjZGVmaW5lIEtNQl9NQVhfUExBTkVTIDEKKworZW51bSBzdWJfcGxhbmVfaWQgewor CVlfUExBTkUsCisJVV9QTEFORSwKKwlWX1BMQU5FLAorCU1BWF9TVUJfUExBTkVTLAorfTsKKwor c3RydWN0IGttYl9wbGFuZSB7CisJc3RydWN0IGRybV9wbGFuZSBiYXNlX3BsYW5lOworCXVuc2ln bmVkIGNoYXIgaWQ7Cit9OworCisvKiBHcmFwaGljcyBsYXllciAobGF5ZXJzIDIgJiAzKSBmb3Jt YXRzLCBvbmx5IHBhY2tlZCBmb3JtYXRzICBhcmUgc3VwcG9ydGVkICovCitzdGF0aWMgY29uc3Qg dTMyIGttYl9mb3JtYXRzX2dbXSA9IHsKKwlEUk1fRk9STUFUX1JHQjMzMiwKKwlEUk1fRk9STUFU X1hSR0I0NDQ0LCBEUk1fRk9STUFUX1hCR1I0NDQ0LAorCURSTV9GT1JNQVRfQVJHQjQ0NDQsIERS TV9GT1JNQVRfQUJHUjQ0NDQsCisJRFJNX0ZPUk1BVF9YUkdCMTU1NSwgRFJNX0ZPUk1BVF9YQkdS MTU1NSwKKwlEUk1fRk9STUFUX0FSR0IxNTU1LCBEUk1fRk9STUFUX0FCR1IxNTU1LAorCURSTV9G T1JNQVRfUkdCNTY1LCBEUk1fRk9STUFUX0JHUjU2NSwKKwlEUk1fRk9STUFUX1JHQjg4OCwgRFJN X0ZPUk1BVF9CR1I4ODgsCisJRFJNX0ZPUk1BVF9YUkdCODg4OCwgRFJNX0ZPUk1BVF9YQkdSODg4 OCwKKwlEUk1fRk9STUFUX0FSR0I4ODg4LCBEUk1fRk9STUFUX0FCR1I4ODg4LAorfTsKKworI2Rl ZmluZSBNQVhfRk9STUFUX0cJKEFSUkFZX1NJWkUoa21iX2Zvcm1hdHNfZykpCisjZGVmaW5lIE1B WF9GT1JNQVRfVgkoQVJSQVlfU0laRShrbWJfZm9ybWF0c192KSkKKworLyogVmlkZW8gbGF5ZXIg KCAwICYgMSkgZm9ybWF0cywgcGFja2VkIGFuZCBwbGFuYXIgZm9ybWF0cyBhcmUgc3VwcG9ydGVk ICovCitzdGF0aWMgY29uc3QgdTMyIGttYl9mb3JtYXRzX3ZbXSA9IHsKKwkvKiBwYWNrZWQgZm9y bWF0cyAqLworCURSTV9GT1JNQVRfUkdCMzMyLAorCURSTV9GT1JNQVRfWFJHQjQ0NDQsIERSTV9G T1JNQVRfWEJHUjQ0NDQsCisJRFJNX0ZPUk1BVF9BUkdCNDQ0NCwgRFJNX0ZPUk1BVF9BQkdSNDQ0 NCwKKwlEUk1fRk9STUFUX1hSR0IxNTU1LCBEUk1fRk9STUFUX1hCR1IxNTU1LAorCURSTV9GT1JN QVRfQVJHQjE1NTUsIERSTV9GT1JNQVRfQUJHUjE1NTUsCisJRFJNX0ZPUk1BVF9SR0I1NjUsIERS TV9GT1JNQVRfQkdSNTY1LAorCURSTV9GT1JNQVRfUkdCODg4LCBEUk1fRk9STUFUX0JHUjg4OCwK KwlEUk1fRk9STUFUX1hSR0I4ODg4LCBEUk1fRk9STUFUX1hCR1I4ODg4LAorCURSTV9GT1JNQVRf QVJHQjg4ODgsIERSTV9GT1JNQVRfQUJHUjg4ODgsCisJLypwbGFuYXIgZm9ybWF0cyAqLworCURS TV9GT1JNQVRfWVVWNDIwLCBEUk1fRk9STUFUX1lWVTQyMCwKKwlEUk1fRk9STUFUX1lVVjQyMiwg RFJNX0ZPUk1BVF9ZVlU0MjIsCisJRFJNX0ZPUk1BVF9ZVVY0NDQsIERSTV9GT1JNQVRfWVZVNDQ0 LAorCURSTV9GT1JNQVRfTlYxMiwgRFJNX0ZPUk1BVF9OVjIxLAorfTsKKworLyogQ29udmVyc2lv biAoeXV2LT5yZ2IpIG1hdHJpeCBmcm9tIG15cmlhZHggKi8KK3N0YXRpYyBjb25zdCB1MzIgY3Nj X2NvZWZfbGNkW10gPSB7CisJMTAyNCwgMCwgMTQzNiwKKwkxMDI0LCAtMzUyLCAtNzMxLAorCTEw MjQsIDE4MTQsIDAsCisJLTE3OSwgMTI1LCAtMjI2Cit9OworCitzdHJ1Y3QgbGF5ZXJfc3RhdHVz IHsKKwlib29sIGRpc2FibGU7CisJdTMyIGN0cmw7Cit9OworCitzdHJ1Y3Qga21iX3BsYW5lICpr bWJfcGxhbmVfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKTsKK3ZvaWQga21iX3BsYW5lX2Rl c3Ryb3koc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpOworI2VuZGlmIC8qIF9fS01CX1BMQU5FX0hf XyAqLwotLSAKMi43LjQKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1k ZXZlbAo=