From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: [PATCH 2/9] drm/i915/pmu: Expose a PMU interface for perf queries Date: Mon, 13 Nov 2017 08:57:19 +0000 Message-ID: <20171113085726.26817-3-tvrtko.ursulin@linux.intel.com> References: <20171113085726.26817-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-wr0-x234.google.com (mail-wr0-x234.google.com [IPv6:2a00:1450:400c:c0c::234]) by gabe.freedesktop.org (Postfix) with ESMTPS id B833689F77 for ; Mon, 13 Nov 2017 08:57:37 +0000 (UTC) Received: by mail-wr0-x234.google.com with SMTP id y9so13742858wrb.2 for ; Mon, 13 Nov 2017 00:57:37 -0800 (PST) In-Reply-To: <20171113085726.26817-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 List-Id: intel-gfx@lists.freedesktop.org RnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KCkZyb206IENo cmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgpGcm9tOiBUdnJ0a28gVXJzdWxp biA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgpGcm9tOiBEbWl0cnkgUm9nb3poa2luIDxkbWl0 cnkudi5yb2dvemhraW5AaW50ZWwuY29tPgoKVGhlIGZpcnN0IGdvYWwgaXMgdG8gYmUgYWJsZSB0 byBtZWFzdXJlIEdQVSAoYW5kIGludmlkdWFsIHJpbmcpIGJ1c3luZXNzCndpdGhvdXQgaGF2aW5n IHRvIHBvbGwgcmVnaXN0ZXJzIGZyb20gdXNlcnNwYWNlLiAoV2hpY2ggbm90IG9ubHkgaW5jdXJz CmhvbGRpbmcgdGhlIGZvcmNld2FrZSBsb2NrIGluZGVmaW5pdGVseSwgcGVydHVyYmluZyB0aGUg c3lzdGVtLCBidXQgYWxzbwpydW5zIHRoZSByaXNrIG9mIGhhbmdpbmcgdGhlIG1hY2hpbmUuKSBB cyBhbiBhbHRlcm5hdGl2ZSB3ZSBjYW4gdXNlIHRoZQpwZXJmIGV2ZW50IGNvdW50ZXIgaW50ZXJm YWNlIHRvIHNhbXBsZSB0aGUgcmluZyByZWdpc3RlcnMgcGVyaW9kaWNhbGx5CmFuZCBzZW5kIHRo b3NlIHJlc3VsdHMgdG8gdXNlcnNwYWNlLgoKRnVuY3Rpb25hbGl0eSB3ZSBhcmUgZXhwb3J0aW5n IHRvIHVzZXJzcGFjZSBpcyB2aWEgdGhlIGV4aXN0aW5nIHBlcmYgUE1VCkFQSSBhbmQgY2FuIGJl IGV4ZXJjaXNlZCB2aWEgdGhlIGV4aXN0aW5nIHRvb2xzLiBGb3IgZXhhbXBsZToKCiAgcGVyZiBz dGF0IC1hIC1lIGk5MTUvcmNzMC1idXN5LyAtSSAxMDAwCgpXaWxsIHByaW50IHRoZSByZW5kZXIg ZW5naW5lIGJ1c3lubmVzIG9uY2UgcGVyIHNlY29uZC4gQWxsIHRoZSBwZXJmb3JtYW5jZQpjb3Vu dGVycyBjYW4gYmUgZW51bWVyYXRlZCAocGVyZiBsaXN0KSBhbmQgaGF2ZSB0aGVpciB1bml0IG9m IG1lYXN1cmUKY29ycmVjdGx5IHJlcG9ydGVkIGluIHN5c2ZzLgoKdjEtdjIgKENocmlzIFdpbHNv bik6Cgp2MjogVXNlIGEgY29tbW9uIHRpbWVyIGZvciB0aGUgcmluZyBzYW1wbGluZy4KCnYzOiAo VHZydGtvIFVyc3VsaW4pCiAqIERlY291cGxlIHVBUEkgZnJvbSBpOTE1IGVuZ2luZSBpZHMuCiAq IENvbXBsZXRlIHVBUEkgZGVmaW5lcy4KICogUmVmYWN0b3Igc29tZSBjb2RlIHRvIGhlbHBlcnMg Zm9yIGNsYXJpdHkuCiAqIFNraXAgc2FtcGxpbmcgZGlzYWJsZWQgZW5naW5lcy4KICogRXhwb3Nl IGNvdW50ZXJzIGluIHN5c2ZzLgogKiBQYXNzIGluIGZha2UgcmVncyB0byBhdm9pZCBudWxsIHB0 ciBkZXJlZiBpbiBwZXJmIGNvcmUuCiAqIENvbnZlcnQgdG8gY2xhc3MvaW5zdGFuY2UgdUFQSS4K ICogVXNlIHNoYXJlZCBkcml2ZXIgY29kZSBmb3IgcmM2IHJlc2lkZW5jeSwgcG93ZXIgYW5kIGZy ZXF1ZW5jeS4KCnY0OiAoRG1pdHJ5IFJvZ296aGtpbikKICogUmVnaXN0ZXIgUE1VIHdpdGggLnRh c2tfY3R4X25yPXBlcmZfaW52YWxpZF9jb250ZXh0CiAqIEV4cG9zZSBjcHVtYXNrIGZvciB0aGUg UE1VIHdpdGggdGhlIHNpbmdsZSBDUFUgaW4gdGhlIG1hc2sKICogUHJvcGVybHkgc3VwcG9ydCBw bXUtPnN0b3AoKTogaXQgc2hvdWxkIGNhbGwgcG11LT5yZWFkKCkKICogUHJvcGVybHkgc3VwcG9y dCBwbXUtPmRlbCgpOiBpdCBzaG91bGQgY2FsbCBzdG9wKGV2ZW50LCBQRVJGX0VGX1VQREFURSkK ICogSW50cm9kdWNlIHJlZmNvdW50aW5nIG9mIGV2ZW50IHN1YnNjcmlwdGlvbnMuCiAqIE1ha2Ug cG11LmJ1c3lfc3RhdHMgYSByZWZjb3VudGVyIHRvIGF2b2lkIGJ1c3kgc3RhdHMgZ29pbmcgYXdh eQogICB3aXRoIHNvbWUgZGVsZXRlZCBldmVudC4KICogRXhwb3NlIGNwdW1hc2sgZm9yIGk5MTUg UE1VIHRvIGF2b2lkIG11bHRpcGxlIGV2ZW50cyBjcmVhdGlvbiBvZgogICB0aGUgc2FtZSB0eXBl IGZvbGxvd2VkIGJ5IGNvdW50ZXIgYWdncmVnYXRpb24gYnkgcGVyZi1zdGF0LgogKiBUcmFjayBD UFVzIGdldHRpbmcgb25saW5lL29mZmxpbmUgdG8gbWlncmF0ZSBwZXJmIGNvbnRleHQuIElmIChs aWtlbHkpCiAgIGNwdW1hc2sgd2lsbCBpbml0aWFsbHkgc2V0IENQVTAsIENPTkZJR19CT09UUEFS QU1fSE9UUExVR19DUFUwIHdpbGwgYmUKICAgbmVlZGVkIHRvIHNlZSBlZmZlY3Qgb2YgQ1BVIHN0 YXR1cyB0cmFja2luZy4KICogRW5kIHJlc3VsdCBpcyB0aGF0IG9ubHkgZ2xvYmFsIGV2ZW50cyBh cmUgc3VwcG9ydGVkIGFuZCBwZXJmIHN0YXQKICAgd29ya3MgY29ycmVjdGx5LgogKiBEZW55IHBl cmYgZHJpdmVyIGxldmVsIHNhbXBsaW5nIC0gaXQgaXMgcHJvaGliaXRlZCBmb3IgdW5jb3JlIFBN VS4KCnY1OiAoVHZydGtvIFVyc3VsaW4pCgogKiBEb24ndCBoYXJkY29kZSBudW1iZXIgb2YgZW5n aW5lIHNhbXBsZXJzLgogKiBSZXdyaXRlIGV2ZW50IHJlZi1jb3VudGluZyBmb3IgY29ycmVjdG5l c3MgYW5kIHNpbXBsaWNpdHkuCiAqIFN0b3JlIGluaXRpYWwgY291bnRlciB2YWx1ZSB3aGVuIHN0 YXJ0aW5nIGFscmVhZHkgZW5hYmxlZCBldmVudHMKICAgdG8gY29ycmVjdGx5IHJlcG9ydCB2YWx1 ZXMgdG8gYWxsIGxpc3RlbmVycy4KICogRml4IFJDNiByZXNpZGVuY3kgcmVhZG91dC4KICogQ29t bWVudHMsIEdQTCBoZWFkZXIuCgp2NjoKICogQWRkIG1pc3NpbmcgZW50cnkgdG8gdjQgY2hhbmdl bG9nLgogKiBGaXggYWNjb3VudGluZyBpbiBDUFUgaG90cGx1ZyBjYXNlIGJ5IGNvcHlpbmcgdGhl IGFwcHJvYWNoIGZyb20KICAgYXJjaC94ODYvZXZlbnRzL2ludGVsL2NzdGF0ZS5jLiAoRG1pdHJ5 IFJvZ296aGtpbikKCnY3OgogKiBMb2cgZmFpbHVyZSBtZXNzYWdlIG9ubHkgb24gZmFpbHVyZS4K ICogUmVtb3ZlIENQVSBob3RwbHVnIG5vdGlmaWNhdGlvbiBzdGF0ZSBvbiB1bnJlZ2lzdGVyLgoK djg6CiAqIEZpeCBlcnJvciB1bndpbmQgb24gZmFpbGVkIHJlZ2lzdHJhdGlvbi4KICogQ2hlY2tw YXRjaCBjbGVhbnVwLgoKdjk6CiAqIERyb3AgdGhlIGVuZXJneSBtZXRyaWMsIGl0IGlzIGF2YWls YWJsZSB2aWEgaW50ZWxfcmFwbF9wZXJmLgogICAoVmlsbGUgU3lyasOkbMOkKQogKiBVc2UgSEFT X1JDNihwKS4gKENocmlzIFdpbHNvbikKICogSGFuZGxlIHVuc3VwcG9ydGVkIG5vbi1lbmdpbmUg ZXZlbnRzLiAoRG1pdHJ5IFJvZ296aGtpbikKICogUmViYXNlIGZvciBpbnRlbF9yYzZfcmVzaWRl bmN5X25zIG5lZWRpbmcgY2FsbGVyIG1hbmFnZWQKICAgcnVudGltZSBwbS4KICogRHJvcCBIQVNf UkM2IGNoZWNrcyBmcm9tIHRoZSByZWFkIGNhbGxiYWNrIHNpbmNlIGNyZWF0aW5nIHRob3NlCiAg IGV2ZW50cyB3aWxsIGJlIHJlamVjdGVkIGF0IGluaXQgdGltZSBhbHJlYWR5LgogKiBBZGQgY291 bnRlciB1bml0cyB0byBzeXNmcyBzbyBwZXJmIHN0YXQgb3V0cHV0IGlzIG5pY2VyLgogKiBDbGVh bnVwIHRoZSBhdHRyaWJ1dGUgdGFibGVzIGZvciBicmV2aXR5IGFuZCByZWFkYWJpbGl0eS4KCnYx MDoKICogRml4ZWQgcXVldWVkIGFjY291bnRpbmcuCgp2MTE6CiAqIE1vdmUgaW50ZWxfZW5naW5l X2xvb2t1cF91c2VyIHRvIGludGVsX2VuZ2luZV9jcy5jCiAqIENvbW1pdCB1cGRhdGUuIChKb29u YXMgTGFodGluZW4pCgp2MTI6CiAqIE1vcmUgYWNjdXJhdGUgc2FtcGxpbmcuIChDaHJpcyBXaWxz b24pCiAqIFN0b3JlIGFuZCByZXBvcnQgZnJlcXVlbmN5IGluIE1IeiBmb3IgYmV0dGVyIHVzYWJp bGl0eSBmcm9tCiAgIHBlcmYgc3RhdC4KICogUmVtb3ZlZCBtZXRyaWNzOiBxdWV1ZWQsIGludGVy cnVwdHMsIHJjNiBjb3VudGVycy4KICogU2FtcGxlIGVuZ2luZSBidXN5bmVzcyBiYXNlZCBvbiBz ZXFubyBkaWZmZXJlbmNlIG9ubHkKICAgZm9yIGxlc3MgTU1JTyAoYW5kIGZvcmNld2FrZSkgb24g YWxsIHBsYXRmb3Jtcy4gKENocmlzIFdpbHNvbikKCnYxMzoKICogQ29tbWVudCBzcGVsbGluZywg dXNlIG11bF91MzJfdTMyIHRvIHdvcmsgYXJvdW5kIHBvdGVudGlhbCBHQ0MKICAgaXNzdWUgYW5k IHNvbW5lIGNvZGUgYWxpZ25tZW50IGNoYW5nZXMuIChDaHJpcyBXaWxzb24pCgp2MTQ6CiAqIFJl YmFzZS4KCnYxNToKICogUmViYXNlIGZvciBSUFMgcmVmYWN0b3JpbmcuCgp2MTY6CiAqIFVzZSB0 aGUgZHluYW1pYyBzbG90IGluIHRoZSBDUFUgaG90cGx1ZyBzdGF0ZSBtYWNoaW5lIHNvIHRoYXQg d2UgYXJlCiAgIGZyZWUgdG8gc2V0dXAgb3VyIHN0YXRlIGFzIG11bHRpLWluc3RhbmNlLiBQcmV2 aW91c2x5IHdlIHdlcmUgcmUtdXNpbmcKICAgdGhlIENQVUhQX0FQX1BFUkZfWDg2X1VOQ09SRV9P TkxJTkUgc2xvdCB3aGljaCBpcyBuZWl0aGVyIHVzZWQgYXMKICAgbXVsdGktaW5zdGFuY2UsIG5v ciBvd25lZCBieSBvdXIgZHJpdmVyIHRvIHN0YXJ0IHdpdGguCiAqIFJlZ2lzdGVyIHRoZSBDUFUg aG90cGx1ZyBoYW5kbGVycyBhZnRlciB0aGUgUE1VLCBvdGhlcndpc2UgdGhlIGNhbGxiYWNrCiAg IHdpbGwgZ2V0IGNhbGxlZCBiZWZvcmUgdGhlIFBNVSBpcyBpbml0aWFsaXplZCB3aGljaCBjYW4g ZW5kIHVwIGluCiAgIHBlcmZfcG11X21pZ3JhdGVfY29udGV4dCB3aXRoIGFuIHVuLWluaXRpYWxp emVkIGJhc2UuCiAqIEFkZGVkIHdvcmthcm91bmQgZm9yIGEgcHJvYmFibGUgYnVnIGluIGNwdWhw IGNvcmUuCgp2MTc6CiAqIFJlbW92ZSB3b3JrYXJvdW5kIGZvciB0aGUgY3B1aHAgYnVnLgoKdjE4 OgogKiBSZWJhc2UgZm9yIGRybV9pOTE1X2dlbV9lbmdpbmVfY2xhc3MgZ2V0dGluZyB1cHN0cmVh bSBiZWZvcmUgdXMuCgpTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdp bHNvbi5jby51az4KU2lnbmVkLW9mZi1ieTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGlu QGludGVsLmNvbT4KU2lnbmVkLW9mZi1ieTogRG1pdHJ5IFJvZ296aGtpbiA8ZG1pdHJ5LnYucm9n b3poa2luQGludGVsLmNvbT4KQ2M6IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBpbnRl bC5jb20+CkNjOiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KQ2M6IERt aXRyeSBSb2dvemhraW4gPGRtaXRyeS52LnJvZ296aGtpbkBpbnRlbC5jb20+CkNjOiBQZXRlciBa aWpsc3RyYSA8cGV0ZXJ6QGluZnJhZGVhZC5vcmc+ClJldmlld2VkLWJ5OiBDaHJpcyBXaWxzb24g PGNocmlzQGNocmlzLXdpbHNvbi5jby51az4gKHYxNSkKLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkx NS9NYWtlZmlsZSAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9k cnYuYyAgICAgICAgIHwgICAzICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggICAg ICAgICB8ICAgNSArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BtdS5jICAgICAgICAgfCA2 ODggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfcG11LmggICAgICAgICB8IDEwNCArKysrKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9yZWcuaCAgICAgICAgIHwgICAzICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2lu ZV9jcy5jICB8ICAzMyArKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5o IHwgIDI2ICsrCiBpbmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmggICAgICAgICAgICAgfCAgMzkg KysKIDkgZmlsZXMgY2hhbmdlZCwgOTAyIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BtdS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wbXUuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKaW5kZXggMTc3 NDA0NDYyMzg2Li5iOTFhOWI2OGIyZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCkBAIC00Niw2ICs0 Niw3IEBAIGk5MTUteSA6PSBpOTE1X2Rydi5vIFwKIAogaTkxNS0kKENPTkZJR19DT01QQVQpICAg Kz0gaTkxNV9pb2MzMi5vCiBpOTE1LSQoQ09ORklHX0RFQlVHX0ZTKSArPSBpOTE1X2RlYnVnZnMu byBpbnRlbF9waXBlX2NyYy5vCitpOTE1LSQoQ09ORklHX1BFUkZfRVZFTlRTKSArPSBpOTE1X3Bt dS5vCiAKICMgR0VNIGNvZGUKIGk5MTUteSArPSBpOTE1X2NtZF9wYXJzZXIubyBcCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9kcnYuYwppbmRleCA5ZGY3YjVkNTlhOTQuLmNlZjY5ZjQ0ODIxYyAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2Rydi5jCkBAIC00OCw2ICs0OCw3IEBACiAKICNpbmNsdWRlICJpOTE1X2Rydi5o IgogI2luY2x1ZGUgImk5MTVfdHJhY2UuaCIKKyNpbmNsdWRlICJpOTE1X3BtdS5oIgogI2luY2x1 ZGUgImk5MTVfdmdwdS5oIgogI2luY2x1ZGUgImludGVsX2Rydi5oIgogI2luY2x1ZGUgImludGVs X3VjLmgiCkBAIC0xMjE3LDYgKzEyMTgsNyBAQCBzdGF0aWMgdm9pZCBpOTE1X2RyaXZlcl9yZWdp c3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJc3RydWN0IGRybV9kZXZp Y2UgKmRldiA9ICZkZXZfcHJpdi0+ZHJtOwogCiAJaTkxNV9nZW1fc2hyaW5rZXJfaW5pdChkZXZf cHJpdik7CisJaTkxNV9wbXVfcmVnaXN0ZXIoZGV2X3ByaXYpOwogCiAJLyoKIAkgKiBOb3RpZnkg YSB2YWxpZCBzdXJmYWNlIGFmdGVyIG1vZGVzZXR0aW5nLApAQCAtMTI3MSw2ICsxMjczLDcgQEAg c3RhdGljIHZvaWQgaTkxNV9kcml2ZXJfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYpCiAJaW50ZWxfb3ByZWdpb25fdW5yZWdpc3RlcihkZXZfcHJpdik7CiAKIAlp OTE1X3BlcmZfdW5yZWdpc3RlcihkZXZfcHJpdik7CisJaTkxNV9wbXVfdW5yZWdpc3RlcihkZXZf cHJpdik7CiAKIAlpOTE1X3RlYXJkb3duX3N5c2ZzKGRldl9wcml2KTsKIAlpOTE1X2d1Y19sb2df dW5yZWdpc3RlcihkZXZfcHJpdik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAppbmRleCA5OGY1MjZh MjdmYmUuLjIwYTI3MGVhNmUzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCkBAIC00MCw2ICs0 MCw3IEBACiAjaW5jbHVkZSA8bGludXgvaGFzaC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVsLWlv bW11Lmg+CiAjaW5jbHVkZSA8bGludXgva3JlZi5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZl bnQuaD4KICNpbmNsdWRlIDxsaW51eC9wbV9xb3MuaD4KICNpbmNsdWRlIDxsaW51eC9yZXNlcnZh dGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3NobWVtX2ZzLmg+CkBAIC0yMjg5LDYgKzIyOTAsOCBA QCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSB7CiAJc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmtl cm5lbF9jb250ZXh0OwogCS8qIENvbnRleHQgb25seSB0byBiZSB1c2VkIGZvciBpbmplY3Rpbmcg cHJlZW1wdGlvbiBjb21tYW5kcyAqLwogCXN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpwcmVlbXB0 X2NvbnRleHQ7CisJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lX2NsYXNzW01BWF9FTkdJ TkVfQ0xBU1MgKyAxXQorCQkJCQkgICAgW01BWF9FTkdJTkVfSU5TVEFOQ0UgKyAxXTsKIAlzdHJ1 Y3QgaTkxNV92bWEgKnNlbWFwaG9yZTsKIAogCXN0cnVjdCBkcm1fZG1hX2hhbmRsZSAqc3RhdHVz X3BhZ2VfZG1haDsKQEAgLTI3NjIsNiArMjc2NSw4IEBAIHN0cnVjdCBkcm1faTkxNV9wcml2YXRl IHsKIAkJaW50CWlycTsKIAl9IGxwZV9hdWRpbzsKIAorCXN0cnVjdCBpOTE1X3BtdSBwbXU7CisK IAkvKgogCSAqIE5PVEU6IFRoaXMgaXMgdGhlIGRyaTEvdW1zIGR1bmdlb24sIGRvbid0IGFkZCBz dHVmZiBoZXJlLiBZb3VyIHBhdGNoCiAJICogd2lsbCBiZSByZWplY3RlZC4gSW5zdGVhZCBsb29r IGZvciBhIGJldHRlciBwbGFjZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfcG11LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BtdS5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMDFiNWVlNjdjMWJmCi0tLSAvZGV2L251bGwKKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wbXUuYwpAQCAtMCwwICsxLDY4OCBAQAorLyoK KyAqIENvcHlyaWdodCDCqSAyMDE3IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lv biBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWlu aW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0 aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3 aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUg cmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwg c3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0 byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRv IGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUg YWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVk aW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3Bp ZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBU SEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkg S0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBU TyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwK KyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENM QUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9O IE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9G IE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBE RUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgv cGVyZl9ldmVudC5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KKworI2luY2x1ZGUg Imk5MTVfZHJ2LmgiCisjaW5jbHVkZSAiaTkxNV9wbXUuaCIKKyNpbmNsdWRlICJpbnRlbF9yaW5n YnVmZmVyLmgiCisKKy8qIEZyZXF1ZW5jeSBmb3IgdGhlIHNhbXBsaW5nIHRpbWVyIGZvciBldmVu dHMgd2hpY2ggbmVlZCBpdC4gKi8KKyNkZWZpbmUgRlJFUVVFTkNZIDIwMAorI2RlZmluZSBQRVJJ T0QgbWF4X3QodTY0LCAxMDAwMCwgTlNFQ19QRVJfU0VDIC8gRlJFUVVFTkNZKQorCisjZGVmaW5l IEVOR0lORV9TQU1QTEVfTUFTSyBcCisJKEJJVChJOTE1X1NBTVBMRV9CVVNZKSB8IFwKKwkgQklU KEk5MTVfU0FNUExFX1dBSVQpIHwgXAorCSBCSVQoSTkxNV9TQU1QTEVfU0VNQSkpCisKKyNkZWZp bmUgRU5HSU5FX1NBTVBMRV9CSVRTICgxIDw8IEk5MTVfUE1VX1NBTVBMRV9CSVRTKQorCitzdGF0 aWMgY3B1bWFza190IGk5MTVfcG11X2NwdW1hc2sgPSBDUFVfTUFTS19OT05FOworCitzdGF0aWMg dTggZW5naW5lX2NvbmZpZ19zYW1wbGUodTY0IGNvbmZpZykKK3sKKwlyZXR1cm4gY29uZmlnICYg STkxNV9QTVVfU0FNUExFX01BU0s7Cit9CisKK3N0YXRpYyB1OCBlbmdpbmVfZXZlbnRfc2FtcGxl KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlyZXR1cm4gZW5naW5lX2NvbmZpZ19zYW1w bGUoZXZlbnQtPmF0dHIuY29uZmlnKTsKK30KKworc3RhdGljIHU4IGVuZ2luZV9ldmVudF9jbGFz cyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJcmV0dXJuIChldmVudC0+YXR0ci5jb25m aWcgPj4gSTkxNV9QTVVfQ0xBU1NfU0hJRlQpICYgMHhmZjsKK30KKworc3RhdGljIHU4IGVuZ2lu ZV9ldmVudF9pbnN0YW5jZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJcmV0dXJuIChl dmVudC0+YXR0ci5jb25maWcgPj4gSTkxNV9QTVVfU0FNUExFX0JJVFMpICYgMHhmZjsKK30KKwor c3RhdGljIGJvb2wgaXNfZW5naW5lX2NvbmZpZyh1NjQgY29uZmlnKQoreworCXJldHVybiBjb25m aWcgPCBfX0k5MTVfUE1VX09USEVSKDApOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGNvbmZp Z19lbmFibGVkX2JpdCh1NjQgY29uZmlnKQoreworCWlmIChpc19lbmdpbmVfY29uZmlnKGNvbmZp ZykpCisJCXJldHVybiBlbmdpbmVfY29uZmlnX3NhbXBsZShjb25maWcpOworCWVsc2UKKwkJcmV0 dXJuIEVOR0lORV9TQU1QTEVfQklUUyArIChjb25maWcgLSBfX0k5MTVfUE1VX09USEVSKDApKTsK K30KKworc3RhdGljIHU2NCBjb25maWdfZW5hYmxlZF9tYXNrKHU2NCBjb25maWcpCit7CisJcmV0 dXJuIEJJVF9VTEwoY29uZmlnX2VuYWJsZWRfYml0KGNvbmZpZykpOworfQorCitzdGF0aWMgYm9v bCBpc19lbmdpbmVfZXZlbnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXJldHVybiBp c19lbmdpbmVfY29uZmlnKGV2ZW50LT5hdHRyLmNvbmZpZyk7Cit9CisKK3N0YXRpYyB1bnNpZ25l ZCBpbnQgZXZlbnRfZW5hYmxlZF9iaXQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXJl dHVybiBjb25maWdfZW5hYmxlZF9iaXQoZXZlbnQtPmF0dHIuY29uZmlnKTsKK30KKworc3RhdGlj IGJvb2wgZ3JhYl9mb3JjZXdha2Uoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsIGJvb2wg ZncpCit7CisJaWYgKCFmdykKKwkJaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9nZXQoaTkxNSwgRk9S Q0VXQUtFX0FMTCk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQKK3VwZGF0ZV9z YW1wbGUoc3RydWN0IGk5MTVfcG11X3NhbXBsZSAqc2FtcGxlLCB1MzIgdW5pdCwgdTMyIHZhbCkK K3sKKwkvKgorCSAqIFNpbmNlIHdlIGFyZSBkb2luZyBzdG9jaGFzdGljIHNhbXBsaW5nIGZvciB0 aGVzZSBjb3VudGVycywKKwkgKiBhdmVyYWdlIHRoZSBkZWx0YSB3aXRoIHRoZSBwcmV2aW91cyB2 YWx1ZSBmb3IgYmV0dGVyIGFjY3VyYWN5LgorCSAqLworCXNhbXBsZS0+Y3VyICs9IGRpdl91NjQo bXVsX3UzMl91MzIoc2FtcGxlLT5wcmV2ICsgdmFsLCB1bml0KSwgMik7CisJc2FtcGxlLT5wcmV2 ID0gdmFsOworfQorCitzdGF0aWMgdm9pZCBlbmdpbmVzX3NhbXBsZShzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwor CWVudW0gaW50ZWxfZW5naW5lX2lkIGlkOworCWJvb2wgZncgPSBmYWxzZTsKKworCWlmICgoZGV2 X3ByaXYtPnBtdS5lbmFibGUgJiBFTkdJTkVfU0FNUExFX01BU0spID09IDApCisJCXJldHVybjsK KworCWlmICghZGV2X3ByaXYtPmd0LmF3YWtlKQorCQlyZXR1cm47CisKKwlpZiAoIWludGVsX3J1 bnRpbWVfcG1fZ2V0X2lmX2luX3VzZShkZXZfcHJpdikpCisJCXJldHVybjsKKworCWZvcl9lYWNo X2VuZ2luZShlbmdpbmUsIGRldl9wcml2LCBpZCkgeworCQl1MzIgY3VycmVudF9zZXFubyA9IGlu dGVsX2VuZ2luZV9nZXRfc2Vxbm8oZW5naW5lKTsKKwkJdTMyIGxhc3Rfc2Vxbm8gPSBpbnRlbF9l bmdpbmVfbGFzdF9zdWJtaXQoZW5naW5lKTsKKwkJdTMyIHZhbDsKKworCQl2YWwgPSAhaTkxNV9z ZXFub19wYXNzZWQoY3VycmVudF9zZXFubywgbGFzdF9zZXFubyk7CisKKwkJdXBkYXRlX3NhbXBs ZSgmZW5naW5lLT5wbXUuc2FtcGxlW0k5MTVfU0FNUExFX0JVU1ldLAorCQkJICAgICAgUEVSSU9E LCB2YWwpOworCisJCWlmICh2YWwgJiYgKGVuZ2luZS0+cG11LmVuYWJsZSAmCisJCSAgICAoQklU KEk5MTVfU0FNUExFX1dBSVQpIHwgQklUKEk5MTVfU0FNUExFX1NFTUEpKSkpIHsKKwkJCWZ3ID0g Z3JhYl9mb3JjZXdha2UoZGV2X3ByaXYsIGZ3KTsKKworCQkJdmFsID0gSTkxNV9SRUFEX0ZXKFJJ TkdfQ1RMKGVuZ2luZS0+bW1pb19iYXNlKSk7CisJCX0gZWxzZSB7CisJCQl2YWwgPSAwOworCQl9 CisKKwkJdXBkYXRlX3NhbXBsZSgmZW5naW5lLT5wbXUuc2FtcGxlW0k5MTVfU0FNUExFX1dBSVRd LAorCQkJICAgICAgUEVSSU9ELCAhISh2YWwgJiBSSU5HX1dBSVQpKTsKKworCQl1cGRhdGVfc2Ft cGxlKCZlbmdpbmUtPnBtdS5zYW1wbGVbSTkxNV9TQU1QTEVfU0VNQV0sCisJCQkgICAgICBQRVJJ T0QsICEhKHZhbCAmIFJJTkdfV0FJVF9TRU1BUEhPUkUpKTsKKwl9CisKKwlpZiAoZncpCisJCWlu dGVsX3VuY29yZV9mb3JjZXdha2VfcHV0KGRldl9wcml2LCBGT1JDRVdBS0VfQUxMKTsKKworCWlu dGVsX3J1bnRpbWVfcG1fcHV0KGRldl9wcml2KTsKK30KKworc3RhdGljIHZvaWQgZnJlcXVlbmN5 X3NhbXBsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJaWYgKGRldl9w cml2LT5wbXUuZW5hYmxlICYKKwkgICAgY29uZmlnX2VuYWJsZWRfbWFzayhJOTE1X1BNVV9BQ1RV QUxfRlJFUVVFTkNZKSkgeworCQl1MzIgdmFsOworCisJCXZhbCA9IGRldl9wcml2LT5ndF9wbS5y cHMuY3VyX2ZyZXE7CisJCWlmIChkZXZfcHJpdi0+Z3QuYXdha2UgJiYKKwkJICAgIGludGVsX3J1 bnRpbWVfcG1fZ2V0X2lmX2luX3VzZShkZXZfcHJpdikpIHsKKwkJCXZhbCA9IGludGVsX2dldF9j YWdmKGRldl9wcml2LAorCQkJCQkgICAgIEk5MTVfUkVBRF9OT1RSQUNFKEdFTjZfUlBTVEFUMSkp OworCQkJaW50ZWxfcnVudGltZV9wbV9wdXQoZGV2X3ByaXYpOworCQl9CisKKwkJdXBkYXRlX3Nh bXBsZSgmZGV2X3ByaXYtPnBtdS5zYW1wbGVbX19JOTE1X1NBTVBMRV9GUkVRX0FDVF0sCisJCQkg ICAgICAxLCBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgdmFsKSk7CisJfQorCisJaWYgKGRldl9w cml2LT5wbXUuZW5hYmxlICYKKwkgICAgY29uZmlnX2VuYWJsZWRfbWFzayhJOTE1X1BNVV9SRVFV RVNURURfRlJFUVVFTkNZKSkgeworCQl1cGRhdGVfc2FtcGxlKCZkZXZfcHJpdi0+cG11LnNhbXBs ZVtfX0k5MTVfU0FNUExFX0ZSRVFfUkVRXSwgMSwKKwkJCSAgICAgIGludGVsX2dwdV9mcmVxKGRl dl9wcml2LAorCQkJCQkgICAgIGRldl9wcml2LT5ndF9wbS5ycHMuY3VyX2ZyZXEpKTsKKwl9Cit9 CisKK3N0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBpOTE1X3NhbXBsZShzdHJ1Y3QgaHJ0aW1l ciAqaHJ0aW1lcikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9CisJCWNvbnRh aW5lcl9vZihocnRpbWVyLCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSwgcG11LnRpbWVyKTsKKwor CWlmIChpOTE1LT5wbXUuZW5hYmxlID09IDApCisJCXJldHVybiBIUlRJTUVSX05PUkVTVEFSVDsK KworCWVuZ2luZXNfc2FtcGxlKGk5MTUpOworCWZyZXF1ZW5jeV9zYW1wbGUoaTkxNSk7CisKKwlo cnRpbWVyX2ZvcndhcmRfbm93KGhydGltZXIsIG5zX3RvX2t0aW1lKFBFUklPRCkpOworCXJldHVy biBIUlRJTUVSX1JFU1RBUlQ7Cit9CisKK3N0YXRpYyB2b2lkIGk5MTVfcG11X2V2ZW50X2Rlc3Ry b3koc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCVdBUk5fT04oZXZlbnQtPnBhcmVudCk7 Cit9CisKK3N0YXRpYyBpbnQgZW5naW5lX2V2ZW50X2luaXQoc3RydWN0IHBlcmZfZXZlbnQgKmV2 ZW50KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0KKwkJY29udGFpbmVyX29m KGV2ZW50LT5wbXUsIHR5cGVvZigqaTkxNSksIHBtdS5iYXNlKTsKKworCWlmICghaW50ZWxfZW5n aW5lX2xvb2t1cF91c2VyKGk5MTUsIGVuZ2luZV9ldmVudF9jbGFzcyhldmVudCksCisJCQkJICAg ICAgZW5naW5lX2V2ZW50X2luc3RhbmNlKGV2ZW50KSkpCisJCXJldHVybiAtRU5PREVWOworCisJ c3dpdGNoIChlbmdpbmVfZXZlbnRfc2FtcGxlKGV2ZW50KSkgeworCWNhc2UgSTkxNV9TQU1QTEVf QlVTWToKKwljYXNlIEk5MTVfU0FNUExFX1dBSVQ6CisJCWJyZWFrOworCWNhc2UgSTkxNV9TQU1Q TEVfU0VNQToKKwkJaWYgKElOVEVMX0dFTihpOTE1KSA8IDYpCisJCQlyZXR1cm4gLUVOT0RFVjsK KwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQgaTkxNV9wbXVfZXZlbnRfaW5pdChzdHJ1Y3QgcGVyZl9ldmVudCAq ZXZlbnQpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPQorCQljb250YWluZXJf b2YoZXZlbnQtPnBtdSwgdHlwZW9mKCppOTE1KSwgcG11LmJhc2UpOworCWludCBjcHUsIHJldDsK KworCWlmIChldmVudC0+YXR0ci50eXBlICE9IGV2ZW50LT5wbXUtPnR5cGUpCisJCXJldHVybiAt RU5PRU5UOworCisJLyogdW5zdXBwb3J0ZWQgbW9kZXMgYW5kIGZpbHRlcnMgKi8KKwlpZiAoZXZl bnQtPmF0dHIuc2FtcGxlX3BlcmlvZCkgLyogbm8gc2FtcGxpbmcgKi8KKwkJcmV0dXJuIC1FSU5W QUw7CisKKwlpZiAoaGFzX2JyYW5jaF9zdGFjayhldmVudCkpCisJCXJldHVybiAtRU9QTk9UU1VQ UDsKKworCWlmIChldmVudC0+Y3B1IDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljcHUgPSBj cHVtYXNrX2FueV9hbmQoJmk5MTVfcG11X2NwdW1hc2ssCisJCQkgICAgICB0b3BvbG9neV9zaWJs aW5nX2NwdW1hc2soZXZlbnQtPmNwdSkpOworCWlmIChjcHUgPj0gbnJfY3B1X2lkcykKKwkJcmV0 dXJuIC1FTk9ERVY7CisKKwlpZiAoaXNfZW5naW5lX2V2ZW50KGV2ZW50KSkgeworCQlyZXQgPSBl bmdpbmVfZXZlbnRfaW5pdChldmVudCk7CisJfSBlbHNlIHsKKwkJcmV0ID0gMDsKKwkJc3dpdGNo IChldmVudC0+YXR0ci5jb25maWcpIHsKKwkJY2FzZSBJOTE1X1BNVV9BQ1RVQUxfRlJFUVVFTkNZ OgorCQkJaWYgKElTX1ZBTExFWVZJRVcoaTkxNSkgfHwgSVNfQ0hFUlJZVklFVyhpOTE1KSkKKwkJ CQkgLyogUmVxdWlyZXMgYSBtdXRleCBmb3Igc2FtcGxpbmchICovCisJCQkJcmV0ID0gLUVOT0RF VjsKKwkJY2FzZSBJOTE1X1BNVV9SRVFVRVNURURfRlJFUVVFTkNZOgorCQkJaWYgKElOVEVMX0dF TihpOTE1KSA8IDYpCisJCQkJcmV0ID0gLUVOT0RFVjsKKwkJCWJyZWFrOworCQlkZWZhdWx0Ogor CQkJcmV0ID0gLUVOT0VOVDsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChyZXQpCisJCXJldHVy biByZXQ7CisKKwlldmVudC0+Y3B1ID0gY3B1OworCWlmICghZXZlbnQtPnBhcmVudCkKKwkJZXZl bnQtPmRlc3Ryb3kgPSBpOTE1X3BtdV9ldmVudF9kZXN0cm95OworCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyB1NjQgX19pOTE1X3BtdV9ldmVudF9yZWFkKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVu dCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9CisJCWNvbnRhaW5lcl9vZihl dmVudC0+cG11LCB0eXBlb2YoKmk5MTUpLCBwbXUuYmFzZSk7CisJdTY0IHZhbCA9IDA7CisKKwlp ZiAoaXNfZW5naW5lX2V2ZW50KGV2ZW50KSkgeworCQl1OCBzYW1wbGUgPSBlbmdpbmVfZXZlbnRf c2FtcGxlKGV2ZW50KTsKKwkJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOworCisJCWVu Z2luZSA9IGludGVsX2VuZ2luZV9sb29rdXBfdXNlcihpOTE1LAorCQkJCQkJICBlbmdpbmVfZXZl bnRfY2xhc3MoZXZlbnQpLAorCQkJCQkJICBlbmdpbmVfZXZlbnRfaW5zdGFuY2UoZXZlbnQpKTsK KworCQlpZiAoV0FSTl9PTl9PTkNFKCFlbmdpbmUpKSB7CisJCQkvKiBEbyBub3RoaW5nICovCisJ CX0gZWxzZSB7CisJCQl2YWwgPSBlbmdpbmUtPnBtdS5zYW1wbGVbc2FtcGxlXS5jdXI7CisJCX0K Kwl9IGVsc2UgeworCQlzd2l0Y2ggKGV2ZW50LT5hdHRyLmNvbmZpZykgeworCQljYXNlIEk5MTVf UE1VX0FDVFVBTF9GUkVRVUVOQ1k6CisJCQl2YWwgPQorCQkJICAgZGl2X3U2NChpOTE1LT5wbXUu c2FtcGxlW19fSTkxNV9TQU1QTEVfRlJFUV9BQ1RdLmN1ciwKKwkJCQkgICBGUkVRVUVOQ1kpOwor CQkJYnJlYWs7CisJCWNhc2UgSTkxNV9QTVVfUkVRVUVTVEVEX0ZSRVFVRU5DWToKKwkJCXZhbCA9 CisJCQkgICBkaXZfdTY0KGk5MTUtPnBtdS5zYW1wbGVbX19JOTE1X1NBTVBMRV9GUkVRX1JFUV0u Y3VyLAorCQkJCSAgIEZSRVFVRU5DWSk7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiB2 YWw7Cit9CisKK3N0YXRpYyB2b2lkIGk5MTVfcG11X2V2ZW50X3JlYWQoc3RydWN0IHBlcmZfZXZl bnQgKmV2ZW50KQoreworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3Owor CXU2NCBwcmV2LCBuZXc7CisKK2FnYWluOgorCXByZXYgPSBsb2NhbDY0X3JlYWQoJmh3Yy0+cHJl dl9jb3VudCk7CisJbmV3ID0gX19pOTE1X3BtdV9ldmVudF9yZWFkKGV2ZW50KTsKKworCWlmIChs b2NhbDY0X2NtcHhjaGcoJmh3Yy0+cHJldl9jb3VudCwgcHJldiwgbmV3KSAhPSBwcmV2KQorCQln b3RvIGFnYWluOworCisJbG9jYWw2NF9hZGQobmV3IC0gcHJldiwgJmV2ZW50LT5jb3VudCk7Cit9 CisKK3N0YXRpYyB2b2lkIGk5MTVfcG11X2VuYWJsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQp Cit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPQorCQljb250YWluZXJfb2YoZXZl bnQtPnBtdSwgdHlwZW9mKCppOTE1KSwgcG11LmJhc2UpOworCXVuc2lnbmVkIGludCBiaXQgPSBl dmVudF9lbmFibGVkX2JpdChldmVudCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5f bG9ja19pcnFzYXZlKCZpOTE1LT5wbXUubG9jaywgZmxhZ3MpOworCisJLyoKKwkgKiBTdGFydCB0 aGUgc2FtcGxpbmcgdGltZXIgd2hlbiBlbmFibGluZyB0aGUgZmlyc3QgZXZlbnQuCisJICovCisJ aWYgKGk5MTUtPnBtdS5lbmFibGUgPT0gMCkKKwkJaHJ0aW1lcl9zdGFydF9yYW5nZV9ucygmaTkx NS0+cG11LnRpbWVyLAorCQkJCSAgICAgICBuc190b19rdGltZShQRVJJT0QpLCAwLAorCQkJCSAg ICAgICBIUlRJTUVSX01PREVfUkVMX1BJTk5FRCk7CisKKwkvKgorCSAqIFVwZGF0ZSB0aGUgYml0 bWFzayBvZiBlbmFibGVkIGV2ZW50cyBhbmQgaW5jcmVtZW50CisJICogdGhlIGV2ZW50IHJlZmVy ZW5jZSBjb3VudGVyLgorCSAqLworCUdFTV9CVUdfT04oYml0ID49IEk5MTVfUE1VX01BU0tfQklU Uyk7CisJR0VNX0JVR19PTihpOTE1LT5wbXUuZW5hYmxlX2NvdW50W2JpdF0gPT0gfjApOworCWk5 MTUtPnBtdS5lbmFibGUgfD0gQklUX1VMTChiaXQpOworCWk5MTUtPnBtdS5lbmFibGVfY291bnRb Yml0XSsrOworCisJLyoKKwkgKiBGb3IgcGVyLWVuZ2luZSBldmVudHMgdGhlIGJpdG1hc2sgYW5k IHJlZmVyZW5jZSBjb3VudGluZworCSAqIGlzIHN0b3JlZCBwZXIgZW5naW5lLgorCSAqLworCWlm IChpc19lbmdpbmVfZXZlbnQoZXZlbnQpKSB7CisJCXU4IHNhbXBsZSA9IGVuZ2luZV9ldmVudF9z YW1wbGUoZXZlbnQpOworCQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7CisKKwkJZW5n aW5lID0gaW50ZWxfZW5naW5lX2xvb2t1cF91c2VyKGk5MTUsCisJCQkJCQkgIGVuZ2luZV9ldmVu dF9jbGFzcyhldmVudCksCisJCQkJCQkgIGVuZ2luZV9ldmVudF9pbnN0YW5jZShldmVudCkpOwor CQlHRU1fQlVHX09OKCFlbmdpbmUpOworCQllbmdpbmUtPnBtdS5lbmFibGUgfD0gQklUKHNhbXBs ZSk7CisKKwkJR0VNX0JVR19PTihzYW1wbGUgPj0gSTkxNV9QTVVfU0FNUExFX0JJVFMpOworCQlH RU1fQlVHX09OKGVuZ2luZS0+cG11LmVuYWJsZV9jb3VudFtzYW1wbGVdID09IH4wKTsKKwkJZW5n aW5lLT5wbXUuZW5hYmxlX2NvdW50W3NhbXBsZV0rKzsKKwl9CisKKwkvKgorCSAqIFN0b3JlIHRo ZSBjdXJyZW50IGNvdW50ZXIgdmFsdWUgc28gd2UgY2FuIHJlcG9ydCB0aGUgY29ycmVjdCBkZWx0 YQorCSAqIGZvciBhbGwgbGlzdGVuZXJzLiBFdmVuIHdoZW4gdGhlIGV2ZW50IHdhcyBhbHJlYWR5 IGVuYWJsZWQgYW5kIGhhcworCSAqIGFuIGV4aXN0aW5nIG5vbi16ZXJvIHZhbHVlLgorCSAqLwor CWxvY2FsNjRfc2V0KCZldmVudC0+aHcucHJldl9jb3VudCwgX19pOTE1X3BtdV9ldmVudF9yZWFk KGV2ZW50KSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpOTE1LT5wbXUubG9jaywgZmxh Z3MpOworfQorCitzdGF0aWMgdm9pZCBpOTE1X3BtdV9kaXNhYmxlKHN0cnVjdCBwZXJmX2V2ZW50 ICpldmVudCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9CisJCWNvbnRhaW5l cl9vZihldmVudC0+cG11LCB0eXBlb2YoKmk5MTUpLCBwbXUuYmFzZSk7CisJdW5zaWduZWQgaW50 IGJpdCA9IGV2ZW50X2VuYWJsZWRfYml0KGV2ZW50KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwor CisJc3Bpbl9sb2NrX2lycXNhdmUoJmk5MTUtPnBtdS5sb2NrLCBmbGFncyk7CisKKwlpZiAoaXNf ZW5naW5lX2V2ZW50KGV2ZW50KSkgeworCQl1OCBzYW1wbGUgPSBlbmdpbmVfZXZlbnRfc2FtcGxl KGV2ZW50KTsKKwkJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOworCisJCWVuZ2luZSA9 IGludGVsX2VuZ2luZV9sb29rdXBfdXNlcihpOTE1LAorCQkJCQkJICBlbmdpbmVfZXZlbnRfY2xh c3MoZXZlbnQpLAorCQkJCQkJICBlbmdpbmVfZXZlbnRfaW5zdGFuY2UoZXZlbnQpKTsKKwkJR0VN X0JVR19PTighZW5naW5lKTsKKwkJR0VNX0JVR19PTihzYW1wbGUgPj0gSTkxNV9QTVVfU0FNUExF X0JJVFMpOworCQlHRU1fQlVHX09OKGVuZ2luZS0+cG11LmVuYWJsZV9jb3VudFtzYW1wbGVdID09 IDApOworCQkvKgorCQkgKiBEZWNyZW1lbnQgdGhlIHJlZmVyZW5jZSBjb3VudCBhbmQgY2xlYXIg dGhlIGVuYWJsZWQKKwkJICogYml0bWFzayB3aGVuIHRoZSBsYXN0IGxpc3RlbmVyIG9uIGFuIGV2 ZW50IGdvZXMgYXdheS4KKwkJICovCisJCWlmICgtLWVuZ2luZS0+cG11LmVuYWJsZV9jb3VudFtz YW1wbGVdID09IDApCisJCQllbmdpbmUtPnBtdS5lbmFibGUgJj0gfkJJVChzYW1wbGUpOworCX0K KworCUdFTV9CVUdfT04oYml0ID49IEk5MTVfUE1VX01BU0tfQklUUyk7CisJR0VNX0JVR19PTihp OTE1LT5wbXUuZW5hYmxlX2NvdW50W2JpdF0gPT0gMCk7CisJLyoKKwkgKiBEZWNyZW1lbnQgdGhl IHJlZmVyZW5jZSBjb3VudCBhbmQgY2xlYXIgdGhlIGVuYWJsZWQKKwkgKiBiaXRtYXNrIHdoZW4g dGhlIGxhc3QgbGlzdGVuZXIgb24gYW4gZXZlbnQgZ29lcyBhd2F5LgorCSAqLworCWlmICgtLWk5 MTUtPnBtdS5lbmFibGVfY291bnRbYml0XSA9PSAwKQorCQlpOTE1LT5wbXUuZW5hYmxlICY9IH5C SVRfVUxMKGJpdCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpOTE1LT5wbXUubG9jaywg ZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBpOTE1X3BtdV9ldmVudF9zdGFydChzdHJ1Y3QgcGVy Zl9ldmVudCAqZXZlbnQsIGludCBmbGFncykKK3sKKwlpOTE1X3BtdV9lbmFibGUoZXZlbnQpOwor CWV2ZW50LT5ody5zdGF0ZSA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIGk5MTVfcG11X2V2ZW50X3N0 b3Aoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgZmxhZ3MpCit7CisJaWYgKGZsYWdzICYg UEVSRl9FRl9VUERBVEUpCisJCWk5MTVfcG11X2V2ZW50X3JlYWQoZXZlbnQpOworCWk5MTVfcG11 X2Rpc2FibGUoZXZlbnQpOworCWV2ZW50LT5ody5zdGF0ZSA9IFBFUkZfSEVTX1NUT1BQRUQ7Cit9 CisKK3N0YXRpYyBpbnQgaTkxNV9wbXVfZXZlbnRfYWRkKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVu dCwgaW50IGZsYWdzKQoreworCWlmIChmbGFncyAmIFBFUkZfRUZfU1RBUlQpCisJCWk5MTVfcG11 X2V2ZW50X3N0YXJ0KGV2ZW50LCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZv aWQgaTkxNV9wbXVfZXZlbnRfZGVsKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGZsYWdz KQoreworCWk5MTVfcG11X2V2ZW50X3N0b3AoZXZlbnQsIFBFUkZfRUZfVVBEQVRFKTsKK30KKwor c3RhdGljIGludCBpOTE1X3BtdV9ldmVudF9ldmVudF9pZHgoc3RydWN0IHBlcmZfZXZlbnQgKmV2 ZW50KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBpOTE1X3BtdV9mb3JtYXRf c2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRl ICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGRldl9leHRfYXR0cmlidXRlICplYXR0cjsK KworCWVhdHRyID0gY29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCBkZXZfZXh0X2F0dHJpYnV0ZSwg YXR0cik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIChjaGFyICopZWF0dHItPnZhcik7 Cit9CisKKyNkZWZpbmUgSTkxNV9QTVVfRk9STUFUX0FUVFIoX25hbWUsIF9jb25maWcpIFwKKwko Jigoc3RydWN0IGRldl9leHRfYXR0cmlidXRlW10pIHsgXAorCQl7IC5hdHRyID0gX19BVFRSKF9u YW1lLCAwNDQ0LCBpOTE1X3BtdV9mb3JtYXRfc2hvdywgTlVMTCksIFwKKwkJICAudmFyID0gKHZv aWQgKilfY29uZmlnLCB9IFwKKwl9KVswXS5hdHRyLmF0dHIpCisKK3N0YXRpYyBzdHJ1Y3QgYXR0 cmlidXRlICppOTE1X3BtdV9mb3JtYXRfYXR0cnNbXSA9IHsKKwlJOTE1X1BNVV9GT1JNQVRfQVRU UihpOTE1X2V2ZW50aWQsICJjb25maWc6MC0yMCIpLAorCU5VTEwsCit9OworCitzdGF0aWMgY29u c3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBpOTE1X3BtdV9mb3JtYXRfYXR0cl9ncm91cCA9IHsK KwkubmFtZSA9ICJmb3JtYXQiLAorCS5hdHRycyA9IGk5MTVfcG11X2Zvcm1hdF9hdHRycywKK307 CisKK3N0YXRpYyBzc2l6ZV90IGk5MTVfcG11X2V2ZW50X3Nob3coc3RydWN0IGRldmljZSAqZGV2 LAorCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJ c3RydWN0IGRldl9leHRfYXR0cmlidXRlICplYXR0cjsKKworCWVhdHRyID0gY29udGFpbmVyX29m KGF0dHIsIHN0cnVjdCBkZXZfZXh0X2F0dHJpYnV0ZSwgYXR0cik7CisJcmV0dXJuIHNwcmludGYo YnVmLCAiY29uZmlnPTB4JWx4XG4iLCAodW5zaWduZWQgbG9uZyllYXR0ci0+dmFyKTsKK30KKwor I2RlZmluZSBJOTE1X0VWRU5UX0FUVFIoX25hbWUsIF9jb25maWcpIFwKKwkoJigoc3RydWN0IGRl dl9leHRfYXR0cmlidXRlW10pIHsgXAorCQl7IC5hdHRyID0gX19BVFRSKF9uYW1lLCAwNDQ0LCBp OTE1X3BtdV9ldmVudF9zaG93LCBOVUxMKSwgXAorCQkgIC52YXIgPSAodm9pZCAqKV9jb25maWcs IH0gXAorCX0pWzBdLmF0dHIuYXR0cikKKworI2RlZmluZSBJOTE1X0VWRU5UX1NUUihfbmFtZSwg X3N0cikgXAorCSgmKChzdHJ1Y3QgcGVyZl9wbXVfZXZlbnRzX2F0dHJbXSkgeyBcCisJCXsgLmF0 dHIJICAgICA9IF9fQVRUUihfbmFtZSwgMDQ0NCwgcGVyZl9ldmVudF9zeXNmc19zaG93LCBOVUxM KSwgXAorCQkgIC5pZAkgICAgID0gMCwgXAorCQkgIC5ldmVudF9zdHIgPSBfc3RyLCB9IFwKKwl9 KVswXS5hdHRyLmF0dHIpCisKKyNkZWZpbmUgSTkxNV9FVkVOVChfbmFtZSwgX2NvbmZpZywgX3Vu aXQpIFwKKwlJOTE1X0VWRU5UX0FUVFIoX25hbWUsIF9jb25maWcpLCBcCisJSTkxNV9FVkVOVF9T VFIoX25hbWUudW5pdCwgX3VuaXQpCisKKyNkZWZpbmUgSTkxNV9FTkdJTkVfRVZFTlQoX25hbWUs IF9jbGFzcywgX2luc3RhbmNlLCBfc2FtcGxlKSBcCisJSTkxNV9FVkVOVF9BVFRSKF9uYW1lLCBf X0k5MTVfUE1VX0VOR0lORShfY2xhc3MsIF9pbnN0YW5jZSwgX3NhbXBsZSkpLCBcCisJSTkxNV9F VkVOVF9TVFIoX25hbWUudW5pdCwgIm5zIikKKworI2RlZmluZSBJOTE1X0VOR0lORV9FVkVOVFMo X25hbWUsIF9jbGFzcywgX2luc3RhbmNlKSBcCisJSTkxNV9FTkdJTkVfRVZFTlQoX25hbWUjI19p bnN0YW5jZS1idXN5LCBfY2xhc3MsIF9pbnN0YW5jZSwgSTkxNV9TQU1QTEVfQlVTWSksIFwKKwlJ OTE1X0VOR0lORV9FVkVOVChfbmFtZSMjX2luc3RhbmNlLXNlbWEsIF9jbGFzcywgX2luc3RhbmNl LCBJOTE1X1NBTVBMRV9TRU1BKSwgXAorCUk5MTVfRU5HSU5FX0VWRU5UKF9uYW1lIyNfaW5zdGFu Y2Utd2FpdCwgX2NsYXNzLCBfaW5zdGFuY2UsIEk5MTVfU0FNUExFX1dBSVQpCisKK3N0YXRpYyBz dHJ1Y3QgYXR0cmlidXRlICppOTE1X3BtdV9ldmVudHNfYXR0cnNbXSA9IHsKKwlJOTE1X0VOR0lO RV9FVkVOVFMocmNzLCBJOTE1X0VOR0lORV9DTEFTU19SRU5ERVIsIDApLAorCUk5MTVfRU5HSU5F X0VWRU5UUyhiY3MsIEk5MTVfRU5HSU5FX0NMQVNTX0NPUFksIDApLAorCUk5MTVfRU5HSU5FX0VW RU5UUyh2Y3MsIEk5MTVfRU5HSU5FX0NMQVNTX1ZJREVPLCAwKSwKKwlJOTE1X0VOR0lORV9FVkVO VFModmNzLCBJOTE1X0VOR0lORV9DTEFTU19WSURFTywgMSksCisJSTkxNV9FTkdJTkVfRVZFTlRT KHZlY3MsIEk5MTVfRU5HSU5FX0NMQVNTX1ZJREVPX0VOSEFOQ0UsIDApLAorCisJSTkxNV9FVkVO VChhY3R1YWwtZnJlcXVlbmN5LCAgICBJOTE1X1BNVV9BQ1RVQUxfRlJFUVVFTkNZLCAgICAiTUh6 IiksCisJSTkxNV9FVkVOVChyZXF1ZXN0ZWQtZnJlcXVlbmN5LCBJOTE1X1BNVV9SRVFVRVNURURf RlJFUVVFTkNZLCAiTUh6IiksCisKKwlOVUxMLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBh dHRyaWJ1dGVfZ3JvdXAgaTkxNV9wbXVfZXZlbnRzX2F0dHJfZ3JvdXAgPSB7CisJLm5hbWUgPSAi ZXZlbnRzIiwKKwkuYXR0cnMgPSBpOTE1X3BtdV9ldmVudHNfYXR0cnMsCit9OworCitzdGF0aWMg c3NpemVfdAoraTkxNV9wbXVfZ2V0X2F0dHJfY3B1bWFzayhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJ CQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICBjaGFyICpidWYpCit7CisJ cmV0dXJuIGNwdW1hcF9wcmludF90b19wYWdlYnVmKHRydWUsIGJ1ZiwgJmk5MTVfcG11X2NwdW1h c2spOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoY3B1bWFzaywgMDQ0NCwgaTkxNV9wbXVfZ2V0 X2F0dHJfY3B1bWFzaywgTlVMTCk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICppOTE1X2Nw dW1hc2tfYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfY3B1bWFzay5hdHRyLAorCU5VTEwsCit9Owor CitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBpOTE1X3BtdV9jcHVtYXNrX2F0dHJfZ3Jv dXAgPSB7CisJLmF0dHJzID0gaTkxNV9jcHVtYXNrX2F0dHJzLAorfTsKKworc3RhdGljIGNvbnN0 IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKmk5MTVfcG11X2F0dHJfZ3JvdXBzW10gPSB7CisJJmk5 MTVfcG11X2Zvcm1hdF9hdHRyX2dyb3VwLAorCSZpOTE1X3BtdV9ldmVudHNfYXR0cl9ncm91cCwK KwkmaTkxNV9wbXVfY3B1bWFza19hdHRyX2dyb3VwLAorCU5VTEwKK307CisKKyNpZmRlZiBDT05G SUdfSE9UUExVR19DUFUKK3N0YXRpYyBpbnQgaTkxNV9wbXVfY3B1X29ubGluZSh1bnNpZ25lZCBp bnQgY3B1LCBzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSkKK3sKKwlzdHJ1Y3QgaTkxNV9wbXUgKnBt dSA9IGhsaXN0X2VudHJ5X3NhZmUobm9kZSwgdHlwZW9mKCpwbXUpLCBub2RlKTsKKwl1bnNpZ25l ZCBpbnQgdGFyZ2V0OworCisJR0VNX0JVR19PTighcG11LT5iYXNlLmV2ZW50X2luaXQpOworCisJ dGFyZ2V0ID0gY3B1bWFza19hbnlfYW5kKCZpOTE1X3BtdV9jcHVtYXNrLCAmaTkxNV9wbXVfY3B1 bWFzayk7CisJLyogU2VsZWN0IHRoZSBmaXJzdCBvbmxpbmUgQ1BVIGFzIGEgZGVzaWduYXRlZCBy ZWFkZXIuICovCisJaWYgKHRhcmdldCA+PSBucl9jcHVfaWRzKQorCQljcHVtYXNrX3NldF9jcHUo Y3B1LCAmaTkxNV9wbXVfY3B1bWFzayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBp OTE1X3BtdV9jcHVfb2ZmbGluZSh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgaGxpc3Rfbm9kZSAq bm9kZSkKK3sKKwlzdHJ1Y3QgaTkxNV9wbXUgKnBtdSA9IGhsaXN0X2VudHJ5X3NhZmUobm9kZSwg dHlwZW9mKCpwbXUpLCBub2RlKTsKKwl1bnNpZ25lZCBpbnQgdGFyZ2V0OworCisJR0VNX0JVR19P TighcG11LT5iYXNlLmV2ZW50X2luaXQpOworCisJaWYgKGNwdW1hc2tfdGVzdF9hbmRfY2xlYXJf Y3B1KGNwdSwgJmk5MTVfcG11X2NwdW1hc2spKSB7CisJCXRhcmdldCA9IGNwdW1hc2tfYW55X2J1 dCh0b3BvbG9neV9zaWJsaW5nX2NwdW1hc2soY3B1KSwgY3B1KTsKKwkJLyogTWlncmF0ZSBldmVu dHMgaWYgdGhlcmUgaXMgYSB2YWxpZCB0YXJnZXQgKi8KKwkJaWYgKHRhcmdldCA8IG5yX2NwdV9p ZHMpIHsKKwkJCWNwdW1hc2tfc2V0X2NwdSh0YXJnZXQsICZpOTE1X3BtdV9jcHVtYXNrKTsKKwkJ CXBlcmZfcG11X21pZ3JhdGVfY29udGV4dCgmcG11LT5iYXNlLCBjcHUsIHRhcmdldCk7CisJCX0K Kwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGVudW0gY3B1aHBfc3RhdGUgY3B1aHBfc2xv dCA9IENQVUhQX0lOVkFMSUQ7CisjZW5kaWYKKworc3RhdGljIGludCBpOTE1X3BtdV9yZWdpc3Rl cl9jcHVocF9zdGF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKK3sKKyNpZmRlZiBD T05GSUdfSE9UUExVR19DUFUKKwllbnVtIGNwdWhwX3N0YXRlIHNsb3Q7CisJaW50IHJldDsKKwor CXJldCA9IGNwdWhwX3NldHVwX3N0YXRlX211bHRpKENQVUhQX0FQX09OTElORV9EWU4sCisJCQkJ ICAgICAgInBlcmYveDg2L2ludGVsL2k5MTU6b25saW5lIiwKKwkJCQkgICAgICBpOTE1X3BtdV9j cHVfb25saW5lLAorCQkJCSAgICAgIGk5MTVfcG11X2NwdV9vZmZsaW5lKTsKKwlpZiAocmV0IDwg MCkKKwkJcmV0dXJuIHJldDsKKworCXNsb3QgPSByZXQ7CisJcmV0ID0gY3B1aHBfc3RhdGVfYWRk X2luc3RhbmNlKHNsb3QsICZpOTE1LT5wbXUubm9kZSk7CisJaWYgKHJldCkgeworCQljcHVocF9y ZW1vdmVfbXVsdGlfc3RhdGUoc2xvdCk7CisJCXJldHVybiByZXQ7CisJfQorCisJY3B1aHBfc2xv dCA9IHNsb3Q7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaTkxNV9wbXVf dW5yZWdpc3Rlcl9jcHVocF9zdGF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKK3sK KyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKKwlXQVJOX09OKGNwdWhwX3Nsb3QgPT0gQ1BVSFBf SU5WQUxJRCk7CisJV0FSTl9PTihjcHVocF9zdGF0ZV9yZW1vdmVfaW5zdGFuY2UoY3B1aHBfc2xv dCwgJmk5MTUtPnBtdS5ub2RlKSk7CisJY3B1aHBfcmVtb3ZlX211bHRpX3N0YXRlKGNwdWhwX3Ns b3QpOworI2VuZGlmCit9CisKK3ZvaWQgaTkxNV9wbXVfcmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTUpCit7CisJaW50IHJldDsKKworCWlmIChJTlRFTF9HRU4oaTkxNSkgPD0g MikgeworCQlEUk1fSU5GTygiUE1VIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgR1BVLiIpOworCQly ZXR1cm47CisJfQorCisJaTkxNS0+cG11LmJhc2UuYXR0cl9ncm91cHMJPSBpOTE1X3BtdV9hdHRy X2dyb3VwczsKKwlpOTE1LT5wbXUuYmFzZS50YXNrX2N0eF9ucgk9IHBlcmZfaW52YWxpZF9jb250 ZXh0OworCWk5MTUtPnBtdS5iYXNlLmV2ZW50X2luaXQJPSBpOTE1X3BtdV9ldmVudF9pbml0Owor CWk5MTUtPnBtdS5iYXNlLmFkZAkJPSBpOTE1X3BtdV9ldmVudF9hZGQ7CisJaTkxNS0+cG11LmJh c2UuZGVsCQk9IGk5MTVfcG11X2V2ZW50X2RlbDsKKwlpOTE1LT5wbXUuYmFzZS5zdGFydAkJPSBp OTE1X3BtdV9ldmVudF9zdGFydDsKKwlpOTE1LT5wbXUuYmFzZS5zdG9wCQk9IGk5MTVfcG11X2V2 ZW50X3N0b3A7CisJaTkxNS0+cG11LmJhc2UucmVhZAkJPSBpOTE1X3BtdV9ldmVudF9yZWFkOwor CWk5MTUtPnBtdS5iYXNlLmV2ZW50X2lkeAk9IGk5MTVfcG11X2V2ZW50X2V2ZW50X2lkeDsKKwor CXNwaW5fbG9ja19pbml0KCZpOTE1LT5wbXUubG9jayk7CisJaHJ0aW1lcl9pbml0KCZpOTE1LT5w bXUudGltZXIsIENMT0NLX01PTk9UT05JQywgSFJUSU1FUl9NT0RFX1JFTCk7CisJaTkxNS0+cG11 LnRpbWVyLmZ1bmN0aW9uID0gaTkxNV9zYW1wbGU7CisKKwlyZXQgPSBwZXJmX3BtdV9yZWdpc3Rl cigmaTkxNS0+cG11LmJhc2UsICJpOTE1IiwgLTEpOworCWlmIChyZXQpCisJCWdvdG8gZXJyOwor CisJcmV0ID0gaTkxNV9wbXVfcmVnaXN0ZXJfY3B1aHBfc3RhdGUoaTkxNSk7CisJaWYgKHJldCkK KwkJZ290byBlcnJfdW5yZWc7CisKKwlyZXR1cm47CisKK2Vycl91bnJlZzoKKwlwZXJmX3BtdV91 bnJlZ2lzdGVyKCZpOTE1LT5wbXUuYmFzZSk7CitlcnI6CisJaTkxNS0+cG11LmJhc2UuZXZlbnRf aW5pdCA9IE5VTEw7CisJRFJNX05PVEUoIkZhaWxlZCB0byByZWdpc3RlciBQTVUhIChlcnI9JWQp XG4iLCByZXQpOworfQorCit2b2lkIGk5MTVfcG11X3VucmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTUpCit7CisJaWYgKCFpOTE1LT5wbXUuYmFzZS5ldmVudF9pbml0KQorCQly ZXR1cm47CisKKwlXQVJOX09OKGk5MTUtPnBtdS5lbmFibGUpOworCisJaHJ0aW1lcl9jYW5jZWwo Jmk5MTUtPnBtdS50aW1lcik7CisKKwlpOTE1X3BtdV91bnJlZ2lzdGVyX2NwdWhwX3N0YXRlKGk5 MTUpOworCisJcGVyZl9wbXVfdW5yZWdpc3RlcigmaTkxNS0+cG11LmJhc2UpOworCWk5MTUtPnBt dS5iYXNlLmV2ZW50X2luaXQgPSBOVUxMOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9wbXUuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcG11LmgKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4xYWM4YjJlMzQ2MDcKLS0tIC9kZXYv bnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BtdS5oCkBAIC0wLDAgKzEsMTA0 IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTcgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQ ZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNv biBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRv Y3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNv ZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24K KyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0 cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2Fy ZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJu aXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoK KyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNl IChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4g YWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgor ICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZ IE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBM SU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVO VCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZP UiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBB TiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9N LCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9S IE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICovCisjaWZuZGVmIF9f STkxNV9QTVVfSF9fCisjZGVmaW5lIF9fSTkxNV9QTVVfSF9fCisKK2VudW0geworCV9fSTkxNV9T QU1QTEVfRlJFUV9BQ1QgPSAwLAorCV9fSTkxNV9TQU1QTEVfRlJFUV9SRVEsCisJX19JOTE1X05V TV9QTVVfU0FNUExFUlMKK307CisKKy8qKgorICogSG93IG1hbnkgZGlmZmVyZW50IGV2ZW50cyB3 ZSB0cmFjayBpbiB0aGUgZ2xvYmFsIFBNVSBtYXNrLgorICoKKyAqIEl0IGlzIGFsc28gdXNlZCB0 byBrbm93IHRvIG5lZWRlZCBudW1iZXIgb2YgZXZlbnQgcmVmZXJlbmNlIGNvdW50ZXJzLgorICov CisjZGVmaW5lIEk5MTVfUE1VX01BU0tfQklUUyBcCisJKCgxIDw8IEk5MTVfUE1VX1NBTVBMRV9C SVRTKSArIFwKKwkgKEk5MTVfUE1VX0xBU1QgKyAxIC0gX19JOTE1X1BNVV9PVEhFUigwKSkpCisK K3N0cnVjdCBpOTE1X3BtdV9zYW1wbGUgeworCXU2NCBjdXI7CisJdTMyIHByZXY7Cit9OworCitz dHJ1Y3QgaTkxNV9wbXUgeworCS8qKgorCSAqIEBub2RlOiBMaXN0IG5vZGUgZm9yIENQVSBob3Rw bHVnIGhhbmRsaW5nLgorCSAqLworCXN0cnVjdCBobGlzdF9ub2RlIG5vZGU7CisJLyoqCisJICog QGJhc2U6IFBNVSBiYXNlLgorCSAqLworCXN0cnVjdCBwbXUgYmFzZTsKKwkvKioKKwkgKiBAbG9j azogTG9jayBwcm90ZWN0aW5nIGVuYWJsZSBtYXNrIGFuZCByZWYgY291bnQgaGFuZGxpbmcuCisJ ICovCisJc3BpbmxvY2tfdCBsb2NrOworCS8qKgorCSAqIEB0aW1lcjogVGltZXIgZm9yIGludGVy bmFsIGk5MTUgUE1VIHNhbXBsaW5nLgorCSAqLworCXN0cnVjdCBocnRpbWVyIHRpbWVyOworCS8q KgorCSAqIEBlbmFibGU6IEJpdG1hc2sgb2YgYWxsIGN1cnJlbnRseSBlbmFibGVkIGV2ZW50cy4K KwkgKgorCSAqIEJpdHMgYXJlIGRlcml2ZWQgZnJvbSB1QVBJIGV2ZW50IG51bWJlcnMgaW4gYSB3 YXkgdGhhdCBsb3cgMTYgYml0cworCSAqIGNvcnJlc3BvbmQgdG8gZW5naW5lIGV2ZW50IF9zYW1w bGVfIF90eXBlXyAoSTkxNV9TQU1QTEVfUVVFVUVEIGlzCisJICogYml0IDApLCBhbmQgaGlnaGVy IGJpdHMgY29ycmVzcG9uZCB0byBvdGhlciBldmVudHMgKGZvciBpbnN0YW5jZQorCSAqIEk5MTVf UE1VX0FDVFVBTF9GUkVRVUVOQ1kgaXMgYml0IDE2IGV0YykuCisJICoKKwkgKiBJbiBvdGhlciB3 b3JkcywgbG93IDE2IGJpdHMgYXJlIG5vdCBwZXIgZW5naW5lIGJ1dCBwZXIgZW5naW5lCisJICog c2FtcGxlciB0eXBlLCB3aGlsZSB0aGUgdXBwZXIgYml0cyBhcmUgZGlyZWN0bHkgbWFwcGVkIHRv IG90aGVyCisJICogZXZlbnQgdHlwZXMuCisJICovCisJdTY0IGVuYWJsZTsKKwkvKioKKwkgKiBA ZW5hYmxlX2NvdW50OiBSZWZlcmVuY2UgY291bnRzIGZvciB0aGUgZW5hYmxlZCBldmVudHMuCisJ ICoKKwkgKiBBcnJheSBpbmRpY2VzIGFyZSBtYXBwZWQgaW4gdGhlIHNhbWUgd2F5IGFzIGJpdHMg aW4gdGhlIEBlbmFibGUgZmllbGQKKwkgKiBhbmQgdGhleSBhcmUgdXNlZCB0byBjb250cm9sIHNh bXBsaW5nIG9uL29mZiB3aGVuIG11bHRpcGxlIGNsaWVudHMKKwkgKiBhcmUgdXNpbmcgdGhlIFBN VSBBUEkuCisJICovCisJdW5zaWduZWQgaW50IGVuYWJsZV9jb3VudFtJOTE1X1BNVV9NQVNLX0JJ VFNdOworCS8qKgorCSAqIEBzYW1wbGU6IEN1cnJlbnQgYW5kIHByZXZpb3VzIChyYXcpIGNvdW50 ZXJzIGZvciBzYW1wbGluZyBldmVudHMuCisJICoKKwkgKiBUaGVzZSBjb3VudGVycyBhcmUgdXBk YXRlZCBmcm9tIHRoZSBpOTE1IFBNVSBzYW1wbGluZyB0aW1lci4KKwkgKgorCSAqIE9ubHkgZ2xv YmFsIGNvdW50ZXJzIGFyZSBoZWxkIGhlcmUsIHdoaWxlIHRoZSBwZXItZW5naW5lIG9uZXMgYXJl IGluCisJICogc3RydWN0IGludGVsX2VuZ2luZV9jcy4KKwkgKi8KKwlzdHJ1Y3QgaTkxNV9wbXVf c2FtcGxlIHNhbXBsZVtfX0k5MTVfTlVNX1BNVV9TQU1QTEVSU107Cit9OworCisjaWZkZWYgQ09O RklHX1BFUkZfRVZFTlRTCit2b2lkIGk5MTVfcG11X3JlZ2lzdGVyKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1KTsKK3ZvaWQgaTkxNV9wbXVfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqaTkxNSk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGk5MTVfcG11X3JlZ2lz dGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KSB7fQorc3RhdGljIGlubGluZSB2b2lk IGk5MTVfcG11X3VucmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpIHt9Cisj ZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3Jl Zy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAppbmRleCA0ZTkyZGIyOGFmOWMu LmUyYmYyZWI1N2U5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcu aAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCkBAIC0xODYsNiArMTg2LDkg QEAgc3RhdGljIGlubGluZSBib29sIGk5MTVfbW1pb19yZWdfdmFsaWQoaTkxNV9yZWdfdCByZWcp CiAjZGVmaW5lIFZJREVPX0VOSEFOQ0VNRU5UX0NMQVNTCTIKICNkZWZpbmUgQ09QWV9FTkdJTkVf Q0xBU1MJMwogI2RlZmluZSBPVEhFUl9DTEFTUwkJNAorI2RlZmluZSBNQVhfRU5HSU5FX0NMQVNT CTQKKworI2RlZmluZSBNQVhfRU5HSU5FX0lOU1RBTkNFICAgIDEKIAogLyogUENJIGNvbmZpZyBz cGFjZSAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9lbmdpbmVf Y3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2luZV9jcy5jCmluZGV4IGEwZjlk MGViNGJjZS4uZTY1MTI3ZGNlYjM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9lbmdpbmVfY3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9lbmdpbmVf Y3MuYwpAQCAtMjA5LDYgKzIwOSwxNSBAQCBpbnRlbF9lbmdpbmVfc2V0dXAoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2LAogCUdFTV9CVUdfT04oaW5mby0+Y2xhc3MgPj0gQVJSQVlf U0laRShpbnRlbF9lbmdpbmVfY2xhc3NlcykpOwogCWNsYXNzX2luZm8gPSAmaW50ZWxfZW5naW5l X2NsYXNzZXNbaW5mby0+Y2xhc3NdOwogCisJaWYgKEdFTV9XQVJOX09OKGluZm8tPmNsYXNzID4g TUFYX0VOR0lORV9DTEFTUykpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKEdFTV9XQVJOX09O KGluZm8tPmluc3RhbmNlID4gTUFYX0VOR0lORV9JTlNUQU5DRSkpCisJCXJldHVybiAtRUlOVkFM OworCisJaWYgKEdFTV9XQVJOX09OKGRldl9wcml2LT5lbmdpbmVfY2xhc3NbaW5mby0+Y2xhc3Nd W2luZm8tPmluc3RhbmNlXSkpCisJCXJldHVybiAtRUlOVkFMOworCiAJR0VNX0JVR19PTihkZXZf cHJpdi0+ZW5naW5lW2lkXSk7CiAJZW5naW5lID0ga3phbGxvYyhzaXplb2YoKmVuZ2luZSksIEdG UF9LRVJORUwpOwogCWlmICghZW5naW5lKQpAQCAtMjM4LDYgKzI0Nyw3IEBAIGludGVsX2VuZ2lu ZV9zZXR1cChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAKIAlBVE9NSUNfSU5J VF9OT1RJRklFUl9IRUFEKCZlbmdpbmUtPmNvbnRleHRfc3RhdHVzX25vdGlmaWVyKTsKIAorCWRl dl9wcml2LT5lbmdpbmVfY2xhc3NbaW5mby0+Y2xhc3NdW2luZm8tPmluc3RhbmNlXSA9IGVuZ2lu ZTsKIAlkZXZfcHJpdi0+ZW5naW5lW2lkXSA9IGVuZ2luZTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE4 ODMsNiArMTg5MywyOSBAQCB2b2lkIGludGVsX2VuZ2luZV9kdW1wKHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSwgc3RydWN0IGRybV9wcmludGVyICptKQogCWRybV9wcmludGYobSwgIlxu Iik7CiB9CiAKK3N0YXRpYyB1OCB1c2VyX2NsYXNzX21hcFtdID0geworCVtJOTE1X0VOR0lORV9D TEFTU19SRU5ERVJdID0gUkVOREVSX0NMQVNTLAorCVtJOTE1X0VOR0lORV9DTEFTU19DT1BZXSA9 IENPUFlfRU5HSU5FX0NMQVNTLAorCVtJOTE1X0VOR0lORV9DTEFTU19WSURFT10gPSBWSURFT19E RUNPREVfQ0xBU1MsCisJW0k5MTVfRU5HSU5FX0NMQVNTX1ZJREVPX0VOSEFOQ0VdID0gVklERU9f RU5IQU5DRU1FTlRfQ0xBU1MsCit9OworCitzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICoKK2ludGVs X2VuZ2luZV9sb29rdXBfdXNlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwgdTggY2xh c3MsIHU4IGluc3RhbmNlKQoreworCWlmIChjbGFzcyA+PSBBUlJBWV9TSVpFKHVzZXJfY2xhc3Nf bWFwKSkKKwkJcmV0dXJuIE5VTEw7CisKKwljbGFzcyA9IHVzZXJfY2xhc3NfbWFwW2NsYXNzXTsK KworCUdFTV9CVUdfT04oY2xhc3MgPiBNQVhfRU5HSU5FX0NMQVNTKTsKKworCWlmIChpbnN0YW5j ZSA+IE1BWF9FTkdJTkVfSU5TVEFOQ0UpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIGk5MTUt PmVuZ2luZV9jbGFzc1tjbGFzc11baW5zdGFuY2VdOworfQorCiAjaWYgSVNfRU5BQkxFRChDT05G SUdfRFJNX0k5MTVfU0VMRlRFU1QpCiAjaW5jbHVkZSAic2VsZnRlc3RzL21vY2tfZW5naW5lLmMi CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZm ZXIuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaAppbmRleCAyYjBh ZTU0NjhmNDguLmI3MWQ5ZWE1MjI3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfcmluZ2J1ZmZlci5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Jpbmdi dWZmZXIuaApAQCAtNiw2ICs2LDcgQEAKICNpbmNsdWRlICJpOTE1X2dlbV9iYXRjaF9wb29sLmgi CiAjaW5jbHVkZSAiaTkxNV9nZW1fcmVxdWVzdC5oIgogI2luY2x1ZGUgImk5MTVfZ2VtX3RpbWVs aW5lLmgiCisjaW5jbHVkZSAiaTkxNV9wbXUuaCIKICNpbmNsdWRlICJpOTE1X3NlbGZ0ZXN0Lmgi CiAKIHN0cnVjdCBkcm1fcHJpbnRlcjsKQEAgLTM0OCw2ICszNDksMjggQEAgc3RydWN0IGludGVs X2VuZ2luZV9jcyB7CiAJCUk5MTVfU0VMRlRFU1RfREVDTEFSRShib29sIG1vY2sgOiAxKTsKIAl9 IGJyZWFkY3J1bWJzOwogCisJc3RydWN0IHsKKwkJLyoqCisJCSAqIEBlbmFibGU6IEJpdG1hc2sg b2YgZW5hYmxlIHNhbXBsZSBldmVudHMgb24gdGhpcyBlbmdpbmUuCisJCSAqCisJCSAqIEJpdHMg Y29ycmVzcG9uZCB0byBzYW1wbGUgZXZlbnQgdHlwZXMsIGZvciBpbnN0YW5jZQorCQkgKiBJOTE1 X1NBTVBMRV9RVUVVRUQgaXMgYml0IDAgZXRjLgorCQkgKi8KKwkJdTMyIGVuYWJsZTsKKwkJLyoq CisJCSAqIEBlbmFibGVfY291bnQ6IFJlZmVyZW5jZSBjb3VudCBmb3IgdGhlIGVuYWJsZWQgc2Ft cGxlcnMuCisJCSAqCisJCSAqIEluZGV4IG51bWJlciBjb3JyZXNwb25kcyB0byB0aGUgYml0IG51 bWJlciBmcm9tIEBlbmFibGUuCisJCSAqLworCQl1bnNpZ25lZCBpbnQgZW5hYmxlX2NvdW50W0k5 MTVfUE1VX1NBTVBMRV9CSVRTXTsKKwkJLyoqCisJCSAqIEBzYW1wbGU6IENvdW50ZXIgdmFsdWVz IGZvciBzYW1wbGluZyBldmVudHMuCisJCSAqCisJCSAqIE91ciBpbnRlcm5hbCB0aW1lciBzdG9y ZXMgdGhlIGN1cnJlbnQgY291bnRlcnMgaW4gdGhpcyBmaWVsZC4KKwkJICovCisJCXN0cnVjdCBp OTE1X3BtdV9zYW1wbGUgc2FtcGxlW0k5MTVfRU5HSU5FX1NBTVBMRV9NQVhdOworCX0gcG11Owor CiAJLyoKIAkgKiBBIHBvb2wgb2Ygb2JqZWN0cyB0byB1c2UgYXMgc2hhZG93IGNvcGllcyBvZiBj bGllbnQgYmF0Y2ggYnVmZmVycwogCSAqIHdoZW4gdGhlIGNvbW1hbmQgcGFyc2VyIGlzIGVuYWJs ZWQuIFByZXZlbnRzIHRoZSBjbGllbnQgZnJvbQpAQCAtOTM4LDQgKzk2MSw3IEBAIGJvb2wgaW50 ZWxfZW5naW5lX2Nhbl9zdG9yZV9kd29yZChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUp OwogCiB2b2lkIGludGVsX2VuZ2luZV9kdW1wKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2lu ZSwgc3RydWN0IGRybV9wcmludGVyICpwKTsKIAorc3RydWN0IGludGVsX2VuZ2luZV9jcyAqCitp bnRlbF9lbmdpbmVfbG9va3VwX3VzZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsIHU4 IGNsYXNzLCB1OCBpbnN0YW5jZSk7CisKICNlbmRpZiAvKiBfSU5URUxfUklOR0JVRkZFUl9IXyAq LwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5oIGIvaW5jbHVkZS91YXBp L2RybS9pOTE1X2RybS5oCmluZGV4IDZjMDJjZWQ2NjNmOC4uZGZhMTBhZjMzNzY4IDEwMDY0NAot LS0gYS9pbmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmgKKysrIGIvaW5jbHVkZS91YXBpL2RybS9p OTE1X2RybS5oCkBAIC0xMDIsNiArMTAyLDQ1IEBAIGVudW0gZHJtX2k5MTVfZ2VtX2VuZ2luZV9j bGFzcyB7CiAJSTkxNV9FTkdJTkVfQ0xBU1NfSU5WQUxJRAk9IC0xCiB9OwogCisvKioKKyAqIERP QzogcGVyZl9ldmVudHMgZXhwb3NlZCBieSBpOTE1IHRocm91Z2ggL3N5cy9idXMvZXZlbnRfc291 cmNlcy9kcml2ZXJzL2k5MTUKKyAqCisgKi8KKworZW51bSBkcm1faTkxNV9wbXVfZW5naW5lX3Nh bXBsZSB7CisJSTkxNV9TQU1QTEVfQlVTWSA9IDAsCisJSTkxNV9TQU1QTEVfV0FJVCA9IDEsCisJ STkxNV9TQU1QTEVfU0VNQSA9IDIsCisJSTkxNV9FTkdJTkVfU0FNUExFX01BWCAvKiBub24tQUJJ ICovCit9OworCisjZGVmaW5lIEk5MTVfUE1VX1NBTVBMRV9CSVRTICg0KQorI2RlZmluZSBJOTE1 X1BNVV9TQU1QTEVfTUFTSyAoMHhmKQorI2RlZmluZSBJOTE1X1BNVV9TQU1QTEVfSU5TVEFOQ0Vf QklUUyAoOCkKKyNkZWZpbmUgSTkxNV9QTVVfQ0xBU1NfU0hJRlQgXAorCShJOTE1X1BNVV9TQU1Q TEVfQklUUyArIEk5MTVfUE1VX1NBTVBMRV9JTlNUQU5DRV9CSVRTKQorCisjZGVmaW5lIF9fSTkx NV9QTVVfRU5HSU5FKGNsYXNzLCBpbnN0YW5jZSwgc2FtcGxlKSBcCisJKChjbGFzcykgPDwgSTkx NV9QTVVfQ0xBU1NfU0hJRlQgfCBcCisJKGluc3RhbmNlKSA8PCBJOTE1X1BNVV9TQU1QTEVfQklU UyB8IFwKKwkoc2FtcGxlKSkKKworI2RlZmluZSBJOTE1X1BNVV9FTkdJTkVfQlVTWShjbGFzcywg aW5zdGFuY2UpIFwKKwlfX0k5MTVfUE1VX0VOR0lORShjbGFzcywgaW5zdGFuY2UsIEk5MTVfU0FN UExFX0JVU1kpCisKKyNkZWZpbmUgSTkxNV9QTVVfRU5HSU5FX1dBSVQoY2xhc3MsIGluc3RhbmNl KSBcCisJX19JOTE1X1BNVV9FTkdJTkUoY2xhc3MsIGluc3RhbmNlLCBJOTE1X1NBTVBMRV9XQUlU KQorCisjZGVmaW5lIEk5MTVfUE1VX0VOR0lORV9TRU1BKGNsYXNzLCBpbnN0YW5jZSkgXAorCV9f STkxNV9QTVVfRU5HSU5FKGNsYXNzLCBpbnN0YW5jZSwgSTkxNV9TQU1QTEVfU0VNQSkKKworI2Rl ZmluZSBfX0k5MTVfUE1VX09USEVSKHgpIChfX0k5MTVfUE1VX0VOR0lORSgweGZmLCAweGZmLCAw eGYpICsgMSArICh4KSkKKworI2RlZmluZSBJOTE1X1BNVV9BQ1RVQUxfRlJFUVVFTkNZCV9fSTkx NV9QTVVfT1RIRVIoMCkKKyNkZWZpbmUgSTkxNV9QTVVfUkVRVUVTVEVEX0ZSRVFVRU5DWQlfX0k5 MTVfUE1VX09USEVSKDEpCisKKyNkZWZpbmUgSTkxNV9QTVVfTEFTVCBJOTE1X1BNVV9SRVFVRVNU RURfRlJFUVVFTkNZCisKIC8qIEVhY2ggcmVnaW9uIGlzIGEgbWluaW11bSBvZiAxNmssIGFuZCB0 aGVyZSBhcmUgYXQgbW9zdCAyNTUgb2YgdGhlbS4KICAqLwogI2RlZmluZSBJOTE1X05SX1RFWF9S RUdJT05TIDI1NQkvKiB0YWJsZSBzaXplIDJrIC0gbWF4aW11bSBkdWUgdG8gdXNlCi0tIAoyLjE0 LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVs LWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=