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 4D261C25B5F for ; Fri, 10 May 2024 11:28:57 +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=09zZGZCUyl8fRA5ddgoj6b/zr+gCJrwJotIo569+B4I=; b=i7mKdm9k/SJgQpkarXGf1PDPMf VaL55wQEJF+FIE/SPHLbXcIHML5siedPugTXMbNkc5l49pLyrqIo2QS/KeoITqFAzL+yCDvR5xC4W d9f/GMD3D48eosCuX8KtE/KzQFGU0uh/STllxUvoWErkEM+AB/HRBC7nrCEpZwn71Zo3+gz9IuKNb k6Fqhaku7p10BdYPi5vfp15pD1+OBDo0KbKKQsA9Yd2iEoWF0VisO/kT4KmzhNM8AbNdc5NAbBQe0 C4lqHN2EDk6EE4ALODlFpmNQZLA6tWAgirUm4aNH7K5mHOXbNeSfN4SkuWkIsjE36vPpM113Qi6hY RAXzrKgQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1s5OQS-000000053h5-31bI; Fri, 10 May 2024 11:28:36 +0000 Received: from mail-yb1-xb4a.google.com ([2607:f8b0:4864:20::b4a]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1s5OPg-0000000538F-1AFP for linux-arm-kernel@lists.infradead.org; Fri, 10 May 2024 11:27:47 +0000 Received: by mail-yb1-xb4a.google.com with SMTP id 3f1490d57ef6-de60321ce6cso3404782276.1 for ; Fri, 10 May 2024 04:27:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1715340459; x=1715945259; 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=qeYMQHI62TLtzWSMqgKJxIUsn2T5TYiEl6TIFioPKSw=; b=Iu1EecPuUA8vm4K9b/+9d2Kg26suM6ARqRPBm25HY0lorcPxCvWU2DD/Wam3MThvPw mOast3dO6MDsVAGDe5NNepdApRJA+/sbEuneePyko4SVD6xRBVMb7+DCMwe/n1gbX8fC gZ0qfIm0GuKBZvUm344T+ZnYV7D0cAe68GHdCn9zpoo/07W6WHlUG7kObojsOYryQkea lwCEGGANDwKdC5d+Yx8LP16YAnrjUp8cuWgAn+WWP4H54HZob6KpC2BYt+w9sxwt3JdG nGttZbRFTJT8mZ9eN9697WW+4Og1McCN6iqA69j+IvlJrTN0yF3UbLgvh5V5WSLnfl2Z nSoA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1715340459; x=1715945259; 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=qeYMQHI62TLtzWSMqgKJxIUsn2T5TYiEl6TIFioPKSw=; b=szKytB8Sp6vLJABlLW+VkGRFpuGplWgdCLiWYHFYLGM9GqNza+jwBzxXtgncKHjDH+ EJ6JKnQCCyxTLOICAFjnYX0kGzngp6W61x1G09KMamJl6JhMFth8xIJ78JLNgOLtFx/+ 19l46Hz/UmEzGPqnMjhJAPreMQE/8l7NKqWTV2nYCUCWdA3wm0GY+z7yB8j8dE1DWlli J73JVWVBnpshhiDB9ANJ7YzSeQ5ZYYYWL23cjR/YEDD2M6dU88ljbDZGPpiARbcX7L9R 92Weasl6yXBMJxNLq+I0MGRY3jogTPpm0mk9BC8WVXiQm6mj65eJSTrq2PNC1lQFSZKi Qwkg== X-Forwarded-Encrypted: i=1; AJvYcCU1W9ORm5/Luv1fggHOm3mtuPRv0dB3JBfDBF4mtt/+2dI6mlLaFKJznRxIOakIrJ1PWWNwdyJi2HhzBxynF4dRkSSlEOpNl7Kz3Lw601nfrzZbHmY= X-Gm-Message-State: AOJu0YyyZoKB6MooHWg+6yphHv/VXndlBVrA5SYVjFwnAn4YUsrV9V8W 1dc/qBUq98VYid0XjCAToxeZI5N2xjpj3c2rFB1hH0gERIUujSzyhRYHsnpiRMN8BrBSSTz8FQ= = X-Google-Smtp-Source: AGHT+IG2Nk6GDvDApxzf2fQrO3hpSPR8XKLyC1KYy5HQT81VyW90ugxbfQimtrj4DVkv2r3ubwFrbsoU3Q== X-Received: from ptosi.c.googlers.com ([fda3:e722:ac3:cc00:31:98fb:c0a8:11ec]) (user=ptosi job=sendgmr) by 2002:a05:6902:1082:b0:dcb:b9d7:2760 with SMTP id 3f1490d57ef6-dee4f38cb25mr612041276.13.1715340459676; Fri, 10 May 2024 04:27:39 -0700 (PDT) Date: Fri, 10 May 2024 12:26:38 +0100 In-Reply-To: <20240510112645.3625702-1-ptosi@google.com> Mime-Version: 1.0 References: <20240510112645.3625702-1-ptosi@google.com> X-Mailer: git-send-email 2.45.0.118.g7fe29c98d7-goog Message-ID: <20240510112645.3625702-10-ptosi@google.com> Subject: [PATCH v3 09/12] 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-20240510_042744_393009_846CE86C X-CRM114-Status: GOOD ( 32.26 ) 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 L01ha2VmaWxlCmluZGV4IGMwYzA1MGU1MzE1Ny4uZDQyNTQwYWUzZWE3IDEwMDY0NAotLS0gYS9h cmNoL2FybTY0L2t2bS9NYWtlZmlsZQorKysgYi9hcmNoL2FybTY0L2t2bS9NYWtlZmlsZQpAQCAt MjIsNiArMjIsNyBAQCBrdm0teSArPSBhcm0ubyBtbXUubyBtbWlvLm8gcHNjaS5vIGh5cGVyY2Fs bHMubyBwdnRpbWUubyBcCiAJIHZnaWMvdmdpYy1tbWlvLXYzLm8gdmdpYy92Z2ljLWt2bS1kZXZp Y2UubyBcCiAJIHZnaWMvdmdpYy1pdHMubyB2Z2ljL3ZnaWMtZGVidWcubwogCitrdm0tJChDT05G SUdfSFlQX1NVUFBPUlRTX0NGSV9URVNUKSArPSBoeXBfY2ZpX3Rlc3Qubwoga3ZtLSQoQ09ORklH X0hXX1BFUkZfRVZFTlRTKSAgKz0gcG11LWVtdWwubyBwbXUubwogCiBhbHdheXMteSA6PSBoeXBf Y29uc3RhbnRzLmggaHlwLWNvbnN0YW50cy5zCkBAIC0zOSwzICs0MCw1IEBAICQob2JqKS9oeXBf Y29uc3RhbnRzLmg6ICQob2JqKS9oeXAtY29uc3RhbnRzLnMgRk9SQ0UKIAogb2JqLWt2bSA6PSAk KGFkZHByZWZpeCAkKG9iaikvLCAkKGt2bS15KSkKICQob2JqLWt2bSk6ICQob2JqKS9oeXBfY29u c3RhbnRzLmgKKworb2JqLSQoQ09ORklHX0hZUF9DRklfVEVTVF9NT0RVTEUpICs9IGh5cF9jZmlf dGVzdF9tb2R1bGUubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlw L2NmaS5oIGIvYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL2NmaS5oCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYzY1MzYwNDBiYzA2Ci0tLSAvZGV2L251bGwK KysrIGIvYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL2NmaS5oCkBAIC0wLDAgKzEsNDcg QEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KKy8qCisgKiBD b3B5cmlnaHQgKEMpIDIwMjQgLSBHb29nbGUgSW5jCisgKiBBdXRob3I6IFBpZXJyZS1DbMOpbWVu dCBUb3NpIDxwdG9zaUBnb29nbGUuY29tPgorICovCisKKyNpZm5kZWYgX19BUk02NF9LVk1fSFlQ X0NGSV9IX18KKyNkZWZpbmUgX19BUk02NF9LVk1fSFlQX0NGSV9IX18KKworI2luY2x1ZGUgPGFz bS9idWcuaD4KKyNpbmNsdWRlIDxhc20vZXJybm8uaD4KKworI2luY2x1ZGUgPGxpbnV4L2NvbXBp bGVyLmg+CisKKyNpZmRlZiBDT05GSUdfSFlQX1NVUFBPUlRTX0NGSV9URVNUCisKK2ludCBfX2t2 bV9yZWdpc3Rlcl9jZmlfdGVzdF9jYih2b2lkICgqY2IpKHZvaWQpLCBib29sIGluX2hvc3RfY3R4 dCk7CisKK2V4dGVybiB2b2lkICgqaHlwX3Rlc3RfaG9zdF9jdHh0X2NmaSkodm9pZCk7CitleHRl cm4gdm9pZCAoKmh5cF90ZXN0X2d1ZXN0X2N0eHRfY2ZpKSh2b2lkKTsKKworLyogSHlwZXJ2aXNv ciBjYWxsYmFja3MgZm9yIHRoZSBob3N0IHRvIHJlZ2lzdGVyLiAqLwordm9pZCBoeXBfdHJpZ2dl cl9idWlsdGluX2NmaV9mYXVsdCh2b2lkKTsKK3ZvaWQgaHlwX2J1aWx0aW5fY2ZpX2ZhdWx0X3Rh cmdldChpbnQgdW51c2VkKTsKKworI2Vsc2UKKworc3RhdGljIGlubGluZQoraW50IF9fa3ZtX3Jl Z2lzdGVyX2NmaV90ZXN0X2NiKHZvaWQgKCpjYikodm9pZCksIGJvb2wgaW5faG9zdF9jdHh0KQor eworCXJldHVybiAtRU9QTk9UU1VQUDsKK30KKworI2RlZmluZSBoeXBfdGVzdF9ob3N0X2N0eHRf Y2ZpICgodm9pZCgqKSh2b2lkKSkoTlVMTCkpCisjZGVmaW5lIGh5cF90ZXN0X2d1ZXN0X2N0eHRf Y2ZpICgodm9pZCgqKSh2b2lkKSkoTlVMTCkpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBoeXBfdHJp Z2dlcl9idWlsdGluX2NmaV9mYXVsdCh2b2lkKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQg aHlwX2J1aWx0aW5fY2ZpX2ZhdWx0X3RhcmdldChpbnQgX19hbHdheXNfdW51c2VkIHVudXNlZCkK K3sKK30KKworI2VuZGlmIC8qIENPTkZJR19IWVBfU1VQUE9SVFNfQ0ZJX1RFU1QgKi8KKworI2Vu ZGlmIC8qIF9fQVJNNjRfS1ZNX0hZUF9DRklfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0 L2t2bS9oeXAvdmhlL01ha2VmaWxlIGIvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9NYWtlZmlsZQpp bmRleCAzYjllNTQ2NGI1YjMuLjE5Y2E1ODRjYzIxZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9r dm0vaHlwL3ZoZS9NYWtlZmlsZQorKysgYi9hcmNoL2FybTY0L2t2bS9oeXAvdmhlL01ha2VmaWxl CkBAIC05LDMgKzksNCBAQCBjY2ZsYWdzLXkgOj0gLURfX0tWTV9WSEVfSFlQRVJWSVNPUl9fCiBv YmoteSA6PSB0aW1lci1zci5vIHN5c3JlZy1zci5vIGRlYnVnLXNyLm8gc3dpdGNoLm8gdGxiLm8K IG9iai15ICs9IC4uL3ZnaWMtdjMtc3IubyAuLi9hYXJjaDMyLm8gLi4vdmdpYy12Mi1jcHVpZi1w cm94eS5vIC4uL2VudHJ5Lm8gXAogCSAuLi9mcHNpbWQubyAuLi9oeXAtZW50cnkubyAuLi9leGNl cHRpb24ubworb2JqLSQoQ09ORklHX0hZUF9TVVBQT1JUU19DRklfVEVTVCkgKz0gY2ZpLm8KZGlm ZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvY2ZpLmMgYi9hcmNoL2FybTY0L2t2bS9o eXAvdmhlL2NmaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNTg0 OWYyMzllMjdmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9jZmku YwpAQCAtMCwwICsxLDM3IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1v bmx5CisvKgorICogQ29weXJpZ2h0IChDKSAyMDI0IC0gR29vZ2xlIEluYworICogQXV0aG9yOiBQ aWVycmUtQ2zDqW1lbnQgVG9zaSA8cHRvc2lAZ29vZ2xlLmNvbT4KKyAqLworI2luY2x1ZGUgPGFz bS9yd29uY2UuaD4KKworI2luY2x1ZGUgPGh5cC9jZmkuaD4KKwordm9pZCAoKmh5cF90ZXN0X2hv c3RfY3R4dF9jZmkpKHZvaWQpOwordm9pZCAoKmh5cF90ZXN0X2d1ZXN0X2N0eHRfY2ZpKSh2b2lk KTsKKworaW50IF9fa3ZtX3JlZ2lzdGVyX2NmaV90ZXN0X2NiKHZvaWQgKCpjYikodm9pZCksIGJv b2wgaW5faG9zdF9jdHh0KQoreworCWlmIChpbl9ob3N0X2N0eHQpCisJCWh5cF90ZXN0X2hvc3Rf Y3R4dF9jZmkgPSBjYjsKKwllbHNlCisJCWh5cF90ZXN0X2d1ZXN0X2N0eHRfY2ZpID0gY2I7CisK KwlyZXR1cm4gMDsKK30KKwordm9pZCBoeXBfYnVpbHRpbl9jZmlfZmF1bHRfdGFyZ2V0KGludCBf X2Fsd2F5c191bnVzZWQgdW51c2VkKQoreworfQorCit2b2lkIGh5cF90cmlnZ2VyX2J1aWx0aW5f Y2ZpX2ZhdWx0KHZvaWQpCit7CisJLyogSW50ZW50aW9uYWwgVUIgY2FzdCAmIGRlcmVmZXJlbmNl LCB0byB0cmlnZ2VyIGEga0NGSSBmYXVsdC4gKi8KKwl2b2lkICgqdGFyZ2V0KSh2b2lkKSA9ICh2 b2lkICopJmh5cF9idWlsdGluX2NmaV9mYXVsdF90YXJnZXQ7CisKKwkvKgorCSAqIFJFQURfT05D RSgpIHByZXZlbnRzIHRoaXMgaW5kaXJlY3QgY2FsbCBmcm9tIGJlaW5nIG9wdGltaXplZCBvdXQs CisJICogZm9yY2luZyB0aGUgY29tcGlsZXIgdG8gZ2VuZXJhdGUgdGhlIGtDRkkgY2hlY2sgYmVm b3JlIHRoZSBicmFuY2guCisJICovCisJUkVBRF9PTkNFKHRhcmdldCkoKTsKK30KZGlmZiAtLWdp dCBhL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmMgYi9hcmNoL2FybTY0L2t2bS9oeXAv dmhlL3N3aXRjaC5jCmluZGV4IDlkYjA0YTI4NjM5OC4uYjMyNjg5MzNiMDkzIDEwMDY0NAotLS0g YS9hcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5jCisrKyBiL2FyY2gvYXJtNjQva3ZtL2h5 cC92aGUvc3dpdGNoLmMKQEAgLTQsNiArNCw3IEBACiAgKiBBdXRob3I6IE1hcmMgWnluZ2llciA8 bWFyYy56eW5naWVyQGFybS5jb20+CiAgKi8KIAorI2luY2x1ZGUgPGh5cC9jZmkuaD4KICNpbmNs dWRlIDxoeXAvc3dpdGNoLmg+CiAKICNpbmNsdWRlIDxsaW51eC9hcm0tc21jY2MuaD4KQEAgLTIy MSw2ICsyMjIsOSBAQCBzdGF0aWMgaW50IF9fa3ZtX3ZjcHVfcnVuX3ZoZShzdHJ1Y3Qga3ZtX3Zj cHUgKnZjcHUpCiAJc3RydWN0IGt2bV9jcHVfY29udGV4dCAqZ3Vlc3RfY3R4dDsKIAl1NjQgZXhp dF9jb2RlOwogCisJaWYgKElTX0VOQUJMRUQoQ09ORklHX0hZUF9TVVBQT1JUU19DRklfVEVTVCkg JiYgdW5saWtlbHkoaHlwX3Rlc3RfaG9zdF9jdHh0X2NmaSkpCisJCWh5cF90ZXN0X2hvc3RfY3R4 dF9jZmkoKTsKKwogCWhvc3RfY3R4dCA9ICZ0aGlzX2NwdV9wdHIoJmt2bV9ob3N0X2RhdGEpLT5o b3N0X2N0eHQ7CiAJaG9zdF9jdHh0LT5fX2h5cF9ydW5uaW5nX3ZjcHUgPSB2Y3B1OwogCWd1ZXN0 X2N0eHQgPSAmdmNwdS0+YXJjaC5jdHh0OwpAQCAtMjQ1LDYgKzI0OSw5IEBAIHN0YXRpYyBpbnQg X19rdm1fdmNwdV9ydW5fdmhlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAllbHNlCiAJCXZjcHVf Y2xlYXJfZmxhZyh2Y3B1LCBWQ1BVX0hZUF9DT05URVhUKTsKIAorCWlmIChJU19FTkFCTEVEKENP TkZJR19IWVBfU1VQUE9SVFNfQ0ZJX1RFU1QpICYmIHVubGlrZWx5KGh5cF90ZXN0X2d1ZXN0X2N0 eHRfY2ZpKSkKKwkJaHlwX3Rlc3RfZ3Vlc3RfY3R4dF9jZmkoKTsKKwogCWRvIHsKIAkJLyogSnVt cCBpbiB0aGUgZmlyZSEgKi8KIAkJZXhpdF9jb2RlID0gX19ndWVzdF9lbnRlcih2Y3B1KTsKZGlm ZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2h5cF9jZmlfdGVzdC5jIGIvYXJjaC9hcm02NC9rdm0v aHlwX2NmaV90ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5k YTdiMjVjYTFiMWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybTY0L2t2bS9oeXBfY2ZpX3Rl c3QuYwpAQCAtMCwwICsxLDQzIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu MC1vbmx5CisvKgorICogQ29weXJpZ2h0IChDKSAyMDI0IC0gR29vZ2xlIEluYworICogQXV0aG9y OiBQaWVycmUtQ2zDqW1lbnQgVG9zaSA8cHRvc2lAZ29vZ2xlLmNvbT4KKyAqLworI2luY2x1ZGUg PGFzbS9rdm1fYXNtLmg+CisjaW5jbHVkZSA8YXNtL2t2bV9jZmkuaD4KKyNpbmNsdWRlIDxhc20v a3ZtX2hvc3QuaD4KKyNpbmNsdWRlIDxhc20vdmlydC5oPgorCisjaW5jbHVkZSA8bGludXgvZXhw b3J0Lmg+CisjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMu aD4KKworLyogRm9yIGNhbGxpbmcgZGlyZWN0bHkgaW50byB0aGUgVkhFIGh5cGVydmlzb3I7IHNl ZSA8aHlwL2NmaS5oPi4gKi8KK2ludCBfX2t2bV9yZWdpc3Rlcl9jZmlfdGVzdF9jYih2b2lkICgq KSh2b2lkKSwgYm9vbCk7CisKK3N0YXRpYyBpbnQga3ZtX3JlZ2lzdGVyX2NmaV90ZXN0X2NiKHZv aWQgKCp2aGVfY2IpKHZvaWQpLCBib29sIGluX2hvc3RfY3R4dCkKK3sKKwlpZiAoIWlzX2h5cF9t b2RlX2F2YWlsYWJsZSgpKQorCQlyZXR1cm4gLUVOWElPOworCisJaWYgKGlzX2h5cF9udmhlKCkp CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXJldHVybiBfX2t2bV9yZWdpc3Rlcl9jZmlfdGVz dF9jYih2aGVfY2IsIGluX2hvc3RfY3R4dCk7Cit9CisKK2ludCBrdm1fY2ZpX3Rlc3RfcmVnaXN0 ZXJfaG9zdF9jdHh0X2NiKHZvaWQgKCpjYikodm9pZCkpCit7CisJcmV0dXJuIGt2bV9yZWdpc3Rl cl9jZmlfdGVzdF9jYihjYiwgdHJ1ZSk7Cit9CitFWFBPUlRfU1lNQk9MKGt2bV9jZmlfdGVzdF9y ZWdpc3Rlcl9ob3N0X2N0eHRfY2IpOworCitpbnQga3ZtX2NmaV90ZXN0X3JlZ2lzdGVyX2d1ZXN0 X2N0eHRfY2Iodm9pZCAoKmNiKSh2b2lkKSkKK3sKKwlyZXR1cm4ga3ZtX3JlZ2lzdGVyX2NmaV90 ZXN0X2NiKGNiLCBmYWxzZSk7Cit9CitFWFBPUlRfU1lNQk9MKGt2bV9jZmlfdGVzdF9yZWdpc3Rl cl9ndWVzdF9jdHh0X2NiKTsKKworLyogSHlwZXJ2aXNvciBjYWxsYmFja3MgZm9yIHRoZSB0ZXN0 IG1vZHVsZSB0byByZWdpc3Rlci4gKi8KK0VYUE9SVF9TWU1CT0woaHlwX3RyaWdnZXJfYnVpbHRp bl9jZmlfZmF1bHQpOworRVhQT1JUX1NZTUJPTChoeXBfYnVpbHRpbl9jZmlfZmF1bHRfdGFyZ2V0 KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2h5cF9jZmlfdGVzdF9tb2R1bGUuYyBiL2Fy Y2gvYXJtNjQva3ZtL2h5cF9jZmlfdGVzdF9tb2R1bGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMDAuLmVlZGE0YmU0ZDNlZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gv YXJtNjQva3ZtL2h5cF9jZmlfdGVzdF9tb2R1bGUuYwpAQCAtMCwwICsxLDEzMyBAQAorLy8gU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQorLyoKKyAqIENvcHlyaWdodCAoQykg MjAyNCAtIEdvb2dsZSBJbmMKKyAqIEF1dGhvcjogUGllcnJlLUNsw6ltZW50IFRvc2kgPHB0b3Np QGdvb2dsZS5jb20+CisgKi8KKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjog IiBmbXQKKworI2luY2x1ZGUgPGFzbS9rdm1fYXNtLmg+CisjaW5jbHVkZSA8YXNtL2t2bV9jZmku aD4KKyNpbmNsdWRlIDxhc20vcndvbmNlLmg+CisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Cisj aW5jbHVkZSA8bGludXgva3N0cnRveC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2lu Y2x1ZGUgPGxpbnV4L3ByaW50ay5oPgorCitzdGF0aWMgaW50IHNldF9ob3N0X21vZGUoY29uc3Qg Y2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCk7CitzdGF0aWMgaW50IHNl dF9ndWVzdF9tb2RlKGNvbnN0IGNoYXIgKnZhbCwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAq a3ApOworCisjZGVmaW5lIE1fREVTQyBcCisJIlxuXHQwOiBub25lIiBcCisJIlxuXHQxOiBidWls dC1pbiBjYWxsZXIgJiBidWlsdC1pbiBjYWxsZWUiIFwKKwkiXG5cdDI6IGJ1aWx0LWluIGNhbGxl ciAmIG1vZHVsZSBjYWxsZWUiIFwKKwkiXG5cdDM6IG1vZHVsZSBjYWxsZXIgJiBidWlsdC1pbiBj YWxsZWUiIFwKKwkiXG5cdDQ6IG1vZHVsZSBjYWxsZXIgJiBtb2R1bGUgY2FsbGVlIgorCitzdGF0 aWMgdW5zaWduZWQgaW50IGhvc3RfbW9kZTsKK21vZHVsZV9wYXJhbV9jYWxsKGhvc3QsIHNldF9o b3N0X21vZGUsIHBhcmFtX2dldF91aW50LCAmaG9zdF9tb2RlLCAwNjQ0KTsKK01PRFVMRV9QQVJN X0RFU0MoaG9zdCwKKwkJICJIeXBlcnZpc29yIGtDRkkgZmF1bHQgdGVzdCBjYXNlIGluIGhvc3Qg Y29udGV4dDoiIE1fREVTQyk7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ3Vlc3RfbW9kZTsKK21v ZHVsZV9wYXJhbV9jYWxsKGd1ZXN0LCBzZXRfZ3Vlc3RfbW9kZSwgcGFyYW1fZ2V0X3VpbnQsICZn dWVzdF9tb2RlLCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZ3Vlc3QsCisJCSAiSHlwZXJ2aXNv ciBrQ0ZJIGZhdWx0IHRlc3QgY2FzZSBpbiBndWVzdCBjb250ZXh0OiIgTV9ERVNDKTsKKworc3Rh dGljIHZvaWQgdHJpZ2dlcl9tb2R1bGUybW9kdWxlX2NmaV9mYXVsdCh2b2lkKTsKK3N0YXRpYyB2 b2lkIHRyaWdnZXJfbW9kdWxlMmJ1aWx0aW5fY2ZpX2ZhdWx0KHZvaWQpOworc3RhdGljIHZvaWQg aHlwX2NmaV9tb2R1bGUybW9kdWxlX3Rlc3RfdGFyZ2V0KGludCk7CitzdGF0aWMgdm9pZCBoeXBf Y2ZpX2J1aWx0aW4ybW9kdWxlX3Rlc3RfdGFyZ2V0KGludCk7CisKK3N0YXRpYyBpbnQgc2V0X3Bh cmFtX21vZGUoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCwK KwkJCSBpbnQgKCpyZWdpc3Rlcl9jYikodm9pZCAoKikodm9pZCkpKQoreworCXVuc2lnbmVkIGlu dCAqbW9kZSA9IGtwLT5hcmc7CisJaW50IGVycjsKKworCWVyciA9IHBhcmFtX3NldF91aW50KHZh bCwga3ApOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlzd2l0Y2ggKCptb2RlKSB7CisJ Y2FzZSAwOgorCQlyZXR1cm4gcmVnaXN0ZXJfY2IoTlVMTCk7CisJY2FzZSAxOgorCQlyZXR1cm4g cmVnaXN0ZXJfY2IoaHlwX3RyaWdnZXJfYnVpbHRpbl9jZmlfZmF1bHQpOworCWNhc2UgMjoKKwkJ cmV0dXJuIHJlZ2lzdGVyX2NiKCh2b2lkICopaHlwX2NmaV9idWlsdGluMm1vZHVsZV90ZXN0X3Rh cmdldCk7CisJY2FzZSAzOgorCQlyZXR1cm4gcmVnaXN0ZXJfY2IodHJpZ2dlcl9tb2R1bGUyYnVp bHRpbl9jZmlfZmF1bHQpOworCWNhc2UgNDoKKwkJcmV0dXJuIHJlZ2lzdGVyX2NiKHRyaWdnZXJf bW9kdWxlMm1vZHVsZV9jZmlfZmF1bHQpOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOwor CX0KK30KKworc3RhdGljIGludCBzZXRfaG9zdF9tb2RlKGNvbnN0IGNoYXIgKnZhbCwgY29uc3Qg c3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCit7CisJcmV0dXJuIHNldF9wYXJhbV9tb2RlKHZhbCwg a3AsIGt2bV9jZmlfdGVzdF9yZWdpc3Rlcl9ob3N0X2N0eHRfY2IpOworfQorCitzdGF0aWMgaW50 IHNldF9ndWVzdF9tb2RlKGNvbnN0IGNoYXIgKnZhbCwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJh bSAqa3ApCit7CisJcmV0dXJuIHNldF9wYXJhbV9tb2RlKHZhbCwga3AsIGt2bV9jZmlfdGVzdF9y ZWdpc3Rlcl9ndWVzdF9jdHh0X2NiKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGV4aXRfaHlw X2NmaV90ZXN0KHZvaWQpCit7CisJaW50IGVycjsKKworCWVyciA9IGt2bV9jZmlfdGVzdF9yZWdp c3Rlcl9ob3N0X2N0eHRfY2IoTlVMTCk7CisJaWYgKGVycikKKwkJcHJfZXJyKCJGYWlsZWQgdG8g dW5yZWdpc3RlciBob3N0IGNvbnRleHQgdHJpZ2dlcjogJWRcbiIsIGVycik7CisKKwllcnIgPSBr dm1fY2ZpX3Rlc3RfcmVnaXN0ZXJfZ3Vlc3RfY3R4dF9jYihOVUxMKTsKKwlpZiAoZXJyKQorCQlw cl9lcnIoIkZhaWxlZCB0byB1bnJlZ2lzdGVyIGd1ZXN0IGNvbnRleHQgdHJpZ2dlcjogJWRcbiIs IGVycik7Cit9Cittb2R1bGVfZXhpdChleGl0X2h5cF9jZmlfdGVzdCk7CisKK3N0YXRpYyB2b2lk IHRyaWdnZXJfbW9kdWxlMmJ1aWx0aW5fY2ZpX2ZhdWx0KHZvaWQpCit7CisJLyogSW50ZW50aW9u YWwgVUIgY2FzdCAmIGRlcmVmZXJlbmNlLCB0byB0cmlnZ2VyIGEga0NGSSBmYXVsdC4gKi8KKwl2 b2lkICgqdGFyZ2V0KSh2b2lkKSA9ICh2b2lkICopJmh5cF9idWlsdGluX2NmaV9mYXVsdF90YXJn ZXQ7CisKKwkvKgorCSAqIFJFQURfT05DRSgpIHByZXZlbnRzIHRoaXMgaW5kaXJlY3QgY2FsbCBm cm9tIGJlaW5nIG9wdGltaXplZCBvdXQsCisJICogZm9yY2luZyB0aGUgY29tcGlsZXIgdG8gZ2Vu ZXJhdGUgdGhlIGtDRkkgY2hlY2sgYmVmb3JlIHRoZSBicmFuY2guCisJICovCisJUkVBRF9PTkNF KHRhcmdldCkoKTsKKworCXByX2Vycl9yYXRlbGltaXRlZCgiJXM6IFN1cnZpdmVkIGEga0NGSSB2 aW9sYXRpb25cbiIsIF9fZnVuY19fKTsKK30KKworc3RhdGljIHZvaWQgdHJpZ2dlcl9tb2R1bGUy bW9kdWxlX2NmaV9mYXVsdCh2b2lkKQoreworCS8qIEludGVudGlvbmFsIFVCIGNhc3QgJiBkZXJl ZmVyZW5jZSwgdG8gdHJpZ2dlciBhIGtDRkkgZmF1bHQuICovCisJdm9pZCAoKnRhcmdldCkodm9p ZCkgPSAodm9pZCAqKSZoeXBfY2ZpX21vZHVsZTJtb2R1bGVfdGVzdF90YXJnZXQ7CisKKwkvKgor CSAqIFJFQURfT05DRSgpIHByZXZlbnRzIHRoaXMgaW5kaXJlY3QgY2FsbCBmcm9tIGJlaW5nIG9w dGltaXplZCBvdXQsCisJICogZm9yY2luZyB0aGUgY29tcGlsZXIgdG8gZ2VuZXJhdGUgdGhlIGtD RkkgY2hlY2sgYmVmb3JlIHRoZSBicmFuY2guCisJICovCisJUkVBRF9PTkNFKHRhcmdldCkoKTsK KworCXByX2Vycl9yYXRlbGltaXRlZCgiJXM6IFN1cnZpdmVkIGEga0NGSSB2aW9sYXRpb25cbiIs IF9fZnVuY19fKTsKK30KKworLyogVXNlIGRpZmZlcmVudCBmdW5jdGlvbnMsIGZvciBjbGVhcmVy IHN5bWJvbHMgaW4ga0NGSSBwYW5pYyByZXBvcnRzLiAqLworc3RhdGljIG5vaW5saW5lCit2b2lk IGh5cF9jZmlfbW9kdWxlMm1vZHVsZV90ZXN0X3RhcmdldChpbnQgX19hbHdheXNfdW51c2VkIHVu dXNlZCkKK3sKK30KKworc3RhdGljIG5vaW5saW5lCit2b2lkIGh5cF9jZmlfYnVpbHRpbjJtb2R1 bGVfdGVzdF90YXJnZXQoaW50IF9fYWx3YXlzX3VudXNlZCB1bnVzZWQpCit7Cit9CisKK01PRFVM RV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIlBpZXJyZS1DbMOpbWVudCBUb3NpIDxw dG9zaUBnb29nbGUuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJLVk0gaHlwZXJ2aXNvciBr Q0ZJIHRlc3QgbW9kdWxlIik7Ci0tIAoyLjQ1LjAuMTE4Lmc3ZmUyOWM5OGQ3LWdvb2cKCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2Vy bmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0 cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVs Cg==