From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 23838360; Mon, 22 Jan 2024 00:22:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1705882978; cv=none; b=MSEfEj7eESJZ5DCcE6G4rMKSHwVia6PNwX7he075oSesnrX5Zf5aNIEZPsp++7RUYJ1thlBgR138h2Iv6Mbu/oq9rJEKHpVLiZ+AG8RPkDL6X3rgIbGUaJSvGH6Cc3fSsc8Q/8Yge/2+KnsyCdHKcEyWpcF79EaHFicDJLTSRlc= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1705882978; c=relaxed/simple; bh=/98FyMHfNpcE20uREuwvTI8aEaiGp4Wx3e7AXQcREB8=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version:Content-Type; b=ucWKTQL00fDxj8wVJ1AT6fjJA0ZntKeFByLOqr8kqi92ZdRKkr7vuvAdBB4yNPl6YAIzhZzjzTRxLBThnFXBEl/DVBe8gJVCyWPxfVKm/DiUqrPZqJE2QOIW+5y/XlYA9khuqWOYyQhvoiiAZEs+jt1elDl+m6jCKXxazG+ajAQ= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=cSiMXi3d; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="cSiMXi3d" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 03362C433F1; Mon, 22 Jan 2024 00:22:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1705882977; bh=/98FyMHfNpcE20uREuwvTI8aEaiGp4Wx3e7AXQcREB8=; h=From:To:Cc:Subject:Date:From; b=cSiMXi3dT5GpQICa7Om7LNG5CODXq/A5eLQLot62CARYuv48uTEsKFbCUsiN/aK2v s9uZxu7P3fbDu+6LfqSxjftwQ/QcWy37EZwTnoHtMjuasPfcu1t9F4/OALHYoVQQqZ dOy0OsVn3VSEk2ucP4CrE2u5gasKrgU04YMIK19Ww/xIJHxRd99H+NTqZHejdVXXB8 laEOtzT7btvQ0yYcJOMpqmZPLwbrnbQ2graMl+UTIi4gjQF8l1dtaM63DO9NUPVWXw hi/A8A1kiJovyJZkATF/D05ea2yE+fUWWRdtJBn4z3NmGyIvM69hmD5JdZTMBv+nts AJ+QYb+emR7jg== From: Eric Biggers To: linux-crypto@vger.kernel.org, linux-riscv@lists.infradead.org Cc: linux-kernel@vger.kernel.org, Albert Ou , Andy Chiu , Ard Biesheuvel , =?UTF-8?q?Christoph=20M=C3=BCllner?= , Heiko Stuebner , Jerry Shih , Palmer Dabbelt , Paul Walmsley , Phoebe Chen , hongrong.hsu@sifive.com Subject: [PATCH v3 00/10] RISC-V crypto with reworked asm files Date: Sun, 21 Jan 2024 16:19:11 -0800 Message-ID: <20240122002024.27477-1-ebiggers@kernel.org> X-Mailer: git-send-email 2.43.0 Precedence: bulk X-Mailing-List: linux-crypto@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This patchset, which applies to v6.8-rc1, adds cryptographic algorithm implementations accelerated using the RISC-V vector crypto extensions (https://github.com/riscv/riscv-crypto/releases/download/v1.0.0/riscv-crypto-spec-vector.pdf) and RISC-V vector extension (https://github.com/riscv/riscv-v-spec/releases/download/v1.0/riscv-v-spec-1.0.pdf). The following algorithms are included: AES in ECB, CBC, CTR, and XTS modes; ChaCha20; GHASH; SHA-2; SM3; and SM4. In general, the assembly code requires a 64-bit RISC-V CPU with VLEN >= 128, little endian byte order, and vector unaligned access support. The ECB, CTR, XTS, and ChaCha20 code is designed to naturally scale up to larger VLEN values. Building the assembly code requires tip-of-tree binutils (future 2.42) or tip-of-tree clang (future 18.x). All algorithms pass testing in QEMU, using CONFIG_CRYPTO_MANAGER_EXTRA_TESTS=y. Much of the assembly code is derived from OpenSSL code that was added by https://github.com/openssl/openssl/pull/21923. It's been cleaned up for integration with the kernel, e.g. reducing code duplication, eliminating use of .inst and perlasm, and fixing a few bugs. This patchset incorporates the work of multiple people, including Jerry Shih, Heiko Stuebner, Christoph Müllner, Phoebe Chen, Charalampos Mitrodimas, and myself. This patchset went through several versions from Heiko (last version https://lore.kernel.org/linux-crypto/20230711153743.1970625-1-heiko@sntech.de), then several versions from Jerry (last version: https://lore.kernel.org/linux-crypto/20231231152743.6304-1-jerry.shih@sifive.com), then finally several versions from me. Thanks to everyone who has contributed to this patchset or its prerequisites. Since v6.8-rc1, all prerequisite kernel patches are upstream. I think this is now ready, and I'd like for it to be applied for 6.9, either to the crypto or riscv tree (at maintainers' choice). Below is the changelog for my versions of the patchset. For the changelog of the older versions, see the above links. Changed in v3: - Fixed a bug in the AES-XTS implementation where it assumed the CPU always set vl to the maximum possible value. This was okay for QEMU, but the vector spec allows CPUs to have different behavior. - Increased the LMUL for AES-ECB to 8, as the registers are available. - Fixed some license text that I had mistakenly changed when doing a find-and-replace of code. - Addressed a checkpatch warning by not including filename in file. - Rename some labels. - Constify a variable. Changed in v2: - Merged the AES modules together to prevent a build error. - Only unregister AES algorithms that were registered. - Corrected walksize properties to match the LMUL used by asm code. - Simplified the CTR and XTS glue code slightly. - Minor cleanups. Changed in v1: - Refer to my cover letter https://lore.kernel.org/linux-crypto/20240102064743.220490-1-ebiggers@kernel.org/ Eric Biggers (1): RISC-V: add TOOLCHAIN_HAS_VECTOR_CRYPTO Heiko Stuebner (2): RISC-V: add helper function to read the vector VLEN RISC-V: hook new crypto subdir into build-system Jerry Shih (7): crypto: riscv - add vector crypto accelerated AES-{ECB,CBC,CTR,XTS} crypto: riscv - add vector crypto accelerated ChaCha20 crypto: riscv - add vector crypto accelerated GHASH crypto: riscv - add vector crypto accelerated SHA-{256,224} crypto: riscv - add vector crypto accelerated SHA-{512,384} crypto: riscv - add vector crypto accelerated SM3 crypto: riscv - add vector crypto accelerated SM4 arch/riscv/Kbuild | 1 + arch/riscv/Kconfig | 7 + arch/riscv/crypto/Kconfig | 93 +++ arch/riscv/crypto/Makefile | 23 + arch/riscv/crypto/aes-macros.S | 156 +++++ arch/riscv/crypto/aes-riscv64-glue.c | 550 ++++++++++++++++++ .../crypto/aes-riscv64-zvkned-zvbb-zvkg.S | 312 ++++++++++ arch/riscv/crypto/aes-riscv64-zvkned-zvkb.S | 146 +++++ arch/riscv/crypto/aes-riscv64-zvkned.S | 180 ++++++ arch/riscv/crypto/chacha-riscv64-glue.c | 101 ++++ arch/riscv/crypto/chacha-riscv64-zvkb.S | 294 ++++++++++ arch/riscv/crypto/ghash-riscv64-glue.c | 168 ++++++ arch/riscv/crypto/ghash-riscv64-zvkg.S | 72 +++ arch/riscv/crypto/sha256-riscv64-glue.c | 137 +++++ .../sha256-riscv64-zvknha_or_zvknhb-zvkb.S | 225 +++++++ arch/riscv/crypto/sha512-riscv64-glue.c | 133 +++++ .../riscv/crypto/sha512-riscv64-zvknhb-zvkb.S | 203 +++++++ arch/riscv/crypto/sm3-riscv64-glue.c | 112 ++++ arch/riscv/crypto/sm3-riscv64-zvksh-zvkb.S | 123 ++++ arch/riscv/crypto/sm4-riscv64-glue.c | 107 ++++ arch/riscv/crypto/sm4-riscv64-zvksed-zvkb.S | 117 ++++ arch/riscv/include/asm/vector.h | 11 + crypto/Kconfig | 3 + 23 files changed, 3274 insertions(+) create mode 100644 arch/riscv/crypto/Kconfig create mode 100644 arch/riscv/crypto/Makefile create mode 100644 arch/riscv/crypto/aes-macros.S create mode 100644 arch/riscv/crypto/aes-riscv64-glue.c create mode 100644 arch/riscv/crypto/aes-riscv64-zvkned-zvbb-zvkg.S create mode 100644 arch/riscv/crypto/aes-riscv64-zvkned-zvkb.S create mode 100644 arch/riscv/crypto/aes-riscv64-zvkned.S create mode 100644 arch/riscv/crypto/chacha-riscv64-glue.c create mode 100644 arch/riscv/crypto/chacha-riscv64-zvkb.S create mode 100644 arch/riscv/crypto/ghash-riscv64-glue.c create mode 100644 arch/riscv/crypto/ghash-riscv64-zvkg.S create mode 100644 arch/riscv/crypto/sha256-riscv64-glue.c create mode 100644 arch/riscv/crypto/sha256-riscv64-zvknha_or_zvknhb-zvkb.S create mode 100644 arch/riscv/crypto/sha512-riscv64-glue.c create mode 100644 arch/riscv/crypto/sha512-riscv64-zvknhb-zvkb.S create mode 100644 arch/riscv/crypto/sm3-riscv64-glue.c create mode 100644 arch/riscv/crypto/sm3-riscv64-zvksh-zvkb.S create mode 100644 arch/riscv/crypto/sm4-riscv64-glue.c create mode 100644 arch/riscv/crypto/sm4-riscv64-zvksed-zvkb.S base-commit: 6613476e225e090cc9aad49be7fa504e290dd33d -- 2.43.0 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 9093CC47422 for ; Mon, 22 Jan 2024 00:23:31 +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: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:In-Reply-To:References: List-Owner; bh=N+xcVPG9zzmwo9pwd9AlgIOLGuYtmj9djGqwLGavrHo=; b=KBFuSChscPOtYK ncCe9Cv7HweGiWIx3rxnVS3NAYrNv18g0auK6X/uMjMSkb8rISzPy9u/C9Yt0hq1u6yHqI2P6S4s4 Ex354kB4Tpnef1RdKhtnvqfLuZ6YHWIgitT/82kkey5IrXuisG+YnJy//0N1KTBek3M9ghLttWT/S OCZ3xtlCJ39mTJyDXx8B/xvFFAW9DEvynr3/efoW1gvWrr1GqI02N+VkGFB1dLNyTuF+FdRusKaSP UbrhjAYmtQmOKrdei7QVOljMiJE+ydEVQfs1x4TD9eUdeivCzWPwQLCdLYMrKS3IzZ0NL2mA9krfk O2MZL8JesdnYBvmmAPqg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1rRi5m-00AFpO-2B; Mon, 22 Jan 2024 00:23:10 +0000 Received: from sin.source.kernel.org ([145.40.73.55]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1rRi5g-00AFn8-2B for linux-riscv@lists.infradead.org; Mon, 22 Jan 2024 00:23:08 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sin.source.kernel.org (Postfix) with ESMTP id 45CD2CE28B6; Mon, 22 Jan 2024 00:22:59 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 03362C433F1; Mon, 22 Jan 2024 00:22:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1705882977; bh=/98FyMHfNpcE20uREuwvTI8aEaiGp4Wx3e7AXQcREB8=; h=From:To:Cc:Subject:Date:From; b=cSiMXi3dT5GpQICa7Om7LNG5CODXq/A5eLQLot62CARYuv48uTEsKFbCUsiN/aK2v s9uZxu7P3fbDu+6LfqSxjftwQ/QcWy37EZwTnoHtMjuasPfcu1t9F4/OALHYoVQQqZ dOy0OsVn3VSEk2ucP4CrE2u5gasKrgU04YMIK19Ww/xIJHxRd99H+NTqZHejdVXXB8 laEOtzT7btvQ0yYcJOMpqmZPLwbrnbQ2graMl+UTIi4gjQF8l1dtaM63DO9NUPVWXw hi/A8A1kiJovyJZkATF/D05ea2yE+fUWWRdtJBn4z3NmGyIvM69hmD5JdZTMBv+nts AJ+QYb+emR7jg== From: Eric Biggers To: linux-crypto@vger.kernel.org, linux-riscv@lists.infradead.org Cc: linux-kernel@vger.kernel.org, Albert Ou , Andy Chiu , Ard Biesheuvel , =?UTF-8?q?Christoph=20M=C3=BCllner?= , Heiko Stuebner , Jerry Shih , Palmer Dabbelt , Paul Walmsley , Phoebe Chen , hongrong.hsu@sifive.com Subject: [PATCH v3 00/10] RISC-V crypto with reworked asm files Date: Sun, 21 Jan 2024 16:19:11 -0800 Message-ID: <20240122002024.27477-1-ebiggers@kernel.org> X-Mailer: git-send-email 2.43.0 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240121_162305_052747_EF4ADD98 X-CRM114-Status: GOOD ( 14.95 ) X-BeenThere: linux-riscv@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-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org VGhpcyBwYXRjaHNldCwgd2hpY2ggYXBwbGllcyB0byB2Ni44LXJjMSwgYWRkcyBjcnlwdG9ncmFw aGljIGFsZ29yaXRobQppbXBsZW1lbnRhdGlvbnMgYWNjZWxlcmF0ZWQgdXNpbmcgdGhlIFJJU0Mt ViB2ZWN0b3IgY3J5cHRvIGV4dGVuc2lvbnMKKGh0dHBzOi8vZ2l0aHViLmNvbS9yaXNjdi9yaXNj di1jcnlwdG8vcmVsZWFzZXMvZG93bmxvYWQvdjEuMC4wL3Jpc2N2LWNyeXB0by1zcGVjLXZlY3Rv ci5wZGYpCmFuZCBSSVNDLVYgdmVjdG9yIGV4dGVuc2lvbgooaHR0cHM6Ly9naXRodWIuY29tL3Jp c2N2L3Jpc2N2LXYtc3BlYy9yZWxlYXNlcy9kb3dubG9hZC92MS4wL3Jpc2N2LXYtc3BlYy0xLjAu cGRmKS4KVGhlIGZvbGxvd2luZyBhbGdvcml0aG1zIGFyZSBpbmNsdWRlZDogQUVTIGluIEVDQiwg Q0JDLCBDVFIsIGFuZCBYVFMgbW9kZXM7CkNoYUNoYTIwOyBHSEFTSDsgU0hBLTI7IFNNMzsgYW5k IFNNNC4KCkluIGdlbmVyYWwsIHRoZSBhc3NlbWJseSBjb2RlIHJlcXVpcmVzIGEgNjQtYml0IFJJ U0MtViBDUFUgd2l0aCBWTEVOID49IDEyOCwKbGl0dGxlIGVuZGlhbiBieXRlIG9yZGVyLCBhbmQg dmVjdG9yIHVuYWxpZ25lZCBhY2Nlc3Mgc3VwcG9ydC4gIFRoZSBFQ0IsIENUUiwKWFRTLCBhbmQg Q2hhQ2hhMjAgY29kZSBpcyBkZXNpZ25lZCB0byBuYXR1cmFsbHkgc2NhbGUgdXAgdG8gbGFyZ2Vy IFZMRU4gdmFsdWVzLgpCdWlsZGluZyB0aGUgYXNzZW1ibHkgY29kZSByZXF1aXJlcyB0aXAtb2Yt dHJlZSBiaW51dGlscyAoZnV0dXJlIDIuNDIpIG9yCnRpcC1vZi10cmVlIGNsYW5nIChmdXR1cmUg MTgueCkuICBBbGwgYWxnb3JpdGhtcyBwYXNzIHRlc3RpbmcgaW4gUUVNVSwgdXNpbmcKQ09ORklH X0NSWVBUT19NQU5BR0VSX0VYVFJBX1RFU1RTPXkuICBNdWNoIG9mIHRoZSBhc3NlbWJseSBjb2Rl IGlzIGRlcml2ZWQgZnJvbQpPcGVuU1NMIGNvZGUgdGhhdCB3YXMgYWRkZWQgYnkgaHR0cHM6Ly9n aXRodWIuY29tL29wZW5zc2wvb3BlbnNzbC9wdWxsLzIxOTIzLgpJdCdzIGJlZW4gY2xlYW5lZCB1 cCBmb3IgaW50ZWdyYXRpb24gd2l0aCB0aGUga2VybmVsLCBlLmcuIHJlZHVjaW5nIGNvZGUKZHVw bGljYXRpb24sIGVsaW1pbmF0aW5nIHVzZSBvZiAuaW5zdCBhbmQgcGVybGFzbSwgYW5kIGZpeGlu ZyBhIGZldyBidWdzLgoKVGhpcyBwYXRjaHNldCBpbmNvcnBvcmF0ZXMgdGhlIHdvcmsgb2YgbXVs dGlwbGUgcGVvcGxlLCBpbmNsdWRpbmcgSmVycnkgU2hpaCwKSGVpa28gU3R1ZWJuZXIsIENocmlz dG9waCBNw7xsbG5lciwgUGhvZWJlIENoZW4sIENoYXJhbGFtcG9zIE1pdHJvZGltYXMsIGFuZApt eXNlbGYuICBUaGlzIHBhdGNoc2V0IHdlbnQgdGhyb3VnaCBzZXZlcmFsIHZlcnNpb25zIGZyb20g SGVpa28gKGxhc3QgdmVyc2lvbgpodHRwczovL2xvcmUua2VybmVsLm9yZy9saW51eC1jcnlwdG8v MjAyMzA3MTExNTM3NDMuMTk3MDYyNS0xLWhlaWtvQHNudGVjaC5kZSksCnRoZW4gc2V2ZXJhbCB2 ZXJzaW9ucyBmcm9tIEplcnJ5IChsYXN0IHZlcnNpb246Cmh0dHBzOi8vbG9yZS5rZXJuZWwub3Jn L2xpbnV4LWNyeXB0by8yMDIzMTIzMTE1Mjc0My42MzA0LTEtamVycnkuc2hpaEBzaWZpdmUuY29t KSwKdGhlbiBmaW5hbGx5IHNldmVyYWwgdmVyc2lvbnMgZnJvbSBtZS4gIFRoYW5rcyB0byBldmVy eW9uZSB3aG8gaGFzIGNvbnRyaWJ1dGVkCnRvIHRoaXMgcGF0Y2hzZXQgb3IgaXRzIHByZXJlcXVp c2l0ZXMuICBTaW5jZSB2Ni44LXJjMSwgYWxsIHByZXJlcXVpc2l0ZSBrZXJuZWwKcGF0Y2hlcyBh cmUgdXBzdHJlYW0uICBJIHRoaW5rIHRoaXMgaXMgbm93IHJlYWR5LCBhbmQgSSdkIGxpa2UgZm9y IGl0IHRvIGJlCmFwcGxpZWQgZm9yIDYuOSwgZWl0aGVyIHRvIHRoZSBjcnlwdG8gb3IgcmlzY3Yg dHJlZSAoYXQgbWFpbnRhaW5lcnMnIGNob2ljZSkuCgpCZWxvdyBpcyB0aGUgY2hhbmdlbG9nIGZv ciBteSB2ZXJzaW9ucyBvZiB0aGUgcGF0Y2hzZXQuICBGb3IgdGhlIGNoYW5nZWxvZyBvZgp0aGUg b2xkZXIgdmVyc2lvbnMsIHNlZSB0aGUgYWJvdmUgbGlua3MuCgpDaGFuZ2VkIGluIHYzOgogIC0g Rml4ZWQgYSBidWcgaW4gdGhlIEFFUy1YVFMgaW1wbGVtZW50YXRpb24gd2hlcmUgaXQgYXNzdW1l ZCB0aGUgQ1BVCiAgICBhbHdheXMgc2V0IHZsIHRvIHRoZSBtYXhpbXVtIHBvc3NpYmxlIHZhbHVl LiAgVGhpcyB3YXMgb2theSBmb3IKICAgIFFFTVUsIGJ1dCB0aGUgdmVjdG9yIHNwZWMgYWxsb3dz IENQVXMgdG8gaGF2ZSBkaWZmZXJlbnQgYmVoYXZpb3IuCiAgLSBJbmNyZWFzZWQgdGhlIExNVUwg Zm9yIEFFUy1FQ0IgdG8gOCwgYXMgdGhlIHJlZ2lzdGVycyBhcmUgYXZhaWxhYmxlLgogIC0gRml4 ZWQgc29tZSBsaWNlbnNlIHRleHQgdGhhdCBJIGhhZCBtaXN0YWtlbmx5IGNoYW5nZWQgd2hlbiBk b2luZyBhCiAgICBmaW5kLWFuZC1yZXBsYWNlIG9mIGNvZGUuCiAgLSBBZGRyZXNzZWQgYSBjaGVj a3BhdGNoIHdhcm5pbmcgYnkgbm90IGluY2x1ZGluZyBmaWxlbmFtZSBpbiBmaWxlLgogIC0gUmVu YW1lIHNvbWUgbGFiZWxzLgogIC0gQ29uc3RpZnkgYSB2YXJpYWJsZS4KCkNoYW5nZWQgaW4gdjI6 CiAgLSBNZXJnZWQgdGhlIEFFUyBtb2R1bGVzIHRvZ2V0aGVyIHRvIHByZXZlbnQgYSBidWlsZCBl cnJvci4KICAtIE9ubHkgdW5yZWdpc3RlciBBRVMgYWxnb3JpdGhtcyB0aGF0IHdlcmUgcmVnaXN0 ZXJlZC4KICAtIENvcnJlY3RlZCB3YWxrc2l6ZSBwcm9wZXJ0aWVzIHRvIG1hdGNoIHRoZSBMTVVM IHVzZWQgYnkgYXNtIGNvZGUuCiAgLSBTaW1wbGlmaWVkIHRoZSBDVFIgYW5kIFhUUyBnbHVlIGNv ZGUgc2xpZ2h0bHkuCiAgLSBNaW5vciBjbGVhbnVwcy4KCkNoYW5nZWQgaW4gdjE6CiAgLSBSZWZl ciB0byBteSBjb3ZlciBsZXR0ZXIKICAgIGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2xpbnV4LWNy eXB0by8yMDI0MDEwMjA2NDc0My4yMjA0OTAtMS1lYmlnZ2Vyc0BrZXJuZWwub3JnLwoKRXJpYyBC aWdnZXJzICgxKToKICBSSVNDLVY6IGFkZCBUT09MQ0hBSU5fSEFTX1ZFQ1RPUl9DUllQVE8KCkhl aWtvIFN0dWVibmVyICgyKToKICBSSVNDLVY6IGFkZCBoZWxwZXIgZnVuY3Rpb24gdG8gcmVhZCB0 aGUgdmVjdG9yIFZMRU4KICBSSVNDLVY6IGhvb2sgbmV3IGNyeXB0byBzdWJkaXIgaW50byBidWls ZC1zeXN0ZW0KCkplcnJ5IFNoaWggKDcpOgogIGNyeXB0bzogcmlzY3YgLSBhZGQgdmVjdG9yIGNy eXB0byBhY2NlbGVyYXRlZCBBRVMte0VDQixDQkMsQ1RSLFhUU30KICBjcnlwdG86IHJpc2N2IC0g YWRkIHZlY3RvciBjcnlwdG8gYWNjZWxlcmF0ZWQgQ2hhQ2hhMjAKICBjcnlwdG86IHJpc2N2IC0g YWRkIHZlY3RvciBjcnlwdG8gYWNjZWxlcmF0ZWQgR0hBU0gKICBjcnlwdG86IHJpc2N2IC0gYWRk IHZlY3RvciBjcnlwdG8gYWNjZWxlcmF0ZWQgU0hBLXsyNTYsMjI0fQogIGNyeXB0bzogcmlzY3Yg LSBhZGQgdmVjdG9yIGNyeXB0byBhY2NlbGVyYXRlZCBTSEEtezUxMiwzODR9CiAgY3J5cHRvOiBy aXNjdiAtIGFkZCB2ZWN0b3IgY3J5cHRvIGFjY2VsZXJhdGVkIFNNMwogIGNyeXB0bzogcmlzY3Yg LSBhZGQgdmVjdG9yIGNyeXB0byBhY2NlbGVyYXRlZCBTTTQKCiBhcmNoL3Jpc2N2L0tidWlsZCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogYXJjaC9yaXNjdi9LY29uZmlnICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA3ICsKIGFyY2gvcmlzY3YvY3J5cHRvL0tjb25m aWcgICAgICAgICAgICAgICAgICAgICB8ICA5MyArKysKIGFyY2gvcmlzY3YvY3J5cHRvL01ha2Vm aWxlICAgICAgICAgICAgICAgICAgICB8ICAyMyArCiBhcmNoL3Jpc2N2L2NyeXB0by9hZXMtbWFj cm9zLlMgICAgICAgICAgICAgICAgfCAxNTYgKysrKysKIGFyY2gvcmlzY3YvY3J5cHRvL2Flcy1y aXNjdjY0LWdsdWUuYyAgICAgICAgICB8IDU1MCArKysrKysrKysrKysrKysrKysKIC4uLi9jcnlw dG8vYWVzLXJpc2N2NjQtenZrbmVkLXp2YmItenZrZy5TICAgICB8IDMxMiArKysrKysrKysrCiBh cmNoL3Jpc2N2L2NyeXB0by9hZXMtcmlzY3Y2NC16dmtuZWQtenZrYi5TICAgfCAxNDYgKysrKysK IGFyY2gvcmlzY3YvY3J5cHRvL2Flcy1yaXNjdjY0LXp2a25lZC5TICAgICAgICB8IDE4MCArKysr KysKIGFyY2gvcmlzY3YvY3J5cHRvL2NoYWNoYS1yaXNjdjY0LWdsdWUuYyAgICAgICB8IDEwMSAr KysrCiBhcmNoL3Jpc2N2L2NyeXB0by9jaGFjaGEtcmlzY3Y2NC16dmtiLlMgICAgICAgfCAyOTQg KysrKysrKysrKwogYXJjaC9yaXNjdi9jcnlwdG8vZ2hhc2gtcmlzY3Y2NC1nbHVlLmMgICAgICAg IHwgMTY4ICsrKysrKwogYXJjaC9yaXNjdi9jcnlwdG8vZ2hhc2gtcmlzY3Y2NC16dmtnLlMgICAg ICAgIHwgIDcyICsrKwogYXJjaC9yaXNjdi9jcnlwdG8vc2hhMjU2LXJpc2N2NjQtZ2x1ZS5jICAg ICAgIHwgMTM3ICsrKysrCiAuLi4vc2hhMjU2LXJpc2N2NjQtenZrbmhhX29yX3p2a25oYi16dmti LlMgICAgfCAyMjUgKysrKysrKwogYXJjaC9yaXNjdi9jcnlwdG8vc2hhNTEyLXJpc2N2NjQtZ2x1 ZS5jICAgICAgIHwgMTMzICsrKysrCiAuLi4vcmlzY3YvY3J5cHRvL3NoYTUxMi1yaXNjdjY0LXp2 a25oYi16dmtiLlMgfCAyMDMgKysrKysrKwogYXJjaC9yaXNjdi9jcnlwdG8vc20zLXJpc2N2NjQt Z2x1ZS5jICAgICAgICAgIHwgMTEyICsrKysKIGFyY2gvcmlzY3YvY3J5cHRvL3NtMy1yaXNjdjY0 LXp2a3NoLXp2a2IuUyAgICB8IDEyMyArKysrCiBhcmNoL3Jpc2N2L2NyeXB0by9zbTQtcmlzY3Y2 NC1nbHVlLmMgICAgICAgICAgfCAxMDcgKysrKwogYXJjaC9yaXNjdi9jcnlwdG8vc200LXJpc2N2 NjQtenZrc2VkLXp2a2IuUyAgIHwgMTE3ICsrKysKIGFyY2gvcmlzY3YvaW5jbHVkZS9hc20vdmVj dG9yLmggICAgICAgICAgICAgICB8ICAxMSArCiBjcnlwdG8vS2NvbmZpZyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfCAgIDMgKwogMjMgZmlsZXMgY2hhbmdlZCwgMzI3NCBpbnNlcnRp b25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgYXJjaC9yaXNjdi9jcnlwdG8vS2NvbmZpZwogY3Jl YXRlIG1vZGUgMTAwNjQ0IGFyY2gvcmlzY3YvY3J5cHRvL01ha2VmaWxlCiBjcmVhdGUgbW9kZSAx MDA2NDQgYXJjaC9yaXNjdi9jcnlwdG8vYWVzLW1hY3Jvcy5TCiBjcmVhdGUgbW9kZSAxMDA2NDQg YXJjaC9yaXNjdi9jcnlwdG8vYWVzLXJpc2N2NjQtZ2x1ZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg YXJjaC9yaXNjdi9jcnlwdG8vYWVzLXJpc2N2NjQtenZrbmVkLXp2YmItenZrZy5TCiBjcmVhdGUg bW9kZSAxMDA2NDQgYXJjaC9yaXNjdi9jcnlwdG8vYWVzLXJpc2N2NjQtenZrbmVkLXp2a2IuUwog Y3JlYXRlIG1vZGUgMTAwNjQ0IGFyY2gvcmlzY3YvY3J5cHRvL2Flcy1yaXNjdjY0LXp2a25lZC5T CiBjcmVhdGUgbW9kZSAxMDA2NDQgYXJjaC9yaXNjdi9jcnlwdG8vY2hhY2hhLXJpc2N2NjQtZ2x1 ZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgYXJjaC9yaXNjdi9jcnlwdG8vY2hhY2hhLXJpc2N2NjQt enZrYi5TCiBjcmVhdGUgbW9kZSAxMDA2NDQgYXJjaC9yaXNjdi9jcnlwdG8vZ2hhc2gtcmlzY3Y2 NC1nbHVlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBhcmNoL3Jpc2N2L2NyeXB0by9naGFzaC1yaXNj djY0LXp2a2cuUwogY3JlYXRlIG1vZGUgMTAwNjQ0IGFyY2gvcmlzY3YvY3J5cHRvL3NoYTI1Ni1y aXNjdjY0LWdsdWUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGFyY2gvcmlzY3YvY3J5cHRvL3NoYTI1 Ni1yaXNjdjY0LXp2a25oYV9vcl96dmtuaGItenZrYi5TCiBjcmVhdGUgbW9kZSAxMDA2NDQgYXJj aC9yaXNjdi9jcnlwdG8vc2hhNTEyLXJpc2N2NjQtZ2x1ZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg YXJjaC9yaXNjdi9jcnlwdG8vc2hhNTEyLXJpc2N2NjQtenZrbmhiLXp2a2IuUwogY3JlYXRlIG1v ZGUgMTAwNjQ0IGFyY2gvcmlzY3YvY3J5cHRvL3NtMy1yaXNjdjY0LWdsdWUuYwogY3JlYXRlIG1v ZGUgMTAwNjQ0IGFyY2gvcmlzY3YvY3J5cHRvL3NtMy1yaXNjdjY0LXp2a3NoLXp2a2IuUwogY3Jl YXRlIG1vZGUgMTAwNjQ0IGFyY2gvcmlzY3YvY3J5cHRvL3NtNC1yaXNjdjY0LWdsdWUuYwogY3Jl YXRlIG1vZGUgMTAwNjQ0IGFyY2gvcmlzY3YvY3J5cHRvL3NtNC1yaXNjdjY0LXp2a3NlZC16dmti LlMKCgpiYXNlLWNvbW1pdDogNjYxMzQ3NmUyMjVlMDkwY2M5YWFkNDliZTdmYTUwNGUyOTBkZDMz ZAotLSAKMi40My4wCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KbGludXgtcmlzY3YgbWFpbGluZyBsaXN0CmxpbnV4LXJpc2N2QGxpc3RzLmluZnJhZGVh ZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1y aXNjdgo=