From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: [RFC v7 04/11] drm/i915/pmu: Expose a PMU interface for perf queries Date: Wed, 13 Sep 2017 11:34:07 +0100 Message-ID: <20170913103407.32332-1-tvrtko.ursulin@linux.intel.com> References: <20170913085718.23573-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-x236.google.com (mail-wm0-x236.google.com [IPv6:2a00:1450:400c:c09::236]) by gabe.freedesktop.org (Postfix) with ESMTPS id 958BC89DFF for ; Wed, 13 Sep 2017 10:34:16 +0000 (UTC) Received: by mail-wm0-x236.google.com with SMTP id i189so3166126wmf.1 for ; Wed, 13 Sep 2017 03:34:16 -0700 (PDT) In-Reply-To: <20170913085718.23573-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 UmVtb3ZlIENQVSBob3RwbHVnIG5vdGlmaWNhdGlvbiBzdGF0ZSBvbiB1bnJlZ2lzdGVyLgoKU2ln bmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+ClNpZ25l ZC1vZmYtYnk6IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+ClNpZ25l ZC1vZmYtYnk6IERtaXRyeSBSb2dvemhraW4gPGRtaXRyeS52LnJvZ296aGtpbkBpbnRlbC5jb20+ CkNjOiBUdnJ0a28gVXJzdWxpbiA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgpDYzogQ2hyaXMg V2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+CkNjOiBEbWl0cnkgUm9nb3poa2luIDxk bWl0cnkudi5yb2dvemhraW5AaW50ZWwuY29tPgpDYzogUGV0ZXIgWmlqbHN0cmEgPHBldGVyekBp bmZyYWRlYWQub3JnPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlICAgICAgICAg ICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jICAgICAgICAgfCAgIDIg KwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCAgICAgICAgIHwgIDc2ICsrKysKIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcG11LmMgICAgICAgICB8IDY5NyArKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCAgICAg ICAgIHwgICAzICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2luZV9jcy5jICB8ICAx MCArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMgfCAgMjUgKysKIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaCB8ICAyNSArKwogaW5jbHVkZS91 YXBpL2RybS9pOTE1X2RybS5oICAgICAgICAgICAgIHwgIDU4ICsrKwogOSBmaWxlcyBjaGFuZ2Vk LCA4OTcgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfcG11LmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmls ZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCmluZGV4IDFjYjgwNTlhM2ExNi4uN2Iz YTBlY2E2MmI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQorKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQpAQCAtMjYsNiArMjYsNyBAQCBpOTE1LXkg Oj0gaTkxNV9kcnYubyBcCiAKIGk5MTUtJChDT05GSUdfQ09NUEFUKSAgICs9IGk5MTVfaW9jMzIu bwogaTkxNS0kKENPTkZJR19ERUJVR19GUykgKz0gaTkxNV9kZWJ1Z2ZzLm8gaW50ZWxfcGlwZV9j cmMubworaTkxNS0kKENPTkZJR19QRVJGX0VWRU5UUykgKz0gaTkxNV9wbXUubwogCiAjIEdFTSBj b2RlCiBpOTE1LXkgKz0gaTkxNV9jbWRfcGFyc2VyLm8gXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMK aW5kZXggNWMxMTFlYTk2ZTgwLi5iMWY5NmViMWJlMTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYu YwpAQCAtMTE5Niw2ICsxMTk2LDcgQEAgc3RhdGljIHZvaWQgaTkxNV9kcml2ZXJfcmVnaXN0ZXIo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCXN0cnVjdCBkcm1fZGV2aWNlICpk ZXYgPSAmZGV2X3ByaXYtPmRybTsKIAogCWk5MTVfZ2VtX3Nocmlua2VyX2luaXQoZGV2X3ByaXYp OworCWk5MTVfcG11X3JlZ2lzdGVyKGRldl9wcml2KTsKIAogCS8qCiAJICogTm90aWZ5IGEgdmFs aWQgc3VyZmFjZSBhZnRlciBtb2Rlc2V0dGluZywKQEAgLTEyNTAsNiArMTI1MSw3IEBAIHN0YXRp YyB2b2lkIGk5MTVfZHJpdmVyX3VucmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KQogCWludGVsX29wcmVnaW9uX3VucmVnaXN0ZXIoZGV2X3ByaXYpOwogCiAJaTkxNV9w ZXJmX3VucmVnaXN0ZXIoZGV2X3ByaXYpOworCWk5MTVfcG11X3VucmVnaXN0ZXIoZGV2X3ByaXYp OwogCiAJaTkxNV90ZWFyZG93bl9zeXNmcyhkZXZfcHJpdik7CiAJaTkxNV9ndWNfbG9nX3VucmVn aXN0ZXIoZGV2X3ByaXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9k cnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKaW5kZXggNDhkYWY5NTUyMTYz Li42MjY0NmI4ZGZiN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2 LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAtNDAsNiArNDAsNyBA QAogI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlbC1pb21tdS5o PgogI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+ CiAjaW5jbHVkZSA8bGludXgvcG1fcW9zLmg+CiAjaW5jbHVkZSA8bGludXgvcmVzZXJ2YXRpb24u aD4KICNpbmNsdWRlIDxsaW51eC9zaG1lbV9mcy5oPgpAQCAtMjE5MCw2ICsyMTkxLDY5IEBAIHN0 cnVjdCBpbnRlbF9jZGNsa19zdGF0ZSB7CiAJdW5zaWduZWQgaW50IGNkY2xrLCB2Y28sIHJlZjsK IH07CiAKK2VudW0geworCV9fSTkxNV9TQU1QTEVfRlJFUV9BQ1QgPSAwLAorCV9fSTkxNV9TQU1Q TEVfRlJFUV9SRVEsCisJX19JOTE1X05VTV9QTVVfU0FNUExFUlMKK307CisKKy8qKgorICogSG93 IG1hbnkgZGlmZmVyZW50IGV2ZW50cyB3ZSB0cmFjayBpbiB0aGUgZ2xvYmFsIFBNVSBtYXNrLgor ICoKKyAqIEl0IGlzIGFsc28gdXNlZCB0byBrbm93IHRvIG5lZWRlZCBudW1iZXIgb2YgZXZlbnQg cmVmZXJlbmNlIGNvdW50ZXJzLgorICovCisjZGVmaW5lIEk5MTVfUE1VX01BU0tfQklUUyBcCisJ KDEgPDwgSTkxNV9QTVVfU0FNUExFX0JJVFMpICsgKEk5MTVfUE1VX0xBU1QgKyAxIC0gX19JOTE1 X1BNVV9PVEhFUigwKSkKKworc3RydWN0IGk5MTVfcG11IHsKKwkvKioKKwkgKiBAbm9kZTogTGlz dCBub2RlIGZvciBDUFUgaG90cGx1ZyBoYW5kbGluZy4KKwkgKi8KKwlzdHJ1Y3QgaGxpc3Rfbm9k ZSBub2RlOworCS8qKgorCSAqIEBiYXNlOiBQTVUgYmFzZS4KKwkgKi8KKwlzdHJ1Y3QgcG11IGJh c2U7CisJLyoqCisJICogQGxvY2s6IExvY2sgcHJvdGVjdGluZyBlbmFibGUgbWFzayBhbmQgcmVm IGNvdW50IGhhbmRsaW5nLgorCSAqLworCXNwaW5sb2NrX3QgbG9jazsKKwkvKioKKwkgKiBAdGlt ZXI6IFRpbWVyIGZvciBpbnRlcm5hbCBpOTE1IFBNVSBzYW1wbGluZy4KKwkgKi8KKwlzdHJ1Y3Qg aHJ0aW1lciB0aW1lcjsKKwkvKioKKwkgKiBAZW5hYmxlOiBCaXRtYXNrIG9mIGFsbCBjdXJyZW50 bHkgZW5hYmxlZCBldmVudHMuCisJICoKKwkgKiBCaXRzIGFyZSBkZXJpdmVkIGZyb20gdUFQSSBl dmVudCBudW1iZXJzIGluIGEgd2F5IHRoYXQgbG93IDE2IGJpdHMKKwkgKiBjb3JyZXNwb25kIHRv IGVuZ2luZSBldmVudCBfc2FtcGxlXyBfdHlwZV8gKEk5MTVfU0FNUExFX1FVRVVFRCBpcworCSAq IGJpdCAwKSwgYW5kIGhpZ2hlciBiaXRzIGNvcnJlc3BvbmQgdG8gb3RoZXIgZXZlbnRzIChmb3Ig aW5zdGFuY2UKKwkgKiBJOTE1X1BNVV9BQ1RVQUxfRlJFUVVFTkNZIGlzIGJpdCAxNiBldGMpLgor CSAqCisJICogSW4gb3RoZXIgd29yZHMsIGxvdyAxNiBiaXRzIGFyZSBub3QgcGVyIGVuZ2luZSBi dXQgcGVyIGVuZ2luZQorCSAqIHNhbXBsZXIgdHlwZSwgd2hpbGUgdGhlIHVwcGVyIGJpdHMgYXJl IGRpcmVjdGx5IG1hcHBlZCB0byBvdGhlcgorCSAqIGV2ZW50IHR5cGVzLgorCSAqLworCXU2NCBl bmFibGU7CisJLyoqCisJICogQGVuYWJsZV9jb3VudDogUmVmZXJlbmNlIGNvdW50cyBmb3IgdGhl IGVuYWJsZWQgZXZlbnRzLgorCSAqCisJICogQXJyYXkgaW5kaWNlcyBhcmUgbWFwcGVkIGluIHRo ZSBzYW1lIHdheSBhcyBiaXRzIGluIHRoZSBAZW5hYmxlIGZpZWxkCisJICogYW5kIHRoZXkgYXJl IHVzZWQgdG8gY29udHJvbCBzYW1wbGluZyBvbi9vZmYgd2hlbiBtdWx0aXBsZSBjbGllbnRzCisJ ICogYXJlIHVzaW5nIHRoZSBQTVUgQVBJLgorCSAqLworCXVuc2lnbmVkIGludCBlbmFibGVfY291 bnRbSTkxNV9QTVVfTUFTS19CSVRTXTsKKwkvKioKKwkgKiBAc2FtcGxlOiBDdXJyZW50IGNvdW50 ZXIgdmFsdWUgZm9yIGk5MTUgZXZlbnRzIHdoaWNoIG5lZWQgc2FtcGxpbmcuCisJICoKKwkgKiBU aGVzZSBjb3VudGVycyBhcmUgdXBkYXRlZCBmcm9tIHRoZSBpOTE1IFBNVSBzYW1wbGluZyB0aW1l ci4KKwkgKgorCSAqIE9ubHkgZ2xvYmFsIGNvdW50ZXJzIGFyZSBoZWxkIGhlcmUsIHdoaWxlIHRo ZSBwZXItZW5naW5lIG9uZXMgYXJlIGluCisJICogc3RydWN0IGludGVsX2VuZ2luZV9jcy4KKwkg Ki8KKwl1NjQgc2FtcGxlW19fSTkxNV9OVU1fUE1VX1NBTVBMRVJTXTsKK307CisKIHN0cnVjdCBk cm1faTkxNV9wcml2YXRlIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSBkcm07CiAKQEAgLTIyMzgsNiAr MjMwMiw3IEBAIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIHsKIAlzdHJ1Y3QgcGNpX2RldiAqYnJp ZGdlX2RldjsKIAlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqa2VybmVsX2NvbnRleHQ7CiAJc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lW0k5MTVfTlVNX0VOR0lORVNdOworCXN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKmVuZ2luZV9jbGFzc1tNQVhfRU5HSU5FX0NMQVNTICsgMV1bTUFYX0VO R0lORV9JTlNUQU5DRSArIDFdOwogCXN0cnVjdCBpOTE1X3ZtYSAqc2VtYXBob3JlOwogCiAJc3Ry dWN0IGRybV9kbWFfaGFuZGxlICpzdGF0dXNfcGFnZV9kbWFoOwpAQCAtMjY5OCw2ICsyNzYzLDgg QEAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgewogCQlpbnQJaXJxOwogCX0gbHBlX2F1ZGlvOwog CisJc3RydWN0IGk5MTVfcG11IHBtdTsKKwogCS8qCiAJICogTk9URTogVGhpcyBpcyB0aGUgZHJp MS91bXMgZHVuZ2VvbiwgZG9uJ3QgYWRkIHN0dWZmIGhlcmUuIFlvdXIgcGF0Y2gKIAkgKiB3aWxs IGJlIHJlamVjdGVkLiBJbnN0ZWFkIGxvb2sgZm9yIGEgYmV0dGVyIHBsYWNlLgpAQCAtMzkxOCw2 ICszOTg1LDE1IEBAIGV4dGVybiB2b2lkIGk5MTVfcGVyZl9maW5pKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdik7CiBleHRlcm4gdm9pZCBpOTE1X3BlcmZfcmVnaXN0ZXIoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKIGV4dGVybiB2b2lkIGk5MTVfcGVyZl91bnJl Z2lzdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CiAKKy8qIGk5MTVfcG11 LmMgKi8KKyNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKK2V4dGVybiB2b2lkIGk5MTVfcG11X3Jl Z2lzdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KTsKK2V4dGVybiB2b2lkIGk5MTVf cG11X3VucmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpOworI2Vsc2UKK3N0 YXRpYyBpbmxpbmUgdm9pZCBpOTE1X3BtdV9yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqaTkxNSkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBpOTE1X3BtdV91bnJlZ2lzdGVyKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICppOTE1KSB7fQorI2VuZGlmCisKIC8qIGk5MTVfc3VzcGVuZC5j ICovCiBleHRlcm4gaW50IGk5MTVfc2F2ZV9zdGF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpOwogZXh0ZXJuIGludCBpOTE1X3Jlc3RvcmVfc3RhdGUoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfcG11LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BtdS5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZTgyNjQ4ZTY2MzViCi0tLSAvZGV2L251bGwKKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wbXUuYwpAQCAtMCwwICsxLDY5NyBAQAorLyoK KyAqIENvcHlyaWdodCDCqSAyMDE3IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lv biBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWlu aW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0 aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3 aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUg cmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwg c3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0 byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRv IGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUg YWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVk aW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3Bp ZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBU SEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkg S0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBU TyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwK KyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENM QUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9O IE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9G IE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBE RUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgv cGVyZl9ldmVudC5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KKworI2luY2x1ZGUg Imk5MTVfZHJ2LmgiCisjaW5jbHVkZSAiaW50ZWxfcmluZ2J1ZmZlci5oIgorCisvKiBGcmVxdWVu Y3kgZm9yIHRoZSBzYW1wbGluZyB0aW1lciBmb3IgZXZlbnRzIHdoaWNoIG5lZWQgaXQuICovCisj ZGVmaW5lIEZSRVFVRU5DWSAyMDAKKyNkZWZpbmUgUEVSSU9EIG1heF90KHU2NCwgMTAwMDAsIE5T RUNfUEVSX1NFQyAvIEZSRVFVRU5DWSkKKworI2RlZmluZSBFTkdJTkVfU0FNUExFX01BU0sgXAor CShCSVQoSTkxNV9TQU1QTEVfUVVFVUVEKSB8IFwKKwkgQklUKEk5MTVfU0FNUExFX0JVU1kpIHwg XAorCSBCSVQoSTkxNV9TQU1QTEVfV0FJVCkgfCBcCisJIEJJVChJOTE1X1NBTVBMRV9TRU1BKSkK KworI2RlZmluZSBFTkdJTkVfU0FNUExFX0JJVFMgKDEgPDwgSTkxNV9QTVVfU0FNUExFX0JJVFMp CisKK3N0YXRpYyBjcHVtYXNrX3QgaTkxNV9wbXVfY3B1bWFzayA9IENQVV9NQVNLX05PTkU7CisK K3N0YXRpYyB1OCBlbmdpbmVfY29uZmlnX3NhbXBsZSh1NjQgY29uZmlnKQoreworCXJldHVybiBj b25maWcgJiBJOTE1X1BNVV9TQU1QTEVfTUFTSzsKK30KKworc3RhdGljIHU4IGVuZ2luZV9ldmVu dF9zYW1wbGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXJldHVybiBlbmdpbmVfY29u ZmlnX3NhbXBsZShldmVudC0+YXR0ci5jb25maWcpOworfQorCitzdGF0aWMgdTggZW5naW5lX2V2 ZW50X2NsYXNzKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlyZXR1cm4gKGV2ZW50LT5h dHRyLmNvbmZpZyA+PiBJOTE1X1BNVV9DTEFTU19TSElGVCkgJiAweGZmOworfQorCitzdGF0aWMg dTggZW5naW5lX2V2ZW50X2luc3RhbmNlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwly ZXR1cm4gKGV2ZW50LT5hdHRyLmNvbmZpZyA+PiBJOTE1X1BNVV9TQU1QTEVfQklUUykgJiAweGZm OworfQorCitzdGF0aWMgYm9vbCBpc19lbmdpbmVfY29uZmlnKHU2NCBjb25maWcpCit7CisJcmV0 dXJuIGNvbmZpZyA8IF9fSTkxNV9QTVVfT1RIRVIoMCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBp bnQgY29uZmlnX2VuYWJsZWRfYml0KHU2NCBjb25maWcpCit7CisJaWYgKGlzX2VuZ2luZV9jb25m aWcoY29uZmlnKSkKKwkJcmV0dXJuIGVuZ2luZV9jb25maWdfc2FtcGxlKGNvbmZpZyk7CisJZWxz ZQorCQlyZXR1cm4gRU5HSU5FX1NBTVBMRV9CSVRTICsgKGNvbmZpZyAtIF9fSTkxNV9QTVVfT1RI RVIoMCkpOworfQorCitzdGF0aWMgdTY0IGNvbmZpZ19lbmFibGVkX21hc2sodTY0IGNvbmZpZykK K3sKKwlyZXR1cm4gQklUX1VMTChjb25maWdfZW5hYmxlZF9iaXQoY29uZmlnKSk7Cit9CisKK3N0 YXRpYyBib29sIGlzX2VuZ2luZV9ldmVudChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJ cmV0dXJuIGlzX2VuZ2luZV9jb25maWcoZXZlbnQtPmF0dHIuY29uZmlnKTsKK30KKworc3RhdGlj IHVuc2lnbmVkIGludCBldmVudF9lbmFibGVkX2JpdChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQp Cit7CisJcmV0dXJuIGNvbmZpZ19lbmFibGVkX2JpdChldmVudC0+YXR0ci5jb25maWcpOworfQor CitzdGF0aWMgYm9vbCBncmFiX2ZvcmNld2FrZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSwgYm9vbCBmdykKK3sKKwlpZiAoIWZ3KQorCQlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2dldChp OTE1LCBGT1JDRVdBS0VfQUxMKTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBl bmdpbmVzX3NhbXBsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOworCWVudW0gaW50ZWxfZW5naW5lX2lkIGlkOwor CWJvb2wgZncgPSBmYWxzZTsKKworCWlmICgoZGV2X3ByaXYtPnBtdS5lbmFibGUgJiBFTkdJTkVf U0FNUExFX01BU0spID09IDApCisJCXJldHVybjsKKworCWlmICghZGV2X3ByaXYtPmd0LmF3YWtl KQorCQlyZXR1cm47CisKKwlpZiAoIWludGVsX3J1bnRpbWVfcG1fZ2V0X2lmX2luX3VzZShkZXZf cHJpdikpCisJCXJldHVybjsKKworCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGRldl9wcml2LCBp ZCkgeworCQl1MzIgZW5hYmxlID0gZW5naW5lLT5wbXUuZW5hYmxlOworCisJCWlmIChpOTE1X3Nl cW5vX3Bhc3NlZChpbnRlbF9lbmdpbmVfZ2V0X3NlcW5vKGVuZ2luZSksCisJCQkJICAgICAgaW50 ZWxfZW5naW5lX2xhc3Rfc3VibWl0KGVuZ2luZSkpKQorCQkJY29udGludWU7CisKKwkJaWYgKGVu YWJsZSAmIEJJVChJOTE1X1NBTVBMRV9RVUVVRUQpKQorCQkJZW5naW5lLT5wbXUuc2FtcGxlW0k5 MTVfU0FNUExFX1FVRVVFRF0gKz0gUEVSSU9EOworCisJCWlmIChlbmFibGUgJiBCSVQoSTkxNV9T QU1QTEVfQlVTWSkpIHsKKwkJCXUzMiB2YWw7CisKKwkJCWZ3ID0gZ3JhYl9mb3JjZXdha2UoZGV2 X3ByaXYsIGZ3KTsKKwkJCXZhbCA9IEk5MTVfUkVBRF9GVyhSSU5HX01JX01PREUoZW5naW5lLT5t bWlvX2Jhc2UpKTsKKwkJCWlmICghKHZhbCAmIE1PREVfSURMRSkpCisJCQkJZW5naW5lLT5wbXUu c2FtcGxlW0k5MTVfU0FNUExFX0JVU1ldICs9IFBFUklPRDsKKwkJfQorCisJCWlmIChlbmFibGUg JiAoQklUKEk5MTVfU0FNUExFX1dBSVQpIHwgQklUKEk5MTVfU0FNUExFX1NFTUEpKSkgeworCQkJ dTMyIHZhbDsKKworCQkJZncgPSBncmFiX2ZvcmNld2FrZShkZXZfcHJpdiwgZncpOworCQkJdmFs ID0gSTkxNV9SRUFEX0ZXKFJJTkdfQ1RMKGVuZ2luZS0+bW1pb19iYXNlKSk7CisJCQlpZiAoKGVu YWJsZSAmIEJJVChJOTE1X1NBTVBMRV9XQUlUKSkgJiYKKwkJCSAgICAodmFsICYgUklOR19XQUlU KSkKKwkJCQllbmdpbmUtPnBtdS5zYW1wbGVbSTkxNV9TQU1QTEVfV0FJVF0gKz0gUEVSSU9EOwor CQkJaWYgKChlbmFibGUgJiBCSVQoSTkxNV9TQU1QTEVfU0VNQSkpICYmCisJCQkgICAgKHZhbCAm IFJJTkdfV0FJVF9TRU1BUEhPUkUpKQorCQkJCWVuZ2luZS0+cG11LnNhbXBsZVtJOTE1X1NBTVBM RV9TRU1BXSArPSBQRVJJT0Q7CisJCX0KKwl9CisKKwlpZiAoZncpCisJCWludGVsX3VuY29yZV9m b3JjZXdha2VfcHV0KGRldl9wcml2LCBGT1JDRVdBS0VfQUxMKTsKKwlpbnRlbF9ydW50aW1lX3Bt X3B1dChkZXZfcHJpdik7Cit9CisKK3N0YXRpYyB2b2lkIGZyZXF1ZW5jeV9zYW1wbGUoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQoreworCWlmIChkZXZfcHJpdi0+cG11LmVuYWJs ZSAmCisJICAgIGNvbmZpZ19lbmFibGVkX21hc2soSTkxNV9QTVVfQUNUVUFMX0ZSRVFVRU5DWSkp IHsKKwkJdTY0IHZhbDsKKworCQl2YWwgPSBkZXZfcHJpdi0+cnBzLmN1cl9mcmVxOworCQlpZiAo ZGV2X3ByaXYtPmd0LmF3YWtlICYmCisJCSAgICBpbnRlbF9ydW50aW1lX3BtX2dldF9pZl9pbl91 c2UoZGV2X3ByaXYpKSB7CisJCQl2YWwgPSBpbnRlbF9nZXRfY2FnZihkZXZfcHJpdiwKKwkJCQkJ ICAgICBJOTE1X1JFQURfTk9UUkFDRShHRU42X1JQU1RBVDEpKTsKKwkJCWludGVsX3J1bnRpbWVf cG1fcHV0KGRldl9wcml2KTsKKwkJfQorCQl2YWwgPSBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwg dmFsKTsKKwkJZGV2X3ByaXYtPnBtdS5zYW1wbGVbX19JOTE1X1NBTVBMRV9GUkVRX0FDVF0gKz0g dmFsICogUEVSSU9EOworCX0KKworCWlmIChkZXZfcHJpdi0+cG11LmVuYWJsZSAmCisJICAgIGNv bmZpZ19lbmFibGVkX21hc2soSTkxNV9QTVVfUkVRVUVTVEVEX0ZSRVFVRU5DWSkpIHsKKwkJdTY0 IHZhbCA9IGludGVsX2dwdV9mcmVxKGRldl9wcml2LCBkZXZfcHJpdi0+cnBzLmN1cl9mcmVxKTsK KwkJZGV2X3ByaXYtPnBtdS5zYW1wbGVbX19JOTE1X1NBTVBMRV9GUkVRX1JFUV0gKz0gdmFsICog UEVSSU9EOworCX0KK30KKworc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGk5MTVfc2FtcGxl KHN0cnVjdCBocnRpbWVyICpocnRpbWVyKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpp OTE1ID0KKwkJY29udGFpbmVyX29mKGhydGltZXIsIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlLCBw bXUudGltZXIpOworCisJaWYgKGk5MTUtPnBtdS5lbmFibGUgPT0gMCkKKwkJcmV0dXJuIEhSVElN RVJfTk9SRVNUQVJUOworCisJZW5naW5lc19zYW1wbGUoaTkxNSk7CisJZnJlcXVlbmN5X3NhbXBs ZShpOTE1KTsKKworCWhydGltZXJfZm9yd2FyZF9ub3coaHJ0aW1lciwgbnNfdG9fa3RpbWUoUEVS SU9EKSk7CisJcmV0dXJuIEhSVElNRVJfUkVTVEFSVDsKK30KKworc3RhdGljIHU2NCBjb3VudF9p bnRlcnJ1cHRzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQoreworCS8qIG9wZW4tY29k ZWQga3N0YXRfaXJxcygpICovCisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2Mo aTkxNS0+ZHJtLnBkZXYtPmlycSk7CisJdTY0IHN1bSA9IDA7CisJaW50IGNwdTsKKworCWlmICgh ZGVzYyB8fCAhZGVzYy0+a3N0YXRfaXJxcykKKwkJcmV0dXJuIDA7CisKKwlmb3JfZWFjaF9wb3Nz aWJsZV9jcHUoY3B1KQorCQlzdW0gKz0gKnBlcl9jcHVfcHRyKGRlc2MtPmtzdGF0X2lycXMsIGNw dSk7CisKKwlyZXR1cm4gc3VtOworfQorCitzdGF0aWMgdm9pZCBpOTE1X3BtdV9ldmVudF9kZXN0 cm95KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlXQVJOX09OKGV2ZW50LT5wYXJlbnQp OworfQorCitzdGF0aWMgaW50IGVuZ2luZV9ldmVudF9pbml0KHN0cnVjdCBwZXJmX2V2ZW50ICpl dmVudCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9CisJCWNvbnRhaW5lcl9v ZihldmVudC0+cG11LCB0eXBlb2YoKmk5MTUpLCBwbXUuYmFzZSk7CisKKwlpZiAoIWludGVsX2Vu Z2luZV9sb29rdXBfdXNlcihpOTE1LCBlbmdpbmVfZXZlbnRfY2xhc3MoZXZlbnQpLAorCQkJCSAg ICAgIGVuZ2luZV9ldmVudF9pbnN0YW5jZShldmVudCkpKQorCQlyZXR1cm4gLUVOT0RFVjsKKwor CXN3aXRjaCAoZW5naW5lX2V2ZW50X3NhbXBsZShldmVudCkpIHsKKwljYXNlIEk5MTVfU0FNUExF X1FVRVVFRDoKKwljYXNlIEk5MTVfU0FNUExFX0JVU1k6CisJY2FzZSBJOTE1X1NBTVBMRV9XQUlU OgorCQlicmVhazsKKwljYXNlIEk5MTVfU0FNUExFX1NFTUE6CisJCWlmIChJTlRFTF9HRU4oaTkx NSkgPCA2KQorCQkJcmV0dXJuIC1FTk9ERVY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVy biAtRU5PRU5UOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGk5MTVfcG11X2V2 ZW50X2luaXQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1ID0KKwkJY29udGFpbmVyX29mKGV2ZW50LT5wbXUsIHR5cGVvZigqaTkxNSks IHBtdS5iYXNlKTsKKwlpbnQgY3B1LCByZXQ7CisKKwlpZiAoZXZlbnQtPmF0dHIudHlwZSAhPSBl dmVudC0+cG11LT50eXBlKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCS8qIHVuc3VwcG9ydGVkIG1v ZGVzIGFuZCBmaWx0ZXJzICovCisJaWYgKGV2ZW50LT5hdHRyLnNhbXBsZV9wZXJpb2QpIC8qIG5v IHNhbXBsaW5nICovCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGhhc19icmFuY2hfc3RhY2so ZXZlbnQpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlpZiAoZXZlbnQtPmNwdSA8IDApCisJ CXJldHVybiAtRUlOVkFMOworCisJY3B1ID0gY3B1bWFza19hbnlfYW5kKCZpOTE1X3BtdV9jcHVt YXNrLAorCQkJICAgICAgdG9wb2xvZ3lfc2libGluZ19jcHVtYXNrKGV2ZW50LT5jcHUpKTsKKwlp ZiAoY3B1ID49IG5yX2NwdV9pZHMpCisJCXJldHVybiAtRU5PREVWOworCisJcmV0ID0gMDsKKwlp ZiAoaXNfZW5naW5lX2V2ZW50KGV2ZW50KSkgeworCQlyZXQgPSBlbmdpbmVfZXZlbnRfaW5pdChl dmVudCk7CisJfSBlbHNlIHN3aXRjaCAoZXZlbnQtPmF0dHIuY29uZmlnKSB7CisJY2FzZSBJOTE1 X1BNVV9BQ1RVQUxfRlJFUVVFTkNZOgorCQlpZiAoSVNfVkFMTEVZVklFVyhpOTE1KSB8fCBJU19D SEVSUllWSUVXKGk5MTUpKQorCQkJcmV0ID0gLUVOT0RFVjsgLyogcmVxdWlyZXMgYSBtdXRleCBm b3Igc2FtcGxpbmchICovCisJY2FzZSBJOTE1X1BNVV9SRVFVRVNURURfRlJFUVVFTkNZOgorCWNh c2UgSTkxNV9QTVVfRU5FUkdZOgorCWNhc2UgSTkxNV9QTVVfUkM2X1JFU0lERU5DWToKKwljYXNl IEk5MTVfUE1VX1JDNnBfUkVTSURFTkNZOgorCWNhc2UgSTkxNV9QTVVfUkM2cHBfUkVTSURFTkNZ OgorCQlpZiAoSU5URUxfR0VOKGk5MTUpIDwgNikKKwkJCXJldCA9IC1FTk9ERVY7CisJCWJyZWFr OworCX0KKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZXZlbnQtPmNwdSA9IGNwdTsKKwlp ZiAoIWV2ZW50LT5wYXJlbnQpCisJCWV2ZW50LT5kZXN0cm95ID0gaTkxNV9wbXVfZXZlbnRfZGVz dHJveTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdTY0IF9faTkxNV9wbXVfZXZlbnRfcmVh ZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg Kmk5MTUgPQorCQljb250YWluZXJfb2YoZXZlbnQtPnBtdSwgdHlwZW9mKCppOTE1KSwgcG11LmJh c2UpOworCXU2NCB2YWwgPSAwOworCisJaWYgKGlzX2VuZ2luZV9ldmVudChldmVudCkpIHsKKwkJ dTggc2FtcGxlID0gZW5naW5lX2V2ZW50X3NhbXBsZShldmVudCk7CisJCXN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKmVuZ2luZTsKKworCQllbmdpbmUgPSBpbnRlbF9lbmdpbmVfbG9va3VwX3VzZXIo aTkxNSwKKwkJCQkJCSAgZW5naW5lX2V2ZW50X2NsYXNzKGV2ZW50KSwKKwkJCQkJCSAgZW5naW5l X2V2ZW50X2luc3RhbmNlKGV2ZW50KSk7CisKKwkJaWYgKFdBUk5fT05fT05DRSghZW5naW5lKSkg eworCQkJLyogRG8gbm90aGluZyAqLworCQl9IGVsc2UgeworCQkJdmFsID0gZW5naW5lLT5wbXUu c2FtcGxlW3NhbXBsZV07CisJCX0KKwl9IGVsc2Ugc3dpdGNoIChldmVudC0+YXR0ci5jb25maWcp IHsKKwljYXNlIEk5MTVfUE1VX0FDVFVBTF9GUkVRVUVOQ1k6CisJCXZhbCA9IGk5MTUtPnBtdS5z YW1wbGVbX19JOTE1X1NBTVBMRV9GUkVRX0FDVF07CisJCWJyZWFrOworCWNhc2UgSTkxNV9QTVVf UkVRVUVTVEVEX0ZSRVFVRU5DWToKKwkJdmFsID0gaTkxNS0+cG11LnNhbXBsZVtfX0k5MTVfU0FN UExFX0ZSRVFfUkVRXTsKKwkJYnJlYWs7CisJY2FzZSBJOTE1X1BNVV9FTkVSR1k6CisJCXZhbCA9 IGludGVsX2VuZXJneV91SihpOTE1KTsKKwkJYnJlYWs7CisJY2FzZSBJOTE1X1BNVV9JTlRFUlJV UFRTOgorCQl2YWwgPSBjb3VudF9pbnRlcnJ1cHRzKGk5MTUpOworCQlicmVhazsKKwljYXNlIEk5 MTVfUE1VX1JDNl9SRVNJREVOQ1k6CisJCXZhbCA9IGludGVsX3JjNl9yZXNpZGVuY3lfbnMoaTkx NSwKKwkJCQkJICAgICBJU19WQUxMRVlWSUVXKGk5MTUpID8KKwkJCQkJICAgICBWTFZfR1RfUkVO REVSX1JDNiA6CisJCQkJCSAgICAgR0VONl9HVF9HRlhfUkM2KTsKKwkJYnJlYWs7CisJY2FzZSBJ OTE1X1BNVV9SQzZwX1JFU0lERU5DWToKKwkJaWYgKCFJU19WQUxMRVlWSUVXKGk5MTUpKQorCQkJ dmFsID0gaW50ZWxfcmM2X3Jlc2lkZW5jeV9ucyhpOTE1LCBHRU42X0dUX0dGWF9SQzZwKTsKKwkJ YnJlYWs7CisJY2FzZSBJOTE1X1BNVV9SQzZwcF9SRVNJREVOQ1k6CisJCWlmICghSVNfVkFMTEVZ VklFVyhpOTE1KSkKKwkJCXZhbCA9IGludGVsX3JjNl9yZXNpZGVuY3lfbnMoaTkxNSwgR0VONl9H VF9HRlhfUkM2cHApOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMg dm9pZCBpOTE1X3BtdV9ldmVudF9yZWFkKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlz dHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKKwl1NjQgcHJldiwgbmV3Owor CithZ2FpbjoKKwlwcmV2ID0gbG9jYWw2NF9yZWFkKCZod2MtPnByZXZfY291bnQpOworCW5ldyA9 IF9faTkxNV9wbXVfZXZlbnRfcmVhZChldmVudCk7CisKKwlpZiAobG9jYWw2NF9jbXB4Y2hnKCZo d2MtPnByZXZfY291bnQsIHByZXYsIG5ldykgIT0gcHJldikKKwkJZ290byBhZ2FpbjsKKworCWxv Y2FsNjRfYWRkKG5ldyAtIHByZXYsICZldmVudC0+Y291bnQpOworfQorCitzdGF0aWMgdm9pZCBp OTE1X3BtdV9lbmFibGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICppOTE1ID0KKwkJY29udGFpbmVyX29mKGV2ZW50LT5wbXUsIHR5cGVvZigq aTkxNSksIHBtdS5iYXNlKTsKKwl1bnNpZ25lZCBpbnQgYml0ID0gZXZlbnRfZW5hYmxlZF9iaXQo ZXZlbnQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaTkx NS0+cG11LmxvY2ssIGZsYWdzKTsKKworCS8qCisJICogU3RhcnQgdGhlIHNhbXBsaW5nIHRpbWVy IHdoZW4gZW5hYmxpbmcgdGhlIGZpcnN0IGV2ZW50LgorCSAqLworCWlmIChpOTE1LT5wbXUuZW5h YmxlID09IDApCisJCWhydGltZXJfc3RhcnRfcmFuZ2VfbnMoJmk5MTUtPnBtdS50aW1lciwKKwkJ CQkgICAgICAgbnNfdG9fa3RpbWUoUEVSSU9EKSwgMCwKKwkJCQkgICAgICAgSFJUSU1FUl9NT0RF X1JFTF9QSU5ORUQpOworCisJLyoKKwkgKiBVcGRhdGUgdGhlIGJpdG1hc2sgb2YgZW5hYmxlZCBl dmVudHMgYW5kIGluY3JlbWVudAorCSAqIHRoZSBldmVudCByZWZlcmVuY2UgY291bnRlci4KKwkg Ki8KKwlHRU1fQlVHX09OKGJpdCA+PSBJOTE1X1BNVV9NQVNLX0JJVFMpOworCUdFTV9CVUdfT04o aTkxNS0+cG11LmVuYWJsZV9jb3VudFtiaXRdID09IH4wKTsKKwlpOTE1LT5wbXUuZW5hYmxlIHw9 IEJJVF9VTEwoYml0KTsKKwlpOTE1LT5wbXUuZW5hYmxlX2NvdW50W2JpdF0rKzsKKworCS8qCisJ ICogRm9yIHBlci1lbmdpbmUgZXZlbnRzIHRoZSBiaXRtYXNrIGFuZCByZWZlcmVuY2UgY291bnRp bmcKKwkgKiBpcyBzdG9yZWQgcGVyIGVuZ2luZS4KKwkgKi8KKwlpZiAoaXNfZW5naW5lX2V2ZW50 KGV2ZW50KSkgeworCQl1OCBzYW1wbGUgPSBlbmdpbmVfZXZlbnRfc2FtcGxlKGV2ZW50KTsKKwkJ c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOworCisJCWVuZ2luZSA9IGludGVsX2VuZ2lu ZV9sb29rdXBfdXNlcihpOTE1LAorCQkJCQkJICBlbmdpbmVfZXZlbnRfY2xhc3MoZXZlbnQpLAor CQkJCQkJICBlbmdpbmVfZXZlbnRfaW5zdGFuY2UoZXZlbnQpKTsKKwkJR0VNX0JVR19PTighZW5n aW5lKTsKKwkJZW5naW5lLT5wbXUuZW5hYmxlIHw9IEJJVChzYW1wbGUpOworCisJCUdFTV9CVUdf T04oc2FtcGxlID49IEk5MTVfUE1VX1NBTVBMRV9CSVRTKTsKKwkJR0VNX0JVR19PTihlbmdpbmUt PnBtdS5lbmFibGVfY291bnRbc2FtcGxlXSA9PSB+MCk7CisJCWVuZ2luZS0+cG11LmVuYWJsZV9j b3VudFtzYW1wbGVdKys7CisJfQorCisJLyoKKwkgKiBTdG9yZSB0aGUgY3VycmVudCBjb3VudGVy IHZhbHVlIHNvIHdlIGNhbiByZXBvcnQgdGhlIGNvcnJlY3QgZGVsdGEKKwkgKiBmb3IgYWxsIGxp c3RlbmVycy4gRXZlbiB3aGVuIHRoZSBldmVudCB3YXMgYWxyZWFkeSBlbmFibGVkIGFuZCBoYXMK KwkgKiBhbiBleGlzdGluZyBub24temVybyB2YWx1ZS4KKwkgKi8KKwlsb2NhbDY0X3NldCgmZXZl bnQtPmh3LnByZXZfY291bnQsIF9faTkxNV9wbXVfZXZlbnRfcmVhZChldmVudCkpOworCisJc3Bp bl91bmxvY2tfaXJxcmVzdG9yZSgmaTkxNS0+cG11LmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGlj IHZvaWQgaTkxNV9wbXVfZGlzYWJsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPQorCQljb250YWluZXJfb2YoZXZlbnQtPnBtdSwg dHlwZW9mKCppOTE1KSwgcG11LmJhc2UpOworCXVuc2lnbmVkIGludCBiaXQgPSBldmVudF9lbmFi bGVkX2JpdChldmVudCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFz YXZlKCZpOTE1LT5wbXUubG9jaywgZmxhZ3MpOworCisJaWYgKGlzX2VuZ2luZV9ldmVudChldmVu dCkpIHsKKwkJdTggc2FtcGxlID0gZW5naW5lX2V2ZW50X3NhbXBsZShldmVudCk7CisJCXN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKKworCQllbmdpbmUgPSBpbnRlbF9lbmdpbmVfbG9v a3VwX3VzZXIoaTkxNSwKKwkJCQkJCSAgZW5naW5lX2V2ZW50X2NsYXNzKGV2ZW50KSwKKwkJCQkJ CSAgZW5naW5lX2V2ZW50X2luc3RhbmNlKGV2ZW50KSk7CisJCUdFTV9CVUdfT04oIWVuZ2luZSk7 CisJCUdFTV9CVUdfT04oc2FtcGxlID49IEk5MTVfUE1VX1NBTVBMRV9CSVRTKTsKKwkJR0VNX0JV R19PTihlbmdpbmUtPnBtdS5lbmFibGVfY291bnRbc2FtcGxlXSA9PSAwKTsKKwkJLyoKKwkJICog RGVjcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgYW5kIGNsZWFyIHRoZSBlbmFibGVkCisJCSAq IGJpdG1hc2sgd2hlbiB0aGUgbGFzdCBsaXN0ZW5lciBvbiBhbiBldmVudCBnb2VzIGF3YXkuCisJ CSAqLworCQlpZiAoLS1lbmdpbmUtPnBtdS5lbmFibGVfY291bnRbc2FtcGxlXSA9PSAwKQorCQkJ ZW5naW5lLT5wbXUuZW5hYmxlICY9IH5CSVQoc2FtcGxlKTsKKwl9CisKKwlHRU1fQlVHX09OKGJp dCA+PSBJOTE1X1BNVV9NQVNLX0JJVFMpOworCUdFTV9CVUdfT04oaTkxNS0+cG11LmVuYWJsZV9j b3VudFtiaXRdID09IDApOworCS8qCisJICogRGVjcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQg YW5kIGNsZWFyIHRoZSBlbmFibGVkCisJICogYml0bWFzayB3aGVuIHRoZSBsYXN0IGxpc3RlbmVy IG9uIGFuIGV2ZW50IGdvZXMgYXdheS4KKwkgKi8KKwlpZiAoLS1pOTE1LT5wbXUuZW5hYmxlX2Nv dW50W2JpdF0gPT0gMCkKKwkJaTkxNS0+cG11LmVuYWJsZSAmPSB+QklUX1VMTChiaXQpOworCisJ c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTkxNS0+cG11LmxvY2ssIGZsYWdzKTsKK30KKworc3Rh dGljIHZvaWQgaTkxNV9wbXVfZXZlbnRfc3RhcnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBp bnQgZmxhZ3MpCit7CisJaTkxNV9wbXVfZW5hYmxlKGV2ZW50KTsKKwlldmVudC0+aHcuc3RhdGUg PSAwOworfQorCitzdGF0aWMgdm9pZCBpOTE1X3BtdV9ldmVudF9zdG9wKHN0cnVjdCBwZXJmX2V2 ZW50ICpldmVudCwgaW50IGZsYWdzKQoreworCWlmIChmbGFncyAmIFBFUkZfRUZfVVBEQVRFKQor CQlpOTE1X3BtdV9ldmVudF9yZWFkKGV2ZW50KTsKKwlpOTE1X3BtdV9kaXNhYmxlKGV2ZW50KTsK KwlldmVudC0+aHcuc3RhdGUgPSBQRVJGX0hFU19TVE9QUEVEOworfQorCitzdGF0aWMgaW50IGk5 MTVfcG11X2V2ZW50X2FkZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBmbGFncykKK3sK KwlpZiAoZmxhZ3MgJiBQRVJGX0VGX1NUQVJUKQorCQlpOTE1X3BtdV9ldmVudF9zdGFydChldmVu dCwgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGk5MTVfcG11X2V2ZW50 X2RlbChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBmbGFncykKK3sKKwlpOTE1X3BtdV9l dmVudF9zdG9wKGV2ZW50LCBQRVJGX0VGX1VQREFURSk7Cit9CisKK3N0YXRpYyBpbnQgaTkxNV9w bXVfZXZlbnRfZXZlbnRfaWR4KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIHNzaXplX3QgaTkxNV9wbXVfZm9ybWF0X3Nob3coc3RydWN0IGRldmlj ZSAqZGV2LAorCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVm KQoreworICAgICAgICBzdHJ1Y3QgZGV2X2V4dF9hdHRyaWJ1dGUgKmVhdHRyOworCisgICAgICAg IGVhdHRyID0gY29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCBkZXZfZXh0X2F0dHJpYnV0ZSwgYXR0 cik7CisgICAgICAgIHJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCAoY2hhciAqKSBlYXR0ci0+ dmFyKTsKK30KKworI2RlZmluZSBJOTE1X1BNVV9GT1JNQVRfQVRUUihfbmFtZSwgX2NvbmZpZykg ICAgICAgICAgIFwKKyAgICAgICAgKCYoKHN0cnVjdCBkZXZfZXh0X2F0dHJpYnV0ZVtdKSB7ICAg ICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHsgLmF0dHIgPSBfX0FUVFIoX25hbWUsIFNf SVJVR08sIGk5MTVfcG11X2Zvcm1hdF9zaG93LCBOVUxMKSwgXAorICAgICAgICAgICAgICAgICAg LnZhciA9ICh2b2lkICopIF9jb25maWcsIH0gICAgICAgICAgICBcCisgICAgICAgIH0pWzBdLmF0 dHIuYXR0cikKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmk5MTVfcG11X2Zvcm1hdF9hdHRy c1tdID0geworICAgICAgICBJOTE1X1BNVV9GT1JNQVRfQVRUUihpOTE1X2V2ZW50aWQsICJjb25m aWc6MC00MiIpLAorICAgICAgICBOVUxMLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRy aWJ1dGVfZ3JvdXAgaTkxNV9wbXVfZm9ybWF0X2F0dHJfZ3JvdXAgPSB7CisgICAgICAgIC5uYW1l ID0gImZvcm1hdCIsCisgICAgICAgIC5hdHRycyA9IGk5MTVfcG11X2Zvcm1hdF9hdHRycywKK307 CisKK3N0YXRpYyBzc2l6ZV90IGk5MTVfcG11X2V2ZW50X3Nob3coc3RydWN0IGRldmljZSAqZGV2 LAorCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7Cisg ICAgICAgIHN0cnVjdCBkZXZfZXh0X2F0dHJpYnV0ZSAqZWF0dHI7CisKKyAgICAgICAgZWF0dHIg PSBjb250YWluZXJfb2YoYXR0ciwgc3RydWN0IGRldl9leHRfYXR0cmlidXRlLCBhdHRyKTsKKyAg ICAgICAgcmV0dXJuIHNwcmludGYoYnVmLCAiY29uZmlnPTB4JWx4XG4iLCAodW5zaWduZWQgbG9u ZykgZWF0dHItPnZhcik7Cit9CisKKyNkZWZpbmUgSTkxNV9QTVVfRVZFTlRfQVRUUihfbmFtZSwg X2NvbmZpZykgICAgICAgICAgICBcCisgICAgICAgICgmKChzdHJ1Y3QgZGV2X2V4dF9hdHRyaWJ1 dGVbXSkgeyAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICB7IC5hdHRyID0gX19BVFRS KF9uYW1lLCBTX0lSVUdPLCBpOTE1X3BtdV9ldmVudF9zaG93LCBOVUxMKSwgXAorICAgICAgICAg ICAgICAgICAgLnZhciA9ICh2b2lkICopIF9jb25maWcsIH0gICAgICAgICAgICBcCisgICAgICAg ICB9KVswXS5hdHRyLmF0dHIpCisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICppOTE1X3BtdV9l dmVudHNfYXR0cnNbXSA9IHsKKwlJOTE1X1BNVV9FVkVOVF9BVFRSKHJjczAtcXVldWVkLAorCQkJ ICAgIEk5MTVfUE1VX0VOR0lORV9RVUVVRUQoSTkxNV9FTkdJTkVfQ0xBU1NfUkVOREVSLCAwKSks CisJSTkxNV9QTVVfRVZFTlRfQVRUUihyY3MwLWJ1c3ksCisJCQkgICAgSTkxNV9QTVVfRU5HSU5F X0JVU1koSTkxNV9FTkdJTkVfQ0xBU1NfUkVOREVSLCAwKSksCisJSTkxNV9QTVVfRVZFTlRfQVRU UihyY3MwLXdhaXQsCisJCQkgICAgSTkxNV9QTVVfRU5HSU5FX1dBSVQoSTkxNV9FTkdJTkVfQ0xB U1NfUkVOREVSLCAwKSksCisJSTkxNV9QTVVfRVZFTlRfQVRUUihyY3MwLXNlbWEsCisJCQkgICAg STkxNV9QTVVfRU5HSU5FX1NFTUEoSTkxNV9FTkdJTkVfQ0xBU1NfUkVOREVSLCAwKSksCisKKwlJ OTE1X1BNVV9FVkVOVF9BVFRSKGJjczAtcXVldWVkLAorCQkJICAgIEk5MTVfUE1VX0VOR0lORV9R VUVVRUQoSTkxNV9FTkdJTkVfQ0xBU1NfQ09QWSwgMCkpLAorCUk5MTVfUE1VX0VWRU5UX0FUVFIo YmNzMC1idXN5LAorCQkJICAgIEk5MTVfUE1VX0VOR0lORV9CVVNZKEk5MTVfRU5HSU5FX0NMQVNT X0NPUFksIDApKSwKKwlJOTE1X1BNVV9FVkVOVF9BVFRSKGJjczAtd2FpdCwKKwkJCSAgICBJOTE1 X1BNVV9FTkdJTkVfV0FJVChJOTE1X0VOR0lORV9DTEFTU19DT1BZLCAwKSksCisJSTkxNV9QTVVf RVZFTlRfQVRUUihiY3MwLXNlbWEsCisJCQkgICAgSTkxNV9QTVVfRU5HSU5FX1NFTUEoSTkxNV9F TkdJTkVfQ0xBU1NfQ09QWSwgMCkpLAorCisJSTkxNV9QTVVfRVZFTlRfQVRUUih2Y3MwLXF1ZXVl ZCwKKwkJCSAgICBJOTE1X1BNVV9FTkdJTkVfUVVFVUVEKEk5MTVfRU5HSU5FX0NMQVNTX1ZJREVP LCAwKSksCisJSTkxNV9QTVVfRVZFTlRfQVRUUih2Y3MwLWJ1c3ksCisJCQkgICAgSTkxNV9QTVVf RU5HSU5FX0JVU1koSTkxNV9FTkdJTkVfQ0xBU1NfVklERU8sIDApKSwKKwlJOTE1X1BNVV9FVkVO VF9BVFRSKHZjczAtd2FpdCwKKwkJCSAgICBJOTE1X1BNVV9FTkdJTkVfV0FJVChJOTE1X0VOR0lO RV9DTEFTU19WSURFTywgMCkpLAorCUk5MTVfUE1VX0VWRU5UX0FUVFIodmNzMC1zZW1hLAorCQkJ ICAgIEk5MTVfUE1VX0VOR0lORV9TRU1BKEk5MTVfRU5HSU5FX0NMQVNTX1ZJREVPLCAwKSksCisK KwlJOTE1X1BNVV9FVkVOVF9BVFRSKHZjczEtcXVldWVkLAorCQkJICAgIEk5MTVfUE1VX0VOR0lO RV9RVUVVRUQoSTkxNV9FTkdJTkVfQ0xBU1NfVklERU8sIDEpKSwKKwlJOTE1X1BNVV9FVkVOVF9B VFRSKHZjczEtYnVzeSwKKwkJCSAgICBJOTE1X1BNVV9FTkdJTkVfQlVTWShJOTE1X0VOR0lORV9D TEFTU19WSURFTywgMSkpLAorCUk5MTVfUE1VX0VWRU5UX0FUVFIodmNzMS13YWl0LAorCQkJICAg IEk5MTVfUE1VX0VOR0lORV9XQUlUKEk5MTVfRU5HSU5FX0NMQVNTX1ZJREVPLCAxKSksCisJSTkx NV9QTVVfRVZFTlRfQVRUUih2Y3MxLXNlbWEsCisJCQkgICAgSTkxNV9QTVVfRU5HSU5FX1NFTUEo STkxNV9FTkdJTkVfQ0xBU1NfVklERU8sIDEpKSwKKworCUk5MTVfUE1VX0VWRU5UX0FUVFIodmVj czAtcXVldWVkLAorCQkJICAgIEk5MTVfUE1VX0VOR0lORV9RVUVVRUQoSTkxNV9FTkdJTkVfQ0xB U1NfVklERU9fRU5IQU5DRSwgMCkpLAorCUk5MTVfUE1VX0VWRU5UX0FUVFIodmVjczAtYnVzeSwK KwkJCSAgICBJOTE1X1BNVV9FTkdJTkVfQlVTWShJOTE1X0VOR0lORV9DTEFTU19WSURFT19FTkhB TkNFLCAwKSksCisJSTkxNV9QTVVfRVZFTlRfQVRUUih2ZWNzMC13YWl0LAorCQkJICAgIEk5MTVf UE1VX0VOR0lORV9XQUlUKEk5MTVfRU5HSU5FX0NMQVNTX1ZJREVPX0VOSEFOQ0UsIDApKSwKKwlJ OTE1X1BNVV9FVkVOVF9BVFRSKHZlY3MwLXNlbWEsCisJCQkgICAgSTkxNV9QTVVfRU5HSU5FX1NF TUEoSTkxNV9FTkdJTkVfQ0xBU1NfVklERU9fRU5IQU5DRSwgMCkpLAorCisgICAgICAgIEk5MTVf UE1VX0VWRU5UX0FUVFIoYWN0dWFsLWZyZXF1ZW5jeSwJIEk5MTVfUE1VX0FDVFVBTF9GUkVRVUVO Q1kpLAorICAgICAgICBJOTE1X1BNVV9FVkVOVF9BVFRSKHJlcXVlc3RlZC1mcmVxdWVuY3ksIEk5 MTVfUE1VX1JFUVVFU1RFRF9GUkVRVUVOQ1kpLAorICAgICAgICBJOTE1X1BNVV9FVkVOVF9BVFRS KGVuZXJneSwJCSBJOTE1X1BNVV9FTkVSR1kpLAorICAgICAgICBJOTE1X1BNVV9FVkVOVF9BVFRS KGludGVycnVwdHMsCQkgSTkxNV9QTVVfSU5URVJSVVBUUyksCisgICAgICAgIEk5MTVfUE1VX0VW RU5UX0FUVFIocmM2LXJlc2lkZW5jeSwJIEk5MTVfUE1VX1JDNl9SRVNJREVOQ1kpLAorICAgICAg ICBJOTE1X1BNVV9FVkVOVF9BVFRSKHJjNnAtcmVzaWRlbmN5LAkgSTkxNV9QTVVfUkM2cF9SRVNJ REVOQ1kpLAorICAgICAgICBJOTE1X1BNVV9FVkVOVF9BVFRSKHJjNnBwLXJlc2lkZW5jeSwJIEk5 MTVfUE1VX1JDNnBwX1JFU0lERU5DWSksCisKKyAgICAgICAgTlVMTCwKK307CisKK3N0YXRpYyBj b25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGk5MTVfcG11X2V2ZW50c19hdHRyX2dyb3VwID0g eworICAgICAgICAubmFtZSA9ICJldmVudHMiLAorICAgICAgICAuYXR0cnMgPSBpOTE1X3BtdV9l dmVudHNfYXR0cnMsCit9OworCitzdGF0aWMgc3NpemVfdAoraTkxNV9wbXVfZ2V0X2F0dHJfY3B1 bWFzayhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICph dHRyLAorCQkJICBjaGFyICpidWYpCit7CisJcmV0dXJuIGNwdW1hcF9wcmludF90b19wYWdlYnVm KHRydWUsIGJ1ZiwgJmk5MTVfcG11X2NwdW1hc2spOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIo Y3B1bWFzaywgU19JUlVHTywgaTkxNV9wbXVfZ2V0X2F0dHJfY3B1bWFzaywgTlVMTCk7CisKK3N0 YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICppOTE1X2NwdW1hc2tfYXR0cnNbXSA9IHsKKwkmZGV2X2F0 dHJfY3B1bWFzay5hdHRyLAorCU5VTEwsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9n cm91cCBpOTE1X3BtdV9jcHVtYXNrX2F0dHJfZ3JvdXAgPSB7CisJLmF0dHJzID0gaTkxNV9jcHVt YXNrX2F0dHJzLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKmk5 MTVfcG11X2F0dHJfZ3JvdXBzW10gPSB7CisgICAgICAgICZpOTE1X3BtdV9mb3JtYXRfYXR0cl9n cm91cCwKKyAgICAgICAgJmk5MTVfcG11X2V2ZW50c19hdHRyX2dyb3VwLAorCSZpOTE1X3BtdV9j cHVtYXNrX2F0dHJfZ3JvdXAsCisgICAgICAgIE5VTEwKK307CisKK3N0YXRpYyBpbnQgaTkxNV9w bXVfY3B1X29ubGluZSh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSkK K3sKKwl1bnNpZ25lZCBpbnQgdGFyZ2V0OworCisJdGFyZ2V0ID0gY3B1bWFza19hbnlfYW5kKCZp OTE1X3BtdV9jcHVtYXNrLCAmaTkxNV9wbXVfY3B1bWFzayk7CisJLyogU2VsZWN0IHRoZSBmaXJz dCBvbmxpbmUgQ1BVIGFzIGEgZGVzaWduYXRlZCByZWFkZXIuICovCisJaWYgKHRhcmdldCA+PSBu cl9jcHVfaWRzKQorCQljcHVtYXNrX3NldF9jcHUoY3B1LCAmaTkxNV9wbXVfY3B1bWFzayk7CisK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpOTE1X3BtdV9jcHVfb2ZmbGluZSh1bnNpZ25l ZCBpbnQgY3B1LCBzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSkKK3sKKwlzdHJ1Y3QgaTkxNV9wbXUg KnBtdSA9IGhsaXN0X2VudHJ5X3NhZmUobm9kZSwgdHlwZW9mKCpwbXUpLCBub2RlKTsKKwl1bnNp Z25lZCBpbnQgdGFyZ2V0OworCisJaWYgKGNwdW1hc2tfdGVzdF9hbmRfY2xlYXJfY3B1KGNwdSwg Jmk5MTVfcG11X2NwdW1hc2spKSB7CisJCXRhcmdldCA9IGNwdW1hc2tfYW55X2J1dCh0b3BvbG9n eV9zaWJsaW5nX2NwdW1hc2soY3B1KSwgY3B1KTsKKwkJLyogTWlncmF0ZSBldmVudHMgaWYgdGhl cmUgaXMgYSB2YWxpZCB0YXJnZXQgKi8KKwkJaWYgKHRhcmdldCA8IG5yX2NwdV9pZHMpIHsKKwkJ CWNwdW1hc2tfc2V0X2NwdSh0YXJnZXQsICZpOTE1X3BtdV9jcHVtYXNrKTsKKwkJCXBlcmZfcG11 X21pZ3JhdGVfY29udGV4dCgmcG11LT5iYXNlLCBjcHUsIHRhcmdldCk7CisJCX0KKwl9CisKKwly ZXR1cm4gMDsKK30KKwordm9pZCBpOTE1X3BtdV9yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqaTkxNSkKK3sKKwlpbnQgcmV0OworCisJaWYgKElOVEVMX0dFTihpOTE1KSA8PSAyKSB7 CisJCXJldCA9IC1FTk9UU1VQUDsKKwkJZ290byBlcnI7CisJfQorCisJcmV0ID0gY3B1aHBfc2V0 dXBfc3RhdGVfbXVsdGkoQ1BVSFBfQVBfUEVSRl9YODZfVU5DT1JFX09OTElORSwKKwkJCQkgICAg ICAicGVyZi94ODYvaW50ZWwvaTkxNTpvbmxpbmUiLAorCQkJCSAgICAgIGk5MTVfcG11X2NwdV9v bmxpbmUsCisJCQkgICAgICAgICAgICAgIGk5MTVfcG11X2NwdV9vZmZsaW5lKTsKKwlpZiAocmV0 KQorCQlnb3RvIGVycjsKKworCXJldCA9IGNwdWhwX3N0YXRlX2FkZF9pbnN0YW5jZShDUFVIUF9B UF9QRVJGX1g4Nl9VTkNPUkVfT05MSU5FLAorCQkJCSAgICAgICAmaTkxNS0+cG11Lm5vZGUpOwor CWlmIChyZXQpCisJCWdvdG8gZXJyOworCisJaTkxNS0+cG11LmJhc2UuYXR0cl9ncm91cHMJPSBp OTE1X3BtdV9hdHRyX2dyb3VwczsKKwlpOTE1LT5wbXUuYmFzZS50YXNrX2N0eF9ucgk9IHBlcmZf aW52YWxpZF9jb250ZXh0OworCWk5MTUtPnBtdS5iYXNlLmV2ZW50X2luaXQJPSBpOTE1X3BtdV9l dmVudF9pbml0OworCWk5MTUtPnBtdS5iYXNlLmFkZAkJPSBpOTE1X3BtdV9ldmVudF9hZGQ7CisJ aTkxNS0+cG11LmJhc2UuZGVsCQk9IGk5MTVfcG11X2V2ZW50X2RlbDsKKwlpOTE1LT5wbXUuYmFz ZS5zdGFydAkJPSBpOTE1X3BtdV9ldmVudF9zdGFydDsKKwlpOTE1LT5wbXUuYmFzZS5zdG9wCQk9 IGk5MTVfcG11X2V2ZW50X3N0b3A7CisJaTkxNS0+cG11LmJhc2UucmVhZAkJPSBpOTE1X3BtdV9l dmVudF9yZWFkOworCWk5MTUtPnBtdS5iYXNlLmV2ZW50X2lkeAk9IGk5MTVfcG11X2V2ZW50X2V2 ZW50X2lkeDsKKworCXNwaW5fbG9ja19pbml0KCZpOTE1LT5wbXUubG9jayk7CisJaHJ0aW1lcl9p bml0KCZpOTE1LT5wbXUudGltZXIsIENMT0NLX01PTk9UT05JQywgSFJUSU1FUl9NT0RFX1JFTCk7 CisJaTkxNS0+cG11LnRpbWVyLmZ1bmN0aW9uID0gaTkxNV9zYW1wbGU7CisJaTkxNS0+cG11LmVu YWJsZSA9IDA7CisKKwlpZiAocGVyZl9wbXVfcmVnaXN0ZXIoJmk5MTUtPnBtdS5iYXNlLCAiaTkx NSIsIC0xKSkKKwkJaTkxNS0+cG11LmJhc2UuZXZlbnRfaW5pdCA9IE5VTEw7CisKK2VycjoKKwlp ZiAocmV0KQorCQlEUk1fTk9URSgiRmFpbGVkIHRvIHJlZ2lzdGVyIFBNVSAoZXJyPSVkKVxuIiwg cmV0KTsKK30KKwordm9pZCBpOTE1X3BtdV91bnJlZ2lzdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICppOTE1KQoreworCWlmICghaTkxNS0+cG11LmJhc2UuZXZlbnRfaW5pdCkKKwkJcmV0dXJu OworCisJV0FSTl9PTihjcHVocF9zdGF0ZV9yZW1vdmVfaW5zdGFuY2UoQ1BVSFBfQVBfUEVSRl9Y ODZfVU5DT1JFX09OTElORSwKKwkJCQkJICAgICZpOTE1LT5wbXUubm9kZSkpOworCWNwdWhwX3Jl bW92ZV9tdWx0aV9zdGF0ZShDUFVIUF9BUF9QRVJGX1g4Nl9VTkNPUkVfT05MSU5FKTsKKworCWk5 MTUtPnBtdS5lbmFibGUgPSAwOworCisJaHJ0aW1lcl9jYW5jZWwoJmk5MTUtPnBtdS50aW1lcik7 CisKKwlwZXJmX3BtdV91bnJlZ2lzdGVyKCZpOTE1LT5wbXUuYmFzZSk7CisJaTkxNS0+cG11LmJh c2UuZXZlbnRfaW5pdCA9IE5VTEw7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAppbmRleCAwYjAz MjYwYTM5NjcuLjhjMzYyZTA0NTFjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9yZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCkBAIC0xODYs NiArMTg2LDkgQEAgc3RhdGljIGlubGluZSBib29sIGk5MTVfbW1pb19yZWdfdmFsaWQoaTkxNV9y ZWdfdCByZWcpCiAjZGVmaW5lIFZJREVPX0VOSEFOQ0VNRU5UX0NMQVNTCTIKICNkZWZpbmUgQ09Q WV9FTkdJTkVfQ0xBU1MJMwogI2RlZmluZSBPVEhFUl9DTEFTUwkJNAorI2RlZmluZSBNQVhfRU5H SU5FX0NMQVNTCTQKKworI2RlZmluZSBNQVhfRU5HSU5FX0lOU1RBTkNFICAgIDEKIAogLyogUENJ IGNvbmZpZyBzcGFjZSAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9lbmdpbmVfY3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2luZV9jcy5jCmlu ZGV4IDNhZTg5YTlkNjI0MS4uZGJjN2FiZDY1ZjMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9lbmdpbmVfY3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9lbmdpbmVfY3MuYwpAQCAtMTk4LDYgKzE5OCwxNSBAQCBpbnRlbF9lbmdpbmVfc2V0dXAoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCUdFTV9CVUdfT04oaW5mby0+Y2xhc3Mg Pj0gQVJSQVlfU0laRShpbnRlbF9lbmdpbmVfY2xhc3NlcykpOwogCWNsYXNzX2luZm8gPSAmaW50 ZWxfZW5naW5lX2NsYXNzZXNbaW5mby0+Y2xhc3NdOwogCisJaWYgKEdFTV9XQVJOX09OKGluZm8t PmNsYXNzID4gTUFYX0VOR0lORV9DTEFTUykpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKEdF TV9XQVJOX09OKGluZm8tPmluc3RhbmNlID4gTUFYX0VOR0lORV9JTlNUQU5DRSkpCisJCXJldHVy biAtRUlOVkFMOworCisJaWYgKEdFTV9XQVJOX09OKGRldl9wcml2LT5lbmdpbmVfY2xhc3NbaW5m by0+Y2xhc3NdW2luZm8tPmluc3RhbmNlXSkpCisJCXJldHVybiAtRUlOVkFMOworCiAJR0VNX0JV R19PTihkZXZfcHJpdi0+ZW5naW5lW2lkXSk7CiAJZW5naW5lID0ga3phbGxvYyhzaXplb2YoKmVu Z2luZSksIEdGUF9LRVJORUwpOwogCWlmICghZW5naW5lKQpAQCAtMjI1LDYgKzIzNCw3IEBAIGlu dGVsX2VuZ2luZV9zZXR1cChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAKIAlB VE9NSUNfSU5JVF9OT1RJRklFUl9IRUFEKCZlbmdpbmUtPmNvbnRleHRfc3RhdHVzX25vdGlmaWVy KTsKIAorCWRldl9wcml2LT5lbmdpbmVfY2xhc3NbaW5mby0+Y2xhc3NdW2luZm8tPmluc3RhbmNl XSA9IGVuZ2luZTsKIAlkZXZfcHJpdi0+ZW5naW5lW2lkXSA9IGVuZ2luZTsKIAlyZXR1cm4gMDsK IH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYwppbmRleCAyNjgzNDI0MzNh OGUuLjdkYjRjNTcyZWY3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf cmluZ2J1ZmZlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIu YwpAQCAtMjI4MywzICsyMjgzLDI4IEBAIGludCBpbnRlbF9pbml0X3ZlYm94X3JpbmdfYnVmZmVy KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIAogCXJldHVybiBpbnRlbF9pbml0X3Jp bmdfYnVmZmVyKGVuZ2luZSk7CiB9CisKK3N0YXRpYyB1OCB1c2VyX2NsYXNzX21hcFtJOTE1X0VO R0lORV9DTEFTU19NQVhdID0geworCVtJOTE1X0VOR0lORV9DTEFTU19PVEhFUl0gPSBPVEhFUl9D TEFTUywKKwlbSTkxNV9FTkdJTkVfQ0xBU1NfUkVOREVSXSA9IFJFTkRFUl9DTEFTUywKKwlbSTkx NV9FTkdJTkVfQ0xBU1NfQ09QWV0gPSBDT1BZX0VOR0lORV9DTEFTUywKKwlbSTkxNV9FTkdJTkVf Q0xBU1NfVklERU9dID0gVklERU9fREVDT0RFX0NMQVNTLAorCVtJOTE1X0VOR0lORV9DTEFTU19W SURFT19FTkhBTkNFXSA9IFZJREVPX0VOSEFOQ0VNRU5UX0NMQVNTLAorfTsKKworc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqCitpbnRlbF9lbmdpbmVfbG9va3VwX3VzZXIoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTUsIHU4IGNsYXNzLCB1OCBpbnN0YW5jZSkKK3sKKwlpZiAoY2xhc3MgPj0g QVJSQVlfU0laRSh1c2VyX2NsYXNzX21hcCkpCisJCXJldHVybiBOVUxMOworCisJY2xhc3MgPSB1 c2VyX2NsYXNzX21hcFtjbGFzc107CisKKwlpZiAoV0FSTl9PTl9PTkNFKGNsYXNzID4gTUFYX0VO R0lORV9DTEFTUykpCisJCXJldHVybiBOVUxMOworCisJaWYgKGluc3RhbmNlID4gTUFYX0VOR0lO RV9JTlNUQU5DRSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gaTkxNS0+ZW5naW5lX2NsYXNz W2NsYXNzXVtpbnN0YW5jZV07Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9yaW5nYnVmZmVyLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVy LmgKaW5kZXggNzljMDAyMWYzNzAwLi5jZjA5NWI5Mzg2ZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9yaW5nYnVmZmVyLmgKQEAgLTI0NSw2ICsyNDUsMjggQEAgc3RydWN0IGludGVsX2Vu Z2luZV9jcyB7CiAJCUk5MTVfU0VMRlRFU1RfREVDTEFSRShib29sIG1vY2sgOiAxKTsKIAl9IGJy ZWFkY3J1bWJzOwogCisJc3RydWN0IHsKKwkJLyoqCisJCSAqIEBlbmFibGU6IEJpdG1hc2sgb2Yg ZW5hYmxlIHNhbXBsZSBldmVudHMgb24gdGhpcyBlbmdpbmUuCisJCSAqCisJCSAqIEJpdHMgY29y cmVzcG9uZCB0byBzYW1wbGUgZXZlbnQgdHlwZXMsIGZvciBpbnN0YW5jZQorCQkgKiBJOTE1X1NB TVBMRV9RVUVVRUQgaXMgYml0IDAgZXRjLgorCQkgKi8KKwkJdTMyIGVuYWJsZTsKKwkJLyoqCisJ CSAqIEBlbmFibGVfY291bnQ6IFJlZmVyZW5jZSBjb3VudCBmb3IgdGhlIGVuYWJsZWQgc2FtcGxl cnMuCisJCSAqCisJCSAqIEluZGV4IG51bWJlciBjb3JyZXNwb25kcyB0byB0aGUgYml0IG51bWJl ciBmcm9tIEBlbmFibGUuCisJCSAqLworCQl1bnNpZ25lZCBpbnQgZW5hYmxlX2NvdW50W0k5MTVf UE1VX1NBTVBMRV9CSVRTXTsKKwkJLyoqCisJCSAqIEBzYW1wbGU6IENvdW50ZXIgdmFsdWUgZm9y IHNhbXBsaW5nIGV2ZW50cy4KKwkJICoKKwkJICogT3VyIGludGVybmFsIHRpbWVyIHN0b3JlcyB0 aGUgY3VycmVudCBjb3VudGVyIGluIHRoaXMgZmllbGQuCisJCSAqLworCQl1NjQgc2FtcGxlW0k5 MTVfRU5HSU5FX1NBTVBMRV9NQVhdOworCX0gcG11OworCiAJLyoKIAkgKiBBIHBvb2wgb2Ygb2Jq ZWN0cyB0byB1c2UgYXMgc2hhZG93IGNvcGllcyBvZiBjbGllbnQgYmF0Y2ggYnVmZmVycwogCSAq IHdoZW4gdGhlIGNvbW1hbmQgcGFyc2VyIGlzIGVuYWJsZWQuIFByZXZlbnRzIHRoZSBjbGllbnQg ZnJvbQpAQCAtNzM3LDQgKzc1OSw3IEBAIHZvaWQgaW50ZWxfZW5naW5lc19yZXNldF9kZWZhdWx0 X3N1Ym1pc3Npb24oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpOwogCiBib29sIGludGVs X2VuZ2luZV9jYW5fc3RvcmVfZHdvcmQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsK IAorc3RydWN0IGludGVsX2VuZ2luZV9jcyAqCitpbnRlbF9lbmdpbmVfbG9va3VwX3VzZXIoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsIHU4IGNsYXNzLCB1OCBpbnN0YW5jZSk7CisKICNl bmRpZiAvKiBfSU5URUxfUklOR0JVRkZFUl9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBp L2RybS9pOTE1X2RybS5oIGIvaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5oCmluZGV4IGQ4ZDEw ZDkzMjc1OS4uNmRjMGQ2ZmQ0ZTRjIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvZHJtL2k5MTVf ZHJtLmgKKysrIGIvaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5oCkBAIC04Niw2ICs4Niw2NCBA QCBlbnVtIGk5MTVfbW9jc190YWJsZV9pbmRleCB7CiAJSTkxNV9NT0NTX0NBQ0hFRCwKIH07CiAK K2VudW0gZHJtX2k5MTVfZ2VtX2VuZ2luZV9jbGFzcyB7CisJSTkxNV9FTkdJTkVfQ0xBU1NfT1RI RVIgPSAwLAorCUk5MTVfRU5HSU5FX0NMQVNTX1JFTkRFUiA9IDEsCisJSTkxNV9FTkdJTkVfQ0xB U1NfQ09QWSA9IDIsCisJSTkxNV9FTkdJTkVfQ0xBU1NfVklERU8gPSAzLAorCUk5MTVfRU5HSU5F X0NMQVNTX1ZJREVPX0VOSEFOQ0UgPSA0LAorCUk5MTVfRU5HSU5FX0NMQVNTX01BWCAvKiBub24t QUJJICovCit9OworCisvKioKKyAqIERPQzogcGVyZl9ldmVudHMgZXhwb3NlZCBieSBpOTE1IHRo cm91Z2ggL3N5cy9idXMvZXZlbnRfc291cmNlcy9kcml2ZXJzL2k5MTUKKyAqCisgKi8KKworZW51 bSBkcm1faTkxNV9wbXVfZW5naW5lX3NhbXBsZSB7CisJSTkxNV9TQU1QTEVfUVVFVUVEID0gMCwK KwlJOTE1X1NBTVBMRV9CVVNZID0gMSwKKwlJOTE1X1NBTVBMRV9XQUlUID0gMiwKKwlJOTE1X1NB TVBMRV9TRU1BID0gMywKKwlJOTE1X0VOR0lORV9TQU1QTEVfTUFYIC8qIG5vbi1BQkkgKi8KK307 CisKKyNkZWZpbmUgSTkxNV9QTVVfU0FNUExFX0JJVFMgKDQpCisjZGVmaW5lIEk5MTVfUE1VX1NB TVBMRV9NQVNLICgweGYpCisjZGVmaW5lIEk5MTVfUE1VX1NBTVBMRV9JTlNUQU5DRV9CSVRTICg4 KQorI2RlZmluZSBJOTE1X1BNVV9DTEFTU19TSElGVCBcCisJKEk5MTVfUE1VX1NBTVBMRV9CSVRT ICsgSTkxNV9QTVVfU0FNUExFX0lOU1RBTkNFX0JJVFMpCisKKyNkZWZpbmUgX19JOTE1X1BNVV9F TkdJTkUoY2xhc3MsIGluc3RhbmNlLCBzYW1wbGUpIFwKKwkoKGNsYXNzKSA8PCBJOTE1X1BNVV9D TEFTU19TSElGVCB8IFwKKwkoaW5zdGFuY2UpIDw8IEk5MTVfUE1VX1NBTVBMRV9CSVRTIHwgXAor CShzYW1wbGUpKQorCisjZGVmaW5lIEk5MTVfUE1VX0VOR0lORV9RVUVVRUQoY2xhc3MsIGluc3Rh bmNlKSBcCisJX19JOTE1X1BNVV9FTkdJTkUoY2xhc3MsIGluc3RhbmNlLCBJOTE1X1NBTVBMRV9R VUVVRUQpCisKKyNkZWZpbmUgSTkxNV9QTVVfRU5HSU5FX0JVU1koY2xhc3MsIGluc3RhbmNlKSBc CisJX19JOTE1X1BNVV9FTkdJTkUoY2xhc3MsIGluc3RhbmNlLCBJOTE1X1NBTVBMRV9CVVNZKQor CisjZGVmaW5lIEk5MTVfUE1VX0VOR0lORV9XQUlUKGNsYXNzLCBpbnN0YW5jZSkgXAorCV9fSTkx NV9QTVVfRU5HSU5FKGNsYXNzLCBpbnN0YW5jZSwgSTkxNV9TQU1QTEVfV0FJVCkKKworI2RlZmlu ZSBJOTE1X1BNVV9FTkdJTkVfU0VNQShjbGFzcywgaW5zdGFuY2UpIFwKKwlfX0k5MTVfUE1VX0VO R0lORShjbGFzcywgaW5zdGFuY2UsIEk5MTVfU0FNUExFX1NFTUEpCisKKyNkZWZpbmUgX19JOTE1 X1BNVV9PVEhFUih4KSAoX19JOTE1X1BNVV9FTkdJTkUoMHhmZiwgMHhmZiwgMHhmKSArIDEgKyAo eCkpCisKKyNkZWZpbmUgSTkxNV9QTVVfQUNUVUFMX0ZSRVFVRU5DWSAJX19JOTE1X1BNVV9PVEhF UigwKQorI2RlZmluZSBJOTE1X1BNVV9SRVFVRVNURURfRlJFUVVFTkNZCV9fSTkxNV9QTVVfT1RI RVIoMSkKKyNkZWZpbmUgSTkxNV9QTVVfRU5FUkdZCQkJX19JOTE1X1BNVV9PVEhFUigyKQorI2Rl ZmluZSBJOTE1X1BNVV9JTlRFUlJVUFRTCQlfX0k5MTVfUE1VX09USEVSKDMpCisKKyNkZWZpbmUg STkxNV9QTVVfUkM2X1JFU0lERU5DWQkJX19JOTE1X1BNVV9PVEhFUig0KQorI2RlZmluZSBJOTE1 X1BNVV9SQzZwX1JFU0lERU5DWQkJX19JOTE1X1BNVV9PVEhFUig1KQorI2RlZmluZSBJOTE1X1BN VV9SQzZwcF9SRVNJREVOQ1kJX19JOTE1X1BNVV9PVEhFUig2KQorCisjZGVmaW5lIEk5MTVfUE1V X0xBU1QgSTkxNV9QTVVfUkM2cHBfUkVTSURFTkNZCisKIC8qIEVhY2ggcmVnaW9uIGlzIGEgbWlu aW11bSBvZiAxNmssIGFuZCB0aGVyZSBhcmUgYXQgbW9zdCAyNTUgb2YgdGhlbS4KICAqLwogI2Rl ZmluZSBJOTE1X05SX1RFWF9SRUdJT05TIDI1NQkvKiB0YWJsZSBzaXplIDJrIC0gbWF4aW11bSBk dWUgdG8gdXNlCi0tIAoyLjkuNQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRl c2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8v aW50ZWwtZ2Z4Cg==