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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id F2BFFC433F5 for ; Thu, 10 Feb 2022 23:28:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235301AbiBJX2f (ORCPT ); Thu, 10 Feb 2022 18:28:35 -0500 Received: from mxb-00190b01.gslb.pphosted.com ([23.128.96.19]:41196 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1345655AbiBJX2f (ORCPT ); Thu, 10 Feb 2022 18:28:35 -0500 Received: from mail-yb1-xb4a.google.com (mail-yb1-xb4a.google.com [IPv6:2607:f8b0:4864:20::b4a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3F207116D for ; Thu, 10 Feb 2022 15:28:35 -0800 (PST) Received: by mail-yb1-xb4a.google.com with SMTP id z15-20020a25bb0f000000b00613388c7d99so15316445ybg.8 for ; Thu, 10 Feb 2022 15:28:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:message-id:mime-version:subject:from:to:cc :content-transfer-encoding; bh=X4pGovICiPQ0U+Wm+4Mu3dfpVMwLlQ+3KkIwYwKv2HY=; b=JwD33JaCAdwyGy0A45Vk6WDnFItu+aqp8GMTky89wFARQDZXlfOVNqaT9dWXtuQT0W oIIYuvVAGp5n3+826axpuJSMg9Ywdo+SGL8/b7YiTHwrZMcSnXamKw9lqcbjMmVCT0Kd Tv36pXuj+yUVH6Xe7DoITIf74d4kX+Vh3eWP3jpNPZwuveodR/20y9cieYqS+Wu2g48a zCocD7ZuDG7AG2MunqE34VUGiJGG3cFJG2x8PAeVt4JDg7ZBDuo1ChClCnvjMVxSk057 8QP4ueC/UG2ztofFRdQKXWJcpMXr1MAwtMm+ZV1+lNV60BD6xSedODK4Y+qaZHGQvpf5 fqCw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:message-id:mime-version:subject:from:to:cc :content-transfer-encoding; bh=X4pGovICiPQ0U+Wm+4Mu3dfpVMwLlQ+3KkIwYwKv2HY=; b=3bappqV9v02c3s6cdrnOoLTbfS3Kbe9yNoELCPDwOa6TD9+cJigHcQqDbCpY5GTnA7 N7r5NArSyXYywUsYNKS6q6UmYJWI5KmWUIPQ8pWfZQcnoMMwFwfKWulh9e2CHETdmNiQ lTAjKadsK5yTQYsKITaaC/YjIBCgAfAC0c1RA3u0NzakWs1VzpwmSw6Agvfq+ghwiU8/ NvhPGO4eQDSlS2/2GXjh2mFwfzqDvAcPtac2vP2Zt68pOCa82Q9NS1ZQoKHcRXS30hNH 8yjoWw/XHbT+C+l/xkUVWp3YiuZkOvyuBAbMmHTaLaLlM0WEtZoF4lJhwopfqBNPvyOs c+rw== X-Gm-Message-State: AOAM530JeNM/6CiSwx3Af2shU567TJ2BM0nN6LvGsXmNJ3qRf0EoQKRw VD5VnI+Q0Se5GvOkjTZd8GMYde9YkT/xn8oR4tCcIfvpEIzjQzEPMvkb0abs13VlJz8F+gP+g52 Z6HWSnC2uoulPXW7v2I8vomM6JLAxMKDHUALETomNUuzlw4RRAqMdir93SQcDRg0UdIQ= X-Google-Smtp-Source: ABdhPJxwZ4Y6YJ+RiwWywKVKfsWcJiykReiGnNG6XrsemntyXE/P+wYILD44hJRaJ3u7EJU7Kuy7AT51Ww== X-Received: from nhuck.c.googlers.com ([fda3:e722:ac3:cc00:14:4d90:c0a8:39cc]) (user=nhuck job=sendgmr) by 2002:a25:30d4:: with SMTP id w203mr9052733ybw.511.1644535714443; Thu, 10 Feb 2022 15:28:34 -0800 (PST) Date: Thu, 10 Feb 2022 23:28:05 +0000 Message-Id: <20220210232812.798387-1-nhuck@google.com> Mime-Version: 1.0 X-Mailer: git-send-email 2.35.1.265.g69c8d7142f-goog Subject: [RFC PATCH v2 0/7] crypto: HCTR2 support From: Nathan Huckleberry To: linux-crypto@vger.kernel.org Cc: Herbert Xu , "David S. Miller" , linux-arm-kernel@lists.infradead.org, Paul Crowley , Eric Biggers , Sami Tolvanen , Ard Biesheuvel , Nathan Huckleberry Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org HCTR2 is a length-preserving encryption mode that is efficient on processors with instructions to accelerate AES and carryless multiplication, e.g. x86 processors with AES-NI and CLMUL, and ARM processors with the ARMv8 Crypto Extensions. HCTR2 is specified in https://ia.cr/2021/1441 "Length-preserving encryption with HCTR2" which shows that if AES is secure and HCTR2 is instantiated with AES, then HCTR2 is secure. Reference code and test vectors are at https://github.com/google/hctr2. As a length-preserving encryption mode, HCTR2 is suitable for applications such as storage encryption where ciphertext expansion is not possible, and thus authenticated encryption cannot be used. Currently, such applications usually use XTS, or in some cases Adiantum. XTS has the disadvantage that it is a narrow-block mode: a bitflip will only change 16 bytes in the resulting ciphertext or plaintext. This reveals more information to an attacker than necessary. HCTR2 is a wide-block mode, so it provides a stronger security property: a bitflip will change the entire message. HCTR2 is somewhat similar to Adiantum, which is also a wide-block mode. However, HCTR2 is designed to take advantage of existing crypto instructions, while Adiantum targets devices without such hardware support. Adiantum is also designed with longer messages in mind, while HCTR2 is designed to be efficient even on short messages. The first intended use of this mode in the kernel is for the encryption of filenames, where for efficiency reasons encryption must be fully deterministic (only one ciphertext for each plaintext) and the existing CBC solution leaks more information than necessary for filenames with common prefixes. HCTR2 uses two passes of an =CE=B5-almost-=E2=88=86-universal hash function= called POLYVAL and one pass of a block cipher mode called XCTR. POLYVAL is a polynomial hash designed for efficiency on modern processors and was originally specified for use in AES-GCM-SIV (RFC 8452). XCTR mode is a variant of CTR mode that is more efficient on little-endian machines. This patchset adds HCTR2 to Linux's crypto API, including generic implementations of XCTR and POLYVAL, hardware accelerated implementations of XCTR and POLYVAL for both x86-64 and ARM64, and a templated implementation of HCTR2. Nathan Huckleberry (7): crypto: xctr - Add XCTR support crypto: polyval - Add POLYVAL support crypto: hctr2 - Add HCTR2 support crypto: x86/aesni-xctr: Add accelerated implementation of XCTR crypto: arm64/aes-xctr: Add accelerated implementation of XCTR crypto: x86/polyval: Add PCLMULQDQ accelerated implementation of POLYVAL crypto: arm64/polyval: Add PMULL accelerated implementation of POLYVAL arch/arm64/crypto/Kconfig | 11 +- arch/arm64/crypto/Makefile | 3 + arch/arm64/crypto/aes-glue.c | 72 +- arch/arm64/crypto/aes-modes.S | 130 ++ arch/arm64/crypto/polyval-ce-core.S | 405 ++++++ arch/arm64/crypto/polyval-ce-glue.c | 365 ++++++ arch/x86/crypto/Makefile | 5 +- arch/x86/crypto/aes_xctrby8_avx-x86_64.S | 529 ++++++++ arch/x86/crypto/aesni-intel_asm.S | 70 + arch/x86/crypto/aesni-intel_glue.c | 89 ++ arch/x86/crypto/polyval-clmulni_asm.S | 414 ++++++ arch/x86/crypto/polyval-clmulni_glue.c | 365 ++++++ crypto/Kconfig | 38 + crypto/Makefile | 3 + crypto/hctr2.c | 532 ++++++++ crypto/polyval-generic.c | 199 +++ crypto/tcrypt.c | 10 + crypto/testmgr.c | 20 + crypto/testmgr.h | 1500 ++++++++++++++++++++++ crypto/xctr.c | 193 +++ include/crypto/polyval.h | 22 + 21 files changed, 4970 insertions(+), 5 deletions(-) create mode 100644 arch/arm64/crypto/polyval-ce-core.S create mode 100644 arch/arm64/crypto/polyval-ce-glue.c create mode 100644 arch/x86/crypto/aes_xctrby8_avx-x86_64.S create mode 100644 arch/x86/crypto/polyval-clmulni_asm.S create mode 100644 arch/x86/crypto/polyval-clmulni_glue.c create mode 100644 crypto/hctr2.c create mode 100644 crypto/polyval-generic.c create mode 100644 crypto/xctr.c create mode 100644 include/crypto/polyval.h --=20 2.35.1.265.g69c8d7142f-goog 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 9FCD9C433EF for ; Thu, 10 Feb 2022 23:29:59 +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:Mime-Version: Message-Id:Date: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=3uN7uO8x9aH66ovfSntsItnMk1es+v3Ws+JhXraOfA8=; b=tMW Jx+FBSB2Z5zXYV18RwacikXra0ec2RmH5qOPH3zl1zibZbga5JfERDkOQzstM4DdQO4QZmJxyAi6e UZmz+xxcUI2tdbhMPDSPiSvGT4pOYWVooYRXuPfXlUx2vNG1dYNcsNxaT80bh/Fs+N6vMgnIZEnGt 9eTiyFXrlIyvPCd1AX9Yge1L4aRpd7hx60O5iLM5R1f/X9JrXL3qjbbPBOyJ889EVXjkKDPp2FZrP eKbjHC0Lsy5oTk5YWKa81WEFDne5YQXm2Qrcbwtqi6npSQF0yCJM8iDGeVLOw2z7JnemanbJh/SH3 4Q1iXdy42Q1nYJEVPaCrhVUy9EO+zUg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nIIrf-005AEd-H2; Thu, 10 Feb 2022 23:28:39 +0000 Received: from mail-yb1-xb4a.google.com ([2607:f8b0:4864:20::b4a]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nIIrb-005AE2-VE for linux-arm-kernel@lists.infradead.org; Thu, 10 Feb 2022 23:28:37 +0000 Received: by mail-yb1-xb4a.google.com with SMTP id c5-20020a25f305000000b0061dd6123f18so15237249ybs.17 for ; Thu, 10 Feb 2022 15:28:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:message-id:mime-version:subject:from:to:cc :content-transfer-encoding; bh=X4pGovICiPQ0U+Wm+4Mu3dfpVMwLlQ+3KkIwYwKv2HY=; b=JwD33JaCAdwyGy0A45Vk6WDnFItu+aqp8GMTky89wFARQDZXlfOVNqaT9dWXtuQT0W oIIYuvVAGp5n3+826axpuJSMg9Ywdo+SGL8/b7YiTHwrZMcSnXamKw9lqcbjMmVCT0Kd Tv36pXuj+yUVH6Xe7DoITIf74d4kX+Vh3eWP3jpNPZwuveodR/20y9cieYqS+Wu2g48a zCocD7ZuDG7AG2MunqE34VUGiJGG3cFJG2x8PAeVt4JDg7ZBDuo1ChClCnvjMVxSk057 8QP4ueC/UG2ztofFRdQKXWJcpMXr1MAwtMm+ZV1+lNV60BD6xSedODK4Y+qaZHGQvpf5 fqCw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:message-id:mime-version:subject:from:to:cc :content-transfer-encoding; bh=X4pGovICiPQ0U+Wm+4Mu3dfpVMwLlQ+3KkIwYwKv2HY=; b=An3gUZxz6W2JdWtAh17jH0bitWOEX7EcjbxSQGKVNryyStlc5Uml0ixLp1FZUmCGVH Z9Hy0U7NeiBjop5JYwshFnI8G706pTYf0dc1EhtZoeEIW1dhPD2dM5nH4RiqiRTgxTzY QfhgdS9GciV7HPgINvUHGX2IjEMttU2BBaj2lGhxpBSYIJTQjE+bBroMxxENojHcNP89 HoBcc52sxHB7A8EPtGotf/68asWRKFqN7vdJIyzhd1pN/W9RswxtIQ3bBUIkP/I71+9D 1HpD6yAVjYwcU2JDDILcoB4fq+zLtQeYDn7Q/0Ns/RVdWgMRIOM/fh27uFVKi6T9/9Wm 0w9w== X-Gm-Message-State: AOAM531UNI5XirbKZysVLSsBK3B3ow2BtalY0mtDEXDQ+0YC/We5sEu4 NmnnLRYNWyq3vYebFo+/Tpk66fM8DQ== X-Google-Smtp-Source: ABdhPJxwZ4Y6YJ+RiwWywKVKfsWcJiykReiGnNG6XrsemntyXE/P+wYILD44hJRaJ3u7EJU7Kuy7AT51Ww== X-Received: from nhuck.c.googlers.com ([fda3:e722:ac3:cc00:14:4d90:c0a8:39cc]) (user=nhuck job=sendgmr) by 2002:a25:30d4:: with SMTP id w203mr9052733ybw.511.1644535714443; Thu, 10 Feb 2022 15:28:34 -0800 (PST) Date: Thu, 10 Feb 2022 23:28:05 +0000 Message-Id: <20220210232812.798387-1-nhuck@google.com> Mime-Version: 1.0 X-Mailer: git-send-email 2.35.1.265.g69c8d7142f-goog Subject: [RFC PATCH v2 0/7] crypto: HCTR2 support From: Nathan Huckleberry To: linux-crypto@vger.kernel.org Cc: Herbert Xu , "David S. Miller" , linux-arm-kernel@lists.infradead.org, Paul Crowley , Eric Biggers , Sami Tolvanen , Ard Biesheuvel , Nathan Huckleberry X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220210_152836_364352_76802A87 X-CRM114-Status: GOOD ( 16.49 ) 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 SENUUjIgaXMgYSBsZW5ndGgtcHJlc2VydmluZyBlbmNyeXB0aW9uIG1vZGUgdGhhdCBpcyBlZmZp Y2llbnQgb24KcHJvY2Vzc29ycyB3aXRoIGluc3RydWN0aW9ucyB0byBhY2NlbGVyYXRlIEFFUyBh bmQgY2FycnlsZXNzCm11bHRpcGxpY2F0aW9uLCBlLmcuIHg4NiBwcm9jZXNzb3JzIHdpdGggQUVT LU5JIGFuZCBDTE1VTCwgYW5kIEFSTQpwcm9jZXNzb3JzIHdpdGggdGhlIEFSTXY4IENyeXB0byBF eHRlbnNpb25zLgoKSENUUjIgaXMgc3BlY2lmaWVkIGluIGh0dHBzOi8vaWEuY3IvMjAyMS8xNDQx ICJMZW5ndGgtcHJlc2VydmluZwplbmNyeXB0aW9uIHdpdGggSENUUjIiIHdoaWNoIHNob3dzIHRo YXQgaWYgQUVTIGlzIHNlY3VyZSBhbmQgSENUUjIgaXMKaW5zdGFudGlhdGVkIHdpdGggQUVTLCB0 aGVuIEhDVFIyIGlzIHNlY3VyZS4gIFJlZmVyZW5jZSBjb2RlIGFuZCB0ZXN0CnZlY3RvcnMgYXJl IGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvaGN0cjIuCgpBcyBhIGxlbmd0aC1wcmVzZXJ2 aW5nIGVuY3J5cHRpb24gbW9kZSwgSENUUjIgaXMgc3VpdGFibGUgZm9yIGFwcGxpY2F0aW9ucwpz dWNoIGFzIHN0b3JhZ2UgZW5jcnlwdGlvbiB3aGVyZSBjaXBoZXJ0ZXh0IGV4cGFuc2lvbiBpcyBu b3QgcG9zc2libGUsIGFuZAp0aHVzIGF1dGhlbnRpY2F0ZWQgZW5jcnlwdGlvbiBjYW5ub3QgYmUg dXNlZC4gIEN1cnJlbnRseSwgc3VjaAphcHBsaWNhdGlvbnMgdXN1YWxseSB1c2UgWFRTLCBvciBp biBzb21lIGNhc2VzIEFkaWFudHVtLiAgWFRTIGhhcyB0aGUKZGlzYWR2YW50YWdlIHRoYXQgaXQg aXMgYSBuYXJyb3ctYmxvY2sgbW9kZTogYSBiaXRmbGlwIHdpbGwgb25seSBjaGFuZ2UgMTYKYnl0 ZXMgaW4gdGhlIHJlc3VsdGluZyBjaXBoZXJ0ZXh0IG9yIHBsYWludGV4dC4gIFRoaXMgcmV2ZWFs cyBtb3JlCmluZm9ybWF0aW9uIHRvIGFuIGF0dGFja2VyIHRoYW4gbmVjZXNzYXJ5LgoKSENUUjIg aXMgYSB3aWRlLWJsb2NrIG1vZGUsIHNvIGl0IHByb3ZpZGVzIGEgc3Ryb25nZXIgc2VjdXJpdHkg cHJvcGVydHk6IGEKYml0ZmxpcCB3aWxsIGNoYW5nZSB0aGUgZW50aXJlIG1lc3NhZ2UuICBIQ1RS MiBpcyBzb21ld2hhdCBzaW1pbGFyIHRvCkFkaWFudHVtLCB3aGljaCBpcyBhbHNvIGEgd2lkZS1i bG9jayBtb2RlLiAgSG93ZXZlciwgSENUUjIgaXMgZGVzaWduZWQgdG8KdGFrZSBhZHZhbnRhZ2Ug b2YgZXhpc3RpbmcgY3J5cHRvIGluc3RydWN0aW9ucywgd2hpbGUgQWRpYW50dW0gdGFyZ2V0cwpk ZXZpY2VzIHdpdGhvdXQgc3VjaCBoYXJkd2FyZSBzdXBwb3J0LiAgQWRpYW50dW0gaXMgYWxzbyBk ZXNpZ25lZCB3aXRoCmxvbmdlciBtZXNzYWdlcyBpbiBtaW5kLCB3aGlsZSBIQ1RSMiBpcyBkZXNp Z25lZCB0byBiZSBlZmZpY2llbnQgZXZlbiBvbgpzaG9ydCBtZXNzYWdlcy4KClRoZSBmaXJzdCBp bnRlbmRlZCB1c2Ugb2YgdGhpcyBtb2RlIGluIHRoZSBrZXJuZWwgaXMgZm9yIHRoZSBlbmNyeXB0 aW9uIG9mCmZpbGVuYW1lcywgd2hlcmUgZm9yIGVmZmljaWVuY3kgcmVhc29ucyBlbmNyeXB0aW9u IG11c3QgYmUgZnVsbHkKZGV0ZXJtaW5pc3RpYyAob25seSBvbmUgY2lwaGVydGV4dCBmb3IgZWFj aCBwbGFpbnRleHQpIGFuZCB0aGUgZXhpc3RpbmcKQ0JDIHNvbHV0aW9uIGxlYWtzIG1vcmUgaW5m b3JtYXRpb24gdGhhbiBuZWNlc3NhcnkgZm9yIGZpbGVuYW1lcyB3aXRoCmNvbW1vbiBwcmVmaXhl cy4KCkhDVFIyIHVzZXMgdHdvIHBhc3NlcyBvZiBhbiDOtS1hbG1vc3Qt4oiGLXVuaXZlcnNhbCBo YXNoIGZ1bmN0aW9uIGNhbGxlZApQT0xZVkFMIGFuZCBvbmUgcGFzcyBvZiBhIGJsb2NrIGNpcGhl ciBtb2RlIGNhbGxlZCBYQ1RSLiAgUE9MWVZBTCBpcyBhCnBvbHlub21pYWwgaGFzaCBkZXNpZ25l ZCBmb3IgZWZmaWNpZW5jeSBvbiBtb2Rlcm4gcHJvY2Vzc29ycyBhbmQgd2FzCm9yaWdpbmFsbHkg c3BlY2lmaWVkIGZvciB1c2UgaW4gQUVTLUdDTS1TSVYgKFJGQyA4NDUyKS4gIFhDVFIgbW9kZSBp cyBhCnZhcmlhbnQgb2YgQ1RSIG1vZGUgdGhhdCBpcyBtb3JlIGVmZmljaWVudCBvbiBsaXR0bGUt ZW5kaWFuIG1hY2hpbmVzLgoKVGhpcyBwYXRjaHNldCBhZGRzIEhDVFIyIHRvIExpbnV4J3MgY3J5 cHRvIEFQSSwgaW5jbHVkaW5nIGdlbmVyaWMKaW1wbGVtZW50YXRpb25zIG9mIFhDVFIgYW5kIFBP TFlWQUwsIGhhcmR3YXJlIGFjY2VsZXJhdGVkIGltcGxlbWVudGF0aW9ucwpvZiBYQ1RSIGFuZCBQ T0xZVkFMIGZvciBib3RoIHg4Ni02NCBhbmQgQVJNNjQsIGFuZCBhIHRlbXBsYXRlZAppbXBsZW1l bnRhdGlvbiBvZiBIQ1RSMi4KCk5hdGhhbiBIdWNrbGViZXJyeSAoNyk6CiAgY3J5cHRvOiB4Y3Ry IC0gQWRkIFhDVFIgc3VwcG9ydAogIGNyeXB0bzogcG9seXZhbCAtIEFkZCBQT0xZVkFMIHN1cHBv cnQKICBjcnlwdG86IGhjdHIyIC0gQWRkIEhDVFIyIHN1cHBvcnQKICBjcnlwdG86IHg4Ni9hZXNu aS14Y3RyOiBBZGQgYWNjZWxlcmF0ZWQgaW1wbGVtZW50YXRpb24gb2YgWENUUgogIGNyeXB0bzog YXJtNjQvYWVzLXhjdHI6IEFkZCBhY2NlbGVyYXRlZCBpbXBsZW1lbnRhdGlvbiBvZiBYQ1RSCiAg Y3J5cHRvOiB4ODYvcG9seXZhbDogQWRkIFBDTE1VTFFEUSBhY2NlbGVyYXRlZCBpbXBsZW1lbnRh dGlvbiBvZgogICAgUE9MWVZBTAogIGNyeXB0bzogYXJtNjQvcG9seXZhbDogQWRkIFBNVUxMIGFj Y2VsZXJhdGVkIGltcGxlbWVudGF0aW9uIG9mIFBPTFlWQUwKCiBhcmNoL2FybTY0L2NyeXB0by9L Y29uZmlnICAgICAgICAgICAgICAgIHwgICAxMSArLQogYXJjaC9hcm02NC9jcnlwdG8vTWFrZWZp bGUgICAgICAgICAgICAgICB8ICAgIDMgKwogYXJjaC9hcm02NC9jcnlwdG8vYWVzLWdsdWUuYyAg ICAgICAgICAgICB8ICAgNzIgKy0KIGFyY2gvYXJtNjQvY3J5cHRvL2Flcy1tb2Rlcy5TICAgICAg ICAgICAgfCAgMTMwICsrCiBhcmNoL2FybTY0L2NyeXB0by9wb2x5dmFsLWNlLWNvcmUuUyAgICAg IHwgIDQwNSArKysrKysKIGFyY2gvYXJtNjQvY3J5cHRvL3BvbHl2YWwtY2UtZ2x1ZS5jICAgICAg fCAgMzY1ICsrKysrKwogYXJjaC94ODYvY3J5cHRvL01ha2VmaWxlICAgICAgICAgICAgICAgICB8 ICAgIDUgKy0KIGFyY2gveDg2L2NyeXB0by9hZXNfeGN0cmJ5OF9hdngteDg2XzY0LlMgfCAgNTI5 ICsrKysrKysrCiBhcmNoL3g4Ni9jcnlwdG8vYWVzbmktaW50ZWxfYXNtLlMgICAgICAgIHwgICA3 MCArCiBhcmNoL3g4Ni9jcnlwdG8vYWVzbmktaW50ZWxfZ2x1ZS5jICAgICAgIHwgICA4OSArKwog YXJjaC94ODYvY3J5cHRvL3BvbHl2YWwtY2xtdWxuaV9hc20uUyAgICB8ICA0MTQgKysrKysrCiBh cmNoL3g4Ni9jcnlwdG8vcG9seXZhbC1jbG11bG5pX2dsdWUuYyAgIHwgIDM2NSArKysrKysKIGNy eXB0by9LY29uZmlnICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDM4ICsKIGNyeXB0by9N YWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAzICsKIGNyeXB0by9oY3RyMi5j ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNTMyICsrKysrKysrCiBjcnlwdG8vcG9seXZh bC1nZW5lcmljLmMgICAgICAgICAgICAgICAgIHwgIDE5OSArKysKIGNyeXB0by90Y3J5cHQuYyAg ICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEwICsKIGNyeXB0by90ZXN0bWdyLmMgICAgICAg ICAgICAgICAgICAgICAgICAgfCAgIDIwICsKIGNyeXB0by90ZXN0bWdyLmggICAgICAgICAgICAg ICAgICAgICAgICAgfCAxNTAwICsrKysrKysrKysrKysrKysrKysrKysKIGNyeXB0by94Y3RyLmMg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTkzICsrKwogaW5jbHVkZS9jcnlwdG8vcG9s eXZhbC5oICAgICAgICAgICAgICAgICB8ICAgMjIgKwogMjEgZmlsZXMgY2hhbmdlZCwgNDk3MCBp bnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGFyY2gvYXJt NjQvY3J5cHRvL3BvbHl2YWwtY2UtY29yZS5TCiBjcmVhdGUgbW9kZSAxMDA2NDQgYXJjaC9hcm02 NC9jcnlwdG8vcG9seXZhbC1jZS1nbHVlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBhcmNoL3g4Ni9j cnlwdG8vYWVzX3hjdHJieThfYXZ4LXg4Nl82NC5TCiBjcmVhdGUgbW9kZSAxMDA2NDQgYXJjaC94 ODYvY3J5cHRvL3BvbHl2YWwtY2xtdWxuaV9hc20uUwogY3JlYXRlIG1vZGUgMTAwNjQ0IGFyY2gv eDg2L2NyeXB0by9wb2x5dmFsLWNsbXVsbmlfZ2x1ZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgY3J5 cHRvL2hjdHIyLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjcnlwdG8vcG9seXZhbC1nZW5lcmljLmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBjcnlwdG8veGN0ci5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgaW5j bHVkZS9jcnlwdG8vcG9seXZhbC5oCgotLSAKMi4zNS4xLjI2NS5nNjljOGQ3MTQyZi1nb29nCgoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJt LWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3Jn Cmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtl cm5lbAo=