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=-17.1 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=unavailable 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 CDA29C433EF for ; Fri, 10 Sep 2021 18:53:08 +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 9088A60F93 for ; Fri, 10 Sep 2021 18:53:08 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 9088A60F93 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=bootlin.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; 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:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=TCLtPQWskj5npm1zQHxncJYYvVTezHJVOTqaPpLSErE=; b=TAP7nYLGRQMyMJ yoRwySqJJAmK0EbxBGw/9RHtSdubuRZ0RJd47rfZTXtyOXXHDPGS1eUhRhZTGkNM0U1VKzKaNYyXr xBFX6klwaRQwnUaFF//iXQzzVjKPCPYPHV7V0C3loAqwX3dH/YcDRh9keOqnKqpyI1UdQaZ9MT4GI F43faLHpxgmZeC5edY9TXJ9pj5lzIoarMVF9QrP/4A4qJhb2lDtbjzLXm22znQWvsIS4piQ67e4bw CBbx8kntTU88iTHe9SalkAWqG7sZeR9ws3tl612LJcPdI1FeTIM23Aosnr8IhBiviVtTMktitSch/ 8TMGr3ALsZ76sDnpjf3Q==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mOle7-00DR2o-I9; Fri, 10 Sep 2021 18:53:07 +0000 Received: from relay10.mail.gandi.net ([217.70.178.230]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mOlU0-00DM4F-9E; Fri, 10 Sep 2021 18:42:51 +0000 Received: (Authenticated sender: paul.kocialkowski@bootlin.com) by relay10.mail.gandi.net (Postfix) with ESMTPSA id 1BC3E240004; Fri, 10 Sep 2021 18:42:37 +0000 (UTC) From: Paul Kocialkowski To: linux-media@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-kernel@vger.kernel.org, linux-phy@lists.infradead.org, linux-clk@vger.kernel.org, linux-staging@lists.linux.dev Cc: Yong Deng , Mauro Carvalho Chehab , Rob Herring , Maxime Ripard , Sakari Ailus , Hans Verkuil , Chen-Yu Tsai , Jernej Skrabec , Paul Kocialkowski , Greg Kroah-Hartman , Helen Koike , Laurent Pinchart , Thomas Petazzoni Subject: [PATCH 15/22] media: sunxi: Remove the sun6i-csi driver implementation Date: Fri, 10 Sep 2021 20:41:40 +0200 Message-Id: <20210910184147.336618-16-paul.kocialkowski@bootlin.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210910184147.336618-1-paul.kocialkowski@bootlin.com> References: <20210910184147.336618-1-paul.kocialkowski@bootlin.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210910_114240_972278_991C93BC X-CRM114-Status: GOOD ( 19.32 ) X-BeenThere: linux-phy@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux Phy Mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-phy" Errors-To: linux-phy-bounces+linux-phy=archiver.kernel.org@lists.infradead.org QXMgZGVzY3JpYmVkIGluIHRoZSBjb21taXQgYWRkaW5nIHN1cHBvcnQgZm9yIHRoZSBuZXcgc3Vu NmktY3NpIGRyaXZlciwKYSBjb21wbGV0ZSByZXdyaXRlIHdhcyBuZWNlc3NhcnkgdG8gc3VwcG9y dCB0aGUgQWxsd2lubmVyIEEzMSBJU1AgYXMKd2VsbCBhcyBmaXggYSBudW1iZXIgb2YgaXNzdWVz IHdpdGggdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uCgpGYXJld2VsbCBhbmQgdGhhbmtzIGZv ciBhbGwgdGhlIHBpeGVscyEKClNpZ25lZC1vZmYtYnk6IFBhdWwgS29jaWFsa293c2tpIDxwYXVs LmtvY2lhbGtvd3NraUBib290bGluLmNvbT4KLS0tCiAuLi4vbWVkaWEvcGxhdGZvcm0vc3VueGkv c3VuNmktY3NpL0tjb25maWcgICAgfCAgMTIgLQogLi4uL21lZGlhL3BsYXRmb3JtL3N1bnhpL3N1 bjZpLWNzaS9NYWtlZmlsZSAgIHwgICA0IC0KIC4uLi9wbGF0Zm9ybS9zdW54aS9zdW42aS1jc2kv c3VuNmlfY3NpLmMgICAgICB8IDkzNiAtLS0tLS0tLS0tLS0tLS0tLS0KIC4uLi9wbGF0Zm9ybS9z dW54aS9zdW42aS1jc2kvc3VuNmlfY3NpLmggICAgICB8IDEzOCAtLS0KIC4uLi9wbGF0Zm9ybS9z dW54aS9zdW42aS1jc2kvc3VuNmlfY3NpX3JlZy5oICB8IDE5NiAtLS0tCiAuLi4vcGxhdGZvcm0v c3VueGkvc3VuNmktY3NpL3N1bjZpX3ZpZGVvLmMgICAgfCA2ODMgLS0tLS0tLS0tLS0tLQogLi4u L3BsYXRmb3JtL3N1bnhpL3N1bjZpLWNzaS9zdW42aV92aWRlby5oICAgIHwgIDM4IC0KIDcgZmls ZXMgY2hhbmdlZCwgMjAwNyBkZWxldGlvbnMoLSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L21lZGlhL3BsYXRmb3JtL3N1bnhpL3N1bjZpLWNzaS9LY29uZmlnCiBkZWxldGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zdW54aS9zdW42aS1jc2kvTWFrZWZpbGUKIGRlbGV0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL3N1bnhpL3N1bjZpLWNzaS9zdW42 aV9jc2kuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc3VueGkv c3VuNmktY3NpL3N1bjZpX2NzaS5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9w bGF0Zm9ybS9zdW54aS9zdW42aS1jc2kvc3VuNmlfY3NpX3JlZy5oCiBkZWxldGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zdW54aS9zdW42aS1jc2kvc3VuNmlfdmlkZW8uYwog ZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc3VueGkvc3VuNmktY3Np L3N1bjZpX3ZpZGVvLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3N1bnhp L3N1bjZpLWNzaS9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zdW54aS9zdW42aS1j c2kvS2NvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTg2ZTNmYjNhODBkLi4w MDAwMDAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zdW54aS9zdW42aS1jc2kv S2NvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSMgU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEdQTC0yLjAtb25seQotY29uZmlnIFZJREVPX1NVTjZJX0NTSQotCXRyaXN0YXRl ICJBbGx3aW5uZXIgVjNzIENhbWVyYSBTZW5zb3IgSW50ZXJmYWNlIGRyaXZlciIKLQlkZXBlbmRz IG9uIFZJREVPX1Y0TDIgJiYgQ09NTU9OX0NMSyAgJiYgSEFTX0RNQQotCWRlcGVuZHMgb24gQVJD SF9TVU5YSSB8fCBDT01QSUxFX1RFU1QKLQlzZWxlY3QgTUVESUFfQ09OVFJPTExFUgotCXNlbGVj dCBWSURFT19WNEwyX1NVQkRFVl9BUEkKLQlzZWxlY3QgVklERU9CVUYyX0RNQV9DT05USUcKLQlz ZWxlY3QgUkVHTUFQX01NSU8KLQlzZWxlY3QgVjRMMl9GV05PREUKLQloZWxwCi0JICAgU3VwcG9y dCBmb3IgdGhlIEFsbHdpbm5lciBDYW1lcmEgU2Vuc29yIEludGVyZmFjZSBDb250cm9sbGVyIG9u IFYzcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc3VueGkvc3VuNmktY3Np L01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zdW54aS9zdW42aS1jc2kvTWFrZWZp bGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3ZTMxNTM0NzgwNC4uMDAwMDAwMDAw MDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc3VueGkvc3VuNmktY3NpL01ha2VmaWxl CisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBHUEwtMi4wLW9ubHkKLXN1bjZpLWNzaS15ICs9IHN1bjZpX3ZpZGVvLm8gc3VuNmlfY3NpLm8K LQotb2JqLSQoQ09ORklHX1ZJREVPX1NVTjZJX0NTSSkgKz0gc3VuNmktY3NpLm8KZGlmZiAtLWdp dCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc3VueGkvc3VuNmktY3NpL3N1bjZpX2NzaS5jIGIv ZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zdW54aS9zdW42aS1jc2kvc3VuNmlfY3NpLmMKZGVsZXRl ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3OTM1ZjFlOTU1NS4uMDAwMDAwMDAwMDAwCi0tLSBh L2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc3VueGkvc3VuNmktY3NpL3N1bjZpX2NzaS5jCisrKyAv ZGV2L251bGwKQEAgLTEsOTM2ICswLDAgQEAKLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBH UEwtMi4wKwotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMS0yMDE4IE1hZ2V3ZWxsIEVsZWN0cm9u aWNzIENvLiwgTHRkLiAoTmFuamluZykKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBBdXRo b3I6IFlvbmcgRGVuZyA8eW9uZy5kZW5nQG1hZ2V3ZWxsLmNvbT4KLSAqLwotCi0jaW5jbHVkZSA8 bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9k bWEtbWFwcGluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotI2luY2x1ZGUgPGxpbnV4L2Zz Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4K LSNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2lu Y2x1ZGUgPGxpbnV4L29mLmg+Ci0jaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+Ci0jaW5jbHVk ZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5o PgotI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgotI2luY2x1ZGUgPGxpbnV4L3Jlc2V0Lmg+Ci0j aW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9zaXplcy5oPgotI2luY2x1 ZGUgPGxpbnV4L3NsYWIuaD4KLQotI2luY2x1ZGUgInN1bjZpX2NzaS5oIgotI2luY2x1ZGUgInN1 bjZpX2NzaV9yZWcuaCIKLQotI2RlZmluZSBNT0RVTEVfTkFNRQkic3VuNmktY3NpIgotCi1zdHJ1 Y3Qgc3VuNmlfY3NpX2RldiB7Ci0Jc3RydWN0IHN1bjZpX2NzaQkJY3NpOwotCXN0cnVjdCBkZXZp Y2UJCQkqZGV2OwotCi0Jc3RydWN0IHJlZ21hcAkJCSpyZWdtYXA7Ci0Jc3RydWN0IGNsawkJCSpj bGtfbW9kOwotCXN0cnVjdCBjbGsJCQkqY2xrX3JhbTsKLQlzdHJ1Y3QgcmVzZXRfY29udHJvbAkJ KnJzdGNfYnVzOwotCi0JaW50CQkJCXBsYW5hcl9vZmZzZXRbM107Ci19OwotCi1zdGF0aWMgaW5s aW5lIHN0cnVjdCBzdW42aV9jc2lfZGV2ICpzdW42aV9jc2lfdG9fZGV2KHN0cnVjdCBzdW42aV9j c2kgKmNzaSkKLXsKLQlyZXR1cm4gY29udGFpbmVyX29mKGNzaSwgc3RydWN0IHN1bjZpX2NzaV9k ZXYsIGNzaSk7Ci19Ci0KLS8qIFRPRE8gYWRkIDEwJjEyIGJpdCBZVVYsIFJHQiBzdXBwb3J0ICov Ci1ib29sIHN1bjZpX2NzaV9pc19mb3JtYXRfc3VwcG9ydGVkKHN0cnVjdCBzdW42aV9jc2kgKmNz aSwKLQkJCQkgICB1MzIgcGl4Zm9ybWF0LCB1MzIgbWJ1c19jb2RlKQotewotCXN0cnVjdCBzdW42 aV9jc2lfZGV2ICpzZGV2ID0gc3VuNmlfY3NpX3RvX2Rldihjc2kpOwotCi0JLyoKLQkgKiBTb21l IHZpZGVvIHJlY2VpdmVycyBoYXZlIHRoZSBhYmlsaXR5IHRvIGJlIGNvbXBhdGlibGUgd2l0aAot CSAqIDhiaXQgYW5kIDE2Yml0IGJ1cyB3aWR0aC4KLQkgKiBJZGVudGlmeSB0aGUgbWVkaWEgYnVz IGZvcm1hdCBmcm9tIGRldmljZSB0cmVlLgotCSAqLwotCWlmICgoc2Rldi0+Y3NpLnY0bDJfZXAu YnVzX3R5cGUgPT0gVjRMMl9NQlVTX1BBUkFMTEVMCi0JICAgICB8fCBzZGV2LT5jc2kudjRsMl9l cC5idXNfdHlwZSA9PSBWNEwyX01CVVNfQlQ2NTYpCi0JICAgICAmJiBzZGV2LT5jc2kudjRsMl9l cC5idXMucGFyYWxsZWwuYnVzX3dpZHRoID09IDE2KSB7Ci0JCXN3aXRjaCAocGl4Zm9ybWF0KSB7 Ci0JCWNhc2UgVjRMMl9QSVhfRk1UX0hNMTI6Ci0JCWNhc2UgVjRMMl9QSVhfRk1UX05WMTI6Ci0J CWNhc2UgVjRMMl9QSVhfRk1UX05WMjE6Ci0JCWNhc2UgVjRMMl9QSVhfRk1UX05WMTY6Ci0JCWNh c2UgVjRMMl9QSVhfRk1UX05WNjE6Ci0JCWNhc2UgVjRMMl9QSVhfRk1UX1lVVjQyMDoKLQkJY2Fz ZSBWNEwyX1BJWF9GTVRfWVZVNDIwOgotCQljYXNlIFY0TDJfUElYX0ZNVF9ZVVY0MjJQOgotCQkJ c3dpdGNoIChtYnVzX2NvZGUpIHsKLQkJCWNhc2UgTUVESUFfQlVTX0ZNVF9VWVZZOF8xWDE2Ogot CQkJY2FzZSBNRURJQV9CVVNfRk1UX1ZZVVk4XzFYMTY6Ci0JCQljYXNlIE1FRElBX0JVU19GTVRf WVVZVjhfMVgxNjoKLQkJCWNhc2UgTUVESUFfQlVTX0ZNVF9ZVllVOF8xWDE2OgotCQkJCXJldHVy biB0cnVlOwotCQkJZGVmYXVsdDoKLQkJCQlkZXZfZGJnKHNkZXYtPmRldiwgIlVuc3VwcG9ydGVk IG1idXMgY29kZTogMHgleFxuIiwKLQkJCQkJbWJ1c19jb2RlKTsKLQkJCQlicmVhazsKLQkJCX0K LQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJZGV2X2RiZyhzZGV2LT5kZXYsICJVbnN1cHBvcnRl ZCBwaXhmb3JtYXQ6IDB4JXhcbiIsCi0JCQkJcGl4Zm9ybWF0KTsKLQkJCWJyZWFrOwotCQl9Ci0J CXJldHVybiBmYWxzZTsKLQl9Ci0KLQlzd2l0Y2ggKHBpeGZvcm1hdCkgewotCWNhc2UgVjRMMl9Q SVhfRk1UX1NCR0dSODoKLQkJcmV0dXJuIChtYnVzX2NvZGUgPT0gTUVESUFfQlVTX0ZNVF9TQkdH UjhfMVg4KTsKLQljYXNlIFY0TDJfUElYX0ZNVF9TR0JSRzg6Ci0JCXJldHVybiAobWJ1c19jb2Rl ID09IE1FRElBX0JVU19GTVRfU0dCUkc4XzFYOCk7Ci0JY2FzZSBWNEwyX1BJWF9GTVRfU0dSQkc4 OgotCQlyZXR1cm4gKG1idXNfY29kZSA9PSBNRURJQV9CVVNfRk1UX1NHUkJHOF8xWDgpOwotCWNh c2UgVjRMMl9QSVhfRk1UX1NSR0dCODoKLQkJcmV0dXJuIChtYnVzX2NvZGUgPT0gTUVESUFfQlVT X0ZNVF9TUkdHQjhfMVg4KTsKLQljYXNlIFY0TDJfUElYX0ZNVF9TQkdHUjEwOgotCQlyZXR1cm4g KG1idXNfY29kZSA9PSBNRURJQV9CVVNfRk1UX1NCR0dSMTBfMVgxMCk7Ci0JY2FzZSBWNEwyX1BJ WF9GTVRfU0dCUkcxMDoKLQkJcmV0dXJuIChtYnVzX2NvZGUgPT0gTUVESUFfQlVTX0ZNVF9TR0JS RzEwXzFYMTApOwotCWNhc2UgVjRMMl9QSVhfRk1UX1NHUkJHMTA6Ci0JCXJldHVybiAobWJ1c19j b2RlID09IE1FRElBX0JVU19GTVRfU0dSQkcxMF8xWDEwKTsKLQljYXNlIFY0TDJfUElYX0ZNVF9T UkdHQjEwOgotCQlyZXR1cm4gKG1idXNfY29kZSA9PSBNRURJQV9CVVNfRk1UX1NSR0dCMTBfMVgx MCk7Ci0JY2FzZSBWNEwyX1BJWF9GTVRfU0JHR1IxMjoKLQkJcmV0dXJuIChtYnVzX2NvZGUgPT0g TUVESUFfQlVTX0ZNVF9TQkdHUjEyXzFYMTIpOwotCWNhc2UgVjRMMl9QSVhfRk1UX1NHQlJHMTI6 Ci0JCXJldHVybiAobWJ1c19jb2RlID09IE1FRElBX0JVU19GTVRfU0dCUkcxMl8xWDEyKTsKLQlj YXNlIFY0TDJfUElYX0ZNVF9TR1JCRzEyOgotCQlyZXR1cm4gKG1idXNfY29kZSA9PSBNRURJQV9C VVNfRk1UX1NHUkJHMTJfMVgxMik7Ci0JY2FzZSBWNEwyX1BJWF9GTVRfU1JHR0IxMjoKLQkJcmV0 dXJuIChtYnVzX2NvZGUgPT0gTUVESUFfQlVTX0ZNVF9TUkdHQjEyXzFYMTIpOwotCi0JY2FzZSBW NEwyX1BJWF9GTVRfWVVZVjoKLQkJcmV0dXJuIChtYnVzX2NvZGUgPT0gTUVESUFfQlVTX0ZNVF9Z VVlWOF8yWDgpOwotCWNhc2UgVjRMMl9QSVhfRk1UX1lWWVU6Ci0JCXJldHVybiAobWJ1c19jb2Rl ID09IE1FRElBX0JVU19GTVRfWVZZVThfMlg4KTsKLQljYXNlIFY0TDJfUElYX0ZNVF9VWVZZOgot CQlyZXR1cm4gKG1idXNfY29kZSA9PSBNRURJQV9CVVNfRk1UX1VZVlk4XzJYOCk7Ci0JY2FzZSBW NEwyX1BJWF9GTVRfVllVWToKLQkJcmV0dXJuIChtYnVzX2NvZGUgPT0gTUVESUFfQlVTX0ZNVF9W WVVZOF8yWDgpOwotCi0JY2FzZSBWNEwyX1BJWF9GTVRfSE0xMjoKLQljYXNlIFY0TDJfUElYX0ZN VF9OVjEyOgotCWNhc2UgVjRMMl9QSVhfRk1UX05WMjE6Ci0JY2FzZSBWNEwyX1BJWF9GTVRfTlYx NjoKLQljYXNlIFY0TDJfUElYX0ZNVF9OVjYxOgotCWNhc2UgVjRMMl9QSVhfRk1UX1lVVjQyMDoK LQljYXNlIFY0TDJfUElYX0ZNVF9ZVlU0MjA6Ci0JY2FzZSBWNEwyX1BJWF9GTVRfWVVWNDIyUDoK LQkJc3dpdGNoIChtYnVzX2NvZGUpIHsKLQkJY2FzZSBNRURJQV9CVVNfRk1UX1VZVlk4XzJYODoK LQkJY2FzZSBNRURJQV9CVVNfRk1UX1ZZVVk4XzJYODoKLQkJY2FzZSBNRURJQV9CVVNfRk1UX1lV WVY4XzJYODoKLQkJY2FzZSBNRURJQV9CVVNfRk1UX1lWWVU4XzJYODoKLQkJCXJldHVybiB0cnVl OwotCQlkZWZhdWx0OgotCQkJZGV2X2RiZyhzZGV2LT5kZXYsICJVbnN1cHBvcnRlZCBtYnVzIGNv ZGU6IDB4JXhcbiIsCi0JCQkJbWJ1c19jb2RlKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWJyZWFrOwot Ci0JY2FzZSBWNEwyX1BJWF9GTVRfUkdCNTY1OgotCQlyZXR1cm4gKG1idXNfY29kZSA9PSBNRURJ QV9CVVNfRk1UX1JHQjU2NV8yWDhfTEUpOwotCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjU2NVg6Ci0J CXJldHVybiAobWJ1c19jb2RlID09IE1FRElBX0JVU19GTVRfUkdCNTY1XzJYOF9CRSk7Ci0KLQlj YXNlIFY0TDJfUElYX0ZNVF9KUEVHOgotCQlyZXR1cm4gKG1idXNfY29kZSA9PSBNRURJQV9CVVNf Rk1UX0pQRUdfMVg4KTsKLQotCWRlZmF1bHQ6Ci0JCWRldl9kYmcoc2Rldi0+ZGV2LCAiVW5zdXBw b3J0ZWQgcGl4Zm9ybWF0OiAweCV4XG4iLCBwaXhmb3JtYXQpOwotCQlicmVhazsKLQl9Ci0KLQly ZXR1cm4gZmFsc2U7Ci19Ci0KLWludCBzdW42aV9jc2lfc2V0X3Bvd2VyKHN0cnVjdCBzdW42aV9j c2kgKmNzaSwgYm9vbCBlbmFibGUpCi17Ci0Jc3RydWN0IHN1bjZpX2NzaV9kZXYgKnNkZXYgPSBz dW42aV9jc2lfdG9fZGV2KGNzaSk7Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gc2Rldi0+ZGV2Owot CXN0cnVjdCByZWdtYXAgKnJlZ21hcCA9IHNkZXYtPnJlZ21hcDsKLQlpbnQgcmV0OwotCi0JaWYg KCFlbmFibGUpIHsKLQkJcmVnbWFwX3VwZGF0ZV9iaXRzKHJlZ21hcCwgQ1NJX0VOX1JFRywgQ1NJ X0VOX0NTSV9FTiwgMCk7Ci0KLQkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHNkZXYtPmNsa19yYW0p OwotCQlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUoZGV2LT5vZl9ub2RlLAotCQkJCQkgICAg ImFsbHdpbm5lcixzdW41MGktYTY0LWNzaSIpKQotCQkJY2xrX3JhdGVfZXhjbHVzaXZlX3B1dChz ZGV2LT5jbGtfbW9kKTsKLQkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHNkZXYtPmNsa19tb2QpOwot CQlyZXNldF9jb250cm9sX2Fzc2VydChzZGV2LT5yc3RjX2J1cyk7Ci0JCXJldHVybiAwOwotCX0K LQotCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShzZGV2LT5jbGtfbW9kKTsKLQlpZiAocmV0KSB7 Ci0JCWRldl9lcnIoc2Rldi0+ZGV2LCAiRW5hYmxlIGNzaSBjbGsgZXJyICVkXG4iLCByZXQpOwot CQlyZXR1cm4gcmV0OwotCX0KLQotCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShkZXYtPm9m X25vZGUsICJhbGx3aW5uZXIsc3VuNTBpLWE2NC1jc2kiKSkKLQkJY2xrX3NldF9yYXRlX2V4Y2x1 c2l2ZShzZGV2LT5jbGtfbW9kLCAzMDAwMDAwMDApOwotCi0JcmV0ID0gY2xrX3ByZXBhcmVfZW5h YmxlKHNkZXYtPmNsa19yYW0pOwotCWlmIChyZXQpIHsKLQkJZGV2X2VycihzZGV2LT5kZXYsICJF bmFibGUgY2xrX2RyYW1fY3NpIGNsayBlcnIgJWRcbiIsIHJldCk7Ci0JCWdvdG8gY2xrX21vZF9k aXNhYmxlOwotCX0KLQotCXJldCA9IHJlc2V0X2NvbnRyb2xfZGVhc3NlcnQoc2Rldi0+cnN0Y19i dXMpOwotCWlmIChyZXQpIHsKLQkJZGV2X2VycihzZGV2LT5kZXYsICJyZXNldCBlcnIgJWRcbiIs IHJldCk7Ci0JCWdvdG8gY2xrX3JhbV9kaXNhYmxlOwotCX0KLQotCXJlZ21hcF91cGRhdGVfYml0 cyhyZWdtYXAsIENTSV9FTl9SRUcsIENTSV9FTl9DU0lfRU4sIENTSV9FTl9DU0lfRU4pOwotCi0J cmV0dXJuIDA7Ci0KLWNsa19yYW1fZGlzYWJsZToKLQljbGtfZGlzYWJsZV91bnByZXBhcmUoc2Rl di0+Y2xrX3JhbSk7Ci1jbGtfbW9kX2Rpc2FibGU6Ci0JaWYgKG9mX2RldmljZV9pc19jb21wYXRp YmxlKGRldi0+b2Zfbm9kZSwgImFsbHdpbm5lcixzdW41MGktYTY0LWNzaSIpKQotCQljbGtfcmF0 ZV9leGNsdXNpdmVfcHV0KHNkZXYtPmNsa19tb2QpOwotCWNsa19kaXNhYmxlX3VucHJlcGFyZShz ZGV2LT5jbGtfbW9kKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZW51bSBjc2lfaW5wdXRf Zm10IGdldF9jc2lfaW5wdXRfZm9ybWF0KHN0cnVjdCBzdW42aV9jc2lfZGV2ICpzZGV2LAotCQkJ CQkgICAgICAgdTMyIG1idXNfY29kZSwgdTMyIHBpeGZvcm1hdCkKLXsKLQkvKiBub24tWVVWICov Ci0JaWYgKChtYnVzX2NvZGUgJiAweEYwMDApICE9IDB4MjAwMCkKLQkJcmV0dXJuIENTSV9JTlBV VF9GT1JNQVRfUkFXOwotCi0Jc3dpdGNoIChwaXhmb3JtYXQpIHsKLQljYXNlIFY0TDJfUElYX0ZN VF9ZVVlWOgotCWNhc2UgVjRMMl9QSVhfRk1UX1lWWVU6Ci0JY2FzZSBWNEwyX1BJWF9GTVRfVVlW WToKLQljYXNlIFY0TDJfUElYX0ZNVF9WWVVZOgotCQlyZXR1cm4gQ1NJX0lOUFVUX0ZPUk1BVF9S QVc7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0JLyogbm90IHN1cHBvcnQgWVVWNDIwIGlu cHV0IGZvcm1hdCB5ZXQgKi8KLQlkZXZfZGJnKHNkZXYtPmRldiwgIlNlbGVjdCBZVVY0MjIgYXMg ZGVmYXVsdCBpbnB1dCBmb3JtYXQgb2YgQ1NJLlxuIik7Ci0JcmV0dXJuIENTSV9JTlBVVF9GT1JN QVRfWVVWNDIyOwotfQotCi1zdGF0aWMgZW51bSBjc2lfb3V0cHV0X2ZtdCBnZXRfY3NpX291dHB1 dF9mb3JtYXQoc3RydWN0IHN1bjZpX2NzaV9kZXYgKnNkZXYsCi0JCQkJCQkgdTMyIHBpeGZvcm1h dCwgdTMyIGZpZWxkKQotewotCWJvb2wgYnVmX2ludGVybGFjZWQgPSBmYWxzZTsKLQotCWlmIChm aWVsZCA9PSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQKLQkgICAgfHwgZmllbGQgPT0gVjRMMl9GSUVM RF9JTlRFUkxBQ0VEX1RCCi0JICAgIHx8IGZpZWxkID09IFY0TDJfRklFTERfSU5URVJMQUNFRF9C VCkKLQkJYnVmX2ludGVybGFjZWQgPSB0cnVlOwotCi0Jc3dpdGNoIChwaXhmb3JtYXQpIHsKLQlj YXNlIFY0TDJfUElYX0ZNVF9TQkdHUjg6Ci0JY2FzZSBWNEwyX1BJWF9GTVRfU0dCUkc4OgotCWNh c2UgVjRMMl9QSVhfRk1UX1NHUkJHODoKLQljYXNlIFY0TDJfUElYX0ZNVF9TUkdHQjg6Ci0JCXJl dHVybiBidWZfaW50ZXJsYWNlZCA/IENTSV9GUkFNRV9SQVdfOCA6IENTSV9GSUVMRF9SQVdfODsK LQljYXNlIFY0TDJfUElYX0ZNVF9TQkdHUjEwOgotCWNhc2UgVjRMMl9QSVhfRk1UX1NHQlJHMTA6 Ci0JY2FzZSBWNEwyX1BJWF9GTVRfU0dSQkcxMDoKLQljYXNlIFY0TDJfUElYX0ZNVF9TUkdHQjEw OgotCQlyZXR1cm4gYnVmX2ludGVybGFjZWQgPyBDU0lfRlJBTUVfUkFXXzEwIDogQ1NJX0ZJRUxE X1JBV18xMDsKLQljYXNlIFY0TDJfUElYX0ZNVF9TQkdHUjEyOgotCWNhc2UgVjRMMl9QSVhfRk1U X1NHQlJHMTI6Ci0JY2FzZSBWNEwyX1BJWF9GTVRfU0dSQkcxMjoKLQljYXNlIFY0TDJfUElYX0ZN VF9TUkdHQjEyOgotCQlyZXR1cm4gYnVmX2ludGVybGFjZWQgPyBDU0lfRlJBTUVfUkFXXzEyIDog Q1NJX0ZJRUxEX1JBV18xMjsKLQotCWNhc2UgVjRMMl9QSVhfRk1UX1lVWVY6Ci0JY2FzZSBWNEwy X1BJWF9GTVRfWVZZVToKLQljYXNlIFY0TDJfUElYX0ZNVF9VWVZZOgotCWNhc2UgVjRMMl9QSVhf Rk1UX1ZZVVk6Ci0JCXJldHVybiBidWZfaW50ZXJsYWNlZCA/IENTSV9GUkFNRV9SQVdfOCA6IENT SV9GSUVMRF9SQVdfODsKLQotCWNhc2UgVjRMMl9QSVhfRk1UX0hNMTI6Ci0JCXJldHVybiBidWZf aW50ZXJsYWNlZCA/IENTSV9GUkFNRV9NQl9ZVVY0MjAgOgotCQkJCQlDU0lfRklFTERfTUJfWVVW NDIwOwotCWNhc2UgVjRMMl9QSVhfRk1UX05WMTI6Ci0JY2FzZSBWNEwyX1BJWF9GTVRfTlYyMToK LQkJcmV0dXJuIGJ1Zl9pbnRlcmxhY2VkID8gQ1NJX0ZSQU1FX1VWX0NCX1lVVjQyMCA6Ci0JCQkJ CUNTSV9GSUVMRF9VVl9DQl9ZVVY0MjA7Ci0JY2FzZSBWNEwyX1BJWF9GTVRfWVVWNDIwOgotCWNh c2UgVjRMMl9QSVhfRk1UX1lWVTQyMDoKLQkJcmV0dXJuIGJ1Zl9pbnRlcmxhY2VkID8gQ1NJX0ZS QU1FX1BMQU5BUl9ZVVY0MjAgOgotCQkJCQlDU0lfRklFTERfUExBTkFSX1lVVjQyMDsKLQljYXNl IFY0TDJfUElYX0ZNVF9OVjE2OgotCWNhc2UgVjRMMl9QSVhfRk1UX05WNjE6Ci0JCXJldHVybiBi dWZfaW50ZXJsYWNlZCA/IENTSV9GUkFNRV9VVl9DQl9ZVVY0MjIgOgotCQkJCQlDU0lfRklFTERf VVZfQ0JfWVVWNDIyOwotCWNhc2UgVjRMMl9QSVhfRk1UX1lVVjQyMlA6Ci0JCXJldHVybiBidWZf aW50ZXJsYWNlZCA/IENTSV9GUkFNRV9QTEFOQVJfWVVWNDIyIDoKLQkJCQkJQ1NJX0ZJRUxEX1BM QU5BUl9ZVVY0MjI7Ci0KLQljYXNlIFY0TDJfUElYX0ZNVF9SR0I1NjU6Ci0JY2FzZSBWNEwyX1BJ WF9GTVRfUkdCNTY1WDoKLQkJcmV0dXJuIGJ1Zl9pbnRlcmxhY2VkID8gQ1NJX0ZSQU1FX1JHQjU2 NSA6IENTSV9GSUVMRF9SR0I1NjU7Ci0KLQljYXNlIFY0TDJfUElYX0ZNVF9KUEVHOgotCQlyZXR1 cm4gYnVmX2ludGVybGFjZWQgPyBDU0lfRlJBTUVfUkFXXzggOiBDU0lfRklFTERfUkFXXzg7Ci0K LQlkZWZhdWx0OgotCQlkZXZfd2FybihzZGV2LT5kZXYsICJVbnN1cHBvcnRlZCBwaXhmb3JtYXQ6 IDB4JXhcbiIsIHBpeGZvcm1hdCk7Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiBDU0lfRklFTERf UkFXXzg7Ci19Ci0KLXN0YXRpYyBlbnVtIGNzaV9pbnB1dF9zZXEgZ2V0X2NzaV9pbnB1dF9zZXEo c3RydWN0IHN1bjZpX2NzaV9kZXYgKnNkZXYsCi0JCQkJCSAgICB1MzIgbWJ1c19jb2RlLCB1MzIg cGl4Zm9ybWF0KQotewotCS8qIElucHV0IHNlcXVlbmNlIGRvZXMgbm90IGFwcGx5IHRvIG5vbi1Z VVYgZm9ybWF0cyAqLwotCWlmICgobWJ1c19jb2RlICYgMHhGMDAwKSAhPSAweDIwMDApCi0JCXJl dHVybiAwOwotCi0Jc3dpdGNoIChwaXhmb3JtYXQpIHsKLQljYXNlIFY0TDJfUElYX0ZNVF9ITTEy OgotCWNhc2UgVjRMMl9QSVhfRk1UX05WMTI6Ci0JY2FzZSBWNEwyX1BJWF9GTVRfTlYxNjoKLQlj YXNlIFY0TDJfUElYX0ZNVF9ZVVY0MjA6Ci0JY2FzZSBWNEwyX1BJWF9GTVRfWVVWNDIyUDoKLQkJ c3dpdGNoIChtYnVzX2NvZGUpIHsKLQkJY2FzZSBNRURJQV9CVVNfRk1UX1VZVlk4XzJYODoKLQkJ Y2FzZSBNRURJQV9CVVNfRk1UX1VZVlk4XzFYMTY6Ci0JCQlyZXR1cm4gQ1NJX0lOUFVUX1NFUV9V WVZZOwotCQljYXNlIE1FRElBX0JVU19GTVRfVllVWThfMlg4OgotCQljYXNlIE1FRElBX0JVU19G TVRfVllVWThfMVgxNjoKLQkJCXJldHVybiBDU0lfSU5QVVRfU0VRX1ZZVVk7Ci0JCWNhc2UgTUVE SUFfQlVTX0ZNVF9ZVVlWOF8yWDg6Ci0JCWNhc2UgTUVESUFfQlVTX0ZNVF9ZVVlWOF8xWDE2Ogot CQkJcmV0dXJuIENTSV9JTlBVVF9TRVFfWVVZVjsKLQkJY2FzZSBNRURJQV9CVVNfRk1UX1lWWVU4 XzFYMTY6Ci0JCWNhc2UgTUVESUFfQlVTX0ZNVF9ZVllVOF8yWDg6Ci0JCQlyZXR1cm4gQ1NJX0lO UFVUX1NFUV9ZVllVOwotCQlkZWZhdWx0OgotCQkJZGV2X3dhcm4oc2Rldi0+ZGV2LCAiVW5zdXBw b3J0ZWQgbWJ1cyBjb2RlOiAweCV4XG4iLAotCQkJCSBtYnVzX2NvZGUpOwotCQkJYnJlYWs7Ci0J CX0KLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX1BJWF9GTVRfTlYyMToKLQljYXNlIFY0TDJfUElYX0ZN VF9OVjYxOgotCWNhc2UgVjRMMl9QSVhfRk1UX1lWVTQyMDoKLQkJc3dpdGNoIChtYnVzX2NvZGUp IHsKLQkJY2FzZSBNRURJQV9CVVNfRk1UX1VZVlk4XzJYODoKLQkJY2FzZSBNRURJQV9CVVNfRk1U X1VZVlk4XzFYMTY6Ci0JCQlyZXR1cm4gQ1NJX0lOUFVUX1NFUV9WWVVZOwotCQljYXNlIE1FRElB X0JVU19GTVRfVllVWThfMlg4OgotCQljYXNlIE1FRElBX0JVU19GTVRfVllVWThfMVgxNjoKLQkJ CXJldHVybiBDU0lfSU5QVVRfU0VRX1VZVlk7Ci0JCWNhc2UgTUVESUFfQlVTX0ZNVF9ZVVlWOF8y WDg6Ci0JCWNhc2UgTUVESUFfQlVTX0ZNVF9ZVVlWOF8xWDE2OgotCQkJcmV0dXJuIENTSV9JTlBV VF9TRVFfWVZZVTsKLQkJY2FzZSBNRURJQV9CVVNfRk1UX1lWWVU4XzFYMTY6Ci0JCWNhc2UgTUVE SUFfQlVTX0ZNVF9ZVllVOF8yWDg6Ci0JCQlyZXR1cm4gQ1NJX0lOUFVUX1NFUV9ZVVlWOwotCQlk ZWZhdWx0OgotCQkJZGV2X3dhcm4oc2Rldi0+ZGV2LCAiVW5zdXBwb3J0ZWQgbWJ1cyBjb2RlOiAw eCV4XG4iLAotCQkJCSBtYnVzX2NvZGUpOwotCQkJYnJlYWs7Ci0JCX0KLQkJYnJlYWs7Ci0KLQlj YXNlIFY0TDJfUElYX0ZNVF9ZVVlWOgotCQlyZXR1cm4gQ1NJX0lOUFVUX1NFUV9ZVVlWOwotCi0J ZGVmYXVsdDoKLQkJZGV2X3dhcm4oc2Rldi0+ZGV2LCAiVW5zdXBwb3J0ZWQgcGl4Zm9ybWF0OiAw eCV4LCBkZWZhdWx0aW5nIHRvIFlVWVZcbiIsCi0JCQkgcGl4Zm9ybWF0KTsKLQkJYnJlYWs7Ci0J fQotCi0JcmV0dXJuIENTSV9JTlBVVF9TRVFfWVVZVjsKLX0KLQotc3RhdGljIHZvaWQgc3VuNmlf Y3NpX3NldHVwX2J1cyhzdHJ1Y3Qgc3VuNmlfY3NpX2RldiAqc2RldikKLXsKLQlzdHJ1Y3QgdjRs Ml9md25vZGVfZW5kcG9pbnQgKmVuZHBvaW50ID0gJnNkZXYtPmNzaS52NGwyX2VwOwotCXN0cnVj dCBzdW42aV9jc2kgKmNzaSA9ICZzZGV2LT5jc2k7Ci0JdW5zaWduZWQgY2hhciBidXNfd2lkdGg7 Ci0JdTMyIGZsYWdzOwotCXUzMiBjZmc7Ci0JYm9vbCBpbnB1dF9pbnRlcmxhY2VkID0gZmFsc2U7 Ci0KLQlpZiAoY3NpLT5jb25maWcuZmllbGQgPT0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VECi0JICAg IHx8IGNzaS0+Y29uZmlnLmZpZWxkID09IFY0TDJfRklFTERfSU5URVJMQUNFRF9UQgotCSAgICB8 fCBjc2ktPmNvbmZpZy5maWVsZCA9PSBWNEwyX0ZJRUxEX0lOVEVSTEFDRURfQlQpCi0JCWlucHV0 X2ludGVybGFjZWQgPSB0cnVlOwotCi0JYnVzX3dpZHRoID0gZW5kcG9pbnQtPmJ1cy5wYXJhbGxl bC5idXNfd2lkdGg7Ci0KLQlyZWdtYXBfcmVhZChzZGV2LT5yZWdtYXAsIENTSV9JRl9DRkdfUkVH LCAmY2ZnKTsKLQotCWNmZyAmPSB+KENTSV9JRl9DRkdfQ1NJX0lGX01BU0sgfCBDU0lfSUZfQ0ZH X01JUElfSUZfTUFTSyB8Ci0JCSBDU0lfSUZfQ0ZHX0lGX0RBVEFfV0lEVEhfTUFTSyB8Ci0JCSBD U0lfSUZfQ0ZHX0NMS19QT0xfTUFTSyB8IENTSV9JRl9DRkdfVlJFRl9QT0xfTUFTSyB8Ci0JCSBD U0lfSUZfQ0ZHX0hSRUZfUE9MX01BU0sgfCBDU0lfSUZfQ0ZHX0ZJRUxEX01BU0sgfAotCQkgQ1NJ X0lGX0NGR19TUkNfVFlQRV9NQVNLKTsKLQotCWlmIChpbnB1dF9pbnRlcmxhY2VkKQotCQljZmcg fD0gQ1NJX0lGX0NGR19TUkNfVFlQRV9JTlRFUkxBQ0VEOwotCWVsc2UKLQkJY2ZnIHw9IENTSV9J Rl9DRkdfU1JDX1RZUEVfUFJPR1JFU1NFRDsKLQotCXN3aXRjaCAoZW5kcG9pbnQtPmJ1c190eXBl KSB7Ci0JY2FzZSBWNEwyX01CVVNfUEFSQUxMRUw6Ci0JCWNmZyB8PSBDU0lfSUZfQ0ZHX01JUElf SUZfQ1NJOwotCi0JCWZsYWdzID0gZW5kcG9pbnQtPmJ1cy5wYXJhbGxlbC5mbGFnczsKLQotCQlj ZmcgfD0gKGJ1c193aWR0aCA9PSAxNikgPyBDU0lfSUZfQ0ZHX0NTSV9JRl9ZVVY0MjJfMTZCSVQg OgotCQkJCQkgICBDU0lfSUZfQ0ZHX0NTSV9JRl9ZVVY0MjJfSU5UTFY7Ci0KLQkJaWYgKGZsYWdz ICYgVjRMMl9NQlVTX0ZJRUxEX0VWRU5fTE9XKQotCQkJY2ZnIHw9IENTSV9JRl9DRkdfRklFTERf UE9TSVRJVkU7Ci0KLQkJaWYgKGZsYWdzICYgVjRMMl9NQlVTX1ZTWU5DX0FDVElWRV9MT1cpCi0J CQljZmcgfD0gQ1NJX0lGX0NGR19WUkVGX1BPTF9QT1NJVElWRTsKLQkJaWYgKGZsYWdzICYgVjRM Ml9NQlVTX0hTWU5DX0FDVElWRV9MT1cpCi0JCQljZmcgfD0gQ1NJX0lGX0NGR19IUkVGX1BPTF9Q T1NJVElWRTsKLQotCQlpZiAoZmxhZ3MgJiBWNEwyX01CVVNfUENMS19TQU1QTEVfUklTSU5HKQot CQkJY2ZnIHw9IENTSV9JRl9DRkdfQ0xLX1BPTF9GQUxMSU5HX0VER0U7Ci0JCWJyZWFrOwotCWNh c2UgVjRMMl9NQlVTX0JUNjU2OgotCQljZmcgfD0gQ1NJX0lGX0NGR19NSVBJX0lGX0NTSTsKLQot CQlmbGFncyA9IGVuZHBvaW50LT5idXMucGFyYWxsZWwuZmxhZ3M7Ci0KLQkJY2ZnIHw9IChidXNf d2lkdGggPT0gMTYpID8gQ1NJX0lGX0NGR19DU0lfSUZfQlQxMTIwIDoKLQkJCQkJICAgQ1NJX0lG X0NGR19DU0lfSUZfQlQ2NTY7Ci0KLQkJaWYgKGZsYWdzICYgVjRMMl9NQlVTX0ZJRUxEX0VWRU5f TE9XKQotCQkJY2ZnIHw9IENTSV9JRl9DRkdfRklFTERfUE9TSVRJVkU7Ci0KLQkJaWYgKGZsYWdz ICYgVjRMMl9NQlVTX1BDTEtfU0FNUExFX0ZBTExJTkcpCi0JCQljZmcgfD0gQ1NJX0lGX0NGR19D TEtfUE9MX0ZBTExJTkdfRURHRTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZGV2X3dhcm4oc2Rl di0+ZGV2LCAiVW5zdXBwb3J0ZWQgYnVzIHR5cGU6ICVkXG4iLAotCQkJIGVuZHBvaW50LT5idXNf dHlwZSk7Ci0JCWJyZWFrOwotCX0KLQotCXN3aXRjaCAoYnVzX3dpZHRoKSB7Ci0JY2FzZSA4Ogot CQljZmcgfD0gQ1NJX0lGX0NGR19JRl9EQVRBX1dJRFRIXzhCSVQ7Ci0JCWJyZWFrOwotCWNhc2Ug MTA6Ci0JCWNmZyB8PSBDU0lfSUZfQ0ZHX0lGX0RBVEFfV0lEVEhfMTBCSVQ7Ci0JCWJyZWFrOwot CWNhc2UgMTI6Ci0JCWNmZyB8PSBDU0lfSUZfQ0ZHX0lGX0RBVEFfV0lEVEhfMTJCSVQ7Ci0JCWJy ZWFrOwotCWNhc2UgMTY6IC8qIE5vIG5lZWQgdG8gY29uZmlndXJlIERBVEFfV0lEVEggZm9yIDE2 Yml0ICovCi0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWRldl93YXJuKHNkZXYtPmRldiwgIlVuc3Vw cG9ydGVkIGJ1cyB3aWR0aDogJXVcbiIsIGJ1c193aWR0aCk7Ci0JCWJyZWFrOwotCX0KLQotCXJl Z21hcF93cml0ZShzZGV2LT5yZWdtYXAsIENTSV9JRl9DRkdfUkVHLCBjZmcpOwotfQotCi1zdGF0 aWMgdm9pZCBzdW42aV9jc2lfc2V0X2Zvcm1hdChzdHJ1Y3Qgc3VuNmlfY3NpX2RldiAqc2RldikK LXsKLQlzdHJ1Y3Qgc3VuNmlfY3NpICpjc2kgPSAmc2Rldi0+Y3NpOwotCXUzMiBjZmc7Ci0JdTMy IHZhbDsKLQotCXJlZ21hcF9yZWFkKHNkZXYtPnJlZ21hcCwgQ1NJX0NIX0NGR19SRUcsICZjZmcp OwotCi0JY2ZnICY9IH4oQ1NJX0NIX0NGR19JTlBVVF9GTVRfTUFTSyB8Ci0JCSBDU0lfQ0hfQ0ZH X09VVFBVVF9GTVRfTUFTSyB8IENTSV9DSF9DRkdfVkZMSVBfRU4gfAotCQkgQ1NJX0NIX0NGR19I RkxJUF9FTiB8IENTSV9DSF9DRkdfRklFTERfU0VMX01BU0sgfAotCQkgQ1NJX0NIX0NGR19JTlBV VF9TRVFfTUFTSyk7Ci0KLQl2YWwgPSBnZXRfY3NpX2lucHV0X2Zvcm1hdChzZGV2LCBjc2ktPmNv bmZpZy5jb2RlLAotCQkJCSAgIGNzaS0+Y29uZmlnLnBpeGVsZm9ybWF0KTsKLQljZmcgfD0gQ1NJ X0NIX0NGR19JTlBVVF9GTVQodmFsKTsKLQotCXZhbCA9IGdldF9jc2lfb3V0cHV0X2Zvcm1hdChz ZGV2LCBjc2ktPmNvbmZpZy5waXhlbGZvcm1hdCwKLQkJCQkgICAgY3NpLT5jb25maWcuZmllbGQp OwotCWNmZyB8PSBDU0lfQ0hfQ0ZHX09VVFBVVF9GTVQodmFsKTsKLQotCXZhbCA9IGdldF9jc2lf aW5wdXRfc2VxKHNkZXYsIGNzaS0+Y29uZmlnLmNvZGUsCi0JCQkJY3NpLT5jb25maWcucGl4ZWxm b3JtYXQpOwotCWNmZyB8PSBDU0lfQ0hfQ0ZHX0lOUFVUX1NFUSh2YWwpOwotCi0JaWYgKGNzaS0+ Y29uZmlnLmZpZWxkID09IFY0TDJfRklFTERfVE9QKQotCQljZmcgfD0gQ1NJX0NIX0NGR19GSUVM RF9TRUxfRklFTEQwOwotCWVsc2UgaWYgKGNzaS0+Y29uZmlnLmZpZWxkID09IFY0TDJfRklFTERf Qk9UVE9NKQotCQljZmcgfD0gQ1NJX0NIX0NGR19GSUVMRF9TRUxfRklFTEQxOwotCWVsc2UKLQkJ Y2ZnIHw9IENTSV9DSF9DRkdfRklFTERfU0VMX0JPVEg7Ci0KLQlyZWdtYXBfd3JpdGUoc2Rldi0+ cmVnbWFwLCBDU0lfQ0hfQ0ZHX1JFRywgY2ZnKTsKLX0KLQotc3RhdGljIHZvaWQgc3VuNmlfY3Np X3NldF93aW5kb3coc3RydWN0IHN1bjZpX2NzaV9kZXYgKnNkZXYpCi17Ci0Jc3RydWN0IHN1bjZp X2NzaV9jb25maWcgKmNvbmZpZyA9ICZzZGV2LT5jc2kuY29uZmlnOwotCXUzMiBieXRlc3Blcmxp bmVfeTsKLQl1MzIgYnl0ZXNwZXJsaW5lX2M7Ci0JaW50ICpwbGFuYXJfb2Zmc2V0ID0gc2Rldi0+ cGxhbmFyX29mZnNldDsKLQl1MzIgd2lkdGggPSBjb25maWctPndpZHRoOwotCXUzMiBoZWlnaHQg PSBjb25maWctPmhlaWdodDsKLQl1MzIgaG9yX2xlbiA9IHdpZHRoOwotCi0Jc3dpdGNoIChjb25m aWctPnBpeGVsZm9ybWF0KSB7Ci0JY2FzZSBWNEwyX1BJWF9GTVRfWVVZVjoKLQljYXNlIFY0TDJf UElYX0ZNVF9ZVllVOgotCWNhc2UgVjRMMl9QSVhfRk1UX1VZVlk6Ci0JY2FzZSBWNEwyX1BJWF9G TVRfVllVWToKLQkJZGV2X2RiZyhzZGV2LT5kZXYsCi0JCQkiSG9yaXpvbnRhbCBsZW5ndGggc2hv dWxkIGJlIDIgdGltZXMgb2Ygd2lkdGggZm9yIHBhY2tlZCBZVVYgZm9ybWF0cyFcbiIpOwotCQlo b3JfbGVuID0gd2lkdGggKiAyOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0K LQlyZWdtYXBfd3JpdGUoc2Rldi0+cmVnbWFwLCBDU0lfQ0hfSFNJWkVfUkVHLAotCQkgICAgIENT SV9DSF9IU0laRV9IT1JfTEVOKGhvcl9sZW4pIHwKLQkJICAgICBDU0lfQ0hfSFNJWkVfSE9SX1NU QVJUKDApKTsKLQlyZWdtYXBfd3JpdGUoc2Rldi0+cmVnbWFwLCBDU0lfQ0hfVlNJWkVfUkVHLAot CQkgICAgIENTSV9DSF9WU0laRV9WRVJfTEVOKGhlaWdodCkgfAotCQkgICAgIENTSV9DSF9WU0la RV9WRVJfU1RBUlQoMCkpOwotCi0JcGxhbmFyX29mZnNldFswXSA9IDA7Ci0Jc3dpdGNoIChjb25m aWctPnBpeGVsZm9ybWF0KSB7Ci0JY2FzZSBWNEwyX1BJWF9GTVRfSE0xMjoKLQljYXNlIFY0TDJf UElYX0ZNVF9OVjEyOgotCWNhc2UgVjRMMl9QSVhfRk1UX05WMjE6Ci0JY2FzZSBWNEwyX1BJWF9G TVRfTlYxNjoKLQljYXNlIFY0TDJfUElYX0ZNVF9OVjYxOgotCQlieXRlc3BlcmxpbmVfeSA9IHdp ZHRoOwotCQlieXRlc3BlcmxpbmVfYyA9IHdpZHRoOwotCQlwbGFuYXJfb2Zmc2V0WzFdID0gYnl0 ZXNwZXJsaW5lX3kgKiBoZWlnaHQ7Ci0JCXBsYW5hcl9vZmZzZXRbMl0gPSAtMTsKLQkJYnJlYWs7 Ci0JY2FzZSBWNEwyX1BJWF9GTVRfWVVWNDIwOgotCWNhc2UgVjRMMl9QSVhfRk1UX1lWVTQyMDoK LQkJYnl0ZXNwZXJsaW5lX3kgPSB3aWR0aDsKLQkJYnl0ZXNwZXJsaW5lX2MgPSB3aWR0aCAvIDI7 Ci0JCXBsYW5hcl9vZmZzZXRbMV0gPSBieXRlc3BlcmxpbmVfeSAqIGhlaWdodDsKLQkJcGxhbmFy X29mZnNldFsyXSA9IHBsYW5hcl9vZmZzZXRbMV0gKwotCQkJCWJ5dGVzcGVybGluZV9jICogaGVp Z2h0IC8gMjsKLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX1BJWF9GTVRfWVVWNDIyUDoKLQkJYnl0ZXNw ZXJsaW5lX3kgPSB3aWR0aDsKLQkJYnl0ZXNwZXJsaW5lX2MgPSB3aWR0aCAvIDI7Ci0JCXBsYW5h cl9vZmZzZXRbMV0gPSBieXRlc3BlcmxpbmVfeSAqIGhlaWdodDsKLQkJcGxhbmFyX29mZnNldFsy XSA9IHBsYW5hcl9vZmZzZXRbMV0gKwotCQkJCWJ5dGVzcGVybGluZV9jICogaGVpZ2h0OwotCQli cmVhazsKLQlkZWZhdWx0OiAvKiByYXcgKi8KLQkJZGV2X2RiZyhzZGV2LT5kZXYsCi0JCQkiQ2Fs Y3VsYXRpbmcgcGl4ZWxmb3JtYXQoMHgleCkncyBieXRlc3BlcmxpbmUgYXMgYSBwYWNrZWQgZm9y bWF0XG4iLAotCQkJY29uZmlnLT5waXhlbGZvcm1hdCk7Ci0JCWJ5dGVzcGVybGluZV95ID0gKHN1 bjZpX2NzaV9nZXRfYnBwKGNvbmZpZy0+cGl4ZWxmb3JtYXQpICoKLQkJCQkgIGNvbmZpZy0+d2lk dGgpIC8gODsKLQkJYnl0ZXNwZXJsaW5lX2MgPSAwOwotCQlwbGFuYXJfb2Zmc2V0WzFdID0gLTE7 Ci0JCXBsYW5hcl9vZmZzZXRbMl0gPSAtMTsKLQkJYnJlYWs7Ci0JfQotCi0JcmVnbWFwX3dyaXRl KHNkZXYtPnJlZ21hcCwgQ1NJX0NIX0JVRl9MRU5fUkVHLAotCQkgICAgIENTSV9DSF9CVUZfTEVO X0JVRl9MRU5fQyhieXRlc3BlcmxpbmVfYykgfAotCQkgICAgIENTSV9DSF9CVUZfTEVOX0JVRl9M RU5fWShieXRlc3BlcmxpbmVfeSkpOwotfQotCi1pbnQgc3VuNmlfY3NpX3VwZGF0ZV9jb25maWco c3RydWN0IHN1bjZpX2NzaSAqY3NpLAotCQkJICAgIHN0cnVjdCBzdW42aV9jc2lfY29uZmlnICpj b25maWcpCi17Ci0Jc3RydWN0IHN1bjZpX2NzaV9kZXYgKnNkZXYgPSBzdW42aV9jc2lfdG9fZGV2 KGNzaSk7Ci0KLQlpZiAoIWNvbmZpZykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQltZW1jcHkoJmNz aS0+Y29uZmlnLCBjb25maWcsIHNpemVvZihjc2ktPmNvbmZpZykpOwotCi0Jc3VuNmlfY3NpX3Nl dHVwX2J1cyhzZGV2KTsKLQlzdW42aV9jc2lfc2V0X2Zvcm1hdChzZGV2KTsKLQlzdW42aV9jc2lf c2V0X3dpbmRvdyhzZGV2KTsKLQotCXJldHVybiAwOwotfQotCi12b2lkIHN1bjZpX2NzaV91cGRh dGVfYnVmX2FkZHIoc3RydWN0IHN1bjZpX2NzaSAqY3NpLCBkbWFfYWRkcl90IGFkZHIpCi17Ci0J c3RydWN0IHN1bjZpX2NzaV9kZXYgKnNkZXYgPSBzdW42aV9jc2lfdG9fZGV2KGNzaSk7Ci0KLQly ZWdtYXBfd3JpdGUoc2Rldi0+cmVnbWFwLCBDU0lfQ0hfRjBfQlVGQV9SRUcsCi0JCSAgICAgKGFk ZHIgKyBzZGV2LT5wbGFuYXJfb2Zmc2V0WzBdKSA+PiAyKTsKLQlpZiAoc2Rldi0+cGxhbmFyX29m ZnNldFsxXSAhPSAtMSkKLQkJcmVnbWFwX3dyaXRlKHNkZXYtPnJlZ21hcCwgQ1NJX0NIX0YxX0JV RkFfUkVHLAotCQkJICAgICAoYWRkciArIHNkZXYtPnBsYW5hcl9vZmZzZXRbMV0pID4+IDIpOwot CWlmIChzZGV2LT5wbGFuYXJfb2Zmc2V0WzJdICE9IC0xKQotCQlyZWdtYXBfd3JpdGUoc2Rldi0+ cmVnbWFwLCBDU0lfQ0hfRjJfQlVGQV9SRUcsCi0JCQkgICAgIChhZGRyICsgc2Rldi0+cGxhbmFy X29mZnNldFsyXSkgPj4gMik7Ci19Ci0KLXZvaWQgc3VuNmlfY3NpX3NldF9zdHJlYW0oc3RydWN0 IHN1bjZpX2NzaSAqY3NpLCBib29sIGVuYWJsZSkKLXsKLQlzdHJ1Y3Qgc3VuNmlfY3NpX2RldiAq c2RldiA9IHN1bjZpX2NzaV90b19kZXYoY3NpKTsKLQlzdHJ1Y3QgcmVnbWFwICpyZWdtYXAgPSBz ZGV2LT5yZWdtYXA7Ci0KLQlpZiAoIWVuYWJsZSkgewotCQlyZWdtYXBfdXBkYXRlX2JpdHMocmVn bWFwLCBDU0lfQ0FQX1JFRywgQ1NJX0NBUF9DSDBfVkNBUF9PTiwgMCk7Ci0JCXJlZ21hcF93cml0 ZShyZWdtYXAsIENTSV9DSF9JTlRfRU5fUkVHLCAwKTsKLQkJcmV0dXJuOwotCX0KLQotCXJlZ21h cF93cml0ZShyZWdtYXAsIENTSV9DSF9JTlRfU1RBX1JFRywgMHhGRik7Ci0JcmVnbWFwX3dyaXRl KHJlZ21hcCwgQ1NJX0NIX0lOVF9FTl9SRUcsCi0JCSAgICAgQ1NJX0NIX0lOVF9FTl9IQl9PRl9J TlRfRU4gfAotCQkgICAgIENTSV9DSF9JTlRfRU5fRklGTzJfT0ZfSU5UX0VOIHwKLQkJICAgICBD U0lfQ0hfSU5UX0VOX0ZJRk8xX09GX0lOVF9FTiB8Ci0JCSAgICAgQ1NJX0NIX0lOVF9FTl9GSUZP MF9PRl9JTlRfRU4gfAotCQkgICAgIENTSV9DSF9JTlRfRU5fRkRfSU5UX0VOIHwKLQkJICAgICBD U0lfQ0hfSU5UX0VOX0NEX0lOVF9FTik7Ci0KLQlyZWdtYXBfdXBkYXRlX2JpdHMocmVnbWFwLCBD U0lfQ0FQX1JFRywgQ1NJX0NBUF9DSDBfVkNBUF9PTiwKLQkJCSAgIENTSV9DQVBfQ0gwX1ZDQVBf T04pOwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTWVkaWEgQ29udHJvbGxlciBh bmQgVjRMMgotICovCi1zdGF0aWMgaW50IHN1bjZpX2NzaV9saW5rX2VudGl0eShzdHJ1Y3Qgc3Vu NmlfY3NpICpjc2ksCi0JCQkJIHN0cnVjdCBtZWRpYV9lbnRpdHkgKmVudGl0eSwKLQkJCQkgc3Ry dWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSkKLXsKLQlzdHJ1Y3QgbWVkaWFfZW50aXR5ICpzaW5r OwotCXN0cnVjdCBtZWRpYV9wYWQgKnNpbmtfcGFkOwotCWludCBzcmNfcGFkX2luZGV4OwotCWlu dCByZXQ7Ci0KLQlyZXQgPSBtZWRpYV9lbnRpdHlfZ2V0X2Z3bm9kZV9wYWQoZW50aXR5LCBmd25v ZGUsIE1FRElBX1BBRF9GTF9TT1VSQ0UpOwotCWlmIChyZXQgPCAwKSB7Ci0JCWRldl9lcnIoY3Np LT5kZXYsICIlczogbm8gc291cmNlIHBhZCBpbiBleHRlcm5hbCBlbnRpdHkgJXNcbiIsCi0JCQlf X2Z1bmNfXywgZW50aXR5LT5uYW1lKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0Jc3JjX3Bh ZF9pbmRleCA9IHJldDsKLQotCXNpbmsgPSAmY3NpLT52aWRlby52ZGV2LmVudGl0eTsKLQlzaW5r X3BhZCA9ICZjc2ktPnZpZGVvLnBhZDsKLQotCWRldl9kYmcoY3NpLT5kZXYsICJjcmVhdGluZyAl czoldSAtPiAlczoldSBsaW5rXG4iLAotCQllbnRpdHktPm5hbWUsIHNyY19wYWRfaW5kZXgsIHNp bmstPm5hbWUsIHNpbmtfcGFkLT5pbmRleCk7Ci0JcmV0ID0gbWVkaWFfY3JlYXRlX3BhZF9saW5r KGVudGl0eSwgc3JjX3BhZF9pbmRleCwgc2luaywKLQkJCQkgICAgc2lua19wYWQtPmluZGV4LAot CQkJCSAgICBNRURJQV9MTktfRkxfRU5BQkxFRCB8Ci0JCQkJICAgIE1FRElBX0xOS19GTF9JTU1V VEFCTEUpOwotCWlmIChyZXQgPCAwKSB7Ci0JCWRldl9lcnIoY3NpLT5kZXYsICJmYWlsZWQgdG8g Y3JlYXRlICVzOiV1IC0+ICVzOiV1IGxpbmtcbiIsCi0JCQllbnRpdHktPm5hbWUsIHNyY19wYWRf aW5kZXgsCi0JCQlzaW5rLT5uYW1lLCBzaW5rX3BhZC0+aW5kZXgpOwotCQlyZXR1cm4gcmV0Owot CX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHN1bjZpX3N1YmRldl9ub3RpZnlfY29t cGxldGUoc3RydWN0IHY0bDJfYXN5bmNfbm90aWZpZXIgKm5vdGlmaWVyKQotewotCXN0cnVjdCBz dW42aV9jc2kgKmNzaSA9IGNvbnRhaW5lcl9vZihub3RpZmllciwgc3RydWN0IHN1bjZpX2NzaSwK LQkJCQkJICAgICBub3RpZmllcik7Ci0Jc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9ICZj c2ktPnY0bDJfZGV2OwotCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7Ci0JaW50IHJldDsKLQotCWRl dl9kYmcoY3NpLT5kZXYsICJub3RpZnkgY29tcGxldGUsIGFsbCBzdWJkZXZzIHJlZ2lzdGVyZWRc biIpOwotCi0Jc2QgPSBsaXN0X2ZpcnN0X2VudHJ5KCZ2NGwyX2Rldi0+c3ViZGV2cywgc3RydWN0 IHY0bDJfc3ViZGV2LCBsaXN0KTsKLQlpZiAoIXNkKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJl dCA9IHN1bjZpX2NzaV9saW5rX2VudGl0eShjc2ksICZzZC0+ZW50aXR5LCBzZC0+Zndub2RlKTsK LQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IHY0bDJfZGV2aWNlX3JlZ2lz dGVyX3N1YmRldl9ub2RlcygmY3NpLT52NGwyX2Rldik7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVy biByZXQ7Ci0KLQlyZXR1cm4gbWVkaWFfZGV2aWNlX3JlZ2lzdGVyKCZjc2ktPm1lZGlhX2Rldik7 Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9hc3luY19ub3RpZmllcl9vcGVyYXRpb25z IHN1bjZpX2NzaV9hc3luY19vcHMgPSB7Ci0JLmNvbXBsZXRlID0gc3VuNmlfc3ViZGV2X25vdGlm eV9jb21wbGV0ZSwKLX07Ci0KLXN0YXRpYyBpbnQgc3VuNmlfY3NpX2Z3bm9kZV9wYXJzZShzdHJ1 Y3QgZGV2aWNlICpkZXYsCi0JCQkJICBzdHJ1Y3QgdjRsMl9md25vZGVfZW5kcG9pbnQgKnZlcCwK LQkJCQkgIHN0cnVjdCB2NGwyX2FzeW5jX3N1YmRldiAqYXNkKQotewotCXN0cnVjdCBzdW42aV9j c2kgKmNzaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCi0JaWYgKHZlcC0+YmFzZS5wb3J0IHx8 IHZlcC0+YmFzZS5pZCkgewotCQlkZXZfd2FybihkZXYsICJPbmx5IHN1cHBvcnQgYSBzaW5nbGUg cG9ydCB3aXRoIG9uZSBlbmRwb2ludFxuIik7Ci0JCXJldHVybiAtRU5PVENPTk47Ci0JfQotCi0J c3dpdGNoICh2ZXAtPmJ1c190eXBlKSB7Ci0JY2FzZSBWNEwyX01CVVNfUEFSQUxMRUw6Ci0JY2Fz ZSBWNEwyX01CVVNfQlQ2NTY6Ci0JCWNzaS0+djRsMl9lcCA9ICp2ZXA7Ci0JCXJldHVybiAwOwot CWRlZmF1bHQ6Ci0JCWRldl9lcnIoZGV2LCAiVW5zdXBwb3J0ZWQgbWVkaWEgYnVzIHR5cGVcbiIp OwotCQlyZXR1cm4gLUVOT1RDT05OOwotCX0KLX0KLQotc3RhdGljIHZvaWQgc3VuNmlfY3NpX3Y0 bDJfY2xlYW51cChzdHJ1Y3Qgc3VuNmlfY3NpICpjc2kpCi17Ci0JbWVkaWFfZGV2aWNlX3VucmVn aXN0ZXIoJmNzaS0+bWVkaWFfZGV2KTsKLQl2NGwyX2FzeW5jX25vdGlmaWVyX3VucmVnaXN0ZXIo JmNzaS0+bm90aWZpZXIpOwotCXY0bDJfYXN5bmNfbm90aWZpZXJfY2xlYW51cCgmY3NpLT5ub3Rp Zmllcik7Ci0Jc3VuNmlfdmlkZW9fY2xlYW51cCgmY3NpLT52aWRlbyk7Ci0JdjRsMl9kZXZpY2Vf dW5yZWdpc3RlcigmY3NpLT52NGwyX2Rldik7Ci0JdjRsMl9jdHJsX2hhbmRsZXJfZnJlZSgmY3Np LT5jdHJsX2hhbmRsZXIpOwotCW1lZGlhX2RldmljZV9jbGVhbnVwKCZjc2ktPm1lZGlhX2Rldik7 Ci19Ci0KLXN0YXRpYyBpbnQgc3VuNmlfY3NpX3Y0bDJfaW5pdChzdHJ1Y3Qgc3VuNmlfY3NpICpj c2kpCi17Ci0JaW50IHJldDsKLQotCWNzaS0+bWVkaWFfZGV2LmRldiA9IGNzaS0+ZGV2OwotCXN0 cnNjcHkoY3NpLT5tZWRpYV9kZXYubW9kZWwsICJBbGx3aW5uZXIgVmlkZW8gQ2FwdHVyZSBEZXZp Y2UiLAotCQlzaXplb2YoY3NpLT5tZWRpYV9kZXYubW9kZWwpKTsKLQljc2ktPm1lZGlhX2Rldi5o d19yZXZpc2lvbiA9IDA7Ci0Jc25wcmludGYoY3NpLT5tZWRpYV9kZXYuYnVzX2luZm8sIHNpemVv Zihjc2ktPm1lZGlhX2Rldi5idXNfaW5mbyksCi0JCSAicGxhdGZvcm06JXMiLCBkZXZfbmFtZShj c2ktPmRldikpOwotCi0JbWVkaWFfZGV2aWNlX2luaXQoJmNzaS0+bWVkaWFfZGV2KTsKLQl2NGwy X2FzeW5jX25vdGlmaWVyX2luaXQoJmNzaS0+bm90aWZpZXIpOwotCi0JcmV0ID0gdjRsMl9jdHJs X2hhbmRsZXJfaW5pdCgmY3NpLT5jdHJsX2hhbmRsZXIsIDApOwotCWlmIChyZXQpIHsKLQkJZGV2 X2Vycihjc2ktPmRldiwgIlY0TDIgY29udHJvbHMgaGFuZGxlciBpbml0IGZhaWxlZCAoJWQpXG4i LAotCQkJcmV0KTsKLQkJZ290byBjbGVhbl9tZWRpYTsKLQl9Ci0KLQljc2ktPnY0bDJfZGV2Lm1k ZXYgPSAmY3NpLT5tZWRpYV9kZXY7Ci0JY3NpLT52NGwyX2Rldi5jdHJsX2hhbmRsZXIgPSAmY3Np LT5jdHJsX2hhbmRsZXI7Ci0JcmV0ID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoY3NpLT5kZXYsICZj c2ktPnY0bDJfZGV2KTsKLQlpZiAocmV0KSB7Ci0JCWRldl9lcnIoY3NpLT5kZXYsICJWNEwyIGRl dmljZSByZWdpc3RyYXRpb24gZmFpbGVkICglZClcbiIsCi0JCQlyZXQpOwotCQlnb3RvIGZyZWVf Y3RybDsKLQl9Ci0KLQlyZXQgPSBzdW42aV92aWRlb19pbml0KCZjc2ktPnZpZGVvLCBjc2ksICJz dW42aS1jc2kiKTsKLQlpZiAocmV0KQotCQlnb3RvIHVucmVnX3Y0bDI7Ci0KLQlyZXQgPSB2NGwy X2FzeW5jX25vdGlmaWVyX3BhcnNlX2Z3bm9kZV9lbmRwb2ludHMoY3NpLT5kZXYsCi0JCQkJCQkJ ICZjc2ktPm5vdGlmaWVyLAotCQkJCQkJCSBzaXplb2Yoc3RydWN0IHY0bDJfYXN5bmNfc3ViZGV2 KSwKLQkJCQkJCQkgc3VuNmlfY3NpX2Z3bm9kZV9wYXJzZSk7Ci0JaWYgKHJldCkKLQkJZ290byBj bGVhbl92aWRlbzsKLQotCWNzaS0+bm90aWZpZXIub3BzID0gJnN1bjZpX2NzaV9hc3luY19vcHM7 Ci0KLQlyZXQgPSB2NGwyX2FzeW5jX25vdGlmaWVyX3JlZ2lzdGVyKCZjc2ktPnY0bDJfZGV2LCAm Y3NpLT5ub3RpZmllcik7Ci0JaWYgKHJldCkgewotCQlkZXZfZXJyKGNzaS0+ZGV2LCAibm90aWZp ZXIgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7Ci0JCWdvdG8gY2xlYW5fdmlkZW87Ci0JfQotCi0J cmV0dXJuIDA7Ci0KLWNsZWFuX3ZpZGVvOgotCXN1bjZpX3ZpZGVvX2NsZWFudXAoJmNzaS0+dmlk ZW8pOwotdW5yZWdfdjRsMjoKLQl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZjc2ktPnY0bDJfZGV2 KTsKLWZyZWVfY3RybDoKLQl2NGwyX2N0cmxfaGFuZGxlcl9mcmVlKCZjc2ktPmN0cmxfaGFuZGxl cik7Ci1jbGVhbl9tZWRpYToKLQl2NGwyX2FzeW5jX25vdGlmaWVyX2NsZWFudXAoJmNzaS0+bm90 aWZpZXIpOwotCW1lZGlhX2RldmljZV9jbGVhbnVwKCZjc2ktPm1lZGlhX2Rldik7Ci0KLQlyZXR1 cm4gcmV0OwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogUmVzb3VyY2VzIGFuZCBJ UlEKLSAqLwotc3RhdGljIGlycXJldHVybl90IHN1bjZpX2NzaV9pc3IoaW50IGlycSwgdm9pZCAq ZGV2X2lkKQotewotCXN0cnVjdCBzdW42aV9jc2lfZGV2ICpzZGV2ID0gKHN0cnVjdCBzdW42aV9j c2lfZGV2ICopZGV2X2lkOwotCXN0cnVjdCByZWdtYXAgKnJlZ21hcCA9IHNkZXYtPnJlZ21hcDsK LQl1MzIgc3RhdHVzOwotCi0JcmVnbWFwX3JlYWQocmVnbWFwLCBDU0lfQ0hfSU5UX1NUQV9SRUcs ICZzdGF0dXMpOwotCi0JaWYgKCEoc3RhdHVzICYgMHhGRikpCi0JCXJldHVybiBJUlFfTk9ORTsK LQotCWlmICgoc3RhdHVzICYgQ1NJX0NIX0lOVF9TVEFfRklGTzBfT0ZfUEQpIHx8Ci0JICAgIChz dGF0dXMgJiBDU0lfQ0hfSU5UX1NUQV9GSUZPMV9PRl9QRCkgfHwKLQkgICAgKHN0YXR1cyAmIENT SV9DSF9JTlRfU1RBX0ZJRk8yX09GX1BEKSB8fAotCSAgICAoc3RhdHVzICYgQ1NJX0NIX0lOVF9T VEFfSEJfT0ZfUEQpKSB7Ci0JCXJlZ21hcF93cml0ZShyZWdtYXAsIENTSV9DSF9JTlRfU1RBX1JF Rywgc3RhdHVzKTsKLQkJcmVnbWFwX3VwZGF0ZV9iaXRzKHJlZ21hcCwgQ1NJX0VOX1JFRywgQ1NJ X0VOX0NTSV9FTiwgMCk7Ci0JCXJlZ21hcF91cGRhdGVfYml0cyhyZWdtYXAsIENTSV9FTl9SRUcs IENTSV9FTl9DU0lfRU4sCi0JCQkJICAgQ1NJX0VOX0NTSV9FTik7Ci0JCXJldHVybiBJUlFfSEFO RExFRDsKLQl9Ci0KLQlpZiAoc3RhdHVzICYgQ1NJX0NIX0lOVF9TVEFfRkRfUEQpCi0JCXN1bjZp X3ZpZGVvX2ZyYW1lX2RvbmUoJnNkZXYtPmNzaS52aWRlbyk7Ci0KLQlyZWdtYXBfd3JpdGUocmVn bWFwLCBDU0lfQ0hfSU5UX1NUQV9SRUcsIHN0YXR1cyk7Ci0KLQlyZXR1cm4gSVJRX0hBTkRMRUQ7 Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBzdW42aV9jc2lfcmVnbWFw X2NvbmZpZyA9IHsKLQkucmVnX2JpdHMgICAgICAgPSAzMiwKLQkucmVnX3N0cmlkZSAgICAgPSA0 LAotCS52YWxfYml0cyAgICAgICA9IDMyLAotCS5tYXhfcmVnaXN0ZXIJPSAweDljLAotfTsKLQot c3RhdGljIGludCBzdW42aV9jc2lfcmVzb3VyY2VfcmVxdWVzdChzdHJ1Y3Qgc3VuNmlfY3NpX2Rl diAqc2RldiwKLQkJCQkgICAgICBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXN0 cnVjdCByZXNvdXJjZSAqcmVzOwotCXZvaWQgX19pb21lbSAqaW9fYmFzZTsKLQlpbnQgcmV0Owot CWludCBpcnE7Ci0KLQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJD RV9NRU0sIDApOwotCWlvX2Jhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwg cmVzKTsKLQlpZiAoSVNfRVJSKGlvX2Jhc2UpKQotCQlyZXR1cm4gUFRSX0VSUihpb19iYXNlKTsK LQotCXNkZXYtPnJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXRfbW1pb19jbGsoJnBkZXYtPmRldiwg ImJ1cyIsIGlvX2Jhc2UsCi0JCQkJCQkgJnN1bjZpX2NzaV9yZWdtYXBfY29uZmlnKTsKLQlpZiAo SVNfRVJSKHNkZXYtPnJlZ21hcCkpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRv IGluaXQgcmVnaXN0ZXIgbWFwXG4iKTsKLQkJcmV0dXJuIFBUUl9FUlIoc2Rldi0+cmVnbWFwKTsK LQl9Ci0KLQlzZGV2LT5jbGtfbW9kID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsICJtb2QiKTsK LQlpZiAoSVNfRVJSKHNkZXYtPmNsa19tb2QpKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIlVu YWJsZSB0byBhY3F1aXJlIGNzaSBjbG9ja1xuIik7Ci0JCXJldHVybiBQVFJfRVJSKHNkZXYtPmNs a19tb2QpOwotCX0KLQotCXNkZXYtPmNsa19yYW0gPSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwg InJhbSIpOwotCWlmIChJU19FUlIoc2Rldi0+Y2xrX3JhbSkpIHsKLQkJZGV2X2VycigmcGRldi0+ ZGV2LCAiVW5hYmxlIHRvIGFjcXVpcmUgZHJhbS1jc2kgY2xvY2tcbiIpOwotCQlyZXR1cm4gUFRS X0VSUihzZGV2LT5jbGtfcmFtKTsKLQl9Ci0KLQlzZGV2LT5yc3RjX2J1cyA9IGRldm1fcmVzZXRf Y29udHJvbF9nZXRfc2hhcmVkKCZwZGV2LT5kZXYsIE5VTEwpOwotCWlmIChJU19FUlIoc2Rldi0+ cnN0Y19idXMpKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCBnZXQgcmVzZXQgY29u dHJvbGxlclxuIik7Ci0JCXJldHVybiBQVFJfRVJSKHNkZXYtPnJzdGNfYnVzKTsKLQl9Ci0KLQlp cnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwotCWlmIChpcnEgPCAwKQotCQlyZXR1cm4g LUVOWElPOwotCi0JcmV0ID0gZGV2bV9yZXF1ZXN0X2lycSgmcGRldi0+ZGV2LCBpcnEsIHN1bjZp X2NzaV9pc3IsIDAsIE1PRFVMRV9OQU1FLAotCQkJICAgICAgIHNkZXYpOwotCWlmIChyZXQpIHsK LQkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IHJlcXVlc3QgY3NpIElSUVxuIik7Ci0JCXJl dHVybiByZXQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc3VuNmlfY3NpX3By b2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0Jc3RydWN0IHN1bjZpX2NzaV9k ZXYgKnNkZXY7Ci0JaW50IHJldDsKLQotCXNkZXYgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwg c2l6ZW9mKCpzZGV2KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzZGV2KQotCQlyZXR1cm4gLUVOT01F TTsKLQotCXNkZXYtPmRldiA9ICZwZGV2LT5kZXY7Ci0KLQlyZXQgPSBzdW42aV9jc2lfcmVzb3Vy Y2VfcmVxdWVzdChzZGV2LCBwZGV2KTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JcGxh dGZvcm1fc2V0X2RydmRhdGEocGRldiwgc2Rldik7Ci0KLQlzZGV2LT5jc2kuZGV2ID0gJnBkZXYt PmRldjsKLQlyZXR1cm4gc3VuNmlfY3NpX3Y0bDJfaW5pdCgmc2Rldi0+Y3NpKTsKLX0KLQotc3Rh dGljIGludCBzdW42aV9jc2lfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17 Ci0Jc3RydWN0IHN1bjZpX2NzaV9kZXYgKnNkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2 KTsKLQotCXN1bjZpX2NzaV92NGwyX2NsZWFudXAoJnNkZXYtPmNzaSk7Ci0KLQlyZXR1cm4gMDsK LX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgc3VuNmlfY3NpX29mX21hdGNo W10gPSB7Ci0JeyAuY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNmktYTMxLWNzaSIsIH0sCi0J eyAuY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuOGktYTgzdC1jc2kiLCB9LAotCXsgLmNvbXBh dGlibGUgPSAiYWxsd2lubmVyLHN1bjhpLWgzLWNzaSIsIH0sCi0JeyAuY29tcGF0aWJsZSA9ICJh bGx3aW5uZXIsc3VuOGktdjNzLWNzaSIsIH0sCi0JeyAuY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIs c3VuNTBpLWE2NC1jc2kiLCB9LAotCXt9LAotfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHN1 bjZpX2NzaV9vZl9tYXRjaCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHN1bjZp X2NzaV9wbGF0Zm9ybV9kcml2ZXIgPSB7Ci0JLnByb2JlID0gc3VuNmlfY3NpX3Byb2JlLAotCS5y ZW1vdmUgPSBzdW42aV9jc2lfcmVtb3ZlLAotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gTU9EVUxF X05BTUUsCi0JCS5vZl9tYXRjaF90YWJsZSA9IG9mX21hdGNoX3B0cihzdW42aV9jc2lfb2ZfbWF0 Y2gpLAotCX0sCi19OwotbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihzdW42aV9jc2lfcGxhdGZvcm1f ZHJpdmVyKTsKLQotTU9EVUxFX0RFU0NSSVBUSU9OKCJBbGx3aW5uZXIgVjNzIENhbWVyYSBTZW5z b3IgSW50ZXJmYWNlIGRyaXZlciIpOwotTU9EVUxFX0FVVEhPUigiWW9uZyBEZW5nIDx5b25nLmRl bmdAbWFnZXdlbGwuY29tPiIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zdW54aS9zdW42aS1jc2kvc3VuNmlfY3NpLmggYi9kcml2 ZXJzL21lZGlhL3BsYXRmb3JtL3N1bnhpL3N1bjZpLWNzaS9zdW42aV9jc2kuaApkZWxldGVkIGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggYzYyNjgyMWFhZWRiLi4wMDAwMDAwMDAwMDAKLS0tIGEvZHJp dmVycy9tZWRpYS9wbGF0Zm9ybS9zdW54aS9zdW42aS1jc2kvc3VuNmlfY3NpLmgKKysrIC9kZXYv bnVsbApAQCAtMSwxMzggKzAsMCBAQAotLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0y LjArICovCi0vKgotICogQ29weXJpZ2h0IChjKSAyMDExLTIwMTggTWFnZXdlbGwgRWxlY3Ryb25p Y3MgQ28uLCBMdGQuIChOYW5qaW5nKQotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIEF1dGhv cjogWW9uZyBEZW5nIDx5b25nLmRlbmdAbWFnZXdlbGwuY29tPgotICovCi0KLSNpZm5kZWYgX19T VU42SV9DU0lfSF9fCi0jZGVmaW5lIF9fU1VONklfQ1NJX0hfXwotCi0jaW5jbHVkZSA8bWVkaWEv djRsMi1jdHJscy5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+Ci0jaW5jbHVkZSA8 bWVkaWEvdjRsMi1md25vZGUuaD4KLQotI2luY2x1ZGUgInN1bjZpX3ZpZGVvLmgiCi0KLXN0cnVj dCBzdW42aV9jc2k7Ci0KLS8qKgotICogc3RydWN0IHN1bjZpX2NzaV9jb25maWcgLSBjb25maWdz IGZvciBzdW42aSBjc2kKLSAqIEBwaXhlbGZvcm1hdDogdjRsMiBwaXhlbCBmb3JtYXQgKFY0TDJf UElYX0ZNVF8qKQotICogQGNvZGU6CW1lZGlhIGJ1cyBmb3JtYXQgY29kZSAoTUVESUFfQlVTX0ZN VF8qKQotICogQGZpZWxkOgl1c2VkIGludGVybGFjaW5nIHR5cGUgKGVudW0gdjRsMl9maWVsZCkK LSAqIEB3aWR0aDoJZnJhbWUgd2lkdGgKLSAqIEBoZWlnaHQ6CWZyYW1lIGhlaWdodAotICovCi1z dHJ1Y3Qgc3VuNmlfY3NpX2NvbmZpZyB7Ci0JdTMyCQlwaXhlbGZvcm1hdDsKLQl1MzIJCWNvZGU7 Ci0JdTMyCQlmaWVsZDsKLQl1MzIJCXdpZHRoOwotCXUzMgkJaGVpZ2h0OwotfTsKLQotc3RydWN0 IHN1bjZpX2NzaSB7Ci0Jc3RydWN0IGRldmljZQkJCSpkZXY7Ci0Jc3RydWN0IHY0bDJfY3RybF9o YW5kbGVyCWN0cmxfaGFuZGxlcjsKLQlzdHJ1Y3QgdjRsMl9kZXZpY2UJCXY0bDJfZGV2OwotCXN0 cnVjdCBtZWRpYV9kZXZpY2UJCW1lZGlhX2RldjsKLQotCXN0cnVjdCB2NGwyX2FzeW5jX25vdGlm aWVyCW5vdGlmaWVyOwotCi0JLyogdmlkZW8gcG9ydCBzZXR0aW5ncyAqLwotCXN0cnVjdCB2NGwy X2Z3bm9kZV9lbmRwb2ludAl2NGwyX2VwOwotCi0Jc3RydWN0IHN1bjZpX2NzaV9jb25maWcJCWNv bmZpZzsKLQotCXN0cnVjdCBzdW42aV92aWRlbwkJdmlkZW87Ci19OwotCi0vKioKLSAqIHN1bjZp X2NzaV9pc19mb3JtYXRfc3VwcG9ydGVkKCkgLSBjaGVjayBpZiB0aGUgZm9ybWF0IHN1cHBvcnRl ZCBieSBjc2kKLSAqIEBjc2k6CXBvaW50ZXIgdG8gdGhlIGNzaQotICogQHBpeGZvcm1hdDoJdjRs MiBwaXhlbCBmb3JtYXQgKFY0TDJfUElYX0ZNVF8qKQotICogQG1idXNfY29kZToJbWVkaWEgYnVz IGZvcm1hdCBjb2RlIChNRURJQV9CVVNfRk1UXyopCi0gKi8KLWJvb2wgc3VuNmlfY3NpX2lzX2Zv cm1hdF9zdXBwb3J0ZWQoc3RydWN0IHN1bjZpX2NzaSAqY3NpLCB1MzIgcGl4Zm9ybWF0LAotCQkJ CSAgIHUzMiBtYnVzX2NvZGUpOwotCi0vKioKLSAqIHN1bjZpX2NzaV9zZXRfcG93ZXIoKSAtIHBv d2VyIG9uL29mZiB0aGUgY3NpCi0gKiBAY3NpOglwb2ludGVyIHRvIHRoZSBjc2kKLSAqIEBlbmFi bGU6CW9uL29mZgotICovCi1pbnQgc3VuNmlfY3NpX3NldF9wb3dlcihzdHJ1Y3Qgc3VuNmlfY3Np ICpjc2ksIGJvb2wgZW5hYmxlKTsKLQotLyoqCi0gKiBzdW42aV9jc2lfdXBkYXRlX2NvbmZpZygp IC0gdXBkYXRlIHRoZSBjc2kgcmVnaXN0ZXIgc2V0dGluZ3MKLSAqIEBjc2k6CXBvaW50ZXIgdG8g dGhlIGNzaQotICogQGNvbmZpZzoJc2VlIHN0cnVjdCBzdW42aV9jc2lfY29uZmlnCi0gKi8KLWlu dCBzdW42aV9jc2lfdXBkYXRlX2NvbmZpZyhzdHJ1Y3Qgc3VuNmlfY3NpICpjc2ksCi0JCQkgICAg c3RydWN0IHN1bjZpX2NzaV9jb25maWcgKmNvbmZpZyk7Ci0KLS8qKgotICogc3VuNmlfY3NpX3Vw ZGF0ZV9idWZfYWRkcigpIC0gdXBkYXRlIHRoZSBjc2kgZnJhbWUgYnVmZmVyIGFkZHJlc3MKLSAq IEBjc2k6CXBvaW50ZXIgdG8gdGhlIGNzaQotICogQGFkZHI6CWZyYW1lIGJ1ZmZlcidzIHBoeXNp Y2FsIGFkZHJlc3MKLSAqLwotdm9pZCBzdW42aV9jc2lfdXBkYXRlX2J1Zl9hZGRyKHN0cnVjdCBz dW42aV9jc2kgKmNzaSwgZG1hX2FkZHJfdCBhZGRyKTsKLQotLyoqCi0gKiBzdW42aV9jc2lfc2V0 X3N0cmVhbSgpIC0gc3RhcnQvc3RvcCBjc2kgc3RyZWFtaW5nCi0gKiBAY3NpOglwb2ludGVyIHRv IHRoZSBjc2kKLSAqIEBlbmFibGU6CXN0YXJ0L3N0b3AKLSAqLwotdm9pZCBzdW42aV9jc2lfc2V0 X3N0cmVhbShzdHJ1Y3Qgc3VuNmlfY3NpICpjc2ksIGJvb2wgZW5hYmxlKTsKLQotLyogZ2V0IGJw cCBmb3JtIHY0bDIgcGl4Zm9ybWF0ICovCi1zdGF0aWMgaW5saW5lIGludCBzdW42aV9jc2lfZ2V0 X2JwcCh1bnNpZ25lZCBpbnQgcGl4Zm9ybWF0KQotewotCXN3aXRjaCAocGl4Zm9ybWF0KSB7Ci0J Y2FzZSBWNEwyX1BJWF9GTVRfU0JHR1I4OgotCWNhc2UgVjRMMl9QSVhfRk1UX1NHQlJHODoKLQlj YXNlIFY0TDJfUElYX0ZNVF9TR1JCRzg6Ci0JY2FzZSBWNEwyX1BJWF9GTVRfU1JHR0I4OgotCWNh c2UgVjRMMl9QSVhfRk1UX0pQRUc6Ci0JCXJldHVybiA4OwotCWNhc2UgVjRMMl9QSVhfRk1UX1NC R0dSMTA6Ci0JY2FzZSBWNEwyX1BJWF9GTVRfU0dCUkcxMDoKLQljYXNlIFY0TDJfUElYX0ZNVF9T R1JCRzEwOgotCWNhc2UgVjRMMl9QSVhfRk1UX1NSR0dCMTA6Ci0JCXJldHVybiAxMDsKLQljYXNl IFY0TDJfUElYX0ZNVF9TQkdHUjEyOgotCWNhc2UgVjRMMl9QSVhfRk1UX1NHQlJHMTI6Ci0JY2Fz ZSBWNEwyX1BJWF9GTVRfU0dSQkcxMjoKLQljYXNlIFY0TDJfUElYX0ZNVF9TUkdHQjEyOgotCWNh c2UgVjRMMl9QSVhfRk1UX0hNMTI6Ci0JY2FzZSBWNEwyX1BJWF9GTVRfTlYxMjoKLQljYXNlIFY0 TDJfUElYX0ZNVF9OVjIxOgotCWNhc2UgVjRMMl9QSVhfRk1UX1lVVjQyMDoKLQljYXNlIFY0TDJf UElYX0ZNVF9ZVlU0MjA6Ci0JCXJldHVybiAxMjsKLQljYXNlIFY0TDJfUElYX0ZNVF9ZVVlWOgot CWNhc2UgVjRMMl9QSVhfRk1UX1lWWVU6Ci0JY2FzZSBWNEwyX1BJWF9GTVRfVVlWWToKLQljYXNl IFY0TDJfUElYX0ZNVF9WWVVZOgotCWNhc2UgVjRMMl9QSVhfRk1UX05WMTY6Ci0JY2FzZSBWNEwy X1BJWF9GTVRfTlY2MToKLQljYXNlIFY0TDJfUElYX0ZNVF9ZVVY0MjJQOgotCWNhc2UgVjRMMl9Q SVhfRk1UX1JHQjU2NToKLQljYXNlIFY0TDJfUElYX0ZNVF9SR0I1NjVYOgotCQlyZXR1cm4gMTY7 Ci0JY2FzZSBWNEwyX1BJWF9GTVRfUkdCMjQ6Ci0JY2FzZSBWNEwyX1BJWF9GTVRfQkdSMjQ6Ci0J CXJldHVybiAyNDsKLQljYXNlIFY0TDJfUElYX0ZNVF9SR0IzMjoKLQljYXNlIFY0TDJfUElYX0ZN VF9CR1IzMjoKLQkJcmV0dXJuIDMyOwotCWRlZmF1bHQ6Ci0JCVdBUk4oMSwgIlVuc3VwcG9ydGVk IHBpeGZvcm1hdDogMHgleFxuIiwgcGl4Zm9ybWF0KTsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJu IDA7Ci19Ci0KLSNlbmRpZiAvKiBfX1NVTjZJX0NTSV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZl cnMvbWVkaWEvcGxhdGZvcm0vc3VueGkvc3VuNmktY3NpL3N1bjZpX2NzaV9yZWcuaCBiL2RyaXZl cnMvbWVkaWEvcGxhdGZvcm0vc3VueGkvc3VuNmktY3NpL3N1bjZpX2NzaV9yZWcuaApkZWxldGVk IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzAzZmExNGJiMzEzLi4wMDAwMDAwMDAwMDAKLS0tIGEv ZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zdW54aS9zdW42aS1jc2kvc3VuNmlfY3NpX3JlZy5oCisr KyAvZGV2L251bGwKQEAgLTEsMTk2ICswLDAgQEAKLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBHUEwtMi4wKyAqLwotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMS0yMDE4IE1hZ2V3ZWxsIEVs ZWN0cm9uaWNzIENvLiwgTHRkLiAoTmFuamluZykKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g KiBBdXRob3I6IFlvbmcgRGVuZyA8eW9uZy5kZW5nQG1hZ2V3ZWxsLmNvbT4KLSAqLwotCi0jaWZu ZGVmIF9fU1VONklfQ1NJX1JFR19IX18KLSNkZWZpbmUgX19TVU42SV9DU0lfUkVHX0hfXwotCi0j aW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0KLSNkZWZpbmUgQ1NJX0VOX1JFRwkJCTB4MAotI2Rl ZmluZSBDU0lfRU5fVkVSX0VOCQkJCUJJVCgzMCkKLSNkZWZpbmUgQ1NJX0VOX0NTSV9FTgkJCQlC SVQoMCkKLQotI2RlZmluZSBDU0lfSUZfQ0ZHX1JFRwkJCTB4NAotI2RlZmluZSBDU0lfSUZfQ0ZH X1NSQ19UWVBFX01BU0sJCUJJVCgyMSkKLSNkZWZpbmUgQ1NJX0lGX0NGR19TUkNfVFlQRV9QUk9H UkVTU0VECQkoKDAgPDwgMjEpICYgQ1NJX0lGX0NGR19TUkNfVFlQRV9NQVNLKQotI2RlZmluZSBD U0lfSUZfQ0ZHX1NSQ19UWVBFX0lOVEVSTEFDRUQJCSgoMSA8PCAyMSkgJiBDU0lfSUZfQ0ZHX1NS Q19UWVBFX01BU0spCi0jZGVmaW5lIENTSV9JRl9DRkdfRlBTX0RTX0VOCQkJQklUKDIwKQotI2Rl ZmluZSBDU0lfSUZfQ0ZHX0ZJRUxEX01BU0sJCQlCSVQoMTkpCi0jZGVmaW5lIENTSV9JRl9DRkdf RklFTERfTkVHQVRJVkUJCSgoMCA8PCAxOSkgJiBDU0lfSUZfQ0ZHX0ZJRUxEX01BU0spCi0jZGVm aW5lIENTSV9JRl9DRkdfRklFTERfUE9TSVRJVkUJCSgoMSA8PCAxOSkgJiBDU0lfSUZfQ0ZHX0ZJ RUxEX01BU0spCi0jZGVmaW5lIENTSV9JRl9DRkdfVlJFRl9QT0xfTUFTSwkJQklUKDE4KQotI2Rl ZmluZSBDU0lfSUZfQ0ZHX1ZSRUZfUE9MX05FR0FUSVZFCQkoKDAgPDwgMTgpICYgQ1NJX0lGX0NG R19WUkVGX1BPTF9NQVNLKQotI2RlZmluZSBDU0lfSUZfQ0ZHX1ZSRUZfUE9MX1BPU0lUSVZFCQko KDEgPDwgMTgpICYgQ1NJX0lGX0NGR19WUkVGX1BPTF9NQVNLKQotI2RlZmluZSBDU0lfSUZfQ0ZH X0hSRUZfUE9MX01BU0sJCUJJVCgxNykKLSNkZWZpbmUgQ1NJX0lGX0NGR19IUkVGX1BPTF9ORUdB VElWRQkJKCgwIDw8IDE3KSAmIENTSV9JRl9DRkdfSFJFRl9QT0xfTUFTSykKLSNkZWZpbmUgQ1NJ X0lGX0NGR19IUkVGX1BPTF9QT1NJVElWRQkJKCgxIDw8IDE3KSAmIENTSV9JRl9DRkdfSFJFRl9Q T0xfTUFTSykKLSNkZWZpbmUgQ1NJX0lGX0NGR19DTEtfUE9MX01BU0sJCQlCSVQoMTYpCi0jZGVm aW5lIENTSV9JRl9DRkdfQ0xLX1BPTF9SSVNJTkdfRURHRQkJKCgwIDw8IDE2KSAmIENTSV9JRl9D RkdfQ0xLX1BPTF9NQVNLKQotI2RlZmluZSBDU0lfSUZfQ0ZHX0NMS19QT0xfRkFMTElOR19FREdF CQkoKDEgPDwgMTYpICYgQ1NJX0lGX0NGR19DTEtfUE9MX01BU0spCi0jZGVmaW5lIENTSV9JRl9D RkdfSUZfREFUQV9XSURUSF9NQVNLCQlHRU5NQVNLKDEwLCA4KQotI2RlZmluZSBDU0lfSUZfQ0ZH X0lGX0RBVEFfV0lEVEhfOEJJVAkJKCgwIDw8IDgpICYgQ1NJX0lGX0NGR19JRl9EQVRBX1dJRFRI X01BU0spCi0jZGVmaW5lIENTSV9JRl9DRkdfSUZfREFUQV9XSURUSF8xMEJJVAkJKCgxIDw8IDgp ICYgQ1NJX0lGX0NGR19JRl9EQVRBX1dJRFRIX01BU0spCi0jZGVmaW5lIENTSV9JRl9DRkdfSUZf REFUQV9XSURUSF8xMkJJVAkJKCgyIDw8IDgpICYgQ1NJX0lGX0NGR19JRl9EQVRBX1dJRFRIX01B U0spCi0jZGVmaW5lIENTSV9JRl9DRkdfTUlQSV9JRl9NQVNLCQkJQklUKDcpCi0jZGVmaW5lIENT SV9JRl9DRkdfTUlQSV9JRl9DU0kJCQkoMCA8PCA3KQotI2RlZmluZSBDU0lfSUZfQ0ZHX01JUElf SUZfTUlQSQkJCUJJVCg3KQotI2RlZmluZSBDU0lfSUZfQ0ZHX0NTSV9JRl9NQVNLCQkJR0VOTUFT Syg0LCAwKQotI2RlZmluZSBDU0lfSUZfQ0ZHX0NTSV9JRl9ZVVY0MjJfSU5UTFYJCSgoMCA8PCAw KSAmIENTSV9JRl9DRkdfQ1NJX0lGX01BU0spCi0jZGVmaW5lIENTSV9JRl9DRkdfQ1NJX0lGX1lV VjQyMl8xNkJJVAkJKCgxIDw8IDApICYgQ1NJX0lGX0NGR19DU0lfSUZfTUFTSykKLSNkZWZpbmUg Q1NJX0lGX0NGR19DU0lfSUZfQlQ2NTYJCQkoKDQgPDwgMCkgJiBDU0lfSUZfQ0ZHX0NTSV9JRl9N QVNLKQotI2RlZmluZSBDU0lfSUZfQ0ZHX0NTSV9JRl9CVDExMjAJCSgoNSA8PCAwKSAmIENTSV9J Rl9DRkdfQ1NJX0lGX01BU0spCi0KLSNkZWZpbmUgQ1NJX0NBUF9SRUcJCQkweDgKLSNkZWZpbmUg Q1NJX0NBUF9DSDBfQ0FQX01BU0tfTUFTSwkJR0VOTUFTSyg1LCAyKQotI2RlZmluZSBDU0lfQ0FQ X0NIMF9DQVBfTUFTSyhjb3VudCkJCSgoKGNvdW50KSA8PCAyKSAmIENTSV9DQVBfQ0gwX0NBUF9N QVNLX01BU0spCi0jZGVmaW5lIENTSV9DQVBfQ0gwX1ZDQVBfT04JCQlCSVQoMSkKLSNkZWZpbmUg Q1NJX0NBUF9DSDBfU0NBUF9PTgkJCUJJVCgwKQotCi0jZGVmaW5lIENTSV9TWU5DX0NOVF9SRUcJ CTB4YwotI2RlZmluZSBDU0lfRklGT19USFJTX1JFRwkJMHgxMAotI2RlZmluZSBDU0lfQlQ2NTZf SEVBRF9DRkdfUkVHCQkweDE0Ci0jZGVmaW5lIENTSV9QVE5fTEVOX1JFRwkJCTB4MzAKLSNkZWZp bmUgQ1NJX1BUTl9BRERSX1JFRwkJMHgzNAotI2RlZmluZSBDU0lfVkVSX1JFRwkJCTB4M2MKLQot I2RlZmluZSBDU0lfQ0hfQ0ZHX1JFRwkJCTB4NDQKLSNkZWZpbmUgQ1NJX0NIX0NGR19JTlBVVF9G TVRfTUFTSwkJR0VOTUFTSygyMywgMjApCi0jZGVmaW5lIENTSV9DSF9DRkdfSU5QVVRfRk1UKGZt dCkJCSgoKGZtdCkgPDwgMjApICYgQ1NJX0NIX0NGR19JTlBVVF9GTVRfTUFTSykKLSNkZWZpbmUg Q1NJX0NIX0NGR19PVVRQVVRfRk1UX01BU0sJCUdFTk1BU0soMTksIDE2KQotI2RlZmluZSBDU0lf Q0hfQ0ZHX09VVFBVVF9GTVQoZm10KQkJKCgoZm10KSA8PCAxNikgJiBDU0lfQ0hfQ0ZHX09VVFBV VF9GTVRfTUFTSykKLSNkZWZpbmUgQ1NJX0NIX0NGR19WRkxJUF9FTgkJCUJJVCgxMykKLSNkZWZp bmUgQ1NJX0NIX0NGR19IRkxJUF9FTgkJCUJJVCgxMikKLSNkZWZpbmUgQ1NJX0NIX0NGR19GSUVM RF9TRUxfTUFTSwkJR0VOTUFTSygxMSwgMTApCi0jZGVmaW5lIENTSV9DSF9DRkdfRklFTERfU0VM X0ZJRUxEMAkJKCgwIDw8IDEwKSAmIENTSV9DSF9DRkdfRklFTERfU0VMX01BU0spCi0jZGVmaW5l IENTSV9DSF9DRkdfRklFTERfU0VMX0ZJRUxEMQkJKCgxIDw8IDEwKSAmIENTSV9DSF9DRkdfRklF TERfU0VMX01BU0spCi0jZGVmaW5lIENTSV9DSF9DRkdfRklFTERfU0VMX0JPVEgJCSgoMiA8PCAx MCkgJiBDU0lfQ0hfQ0ZHX0ZJRUxEX1NFTF9NQVNLKQotI2RlZmluZSBDU0lfQ0hfQ0ZHX0lOUFVU X1NFUV9NQVNLCQlHRU5NQVNLKDksIDgpCi0jZGVmaW5lIENTSV9DSF9DRkdfSU5QVVRfU0VRKHNl cSkJCSgoKHNlcSkgPDwgOCkgJiBDU0lfQ0hfQ0ZHX0lOUFVUX1NFUV9NQVNLKQotCi0jZGVmaW5l IENTSV9DSF9TQ0FMRV9SRUcJCTB4NGMKLSNkZWZpbmUgQ1NJX0NIX1NDQUxFX1FVQVJUX0VOCQkJ QklUKDApCi0KLSNkZWZpbmUgQ1NJX0NIX0YwX0JVRkFfUkVHCQkweDUwCi0KLSNkZWZpbmUgQ1NJ X0NIX0YxX0JVRkFfUkVHCQkweDU4Ci0KLSNkZWZpbmUgQ1NJX0NIX0YyX0JVRkFfUkVHCQkweDYw Ci0KLSNkZWZpbmUgQ1NJX0NIX1NUQV9SRUcJCQkweDZjCi0jZGVmaW5lIENTSV9DSF9TVEFfRklF TERfU1RBX01BU0sJCUJJVCgyKQotI2RlZmluZSBDU0lfQ0hfU1RBX0ZJRUxEX1NUQV9GSUVMRDAJ CSgoMCA8PCAyKSAmIENTSV9DSF9TVEFfRklFTERfU1RBX01BU0spCi0jZGVmaW5lIENTSV9DSF9T VEFfRklFTERfU1RBX0ZJRUxEMQkJKCgxIDw8IDIpICYgQ1NJX0NIX1NUQV9GSUVMRF9TVEFfTUFT SykKLSNkZWZpbmUgQ1NJX0NIX1NUQV9WQ0FQX1NUQQkJCUJJVCgxKQotI2RlZmluZSBDU0lfQ0hf U1RBX1NDQVBfU1RBCQkJQklUKDApCi0KLSNkZWZpbmUgQ1NJX0NIX0lOVF9FTl9SRUcJCTB4NzAK LSNkZWZpbmUgQ1NJX0NIX0lOVF9FTl9WU19JTlRfRU4JCQlCSVQoNykKLSNkZWZpbmUgQ1NJX0NI X0lOVF9FTl9IQl9PRl9JTlRfRU4JCUJJVCg2KQotI2RlZmluZSBDU0lfQ0hfSU5UX0VOX01VTF9F UlJfSU5UX0VOCQlCSVQoNSkKLSNkZWZpbmUgQ1NJX0NIX0lOVF9FTl9GSUZPMl9PRl9JTlRfRU4J CUJJVCg0KQotI2RlZmluZSBDU0lfQ0hfSU5UX0VOX0ZJRk8xX09GX0lOVF9FTgkJQklUKDMpCi0j ZGVmaW5lIENTSV9DSF9JTlRfRU5fRklGTzBfT0ZfSU5UX0VOCQlCSVQoMikKLSNkZWZpbmUgQ1NJ X0NIX0lOVF9FTl9GRF9JTlRfRU4JCQlCSVQoMSkKLSNkZWZpbmUgQ1NJX0NIX0lOVF9FTl9DRF9J TlRfRU4JCQlCSVQoMCkKLQotI2RlZmluZSBDU0lfQ0hfSU5UX1NUQV9SRUcJCTB4NzQKLSNkZWZp bmUgQ1NJX0NIX0lOVF9TVEFfVlNfUEQJCQlCSVQoNykKLSNkZWZpbmUgQ1NJX0NIX0lOVF9TVEFf SEJfT0ZfUEQJCQlCSVQoNikKLSNkZWZpbmUgQ1NJX0NIX0lOVF9TVEFfTVVMX0VSUl9QRAkJQklU KDUpCi0jZGVmaW5lIENTSV9DSF9JTlRfU1RBX0ZJRk8yX09GX1BECQlCSVQoNCkKLSNkZWZpbmUg Q1NJX0NIX0lOVF9TVEFfRklGTzFfT0ZfUEQJCUJJVCgzKQotI2RlZmluZSBDU0lfQ0hfSU5UX1NU QV9GSUZPMF9PRl9QRAkJQklUKDIpCi0jZGVmaW5lIENTSV9DSF9JTlRfU1RBX0ZEX1BECQkJQklU KDEpCi0jZGVmaW5lIENTSV9DSF9JTlRfU1RBX0NEX1BECQkJQklUKDApCi0KLSNkZWZpbmUgQ1NJ X0NIX0ZMRDFfVlNJWkVfUkVHCQkweDc4Ci0KLSNkZWZpbmUgQ1NJX0NIX0hTSVpFX1JFRwkJMHg4 MAotI2RlZmluZSBDU0lfQ0hfSFNJWkVfSE9SX0xFTl9NQVNLCQlHRU5NQVNLKDI4LCAxNikKLSNk ZWZpbmUgQ1NJX0NIX0hTSVpFX0hPUl9MRU4obGVuKQkJKCgobGVuKSA8PCAxNikgJiBDU0lfQ0hf SFNJWkVfSE9SX0xFTl9NQVNLKQotI2RlZmluZSBDU0lfQ0hfSFNJWkVfSE9SX1NUQVJUX01BU0sJ CUdFTk1BU0soMTIsIDApCi0jZGVmaW5lIENTSV9DSF9IU0laRV9IT1JfU1RBUlQoc3RhcnQpCQko KChzdGFydCkgPDwgMCkgJiBDU0lfQ0hfSFNJWkVfSE9SX1NUQVJUX01BU0spCi0KLSNkZWZpbmUg Q1NJX0NIX1ZTSVpFX1JFRwkJMHg4NAotI2RlZmluZSBDU0lfQ0hfVlNJWkVfVkVSX0xFTl9NQVNL CQlHRU5NQVNLKDI4LCAxNikKLSNkZWZpbmUgQ1NJX0NIX1ZTSVpFX1ZFUl9MRU4obGVuKQkJKCgo bGVuKSA8PCAxNikgJiBDU0lfQ0hfVlNJWkVfVkVSX0xFTl9NQVNLKQotI2RlZmluZSBDU0lfQ0hf VlNJWkVfVkVSX1NUQVJUX01BU0sJCUdFTk1BU0soMTIsIDApCi0jZGVmaW5lIENTSV9DSF9WU0la RV9WRVJfU1RBUlQoc3RhcnQpCQkoKChzdGFydCkgPDwgMCkgJiBDU0lfQ0hfVlNJWkVfVkVSX1NU QVJUX01BU0spCi0KLSNkZWZpbmUgQ1NJX0NIX0JVRl9MRU5fUkVHCQkweDg4Ci0jZGVmaW5lIENT SV9DSF9CVUZfTEVOX0JVRl9MRU5fQ19NQVNLCQlHRU5NQVNLKDI5LCAxNikKLSNkZWZpbmUgQ1NJ X0NIX0JVRl9MRU5fQlVGX0xFTl9DKGxlbikJCSgoKGxlbikgPDwgMTYpICYgQ1NJX0NIX0JVRl9M RU5fQlVGX0xFTl9DX01BU0spCi0jZGVmaW5lIENTSV9DSF9CVUZfTEVOX0JVRl9MRU5fWV9NQVNL CQlHRU5NQVNLKDEzLCAwKQotI2RlZmluZSBDU0lfQ0hfQlVGX0xFTl9CVUZfTEVOX1kobGVuKQkJ KCgobGVuKSA8PCAwKSAmIENTSV9DSF9CVUZfTEVOX0JVRl9MRU5fWV9NQVNLKQotCi0jZGVmaW5l IENTSV9DSF9GTElQX1NJWkVfUkVHCQkweDhjCi0jZGVmaW5lIENTSV9DSF9GTElQX1NJWkVfVkVS X0xFTl9NQVNLCQlHRU5NQVNLKDI4LCAxNikKLSNkZWZpbmUgQ1NJX0NIX0ZMSVBfU0laRV9WRVJf TEVOKGxlbikJCSgoKGxlbikgPDwgMTYpICYgQ1NJX0NIX0ZMSVBfU0laRV9WRVJfTEVOX01BU0sp Ci0jZGVmaW5lIENTSV9DSF9GTElQX1NJWkVfVkFMSURfTEVOX01BU0sJCUdFTk1BU0soMTIsIDAp Ci0jZGVmaW5lIENTSV9DSF9GTElQX1NJWkVfVkFMSURfTEVOKGxlbikJCSgoKGxlbikgPDwgMCkg JiBDU0lfQ0hfRkxJUF9TSVpFX1ZBTElEX0xFTl9NQVNLKQotCi0jZGVmaW5lIENTSV9DSF9GUk1f Q0xLX0NOVF9SRUcJCTB4OTAKLSNkZWZpbmUgQ1NJX0NIX0FDQ19JVE5MX0NMS19DTlRfUkVHCTB4 OTQKLSNkZWZpbmUgQ1NJX0NIX0ZJRk9fU1RBVF9SRUcJCTB4OTgKLSNkZWZpbmUgQ1NJX0NIX1BD TEtfU1RBVF9SRUcJCTB4OWMKLQotLyoKLSAqIGNzaSBpbnB1dCBkYXRhIGZvcm1hdAotICovCi1l bnVtIGNzaV9pbnB1dF9mbXQgewotCUNTSV9JTlBVVF9GT1JNQVRfUkFXCQk9IDAsCi0JQ1NJX0lO UFVUX0ZPUk1BVF9ZVVY0MjIJCT0gMywKLQlDU0lfSU5QVVRfRk9STUFUX1lVVjQyMAkJPSA0LAot fTsKLQotLyoKLSAqIGNzaSBvdXRwdXQgZGF0YSBmb3JtYXQKLSAqLwotZW51bSBjc2lfb3V0cHV0 X2ZtdCB7Ci0JLyogb25seSB3aGVuIGlucHV0IGZvcm1hdCBpcyBSQVcgKi8KLQlDU0lfRklFTERf UkFXXzgJCQk9IDAsCi0JQ1NJX0ZJRUxEX1JBV18xMAkJPSAxLAotCUNTSV9GSUVMRF9SQVdfMTIJ CT0gMiwKLQlDU0lfRklFTERfUkdCNTY1CQk9IDQsCi0JQ1NJX0ZJRUxEX1JHQjg4OAkJPSA1LAot CUNTSV9GSUVMRF9QUkdCODg4CQk9IDYsCi0JQ1NJX0ZSQU1FX1JBV184CQkJPSA4LAotCUNTSV9G UkFNRV9SQVdfMTAJCT0gOSwKLQlDU0lfRlJBTUVfUkFXXzEyCQk9IDEwLAotCUNTSV9GUkFNRV9S R0I1NjUJCT0gMTIsCi0JQ1NJX0ZSQU1FX1JHQjg4OAkJPSAxMywKLQlDU0lfRlJBTUVfUFJHQjg4 OAkJPSAxNCwKLQotCS8qIG9ubHkgd2hlbiBpbnB1dCBmb3JtYXQgaXMgWVVWNDIyICovCi0JQ1NJ X0ZJRUxEX1BMQU5BUl9ZVVY0MjIJCT0gMCwKLQlDU0lfRklFTERfUExBTkFSX1lVVjQyMAkJPSAx LAotCUNTSV9GUkFNRV9QTEFOQVJfWVVWNDIwCQk9IDIsCi0JQ1NJX0ZSQU1FX1BMQU5BUl9ZVVY0 MjIJCT0gMywKLQlDU0lfRklFTERfVVZfQ0JfWVVWNDIyCQk9IDQsCi0JQ1NJX0ZJRUxEX1VWX0NC X1lVVjQyMAkJPSA1LAotCUNTSV9GUkFNRV9VVl9DQl9ZVVY0MjAJCT0gNiwKLQlDU0lfRlJBTUVf VVZfQ0JfWVVWNDIyCQk9IDcsCi0JQ1NJX0ZJRUxEX01CX1lVVjQyMgkJPSA4LAotCUNTSV9GSUVM RF9NQl9ZVVY0MjAJCT0gOSwKLQlDU0lfRlJBTUVfTUJfWVVWNDIwCQk9IDEwLAotCUNTSV9GUkFN RV9NQl9ZVVY0MjIJCT0gMTEsCi0JQ1NJX0ZJRUxEX1VWX0NCX1lVVjQyMl8xMAk9IDEyLAotCUNT SV9GSUVMRF9VVl9DQl9ZVVY0MjBfMTAJPSAxMywKLX07Ci0KLS8qCi0gKiBjc2kgWVVWIGlucHV0 IGRhdGEgc2VxdWVuY2UKLSAqLwotZW51bSBjc2lfaW5wdXRfc2VxIHsKLQkvKiBvbmx5IHdoZW4g aW5wdXQgZm9ybWF0IGlzIFlVVjQyMiAqLwotCUNTSV9JTlBVVF9TRVFfWVVZViA9IDAsCi0JQ1NJ X0lOUFVUX1NFUV9ZVllVLAotCUNTSV9JTlBVVF9TRVFfVVlWWSwKLQlDU0lfSU5QVVRfU0VRX1ZZ VVksCi19OwotCi0jZW5kaWYgLyogX19TVU42SV9DU0lfUkVHX0hfXyAqLwpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zdW54aS9zdW42aS1jc2kvc3VuNmlfdmlkZW8uYyBiL2Ry aXZlcnMvbWVkaWEvcGxhdGZvcm0vc3VueGkvc3VuNmktY3NpL3N1bjZpX3ZpZGVvLmMKZGVsZXRl ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3YjIxNjEzOTJkMi4uMDAwMDAwMDAwMDAwCi0tLSBh L2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc3VueGkvc3VuNmktY3NpL3N1bjZpX3ZpZGVvLmMKKysr IC9kZXYvbnVsbApAQCAtMSw2ODMgKzAsMCBAQAotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEdQTC0yLjArCi0vKgotICogQ29weXJpZ2h0IChjKSAyMDExLTIwMTggTWFnZXdlbGwgRWxlY3Ry b25pY3MgQ28uLCBMdGQuIChOYW5qaW5nKQotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIEF1 dGhvcjogWW9uZyBEZW5nIDx5b25nLmRlbmdAbWFnZXdlbGwuY29tPgotICovCi0KLSNpbmNsdWRl IDxsaW51eC9vZi5oPgotCi0jaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KLSNpbmNsdWRl IDxtZWRpYS92NGwyLWV2ZW50Lmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgotI2lu Y2x1ZGUgPG1lZGlhL3Y0bDItbWMuaD4KLSNpbmNsdWRlIDxtZWRpYS92aWRlb2J1ZjItZG1hLWNv bnRpZy5oPgotI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmMi12NGwyLmg+Ci0KLSNpbmNsdWRlICJz dW42aV9jc2kuaCIKLSNpbmNsdWRlICJzdW42aV92aWRlby5oIgotCi0vKiBUaGlzIGlzIGdvdCBm cm9tIEJTUCBzb3VyY2VzLiAqLwotI2RlZmluZSBNSU5fV0lEVEgJKDMyKQotI2RlZmluZSBNSU5f SEVJR0hUCSgzMikKLSNkZWZpbmUgTUFYX1dJRFRICSg0ODAwKQotI2RlZmluZSBNQVhfSEVJR0hU CSg0ODAwKQotCi1zdHJ1Y3Qgc3VuNmlfY3NpX2J1ZmZlciB7Ci0Jc3RydWN0IHZiMl92NGwyX2J1 ZmZlcgkJdmI7Ci0Jc3RydWN0IGxpc3RfaGVhZAkJbGlzdDsKLQotCWRtYV9hZGRyX3QJCQlkbWFf YWRkcjsKLQlib29sCQkJCXF1ZXVlZF90b19jc2k7Ci19OwotCi1zdGF0aWMgY29uc3QgdTMyIHN1 cHBvcnRlZF9waXhmb3JtYXRzW10gPSB7Ci0JVjRMMl9QSVhfRk1UX1NCR0dSOCwKLQlWNEwyX1BJ WF9GTVRfU0dCUkc4LAotCVY0TDJfUElYX0ZNVF9TR1JCRzgsCi0JVjRMMl9QSVhfRk1UX1NSR0dC OCwKLQlWNEwyX1BJWF9GTVRfU0JHR1IxMCwKLQlWNEwyX1BJWF9GTVRfU0dCUkcxMCwKLQlWNEwy X1BJWF9GTVRfU0dSQkcxMCwKLQlWNEwyX1BJWF9GTVRfU1JHR0IxMCwKLQlWNEwyX1BJWF9GTVRf U0JHR1IxMiwKLQlWNEwyX1BJWF9GTVRfU0dCUkcxMiwKLQlWNEwyX1BJWF9GTVRfU0dSQkcxMiwK LQlWNEwyX1BJWF9GTVRfU1JHR0IxMiwKLQlWNEwyX1BJWF9GTVRfWVVZViwKLQlWNEwyX1BJWF9G TVRfWVZZVSwKLQlWNEwyX1BJWF9GTVRfVVlWWSwKLQlWNEwyX1BJWF9GTVRfVllVWSwKLQlWNEwy X1BJWF9GTVRfSE0xMiwKLQlWNEwyX1BJWF9GTVRfTlYxMiwKLQlWNEwyX1BJWF9GTVRfTlYyMSwK LQlWNEwyX1BJWF9GTVRfWVVWNDIwLAotCVY0TDJfUElYX0ZNVF9ZVlU0MjAsCi0JVjRMMl9QSVhf Rk1UX05WMTYsCi0JVjRMMl9QSVhfRk1UX05WNjEsCi0JVjRMMl9QSVhfRk1UX1lVVjQyMlAsCi0J VjRMMl9QSVhfRk1UX1JHQjU2NSwKLQlWNEwyX1BJWF9GTVRfUkdCNTY1WCwKLQlWNEwyX1BJWF9G TVRfSlBFRywKLX07Ci0KLXN0YXRpYyBib29sIGlzX3BpeGZvcm1hdF92YWxpZCh1bnNpZ25lZCBp bnQgcGl4Zm9ybWF0KQotewotCXVuc2lnbmVkIGludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFS UkFZX1NJWkUoc3VwcG9ydGVkX3BpeGZvcm1hdHMpOyBpKyspCi0JCWlmIChzdXBwb3J0ZWRfcGl4 Zm9ybWF0c1tpXSA9PSBwaXhmb3JtYXQpCi0JCQlyZXR1cm4gdHJ1ZTsKLQotCXJldHVybiBmYWxz ZTsKLX0KLQotc3RhdGljIHN0cnVjdCB2NGwyX3N1YmRldiAqCi1zdW42aV92aWRlb19yZW1vdGVf c3ViZGV2KHN0cnVjdCBzdW42aV92aWRlbyAqdmlkZW8sIHUzMiAqcGFkKQotewotCXN0cnVjdCBt ZWRpYV9wYWQgKnJlbW90ZTsKLQotCXJlbW90ZSA9IG1lZGlhX2VudGl0eV9yZW1vdGVfcGFkKCZ2 aWRlby0+cGFkKTsKLQotCWlmICghcmVtb3RlIHx8ICFpc19tZWRpYV9lbnRpdHlfdjRsMl9zdWJk ZXYocmVtb3RlLT5lbnRpdHkpKQotCQlyZXR1cm4gTlVMTDsKLQotCWlmIChwYWQpCi0JCSpwYWQg PSByZW1vdGUtPmluZGV4OwotCi0JcmV0dXJuIG1lZGlhX2VudGl0eV90b192NGwyX3N1YmRldihy ZW1vdGUtPmVudGl0eSk7Ci19Ci0KLXN0YXRpYyBpbnQgc3VuNmlfdmlkZW9fcXVldWVfc2V0dXAo c3RydWN0IHZiMl9xdWV1ZSAqdnEsCi0JCQkJICAgdW5zaWduZWQgaW50ICpuYnVmZmVycywKLQkJ CQkgICB1bnNpZ25lZCBpbnQgKm5wbGFuZXMsCi0JCQkJICAgdW5zaWduZWQgaW50IHNpemVzW10s Ci0JCQkJICAgc3RydWN0IGRldmljZSAqYWxsb2NfZGV2c1tdKQotewotCXN0cnVjdCBzdW42aV92 aWRlbyAqdmlkZW8gPSB2YjJfZ2V0X2Rydl9wcml2KHZxKTsKLQl1bnNpZ25lZCBpbnQgc2l6ZSA9 IHZpZGVvLT5mbXQuZm10LnBpeC5zaXplaW1hZ2U7Ci0KLQlpZiAoKm5wbGFuZXMpCi0JCXJldHVy biBzaXplc1swXSA8IHNpemUgPyAtRUlOVkFMIDogMDsKLQotCSpucGxhbmVzID0gMTsKLQlzaXpl c1swXSA9IHNpemU7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzdW42aV92aWRlb19i dWZmZXJfcHJlcGFyZShzdHJ1Y3QgdmIyX2J1ZmZlciAqdmIpCi17Ci0Jc3RydWN0IHZiMl92NGwy X2J1ZmZlciAqdmJ1ZiA9IHRvX3ZiMl92NGwyX2J1ZmZlcih2Yik7Ci0Jc3RydWN0IHN1bjZpX2Nz aV9idWZmZXIgKmJ1ZiA9Ci0JCQljb250YWluZXJfb2YodmJ1Ziwgc3RydWN0IHN1bjZpX2NzaV9i dWZmZXIsIHZiKTsKLQlzdHJ1Y3Qgc3VuNmlfdmlkZW8gKnZpZGVvID0gdmIyX2dldF9kcnZfcHJp dih2Yi0+dmIyX3F1ZXVlKTsKLQl1bnNpZ25lZCBsb25nIHNpemUgPSB2aWRlby0+Zm10LmZtdC5w aXguc2l6ZWltYWdlOwotCi0JaWYgKHZiMl9wbGFuZV9zaXplKHZiLCAwKSA8IHNpemUpIHsKLQkJ djRsMl9lcnIodmlkZW8tPnZkZXYudjRsMl9kZXYsICJidWZmZXIgdG9vIHNtYWxsICglbHUgPCAl bHUpXG4iLAotCQkJIHZiMl9wbGFuZV9zaXplKHZiLCAwKSwgc2l6ZSk7Ci0JCXJldHVybiAtRUlO VkFMOwotCX0KLQotCXZiMl9zZXRfcGxhbmVfcGF5bG9hZCh2YiwgMCwgc2l6ZSk7Ci0KLQlidWYt PmRtYV9hZGRyID0gdmIyX2RtYV9jb250aWdfcGxhbmVfZG1hX2FkZHIodmIsIDApOwotCi0JdmJ1 Zi0+ZmllbGQgPSB2aWRlby0+Zm10LmZtdC5waXguZmllbGQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQot c3RhdGljIGludCBzdW42aV92aWRlb19zdGFydF9zdHJlYW1pbmcoc3RydWN0IHZiMl9xdWV1ZSAq dnEsIHVuc2lnbmVkIGludCBjb3VudCkKLXsKLQlzdHJ1Y3Qgc3VuNmlfdmlkZW8gKnZpZGVvID0g dmIyX2dldF9kcnZfcHJpdih2cSk7Ci0Jc3RydWN0IHN1bjZpX2NzaV9idWZmZXIgKmJ1ZjsKLQlz dHJ1Y3Qgc3VuNmlfY3NpX2J1ZmZlciAqbmV4dF9idWY7Ci0Jc3RydWN0IHN1bjZpX2NzaV9jb25m aWcgY29uZmlnOwotCXN0cnVjdCB2NGwyX3N1YmRldiAqc3ViZGV2OwotCXVuc2lnbmVkIGxvbmcg ZmxhZ3M7Ci0JaW50IHJldDsKLQotCXZpZGVvLT5zZXF1ZW5jZSA9IDA7Ci0KLQlyZXQgPSBtZWRp YV9waXBlbGluZV9zdGFydCgmdmlkZW8tPnZkZXYuZW50aXR5LCAmdmlkZW8tPnZkZXYucGlwZSk7 Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gY2xlYXJfZG1hX3F1ZXVlOwotCi0JaWYgKHZpZGVvLT5t YnVzX2NvZGUgPT0gMCkgewotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIHN0b3BfbWVkaWFfcGlw ZWxpbmU7Ci0JfQotCi0Jc3ViZGV2ID0gc3VuNmlfdmlkZW9fcmVtb3RlX3N1YmRldih2aWRlbywg TlVMTCk7Ci0JaWYgKCFzdWJkZXYpIHsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBzdG9wX21l ZGlhX3BpcGVsaW5lOwotCX0KLQotCWNvbmZpZy5waXhlbGZvcm1hdCA9IHZpZGVvLT5mbXQuZm10 LnBpeC5waXhlbGZvcm1hdDsKLQljb25maWcuY29kZSA9IHZpZGVvLT5tYnVzX2NvZGU7Ci0JY29u ZmlnLmZpZWxkID0gdmlkZW8tPmZtdC5mbXQucGl4LmZpZWxkOwotCWNvbmZpZy53aWR0aCA9IHZp ZGVvLT5mbXQuZm10LnBpeC53aWR0aDsKLQljb25maWcuaGVpZ2h0ID0gdmlkZW8tPmZtdC5mbXQu cGl4LmhlaWdodDsKLQotCXJldCA9IHN1bjZpX2NzaV91cGRhdGVfY29uZmlnKHZpZGVvLT5jc2ks ICZjb25maWcpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIHN0b3BfbWVkaWFfcGlwZWxpbmU7Ci0K LQlzcGluX2xvY2tfaXJxc2F2ZSgmdmlkZW8tPmRtYV9xdWV1ZV9sb2NrLCBmbGFncyk7Ci0KLQli dWYgPSBsaXN0X2ZpcnN0X2VudHJ5KCZ2aWRlby0+ZG1hX3F1ZXVlLAotCQkJICAgICAgIHN0cnVj dCBzdW42aV9jc2lfYnVmZmVyLCBsaXN0KTsKLQlidWYtPnF1ZXVlZF90b19jc2kgPSB0cnVlOwot CXN1bjZpX2NzaV91cGRhdGVfYnVmX2FkZHIodmlkZW8tPmNzaSwgYnVmLT5kbWFfYWRkcik7Ci0K LQlzdW42aV9jc2lfc2V0X3N0cmVhbSh2aWRlby0+Y3NpLCB0cnVlKTsKLQotCS8qCi0JICogQ1NJ IHdpbGwgbG9va3VwIHRoZSBuZXh0IGRtYSBidWZmZXIgZm9yIG5leHQgZnJhbWUgYmVmb3JlIHRo ZQotCSAqIHRoZSBjdXJyZW50IGZyYW1lIGRvbmUgSVJRIHRyaWdnZXJlZC4gVGhpcyBpcyBub3Qg ZG9jdW1lbnRlZAotCSAqIGJ1dCByZXBvcnRlZCBieSBPbmTFmWVqIEppcm1hbi4KLQkgKiBUaGUg QlNQIGNvZGUgaGFzIHdvcmthcm91bmQgZm9yIHRoaXMgdG9vLiBJdCBza2lwIHRvIG1hcmsgdGhl Ci0JICogZmlyc3QgYnVmZmVyIGFzIGZyYW1lIGRvbmUgZm9yIFZCMiBhbmQgcGFzcyB0aGUgc2Vj b25kIGJ1ZmZlcgotCSAqIHRvIENTSSBpbiB0aGUgZmlyc3QgZnJhbWUgZG9uZSBJU1IgY2FsbC4g VGhlbiBpbiBzZWNvbmQgZnJhbWUKLQkgKiBkb25lIElTUiBjYWxsLCBpdCBtYXJrIHRoZSBmaXJz dCBidWZmZXIgYXMgZnJhbWUgZG9uZSBmb3IgVkIyCi0JICogYW5kIHBhc3MgdGhlIHRoaXJkIGJ1 ZmZlciB0byBDU0kuIEFuZCBzbyBvbi4gVGhlIGJhZCB0aGluZyBpcwotCSAqIHRoYXQgdGhlIGZp cnN0IGJ1ZmZlciB3aWxsIGJlIHdyaXR0ZW4gdHdpY2UgYW5kIHRoZSBmaXJzdCBmcmFtZQotCSAq IGlzIGRyb3BwZWQgZXZlbiB0aGUgcXVldWVkIGJ1ZmZlciBpcyBzdWZmaWNpZW50LgotCSAqIFNv LCBJIG1ha2Ugc29tZSBpbXByb3ZlbWVudCBoZXJlLiBQYXNzIHRoZSBuZXh0IGJ1ZmZlciB0byBD U0kKLQkgKiBqdXN0IGZvbGxvdyBzdGFydGluZyB0aGUgQ1NJLiBJbiB0aGlzIGNhc2UsIHRoZSBm aXJzdCBmcmFtZQotCSAqIHdpbGwgYmUgc3RvcmVkIGluIGZpcnN0IGJ1ZmZlciwgc2Vjb25kIGZy YW1lIGluIHNlY29uZCBidWZmZXIuCi0JICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBhdm9pZCBk cm9wcGluZyB0aGUgZmlyc3QgZnJhbWUsIGl0Ci0JICogd291bGQgYWxzbyBkcm9wIGZyYW1lIHdo ZW4gbGFja2luZyBvZiBxdWV1ZWQgYnVmZmVyLgotCSAqLwotCW5leHRfYnVmID0gbGlzdF9uZXh0 X2VudHJ5KGJ1ZiwgbGlzdCk7Ci0JbmV4dF9idWYtPnF1ZXVlZF90b19jc2kgPSB0cnVlOwotCXN1 bjZpX2NzaV91cGRhdGVfYnVmX2FkZHIodmlkZW8tPmNzaSwgbmV4dF9idWYtPmRtYV9hZGRyKTsK LQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZpZGVvLT5kbWFfcXVldWVfbG9jaywgZmxhZ3Mp OwotCi0JcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChzdWJkZXYsIHZpZGVvLCBzX3N0cmVhbSwgMSk7 Ci0JaWYgKHJldCAmJiByZXQgIT0gLUVOT0lPQ1RMQ01EKQotCQlnb3RvIHN0b3BfY3NpX3N0cmVh bTsKLQotCXJldHVybiAwOwotCi1zdG9wX2NzaV9zdHJlYW06Ci0Jc3VuNmlfY3NpX3NldF9zdHJl YW0odmlkZW8tPmNzaSwgZmFsc2UpOwotc3RvcF9tZWRpYV9waXBlbGluZToKLQltZWRpYV9waXBl bGluZV9zdG9wKCZ2aWRlby0+dmRldi5lbnRpdHkpOwotY2xlYXJfZG1hX3F1ZXVlOgotCXNwaW5f bG9ja19pcnFzYXZlKCZ2aWRlby0+ZG1hX3F1ZXVlX2xvY2ssIGZsYWdzKTsKLQlsaXN0X2Zvcl9l YWNoX2VudHJ5KGJ1ZiwgJnZpZGVvLT5kbWFfcXVldWUsIGxpc3QpCi0JCXZiMl9idWZmZXJfZG9u ZSgmYnVmLT52Yi52YjJfYnVmLCBWQjJfQlVGX1NUQVRFX1FVRVVFRCk7Ci0JSU5JVF9MSVNUX0hF QUQoJnZpZGVvLT5kbWFfcXVldWUpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZpZGVvLT5k bWFfcXVldWVfbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQg c3VuNmlfdmlkZW9fc3RvcF9zdHJlYW1pbmcoc3RydWN0IHZiMl9xdWV1ZSAqdnEpCi17Ci0Jc3Ry dWN0IHN1bjZpX3ZpZGVvICp2aWRlbyA9IHZiMl9nZXRfZHJ2X3ByaXYodnEpOwotCXN0cnVjdCB2 NGwyX3N1YmRldiAqc3ViZGV2OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IHN1bjZp X2NzaV9idWZmZXIgKmJ1ZjsKLQotCXN1YmRldiA9IHN1bjZpX3ZpZGVvX3JlbW90ZV9zdWJkZXYo dmlkZW8sIE5VTEwpOwotCWlmIChzdWJkZXYpCi0JCXY0bDJfc3ViZGV2X2NhbGwoc3ViZGV2LCB2 aWRlbywgc19zdHJlYW0sIDApOwotCi0Jc3VuNmlfY3NpX3NldF9zdHJlYW0odmlkZW8tPmNzaSwg ZmFsc2UpOwotCi0JbWVkaWFfcGlwZWxpbmVfc3RvcCgmdmlkZW8tPnZkZXYuZW50aXR5KTsKLQot CS8qIFJlbGVhc2UgYWxsIGFjdGl2ZSBidWZmZXJzICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnZp ZGVvLT5kbWFfcXVldWVfbG9jaywgZmxhZ3MpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoYnVmLCAm dmlkZW8tPmRtYV9xdWV1ZSwgbGlzdCkKLQkJdmIyX2J1ZmZlcl9kb25lKCZidWYtPnZiLnZiMl9i dWYsIFZCMl9CVUZfU1RBVEVfRVJST1IpOwotCUlOSVRfTElTVF9IRUFEKCZ2aWRlby0+ZG1hX3F1 ZXVlKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2aWRlby0+ZG1hX3F1ZXVlX2xvY2ssIGZs YWdzKTsKLX0KLQotc3RhdGljIHZvaWQgc3VuNmlfdmlkZW9fYnVmZmVyX3F1ZXVlKHN0cnVjdCB2 YjJfYnVmZmVyICp2YikKLXsKLQlzdHJ1Y3QgdmIyX3Y0bDJfYnVmZmVyICp2YnVmID0gdG9fdmIy X3Y0bDJfYnVmZmVyKHZiKTsKLQlzdHJ1Y3Qgc3VuNmlfY3NpX2J1ZmZlciAqYnVmID0KLQkJCWNv bnRhaW5lcl9vZih2YnVmLCBzdHJ1Y3Qgc3VuNmlfY3NpX2J1ZmZlciwgdmIpOwotCXN0cnVjdCBz dW42aV92aWRlbyAqdmlkZW8gPSB2YjJfZ2V0X2Rydl9wcml2KHZiLT52YjJfcXVldWUpOwotCXVu c2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmdmlkZW8tPmRtYV9xdWV1 ZV9sb2NrLCBmbGFncyk7Ci0JYnVmLT5xdWV1ZWRfdG9fY3NpID0gZmFsc2U7Ci0JbGlzdF9hZGRf dGFpbCgmYnVmLT5saXN0LCAmdmlkZW8tPmRtYV9xdWV1ZSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVz dG9yZSgmdmlkZW8tPmRtYV9xdWV1ZV9sb2NrLCBmbGFncyk7Ci19Ci0KLXZvaWQgc3VuNmlfdmlk ZW9fZnJhbWVfZG9uZShzdHJ1Y3Qgc3VuNmlfdmlkZW8gKnZpZGVvKQotewotCXN0cnVjdCBzdW42 aV9jc2lfYnVmZmVyICpidWY7Ci0Jc3RydWN0IHN1bjZpX2NzaV9idWZmZXIgKm5leHRfYnVmOwot CXN0cnVjdCB2YjJfdjRsMl9idWZmZXIgKnZidWY7Ci0KLQlzcGluX2xvY2soJnZpZGVvLT5kbWFf cXVldWVfbG9jayk7Ci0KLQlidWYgPSBsaXN0X2ZpcnN0X2VudHJ5KCZ2aWRlby0+ZG1hX3F1ZXVl LAotCQkJICAgICAgIHN0cnVjdCBzdW42aV9jc2lfYnVmZmVyLCBsaXN0KTsKLQlpZiAobGlzdF9p c19sYXN0KCZidWYtPmxpc3QsICZ2aWRlby0+ZG1hX3F1ZXVlKSkgewotCQlkZXZfZGJnKHZpZGVv LT5jc2ktPmRldiwgIkZyYW1lIGRyb3BwZWQhXG4iKTsKLQkJZ290byB1bmxvY2s7Ci0JfQotCi0J bmV4dF9idWYgPSBsaXN0X25leHRfZW50cnkoYnVmLCBsaXN0KTsKLQkvKiBJZiBhIG5ldyBidWZm ZXIgKCNuZXh0X2J1ZikgaGFkIG5vdCBiZWVuIHF1ZXVlZCB0byBDU0ksIHRoZSBvbGQKLQkgKiBi dWZmZXIgKCNidWYpIGlzIHN0aWxsIGhvbGRpbmcgYnkgQ1NJIGZvciBzdG9yaW5nIHRoZSBuZXh0 Ci0JICogZnJhbWUuIFNvLCB3ZSBxdWV1ZSBhIG5ldyBidWZmZXIgKCNuZXh0X2J1ZikgdG8gQ1NJ IHRoZW4gd2FpdAotCSAqIGZvciBuZXh0IElTUiBjYWxsLgotCSAqLwotCWlmICghbmV4dF9idWYt PnF1ZXVlZF90b19jc2kpIHsKLQkJbmV4dF9idWYtPnF1ZXVlZF90b19jc2kgPSB0cnVlOwotCQlz dW42aV9jc2lfdXBkYXRlX2J1Zl9hZGRyKHZpZGVvLT5jc2ksIG5leHRfYnVmLT5kbWFfYWRkcik7 Ci0JCWRldl9kYmcodmlkZW8tPmNzaS0+ZGV2LCAiRnJhbWUgZHJvcHBlZCFcbiIpOwotCQlnb3Rv IHVubG9jazsKLQl9Ci0KLQlsaXN0X2RlbCgmYnVmLT5saXN0KTsKLQl2YnVmID0gJmJ1Zi0+dmI7 Ci0JdmJ1Zi0+dmIyX2J1Zi50aW1lc3RhbXAgPSBrdGltZV9nZXRfbnMoKTsKLQl2YnVmLT5zZXF1 ZW5jZSA9IHZpZGVvLT5zZXF1ZW5jZTsKLQl2YjJfYnVmZmVyX2RvbmUoJnZidWYtPnZiMl9idWYs IFZCMl9CVUZfU1RBVEVfRE9ORSk7Ci0KLQkvKiBQcmVwYXJlIGJ1ZmZlciBmb3IgbmV4dCBmcmFt ZSBidXQgb25lLiAgKi8KLQlpZiAoIWxpc3RfaXNfbGFzdCgmbmV4dF9idWYtPmxpc3QsICZ2aWRl by0+ZG1hX3F1ZXVlKSkgewotCQluZXh0X2J1ZiA9IGxpc3RfbmV4dF9lbnRyeShuZXh0X2J1Ziwg bGlzdCk7Ci0JCW5leHRfYnVmLT5xdWV1ZWRfdG9fY3NpID0gdHJ1ZTsKLQkJc3VuNmlfY3NpX3Vw ZGF0ZV9idWZfYWRkcih2aWRlby0+Y3NpLCBuZXh0X2J1Zi0+ZG1hX2FkZHIpOwotCX0gZWxzZSB7 Ci0JCWRldl9kYmcodmlkZW8tPmNzaS0+ZGV2LCAiTmV4dCBmcmFtZSB3aWxsIGJlIGRyb3BwZWQh XG4iKTsKLQl9Ci0KLXVubG9jazoKLQl2aWRlby0+c2VxdWVuY2UrKzsKLQlzcGluX3VubG9jaygm dmlkZW8tPmRtYV9xdWV1ZV9sb2NrKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCB2YjJfb3Bz IHN1bjZpX2NzaV92YjJfb3BzID0gewotCS5xdWV1ZV9zZXR1cAkJPSBzdW42aV92aWRlb19xdWV1 ZV9zZXR1cCwKLQkud2FpdF9wcmVwYXJlCQk9IHZiMl9vcHNfd2FpdF9wcmVwYXJlLAotCS53YWl0 X2ZpbmlzaAkJPSB2YjJfb3BzX3dhaXRfZmluaXNoLAotCS5idWZfcHJlcGFyZQkJPSBzdW42aV92 aWRlb19idWZmZXJfcHJlcGFyZSwKLQkuc3RhcnRfc3RyZWFtaW5nCT0gc3VuNmlfdmlkZW9fc3Rh cnRfc3RyZWFtaW5nLAotCS5zdG9wX3N0cmVhbWluZwkJPSBzdW42aV92aWRlb19zdG9wX3N0cmVh bWluZywKLQkuYnVmX3F1ZXVlCQk9IHN1bjZpX3ZpZGVvX2J1ZmZlcl9xdWV1ZSwKLX07Ci0KLXN0 YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAot CQkJICAgc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwKQotewotCXN0cnVjdCBzdW42aV92aWRl byAqdmlkZW8gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwotCi0Jc3Ryc2NweShjYXAtPmRyaXZlciwg InN1bjZpLXZpZGVvIiwgc2l6ZW9mKGNhcC0+ZHJpdmVyKSk7Ci0Jc3Ryc2NweShjYXAtPmNhcmQs IHZpZGVvLT52ZGV2Lm5hbWUsIHNpemVvZihjYXAtPmNhcmQpKTsKLQlzbnByaW50ZihjYXAtPmJ1 c19pbmZvLCBzaXplb2YoY2FwLT5idXNfaW5mbyksICJwbGF0Zm9ybTolcyIsCi0JCSB2aWRlby0+ Y3NpLT5kZXYtPm9mX25vZGUtPm5hbWUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQg dmlkaW9jX2VudW1fZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0J CQkJICAgc3RydWN0IHY0bDJfZm10ZGVzYyAqZikKLXsKLQl1MzIgaW5kZXggPSBmLT5pbmRleDsK LQotCWlmIChpbmRleCA+PSBBUlJBWV9TSVpFKHN1cHBvcnRlZF9waXhmb3JtYXRzKSkKLQkJcmV0 dXJuIC1FSU5WQUw7Ci0KLQlmLT5waXhlbGZvcm1hdCA9IHN1cHBvcnRlZF9waXhmb3JtYXRzW2lu ZGV4XTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19nX2ZtdF92aWRfY2Fw KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAq Zm10KQotewotCXN0cnVjdCBzdW42aV92aWRlbyAqdmlkZW8gPSB2aWRlb19kcnZkYXRhKGZpbGUp OwotCi0JKmZtdCA9IHZpZGVvLT5mbXQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBz dW42aV92aWRlb190cnlfZm10KHN0cnVjdCBzdW42aV92aWRlbyAqdmlkZW8sCi0JCQkgICAgICAg c3RydWN0IHY0bDJfZm9ybWF0ICpmKQotewotCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeGZt dCA9ICZmLT5mbXQucGl4OwotCWludCBicHA7Ci0KLQlpZiAoIWlzX3BpeGZvcm1hdF92YWxpZChw aXhmbXQtPnBpeGVsZm9ybWF0KSkKLQkJcGl4Zm10LT5waXhlbGZvcm1hdCA9IHN1cHBvcnRlZF9w aXhmb3JtYXRzWzBdOwotCi0JdjRsX2JvdW5kX2FsaWduX2ltYWdlKCZwaXhmbXQtPndpZHRoLCBN SU5fV0lEVEgsIE1BWF9XSURUSCwgMSwKLQkJCSAgICAgICZwaXhmbXQtPmhlaWdodCwgTUlOX0hF SUdIVCwgTUFYX1dJRFRILCAxLCAxKTsKLQotCWJwcCA9IHN1bjZpX2NzaV9nZXRfYnBwKHBpeGZt dC0+cGl4ZWxmb3JtYXQpOwotCXBpeGZtdC0+Ynl0ZXNwZXJsaW5lID0gKHBpeGZtdC0+d2lkdGgg KiBicHApID4+IDM7Ci0JcGl4Zm10LT5zaXplaW1hZ2UgPSBwaXhmbXQtPmJ5dGVzcGVybGluZSAq IHBpeGZtdC0+aGVpZ2h0OwotCi0JaWYgKHBpeGZtdC0+ZmllbGQgPT0gVjRMMl9GSUVMRF9BTlkp Ci0JCXBpeGZtdC0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7Ci0KLQlwaXhmbXQtPmNvbG9yc3Bh Y2UgPSBWNEwyX0NPTE9SU1BBQ0VfUkFXOwotCXBpeGZtdC0+eWNiY3JfZW5jID0gVjRMMl9ZQ0JD Ul9FTkNfREVGQVVMVDsKLQlwaXhmbXQtPnF1YW50aXphdGlvbiA9IFY0TDJfUVVBTlRJWkFUSU9O X0RFRkFVTFQ7Ci0JcGl4Zm10LT54ZmVyX2Z1bmMgPSBWNEwyX1hGRVJfRlVOQ19ERUZBVUxUOwot Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc3VuNmlfdmlkZW9fc2V0X2ZtdChzdHJ1Y3Qg c3VuNmlfdmlkZW8gKnZpZGVvLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCi17Ci0JaW50IHJldDsK LQotCXJldCA9IHN1bjZpX3ZpZGVvX3RyeV9mbXQodmlkZW8sIGYpOwotCWlmIChyZXQpCi0JCXJl dHVybiByZXQ7Ci0KLQl2aWRlby0+Zm10ID0gKmY7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGlj IGludCB2aWRpb2Nfc19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwK LQkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCi17Ci0Jc3RydWN0IHN1bjZpX3ZpZGVvICp2aWRl byA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0KLQlpZiAodmIyX2lzX2J1c3koJnZpZGVvLT52YjJf dmlkcSkpCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlyZXR1cm4gc3VuNmlfdmlkZW9fc2V0X2ZtdCh2 aWRlbywgZik7Ci19Ci0KLXN0YXRpYyBpbnQgdmlkaW9jX3RyeV9mbXRfdmlkX2NhcChzdHJ1Y3Qg ZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJCQkgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKLXsK LQlzdHJ1Y3Qgc3VuNmlfdmlkZW8gKnZpZGVvID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQotCXJl dHVybiBzdW42aV92aWRlb190cnlfZm10KHZpZGVvLCBmKTsKLX0KLQotc3RhdGljIGludCB2aWRp b2NfZW51bV9pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCi0JCQkgICAgIHN0cnVj dCB2NGwyX2lucHV0ICppbnApCi17Ci0JaWYgKGlucC0+aW5kZXggIT0gMCkKLQkJcmV0dXJuIC1F SU5WQUw7Ci0KLQlzdHJzY3B5KGlucC0+bmFtZSwgImNhbWVyYSIsIHNpemVvZihpbnAtPm5hbWUp KTsKLQlpbnAtPnR5cGUgPSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBOwotCi0JcmV0dXJuIDA7Ci19 Ci0KLXN0YXRpYyBpbnQgdmlkaW9jX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZo LCB1bnNpZ25lZCBpbnQgKmkpCi17Ci0JKmkgPSAwOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRp YyBpbnQgdmlkaW9jX3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCB1bnNpZ25l ZCBpbnQgaSkKLXsKLQlpZiAoaSAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJldHVybiAw OwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIHN1bjZpX3ZpZGVvX2lv Y3RsX29wcyA9IHsKLQkudmlkaW9jX3F1ZXJ5Y2FwCQk9IHZpZGlvY19xdWVyeWNhcCwKLQkudmlk aW9jX2VudW1fZm10X3ZpZF9jYXAJPSB2aWRpb2NfZW51bV9mbXRfdmlkX2NhcCwKLQkudmlkaW9j X2dfZm10X3ZpZF9jYXAJCT0gdmlkaW9jX2dfZm10X3ZpZF9jYXAsCi0JLnZpZGlvY19zX2ZtdF92 aWRfY2FwCQk9IHZpZGlvY19zX2ZtdF92aWRfY2FwLAotCS52aWRpb2NfdHJ5X2ZtdF92aWRfY2Fw CQk9IHZpZGlvY190cnlfZm10X3ZpZF9jYXAsCi0KLQkudmlkaW9jX2VudW1faW5wdXQJCT0gdmlk aW9jX2VudW1faW5wdXQsCi0JLnZpZGlvY19zX2lucHV0CQkJPSB2aWRpb2Nfc19pbnB1dCwKLQku dmlkaW9jX2dfaW5wdXQJCQk9IHZpZGlvY19nX2lucHV0LAotCi0JLnZpZGlvY19yZXFidWZzCQkJ PSB2YjJfaW9jdGxfcmVxYnVmcywKLQkudmlkaW9jX3F1ZXJ5YnVmCQk9IHZiMl9pb2N0bF9xdWVy eWJ1ZiwKLQkudmlkaW9jX3FidWYJCQk9IHZiMl9pb2N0bF9xYnVmLAotCS52aWRpb2NfZXhwYnVm CQkJPSB2YjJfaW9jdGxfZXhwYnVmLAotCS52aWRpb2NfZHFidWYJCQk9IHZiMl9pb2N0bF9kcWJ1 ZiwKLQkudmlkaW9jX2NyZWF0ZV9idWZzCQk9IHZiMl9pb2N0bF9jcmVhdGVfYnVmcywKLQkudmlk aW9jX3ByZXBhcmVfYnVmCQk9IHZiMl9pb2N0bF9wcmVwYXJlX2J1ZiwKLQkudmlkaW9jX3N0cmVh bW9uCQk9IHZiMl9pb2N0bF9zdHJlYW1vbiwKLQkudmlkaW9jX3N0cmVhbW9mZgkJPSB2YjJfaW9j dGxfc3RyZWFtb2ZmLAotCi0JLnZpZGlvY19sb2dfc3RhdHVzCQk9IHY0bDJfY3RybF9sb2dfc3Rh dHVzLAotCS52aWRpb2Nfc3Vic2NyaWJlX2V2ZW50CQk9IHY0bDJfY3RybF9zdWJzY3JpYmVfZXZl bnQsCi0JLnZpZGlvY191bnN1YnNjcmliZV9ldmVudAk9IHY0bDJfZXZlbnRfdW5zdWJzY3JpYmUs Ci19OwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogVjRMMiBmaWxlIG9wZXJhdGlvbnMK LSAqLwotc3RhdGljIGludCBzdW42aV92aWRlb19vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQotewot CXN0cnVjdCBzdW42aV92aWRlbyAqdmlkZW8gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwotCWludCBy ZXQ7Ci0KLQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ2aWRlby0+bG9jaykpCi0JCXJl dHVybiAtRVJFU1RBUlRTWVM7Ci0KLQlyZXQgPSB2NGwyX2ZoX29wZW4oZmlsZSk7Ci0JaWYgKHJl dCA8IDApCi0JCWdvdG8gdW5sb2NrOwotCi0JcmV0ID0gdjRsMl9waXBlbGluZV9wbV9nZXQoJnZp ZGVvLT52ZGV2LmVudGl0eSk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gZmhfcmVsZWFzZTsKLQot CS8qIGNoZWNrIGlmIGFscmVhZHkgcG93ZXJlZCAqLwotCWlmICghdjRsMl9maF9pc19zaW5ndWxh cl9maWxlKGZpbGUpKSB7Ci0JCXJldCA9IC1FQlVTWTsKLQkJZ290byB1bmxvY2s7Ci0JfQotCi0J cmV0ID0gc3VuNmlfY3NpX3NldF9wb3dlcih2aWRlby0+Y3NpLCB0cnVlKTsKLQlpZiAocmV0IDwg MCkKLQkJZ290byBmaF9yZWxlYXNlOwotCi0JbXV0ZXhfdW5sb2NrKCZ2aWRlby0+bG9jayk7Ci0J cmV0dXJuIDA7Ci0KLWZoX3JlbGVhc2U6Ci0JdjRsMl9maF9yZWxlYXNlKGZpbGUpOwotdW5sb2Nr OgotCW11dGV4X3VubG9jaygmdmlkZW8tPmxvY2spOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRp YyBpbnQgc3VuNmlfdmlkZW9fY2xvc2Uoc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IHN1 bjZpX3ZpZGVvICp2aWRlbyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0JYm9vbCBsYXN0X2ZoOwot Ci0JbXV0ZXhfbG9jaygmdmlkZW8tPmxvY2spOwotCi0JbGFzdF9maCA9IHY0bDJfZmhfaXNfc2lu Z3VsYXJfZmlsZShmaWxlKTsKLQotCV92YjJfZm9wX3JlbGVhc2UoZmlsZSwgTlVMTCk7Ci0KLQl2 NGwyX3BpcGVsaW5lX3BtX3B1dCgmdmlkZW8tPnZkZXYuZW50aXR5KTsKLQotCWlmIChsYXN0X2Zo KQotCQlzdW42aV9jc2lfc2V0X3Bvd2VyKHZpZGVvLT5jc2ksIGZhbHNlKTsKLQotCW11dGV4X3Vu bG9jaygmdmlkZW8tPmxvY2spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1 Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgc3VuNmlfdmlkZW9fZm9wcyA9IHsKLQkub3duZXIJCT0g VEhJU19NT0RVTEUsCi0JLm9wZW4JCT0gc3VuNmlfdmlkZW9fb3BlbiwKLQkucmVsZWFzZQk9IHN1 bjZpX3ZpZGVvX2Nsb3NlLAotCS51bmxvY2tlZF9pb2N0bAk9IHZpZGVvX2lvY3RsMiwKLQkubW1h cAkJPSB2YjJfZm9wX21tYXAsCi0JLnBvbGwJCT0gdmIyX2ZvcF9wb2xsCi19OwotCi0vKiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQotICogTWVkaWEgT3BlcmF0aW9ucwotICovCi1zdGF0aWMgaW50IHN1 bjZpX3ZpZGVvX2xpbmtfdmFsaWRhdGVfZ2V0X2Zvcm1hdChzdHJ1Y3QgbWVkaWFfcGFkICpwYWQs Ci0JCQkJCQlzdHJ1Y3QgdjRsMl9zdWJkZXZfZm9ybWF0ICpmbXQpCi17Ci0JaWYgKGlzX21lZGlh X2VudGl0eV92NGwyX3N1YmRldihwYWQtPmVudGl0eSkpIHsKLQkJc3RydWN0IHY0bDJfc3ViZGV2 ICpzZCA9Ci0JCQkJbWVkaWFfZW50aXR5X3RvX3Y0bDJfc3ViZGV2KHBhZC0+ZW50aXR5KTsKLQot CQlmbXQtPndoaWNoID0gVjRMMl9TVUJERVZfRk9STUFUX0FDVElWRTsKLQkJZm10LT5wYWQgPSBw YWQtPmluZGV4OwotCQlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbChzZCwgcGFkLCBnZXRfZm10LCBO VUxMLCBmbXQpOwotCX0KLQotCXJldHVybiAtRUlOVkFMOwotfQotCi1zdGF0aWMgaW50IHN1bjZp X3ZpZGVvX2xpbmtfdmFsaWRhdGUoc3RydWN0IG1lZGlhX2xpbmsgKmxpbmspCi17Ci0Jc3RydWN0 IHZpZGVvX2RldmljZSAqdmRldiA9IGNvbnRhaW5lcl9vZihsaW5rLT5zaW5rLT5lbnRpdHksCi0J CQkJCQkgc3RydWN0IHZpZGVvX2RldmljZSwgZW50aXR5KTsKLQlzdHJ1Y3Qgc3VuNmlfdmlkZW8g KnZpZGVvID0gdmlkZW9fZ2V0X2RydmRhdGEodmRldik7Ci0Jc3RydWN0IHY0bDJfc3ViZGV2X2Zv cm1hdCBzb3VyY2VfZm10OwotCWludCByZXQ7Ci0KLQl2aWRlby0+bWJ1c19jb2RlID0gMDsKLQot CWlmICghbWVkaWFfZW50aXR5X3JlbW90ZV9wYWQobGluay0+c2luay0+ZW50aXR5LT5wYWRzKSkg ewotCQlkZXZfaW5mbyh2aWRlby0+Y3NpLT5kZXYsCi0JCQkgInZpZGVvIG5vZGUgJXMgcGFkIG5v dCBjb25uZWN0ZWRcbiIsIHZkZXYtPm5hbWUpOwotCQlyZXR1cm4gLUVOT0xJTks7Ci0JfQotCi0J cmV0ID0gc3VuNmlfdmlkZW9fbGlua192YWxpZGF0ZV9nZXRfZm9ybWF0KGxpbmstPnNvdXJjZSwg JnNvdXJjZV9mbXQpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JaWYgKCFzdW42 aV9jc2lfaXNfZm9ybWF0X3N1cHBvcnRlZCh2aWRlby0+Y3NpLAotCQkJCQkgICB2aWRlby0+Zm10 LmZtdC5waXgucGl4ZWxmb3JtYXQsCi0JCQkJCSAgIHNvdXJjZV9mbXQuZm9ybWF0LmNvZGUpKSB7 Ci0JCWRldl9lcnIodmlkZW8tPmNzaS0+ZGV2LAotCQkJIlVuc3VwcG9ydGVkIHBpeGZvcm1hdDog MHgleCB3aXRoIG1idXMgY29kZTogMHgleCFcbiIsCi0JCQl2aWRlby0+Zm10LmZtdC5waXgucGl4 ZWxmb3JtYXQsCi0JCQlzb3VyY2VfZm10LmZvcm1hdC5jb2RlKTsKLQkJcmV0dXJuIC1FUElQRTsK LQl9Ci0KLQlpZiAoc291cmNlX2ZtdC5mb3JtYXQud2lkdGggIT0gdmlkZW8tPmZtdC5mbXQucGl4 LndpZHRoIHx8Ci0JICAgIHNvdXJjZV9mbXQuZm9ybWF0LmhlaWdodCAhPSB2aWRlby0+Zm10LmZt dC5waXguaGVpZ2h0KSB7Ci0JCWRldl9lcnIodmlkZW8tPmNzaS0+ZGV2LAotCQkJIldyb25nIHdp ZHRoIG9yIGhlaWdodCAldXgldSAoJXV4JXUgZXhwZWN0ZWQpXG4iLAotCQkJdmlkZW8tPmZtdC5m bXQucGl4LndpZHRoLCB2aWRlby0+Zm10LmZtdC5waXguaGVpZ2h0LAotCQkJc291cmNlX2ZtdC5m b3JtYXQud2lkdGgsIHNvdXJjZV9mbXQuZm9ybWF0LmhlaWdodCk7Ci0JCXJldHVybiAtRVBJUEU7 Ci0JfQotCi0JdmlkZW8tPm1idXNfY29kZSA9IHNvdXJjZV9mbXQuZm9ybWF0LmNvZGU7Ci0KLQly ZXR1cm4gMDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBtZWRpYV9lbnRpdHlfb3BlcmF0aW9u cyBzdW42aV92aWRlb19tZWRpYV9vcHMgPSB7Ci0JLmxpbmtfdmFsaWRhdGUgPSBzdW42aV92aWRl b19saW5rX3ZhbGlkYXRlCi19OwotCi1pbnQgc3VuNmlfdmlkZW9faW5pdChzdHJ1Y3Qgc3VuNmlf dmlkZW8gKnZpZGVvLCBzdHJ1Y3Qgc3VuNmlfY3NpICpjc2ksCi0JCSAgICAgY29uc3QgY2hhciAq bmFtZSkKLXsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gJnZpZGVvLT52ZGV2OwotCXN0 cnVjdCB2YjJfcXVldWUgKnZpZHEgPSAmdmlkZW8tPnZiMl92aWRxOwotCXN0cnVjdCB2NGwyX2Zv cm1hdCBmbXQgPSB7IDAgfTsKLQlpbnQgcmV0OwotCi0JdmlkZW8tPmNzaSA9IGNzaTsKLQotCS8q IEluaXRpYWxpemUgdGhlIG1lZGlhIGVudGl0eS4uLiAqLwotCXZpZGVvLT5wYWQuZmxhZ3MgPSBN RURJQV9QQURfRkxfU0lOSyB8IE1FRElBX1BBRF9GTF9NVVNUX0NPTk5FQ1Q7Ci0JdmRldi0+ZW50 aXR5Lm9wcyA9ICZzdW42aV92aWRlb19tZWRpYV9vcHM7Ci0JcmV0ID0gbWVkaWFfZW50aXR5X3Bh ZHNfaW5pdCgmdmRldi0+ZW50aXR5LCAxLCAmdmlkZW8tPnBhZCk7Ci0JaWYgKHJldCA8IDApCi0J CXJldHVybiByZXQ7Ci0KLQltdXRleF9pbml0KCZ2aWRlby0+bG9jayk7Ci0KLQlJTklUX0xJU1Rf SEVBRCgmdmlkZW8tPmRtYV9xdWV1ZSk7Ci0Jc3Bpbl9sb2NrX2luaXQoJnZpZGVvLT5kbWFfcXVl dWVfbG9jayk7Ci0KLQl2aWRlby0+c2VxdWVuY2UgPSAwOwotCi0JLyogU2V0dXAgZGVmYXVsdCBm b3JtYXQgKi8KLQlmbXQudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKLQlmbXQu Zm10LnBpeC5waXhlbGZvcm1hdCA9IHN1cHBvcnRlZF9waXhmb3JtYXRzWzBdOwotCWZtdC5mbXQu cGl4LndpZHRoID0gMTI4MDsKLQlmbXQuZm10LnBpeC5oZWlnaHQgPSA3MjA7Ci0JZm10LmZtdC5w aXguZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7Ci0Jc3VuNmlfdmlkZW9fc2V0X2ZtdCh2aWRlbywg JmZtdCk7Ci0KLQkvKiBJbml0aWFsaXplIHZpZGVvYnVmMiBxdWV1ZSAqLwotCXZpZHEtPnR5cGUJ CQk9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKLQl2aWRxLT5pb19tb2RlcwkJCT0gVkIy X01NQVAgfCBWQjJfRE1BQlVGOwotCXZpZHEtPmRydl9wcml2CQkJPSB2aWRlbzsKLQl2aWRxLT5i dWZfc3RydWN0X3NpemUJCT0gc2l6ZW9mKHN0cnVjdCBzdW42aV9jc2lfYnVmZmVyKTsKLQl2aWRx LT5vcHMJCQk9ICZzdW42aV9jc2lfdmIyX29wczsKLQl2aWRxLT5tZW1fb3BzCQkJPSAmdmIyX2Rt YV9jb250aWdfbWVtb3BzOwotCXZpZHEtPnRpbWVzdGFtcF9mbGFncwkJPSBWNEwyX0JVRl9GTEFH X1RJTUVTVEFNUF9NT05PVE9OSUM7Ci0JdmlkcS0+bG9jawkJCT0gJnZpZGVvLT5sb2NrOwotCS8q IE1ha2Ugc3VyZSBub24tZHJvcHBlZCBmcmFtZSAqLwotCXZpZHEtPm1pbl9idWZmZXJzX25lZWRl ZAk9IDM7Ci0JdmlkcS0+ZGV2CQkJPSBjc2ktPmRldjsKLQotCXJldCA9IHZiMl9xdWV1ZV9pbml0 KHZpZHEpOwotCWlmIChyZXQpIHsKLQkJdjRsMl9lcnIoJmNzaS0+djRsMl9kZXYsICJ2YjJfcXVl dWVfaW5pdCBmYWlsZWQ6ICVkXG4iLCByZXQpOwotCQlnb3RvIGNsZWFuX2VudGl0eTsKLQl9Ci0K LQkvKiBSZWdpc3RlciB2aWRlbyBkZXZpY2UgKi8KLQlzdHJzY3B5KHZkZXYtPm5hbWUsIG5hbWUs IHNpemVvZih2ZGV2LT5uYW1lKSk7Ci0JdmRldi0+cmVsZWFzZQkJPSB2aWRlb19kZXZpY2VfcmVs ZWFzZV9lbXB0eTsKLQl2ZGV2LT5mb3BzCQk9ICZzdW42aV92aWRlb19mb3BzOwotCXZkZXYtPmlv Y3RsX29wcwkJPSAmc3VuNmlfdmlkZW9faW9jdGxfb3BzOwotCXZkZXYtPnZmbF90eXBlCQk9IFZG TF9UWVBFX1ZJREVPOwotCXZkZXYtPnZmbF9kaXIJCT0gVkZMX0RJUl9SWDsKLQl2ZGV2LT52NGwy X2RldgkJPSAmY3NpLT52NGwyX2RldjsKLQl2ZGV2LT5xdWV1ZQkJPSB2aWRxOwotCXZkZXYtPmxv Y2sJCT0gJnZpZGVvLT5sb2NrOwotCXZkZXYtPmRldmljZV9jYXBzCT0gVjRMMl9DQVBfU1RSRUFN SU5HIHwgVjRMMl9DQVBfVklERU9fQ0FQVFVSRTsKLQl2aWRlb19zZXRfZHJ2ZGF0YSh2ZGV2LCB2 aWRlbyk7Ci0KLQlyZXQgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UodmRldiwgVkZMX1RZUEVfVklE RU8sIC0xKTsKLQlpZiAocmV0IDwgMCkgewotCQl2NGwyX2VycigmY3NpLT52NGwyX2RldiwKLQkJ CSAidmlkZW9fcmVnaXN0ZXJfZGV2aWNlIGZhaWxlZDogJWRcbiIsIHJldCk7Ci0JCWdvdG8gY2xl YW5fZW50aXR5OwotCX0KLQotCXJldHVybiAwOwotCi1jbGVhbl9lbnRpdHk6Ci0JbWVkaWFfZW50 aXR5X2NsZWFudXAoJnZpZGVvLT52ZGV2LmVudGl0eSk7Ci0JbXV0ZXhfZGVzdHJveSgmdmlkZW8t PmxvY2spOwotCXJldHVybiByZXQ7Ci19Ci0KLXZvaWQgc3VuNmlfdmlkZW9fY2xlYW51cChzdHJ1 Y3Qgc3VuNmlfdmlkZW8gKnZpZGVvKQotewotCXZiMl92aWRlb191bnJlZ2lzdGVyX2RldmljZSgm dmlkZW8tPnZkZXYpOwotCW1lZGlhX2VudGl0eV9jbGVhbnVwKCZ2aWRlby0+dmRldi5lbnRpdHkp OwotCW11dGV4X2Rlc3Ryb3koJnZpZGVvLT5sb2NrKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMv bWVkaWEvcGxhdGZvcm0vc3VueGkvc3VuNmktY3NpL3N1bjZpX3ZpZGVvLmggYi9kcml2ZXJzL21l ZGlhL3BsYXRmb3JtL3N1bnhpL3N1bjZpLWNzaS9zdW42aV92aWRlby5oCmRlbGV0ZWQgZmlsZSBt b2RlIDEwMDY0NAppbmRleCBiOWNkOTE5YzI0YWMuLjAwMDAwMDAwMDAwMAotLS0gYS9kcml2ZXJz L21lZGlhL3BsYXRmb3JtL3N1bnhpL3N1bjZpLWNzaS9zdW42aV92aWRlby5oCisrKyAvZGV2L251 bGwKQEAgLTEsMzggKzAsMCBAQAotLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAr ICovCi0vKgotICogQ29weXJpZ2h0IChjKSAyMDExLTIwMTggTWFnZXdlbGwgRWxlY3Ryb25pY3Mg Q28uLCBMdGQuIChOYW5qaW5nKQotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIEF1dGhvcjog WW9uZyBEZW5nIDx5b25nLmRlbmdAbWFnZXdlbGwuY29tPgotICovCi0KLSNpZm5kZWYgX19TVU42 SV9WSURFT19IX18KLSNkZWZpbmUgX19TVU42SV9WSURFT19IX18KLQotI2luY2x1ZGUgPG1lZGlh L3Y0bDItZGV2Lmg+Ci0jaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYyLWNvcmUuaD4KLQotc3RydWN0 IHN1bjZpX2NzaTsKLQotc3RydWN0IHN1bjZpX3ZpZGVvIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNl CQl2ZGV2OwotCXN0cnVjdCBtZWRpYV9wYWQJCXBhZDsKLQlzdHJ1Y3Qgc3VuNmlfY3NpCQkqY3Np OwotCi0Jc3RydWN0IG11dGV4CQkJbG9jazsKLQotCXN0cnVjdCB2YjJfcXVldWUJCXZiMl92aWRx OwotCXNwaW5sb2NrX3QJCQlkbWFfcXVldWVfbG9jazsKLQlzdHJ1Y3QgbGlzdF9oZWFkCQlkbWFf cXVldWU7Ci0KLQl1bnNpZ25lZCBpbnQJCQlzZXF1ZW5jZTsKLQlzdHJ1Y3QgdjRsMl9mb3JtYXQJ CWZtdDsKLQl1MzIJCQkJbWJ1c19jb2RlOwotfTsKLQotaW50IHN1bjZpX3ZpZGVvX2luaXQoc3Ry dWN0IHN1bjZpX3ZpZGVvICp2aWRlbywgc3RydWN0IHN1bjZpX2NzaSAqY3NpLAotCQkgICAgIGNv bnN0IGNoYXIgKm5hbWUpOwotdm9pZCBzdW42aV92aWRlb19jbGVhbnVwKHN0cnVjdCBzdW42aV92 aWRlbyAqdmlkZW8pOwotCi12b2lkIHN1bjZpX3ZpZGVvX2ZyYW1lX2RvbmUoc3RydWN0IHN1bjZp X3ZpZGVvICp2aWRlbyk7Ci0KLSNlbmRpZiAvKiBfX1NVTjZJX1ZJREVPX0hfXyAqLwotLSAKMi4z Mi4wCgoKLS0gCmxpbnV4LXBoeSBtYWlsaW5nIGxpc3QKbGludXgtcGh5QGxpc3RzLmluZnJhZGVh ZC5vcmcKaHR0cHM6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgt cGh5Cg==