From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2EDB9C76199 for ; Sun, 16 Feb 2020 17:27:13 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 0DB2420857 for ; Sun, 16 Feb 2020 17:27:12 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 0DB2420857 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=tronnes.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id D31B56E44F; Sun, 16 Feb 2020 17:27:03 +0000 (UTC) Received: from asav22.altibox.net (asav22.altibox.net [109.247.116.9]) by gabe.freedesktop.org (Postfix) with ESMTPS id A928A6E44F for ; Sun, 16 Feb 2020 17:27:00 +0000 (UTC) Received: from localhost.localdomain (unknown [81.166.168.211]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: noralf.tronnes@ebnett.no) by asav22.altibox.net (Postfix) with ESMTPSA id F18AA2006F; Sun, 16 Feb 2020 18:21:38 +0100 (CET) From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= To: broonie@kernel.org, balbi@kernel.org, lee.jones@linaro.org Subject: [RFC 1/9] regmap: Add USB support Date: Sun, 16 Feb 2020 18:21:09 +0100 Message-Id: <20200216172117.49832-2-noralf@tronnes.org> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20200216172117.49832-1-noralf@tronnes.org> References: <20200216172117.49832-1-noralf@tronnes.org> MIME-Version: 1.0 X-CMAE-Score: 0 X-CMAE-Analysis: v=2.3 cv=ZvHD1ezG c=1 sm=1 tr=0 a=OYZzhG0JTxDrWp/F2OJbnw==:117 a=OYZzhG0JTxDrWp/F2OJbnw==:17 a=jpOVt7BSZ2e4Z31A5e1TngXxSK0=:19 a=IkcTkHD0fZMA:10 a=M51BFTxLslgA:10 a=SJz97ENfAAAA:8 a=mUNDW0rc9m-72unTMGQA:9 a=qPv1qALXyqbN-t20:21 a=3pyz2qYhOZPv3Z7M:21 a=m1hsav1n4tjLVwml:21 a=QEXdDO2ut3YA:10 a=vFet0B0WnEQeilDPIY6i:22 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-usb@vger.kernel.org, dri-devel@lists.freedesktop.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" QWRkIHN1cHBvcnQgZm9yIHJlZ21hcCBvdmVyIFVTQiBmb3IgdXNlIHdpdGggdGhlIE11bHRpZnVu Y3Rpb24gVVNCIERldmljZS4KVHdvIGVuZHBvaW50cyBJTi9PVVQgYXJlIHVzZWQuIFVwIHRvIDI1 NSByZWdtYXBzIGFyZSBzdXBwb3J0ZWQgb24gb25lIFVTQgppbnRlcmZhY2UuIFRoZSByZWdpc3Rl ciBpbmRleCB3aWR0aCBpcyBhbHdheXMgMzItYml0LCBidXQgdGhlIHJlZ2lzdGVyCnZhbHVlIGNh biBiZSA4LCAxNiBvciAzMiBiaXRzIHdpZGUuIExaNCBjb21wcmVzc2lvbiBpcyBzdXBwb3J0ZWQg b24gYnVsawp0cmFuc2ZlcnMuCgpTaWduZWQtb2ZmLWJ5OiBOb3JhbGYgVHLDuG5uZXMgPG5vcmFs ZkB0cm9ubmVzLm9yZz4KLS0tCiBkcml2ZXJzL2Jhc2UvcmVnbWFwL0tjb25maWcgICAgICB8ICAg IDggKy0KIGRyaXZlcnMvYmFzZS9yZWdtYXAvTWFrZWZpbGUgICAgIHwgICAgMSArCiBkcml2ZXJz L2Jhc2UvcmVnbWFwL3JlZ21hcC11c2IuYyB8IDEwMjYgKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrCiBpbmNsdWRlL2xpbnV4L3JlZ21hcC5oICAgICAgICAgICB8ICAgMjMgKwogaW5jbHVk ZS9saW51eC9yZWdtYXBfdXNiLmggICAgICAgfCAgIDk3ICsrKwogNSBmaWxlcyBjaGFuZ2VkLCAx MTU0IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2Jhc2UvcmVnbWFwL3JlZ21hcC11c2IuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUv bGludXgvcmVnbWFwX3VzYi5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3JlZ21hcC9LY29u ZmlnIGIvZHJpdmVycy9iYXNlL3JlZ21hcC9LY29uZmlnCmluZGV4IDBmZDZmOTdlZTUyMy4uNmM5 MzdjMTk2ODI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcmVnbWFwL0tjb25maWcKKysrIGIv ZHJpdmVycy9iYXNlL3JlZ21hcC9LY29uZmlnCkBAIC00LDcgKzQsNyBAQAogIyBzdWJzeXN0ZW1z IHNob3VsZCBzZWxlY3QgdGhlIGFwcHJvcHJpYXRlIHN5bWJvbHMuCiAKIGNvbmZpZyBSRUdNQVAK LQlkZWZhdWx0IHkgaWYgKFJFR01BUF9JMkMgfHwgUkVHTUFQX1NQSSB8fCBSRUdNQVBfU1BNSSB8 fCBSRUdNQVBfVzEgfHwgUkVHTUFQX0FDOTcgfHwgUkVHTUFQX01NSU8gfHwgUkVHTUFQX0lSUSB8 fCBSRUdNQVBfU0NDQiB8fCBSRUdNQVBfSTNDKQorCWRlZmF1bHQgeSBpZiAoUkVHTUFQX0kyQyB8 fCBSRUdNQVBfU1BJIHx8IFJFR01BUF9TUE1JIHx8IFJFR01BUF9XMSB8fCBSRUdNQVBfQUM5NyB8 fCBSRUdNQVBfTU1JTyB8fCBSRUdNQVBfSVJRIHx8IFJFR01BUF9TQ0NCIHx8IFJFR01BUF9JM0Mg fHwgUkVHTUFQX1VTQikKIAlzZWxlY3QgSVJRX0RPTUFJTiBpZiBSRUdNQVBfSVJRCiAJYm9vbAog CkBAIC01MywzICs1Myw5IEBAIGNvbmZpZyBSRUdNQVBfU0NDQgogY29uZmlnIFJFR01BUF9JM0MK IAl0cmlzdGF0ZQogCWRlcGVuZHMgb24gSTNDCisKK2NvbmZpZyBSRUdNQVBfVVNCCisJdHJpc3Rh dGUKKwlkZXBlbmRzIG9uIFVTQgorCXNlbGVjdCBMWjRfQ09NUFJFU1MKKwlzZWxlY3QgTFo0X0RF Q09NUFJFU1MKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9yZWdtYXAvTWFrZWZpbGUgYi9kcml2 ZXJzL2Jhc2UvcmVnbWFwL01ha2VmaWxlCmluZGV4IGZmNmM3ZDhlYzFjZC4uN2U2OTMyZjEwMGVh IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcmVnbWFwL01ha2VmaWxlCisrKyBiL2RyaXZlcnMv YmFzZS9yZWdtYXAvTWFrZWZpbGUKQEAgLTE3LDMgKzE3LDQgQEAgb2JqLSQoQ09ORklHX1JFR01B UF9XMSkgKz0gcmVnbWFwLXcxLm8KIG9iai0kKENPTkZJR19SRUdNQVBfU09VTkRXSVJFKSArPSBy ZWdtYXAtc2R3Lm8KIG9iai0kKENPTkZJR19SRUdNQVBfU0NDQikgKz0gcmVnbWFwLXNjY2Iubwog b2JqLSQoQ09ORklHX1JFR01BUF9JM0MpICs9IHJlZ21hcC1pM2Mubworb2JqLSQoQ09ORklHX1JF R01BUF9VU0IpICs9IHJlZ21hcC11c2IubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3JlZ21h cC9yZWdtYXAtdXNiLmMgYi9kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ21hcC11c2IuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmJiNGYwZGY0NGQxZAotLS0gL2Rldi9u dWxsCisrKyBiL2RyaXZlcnMvYmFzZS9yZWdtYXAvcmVnbWFwLXVzYi5jCkBAIC0wLDAgKzEsMTAy NiBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKKy8qCisg KiBSZWdpc3RlciBtYXAgYWNjZXNzIEFQSSAtIFVTQiBzdXBwb3J0CisgKgorICogQ29weXJpZ2h0 IDIwMjAgTm9yYWxmIFRyw7hubmVzCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4K KyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1 ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxp bnV4L2x6NC5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3Jl Z21hcF91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4 L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3Vz Yi5oPgorCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKworLyoqCisgKiBET0M6IG92ZXJ2aWV3Cisg KgorICogVGhpcyByZWdtYXAgb3ZlciBVU0Igc3VwcG9ydHMgbXVsdGlwbGUgcmVnbWFwcyBvdmVy IGEgc2luZ2xlIFVTQiBpbnRlcmZhY2UuCisgKiBUd28gZW5kcG9pbnRzIGFyZSBuZWVkZWQgYW5k IHRoZSBmaXJzdCBJTiBhbmQgT1VUIGVuZHBvaW50cyBhcmUgdXNlZC4KKyAqIEEgUkVHTUFQX1VT Ql9EVF9JTlRFUkZBQ0UgZGVzY3JpcHRvciByZXF1ZXN0IGlzIGlzc3VlZCB0byBnZXQgdGhlIG51 bWJlciBvZgorICogcmVnbWFwcyBzdXBwb3J0ZWQgb24gdGhlIGludGVyZmFjZS4gQSBSRUdNQVBf VVNCX0RUX01BUCBkZXNjcmlwdG9yIHJlcXVlc3QgaXMKKyAqIGlzc3VlZCB0byBnZXQgZGV0YWls cyBhYm91dCBhIHNwZWNpZmljIHJlZ21hcC4gVGhpcyBpcyBkb25lIHdoZW4KKyAqIGRldm1fcmVn bWFwX2luaXRfdXNiKCkgaXMgY2FsbGVkIHRvIGdldCBhY2Nlc3MgdG8gYSByZWdtYXAuCisgKgor ICogQSByZWdtYXAgdHJhbnNmZXIgYmVnaW5zIHdpdGggdGhlIGhvc3Qgc2VuZGluZyBPVVQgYSAm cmVnbWFwX3VzYl9oZWFkZXIgd2hpY2gKKyAqIGNvbnRhaW5zIGluZm8gYWJvdXQgdGhlIGluZGV4 IG9mIHRoZSByZWdtYXAsIHRoZSByZWdpc3RlciBhZGRyZXNzIGV0Yy4gTmV4dAorICogaXQgZG9l cyBhbiBJTiBvciBPVVQgdHJhbnNmZXIgb2YgdGhlIHJlZ2lzdGVyIHZhbHVlKHMpIGRlcGVuZGlu ZyBvbiBpZiBpdCdzIGEKKyAqIHJlYWQgb3Igd3JpdGUuIFRoaXMgdHJhbnNmZXIgY2FuIGJlIGNv bXByZXNzZWQgdXNpbmcgbHo0IGlmIHRoZSBkZXZpY2UKKyAqIHN1cHBvcnRzIGl0LiBGaW5hbGx5 IGEgJnJlZ21hcF91c2Jfc3RhdHVzIElOIHJlcXVlc3QgaXMgaXNzdWVkIHRvIHJlY2VpdmUgdGhl CisgKiBzdGF0dXMgb2YgdGhlIHRyYW5zZmVyLgorICoKKyAqIElmIGEgdHJhbnNmZXIgZmFpbHMg d2l0aCB0aGUgZXJyb3IgY29kZSAtRVBJUEUsIGEgcmVzZXQgY29udHJvbCByZXF1ZXN0CisgKiAo UkVHTUFQX1VTQl9SRVFfUFJPVE9DT0xfUkVTRVQpIGlzIGlzc3VlZC4gVGhlIGRldmljZSBzaG91 bGQgcmVzZXQgaXQncyBzdGF0ZQorICogbWFjaGluZSBhbmQgcmV0dXJuIGl0cyBwcmV2aW91cyBl cnJvciBjb2RlIGlmIGFueS4gVGhlIGRldmljZSBjYW4gaGFsdCBpdHMKKyAqIElOL09VVCBlbmRw b2ludHMgdG8gZm9yY2UgdGhlIGhvc3QgdG8gcGVyZm9ybSBhIHJlc2V0IGlmIGl0IGZhaWxzIHRv CisgKiB1bmRlcnN0YW5kIGEgdHJhbnNmZXIuCisgKi8KKworLyogUHJvdmlkZXMgZXhjbHVzaXZl IGludGVyZmFjZSBhY2Nlc3MgKi8KK3N0cnVjdCByZWdtYXBfdXNiX2ludGVyZmFjZSB7CisJc3Ry dWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZTsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsgLyogRW5z dXJlcyBleGNsdXNpdmUgaW50ZXJmYWNlIGFjY2VzcyAqLworCXVuc2lnbmVkIGludCByZWZjb3Vu dDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7CisKKwl1MzIgdGFnOworfTsKKworc3RydWN0IHJl Z21hcF91c2JfY29udGV4dDsKKworc3RydWN0IHJlZ21hcF91c2JfdHJhbnNmZXIgeworCXN0cnVj dCByZWdtYXBfdXNiX2NvbnRleHQgKmN0eDsKKwlzdHJ1Y3QgdXNiX2FuY2hvciBhbmNob3I7CisJ c3RydWN0IHVyYiAqaGVhZGVyX3VyYjsKKwlzdHJ1Y3QgdXJiICpidWZfb3V0X3VyYjsKKwlzdHJ1 Y3QgdXJiICpidWZfaW5fdXJiOworCXZvaWQgKmJ1ZjsKKwlzaXplX3QgYnVmc2l6ZTsKKwlzdHJ1 Y3QgdXJiICpzdGF0dXNfdXJiOworCXNwaW5sb2NrX3QgbG9jazsgLyogUHJvdGVjdCBkeW5hbWlj IHZhbHVlcyAqLworCXUzMiB0YWc7CisJaW50IHN0YXR1czsKKworCXU4IGNvbXByZXNzaW9uOwor CXZvaWQgKmJ1Zl9pbl9kZXN0OworCXVuc2lnbmVkIGludCBsZW5ndGg7CisJdW5zaWduZWQgaW50 IGFjdHVhbF9sZW5ndGg7CisKKwlrdGltZV90IHN0YXJ0OyAvKiBGSVhNRTogVGVtcG9yYXJ5IGRl YnVnL3BlcmYgYWlkICovCit9OworCitzdHJ1Y3QgcmVnbWFwX3VzYl9jb250ZXh0IHsKKwlzdHJ1 Y3QgdXNiX2RldmljZSAqdXNiOworCXN0cnVjdCByZWdtYXBfdXNiX2ludGVyZmFjZSAqcnVpZjsK Kwl1OCBpZm51bTsKKwl1bnNpZ25lZCBpbnQgaW5fcGlwZTsKKwl1bnNpZ25lZCBpbnQgb3V0X3Bp cGU7CisJdTE2IGluZGV4OworCXVuc2lnbmVkIGludCB2YWxfYnl0ZXM7CisJdm9pZCAqbHo0X2Nv bXBfbWVtOworCXU4IGNvbXByZXNzaW9uOworCXVuc2lnbmVkIGludCBtYXhfdHJhbnNmZXJfc2l6 ZTsKKwlzdHJ1Y3QgcmVnbWFwX3VzYl90cmFuc2ZlciAqdHJhbnNmZXJzWzJdOworI2lmZGVmIENP TkZJR19ERUJVR19GUworCXU2NCBzdGF0c19sZW5ndGg7CisJdTY0IHN0YXRzX2FjdHVhbF9sZW5n dGg7CisJdW5zaWduZWQgaW50IG51bV9yZXNldHM7CisJdW5zaWduZWQgaW50IG51bV9lcnJvcnM7 CisjZW5kaWYKK307CisKKy8qIEZJWE1FOiBUZW1wb3JhcnkgZGVidWdnaW5nIGFpZCAqLworc3Rh dGljIHVuc2lnbmVkIGludCBkZWJ1ZyA9IDg7CisKKyNkZWZpbmUgdWRlYnVnKGxldmVsLCBmbXQs IC4uLikJCQkJXAorZG8gewkJCQkJCQlcCisJaWYgKChsZXZlbCkgPD0gZGVidWcpCQkJCVwKKwkJ cHJfZGVidWcoZm10LCAjI19fVkFfQVJHU19fKTsJCVwKK30gd2hpbGUgKDApCisKK3N0YXRpYyBM SVNUX0hFQUQocmVnbWFwX3VzYl9pbnRlcmZhY2VzKTsKK3N0YXRpYyBERUZJTkVfTVVURVgocmVn bWFwX3VzYl9pbnRlcmZhY2VzX2xvY2spOworCitzdGF0aWMgc3RydWN0IHJlZ21hcF91c2JfaW50 ZXJmYWNlICpyZWdtYXBfdXNiX2ludGVyZmFjZV9nZXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlu dGVyZmFjZSkKK3sKKwlzdHJ1Y3QgcmVnbWFwX3VzYl9pbnRlcmZhY2UgKnJ1aWYsICplbnRyeTsK KworCW11dGV4X2xvY2soJnJlZ21hcF91c2JfaW50ZXJmYWNlc19sb2NrKTsKKwlsaXN0X2Zvcl9l YWNoX2VudHJ5KGVudHJ5LCAmcmVnbWFwX3VzYl9pbnRlcmZhY2VzLCBsaW5rKQorCQlpZiAoZW50 cnktPmludGVyZmFjZSA9PSBpbnRlcmZhY2UpIHsKKwkJCXJ1aWYgPSBlbnRyeTsKKwkJCXJ1aWYt PnJlZmNvdW50Kys7CisJCQlnb3RvIG91dF91bmxvY2s7CisJCX0KKworCXJ1aWYgPSBremFsbG9j KHNpemVvZigqcnVpZiksIEdGUF9LRVJORUwpOworCWlmICghcnVpZikgeworCQlydWlmID0gRVJS X1BUUigtRU5PTUVNKTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKworCW11dGV4X2luaXQoJnJ1 aWYtPmxvY2spOworCXJ1aWYtPmludGVyZmFjZSA9IGludGVyZmFjZTsKKwlydWlmLT5yZWZjb3Vu dCsrOworCWxpc3RfYWRkKCZydWlmLT5saW5rLCAmcmVnbWFwX3VzYl9pbnRlcmZhY2VzKTsKK291 dF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZyZWdtYXBfdXNiX2ludGVyZmFjZXNfbG9jayk7CisK KwlyZXR1cm4gcnVpZjsKK30KKworc3RhdGljIHZvaWQgcmVnbWFwX3VzYl9pbnRlcmZhY2VfcHV0 KHN0cnVjdCByZWdtYXBfdXNiX2ludGVyZmFjZSAqcnVpZikKK3sKKwltdXRleF9sb2NrKCZyZWdt YXBfdXNiX2ludGVyZmFjZXNfbG9jayk7CisJaWYgKC0tcnVpZi0+cmVmY291bnQpCisJCWdvdG8g b3V0X3VubG9jazsKKworCWxpc3RfZGVsKCZydWlmLT5saW5rKTsKKwltdXRleF9kZXN0cm95KCZy dWlmLT5sb2NrKTsKKwlrZnJlZShydWlmKTsKK291dF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZy ZWdtYXBfdXNiX2ludGVyZmFjZXNfbG9jayk7Cit9CisKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMK K3N0YXRpYyB2b2lkIHJlZ21hcF91c2Jfc3RhdHNfYWRkX2xlbmd0aChzdHJ1Y3QgcmVnbWFwX3Vz Yl9jb250ZXh0ICpjdHgsIHVuc2lnbmVkIGludCBsZW4pCit7CisJY3R4LT5zdGF0c19sZW5ndGgg Kz0gbGVuOworCS8qIERpZCBpdCB3cmFwIGFyb3VuZD8gKi8KKwlpZiAoY3R4LT5zdGF0c19sZW5n dGggPD0gbGVuICYmIGN0eC0+c3RhdHNfYWN0dWFsX2xlbmd0aCkgeworCQljdHgtPnN0YXRzX2xl bmd0aCA9IGxlbjsKKwkJY3R4LT5zdGF0c19hY3R1YWxfbGVuZ3RoID0gMDsKKwl9Cit9CisKKyNk ZWZpbmUgcmVnbWFwX3VzYl9zdGF0c19hZGQoYywgdikgXAorCShjKSArPSB2CisjZWxzZQorc3Rh dGljIHZvaWQgcmVnbWFwX3VzYl9zdGF0c19hZGRfbGVuZ3RoKHN0cnVjdCByZWdtYXBfdXNiX2Nv bnRleHQgKmN0eCwgdW5zaWduZWQgaW50IGxlbikKK3sKK30KKworI2RlZmluZSByZWdtYXBfdXNi X3N0YXRzX2FkZChjLCB2KQorI2VuZGlmCisKK3N0YXRpYyBpbnQgcmVnbWFwX3VzYl9wcm90b2Nv bF9yZXNldChzdHJ1Y3QgcmVnbWFwX3VzYl9jb250ZXh0ICpjdHgpCit7CisJdTggKnByZXZfZXJy bm87CisJaW50IHJldDsKKworCXJlZ21hcF91c2Jfc3RhdHNfYWRkKGN0eC0+bnVtX3Jlc2V0cywg MSk7CisKKwlwcmV2X2Vycm5vID0ga21hbGxvYygxLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXByZXZf ZXJybm8pCisJCXJldHVybiAtRU5PTUVNOworCisJdXNiX2NsZWFyX2hhbHQoY3R4LT51c2IsIGN0 eC0+b3V0X3BpcGUpOworCXVzYl9jbGVhcl9oYWx0KGN0eC0+dXNiLCBjdHgtPmluX3BpcGUpOwor CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGN0eC0+dXNiLCB1c2JfcmN2Y3RybHBpcGUoY3R4LT51 c2IsIDApLAorCQkJICAgICAgUkVHTUFQX1VTQl9SRVFfUFJPVE9DT0xfUkVTRVQsCisJCQkgICAg ICBVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKKwkJ CSAgICAgIDAsIGN0eC0+aWZudW0sIHByZXZfZXJybm8sIDEsCisJCQkgICAgICBVU0JfQ1RSTF9T RVRfVElNRU9VVCk7CisJdWRlYnVnKDAsICIlczogcmV0PSVkLCBwcmV2X2Vycm5vPSV1XG4iLCBf X2Z1bmNfXywgcmV0LCAqcHJldl9lcnJubyk7CisJaWYgKHJldCA8IDAgfHwgcmV0ICE9IDEpIHsK KwkJLyogRklYTUU6IFRyeSBhIFVTQiBwb3J0IHJlc2V0PyAqLworCQlyZXQgPSAtRVBJUEU7CisJ CWdvdG8gZnJlZTsKKwl9CisKKwlyZXQgPSAqcHJldl9lcnJubzsKK2ZyZWU6CisJa2ZyZWUocHJl dl9lcnJubyk7CisKKwlyZXR1cm4gcmV0ID8gLXJldCA6IC1FUElQRTsKK30KKworc3RhdGljIHZv aWQgcmVnbWFwX3VzYl9oZWFkZXJfdXJiX2NvbXBsZXRpb24oc3RydWN0IHVyYiAqdXJiKQorewor CXN0cnVjdCByZWdtYXBfdXNiX3RyYW5zZmVyICp0cmFuc2ZlciA9IHVyYi0+Y29udGV4dDsKKwl1 bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnRyYW5zZmVyLT5sb2Nr LCBmbGFncyk7CisJaWYgKHVyYi0+c3RhdHVzKQorCQl0cmFuc2Zlci0+c3RhdHVzID0gdXJiLT5z dGF0dXM7CisJZWxzZSBpZiAodXJiLT5hY3R1YWxfbGVuZ3RoICE9IHVyYi0+dHJhbnNmZXJfYnVm ZmVyX2xlbmd0aCkKKwkJdHJhbnNmZXItPnN0YXR1cyA9IC1FUkVNT1RFSU87CisJdHJhbnNmZXIt PnN0YXJ0ID0ga3RpbWVfZ2V0KCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHJhbnNmZXIt PmxvY2ssIGZsYWdzKTsKKworCXVkZWJ1Zyg0LCAiJXM6IHRyYW5zZmVyOiBzdGF0dXM9JWQgKCVk KSwgdGFnPSV1XG4iLAorCSAgICAgICBfX2Z1bmNfXywgdXJiLT5zdGF0dXMsIHRyYW5zZmVyLT5z dGF0dXMsIHRyYW5zZmVyLT50YWcpOworfQorCitzdGF0aWMgdm9pZCByZWdtYXBfdXNiX3N0YXR1 c191cmJfY29tcGxldGlvbihzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHJlZ21hcF91c2Jf c3RhdHVzICpzdGF0dXMgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlzdHJ1Y3QgcmVnbWFwX3Vz Yl90cmFuc2ZlciAqdHJhbnNmZXIgPSB1cmItPmNvbnRleHQ7CisJdW5zaWduZWQgbG9uZyBmbGFn czsKKwlpbnQgc3RhdDsKKworCXVkZWJ1Zyg0LCAiJXM6IHVyYi0+c3RhdHVzPSVkLCBzaWduYXR1 cmU9MHgleCwgdGFnPSV1IChleHBlY3RlZCAldSlcbiIsCisJICAgICAgIF9fZnVuY19fLCB1cmIt PnN0YXR1cywgbGUzMl90b19jcHUoc3RhdHVzLT5zaWduYXR1cmUpLAorCSAgICAgICBsZTE2X3Rv X2NwdShzdGF0dXMtPnRhZyksIHRyYW5zZmVyLT50YWcpOworCisJaWYgKHVyYi0+c3RhdHVzKQor CQlzdGF0ID0gdXJiLT5zdGF0dXM7CisJZWxzZSBpZiAodXJiLT5hY3R1YWxfbGVuZ3RoICE9IHVy Yi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCkKKwkJc3RhdCA9IC1FUkVNT1RFSU87CisJZWxzZSBp ZiAobGUzMl90b19jcHUoc3RhdHVzLT5zaWduYXR1cmUpICE9IFJFR01BUF9VU0JfU1RBVFVTX1NJ R05BVFVSRSB8fAorCQkgbGUxNl90b19jcHUoc3RhdHVzLT50YWcpICE9IHRyYW5zZmVyLT50YWcp CisJCXN0YXQgPSAtRUJBRE1TRzsKKwllbHNlCisJCXN0YXQgPSAtc3RhdHVzLT5zdGF0dXM7CisK KwlzcGluX2xvY2tfaXJxc2F2ZSgmdHJhbnNmZXItPmxvY2ssIGZsYWdzKTsKKwlpZiAoIXRyYW5z ZmVyLT5zdGF0dXMpCisJCXRyYW5zZmVyLT5zdGF0dXMgPSBzdGF0OworCXNwaW5fdW5sb2NrX2ly cXJlc3RvcmUoJnRyYW5zZmVyLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBsb25nIG11ZF9k cm1fdGhyb3VnaHB1dChrdGltZV90IGJlZ2luLCBrdGltZV90IGVuZCwgc2l6ZV90IGxlbikKK3sK Kwlsb25nIHRocm91Z2hwdXQ7CisKKwl0aHJvdWdocHV0ID0ga3RpbWVfdXNfZGVsdGEoZW5kLCBi ZWdpbik7CisJdGhyb3VnaHB1dCA9IHRocm91Z2hwdXQgPyAobGVuICogMTAwMCkgLyB0aHJvdWdo cHV0IDogMDsKKwl0aHJvdWdocHV0ID0gdGhyb3VnaHB1dCAqIDEwMDAgLyAxMDI0OworCisJcmV0 dXJuIHRocm91Z2hwdXQ7Cit9CisKK3N0YXRpYyB2b2lkIHJlZ21hcF91c2JfYnVmX2luX3VyYl9j b21wbGV0aW9uKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgcmVnbWFwX3VzYl90cmFuc2Zl ciAqdHJhbnNmZXIgPSB1cmItPmNvbnRleHQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlrdGlt ZV90IHN0YXJ0LCBlbmQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdHJhbnNmZXItPmxvY2ssIGZs YWdzKTsKKwlpZiAodXJiLT5zdGF0dXMgJiYgIXRyYW5zZmVyLT5zdGF0dXMpCisJCXRyYW5zZmVy LT5zdGF0dXMgPSB1cmItPnN0YXR1czsKKwl0cmFuc2Zlci0+YWN0dWFsX2xlbmd0aCA9IHVyYi0+ YWN0dWFsX2xlbmd0aDsKKwlzdGFydCA9IHRyYW5zZmVyLT5zdGFydDsKKwlzcGluX3VubG9ja19p cnFyZXN0b3JlKCZ0cmFuc2Zlci0+bG9jaywgZmxhZ3MpOworCisJZW5kID0ga3RpbWVfZ2V0KCk7 CisKKwl1ZGVidWcoNCwgIiVzOiBJTjogc3RhdHVzPSVkLCB0YWc9JXUsICVsZCBrQi9zICglbGxk IG1zKSwgbGVuPSV1XG4iLAorCSAgICAgICBfX2Z1bmNfXywgdXJiLT5zdGF0dXMsIHRyYW5zZmVy LT50YWcsCisJICAgICAgIG11ZF9kcm1fdGhyb3VnaHB1dChzdGFydCwgZW5kLCB1cmItPmFjdHVh bF9sZW5ndGgpLAorCSAgICAgICBrdGltZV9tc19kZWx0YShlbmQsIHN0YXJ0KSwgdXJiLT5hY3R1 YWxfbGVuZ3RoKTsKK30KKworc3RhdGljIHZvaWQgcmVnbWFwX3VzYl9idWZfb3V0X3VyYl9jb21w bGV0aW9uKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgcmVnbWFwX3VzYl90cmFuc2ZlciAq dHJhbnNmZXIgPSB1cmItPmNvbnRleHQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlrdGltZV90 IHN0YXJ0LCBlbmQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdHJhbnNmZXItPmxvY2ssIGZsYWdz KTsKKwlpZiAoIXRyYW5zZmVyLT5zdGF0dXMpIHsKKwkJaWYgKHVyYi0+c3RhdHVzKQorCQkJdHJh bnNmZXItPnN0YXR1cyA9IHVyYi0+c3RhdHVzOworCQllbHNlIGlmICh1cmItPmFjdHVhbF9sZW5n dGggIT0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKQorCQkJdHJhbnNmZXItPnN0YXR1cyA9 IC1FUkVNT1RFSU87CisJfQorCXN0YXJ0ID0gdHJhbnNmZXItPnN0YXJ0OworCXNwaW5fdW5sb2Nr X2lycXJlc3RvcmUoJnRyYW5zZmVyLT5sb2NrLCBmbGFncyk7CisKKwllbmQgPSBrdGltZV9nZXQo KTsKKworCXVkZWJ1Zyg0LCAiJXM6IE9VVDogc3RhdHVzPSVkLCB0YWc9JXUsICVsZCBrQi9zICgl bGxkIG1zKSwgbGVuPSV1XG4iLAorCSAgICAgICBfX2Z1bmNfXywgdHJhbnNmZXItPnN0YXR1cywg dHJhbnNmZXItPnRhZywKKwkgICAgICAgbXVkX2RybV90aHJvdWdocHV0KHN0YXJ0LCBlbmQsIHVy Yi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCksCisJICAgICAgIGt0aW1lX21zX2RlbHRhKGVuZCwg c3RhcnQpLCB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOworfQorCitzdGF0aWMgc3RydWN0 IHVyYiAqcmVnbWFwX3VzYl9hbGxvY191cmIoc3RydWN0IHVzYl9kZXZpY2UgKnVzYiwgdW5zaWdu ZWQgaW50IHBpcGUsCisJCQkJCXNpemVfdCBzaXplLCB1c2JfY29tcGxldGVfdCBjb21wbGV0ZV9m biwKKwkJCQkJc3RydWN0IHJlZ21hcF91c2JfdHJhbnNmZXIgKnRyYW5zZmVyKQoreworCXZvaWQg KmJ1ZiA9IE5VTEw7CisJc3RydWN0IHVyYiAqdXJiOworCisJdXJiID0gdXNiX2FsbG9jX3VyYigw LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXVyYikKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoc2l6ZSkg eworCQlidWYgPSB1c2JfYWxsb2NfY29oZXJlbnQodXNiLCBzaXplLCBHRlBfS0VSTkVMLCAmdXJi LT50cmFuc2Zlcl9kbWEpOworCQlpZiAoIWJ1ZikgeworCQkJdXNiX2ZyZWVfdXJiKHVyYik7CisJ CQlyZXR1cm4gTlVMTDsKKwkJfQorCX0KKworCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgdXNiLCBw aXBlLCBidWYsIHNpemUsIGNvbXBsZXRlX2ZuLCB0cmFuc2Zlcik7CisJaWYgKHNpemUpCisJCXVy Yi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisKKwlyZXR1cm4g dXJiOworfQorCitzdGF0aWMgdm9pZCByZWdtYXBfdXNiX2ZyZWVfdHJhbnNmZXIoc3RydWN0IHJl Z21hcF91c2JfdHJhbnNmZXIgKnRyYW5zZmVyKQoreworCXN0cnVjdCB1cmIgKnVyYjsKKworCWlm ICghdHJhbnNmZXIpCisJCXJldHVybjsKKworCXVyYiA9IHRyYW5zZmVyLT5oZWFkZXJfdXJiOwor CWlmICh1cmIpCisJCXVzYl9mcmVlX2NvaGVyZW50KHVyYi0+ZGV2LCB1cmItPnRyYW5zZmVyX2J1 ZmZlcl9sZW5ndGgsCisJCQkJICB1cmItPnRyYW5zZmVyX2J1ZmZlciwgdXJiLT50cmFuc2Zlcl9k bWEpOworCXVzYl9mcmVlX3VyYih1cmIpOworCisJdXJiID0gdHJhbnNmZXItPnN0YXR1c191cmI7 CisJaWYgKHVyYikKKwkJdXNiX2ZyZWVfY29oZXJlbnQodXJiLT5kZXYsIHVyYi0+dHJhbnNmZXJf YnVmZmVyX2xlbmd0aCwKKwkJCQkgIHVyYi0+dHJhbnNmZXJfYnVmZmVyLCB1cmItPnRyYW5zZmVy X2RtYSk7CisJdXNiX2ZyZWVfdXJiKHVyYik7CisKKwl1c2JfZnJlZV91cmIodHJhbnNmZXItPmJ1 Zl9pbl91cmIpOworCXVzYl9mcmVlX3VyYih0cmFuc2Zlci0+YnVmX291dF91cmIpOworCWtmcmVl KHRyYW5zZmVyLT5idWYpOworCWtmcmVlKHRyYW5zZmVyKTsKK30KKworc3RhdGljIHN0cnVjdCBy ZWdtYXBfdXNiX3RyYW5zZmVyICpyZWdtYXBfdXNiX2FsbG9jX3RyYW5zZmVyKHN0cnVjdCByZWdt YXBfdXNiX2NvbnRleHQgKmN0eCkKK3sKKwlzdHJ1Y3QgcmVnbWFwX3VzYl90cmFuc2ZlciAqdHJh bnNmZXI7CisKKwl0cmFuc2ZlciA9IGt6YWxsb2Moc2l6ZW9mKCp0cmFuc2ZlciksIEdGUF9LRVJO RUwpOworCWlmICghdHJhbnNmZXIpCisJCXJldHVybiBOVUxMOworCisJaW5pdF91c2JfYW5jaG9y KCZ0cmFuc2Zlci0+YW5jaG9yKTsKKwlzcGluX2xvY2tfaW5pdCgmdHJhbnNmZXItPmxvY2spOwor CXRyYW5zZmVyLT5jdHggPSBjdHg7CisKKwl0cmFuc2Zlci0+aGVhZGVyX3VyYiA9IHJlZ21hcF91 c2JfYWxsb2NfdXJiKGN0eC0+dXNiLCBjdHgtPm91dF9waXBlLAorCQkJCQkJICAgIHNpemVvZihz dHJ1Y3QgcmVnbWFwX3VzYl9oZWFkZXIpLAorCQkJCQkJICAgIHJlZ21hcF91c2JfaGVhZGVyX3Vy Yl9jb21wbGV0aW9uLAorCQkJCQkJICAgIHRyYW5zZmVyKTsKKwlpZiAoIXRyYW5zZmVyLT5oZWFk ZXJfdXJiKQorCQlnb3RvIGVycm9yOworCisJdHJhbnNmZXItPnN0YXR1c191cmIgPSByZWdtYXBf dXNiX2FsbG9jX3VyYihjdHgtPnVzYiwgY3R4LT5pbl9waXBlLAorCQkJCQkJICAgIHNpemVvZihz dHJ1Y3QgcmVnbWFwX3VzYl9zdGF0dXMpLAorCQkJCQkJICAgIHJlZ21hcF91c2Jfc3RhdHVzX3Vy Yl9jb21wbGV0aW9uLAorCQkJCQkJICAgIHRyYW5zZmVyKTsKKwlpZiAoIXRyYW5zZmVyLT5zdGF0 dXNfdXJiKQorCQlnb3RvIGVycm9yOworCisJdHJhbnNmZXItPmJ1Zl9pbl91cmIgPSByZWdtYXBf dXNiX2FsbG9jX3VyYihjdHgtPnVzYiwgY3R4LT5pbl9waXBlLCAwLAorCQkJCQkJICAgIHJlZ21h cF91c2JfYnVmX2luX3VyYl9jb21wbGV0aW9uLAorCQkJCQkJICAgIHRyYW5zZmVyKTsKKwlpZiAo IXRyYW5zZmVyLT5idWZfaW5fdXJiKQorCQlnb3RvIGVycm9yOworCisJdHJhbnNmZXItPmJ1Zl9v dXRfdXJiID0gcmVnbWFwX3VzYl9hbGxvY191cmIoY3R4LT51c2IsIGN0eC0+b3V0X3BpcGUsIDAs CisJCQkJCQkgICAgIHJlZ21hcF91c2JfYnVmX291dF91cmJfY29tcGxldGlvbiwKKwkJCQkJCSAg ICAgdHJhbnNmZXIpOworCWlmICghdHJhbnNmZXItPmJ1Zl9vdXRfdXJiKQorCQlnb3RvIGVycm9y OworCisJdHJhbnNmZXItPmJ1ZnNpemUgPSBjdHgtPm1heF90cmFuc2Zlcl9zaXplOworcmV0cnk6 CisJdHJhbnNmZXItPmJ1ZiA9IGttYWxsb2ModHJhbnNmZXItPmJ1ZnNpemUsIEdGUF9LRVJORUwp OworCWlmICghdHJhbnNmZXItPmJ1ZikgeworCQlpZiAodHJhbnNmZXItPmJ1ZnNpemUgPCAzMikg LyogR2l2ZSB1cCAqLworCQkJZ290byBlcnJvcjsKKworCQl0cmFuc2Zlci0+YnVmc2l6ZSAvPSAy OworCQlnb3RvIHJldHJ5OworCX0KKworCXJldHVybiB0cmFuc2ZlcjsKKworZXJyb3I6CisJcmVn bWFwX3VzYl9mcmVlX3RyYW5zZmVyKHRyYW5zZmVyKTsKKworCXJldHVybiBOVUxMOworfQorCitz dGF0aWMgdm9pZCByZWdtYXBfdXNiX2ZyZWVfdHJhbnNmZXJzKHN0cnVjdCByZWdtYXBfdXNiX2Nv bnRleHQgKmN0eCkKK3sKKwlyZWdtYXBfdXNiX2ZyZWVfdHJhbnNmZXIoY3R4LT50cmFuc2ZlcnNb MF0pOworCXJlZ21hcF91c2JfZnJlZV90cmFuc2ZlcihjdHgtPnRyYW5zZmVyc1sxXSk7Cit9CisK K3N0YXRpYyBpbnQgcmVnbWFwX3VzYl9hbGxvY190cmFuc2ZlcnMoc3RydWN0IHJlZ21hcF91c2Jf Y29udGV4dCAqY3R4KQoreworCWN0eC0+dHJhbnNmZXJzWzBdID0gcmVnbWFwX3VzYl9hbGxvY190 cmFuc2ZlcihjdHgpOworCWN0eC0+dHJhbnNmZXJzWzFdID0gcmVnbWFwX3VzYl9hbGxvY190cmFu c2ZlcihjdHgpOworCWlmICghY3R4LT50cmFuc2ZlcnNbMF0gfHwgIWN0eC0+dHJhbnNmZXJzWzFd KSB7CisJCXJlZ21hcF91c2JfZnJlZV90cmFuc2ZlcnMoY3R4KTsKKwkJcmV0dXJuIC1FTk9NRU07 CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVnbWFwX3VzYl9zdWJtaXRfdXJi KHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHJlZ21hcF91c2JfdHJhbnNmZXIgKnRyYW5zZmVyKQor eworCWludCByZXQ7CisKKwl1c2JfYW5jaG9yX3VyYih1cmIsICZ0cmFuc2Zlci0+YW5jaG9yKTsK KwlyZXQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9LRVJORUwpOworCWlmIChyZXQpCisJCXVz Yl91bmFuY2hvcl91cmIodXJiKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHJl Z21hcF91c2Jfa2lsbF90cmFuc2ZlcnMoc3RydWN0IHJlZ21hcF91c2JfY29udGV4dCAqY3R4KQor eworCXVzYl9raWxsX2FuY2hvcmVkX3VyYnMoJmN0eC0+dHJhbnNmZXJzWzBdLT5hbmNob3IpOwor CXVzYl9raWxsX2FuY2hvcmVkX3VyYnMoJmN0eC0+dHJhbnNmZXJzWzFdLT5hbmNob3IpOworfQor CitzdGF0aWMgaW50IHJlZ21hcF91c2Jfc3VibWl0X3RyYW5zZmVyKHN0cnVjdCByZWdtYXBfdXNi X3RyYW5zZmVyICp0cmFuc2ZlciwKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgcmVnbnIsIHUzMiBm bGFncywgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCByZWdtYXBfdXNiX2NvbnRl eHQgKmN0eCA9IHRyYW5zZmVyLT5jdHg7CisJc3RydWN0IHJlZ21hcF91c2JfaGVhZGVyICpoZWFk ZXI7CisJc3RydWN0IHVyYiAqdXJiOworCWludCByZXQ7CisKKwlzcGluX2xvY2tfaXJxKCZ0cmFu c2Zlci0+bG9jayk7CisJdHJhbnNmZXItPmFjdHVhbF9sZW5ndGggPSAwOworCXRyYW5zZmVyLT5z dGF0dXMgPSAwOworCXRyYW5zZmVyLT50YWcgPSArK2N0eC0+cnVpZi0+dGFnOworCXNwaW5fdW5s b2NrX2lycSgmdHJhbnNmZXItPmxvY2spOworCisJdWRlYnVnKDMsICIlczogcmVnbnI9MHgleCwg aW49JXUgZmxhZ3M9MHgleCwgbGVuPSV6dSwgdHJhbnNmZXItPmJ1Zj0lcywgdGFnPSV1XG4iLAor CSAgICAgICBfX2Z1bmNfXywgcmVnbnIsICEhKGZsYWdzICYgUkVHTUFQX1VTQl9IRUFERVJfRkxB R19JTiksIGZsYWdzLCBsZW4sCisJICAgICAgIGJ1ZiA9PSB0cmFuc2Zlci0+YnVmID8gInllcyIg OiAibm8iLCBjdHgtPnJ1aWYtPnRhZyk7CisKKwloZWFkZXIgPSB0cmFuc2Zlci0+aGVhZGVyX3Vy Yi0+dHJhbnNmZXJfYnVmZmVyOworCWhlYWRlci0+c2lnbmF0dXJlID0gY3B1X3RvX2xlMzIoUkVH TUFQX1VTQl9IRUFERVJfU0lHTkFUVVJFKTsKKwloZWFkZXItPmluZGV4ID0gY3B1X3RvX2xlMTYo Y3R4LT5pbmRleCk7CisJaGVhZGVyLT50YWcgPSBjcHVfdG9fbGUxNihjdHgtPnJ1aWYtPnRhZyk7 CisJaGVhZGVyLT5mbGFncyA9IGNwdV90b19sZTMyKGZsYWdzKTsKKwloZWFkZXItPnJlZ25yID0g Y3B1X3RvX2xlMzIocmVnbnIpOworCWhlYWRlci0+bGVuZ3RoID0gY3B1X3RvX2xlMzIobGVuKTsK KworCXJldCA9IHJlZ21hcF91c2Jfc3VibWl0X3VyYih0cmFuc2Zlci0+aGVhZGVyX3VyYiwgdHJh bnNmZXIpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisKKwlpZiAoZmxhZ3MgJiBSRUdNQVBf VVNCX0hFQURFUl9GTEFHX0lOKQorCQl1cmIgPSB0cmFuc2Zlci0+YnVmX2luX3VyYjsKKwllbHNl CisJCXVyYiA9IHRyYW5zZmVyLT5idWZfb3V0X3VyYjsKKworCXVyYi0+dHJhbnNmZXJfYnVmZmVy ID0gYnVmOworCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IGxlbjsKKworCXJldCA9IHJl Z21hcF91c2Jfc3VibWl0X3VyYih1cmIsIHRyYW5zZmVyKTsKKwlpZiAocmV0KQorCQlnb3RvIGVy cm9yOworCisJcmV0ID0gcmVnbWFwX3VzYl9zdWJtaXRfdXJiKHRyYW5zZmVyLT5zdGF0dXNfdXJi LCB0cmFuc2Zlcik7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKworCXJldHVybiAwOworCitl cnJvcjoKKwlyZWdtYXBfdXNiX2tpbGxfdHJhbnNmZXJzKGN0eCk7CisKKwlyZXR1cm4gcmV0Owor fQorCitzdGF0aWMgaW50IHJlZ21hcF91c2Jfd2FpdF9hbmNob3Ioc3RydWN0IHJlZ21hcF91c2Jf dHJhbnNmZXIgKnRyYW5zZmVyKQoreworCWludCByZW1haW47CisKKwlyZW1haW4gPSB1c2Jfd2Fp dF9hbmNob3JfZW1wdHlfdGltZW91dCgmdHJhbnNmZXItPmFuY2hvciwgNTAwMCk7CisJaWYgKCFy ZW1haW4pIHsKKwkJLyogS2lsbCBwZW5kaW5nIGZpcnN0ICovCisJCWlmICh0cmFuc2ZlciA9PSB0 cmFuc2Zlci0+Y3R4LT50cmFuc2ZlcnNbMF0pCisJCQl1c2Jfa2lsbF9hbmNob3JlZF91cmJzKCZ0 cmFuc2Zlci0+Y3R4LT50cmFuc2ZlcnNbMV0tPmFuY2hvcik7CisJCWVsc2UKKwkJCXVzYl9raWxs X2FuY2hvcmVkX3VyYnMoJnRyYW5zZmVyLT5jdHgtPnRyYW5zZmVyc1swXS0+YW5jaG9yKTsKKwkJ dXNiX2tpbGxfYW5jaG9yZWRfdXJicygmdHJhbnNmZXItPmFuY2hvcik7CisKKwkJcmV0dXJuIC1F VElNRURPVVQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVnbWFwX3VzYl90 cmFuc2Zlcl9kZWNvbXByZXNzKHN0cnVjdCByZWdtYXBfdXNiX3RyYW5zZmVyICp0cmFuc2ZlcikK K3sKKwl1bnNpZ25lZCBpbnQgbGVuZ3RoLCBhY3R1YWxfbGVuZ3RoOworCXU4IGNvbXByZXNzaW9u OworCXZvaWQgKmRlc3Q7CisJaW50IHJldDsKKworCXNwaW5fbG9ja19pcnEoJnRyYW5zZmVyLT5s b2NrKTsKKwlsZW5ndGggPSB0cmFuc2Zlci0+YnVmX2luX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xl bmd0aDsKKwlhY3R1YWxfbGVuZ3RoID0gdHJhbnNmZXItPmFjdHVhbF9sZW5ndGg7CisJY29tcHJl c3Npb24gPSB0cmFuc2Zlci0+Y29tcHJlc3Npb247CisJdHJhbnNmZXItPmNvbXByZXNzaW9uID0g MDsKKwlkZXN0ID0gdHJhbnNmZXItPmJ1Zl9pbl9kZXN0OworCXNwaW5fdW5sb2NrX2lycSgmdHJh bnNmZXItPmxvY2spOworCisJdWRlYnVnKDMsICIlczogZGVzdD0lcHggbGVuZ3RoPSV1IGFjdHVh bF9sZW5ndGg9JXVcbiIsCisJICAgICAgIF9fZnVuY19fLCBkZXN0LCBsZW5ndGgsIGFjdHVhbF9s ZW5ndGgpOworCisJaWYgKCFhY3R1YWxfbGVuZ3RoKSAvKiBUaGlzIHRyYW5zZmVyIGhhcyBub3Qg YmVlbiB1c2VkICovCisJCXJldHVybiAwOworCisJaWYgKCFsZW5ndGgpIC8qIEZJWE1FOiBuZWNl c3Nhcnk/ICovCisJCXJldHVybiAtRUlOVkFMOworCisJcmVnbWFwX3VzYl9zdGF0c19hZGQodHJh bnNmZXItPmN0eC0+c3RhdHNfYWN0dWFsX2xlbmd0aCwgYWN0dWFsX2xlbmd0aCk7CisKKwlpZiAo IWNvbXByZXNzaW9uKSB7CisJCWlmIChhY3R1YWxfbGVuZ3RoICE9IGxlbmd0aCkKKwkJCXJldHVy biAtRVJFTU9URUlPOworCisJCXJldHVybiAwOworCX0KKworCWlmIChhY3R1YWxfbGVuZ3RoID09 IGxlbmd0aCkgeyAvKiBEZXZpY2UgZGlkIG5vdCBjb21wcmVzcyAqLworCQltZW1jcHkoZGVzdCwg dHJhbnNmZXItPmJ1ZiwgbGVuZ3RoKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGNvbXByZXNz aW9uICYgUkVHTUFQX1VTQl9DT01QUkVTU0lPTl9MWjQpIHsKKwkJcmV0ID0gTFo0X2RlY29tcHJl c3Nfc2FmZSh0cmFuc2Zlci0+YnVmLCBkZXN0LAorCQkJCQkgIGFjdHVhbF9sZW5ndGgsIHRyYW5z ZmVyLT5idWZzaXplKTsKKwkJdWRlYnVnKDMsICIgICAgZGVjb21wcmVzczogcmV0PSVkXG4iLCBy ZXQpOworCX0gZWxzZSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChyZXQgPCAwIHx8 IHJldCAhPSBsZW5ndGgpCisJCXJldHVybiAtRVJFTU9URUlPOworCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgcmVnbWFwX3VzYl90cmFuc2ZlcihzdHJ1Y3QgcmVnbWFwX3VzYl9jb250ZXh0 ICpjdHgsIGJvb2wgaW4sCisJCQkgICAgICAgY29uc3Qgdm9pZCAqcmVnLCB2b2lkICpidWYsIHNp emVfdCBsZW4pCit7CisJc3RydWN0IHJlZ21hcF91c2JfdHJhbnNmZXIgKnRyYW5zZmVyID0gTlVM TDsKKwl1bnNpZ25lZCBpbnQgaSwgcmVnbnIsIGFjdHVhbF9sZW5ndGg7CisJc2l6ZV90IGNodW5r LCB0cmxlbiwgY29tcGxlbiA9IDA7CisJc2l6ZV90IG9yZ2xlbiA9IGxlbjsKKwlrdGltZV90IHN0 YXJ0LCBlbmQ7CisJdm9pZCAqdHJidWY7CisJdTMyIGZsYWdzOworCWludCByZXQ7CisKKwlyZWdu ciA9ICoodTMyICopcmVnOworCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQlzdHJ1Y3Qg cmVnbWFwX3VzYl90cmFuc2ZlciAqdHJhbnNmZXIgPSBjdHgtPnRyYW5zZmVyc1tpXTsKKworCQlz cGluX2xvY2tfaXJxKCZ0cmFuc2Zlci0+bG9jayk7CisJCXRyYW5zZmVyLT5hY3R1YWxfbGVuZ3Ro ID0gMDsKKwkJdHJhbnNmZXItPmNvbXByZXNzaW9uID0gMDsKKwkJdHJhbnNmZXItPnN0YXR1cyA9 IDA7CisJCXNwaW5fdW5sb2NrX2lycSgmdHJhbnNmZXItPmxvY2spOworCX0KKworCS8qIEZJWE1F OiBUaGlzIGRpZCBub3Qgd29yayAqLworCS8qIFVzZSAyIHRyYW5zZmVycyB0byBtYXhpbWl6ZSBj b21wcmVzc2VkIHRyYW5zZmVycyAqLworCWlmICgwICYmIGN0eC0+Y29tcHJlc3Npb24gJiYKKwkg ICAgY3R4LT50cmFuc2ZlcnNbMF0tPmJ1ZnNpemUgPT0gY3R4LT50cmFuc2ZlcnNbMV0tPmJ1ZnNp emUgJiYKKwkgICAgbGVuID4gMTI4ICYmIGxlbiA8PSBjdHgtPnRyYW5zZmVyc1swXS0+YnVmc2l6 ZSkKKwkJY29tcGxlbiA9IGxlbiAvIDI7CisKKwltdXRleF9sb2NrKCZjdHgtPnJ1aWYtPmxvY2sp OworCisJdWRlYnVnKDIsICJcbiVzOiByZWducj0weCV4LCBpbj0ldSBsZW49JXp1LCBidWY9JXB4 LCBpc192bWFsbG9jPSV1XG4iLAorCSAgICAgICBfX2Z1bmNfXywgcmVnbnIsIGluLCBsZW4sIGJ1 ZiwgaXNfdm1hbGxvY19hZGRyKGJ1ZikpOworCisJc3RhcnQgPSBrdGltZV9nZXQoKTsKKworCWkg PSAwOworCXdoaWxlIChsZW4pIHsKKwkJdHJhbnNmZXIgPSBjdHgtPnRyYW5zZmVyc1tpXTsKKwkJ aSA9ICFpOworCisJCWNodW5rID0gbWluKGNvbXBsZW4gPyBjb21wbGVuIDogdHJhbnNmZXItPmJ1 ZnNpemUsIGxlbik7CisJCXRybGVuID0gY2h1bms7CisJCWZsYWdzID0gMDsKKworCQlyZWdtYXBf dXNiX3N0YXRzX2FkZF9sZW5ndGgoY3R4LCBjaHVuayk7CisKKwkJcmV0ID0gcmVnbWFwX3VzYl93 YWl0X2FuY2hvcih0cmFuc2Zlcik7CisJCWlmIChyZXQpIHsKKwkJCXVkZWJ1ZygwLCAiRkFJTCBm aXJzdCB3YWl0ICVkXG4iLCByZXQpOworCQkJZ290byBlcnJvcjsKKwkJfQorCisJCXNwaW5fbG9j a19pcnEoJnRyYW5zZmVyLT5sb2NrKTsKKwkJcmV0ID0gdHJhbnNmZXItPnN0YXR1czsKKwkJYWN0 dWFsX2xlbmd0aCA9IHRyYW5zZmVyLT5hY3R1YWxfbGVuZ3RoOworCQlzcGluX3VubG9ja19pcnEo JnRyYW5zZmVyLT5sb2NrKTsKKwkJaWYgKHJldCkgeworCQkJdWRlYnVnKDAsICJGQUlMIHRyYW5z ZmVyICVkXG4iLCByZXQpOworCQkJZ290byBlcnJvcjsKKwkJfQorCisJCWlmIChpbiAmJiBjdHgt PmNvbXByZXNzaW9uICYmIGFjdHVhbF9sZW5ndGgpIHsKKwkJCXJldCA9IHJlZ21hcF91c2JfdHJh bnNmZXJfZGVjb21wcmVzcyh0cmFuc2Zlcik7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gZXJyb3I7 CisJCX0KKworCQl0cmJ1ZiA9IGJ1ZjsKKworCQlpZiAoIWluKSB7CisJCQlyZXQgPSAwOworCQkJ LyogTFo0X21pbkxlbmd0aCA9IDEzLCB1c2UgdGhlIG5leHQgcG93ZXIgb2YgdHdvIHZhbHVlICov CisJCQlpZiAoY3R4LT5jb21wcmVzc2lvbiAmIFJFR01BUF9VU0JfQ09NUFJFU1NJT05fTFo0ICYm IGNodW5rID49IDE2KSB7CisJCQkJcmV0ID0gTFo0X2NvbXByZXNzX2RlZmF1bHQoYnVmLCB0cmFu c2Zlci0+YnVmLCBjaHVuaywKKwkJCQkJCQkgICBjaHVuaywgY3R4LT5sejRfY29tcF9tZW0pOwor CQkJCXVkZWJ1ZygzLCAiICAgIGNvbXByZXNzWyV1XShjaHVuaz0lenUpOiByZXQ9JWRcbiIsICFp LCBjaHVuaywgcmV0KTsKKwkJCX0KKwkJCWlmIChyZXQgPiAwKSB7CisJCQkJZmxhZ3MgfD0gUkVH TUFQX1VTQl9DT01QUkVTU0lPTl9MWjQ7CisJCQkJdHJidWYgPSB0cmFuc2Zlci0+YnVmOworCQkJ CXRybGVuID0gcmV0OworCQkJfSBlbHNlIGlmIChpc192bWFsbG9jX2FkZHIoYnVmKSkgeworCQkJ CW1lbWNweSh0cmFuc2Zlci0+YnVmLCBidWYsIGNodW5rKTsKKwkJCQl0cmJ1ZiA9IHRyYW5zZmVy LT5idWY7CisJCQl9CisJCQlyZWdtYXBfdXNiX3N0YXRzX2FkZChjdHgtPnN0YXRzX2FjdHVhbF9s ZW5ndGgsIHRybGVuKTsKKwkJfSBlbHNlIHsKKwkJCWZsYWdzIHw9IFJFR01BUF9VU0JfSEVBREVS X0ZMQUdfSU47CisJCQlpZiAoY3R4LT5jb21wcmVzc2lvbiAmIFJFR01BUF9VU0JfQ09NUFJFU1NJ T05fTFo0ICYmIHRybGVuID49IDE2KSB7CisJCQkJZmxhZ3MgfD0gUkVHTUFQX1VTQl9DT01QUkVT U0lPTl9MWjQ7CisJCQkJdHJidWYgPSB0cmFuc2Zlci0+YnVmOworCisJCQkJc3Bpbl9sb2NrX2ly cSgmdHJhbnNmZXItPmxvY2spOworCQkJCXRyYW5zZmVyLT5jb21wcmVzc2lvbiA9IFJFR01BUF9V U0JfQ09NUFJFU1NJT05fTFo0OworCQkJCXRyYW5zZmVyLT5idWZfaW5fZGVzdCA9IGJ1ZjsKKwkJ CQlzcGluX3VubG9ja19pcnEoJnRyYW5zZmVyLT5sb2NrKTsKKwkJCX0KKwkJfQorCisJCXJldCA9 IHJlZ21hcF91c2Jfc3VibWl0X3RyYW5zZmVyKHRyYW5zZmVyLCByZWduciwgZmxhZ3MsIHRyYnVm LCB0cmxlbik7CisJCWlmIChyZXQpIHsKKwkJCXVkZWJ1ZygwLCAiRkFJTCBzdWJtaXQgJWRcbiIs IHJldCk7CisJCQlnb3RvIGVycm9yOworCQl9CisKKwkJbGVuIC09IGNodW5rOworCQlidWYgKz0g Y2h1bms7CisJCXJlZ25yICs9IGNodW5rIC8gY3R4LT52YWxfYnl0ZXM7CisJfQorCisJcmV0ID0g cmVnbWFwX3VzYl93YWl0X2FuY2hvcih0cmFuc2Zlcik7CisJaWYgKHJldCkgeworCQl1ZGVidWco MCwgIkZBSUwgc2Vjb25kIHdhaXQlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlm b3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCXN0cnVjdCByZWdtYXBfdXNiX3RyYW5zZmVyICp0 cmFuc2ZlciA9IGN0eC0+dHJhbnNmZXJzW2ldOworCisJCXNwaW5fbG9ja19pcnEoJnRyYW5zZmVy LT5sb2NrKTsKKwkJcmV0ID0gdHJhbnNmZXItPnN0YXR1czsKKwkJc3Bpbl91bmxvY2tfaXJxKCZ0 cmFuc2Zlci0+bG9jayk7CisJCWlmIChyZXQpIHsKKwkJCXVkZWJ1ZygwLCAiRkFJTCB0cmFuc2Zl cjJbJXVdICVkXG4iLCBpLCByZXQpOworCQkJZ290byBlcnJvcjsKKwkJfQorCX0KKworCWlmIChp biAmJiBjdHgtPmNvbXByZXNzaW9uKSB7CisJCXJldCA9IHJlZ21hcF91c2JfdHJhbnNmZXJfZGVj b21wcmVzcyhjdHgtPnRyYW5zZmVyc1swXSk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycm9yOwor CQlyZXQgPSByZWdtYXBfdXNiX3RyYW5zZmVyX2RlY29tcHJlc3MoY3R4LT50cmFuc2ZlcnNbMV0p OworCX0KKworZXJyb3I6CisJLyoKKwkgKiBGSVhNRTogV2hhdCBlcnJvcnMgc2hvdWxkIHdhcnJh bnQgYSByZXNldD8KKwkgKiAgICAgICAgVmVyaWZ5IHRoYXQgdGhlIERPQyBzZWN0aW9uIGlzIGNv cnJlY3QuCisJICovCisJaWYgKHJldCA9PSAtRVBJUEUgfHwgcmV0ID09IC1FVElNRURPVVQpCisJ CXJldCA9IHJlZ21hcF91c2JfcHJvdG9jb2xfcmVzZXQoY3R4KTsKKworCWlmIChyZXQpCisJCXJl Z21hcF91c2Jfc3RhdHNfYWRkKGN0eC0+bnVtX2Vycm9ycywgMSk7CisKKwlpZiAoZGVidWcgPj0g MikgeworCQllbmQgPSBrdGltZV9nZXQoKTsKKwkJcHJfZGVidWcoIiVzOiByZXQ9JWQgJWxkIGtC L3MgKCVsbGQgbXMpXG4iLCBfX2Z1bmNfXywgcmV0LAorCQkJIG11ZF9kcm1fdGhyb3VnaHB1dChz dGFydCwgZW5kLCBvcmdsZW4pLAorCQkJIGt0aW1lX21zX2RlbHRhKGVuZCwgc3RhcnQpKTsKKwl9 CisKKwltdXRleF91bmxvY2soJmN0eC0+cnVpZi0+bG9jayk7CisKKwlyZXR1cm4gcmV0OworfQor CitzdGF0aWMgaW50IHJlZ21hcF91c2JfZ2F0aGVyX3dyaXRlKHZvaWQgKmNvbnRleHQsCisJCQkJ ICAgY29uc3Qgdm9pZCAqcmVnLCBzaXplX3QgcmVnX2xlbiwKKwkJCQkgICBjb25zdCB2b2lkICp2 YWwsIHNpemVfdCB2YWxfbGVuKQoreworCXJldHVybiByZWdtYXBfdXNiX3RyYW5zZmVyKGNvbnRl eHQsIGZhbHNlLCByZWcsICh2b2lkICopdmFsLCB2YWxfbGVuKTsKK30KKworc3RhdGljIGludCBy ZWdtYXBfdXNiX3dyaXRlKHZvaWQgKmNvbnRleHQsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBj b3VudCkKK3sKKwlzdHJ1Y3QgcmVnbWFwX3VzYl9jb250ZXh0ICpjdHggPSBjb250ZXh0OworCXNp emVfdCB2YWxfbGVuID0gY291bnQgLSBzaXplb2YodTMyKTsKKwl2b2lkICp2YWw7CisJaW50IHJl dDsKKworCS8qIGJ1ZmZlciBuZWVkcyB0byBiZSBwcm9wZXJseSBhbGlnbmVkIGZvciBETUEgdXNl ICovCisJdmFsID0ga21lbWR1cChkYXRhICsgc2l6ZW9mKHUzMiksIHZhbF9sZW4sIEdGUF9LRVJO RUwpOworCWlmICghdmFsKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldCA9IHJlZ21hcF91c2Jf Z2F0aGVyX3dyaXRlKGN0eCwgZGF0YSwgc2l6ZW9mKHUzMiksIHZhbCwgdmFsX2xlbik7CisJa2Zy ZWUodmFsKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcmVnbWFwX3VzYl9yZWFk KHZvaWQgKmNvbnRleHQsIGNvbnN0IHZvaWQgKnJlZ19idWYsIHNpemVfdCByZWdfc2l6ZSwKKwkJ CSAgIHZvaWQgKnZhbF9idWYsIHNpemVfdCB2YWxfc2l6ZSkKK3sKKwlyZXR1cm4gcmVnbWFwX3Vz Yl90cmFuc2Zlcihjb250ZXh0LCB0cnVlLCByZWdfYnVmLCB2YWxfYnVmLCB2YWxfc2l6ZSk7Cit9 CisKK3N0YXRpYyB2b2lkIHJlZ21hcF91c2JfZnJlZV9jb250ZXh0KHZvaWQgKmNvbnRleHQpCit7 CisJc3RydWN0IHJlZ21hcF91c2JfY29udGV4dCAqY3R4ID0gY29udGV4dDsKKworCXVkZWJ1Zygx LCAiJXM6XG4iLCBfX2Z1bmNfXyk7CisKKwlyZWdtYXBfdXNiX2ludGVyZmFjZV9wdXQoY3R4LT5y dWlmKTsKKwlyZWdtYXBfdXNiX2ZyZWVfdHJhbnNmZXJzKGN0eCk7CisJa2ZyZWUoY3R4LT5sejRf Y29tcF9tZW0pOworCWtmcmVlKGN0eCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFw X2J1cyByZWdtYXBfdXNiID0geworCS53cml0ZSA9IHJlZ21hcF91c2Jfd3JpdGUsCisJLmdhdGhl cl93cml0ZSA9IHJlZ21hcF91c2JfZ2F0aGVyX3dyaXRlLAorCS5yZWFkID0gcmVnbWFwX3VzYl9y ZWFkLAorCS5mcmVlX2NvbnRleHQgPSByZWdtYXBfdXNiX2ZyZWVfY29udGV4dCwKKwkvKiByZWdt YXBfdXNiX3RyYW5zZmVyKCkgaGFuZGxlcyByZWdfZm9ybWF0OiAqLworCS5yZWdfZm9ybWF0X2Vu ZGlhbl9kZWZhdWx0ID0gUkVHTUFQX0VORElBTl9OQVRJVkUsCisJLnZhbF9mb3JtYXRfZW5kaWFu X2RlZmF1bHQgPSBSRUdNQVBfRU5ESUFOX0xJVFRMRSwKK307CisKKyNpZmRlZiBDT05GSUdfREVC VUdfRlMKK3N0YXRpYyBpbnQgcmVnbWFwX3VzYl9kZWJ1Z2ZzX3VzYmluZm9fc2hvdyhzdHJ1Y3Qg c2VxX2ZpbGUgKnMsIHZvaWQgKmlnbm9yZWQpCit7CisJc3RydWN0IHJlZ21hcF91c2JfY29udGV4 dCAqY3R4ID0gcy0+cHJpdmF0ZTsKKworCW11dGV4X2xvY2soJmN0eC0+cnVpZi0+bG9jayk7CisK KwlzZXFfcHJpbnRmKHMsICJVU0IgaW50ZXJmYWNlOiAgICAgJXNcbiIsIGRldl9uYW1lKCZjdHgt PnJ1aWYtPmludGVyZmFjZS0+ZGV2KSk7CisJc2VxX3ByaW50ZihzLCAiUmVnbWFwIGluZGV4OiAg ICAgICV1XG4iLCBjdHgtPmluZGV4KTsKKwlzZXFfcHJpbnRmKHMsICJNYXggdHJhbnNmZXIgc2l6 ZTogJXVcbiIsIGN0eC0+bWF4X3RyYW5zZmVyX3NpemUpOworCXNlcV9wcmludGYocywgIlRhZzog ICAgICAgICAgICAgICAldVxuIiwgY3R4LT5ydWlmLT50YWcpOworCXNlcV9wcmludGYocywgIk51 bWJlciBvZiBlcnJvcnM6ICAldVxuIiwgY3R4LT5udW1fZXJyb3JzKTsKKwlzZXFfcHJpbnRmKHMs ICJOdW1iZXIgb2YgcmVzZXRzOiAgJXVcbiIsIGN0eC0+bnVtX3Jlc2V0cyk7CisKKwlzZXFfcHV0 cyhzLCAiQ29tcHJlc3Npb246ICAgICAgIik7CisJaWYgKGN0eC0+Y29tcHJlc3Npb24gJiBSRUdN QVBfVVNCX0NPTVBSRVNTSU9OX0xaNCkKKwkJc2VxX3B1dHMocywgIiBsejQiKTsKKwlzZXFfcHV0 cyhzLCAiXG4iKTsKKworCWlmIChjdHgtPmNvbXByZXNzaW9uKSB7CisJCXU2NCByZW1haW5kZXI7 CisJCXU2NCByYXRpbyA9IGRpdjY0X3U2NF9yZW0oY3R4LT5zdGF0c19sZW5ndGgsIGN0eC0+c3Rh dHNfYWN0dWFsX2xlbmd0aCwKKwkJCQkJICAmcmVtYWluZGVyKTsKKwkJdTY0IHJhdGlvX2ZyYWMg PSBkaXY2NF91NjQocmVtYWluZGVyICogMTAsIGN0eC0+c3RhdHNfYWN0dWFsX2xlbmd0aCk7CisK KwkJc2VxX3ByaW50ZihzLCAiQ29tcHJlc3Npb24gcmF0aW86ICVsbHUuJWxsdVxuIiwgcmF0aW8s IHJhdGlvX2ZyYWMpOworCX0KKworCW11dGV4X3VubG9jaygmY3R4LT5ydWlmLT5sb2NrKTsKKwor CXJldHVybiAwOworfQorCitERUZJTkVfU0hPV19BVFRSSUJVVEUocmVnbWFwX3VzYl9kZWJ1Z2Zz X3VzYmluZm8pOworCitzdGF0aWMgdm9pZCByZWdtYXBfdXNiX2RlYnVnZnNfaW5pdChzdHJ1Y3Qg cmVnbWFwICptYXApCit7CisJaWYgKCFtYXAtPmRlYnVnZnMpCisJCXJldHVybjsKKworCWRlYnVn ZnNfY3JlYXRlX2ZpbGUoInVzYmluZm8iLCAwNDAwLCBtYXAtPmRlYnVnZnMsIG1hcC0+YnVzX2Nv bnRleHQsCisJCQkgICAgJnJlZ21hcF91c2JfZGVidWdmc191c2JpbmZvX2ZvcHMpOworfQorI2Vs c2UKK3N0YXRpYyB2b2lkIHJlZ21hcF91c2JfZGVidWdmc19pbml0KHN0cnVjdCByZWdtYXAgKm1h cCkge30KKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHJlZ21hcF91c2JfY29udGV4dCAqCityZWdt YXBfdXNiX2dlbl9jb250ZXh0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsIHVuc2ln bmVkIGludCBpbmRleCwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnICpjb25m aWcpCit7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqYWx0ID0gaW50ZXJmYWNlLT5jdXJf YWx0c2V0dGluZzsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiID0gaW50ZXJmYWNlX3RvX3VzYmRl dihpbnRlcmZhY2UpOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBfaW4sICpl cF9vdXQ7CisJdW5zaWduZWQgaW50IG51bV9yZWdtYXBzLCBtYXhfdHJhbnNmZXJfc2l6ZTsKKwlz dHJ1Y3QgcmVnbWFwX3VzYl9tYXBfZGVzY3JpcHRvciBtYXBfZGVzYzsKKwlzdHJ1Y3QgcmVnbWFw X3VzYl9jb250ZXh0ICpjdHg7CisJaW50IHJldDsKKworCXJldCA9IHJlZ21hcF91c2JfZ2V0X2lu dGVyZmFjZV9kZXNjcmlwdG9yKGludGVyZmFjZSwgJm51bV9yZWdtYXBzKTsKKwlpZiAocmV0KQor CQlyZXR1cm4gRVJSX1BUUihyZXQpOworCisJaWYgKCFudW1fcmVnbWFwcykKKwkJcmV0dXJuIEVS Ul9QVFIoLUVJTlZBTCk7CisKKwlpZiAoaW5kZXggPj0gbnVtX3JlZ21hcHMpCisJCXJldHVybiBF UlJfUFRSKC1FTk9FTlQpOworCisJcmV0ID0gcmVnbWFwX3VzYl9nZXRfbWFwX2Rlc2NyaXB0b3Io aW50ZXJmYWNlLCBpbmRleCwgJm1hcF9kZXNjKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gRVJSX1BU UihyZXQpOworCisJaWYgKGNvbmZpZy0+cmVnX2JpdHMgIT0gMzIgfHwKKwkgICAgY29uZmlnLT52 YWxfYml0cyAhPSBtYXBfZGVzYy5iUmVnaXN0ZXJWYWx1ZUJpdHMpCisJCXJldHVybiBFUlJfUFRS KC1FSU5WQUwpOworCisJbWF4X3RyYW5zZmVyX3NpemUgPSAxIDw8IG1hcF9kZXNjLmJNYXhUcmFu c2ZlclNpemVPcmRlcjsKKwlpZiAobWF4X3RyYW5zZmVyX3NpemUgPCAoY29uZmlnLT52YWxfYml0 cyAvIDgpKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCW1heF90cmFuc2Zlcl9zaXpl ID0gbWluX3QodW5zaWduZWQgbG9uZywgbWF4X3RyYW5zZmVyX3NpemUsIEtNQUxMT0NfTUFYX1NJ WkUpOworCisJcmV0ID0gdXNiX2ZpbmRfY29tbW9uX2VuZHBvaW50cyhhbHQsICZlcF9pbiwgJmVw X291dCwgTlVMTCwgTlVMTCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKKwor CWN0eCA9IGt6YWxsb2Moc2l6ZW9mKCpjdHgpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWN0eCkKKwkJ cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwljdHgtPnVzYiA9IHVzYjsKKwljdHgtPmluZGV4 ID0gaW5kZXg7CisJY3R4LT5pZm51bSA9IGFsdC0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyOworCWN0 eC0+dmFsX2J5dGVzID0gY29uZmlnLT52YWxfYml0cyAvIDg7CisJY3R4LT5jb21wcmVzc2lvbiA9 IG1hcF9kZXNjLmJDb21wcmVzc2lvbjsKKwljdHgtPm1heF90cmFuc2Zlcl9zaXplID0gbWF4X3Ry YW5zZmVyX3NpemU7CisJY3R4LT5pbl9waXBlID0gdXNiX3JjdmJ1bGtwaXBlKHVzYiwgdXNiX2Vu ZHBvaW50X251bShlcF9pbikpOworCWN0eC0+b3V0X3BpcGUgPSB1c2Jfc25kYnVsa3BpcGUodXNi LCB1c2JfZW5kcG9pbnRfbnVtKGVwX291dCkpOworCisJaWYgKGN0eC0+Y29tcHJlc3Npb24gJiBS RUdNQVBfVVNCX0NPTVBSRVNTSU9OX0xaNCkgeworCQljdHgtPmx6NF9jb21wX21lbSA9IGttYWxs b2MoTFo0X01FTV9DT01QUkVTUywgR0ZQX0tFUk5FTCk7CisJCWlmICghY3R4LT5sejRfY29tcF9t ZW0pIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGVycl9mcmVlOworCQl9CisJfQorCisJ cmV0ID0gcmVnbWFwX3VzYl9hbGxvY190cmFuc2ZlcnMoY3R4KTsKKwlpZiAocmV0KQorCQlnb3Rv IGVycl9mcmVlOworCisJY3R4LT5ydWlmID0gcmVnbWFwX3VzYl9pbnRlcmZhY2VfZ2V0KGludGVy ZmFjZSk7CisJaWYgKElTX0VSUihjdHgtPnJ1aWYpKSB7CisJCXJldCA9IFBUUl9FUlIoY3R4LT5y dWlmKTsKKwkJZ290byBlcnJfZnJlZV90cmFuc2ZlcnM7CisJfQorCisJcmV0dXJuIGN0eDsKKwor ZXJyX2ZyZWVfdHJhbnNmZXJzOgorCXJlZ21hcF91c2JfZnJlZV90cmFuc2ZlcnMoY3R4KTsKK2Vy cl9mcmVlOgorCWtmcmVlKGN0eC0+bHo0X2NvbXBfbWVtKTsKKwlrZnJlZShjdHgpOworCisJcmV0 dXJuIEVSUl9QVFIocmV0KTsKK30KKworc3RydWN0IHJlZ21hcCAqX19kZXZtX3JlZ21hcF9pbml0 X3VzYihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICAgc3RydWN0IHVzYl9pbnRlcmZhY2Ug KmludGVyZmFjZSwKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgaW5kZXgsCisJCQkJICAgICAgY29u c3Qgc3RydWN0IHJlZ21hcF9jb25maWcgKmNvbmZpZywKKwkJCQkgICAgICBzdHJ1Y3QgbG9ja19j bGFzc19rZXkgKmxvY2tfa2V5LAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKmxvY2tfbmFtZSkKK3sK KwlzdHJ1Y3QgcmVnbWFwX3VzYl9jb250ZXh0ICpjdHg7CisJc3RydWN0IHJlZ21hcCAqbWFwOwor CisJY3R4ID0gcmVnbWFwX3VzYl9nZW5fY29udGV4dChpbnRlcmZhY2UsIGluZGV4LCBjb25maWcp OworCWlmIChJU19FUlIoY3R4KSkKKwkJcmV0dXJuIEVSUl9DQVNUKGN0eCk7CisKKwltYXAgPSBf X2Rldm1fcmVnbWFwX2luaXQoZGV2LCAmcmVnbWFwX3VzYiwgY3R4LCBjb25maWcsCisJCQkJIGxv Y2tfa2V5LCBsb2NrX25hbWUpOworCWlmICghSVNfRVJSKG1hcCkpCisJCXJlZ21hcF91c2JfZGVi dWdmc19pbml0KG1hcCk7CisKKwlyZXR1cm4gbWFwOworfQorRVhQT1JUX1NZTUJPTChfX2Rldm1f cmVnbWFwX2luaXRfdXNiKTsKKworc3RhdGljIGludCByZWdtYXBfdXNiX2dldF9kZXNjcmlwdG9y KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsIHU4IHR5cGUsCisJCQkJICAgICB1OCBp bmRleCwgdm9pZCAqZGVzYywgc2l6ZV90IHNpemUpCit7CisJdTggaWZudW0gPSBpbnRlcmZhY2Ut PmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXI7CisJc3RydWN0IHVzYl9kZXZp Y2UgKnVzYiA9IGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKTsKKwl1OCAqYnVmOworCWlu dCByZXQ7CisKKwlidWYgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmICghYnVmKQor CQlyZXR1cm4gLUVOT01FTTsKKworCXJldCA9IHVzYl9jb250cm9sX21zZyh1c2IsIHVzYl9yY3Zj dHJscGlwZSh1c2IsIDApLAorCQkJICAgICAgVVNCX1JFUV9HRVRfREVTQ1JJUFRPUiwKKwkJCSAg ICAgIFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfSU5URVJGQUNFLAor CQkJICAgICAgKHR5cGUgPDwgOCkgKyBpbmRleCwgaWZudW0sIGJ1Ziwgc2l6ZSwKKwkJCSAgICAg IFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBmcmVlOworCisJ aWYgKHJldCAhPSBzaXplIHx8IGJ1ZlswXSAhPSBzaXplIHx8IGJ1ZlsxXSAhPSB0eXBlKSB7CisJ CXJldCA9IC1FTk9EQVRBOworCQlnb3RvIGZyZWU7CisJfQorCisJbWVtY3B5KGRlc2MsIGJ1Ziwg c2l6ZSk7CitmcmVlOgorCWtmcmVlKGJ1Zik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAq IHJlZ21hcF91c2JfZ2V0X2ludGVyZmFjZV9kZXNjcmlwdG9yKCkgLSBHZXQgcmVnbWFwIGludGVy ZmFjZSBkZXNjcmlwdG9yCisgKiBAaW50ZXJmYWNlOiBVU0IgaW50ZXJmYWNlCisgKiBAbnVtX3Jl Z21hcHM6IFJldHVybnMgdGhlIG51bWJlciBvZiByZWdtYXBzIHN1cHBvcnRlZCBvbiB0aGlzIGlu dGVyZmFjZQorICoKKyAqIFJldHVybnM6CisgKiBaZXJvIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVy cm9yIGNvZGUgb24gZmFpbHVyZS4KKyAqLworaW50IHJlZ21hcF91c2JfZ2V0X2ludGVyZmFjZV9k ZXNjcmlwdG9yKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCisJCQkJCXVuc2lnbmVk IGludCAqbnVtX3JlZ21hcHMpCit7CisJc3RydWN0IHJlZ21hcF91c2JfaW50ZXJmYWNlX2Rlc2Ny aXB0b3IgZGVzYzsKKwlpbnQgcmV0OworCisJcmV0ID0gcmVnbWFwX3VzYl9nZXRfZGVzY3JpcHRv cihpbnRlcmZhY2UsIFJFR01BUF9VU0JfRFRfSU5URVJGQUNFLCAwLAorCQkJCQkmZGVzYywgc2l6 ZW9mKGRlc2MpKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCSpudW1fcmVnbWFw cyA9IGRlc2MuYk51bVJlZ21hcHM7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wocmVn bWFwX3VzYl9nZXRfaW50ZXJmYWNlX2Rlc2NyaXB0b3IpOworCisvKioKKyAqIHJlZ21hcF91c2Jf Z2V0X21hcF9kZXNjcmlwdG9yKCkgLSBHZXQgcmVnbWFwIGRlc2NyaXB0b3IKKyAqIEBpbnRlcmZh Y2U6IFVTQiBpbnRlcmZhY2UKKyAqIEBpbmRleDogSW5kZXggb2YgcmVnaXN0ZXIKKyAqIEBkZXNj OiBSZXR1cm5lZCBkZXNjcmlwdG9yIChsaXR0bGUgZW5kaWFuIHJlcHJlc2VudGF0aW9uKQorICoK KyAqIFJldHVybnM6CisgKiBaZXJvIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24g ZmFpbHVyZS4KKyAqLworaW50IHJlZ21hcF91c2JfZ2V0X21hcF9kZXNjcmlwdG9yKHN0cnVjdCB1 c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCisJCQkJICB1bnNpZ25lZCBpbnQgaW5kZXgsCisJCQkJ ICBzdHJ1Y3QgcmVnbWFwX3VzYl9tYXBfZGVzY3JpcHRvciAqZGVzYykKK3sKKwlpbnQgcmV0Owor CisJcmV0ID0gcmVnbWFwX3VzYl9nZXRfZGVzY3JpcHRvcihpbnRlcmZhY2UsIFJFR01BUF9VU0Jf RFRfTUFQLCBpbmRleCwKKwkJCQkJZGVzYywgc2l6ZW9mKCpkZXNjKSk7CisJaWYgKHJldCA8IDAp CisJCXJldHVybiByZXQ7CisKKwlpZiAoZGVzYy0+bmFtZVszMV0gIT0gJ1wwJykKKwkJcmV0dXJu IC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wocmVnbWFwX3VzYl9nZXRf bWFwX2Rlc2NyaXB0b3IpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9p bmNsdWRlL2xpbnV4L3JlZ21hcC5oIGIvaW5jbHVkZS9saW51eC9yZWdtYXAuaAppbmRleCBkZmU0 OTNhYzY5MmQuLmMyNWFlMWE5ODUzOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZWdtYXAu aAorKysgYi9pbmNsdWRlL2xpbnV4L3JlZ21hcC5oCkBAIC0zMiw2ICszMiw3IEBAIHN0cnVjdCBy ZWdtYXBfcmFuZ2VfY2ZnOwogc3RydWN0IHJlZ21hcF9maWVsZDsKIHN0cnVjdCBzbmRfYWM5NzsK IHN0cnVjdCBzZHdfc2xhdmU7CitzdHJ1Y3QgdXNiX2ludGVyZmFjZTsKIAogLyogQW4gZW51bSBv ZiBhbGwgdGhlIHN1cHBvcnRlZCBjYWNoZSB0eXBlcyAqLwogZW51bSByZWdjYWNoZV90eXBlIHsK QEAgLTYxOCw2ICs2MTksMTIgQEAgc3RydWN0IHJlZ21hcCAqX19kZXZtX3JlZ21hcF9pbml0X3Nk dyhzdHJ1Y3Qgc2R3X3NsYXZlICpzZHcsCiAJCQkJIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmln ICpjb25maWcsCiAJCQkJIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqbG9ja19rZXksCiAJCQkJIGNv bnN0IGNoYXIgKmxvY2tfbmFtZSk7CitzdHJ1Y3QgcmVnbWFwICpfX2Rldm1fcmVnbWFwX2luaXRf dXNiKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgICBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAq aW50ZXJmYWNlLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCBpbmRleCwKKwkJCQkgICAgICBjb25z dCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyAqY29uZmlnLAorCQkJCSAgICAgIHN0cnVjdCBsb2NrX2Ns YXNzX2tleSAqbG9ja19rZXksCisJCQkJICAgICAgY29uc3QgY2hhciAqbG9ja19uYW1lKTsKIHN0 cnVjdCByZWdtYXAgKl9fZGV2bV9yZWdtYXBfaW5pdF9zbGltYnVzKHN0cnVjdCBzbGltX2Rldmlj ZSAqc2xpbWJ1cywKIAkJCQkgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgKmNvbmZpZywKIAkJ CQkgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICpsb2NrX2tleSwKQEAgLTk3MSw2ICs5NzgsMjIgQEAg Ym9vbCByZWdtYXBfYWM5N19kZWZhdWx0X3ZvbGF0aWxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5z aWduZWQgaW50IHJlZyk7CiAJX19yZWdtYXBfbG9ja2RlcF93cmFwcGVyKF9fZGV2bV9yZWdtYXBf aW5pdF9zZHcsICNjb25maWcsCVwKIAkJCQlzZHcsIGNvbmZpZykKIAorLyoqCisgKiBkZXZtX3Jl Z21hcF9pbml0X3VzYigpIC0gSW5pdGlhbGlzZSBtYW5hZ2VkIHJlZ2lzdGVyIG1hcAorICoKKyAq IEBkZXY6IFBhcmVudCBkZXZpY2UKKyAqIEBpbnRlcmZhY2U6IFVTQiBpbnRlcmZhY2UKKyAqIEBp bmRleDogSW5kZXggb2YgcmVnaXN0ZXIKKyAqIEBjb25maWc6IENvbmZpZ3VyYXRpb24gZm9yIHJl Z2lzdGVyIG1hcAorICoKKyAqIFRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSBhbiBFUlJfUFRSKCkg b24gZXJyb3Igb3IgYSB2YWxpZCBwb2ludGVyCisgKiB0byBhIHN0cnVjdCByZWdtYXAuIFRoZSBy ZWdtYXAgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGZyZWVkIGJ5IHRoZQorICogZGV2aWNlIG1hbmFn ZW1lbnQgY29kZS4KKyAqLworI2RlZmluZSBkZXZtX3JlZ21hcF9pbml0X3VzYihkZXYsIGludGVy ZmFjZSwgaW5kZXgsIGNvbmZpZykJCVwKKwlfX3JlZ21hcF9sb2NrZGVwX3dyYXBwZXIoX19kZXZt X3JlZ21hcF9pbml0X3VzYiwgI2NvbmZpZywJXAorCQkJCWRldiwgaW50ZXJmYWNlLCBpbmRleCwg Y29uZmlnKQorCiAvKioKICAqIGRldm1fcmVnbWFwX2luaXRfc2xpbWJ1cygpIC0gSW5pdGlhbGlz ZSBtYW5hZ2VkIHJlZ2lzdGVyIG1hcAogICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVn bWFwX3VzYi5oIGIvaW5jbHVkZS9saW51eC9yZWdtYXBfdXNiLmgKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5lMjhkNTEzOWE1M2MKLS0tIC9kZXYvbnVsbAorKysgYi9p bmNsdWRlL2xpbnV4L3JlZ21hcF91c2IuaApAQCAtMCwwICsxLDk3IEBACisvKiBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogTUlUICovCisvKgorICogQ29weXJpZ2h0IDIwMjAgTm9yYWxmIFRyw7hu bmVzCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX1JFR01BUF9VU0JfSAorI2RlZmluZSBfX0xJTlVY X1JFR01BUF9VU0JfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDx1YXBp L2xpbnV4L3VzYi9jaDkuaD4KKworc3RydWN0IHVzYl9pbnRlcmZhY2U7CisKKyNkZWZpbmUgUkVH TUFQX1VTQl9NQVhfTUFQUwkyNTUKKworI2RlZmluZSBSRUdNQVBfVVNCX0RUX0lOVEVSRkFDRQkJ KFVTQl9UWVBFX1ZFTkRPUiB8IDB4MDEpCisjZGVmaW5lIFJFR01BUF9VU0JfRFRfTUFQCQkoVVNC X1RZUEVfVkVORE9SIHwgMHgwMikKKworLyoqCisgKiBzdHJ1Y3QgcmVnbWFwX3VzYl9pbnRlcmZh Y2VfZGVzY3JpcHRvciAtIFJlZ21hcCBpbnRlcmZhY2UgZGVzY3JpcHRvcgorICogQGJMZW5ndGg6 IFNpemUgb2YgZGVzY3JpcHRvciBpbiBieXRlcworICogQGJEZXNjcmlwdG9yVHlwZTogRGVzY3Jp cHRvclR5cGUgKFJFR01BUF9VU0JfRFRfSU5URVJGQUNFKQorICogQHdOdW1SZWdtYXBzOiBOdW1i ZXIgb2YgcmVnbWFwcyBvbiB0aGlzIGludGVyZmFjZQorICovCitzdHJ1Y3QgcmVnbWFwX3VzYl9p bnRlcmZhY2VfZGVzY3JpcHRvciB7CisJX191OCBiTGVuZ3RoOworCV9fdTggYkRlc2NyaXB0b3JU eXBlOworCisJX191OCBiTnVtUmVnbWFwczsKK30gX19wYWNrZWQ7CisKKy8qKgorICogc3RydWN0 IHJlZ21hcF91c2JfbWFwX2Rlc2NyaXB0b3IgLSBSZWdtYXAgZGVzY3JpcHRvcgorICogQGJMZW5n dGg6IFNpemUgb2YgZGVzY3JpcHRvciBpbiBieXRlcworICogQGJEZXNjcmlwdG9yVHlwZTogRGVz Y3JpcHRvclR5cGUgKFJFR01BUF9VU0JfRFRfTUFQKQorICogQG5hbWU6IFJlZ2lzdGVyIG5hbWUg KE5VTCB0ZXJtaW5hdGVkKQorICogQGJSZWdpc3RlclZhbHVlQml0czogTnVtYmVyIG9mIGJpdHMg aW4gdGhlIHJlZ2lzdGVyIHZhbHVlCisgKiBAYkNvbXByZXNzaW9uOiBTdXBwb3J0ZWQgY29tcHJl c3Npb24gdHlwZXMKKyAqIEBiTWF4VHJhbnNmZXJTaXplT3JkZXI6IE1heGltdW0gdHJhbnNmZXIg c2l6ZSB0aGUgZGV2aWNlIGNhbiBoYW5kbGUgYXMgbG9nMi4KKyAqLworc3RydWN0IHJlZ21hcF91 c2JfbWFwX2Rlc2NyaXB0b3IgeworCV9fdTggYkxlbmd0aDsKKwlfX3U4IGJEZXNjcmlwdG9yVHlw ZTsKKworCV9fdTggbmFtZVszMl07CisJX191OCBiUmVnaXN0ZXJWYWx1ZUJpdHM7CisJX191OCBi Q29tcHJlc3Npb247CisjZGVmaW5lIFJFR01BUF9VU0JfQ09NUFJFU1NJT05fTFo0CUJJVCgwKQor CV9fdTggYk1heFRyYW5zZmVyU2l6ZU9yZGVyOworfSBfX3BhY2tlZDsKKworI2RlZmluZSBSRUdN QVBfVVNCX1JFUV9QUk9UT0NPTF9SRVNFVAkweGZmCS8qIFJldHVybnMgcHJldmlvdXMgZXJyb3Ig Y29kZSBhcyB1OCAqLworCisvKioKKyAqIHN0cnVjdCByZWdtYXBfdXNiX2hlYWRlciAtIFRyYW5z ZmVyIGhlYWRlcgorICogQHNpZ25hdHVyZTogTWFnaWMgdmFsdWUgKDB4MjM4OWFiYzIpCisgKiBA aW5kZXg6IEluZGV4IG9mIGFkcmVzc2VkIHJlZ2lzdGVyCisgKiBAdGFnOiBTZXF1ZW50aWFsIHRy YW5zZmVyIG51bWJlcgorICogQGZsYWdzOiBUcmFuc2ZlciBmbGFncworICogQHJlZ25yOiBSZWdp c3RlciBudW1iZXIKKyAqIEBsZW5ndGg6IFRyYW5zZmVyIGxlbmd0aAorICovCitzdHJ1Y3QgcmVn bWFwX3VzYl9oZWFkZXIgeworI2RlZmluZSBSRUdNQVBfVVNCX0hFQURFUl9TSUdOQVRVUkUJMHgy Mzg5YWJjMgorCV9fbGUzMiBzaWduYXR1cmU7CisJX19sZTE2IGluZGV4OworCV9fbGUxNiB0YWc7 CisJX19sZTMyIGZsYWdzOworI2RlZmluZSBSRUdNQVBfVVNCX0hFQURFUl9GTEFHX0lOCUJJVCgz MSkKKy8qIEZpcnN0IDggYml0cyBhcmUgdGhlIHNhbWUgYXMgdGhlIGRlc2NyaXB0b3IgY29tcHJl c3Npb24gYml0cyAqLworI2RlZmluZSBSRUdNQVBfVVNCX0hFQURFUl9GTEFHX0NPTVBSRVNTSU9O X01BU0sJMHhmZgorCV9fbGUzMiByZWducjsKKwlfX2xlMzIgbGVuZ3RoOworfSBfX3BhY2tlZDsK KworLyoqCisgKiBzdHJ1Y3QgcmVnbWFwX3VzYl9zdGF0dXMgLSBUcmFuc2ZlciBzdGF0dXMKKyAq IEBzaWduYXR1cmU6IE1hZ2ljIHZhbHVlICgweDgzZTdiODAzKQorICogQGluZGV4OiBJbmRleCBv ZiBhZHJlc3NlZCByZWdpc3RlcgorICogQHRhZzogU2VxdWVudGlhbCB0cmFuc2ZlciBudW1iZXIg KHRoZSBzYW1lIGFzIHRoZSBvbmUgcmVjZWl2ZWQgaW4gdGhlIGhlYWRlcikKKyAqIEBzdGF0dXM6 IFN0YXR1cyB2YWx1ZSBvZiB0aGUgdHJhbnNmZXIgKFplcm8gb24gc3VjY2VzcyBvciBhIExpbnV4 IGVycm5vIG9uIGZhaWx1cmUpCisgKi8KK3N0cnVjdCByZWdtYXBfdXNiX3N0YXR1cyB7CisjZGVm aW5lIFJFR01BUF9VU0JfU1RBVFVTX1NJR05BVFVSRQkweDgzZTdiODAzCisJX19sZTMyIHNpZ25h dHVyZTsKKwlfX2xlMTYgaW5kZXg7CisJX19sZTE2IHRhZzsKKwlfX3U4IHN0YXR1czsKK30gX19w YWNrZWQ7CisKK2ludCByZWdtYXBfdXNiX2dldF9pbnRlcmZhY2VfZGVzY3JpcHRvcihzdHJ1Y3Qg dXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAorCQkJCQl1bnNpZ25lZCBpbnQgKm51bV9yZWdtYXBz KTsKK2ludCByZWdtYXBfdXNiX2dldF9tYXBfZGVzY3JpcHRvcihzdHJ1Y3QgdXNiX2ludGVyZmFj ZSAqaW50ZXJmYWNlLAorCQkJCSAgdW5zaWduZWQgaW50IGluZGV4LAorCQkJCSAgc3RydWN0IHJl Z21hcF91c2JfbWFwX2Rlc2NyaXB0b3IgKmRlc2MpOworCisjZW5kaWYKLS0gCjIuMjMuMAoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1h aWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==