From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: [PATCH 3/8] drm/i915/pmu: Expose a PMU interface for perf queries Date: Mon, 18 Sep 2017 12:38:09 +0100 Message-ID: <20170918113814.2591-4-tvrtko.ursulin@linux.intel.com> References: <20170918113814.2591-1-tvrtko.ursulin@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x22f.google.com (mail-wm0-x22f.google.com [IPv6:2a00:1450:400c:c09::22f]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1148F6E344 for ; Mon, 18 Sep 2017 11:38:25 +0000 (UTC) Received: by mail-wm0-x22f.google.com with SMTP id a137so12708768wma.0 for ; Mon, 18 Sep 2017 04:38:24 -0700 (PDT) In-Reply-To: <20170918113814.2591-1-tvrtko.ursulin@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Intel-gfx@lists.freedesktop.org Cc: Peter Zijlstra List-Id: intel-gfx@lists.freedesktop.org RnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KCkZyb206IENo cmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgpGcm9tOiBUdnJ0a28gVXJzdWxp biA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgpGcm9tOiBEbWl0cnkgUm9nb3poa2luIDxkbWl0 cnkudi5yb2dvemhraW5AaW50ZWwuY29tPgoKVGhlIGZpcnN0IGdvYWwgaXMgdG8gYmUgYWJsZSB0 byBtZWFzdXJlIEdQVSAoYW5kIGludmlkdWFsIHJpbmcpIGJ1c3luZXNzCndpdGhvdXQgaGF2aW5n IHRvIHBvbGwgcmVnaXN0ZXJzIGZyb20gdXNlcnNwYWNlLiAoV2hpY2ggbm90IG9ubHkgaW5jdXJz CmhvbGRpbmcgdGhlIGZvcmNld2FrZSBsb2NrIGluZGVmaW5pdGVseSwgcGVydHVyYmluZyB0aGUg c3lzdGVtLCBidXQgYWxzbwpydW5zIHRoZSByaXNrIG9mIGhhbmdpbmcgdGhlIG1hY2hpbmUuKSBB cyBhbiBhbHRlcm5hdGl2ZSB3ZSBjYW4gdXNlIHRoZQpwZXJmIGV2ZW50IGNvdW50ZXIgaW50ZXJm YWNlIHRvIHNhbXBsZSB0aGUgcmluZyByZWdpc3RlcnMgcGVyaW9kaWNhbGx5CmFuZCBzZW5kIHRo b3NlIHJlc3VsdHMgdG8gdXNlcnNwYWNlLgoKVG8gYmUgYWJsZSB0byBkbyBzbywgd2UgbmVlZCB0 byBleHBvcnQgdGhlIHR3byBzeW1ib2xzIGZyb20Ka2VybmVsL2V2ZW50cy9jb3JlLmMgdG8gcmVn aXN0ZXIgYW5kIHVucmVnaXN0ZXIgYSBQTVUgZGV2aWNlLgoKdjEtdjIgKENocmlzIFdpbHNvbik6 Cgp2MjogVXNlIGEgY29tbW9uIHRpbWVyIGZvciB0aGUgcmluZyBzYW1wbGluZy4KCnYzOiAoVHZy dGtvIFVyc3VsaW4pCiAqIERlY291cGxlIHVBUEkgZnJvbSBpOTE1IGVuZ2luZSBpZHMuCiAqIENv bXBsZXRlIHVBUEkgZGVmaW5lcy4KICogUmVmYWN0b3Igc29tZSBjb2RlIHRvIGhlbHBlcnMgZm9y IGNsYXJpdHkuCiAqIFNraXAgc2FtcGxpbmcgZGlzYWJsZWQgZW5naW5lcy4KICogRXhwb3NlIGNv dW50ZXJzIGluIHN5c2ZzLgogKiBQYXNzIGluIGZha2UgcmVncyB0byBhdm9pZCBudWxsIHB0ciBk ZXJlZiBpbiBwZXJmIGNvcmUuCiAqIENvbnZlcnQgdG8gY2xhc3MvaW5zdGFuY2UgdUFQSS4KICog VXNlIHNoYXJlZCBkcml2ZXIgY29kZSBmb3IgcmM2IHJlc2lkZW5jeSwgcG93ZXIgYW5kIGZyZXF1 ZW5jeS4KCnY0OiAoRG1pdHJ5IFJvZ296aGtpbikKICogUmVnaXN0ZXIgUE1VIHdpdGggLnRhc2tf Y3R4X25yPXBlcmZfaW52YWxpZF9jb250ZXh0CiAqIEV4cG9zZSBjcHVtYXNrIGZvciB0aGUgUE1V IHdpdGggdGhlIHNpbmdsZSBDUFUgaW4gdGhlIG1hc2sKICogUHJvcGVybHkgc3VwcG9ydCBwbXUt PnN0b3AoKTogaXQgc2hvdWxkIGNhbGwgcG11LT5yZWFkKCkKICogUHJvcGVybHkgc3VwcG9ydCBw bXUtPmRlbCgpOiBpdCBzaG91bGQgY2FsbCBzdG9wKGV2ZW50LCBQRVJGX0VGX1VQREFURSkKICog SW50cm9kdWNlIHJlZmNvdW50aW5nIG9mIGV2ZW50IHN1YnNjcmlwdGlvbnMuCiAqIE1ha2UgcG11 LmJ1c3lfc3RhdHMgYSByZWZjb3VudGVyIHRvIGF2b2lkIGJ1c3kgc3RhdHMgZ29pbmcgYXdheQog ICB3aXRoIHNvbWUgZGVsZXRlZCBldmVudC4KICogRXhwb3NlIGNwdW1hc2sgZm9yIGk5MTUgUE1V IHRvIGF2b2lkIG11bHRpcGxlIGV2ZW50cyBjcmVhdGlvbiBvZgogICB0aGUgc2FtZSB0eXBlIGZv bGxvd2VkIGJ5IGNvdW50ZXIgYWdncmVnYXRpb24gYnkgcGVyZi1zdGF0LgogKiBUcmFjayBDUFVz IGdldHRpbmcgb25saW5lL29mZmxpbmUgdG8gbWlncmF0ZSBwZXJmIGNvbnRleHQuIElmIChsaWtl bHkpCiAgIGNwdW1hc2sgd2lsbCBpbml0aWFsbHkgc2V0IENQVTAsIENPTkZJR19CT09UUEFSQU1f SE9UUExVR19DUFUwIHdpbGwgYmUKICAgbmVlZGVkIHRvIHNlZSBlZmZlY3Qgb2YgQ1BVIHN0YXR1 cyB0cmFja2luZy4KICogRW5kIHJlc3VsdCBpcyB0aGF0IG9ubHkgZ2xvYmFsIGV2ZW50cyBhcmUg c3VwcG9ydGVkIGFuZCBwZXJmIHN0YXQKICAgd29ya3MgY29ycmVjdGx5LgogKiBEZW55IHBlcmYg ZHJpdmVyIGxldmVsIHNhbXBsaW5nIC0gaXQgaXMgcHJvaGliaXRlZCBmb3IgdW5jb3JlIFBNVS4K CnY1OiAoVHZydGtvIFVyc3VsaW4pCgogKiBEb24ndCBoYXJkY29kZSBudW1iZXIgb2YgZW5naW5l IHNhbXBsZXJzLgogKiBSZXdyaXRlIGV2ZW50IHJlZi1jb3VudGluZyBmb3IgY29ycmVjdG5lc3Mg YW5kIHNpbXBsaWNpdHkuCiAqIFN0b3JlIGluaXRpYWwgY291bnRlciB2YWx1ZSB3aGVuIHN0YXJ0 aW5nIGFscmVhZHkgZW5hYmxlZCBldmVudHMKICAgdG8gY29ycmVjdGx5IHJlcG9ydCB2YWx1ZXMg dG8gYWxsIGxpc3RlbmVycy4KICogRml4IFJDNiByZXNpZGVuY3kgcmVhZG91dC4KICogQ29tbWVu dHMsIEdQTCBoZWFkZXIuCgp2NjoKICogQWRkIG1pc3NpbmcgZW50cnkgdG8gdjQgY2hhbmdlbG9n LgogKiBGaXggYWNjb3VudGluZyBpbiBDUFUgaG90cGx1ZyBjYXNlIGJ5IGNvcHlpbmcgdGhlIGFw cHJvYWNoIGZyb20KICAgYXJjaC94ODYvZXZlbnRzL2ludGVsL2NzdGF0ZS5jLiAoRG1pdHJ5IFJv Z296aGtpbikKCnY3OgogKiBMb2cgZmFpbHVyZSBtZXNzYWdlIG9ubHkgb24gZmFpbHVyZS4KICog UmVtb3ZlIENQVSBob3RwbHVnIG5vdGlmaWNhdGlvbiBzdGF0ZSBvbiB1bnJlZ2lzdGVyLgoKdjg6 CiAqIEZpeCBlcnJvciB1bndpbmQgb24gZmFpbGVkIHJlZ2lzdHJhdGlvbi4KICogQ2hlY2twYXRj aCBjbGVhbnVwLgoKdjk6CiAqIERyb3AgdGhlIGVuZXJneSBtZXRyaWMsIGl0IGlzIGF2YWlsYWJs ZSB2aWEgaW50ZWxfcmFwbF9wZXJmLgogICAoVmlsbGUgU3lyasOkbMOkKQogKiBVc2UgSEFTX1JD NihwKS4gKENocmlzIFdpbHNvbikKICogSGFuZGxlIHVuc3VwcG9ydGVkIG5vbi1lbmdpbmUgZXZl bnRzLiAoRG1pdHJ5IFJvZ296aGtpbikKICogUmViYXNlIGZvciBpbnRlbF9yYzZfcmVzaWRlbmN5 X25zIG5lZWRpbmcgY2FsbGVyIG1hbmFnZWQKICAgcnVudGltZSBwbS4KICogRHJvcCBIQVNfUkM2 IGNoZWNrcyBmcm9tIHRoZSByZWFkIGNhbGxiYWNrIHNpbmNlIGNyZWF0aW5nIHRob3NlCiAgIGV2 ZW50cyB3aWxsIGJlIHJlamVjdGVkIGF0IGluaXQgdGltZSBhbHJlYWR5LgogKiBBZGQgY291bnRl ciB1bml0cyB0byBzeXNmcyBzbyBwZXJmIHN0YXQgb3V0cHV0IGlzIG5pY2VyLgogKiBDbGVhbnVw IHRoZSBhdHRyaWJ1dGUgdGFibGVzIGZvciBicmV2aXR5IGFuZCByZWFkYWJpbGl0eS4KClNpZ25l ZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgpTaWduZWQt b2ZmLWJ5OiBUdnJ0a28gVXJzdWxpbiA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgpTaWduZWQt b2ZmLWJ5OiBEbWl0cnkgUm9nb3poa2luIDxkbWl0cnkudi5yb2dvemhraW5AaW50ZWwuY29tPgpD YzogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KQ2M6IENocmlzIFdp bHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgpDYzogRG1pdHJ5IFJvZ296aGtpbiA8ZG1p dHJ5LnYucm9nb3poa2luQGludGVsLmNvbT4KQ2M6IFBldGVyIFppamxzdHJhIDxwZXRlcnpAaW5m cmFkZWFkLm9yZz4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSAgICAgICAgICAg fCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyAgICAgICAgIHwgICAyICsK IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggICAgICAgICB8ICA3OCArKysrCiBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BtdS5jICAgICAgICAgfCA3MDUgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmggICAgICAg ICB8ICAgMyArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9lbmdpbmVfY3MuYyAgfCAgMTAg KwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jIHwgIDI1ICsrCiBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmggfCAgMjUgKysKIGluY2x1ZGUvdWFw aS9kcm0vaTkxNV9kcm0uaCAgICAgICAgICAgICB8ICA1NyArKysKIDkgZmlsZXMgY2hhbmdlZCwg OTA2IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X3BtdS5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQppbmRleCAxY2I4MDU5YTNhMTYuLjdiM2Ew ZWNhNjJiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKQEAgLTI2LDYgKzI2LDcgQEAgaTkxNS15IDo9 IGk5MTVfZHJ2Lm8gXAogCiBpOTE1LSQoQ09ORklHX0NPTVBBVCkgICArPSBpOTE1X2lvYzMyLm8K IGk5MTUtJChDT05GSUdfREVCVUdfRlMpICs9IGk5MTVfZGVidWdmcy5vIGludGVsX3BpcGVfY3Jj Lm8KK2k5MTUtJChDT05GSUdfUEVSRl9FVkVOVFMpICs9IGk5MTVfcG11Lm8KIAogIyBHRU0gY29k ZQogaTkxNS15ICs9IGk5MTVfY21kX3BhcnNlci5vIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCmlu ZGV4IDVjMTExZWE5NmU4MC4uYjFmOTZlYjFiZTE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMK QEAgLTExOTYsNiArMTE5Niw3IEBAIHN0YXRpYyB2b2lkIGk5MTVfZHJpdmVyX3JlZ2lzdGVyKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 ID0gJmRldl9wcml2LT5kcm07CiAKIAlpOTE1X2dlbV9zaHJpbmtlcl9pbml0KGRldl9wcml2KTsK KwlpOTE1X3BtdV9yZWdpc3RlcihkZXZfcHJpdik7CiAKIAkvKgogCSAqIE5vdGlmeSBhIHZhbGlk IHN1cmZhY2UgYWZ0ZXIgbW9kZXNldHRpbmcsCkBAIC0xMjUwLDYgKzEyNTEsNyBAQCBzdGF0aWMg dm9pZCBpOTE1X2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdikKIAlpbnRlbF9vcHJlZ2lvbl91bnJlZ2lzdGVyKGRldl9wcml2KTsKIAogCWk5MTVfcGVy Zl91bnJlZ2lzdGVyKGRldl9wcml2KTsKKwlpOTE1X3BtdV91bnJlZ2lzdGVyKGRldl9wcml2KTsK IAogCWk5MTVfdGVhcmRvd25fc3lzZnMoZGV2X3ByaXYpOwogCWk5MTVfZ3VjX2xvZ191bnJlZ2lz dGVyKGRldl9wcml2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2 LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4IDdkM2Y1YTVjMjQ1NC4u ODI0MzcyMDM3NjcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5o CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKQEAgLTQwLDYgKzQwLDcgQEAK ICNpbmNsdWRlIDxsaW51eC9oYXNoLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZWwtaW9tbXUuaD4K ICNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgog I2luY2x1ZGUgPGxpbnV4L3BtX3Fvcy5oPgogI2luY2x1ZGUgPGxpbnV4L3Jlc2VydmF0aW9uLmg+ CiAjaW5jbHVkZSA8bGludXgvc2htZW1fZnMuaD4KQEAgLTIxOTcsNiArMjE5OCw3MCBAQCBzdHJ1 Y3QgaW50ZWxfY2RjbGtfc3RhdGUgewogCXVuc2lnbmVkIGludCBjZGNsaywgdmNvLCByZWY7CiB9 OwogCitlbnVtIHsKKwlfX0k5MTVfU0FNUExFX0ZSRVFfQUNUID0gMCwKKwlfX0k5MTVfU0FNUExF X0ZSRVFfUkVRLAorCV9fSTkxNV9OVU1fUE1VX1NBTVBMRVJTCit9OworCisvKioKKyAqIEhvdyBt YW55IGRpZmZlcmVudCBldmVudHMgd2UgdHJhY2sgaW4gdGhlIGdsb2JhbCBQTVUgbWFzay4KKyAq CisgKiBJdCBpcyBhbHNvIHVzZWQgdG8ga25vdyB0byBuZWVkZWQgbnVtYmVyIG9mIGV2ZW50IHJl ZmVyZW5jZSBjb3VudGVycy4KKyAqLworI2RlZmluZSBJOTE1X1BNVV9NQVNLX0JJVFMgXAorCSgo MSA8PCBJOTE1X1BNVV9TQU1QTEVfQklUUykgKyBcCisJIChJOTE1X1BNVV9MQVNUICsgMSAtIF9f STkxNV9QTVVfT1RIRVIoMCkpKQorCitzdHJ1Y3QgaTkxNV9wbXUgeworCS8qKgorCSAqIEBub2Rl OiBMaXN0IG5vZGUgZm9yIENQVSBob3RwbHVnIGhhbmRsaW5nLgorCSAqLworCXN0cnVjdCBobGlz dF9ub2RlIG5vZGU7CisJLyoqCisJICogQGJhc2U6IFBNVSBiYXNlLgorCSAqLworCXN0cnVjdCBw bXUgYmFzZTsKKwkvKioKKwkgKiBAbG9jazogTG9jayBwcm90ZWN0aW5nIGVuYWJsZSBtYXNrIGFu ZCByZWYgY291bnQgaGFuZGxpbmcuCisJICovCisJc3BpbmxvY2tfdCBsb2NrOworCS8qKgorCSAq IEB0aW1lcjogVGltZXIgZm9yIGludGVybmFsIGk5MTUgUE1VIHNhbXBsaW5nLgorCSAqLworCXN0 cnVjdCBocnRpbWVyIHRpbWVyOworCS8qKgorCSAqIEBlbmFibGU6IEJpdG1hc2sgb2YgYWxsIGN1 cnJlbnRseSBlbmFibGVkIGV2ZW50cy4KKwkgKgorCSAqIEJpdHMgYXJlIGRlcml2ZWQgZnJvbSB1 QVBJIGV2ZW50IG51bWJlcnMgaW4gYSB3YXkgdGhhdCBsb3cgMTYgYml0cworCSAqIGNvcnJlc3Bv bmQgdG8gZW5naW5lIGV2ZW50IF9zYW1wbGVfIF90eXBlXyAoSTkxNV9TQU1QTEVfUVVFVUVEIGlz CisJICogYml0IDApLCBhbmQgaGlnaGVyIGJpdHMgY29ycmVzcG9uZCB0byBvdGhlciBldmVudHMg KGZvciBpbnN0YW5jZQorCSAqIEk5MTVfUE1VX0FDVFVBTF9GUkVRVUVOQ1kgaXMgYml0IDE2IGV0 YykuCisJICoKKwkgKiBJbiBvdGhlciB3b3JkcywgbG93IDE2IGJpdHMgYXJlIG5vdCBwZXIgZW5n aW5lIGJ1dCBwZXIgZW5naW5lCisJICogc2FtcGxlciB0eXBlLCB3aGlsZSB0aGUgdXBwZXIgYml0 cyBhcmUgZGlyZWN0bHkgbWFwcGVkIHRvIG90aGVyCisJICogZXZlbnQgdHlwZXMuCisJICovCisJ dTY0IGVuYWJsZTsKKwkvKioKKwkgKiBAZW5hYmxlX2NvdW50OiBSZWZlcmVuY2UgY291bnRzIGZv ciB0aGUgZW5hYmxlZCBldmVudHMuCisJICoKKwkgKiBBcnJheSBpbmRpY2VzIGFyZSBtYXBwZWQg aW4gdGhlIHNhbWUgd2F5IGFzIGJpdHMgaW4gdGhlIEBlbmFibGUgZmllbGQKKwkgKiBhbmQgdGhl eSBhcmUgdXNlZCB0byBjb250cm9sIHNhbXBsaW5nIG9uL29mZiB3aGVuIG11bHRpcGxlIGNsaWVu dHMKKwkgKiBhcmUgdXNpbmcgdGhlIFBNVSBBUEkuCisJICovCisJdW5zaWduZWQgaW50IGVuYWJs ZV9jb3VudFtJOTE1X1BNVV9NQVNLX0JJVFNdOworCS8qKgorCSAqIEBzYW1wbGU6IEN1cnJlbnQg Y291bnRlciB2YWx1ZSBmb3IgaTkxNSBldmVudHMgd2hpY2ggbmVlZCBzYW1wbGluZy4KKwkgKgor CSAqIFRoZXNlIGNvdW50ZXJzIGFyZSB1cGRhdGVkIGZyb20gdGhlIGk5MTUgUE1VIHNhbXBsaW5n IHRpbWVyLgorCSAqCisJICogT25seSBnbG9iYWwgY291bnRlcnMgYXJlIGhlbGQgaGVyZSwgd2hp bGUgdGhlIHBlci1lbmdpbmUgb25lcyBhcmUgaW4KKwkgKiBzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz LgorCSAqLworCXU2NCBzYW1wbGVbX19JOTE1X05VTV9QTVVfU0FNUExFUlNdOworfTsKKwogc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgewogCXN0cnVjdCBkcm1fZGV2aWNlIGRybTsKIApAQCAtMjI0 NSw2ICsyMzEwLDggQEAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgewogCXN0cnVjdCBwY2lfZGV2 ICpicmlkZ2VfZGV2OwogCXN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICprZXJuZWxfY29udGV4dDsK IAlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmVbSTkxNV9OVU1fRU5HSU5FU107CisJc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lX2NsYXNzW01BWF9FTkdJTkVfQ0xBU1MgKyAxXQor CQkJCQkgICAgW01BWF9FTkdJTkVfSU5TVEFOQ0UgKyAxXTsKIAlzdHJ1Y3QgaTkxNV92bWEgKnNl bWFwaG9yZTsKIAogCXN0cnVjdCBkcm1fZG1hX2hhbmRsZSAqc3RhdHVzX3BhZ2VfZG1haDsKQEAg LTI3MDcsNiArMjc3NCw4IEBAIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIHsKIAkJaW50CWlycTsK IAl9IGxwZV9hdWRpbzsKIAorCXN0cnVjdCBpOTE1X3BtdSBwbXU7CisKIAkvKgogCSAqIE5PVEU6 IFRoaXMgaXMgdGhlIGRyaTEvdW1zIGR1bmdlb24sIGRvbid0IGFkZCBzdHVmZiBoZXJlLiBZb3Vy IHBhdGNoCiAJICogd2lsbCBiZSByZWplY3RlZC4gSW5zdGVhZCBsb29rIGZvciBhIGJldHRlciBw bGFjZS4KQEAgLTM5MjksNiArMzk5OCwxNSBAQCBleHRlcm4gdm9pZCBpOTE1X3BlcmZfZmluaShz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwogZXh0ZXJuIHZvaWQgaTkxNV9wZXJm X3JlZ2lzdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CiBleHRlcm4gdm9p ZCBpOTE1X3BlcmZfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYp OwogCisvKiBpOTE1X3BtdS5jICovCisjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTCit2b2lkIGk5 MTVfcG11X3JlZ2lzdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KTsKK3ZvaWQgaTkx NV9wbXVfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSk7CisjZWxzZQor c3RhdGljIGlubGluZSB2b2lkIGk5MTVfcG11X3JlZ2lzdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICppOTE1KSB7fQorc3RhdGljIGlubGluZSB2b2lkIGk5MTVfcG11X3VucmVnaXN0ZXIoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpIHt9CisjZW5kaWYKKwogLyogaTkxNV9zdXNwZW5k LmMgKi8KIGV4dGVybiBpbnQgaTkxNV9zYXZlX3N0YXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdik7CiBleHRlcm4gaW50IGk5MTVfcmVzdG9yZV9zdGF0ZShzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9wbXUuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcG11LmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5iMGE5NDJmOGRhNzQKLS0tIC9kZXYvbnVsbAor KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BtdS5jCkBAIC0wLDAgKzEsNzA1IEBACisv KgorICogQ29weXJpZ2h0IMKpIDIwMTcgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNz aW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRh aW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50 YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJl IHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRo ZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRl LCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5k IHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQg dG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRo ZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNs dWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNv cGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAq IFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFO WSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVE IFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFM TAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkg Q0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJ T04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQg T0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVS IERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51 eC9wZXJmX2V2ZW50Lmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgorCisjaW5jbHVk ZSAiaTkxNV9kcnYuaCIKKyNpbmNsdWRlICJpbnRlbF9yaW5nYnVmZmVyLmgiCisKKy8qIEZyZXF1 ZW5jeSBmb3IgdGhlIHNhbXBsaW5nIHRpbWVyIGZvciBldmVudHMgd2hpY2ggbmVlZCBpdC4gKi8K KyNkZWZpbmUgRlJFUVVFTkNZIDIwMAorI2RlZmluZSBQRVJJT0QgbWF4X3QodTY0LCAxMDAwMCwg TlNFQ19QRVJfU0VDIC8gRlJFUVVFTkNZKQorCisjZGVmaW5lIEVOR0lORV9TQU1QTEVfTUFTSyBc CisJKEJJVChJOTE1X1NBTVBMRV9RVUVVRUQpIHwgXAorCSBCSVQoSTkxNV9TQU1QTEVfQlVTWSkg fCBcCisJIEJJVChJOTE1X1NBTVBMRV9XQUlUKSB8IFwKKwkgQklUKEk5MTVfU0FNUExFX1NFTUEp KQorCisjZGVmaW5lIEVOR0lORV9TQU1QTEVfQklUUyAoMSA8PCBJOTE1X1BNVV9TQU1QTEVfQklU UykKKworc3RhdGljIGNwdW1hc2tfdCBpOTE1X3BtdV9jcHVtYXNrID0gQ1BVX01BU0tfTk9ORTsK Kworc3RhdGljIHU4IGVuZ2luZV9jb25maWdfc2FtcGxlKHU2NCBjb25maWcpCit7CisJcmV0dXJu IGNvbmZpZyAmIEk5MTVfUE1VX1NBTVBMRV9NQVNLOworfQorCitzdGF0aWMgdTggZW5naW5lX2V2 ZW50X3NhbXBsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJcmV0dXJuIGVuZ2luZV9j b25maWdfc2FtcGxlKGV2ZW50LT5hdHRyLmNvbmZpZyk7Cit9CisKK3N0YXRpYyB1OCBlbmdpbmVf ZXZlbnRfY2xhc3Moc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXJldHVybiAoZXZlbnQt PmF0dHIuY29uZmlnID4+IEk5MTVfUE1VX0NMQVNTX1NISUZUKSAmIDB4ZmY7Cit9CisKK3N0YXRp YyB1OCBlbmdpbmVfZXZlbnRfaW5zdGFuY2Uoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQorewor CXJldHVybiAoZXZlbnQtPmF0dHIuY29uZmlnID4+IEk5MTVfUE1VX1NBTVBMRV9CSVRTKSAmIDB4 ZmY7Cit9CisKK3N0YXRpYyBib29sIGlzX2VuZ2luZV9jb25maWcodTY0IGNvbmZpZykKK3sKKwly ZXR1cm4gY29uZmlnIDwgX19JOTE1X1BNVV9PVEhFUigwKTsKK30KKworc3RhdGljIHVuc2lnbmVk IGludCBjb25maWdfZW5hYmxlZF9iaXQodTY0IGNvbmZpZykKK3sKKwlpZiAoaXNfZW5naW5lX2Nv bmZpZyhjb25maWcpKQorCQlyZXR1cm4gZW5naW5lX2NvbmZpZ19zYW1wbGUoY29uZmlnKTsKKwll bHNlCisJCXJldHVybiBFTkdJTkVfU0FNUExFX0JJVFMgKyAoY29uZmlnIC0gX19JOTE1X1BNVV9P VEhFUigwKSk7Cit9CisKK3N0YXRpYyB1NjQgY29uZmlnX2VuYWJsZWRfbWFzayh1NjQgY29uZmln KQoreworCXJldHVybiBCSVRfVUxMKGNvbmZpZ19lbmFibGVkX2JpdChjb25maWcpKTsKK30KKwor c3RhdGljIGJvb2wgaXNfZW5naW5lX2V2ZW50KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sK KwlyZXR1cm4gaXNfZW5naW5lX2NvbmZpZyhldmVudC0+YXR0ci5jb25maWcpOworfQorCitzdGF0 aWMgdW5zaWduZWQgaW50IGV2ZW50X2VuYWJsZWRfYml0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVu dCkKK3sKKwlyZXR1cm4gY29uZmlnX2VuYWJsZWRfYml0KGV2ZW50LT5hdHRyLmNvbmZpZyk7Cit9 CisKK3N0YXRpYyBib29sIGdyYWJfZm9yY2V3YWtlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpp OTE1LCBib29sIGZ3KQoreworCWlmICghZncpCisJCWludGVsX3VuY29yZV9mb3JjZXdha2VfZ2V0 KGk5MTUsIEZPUkNFV0FLRV9BTEwpOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lk IGVuZ2luZXNfc2FtcGxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3sKKwlz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7CisJZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQ7 CisJYm9vbCBmdyA9IGZhbHNlOworCisJaWYgKChkZXZfcHJpdi0+cG11LmVuYWJsZSAmIEVOR0lO RV9TQU1QTEVfTUFTSykgPT0gMCkKKwkJcmV0dXJuOworCisJaWYgKCFkZXZfcHJpdi0+Z3QuYXdh a2UpCisJCXJldHVybjsKKworCWlmICghaW50ZWxfcnVudGltZV9wbV9nZXRfaWZfaW5fdXNlKGRl dl9wcml2KSkKKwkJcmV0dXJuOworCisJZm9yX2VhY2hfZW5naW5lKGVuZ2luZSwgZGV2X3ByaXYs IGlkKSB7CisJCXUzMiBlbmFibGUgPSBlbmdpbmUtPnBtdS5lbmFibGU7CisKKwkJaWYgKGk5MTVf c2Vxbm9fcGFzc2VkKGludGVsX2VuZ2luZV9nZXRfc2Vxbm8oZW5naW5lKSwKKwkJCQkgICAgICBp bnRlbF9lbmdpbmVfbGFzdF9zdWJtaXQoZW5naW5lKSkpCisJCQljb250aW51ZTsKKworCQlpZiAo ZW5hYmxlICYgQklUKEk5MTVfU0FNUExFX1FVRVVFRCkpCisJCQllbmdpbmUtPnBtdS5zYW1wbGVb STkxNV9TQU1QTEVfUVVFVUVEXSArPSBQRVJJT0Q7CisKKwkJaWYgKGVuYWJsZSAmIEJJVChJOTE1 X1NBTVBMRV9CVVNZKSkgeworCQkJdTMyIHZhbDsKKworCQkJZncgPSBncmFiX2ZvcmNld2FrZShk ZXZfcHJpdiwgZncpOworCQkJdmFsID0gSTkxNV9SRUFEX0ZXKFJJTkdfTUlfTU9ERShlbmdpbmUt Pm1taW9fYmFzZSkpOworCQkJaWYgKCEodmFsICYgTU9ERV9JRExFKSkKKwkJCQllbmdpbmUtPnBt dS5zYW1wbGVbSTkxNV9TQU1QTEVfQlVTWV0gKz0gUEVSSU9EOworCQl9CisKKwkJaWYgKGVuYWJs ZSAmIChCSVQoSTkxNV9TQU1QTEVfV0FJVCkgfCBCSVQoSTkxNV9TQU1QTEVfU0VNQSkpKSB7CisJ CQl1MzIgdmFsOworCisJCQlmdyA9IGdyYWJfZm9yY2V3YWtlKGRldl9wcml2LCBmdyk7CisJCQl2 YWwgPSBJOTE1X1JFQURfRlcoUklOR19DVEwoZW5naW5lLT5tbWlvX2Jhc2UpKTsKKwkJCWlmICgo ZW5hYmxlICYgQklUKEk5MTVfU0FNUExFX1dBSVQpKSAmJgorCQkJICAgICh2YWwgJiBSSU5HX1dB SVQpKQorCQkJCWVuZ2luZS0+cG11LnNhbXBsZVtJOTE1X1NBTVBMRV9XQUlUXSArPSBQRVJJT0Q7 CisJCQlpZiAoKGVuYWJsZSAmIEJJVChJOTE1X1NBTVBMRV9TRU1BKSkgJiYKKwkJCSAgICAodmFs ICYgUklOR19XQUlUX1NFTUFQSE9SRSkpCisJCQkJZW5naW5lLT5wbXUuc2FtcGxlW0k5MTVfU0FN UExFX1NFTUFdICs9IFBFUklPRDsKKwkJfQorCX0KKworCWlmIChmdykKKwkJaW50ZWxfdW5jb3Jl X2ZvcmNld2FrZV9wdXQoZGV2X3ByaXYsIEZPUkNFV0FLRV9BTEwpOworCWludGVsX3J1bnRpbWVf cG1fcHV0KGRldl9wcml2KTsKK30KKworc3RhdGljIHZvaWQgZnJlcXVlbmN5X3NhbXBsZShzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJaWYgKGRldl9wcml2LT5wbXUuZW5h YmxlICYKKwkgICAgY29uZmlnX2VuYWJsZWRfbWFzayhJOTE1X1BNVV9BQ1RVQUxfRlJFUVVFTkNZ KSkgeworCQl1NjQgdmFsOworCisJCXZhbCA9IGRldl9wcml2LT5ycHMuY3VyX2ZyZXE7CisJCWlm IChkZXZfcHJpdi0+Z3QuYXdha2UgJiYKKwkJICAgIGludGVsX3J1bnRpbWVfcG1fZ2V0X2lmX2lu X3VzZShkZXZfcHJpdikpIHsKKwkJCXZhbCA9IGludGVsX2dldF9jYWdmKGRldl9wcml2LAorCQkJ CQkgICAgIEk5MTVfUkVBRF9OT1RSQUNFKEdFTjZfUlBTVEFUMSkpOworCQkJaW50ZWxfcnVudGlt ZV9wbV9wdXQoZGV2X3ByaXYpOworCQl9CisJCXZhbCA9IGludGVsX2dwdV9mcmVxKGRldl9wcml2 LCB2YWwpOworCQlkZXZfcHJpdi0+cG11LnNhbXBsZVtfX0k5MTVfU0FNUExFX0ZSRVFfQUNUXSAr PSB2YWwgKiBQRVJJT0Q7CisJfQorCisJaWYgKGRldl9wcml2LT5wbXUuZW5hYmxlICYKKwkgICAg Y29uZmlnX2VuYWJsZWRfbWFzayhJOTE1X1BNVV9SRVFVRVNURURfRlJFUVVFTkNZKSkgeworCQl1 NjQgdmFsID0gaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIGRldl9wcml2LT5ycHMuY3VyX2ZyZXEp OworCisJCWRldl9wcml2LT5wbXUuc2FtcGxlW19fSTkxNV9TQU1QTEVfRlJFUV9SRVFdICs9IHZh bCAqIFBFUklPRDsKKwl9Cit9CisKK3N0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBpOTE1X3Nh bXBsZShzdHJ1Y3QgaHJ0aW1lciAqaHJ0aW1lcikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqaTkxNSA9CisJCWNvbnRhaW5lcl9vZihocnRpbWVyLCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSwgcG11LnRpbWVyKTsKKworCWlmIChpOTE1LT5wbXUuZW5hYmxlID09IDApCisJCXJldHVybiBI UlRJTUVSX05PUkVTVEFSVDsKKworCWVuZ2luZXNfc2FtcGxlKGk5MTUpOworCWZyZXF1ZW5jeV9z YW1wbGUoaTkxNSk7CisKKwlocnRpbWVyX2ZvcndhcmRfbm93KGhydGltZXIsIG5zX3RvX2t0aW1l KFBFUklPRCkpOworCXJldHVybiBIUlRJTUVSX1JFU1RBUlQ7Cit9CisKK3N0YXRpYyB1NjQgY291 bnRfaW50ZXJydXB0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKK3sKKwkvKiBvcGVu LWNvZGVkIGtzdGF0X2lycXMoKSAqLworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19k ZXNjKGk5MTUtPmRybS5wZGV2LT5pcnEpOworCXU2NCBzdW0gPSAwOworCWludCBjcHU7CisKKwlp ZiAoIWRlc2MgfHwgIWRlc2MtPmtzdGF0X2lycXMpCisJCXJldHVybiAwOworCisJZm9yX2VhY2hf cG9zc2libGVfY3B1KGNwdSkKKwkJc3VtICs9ICpwZXJfY3B1X3B0cihkZXNjLT5rc3RhdF9pcnFz LCBjcHUpOworCisJcmV0dXJuIHN1bTsKK30KKworc3RhdGljIHZvaWQgaTkxNV9wbXVfZXZlbnRf ZGVzdHJveShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJV0FSTl9PTihldmVudC0+cGFy ZW50KTsKK30KKworc3RhdGljIGludCBlbmdpbmVfZXZlbnRfaW5pdChzdHJ1Y3QgcGVyZl9ldmVu dCAqZXZlbnQpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPQorCQljb250YWlu ZXJfb2YoZXZlbnQtPnBtdSwgdHlwZW9mKCppOTE1KSwgcG11LmJhc2UpOworCisJaWYgKCFpbnRl bF9lbmdpbmVfbG9va3VwX3VzZXIoaTkxNSwgZW5naW5lX2V2ZW50X2NsYXNzKGV2ZW50KSwKKwkJ CQkgICAgICBlbmdpbmVfZXZlbnRfaW5zdGFuY2UoZXZlbnQpKSkKKwkJcmV0dXJuIC1FTk9ERVY7 CisKKwlzd2l0Y2ggKGVuZ2luZV9ldmVudF9zYW1wbGUoZXZlbnQpKSB7CisJY2FzZSBJOTE1X1NB TVBMRV9RVUVVRUQ6CisJY2FzZSBJOTE1X1NBTVBMRV9CVVNZOgorCWNhc2UgSTkxNV9TQU1QTEVf V0FJVDoKKwkJYnJlYWs7CisJY2FzZSBJOTE1X1NBTVBMRV9TRU1BOgorCQlpZiAoSU5URUxfR0VO KGk5MTUpIDwgNikKKwkJCXJldHVybiAtRU5PREVWOworCQlicmVhazsKKwlkZWZhdWx0OgorCQly ZXR1cm4gLUVOT0VOVDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpOTE1X3Bt dV9ldmVudF9pbml0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqaTkxNSA9CisJCWNvbnRhaW5lcl9vZihldmVudC0+cG11LCB0eXBlb2YoKmk5 MTUpLCBwbXUuYmFzZSk7CisJaW50IGNwdSwgcmV0OworCisJaWYgKGV2ZW50LT5hdHRyLnR5cGUg IT0gZXZlbnQtPnBtdS0+dHlwZSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwkvKiB1bnN1cHBvcnRl ZCBtb2RlcyBhbmQgZmlsdGVycyAqLworCWlmIChldmVudC0+YXR0ci5zYW1wbGVfcGVyaW9kKSAv KiBubyBzYW1wbGluZyAqLworCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChoYXNfYnJhbmNoX3N0 YWNrKGV2ZW50KSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaWYgKGV2ZW50LT5jcHUgPCAw KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNwdSA9IGNwdW1hc2tfYW55X2FuZCgmaTkxNV9wbXVf Y3B1bWFzaywKKwkJCSAgICAgIHRvcG9sb2d5X3NpYmxpbmdfY3B1bWFzayhldmVudC0+Y3B1KSk7 CisJaWYgKGNwdSA+PSBucl9jcHVfaWRzKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChpc19l bmdpbmVfZXZlbnQoZXZlbnQpKSB7CisJCXJldCA9IGVuZ2luZV9ldmVudF9pbml0KGV2ZW50KTsK Kwl9IGVsc2UgeworCQlyZXQgPSAwOworCQlzd2l0Y2ggKGV2ZW50LT5hdHRyLmNvbmZpZykgewor CQljYXNlIEk5MTVfUE1VX0lOVEVSUlVQVFM6CisJCQlicmVhazsKKwkJY2FzZSBJOTE1X1BNVV9B Q1RVQUxfRlJFUVVFTkNZOgorCQkJaWYgKElTX1ZBTExFWVZJRVcoaTkxNSkgfHwgSVNfQ0hFUlJZ VklFVyhpOTE1KSkKKwkJCQkgLyogUmVxdWlyZXMgYSBtdXRleCBmb3Igc2FtcGxpbmchICovCisJ CQkJcmV0ID0gLUVOT0RFVjsKKwkJY2FzZSBJOTE1X1BNVV9SRVFVRVNURURfRlJFUVVFTkNZOgor CQkJaWYgKElOVEVMX0dFTihpOTE1KSA8IDYpCisJCQkJcmV0ID0gLUVOT0RFVjsKKwkJCWJyZWFr OworCQljYXNlIEk5MTVfUE1VX1JDNl9SRVNJREVOQ1k6CisJCQlpZiAoIUhBU19SQzYoaTkxNSkp CisJCQkJcmV0ID0gLUVOT0RFVjsKKwkJCWJyZWFrOworCQljYXNlIEk5MTVfUE1VX1JDNnBfUkVT SURFTkNZOgorCQljYXNlIEk5MTVfUE1VX1JDNnBwX1JFU0lERU5DWToKKwkJCWlmICghSEFTX1JD NnAoaTkxNSkpCisJCQkJcmV0ID0gLUVOT0RFVjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJ cmV0ID0gLUVOT0VOVDsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChyZXQpCisJCXJldHVybiBy ZXQ7CisKKwlldmVudC0+Y3B1ID0gY3B1OworCWlmICghZXZlbnQtPnBhcmVudCkKKwkJZXZlbnQt PmRlc3Ryb3kgPSBpOTE1X3BtdV9ldmVudF9kZXN0cm95OworCisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyB1NjQgX19pOTE1X3BtdV9ldmVudF9yZWFkKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkK K3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9CisJCWNvbnRhaW5lcl9vZihldmVu dC0+cG11LCB0eXBlb2YoKmk5MTUpLCBwbXUuYmFzZSk7CisJdTY0IHZhbCA9IDA7CisKKwlpZiAo aXNfZW5naW5lX2V2ZW50KGV2ZW50KSkgeworCQl1OCBzYW1wbGUgPSBlbmdpbmVfZXZlbnRfc2Ft cGxlKGV2ZW50KTsKKwkJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOworCisJCWVuZ2lu ZSA9IGludGVsX2VuZ2luZV9sb29rdXBfdXNlcihpOTE1LAorCQkJCQkJICBlbmdpbmVfZXZlbnRf Y2xhc3MoZXZlbnQpLAorCQkJCQkJICBlbmdpbmVfZXZlbnRfaW5zdGFuY2UoZXZlbnQpKTsKKwor CQlpZiAoV0FSTl9PTl9PTkNFKCFlbmdpbmUpKSB7CisJCQkvKiBEbyBub3RoaW5nICovCisJCX0g ZWxzZSB7CisJCQl2YWwgPSBlbmdpbmUtPnBtdS5zYW1wbGVbc2FtcGxlXTsKKwkJfQorCX0gZWxz ZSB7CisJCXN3aXRjaCAoZXZlbnQtPmF0dHIuY29uZmlnKSB7CisJCWNhc2UgSTkxNV9QTVVfQUNU VUFMX0ZSRVFVRU5DWToKKwkJCXZhbCA9IGk5MTUtPnBtdS5zYW1wbGVbX19JOTE1X1NBTVBMRV9G UkVRX0FDVF07CisJCQlicmVhazsKKwkJY2FzZSBJOTE1X1BNVV9SRVFVRVNURURfRlJFUVVFTkNZ OgorCQkJdmFsID0gaTkxNS0+cG11LnNhbXBsZVtfX0k5MTVfU0FNUExFX0ZSRVFfUkVRXTsKKwkJ CWJyZWFrOworCQljYXNlIEk5MTVfUE1VX0lOVEVSUlVQVFM6CisJCQl2YWwgPSBjb3VudF9pbnRl cnJ1cHRzKGk5MTUpOworCQkJYnJlYWs7CisJCWNhc2UgSTkxNV9QTVVfUkM2X1JFU0lERU5DWToK KwkJCWludGVsX3J1bnRpbWVfcG1fZ2V0KGk5MTUpOworCQkJdmFsID0gaW50ZWxfcmM2X3Jlc2lk ZW5jeV9ucyhpOTE1LAorCQkJCQkJICAgICBJU19WQUxMRVlWSUVXKGk5MTUpID8KKwkJCQkJCSAg ICAgVkxWX0dUX1JFTkRFUl9SQzYgOgorCQkJCQkJICAgICBHRU42X0dUX0dGWF9SQzYpOworCQkJ aW50ZWxfcnVudGltZV9wbV9wdXQoaTkxNSk7CisJCQlicmVhazsKKwkJY2FzZSBJOTE1X1BNVV9S QzZwX1JFU0lERU5DWToKKwkJCWludGVsX3J1bnRpbWVfcG1fZ2V0KGk5MTUpOworCQkJdmFsID0g aW50ZWxfcmM2X3Jlc2lkZW5jeV9ucyhpOTE1LCBHRU42X0dUX0dGWF9SQzZwKTsKKwkJCWludGVs X3J1bnRpbWVfcG1fcHV0KGk5MTUpOworCQkJYnJlYWs7CisJCWNhc2UgSTkxNV9QTVVfUkM2cHBf UkVTSURFTkNZOgorCQkJaW50ZWxfcnVudGltZV9wbV9nZXQoaTkxNSk7CisJCQl2YWwgPSBpbnRl bF9yYzZfcmVzaWRlbmN5X25zKGk5MTUsIEdFTjZfR1RfR0ZYX1JDNnBwKTsKKwkJCWludGVsX3J1 bnRpbWVfcG1fcHV0KGk5MTUpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gdmFsOwor fQorCitzdGF0aWMgdm9pZCBpOTE1X3BtdV9ldmVudF9yZWFkKHN0cnVjdCBwZXJmX2V2ZW50ICpl dmVudCkKK3sKKwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKKwl1NjQg cHJldiwgbmV3OworCithZ2FpbjoKKwlwcmV2ID0gbG9jYWw2NF9yZWFkKCZod2MtPnByZXZfY291 bnQpOworCW5ldyA9IF9faTkxNV9wbXVfZXZlbnRfcmVhZChldmVudCk7CisKKwlpZiAobG9jYWw2 NF9jbXB4Y2hnKCZod2MtPnByZXZfY291bnQsIHByZXYsIG5ldykgIT0gcHJldikKKwkJZ290byBh Z2FpbjsKKworCWxvY2FsNjRfYWRkKG5ldyAtIHByZXYsICZldmVudC0+Y291bnQpOworfQorCitz dGF0aWMgdm9pZCBpOTE1X3BtdV9lbmFibGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQorewor CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0KKwkJY29udGFpbmVyX29mKGV2ZW50LT5w bXUsIHR5cGVvZigqaTkxNSksIHBtdS5iYXNlKTsKKwl1bnNpZ25lZCBpbnQgYml0ID0gZXZlbnRf ZW5hYmxlZF9iaXQoZXZlbnQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tf aXJxc2F2ZSgmaTkxNS0+cG11LmxvY2ssIGZsYWdzKTsKKworCS8qCisJICogU3RhcnQgdGhlIHNh bXBsaW5nIHRpbWVyIHdoZW4gZW5hYmxpbmcgdGhlIGZpcnN0IGV2ZW50LgorCSAqLworCWlmIChp OTE1LT5wbXUuZW5hYmxlID09IDApCisJCWhydGltZXJfc3RhcnRfcmFuZ2VfbnMoJmk5MTUtPnBt dS50aW1lciwKKwkJCQkgICAgICAgbnNfdG9fa3RpbWUoUEVSSU9EKSwgMCwKKwkJCQkgICAgICAg SFJUSU1FUl9NT0RFX1JFTF9QSU5ORUQpOworCisJLyoKKwkgKiBVcGRhdGUgdGhlIGJpdG1hc2sg b2YgZW5hYmxlZCBldmVudHMgYW5kIGluY3JlbWVudAorCSAqIHRoZSBldmVudCByZWZlcmVuY2Ug Y291bnRlci4KKwkgKi8KKwlHRU1fQlVHX09OKGJpdCA+PSBJOTE1X1BNVV9NQVNLX0JJVFMpOwor CUdFTV9CVUdfT04oaTkxNS0+cG11LmVuYWJsZV9jb3VudFtiaXRdID09IH4wKTsKKwlpOTE1LT5w bXUuZW5hYmxlIHw9IEJJVF9VTEwoYml0KTsKKwlpOTE1LT5wbXUuZW5hYmxlX2NvdW50W2JpdF0r KzsKKworCS8qCisJICogRm9yIHBlci1lbmdpbmUgZXZlbnRzIHRoZSBiaXRtYXNrIGFuZCByZWZl cmVuY2UgY291bnRpbmcKKwkgKiBpcyBzdG9yZWQgcGVyIGVuZ2luZS4KKwkgKi8KKwlpZiAoaXNf ZW5naW5lX2V2ZW50KGV2ZW50KSkgeworCQl1OCBzYW1wbGUgPSBlbmdpbmVfZXZlbnRfc2FtcGxl KGV2ZW50KTsKKwkJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOworCisJCWVuZ2luZSA9 IGludGVsX2VuZ2luZV9sb29rdXBfdXNlcihpOTE1LAorCQkJCQkJICBlbmdpbmVfZXZlbnRfY2xh c3MoZXZlbnQpLAorCQkJCQkJICBlbmdpbmVfZXZlbnRfaW5zdGFuY2UoZXZlbnQpKTsKKwkJR0VN X0JVR19PTighZW5naW5lKTsKKwkJZW5naW5lLT5wbXUuZW5hYmxlIHw9IEJJVChzYW1wbGUpOwor CisJCUdFTV9CVUdfT04oc2FtcGxlID49IEk5MTVfUE1VX1NBTVBMRV9CSVRTKTsKKwkJR0VNX0JV R19PTihlbmdpbmUtPnBtdS5lbmFibGVfY291bnRbc2FtcGxlXSA9PSB+MCk7CisJCWVuZ2luZS0+ cG11LmVuYWJsZV9jb3VudFtzYW1wbGVdKys7CisJfQorCisJLyoKKwkgKiBTdG9yZSB0aGUgY3Vy cmVudCBjb3VudGVyIHZhbHVlIHNvIHdlIGNhbiByZXBvcnQgdGhlIGNvcnJlY3QgZGVsdGEKKwkg KiBmb3IgYWxsIGxpc3RlbmVycy4gRXZlbiB3aGVuIHRoZSBldmVudCB3YXMgYWxyZWFkeSBlbmFi bGVkIGFuZCBoYXMKKwkgKiBhbiBleGlzdGluZyBub24temVybyB2YWx1ZS4KKwkgKi8KKwlsb2Nh bDY0X3NldCgmZXZlbnQtPmh3LnByZXZfY291bnQsIF9faTkxNV9wbXVfZXZlbnRfcmVhZChldmVu dCkpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTkxNS0+cG11LmxvY2ssIGZsYWdzKTsK K30KKworc3RhdGljIHZvaWQgaTkxNV9wbXVfZGlzYWJsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZl bnQpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPQorCQljb250YWluZXJfb2Yo ZXZlbnQtPnBtdSwgdHlwZW9mKCppOTE1KSwgcG11LmJhc2UpOworCXVuc2lnbmVkIGludCBiaXQg PSBldmVudF9lbmFibGVkX2JpdChldmVudCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNw aW5fbG9ja19pcnFzYXZlKCZpOTE1LT5wbXUubG9jaywgZmxhZ3MpOworCisJaWYgKGlzX2VuZ2lu ZV9ldmVudChldmVudCkpIHsKKwkJdTggc2FtcGxlID0gZW5naW5lX2V2ZW50X3NhbXBsZShldmVu dCk7CisJCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKKworCQllbmdpbmUgPSBpbnRl bF9lbmdpbmVfbG9va3VwX3VzZXIoaTkxNSwKKwkJCQkJCSAgZW5naW5lX2V2ZW50X2NsYXNzKGV2 ZW50KSwKKwkJCQkJCSAgZW5naW5lX2V2ZW50X2luc3RhbmNlKGV2ZW50KSk7CisJCUdFTV9CVUdf T04oIWVuZ2luZSk7CisJCUdFTV9CVUdfT04oc2FtcGxlID49IEk5MTVfUE1VX1NBTVBMRV9CSVRT KTsKKwkJR0VNX0JVR19PTihlbmdpbmUtPnBtdS5lbmFibGVfY291bnRbc2FtcGxlXSA9PSAwKTsK KwkJLyoKKwkJICogRGVjcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgYW5kIGNsZWFyIHRoZSBl bmFibGVkCisJCSAqIGJpdG1hc2sgd2hlbiB0aGUgbGFzdCBsaXN0ZW5lciBvbiBhbiBldmVudCBn b2VzIGF3YXkuCisJCSAqLworCQlpZiAoLS1lbmdpbmUtPnBtdS5lbmFibGVfY291bnRbc2FtcGxl XSA9PSAwKQorCQkJZW5naW5lLT5wbXUuZW5hYmxlICY9IH5CSVQoc2FtcGxlKTsKKwl9CisKKwlH RU1fQlVHX09OKGJpdCA+PSBJOTE1X1BNVV9NQVNLX0JJVFMpOworCUdFTV9CVUdfT04oaTkxNS0+ cG11LmVuYWJsZV9jb3VudFtiaXRdID09IDApOworCS8qCisJICogRGVjcmVtZW50IHRoZSByZWZl cmVuY2UgY291bnQgYW5kIGNsZWFyIHRoZSBlbmFibGVkCisJICogYml0bWFzayB3aGVuIHRoZSBs YXN0IGxpc3RlbmVyIG9uIGFuIGV2ZW50IGdvZXMgYXdheS4KKwkgKi8KKwlpZiAoLS1pOTE1LT5w bXUuZW5hYmxlX2NvdW50W2JpdF0gPT0gMCkKKwkJaTkxNS0+cG11LmVuYWJsZSAmPSB+QklUX1VM TChiaXQpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTkxNS0+cG11LmxvY2ssIGZsYWdz KTsKK30KKworc3RhdGljIHZvaWQgaTkxNV9wbXVfZXZlbnRfc3RhcnQoc3RydWN0IHBlcmZfZXZl bnQgKmV2ZW50LCBpbnQgZmxhZ3MpCit7CisJaTkxNV9wbXVfZW5hYmxlKGV2ZW50KTsKKwlldmVu dC0+aHcuc3RhdGUgPSAwOworfQorCitzdGF0aWMgdm9pZCBpOTE1X3BtdV9ldmVudF9zdG9wKHN0 cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGZsYWdzKQoreworCWlmIChmbGFncyAmIFBFUkZf RUZfVVBEQVRFKQorCQlpOTE1X3BtdV9ldmVudF9yZWFkKGV2ZW50KTsKKwlpOTE1X3BtdV9kaXNh YmxlKGV2ZW50KTsKKwlldmVudC0+aHcuc3RhdGUgPSBQRVJGX0hFU19TVE9QUEVEOworfQorCitz dGF0aWMgaW50IGk5MTVfcG11X2V2ZW50X2FkZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGlu dCBmbGFncykKK3sKKwlpZiAoZmxhZ3MgJiBQRVJGX0VGX1NUQVJUKQorCQlpOTE1X3BtdV9ldmVu dF9zdGFydChldmVudCwgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGk5 MTVfcG11X2V2ZW50X2RlbChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBmbGFncykKK3sK KwlpOTE1X3BtdV9ldmVudF9zdG9wKGV2ZW50LCBQRVJGX0VGX1VQREFURSk7Cit9CisKK3N0YXRp YyBpbnQgaTkxNV9wbXVfZXZlbnRfZXZlbnRfaWR4KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkK K3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgaTkxNV9wbXVfZm9ybWF0X3Nob3co c3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0 ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBkZXZfZXh0X2F0dHJpYnV0ZSAqZWF0dHI7CisKKwll YXR0ciA9IGNvbnRhaW5lcl9vZihhdHRyLCBzdHJ1Y3QgZGV2X2V4dF9hdHRyaWJ1dGUsIGF0dHIp OworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCAoY2hhciAqKWVhdHRyLT52YXIpOworfQor CisjZGVmaW5lIEk5MTVfUE1VX0ZPUk1BVF9BVFRSKF9uYW1lLCBfY29uZmlnKSBcCisJKCYoKHN0 cnVjdCBkZXZfZXh0X2F0dHJpYnV0ZVtdKSB7IFwKKwkJeyAuYXR0ciA9IF9fQVRUUihfbmFtZSwg MDQ0NCwgaTkxNV9wbXVfZm9ybWF0X3Nob3csIE5VTEwpLCBcCisJCSAgLnZhciA9ICh2b2lkICop X2NvbmZpZywgfSBcCisJfSlbMF0uYXR0ci5hdHRyKQorCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0 ZSAqaTkxNV9wbXVfZm9ybWF0X2F0dHJzW10gPSB7CisJSTkxNV9QTVVfRk9STUFUX0FUVFIoaTkx NV9ldmVudGlkLCAiY29uZmlnOjAtNDIiKSwKKwlOVUxMLAorfTsKKworc3RhdGljIGNvbnN0IHN0 cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgaTkxNV9wbXVfZm9ybWF0X2F0dHJfZ3JvdXAgPSB7CisJLm5h bWUgPSAiZm9ybWF0IiwKKwkuYXR0cnMgPSBpOTE1X3BtdV9mb3JtYXRfYXR0cnMsCit9OworCitz dGF0aWMgc3NpemVfdCBpOTE1X3BtdV9ldmVudF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJ CQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVj dCBkZXZfZXh0X2F0dHJpYnV0ZSAqZWF0dHI7CisKKwllYXR0ciA9IGNvbnRhaW5lcl9vZihhdHRy LCBzdHJ1Y3QgZGV2X2V4dF9hdHRyaWJ1dGUsIGF0dHIpOworCXJldHVybiBzcHJpbnRmKGJ1Ziwg ImNvbmZpZz0weCVseFxuIiwgKHVuc2lnbmVkIGxvbmcpZWF0dHItPnZhcik7Cit9CisKKyNkZWZp bmUgSTkxNV9FVkVOVF9BVFRSKF9uYW1lLCBfY29uZmlnKSBcCisJKCYoKHN0cnVjdCBkZXZfZXh0 X2F0dHJpYnV0ZVtdKSB7IFwKKwkJeyAuYXR0ciA9IF9fQVRUUihfbmFtZSwgMDQ0NCwgaTkxNV9w bXVfZXZlbnRfc2hvdywgTlVMTCksIFwKKwkJICAudmFyID0gKHZvaWQgKilfY29uZmlnLCB9IFwK Kwl9KVswXS5hdHRyLmF0dHIpCisKKyNkZWZpbmUgSTkxNV9FVkVOVF9TVFIoX25hbWUsIF9zdHIp IFwKKwkoJigoc3RydWN0IHBlcmZfcG11X2V2ZW50c19hdHRyW10pIHsgXAorCQl7IC5hdHRyCSAg ICAgPSBfX0FUVFIoX25hbWUsIDA0NDQsIHBlcmZfZXZlbnRfc3lzZnNfc2hvdywgTlVMTCksIFwK KwkJICAuaWQJICAgICA9IDAsIFwKKwkJICAuZXZlbnRfc3RyID0gX3N0ciwgfSBcCisJfSlbMF0u YXR0ci5hdHRyKQorCisjZGVmaW5lIEk5MTVfRVZFTlQoX25hbWUsIF9jb25maWcsIF91bml0KSBc CisJSTkxNV9FVkVOVF9BVFRSKF9uYW1lLCBfY29uZmlnKSwgXAorCUk5MTVfRVZFTlRfU1RSKF9u YW1lLnVuaXQsIF91bml0KQorCisjZGVmaW5lIEk5MTVfRU5HSU5FX0VWRU5UKF9uYW1lLCBfY2xh c3MsIF9pbnN0YW5jZSwgX3NhbXBsZSkgXAorCUk5MTVfRVZFTlRfQVRUUihfbmFtZSwgX19JOTE1 X1BNVV9FTkdJTkUoX2NsYXNzLCBfaW5zdGFuY2UsIF9zYW1wbGUpKSwgXAorCUk5MTVfRVZFTlRf U1RSKF9uYW1lLnVuaXQsICJucyIpCisKKyNkZWZpbmUgSTkxNV9FTkdJTkVfRVZFTlRTKF9uYW1l LCBfY2xhc3MsIF9pbnN0YW5jZSkgXAorCUk5MTVfRU5HSU5FX0VWRU5UKF9uYW1lIyNfaW5zdGFu Y2UtcXVldWVkLCBfY2xhc3MsIF9pbnN0YW5jZSwgSTkxNV9TQU1QTEVfUVVFVUVEKSwgXAorCUk5 MTVfRU5HSU5FX0VWRU5UKF9uYW1lIyNfaW5zdGFuY2UtYnVzeSwgX2NsYXNzLCBfaW5zdGFuY2Us IEk5MTVfU0FNUExFX0JVU1kpLCBcCisJSTkxNV9FTkdJTkVfRVZFTlQoX25hbWUjI19pbnN0YW5j ZS1zZW1hLCBfY2xhc3MsIF9pbnN0YW5jZSwgSTkxNV9TQU1QTEVfU0VNQSksIFwKKwlJOTE1X0VO R0lORV9FVkVOVChfbmFtZSMjX2luc3RhbmNlLXdhaXQsIF9jbGFzcywgX2luc3RhbmNlLCBJOTE1 X1NBTVBMRV9XQUlUKQorCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqaTkxNV9wbXVfZXZlbnRz X2F0dHJzW10gPSB7CisJSTkxNV9FTkdJTkVfRVZFTlRTKHJjcywgSTkxNV9FTkdJTkVfQ0xBU1Nf UkVOREVSLCAwKSwKKwlJOTE1X0VOR0lORV9FVkVOVFMoYmNzLCBJOTE1X0VOR0lORV9DTEFTU19D T1BZLCAwKSwKKwlJOTE1X0VOR0lORV9FVkVOVFModmNzLCBJOTE1X0VOR0lORV9DTEFTU19WSURF TywgMCksCisJSTkxNV9FTkdJTkVfRVZFTlRTKHZjcywgSTkxNV9FTkdJTkVfQ0xBU1NfVklERU8s IDEpLAorCUk5MTVfRU5HSU5FX0VWRU5UUyh2ZWNzLCBJOTE1X0VOR0lORV9DTEFTU19WSURFT19F TkhBTkNFLCAwKSwKKworCUk5MTVfRVZFTlQoYWN0dWFsLWZyZXF1ZW5jeSwgICAgSTkxNV9QTVVf QUNUVUFMX0ZSRVFVRU5DWSwgICAgIkh6IiksCisJSTkxNV9FVkVOVChyZXF1ZXN0ZWQtZnJlcXVl bmN5LCBJOTE1X1BNVV9SRVFVRVNURURfRlJFUVVFTkNZLCAiSHoiKSwKKworCUk5MTVfRVZFTlRf QVRUUihpbnRlcnJ1cHRzLCBJOTE1X1BNVV9JTlRFUlJVUFRTKSwKKworCUk5MTVfRVZFTlQocmM2 LXJlc2lkZW5jeSwgICBJOTE1X1BNVV9SQzZfUkVTSURFTkNZLCAgICJucyIpLAorCUk5MTVfRVZF TlQocmM2cC1yZXNpZGVuY3ksICBJOTE1X1BNVV9SQzZwX1JFU0lERU5DWSwgICJucyIpLAorCUk5 MTVfRVZFTlQocmM2cHAtcmVzaWRlbmN5LCBJOTE1X1BNVV9SQzZwcF9SRVNJREVOQ1ksICJucyIp LAorCisJTlVMTCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGk5 MTVfcG11X2V2ZW50c19hdHRyX2dyb3VwID0geworCS5uYW1lID0gImV2ZW50cyIsCisJLmF0dHJz ID0gaTkxNV9wbXVfZXZlbnRzX2F0dHJzLAorfTsKKworc3RhdGljIHNzaXplX3QKK2k5MTVfcG11 X2dldF9hdHRyX2NwdW1hc2soc3RydWN0IGRldmljZSAqZGV2LAorCQkJICBzdHJ1Y3QgZGV2aWNl X2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgY2hhciAqYnVmKQoreworCXJldHVybiBjcHVtYXBfcHJp bnRfdG9fcGFnZWJ1Zih0cnVlLCBidWYsICZpOTE1X3BtdV9jcHVtYXNrKTsKK30KKworc3RhdGlj IERFVklDRV9BVFRSKGNwdW1hc2ssIDA0NDQsIGk5MTVfcG11X2dldF9hdHRyX2NwdW1hc2ssIE5V TEwpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqaTkxNV9jcHVtYXNrX2F0dHJzW10gPSB7 CisJJmRldl9hdHRyX2NwdW1hc2suYXR0ciwKKwlOVUxMLAorfTsKKworc3RhdGljIHN0cnVjdCBh dHRyaWJ1dGVfZ3JvdXAgaTkxNV9wbXVfY3B1bWFza19hdHRyX2dyb3VwID0geworCS5hdHRycyA9 IGk5MTVfY3B1bWFza19hdHRycywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRl X2dyb3VwICppOTE1X3BtdV9hdHRyX2dyb3Vwc1tdID0geworCSZpOTE1X3BtdV9mb3JtYXRfYXR0 cl9ncm91cCwKKwkmaTkxNV9wbXVfZXZlbnRzX2F0dHJfZ3JvdXAsCisJJmk5MTVfcG11X2NwdW1h c2tfYXR0cl9ncm91cCwKKwlOVUxMCit9OworCitzdGF0aWMgaW50IGk5MTVfcG11X2NwdV9vbmxp bmUodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGhsaXN0X25vZGUgKm5vZGUpCit7CisJdW5zaWdu ZWQgaW50IHRhcmdldDsKKworCXRhcmdldCA9IGNwdW1hc2tfYW55X2FuZCgmaTkxNV9wbXVfY3B1 bWFzaywgJmk5MTVfcG11X2NwdW1hc2spOworCS8qIFNlbGVjdCB0aGUgZmlyc3Qgb25saW5lIENQ VSBhcyBhIGRlc2lnbmF0ZWQgcmVhZGVyLiAqLworCWlmICh0YXJnZXQgPj0gbnJfY3B1X2lkcykK KwkJY3B1bWFza19zZXRfY3B1KGNwdSwgJmk5MTVfcG11X2NwdW1hc2spOworCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQgaTkxNV9wbXVfY3B1X29mZmxpbmUodW5zaWduZWQgaW50IGNwdSwg c3RydWN0IGhsaXN0X25vZGUgKm5vZGUpCit7CisJc3RydWN0IGk5MTVfcG11ICpwbXUgPSBobGlz dF9lbnRyeV9zYWZlKG5vZGUsIHR5cGVvZigqcG11KSwgbm9kZSk7CisJdW5zaWduZWQgaW50IHRh cmdldDsKKworCWlmIChjcHVtYXNrX3Rlc3RfYW5kX2NsZWFyX2NwdShjcHUsICZpOTE1X3BtdV9j cHVtYXNrKSkgeworCQl0YXJnZXQgPSBjcHVtYXNrX2FueV9idXQodG9wb2xvZ3lfc2libGluZ19j cHVtYXNrKGNwdSksIGNwdSk7CisJCS8qIE1pZ3JhdGUgZXZlbnRzIGlmIHRoZXJlIGlzIGEgdmFs aWQgdGFyZ2V0ICovCisJCWlmICh0YXJnZXQgPCBucl9jcHVfaWRzKSB7CisJCQljcHVtYXNrX3Nl dF9jcHUodGFyZ2V0LCAmaTkxNV9wbXVfY3B1bWFzayk7CisJCQlwZXJmX3BtdV9taWdyYXRlX2Nv bnRleHQoJnBtdS0+YmFzZSwgY3B1LCB0YXJnZXQpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9 CisKK3ZvaWQgaTkxNV9wbXVfcmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUp Cit7CisJaW50IHJldDsKKworCWlmIChJTlRFTF9HRU4oaTkxNSkgPD0gMikgeworCQlEUk1fSU5G TygiUE1VIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgR1BVLiIpOworCQlyZXR1cm47CisJfQorCisJ cmV0ID0gY3B1aHBfc2V0dXBfc3RhdGVfbXVsdGkoQ1BVSFBfQVBfUEVSRl9YODZfVU5DT1JFX09O TElORSwKKwkJCQkgICAgICAicGVyZi94ODYvaW50ZWwvaTkxNTpvbmxpbmUiLAorCQkJCSAgICAg IGk5MTVfcG11X2NwdV9vbmxpbmUsCisJCQkJICAgICAgaTkxNV9wbXVfY3B1X29mZmxpbmUpOwor CWlmIChyZXQpCisJCWdvdG8gZXJyX2hwX3N0YXRlOworCisJcmV0ID0gY3B1aHBfc3RhdGVfYWRk X2luc3RhbmNlKENQVUhQX0FQX1BFUkZfWDg2X1VOQ09SRV9PTkxJTkUsCisJCQkJICAgICAgICZp OTE1LT5wbXUubm9kZSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfaHBfaW5zdGFuY2U7CisKKwlp OTE1LT5wbXUuYmFzZS5hdHRyX2dyb3Vwcwk9IGk5MTVfcG11X2F0dHJfZ3JvdXBzOworCWk5MTUt PnBtdS5iYXNlLnRhc2tfY3R4X25yCT0gcGVyZl9pbnZhbGlkX2NvbnRleHQ7CisJaTkxNS0+cG11 LmJhc2UuZXZlbnRfaW5pdAk9IGk5MTVfcG11X2V2ZW50X2luaXQ7CisJaTkxNS0+cG11LmJhc2Uu YWRkCQk9IGk5MTVfcG11X2V2ZW50X2FkZDsKKwlpOTE1LT5wbXUuYmFzZS5kZWwJCT0gaTkxNV9w bXVfZXZlbnRfZGVsOworCWk5MTUtPnBtdS5iYXNlLnN0YXJ0CQk9IGk5MTVfcG11X2V2ZW50X3N0 YXJ0OworCWk5MTUtPnBtdS5iYXNlLnN0b3AJCT0gaTkxNV9wbXVfZXZlbnRfc3RvcDsKKwlpOTE1 LT5wbXUuYmFzZS5yZWFkCQk9IGk5MTVfcG11X2V2ZW50X3JlYWQ7CisJaTkxNS0+cG11LmJhc2Uu ZXZlbnRfaWR4CT0gaTkxNV9wbXVfZXZlbnRfZXZlbnRfaWR4OworCisJc3Bpbl9sb2NrX2luaXQo Jmk5MTUtPnBtdS5sb2NrKTsKKwlocnRpbWVyX2luaXQoJmk5MTUtPnBtdS50aW1lciwgQ0xPQ0tf TU9OT1RPTklDLCBIUlRJTUVSX01PREVfUkVMKTsKKwlpOTE1LT5wbXUudGltZXIuZnVuY3Rpb24g PSBpOTE1X3NhbXBsZTsKKwlpOTE1LT5wbXUuZW5hYmxlID0gMDsKKworCXJldCA9IHBlcmZfcG11 X3JlZ2lzdGVyKCZpOTE1LT5wbXUuYmFzZSwgImk5MTUiLCAtMSk7CisJaWYgKHJldCA9PSAwKQor CQlyZXR1cm47CisKKwlpOTE1LT5wbXUuYmFzZS5ldmVudF9pbml0ID0gTlVMTDsKKworCVdBUk5f T04oY3B1aHBfc3RhdGVfcmVtb3ZlX2luc3RhbmNlKENQVUhQX0FQX1BFUkZfWDg2X1VOQ09SRV9P TkxJTkUsCisJCQkJCSAgICAmaTkxNS0+cG11Lm5vZGUpKTsKKworZXJyX2hwX2luc3RhbmNlOgor CWNwdWhwX3JlbW92ZV9tdWx0aV9zdGF0ZShDUFVIUF9BUF9QRVJGX1g4Nl9VTkNPUkVfT05MSU5F KTsKKworZXJyX2hwX3N0YXRlOgorCURSTV9OT1RFKCJGYWlsZWQgdG8gcmVnaXN0ZXIgUE1VISAo ZXJyPSVkKVxuIiwgcmV0KTsKK30KKwordm9pZCBpOTE1X3BtdV91bnJlZ2lzdGVyKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICppOTE1KQoreworCWlmICghaTkxNS0+cG11LmJhc2UuZXZlbnRfaW5p dCkKKwkJcmV0dXJuOworCisJV0FSTl9PTihjcHVocF9zdGF0ZV9yZW1vdmVfaW5zdGFuY2UoQ1BV SFBfQVBfUEVSRl9YODZfVU5DT1JFX09OTElORSwKKwkJCQkJICAgICZpOTE1LT5wbXUubm9kZSkp OworCWNwdWhwX3JlbW92ZV9tdWx0aV9zdGF0ZShDUFVIUF9BUF9QRVJGX1g4Nl9VTkNPUkVfT05M SU5FKTsKKworCWk5MTUtPnBtdS5lbmFibGUgPSAwOworCisJaHJ0aW1lcl9jYW5jZWwoJmk5MTUt PnBtdS50aW1lcik7CisKKwlwZXJmX3BtdV91bnJlZ2lzdGVyKCZpOTE1LT5wbXUuYmFzZSk7CisJ aTkxNS0+cG11LmJhc2UuZXZlbnRfaW5pdCA9IE5VTEw7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcu aAppbmRleCA5NGI0MGE0NjlhZmQuLjk3MWQ2YTdmZDlhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9yZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3Jl Zy5oCkBAIC0xODYsNiArMTg2LDkgQEAgc3RhdGljIGlubGluZSBib29sIGk5MTVfbW1pb19yZWdf dmFsaWQoaTkxNV9yZWdfdCByZWcpCiAjZGVmaW5lIFZJREVPX0VOSEFOQ0VNRU5UX0NMQVNTCTIK ICNkZWZpbmUgQ09QWV9FTkdJTkVfQ0xBU1MJMwogI2RlZmluZSBPVEhFUl9DTEFTUwkJNAorI2Rl ZmluZSBNQVhfRU5HSU5FX0NMQVNTCTQKKworI2RlZmluZSBNQVhfRU5HSU5FX0lOU1RBTkNFICAg IDEKIAogLyogUENJIGNvbmZpZyBzcGFjZSAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9lbmdpbmVfY3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Vu Z2luZV9jcy5jCmluZGV4IDNkMTM1YzNjZDM4MC4uODI1MTBkOTcxYzdkIDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9lbmdpbmVfY3MuYworKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9lbmdpbmVfY3MuYwpAQCAtMTk4LDYgKzE5OCwxNSBAQCBpbnRlbF9lbmdp bmVfc2V0dXAoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCUdFTV9CVUdfT04o aW5mby0+Y2xhc3MgPj0gQVJSQVlfU0laRShpbnRlbF9lbmdpbmVfY2xhc3NlcykpOwogCWNsYXNz X2luZm8gPSAmaW50ZWxfZW5naW5lX2NsYXNzZXNbaW5mby0+Y2xhc3NdOwogCisJaWYgKEdFTV9X QVJOX09OKGluZm8tPmNsYXNzID4gTUFYX0VOR0lORV9DTEFTUykpCisJCXJldHVybiAtRUlOVkFM OworCisJaWYgKEdFTV9XQVJOX09OKGluZm8tPmluc3RhbmNlID4gTUFYX0VOR0lORV9JTlNUQU5D RSkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKEdFTV9XQVJOX09OKGRldl9wcml2LT5lbmdp bmVfY2xhc3NbaW5mby0+Y2xhc3NdW2luZm8tPmluc3RhbmNlXSkpCisJCXJldHVybiAtRUlOVkFM OworCiAJR0VNX0JVR19PTihkZXZfcHJpdi0+ZW5naW5lW2lkXSk7CiAJZW5naW5lID0ga3phbGxv YyhzaXplb2YoKmVuZ2luZSksIEdGUF9LRVJORUwpOwogCWlmICghZW5naW5lKQpAQCAtMjI1LDYg KzIzNCw3IEBAIGludGVsX2VuZ2luZV9zZXR1cChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYsCiAKIAlBVE9NSUNfSU5JVF9OT1RJRklFUl9IRUFEKCZlbmdpbmUtPmNvbnRleHRfc3Rh dHVzX25vdGlmaWVyKTsKIAorCWRldl9wcml2LT5lbmdpbmVfY2xhc3NbaW5mby0+Y2xhc3NdW2lu Zm8tPmluc3RhbmNlXSA9IGVuZ2luZTsKIAlkZXZfcHJpdi0+ZW5naW5lW2lkXSA9IGVuZ2luZTsK IAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Jp bmdidWZmZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYwppbmRl eCAyMmU1ZWE4NTE2YjYuLjgyNWQ1YWYyZDk2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X3JpbmdidWZmZXIuYwpAQCAtMjE2MywzICsyMTYzLDI4IEBAIGludCBpbnRlbF9pbml0X3ZlYm94 X3JpbmdfYnVmZmVyKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIAogCXJldHVybiBp bnRlbF9pbml0X3JpbmdfYnVmZmVyKGVuZ2luZSk7CiB9CisKK3N0YXRpYyB1OCB1c2VyX2NsYXNz X21hcFtJOTE1X0VOR0lORV9DTEFTU19NQVhdID0geworCVtJOTE1X0VOR0lORV9DTEFTU19PVEhF Ul0gPSBPVEhFUl9DTEFTUywKKwlbSTkxNV9FTkdJTkVfQ0xBU1NfUkVOREVSXSA9IFJFTkRFUl9D TEFTUywKKwlbSTkxNV9FTkdJTkVfQ0xBU1NfQ09QWV0gPSBDT1BZX0VOR0lORV9DTEFTUywKKwlb STkxNV9FTkdJTkVfQ0xBU1NfVklERU9dID0gVklERU9fREVDT0RFX0NMQVNTLAorCVtJOTE1X0VO R0lORV9DTEFTU19WSURFT19FTkhBTkNFXSA9IFZJREVPX0VOSEFOQ0VNRU5UX0NMQVNTLAorfTsK Kworc3RydWN0IGludGVsX2VuZ2luZV9jcyAqCitpbnRlbF9lbmdpbmVfbG9va3VwX3VzZXIoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsIHU4IGNsYXNzLCB1OCBpbnN0YW5jZSkKK3sKKwlp ZiAoY2xhc3MgPj0gQVJSQVlfU0laRSh1c2VyX2NsYXNzX21hcCkpCisJCXJldHVybiBOVUxMOwor CisJY2xhc3MgPSB1c2VyX2NsYXNzX21hcFtjbGFzc107CisKKwlpZiAoV0FSTl9PTl9PTkNFKGNs YXNzID4gTUFYX0VOR0lORV9DTEFTUykpCisJCXJldHVybiBOVUxMOworCisJaWYgKGluc3RhbmNl ID4gTUFYX0VOR0lORV9JTlNUQU5DRSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gaTkxNS0+ ZW5naW5lX2NsYXNzW2NsYXNzXVtpbnN0YW5jZV07Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9yaW5nYnVmZmVyLmgKaW5kZXggYWJmMTcxYzNjYjljLi5jYmQxNzM0NzU5YjggMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaAorKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmgKQEAgLTI0NSw2ICsyNDUsMjggQEAgc3Ry dWN0IGludGVsX2VuZ2luZV9jcyB7CiAJCUk5MTVfU0VMRlRFU1RfREVDTEFSRShib29sIG1vY2sg OiAxKTsKIAl9IGJyZWFkY3J1bWJzOwogCisJc3RydWN0IHsKKwkJLyoqCisJCSAqIEBlbmFibGU6 IEJpdG1hc2sgb2YgZW5hYmxlIHNhbXBsZSBldmVudHMgb24gdGhpcyBlbmdpbmUuCisJCSAqCisJ CSAqIEJpdHMgY29ycmVzcG9uZCB0byBzYW1wbGUgZXZlbnQgdHlwZXMsIGZvciBpbnN0YW5jZQor CQkgKiBJOTE1X1NBTVBMRV9RVUVVRUQgaXMgYml0IDAgZXRjLgorCQkgKi8KKwkJdTMyIGVuYWJs ZTsKKwkJLyoqCisJCSAqIEBlbmFibGVfY291bnQ6IFJlZmVyZW5jZSBjb3VudCBmb3IgdGhlIGVu YWJsZWQgc2FtcGxlcnMuCisJCSAqCisJCSAqIEluZGV4IG51bWJlciBjb3JyZXNwb25kcyB0byB0 aGUgYml0IG51bWJlciBmcm9tIEBlbmFibGUuCisJCSAqLworCQl1bnNpZ25lZCBpbnQgZW5hYmxl X2NvdW50W0k5MTVfUE1VX1NBTVBMRV9CSVRTXTsKKwkJLyoqCisJCSAqIEBzYW1wbGU6IENvdW50 ZXIgdmFsdWUgZm9yIHNhbXBsaW5nIGV2ZW50cy4KKwkJICoKKwkJICogT3VyIGludGVybmFsIHRp bWVyIHN0b3JlcyB0aGUgY3VycmVudCBjb3VudGVyIGluIHRoaXMgZmllbGQuCisJCSAqLworCQl1 NjQgc2FtcGxlW0k5MTVfRU5HSU5FX1NBTVBMRV9NQVhdOworCX0gcG11OworCiAJLyoKIAkgKiBB IHBvb2wgb2Ygb2JqZWN0cyB0byB1c2UgYXMgc2hhZG93IGNvcGllcyBvZiBjbGllbnQgYmF0Y2gg YnVmZmVycwogCSAqIHdoZW4gdGhlIGNvbW1hbmQgcGFyc2VyIGlzIGVuYWJsZWQuIFByZXZlbnRz IHRoZSBjbGllbnQgZnJvbQpAQCAtNzQzLDQgKzc2NSw3IEBAIHZvaWQgaW50ZWxfZW5naW5lc19y ZXNldF9kZWZhdWx0X3N1Ym1pc3Npb24oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpOwog CiBib29sIGludGVsX2VuZ2luZV9jYW5fc3RvcmVfZHdvcmQoc3RydWN0IGludGVsX2VuZ2luZV9j cyAqZW5naW5lKTsKIAorc3RydWN0IGludGVsX2VuZ2luZV9jcyAqCitpbnRlbF9lbmdpbmVfbG9v a3VwX3VzZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsIHU4IGNsYXNzLCB1OCBpbnN0 YW5jZSk7CisKICNlbmRpZiAvKiBfSU5URUxfUklOR0JVRkZFUl9IXyAqLwpkaWZmIC0tZ2l0IGEv aW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5oIGIvaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5o CmluZGV4IGI0NTA1ZDU1OTkwZC4uY2U4Zjk3ODE4MDI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL3Vh cGkvZHJtL2k5MTVfZHJtLmgKKysrIGIvaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5oCkBAIC04 Niw2ICs4Niw2MyBAQCBlbnVtIGk5MTVfbW9jc190YWJsZV9pbmRleCB7CiAJSTkxNV9NT0NTX0NB Q0hFRCwKIH07CiAKK2VudW0gZHJtX2k5MTVfZ2VtX2VuZ2luZV9jbGFzcyB7CisJSTkxNV9FTkdJ TkVfQ0xBU1NfT1RIRVIgPSAwLAorCUk5MTVfRU5HSU5FX0NMQVNTX1JFTkRFUiA9IDEsCisJSTkx NV9FTkdJTkVfQ0xBU1NfQ09QWSA9IDIsCisJSTkxNV9FTkdJTkVfQ0xBU1NfVklERU8gPSAzLAor CUk5MTVfRU5HSU5FX0NMQVNTX1ZJREVPX0VOSEFOQ0UgPSA0LAorCUk5MTVfRU5HSU5FX0NMQVNT X01BWCAvKiBub24tQUJJICovCit9OworCisvKioKKyAqIERPQzogcGVyZl9ldmVudHMgZXhwb3Nl ZCBieSBpOTE1IHRocm91Z2ggL3N5cy9idXMvZXZlbnRfc291cmNlcy9kcml2ZXJzL2k5MTUKKyAq CisgKi8KKworZW51bSBkcm1faTkxNV9wbXVfZW5naW5lX3NhbXBsZSB7CisJSTkxNV9TQU1QTEVf UVVFVUVEID0gMCwKKwlJOTE1X1NBTVBMRV9CVVNZID0gMSwKKwlJOTE1X1NBTVBMRV9XQUlUID0g MiwKKwlJOTE1X1NBTVBMRV9TRU1BID0gMywKKwlJOTE1X0VOR0lORV9TQU1QTEVfTUFYIC8qIG5v bi1BQkkgKi8KK307CisKKyNkZWZpbmUgSTkxNV9QTVVfU0FNUExFX0JJVFMgKDQpCisjZGVmaW5l IEk5MTVfUE1VX1NBTVBMRV9NQVNLICgweGYpCisjZGVmaW5lIEk5MTVfUE1VX1NBTVBMRV9JTlNU QU5DRV9CSVRTICg4KQorI2RlZmluZSBJOTE1X1BNVV9DTEFTU19TSElGVCBcCisJKEk5MTVfUE1V X1NBTVBMRV9CSVRTICsgSTkxNV9QTVVfU0FNUExFX0lOU1RBTkNFX0JJVFMpCisKKyNkZWZpbmUg X19JOTE1X1BNVV9FTkdJTkUoY2xhc3MsIGluc3RhbmNlLCBzYW1wbGUpIFwKKwkoKGNsYXNzKSA8 PCBJOTE1X1BNVV9DTEFTU19TSElGVCB8IFwKKwkoaW5zdGFuY2UpIDw8IEk5MTVfUE1VX1NBTVBM RV9CSVRTIHwgXAorCShzYW1wbGUpKQorCisjZGVmaW5lIEk5MTVfUE1VX0VOR0lORV9RVUVVRUQo Y2xhc3MsIGluc3RhbmNlKSBcCisJX19JOTE1X1BNVV9FTkdJTkUoY2xhc3MsIGluc3RhbmNlLCBJ OTE1X1NBTVBMRV9RVUVVRUQpCisKKyNkZWZpbmUgSTkxNV9QTVVfRU5HSU5FX0JVU1koY2xhc3Ms IGluc3RhbmNlKSBcCisJX19JOTE1X1BNVV9FTkdJTkUoY2xhc3MsIGluc3RhbmNlLCBJOTE1X1NB TVBMRV9CVVNZKQorCisjZGVmaW5lIEk5MTVfUE1VX0VOR0lORV9XQUlUKGNsYXNzLCBpbnN0YW5j ZSkgXAorCV9fSTkxNV9QTVVfRU5HSU5FKGNsYXNzLCBpbnN0YW5jZSwgSTkxNV9TQU1QTEVfV0FJ VCkKKworI2RlZmluZSBJOTE1X1BNVV9FTkdJTkVfU0VNQShjbGFzcywgaW5zdGFuY2UpIFwKKwlf X0k5MTVfUE1VX0VOR0lORShjbGFzcywgaW5zdGFuY2UsIEk5MTVfU0FNUExFX1NFTUEpCisKKyNk ZWZpbmUgX19JOTE1X1BNVV9PVEhFUih4KSAoX19JOTE1X1BNVV9FTkdJTkUoMHhmZiwgMHhmZiwg MHhmKSArIDEgKyAoeCkpCisKKyNkZWZpbmUgSTkxNV9QTVVfQUNUVUFMX0ZSRVFVRU5DWQlfX0k5 MTVfUE1VX09USEVSKDApCisjZGVmaW5lIEk5MTVfUE1VX1JFUVVFU1RFRF9GUkVRVUVOQ1kJX19J OTE1X1BNVV9PVEhFUigxKQorI2RlZmluZSBJOTE1X1BNVV9JTlRFUlJVUFRTCQlfX0k5MTVfUE1V X09USEVSKDIpCisKKyNkZWZpbmUgSTkxNV9QTVVfUkM2X1JFU0lERU5DWQkJX19JOTE1X1BNVV9P VEhFUigzKQorI2RlZmluZSBJOTE1X1BNVV9SQzZwX1JFU0lERU5DWQkJX19JOTE1X1BNVV9PVEhF Uig0KQorI2RlZmluZSBJOTE1X1BNVV9SQzZwcF9SRVNJREVOQ1kJX19JOTE1X1BNVV9PVEhFUig1 KQorCisjZGVmaW5lIEk5MTVfUE1VX0xBU1QgSTkxNV9QTVVfUkM2cHBfUkVTSURFTkNZCisKIC8q IEVhY2ggcmVnaW9uIGlzIGEgbWluaW11bSBvZiAxNmssIGFuZCB0aGVyZSBhcmUgYXQgbW9zdCAy NTUgb2YgdGhlbS4KICAqLwogI2RlZmluZSBJOTE1X05SX1RFWF9SRUdJT05TIDI1NQkvKiB0YWJs ZSBzaXplIDJrIC0gbWF4aW11bSBkdWUgdG8gdXNlCi0tIAoyLjkuNQoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJ bnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==