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=-14.7 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, MENTIONS_GIT_HOSTING,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, 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 ED86AC433E1 for ; Fri, 29 May 2020 17:57:24 +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 CFF682073B for ; Fri, 29 May 2020 17:57:24 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org CFF682073B 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 CB89F6E95F; Fri, 29 May 2020 17:57:15 +0000 (UTC) Received: from asav22.altibox.net (asav22.altibox.net [109.247.116.9]) by gabe.freedesktop.org (Postfix) with ESMTPS id EFBDF6E95C for ; Fri, 29 May 2020 17:57:05 +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 D631B200D4; Fri, 29 May 2020 19:57:03 +0200 (CEST) From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= To: dri-devel@lists.freedesktop.org, balbi@kernel.org Subject: [PATCH v3 4/6] drm: Add Generic USB Display driver Date: Fri, 29 May 2020 19:56:41 +0200 Message-Id: <20200529175643.46094-5-noralf@tronnes.org> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20200529175643.46094-1-noralf@tronnes.org> References: <20200529175643.46094-1-noralf@tronnes.org> MIME-Version: 1.0 X-CMAE-Score: 0 X-CMAE-Analysis: v=2.3 cv=LvK8NEVc c=1 sm=1 tr=0 a=OYZzhG0JTxDrWp/F2OJbnw==:117 a=OYZzhG0JTxDrWp/F2OJbnw==:17 a=IkcTkHD0fZMA:10 a=M51BFTxLslgA:10 a=SJz97ENfAAAA:8 a=gAmX6pxEAAAA:20 a=e5mUnYsNAAAA:8 a=20KFwNOVAAAA:8 a=JeAX4I3GZd6e_pumDaIA:9 a=mAfO6kjWG7zrlY3v:21 a=YBBMqVWGHLrF0QmA:21 a=QEXdDO2ut3YA:10 a=vFet0B0WnEQeilDPIY6i:22 a=Vxmtnl_E_bksehYqCbjh: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, sam@ravnborg.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" VGhpcyBhZGRzIGEgZ2VuZXJpYyBVU0IgZGlzcGxheSBkcml2ZXIgd2l0aCB0aGUgaW50ZW50aW9u IHRoYXQgaXQgY2FuIGJlCnVzZWQgd2l0aCBmdXR1cmUgVVNCIGludGVyZmFjZWQgbG93IGVuZCBk aXNwbGF5cy9hZGFwdGVycy4gVGhlIExpbnV4CmdhZGdldCBkZXZpY2UgZHJpdmVyIHdpbGwgc2Vy dmUgYXMgdGhlIGNhbm9uaWNhbCBkZXZpY2UgaW1wbGVtZW50YXRpb24uCgpUaGUgZm9sbG93aW5n IERSTSBwcm9wZXJ0aWVzIGFyZSBzdXBwb3J0ZWQ6Ci0gUGxhbmUgcm90YXRpb24KLSBDb25uZWN0 b3IgVFYgcHJvcGVydGllcwoKVGhlcmUgaXMgYWxzbyBzdXBwb3J0IGZvciBiYWNrbGlnaHQgYnJp Z2h0bmVzcyBleHBvc2VkIGFzIGEgYmFja2xpZ2h0CmRldmljZS4KCkRpc3BsYXkgbW9kZXMgY2Fu IGJlIG1hZGUgYXZhaWxhYmxlIHRvIHRoZSBob3N0IGRyaXZlciBlaXRoZXIgYXMgRFJNCmRpc3Bs YXkgbW9kZXMgb3IgdGhyb3VnaCBFRElELiBJZiBib3RoIGFyZSBwcmVzZW50LCBFRElEIGlzIGp1 c3QgcGFzc2VkCm9uIHRvIHVzZXJzcGFjZS4KClBlcmZvcm1hbmNlIGlzIHByZWZlcnJlZCBvdmVy IGNvbG9yIGRlcHRoLCBzbyBpZiB0aGUgZGV2aWNlIHN1cHBvcnRzClJHQjU2NSwgRFJNX0NBUF9E VU1CX1BSRUZFUlJFRF9ERVBUSCB3aWxsIHJldHVybiAxNi4KCklmIHRoZSBkZXZpY2UgdHJhbnNm ZXIgYnVmZmVyIGNhbid0IGZpdCBhbiB1bmNvbXByZXNzZWQgZnJhbWVidWZmZXIKdXBkYXRlLCB0 aGUgdXBkYXRlIGlzIHNwbGl0IHVwIGludG8gcGFydHMgdGhhdCBkbyBmaXQuCgpPcHRpbWFsIHVz ZXIgZXhwZXJpZW5jZSBpcyBhY2hpZXZlZCBieSBwcm92aWRpbmcgZGFtYWdlIHJlcG9ydHMgZWl0 aGVyIGJ5CnNldHRpbmcgRkJfREFNQUdFX0NMSVBTIG9uIHBhZ2VmbGlwcyBvciBjYWxsaW5nIERS TV9JT0NUTF9NT0RFX0RJUlRZRkIuCgpMWjQgY29tcHJlc3Npb24gaXMgdXNlZCBpZiB0aGUgZGV2 aWNlIHN1cHBvcnRzIGl0LgoKVGhlIGRyaXZlciBzdXBwb3J0cyBhIG9uZSBiaXQgbW9ub2Nocm9t ZSB0cmFuc2ZlciBmb3JtYXQ6IFIxLiBUaGlzIGlzIG5vdAppbXBsZW1lbnRlZCBpbiB0aGUgZ2Fk Z2V0IGRyaXZlci4gSXQgaXMgYWRkZWQgaW4gcHJlcGFyYXRpb24gZm9yIGZ1dHVyZQptb25vY2hy b21lIGUtaW5rIGRpc3BsYXlzLgoKVGhlIGRyaXZlciBpcyBNSVQgbGljZW5zZWQgdG8gc21vb3Ro IHRoZSBwYXRoIGZvciBhbnkgQlNEIHBvcnQgb2YgdGhlCmRyaXZlci4KCnYyOgotIFVzZSBkZXZt X2RybV9kZXZfYWxsb2MoKSBhbmQgZHJtbV9tb2RlX2NvbmZpZ19pbml0KCkKLSBkcm1fZmJkZXZf Z2VuZXJpY19zZXR1cDogVXNlIHByZWZlcnJlZF9icHA9MCwgMTYgd2FzIGEgY29weSBwYXN0ZSBl cnJvcgotIFRoZSBkcm1fYmFja2xpZ2h0X2hlbHBlciBpcyBkcm9wcGVkLCBjb3B5IGluIHRoZSBj b2RlCi0gU3VwcG9ydCBwcm90b2NvbCB2ZXJzaW9uIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGZv ciBkZXZpY2UKCnYzOgotIFVzZSBkb25hdGVkIE9wZW5tb2tvIFVTQiBwaWQKLSBVc2UgZGlyZWN0 IGNvbXByZXNzaW9uIGZyb20gZnJhbWVidWZmZXIgd2hlbiBwaXRjaCBtYXRjaGVzLCBub3Qgb25s eSBvbgogIGZ1bGwgZnJhbWVzLCBzbyBzcGxpdCB1cGRhdGVzIGNhbiBiZW5lZml0Ci0gVXNlIF9f bGUxNiBpbiBzdHJ1Y3QgZ3VkX2RybV9yZXFfZ2V0X2Nvbm5lY3Rvcl9zdGF0dXMKLSBTZXQgZWRp ZCBwcm9wZXJ0eSB3aGVuIHRoZSBkZXZpY2Ugb25seSBwcm92aWRlcyBlZGlkCi0gQ2xlYXIgY29t cHJlc3Npb24gZmllbGRzIGluIHN0cnVjdCBndWRfZHJtX3JlcV9zZXRfYnVmZmVyCi0gRml4IHBy b3RvY29sIHZlcnNpb24gbmVnb3RpYXRpb24KLSBSZW1vdmUgbW9kZS0+dnJlZnJlc2gsIGl0J3Mg Y2FsY3VsYXRlZAoKU2lnbmVkLW9mZi1ieTogTm9yYWxmIFRyw7hubmVzIDxub3JhbGZAdHJvbm5l cy5vcmc+Ci0tLQogTUFJTlRBSU5FUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA4 ICsKIGRyaXZlcnMvZ3B1L2RybS9LY29uZmlnICAgICAgICAgICAgICAgICB8ICAgMiArCiBkcml2 ZXJzL2dwdS9kcm0vTWFrZWZpbGUgICAgICAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUv ZHJtL2d1ZC9LY29uZmlnICAgICAgICAgICAgIHwgIDE0ICsKIGRyaXZlcnMvZ3B1L2RybS9ndWQv TWFrZWZpbGUgICAgICAgICAgICB8ICAgNCArCiBkcml2ZXJzL2dwdS9kcm0vZ3VkL2d1ZF9kcm1f Y29ubmVjdG9yLmMgfCA3MjYgKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9k cm0vZ3VkL2d1ZF9kcm1fZHJ2LmMgICAgICAgfCA2NDggKysrKysrKysrKysrKysrKysrKysrCiBk cml2ZXJzL2dwdS9kcm0vZ3VkL2d1ZF9kcm1faW50ZXJuYWwuaCAgfCAgNjUgKysrCiBkcml2ZXJz L2dwdS9kcm0vZ3VkL2d1ZF9kcm1fcGlwZS5jICAgICAgfCA0MjYgKysrKysrKysrKysrKysKIGlu Y2x1ZGUvZHJtL2d1ZF9kcm0uaCAgICAgICAgICAgICAgICAgICB8IDM2MSArKysrKysrKysrKysK IDEwIGZpbGVzIGNoYW5nZWQsIDIyNTUgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS9ndWQvS2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9ndWQvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v Z3VkL2d1ZF9kcm1fY29ubmVjdG9yLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vZ3VkL2d1ZF9kcm1fZHJ2LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v Z3VkL2d1ZF9kcm1faW50ZXJuYWwuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS9ndWQvZ3VkX2RybV9waXBlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2RybS9ndWRf ZHJtLmgKCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IGNhZWVh YzlmNmI0Ni4uYjE1YmY5YjIyMjliIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlO VEFJTkVSUwpAQCAtNTI5MSw2ICs1MjkxLDE0IEBAIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMv Z3B1L2RybS9wYW5lbC9wYW5lbC1mZWl5YW5nLWZ5MDcwMjRkaTI2YTMwZC5jCiBGOglEb2N1bWVu dGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZGlzcGxheS9wYW5lbC9mZWl5YW5nLGZ5MDcwMjRk aTI2YTMwZC55YW1sCiAKK0RSTSBEUklWRVIgRk9SIEdFTkVSSUMgVVNCIERJU1BMQVkKK006CU5v cmFsZiBUcsO4bm5lcyA8bm9yYWxmQHRyb25uZXMub3JnPgorUzoJTWFpbnRhaW5lZAorVzoJaHR0 cHM6Ly9naXRodWIuY29tL25vdHJvL2d1ZC93aWtpCitUOglnaXQgZ2l0Oi8vYW5vbmdpdC5mcmVl ZGVza3RvcC5vcmcvZHJtL2RybS1taXNjCitGOglkcml2ZXJzL2dwdS9kcm0vZ3VkLworRjoJaW5j bHVkZS9kcm0vZ3VkX2RybS5oCisKIERSTSBEUklWRVIgRk9SIEdSQUlOIE1FRElBIEdNMTJVMzIw IFBST0pFQ1RPUlMKIE06CUhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+CiBTOglN YWludGFpbmVkCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyBiL2RyaXZlcnMv Z3B1L2RybS9LY29uZmlnCmluZGV4IDRiZmZhMDhmNjEwYS4uMzNlNjNiNjhhODJkIDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZworKysgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZp ZwpAQCAtMzkxLDYgKzM5MSw4IEBAIHNvdXJjZSAiZHJpdmVycy9ncHUvZHJtL21jZGUvS2NvbmZp ZyIKIAogc291cmNlICJkcml2ZXJzL2dwdS9kcm0vdGlkc3MvS2NvbmZpZyIKIAorc291cmNlICJk cml2ZXJzL2dwdS9kcm0vZ3VkL0tjb25maWciCisKICMgS2VlcCBsZWdhY3kgZHJpdmVycyBsYXN0 CiAKIG1lbnVjb25maWcgRFJNX0xFR0FDWQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL01h a2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCmluZGV4IDUzZDhmYTE3MDE0My4uNDFh ODc3NjNmMGU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKKysrIGIvZHJp dmVycy9ncHUvZHJtL01ha2VmaWxlCkBAIC0xMjQsMyArMTI0LDQgQEAgb2JqLSQoQ09ORklHX0RS TV9QQU5GUk9TVCkgKz0gcGFuZnJvc3QvCiBvYmotJChDT05GSUdfRFJNX0FTUEVFRF9HRlgpICs9 IGFzcGVlZC8KIG9iai0kKENPTkZJR19EUk1fTUNERSkgKz0gbWNkZS8KIG9iai0kKENPTkZJR19E Uk1fVElEU1MpICs9IHRpZHNzLworb2JqLXkJCQkrPSBndWQvCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vZ3VkL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vZ3VkL0tjb25maWcKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi43NjdmMWMwNjdlZDkKLS0tIC9kZXYv bnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vZ3VkL0tjb25maWcKQEAgLTAsMCArMSwxNCBAQAor IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorCitjb25maWcgRFJNX0dVRAorCXRy aXN0YXRlICJHZW5lcmljIFVTQiBEaXNwbGF5IgorCWRlcGVuZHMgb24gRFJNICYmIFVTQgorCXNl bGVjdCBMWjRfQ09NUFJFU1MKKwlzZWxlY3QgRFJNX0tNU19IRUxQRVIKKwlzZWxlY3QgRFJNX0dF TV9TSE1FTV9IRUxQRVIKKwlzZWxlY3QgQkFDS0xJR0hUX0NMQVNTX0RFVklDRQorCWhlbHAKKwkg IFRoaXMgaXMgYSBEUk0gZGlzcGxheSBkcml2ZXIgZm9yIEdlbmVyaWMgVVNCIERpc3BsYXlzIG9y IGRpc3BsYXkKKwkgIGFkYXB0ZXJzLgorCisJICBJZiBNIGlzIHNlbGVjdGVkIHRoZSBtb2R1bGUg d2lsbCBiZSBjYWxsZWQgZ3VkX2RybS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ndWQv TWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vZ3VkL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNzNlZDdlZjNkYTk0Ci0tLSAvZGV2L251bGwKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2d1ZC9NYWtlZmlsZQpAQCAtMCwwICsxLDQgQEAKKyMgU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKworZ3VkX2RybS1vYmpzCQkJOj0gZ3VkX2RybV9kcnYu byBndWRfZHJtX3BpcGUubyBndWRfZHJtX2Nvbm5lY3Rvci5vCitvYmotJChDT05GSUdfRFJNX0dV RCkJCSs9IGd1ZF9kcm0ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2d1ZC9ndWRfZHJt X2Nvbm5lY3Rvci5jIGIvZHJpdmVycy9ncHUvZHJtL2d1ZC9ndWRfZHJtX2Nvbm5lY3Rvci5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMzNjYzRlMTNmZmNjCi0tLSAv ZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2d1ZC9ndWRfZHJtX2Nvbm5lY3Rvci5jCkBA IC0wLDAgKzEsNzI2IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUCisvKgorICog Q29weXJpZ2h0IDIwMjAgTm9yYWxmIFRyw7hubmVzCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Jh Y2tsaWdodC5oPgorCisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWMuaD4KKyNpbmNsdWRlIDxkcm0v ZHJtX2F0b21pY19zdGF0ZV9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2Nvbm5lY3Rvci5o PgorI2luY2x1ZGUgPGRybS9kcm1fZHJ2Lmg+CisjaW5jbHVkZSA8ZHJtL2RybV9lbmNvZGVyLmg+ CisjaW5jbHVkZSA8ZHJtL2RybV9maWxlLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9tb2Rlc2V0X2hl bHBlcl92dGFibGVzLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wcmludC5oPgorI2luY2x1ZGUgPGRy bS9kcm1fcHJvYmVfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9zaW1wbGVfa21zX2hlbHBl ci5oPgorI2luY2x1ZGUgPGRybS9ndWRfZHJtLmg+CisKKyNpbmNsdWRlICJndWRfZHJtX2ludGVy bmFsLmgiCisKK3N0cnVjdCBndWRfZHJtX2Nvbm5lY3RvciB7CisJc3RydWN0IGRybV9jb25uZWN0 b3IgY29ubmVjdG9yOworCXN0cnVjdCBkcm1fZW5jb2RlciBlbmNvZGVyOworCXN0cnVjdCBiYWNr bGlnaHRfZGV2aWNlICpiYWNrbGlnaHQ7CisKKwl1MzIgZmxhZ3M7CisKKwkvKiBTdXBwb3J0ZWQg cHJvcGVydGllcyAqLworCXUxNiAqcHJvcGVydGllczsKKwl1bnNpZ25lZCBpbnQgbnVtX3Byb3Bl cnRpZXM7CisKKwkvKiBJbml0aWFsIGdhZGdldCB0diBzdGF0ZSBpZiBhcHBsaWNhYmxlLCBhcHBs aWVkIG9uIHN0YXRlIHJlc2V0ICovCisJc3RydWN0IGRybV90dl9jb25uZWN0b3Jfc3RhdGUgaW5p dGlhbF90dl9zdGF0ZTsKKworCS8qCisJICogSW5pdGlhbCBnYWRnZXQgYmFja2xpZ2h0IGJyaWdo dG5lc3MgaWYgYXBwbGljYWJsZSwgYXBwbGllZCBvbiBzdGF0ZSByZXNldC4KKwkgKiBUaGUgdmFs dWUgLUVOT0RFViBpcyB1c2VkIGludGVybmFsbHkgdG8gc2lnbmFsIG5vIGJhY2tsaWdodC4KKwkg Ki8KKwlpbnQgaW5pdGlhbF9icmlnaHRuZXNzOworCisJLyogU3VwcG9ydGVkIGRpc3BsYXkgbW9k ZXMgaW4gdHJhbnNmZXIgZm9ybWF0ICovCisJc3RydWN0IGd1ZF9kcm1fZGlzcGxheV9tb2RlICpt b2RlczsKKwl1bnNpZ25lZCBpbnQgbnVtX21vZGVzOworCisJLyogRURJRCAqLworCXZvaWQgKmVk aWQ7CisJc2l6ZV90IGVkaWRfbGVuOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZ3VkX2Ry bV9jb25uZWN0b3IgKnRvX2d1ZF9kcm1fY29ubmVjdG9yKHN0cnVjdCBkcm1fY29ubmVjdG9yICpj b25uZWN0b3IpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihjb25uZWN0b3IsIHN0cnVjdCBndWRf ZHJtX2Nvbm5lY3RvciwgY29ubmVjdG9yKTsKK30KKworc3RhdGljIGludCBndWRfZHJtX2Nvbm5l Y3Rvcl9iYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQp Cit7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9IGJsX2dldF9kYXRhKGJkKTsK KwlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubmVjdG9yX3N0YXRlOworCXN0cnVjdCBk cm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmRldjsKKwlzdHJ1Y3QgZHJtX21vZGVzZXRfYWNx dWlyZV9jdHggY3R4OworCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZTsKKwlpbnQgcmV0 OworCisJc3RhdGUgPSBkcm1fYXRvbWljX3N0YXRlX2FsbG9jKGRldik7CisJaWYgKCFzdGF0ZSkK KwkJcmV0dXJuIC1FTk9NRU07CisKKwlkcm1fbW9kZXNldF9hY3F1aXJlX2luaXQoJmN0eCwgMCk7 CisJc3RhdGUtPmFjcXVpcmVfY3R4ID0gJmN0eDsKK3JldHJ5OgorCWNvbm5lY3Rvcl9zdGF0ZSA9 IGRybV9hdG9taWNfZ2V0X2Nvbm5lY3Rvcl9zdGF0ZShzdGF0ZSwgY29ubmVjdG9yKTsKKwlpZiAo SVNfRVJSKGNvbm5lY3Rvcl9zdGF0ZSkpIHsKKwkJcmV0ID0gUFRSX0VSUihjb25uZWN0b3Jfc3Rh dGUpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBSZXVzZSB0di5icmlnaHRuZXNzIHRvIGF2b2lk IGhhdmluZyB0byBzdWJjbGFzcyAqLworCWNvbm5lY3Rvcl9zdGF0ZS0+dHYuYnJpZ2h0bmVzcyA9 IGJkLT5wcm9wcy5icmlnaHRuZXNzOworCisJcmV0ID0gZHJtX2F0b21pY19jb21taXQoc3RhdGUp Oworb3V0OgorCWlmIChyZXQgPT0gLUVERUFETEspIHsKKwkJZHJtX2F0b21pY19zdGF0ZV9jbGVh cihzdGF0ZSk7CisJCWRybV9tb2Rlc2V0X2JhY2tvZmYoJmN0eCk7CisJCWdvdG8gcmV0cnk7CisJ fQorCisJZHJtX2F0b21pY19zdGF0ZV9wdXQoc3RhdGUpOworCisJZHJtX21vZGVzZXRfZHJvcF9s b2NrcygmY3R4KTsKKwlkcm1fbW9kZXNldF9hY3F1aXJlX2ZpbmkoJmN0eCk7CisKKwlyZXR1cm4g cmV0OworfQorCitzdGF0aWMgaW50IGd1ZF9kcm1fY29ubmVjdG9yX2JhY2tsaWdodF9nZXRfYnJp Z2h0bmVzcyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpCit7CisJc3RydWN0IGRybV9jb25u ZWN0b3IgKmNvbm5lY3RvciA9IGJsX2dldF9kYXRhKGJkKTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2ID0gY29ubmVjdG9yLT5kZXY7CisJaW50IGJyaWdodG5lc3M7CisKKwlkcm1fbW9kZXNldF9s b2NrKCZkZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rpb25fbXV0ZXgsIE5VTEwpOworCWJyaWdodG5l c3MgPSBjb25uZWN0b3ItPnN0YXRlLT50di5icmlnaHRuZXNzOworCWRybV9tb2Rlc2V0X3VubG9j aygmZGV2LT5tb2RlX2NvbmZpZy5jb25uZWN0aW9uX211dGV4KTsKKworCXJldHVybiBicmlnaHRu ZXNzOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGJhY2tsaWdodF9vcHMgZ3VkX2RybV9jb25u ZWN0b3JfYmFja2xpZ2h0X29wcyA9IHsKKwkuZ2V0X2JyaWdodG5lc3MgPSBndWRfZHJtX2Nvbm5l Y3Rvcl9iYWNrbGlnaHRfZ2V0X2JyaWdodG5lc3MsCisJLnVwZGF0ZV9zdGF0dXMJPSBndWRfZHJt X2Nvbm5lY3Rvcl9iYWNrbGlnaHRfdXBkYXRlX3N0YXR1cywKK307CisKK3N0YXRpYyBpbnQgZ3Vk X2RybV9jb25uZWN0b3JfYmFja2xpZ2h0X3JlZ2lzdGVyKHN0cnVjdCBndWRfZHJtX2Nvbm5lY3Rv ciAqZ2Nvbm4pCit7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9ICZnY29ubi0+ Y29ubmVjdG9yOworCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZDsKKwljb25zdCBjaGFyICpu YW1lOworCWNvbnN0IHN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcyBwcm9wcyA9IHsKKwkJLnR5 cGUgPSBCQUNLTElHSFRfUkFXLAorCQkuc2NhbGUgPSBCQUNLTElHSFRfU0NBTEVfTk9OX0xJTkVB UiwKKwkJLm1heF9icmlnaHRuZXNzID0gMTAwLAorCX07CisKKwluYW1lID0ga2FzcHJpbnRmKEdG UF9LRVJORUwsICJjYXJkJWQtJXMtYmFja2xpZ2h0IiwKKwkJCSBjb25uZWN0b3ItPmRldi0+cHJp bWFyeS0+aW5kZXgsIGNvbm5lY3Rvci0+bmFtZSk7CisJaWYgKCFuYW1lKQorCQlyZXR1cm4gLUVO T01FTTsKKworCWJkID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcihuYW1lLCBjb25uZWN0b3It PmtkZXYsIGNvbm5lY3RvciwKKwkJCQkgICAgICAgJmd1ZF9kcm1fY29ubmVjdG9yX2JhY2tsaWdo dF9vcHMsICZwcm9wcyk7CisJa2ZyZWUobmFtZSk7CisJaWYgKElTX0VSUihiZCkpCisJCXJldHVy biBQVFJfRVJSKGJkKTsKKworCWdjb25uLT5iYWNrbGlnaHQgPSBiZDsKKworCXJldHVybiAwOwor fQorCitzdGF0aWMgdm9pZCBndWRfZHJtX2Nvbm5lY3Rvcl9tb2Rlc19jbGVhcihzdHJ1Y3QgZ3Vk X2RybV9jb25uZWN0b3IgKmdjb25uKQoreworCWtmcmVlKGdjb25uLT5tb2Rlcyk7CisJZ2Nvbm4t Pm1vZGVzID0gTlVMTDsKKwlnY29ubi0+bnVtX21vZGVzID0gMDsKK30KKworc3RhdGljIGludCBn dWRfZHJtX2Nvbm5lY3Rvcl9tb2Rlc19nZXQoc3RydWN0IGd1ZF9kcm1fY29ubmVjdG9yICpnY29u biwgdW5zaWduZWQgaW50IG51bV9tb2RlcykKK3sKKwlzdHJ1Y3QgZ3VkX2RybV9kZXZpY2UgKmdk cm0gPSB0b19ndWRfZHJtX2RldmljZShnY29ubi0+Y29ubmVjdG9yLmRldik7CisJdW5zaWduZWQg aW50IGluZGV4ID0gZ2Nvbm4tPmNvbm5lY3Rvci5pbmRleDsKKwlpbnQgcmV0ID0gMDsKKworCWlm ICghbnVtX21vZGVzKQorCQlnb3RvIGNsZWFyOworCisJZ3VkX2RybV9jb25uZWN0b3JfbW9kZXNf Y2xlYXIoZ2Nvbm4pOworCisJZ2Nvbm4tPm1vZGVzID0ga21hbGxvY19hcnJheShudW1fbW9kZXMs IHNpemVvZigqZ2Nvbm4tPm1vZGVzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFnY29ubi0+bW9kZXMp CisJCXJldHVybiAtRU5PTUVNOworCisJZ2Nvbm4tPm51bV9tb2RlcyA9IG51bV9tb2RlczsKKwor CXJldCA9IGd1ZF9kcm1fdXNiX2dldChnZHJtLCBHVURfRFJNX1VTQl9SRVFfR0VUX0NPTk5FQ1RP Ul9NT0RFUywgaW5kZXgsCisJCQkgICAgICBnY29ubi0+bW9kZXMsIG51bV9tb2RlcyAqIHNpemVv ZigqZ2Nvbm4tPm1vZGVzKSk7CisJaWYgKHJldCkKKwkJZ290byBjbGVhcjsKKworCXJldHVybiAw OworY2xlYXI6CisJZ3VkX2RybV9jb25uZWN0b3JfbW9kZXNfY2xlYXIoZ2Nvbm4pOworCisJcmV0 dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgZ3VkX2RybV9jb25uZWN0b3JfZWRpZF9jbGVhcihz dHJ1Y3QgZ3VkX2RybV9jb25uZWN0b3IgKmdjb25uKQoreworCWtmcmVlKGdjb25uLT5lZGlkKTsK KwlnY29ubi0+ZWRpZCA9IE5VTEw7CisJZ2Nvbm4tPmVkaWRfbGVuID0gMDsKK30KKworc3RhdGlj IGludCBndWRfZHJtX2Nvbm5lY3Rvcl9lZGlkX2dldChzdHJ1Y3QgZ3VkX2RybV9jb25uZWN0b3Ig Kmdjb25uLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBndWRfZHJtX2RldmljZSAqZ2RybSA9IHRv X2d1ZF9kcm1fZGV2aWNlKGdjb25uLT5jb25uZWN0b3IuZGV2KTsKKwl1bnNpZ25lZCBpbnQgaW5k ZXggPSBnY29ubi0+Y29ubmVjdG9yLmluZGV4OworCWludCByZXQgPSAwOworCisJaWYgKCFsZW4p CisJCWdvdG8gY2xlYXI7CisKKwlndWRfZHJtX2Nvbm5lY3Rvcl9lZGlkX2NsZWFyKGdjb25uKTsK KworCWdjb25uLT5lZGlkID0ga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOworCWlmICghZ2Nvbm4t PmVkaWQpCisJCXJldHVybiAtRU5PTUVNOworCisJZ2Nvbm4tPmVkaWRfbGVuID0gbGVuOworCisJ cmV0ID0gZ3VkX2RybV91c2JfZ2V0KGdkcm0sIEdVRF9EUk1fVVNCX1JFUV9HRVRfQ09OTkVDVE9S X0VESUQsIGluZGV4LCBnY29ubi0+ZWRpZCwgbGVuKTsKKwlpZiAocmV0KQorCQlnb3RvIGNsZWFy OworCisJcmV0dXJuIDA7CitjbGVhcjoKKwlndWRfZHJtX2Nvbm5lY3Rvcl9lZGlkX2NsZWFyKGdj b25uKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZ3VkX2RybV9jb25uZWN0b3Jf ZGV0ZWN0X3NhZmUoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgYm9vbCBmb3JjZSkK K3sKKwlzdHJ1Y3QgZ3VkX2RybV9jb25uZWN0b3IgKmdjb25uID0gdG9fZ3VkX2RybV9jb25uZWN0 b3IoY29ubmVjdG9yKTsKKwlzdHJ1Y3QgZ3VkX2RybV9kZXZpY2UgKmdkcm0gPSB0b19ndWRfZHJt X2RldmljZShjb25uZWN0b3ItPmRldik7CisJc3RydWN0IGd1ZF9kcm1fcmVxX2dldF9jb25uZWN0 b3Jfc3RhdHVzIHJlcTsKKwl1MTYgbnVtX21vZGVzLCBlZGlkX2xlbjsKKwlpbnQgc3RhdHVzLCBy ZXQ7CisJYm9vbCBjaGFuZ2VkOworCisJaWYgKGZvcmNlKSB7CisJCXJldCA9IGd1ZF9kcm1fdXNi X3NldChnZHJtLCBHVURfRFJNX1VTQl9SRVFfU0VUX0NPTk5FQ1RPUl9GT1JDRV9ERVRFQ1QsCisJ CQkJICAgICAgY29ubmVjdG9yLT5pbmRleCwgTlVMTCwgMCk7CisJCWlmIChyZXQpCisJCQlnb3Rv IGZyZWU7CisJfQorCisJcmV0ID0gZ3VkX2RybV91c2JfZ2V0KGdkcm0sIEdVRF9EUk1fVVNCX1JF UV9HRVRfQ09OTkVDVE9SX1NUQVRVUywKKwkJCSAgICAgIGNvbm5lY3Rvci0+aW5kZXgsICZyZXEs IHNpemVvZihyZXEpKTsKKwlpZiAocmV0KQorCQlnb3RvIGZyZWU7CisKKwljaGFuZ2VkID0gcmVx LnN0YXR1cyAmIEdVRF9EUk1fQ09OTkVDVE9SX1NUQVRVU19DSEFOR0VEOworCXN0YXR1cyA9IHJl cS5zdGF0dXMgJiBHVURfRFJNX0NPTk5FQ1RPUl9TVEFUVVNfTUFTSzsKKwlpZiAoc3RhdHVzID4g Y29ubmVjdG9yX3N0YXR1c191bmtub3duKQorCQlzdGF0dXMgPSBjb25uZWN0b3Jfc3RhdHVzX3Vu a25vd247CisJbnVtX21vZGVzID0gbGUxNl90b19jcHUocmVxLm51bV9tb2Rlcyk7CisJZWRpZF9s ZW4gPSBsZTE2X3RvX2NwdShyZXEuZWRpZF9sZW4pOworCisJaWYgKCFudW1fbW9kZXMgJiYgIWVk aWRfbGVuKSB7CisJCXJldCA9IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOworCQlnb3Rv IGZyZWU7CisJfQorCisJaWYgKCFjaGFuZ2VkICYmIGNvbm5lY3Rvci0+c3RhdHVzID09IHN0YXR1 cyAmJgorCSAgICBnY29ubi0+bnVtX21vZGVzID09IG51bV9tb2RlcyAmJiBnY29ubi0+ZWRpZF9s ZW4gPT0gZWRpZF9sZW4pCisJCXJldHVybiBzdGF0dXM7CisKKwlyZXQgPSBndWRfZHJtX2Nvbm5l Y3Rvcl9tb2Rlc19nZXQoZ2Nvbm4sIG51bV9tb2Rlcyk7CisJaWYgKHJldCkKKwkJZ290byBmcmVl OworCisJcmV0ID0gZ3VkX2RybV9jb25uZWN0b3JfZWRpZF9nZXQoZ2Nvbm4sIGVkaWRfbGVuKTsK KwlpZiAocmV0KQorCQlnb3RvIGZyZWU7CisKKwlyZXR1cm4gc3RhdHVzOworZnJlZToKKwlndWRf ZHJtX2Nvbm5lY3Rvcl9tb2Rlc19jbGVhcihnY29ubik7CisJZ3VkX2RybV9jb25uZWN0b3JfZWRp ZF9jbGVhcihnY29ubik7CisKKwlyZXR1cm4gcmV0IDwgMCA/IGNvbm5lY3Rvcl9zdGF0dXNfdW5r bm93biA6IHJldDsKK30KKworc3RhdGljIGludCBndWRfZHJtX2Nvbm5lY3Rvcl9kZXRlY3Qoc3Ry dWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCQkgICAgc3RydWN0IGRybV9tb2Rlc2V0 X2FjcXVpcmVfY3R4ICpjdHgsIGJvb2wgZm9yY2UpCit7CisJaW50IGlkeCwgcmV0OworCisJaWYg KCFkcm1fZGV2X2VudGVyKGNvbm5lY3Rvci0+ZGV2LCAmaWR4KSkKKwkJcmV0dXJuIC1FTk9ERVY7 CisKKwlyZXQgPSBndWRfZHJtX2Nvbm5lY3Rvcl9kZXRlY3Rfc2FmZShjb25uZWN0b3IsIGZvcmNl KTsKKworCWRybV9kZXZfZXhpdChpZHgpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlu dCBndWRfZHJtX2Nvbm5lY3Rvcl9nZXRfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5l Y3RvcikKK3sKKwlzdHJ1Y3QgZ3VkX2RybV9jb25uZWN0b3IgKmdjb25uID0gdG9fZ3VkX2RybV9j b25uZWN0b3IoY29ubmVjdG9yKTsKKwl1bnNpZ25lZCBpbnQgaSwgbnVtX21vZGVzID0gMDsKKwor CWlmICghZ2Nvbm4tPm51bV9tb2RlcykgeworCQludW1fbW9kZXMgPSBkcm1fYWRkX2VkaWRfbW9k ZXMoY29ubmVjdG9yLCBnY29ubi0+ZWRpZCk7CisJCWdvdG8gb3V0OworCX0KKworCWZvciAoaSA9 IDA7IGkgPCBnY29ubi0+bnVtX21vZGVzOyBpKyspIHsKKwkJc3RydWN0IGRybV9kaXNwbGF5X21v ZGUgKm1vZGU7CisKKwkJbW9kZSA9IGRybV9tb2RlX2NyZWF0ZShjb25uZWN0b3ItPmRldik7CisJ CWlmICghbW9kZSkKKwkJCWdvdG8gb3V0OworCisJCWd1ZF9kcm1fdG9fZGlzcGxheV9tb2RlKG1v ZGUsICZnY29ubi0+bW9kZXNbaV0pOworCisJCWRybV9tb2RlX3Byb2JlZF9hZGQoY29ubmVjdG9y LCBtb2RlKTsKKwkJbnVtX21vZGVzKys7CisJfQorb3V0OgorCWlmIChnY29ubi0+ZWRpZF9sZW4p CisJCWRybV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVydHkoY29ubmVjdG9yLCBnY29ubi0+ ZWRpZCk7CisKKwlyZXR1cm4gbnVtX21vZGVzOworfQorCitzdGF0aWMgaW50IGd1ZF9kcm1fY29u bmVjdG9yX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkJ CQkgIHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2Nvbm5l Y3Rvcl9zdGF0ZSAqbmV3X3N0YXRlOworCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqbmV3X2NydGNf c3RhdGU7CisJc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKm9sZF9zdGF0ZTsKKworCW5ld19z dGF0ZSA9IGRybV9hdG9taWNfZ2V0X25ld19jb25uZWN0b3Jfc3RhdGUoc3RhdGUsIGNvbm5lY3Rv cik7CisJaWYgKCFuZXdfc3RhdGUtPmNydGMpCisJCXJldHVybiAwOworCisJb2xkX3N0YXRlID0g ZHJtX2F0b21pY19nZXRfb2xkX2Nvbm5lY3Rvcl9zdGF0ZShzdGF0ZSwgY29ubmVjdG9yKTsKKwlu ZXdfY3J0Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X25ld19jcnRjX3N0YXRlKHN0YXRlLCBuZXdf c3RhdGUtPmNydGMpOworCisJaWYgKG9sZF9zdGF0ZS0+dHYuc3ViY29ubmVjdG9yICE9IG5ld19z dGF0ZS0+dHYuc3ViY29ubmVjdG9yIHx8CisJICAgIG9sZF9zdGF0ZS0+dHYubWFyZ2lucy5sZWZ0 ICE9IG5ld19zdGF0ZS0+dHYubWFyZ2lucy5sZWZ0IHx8CisJICAgIG9sZF9zdGF0ZS0+dHYubWFy Z2lucy5yaWdodCAhPSBuZXdfc3RhdGUtPnR2Lm1hcmdpbnMucmlnaHQgfHwKKwkgICAgb2xkX3N0 YXRlLT50di5tYXJnaW5zLnRvcCAhPSBuZXdfc3RhdGUtPnR2Lm1hcmdpbnMudG9wIHx8CisJICAg IG9sZF9zdGF0ZS0+dHYubWFyZ2lucy5ib3R0b20gIT0gbmV3X3N0YXRlLT50di5tYXJnaW5zLmJv dHRvbSB8fAorCSAgICBvbGRfc3RhdGUtPnR2Lm1vZGUgIT0gbmV3X3N0YXRlLT50di5tb2RlIHx8 CisJICAgIG9sZF9zdGF0ZS0+dHYuYnJpZ2h0bmVzcyAhPSBuZXdfc3RhdGUtPnR2LmJyaWdodG5l c3MgfHwKKwkgICAgb2xkX3N0YXRlLT50di5jb250cmFzdCAhPSBuZXdfc3RhdGUtPnR2LmNvbnRy YXN0IHx8CisJICAgIG9sZF9zdGF0ZS0+dHYuZmxpY2tlcl9yZWR1Y3Rpb24gIT0gbmV3X3N0YXRl LT50di5mbGlja2VyX3JlZHVjdGlvbiB8fAorCSAgICBvbGRfc3RhdGUtPnR2Lm92ZXJzY2FuICE9 IG5ld19zdGF0ZS0+dHYub3ZlcnNjYW4gfHwKKwkgICAgb2xkX3N0YXRlLT50di5zYXR1cmF0aW9u ICE9IG5ld19zdGF0ZS0+dHYuc2F0dXJhdGlvbiB8fAorCSAgICBvbGRfc3RhdGUtPnR2Lmh1ZSAh PSBuZXdfc3RhdGUtPnR2Lmh1ZSkKKwkJbmV3X2NydGNfc3RhdGUtPmNvbm5lY3RvcnNfY2hhbmdl ZCA9IHRydWU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29u bmVjdG9yX2hlbHBlcl9mdW5jcyBndWRfZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgPSB7CisJ LmRldGVjdF9jdHggPSBndWRfZHJtX2Nvbm5lY3Rvcl9kZXRlY3QsCisJLmdldF9tb2RlcyA9IGd1 ZF9kcm1fY29ubmVjdG9yX2dldF9tb2RlcywKKwkuYXRvbWljX2NoZWNrID0gZ3VkX2RybV9jb25u ZWN0b3JfYXRvbWljX2NoZWNrLAorfTsKKworc3RhdGljIGludCBndWRfZHJtX2Nvbm5lY3Rvcl9s YXRlX3JlZ2lzdGVyKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0 IGd1ZF9kcm1fY29ubmVjdG9yICpnY29ubiA9IHRvX2d1ZF9kcm1fY29ubmVjdG9yKGNvbm5lY3Rv cik7CisKKwlpZiAoZ2Nvbm4tPmluaXRpYWxfYnJpZ2h0bmVzcyA8IDApCisJCXJldHVybiAwOwor CisJcmV0dXJuIGd1ZF9kcm1fY29ubmVjdG9yX2JhY2tsaWdodF9yZWdpc3RlcihnY29ubik7Cit9 CisKK3N0YXRpYyB2b2lkIGd1ZF9kcm1fY29ubmVjdG9yX2Vhcmx5X3VucmVnaXN0ZXIoc3RydWN0 IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgZ3VkX2RybV9jb25uZWN0b3Ig Kmdjb25uID0gdG9fZ3VkX2RybV9jb25uZWN0b3IoY29ubmVjdG9yKTsKKworCWJhY2tsaWdodF9k ZXZpY2VfdW5yZWdpc3RlcihnY29ubi0+YmFja2xpZ2h0KTsKK30KKworc3RhdGljIHZvaWQgZ3Vk X2RybV9jb25uZWN0b3JfZGVzdHJveShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQor eworCXN0cnVjdCBndWRfZHJtX2Nvbm5lY3RvciAqZ2Nvbm4gPSB0b19ndWRfZHJtX2Nvbm5lY3Rv cihjb25uZWN0b3IpOworCisJZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwKGNvbm5lY3Rvcik7CisJZ3Vk X2RybV9jb25uZWN0b3JfbW9kZXNfY2xlYXIoZ2Nvbm4pOworCWd1ZF9kcm1fY29ubmVjdG9yX2Vk aWRfY2xlYXIoZ2Nvbm4pOworCWtmcmVlKGdjb25uLT5wcm9wZXJ0aWVzKTsKKwlrZnJlZShnY29u bik7Cit9CisKK3N0YXRpYyB2b2lkIGd1ZF9kcm1fY29ubmVjdG9yX3Jlc2V0KHN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IGd1ZF9kcm1fY29ubmVjdG9yICpnY29u biA9IHRvX2d1ZF9kcm1fY29ubmVjdG9yKGNvbm5lY3Rvcik7CisKKwlkcm1fYXRvbWljX2hlbHBl cl9jb25uZWN0b3JfcmVzZXQoY29ubmVjdG9yKTsKKwljb25uZWN0b3ItPnN0YXRlLT50diA9IGdj b25uLT5pbml0aWFsX3R2X3N0YXRlOworCS8qIFNldCBtYXJnaW5zIGZyb20gY29tbWFuZCBsaW5l ICovCisJZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX3R2X3Jlc2V0KGNvbm5lY3Rvcik7CisJ aWYgKGdjb25uLT5pbml0aWFsX2JyaWdodG5lc3MgPj0gMCkKKwkJY29ubmVjdG9yLT5zdGF0ZS0+ dHYuYnJpZ2h0bmVzcyA9IGdjb25uLT5pbml0aWFsX2JyaWdodG5lc3M7Cit9CisKK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5jcyBndWRfZHJtX2Nvbm5lY3Rvcl9mdW5jcyA9 IHsKKwkuZmlsbF9tb2RlcyA9IGRybV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2Rl cywKKwkubGF0ZV9yZWdpc3RlciA9IGd1ZF9kcm1fY29ubmVjdG9yX2xhdGVfcmVnaXN0ZXIsCisJ LmVhcmx5X3VucmVnaXN0ZXIgPSBndWRfZHJtX2Nvbm5lY3Rvcl9lYXJseV91bnJlZ2lzdGVyLAor CS5kZXN0cm95ID0gZ3VkX2RybV9jb25uZWN0b3JfZGVzdHJveSwKKwkucmVzZXQgPSBndWRfZHJt X2Nvbm5lY3Rvcl9yZXNldCwKKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRybV9hdG9taWNf aGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19kZXN0cm95X3N0YXRl ID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rlc3Ryb3lfc3RhdGUsCit9OworCisvKgor ICogVGhlIHR2Lm1vZGUgcHJvcGVydHkgaXMgc2hhcmVkIGFtb25nIHRoZSBjb25uZWN0b3JzIGFu ZCBpdHMgZW51bSBuYW1lcyBhcmUKKyAqIGRyaXZlciBzcGVjaWZpYy4gVGhpcyBtZWFucyB0aGF0 IGlmIG1vcmUgdGhhbiBvbmUgY29ubmVjdG9yIHVzZXMgdHYubW9kZSwKKyAqIHRoZSBlbnVtIG5h bWVzIGhhcyB0byBiZSB0aGUgc2FtZS4KKyAqLworc3RhdGljIGludCBndWRfZHJtX2Nvbm5lY3Rv cl9hZGRfdHZfbW9kZShzdHJ1Y3QgZ3VkX2RybV9kZXZpY2UgKmdkcm0sCisJCQkJCSBzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCB1NjQgdmFsKQoreworCXVuc2lnbmVkIGludCBpLCBu dW1fbW9kZXM7CisJY29uc3QgY2hhciAqKm1vZGVzOworCXNpemVfdCBidWZfbGVuOworCWNoYXIg KmJ1ZjsKKwlpbnQgcmV0OworCisJbnVtX21vZGVzID0gdmFsID4+IEdVRF9EUk1fVVNCX0NPTk5F Q1RPUl9UVl9NT0RFX05VTV9TSElGVDsKKworCWlmICghbnVtX21vZGVzKQorCQlyZXR1cm4gLUVJ TlZBTDsKKworCWJ1Zl9sZW4gPSBudW1fbW9kZXMgKiBEUk1fUFJPUF9OQU1FX0xFTjsKKwltb2Rl cyA9IGttYWxsb2NfYXJyYXkobnVtX21vZGVzLCBzaXplb2YoKm1vZGVzKSwgR0ZQX0tFUk5FTCk7 CisJYnVmID0ga21hbGxvYyhidWZfbGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1vZGVzIHx8ICFi dWYpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmcmVlOworCX0KKworCXJldCA9IGd1ZF9k cm1fdXNiX2dldChnZHJtLCBHVURfRFJNX1VTQl9SRVFfR0VUX0NPTk5FQ1RPUl9UVl9NT0RFX1ZB TFVFUywKKwkJCSAgICAgIGNvbm5lY3Rvci0+aW5kZXgsIGJ1ZiwgYnVmX2xlbik7CisJaWYgKHJl dCkKKwkJZ290byBmcmVlOworCisJZm9yIChpID0gMDsgaSA8IG51bV9tb2RlczsgaSsrKQorCQlt b2Rlc1tpXSA9ICZidWZbaSAqIERSTV9QUk9QX05BTUVfTEVOXTsKKworCXJldCA9IGRybV9tb2Rl X2NyZWF0ZV90dl9wcm9wZXJ0aWVzKGNvbm5lY3Rvci0+ZGV2LCBudW1fbW9kZXMsIG1vZGVzKTsK K2ZyZWU6CisJa2ZyZWUobW9kZXMpOworCWtmcmVlKGJ1Zik7CisKKwlyZXR1cm4gcmV0OworfQor CitzdGF0aWMgc3RydWN0IGRybV9wcm9wZXJ0eSAqCitndWRfZHJtX2Nvbm5lY3Rvcl9wcm9wZXJ0 eV9sb29rdXAoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgdTE2IHByb3ApCit7CisJ c3RydWN0IGRybV9tb2RlX2NvbmZpZyAqY29uZmlnID0gJmNvbm5lY3Rvci0+ZGV2LT5tb2RlX2Nv bmZpZzsKKworCXN3aXRjaCAocHJvcCkgeworCWNhc2UgR1VEX0RSTV9QUk9QRVJUWV9UVl9TRUxF Q1RfU1VCQ09OTkVDVE9SOgorCQlyZXR1cm4gY29uZmlnLT50dl9zZWxlY3Rfc3ViY29ubmVjdG9y X3Byb3BlcnR5OworCWNhc2UgR1VEX0RSTV9QUk9QRVJUWV9UVl9MRUZUX01BUkdJTjoKKwkJcmV0 dXJuIGNvbmZpZy0+dHZfbGVmdF9tYXJnaW5fcHJvcGVydHk7CisJY2FzZSBHVURfRFJNX1BST1BF UlRZX1RWX1JJR0hUX01BUkdJTjoKKwkJcmV0dXJuIGNvbmZpZy0+dHZfcmlnaHRfbWFyZ2luX3By b3BlcnR5OworCWNhc2UgR1VEX0RSTV9QUk9QRVJUWV9UVl9UT1BfTUFSR0lOOgorCQlyZXR1cm4g Y29uZmlnLT50dl90b3BfbWFyZ2luX3Byb3BlcnR5OworCWNhc2UgR1VEX0RSTV9QUk9QRVJUWV9U Vl9CT1RUT01fTUFSR0lOOgorCQlyZXR1cm4gY29uZmlnLT50dl9ib3R0b21fbWFyZ2luX3Byb3Bl cnR5OworCWNhc2UgR1VEX0RSTV9QUk9QRVJUWV9UVl9NT0RFOgorCQlyZXR1cm4gY29uZmlnLT50 dl9tb2RlX3Byb3BlcnR5OworCWNhc2UgR1VEX0RSTV9QUk9QRVJUWV9UVl9CUklHSFRORVNTOgor CQlyZXR1cm4gY29uZmlnLT50dl9icmlnaHRuZXNzX3Byb3BlcnR5OworCWNhc2UgR1VEX0RSTV9Q Uk9QRVJUWV9UVl9DT05UUkFTVDoKKwkJcmV0dXJuIGNvbmZpZy0+dHZfY29udHJhc3RfcHJvcGVy dHk7CisJY2FzZSBHVURfRFJNX1BST1BFUlRZX1RWX0ZMSUNLRVJfUkVEVUNUSU9OOgorCQlyZXR1 cm4gY29uZmlnLT50dl9mbGlja2VyX3JlZHVjdGlvbl9wcm9wZXJ0eTsKKwljYXNlIEdVRF9EUk1f UFJPUEVSVFlfVFZfT1ZFUlNDQU46CisJCXJldHVybiBjb25maWctPnR2X292ZXJzY2FuX3Byb3Bl cnR5OworCWNhc2UgR1VEX0RSTV9QUk9QRVJUWV9UVl9TQVRVUkFUSU9OOgorCQlyZXR1cm4gY29u ZmlnLT50dl9zYXR1cmF0aW9uX3Byb3BlcnR5OworCWNhc2UgR1VEX0RSTV9QUk9QRVJUWV9UVl9I VUU6CisJCXJldHVybiBjb25maWctPnR2X2h1ZV9wcm9wZXJ0eTsKKwlkZWZhdWx0OgorCQlyZXR1 cm4gRVJSX1BUUigtRUlOVkFMKTsKKwl9Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgKmd1ZF9k cm1fY29ubmVjdG9yX3R2X3N0YXRlX3ZhbCh1MTYgcHJvcCwgc3RydWN0IGRybV90dl9jb25uZWN0 b3Jfc3RhdGUgKnN0YXRlKQoreworCXN3aXRjaCAocHJvcCkgeworCWNhc2UgR1VEX0RSTV9QUk9Q RVJUWV9UVl9TRUxFQ1RfU1VCQ09OTkVDVE9SOgorCQlyZXR1cm4gJnN0YXRlLT5zdWJjb25uZWN0 b3I7CisJY2FzZSBHVURfRFJNX1BST1BFUlRZX1RWX0xFRlRfTUFSR0lOOgorCQlyZXR1cm4gJnN0 YXRlLT5tYXJnaW5zLmxlZnQ7CisJY2FzZSBHVURfRFJNX1BST1BFUlRZX1RWX1JJR0hUX01BUkdJ TjoKKwkJcmV0dXJuICZzdGF0ZS0+bWFyZ2lucy5yaWdodDsKKwljYXNlIEdVRF9EUk1fUFJPUEVS VFlfVFZfVE9QX01BUkdJTjoKKwkJcmV0dXJuICZzdGF0ZS0+bWFyZ2lucy50b3A7CisJY2FzZSBH VURfRFJNX1BST1BFUlRZX1RWX0JPVFRPTV9NQVJHSU46CisJCXJldHVybiAmc3RhdGUtPm1hcmdp bnMuYm90dG9tOworCWNhc2UgR1VEX0RSTV9QUk9QRVJUWV9UVl9NT0RFOgorCQlyZXR1cm4gJnN0 YXRlLT5tb2RlOworCWNhc2UgR1VEX0RSTV9QUk9QRVJUWV9UVl9CUklHSFRORVNTOgorCQlyZXR1 cm4gJnN0YXRlLT5icmlnaHRuZXNzOworCWNhc2UgR1VEX0RSTV9QUk9QRVJUWV9UVl9DT05UUkFT VDoKKwkJcmV0dXJuICZzdGF0ZS0+Y29udHJhc3Q7CisJY2FzZSBHVURfRFJNX1BST1BFUlRZX1RW X0ZMSUNLRVJfUkVEVUNUSU9OOgorCQlyZXR1cm4gJnN0YXRlLT5mbGlja2VyX3JlZHVjdGlvbjsK KwljYXNlIEdVRF9EUk1fUFJPUEVSVFlfVFZfT1ZFUlNDQU46CisJCXJldHVybiAmc3RhdGUtPm92 ZXJzY2FuOworCWNhc2UgR1VEX0RSTV9QUk9QRVJUWV9UVl9TQVRVUkFUSU9OOgorCQlyZXR1cm4g JnN0YXRlLT5zYXR1cmF0aW9uOworCWNhc2UgR1VEX0RSTV9QUk9QRVJUWV9UVl9IVUU6CisJCXJl dHVybiAmc3RhdGUtPmh1ZTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsK Kwl9Cit9CisKK3N0YXRpYyBpbnQgZ3VkX2RybV9jb25uZWN0b3JfYWRkX3Byb3BlcnRpZXMoc3Ry dWN0IGd1ZF9kcm1fZGV2aWNlICpnZHJtLAorCQkJCQkgICAgc3RydWN0IGd1ZF9kcm1fY29ubmVj dG9yICpnY29ubiwKKwkJCQkJICAgIHVuc2lnbmVkIGludCBudW1fcHJvcGVydGllcykKK3sKKwlz dHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gJmdkcm0tPmRybTsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciAqY29ubmVjdG9yID0gJmdjb25uLT5jb25uZWN0b3I7CisJc3RydWN0IGd1ZF9kcm1fcHJvcGVy dHkgKnByb3BlcnRpZXM7CisJYm9vbCBuZWVkX3R2X3Byb3BzID0gZmFsc2U7CisJdW5zaWduZWQg aW50IGk7CisJaW50IHJldDsKKworCWdjb25uLT5wcm9wZXJ0aWVzID0ga2NhbGxvYyhudW1fcHJv cGVydGllcywgc2l6ZW9mKCpnY29ubi0+cHJvcGVydGllcyksIEdGUF9LRVJORUwpOworCWlmICgh Z2Nvbm4tPnByb3BlcnRpZXMpCisJCXJldHVybiAtRU5PTUVNOworCisJcHJvcGVydGllcyA9IGtj YWxsb2MobnVtX3Byb3BlcnRpZXMsIHNpemVvZigqcHJvcGVydGllcyksIEdGUF9LRVJORUwpOwor CWlmICghcHJvcGVydGllcykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSBndWRfZHJtX3Vz Yl9nZXQoZ2RybSwgR1VEX0RSTV9VU0JfUkVRX0dFVF9DT05ORUNUT1JfUFJPUEVSVElFUywgY29u bmVjdG9yLT5pbmRleCwKKwkJCSAgICAgIHByb3BlcnRpZXMsIG51bV9wcm9wZXJ0aWVzICogc2l6 ZW9mKCpwcm9wZXJ0aWVzKSk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwlmb3IgKGkgPSAw OyBpIDwgbnVtX3Byb3BlcnRpZXM7IGkrKykgeworCQl1MTYgcHJvcCA9IGxlMTZfdG9fY3B1KHBy b3BlcnRpZXNbaV0ucHJvcCk7CisJCXU2NCB2YWwgPSBsZTY0X3RvX2NwdShwcm9wZXJ0aWVzW2ld LnZhbCk7CisKKwkJZHJtX2RiZyhkcm0sICJwcm9wZXJ0eTogJXUgPSAlbGx1KDB4JWxseClcbiIs IHByb3AsIHZhbCwgdmFsKTsKKworCQlzd2l0Y2ggKHByb3ApIHsKKwkJY2FzZSBHVURfRFJNX1BS T1BFUlRZX1RWX0xFRlRfTUFSR0lOOgorCQkJZmFsbHRocm91Z2g7CisJCWNhc2UgR1VEX0RSTV9Q Uk9QRVJUWV9UVl9SSUdIVF9NQVJHSU46CisJCQlmYWxsdGhyb3VnaDsKKwkJY2FzZSBHVURfRFJN X1BST1BFUlRZX1RWX1RPUF9NQVJHSU46CisJCQlmYWxsdGhyb3VnaDsKKwkJY2FzZSBHVURfRFJN X1BST1BFUlRZX1RWX0JPVFRPTV9NQVJHSU46CisJCQlyZXQgPSBkcm1fbW9kZV9jcmVhdGVfdHZf bWFyZ2luX3Byb3BlcnRpZXMoZHJtKTsKKwkJCWlmIChyZXQpCisJCQkJZ290byBvdXQ7CisJCQli cmVhazsKKwkJY2FzZSBHVURfRFJNX1BST1BFUlRZX1RWX01PREU6CisJCQlyZXQgPSBndWRfZHJt X2Nvbm5lY3Rvcl9hZGRfdHZfbW9kZShnZHJtLCBjb25uZWN0b3IsIHZhbCk7CisJCQlpZiAocmV0 KQorCQkJCWdvdG8gb3V0OworCQkJYnJlYWs7CisJCWNhc2UgR1VEX0RSTV9QUk9QRVJUWV9UVl9T RUxFQ1RfU1VCQ09OTkVDVE9SOgorCQkJZmFsbHRocm91Z2g7CisJCWNhc2UgR1VEX0RSTV9QUk9Q RVJUWV9UVl9CUklHSFRORVNTOgorCQkJZmFsbHRocm91Z2g7CisJCWNhc2UgR1VEX0RSTV9QUk9Q RVJUWV9UVl9DT05UUkFTVDoKKwkJCWZhbGx0aHJvdWdoOworCQljYXNlIEdVRF9EUk1fUFJPUEVS VFlfVFZfRkxJQ0tFUl9SRURVQ1RJT046CisJCQlmYWxsdGhyb3VnaDsKKwkJY2FzZSBHVURfRFJN X1BST1BFUlRZX1RWX09WRVJTQ0FOOgorCQkJZmFsbHRocm91Z2g7CisJCWNhc2UgR1VEX0RSTV9Q Uk9QRVJUWV9UVl9TQVRVUkFUSU9OOgorCQkJZmFsbHRocm91Z2g7CisJCWNhc2UgR1VEX0RSTV9Q Uk9QRVJUWV9UVl9IVUU6CisJCQluZWVkX3R2X3Byb3BzID0gdHJ1ZTsKKwkJCWJyZWFrOworCQlj YXNlIEdVRF9EUk1fUFJPUEVSVFlfQkFDS0xJR0hUX0JSSUdIVE5FU1M6CisJCQlpZiAodmFsID4g MTAwKSB7CisJCQkJcmV0ID0gLUVJTlZBTDsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCWdjb25u LT5pbml0aWFsX2JyaWdodG5lc3MgPSB2YWw7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCS8q IE5ldyBvbmVzIG1pZ2h0IHNob3cgdXAgaW4gZnV0dXJlIGRldmljZXMsIHNraXAgdGhvc2Ugd2Ug ZG9uJ3Qga25vdy4gKi8KKwkJCWRybV9kYmcoZHJtLCAiVW5rbm93biBwcm9wZXJ0eTogJXVcbiIs IHByb3ApOworCQkJY29udGludWU7CisJCX0KKworCQlnY29ubi0+cHJvcGVydGllc1tnY29ubi0+ bnVtX3Byb3BlcnRpZXMrK10gPSBwcm9wOworCX0KKworCWlmICghZ2Nvbm4tPm51bV9wcm9wZXJ0 aWVzKQorCQlnb3RvIG91dDsKKworCWlmIChuZWVkX3R2X3Byb3BzKSB7CisJCS8qIFRoaXMgaXMg YSBuby1vcCBpZiBhbHJlYWR5IGFkZGVkLiAqLworCQlyZXQgPSBkcm1fbW9kZV9jcmVhdGVfdHZf cHJvcGVydGllcyhkcm0sIDAsIE5VTEwpOworCQlpZiAocmV0KQorCQkJZ290byBvdXQ7CisJfQor CisJZm9yIChpID0gMDsgaSA8IG51bV9wcm9wZXJ0aWVzOyBpKyspIHsKKwkJdTE2IHByb3AgPSBs ZTE2X3RvX2NwdShwcm9wZXJ0aWVzW2ldLnByb3ApOworCQl1NjQgdmFsID0gbGU2NF90b19jcHUo cHJvcGVydGllc1tpXS52YWwpOworCQlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eTsKKwkJ dW5zaWduZWQgaW50ICpzdGF0ZV92YWw7CisKKwkJc3dpdGNoIChwcm9wKSB7CisJCWNhc2UgR1VE X0RSTV9QUk9QRVJUWV9CQUNLTElHSFRfQlJJR0hUTkVTUzoKKwkJCS8qIG5vdCBhIERSTSBwcm9w ZXJ0eSAqLworCQkJY29udGludWU7CisJCWNhc2UgR1VEX0RSTV9QUk9QRVJUWV9UVl9NT0RFOgor CQkJdmFsID0gdmFsICYgKEJJVChHVURfRFJNX1VTQl9DT05ORUNUT1JfVFZfTU9ERV9OVU1fU0hJ RlQpIC0gMSk7CisJCQlicmVhazsKKwkJfQorCisJCXByb3BlcnR5ID0gZ3VkX2RybV9jb25uZWN0 b3JfcHJvcGVydHlfbG9va3VwKGNvbm5lY3RvciwgcHJvcCk7CisJCWlmIChJU19FUlIocHJvcGVy dHkpKQorCQkJY29udGludWU7CisKKwkJc3RhdGVfdmFsID0gZ3VkX2RybV9jb25uZWN0b3JfdHZf c3RhdGVfdmFsKHByb3AsICZnY29ubi0+aW5pdGlhbF90dl9zdGF0ZSk7CisJCWlmIChJU19FUlIo c3RhdGVfdmFsKSkKKwkJCWNvbnRpbnVlOworCisJCSpzdGF0ZV92YWwgPSB2YWw7CisJCWRybV9v YmplY3RfYXR0YWNoX3Byb3BlcnR5KCZjb25uZWN0b3ItPmJhc2UsIHByb3BlcnR5LCAwKTsKKwl9 CitvdXQ6CisJa2ZyZWUocHJvcGVydGllcyk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgZ3Vk X2RybV9jb25uZWN0b3JfZmlsbF9wcm9wZXJ0aWVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25u ZWN0b3IsCisJCQkJICAgICAgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5lY3Rvcl9z dGF0ZSwKKwkJCQkgICAgICBzdHJ1Y3QgZ3VkX2RybV9wcm9wZXJ0eSAqcHJvcGVydGllcykKK3sK KwlzdHJ1Y3QgZ3VkX2RybV9jb25uZWN0b3IgKmdjb25uOworCXVuc2lnbmVkIGludCBpOworCisJ Z2Nvbm4gPSB0b19ndWRfZHJtX2Nvbm5lY3Rvcihjb25uZWN0b3IpOworCisJLyogT25seSBpbnRl cmVzdGVkIGluIHRoZSBjb3VudD8gKi8KKwlpZiAoIWNvbm5lY3Rvcl9zdGF0ZSkKKwkJcmV0dXJu IGdjb25uLT5udW1fcHJvcGVydGllczsKKworCWZvciAoaSA9IDA7IGkgPCBnY29ubi0+bnVtX3By b3BlcnRpZXM7IGkrKykgeworCQl1MTYgcHJvcCA9IGdjb25uLT5wcm9wZXJ0aWVzW2ldOworCQl1 NjQgdmFsOworCisJCWlmIChwcm9wID09IEdVRF9EUk1fUFJPUEVSVFlfQkFDS0xJR0hUX0JSSUdI VE5FU1MpIHsKKwkJCXZhbCA9IGNvbm5lY3Rvcl9zdGF0ZS0+dHYuYnJpZ2h0bmVzczsKKwkJfSBl bHNlIHsKKwkJCXVuc2lnbmVkIGludCAqc3RhdGVfdmFsOworCisJCQlzdGF0ZV92YWwgPSBndWRf ZHJtX2Nvbm5lY3Rvcl90dl9zdGF0ZV92YWwocHJvcCwgJmNvbm5lY3Rvcl9zdGF0ZS0+dHYpOwor CQkJaWYgKFdBUk5fT05fT05DRShJU19FUlIoc3RhdGVfdmFsKSkpCisJCQkJcmV0dXJuIFBUUl9F UlIoc3RhdGVfdmFsKTsKKworCQkJdmFsID0gKnN0YXRlX3ZhbDsKKwkJfQorCisJCXByb3BlcnRp ZXNbaV0ucHJvcCA9IGNwdV90b19sZTE2KHByb3ApOworCQlwcm9wZXJ0aWVzW2ldLnZhbCA9IGNw dV90b19sZTY0KHZhbCk7CisJfQorCisJcmV0dXJuIGdjb25uLT5udW1fcHJvcGVydGllczsKK30K KworaW50IGd1ZF9kcm1fY29ubmVjdG9yX2NyZWF0ZShzdHJ1Y3QgZ3VkX2RybV9kZXZpY2UgKmdk cm0sIHVuc2lnbmVkIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgZ3VkX2RybV9yZXFfZ2V0X2Nvbm5l Y3RvciBkZXNjOworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSAmZ2RybS0+ZHJtOworCXN0cnVj dCBndWRfZHJtX2Nvbm5lY3RvciAqZ2Nvbm47CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5l Y3RvcjsKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CisJaW50IHJldDsKKworCXJldCA9 IGd1ZF9kcm1fdXNiX2dldChnZHJtLCBHVURfRFJNX1VTQl9SRVFfR0VUX0NPTk5FQ1RPUiwgaW5k ZXgsICZkZXNjLCBzaXplb2YoZGVzYykpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlk cm1fZGJnKGRybSwgImluZGV4PSV1IHR5cGU9JXUgZmxhZ3M9MHgleCBudW1fcHJvcGVydGllcz0l dVxuIiwgaW5kZXgsCisJCWRlc2MuY29ubmVjdG9yX3R5cGUsIGxlMzJfdG9fY3B1KGRlc2MuZmxh Z3MpLCBkZXNjLm51bV9wcm9wZXJ0aWVzKTsKKworCS8qIFJFVklTSVQ6IFRoaXMgbmVlZHMgdG8g YmUgdXBkYXRlZCBhcyBuZXcgdHlwZXMgYXJlIGFkZGVkICovCisJaWYgKGRlc2MuY29ubmVjdG9y X3R5cGUgPiBEUk1fTU9ERV9DT05ORUNUT1JfU1BJKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWdj b25uID0ga3phbGxvYyhzaXplb2YoKmdjb25uKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFnY29ubikK KwkJcmV0dXJuIC1FTk9NRU07CisKKwlnY29ubi0+aW5pdGlhbF9icmlnaHRuZXNzID0gLUVOT0RF VjsKKwlnY29ubi0+ZmxhZ3MgPSBsZTMyX3RvX2NwdShkZXNjLmZsYWdzKTsKKwljb25uZWN0b3Ig PSAmZ2Nvbm4tPmNvbm5lY3RvcjsKKworCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZChjb25uZWN0 b3IsICZndWRfZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOworCXJldCA9IGRybV9jb25uZWN0 b3JfaW5pdChkcm0sIGNvbm5lY3RvciwgJmd1ZF9kcm1fY29ubmVjdG9yX2Z1bmNzLCBkZXNjLmNv bm5lY3Rvcl90eXBlKTsKKwlpZiAocmV0KSB7CisJCWtmcmVlKGNvbm5lY3Rvcik7CisJCXJldHVy biByZXQ7CisJfQorCisJaWYgKFdBUk5fT04oY29ubmVjdG9yLT5pbmRleCAhPSBpbmRleCkpCisJ CXJldHVybiAtRUlOVkFMOworCisJaWYgKGdjb25uLT5mbGFncyAmIEdVRF9EUk1fQ09OTkVDVE9S X0ZMQUdTX1BPTEwpCisJCWNvbm5lY3Rvci0+cG9sbGVkID0gKERSTV9DT05ORUNUT1JfUE9MTF9D T05ORUNUIHwgRFJNX0NPTk5FQ1RPUl9QT0xMX0RJU0NPTk5FQ1QpOworCisJaWYgKGRlc2MubnVt X3Byb3BlcnRpZXMpIHsKKwkJcmV0ID0gZ3VkX2RybV9jb25uZWN0b3JfYWRkX3Byb3BlcnRpZXMo Z2RybSwgZ2Nvbm4sIGRlc2MubnVtX3Byb3BlcnRpZXMpOworCQlpZiAocmV0KSB7CisJCQlkZXZf ZXJyKGRybS0+ZGV2LCAiRmFpbGVkIHRvIGFkZCBjb25uZWN0b3IvJXUgcHJvcGVydGllc1xuIiwg aW5kZXgpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCS8qIFRoZSBmaXJzdCBjb25uZWN0 b3IgaXMgYXR0YWNoZWQgdG8gdGhlIGV4aXN0aW5nIHNpbXBsZSBwaXBlIGVuY29kZXIgKi8KKwlp ZiAoIWNvbm5lY3Rvci0+aW5kZXgpIHsKKwkJZW5jb2RlciA9ICZnZHJtLT5waXBlLmVuY29kZXI7 CisJfSBlbHNlIHsKKwkJZW5jb2RlciA9ICZnY29ubi0+ZW5jb2RlcjsKKworCQlyZXQgPSBkcm1f c2ltcGxlX2VuY29kZXJfaW5pdChkcm0sIGVuY29kZXIsIERSTV9NT0RFX0VOQ09ERVJfTk9ORSk7 CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCWVuY29kZXItPnBvc3NpYmxlX2NydGNz ID0gMTsKKwl9CisKKwlyZXR1cm4gZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2Rlcihjb25uZWN0 b3IsIGVuY29kZXIpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2d1ZC9ndWRfZHJt X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2d1ZC9ndWRfZHJtX2Rydi5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZTJkNzJlMmVjMjE5Ci0tLSAvZGV2L251bGwKKysr IGIvZHJpdmVycy9ncHUvZHJtL2d1ZC9ndWRfZHJtX2Rydi5jCkBAIC0wLDAgKzEsNjQ4IEBACisv LyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUCisvKgorICogQ29weXJpZ2h0IDIwMjAgTm9y YWxmIFRyw7hubmVzCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RtYS1idWYuaD4KKyNpbmNsdWRl IDxsaW51eC9sejQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51 eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmdfaGVscGVycy5oPgor I2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorCisj aW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9kYW1h Z2VfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8ZHJt L2RybV9kcnYuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2hlbHBlci5oPgorI2luY2x1ZGUgPGRy bS9kcm1fZm91cmNjLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmg+Cisj aW5jbHVkZSA8ZHJtL2RybV9nZW1fZnJhbWVidWZmZXJfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJt L2RybV9tYW5hZ2VkLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wcmludC5oPgorI2luY2x1ZGUgPGRy bS9kcm1fcHJvYmVfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9zaW1wbGVfa21zX2hlbHBl ci5oPgorI2luY2x1ZGUgPGRybS9ndWRfZHJtLmg+CisKKyNpbmNsdWRlICJndWRfZHJtX2ludGVy bmFsLmgiCisKKy8qIE9ubHkgdXNlZCBpbnRlcm5hbGx5ICovCitzdGF0aWMgY29uc3Qgc3RydWN0 IGRybV9mb3JtYXRfaW5mbyBndWRfZHJtX2Zvcm1hdF9yMSA9IHsKKwkuZm9ybWF0ID0gR1VEX0RS TV9GT1JNQVRfUjEsCisJLm51bV9wbGFuZXMgPSAxLAorCS5jaGFyX3Blcl9ibG9jayA9IHsgMSwg MCwgMCB9LAorCS5ibG9ja193ID0geyA4LCAwLCAwIH0sCisJLmJsb2NrX2ggPSB7IDEsIDAsIDAg fSwKKwkuaHN1YiA9IDEsCisJLnZzdWIgPSAxLAorfTsKKworc3RhdGljIGludCBndWRfZHJtX3Vz Yl9jb250cm9sX21zZyhzdHJ1Y3QgdXNiX2RldmljZSAqdXNiLCB1OCBpZm51bSwgYm9vbCBpbiwK KwkJCQkgICB1OCByZXF1ZXN0LCB1MTYgdmFsdWUsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbiwKKwkJ CQkgICBib29sIGNoZWNrX2xlbikKK3sKKwl1OCByZXF1ZXN0dHlwZSA9IFVTQl9UWVBFX1ZFTkRP UiB8IFVTQl9SRUNJUF9JTlRFUkZBQ0U7CisJdW5zaWduZWQgaW50IHBpcGU7CisJaW50IHJldDsK KworCWlmIChpbikgeworCQlwaXBlID0gdXNiX3JjdmN0cmxwaXBlKHVzYiwgMCk7CisJCXJlcXVl c3R0eXBlIHw9IFVTQl9ESVJfSU47CisJfSBlbHNlIHsKKwkJcGlwZSA9IHVzYl9zbmRjdHJscGlw ZSh1c2IsIDApOworCQlyZXF1ZXN0dHlwZSB8PSBVU0JfRElSX09VVDsKKwl9CisKKwlyZXQgPSB1 c2JfY29udHJvbF9tc2codXNiLCBwaXBlLCByZXF1ZXN0LCByZXF1ZXN0dHlwZSwgdmFsdWUsCisJ CQkgICAgICBpZm51bSwgYnVmLCBsZW4sIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKKworCWlmIChj aGVja19sZW4gJiYgcmV0ID49IDApIHsKKwkJaWYgKHJldCAhPSBsZW4pCisJCQlyZXQgPSAtRUlP OworCQllbHNlCisJCQlyZXQgPSAwOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBp bnQgZ3VkX2dldF92ZW5kb3JfZGVzY3JpcHRvcihzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJm YWNlLAorCQkJCSAgICAgc3RydWN0IGd1ZF9kcm1fZGlzcGxheV9kZXNjcmlwdG9yICpkZXNjKQor eworCXU4IGlmbnVtID0gaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNl TnVtYmVyOworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2IgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGlu dGVyZmFjZSk7CisJdm9pZCAqYnVmOworCWludCByZXQ7CisKKwlidWYgPSBrbWFsbG9jKHNpemVv ZigqZGVzYyksIEdGUF9LRVJORUwpOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKwor CXJldCA9IGd1ZF9kcm1fdXNiX2NvbnRyb2xfbXNnKHVzYiwgaWZudW0sIHRydWUsIFVTQl9SRVFf R0VUX0RFU0NSSVBUT1IsCisJCQkJICAgICAgR1VEX0RSTV9VU0JfRFRfRElTUExBWSA8PCA4LCBi dWYsIHNpemVvZigqZGVzYyksIGZhbHNlKTsKKworCW1lbWNweShkZXNjLCBidWYsIHNpemVvZigq ZGVzYykpOworCWtmcmVlKGJ1Zik7CisKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwor CWlmIChyZXQgIT0gc2l6ZW9mKCpkZXNjKSB8fCBkZXNjLT5iTGVuZ3RoICE9IHNpemVvZigqZGVz YykgfHwKKwkgICAgZGVzYy0+YkRlc2NyaXB0b3JUeXBlICE9IEdVRF9EUk1fVVNCX0RUX0RJU1BM QVkpCisJCXJldHVybiAtRU5PREFUQTsKKworCURSTV9ERVZfREVCVUdfRFJJVkVSKCZpbnRlcmZh Y2UtPmRldiwKKwkJCSAgICAgIlZlcnNpb249JXUgQ29tcHJlc3Npb249MHgleCBOdW1Gb3JtYXRz PSV1IE51bUNvbm5lY3RvcnM9JXUgTWF4QnVmZmVyU2l6ZU9yZGVyPSV1XG4iLAorCQkJICAgICBk ZXNjLT5iVmVyc2lvbiwgZGVzYy0+YkNvbXByZXNzaW9uLCBkZXNjLT5iTnVtRm9ybWF0cywKKwkJ CSAgICAgZGVzYy0+Yk51bUNvbm5lY3RvcnMsIGRlc2MtPmJNYXhCdWZmZXJTaXplT3JkZXIpOwor CisJaWYgKCFkZXNjLT5iVmVyc2lvbiB8fCAhZGVzYy0+Yk51bUZvcm1hdHMgfHwgIWRlc2MtPmJO dW1Db25uZWN0b3JzIHx8CisJICAgICFkZXNjLT5iTWF4QnVmZmVyU2l6ZU9yZGVyIHx8ICFkZXNj LT5kd01heFdpZHRoIHx8ICFkZXNjLT5kd01heEhlaWdodCB8fAorCSAgICBsZTMyX3RvX2NwdShk ZXNjLT5kd01pbldpZHRoKSA+IGxlMzJfdG9fY3B1KGRlc2MtPmR3TWF4V2lkdGgpIHx8CisJICAg IGxlMzJfdG9fY3B1KGRlc2MtPmR3TWluSGVpZ2h0KSA+IGxlMzJfdG9fY3B1KGRlc2MtPmR3TWF4 SGVpZ2h0KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlu dCBndWRfdXNiX2dldF9zdGF0dXMoc3RydWN0IHVzYl9kZXZpY2UgKnVzYiwgdTggaWZudW0pCit7 CisJc3RydWN0IGd1ZF9kcm1fcmVxX2dldF9zdGF0dXMgKnN0YXR1czsKKwlpbnQgcmV0LCBzdGF0 dXNfcmV0cmllcyA9IDIwMDAgLyA1OyAvKiBtYXhpbXVtIHdhaXQgfjIgc2Vjb25kcyAqLworCXVu c2lnbmVkIGxvbmcgZGVsYXkgPSA1MDA7CisKKwlzdGF0dXMgPSBrbWFsbG9jKHNpemVvZigqc3Rh dHVzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzdGF0dXMpCisJCXJldHVybiAtRU5PTUVNOworCisJ LyoKKwkgKiBQb2xsIGR1ZSB0byBsYWNrIG9mIGRhdGEvc3RhdHVzIHN0YWdlIGNvbnRyb2wgb24g dGhlIGdhZGdldCBzaWRlLgorCSAqCisJICogSWYgd2UgZGlkIG5vdCB1c2UgcG9sbGluZyBhbmQg Z2F2ZSB1cCBoZXJlIGFmdGVyIHdhaXRpbmcgMiBzZWNvbmRzLAorCSAqIHRoZSB3b3JrZXIgaW4g dGhlIGdhZGdldCB3b3VsZCBmaW5hbGx5IGdldCB0byBxdWV1aW5nIHVwIHRoZSBzdGF0dXMKKwkg KiByZXNwb25zLCBidXQgYnkgdGhhdCB0aW1lIHRoZSBob3N0IGhhcyBtb3ZlZCBvbi4gVGhlIGdh ZGdldCBzaWRlCisJICogKGF0IGxlYXN0IGR3YzIpIHdvdWxkIG5vdyBiZSBsZWZ0IGluIGEgbm9u LXJlY292ZXJhYmxlIHN0YXRlLgorCSAqCisJICogV29yc3QgY2FzZSBjb21taXQgdGltZW91dCBp biBEUk0gY2FuIGJlIHRlbnMgb2Ygc2Vjb25kcyAod2FpdCBmb3IKKwkgKiB2YXJpb3VzIF9kb25l IGNvbXBsZXRpb25zKS4KKwkgKi8KKwl3aGlsZSAoc3RhdHVzX3JldHJpZXMtLSkgeworCQlyZXQg PSBndWRfZHJtX3VzYl9jb250cm9sX21zZyh1c2IsIGlmbnVtLCB0cnVlLCBVU0JfUkVRX0dFVF9T VEFUVVMsIDAsCisJCQkJCSAgICAgIHN0YXR1cywgc2l6ZW9mKCpzdGF0dXMpLCB0cnVlKTsKKwkJ aWYgKHJldCkKKwkJCWdvdG8gb3V0OworCisJCWlmICghKHN0YXR1cy0+ZmxhZ3MgJiBHVURfRFJN X1NUQVRVU19QRU5ESU5HKSkgeworCQkJcmV0ID0gLXN0YXR1cy0+ZXJybm87CisJCQlnb3RvIG91 dDsKKwkJfQorCisJCXVzbGVlcF9yYW5nZShkZWxheSwgZGVsYXkgKyAxMDAwKTsKKworCQlpZiAo ZGVsYXkgPCA0NTAwKQorCQkJZGVsYXkgKz0gMTAwMDsKKwl9CisKKwlyZXQgPSAtRVRJTUVET1VU Oworb3V0OgorCWtmcmVlKHN0YXR1cyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50 IGd1ZF91c2JfdHJhbnNmZXIoc3RydWN0IGd1ZF9kcm1fZGV2aWNlICpnZHJtLCBib29sIGluLCB1 OCByZXF1ZXN0LAorCQkJICAgIHUxNiBpbmRleCwgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQorewor CWludCBpZHgsIHJldDsKKworCWRybV9kYmcoJmdkcm0tPmRybSwgIiVzOiByZXF1ZXN0PTB4JXgg aW5kZXg9JXUgbGVuPSV6dVxuIiwKKwkJaW4gPyAiZ2V0IiA6ICJzZXQiLCByZXF1ZXN0LCBpbmRl eCwgbGVuKTsKKworCWlmIChsZW4gPiBHVURfRFJNX01BWF9UUkFOU0ZFUl9TSVpFKQorCQlyZXR1 cm4gLUVOT01FTTsKKworCWlmICghZHJtX2Rldl9lbnRlcigmZ2RybS0+ZHJtLCAmaWR4KSkKKwkJ cmV0dXJuIC1FTk9ERVY7CisKKwltdXRleF9sb2NrKCZnZHJtLT5jdHJsX2xvY2spOworCisJaWYg KCFpbiAmJiBidWYpCisJCW1lbWNweShnZHJtLT5jdHJsX21zZ19idWYsIGJ1ZiwgbGVuKTsKKwor CXJldCA9IGd1ZF9kcm1fdXNiX2NvbnRyb2xfbXNnKGdkcm0tPnVzYiwgZ2RybS0+aWZudW0sIGlu LCByZXF1ZXN0LCBpbmRleCwKKwkJCQkgICAgICBnZHJtLT5jdHJsX21zZ19idWYsIGxlbiwgdHJ1 ZSk7CisKKwkvKgorCSAqIE9VVCB0cmFuc2ZlcnMgYXJlIHByb2Nlc3NlZCBpbiBhIHdvcmtlciBv biB0aGUgZ2FkZ2V0IHNpZGUgYWZ0ZXIKKwkgKiByZWNlcHRpb24gc28gd2UgYWx3YXlzIG5lZWQg dG8gY2hlY2sgc3RhdHVzLiBJTiB0cmFuc2ZlcnMgYXJlCisJICogcHJvY2Vzc2VkIGluIHRoZSBp bnRlcnJ1cHQgaGFuZGxlciBhbmQgd2lsbCBoYWx0IG9uIGVycm9yIGxldHRpbmcgdXMKKwkgKiBr bm93IHNvbWV0aGluZyB3ZW50IHdyb25nLgorCSAqLworCWlmIChyZXQgfHwgIWluKSB7CisJCXJl dCA9IGd1ZF91c2JfZ2V0X3N0YXR1cyhnZHJtLT51c2IsIGdkcm0tPmlmbnVtKTsKKwkJaWYgKHJl dCkKKwkJCWdvdG8gZXJyb3I7CisJfQorCisJaWYgKGluICYmIGJ1ZikKKwkJbWVtY3B5KGJ1Ziwg Z2RybS0+Y3RybF9tc2dfYnVmLCBsZW4pOworZXJyb3I6CisJaWYgKHJldCkgeworCQlkcm1fZGJn KCZnZHJtLT5kcm0sICJyZXQ9JWRcbiIsIHJldCk7CisJCWdkcm0tPnN0YXRzX251bV9lcnJvcnMr KzsKKwl9CisKKwltdXRleF91bmxvY2soJmdkcm0tPmN0cmxfbG9jayk7CisJZHJtX2Rldl9leGl0 KGlkeCk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgZ3VkX2RybV91c2JfZ2V0KHN0cnVjdCBn dWRfZHJtX2RldmljZSAqZ2RybSwgdTggcmVxdWVzdCwgdTE2IGluZGV4LCB2b2lkICpidWYsIHNp emVfdCBsZW4pCit7CisJcmV0dXJuIGd1ZF91c2JfdHJhbnNmZXIoZ2RybSwgdHJ1ZSwgcmVxdWVz dCwgaW5kZXgsIGJ1ZiwgbGVuKTsKK30KKworaW50IGd1ZF9kcm1fdXNiX3NldChzdHJ1Y3QgZ3Vk X2RybV9kZXZpY2UgKmdkcm0sIHU4IHJlcXVlc3QsIHUxNiBpbmRleCwgdm9pZCAqYnVmLCBzaXpl X3QgbGVuKQoreworCXJldHVybiBndWRfdXNiX3RyYW5zZmVyKGdkcm0sIGZhbHNlLCByZXF1ZXN0 LCBpbmRleCwgYnVmLCBsZW4pOworfQorCitpbnQgZ3VkX2RybV91c2Jfd3JpdGU4KHN0cnVjdCBn dWRfZHJtX2RldmljZSAqZ2RybSwgdTggcmVxdWVzdCwgdTggdmFsKQoreworCXJldHVybiBndWRf ZHJtX3VzYl9zZXQoZ2RybSwgcmVxdWVzdCwgMCwgJnZhbCwgc2l6ZW9mKHZhbCkpOworfQorCitz dGF0aWMgaW50IGd1ZF9kcm1fdXNiX3JlYWQzMihzdHJ1Y3QgZ3VkX2RybV9kZXZpY2UgKmdkcm0s IHU4IHJlcXVlc3QsCisJCQkgICAgICB1MzIgKnZhbHMsIHVuc2lnbmVkIGludCBudW1fdmFscykK K3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgcmV0OworCisJcmV0ID0gZ3VkX2RybV91c2JfZ2V0 KGdkcm0sIHJlcXVlc3QsIDAsIHZhbHMsIG51bV92YWxzICogc2l6ZW9mKCp2YWxzKSk7CisJaWYg KHJldCkKKwkJcmV0dXJuIHJldDsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fdmFsczsgaSsrKQor CQl2YWxzW2ldID0gbGUzMl90b19jcHUoKF9fbGUzMil2YWxzW2ldKTsKKworCXJldHVybiAwOwor fQorCitzdGF0aWMgaW50IGd1ZF9kcm1fZ2V0X3Byb3BlcnRpZXMoc3RydWN0IGd1ZF9kcm1fZGV2 aWNlICpnZHJtLCB1bnNpZ25lZCBpbnQgbnVtX3Byb3BlcnRpZXMpCit7CisJc3RydWN0IGd1ZF9k cm1fcHJvcGVydHkgKnByb3BlcnRpZXM7CisJdW5zaWduZWQgaW50IGk7CisJaW50IHJldDsKKwor CWlmICghbnVtX3Byb3BlcnRpZXMpCisJCXJldHVybiAwOworCisJZ2RybS0+cHJvcGVydGllcyA9 IGtjYWxsb2MobnVtX3Byb3BlcnRpZXMsIHNpemVvZigqZ2RybS0+cHJvcGVydGllcyksIEdGUF9L RVJORUwpOworCWlmICghZ2RybS0+cHJvcGVydGllcykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlw cm9wZXJ0aWVzID0ga2NhbGxvYyhudW1fcHJvcGVydGllcywgc2l6ZW9mKCpwcm9wZXJ0aWVzKSwg R0ZQX0tFUk5FTCk7CisJaWYgKCFwcm9wZXJ0aWVzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJl dCA9IGd1ZF9kcm1fdXNiX2dldChnZHJtLCBHVURfRFJNX1VTQl9SRVFfR0VUX1BST1BFUlRJRVMs IDAsCisJCQkgICAgICBwcm9wZXJ0aWVzLCBudW1fcHJvcGVydGllcyAqIHNpemVvZigqcHJvcGVy dGllcykpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJZm9yIChpID0gMDsgaSA8IG51bV9w cm9wZXJ0aWVzOyBpKyspIHsKKwkJdTE2IHByb3AgPSBsZTE2X3RvX2NwdShwcm9wZXJ0aWVzW2ld LnByb3ApOworCQl1NjQgdmFsID0gbGU2NF90b19jcHUocHJvcGVydGllc1tpXS52YWwpOworCisJ CXN3aXRjaCAocHJvcCkgeworCQljYXNlIEdVRF9EUk1fUFJPUEVSVFlfUk9UQVRJT046CisJCQly ZXQgPSBkcm1fcGxhbmVfY3JlYXRlX3JvdGF0aW9uX3Byb3BlcnR5KCZnZHJtLT5waXBlLnBsYW5l LAorCQkJCQkJCQkgRFJNX01PREVfUk9UQVRFXzAsIHZhbCk7CisJCQlicmVhazsKKwkJZGVmYXVs dDoKKwkJCS8qIE5ldyBvbmVzIG1pZ2h0IHNob3cgdXAgaW4gZnV0dXJlIGRldmljZXMsIHNraXAg dGhvc2Ugd2UgZG9uJ3Qga25vdy4gKi8KKwkJCWRybV9kYmcoJmdkcm0tPmRybSwgIlVua25vd24g cHJvcGVydHk6ICV1XG4iLCBwcm9wKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHJldCkK KwkJCWdvdG8gb3V0OworCisJCWdkcm0tPnByb3BlcnRpZXNbZ2RybS0+bnVtX3Byb3BlcnRpZXMr K10gPSBwcm9wOworCX0KK291dDoKKwlrZnJlZShwcm9wZXJ0aWVzKTsKKworCXJldHVybiByZXQ7 Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKgorZ3VkX2RybV9kcml2ZXJfZ2Vt X2NyZWF0ZV9vYmplY3Qoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc2l6ZV90IHNpemUpCit7CisJ c3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbTsKKworCXNobWVtID0ga3phbGxvYyhz aXplb2YoKnNobWVtKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzaG1lbSkKKwkJcmV0dXJuIE5VTEw7 CisKKwkvKgorCSAqIFRoaXMgZG9lc24ndCBtYWtlIGEgZGlmZmVyZW5jZSBvbiB4ODYsIGJ1dCBv biBBUk0gKHBpNCkgaXQgd2FzCisJICogbmVjZXNzYXJ5IHRvIGF2b2lkIGJsYWNrIGxpbmVzIGFs bCBvdmVyIGFuZCBpdCBtYWRlIGl0IHBvc3NpYmxlIHRvCisJICogY29tcHJlc3MgZGlyZWN0bHkg ZnJvbSB0aGUgZnJhbWVidWZmZXIgd2l0aG91dCBwZXJmb3JtYW5jZSBkcm9wLgorCSAqLworCXNo bWVtLT5tYXBfY2FjaGVkID0gdHJ1ZTsKKworCXJldHVybiAmc2htZW0tPmJhc2U7Cit9CisKK3N0 YXRpYyBpbnQgZ3VkX2RybV9zdGF0c19kZWJ1Z2ZzKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAq ZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IG0tPnByaXZhdGU7CisJc3Ry dWN0IGd1ZF9kcm1fZGV2aWNlICpnZHJtID0gdG9fZ3VkX2RybV9kZXZpY2Uobm9kZS0+bWlub3It PmRldik7CisJY2hhciBidWZbMTBdOworCisJc3RyaW5nX2dldF9zaXplKGdkcm0tPmJ1bGtfbGVu LCAxLCBTVFJJTkdfVU5JVFNfMiwgYnVmLCBzaXplb2YoYnVmKSk7CisJc2VxX3ByaW50ZihtLCAi TWF4IGJ1ZmZlciBzaXplOiAlc1xuIiwgYnVmKTsKKwlzZXFfcHJpbnRmKG0sICJOdW1iZXIgb2Yg ZXJyb3JzOiAgJXVcbiIsIGdkcm0tPnN0YXRzX251bV9lcnJvcnMpOworCisJc2VxX3B1dHMobSwg IkNvbXByZXNzaW9uOiAgICAgICIpOworCWlmIChnZHJtLT5jb21wcmVzc2lvbiAmIEdVRF9EUk1f Q09NUFJFU1NJT05fTFo0KQorCQlzZXFfcHV0cyhtLCAiIGx6NCIpOworCXNlcV9wdXRzKG0sICJc biIpOworCisJaWYgKGdkcm0tPmNvbXByZXNzaW9uKSB7CisJCXU2NCByZW1haW5kZXI7CisJCXU2 NCByYXRpbyA9IGRpdjY0X3U2NF9yZW0oZ2RybS0+c3RhdHNfbGVuZ3RoLCBnZHJtLT5zdGF0c19h Y3R1YWxfbGVuZ3RoLAorCQkJCQkgICZyZW1haW5kZXIpOworCQl1NjQgcmF0aW9fZnJhYyA9IGRp djY0X3U2NChyZW1haW5kZXIgKiAxMCwgZ2RybS0+c3RhdHNfYWN0dWFsX2xlbmd0aCk7CisKKwkJ c2VxX3ByaW50ZihtLCAiQ29tcHJlc3Npb24gcmF0aW86ICVsbHUuJWxsdVxuIiwgcmF0aW8sIHJh dGlvX2ZyYWMpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRy bV9pbmZvX2xpc3QgZ3VkX2RybV9kZWJ1Z2ZzX2xpc3RbXSA9IHsKKwl7ICJzdGF0cyIsIGd1ZF9k cm1fc3RhdHNfZGVidWdmcywgMCwgTlVMTCB9LAorfTsKKworc3RhdGljIHZvaWQgZ3VkX2RybV9k cml2ZXJfZGVidWdmc19pbml0KHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKQoreworCWRybV9kZWJ1 Z2ZzX2NyZWF0ZV9maWxlcyhndWRfZHJtX2RlYnVnZnNfbGlzdCwgQVJSQVlfU0laRShndWRfZHJt X2RlYnVnZnNfbGlzdCksCisJCQkJIG1pbm9yLT5kZWJ1Z2ZzX3Jvb3QsIG1pbm9yKTsKK30KKwor c3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZV9mdW5jcyBndWRfZHJt X3BpcGVfZnVuY3MgPSB7CisJLmNoZWNrICAgICAgPSBndWRfZHJtX3BpcGVfY2hlY2ssCisJLnVw ZGF0ZQkgICAgPSBndWRfZHJtX3BpcGVfdXBkYXRlLAorCS5wcmVwYXJlX2ZiID0gZHJtX2dlbV9m Yl9zaW1wbGVfZGlzcGxheV9waXBlX3ByZXBhcmVfZmIsCit9OworCitzdGF0aWMgY29uc3Qgc3Ry dWN0IGRybV9tb2RlX2NvbmZpZ19mdW5jcyBndWRfZHJtX21vZGVfY29uZmlnX2Z1bmNzID0gewor CS5mYl9jcmVhdGUgPSBkcm1fZ2VtX2ZiX2NyZWF0ZV93aXRoX2RpcnR5LAorCS5hdG9taWNfY2hl Y2sgPSBkcm1fYXRvbWljX2hlbHBlcl9jaGVjaywKKwkuYXRvbWljX2NvbW1pdCA9IGRybV9hdG9t aWNfaGVscGVyX2NvbW1pdCwKK307CisKK3N0YXRpYyBjb25zdCB1aW50NjRfdCBndWRfZHJtX3Bp cGVfbW9kaWZpZXJzW10gPSB7CisJRFJNX0ZPUk1BVF9NT0RfTElORUFSLAorCURSTV9GT1JNQVRf TU9EX0lOVkFMSUQKK307CisKK0RFRklORV9EUk1fR0VNX0ZPUFMoZ3VkX2RybV9mb3BzKTsKKwor c3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIGd1ZF9kcm1fZHJpdmVyID0geworCS5kcml2ZXJfZmVh dHVyZXMJPSBEUklWRVJfTU9ERVNFVCB8IERSSVZFUl9HRU0gfCBEUklWRVJfQVRPTUlDLAorCS5m b3BzCQkJPSAmZ3VkX2RybV9mb3BzLAorCS5nZW1fY3JlYXRlX29iamVjdAk9IGd1ZF9kcm1fZHJp dmVyX2dlbV9jcmVhdGVfb2JqZWN0LAorCURSTV9HRU1fU0hNRU1fRFJJVkVSX09QUywKKwkuZGVi dWdmc19pbml0CQk9IGd1ZF9kcm1fZHJpdmVyX2RlYnVnZnNfaW5pdCwKKworCS5uYW1lCQkJPSAi Z3VkX2RybSIsCisJLmRlc2MJCQk9ICJHZW5lcmljIFVTQiBEaXNwbGF5IiwKKwkuZGF0ZQkJCT0g IjIwMjAwNDIyIiwKKwkubWFqb3IJCQk9IDEsCisJLm1pbm9yCQkJPSAwLAorfTsKKworc3RhdGlj IHZvaWQgZ3VkX2RybV9mcmVlX2J1ZmZlcnNfYW5kX211dGV4KHZvaWQgKmRhdGEpCit7CisJc3Ry dWN0IGd1ZF9kcm1fZGV2aWNlICpnZHJtID0gZGF0YTsKKworCS8qIEFjY2VzcyB0byB0aGVzZSBh cmUgcHJvdGVjdGVkIGJ5IGRybV9kZXZfZW50ZXIvZXhpdCAqLworCisJa2ZyZWUoZ2RybS0+cHJv cGVydGllcyk7CisJdmZyZWUoZ2RybS0+Y29tcHJlc3NfYnVmKTsKKwlrZnJlZShnZHJtLT5idWxr X2J1Zik7CisJa2ZyZWUoZ2RybS0+Y3RybF9tc2dfYnVmKTsKKwlnZHJtLT5wcm9wZXJ0aWVzID0g TlVMTDsKKwlnZHJtLT5jb21wcmVzc19idWYgPSBOVUxMOworCWdkcm0tPmJ1bGtfYnVmID0gTlVM TDsKKwlnZHJtLT5jdHJsX21zZ19idWYgPSBOVUxMOworCisJbXV0ZXhfZGVzdHJveSgmZ2RybS0+ Y3RybF9sb2NrKTsKKwltdXRleF9kZXN0cm95KCZnZHJtLT5kYW1hZ2VfbG9jayk7Cit9CisKK3N0 YXRpYyBpbnQgZ3VkX2RybV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAor CQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwl1OCBpZm51bSA9IGludGVy ZmFjZS0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcjsKKwlzdHJ1Y3QgdXNi X2RldmljZSAqdXNiID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpOworCXN0cnVjdCBk ZXZpY2UgKmRldiA9ICZpbnRlcmZhY2UtPmRldjsKKwljb25zdCBzdHJ1Y3QgZHJtX2Zvcm1hdF9p bmZvICp4cmdiODg4OF9lbXVsYXRpb25fZm9ybWF0ID0gTlVMTDsKKwl1MzIgKmZvcm1hdHMsICpm b3JtYXRzX2RldiwgbnVtX2Nvbm5lY3RvcnMsIG51bV9mb3JtYXRzID0gMDsKKwlib29sIHJnYjU2 NV9zdXBwb3J0ZWQgPSBmYWxzZSwgcmdiODg4OF9zdXBwb3J0ZWQgPSBmYWxzZTsKKwlzdHJ1Y3Qg dXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmJ1bGtfb3V0OworCXN0cnVjdCBndWRfZHJtX2Rpc3Bs YXlfZGVzY3JpcHRvciBkZXNjOworCXN0cnVjdCBndWRfZHJtX2RldmljZSAqZ2RybTsKKwlzdHJ1 Y3QgZHJtX2RldmljZSAqZHJtOworCXNpemVfdCBtYXhfYnVmZmVyX3NpemU7CisJaW50IHJldCwg aTsKKworCXJldCA9IHVzYl9maW5kX2J1bGtfb3V0X2VuZHBvaW50KGludGVyZmFjZS0+Y3VyX2Fs dHNldHRpbmcsICZidWxrX291dCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9 IGd1ZF9nZXRfdmVuZG9yX2Rlc2NyaXB0b3IoaW50ZXJmYWNlLCAmZGVzYyk7CisJaWYgKHJldCkg eworCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJOb3QgYSBkaXNwbGF5IGludGVyZmFjZTog cmV0PSVkXG4iLCByZXQpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoZGVzYy5iVmVy c2lvbiA+IDEpIHsKKwkJdTggKnZlcnNpb24gPSBrbWFsbG9jKHNpemVvZigqdmVyc2lvbiksIEdG UF9LRVJORUwpOworCisJCWlmICghdmVyc2lvbikKKwkJCXJldHVybiAtRU5PTUVNOworCisJCS8q IENoZWNrIGlmIHRoZSBkZXZpY2UgY2FuIHN1cHBvcnQgdXMgKi8KKwkJKnZlcnNpb24gPSAxOwor CQlyZXQgPSBndWRfZHJtX3VzYl9jb250cm9sX21zZyh1c2IsIGlmbnVtLCBmYWxzZSwgR1VEX0RS TV9VU0JfUkVRX1NFVF9WRVJTSU9OLAorCQkJCQkgICAgICAwLCB2ZXJzaW9uLCBzaXplb2YoKnZl cnNpb24pLCB0cnVlKTsKKwkJaWYgKCFyZXQpCisJCQlyZXQgPSBndWRfdXNiX2dldF9zdGF0dXMo dXNiLCBpZm51bSk7CisJCWtmcmVlKHZlcnNpb24pOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJy KGRldiwgIlByb3RvY29sIHZlcnNpb24gJXUgaXMgbm90IHN1cHBvcnRlZFxuIiwgZGVzYy5iVmVy c2lvbik7CisJCQlyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDsKKwkJfQorCisJCWRlc2MuYlZlcnNp b24gPSAxOworCX0KKworCW51bV9jb25uZWN0b3JzID0gZGVzYy5iTnVtQ29ubmVjdG9yczsKKwlt YXhfYnVmZmVyX3NpemUgPSAxIDw8IGRlc2MuYk1heEJ1ZmZlclNpemVPcmRlcjsKKworCWdkcm0g PSBkZXZtX2RybV9kZXZfYWxsb2MoZGV2LCAmZ3VkX2RybV9kcml2ZXIsIHN0cnVjdCBndWRfZHJt X2RldmljZSwgZHJtKTsKKwlpZiAoSVNfRVJSKGdkcm0pKQorCQlyZXR1cm4gUFRSX0VSUihnZHJt KTsKKworCWRybSA9ICZnZHJtLT5kcm07CisJZHJtLT5tb2RlX2NvbmZpZy5mdW5jcyA9ICZndWRf ZHJtX21vZGVfY29uZmlnX2Z1bmNzOworCXJldCA9IGRybW1fbW9kZV9jb25maWdfaW5pdChkcm0p OworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlnZHJtLT51c2IgPSB1c2I7CisJZ2RybS0+ aWZudW0gPSBpZm51bTsKKwlnZHJtLT5jb21wcmVzc2lvbiA9IGRlc2MuYkNvbXByZXNzaW9uICYg R1VEX0RSTV9DT01QUkVTU0lPTl9MWjQ7CisKKwltdXRleF9pbml0KCZnZHJtLT5jdHJsX2xvY2sp OworCW11dGV4X2luaXQoJmdkcm0tPmRhbWFnZV9sb2NrKTsKKwlJTklUX1dPUksoJmdkcm0tPndv cmssIGd1ZF9kcm1fd29yayk7CisJZ3VkX2RybV9jbGVhcl9kYW1hZ2UoZ2RybSk7CisKKwkvKgor CSAqIGRldm1fa21hbGxvYygpIHBsYWNlcyBzdHJ1Y3QgZGV2cmVzIGF0IHRoZSBiZWdpbm5pbmcg b2YgdGhlIGJ1ZmZlciBpdAorCSAqIGFsbG9jYXRlcy4gVGhpcyBjYW4gd2FzdGUgYSBsb3Qgb2Yg bWVtb3J5IHdoZW4gYWxsb2NhdGluZworCSAqIHBvd2VyLW9mLXR3byBzaXplZCBidWZmZXJzLiBB c2tpbmcgZm9yIDRrIHdvdWxkIGFjdHVhbGx5IGFsbG9jYXRlIDhrLgorCSAqLworCisJcmV0ID0g ZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgZ3VkX2RybV9mcmVlX2J1ZmZlcnNfYW5kX211 dGV4LCBnZHJtKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZ2RybS0+Y3RybF9tc2df YnVmID0ga21hbGxvYyhHVURfRFJNX01BWF9UUkFOU0ZFUl9TSVpFLCBHRlBfS0VSTkVMKTsKKwlp ZiAoIWdkcm0tPmN0cmxfbXNnX2J1ZikKKwkJcmV0dXJuIC1FTk9NRU07CityZXRyeToKKwlnZHJt LT5idWxrX2J1ZiA9IGttYWxsb2MobWF4X2J1ZmZlcl9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAo IWdkcm0tPmJ1bGtfYnVmKSB7CisJCW1heF9idWZmZXJfc2l6ZSAvPSAyOworCQlpZiAobWF4X2J1 ZmZlcl9zaXplIDwgU1pfMk0pIHsgLyogR2l2ZSB1cCBpZiB3ZSBjYW4ndCBkbyAxMDI0eDc2OCBS R0I1NjUgKi8KKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCWdvdG8gcmV0cnk7CisJfQorCisJ Z2RybS0+YnVsa19waXBlID0gdXNiX3NuZGJ1bGtwaXBlKGdkcm0tPnVzYiwgdXNiX2VuZHBvaW50 X251bShidWxrX291dCkpOworCWdkcm0tPmJ1bGtfbGVuID0gbWF4X2J1ZmZlcl9zaXplOworCisJ aWYgKGdkcm0tPmNvbXByZXNzaW9uICYgR1VEX0RSTV9DT01QUkVTU0lPTl9MWjQpIHsKKwkJZ2Ry bS0+bHo0X2NvbXBfbWVtID0gZGV2bV9rbWFsbG9jKGRldiwgTFo0X01FTV9DT01QUkVTUywgR0ZQ X0tFUk5FTCk7CisJCWlmICghZ2RybS0+bHo0X2NvbXBfbWVtKQorCQkJcmV0dXJuIC1FTk9NRU07 CisKKwkJZ2RybS0+Y29tcHJlc3NfYnVmID0gdm1hbGxvYyhnZHJtLT5idWxrX2xlbik7CisJCWlm ICghZ2RybS0+Y29tcHJlc3NfYnVmKQorCQkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZHJtLT5t b2RlX2NvbmZpZy5taW5fd2lkdGggPSBsZTMyX3RvX2NwdShkZXNjLmR3TWluV2lkdGgpOworCWRy bS0+bW9kZV9jb25maWcubWF4X3dpZHRoID0gbGUzMl90b19jcHUoZGVzYy5kd01heFdpZHRoKTsK Kwlkcm0tPm1vZGVfY29uZmlnLm1pbl9oZWlnaHQgPSBsZTMyX3RvX2NwdShkZXNjLmR3TWluSGVp Z2h0KTsKKwlkcm0tPm1vZGVfY29uZmlnLm1heF9oZWlnaHQgPSBsZTMyX3RvX2NwdShkZXNjLmR3 TWF4SGVpZ2h0KTsKKworCWZvcm1hdHNfZGV2ID0gZGV2bV9rbWFsbG9jX2FycmF5KGRldiwgZGVz Yy5iTnVtRm9ybWF0cywgc2l6ZW9mKHUzMiksIEdGUF9LRVJORUwpOworCS8qIEFkZCByb29tIGZv ciBlbXVsYXRlZCBYUkdCODg4OCAqLworCWZvcm1hdHMgPSBkZXZtX2ttYWxsb2NfYXJyYXkoZGV2 LCBkZXNjLmJOdW1Gb3JtYXRzICsgMSwgc2l6ZW9mKHUzMiksIEdGUF9LRVJORUwpOworCWlmICgh Zm9ybWF0c19kZXYgfHwgIWZvcm1hdHMpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gZ3Vk X2RybV91c2JfcmVhZDMyKGdkcm0sIEdVRF9EUk1fVVNCX1JFUV9HRVRfRk9STUFUUywgZm9ybWF0 c19kZXYsIGRlc2MuYk51bUZvcm1hdHMpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlm b3IgKGkgPSAwOyBpIDwgZGVzYy5iTnVtRm9ybWF0czsgaSsrKSB7CisJCWNvbnN0IHN0cnVjdCBk cm1fZm9ybWF0X2luZm8gKmZtdF9pbmZvOworCQl1MzIgZm9ybWF0ID0gZm9ybWF0c19kZXZbaV07 CisKKwkJaWYgKGZvcm1hdCA9PSBHVURfRFJNX0ZPUk1BVF9SMSkgeworCQkJZm10X2luZm8gPSAm Z3VkX2RybV9mb3JtYXRfcjE7CisJCX0gZWxzZSB7CisJCQkvKiBUaGlzIHdpbGwgdHJpZ2dlciBh IFdBUk4gZm9yIHVua25vd24gZm9ybWF0cy4uLiAqLworCQkJZm10X2luZm8gPSBkcm1fZm9ybWF0 X2luZm8oZm9ybWF0KTsKKwkJCWlmICghZm10X2luZm8pIHsKKwkJCQlkcm1fZGJnKGRybSwgIlVu a25vd24gZm9ybWF0OiAweCV4XG4iLCBmb3JtYXQpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9 CisKKwkJc3dpdGNoIChmb3JtYXQpIHsKKwkJY2FzZSBEUk1fRk9STUFUX1hSR0I4ODg4OgorCQkJ ZmFsbHRocm91Z2g7CisJCWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4ODoKKwkJCXJnYjg4ODhfc3Vw cG9ydGVkID0gdHJ1ZTsKKwkJCWJyZWFrOworCQljYXNlIERSTV9GT1JNQVRfUkdCODg4OgorCQkJ ZmFsbHRocm91Z2g7CisJCWNhc2UgRFJNX0ZPUk1BVF9CR1I4ODg6CisJCQlkcm1fZGJnKGRybSwg IjI0LWJpdCBmb3JtYXRzIGFyZSBub3Qgc3VwcG9ydGVkLlxuIik7CisJCQljb250aW51ZTsKKwkJ Y2FzZSBEUk1fRk9STUFUX1JHQjU2NToKKwkJCXJnYjU2NV9zdXBwb3J0ZWQgPSB0cnVlOworCQkJ aWYgKCF4cmdiODg4OF9lbXVsYXRpb25fZm9ybWF0KQorCQkJCXhyZ2I4ODg4X2VtdWxhdGlvbl9m b3JtYXQgPSBmbXRfaW5mbzsKKwkJCWJyZWFrOworCQljYXNlIEdVRF9EUk1fRk9STUFUX1IxOgor CQkJaWYgKCF4cmdiODg4OF9lbXVsYXRpb25fZm9ybWF0KQorCQkJCXhyZ2I4ODg4X2VtdWxhdGlv bl9mb3JtYXQgPSBmbXRfaW5mbzsKKwkJCS8qIEludGVybmFsLCBub3QgZm9yIHVzZXJzcGFjZSAq LworCQkJY29udGludWU7CisJCX0KKworCQlmb3JtYXRzW251bV9mb3JtYXRzKytdID0gZm9ybWF0 OworCX0KKworCWlmICghbnVtX2Zvcm1hdHMgJiYgIXhyZ2I4ODg4X2VtdWxhdGlvbl9mb3JtYXQp IHsKKwkJZGV2X2VycihkZXYsICJObyBzdXBwb3J0ZWQgZm9ybWF0cyBmb3VuZFxuIik7CisJCXJl dHVybiAtRU5PRU5UOworCX0KKworCS8qIFByZWZlciBzcGVlZCBvdmVyIGNvbG9yIGRlcHRoICov CisJaWYgKHJnYjU2NV9zdXBwb3J0ZWQpCisJCWRybS0+bW9kZV9jb25maWcucHJlZmVycmVkX2Rl cHRoID0gMTY7CisKKwlpZiAoIXJnYjg4ODhfc3VwcG9ydGVkICYmIHhyZ2I4ODg4X2VtdWxhdGlv bl9mb3JtYXQpIHsKKwkJZ2RybS0+eHJnYjg4ODhfZW11bGF0aW9uX2Zvcm1hdCA9IHhyZ2I4ODg4 X2VtdWxhdGlvbl9mb3JtYXQ7CisJCWZvcm1hdHNbbnVtX2Zvcm1hdHMrK10gPSBEUk1fRk9STUFU X1hSR0I4ODg4OworCX0KKworCXJldCA9IGRybV9zaW1wbGVfZGlzcGxheV9waXBlX2luaXQoZHJt LCAmZ2RybS0+cGlwZSwgJmd1ZF9kcm1fcGlwZV9mdW5jcywKKwkJCQkJICAgZm9ybWF0cywgbnVt X2Zvcm1hdHMsCisJCQkJCSAgIGd1ZF9kcm1fcGlwZV9tb2RpZmllcnMsIE5VTEwpOworCWlmIChy ZXQpCisJCXJldHVybiByZXQ7CisKKwlkZXZtX2tmcmVlKGRldiwgZm9ybWF0cyk7CisJZGV2bV9r ZnJlZShkZXYsIGZvcm1hdHNfZGV2KTsKKworCXJldCA9IGd1ZF9kcm1fZ2V0X3Byb3BlcnRpZXMo Z2RybSwgZGVzYy5iTnVtUHJvcGVydGllcyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwor CWRybV9wbGFuZV9lbmFibGVfZmJfZGFtYWdlX2NsaXBzKCZnZHJtLT5waXBlLnBsYW5lKTsKKwor CWZvciAoaSA9IDA7IGkgPCBudW1fY29ubmVjdG9yczsgaSsrKSB7CisJCXJldCA9IGd1ZF9kcm1f Y29ubmVjdG9yX2NyZWF0ZShnZHJtLCBpKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJ fQorCisJZHJtX21vZGVfY29uZmlnX3Jlc2V0KGRybSk7CisKKwl1c2Jfc2V0X2ludGZkYXRhKGlu dGVyZmFjZSwgZ2RybSk7CisKKwlyZXQgPSBkcm1fZGV2X3JlZ2lzdGVyKGRybSwgMCk7CisJaWYg KHJldCkKKwkJcmV0dXJuIHJldDsKKworCWRybV9rbXNfaGVscGVyX3BvbGxfaW5pdChkcm0pOwor CisJZHJtX2ZiZGV2X2dlbmVyaWNfc2V0dXAoZHJtLCAwKTsKKworCXJldHVybiAwOworfQorCitz dGF0aWMgdm9pZCBndWRfZHJtX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVy ZmFjZSkKK3sKKwlzdHJ1Y3QgZ3VkX2RybV9kZXZpY2UgKmdkcm0gPSB1c2JfZ2V0X2ludGZkYXRh KGludGVyZmFjZSk7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9ICZnZHJtLT5kcm07CisKKwlk cm1fZGJnKGRybSwgIiVzOlxuIiwgX19mdW5jX18pOworCisJZHJtX2ttc19oZWxwZXJfcG9sbF9m aW5pKGRybSk7CisJZHJtX2Rldl91bnBsdWcoZHJtKTsKKwlkcm1fYXRvbWljX2hlbHBlcl9zaHV0 ZG93bihkcm0pOworfQorCitzdGF0aWMgaW50IGd1ZF9kcm1fc3VzcGVuZChzdHJ1Y3QgdXNiX2lu dGVyZmFjZSAqaW50ZXJmYWNlLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSkKK3sKKwlzdHJ1Y3QgZ3Vk X2RybV9kZXZpY2UgKmdkcm0gPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisKKwlyZXR1 cm4gZHJtX21vZGVfY29uZmlnX2hlbHBlcl9zdXNwZW5kKCZnZHJtLT5kcm0pOworfQorCitzdGF0 aWMgaW50IGd1ZF9kcm1fcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7 CisJc3RydWN0IGd1ZF9kcm1fZGV2aWNlICpnZHJtID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZh Y2UpOworCisJZHJtX21vZGVfY29uZmlnX2hlbHBlcl9yZXN1bWUoJmdkcm0tPmRybSk7CisKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGd1ZF9kcm1f dGFibGVbXSA9IHsKKwl7IFVTQl9ERVZJQ0VfSU5URVJGQUNFX0NMQVNTKDB4MWQ1MCwgMHg2MTRk LCBVU0JfQ0xBU1NfVkVORE9SX1NQRUMpIH0sCisJeyB9Cit9OworCitNT0RVTEVfREVWSUNFX1RB QkxFKHVzYiwgZ3VkX2RybV90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBndWRf ZHJtX3VzYl9kcml2ZXIgPSB7CisJLm5hbWUJCT0gImd1ZF9kcm0iLAorCS5wcm9iZQkJPSBndWRf ZHJtX3Byb2JlLAorCS5kaXNjb25uZWN0CT0gZ3VkX2RybV9kaXNjb25uZWN0LAorCS5pZF90YWJs ZQk9IGd1ZF9kcm1fdGFibGUsCisJLnN1c3BlbmQJPSBndWRfZHJtX3N1c3BlbmQsCisJLnJlc3Vt ZQkJPSBndWRfZHJtX3Jlc3VtZSwKKwkucmVzZXRfcmVzdW1lCT0gZ3VkX2RybV9yZXN1bWUsCit9 OworCittb2R1bGVfdXNiX2RyaXZlcihndWRfZHJtX3VzYl9kcml2ZXIpOworCitNT0RVTEVfQVVU SE9SKCJOb3JhbGYgVHLDuG5uZXMiKTsKK01PRFVMRV9MSUNFTlNFKCJEdWFsIE1JVC9HUEwiKTsK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ndWQvZ3VkX2RybV9pbnRlcm5hbC5oIGIvZHJp dmVycy9ncHUvZHJtL2d1ZC9ndWRfZHJtX2ludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAwLi4yY2NhNTAyZDQ0NGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2 ZXJzL2dwdS9kcm0vZ3VkL2d1ZF9kcm1faW50ZXJuYWwuaApAQCAtMCwwICsxLDY1IEBACisvKiBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUICovCisKKyNpZm5kZWYgX19MSU5VWF9HVURfRFJN X0lOVEVSTkFMX0gKKyNkZWZpbmUgX19MSU5VWF9HVURfRFJNX0lOVEVSTkFMX0gKKworI2luY2x1 ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRl IDxsaW51eC9tdXRleC5oPgorCisjaW5jbHVkZSA8ZHJtL2RybV9zaW1wbGVfa21zX2hlbHBlci5o PgorCitzdHJ1Y3QgZ3VkX2RybV9kZXZpY2UgeworCXN0cnVjdCBkcm1fZGV2aWNlIGRybTsKKwlz dHJ1Y3QgZHJtX3NpbXBsZV9kaXNwbGF5X3BpcGUgcGlwZTsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qg d29yazsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiOworCXU4IGlmbnVtOworCWNvbnN0IHN0cnVj dCBkcm1fZm9ybWF0X2luZm8gKnhyZ2I4ODg4X2VtdWxhdGlvbl9mb3JtYXQ7CisKKwl1MTYgKnBy b3BlcnRpZXM7CisJdW5zaWduZWQgaW50IG51bV9wcm9wZXJ0aWVzOworCisJdW5zaWduZWQgaW50 IGJ1bGtfcGlwZTsKKwl2b2lkICpidWxrX2J1ZjsKKwlzaXplX3QgYnVsa19sZW47CisKKwl1OCBj b21wcmVzc2lvbjsKKwl2b2lkICpsejRfY29tcF9tZW07CisJdm9pZCAqY29tcHJlc3NfYnVmOwor CisJdTY0IHN0YXRzX2xlbmd0aDsKKwl1NjQgc3RhdHNfYWN0dWFsX2xlbmd0aDsKKwl1bnNpZ25l ZCBpbnQgc3RhdHNfbnVtX2Vycm9yczsKKworCXN0cnVjdCBtdXRleCBjdHJsX2xvY2s7IC8qIFNl cmlhbGl6ZSByZXEgYW5kIHN0YXR1cyB0cmFuc2ZlcnMgKi8KKwl2b2lkICpjdHJsX21zZ19idWY7 CisKKwlzdHJ1Y3QgbXV0ZXggZGFtYWdlX2xvY2s7IC8qIFByb3RlY3RzIHRoZSBmb2xsb3dpbmcg bWVtYmVyczogKi8KKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYjsKKwlzdHJ1Y3QgZHJtX3Jl Y3QgZGFtYWdlOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZ3VkX2RybV9kZXZpY2UgKnRv X2d1ZF9kcm1fZGV2aWNlKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCit7CisJcmV0dXJuIGNvbnRh aW5lcl9vZihkcm0sIHN0cnVjdCBndWRfZHJtX2RldmljZSwgZHJtKTsKK30KKworaW50IGd1ZF9k cm1fdXNiX2dldChzdHJ1Y3QgZ3VkX2RybV9kZXZpY2UgKmdkcm0sIHU4IHJlcXVlc3QsIHUxNiBp bmRleCwgdm9pZCAqYnVmLCBzaXplX3QgbGVuKTsKK2ludCBndWRfZHJtX3VzYl9zZXQoc3RydWN0 IGd1ZF9kcm1fZGV2aWNlICpnZHJtLCB1OCByZXF1ZXN0LCB1MTYgaW5kZXgsIHZvaWQgKmJ1Ziwg c2l6ZV90IGxlbik7CitpbnQgZ3VkX2RybV91c2Jfd3JpdGU4KHN0cnVjdCBndWRfZHJtX2Rldmlj ZSAqZ2RybSwgdTggcmVxdWVzdCwgdTggdmFsKTsKKwordm9pZCBndWRfZHJtX2NsZWFyX2RhbWFn ZShzdHJ1Y3QgZ3VkX2RybV9kZXZpY2UgKmdkcm0pOwordm9pZCBndWRfZHJtX3dvcmsoc3RydWN0 IHdvcmtfc3RydWN0ICp3b3JrKTsKK2ludCBndWRfZHJtX3BpcGVfY2hlY2soc3RydWN0IGRybV9z aW1wbGVfZGlzcGxheV9waXBlICpwaXBlLAorCQkgICAgICAgc3RydWN0IGRybV9wbGFuZV9zdGF0 ZSAqbmV3X3BsYW5lX3N0YXRlLAorCQkgICAgICAgc3RydWN0IGRybV9jcnRjX3N0YXRlICpuZXdf Y3J0Y19zdGF0ZSk7Cit2b2lkIGd1ZF9kcm1fcGlwZV91cGRhdGUoc3RydWN0IGRybV9zaW1wbGVf ZGlzcGxheV9waXBlICpwaXBlLAorCQkJIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm9sZF9zdGF0 ZSk7CisKK2ludCBndWRfZHJtX2Nvbm5lY3Rvcl9maWxsX3Byb3BlcnRpZXMoc3RydWN0IGRybV9j b25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCQkgICAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0 ZSAqY29ubmVjdG9yX3N0YXRlLAorCQkJCSAgICAgIHN0cnVjdCBndWRfZHJtX3Byb3BlcnR5ICpw cm9wZXJ0aWVzKTsKK2ludCBndWRfZHJtX2Nvbm5lY3Rvcl9jcmVhdGUoc3RydWN0IGd1ZF9kcm1f ZGV2aWNlICpnZHJtLCB1bnNpZ25lZCBpbnQgaW5kZXgpOworCisjZW5kaWYKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9ndWQvZ3VkX2RybV9waXBlLmMgYi9kcml2ZXJzL2dwdS9kcm0vZ3Vk L2d1ZF9kcm1fcGlwZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4u ZDhhM2UwYmEzOGZkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2d1ZC9ndWRf ZHJtX3BpcGUuYwpAQCAtMCwwICsxLDQyNiBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IE1JVAorLyoKKyAqIENvcHlyaWdodCAyMDIwIE5vcmFsZiBUcsO4bm5lcworICovCisKKyNpbmNs dWRlIDxsaW51eC9kbWEtYnVmLmg+CisjaW5jbHVkZSA8bGludXgvbHo0Lmg+CisjaW5jbHVkZSA8 bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisKKyNpbmNsdWRlIDxk cm0vZHJtX2F0b21pYy5oPgorI2luY2x1ZGUgPGRybS9kcm1fY29ubmVjdG9yLmg+CisjaW5jbHVk ZSA8ZHJtL2RybV9kYW1hZ2VfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9kcnYuaD4KKyNp bmNsdWRlIDxkcm0vZHJtX2Zvcm1hdF9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2ZvdXJj Yy5oPgorI2luY2x1ZGUgPGRybS9kcm1fZnJhbWVidWZmZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJt X2dlbV9zaG1lbV9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3ByaW50Lmg+CisjaW5jbHVk ZSA8ZHJtL2RybV9yZWN0Lmg+CisjaW5jbHVkZSA8ZHJtL2RybV9zaW1wbGVfa21zX2hlbHBlci5o PgorI2luY2x1ZGUgPGRybS9ndWRfZHJtLmg+CisKKyNpbmNsdWRlICJndWRfZHJtX2ludGVybmFs LmgiCisKK3N0YXRpYyBib29sIGd1ZF9kcm1faXNfYmlnX2VuZGlhbih2b2lkKQoreworI2lmIGRl ZmluZWQoX19CSUdfRU5ESUFOKQorCXJldHVybiB0cnVlOworI2Vsc2UKKwlyZXR1cm4gZmFsc2U7 CisjZW5kaWYKK30KKworc3RhdGljIHNpemVfdCBndWRfZHJtX3hyZ2I4ODg4X3RvX3IxMjQodTgg KmRzdCwgY29uc3Qgc3RydWN0IGRybV9mb3JtYXRfaW5mbyAqZm9ybWF0LAorCQkJCSAgICAgICB2 b2lkICpzcmMsIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAorCQkJCSAgICAgICBzdHJ1Y3Qg ZHJtX3JlY3QgKnJlY3QpCit7CisJdW5zaWduZWQgaW50IGJsb2NrX3dpZHRoID0gZHJtX2Zvcm1h dF9pbmZvX2Jsb2NrX3dpZHRoKGZvcm1hdCwgMCk7CisJdW5zaWduZWQgaW50IGJpdHNfcGVyX3Bp eGVsID0gOCAvIGJsb2NrX3dpZHRoOworCXVuc2lnbmVkIGludCB4LCB5LCB3aWR0aCwgaGVpZ2h0 OworCXU4ICpwLCAqYmxvY2sgPSBkc3Q7IC8qIEFzc2lnbiB0byBzaWxlbmNlIGNvbXBpbGVyIHdh cm5pbmcgKi8KKwlzaXplX3QgbGVuOworCXZvaWQgKmJ1ZjsKKworCVdBUk5fT05fT05DRShmb3Jt YXQtPmNoYXJfcGVyX2Jsb2NrWzBdICE9IDEpOworCisJLyogU3RhcnQgb24gYSBieXRlIGJvdW5k YXJ5ICovCisJcmVjdC0+eDEgPSBBTElHTl9ET1dOKHJlY3QtPngxLCBibG9ja193aWR0aCk7CisJ d2lkdGggPSBkcm1fcmVjdF93aWR0aChyZWN0KTsKKwloZWlnaHQgPSBkcm1fcmVjdF9oZWlnaHQo cmVjdCk7CisJbGVuID0gZHJtX2Zvcm1hdF9pbmZvX21pbl9waXRjaChmb3JtYXQsIDAsIHdpZHRo KSAqIGhlaWdodDsKKworCWJ1ZiA9IGttYWxsb2Mod2lkdGggKiBoZWlnaHQsIEdGUF9LRVJORUwp OworCWlmICghYnVmKQorCQlyZXR1cm4gbGVuOyAvKiBUbyBrZWVwIGxvZ2ljIHNpbXBsZSwganVz dCB0cmFuc21pdCBnYXJiYWdlICovCisKKwlkcm1fZmJfeHJnYjg4ODhfdG9fZ3JheTgoYnVmLCBz cmMsIGZiLCByZWN0KTsKKworCXAgPSBidWY7CisJZm9yICh5ID0gMDsgeSA8IGRybV9yZWN0X2hl aWdodChyZWN0KTsgeSsrKSB7CisJCWZvciAoeCA9IDA7IHggPCBkcm1fcmVjdF93aWR0aChyZWN0 KTsgeCsrKSB7CisJCQlpZiAoISh4ICUgYmxvY2tfd2lkdGgpKSB7CisJCQkJYmxvY2sgPSBkc3Qr KzsKKwkJCQkqYmxvY2sgPSAwOworCQkJfQorCisJCQkqYmxvY2sgPDw9IGJpdHNfcGVyX3BpeGVs OworCQkJKmJsb2NrIHw9ICgqcCsrKSA+PiAoOCAtIGJpdHNfcGVyX3BpeGVsKTsKKwkJfQorCX0K KworCWtmcmVlKGJ1Zik7CisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgaW50IGd1ZF9kcm1f ZmJfZmx1c2goc3RydWN0IGd1ZF9kcm1fZGV2aWNlICpnZHJtLCBzdHJ1Y3QgZHJtX2ZyYW1lYnVm ZmVyICpmYiwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgZHJtX2Zvcm1hdF9pbmZvICpmb3JtYXQsIHN0 cnVjdCBkcm1fcmVjdCAqcmVjdCkKK3sKKwlzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICppbXBv cnRfYXR0YWNoID0gZmItPm9ialswXS0+aW1wb3J0X2F0dGFjaDsKKwlzdHJ1Y3QgZ3VkX2RybV9y ZXFfc2V0X2J1ZmZlciByZXE7CisJc2l6ZV90IHBpdGNoLCBsZW4sIHRybGVuOworCWludCBhY3R1 YWxfbGVuZ3RoOworCXZvaWQgKnZhZGRyLCAqYnVmOworCWludCByZXQgPSAwOworCisJZHJtX2Ri ZygmZ2RybS0+ZHJtLCAiRmx1c2hpbmcgW0ZCOiVkXSAiIERSTV9SRUNUX0ZNVCAiIGltcG9ydGVk PSVzXG4iLAorCQlmYi0+YmFzZS5pZCwgRFJNX1JFQ1RfQVJHKHJlY3QpLCBpbXBvcnRfYXR0YWNo ID8gInllcyIgOiAibm8iKTsKKworCXBpdGNoID0gZHJtX2Zvcm1hdF9pbmZvX21pbl9waXRjaChm b3JtYXQsIDAsIGRybV9yZWN0X3dpZHRoKHJlY3QpKTsKKwlsZW4gPSBwaXRjaCAqIGRybV9yZWN0 X2hlaWdodChyZWN0KTsKKwlpZiAobGVuID4gZ2RybS0+YnVsa19sZW4pCisJCXJldHVybiAtRTJC SUc7CisKKwl2YWRkciA9IGRybV9nZW1fc2htZW1fdm1hcChmYi0+b2JqWzBdKTsKKwlpZiAoIXZh ZGRyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChpbXBvcnRfYXR0YWNoKSB7CisJCXJldCA9 IGRtYV9idWZfYmVnaW5fY3B1X2FjY2VzcyhpbXBvcnRfYXR0YWNoLT5kbWFidWYsIERNQV9GUk9N X0RFVklDRSk7CisJCWlmIChyZXQpCisJCQlnb3RvIHZ1bm1hcDsKKwl9CisKKwlpZiAoZ2RybS0+ Y29tcHJlc3Npb24gJiBHVURfRFJNX0NPTVBSRVNTSU9OX0xaNCkKKwkJYnVmID0gZ2RybS0+Y29t cHJlc3NfYnVmOworCWVsc2UKKwkJYnVmID0gZ2RybS0+YnVsa19idWY7CisKKwkvKgorCSAqIElt cG9ydGVkIGJ1ZmZlcnMgYXJlIGFzc3VtZWQgdG8gYmUgd3JpdGUtY29tYmluZWQgYW5kIHRodXMg dW5jYWNoZWQKKwkgKiB3aXRoIHNsb3cgcmVhZHMgKGF0IGxlYXN0IG9uIEFSTSkuCisJICovCisJ aWYgKGZvcm1hdCAhPSBmYi0+Zm9ybWF0KSB7CisJCWlmIChmb3JtYXQtPmZvcm1hdCA9PSBHVURf RFJNX0ZPUk1BVF9SMSkKKwkJCWxlbiA9IGd1ZF9kcm1feHJnYjg4ODhfdG9fcjEyNChidWYsIGZv cm1hdCwgdmFkZHIsIGZiLCByZWN0KTsKKwkJZWxzZSBpZiAoZm9ybWF0LT5mb3JtYXQgPT0gRFJN X0ZPUk1BVF9SR0I1NjUpCisJCQlkcm1fZmJfeHJnYjg4ODhfdG9fcmdiNTY1KGJ1ZiwgdmFkZHIs IGZiLCByZWN0LCBndWRfZHJtX2lzX2JpZ19lbmRpYW4oKSk7CisJfSBlbHNlIGlmIChndWRfZHJt X2lzX2JpZ19lbmRpYW4oKSAmJiBmb3JtYXQtPmNwcFswXSA+IDEpIHsKKwkJZHJtX2ZiX3N3YWIo YnVmLCB2YWRkciwgZmIsIHJlY3QsICFpbXBvcnRfYXR0YWNoKTsKKwl9IGVsc2UgaWYgKGdkcm0t PmNvbXByZXNzaW9uICYmICFpbXBvcnRfYXR0YWNoICYmIHBpdGNoID09IGZiLT5waXRjaGVzWzBd KSB7CisJCS8qIGNhbiBjb21wcmVzcyBkaXJlY3RseSBmcm9tIHRoZSBmcmFtZWJ1ZmZlciAqLwor CQlidWYgPSB2YWRkciArIHJlY3QtPnkxICogcGl0Y2g7CisJfSBlbHNlIHsKKwkJZHJtX2ZiX21l bWNweShidWYsIHZhZGRyLCBmYiwgcmVjdCk7CisJfQorCisJcmVxLnggPSBjcHVfdG9fbGUzMihy ZWN0LT54MSk7CisJcmVxLnkgPSBjcHVfdG9fbGUzMihyZWN0LT55MSk7CisJcmVxLndpZHRoID0g Y3B1X3RvX2xlMzIoZHJtX3JlY3Rfd2lkdGgocmVjdCkpOworCXJlcS5oZWlnaHQgPSBjcHVfdG9f bGUzMihkcm1fcmVjdF9oZWlnaHQocmVjdCkpOworCXJlcS5sZW5ndGggPSBjcHVfdG9fbGUzMihs ZW4pOworCXJlcS5jb21wcmVzc2lvbiA9IDA7CisJcmVxLmNvbXByZXNzZWRfbGVuZ3RoID0gMDsK KworCWlmIChnZHJtLT5jb21wcmVzc2lvbiAmIEdVRF9EUk1fQ09NUFJFU1NJT05fTFo0KSB7CisJ CXJldCA9IExaNF9jb21wcmVzc19kZWZhdWx0KGJ1ZiwgZ2RybS0+YnVsa19idWYsIGxlbiwgbGVu LCBnZHJtLT5sejRfY29tcF9tZW0pOworCQlpZiAocmV0ID4gMCkKKwkJCXJlcS5jb21wcmVzc2lv biA9IEdVRF9EUk1fQ09NUFJFU1NJT05fTFo0OworCX0KKworCXRybGVuID0gbGVuOworCisJaWYg KHJldCA+IDApIHsKKwkJcmVxLmNvbXByZXNzZWRfbGVuZ3RoID0gY3B1X3RvX2xlMzIocmV0KTsK KwkJdHJsZW4gPSByZXQ7CisJfSBlbHNlIGlmIChidWYgPT0gZ2RybS0+Y29tcHJlc3NfYnVmKSB7 CisJCS8qCisJCSAqIENvbXByZXNzaW9uIGZhaWxlZCAoYnVmZmVyIGRpZG4ndCBjb21wcmVzcyB3 ZWxsKS4KKwkJICogY29tcHJlc3NfYnVmIGlzIHZtYWxsb2MnZWQgc28gd2UgbmVlZCB0byBjb3B5 LgorCQkgKi8KKwkJbWVtY3B5KGdkcm0tPmJ1bGtfYnVmLCBnZHJtLT5jb21wcmVzc19idWYsIGxl bik7CisJfQorCisJaWYgKGltcG9ydF9hdHRhY2gpCisJCWRtYV9idWZfZW5kX2NwdV9hY2Nlc3Mo aW1wb3J0X2F0dGFjaC0+ZG1hYnVmLCBETUFfRlJPTV9ERVZJQ0UpOworCisJZ2RybS0+c3RhdHNf bGVuZ3RoICs9IGxlbjsKKwkvKiBEaWQgaXQgd3JhcCBhcm91bmQ/ICovCisJaWYgKGdkcm0tPnN0 YXRzX2xlbmd0aCA8PSBsZW4gJiYgZ2RybS0+c3RhdHNfYWN0dWFsX2xlbmd0aCkgeworCQlnZHJt LT5zdGF0c19sZW5ndGggPSBsZW47CisJCWdkcm0tPnN0YXRzX2FjdHVhbF9sZW5ndGggPSAwOwor CX0KKwlnZHJtLT5zdGF0c19hY3R1YWxfbGVuZ3RoICs9IHRybGVuOworCisJLyoKKwkgKiBUaGlz IHdpbGwgd2FpdCBpZiBkZWNvbXByZXNzL2NvcHkgZnJvbSB0aGUgcHJldmlvdXMgZmx1c2ggaXMg c3RpbGwgaW4KKwkgKiBwcm9jZXNzIG9uIHRoZSBnYWRnZXQgc2lkZS4KKwkgKi8KKwlyZXQgPSBn dWRfZHJtX3VzYl9zZXQoZ2RybSwgR1VEX0RSTV9VU0JfUkVRX1NFVF9CVUZGRVIsIDAsICZyZXEs IHNpemVvZihyZXEpKTsKKwlpZiAocmV0KQorCQlnb3RvIHZ1bm1hcDsKKworCXJldCA9IHVzYl9i dWxrX21zZyhnZHJtLT51c2IsIGdkcm0tPmJ1bGtfcGlwZSwgZ2RybS0+YnVsa19idWYsIHRybGVu LAorCQkJICAgJmFjdHVhbF9sZW5ndGgsIG1zZWNzX3RvX2ppZmZpZXMoMzAwMCkpOworCWlmICgh cmV0ICYmIHRybGVuICE9IGFjdHVhbF9sZW5ndGgpCisJCXJldCA9IC1FSU87CisJaWYgKHJldCkK KwkJZ2RybS0+c3RhdHNfbnVtX2Vycm9ycysrOwordnVubWFwOgorCWRybV9nZW1fc2htZW1fdnVu bWFwKGZiLT5vYmpbMF0sIHZhZGRyKTsKKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgZ3VkX2Ry bV9jbGVhcl9kYW1hZ2Uoc3RydWN0IGd1ZF9kcm1fZGV2aWNlICpnZHJtKQoreworCWdkcm0tPmRh bWFnZS54MSA9IElOVF9NQVg7CisJZ2RybS0+ZGFtYWdlLnkxID0gSU5UX01BWDsKKwlnZHJtLT5k YW1hZ2UueDIgPSAwOworCWdkcm0tPmRhbWFnZS55MiA9IDA7Cit9CisKK3ZvaWQgZ3VkX2RybV93 b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgZ3VkX2RybV9kZXZpY2Ug Kmdkcm0gPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGd1ZF9kcm1fZGV2aWNlLCB3b3JrKTsK Kwljb25zdCBzdHJ1Y3QgZHJtX2Zvcm1hdF9pbmZvICpmb3JtYXQ7CisJc3RydWN0IGRybV9mcmFt ZWJ1ZmZlciAqZmI7CisJc3RydWN0IGRybV9yZWN0IGRhbWFnZTsKKwl1bnNpZ25lZCBpbnQgaSwg bGluZXM7CisJaW50IGlkeCwgcmV0ID0gMDsKKwlzaXplX3QgcGl0Y2g7CisKKwlpZiAoIWRybV9k ZXZfZW50ZXIoJmdkcm0tPmRybSwgJmlkeCkpCisJCXJldHVybjsKKworCW11dGV4X2xvY2soJmdk cm0tPmRhbWFnZV9sb2NrKTsKKwlmYiA9IGdkcm0tPmZiOworCWdkcm0tPmZiID0gTlVMTDsKKwlk YW1hZ2UgPSBnZHJtLT5kYW1hZ2U7CisJZ3VkX2RybV9jbGVhcl9kYW1hZ2UoZ2RybSk7CisJbXV0 ZXhfdW5sb2NrKCZnZHJtLT5kYW1hZ2VfbG9jayk7CisKKwlpZiAoIWZiKQorCQlnb3RvIG91dDsK KworCWZvcm1hdCA9IGZiLT5mb3JtYXQ7CisJaWYgKGZvcm1hdC0+Zm9ybWF0ID09IERSTV9GT1JN QVRfWFJHQjg4ODggJiYgZ2RybS0+eHJnYjg4ODhfZW11bGF0aW9uX2Zvcm1hdCkKKwkJZm9ybWF0 ID0gZ2RybS0+eHJnYjg4ODhfZW11bGF0aW9uX2Zvcm1hdDsKKworCS8qIFNwbGl0IHVwZGF0ZSBp ZiBpdCdzIHRvbyBiaWcgKi8KKwlwaXRjaCA9IGRybV9mb3JtYXRfaW5mb19taW5fcGl0Y2goZm9y bWF0LCAwLCBkcm1fcmVjdF93aWR0aCgmZGFtYWdlKSk7CisJbGluZXMgPSBkcm1fcmVjdF9oZWln aHQoJmRhbWFnZSk7CisKKwlpZiAoZ2RybS0+YnVsa19sZW4gPCBsaW5lcyAqIHBpdGNoKQorCQls aW5lcyA9IGdkcm0tPmJ1bGtfbGVuIC8gcGl0Y2g7CisKKwlmb3IgKGkgPSAwOyBpIDwgRElWX1JP VU5EX1VQKGRybV9yZWN0X2hlaWdodCgmZGFtYWdlKSwgbGluZXMpOyBpKyspIHsKKwkJc3RydWN0 IGRybV9yZWN0IHJlY3QgPSBkYW1hZ2U7CisKKwkJcmVjdC55MSArPSBpICogbGluZXM7CisJCXJl Y3QueTIgPSBtaW5fdCh1MzIsIHJlY3QueTEgKyBsaW5lcywgZGFtYWdlLnkyKTsKKworCQlyZXQg PSBndWRfZHJtX2ZiX2ZsdXNoKGdkcm0sIGZiLCBmb3JtYXQsICZyZWN0KTsKKwkJaWYgKHJldCAm JgorCQkgICAgKHJldCAhPSAtRU5PREVWICYmIHJldCAhPSAtRUNPTk5SRVNFVCAmJiByZXQgIT0g LUVTSFVURE9XTiAmJiByZXQgIT0gLUVQUk9UTykpCisJCQlkZXZfZXJyX29uY2UoZmItPmRldi0+ ZGV2LCAiRmFpbGVkIHRvIGZsdXNoIGZyYW1lYnVmZmVyOiBlcnJvcj0lZFxuIiwgcmV0KTsKKwl9 CisKKwlkcm1fZnJhbWVidWZmZXJfcHV0KGZiKTsKK291dDoKKwlkcm1fZGV2X2V4aXQoaWR4KTsK K30KKworc3RhdGljIHZvaWQgZ3VkX2RybV9mYl9xdWV1ZV9kYW1hZ2Uoc3RydWN0IGd1ZF9kcm1f ZGV2aWNlICpnZHJtLAorCQkJCSAgICBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKKwkJCQkg ICAgc3RydWN0IGRybV9yZWN0ICpkYW1hZ2UpCit7CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAq b2xkX2ZiID0gTlVMTDsKKworCW11dGV4X2xvY2soJmdkcm0tPmRhbWFnZV9sb2NrKTsKKworCWlm IChmYiAhPSBnZHJtLT5mYikgeworCQlvbGRfZmIgPSBnZHJtLT5mYjsKKwkJZHJtX2ZyYW1lYnVm ZmVyX2dldChmYik7CisJCWdkcm0tPmZiID0gZmI7CisJfQorCisJZ2RybS0+ZGFtYWdlLngxID0g bWluKGdkcm0tPmRhbWFnZS54MSwgZGFtYWdlLT54MSk7CisJZ2RybS0+ZGFtYWdlLnkxID0gbWlu KGdkcm0tPmRhbWFnZS55MSwgZGFtYWdlLT55MSk7CisJZ2RybS0+ZGFtYWdlLngyID0gbWF4KGdk cm0tPmRhbWFnZS54MiwgZGFtYWdlLT54Mik7CisJZ2RybS0+ZGFtYWdlLnkyID0gbWF4KGdkcm0t PmRhbWFnZS55MiwgZGFtYWdlLT55Mik7CisKKwltdXRleF91bmxvY2soJmdkcm0tPmRhbWFnZV9s b2NrKTsKKworCXF1ZXVlX3dvcmsoc3lzdGVtX2xvbmdfd3EsICZnZHJtLT53b3JrKTsKKworCWlm IChvbGRfZmIpCisJCWRybV9mcmFtZWJ1ZmZlcl9wdXQob2xkX2ZiKTsKK30KKworaW50IGd1ZF9k cm1fcGlwZV9jaGVjayhzdHJ1Y3QgZHJtX3NpbXBsZV9kaXNwbGF5X3BpcGUgKnBpcGUsCisJCSAg ICAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpuZXdfcGxhbmVfc3RhdGUsCisJCSAgICAgICBz dHJ1Y3QgZHJtX2NydGNfc3RhdGUgKm5ld19jcnRjX3N0YXRlKQoreworCXN0cnVjdCBndWRfZHJt X2RldmljZSAqZ2RybSA9IHRvX2d1ZF9kcm1fZGV2aWNlKHBpcGUtPmNydGMuZGV2KTsKKwlzdHJ1 Y3QgZHJtX3BsYW5lX3N0YXRlICpvbGRfcGxhbmVfc3RhdGUgPSBwaXBlLT5wbGFuZS5zdGF0ZTsK Kwljb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9ICZuZXdfY3J0Y19zdGF0ZS0+ bW9kZTsKKwlzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUgPSBuZXdfcGxhbmVfc3RhdGUt PnN0YXRlOworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm9sZF9mYiA9IG9sZF9wbGFuZV9zdGF0 ZS0+ZmI7CisJc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5lY3Rvcl9zdGF0ZSA9IE5V TEw7CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBuZXdfcGxhbmVfc3RhdGUtPmZiOwor CWNvbnN0IHN0cnVjdCBkcm1fZm9ybWF0X2luZm8gKmZvcm1hdCA9IGZiLT5mb3JtYXQ7CisJc3Ry dWN0IGd1ZF9kcm1fcmVxX3NldF9zdGF0ZSAqcmVxOworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpj b25uZWN0b3I7CisJaW50IGlkeCwgcmV0LCBudW1fcHJvcGVydGllczsKKwl1bnNpZ25lZCBpbnQg aTsKKwlzaXplX3QgbGVuOworCisJaWYgKFdBUk5fT05fT05DRSghZmIpKQorCQlyZXR1cm4gLUVJ TlZBTDsKKworCWlmIChvbGRfcGxhbmVfc3RhdGUtPnJvdGF0aW9uICE9IG5ld19wbGFuZV9zdGF0 ZS0+cm90YXRpb24pCisJCW5ld19jcnRjX3N0YXRlLT5tb2RlX2NoYW5nZWQgPSB0cnVlOworCisJ aWYgKG9sZF9mYiAmJiBvbGRfZmItPmZvcm1hdCAhPSBmb3JtYXQpCisJCW5ld19jcnRjX3N0YXRl LT5tb2RlX2NoYW5nZWQgPSB0cnVlOworCisJaWYgKCFuZXdfY3J0Y19zdGF0ZS0+bW9kZV9jaGFu Z2VkICYmICFuZXdfY3J0Y19zdGF0ZS0+Y29ubmVjdG9yc19jaGFuZ2VkKQorCQlyZXR1cm4gMDsK KworCS8qIE9ubHkgb25lIGNvbm5lY3RvciBpcyBzdXBwb3J0ZWQgKi8KKwlpZiAoaHdlaWdodDMy KG5ld19jcnRjX3N0YXRlLT5jb25uZWN0b3JfbWFzaykgIT0gMSkKKwkJcmV0dXJuIC1FSU5WQUw7 CisKKwlpZiAoZm9ybWF0LT5mb3JtYXQgPT0gRFJNX0ZPUk1BVF9YUkdCODg4OCAmJiBnZHJtLT54 cmdiODg4OF9lbXVsYXRpb25fZm9ybWF0KQorCQlmb3JtYXQgPSBnZHJtLT54cmdiODg4OF9lbXVs YXRpb25fZm9ybWF0OworCisJZm9yX2VhY2hfbmV3X2Nvbm5lY3Rvcl9pbl9zdGF0ZShzdGF0ZSwg Y29ubmVjdG9yLCBjb25uZWN0b3Jfc3RhdGUsIGkpCisJCWJyZWFrOworCisJaWYgKCFjb25uZWN0 b3Jfc3RhdGUpIHsKKwkJc3RydWN0IGRybV9jb25uZWN0b3JfbGlzdF9pdGVyIGNvbm5faXRlcjsK KworCQkvKiBXZSBhbHdheXMgc2VuZCB0aGUgZnVsbCBzdGF0ZSB0byB0aGUgZGV2aWNlLCBzbyBn ZXQgdGhlIGNvbm5lY3RvciBzdGF0ZSAqLworCisJCWRybV9jb25uZWN0b3JfbGlzdF9pdGVyX2Jl Z2luKHBpcGUtPmNydGMuZGV2LCAmY29ubl9pdGVyKTsKKwkJZHJtX2Zvcl9lYWNoX2Nvbm5lY3Rv cl9pdGVyKGNvbm5lY3RvciwgJmNvbm5faXRlcikgeworCQkJaWYgKG5ld19jcnRjX3N0YXRlLT5j b25uZWN0b3JfbWFzayAmIGRybV9jb25uZWN0b3JfbWFzayhjb25uZWN0b3IpKQorCQkJCWJyZWFr OworCQl9CisJCWRybV9jb25uZWN0b3JfbGlzdF9pdGVyX2VuZCgmY29ubl9pdGVyKTsKKworCQlp ZiAoV0FSTl9PTl9PTkNFKCFjb25uZWN0b3IpKQorCQkJcmV0dXJuIC1FTk9FTlQ7CisKKwkJY29u bmVjdG9yX3N0YXRlID0gZHJtX2F0b21pY19nZXRfY29ubmVjdG9yX3N0YXRlKHN0YXRlLCBjb25u ZWN0b3IpOworCQlpZiAoSVNfRVJSKGNvbm5lY3Rvcl9zdGF0ZSkpCisJCQlyZXR1cm4gUFRSX0VS Uihjb25uZWN0b3Jfc3RhdGUpOworCX0KKworCW51bV9wcm9wZXJ0aWVzID0gZ3VkX2RybV9jb25u ZWN0b3JfZmlsbF9wcm9wZXJ0aWVzKGNvbm5lY3RvciwgTlVMTCwgTlVMTCk7CisJaWYgKG51bV9w cm9wZXJ0aWVzIDwgMCkKKwkJcmV0dXJuIG51bV9wcm9wZXJ0aWVzOworCisJbnVtX3Byb3BlcnRp ZXMgKz0gZ2RybS0+bnVtX3Byb3BlcnRpZXM7CisKKwlsZW4gPSBzdHJ1Y3Rfc2l6ZShyZXEsIHBy b3BlcnRpZXMsIG51bV9wcm9wZXJ0aWVzKTsKKwlyZXEgPSBremFsbG9jKGxlbiwgR0ZQX0tFUk5F TCk7CisJaWYgKCFyZXEpCisJCXJldHVybiAtRU5PTUVNOworCisJZ3VkX2RybV9mcm9tX2Rpc3Bs YXlfbW9kZSgmcmVxLT5tb2RlLCBtb2RlKTsKKworCXJlcS0+Zm9ybWF0ID0gY3B1X3RvX2xlMzIo Zm9ybWF0LT5mb3JtYXQpOworCXJlcS0+Y29ubmVjdG9yID0gZHJtX2Nvbm5lY3Rvcl9pbmRleChj b25uZWN0b3IpOworCXJlcS0+bnVtX3Byb3BlcnRpZXMgPSBudW1fcHJvcGVydGllczsKKworCW51 bV9wcm9wZXJ0aWVzID0gZ3VkX2RybV9jb25uZWN0b3JfZmlsbF9wcm9wZXJ0aWVzKGNvbm5lY3Rv ciwgY29ubmVjdG9yX3N0YXRlLAorCQkJCQkJCSAgIHJlcS0+cHJvcGVydGllcyk7CisKKwlmb3Ig KGkgPSAwOyBpIDwgZ2RybS0+bnVtX3Byb3BlcnRpZXM7IGkrKykgeworCQl1MTYgcHJvcCA9IGdk cm0tPnByb3BlcnRpZXNbaV07CisJCXU2NCB2YWw7CisKKwkJc3dpdGNoIChwcm9wKSB7CisJCWNh c2UgR1VEX0RSTV9QUk9QRVJUWV9ST1RBVElPTjoKKwkJCXZhbCA9IG5ld19wbGFuZV9zdGF0ZS0+ cm90YXRpb247CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCVdBUk5fT05fT05DRSgxKTsKKwkJ CXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCXJlcS0+cHJvcGVydGllc1tu dW1fcHJvcGVydGllcyArIGldLnByb3AgPSBjcHVfdG9fbGUxNihwcm9wKTsKKwkJcmVxLT5wcm9w ZXJ0aWVzW251bV9wcm9wZXJ0aWVzICsgaV0udmFsID0gY3B1X3RvX2xlNjQodmFsKTsKKwl9CisK KwlpZiAoIWRybV9kZXZfZW50ZXIoZmItPmRldiwgJmlkeCkpIHsKKwkJcmV0ID0gLUVOT0RFVjsK KwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gZ3VkX2RybV91c2Jfc2V0KGdkcm0sIEdVRF9EUk1f VVNCX1JFUV9TRVRfU1RBVEVfQ0hFQ0ssIDAsIHJlcSwgbGVuKTsKKworCWRybV9kZXZfZXhpdChp ZHgpOworb3V0OgorCWtmcmVlKHJlcSk7CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIGd1ZF9k cm1fcGlwZV91cGRhdGUoc3RydWN0IGRybV9zaW1wbGVfZGlzcGxheV9waXBlICpwaXBlLAorCQkJ IHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm9sZF9zdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZHJtID0gcGlwZS0+Y3J0Yy5kZXY7CisJc3RydWN0IGd1ZF9kcm1fZGV2aWNlICpnZHJtID0g dG9fZ3VkX2RybV9kZXZpY2UoZHJtKTsKKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSA9 IHBpcGUtPnBsYW5lLnN0YXRlOworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gc3RhdGUt PmZiOworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9ICZwaXBlLT5jcnRjOworCXN0cnVjdCBkcm1f cmVjdCBkYW1hZ2U7CisJaW50IGlkeDsKKworCWlmICghZHJtX2Rldl9lbnRlcihkcm0sICZpZHgp KQorCQlyZXR1cm47CisKKwlpZiAoIW9sZF9zdGF0ZS0+ZmIpCisJCWd1ZF9kcm1fdXNiX3dyaXRl OChnZHJtLCBHVURfRFJNX1VTQl9SRVFfU0VUX0NPTlRST0xMRVJfRU5BQkxFLCAxKTsKKworCWlm IChmYiAmJiAoY3J0Yy0+c3RhdGUtPm1vZGVfY2hhbmdlZCB8fCBjcnRjLT5zdGF0ZS0+Y29ubmVj dG9yc19jaGFuZ2VkKSkKKwkJZ3VkX2RybV91c2Jfc2V0KGdkcm0sIEdVRF9EUk1fVVNCX1JFUV9T RVRfU1RBVEVfQ09NTUlULCAwLCBOVUxMLCAwKTsKKworCWlmIChjcnRjLT5zdGF0ZS0+YWN0aXZl X2NoYW5nZWQpCisJCWd1ZF9kcm1fdXNiX3dyaXRlOChnZHJtLCBHVURfRFJNX1VTQl9SRVFfU0VU X0RJU1BMQVlfRU5BQkxFLCBjcnRjLT5zdGF0ZS0+YWN0aXZlKTsKKworCWlmIChkcm1fYXRvbWlj X2hlbHBlcl9kYW1hZ2VfbWVyZ2VkKG9sZF9zdGF0ZSwgc3RhdGUsICZkYW1hZ2UpKQorCQlndWRf ZHJtX2ZiX3F1ZXVlX2RhbWFnZShnZHJtLCBmYiwgJmRhbWFnZSk7CisKKwlpZiAoIWZiKSB7CisJ CWNhbmNlbF93b3JrX3N5bmMoJmdkcm0tPndvcmspOworCisJCW11dGV4X2xvY2soJmdkcm0tPmRh bWFnZV9sb2NrKTsKKwkJaWYgKGdkcm0tPmZiKSB7CisJCQlkcm1fZnJhbWVidWZmZXJfcHV0KGdk cm0tPmZiKTsKKwkJCWdkcm0tPmZiID0gTlVMTDsKKwkJfQorCQlndWRfZHJtX2NsZWFyX2RhbWFn ZShnZHJtKTsKKwkJbXV0ZXhfdW5sb2NrKCZnZHJtLT5kYW1hZ2VfbG9jayk7CisKKwkJZ3VkX2Ry bV91c2Jfd3JpdGU4KGdkcm0sIEdVRF9EUk1fVVNCX1JFUV9TRVRfQ09OVFJPTExFUl9FTkFCTEUs IDApOworCX0KKworCWRybV9kZXZfZXhpdChpZHgpOworfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9k cm0vZ3VkX2RybS5oIGIvaW5jbHVkZS9kcm0vZ3VkX2RybS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwMC4uNzg3NmQyZTNjYmNmCi0tLSAvZGV2L251bGwKKysrIGIvaW5j bHVkZS9kcm0vZ3VkX2RybS5oCkBAIC0wLDAgKzEsMzYxIEBACisvKiBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogTUlUICovCisvKgorICogQ29weXJpZ2h0IDIwMjAgTm9yYWxmIFRyw7hubmVzCisg Ki8KKworI2lmbmRlZiBfX0xJTlVYX0dVRF9EUk1fSAorI2RlZmluZSBfX0xJTlVYX0dVRF9EUk1f SAorCisjaW5jbHVkZSA8ZHJtL2RybV9tb2Rlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+ CisjaW5jbHVkZSA8dWFwaS9kcm0vZHJtX2ZvdXJjYy5oPgorI2luY2x1ZGUgPHVhcGkvbGludXgv dXNiL2NoOS5oPgorCisvKgorICogTWF4aW11bSBzaXplIG9mIGEgY29udHJvbCBtZXNzYWdlLCBm aXRzIDEyMCBkaXNwbGF5IG1vZGVzLgorICogSWYgdGhpcyBuZWVkcyB0byBpbmNyZWFzZSwgdGhl IElOIHNpZGUgaW4gZl9ndWRfZHJtX3NldHVwKCkKKyAqIG5lZWRzIGZpeGluZy4KKyAqLworI2Rl ZmluZSBHVURfRFJNX01BWF9UUkFOU0ZFUl9TSVpFCVNaXzRLCisKKyNkZWZpbmUgR1VEX0RSTV9V U0JfRFRfRElTUExBWQkJKFVTQl9UWVBFX1ZFTkRPUiB8IDB4NCkKKworLyoKKyAqIHN0cnVjdCBn dWRfZHJtX2Rpc3BsYXlfZGVzY3JpcHRvciAtIERpc3BsYXkgZGVzY3JpcHRvcgorICogQGJMZW5n dGg6IFNpemUgb2YgZGVzY3JpcHRvciBpbiBieXRlcworICogQGJEZXNjcmlwdG9yVHlwZTogRGVz Y3JpcHRvclR5cGUgKEdVRF9EUk1fVVNCX0RUX0RJU1BMQVkpCisgKiBAYlZlcnNpb246IFByb3Rv Y29sIHZlcnNpb24KKyAqIEBiTWF4QnVmZmVyU2l6ZU9yZGVyOiBNYXhpbXVtIGJ1ZmZlciBzaXpl IHRoZSBkZXZpY2UgY2FuIGhhbmRsZSBhcyBsb2cyCisgKiBAYm1GbGFnczogQ3VycmVudGx5IHVu dXNlZCwgc2hvdWxkIGJlIHNldCB0byB6ZXJvCisgKiBAYkNvbXByZXNzaW9uOiBTdXBwb3J0ZWQg Y29tcHJlc3Npb24gdHlwZXMKKyAqIEBkd01pbldpZHRoOiBNaW5pbXVtIHBpeGVsIHdpZHRoIHRo ZSBjb250cm9sbGVyIGNhbiBoYW5kbGUKKyAqIEBkd01heFdpZHRoOiBNYXhpbXVtIHdpZHRoCisg KiBAZHdNaW5IZWlnaHQ6IE1pbmltdW0gaGVpZ2h0CisgKiBAZHdNYXhIZWlnaHQ6IE1heGltdW0g aGVpZ2h0CisgKiBAYk51bUZvcm1hdHM6IE51bWJlciBvZiBzdXBwb3J0ZWQgcGl4ZWwgZm9ybWF0 cworICogQGJOdW1Qcm9wZXJ0aWVzOiBOdW1iZXIgb2YgcHJvcGVydGllcyB0aGF0IGFyZSBub3Qg Y29ubmVjdG9yIHBvcnBlcnRpZXMKKyAqIEBiTnVtQ29ubmVjdG9yczogTnVtYmVyIG9mIGNvbm5l Y3RvcnMKKyAqCisgKiBEZXZpY2VzIHRoYXQgaGF2ZSBvbmx5IG9uZSBkaXNwbGF5IG1vZGUgd2ls bCBoYXZlIGR3TWluV2lkdGggPT0gZHdNYXhXaWR0aAorICogYW5kIGR3TWluSGVpZ2h0ID09IGR3 TWF4SGVpZ2h0LgorICoKKyAqLworc3RydWN0IGd1ZF9kcm1fZGlzcGxheV9kZXNjcmlwdG9yIHsK KwlfX3U4IGJMZW5ndGg7CisJX191OCBiRGVzY3JpcHRvclR5cGU7CisKKwlfX3U4IGJWZXJzaW9u OworCV9fdTggYk1heEJ1ZmZlclNpemVPcmRlcjsKKwlfX2xlMzIgYm1GbGFnczsKKworCV9fdTgg YkNvbXByZXNzaW9uOworI2RlZmluZSBHVURfRFJNX0NPTVBSRVNTSU9OX0xaNAkJQklUKDApCisK KwlfX2xlMzIgZHdNaW5XaWR0aDsKKwlfX2xlMzIgZHdNYXhXaWR0aDsKKwlfX2xlMzIgZHdNaW5I ZWlnaHQ7CisJX19sZTMyIGR3TWF4SGVpZ2h0OworCisJX191OCBiTnVtRm9ybWF0czsKKwlfX3U4 IGJOdW1Qcm9wZXJ0aWVzOworCV9fdTggYk51bUNvbm5lY3RvcnM7Cit9IF9fcGFja2VkOworCisv KgorICogc3RydWN0IGd1ZF9kcm1fcmVxX2dldF9zdGF0dXMgLSBTdGF0dXMgcmVxdWVzdAorICog QGZsYWdzOiBGbGFncworICogQGVycm5vOiBMaW51eCBlcnJubyB2YWx1ZQorICoKKyAqIFRoZSBo b3N0IGtlZXBzIHBvbGxpbmcgZm9yIHN0YXR1cyBhcyBsb25nIGFzIHRoZSBHVURfRFJNX1NUQVRV U19QRU5ESU5HIGZsYWcKKyAqIGlzIHNldCAob3IgdW50aWwgdGltZW91dCkuIFJlcXVlc3RlZCB1 c2luZzogVVNCX1JFUV9HRVRfU1RBVFVTLgorICovCitzdHJ1Y3QgZ3VkX2RybV9yZXFfZ2V0X3N0 YXR1cyB7CisJX191OCBmbGFnczsKKyNkZWZpbmUgR1VEX0RSTV9TVEFUVVNfUEVORElORwlCSVQo MCkKKwlfX3U4IGVycm5vOworfSBfX3BhY2tlZDsKKworLyoKKyAqIHN0cnVjdCBndWRfZHJtX3By b3BlcnR5IC0gUHJvcGVydHkKKyAqIEBwcm9wOiBQcm9wZXJ0eQorICogQHZhbDogVmFsdWUKKyAq Lworc3RydWN0IGd1ZF9kcm1fcHJvcGVydHkgeworCV9fbGUxNiBwcm9wOworCV9fbGU2NCB2YWw7 Cit9IF9fcGFja2VkOworCisvKiBTZWUgJmRybV9kaXNwbGF5X21vZGUgZm9yIHRoZSBtZWFuaW5n IG9mIHRoZXNlIGZpZWxkcyAqLworc3RydWN0IGd1ZF9kcm1fZGlzcGxheV9tb2RlIHsKKwlfX2xl MzIgY2xvY2s7CisJX19sZTE2IGhkaXNwbGF5OworCV9fbGUxNiBoc3luY19zdGFydDsKKwlfX2xl MTYgaHN5bmNfZW5kOworCV9fbGUxNiBodG90YWw7CisJX19sZTE2IGhza2V3OworCV9fbGUxNiB2 ZGlzcGxheTsKKwlfX2xlMTYgdnN5bmNfc3RhcnQ7CisJX19sZTE2IHZzeW5jX2VuZDsKKwlfX2xl MTYgdnRvdGFsOworCV9fbGUxNiB2c2NhbjsKKwlfX2xlMzIgZmxhZ3M7CisJX191OCB0eXBlOwor fSBfX3BhY2tlZDsKKworLyoKKyAqIHN0cnVjdCBndWRfZHJtX3JlcV9nZXRfY29ubmVjdG9yIC0g Q29ubmVjdG9yIGRlc2NyaXB0b3IKKyAqIEBjb25uZWN0b3JfdHlwZTogQ29ubmVjdG9yIHR5cGUg KERSTV9NT0RFX0NPTk5FQ1RPUl8qKQorICogQGZsYWdzOiBGbGFncworICogQG51bV9wcm9wZXJ0 aWVzOiBOdW1iZXIgb2Ygc3VwcG9ydGVkIHByb3BlcnRpZXMKKyAqLworc3RydWN0IGd1ZF9kcm1f cmVxX2dldF9jb25uZWN0b3IgeworCV9fdTggY29ubmVjdG9yX3R5cGU7CisKKwlfX2xlMzIgZmxh Z3M7CisjZGVmaW5lIEdVRF9EUk1fQ09OTkVDVE9SX0ZMQUdTX1BPTEwJQklUKDApCisKKwlfX3U4 IG51bV9wcm9wZXJ0aWVzOworfSBfX3BhY2tlZDsKKworLyoKKyAqIHN0cnVjdCBndWRfZHJtX3Jl cV9nZXRfY29ubmVjdG9yX3N0YXR1cyAtIENvbm5lY3RvciBzdGF0dXMKKyAqIEBzdGF0dXM6IFN0 YXR1cywgc2VlICZkcm1fY29ubmVjdG9yX3N0YXR1cworICogQG51bV9tb2RlczogTnVtYmVyIG9m IGF2YWlsYWJsZSBkaXNwbGF5IG1vZGVzCisgKiBAbW9kZXNfYXJyYXlfY2hlY2tzdW06IENSQy1D Q0lUVCBjaGVja3N1bSBvZiB0aGUgZGlzcGxheSBtb2RlIGFycmF5IGluIGxpdHRsZSBlbmRpYW4g Zm9ybWF0CisgKiBAZWRpZF9sZW46IExlbmd0aCBvZiBFRElEIGRhdGEKKyAqIEBlZGlkX2NoZWNr c3VtOiBDUkMtQ0NJVFQgY2hlY2tzdW0gb2YgRURJRCBkYXRhCisgKgorICogSWYgYm90aCBAbnVt X21vZGVzIGFuZCBAZWRpZF9sZW4gYXJlIHplcm8sIGNvbm5lY3RvciBzdGF0dXMgaXMgc2V0IHRv CisgKiBkaXNjb25uZWN0ZWQuIElmIEBudW1fbW9kZXMgaXMgemVybywgZWRpZCBpcyB1c2VkIHRv IGNyZWF0ZSBkaXNwbGF5IG1vZGVzLgorICogSWYgYm90aCBhcmUgc2V0LCBlZGlkIGlzIGp1c3Qg cGFzc2VkIG9uIHRvIHVzZXJzcGFjZSBpbiB0aGUgRURJRCBjb25uZWN0b3IKKyAqIHByb3BlcnR5 LgorICoKKyAqIERpc3BsYXkgbW9kZXMgYW5kIEVESUQgYXJlIG9ubHkgcmVxdWVzdGVkIGlmIG51 bWJlci9sZW5ndGggb3IgY3JjIGRpZmZlcnMuCisgKi8KK3N0cnVjdCBndWRfZHJtX3JlcV9nZXRf Y29ubmVjdG9yX3N0YXR1cyB7CisJX191OCBzdGF0dXM7CisjZGVmaW5lIEdVRF9EUk1fQ09OTkVD VE9SX1NUQVRVU19NQVNLCQkweGYgLyogT25seSAyIGJpdHMgYXJlIGN1cnJlbnRseSB1c2VkIGZv ciBzdGF0dXMgKi8KKyNkZWZpbmUgR1VEX0RSTV9DT05ORUNUT1JfU1RBVFVTX0NIQU5HRUQJQklU KDcpCisJX19sZTE2IG51bV9tb2RlczsKKwlfX2xlMTYgZWRpZF9sZW47Cit9IF9fcGFja2VkOwor CisvKgorICogc3RydWN0IGd1ZF9kcm1fcmVxX3NldF9idWZmZXIgLSBTZXQgYnVmZmVyIHRyYW5z ZmVyIGluZm8KKyAqIEB4OiBYIHBvc2l0aW9uIG9mIHJlY3RhbmdsZQorICogQHk6IFkgcG9zaXRp b24KKyAqIEB3aWR0aDogUGl4ZWwgd2lkdGggb2YgcmVjdGFuZ2xlCisgKiBAaGVpZ2h0OiBQaXhl bCBoZWlnaHQKKyAqIEBsZW5ndGg6IEJ1ZmZlciBsZW5ndGggaW4gYnl0ZXMKKyAqIEBjb21wcmVz c2lvbjogVHJhbnNmZXIgY29tcHJlc3Npb24KKyAqIEBjb21wcmVzc2VkX2xlbmd0aDogQ29tcHJl c3NlZCBidWZmZXIgbGVuZ3RoCisgKgorICogQHgsIEB5LCBAd2lkdGggYW5kIEBoZWlnaHQgc3Bl Y2lmaWVzIHRoZSByZWN0YW5nbGUgd2hlcmUgdGhlIGJ1ZmZlciBzaG91bGQgYmUKKyAqIHBsYWNl ZCBpbnNpZGUgdGhlIGZyYW1lYnVmZmVyLgorICovCitzdHJ1Y3QgZ3VkX2RybV9yZXFfc2V0X2J1 ZmZlciB7CisJX19sZTMyIHg7CisJX19sZTMyIHk7CisJX19sZTMyIHdpZHRoOworCV9fbGUzMiBo ZWlnaHQ7CisKKwlfX2xlMzIgbGVuZ3RoOworCV9fdTggY29tcHJlc3Npb247CisJX19sZTMyIGNv bXByZXNzZWRfbGVuZ3RoOworfSBfX3BhY2tlZDsKKworLyoKKyAqIHN0cnVjdCBndWRfZHJtX3Jl cV9zZXRfc3RhdGUgLSBTZXQgZGlzcGxheSBzdGF0ZQorICogQG1vZGU6IERpc3BsYXkgbW9kZQor ICogQGZvcm1hdDogUGl4ZWwgZm9ybWF0CisgKiBAY29ubmVjdG9yOiBDb25uZWN0b3IgaW5kZXgK KyAqIEBudW1fcHJvcGVydGllczogTnVtYmVyIG9mIHByb3BlcnRpZXMgaW4gdGhlIHN0YXRlCisg KiBAcHJvcGVydGllczogQXJyYXkgb2YgcHJvcGVydGllcworICoKKyAqIFRoZSBlbnRpcmUgc3Rh dGUgaXMgdHJhbnNmZXJyZWQgZWFjaCB0aW1lIHRoZXJlJ3MgYSBjaGFuZ2UuCisgKi8KK3N0cnVj dCBndWRfZHJtX3JlcV9zZXRfc3RhdGUgeworCXN0cnVjdCBndWRfZHJtX2Rpc3BsYXlfbW9kZSBt b2RlOworCV9fbGUzMiBmb3JtYXQ7CisJX191OCBjb25uZWN0b3I7CisJX191OCBudW1fcHJvcGVy dGllczsKKwlzdHJ1Y3QgZ3VkX2RybV9wcm9wZXJ0eSBwcm9wZXJ0aWVzW107Cit9IF9fcGFja2Vk OworCisvKgorICogSW50ZXJuYWwgbW9ub2Nocm9tZSB0cmFuc2ZlciBmb3JtYXQgcHJlc2VudGVk IHRvIHVzZXJzcGFjZSBhcyBYUkdCODg4OC4KKyAqIFBpeGVsIGxpbmVzIGFyZSBieXRlIGFsaWdu ZWQuCisgKi8KKyNkZWZpbmUgR1VEX0RSTV9GT1JNQVRfUjEJZm91cmNjX2NvZGUoJ1InLCAnMScs ICcgJywgJyAnKQorCisvKiBMaXN0IG9mIHN1cHBvcnRlZCBjb25uZWN0b3IgcHJvcGVydGllczog Ki8KKworLyogVFYgcmVsYXRlZCBwcm9wZXJ0aWVzLCBzZWUgJmRybV9jb25uZWN0b3IgYW5kICZk cm1fdHZfY29ubmVjdG9yX3N0YXRlICovCisjZGVmaW5lIEdVRF9EUk1fUFJPUEVSVFlfVFZfU0VM RUNUX1NVQkNPTk5FQ1RPUgkJMQorI2RlZmluZSBHVURfRFJNX1BST1BFUlRZX1RWX0xFRlRfTUFS R0lOCQkJMgorI2RlZmluZSBHVURfRFJNX1BST1BFUlRZX1RWX1JJR0hUX01BUkdJTgkJMworI2Rl ZmluZSBHVURfRFJNX1BST1BFUlRZX1RWX1RPUF9NQVJHSU4JCQk0CisjZGVmaW5lIEdVRF9EUk1f UFJPUEVSVFlfVFZfQk9UVE9NX01BUkdJTgkJNQorLyogTnVtYmVyIG9mIG1vZGVzIGFyZSBwbGFj ZWQgYXQgX1NISUZUIGluIHZhbCBvbiByZXRyaWV2YWwgKi8KKyNkZWZpbmUgR1VEX0RSTV9QUk9Q RVJUWV9UVl9NT0RFCQkJNgorICAjZGVmaW5lIEdVRF9EUk1fVVNCX0NPTk5FQ1RPUl9UVl9NT0RF X05VTV9TSElGVCAgIDE2CisjZGVmaW5lIEdVRF9EUk1fUFJPUEVSVFlfVFZfQlJJR0hUTkVTUwkJ CTcKKyNkZWZpbmUgR1VEX0RSTV9QUk9QRVJUWV9UVl9DT05UUkFTVAkJCTgKKyNkZWZpbmUgR1VE X0RSTV9QUk9QRVJUWV9UVl9GTElDS0VSX1JFRFVDVElPTgkJOQorI2RlZmluZSBHVURfRFJNX1BS T1BFUlRZX1RWX09WRVJTQ0FOCQkJMTAKKyNkZWZpbmUgR1VEX0RSTV9QUk9QRVJUWV9UVl9TQVRV UkFUSU9OCQkJMTEKKyNkZWZpbmUgR1VEX0RSTV9QUk9QRVJUWV9UVl9IVUUJCQkJMTIKKworLyoK KyAqIEJhY2tsaWdodCBicmlnaHRuZXNzIGlzIGluIHRoZSByYW5nZSAwLTEwMCBpbmNsdXNpdmUu IFRoZSB2YWx1ZSByZXByZXNlbnRzCisgKiB0aGUgaHVtYW4gcGVyY2VwdHVhbCBicmlnaHRuZXNz IGFuZCBub3QgYSBsaW5lYXIgUFdNIHZhbHVlLiAwIGlzIG1pbmltdW0KKyAqIGJyaWdodG5lc3Mg d2hpY2ggc2hvdWxkIG5vdCB0dXJuIHRoZSBiYWNrbGlnaHQgY29tcGxldGVseSBvZmYuIFRoZSBE UE1TCisgKiBjb25uZWN0b3IgcHJvcGVydHkgc2hvdWxkIGJlIHVzZWQgdG8gY29udHJvbCBwb3dl ciB3aGljaCB3aWxsIHRyaWdnZXIgYQorICogR1VEX0RSTV9VU0JfUkVRX1NFVF9ESVNQTEFZX0VO QUJMRSByZXF1ZXN0LgorICoKKyAqIFRoaXMgaXMgbm90IGEgcmVhbCBEUk0gcHJvcGVydHksIGJ1 dCByYXRoZXIgYSBmYWtlIG9uZSB1c2VkIGZvciB0aGUgYmFja2xpZ2h0CisgKiBkZXZpY2UuIFNl ZSBkcm1fYmFja2xpZ2h0X3JlZ2lzdGVyKCkgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2RlZmlu ZSBHVURfRFJNX1BST1BFUlRZX0JBQ0tMSUdIVF9CUklHSFRORVNTCQkxMworCisvKiBMaXN0IG9m IHN1cHBvcnRlZCBwcm9wZXJ0aWVzIHRoYXQgYXJlIG5vdCBjb25uZWN0b3IgcHJvcGV0aWVzOiAq LworCisvKgorICogUGxhbmUgcm90YXRpb24uIFNob3VsZCByZXR1cm4gdGhlIHN1cHBvcnRlZCBi aXRtYXNrIG9uCisgKiBHVURfRFJNX1VTQl9SRVFfR0VUX1BST1BFUlRJRVMsIHNlZSBkcm1fcGxh bmVfY3JlYXRlX3JvdGF0aW9uX3Byb3BlcnR5KCkuCisgKi8KKyNkZWZpbmUgR1VEX0RSTV9QUk9Q RVJUWV9ST1RBVElPTgkJCTUwCisKKy8qIFVTQiBDb250cm9sIHJlcXVlc3RzOiAqLworCisvKgor ICogSWYgdGhlIGhvc3QgZHJpdmVyIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgZGV2aWNlIHByb3RvY29s IHZlcnNpb24gaXQgd2lsbCBzZW5kCisgKiB0aGUgdmVyc2lvbnMgaXQgc3VwcG9ydHMgc3RhcnRp bmcgd2l0aCB0aGUgbGF0ZXN0LiBJZiB0aGUgZGV2aWNlIGlzbid0CisgKiBiYWNrd2FyZHMgY29t cGF0aWJsZSBvciBkb2Vzbid0IHN1cHBvcnQgdGhlIHZlcnNpb24gdGhlIGhvc3Qgc3VnZ2VzdHMs IGl0CisgKiBzaGFsbCByZXR1cm4gRVBST1RPTk9TVVBQT1JULgorICovCisjZGVmaW5lIEdVRF9E Uk1fVVNCX1JFUV9TRVRfVkVSU0lPTgkJCTB4MzAKKworLyogR2V0IHN1cHBvcnRlZCBwaXhlbCBm b3JtYXRzIGFzIGFuIGFycmF5IG9mIGZvdXJjYyBjb2Rlcy4gU2VlIGluY2x1ZGUvdWFwaS9kcm0v ZHJtX2ZvdXJjYy5oICovCisjZGVmaW5lIEdVRF9EUk1fVVNCX1JFUV9HRVRfRk9STUFUUwkJCTB4 NDAKKworLyogR2V0IHN1cHBvcnRlZCBwcm9wZXJ0aWVzIHRoYXQgYXJlIG5vdCBjb25uZWN0b3Ig cHJvcGV0aWVzIGFzIGEgJmd1ZF9kcm1fcHJvcGVydHkgYXJyYXkgKi8KKyNkZWZpbmUgR1VEX0RS TV9VU0JfUkVRX0dFVF9QUk9QRVJUSUVTCQkJMHg0MQorCisvKiBHZXQgY29ubmVjdG9yIGRlc2Ny aXB0b3IgKi8KKyNkZWZpbmUgR1VEX0RSTV9VU0JfUkVRX0dFVF9DT05ORUNUT1IJCQkweDUwCisK Ky8qIEdldCBwcm9wZXJ0aWVzIHN1cHBvcnRlZCBieSB0aGUgY29ubmVjdG9yIGFzIGEgJmd1ZF9k cm1fcHJvcGVydHkgYXJyYXkgKi8KKyNkZWZpbmUgR1VEX0RSTV9VU0JfUkVRX0dFVF9DT05ORUNU T1JfUFJPUEVSVElFUwkweDUxCisKKy8qCisgKiBJc3N1ZWQgd2hlbiB0aGVyZSdzIGEgdHYubW9k ZSBwcm9wZXJ0eSBwcmVzZW50LgorICogR2V0cyBhbiBhcnJheSBvZiB0di5tb2RlIGVudW0gbmFt ZXMgZWFjaCBlbnRyeSBvZiBsZW5ndGggRFJNX1BST1BfTkFNRV9MRU4uCisgKi8KKyNkZWZpbmUg R1VEX0RSTV9VU0JfUkVRX0dFVF9DT05ORUNUT1JfVFZfTU9ERV9WQUxVRVMJMHg1MgorCisvKiBX aGVuIHVzZXJzcGFjZSBjaGVja3Mgc3RhdHVzLCB0aGlzIGlzIGlzc3VlZCBmaXJzdCwgbm90IHVz ZWQgZm9yIHBvbGwgcmVxdWVzdHMuICovCisjZGVmaW5lIEdVRF9EUk1fVVNCX1JFUV9TRVRfQ09O TkVDVE9SX0ZPUkNFX0RFVEVDVAkweDUzCisKKy8qIEdldCBjb25uZWN0b3Igc3RhdHVzIGFzICZn dWRfZHJtX3JlcV9nZXRfY29ubmVjdG9yX3N0YXR1cy4gKi8KKyNkZWZpbmUgR1VEX0RSTV9VU0Jf UkVRX0dFVF9DT05ORUNUT1JfU1RBVFVTCQkweDU0CisKKy8qIEdldCAmZ3VkX2RybV9kaXNwbGF5 X21vZGUgYXJyYXkgb2Ygc3VwcG9ydGVkIGRpc3BsYXkgbW9kZXMgKi8KKyNkZWZpbmUgR1VEX0RS TV9VU0JfUkVRX0dFVF9DT05ORUNUT1JfTU9ERVMJCTB4NTUKKworI2RlZmluZSBHVURfRFJNX1VT Ql9SRVFfR0VUX0NPTk5FQ1RPUl9FRElECQkweDU2CisKKy8qIFNldCBidWZmZXIgcHJvcGVydGll cyBiZWZvcmUgYnVsayB0cmFuc2ZlciBhcyAmZ3VkX2RybV9yZXFfc2V0X2J1ZmZlciAqLworI2Rl ZmluZSBHVURfRFJNX1VTQl9SRVFfU0VUX0JVRkZFUgkJCTB4NjAKKworLyogQ2hlY2sgZGlzcGxh eSBjb25maWd1cmF0aW9uIGFzICZndWRfZHJtX3JlcV9zZXRfc3RhdGUgKi8KKyNkZWZpbmUgR1VE X0RSTV9VU0JfUkVRX1NFVF9TVEFURV9DSEVDSwkJCTB4NjEKKworLyogQXBwbHkgdGhlIHByZXZv aXVzIF9TVEFURV9DSEVDSyBjb25maWd1cmF0aW9uICovCisjZGVmaW5lIEdVRF9EUk1fVVNCX1JF UV9TRVRfU1RBVEVfQ09NTUlUCQkweDYyCisKKyAvKiBFbmFibGUvZGlzYWJsZSB0aGUgZGlzcGxh eSBjb250cm9sbGVyLCB2YWx1ZSBpcyB1OCAwLzEgKi8KKyNkZWZpbmUgR1VEX0RSTV9VU0JfUkVR X1NFVF9DT05UUk9MTEVSX0VOQUJMRQkJMHg2MworCisvKiBFbmFibGUvZGlzYWJsZSBkaXNwbGF5 L291dHB1dCAoRFBNUyksIHZhbHVlIGlzIHU4IDAvMSAqLworI2RlZmluZSBHVURfRFJNX1VTQl9S RVFfU0VUX0RJU1BMQVlfRU5BQkxFCQkweDY0CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBndWRfZHJt X2Zyb21fZGlzcGxheV9tb2RlKHN0cnVjdCBndWRfZHJtX2Rpc3BsYXlfbW9kZSAqZHN0LAorCQkJ CQkgICAgIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpzcmMpCit7CisJdTMyIGZsYWdz ID0gc3JjLT5mbGFnczsKKworCXN3aXRjaCAoc3JjLT5waWN0dXJlX2FzcGVjdF9yYXRpbykgewor CWNhc2UgSERNSV9QSUNUVVJFX0FTUEVDVF80XzM6CisJCWZsYWdzIHw9IERSTV9NT0RFX0ZMQUdf UElDX0FSXzRfMzsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX1BJQ1RVUkVfQVNQRUNUXzE2Xzk6CisJ CWZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfUElDX0FSXzE2Xzk7CisJCWJyZWFrOworCWNhc2UgSERN SV9QSUNUVVJFX0FTUEVDVF82NF8yNzoKKwkJZmxhZ3MgfD0gRFJNX01PREVfRkxBR19QSUNfQVJf NjRfMjc7CisJCWJyZWFrOworCWNhc2UgSERNSV9QSUNUVVJFX0FTUEVDVF8yNTZfMTM1OgorCQlm bGFncyB8PSBEUk1fTU9ERV9GTEFHX1BJQ19BUl8yNTZfMTM1OworCQlicmVhazsKKwlkZWZhdWx0 OgorCQlmbGFncyB8PSBEUk1fTU9ERV9GTEFHX1BJQ19BUl9OT05FOworCQlicmVhazsKKwl9CisK Kwlkc3QtPmNsb2NrID0gY3B1X3RvX2xlMzIoc3JjLT5jbG9jayk7CisJZHN0LT5oZGlzcGxheSA9 IGNwdV90b19sZTE2KHNyYy0+aGRpc3BsYXkpOworCWRzdC0+aHN5bmNfc3RhcnQgPSBjcHVfdG9f bGUxNihzcmMtPmhzeW5jX3N0YXJ0KTsKKwlkc3QtPmhzeW5jX2VuZCA9IGNwdV90b19sZTE2KHNy Yy0+aHN5bmNfZW5kKTsKKwlkc3QtPmh0b3RhbCA9IGNwdV90b19sZTE2KHNyYy0+aHRvdGFsKTsK Kwlkc3QtPmhza2V3ID0gY3B1X3RvX2xlMTYoc3JjLT5oc2tldyk7CisJZHN0LT52ZGlzcGxheSA9 IGNwdV90b19sZTE2KHNyYy0+dmRpc3BsYXkpOworCWRzdC0+dnN5bmNfc3RhcnQgPSBjcHVfdG9f bGUxNihzcmMtPnZzeW5jX3N0YXJ0KTsKKwlkc3QtPnZzeW5jX2VuZCA9IGNwdV90b19sZTE2KHNy Yy0+dnN5bmNfZW5kKTsKKwlkc3QtPnZ0b3RhbCA9IGNwdV90b19sZTE2KHNyYy0+dnRvdGFsKTsK Kwlkc3QtPnZzY2FuID0gY3B1X3RvX2xlMTYoc3JjLT52c2Nhbik7CisJZHN0LT5mbGFncyA9IGNw dV90b19sZTMyKGZsYWdzKTsKKwlkc3QtPnR5cGUgPSBzcmMtPnR5cGU7Cit9CisKK3N0YXRpYyBp bmxpbmUgdm9pZCBndWRfZHJtX3RvX2Rpc3BsYXlfbW9kZShzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9k ZSAqZHN0LAorCQkJCQkgICBjb25zdCBzdHJ1Y3QgZ3VkX2RybV9kaXNwbGF5X21vZGUgKnNyYykK K3sKKwl1MzIgZmxhZ3MgPSBsZTMyX3RvX2NwdShzcmMtPmZsYWdzKTsKKworCWRzdC0+Y2xvY2sg PSBsZTMyX3RvX2NwdShzcmMtPmNsb2NrKTsKKwlkc3QtPmhkaXNwbGF5ID0gbGUxNl90b19jcHUo c3JjLT5oZGlzcGxheSk7CisJZHN0LT5oc3luY19zdGFydCA9IGxlMTZfdG9fY3B1KHNyYy0+aHN5 bmNfc3RhcnQpOworCWRzdC0+aHN5bmNfZW5kID0gbGUxNl90b19jcHUoc3JjLT5oc3luY19lbmQp OworCWRzdC0+aHRvdGFsID0gbGUxNl90b19jcHUoc3JjLT5odG90YWwpOworCWRzdC0+aHNrZXcg PSBsZTE2X3RvX2NwdShzcmMtPmhza2V3KTsKKwlkc3QtPnZkaXNwbGF5ID0gbGUxNl90b19jcHUo c3JjLT52ZGlzcGxheSk7CisJZHN0LT52c3luY19zdGFydCA9IGxlMTZfdG9fY3B1KHNyYy0+dnN5 bmNfc3RhcnQpOworCWRzdC0+dnN5bmNfZW5kID0gbGUxNl90b19jcHUoc3JjLT52c3luY19lbmQp OworCWRzdC0+dnRvdGFsID0gbGUxNl90b19jcHUoc3JjLT52dG90YWwpOworCWRzdC0+dnNjYW4g PSBsZTE2X3RvX2NwdShzcmMtPnZzY2FuKTsKKwlkc3QtPmZsYWdzID0gZmxhZ3MgJiB+RFJNX01P REVfRkxBR19QSUNfQVJfTUFTSzsKKwlkc3QtPnR5cGUgPSBzcmMtPnR5cGU7CisKKwlzd2l0Y2gg KGZsYWdzICYgRFJNX01PREVfRkxBR19QSUNfQVJfTUFTSykgeworCWNhc2UgRFJNX01PREVfRkxB R19QSUNfQVJfNF8zOgorCQlkc3QtPnBpY3R1cmVfYXNwZWN0X3JhdGlvID0gSERNSV9QSUNUVVJF X0FTUEVDVF80XzM7CisJCWJyZWFrOworCWNhc2UgRFJNX01PREVfRkxBR19QSUNfQVJfMTZfOToK KwkJZHN0LT5waWN0dXJlX2FzcGVjdF9yYXRpbyA9IEhETUlfUElDVFVSRV9BU1BFQ1RfMTZfOTsK KwkJYnJlYWs7CisJY2FzZSBEUk1fTU9ERV9GTEFHX1BJQ19BUl82NF8yNzoKKwkJZHN0LT5waWN0 dXJlX2FzcGVjdF9yYXRpbyA9IEhETUlfUElDVFVSRV9BU1BFQ1RfNjRfMjc7CisJCWJyZWFrOwor CWNhc2UgRFJNX01PREVfRkxBR19QSUNfQVJfMjU2XzEzNToKKwkJZHN0LT5waWN0dXJlX2FzcGVj dF9yYXRpbyA9IEhETUlfUElDVFVSRV9BU1BFQ1RfMjU2XzEzNTsKKwkJYnJlYWs7CisJZGVmYXVs dDoKKwkJZHN0LT5waWN0dXJlX2FzcGVjdF9yYXRpbyA9IEhETUlfUElDVFVSRV9BU1BFQ1RfTk9O RTsKKwkJYnJlYWs7CisJfQorCisJZHJtX21vZGVfc2V0X25hbWUoZHN0KTsKK30KKworI2VuZGlm Ci0tIAoyLjIzLjAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9y ZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZl bAo=