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 428E9C27C44 for ; Wed, 29 May 2024 12:16:37 +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:Cc:To:From:Subject:Message-ID: References:Mime-Version:In-Reply-To:Date:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=gSQKCBoKxhqdmyD64RMmWKvJUYq22CZWOM/2M0g1X/M=; b=aUnJhf/hyjwDemZJeHyCwJ+GDv hW/RcMYJvf9rtjWtqoeEy39FejQcs611eEFyVWQmFhqHQYWiPS7JZAcTTZwzc3UOUGvWvrfmvOK4c 1muGa2qk+//cW8YjBDKsX6UQukS3gVcuGjpgZ4D8xC4dI886yhayCGUB2jxwPekyKnriYP0w4suuy fYXTgi9ngnBRkuB/WeWuKS7pGT7k80cq26pVVJP3n+jhpsPkYukRaltxP4SMmUP8RPy4Yde6URTW9 nQCfvXmBZqp4CKiQ37Kh4d+9p1WO/yyKDL8JkGwQDOOGGRAPMhtXBHI5fxoamL9r+KISnnrrxgsqJ sIr0uX3g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sCIEF-000000043wt-29tp; Wed, 29 May 2024 12:16:27 +0000 Received: from mail-yb1-xb49.google.com ([2607:f8b0:4864:20::b49]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sCICq-000000043FD-49E8 for linux-arm-kernel@lists.infradead.org; Wed, 29 May 2024 12:15:15 +0000 Received: by mail-yb1-xb49.google.com with SMTP id 3f1490d57ef6-dfa47ef0589so938950276.0 for ; Wed, 29 May 2024 05:14:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1716984897; x=1717589697; darn=lists.infradead.org; h=content-transfer-encoding:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:from:to:cc:subject:date:message-id :reply-to; bh=uRgrsfnu4k+NI/qYYv/tuJDICq7UcPQuz5rX48+teys=; b=njCK/w8zf0WDHuHtFtQaSmIMK9RAjhFh4q1FzUc4hBn/34DxwCp/R5v/u4JDFibeIY aHmYg3IA05z42K951Ed6vo47wJvddaWvQgV5Qa9Eh4qJHIb1QwS5k2m0kmNNfafJMPnY q/WiGleMiZTmuRAJcOVrh7CH9N74vzJS1Ex/Wm26/2BujxhNDDdQuZp2R18rRdhmrGe6 ti1kFnQfGOItgONY0VFIZ9fEgf89jOZLajI9RNpmCDKq6CZLD7IEWitxgH6Ya8so3zCS DLiDNxqntlgcPDvBhjFUJWWzcnvEqvKlLsO1G9Dmyqd94L7gGlHk1qc82NQwr5fvxi9j /CLA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1716984897; x=1717589697; h=content-transfer-encoding:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to; bh=uRgrsfnu4k+NI/qYYv/tuJDICq7UcPQuz5rX48+teys=; b=S8J6DQTL4nCdrwzeNZ/16NNGl71uUiUpgjkpJ76sOPfC0nhjaJIGHP9lzrrGSZVAHw n5d+AoIy/PpOgh/PqYuYekJRZpAEWYaralNbfjIeSVRRauo5aiq21joNUE4swC7je9MJ ZlvvCT1Sm4xmiWs+z13j3yKHEwKZTYK+YVuY8XM8fwbLrOIkm7HPdTmZrT+yUgRuHgng 3MycK7k24dMFvhhYvK2NcfA0DMYA+v7dqKZnPBe4Z6SfH5u5bpde8Ujt8itQBGeixWhY pMnSeGncw9ocpTlMTrIpUjLynUtrTwUd7/rlT1+U/GrsduFOWuAq80f5gRpNBBVgSs7T w0wg== X-Forwarded-Encrypted: i=1; AJvYcCVz4SOx0Mzuqasjuc8lsko8ipoGg8+M4mTY2H3iaOgwBIQRGio9cRNCQ53TzHd7vMRsfn08CL2chaCxoBAxXKwEP1mTDpv7TsEzGM6kfWBtSV/2WbY= X-Gm-Message-State: AOJu0Yw9v1xl4LTavdpLFAPLRkW9KdJq4HbBRMAXK7sVVX+ovpvAD+oJ ew9ClTBVG1mHgcrFotwaNfxelwTSvF53UsOQk+XjYjHmsH+dyuBYdIX20ZIxIrQoRVpFvjF4JQ= = X-Google-Smtp-Source: AGHT+IFkQb5OxQ4pScFZIWRQEFsGIMu9g6HuNiBaUgrqAIayPXl97t9kWzQUkwXiZZdHCWHOqYzW82AA/Q== X-Received: from ptosi.c.googlers.com ([fda3:e722:ac3:cc00:31:98fb:c0a8:11ec]) (user=ptosi job=sendgmr) by 2002:a05:6902:1207:b0:dee:7884:acc7 with SMTP id 3f1490d57ef6-df77214fd6dmr1189597276.1.1716984897529; Wed, 29 May 2024 05:14:57 -0700 (PDT) Date: Wed, 29 May 2024 13:12:18 +0100 In-Reply-To: <20240529121251.1993135-1-ptosi@google.com> Mime-Version: 1.0 References: <20240529121251.1993135-1-ptosi@google.com> X-Mailer: git-send-email 2.45.1.288.g0e0cd299f1-goog Message-ID: <20240529121251.1993135-13-ptosi@google.com> Subject: [PATCH v4 12/13] KVM: arm64: VHE: Add test module for hyp kCFI From: "=?UTF-8?q?Pierre-Cl=C3=A9ment=20Tosi?=" To: kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, kvm@vger.kernel.org Cc: "=?UTF-8?q?Pierre-Cl=C3=A9ment=20Tosi?=" , Marc Zyngier , Oliver Upton , Suzuki K Poulose , Vincent Donnefort X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240529_051501_769657_359A2860 X-CRM114-Status: GOOD ( 32.76 ) 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 SW4gb3JkZXIgdG8gZWFzaWx5IHBlcmlvZGljYWxseSAoYW5kIHBvdGVudGlhbGx5IGF1dG9tYXRp Y2FsbHkpIHZhbGlkYXRlCnRoYXQgdGhlIGh5cGVydmlzb3Iga0NGSSBmZWF0dXJlIGRvZXNuJ3Qg Yml0cm90LCBpbnRyb2R1Y2UgYSB3YXkgdG8KdHJpZ2dlciBoeXBlcnZpc29yIGtDRkkgZmF1bHRz IGZyb20gdXNlcnNwYWNlIG9uIHRlc3QgYnVpbGRzIG9mIEtWTS4KCkFkZCBob29rcyBpbiB0aGUg aHlwZXJ2aXNvciBjb2RlIHRvIGNhbGwgcmVnaXN0ZXJlZCBjYWxsYmFja3MgKGludGVuZGVkCnRv IHRyaWdnZXIga0NGSSBmYXVsdHMgZWl0aGVyIGZvciB0aGUgY2FsbGJhY2sgY2FsbCBpdHNlbGYg b2YgZnJvbQp3aXRoaW4gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uKSB3aGVuIHJ1bm5pbmcgd2l0aCBn dWVzdCBvciBob3N0IFZCQVJfRUwyLgpBcyB0aGUgY2FsbHMgYXJlIGlzc3VlZCBmcm9tIHRoZSBL Vk1fUlVOIGlvY3RsIGhhbmRsaW5nIHBhdGgsIHVzZXJzcGFjZQpnYWlucyBjb250cm9sIG92ZXIg d2hlbiB0aGUgYWN0dWFsIHRyaWdnZXJpbmcgb2YgdGhlIGZhdWx0IGhhcHBlbnMKd2l0aG91dCBu ZWVkaW5nIHRvIG1vZGlmeSB0aGUgS1ZNIHVBUEkuCgpFeHBvcnQga2VybmVsIGZ1bmN0aW9ucyB0 byByZWdpc3RlciB0aGVzZSBjYWxsYmFja3MgZnJvbSBtb2R1bGVzIGFuZAppbnRyb2R1Y2UgYSBr ZXJuZWwgbW9kdWxlIGludGVuZGVkIHRvIGNvbnRhaW4gYW55IHRlc3RpbmcgbG9naWMuIEJ5Cmxp bWl0aW5nIHRoZSBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCB0byBhIHN0cmljdCBtaW5pbXVt LCB0aGlzCmFyY2hpdGVjdHVyYWwgc3BsaXQgYWxsb3dzIHRlc3RzIHRvIGJlIHVwZGF0ZWQgKHdp dGhpbiB0aGUgbW9kdWxlKQp3aXRob3V0IHRoZSBuZWVkIHRvIHJlZGVwbG95IChvciByZWNvbXBp bGUpIHRoZSBrZXJuZWwgKGh5cCkgdW5kZXIgdGVzdC4KClVzZSB0aGUgbW9kdWxlIHBhcmFtZXRl cnMgYXMgdGhlIHVBUEkgZm9yIGNvbmZpZ3VyaW5nIHRoZSBmYXVsdApjb25kaXRpb24gYmVpbmcg dGVzdGVkIChpLmUuIGVpdGhlciBhdCBpbnNlcnRpb24gb3IgcG9zdC1pbnNlcnRpb24KdXNpbmcg L3N5cy9tb2R1bGUvLi4uL3BhcmFtZXRlcnMpLCB3aGljaCBuYXR1cmFsbHkgbWFrZXMgaXQgaW1w b3NzaWJsZQpmb3IgdXNlcnNwYWNlIHRvIHRlc3Qga0NGSSB3aXRob3V0IHRoZSBtb2R1bGUgKGFu ZCwgaW52ZXJzZWx5LCBtYWtlcwp0aGUgbW9kdWxlIG9ubHkgLSBub3QgS1ZNIC0gcmVzcG9uc2li bGUgZm9yIGV4cG9zaW5nIHNhaWQgdUFQSSkuCgpBcyBrQ0ZJIGlzIGltcGxlbWVudGVkIHdpdGgg YSBjYWxsZXItc2lkZSBjaGVjayBvZiBhIGNhbGxlZS1zaWRlIHZhbHVlLAptYWtlIHRoZSBtb2R1 bGUgc3VwcG9ydCA0IHRlc3RzIGJhc2VkIG9uIHRoZSBsb2NhdGlvbiBvZiB0aGUgY2FsbGVyIGFu ZApjYWxsZWUgKGJ1aWx0LWluIG9yIGluLW1vZHVsZSksIGZvciBlYWNoIG9mIHRoZSAyIGh5cGVy dmlzb3IgY29udGV4dHMKKGhvc3QgJiBndWVzdCksIHNlbGVjdGVkIGJ5IHVzZXJzcGFjZSB1c2lu ZyB0aGUgJ2d1ZXN0JyBvciAnaG9zdCcgbW9kdWxlCnBhcmFtZXRlci4gRm9yIHRoaXMgcHVycG9z ZSwgZXhwb3J0IHN5bWJvbHMgd2hpY2ggdGhlIG1vZHVsZSBjYW4gdXNlIHRvCmNvbmZpZ3VyZSB0 aGUgY2FsbGJhY2tzIGZvciBpbi1rZXJuZWwgYW5kIG1vZHVsZS10by1idWlsdC1pbiBrQ0ZJCmZh dWx0aW5nIGNhbGxzLgoKRGVmaW5lIHRoZSBtb2R1bGUtdG8ta2VybmVsIEFQSSB0byBhbGxvdyB0 aGUgbW9kdWxlIHRvIGRldGVjdCB0aGF0IGl0CndhcyBsb2FkZWQgb24gYSBrZXJuZWwgYnVpbHQg d2l0aCBzdXBwb3J0IGZvciBpdCBidXQgd2hpY2ggaXMgcnVubmluZwp3aXRob3V0IGEgaHlwZXJ2 aXNvciAoLUVOWElPKSBvciB3aXRoIG9uZSB0aGF0IGRvZXNuJ3QgdXNlIHRoZSBWSEUgQ1BVCmZl YXR1cmUgKC1FT1BOT1RTVVBQKSwgd2hpY2ggaXMgY3VycmVudGx5IHRoZSBvbmx5IG1vZGUgZm9y IHdoaWNoIEtWTQpzdXBwb3J0cyBoeXBlcnZpc29yIGtDRkkuCgpBbGxvdyBrZXJuZWwgYnVpbGQg Y29uZmlncyB0byBzZXQgQ09ORklHX0hZUF9DRklfVEVTVCB0byBvbmx5IHN1cHBvcnQKdGhlIGlu LWtlcm5lbCBob29rcyAoPXkpIG9yIGFsc28gYnVpbGQgdGhlIHRlc3QgbW9kdWxlICg9bSkuIFVz ZQppbnRlcm1lZGlhdGUgaW50ZXJuYWwgS2NvbmZpZyBmbGFncyAoQ09ORklHX0hZUF9TVVBQT1JU U19DRklfVEVTVCBhbmQKQ09ORklHX0hZUF9DRklfVEVTVF9NT0RVTEUpIHRvIHNpbXBsaWZ5IHRo ZSBNYWtlZmlsZXMgYW5kICNpZmRlZnMuIEFzCnRoZSBzeW1ib2xzIGZvciBjYWxsYmFjayByZWdp c3RyYXRpb24gYXJlIG9ubHkgZXhwb3J0ZWQgdG8gbW9kdWxlcyB3aGVuCkNPTkZJR19IWVBfQ0ZJ X1RFU1QgIT0gbiwgaXQgaXMgaW1wb3NzaWJsZSBmb3IgdGhlIHRlc3QgbW9kdWxlIHRvIGJlCm5v bi1mb3JjZWZ1bGx5IGluc2VydGVkIG9uIGEga2VybmVsIHRoYXQgZG9lc24ndCBzdXBwb3J0IGl0 LgoKTm90ZSB0aGF0IHRoaXMgZmVhdHVyZSBtdXN0IE5PVCByZXN1bHQgaW4gYW55IG5vdGljZWFi bGUgY2hhbmdlCihiZWhhdmlvcmFsIG9yIGJpbmFyeSBzaXplKSB3aGVuIEhZUF9DRklfVEVTVF9N T0RVTEUgPSBuLgoKQ09ORklHX0hZUF9DRklfVEVTVCBpcyBpbnRlbnRpb25hbGx5IGluZGVwZW5k ZW50IG9mIENPTkZJR19DRklfQ0xBTkcsIHRvCmF2b2lkIGFyYml0cmFyaWx5IGxpbWl0aW5nIHRo ZSBudW1iZXIgb2YgZmxhZyBjb21iaW5hdGlvbnMgdGhhdCBjYW4gYmUKdGVzdGVkIHdpdGggdGhl IG1vZHVsZS4KCkFsc28gbm90ZSB0aGF0LCBhcyBWSEUgYWxpYXNlcyBWQkFSX0VMMSB0byBWQkFS X0VMMiBmb3IgdGhlIGhvc3QsCnRlc3RpbmcgaHlwZXJ2aXNvciBrQ0ZJIGluIFZIRSBhbmQgaW4g aG9zdCBjb250ZXh0IGlzIGVxdWl2YWxlbnQgdG8KdGVzdGluZyBrQ0ZJIHN1cHBvcnQgb2YgdGhl IGtlcm5lbCBpdHNlbGYgaS5lLiBFTDEgaW4gbm9uLVZIRSBhbmQvb3IgaW4Kbm9uLXZpcnR1YWxp emVkIGVudmlyb25tZW50cy4gRm9yIHRoaXMgcmVhc29uLCBDT05GSUdfQ0ZJX1BFUk1JU1NJVkUK Kip3aWxsKiogcHJldmVudCB0aGUgdGVzdCBtb2R1bGUgZnJvbSB0cmlnZ2VyaW5nIGEgaHlwIHBh bmljIChhbHRob3VnaCBhCndhcm5pbmcgc3RpbGwgZ2V0cyBwcmludGVkKSBpbiB0aGF0IGNvbnRl eHQuCgpTaWduZWQtb2ZmLWJ5OiBQaWVycmUtQ2zDqW1lbnQgVG9zaSA8cHRvc2lAZ29vZ2xlLmNv bT4KLS0tCiBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9jZmkuaCAgICAgfCAgMzYgKysrKysr KysKIGFyY2gvYXJtNjQva3ZtL0tjb25maWcgICAgICAgICAgICAgICB8ICAyMiArKysrKwogYXJj aC9hcm02NC9rdm0vTWFrZWZpbGUgICAgICAgICAgICAgIHwgICAzICsKIGFyY2gvYXJtNjQva3Zt L2h5cC9pbmNsdWRlL2h5cC9jZmkuaCB8ICA0NyArKysrKysrKysrCiBhcmNoL2FybTY0L2t2bS9o eXAvdmhlL01ha2VmaWxlICAgICAgfCAgIDEgKwogYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9jZmku YyAgICAgICAgIHwgIDM3ICsrKysrKysrCiBhcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5j ICAgICAgfCAgIDcgKysKIGFyY2gvYXJtNjQva3ZtL2h5cF9jZmlfdGVzdC5jICAgICAgICB8ICA0 MyArKysrKysrKysKIGFyY2gvYXJtNjQva3ZtL2h5cF9jZmlfdGVzdF9tb2R1bGUuYyB8IDEzMyAr KysrKysrKysrKysrKysrKysrKysrKysrKysKIDkgZmlsZXMgY2hhbmdlZCwgMzI5IGluc2VydGlv bnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9jZmku aAogY3JlYXRlIG1vZGUgMTAwNjQ0IGFyY2gvYXJtNjQva3ZtL2h5cC9pbmNsdWRlL2h5cC9jZmku aAogY3JlYXRlIG1vZGUgMTAwNjQ0IGFyY2gvYXJtNjQva3ZtL2h5cC92aGUvY2ZpLmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBhcmNoL2FybTY0L2t2bS9oeXBfY2ZpX3Rlc3QuYwogY3JlYXRlIG1vZGUg MTAwNjQ0IGFyY2gvYXJtNjQva3ZtL2h5cF9jZmlfdGVzdF9tb2R1bGUuYwoKZGlmZiAtLWdpdCBh L2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2NmaS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2Fz bS9rdm1fY2ZpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4xM2Nj N2IxOWQ4MzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9j ZmkuaApAQCAtMCwwICsxLDM2IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu MC1vbmx5ICovCisvKgorICogQ29weXJpZ2h0IChDKSAyMDI0IC0gR29vZ2xlIEluYworICogQXV0 aG9yOiBQaWVycmUtQ2zDqW1lbnQgVG9zaSA8cHRvc2lAZ29vZ2xlLmNvbT4KKyAqLworCisjaWZu ZGVmIF9fQVJNNjRfS1ZNX0NGSV9IX18KKyNkZWZpbmUgX19BUk02NF9LVk1fQ0ZJX0hfXworCisj aW5jbHVkZSA8YXNtL2t2bV9hc20uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorCisjaWZk ZWYgQ09ORklHX0hZUF9TVVBQT1JUU19DRklfVEVTVAorCitpbnQga3ZtX2NmaV90ZXN0X3JlZ2lz dGVyX2hvc3RfY3R4dF9jYih2b2lkICgqY2IpKHZvaWQpKTsKK2ludCBrdm1fY2ZpX3Rlc3RfcmVn aXN0ZXJfZ3Vlc3RfY3R4dF9jYih2b2lkICgqY2IpKHZvaWQpKTsKKworI2Vsc2UKKworc3RhdGlj IGlubGluZSBpbnQga3ZtX2NmaV90ZXN0X3JlZ2lzdGVyX2hvc3RfY3R4dF9jYih2b2lkICgqY2Ip KHZvaWQpKQoreworCXJldHVybiAtRU9QTk9UU1VQUDsKK30KKworc3RhdGljIGlubGluZSBpbnQg a3ZtX2NmaV90ZXN0X3JlZ2lzdGVyX2d1ZXN0X2N0eHRfY2Iodm9pZCAoKmNiKSh2b2lkKSkKK3sK KwlyZXR1cm4gLUVPUE5PVFNVUFA7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfSFlQX1NVUFBPUlRT X0NGSV9URVNUICovCisKKy8qIFN5bWJvbHMgd2hpY2ggdGhlIGhvc3QgY2FuIHJlZ2lzdGVyIGFz IGh5cCBjYWxsYmFja3M7IHNlZSA8aHlwL2NmaS5oPi4gKi8KK3ZvaWQgaHlwX3RyaWdnZXJfYnVp bHRpbl9jZmlfZmF1bHQodm9pZCk7Cit2b2lkIGh5cF9idWlsdGluX2NmaV9mYXVsdF90YXJnZXQo aW50IHVudXNlZCk7CisKKyNlbmRpZiAvKiBfX0FSTTY0X0tWTV9DRklfSF9fICovCmRpZmYgLS1n aXQgYS9hcmNoL2FybTY0L2t2bS9LY29uZmlnIGIvYXJjaC9hcm02NC9rdm0vS2NvbmZpZwppbmRl eCA1OGYwOTM3MGQxN2UuLjVkYWE4MDc5YTEyMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0v S2NvbmZpZworKysgYi9hcmNoL2FybTY0L2t2bS9LY29uZmlnCkBAIC02NSw0ICs2NSwyNiBAQCBj b25maWcgUFJPVEVDVEVEX05WSEVfU1RBQ0tUUkFDRQogCiAJICBJZiB1bnN1cmUsIG9yIG5vdCB1 c2luZyBwcm90ZWN0ZWQgblZIRSAocEtWTSksIHNheSBOLgogCitjb25maWcgSFlQX0NGSV9URVNU CisJdHJpc3RhdGUgIktWTSBoeXBlcnZpc29yIGtDRkkgdGVzdCBzdXBwb3J0IgorCWRlcGVuZHMg b24gS1ZNCisJaGVscAorCSAgU2F5IFkgb3IgTSBoZXJlIHRvIGJ1aWxkIEtWTSB3aXRoIHRlc3Qg aG9va3MgdG8gc3VwcG9ydCBpbnRlbnRpb25hbGx5CisJICB0cmlnZ2VyaW5nIGh5cGVydmlzb3Ig a0NGSSBmYXVsdHMgaW4gZ3Vlc3Qgb3IgaG9zdCBjb250ZXh0LgorCisJICBTYXkgTSBoZXJlIHRv IGFsc28gYnVpbGQgYSBtb2R1bGUgd2hpY2ggcmVnaXN0ZXJzIGNhbGxiYWNrcyB0cmlnZ2VyaW5n CisJICBmYXVsdHMgYW5kIHNlbGVjdGVkIGJ5IHVzZXJzcGFjZSB0aHJvdWdoIGl0cyBwYXJhbWV0 ZXJzLgorCisJICBOb3RlIHRoYXQgdGhpcyBmZWF0dXJlIGlzIGN1cnJlbnRseSBvbmx5IHN1cHBv cnRlZCBpbiBWSEUgbW9kZS4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKworY29uZmlnIEhZUF9T VVBQT1JUU19DRklfVEVTVAorCWRlZl9ib29sIHkKKwlkZXBlbmRzIG9uIEhZUF9DRklfVEVTVAor Citjb25maWcgSFlQX0NGSV9URVNUX01PRFVMRQorCWRlZl90cmlzdGF0ZSBtIGlmIEhZUF9DRklf VEVTVCA9IG0KKwlkZXBlbmRzIG9uIEhZUF9DRklfVEVTVAorCiBlbmRpZiAjIFZJUlRVQUxJWkFU SU9OCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9NYWtlZmlsZSBiL2FyY2gvYXJtNjQva3Zt L01ha2VmaWxlCmluZGV4IGE2NDk3MjI4YzVhOC4uMzAzYmU0MmFkOTBhIDEwMDY0NAotLS0gYS9h cmNoL2FybTY0L2t2bS9NYWtlZmlsZQorKysgYi9hcmNoL2FybTY0L2t2bS9NYWtlZmlsZQpAQCAt MjIsNiArMjIsNyBAQCBrdm0teSArPSBhcm0ubyBtbXUubyBtbWlvLm8gcHNjaS5vIGh5cGVyY2Fs bHMubyBwdnRpbWUubyBcCiAJIHZnaWMvdmdpYy1tbWlvLXYzLm8gdmdpYy92Z2ljLWt2bS1kZXZp Y2UubyBcCiAJIHZnaWMvdmdpYy1pdHMubyB2Z2ljL3ZnaWMtZGVidWcubwogCitrdm0tJChDT05G SUdfSFlQX1NVUFBPUlRTX0NGSV9URVNUKSArPSBoeXBfY2ZpX3Rlc3Qubwoga3ZtLSQoQ09ORklH X0hXX1BFUkZfRVZFTlRTKSAgKz0gcG11LWVtdWwubyBwbXUubwoga3ZtLSQoQ09ORklHX0FSTTY0 X1BUUl9BVVRIKSAgKz0gcGF1dGgubwogCkBAIC00MCwzICs0MSw1IEBAICQob2JqKS9oeXBfY29u c3RhbnRzLmg6ICQob2JqKS9oeXAtY29uc3RhbnRzLnMgRk9SQ0UKIAogb2JqLWt2bSA6PSAkKGFk ZHByZWZpeCAkKG9iaikvLCAkKGt2bS15KSkKICQob2JqLWt2bSk6ICQob2JqKS9oeXBfY29uc3Rh bnRzLmgKKworb2JqLSQoQ09ORklHX0hZUF9DRklfVEVTVF9NT0RVTEUpICs9IGh5cF9jZmlfdGVz dF9tb2R1bGUubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL2Nm aS5oIGIvYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL2NmaS5oCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYzY1MzYwNDBiYzA2Ci0tLSAvZGV2L251bGwKKysr IGIvYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL2NmaS5oCkBAIC0wLDAgKzEsNDcgQEAK Ky8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KKy8qCisgKiBDb3B5 cmlnaHQgKEMpIDIwMjQgLSBHb29nbGUgSW5jCisgKiBBdXRob3I6IFBpZXJyZS1DbMOpbWVudCBU b3NpIDxwdG9zaUBnb29nbGUuY29tPgorICovCisKKyNpZm5kZWYgX19BUk02NF9LVk1fSFlQX0NG SV9IX18KKyNkZWZpbmUgX19BUk02NF9LVk1fSFlQX0NGSV9IX18KKworI2luY2x1ZGUgPGFzbS9i dWcuaD4KKyNpbmNsdWRlIDxhc20vZXJybm8uaD4KKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVy Lmg+CisKKyNpZmRlZiBDT05GSUdfSFlQX1NVUFBPUlRTX0NGSV9URVNUCisKK2ludCBfX2t2bV9y ZWdpc3Rlcl9jZmlfdGVzdF9jYih2b2lkICgqY2IpKHZvaWQpLCBib29sIGluX2hvc3RfY3R4dCk7 CisKK2V4dGVybiB2b2lkICgqaHlwX3Rlc3RfaG9zdF9jdHh0X2NmaSkodm9pZCk7CitleHRlcm4g dm9pZCAoKmh5cF90ZXN0X2d1ZXN0X2N0eHRfY2ZpKSh2b2lkKTsKKworLyogSHlwZXJ2aXNvciBj YWxsYmFja3MgZm9yIHRoZSBob3N0IHRvIHJlZ2lzdGVyLiAqLwordm9pZCBoeXBfdHJpZ2dlcl9i dWlsdGluX2NmaV9mYXVsdCh2b2lkKTsKK3ZvaWQgaHlwX2J1aWx0aW5fY2ZpX2ZhdWx0X3Rhcmdl dChpbnQgdW51c2VkKTsKKworI2Vsc2UKKworc3RhdGljIGlubGluZQoraW50IF9fa3ZtX3JlZ2lz dGVyX2NmaV90ZXN0X2NiKHZvaWQgKCpjYikodm9pZCksIGJvb2wgaW5faG9zdF9jdHh0KQorewor CXJldHVybiAtRU9QTk9UU1VQUDsKK30KKworI2RlZmluZSBoeXBfdGVzdF9ob3N0X2N0eHRfY2Zp ICgodm9pZCgqKSh2b2lkKSkoTlVMTCkpCisjZGVmaW5lIGh5cF90ZXN0X2d1ZXN0X2N0eHRfY2Zp ICgodm9pZCgqKSh2b2lkKSkoTlVMTCkpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBoeXBfdHJpZ2dl cl9idWlsdGluX2NmaV9mYXVsdCh2b2lkKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaHlw X2J1aWx0aW5fY2ZpX2ZhdWx0X3RhcmdldChpbnQgX19hbHdheXNfdW51c2VkIHVudXNlZCkKK3sK K30KKworI2VuZGlmIC8qIENPTkZJR19IWVBfU1VQUE9SVFNfQ0ZJX1RFU1QgKi8KKworI2VuZGlm IC8qIF9fQVJNNjRfS1ZNX0hZUF9DRklfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2 bS9oeXAvdmhlL01ha2VmaWxlIGIvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9NYWtlZmlsZQppbmRl eCAzYjllNTQ2NGI1YjMuLjE5Y2E1ODRjYzIxZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0v aHlwL3ZoZS9NYWtlZmlsZQorKysgYi9hcmNoL2FybTY0L2t2bS9oeXAvdmhlL01ha2VmaWxlCkBA IC05LDMgKzksNCBAQCBjY2ZsYWdzLXkgOj0gLURfX0tWTV9WSEVfSFlQRVJWSVNPUl9fCiBvYmot eSA6PSB0aW1lci1zci5vIHN5c3JlZy1zci5vIGRlYnVnLXNyLm8gc3dpdGNoLm8gdGxiLm8KIG9i ai15ICs9IC4uL3ZnaWMtdjMtc3IubyAuLi9hYXJjaDMyLm8gLi4vdmdpYy12Mi1jcHVpZi1wcm94 eS5vIC4uL2VudHJ5Lm8gXAogCSAuLi9mcHNpbWQubyAuLi9oeXAtZW50cnkubyAuLi9leGNlcHRp b24ubworb2JqLSQoQ09ORklHX0hZUF9TVVBQT1JUU19DRklfVEVTVCkgKz0gY2ZpLm8KZGlmZiAt LWdpdCBhL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvY2ZpLmMgYi9hcmNoL2FybTY0L2t2bS9oeXAv dmhlL2NmaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNTg0OWYy MzllMjdmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9jZmkuYwpA QCAtMCwwICsxLDM3IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5 CisvKgorICogQ29weXJpZ2h0IChDKSAyMDI0IC0gR29vZ2xlIEluYworICogQXV0aG9yOiBQaWVy cmUtQ2zDqW1lbnQgVG9zaSA8cHRvc2lAZ29vZ2xlLmNvbT4KKyAqLworI2luY2x1ZGUgPGFzbS9y d29uY2UuaD4KKworI2luY2x1ZGUgPGh5cC9jZmkuaD4KKwordm9pZCAoKmh5cF90ZXN0X2hvc3Rf Y3R4dF9jZmkpKHZvaWQpOwordm9pZCAoKmh5cF90ZXN0X2d1ZXN0X2N0eHRfY2ZpKSh2b2lkKTsK KworaW50IF9fa3ZtX3JlZ2lzdGVyX2NmaV90ZXN0X2NiKHZvaWQgKCpjYikodm9pZCksIGJvb2wg aW5faG9zdF9jdHh0KQoreworCWlmIChpbl9ob3N0X2N0eHQpCisJCWh5cF90ZXN0X2hvc3RfY3R4 dF9jZmkgPSBjYjsKKwllbHNlCisJCWh5cF90ZXN0X2d1ZXN0X2N0eHRfY2ZpID0gY2I7CisKKwly ZXR1cm4gMDsKK30KKwordm9pZCBoeXBfYnVpbHRpbl9jZmlfZmF1bHRfdGFyZ2V0KGludCBfX2Fs d2F5c191bnVzZWQgdW51c2VkKQoreworfQorCit2b2lkIGh5cF90cmlnZ2VyX2J1aWx0aW5fY2Zp X2ZhdWx0KHZvaWQpCit7CisJLyogSW50ZW50aW9uYWwgVUIgY2FzdCAmIGRlcmVmZXJlbmNlLCB0 byB0cmlnZ2VyIGEga0NGSSBmYXVsdC4gKi8KKwl2b2lkICgqdGFyZ2V0KSh2b2lkKSA9ICh2b2lk ICopJmh5cF9idWlsdGluX2NmaV9mYXVsdF90YXJnZXQ7CisKKwkvKgorCSAqIFJFQURfT05DRSgp IHByZXZlbnRzIHRoaXMgaW5kaXJlY3QgY2FsbCBmcm9tIGJlaW5nIG9wdGltaXplZCBvdXQsCisJ ICogZm9yY2luZyB0aGUgY29tcGlsZXIgdG8gZ2VuZXJhdGUgdGhlIGtDRkkgY2hlY2sgYmVmb3Jl IHRoZSBicmFuY2guCisJICovCisJUkVBRF9PTkNFKHRhcmdldCkoKTsKK30KZGlmZiAtLWdpdCBh L2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmMgYi9hcmNoL2FybTY0L2t2bS9oeXAvdmhl L3N3aXRjaC5jCmluZGV4IDZjNjQ3ODNjM2UwMC4uZmU3MDIyMDg3NmI0IDEwMDY0NAotLS0gYS9h cmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5jCisrKyBiL2FyY2gvYXJtNjQva3ZtL2h5cC92 aGUvc3dpdGNoLmMKQEAgLTQsNiArNCw3IEBACiAgKiBBdXRob3I6IE1hcmMgWnluZ2llciA8bWFy Yy56eW5naWVyQGFybS5jb20+CiAgKi8KIAorI2luY2x1ZGUgPGh5cC9jZmkuaD4KICNpbmNsdWRl IDxoeXAvc3dpdGNoLmg+CiAKICNpbmNsdWRlIDxsaW51eC9hcm0tc21jY2MuaD4KQEAgLTMxMSw2 ICszMTIsOSBAQCBzdGF0aWMgaW50IF9fa3ZtX3ZjcHVfcnVuX3ZoZShzdHJ1Y3Qga3ZtX3ZjcHUg KnZjcHUpCiAJc3RydWN0IGt2bV9jcHVfY29udGV4dCAqZ3Vlc3RfY3R4dDsKIAl1NjQgZXhpdF9j b2RlOwogCisJaWYgKElTX0VOQUJMRUQoQ09ORklHX0hZUF9TVVBQT1JUU19DRklfVEVTVCkgJiYg dW5saWtlbHkoaHlwX3Rlc3RfaG9zdF9jdHh0X2NmaSkpCisJCWh5cF90ZXN0X2hvc3RfY3R4dF9j ZmkoKTsKKwogCWhvc3RfY3R4dCA9IGhvc3RfZGF0YV9wdHIoaG9zdF9jdHh0KTsKIAlndWVzdF9j dHh0ID0gJnZjcHUtPmFyY2guY3R4dDsKIApAQCAtMzI5LDYgKzMzMyw5IEBAIHN0YXRpYyBpbnQg X19rdm1fdmNwdV9ydW5fdmhlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlzeXNyZWdfcmVzdG9y ZV9ndWVzdF9zdGF0ZV92aGUoZ3Vlc3RfY3R4dCk7CiAJX19kZWJ1Z19zd2l0Y2hfdG9fZ3Vlc3Qo dmNwdSk7CiAKKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfSFlQX1NVUFBPUlRTX0NGSV9URVNUKSAm JiB1bmxpa2VseShoeXBfdGVzdF9ndWVzdF9jdHh0X2NmaSkpCisJCWh5cF90ZXN0X2d1ZXN0X2N0 eHRfY2ZpKCk7CisKIAlkbyB7CiAJCS8qIEp1bXAgaW4gdGhlIGZpcmUhICovCiAJCWV4aXRfY29k ZSA9IF9fZ3Vlc3RfZW50ZXIodmNwdSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9oeXBf Y2ZpX3Rlc3QuYyBiL2FyY2gvYXJtNjQva3ZtL2h5cF9jZmlfdGVzdC5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZGE3YjI1Y2ExYjFmCi0tLSAvZGV2L251bGwKKysr IGIvYXJjaC9hcm02NC9rdm0vaHlwX2NmaV90ZXN0LmMKQEAgLTAsMCArMSw0MyBAQAorLy8gU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQorLyoKKyAqIENvcHlyaWdodCAoQykg MjAyNCAtIEdvb2dsZSBJbmMKKyAqIEF1dGhvcjogUGllcnJlLUNsw6ltZW50IFRvc2kgPHB0b3Np QGdvb2dsZS5jb20+CisgKi8KKyNpbmNsdWRlIDxhc20va3ZtX2FzbS5oPgorI2luY2x1ZGUgPGFz bS9rdm1fY2ZpLmg+CisjaW5jbHVkZSA8YXNtL2t2bV9ob3N0Lmg+CisjaW5jbHVkZSA8YXNtL3Zp cnQuaD4KKworI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0ZGRl Zi5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qIEZvciBjYWxsaW5nIGRpcmVjdGx5 IGludG8gdGhlIFZIRSBoeXBlcnZpc29yOyBzZWUgPGh5cC9jZmkuaD4uICovCitpbnQgX19rdm1f cmVnaXN0ZXJfY2ZpX3Rlc3RfY2Iodm9pZCAoKikodm9pZCksIGJvb2wpOworCitzdGF0aWMgaW50 IGt2bV9yZWdpc3Rlcl9jZmlfdGVzdF9jYih2b2lkICgqdmhlX2NiKSh2b2lkKSwgYm9vbCBpbl9o b3N0X2N0eHQpCit7CisJaWYgKCFpc19oeXBfbW9kZV9hdmFpbGFibGUoKSkKKwkJcmV0dXJuIC1F TlhJTzsKKworCWlmIChpc19oeXBfbnZoZSgpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwly ZXR1cm4gX19rdm1fcmVnaXN0ZXJfY2ZpX3Rlc3RfY2IodmhlX2NiLCBpbl9ob3N0X2N0eHQpOwor fQorCitpbnQga3ZtX2NmaV90ZXN0X3JlZ2lzdGVyX2hvc3RfY3R4dF9jYih2b2lkICgqY2IpKHZv aWQpKQoreworCXJldHVybiBrdm1fcmVnaXN0ZXJfY2ZpX3Rlc3RfY2IoY2IsIHRydWUpOworfQor RVhQT1JUX1NZTUJPTChrdm1fY2ZpX3Rlc3RfcmVnaXN0ZXJfaG9zdF9jdHh0X2NiKTsKKworaW50 IGt2bV9jZmlfdGVzdF9yZWdpc3Rlcl9ndWVzdF9jdHh0X2NiKHZvaWQgKCpjYikodm9pZCkpCit7 CisJcmV0dXJuIGt2bV9yZWdpc3Rlcl9jZmlfdGVzdF9jYihjYiwgZmFsc2UpOworfQorRVhQT1JU X1NZTUJPTChrdm1fY2ZpX3Rlc3RfcmVnaXN0ZXJfZ3Vlc3RfY3R4dF9jYik7CisKKy8qIEh5cGVy dmlzb3IgY2FsbGJhY2tzIGZvciB0aGUgdGVzdCBtb2R1bGUgdG8gcmVnaXN0ZXIuICovCitFWFBP UlRfU1lNQk9MKGh5cF90cmlnZ2VyX2J1aWx0aW5fY2ZpX2ZhdWx0KTsKK0VYUE9SVF9TWU1CT0wo aHlwX2J1aWx0aW5fY2ZpX2ZhdWx0X3RhcmdldCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2 bS9oeXBfY2ZpX3Rlc3RfbW9kdWxlLmMgYi9hcmNoL2FybTY0L2t2bS9oeXBfY2ZpX3Rlc3RfbW9k dWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5lZWRhNGJlNGQz ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybTY0L2t2bS9oeXBfY2ZpX3Rlc3RfbW9kdWxl LmMKQEAgLTAsMCArMSwxMzMgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w LW9ubHkKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjQgLSBHb29nbGUgSW5jCisgKiBBdXRob3I6 IFBpZXJyZS1DbMOpbWVudCBUb3NpIDxwdG9zaUBnb29nbGUuY29tPgorICovCisjZGVmaW5lIHBy X2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKKyNpbmNsdWRlIDxhc20va3ZtX2Fz bS5oPgorI2luY2x1ZGUgPGFzbS9rdm1fY2ZpLmg+CisjaW5jbHVkZSA8YXNtL3J3b25jZS5oPgor CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tzdHJ0b3guaD4KKyNp bmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmludGsuaD4KKworc3Rh dGljIGludCBzZXRfaG9zdF9tb2RlKGNvbnN0IGNoYXIgKnZhbCwgY29uc3Qgc3RydWN0IGtlcm5l bF9wYXJhbSAqa3ApOworc3RhdGljIGludCBzZXRfZ3Vlc3RfbW9kZShjb25zdCBjaGFyICp2YWws IGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKTsKKworI2RlZmluZSBNX0RFU0MgXAorCSJc blx0MDogbm9uZSIgXAorCSJcblx0MTogYnVpbHQtaW4gY2FsbGVyICYgYnVpbHQtaW4gY2FsbGVl IiBcCisJIlxuXHQyOiBidWlsdC1pbiBjYWxsZXIgJiBtb2R1bGUgY2FsbGVlIiBcCisJIlxuXHQz OiBtb2R1bGUgY2FsbGVyICYgYnVpbHQtaW4gY2FsbGVlIiBcCisJIlxuXHQ0OiBtb2R1bGUgY2Fs bGVyICYgbW9kdWxlIGNhbGxlZSIKKworc3RhdGljIHVuc2lnbmVkIGludCBob3N0X21vZGU7Citt b2R1bGVfcGFyYW1fY2FsbChob3N0LCBzZXRfaG9zdF9tb2RlLCBwYXJhbV9nZXRfdWludCwgJmhv c3RfbW9kZSwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGhvc3QsCisJCSAiSHlwZXJ2aXNvciBr Q0ZJIGZhdWx0IHRlc3QgY2FzZSBpbiBob3N0IGNvbnRleHQ6IiBNX0RFU0MpOworCitzdGF0aWMg dW5zaWduZWQgaW50IGd1ZXN0X21vZGU7Cittb2R1bGVfcGFyYW1fY2FsbChndWVzdCwgc2V0X2d1 ZXN0X21vZGUsIHBhcmFtX2dldF91aW50LCAmZ3Vlc3RfbW9kZSwgMDY0NCk7CitNT0RVTEVfUEFS TV9ERVNDKGd1ZXN0LAorCQkgIkh5cGVydmlzb3Iga0NGSSBmYXVsdCB0ZXN0IGNhc2UgaW4gZ3Vl c3QgY29udGV4dDoiIE1fREVTQyk7CisKK3N0YXRpYyB2b2lkIHRyaWdnZXJfbW9kdWxlMm1vZHVs ZV9jZmlfZmF1bHQodm9pZCk7CitzdGF0aWMgdm9pZCB0cmlnZ2VyX21vZHVsZTJidWlsdGluX2Nm aV9mYXVsdCh2b2lkKTsKK3N0YXRpYyB2b2lkIGh5cF9jZmlfbW9kdWxlMm1vZHVsZV90ZXN0X3Rh cmdldChpbnQpOworc3RhdGljIHZvaWQgaHlwX2NmaV9idWlsdGluMm1vZHVsZV90ZXN0X3Rhcmdl dChpbnQpOworCitzdGF0aWMgaW50IHNldF9wYXJhbV9tb2RlKGNvbnN0IGNoYXIgKnZhbCwgY29u c3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3AsCisJCQkgaW50ICgqcmVnaXN0ZXJfY2IpKHZvaWQg KCopKHZvaWQpKSkKK3sKKwl1bnNpZ25lZCBpbnQgKm1vZGUgPSBrcC0+YXJnOworCWludCBlcnI7 CisKKwllcnIgPSBwYXJhbV9zZXRfdWludCh2YWwsIGtwKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4g ZXJyOworCisJc3dpdGNoICgqbW9kZSkgeworCWNhc2UgMDoKKwkJcmV0dXJuIHJlZ2lzdGVyX2Ni KE5VTEwpOworCWNhc2UgMToKKwkJcmV0dXJuIHJlZ2lzdGVyX2NiKGh5cF90cmlnZ2VyX2J1aWx0 aW5fY2ZpX2ZhdWx0KTsKKwljYXNlIDI6CisJCXJldHVybiByZWdpc3Rlcl9jYigodm9pZCAqKWh5 cF9jZmlfYnVpbHRpbjJtb2R1bGVfdGVzdF90YXJnZXQpOworCWNhc2UgMzoKKwkJcmV0dXJuIHJl Z2lzdGVyX2NiKHRyaWdnZXJfbW9kdWxlMmJ1aWx0aW5fY2ZpX2ZhdWx0KTsKKwljYXNlIDQ6CisJ CXJldHVybiByZWdpc3Rlcl9jYih0cmlnZ2VyX21vZHVsZTJtb2R1bGVfY2ZpX2ZhdWx0KTsKKwlk ZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc2V0X2hvc3Rf bW9kZShjb25zdCBjaGFyICp2YWwsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQorewor CXJldHVybiBzZXRfcGFyYW1fbW9kZSh2YWwsIGtwLCBrdm1fY2ZpX3Rlc3RfcmVnaXN0ZXJfaG9z dF9jdHh0X2NiKTsKK30KKworc3RhdGljIGludCBzZXRfZ3Vlc3RfbW9kZShjb25zdCBjaGFyICp2 YWwsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQoreworCXJldHVybiBzZXRfcGFyYW1f bW9kZSh2YWwsIGtwLCBrdm1fY2ZpX3Rlc3RfcmVnaXN0ZXJfZ3Vlc3RfY3R4dF9jYik7Cit9CisK K3N0YXRpYyB2b2lkIF9fZXhpdCBleGl0X2h5cF9jZmlfdGVzdCh2b2lkKQoreworCWludCBlcnI7 CisKKwllcnIgPSBrdm1fY2ZpX3Rlc3RfcmVnaXN0ZXJfaG9zdF9jdHh0X2NiKE5VTEwpOworCWlm IChlcnIpCisJCXByX2VycigiRmFpbGVkIHRvIHVucmVnaXN0ZXIgaG9zdCBjb250ZXh0IHRyaWdn ZXI6ICVkXG4iLCBlcnIpOworCisJZXJyID0ga3ZtX2NmaV90ZXN0X3JlZ2lzdGVyX2d1ZXN0X2N0 eHRfY2IoTlVMTCk7CisJaWYgKGVycikKKwkJcHJfZXJyKCJGYWlsZWQgdG8gdW5yZWdpc3RlciBn dWVzdCBjb250ZXh0IHRyaWdnZXI6ICVkXG4iLCBlcnIpOworfQorbW9kdWxlX2V4aXQoZXhpdF9o eXBfY2ZpX3Rlc3QpOworCitzdGF0aWMgdm9pZCB0cmlnZ2VyX21vZHVsZTJidWlsdGluX2NmaV9m YXVsdCh2b2lkKQoreworCS8qIEludGVudGlvbmFsIFVCIGNhc3QgJiBkZXJlZmVyZW5jZSwgdG8g dHJpZ2dlciBhIGtDRkkgZmF1bHQuICovCisJdm9pZCAoKnRhcmdldCkodm9pZCkgPSAodm9pZCAq KSZoeXBfYnVpbHRpbl9jZmlfZmF1bHRfdGFyZ2V0OworCisJLyoKKwkgKiBSRUFEX09OQ0UoKSBw cmV2ZW50cyB0aGlzIGluZGlyZWN0IGNhbGwgZnJvbSBiZWluZyBvcHRpbWl6ZWQgb3V0LAorCSAq IGZvcmNpbmcgdGhlIGNvbXBpbGVyIHRvIGdlbmVyYXRlIHRoZSBrQ0ZJIGNoZWNrIGJlZm9yZSB0 aGUgYnJhbmNoLgorCSAqLworCVJFQURfT05DRSh0YXJnZXQpKCk7CisKKwlwcl9lcnJfcmF0ZWxp bWl0ZWQoIiVzOiBTdXJ2aXZlZCBhIGtDRkkgdmlvbGF0aW9uXG4iLCBfX2Z1bmNfXyk7Cit9CisK K3N0YXRpYyB2b2lkIHRyaWdnZXJfbW9kdWxlMm1vZHVsZV9jZmlfZmF1bHQodm9pZCkKK3sKKwkv KiBJbnRlbnRpb25hbCBVQiBjYXN0ICYgZGVyZWZlcmVuY2UsIHRvIHRyaWdnZXIgYSBrQ0ZJIGZh dWx0LiAqLworCXZvaWQgKCp0YXJnZXQpKHZvaWQpID0gKHZvaWQgKikmaHlwX2NmaV9tb2R1bGUy bW9kdWxlX3Rlc3RfdGFyZ2V0OworCisJLyoKKwkgKiBSRUFEX09OQ0UoKSBwcmV2ZW50cyB0aGlz IGluZGlyZWN0IGNhbGwgZnJvbSBiZWluZyBvcHRpbWl6ZWQgb3V0LAorCSAqIGZvcmNpbmcgdGhl IGNvbXBpbGVyIHRvIGdlbmVyYXRlIHRoZSBrQ0ZJIGNoZWNrIGJlZm9yZSB0aGUgYnJhbmNoLgor CSAqLworCVJFQURfT05DRSh0YXJnZXQpKCk7CisKKwlwcl9lcnJfcmF0ZWxpbWl0ZWQoIiVzOiBT dXJ2aXZlZCBhIGtDRkkgdmlvbGF0aW9uXG4iLCBfX2Z1bmNfXyk7Cit9CisKKy8qIFVzZSBkaWZm ZXJlbnQgZnVuY3Rpb25zLCBmb3IgY2xlYXJlciBzeW1ib2xzIGluIGtDRkkgcGFuaWMgcmVwb3J0 cy4gKi8KK3N0YXRpYyBub2lubGluZQordm9pZCBoeXBfY2ZpX21vZHVsZTJtb2R1bGVfdGVzdF90 YXJnZXQoaW50IF9fYWx3YXlzX3VudXNlZCB1bnVzZWQpCit7Cit9CisKK3N0YXRpYyBub2lubGlu ZQordm9pZCBoeXBfY2ZpX2J1aWx0aW4ybW9kdWxlX3Rlc3RfdGFyZ2V0KGludCBfX2Fsd2F5c191 bnVzZWQgdW51c2VkKQoreworfQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVU SE9SKCJQaWVycmUtQ2zDqW1lbnQgVG9zaSA8cHRvc2lAZ29vZ2xlLmNvbT4iKTsKK01PRFVMRV9E RVNDUklQVElPTigiS1ZNIGh5cGVydmlzb3Iga0NGSSB0ZXN0IG1vZHVsZSIpOwotLSAKMi40NS4x LjI4OC5nMGUwY2QyOTlmMS1nb29nCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtl cm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxt YW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=