From mboxrd@z Thu Jan 1 00:00:00 1970 From: Robert Bragg Subject: [PATCH v3 4/7] drm/i915/perf: Add OA unit support for Gen 8+ Date: Wed, 5 Apr 2017 17:23:17 +0100 Message-ID: <20170405162320.30094-5-robert@sixbynine.org> References: <20170405162320.30094-1-robert@sixbynine.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wr0-x22d.google.com (mail-wr0-x22d.google.com [IPv6:2a00:1450:400c:c0c::22d]) by gabe.freedesktop.org (Postfix) with ESMTPS id 594816E836 for ; Wed, 5 Apr 2017 16:23:43 +0000 (UTC) Received: by mail-wr0-x22d.google.com with SMTP id t20so22360702wra.1 for ; Wed, 05 Apr 2017 09:23:43 -0700 (PDT) In-Reply-To: <20170405162320.30094-1-robert@sixbynine.org> 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 RW5hYmxlcyBhY2Nlc3MgdG8gT0EgdW5pdCBtZXRyaWNzIGZvciBCRFcsIENIViwgU0tMIGFuZCBC WFQgd2hpY2ggYWxsCnNoYXJlIChtb3JlLW9yLWxlc3MpIHRoZSBzYW1lIE9BIHVuaXQgZGVzaWdu LgoKT2YgcGFydGljdWxhciBub3RlIGluIGNvbXBhcmlzb24gdG8gSGFzd2VsbDogc29tZSBPQSB1 bml0IEhXIGNvbmZpZwpzdGF0ZSBoYXMgYmVjb21lIHBlci1jb250ZXh0IHN0YXRlIGFuZCBhcyBh IGNvbnNlcXVlbmNlIGl0IGlzIHNvbWV3aGF0Cm1vcmUgY29tcGxpY2F0ZWQgdG8gbWFuYWdlIHN5 bmNocm9ub3VzIHN0YXRlIGNoYW5nZXMgZnJvbSB0aGUgY3B1IHdoaWxlCnRoZXJlJ3Mgbm8gZ3Vh cmFudGVlIG9mIHdoYXQgY29udGV4dCAoaWYgYW55KSBpcyBjdXJyZW50bHkgYWN0aXZlbHkKcnVu bmluZyBvbiB0aGUgZ3B1LgoKVGhlIHBlcmlvZGljIHNhbXBsaW5nIGZyZXF1ZW5jeSB3aGljaCBj YW4gYmUgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3IKc3lzdGVtLXdpZGUgYW5hbHlzaXMgKGFzIG9w cG9zZWQgdG8gY29tbWFuZCBzdHJlYW0gc3luY2hyb25pc2VkCk1JX1JFUE9SVF9QRVJGX0NPVU5U IGNvbW1hbmRzKSBpcyBwZXJoYXBzIHRoZSBtb3N0IHN1cnByaXNpbmcgc3RhdGUgdG8KaGF2ZSBi ZWNvbWUgcGVyLWNvbnRleHQgc2F2ZSBhbmQgcmVzdG9yZWQgKHdoaWxlIHRoZSBPQUJVRkZFUgpk ZXN0aW5hdGlvbiBpcyBzdGlsbCBhIHNoYXJlZCwgc3lzdGVtLXdpZGUgcmVzb3VyY2UpLgoKVGhp cyBzdXBwb3J0IGZvciBnZW44KyB0YWtlcyBjYXJlIHRvIGNvbnNpZGVyIGEgbnVtYmVyIG9mIHRp bWluZwpjaGFsbGVuZ2VzIGludm9sdmVkIGluIHN5bmNocm9ub3VzbHkgdXBkYXRpbmcgcGVyLWNv bnRleHQgc3RhdGUKcHJpbWFyaWx5IGJ5IHByb2dyYW1taW5nIGFsbCBjb25maWcgc3RhdGUgZnJv bSB0aGUgY3B1IGFuZCB1cGRhdGluZyBhbGwKY3VycmVudCBhbmQgc2F2ZWQgY29udGV4dHMgc3lu Y2hyb25vdXNseSB3aGlsZSB0aGUgT0EgdW5pdCBpcyBzdGlsbApkaXNhYmxlZC4KClRoZSBkcml2 ZXIgaW50ZW50aW9uYWxseSBhdm9pZHMgZGVwZW5kaW5nIG9uIGNvbW1hbmQgc3RyZWFtZXIKcHJv Z3JhbW1pbmcgdG8gdXBkYXRlIE9BIHN0YXRlIGNvbnNpZGVyaW5nIHRoZSBsYWNrIG9mIHN5bmNo cm9uaXphdGlvbgpiZXR3ZWVuIHRoZSBhdXRvbWF0aWMgbG9hZGluZyBvZiBPQUNUWENPTlRST0wg c3RhdGUgKHRoYXQgaW5jbHVkZXMgdGhlCnBlcmlvZGljIHNhbXBsaW5nIHN0YXRlIGFuZCBlbmFi bGUgc3RhdGUpIG9uIGNvbnRleHQgcmVzdG9yZSBhbmQgdGhlCnBhcnNpbmcgb2YgYW55IGdlbmVy YWwgcHVycG9zZSBCQiB0aGUgZHJpdmVyIGNhbiBjb250cm9sLiBJLmUuIHRoaXMKaW1wbGVtZW50 YXRpb24gaXMgY2FyZWZ1bCB0byBhdm9pZCB0aGUgcG9zc2liaWxpdHkgb2YgYSBjb250ZXh0IHJl c3RvcmUKdGVtcG9yYXJpbHkgZW5hYmxpbmcgYW55IG91dC1vZi1kYXRlIHBlcmlvZGljIHNhbXBs aW5nIHN0YXRlLiBJbgphZGRpdGlvbiB0byB0aGUgcmlzayBvZiB0cmFuc2llbnRseS1vdXQtb2Yt ZGF0ZSBzdGF0ZSBiZWluZyBsb2FkZWQKYXV0b21hdGljYWxseTsgdGhlcmUgYXJlIGFsc28gaW50 ZXJuYWwgSFcgbGF0ZW5jaWVzIGludm9sdmVkIGluIHRoZQpsb2FkaW5nIG9mIE1VWCBjb25maWd1 cmF0aW9ucyB3aGljaCB3b3VsZCBiZSBkaWZmaWN1bHQgdG8gYWNjb3VudCBmb3IKZnJvbSB0aGUg Y29tbWFuZCBzdHJlYW1lciAoYW5kIHdlIG9ubHkgd2FudCB0byBlbmFibGUgdGhlIHVuaXQgd2hl biBvbmNlCnRoZSBNVVggY29uZmlndXJhdGlvbiBpcyBjb21wbGV0ZSkuCgpTaW5jZSB0aGUgR2Vu OCsgT0EgdW5pdCBkZXNpZ24gbm8gbG9uZ2VyIHN1cHBvcnRzIGNsb2NrIGdhdGluZyB0aGUgdW5p dApvZmYgZm9yIGEgc2luZ2xlIGdpdmVuIGNvbnRleHQgKHdoaWNoIGVmZmVjdGl2ZWx5IHN0b3Bw ZWQgYW55IHByb2dyZXNzCm9mIGNvdW50ZXJzIHdoaWxlIGFueSBvdGhlciBjb250ZXh0IHdhcyBy dW5uaW5nKSBhbmQgaW5zdGVhZCBzdXBwb3J0cwp0YWdnaW5nIE9BIHJlcG9ydHMgd2l0aCBhIGNv bnRleHQgSUQgZm9yIGZpbHRlcmluZyBvbiB0aGUgQ1BVLCBpdCBtZWFucwp3ZSBjYW4gbm8gbG9u Z2VyIGhpZGUgdGhlIHN5c3RlbS13aWRlIHByb2dyZXNzIG9mIGNvdW50ZXJzIGZyb20gYQpub24t cHJpdmlsZWdlZCBhcHBsaWNhdGlvbiBvbmx5IGludGVyZXN0ZWQgaW4gbWV0cmljcyBmb3IgaXRz IG93bgpjb250ZXh0LiBBbHRob3VnaCB3ZSBjb3VsZCB0aGVvcmV0aWNhbGx5IHRyeSBhbmQgc3Vi dHJhY3QgdGhlIHByb2dyZXNzCm9mIG90aGVyIGNvbnRleHRzIGJlZm9yZSBmb3J3YXJkaW5nIHJl cG9ydHMgdmlhIHJlYWQoKSB3ZSBhcmVuJ3QgaW4gYQpwb3NpdGlvbiB0byBmaWx0ZXIgcmVwb3J0 cyBjYXB0dXJlZCB2aWEgTUlfUkVQT1JUX1BFUkZfQ09VTlQgY29tbWFuZHMuCkFzIGEgcmVzdWx0 LCBmb3IgR2VuOCssIHdlIGFsd2F5cyByZXF1aXJlIHRoZQpkZXYuaTkxNS5wZXJmX3N0cmVhbV9w YXJhbm9pZCB0byBiZSB1bnNldCBmb3IgYW55IGFjY2VzcyB0byBPQSBtZXRyaWNzCmlmIG5vdCBy b290LgoKU2lnbmVkLW9mZi1ieTogUm9iZXJ0IEJyYWdnIDxyb2JlcnRAc2l4YnluaW5lLm9yZz4K LS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgICAgICAgfCAgNDUgKy0KIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuaCB8ICAgMSArCiBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X3BlcmYuYyAgICAgICAgfCA5MzggKysrKysrKysrKysrKysrKysrKysr KysrKysrKystLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmggICAgICAgICB8ICAy MiArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYyAgICAgICAgfCAgIDUgKwogaW5j bHVkZS91YXBpL2RybS9pOTE1X2RybS5oICAgICAgICAgICAgIHwgIDE5ICstCiA2IGZpbGVzIGNo YW5nZWQsIDkzNyBpbnNlcnRpb25zKCspLCA5MyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9kcnYuaAppbmRleCA5YzM3YjczYWM3YWMuLjNhMjJiNmZkMGVlNiAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2Rydi5oCkBAIC0yMDY3LDkgKzIwNjcsMTcgQEAgc3RydWN0IGk5MTVfb2Ffb3BzIHsKIAl2 b2lkICgqaW5pdF9vYV9idWZmZXIpKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7 CiAKIAkvKioKLQkgKiBAZW5hYmxlX21ldHJpY19zZXQ6IEFwcGxpZXMgYW55IE1VWCBjb25maWd1 cmF0aW9uIHRvIHNldCB1cCB0aGUKLQkgKiBCb29sZWFuIGFuZCBDdXN0b20gKEIvQykgY291bnRl cnMgdGhhdCBhcmUgcGFydCBvZiB0aGUgY291bnRlcgotCSAqIHJlcG9ydHMgYmVpbmcgc2FtcGxl ZC4gTWF5IGFwcGx5IHN5c3RlbSBjb25zdHJhaW50cyBzdWNoIGFzCisJICogQHNlbGVjdF9tZXRy aWNfc2V0OiBUaGUgYXV0byBnZW5lcmF0ZWQgY29kZSB0aGF0IGNoZWNrcyB3aGV0aGVyIGEKKwkg KiByZXF1ZXN0ZWQgT0EgY29uZmlnIGlzIGFwcGxpY2FibGUgdG8gdGhlIHN5c3RlbSBhbmQgaWYg c28gc2V0cyB1cAorCSAqIHRoZSBtdXgsIG9hIGFuZCBmbGV4IGV1IHJlZ2lzdGVyIGNvbmZpZyBw b2ludGVycyBhY2NvcmRpbmcgdG8gdGhlCisJICogY3VycmVudCBkZXZfcHJpdi0+cGVyZi5vYS5t ZXRyaWNzX3NldC4KKwkgKi8KKwlpbnQgKCpzZWxlY3RfbWV0cmljX3NldCkoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2KTsKKworCS8qKgorCSAqIEBlbmFibGVfbWV0cmljX3NldDog U2VsZWN0cyBhbmQgYXBwbGllcyBhbnkgTVVYIGNvbmZpZ3VyYXRpb24gdG8gc2V0CisJICogdXAg dGhlIEJvb2xlYW4gYW5kIEN1c3RvbSAoQi9DKSBjb3VudGVycyB0aGF0IGFyZSBwYXJ0IG9mIHRo ZQorCSAqIGNvdW50ZXIgcmVwb3J0cyBiZWluZyBzYW1wbGVkLiBNYXkgYXBwbHkgc3lzdGVtIGNv bnN0cmFpbnRzIHN1Y2ggYXMKIAkgKiBkaXNhYmxpbmcgRVUgY2xvY2sgZ2F0aW5nIGFzIHJlcXVp cmVkLgogCSAqLwogCWludCAoKmVuYWJsZV9tZXRyaWNfc2V0KShzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYpOwpAQCAtMjEwMCwyMCArMjEwOCwxMyBAQCBzdHJ1Y3QgaTkxNV9vYV9v cHMgewogCQkgICAgc2l6ZV90ICpvZmZzZXQpOwogCiAJLyoqCi0JICogQG9hX2J1ZmZlcl9jaGVj azogQ2hlY2sgZm9yIE9BIGJ1ZmZlciBkYXRhICsgdXBkYXRlIHRhaWwKLQkgKgotCSAqIFRoaXMg aXMgZWl0aGVyIGNhbGxlZCB2aWEgZm9wcyBvciB0aGUgcG9sbCBjaGVjayBocnRpbWVyIChhdG9t aWMKLQkgKiBjdHgpIHdpdGhvdXQgYW55IGxvY2tzIHRha2VuLgorCSAqIEBvYV9od190YWlsX3Jl YWQ6IHJlYWQgdGhlIE9BIHRhaWwgcG9pbnRlciByZWdpc3RlcgogCSAqCi0JICogSXQncyBzYWZl IHRvIHJlYWQgT0EgY29uZmlnIHN0YXRlIGhlcmUgdW5sb2NrZWQsIGFzc3VtaW5nIHRoYXQgdGhp cwotCSAqIGlzIG9ubHkgY2FsbGVkIHdoaWxlIHRoZSBzdHJlYW0gaXMgZW5hYmxlZCwgd2hpbGUg dGhlIGdsb2JhbCBPQQotCSAqIGNvbmZpZ3VyYXRpb24gY2FuJ3QgYmUgbW9kaWZpZWQuCi0JICoK LQkgKiBFZmZpY2llbmN5IGlzIG1vcmUgaW1wb3J0YW50IHRoYW4gYXZvaWRpbmcgc29tZSBmYWxz ZSBwb3NpdGl2ZXMKLQkgKiBoZXJlLCB3aGljaCB3aWxsIGJlIGhhbmRsZWQgZ3JhY2VmdWxseSAt IGxpa2VseSByZXN1bHRpbmcgaW4gYW4KLQkgKiAlRUFHQUlOIGVycm9yIGZvciB1c2Vyc3BhY2Uu CisJICogSW4gcGFydGljdWxhciB0aGlzIGVuYWJsZXMgdXMgdG8gc2hhcmUgYWxsIHRoZSBmaWRk bHkgY29kZSBmb3IKKwkgKiBoYW5kbGluZyB0aGUgT0EgdW5pdCB0YWlsIHBvaW50ZXIgcmFjZSB0 aGF0IGFmZmVjdHMgbXVsdGlwbGUKKwkgKiBnZW5lcmF0aW9ucy4KIAkgKi8KLQlib29sICgqb2Ff YnVmZmVyX2NoZWNrKShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOworCXUzMiAo Km9hX2h3X3RhaWxfcmVhZCkoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKIH07 CiAKIHN0cnVjdCBpbnRlbF9jZGNsa19zdGF0ZSB7CkBAIC0yNDc1LDYgKzI0NzYsNyBAQCBzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSB7CiAJCQlzdHJ1Y3QgewogCQkJCXN0cnVjdCBpOTE1X3ZtYSAq dm1hOwogCQkJCXU4ICp2YWRkcjsKKwkJCQl1MzIgbGFzdF9jdHhfaWQ7CiAJCQkJaW50IGZvcm1h dDsKIAkJCQlpbnQgZm9ybWF0X3NpemU7CiAKQEAgLTI1NDQsNiArMjU0NiwxNCBAQCBzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSB7CiAJCQl9IG9hX2J1ZmZlcjsKIAogCQkJdTMyIGdlbjdfbGF0Y2hl ZF9vYXN0YXR1czE7CisJCQl1MzIgY3R4X29hY3R4Y3RybF9vZmZzZXQ7CisJCQl1MzIgY3R4X2Zs ZXhldTBfb2Zmc2V0OworCisJCQkvKiBUaGUgUlBUX0lEL3JlYXNvbiBmaWVsZCBmb3IgR2VuOCsg aW5jbHVkZXMgYSBiaXQKKwkJCSAqIHRvIGRldGVybWluZSBpZiB0aGUgQ1RYIElEIGluIHRoZSBy ZXBvcnQgaXMgdmFsaWQKKwkJCSAqIGJ1dCB0aGUgc3BlY2lmaWMgYml0IGRpZmZlcnMgYmV0d2Vl biBHZW4gOCBhbmQgOQorCQkJICovCisJCQl1MzIgZ2VuOF92YWxpZF9jdHhfYml0OwogCiAJCQlz dHJ1Y3QgaTkxNV9vYV9vcHMgb3BzOwogCQkJY29uc3Qgc3RydWN0IGk5MTVfb2FfZm9ybWF0ICpv YV9mb3JtYXRzOwpAQCAtMjg1NCw2ICsyODY0LDggQEAgaW50ZWxfaW5mbyhjb25zdCBzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAjZGVmaW5lIElTX0tCTF9VTFgoZGV2X3ByaXYp CShJTlRFTF9ERVZJRChkZXZfcHJpdikgPT0gMHg1OTBFIHx8IFwKIAkJCQkgSU5URUxfREVWSUQo ZGV2X3ByaXYpID09IDB4NTkxNSB8fCBcCiAJCQkJIElOVEVMX0RFVklEKGRldl9wcml2KSA9PSAw eDU5MUUpCisjZGVmaW5lIElTX1NLTF9HVDIoZGV2X3ByaXYpCShJU19TS1lMQUtFKGRldl9wcml2 KSAmJiBcCisJCQkJIChJTlRFTF9ERVZJRChkZXZfcHJpdikgJiAweDAwRjApID09IDB4MDAxMCkK ICNkZWZpbmUgSVNfU0tMX0dUMyhkZXZfcHJpdikJKElTX1NLWUxBS0UoZGV2X3ByaXYpICYmIFwK IAkJCQkgKElOVEVMX0RFVklEKGRldl9wcml2KSAmIDB4MDBGMCkgPT0gMHgwMDIwKQogI2RlZmlu ZSBJU19TS0xfR1Q0KGRldl9wcml2KQkoSVNfU0tZTEFLRShkZXZfcHJpdikgJiYgXApAQCAtMzYw NSw2ICszNjE3LDkgQEAgaTkxNV9nZW1fY29udGV4dF9sb29rdXBfdGltZWxpbmUoc3RydWN0IGk5 MTVfZ2VtX2NvbnRleHQgKmN0eCwKIAogaW50IGk5MTVfcGVyZl9vcGVuX2lvY3RsKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCQkgc3RydWN0IGRybV9maWxlICpmaWxlKTsK K3ZvaWQgaTkxNV9vYV91cGRhdGVfcmVnX3N0YXRlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSwKKwkJCSAgICAgIHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgsCisJCQkgICAgICB1 aW50MzJfdCAqcmVnX3N0YXRlKTsKIAogLyogaTkxNV9nZW1fZXZpY3QuYyAqLwogaW50IF9fbXVz dF9jaGVjayBpOTE1X2dlbV9ldmljdF9zb21ldGhpbmcoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFj ZSAqdm0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jb250ZXh0 LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jb250ZXh0LmgKaW5kZXggNGFmMmFi OTQ1NThiLi4zZjRjZTczYmVhNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtX2NvbnRleHQuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jb250 ZXh0LmgKQEAgLTE1MSw2ICsxNTEsNyBAQCBzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCB7CiAJCXU2 NCBscmNfZGVzYzsKIAkJaW50IHBpbl9jb3VudDsKIAkJYm9vbCBpbml0aWFsaXNlZDsKKwkJYXRv bWljX3Qgb2Ffc3RhdGVfZGlydHk7CiAJfSBlbmdpbmVbSTkxNV9OVU1fRU5HSU5FU107CiAKIAkv KiogcmluZ19zaXplOiBzaXplIGZvciBhbGxvY2F0aW5nIHRoZSBwZXItZW5naW5lIHJpbmcgYnVm ZmVyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BlcmYuYyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGVyZi5jCmluZGV4IDMyNzdhNTJjZTk4ZS4uOThlYjY0 MTViNjNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BlcmYuYworKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BlcmYuYwpAQCAtMTk2LDYgKzE5NiwxMiBAQAog CiAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKICNpbmNsdWRlICJpOTE1X29hX2hzdy5oIgorI2luY2x1 ZGUgImk5MTVfb2FfYmR3LmgiCisjaW5jbHVkZSAiaTkxNV9vYV9jaHYuaCIKKyNpbmNsdWRlICJp OTE1X29hX3NrbGd0Mi5oIgorI2luY2x1ZGUgImk5MTVfb2Ffc2tsZ3QzLmgiCisjaW5jbHVkZSAi aTkxNV9vYV9za2xndDQuaCIKKyNpbmNsdWRlICJpOTE1X29hX2J4dC5oIgogCiAvKiBIVyByZXF1 aXJlcyB0aGlzIHRvIGJlIGEgcG93ZXIgb2YgdHdvLCBiZXR3ZWVuIDEyOGsgYW5kIDE2TSwgdGhv dWdoIGRyaXZlcgogICogaXMgY3VycmVudGx5IGdlbmVyYWxseSBkZXNpZ25lZCBhc3N1bWluZyB0 aGUgbGFyZ2VzdCAxNk0gc2l6ZSBpcyB1c2VkIHN1Y2gKQEAgLTIxNSw3ICsyMjEsNyBAQAogICoK ICAqIEFsdGhvdWdoIHRoaXMgY2FuIGJlIG9ic2VydmVkIGV4cGxpY2l0bHkgd2hpbGUgY29weWlu ZyByZXBvcnRzIHRvIHVzZXJzcGFjZQogICogYnkgY2hlY2tpbmcgZm9yIGEgemVyb2VkIHJlcG9y dC1pZCBmaWVsZCBpbiB0YWlsIHJlcG9ydHMsIHdlIHdhbnQgdG8gYWNjb3VudAotICogZm9yIHRo aXMgZWFybGllciwgYXMgcGFydCBvZiB0aGUgX29hX2J1ZmZlcl9jaGVjayB0byBhdm9pZCBsb3Rz IG9mIHJlZHVuZGFudAorICogZm9yIHRoaXMgZWFybGllciwgYXMgcGFydCBvZiB0aGUgb2FfYnVm ZmVyX2NoZWNrIHRvIGF2b2lkIGxvdHMgb2YgcmVkdW5kYW50CiAgKiByZWFkKCkgYXR0ZW1wdHMu CiAgKgogICogSW4gZWZmZWN0IHdlIGRlZmluZSBhIHRhaWwgcG9pbnRlciBmb3IgcmVhZGluZyB0 aGF0IGxhZ3MgdGhlIHJlYWwgdGFpbApAQCAtMjM3LDcgKzI0Myw3IEBACiAgKiBpbmRpY2F0ZXMg dGhhdCBhbiB1cGRhdGVkIHRhaWwgcG9pbnRlciBpcyBuZWVkZWQuCiAgKgogICogTW9zdCBvZiB0 aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBmb3IgdGhpcyB3b3JrYXJvdW5kIGFyZSBpbgotICog Z2VuN19vYV9idWZmZXJfY2hlY2tfdW5sb2NrZWQoKSBhbmQgZ2VuN19hcHBhbmRfb2FfcmVwb3J0 cygpCisgKiBvYV9idWZmZXJfY2hlY2tfdW5sb2NrZWQoKSBhbmQgX2FwcGVuZF9vYV9yZXBvcnRz KCkKICAqCiAgKiBOb3RlIGZvciBwb3N0ZXJpdHk6IHByZXZpb3VzbHkgdGhlIGRyaXZlciB1c2Vk IHRvIGRlZmluZSBhbiBlZmZlY3RpdmUgdGFpbAogICogcG9pbnRlciB0aGF0IGxhZ2dlZCB0aGUg cmVhbCBwb2ludGVyIGJ5IGEgJ3RhaWwgbWFyZ2luJyBtZWFzdXJlZCBpbiBieXRlcwpAQCAtMjcy LDYgKzI3OCwxMyBAQCBzdGF0aWMgdTMyIGk5MTVfcGVyZl9zdHJlYW1fcGFyYW5vaWQgPSB0cnVl OwogCiAjZGVmaW5lIElOVkFMSURfQ1RYX0lEIDB4ZmZmZmZmZmYKIAorLyogT24gR2VuOCsgYXV0 b21hdGljYWxseSB0cmlnZ2VyZWQgT0EgcmVwb3J0cyBpbmNsdWRlIGEgJ3JlYXNvbicgZmllbGQu Li4gKi8KKyNkZWZpbmUgT0FSRVBPUlRfUkVBU09OX01BU0sgICAgICAgICAgIDB4M2YKKyNkZWZp bmUgT0FSRVBPUlRfUkVBU09OX1NISUZUICAgICAgICAgIDE5CisjZGVmaW5lIE9BUkVQT1JUX1JF QVNPTl9USU1FUiAgICAgICAgICAoMTw8MCkKKyNkZWZpbmUgT0FSRVBPUlRfUkVBU09OX0NUWF9T V0lUQ0ggICAgICgxPDwzKQorI2RlZmluZSBPQVJFUE9SVF9SRUFTT05fQ0xLX1JBVElPICAgICAg KDE8PDUpCisKIAogLyogRm9yIHN5c2N0bCBwcm9jX2RvaW50dmVjX21pbm1heCBvZiBpOTE1X29h X21heF9zYW1wbGVfcmF0ZQogICoKQEAgLTMwMyw2ICszMTYsMTMgQEAgc3RhdGljIHN0cnVjdCBp OTE1X29hX2Zvcm1hdCBoc3dfb2FfZm9ybWF0c1tJOTE1X09BX0ZPUk1BVF9NQVhdID0gewogCVtJ OTE1X09BX0ZPUk1BVF9DNF9COF0JICAgID0geyA3LCA2NCB9LAogfTsKIAorc3RhdGljIHN0cnVj dCBpOTE1X29hX2Zvcm1hdCBnZW44X3BsdXNfb2FfZm9ybWF0c1tJOTE1X09BX0ZPUk1BVF9NQVhd ID0geworCVtJOTE1X09BX0ZPUk1BVF9BMTJdCQkgICAgPSB7IDAsIDY0IH0sCisJW0k5MTVfT0Ff Rk9STUFUX0ExMl9COF9DOF0JICAgID0geyAyLCAxMjggfSwKKwlbSTkxNV9PQV9GT1JNQVRfQTMy dTQwX0E0dTMyX0I4X0M4XSA9IHsgNSwgMjU2IH0sCisJW0k5MTVfT0FfRk9STUFUX0M0X0I4XQkJ ICAgID0geyA3LCA2NCB9LAorfTsKKwogI2RlZmluZSBTQU1QTEVfT0FfUkVQT1JUICAgICAgKDE8 PDApCiAKIC8qKgpAQCAtMzMyLDggKzM1MiwyMCBAQCBzdHJ1Y3QgcGVyZl9vcGVuX3Byb3BlcnRp ZXMgewogCWludCBvYV9wZXJpb2RfZXhwb25lbnQ7CiB9OwogCitzdGF0aWMgdTMyIGdlbjhfb2Ff aHdfdGFpbF9yZWFkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3sKKwlyZXR1 cm4gSTkxNV9SRUFEKEdFTjhfT0FUQUlMUFRSKSAmIEdFTjhfT0FUQUlMUFRSX01BU0s7Cit9CisK K3N0YXRpYyB1MzIgZ2VuN19vYV9od190YWlsX3JlYWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2KQoreworCXUzMiBvYXN0YXR1czEgPSBJOTE1X1JFQUQoR0VON19PQVNUQVRVUzEp OworCisJcmV0dXJuIG9hc3RhdHVzMSAmIEdFTjdfT0FTVEFUVVMxX1RBSUxfTUFTSzsKK30KKwog LyoqCi0gKiBnZW43X29hX2J1ZmZlcl9jaGVja191bmxvY2tlZCAtIGNoZWNrIGZvciBkYXRhIGFu ZCB1cGRhdGUgdGFpbCBwdHIgc3RhdGUKKyAqIG9hX2J1ZmZlcl9jaGVja191bmxvY2tlZCAtIGNo ZWNrIGZvciBkYXRhIGFuZCB1cGRhdGUgdGFpbCBwdHIgc3RhdGUKICAqIEBkZXZfcHJpdjogaTkx NSBkZXZpY2UgaW5zdGFuY2UKICAqCiAgKiBUaGlzIGlzIGVpdGhlciBjYWxsZWQgdmlhIGZvcHMg KGZvciBibG9ja2luZyByZWFkcyBpbiB1c2VyIGN0eCkgb3IgdGhlIHBvbGwKQEAgLTM1NiwxMiAr Mzg4LDExIEBAIHN0cnVjdCBwZXJmX29wZW5fcHJvcGVydGllcyB7CiAgKgogICogUmV0dXJuczog JXRydWUgaWYgdGhlIE9BIGJ1ZmZlciBjb250YWlucyBkYXRhLCBlbHNlICVmYWxzZQogICovCi1z dGF0aWMgYm9vbCBnZW43X29hX2J1ZmZlcl9jaGVja191bmxvY2tlZChzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYpCitzdGF0aWMgYm9vbCBvYV9idWZmZXJfY2hlY2tfdW5sb2NrZWQo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogewogCWludCByZXBvcnRfc2l6ZSA9 IGRldl9wcml2LT5wZXJmLm9hLm9hX2J1ZmZlci5mb3JtYXRfc2l6ZTsKIAl1bnNpZ25lZCBsb25n IGZsYWdzOwogCXVuc2lnbmVkIGludCBhZ2VkX2lkeDsKLQl1MzIgb2FzdGF0dXMxOwogCXUzMiBo ZWFkLCBod190YWlsLCBhZ2VkX3RhaWwsIGFnaW5nX3RhaWw7CiAJdTY0IG5vdzsKIApAQCAtMzgx LDggKzQxMiw3IEBAIHN0YXRpYyBib29sIGdlbjdfb2FfYnVmZmVyX2NoZWNrX3VubG9ja2VkKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAlhZ2VkX3RhaWwgPSBkZXZfcHJpdi0+ cGVyZi5vYS5vYV9idWZmZXIudGFpbHNbYWdlZF9pZHhdLm9mZnNldDsKIAlhZ2luZ190YWlsID0g ZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVmZmVyLnRhaWxzWyFhZ2VkX2lkeF0ub2Zmc2V0OwogCi0J b2FzdGF0dXMxID0gSTkxNV9SRUFEKEdFTjdfT0FTVEFUVVMxKTsKLQlod190YWlsID0gb2FzdGF0 dXMxICYgR0VON19PQVNUQVRVUzFfVEFJTF9NQVNLOworCWh3X3RhaWwgPSBkZXZfcHJpdi0+cGVy Zi5vYS5vcHMub2FfaHdfdGFpbF9yZWFkKGRldl9wcml2KTsKIAogCS8qIFRoZSB0YWlsIHBvaW50 ZXIgaW5jcmVhc2VzIGluIDY0IGJ5dGUgaW5jcmVtZW50cywKIAkgKiBub3QgaW4gcmVwb3J0X3Np emUgc3RlcHMuLi4KQEAgLTQwNCw2ICs0MzQsNyBAQCBzdGF0aWMgYm9vbCBnZW43X29hX2J1ZmZl cl9jaGVja191bmxvY2tlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJaWYg KGFnaW5nX3RhaWwgIT0gSU5WQUxJRF9UQUlMX1BUUiAmJgogCSAgICAoKG5vdyAtIGRldl9wcml2 LT5wZXJmLm9hLm9hX2J1ZmZlci5hZ2luZ190aW1lc3RhbXApID4KIAkgICAgIE9BX1RBSUxfTUFS R0lOX05TRUMpKSB7CisKIAkJYWdlZF9pZHggXj0gMTsKIAkJZGV2X3ByaXYtPnBlcmYub2Eub2Ff YnVmZmVyLmFnZWRfdGFpbF9pZHggPSBhZ2VkX2lkeDsKIApAQCAtNTUzLDYgKzU4NCwyODQgQEAg c3RhdGljIGludCBhcHBlbmRfb2Ffc2FtcGxlKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJl YW0sCiAgKgogICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9u IGZhaWx1cmUuCiAgKi8KK3N0YXRpYyBpbnQgZ2VuOF9hcHBlbmRfb2FfcmVwb3J0cyhzdHJ1Y3Qg aTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAorCQkJCSAgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQkg IHNpemVfdCBjb3VudCwKKwkJCQkgIHNpemVfdCAqb2Zmc2V0KQoreworCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9IHN0cmVhbS0+ZGV2X3ByaXY7CisJaW50IHJlcG9ydF9zaXpl ID0gZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVmZmVyLmZvcm1hdF9zaXplOworCXU4ICpvYV9idWZf YmFzZSA9IGRldl9wcml2LT5wZXJmLm9hLm9hX2J1ZmZlci52YWRkcjsKKwl1MzIgZ3R0X29mZnNl dCA9IGk5MTVfZ2d0dF9vZmZzZXQoZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVmZmVyLnZtYSk7CisJ dTMyIG1hc2sgPSAoT0FfQlVGRkVSX1NJWkUgLSAxKTsKKwlzaXplX3Qgc3RhcnRfb2Zmc2V0ID0g Km9mZnNldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBhZ2VkX3RhaWxf aWR4OworCXUzMiBoZWFkLCB0YWlsOworCXUzMiB0YWtlbjsKKwlpbnQgcmV0ID0gMDsKKworCWlm IChXQVJOX09OKCFzdHJlYW0tPmVuYWJsZWQpKQorCQlyZXR1cm4gLUVJTzsKKworCXNwaW5fbG9j a19pcnFzYXZlKCZkZXZfcHJpdi0+cGVyZi5vYS5vYV9idWZmZXIucHRyX2xvY2ssIGZsYWdzKTsK KworCWhlYWQgPSBkZXZfcHJpdi0+cGVyZi5vYS5vYV9idWZmZXIuaGVhZDsKKwlhZ2VkX3RhaWxf aWR4ID0gZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVmZmVyLmFnZWRfdGFpbF9pZHg7CisJdGFpbCA9 IGRldl9wcml2LT5wZXJmLm9hLm9hX2J1ZmZlci50YWlsc1thZ2VkX3RhaWxfaWR4XS5vZmZzZXQ7 CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+cGVyZi5vYS5vYV9idWZmZXIu cHRyX2xvY2ssIGZsYWdzKTsKKworCS8qIEFuIGludmFsaWQgdGFpbCBwb2ludGVyIGhlcmUgbWVh bnMgd2UncmUgc3RpbGwgd2FpdGluZyBmb3IgdGhlIHBvbGwKKwkgKiBocnRpbWVyIGNhbGxiYWNr IHRvIGdpdmUgdXMgYSBwb2ludGVyCisJICovCisJaWYgKHRhaWwgPT0gSU5WQUxJRF9UQUlMX1BU UikKKwkJcmV0dXJuIC1FQUdBSU47CisKKwkvKiBOQjogb2FfYnVmZmVyLmhlYWQvdGFpbCBpbmNs dWRlIHRoZSBndHRfb2Zmc2V0IHdoaWNoIHdlIGRvbid0IHdhbnQKKwkgKiB3aGlsZSBpbmRleGlu ZyByZWxhdGl2ZSB0byBvYV9idWZfYmFzZS4KKwkgKi8KKwloZWFkIC09IGd0dF9vZmZzZXQ7CisJ dGFpbCAtPSBndHRfb2Zmc2V0OworCisJLyogQW4gb3V0IG9mIGJvdW5kcyBvciBtaXNhbGlnbmVk IGhlYWQgb3IgdGFpbCBwb2ludGVyIGltcGxpZXMgYSBkcml2ZXIKKwkgKiBidWcgc2luY2Ugd2Ug dmFsaWRhdGUgKyBhbGlnbiB0aGUgdGFpbCBwb2ludGVycyB3ZSByZWFkIGZyb20gdGhlCisJICog aGFyZHdhcmUgYW5kIHdlIGFyZSBpbiBmdWxsIGNvbnRyb2wgb2YgdGhlIGhlYWQgcG9pbnRlciB3 aGljaCBzaG91bGQKKwkgKiBvbmx5IGJlIGluY3JlbWVudGVkIGJ5IG11bHRpcGxlcyBvZiB0aGUg cmVwb3J0IHNpemUgKG5vdGFibHkgYWxzbworCSAqIGFsbCBhIHBvd2VyIG9mIHR3bykuCisJICov CisJaWYgKFdBUk5fT05DRShoZWFkID4gT0FfQlVGRkVSX1NJWkUgfHwgaGVhZCAlIHJlcG9ydF9z aXplIHx8CisJCSAgICAgIHRhaWwgPiBPQV9CVUZGRVJfU0laRSB8fCB0YWlsICUgcmVwb3J0X3Np emUsCisJCSAgICAgICJJbmNvbnNpc3RlbnQgT0EgYnVmZmVyIHBvaW50ZXJzOiBoZWFkID0gJXUs IHRhaWwgPSAldVxuIiwKKwkJICAgICAgaGVhZCwgdGFpbCkpCisJCXJldHVybiAtRUlPOworCisK Kwlmb3IgKC8qIG5vbmUgKi87CisJICAgICAodGFrZW4gPSBPQV9UQUtFTih0YWlsLCBoZWFkKSk7 CisJICAgICBoZWFkID0gKGhlYWQgKyByZXBvcnRfc2l6ZSkgJiBtYXNrKSB7CisJCXU4ICpyZXBv cnQgPSBvYV9idWZfYmFzZSArIGhlYWQ7CisJCXUzMiAqcmVwb3J0MzIgPSAodm9pZCAqKXJlcG9y dDsKKwkJdTMyIGN0eF9pZDsKKwkJdTMyIHJlYXNvbjsKKworCQkvKiBBbGwgdGhlIHJlcG9ydCBz aXplcyBmYWN0b3IgbmVhdGx5IGludG8gdGhlIGJ1ZmZlcgorCQkgKiBzaXplIHNvIHdlIG5ldmVy IGV4cGVjdCB0byBzZWUgYSByZXBvcnQgc3BsaXQKKwkJICogYmV0d2VlbiB0aGUgYmVnaW5uaW5n IGFuZCBlbmQgb2YgdGhlIGJ1ZmZlci4KKwkJICoKKwkJICogR2l2ZW4gdGhlIGluaXRpYWwgYWxp Z25tZW50IGNoZWNrIGEgbWlzYWxpZ25tZW50CisJCSAqIGhlcmUgd291bGQgaW1wbHkgYSBkcml2 ZXIgYnVnIHRoYXQgd291bGQgcmVzdWx0CisJCSAqIGluIGFuIG92ZXJydW4uCisJCSAqLworCQlp ZiAoV0FSTl9PTigoT0FfQlVGRkVSX1NJWkUgLSBoZWFkKSA8IHJlcG9ydF9zaXplKSkgeworCQkJ RFJNX0VSUk9SKCJTcHVyaW91cyBPQSBoZWFkIHB0cjogbm9uLWludGVncmFsIHJlcG9ydCBvZmZz ZXRcbiIpOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBUaGUgcmVhc29uIGZpZWxkIGluY2x1ZGVz IGZsYWdzIGlkZW50aWZ5aW5nIHdoYXQKKwkJICogdHJpZ2dlcmVkIHRoaXMgc3BlY2lmaWMgcmVw b3J0IChtb3N0bHkgdGltZXIKKwkJICogdHJpZ2dlcmVkIG9yIGUuZy4gZHVlIHRvIGEgY29udGV4 dCBzd2l0Y2gpLgorCQkgKgorCQkgKiBUaGlzIGZpZWxkIGlzIG5ldmVyIGV4cGVjdGVkIHRvIGJl IHplcm8gc28gd2UgY2FuCisJCSAqIGNoZWNrIHRoYXQgdGhlIHJlcG9ydCBpc24ndCBpbnZhbGlk IGJlZm9yZSBjb3B5aW5nCisJCSAqIGl0IHRvIHVzZXJzcGFjZS4uLgorCQkgKi8KKwkJcmVhc29u ID0gKChyZXBvcnQzMlswXSA+PiBPQVJFUE9SVF9SRUFTT05fU0hJRlQpICYKKwkJCSAgT0FSRVBP UlRfUkVBU09OX01BU0spOworCQlpZiAocmVhc29uID09IDApIHsKKwkJCWlmIChfX3JhdGVsaW1p dCgmZGV2X3ByaXYtPnBlcmYub2Euc3B1cmlvdXNfcmVwb3J0X3JzKSkKKwkJCQlEUk1fTk9URSgi U2tpcHBpbmcgc3B1cmlvdXMsIGludmFsaWQgT0EgcmVwb3J0XG4iKTsKKwkJCWNvbnRpbnVlOwor CQl9CisKKwkJLyogWFhYOiBKdXN0IGtlZXAgdGhlIGxvd2VyIDIxIGJpdHMgZm9yIG5vdyBzaW5j ZSBJJ20gbm90CisJCSAqIGVudGlyZWx5IHN1cmUgaWYgdGhlIEhXIHRvdWNoZXMgYW55IG9mIHRo ZSBoaWdoZXIgYml0cyBpbgorCQkgKiB0aGlzIGZpZWxkCisJCSAqLworCQljdHhfaWQgPSByZXBv cnQzMlsyXSAmIDB4MWZmZmZmOworCisJCS8qIFNxdWFzaCB3aGF0ZXZlciBpcyBpbiB0aGUgQ1RY X0lEIGZpZWxkIGlmIGl0J3MKKwkJICogbWFya2VkIGFzIGludmFsaWQgdG8gYmUgc3VyZSB3ZSBh dm9pZAorCQkgKiBmYWxzZS1wb3NpdGl2ZSwgc2luZ2xlLWNvbnRleHQgZmlsdGVyaW5nIGJlbG93 Li4uCisJCSAqLworCQlpZiAoIShyZXBvcnQzMlswXSAmIGRldl9wcml2LT5wZXJmLm9hLmdlbjhf dmFsaWRfY3R4X2JpdCkpCisJCQljdHhfaWQgPSByZXBvcnQzMlsyXSA9IElOVkFMSURfQ1RYX0lE OworCisJCS8qIE5COiBGb3IgR2VuIDggdGhlIE9BIHVuaXQgbm8gbG9uZ2VyIHN1cHBvcnRzIGNs b2NrIGdhdGluZworCQkgKiBvZmYgZm9yIGEgc3BlY2lmaWMgY29udGV4dCBhbmQgdGhlIGtlcm5l bCBjYW4ndCBzZWN1cmVseQorCQkgKiBzdG9wIHRoZSBjb3VudGVycyBmcm9tIHVwZGF0aW5nIGFz IHN5c3RlbS13aWRlIC8gZ2xvYmFsCisJCSAqIHZhbHVlcy4KKwkJICoKKwkJICogQXV0b21hdGlj IHJlcG9ydHMgbm93IGluY2x1ZGUgYSBjb250ZXh0IElEIHNvIHJlcG9ydHMgY2FuIGJlCisJCSAq IGZpbHRlcmVkIG9uIHRoZSBjcHUgYnV0IGl0J3Mgbm90IHdvcnRoIHRyeWluZyB0bworCQkgKiBh dXRvbWF0aWNhbGx5IHN1YnRyYWN0L2hpZGUgY291bnRlciBwcm9ncmVzcyBmb3Igb3RoZXIKKwkJ ICogY29udGV4dHMgd2hpbGUgZmlsdGVyaW5nIHNpbmNlIHdlIGNhbid0IHN0b3AgdXNlcnNwYWNl CisJCSAqIGlzc3VpbmcgTUlfUkVQT1JUX1BFUkZfQ09VTlQgY29tbWFuZHMgd2hpY2ggd291bGQg c3RpbGwKKwkJICogcHJvdmlkZSBhIHNpZGUtYmFuZCB2aWV3IG9mIHRoZSByZWFsIHZhbHVlcy4K KwkJICoKKwkJICogVG8gYWxsb3cgdXNlcnNwYWNlIChzdWNoIGFzIE1lc2EvR0xfSU5URUxfcGVy Zm9ybWFuY2VfcXVlcnkpCisJCSAqIHRvIG5vcm1hbGl6ZSBjb3VudGVycyBmb3IgYSBzaW5nbGUg ZmlsdGVyZWQgY29udGV4dCB0aGVuIGl0CisJCSAqIG5lZWRzIGJlIGZvcndhcmRlZCBib29rZW5k IGNvbnRleHQtc3dpdGNoIHJlcG9ydHMgc28gdGhhdCBpdAorCQkgKiBjYW4gdHJhY2sgc3dpdGNo ZXMgaW4gYmV0d2VlbiBNSV9SRVBPUlRfUEVSRl9DT1VOVCBjb21tYW5kcworCQkgKiBhbmQgY2Fu IGl0c2VsZiBzdWJ0cmFjdC9pZ25vcmUgdGhlIHByb2dyZXNzIG9mIGNvdW50ZXJzCisJCSAqIGFz c29jaWF0ZWQgd2l0aCBvdGhlciBjb250ZXh0cy4gTm90ZSB0aGF0IHRoZSBoYXJkd2FyZQorCQkg KiBhdXRvbWF0aWNhbGx5IHRyaWdnZXJzIHJlcG9ydHMgd2hlbiBzd2l0Y2hpbmcgdG8gYSBuZXcK KwkJICogY29udGV4dCB3aGljaCBhcmUgdGFnZ2VkIHdpdGggdGhlIElEIG9mIHRoZSBuZXdseSBh Y3RpdmUKKwkJICogY29udGV4dC4gVG8gYXZvaWQgdGhlIGNvbXBsZXhpdHkgKGFuZCBsaWtlbHkg ZnJhZ2lsaXR5KSBvZgorCQkgKiByZWFkaW5nIGFoZWFkIHdoaWxlIHBhcnNpbmcgcmVwb3J0cyB0 byB0cnkgYW5kIG1pbmltaXplCisJCSAqIGZvcndhcmRpbmcgcmVkdW5kYW50IGNvbnRleHQgc3dp dGNoIHJlcG9ydHMgKGkuZS4gYmV0d2VlbgorCQkgKiBvdGhlciwgdW5yZWxhdGVkIGNvbnRleHRz KSB3ZSBzaW1wbHkgZWxlY3QgdG8gZm9yd2FyZCB0aGVtCisJCSAqIGFsbC4KKwkJICoKKwkJICog V2UgZG9uJ3QgcmVseSBzb2xlbHkgb24gdGhlIHJlYXNvbiBmaWVsZCB0byBpZGVudGlmeSBjb250 ZXh0CisJCSAqIHN3aXRjaGVzIHNpbmNlIGl0J3Mgbm90LXVuY29tbW9uIGZvciBwZXJpb2RpYyBz YW1wbGVzIHRvCisJCSAqIGlkZW50aWZ5IGEgc3dpdGNoIGJlZm9yZSBhbnkgJ2NvbnRleHQgc3dp dGNoJyByZXBvcnQuCisJCSAqLworCQlpZiAoIWRldl9wcml2LT5wZXJmLm9hLmV4Y2x1c2l2ZV9z dHJlYW0tPmN0eCB8fAorCQkgICAgZGV2X3ByaXYtPnBlcmYub2Euc3BlY2lmaWNfY3R4X2lkID09 IGN0eF9pZCB8fAorCQkgICAgKGRldl9wcml2LT5wZXJmLm9hLm9hX2J1ZmZlci5sYXN0X2N0eF9p ZCA9PQorCQkgICAgIGRldl9wcml2LT5wZXJmLm9hLnNwZWNpZmljX2N0eF9pZCkgfHwKKwkJICAg IHJlYXNvbiAmIE9BUkVQT1JUX1JFQVNPTl9DVFhfU1dJVENIKSB7CisKKwkJCS8qIFdoaWxlIGZp bHRlcmluZyBmb3IgYSBzaW5nbGUgY29udGV4dCB3ZSBhdm9pZAorCQkJICogbGVha2luZyB0aGUg SURzIG9mIG90aGVyIGNvbnRleHRzLgorCQkJICovCisJCQlpZiAoZGV2X3ByaXYtPnBlcmYub2Eu ZXhjbHVzaXZlX3N0cmVhbS0+Y3R4ICYmCisJCQkgICAgZGV2X3ByaXYtPnBlcmYub2Euc3BlY2lm aWNfY3R4X2lkICE9IGN0eF9pZCkgeworCQkJCXJlcG9ydDMyWzJdID0gSU5WQUxJRF9DVFhfSUQ7 CisJCQl9CisKKwkJCXJldCA9IGFwcGVuZF9vYV9zYW1wbGUoc3RyZWFtLCBidWYsIGNvdW50LCBv ZmZzZXQsCisJCQkJCSAgICAgICByZXBvcnQpOworCQkJaWYgKHJldCkKKwkJCQlicmVhazsKKwor CQkJZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVmZmVyLmxhc3RfY3R4X2lkID0gY3R4X2lkOworCQl9 CisKKwkJLyogVGhlIGFib3ZlIHJlYXNvbiBmaWVsZCBzYW5pdHkgY2hlY2sgaXMgYmFzZWQgb24K KwkJICogdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgT0EgYnVmZmVyIGlzIGluaXRpYWxseQorCQkg KiB6ZXJvZWQgYW5kIHdlIHJlc2V0IHRoZSBmaWVsZCBhZnRlciBjb3B5aW5nIHNvIHRoZQorCQkg KiBjaGVjayBpcyBzdGlsbCBtZWFuaW5nZnVsIG9uY2Ugb2xkIHJlcG9ydHMgc3RhcnQKKwkJICog YmVpbmcgb3ZlcndyaXR0ZW4uCisJCSAqLworCQlyZXBvcnQzMlswXSA9IDA7CisJfQorCisJaWYg KHN0YXJ0X29mZnNldCAhPSAqb2Zmc2V0KSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJp di0+cGVyZi5vYS5vYV9idWZmZXIucHRyX2xvY2ssIGZsYWdzKTsKKworCQkvKiBXZSByZW1vdmVk IHRoZSBndHRfb2Zmc2V0IGZvciB0aGUgY29weSBsb29wIGFib3ZlLCBpbmRleGluZworCQkgKiBy ZWxhdGl2ZSB0byBvYV9idWZfYmFzZSBzbyBwdXQgYmFjayBoZXJlLi4uCisJCSAqLworCQloZWFk ICs9IGd0dF9vZmZzZXQ7CisKKwkJSTkxNV9XUklURShHRU44X09BSEVBRFBUUiwgaGVhZCAmIEdF TjhfT0FIRUFEUFRSX01BU0spOworCQlkZXZfcHJpdi0+cGVyZi5vYS5vYV9idWZmZXIuaGVhZCA9 IGhlYWQ7CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPnBlcmYub2Eub2Ff YnVmZmVyLnB0cl9sb2NrLCBmbGFncyk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoqCisg KiBnZW44X29hX3JlYWQgLSBjb3B5IHN0YXR1cyByZWNvcmRzIHRoZW4gYnVmZmVyZWQgT0EgcmVw b3J0cworICogQHN0cmVhbTogQW4gaTkxNS1wZXJmIHN0cmVhbSBvcGVuZWQgZm9yIE9BIG1ldHJp Y3MKKyAqIEBidWY6IGRlc3RpbmF0aW9uIGJ1ZmZlciBnaXZlbiBieSB1c2Vyc3BhY2UKKyAqIEBj b3VudDogdGhlIG51bWJlciBvZiBieXRlcyB1c2Vyc3BhY2Ugd2FudHMgdG8gcmVhZAorICogQG9m ZnNldDogKGlub3V0KTogdGhlIGN1cnJlbnQgcG9zaXRpb24gZm9yIHdyaXRpbmcgaW50byBAYnVm CisgKgorICogQ2hlY2tzIE9BIHVuaXQgc3RhdHVzIHJlZ2lzdGVycyBhbmQgaWYgbmVjZXNzYXJ5 IGFwcGVuZHMgY29ycmVzcG9uZGluZworICogc3RhdHVzIHJlY29yZHMgZm9yIHVzZXJzcGFjZSAo c3VjaCBhcyBmb3IgYSBidWZmZXIgZnVsbCBjb25kaXRpb24pIGFuZCB0aGVuCisgKiBpbml0aWF0 ZSBhcHBlbmRpbmcgYW55IGJ1ZmZlcmVkIE9BIHJlcG9ydHMuCisgKgorICogVXBkYXRlcyBAb2Zm c2V0IGFjY29yZGluZyB0byB0aGUgbnVtYmVyIG9mIGJ5dGVzIHN1Y2Nlc3NmdWxseSBjb3BpZWQg aW50bworICogdGhlIHVzZXJzcGFjZSBidWZmZXIuCisgKgorICogTkI6IHNvbWUgZGF0YSBtYXkg YmUgc3VjY2Vzc2Z1bGx5IGNvcGllZCB0byB0aGUgdXNlcnNwYWNlIGJ1ZmZlcgorICogZXZlbiBp ZiBhbiBlcnJvciBpcyByZXR1cm5lZCwgYW5kIHRoaXMgaXMgcmVmbGVjdGVkIGluIHRoZQorICog dXBkYXRlZCBAb2Zmc2V0LgorICoKKyAqIFJldHVybnM6IHplcm8gb24gc3VjY2VzcyBvciBhIG5l Z2F0aXZlIGVycm9yIGNvZGUKKyAqLworc3RhdGljIGludCBnZW44X29hX3JlYWQoc3RydWN0IGk5 MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSwKKwkJCWNoYXIgX191c2VyICpidWYsCisJCQlzaXplX3Qg Y291bnQsCisJCQlzaXplX3QgKm9mZnNldCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPSBzdHJlYW0tPmRldl9wcml2OworCXUzMiBvYXN0YXR1czsKKwlpbnQgcmV0Owor CisJaWYgKFdBUk5fT04oIWRldl9wcml2LT5wZXJmLm9hLm9hX2J1ZmZlci52YWRkcikpCisJCXJl dHVybiAtRUlPOworCisJb2FzdGF0dXMgPSBJOTE1X1JFQUQoR0VOOF9PQVNUQVRVUyk7CisKKwkv KiBXZSB0cmVhdCBPQUJVRkZFUl9PVkVSRkxPVyBhcyBhIHNpZ25pZmljYW50IGVycm9yOgorCSAq CisJICogQWx0aG91Z2ggdGhlb3JldGljYWxseSB3ZSBjb3VsZCBoYW5kbGUgdGhpcyBtb3JlIGdy YWNlZnVsbHkKKwkgKiBzb21ldGltZXMsIHNvbWUgR2VucyBkb24ndCBjb3JyZWN0bHkgc3VwcHJl c3MgY2VydGFpbgorCSAqIGF1dG9tYXRpY2FsbHkgdHJpZ2dlcmVkIHJlcG9ydHMgaW4gdGhpcyBj b25kaXRpb24gYW5kIHNvIHdlCisJICogaGF2ZSB0byBhc3N1bWUgdGhhdCBvbGQgcmVwb3J0cyBh cmUgbm93IGJlaW5nIHRyYW1wbGVkCisJICogb3Zlci4KKwkgKgorCSAqIENvbnNpZGVyaW5nIGhv dyB3ZSBkb24ndCBjdXJyZW50bHkgZ2l2ZSB1c2Vyc3BhY2UgY29udHJvbAorCSAqIG92ZXIgdGhl IE9BIGJ1ZmZlciBzaXplIGFuZCBhbHdheXMgY29uZmlndXJlIGEgbGFyZ2UgMTZNQgorCSAqIGJ1 ZmZlciwgdGhlbiBhIGJ1ZmZlciBvdmVyZmxvdyBkb2VzIGFueXdheSBsaWtlbHkgaW5kaWNhdGUK KwkgKiB0aGF0IHNvbWV0aGluZyBoYXMgZ29uZSBxdWl0ZSBiYWRseSB3cm9uZy4KKwkgKi8KKwlp ZiAob2FzdGF0dXMgJiBHRU44X09BU1RBVFVTX09BQlVGRkVSX09WRVJGTE9XKSB7CisJCXJldCA9 IGFwcGVuZF9vYV9zdGF0dXMoc3RyZWFtLCBidWYsIGNvdW50LCBvZmZzZXQsCisJCQkJICAgICAg IERSTV9JOTE1X1BFUkZfUkVDT1JEX09BX0JVRkZFUl9MT1NUKTsKKwkJaWYgKHJldCkKKwkJCXJl dHVybiByZXQ7CisKKwkJRFJNX0RFQlVHKCJPQSBidWZmZXIgb3ZlcmZsb3cgKGV4cG9uZW50ID0g JWQpOiBmb3JjZSByZXN0YXJ0XG4iLAorCQkJICBkZXZfcHJpdi0+cGVyZi5vYS5wZXJpb2RfZXhw b25lbnQpOworCisJCWRldl9wcml2LT5wZXJmLm9hLm9wcy5vYV9kaXNhYmxlKGRldl9wcml2KTsK KwkJZGV2X3ByaXYtPnBlcmYub2Eub3BzLm9hX2VuYWJsZShkZXZfcHJpdik7CisKKwkJLyogTm90 ZTogLm9hX2VuYWJsZSgpIGlzIGV4cGVjdGVkIHRvIHJlLWluaXQgdGhlIG9hYnVmZmVyCisJCSAq IGFuZCByZXNldCBHRU44X09BU1RBVFVTIGZvciB1cworCQkgKi8KKwkJb2FzdGF0dXMgPSBJOTE1 X1JFQUQoR0VOOF9PQVNUQVRVUyk7CisJfQorCisJaWYgKG9hc3RhdHVzICYgR0VOOF9PQVNUQVRV U19SRVBPUlRfTE9TVCkgeworCQlyZXQgPSBhcHBlbmRfb2Ffc3RhdHVzKHN0cmVhbSwgYnVmLCBj b3VudCwgb2Zmc2V0LAorCQkJCSAgICAgICBEUk1fSTkxNV9QRVJGX1JFQ09SRF9PQV9SRVBPUlRf TE9TVCk7CisJCWlmIChyZXQgPT0gMCkgeworCQkJSTkxNV9XUklURShHRU44X09BU1RBVFVTLAor CQkJCSAgIG9hc3RhdHVzICYgfkdFTjhfT0FTVEFUVVNfUkVQT1JUX0xPU1QpOworCQl9CisJfQor CisJcmV0dXJuIGdlbjhfYXBwZW5kX29hX3JlcG9ydHMoc3RyZWFtLCBidWYsIGNvdW50LCBvZmZz ZXQpOworfQorCisvKioKKyAqIENvcGllcyBhbGwgYnVmZmVyZWQgT0EgcmVwb3J0cyBpbnRvIHVz ZXJzcGFjZSByZWFkKCkgYnVmZmVyLgorICogQHN0cmVhbTogQW4gaTkxNS1wZXJmIHN0cmVhbSBv cGVuZWQgZm9yIE9BIG1ldHJpY3MKKyAqIEBidWY6IGRlc3RpbmF0aW9uIGJ1ZmZlciBnaXZlbiBi eSB1c2Vyc3BhY2UKKyAqIEBjb3VudDogdGhlIG51bWJlciBvZiBieXRlcyB1c2Vyc3BhY2Ugd2Fu dHMgdG8gcmVhZAorICogQG9mZnNldDogKGlub3V0KTogdGhlIGN1cnJlbnQgcG9zaXRpb24gZm9y IHdyaXRpbmcgaW50byBAYnVmCisgKgorICogTm90YWJseSBhbnkgZXJyb3IgY29uZGl0aW9uIHJl c3VsdGluZyBpbiBhIHNob3J0IHJlYWQgKC0lRU5PU1BDIG9yCisgKiAtJUVGQVVMVCkgd2lsbCBi ZSByZXR1cm5lZCBldmVuIHRob3VnaCBvbmUgb3IgbW9yZSByZWNvcmRzIG1heQorICogaGF2ZSBi ZWVuIHN1Y2Nlc3NmdWxseSBjb3BpZWQuIEluIHRoaXMgY2FzZSBpdCdzIHVwIHRvIHRoZSBjYWxs ZXIKKyAqIHRvIGRlY2lkZSBpZiB0aGUgZXJyb3Igc2hvdWxkIGJlIHNxdWFzaGVkIGJlZm9yZSBy ZXR1cm5pbmcgdG8KKyAqIHVzZXJzcGFjZS4KKyAqCisgKiBOb3RlOiByZXBvcnRzIGFyZSBjb25z dW1lZCBmcm9tIHRoZSBoZWFkLCBhbmQgYXBwZW5kZWQgdG8gdGhlCisgKiB0YWlsLCBzbyB0aGUg dGFpbCBjaGFzZXMgdGhlIGhlYWQ/Li4uIElmIHlvdSB0aGluayB0aGF0J3MgbWFkCisgKiBhbmQg YmFjay10by1mcm9udCB5b3UncmUgbm90IGFsb25lLCBidXQgdGhpcyBmb2xsb3dzIHRoZQorICog R2VuIFBSTSBuYW1pbmcgY29udmVudGlvbi4KKyAqCisgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3Ms IG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKyAqLwogc3RhdGljIGludCBnZW43X2Fw cGVuZF9vYV9yZXBvcnRzKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0sCiAJCQkJICBj aGFyIF9fdXNlciAqYnVmLAogCQkJCSAgc2l6ZV90IGNvdW50LApAQCAtNzMzLDcgKzEwNDIsOCBA QCBzdGF0aWMgaW50IGdlbjdfb2FfcmVhZChzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFt LAogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIAotCQlEUk1fREVCVUcoIk9BIGJ1ZmZlciBv dmVyZmxvdzogZm9yY2UgcmVzdGFydFxuIik7CisJCURSTV9ERUJVRygiT0EgYnVmZmVyIG92ZXJm bG93IChleHBvbmVudCA9ICVkKTogZm9yY2UgcmVzdGFydFxuIiwKKwkJCSAgZGV2X3ByaXYtPnBl cmYub2EucGVyaW9kX2V4cG9uZW50KTsKIAogCQlkZXZfcHJpdi0+cGVyZi5vYS5vcHMub2FfZGlz YWJsZShkZXZfcHJpdik7CiAJCWRldl9wcml2LT5wZXJmLm9hLm9wcy5vYV9lbmFibGUoZGV2X3By aXYpOwpAQCAtNzc2LDcgKzEwODYsNyBAQCBzdGF0aWMgaW50IGk5MTVfb2Ffd2FpdF91bmxvY2tl ZChzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtKQogCQlyZXR1cm4gLUVJTzsKIAogCXJl dHVybiB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoZGV2X3ByaXYtPnBlcmYub2EucG9sbF93cSwK LQkJCQkJZGV2X3ByaXYtPnBlcmYub2Eub3BzLm9hX2J1ZmZlcl9jaGVjayhkZXZfcHJpdikpOwor CQkJCQlvYV9idWZmZXJfY2hlY2tfdW5sb2NrZWQoZGV2X3ByaXYpKTsKIH0KIAogLyoqCkBAIC04 MzMsMzMgKzExNDMsMzcgQEAgc3RhdGljIGludCBpOTE1X29hX3JlYWQoc3RydWN0IGk5MTVfcGVy Zl9zdHJlYW0gKnN0cmVhbSwKIHN0YXRpYyBpbnQgb2FfZ2V0X3JlbmRlcl9jdHhfaWQoc3RydWN0 IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSkKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPSBzdHJlYW0tPmRldl9wcml2OwotCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSA9IGRldl9wcml2LT5lbmdpbmVbUkNTXTsKLQlpbnQgcmV0OwogCi0JcmV0ID0gaTkxNV9t dXRleF9sb2NrX2ludGVycnVwdGlibGUoJmRldl9wcml2LT5kcm0pOwotCWlmIChyZXQpCi0JCXJl dHVybiByZXQ7CisJaWYgKGk5MTUuZW5hYmxlX2V4ZWNsaXN0cykKKwkJZGV2X3ByaXYtPnBlcmYu b2Euc3BlY2lmaWNfY3R4X2lkID0gc3RyZWFtLT5jdHgtPmh3X2lkOworCWVsc2UgeworCQlzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUgPSBkZXZfcHJpdi0+ZW5naW5lW1JDU107CisJCWlu dCByZXQ7CiAKLQkvKiBBcyB0aGUgSUQgaXMgdGhlIGd0dCBvZmZzZXQgb2YgdGhlIGNvbnRleHQn cyB2bWEgd2UgcGluCi0JICogdGhlIHZtYSB0byBlbnN1cmUgdGhlIElEIHJlbWFpbnMgZml4ZWQu Ci0JICoKLQkgKiBOQjogaW1wbGllZCBSQ1MgZW5naW5lLi4uCi0JICovCi0JcmV0ID0gZW5naW5l LT5jb250ZXh0X3BpbihlbmdpbmUsIHN0cmVhbS0+Y3R4KTsKLQlpZiAocmV0KQotCQlnb3RvIHVu bG9jazsKKwkJcmV0ID0gaTkxNV9tdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmRldl9wcml2LT5k cm0pOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKIAotCS8qIEV4cGxpY2l0bHkgdHJhY2sg dGhlIElEIChpbnN0ZWFkIG9mIGNhbGxpbmcgaTkxNV9nZ3R0X29mZnNldCgpCi0JICogb24gdGhl IGZseSkgY29uc2lkZXJpbmcgdGhlIGRpZmZlcmVuY2Ugd2l0aCBnZW44KyBhbmQKLQkgKiBleGVj bGlzdHMKLQkgKi8KLQlkZXZfcHJpdi0+cGVyZi5vYS5zcGVjaWZpY19jdHhfaWQgPQotCQlpOTE1 X2dndHRfb2Zmc2V0KHN0cmVhbS0+Y3R4LT5lbmdpbmVbZW5naW5lLT5pZF0uc3RhdGUpOworCQkv KiBBcyB0aGUgSUQgaXMgdGhlIGd0dCBvZmZzZXQgb2YgdGhlIGNvbnRleHQncyB2bWEgd2UgcGlu CisJCSAqIHRoZSB2bWEgdG8gZW5zdXJlIHRoZSBJRCByZW1haW5zIGZpeGVkLgorCQkgKi8KKwkJ cmV0ID0gZW5naW5lLT5jb250ZXh0X3BpbihlbmdpbmUsIHN0cmVhbS0+Y3R4KTsKKwkJaWYgKHJl dCkgeworCQkJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+ZHJtLnN0cnVjdF9tdXRleCk7CisJCQly ZXR1cm4gcmV0OworCQl9CiAKLXVubG9jazoKLQltdXRleF91bmxvY2soJmRldl9wcml2LT5kcm0u c3RydWN0X211dGV4KTsKKwkJLyogRXhwbGljaXRseSB0cmFjayB0aGUgSUQgKGluc3RlYWQgb2Yg Y2FsbGluZworCQkgKiBpOTE1X2dndHRfb2Zmc2V0KCkgb24gdGhlIGZseSkgY29uc2lkZXJpbmcg dGhlIGRpZmZlcmVuY2UKKwkJICogd2l0aCBnZW44KyBhbmQgZXhlY2xpc3RzCisJCSAqLworCQlk ZXZfcHJpdi0+cGVyZi5vYS5zcGVjaWZpY19jdHhfaWQgPQorCQkJaTkxNV9nZ3R0X29mZnNldChz dHJlYW0tPmN0eC0+ZW5naW5lW2VuZ2luZS0+aWRdLnN0YXRlKTsKIAotCXJldHVybiByZXQ7CisJ CW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmRybS5zdHJ1Y3RfbXV0ZXgpOworCX0KKworCXJldHVy biAwOwogfQogCiAvKioKQEAgLTg3NCwxMiArMTE4OCwxNiBAQCBzdGF0aWMgdm9pZCBvYV9wdXRf cmVuZGVyX2N0eF9pZChzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtKQogCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHN0cmVhbS0+ZGV2X3ByaXY7CiAJc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lID0gZGV2X3ByaXYtPmVuZ2luZVtSQ1NdOwogCi0JbXV0ZXhf bG9jaygmZGV2X3ByaXYtPmRybS5zdHJ1Y3RfbXV0ZXgpOworCWlmIChpOTE1LmVuYWJsZV9leGVj bGlzdHMpIHsKKwkJZGV2X3ByaXYtPnBlcmYub2Euc3BlY2lmaWNfY3R4X2lkID0gSU5WQUxJRF9D VFhfSUQ7CisJfSBlbHNlIHsKKwkJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmRybS5zdHJ1Y3RfbXV0 ZXgpOwogCi0JZGV2X3ByaXYtPnBlcmYub2Euc3BlY2lmaWNfY3R4X2lkID0gSU5WQUxJRF9DVFhf SUQ7Ci0JZW5naW5lLT5jb250ZXh0X3VucGluKGVuZ2luZSwgc3RyZWFtLT5jdHgpOworCQlkZXZf cHJpdi0+cGVyZi5vYS5zcGVjaWZpY19jdHhfaWQgPSBJTlZBTElEX0NUWF9JRDsKKwkJZW5naW5l LT5jb250ZXh0X3VucGluKGVuZ2luZSwgc3RyZWFtLT5jdHgpOwogCi0JbXV0ZXhfdW5sb2NrKCZk ZXZfcHJpdi0+ZHJtLnN0cnVjdF9tdXRleCk7CisJCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmRy bS5zdHJ1Y3RfbXV0ZXgpOworCX0KIH0KIAogc3RhdGljIHZvaWQKQEAgLTk2OSw2ICsxMjg3LDU2 IEBAIHN0YXRpYyB2b2lkIGdlbjdfaW5pdF9vYV9idWZmZXIoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2KQogCWRldl9wcml2LT5wZXJmLm9hLnBvbGxpbiA9IGZhbHNlOwogfQogCitz dGF0aWMgdm9pZCBnZW44X2luaXRfb2FfYnVmZmVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdikKK3sKKwl1MzIgZ3R0X29mZnNldCA9IGk5MTVfZ2d0dF9vZmZzZXQoZGV2X3ByaXYt PnBlcmYub2Eub2FfYnVmZmVyLnZtYSk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5f bG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+cGVyZi5vYS5vYV9idWZmZXIucHRyX2xvY2ssIGZsYWdz KTsKKworCUk5MTVfV1JJVEUoR0VOOF9PQVNUQVRVUywgMCk7CisJSTkxNV9XUklURShHRU44X09B SEVBRFBUUiwgZ3R0X29mZnNldCk7CisJZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVmZmVyLmhlYWQg PSBndHRfb2Zmc2V0OworCisJSTkxNV9XUklURShHRU44X09BQlVGRkVSX1VEVywgMCk7CisKKwkv KiBQUk0gc2F5czoKKwkgKgorCSAqICAiVGhpcyBNTUlPIG11c3QgYmUgc2V0IGJlZm9yZSB0aGUg T0FUQUlMUFRSCisJICogIHJlZ2lzdGVyIGFuZCBhZnRlciB0aGUgT0FIRUFEUFRSIHJlZ2lzdGVy LiBUaGlzIGlzCisJICogIHRvIGVuYWJsZSBwcm9wZXIgZnVuY3Rpb25hbGl0eSBvZiB0aGUgb3Zl cmZsb3cKKwkgKiAgYml0LiIKKwkgKi8KKwlJOTE1X1dSSVRFKEdFTjhfT0FCVUZGRVIsIGd0dF9v ZmZzZXQgfAorCQkgICBPQUJVRkZFUl9TSVpFXzE2TSB8IE9BX01FTV9TRUxFQ1RfR0dUVCk7CisJ STkxNV9XUklURShHRU44X09BVEFJTFBUUiwgZ3R0X29mZnNldCAmIEdFTjhfT0FUQUlMUFRSX01B U0spOworCisJLyogTWFyayB0aGF0IHdlIG5lZWQgdXBkYXRlZCB0YWlsIHBvaW50ZXJzIHRvIHJl YWQgZnJvbS4uLiAqLworCWRldl9wcml2LT5wZXJmLm9hLm9hX2J1ZmZlci50YWlsc1swXS5vZmZz ZXQgPSBJTlZBTElEX1RBSUxfUFRSOworCWRldl9wcml2LT5wZXJmLm9hLm9hX2J1ZmZlci50YWls c1sxXS5vZmZzZXQgPSBJTlZBTElEX1RBSUxfUFRSOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9y ZSgmZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVmZmVyLnB0cl9sb2NrLCBmbGFncyk7CisKKworCS8q IE5COiBhbHRob3VnaCB0aGUgT0EgYnVmZmVyIHdpbGwgaW5pdGlhbGx5IGJlIGFsbG9jYXRlZAor CSAqIHplcm9lZCB2aWEgc2htZnMgKGFuZCBzbyB0aGlzIG1lbXNldCBpcyByZWR1bmRhbnQgd2hl bgorCSAqIGZpcnN0IGFsbG9jYXRpbmcpLCB3ZSBtYXkgcmUtaW5pdCB0aGUgT0EgYnVmZmVyLCBl aXRoZXIKKwkgKiB3aGVuIHJlLWVuYWJsaW5nIGEgc3RyZWFtIG9yIGluIGVycm9yL3Jlc2V0IHBh dGhzLgorCSAqCisJICogVGhlIHJlYXNvbiB3ZSBjbGVhciB0aGUgYnVmZmVyIGZvciBlYWNoIHJl LWluaXQgaXMgZm9yIHRoZQorCSAqIHNhbml0eSBjaGVjayBpbiBnZW44X2FwcGVuZF9vYV9yZXBv cnRzKCkgdGhhdCBsb29rcyBhdCB0aGUKKwkgKiByZWFzb24gZmllbGQgdG8gbWFrZSBzdXJlIGl0 J3Mgbm9uLXplcm8gd2hpY2ggcmVsaWVzIG9uCisJICogdGhlIGFzc3VtcHRpb24gdGhhdCBuZXcg cmVwb3J0cyBhcmUgYmVpbmcgd3JpdHRlbiB0byB6ZXJvZWQKKwkgKiBtZW1vcnkuLi4KKwkgKi8K KwltZW1zZXQoZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVmZmVyLnZhZGRyLCAwLCBPQV9CVUZGRVJf U0laRSk7CisKKwkvKiBNYXliZSBtYWtlIC0+cG9sbGluIHBlci1zdHJlYW0gc3RhdGUgaWYgd2Ug c3VwcG9ydCBtdWx0aXBsZQorCSAqIGNvbmN1cnJlbnQgc3RyZWFtcyBpbiB0aGUgZnV0dXJlLgor CSAqLworCWRldl9wcml2LT5wZXJmLm9hLnBvbGxpbiA9IGZhbHNlOworfQorCiBzdGF0aWMgaW50 IGFsbG9jX29hX2J1ZmZlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7CiAJ c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKmJvOwpAQCAtMTExMyw2ICsxNDgxLDIwMiBAQCBz dGF0aWMgdm9pZCBoc3dfZGlzYWJsZV9tZXRyaWNfc2V0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdikKIAkJCQkgICAgICB+R1RfTk9BX0VOQUJMRSkpOwogfQogCisvKgorICogRnJv bSBCcm9hZHdlbGwgUFJNLCAzRC1NZWRpYS1HUEdQVSAtPiBSZWdpc3RlciBTdGF0ZSBDb250ZXh0 CisgKgorICogTU1JTyByZWFkcyBvciB3cml0ZXMgdG8gYW55IG9mIHRoZSByZWdpc3RlcnMgbGlz dGVkIGluIHRoZQorICog4oCcUmVnaXN0ZXIgU3RhdGUgQ29udGV4dCBpbWFnZeKAnSBzdWJzZWN0 aW9ucyB0aHJvdWdoIEhPU1QvSUEKKyAqIE1NSU8gaW50ZXJmYWNlIGZvciBkZWJ1ZyBwdXJwb3Nl cyBtdXN0IGZvbGxvdyB0aGUgc3RlcHMgYmVsb3c6CisgKgorICogLSBTVyBzaG91bGQgc2V0IHRo ZSBGb3JjZSBXYWtldXAgYml0IHRvIHByZXZlbnQgR1QgZnJvbSBlbnRlcmluZyBDNi4KKyAqIC0g V3JpdGUgMHgyMDUwWzMxOjBdID0gMHgwMDAxMDAwMSAoZGlzYWJsZSBzZXF1ZW5jZSkuCisgKiAt IERpc2FibGUgSURMRSBtZXNzYWdpbmcgaW4gQ1MgKFdyaXRlIDB4MjA1MFszMTowXSA9IDB4MDAw MTAwMDEpLgorICogLSBCRFc6ICBQb2xsL1dhaXQgZm9yIHJlZ2lzdGVyIGJpdHMgb2YgMHgyMkFD WzY6MF0gdHVybiB0byAweDMwIHZhbHVlLgorICogLSBTS0wrOiBQb2xsL1dhaXQgZm9yIHJlZ2lz dGVyIGJpdHMgb2YgMHgyMkE0WzY6MF0gdHVybiB0byAweDMwIHZhbHVlLgorICogLSBSZWFkL1dy aXRlIHRvIGRlc2lyZWQgTU1JTyByZWdpc3RlcnMuCisgKiAtIEVuYWJsZSBJRExFIG1lc3NhZ2lu ZyBpbiBDUyAoV3JpdGUgMHgyMDUwWzMxOjBdID0gMHgwMDAxMDAwMCkuCisgKiAtIEZvcmNlIFdh a2V1cCBiaXQgc2hvdWxkIGJlIHJlc2V0IHRvIGVuYWJsZSBDNiBlbnRyeS4KKyAqCisgKiBYWFg6 IGRvbid0IG5lc3Qgb3Igb3ZlcmxhcCBjYWxscyB0byB0aGlzIEFQSSwgaXQgaGFzIG5vIHJlZgor ICogY291bnRpbmcgdG8gdHJhY2sgaG93IG1hbnkgZW50aXRpZXMgcmVxdWlyZSB0aGUgUkNTIHRv IGJlCisgKiBibG9ja2VkIGZyb20gYmVpbmcgaWRsZS4KKyAqLworc3RhdGljIGludCBnZW44X2Jl Z2luX2N0eF9tbWlvKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3sKKwlpOTE1 X3JlZ190IGZzbV9yZWcgPSBkZXZfcHJpdi0+aW5mby5nZW4gPiA4ID8KKwkJR0VOOV9SQ1NfRkVf RlNNMiA6IEdFTjZfUkNTX1BXUl9GU007CisJaW50IHJldCA9IDA7CisKKwkvKiBUaGVyZSdzIG9u bHkgbm8gYWN0aXZlIGNvbnRleHQgd2hpbGUgaWRsZSBpbiBleGVjbGlzdCBtb2RlCisJICogKHRo b3VnaCB3ZSBzaG91bGRuJ3QgYmUgdXNpbmcgdGhpcyBpbiBhbnkgb3RoZXIgY2FzZSkKKwkgKi8K KwlpZiAoV0FSTl9PTighaTkxNS5lbmFibGVfZXhlY2xpc3RzKSkKKwkJcmV0dXJuIC1FSU5WQUw7 CisKKwlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2dldChkZXZfcHJpdiwgRk9SQ0VXQUtFX1JFTkRF Uik7CisKKwlJOTE1X1dSSVRFKEdFTjZfUkNfU0xFRVBfUFNNSV9DT05UUk9MLAorCQkgICBfTUFT S0VEX0JJVF9FTkFCTEUoR0VONl9QU01JX1NMRUVQX01TR19ESVNBQkxFKSk7CisKKwkvKiBOb3Rl OiB3ZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIGdvb2QgaGFuZGxlIG9uIHRoZSBtYXhpbXVtCisJ ICogbGF0ZW5jeSBmb3IgdGhpcyB3YWtlIHVwIHNvIHdoaWxlIHdlIG9ubHkgbmVlZCB0byBob2xk IHJjcworCSAqIGJ1c3kgZnJvbSBwcm9jZXNzIGNvbnRleHQgd2UgYXQgbGVhc3Qga2VlcCB0aGUg d2FpdGluZworCSAqIGludGVycnVwdGlibGUuLi4KKwkgKi8KKwlyZXQgPSB3YWl0X2ZvcigoSTkx NV9SRUFEKGZzbV9yZWcpICYgMHgzZikgPT0gMHgzMCwgNTApOworCWlmIChyZXQpCisJICAgIGlu dGVsX3VuY29yZV9mb3JjZXdha2VfcHV0KGRldl9wcml2LCBGT1JDRVdBS0VfUkVOREVSKTsKKwor CXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGdlbjhfZW5kX2N0eF9tbWlvKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3sKKwlpZiAoV0FSTl9PTighaTkxNS5lbmFibGVf ZXhlY2xpc3RzKSkKKwkJcmV0dXJuOworCisJSTkxNV9XUklURShHRU42X1JDX1NMRUVQX1BTTUlf Q09OVFJPTCwKKwkJICAgX01BU0tFRF9CSVRfRElTQUJMRShHRU42X1BTTUlfU0xFRVBfTVNHX0RJ U0FCTEUpKTsKKwlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX3B1dChkZXZfcHJpdiwgRk9SQ0VXQUtF X1JFTkRFUik7Cit9CisKKy8qIE1hbmFnZXMgdXBkYXRpbmcgdGhlIHBlci1jb250ZXh0IGFzcGVj dHMgb2YgdGhlIE9BIHN0cmVhbQorICogY29uZmlndXJhdGlvbiBhY3Jvc3MgYWxsIGNvbnRleHRz LgorICoKKyAqIFRoZSBhd2t3YXJkIGNvbnNpZGVyYXRpb24gaGVyZSBpcyB0aGF0IE9BQ1RYQ09O VFJPTCBjb250cm9scyB0aGUKKyAqIGV4cG9uZW50IGZvciBwZXJpb2RpYyBzYW1wbGluZyB3aGlj aCBpcyBwcmltYXJpbHkgdXNlZCBmb3Igc3lzdGVtCisgKiB3aWRlIHByb2ZpbGluZyB3aGVyZSB3 ZSdkIGxpa2UgYSBjb25zaXN0ZW50IHNhbXBsaW5nIHBlcmlvZCBldmVuIGluCisgKiB0aGUgZmFj ZSBvZiBjb250ZXh0IHN3aXRjaGVzLgorICoKKyAqIE91ciBhcHByb2FjaCBvZiB1cGRhdGluZyB0 aGUgcmVnaXN0ZXIgc3RhdGUgY29udGV4dCAoYXMgb3Bwb3NlZCB0bworICogc2F5IHVzaW5nIGEg d29ya2Fyb3VuZCBiYXRjaCBidWZmZXIpIGVuc3VyZXMgdGhhdCB0aGUgaGFyZHdhcmUKKyAqIHdv bid0IGF1dG9tYXRpY2FsbHkgcmVsb2FkIGFuIG91dC1vZi1kYXRlIHRpbWVyIGV4cG9uZW50IGV2 ZW4KKyAqIHRyYW5zaWVudGx5IGJlZm9yZSBhIFdBIEJCIGNvdWxkIGJlIHBhcnNlZC4KKyAqCisg KiBUaGlzIGZ1bmN0aW9uIG5lZWRzIHRvOgorICogLSBFbnN1cmUgdGhlIGN1cnJlbnRseSBydW5u aW5nIGNvbnRleHQncyBwZXItY29udGV4dCBPQSBzdGF0ZSBpcworICogICB1cGRhdGVkCisgKiAt IEVuc3VyZSB0aGF0IGFsbCBleGlzdGluZyBjb250ZXh0cyB3aWxsIGhhdmUgdGhlIGNvcnJlY3Qg cGVyLWNvbnRleHQKKyAqICAgT0Egc3RhdGUgaWYgdGhleSBhcmUgc2NoZWR1bGVkIGZvciB1c2Uu CisgKiAtIEVuc3VyZSBhbnkgbmV3IGNvbnRleHRzIHdpbGwgYmUgaW5pdGlhbGl6ZWQgd2l0aCB0 aGUgY29ycmVjdAorICogICBwZXItY29udGV4dCBPQSBzdGF0ZS4KKyAqCisgKiBOb3RlOiBpdCdz IG9ubHkgdGhlIFJDUy9SZW5kZXIgY29udGV4dCB0aGF0IGhhcyBhbnkgT0Egc3RhdGUuCisgKi8K K3N0YXRpYyBpbnQgZ2VuOF9jb25maWd1cmVfYWxsX2NvbnRleHRzKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdikKK3sKKwlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4OworCWlu dCByZXQ7CisKKwlyZXQgPSBpOTE1X211dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZGV2X3ByaXYt PmRybSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFNpbmNlIGV4ZWNsaXN0IHN1 Ym1pc3Npb24gbWF5IGJlIGhhcHBlbmluZyBhc3luY2hyb25vdXNseSBoZXJlIHRoZW4KKwkgKiB3 ZSBmaXJzdCBtYXJrIGV4aXN0aW5nIGNvbnRleHRzIGRpcnR5IGJlZm9yZSB3ZSB1cGRhdGUgdGhl IGN1cnJlbnQKKwkgKiBjb250ZXh0IHNvIGlmIGFueSBzd2l0Y2hlcyBoYXBwZW4gaW4gdGhlIG1p ZGRsZSB3ZSBjYW4gZXhwZWN0CisJICogdGhhdCB0aGUgYWN0IG9mIHNjaGVkdWxpbmcgd2lsbCBo YXZlIGl0c2VsZiBlbnN1cmVkIGEgY29uc2lzdGVudAorCSAqIE9BIHN0YXRlIHVwZGF0ZS4KKwkg Ki8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGN0eCwgJmRldl9wcml2LT5jb250ZXh0X2xpc3QsIGxp bmspIHsKKwkJLyogVGhlIGFjdHVhbCB1cGRhdGUgb2YgdGhlIHJlZ2lzdGVyIHN0YXRlIGNvbnRl eHQgd2lsbCBoYXBwZW4KKwkJICogdGhlIG5leHQgdGltZSB0aGlzIGxvZ2ljYWwgcmluZyBpcyBz dWJtaXR0ZWQuIChTZWUKKwkJICogaTkxNV9vYV91cGRhdGVfcmVnX3N0YXRlKCkgd2hpY2ggaG9v a3MgaW50bworCQkgKiBleGVjbGlzdHNfdXBkYXRlX2NvbnRleHQoKSkKKwkJICovCisJCWF0b21p Y19zZXQoJmN0eC0+ZW5naW5lW1JDU10ub2Ffc3RhdGVfZGlydHksIDEpOworCX0KKworCW11dGV4 X3VubG9jaygmZGV2X3ByaXYtPmRybS5zdHJ1Y3RfbXV0ZXgpOworCisJLyogTm93IHVwZGF0ZSB0 aGUgY3VycmVudCBjb250ZXh0LgorCSAqCisJICogTm90ZTogVXNpbmcgTU1JTyB0byB1cGRhdGUg cGVyLWNvbnRleHQgcmVnaXN0ZXJzIHJlcXVpcmVzCisJICogc29tZSBleHRyYSBjYXJlLi4uCisJ ICovCisJcmV0ID0gZ2VuOF9iZWdpbl9jdHhfbW1pbyhkZXZfcHJpdik7CisJaWYgKHJldCkgewor CQlEUk1fRVJST1IoIkZhaWxlZCB0byBicmluZyBSQ1Mgb3V0IG9mIGlkbGUgdG8gdXBkYXRlIGN1 cnJlbnQgY3R4IE9BIHN0YXRlXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlJOTE1X1dSSVRF KEdFTjhfT0FDVFhDT05UUk9MLCAoKGRldl9wcml2LT5wZXJmLm9hLnBlcmlvZF9leHBvbmVudCA8 PAorCQkJCQlHRU44X09BX1RJTUVSX1BFUklPRF9TSElGVCkgfAorCQkJCSAgICAgIChkZXZfcHJp di0+cGVyZi5vYS5wZXJpb2RpYyA/CisJCQkJICAgICAgIEdFTjhfT0FfVElNRVJfRU5BQkxFIDog MCkgfAorCQkJCSAgICAgIEdFTjhfT0FfQ09VTlRFUl9SRVNVTUUpKTsKKworCWNvbmZpZ19vYV9y ZWdzKGRldl9wcml2LCBkZXZfcHJpdi0+cGVyZi5vYS5mbGV4X3JlZ3MsCisJCQlkZXZfcHJpdi0+ cGVyZi5vYS5mbGV4X3JlZ3NfbGVuKTsKKworCWdlbjhfZW5kX2N0eF9tbWlvKGRldl9wcml2KTsK KworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdlbjhfZW5hYmxlX21ldHJpY19zZXQoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQoreworCWludCByZXQgPSBkZXZfcHJpdi0+ cGVyZi5vYS5vcHMuc2VsZWN0X21ldHJpY19zZXQoZGV2X3ByaXYpOworCisJaWYgKHJldCkKKwkJ cmV0dXJuIHJldDsKKworCS8qIFdlIGRpc2FibGUgc2xpY2UvdW5zbGljZSBjbG9jayByYXRpbyBj aGFuZ2UgcmVwb3J0cyBvbiBTS0wgc2luY2UKKwkgKiB0aGV5IGFyZSB0b28gbm9pc3kuIFRoZSBI VyBnZW5lcmF0ZXMgYSBsb3Qgb2YgcmVkdW5kYW50IHJlcG9ydHMKKwkgKiB3aGVyZSB0aGUgcmF0 aW8gaGFzbid0IHJlYWxseSBjaGFuZ2VkIGNhdXNpbmcgYSBsb3Qgb2YgcmVkdW5kYW50CisJICog d29yayB0byBwcm9jZXNzZXMgYW5kIGluY3JlYXNpbmcgdGhlIGNoYW5jZXMgd2UnbGwgaGl0IGJ1 ZmZlcgorCSAqIG92ZXJydW5zLgorCSAqCisJICogQWx0aG91Z2ggd2UgZG9uJ3QgY3VycmVudGx5 IHVzZSB0aGUgJ2Rpc2FibGUgb3ZlcnJ1bicgT0FCVUZGRVIKKwkgKiBmZWF0dXJlIGl0J3Mgd29y dGggbm90aW5nIHRoYXQgY2xvY2sgcmF0aW8gcmVwb3J0cyBoYXZlIHRvIGJlCisJICogZGlzYWJs ZWQgYmVmb3JlIGNvbnNpZGVyaW5nIHRvIHVzZSB0aGF0IGZlYXR1cmUgc2luY2UgdGhlIEhXIGRv ZXNuJ3QKKwkgKiBjb3JyZWN0bHkgYmxvY2sgdGhlc2UgcmVwb3J0cy4KKwkgKgorCSAqIEN1cnJl bnRseSBub25lIG9mIHRoZSBoaWdoLWxldmVsIG1ldHJpY3Mgd2UgaGF2ZSBkZXBlbmQgb24ga25v d2luZworCSAqIHRoaXMgcmF0aW8gdG8gbm9ybWFsaXplLgorCSAqCisJICogTm90ZTogVGhpcyBy ZWdpc3RlciBpcyBub3QgcG93ZXIgY29udGV4dCBzYXZlZCBhbmQgcmVzdG9yZWQsIGJ1dAorCSAq IHRoYXQncyBPSyBjb25zaWRlcmluZyB0aGF0IHdlIGRpc2FibGUgUkM2IHdoaWxlIHRoZSBPQSB1 bml0IGlzCisJICogZW5hYmxlZC4KKwkgKgorCSAqIFRoZSBfSU5DTFVERV9DTEtfUkFUSU8gYml0 IGFsbG93cyB0aGUgc2xpY2UvdW5zbGljZSBmcmVxdWVuY3kgdG8KKwkgKiBiZSByZWFkIGJhY2sg ZnJvbSBhdXRvbWF0aWNhbGx5IHRyaWdnZXJlZCByZXBvcnRzLCBhcyBwYXJ0IG9mIHRoZQorCSAq IFJQVF9JRCBmaWVsZC4KKwkgKi8KKwlpZiAoSVNfU0tZTEFLRShkZXZfcHJpdikgfHwgSVNfQlJP WFRPTihkZXZfcHJpdikpIHsKKwkJSTkxNV9XUklURShHRU44X09BX0RFQlVHLAorCQkJICAgX01B U0tFRF9CSVRfRU5BQkxFKEdFTjlfT0FfREVCVUdfRElTQUJMRV9DTEtfUkFUSU9fUkVQT1JUUyB8 CisJCQkJCSAgICAgIEdFTjlfT0FfREVCVUdfSU5DTFVERV9DTEtfUkFUSU8pKTsKKwl9CisKKwlJ OTE1X1dSSVRFKEdEVF9DSElDS0VOX0JJVFMsIDB4QTApOworCWNvbmZpZ19vYV9yZWdzKGRldl9w cml2LCBkZXZfcHJpdi0+cGVyZi5vYS5tdXhfcmVncywKKwkJICAgICAgIGRldl9wcml2LT5wZXJm Lm9hLm11eF9yZWdzX2xlbik7CisJSTkxNV9XUklURShHRFRfQ0hJQ0tFTl9CSVRTLCAweDgwKTsK KworCS8qIEl0IHRha2VzIGEgZmFpcmx5IGxvbmcgdGltZSBmb3IgYSBuZXcgTVVYIGNvbmZpZ3Vy YXRpb24gdG8KKwkgKiBiZSBiZSBhcHBsaWVkIGFmdGVyIHRoZXNlIHJlZ2lzdGVyIHdyaXRlcy4g VGhpcyBkZWxheQorCSAqIGR1cmF0aW9uIGlzIHRha2UgZnJvbSBIYXN3ZWxsIChkZXJpdmVkIGVt cGlyaWNhbGx5IGJhc2VkIG9uCisJICogdGhlIHJlbmRlcl9iYXNpYyBjb25maWcpIGJ1dCBob3Bl ZnVsbHkgaXQgY292ZXJzIHRoZQorCSAqIG1heGltdW0gY29uZmlndXJhdGlvbiBsYXRlbmN5IGZv ciBHZW44KyB0b28uLi4KKwkgKi8KKwl1c2xlZXBfcmFuZ2UoMTUwMDAsIDIwMDAwKTsKKworCWNv bmZpZ19vYV9yZWdzKGRldl9wcml2LCBkZXZfcHJpdi0+cGVyZi5vYS5iX2NvdW50ZXJfcmVncywK KwkJICAgICAgIGRldl9wcml2LT5wZXJmLm9hLmJfY291bnRlcl9yZWdzX2xlbik7CisKKwlyZXQg PSBnZW44X2NvbmZpZ3VyZV9hbGxfY29udGV4dHMoZGV2X3ByaXYpOworCWlmIChyZXQpCisJCXJl dHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZ2VuOF9kaXNhYmxlX21l dHJpY19zZXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQoreworCS8qIE5PUCAq LworfQorCiBzdGF0aWMgdm9pZCBnZW43X3VwZGF0ZV9vYWNvbnRyb2xfbG9ja2VkKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIHsKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZkZXZf cHJpdi0+cGVyZi5ob29rX2xvY2spOwpAQCAtMTE1Nyw2ICsxNzIxLDI5IEBAIHN0YXRpYyB2b2lk IGdlbjdfb2FfZW5hYmxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAlzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+cGVyZi5ob29rX2xvY2ssIGZsYWdzKTsKIH0K IAorc3RhdGljIHZvaWQgZ2VuOF9vYV9lbmFibGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KQoreworCXUzMiByZXBvcnRfZm9ybWF0ID0gZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVm ZmVyLmZvcm1hdDsKKworCS8qIFJlc2V0IGJ1ZiBwb2ludGVycyBzbyB3ZSBkb24ndCBmb3J3YXJk IHJlcG9ydHMgZnJvbSBiZWZvcmUgbm93LgorCSAqCisJICogVGhpbmsgY2FyZWZ1bGx5IGlmIGNv bnNpZGVyaW5nIHRyeWluZyB0byBhdm9pZCB0aGlzLCBzaW5jZSBpdAorCSAqIGFsc28gZW5zdXJl cyBzdGF0dXMgZmxhZ3MgYW5kIHRoZSBidWZmZXIgaXRzZWxmIGFyZSBjbGVhcmVkCisJICogaW4g ZXJyb3IgcGF0aHMsIGFuZCB3ZSBoYXZlIGNoZWNrcyBmb3IgaW52YWxpZCByZXBvcnRzIGJhc2Vk CisJICogb24gdGhlIGFzc3VtcHRpb24gdGhhdCBjZXJ0YWluIGZpZWxkcyBhcmUgd3JpdHRlbiB0 byB6ZXJvZWQKKwkgKiBtZW1vcnkgd2hpY2ggdGhpcyBoZWxwcyBtYWludGFpbnMuCisJICovCisJ Z2VuOF9pbml0X29hX2J1ZmZlcihkZXZfcHJpdik7CisKKwkvKiBOb3RlOiB3ZSBkb24ndCByZWx5 IG9uIHRoZSBoYXJkd2FyZSB0byBwZXJmb3JtIHNpbmdsZSBjb250ZXh0CisJICogZmlsdGVyaW5n IGFuZCBpbnN0ZWFkIGZpbHRlciBvbiB0aGUgY3B1IGJhc2VkIG9uIHRoZSBjb250ZXh0LWlkCisJ ICogZmllbGQgb2YgcmVwb3J0cworCSAqLworCUk5MTVfV1JJVEUoR0VOOF9PQUNPTlRST0wsIChy ZXBvcnRfZm9ybWF0IDw8CisJCQkJICAgIEdFTjhfT0FfUkVQT1JUX0ZPUk1BVF9TSElGVCkgfAor CQkJCSAgIEdFTjhfT0FfQ09VTlRFUl9FTkFCTEUpOworfQorCiAvKioKICAqIGk5MTVfb2Ffc3Ry ZWFtX2VuYWJsZSAtIGhhbmRsZSBgSTkxNV9QRVJGX0lPQ1RMX0VOQUJMRWAgZm9yIE9BIHN0cmVh bQogICogQHN0cmVhbTogQW4gaTkxNSBwZXJmIHN0cmVhbSBvcGVuZWQgZm9yIE9BIG1ldHJpY3MK QEAgLTExODMsNiArMTc3MCwxMSBAQCBzdGF0aWMgdm9pZCBnZW43X29hX2Rpc2FibGUoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCUk5MTVfV1JJVEUoR0VON19PQUNPTlRST0ws IDApOwogfQogCitzdGF0aWMgdm9pZCBnZW44X29hX2Rpc2FibGUoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KQoreworCUk5MTVfV1JJVEUoR0VOOF9PQUNPTlRST0wsIDApOworfQor CiAvKioKICAqIGk5MTVfb2Ffc3RyZWFtX2Rpc2FibGUgLSBoYW5kbGUgYEk5MTVfUEVSRl9JT0NU TF9ESVNBQkxFYCBmb3IgT0Egc3RyZWFtCiAgKiBAc3RyZWFtOiBBbiBpOTE1IHBlcmYgc3RyZWFt IG9wZW5lZCBmb3IgT0EgbWV0cmljcwpAQCAtMTM2MSw2ICsxOTUzLDg4IEBAIHN0YXRpYyBpbnQg aTkxNV9vYV9zdHJlYW1faW5pdChzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAogCXJl dHVybiByZXQ7CiB9CiAKKy8qIE5COiBJdCBtdXN0IGFsd2F5cyByZW1haW4gcG9pbnRlciBzYWZl IHRvIHJ1biB0aGlzIGV2ZW4gaWYgdGhlIE9BIHVuaXQKKyAqIGhhcyBiZWVuIGRpc2FibGVkLgor ICoKKyAqIEl0J3MgZmluZSB0byBwdXQgb3V0LW9mLWRhdGUgdmFsdWVzIGludG8gdGhlc2UgcGVy LWNvbnRleHQgcmVnaXN0ZXJzCisgKiBpbiB0aGUgY2FzZSB0aGF0IHRoZSBPQSB1bml0IGhhcyBi ZWVuIGRpc2FibGVkLgorICovCitzdGF0aWMgdm9pZCBnZW44X3VwZGF0ZV9yZWdfc3RhdGVfdW5s b2NrZWQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAorCQkJCQkgICBzdHJ1Y3QgaTkx NV9nZW1fY29udGV4dCAqY3R4LAorCQkJCQkgICB1MzIgKnJlZ19zdGF0ZSkKK3sKKwlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBjdHgtPmk5MTU7CisJY29uc3Qgc3RydWN0IGk5 MTVfb2FfcmVnICpmbGV4X3JlZ3MgPSBkZXZfcHJpdi0+cGVyZi5vYS5mbGV4X3JlZ3M7CisJaW50 IG5fZmxleF9yZWdzID0gZGV2X3ByaXYtPnBlcmYub2EuZmxleF9yZWdzX2xlbjsKKwl1MzIgY3R4 X29hY3R4Y3RybCA9IGRldl9wcml2LT5wZXJmLm9hLmN0eF9vYWN0eGN0cmxfb2Zmc2V0OworCXUz MiBjdHhfZmxleGV1MCA9IGRldl9wcml2LT5wZXJmLm9hLmN0eF9mbGV4ZXUwX29mZnNldDsKKwkv KiBUaGUgTU1JTyBvZmZzZXRzIGZvciBGbGV4IEVVIHJlZ2lzdGVycyBhcmVuJ3QgY29udGlndW91 cyAqLworCXUzMiBmbGV4X21taW9bXSA9IHsKKwkJaTkxNV9tbWlvX3JlZ19vZmZzZXQoRVVfUEVS Rl9DTlRMMCksCisJCWk5MTVfbW1pb19yZWdfb2Zmc2V0KEVVX1BFUkZfQ05UTDEpLAorCQlpOTE1 X21taW9fcmVnX29mZnNldChFVV9QRVJGX0NOVEwyKSwKKwkJaTkxNV9tbWlvX3JlZ19vZmZzZXQo RVVfUEVSRl9DTlRMMyksCisJCWk5MTVfbW1pb19yZWdfb2Zmc2V0KEVVX1BFUkZfQ05UTDQpLAor CQlpOTE1X21taW9fcmVnX29mZnNldChFVV9QRVJGX0NOVEw1KSwKKwkJaTkxNV9tbWlvX3JlZ19v ZmZzZXQoRVVfUEVSRl9DTlRMNiksCisJfTsKKwlpbnQgaTsKKworCXJlZ19zdGF0ZVtjdHhfb2Fj dHhjdHJsXSA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KEdFTjhfT0FDVFhDT05UUk9MKTsKKwlyZWdf c3RhdGVbY3R4X29hY3R4Y3RybCsxXSA9IChkZXZfcHJpdi0+cGVyZi5vYS5wZXJpb2RfZXhwb25l bnQgPDwKKwkJCQkgICAgICBHRU44X09BX1RJTUVSX1BFUklPRF9TSElGVCkgfAorCQkJCSAgICAg KGRldl9wcml2LT5wZXJmLm9hLnBlcmlvZGljID8KKwkJCQkgICAgICBHRU44X09BX1RJTUVSX0VO QUJMRSA6IDApIHwKKwkJCQkgICAgIEdFTjhfT0FfQ09VTlRFUl9SRVNVTUU7CisKKwlmb3IgKGkg PSAwOyBpIDwgQVJSQVlfU0laRShmbGV4X21taW8pOyBpKyspIHsKKwkJdTMyIHN0YXRlX29mZnNl dCA9IGN0eF9mbGV4ZXUwICsgaSAqIDI7CisJCXUzMiBtbWlvID0gZmxleF9tbWlvW2ldOworCisJ CS8qIFRoaXMgYXJiaXRyYXJ5IGRlZmF1bHQgd2lsbCBzZWxlY3QgdGhlICdFVSBGUFUwIFBpcGVs aW5lCisJCSAqIEFjdGl2ZScgZXZlbnQuIEluIHRoZSBmdXR1cmUgaXQncyBhbnRpY2lwYXRlZCB0 aGF0IHRoZXJlCisJCSAqIHdpbGwgYmUgYW4gZXhwbGljaXQgJ05vIEV2ZW50JyB3ZSBjYW4gc2Vs ZWN0LCBidXQgbm90IHlldC4uLgorCQkgKi8KKwkJdTMyIHZhbHVlID0gMDsKKwkJaW50IGo7CisK KwkJZm9yIChqID0gMDsgaiA8IG5fZmxleF9yZWdzOyBqKyspIHsKKwkJCWlmIChpOTE1X21taW9f cmVnX29mZnNldChmbGV4X3JlZ3Nbal0uYWRkcikgPT0gbW1pbykgeworCQkJCXZhbHVlID0gZmxl eF9yZWdzW2pdLnZhbHVlOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJcmVnX3N0YXRlW3N0 YXRlX29mZnNldF0gPSBtbWlvOworCQlyZWdfc3RhdGVbc3RhdGVfb2Zmc2V0KzFdID0gdmFsdWU7 CisJfQorfQorCit2b2lkIGk5MTVfb2FfdXBkYXRlX3JlZ19zdGF0ZShzdHJ1Y3QgaW50ZWxfZW5n aW5lX2NzICplbmdpbmUsCisJCQkgICAgICBzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4LAor CQkJICAgICAgdTMyICpyZWdfc3RhdGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gZW5naW5lLT5pOTE1OworCisJaWYgKGVuZ2luZS0+aWQgIT0gUkNTKQorCQlyZXR1 cm47CisKKwlpZiAoIWRldl9wcml2LT5wZXJmLmluaXRpYWxpemVkKQorCQlyZXR1cm47CisKKwkv KiBYWFg6IFdlIGRvbid0IHRha2UgYSBsb2NrIGhlcmUgYW5kIHRoaXMgbWF5IHJ1biBhc3luYyB3 aXRoCisJICogcmVzcGVjdCB0byBzdHJlYW0gbWV0aG9kcy4gTm90YWJseSB3ZSBkb24ndCB3YW50 IHRvIGJsb2NrCisJICogY29udGV4dCBzd2l0Y2hlcyBieSBsb25nIGk5MTUgcGVyZiByZWFkKCkg b3BlcmF0aW9ucy4KKwkgKgorCSAqIEl0J3MgZXhwZWN0ZWQgdG8gYWx3YXlzIGJlIHNhZmUgdG8g cmVhZCB0aGUgZGV2X3ByaXYtPnBlcmYKKwkgKiBzdGF0ZSBuZWVkZWQgaGVyZSwgYW5kIGV4cGVj dGVkIHRvIGJlIGJlbmlnbiB0byByZWR1bmRhbnRseQorCSAqIHVwZGF0ZSB0aGUgc3RhdGUgaWYg dGhlIE9BIHVuaXQgaGFzIGJlZW4gZGlzYWJsZWQgc2luY2UKKwkgKiBvYV9zdGF0ZV9kaXJ0eSB3 YXMgbGFzdCBzZXQuCisJICovCisJaWYgKGF0b21pY19jbXB4Y2hnKCZjdHgtPmVuZ2luZVtlbmdp bmUtPmlkXS5vYV9zdGF0ZV9kaXJ0eSwgMSwgMCkpCisJCWdlbjhfdXBkYXRlX3JlZ19zdGF0ZV91 bmxvY2tlZChlbmdpbmUsIGN0eCwgcmVnX3N0YXRlKTsKK30KKwogLyoqCiAgKiBpOTE1X3BlcmZf cmVhZF9sb2NrZWQgLSAmaTkxNV9wZXJmX3N0cmVhbV9vcHMtPnJlYWQgd2l0aCBlcnJvciBub3Jt YWxpc2F0aW9uCiAgKiBAc3RyZWFtOiBBbiBpOTE1IHBlcmYgc3RyZWFtCkBAIC0xNDg2LDcgKzIx NjAsNyBAQCBzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgb2FfcG9sbF9jaGVja190aW1lcl9j YihzdHJ1Y3QgaHJ0aW1lciAqaHJ0aW1lcikKIAkJY29udGFpbmVyX29mKGhydGltZXIsIHR5cGVv ZigqZGV2X3ByaXYpLAogCQkJICAgICBwZXJmLm9hLnBvbGxfY2hlY2tfdGltZXIpOwogCi0JaWYg KGRldl9wcml2LT5wZXJmLm9hLm9wcy5vYV9idWZmZXJfY2hlY2soZGV2X3ByaXYpKSB7CisJaWYg KG9hX2J1ZmZlcl9jaGVja191bmxvY2tlZChkZXZfcHJpdikpIHsKIAkJZGV2X3ByaXYtPnBlcmYu b2EucG9sbGluID0gdHJ1ZTsKIAkJd2FrZV91cCgmZGV2X3ByaXYtPnBlcmYub2EucG9sbF93cSk7 CiAJfQpAQCAtMTc3NSw2ICsyNDQ5LDcgQEAgaTkxNV9wZXJmX29wZW5faW9jdGxfbG9ja2VkKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIAlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4 dCAqc3BlY2lmaWNfY3R4ID0gTlVMTDsKIAlzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFt ID0gTlVMTDsKIAl1bnNpZ25lZCBsb25nIGZfZmxhZ3MgPSAwOworCWJvb2wgcHJpdmlsZWdlZF9v cCA9IHRydWU7CiAJaW50IHN0cmVhbV9mZDsKIAlpbnQgcmV0OwogCkBAIC0xNzkyLDEyICsyNDY3 LDI4IEBAIGk5MTVfcGVyZl9vcGVuX2lvY3RsX2xvY2tlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYsCiAJCX0KIAl9CiAKKwkvKiBPbiBIYXN3ZWxsIHRoZSBPQSB1bml0IHN1cHBv cnRzIGNsb2NrIGdhdGluZyBvZmYgZm9yIGEgc3BlY2lmaWMKKwkgKiBjb250ZXh0IGFuZCBpbiB0 aGlzIG1vZGUgdGhlcmUncyBubyB2aXNpYmlsaXR5IG9mIG1ldHJpY3MgZm9yIHRoZQorCSAqIHJl c3Qgb2YgdGhlIHN5c3RlbSwgd2hpY2ggd2UgY29uc2lkZXIgYWNjZXB0YWJsZSBmb3IgYQorCSAq IG5vbi1wcml2aWxlZ2VkIGNsaWVudC4KKwkgKgorCSAqIEZvciBHZW44KyB0aGUgT0EgdW5pdCBu byBsb25nZXIgc3VwcG9ydHMgY2xvY2sgZ2F0aW5nIG9mZiBmb3IgYQorCSAqIHNwZWNpZmljIGNv bnRleHQgYW5kIHRoZSBrZXJuZWwgY2FuJ3Qgc2VjdXJlbHkgc3RvcCB0aGUgY291bnRlcnMKKwkg KiBmcm9tIHVwZGF0aW5nIGFzIHN5c3RlbS13aWRlIC8gZ2xvYmFsIHZhbHVlcy4gRXZlbiB0aG91 Z2ggd2UgY2FuCisJICogZmlsdGVyIHJlcG9ydHMgYmFzZWQgb24gdGhlIGluY2x1ZGVkIGNvbnRl eHQgSUQgd2UgY2FuJ3QgYmxvY2sKKwkgKiBjbGllbnRzIGZyb20gc2VlaW5nIHRoZSByYXcgLyBn bG9iYWwgY291bnRlciB2YWx1ZXMgdmlhCisJICogTUlfUkVQT1JUX1BFUkZfQ09VTlQgY29tbWFu ZHMgYW5kIHNvIGNvbnNpZGVyIGl0IGEgcHJpdmlsZWdlZCBvcCB0bworCSAqIGVuYWJsZSB0aGUg T0EgdW5pdCBieSBkZWZhdWx0LgorCSAqLworCWlmIChJU19IQVNXRUxMKGRldl9wcml2KSAmJiBz cGVjaWZpY19jdHgpCisJCXByaXZpbGVnZWRfb3AgPSBmYWxzZTsKKwogCS8qIFNpbWlsYXIgdG8g cGVyZidzIGtlcm5lbC5wZXJmX3BhcmFub2lkX2NwdSBzeXNjdGwgb3B0aW9uCiAJICogd2UgY2hl Y2sgYSBkZXYuaTkxNS5wZXJmX3N0cmVhbV9wYXJhbm9pZCBzeXNjdGwgb3B0aW9uCiAJICogdG8g ZGV0ZXJtaW5lIGlmIGl0J3Mgb2sgdG8gYWNjZXNzIHN5c3RlbSB3aWRlIE9BIGNvdW50ZXJzCiAJ ICogd2l0aG91dCBDQVBfU1lTX0FETUlOIHByaXZpbGVnZXMuCiAJICovCi0JaWYgKCFzcGVjaWZp Y19jdHggJiYKKwlpZiAocHJpdmlsZWdlZF9vcCAmJgogCSAgICBpOTE1X3BlcmZfc3RyZWFtX3Bh cmFub2lkICYmICFjYXBhYmxlKENBUF9TWVNfQURNSU4pKSB7CiAJCURSTV9ERUJVRygiSW5zdWZm aWNpZW50IHByaXZpbGVnZXMgdG8gb3BlbiBzeXN0ZW0td2lkZSBpOTE1IHBlcmYgc3RyZWFtXG4i KTsKIAkJcmV0ID0gLUVBQ0NFUzsKQEAgLTIwNjksOSArMjc2MCw2IEBAIGludCBpOTE1X3BlcmZf b3Blbl9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogICovCiB2b2lk IGk5MTVfcGVyZl9yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7 Ci0JaWYgKCFJU19IQVNXRUxMKGRldl9wcml2KSkKLQkJcmV0dXJuOwotCiAJaWYgKCFkZXZfcHJp di0+cGVyZi5pbml0aWFsaXplZCkKIAkJcmV0dXJuOwogCkBAIC0yMDg3LDExICsyNzc1LDM4IEBA IHZvaWQgaTkxNV9wZXJmX3JlZ2lzdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dikKIAlpZiAoIWRldl9wcml2LT5wZXJmLm1ldHJpY3Nfa29iaikKIAkJZ290byBleGl0OwogCi0J aWYgKGk5MTVfcGVyZl9yZWdpc3Rlcl9zeXNmc19oc3coZGV2X3ByaXYpKSB7Ci0JCWtvYmplY3Rf cHV0KGRldl9wcml2LT5wZXJmLm1ldHJpY3Nfa29iaik7Ci0JCWRldl9wcml2LT5wZXJmLm1ldHJp Y3Nfa29iaiA9IE5VTEw7CisJaWYgKElTX0hBU1dFTEwoZGV2X3ByaXYpKSB7CisJCWlmIChpOTE1 X3BlcmZfcmVnaXN0ZXJfc3lzZnNfaHN3KGRldl9wcml2KSkKKwkJCWdvdG8gc3lzZnNfZXJyb3I7 CisJfSBlbHNlIGlmIChJU19CUk9BRFdFTEwoZGV2X3ByaXYpKSB7CisJCWlmIChpOTE1X3BlcmZf cmVnaXN0ZXJfc3lzZnNfYmR3KGRldl9wcml2KSkKKwkJCWdvdG8gc3lzZnNfZXJyb3I7CisJfSBl bHNlIGlmIChJU19DSEVSUllWSUVXKGRldl9wcml2KSkgeworCQlpZiAoaTkxNV9wZXJmX3JlZ2lz dGVyX3N5c2ZzX2NodihkZXZfcHJpdikpCisJCQlnb3RvIHN5c2ZzX2Vycm9yOworCX0gZWxzZSBp ZiAoSVNfU0tZTEFLRShkZXZfcHJpdikpIHsKKwkJaWYgKElTX1NLTF9HVDIoZGV2X3ByaXYpKSB7 CisJCQlpZiAoaTkxNV9wZXJmX3JlZ2lzdGVyX3N5c2ZzX3NrbGd0MihkZXZfcHJpdikpCisJCQkJ Z290byBzeXNmc19lcnJvcjsKKwkJfSBlbHNlIGlmIChJU19TS0xfR1QzKGRldl9wcml2KSkgewor CQkJaWYgKGk5MTVfcGVyZl9yZWdpc3Rlcl9zeXNmc19za2xndDMoZGV2X3ByaXYpKQorCQkJCWdv dG8gc3lzZnNfZXJyb3I7CisJCX0gZWxzZSBpZiAoSVNfU0tMX0dUNChkZXZfcHJpdikpIHsKKwkJ CWlmIChpOTE1X3BlcmZfcmVnaXN0ZXJfc3lzZnNfc2tsZ3Q0KGRldl9wcml2KSkKKwkJCQlnb3Rv IHN5c2ZzX2Vycm9yOworCQl9IGVsc2UKKwkJCWdvdG8gc3lzZnNfZXJyb3I7CisJfSBlbHNlIGlm IChJU19CUk9YVE9OKGRldl9wcml2KSkgeworCQlpZiAoaTkxNV9wZXJmX3JlZ2lzdGVyX3N5c2Zz X2J4dChkZXZfcHJpdikpCisJCQlnb3RvIHN5c2ZzX2Vycm9yOwogCX0KIAorCWdvdG8gZXhpdDsK Kworc3lzZnNfZXJyb3I6CisJa29iamVjdF9wdXQoZGV2X3ByaXYtPnBlcmYubWV0cmljc19rb2Jq KTsKKwlkZXZfcHJpdi0+cGVyZi5tZXRyaWNzX2tvYmogPSBOVUxMOworCiBleGl0OgogCW11dGV4 X3VubG9jaygmZGV2X3ByaXYtPnBlcmYubG9jayk7CiB9CkBAIC0yMTA3LDEzICsyODIyLDI0IEBA IHZvaWQgaTkxNV9wZXJmX3JlZ2lzdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dikKICAqLwogdm9pZCBpOTE1X3BlcmZfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYpCiB7Ci0JaWYgKCFJU19IQVNXRUxMKGRldl9wcml2KSkKLQkJcmV0dXJuOwot CiAJaWYgKCFkZXZfcHJpdi0+cGVyZi5tZXRyaWNzX2tvYmopCiAJCXJldHVybjsKIAotCWk5MTVf cGVyZl91bnJlZ2lzdGVyX3N5c2ZzX2hzdyhkZXZfcHJpdik7CisgICAgICAgIGlmIChJU19IQVNX RUxMKGRldl9wcml2KSkKKyAgICAgICAgICAgICAgICBpOTE1X3BlcmZfdW5yZWdpc3Rlcl9zeXNm c19oc3coZGV2X3ByaXYpOworICAgICAgICBlbHNlIGlmIChJU19CUk9BRFdFTEwoZGV2X3ByaXYp KQorICAgICAgICAgICAgICAgIGk5MTVfcGVyZl91bnJlZ2lzdGVyX3N5c2ZzX2JkdyhkZXZfcHJp dik7CisgICAgICAgIGVsc2UgaWYgKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKQorICAgICAgICAg ICAgICAgIGk5MTVfcGVyZl91bnJlZ2lzdGVyX3N5c2ZzX2NodihkZXZfcHJpdik7CisgICAgICAg IGVsc2UgaWYgKElTX1NLWUxBS0UoZGV2X3ByaXYpKSB7CisJCWlmIChJU19TS0xfR1QyKGRldl9w cml2KSkKKwkJCWk5MTVfcGVyZl91bnJlZ2lzdGVyX3N5c2ZzX3NrbGd0MihkZXZfcHJpdik7CisJ CWVsc2UgaWYgKElTX1NLTF9HVDMoZGV2X3ByaXYpKQorCQkJaTkxNV9wZXJmX3VucmVnaXN0ZXJf c3lzZnNfc2tsZ3QzKGRldl9wcml2KTsKKwkJZWxzZSBpZiAoSVNfU0tMX0dUNChkZXZfcHJpdikp CisJCQlpOTE1X3BlcmZfdW5yZWdpc3Rlcl9zeXNmc19za2xndDQoZGV2X3ByaXYpOworCX0gZWxz ZSBpZiAoSVNfQlJPWFRPTihkZXZfcHJpdikpCisgICAgICAgICAgICAgICAgaTkxNV9wZXJmX3Vu cmVnaXN0ZXJfc3lzZnNfYnh0KGRldl9wcml2KTsKIAogCWtvYmplY3RfcHV0KGRldl9wcml2LT5w ZXJmLm1ldHJpY3Nfa29iaik7CiAJZGV2X3ByaXYtPnBlcmYubWV0cmljc19rb2JqID0gTlVMTDsK QEAgLTIxNzIsMzYgKzI4OTgsMTA1IEBAIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGRldl9yb290 W10gPSB7CiAgKi8KIHZvaWQgaTkxNV9wZXJmX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2KQogewotCWlmICghSVNfSEFTV0VMTChkZXZfcHJpdikpCi0JCXJldHVybjsKLQot CWhydGltZXJfaW5pdCgmZGV2X3ByaXYtPnBlcmYub2EucG9sbF9jaGVja190aW1lciwKLQkJICAg ICBDTE9DS19NT05PVE9OSUMsIEhSVElNRVJfTU9ERV9SRUwpOwotCWRldl9wcml2LT5wZXJmLm9h LnBvbGxfY2hlY2tfdGltZXIuZnVuY3Rpb24gPSBvYV9wb2xsX2NoZWNrX3RpbWVyX2NiOwotCWlu aXRfd2FpdHF1ZXVlX2hlYWQoJmRldl9wcml2LT5wZXJmLm9hLnBvbGxfd3EpOworCWRldl9wcml2 LT5wZXJmLm9hLm5fYnVpbHRpbl9zZXRzID0gMDsKKworCWlmIChJU19IQVNXRUxMKGRldl9wcml2 KSkgeworCQlkZXZfcHJpdi0+cGVyZi5vYS5vcHMuaW5pdF9vYV9idWZmZXIgPSBnZW43X2luaXRf b2FfYnVmZmVyOworCQlkZXZfcHJpdi0+cGVyZi5vYS5vcHMuZW5hYmxlX21ldHJpY19zZXQgPSBo c3dfZW5hYmxlX21ldHJpY19zZXQ7CisJCWRldl9wcml2LT5wZXJmLm9hLm9wcy5kaXNhYmxlX21l dHJpY19zZXQgPSBoc3dfZGlzYWJsZV9tZXRyaWNfc2V0OworCQlkZXZfcHJpdi0+cGVyZi5vYS5v cHMub2FfZW5hYmxlID0gZ2VuN19vYV9lbmFibGU7CisJCWRldl9wcml2LT5wZXJmLm9hLm9wcy5v YV9kaXNhYmxlID0gZ2VuN19vYV9kaXNhYmxlOworCQlkZXZfcHJpdi0+cGVyZi5vYS5vcHMucmVh ZCA9IGdlbjdfb2FfcmVhZDsKKwkJZGV2X3ByaXYtPnBlcmYub2Eub3BzLm9hX2h3X3RhaWxfcmVh ZCA9CisJCQlnZW43X29hX2h3X3RhaWxfcmVhZDsKKworCQlkZXZfcHJpdi0+cGVyZi5vYS5vYV9m b3JtYXRzID0gaHN3X29hX2Zvcm1hdHM7CisKKwkJZGV2X3ByaXYtPnBlcmYub2Eubl9idWlsdGlu X3NldHMgPQorCQkJaTkxNV9vYV9uX2J1aWx0aW5fbWV0cmljX3NldHNfaHN3OworCX0gZWxzZSBp ZiAoaTkxNS5lbmFibGVfZXhlY2xpc3RzKSB7CisJCS8qIE5vdGU6IHRoYXQgYWx0aG91Z2ggd2Ug Y291bGQgdGhlb3JldGljYWxseSBhbHNvIHN1cHBvcnQgdGhlCisJCSAqIGxlZ2FjeSByaW5nYnVm ZmVyIG1vZGUgb24gQkRXIChhbmQgZWFybGllciBpdGVyYXRpb25zIG9mCisJCSAqIHRoaXMgZHJp dmVyLCBiZWZvcmUgdXBzdHJlYW1pbmcgZGlkIHRoaXMpIGl0IGRpZG4ndCBzZWVtCisJCSAqIHdv cnRoIHRoZSBjb21wbGV4aXR5IHRvIG1haW50YWluIG5vdyB0aGF0IEJEVysgZW5hYmxlCisJCSAq IGV4ZWNsaXN0IG1vZGUgYnkgZGVmYXVsdC4KKwkJICovCiAKLQlJTklUX0xJU1RfSEVBRCgmZGV2 X3ByaXYtPnBlcmYuc3RyZWFtcyk7Ci0JbXV0ZXhfaW5pdCgmZGV2X3ByaXYtPnBlcmYubG9jayk7 Ci0Jc3Bpbl9sb2NrX2luaXQoJmRldl9wcml2LT5wZXJmLmhvb2tfbG9jayk7Ci0Jc3Bpbl9sb2Nr X2luaXQoJmRldl9wcml2LT5wZXJmLm9hLm9hX2J1ZmZlci5wdHJfbG9jayk7CisJCWlmIChJU19H RU44KGRldl9wcml2KSkgeworCQkJZGV2X3ByaXYtPnBlcmYub2EuY3R4X29hY3R4Y3RybF9vZmZz ZXQgPSAweDEyMDsKKwkJCWRldl9wcml2LT5wZXJmLm9hLmN0eF9mbGV4ZXUwX29mZnNldCA9IDB4 MmNlOworCQkJZGV2X3ByaXYtPnBlcmYub2EuZ2VuOF92YWxpZF9jdHhfYml0ID0gKDE8PDI1KTsK KworCQkJaWYgKElTX0JST0FEV0VMTChkZXZfcHJpdikpIHsKKwkJCQlkZXZfcHJpdi0+cGVyZi5v YS5uX2J1aWx0aW5fc2V0cyA9CisJCQkJCWk5MTVfb2Ffbl9idWlsdGluX21ldHJpY19zZXRzX2Jk dzsKKwkJCQlkZXZfcHJpdi0+cGVyZi5vYS5vcHMuc2VsZWN0X21ldHJpY19zZXQgPQorCQkJCQlp OTE1X29hX3NlbGVjdF9tZXRyaWNfc2V0X2JkdzsKKwkJCX0gZWxzZSBpZiAoSVNfQ0hFUlJZVklF VyhkZXZfcHJpdikpIHsKKwkJCQlkZXZfcHJpdi0+cGVyZi5vYS5uX2J1aWx0aW5fc2V0cyA9CisJ CQkJCWk5MTVfb2Ffbl9idWlsdGluX21ldHJpY19zZXRzX2NodjsKKwkJCQlkZXZfcHJpdi0+cGVy Zi5vYS5vcHMuc2VsZWN0X21ldHJpY19zZXQgPQorCQkJCQlpOTE1X29hX3NlbGVjdF9tZXRyaWNf c2V0X2NodjsKKwkJCX0KKwkJfSBlbHNlIGlmIChJU19HRU45KGRldl9wcml2KSkgeworCQkJZGV2 X3ByaXYtPnBlcmYub2EuY3R4X29hY3R4Y3RybF9vZmZzZXQgPSAweDEyODsKKwkJCWRldl9wcml2 LT5wZXJmLm9hLmN0eF9mbGV4ZXUwX29mZnNldCA9IDB4M2RlOworCQkJZGV2X3ByaXYtPnBlcmYu b2EuZ2VuOF92YWxpZF9jdHhfYml0ID0gKDE8PDE2KTsKKworCQkJaWYgKElTX1NLTF9HVDIoZGV2 X3ByaXYpKSB7CisJCQkJZGV2X3ByaXYtPnBlcmYub2Eubl9idWlsdGluX3NldHMgPQorCQkJCQlp OTE1X29hX25fYnVpbHRpbl9tZXRyaWNfc2V0c19za2xndDI7CisJCQkJZGV2X3ByaXYtPnBlcmYu b2Eub3BzLnNlbGVjdF9tZXRyaWNfc2V0ID0KKwkJCQkJaTkxNV9vYV9zZWxlY3RfbWV0cmljX3Nl dF9za2xndDI7CisJCQl9IGVsc2UgaWYgKElTX1NLTF9HVDMoZGV2X3ByaXYpKSB7CisJCQkJZGV2 X3ByaXYtPnBlcmYub2Eubl9idWlsdGluX3NldHMgPQorCQkJCQlpOTE1X29hX25fYnVpbHRpbl9t ZXRyaWNfc2V0c19za2xndDM7CisJCQkJZGV2X3ByaXYtPnBlcmYub2Eub3BzLnNlbGVjdF9tZXRy aWNfc2V0ID0KKwkJCQkJaTkxNV9vYV9zZWxlY3RfbWV0cmljX3NldF9za2xndDM7CisJCQl9IGVs c2UgaWYgKElTX1NLTF9HVDQoZGV2X3ByaXYpKSB7CisJCQkJZGV2X3ByaXYtPnBlcmYub2Eubl9i dWlsdGluX3NldHMgPQorCQkJCQlpOTE1X29hX25fYnVpbHRpbl9tZXRyaWNfc2V0c19za2xndDQ7 CisJCQkJZGV2X3ByaXYtPnBlcmYub2Eub3BzLnNlbGVjdF9tZXRyaWNfc2V0ID0KKwkJCQkJaTkx NV9vYV9zZWxlY3RfbWV0cmljX3NldF9za2xndDQ7CisJCQl9IGVsc2UgaWYgKElTX0JST1hUT04o ZGV2X3ByaXYpKSB7CisJCQkJZGV2X3ByaXYtPnBlcmYub2Eubl9idWlsdGluX3NldHMgPQorCQkJ CQlpOTE1X29hX25fYnVpbHRpbl9tZXRyaWNfc2V0c19ieHQ7CisJCQkJZGV2X3ByaXYtPnBlcmYu b2Eub3BzLnNlbGVjdF9tZXRyaWNfc2V0ID0KKwkJCQkJaTkxNV9vYV9zZWxlY3RfbWV0cmljX3Nl dF9ieHQ7CisJCQl9CisJCX0KIAotCWRldl9wcml2LT5wZXJmLm9hLm9wcy5pbml0X29hX2J1ZmZl ciA9IGdlbjdfaW5pdF9vYV9idWZmZXI7Ci0JZGV2X3ByaXYtPnBlcmYub2Eub3BzLmVuYWJsZV9t ZXRyaWNfc2V0ID0gaHN3X2VuYWJsZV9tZXRyaWNfc2V0OwotCWRldl9wcml2LT5wZXJmLm9hLm9w cy5kaXNhYmxlX21ldHJpY19zZXQgPSBoc3dfZGlzYWJsZV9tZXRyaWNfc2V0OwotCWRldl9wcml2 LT5wZXJmLm9hLm9wcy5vYV9lbmFibGUgPSBnZW43X29hX2VuYWJsZTsKLQlkZXZfcHJpdi0+cGVy Zi5vYS5vcHMub2FfZGlzYWJsZSA9IGdlbjdfb2FfZGlzYWJsZTsKLQlkZXZfcHJpdi0+cGVyZi5v YS5vcHMucmVhZCA9IGdlbjdfb2FfcmVhZDsKLQlkZXZfcHJpdi0+cGVyZi5vYS5vcHMub2FfYnVm ZmVyX2NoZWNrID0KLQkJZ2VuN19vYV9idWZmZXJfY2hlY2tfdW5sb2NrZWQ7CisJCWlmIChkZXZf cHJpdi0+cGVyZi5vYS5uX2J1aWx0aW5fc2V0cykgeworCQkJZGV2X3ByaXYtPnBlcmYub2Eub3Bz LmluaXRfb2FfYnVmZmVyID0gZ2VuOF9pbml0X29hX2J1ZmZlcjsKKwkJCWRldl9wcml2LT5wZXJm Lm9hLm9wcy5lbmFibGVfbWV0cmljX3NldCA9CisJCQkJZ2VuOF9lbmFibGVfbWV0cmljX3NldDsK KwkJCWRldl9wcml2LT5wZXJmLm9hLm9wcy5kaXNhYmxlX21ldHJpY19zZXQgPQorCQkJCWdlbjhf ZGlzYWJsZV9tZXRyaWNfc2V0OworCQkJZGV2X3ByaXYtPnBlcmYub2Eub3BzLm9hX2VuYWJsZSA9 IGdlbjhfb2FfZW5hYmxlOworCQkJZGV2X3ByaXYtPnBlcmYub2Eub3BzLm9hX2Rpc2FibGUgPSBn ZW44X29hX2Rpc2FibGU7CisJCQlkZXZfcHJpdi0+cGVyZi5vYS5vcHMucmVhZCA9IGdlbjhfb2Ff cmVhZDsKKwkJCWRldl9wcml2LT5wZXJmLm9hLm9wcy5vYV9od190YWlsX3JlYWQgPQorCQkJCWdl bjhfb2FfaHdfdGFpbF9yZWFkOworCisJCQlkZXZfcHJpdi0+cGVyZi5vYS5vYV9mb3JtYXRzID0g Z2VuOF9wbHVzX29hX2Zvcm1hdHM7CisJCX0KKwl9CiAKLQlkZXZfcHJpdi0+cGVyZi5vYS5vYV9m b3JtYXRzID0gaHN3X29hX2Zvcm1hdHM7CisJaWYgKGRldl9wcml2LT5wZXJmLm9hLm5fYnVpbHRp bl9zZXRzKSB7CisJCWhydGltZXJfaW5pdCgmZGV2X3ByaXYtPnBlcmYub2EucG9sbF9jaGVja190 aW1lciwKKwkJCQlDTE9DS19NT05PVE9OSUMsIEhSVElNRVJfTU9ERV9SRUwpOworCQlkZXZfcHJp di0+cGVyZi5vYS5wb2xsX2NoZWNrX3RpbWVyLmZ1bmN0aW9uID0gb2FfcG9sbF9jaGVja190aW1l cl9jYjsKKwkJaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2X3ByaXYtPnBlcmYub2EucG9sbF93cSk7 CiAKLQlkZXZfcHJpdi0+cGVyZi5vYS5uX2J1aWx0aW5fc2V0cyA9Ci0JCWk5MTVfb2Ffbl9idWls dGluX21ldHJpY19zZXRzX2hzdzsKKwkJSU5JVF9MSVNUX0hFQUQoJmRldl9wcml2LT5wZXJmLnN0 cmVhbXMpOworCQltdXRleF9pbml0KCZkZXZfcHJpdi0+cGVyZi5sb2NrKTsKKwkJc3Bpbl9sb2Nr X2luaXQoJmRldl9wcml2LT5wZXJmLmhvb2tfbG9jayk7CisJCXNwaW5fbG9ja19pbml0KCZkZXZf cHJpdi0+cGVyZi5vYS5vYV9idWZmZXIucHRyX2xvY2spOwogCi0JZGV2X3ByaXYtPnBlcmYuc3lz Y3RsX2hlYWRlciA9IHJlZ2lzdGVyX3N5c2N0bF90YWJsZShkZXZfcm9vdCk7CisJCWRldl9wcml2 LT5wZXJmLnN5c2N0bF9oZWFkZXIgPSByZWdpc3Rlcl9zeXNjdGxfdGFibGUoZGV2X3Jvb3QpOwog Ci0JZGV2X3ByaXYtPnBlcmYuaW5pdGlhbGl6ZWQgPSB0cnVlOworCQlkZXZfcHJpdi0+cGVyZi5p bml0aWFsaXplZCA9IHRydWU7CisJfQogfQogCiAvKioKQEAgLTIyMTYsNSArMzAxMSw2IEBAIHZv aWQgaTkxNV9wZXJmX2Zpbmkoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCXVu cmVnaXN0ZXJfc3lzY3RsX3RhYmxlKGRldl9wcml2LT5wZXJmLnN5c2N0bF9oZWFkZXIpOwogCiAJ bWVtc2V0KCZkZXZfcHJpdi0+cGVyZi5vYS5vcHMsIDAsIHNpemVvZihkZXZfcHJpdi0+cGVyZi5v YS5vcHMpKTsKKwogCWRldl9wcml2LT5wZXJmLmluaXRpYWxpemVkID0gZmFsc2U7CiB9CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9yZWcuaAppbmRleCAxMWIxMmY0MTI0OTIuLjgyNzdlYTgxNDkwNiAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAorKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X3JlZy5oCkBAIC02NDUsNiArNjQ1LDEyIEBAIHN0YXRpYyBpbmxpbmUgYm9v bCBpOTE1X21taW9fcmVnX3ZhbGlkKGk5MTVfcmVnX3QgcmVnKQogCiAjZGVmaW5lIEdFTjhfT0FD VFhJRCBfTU1JTygweDIzNjQpCiAKKyNkZWZpbmUgR0VOOF9PQV9ERUJVRyBfTU1JTygweDJCMDQp CisjZGVmaW5lICBHRU45X09BX0RFQlVHX0RJU0FCTEVfQ0xLX1JBVElPX1JFUE9SVFMgICAgKDE8 PDUpCisjZGVmaW5lICBHRU45X09BX0RFQlVHX0lOQ0xVREVfQ0xLX1JBVElPCSAgICAoMTw8NikK KyNkZWZpbmUgIEdFTjlfT0FfREVCVUdfRElTQUJMRV9HT18xXzBfUkVQT1JUUwkgICAgKDE8PDIp CisjZGVmaW5lICBHRU45X09BX0RFQlVHX0RJU0FCTEVfQ1RYX1NXSVRDSF9SRVBPUlRTICAgKDE8 PDEpCisKICNkZWZpbmUgR0VOOF9PQUNPTlRST0wgX01NSU8oMHgyQjAwKQogI2RlZmluZSAgR0VO OF9PQV9SRVBPUlRfRk9STUFUX0ExMgkgICAgKDA8PDIpCiAjZGVmaW5lICBHRU44X09BX1JFUE9S VF9GT1JNQVRfQTEyX0I4X0M4ICAgICgyPDwyKQpAQCAtNjY2LDYgKzY3Miw3IEBAIHN0YXRpYyBp bmxpbmUgYm9vbCBpOTE1X21taW9fcmVnX3ZhbGlkKGk5MTVfcmVnX3QgcmVnKQogI2RlZmluZSAg R0VON19PQUJVRkZFUl9TVE9QX1JFU1VNRV9FTkFCTEUgICAoMTw8MSkKICNkZWZpbmUgIEdFTjdf T0FCVUZGRVJfUkVTVU1FCQkgICAgKDE8PDApCiAKKyNkZWZpbmUgR0VOOF9PQUJVRkZFUl9VRFcg X01NSU8oMHgyM2I0KQogI2RlZmluZSBHRU44X09BQlVGRkVSIF9NTUlPKDB4MmIxNCkKIAogI2Rl ZmluZSBHRU43X09BU1RBVFVTMSBfTU1JTygweDIzNjQpCkBAIC02ODQsNyArNjkxLDkgQEAgc3Rh dGljIGlubGluZSBib29sIGk5MTVfbW1pb19yZWdfdmFsaWQoaTkxNV9yZWdfdCByZWcpCiAjZGVm aW5lICBHRU44X09BU1RBVFVTX1JFUE9SVF9MT1NUCSAgICAoMTw8MCkKIAogI2RlZmluZSBHRU44 X09BSEVBRFBUUiBfTU1JTygweDJCMEMpCisjZGVmaW5lIEdFTjhfT0FIRUFEUFRSX01BU0sgICAg MHhmZmZmZmZjMAogI2RlZmluZSBHRU44X09BVEFJTFBUUiBfTU1JTygweDJCMTApCisjZGVmaW5l IEdFTjhfT0FUQUlMUFRSX01BU0sgICAgMHhmZmZmZmZjMAogCiAjZGVmaW5lIE9BQlVGRkVSX1NJ WkVfMTI4SyAgKDA8PDMpCiAjZGVmaW5lIE9BQlVGRkVSX1NJWkVfMjU2SyAgKDE8PDMpCkBAIC02 OTcsNyArNzA2LDE3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpOTE1X21taW9fcmVnX3ZhbGlkKGk5 MTVfcmVnX3QgcmVnKQogCiAjZGVmaW5lIE9BX01FTV9TRUxFQ1RfR0dUVCAgKDE8PDApCiAKKy8q CisgKiBGbGV4aWJsZSwgQWdncmVnYXRlIEVVIENvdW50ZXIgUmVnaXN0ZXJzLgorICogTm90ZTog dGhlc2UgYXJlbid0IGNvbnRpZ3VvdXMKKyAqLwogI2RlZmluZSBFVV9QRVJGX0NOVEwwCSAgICBf TU1JTygweGU0NTgpCisjZGVmaW5lIEVVX1BFUkZfQ05UTDEJICAgIF9NTUlPKDB4ZTU1OCkKKyNk ZWZpbmUgRVVfUEVSRl9DTlRMMgkgICAgX01NSU8oMHhlNjU4KQorI2RlZmluZSBFVV9QRVJGX0NO VEwzCSAgICBfTU1JTygweGU3NTgpCisjZGVmaW5lIEVVX1BFUkZfQ05UTDQJICAgIF9NTUlPKDB4 ZTQ1YykKKyNkZWZpbmUgRVVfUEVSRl9DTlRMNQkgICAgX01NSU8oMHhlNTVjKQorI2RlZmluZSBF VV9QRVJGX0NOVEw2CSAgICBfTU1JTygweGU2NWMpCiAKICNkZWZpbmUgR0RUX0NISUNLRU5fQklU UyAgICBfTU1JTygweDk4NDApCiAjZGVmaW5lIEdUX05PQV9FTkFCTEUJICAgIDB4MDAwMDAwODAK QEAgLTIzMTcsNiArMjMzNiw5IEBAIGVudW0gc2tsX2Rpc3BfcG93ZXJfd2VsbHMgewogI2RlZmlu ZSAgIEdFTjhfUkNfU0VNQV9JRExFX01TR19ESVNBQkxFCSgxIDw8IDEyKQogI2RlZmluZSAgIEdF TjhfRkZfRE9QX0NMT0NLX0dBVEVfRElTQUJMRQkoMTw8MTApCiAKKyNkZWZpbmUgR0VONl9SQ1Nf UFdSX0ZTTSBfTU1JTygweDIyYWMpCisjZGVmaW5lIEdFTjlfUkNTX0ZFX0ZTTTIgX01NSU8oMHgy MmE0KQorCiAvKiBGdXNlIHJlYWRvdXQgcmVnaXN0ZXJzIGZvciBHVCAqLwogI2RlZmluZSBDSFZf RlVTRV9HVAkJCV9NTUlPKFZMVl9ESVNQTEFZX0JBU0UgKyAweDIxNjgpCiAjZGVmaW5lICAgQ0hW X0ZHVF9ESVNBQkxFX1NTMAkJKDEgPDwgMTApCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9scmMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCmluZGV4 IDBkYzFjYzRhZDZlNy4uZThmNjQ5YjJiYWZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9scmMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYwpA QCAtMzM3LDYgKzMzNyw4IEBAIHN0YXRpYyB1NjQgZXhlY2xpc3RzX3VwZGF0ZV9jb250ZXh0KHN0 cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcnEpCiAJaWYgKHBwZ3R0ICYmICFpOTE1X3ZtX2lz XzQ4Yml0KCZwcGd0dC0+YmFzZSkpCiAJCWV4ZWNsaXN0c191cGRhdGVfY29udGV4dF9wZHBzKHBw Z3R0LCByZWdfc3RhdGUpOwogCisJaTkxNV9vYV91cGRhdGVfcmVnX3N0YXRlKHJxLT5lbmdpbmUs IHJxLT5jdHgsIHJlZ19zdGF0ZSk7CisKIAlyZXR1cm4gY2UtPmxyY19kZXNjOwogfQogCkBAIC0x ODcwLDYgKzE4NzIsOSBAQCBzdGF0aWMgdm9pZCBleGVjbGlzdHNfaW5pdF9yZWdfc3RhdGUodTMy ICpyZWdzLAogCQlyZWdzW0NUWF9MUklfSEVBREVSXzJdID0gTUlfTE9BRF9SRUdJU1RFUl9JTU0o MSk7CiAJCUNUWF9SRUcocmVncywgQ1RYX1JfUFdSX0NMS19TVEFURSwgR0VOOF9SX1BXUl9DTEtf U1RBVEUsCiAJCQltYWtlX3JwY3MoZGV2X3ByaXYpKTsKKworCQlhdG9taWNfc2V0KCZjdHgtPmVu Z2luZVtSQ1NdLm9hX3N0YXRlX2RpcnR5LCAxKTsKKwkJaTkxNV9vYV91cGRhdGVfcmVnX3N0YXRl KGVuZ2luZSwgY3R4LCByZWdzKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9k cm0vaTkxNV9kcm0uaCBiL2luY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaAppbmRleCBlMDU5OWU3 MjllNjguLjAzYjgzMzg0OTkxOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2RybS9pOTE1X2Ry bS5oCisrKyBiL2luY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaApAQCAtMTI5NSwxMyArMTI5NSwx OCBAQCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW0gewogfTsKIAogZW51bSBkcm1f aTkxNV9vYV9mb3JtYXQgewotCUk5MTVfT0FfRk9STUFUX0ExMyA9IDEsCi0JSTkxNV9PQV9GT1JN QVRfQTI5LAotCUk5MTVfT0FfRk9STUFUX0ExM19COF9DOCwKLQlJOTE1X09BX0ZPUk1BVF9CNF9D OCwKLQlJOTE1X09BX0ZPUk1BVF9BNDVfQjhfQzgsCi0JSTkxNV9PQV9GT1JNQVRfQjRfQzhfQTE2 LAotCUk5MTVfT0FfRk9STUFUX0M0X0I4LAorCUk5MTVfT0FfRk9STUFUX0ExMyA9IDEsCSAgICAv KiBIU1cgb25seSAqLworCUk5MTVfT0FfRk9STUFUX0EyOSwJICAgIC8qIEhTVyBvbmx5ICovCisJ STkxNV9PQV9GT1JNQVRfQTEzX0I4X0M4LCAgIC8qIEhTVyBvbmx5ICovCisJSTkxNV9PQV9GT1JN QVRfQjRfQzgsCSAgICAvKiBIU1cgb25seSAqLworCUk5MTVfT0FfRk9STUFUX0E0NV9COF9DOCwg ICAvKiBIU1cgb25seSAqLworCUk5MTVfT0FfRk9STUFUX0I0X0M4X0ExNiwgICAvKiBIU1cgb25s eSAqLworCUk5MTVfT0FfRk9STUFUX0M0X0I4LAkgICAgLyogSFNXKyAqLworCisJLyogR2VuOCsg Ki8KKwlJOTE1X09BX0ZPUk1BVF9BMTIsCisJSTkxNV9PQV9GT1JNQVRfQTEyX0I4X0M4LAorCUk5 MTVfT0FfRk9STUFUX0EzMnU0MF9BNHUzMl9COF9DOCwKIAogCUk5MTVfT0FfRk9STUFUX01BWAkg ICAgLyogbm9uLUFCSSAqLwogfTsKLS0gCjIuMTIuMAoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhA bGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxt YW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==