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 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 smtp.lore.kernel.org (Postfix) with ESMTPS id 2DC20C433EF for ; Sun, 21 Nov 2021 13:01:58 +0000 (UTC) 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=8GxDAp2W/fCd8ooTQvhQkYKSkJLcg27YVGCLDMiv+QI=; b=oGuLHs20Dz8Iwn aLGuIWswNqV9Yt3+DfwVLMs08qb+ksNkjWMYYwR00xLJibDQoI/Pogn4W6/drXpb9coTSZ+8mqK+9 GUnMZPkfuTwzMQ+d3DDZKrwc5yzDMB342f1SOSEYIffZV3+xca3pY1IgaKsInnnv+KXOh6t1V6Y2J NnVas39Ya+uw0MgH97/T9Yrpr0sEhcP9JExsq/DrVk5ro4lVtXkiOEt4jSfeNW9oneHLkBytaqttj SrFpV3J/cVZ2VZ1VithXp3PWVBad6EkOV5/d+kb+MmlG8roUedBewNOs754YRz2H4htbWtF7BIUal 1R9NrPVbbrZ7BuW4H/4Q==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1momS0-00DevZ-61; Sun, 21 Nov 2021 13:00:08 +0000 Received: from desiato.infradead.org ([2001:8b0:10b:1:d65d:64ff:fe57:4e05]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1momNH-00DcbS-Lk; Sun, 21 Nov 2021 12:55:15 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; h=Sender:Content-Transfer-Encoding: Content-Type:MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc: To:From:Reply-To:Content-ID:Content-Description; bh=OJ9LL+6xIR1+YsiYMVSAE3P7DvKdxA/WkbmLlzdujzs=; b=DvlnSIqjm2mJlo7Pe5SPD74VXA rxnK3+ncldkqfbCHTOLVp8lMkNhGS1XZOEATB1LNan+69gBDwx8Yw9ZLCeiHHRJRgQ5wlLUL5i50J oprKTkBtT9mbvv1z1m4rSp5y3WGrG3UYibufu7TltDI69dsvpk6a133jv5EOmmVsMyaNmtMZjfYD9 GCfQFIe+WmB3AO1LGCdI5VA6TNHNuqsRzocMDPpcTLtCRFeBf8qXnzUSFRncKIkZPgM1zgqUgu530 BQyBF9jT7brXLwMOwpgAVMqPIRnsR1X7bCpGcaUvZ6Ojw8AqXY+vyujcP3p2+ggd5rRVUq/wPPs4h 7O9E9new==; Received: from i7.infradead.org ([2001:8b0:10b:1:21e:67ff:fecb:7a92]) by desiato.infradead.org with esmtpsa (Exim 4.94.2 #2 (Red Hat Linux)) id 1momMx-00HIgH-0H; Sun, 21 Nov 2021 12:54:55 +0000 Received: from dwoodhou by i7.infradead.org with local (Exim 4.94.2 #2 (Red Hat Linux)) id 1momMw-0002WP-IR; Sun, 21 Nov 2021 12:54:54 +0000 From: David Woodhouse To: Paolo Bonzini , kvm Cc: Boris Ostrovsky , Joao Martins , "jmattson @ google . com" , "wanpengli @ tencent . com" , "seanjc @ google . com" , "vkuznets @ redhat . com" , "mtosatti @ redhat . com" , "joro @ 8bytes . org" , karahmed@amazon.com, Marc Zyngier , James Morse , Alexandru Elisei , Suzuki K Poulose , Catalin Marinas , Will Deacon , Huacai Chen , Aleksandar Markovic , Michael Ellerman , Benjamin Herrenschmidt , Anup Patel , Christian Borntraeger , kvmarm@lists.cs.columbia.edu, linux-arm-kernel , linux-mips@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, kvm-riscv@lists.infradead.org, linux-s390@vger.kernel.org, butt3rflyh4ck Subject: [PATCH v5 08/12] KVM: Reinstate gfn_to_pfn_cache with invalidation support Date: Sun, 21 Nov 2021 12:54:47 +0000 Message-Id: <20211121125451.9489-9-dwmw2@infradead.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20211121125451.9489-1-dwmw2@infradead.org> References: <20211121125451.9489-1-dwmw2@infradead.org> MIME-Version: 1.0 X-SRS-Rewrite: SMTP reverse-path rewritten from by desiato.infradead.org. See http://www.infradead.org/rpr.html X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 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+linux-arm-kernel=archiver.kernel.org@lists.infradead.org RnJvbTogRGF2aWQgV29vZGhvdXNlIDxkd213QGFtYXpvbi5jby51az4KClRoaXMgY2FuIGJlIHVz ZWQgaW4gdHdvIG1vZGVzLiBUaGVyZSBpcyBhbiBhdG9taWMgbW9kZSB3aGVyZSB0aGUgY2FjaGVk Cm1hcHBpbmcgaXMgYWNjZXNzZWQgd2hpbGUgaG9sZGluZyB0aGUgcndsb2NrLCBhbmQgYSBtb2Rl IHdoZXJlIHRoZQpwaHlzaWNhbCBhZGRyZXNzIGlzIHVzZWQgYnkgYSB2Q1BVIGluIGd1ZXN0IG1v ZGUuCgpGb3IgdGhlIGxhdHRlciBjYXNlLCBhbiBpbnZhbGlkYXRpb24gd2lsbCB3YWtlIHRoZSB2 Q1BVIHdpdGggdGhlIG5ldwpLVk1fUkVRX0dQQ19JTlZBTElEQVRFLCBhbmQgdGhlIGFyY2hpdGVj dHVyZSB3aWxsIG5lZWQgdG8gcmVmcmVzaCBhbnkKY2FjaGVzIGl0IHN0aWxsIG5lZWRzIHRvIGFj Y2VzcyBiZWZvcmUgZW50ZXJpbmcgZ3Vlc3QgbW9kZSBhZ2Fpbi4KCk9ubHkgb25lIHZDUFUgY2Fu IGJlIHRhcmdldGVkIGJ5IHRoZSB3YWtlIHJlcXVlc3RzOyBpdCdzIHNpbXBsZSBlbm91Z2gKdG8g bWFrZSBpdCB3YWtlIGFsbCB2Q1BVcyBvciBldmVuIGEgbWFzayBidXQgSSBkb24ndCBzZWUgYSB1 c2UgY2FzZSBmb3IKdGhhdCBhZGRpdGlvbmFsIGNvbXBsZXhpdHkgcmlnaHQgbm93LgoKSW52YWxp ZGF0aW9uIGhhcHBlbnMgZnJvbSB0aGUgaW52YWxpZGF0ZV9yYW5nZV9zdGFydCBNTVUgbm90aWZp ZXIsIHdoaWNoCm5lZWRzIHRvIGJlIGFibGUgdG8gc2xlZXAgaW4gb3JkZXIgdG8gd2FrZSB0aGUg dkNQVSBhbmQgd2FpdCBmb3IgaXQuCgpUaGlzIG1lYW5zIHRoYXQgcmV2YWxpZGF0aW9uIHBvdGVu dGlhbGx5IG5lZWRzIHRvICJ3YWl0IiBmb3IgdGhlIE1NVQpvcGVyYXRpb24gdG8gY29tcGxldGUg YW5kIHRoZSBpbnZhbGlkYXRlX3JhbmdlX2VuZCBub3RpZmllciB0byBiZQppbnZva2VkLiBMaWtl IHRoZSB2Q1BVIHdoZW4gaXQgdGFrZXMgYSBwYWdlIGZhdWx0IGluIHRoYXQgcGVyaW9kLCB3ZQpq dXN0IHNwaW4g4oCUIGZpeGluZyB0aGF0IGluIGEgZnV0dXJlIHBhdGNoIGJ5IGltcGxlbWVudGlu ZyBhbiBhY3R1YWwKKndhaXQqIG1heSBiZSBhbm90aGVyIHBhcnQgb2Ygc2hhdmluZyB0aGlzIHBh cnRpY3VsYXJseSBoaXJzdXRlIHlhay4KCkFzIG5vdGVkIGluIHRoZSBjb21tZW50cyBpbiB0aGUg ZnVuY3Rpb24gaXRzZWxmLCB0aGUgb25seSBjYXNlIHdoZXJlCnRoZSBpbnZhbGlkYXRlX3Jhbmdl X3N0YXJ0IG5vdGlmaWVyIGlzIGV4cGVjdGVkIHRvIGJlIGNhbGxlZCAqd2l0aG91dCoKYmVpbmcg YWJsZSB0byBzbGVlcCBpcyB3aGVuIHRoZSBPT00gcmVhcGVyIGlzIGtpbGxpbmcgdGhlIHByb2Nl c3MuIEluCnRoYXQgY2FzZSwgd2UgZXhwZWN0IHRoZSB2Q1BVIHRocmVhZHMgYWxyZWFkeSB0byBo YXZlIGV4aXRlZCwgYW5kIHRodXMKdGhlcmUgd2lsbCBiZSBub3RoaW5nIHRvIHdha2UsIGFuZCBu byByZWFzb24gdG8gd2FpdC4gU28gd2UgY2xlYXIgdGhlCktWTV9SRVFVRVNUX1dBSVQgYml0IGFu ZCBzZW5kIHRoZSByZXF1ZXN0IGFueXdheSwgdGhlbiBjb21wbGFpbiBsb3VkbHkKaWYgdGhlcmUg YWN0dWFsbHkgKndhcyogYW55dGhpbmcgdG8gd2FrZSB1cC4KClNpZ25lZC1vZmYtYnk6IERhdmlk IFdvb2Rob3VzZSA8ZHdtd0BhbWF6b24uY28udWs+Ci0tLQogYXJjaC94ODYva3ZtL0tjb25maWcg ICAgICB8ICAgMSArCiBpbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggIHwgMTAzICsrKysrKysrKysr KwogaW5jbHVkZS9saW51eC9rdm1fdHlwZXMuaCB8ICAxOCArKysKIHZpcnQva3ZtL0tjb25maWcg ICAgICAgICAgfCAgIDMgKwogdmlydC9rdm0vTWFrZWZpbGUua3ZtICAgICB8ICAgMSArCiB2aXJ0 L2t2bS9kaXJ0eV9yaW5nLmMgICAgIHwgICAyICstCiB2aXJ0L2t2bS9rdm1fbWFpbi5jICAgICAg IHwgIDEyICstCiB2aXJ0L2t2bS9rdm1fbW0uaCAgICAgICAgIHwgIDQ0ICsrKysrKwogdmlydC9r dm0vbW11X2xvY2suaCAgICAgICB8ICAyMyAtLS0KIHZpcnQva3ZtL3BmbmNhY2hlLmMgICAgICAg fCAzMjMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDEwIGZpbGVzIGNo YW5nZWQsIDUwMyBpbnNlcnRpb25zKCspLCAyNyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEw MDY0NCB2aXJ0L2t2bS9rdm1fbW0uaAogZGVsZXRlIG1vZGUgMTAwNjQ0IHZpcnQva3ZtL21tdV9s b2NrLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCB2aXJ0L2t2bS9wZm5jYWNoZS5jCgpkaWZmIC0tZ2l0 IGEvYXJjaC94ODYva3ZtL0tjb25maWcgYi9hcmNoL3g4Ni9rdm0vS2NvbmZpZwppbmRleCBkN2Zh MGE0MmFjMjUuLmFmMzUxMTA3ZDQ3ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL0tjb25maWcK KysrIGIvYXJjaC94ODYva3ZtL0tjb25maWcKQEAgLTI2LDYgKzI2LDcgQEAgY29uZmlnIEtWTQog CXNlbGVjdCBQUkVFTVBUX05PVElGSUVSUwogCXNlbGVjdCBNTVVfTk9USUZJRVIKIAlzZWxlY3Qg SEFWRV9LVk1fSVJRQ0hJUAorCXNlbGVjdCBIQVZFX0tWTV9QRk5DQUNIRQogCXNlbGVjdCBIQVZF X0tWTV9JUlFGRAogCXNlbGVjdCBIQVZFX0tWTV9ESVJUWV9SSU5HCiAJc2VsZWN0IElSUV9CWVBB U1NfTUFOQUdFUgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVk ZS9saW51eC9rdm1faG9zdC5oCmluZGV4IGMzMTA2NDhjYzhmMS4uNDU3YzM4ZDc1OTEzIDEwMDY0 NAotLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKKysrIGIvaW5jbHVkZS9saW51eC9rdm1f aG9zdC5oCkBAIC0xNTEsNiArMTUxLDcgQEAgc3RhdGljIGlubGluZSBib29sIGlzX2Vycm9yX3Bh Z2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCiAjZGVmaW5lIEtWTV9SRVFfVU5CTE9DSyAgICAgICAgICAg MgogI2RlZmluZSBLVk1fUkVRX1VOSEFMVCAgICAgICAgICAgIDMKICNkZWZpbmUgS1ZNX1JFUV9W TV9ERUFEICAgICAgICAgICAoNCB8IEtWTV9SRVFVRVNUX1dBSVQgfCBLVk1fUkVRVUVTVF9OT19X QUtFVVApCisjZGVmaW5lIEtWTV9SRVFfR1BDX0lOVkFMSURBVEUgICAgKDUgfCBLVk1fUkVRVUVT VF9XQUlUIHwgS1ZNX1JFUVVFU1RfTk9fV0FLRVVQKQogI2RlZmluZSBLVk1fUkVRVUVTVF9BUkNI X0JBU0UgICAgIDgKIAogI2RlZmluZSBLVk1fQVJDSF9SRVFfRkxBR1MobnIsIGZsYWdzKSAoeyBc CkBAIC01NTksNiArNTYwLDEwIEBAIHN0cnVjdCBrdm0gewogCXVuc2lnbmVkIGxvbmcgbW5fYWN0 aXZlX2ludmFsaWRhdGVfY291bnQ7CiAJc3RydWN0IHJjdXdhaXQgbW5fbWVtc2xvdHNfdXBkYXRl X3JjdXdhaXQ7CiAKKwkvKiBGb3IgbWFuYWdlbWVudCAvIGludmFsaWRhdGlvbiBvZiBnZm5fdG9f cGZuX2NhY2hlcyAqLworCXNwaW5sb2NrX3QgZ3BjX2xvY2s7CisJc3RydWN0IGxpc3RfaGVhZCBn cGNfbGlzdDsKKwogCS8qCiAJICogY3JlYXRlZF92Y3B1cyBpcyBwcm90ZWN0ZWQgYnkga3ZtLT5s b2NrLCBhbmQgaXMgaW5jcmVtZW50ZWQKIAkgKiBhdCB0aGUgYmVnaW5uaW5nIG9mIEtWTV9DUkVB VEVfVkNQVS4gIG9ubGluZV92Y3B1cyBpcyBvbmx5CkBAIC05NjYsNiArOTcxLDEwNCBAQCBpbnQg a3ZtX3ZjcHVfd3JpdGVfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIGNv bnN0IHZvaWQgKmRhdGEsCiAJCQkgdW5zaWduZWQgbG9uZyBsZW4pOwogdm9pZCBrdm1fdmNwdV9t YXJrX3BhZ2VfZGlydHkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4pOwogCisvKioK KyAqIGt2bV9nZm5fdG9fcGZuX2NhY2hlX2luaXQgLSBwcmVwYXJlIGEgY2FjaGVkIGtlcm5lbCBt YXBwaW5nIGFuZCBIUEEgZm9yIGEKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaXZl biBndWVzdCBwaHlzaWNhbCBhZGRyZXNzLgorICoKKyAqIEBrdm06CSAgIHBvaW50ZXIgdG8ga3Zt IGluc3RhbmNlLgorICogQGdwYzoJICAgc3RydWN0IGdmbl90b19wZm5fY2FjaGUgb2JqZWN0Lgor ICogQHZjcHU6CSAgIHZDUFUgdG8gYmUgdXNlZCBmb3IgbWFya2luZyBwYWdlcyBkaXJ0eSBhbmQg dG8gYmUgd29rZW4gb24KKyAqCQkgICBpbnZhbGlkYXRpb24uCisgKiBAZ3Vlc3RfdXNlc19wYTog aW5kaWNhdGVzIHRoYXQgdGhlIHJlc3VsdGluZyBob3N0IHBoeXNpY2FsIFBGTiBpcyB1c2VkIHdo aWxlCisgKgkJICAgQHZjcHUgaXMgSU5fR1VFU1RfTU9ERSBzbyBpbnZhbGlkYXRpb25zIHNob3Vs ZCB3YWtlIGl0LgorICogQGtlcm5lbF9tYXA6ICAgIHJlcXVlc3RzIGEga2VybmVsIHZpcnR1YWwg bWFwcGluZyAoa21hcCAvIG1lbXJlbWFwKS4KKyAqIEBncGE6CSAgIGd1ZXN0IHBoeXNpY2FsIGFk ZHJlc3MgdG8gbWFwLgorICogQGxlbjoJICAgc2FuaXR5IGNoZWNrOyB0aGUgcmFuZ2UgYmVpbmcg YWNjZXNzIG11c3QgZml0IGEgc2luZ2xlIHBhZ2UuCisgKiBAZGlydHk6ICAgICAgICAgbWFyayB0 aGUgY2FjaGUgZGlydHkgaW1tZWRpYXRlbHkuCisgKgorICogQHJldHVybjoJICAgMCBmb3Igc3Vj Y2Vzcy4KKyAqCQkgICAtRUlOVkFMIGZvciBhIG1hcHBpbmcgd2hpY2ggd291bGQgY3Jvc3MgYSBw YWdlIGJvdW5kYXJ5LgorICogICAgICAgICAgICAgICAgIC1FRkFVTFQgZm9yIGFuIHVudHJhbnNs YXRhYmxlIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MuCisgKgorICogVGhpcyBwcmltZXMgYSBnZm5f dG9fcGZuX2NhY2hlIGFuZCBsaW5rcyBpdCBpbnRvIHRoZSBAa3ZtJ3MgbGlzdCBmb3IKKyAqIGlu dmFsaWRhdGlvbnMgdG8gYmUgcHJvY2Vzc2VkLiBJbnZhbGlkYXRpb24gY2FsbGJhY2tzIHRvIEB2 Y3B1IHVzaW5nCisgKiAlS1ZNX1JFUV9HUENfSU5WQUxJREFURSB3aWxsIG9jY3VyIG9ubHkgZm9y IE1NVSBub3RpZmllcnMsIG5vdCBmb3IgS1ZNCisgKiBtZW1zbG90IGNoYW5nZXMuIENhbGxlcnMg YXJlIHJlcXVpcmVkIHRvIHVzZSBrdm1fZ2ZuX3RvX3Bmbl9jYWNoZV9jaGVjaygpCisgKiB0byBl bnN1cmUgdGhhdCB0aGUgY2FjaGUgaXMgdmFsaWQgYmVmb3JlIGFjY2Vzc2luZyB0aGUgdGFyZ2V0 IHBhZ2UuCisgKi8KK2ludCBrdm1fZ2ZuX3RvX3Bmbl9jYWNoZV9pbml0KHN0cnVjdCBrdm0gKmt2 bSwgc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYywKKwkJCSAgICAgIHN0cnVjdCBrdm1fdmNw dSAqdmNwdSwgYm9vbCBndWVzdF91c2VzX3BhLAorCQkJICAgICAgYm9vbCBrZXJuZWxfbWFwLCBn cGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgbGVuLAorCQkJICAgICAgYm9vbCBkaXJ0eSk7CisKKy8q KgorICoga3ZtX2dmbl90b19wZm5fY2FjaGVfY2hlY2sgLSBjaGVjayB2YWxpZGl0eSBvZiBhIGdm bl90b19wZm5fY2FjaGUuCisgKgorICogQGt2bToJICAgcG9pbnRlciB0byBrdm0gaW5zdGFuY2Uu CisgKiBAZ3BjOgkgICBzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSBvYmplY3QuCisgKiBAZ3BhOgkg ICBjdXJyZW50IGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MgdG8gbWFwLgorICogQGxlbjoJICAgc2Fu aXR5IGNoZWNrOyB0aGUgcmFuZ2UgYmVpbmcgYWNjZXNzIG11c3QgZml0IGEgc2luZ2xlIHBhZ2Uu CisgKiBAZGlydHk6ICAgICAgICAgbWFyayB0aGUgY2FjaGUgZGlydHkgaW1tZWRpYXRlbHkuCisg KgorICogQHJldHVybjoJICAgJXRydWUgaWYgdGhlIGNhY2hlIGlzIHN0aWxsIHZhbGlkIGFuZCB0 aGUgYWRkcmVzcyBtYXRjaGVzLgorICoJCSAgICVmYWxzZSBpZiB0aGUgY2FjaGUgaXMgbm90IHZh bGlkLgorICoKKyAqIENhbGxlcnMgb3V0c2lkZSBJTl9HVUVTVF9NT0RFIGNvbnRleHQgc2hvdWxk IGhvbGQgYSByZWFkIGxvY2sgb24gQGdwYy0+bG9jaworICogd2hpbGUgY2FsbGluZyB0aGlzIGZ1 bmN0aW9uLCBhbmQgdGhlbiBjb250aW51ZSB0byBob2xkIHRoZSBsb2NrIHVudGlsIHRoZQorICog YWNjZXNzIGlzIGNvbXBsZXRlLgorICoKKyAqIENhbGxlcnMgaW4gSU5fR1VFU1RfTU9ERSBtYXkg ZG8gc28gd2l0aG91dCBsb2NraW5nLCBhbHRob3VnaCB0aGV5IHNob3VsZAorICogc3RpbGwgaG9s ZCBhIHJlYWQgbG9jayBvbiBrdm0tPnNjcnUgZm9yIHRoZSBtZW1zbG90IGNoZWNrcy4KKyAqLwor Ym9vbCBrdm1fZ2ZuX3RvX3Bmbl9jYWNoZV9jaGVjayhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBn Zm5fdG9fcGZuX2NhY2hlICpncGMsCisJCQkJZ3BhX3QgZ3BhLCB1bnNpZ25lZCBsb25nIGxlbik7 CisKKy8qKgorICoga3ZtX2dmbl90b19wZm5fY2FjaGVfcmVmcmVzaCAtIHVwZGF0ZSBhIHByZXZp b3VzbHkgaW5pdGlhbGl6ZWQgY2FjaGUuCisgKgorICogQGt2bToJICAgcG9pbnRlciB0byBrdm0g aW5zdGFuY2UuCisgKiBAZ3BjOgkgICBzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSBvYmplY3QuCisg KiBAZ3BhOgkgICB1cGRhdGVkIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MgdG8gbWFwLgorICogQGxl bjoJICAgc2FuaXR5IGNoZWNrOyB0aGUgcmFuZ2UgYmVpbmcgYWNjZXNzIG11c3QgZml0IGEgc2lu Z2xlIHBhZ2UuCisgKiBAZGlydHk6ICAgICAgICAgbWFyayB0aGUgY2FjaGUgZGlydHkgaW1tZWRp YXRlbHkuCisgKgorICogQHJldHVybjoJICAgMCBmb3Igc3VjY2Vzcy4KKyAqCQkgICAtRUlOVkFM IGZvciBhIG1hcHBpbmcgd2hpY2ggd291bGQgY3Jvc3MgYSBwYWdlIGJvdW5kYXJ5LgorICogICAg ICAgICAgICAgICAgIC1FRkFVTFQgZm9yIGFuIHVudHJhbnNsYXRhYmxlIGd1ZXN0IHBoeXNpY2Fs IGFkZHJlc3MuCisgKgorICogVGhpcyB3aWxsIGF0dGVtcHQgdG8gcmVmcmVzaCBhIGdmbl90b19w Zm5fY2FjaGUuIE5vdGUgdGhhdCBhIHN1Y2Nlc3NmdWwKKyAqIHJldHVybSBmcm9tIHRoaXMgZnVu Y3Rpb24gZG9lcyBub3QgbWVhbiB0aGUgcGFnZSBjYW4gYmUgaW1tZWRpYXRlbHkKKyAqIGFjY2Vz c2VkIGJlY2F1c2UgaXQgbWF5IGhhdmUgcmFjZWQgd2l0aCBhbiBpbnZhbGlkYXRpb24uIENhbGxl cnMgbXVzdAorICogc3RpbGwgbG9jayBhbmQgY2hlY2sgdGhlIGNhY2hlIHN0YXR1cywgYXMgdGhp cyBmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4KKyAqIHdpdGggdGhlIGxvY2sgc3RpbGwgaGVsZCB0 byBwZXJtaXQgYWNjZXNzLgorICovCitpbnQga3ZtX2dmbl90b19wZm5fY2FjaGVfcmVmcmVzaChz dHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsCisJCQkJIGdwYV90 IGdwYSwgdW5zaWduZWQgbG9uZyBsZW4sIGJvb2wgZGlydHkpOworCisvKioKKyAqIGt2bV9nZm5f dG9fcGZuX2NhY2hlX3VubWFwIC0gdGVtcG9yYXJpbHkgdW5tYXAgYSBnZm5fdG9fcGZuX2NhY2hl LgorICoKKyAqIEBrdm06CSAgIHBvaW50ZXIgdG8ga3ZtIGluc3RhbmNlLgorICogQGdwYzoJICAg c3RydWN0IGdmbl90b19wZm5fY2FjaGUgb2JqZWN0LgorICoKKyAqIFRoaXMgdW5tYXBzIHRoZSBy ZWZlcmVuY2VkIHBhZ2UgYW5kIG1hcmtzIGl0IGRpcnR5LCBpZiBhcHByb3ByaWF0ZS4gVGhlCisg KiBjYWNoZSBpcyBsZWZ0IGluIHRoZSBpbnZhbGlkIHN0YXRlIGJ1dCBhdCBsZWFzdCB0aGUgbWFw cGluZyBmcm9tIEdQQSB0bworICogdXNlcnNwYWNlIEhWQSB3aWxsIHJlbWFpbiBjYWNoZWQgYW5k IGNhbiBiZSByZXVzZWQgb24gYSBzdWJzZXF1ZW50CisgKiByZWZyZXNoLgorICovCit2b2lkIGt2 bV9nZm5fdG9fcGZuX2NhY2hlX3VubWFwKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGdmbl90b19w Zm5fY2FjaGUgKmdwYyk7CisKKy8qKgorICoga3ZtX2dmbl90b19wZm5fY2FjaGVfZGVzdHJveSAt IGRlc3Ryb3kgYW5kIHVubGluayBhIGdmbl90b19wZm5fY2FjaGUuCisgKgorICogQGt2bToJICAg cG9pbnRlciB0byBrdm0gaW5zdGFuY2UuCisgKiBAZ3BjOgkgICBzdHJ1Y3QgZ2ZuX3RvX3Bmbl9j YWNoZSBvYmplY3QuCisgKgorICogVGhpcyByZW1vdmVzIGEgY2FjaGUgZnJvbSB0aGUgQGt2bSdz IGxpc3QgdG8gYmUgcHJvY2Vzc2VkIG9uIE1NVSBub3RpZmllcgorICogaW52b2NhdGlvbi4KKyAq Lwordm9pZCBrdm1fZ2ZuX3RvX3Bmbl9jYWNoZV9kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSwgc3Ry dWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYyk7CisKIHZvaWQga3ZtX3NpZ3NldF9hY3RpdmF0ZShz dHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCBrdm1fc2lnc2V0X2RlYWN0aXZhdGUoc3RydWN0 IGt2bV92Y3B1ICp2Y3B1KTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1fdHlwZXMu aCBiL2luY2x1ZGUvbGludXgva3ZtX3R5cGVzLmgKaW5kZXggMjM0ZWFiMDU5ODM5Li4yMmE1MmVm MTJiNGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3ZtX3R5cGVzLmgKKysrIGIvaW5jbHVk ZS9saW51eC9rdm1fdHlwZXMuaApAQCAtMTksNiArMTksNyBAQCBzdHJ1Y3Qga3ZtX21lbXNsb3Rz OwogZW51bSBrdm1fbXJfY2hhbmdlOwogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNs dWRlIDxsaW51eC9zcGlubG9ja190eXBlcy5oPgogCiAjaW5jbHVkZSA8YXNtL2t2bV90eXBlcy5o PgogCkBAIC01Myw2ICs1NCwyMyBAQCBzdHJ1Y3QgZ2ZuX3RvX2h2YV9jYWNoZSB7CiAJc3RydWN0 IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdDsKIH07CiAKK3N0cnVjdCBnZm5fdG9fcGZuX2NhY2hl IHsKKwl1NjQgZ2VuZXJhdGlvbjsKKwlncGFfdCBncGE7CisJdW5zaWduZWQgbG9uZyB1aHZhOwor CXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3Q7CisJc3RydWN0IGt2bV92Y3B1ICp2Y3B1 OworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlyd2xvY2tfdCBsb2NrOworCXZvaWQgKmtodmE7 CisJa3ZtX3Bmbl90IHBmbjsKKwlib29sIGFjdGl2ZTsKKwlib29sIHZhbGlkOworCWJvb2wgZGly dHk7CisJYm9vbCBrZXJuZWxfbWFwOworCWJvb2wgZ3Vlc3RfdXNlc19wYTsKK307CisKICNpZmRl ZiBLVk1fQVJDSF9OUl9PQkpTX1BFUl9NRU1PUllfQ0FDSEUKIC8qCiAgKiBNZW1vcnkgY2FjaGVz IGFyZSB1c2VkIHRvIHByZWFsbG9jYXRlIG1lbW9yeSBhaGVhZCBvZiB2YXJpb3VzIE1NVSBmbG93 cywKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL0tjb25maWcgYi92aXJ0L2t2bS9LY29uZmlnCmluZGV4 IDk3Y2Y1NDEzYWMyNS4uZjQ4MzRjMjBlNGE2IDEwMDY0NAotLS0gYS92aXJ0L2t2bS9LY29uZmln CisrKyBiL3ZpcnQva3ZtL0tjb25maWcKQEAgLTQsNiArNCw5IEBACiBjb25maWcgSEFWRV9LVk0K ICAgICAgICBib29sCiAKK2NvbmZpZyBIQVZFX0tWTV9QRk5DQUNIRQorICAgICAgIGJvb2wKKwog Y29uZmlnIEhBVkVfS1ZNX0lSUUNISVAKICAgICAgICBib29sCiAKZGlmZiAtLWdpdCBhL3ZpcnQv a3ZtL01ha2VmaWxlLmt2bSBiL3ZpcnQva3ZtL01ha2VmaWxlLmt2bQppbmRleCBmZmRjYWQzY2M5 N2EuLjJjMjdkNWQwYzM2NyAxMDA2NDQKLS0tIGEvdmlydC9rdm0vTWFrZWZpbGUua3ZtCisrKyBi L3ZpcnQva3ZtL01ha2VmaWxlLmt2bQpAQCAtMTEsMyArMTEsNCBAQCBrdm0tJChDT05GSUdfS1ZN X01NSU8pICs9ICQoS1ZNKS9jb2FsZXNjZWRfbW1pby5vCiBrdm0tJChDT05GSUdfS1ZNX0FTWU5D X1BGKSArPSAkKEtWTSkvYXN5bmNfcGYubwoga3ZtLSQoQ09ORklHX0hBVkVfS1ZNX0lSUV9ST1VU SU5HKSArPSAkKEtWTSkvaXJxY2hpcC5vCiBrdm0tJChDT05GSUdfSEFWRV9LVk1fRElSVFlfUklO RykgKz0gJChLVk0pL2RpcnR5X3Jpbmcubwora3ZtLSQoQ09ORklHX0hBVkVfS1ZNX1BGTkNBQ0hF KSArPSAkKEtWTSkvcGZuY2FjaGUubwpkaWZmIC0tZ2l0IGEvdmlydC9rdm0vZGlydHlfcmluZy5j IGIvdmlydC9rdm0vZGlydHlfcmluZy5jCmluZGV4IDhlOTg3NDc2MGZiMy4uMjIyZWNjODFkN2Rm IDEwMDY0NAotLS0gYS92aXJ0L2t2bS9kaXJ0eV9yaW5nLmMKKysrIGIvdmlydC9rdm0vZGlydHlf cmluZy5jCkBAIC05LDcgKzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNs dWRlIDxsaW51eC9rdm1fZGlydHlfcmluZy5oPgogI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9rdm0u aD4KLSNpbmNsdWRlICJtbXVfbG9jay5oIgorI2luY2x1ZGUgImt2bV9tbS5oIgogCiBpbnQgX193 ZWFrIGt2bV9jcHVfZGlydHlfbG9nX3NpemUodm9pZCkKIHsKZGlmZiAtLWdpdCBhL3ZpcnQva3Zt L2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCmluZGV4IDhlYjhjOTYyODM4ZC4uZTYz OTQ4MTQ1NmI4IDEwMDY0NAotLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jCisrKyBiL3ZpcnQva3Zt L2t2bV9tYWluLmMKQEAgLTU5LDcgKzU5LDcgQEAKIAogI2luY2x1ZGUgImNvYWxlc2NlZF9tbWlv LmgiCiAjaW5jbHVkZSAiYXN5bmNfcGYuaCIKLSNpbmNsdWRlICJtbXVfbG9jay5oIgorI2luY2x1 ZGUgImt2bV9tbS5oIgogI2luY2x1ZGUgInZmaW8uaCIKIAogI2RlZmluZSBDUkVBVEVfVFJBQ0Vf UE9JTlRTCkBAIC02ODQsNiArNjg0LDkgQEAgc3RhdGljIGludCBrdm1fbW11X25vdGlmaWVyX2lu dmFsaWRhdGVfcmFuZ2Vfc3RhcnQoc3RydWN0IG1tdV9ub3RpZmllciAqbW4sCiAJa3ZtLT5tbl9h Y3RpdmVfaW52YWxpZGF0ZV9jb3VudCsrOwogCXNwaW5fdW5sb2NrKCZrdm0tPm1uX2ludmFsaWRh dGVfbG9jayk7CiAKKwlnZm5fdG9fcGZuX2NhY2hlX2ludmFsaWRhdGVfc3RhcnQoa3ZtLCByYW5n ZS0+c3RhcnQsIHJhbmdlLT5lbmQsCisJCQkJCSAgaHZhX3JhbmdlLm1heV9ibG9jayk7CisKIAlf X2t2bV9oYW5kbGVfaHZhX3JhbmdlKGt2bSwgJmh2YV9yYW5nZSk7CiAKIAlyZXR1cm4gMDsKQEAg LTEwNTEsNiArMTA1NCw5IEBAIHN0YXRpYyBzdHJ1Y3Qga3ZtICprdm1fY3JlYXRlX3ZtKHVuc2ln bmVkIGxvbmcgdHlwZSkKIAlzcGluX2xvY2tfaW5pdCgma3ZtLT5tbl9pbnZhbGlkYXRlX2xvY2sp OwogCXJjdXdhaXRfaW5pdCgma3ZtLT5tbl9tZW1zbG90c191cGRhdGVfcmN1d2FpdCk7CiAKKwlJ TklUX0xJU1RfSEVBRCgma3ZtLT5ncGNfbGlzdCk7CisJc3Bpbl9sb2NrX2luaXQoJmt2bS0+Z3Bj X2xvY2spOworCiAJSU5JVF9MSVNUX0hFQUQoJmt2bS0+ZGV2aWNlcyk7CiAKIAlCVUlMRF9CVUdf T04oS1ZNX01FTV9TTE9UU19OVU0gPiBTSFJUX01BWCk7CkBAIC0yNDA2LDggKzI0MTIsOCBAQCBz dGF0aWMgaW50IGh2YV90b19wZm5fcmVtYXBwZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEs CiAgKiAyKTogQHdyaXRlX2ZhdWx0ID0gZmFsc2UgJiYgQHdyaXRhYmxlLCBAd3JpdGFibGUgd2ls bCB0ZWxsIHRoZSBjYWxsZXIKICAqICAgICB3aGV0aGVyIHRoZSBtYXBwaW5nIGlzIHdyaXRhYmxl LgogICovCi1zdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm4odW5zaWduZWQgbG9uZyBhZGRyLCBi b29sIGF0b21pYywgYm9vbCAqYXN5bmMsCi0JCQlib29sIHdyaXRlX2ZhdWx0LCBib29sICp3cml0 YWJsZSkKK2t2bV9wZm5fdCBodmFfdG9fcGZuKHVuc2lnbmVkIGxvbmcgYWRkciwgYm9vbCBhdG9t aWMsIGJvb2wgKmFzeW5jLAorCQkgICAgIGJvb2wgd3JpdGVfZmF1bHQsIGJvb2wgKndyaXRhYmxl KQogewogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwogCWt2bV9wZm5fdCBwZm4gPSAwOwpk aWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21tLmggYi92aXJ0L2t2bS9rdm1fbW0uaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjM0Y2E0MDgyMzI2MAotLS0gL2Rldi9u dWxsCisrKyBiL3ZpcnQva3ZtL2t2bV9tbS5oCkBAIC0wLDAgKzEsNDQgQEAKKy8vIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKKworI2lmbmRlZiBfX0tWTV9NTV9IX18KKyNk ZWZpbmUgX19LVk1fTU1fSF9fIDEKKworLyoKKyAqIEFyY2hpdGVjdHVyZXMgY2FuIGNob29zZSB3 aGV0aGVyIHRvIHVzZSBhbiByd2xvY2sgb3Igc3BpbmxvY2sKKyAqIGZvciB0aGUgbW11X2xvY2su ICBUaGVzZSBtYWNyb3MsIGZvciB1c2UgaW4gY29tbW9uIGNvZGUKKyAqIG9ubHksIGF2b2lkcyB1 c2luZyAjaWZkZWZzIGluIHBsYWNlcyB0aGF0IG11c3QgZGVhbCB3aXRoCisgKiBtdWx0aXBsZSBh cmNoaXRlY3R1cmVzLgorICovCisKKyNpZmRlZiBLVk1fSEFWRV9NTVVfUldMT0NLCisjZGVmaW5l IEtWTV9NTVVfTE9DS19JTklUKGt2bSkJCXJ3bG9ja19pbml0KCYoa3ZtKS0+bW11X2xvY2spCisj ZGVmaW5lIEtWTV9NTVVfTE9DSyhrdm0pCQl3cml0ZV9sb2NrKCYoa3ZtKS0+bW11X2xvY2spCisj ZGVmaW5lIEtWTV9NTVVfVU5MT0NLKGt2bSkJCXdyaXRlX3VubG9jaygmKGt2bSktPm1tdV9sb2Nr KQorI2RlZmluZSBLVk1fTU1VX1JFQURfTE9DSyhrdm0pCQlyZWFkX2xvY2soJihrdm0pLT5tbXVf bG9jaykKKyNkZWZpbmUgS1ZNX01NVV9SRUFEX1VOTE9DSyhrdm0pCXJlYWRfdW5sb2NrKCYoa3Zt KS0+bW11X2xvY2spCisjZWxzZQorI2RlZmluZSBLVk1fTU1VX0xPQ0tfSU5JVChrdm0pCQlzcGlu X2xvY2tfaW5pdCgmKGt2bSktPm1tdV9sb2NrKQorI2RlZmluZSBLVk1fTU1VX0xPQ0soa3ZtKQkJ c3Bpbl9sb2NrKCYoa3ZtKS0+bW11X2xvY2spCisjZGVmaW5lIEtWTV9NTVVfVU5MT0NLKGt2bSkJ CXNwaW5fdW5sb2NrKCYoa3ZtKS0+bW11X2xvY2spCisjZGVmaW5lIEtWTV9NTVVfUkVBRF9MT0NL KGt2bSkJCXNwaW5fbG9jaygmKGt2bSktPm1tdV9sb2NrKQorI2RlZmluZSBLVk1fTU1VX1JFQURf VU5MT0NLKGt2bSkJc3Bpbl91bmxvY2soJihrdm0pLT5tbXVfbG9jaykKKyNlbmRpZiAvKiBLVk1f SEFWRV9NTVVfUldMT0NLICovCisKK2t2bV9wZm5fdCBodmFfdG9fcGZuKHVuc2lnbmVkIGxvbmcg YWRkciwgYm9vbCBhdG9taWMsIGJvb2wgKmFzeW5jLAorCQkgICAgIGJvb2wgd3JpdGVfZmF1bHQs IGJvb2wgKndyaXRhYmxlKTsKKworI2lmZGVmIENPTkZJR19IQVZFX0tWTV9QRk5DQUNIRQordm9p ZCBnZm5fdG9fcGZuX2NhY2hlX2ludmFsaWRhdGVfc3RhcnQoc3RydWN0IGt2bSAqa3ZtLAorCQkJ CSAgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGVu ZCwKKwkJCQkgICAgICAgYm9vbCBtYXlfYmxvY2spOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9p ZCBnZm5fdG9fcGZuX2NhY2hlX2ludmFsaWRhdGVfc3RhcnQoc3RydWN0IGt2bSAqa3ZtLAorCQkJ CQkJICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkJCQkJICAgICB1bnNpZ25lZCBsb25nIGVu ZCwKKwkJCQkJCSAgICAgYm9vbCBtYXlfYmxvY2spCit7Cit9CisjZW5kaWYgLyogSEFWRV9LVk1f UEZOQ0FDSEUgKi8KKworI2VuZGlmIC8qIF9fS1ZNX01NX0hfXyAqLwpkaWZmIC0tZ2l0IGEvdmly dC9rdm0vbW11X2xvY2suaCBiL3ZpcnQva3ZtL21tdV9sb2NrLmgKZGVsZXRlZCBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDllMTMwOGY5NzM0Yy4uMDAwMDAwMDAwMDAwCi0tLSBhL3ZpcnQva3ZtL21t dV9sb2NrLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vLyBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Ci0KLSNpZm5kZWYgS1ZNX01NVV9MT0NLX0gKLSNkZWZp bmUgS1ZNX01NVV9MT0NLX0ggMQotCi0vKgotICogQXJjaGl0ZWN0dXJlcyBjYW4gY2hvb3NlIHdo ZXRoZXIgdG8gdXNlIGFuIHJ3bG9jayBvciBzcGlubG9jawotICogZm9yIHRoZSBtbXVfbG9jay4g IFRoZXNlIG1hY3JvcywgZm9yIHVzZSBpbiBjb21tb24gY29kZQotICogb25seSwgYXZvaWRzIHVz aW5nICNpZmRlZnMgaW4gcGxhY2VzIHRoYXQgbXVzdCBkZWFsIHdpdGgKLSAqIG11bHRpcGxlIGFy Y2hpdGVjdHVyZXMuCi0gKi8KLQotI2lmZGVmIEtWTV9IQVZFX01NVV9SV0xPQ0sKLSNkZWZpbmUg S1ZNX01NVV9MT0NLX0lOSVQoa3ZtKSByd2xvY2tfaW5pdCgmKGt2bSktPm1tdV9sb2NrKQotI2Rl ZmluZSBLVk1fTU1VX0xPQ0soa3ZtKSAgICAgIHdyaXRlX2xvY2soJihrdm0pLT5tbXVfbG9jaykK LSNkZWZpbmUgS1ZNX01NVV9VTkxPQ0soa3ZtKSAgICB3cml0ZV91bmxvY2soJihrdm0pLT5tbXVf bG9jaykKLSNlbHNlCi0jZGVmaW5lIEtWTV9NTVVfTE9DS19JTklUKGt2bSkgc3Bpbl9sb2NrX2lu aXQoJihrdm0pLT5tbXVfbG9jaykKLSNkZWZpbmUgS1ZNX01NVV9MT0NLKGt2bSkgICAgICBzcGlu X2xvY2soJihrdm0pLT5tbXVfbG9jaykKLSNkZWZpbmUgS1ZNX01NVV9VTkxPQ0soa3ZtKSAgICBz cGluX3VubG9jaygmKGt2bSktPm1tdV9sb2NrKQotI2VuZGlmIC8qIEtWTV9IQVZFX01NVV9SV0xP Q0sgKi8KLQotI2VuZGlmCmRpZmYgLS1naXQgYS92aXJ0L2t2bS9wZm5jYWNoZS5jIGIvdmlydC9r dm0vcGZuY2FjaGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmQ4 YzZlMWQ0YTY0NwotLS0gL2Rldi9udWxsCisrKyBiL3ZpcnQva3ZtL3BmbmNhY2hlLmMKQEAgLTAs MCArMSwzMjMgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKKy8q CisgKiBLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIGRyaXZlciBmb3IgTGludXgKKyAqCisg KiBUaGlzIG1vZHVsZSBlbmFibGVzIGtlcm5lbCBhbmQgZ3Vlc3QtbW9kZSB2Q1BVIGFjY2VzcyB0 byBndWVzdCBwaHlzaWNhbAorICogbWVtb3J5IHdpdGggc3VpdGFibGUgaW52YWxpZGF0aW9uIG1l Y2hhbmlzbXMuCisgKgorICogQ29weXJpZ2h0IMKpIDIwMjEgQW1hem9uLmNvbSwgSW5jLiBvciBp dHMgYWZmaWxpYXRlcy4KKyAqCisgKiBBdXRob3JzOgorICogICBEYXZpZCBXb29kaG91c2UgPGR3 bXcyQGluZnJhZGVhZC5vcmc+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2t2bV9ob3N0Lmg+Cisj aW5jbHVkZSA8bGludXgva3ZtLmg+CisjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgorI2luY2x1 ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisKKyNpbmNsdWRl ICJrdm1fbW0uaCIKKworLyoKKyAqIE1NVSBub3RpZmllciAnaW52YWxpZGF0ZV9yYW5nZV9zdGFy dCcgaG9vay4KKyAqLwordm9pZCBnZm5fdG9fcGZuX2NhY2hlX2ludmFsaWRhdGVfc3RhcnQoc3Ry dWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkJCSAgICAgICB1bnNpZ25lZCBs b25nIGVuZCwgYm9vbCBtYXlfYmxvY2spCit7CisJREVDTEFSRV9CSVRNQVAodmNwdV9iaXRtYXAs IEtWTV9NQVhfVkNQVVMpOworCXN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGM7CisJYm9vbCB3 YWtlX3ZjcHVzID0gZmFsc2U7CisKKwlzcGluX2xvY2soJmt2bS0+Z3BjX2xvY2spOworCWxpc3Rf Zm9yX2VhY2hfZW50cnkoZ3BjLCAma3ZtLT5ncGNfbGlzdCwgbGlzdCkgeworCQl3cml0ZV9sb2Nr X2lycSgmZ3BjLT5sb2NrKTsKKworCQkvKiBPbmx5IGEgc2luZ2xlIHBhZ2Ugc28gbm8gbmVlZCB0 byBjYXJlIGFib3V0IGxlbmd0aCAqLworCQlpZiAoZ3BjLT52YWxpZCAmJiAhaXNfZXJyb3Jfbm9z bG90X3BmbihncGMtPnBmbikgJiYKKwkJICAgIGdwYy0+dWh2YSA+PSBzdGFydCAmJiBncGMtPnVo dmEgPCBlbmQpIHsKKwkJCWdwYy0+dmFsaWQgPSBmYWxzZTsKKworCQkJLyoKKwkJCSAqIElmIGEg Z3Vlc3QgdkNQVSBjb3VsZCBiZSB1c2luZyB0aGUgcGh5c2ljYWwgYWRkcmVzcywKKwkJCSAqIGl0 IG5lZWRzIHRvIGJlIHdva2VuLgorCQkJICovCisJCQlpZiAoZ3BjLT5ndWVzdF91c2VzX3BhKSB7 CisJCQkJaWYgKCF3YWtlX3ZjcHVzKSB7CisJCQkJCXdha2VfdmNwdXMgPSB0cnVlOworCQkJCQli aXRtYXBfemVybyh2Y3B1X2JpdG1hcCwgS1ZNX01BWF9WQ1BVUyk7CisJCQkJfQorCQkJCV9fc2V0 X2JpdChncGMtPnZjcHUtPnZjcHVfaWR4LCB2Y3B1X2JpdG1hcCk7CisJCQl9CisKKwkJCS8qCisJ CQkgKiBXZSBjYW5ub3QgY2FsbCBtYXJrX3BhZ2VfZGlydHkoKSBmcm9tIGhlcmUgYmVjYXVzZQor CQkJICogdGhpcyBwaHlzaWNhbCBDUFUgbWlnaHQgbm90IGhhdmUgYW4gYWN0aXZlIHZDUFUKKwkJ CSAqIHdpdGggd2hpY2ggdG8gZG8gdGhlIEtWTSBkaXJ0eSB0cmFja2luZy4KKwkJCSAqCisJCQkg KiBOZWl0aGVyIGlzIHRoZXJlIGFueSBwb2ludCBpbiB0ZWxsaW5nIHRoZSBrZXJuZWwgTU0KKwkJ CSAqIHRoYXQgdGhlIHVuZGVybHlpbmcgcGFnZSBpcyBkaXJ0eS4gQSB2Q1BVIGluIGd1ZXN0CisJ CQkgKiBtb2RlIG1pZ2h0IHN0aWxsIGJlIHdyaXRpbmcgdG8gaXQgdXAgdG8gdGhlIHBvaW50CisJ CQkgKiB3aGVyZSB3ZSB3YWtlIHRoZW0gYSBmZXcgbGluZXMgZnVydGhlciBkb3duIGFueXdheS4K KwkJCSAqCisJCQkgKiBTbyBhbGwgdGhlIGRpcnR5IG1hcmtpbmcgaGFwcGVucyBvbiB0aGUgdW5t YXAuCisJCQkgKi8KKwkJfQorCQl3cml0ZV91bmxvY2tfaXJxKCZncGMtPmxvY2spOworCX0KKwlz cGluX3VubG9jaygma3ZtLT5ncGNfbG9jayk7CisKKwlpZiAod2FrZV92Y3B1cykgeworCQl1bnNp Z25lZCBpbnQgcmVxID0gS1ZNX1JFUV9HUENfSU5WQUxJREFURTsKKwkJYm9vbCBjYWxsZWQ7CisK KwkJLyoKKwkJICogSWYgdGhlIE9PTSByZWFwZXIgaXMgYWN0aXZlLCB0aGVuIGFsbCB2Q1BVcyBz aG91bGQgaGF2ZQorCQkgKiBiZWVuIHN0b3BwZWQgYWxyZWFkeSwgc28gcGVyZm9ybSB0aGUgcmVx dWVzdCB3aXRob3V0CisJCSAqIEtWTV9SRVFVRVNUX1dBSVQgYW5kIGJlIHNhZCBpZiBhbnkgbmVl ZGVkIHRvIGJlIHdva2VuLgorCQkgKi8KKwkJaWYgKCFtYXlfYmxvY2spCisJCQlyZXEgJj0gfktW TV9SRVFVRVNUX1dBSVQ7CisKKwkJY2FsbGVkID0ga3ZtX21ha2VfdmNwdXNfcmVxdWVzdF9tYXNr KGt2bSwgcmVxLCB2Y3B1X2JpdG1hcCk7CisKKwkJV0FSTl9PTl9PTkNFKGNhbGxlZCAmJiAhbWF5 X2Jsb2NrKTsKKwl9Cit9CisKK2Jvb2wga3ZtX2dmbl90b19wZm5fY2FjaGVfY2hlY2soc3RydWN0 IGt2bSAqa3ZtLCBzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLAorCQkJCWdwYV90IGdwYSwg dW5zaWduZWQgbG9uZyBsZW4pCit7CisJc3RydWN0IGt2bV9tZW1zbG90cyAqc2xvdHMgPSBrdm1f bWVtc2xvdHMoa3ZtKTsKKworCWlmICgoZ3BhICYgflBBR0VfTUFTSykgKyBsZW4gPiBQQUdFX1NJ WkUpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChncGMtPmdwYSAhPSBncGEgfHwgZ3BjLT5nZW5l cmF0aW9uICE9IHNsb3RzLT5nZW5lcmF0aW9uIHx8CisJICAgIGt2bV9pc19lcnJvcl9odmEoZ3Bj LT51aHZhKSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKCFncGMtPnZhbGlkKQorCQlyZXR1cm4g ZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGt2bV9nZm5fdG9f cGZuX2NhY2hlX2NoZWNrKTsKKworc3RhdGljIHZvaWQgX19yZWxlYXNlX2dwYyhzdHJ1Y3Qga3Zt ICprdm0sIGt2bV9wZm5fdCBwZm4sIHZvaWQgKmtodmEsCisJCQkgIGdwYV90IGdwYSwgYm9vbCBk aXJ0eSkKK3sKKwkvKiBVbm1hcCB0aGUgb2xkIHBhZ2UgaWYgaXQgd2FzIG1hcHBlZCBiZWZvcmUs IGFuZCByZWxlYXNlIGl0ICovCisJaWYgKCFpc19lcnJvcl9ub3Nsb3RfcGZuKHBmbikpIHsKKwkJ aWYgKGtodmEpIHsKKwkJCWlmIChwZm5fdmFsaWQocGZuKSkKKwkJCQlrdW5tYXAocGZuX3RvX3Bh Z2UocGZuKSk7CisjaWZkZWYgQ09ORklHX0hBU19JT01FTQorCQkJZWxzZQorCQkJCW1lbXVubWFw KGtodmEpOworI2VuZGlmCisJCX0KKworCQlrdm1fcmVsZWFzZV9wZm4ocGZuLCBkaXJ0eSk7CisJ CWlmIChkaXJ0eSkKKwkJCW1hcmtfcGFnZV9kaXJ0eShrdm0sIGdwYSk7CisJfQorfQorCitpbnQg a3ZtX2dmbl90b19wZm5fY2FjaGVfcmVmcmVzaChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBnZm5f dG9fcGZuX2NhY2hlICpncGMsCisJCQkJIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyBsZW4sIGJv b2wgZGlydHkpCit7CisJc3RydWN0IGt2bV9tZW1zbG90cyAqc2xvdHMgPSBrdm1fbWVtc2xvdHMo a3ZtKTsKKwl1bnNpZ25lZCBsb25nIHBhZ2Vfb2Zmc2V0ID0gZ3BhICYgflBBR0VfTUFTSzsKKwlr dm1fcGZuX3Qgb2xkX3BmbiwgbmV3X3BmbjsKKwl1bnNpZ25lZCBsb25nIG9sZF91aHZhOworCWdw YV90IG9sZF9ncGE7CisJdm9pZCAqb2xkX2todmE7CisJYm9vbCBvbGRfdmFsaWQsIG9sZF9kaXJ0 eTsKKwlpbnQgcmV0ID0gMDsKKworCS8qCisJICogSWYgbXVzdCBmaXQgd2l0aGluIGEgc2luZ2xl IHBhZ2UuIFRoZSAnbGVuJyBhcmd1bWVudCBpcworCSAqIG9ubHkgdG8gZW5mb3JjZSB0aGF0Lgor CSAqLworCWlmIChwYWdlX29mZnNldCArIGxlbiA+IFBBR0VfU0laRSkKKwkJcmV0dXJuIC1FSU5W QUw7CisKKwl3cml0ZV9sb2NrX2lycSgmZ3BjLT5sb2NrKTsKKworCW9sZF9ncGEgPSBncGMtPmdw YTsKKwlvbGRfcGZuID0gZ3BjLT5wZm47CisJb2xkX2todmEgPSBncGMtPmtodmE7CisJb2xkX3Vo dmEgPSBncGMtPnVodmE7CisJb2xkX3ZhbGlkID0gZ3BjLT52YWxpZDsKKwlvbGRfZGlydHkgPSBn cGMtPmRpcnR5OworCisJLyogSWYgdGhlIHVzZXJzcGFjZSBIVkEgaXMgaW52YWxpZCwgcmVmcmVz aCB0aGF0IGZpcnN0ICovCisJaWYgKGdwYy0+Z3BhICE9IGdwYSB8fCBncGMtPmdlbmVyYXRpb24g IT0gc2xvdHMtPmdlbmVyYXRpb24gfHwKKwkgICAga3ZtX2lzX2Vycm9yX2h2YShncGMtPnVodmEp KSB7CisJCWdmbl90IGdmbiA9IGdwYV90b19nZm4oZ3BhKTsKKworCQlncGMtPmRpcnR5ID0gZmFs c2U7CisJCWdwYy0+Z3BhID0gZ3BhOworCQlncGMtPmdlbmVyYXRpb24gPSBzbG90cy0+Z2VuZXJh dGlvbjsKKwkJZ3BjLT5tZW1zbG90ID0gX19nZm5fdG9fbWVtc2xvdChzbG90cywgZ2ZuKTsKKwkJ Z3BjLT51aHZhID0gZ2ZuX3RvX2h2YV9tZW1zbG90KGdwYy0+bWVtc2xvdCwgZ2ZuKTsKKworCQlp ZiAoa3ZtX2lzX2Vycm9yX2h2YShncGMtPnVodmEpKSB7CisJCQlyZXQgPSAtRUZBVUxUOworCQkJ Z290byBvdXQ7CisJCX0KKworCQlncGMtPnVodmEgKz0gcGFnZV9vZmZzZXQ7CisJfQorCisJLyoK KwkgKiBJZiB0aGUgdXNlcnNwYWNlIEhWQSBjaGFuZ2VkIG9yIHRoZSBQRk4gd2FzIGFscmVhZHkg aW52YWxpZCwKKwkgKiBkcm9wIHRoZSBsb2NrIGFuZCBkbyB0aGUgSFZBIHRvIFBGTiBsb29rdXAg YWdhaW4uCisJICovCisJaWYgKCFvbGRfdmFsaWQgfHwgb2xkX3VodmEgIT0gZ3BjLT51aHZhKSB7 CisJCXVuc2lnbmVkIGxvbmcgdWh2YSA9IGdwYy0+dWh2YTsKKwkJdm9pZCAqbmV3X2todmEgPSBO VUxMOworCQl1bnNpZ25lZCBsb25nIG1tdV9zZXE7CisJCWludCByZXRyeTsKKworCQkvKiBQbGFj ZWhvbGRlcnMgZm9yICJodmEgaXMgdmFsaWQgYnV0IG5vdCB5ZXQgbWFwcGVkIiAqLworCQlncGMt PnBmbiA9IEtWTV9QRk5fRVJSX0ZBVUxUOworCQlncGMtPmtodmEgPSBOVUxMOworCQlncGMtPnZh bGlkID0gdHJ1ZTsKKworCQl3cml0ZV91bmxvY2tfaXJxKCZncGMtPmxvY2spOworCisJcmV0cnlf bWFwOgorCQltbXVfc2VxID0ga3ZtLT5tbXVfbm90aWZpZXJfc2VxOworCQlzbXBfcm1iKCk7CisK KwkJLyogV2UgYWx3YXlzIHJlcXVlc3QgYSB3cml0ZWFibGUgbWFwcGluZyAqLworCQluZXdfcGZu ID0gaHZhX3RvX3Bmbih1aHZhLCBmYWxzZSwgTlVMTCwgdHJ1ZSwgTlVMTCk7CisJCWlmIChpc19l cnJvcl9ub3Nsb3RfcGZuKG5ld19wZm4pKSB7CisJCQlyZXQgPSAtRUZBVUxUOworCQkJZ290byBt YXBfZG9uZTsKKwkJfQorCisJCUtWTV9NTVVfUkVBRF9MT0NLKGt2bSk7CisJCXJldHJ5ID0gbW11 X25vdGlmaWVyX3JldHJ5X2h2YShrdm0sIG1tdV9zZXEsIHVodmEpOworCQlLVk1fTU1VX1JFQURf VU5MT0NLKGt2bSk7CisJCWlmIChyZXRyeSkgeworCQkJY29uZF9yZXNjaGVkKCk7CisJCQlnb3Rv IHJldHJ5X21hcDsKKwkJfQorCisJCWlmIChncGMtPmtlcm5lbF9tYXApIHsKKwkJCWlmIChuZXdf cGZuID09IG9sZF9wZm4pIHsKKwkJCQluZXdfa2h2YSA9ICh2b2lkICopKCh1bnNpZ25lZCBsb25n KW9sZF9raHZhIC0gcGFnZV9vZmZzZXQpOworCQkJCW9sZF9wZm4gPSBLVk1fUEZOX0VSUl9GQVVM VDsKKwkJCQlvbGRfa2h2YSA9IE5VTEw7CisJCQl9IGVsc2UgaWYgKHBmbl92YWxpZChuZXdfcGZu KSkgeworCQkJCW5ld19raHZhID0ga21hcChwZm5fdG9fcGFnZShuZXdfcGZuKSk7CisjaWZkZWYg Q09ORklHX0hBU19JT01FTQorCQkJfSBlbHNlIHsKKwkJCQluZXdfa2h2YSA9IG1lbXJlbWFwKHBm bl90b19ocGEobmV3X3BmbiksIFBBR0VfU0laRSwgTUVNUkVNQVBfV0IpOworI2VuZGlmCisJCQl9 CisJCQlpZiAoIW5ld19raHZhKQorCQkJCXJldCA9IC1FRkFVTFQ7CisJCX0KKworCW1hcF9kb25l OgorCQl3cml0ZV9sb2NrX2lycSgmZ3BjLT5sb2NrKTsKKwkJaWYgKHJldCkgeworCQkJZ3BjLT52 YWxpZCA9IGZhbHNlOworCQkJZ3BjLT5wZm4gPSBLVk1fUEZOX0VSUl9GQVVMVDsKKwkJCWdwYy0+ a2h2YSA9IE5VTEw7CisJCX0gZWxzZSB7CisJCQkvKiBBdCB0aGlzIHBvaW50LCBncGMtPnZhbGlk IG1heSBhbHJlYWR5IGhhdmUgYmVlbiBjbGVhcmVkICovCisJCQlncGMtPnBmbiA9IG5ld19wZm47 CisJCQlncGMtPmtodmEgPSBuZXdfa2h2YSArIHBhZ2Vfb2Zmc2V0OworCQl9CisJfSBlbHNlIHsK KwkJLyogSWYgdGhlIEhWQeKGklBGTiBtYXBwaW5nIHdhcyBhbHJlYWR5IHZhbGlkLCBkb24ndCB1 bm1hcCBpdC4gKi8KKwkJb2xkX3BmbiA9IEtWTV9QRk5fRVJSX0ZBVUxUOworCQlvbGRfa2h2YSA9 IE5VTEw7CisJfQorCisgb3V0OgorCWlmIChyZXQpCisJCWdwYy0+ZGlydHkgPSBmYWxzZTsKKwll bHNlCisJCWdwYy0+ZGlydHkgPSBkaXJ0eTsKKworCXdyaXRlX3VubG9ja19pcnEoJmdwYy0+bG9j ayk7CisKKwlfX3JlbGVhc2VfZ3BjKGt2bSwgb2xkX3Bmbiwgb2xkX2todmEsIG9sZF9ncGEsIG9s ZF9kaXJ0eSk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX2dmbl90 b19wZm5fY2FjaGVfcmVmcmVzaCk7CisKK3ZvaWQga3ZtX2dmbl90b19wZm5fY2FjaGVfdW5tYXAo c3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKQoreworCXZvaWQg Km9sZF9raHZhOworCWt2bV9wZm5fdCBvbGRfcGZuOworCWJvb2wgb2xkX2RpcnR5OworCWdwYV90 IG9sZF9ncGE7CisKKwl3cml0ZV9sb2NrX2lycSgmZ3BjLT5sb2NrKTsKKworCWdwYy0+dmFsaWQg PSBmYWxzZTsKKworCW9sZF9raHZhID0gZ3BjLT5raHZhOworCW9sZF9kaXJ0eSA9IGdwYy0+ZGly dHk7CisJb2xkX2dwYSA9IGdwYy0+Z3BhOworCW9sZF9wZm4gPSBncGMtPnBmbjsKKworCS8qCisJ ICogV2UgY2FuIGxlYXZlIHRoZSBHUEEg4oaSIHVIVkEgbWFwIGNhY2hlIGludGFjdCBidXQgdGhl IFBGTgorCSAqIGxvb2t1cCB3aWxsIG5lZWQgdG8gYmUgcmVkb25lIGV2ZW4gZm9yIHRoZSBzYW1l IHBhZ2UuCisJICovCisJZ3BjLT5raHZhID0gTlVMTDsKKwlncGMtPnBmbiA9IEtWTV9QRk5fRVJS X0ZBVUxUOworCisJd3JpdGVfdW5sb2NrX2lycSgmZ3BjLT5sb2NrKTsKKworCV9fcmVsZWFzZV9n cGMoa3ZtLCBvbGRfcGZuLCBvbGRfa2h2YSwgb2xkX2dwYSwgb2xkX2RpcnR5KTsKK30KK0VYUE9S VF9TWU1CT0xfR1BMKGt2bV9nZm5fdG9fcGZuX2NhY2hlX3VubWFwKTsKKworCitpbnQga3ZtX2dm bl90b19wZm5fY2FjaGVfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBnZm5fdG9fcGZuX2Nh Y2hlICpncGMsCisJCQkgICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZ3Vlc3RfdXNl c19wYSwKKwkJCSAgICAgIGJvb2wga2VybmVsX21hcCwgZ3BhX3QgZ3BhLCB1bnNpZ25lZCBsb25n IGxlbiwKKwkJCSAgICAgIGJvb2wgZGlydHkpCit7CisJaWYgKCFncGMtPmFjdGl2ZSkgeworCQly d2xvY2tfaW5pdCgmZ3BjLT5sb2NrKTsKKworCQlncGMtPmtodmEgPSBOVUxMOworCQlncGMtPnBm biA9IEtWTV9QRk5fRVJSX0ZBVUxUOworCQlncGMtPnVodmEgPSBLVk1fSFZBX0VSUl9CQUQ7CisJ CWdwYy0+dmNwdSA9IHZjcHU7CisJCWdwYy0+a2VybmVsX21hcCA9IGtlcm5lbF9tYXA7CisJCWdw Yy0+Z3Vlc3RfdXNlc19wYSA9IGd1ZXN0X3VzZXNfcGE7CisJCWdwYy0+dmFsaWQgPSBmYWxzZTsK KwkJZ3BjLT5hY3RpdmUgPSB0cnVlOworCisJCXNwaW5fbG9jaygma3ZtLT5ncGNfbG9jayk7CisJ CWxpc3RfYWRkKCZncGMtPmxpc3QsICZrdm0tPmdwY19saXN0KTsKKwkJc3Bpbl91bmxvY2soJmt2 bS0+Z3BjX2xvY2spOworCX0KKwlyZXR1cm4ga3ZtX2dmbl90b19wZm5fY2FjaGVfcmVmcmVzaChr dm0sIGdwYywgZ3BhLCBsZW4sIGRpcnR5KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGt2bV9nZm5f dG9fcGZuX2NhY2hlX2luaXQpOworCit2b2lkIGt2bV9nZm5fdG9fcGZuX2NhY2hlX2Rlc3Ryb3ko c3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKQoreworCWlmIChn cGMtPmFjdGl2ZSkgeworCQlzcGluX2xvY2soJmt2bS0+Z3BjX2xvY2spOworCQlsaXN0X2RlbCgm Z3BjLT5saXN0KTsKKwkJc3Bpbl91bmxvY2soJmt2bS0+Z3BjX2xvY2spOworCisJCWt2bV9nZm5f dG9fcGZuX2NhY2hlX3VubWFwKGt2bSwgZ3BjKTsKKwkJZ3BjLT5hY3RpdmUgPSBmYWxzZTsKKwl9 Cit9CitFWFBPUlRfU1lNQk9MX0dQTChrdm1fZ2ZuX3RvX3Bmbl9jYWNoZV9kZXN0cm95KTsKLS0g CjIuMzEuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5m cmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xp bnV4LWFybS1rZXJuZWwK