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=-7.0 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,UNWANTED_LANGUAGE_BODY,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 D7D2FC3A5A2 for ; Sun, 22 Sep 2019 16:48:14 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (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 A18CF20820 for ; Sun, 22 Sep 2019 16:48:14 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="pcH9hAjj" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org A18CF20820 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=sigxcpu.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Cc:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=fBvMnkA7ig66/NM+wf0IFkNui0ZUxTo0/oKx9oDUbEc=; b=pcH9hAjj0sbCn3 3PMZweReGSB+jof+a3fNLmrT/63rA44LXZVhcbWEC9+IZ9TOqgPIrga12g5VEJYGdMWaQqNyHiPHb OcW9I96tdO6/jFUVvthtClMgIBTfjeLXCxVE8Jx39uqYEsy4R/YNzp2/wup2aLtniRXjPMBAyKhAQ BL0ocEIX8ZkFfjiaU2AzDQ60ULOs/XzvArsHheTOLBwri8Kp8J5nrDtlAZISrgLH4nJ177o4lv2bW aOgi55Un2/tWbK9o1O14/1hGzUcyKPs4bR92GuTd5Jbql9qZ6IPAMM5cMEX3h7JsbCxD3TLFiPoDQ wnmUXQL9H6nAIEmeHDiA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.2 #3 (Red Hat Linux)) id 1iC51r-0004if-Vg; Sun, 22 Sep 2019 16:48:08 +0000 Received: from honk.sigxcpu.org ([24.134.29.49]) by bombadil.infradead.org with esmtps (Exim 4.92.2 #3 (Red Hat Linux)) id 1iC519-0004Ct-KX for linux-arm-kernel@lists.infradead.org; Sun, 22 Sep 2019 16:47:27 +0000 Received: from localhost (localhost [127.0.0.1]) by honk.sigxcpu.org (Postfix) with ESMTP id 3E089FB04; Sun, 22 Sep 2019 18:47:22 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at honk.sigxcpu.org Received: from honk.sigxcpu.org ([127.0.0.1]) by localhost (honk.sigxcpu.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Ehu5RXGdjCD8; Sun, 22 Sep 2019 18:47:13 +0200 (CEST) Received: by bogon.sigxcpu.org (Postfix, from userid 1000) id 373F940113; Sun, 22 Sep 2019 09:47:12 -0700 (PDT) From: =?UTF-8?q?Guido=20G=C3=BCnther?= To: David Airlie , Daniel Vetter , Rob Herring , Mark Rutland , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , NXP Linux Team , Andrzej Hajda , Neil Armstrong , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Lee Jones , =?UTF-8?q?Guido=20G=C3=BCnther?= , dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Robert Chiras , Sam Ravnborg , Arnd Bergmann Subject: [PATCH v6 2/2] drm/bridge: Add NWL MIPI DSI host controller support Date: Sun, 22 Sep 2019 09:47:12 -0700 Message-Id: X-Mailer: git-send-email 2.23.0.rc1 In-Reply-To: References: MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190922_094724_006388_D57F0CED X-CRM114-Status: GOOD ( 22.17 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org VGhpcyBhZGRzIGluaXRpYWwgc3VwcG9ydCBmb3IgdGhlIE5XTCBNSVBJIERTSSBIb3N0IGNvbnRy b2xsZXIgZm91bmQgb24KaS5NWDggU29Dcy4KCkl0IGFkZHMgc3VwcG9ydCBmb3IgdGhlIGkuTVg4 TVEgYnV0IHRoZSBzYW1lIElQIGNhbiBiZSBmb3VuZCBvbgplLmcuIHRoZSBpLk1YOFFYUC4KCkl0 IGhhcyBiZWVuIHRlc3RlZCBvbiB0aGUgTGlicmVtIDUgZGV2a2l0IHVzaW5nIG14c2ZiLgoKU2ln bmVkLW9mZi1ieTogR3VpZG8gR8O8bnRoZXIgPGFneEBzaWd4Y3B1Lm9yZz4KQ28tZGV2ZWxvcGVk LWJ5OiBSb2JlcnQgQ2hpcmFzIDxyb2JlcnQuY2hpcmFzQG54cC5jb20+ClNpZ25lZC1vZmYtYnk6 IFJvYmVydCBDaGlyYXMgPHJvYmVydC5jaGlyYXNAbnhwLmNvbT4KVGVzdGVkLWJ5OiBSb2JlcnQg Q2hpcmFzIDxyb2JlcnQuY2hpcmFzQG54cC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2JyaWRn ZS9LY29uZmlnICAgfCAgIDE2ICsKIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUgIHwg ICAgMyArCiBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL253bC1kc2kuYyB8IDExODAgKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL253bC1kc2kuaCB8 ICAxNDQgKysrKwogNCBmaWxlcyBjaGFuZ2VkLCAxMzQzIGluc2VydGlvbnMoKykKIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL253bC1kc2kuYwogY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbndsLWRzaS5oCgpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2JyaWRnZS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29u ZmlnCmluZGV4IDFjYzlmNTAyYzFmMi4uMTMwMjFmOWE2MTA3IDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vYnJpZGdlL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29u ZmlnCkBAIC02NSw2ICs2NSwyMiBAQCBjb25maWcgRFJNX01FR0FDSElQU19TVERQWFhYWF9HRV9C ODUwVjNfRlcKICAgICAgICAgICB0byBEUCsrLiBUaGlzIGlzIHVzZWQgd2l0aCB0aGUgaS5NWDYg aW14LWxkYgogICAgICAgICAgIGRyaXZlci4gWW91IGFyZSBsaWtlbHkgdG8gc2F5IE4gaGVyZS4K IAorY29uZmlnIERSTV9OV0xfTUlQSV9EU0kKKwl0cmlzdGF0ZSAiTm9ydGh3ZXN0IExvZ2ljIE1J UEkgRFNJIEhvc3QgY29udHJvbGxlciIKKwlkZXBlbmRzIG9uIERSTQorCWRlcGVuZHMgb24gQ09N TU9OX0NMSworCWRlcGVuZHMgb24gT0YgJiYgSEFTX0lPTUVNCisJc2VsZWN0IERSTV9LTVNfSEVM UEVSCisJc2VsZWN0IERSTV9NSVBJX0RTSQorCXNlbGVjdCBEUk1fUEFORUxfQlJJREdFCisJc2Vs ZWN0IEdFTkVSSUNfUEhZX01JUElfRFBIWQorCXNlbGVjdCBNRkRfU1lTQ09OCisJc2VsZWN0IE1V TFRJUExFWEVSCisJc2VsZWN0IFJFR01BUF9NTUlPCisJaGVscAorCSAgVGhpcyBlbmFibGVzIHRo ZSBOb3J0aHdlc3QgTG9naWMgTUlQSSBEU0kgSG9zdCBjb250cm9sbGVyIGFzCisJICBmb3IgZXhh bXBsZSBmb3VuZCBvbiBOWFAncyBpLk1YOCBQcm9jZXNzb3JzLgorCiBjb25maWcgRFJNX05YUF9Q VE4zNDYwCiAJdHJpc3RhdGUgIk5YUCBQVE4zNDYwIERQL0xWRFMgYnJpZGdlIgogCWRlcGVuZHMg b24gT0YKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUgYi9kcml2 ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlCmluZGV4IDQ5MzRmY2Y1YTZmOC4uYzNmM2E0M2U5 YjhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUKQEAgLTE2LDQgKzE2LDcgQEAgb2JqLSQoQ09O RklHX0RSTV9BTkFMT0dJWF9EUCkgKz0gYW5hbG9naXgvCiBvYmotJChDT05GSUdfRFJNX0kyQ19B RFY3NTExKSArPSBhZHY3NTExLwogb2JqLSQoQ09ORklHX0RSTV9USV9TTjY1RFNJODYpICs9IHRp LXNuNjVkc2k4Ni5vCiBvYmotJChDT05GSUdfRFJNX1RJX1RGUDQxMCkgKz0gdGktdGZwNDEwLm8K K29iai0kKENPTkZJR19EUk1fTldMX01JUElfRFNJKSArPSBud2wtZHNpLm8KIG9iai15ICs9IHN5 bm9wc3lzLworCitoZWFkZXItdGVzdC15ICs9IG53bC1kc2kuaApkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2JyaWRnZS9ud2wtZHNpLmMgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL253bC1k c2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmRlYTU0MjlhMWUx NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbndsLWRzaS5jCkBA IC0wLDAgKzEsMTE4MCBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArCisv KgorICogaS5NWDggTldMIE1JUEkgRFNJIGhvc3QgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChD KSAyMDE3IE5YUAorICogQ29weXJpZ2h0IChDKSAyMDE5IFB1cmlzbSBTUEMKKyAqLworCisjaW5j bHVkZSA8bGludXgvYml0ZmllbGQuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRl IDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9tYXRoNjQuaD4KKyNpbmNsdWRlIDxsaW51 eC9tZmQvc3lzY29uLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGlu dXgvbXV4L2NvbnN1bWVyLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51 eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS9waHkuaD4KKyNpbmNsdWRlIDxs aW51eC9yZWdtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9yZXNldC5oPgorI2luY2x1ZGUgPGxpbnV4 L3N5c19zb2MuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lNjQuaD4KKworI2luY2x1ZGUgPGRybS9k cm1fYXRvbWljX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fYnJpZGdlLmg+CisjaW5jbHVk ZSA8ZHJtL2RybV9taXBpX2RzaS5oPgorI2luY2x1ZGUgPGRybS9kcm1fb2YuaD4KKyNpbmNsdWRl IDxkcm0vZHJtX3BhbmVsLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wcmludC5oPgorI2luY2x1ZGUg PGRybS9kcm1fcHJvYmVfaGVscGVyLmg+CisKKyNpbmNsdWRlIDx2aWRlby9taXBpX2Rpc3BsYXku aD4KKyNpbmNsdWRlIDx2aWRlby92aWRlb21vZGUuaD4KKworI2luY2x1ZGUgIm53bC1kc2kuaCIK KworI2RlZmluZSBEUlZfTkFNRSAibndsLWRzaSIKKworLyogaS5NWDggTldMIHF1aXJrcyAqLwor LyogaS5NWDhNUSBlcnJhdGEgRTExNDE4ICovCisjZGVmaW5lIEUxMTQxOF9IU19NT0RFX1FVSVJL CUJJVCgwKQorLyogU2tpcCBEU0kgYml0cyBpbiBTUkMgb24gZGlzYWJsZSB0byBhdm9pZCBibGFu ayBkaXNwbGF5IG9uIGVuYWJsZSAqLworI2RlZmluZSBTUkNfUkVTRVRfUVVJUksJCUJJVCgxKQor CisjZGVmaW5lIE5XTF9EU0lfTUlQSV9GSUZPX1RJTUVPVVQgbXNlY3NfdG9famlmZmllcyg1MDAp CisKK2VudW0gdHJhbnNmZXJfZGlyZWN0aW9uIHsKKwlEU0lfUEFDS0VUX1NFTkQsCisJRFNJX1BB Q0tFVF9SRUNFSVZFLAorfTsKKworLyogUG9zc2libGUgcGxhdGZvcm0gc3BlY2lmaWMgY2xvY2tz ICovCisjZGVmaW5lIE5XTF9EU0lfQ0xLX0NPUkUJICAgICJjb3JlIgorI2RlZmluZSBOV0xfRFNJ X01BWF9QTEFURk9STV9DTE9DS1MgMQorCitzdHJ1Y3QgbndsX2RzaV9wbGF0X2Nsa19jb25maWcg eworCWNvbnN0IGNoYXIgKmlkOworCXN0cnVjdCBjbGsgKmNsazsKKwlib29sIHByZXNlbnQ7Cit9 OworCitzdHJ1Y3QgbndsX2RzaV90cmFuc2ZlciB7CisJY29uc3Qgc3RydWN0IG1pcGlfZHNpX21z ZyAqbXNnOworCXN0cnVjdCBtaXBpX2RzaV9wYWNrZXQgcGFja2V0OworCXN0cnVjdCBjb21wbGV0 aW9uIGNvbXBsZXRlZDsKKworCWludCBzdGF0dXM7IC8qIHN0YXR1cyBvZiB0cmFuc21pc3Npb24g Ki8KKwllbnVtIHRyYW5zZmVyX2RpcmVjdGlvbiBkaXJlY3Rpb247CisJYm9vbCBuZWVkX2J0YTsK Kwl1OCBjbWQ7CisJdTE2IHJ4X3dvcmRfY291bnQ7CisJc2l6ZV90IHR4X2xlbjsgLyogaW4gYnl0 ZXMgKi8KKwlzaXplX3QgcnhfbGVuOyAvKiBpbiBieXRlcyAqLworfTsKKworc3RydWN0IG53bF9k c2kgeworCXN0cnVjdCBkcm1fYnJpZGdlIGJyaWRnZTsKKwlzdHJ1Y3QgbWlwaV9kc2lfaG9zdCBk c2lfaG9zdDsKKwlzdHJ1Y3QgZHJtX2JyaWRnZSAqcGFuZWxfYnJpZGdlOworCXN0cnVjdCBkZXZp Y2UgKmRldjsKKwlzdHJ1Y3QgcGh5ICpwaHk7CisJdW5pb24gcGh5X2NvbmZpZ3VyZV9vcHRzIHBo eV9jZmc7CisJdW5zaWduZWQgaW50IHF1aXJrczsKKworCXN0cnVjdCByZWdtYXAgKnJlZ21hcDsK KwlpbnQgaXJxOworCXN0cnVjdCByZXNldF9jb250cm9sICpyc3RjOworCXN0cnVjdCBtdXhfY29u dHJvbCAqbXV4OworCisJLyogRFNJIGNsb2NrcyAqLworCXN0cnVjdCBjbGsgKnBoeV9yZWZfY2xr OworCXN0cnVjdCBjbGsgKnJ4X2VzY19jbGs7CisJc3RydWN0IGNsayAqdHhfZXNjX2NsazsKKwkv KiBQbGF0Zm9ybSBkZXBlbmRlbnQgY2xvY2tzICovCisJc3RydWN0IG53bF9kc2lfcGxhdF9jbGtf Y29uZmlnIGNsa19jb25maWdbTldMX0RTSV9NQVhfUExBVEZPUk1fQ0xPQ0tTXTsKKworCS8qIGRz aSBsYW5lcyAqLworCXUzMiBsYW5lczsKKwllbnVtIG1pcGlfZHNpX3BpeGVsX2Zvcm1hdCBmb3Jt YXQ7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgbW9kZTsKKwl1bnNpZ25lZCBsb25nIGRzaV9t b2RlX2ZsYWdzOworCisJc3RydWN0IG53bF9kc2lfdHJhbnNmZXIgKnhmZXI7CisKKwljb25zdCBz dHJ1Y3QgbndsX2RzaV9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKK307CisKKy8qIFBsYXRmb3JtIHNw ZWNpZmljIGhvb2tzIHRvIGVuYWJsZSBvdGhlciBTb0NzIGxpa2UgdGhlIGkuTVg4UU0gKi8KK3N0 cnVjdCBud2xfZHNpX3BsYXRmb3JtX2RhdGEgeworCWludCAoKnBvd2Vyb24pKHN0cnVjdCBud2xf ZHNpICpkc2kpOworCWludCAoKnBvd2Vyb2ZmKShzdHJ1Y3QgbndsX2RzaSAqZHNpKTsKKwlpbnQg KCpzZWxlY3RfaW5wdXQpKHN0cnVjdCBud2xfZHNpICpkc2kpOworCWludCAoKmRlc2VsZWN0X2lu cHV0KShzdHJ1Y3QgbndsX2RzaSAqZHNpKTsKKwlzdHJ1Y3QgbndsX2RzaV9wbGF0X2Nsa19jb25m aWcgY2xrX2NvbmZpZ1tOV0xfRFNJX01BWF9QTEFURk9STV9DTE9DS1NdOworfTsKKworc3RhdGlj IGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIG53bF9kc2lfcmVnbWFwX2NvbmZpZyA9IHsKKwku cmVnX2JpdHMgPSAxNiwKKwkudmFsX2JpdHMgPSAzMiwKKwkucmVnX3N0cmlkZSA9IDQsCisJLm1h eF9yZWdpc3RlciA9IE5XTF9EU0lfSVJRX01BU0syLAorCS5uYW1lID0gRFJWX05BTUUsCit9Owor CitzdGF0aWMgaW5saW5lIHN0cnVjdCBud2xfZHNpICpicmlkZ2VfdG9fZHNpKHN0cnVjdCBkcm1f YnJpZGdlICpicmlkZ2UpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihicmlkZ2UsIHN0cnVjdCBu d2xfZHNpLCBicmlkZ2UpOworfQorCisKK3N0YXRpYyBpbnQgbndsX2RzaV93cml0ZShzdHJ1Y3Qg bndsX2RzaSAqZHNpLCB1bnNpZ25lZCBpbnQgcmVnLCB1MzIgdmFsKQoreworCWludCByZXQ7CisK KwlyZXQgPSByZWdtYXBfd3JpdGUoZHNpLT5yZWdtYXAsIHJlZywgdmFsKTsKKwlpZiAocmV0IDwg MCkKKwkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwKKwkJCSAgICAgICJGYWlsZWQgdG8gd3JpdGUg TldMIERTSSByZWcgMHgleDogJWRcbiIsIHJlZywKKwkJCSAgICAgIHJldCk7CisJcmV0dXJuIHJl dDsKK30KKworc3RhdGljIHUzMiBud2xfZHNpX3JlYWQoc3RydWN0IG53bF9kc2kgKmRzaSwgdTMy IHJlZykKK3sKKwl1bnNpZ25lZCBpbnQgdmFsOworCWludCByZXQ7CisKKwlyZXQgPSByZWdtYXBf cmVhZChkc2ktPnJlZ21hcCwgcmVnLCAmdmFsKTsKKwlpZiAocmV0IDwgMCkKKwkJRFJNX0RFVl9F UlJPUihkc2ktPmRldiwgIkZhaWxlZCB0byByZWFkIE5XTCBEU0kgcmVnIDB4JXg6ICVkXG4iLAor CQkJICAgICAgcmVnLCByZXQpOworCisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIHUzMiBud2xf ZHNpX2dldF9kcGlfcGl4ZWxfZm9ybWF0KGVudW0gbWlwaV9kc2lfcGl4ZWxfZm9ybWF0IGZvcm1h dCkKK3sKKwlzd2l0Y2ggKGZvcm1hdCkgeworCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjU2NToKKwkJ cmV0dXJuIE5XTF9EU0lfUElYRUxfRk9STUFUXzE2OworCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjY2 NjoKKwkJcmV0dXJuIE5XTF9EU0lfUElYRUxfRk9STUFUXzE4TDsKKwljYXNlIE1JUElfRFNJX0ZN VF9SR0I2NjZfUEFDS0VEOgorCQlyZXR1cm4gTldMX0RTSV9QSVhFTF9GT1JNQVRfMTg7CisJY2Fz ZSBNSVBJX0RTSV9GTVRfUkdCODg4OgorCQlyZXR1cm4gTldMX0RTSV9QSVhFTF9GT1JNQVRfMjQ7 CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorCisvKgorICogcHMyYmMgLSBQ aWNvc2Vjb25kcyB0byBieXRlIGNsb2NrIGN5Y2xlcworICovCitzdGF0aWMgdTMyIHBzMmJjKHN0 cnVjdCBud2xfZHNpICpkc2ksIHVuc2lnbmVkIGxvbmcgbG9uZyBwcykKK3sKKwl1MzIgYnBwID0g bWlwaV9kc2lfcGl4ZWxfZm9ybWF0X3RvX2JwcChkc2ktPmZvcm1hdCk7CisKKwlyZXR1cm4gRElW NjRfVTY0X1JPVU5EX1VQKHBzICogZHNpLT5tb2RlLmNsb2NrICogYnBwLAorCQkJCSAgZHNpLT5s YW5lcyAqIDggKiBOU0VDX1BFUl9TRUMpOworfQorCisvKgorICogdWkyYmMgLSBVSSB0aW1lIHBl cmlvZHMgdG8gYnl0ZSBjbG9jayBjeWNsZXMKKyAqLworc3RhdGljIHUzMiB1aTJiYyhzdHJ1Y3Qg bndsX2RzaSAqZHNpLCB1bnNpZ25lZCBsb25nIGxvbmcgdWkpCit7CisJdTMyIGJwcCA9IG1pcGlf ZHNpX3BpeGVsX2Zvcm1hdF90b19icHAoZHNpLT5mb3JtYXQpOworCisJcmV0dXJuIERJVjY0X1U2 NF9ST1VORF9VUCh1aSAqIGRzaS0+bGFuZXMsCisJCQkJICBkc2ktPm1vZGUuY2xvY2sgKiAxMDAw ICogYnBwKTsKK30KKworLyoKKyAqIHVzMmJjIC0gbWljcm8gc2Vjb25kcyB0byBscCBjbG9jayBj eWNsZXMKKyAqLworc3RhdGljIHUzMiB1czJscCh1MzIgbHBfY2xrX3JhdGUsIHVuc2lnbmVkIGxv bmcgdXMpCit7CisJcmV0dXJuIERJVl9ST1VORF9VUCh1cyAqIGxwX2Nsa19yYXRlLCBVU0VDX1BF Ul9TRUMpOworfQorCitzdGF0aWMgaW50IG53bF9kc2lfY29uZmlnX2hvc3Qoc3RydWN0IG53bF9k c2kgKmRzaSkKK3sKKwl1MzIgY3ljbGVzOworCXN0cnVjdCBwaHlfY29uZmlndXJlX29wdHNfbWlw aV9kcGh5ICpjZmcgPSAmZHNpLT5waHlfY2ZnLm1pcGlfZHBoeTsKKworCWlmIChkc2ktPmxhbmVz IDwgMSB8fCBkc2ktPmxhbmVzID4gNCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlEUk1fREVWX0RF QlVHX0RSSVZFUihkc2ktPmRldiwgIkRTSSBMYW5lcyAlZFxuIiwgZHNpLT5sYW5lcyk7CisJbnds X2RzaV93cml0ZShkc2ksIE5XTF9EU0lfQ0ZHX05VTV9MQU5FUywgZHNpLT5sYW5lcyAtIDEpOwor CisJaWYgKGRzaS0+ZHNpX21vZGVfZmxhZ3MgJiBNSVBJX0RTSV9DTE9DS19OT05fQ09OVElOVU9V UykgeworCQlud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9DRkdfTk9OQ09OVElOVU9VU19DTEss IDB4MDEpOworCQlud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9DRkdfQVVUT0lOU0VSVF9FT1RQ LCAweDAxKTsKKwl9IGVsc2UgeworCQlud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9DRkdfTk9O Q09OVElOVU9VU19DTEssIDB4MDApOworCQlud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9DRkdf QVVUT0lOU0VSVF9FT1RQLCAweDAwKTsKKwl9CisKKwkvKiB2YWx1ZXMgaW4gYnl0ZSBjbG9jayBj eWNsZXMgKi8KKwljeWNsZXMgPSB1aTJiYyhkc2ksIGNmZy0+Y2xrX3ByZSk7CisJRFJNX0RFVl9E RUJVR19EUklWRVIoZHNpLT5kZXYsICJjZmdfdF9wcmU6IDB4JXhcbiIsIGN5Y2xlcyk7CisJbnds X2RzaV93cml0ZShkc2ksIE5XTF9EU0lfQ0ZHX1RfUFJFLCBjeWNsZXMpOworCWN5Y2xlcyA9IHBz MmJjKGRzaSwgY2ZnLT5scHggKyBjZmctPmNsa19wcmVwYXJlICsgY2ZnLT5jbGtfemVybyk7CisJ RFJNX0RFVl9ERUJVR19EUklWRVIoZHNpLT5kZXYsICJjZmdfdHhfZ2FwIChwcmUpOiAweCV4XG4i LCBjeWNsZXMpOworCWN5Y2xlcyArPSB1aTJiYyhkc2ksIGNmZy0+Y2xrX3ByZSk7CisJRFJNX0RF Vl9ERUJVR19EUklWRVIoZHNpLT5kZXYsICJjZmdfdF9wb3N0OiAweCV4XG4iLCBjeWNsZXMpOwor CW53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX0NGR19UX1BPU1QsIGN5Y2xlcyk7CisJY3ljbGVz ID0gcHMyYmMoZHNpLCBjZmctPmhzX2V4aXQpOworCURSTV9ERVZfREVCVUdfRFJJVkVSKGRzaS0+ ZGV2LCAiY2ZnX3R4X2dhcDogMHgleFxuIiwgY3ljbGVzKTsKKwlud2xfZHNpX3dyaXRlKGRzaSwg TldMX0RTSV9DRkdfVFhfR0FQLCBjeWNsZXMpOworCisJbndsX2RzaV93cml0ZShkc2ksIE5XTF9E U0lfQ0ZHX0VYVFJBX0NNRFNfQUZURVJfRU9UUCwgMHgwMSk7CisJbndsX2RzaV93cml0ZShkc2ks IE5XTF9EU0lfQ0ZHX0hUWF9UT19DT1VOVCwgMHgwMCk7CisJbndsX2RzaV93cml0ZShkc2ksIE5X TF9EU0lfQ0ZHX0xSWF9IX1RPX0NPVU5ULCAweDAwKTsKKwlud2xfZHNpX3dyaXRlKGRzaSwgTldM X0RTSV9DRkdfQlRBX0hfVE9fQ09VTlQsIDB4MDApOworCS8qIEluIExQIGNsb2NrIGN5Y2xlcyAq LworCWN5Y2xlcyA9IHVzMmxwKGNmZy0+bHBfY2xrX3JhdGUsIGNmZy0+d2FrZXVwKTsKKwlEUk1f REVWX0RFQlVHX0RSSVZFUihkc2ktPmRldiwgImNmZ190d2FrZXVwOiAweCV4XG4iLCBjeWNsZXMp OworCW53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX0NGR19UV0FLRVVQLCBjeWNsZXMpOworCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbndsX2RzaV9jb25maWdfZHBpKHN0cnVjdCBud2xf ZHNpICpkc2kpCit7CisJdTMyIGNvbG9yX2Zvcm1hdCwgbW9kZTsKKwlib29sIGJ1cnN0X21vZGU7 CisJaW50IGhmcm9udF9wb3JjaCwgaGJhY2tfcG9yY2gsIHZmcm9udF9wb3JjaCwgdmJhY2tfcG9y Y2g7CisJaW50IGhzeW5jX2xlbiwgdnN5bmNfbGVuOworCisJaGZyb250X3BvcmNoID0gZHNpLT5t b2RlLmhzeW5jX3N0YXJ0IC0gZHNpLT5tb2RlLmhkaXNwbGF5OworCWhzeW5jX2xlbiA9IGRzaS0+ bW9kZS5oc3luY19lbmQgLSBkc2ktPm1vZGUuaHN5bmNfc3RhcnQ7CisJaGJhY2tfcG9yY2ggPSBk c2ktPm1vZGUuaHRvdGFsIC0gZHNpLT5tb2RlLmhzeW5jX2VuZDsKKworCXZmcm9udF9wb3JjaCA9 IGRzaS0+bW9kZS52c3luY19zdGFydCAtIGRzaS0+bW9kZS52ZGlzcGxheTsKKwl2c3luY19sZW4g PSBkc2ktPm1vZGUudnN5bmNfZW5kIC0gZHNpLT5tb2RlLnZzeW5jX3N0YXJ0OworCXZiYWNrX3Bv cmNoID0gZHNpLT5tb2RlLnZ0b3RhbCAtIGRzaS0+bW9kZS52c3luY19lbmQ7CisKKwlEUk1fREVW X0RFQlVHX0RSSVZFUihkc2ktPmRldiwgImhmcm9udF9wb3JjaCA9ICVkXG4iLCBoZnJvbnRfcG9y Y2gpOworCURSTV9ERVZfREVCVUdfRFJJVkVSKGRzaS0+ZGV2LCAiaGJhY2tfcG9yY2ggPSAlZFxu IiwgaGJhY2tfcG9yY2gpOworCURSTV9ERVZfREVCVUdfRFJJVkVSKGRzaS0+ZGV2LCAiaHN5bmNf bGVuID0gJWRcbiIsIGhzeW5jX2xlbik7CisJRFJNX0RFVl9ERUJVR19EUklWRVIoZHNpLT5kZXYs ICJoZGlzcGxheSA9ICVkXG4iLCBkc2ktPm1vZGUuaGRpc3BsYXkpOworCURSTV9ERVZfREVCVUdf RFJJVkVSKGRzaS0+ZGV2LCAidmZyb250X3BvcmNoID0gJWRcbiIsIHZmcm9udF9wb3JjaCk7CisJ RFJNX0RFVl9ERUJVR19EUklWRVIoZHNpLT5kZXYsICJ2YmFja19wb3JjaCA9ICVkXG4iLCB2YmFj a19wb3JjaCk7CisJRFJNX0RFVl9ERUJVR19EUklWRVIoZHNpLT5kZXYsICJ2c3luY19sZW4gPSAl ZFxuIiwgdnN5bmNfbGVuKTsKKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkc2ktPmRldiwgInZhY3Rp dmUgPSAlZFxuIiwgZHNpLT5tb2RlLnZkaXNwbGF5KTsKKwlEUk1fREVWX0RFQlVHX0RSSVZFUihk c2ktPmRldiwgImNsb2NrID0gJWQga0h6XG4iLCBkc2ktPm1vZGUuY2xvY2spOworCisJY29sb3Jf Zm9ybWF0ID0gbndsX2RzaV9nZXRfZHBpX3BpeGVsX2Zvcm1hdChkc2ktPmZvcm1hdCk7CisJaWYg KGNvbG9yX2Zvcm1hdCA8IDApIHsKKwkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwgIkludmFsaWQg Y29sb3IgZm9ybWF0IDB4JXhcbiIsCisJCQkgICAgICBkc2ktPmZvcm1hdCk7CisJCXJldHVybiBj b2xvcl9mb3JtYXQ7CisJfQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRzaS0+ZGV2LCAicGl4ZWwg Zm10ID0gJWRcbiIsIGRzaS0+Zm9ybWF0KTsKKworCW53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJ X0lOVEVSRkFDRV9DT0xPUl9DT0RJTkcsIE5XTF9EU0lfRFBJXzI0X0JJVCk7CisJbndsX2RzaV93 cml0ZShkc2ksIE5XTF9EU0lfUElYRUxfRk9STUFULCBjb2xvcl9mb3JtYXQpOworCS8qCisJICog QWRqdXN0aW5nIGlucHV0IHBvbGFyaXR5IGJhc2VkIG9uIHRoZSB2aWRlbyBtb2RlIHJlc3VsdHMg aW4KKwkgKiBhIGJsYWNrIHNjcmVlbiBzbyBhbHdheXMgcGljayBhY3RpdmUgbG93OgorCSAqLwor CW53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX1ZTWU5DX1BPTEFSSVRZLAorCQkgICAgICBOV0xf RFNJX1ZTWU5DX1BPTEFSSVRZX0FDVElWRV9MT1cpOworCW53bF9kc2lfd3JpdGUoZHNpLCBOV0xf RFNJX0hTWU5DX1BPTEFSSVRZLAorCQkgICAgICBOV0xfRFNJX0hTWU5DX1BPTEFSSVRZX0FDVElW RV9MT1cpOworCisJYnVyc3RfbW9kZSA9IChkc2ktPmRzaV9tb2RlX2ZsYWdzICYgTUlQSV9EU0lf TU9ERV9WSURFT19CVVJTVCkgJiYKKwkJICAgICAhKGRzaS0+ZHNpX21vZGVfZmxhZ3MgJiBNSVBJ X0RTSV9NT0RFX1ZJREVPX1NZTkNfUFVMU0UpOworCisJaWYgKGJ1cnN0X21vZGUpIHsKKwkJbnds X2RzaV93cml0ZShkc2ksIE5XTF9EU0lfVklERU9fTU9ERSwgTldMX0RTSV9WTV9CVVJTVF9NT0RF KTsKKwkJbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfUElYRUxfRklGT19TRU5EX0xFVkVMLCAy NTYpOworCX0gZWxzZSB7CisJCW1vZGUgPSAoKGRzaS0+ZHNpX21vZGVfZmxhZ3MgJiBNSVBJX0RT SV9NT0RFX1ZJREVPX1NZTkNfUFVMU0UpID8KKwkJCQlOV0xfRFNJX1ZNX0JVUlNUX01PREVfV0lU SF9TWU5DX1BVTFNFUyA6CisJCQkJTldMX0RTSV9WTV9OT05fQlVSU1RfTU9ERV9XSVRIX1NZTkNf RVZFTlRTKTsKKwkJbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfVklERU9fTU9ERSwgbW9kZSk7 CisJCW53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX1BJWEVMX0ZJRk9fU0VORF9MRVZFTCwKKwkJ CSAgICAgIGRzaS0+bW9kZS5oZGlzcGxheSk7CisJfQorCisJbndsX2RzaV93cml0ZShkc2ksIE5X TF9EU0lfSEZQLCBoZnJvbnRfcG9yY2gpOworCW53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX0hC UCwgaGJhY2tfcG9yY2gpOworCW53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX0hTQSwgaHN5bmNf bGVuKTsKKworCW53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX0VOQUJMRV9NVUxUX1BLVFMsIDB4 MCk7CisJbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfQkxMUF9NT0RFLCAweDEpOworCW53bF9k c2lfd3JpdGUoZHNpLCBOV0xfRFNJX1VTRV9OVUxMX1BLVF9CTExQLCAweDApOworCW53bF9kc2lf d3JpdGUoZHNpLCBOV0xfRFNJX1ZDLCAweDApOworCisJbndsX2RzaV93cml0ZShkc2ksIE5XTF9E U0lfUElYRUxfUEFZTE9BRF9TSVpFLCBkc2ktPm1vZGUuaGRpc3BsYXkpOworCW53bF9kc2lfd3Jp dGUoZHNpLCBOV0xfRFNJX1ZBQ1RJVkUsIGRzaS0+bW9kZS52ZGlzcGxheSAtIDEpOworCW53bF9k c2lfd3JpdGUoZHNpLCBOV0xfRFNJX1ZCUCwgdmJhY2tfcG9yY2gpOworCW53bF9kc2lfd3JpdGUo ZHNpLCBOV0xfRFNJX1ZGUCwgdmZyb250X3BvcmNoKTsKKworCXJldHVybiAwOworfQorCitzdGF0 aWMgdm9pZCBud2xfZHNpX2luaXRfaW50ZXJydXB0cyhzdHJ1Y3QgbndsX2RzaSAqZHNpKQorewor CXUzMiBpcnFfZW5hYmxlOworCisJbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfSVJRX01BU0ss IDB4ZmZmZmZmZmYpOworCW53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX0lSUV9NQVNLMiwgMHg3 KTsKKworCWlycV9lbmFibGUgPSB+KHUzMikoTldMX0RTSV9UWF9QS1RfRE9ORV9NQVNLIHwKKwkJ CSAgICBOV0xfRFNJX1JYX1BLVF9IRFJfUkNWRF9NQVNLIHwKKwkJCSAgICBOV0xfRFNJX1RYX0ZJ Rk9fT1ZGTFdfTUFTSyB8CisJCQkgICAgTldMX0RTSV9IU19UWF9USU1FT1VUX01BU0spOworCisJ bndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfSVJRX01BU0ssIGlycV9lbmFibGUpOworfQorCitz dGF0aWMgaW50IG53bF9kc2lfaG9zdF9hdHRhY2goc3RydWN0IG1pcGlfZHNpX2hvc3QgKmRzaV9o b3N0LAorCQkJICAgICAgIHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1 Y3QgbndsX2RzaSAqZHNpID0gY29udGFpbmVyX29mKGRzaV9ob3N0LCBzdHJ1Y3QgbndsX2RzaSwg ZHNpX2hvc3QpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRzaS0+ZGV2OworCXN0cnVjdCBkcm1f YnJpZGdlICpicmlkZ2U7CisJc3RydWN0IGRybV9wYW5lbCAqcGFuZWw7CisJaW50IHJldDsKKwor CURSTV9ERVZfSU5GTyhkZXYsICJsYW5lcz0ldSwgZm9ybWF0PTB4JXggZmxhZ3M9MHglbHhcbiIs IGRldmljZS0+bGFuZXMsCisJCSAgICAgZGV2aWNlLT5mb3JtYXQsIGRldmljZS0+bW9kZV9mbGFn cyk7CisKKwlpZiAoZGV2aWNlLT5sYW5lcyA8IDEgfHwgZGV2aWNlLT5sYW5lcyA+IDQpCisJCXJl dHVybiAtRUlOVkFMOworCisJZHNpLT5sYW5lcyA9IGRldmljZS0+bGFuZXM7CisJZHNpLT5mb3Jt YXQgPSBkZXZpY2UtPmZvcm1hdDsKKwlkc2ktPmRzaV9tb2RlX2ZsYWdzID0gZGV2aWNlLT5tb2Rl X2ZsYWdzOworCisJcmV0ID0gZHJtX29mX2ZpbmRfcGFuZWxfb3JfYnJpZGdlKGRzaS0+ZGV2LT5v Zl9ub2RlLCAxLCAwLCAmcGFuZWwsCisJCQkJCSAgJmJyaWRnZSk7CisJaWYgKHJldCkKKwkJcmV0 dXJuIHJldDsKKworCWlmIChwYW5lbCkgeworCQlicmlkZ2UgPSBkcm1fcGFuZWxfYnJpZGdlX2Fk ZChwYW5lbCwgRFJNX01PREVfQ09OTkVDVE9SX0RTSSk7CisJCWlmIChJU19FUlIoYnJpZGdlKSkK KwkJCXJldHVybiBQVFJfRVJSKGJyaWRnZSk7CisJfQorCisJZHNpLT5wYW5lbF9icmlkZ2UgPSBi cmlkZ2U7CisJZHJtX2JyaWRnZV9hZGQoJmRzaS0+YnJpZGdlKTsKKworCXJldHVybiAwOworfQor CitzdGF0aWMgaW50IG53bF9kc2lfaG9zdF9kZXRhY2goc3RydWN0IG1pcGlfZHNpX2hvc3QgKmRz aV9ob3N0LAorCQkJICAgICAgIHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRldmljZSkKK3sKKwlz dHJ1Y3QgbndsX2RzaSAqZHNpID0gY29udGFpbmVyX29mKGRzaV9ob3N0LCBzdHJ1Y3QgbndsX2Rz aSwgZHNpX2hvc3QpOworCisJZHJtX29mX3BhbmVsX2JyaWRnZV9yZW1vdmUoZHNpLT5kZXYtPm9m X25vZGUsIDEsIDApOworCWRybV9icmlkZ2VfcmVtb3ZlKCZkc2ktPmJyaWRnZSk7CisKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIGJvb2wgbndsX2RzaV9yZWFkX3BhY2tldChzdHJ1Y3QgbndsX2Rz aSAqZHNpLCB1MzIgc3RhdHVzKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRzaS0+ZGV2Owor CXN0cnVjdCBud2xfZHNpX3RyYW5zZmVyICp4ZmVyID0gZHNpLT54ZmVyOworCXU4ICpwYXlsb2Fk ID0geGZlci0+bXNnLT5yeF9idWY7CisJdTMyIHZhbDsKKwl1MTYgd29yZF9jb3VudDsKKwl1OCBj aGFubmVsOworCXU4IGRhdGFfdHlwZTsKKworCXhmZXItPnN0YXR1cyA9IDA7CisKKwlpZiAoeGZl ci0+cnhfd29yZF9jb3VudCA9PSAwKSB7CisJCWlmICghKHN0YXR1cyAmIE5XTF9EU0lfUlhfUEtU X0hEUl9SQ1ZEKSkKKwkJCXJldHVybiBmYWxzZTsKKwkJLyogR2V0IHRoZSBSWCBoZWFkZXIgYW5k IHBhcnNlIGl0ICovCisJCXZhbCA9IG53bF9kc2lfcmVhZChkc2ksIE5XTF9EU0lfUlhfUEtUX0hF QURFUik7CisJCXdvcmRfY291bnQgPSBOV0xfRFNJX1dDKHZhbCk7CisJCWNoYW5uZWwgPSBOV0xf RFNJX1JYX1ZDKHZhbCk7CisJCWRhdGFfdHlwZSA9IE5XTF9EU0lfUlhfRFQodmFsKTsKKworCQlp ZiAoY2hhbm5lbCAhPSB4ZmVyLT5tc2ctPmNoYW5uZWwpIHsKKwkJCURSTV9ERVZfRVJST1IoZGV2 LAorCQkJCSAgICAgICJbJTAyWF0gQ2hhbm5lbCBtaXNtYXRjaCAoJXUgIT0gJXUpXG4iLAorCQkJ CSAgICAgIHhmZXItPmNtZCwgY2hhbm5lbCwgeGZlci0+bXNnLT5jaGFubmVsKTsKKwkJCXJldHVy biB0cnVlOworCQl9CisKKwkJc3dpdGNoIChkYXRhX3R5cGUpIHsKKwkJY2FzZSBNSVBJX0RTSV9S WF9HRU5FUklDX1NIT1JUX1JFQURfUkVTUE9OU0VfMkJZVEU6CisJCQkvKiBGYWxsIHRocm91Z2gg Ki8KKwkJY2FzZSBNSVBJX0RTSV9SWF9EQ1NfU0hPUlRfUkVBRF9SRVNQT05TRV8yQllURToKKwkJ CWlmICh4ZmVyLT5tc2ctPnJ4X2xlbiA+IDEpIHsKKwkJCQkvKiByZWFkIHNlY29uZCBieXRlICov CisJCQkJcGF5bG9hZFsxXSA9IHdvcmRfY291bnQgPj4gODsKKwkJCQkrK3hmZXItPnJ4X2xlbjsK KwkJCX0KKwkJCS8qIEZhbGwgdGhyb3VnaCAqLworCQljYXNlIE1JUElfRFNJX1JYX0dFTkVSSUNf U0hPUlRfUkVBRF9SRVNQT05TRV8xQllURToKKwkJCS8qIEZhbGwgdGhyb3VnaCAqLworCQljYXNl IE1JUElfRFNJX1JYX0RDU19TSE9SVF9SRUFEX1JFU1BPTlNFXzFCWVRFOgorCQkJaWYgKHhmZXIt Pm1zZy0+cnhfbGVuID4gMCkgeworCQkJCS8qIHJlYWQgZmlyc3QgYnl0ZSAqLworCQkJCXBheWxv YWRbMF0gPSB3b3JkX2NvdW50ICYgMHhmZjsKKwkJCQkrK3hmZXItPnJ4X2xlbjsKKwkJCX0KKwkJ CXhmZXItPnN0YXR1cyA9IHhmZXItPnJ4X2xlbjsKKwkJCXJldHVybiB0cnVlOworCQljYXNlIE1J UElfRFNJX1JYX0FDS05PV0xFREdFX0FORF9FUlJPUl9SRVBPUlQ6CisJCQl3b3JkX2NvdW50ICY9 IDB4ZmY7CisJCQlEUk1fREVWX0VSUk9SKGRldiwgIlslMDJYXSBEU0kgZXJyb3IgcmVwb3J0OiAw eCUwMnhcbiIsCisJCQkJICAgICAgeGZlci0+Y21kLCB3b3JkX2NvdW50KTsKKwkJCXhmZXItPnN0 YXR1cyA9IC1FUFJPVE87CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCisJCWlmICh3b3JkX2NvdW50 ID4geGZlci0+bXNnLT5yeF9sZW4pIHsKKwkJCURSTV9ERVZfRVJST1IoCisJCQkJZGV2LAorCQkJ CSJbJTAyWF0gUmVjZWl2ZSBidWZmZXIgdG9vIHNtYWxsOiAlenUgKDwgJXUpXG4iLAorCQkJCXhm ZXItPmNtZCwgeGZlci0+bXNnLT5yeF9sZW4sIHdvcmRfY291bnQpOworCQkJcmV0dXJuIHRydWU7 CisJCX0KKworCQl4ZmVyLT5yeF93b3JkX2NvdW50ID0gd29yZF9jb3VudDsKKwl9IGVsc2Ugewor CQkvKiBTZXQgd29yZF9jb3VudCBmcm9tIHByZXZpb3VzIGhlYWRlciByZWFkICovCisJCXdvcmRf Y291bnQgPSB4ZmVyLT5yeF93b3JkX2NvdW50OworCX0KKworCS8qIElmIFJYIHBheWxvYWQgaXMg bm90IHlldCByZWNlaXZlZCwgd2FpdCBmb3IgaXQgKi8KKwlpZiAoIShzdGF0dXMgJiBOV0xfRFNJ X1JYX1BLVF9QQVlMT0FEX0RBVEFfUkNWRCkpCisJCXJldHVybiBmYWxzZTsKKworCS8qIFJlYWQg dGhlIFJYIHBheWxvYWQgKi8KKwl3aGlsZSAod29yZF9jb3VudCA+PSA0KSB7CisJCXZhbCA9IG53 bF9kc2lfcmVhZChkc2ksIE5XTF9EU0lfUlhfUEFZTE9BRCk7CisJCXBheWxvYWRbMF0gPSAodmFs ID4+IDApICYgMHhmZjsKKwkJcGF5bG9hZFsxXSA9ICh2YWwgPj4gOCkgJiAweGZmOworCQlwYXls b2FkWzJdID0gKHZhbCA+PiAxNikgJiAweGZmOworCQlwYXlsb2FkWzNdID0gKHZhbCA+PiAyNCkg JiAweGZmOworCQlwYXlsb2FkICs9IDQ7CisJCXhmZXItPnJ4X2xlbiArPSA0OworCQl3b3JkX2Nv dW50IC09IDQ7CisJfQorCisJaWYgKHdvcmRfY291bnQgPiAwKSB7CisJCXZhbCA9IG53bF9kc2lf cmVhZChkc2ksIE5XTF9EU0lfUlhfUEFZTE9BRCk7CisJCXN3aXRjaCAod29yZF9jb3VudCkgewor CQljYXNlIDM6CisJCQlwYXlsb2FkWzJdID0gKHZhbCA+PiAxNikgJiAweGZmOworCQkJKyt4ZmVy LT5yeF9sZW47CisJCQkvKiBGYWxsIHRocm91Z2ggKi8KKwkJY2FzZSAyOgorCQkJcGF5bG9hZFsx XSA9ICh2YWwgPj4gOCkgJiAweGZmOworCQkJKyt4ZmVyLT5yeF9sZW47CisJCQkvKiBGYWxsIHRo cm91Z2ggKi8KKwkJY2FzZSAxOgorCQkJcGF5bG9hZFswXSA9ICh2YWwgPj4gMCkgJiAweGZmOwor CQkJKyt4ZmVyLT5yeF9sZW47CisJCQlicmVhazsKKwkJfQorCX0KKworCXhmZXItPnN0YXR1cyA9 IHhmZXItPnJ4X2xlbjsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBud2xfZHNp X2ZpbmlzaF90cmFuc21pc3Npb24oc3RydWN0IG53bF9kc2kgKmRzaSwgdTMyIHN0YXR1cykKK3sK KwlzdHJ1Y3QgbndsX2RzaV90cmFuc2ZlciAqeGZlciA9IGRzaS0+eGZlcjsKKwlib29sIGVuZF9w YWNrZXQgPSBmYWxzZTsKKworCWlmICgheGZlcikKKwkJcmV0dXJuOworCisJaWYgKHhmZXItPmRp cmVjdGlvbiA9PSBEU0lfUEFDS0VUX1NFTkQgJiYKKwkgICAgc3RhdHVzICYgTldMX0RTSV9UWF9Q S1RfRE9ORSkgeworCQl4ZmVyLT5zdGF0dXMgPSB4ZmVyLT50eF9sZW47CisJCWVuZF9wYWNrZXQg PSB0cnVlOworCX0gZWxzZSBpZiAoc3RhdHVzICYgTldMX0RTSV9EUEhZX0RJUkVDVElPTiAmJgor CQkgICAoKHN0YXR1cyAmIChOV0xfRFNJX1JYX1BLVF9IRFJfUkNWRCB8CisJCQkgICAgICAgTldM X0RTSV9SWF9QS1RfUEFZTE9BRF9EQVRBX1JDVkQpKSkpIHsKKwkJZW5kX3BhY2tldCA9IG53bF9k c2lfcmVhZF9wYWNrZXQoZHNpLCBzdGF0dXMpOworCX0KKworCWlmIChlbmRfcGFja2V0KQorCQlj b21wbGV0ZSgmeGZlci0+Y29tcGxldGVkKTsKK30KKworc3RhdGljIHZvaWQgbndsX2RzaV9iZWdp bl90cmFuc21pc3Npb24oc3RydWN0IG53bF9kc2kgKmRzaSkKK3sKKwlzdHJ1Y3QgbndsX2RzaV90 cmFuc2ZlciAqeGZlciA9IGRzaS0+eGZlcjsKKwlzdHJ1Y3QgbWlwaV9kc2lfcGFja2V0ICpwa3Qg PSAmeGZlci0+cGFja2V0OworCWNvbnN0IHU4ICpwYXlsb2FkOworCXNpemVfdCBsZW5ndGg7CisJ dTE2IHdvcmRfY291bnQ7CisJdTggaHNfbW9kZTsKKwl1MzIgdmFsOworCXUzMiBoc193b3JrYXJv dW5kID0gMDsKKworCS8qIFNlbmQgdGhlIHBheWxvYWQsIGlmIGFueSAqLworCWxlbmd0aCA9IHBr dC0+cGF5bG9hZF9sZW5ndGg7CisJcGF5bG9hZCA9IHBrdC0+cGF5bG9hZDsKKworCXdoaWxlIChs ZW5ndGggPj0gNCkgeworCQl2YWwgPSAqKHUzMiAqKXBheWxvYWQ7CisJCWhzX3dvcmthcm91bmQg fD0gISh2YWwgJiAweEZGRkYwMCk7CisJCW53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX1RYX1BB WUxPQUQsIHZhbCk7CisJCXBheWxvYWQgKz0gNDsKKwkJbGVuZ3RoIC09IDQ7CisJfQorCS8qIFNl bmQgdGhlIHJlc3Qgb2YgdGhlIHBheWxvYWQgKi8KKwl2YWwgPSAwOworCXN3aXRjaCAobGVuZ3Ro KSB7CisJY2FzZSAzOgorCQl2YWwgfD0gcGF5bG9hZFsyXSA8PCAxNjsKKwkJLyogRmFsbCB0aHJv dWdoICovCisJY2FzZSAyOgorCQl2YWwgfD0gcGF5bG9hZFsxXSA8PCA4OworCQloc193b3JrYXJv dW5kIHw9ICEodmFsICYgMHhGRkZGMDApOworCQkvKiBGYWxsIHRocm91Z2ggKi8KKwljYXNlIDE6 CisJCXZhbCB8PSBwYXlsb2FkWzBdOworCQlud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9UWF9Q QVlMT0FELCB2YWwpOworCQlicmVhazsKKwl9CisJeGZlci0+dHhfbGVuID0gcGt0LT5wYXlsb2Fk X2xlbmd0aDsKKworCS8qCisJICogU2VuZCB0aGUgaGVhZGVyCisJICogaGVhZGVyWzBdID0gVmly dHVhbCBDaGFubmVsICsgRGF0YSBUeXBlCisJICogaGVhZGVyWzFdID0gV29yZCBDb3VudCBMU0Ig KExQKSBvciBmaXJzdCBwYXJhbSAoU1ApCisJICogaGVhZGVyWzJdID0gV29yZCBDb3VudCBNU0Ig KExQKSBvciBzZWNvbmQgcGFyYW0gKFNQKQorCSAqLworCXdvcmRfY291bnQgPSBwa3QtPmhlYWRl clsxXSB8IChwa3QtPmhlYWRlclsyXSA8PCA4KTsKKwlpZiAoaHNfd29ya2Fyb3VuZCAmJiAoZHNp LT5xdWlya3MgJiBFMTE0MThfSFNfTU9ERV9RVUlSSykpIHsKKwkJRFJNX0RFVl9ERUJVR19EUklW RVIoZHNpLT5kZXYsCisJCQkJICAgICAiVXNpbmcgaHMgbW9kZSB3b3JrYXJvdW5kIGZvciBjbWQg MHgleFxuIiwKKwkJCQkgICAgIHhmZXItPmNtZCk7CisJCWhzX21vZGUgPSAxOworCX0gZWxzZSB7 CisJCWhzX21vZGUgPSAoeGZlci0+bXNnLT5mbGFncyAmIE1JUElfRFNJX01TR19VU0VfTFBNKSA/ IDAgOiAxOworCX0KKwl2YWwgPSBOV0xfRFNJX1dDKHdvcmRfY291bnQpIHwgTldMX0RTSV9UWF9W Qyh4ZmVyLT5tc2ctPmNoYW5uZWwpIHwKKwkgICAgICBOV0xfRFNJX1RYX0RUKHhmZXItPm1zZy0+ dHlwZSkgfCBOV0xfRFNJX0hTX1NFTChoc19tb2RlKSB8CisJICAgICAgTldMX0RTSV9CVEFfVFgo eGZlci0+bmVlZF9idGEpOworCW53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX1BLVF9DT05UUk9M LCB2YWwpOworCisJLyogU2VuZCBwYWNrZXQgY29tbWFuZCAqLworCW53bF9kc2lfd3JpdGUoZHNp LCBOV0xfRFNJX1NFTkRfUEFDS0VULCAweDEpOworfQorCitzdGF0aWMgc3NpemVfdCBud2xfZHNp X2hvc3RfdHJhbnNmZXIoc3RydWN0IG1pcGlfZHNpX2hvc3QgKmRzaV9ob3N0LAorCQkJCSAgICAg Y29uc3Qgc3RydWN0IG1pcGlfZHNpX21zZyAqbXNnKQoreworCXN0cnVjdCBud2xfZHNpICpkc2kg PSBjb250YWluZXJfb2YoZHNpX2hvc3QsIHN0cnVjdCBud2xfZHNpLCBkc2lfaG9zdCk7CisJc3Ry dWN0IG53bF9kc2lfdHJhbnNmZXIgeGZlcjsKKwlzc2l6ZV90IHJldCA9IDA7CisKKwkvKiBDcmVh dGUgcGFja2V0IHRvIGJlIHNlbnQgKi8KKwlkc2ktPnhmZXIgPSAmeGZlcjsKKwlyZXQgPSBtaXBp X2RzaV9jcmVhdGVfcGFja2V0KCZ4ZmVyLnBhY2tldCwgbXNnKTsKKwlpZiAocmV0IDwgMCkgewor CQlkc2ktPnhmZXIgPSBOVUxMOworCQlyZXR1cm4gcmV0OworCX0KKworCWlmICgobXNnLT50eXBl ICYgTUlQSV9EU0lfR0VORVJJQ19SRUFEX1JFUVVFU1RfMF9QQVJBTSB8fAorCSAgICAgbXNnLT50 eXBlICYgTUlQSV9EU0lfR0VORVJJQ19SRUFEX1JFUVVFU1RfMV9QQVJBTSB8fAorCSAgICAgbXNn LT50eXBlICYgTUlQSV9EU0lfR0VORVJJQ19SRUFEX1JFUVVFU1RfMl9QQVJBTSB8fAorCSAgICAg bXNnLT50eXBlICYgTUlQSV9EU0lfRENTX1JFQUQpICYmCisJICAgIG1zZy0+cnhfbGVuID4gMCAm JiBtc2ctPnJ4X2J1ZiAhPSBOVUxMKQorCQl4ZmVyLmRpcmVjdGlvbiA9IERTSV9QQUNLRVRfUkVD RUlWRTsKKwllbHNlCisJCXhmZXIuZGlyZWN0aW9uID0gRFNJX1BBQ0tFVF9TRU5EOworCisJeGZl ci5uZWVkX2J0YSA9ICh4ZmVyLmRpcmVjdGlvbiA9PSBEU0lfUEFDS0VUX1JFQ0VJVkUpOworCXhm ZXIubmVlZF9idGEgfD0gKG1zZy0+ZmxhZ3MgJiBNSVBJX0RTSV9NU0dfUkVRX0FDSykgPyAxIDog MDsKKwl4ZmVyLm1zZyA9IG1zZzsKKwl4ZmVyLnN0YXR1cyA9IC1FVElNRURPVVQ7CisJeGZlci5y eF93b3JkX2NvdW50ID0gMDsKKwl4ZmVyLnJ4X2xlbiA9IDA7CisJeGZlci5jbWQgPSAweDAwOwor CWlmIChtc2ctPnR4X2xlbiA+IDApCisJCXhmZXIuY21kID0gKCh1OCAqKShtc2ctPnR4X2J1Zikp WzBdOworCWluaXRfY29tcGxldGlvbigmeGZlci5jb21wbGV0ZWQpOworCisJcmV0ID0gY2xrX3By ZXBhcmVfZW5hYmxlKGRzaS0+cnhfZXNjX2Nsayk7CisJaWYgKHJldCA8IDApIHsKKwkJRFJNX0RF Vl9FUlJPUihkc2ktPmRldiwgIkZhaWxlZCB0byBlbmFibGUgcnhfZXNjIGNsazogJXpkXG4iLAor CQkJICAgICAgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJRFJNX0RFVl9ERUJVR19EUklWRVIo ZHNpLT5kZXYsICJFbmFibGVkIHJ4X2VzYyBjbGsgQCVsdSBIelxuIiwKKwkJCSAgICAgY2xrX2dl dF9yYXRlKGRzaS0+cnhfZXNjX2NsaykpOworCisJLyogSW5pdGlhdGUgdGhlIERTSSBwYWNrZXQg dHJhbnNtaXNpb24gKi8KKwlud2xfZHNpX2JlZ2luX3RyYW5zbWlzc2lvbihkc2kpOworCisJaWYg KCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnhmZXIuY29tcGxldGVkLAorCQkJCQkgTldM X0RTSV9NSVBJX0ZJRk9fVElNRU9VVCkpIHsKKwkJRFJNX0RFVl9FUlJPUihkc2lfaG9zdC0+ZGV2 LCAiWyUwMlhdIERTSSB0cmFuc2ZlciB0aW1lZCBvdXRcbiIsCisJCQkgICAgICB4ZmVyLmNtZCk7 CisJCXJldCA9IC1FVElNRURPVVQ7CisJfSBlbHNlIHsKKwkJcmV0ID0geGZlci5zdGF0dXM7CisJ fQorCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+cnhfZXNjX2Nsayk7CisKKwlyZXR1cm4g cmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG1pcGlfZHNpX2hvc3Rfb3BzIG53bF9kc2lf aG9zdF9vcHMgPSB7CisJLmF0dGFjaCA9IG53bF9kc2lfaG9zdF9hdHRhY2gsCisJLmRldGFjaCA9 IG53bF9kc2lfaG9zdF9kZXRhY2gsCisJLnRyYW5zZmVyID0gbndsX2RzaV9ob3N0X3RyYW5zZmVy LAorfTsKKworc3RhdGljIGlycXJldHVybl90IG53bF9kc2lfaXJxX2hhbmRsZXIoaW50IGlycSwg dm9pZCAqZGF0YSkKK3sKKwl1MzIgaXJxX3N0YXR1czsKKwlzdHJ1Y3QgbndsX2RzaSAqZHNpID0g ZGF0YTsKKworCWlycV9zdGF0dXMgPSBud2xfZHNpX3JlYWQoZHNpLCBOV0xfRFNJX0lSUV9TVEFU VVMpOworCisJaWYgKGlycV9zdGF0dXMgJiBOV0xfRFNJX1RYX0ZJRk9fT1ZGTFcpCisJCURSTV9E RVZfRVJST1JfUkFURUxJTUlURUQoZHNpLT5kZXYsICJ0eCBmaWZvIG92ZXJmbG93XG4iKTsKKwor CWlmIChpcnFfc3RhdHVzICYgTldMX0RTSV9IU19UWF9USU1FT1VUKQorCQlEUk1fREVWX0VSUk9S X1JBVEVMSU1JVEVEKGRzaS0+ZGV2LCAiSFMgdHggdGltZW91dFxuIik7CisKKwlpZiAoaXJxX3N0 YXR1cyAmIE5XTF9EU0lfVFhfUEtUX0RPTkUgfHwKKwkgICAgaXJxX3N0YXR1cyAmIE5XTF9EU0lf UlhfUEtUX0hEUl9SQ1ZEIHx8CisJICAgIGlycV9zdGF0dXMgJiBOV0xfRFNJX1JYX1BLVF9QQVlM T0FEX0RBVEFfUkNWRCkKKwkJbndsX2RzaV9maW5pc2hfdHJhbnNtaXNzaW9uKGRzaSwgaXJxX3N0 YXR1cyk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgbndsX2RzaV9l bmFibGUoc3RydWN0IG53bF9kc2kgKmRzaSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkc2kt PmRldjsKKwl1bmlvbiBwaHlfY29uZmlndXJlX29wdHMgKnBoeV9jZmcgPSAmZHNpLT5waHlfY2Zn OworCWludCByZXQ7CisKKwlpZiAoIWRzaS0+bGFuZXMpIHsKKwkJRFJNX0RFVl9FUlJPUihkZXYs ICJOZWVkIERTSSBsYW5lczogJWRcbiIsIGRzaS0+bGFuZXMpOworCQlyZXR1cm4gLUVJTlZBTDsK Kwl9CisKKwlyZXQgPSBwaHlfaW5pdChkc2ktPnBoeSk7CisJaWYgKHJldCA8IDApIHsKKwkJRFJN X0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gaW5pdCBEU0kgcGh5OiAlZFxuIiwgcmV0KTsKKwkJ cmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBwaHlfY29uZmlndXJlKGRzaS0+cGh5LCBwaHlfY2Zn KTsKKwlpZiAocmV0IDwgMCkgeworCQlEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBjb25m aWd1cmUgRFNJIHBoeTogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0g Y2xrX3ByZXBhcmVfZW5hYmxlKGRzaS0+dHhfZXNjX2Nsayk7CisJaWYgKHJldCA8IDApIHsKKwkJ RFJNX0RFVl9FUlJPUihkc2ktPmRldiwgIkZhaWxlZCB0byBlbmFibGUgdHhfZXNjIGNsazogJWRc biIsCisJCQkgICAgICByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwlEUk1fREVWX0RFQlVHX0RS SVZFUihkc2ktPmRldiwgIkVuYWJsZWQgdHhfZXNjIGNsayBAJWx1IEh6XG4iLAorCQkJICAgICBj bGtfZ2V0X3JhdGUoZHNpLT50eF9lc2NfY2xrKSk7CisKKwlyZXQgPSBud2xfZHNpX2NvbmZpZ19o b3N0KGRzaSk7CisJaWYgKHJldCA8IDApIHsKKwkJRFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQg dG8gc2V0IHVwIERTSTogJWQiLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IG53 bF9kc2lfY29uZmlnX2RwaShkc2kpOworCWlmIChyZXQgPCAwKSB7CisJCURSTV9ERVZfRVJST1Io ZGV2LCAiRmFpbGVkIHRvIHNldCB1cCBEUEk6ICVkIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9 CisKKwlyZXQgPSBwaHlfcG93ZXJfb24oZHNpLT5waHkpOworCWlmIChyZXQgPCAwKSB7CisJCURS TV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIHBvd2VyIG9uIERQSFkgKCVkKVxuIiwgcmV0KTsK KwkJcmV0dXJuIHJldDsKKwl9CisKKwlud2xfZHNpX2luaXRfaW50ZXJydXB0cyhkc2kpOworCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbndsX2RzaV9kaXNhYmxlKHN0cnVjdCBud2xfZHNp ICpkc2kpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gZHNpLT5kZXY7CisKKwlEUk1fREVWX0RF QlVHX0RSSVZFUihkZXYsICJEaXNhYmxpbmcgY2xvY2tzIGFuZCBwaHlcbiIpOworCisJcGh5X3Bv d2VyX29mZihkc2ktPnBoeSk7CisJcGh5X2V4aXQoZHNpLT5waHkpOworCisJLyogRGlzYWJsaW5n IHRoZSBjbG9jayBiZWZvcmUgdGhlIHBoeSBicmVha3MgZW5hYmxpbmcgZHNpIGFnYWluICovCisJ Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+dHhfZXNjX2Nsayk7CisKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIGludCBud2xfZHNpX3NldF9wbGF0Zm9ybV9jbG9ja3Moc3RydWN0IG53bF9kc2kg KmRzaSwgYm9vbCBlbmFibGUpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gZHNpLT5kZXY7CisJ Y29uc3QgY2hhciAqaWQ7CisJc3RydWN0IGNsayAqY2xrOworCXNpemVfdCBpOworCXVuc2lnbmVk IGxvbmcgcmF0ZTsKKwlpbnQgcmV0LCByZXN1bHQgPSAwOworCisJRFJNX0RFVl9ERUJVR19EUklW RVIoZGV2LCAiJXMgcGxhdGZvcm0gY2xvY2tzXG4iLAorCQkJICAgICBlbmFibGUgPyAiZW5hYmxp bmciIDogImRpc2FibGluZyIpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRzaS0+cGRh dGEtPmNsa19jb25maWcpOyBpKyspIHsKKwkJaWYgKCFkc2ktPmNsa19jb25maWdbaV0ucHJlc2Vu dCkKKwkJCWNvbnRpbnVlOworCQlpZCA9IGRzaS0+Y2xrX2NvbmZpZ1tpXS5pZDsKKwkJY2xrID0g ZHNpLT5jbGtfY29uZmlnW2ldLmNsazsKKworCQlpZiAoZW5hYmxlKSB7CisJCQlyZXQgPSBjbGtf cHJlcGFyZV9lbmFibGUoY2xrKTsKKwkJCWlmIChyZXQgPCAwKSB7CisJCQkJRFJNX0RFVl9FUlJP UihkZXYsCisJCQkJCSAgICAgICJGYWlsZWQgdG8gZW5hYmxlICVzIGNsazogJWRcbiIsCisJCQkJ CSAgICAgIGlkLCByZXQpOworCQkJCXJlc3VsdCA9IHJlc3VsdCA/OiByZXQ7CisJCQl9CisJCQly YXRlID0gY2xrX2dldF9yYXRlKGNsayk7CisJCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJF bmFibGVkICVzIGNsayBAJWx1IEh6XG4iLAorCQkJCQkgICAgIGlkLCByYXRlKTsKKwkJfSBlbHNl IHsKKwkJCWNsa19kaXNhYmxlX3VucHJlcGFyZShjbGspOworCQkJRFJNX0RFVl9ERUJVR19EUklW RVIoZGV2LCAiRGlzYWJsZWQgJXMgY2xrXG4iLCBpZCk7CisJCX0KKwl9CisKKwlyZXR1cm4gcmVz dWx0OworfQorCitzdGF0aWMgaW50IG53bF9kc2lfcGxhdF9lbmFibGUoc3RydWN0IG53bF9kc2kg KmRzaSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkc2ktPmRldjsKKwlpbnQgcmV0OworCisJ aWYgKGRzaS0+cGRhdGEtPnNlbGVjdF9pbnB1dCkKKwkJZHNpLT5wZGF0YS0+c2VsZWN0X2lucHV0 KGRzaSk7CisKKwlyZXQgPSBud2xfZHNpX3NldF9wbGF0Zm9ybV9jbG9ja3MoZHNpLCB0cnVlKTsK KwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGRzaS0+cGRhdGEtPnBvd2Vy b24oZHNpKTsKKwlpZiAocmV0IDwgMCkKKwkJRFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8g cG93ZXIgb24gRFNJOiAlZFxuIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9p ZCBud2xfZHNpX3BsYXRfZGlzYWJsZShzdHJ1Y3QgbndsX2RzaSAqZHNpKQoreworCWRzaS0+cGRh dGEtPnBvd2Vyb2ZmKGRzaSk7CisJbndsX2RzaV9zZXRfcGxhdGZvcm1fY2xvY2tzKGRzaSwgZmFs c2UpOworCWlmIChkc2ktPnBkYXRhLT5kZXNlbGVjdF9pbnB1dCkKKwkJZHNpLT5wZGF0YS0+ZGVz ZWxlY3RfaW5wdXQoZHNpKTsKK30KKworc3RhdGljIHZvaWQgbndsX2RzaV9icmlkZ2VfZGlzYWJs ZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQoreworCXN0cnVjdCBud2xfZHNpICpkc2kgPSBi cmlkZ2VfdG9fZHNpKGJyaWRnZSk7CisKKwlud2xfZHNpX2Rpc2FibGUoZHNpKTsKKwlud2xfZHNp X3BsYXRfZGlzYWJsZShkc2kpOworCXBtX3J1bnRpbWVfcHV0KGRzaS0+ZGV2KTsKK30KKworc3Rh dGljIGludCBud2xfZHNpX2dldF9kcGh5X3BhcmFtcyhzdHJ1Y3QgbndsX2RzaSAqZHNpLAorCQkJ CSAgIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJCSAgIHVuaW9uIHBo eV9jb25maWd1cmVfb3B0cyAqcGh5X29wdHMpCit7CisJdW5zaWduZWQgbG9uZyByYXRlOworCWlu dCByZXQ7CisKKwlpZiAoZHNpLT5sYW5lcyA8IDEgfHwgZHNpLT5sYW5lcyA+IDQpCisJCXJldHVy biAtRUlOVkFMOworCisJLyoKKwkgKiBTbyBmYXIgdGhlIERQSFkgc3BlYyBtaW5pbWFsIHRpbWlu Z3Mgd29yayBmb3IgYm90aCBtaXhlbAorCSAqIGRwaHkgYW5kIG53bCBkc2kgaG9zdAorCSAqLwor CXJldCA9IHBoeV9taXBpX2RwaHlfZ2V0X2RlZmF1bHRfY29uZmlnKAorCQltb2RlLT5jcnRjX2Ns b2NrICogMTAwMCwKKwkJbWlwaV9kc2lfcGl4ZWxfZm9ybWF0X3RvX2JwcChkc2ktPmZvcm1hdCks IGRzaS0+bGFuZXMsCisJCSZwaHlfb3B0cy0+bWlwaV9kcGh5KTsKKwlpZiAocmV0IDwgMCkKKwkJ cmV0dXJuIHJldDsKKworCXJhdGUgPSBjbGtfZ2V0X3JhdGUoZHNpLT50eF9lc2NfY2xrKTsKKwlE Uk1fREVWX0RFQlVHX0RSSVZFUihkc2ktPmRldiwgIkxQIGNsayBpcyBAJWx1IEh6XG4iLCByYXRl KTsKKwlwaHlfb3B0cy0+bWlwaV9kcGh5LmxwX2Nsa19yYXRlID0gcmF0ZTsKKworCXJldHVybiAw OworfQorCitzdGF0aWMgYm9vbCBud2xfZHNpX2JyaWRnZV9tb2RlX2ZpeHVwKHN0cnVjdCBkcm1f YnJpZGdlICpicmlkZ2UsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUg Km1vZGUsCisJCQkJICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUp Cit7CisJLyogQXQgbGVhc3QgTENESUYgKyBOV0wgbmVlZHMgYWN0aXZlIGhpZ2ggc3luYyAqLwor CWFkanVzdGVkX21vZGUtPmZsYWdzIHw9IChEUk1fTU9ERV9GTEFHX1BIU1lOQyB8IERSTV9NT0RF X0ZMQUdfUFZTWU5DKTsKKwlhZGp1c3RlZF9tb2RlLT5mbGFncyAmPSB+KERSTV9NT0RFX0ZMQUdf TkhTWU5DIHwgRFJNX01PREVfRkxBR19OVlNZTkMpOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0 YXRpYyBlbnVtIGRybV9tb2RlX3N0YXR1cworbndsX2RzaV9icmlkZ2VfbW9kZV92YWxpZChzdHJ1 Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAorCQkJICBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9k ZSAqbW9kZSkKK3sKKwlzdHJ1Y3QgbndsX2RzaSAqZHNpID0gYnJpZGdlX3RvX2RzaShicmlkZ2Up OworCWludCBicHAgPSBtaXBpX2RzaV9waXhlbF9mb3JtYXRfdG9fYnBwKGRzaS0+Zm9ybWF0KTsK KworCWlmIChtb2RlLT5jbG9jayAqIGJwcCA+IDE1MDAwMDAwICogZHNpLT5sYW5lcykKKwkJcmV0 dXJuIE1PREVfQ0xPQ0tfSElHSDsKKworCWlmIChtb2RlLT5jbG9jayAqIGJwcCA8IDgwMDAwICog ZHNpLT5sYW5lcykKKwkJcmV0dXJuIE1PREVfQ0xPQ0tfTE9XOworCisJcmV0dXJuIE1PREVfT0s7 Cit9CisKK3N0YXRpYyB2b2lkCitud2xfZHNpX2JyaWRnZV9tb2RlX3NldChzdHJ1Y3QgZHJtX2Jy aWRnZSAqYnJpZGdlLAorCQkJY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJ CQljb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKK3sKKwlzdHJ1 Y3QgbndsX2RzaSAqZHNpID0gYnJpZGdlX3RvX2RzaShicmlkZ2UpOworCXN0cnVjdCBkZXZpY2Ug KmRldiA9IGRzaS0+ZGV2OworCXVuaW9uIHBoeV9jb25maWd1cmVfb3B0cyBuZXdfY2ZnOworCXVu c2lnbmVkIGxvbmcgcGh5X3JlZl9yYXRlOworCWludCByZXQ7CisKKwlyZXQgPSBud2xfZHNpX2dl dF9kcGh5X3BhcmFtcyhkc2ksIGFkanVzdGVkX21vZGUsICZuZXdfY2ZnKTsKKwlpZiAocmV0IDwg MCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBJZiBocyBjbG9jayBpcyB1bmNoYW5nZWQsIHdlJ3Jl IGFsbCBnb29kIC0gYWxsIHBhcmFtZXRlcnMgYXJlCisJICogZGVyaXZlZCBmcm9tIGl0IGF0bS4K KwkgKi8KKwlpZiAobmV3X2NmZy5taXBpX2RwaHkuaHNfY2xrX3JhdGUgPT0gZHNpLT5waHlfY2Zn Lm1pcGlfZHBoeS5oc19jbGtfcmF0ZSkKKwkJcmV0dXJuOworCisJcGh5X3JlZl9yYXRlID0gY2xr X2dldF9yYXRlKGRzaS0+cGh5X3JlZl9jbGspOworCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwg IlBIWSBhdCByZWYgcmF0ZTogJWx1XG4iLCBwaHlfcmVmX3JhdGUpOworCS8qIFNhdmUgdGhlIG5l dyBkZXNpcmVkIHBoeSBjb25maWcgKi8KKwltZW1jcHkoJmRzaS0+cGh5X2NmZywgJm5ld19jZmcs IHNpemVvZihuZXdfY2ZnKSk7CisKKwltZW1jcHkoJmRzaS0+bW9kZSwgYWRqdXN0ZWRfbW9kZSwg c2l6ZW9mKGRzaS0+bW9kZSkpOworCWRybV9tb2RlX2RlYnVnX3ByaW50bW9kZWxpbmUoYWRqdXN0 ZWRfbW9kZSk7Cit9CisKK3N0YXRpYyB2b2lkIG53bF9kc2lfYnJpZGdlX3ByZV9lbmFibGUoc3Ry dWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sKKwlzdHJ1Y3QgbndsX2RzaSAqZHNpID0gYnJpZGdl X3RvX2RzaShicmlkZ2UpOworCisJcG1fcnVudGltZV9nZXRfc3luYyhkc2ktPmRldik7CisJbnds X2RzaV9wbGF0X2VuYWJsZShkc2kpOworCW53bF9kc2lfZW5hYmxlKGRzaSk7Cit9CisKK3N0YXRp YyBpbnQgbndsX2RzaV9icmlkZ2VfYXR0YWNoKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCit7 CisJc3RydWN0IG53bF9kc2kgKmRzaSA9IGJyaWRnZS0+ZHJpdmVyX3ByaXZhdGU7CisKKwlyZXR1 cm4gZHJtX2JyaWRnZV9hdHRhY2goYnJpZGdlLT5lbmNvZGVyLCBkc2ktPnBhbmVsX2JyaWRnZSwg YnJpZGdlKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fYnJpZGdlX2Z1bmNzIG53bF9k c2lfYnJpZGdlX2Z1bmNzID0geworCS5wcmVfZW5hYmxlID0gbndsX2RzaV9icmlkZ2VfcHJlX2Vu YWJsZSwKKwkuZGlzYWJsZSAgICA9IG53bF9kc2lfYnJpZGdlX2Rpc2FibGUsCisJLm1vZGVfZml4 dXAgPSBud2xfZHNpX2JyaWRnZV9tb2RlX2ZpeHVwLAorCS5tb2RlX3NldCAgID0gbndsX2RzaV9i cmlkZ2VfbW9kZV9zZXQsCisJLm1vZGVfdmFsaWQgPSBud2xfZHNpX2JyaWRnZV9tb2RlX3ZhbGlk LAorCS5hdHRhY2gJICAgID0gbndsX2RzaV9icmlkZ2VfYXR0YWNoLAorfTsKKworc3RhdGljIGlu dCBud2xfZHNpX3BhcnNlX2R0KHN0cnVjdCBud2xfZHNpICpkc2kpCit7CisJc3RydWN0IHBsYXRm b3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkc2ktPmRldik7CisJc3RydWN0 IGNsayAqY2xrOworCWNvbnN0IGNoYXIgKmNsa19pZDsKKwl2b2lkIF9faW9tZW0gKmJhc2U7CisJ aW50IGksIHJldDsKKworCWRzaS0+cGh5ID0gZGV2bV9waHlfZ2V0KGRzaS0+ZGV2LCAiZHBoeSIp OworCWlmIChJU19FUlIoZHNpLT5waHkpKSB7CisJCXJldCA9IFBUUl9FUlIoZHNpLT5waHkpOwor CQlpZiAocmV0ICE9IC1FUFJPQkVfREVGRVIpCisJCQlEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LCAi Q291bGQgbm90IGdldCBQSFk6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8q IFBsYXRmb3JtIGRlcGVuZGVudCBjbG9ja3MgKi8KKwltZW1jcHkoZHNpLT5jbGtfY29uZmlnLCBk c2ktPnBkYXRhLT5jbGtfY29uZmlnLAorCSAgICAgICBzaXplb2YoZHNpLT5wZGF0YS0+Y2xrX2Nv bmZpZykpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZHNpLT5wZGF0YS0+Y2xrX2Nv bmZpZyk7IGkrKykgeworCQlpZiAoIWRzaS0+Y2xrX2NvbmZpZ1tpXS5wcmVzZW50KQorCQkJY29u dGludWU7CisKKwkJY2xrX2lkID0gZHNpLT5jbGtfY29uZmlnW2ldLmlkOworCQljbGsgPSBkZXZt X2Nsa19nZXQoZHNpLT5kZXYsIGNsa19pZCk7CisJCWlmIChJU19FUlIoY2xrKSkgeworCQkJcmV0 ID0gUFRSX0VSUihjbGspOworCQkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwgIkZhaWxlZCB0byBn ZXQgJXMgY2xvY2s6ICVkXG4iLAorCQkJCSAgICAgIGNsa19pZCwgcmV0KTsKKwkJCXJldHVybiBy ZXQ7CisJCX0KKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZHNpLT5kZXYsICJTZXR1cCBjbGsgJXMg KHJhdGU6ICVsdSlcbiIsCisJCQkJICAgICBjbGtfaWQsIGNsa19nZXRfcmF0ZShjbGspKTsKKwkJ ZHNpLT5jbGtfY29uZmlnW2ldLmNsayA9IGNsazsKKwl9CisKKwkvKiBEU0kgY2xvY2tzICovCisJ Y2xrID0gZGV2bV9jbGtfZ2V0KGRzaS0+ZGV2LCAicGh5X3JlZiIpOworCWlmIChJU19FUlIoY2xr KSkgeworCQlyZXQgPSBQVFJfRVJSKGNsayk7CisJCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJG YWlsZWQgdG8gZ2V0IHBoeV9yZWYgY2xvY2s6ICVkXG4iLAorCQkJICAgICAgcmV0KTsKKwkJcmV0 dXJuIHJldDsKKwl9CisJZHNpLT5waHlfcmVmX2NsayA9IGNsazsKKworCWNsayA9IGRldm1fY2xr X2dldChkc2ktPmRldiwgInJ4X2VzYyIpOworCWlmIChJU19FUlIoY2xrKSkgeworCQlyZXQgPSBQ VFJfRVJSKGNsayk7CisJCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJGYWlsZWQgdG8gZ2V0IHJ4 X2VzYyBjbG9jazogJWRcbiIsCisJCQkgICAgICByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwlk c2ktPnJ4X2VzY19jbGsgPSBjbGs7CisKKwljbGsgPSBkZXZtX2Nsa19nZXQoZHNpLT5kZXYsICJ0 eF9lc2MiKTsKKwlpZiAoSVNfRVJSKGNsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihjbGspOworCQlE Uk1fREVWX0VSUk9SKGRzaS0+ZGV2LCAiRmFpbGVkIHRvIGdldCB0eF9lc2MgY2xvY2s6ICVkXG4i LAorCQkJICAgICAgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJZHNpLT50eF9lc2NfY2xrID0g Y2xrOworCisJZHNpLT5tdXggPSBkZXZtX211eF9jb250cm9sX2dldChkc2ktPmRldiwgTlVMTCk7 CisJaWYgKElTX0VSUihkc2ktPm11eCkpIHsKKwkJcmV0ID0gUFRSX0VSUihkc2ktPm11eCk7CisJ CWlmIChyZXQgIT0gLUVQUk9CRV9ERUZFUikKKwkJCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJG YWlsZWQgdG8gZ2V0IG11eDogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJYmFz ZSA9IGRldm1fcGxhdGZvcm1faW9yZW1hcF9yZXNvdXJjZShwZGV2LCAwKTsKKwlpZiAoSVNfRVJS KGJhc2UpKQorCQlyZXR1cm4gUFRSX0VSUihiYXNlKTsKKworCWRzaS0+cmVnbWFwID0KKwkJZGV2 bV9yZWdtYXBfaW5pdF9tbWlvKGRzaS0+ZGV2LCBiYXNlLCAmbndsX2RzaV9yZWdtYXBfY29uZmln KTsKKwlpZiAoSVNfRVJSKGRzaS0+cmVnbWFwKSkgeworCQlyZXQgPSBQVFJfRVJSKGRzaS0+cmVn bWFwKTsKKwkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwgIkZhaWxlZCB0byBjcmVhdGUgTldMIERT SSByZWdtYXA6ICVkXG4iLAorCQkJICAgICAgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlk c2ktPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGRzaS0+aXJxIDwgMCkg eworCQlEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LCAiRmFpbGVkIHRvIGdldCBkZXZpY2UgSVJROiAl ZFxuIiwKKwkJCSAgICAgIGRzaS0+aXJxKTsKKwkJcmV0dXJuIGRzaS0+aXJxOworCX0KKworCWRz aS0+cnN0YyA9IGRldm1fcmVzZXRfY29udHJvbF9hcnJheV9nZXQoZHNpLT5kZXYsIGZhbHNlLCB0 cnVlKTsKKwlpZiAoSVNfRVJSKGRzaS0+cnN0YykpIHsKKwkJRFJNX0RFVl9FUlJPUihkc2ktPmRl diwgIkZhaWxlZCB0byBnZXQgcmVzZXRzOiAlbGRcbiIsCisJCQkgICAgICBQVFJfRVJSKGRzaS0+ cnN0YykpOworCQlyZXR1cm4gUFRSX0VSUihkc2ktPnJzdGMpOworCX0KKworCXJldHVybiAwOwor fQorCitzdGF0aWMgaW50IGlteDhtcV9kc2lfc2VsZWN0X2lucHV0KHN0cnVjdCBud2xfZHNpICpk c2kpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpyZW1vdGU7CisJdTMyIHVzZV9kY3NzID0gMTsK KwlpbnQgcmV0OworCisJcmVtb3RlID0gb2ZfZ3JhcGhfZ2V0X3JlbW90ZV9ub2RlKGRzaS0+ZGV2 LT5vZl9ub2RlLCAwLCAwKTsKKwlpZiAoc3RyY21wKHJlbW90ZS0+bmFtZSwgImxjZGlmIikgPT0g MCkKKwkJdXNlX2Rjc3MgPSAwOworCisJRFJNX0RFVl9JTkZPKGRzaS0+ZGV2LCAiVXNpbmcgJXMg YXMgaW5wdXQgc291cmNlXG4iLAorCQkgICAgICh1c2VfZGNzcykgPyAiRENTUyIgOiAiTENESUYi KTsKKworCXJldCA9IG11eF9jb250cm9sX3RyeV9zZWxlY3QoZHNpLT5tdXgsIHVzZV9kY3NzKTsK KwlpZiAocmV0IDwgMCkKKwkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwgIkZhaWxlZCB0byBzZWxl Y3QgaW5wdXQ6ICVkXG4iLCByZXQpOworCisJb2Zfbm9kZV9wdXQocmVtb3RlKTsKKwlyZXR1cm4g cmV0OworfQorCisKK3N0YXRpYyBpbnQgaW14OG1xX2RzaV9kZXNlbGVjdF9pbnB1dChzdHJ1Y3Qg bndsX2RzaSAqZHNpKQoreworCWludCByZXQ7CisKKwlyZXQgPSBtdXhfY29udHJvbF9kZXNlbGVj dChkc2ktPm11eCk7CisJaWYgKHJldCA8IDApCisJCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJG YWlsZWQgdG8gZGVzZWxlY3QgaW5wdXQ6ICVkXG4iLCByZXQpOworCisJcmV0dXJuIHJldDsKK30K KworCitzdGF0aWMgaW50IGlteDhtcV9kc2lfcG93ZXJvbihzdHJ1Y3QgbndsX2RzaSAqZHNpKQor eworCWludCByZXQgPSAwOworCisJLyogb3RoZXJ3aXNlIHRoZSBkaXNwbGF5IHN0YXlzIGJsYW5r ICovCisJdXNsZWVwX3JhbmdlKDIwMCwgMzAwKTsKKworCWlmIChkc2ktPnJzdGMpCisJCXJldCA9 IHJlc2V0X2NvbnRyb2xfZGVhc3NlcnQoZHNpLT5yc3RjKTsKKworCXJldHVybiByZXQ7Cit9CisK K3N0YXRpYyBpbnQgaW14OG1xX2RzaV9wb3dlcm9mZihzdHJ1Y3QgbndsX2RzaSAqZHNpKQorewor CWludCByZXQgPSAwOworCisJaWYgKGRzaS0+cXVpcmtzICYgU1JDX1JFU0VUX1FVSVJLKQorCQly ZXR1cm4gMDsKKworCWlmIChkc2ktPnJzdGMpCisJCXJldCA9IHJlc2V0X2NvbnRyb2xfYXNzZXJ0 KGRzaS0+cnN0Yyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1f YnJpZGdlX3RpbWluZ3MgbndsX2RzaV90aW1pbmdzID0geworCS5pbnB1dF9idXNfZmxhZ3MgPSBE Uk1fQlVTX0ZMQUdfREVfTE9XLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBud2xfZHNpX3Bs YXRmb3JtX2RhdGEgaW14OG1xX2RldiA9IHsKKwkucG93ZXJvbiA9ICZpbXg4bXFfZHNpX3Bvd2Vy b24sCisJLnBvd2Vyb2ZmID0gJmlteDhtcV9kc2lfcG93ZXJvZmYsCisJLnNlbGVjdF9pbnB1dCA9 ICZpbXg4bXFfZHNpX3NlbGVjdF9pbnB1dCwKKwkuZGVzZWxlY3RfaW5wdXQgPSAmaW14OG1xX2Rz aV9kZXNlbGVjdF9pbnB1dCwKKwkuY2xrX2NvbmZpZyA9IHsKKwkJeyAuaWQgPSBOV0xfRFNJX0NM S19DT1JFLCAucHJlc2VudCA9IHRydWUgfSwKKwl9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVj dCBvZl9kZXZpY2VfaWQgbndsX2RzaV9kdF9pZHNbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImZz bCxpbXg4bXEtbndsLWRzaSIsIC5kYXRhID0gJmlteDhtcV9kZXYsIH0sCisJeyAvKiBzZW50aW5l bCAqLyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbndsX2RzaV9kdF9pZHMpOworCitz dGF0aWMgY29uc3Qgc3RydWN0IHNvY19kZXZpY2VfYXR0cmlidXRlIG53bF9kc2lfcXVpcmtzX21h dGNoW10gPSB7CisJeyAuc29jX2lkID0gImkuTVg4TVEiLCAucmV2aXNpb24gPSAiMi4wIiwKKwkg IC5kYXRhID0gKHZvaWQgKikoRTExNDE4X0hTX01PREVfUVVJUksgfCBTUkNfUkVTRVRfUVVJUksp IH0sCisJeyAvKiBzZW50aW5lbC4gKi8gfSwKK307CisKK3N0YXRpYyBpbnQgbndsX2RzaV9wcm9i ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9 ICZwZGV2LT5kZXY7CisJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqb2ZfaWQgPSBvZl9tYXRj aF9kZXZpY2UobndsX2RzaV9kdF9pZHMsIGRldik7CisJY29uc3Qgc3RydWN0IG53bF9kc2lfcGxh dGZvcm1fZGF0YSAqcGRhdGEgPSBvZl9pZC0+ZGF0YTsKKwljb25zdCBzdHJ1Y3Qgc29jX2Rldmlj ZV9hdHRyaWJ1dGUgKmF0dHI7CisJc3RydWN0IG53bF9kc2kgKmRzaTsKKwlpbnQgcmV0OworCisJ ZHNpID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpkc2kpLCBHRlBfS0VSTkVMKTsKKwlpZiAo IWRzaSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkc2ktPmRldiA9IGRldjsKKwlkc2ktPnBkYXRh ID0gcGRhdGE7CisKKwlyZXQgPSBud2xfZHNpX3BhcnNlX2R0KGRzaSk7CisJaWYgKHJldCkKKwkJ cmV0dXJuIHJldDsKKworCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBkc2ktPmlycSwgbnds X2RzaV9pcnFfaGFuZGxlciwgMCwKKwkJCSAgICAgICBkZXZfbmFtZShkZXYpLCBkc2kpOworCWlm IChyZXQgPCAwKSB7CisJCURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgSVJR ICVkOiAlZFxuIiwgZHNpLT5pcnEsCisJCQkgICAgICByZXQpOworCQlyZXR1cm4gcmV0OworCX0K KworCWRzaS0+ZHNpX2hvc3Qub3BzID0gJm53bF9kc2lfaG9zdF9vcHM7CisJZHNpLT5kc2lfaG9z dC5kZXYgPSBkZXY7CisJcmV0ID0gbWlwaV9kc2lfaG9zdF9yZWdpc3RlcigmZHNpLT5kc2lfaG9z dCk7CisJaWYgKHJldCkgeworCQlEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byByZWdpc3Rl ciBNSVBJIGhvc3Q6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWF0dHIgPSBz b2NfZGV2aWNlX21hdGNoKG53bF9kc2lfcXVpcmtzX21hdGNoKTsKKwlpZiAoYXR0cikKKwkJZHNp LT5xdWlya3MgPSAodWludHB0cl90KWF0dHItPmRhdGE7CisKKwlkc2ktPmJyaWRnZS5kcml2ZXJf cHJpdmF0ZSA9IGRzaTsKKwlkc2ktPmJyaWRnZS5mdW5jcyA9ICZud2xfZHNpX2JyaWRnZV9mdW5j czsKKwlkc2ktPmJyaWRnZS5vZl9ub2RlID0gZGV2LT5vZl9ub2RlOworCWRzaS0+YnJpZGdlLnRp bWluZ3MgPSAmbndsX2RzaV90aW1pbmdzOworCisJZGV2X3NldF9kcnZkYXRhKGRldiwgZHNpKTsK KwlwbV9ydW50aW1lX2VuYWJsZShkZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG53 bF9kc2lfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG53 bF9kc2kgKmRzaSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJbWlwaV9kc2lfaG9z dF91bnJlZ2lzdGVyKCZkc2ktPmRzaV9ob3N0KTsKKwlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYt PmRldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG53 bF9kc2lfZHJpdmVyID0geworCS5wcm9iZQkJPSBud2xfZHNpX3Byb2JlLAorCS5yZW1vdmUJCT0g bndsX2RzaV9yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5vZl9tYXRjaF90YWJsZSA9IG53bF9k c2lfZHRfaWRzLAorCQkubmFtZQk9IERSVl9OQU1FLAorCX0sCit9OworCittb2R1bGVfcGxhdGZv cm1fZHJpdmVyKG53bF9kc2lfZHJpdmVyKTsKKworTU9EVUxFX0FVVEhPUigiTlhQIFNlbWljb25k dWN0b3IiKTsKK01PRFVMRV9BVVRIT1IoIlB1cmlzbSBTUEMiKTsKK01PRFVMRV9ERVNDUklQVElP TigiTm9ydGh3ZXN0IExvZ2ljIE1JUEktRFNJIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQ TCIpOyAvKiBHUEx2MiBvciBsYXRlciAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2Jy aWRnZS9ud2wtZHNpLmggYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL253bC1kc2kuaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmEyNDdhOGExMWM3YwotLS0gL2Rldi9u dWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbndsLWRzaS5oCkBAIC0wLDAgKzEsMTQ0 IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsgKi8KKy8qCisgKiBOV0wg TUlQSSBEU0kgaG9zdCBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgTlhQCisgKiBD b3B5cmlnaHQgKEMpIDIwMTkgUHVyaXNtIFNQQworICovCisjaWZuZGVmIF9fTldMX0RTSV9IX18K KyNkZWZpbmUgX19OV0xfRFNJX0hfXworCisvKiBEU0kgSE9TVCByZWdpc3RlcnMgKi8KKyNkZWZp bmUgTldMX0RTSV9DRkdfTlVNX0xBTkVTCQkJMHgwCisjZGVmaW5lIE5XTF9EU0lfQ0ZHX05PTkNP TlRJTlVPVVNfQ0xLCQkweDQKKyNkZWZpbmUgTldMX0RTSV9DRkdfVF9QUkUJCQkweDgKKyNkZWZp bmUgTldMX0RTSV9DRkdfVF9QT1NUCQkJMHhjCisjZGVmaW5lIE5XTF9EU0lfQ0ZHX1RYX0dBUAkJ CTB4MTAKKyNkZWZpbmUgTldMX0RTSV9DRkdfQVVUT0lOU0VSVF9FT1RQCQkweDE0CisjZGVmaW5l IE5XTF9EU0lfQ0ZHX0VYVFJBX0NNRFNfQUZURVJfRU9UUAkweDE4CisjZGVmaW5lIE5XTF9EU0lf Q0ZHX0hUWF9UT19DT1VOVAkJMHgxYworI2RlZmluZSBOV0xfRFNJX0NGR19MUlhfSF9UT19DT1VO VAkJMHgyMAorI2RlZmluZSBOV0xfRFNJX0NGR19CVEFfSF9UT19DT1VOVAkJMHgyNAorI2RlZmlu ZSBOV0xfRFNJX0NGR19UV0FLRVVQCQkJMHgyOAorI2RlZmluZSBOV0xfRFNJX0NGR19TVEFUVVNf T1VUCQkJMHgyYworI2RlZmluZSBOV0xfRFNJX1JYX0VSUk9SX1NUQVRVUwkJCTB4MzAKKworLyog RFNJIERQSSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgTldMX0RTSV9QSVhFTF9QQVlMT0FEX1NJWkUJ CTB4MjAwCisjZGVmaW5lIE5XTF9EU0lfUElYRUxfRklGT19TRU5EX0xFVkVMCQkweDIwNAorI2Rl ZmluZSBOV0xfRFNJX0lOVEVSRkFDRV9DT0xPUl9DT0RJTkcJCTB4MjA4CisjZGVmaW5lIE5XTF9E U0lfUElYRUxfRk9STUFUCQkJMHgyMGMKKyNkZWZpbmUgTldMX0RTSV9WU1lOQ19QT0xBUklUWQkJ CTB4MjEwCisjZGVmaW5lIE5XTF9EU0lfVlNZTkNfUE9MQVJJVFlfQUNUSVZFX0xPVwkwCisjZGVm aW5lIE5XTF9EU0lfVlNZTkNfUE9MQVJJVFlfQUNUSVZFX0hJR0gJQklUKDEpCisKKyNkZWZpbmUg TldMX0RTSV9IU1lOQ19QT0xBUklUWQkJCTB4MjE0CisjZGVmaW5lIE5XTF9EU0lfSFNZTkNfUE9M QVJJVFlfQUNUSVZFX0xPVwkwCisjZGVmaW5lIE5XTF9EU0lfSFNZTkNfUE9MQVJJVFlfQUNUSVZF X0hJR0gJQklUKDEpCisKKyNkZWZpbmUgTldMX0RTSV9WSURFT19NT0RFCQkJMHgyMTgKKyNkZWZp bmUgTldMX0RTSV9IRlAJCQkJMHgyMWMKKyNkZWZpbmUgTldMX0RTSV9IQlAJCQkJMHgyMjAKKyNk ZWZpbmUgTldMX0RTSV9IU0EJCQkJMHgyMjQKKyNkZWZpbmUgTldMX0RTSV9FTkFCTEVfTVVMVF9Q S1RTCQkweDIyOAorI2RlZmluZSBOV0xfRFNJX1ZCUAkJCQkweDIyYworI2RlZmluZSBOV0xfRFNJ X1ZGUAkJCQkweDIzMAorI2RlZmluZSBOV0xfRFNJX0JMTFBfTU9ERQkJCTB4MjM0CisjZGVmaW5l IE5XTF9EU0lfVVNFX05VTExfUEtUX0JMTFAJCTB4MjM4CisjZGVmaW5lIE5XTF9EU0lfVkFDVElW RQkJCQkweDIzYworI2RlZmluZSBOV0xfRFNJX1ZDCQkJCTB4MjQwCisKKy8qIERTSSBBUEIgUEtU IGNvbnRyb2wgKi8KKyNkZWZpbmUgTldMX0RTSV9UWF9QQVlMT0FECQkJMHgyODAKKyNkZWZpbmUg TldMX0RTSV9QS1RfQ09OVFJPTAkJCTB4Mjg0CisjZGVmaW5lIE5XTF9EU0lfU0VORF9QQUNLRVQJ CQkweDI4OAorI2RlZmluZSBOV0xfRFNJX1BLVF9TVEFUVVMJCQkweDI4YworI2RlZmluZSBOV0xf RFNJX1BLVF9GSUZPX1dSX0xFVkVMCQkweDI5MAorI2RlZmluZSBOV0xfRFNJX1BLVF9GSUZPX1JE X0xFVkVMCQkweDI5NAorI2RlZmluZSBOV0xfRFNJX1JYX1BBWUxPQUQJCQkweDI5OAorI2RlZmlu ZSBOV0xfRFNJX1JYX1BLVF9IRUFERVIJCQkweDI5YworCisvKiBEU0kgSVJRIGhhbmRsaW5nICov CisjZGVmaW5lIE5XTF9EU0lfSVJRX1NUQVRVUwkJCTB4MmEwCisjZGVmaW5lIE5XTF9EU0lfU01f Tk9UX0lETEUJCQlCSVQoMCkKKyNkZWZpbmUgTldMX0RTSV9UWF9QS1RfRE9ORQkJCUJJVCgxKQor I2RlZmluZSBOV0xfRFNJX0RQSFlfRElSRUNUSU9OCQkJQklUKDIpCisjZGVmaW5lIE5XTF9EU0lf VFhfRklGT19PVkZMVwkJCUJJVCgzKQorI2RlZmluZSBOV0xfRFNJX1RYX0ZJRk9fVURGTFcJCQlC SVQoNCkKKyNkZWZpbmUgTldMX0RTSV9SWF9GSUZPX09WRkxXCQkJQklUKDUpCisjZGVmaW5lIE5X TF9EU0lfUlhfRklGT19VREZMVwkJCUJJVCg2KQorI2RlZmluZSBOV0xfRFNJX1JYX1BLVF9IRFJf UkNWRAkJCUJJVCg3KQorI2RlZmluZSBOV0xfRFNJX1JYX1BLVF9QQVlMT0FEX0RBVEFfUkNWRAlC SVQoOCkKKyNkZWZpbmUgTldMX0RTSV9CVEFfVElNRU9VVAkJCUJJVCgyOSkKKyNkZWZpbmUgTldM X0RTSV9MUF9SWF9USU1FT1VUCQkJQklUKDMwKQorI2RlZmluZSBOV0xfRFNJX0hTX1RYX1RJTUVP VVQJCQlCSVQoMzEpCisKKyNkZWZpbmUgTldMX0RTSV9JUlFfU1RBVFVTMgkJCTB4MmE0CisjZGVm aW5lIE5XTF9EU0lfU0lOR0xFX0JJVF9FQ0NfRVJSCQlCSVQoMCkKKyNkZWZpbmUgTldMX0RTSV9N VUxUSV9CSVRfRUNDX0VSUgkJQklUKDEpCisjZGVmaW5lIE5XTF9EU0lfQ1JDX0VSUgkJCQlCSVQo MikKKworI2RlZmluZSBOV0xfRFNJX0lSUV9NQVNLCQkJMHgyYTgKKyNkZWZpbmUgTldMX0RTSV9T TV9OT1RfSURMRV9NQVNLCQlCSVQoMCkKKyNkZWZpbmUgTldMX0RTSV9UWF9QS1RfRE9ORV9NQVNL CQlCSVQoMSkKKyNkZWZpbmUgTldMX0RTSV9EUEhZX0RJUkVDVElPTl9NQVNLCQlCSVQoMikKKyNk ZWZpbmUgTldMX0RTSV9UWF9GSUZPX09WRkxXX01BU0sJCUJJVCgzKQorI2RlZmluZSBOV0xfRFNJ X1RYX0ZJRk9fVURGTFdfTUFTSwkJQklUKDQpCisjZGVmaW5lIE5XTF9EU0lfUlhfRklGT19PVkZM V19NQVNLCQlCSVQoNSkKKyNkZWZpbmUgTldMX0RTSV9SWF9GSUZPX1VERkxXX01BU0sJCUJJVCg2 KQorI2RlZmluZSBOV0xfRFNJX1JYX1BLVF9IRFJfUkNWRF9NQVNLCQlCSVQoNykKKyNkZWZpbmUg TldMX0RTSV9SWF9QS1RfUEFZTE9BRF9EQVRBX1JDVkRfTUFTSwlCSVQoOCkKKyNkZWZpbmUgTldM X0RTSV9CVEFfVElNRU9VVF9NQVNLCQlCSVQoMjkpCisjZGVmaW5lIE5XTF9EU0lfTFBfUlhfVElN RU9VVF9NQVNLCQlCSVQoMzApCisjZGVmaW5lIE5XTF9EU0lfSFNfVFhfVElNRU9VVF9NQVNLCQlC SVQoMzEpCisKKyNkZWZpbmUgTldMX0RTSV9JUlFfTUFTSzIJCQkweDJhYworI2RlZmluZSBOV0xf RFNJX1NJTkdMRV9CSVRfRUNDX0VSUl9NQVNLCQlCSVQoMCkKKyNkZWZpbmUgTldMX0RTSV9NVUxU SV9CSVRfRUNDX0VSUl9NQVNLCQlCSVQoMSkKKyNkZWZpbmUgTldMX0RTSV9DUkNfRVJSX01BU0sJ CQlCSVQoMikKKworLyoKKyAqIFBLVF9DT05UUk9MIGZvcm1hdDoKKyAqIFsxNTogMF0gLSB3b3Jk IGNvdW50CisgKiBbMTc6MTZdIC0gdmlydHVhbCBjaGFubmVsCisgKiBbMjM6MThdIC0gZGF0YSB0 eXBlCisgKiBbMjRdCSAgIC0gTFAgb3IgSFMgc2VsZWN0ICgwIC0gTFAsIDEgLSBIUykKKyAqIFsy NV0JICAgLSBwZXJmb3JtIEJUQSBhZnRlciBwYWNrZXQgaXMgc2VudAorICogWzI2XQkgICAtIHBl cmZvcm0gQlRBIG9ubHksIG5vIHBhY2tldCB0eAorICovCisjZGVmaW5lIE5XTF9EU0lfV0MoeCkJ CUZJRUxEX1BSRVAoR0VOTUFTSygxNSwgMCksICh4KSkKKyNkZWZpbmUgTldMX0RTSV9UWF9WQyh4 KQlGSUVMRF9QUkVQKEdFTk1BU0soMTcsIDE2KSwgKHgpKQorI2RlZmluZSBOV0xfRFNJX1RYX0RU KHgpCUZJRUxEX1BSRVAoR0VOTUFTSygyMywgMTgpLCAoeCkpCisjZGVmaW5lIE5XTF9EU0lfSFNf U0VMKHgpCUZJRUxEX1BSRVAoR0VOTUFTSygyNCwgMjQpLCAoeCkpCisjZGVmaW5lIE5XTF9EU0lf QlRBX1RYKHgpCUZJRUxEX1BSRVAoR0VOTUFTSygyNSwgMjUpLCAoeCkpCisjZGVmaW5lIE5XTF9E U0lfQlRBX05PX1RYKHgpCUZJRUxEX1BSRVAoR0VOTUFTSygyNiwgMjYpLCAoeCkpCisKKy8qCisg KiBSWF9QS1RfSEVBREVSIGZvcm1hdDoKKyAqIFsxNTogMF0gLSB3b3JkIGNvdW50CisgKiBbMjE6 MTZdIC0gZGF0YSB0eXBlCisgKiBbMjM6MjJdIC0gdmlydHVhbCBjaGFubmVsCisgKi8KKyNkZWZp bmUgTldMX0RTSV9SWF9EVCh4KQlGSUVMRF9HRVQoR0VOTUFTSygyMSwgMTYpLCAoeCkpCisjZGVm aW5lIE5XTF9EU0lfUlhfVkMoeCkJRklFTERfR0VUKEdFTk1BU0soMjMsIDIyKSwgKHgpKQorCisv KiBEU0kgVmlkZW8gbW9kZSAqLworI2RlZmluZSBOV0xfRFNJX1ZNX0JVUlNUX01PREVfV0lUSF9T WU5DX1BVTFNFUwkJMAorI2RlZmluZSBOV0xfRFNJX1ZNX05PTl9CVVJTVF9NT0RFX1dJVEhfU1lO Q19FVkVOVFMJQklUKDApCisjZGVmaW5lIE5XTF9EU0lfVk1fQlVSU1RfTU9ERQkJCQlCSVQoMSkK KworLyogKiBEUEkgY29sb3IgY29kaW5nICovCisjZGVmaW5lIE5XTF9EU0lfRFBJXzE2X0JJVF81 NjVfUEFDS0VECTAKKyNkZWZpbmUgTldMX0RTSV9EUElfMTZfQklUXzU2NV9BTElHTkVECTEKKyNk ZWZpbmUgTldMX0RTSV9EUElfMTZfQklUXzU2NV9TSElGVEVECTIKKyNkZWZpbmUgTldMX0RTSV9E UElfMThfQklUX1BBQ0tFRAkzCisjZGVmaW5lIE5XTF9EU0lfRFBJXzE4X0JJVF9BTElHTkVECTQK KyNkZWZpbmUgTldMX0RTSV9EUElfMjRfQklUCQk1CisKKy8qICogRFBJIFBpeGVsIGZvcm1hdCAq LworI2RlZmluZSBOV0xfRFNJX1BJWEVMX0ZPUk1BVF8xNiAgMAorI2RlZmluZSBOV0xfRFNJX1BJ WEVMX0ZPUk1BVF8xOCAgQklUKDApCisjZGVmaW5lIE5XTF9EU0lfUElYRUxfRk9STUFUXzE4TCBC SVQoMSkKKyNkZWZpbmUgTldMX0RTSV9QSVhFTF9GT1JNQVRfMjQgIChCSVQoMCkgfCBCSVQoMSkp CisKKyNlbmRpZiAvKiBfX05XTF9EU0lfSF9fICovCi0tIAoyLjIzLjAucmMxCgoKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwg bWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8v bGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK