From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dongwon Kim Subject: [RFC PATCH v2 1/9] hyper_dmabuf: initial upload of hyper_dmabuf drv core framework Date: Tue, 13 Feb 2018 17:50:00 -0800 Message-ID: <20180214015008.9513-2-dongwon.kim__31096.3076459759$1518573040$gmane$org@intel.com> References: <20180214015008.9513-1-dongwon.kim@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1elmEH-00076t-HB for xen-devel@lists.xenproject.org; Wed, 14 Feb 2018 01:51:25 +0000 In-Reply-To: <20180214015008.9513-1-dongwon.kim@intel.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: linux-kernel@vger.kernel.org, linaro-mm-sig@lists.linaro.org, xen-devel@lists.xenproject.org Cc: sumit.semwal@linaro.org, dongwon.kim@intel.com, dri-devel@lists.freedesktop.org, mateuszx.potrola@intel.com List-Id: xen-devel@lists.xenproject.org VXBsb2FkIG9mIGludGlhbCB2ZXJzaW9uIG9mIGNvcmUgZnJhbWV3b3JrIGluIGh5cGVyX0RNQUJV RiBkcml2ZXIKZW5hYmxpbmcgRE1BX0JVRiBleGNoYW5nZSBiZXR3ZWVuIHR3byBkaWZmZXJlbnQg Vk1zIGluIHZpcnR1YWxpemVkCnBsYXRmb3JtIGJhc2VkIG9uIEh5cGVydmlzb3Igc3VjaCBhcyBY RU4uCgpIeXBlcl9ETUFCVUYgZHJ2J3MgcHJpbWFyeSByb2xlIGlzIHRvIGltcG9ydCBhIERNQV9C VUYgZnJvbSBvcmlnaW5hdG9yCnRoZW4gcmUtZXhwb3J0IGl0IHRvIGFub3RoZXIgTGludXggVk0g c28gdGhhdCBpdCBjYW4gYmUgbWFwcGVkIGFuZAphY2Nlc3NlZCBpbiB0aGVyZS4KClRoaXMgZHJp dmVyIGhhcyB0d28gbGF5ZXJzLCBvbmUgaXMgc28gY2FsbGVkLCAiY29yZSBmcmFtZXdvcmsiLCB3 aGljaApjb250YWlucyBkcml2ZXIgaW50ZXJmYWNlIGFuZCBjb3JlIGZ1bmN0aW9ucyBoYW5kbGlu ZyBleHBvcnQvaW1wb3J0IG9mCm5ldyBoeXBlcl9ETUFCVUYgYW5kIGl0cyBtYWludGVuYW5jZS4g VGhpcyBwYXJ0IG9mIHRoZSBkcml2ZXIgaXMKaW5kZXBlbmRlbnQgZnJvbSBIeXBlcnZpc29yIHNv IGNhbiB3b3JrIGFzIGlzIHdpdGggYW55IEh5cGVydmlzb3IuCgpUaGUgb3RoZXIgbGF5ZXIgaXMg Y2FsbGVkICJIeXBlcnZpc29yIEJhY2tlbmQiLiBUaGlzIGxheWVyIHJlcHJlc2VudHMKdGhlIGlu dGVyZmFjZSBiZXR3ZWVuICJjb3JlIGZyYW1ld29yayIgYW5kIGFjdHVhbCBIeXBlcnZpc29yLCBo YW5kbGluZwptZW1vcnkgc2hhcmluZyBhbmQgY29tbXVuaWNhdGlvbi4gTm90IGxpa2UgImNvcmUg ZnJhbWV3b3JrIiwgZXZlcnkKSHlwZXJ2aXNvciBuZWVkcyBpdCdzIG93biBiYWNrZW5kIGludGVy ZmFjZSBkZXNpZ25lZCB1c2luZyBpdHMgbmF0aXZlCm1lY2hhbmlzbSBmb3IgbWVtb3J5IHNoYXJp bmcgYW5kIGludGVyLVZNIGNvbW11bmljYXRpb24uCgpUaGlzIHBhdGNoIGNvbnRhaW5zIHRoZSBm aXJzdCBwYXJ0LCAiY29yZSBmcmFtZXdvcmsiLCB3aGljaCBjb25zaXN0cyBvZgo3IHNvdXJjZSBm aWxlcyBhbmQgMTEgaGVhZGVyIGZpbGVzLiBTb21lIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHRoZXNl CnNvdXJjZSBjb2RlIGFyZSBhdHRhY2hlZCBiZWxvdzoKCmh5cGVyX2RtYWJ1Zl9kcnYuYwoKLSBM aW51eCBkcml2ZXIgaW50ZXJmYWNlIGFuZCBpbml0aWFsaXphdGlvbi9jbGVhbmluZy11cCByb3V0 aW5lcwoKaHlwZXJfZG1hYnVmX2lvY3RsLmMKCi0gSU9DVExzIGNhbGxzIGZvciBleHBvcnQvaW1w b3J0IG9mIERNQS1CVUYgY29tbSBjaGFubmVsJ3MgY3JlYXRpb24gYW5kCiAgZGVzdHJ1Y3Rpb24u CgpoeXBlcl9kbWFidWZfc2dsX3Byb2MuYwoKLSBQcm92aWRlcyBtZXRob2RzIHRvIG1hbmFnaW5n IERNQS1CVUYgZm9yIGV4cG9yaW5nIGFuZCBpbXBvcnRpbmcuIEZvcgogIGV4cG9ydGluZywgZXh0 cmFjdGlvbiBvZiBwYWdlcywgc2hhcmluZyBwYWdlcyB2aWEgcHJvY2VkdXJlcyBpbgogICJCYWNr ZW5kIiBhbmQgbm90aWZ5aW5nIGltcG9ydGluZyBWTSBleGlzdC4gRm9yIGltcG9ydGluZywgYWxs CiAgb3BlcmF0aW9ucyByZWxhdGVkIHRvIHRoZSByZWNvbnN0cnVjdGlvbiBvZiBETUEtQlVGICh3 aXRoIHNoYXJlZAogIHBhZ2VzKSBvbiBpbXBvcnRlcidzIHNpZGUgYXJlIGRlZmluZWQuCgpoeXBl cl9kbWFidWZfb3BzLmMKCi0gU3RhbmRhcmQgRE1BLUJVRiBvcGVyYXRpb25zIGZvciBoeXBlcl9E TUFCVUYgcmVjb25zdHJ1Y3RlZCBvbgogIGltcG9ydGVyJ3Mgc2lkZS4KCmh5cGVyX2RtYWJ1Zl9s aXN0LmMKCi0gTGlzdHMgZm9yIHN0b3JpbmcgZXhwb3J0ZWQgYW5kIGltcG9ydGVkIGh5cGVyX0RN QUJVRiB0byBrZWVwIHRyYWNrIG9mCiAgcmVtb3RlIHVzYWdlIG9mIGh5cGVyX0RNQUJVRiBjdXJy ZW50bHkgYmVpbmcgc2hhcmVkLgoKaHlwZXJfZG1hYnVmX21zZy5jCgotIERlZmluZXMgbWVzc2Fn ZXMgZXhjaGFuZ2VkIGJldHdlZW4gVk1zIChleHBvcnRlciBhbmQgaW1wb3J0ZXIpIGFuZAogIGZ1 bmN0aW9uIGNhbGxzIGZvciBzZW5kaW5nIGFuZCBwYXJzaW5nICh3aGVuIHJlY2VpdmVkKSB0aG9z ZS4KCmh5cGVyX2RtYWJ1Zl9pZC5jCgotIENvbnRhaW5zIG1ldGhvZHMgdG8gZ2VuZXJhdGUgYW5k IG1hbmFnZSAiaHlwZXJfRE1BQlVGIGlkIiBmb3IgZWFjaAogIGh5cGVyX0RNQUJVRiBiZWluZyBl eHBvcnRlZC4gSXQgaXMgYSBnbG9iYWwgaGFuZGxlIGZvciBhIGh5cGVyX0RNQUJVRiwKICB3aGlj aCBhbm90aGVyIFZNIG5lZWRzIHRvIGtub3cgdG8gaW1wb3J0IGl0LgoKaHlwZXJfZG1hYnVmX3N0 cnVjdC5oCgotIENvbnRhaW5zIGRhdGEgc3RydWN0dXJlcyBvZiBpbXBvcnRlciBvciBleHBvcnRl ciBoeXBlcl9ETUFCVUYKCmluY2x1ZGUvdWFwaS9saW51eC9oeXBlcl9kbWFidWYuaAoKLSBDb250 YWlucyBkZWZpbml0aW9uIG9mIGRhdGEgdHlwZXMgYW5kIHN0cnVjdHVyZXMgcmVmZXJlbmNlZCBi eSB1c2VyCiAgYXBwbGljYXRpb24gdG8gaW50ZXJhY3Qgd2l0aCBkcml2ZXIKClNpZ25lZC1vZmYt Ynk6IERvbmd3b24gS2ltIDxkb25nd29uLmtpbUBpbnRlbC5jb20+ClNpZ25lZC1vZmYtYnk6IE1h dGV1c3ogUG9scm9sYSA8bWF0ZXVzengucG90cm9sYUBpbnRlbC5jb20+Ci0tLQogZHJpdmVycy9k bWEtYnVmL0tjb25maWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKwogZHJpdmVy cy9kbWEtYnVmL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogZHJp dmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9LY29uZmlnICAgICAgICAgICAgICAgfCAgMjMgKwog ZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9NYWtlZmlsZSAgICAgICAgICAgICAgfCAgMzQg KysKIGRyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX2Rydi5jICAgIHwg MjU0ICsrKysrKysrCiBkcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9k cnYuaCAgICB8IDExMSArKysrCiBkcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5cGVyX2Rt YWJ1Zl9pZC5jICAgICB8IDEzNSArKysrKwogZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9o eXBlcl9kbWFidWZfaWQuaCAgICAgfCAgNTMgKysKIGRyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFi dWYvaHlwZXJfZG1hYnVmX2lvY3RsLmMgIHwgNjcyICsrKysrKysrKysrKysrKysrKysrKwogZHJp dmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfaW9jdGwuaCAgfCAgNTIgKysK IGRyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX2xpc3QuYyAgIHwgMjk0 ICsrKysrKysrKwogZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfbGlz dC5oICAgfCAgNzMgKysrCiBkcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1 Zl9tc2cuYyAgICB8IDMyMCArKysrKysrKysrCiBkcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVm L2h5cGVyX2RtYWJ1Zl9tc2cuaCAgICB8ICA4NyArKysKIGRyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9k bWFidWYvaHlwZXJfZG1hYnVmX29wcy5jICAgIHwgMjY0ICsrKysrKysrCiBkcml2ZXJzL2RtYS1i dWYvaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9vcHMuaCAgICB8ICAzNCArKwogLi4uL2RtYS1i dWYvaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9zZ2xfcHJvYy5jICAgfCAyNTYgKysrKysrKysK IC4uLi9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfc2dsX3Byb2MuaCAgIHwgIDQz ICsrCiBkcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9zdHJ1Y3QuaCB8 IDEzMSArKysrCiBpbmNsdWRlL3VhcGkvbGludXgvaHlwZXJfZG1hYnVmLmggICAgICAgICAgICAg ICAgICB8ICA4NyArKysKIDIwIGZpbGVzIGNoYW5nZWQsIDI5MjYgaW5zZXJ0aW9ucygrKQogY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvS2NvbmZpZwogY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvTWFrZWZpbGUKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1 Zl9kcnYuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYv aHlwZXJfZG1hYnVmX2Rydi5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9kbWEtYnVmL2h5 cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfaWQuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv ZG1hLWJ1Zi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX2lkLmgKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9pb2N0bC5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZf aW9jdGwuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYv aHlwZXJfZG1hYnVmX2xpc3QuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZG1hLWJ1Zi9o eXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX2xpc3QuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX21zZy5jCiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfbXNnLmgKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1 Zl9vcHMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYv aHlwZXJfZG1hYnVmX29wcy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9kbWEtYnVmL2h5 cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfc2dsX3Byb2MuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX3NnbF9wcm9jLmgKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9z dHJ1Y3QuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvdWFwaS9saW51eC9oeXBlcl9kbWFi dWYuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnIGIvZHJpdmVycy9kbWEt YnVmL0tjb25maWcKaW5kZXggZWQzYjc4NWJhZTM3Li4wOWNjYWMxNzY4ZTMgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnCisrKyBiL2RyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnCkBA IC0zMCw0ICszMCw2IEBAIGNvbmZpZyBTV19TWU5DCiAJICBXQVJOSU5HOiBpbXByb3BlciB1c2Ug b2YgdGhpcyBjYW4gcmVzdWx0IGluIGRlYWRsb2NraW5nIGtlcm5lbAogCSAgZHJpdmVycyBmcm9t IHVzZXJzcGFjZS4gSW50ZW5kZWQgZm9yIHRlc3QgYW5kIGRlYnVnIG9ubHkuCiAKK3NvdXJjZSAi ZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9LY29uZmlnIgorCiBlbmRtZW51CmRpZmYgLS1n aXQgYS9kcml2ZXJzL2RtYS1idWYvTWFrZWZpbGUgYi9kcml2ZXJzL2RtYS1idWYvTWFrZWZpbGUK aW5kZXggYzMzYmY4ODYzMTQ3Li40NDU3NDliYWJiMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1h LWJ1Zi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2RtYS1idWYvTWFrZWZpbGUKQEAgLTEsMyArMSw0 IEBACiBvYmoteSA6PSBkbWEtYnVmLm8gZG1hLWZlbmNlLm8gZG1hLWZlbmNlLWFycmF5Lm8gcmVz ZXJ2YXRpb24ubyBzZXFuby1mZW5jZS5vCiBvYmotJChDT05GSUdfU1lOQ19GSUxFKQkJKz0gc3lu Y19maWxlLm8KIG9iai0kKENPTkZJR19TV19TWU5DKQkJKz0gc3dfc3luYy5vIHN5bmNfZGVidWcu bworb2JqLSQoQ09ORklHX0hZUEVSX0RNQUJVRikgICAgICArPSAuL2h5cGVyX2RtYWJ1Zi8KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvS2NvbmZpZyBiL2RyaXZlcnMv ZG1hLWJ1Zi9oeXBlcl9kbWFidWYvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMDAuLjVlYmY1MTZkNjVlYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZG1h LWJ1Zi9oeXBlcl9kbWFidWYvS2NvbmZpZwpAQCAtMCwwICsxLDIzIEBACittZW51ICJIWVBFUl9E TUFCVUYiCisKK2NvbmZpZyBIWVBFUl9ETUFCVUYKKwl0cmlzdGF0ZSAiRW5hYmxlcyBoeXBlciBk bWFidWYgZHJpdmVyIgorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMg SHlwZXJfRE1BQlVGIGRyaXZlci4KKworCSAgVGhpcyBkcml2ZXIgd29ya3MgYXMgYWJzdHJhY3Rp b24gbGF5ZXIgdGhhdCBleHBvcnQgYW5kIGltcG9ydAorCSAgRE1BX0JVRiBmcm9tL3RvIGFub3Ro ZXIgdmlydHVhbCBPUyBydW5uaW5nIG9uIHRoZSBzYW1lIEhXIHBsYXRmb3JtCisJICBwb3dlcmVk IGJ5IGEgaHlwZXJ2aXNvcgorCitjb25maWcgSFlQRVJfRE1BQlVGX1NZU0ZTCisJYm9vbCAiRW5h YmxlIHN5c2ZzIGluZm9ybWF0aW9uIGFib3V0IGh5cGVyIERNQSBidWZmZXJzIgorCWRlZmF1bHQg eQorCWRlcGVuZHMgb24gSFlQRVJfRE1BQlVGCisJaGVscAorCSAgRXhwb3NlIHJ1bi10aW1lIGlu Zm9ybWF0aW9uIGFib3V0IGN1cnJlbnRseSBpbXBvcnRlZCBhbmQgZXhwb3J0ZWQgYnVmZmVycwor CSAgcmVnaXN0ZXJlZCBpbiBFWFBPUlQgYW5kIElNUE9SVCBsaXN0IGluIEh5cGVyX0RNQUJVRiBk cml2ZXIuCisKKwkgIFRoZSBsb2NhdGlvbiBvZiBzeXNmcyBpcyB1bmRlciAiLi4uLiIKKworZW5k bWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9NYWtlZmlsZSBi L2RyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4zOTA4NTIyYjM5NmEKLS0tIC9kZXYvbnVsbAorKysgYi9k cml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL01ha2VmaWxlCkBAIC0wLDAgKzEsMzQgQEAKK1RB UkdFVF9NT0RVTEU6PWh5cGVyX2RtYWJ1ZgorCisjIElmIHdlIHJ1bm5pbmcgYnkga2VybmVsIGJ1 aWxkaW5nIHN5c3RlbQoraWZuZXEgKCQoS0VSTkVMUkVMRUFTRSksKQorCSQoVEFSR0VUX01PRFVM RSktb2JqcyA6PSBoeXBlcl9kbWFidWZfZHJ2Lm8gXAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaHlwZXJfZG1hYnVmX2lvY3RsLm8gXAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaHlwZXJfZG1hYnVmX2xpc3QubyBcCisJCQkJIGh5cGVyX2RtYWJ1Zl9zZ2xfcHJv Yy5vIFwKKwkJCQkgaHlwZXJfZG1hYnVmX29wcy5vIFwKKwkJCQkgaHlwZXJfZG1hYnVmX21zZy5v IFwKKwkJCQkgaHlwZXJfZG1hYnVmX2lkLm8gXAorCitvYmotJChDT05GSUdfSFlQRVJfRE1BQlVG KSA6PSAkKFRBUkdFVF9NT0RVTEUpLm8KKworIyBJZiB3ZSBhcmUgcnVubmluZyB3aXRob3V0IGtl cm5lbCBidWlsZCBzeXN0ZW0KK2Vsc2UKK0JVSUxEU1lTVEVNX0RJUj89Li4vLi4vLi4vCitQV0Q6 PSQoc2hlbGwgcHdkKQorCithbGwgOgorIyBydW4ga2VybmVsIGJ1aWxkIHN5c3RlbSB0byBtYWtl IG1vZHVsZQorJChNQUtFKSAtQyAkKEJVSUxEU1lTVEVNX0RJUikgTT0kKFBXRCkgbW9kdWxlcwor CitjbGVhbjoKKyMgcnVuIGtlcm5lbCBidWlsZCBzeXN0ZW0gdG8gY2xlYW51cCBpbiBjdXJyZW50 IGRpcmVjdG9yeQorJChNQUtFKSAtQyAkKEJVSUxEU1lTVEVNX0RJUikgTT0kKFBXRCkgY2xlYW4K KworbG9hZDoKKwlpbnNtb2QgLi8kKFRBUkdFVF9NT0RVTEUpLmtvCisKK3VubG9hZDoKKwlybW1v ZCAuLyQoVEFSR0VUX01PRFVMRSkua28KKworZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1h LWJ1Zi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX2Rydi5jIGIvZHJpdmVycy9kbWEtYnVmL2h5 cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfZHJ2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAwLi4xOGMxY2Q3MzVlYTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2Rt YS1idWYvaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9kcnYuYwpAQCAtMCwwICsxLDI1NCBAQAor LyoKKyAqIENvcHlyaWdodCDCqSAyMDE4IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlz c2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0 YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVu dGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2Fy ZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0 aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0 ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFu ZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVk IHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBU aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5j bHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBj b3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisg KiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBB TlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRF RCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hB TEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5Z IENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNU SU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VU IE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhF UiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiAoTUlUIE9SIEdQTC0yLjApCisgKgorICogQXV0aG9yczoKKyAqICAgIERvbmd3b24g S2ltIDxkb25nd29uLmtpbUBpbnRlbC5jb20+CisgKiAgICBNYXRldXN6IFBvbHJvbGEgPG1hdGV1 c3p4LnBvdHJvbGFAaW50ZWwuY29tPgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5o PgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2Uu aD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+ CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgor I2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtYnVmLmg+CisjaW5j bHVkZSAiaHlwZXJfZG1hYnVmX2Rydi5oIgorI2luY2x1ZGUgImh5cGVyX2RtYWJ1Zl9pb2N0bC5o IgorI2luY2x1ZGUgImh5cGVyX2RtYWJ1Zl9saXN0LmgiCisjaW5jbHVkZSAiaHlwZXJfZG1hYnVm X2lkLmgiCisKK01PRFVMRV9MSUNFTlNFKCJHUEwgYW5kIGFkZGl0aW9uYWwgcmlnaHRzIik7CitN T0RVTEVfQVVUSE9SKCJJbnRlbCBDb3Jwb3JhdGlvbiIpOworCitzdHJ1Y3QgaHlwZXJfZG1hYnVm X3ByaXZhdGUgKmh5X2Rydl9wcml2OworCitzdGF0aWMgdm9pZCBmb3JjZV9mcmVlKHN0cnVjdCBl eHBvcnRlZF9zZ3RfaW5mbyAqZXhwb3J0ZWQsCisJCSAgICAgICB2b2lkICphdHRyKQoreworCXN0 cnVjdCBpb2N0bF9oeXBlcl9kbWFidWZfdW5leHBvcnQgdW5leHBvcnRfYXR0cjsKKwlzdHJ1Y3Qg ZmlsZSAqZmlscCA9IChzdHJ1Y3QgZmlsZSAqKWF0dHI7CisKKwlpZiAoIWZpbHAgfHwgIWV4cG9y dGVkKQorCQlyZXR1cm47CisKKwlpZiAoZXhwb3J0ZWQtPmZpbHAgPT0gZmlscCkgeworCQlkZXZf ZGJnKGh5X2Rydl9wcml2LT5kZXYsCisJCQkiRm9yY2VmdWxseSByZWxlYXNpbmcgYnVmZmVyIHtp ZDolZCBrZXk6JWQgJWQgJWR9XG4iLAorCQkJIGV4cG9ydGVkLT5oaWQuaWQsIGV4cG9ydGVkLT5o aWQucm5nX2tleVswXSwKKwkJCSBleHBvcnRlZC0+aGlkLnJuZ19rZXlbMV0sIGV4cG9ydGVkLT5o aWQucm5nX2tleVsyXSk7CisKKwkJdW5leHBvcnRfYXR0ci5oaWQgPSBleHBvcnRlZC0+aGlkOwor CQl1bmV4cG9ydF9hdHRyLmRlbGF5X21zID0gMDsKKworCQloeXBlcl9kbWFidWZfdW5leHBvcnRf aW9jdGwoZmlscCwgJnVuZXhwb3J0X2F0dHIpOworCX0KK30KKworc3RhdGljIGludCBoeXBlcl9k bWFidWZfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlp bnQgcmV0ID0gMDsKKworCS8qIERvIG5vdCBhbGxvdyBleGNsdXNpdmUgb3BlbiAqLworCWlmIChm aWxwLT5mX2ZsYWdzICYgT19FWENMKQorCQlyZXR1cm4gLUVCVVNZOworCisJcmV0dXJuIHJldDsK K30KKworc3RhdGljIGludCBoeXBlcl9kbWFidWZfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2Rl LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwloeXBlcl9kbWFidWZfZm9yZWFjaF9leHBvcnRlZChm b3JjZV9mcmVlLCBmaWxwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0 IGZpbGVfb3BlcmF0aW9ucyBoeXBlcl9kbWFidWZfZHJpdmVyX2ZvcHMgPSB7CisJLm93bmVyID0g VEhJU19NT0RVTEUsCisJLm9wZW4gPSBoeXBlcl9kbWFidWZfb3BlbiwKKwkucmVsZWFzZSA9IGh5 cGVyX2RtYWJ1Zl9yZWxlYXNlLAorCS51bmxvY2tlZF9pb2N0bCA9IGh5cGVyX2RtYWJ1Zl9pb2N0 bCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSBoeXBlcl9kbWFidWZfbWlzY2RldiA9 IHsKKwkubWlub3IgPSBNSVNDX0RZTkFNSUNfTUlOT1IsCisJLm5hbWUgPSAiaHlwZXJfZG1hYnVm IiwKKwkuZm9wcyA9ICZoeXBlcl9kbWFidWZfZHJpdmVyX2ZvcHMsCit9OworCitzdGF0aWMgaW50 IHJlZ2lzdGVyX2RldmljZSh2b2lkKQoreworCWludCByZXQgPSAwOworCisJcmV0ID0gbWlzY19y ZWdpc3RlcigmaHlwZXJfZG1hYnVmX21pc2NkZXYpOworCisJaWYgKHJldCkgeworCQlwcl9lcnIo Imh5cGVyX2RtYWJ1ZjogZHJpdmVyIGNhbid0IGJlIHJlZ2lzdGVyZWRcbiIpOworCQlyZXR1cm4g cmV0OworCX0KKworCWh5X2Rydl9wcml2LT5kZXYgPSBoeXBlcl9kbWFidWZfbWlzY2Rldi50aGlz X2RldmljZTsKKworCS8qIFRPRE86IENoZWNrIGlmIHRoZXJlIGlzIGEgZGlmZmVyZW50IHdheSB0 byBpbml0aWFsaXplIGRtYSBtYXNrICovCisJZG1hX2NvZXJjZV9tYXNrX2FuZF9jb2hlcmVudCho eV9kcnZfcHJpdi0+ZGV2LCBETUFfQklUX01BU0soNjQpKTsKKworCXJldHVybiByZXQ7Cit9CisK K3N0YXRpYyB2b2lkIHVucmVnaXN0ZXJfZGV2aWNlKHZvaWQpCit7CisJZGV2X2luZm8oaHlfZHJ2 X3ByaXYtPmRldiwKKwkJImh5cGVyX2RtYWJ1ZjogJXMgaXMgY2FsbGVkXG4iLCBfX2Z1bmNfXyk7 CisKKwltaXNjX2RlcmVnaXN0ZXIoJmh5cGVyX2RtYWJ1Zl9taXNjZGV2KTsKK30KKworc3RhdGlj IGludCBfX2luaXQgaHlwZXJfZG1hYnVmX2Rydl9pbml0KHZvaWQpCit7CisJaW50IHJldCA9IDA7 CisKKwlwcl9ub3RpY2UoImh5cGVyX2RtYWJ1Zl9zdGFydGluZzogSW5pdGlhbGl6YXRpb24gc3Rh cnRlZFxuIik7CisKKwloeV9kcnZfcHJpdiA9IGtjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBoeXBl cl9kbWFidWZfcHJpdmF0ZSksCisJCQkgICAgICBHRlBfS0VSTkVMKTsKKworCWlmICghaHlfZHJ2 X3ByaXYpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gcmVnaXN0ZXJfZGV2aWNlKCk7CisJ aWYgKHJldCA8IDApIHsKKwkJa2ZyZWUoaHlfZHJ2X3ByaXYpOworCQlyZXR1cm4gcmV0OworCX0K KworCWh5X2Rydl9wcml2LT5ia25kX29wcyA9IE5VTEw7CisKKwlpZiAoaHlfZHJ2X3ByaXYtPmJr bmRfb3BzID09IE5VTEwpIHsKKwkJcHJfZXJyKCJIeXBlcl9kbWFidWY6IG5vIGJhY2tlbmQgZm91 bmRcbiIpOworCQlrZnJlZShoeV9kcnZfcHJpdik7CisJCXJldHVybiAtMTsKKwl9CisKKwltdXRl eF9pbml0KCZoeV9kcnZfcHJpdi0+bG9jayk7CisKKwltdXRleF9sb2NrKCZoeV9kcnZfcHJpdi0+ bG9jayk7CisKKwloeV9kcnZfcHJpdi0+aW5pdGlhbGl6ZWQgPSBmYWxzZTsKKworCWRldl9pbmZv KGh5X2Rydl9wcml2LT5kZXYsCisJCSAiaW5pdGlhbGl6aW5nIGRhdGFiYXNlIGZvciBpbXBvcnRl ZC9leHBvcnRlZCBkbWFidWZzXG4iKTsKKworCWh5X2Rydl9wcml2LT53b3JrX3F1ZXVlID0gY3Jl YXRlX3dvcmtxdWV1ZSgiaHlwZXJfZG1hYnVmX3dxdWV1ZSIpOworCisJcmV0ID0gaHlwZXJfZG1h YnVmX3RhYmxlX2luaXQoKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGh5X2Rydl9wcml2 LT5kZXYsCisJCQkiZmFpbCB0byBpbml0IHRhYmxlIGZvciBleHBvcnRlZC9pbXBvcnRlZCBlbnRy aWVzXG4iKTsKKwkJbXV0ZXhfdW5sb2NrKCZoeV9kcnZfcHJpdi0+bG9jayk7CisJCWtmcmVlKGh5 X2Rydl9wcml2KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKyNpZmRlZiBDT05GSUdfSFlQRVJfRE1B QlVGX1NZU0ZTCisJcmV0ID0gaHlwZXJfZG1hYnVmX3JlZ2lzdGVyX3N5c2ZzKGh5X2Rydl9wcml2 LT5kZXYpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoaHlfZHJ2X3ByaXYtPmRldiwKKwkJ CSJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBzeXNmc1xuIik7CisJCW11dGV4X3VubG9jaygmaHlfZHJ2 X3ByaXYtPmxvY2spOworCQlrZnJlZShoeV9kcnZfcHJpdik7CisJCXJldHVybiByZXQ7CisJfQor I2VuZGlmCisKKwlpZiAoaHlfZHJ2X3ByaXYtPmJrbmRfb3BzLT5pbml0KSB7CisJCXJldCA9IGh5 X2Rydl9wcml2LT5ia25kX29wcy0+aW5pdCgpOworCisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZf ZGJnKGh5X2Rydl9wcml2LT5kZXYsCisJCQkJImZhaWxlZCB0byBpbml0aWFsaXplIGJhY2tlbmQu XG4iKTsKKwkJCW11dGV4X3VubG9jaygmaHlfZHJ2X3ByaXYtPmxvY2spOworCQkJa2ZyZWUoaHlf ZHJ2X3ByaXYpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCWh5X2Rydl9wcml2LT5kb21p ZCA9IGh5X2Rydl9wcml2LT5ia25kX29wcy0+Z2V0X3ZtX2lkKCk7CisKKwlyZXQgPSBoeV9kcnZf cHJpdi0+YmtuZF9vcHMtPmluaXRfY29tbV9lbnYoKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZf ZGJnKGh5X2Rydl9wcml2LT5kZXYsCisJCQkiZmFpbGVkIHRvIGluaXRpYWxpemUgY29tbS1lbnYu XG4iKTsKKwl9IGVsc2UgeworCQloeV9kcnZfcHJpdi0+aW5pdGlhbGl6ZWQgPSB0cnVlOworCX0K KworCW11dGV4X3VubG9jaygmaHlfZHJ2X3ByaXYtPmxvY2spOworCisJZGV2X2luZm8oaHlfZHJ2 X3ByaXYtPmRldiwKKwkJIkZpbmlzaGluZyB1cCBpbml0aWFsaXphdGlvbiBvZiBoeXBlcl9kbWFi dWYgZHJ2XG4iKTsKKworCS8qIGludGVycnVwdCBmb3IgY29tbSBzaG91bGQgYmUgcmVnaXN0ZXJl ZCBoZXJlOiAqLworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGh5cGVyX2RtYWJ1Zl9k cnZfZXhpdCh2b2lkKQoreworI2lmZGVmIENPTkZJR19IWVBFUl9ETUFCVUZfU1lTRlMKKwloeXBl cl9kbWFidWZfdW5yZWdpc3Rlcl9zeXNmcyhoeV9kcnZfcHJpdi0+ZGV2KTsKKyNlbmRpZgorCisJ bXV0ZXhfbG9jaygmaHlfZHJ2X3ByaXYtPmxvY2spOworCisJLyogaGFzaCB0YWJsZXMgZm9yIGV4 cG9ydC9pbXBvcnQgZW50cmllcyBhbmQgcmluZ19pbmZvcyAqLworCWh5cGVyX2RtYWJ1Zl90YWJs ZV9kZXN0cm95KCk7CisKKwloeV9kcnZfcHJpdi0+YmtuZF9vcHMtPmRlc3Ryb3lfY29tbSgpOwor CisJaWYgKGh5X2Rydl9wcml2LT5ia25kX29wcy0+Y2xlYW51cCkgeworCQloeV9kcnZfcHJpdi0+ YmtuZF9vcHMtPmNsZWFudXAoKTsKKwl9OworCisJLyogZGVzdHJveSB3b3JrcXVldWUgKi8KKwlp ZiAoaHlfZHJ2X3ByaXYtPndvcmtfcXVldWUpCisJCWRlc3Ryb3lfd29ya3F1ZXVlKGh5X2Rydl9w cml2LT53b3JrX3F1ZXVlKTsKKworCS8qIGRlc3Ryb3kgaWRfcXVldWUgKi8KKwlpZiAoaHlfZHJ2 X3ByaXYtPmlkX3F1ZXVlKQorCQloeXBlcl9kbWFidWZfZnJlZV9oaWRfbGlzdCgpOworCisJbXV0 ZXhfdW5sb2NrKCZoeV9kcnZfcHJpdi0+bG9jayk7CisKKwlkZXZfaW5mbyhoeV9kcnZfcHJpdi0+ ZGV2LAorCQkgImh5cGVyX2RtYWJ1ZiBkcml2ZXI6IEV4aXRpbmdcbiIpOworCisJa2ZyZWUoaHlf ZHJ2X3ByaXYpOworCisJdW5yZWdpc3Rlcl9kZXZpY2UoKTsKK30KKworbW9kdWxlX2luaXQoaHlw ZXJfZG1hYnVmX2Rydl9pbml0KTsKK21vZHVsZV9leGl0KGh5cGVyX2RtYWJ1Zl9kcnZfZXhpdCk7 CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9k cnYuaCBiL2RyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX2Rydi5oCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNDYxMTlkNzYyNDMwCi0tLSAv ZGV2L251bGwKKysrIGIvZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZf ZHJ2LmgKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxOCBJbnRlbCBD b3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2Yg Y2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdh cmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAor ICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5n IHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwg bWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBj b3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUK KyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93 aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRo aXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBz aGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9m IHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJ UyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQs IElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB QklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJ TkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQg SE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElB QklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJ U0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNP RlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4K KyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKE1JVCBPUiBHUEwtMi4wKQorICoKKyAq LworCisjaWZuZGVmIF9fTElOVVhfSFlQRVJfRE1BQlVGX0RSVl9IX18KKyNkZWZpbmUgX19MSU5V WF9IWVBFUl9ETUFCVUZfRFJWX0hfXworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5j bHVkZSA8bGludXgvaHlwZXJfZG1hYnVmLmg+CisKK3N0cnVjdCBoeXBlcl9kbWFidWZfcmVxOwor CitzdHJ1Y3QgaHlwZXJfZG1hYnVmX3ByaXZhdGUgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwor CS8qIFZNKGRvbWFpbikgaWQgb2YgY3VycmVudCBWTSBpbnN0YW5jZSAqLworCWludCBkb21pZDsK KworCS8qIHdvcmtxdWV1ZSBkZWRpY2F0ZWQgdG8gaHlwZXJfZG1hYnVmIGRyaXZlciAqLworCXN0 cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3b3JrX3F1ZXVlOworCisJLyogbGlzdCBvZiByZXVzYWJs ZSBoeXBlcl9kbWFidWZfaWRzICovCisJc3RydWN0IGxpc3RfcmV1c2FibGVfaWQgKmlkX3F1ZXVl OworCisJLyogYmFja2VuZCBvcHMgLSBoeXBlcnZpc29yIHNwZWNpZmljICovCisJc3RydWN0IGh5 cGVyX2RtYWJ1Zl9ia25kX29wcyAqYmtuZF9vcHM7CisKKwkvKiBkZXZpY2UgZ2xvYmFsIGxvY2sg Ki8KKwkvKiBUT0RPOiBtaWdodCBuZWVkIGEgbG9jayBwZXIgcmVzb3VyY2UgKGUuZy4gRVhQT1JU IExJU1QpICovCisJc3RydWN0IG11dGV4IGxvY2s7CisKKwkvKiBmbGFnIHRoYXQgc2hvd3Mgd2hl dGhlciBiYWNrZW5kIGlzIGluaXRpYWxpemVkICovCisJYm9vbCBpbml0aWFsaXplZDsKKworCS8q ICMgb2YgcGVuZGluZyBldmVudHMgKi8KKwlpbnQgcGVuZGluZzsKK307CisKK3N0cnVjdCBsaXN0 X3JldXNhYmxlX2lkIHsKKwloeXBlcl9kbWFidWZfaWRfdCBoaWQ7CisJc3RydWN0IGxpc3RfaGVh ZCBsaXN0OworfTsKKworc3RydWN0IGh5cGVyX2RtYWJ1Zl9ia25kX29wcyB7CisJLyogYmFja2Vu ZCBpbml0aWFsaXphdGlvbiByb3V0aW5lIChvcHRpb25hbCkgKi8KKwlpbnQgKCppbml0KSh2b2lk KTsKKworCS8qIGJhY2tlbmQgY2xlYW51cCByb3V0aW5lIChvcHRpb25hbCkgKi8KKwlpbnQgKCpj bGVhbnVwKSh2b2lkKTsKKworCS8qIHJldHJlaXZpbmcgaWQgb2YgY3VycmVudCB2aXJ0dWFsIG1h Y2hpbmUgKi8KKwlpbnQgKCpnZXRfdm1faWQpKHZvaWQpOworCisJLyogZ2V0IHBhZ2VzIHNoYXJl ZCB2aWEgaHlwZXJ2aXNvci1zcGVjaWZpYyBtZXRob2QgKi8KKwlpbnQgKCpzaGFyZV9wYWdlcyko c3RydWN0IHBhZ2UgKipwYWdlcywgaW50IHZtX2lkLAorCQkJICAgaW50IG5lbnRzLCB2b2lkICoq cmVmc19pbmZvKTsKKworCS8qIG1ha2Ugc2hhcmVkIHBhZ2VzIHVuc2hhcmVkIHZpYSBoeXBlcnZp c29yIHNwZWNpZmljIG1ldGhvZCAqLworCWludCAoKnVuc2hhcmVfcGFnZXMpKHZvaWQgKipyZWZz X2luZm8sIGludCBuZW50cyk7CisKKwkvKiBtYXAgcmVtb3RlbHkgc2hhcmVkIHBhZ2VzIG9uIGlt cG9ydGVyJ3Mgc2lkZSB2aWEKKwkgKiBoeXBlcnZpc29yLXNwZWNpZmljIG1ldGhvZAorCSAqLwor CXN0cnVjdCBwYWdlICoqICgqbWFwX3NoYXJlZF9wYWdlcykodW5zaWduZWQgbG9uZyByZWYsIGlu dCB2bV9pZCwKKwkJCQkJICAgaW50IG5lbnRzLCB2b2lkICoqcmVmc19pbmZvKTsKKworCS8qIHVu bWFwIGFuZCBmcmVlIHNoYXJlZCBwYWdlcyBvbiBpbXBvcnRlcidzIHNpZGUgdmlhCisJICogaHlw ZXJ2aXNvci1zcGVjaWZpYyBtZXRob2QKKwkgKi8KKwlpbnQgKCp1bm1hcF9zaGFyZWRfcGFnZXMp KHZvaWQgKipyZWZzX2luZm8sIGludCBuZW50cyk7CisKKwkvKiBpbml0aWFsaXplIGNvbW11bmlj YXRpb24gZW52aXJvbm1lbnQgKi8KKwlpbnQgKCppbml0X2NvbW1fZW52KSh2b2lkKTsKKworCXZv aWQgKCpkZXN0cm95X2NvbW0pKHZvaWQpOworCisJLyogdXBzdHJlYW0gY2ggc2V0dXAgKHJlY2Vp dmluZyBhbmQgcmVzcG9uZGluZykgKi8KKwlpbnQgKCppbml0X3J4X2NoKShpbnQgdm1faWQpOwor CisJLyogZG93bnN0cmVhbSBjaCBzZXR1cCAodHJhbnNtaXR0aW5nIGFuZCBwYXJzaW5nIHJlc3Bv bnNlcykgKi8KKwlpbnQgKCppbml0X3R4X2NoKShpbnQgdm1faWQpOworCisJaW50ICgqc2VuZF9y ZXEpKGludCB2bV9pZCwgc3RydWN0IGh5cGVyX2RtYWJ1Zl9yZXEgKnJlcSwgaW50IHdhaXQpOwor fTsKKworLyogZXhwb3J0aW5nIGdsb2JhbCBkcnYgcHJpdmF0ZSBpbmZvICovCitleHRlcm4gc3Ry dWN0IGh5cGVyX2RtYWJ1Zl9wcml2YXRlICpoeV9kcnZfcHJpdjsKKworI2VuZGlmIC8qIF9fTElO VVhfSFlQRVJfRE1BQlVGX0RSVl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hLWJ1Zi9o eXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX2lkLmMgYi9kcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1h YnVmL2h5cGVyX2RtYWJ1Zl9pZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwMC4uZjJlOTk0YTQ5NTdkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9kbWEtYnVmL2h5 cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfaWQuYwpAQCAtMCwwICsxLDEzNSBAQAorLyoKKyAqIENv cHlyaWdodCDCqSAyMDE4IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBo ZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEK KyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZp bGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0 IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRz IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGlj ZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJt aXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNv LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUg Y29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRo ZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Ig c3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09G VFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwg RVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUg V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRI RSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBE QU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENP TlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElO IENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5H UworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAo TUlUIE9SIEdQTC0yLjApCisgKgorICogQXV0aG9yczoKKyAqICAgIERvbmd3b24gS2ltIDxkb25n d29uLmtpbUBpbnRlbC5jb20+CisgKiAgICBNYXRldXN6IFBvbHJvbGEgPG1hdGV1c3p4LnBvdHJv bGFAaW50ZWwuY29tPgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1 ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKyNpbmNsdWRlICJo eXBlcl9kbWFidWZfZHJ2LmgiCisjaW5jbHVkZSAiaHlwZXJfZG1hYnVmX2lkLmgiCisKK3ZvaWQg aHlwZXJfZG1hYnVmX3N0b3JlX2hpZChoeXBlcl9kbWFidWZfaWRfdCBoaWQpCit7CisJc3RydWN0 IGxpc3RfcmV1c2FibGVfaWQgKnJldXNhYmxlX2hlYWQgPSBoeV9kcnZfcHJpdi0+aWRfcXVldWU7 CisJc3RydWN0IGxpc3RfcmV1c2FibGVfaWQgKm5ld19yZXVzYWJsZTsKKworCW5ld19yZXVzYWJs ZSA9IGttYWxsb2Moc2l6ZW9mKCpuZXdfcmV1c2FibGUpLCBHRlBfS0VSTkVMKTsKKworCWlmICgh bmV3X3JldXNhYmxlKQorCQlyZXR1cm47CisKKwluZXdfcmV1c2FibGUtPmhpZCA9IGhpZDsKKwor CWxpc3RfYWRkKCZuZXdfcmV1c2FibGUtPmxpc3QsICZyZXVzYWJsZV9oZWFkLT5saXN0KTsKK30K Kworc3RhdGljIGh5cGVyX2RtYWJ1Zl9pZF90IGdldF9yZXVzYWJsZV9oaWQodm9pZCkKK3sKKwlz dHJ1Y3QgbGlzdF9yZXVzYWJsZV9pZCAqcmV1c2FibGVfaGVhZCA9IGh5X2Rydl9wcml2LT5pZF9x dWV1ZTsKKwloeXBlcl9kbWFidWZfaWRfdCBoaWQgPSB7LTEsIHswLCAwLCAwfSB9OworCisJLyog Y2hlY2sgdGhlcmUgaXMgcmV1c2FibGUgaWQgKi8KKwlpZiAoIWxpc3RfZW1wdHkoJnJldXNhYmxl X2hlYWQtPmxpc3QpKSB7CisJCXJldXNhYmxlX2hlYWQgPSBsaXN0X2ZpcnN0X2VudHJ5KCZyZXVz YWJsZV9oZWFkLT5saXN0LAorCQkJCQkJIHN0cnVjdCBsaXN0X3JldXNhYmxlX2lkLAorCQkJCQkJ IGxpc3QpOworCisJCWxpc3RfZGVsKCZyZXVzYWJsZV9oZWFkLT5saXN0KTsKKwkJaGlkID0gcmV1 c2FibGVfaGVhZC0+aGlkOworCQlrZnJlZShyZXVzYWJsZV9oZWFkKTsKKwl9CisKKwlyZXR1cm4g aGlkOworfQorCit2b2lkIGh5cGVyX2RtYWJ1Zl9mcmVlX2hpZF9saXN0KHZvaWQpCit7CisJc3Ry dWN0IGxpc3RfcmV1c2FibGVfaWQgKnJldXNhYmxlX2hlYWQgPSBoeV9kcnZfcHJpdi0+aWRfcXVl dWU7CisJc3RydWN0IGxpc3RfcmV1c2FibGVfaWQgKnRlbXBfaGVhZDsKKworCWlmIChyZXVzYWJs ZV9oZWFkKSB7CisJCS8qIGZyZWVpbmcgbWVtIHNwYWNlIGFsbCByZXVzYWJsZSBpZHMgaW4gdGhl IHN0YWNrICovCisJCXdoaWxlICghbGlzdF9lbXB0eSgmcmV1c2FibGVfaGVhZC0+bGlzdCkpIHsK KwkJCXRlbXBfaGVhZCA9IGxpc3RfZmlyc3RfZW50cnkoJnJldXNhYmxlX2hlYWQtPmxpc3QsCisJ CQkJCQkgICAgIHN0cnVjdCBsaXN0X3JldXNhYmxlX2lkLAorCQkJCQkJICAgICBsaXN0KTsKKwkJ CWxpc3RfZGVsKCZ0ZW1wX2hlYWQtPmxpc3QpOworCQkJa2ZyZWUodGVtcF9oZWFkKTsKKwkJfQor CisJCS8qIGZyZWVpbmcgaGVhZCAqLworCQlrZnJlZShyZXVzYWJsZV9oZWFkKTsKKwl9Cit9CisK K2h5cGVyX2RtYWJ1Zl9pZF90IGh5cGVyX2RtYWJ1Zl9nZXRfaGlkKHZvaWQpCit7CisJc3RhdGlj IGludCBjb3VudDsKKwloeXBlcl9kbWFidWZfaWRfdCBoaWQ7CisJc3RydWN0IGxpc3RfcmV1c2Fi bGVfaWQgKnJldXNhYmxlX2hlYWQ7CisKKwkvKiBmaXJzdCBjYWxsIHRvIGh5cGVyX2RtYWJ1Zl9n ZXRfaWQgKi8KKwlpZiAoY291bnQgPT0gMCkgeworCQlyZXVzYWJsZV9oZWFkID0ga21hbGxvYyhz aXplb2YoKnJldXNhYmxlX2hlYWQpLCBHRlBfS0VSTkVMKTsKKworCQlpZiAoIXJldXNhYmxlX2hl YWQpCisJCQlyZXR1cm4gKGh5cGVyX2RtYWJ1Zl9pZF90KXstMSwgezAsIDAsIDB9IH07CisKKwkJ LyogbGlzdCBoZWFkIGhhcyBhbiBpbnZhbGlkIGNvdW50ICovCisJCXJldXNhYmxlX2hlYWQtPmhp ZC5pZCA9IC0xOworCQlJTklUX0xJU1RfSEVBRCgmcmV1c2FibGVfaGVhZC0+bGlzdCk7CisJCWh5 X2Rydl9wcml2LT5pZF9xdWV1ZSA9IHJldXNhYmxlX2hlYWQ7CisJfQorCisJaGlkID0gZ2V0X3Jl dXNhYmxlX2hpZCgpOworCisJLypjcmVhdGluZyBhIG5ldyBILUlEIG9ubHkgaWYgbm90aGluZyBp biB0aGUgcmV1c2FibGUgaWQgcXVldWUKKwkgKiBhbmQgY291bnQgaXMgbGVzcyB0aGFuIG1heGlt dW0gYWxsb3dlZAorCSAqLworCWlmIChoaWQuaWQgPT0gLTEgJiYgY291bnQgPCBIWVBFUl9ETUFC VUZfSURfTUFYKQorCQloaWQuaWQgPSBIWVBFUl9ETUFCVUZfSURfQ1JFQVRFKGh5X2Rydl9wcml2 LT5kb21pZCwgY291bnQrKyk7CisKKwkvKiByYW5kb20gZGF0YSBlbWJlZGRlZCBpbiB0aGUgaWQg Zm9yIHNlY3VyaXR5ICovCisJZ2V0X3JhbmRvbV9ieXRlcygmaGlkLnJuZ19rZXlbMF0sIDEyKTsK KworCXJldHVybiBoaWQ7Cit9CisKK2Jvb2wgaHlwZXJfZG1hYnVmX2hpZF9rZXljb21wKGh5cGVy X2RtYWJ1Zl9pZF90IGhpZDEsIGh5cGVyX2RtYWJ1Zl9pZF90IGhpZDIpCit7CisJaW50IGk7CisK KwkvKiBjb21wYXJlIGtleXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCWlmICho aWQxLnJuZ19rZXlbaV0gIT0gaGlkMi5ybmdfa2V5W2ldKQorCQkJcmV0dXJuIGZhbHNlOworCX0K KworCXJldHVybiB0cnVlOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL2h5cGVyX2Rt YWJ1Zi9oeXBlcl9kbWFidWZfaWQuaCBiL2RyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvaHlw ZXJfZG1hYnVmX2lkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4x MWY1MzBlMmM4ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1h YnVmL2h5cGVyX2RtYWJ1Zl9pZC5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQg wqkgMjAxOCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdy YW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5 IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhl ICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmlj dGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2Us IGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisg KiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNv bnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVj dCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdo dCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAor ICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50 aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElT IFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Mg T1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJ RVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9S UyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBP UiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwg VE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNU SU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElO IFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKE1JVCBPUiBH UEwtMi4wKQorICoKKyAqLworCisjaWZuZGVmIF9fSFlQRVJfRE1BQlVGX0lEX0hfXworI2RlZmlu ZSBfX0hZUEVSX0RNQUJVRl9JRF9IX18KKworI2RlZmluZSBIWVBFUl9ETUFCVUZfSURfQ1JFQVRF KGRvbWlkLCBjbnQpIFwKKwkoKCgoZG9taWQpICYgMHhGRikgPDwgMjQpIHwgKChjbnQpICYgMHhG RkZGRkYpKQorCisjZGVmaW5lIEhZUEVSX0RNQUJVRl9ET01fSUQoaGlkKSBcCisJKCgoaGlkLmlk KSA+PiAyNCkgJiAweEZGKQorCisvKiBjdXJyZW50bHkgbWF4aW11bSBudW1iZXIgb2YgYnVmZmVy cyBzaGFyZWQKKyAqIGF0IGFueSBnaXZlbiBtb21lbnQgaXMgbGltaXRlZCB0byAxMDAwCisgKi8K KyNkZWZpbmUgSFlQRVJfRE1BQlVGX0lEX01BWCAxMDAwCisKKy8qIGFkZGluZyBmcmVlZCBoaWQg dG8gdGhlIHJldXNhYmxlIGxpc3QgKi8KK3ZvaWQgaHlwZXJfZG1hYnVmX3N0b3JlX2hpZChoeXBl cl9kbWFidWZfaWRfdCBoaWQpOworCisvKiBmcmVlaW5nIHRoZSByZXVzYXNibGUgbGlzdCAqLwor dm9pZCBoeXBlcl9kbWFidWZfZnJlZV9oaWRfbGlzdCh2b2lkKTsKKworLyogZ2V0dGluZyBhIGhp ZCBhdmFpbGFibGUgdG8gdXNlLiAqLworaHlwZXJfZG1hYnVmX2lkX3QgaHlwZXJfZG1hYnVmX2dl dF9oaWQodm9pZCk7CisKKy8qIGNvbXBhcmluZyB0d28gZGlmZmVyZW50IGhpZCAqLworYm9vbCBo eXBlcl9kbWFidWZfaGlkX2tleWNvbXAoaHlwZXJfZG1hYnVmX2lkX3QgaGlkMSwgaHlwZXJfZG1h YnVmX2lkX3QgaGlkMik7CisKKyNlbmRpZiAvKl9fSFlQRVJfRE1BQlVGX0lEX0gqLwpkaWZmIC0t Z2l0IGEvZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfaW9jdGwuYyBi L2RyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX2lvY3RsLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4wMjBhNTU5MGEyNTQKLS0tIC9kZXYv bnVsbAorKysgYi9kcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9pb2N0 bC5jCkBAIC0wLDAgKzEsNjcyIEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTggSW50ZWwgQ29y cG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNo YXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJl IGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAq IHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3 aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1l cmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29w aWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisg KiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlz IHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hh bGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0 aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMi LCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJ TkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5H RU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhP TERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNF LCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZU V0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisg KgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChNSVQgT1IgR1BMLTIuMCkKKyAqCisgKiBB dXRob3JzOgorICogICAgRG9uZ3dvbiBLaW0gPGRvbmd3b24ua2ltQGludGVsLmNvbT4KKyAqICAg IE1hdGV1c3ogUG9scm9sYSA8bWF0ZXVzengucG90cm9sYUBpbnRlbC5jb20+CisgKgorICovCisK KyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2lu Y2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVk ZSA8bGludXgvZG1hLWJ1Zi5oPgorI2luY2x1ZGUgImh5cGVyX2RtYWJ1Zl9kcnYuaCIKKyNpbmNs dWRlICJoeXBlcl9kbWFidWZfaWQuaCIKKyNpbmNsdWRlICJoeXBlcl9kbWFidWZfc3RydWN0Lmgi CisjaW5jbHVkZSAiaHlwZXJfZG1hYnVmX2lvY3RsLmgiCisjaW5jbHVkZSAiaHlwZXJfZG1hYnVm X2xpc3QuaCIKKyNpbmNsdWRlICJoeXBlcl9kbWFidWZfbXNnLmgiCisjaW5jbHVkZSAiaHlwZXJf ZG1hYnVmX3NnbF9wcm9jLmgiCisjaW5jbHVkZSAiaHlwZXJfZG1hYnVmX29wcy5oIgorCitzdGF0 aWMgaW50IGh5cGVyX2RtYWJ1Zl90eF9jaF9zZXR1cF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwg dm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaW9jdGxfaHlwZXJfZG1hYnVmX3R4X2NoX3NldHVwICp0 eF9jaF9hdHRyOworCXN0cnVjdCBoeXBlcl9kbWFidWZfYmtuZF9vcHMgKmJrbmRfb3BzID0gaHlf ZHJ2X3ByaXYtPmJrbmRfb3BzOworCWludCByZXQgPSAwOworCisJaWYgKCFkYXRhKSB7CisJCWRl dl9lcnIoaHlfZHJ2X3ByaXYtPmRldiwgInVzZXIgZGF0YSBpcyBOVUxMXG4iKTsKKwkJcmV0dXJu IC1FSU5WQUw7CisJfQorCXR4X2NoX2F0dHIgPSAoc3RydWN0IGlvY3RsX2h5cGVyX2RtYWJ1Zl90 eF9jaF9zZXR1cCAqKWRhdGE7CisKKwlyZXQgPSBia25kX29wcy0+aW5pdF90eF9jaCh0eF9jaF9h dHRyLT5yZW1vdGVfZG9tYWluKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaHlw ZXJfZG1hYnVmX3J4X2NoX3NldHVwX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpkYXRh KQoreworCXN0cnVjdCBpb2N0bF9oeXBlcl9kbWFidWZfcnhfY2hfc2V0dXAgKnJ4X2NoX2F0dHI7 CisJc3RydWN0IGh5cGVyX2RtYWJ1Zl9ia25kX29wcyAqYmtuZF9vcHMgPSBoeV9kcnZfcHJpdi0+ YmtuZF9vcHM7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIWRhdGEpIHsKKwkJZGV2X2VycihoeV9k cnZfcHJpdi0+ZGV2LCAidXNlciBkYXRhIGlzIE5VTExcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsK Kwl9CisKKwlyeF9jaF9hdHRyID0gKHN0cnVjdCBpb2N0bF9oeXBlcl9kbWFidWZfcnhfY2hfc2V0 dXAgKilkYXRhOworCisJcmV0ID0gYmtuZF9vcHMtPmluaXRfcnhfY2gocnhfY2hfYXR0ci0+c291 cmNlX2RvbWFpbik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNlbmRfZXhwb3J0 X21zZyhzdHJ1Y3QgZXhwb3J0ZWRfc2d0X2luZm8gKmV4cG9ydGVkLAorCQkJICAgc3RydWN0IHBh Z2VzX2luZm8gKnBnX2luZm8pCit7CisJc3RydWN0IGh5cGVyX2RtYWJ1Zl9ia25kX29wcyAqYmtu ZF9vcHMgPSBoeV9kcnZfcHJpdi0+YmtuZF9vcHM7CisJc3RydWN0IGh5cGVyX2RtYWJ1Zl9yZXEg KnJlcTsKKwlpbnQgb3BbTUFYX05VTUJFUl9PRl9PUEVSQU5EU10gPSB7MH07CisJaW50IHJldCwg aTsKKworCS8qIG5vdyBjcmVhdGUgcmVxdWVzdCBmb3IgaW1wb3J0ZXIgdmlhIHJpbmcgKi8KKwlv cFswXSA9IGV4cG9ydGVkLT5oaWQuaWQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorCQlv cFtpKzFdID0gZXhwb3J0ZWQtPmhpZC5ybmdfa2V5W2ldOworCisJaWYgKHBnX2luZm8pIHsKKwkJ b3BbNF0gPSBwZ19pbmZvLT5uZW50czsKKwkJb3BbNV0gPSBwZ19pbmZvLT5mcnN0X29mc3Q7CisJ CW9wWzZdID0gcGdfaW5mby0+bGFzdF9sZW47CisJCW9wWzddID0gYmtuZF9vcHMtPnNoYXJlX3Bh Z2VzKHBnX2luZm8tPnBncywgZXhwb3J0ZWQtPnJkb21pZCwKKwkJCQkJIHBnX2luZm8tPm5lbnRz LCAmZXhwb3J0ZWQtPnJlZnNfaW5mbyk7CisJCWlmIChvcFs3XSA8IDApIHsKKwkJCWRldl9lcnIo aHlfZHJ2X3ByaXYtPmRldiwgInBhZ2VzIHNoYXJpbmcgZmFpbGVkXG4iKTsKKwkJCXJldHVybiBv cFs3XTsKKwkJfQorCX0KKworCXJlcSA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpyZXEpLCBHRlBfS0VS TkVMKTsKKworCWlmICghcmVxKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIGNvbXBvc2luZyBh IG1lc3NhZ2UgdG8gdGhlIGltcG9ydGVyICovCisJaHlwZXJfZG1hYnVmX2NyZWF0ZV9yZXEocmVx LCBIWVBFUl9ETUFCVUZfRVhQT1JULCAmb3BbMF0pOworCisJcmV0ID0gYmtuZF9vcHMtPnNlbmRf cmVxKGV4cG9ydGVkLT5yZG9taWQsIHJlcSwgdHJ1ZSk7CisKKwlrZnJlZShyZXEpOworCisJcmV0 dXJuIHJldDsKK30KKworLyogRmFzdCBwYXRoIGV4cG9ydGluZyByb3V0aW5lIGluIGNhc2Ugc2Ft ZSBidWZmZXIgaXMgYWxyZWFkeSBleHBvcnRlZC4KKyAqCisgKiBJZiBzYW1lIGJ1ZmZlciBpcyBz dGlsbCB2YWxpZCBhbmQgZXhpc3QgaW4gRVhQT1JUIExJU1QgaXQgcmV0dXJucyAwIHNvCisgKiB0 aGF0IHJlbWFpbmluZyBub3JtYWwgZXhwb3J0IHByb2Nlc3MgY2FuIGJlIHNraXBwZWQuCisgKgor ICogSWYgInVuZXhwb3J0IiBpcyBzY2hlZHVsZWQgZm9yIHRoZSBidWZmZXIsIGl0IGNhbmNlbHMg aXQgc2luY2UgdGhlIGJ1ZmZlcgorICogaXMgYmVpbmcgcmUtZXhwb3J0ZWQuCisgKgorICogcmV0 dXJuICcxJyBpZiByZWV4cG9ydCBpcyBuZWVkZWQsIHJldHVybiAnMCcgaWYgc3VjY2VlZHMsIHJl dHVybgorICogS2VybmVsIGVycm9yIGNvZGUgaWYgc29tZXRoaW5nIGdvZXMgd3JvbmcKKyAqLwor c3RhdGljIGludCBmYXN0cGF0aF9leHBvcnQoaHlwZXJfZG1hYnVmX2lkX3QgaGlkKQoreworCWlu dCByZWV4cG9ydCA9IDE7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGV4cG9ydGVkX3NndF9pbmZv ICpleHBvcnRlZDsKKworCWV4cG9ydGVkID0gaHlwZXJfZG1hYnVmX2ZpbmRfZXhwb3J0ZWQoaGlk KTsKKworCWlmICghZXhwb3J0ZWQpCisJCXJldHVybiByZWV4cG9ydDsKKworCWlmIChleHBvcnRl ZC0+dmFsaWQgPT0gZmFsc2UpCisJCXJldHVybiByZWV4cG9ydDsKKworCS8qCisJICogQ2hlY2sg aWYgdW5leHBvcnQgaXMgYWxyZWFkeSBzY2hlZHVsZWQgZm9yIHRoYXQgYnVmZmVyLAorCSAqIGlm IHNvIHRyeSB0byBjYW5jZWwgaXQuIElmIHRoYXQgd2lsbCBmYWlsLCBidWZmZXIgbmVlZHMKKwkg KiB0byBiZSByZWV4cG9ydCBvbmNlIGFnYWluLgorCSAqLworCWlmIChleHBvcnRlZC0+dW5leHBv cnRfc2NoZWQpIHsKKwkJaWYgKCFjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmV4cG9ydGVkLT51 bmV4cG9ydCkpCisJCQlyZXR1cm4gcmVleHBvcnQ7CisKKwkJZXhwb3J0ZWQtPnVuZXhwb3J0X3Nj aGVkID0gZmFsc2U7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBoeXBlcl9k bWFidWZfZXhwb3J0X3JlbW90ZV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqZGF0YSkK K3sKKwlzdHJ1Y3QgaW9jdGxfaHlwZXJfZG1hYnVmX2V4cG9ydF9yZW1vdGUgKmV4cG9ydF9yZW1v dGVfYXR0ciA9CisJCQkoc3RydWN0IGlvY3RsX2h5cGVyX2RtYWJ1Zl9leHBvcnRfcmVtb3RlICop ZGF0YTsKKwlzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1ZjsKKwlzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2ht ZW50ICphdHRhY2htZW50OworCXN0cnVjdCBzZ190YWJsZSAqc2d0OworCXN0cnVjdCBwYWdlc19p bmZvICpwZ19pbmZvOworCXN0cnVjdCBleHBvcnRlZF9zZ3RfaW5mbyAqZXhwb3J0ZWQ7CisJaHlw ZXJfZG1hYnVmX2lkX3QgaGlkOworCWludCByZXQgPSAwOworCisJaWYgKGh5X2Rydl9wcml2LT5k b21pZCA9PSBleHBvcnRfcmVtb3RlX2F0dHItPnJlbW90ZV9kb21haW4pIHsKKwkJZGV2X2Vyciho eV9kcnZfcHJpdi0+ZGV2LAorCQkJImV4cG9ydGluZyB0byB0aGUgc2FtZSBWTSBpcyBub3QgcGVy bWl0dGVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZG1hX2J1ZiA9IGRtYV9idWZf Z2V0KGV4cG9ydF9yZW1vdGVfYXR0ci0+ZG1hYnVmX2ZkKTsKKworCWlmIChJU19FUlIoZG1hX2J1 ZikpIHsKKwkJZGV2X2VycihoeV9kcnZfcHJpdi0+ZGV2LCAiQ2Fubm90IGdldCBkbWEgYnVmXG4i KTsKKwkJcmV0dXJuIFBUUl9FUlIoZG1hX2J1Zik7CisJfQorCisJLyogd2UgY2hlY2sgaWYgdGhp cyBzcGVjaWZpYyBhdHRhY2htZW50IHdhcyBhbHJlYWR5IGV4cG9ydGVkCisJICogdG8gdGhlIHNh bWUgZG9tYWluIGFuZCBpZiB5ZXMgYW5kIGl0J3MgdmFsaWQgc2d0X2luZm8sCisJICogaXQgcmV0 dXJucyBoeXBlcl9kbWFidWZfaWQgb2YgcHJlLWV4cG9ydGVkIHNndF9pbmZvCisJICovCisJaGlk ID0gaHlwZXJfZG1hYnVmX2ZpbmRfaGlkX2V4cG9ydGVkKGRtYV9idWYsCisJCQkJCSAgICAgZXhw b3J0X3JlbW90ZV9hdHRyLT5yZW1vdGVfZG9tYWluKTsKKworCWlmIChoaWQuaWQgIT0gLTEpIHsK KwkJcmV0ID0gZmFzdHBhdGhfZXhwb3J0KGhpZCk7CisKKwkJLyogcmV0dXJuIGlmIGZhc3RwYXRo X2V4cG9ydCBzdWNjZWVkcyBvcgorCQkgKiBnZXRzIHNvbWUgZmF0YWwgZXJyb3IKKwkJICovCisJ CWlmIChyZXQgPD0gMCkgeworCQkJZG1hX2J1Zl9wdXQoZG1hX2J1Zik7CisJCQlleHBvcnRfcmVt b3RlX2F0dHItPmhpZCA9IGhpZDsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwlhdHRhY2ht ZW50ID0gZG1hX2J1Zl9hdHRhY2goZG1hX2J1ZiwgaHlfZHJ2X3ByaXYtPmRldik7CisJaWYgKElT X0VSUihhdHRhY2htZW50KSkgeworCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYsICJjYW5ub3Qg Z2V0IGF0dGFjaG1lbnRcbiIpOworCQlyZXQgPSBQVFJfRVJSKGF0dGFjaG1lbnQpOworCQlnb3Rv IGZhaWxfYXR0YWNoOworCX0KKworCXNndCA9IGRtYV9idWZfbWFwX2F0dGFjaG1lbnQoYXR0YWNo bWVudCwgRE1BX0JJRElSRUNUSU9OQUwpOworCisJaWYgKElTX0VSUihzZ3QpKSB7CisJCWRldl9l cnIoaHlfZHJ2X3ByaXYtPmRldiwgImNhbm5vdCBtYXAgYXR0YWNobWVudFxuIik7CisJCXJldCA9 IFBUUl9FUlIoc2d0KTsKKwkJZ290byBmYWlsX21hcF9hdHRhY2htZW50OworCX0KKworCWV4cG9y dGVkID0ga2NhbGxvYygxLCBzaXplb2YoKmV4cG9ydGVkKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAo IWV4cG9ydGVkKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZmFpbF9zZ3RfaW5mb19jcmVh dGlvbjsKKwl9CisKKwlleHBvcnRlZC0+aGlkID0gaHlwZXJfZG1hYnVmX2dldF9oaWQoKTsKKwor CS8qIG5vIG1vcmUgZXhwb3J0ZWQgZG1hYnVmIGFsbG93ZWQgKi8KKwlpZiAoZXhwb3J0ZWQtPmhp ZC5pZCA9PSAtMSkgeworCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYsCisJCQkiZXhjZWVkcyBh bGxvd2VkIG51bWJlciBvZiBkbWFidWYgdG8gYmUgZXhwb3J0ZWRcbiIpOworCQlyZXQgPSAtRU5P TUVNOworCQlnb3RvIGZhaWxfc2d0X2luZm9fY3JlYXRpb247CisJfQorCisJZXhwb3J0ZWQtPnJk b21pZCA9IGV4cG9ydF9yZW1vdGVfYXR0ci0+cmVtb3RlX2RvbWFpbjsKKwlleHBvcnRlZC0+ZG1h X2J1ZiA9IGRtYV9idWY7CisJZXhwb3J0ZWQtPnZhbGlkID0gdHJ1ZTsKKworCWV4cG9ydGVkLT5h Y3RpdmVfc2d0cyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzZ3RfbGlzdCksIEdGUF9LRVJORUwp OworCWlmICghZXhwb3J0ZWQtPmFjdGl2ZV9zZ3RzKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdv dG8gZmFpbF9tYXBfYWN0aXZlX3NndHM7CisJfQorCisJZXhwb3J0ZWQtPmFjdGl2ZV9hdHRhY2hl ZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhdHRhY2htZW50X2xpc3QpLAorCQkJCQkgICAgR0ZQ X0tFUk5FTCk7CisJaWYgKCFleHBvcnRlZC0+YWN0aXZlX2F0dGFjaGVkKSB7CisJCXJldCA9IC1F Tk9NRU07CisJCWdvdG8gZmFpbF9tYXBfYWN0aXZlX2F0dGFjaGVkOworCX0KKworCWV4cG9ydGVk LT52YV9rbWFwcGVkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGttYXBfdmFkZHJfbGlzdCksCisJ CQkJICAgICAgIEdGUF9LRVJORUwpOworCWlmICghZXhwb3J0ZWQtPnZhX2ttYXBwZWQpIHsKKwkJ cmV0ID0gLUVOT01FTTsKKwkJZ290byBmYWlsX21hcF92YV9rbWFwcGVkOworCX0KKworCWV4cG9y dGVkLT52YV92bWFwcGVkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHZtYXBfdmFkZHJfbGlzdCks CisJCQkJICAgICAgIEdGUF9LRVJORUwpOworCWlmICghZXhwb3J0ZWQtPnZhX3ZtYXBwZWQpIHsK KwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmYWlsX21hcF92YV92bWFwcGVkOworCX0KKworCWV4 cG9ydGVkLT5hY3RpdmVfc2d0cy0+c2d0ID0gc2d0OworCWV4cG9ydGVkLT5hY3RpdmVfYXR0YWNo ZWQtPmF0dGFjaCA9IGF0dGFjaG1lbnQ7CisJZXhwb3J0ZWQtPnZhX2ttYXBwZWQtPnZhZGRyID0g TlVMTDsKKwlleHBvcnRlZC0+dmFfdm1hcHBlZC0+dmFkZHIgPSBOVUxMOworCisJLyogaW5pdGlh bGl6ZSBsaXN0IG9mIHNndCwgYXR0YWNobWVudCBhbmQgdmFkZHIgZm9yIGRtYWJ1ZiBzeW5jCisJ ICogdmlhIHNoYWRvdyBkbWEtYnVmCisJICovCisJSU5JVF9MSVNUX0hFQUQoJmV4cG9ydGVkLT5h Y3RpdmVfc2d0cy0+bGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmV4cG9ydGVkLT5hY3RpdmVfYXR0 YWNoZWQtPmxpc3QpOworCUlOSVRfTElTVF9IRUFEKCZleHBvcnRlZC0+dmFfa21hcHBlZC0+bGlz dCk7CisJSU5JVF9MSVNUX0hFQUQoJmV4cG9ydGVkLT52YV92bWFwcGVkLT5saXN0KTsKKworCWlm IChyZXQpIHsKKwkJZGV2X2VycihoeV9kcnZfcHJpdi0+ZGV2LAorCQkJImZhaWxlZCB0byBsb2Fk IHByaXZhdGUgZGF0YVxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZmFpbF9leHBvcnQ7 CisJfQorCisJcGdfaW5mbyA9IGh5cGVyX2RtYWJ1Zl9leHRfcGdzKHNndCk7CisJaWYgKCFwZ19p bmZvKSB7CisJCWRldl9lcnIoaHlfZHJ2X3ByaXYtPmRldiwKKwkJCSJmYWlsZWQgdG8gY29uc3Ry dWN0IHBnX2luZm9cbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxfZXhwb3J0Owor CX0KKworCWV4cG9ydGVkLT5uZW50cyA9IHBnX2luZm8tPm5lbnRzOworCisJLyogbm93IHJlZ2lz dGVyIGl0IHRvIGV4cG9ydCBsaXN0ICovCisJaHlwZXJfZG1hYnVmX3JlZ2lzdGVyX2V4cG9ydGVk KGV4cG9ydGVkKTsKKworCWV4cG9ydF9yZW1vdGVfYXR0ci0+aGlkID0gZXhwb3J0ZWQtPmhpZDsK KworCXJldCA9IHNlbmRfZXhwb3J0X21zZyhleHBvcnRlZCwgcGdfaW5mbyk7CisKKwlpZiAocmV0 IDwgMCkgeworCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYsCisJCQkiZmFpbGVkIHRvIHNlbmQg b3V0IHRoZSBleHBvcnQgcmVxdWVzdFxuIik7CisJCWdvdG8gZmFpbF9zZW5kX3JlcXVlc3Q7CisJ fQorCisJLyogZnJlZSBwZ19pbmZvICovCisJa2ZyZWUocGdfaW5mby0+cGdzKTsKKwlrZnJlZShw Z19pbmZvKTsKKworCWV4cG9ydGVkLT5maWxwID0gZmlscDsKKworCXJldHVybiByZXQ7CisKKy8q IENsZWFuLXVwIGlmIGVycm9yIG9jY3VycyAqLworCitmYWlsX3NlbmRfcmVxdWVzdDoKKwloeXBl cl9kbWFidWZfcmVtb3ZlX2V4cG9ydGVkKGV4cG9ydGVkLT5oaWQpOworCisJLyogZnJlZSBwZ19p bmZvICovCisJa2ZyZWUocGdfaW5mby0+cGdzKTsKKwlrZnJlZShwZ19pbmZvKTsKKworZmFpbF9l eHBvcnQ6CisJa2ZyZWUoZXhwb3J0ZWQtPnZhX3ZtYXBwZWQpOworCitmYWlsX21hcF92YV92bWFw cGVkOgorCWtmcmVlKGV4cG9ydGVkLT52YV9rbWFwcGVkKTsKKworZmFpbF9tYXBfdmFfa21hcHBl ZDoKKwlrZnJlZShleHBvcnRlZC0+YWN0aXZlX2F0dGFjaGVkKTsKKworZmFpbF9tYXBfYWN0aXZl X2F0dGFjaGVkOgorCWtmcmVlKGV4cG9ydGVkLT5hY3RpdmVfc2d0cyk7CisJa2ZyZWUoZXhwb3J0 ZWQpOworCitmYWlsX21hcF9hY3RpdmVfc2d0czoKK2ZhaWxfc2d0X2luZm9fY3JlYXRpb246CisJ ZG1hX2J1Zl91bm1hcF9hdHRhY2htZW50KGF0dGFjaG1lbnQsIHNndCwKKwkJCQkgRE1BX0JJRElS RUNUSU9OQUwpOworCitmYWlsX21hcF9hdHRhY2htZW50OgorCWRtYV9idWZfZGV0YWNoKGRtYV9i dWYsIGF0dGFjaG1lbnQpOworCitmYWlsX2F0dGFjaDoKKwlkbWFfYnVmX3B1dChkbWFfYnVmKTsK KworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaHlwZXJfZG1hYnVmX2V4cG9ydF9mZF9p b2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaW9jdGxfaHlw ZXJfZG1hYnVmX2V4cG9ydF9mZCAqZXhwb3J0X2ZkX2F0dHIgPQorCQkJKHN0cnVjdCBpb2N0bF9o eXBlcl9kbWFidWZfZXhwb3J0X2ZkICopZGF0YTsKKwlzdHJ1Y3QgaHlwZXJfZG1hYnVmX2JrbmRf b3BzICpia25kX29wcyA9IGh5X2Rydl9wcml2LT5ia25kX29wczsKKwlzdHJ1Y3QgaW1wb3J0ZWRf c2d0X2luZm8gKmltcG9ydGVkOworCXN0cnVjdCBoeXBlcl9kbWFidWZfcmVxICpyZXE7CisJc3Ry dWN0IHBhZ2UgKipkYXRhX3BnczsKKwlpbnQgb3BbNF07CisJaW50IGk7CisJaW50IHJldCA9IDA7 CisKKwlkZXZfZGJnKGh5X2Rydl9wcml2LT5kZXYsICIlcyBlbnRyeVxuIiwgX19mdW5jX18pOwor CisJLyogbG9vayBmb3IgZG1hYnVmIGZvciB0aGUgaWQgKi8KKwlpbXBvcnRlZCA9IGh5cGVyX2Rt YWJ1Zl9maW5kX2ltcG9ydGVkKGV4cG9ydF9mZF9hdHRyLT5oaWQpOworCisJLyogY2FuJ3QgZmlu ZCBzZ3QgZnJvbSB0aGUgdGFibGUgKi8KKwlpZiAoIWltcG9ydGVkKSB7CisJCWRldl9lcnIoaHlf ZHJ2X3ByaXYtPmRldiwgImNhbid0IGZpbmQgdGhlIGVudHJ5XG4iKTsKKwkJcmV0dXJuIC1FTk9F TlQ7CisJfQorCisJbXV0ZXhfbG9jaygmaHlfZHJ2X3ByaXYtPmxvY2spOworCisJaW1wb3J0ZWQt PmltcG9ydGVycysrOworCisJLyogc2VuZCBub3RpZmljYXRpb24gZm9yIGV4cG9ydF9mZCB0byBl eHBvcnRlciAqLworCW9wWzBdID0gaW1wb3J0ZWQtPmhpZC5pZDsKKworCWZvciAoaSA9IDA7IGkg PCAzOyBpKyspCisJCW9wW2krMV0gPSBpbXBvcnRlZC0+aGlkLnJuZ19rZXlbaV07CisKKwlkZXZf ZGJnKGh5X2Rydl9wcml2LT5kZXYsICJFeHBvcnQgRkQgb2YgYnVmZmVyIHtpZDolZCBrZXk6JWQg JWQgJWR9XG4iLAorCQlpbXBvcnRlZC0+aGlkLmlkLCBpbXBvcnRlZC0+aGlkLnJuZ19rZXlbMF0s CisJCWltcG9ydGVkLT5oaWQucm5nX2tleVsxXSwgaW1wb3J0ZWQtPmhpZC5ybmdfa2V5WzJdKTsK KworCXJlcSA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpyZXEpLCBHRlBfS0VSTkVMKTsKKworCWlmICgh cmVxKSB7CisJCW11dGV4X3VubG9jaygmaHlfZHJ2X3ByaXYtPmxvY2spOworCQlyZXR1cm4gLUVO T01FTTsKKwl9CisKKwloeXBlcl9kbWFidWZfY3JlYXRlX3JlcShyZXEsIEhZUEVSX0RNQUJVRl9F WFBPUlRfRkQsICZvcFswXSk7CisKKwlyZXQgPSBia25kX29wcy0+c2VuZF9yZXEoSFlQRVJfRE1B QlVGX0RPTV9JRChpbXBvcnRlZC0+aGlkKSwgcmVxLCB0cnVlKTsKKworCWlmIChyZXQgPCAwKSB7 CisJCS8qIGluIGNhc2Ugb2YgdGltZW91dCBvdGhlciBlbmQgZXZlbnR1YWxseSB3aWxsIHJlY2Vp dmUgcmVxdWVzdCwKKwkJICogc28gd2UgbmVlZCB0byB1bmRvIGl0CisJCSAqLworCQloeXBlcl9k bWFidWZfY3JlYXRlX3JlcShyZXEsIEhZUEVSX0RNQUJVRl9FWFBPUlRfRkRfRkFJTEVELAorCQkJ CQkmb3BbMF0pOworCQlia25kX29wcy0+c2VuZF9yZXEoSFlQRVJfRE1BQlVGX0RPTV9JRChpbXBv cnRlZC0+aGlkKSwKKwkJCQkgICByZXEsIGZhbHNlKTsKKwkJa2ZyZWUocmVxKTsKKwkJZGV2X2Vy cihoeV9kcnZfcHJpdi0+ZGV2LAorCQkJIkZhaWxlZCB0byBjcmVhdGUgc2d0IG9yIG5vdGlmeSBl eHBvcnRlclxuIik7CisJCWltcG9ydGVkLT5pbXBvcnRlcnMtLTsKKwkJbXV0ZXhfdW5sb2NrKCZo eV9kcnZfcHJpdi0+bG9jayk7CisJCXJldHVybiByZXQ7CisJfQorCisJa2ZyZWUocmVxKTsKKwor CWlmIChyZXQgPT0gSFlQRVJfRE1BQlVGX1JFUV9FUlJPUikgeworCQlkZXZfZXJyKGh5X2Rydl9w cml2LT5kZXYsCisJCQkiQnVmZmVyIGludmFsaWQge2lkOiVkIGtleTolZCAlZCAlZH0sIGNhbm5v dCBpbXBvcnRcbiIsCisJCQlpbXBvcnRlZC0+aGlkLmlkLCBpbXBvcnRlZC0+aGlkLnJuZ19rZXlb MF0sCisJCQlpbXBvcnRlZC0+aGlkLnJuZ19rZXlbMV0sIGltcG9ydGVkLT5oaWQucm5nX2tleVsy XSk7CisKKwkJaW1wb3J0ZWQtPmltcG9ydGVycy0tOworCQltdXRleF91bmxvY2soJmh5X2Rydl9w cml2LT5sb2NrKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0ID0gMDsKKworCWRldl9k YmcoaHlfZHJ2X3ByaXYtPmRldiwKKwkJIkZvdW5kIGJ1ZmZlciBncmVmICVkIG9mZiAlZFxuIiwK KwkJaW1wb3J0ZWQtPnJlZl9oYW5kbGUsIGltcG9ydGVkLT5mcnN0X29mc3QpOworCisJZGV2X2Ri ZyhoeV9kcnZfcHJpdi0+ZGV2LAorCQkibGFzdCBsZW4gJWQgbmVudHMgJWQgZG9tYWluICVkXG4i LAorCQlpbXBvcnRlZC0+bGFzdF9sZW4sIGltcG9ydGVkLT5uZW50cywKKwkJSFlQRVJfRE1BQlVG X0RPTV9JRChpbXBvcnRlZC0+aGlkKSk7CisKKwlpZiAoIWltcG9ydGVkLT5zZ3QpIHsKKwkJZGV2 X2RiZyhoeV9kcnZfcHJpdi0+ZGV2LAorCQkJImJ1ZmZlciB7aWQ6JWQga2V5OiVkICVkICVkfSBw YWdlcyBub3QgbWFwcGVkIHlldFxuIiwKKwkJCWltcG9ydGVkLT5oaWQuaWQsIGltcG9ydGVkLT5o aWQucm5nX2tleVswXSwKKwkJCWltcG9ydGVkLT5oaWQucm5nX2tleVsxXSwgaW1wb3J0ZWQtPmhp ZC5ybmdfa2V5WzJdKTsKKworCQlkYXRhX3BncyA9IGJrbmRfb3BzLT5tYXBfc2hhcmVkX3BhZ2Vz KGltcG9ydGVkLT5yZWZfaGFuZGxlLAorCQkJCQlIWVBFUl9ETUFCVUZfRE9NX0lEKGltcG9ydGVk LT5oaWQpLAorCQkJCQlpbXBvcnRlZC0+bmVudHMsCisJCQkJCSZpbXBvcnRlZC0+cmVmc19pbmZv KTsKKworCQlpZiAoIWRhdGFfcGdzKSB7CisJCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYsCisJ CQkJImNhbid0IG1hcCBwYWdlcyBoaWQge2lkOiVkIGtleTolZCAlZCAlZH1cbiIsCisJCQkJaW1w b3J0ZWQtPmhpZC5pZCwgaW1wb3J0ZWQtPmhpZC5ybmdfa2V5WzBdLAorCQkJCWltcG9ydGVkLT5o aWQucm5nX2tleVsxXSwKKwkJCQlpbXBvcnRlZC0+aGlkLnJuZ19rZXlbMl0pOworCisJCQlpbXBv cnRlZC0+aW1wb3J0ZXJzLS07CisKKwkJCXJlcSA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpyZXEpLCBH RlBfS0VSTkVMKTsKKworCQkJaWYgKCFyZXEpIHsKKwkJCQltdXRleF91bmxvY2soJmh5X2Rydl9w cml2LT5sb2NrKTsKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCX0KKworCQkJaHlwZXJfZG1hYnVm X2NyZWF0ZV9yZXEocmVxLAorCQkJCQkJSFlQRVJfRE1BQlVGX0VYUE9SVF9GRF9GQUlMRUQsCisJ CQkJCQkmb3BbMF0pOworCisJCQlia25kX29wcy0+c2VuZF9yZXEoSFlQRVJfRE1BQlVGX0RPTV9J RChpbXBvcnRlZC0+aGlkKSwKKwkJCQkJICAgcmVxLCBmYWxzZSk7CisJCQlrZnJlZShyZXEpOwor CQkJbXV0ZXhfdW5sb2NrKCZoeV9kcnZfcHJpdi0+bG9jayk7CisJCQlyZXR1cm4gLUVJTlZBTDsK KwkJfQorCisJCWltcG9ydGVkLT5zZ3QgPSBoeXBlcl9kbWFidWZfY3JlYXRlX3NndChkYXRhX3Bn cywKKwkJCQkJCQlpbXBvcnRlZC0+ZnJzdF9vZnN0LAorCQkJCQkJCWltcG9ydGVkLT5sYXN0X2xl biwKKwkJCQkJCQlpbXBvcnRlZC0+bmVudHMpOworCisJfQorCisJZXhwb3J0X2ZkX2F0dHItPmZk ID0gaHlwZXJfZG1hYnVmX2V4cG9ydF9mZChpbXBvcnRlZCwKKwkJCQkJCSAgICBleHBvcnRfZmRf YXR0ci0+ZmxhZ3MpOworCisJaWYgKGV4cG9ydF9mZF9hdHRyLT5mZCA8IDApIHsKKwkJLyogZmFp bCB0byBnZXQgZmQgKi8KKwkJcmV0ID0gZXhwb3J0X2ZkX2F0dHItPmZkOworCX0KKworCW11dGV4 X3VubG9jaygmaHlfZHJ2X3ByaXYtPmxvY2spOworCisJZGV2X2RiZyhoeV9kcnZfcHJpdi0+ZGV2 LCAiJXMgZXhpdFxuIiwgX19mdW5jX18pOworCXJldHVybiByZXQ7Cit9CisKKy8qIHVuZXhwb3J0 IGRtYWJ1ZiBmcm9tIHRoZSBkYXRhYmFzZSBhbmQgc2VuZCBpbnQgcmVxIHRvIHRoZSBzb3VyY2Ug ZG9tYWluCisgKiB0byB1bm1hcCBpdC4KKyAqLworc3RhdGljIHZvaWQgZGVsYXllZF91bmV4cG9y dChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGh5cGVyX2RtYWJ1Zl9yZXEg KnJlcTsKKwlzdHJ1Y3QgaHlwZXJfZG1hYnVmX2JrbmRfb3BzICpia25kX29wcyA9IGh5X2Rydl9w cml2LT5ia25kX29wczsKKwlzdHJ1Y3QgZXhwb3J0ZWRfc2d0X2luZm8gKmV4cG9ydGVkID0KKwkJ Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBleHBvcnRlZF9zZ3RfaW5mbywgdW5leHBvcnQud29y ayk7CisJaW50IG9wWzRdOworCWludCBpLCByZXQ7CisKKwlpZiAoIWV4cG9ydGVkKQorCQlyZXR1 cm47CisKKwlkZXZfZGJnKGh5X2Rydl9wcml2LT5kZXYsCisJCSJNYXJraW5nIGJ1ZmZlciB7aWQ6 JWQga2V5OiVkICVkICVkfSBhcyBpbnZhbGlkXG4iLAorCQlleHBvcnRlZC0+aGlkLmlkLCBleHBv cnRlZC0+aGlkLnJuZ19rZXlbMF0sCisJCWV4cG9ydGVkLT5oaWQucm5nX2tleVsxXSwgZXhwb3J0 ZWQtPmhpZC5ybmdfa2V5WzJdKTsKKworCS8qIG5vIGxvbmdlciB2YWxpZCAqLworCWV4cG9ydGVk LT52YWxpZCA9IGZhbHNlOworCisJcmVxID0ga2NhbGxvYygxLCBzaXplb2YoKnJlcSksIEdGUF9L RVJORUwpOworCisJaWYgKCFyZXEpCisJCXJldHVybjsKKworCW9wWzBdID0gZXhwb3J0ZWQtPmhp ZC5pZDsKKworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisJCW9wW2krMV0gPSBleHBvcnRlZC0+ aGlkLnJuZ19rZXlbaV07CisKKwloeXBlcl9kbWFidWZfY3JlYXRlX3JlcShyZXEsIEhZUEVSX0RN QUJVRl9OT1RJRllfVU5FWFBPUlQsICZvcFswXSk7CisKKwkvKiBOb3cgc2VuZCB1bmV4cG9ydCBy ZXF1ZXN0IHRvIHJlbW90ZSBkb21haW4sIG1hcmtpbmcKKwkgKiB0aGF0IGJ1ZmZlciBzaG91bGQg bm90IGJlIHVzZWQgYW55bW9yZQorCSAqLworCXJldCA9IGJrbmRfb3BzLT5zZW5kX3JlcShleHBv cnRlZC0+cmRvbWlkLCByZXEsIHRydWUpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoaHlf ZHJ2X3ByaXYtPmRldiwKKwkJCSJ1bmV4cG9ydCBtZXNzYWdlIGZvciBidWZmZXIge2lkOiVkIGtl eTolZCAlZCAlZH0gZmFpbGVkXG4iLAorCQkJZXhwb3J0ZWQtPmhpZC5pZCwgZXhwb3J0ZWQtPmhp ZC5ybmdfa2V5WzBdLAorCQkJZXhwb3J0ZWQtPmhpZC5ybmdfa2V5WzFdLCBleHBvcnRlZC0+aGlk LnJuZ19rZXlbMl0pOworCX0KKworCWtmcmVlKHJlcSk7CisJZXhwb3J0ZWQtPnVuZXhwb3J0X3Nj aGVkID0gZmFsc2U7CisKKwkvKiBJbW1lZGlhdGVseSBjbGVhbi11cCBpZiBpdCBoYXMgbmV2ZXIg YmVlbiBleHBvcnRlZCBieSBpbXBvcnRlcgorCSAqIChzbyBubyBTR1QgaXMgY29uc3RydWN0ZWQg b24gaW1wb3J0ZXIpLgorCSAqIGNsZWFuIGl0IHVwIGxhdGVyIGluIHJlbW90ZSBzeW5jIHdoZW4g ZmluYWwgcmVsZWFzZSBvcHMKKwkgKiBpcyBjYWxsZWQgKGltcG9ydGVyIGRvZXMgdGhpcyBvbmx5 IHdoZW4gdGhlcmUncyBubworCSAqIG5vIGNvbnN1bWVyIG9mIGxvY2FsbHkgZXhwb3J0ZWQgRkRz KQorCSAqLworCWlmIChleHBvcnRlZC0+YWN0aXZlID09IDApIHsKKwkJZGV2X2RiZyhoeV9kcnZf cHJpdi0+ZGV2LAorCQkJImNsYW5pbmcgdXAgYnVmZmVyIHtpZDolZCBrZXk6JWQgJWQgJWR9IGNv bXBsZXRseVxuIiwKKwkJCWV4cG9ydGVkLT5oaWQuaWQsIGV4cG9ydGVkLT5oaWQucm5nX2tleVsw XSwKKwkJCWV4cG9ydGVkLT5oaWQucm5nX2tleVsxXSwgZXhwb3J0ZWQtPmhpZC5ybmdfa2V5WzJd KTsKKworCQloeXBlcl9kbWFidWZfY2xlYW51cF9zZ3RfaW5mbyhleHBvcnRlZCwgZmFsc2UpOwor CQloeXBlcl9kbWFidWZfcmVtb3ZlX2V4cG9ydGVkKGV4cG9ydGVkLT5oaWQpOworCisJCS8qIHJl Z2lzdGVyIGh5cGVyX2RtYWJ1Zl9pZCB0byB0aGUgbGlzdCBmb3IgcmV1c2UgKi8KKwkJaHlwZXJf ZG1hYnVmX3N0b3JlX2hpZChleHBvcnRlZC0+aGlkKTsKKworCQlrZnJlZShleHBvcnRlZCk7CisJ fQorfQorCisvKiBTY2hlZHVsZSB1bmV4cG9ydCBvZiBkbWFidWYuCisgKi8KK2ludCBoeXBlcl9k bWFidWZfdW5leHBvcnRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKmRhdGEpCit7CisJ c3RydWN0IGlvY3RsX2h5cGVyX2RtYWJ1Zl91bmV4cG9ydCAqdW5leHBvcnRfYXR0ciA9CisJCQko c3RydWN0IGlvY3RsX2h5cGVyX2RtYWJ1Zl91bmV4cG9ydCAqKWRhdGE7CisJc3RydWN0IGV4cG9y dGVkX3NndF9pbmZvICpleHBvcnRlZDsKKworCWRldl9kYmcoaHlfZHJ2X3ByaXYtPmRldiwgIiVz IGVudHJ5XG4iLCBfX2Z1bmNfXyk7CisKKwkvKiBmaW5kIGRtYWJ1ZiBpbiBleHBvcnQgbGlzdCAq LworCWV4cG9ydGVkID0gaHlwZXJfZG1hYnVmX2ZpbmRfZXhwb3J0ZWQodW5leHBvcnRfYXR0ci0+ aGlkKTsKKworCWRldl9kYmcoaHlfZHJ2X3ByaXYtPmRldiwKKwkJInNjaGVkdWxpbmcgdW5leHBv cnQgb2YgYnVmZmVyIHtpZDolZCBrZXk6JWQgJWQgJWR9XG4iLAorCQl1bmV4cG9ydF9hdHRyLT5o aWQuaWQsIHVuZXhwb3J0X2F0dHItPmhpZC5ybmdfa2V5WzBdLAorCQl1bmV4cG9ydF9hdHRyLT5o aWQucm5nX2tleVsxXSwgdW5leHBvcnRfYXR0ci0+aGlkLnJuZ19rZXlbMl0pOworCisJLyogZmFp bGVkIHRvIGZpbmQgY29ycmVzcG9uZGluZyBlbnRyeSBpbiBleHBvcnQgbGlzdCAqLworCWlmIChl eHBvcnRlZCA9PSBOVUxMKSB7CisJCXVuZXhwb3J0X2F0dHItPnN0YXR1cyA9IC1FTk9FTlQ7CisJ CXJldHVybiAtRU5PRU5UOworCX0KKworCWlmIChleHBvcnRlZC0+dW5leHBvcnRfc2NoZWQpCisJ CXJldHVybiAwOworCisJZXhwb3J0ZWQtPnVuZXhwb3J0X3NjaGVkID0gdHJ1ZTsKKwlJTklUX0RF TEFZRURfV09SSygmZXhwb3J0ZWQtPnVuZXhwb3J0LCBkZWxheWVkX3VuZXhwb3J0KTsKKwlzY2hl ZHVsZV9kZWxheWVkX3dvcmsoJmV4cG9ydGVkLT51bmV4cG9ydCwKKwkJCSAgICAgIG1zZWNzX3Rv X2ppZmZpZXModW5leHBvcnRfYXR0ci0+ZGVsYXlfbXMpKTsKKworCWRldl9kYmcoaHlfZHJ2X3By aXYtPmRldiwgIiVzIGV4aXRcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gMDsKK30KKworY29uc3Qg c3RydWN0IGh5cGVyX2RtYWJ1Zl9pb2N0bF9kZXNjIGh5cGVyX2RtYWJ1Zl9pb2N0bHNbXSA9IHsK KwlIWVBFUl9ETUFCVUZfSU9DVExfREVGKElPQ1RMX0hZUEVSX0RNQUJVRl9UWF9DSF9TRVRVUCwK KwkJCSAgICAgICBoeXBlcl9kbWFidWZfdHhfY2hfc2V0dXBfaW9jdGwsIDApLAorCUhZUEVSX0RN QUJVRl9JT0NUTF9ERUYoSU9DVExfSFlQRVJfRE1BQlVGX1JYX0NIX1NFVFVQLAorCQkJICAgICAg IGh5cGVyX2RtYWJ1Zl9yeF9jaF9zZXR1cF9pb2N0bCwgMCksCisJSFlQRVJfRE1BQlVGX0lPQ1RM X0RFRihJT0NUTF9IWVBFUl9ETUFCVUZfRVhQT1JUX1JFTU9URSwKKwkJCSAgICAgICBoeXBlcl9k bWFidWZfZXhwb3J0X3JlbW90ZV9pb2N0bCwgMCksCisJSFlQRVJfRE1BQlVGX0lPQ1RMX0RFRihJ T0NUTF9IWVBFUl9ETUFCVUZfRVhQT1JUX0ZELAorCQkJICAgICAgIGh5cGVyX2RtYWJ1Zl9leHBv cnRfZmRfaW9jdGwsIDApLAorCUhZUEVSX0RNQUJVRl9JT0NUTF9ERUYoSU9DVExfSFlQRVJfRE1B QlVGX1VORVhQT1JULAorCQkJICAgICAgIGh5cGVyX2RtYWJ1Zl91bmV4cG9ydF9pb2N0bCwgMCks Cit9OworCitsb25nIGh5cGVyX2RtYWJ1Zl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJCXVu c2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgcGFyYW0pCit7CisJY29uc3Qgc3RydWN0IGh5 cGVyX2RtYWJ1Zl9pb2N0bF9kZXNjICppb2N0bCA9IE5VTEw7CisJdW5zaWduZWQgaW50IG5yID0g X0lPQ19OUihjbWQpOworCWludCByZXQ7CisJaHlwZXJfZG1hYnVmX2lvY3RsX3QgZnVuYzsKKwlj aGFyICprZGF0YTsKKworCWlmIChuciA+IEFSUkFZX1NJWkUoaHlwZXJfZG1hYnVmX2lvY3Rscykp IHsKKwkJZGV2X2VycihoeV9kcnZfcHJpdi0+ZGV2LCAiaW52YWxpZCBpb2N0bFxuIik7CisJCXJl dHVybiAtRUlOVkFMOworCX0KKworCWlvY3RsID0gJmh5cGVyX2RtYWJ1Zl9pb2N0bHNbbnJdOwor CisJZnVuYyA9IGlvY3RsLT5mdW5jOworCisJaWYgKHVubGlrZWx5KCFmdW5jKSkgeworCQlkZXZf ZXJyKGh5X2Rydl9wcml2LT5kZXYsICJubyBmdW5jdGlvblxuIik7CisJCXJldHVybiAtRUlOVkFM OworCX0KKworCWtkYXRhID0ga21hbGxvYyhfSU9DX1NJWkUoY21kKSwgR0ZQX0tFUk5FTCk7CisJ aWYgKCFrZGF0YSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoY29weV9mcm9tX3VzZXIoa2Rh dGEsICh2b2lkIF9fdXNlciAqKXBhcmFtLAorCQkJICAgX0lPQ19TSVpFKGNtZCkpICE9IDApIHsK KwkJZGV2X2VycihoeV9kcnZfcHJpdi0+ZGV2LAorCQkJImZhaWxlZCB0byBjb3B5IGZyb20gdXNl ciBhcmd1bWVudHNcbiIpOworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIGlvY3RsX2Vycm9yOwor CX0KKworCXJldCA9IGZ1bmMoZmlscCwga2RhdGEpOworCisJaWYgKGNvcHlfdG9fdXNlcigodm9p ZCBfX3VzZXIgKilwYXJhbSwga2RhdGEsCisJCQkgX0lPQ19TSVpFKGNtZCkpICE9IDApIHsKKwkJ ZGV2X2VycihoeV9kcnZfcHJpdi0+ZGV2LAorCQkJImZhaWxlZCB0byBjb3B5IHRvIHVzZXIgYXJn dW1lbnRzXG4iKTsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBpb2N0bF9lcnJvcjsKKwl9CisK K2lvY3RsX2Vycm9yOgorCWtmcmVlKGtkYXRhKTsKKworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1n aXQgYS9kcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9pb2N0bC5oIGIv ZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfaW9jdGwuaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmQ4MDkwOTAwZmZhMgotLS0gL2Rldi9u dWxsCisrKyBiL2RyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX2lvY3Rs LmgKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE4IEludGVsIENvcnBv cmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFy Z2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBh bmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0 byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0 aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJn ZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGll cyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICog U29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBw ZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxs IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhl CisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwg V0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5D TFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VN RU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xE RVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwg QVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdB UkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoK KyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoTUlUIE9SIEdQTC0yLjApCisgKgorICovCisK KyNpZm5kZWYgX19IWVBFUl9ETUFCVUZfSU9DVExfSF9fCisjZGVmaW5lIF9fSFlQRVJfRE1BQlVG X0lPQ1RMX0hfXworCit0eXBlZGVmIGludCAoKmh5cGVyX2RtYWJ1Zl9pb2N0bF90KShzdHJ1Y3Qg ZmlsZSAqZmlscCwgdm9pZCAqZGF0YSk7CisKK3N0cnVjdCBoeXBlcl9kbWFidWZfaW9jdGxfZGVz YyB7CisJdW5zaWduZWQgaW50IGNtZDsKKwlpbnQgZmxhZ3M7CisJaHlwZXJfZG1hYnVmX2lvY3Rs X3QgZnVuYzsKKwljb25zdCBjaGFyICpuYW1lOworfTsKKworI2RlZmluZSBIWVBFUl9ETUFCVUZf SU9DVExfREVGKGlvY3RsLCBfZnVuYywgX2ZsYWdzKQlcCisJW19JT0NfTlIoaW9jdGwpXSA9IHsJ CQkJXAorCQkJLmNtZCA9IGlvY3RsLAkJCVwKKwkJCS5mdW5jID0gX2Z1bmMsCQkJXAorCQkJLmZs YWdzID0gX2ZsYWdzLAkJXAorCQkJLm5hbWUgPSAjaW9jdGwJCQlcCisJfQorCitsb25nIGh5cGVy X2RtYWJ1Zl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJCXVuc2lnbmVkIGludCBjbWQsIHVu c2lnbmVkIGxvbmcgcGFyYW0pOworCitpbnQgaHlwZXJfZG1hYnVmX3VuZXhwb3J0X2lvY3RsKHN0 cnVjdCBmaWxlICpmaWxwLCB2b2lkICpkYXRhKTsKKworI2VuZGlmIC8vX19IWVBFUl9ETUFCVUZf SU9DVExfSF9fCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5cGVy X2RtYWJ1Zl9saXN0LmMgYi9kcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1 Zl9saXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5mMmY2NWE4 ZWM0N2YKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5 cGVyX2RtYWJ1Zl9saXN0LmMKQEAgLTAsMCArMSwyOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkg MjAxOCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50 ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9m IHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJT b2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlv biwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNv cHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBh bmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMg dG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0 byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBu b3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICog cGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFs IHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBS T1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IK KyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug QU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBP UiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBP VEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9S VCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9O IFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRI RSBTT0ZUV0FSRS4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKE1JVCBPUiBHUEwt Mi4wKQorICoKKyAqIEF1dGhvcnM6CisgKiAgICBEb25nd29uIEtpbSA8ZG9uZ3dvbi5raW1AaW50 ZWwuY29tPgorICogICAgTWF0ZXVzeiBQb2xyb2xhIDxtYXRldXN6eC5wb3Ryb2xhQGludGVsLmNv bT4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4 L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2NkZXYu aD4KKyNpbmNsdWRlIDxsaW51eC9oYXNodGFibGUuaD4KKyNpbmNsdWRlICJoeXBlcl9kbWFidWZf ZHJ2LmgiCisjaW5jbHVkZSAiaHlwZXJfZG1hYnVmX2xpc3QuaCIKKyNpbmNsdWRlICJoeXBlcl9k bWFidWZfaWQuaCIKKworREVDTEFSRV9IQVNIVEFCTEUoaHlwZXJfZG1hYnVmX2hhc2hfaW1wb3J0 ZWQsIE1BWF9FTlRSWV9JTVBPUlRFRCk7CitERUNMQVJFX0hBU0hUQUJMRShoeXBlcl9kbWFidWZf aGFzaF9leHBvcnRlZCwgTUFYX0VOVFJZX0VYUE9SVEVEKTsKKworI2lmZGVmIENPTkZJR19IWVBF Ul9ETUFCVUZfU1lTRlMKK3N0YXRpYyBzc2l6ZV90IGh5cGVyX2RtYWJ1Zl9pbXBvcnRlZF9zaG93 KHN0cnVjdCBkZXZpY2UgKmRydiwKKwkJCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0 ciwKKwkJCQkJICBjaGFyICpidWYpCit7CisJc3RydWN0IGxpc3RfZW50cnlfaW1wb3J0ZWQgKmlu Zm9fZW50cnk7CisJaW50IGJrdDsKKwlzc2l6ZV90IGNvdW50ID0gMDsKKwlzaXplX3QgdG90YWwg PSAwOworCisJaGFzaF9mb3JfZWFjaChoeXBlcl9kbWFidWZfaGFzaF9pbXBvcnRlZCwgYmt0LCBp bmZvX2VudHJ5LCBub2RlKSB7CisJCWh5cGVyX2RtYWJ1Zl9pZF90IGhpZCA9IGluZm9fZW50cnkt PmltcG9ydGVkLT5oaWQ7CisJCWludCBuZW50cyA9IGluZm9fZW50cnktPmltcG9ydGVkLT5uZW50 czsKKwkJYm9vbCB2YWxpZCA9IGluZm9fZW50cnktPmltcG9ydGVkLT52YWxpZDsKKwkJaW50IG51 bV9pbXBvcnRlcnMgPSBpbmZvX2VudHJ5LT5pbXBvcnRlZC0+aW1wb3J0ZXJzOworCisJCXRvdGFs ICs9IG5lbnRzOworCQljb3VudCArPSBzY25wcmludGYoYnVmICsgY291bnQsIFBBR0VfU0laRSAt IGNvdW50LAorCQkJCSJoaWQ6eyVkICVkICVkICVkfSwgbmVudDolZCwgdjolYywgbnVtaTolZFxu IiwKKwkJCQloaWQuaWQsIGhpZC5ybmdfa2V5WzBdLCBoaWQucm5nX2tleVsxXSwKKwkJCQloaWQu cm5nX2tleVsyXSwgbmVudHMsICh2YWxpZCA/ICd0JyA6ICdmJyksCisJCQkJbnVtX2ltcG9ydGVy cyk7CisJfQorCWNvdW50ICs9IHNjbnByaW50ZihidWYgKyBjb3VudCwgUEFHRV9TSVpFIC0gY291 bnQsCisJCQkgICAidG90YWwgbmVudHM6ICVsdVxuIiwgdG90YWwpOworCisJcmV0dXJuIGNvdW50 OworfQorCitzdGF0aWMgc3NpemVfdCBoeXBlcl9kbWFidWZfZXhwb3J0ZWRfc2hvdyhzdHJ1Y3Qg ZGV2aWNlICpkcnYsCisJCQkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJ CSAgY2hhciAqYnVmKQoreworCXN0cnVjdCBsaXN0X2VudHJ5X2V4cG9ydGVkICppbmZvX2VudHJ5 OworCWludCBia3Q7CisJc3NpemVfdCBjb3VudCA9IDA7CisJc2l6ZV90IHRvdGFsID0gMDsKKwor CWhhc2hfZm9yX2VhY2goaHlwZXJfZG1hYnVmX2hhc2hfZXhwb3J0ZWQsIGJrdCwgaW5mb19lbnRy eSwgbm9kZSkgeworCQloeXBlcl9kbWFidWZfaWRfdCBoaWQgPSBpbmZvX2VudHJ5LT5leHBvcnRl ZC0+aGlkOworCQlpbnQgbmVudHMgPSBpbmZvX2VudHJ5LT5leHBvcnRlZC0+bmVudHM7CisJCWJv b2wgdmFsaWQgPSBpbmZvX2VudHJ5LT5leHBvcnRlZC0+dmFsaWQ7CisJCWludCBpbXBvcnRlcl9l eHBvcnRlZCA9IGluZm9fZW50cnktPmV4cG9ydGVkLT5hY3RpdmU7CisKKwkJdG90YWwgKz0gbmVu dHM7CisJCWNvdW50ICs9IHNjbnByaW50ZihidWYgKyBjb3VudCwgUEFHRV9TSVpFIC0gY291bnQs CisJCQkJICAgImhpZDp7JWQgJWQgJWQgJWR9LCBuZW50OiVkLCB2OiVjLCBpZTolZFxuIiwKKwkJ CQkgICBoaWQuaWQsIGhpZC5ybmdfa2V5WzBdLCBoaWQucm5nX2tleVsxXSwKKwkJCQkgICBoaWQu cm5nX2tleVsyXSwgbmVudHMsICh2YWxpZCA/ICd0JyA6ICdmJyksCisJCQkJICAgaW1wb3J0ZXJf ZXhwb3J0ZWQpOworCX0KKwljb3VudCArPSBzY25wcmludGYoYnVmICsgY291bnQsIFBBR0VfU0la RSAtIGNvdW50LAorCQkJICAgInRvdGFsIG5lbnRzOiAlbHVcbiIsIHRvdGFsKTsKKworCXJldHVy biBjb3VudDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKGltcG9ydGVkLCAwNDAwLCBoeXBlcl9k bWFidWZfaW1wb3J0ZWRfc2hvdywgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIoZXhwb3J0ZWQs IDA0MDAsIGh5cGVyX2RtYWJ1Zl9leHBvcnRlZF9zaG93LCBOVUxMKTsKKworaW50IGh5cGVyX2Rt YWJ1Zl9yZWdpc3Rlcl9zeXNmcyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaW50IGVycjsKKwor CWVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9pbXBvcnRlZCk7CisJaWYg KGVyciA8IDApCisJCWdvdG8gZXJyMTsKKwllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAm ZGV2X2F0dHJfZXhwb3J0ZWQpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycjI7CisKKwlyZXR1 cm4gMDsKK2VycjI6CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2ltcG9ydGVk KTsKK2VycjE6CisJcmV0dXJuIC0xOworfQorCitpbnQgaHlwZXJfZG1hYnVmX3VucmVnaXN0ZXJf c3lzZnMoc3RydWN0IGRldmljZSAqZGV2KQoreworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZk ZXZfYXR0cl9pbXBvcnRlZCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2V4 cG9ydGVkKTsKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmCisKK2ludCBoeXBlcl9kbWFidWZfdGFi bGVfaW5pdCh2b2lkKQoreworCWhhc2hfaW5pdChoeXBlcl9kbWFidWZfaGFzaF9pbXBvcnRlZCk7 CisJaGFzaF9pbml0KGh5cGVyX2RtYWJ1Zl9oYXNoX2V4cG9ydGVkKTsKKwlyZXR1cm4gMDsKK30K KworaW50IGh5cGVyX2RtYWJ1Zl90YWJsZV9kZXN0cm95KHZvaWQpCit7CisJLyogVE9ETzogY2xl YW51cCBoeXBlcl9kbWFidWZfaGFzaF9pbXBvcnRlZAorCSAqIGFuZCBoeXBlcl9kbWFidWZfaGFz aF9leHBvcnRlZAorCSAqLworCXJldHVybiAwOworfQorCitpbnQgaHlwZXJfZG1hYnVmX3JlZ2lz dGVyX2V4cG9ydGVkKHN0cnVjdCBleHBvcnRlZF9zZ3RfaW5mbyAqZXhwb3J0ZWQpCit7CisJc3Ry dWN0IGxpc3RfZW50cnlfZXhwb3J0ZWQgKmluZm9fZW50cnk7CisKKwlpbmZvX2VudHJ5ID0ga21h bGxvYyhzaXplb2YoKmluZm9fZW50cnkpLCBHRlBfS0VSTkVMKTsKKworCWlmICghaW5mb19lbnRy eSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpbmZvX2VudHJ5LT5leHBvcnRlZCA9IGV4cG9ydGVk OworCisJaGFzaF9hZGQoaHlwZXJfZG1hYnVmX2hhc2hfZXhwb3J0ZWQsICZpbmZvX2VudHJ5LT5u b2RlLAorCQkgaW5mb19lbnRyeS0+ZXhwb3J0ZWQtPmhpZC5pZCk7CisKKwlyZXR1cm4gMDsKK30K KworaW50IGh5cGVyX2RtYWJ1Zl9yZWdpc3Rlcl9pbXBvcnRlZChzdHJ1Y3QgaW1wb3J0ZWRfc2d0 X2luZm8gKmltcG9ydGVkKQoreworCXN0cnVjdCBsaXN0X2VudHJ5X2ltcG9ydGVkICppbmZvX2Vu dHJ5OworCisJaW5mb19lbnRyeSA9IGttYWxsb2Moc2l6ZW9mKCppbmZvX2VudHJ5KSwgR0ZQX0tF Uk5FTCk7CisKKwlpZiAoIWluZm9fZW50cnkpCisJCXJldHVybiAtRU5PTUVNOworCisJaW5mb19l bnRyeS0+aW1wb3J0ZWQgPSBpbXBvcnRlZDsKKworCWhhc2hfYWRkKGh5cGVyX2RtYWJ1Zl9oYXNo X2ltcG9ydGVkLCAmaW5mb19lbnRyeS0+bm9kZSwKKwkJIGluZm9fZW50cnktPmltcG9ydGVkLT5o aWQuaWQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBleHBvcnRlZF9zZ3RfaW5mbyAqaHlw ZXJfZG1hYnVmX2ZpbmRfZXhwb3J0ZWQoaHlwZXJfZG1hYnVmX2lkX3QgaGlkKQoreworCXN0cnVj dCBsaXN0X2VudHJ5X2V4cG9ydGVkICppbmZvX2VudHJ5OworCWludCBia3Q7CisKKwloYXNoX2Zv cl9lYWNoKGh5cGVyX2RtYWJ1Zl9oYXNoX2V4cG9ydGVkLCBia3QsIGluZm9fZW50cnksIG5vZGUp CisJCS8qIGNoZWNraW5nIGhpZC5pZCBmaXJzdCAqLworCQlpZiAoaW5mb19lbnRyeS0+ZXhwb3J0 ZWQtPmhpZC5pZCA9PSBoaWQuaWQpIHsKKwkJCS8qIHRoZW4ga2V5IGlzIGNvbXBhcmVkICovCisJ CQlpZiAoaHlwZXJfZG1hYnVmX2hpZF9rZXljb21wKGluZm9fZW50cnktPmV4cG9ydGVkLT5oaWQs CisJCQkJCQkgICAgaGlkKSkKKwkJCQlyZXR1cm4gaW5mb19lbnRyeS0+ZXhwb3J0ZWQ7CisKKwkJ CS8qIGlmIGtleSBpcyB1bm1hdGNoZWQsIGdpdmVuIEhJRCBpcyBpbnZhbGlkLAorCQkJICogc28g cmV0dXJuaW5nIE5VTEwKKwkJCSAqLworCQkJYnJlYWs7CisJCX0KKworCXJldHVybiBOVUxMOwor fQorCisvKiBzZWFyY2ggZm9yIHByZS1leHBvcnRlZCBzZ3QgYW5kIHJldHVybiBpZCBvZiBpdCBp ZiBpdCBleGlzdCAqLworaHlwZXJfZG1hYnVmX2lkX3QgaHlwZXJfZG1hYnVmX2ZpbmRfaGlkX2V4 cG9ydGVkKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsCisJCQkJCQkgaW50IGRvbWlkKQoreworCXN0 cnVjdCBsaXN0X2VudHJ5X2V4cG9ydGVkICppbmZvX2VudHJ5OworCWh5cGVyX2RtYWJ1Zl9pZF90 IGhpZCA9IHstMSwgezAsIDAsIDB9IH07CisJaW50IGJrdDsKKworCWhhc2hfZm9yX2VhY2goaHlw ZXJfZG1hYnVmX2hhc2hfZXhwb3J0ZWQsIGJrdCwgaW5mb19lbnRyeSwgbm9kZSkKKwkJaWYgKGlu Zm9fZW50cnktPmV4cG9ydGVkLT5kbWFfYnVmID09IGRtYWJ1ZiAmJgorCQkgICAgaW5mb19lbnRy eS0+ZXhwb3J0ZWQtPnJkb21pZCA9PSBkb21pZCkKKwkJCXJldHVybiBpbmZvX2VudHJ5LT5leHBv cnRlZC0+aGlkOworCisJcmV0dXJuIGhpZDsKK30KKworc3RydWN0IGltcG9ydGVkX3NndF9pbmZv ICpoeXBlcl9kbWFidWZfZmluZF9pbXBvcnRlZChoeXBlcl9kbWFidWZfaWRfdCBoaWQpCit7CisJ c3RydWN0IGxpc3RfZW50cnlfaW1wb3J0ZWQgKmluZm9fZW50cnk7CisJaW50IGJrdDsKKworCWhh c2hfZm9yX2VhY2goaHlwZXJfZG1hYnVmX2hhc2hfaW1wb3J0ZWQsIGJrdCwgaW5mb19lbnRyeSwg bm9kZSkKKwkJLyogY2hlY2tpbmcgaGlkLmlkIGZpcnN0ICovCisJCWlmIChpbmZvX2VudHJ5LT5p bXBvcnRlZC0+aGlkLmlkID09IGhpZC5pZCkgeworCQkJLyogdGhlbiBrZXkgaXMgY29tcGFyZWQg Ki8KKwkJCWlmIChoeXBlcl9kbWFidWZfaGlkX2tleWNvbXAoaW5mb19lbnRyeS0+aW1wb3J0ZWQt PmhpZCwKKwkJCQkJCSAgICBoaWQpKQorCQkJCXJldHVybiBpbmZvX2VudHJ5LT5pbXBvcnRlZDsK KwkJCS8qIGlmIGtleSBpcyB1bm1hdGNoZWQsIGdpdmVuIEhJRCBpcyBpbnZhbGlkLAorCQkJICog c28gcmV0dXJuaW5nIE5VTEwKKwkJCSAqLworCQkJYnJlYWs7CisJCX0KKworCXJldHVybiBOVUxM OworfQorCitpbnQgaHlwZXJfZG1hYnVmX3JlbW92ZV9leHBvcnRlZChoeXBlcl9kbWFidWZfaWRf dCBoaWQpCit7CisJc3RydWN0IGxpc3RfZW50cnlfZXhwb3J0ZWQgKmluZm9fZW50cnk7CisJaW50 IGJrdDsKKworCWhhc2hfZm9yX2VhY2goaHlwZXJfZG1hYnVmX2hhc2hfZXhwb3J0ZWQsIGJrdCwg aW5mb19lbnRyeSwgbm9kZSkKKwkJLyogY2hlY2tpbmcgaGlkLmlkIGZpcnN0ICovCisJCWlmIChp bmZvX2VudHJ5LT5leHBvcnRlZC0+aGlkLmlkID09IGhpZC5pZCkgeworCQkJLyogdGhlbiBrZXkg aXMgY29tcGFyZWQgKi8KKwkJCWlmIChoeXBlcl9kbWFidWZfaGlkX2tleWNvbXAoaW5mb19lbnRy eS0+ZXhwb3J0ZWQtPmhpZCwKKwkJCQkJCSAgICBoaWQpKSB7CisJCQkJaGFzaF9kZWwoJmluZm9f ZW50cnktPm5vZGUpOworCQkJCWtmcmVlKGluZm9fZW50cnkpOworCQkJCXJldHVybiAwOworCQkJ fQorCisJCQlicmVhazsKKwkJfQorCisJcmV0dXJuIC1FTk9FTlQ7Cit9CisKK2ludCBoeXBlcl9k bWFidWZfcmVtb3ZlX2ltcG9ydGVkKGh5cGVyX2RtYWJ1Zl9pZF90IGhpZCkKK3sKKwlzdHJ1Y3Qg bGlzdF9lbnRyeV9pbXBvcnRlZCAqaW5mb19lbnRyeTsKKwlpbnQgYmt0OworCisJaGFzaF9mb3Jf ZWFjaChoeXBlcl9kbWFidWZfaGFzaF9pbXBvcnRlZCwgYmt0LCBpbmZvX2VudHJ5LCBub2RlKQor CQkvKiBjaGVja2luZyBoaWQuaWQgZmlyc3QgKi8KKwkJaWYgKGluZm9fZW50cnktPmltcG9ydGVk LT5oaWQuaWQgPT0gaGlkLmlkKSB7CisJCQkvKiB0aGVuIGtleSBpcyBjb21wYXJlZCAqLworCQkJ aWYgKGh5cGVyX2RtYWJ1Zl9oaWRfa2V5Y29tcChpbmZvX2VudHJ5LT5pbXBvcnRlZC0+aGlkLAor CQkJCQkJICAgIGhpZCkpIHsKKwkJCQloYXNoX2RlbCgmaW5mb19lbnRyeS0+bm9kZSk7CisJCQkJ a2ZyZWUoaW5mb19lbnRyeSk7CisJCQkJcmV0dXJuIDA7CisJCQl9CisKKwkJCWJyZWFrOworCQl9 CisKKwlyZXR1cm4gLUVOT0VOVDsKK30KKwordm9pZCBoeXBlcl9kbWFidWZfZm9yZWFjaF9leHBv cnRlZCgKKwl2b2lkICgqZnVuYykoc3RydWN0IGV4cG9ydGVkX3NndF9pbmZvICosIHZvaWQgKmF0 dHIpLAorCXZvaWQgKmF0dHIpCit7CisJc3RydWN0IGxpc3RfZW50cnlfZXhwb3J0ZWQgKmluZm9f ZW50cnk7CisJc3RydWN0IGhsaXN0X25vZGUgKnRtcDsKKwlpbnQgYmt0OworCisJaGFzaF9mb3Jf ZWFjaF9zYWZlKGh5cGVyX2RtYWJ1Zl9oYXNoX2V4cG9ydGVkLCBia3QsIHRtcCwKKwkJCWluZm9f ZW50cnksIG5vZGUpIHsKKwkJZnVuYyhpbmZvX2VudHJ5LT5leHBvcnRlZCwgYXR0cik7CisJfQor fQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZf bGlzdC5oIGIvZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfbGlzdC5o Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uM2M2YTIzZWY4MGM2Ci0t LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFi dWZfbGlzdC5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxOCBJbnRl bCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUg b2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29m dHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIp LAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVk aW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlm eSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2Vs bCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0 aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5k IHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBo KSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25z IG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJB UyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJ RUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hB TlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklO RlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklH SFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICog TElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhF UldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhF IFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FS RS4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKE1JVCBPUiBHUEwtMi4wKQorICoK KyAqLworCisjaWZuZGVmIF9fSFlQRVJfRE1BQlVGX0xJU1RfSF9fCisjZGVmaW5lIF9fSFlQRVJf RE1BQlVGX0xJU1RfSF9fCisKKyNpbmNsdWRlICJoeXBlcl9kbWFidWZfc3RydWN0LmgiCisKKy8q IG51bWJlciBvZiBiaXRzIHRvIGJlIHVzZWQgZm9yIGV4cG9ydGVkIGRtYWJ1ZnMgaGFzaCB0YWJs ZSAqLworI2RlZmluZSBNQVhfRU5UUllfRVhQT1JURUQgNworLyogbnVtYmVyIG9mIGJpdHMgdG8g YmUgdXNlZCBmb3IgaW1wb3J0ZWQgZG1hYnVmcyBoYXNoIHRhYmxlICovCisjZGVmaW5lIE1BWF9F TlRSWV9JTVBPUlRFRCA3CisKK3N0cnVjdCBsaXN0X2VudHJ5X2V4cG9ydGVkIHsKKwlzdHJ1Y3Qg ZXhwb3J0ZWRfc2d0X2luZm8gKmV4cG9ydGVkOworCXN0cnVjdCBobGlzdF9ub2RlIG5vZGU7Cit9 OworCitzdHJ1Y3QgbGlzdF9lbnRyeV9pbXBvcnRlZCB7CisJc3RydWN0IGltcG9ydGVkX3NndF9p bmZvICppbXBvcnRlZDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSBub2RlOworfTsKKworaW50IGh5cGVy X2RtYWJ1Zl90YWJsZV9pbml0KHZvaWQpOworCitpbnQgaHlwZXJfZG1hYnVmX3RhYmxlX2Rlc3Ry b3kodm9pZCk7CisKK2ludCBoeXBlcl9kbWFidWZfcmVnaXN0ZXJfZXhwb3J0ZWQoc3RydWN0IGV4 cG9ydGVkX3NndF9pbmZvICppbmZvKTsKKworLyogc2VhcmNoIGZvciBwcmUtZXhwb3J0ZWQgc2d0 IGFuZCByZXR1cm4gaWQgb2YgaXQgaWYgaXQgZXhpc3QgKi8KK2h5cGVyX2RtYWJ1Zl9pZF90IGh5 cGVyX2RtYWJ1Zl9maW5kX2hpZF9leHBvcnRlZChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLAorCQkJ CQkJIGludCBkb21pZCk7CisKK2ludCBoeXBlcl9kbWFidWZfcmVnaXN0ZXJfaW1wb3J0ZWQoc3Ry dWN0IGltcG9ydGVkX3NndF9pbmZvICppbmZvKTsKKworc3RydWN0IGV4cG9ydGVkX3NndF9pbmZv ICpoeXBlcl9kbWFidWZfZmluZF9leHBvcnRlZChoeXBlcl9kbWFidWZfaWRfdCBoaWQpOworCitz dHJ1Y3QgaW1wb3J0ZWRfc2d0X2luZm8gKmh5cGVyX2RtYWJ1Zl9maW5kX2ltcG9ydGVkKGh5cGVy X2RtYWJ1Zl9pZF90IGhpZCk7CisKK2ludCBoeXBlcl9kbWFidWZfcmVtb3ZlX2V4cG9ydGVkKGh5 cGVyX2RtYWJ1Zl9pZF90IGhpZCk7CisKK2ludCBoeXBlcl9kbWFidWZfcmVtb3ZlX2ltcG9ydGVk KGh5cGVyX2RtYWJ1Zl9pZF90IGhpZCk7CisKK3ZvaWQgaHlwZXJfZG1hYnVmX2ZvcmVhY2hfZXhw b3J0ZWQodm9pZCAoKmZ1bmMpKHN0cnVjdCBleHBvcnRlZF9zZ3RfaW5mbyAqLAorCQkJCSAgIHZv aWQgKmF0dHIpLCB2b2lkICphdHRyKTsKKworaW50IGh5cGVyX2RtYWJ1Zl9yZWdpc3Rlcl9zeXNm cyhzdHJ1Y3QgZGV2aWNlICpkZXYpOworaW50IGh5cGVyX2RtYWJ1Zl91bnJlZ2lzdGVyX3N5c2Zz KHN0cnVjdCBkZXZpY2UgKmRldik7CisKKyNlbmRpZiAvKiBfX0hZUEVSX0RNQUJVRl9MSVNUX0hf XyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFi dWZfbXNnLmMgYi9kcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9tc2cu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjEyOWIyZmYyYWYyYgot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvaHlwZXJfZG1h YnVmX21zZy5jCkBAIC0wLDAgKzEsMzIwIEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTggSW50 ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVl IG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNv ZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUi KSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1 ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2Rp ZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNl bGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20g dGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZv bGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFu ZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFw aCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9u cyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAi QVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBM SUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNI QU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05J TkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJ R0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAq IExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RI RVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRI RSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdB UkUuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChNSVQgT1IgR1BMLTIuMCkKKyAq CisgKiBBdXRob3JzOgorICogICAgRG9uZ3dvbiBLaW0gPGRvbmd3b24ua2ltQGludGVsLmNvbT4K KyAqICAgIE1hdGV1c3ogUG9scm9sYSA8bWF0ZXVzengucG90cm9sYUBpbnRlbC5jb20+CisgKgor ICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5o PgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4K KyNpbmNsdWRlICJoeXBlcl9kbWFidWZfZHJ2LmgiCisjaW5jbHVkZSAiaHlwZXJfZG1hYnVmX21z Zy5oIgorI2luY2x1ZGUgImh5cGVyX2RtYWJ1Zl9saXN0LmgiCisKK3N0cnVjdCBjbWRfcHJvY2Vz cyB7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisJc3RydWN0IGh5cGVyX2RtYWJ1Zl9yZXEg KnJxOworCWludCBkb21pZDsKK307CisKK3ZvaWQgaHlwZXJfZG1hYnVmX2NyZWF0ZV9yZXEoc3Ry dWN0IGh5cGVyX2RtYWJ1Zl9yZXEgKnJlcSwKKwkJCSAgICAgZW51bSBoeXBlcl9kbWFidWZfY29t bWFuZCBjbWQsIGludCAqb3ApCit7CisJaW50IGk7CisKKwlyZXEtPnN0YXQgPSBIWVBFUl9ETUFC VUZfUkVRX05PVF9SRVNQT05ERUQ7CisJcmVxLT5jbWQgPSBjbWQ7CisKKwlzd2l0Y2ggKGNtZCkg eworCS8qIGFzIGV4cG9ydGVyLCBjb21tYW5kcyB0byBpbXBvcnRlciAqLworCWNhc2UgSFlQRVJf RE1BQlVGX0VYUE9SVDoKKwkJLyogZXhwb3J0aW5nIHBhZ2VzIGZvciBkbWFidWYgKi8KKwkJLyog Y29tbWFuZCA6IEhZUEVSX0RNQUJVRl9FWFBPUlQsCisJCSAqIG9wMH5vcDMgOiBoeXBlcl9kbWFi dWZfaWQKKwkJICogb3A0IDogbnVtYmVyIG9mIHBhZ2VzIHRvIGJlIHNoYXJlZAorCQkgKiBvcDUg OiBvZmZzZXQgb2YgZGF0YSBpbiB0aGUgZmlyc3QgcGFnZQorCQkgKiBvcDYgOiBsZW5ndGggb2Yg ZGF0YSBpbiB0aGUgbGFzdCBwYWdlCisJCSAqIG9wNyA6IHRvcC1sZXZlbCByZWZlcmVuY2UgbnVt YmVyIGZvciBzaGFyZWQgcGFnZXMKKwkJICovCisKKwkJbWVtY3B5KCZyZXEtPm9wWzBdLCAmb3Bb MF0sIDggKiBzaXplb2YoaW50KSArIG9wWzhdKTsKKwkJYnJlYWs7CisKKwljYXNlIEhZUEVSX0RN QUJVRl9OT1RJRllfVU5FWFBPUlQ6CisJCS8qIGRlc3Ryb3kgc2dfbGlzdCBmb3IgaHlwZXJfZG1h YnVmX2lkIG9uIHJlbW90ZSBzaWRlICovCisJCS8qIGNvbW1hbmQgOiBETUFCVUZfREVTVFJPWSwK KwkJICogb3Awfm9wMyA6IGh5cGVyX2RtYWJ1Zl9pZF90IGhpZAorCQkgKi8KKworCQlmb3IgKGkg PSAwOyBpIDwgNDsgaSsrKQorCQkJcmVxLT5vcFtpXSA9IG9wW2ldOworCQlicmVhazsKKworCWNh c2UgSFlQRVJfRE1BQlVGX0VYUE9SVF9GRDoKKwljYXNlIEhZUEVSX0RNQUJVRl9FWFBPUlRfRkRf RkFJTEVEOgorCQkvKiBkbWFidWYgZmQgaXMgYmVpbmcgY3JlYXRlZCBvbiBpbXBvcnRlZCBzaWRl IG9yIGltcG9ydGluZworCQkgKiBmYWlsZWQKKwkJICoKKwkJICogY29tbWFuZCA6IEhZUEVSX0RN QUJVRl9FWFBPUlRfRkQgb3IKKwkJICoJICAgICBIWVBFUl9ETUFCVUZfRVhQT1JUX0ZEX0ZBSUxF RCwKKwkJICogb3Awfm9wMyA6IGh5cGVyX2RtYWJ1Zl9pZAorCQkgKi8KKworCQlmb3IgKGkgPSAw OyBpIDwgNDsgaSsrKQorCQkJcmVxLT5vcFtpXSA9IG9wW2ldOworCQlicmVhazsKKworCWRlZmF1 bHQ6CisJCS8qIG5vIGNvbW1hbmQgZm91bmQgKi8KKwkJcmV0dXJuOworCX0KK30KKworc3RhdGlj IHZvaWQgY21kX3Byb2Nlc3Nfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3Ry dWN0IGltcG9ydGVkX3NndF9pbmZvICppbXBvcnRlZDsKKwlzdHJ1Y3QgY21kX3Byb2Nlc3MgKnBy b2MgPSBjb250YWluZXJfb2Yod29yaywKKwkJCQkJCXN0cnVjdCBjbWRfcHJvY2Vzcywgd29yayk7 CisJc3RydWN0IGh5cGVyX2RtYWJ1Zl9yZXEgKnJlcTsKKwlpbnQgZG9taWQ7CisJaW50IGk7CisK KwlyZXEgPSBwcm9jLT5ycTsKKwlkb21pZCA9IHByb2MtPmRvbWlkOworCisJc3dpdGNoIChyZXEt PmNtZCkgeworCWNhc2UgSFlQRVJfRE1BQlVGX0VYUE9SVDoKKwkJLyogZXhwb3J0aW5nIHBhZ2Vz IGZvciBkbWFidWYgKi8KKwkJLyogY29tbWFuZCA6IEhZUEVSX0RNQUJVRl9FWFBPUlQsCisJCSAq IG9wMH5vcDMgOiBoeXBlcl9kbWFidWZfaWQKKwkJICogb3A0IDogbnVtYmVyIG9mIHBhZ2VzIHRv IGJlIHNoYXJlZAorCQkgKiBvcDUgOiBvZmZzZXQgb2YgZGF0YSBpbiB0aGUgZmlyc3QgcGFnZQor CQkgKiBvcDYgOiBsZW5ndGggb2YgZGF0YSBpbiB0aGUgbGFzdCBwYWdlCisJCSAqIG9wNyA6IHRv cC1sZXZlbCByZWZlcmVuY2UgbnVtYmVyIGZvciBzaGFyZWQgcGFnZXMKKwkJICovCisKKwkJLyog aWYgbmVudHMgPT0gMCwgaXQgbWVhbnMgaXQgaXMgYSBtZXNzYWdlIG9ubHkgZm9yCisJCSAqIHBy aXYgc3luY2hyb25pemF0aW9uLiBmb3IgZXhpc3RpbmcgaW1wb3J0ZWRfc2d0X2luZm8KKwkJICog c28gbm90IGNyZWF0aW5nIGEgbmV3IG9uZQorCQkgKi8KKwkJaWYgKHJlcS0+b3BbNF0gPT0gMCkg eworCQkJaHlwZXJfZG1hYnVmX2lkX3QgZXhpc3QgPSB7cmVxLT5vcFswXSwKKwkJCQkJCSAgIHty ZXEtPm9wWzFdLCByZXEtPm9wWzJdLAorCQkJCQkJICAgcmVxLT5vcFszXSB9IH07CisKKwkJCWlt cG9ydGVkID0gaHlwZXJfZG1hYnVmX2ZpbmRfaW1wb3J0ZWQoZXhpc3QpOworCisJCQlpZiAoIWlt cG9ydGVkKSB7CisJCQkJZGV2X2VycihoeV9kcnZfcHJpdi0+ZGV2LAorCQkJCQkiQ2FuJ3QgZmlu ZCBpbXBvcnRlZCBzZ3RfaW5mb1xuIik7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWJyZWFrOwor CQl9CisKKwkJaW1wb3J0ZWQgPSBrY2FsbG9jKDEsIHNpemVvZigqaW1wb3J0ZWQpLCBHRlBfS0VS TkVMKTsKKworCQlpZiAoIWltcG9ydGVkKQorCQkJYnJlYWs7CisKKwkJaW1wb3J0ZWQtPmhpZC5p ZCA9IHJlcS0+b3BbMF07CisKKwkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwkJCWltcG9ydGVk LT5oaWQucm5nX2tleVtpXSA9IHJlcS0+b3BbaSsxXTsKKworCQlpbXBvcnRlZC0+bmVudHMgPSBy ZXEtPm9wWzRdOworCQlpbXBvcnRlZC0+ZnJzdF9vZnN0ID0gcmVxLT5vcFs1XTsKKwkJaW1wb3J0 ZWQtPmxhc3RfbGVuID0gcmVxLT5vcFs2XTsKKwkJaW1wb3J0ZWQtPnJlZl9oYW5kbGUgPSByZXEt Pm9wWzddOworCisJCWRldl9kYmcoaHlfZHJ2X3ByaXYtPmRldiwgIkRNQUJVRiB3YXMgZXhwb3J0 ZWRcbiIpOworCQlkZXZfZGJnKGh5X2Rydl9wcml2LT5kZXYsICJcdGhpZHtpZDolZCBrZXk6JWQg JWQgJWR9XG4iLAorCQkJcmVxLT5vcFswXSwgcmVxLT5vcFsxXSwgcmVxLT5vcFsyXSwKKwkJCXJl cS0+b3BbM10pOworCQlkZXZfZGJnKGh5X2Rydl9wcml2LT5kZXYsICJcdG5lbnRzICVkXG4iLCBy ZXEtPm9wWzRdKTsKKwkJZGV2X2RiZyhoeV9kcnZfcHJpdi0+ZGV2LCAiXHRmaXJzdCBvZmZzZXQg JWRcbiIsIHJlcS0+b3BbNV0pOworCQlkZXZfZGJnKGh5X2Rydl9wcml2LT5kZXYsICJcdGxhc3Qg bGVuICVkXG4iLCByZXEtPm9wWzZdKTsKKwkJZGV2X2RiZyhoeV9kcnZfcHJpdi0+ZGV2LCAiXHRn cmVmaWQgJWRcbiIsIHJlcS0+b3BbN10pOworCisJCWltcG9ydGVkLT52YWxpZCA9IHRydWU7CisJ CWh5cGVyX2RtYWJ1Zl9yZWdpc3Rlcl9pbXBvcnRlZChpbXBvcnRlZCk7CisKKwkJYnJlYWs7CisK KwlkZWZhdWx0OgorCQkvKiBzaG91bGRuJ3QgZ2V0IGhlcmUgKi8KKwkJYnJlYWs7CisJfQorCisJ a2ZyZWUocmVxKTsKKwlrZnJlZShwcm9jKTsKK30KKworaW50IGh5cGVyX2RtYWJ1Zl9tc2dfcGFy c2UoaW50IGRvbWlkLCBzdHJ1Y3QgaHlwZXJfZG1hYnVmX3JlcSAqcmVxKQoreworCXN0cnVjdCBj bWRfcHJvY2VzcyAqcHJvYzsKKwlzdHJ1Y3QgaHlwZXJfZG1hYnVmX3JlcSAqdGVtcF9yZXE7CisJ c3RydWN0IGltcG9ydGVkX3NndF9pbmZvICppbXBvcnRlZDsKKwlzdHJ1Y3QgZXhwb3J0ZWRfc2d0 X2luZm8gKmV4cG9ydGVkOworCWh5cGVyX2RtYWJ1Zl9pZF90IGhpZDsKKworCWlmICghcmVxKSB7 CisJCWRldl9lcnIoaHlfZHJ2X3ByaXYtPmRldiwgInJlcXVlc3QgaXMgTlVMTFxuIik7CisJCXJl dHVybiAtRUlOVkFMOworCX0KKworCWhpZC5pZCA9IHJlcS0+b3BbMF07CisJaGlkLnJuZ19rZXlb MF0gPSByZXEtPm9wWzFdOworCWhpZC5ybmdfa2V5WzFdID0gcmVxLT5vcFsyXTsKKwloaWQucm5n X2tleVsyXSA9IHJlcS0+b3BbM107CisKKwlpZiAoKHJlcS0+Y21kIDwgSFlQRVJfRE1BQlVGX0VY UE9SVCkgfHwKKwkJKHJlcS0+Y21kID4gSFlQRVJfRE1BQlVGX05PVElGWV9VTkVYUE9SVCkpIHsK KwkJZGV2X2VycihoeV9kcnZfcHJpdi0+ZGV2LCAiaW52YWxpZCBjb21tYW5kXG4iKTsKKwkJcmV0 dXJuIC1FSU5WQUw7CisJfQorCisJcmVxLT5zdGF0ID0gSFlQRVJfRE1BQlVGX1JFUV9QUk9DRVNT RUQ7CisKKwkvKiBIWVBFUl9ETUFCVUZfREVTVFJPWSByZXF1aXJlcyBpbW1lZGlhdGUKKwkgKiBm b2xsb3cgdXAgc28gY2FuJ3QgYmUgcHJvY2Vzc2VkIGluIHdvcmtxdWV1ZQorCSAqLworCWlmIChy ZXEtPmNtZCA9PSBIWVBFUl9ETUFCVUZfTk9USUZZX1VORVhQT1JUKSB7CisJCS8qIGRlc3Ryb3kg c2dfbGlzdCBmb3IgaHlwZXJfZG1hYnVmX2lkIG9uIHJlbW90ZSBzaWRlICovCisJCS8qIGNvbW1h bmQgOiBIWVBFUl9ETUFCVUZfTk9USUZZX1VORVhQT1JULAorCQkgKiBvcDB+MyA6IGh5cGVyX2Rt YWJ1Zl9pZAorCQkgKi8KKwkJZGV2X2RiZyhoeV9kcnZfcHJpdi0+ZGV2LAorCQkJInByb2Nlc3Np bmcgSFlQRVJfRE1BQlVGX05PVElGWV9VTkVYUE9SVFxuIik7CisKKwkJaW1wb3J0ZWQgPSBoeXBl cl9kbWFidWZfZmluZF9pbXBvcnRlZChoaWQpOworCisJCWlmIChpbXBvcnRlZCkgeworCQkJLyog aWYgYW55dGhpbmcgaXMgc3RpbGwgdXNpbmcgZG1hX2J1ZiAqLworCQkJaWYgKGltcG9ydGVkLT5p bXBvcnRlcnMpIHsKKwkJCQkvKiBCdWZmZXIgaXMgc3RpbGwgaW4gIHVzZSwganVzdCBtYXJrIHRo YXQKKwkJCQkgKiBpdCBzaG91bGQgbm90IGJlIGFsbG93ZWQgdG8gZXhwb3J0IGl0cyBmZAorCQkJ CSAqIGFueW1vcmUuCisJCQkJICovCisJCQkJaW1wb3J0ZWQtPnZhbGlkID0gZmFsc2U7CisJCQl9 IGVsc2UgeworCQkJCS8qIE5vIG9uZSBpcyB1c2luZyBidWZmZXIsIHJlbW92ZSBpdCBmcm9tCisJ CQkJICogaW1wb3J0ZWQgbGlzdAorCQkJCSAqLworCQkJCWh5cGVyX2RtYWJ1Zl9yZW1vdmVfaW1w b3J0ZWQoaGlkKTsKKwkJCQlrZnJlZShpbXBvcnRlZCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQly ZXEtPnN0YXQgPSBIWVBFUl9ETUFCVUZfUkVRX0VSUk9SOworCQl9CisKKwkJcmV0dXJuIHJlcS0+ Y21kOworCX0KKworCS8qIHN5bmNocm9ub3VzIGRtYV9idWZfZmQgZXhwb3J0ICovCisJaWYgKHJl cS0+Y21kID09IEhZUEVSX0RNQUJVRl9FWFBPUlRfRkQpIHsKKwkJLyogZmluZCBhIGNvcnJlc3Bv bmRpbmcgU0dUIGZvciB0aGUgaWQgKi8KKwkJZGV2X2RiZyhoeV9kcnZfcHJpdi0+ZGV2LAorCQkJ IkhZUEVSX0RNQUJVRl9FWFBPUlRfRkQgZm9yIHtpZDolZCBrZXk6JWQgJWQgJWR9XG4iLAorCQkJ aGlkLmlkLCBoaWQucm5nX2tleVswXSwgaGlkLnJuZ19rZXlbMV0sIGhpZC5ybmdfa2V5WzJdKTsK KworCQlleHBvcnRlZCA9IGh5cGVyX2RtYWJ1Zl9maW5kX2V4cG9ydGVkKGhpZCk7CisKKwkJaWYg KCFleHBvcnRlZCkgeworCQkJZGV2X2VycihoeV9kcnZfcHJpdi0+ZGV2LAorCQkJCSJidWZmZXIg e2lkOiVkIGtleTolZCAlZCAlZH0gbm90IGZvdW5kXG4iLAorCQkJCWhpZC5pZCwgaGlkLnJuZ19r ZXlbMF0sIGhpZC5ybmdfa2V5WzFdLAorCQkJCWhpZC5ybmdfa2V5WzJdKTsKKworCQkJcmVxLT5z dGF0ID0gSFlQRVJfRE1BQlVGX1JFUV9FUlJPUjsKKwkJfSBlbHNlIGlmICghZXhwb3J0ZWQtPnZh bGlkKSB7CisJCQlkZXZfZGJnKGh5X2Rydl9wcml2LT5kZXYsCisJCQkJIkJ1ZmZlciBubyBsb25n ZXIgdmFsaWQge2lkOiVkIGtleTolZCAlZCAlZH1cbiIsCisJCQkJaGlkLmlkLCBoaWQucm5nX2tl eVswXSwgaGlkLnJuZ19rZXlbMV0sCisJCQkJaGlkLnJuZ19rZXlbMl0pOworCisJCQlyZXEtPnN0 YXQgPSBIWVBFUl9ETUFCVUZfUkVRX0VSUk9SOworCQl9IGVsc2UgeworCQkJZGV2X2RiZyhoeV9k cnZfcHJpdi0+ZGV2LAorCQkJCSJCdWZmZXIgc3RpbGwgdmFsaWQge2lkOiVkIGtleTolZCAlZCAl ZH1cbiIsCisJCQkJaGlkLmlkLCBoaWQucm5nX2tleVswXSwgaGlkLnJuZ19rZXlbMV0sCisJCQkJ aGlkLnJuZ19rZXlbMl0pOworCisJCQlleHBvcnRlZC0+YWN0aXZlKys7CisJCQlyZXEtPnN0YXQg PSBIWVBFUl9ETUFCVUZfUkVRX1BST0NFU1NFRDsKKwkJfQorCQlyZXR1cm4gcmVxLT5jbWQ7CisJ fQorCisJaWYgKHJlcS0+Y21kID09IEhZUEVSX0RNQUJVRl9FWFBPUlRfRkRfRkFJTEVEKSB7CisJ CWRldl9kYmcoaHlfZHJ2X3ByaXYtPmRldiwKKwkJCSJIWVBFUl9ETUFCVUZfRVhQT1JUX0ZEX0ZB SUxFRCBmb3Ige2lkOiVkIGtleTolZCAlZCAlZH1cbiIsCisJCQloaWQuaWQsIGhpZC5ybmdfa2V5 WzBdLCBoaWQucm5nX2tleVsxXSwgaGlkLnJuZ19rZXlbMl0pOworCisJCWV4cG9ydGVkID0gaHlw ZXJfZG1hYnVmX2ZpbmRfZXhwb3J0ZWQoaGlkKTsKKworCQlpZiAoIWV4cG9ydGVkKSB7CisJCQlk ZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYsCisJCQkJImJ1ZmZlciB7aWQ6JWQga2V5OiVkICVkICVk fSBub3QgZm91bmRcbiIsCisJCQkJaGlkLmlkLCBoaWQucm5nX2tleVswXSwgaGlkLnJuZ19rZXlb MV0sCisJCQkJaGlkLnJuZ19rZXlbMl0pOworCisJCQlyZXEtPnN0YXQgPSBIWVBFUl9ETUFCVUZf UkVRX0VSUk9SOworCQl9IGVsc2UgeworCQkJZXhwb3J0ZWQtPmFjdGl2ZS0tOworCQkJcmVxLT5z dGF0ID0gSFlQRVJfRE1BQlVGX1JFUV9QUk9DRVNTRUQ7CisJCX0KKwkJcmV0dXJuIHJlcS0+Y21k OworCX0KKworCWRldl9kYmcoaHlfZHJ2X3ByaXYtPmRldiwKKwkJIiVzOiBwdXR0aW5nIHJlcXVl c3QgdG8gd29ya3F1ZXVlXG4iLCBfX2Z1bmNfXyk7CisJdGVtcF9yZXEgPSBrbWFsbG9jKHNpemVv ZigqdGVtcF9yZXEpLCBHRlBfS0VSTkVMKTsKKworCWlmICghdGVtcF9yZXEpCisJCXJldHVybiAt RU5PTUVNOworCisJbWVtY3B5KHRlbXBfcmVxLCByZXEsIHNpemVvZigqdGVtcF9yZXEpKTsKKwor CXByb2MgPSBrY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgY21kX3Byb2Nlc3MpLCBHRlBfS0VSTkVM KTsKKworCWlmICghcHJvYykgeworCQlrZnJlZSh0ZW1wX3JlcSk7CisJCXJldHVybiAtRU5PTUVN OworCX0KKworCXByb2MtPnJxID0gdGVtcF9yZXE7CisJcHJvYy0+ZG9taWQgPSBkb21pZDsKKwor CUlOSVRfV09SSygmKHByb2MtPndvcmspLCBjbWRfcHJvY2Vzc193b3JrKTsKKworCXF1ZXVlX3dv cmsoaHlfZHJ2X3ByaXYtPndvcmtfcXVldWUsICYocHJvYy0+d29yaykpOworCisJcmV0dXJuIHJl cS0+Y21kOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9oeXBl cl9kbWFidWZfbXNnLmggYi9kcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1 Zl9tc2cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjU5ZjE1Mjhl OWIxZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvaHlw ZXJfZG1hYnVmX21zZy5oCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAx OCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQs IGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRo aXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0 d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwg aW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHks IG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQv b3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8g d2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3Rp Y2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFy YWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBv cnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJ REVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAq IElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5E IE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBD T1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhF UgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBP UiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJ VEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBT T0ZUV0FSRS4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKE1JVCBPUiBHUEwtMi4w KQorICoKKyAqLworCisjaWZuZGVmIF9fSFlQRVJfRE1BQlVGX01TR19IX18KKyNkZWZpbmUgX19I WVBFUl9ETUFCVUZfTVNHX0hfXworCisjZGVmaW5lIE1BWF9OVU1CRVJfT0ZfT1BFUkFORFMgOAor CitzdHJ1Y3QgaHlwZXJfZG1hYnVmX3JlcSB7CisJdW5zaWduZWQgaW50IHJlcV9pZDsKKwl1bnNp Z25lZCBpbnQgc3RhdDsKKwl1bnNpZ25lZCBpbnQgY21kOworCXVuc2lnbmVkIGludCBvcFtNQVhf TlVNQkVSX09GX09QRVJBTkRTXTsKK307CisKK3N0cnVjdCBoeXBlcl9kbWFidWZfcmVzcCB7CisJ dW5zaWduZWQgaW50IHJlc3BfaWQ7CisJdW5zaWduZWQgaW50IHN0YXQ7CisJdW5zaWduZWQgaW50 IGNtZDsKKwl1bnNpZ25lZCBpbnQgb3BbTUFYX05VTUJFUl9PRl9PUEVSQU5EU107Cit9OworCitl bnVtIGh5cGVyX2RtYWJ1Zl9jb21tYW5kIHsKKwlIWVBFUl9ETUFCVUZfRVhQT1JUID0gMHgxMCwK KwlIWVBFUl9ETUFCVUZfRVhQT1JUX0ZELAorCUhZUEVSX0RNQUJVRl9FWFBPUlRfRkRfRkFJTEVE LAorCUhZUEVSX0RNQUJVRl9OT1RJRllfVU5FWFBPUlQsCit9OworCitlbnVtIGh5cGVyX2RtYWJ1 Zl9vcHMgeworCUhZUEVSX0RNQUJVRl9PUFNfQVRUQUNIID0gMHgxMDAwLAorCUhZUEVSX0RNQUJV Rl9PUFNfREVUQUNILAorCUhZUEVSX0RNQUJVRl9PUFNfTUFQLAorCUhZUEVSX0RNQUJVRl9PUFNf VU5NQVAsCisJSFlQRVJfRE1BQlVGX09QU19SRUxFQVNFLAorCUhZUEVSX0RNQUJVRl9PUFNfQkVH SU5fQ1BVX0FDQ0VTUywKKwlIWVBFUl9ETUFCVUZfT1BTX0VORF9DUFVfQUNDRVNTLAorCUhZUEVS X0RNQUJVRl9PUFNfS01BUF9BVE9NSUMsCisJSFlQRVJfRE1BQlVGX09QU19LVU5NQVBfQVRPTUlD LAorCUhZUEVSX0RNQUJVRl9PUFNfS01BUCwKKwlIWVBFUl9ETUFCVUZfT1BTX0tVTk1BUCwKKwlI WVBFUl9ETUFCVUZfT1BTX01NQVAsCisJSFlQRVJfRE1BQlVGX09QU19WTUFQLAorCUhZUEVSX0RN QUJVRl9PUFNfVlVOTUFQLAorfTsKKworZW51bSBoeXBlcl9kbWFidWZfcmVxX2ZlZWRiYWNrIHsK KwlIWVBFUl9ETUFCVUZfUkVRX1BST0NFU1NFRCA9IDB4MTAwLAorCUhZUEVSX0RNQUJVRl9SRVFf TkVFRFNfRk9MTE9XX1VQLAorCUhZUEVSX0RNQUJVRl9SRVFfRVJST1IsCisJSFlQRVJfRE1BQlVG X1JFUV9OT1RfUkVTUE9OREVECit9OworCisvKiBjcmVhdGUgYSByZXF1ZXN0IHBhY2tldCB3aXRo IGdpdmVuIGNvbW1hbmQgYW5kIG9wZXJhbmRzICovCit2b2lkIGh5cGVyX2RtYWJ1Zl9jcmVhdGVf cmVxKHN0cnVjdCBoeXBlcl9kbWFidWZfcmVxICpyZXEsCisJCQkJIGVudW0gaHlwZXJfZG1hYnVm X2NvbW1hbmQgY29tbWFuZCwKKwkJCQkgaW50ICpvcGVyYW5kcyk7CisKKy8qIHBhcnNlIGluY29t aW5nIHJlcXVlc3QgcGFja2V0IChvciByZXNwb25zZSkgYW5kIHRha2UKKyAqIGFwcHJvcHJpYXRl IGFjdGlvbnMgZm9yIHRob3NlCisgKi8KK2ludCBoeXBlcl9kbWFidWZfbXNnX3BhcnNlKGludCBk b21pZCwgc3RydWN0IGh5cGVyX2RtYWJ1Zl9yZXEgKnJlcSk7CisKKyNlbmRpZiAvLyBfX0hZUEVS X0RNQUJVRl9NU0dfSF9fCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVm L2h5cGVyX2RtYWJ1Zl9vcHMuYyBiL2RyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvaHlwZXJf ZG1hYnVmX29wcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYjRk M2MyY2FhZDczCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1 Zi9oeXBlcl9kbWFidWZfb3BzLmMKQEAgLTAsMCArMSwyNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQg wqkgMjAxOCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdy YW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5 IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhl ICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmlj dGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2Us IGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisg KiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNv bnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVj dCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdo dCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAor ICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50 aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElT IFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Mg T1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJ RVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9S UyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBP UiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwg VE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNU SU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElO IFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKE1JVCBPUiBH UEwtMi4wKQorICoKKyAqIEF1dGhvcnM6CisgKiAgICBEb25nd29uIEtpbSA8ZG9uZ3dvbi5raW1A aW50ZWwuY29tPgorICogICAgTWF0ZXVzeiBQb2xyb2xhIDxtYXRldXN6eC5wb3Ryb2xhQGludGVs LmNvbT4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxp bnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2Rt YS1idWYuaD4KKyNpbmNsdWRlICJoeXBlcl9kbWFidWZfZHJ2LmgiCisjaW5jbHVkZSAiaHlwZXJf ZG1hYnVmX3N0cnVjdC5oIgorI2luY2x1ZGUgImh5cGVyX2RtYWJ1Zl9vcHMuaCIKKyNpbmNsdWRl ICJoeXBlcl9kbWFidWZfc2dsX3Byb2MuaCIKKyNpbmNsdWRlICJoeXBlcl9kbWFidWZfaWQuaCIK KyNpbmNsdWRlICJoeXBlcl9kbWFidWZfbXNnLmgiCisjaW5jbHVkZSAiaHlwZXJfZG1hYnVmX2xp c3QuaCIKKworI2RlZmluZSBXQUlUX0FGVEVSX1NZTkNfUkVRIDAKKyNkZWZpbmUgUkVGU19QRVJf UEFHRSAoUEFHRV9TSVpFL3NpemVvZihncmFudF9yZWZfdCkpCisKK3N0YXRpYyBpbnQgZG1hYnVm X3JlZmNvdW50KHN0cnVjdCBkbWFfYnVmICpkbWFfYnVmKQoreworCWlmICgoZG1hX2J1ZiAhPSBO VUxMKSAmJiAoZG1hX2J1Zi0+ZmlsZSAhPSBOVUxMKSkKKwkJcmV0dXJuIGZpbGVfY291bnQoZG1h X2J1Zi0+ZmlsZSk7CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBoeXBlcl9k bWFidWZfb3BzX2F0dGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLAorCQkJCSAgIHN0cnVjdCBk ZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpCit7 CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGh5cGVyX2RtYWJ1Zl9vcHNfZGV0YWNoKHN0 cnVjdCBkbWFfYnVmICpkbWFidWYsCisJCQkJICAgIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQg KmF0dGFjaCkKK3sKK30KKworc3RhdGljIHN0cnVjdCBzZ190YWJsZSAqaHlwZXJfZG1hYnVmX29w c19tYXAoCisJCQkJc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNobWVudCwKKwkJCQll bnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7CisJc3RydWN0IHNnX3RhYmxlICpzdDsKKwlz dHJ1Y3QgaW1wb3J0ZWRfc2d0X2luZm8gKmltcG9ydGVkOworCXN0cnVjdCBwYWdlc19pbmZvICpw Z19pbmZvOworCisJaWYgKCFhdHRhY2htZW50LT5kbWFidWYtPnByaXYpCisJCXJldHVybiBOVUxM OworCisJaW1wb3J0ZWQgPSAoc3RydWN0IGltcG9ydGVkX3NndF9pbmZvICopYXR0YWNobWVudC0+ ZG1hYnVmLT5wcml2OworCisJLyogZXh0cmFjdCBwYWdlcyBmcm9tIHNndCAqLworCXBnX2luZm8g PSBoeXBlcl9kbWFidWZfZXh0X3BncyhpbXBvcnRlZC0+c2d0KTsKKworCWlmICghcGdfaW5mbykK KwkJcmV0dXJuIE5VTEw7CisKKwkvKiBjcmVhdGUgYSBuZXcgc2dfdGFibGUgd2l0aCBleHRyYWN0 ZWQgcGFnZXMgKi8KKwlzdCA9IGh5cGVyX2RtYWJ1Zl9jcmVhdGVfc2d0KHBnX2luZm8tPnBncywg cGdfaW5mby0+ZnJzdF9vZnN0LAorCQkJCSAgICAgcGdfaW5mby0+bGFzdF9sZW4sIHBnX2luZm8t Pm5lbnRzKTsKKwlpZiAoIXN0KQorCQlnb3RvIGVycl9mcmVlX3NnOworCisJaWYgKCFkbWFfbWFw X3NnKGF0dGFjaG1lbnQtPmRldiwgc3QtPnNnbCwgc3QtPm5lbnRzLCBkaXIpKQorCQlnb3RvIGVy cl9mcmVlX3NnOworCisJa2ZyZWUocGdfaW5mby0+cGdzKTsKKwlrZnJlZShwZ19pbmZvKTsKKwor CXJldHVybiBzdDsKKworZXJyX2ZyZWVfc2c6CisJaWYgKHN0KSB7CisJCXNnX2ZyZWVfdGFibGUo c3QpOworCQlrZnJlZShzdCk7CisJfQorCisJa2ZyZWUocGdfaW5mby0+cGdzKTsKKwlrZnJlZShw Z19pbmZvKTsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBoeXBlcl9kbWFidWZf b3BzX3VubWFwKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQsCisJCQkJICAg c3RydWN0IHNnX3RhYmxlICpzZywKKwkJCQkgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIp Cit7CisJc3RydWN0IGltcG9ydGVkX3NndF9pbmZvICppbXBvcnRlZDsKKworCWlmICghYXR0YWNo bWVudC0+ZG1hYnVmLT5wcml2KQorCQlyZXR1cm47CisKKwlpbXBvcnRlZCA9IChzdHJ1Y3QgaW1w b3J0ZWRfc2d0X2luZm8gKilhdHRhY2htZW50LT5kbWFidWYtPnByaXY7CisKKwlkbWFfdW5tYXBf c2coYXR0YWNobWVudC0+ZGV2LCBzZy0+c2dsLCBzZy0+bmVudHMsIGRpcik7CisKKwlzZ19mcmVl X3RhYmxlKHNnKTsKKwlrZnJlZShzZyk7Cit9CisKK3N0YXRpYyB2b2lkIGh5cGVyX2RtYWJ1Zl9v cHNfcmVsZWFzZShzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1ZikKK3sKKwlzdHJ1Y3QgaW1wb3J0ZWRf c2d0X2luZm8gKmltcG9ydGVkOworCXN0cnVjdCBoeXBlcl9kbWFidWZfYmtuZF9vcHMgKmJrbmRf b3BzID0gaHlfZHJ2X3ByaXYtPmJrbmRfb3BzOworCWludCBmaW5pc2g7CisKKwlpZiAoIWRtYV9i dWYtPnByaXYpCisJCXJldHVybjsKKworCWltcG9ydGVkID0gKHN0cnVjdCBpbXBvcnRlZF9zZ3Rf aW5mbyAqKWRtYV9idWYtPnByaXY7CisKKwlpZiAoIWRtYWJ1Zl9yZWZjb3VudChpbXBvcnRlZC0+ ZG1hX2J1ZikpCisJCWltcG9ydGVkLT5kbWFfYnVmID0gTlVMTDsKKworCWltcG9ydGVkLT5pbXBv cnRlcnMtLTsKKworCWlmIChpbXBvcnRlZC0+aW1wb3J0ZXJzID09IDApIHsKKwkJYmtuZF9vcHMt PnVubWFwX3NoYXJlZF9wYWdlcygmaW1wb3J0ZWQtPnJlZnNfaW5mbywKKwkJCQkJICAgICBpbXBv cnRlZC0+bmVudHMpOworCisJCWlmIChpbXBvcnRlZC0+c2d0KSB7CisJCQlzZ19mcmVlX3RhYmxl KGltcG9ydGVkLT5zZ3QpOworCQkJa2ZyZWUoaW1wb3J0ZWQtPnNndCk7CisJCQlpbXBvcnRlZC0+ c2d0ID0gTlVMTDsKKwkJfQorCX0KKworCWZpbmlzaCA9IGltcG9ydGVkICYmICFpbXBvcnRlZC0+ dmFsaWQgJiYKKwkJICFpbXBvcnRlZC0+aW1wb3J0ZXJzOworCisJLyoKKwkgKiBDaGVjayBpZiBi dWZmZXIgaXMgc3RpbGwgdmFsaWQgYW5kIGlmIG5vdCByZW1vdmUgaXQKKwkgKiBmcm9tIGltcG9y dGVkIGxpc3QuIFRoYXQgaGFzIHRvIGJlIGRvbmUgYWZ0ZXIgc2VuZGluZworCSAqIHN5bmMgcmVx dWVzdAorCSAqLworCWlmIChmaW5pc2gpIHsKKwkJaHlwZXJfZG1hYnVmX3JlbW92ZV9pbXBvcnRl ZChpbXBvcnRlZC0+aGlkKTsKKwkJa2ZyZWUoaW1wb3J0ZWQpOworCX0KK30KKworc3RhdGljIGlu dCBoeXBlcl9kbWFidWZfb3BzX2JlZ2luX2NwdV9hY2Nlc3Moc3RydWN0IGRtYV9idWYgKmRtYWJ1 ZiwKKwkJCQkJICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7CisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQgaHlwZXJfZG1hYnVmX29wc19lbmRfY3B1X2FjY2VzcyhzdHJ1Y3Qg ZG1hX2J1ZiAqZG1hYnVmLAorCQkJCQkgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7 CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkICpoeXBlcl9kbWFidWZfb3BzX2ttYXBfYXRv bWljKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsCisJCQkJCSAgdW5zaWduZWQgbG9uZyBwZ251bSkK K3sKKwkvKiBUT0RPOiBOVUxMIGZvciBub3cuIE5lZWQgdG8gcmV0dXJuIHRoZSBhZGRyIG9mIG1h cHBlZCByZWdpb24gKi8KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgaHlwZXJfZG1h YnVmX29wc19rdW5tYXBfYXRvbWljKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsCisJCQkJCSAgIHVu c2lnbmVkIGxvbmcgcGdudW0sIHZvaWQgKnZhZGRyKQoreworfQorCitzdGF0aWMgdm9pZCAqaHlw ZXJfZG1hYnVmX29wc19rbWFwKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIHVuc2lnbmVkIGxvbmcg cGdudW0pCit7CisJLyogZm9yIG5vdyBOVUxMLi4gbmVlZCB0byByZXR1cm4gdGhlIGFkZHJlc3Mg b2YgbWFwcGVkIHJlZ2lvbiAqLworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBoeXBl cl9kbWFidWZfb3BzX2t1bm1hcChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCB1bnNpZ25lZCBsb25n IHBnbnVtLAorCQkJCSAgICB2b2lkICp2YWRkcikKK3sKK30KKworc3RhdGljIGludCBoeXBlcl9k bWFidWZfb3BzX21tYXAoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwKKwkJCQkgc3RydWN0IHZtX2Fy ZWFfc3RydWN0ICp2bWEpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkICpoeXBlcl9k bWFidWZfb3BzX3ZtYXAoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZikKK3sKKwlyZXR1cm4gTlVMTDsK K30KKworc3RhdGljIHZvaWQgaHlwZXJfZG1hYnVmX29wc192dW5tYXAoc3RydWN0IGRtYV9idWYg KmRtYWJ1Ziwgdm9pZCAqdmFkZHIpCit7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZG1hX2J1 Zl9vcHMgaHlwZXJfZG1hYnVmX29wcyA9IHsKKwkuYXR0YWNoID0gaHlwZXJfZG1hYnVmX29wc19h dHRhY2gsCisJLmRldGFjaCA9IGh5cGVyX2RtYWJ1Zl9vcHNfZGV0YWNoLAorCS5tYXBfZG1hX2J1 ZiA9IGh5cGVyX2RtYWJ1Zl9vcHNfbWFwLAorCS51bm1hcF9kbWFfYnVmID0gaHlwZXJfZG1hYnVm X29wc191bm1hcCwKKwkucmVsZWFzZSA9IGh5cGVyX2RtYWJ1Zl9vcHNfcmVsZWFzZSwKKwkuYmVn aW5fY3B1X2FjY2VzcyA9ICh2b2lkICopaHlwZXJfZG1hYnVmX29wc19iZWdpbl9jcHVfYWNjZXNz LAorCS5lbmRfY3B1X2FjY2VzcyA9ICh2b2lkICopaHlwZXJfZG1hYnVmX29wc19lbmRfY3B1X2Fj Y2VzcywKKwkubWFwX2F0b21pYyA9IGh5cGVyX2RtYWJ1Zl9vcHNfa21hcF9hdG9taWMsCisJLnVu bWFwX2F0b21pYyA9IGh5cGVyX2RtYWJ1Zl9vcHNfa3VubWFwX2F0b21pYywKKwkubWFwID0gaHlw ZXJfZG1hYnVmX29wc19rbWFwLAorCS51bm1hcCA9IGh5cGVyX2RtYWJ1Zl9vcHNfa3VubWFwLAor CS5tbWFwID0gaHlwZXJfZG1hYnVmX29wc19tbWFwLAorCS52bWFwID0gaHlwZXJfZG1hYnVmX29w c192bWFwLAorCS52dW5tYXAgPSBoeXBlcl9kbWFidWZfb3BzX3Z1bm1hcCwKK307CisKKy8qIGV4 cG9ydGluZyBkbWFidWYgYXMgZmQgKi8KK2ludCBoeXBlcl9kbWFidWZfZXhwb3J0X2ZkKHN0cnVj dCBpbXBvcnRlZF9zZ3RfaW5mbyAqaW1wb3J0ZWQsIGludCBmbGFncykKK3sKKwlpbnQgZmQgPSAt MTsKKworCS8qIGNhbGwgaHlwZXJfZG1hYnVmX2V4cG9ydF9kbWFidWYgYW5kIGNyZWF0ZQorCSAq IGFuZCBiaW5kIGEgaGFuZGxlIGZvciBpdCB0aGVuIHJlbGVhc2UKKwkgKi8KKwloeXBlcl9kbWFi dWZfZXhwb3J0X2RtYV9idWYoaW1wb3J0ZWQpOworCisJaWYgKGltcG9ydGVkLT5kbWFfYnVmKQor CQlmZCA9IGRtYV9idWZfZmQoaW1wb3J0ZWQtPmRtYV9idWYsIGZsYWdzKTsKKworCXJldHVybiBm ZDsKK30KKwordm9pZCBoeXBlcl9kbWFidWZfZXhwb3J0X2RtYV9idWYoc3RydWN0IGltcG9ydGVk X3NndF9pbmZvICppbXBvcnRlZCkKK3sKKwlERUZJTkVfRE1BX0JVRl9FWFBPUlRfSU5GTyhleHBf aW5mbyk7CisKKwlleHBfaW5mby5vcHMgPSAmaHlwZXJfZG1hYnVmX29wczsKKworCS8qIG11bHRp cGxlIG9mIFBBR0VfU0laRSwgbm90IGNvbnNpZGVyaW5nIG9mZnNldCAqLworCWV4cF9pbmZvLnNp emUgPSBpbXBvcnRlZC0+c2d0LT5uZW50cyAqIFBBR0VfU0laRTsKKwlleHBfaW5mby5mbGFncyA9 IC8qIG5vdCBzdXJlIGFib3V0IGZsYWcgKi8gMDsKKwlleHBfaW5mby5wcml2ID0gaW1wb3J0ZWQ7 CisKKwlpbXBvcnRlZC0+ZG1hX2J1ZiA9IGRtYV9idWZfZXhwb3J0KCZleHBfaW5mbyk7Cit9CmRp ZmYgLS1naXQgYS9kcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9vcHMu aCBiL2RyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX29wcy5oCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYjMwMzY3ZjI4MzZiCi0tLSAvZGV2 L251bGwKKysrIGIvZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfb3Bz LmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE4IEludGVsIENvcnBv cmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFy Z2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBh bmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0 byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0 aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJn ZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGll cyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICog U29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBw ZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxs IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhl CisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwg V0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5D TFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VN RU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xE RVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwg QVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdB UkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoK KyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoTUlUIE9SIEdQTC0yLjApCisgKgorICovCisK KyNpZm5kZWYgX19IWVBFUl9ETUFCVUZfT1BTX0hfXworI2RlZmluZSBfX0hZUEVSX0RNQUJVRl9P UFNfSF9fCisKK2ludCBoeXBlcl9kbWFidWZfZXhwb3J0X2ZkKHN0cnVjdCBpbXBvcnRlZF9zZ3Rf aW5mbyAqaW1wb3J0ZWQsIGludCBmbGFncyk7CisKK3ZvaWQgaHlwZXJfZG1hYnVmX2V4cG9ydF9k bWFfYnVmKHN0cnVjdCBpbXBvcnRlZF9zZ3RfaW5mbyAqaW1wb3J0ZWQpOworCisjZW5kaWYgLyog X19IWVBFUl9ETUFCVUZfSU1QX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL2h5 cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfc2dsX3Byb2MuYyBiL2RyaXZlcnMvZG1hLWJ1Zi9oeXBl cl9kbWFidWYvaHlwZXJfZG1hYnVmX3NnbF9wcm9jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAwLi5kOTJhZTEzZDhhMzAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJz L2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9zZ2xfcHJvYy5jCkBAIC0wLDAgKzEs MjU2IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTggSW50ZWwgQ29ycG9yYXRpb24KKyAqCisg KiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBl cnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVk IGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhl IFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRp b24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBk aXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0 d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBm dXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgor ICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90 aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQg aW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJl LgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJB TlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5P VCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBF VkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxF IEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBG Uk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNF IE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICogU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IChNSVQgT1IgR1BMLTIuMCkKKyAqCisgKiBBdXRob3JzOgorICogICAg RG9uZ3dvbiBLaW0gPGRvbmd3b24ua2ltQGludGVsLmNvbT4KKyAqICAgIE1hdGV1c3ogUG9scm9s YSA8bWF0ZXVzengucG90cm9sYUBpbnRlbC5jb20+CisgKgorICovCisKKyNpbmNsdWRlIDxsaW51 eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3Ns YWIuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtYnVmLmg+CisjaW5jbHVkZSAiaHlwZXJfZG1hYnVm X2Rydi5oIgorI2luY2x1ZGUgImh5cGVyX2RtYWJ1Zl9zdHJ1Y3QuaCIKKyNpbmNsdWRlICJoeXBl cl9kbWFidWZfc2dsX3Byb2MuaCIKKworI2RlZmluZSBSRUZTX1BFUl9QQUdFIChQQUdFX1NJWkUv c2l6ZW9mKGdyYW50X3JlZl90KSkKKworLyogcmV0dXJuIHRvdGFsIG51bWJlciBvZiBwYWdlcyBy ZWZlcmVuY2VkIGJ5IGEgc2d0CisgKiBmb3IgcHJlLWNhbGN1bGF0aW9uIG9mICMgb2YgcGFnZXMg YmVoaW5kIGEgZ2l2ZW4gc2d0CisgKi8KK3N0YXRpYyBpbnQgZ2V0X251bV9wZ3Moc3RydWN0IHNn X3RhYmxlICpzZ3QpCit7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2w7CisJaW50IGxlbmd0aCwg aTsKKwkvKiBhdCBsZWFzdCBvbmUgcGFnZSAqLworCWludCBudW1fcGFnZXMgPSAxOworCisJc2ds ID0gc2d0LT5zZ2w7CisKKwlsZW5ndGggPSBzZ2wtPmxlbmd0aCAtIFBBR0VfU0laRSArIHNnbC0+ b2Zmc2V0OworCisJLyogcm91bmQtdXAgKi8KKwludW1fcGFnZXMgKz0gKChsZW5ndGggKyBQQUdF X1NJWkUgLSAxKS9QQUdFX1NJWkUpOworCisJZm9yIChpID0gMTsgaSA8IHNndC0+bmVudHM7IGkr KykgeworCQlzZ2wgPSBzZ19uZXh0KHNnbCk7CisKKwkJLyogcm91bmQtdXAgKi8KKwkJbnVtX3Bh Z2VzICs9ICgoc2dsLT5sZW5ndGggKyBQQUdFX1NJWkUgLSAxKSAvCisJCQkgICAgIFBBR0VfU0la RSk7IC8qIHJvdW5kLXVwICovCisJfQorCisJcmV0dXJuIG51bV9wYWdlczsKK30KKworLyogZXh0 cmFjdCBwYWdlcyBkaXJlY3RseSBmcm9tIHN0cnVjdCBzZ190YWJsZSAqLworc3RydWN0IHBhZ2Vz X2luZm8gKmh5cGVyX2RtYWJ1Zl9leHRfcGdzKHN0cnVjdCBzZ190YWJsZSAqc2d0KQoreworCXN0 cnVjdCBwYWdlc19pbmZvICpwZ19pbmZvOworCWludCBpLCBqLCBrOworCWludCBsZW5ndGg7CisJ c3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2w7CisKKwlwZ19pbmZvID0ga21hbGxvYyhzaXplb2YoKnBn X2luZm8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBnX2luZm8pCisJCXJldHVybiBOVUxMOworCisJ cGdfaW5mby0+cGdzID0ga21hbGxvY19hcnJheShnZXRfbnVtX3BncyhzZ3QpLAorCQkJCSAgICAg c2l6ZW9mKHN0cnVjdCBwYWdlICopLAorCQkJCSAgICAgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIXBn X2luZm8tPnBncykgeworCQlrZnJlZShwZ19pbmZvKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJ c2dsID0gc2d0LT5zZ2w7CisKKwlwZ19pbmZvLT5uZW50cyA9IDE7CisJcGdfaW5mby0+ZnJzdF9v ZnN0ID0gc2dsLT5vZmZzZXQ7CisJcGdfaW5mby0+cGdzWzBdID0gc2dfcGFnZShzZ2wpOworCWxl bmd0aCA9IHNnbC0+bGVuZ3RoIC0gUEFHRV9TSVpFICsgc2dsLT5vZmZzZXQ7CisJaSA9IDE7CisK Kwl3aGlsZSAobGVuZ3RoID4gMCkgeworCQlwZ19pbmZvLT5wZ3NbaV0gPSBudGhfcGFnZShzZ19w YWdlKHNnbCksIGkpOworCQlsZW5ndGggLT0gUEFHRV9TSVpFOworCQlwZ19pbmZvLT5uZW50cysr OworCQlpKys7CisJfQorCisJZm9yIChqID0gMTsgaiA8IHNndC0+bmVudHM7IGorKykgeworCQlz Z2wgPSBzZ19uZXh0KHNnbCk7CisJCXBnX2luZm8tPnBnc1tpKytdID0gc2dfcGFnZShzZ2wpOwor CQlsZW5ndGggPSBzZ2wtPmxlbmd0aCAtIFBBR0VfU0laRTsKKwkJcGdfaW5mby0+bmVudHMrKzsK KwkJayA9IDE7CisKKwkJd2hpbGUgKGxlbmd0aCA+IDApIHsKKwkJCXBnX2luZm8tPnBnc1tpKytd ID0gbnRoX3BhZ2Uoc2dfcGFnZShzZ2wpLCBrKyspOworCQkJbGVuZ3RoIC09IFBBR0VfU0laRTsK KwkJCXBnX2luZm8tPm5lbnRzKys7CisJCX0KKwl9CisKKwkvKgorCSAqIGxlbmdodCBhdCB0aGF0 IHBvaW50IHdpbGwgYmUgMCBvciBuZWdhdGl2ZSwKKwkgKiBzbyB0byBjYWxjdWxhdGUgbGFzdCBw YWdlIHNpemUganVzdCBhZGQgaXQgdG8gUEFHRV9TSVpFCisJICovCisJcGdfaW5mby0+bGFzdF9s ZW4gPSBQQUdFX1NJWkUgKyBsZW5ndGg7CisKKwlyZXR1cm4gcGdfaW5mbzsKK30KKworLyogY3Jl YXRlIHNnX3RhYmxlIHdpdGggZ2l2ZW4gcGFnZXMgYW5kIG90aGVyIHBhcmFtZXRlcnMgKi8KK3N0 cnVjdCBzZ190YWJsZSAqaHlwZXJfZG1hYnVmX2NyZWF0ZV9zZ3Qoc3RydWN0IHBhZ2UgKipwZ3Ms CisJCQkJCSBpbnQgZnJzdF9vZnN0LCBpbnQgbGFzdF9sZW4sCisJCQkJCSBpbnQgbmVudHMpCit7 CisJc3RydWN0IHNnX3RhYmxlICpzZ3Q7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2w7CisJaW50 IGksIHJldDsKKworCXNndCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzZ190YWJsZSksIEdGUF9L RVJORUwpOworCWlmICghc2d0KQorCQlyZXR1cm4gTlVMTDsKKworCXJldCA9IHNnX2FsbG9jX3Rh YmxlKHNndCwgbmVudHMsIEdGUF9LRVJORUwpOworCWlmIChyZXQpIHsKKwkJaWYgKHNndCkgewor CQkJc2dfZnJlZV90YWJsZShzZ3QpOworCQkJa2ZyZWUoc2d0KTsKKwkJfQorCisJCXJldHVybiBO VUxMOworCX0KKworCXNnbCA9IHNndC0+c2dsOworCisJc2dfc2V0X3BhZ2Uoc2dsLCBwZ3NbMF0s IFBBR0VfU0laRS1mcnN0X29mc3QsIGZyc3Rfb2ZzdCk7CisKKwlmb3IgKGkgPSAxOyBpIDwgbmVu dHMtMTsgaSsrKSB7CisJCXNnbCA9IHNnX25leHQoc2dsKTsKKwkJc2dfc2V0X3BhZ2Uoc2dsLCBw Z3NbaV0sIFBBR0VfU0laRSwgMCk7CisJfQorCisJaWYgKG5lbnRzID4gMSkgLyogbW9yZSB0aGFu IG9uZSBwYWdlICovIHsKKwkJc2dsID0gc2dfbmV4dChzZ2wpOworCQlzZ19zZXRfcGFnZShzZ2ws IHBnc1tpXSwgbGFzdF9sZW4sIDApOworCX0KKworCXJldHVybiBzZ3Q7Cit9CisKK2ludCBoeXBl cl9kbWFidWZfY2xlYW51cF9zZ3RfaW5mbyhzdHJ1Y3QgZXhwb3J0ZWRfc2d0X2luZm8gKmV4cG9y dGVkLAorCQkJCSAgaW50IGZvcmNlKQoreworCXN0cnVjdCBzZ3RfbGlzdCAqc2d0bDsKKwlzdHJ1 Y3QgYXR0YWNobWVudF9saXN0ICphdHRhY2hsOworCXN0cnVjdCBrbWFwX3ZhZGRyX2xpc3QgKnZh X2ttYXBsOworCXN0cnVjdCB2bWFwX3ZhZGRyX2xpc3QgKnZhX3ZtYXBsOworCXN0cnVjdCBoeXBl cl9kbWFidWZfYmtuZF9vcHMgKmJrbmRfb3BzID0gaHlfZHJ2X3ByaXYtPmJrbmRfb3BzOworCisJ aWYgKCFleHBvcnRlZCkgeworCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYsICJpbnZhbGlkIGh5 cGVyX2RtYWJ1Zl9pZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIGlmIGZvcmNl ICE9IDEsIHNndF9pbmZvIGNhbiBiZSByZWxlYXNlZCBvbmx5IGlmCisJICogdGhlcmUncyBubyBh Y3Rpdml0eSBvbiBleHBvcnRlZCBkbWEtYnVmIG9uIGltcG9ydGVyCisJICogc2lkZS4KKwkgKi8K KwlpZiAoIWZvcmNlICYmCisJICAgIGV4cG9ydGVkLT5hY3RpdmUpIHsKKwkJZGV2X3dhcm4oaHlf ZHJ2X3ByaXYtPmRldiwKKwkJCSAiZG1hLWJ1ZiBpcyB1c2VkIGJ5IGltcG9ydGVyXG4iKTsKKwor CQlyZXR1cm4gLUVQRVJNOworCX0KKworCS8qIGZvcmNlID09IDEgaXMgbm90IHJlY29tbWVuZGVk ICovCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZleHBvcnRlZC0+dmFfa21hcHBlZC0+bGlzdCkpIHsK KwkJdmFfa21hcGwgPSBsaXN0X2ZpcnN0X2VudHJ5KCZleHBvcnRlZC0+dmFfa21hcHBlZC0+bGlz dCwKKwkJCQkJICAgIHN0cnVjdCBrbWFwX3ZhZGRyX2xpc3QsIGxpc3QpOworCisJCWRtYV9idWZf a3VubWFwKGV4cG9ydGVkLT5kbWFfYnVmLCAxLCB2YV9rbWFwbC0+dmFkZHIpOworCQlsaXN0X2Rl bCgmdmFfa21hcGwtPmxpc3QpOworCQlrZnJlZSh2YV9rbWFwbCk7CisJfQorCisJd2hpbGUgKCFs aXN0X2VtcHR5KCZleHBvcnRlZC0+dmFfdm1hcHBlZC0+bGlzdCkpIHsKKwkJdmFfdm1hcGwgPSBs aXN0X2ZpcnN0X2VudHJ5KCZleHBvcnRlZC0+dmFfdm1hcHBlZC0+bGlzdCwKKwkJCQkJICAgIHN0 cnVjdCB2bWFwX3ZhZGRyX2xpc3QsIGxpc3QpOworCisJCWRtYV9idWZfdnVubWFwKGV4cG9ydGVk LT5kbWFfYnVmLCB2YV92bWFwbC0+dmFkZHIpOworCQlsaXN0X2RlbCgmdmFfdm1hcGwtPmxpc3Qp OworCQlrZnJlZSh2YV92bWFwbCk7CisJfQorCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZleHBvcnRl ZC0+YWN0aXZlX3NndHMtPmxpc3QpKSB7CisJCWF0dGFjaGwgPSBsaXN0X2ZpcnN0X2VudHJ5KCZl eHBvcnRlZC0+YWN0aXZlX2F0dGFjaGVkLT5saXN0LAorCQkJCQkgICBzdHJ1Y3QgYXR0YWNobWVu dF9saXN0LCBsaXN0KTsKKworCQlzZ3RsID0gbGlzdF9maXJzdF9lbnRyeSgmZXhwb3J0ZWQtPmFj dGl2ZV9zZ3RzLT5saXN0LAorCQkJCQlzdHJ1Y3Qgc2d0X2xpc3QsIGxpc3QpOworCisJCWRtYV9i dWZfdW5tYXBfYXR0YWNobWVudChhdHRhY2hsLT5hdHRhY2gsIHNndGwtPnNndCwKKwkJCQkJIERN QV9CSURJUkVDVElPTkFMKTsKKwkJbGlzdF9kZWwoJnNndGwtPmxpc3QpOworCQlrZnJlZShzZ3Rs KTsKKwl9CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmV4cG9ydGVkLT5hY3RpdmVfc2d0cy0+bGlz dCkpIHsKKwkJYXR0YWNobCA9IGxpc3RfZmlyc3RfZW50cnkoJmV4cG9ydGVkLT5hY3RpdmVfYXR0 YWNoZWQtPmxpc3QsCisJCQkJCSAgIHN0cnVjdCBhdHRhY2htZW50X2xpc3QsIGxpc3QpOworCisJ CWRtYV9idWZfZGV0YWNoKGV4cG9ydGVkLT5kbWFfYnVmLCBhdHRhY2hsLT5hdHRhY2gpOworCQls aXN0X2RlbCgmYXR0YWNobC0+bGlzdCk7CisJCWtmcmVlKGF0dGFjaGwpOworCX0KKworCS8qIFN0 YXJ0IGNsZWFudXAgb2YgYnVmZmVyIGluIHJldmVyc2Ugb3JkZXIgdG8gZXhwb3J0aW5nICovCisJ YmtuZF9vcHMtPnVuc2hhcmVfcGFnZXMoJmV4cG9ydGVkLT5yZWZzX2luZm8sIGV4cG9ydGVkLT5u ZW50cyk7CisKKwkvKiB1bm1hcCBkbWEtYnVmICovCisJZG1hX2J1Zl91bm1hcF9hdHRhY2htZW50 KGV4cG9ydGVkLT5hY3RpdmVfYXR0YWNoZWQtPmF0dGFjaCwKKwkJCQkgZXhwb3J0ZWQtPmFjdGl2 ZV9zZ3RzLT5zZ3QsCisJCQkJIERNQV9CSURJUkVDVElPTkFMKTsKKworCS8qIGRldGF0Y2ggZG1h LWJ1ZiAqLworCWRtYV9idWZfZGV0YWNoKGV4cG9ydGVkLT5kbWFfYnVmLCBleHBvcnRlZC0+YWN0 aXZlX2F0dGFjaGVkLT5hdHRhY2gpOworCisJLyogY2xvc2UgY29ubmVjdGlvbiB0byBkbWEtYnVm IGNvbXBsZXRlbHkgKi8KKwlkbWFfYnVmX3B1dChleHBvcnRlZC0+ZG1hX2J1Zik7CisJZXhwb3J0 ZWQtPmRtYV9idWYgPSBOVUxMOworCisJa2ZyZWUoZXhwb3J0ZWQtPmFjdGl2ZV9zZ3RzKTsKKwlr ZnJlZShleHBvcnRlZC0+YWN0aXZlX2F0dGFjaGVkKTsKKwlrZnJlZShleHBvcnRlZC0+dmFfa21h cHBlZCk7CisJa2ZyZWUoZXhwb3J0ZWQtPnZhX3ZtYXBwZWQpOworCisJcmV0dXJuIDA7Cit9CmRp ZmYgLS1naXQgYS9kcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9zZ2xf cHJvYy5oIGIvZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfc2dsX3By b2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjhkYmM5YzNkZmRh NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvaHlwZXJf ZG1hYnVmX3NnbF9wcm9jLmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAy MDE4IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRl ZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2Yg dGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNv ZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9u LCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29w eSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFu ZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0 byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRv IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5v dGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBw YXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwg cG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJP VklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgor ICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB TkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9S IENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9U SEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JU IE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04g V0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhF IFNPRlRXQVJFLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoTUlUIE9SIEdQTC0y LjApCisgKgorICovCisKKyNpZm5kZWYgX19IWVBFUl9ETUFCVUZfSU1QX0hfXworI2RlZmluZSBf X0hZUEVSX0RNQUJVRl9JTVBfSF9fCisKKy8qIGV4dHJhY3QgcGFnZXMgZGlyZWN0bHkgZnJvbSBz dHJ1Y3Qgc2dfdGFibGUgKi8KK3N0cnVjdCBwYWdlc19pbmZvICpoeXBlcl9kbWFidWZfZXh0X3Bn cyhzdHJ1Y3Qgc2dfdGFibGUgKnNndCk7CisKKy8qIGNyZWF0ZSBzZ190YWJsZSB3aXRoIGdpdmVu IHBhZ2VzIGFuZCBvdGhlciBwYXJhbWV0ZXJzICovCitzdHJ1Y3Qgc2dfdGFibGUgKmh5cGVyX2Rt YWJ1Zl9jcmVhdGVfc2d0KHN0cnVjdCBwYWdlICoqcGdzLAorCQkJCQkgaW50IGZyc3Rfb2ZzdCwg aW50IGxhc3RfbGVuLAorCQkJCQkgaW50IG5lbnRzKTsKKworaW50IGh5cGVyX2RtYWJ1Zl9jbGVh bnVwX3NndF9pbmZvKHN0cnVjdCBleHBvcnRlZF9zZ3RfaW5mbyAqZXhwb3J0ZWQsCisJCQkJICBp bnQgZm9yY2UpOworCit2b2lkIGh5cGVyX2RtYWJ1Zl9mcmVlX3NndChzdHJ1Y3Qgc2dfdGFibGUg KnNndCk7CisKKyNlbmRpZiAvKiBfX0hZUEVSX0RNQUJVRl9JTVBfSF9fICovCmRpZmYgLS1naXQg YS9kcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9zdHJ1Y3QuaCBiL2Ry aXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX3N0cnVjdC5oCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMTQ0ZTM4MjFmYmMyCi0tLSAvZGV2L251 bGwKKysrIGIvZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfc3RydWN0 LmgKQEAgLTAsMCArMSwxMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxOCBJbnRlbCBDb3Jw b3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hh cmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUg YW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICog dG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdp dGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVy Z2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3Bp ZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAq IFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMg cGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFs bCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRo ZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIs IFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElO Q0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM SVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdF TUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9M REVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklM SVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0Us IEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRX QVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAq CisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKE1JVCBPUiBHUEwtMi4wKQorICoKKyAqLwor CisjaWZuZGVmIF9fSFlQRVJfRE1BQlVGX1NUUlVDVF9IX18KKyNkZWZpbmUgX19IWVBFUl9ETUFC VUZfU1RSVUNUX0hfXworCisvKiBzdGFjayBvZiBtYXBwZWQgc2d0cyAqLworc3RydWN0IHNndF9s aXN0IHsKKwlzdHJ1Y3Qgc2dfdGFibGUgKnNndDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cit9 OworCisvKiBzdGFjayBvZiBhdHRhY2htZW50cyAqLworc3RydWN0IGF0dGFjaG1lbnRfbGlzdCB7 CisJc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoOworCXN0cnVjdCBsaXN0X2hlYWQg bGlzdDsKK307CisKKy8qIHN0YWNrIG9mIHZhZGRyIG1hcHBlZCB2aWEga21hcCAqLworc3RydWN0 IGttYXBfdmFkZHJfbGlzdCB7CisJdm9pZCAqdmFkZHI7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0 OworfTsKKworLyogc3RhY2sgb2YgdmFkZHIgbWFwcGVkIHZpYSB2bWFwICovCitzdHJ1Y3Qgdm1h cF92YWRkcl9saXN0IHsKKwl2b2lkICp2YWRkcjsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cit9 OworCisvKiBFeHBvcnRlciBidWlsZHMgcGFnZXNfaW5mbyBiZWZvcmUgc2hhcmluZyBwYWdlcyAq Lworc3RydWN0IHBhZ2VzX2luZm8geworCWludCBmcnN0X29mc3Q7CisJaW50IGxhc3RfbGVuOwor CWludCBuZW50czsKKwlzdHJ1Y3QgcGFnZSAqKnBnczsKK307CisKKworLyogRXhwb3J0ZXIgc3Rv cmVzIHJlZmVyZW5jZXMgdG8gc2d0IGluIGEgaGFzaCB0YWJsZQorICogRXhwb3J0ZXIga2VlcHMg dGhlc2UgcmVmZXJlbmNlcyBmb3Igc3luY2hyb25pemF0aW9uCisgKiBhbmQgdHJhY2tpbmcgcHVy cG9zZXMKKyAqLworc3RydWN0IGV4cG9ydGVkX3NndF9pbmZvIHsKKwloeXBlcl9kbWFidWZfaWRf dCBoaWQ7CisKKwkvKiBWTSBJRCBvZiBpbXBvcnRlciAqLworCWludCByZG9taWQ7CisKKwlzdHJ1 Y3QgZG1hX2J1ZiAqZG1hX2J1ZjsKKwlpbnQgbmVudHM7CisKKwkvKiBsaXN0IGZvciB0cmFja2lu ZyBhY3Rpdml0aWVzIG9uIGRtYV9idWYgKi8KKwlzdHJ1Y3Qgc2d0X2xpc3QgKmFjdGl2ZV9zZ3Rz OworCXN0cnVjdCBhdHRhY2htZW50X2xpc3QgKmFjdGl2ZV9hdHRhY2hlZDsKKwlzdHJ1Y3Qga21h cF92YWRkcl9saXN0ICp2YV9rbWFwcGVkOworCXN0cnVjdCB2bWFwX3ZhZGRyX2xpc3QgKnZhX3Zt YXBwZWQ7CisKKwkvKiBzZXQgdG8gMCB3aGVuIHVuZXhwb3J0ZWQuIEltcG9ydGVyIGRvZXNuJ3QK KwkgKiBkbyBhIG5ldyBtYXBwaW5nIG9mIGJ1ZmZlciBpZiB2YWxpZCA9PSBmYWxzZQorCSAqLwor CWJvb2wgdmFsaWQ7CisKKwkvKiBhY3RpdmUgPT0gdHJ1ZSBpZiB0aGUgYnVmZmVyIGlzIGFjdGl2 ZWx5IHVzZWQKKwkgKiAobWFwcGVkKSBieSBpbXBvcnRlcgorCSAqLworCWludCBhY3RpdmU7CisK KwkvKiBoeXBlcnZpc29yIHNwZWNpZmljIHJlZmVyZW5jZSBkYXRhIGZvciBzaGFyZWQgcGFnZXMg Ki8KKwl2b2lkICpyZWZzX2luZm87CisKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIHVuZXhwb3J0Owor CWJvb2wgdW5leHBvcnRfc2NoZWQ7CisKKwkvKiBsaXN0IGZvciBmaWxlIHBvaW50ZXJzIGFzc29j aWF0ZWQgd2l0aCBhbGwgdXNlciBzcGFjZQorCSAqIGFwcGxpY2F0aW9uIHRoYXQgaGF2ZSBleHBv cnRlZCB0aGlzIHNhbWUgYnVmZmVyIHRvCisJICogYW5vdGhlciBWTS4gVGhpcyBuZWVkcyB0byBi ZSB0cmFja2VkIHRvIGtub3cgd2hldGhlcgorCSAqIHRoZSBidWZmZXIgY2FuIGJlIGNvbXBsZXRl bHkgZnJlZWQuCisJICovCisJc3RydWN0IGZpbGUgKmZpbHA7Cit9OworCisvKiBpbXBvcnRlZF9z Z3RfaW5mbyBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBpbXBvcnRlZCBETUFfQlVGCisgKiB0 aGlzIGluZm8gaXMga2VwdCBpbiBJTVBPUlQgbGlzdCBhbmQgYXN5bmNob3JvdXNseSByZXRyaWV2 ZWQgYW5kCisgKiB1c2VkIHRvIG1hcCBETUFfQlVGIG9uIGltcG9ydGVyIFZNJ3Mgc2lkZSB1cG9u IGV4cG9ydCBmZCBpb2N0bAorICogcmVxdWVzdCBmcm9tIHVzZXItc3BhY2UKKyAqLworCitzdHJ1 Y3QgaW1wb3J0ZWRfc2d0X2luZm8geworCWh5cGVyX2RtYWJ1Zl9pZF90IGhpZDsgLyogdW5pcXVl IGlkIGZvciBzaGFyZWQgZG1hYnVmIGltcG9ydGVkICovCisKKwkvKiBoeXBlcnZpc29yLXNwZWNp ZmljIGhhbmRsZSB0byBwYWdlcyAqLworCWludCByZWZfaGFuZGxlOworCisJLyogb2Zmc2V0IGFu ZCBzaXplIGluZm8gb2YgRE1BX0JVRiAqLworCWludCBmcnN0X29mc3Q7CisJaW50IGxhc3RfbGVu OworCWludCBuZW50czsKKworCXN0cnVjdCBkbWFfYnVmICpkbWFfYnVmOworCXN0cnVjdCBzZ190 YWJsZSAqc2d0OworCisJdm9pZCAqcmVmc19pbmZvOworCWJvb2wgdmFsaWQ7CisJaW50IGltcG9y dGVyczsKK307CisKKyNlbmRpZiAvKiBfX0hZUEVSX0RNQUJVRl9TVFJVQ1RfSF9fICovCmRpZmYg LS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvaHlwZXJfZG1hYnVmLmggYi9pbmNsdWRlL3VhcGkv bGludXgvaHlwZXJfZG1hYnVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAwLi5jYWFhZTJkYTlkNGQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3VhcGkvbGludXgv aHlwZXJfZG1hYnVmLmgKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE4 IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwg ZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhp cyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3 YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBp bmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwg bW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9v ciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3 aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj ZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJh Z3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9y dGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklE RUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICog SU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQg Tk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENP UFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVS CisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9S IE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lU SCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNP RlRXQVJFLgorICoKKyAqLworCisjaWZuZGVmIF9fTElOVVhfUFVCTElDX0hZUEVSX0RNQUJVRl9I X18KKyNkZWZpbmUgX19MSU5VWF9QVUJMSUNfSFlQRVJfRE1BQlVGX0hfXworCit0eXBlZGVmIHN0 cnVjdCB7CisJaW50IGlkOworCWludCBybmdfa2V5WzNdOyAvKiAxMmJ5dGVzIGxvbmcgcmFuZG9t IG51bWJlciAqLworfSBoeXBlcl9kbWFidWZfaWRfdDsKKworI2RlZmluZSBJT0NUTF9IWVBFUl9E TUFCVUZfVFhfQ0hfU0VUVVAgXAorX0lPQyhfSU9DX05PTkUsICdHJywgMCwgc2l6ZW9mKHN0cnVj dCBpb2N0bF9oeXBlcl9kbWFidWZfdHhfY2hfc2V0dXApKQorc3RydWN0IGlvY3RsX2h5cGVyX2Rt YWJ1Zl90eF9jaF9zZXR1cCB7CisJLyogSU4gcGFyYW1ldGVycyAqLworCS8qIFJlbW90ZSBkb21h aW4gaWQgKi8KKwlpbnQgcmVtb3RlX2RvbWFpbjsKK307CisKKyNkZWZpbmUgSU9DVExfSFlQRVJf RE1BQlVGX1JYX0NIX1NFVFVQIFwKK19JT0MoX0lPQ19OT05FLCAnRycsIDEsIHNpemVvZihzdHJ1 Y3QgaW9jdGxfaHlwZXJfZG1hYnVmX3J4X2NoX3NldHVwKSkKK3N0cnVjdCBpb2N0bF9oeXBlcl9k bWFidWZfcnhfY2hfc2V0dXAgeworCS8qIElOIHBhcmFtZXRlcnMgKi8KKwkvKiBTb3VyY2UgZG9t YWluIGlkICovCisJaW50IHNvdXJjZV9kb21haW47Cit9OworCisjZGVmaW5lIElPQ1RMX0hZUEVS X0RNQUJVRl9FWFBPUlRfUkVNT1RFIFwKK19JT0MoX0lPQ19OT05FLCAnRycsIDIsIHNpemVvZihz dHJ1Y3QgaW9jdGxfaHlwZXJfZG1hYnVmX2V4cG9ydF9yZW1vdGUpKQorc3RydWN0IGlvY3RsX2h5 cGVyX2RtYWJ1Zl9leHBvcnRfcmVtb3RlIHsKKwkvKiBJTiBwYXJhbWV0ZXJzICovCisJLyogRE1B IGJ1ZiBmZCB0byBiZSBleHBvcnRlZCAqLworCWludCBkbWFidWZfZmQ7CisJLyogRG9tYWluIGlk IHRvIHdoaWNoIGJ1ZmZlciBzaG91bGQgYmUgZXhwb3J0ZWQgKi8KKwlpbnQgcmVtb3RlX2RvbWFp bjsKKwkvKiBleHBvcnRlZCBkbWEgYnVmIGlkICovCisJaHlwZXJfZG1hYnVmX2lkX3QgaGlkOwor fTsKKworI2RlZmluZSBJT0NUTF9IWVBFUl9ETUFCVUZfRVhQT1JUX0ZEIFwKK19JT0MoX0lPQ19O T05FLCAnRycsIDMsIHNpemVvZihzdHJ1Y3QgaW9jdGxfaHlwZXJfZG1hYnVmX2V4cG9ydF9mZCkp CitzdHJ1Y3QgaW9jdGxfaHlwZXJfZG1hYnVmX2V4cG9ydF9mZCB7CisJLyogSU4gcGFyYW1ldGVy cyAqLworCS8qIGh5cGVyIGRtYWJ1ZiBpZCB0byBiZSBpbXBvcnRlZCAqLworCWh5cGVyX2RtYWJ1 Zl9pZF90IGhpZDsKKwkvKiBmbGFncyAqLworCWludCBmbGFnczsKKwkvKiBPVVQgcGFyYW1ldGVy cyAqLworCS8qIGV4cG9ydGVkIGRtYSBidWYgZmQgKi8KKwlpbnQgZmQ7Cit9OworCisjZGVmaW5l IElPQ1RMX0hZUEVSX0RNQUJVRl9VTkVYUE9SVCBcCitfSU9DKF9JT0NfTk9ORSwgJ0cnLCA0LCBz aXplb2Yoc3RydWN0IGlvY3RsX2h5cGVyX2RtYWJ1Zl91bmV4cG9ydCkpCitzdHJ1Y3QgaW9jdGxf aHlwZXJfZG1hYnVmX3VuZXhwb3J0IHsKKwkvKiBJTiBwYXJhbWV0ZXJzICovCisJLyogaHlwZXIg ZG1hYnVmIGlkIHRvIGJlIHVuZXhwb3J0ZWQgKi8KKwloeXBlcl9kbWFidWZfaWRfdCBoaWQ7CisJ LyogZGVsYXkgaW4gbXMgYnkgd2hpY2ggdW5leHBvcnQgcHJvY2Vzc2luZyB3aWxsIGJlIHBvc3Rw b25lZCAqLworCWludCBkZWxheV9tczsKKwkvKiBPVVQgcGFyYW1ldGVycyAqLworCS8qIFN0YXR1 cyBvZiByZXF1ZXN0ICovCisJaW50IHN0YXR1czsKK307CisKKyNlbmRpZiAvL19fTElOVVhfUFVC TElDX0hZUEVSX0RNQUJVRl9IX18KLS0gCjIuMTYuMQoKCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVs QGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1h bi9saXN0aW5mby94ZW4tZGV2ZWw=