From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lionel Landwerlin Subject: [PATCH v7 12/15] drm/i915/perf: Add OA unit support for Gen 8+ Date: Tue, 25 Apr 2017 10:30:07 -0700 Message-ID: <20170425173007.20147-1-lionel.g.landwerlin@intel.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id 7EBA289EAC for ; Tue, 25 Apr 2017 17:30:10 +0000 (UTC) In-Reply-To: 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 RnJvbTogUm9iZXJ0IEJyYWdnIDxyb2JlcnRAc2l4YnluaW5lLm9yZz4KCkVuYWJsZXMgYWNjZXNz IHRvIE9BIHVuaXQgbWV0cmljcyBmb3IgQkRXLCBDSFYsIFNLTCBhbmQgQlhUIHdoaWNoIGFsbApz aGFyZSAobW9yZS1vci1sZXNzKSB0aGUgc2FtZSBPQSB1bml0IGRlc2lnbi4KCk9mIHBhcnRpY3Vs YXIgbm90ZSBpbiBjb21wYXJpc29uIHRvIEhhc3dlbGw6IHNvbWUgT0EgdW5pdCBIVyBjb25maWcK c3RhdGUgaGFzIGJlY29tZSBwZXItY29udGV4dCBzdGF0ZSBhbmQgYXMgYSBjb25zZXF1ZW5jZSBp dCBpcyBzb21ld2hhdAptb3JlIGNvbXBsaWNhdGVkIHRvIG1hbmFnZSBzeW5jaHJvbm91cyBzdGF0 ZSBjaGFuZ2VzIGZyb20gdGhlIGNwdSB3aGlsZQp0aGVyZSdzIG5vIGd1YXJhbnRlZSBvZiB3aGF0 IGNvbnRleHQgKGlmIGFueSkgaXMgY3VycmVudGx5IGFjdGl2ZWx5CnJ1bm5pbmcgb24gdGhlIGdw dS4KClRoZSBwZXJpb2RpYyBzYW1wbGluZyBmcmVxdWVuY3kgd2hpY2ggY2FuIGJlIHBhcnRpY3Vs YXJseSB1c2VmdWwgZm9yCnN5c3RlbS13aWRlIGFuYWx5c2lzIChhcyBvcHBvc2VkIHRvIGNvbW1h bmQgc3RyZWFtIHN5bmNocm9uaXNlZApNSV9SRVBPUlRfUEVSRl9DT1VOVCBjb21tYW5kcykgaXMg cGVyaGFwcyB0aGUgbW9zdCBzdXJwcmlzaW5nIHN0YXRlIHRvCmhhdmUgYmVjb21lIHBlci1jb250 ZXh0IHNhdmUgYW5kIHJlc3RvcmVkICh3aGlsZSB0aGUgT0FCVUZGRVIKZGVzdGluYXRpb24gaXMg c3RpbGwgYSBzaGFyZWQsIHN5c3RlbS13aWRlIHJlc291cmNlKS4KClRoaXMgc3VwcG9ydCBmb3Ig Z2VuOCsgdGFrZXMgY2FyZSB0byBjb25zaWRlciBhIG51bWJlciBvZiB0aW1pbmcKY2hhbGxlbmdl cyBpbnZvbHZlZCBpbiBzeW5jaHJvbm91c2x5IHVwZGF0aW5nIHBlci1jb250ZXh0IHN0YXRlCnBy aW1hcmlseSBieSBwcm9ncmFtbWluZyBhbGwgY29uZmlnIHN0YXRlIGZyb20gdGhlIGNwdSBhbmQg dXBkYXRpbmcgYWxsCmN1cnJlbnQgYW5kIHNhdmVkIGNvbnRleHRzIHN5bmNocm9ub3VzbHkgd2hp bGUgdGhlIE9BIHVuaXQgaXMgc3RpbGwKZGlzYWJsZWQuCgpUaGUgZHJpdmVyIGludGVudGlvbmFs bHkgYXZvaWRzIGRlcGVuZGluZyBvbiBjb21tYW5kIHN0cmVhbWVyCnByb2dyYW1taW5nIHRvIHVw ZGF0ZSBPQSBzdGF0ZSBjb25zaWRlcmluZyB0aGUgbGFjayBvZiBzeW5jaHJvbml6YXRpb24KYmV0 d2VlbiB0aGUgYXV0b21hdGljIGxvYWRpbmcgb2YgT0FDVFhDT05UUk9MIHN0YXRlICh0aGF0IGlu Y2x1ZGVzIHRoZQpwZXJpb2RpYyBzYW1wbGluZyBzdGF0ZSBhbmQgZW5hYmxlIHN0YXRlKSBvbiBj b250ZXh0IHJlc3RvcmUgYW5kIHRoZQpwYXJzaW5nIG9mIGFueSBnZW5lcmFsIHB1cnBvc2UgQkIg dGhlIGRyaXZlciBjYW4gY29udHJvbC4gSS5lLiB0aGlzCmltcGxlbWVudGF0aW9uIGlzIGNhcmVm dWwgdG8gYXZvaWQgdGhlIHBvc3NpYmlsaXR5IG9mIGEgY29udGV4dCByZXN0b3JlCnRlbXBvcmFy aWx5IGVuYWJsaW5nIGFueSBvdXQtb2YtZGF0ZSBwZXJpb2RpYyBzYW1wbGluZyBzdGF0ZS4gSW4K YWRkaXRpb24gdG8gdGhlIHJpc2sgb2YgdHJhbnNpZW50bHktb3V0LW9mLWRhdGUgc3RhdGUgYmVp bmcgbG9hZGVkCmF1dG9tYXRpY2FsbHk7IHRoZXJlIGFyZSBhbHNvIGludGVybmFsIEhXIGxhdGVu Y2llcyBpbnZvbHZlZCBpbiB0aGUKbG9hZGluZyBvZiBNVVggY29uZmlndXJhdGlvbnMgd2hpY2gg d291bGQgYmUgZGlmZmljdWx0IHRvIGFjY291bnQgZm9yCmZyb20gdGhlIGNvbW1hbmQgc3RyZWFt ZXIgKGFuZCB3ZSBvbmx5IHdhbnQgdG8gZW5hYmxlIHRoZSB1bml0IHdoZW4gb25jZQp0aGUgTVVY IGNvbmZpZ3VyYXRpb24gaXMgY29tcGxldGUpLgoKU2luY2UgdGhlIEdlbjgrIE9BIHVuaXQgZGVz aWduIG5vIGxvbmdlciBzdXBwb3J0cyBjbG9jayBnYXRpbmcgdGhlIHVuaXQKb2ZmIGZvciBhIHNp bmdsZSBnaXZlbiBjb250ZXh0ICh3aGljaCBlZmZlY3RpdmVseSBzdG9wcGVkIGFueSBwcm9ncmVz cwpvZiBjb3VudGVycyB3aGlsZSBhbnkgb3RoZXIgY29udGV4dCB3YXMgcnVubmluZykgYW5kIGlu c3RlYWQgc3VwcG9ydHMKdGFnZ2luZyBPQSByZXBvcnRzIHdpdGggYSBjb250ZXh0IElEIGZvciBm aWx0ZXJpbmcgb24gdGhlIENQVSwgaXQgbWVhbnMKd2UgY2FuIG5vIGxvbmdlciBoaWRlIHRoZSBz eXN0ZW0td2lkZSBwcm9ncmVzcyBvZiBjb3VudGVycyBmcm9tIGEKbm9uLXByaXZpbGVnZWQgYXBw bGljYXRpb24gb25seSBpbnRlcmVzdGVkIGluIG1ldHJpY3MgZm9yIGl0cyBvd24KY29udGV4dC4g QWx0aG91Z2ggd2UgY291bGQgdGhlb3JldGljYWxseSB0cnkgYW5kIHN1YnRyYWN0IHRoZSBwcm9n cmVzcwpvZiBvdGhlciBjb250ZXh0cyBiZWZvcmUgZm9yd2FyZGluZyByZXBvcnRzIHZpYSByZWFk KCkgd2UgYXJlbid0IGluIGEKcG9zaXRpb24gdG8gZmlsdGVyIHJlcG9ydHMgY2FwdHVyZWQgdmlh IE1JX1JFUE9SVF9QRVJGX0NPVU5UIGNvbW1hbmRzLgpBcyBhIHJlc3VsdCwgZm9yIEdlbjgrLCB3 ZSBhbHdheXMgcmVxdWlyZSB0aGUKZGV2Lmk5MTUucGVyZl9zdHJlYW1fcGFyYW5vaWQgdG8gYmUg dW5zZXQgZm9yIGFueSBhY2Nlc3MgdG8gT0EgbWV0cmljcwppZiBub3Qgcm9vdC4KCnY1OiBEcmFp biBzdWJtaXR0ZWQgcmVxdWVzdHMgd2hlbiBlbmFibGluZyBtZXRyaWMgc2V0IHRvIGVuc3VyZSBu bwogICAgbGl0ZS1yZXN0b3JlIGVyYXNlcyB0aGUgY29udGV4dCBpbWFnZSB3ZSBqdXN0IHVwZGF0 ZWQgKExpb25lbCkKCnY2OiBJbiBhZGRpdGlvbiB0byBkcmFpbiwgc3dpdGNoIHRvIGtlcm5lbCBj b250ZXh0ICYgdXBkYXRlIGFsbAogICAgY29udGV4dCBpbiBwbGFjZSAoQ2hyaXMpCgp2NzogQWRk IG1pc3NpbmcgbXV0ZXhfdW5sb2NrKCkgaWYgc3dpdGNoaW5nIHRvIGtlcm5lbCBjb250ZXh0IGZh aWxzCiAgICAoTWF0dGhldykKClNpZ25lZC1vZmYtYnk6IFJvYmVydCBCcmFnZyA8cm9iZXJ0QHNp eGJ5bmluZS5vcmc+ClNpZ25lZC1vZmYtYnk6IExpb25lbCBMYW5kd2VybGluIDxsaW9uZWwuZy5s YW5kd2VybGluQGludGVsLmNvbT4KUmV2aWV3ZWQtYnk6IE1hdHRoZXcgQXVsZCA8bWF0dGhldy5h dWxkQGludGVsLmNvbT4gXG8vCi0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCAg fCAgNDUgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGVyZi5jIHwgOTU5ICsrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9yZWcuaCAgfCAgMjIgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMgfCAgIDIg KwogaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5oICAgICAgfCAgMTkgKy0KIDUgZmlsZXMgY2hh bmdlZCwgOTU0IGluc2VydGlvbnMoKyksIDkzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2Rydi5oCmluZGV4IGZmYTFmYzVlZGRmZC4uNjc2YjEyMjcwNjdjIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZHJ2LmgKQEAgLTIwNjQsOSArMjA2NCwxNyBAQCBzdHJ1Y3QgaTkxNV9vYV9vcHMgewogCXZv aWQgKCppbml0X29hX2J1ZmZlcikoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsK CiAJLyoqCi0JICogQGVuYWJsZV9tZXRyaWNfc2V0OiBBcHBsaWVzIGFueSBNVVggY29uZmlndXJh dGlvbiB0byBzZXQgdXAgdGhlCi0JICogQm9vbGVhbiBhbmQgQ3VzdG9tIChCL0MpIGNvdW50ZXJz IHRoYXQgYXJlIHBhcnQgb2YgdGhlIGNvdW50ZXIKLQkgKiByZXBvcnRzIGJlaW5nIHNhbXBsZWQu IE1heSBhcHBseSBzeXN0ZW0gY29uc3RyYWludHMgc3VjaCBhcworCSAqIEBzZWxlY3RfbWV0cmlj X3NldDogVGhlIGF1dG8gZ2VuZXJhdGVkIGNvZGUgdGhhdCBjaGVja3Mgd2hldGhlciBhCisJICog cmVxdWVzdGVkIE9BIGNvbmZpZyBpcyBhcHBsaWNhYmxlIHRvIHRoZSBzeXN0ZW0gYW5kIGlmIHNv IHNldHMgdXAKKwkgKiB0aGUgbXV4LCBvYSBhbmQgZmxleCBldSByZWdpc3RlciBjb25maWcgcG9p bnRlcnMgYWNjb3JkaW5nIHRvIHRoZQorCSAqIGN1cnJlbnQgZGV2X3ByaXYtPnBlcmYub2EubWV0 cmljc19zZXQuCisJICovCisJaW50ICgqc2VsZWN0X21ldHJpY19zZXQpKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdik7CisKKwkvKioKKwkgKiBAZW5hYmxlX21ldHJpY19zZXQ6IFNl bGVjdHMgYW5kIGFwcGxpZXMgYW55IE1VWCBjb25maWd1cmF0aW9uIHRvIHNldAorCSAqIHVwIHRo ZSBCb29sZWFuIGFuZCBDdXN0b20gKEIvQykgY291bnRlcnMgdGhhdCBhcmUgcGFydCBvZiB0aGUK KwkgKiBjb3VudGVyIHJlcG9ydHMgYmVpbmcgc2FtcGxlZC4gTWF5IGFwcGx5IHN5c3RlbSBjb25z dHJhaW50cyBzdWNoIGFzCiAJICogZGlzYWJsaW5nIEVVIGNsb2NrIGdhdGluZyBhcyByZXF1aXJl ZC4KIAkgKi8KIAlpbnQgKCplbmFibGVfbWV0cmljX3NldCkoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2KTsKQEAgLTIwOTcsMjAgKzIxMDUsMTMgQEAgc3RydWN0IGk5MTVfb2Ffb3Bz IHsKIAkJICAgIHNpemVfdCAqb2Zmc2V0KTsKCiAJLyoqCi0JICogQG9hX2J1ZmZlcl9jaGVjazog Q2hlY2sgZm9yIE9BIGJ1ZmZlciBkYXRhICsgdXBkYXRlIHRhaWwKLQkgKgotCSAqIFRoaXMgaXMg ZWl0aGVyIGNhbGxlZCB2aWEgZm9wcyBvciB0aGUgcG9sbCBjaGVjayBocnRpbWVyIChhdG9taWMK LQkgKiBjdHgpIHdpdGhvdXQgYW55IGxvY2tzIHRha2VuLgorCSAqIEBvYV9od190YWlsX3JlYWQ6 IHJlYWQgdGhlIE9BIHRhaWwgcG9pbnRlciByZWdpc3RlcgogCSAqCi0JICogSXQncyBzYWZlIHRv IHJlYWQgT0EgY29uZmlnIHN0YXRlIGhlcmUgdW5sb2NrZWQsIGFzc3VtaW5nIHRoYXQgdGhpcwot CSAqIGlzIG9ubHkgY2FsbGVkIHdoaWxlIHRoZSBzdHJlYW0gaXMgZW5hYmxlZCwgd2hpbGUgdGhl IGdsb2JhbCBPQQotCSAqIGNvbmZpZ3VyYXRpb24gY2FuJ3QgYmUgbW9kaWZpZWQuCi0JICoKLQkg KiBFZmZpY2llbmN5IGlzIG1vcmUgaW1wb3J0YW50IHRoYW4gYXZvaWRpbmcgc29tZSBmYWxzZSBw b3NpdGl2ZXMKLQkgKiBoZXJlLCB3aGljaCB3aWxsIGJlIGhhbmRsZWQgZ3JhY2VmdWxseSAtIGxp a2VseSByZXN1bHRpbmcgaW4gYW4KLQkgKiAlRUFHQUlOIGVycm9yIGZvciB1c2Vyc3BhY2UuCisJ ICogSW4gcGFydGljdWxhciB0aGlzIGVuYWJsZXMgdXMgdG8gc2hhcmUgYWxsIHRoZSBmaWRkbHkg Y29kZSBmb3IKKwkgKiBoYW5kbGluZyB0aGUgT0EgdW5pdCB0YWlsIHBvaW50ZXIgcmFjZSB0aGF0 IGFmZmVjdHMgbXVsdGlwbGUKKwkgKiBnZW5lcmF0aW9ucy4KIAkgKi8KLQlib29sICgqb2FfYnVm ZmVyX2NoZWNrKShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOworCXUzMiAoKm9h X2h3X3RhaWxfcmVhZCkoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKIH07Cgog c3RydWN0IGludGVsX2NkY2xrX3N0YXRlIHsKQEAgLTI0NzIsNiArMjQ3Myw3IEBAIHN0cnVjdCBk cm1faTkxNV9wcml2YXRlIHsKIAkJCXN0cnVjdCB7CiAJCQkJc3RydWN0IGk5MTVfdm1hICp2bWE7 CiAJCQkJdTggKnZhZGRyOworCQkJCXUzMiBsYXN0X2N0eF9pZDsKIAkJCQlpbnQgZm9ybWF0Owog CQkJCWludCBmb3JtYXRfc2l6ZTsKCkBAIC0yNTQxLDYgKzI1NDMsMTQgQEAgc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgewogCQkJfSBvYV9idWZmZXI7CgogCQkJdTMyIGdlbjdfbGF0Y2hlZF9vYXN0 YXR1czE7CisJCQl1MzIgY3R4X29hY3R4Y3RybF9vZmZzZXQ7CisJCQl1MzIgY3R4X2ZsZXhldTBf b2Zmc2V0OworCisJCQkvKiBUaGUgUlBUX0lEL3JlYXNvbiBmaWVsZCBmb3IgR2VuOCsgaW5jbHVk ZXMgYSBiaXQKKwkJCSAqIHRvIGRldGVybWluZSBpZiB0aGUgQ1RYIElEIGluIHRoZSByZXBvcnQg aXMgdmFsaWQKKwkJCSAqIGJ1dCB0aGUgc3BlY2lmaWMgYml0IGRpZmZlcnMgYmV0d2VlbiBHZW4g OCBhbmQgOQorCQkJICovCisJCQl1MzIgZ2VuOF92YWxpZF9jdHhfYml0OwoKIAkJCXN0cnVjdCBp OTE1X29hX29wcyBvcHM7CiAJCQljb25zdCBzdHJ1Y3QgaTkxNV9vYV9mb3JtYXQgKm9hX2Zvcm1h dHM7CkBAIC0yODUxLDYgKzI4NjEsOCBAQCBpbnRlbF9pbmZvKGNvbnN0IHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdikKICNkZWZpbmUgSVNfS0JMX1VMWChkZXZfcHJpdikJKElOVEVM X0RFVklEKGRldl9wcml2KSA9PSAweDU5MEUgfHwgXAogCQkJCSBJTlRFTF9ERVZJRChkZXZfcHJp dikgPT0gMHg1OTE1IHx8IFwKIAkJCQkgSU5URUxfREVWSUQoZGV2X3ByaXYpID09IDB4NTkxRSkK KyNkZWZpbmUgSVNfU0tMX0dUMihkZXZfcHJpdikJKElTX1NLWUxBS0UoZGV2X3ByaXYpICYmIFwK KwkJCQkgKElOVEVMX0RFVklEKGRldl9wcml2KSAmIDB4MDBGMCkgPT0gMHgwMDEwKQogI2RlZmlu ZSBJU19TS0xfR1QzKGRldl9wcml2KQkoSVNfU0tZTEFLRShkZXZfcHJpdikgJiYgXAogCQkJCSAo SU5URUxfREVWSUQoZGV2X3ByaXYpICYgMHgwMEYwKSA9PSAweDAwMjApCiAjZGVmaW5lIElTX1NL TF9HVDQoZGV2X3ByaXYpCShJU19TS1lMQUtFKGRldl9wcml2KSAmJiBcCkBAIC0zNjE1LDYgKzM2 MjcsOSBAQCBpOTE1X2dlbV9jb250ZXh0X2xvb2t1cF90aW1lbGluZShzdHJ1Y3QgaTkxNV9nZW1f Y29udGV4dCAqY3R4LAoKIGludCBpOTE1X3BlcmZfb3Blbl9pb2N0bChzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LCB2b2lkICpkYXRhLAogCQkJIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSk7Cit2b2lkIGk5 MTVfb2FfaW5pdF9yZWdfc3RhdGUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAorCQkJ ICAgIHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgsCisJCQkgICAgdWludDMyX3QgKnJlZ19z dGF0ZSk7CgogLyogaTkxNV9nZW1fZXZpY3QuYyAqLwogaW50IF9fbXVzdF9jaGVjayBpOTE1X2dl bV9ldmljdF9zb21ldGhpbmcoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BlcmYuYyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfcGVyZi5jCmluZGV4IDMyNzdhNTJjZTk4ZS4uNTQ4YmJhNDFiZmVjIDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BlcmYuYworKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X3BlcmYuYwpAQCAtMTk2LDYgKzE5NiwxMiBAQAoKICNpbmNsdWRlICJpOTE1 X2Rydi5oIgogI2luY2x1ZGUgImk5MTVfb2FfaHN3LmgiCisjaW5jbHVkZSAiaTkxNV9vYV9iZHcu aCIKKyNpbmNsdWRlICJpOTE1X29hX2Nodi5oIgorI2luY2x1ZGUgImk5MTVfb2Ffc2tsZ3QyLmgi CisjaW5jbHVkZSAiaTkxNV9vYV9za2xndDMuaCIKKyNpbmNsdWRlICJpOTE1X29hX3NrbGd0NC5o IgorI2luY2x1ZGUgImk5MTVfb2FfYnh0LmgiCgogLyogSFcgcmVxdWlyZXMgdGhpcyB0byBiZSBh IHBvd2VyIG9mIHR3bywgYmV0d2VlbiAxMjhrIGFuZCAxNk0sIHRob3VnaCBkcml2ZXIKICAqIGlz IGN1cnJlbnRseSBnZW5lcmFsbHkgZGVzaWduZWQgYXNzdW1pbmcgdGhlIGxhcmdlc3QgMTZNIHNp emUgaXMgdXNlZCBzdWNoCkBAIC0yMTUsNyArMjIxLDcgQEAKICAqCiAgKiBBbHRob3VnaCB0aGlz IGNhbiBiZSBvYnNlcnZlZCBleHBsaWNpdGx5IHdoaWxlIGNvcHlpbmcgcmVwb3J0cyB0byB1c2Vy c3BhY2UKICAqIGJ5IGNoZWNraW5nIGZvciBhIHplcm9lZCByZXBvcnQtaWQgZmllbGQgaW4gdGFp bCByZXBvcnRzLCB3ZSB3YW50IHRvIGFjY291bnQKLSAqIGZvciB0aGlzIGVhcmxpZXIsIGFzIHBh cnQgb2YgdGhlIF9vYV9idWZmZXJfY2hlY2sgdG8gYXZvaWQgbG90cyBvZiByZWR1bmRhbnQKKyAq IGZvciB0aGlzIGVhcmxpZXIsIGFzIHBhcnQgb2YgdGhlIG9hX2J1ZmZlcl9jaGVjayB0byBhdm9p ZCBsb3RzIG9mIHJlZHVuZGFudAogICogcmVhZCgpIGF0dGVtcHRzLgogICoKICAqIEluIGVmZmVj dCB3ZSBkZWZpbmUgYSB0YWlsIHBvaW50ZXIgZm9yIHJlYWRpbmcgdGhhdCBsYWdzIHRoZSByZWFs IHRhaWwKQEAgLTIzNyw3ICsyNDMsNyBAQAogICogaW5kaWNhdGVzIHRoYXQgYW4gdXBkYXRlZCB0 YWlsIHBvaW50ZXIgaXMgbmVlZGVkLgogICoKICAqIE1vc3Qgb2YgdGhlIGltcGxlbWVudGF0aW9u IGRldGFpbHMgZm9yIHRoaXMgd29ya2Fyb3VuZCBhcmUgaW4KLSAqIGdlbjdfb2FfYnVmZmVyX2No ZWNrX3VubG9ja2VkKCkgYW5kIGdlbjdfYXBwYW5kX29hX3JlcG9ydHMoKQorICogb2FfYnVmZmVy X2NoZWNrX3VubG9ja2VkKCkgYW5kIF9hcHBlbmRfb2FfcmVwb3J0cygpCiAgKgogICogTm90ZSBm b3IgcG9zdGVyaXR5OiBwcmV2aW91c2x5IHRoZSBkcml2ZXIgdXNlZCB0byBkZWZpbmUgYW4gZWZm ZWN0aXZlIHRhaWwKICAqIHBvaW50ZXIgdGhhdCBsYWdnZWQgdGhlIHJlYWwgcG9pbnRlciBieSBh ICd0YWlsIG1hcmdpbicgbWVhc3VyZWQgaW4gYnl0ZXMKQEAgLTI3Miw2ICsyNzgsMTMgQEAgc3Rh dGljIHUzMiBpOTE1X3BlcmZfc3RyZWFtX3BhcmFub2lkID0gdHJ1ZTsKCiAjZGVmaW5lIElOVkFM SURfQ1RYX0lEIDB4ZmZmZmZmZmYKCisvKiBPbiBHZW44KyBhdXRvbWF0aWNhbGx5IHRyaWdnZXJl ZCBPQSByZXBvcnRzIGluY2x1ZGUgYSAncmVhc29uJyBmaWVsZC4uLiAqLworI2RlZmluZSBPQVJF UE9SVF9SRUFTT05fTUFTSyAgICAgICAgICAgMHgzZgorI2RlZmluZSBPQVJFUE9SVF9SRUFTT05f U0hJRlQgICAgICAgICAgMTkKKyNkZWZpbmUgT0FSRVBPUlRfUkVBU09OX1RJTUVSICAgICAgICAg ICgxPDwwKQorI2RlZmluZSBPQVJFUE9SVF9SRUFTT05fQ1RYX1NXSVRDSCAgICAgKDE8PDMpCisj ZGVmaW5lIE9BUkVQT1JUX1JFQVNPTl9DTEtfUkFUSU8gICAgICAoMTw8NSkKKwoKIC8qIEZvciBz eXNjdGwgcHJvY19kb2ludHZlY19taW5tYXggb2YgaTkxNV9vYV9tYXhfc2FtcGxlX3JhdGUKICAq CkBAIC0zMDMsNiArMzE2LDEzIEBAIHN0YXRpYyBzdHJ1Y3QgaTkxNV9vYV9mb3JtYXQgaHN3X29h X2Zvcm1hdHNbSTkxNV9PQV9GT1JNQVRfTUFYXSA9IHsKIAlbSTkxNV9PQV9GT1JNQVRfQzRfQjhd CSAgICA9IHsgNywgNjQgfSwKIH07Cgorc3RhdGljIHN0cnVjdCBpOTE1X29hX2Zvcm1hdCBnZW44 X3BsdXNfb2FfZm9ybWF0c1tJOTE1X09BX0ZPUk1BVF9NQVhdID0geworCVtJOTE1X09BX0ZPUk1B VF9BMTJdCQkgICAgPSB7IDAsIDY0IH0sCisJW0k5MTVfT0FfRk9STUFUX0ExMl9COF9DOF0JICAg ID0geyAyLCAxMjggfSwKKwlbSTkxNV9PQV9GT1JNQVRfQTMydTQwX0E0dTMyX0I4X0M4XSA9IHsg NSwgMjU2IH0sCisJW0k5MTVfT0FfRk9STUFUX0M0X0I4XQkJICAgID0geyA3LCA2NCB9LAorfTsK KwogI2RlZmluZSBTQU1QTEVfT0FfUkVQT1JUICAgICAgKDE8PDApCgogLyoqCkBAIC0zMzIsOCAr MzUyLDIwIEBAIHN0cnVjdCBwZXJmX29wZW5fcHJvcGVydGllcyB7CiAJaW50IG9hX3BlcmlvZF9l eHBvbmVudDsKIH07Cgorc3RhdGljIHUzMiBnZW44X29hX2h3X3RhaWxfcmVhZChzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJcmV0dXJuIEk5MTVfUkVBRChHRU44X09BVEFJ TFBUUikgJiBHRU44X09BVEFJTFBUUl9NQVNLOworfQorCitzdGF0aWMgdTMyIGdlbjdfb2FfaHdf dGFpbF9yZWFkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3sKKwl1MzIgb2Fz dGF0dXMxID0gSTkxNV9SRUFEKEdFTjdfT0FTVEFUVVMxKTsKKworCXJldHVybiBvYXN0YXR1czEg JiBHRU43X09BU1RBVFVTMV9UQUlMX01BU0s7Cit9CisKIC8qKgotICogZ2VuN19vYV9idWZmZXJf Y2hlY2tfdW5sb2NrZWQgLSBjaGVjayBmb3IgZGF0YSBhbmQgdXBkYXRlIHRhaWwgcHRyIHN0YXRl CisgKiBvYV9idWZmZXJfY2hlY2tfdW5sb2NrZWQgLSBjaGVjayBmb3IgZGF0YSBhbmQgdXBkYXRl IHRhaWwgcHRyIHN0YXRlCiAgKiBAZGV2X3ByaXY6IGk5MTUgZGV2aWNlIGluc3RhbmNlCiAgKgog ICogVGhpcyBpcyBlaXRoZXIgY2FsbGVkIHZpYSBmb3BzIChmb3IgYmxvY2tpbmcgcmVhZHMgaW4g dXNlciBjdHgpIG9yIHRoZSBwb2xsCkBAIC0zNTYsMTIgKzM4OCwxMSBAQCBzdHJ1Y3QgcGVyZl9v cGVuX3Byb3BlcnRpZXMgewogICoKICAqIFJldHVybnM6ICV0cnVlIGlmIHRoZSBPQSBidWZmZXIg Y29udGFpbnMgZGF0YSwgZWxzZSAlZmFsc2UKICAqLwotc3RhdGljIGJvb2wgZ2VuN19vYV9idWZm ZXJfY2hlY2tfdW5sb2NrZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQorc3Rh dGljIGJvb2wgb2FfYnVmZmVyX2NoZWNrX3VubG9ja2VkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdikKIHsKIAlpbnQgcmVwb3J0X3NpemUgPSBkZXZfcHJpdi0+cGVyZi5vYS5vYV9i dWZmZXIuZm9ybWF0X3NpemU7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQg YWdlZF9pZHg7Ci0JdTMyIG9hc3RhdHVzMTsKIAl1MzIgaGVhZCwgaHdfdGFpbCwgYWdlZF90YWls LCBhZ2luZ190YWlsOwogCXU2NCBub3c7CgpAQCAtMzgxLDggKzQxMiw3IEBAIHN0YXRpYyBib29s IGdlbjdfb2FfYnVmZmVyX2NoZWNrX3VubG9ja2VkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdikKIAlhZ2VkX3RhaWwgPSBkZXZfcHJpdi0+cGVyZi5vYS5vYV9idWZmZXIudGFpbHNb YWdlZF9pZHhdLm9mZnNldDsKIAlhZ2luZ190YWlsID0gZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVm ZmVyLnRhaWxzWyFhZ2VkX2lkeF0ub2Zmc2V0OwoKLQlvYXN0YXR1czEgPSBJOTE1X1JFQUQoR0VO N19PQVNUQVRVUzEpOwotCWh3X3RhaWwgPSBvYXN0YXR1czEgJiBHRU43X09BU1RBVFVTMV9UQUlM X01BU0s7CisJaHdfdGFpbCA9IGRldl9wcml2LT5wZXJmLm9hLm9wcy5vYV9od190YWlsX3JlYWQo ZGV2X3ByaXYpOwoKIAkvKiBUaGUgdGFpbCBwb2ludGVyIGluY3JlYXNlcyBpbiA2NCBieXRlIGlu Y3JlbWVudHMsCiAJICogbm90IGluIHJlcG9ydF9zaXplIHN0ZXBzLi4uCkBAIC00MDQsNiArNDM0 LDcgQEAgc3RhdGljIGJvb2wgZ2VuN19vYV9idWZmZXJfY2hlY2tfdW5sb2NrZWQoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCWlmIChhZ2luZ190YWlsICE9IElOVkFMSURfVEFJ TF9QVFIgJiYKIAkgICAgKChub3cgLSBkZXZfcHJpdi0+cGVyZi5vYS5vYV9idWZmZXIuYWdpbmdf dGltZXN0YW1wKSA+CiAJICAgICBPQV9UQUlMX01BUkdJTl9OU0VDKSkgeworCiAJCWFnZWRfaWR4 IF49IDE7CiAJCWRldl9wcml2LT5wZXJmLm9hLm9hX2J1ZmZlci5hZ2VkX3RhaWxfaWR4ID0gYWdl ZF9pZHg7CgpAQCAtNTUzLDYgKzU4NCwyODcgQEAgc3RhdGljIGludCBhcHBlbmRfb2Ffc2FtcGxl KHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0sCiAgKgogICogUmV0dXJuczogMCBvbiBz dWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCiAgKi8KK3N0YXRpYyBpbnQg Z2VuOF9hcHBlbmRfb2FfcmVwb3J0cyhzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAor CQkJCSAgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQkgIHNpemVfdCBjb3VudCwKKwkJCQkgIHNpemVf dCAqb2Zmc2V0KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHN0cmVh bS0+ZGV2X3ByaXY7CisJaW50IHJlcG9ydF9zaXplID0gZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVm ZmVyLmZvcm1hdF9zaXplOworCXU4ICpvYV9idWZfYmFzZSA9IGRldl9wcml2LT5wZXJmLm9hLm9h X2J1ZmZlci52YWRkcjsKKwl1MzIgZ3R0X29mZnNldCA9IGk5MTVfZ2d0dF9vZmZzZXQoZGV2X3By aXYtPnBlcmYub2Eub2FfYnVmZmVyLnZtYSk7CisJdTMyIG1hc2sgPSAoT0FfQlVGRkVSX1NJWkUg LSAxKTsKKwlzaXplX3Qgc3RhcnRfb2Zmc2V0ID0gKm9mZnNldDsKKwl1bnNpZ25lZCBsb25nIGZs YWdzOworCXVuc2lnbmVkIGludCBhZ2VkX3RhaWxfaWR4OworCXUzMiBoZWFkLCB0YWlsOworCXUz MiB0YWtlbjsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChXQVJOX09OKCFzdHJlYW0tPmVuYWJsZWQp KQorCQlyZXR1cm4gLUVJTzsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+cGVyZi5v YS5vYV9idWZmZXIucHRyX2xvY2ssIGZsYWdzKTsKKworCWhlYWQgPSBkZXZfcHJpdi0+cGVyZi5v YS5vYV9idWZmZXIuaGVhZDsKKwlhZ2VkX3RhaWxfaWR4ID0gZGV2X3ByaXYtPnBlcmYub2Eub2Ff YnVmZmVyLmFnZWRfdGFpbF9pZHg7CisJdGFpbCA9IGRldl9wcml2LT5wZXJmLm9hLm9hX2J1ZmZl ci50YWlsc1thZ2VkX3RhaWxfaWR4XS5vZmZzZXQ7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3Jl KCZkZXZfcHJpdi0+cGVyZi5vYS5vYV9idWZmZXIucHRyX2xvY2ssIGZsYWdzKTsKKworCS8qIEFu IGludmFsaWQgdGFpbCBwb2ludGVyIGhlcmUgbWVhbnMgd2UncmUgc3RpbGwgd2FpdGluZyBmb3Ig dGhlIHBvbGwKKwkgKiBocnRpbWVyIGNhbGxiYWNrIHRvIGdpdmUgdXMgYSBwb2ludGVyCisJICov CisJaWYgKHRhaWwgPT0gSU5WQUxJRF9UQUlMX1BUUikKKwkJcmV0dXJuIC1FQUdBSU47CisKKwkv KiBOQjogb2FfYnVmZmVyLmhlYWQvdGFpbCBpbmNsdWRlIHRoZSBndHRfb2Zmc2V0IHdoaWNoIHdl IGRvbid0IHdhbnQKKwkgKiB3aGlsZSBpbmRleGluZyByZWxhdGl2ZSB0byBvYV9idWZfYmFzZS4K KwkgKi8KKwloZWFkIC09IGd0dF9vZmZzZXQ7CisJdGFpbCAtPSBndHRfb2Zmc2V0OworCisJLyog QW4gb3V0IG9mIGJvdW5kcyBvciBtaXNhbGlnbmVkIGhlYWQgb3IgdGFpbCBwb2ludGVyIGltcGxp ZXMgYSBkcml2ZXIKKwkgKiBidWcgc2luY2Ugd2UgdmFsaWRhdGUgKyBhbGlnbiB0aGUgdGFpbCBw b2ludGVycyB3ZSByZWFkIGZyb20gdGhlCisJICogaGFyZHdhcmUgYW5kIHdlIGFyZSBpbiBmdWxs IGNvbnRyb2wgb2YgdGhlIGhlYWQgcG9pbnRlciB3aGljaCBzaG91bGQKKwkgKiBvbmx5IGJlIGlu Y3JlbWVudGVkIGJ5IG11bHRpcGxlcyBvZiB0aGUgcmVwb3J0IHNpemUgKG5vdGFibHkgYWxzbwor CSAqIGFsbCBhIHBvd2VyIG9mIHR3bykuCisJICovCisJaWYgKFdBUk5fT05DRShoZWFkID4gT0Ff QlVGRkVSX1NJWkUgfHwgaGVhZCAlIHJlcG9ydF9zaXplIHx8CisJCSAgICAgIHRhaWwgPiBPQV9C VUZGRVJfU0laRSB8fCB0YWlsICUgcmVwb3J0X3NpemUsCisJCSAgICAgICJJbmNvbnNpc3RlbnQg T0EgYnVmZmVyIHBvaW50ZXJzOiBoZWFkID0gJXUsIHRhaWwgPSAldVxuIiwKKwkJICAgICAgaGVh ZCwgdGFpbCkpCisJCXJldHVybiAtRUlPOworCisKKwlmb3IgKC8qIG5vbmUgKi87CisJICAgICAo dGFrZW4gPSBPQV9UQUtFTih0YWlsLCBoZWFkKSk7CisJICAgICBoZWFkID0gKGhlYWQgKyByZXBv cnRfc2l6ZSkgJiBtYXNrKSB7CisJCXU4ICpyZXBvcnQgPSBvYV9idWZfYmFzZSArIGhlYWQ7CisJ CXUzMiAqcmVwb3J0MzIgPSAodm9pZCAqKXJlcG9ydDsKKwkJdTMyIGN0eF9pZDsKKwkJdTMyIHJl YXNvbjsKKworCQkvKiBBbGwgdGhlIHJlcG9ydCBzaXplcyBmYWN0b3IgbmVhdGx5IGludG8gdGhl IGJ1ZmZlcgorCQkgKiBzaXplIHNvIHdlIG5ldmVyIGV4cGVjdCB0byBzZWUgYSByZXBvcnQgc3Bs aXQKKwkJICogYmV0d2VlbiB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgdGhlIGJ1ZmZlci4KKwkJ ICoKKwkJICogR2l2ZW4gdGhlIGluaXRpYWwgYWxpZ25tZW50IGNoZWNrIGEgbWlzYWxpZ25tZW50 CisJCSAqIGhlcmUgd291bGQgaW1wbHkgYSBkcml2ZXIgYnVnIHRoYXQgd291bGQgcmVzdWx0CisJ CSAqIGluIGFuIG92ZXJydW4uCisJCSAqLworCQlpZiAoV0FSTl9PTigoT0FfQlVGRkVSX1NJWkUg LSBoZWFkKSA8IHJlcG9ydF9zaXplKSkgeworCQkJRFJNX0VSUk9SKCJTcHVyaW91cyBPQSBoZWFk IHB0cjogbm9uLWludGVncmFsIHJlcG9ydCBvZmZzZXRcbiIpOworCQkJYnJlYWs7CisJCX0KKwor CQkvKiBUaGUgcmVhc29uIGZpZWxkIGluY2x1ZGVzIGZsYWdzIGlkZW50aWZ5aW5nIHdoYXQKKwkJ ICogdHJpZ2dlcmVkIHRoaXMgc3BlY2lmaWMgcmVwb3J0IChtb3N0bHkgdGltZXIKKwkJICogdHJp Z2dlcmVkIG9yIGUuZy4gZHVlIHRvIGEgY29udGV4dCBzd2l0Y2gpLgorCQkgKgorCQkgKiBUaGlz IGZpZWxkIGlzIG5ldmVyIGV4cGVjdGVkIHRvIGJlIHplcm8gc28gd2UgY2FuCisJCSAqIGNoZWNr IHRoYXQgdGhlIHJlcG9ydCBpc24ndCBpbnZhbGlkIGJlZm9yZSBjb3B5aW5nCisJCSAqIGl0IHRv IHVzZXJzcGFjZS4uLgorCQkgKi8KKwkJcmVhc29uID0gKChyZXBvcnQzMlswXSA+PiBPQVJFUE9S VF9SRUFTT05fU0hJRlQpICYKKwkJCSAgT0FSRVBPUlRfUkVBU09OX01BU0spOworCQlpZiAocmVh c29uID09IDApIHsKKwkJCWlmIChfX3JhdGVsaW1pdCgmZGV2X3ByaXYtPnBlcmYub2Euc3B1cmlv dXNfcmVwb3J0X3JzKSkKKwkJCQlEUk1fTk9URSgiU2tpcHBpbmcgc3B1cmlvdXMsIGludmFsaWQg T0EgcmVwb3J0XG4iKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogWFhYOiBKdXN0IGtlZXAg dGhlIGxvd2VyIDIxIGJpdHMgZm9yIG5vdyBzaW5jZSBJJ20gbm90CisJCSAqIGVudGlyZWx5IHN1 cmUgaWYgdGhlIEhXIHRvdWNoZXMgYW55IG9mIHRoZSBoaWdoZXIgYml0cyBpbgorCQkgKiB0aGlz IGZpZWxkCisJCSAqLworCQljdHhfaWQgPSByZXBvcnQzMlsyXSAmIDB4MWZmZmZmOworCisJCS8q IFNxdWFzaCB3aGF0ZXZlciBpcyBpbiB0aGUgQ1RYX0lEIGZpZWxkIGlmIGl0J3MgbWFya2VkIGFz CisJCSAqIGludmFsaWQgdG8gYmUgc3VyZSB3ZSBhdm9pZCBmYWxzZS1wb3NpdGl2ZSwgc2luZ2xl LWNvbnRleHQKKwkJICogZmlsdGVyaW5nIGJlbG93Li4uCisJCSAqCisJCSAqIE5vdGU6IHRoYXQg d2UgZG9uJ3QgY2xlYXIgdGhlIHZhbGlkX2N0eF9iaXQgc28gdXNlcnNwYWNlIGNhbgorCQkgKiB1 bmRlcnN0YW5kIHRoYXQgdGhlIElEIGhhcyBiZWVuIHNxdWFzaGVkIGJ5IHRoZSBrZXJuZWwuCisJ CSAqLworCQlpZiAoIShyZXBvcnQzMlswXSAmIGRldl9wcml2LT5wZXJmLm9hLmdlbjhfdmFsaWRf Y3R4X2JpdCkpCisJCQljdHhfaWQgPSByZXBvcnQzMlsyXSA9IElOVkFMSURfQ1RYX0lEOworCisJ CS8qIE5COiBGb3IgR2VuIDggdGhlIE9BIHVuaXQgbm8gbG9uZ2VyIHN1cHBvcnRzIGNsb2NrIGdh dGluZworCQkgKiBvZmYgZm9yIGEgc3BlY2lmaWMgY29udGV4dCBhbmQgdGhlIGtlcm5lbCBjYW4n dCBzZWN1cmVseQorCQkgKiBzdG9wIHRoZSBjb3VudGVycyBmcm9tIHVwZGF0aW5nIGFzIHN5c3Rl bS13aWRlIC8gZ2xvYmFsCisJCSAqIHZhbHVlcy4KKwkJICoKKwkJICogQXV0b21hdGljIHJlcG9y dHMgbm93IGluY2x1ZGUgYSBjb250ZXh0IElEIHNvIHJlcG9ydHMgY2FuIGJlCisJCSAqIGZpbHRl cmVkIG9uIHRoZSBjcHUgYnV0IGl0J3Mgbm90IHdvcnRoIHRyeWluZyB0bworCQkgKiBhdXRvbWF0 aWNhbGx5IHN1YnRyYWN0L2hpZGUgY291bnRlciBwcm9ncmVzcyBmb3Igb3RoZXIKKwkJICogY29u dGV4dHMgd2hpbGUgZmlsdGVyaW5nIHNpbmNlIHdlIGNhbid0IHN0b3AgdXNlcnNwYWNlCisJCSAq IGlzc3VpbmcgTUlfUkVQT1JUX1BFUkZfQ09VTlQgY29tbWFuZHMgd2hpY2ggd291bGQgc3RpbGwK KwkJICogcHJvdmlkZSBhIHNpZGUtYmFuZCB2aWV3IG9mIHRoZSByZWFsIHZhbHVlcy4KKwkJICoK KwkJICogVG8gYWxsb3cgdXNlcnNwYWNlIChzdWNoIGFzIE1lc2EvR0xfSU5URUxfcGVyZm9ybWFu Y2VfcXVlcnkpCisJCSAqIHRvIG5vcm1hbGl6ZSBjb3VudGVycyBmb3IgYSBzaW5nbGUgZmlsdGVy ZWQgY29udGV4dCB0aGVuIGl0CisJCSAqIG5lZWRzIGJlIGZvcndhcmRlZCBib29rZW5kIGNvbnRl eHQtc3dpdGNoIHJlcG9ydHMgc28gdGhhdCBpdAorCQkgKiBjYW4gdHJhY2sgc3dpdGNoZXMgaW4g YmV0d2VlbiBNSV9SRVBPUlRfUEVSRl9DT1VOVCBjb21tYW5kcworCQkgKiBhbmQgY2FuIGl0c2Vs ZiBzdWJ0cmFjdC9pZ25vcmUgdGhlIHByb2dyZXNzIG9mIGNvdW50ZXJzCisJCSAqIGFzc29jaWF0 ZWQgd2l0aCBvdGhlciBjb250ZXh0cy4gTm90ZSB0aGF0IHRoZSBoYXJkd2FyZQorCQkgKiBhdXRv bWF0aWNhbGx5IHRyaWdnZXJzIHJlcG9ydHMgd2hlbiBzd2l0Y2hpbmcgdG8gYSBuZXcKKwkJICog Y29udGV4dCB3aGljaCBhcmUgdGFnZ2VkIHdpdGggdGhlIElEIG9mIHRoZSBuZXdseSBhY3RpdmUK KwkJICogY29udGV4dC4gVG8gYXZvaWQgdGhlIGNvbXBsZXhpdHkgKGFuZCBsaWtlbHkgZnJhZ2ls aXR5KSBvZgorCQkgKiByZWFkaW5nIGFoZWFkIHdoaWxlIHBhcnNpbmcgcmVwb3J0cyB0byB0cnkg YW5kIG1pbmltaXplCisJCSAqIGZvcndhcmRpbmcgcmVkdW5kYW50IGNvbnRleHQgc3dpdGNoIHJl cG9ydHMgKGkuZS4gYmV0d2VlbgorCQkgKiBvdGhlciwgdW5yZWxhdGVkIGNvbnRleHRzKSB3ZSBz aW1wbHkgZWxlY3QgdG8gZm9yd2FyZCB0aGVtCisJCSAqIGFsbC4KKwkJICoKKwkJICogV2UgZG9u J3QgcmVseSBzb2xlbHkgb24gdGhlIHJlYXNvbiBmaWVsZCB0byBpZGVudGlmeSBjb250ZXh0CisJ CSAqIHN3aXRjaGVzIHNpbmNlIGl0J3Mgbm90LXVuY29tbW9uIGZvciBwZXJpb2RpYyBzYW1wbGVz IHRvCisJCSAqIGlkZW50aWZ5IGEgc3dpdGNoIGJlZm9yZSBhbnkgJ2NvbnRleHQgc3dpdGNoJyBy ZXBvcnQuCisJCSAqLworCQlpZiAoIWRldl9wcml2LT5wZXJmLm9hLmV4Y2x1c2l2ZV9zdHJlYW0t PmN0eCB8fAorCQkgICAgZGV2X3ByaXYtPnBlcmYub2Euc3BlY2lmaWNfY3R4X2lkID09IGN0eF9p ZCB8fAorCQkgICAgKGRldl9wcml2LT5wZXJmLm9hLm9hX2J1ZmZlci5sYXN0X2N0eF9pZCA9PQor CQkgICAgIGRldl9wcml2LT5wZXJmLm9hLnNwZWNpZmljX2N0eF9pZCkgfHwKKwkJICAgIHJlYXNv biAmIE9BUkVQT1JUX1JFQVNPTl9DVFhfU1dJVENIKSB7CisKKwkJCS8qIFdoaWxlIGZpbHRlcmlu ZyBmb3IgYSBzaW5nbGUgY29udGV4dCB3ZSBhdm9pZAorCQkJICogbGVha2luZyB0aGUgSURzIG9m IG90aGVyIGNvbnRleHRzLgorCQkJICovCisJCQlpZiAoZGV2X3ByaXYtPnBlcmYub2EuZXhjbHVz aXZlX3N0cmVhbS0+Y3R4ICYmCisJCQkgICAgZGV2X3ByaXYtPnBlcmYub2Euc3BlY2lmaWNfY3R4 X2lkICE9IGN0eF9pZCkgeworCQkJCXJlcG9ydDMyWzJdID0gSU5WQUxJRF9DVFhfSUQ7CisJCQl9 CisKKwkJCXJldCA9IGFwcGVuZF9vYV9zYW1wbGUoc3RyZWFtLCBidWYsIGNvdW50LCBvZmZzZXQs CisJCQkJCSAgICAgICByZXBvcnQpOworCQkJaWYgKHJldCkKKwkJCQlicmVhazsKKworCQkJZGV2 X3ByaXYtPnBlcmYub2Eub2FfYnVmZmVyLmxhc3RfY3R4X2lkID0gY3R4X2lkOworCQl9CisKKwkJ LyogVGhlIGFib3ZlIHJlYXNvbiBmaWVsZCBzYW5pdHkgY2hlY2sgaXMgYmFzZWQgb24KKwkJICog dGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgT0EgYnVmZmVyIGlzIGluaXRpYWxseQorCQkgKiB6ZXJv ZWQgYW5kIHdlIHJlc2V0IHRoZSBmaWVsZCBhZnRlciBjb3B5aW5nIHNvIHRoZQorCQkgKiBjaGVj ayBpcyBzdGlsbCBtZWFuaW5nZnVsIG9uY2Ugb2xkIHJlcG9ydHMgc3RhcnQKKwkJICogYmVpbmcg b3ZlcndyaXR0ZW4uCisJCSAqLworCQlyZXBvcnQzMlswXSA9IDA7CisJfQorCisJaWYgKHN0YXJ0 X29mZnNldCAhPSAqb2Zmc2V0KSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+cGVy Zi5vYS5vYV9idWZmZXIucHRyX2xvY2ssIGZsYWdzKTsKKworCQkvKiBXZSByZW1vdmVkIHRoZSBn dHRfb2Zmc2V0IGZvciB0aGUgY29weSBsb29wIGFib3ZlLCBpbmRleGluZworCQkgKiByZWxhdGl2 ZSB0byBvYV9idWZfYmFzZSBzbyBwdXQgYmFjayBoZXJlLi4uCisJCSAqLworCQloZWFkICs9IGd0 dF9vZmZzZXQ7CisKKwkJSTkxNV9XUklURShHRU44X09BSEVBRFBUUiwgaGVhZCAmIEdFTjhfT0FI RUFEUFRSX01BU0spOworCQlkZXZfcHJpdi0+cGVyZi5vYS5vYV9idWZmZXIuaGVhZCA9IGhlYWQ7 CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVmZmVy LnB0cl9sb2NrLCBmbGFncyk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBnZW44 X29hX3JlYWQgLSBjb3B5IHN0YXR1cyByZWNvcmRzIHRoZW4gYnVmZmVyZWQgT0EgcmVwb3J0cwor ICogQHN0cmVhbTogQW4gaTkxNS1wZXJmIHN0cmVhbSBvcGVuZWQgZm9yIE9BIG1ldHJpY3MKKyAq IEBidWY6IGRlc3RpbmF0aW9uIGJ1ZmZlciBnaXZlbiBieSB1c2Vyc3BhY2UKKyAqIEBjb3VudDog dGhlIG51bWJlciBvZiBieXRlcyB1c2Vyc3BhY2Ugd2FudHMgdG8gcmVhZAorICogQG9mZnNldDog KGlub3V0KTogdGhlIGN1cnJlbnQgcG9zaXRpb24gZm9yIHdyaXRpbmcgaW50byBAYnVmCisgKgor ICogQ2hlY2tzIE9BIHVuaXQgc3RhdHVzIHJlZ2lzdGVycyBhbmQgaWYgbmVjZXNzYXJ5IGFwcGVu ZHMgY29ycmVzcG9uZGluZworICogc3RhdHVzIHJlY29yZHMgZm9yIHVzZXJzcGFjZSAoc3VjaCBh cyBmb3IgYSBidWZmZXIgZnVsbCBjb25kaXRpb24pIGFuZCB0aGVuCisgKiBpbml0aWF0ZSBhcHBl bmRpbmcgYW55IGJ1ZmZlcmVkIE9BIHJlcG9ydHMuCisgKgorICogVXBkYXRlcyBAb2Zmc2V0IGFj Y29yZGluZyB0byB0aGUgbnVtYmVyIG9mIGJ5dGVzIHN1Y2Nlc3NmdWxseSBjb3BpZWQgaW50bwor ICogdGhlIHVzZXJzcGFjZSBidWZmZXIuCisgKgorICogTkI6IHNvbWUgZGF0YSBtYXkgYmUgc3Vj Y2Vzc2Z1bGx5IGNvcGllZCB0byB0aGUgdXNlcnNwYWNlIGJ1ZmZlcgorICogZXZlbiBpZiBhbiBl cnJvciBpcyByZXR1cm5lZCwgYW5kIHRoaXMgaXMgcmVmbGVjdGVkIGluIHRoZQorICogdXBkYXRl ZCBAb2Zmc2V0LgorICoKKyAqIFJldHVybnM6IHplcm8gb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZl IGVycm9yIGNvZGUKKyAqLworc3RhdGljIGludCBnZW44X29hX3JlYWQoc3RydWN0IGk5MTVfcGVy Zl9zdHJlYW0gKnN0cmVhbSwKKwkJCWNoYXIgX191c2VyICpidWYsCisJCQlzaXplX3QgY291bnQs CisJCQlzaXplX3QgKm9mZnNldCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSBzdHJlYW0tPmRldl9wcml2OworCXUzMiBvYXN0YXR1czsKKwlpbnQgcmV0OworCisJaWYg KFdBUk5fT04oIWRldl9wcml2LT5wZXJmLm9hLm9hX2J1ZmZlci52YWRkcikpCisJCXJldHVybiAt RUlPOworCisJb2FzdGF0dXMgPSBJOTE1X1JFQUQoR0VOOF9PQVNUQVRVUyk7CisKKwkvKiBXZSB0 cmVhdCBPQUJVRkZFUl9PVkVSRkxPVyBhcyBhIHNpZ25pZmljYW50IGVycm9yOgorCSAqCisJICog QWx0aG91Z2ggdGhlb3JldGljYWxseSB3ZSBjb3VsZCBoYW5kbGUgdGhpcyBtb3JlIGdyYWNlZnVs bHkKKwkgKiBzb21ldGltZXMsIHNvbWUgR2VucyBkb24ndCBjb3JyZWN0bHkgc3VwcHJlc3MgY2Vy dGFpbgorCSAqIGF1dG9tYXRpY2FsbHkgdHJpZ2dlcmVkIHJlcG9ydHMgaW4gdGhpcyBjb25kaXRp b24gYW5kIHNvIHdlCisJICogaGF2ZSB0byBhc3N1bWUgdGhhdCBvbGQgcmVwb3J0cyBhcmUgbm93 IGJlaW5nIHRyYW1wbGVkCisJICogb3Zlci4KKwkgKgorCSAqIENvbnNpZGVyaW5nIGhvdyB3ZSBk b24ndCBjdXJyZW50bHkgZ2l2ZSB1c2Vyc3BhY2UgY29udHJvbAorCSAqIG92ZXIgdGhlIE9BIGJ1 ZmZlciBzaXplIGFuZCBhbHdheXMgY29uZmlndXJlIGEgbGFyZ2UgMTZNQgorCSAqIGJ1ZmZlciwg dGhlbiBhIGJ1ZmZlciBvdmVyZmxvdyBkb2VzIGFueXdheSBsaWtlbHkgaW5kaWNhdGUKKwkgKiB0 aGF0IHNvbWV0aGluZyBoYXMgZ29uZSBxdWl0ZSBiYWRseSB3cm9uZy4KKwkgKi8KKwlpZiAob2Fz dGF0dXMgJiBHRU44X09BU1RBVFVTX09BQlVGRkVSX09WRVJGTE9XKSB7CisJCXJldCA9IGFwcGVu ZF9vYV9zdGF0dXMoc3RyZWFtLCBidWYsIGNvdW50LCBvZmZzZXQsCisJCQkJICAgICAgIERSTV9J OTE1X1BFUkZfUkVDT1JEX09BX0JVRkZFUl9MT1NUKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiBy ZXQ7CisKKwkJRFJNX0RFQlVHKCJPQSBidWZmZXIgb3ZlcmZsb3cgKGV4cG9uZW50ID0gJWQpOiBm b3JjZSByZXN0YXJ0XG4iLAorCQkJICBkZXZfcHJpdi0+cGVyZi5vYS5wZXJpb2RfZXhwb25lbnQp OworCisJCWRldl9wcml2LT5wZXJmLm9hLm9wcy5vYV9kaXNhYmxlKGRldl9wcml2KTsKKwkJZGV2 X3ByaXYtPnBlcmYub2Eub3BzLm9hX2VuYWJsZShkZXZfcHJpdik7CisKKwkJLyogTm90ZTogLm9h X2VuYWJsZSgpIGlzIGV4cGVjdGVkIHRvIHJlLWluaXQgdGhlIG9hYnVmZmVyCisJCSAqIGFuZCBy ZXNldCBHRU44X09BU1RBVFVTIGZvciB1cworCQkgKi8KKwkJb2FzdGF0dXMgPSBJOTE1X1JFQUQo R0VOOF9PQVNUQVRVUyk7CisJfQorCisJaWYgKG9hc3RhdHVzICYgR0VOOF9PQVNUQVRVU19SRVBP UlRfTE9TVCkgeworCQlyZXQgPSBhcHBlbmRfb2Ffc3RhdHVzKHN0cmVhbSwgYnVmLCBjb3VudCwg b2Zmc2V0LAorCQkJCSAgICAgICBEUk1fSTkxNV9QRVJGX1JFQ09SRF9PQV9SRVBPUlRfTE9TVCk7 CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCQlJOTE1X1dSSVRFKEdFTjhfT0FTVEFUVVMs CisJCQkgICBvYXN0YXR1cyAmIH5HRU44X09BU1RBVFVTX1JFUE9SVF9MT1NUKTsKKwl9CisKKwly ZXR1cm4gZ2VuOF9hcHBlbmRfb2FfcmVwb3J0cyhzdHJlYW0sIGJ1ZiwgY291bnQsIG9mZnNldCk7 Cit9CisKKy8qKgorICogQ29waWVzIGFsbCBidWZmZXJlZCBPQSByZXBvcnRzIGludG8gdXNlcnNw YWNlIHJlYWQoKSBidWZmZXIuCisgKiBAc3RyZWFtOiBBbiBpOTE1LXBlcmYgc3RyZWFtIG9wZW5l ZCBmb3IgT0EgbWV0cmljcworICogQGJ1ZjogZGVzdGluYXRpb24gYnVmZmVyIGdpdmVuIGJ5IHVz ZXJzcGFjZQorICogQGNvdW50OiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHVzZXJzcGFjZSB3YW50cyB0 byByZWFkCisgKiBAb2Zmc2V0OiAoaW5vdXQpOiB0aGUgY3VycmVudCBwb3NpdGlvbiBmb3Igd3Jp dGluZyBpbnRvIEBidWYKKyAqCisgKiBOb3RhYmx5IGFueSBlcnJvciBjb25kaXRpb24gcmVzdWx0 aW5nIGluIGEgc2hvcnQgcmVhZCAoLSVFTk9TUEMgb3IKKyAqIC0lRUZBVUxUKSB3aWxsIGJlIHJl dHVybmVkIGV2ZW4gdGhvdWdoIG9uZSBvciBtb3JlIHJlY29yZHMgbWF5CisgKiBoYXZlIGJlZW4g c3VjY2Vzc2Z1bGx5IGNvcGllZC4gSW4gdGhpcyBjYXNlIGl0J3MgdXAgdG8gdGhlIGNhbGxlcgor ICogdG8gZGVjaWRlIGlmIHRoZSBlcnJvciBzaG91bGQgYmUgc3F1YXNoZWQgYmVmb3JlIHJldHVy bmluZyB0bworICogdXNlcnNwYWNlLgorICoKKyAqIE5vdGU6IHJlcG9ydHMgYXJlIGNvbnN1bWVk IGZyb20gdGhlIGhlYWQsIGFuZCBhcHBlbmRlZCB0byB0aGUKKyAqIHRhaWwsIHNvIHRoZSB0YWls IGNoYXNlcyB0aGUgaGVhZD8uLi4gSWYgeW91IHRoaW5rIHRoYXQncyBtYWQKKyAqIGFuZCBiYWNr LXRvLWZyb250IHlvdSdyZSBub3QgYWxvbmUsIGJ1dCB0aGlzIGZvbGxvd3MgdGhlCisgKiBHZW4g UFJNIG5hbWluZyBjb252ZW50aW9uLgorICoKKyAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgbmVn YXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICovCiBzdGF0aWMgaW50IGdlbjdfYXBwZW5k X29hX3JlcG9ydHMoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSwKIAkJCQkgIGNoYXIg X191c2VyICpidWYsCiAJCQkJICBzaXplX3QgY291bnQsCkBAIC03MzMsNyArMTA0NSw4IEBAIHN0 YXRpYyBpbnQgZ2VuN19vYV9yZWFkKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0sCiAJ CWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwoKLQkJRFJNX0RFQlVHKCJPQSBidWZmZXIgb3ZlcmZs b3c6IGZvcmNlIHJlc3RhcnRcbiIpOworCQlEUk1fREVCVUcoIk9BIGJ1ZmZlciBvdmVyZmxvdyAo ZXhwb25lbnQgPSAlZCk6IGZvcmNlIHJlc3RhcnRcbiIsCisJCQkgIGRldl9wcml2LT5wZXJmLm9h LnBlcmlvZF9leHBvbmVudCk7CgogCQlkZXZfcHJpdi0+cGVyZi5vYS5vcHMub2FfZGlzYWJsZShk ZXZfcHJpdik7CiAJCWRldl9wcml2LT5wZXJmLm9hLm9wcy5vYV9lbmFibGUoZGV2X3ByaXYpOwpA QCAtNzc2LDcgKzEwODksNyBAQCBzdGF0aWMgaW50IGk5MTVfb2Ffd2FpdF91bmxvY2tlZChzdHJ1 Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtKQogCQlyZXR1cm4gLUVJTzsKCiAJcmV0dXJuIHdh aXRfZXZlbnRfaW50ZXJydXB0aWJsZShkZXZfcHJpdi0+cGVyZi5vYS5wb2xsX3dxLAotCQkJCQlk ZXZfcHJpdi0+cGVyZi5vYS5vcHMub2FfYnVmZmVyX2NoZWNrKGRldl9wcml2KSk7CisJCQkJCW9h X2J1ZmZlcl9jaGVja191bmxvY2tlZChkZXZfcHJpdikpOwogfQoKIC8qKgpAQCAtODMzLDMzICsx MTQ2LDM3IEBAIHN0YXRpYyBpbnQgaTkxNV9vYV9yZWFkKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFt ICpzdHJlYW0sCiBzdGF0aWMgaW50IG9hX2dldF9yZW5kZXJfY3R4X2lkKHN0cnVjdCBpOTE1X3Bl cmZfc3RyZWFtICpzdHJlYW0pCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gc3RyZWFtLT5kZXZfcHJpdjsKLQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUgPSBk ZXZfcHJpdi0+ZW5naW5lW1JDU107Ci0JaW50IHJldDsKCi0JcmV0ID0gaTkxNV9tdXRleF9sb2Nr X2ludGVycnVwdGlibGUoJmRldl9wcml2LT5kcm0pOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7 CisJaWYgKGk5MTUuZW5hYmxlX2V4ZWNsaXN0cykKKwkJZGV2X3ByaXYtPnBlcmYub2Euc3BlY2lm aWNfY3R4X2lkID0gc3RyZWFtLT5jdHgtPmh3X2lkOworCWVsc2UgeworCQlzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUgPSBkZXZfcHJpdi0+ZW5naW5lW1JDU107CisJCWludCByZXQ7Cgot CS8qIEFzIHRoZSBJRCBpcyB0aGUgZ3R0IG9mZnNldCBvZiB0aGUgY29udGV4dCdzIHZtYSB3ZSBw aW4KLQkgKiB0aGUgdm1hIHRvIGVuc3VyZSB0aGUgSUQgcmVtYWlucyBmaXhlZC4KLQkgKgotCSAq IE5COiBpbXBsaWVkIFJDUyBlbmdpbmUuLi4KLQkgKi8KLQlyZXQgPSBlbmdpbmUtPmNvbnRleHRf cGluKGVuZ2luZSwgc3RyZWFtLT5jdHgpOwotCWlmIChyZXQpCi0JCWdvdG8gdW5sb2NrOworCQly ZXQgPSBpOTE1X211dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZGV2X3ByaXYtPmRybSk7CisJCWlm IChyZXQpCisJCQlyZXR1cm4gcmV0OwoKLQkvKiBFeHBsaWNpdGx5IHRyYWNrIHRoZSBJRCAoaW5z dGVhZCBvZiBjYWxsaW5nIGk5MTVfZ2d0dF9vZmZzZXQoKQotCSAqIG9uIHRoZSBmbHkpIGNvbnNp ZGVyaW5nIHRoZSBkaWZmZXJlbmNlIHdpdGggZ2VuOCsgYW5kCi0JICogZXhlY2xpc3RzCi0JICov Ci0JZGV2X3ByaXYtPnBlcmYub2Euc3BlY2lmaWNfY3R4X2lkID0KLQkJaTkxNV9nZ3R0X29mZnNl dChzdHJlYW0tPmN0eC0+ZW5naW5lW2VuZ2luZS0+aWRdLnN0YXRlKTsKKwkJLyogQXMgdGhlIElE IGlzIHRoZSBndHQgb2Zmc2V0IG9mIHRoZSBjb250ZXh0J3Mgdm1hIHdlIHBpbgorCQkgKiB0aGUg dm1hIHRvIGVuc3VyZSB0aGUgSUQgcmVtYWlucyBmaXhlZC4KKwkJICovCisJCXJldCA9IGVuZ2lu ZS0+Y29udGV4dF9waW4oZW5naW5lLCBzdHJlYW0tPmN0eCk7CisJCWlmIChyZXQpIHsKKwkJCW11 dGV4X3VubG9jaygmZGV2X3ByaXYtPmRybS5zdHJ1Y3RfbXV0ZXgpOworCQkJcmV0dXJuIHJldDsK KwkJfQoKLXVubG9jazoKLQltdXRleF91bmxvY2soJmRldl9wcml2LT5kcm0uc3RydWN0X211dGV4 KTsKKwkJLyogRXhwbGljaXRseSB0cmFjayB0aGUgSUQgKGluc3RlYWQgb2YgY2FsbGluZworCQkg KiBpOTE1X2dndHRfb2Zmc2V0KCkgb24gdGhlIGZseSkgY29uc2lkZXJpbmcgdGhlIGRpZmZlcmVu Y2UKKwkJICogd2l0aCBnZW44KyBhbmQgZXhlY2xpc3RzCisJCSAqLworCQlkZXZfcHJpdi0+cGVy Zi5vYS5zcGVjaWZpY19jdHhfaWQgPQorCQkJaTkxNV9nZ3R0X29mZnNldChzdHJlYW0tPmN0eC0+ ZW5naW5lW2VuZ2luZS0+aWRdLnN0YXRlKTsKCi0JcmV0dXJuIHJldDsKKwkJbXV0ZXhfdW5sb2Nr KCZkZXZfcHJpdi0+ZHJtLnN0cnVjdF9tdXRleCk7CisJfQorCisJcmV0dXJuIDA7CiB9CgogLyoq CkBAIC04NzQsMTIgKzExOTEsMTYgQEAgc3RhdGljIHZvaWQgb2FfcHV0X3JlbmRlcl9jdHhfaWQo c3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSkKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSBzdHJlYW0tPmRldl9wcml2OwogCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KmVuZ2luZSA9IGRldl9wcml2LT5lbmdpbmVbUkNTXTsKCi0JbXV0ZXhfbG9jaygmZGV2X3ByaXYt PmRybS5zdHJ1Y3RfbXV0ZXgpOworCWlmIChpOTE1LmVuYWJsZV9leGVjbGlzdHMpIHsKKwkJZGV2 X3ByaXYtPnBlcmYub2Euc3BlY2lmaWNfY3R4X2lkID0gSU5WQUxJRF9DVFhfSUQ7CisJfSBlbHNl IHsKKwkJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmRybS5zdHJ1Y3RfbXV0ZXgpOwoKLQlkZXZfcHJp di0+cGVyZi5vYS5zcGVjaWZpY19jdHhfaWQgPSBJTlZBTElEX0NUWF9JRDsKLQllbmdpbmUtPmNv bnRleHRfdW5waW4oZW5naW5lLCBzdHJlYW0tPmN0eCk7CisJCWRldl9wcml2LT5wZXJmLm9hLnNw ZWNpZmljX2N0eF9pZCA9IElOVkFMSURfQ1RYX0lEOworCQllbmdpbmUtPmNvbnRleHRfdW5waW4o ZW5naW5lLCBzdHJlYW0tPmN0eCk7CgotCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmRybS5zdHJ1 Y3RfbXV0ZXgpOworCQltdXRleF91bmxvY2soJmRldl9wcml2LT5kcm0uc3RydWN0X211dGV4KTsK Kwl9CiB9Cgogc3RhdGljIHZvaWQKQEAgLTk2OSw2ICsxMjkwLDYxIEBAIHN0YXRpYyB2b2lkIGdl bjdfaW5pdF9vYV9idWZmZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCWRl dl9wcml2LT5wZXJmLm9hLnBvbGxpbiA9IGZhbHNlOwogfQoKK3N0YXRpYyB2b2lkIGdlbjhfaW5p dF9vYV9idWZmZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQoreworCXUzMiBn dHRfb2Zmc2V0ID0gaTkxNV9nZ3R0X29mZnNldChkZXZfcHJpdi0+cGVyZi5vYS5vYV9idWZmZXIu dm1hKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9w cml2LT5wZXJmLm9hLm9hX2J1ZmZlci5wdHJfbG9jaywgZmxhZ3MpOworCisJSTkxNV9XUklURShH RU44X09BU1RBVFVTLCAwKTsKKwlJOTE1X1dSSVRFKEdFTjhfT0FIRUFEUFRSLCBndHRfb2Zmc2V0 KTsKKwlkZXZfcHJpdi0+cGVyZi5vYS5vYV9idWZmZXIuaGVhZCA9IGd0dF9vZmZzZXQ7CisKKwlJ OTE1X1dSSVRFKEdFTjhfT0FCVUZGRVJfVURXLCAwKTsKKworCS8qIFBSTSBzYXlzOgorCSAqCisJ ICogICJUaGlzIE1NSU8gbXVzdCBiZSBzZXQgYmVmb3JlIHRoZSBPQVRBSUxQVFIKKwkgKiAgcmVn aXN0ZXIgYW5kIGFmdGVyIHRoZSBPQUhFQURQVFIgcmVnaXN0ZXIuIFRoaXMgaXMKKwkgKiAgdG8g ZW5hYmxlIHByb3BlciBmdW5jdGlvbmFsaXR5IG9mIHRoZSBvdmVyZmxvdworCSAqICBiaXQuIgor CSAqLworCUk5MTVfV1JJVEUoR0VOOF9PQUJVRkZFUiwgZ3R0X29mZnNldCB8CisJCSAgIE9BQlVG RkVSX1NJWkVfMTZNIHwgT0FfTUVNX1NFTEVDVF9HR1RUKTsKKwlJOTE1X1dSSVRFKEdFTjhfT0FU QUlMUFRSLCBndHRfb2Zmc2V0ICYgR0VOOF9PQVRBSUxQVFJfTUFTSyk7CisKKwkvKiBNYXJrIHRo YXQgd2UgbmVlZCB1cGRhdGVkIHRhaWwgcG9pbnRlcnMgdG8gcmVhZCBmcm9tLi4uICovCisJZGV2 X3ByaXYtPnBlcmYub2Eub2FfYnVmZmVyLnRhaWxzWzBdLm9mZnNldCA9IElOVkFMSURfVEFJTF9Q VFI7CisJZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVmZmVyLnRhaWxzWzFdLm9mZnNldCA9IElOVkFM SURfVEFJTF9QVFI7CisKKwkvKiBSZXNldCBzdGF0ZSB1c2VkIHRvIHJlY29nbmlzZSBjb250ZXh0 IHN3aXRjaGVzLCBhZmZlY3Rpbmcgd2hpY2gKKwkgKiByZXBvcnRzIHdlIHdpbGwgZm9yd2FyZCB0 byB1c2Vyc3BhY2Ugd2hpbGUgZmlsdGVyaW5nIGZvciBhIHNpbmdsZQorCSAqIGNvbnRleHQuCisJ ICovCisJZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVmZmVyLmxhc3RfY3R4X2lkID0gSU5WQUxJRF9D VFhfSUQ7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+cGVyZi5vYS5vYV9i dWZmZXIucHRyX2xvY2ssIGZsYWdzKTsKKworCS8qIE5COiBhbHRob3VnaCB0aGUgT0EgYnVmZmVy IHdpbGwgaW5pdGlhbGx5IGJlIGFsbG9jYXRlZAorCSAqIHplcm9lZCB2aWEgc2htZnMgKGFuZCBz byB0aGlzIG1lbXNldCBpcyByZWR1bmRhbnQgd2hlbgorCSAqIGZpcnN0IGFsbG9jYXRpbmcpLCB3 ZSBtYXkgcmUtaW5pdCB0aGUgT0EgYnVmZmVyLCBlaXRoZXIKKwkgKiB3aGVuIHJlLWVuYWJsaW5n IGEgc3RyZWFtIG9yIGluIGVycm9yL3Jlc2V0IHBhdGhzLgorCSAqCisJICogVGhlIHJlYXNvbiB3 ZSBjbGVhciB0aGUgYnVmZmVyIGZvciBlYWNoIHJlLWluaXQgaXMgZm9yIHRoZQorCSAqIHNhbml0 eSBjaGVjayBpbiBnZW44X2FwcGVuZF9vYV9yZXBvcnRzKCkgdGhhdCBsb29rcyBhdCB0aGUKKwkg KiByZWFzb24gZmllbGQgdG8gbWFrZSBzdXJlIGl0J3Mgbm9uLXplcm8gd2hpY2ggcmVsaWVzIG9u CisJICogdGhlIGFzc3VtcHRpb24gdGhhdCBuZXcgcmVwb3J0cyBhcmUgYmVpbmcgd3JpdHRlbiB0 byB6ZXJvZWQKKwkgKiBtZW1vcnkuLi4KKwkgKi8KKwltZW1zZXQoZGV2X3ByaXYtPnBlcmYub2Eu b2FfYnVmZmVyLnZhZGRyLCAwLCBPQV9CVUZGRVJfU0laRSk7CisKKwkvKiBNYXliZSBtYWtlIC0+ cG9sbGluIHBlci1zdHJlYW0gc3RhdGUgaWYgd2Ugc3VwcG9ydCBtdWx0aXBsZQorCSAqIGNvbmN1 cnJlbnQgc3RyZWFtcyBpbiB0aGUgZnV0dXJlLgorCSAqLworCWRldl9wcml2LT5wZXJmLm9hLnBv bGxpbiA9IGZhbHNlOworfQorCiBzdGF0aWMgaW50IGFsbG9jX29hX2J1ZmZlcihzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7CiAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg KmJvOwpAQCAtMTExMyw2ICsxNDg5LDI4MiBAQCBzdGF0aWMgdm9pZCBoc3dfZGlzYWJsZV9tZXRy aWNfc2V0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAkJCQkgICAgICB+R1Rf Tk9BX0VOQUJMRSkpOwogfQoKKy8qCisgKiBGcm9tIEJyb2Fkd2VsbCBQUk0sIDNELU1lZGlhLUdQ R1BVIC0+IFJlZ2lzdGVyIFN0YXRlIENvbnRleHQKKyAqCisgKiBNTUlPIHJlYWRzIG9yIHdyaXRl cyB0byBhbnkgb2YgdGhlIHJlZ2lzdGVycyBsaXN0ZWQgaW4gdGhlCisgKiDigJxSZWdpc3RlciBT dGF0ZSBDb250ZXh0IGltYWdl4oCdIHN1YnNlY3Rpb25zIHRocm91Z2ggSE9TVC9JQQorICogTU1J TyBpbnRlcmZhY2UgZm9yIGRlYnVnIHB1cnBvc2VzIG11c3QgZm9sbG93IHRoZSBzdGVwcyBiZWxv dzoKKyAqCisgKiAtIFNXIHNob3VsZCBzZXQgdGhlIEZvcmNlIFdha2V1cCBiaXQgdG8gcHJldmVu dCBHVCBmcm9tIGVudGVyaW5nIEM2LgorICogLSBXcml0ZSAweDIwNTBbMzE6MF0gPSAweDAwMDEw MDAxIChkaXNhYmxlIHNlcXVlbmNlKS4KKyAqIC0gRGlzYWJsZSBJRExFIG1lc3NhZ2luZyBpbiBD UyAoV3JpdGUgMHgyMDUwWzMxOjBdID0gMHgwMDAxMDAwMSkuCisgKiAtIEJEVzogIFBvbGwvV2Fp dCBmb3IgcmVnaXN0ZXIgYml0cyBvZiAweDIyQUNbNjowXSB0dXJuIHRvIDB4MzAgdmFsdWUuCisg KiAtIFNLTCs6IFBvbGwvV2FpdCBmb3IgcmVnaXN0ZXIgYml0cyBvZiAweDIyQTRbNjowXSB0dXJu IHRvIDB4MzAgdmFsdWUuCisgKiAtIFJlYWQvV3JpdGUgdG8gZGVzaXJlZCBNTUlPIHJlZ2lzdGVy cy4KKyAqIC0gRW5hYmxlIElETEUgbWVzc2FnaW5nIGluIENTIChXcml0ZSAweDIwNTBbMzE6MF0g PSAweDAwMDEwMDAwKS4KKyAqIC0gRm9yY2UgV2FrZXVwIGJpdCBzaG91bGQgYmUgcmVzZXQgdG8g ZW5hYmxlIEM2IGVudHJ5LgorICoKKyAqIFhYWDogZG9uJ3QgbmVzdCBvciBvdmVybGFwIGNhbGxz IHRvIHRoaXMgQVBJLCBpdCBoYXMgbm8gcmVmCisgKiBjb3VudGluZyB0byB0cmFjayBob3cgbWFu eSBlbnRpdGllcyByZXF1aXJlIHRoZSBSQ1MgdG8gYmUKKyAqIGJsb2NrZWQgZnJvbSBiZWluZyBp ZGxlLgorICovCitzdGF0aWMgaW50IGdlbjhfYmVnaW5fY3R4X21taW8oc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KQoreworCWk5MTVfcmVnX3QgZnNtX3JlZyA9IElOVEVMX0dFTihk ZXZfcHJpdikgPiA4ID8KKwkJR0VOOV9SQ1NfRkVfRlNNMiA6IEdFTjZfUkNTX1BXUl9GU007CisJ aW50IHJldCA9IDA7CisKKwkvKiBUaGVyZSdzIG9ubHkgbm8gYWN0aXZlIGNvbnRleHQgd2hpbGUg aWRsZSBpbiBleGVjbGlzdCBtb2RlCisJICogKHRob3VnaCB3ZSBzaG91bGRuJ3QgYmUgdXNpbmcg dGhpcyBpbiBhbnkgb3RoZXIgY2FzZSkKKwkgKi8KKwlpZiAoV0FSTl9PTighaTkxNS5lbmFibGVf ZXhlY2xpc3RzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpbnRlbF91bmNvcmVfZm9yY2V3YWtl X2dldChkZXZfcHJpdiwgRk9SQ0VXQUtFX1JFTkRFUik7CisKKwlJOTE1X1dSSVRFKEdFTjZfUkNf U0xFRVBfUFNNSV9DT05UUk9MLAorCQkgICBfTUFTS0VEX0JJVF9FTkFCTEUoR0VONl9QU01JX1NM RUVQX01TR19ESVNBQkxFKSk7CisKKwkvKiBOb3RlOiB3ZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBh IGdvb2QgaGFuZGxlIG9uIHRoZSBtYXhpbXVtCisJICogbGF0ZW5jeSBmb3IgdGhpcyB3YWtlIHVw IHNvIHdoaWxlIHdlIG9ubHkgbmVlZCB0byBob2xkIHJjcworCSAqIGJ1c3kgZnJvbSBwcm9jZXNz IGNvbnRleHQgd2UgYXQgbGVhc3Qga2VlcCB0aGUgd2FpdGluZworCSAqIGludGVycnVwdGlibGUu Li4KKwkgKi8KKwlyZXQgPSBpbnRlbF93YWl0X2Zvcl9yZWdpc3RlcihkZXZfcHJpdiwgZnNtX3Jl ZywgMHgzZiwgMHgzMCwgNTApOworCWlmIChyZXQgPT0gLUVUSU1FRE9VVCkKKwkJRFJNX0VSUk9S KCJUaW1lb3V0IHdhaXRpbmcgdG8gYmUgYWJsZSB0byBiZWdpbiBwZXItY3R4IG1taW9cbiIpOwor CisJaWYgKHJldCkKKwkJaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9wdXQoZGV2X3ByaXYsIEZPUkNF V0FLRV9SRU5ERVIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgZ2VuOF9lbmRf Y3R4X21taW8oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQoreworCWlmIChXQVJO X09OKCFpOTE1LmVuYWJsZV9leGVjbGlzdHMpKQorCQlyZXR1cm47CisKKwlJOTE1X1dSSVRFKEdF TjZfUkNfU0xFRVBfUFNNSV9DT05UUk9MLAorCQkgICBfTUFTS0VEX0JJVF9ESVNBQkxFKEdFTjZf UFNNSV9TTEVFUF9NU0dfRElTQUJMRSkpOworCWludGVsX3VuY29yZV9mb3JjZXdha2VfcHV0KGRl dl9wcml2LCBGT1JDRVdBS0VfUkVOREVSKTsKK30KKworLyogTkI6IEl0IG11c3QgYWx3YXlzIHJl bWFpbiBwb2ludGVyIHNhZmUgdG8gcnVuIHRoaXMgZXZlbiBpZiB0aGUgT0EgdW5pdAorICogaGFz IGJlZW4gZGlzYWJsZWQuCisgKgorICogSXQncyBmaW5lIHRvIHB1dCBvdXQtb2YtZGF0ZSB2YWx1 ZXMgaW50byB0aGVzZSBwZXItY29udGV4dCByZWdpc3RlcnMKKyAqIGluIHRoZSBjYXNlIHRoYXQg dGhlIE9BIHVuaXQgaGFzIGJlZW4gZGlzYWJsZWQuCisgKi8KK3N0YXRpYyB2b2lkIGdlbjhfdXBk YXRlX3JlZ19zdGF0ZV91bmxvY2tlZChzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4LAorCQkJ CQkgICB1MzIgKnJlZ19zdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSBjdHgtPmk5MTU7CisJY29uc3Qgc3RydWN0IGk5MTVfb2FfcmVnICpmbGV4X3JlZ3MgPSBk ZXZfcHJpdi0+cGVyZi5vYS5mbGV4X3JlZ3M7CisJaW50IG5fZmxleF9yZWdzID0gZGV2X3ByaXYt PnBlcmYub2EuZmxleF9yZWdzX2xlbjsKKwl1MzIgY3R4X29hY3R4Y3RybCA9IGRldl9wcml2LT5w ZXJmLm9hLmN0eF9vYWN0eGN0cmxfb2Zmc2V0OworCXUzMiBjdHhfZmxleGV1MCA9IGRldl9wcml2 LT5wZXJmLm9hLmN0eF9mbGV4ZXUwX29mZnNldDsKKwkvKiBUaGUgTU1JTyBvZmZzZXRzIGZvciBG bGV4IEVVIHJlZ2lzdGVycyBhcmVuJ3QgY29udGlndW91cyAqLworCXUzMiBmbGV4X21taW9bXSA9 IHsKKwkJaTkxNV9tbWlvX3JlZ19vZmZzZXQoRVVfUEVSRl9DTlRMMCksCisJCWk5MTVfbW1pb19y ZWdfb2Zmc2V0KEVVX1BFUkZfQ05UTDEpLAorCQlpOTE1X21taW9fcmVnX29mZnNldChFVV9QRVJG X0NOVEwyKSwKKwkJaTkxNV9tbWlvX3JlZ19vZmZzZXQoRVVfUEVSRl9DTlRMMyksCisJCWk5MTVf bW1pb19yZWdfb2Zmc2V0KEVVX1BFUkZfQ05UTDQpLAorCQlpOTE1X21taW9fcmVnX29mZnNldChF VV9QRVJGX0NOVEw1KSwKKwkJaTkxNV9tbWlvX3JlZ19vZmZzZXQoRVVfUEVSRl9DTlRMNiksCisJ fTsKKwlpbnQgaTsKKworCXJlZ19zdGF0ZVtjdHhfb2FjdHhjdHJsXSA9IGk5MTVfbW1pb19yZWdf b2Zmc2V0KEdFTjhfT0FDVFhDT05UUk9MKTsKKwlyZWdfc3RhdGVbY3R4X29hY3R4Y3RybCsxXSA9 IChkZXZfcHJpdi0+cGVyZi5vYS5wZXJpb2RfZXhwb25lbnQgPDwKKwkJCQkgICAgICBHRU44X09B X1RJTUVSX1BFUklPRF9TSElGVCkgfAorCQkJCSAgICAgKGRldl9wcml2LT5wZXJmLm9hLnBlcmlv ZGljID8KKwkJCQkgICAgICBHRU44X09BX1RJTUVSX0VOQUJMRSA6IDApIHwKKwkJCQkgICAgIEdF TjhfT0FfQ09VTlRFUl9SRVNVTUU7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmbGV4 X21taW8pOyBpKyspIHsKKwkJdTMyIHN0YXRlX29mZnNldCA9IGN0eF9mbGV4ZXUwICsgaSAqIDI7 CisJCXUzMiBtbWlvID0gZmxleF9tbWlvW2ldOworCisJCS8qIFRoaXMgYXJiaXRyYXJ5IGRlZmF1 bHQgd2lsbCBzZWxlY3QgdGhlICdFVSBGUFUwIFBpcGVsaW5lCisJCSAqIEFjdGl2ZScgZXZlbnQu IEluIHRoZSBmdXR1cmUgaXQncyBhbnRpY2lwYXRlZCB0aGF0IHRoZXJlCisJCSAqIHdpbGwgYmUg YW4gZXhwbGljaXQgJ05vIEV2ZW50JyB3ZSBjYW4gc2VsZWN0LCBidXQgbm90IHlldC4uLgorCQkg Ki8KKwkJdTMyIHZhbHVlID0gMDsKKwkJaW50IGo7CisKKwkJZm9yIChqID0gMDsgaiA8IG5fZmxl eF9yZWdzOyBqKyspIHsKKwkJCWlmIChpOTE1X21taW9fcmVnX29mZnNldChmbGV4X3JlZ3Nbal0u YWRkcikgPT0gbW1pbykgeworCQkJCXZhbHVlID0gZmxleF9yZWdzW2pdLnZhbHVlOworCQkJCWJy ZWFrOworCQkJfQorCQl9CisKKwkJcmVnX3N0YXRlW3N0YXRlX29mZnNldF0gPSBtbWlvOworCQly ZWdfc3RhdGVbc3RhdGVfb2Zmc2V0KzFdID0gdmFsdWU7CisJfQorfQorCisvKiBNYW5hZ2VzIHVw ZGF0aW5nIHRoZSBwZXItY29udGV4dCBhc3BlY3RzIG9mIHRoZSBPQSBzdHJlYW0KKyAqIGNvbmZp Z3VyYXRpb24gYWNyb3NzIGFsbCBjb250ZXh0cy4KKyAqCisgKiBUaGUgYXdrd2FyZCBjb25zaWRl cmF0aW9uIGhlcmUgaXMgdGhhdCBPQUNUWENPTlRST0wgY29udHJvbHMgdGhlCisgKiBleHBvbmVu dCBmb3IgcGVyaW9kaWMgc2FtcGxpbmcgd2hpY2ggaXMgcHJpbWFyaWx5IHVzZWQgZm9yIHN5c3Rl bQorICogd2lkZSBwcm9maWxpbmcgd2hlcmUgd2UnZCBsaWtlIGEgY29uc2lzdGVudCBzYW1wbGlu ZyBwZXJpb2QgZXZlbiBpbgorICogdGhlIGZhY2Ugb2YgY29udGV4dCBzd2l0Y2hlcy4KKyAqCisg KiBPdXIgYXBwcm9hY2ggb2YgdXBkYXRpbmcgdGhlIHJlZ2lzdGVyIHN0YXRlIGNvbnRleHQgKGFz IG9wcG9zZWQgdG8KKyAqIHNheSB1c2luZyBhIHdvcmthcm91bmQgYmF0Y2ggYnVmZmVyKSBlbnN1 cmVzIHRoYXQgdGhlIGhhcmR3YXJlCisgKiB3b24ndCBhdXRvbWF0aWNhbGx5IHJlbG9hZCBhbiBv dXQtb2YtZGF0ZSB0aW1lciBleHBvbmVudCBldmVuCisgKiB0cmFuc2llbnRseSBiZWZvcmUgYSBX QSBCQiBjb3VsZCBiZSBwYXJzZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiBuZWVkcyB0bzoKKyAq IC0gRW5zdXJlIHRoZSBjdXJyZW50bHkgcnVubmluZyBjb250ZXh0J3MgcGVyLWNvbnRleHQgT0Eg c3RhdGUgaXMKKyAqICAgdXBkYXRlZAorICogLSBFbnN1cmUgdGhhdCBhbGwgZXhpc3RpbmcgY29u dGV4dHMgd2lsbCBoYXZlIHRoZSBjb3JyZWN0IHBlci1jb250ZXh0CisgKiAgIE9BIHN0YXRlIGlm IHRoZXkgYXJlIHNjaGVkdWxlZCBmb3IgdXNlLgorICogLSBFbnN1cmUgYW55IG5ldyBjb250ZXh0 cyB3aWxsIGJlIGluaXRpYWxpemVkIHdpdGggdGhlIGNvcnJlY3QKKyAqICAgcGVyLWNvbnRleHQg T0Egc3RhdGUuCisgKgorICogTm90ZTogaXQncyBvbmx5IHRoZSBSQ1MvUmVuZGVyIGNvbnRleHQg dGhhdCBoYXMgYW55IE9BIHN0YXRlLgorICovCitzdGF0aWMgaW50IGdlbjhfY29uZmlndXJlX2Fs bF9jb250ZXh0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJc3RydWN0 IGk5MTVfZ2VtX2NvbnRleHQgKmN0eDsKKwlpbnQgcmV0OworCisJcmV0ID0gaTkxNV9tdXRleF9s b2NrX2ludGVycnVwdGlibGUoJmRldl9wcml2LT5kcm0pOworCWlmIChyZXQpCisJCXJldHVybiBy ZXQ7CisKKwkvKiBTd2l0Y2ggYXdheSBmcm9tIGFueSB1c2VyIGNvbnRleHQuICAqLworCXJldCA9 IGk5MTVfZ2VtX3N3aXRjaF90b19rZXJuZWxfY29udGV4dChkZXZfcHJpdik7CisJaWYgKHJldCkg eworCQltdXRleF91bmxvY2soJmRldl9wcml2LT5kcm0uc3RydWN0X211dGV4KTsKKwkJcmV0dXJu IHJldDsKKwl9CisKKwkvKiBUaGUgT0EgcmVnaXN0ZXIgY29uZmlnIGlzIHNldHVwIHRocm91Z2gg dGhlIGNvbnRleHQgaW1hZ2UuIFRoaXMgaW1hZ2UKKwkgKiBtaWdodCBiZSB3cml0dGVuIHRvIGJ5 IHRoZSBHUFUgb24gY29udGV4dCBzd2l0Y2ggKGluIHBhcnRpY3VsYXIgb24KKwkgKiBsaXRlLXJl c3RvcmUpLiBUaGlzIG1lYW5zIHdlIGNhbid0IHNhZmVseSB1cGRhdGUgYSBjb250ZXh0J3MgaW1h Z2UsCisJICogaWYgdGhpcyBjb250ZXh0IGlzIHNjaGVkdWxlZC9zdWJtaXR0ZWQgdG8gcnVuIG9u IHRoZSBHUFUuCisJICoKKwkgKiBXZSBjb3VsZCBlbWl0IHRoZSBPQSByZWdpc3RlciBjb25maWcg dGhyb3VnaCB0aGUgYmF0Y2ggYnVmZmVyIGJ1dAorCSAqIHRoaXMgbWlnaHQgbGVhdmUgc21hbGwg aW50ZXJ2YWwgb2YgdGltZSB3aGVyZSB0aGUgT0EgdW5pdCBpcworCSAqIGNvbmZpZ3VyZWQgYXQg YW4gaW52YWxpZCBzYW1wbGluZyBwZXJpb2QuCisJICoKKwkgKiBTbyBmYXIgdGhlIGJlc3Qgd2F5 IHRvIHdvcmsgYXJvdW5kIHRoaXMgaXNzdWUgc2VlbXMgdG8gYmUgZHJhaW5pbmcKKwkgKiB0aGUg R1BVIGZyb20gYW55IHN1Ym1pdHRlZCB3b3JrLgorCSAqLworCXJldCA9IGk5MTVfZ2VtX3dhaXRf Zm9yX2lkbGUoZGV2X3ByaXYsCisJCQkJICAgICBJOTE1X1dBSVRfSU5URVJSVVBUSUJMRSB8CisJ CQkJICAgICBJOTE1X1dBSVRfTE9DS0VEKTsKKwlpZiAocmV0KSB7CisJCW11dGV4X3VubG9jaygm ZGV2X3ByaXYtPmRybS5zdHJ1Y3RfbXV0ZXgpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIFVw ZGF0ZSBhbGwgY29udGV4dHMgbm93IHRoYXQgd2UndmUgc3RhbGxlZCB0aGUgc3VibWlzc2lvbi4g Ki8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGN0eCwgJmRldl9wcml2LT5jb250ZXh0X2xpc3QsIGxp bmspIHsKKwkJaWYgKCFjdHgtPmVuZ2luZVtSQ1NdLmluaXRpYWxpc2VkKQorCQkJY29udGludWU7 CisKKwkJZ2VuOF91cGRhdGVfcmVnX3N0YXRlX3VubG9ja2VkKGN0eCwKKwkJCQkJICAgICAgIGN0 eC0+ZW5naW5lW1JDU10ubHJjX3JlZ19zdGF0ZSk7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZkZXZf cHJpdi0+ZHJtLnN0cnVjdF9tdXRleCk7CisKKwkvKiBOb3cgdXBkYXRlIHRoZSBjdXJyZW50IGNv bnRleHQuCisJICoKKwkgKiBOb3RlOiBVc2luZyBNTUlPIHRvIHVwZGF0ZSBwZXItY29udGV4dCBy ZWdpc3RlcnMgcmVxdWlyZXMKKwkgKiBzb21lIGV4dHJhIGNhcmUuLi4KKwkgKi8KKwlyZXQgPSBn ZW44X2JlZ2luX2N0eF9tbWlvKGRldl9wcml2KTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigi RmFpbGVkIHRvIGJyaW5nIFJDUyBvdXQgb2YgaWRsZSB0byB1cGRhdGUgY3VycmVudCBjdHggT0Eg c3RhdGVcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCUk5MTVfV1JJVEUoR0VOOF9PQUNUWENP TlRST0wsICgoZGV2X3ByaXYtPnBlcmYub2EucGVyaW9kX2V4cG9uZW50IDw8CisJCQkJCUdFTjhf T0FfVElNRVJfUEVSSU9EX1NISUZUKSB8CisJCQkJICAgICAgKGRldl9wcml2LT5wZXJmLm9hLnBl cmlvZGljID8KKwkJCQkgICAgICAgR0VOOF9PQV9USU1FUl9FTkFCTEUgOiAwKSB8CisJCQkJICAg ICAgR0VOOF9PQV9DT1VOVEVSX1JFU1VNRSkpOworCisJY29uZmlnX29hX3JlZ3MoZGV2X3ByaXYs IGRldl9wcml2LT5wZXJmLm9hLmZsZXhfcmVncywKKwkJCWRldl9wcml2LT5wZXJmLm9hLmZsZXhf cmVnc19sZW4pOworCisJZ2VuOF9lbmRfY3R4X21taW8oZGV2X3ByaXYpOworCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQgZ2VuOF9lbmFibGVfbWV0cmljX3NldChzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJaW50IHJldCA9IGRldl9wcml2LT5wZXJmLm9hLm9wcy5z ZWxlY3RfbWV0cmljX3NldChkZXZfcHJpdik7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0Owor CisJLyogV2UgZGlzYWJsZSBzbGljZS91bnNsaWNlIGNsb2NrIHJhdGlvIGNoYW5nZSByZXBvcnRz IG9uIFNLTCBzaW5jZQorCSAqIHRoZXkgYXJlIHRvbyBub2lzeS4gVGhlIEhXIGdlbmVyYXRlcyBh IGxvdCBvZiByZWR1bmRhbnQgcmVwb3J0cworCSAqIHdoZXJlIHRoZSByYXRpbyBoYXNuJ3QgcmVh bGx5IGNoYW5nZWQgY2F1c2luZyBhIGxvdCBvZiByZWR1bmRhbnQKKwkgKiB3b3JrIHRvIHByb2Nl c3NlcyBhbmQgaW5jcmVhc2luZyB0aGUgY2hhbmNlcyB3ZSdsbCBoaXQgYnVmZmVyCisJICogb3Zl cnJ1bnMuCisJICoKKwkgKiBBbHRob3VnaCB3ZSBkb24ndCBjdXJyZW50bHkgdXNlIHRoZSAnZGlz YWJsZSBvdmVycnVuJyBPQUJVRkZFUgorCSAqIGZlYXR1cmUgaXQncyB3b3J0aCBub3RpbmcgdGhh dCBjbG9jayByYXRpbyByZXBvcnRzIGhhdmUgdG8gYmUKKwkgKiBkaXNhYmxlZCBiZWZvcmUgY29u c2lkZXJpbmcgdG8gdXNlIHRoYXQgZmVhdHVyZSBzaW5jZSB0aGUgSFcgZG9lc24ndAorCSAqIGNv cnJlY3RseSBibG9jayB0aGVzZSByZXBvcnRzLgorCSAqCisJICogQ3VycmVudGx5IG5vbmUgb2Yg dGhlIGhpZ2gtbGV2ZWwgbWV0cmljcyB3ZSBoYXZlIGRlcGVuZCBvbiBrbm93aW5nCisJICogdGhp cyByYXRpbyB0byBub3JtYWxpemUuCisJICoKKwkgKiBOb3RlOiBUaGlzIHJlZ2lzdGVyIGlzIG5v dCBwb3dlciBjb250ZXh0IHNhdmVkIGFuZCByZXN0b3JlZCwgYnV0CisJICogdGhhdCdzIE9LIGNv bnNpZGVyaW5nIHRoYXQgd2UgZGlzYWJsZSBSQzYgd2hpbGUgdGhlIE9BIHVuaXQgaXMKKwkgKiBl bmFibGVkLgorCSAqCisJICogVGhlIF9JTkNMVURFX0NMS19SQVRJTyBiaXQgYWxsb3dzIHRoZSBz bGljZS91bnNsaWNlIGZyZXF1ZW5jeSB0bworCSAqIGJlIHJlYWQgYmFjayBmcm9tIGF1dG9tYXRp Y2FsbHkgdHJpZ2dlcmVkIHJlcG9ydHMsIGFzIHBhcnQgb2YgdGhlCisJICogUlBUX0lEIGZpZWxk LgorCSAqLworCWlmIChJU19TS1lMQUtFKGRldl9wcml2KSB8fCBJU19CUk9YVE9OKGRldl9wcml2 KSkgeworCQlJOTE1X1dSSVRFKEdFTjhfT0FfREVCVUcsCisJCQkgICBfTUFTS0VEX0JJVF9FTkFC TEUoR0VOOV9PQV9ERUJVR19ESVNBQkxFX0NMS19SQVRJT19SRVBPUlRTIHwKKwkJCQkJICAgICAg R0VOOV9PQV9ERUJVR19JTkNMVURFX0NMS19SQVRJTykpOworCX0KKworCUk5MTVfV1JJVEUoR0RU X0NISUNLRU5fQklUUywgMHhBMCk7CisJY29uZmlnX29hX3JlZ3MoZGV2X3ByaXYsIGRldl9wcml2 LT5wZXJmLm9hLm11eF9yZWdzLAorCQkgICAgICAgZGV2X3ByaXYtPnBlcmYub2EubXV4X3JlZ3Nf bGVuKTsKKwlJOTE1X1dSSVRFKEdEVF9DSElDS0VOX0JJVFMsIDB4ODApOworCisJLyogSXQgdGFr ZXMgYSBmYWlybHkgbG9uZyB0aW1lIGZvciBhIG5ldyBNVVggY29uZmlndXJhdGlvbiB0bworCSAq IGJlIGJlIGFwcGxpZWQgYWZ0ZXIgdGhlc2UgcmVnaXN0ZXIgd3JpdGVzLiBUaGlzIGRlbGF5CisJ ICogZHVyYXRpb24gaXMgdGFrZSBmcm9tIEhhc3dlbGwgKGRlcml2ZWQgZW1waXJpY2FsbHkgYmFz ZWQgb24KKwkgKiB0aGUgcmVuZGVyX2Jhc2ljIGNvbmZpZykgYnV0IGhvcGVmdWxseSBpdCBjb3Zl cnMgdGhlCisJICogbWF4aW11bSBjb25maWd1cmF0aW9uIGxhdGVuY3kgZm9yIEdlbjgrIHRvby4u LgorCSAqLworCXVzbGVlcF9yYW5nZSgxNTAwMCwgMjAwMDApOworCisJY29uZmlnX29hX3JlZ3Mo ZGV2X3ByaXYsIGRldl9wcml2LT5wZXJmLm9hLmJfY291bnRlcl9yZWdzLAorCQkgICAgICAgZGV2 X3ByaXYtPnBlcmYub2EuYl9jb3VudGVyX3JlZ3NfbGVuKTsKKworCXJldCA9IGdlbjhfY29uZmln dXJlX2FsbF9jb250ZXh0cyhkZXZfcHJpdik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwor CXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBnZW44X2Rpc2FibGVfbWV0cmljX3NldChzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJLyogTk9QICovCit9CisKIHN0YXRp YyB2b2lkIGdlbjdfdXBkYXRlX29hY29udHJvbF9sb2NrZWQoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2KQogewogCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmRldl9wcml2LT5wZXJmLmhv b2tfbG9jayk7CkBAIC0xMTU3LDYgKzE4MDksMjkgQEAgc3RhdGljIHZvaWQgZ2VuN19vYV9lbmFi bGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCXNwaW5fdW5sb2NrX2lycXJl c3RvcmUoJmRldl9wcml2LT5wZXJmLmhvb2tfbG9jaywgZmxhZ3MpOwogfQoKK3N0YXRpYyB2b2lk IGdlbjhfb2FfZW5hYmxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3sKKwl1 MzIgcmVwb3J0X2Zvcm1hdCA9IGRldl9wcml2LT5wZXJmLm9hLm9hX2J1ZmZlci5mb3JtYXQ7CisK KwkvKiBSZXNldCBidWYgcG9pbnRlcnMgc28gd2UgZG9uJ3QgZm9yd2FyZCByZXBvcnRzIGZyb20g YmVmb3JlIG5vdy4KKwkgKgorCSAqIFRoaW5rIGNhcmVmdWxseSBpZiBjb25zaWRlcmluZyB0cnlp bmcgdG8gYXZvaWQgdGhpcywgc2luY2UgaXQKKwkgKiBhbHNvIGVuc3VyZXMgc3RhdHVzIGZsYWdz IGFuZCB0aGUgYnVmZmVyIGl0c2VsZiBhcmUgY2xlYXJlZAorCSAqIGluIGVycm9yIHBhdGhzLCBh bmQgd2UgaGF2ZSBjaGVja3MgZm9yIGludmFsaWQgcmVwb3J0cyBiYXNlZAorCSAqIG9uIHRoZSBh c3N1bXB0aW9uIHRoYXQgY2VydGFpbiBmaWVsZHMgYXJlIHdyaXR0ZW4gdG8gemVyb2VkCisJICog bWVtb3J5IHdoaWNoIHRoaXMgaGVscHMgbWFpbnRhaW5zLgorCSAqLworCWdlbjhfaW5pdF9vYV9i dWZmZXIoZGV2X3ByaXYpOworCisJLyogTm90ZTogd2UgZG9uJ3QgcmVseSBvbiB0aGUgaGFyZHdh cmUgdG8gcGVyZm9ybSBzaW5nbGUgY29udGV4dAorCSAqIGZpbHRlcmluZyBhbmQgaW5zdGVhZCBm aWx0ZXIgb24gdGhlIGNwdSBiYXNlZCBvbiB0aGUgY29udGV4dC1pZAorCSAqIGZpZWxkIG9mIHJl cG9ydHMKKwkgKi8KKwlJOTE1X1dSSVRFKEdFTjhfT0FDT05UUk9MLCAocmVwb3J0X2Zvcm1hdCA8 PAorCQkJCSAgICBHRU44X09BX1JFUE9SVF9GT1JNQVRfU0hJRlQpIHwKKwkJCQkgICBHRU44X09B X0NPVU5URVJfRU5BQkxFKTsKK30KKwogLyoqCiAgKiBpOTE1X29hX3N0cmVhbV9lbmFibGUgLSBo YW5kbGUgYEk5MTVfUEVSRl9JT0NUTF9FTkFCTEVgIGZvciBPQSBzdHJlYW0KICAqIEBzdHJlYW06 IEFuIGk5MTUgcGVyZiBzdHJlYW0gb3BlbmVkIGZvciBPQSBtZXRyaWNzCkBAIC0xMTgzLDYgKzE4 NTgsMTEgQEAgc3RhdGljIHZvaWQgZ2VuN19vYV9kaXNhYmxlKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdikKIAlJOTE1X1dSSVRFKEdFTjdfT0FDT05UUk9MLCAwKTsKIH0KCitzdGF0 aWMgdm9pZCBnZW44X29hX2Rpc2FibGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KQoreworCUk5MTVfV1JJVEUoR0VOOF9PQUNPTlRST0wsIDApOworfQorCiAvKioKICAqIGk5MTVf b2Ffc3RyZWFtX2Rpc2FibGUgLSBoYW5kbGUgYEk5MTVfUEVSRl9JT0NUTF9ESVNBQkxFYCBmb3Ig T0Egc3RyZWFtCiAgKiBAc3RyZWFtOiBBbiBpOTE1IHBlcmYgc3RyZWFtIG9wZW5lZCBmb3IgT0Eg bWV0cmljcwpAQCAtMTM2MSw2ICsyMDQxLDIxIEBAIHN0YXRpYyBpbnQgaTkxNV9vYV9zdHJlYW1f aW5pdChzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAogCXJldHVybiByZXQ7CiB9Cgor dm9pZCBpOTE1X29hX2luaXRfcmVnX3N0YXRlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2lu ZSwKKwkJCSAgICBzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4LAorCQkJICAgIHUzMiAqcmVn X3N0YXRlKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGVuZ2luZS0+ aTkxNTsKKworCWlmIChlbmdpbmUtPmlkICE9IFJDUykKKwkJcmV0dXJuOworCisJaWYgKCFkZXZf cHJpdi0+cGVyZi5pbml0aWFsaXplZCkKKwkJcmV0dXJuOworCisJZ2VuOF91cGRhdGVfcmVnX3N0 YXRlX3VubG9ja2VkKGN0eCwgcmVnX3N0YXRlKTsKK30KKwogLyoqCiAgKiBpOTE1X3BlcmZfcmVh ZF9sb2NrZWQgLSAmaTkxNV9wZXJmX3N0cmVhbV9vcHMtPnJlYWQgd2l0aCBlcnJvciBub3JtYWxp c2F0aW9uCiAgKiBAc3RyZWFtOiBBbiBpOTE1IHBlcmYgc3RyZWFtCkBAIC0xNDg2LDcgKzIxODEs NyBAQCBzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgb2FfcG9sbF9jaGVja190aW1lcl9jYihz dHJ1Y3QgaHJ0aW1lciAqaHJ0aW1lcikKIAkJY29udGFpbmVyX29mKGhydGltZXIsIHR5cGVvZigq ZGV2X3ByaXYpLAogCQkJICAgICBwZXJmLm9hLnBvbGxfY2hlY2tfdGltZXIpOwoKLQlpZiAoZGV2 X3ByaXYtPnBlcmYub2Eub3BzLm9hX2J1ZmZlcl9jaGVjayhkZXZfcHJpdikpIHsKKwlpZiAob2Ff YnVmZmVyX2NoZWNrX3VubG9ja2VkKGRldl9wcml2KSkgewogCQlkZXZfcHJpdi0+cGVyZi5vYS5w b2xsaW4gPSB0cnVlOwogCQl3YWtlX3VwKCZkZXZfcHJpdi0+cGVyZi5vYS5wb2xsX3dxKTsKIAl9 CkBAIC0xNzc1LDYgKzI0NzAsNyBAQCBpOTE1X3BlcmZfb3Blbl9pb2N0bF9sb2NrZWQoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCXN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpz cGVjaWZpY19jdHggPSBOVUxMOwogCXN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0gPSBO VUxMOwogCXVuc2lnbmVkIGxvbmcgZl9mbGFncyA9IDA7CisJYm9vbCBwcml2aWxlZ2VkX29wID0g dHJ1ZTsKIAlpbnQgc3RyZWFtX2ZkOwogCWludCByZXQ7CgpAQCAtMTc5MiwxMiArMjQ4OCwyOCBA QCBpOTE1X3BlcmZfb3Blbl9pb2N0bF9sb2NrZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2LAogCQl9CiAJfQoKKwkvKiBPbiBIYXN3ZWxsIHRoZSBPQSB1bml0IHN1cHBvcnRzIGNs b2NrIGdhdGluZyBvZmYgZm9yIGEgc3BlY2lmaWMKKwkgKiBjb250ZXh0IGFuZCBpbiB0aGlzIG1v ZGUgdGhlcmUncyBubyB2aXNpYmlsaXR5IG9mIG1ldHJpY3MgZm9yIHRoZQorCSAqIHJlc3Qgb2Yg dGhlIHN5c3RlbSwgd2hpY2ggd2UgY29uc2lkZXIgYWNjZXB0YWJsZSBmb3IgYQorCSAqIG5vbi1w cml2aWxlZ2VkIGNsaWVudC4KKwkgKgorCSAqIEZvciBHZW44KyB0aGUgT0EgdW5pdCBubyBsb25n ZXIgc3VwcG9ydHMgY2xvY2sgZ2F0aW5nIG9mZiBmb3IgYQorCSAqIHNwZWNpZmljIGNvbnRleHQg YW5kIHRoZSBrZXJuZWwgY2FuJ3Qgc2VjdXJlbHkgc3RvcCB0aGUgY291bnRlcnMKKwkgKiBmcm9t IHVwZGF0aW5nIGFzIHN5c3RlbS13aWRlIC8gZ2xvYmFsIHZhbHVlcy4gRXZlbiB0aG91Z2ggd2Ug Y2FuCisJICogZmlsdGVyIHJlcG9ydHMgYmFzZWQgb24gdGhlIGluY2x1ZGVkIGNvbnRleHQgSUQg d2UgY2FuJ3QgYmxvY2sKKwkgKiBjbGllbnRzIGZyb20gc2VlaW5nIHRoZSByYXcgLyBnbG9iYWwg Y291bnRlciB2YWx1ZXMgdmlhCisJICogTUlfUkVQT1JUX1BFUkZfQ09VTlQgY29tbWFuZHMgYW5k IHNvIGNvbnNpZGVyIGl0IGEgcHJpdmlsZWdlZCBvcCB0bworCSAqIGVuYWJsZSB0aGUgT0EgdW5p dCBieSBkZWZhdWx0LgorCSAqLworCWlmIChJU19IQVNXRUxMKGRldl9wcml2KSAmJiBzcGVjaWZp Y19jdHgpCisJCXByaXZpbGVnZWRfb3AgPSBmYWxzZTsKKwogCS8qIFNpbWlsYXIgdG8gcGVyZidz IGtlcm5lbC5wZXJmX3BhcmFub2lkX2NwdSBzeXNjdGwgb3B0aW9uCiAJICogd2UgY2hlY2sgYSBk ZXYuaTkxNS5wZXJmX3N0cmVhbV9wYXJhbm9pZCBzeXNjdGwgb3B0aW9uCiAJICogdG8gZGV0ZXJt aW5lIGlmIGl0J3Mgb2sgdG8gYWNjZXNzIHN5c3RlbSB3aWRlIE9BIGNvdW50ZXJzCiAJICogd2l0 aG91dCBDQVBfU1lTX0FETUlOIHByaXZpbGVnZXMuCiAJICovCi0JaWYgKCFzcGVjaWZpY19jdHgg JiYKKwlpZiAocHJpdmlsZWdlZF9vcCAmJgogCSAgICBpOTE1X3BlcmZfc3RyZWFtX3BhcmFub2lk ICYmICFjYXBhYmxlKENBUF9TWVNfQURNSU4pKSB7CiAJCURSTV9ERUJVRygiSW5zdWZmaWNpZW50 IHByaXZpbGVnZXMgdG8gb3BlbiBzeXN0ZW0td2lkZSBpOTE1IHBlcmYgc3RyZWFtXG4iKTsKIAkJ cmV0ID0gLUVBQ0NFUzsKQEAgLTIwNjksOSArMjc4MSw2IEBAIGludCBpOTE1X3BlcmZfb3Blbl9p b2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogICovCiB2b2lkIGk5MTVf cGVyZl9yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7Ci0JaWYg KCFJU19IQVNXRUxMKGRldl9wcml2KSkKLQkJcmV0dXJuOwotCiAJaWYgKCFkZXZfcHJpdi0+cGVy Zi5pbml0aWFsaXplZCkKIAkJcmV0dXJuOwoKQEAgLTIwODcsMTEgKzI3OTYsMzggQEAgdm9pZCBp OTE1X3BlcmZfcmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCWlm ICghZGV2X3ByaXYtPnBlcmYubWV0cmljc19rb2JqKQogCQlnb3RvIGV4aXQ7CgotCWlmIChpOTE1 X3BlcmZfcmVnaXN0ZXJfc3lzZnNfaHN3KGRldl9wcml2KSkgewotCQlrb2JqZWN0X3B1dChkZXZf cHJpdi0+cGVyZi5tZXRyaWNzX2tvYmopOwotCQlkZXZfcHJpdi0+cGVyZi5tZXRyaWNzX2tvYmog PSBOVUxMOworCWlmIChJU19IQVNXRUxMKGRldl9wcml2KSkgeworCQlpZiAoaTkxNV9wZXJmX3Jl Z2lzdGVyX3N5c2ZzX2hzdyhkZXZfcHJpdikpCisJCQlnb3RvIHN5c2ZzX2Vycm9yOworCX0gZWxz ZSBpZiAoSVNfQlJPQURXRUxMKGRldl9wcml2KSkgeworCQlpZiAoaTkxNV9wZXJmX3JlZ2lzdGVy X3N5c2ZzX2JkdyhkZXZfcHJpdikpCisJCQlnb3RvIHN5c2ZzX2Vycm9yOworCX0gZWxzZSBpZiAo SVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpIHsKKwkJaWYgKGk5MTVfcGVyZl9yZWdpc3Rlcl9zeXNm c19jaHYoZGV2X3ByaXYpKQorCQkJZ290byBzeXNmc19lcnJvcjsKKwl9IGVsc2UgaWYgKElTX1NL WUxBS0UoZGV2X3ByaXYpKSB7CisJCWlmIChJU19TS0xfR1QyKGRldl9wcml2KSkgeworCQkJaWYg KGk5MTVfcGVyZl9yZWdpc3Rlcl9zeXNmc19za2xndDIoZGV2X3ByaXYpKQorCQkJCWdvdG8gc3lz ZnNfZXJyb3I7CisJCX0gZWxzZSBpZiAoSVNfU0tMX0dUMyhkZXZfcHJpdikpIHsKKwkJCWlmIChp OTE1X3BlcmZfcmVnaXN0ZXJfc3lzZnNfc2tsZ3QzKGRldl9wcml2KSkKKwkJCQlnb3RvIHN5c2Zz X2Vycm9yOworCQl9IGVsc2UgaWYgKElTX1NLTF9HVDQoZGV2X3ByaXYpKSB7CisJCQlpZiAoaTkx NV9wZXJmX3JlZ2lzdGVyX3N5c2ZzX3NrbGd0NChkZXZfcHJpdikpCisJCQkJZ290byBzeXNmc19l cnJvcjsKKwkJfSBlbHNlCisJCQlnb3RvIHN5c2ZzX2Vycm9yOworCX0gZWxzZSBpZiAoSVNfQlJP WFRPTihkZXZfcHJpdikpIHsKKwkJaWYgKGk5MTVfcGVyZl9yZWdpc3Rlcl9zeXNmc19ieHQoZGV2 X3ByaXYpKQorCQkJZ290byBzeXNmc19lcnJvcjsKIAl9CgorCWdvdG8gZXhpdDsKKworc3lzZnNf ZXJyb3I6CisJa29iamVjdF9wdXQoZGV2X3ByaXYtPnBlcmYubWV0cmljc19rb2JqKTsKKwlkZXZf cHJpdi0+cGVyZi5tZXRyaWNzX2tvYmogPSBOVUxMOworCiBleGl0OgogCW11dGV4X3VubG9jaygm ZGV2X3ByaXYtPnBlcmYubG9jayk7CiB9CkBAIC0yMTA3LDEzICsyODQzLDI0IEBAIHZvaWQgaTkx NV9wZXJmX3JlZ2lzdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKICAqLwog dm9pZCBpOTE1X3BlcmZfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYpCiB7Ci0JaWYgKCFJU19IQVNXRUxMKGRldl9wcml2KSkKLQkJcmV0dXJuOwotCiAJaWYgKCFk ZXZfcHJpdi0+cGVyZi5tZXRyaWNzX2tvYmopCiAJCXJldHVybjsKCi0JaTkxNV9wZXJmX3VucmVn aXN0ZXJfc3lzZnNfaHN3KGRldl9wcml2KTsKKyAgICAgICAgaWYgKElTX0hBU1dFTEwoZGV2X3By aXYpKQorICAgICAgICAgICAgICAgIGk5MTVfcGVyZl91bnJlZ2lzdGVyX3N5c2ZzX2hzdyhkZXZf cHJpdik7CisgICAgICAgIGVsc2UgaWYgKElTX0JST0FEV0VMTChkZXZfcHJpdikpCisgICAgICAg ICAgICAgICAgaTkxNV9wZXJmX3VucmVnaXN0ZXJfc3lzZnNfYmR3KGRldl9wcml2KTsKKyAgICAg ICAgZWxzZSBpZiAoSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpCisgICAgICAgICAgICAgICAgaTkx NV9wZXJmX3VucmVnaXN0ZXJfc3lzZnNfY2h2KGRldl9wcml2KTsKKyAgICAgICAgZWxzZSBpZiAo SVNfU0tZTEFLRShkZXZfcHJpdikpIHsKKwkJaWYgKElTX1NLTF9HVDIoZGV2X3ByaXYpKQorCQkJ aTkxNV9wZXJmX3VucmVnaXN0ZXJfc3lzZnNfc2tsZ3QyKGRldl9wcml2KTsKKwkJZWxzZSBpZiAo SVNfU0tMX0dUMyhkZXZfcHJpdikpCisJCQlpOTE1X3BlcmZfdW5yZWdpc3Rlcl9zeXNmc19za2xn dDMoZGV2X3ByaXYpOworCQllbHNlIGlmIChJU19TS0xfR1Q0KGRldl9wcml2KSkKKwkJCWk5MTVf cGVyZl91bnJlZ2lzdGVyX3N5c2ZzX3NrbGd0NChkZXZfcHJpdik7CisJfSBlbHNlIGlmIChJU19C Uk9YVE9OKGRldl9wcml2KSkKKyAgICAgICAgICAgICAgICBpOTE1X3BlcmZfdW5yZWdpc3Rlcl9z eXNmc19ieHQoZGV2X3ByaXYpOwoKIAlrb2JqZWN0X3B1dChkZXZfcHJpdi0+cGVyZi5tZXRyaWNz X2tvYmopOwogCWRldl9wcml2LT5wZXJmLm1ldHJpY3Nfa29iaiA9IE5VTEw7CkBAIC0yMTcyLDM2 ICsyOTE5LDEwNSBAQCBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBkZXZfcm9vdFtdID0gewogICov CiB2b2lkIGk5MTVfcGVyZl9pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikK IHsKLQlpZiAoIUlTX0hBU1dFTEwoZGV2X3ByaXYpKQotCQlyZXR1cm47Ci0KLQlocnRpbWVyX2lu aXQoJmRldl9wcml2LT5wZXJmLm9hLnBvbGxfY2hlY2tfdGltZXIsCi0JCSAgICAgQ0xPQ0tfTU9O T1RPTklDLCBIUlRJTUVSX01PREVfUkVMKTsKLQlkZXZfcHJpdi0+cGVyZi5vYS5wb2xsX2NoZWNr X3RpbWVyLmZ1bmN0aW9uID0gb2FfcG9sbF9jaGVja190aW1lcl9jYjsKLQlpbml0X3dhaXRxdWV1 ZV9oZWFkKCZkZXZfcHJpdi0+cGVyZi5vYS5wb2xsX3dxKTsKKwlkZXZfcHJpdi0+cGVyZi5vYS5u X2J1aWx0aW5fc2V0cyA9IDA7CisKKwlpZiAoSVNfSEFTV0VMTChkZXZfcHJpdikpIHsKKwkJZGV2 X3ByaXYtPnBlcmYub2Eub3BzLmluaXRfb2FfYnVmZmVyID0gZ2VuN19pbml0X29hX2J1ZmZlcjsK KwkJZGV2X3ByaXYtPnBlcmYub2Eub3BzLmVuYWJsZV9tZXRyaWNfc2V0ID0gaHN3X2VuYWJsZV9t ZXRyaWNfc2V0OworCQlkZXZfcHJpdi0+cGVyZi5vYS5vcHMuZGlzYWJsZV9tZXRyaWNfc2V0ID0g aHN3X2Rpc2FibGVfbWV0cmljX3NldDsKKwkJZGV2X3ByaXYtPnBlcmYub2Eub3BzLm9hX2VuYWJs ZSA9IGdlbjdfb2FfZW5hYmxlOworCQlkZXZfcHJpdi0+cGVyZi5vYS5vcHMub2FfZGlzYWJsZSA9 IGdlbjdfb2FfZGlzYWJsZTsKKwkJZGV2X3ByaXYtPnBlcmYub2Eub3BzLnJlYWQgPSBnZW43X29h X3JlYWQ7CisJCWRldl9wcml2LT5wZXJmLm9hLm9wcy5vYV9od190YWlsX3JlYWQgPQorCQkJZ2Vu N19vYV9od190YWlsX3JlYWQ7CisKKwkJZGV2X3ByaXYtPnBlcmYub2Eub2FfZm9ybWF0cyA9IGhz d19vYV9mb3JtYXRzOworCisJCWRldl9wcml2LT5wZXJmLm9hLm5fYnVpbHRpbl9zZXRzID0KKwkJ CWk5MTVfb2Ffbl9idWlsdGluX21ldHJpY19zZXRzX2hzdzsKKwl9IGVsc2UgaWYgKGk5MTUuZW5h YmxlX2V4ZWNsaXN0cykgeworCQkvKiBOb3RlOiB0aGF0IGFsdGhvdWdoIHdlIGNvdWxkIHRoZW9y ZXRpY2FsbHkgYWxzbyBzdXBwb3J0IHRoZQorCQkgKiBsZWdhY3kgcmluZ2J1ZmZlciBtb2RlIG9u IEJEVyAoYW5kIGVhcmxpZXIgaXRlcmF0aW9ucyBvZgorCQkgKiB0aGlzIGRyaXZlciwgYmVmb3Jl IHVwc3RyZWFtaW5nIGRpZCB0aGlzKSBpdCBkaWRuJ3Qgc2VlbQorCQkgKiB3b3J0aCB0aGUgY29t cGxleGl0eSB0byBtYWludGFpbiBub3cgdGhhdCBCRFcrIGVuYWJsZQorCQkgKiBleGVjbGlzdCBt b2RlIGJ5IGRlZmF1bHQuCisJCSAqLwoKLQlJTklUX0xJU1RfSEVBRCgmZGV2X3ByaXYtPnBlcmYu c3RyZWFtcyk7Ci0JbXV0ZXhfaW5pdCgmZGV2X3ByaXYtPnBlcmYubG9jayk7Ci0Jc3Bpbl9sb2Nr X2luaXQoJmRldl9wcml2LT5wZXJmLmhvb2tfbG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmRldl9w cml2LT5wZXJmLm9hLm9hX2J1ZmZlci5wdHJfbG9jayk7CisJCWlmIChJU19HRU44KGRldl9wcml2 KSkgeworCQkJZGV2X3ByaXYtPnBlcmYub2EuY3R4X29hY3R4Y3RybF9vZmZzZXQgPSAweDEyMDsK KwkJCWRldl9wcml2LT5wZXJmLm9hLmN0eF9mbGV4ZXUwX29mZnNldCA9IDB4MmNlOworCQkJZGV2 X3ByaXYtPnBlcmYub2EuZ2VuOF92YWxpZF9jdHhfYml0ID0gKDE8PDI1KTsKKworCQkJaWYgKElT X0JST0FEV0VMTChkZXZfcHJpdikpIHsKKwkJCQlkZXZfcHJpdi0+cGVyZi5vYS5uX2J1aWx0aW5f c2V0cyA9CisJCQkJCWk5MTVfb2Ffbl9idWlsdGluX21ldHJpY19zZXRzX2JkdzsKKwkJCQlkZXZf cHJpdi0+cGVyZi5vYS5vcHMuc2VsZWN0X21ldHJpY19zZXQgPQorCQkJCQlpOTE1X29hX3NlbGVj dF9tZXRyaWNfc2V0X2JkdzsKKwkJCX0gZWxzZSBpZiAoSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikp IHsKKwkJCQlkZXZfcHJpdi0+cGVyZi5vYS5uX2J1aWx0aW5fc2V0cyA9CisJCQkJCWk5MTVfb2Ff bl9idWlsdGluX21ldHJpY19zZXRzX2NodjsKKwkJCQlkZXZfcHJpdi0+cGVyZi5vYS5vcHMuc2Vs ZWN0X21ldHJpY19zZXQgPQorCQkJCQlpOTE1X29hX3NlbGVjdF9tZXRyaWNfc2V0X2NodjsKKwkJ CX0KKwkJfSBlbHNlIGlmIChJU19HRU45KGRldl9wcml2KSkgeworCQkJZGV2X3ByaXYtPnBlcmYu b2EuY3R4X29hY3R4Y3RybF9vZmZzZXQgPSAweDEyODsKKwkJCWRldl9wcml2LT5wZXJmLm9hLmN0 eF9mbGV4ZXUwX29mZnNldCA9IDB4M2RlOworCQkJZGV2X3ByaXYtPnBlcmYub2EuZ2VuOF92YWxp ZF9jdHhfYml0ID0gKDE8PDE2KTsKKworCQkJaWYgKElTX1NLTF9HVDIoZGV2X3ByaXYpKSB7CisJ CQkJZGV2X3ByaXYtPnBlcmYub2Eubl9idWlsdGluX3NldHMgPQorCQkJCQlpOTE1X29hX25fYnVp bHRpbl9tZXRyaWNfc2V0c19za2xndDI7CisJCQkJZGV2X3ByaXYtPnBlcmYub2Eub3BzLnNlbGVj dF9tZXRyaWNfc2V0ID0KKwkJCQkJaTkxNV9vYV9zZWxlY3RfbWV0cmljX3NldF9za2xndDI7CisJ CQl9IGVsc2UgaWYgKElTX1NLTF9HVDMoZGV2X3ByaXYpKSB7CisJCQkJZGV2X3ByaXYtPnBlcmYu b2Eubl9idWlsdGluX3NldHMgPQorCQkJCQlpOTE1X29hX25fYnVpbHRpbl9tZXRyaWNfc2V0c19z a2xndDM7CisJCQkJZGV2X3ByaXYtPnBlcmYub2Eub3BzLnNlbGVjdF9tZXRyaWNfc2V0ID0KKwkJ CQkJaTkxNV9vYV9zZWxlY3RfbWV0cmljX3NldF9za2xndDM7CisJCQl9IGVsc2UgaWYgKElTX1NL TF9HVDQoZGV2X3ByaXYpKSB7CisJCQkJZGV2X3ByaXYtPnBlcmYub2Eubl9idWlsdGluX3NldHMg PQorCQkJCQlpOTE1X29hX25fYnVpbHRpbl9tZXRyaWNfc2V0c19za2xndDQ7CisJCQkJZGV2X3By aXYtPnBlcmYub2Eub3BzLnNlbGVjdF9tZXRyaWNfc2V0ID0KKwkJCQkJaTkxNV9vYV9zZWxlY3Rf bWV0cmljX3NldF9za2xndDQ7CisJCQl9IGVsc2UgaWYgKElTX0JST1hUT04oZGV2X3ByaXYpKSB7 CisJCQkJZGV2X3ByaXYtPnBlcmYub2Eubl9idWlsdGluX3NldHMgPQorCQkJCQlpOTE1X29hX25f YnVpbHRpbl9tZXRyaWNfc2V0c19ieHQ7CisJCQkJZGV2X3ByaXYtPnBlcmYub2Eub3BzLnNlbGVj dF9tZXRyaWNfc2V0ID0KKwkJCQkJaTkxNV9vYV9zZWxlY3RfbWV0cmljX3NldF9ieHQ7CisJCQl9 CisJCX0KCi0JZGV2X3ByaXYtPnBlcmYub2Eub3BzLmluaXRfb2FfYnVmZmVyID0gZ2VuN19pbml0 X29hX2J1ZmZlcjsKLQlkZXZfcHJpdi0+cGVyZi5vYS5vcHMuZW5hYmxlX21ldHJpY19zZXQgPSBo c3dfZW5hYmxlX21ldHJpY19zZXQ7Ci0JZGV2X3ByaXYtPnBlcmYub2Eub3BzLmRpc2FibGVfbWV0 cmljX3NldCA9IGhzd19kaXNhYmxlX21ldHJpY19zZXQ7Ci0JZGV2X3ByaXYtPnBlcmYub2Eub3Bz Lm9hX2VuYWJsZSA9IGdlbjdfb2FfZW5hYmxlOwotCWRldl9wcml2LT5wZXJmLm9hLm9wcy5vYV9k aXNhYmxlID0gZ2VuN19vYV9kaXNhYmxlOwotCWRldl9wcml2LT5wZXJmLm9hLm9wcy5yZWFkID0g Z2VuN19vYV9yZWFkOwotCWRldl9wcml2LT5wZXJmLm9hLm9wcy5vYV9idWZmZXJfY2hlY2sgPQot CQlnZW43X29hX2J1ZmZlcl9jaGVja191bmxvY2tlZDsKKwkJaWYgKGRldl9wcml2LT5wZXJmLm9h Lm5fYnVpbHRpbl9zZXRzKSB7CisJCQlkZXZfcHJpdi0+cGVyZi5vYS5vcHMuaW5pdF9vYV9idWZm ZXIgPSBnZW44X2luaXRfb2FfYnVmZmVyOworCQkJZGV2X3ByaXYtPnBlcmYub2Eub3BzLmVuYWJs ZV9tZXRyaWNfc2V0ID0KKwkJCQlnZW44X2VuYWJsZV9tZXRyaWNfc2V0OworCQkJZGV2X3ByaXYt PnBlcmYub2Eub3BzLmRpc2FibGVfbWV0cmljX3NldCA9CisJCQkJZ2VuOF9kaXNhYmxlX21ldHJp Y19zZXQ7CisJCQlkZXZfcHJpdi0+cGVyZi5vYS5vcHMub2FfZW5hYmxlID0gZ2VuOF9vYV9lbmFi bGU7CisJCQlkZXZfcHJpdi0+cGVyZi5vYS5vcHMub2FfZGlzYWJsZSA9IGdlbjhfb2FfZGlzYWJs ZTsKKwkJCWRldl9wcml2LT5wZXJmLm9hLm9wcy5yZWFkID0gZ2VuOF9vYV9yZWFkOworCQkJZGV2 X3ByaXYtPnBlcmYub2Eub3BzLm9hX2h3X3RhaWxfcmVhZCA9CisJCQkJZ2VuOF9vYV9od190YWls X3JlYWQ7CisKKwkJCWRldl9wcml2LT5wZXJmLm9hLm9hX2Zvcm1hdHMgPSBnZW44X3BsdXNfb2Ff Zm9ybWF0czsKKwkJfQorCX0KCi0JZGV2X3ByaXYtPnBlcmYub2Eub2FfZm9ybWF0cyA9IGhzd19v YV9mb3JtYXRzOworCWlmIChkZXZfcHJpdi0+cGVyZi5vYS5uX2J1aWx0aW5fc2V0cykgeworCQlo cnRpbWVyX2luaXQoJmRldl9wcml2LT5wZXJmLm9hLnBvbGxfY2hlY2tfdGltZXIsCisJCQkJQ0xP Q0tfTU9OT1RPTklDLCBIUlRJTUVSX01PREVfUkVMKTsKKwkJZGV2X3ByaXYtPnBlcmYub2EucG9s bF9jaGVja190aW1lci5mdW5jdGlvbiA9IG9hX3BvbGxfY2hlY2tfdGltZXJfY2I7CisJCWluaXRf d2FpdHF1ZXVlX2hlYWQoJmRldl9wcml2LT5wZXJmLm9hLnBvbGxfd3EpOwoKLQlkZXZfcHJpdi0+ cGVyZi5vYS5uX2J1aWx0aW5fc2V0cyA9Ci0JCWk5MTVfb2Ffbl9idWlsdGluX21ldHJpY19zZXRz X2hzdzsKKwkJSU5JVF9MSVNUX0hFQUQoJmRldl9wcml2LT5wZXJmLnN0cmVhbXMpOworCQltdXRl eF9pbml0KCZkZXZfcHJpdi0+cGVyZi5sb2NrKTsKKwkJc3Bpbl9sb2NrX2luaXQoJmRldl9wcml2 LT5wZXJmLmhvb2tfbG9jayk7CisJCXNwaW5fbG9ja19pbml0KCZkZXZfcHJpdi0+cGVyZi5vYS5v YV9idWZmZXIucHRyX2xvY2spOwoKLQlkZXZfcHJpdi0+cGVyZi5zeXNjdGxfaGVhZGVyID0gcmVn aXN0ZXJfc3lzY3RsX3RhYmxlKGRldl9yb290KTsKKwkJZGV2X3ByaXYtPnBlcmYuc3lzY3RsX2hl YWRlciA9IHJlZ2lzdGVyX3N5c2N0bF90YWJsZShkZXZfcm9vdCk7CgotCWRldl9wcml2LT5wZXJm LmluaXRpYWxpemVkID0gdHJ1ZTsKKwkJZGV2X3ByaXYtPnBlcmYuaW5pdGlhbGl6ZWQgPSB0cnVl OworCX0KIH0KCiAvKioKQEAgLTIyMTYsNSArMzAzMiw2IEBAIHZvaWQgaTkxNV9wZXJmX2Zpbmko c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCXVucmVnaXN0ZXJfc3lzY3RsX3Rh YmxlKGRldl9wcml2LT5wZXJmLnN5c2N0bF9oZWFkZXIpOwoKIAltZW1zZXQoJmRldl9wcml2LT5w ZXJmLm9hLm9wcywgMCwgc2l6ZW9mKGRldl9wcml2LT5wZXJmLm9hLm9wcykpOworCiAJZGV2X3By aXYtPnBlcmYuaW5pdGlhbGl6ZWQgPSBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCmlu ZGV4IDRjNzJhZGFlMzY4Yi4uYzBiYmJhNmQ1Yjc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X3JlZy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgK QEAgLTY1Myw2ICs2NTMsMTIgQEAgc3RhdGljIGlubGluZSBib29sIGk5MTVfbW1pb19yZWdfdmFs aWQoaTkxNV9yZWdfdCByZWcpCgogI2RlZmluZSBHRU44X09BQ1RYSUQgX01NSU8oMHgyMzY0KQoK KyNkZWZpbmUgR0VOOF9PQV9ERUJVRyBfTU1JTygweDJCMDQpCisjZGVmaW5lICBHRU45X09BX0RF QlVHX0RJU0FCTEVfQ0xLX1JBVElPX1JFUE9SVFMgICAgKDE8PDUpCisjZGVmaW5lICBHRU45X09B X0RFQlVHX0lOQ0xVREVfQ0xLX1JBVElPCSAgICAoMTw8NikKKyNkZWZpbmUgIEdFTjlfT0FfREVC VUdfRElTQUJMRV9HT18xXzBfUkVQT1JUUwkgICAgKDE8PDIpCisjZGVmaW5lICBHRU45X09BX0RF QlVHX0RJU0FCTEVfQ1RYX1NXSVRDSF9SRVBPUlRTICAgKDE8PDEpCisKICNkZWZpbmUgR0VOOF9P QUNPTlRST0wgX01NSU8oMHgyQjAwKQogI2RlZmluZSAgR0VOOF9PQV9SRVBPUlRfRk9STUFUX0Ex MgkgICAgKDA8PDIpCiAjZGVmaW5lICBHRU44X09BX1JFUE9SVF9GT1JNQVRfQTEyX0I4X0M4ICAg ICgyPDwyKQpAQCAtNjc0LDYgKzY4MCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpOTE1X21taW9f cmVnX3ZhbGlkKGk5MTVfcmVnX3QgcmVnKQogI2RlZmluZSAgR0VON19PQUJVRkZFUl9TVE9QX1JF U1VNRV9FTkFCTEUgICAoMTw8MSkKICNkZWZpbmUgIEdFTjdfT0FCVUZGRVJfUkVTVU1FCQkgICAg KDE8PDApCgorI2RlZmluZSBHRU44X09BQlVGRkVSX1VEVyBfTU1JTygweDIzYjQpCiAjZGVmaW5l IEdFTjhfT0FCVUZGRVIgX01NSU8oMHgyYjE0KQoKICNkZWZpbmUgR0VON19PQVNUQVRVUzEgX01N SU8oMHgyMzY0KQpAQCAtNjkyLDcgKzY5OSw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpOTE1X21t aW9fcmVnX3ZhbGlkKGk5MTVfcmVnX3QgcmVnKQogI2RlZmluZSAgR0VOOF9PQVNUQVRVU19SRVBP UlRfTE9TVAkgICAgKDE8PDApCgogI2RlZmluZSBHRU44X09BSEVBRFBUUiBfTU1JTygweDJCMEMp CisjZGVmaW5lIEdFTjhfT0FIRUFEUFRSX01BU0sgICAgMHhmZmZmZmZjMAogI2RlZmluZSBHRU44 X09BVEFJTFBUUiBfTU1JTygweDJCMTApCisjZGVmaW5lIEdFTjhfT0FUQUlMUFRSX01BU0sgICAg MHhmZmZmZmZjMAoKICNkZWZpbmUgT0FCVUZGRVJfU0laRV8xMjhLICAoMDw8MykKICNkZWZpbmUg T0FCVUZGRVJfU0laRV8yNTZLICAoMTw8MykKQEAgLTcwNSw3ICs3MTQsMTcgQEAgc3RhdGljIGlu bGluZSBib29sIGk5MTVfbW1pb19yZWdfdmFsaWQoaTkxNV9yZWdfdCByZWcpCgogI2RlZmluZSBP QV9NRU1fU0VMRUNUX0dHVFQgICgxPDwwKQoKKy8qCisgKiBGbGV4aWJsZSwgQWdncmVnYXRlIEVV IENvdW50ZXIgUmVnaXN0ZXJzLgorICogTm90ZTogdGhlc2UgYXJlbid0IGNvbnRpZ3VvdXMKKyAq LwogI2RlZmluZSBFVV9QRVJGX0NOVEwwCSAgICBfTU1JTygweGU0NTgpCisjZGVmaW5lIEVVX1BF UkZfQ05UTDEJICAgIF9NTUlPKDB4ZTU1OCkKKyNkZWZpbmUgRVVfUEVSRl9DTlRMMgkgICAgX01N SU8oMHhlNjU4KQorI2RlZmluZSBFVV9QRVJGX0NOVEwzCSAgICBfTU1JTygweGU3NTgpCisjZGVm aW5lIEVVX1BFUkZfQ05UTDQJICAgIF9NTUlPKDB4ZTQ1YykKKyNkZWZpbmUgRVVfUEVSRl9DTlRM NQkgICAgX01NSU8oMHhlNTVjKQorI2RlZmluZSBFVV9QRVJGX0NOVEw2CSAgICBfTU1JTygweGU2 NWMpCgogI2RlZmluZSBHRFRfQ0hJQ0tFTl9CSVRTICAgIF9NTUlPKDB4OTg0MCkKICNkZWZpbmUg R1RfTk9BX0VOQUJMRQkgICAgMHgwMDAwMDA4MApAQCAtMjMyNSw2ICsyMzQ0LDkgQEAgZW51bSBz a2xfZGlzcF9wb3dlcl93ZWxscyB7CiAjZGVmaW5lICAgR0VOOF9SQ19TRU1BX0lETEVfTVNHX0RJ U0FCTEUJKDEgPDwgMTIpCiAjZGVmaW5lICAgR0VOOF9GRl9ET1BfQ0xPQ0tfR0FURV9ESVNBQkxF CSgxPDwxMCkKCisjZGVmaW5lIEdFTjZfUkNTX1BXUl9GU00gX01NSU8oMHgyMmFjKQorI2RlZmlu ZSBHRU45X1JDU19GRV9GU00yIF9NTUlPKDB4MjJhNCkKKwogLyogRnVzZSByZWFkb3V0IHJlZ2lz dGVycyBmb3IgR1QgKi8KICNkZWZpbmUgQ0hWX0ZVU0VfR1QJCQlfTU1JTyhWTFZfRElTUExBWV9C QVNFICsgMHgyMTY4KQogI2RlZmluZSAgIENIVl9GR1RfRElTQUJMRV9TUzAJCSgxIDw8IDEwKQpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9scmMuYwppbmRleCA3ZGYyNzhmZTQ5MmUuLjM1MWUyMzFhMDJmNCAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMKKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMKQEAgLTE4NzksNiArMTg3OSw4IEBAIHN0YXRpYyB2 b2lkIGV4ZWNsaXN0c19pbml0X3JlZ19zdGF0ZSh1MzIgKnJlZ3MsCiAJCXJlZ3NbQ1RYX0xSSV9I RUFERVJfMl0gPSBNSV9MT0FEX1JFR0lTVEVSX0lNTSgxKTsKIAkJQ1RYX1JFRyhyZWdzLCBDVFhf Ul9QV1JfQ0xLX1NUQVRFLCBHRU44X1JfUFdSX0NMS19TVEFURSwKIAkJCW1ha2VfcnBjcyhkZXZf cHJpdikpOworCisJCWk5MTVfb2FfaW5pdF9yZWdfc3RhdGUoZW5naW5lLCBjdHgsIHJlZ3MpOwog CX0KIH0KCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmggYi9pbmNsdWRl L3VhcGkvZHJtL2k5MTVfZHJtLmgKaW5kZXggNDY0NTQ3ZDA4MTczLi4xNWJjOWY3OGJhNGQgMTAw NjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaAorKysgYi9pbmNsdWRlL3VhcGkv ZHJtL2k5MTVfZHJtLmgKQEAgLTEzMTYsMTMgKzEzMTYsMTggQEAgc3RydWN0IGRybV9pOTE1X2dl bV9jb250ZXh0X3BhcmFtIHsKIH07CgogZW51bSBkcm1faTkxNV9vYV9mb3JtYXQgewotCUk5MTVf T0FfRk9STUFUX0ExMyA9IDEsCi0JSTkxNV9PQV9GT1JNQVRfQTI5LAotCUk5MTVfT0FfRk9STUFU X0ExM19COF9DOCwKLQlJOTE1X09BX0ZPUk1BVF9CNF9DOCwKLQlJOTE1X09BX0ZPUk1BVF9BNDVf QjhfQzgsCi0JSTkxNV9PQV9GT1JNQVRfQjRfQzhfQTE2LAotCUk5MTVfT0FfRk9STUFUX0M0X0I4 LAorCUk5MTVfT0FfRk9STUFUX0ExMyA9IDEsCSAgICAvKiBIU1cgb25seSAqLworCUk5MTVfT0Ff Rk9STUFUX0EyOSwJICAgIC8qIEhTVyBvbmx5ICovCisJSTkxNV9PQV9GT1JNQVRfQTEzX0I4X0M4 LCAgIC8qIEhTVyBvbmx5ICovCisJSTkxNV9PQV9GT1JNQVRfQjRfQzgsCSAgICAvKiBIU1cgb25s eSAqLworCUk5MTVfT0FfRk9STUFUX0E0NV9COF9DOCwgICAvKiBIU1cgb25seSAqLworCUk5MTVf T0FfRk9STUFUX0I0X0M4X0ExNiwgICAvKiBIU1cgb25seSAqLworCUk5MTVfT0FfRk9STUFUX0M0 X0I4LAkgICAgLyogSFNXKyAqLworCisJLyogR2VuOCsgKi8KKwlJOTE1X09BX0ZPUk1BVF9BMTIs CisJSTkxNV9PQV9GT1JNQVRfQTEyX0I4X0M4LAorCUk5MTVfT0FfRk9STUFUX0EzMnU0MF9BNHUz Ml9COF9DOCwKCiAJSTkxNV9PQV9GT1JNQVRfTUFYCSAgICAvKiBub24tQUJJICovCiB9OwotLQoy LjExLjAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50 ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBz Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==