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 X-Spam-Level: X-Spam-Status: No, score=-21.3 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 33D42C433E0 for ; Wed, 27 Jan 2021 17:21:10 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id CA62464DA0 for ; Wed, 27 Jan 2021 17:21:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235711AbhA0RUq (ORCPT ); Wed, 27 Jan 2021 12:20:46 -0500 Received: from mail.kernel.org ([198.145.29.99]:40706 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234165AbhA0RUU (ORCPT ); Wed, 27 Jan 2021 12:20:20 -0500 Received: by mail.kernel.org (Postfix) with ESMTPSA id 690DB60187; Wed, 27 Jan 2021 17:19:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1611767978; bh=34HKEYL8Uu56NwWdQHHa7lTy6DQWGDrOdbZLSeUzLas=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=CcfFkYALbXpYIR968k4K6VSsCwjYIKLLVO+TvoC+Uwp/6Mcl9+I7o6GUH6bpcgxzr xjx6Ukd7k7EPj4FuuZorAxyP7AEZms03pxIi/r+8XCmB29XBl6kYFT+FuIFFNOu1Hi 8p2FFSNJTmgymdMUCY5weC7GKTkOGoQh8J2R32PZ/9E/yPS7KCOa01BGz59E2q0sX8 npXkHmlqBK9FwbDxsYK0CKrc9u4yjfxAfuZ9xhJzmupMsDW1DUFhGQnHhKc+OIqBDA EjsYtWaWd26MsVU1+Rmu42B8MqRdBh3/WqBKDL4SYU2uQ6YyRSRqmeBhV5+GyaMIra zQw1qZ9+a5YZQ== Date: Wed, 27 Jan 2021 19:19:34 +0200 From: Jarkko Sakkinen To: Sumit Garg Cc: Jerome Forissier , "open list:SECURITY SUBSYSTEM" , Daniel Thompson , op-tee@lists.trustedfirmware.org, Jonathan Corbet , James Bottomley , Janne Karhunen , Linux Doc Mailing List , James Morris , Mimi Zohar , Linux Kernel Mailing List , David Howells , Luke Hinds , "open list:ASYMMETRIC KEYS" , Jarkko Sakkinen , Casey Schaufler , linux-integrity@vger.kernel.org, linux-arm-kernel , "Serge E. Hallyn" Subject: Re: [PATCH v8 2/4] KEYS: trusted: Introduce TEE based Trusted Keys Message-ID: References: <01000177223f74d3-1eef7685-4a19-40d2-ace6-d4cd7f35579d-000000@email.amazonses.com> <1486cfe8-bc30-1266-12bd-0049f2b64820@forissier.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: Precedence: bulk List-ID: X-Mailing-List: keyrings@vger.kernel.org On Mon, Jan 25, 2021 at 02:47:38PM +0530, Sumit Garg wrote: > Hi Jarkko, > > On Fri, 22 Jan 2021 at 23:42, Jarkko Sakkinen wrote: > > > > On Thu, Jan 21, 2021 at 05:23:45PM +0100, Jerome Forissier wrote: > > > > > > > > > On 1/21/21 4:24 PM, Jarkko Sakkinen wrote: > > > > On Thu, Jan 21, 2021 at 05:07:42PM +0200, Jarkko Sakkinen wrote: > > > >> On Thu, Jan 21, 2021 at 09:44:07AM +0100, Jerome Forissier wrote: > > > >>> > > > >>> > > > >>> On 1/21/21 1:02 AM, Jarkko Sakkinen via OP-TEE wrote: > > > >>>> On Wed, Jan 20, 2021 at 12:53:28PM +0530, Sumit Garg wrote: > > > >>>>> On Wed, 20 Jan 2021 at 07:01, Jarkko Sakkinen wrote: > > > >>>>>> > > > >>>>>> On Tue, Jan 19, 2021 at 12:30:42PM +0200, Jarkko Sakkinen wrote: > > > >>>>>>> On Fri, Jan 15, 2021 at 11:32:31AM +0530, Sumit Garg wrote: > > > >>>>>>>> On Thu, 14 Jan 2021 at 07:35, Jarkko Sakkinen wrote: > > > >>>>>>>>> > > > >>>>>>>>> On Wed, Jan 13, 2021 at 04:47:00PM +0530, Sumit Garg wrote: > > > >>>>>>>>>> Hi Jarkko, > > > >>>>>>>>>> > > > >>>>>>>>>> On Mon, 11 Jan 2021 at 22:05, Jarkko Sakkinen wrote: > > > >>>>>>>>>>> > > > >>>>>>>>>>> On Tue, Nov 03, 2020 at 09:31:44PM +0530, Sumit Garg wrote: > > > >>>>>>>>>>>> Add support for TEE based trusted keys where TEE provides the functionality > > > >>>>>>>>>>>> to seal and unseal trusted keys using hardware unique key. > > > >>>>>>>>>>>> > > > >>>>>>>>>>>> Refer to Documentation/tee.txt for detailed information about TEE. > > > >>>>>>>>>>>> > > > >>>>>>>>>>>> Signed-off-by: Sumit Garg > > > >>>>>>>>>>> > > > >>>>>>>>>>> I haven't yet got QEMU environment working with aarch64, this produces > > > >>>>>>>>>>> just a blank screen: > > > >>>>>>>>>>> > > > >>>>>>>>>>> ./output/host/usr/bin/qemu-system-aarch64 -M virt -cpu cortex-a53 -smp 1 -kernel output/images/Image -initrd output/images/rootfs.cpio -serial stdio > > > >>>>>>>>>>> > > > >>>>>>>>>>> My BuildRoot fork for TPM and keyring testing is located over here: > > > >>>>>>>>>>> > > > >>>>>>>>>>> https://git.kernel.org/pub/scm/linux/kernel/git/jarkko/buildroot-tpmdd.git/ > > > >>>>>>>>>>> > > > >>>>>>>>>>> The "ARM version" is at this point in aarch64 branch. Over time I will > > > >>>>>>>>>>> define tpmdd-x86_64 and tpmdd-aarch64 boards and everything will be then > > > >>>>>>>>>>> in the master branch. > > > >>>>>>>>>>> > > > >>>>>>>>>>> To create identical images you just need to > > > >>>>>>>>>>> > > > >>>>>>>>>>> $ make tpmdd_defconfig && make > > > >>>>>>>>>>> > > > >>>>>>>>>>> Can you check if you see anything obviously wrong? I'm eager to test this > > > >>>>>>>>>>> patch set, and in bigger picture I really need to have ready to run > > > >>>>>>>>>>> aarch64 environment available. > > > >>>>>>>>>> > > > >>>>>>>>>> I would rather suggest you to follow steps listed here [1] as to test > > > >>>>>>>>>> this feature on Qemu aarch64 we need to build firmwares such as TF-A, > > > >>>>>>>>>> OP-TEE, UEFI etc. which are all integrated into OP-TEE Qemu build > > > >>>>>>>>>> system [2]. And then it would be easier to migrate them to your > > > >>>>>>>>>> buildroot environment as well. > > > >>>>>>>>>> > > > >>>>>>>>>> [1] https://lists.trustedfirmware.org/pipermail/op-tee/2020-May/000027.html > > > >>>>>>>>>> [2] https://optee.readthedocs.io/en/latest/building/devices/qemu.html#qemu-v8 > > > >>>>>>>>>> > > > >>>>>>>>>> -Sumit > > > >>>>>>>>> > > > >>>>>>>>> Can you provide 'keyctl_change'? Otherwise, the steps are easy to follow. > > > >>>>>>>>> > > > >>>>>>>> > > > >>>>>>>> $ cat keyctl_change > > > >>>>>>>> diff --git a/common.mk b/common.mk > > > >>>>>>>> index aeb7b41..663e528 100644 > > > >>>>>>>> --- a/common.mk > > > >>>>>>>> +++ b/common.mk > > > >>>>>>>> @@ -229,6 +229,7 @@ BR2_PACKAGE_OPTEE_TEST_SDK ?= $(OPTEE_OS_TA_DEV_KIT_DIR) > > > >>>>>>>> BR2_PACKAGE_OPTEE_TEST_SITE ?= $(OPTEE_TEST_PATH) > > > >>>>>>>> BR2_PACKAGE_STRACE ?= y > > > >>>>>>>> BR2_TARGET_GENERIC_GETTY_PORT ?= $(if > > > >>>>>>>> $(CFG_NW_CONSOLE_UART),ttyAMA$(CFG_NW_CONSOLE_UART),ttyAMA0) > > > >>>>>>>> +BR2_PACKAGE_KEYUTILS := y > > > >>>>>>>> > > > >>>>>>>> # All BR2_* variables from the makefile or the environment are appended to > > > >>>>>>>> # ../out-br/extra.conf. All values are quoted "..." except y and n. > > > >>>>>>>> diff --git a/kconfigs/qemu.conf b/kconfigs/qemu.conf > > > >>>>>>>> index 368c18a..832ab74 100644 > > > >>>>>>>> --- a/kconfigs/qemu.conf > > > >>>>>>>> +++ b/kconfigs/qemu.conf > > > >>>>>>>> @@ -20,3 +20,5 @@ CONFIG_9P_FS=y > > > >>>>>>>> CONFIG_9P_FS_POSIX_ACL=y > > > >>>>>>>> CONFIG_HW_RANDOM=y > > > >>>>>>>> CONFIG_HW_RANDOM_VIRTIO=y > > > >>>>>>>> +CONFIG_TRUSTED_KEYS=y > > > >>>>>>>> +CONFIG_ENCRYPTED_KEYS=y > > > >>>>>>>> > > > >>>>>>>>> After I've successfully tested 2/4, I'd suggest that you roll out one more > > > >>>>>>>>> version and CC the documentation patch to Elaine and Mini, and clearly > > > >>>>>>>>> remark in the commit message that TEE is a standard, with a link to the > > > >>>>>>>>> specification. > > > >>>>>>>>> > > > >>>>>>>> > > > >>>>>>>> Sure, I will roll out the next version after your testing. > > > >>>>>>> > > > >>>>>>> Thanks, I'll try this at instant, and give my feedback. > > > >>>>>> > > > >>>>>> I bump into this: > > > >>>>>> > > > >>>>>> $ make run-only > > > >>>>>> ln -sf /home/jarkko/devel/tpm/optee/build/../out-br/images/rootfs.cpio.gz /home/jarkko/devel/tpm/optee/build/../out/bin/ > > > >>>>>> ln: failed to create symbolic link '/home/jarkko/devel/tpm/optee/build/../out/bin/': No such file or directory > > > >>>>>> make: *** [Makefile:194: run-only] Error 1 > > > >>>>>> > > > >>>>> > > > >>>>> Could you check if the following directory tree is built after > > > >>>>> executing the below command? > > > >>>>> > > > >>>>> $ make -j`nproc` > > > >>>>> CFG_IN_TREE_EARLY_TAS=trusted_keys/f04a0fe7-1f5d-4b9b-abf7-619b85b4ce8c > > > >>>>> > > > >>>>> $ tree out/bin/ > > > >>>>> out/bin/ > > > >>>>> ├── bl1.bin -> /home/sumit/build/optee/build/../trusted-firmware-a/build/qemu/release/bl1.bin > > > >>>>> ├── bl2.bin -> /home/sumit/build/optee/build/../trusted-firmware-a/build/qemu/release/bl2.bin > > > >>>>> ├── bl31.bin -> > > > >>>>> /home/sumit/build/optee/build/../trusted-firmware-a/build/qemu/release/bl31.bin > > > >>>>> ├── bl32.bin -> > > > >>>>> /home/sumit/build/optee/build/../optee_os/out/arm/core/tee-header_v2.bin > > > >>>>> ├── bl32_extra1.bin -> > > > >>>>> /home/sumit/build/optee/build/../optee_os/out/arm/core/tee-pager_v2.bin > > > >>>>> ├── bl32_extra2.bin -> > > > >>>>> /home/sumit/build/optee/build/../optee_os/out/arm/core/tee-pageable_v2.bin > > > >>>>> ├── bl33.bin -> > > > >>>>> /home/sumit/build/optee/build/../edk2/Build/ArmVirtQemuKernel-AARCH64/RELEASE_GCC49/FV/QEMU_EFI.fd > > > >>>>> ├── Image -> /home/sumit/build/optee/build/../linux/arch/arm64/boot/Image > > > >>>>> └── rootfs.cpio.gz -> > > > >>>>> /home/sumit/build/optee/build/../out-br/images/rootfs.cpio.gz > > > >>>>> > > > >>>>> 0 directories, 9 files > > > >>>>> > > > >>>>> -Sumit > > > >>>> > > > >>>> I actually spotted a build error that was unnoticed last time: > > > >>>> > > > >>>> make[2]: Entering directory '/home/jarkko/devel/tpm/optee/edk2/BaseTools/Tests' > > > >>>> /bin/sh: 1: python: not found > > > >>>> > > > >>>> I'd prefer not to install Python2. It has been EOL over a year. > > > >>> > > > >>> AFAIK, everything should build fine with Python3. On my Ubuntu 20.04 > > > >>> machine, this is accomplished by installing package "python-is-python3" > > > >>> (after uninstalling "python-is-python2" if need be). > > > >>> > > > >>> $ ls -l /usr/bin/python > > > >>> lrwxrwxrwx 1 root root 7 Apr 15 2020 /usr/bin/python -> python3 > > > >> > > > >> Right, just found about this in unrelated context :-) [*] > > > >> > > > >> Hope this will work out... > > > >> > > > >> [*] https://github.com/surge-synthesizer/surge/pull/3655 > > > > > > > > Now I get > > > > > > > > Traceback (most recent call last): > > > > File "/home/jarkko/Projects/tpm/optee/edk2/BaseTools/Tests/RunTests.py", line 36, in > > > > allTests = GetAllTestsSuite() > > > > File "/home/jarkko/Projects/tpm/optee/edk2/BaseTools/Tests/RunTests.py", line 33, in GetAllTestsSuite > > > > return unittest.TestSuite([GetCTestSuite(), GetPythonTestSuite()]) > > > > File "/home/jarkko/Projects/tpm/optee/edk2/BaseTools/Tests/RunTests.py", line 25, in GetCTestSuite > > > > import CToolsTests > > > > File "/home/jarkko/Projects/tpm/optee/edk2/BaseTools/Tests/CToolsTests.py", line 22, in > > > > import TianoCompress > > > > File "/home/jarkko/Projects/tpm/optee/edk2/BaseTools/Tests/TianoCompress.py", line 69, in > > > > TheTestSuite = TestTools.MakeTheTestSuite(locals()) > > > > File "/home/jarkko/Projects/tpm/optee/edk2/BaseTools/Tests/TestTools.py", line 43, in MakeTheTestSuite > > > > for name, item in localItems.iteritems(): > > > > AttributeError: 'dict' object has no attribute 'iteritems' > > > > > > Right. Same here after removing all traces of Python2 from my system :-/ > > > > > > A couple of fixes are needed: > > > 1. EDK2 needs to be upgraded to tag or later [1] > > > 2. The PYTHON3_ENABLE environment variable needs to be set to TRUE [2] > > > > > > [1] https://github.com/OP-TEE/manifest/pull/177 > > > [2] https://github.com/OP-TEE/build/pull/450 > > > > BTW, Is to *really* impossible to test this with plain BuildRoot. It's > > obvious that this forks BR internally. > > > > I mean even if I get this working once, this will feels like a clumsy way > > to test Aarch64 regularly. I use BuildRoot extensively for x86 testing. And > > it would be nice to be able to start doing regular ARM testing. > > The main reason to guide you towards the OP-TEE build system is that > you will be able to build all the firmwares (TF-A, OP-TEE, edk2 etc.) > from source. If you don't need to rebuild those then I have prepared a > flash firmware binary blob for your testing (attached flash.bin). So > Qemu cmdline will look like: > > $ qemu-system-aarch64 -nographic -s -machine virt,secure=on -cpu > cortex-a57 -kernel out/bin/Image -no-acpi -append > 'console=ttyAMA0,38400 keep_bootcon root=/dev/vda2' -initrd > out/bin/rootfs.cpio.gz -smp 2 -m 1024 -bios flash.bin -d unimp > > Here you can use "Image" and "rootfs.cpio.gz" from your plain BR builds. > > Give it a try and let me know if this works for you. Hi, sorry something happened with Evolution that I don't understand and it just sent the message quoted without my response. Should always stick to mutt. There's a bug in BuildRoot that prevents me testing right now, when you use LINUX_OVERRIDE_SRCDIR. BR developers are looking into that. I'll test this once there's a resolution for that. /Jarkko From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jarkko Sakkinen To: op-tee@lists.trustedfirmware.org Subject: Re: [PATCH v8 2/4] KEYS: trusted: Introduce TEE based Trusted Keys Date: Wed, 27 Jan 2021 19:19:34 +0200 Message-ID: In-Reply-To: < > MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============1081558159756966896==" List-Id: --===============1081558159756966896== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable On Mon, Jan 25, 2021 at 02:47:38PM +0530, Sumit Garg wrote: > Hi Jarkko, >=20 > On Fri, 22 Jan 2021 at 23:42, Jarkko Sakkinen wrote: > > > > On Thu, Jan 21, 2021 at 05:23:45PM +0100, Jerome Forissier wrote: > > > > > > > > > On 1/21/21 4:24 PM, Jarkko Sakkinen wrote: > > > > On Thu, Jan 21, 2021 at 05:07:42PM +0200, Jarkko Sakkinen wrote: > > > >> On Thu, Jan 21, 2021 at 09:44:07AM +0100, Jerome Forissier wrote: > > > >>> > > > >>> > > > >>> On 1/21/21 1:02 AM, Jarkko Sakkinen via OP-TEE wrote: > > > >>>> On Wed, Jan 20, 2021 at 12:53:28PM +0530, Sumit Garg wrote: > > > >>>>> On Wed, 20 Jan 2021 at 07:01, Jarkko Sakkinen wrote: > > > >>>>>> > > > >>>>>> On Tue, Jan 19, 2021 at 12:30:42PM +0200, Jarkko Sakkinen wrote: > > > >>>>>>> On Fri, Jan 15, 2021 at 11:32:31AM +0530, Sumit Garg wrote: > > > >>>>>>>> On Thu, 14 Jan 2021 at 07:35, Jarkko Sakkinen wrote: > > > >>>>>>>>> > > > >>>>>>>>> On Wed, Jan 13, 2021 at 04:47:00PM +0530, Sumit Garg wrote: > > > >>>>>>>>>> Hi Jarkko, > > > >>>>>>>>>> > > > >>>>>>>>>> On Mon, 11 Jan 2021 at 22:05, Jarkko Sakkinen wrote: > > > >>>>>>>>>>> > > > >>>>>>>>>>> On Tue, Nov 03, 2020 at 09:31:44PM +0530, Sumit Garg wrote: > > > >>>>>>>>>>>> Add support for TEE based trusted keys where TEE provides = the functionality > > > >>>>>>>>>>>> to seal and unseal trusted keys using hardware unique key. > > > >>>>>>>>>>>> > > > >>>>>>>>>>>> Refer to Documentation/tee.txt for detailed information ab= out TEE. > > > >>>>>>>>>>>> > > > >>>>>>>>>>>> Signed-off-by: Sumit Garg > > > >>>>>>>>>>> > > > >>>>>>>>>>> I haven't yet got QEMU environment working with aarch64, th= is produces > > > >>>>>>>>>>> just a blank screen: > > > >>>>>>>>>>> > > > >>>>>>>>>>> ./output/host/usr/bin/qemu-system-aarch64 -M virt -cpu cort= ex-a53 -smp 1 -kernel output/images/Image -initrd output/images/rootfs.cpio -= serial stdio > > > >>>>>>>>>>> > > > >>>>>>>>>>> My BuildRoot fork for TPM and keyring testing is located ov= er here: > > > >>>>>>>>>>> > > > >>>>>>>>>>> https://git.kernel.org/pub/scm/linux/kernel/git/jarkko/buil= droot-tpmdd.git/ > > > >>>>>>>>>>> > > > >>>>>>>>>>> The "ARM version" is at this point in aarch64 branch. Over = time I will > > > >>>>>>>>>>> define tpmdd-x86_64 and tpmdd-aarch64 boards and everything= will be then > > > >>>>>>>>>>> in the master branch. > > > >>>>>>>>>>> > > > >>>>>>>>>>> To create identical images you just need to > > > >>>>>>>>>>> > > > >>>>>>>>>>> $ make tpmdd_defconfig && make > > > >>>>>>>>>>> > > > >>>>>>>>>>> Can you check if you see anything obviously wrong? I'm eage= r to test this > > > >>>>>>>>>>> patch set, and in bigger picture I really need to have read= y to run > > > >>>>>>>>>>> aarch64 environment available. > > > >>>>>>>>>> > > > >>>>>>>>>> I would rather suggest you to follow steps listed here [1] a= s to test > > > >>>>>>>>>> this feature on Qemu aarch64 we need to build firmwares such= as TF-A, > > > >>>>>>>>>> OP-TEE, UEFI etc. which are all integrated into OP-TEE Qemu = build > > > >>>>>>>>>> system [2]. And then it would be easier to migrate them to y= our > > > >>>>>>>>>> buildroot environment as well. > > > >>>>>>>>>> > > > >>>>>>>>>> [1] https://lists.trustedfirmware.org/pipermail/op-tee/2020-= May/000027.html > > > >>>>>>>>>> [2] https://optee.readthedocs.io/en/latest/building/devices/= qemu.html#qemu-v8 > > > >>>>>>>>>> > > > >>>>>>>>>> -Sumit > > > >>>>>>>>> > > > >>>>>>>>> Can you provide 'keyctl_change'? Otherwise, the steps are eas= y to follow. > > > >>>>>>>>> > > > >>>>>>>> > > > >>>>>>>> $ cat keyctl_change > > > >>>>>>>> diff --git a/common.mk b/common.mk > > > >>>>>>>> index aeb7b41..663e528 100644 > > > >>>>>>>> --- a/common.mk > > > >>>>>>>> +++ b/common.mk > > > >>>>>>>> @@ -229,6 +229,7 @@ BR2_PACKAGE_OPTEE_TEST_SDK ?=3D $(OPTEE_OS= _TA_DEV_KIT_DIR) > > > >>>>>>>> BR2_PACKAGE_OPTEE_TEST_SITE ?=3D $(OPTEE_TEST_PATH) > > > >>>>>>>> BR2_PACKAGE_STRACE ?=3D y > > > >>>>>>>> BR2_TARGET_GENERIC_GETTY_PORT ?=3D $(if > > > >>>>>>>> $(CFG_NW_CONSOLE_UART),ttyAMA$(CFG_NW_CONSOLE_UART),ttyAMA0) > > > >>>>>>>> +BR2_PACKAGE_KEYUTILS :=3D y > > > >>>>>>>> > > > >>>>>>>> # All BR2_* variables from the makefile or the environment ar= e appended to > > > >>>>>>>> # ../out-br/extra.conf. All values are quoted "..." except y = and n. > > > >>>>>>>> diff --git a/kconfigs/qemu.conf b/kconfigs/qemu.conf > > > >>>>>>>> index 368c18a..832ab74 100644 > > > >>>>>>>> --- a/kconfigs/qemu.conf > > > >>>>>>>> +++ b/kconfigs/qemu.conf > > > >>>>>>>> @@ -20,3 +20,5 @@ CONFIG_9P_FS=3Dy > > > >>>>>>>> CONFIG_9P_FS_POSIX_ACL=3Dy > > > >>>>>>>> CONFIG_HW_RANDOM=3Dy > > > >>>>>>>> CONFIG_HW_RANDOM_VIRTIO=3Dy > > > >>>>>>>> +CONFIG_TRUSTED_KEYS=3Dy > > > >>>>>>>> +CONFIG_ENCRYPTED_KEYS=3Dy > > > >>>>>>>> > > > >>>>>>>>> After I've successfully tested 2/4, I'd suggest that you roll= out one more > > > >>>>>>>>> version and CC the documentation patch to Elaine and Mini, an= d clearly > > > >>>>>>>>> remark in the commit message that TEE is a standard, with a l= ink to the > > > >>>>>>>>> specification. > > > >>>>>>>>> > > > >>>>>>>> > > > >>>>>>>> Sure, I will roll out the next version after your testing. > > > >>>>>>> > > > >>>>>>> Thanks, I'll try this at instant, and give my feedback. > > > >>>>>> > > > >>>>>> I bump into this: > > > >>>>>> > > > >>>>>> $ make run-only > > > >>>>>> ln -sf /home/jarkko/devel/tpm/optee/build/../out-br/images/rootf= s.cpio.gz /home/jarkko/devel/tpm/optee/build/../out/bin/ > > > >>>>>> ln: failed to create symbolic link '/home/jarkko/devel/tpm/optee= /build/../out/bin/': No such file or directory > > > >>>>>> make: *** [Makefile:194: run-only] Error 1 > > > >>>>>> > > > >>>>> > > > >>>>> Could you check if the following directory tree is built after > > > >>>>> executing the below command? > > > >>>>> > > > >>>>> $ make -j`nproc` > > > >>>>> CFG_IN_TREE_EARLY_TAS=3Dtrusted_keys/f04a0fe7-1f5d-4b9b-abf7-619b= 85b4ce8c > > > >>>>> > > > >>>>> $ tree out/bin/ > > > >>>>> out/bin/ > > > >>>>> =E2=94=9C=E2=94=80=E2=94=80 bl1.bin -> /home/sumit/build/optee/bu= ild/../trusted-firmware-a/build/qemu/release/bl1.bin > > > >>>>> =E2=94=9C=E2=94=80=E2=94=80 bl2.bin -> /home/sumit/build/optee/bu= ild/../trusted-firmware-a/build/qemu/release/bl2.bin > > > >>>>> =E2=94=9C=E2=94=80=E2=94=80 bl31.bin -> > > > >>>>> /home/sumit/build/optee/build/../trusted-firmware-a/build/qemu/re= lease/bl31.bin > > > >>>>> =E2=94=9C=E2=94=80=E2=94=80 bl32.bin -> > > > >>>>> /home/sumit/build/optee/build/../optee_os/out/arm/core/tee-header= _v2.bin > > > >>>>> =E2=94=9C=E2=94=80=E2=94=80 bl32_extra1.bin -> > > > >>>>> /home/sumit/build/optee/build/../optee_os/out/arm/core/tee-pager_= v2.bin > > > >>>>> =E2=94=9C=E2=94=80=E2=94=80 bl32_extra2.bin -> > > > >>>>> /home/sumit/build/optee/build/../optee_os/out/arm/core/tee-pageab= le_v2.bin > > > >>>>> =E2=94=9C=E2=94=80=E2=94=80 bl33.bin -> > > > >>>>> /home/sumit/build/optee/build/../edk2/Build/ArmVirtQemuKernel-AAR= CH64/RELEASE_GCC49/FV/QEMU_EFI.fd > > > >>>>> =E2=94=9C=E2=94=80=E2=94=80 Image -> /home/sumit/build/optee/buil= d/../linux/arch/arm64/boot/Image > > > >>>>> =E2=94=94=E2=94=80=E2=94=80 rootfs.cpio.gz -> > > > >>>>> /home/sumit/build/optee/build/../out-br/images/rootfs.cpio.gz > > > >>>>> > > > >>>>> 0 directories, 9 files > > > >>>>> > > > >>>>> -Sumit > > > >>>> > > > >>>> I actually spotted a build error that was unnoticed last time: > > > >>>> > > > >>>> make[2]: Entering directory '/home/jarkko/devel/tpm/optee/edk2/Bas= eTools/Tests' > > > >>>> /bin/sh: 1: python: not found > > > >>>> > > > >>>> I'd prefer not to install Python2. It has been EOL over a year. > > > >>> > > > >>> AFAIK, everything should build fine with Python3. On my Ubuntu 20.04 > > > >>> machine, this is accomplished by installing package "python-is-pyth= on3" > > > >>> (after uninstalling "python-is-python2" if need be). > > > >>> > > > >>> $ ls -l /usr/bin/python > > > >>> lrwxrwxrwx 1 root root 7 Apr 15 2020 /usr/bin/python -> python3 > > > >> > > > >> Right, just found about this in unrelated context :-) [*] > > > >> > > > >> Hope this will work out... > > > >> > > > >> [*] https://github.com/surge-synthesizer/surge/pull/3655 > > > > > > > > Now I get > > > > > > > > Traceback (most recent call last): > > > > File "/home/jarkko/Projects/tpm/optee/edk2/BaseTools/Tests/RunTests= .py", line 36, in > > > > allTests =3D GetAllTestsSuite() > > > > File "/home/jarkko/Projects/tpm/optee/edk2/BaseTools/Tests/RunTests= .py", line 33, in GetAllTestsSuite > > > > return unittest.TestSuite([GetCTestSuite(), GetPythonTestSuite()]) > > > > File "/home/jarkko/Projects/tpm/optee/edk2/BaseTools/Tests/RunTests= .py", line 25, in GetCTestSuite > > > > import CToolsTests > > > > File "/home/jarkko/Projects/tpm/optee/edk2/BaseTools/Tests/CToolsTe= sts.py", line 22, in > > > > import TianoCompress > > > > File "/home/jarkko/Projects/tpm/optee/edk2/BaseTools/Tests/TianoCom= press.py", line 69, in > > > > TheTestSuite =3D TestTools.MakeTheTestSuite(locals()) > > > > File "/home/jarkko/Projects/tpm/optee/edk2/BaseTools/Tests/TestTool= s.py", line 43, in MakeTheTestSuite > > > > for name, item in localItems.iteritems(): > > > > AttributeError: 'dict' object has no attribute 'iteritems' > > > > > > Right. Same here after removing all traces of Python2 from my system :-/ > > > > > > A couple of fixes are needed: > > > 1. EDK2 needs to be upgraded to tag or later [1] > > > 2. The PYTHON3_ENABLE environment variable needs to be set to TRUE [2] > > > > > > [1] https://github.com/OP-TEE/manifest/pull/177 > > > [2] https://github.com/OP-TEE/build/pull/450 > > > > BTW, Is to *really* impossible to test this with plain BuildRoot. It's > > obvious that this forks BR internally. > > > > I mean even if I get this working once, this will feels like a clumsy way > > to test Aarch64 regularly. I use BuildRoot extensively for x86 testing. A= nd > > it would be nice to be able to start doing regular ARM testing. >=20 > The main reason to guide you towards the OP-TEE build system is that > you will be able to build all the firmwares (TF-A, OP-TEE, edk2 etc.) > from source. If you don't need to rebuild those then I have prepared a > flash firmware binary blob for your testing (attached flash.bin). So > Qemu cmdline will look like: >=20 > $ qemu-system-aarch64 -nographic -s -machine virt,secure=3Don -cpu > cortex-a57 -kernel out/bin/Image -no-acpi -append > 'console=3DttyAMA0,38400 keep_bootcon root=3D/dev/vda2' -initrd > out/bin/rootfs.cpio.gz -smp 2 -m 1024 -bios flash.bin -d unimp >=20 > Here you can use "Image" and "rootfs.cpio.gz" from your plain BR builds. >=20 > Give it a try and let me know if this works for you. Hi, sorry something happened with Evolution that I don't understand and it just sent the message quoted without my response. Should always stick to mutt. There's a bug in BuildRoot that prevents me testing right now, when you use LINUX_OVERRIDE_SRCDIR. BR developers are looking into that. I'll test this once there's a resolution for that. /Jarkko --===============1081558159756966896==-- 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 X-Spam-Level: X-Spam-Status: No, score=-19.3 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI, MENTIONS_GIT_HOSTING,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 19BCDC433DB for ; Wed, 27 Jan 2021 17:21:03 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 915A764DA0 for ; Wed, 27 Jan 2021 17:21:02 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 915A764DA0 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References:Message-ID: Subject:To:From:Date:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=16QuXQxHOfklZcwyrIlxCCvlOcnSGbkJRJRVeh8/1n8=; b=RQBZh47ee8ahK/FQHf1tLKCAz gRuwPpDYUf2WUuSm3MzdH+pDlK4L7UyvsCUCT9FtW5eDmd5o/hK0WTLP8TiCMRkDBp6+L6s2FzHk/ kK+zHDh5xzwvbcONdywjkSmtAESAqj33FjNM+/qcSYNbXwAyL3NP9YM/x5mag2E4MCDLrJnF9A18Z qZBhu/AyqfEyxEDkOaZMUZNwISqOXBdv7gG2wVC4v8QgnHPjtKWQZt67zuxMTxX+efarVmDDdD7Sz 7MUgl3yOX3e3jo2wDoJQcSHbsjUE7Ij3mbj5w5UrETrp/VKUWPPFDE5vjdQ3U/aAFJwbmZPZhk9Vg vReEGihbA==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1l4oTm-0004Ej-AX; Wed, 27 Jan 2021 17:19:42 +0000 Received: from mail.kernel.org ([198.145.29.99]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1l4oTj-0004Dc-Gt for linux-arm-kernel@lists.infradead.org; Wed, 27 Jan 2021 17:19:40 +0000 Received: by mail.kernel.org (Postfix) with ESMTPSA id 690DB60187; Wed, 27 Jan 2021 17:19:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1611767978; bh=34HKEYL8Uu56NwWdQHHa7lTy6DQWGDrOdbZLSeUzLas=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=CcfFkYALbXpYIR968k4K6VSsCwjYIKLLVO+TvoC+Uwp/6Mcl9+I7o6GUH6bpcgxzr xjx6Ukd7k7EPj4FuuZorAxyP7AEZms03pxIi/r+8XCmB29XBl6kYFT+FuIFFNOu1Hi 8p2FFSNJTmgymdMUCY5weC7GKTkOGoQh8J2R32PZ/9E/yPS7KCOa01BGz59E2q0sX8 npXkHmlqBK9FwbDxsYK0CKrc9u4yjfxAfuZ9xhJzmupMsDW1DUFhGQnHhKc+OIqBDA EjsYtWaWd26MsVU1+Rmu42B8MqRdBh3/WqBKDL4SYU2uQ6YyRSRqmeBhV5+GyaMIra zQw1qZ9+a5YZQ== Date: Wed, 27 Jan 2021 19:19:34 +0200 From: Jarkko Sakkinen To: Sumit Garg Subject: Re: [PATCH v8 2/4] KEYS: trusted: Introduce TEE based Trusted Keys Message-ID: References: <01000177223f74d3-1eef7685-4a19-40d2-ace6-d4cd7f35579d-000000@email.amazonses.com> <1486cfe8-bc30-1266-12bd-0049f2b64820@forissier.org> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210127_121939_750564_41DFDDDA X-CRM114-Status: GOOD ( 45.47 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Daniel Thompson , Jerome Forissier , Jonathan Corbet , James Bottomley , Janne Karhunen , Linux Doc Mailing List , James Morris , Mimi Zohar , Linux Kernel Mailing List , David Howells , Casey Schaufler , "open list:SECURITY SUBSYSTEM" , op-tee@lists.trustedfirmware.org, "open list:ASYMMETRIC KEYS" , Jarkko Sakkinen , Luke Hinds , linux-integrity@vger.kernel.org, linux-arm-kernel , "Serge E. Hallyn" 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 T24gTW9uLCBKYW4gMjUsIDIwMjEgYXQgMDI6NDc6MzhQTSArMDUzMCwgU3VtaXQgR2FyZyB3cm90 ZToKPiBIaSBKYXJra28sCj4gCj4gT24gRnJpLCAyMiBKYW4gMjAyMSBhdCAyMzo0MiwgSmFya2tv IFNha2tpbmVuIDxqYXJra29Aa2VybmVsLm9yZz4gd3JvdGU6Cj4gPgo+ID4gT24gVGh1LCBKYW4g MjEsIDIwMjEgYXQgMDU6MjM6NDVQTSArMDEwMCwgSmVyb21lIEZvcmlzc2llciB3cm90ZToKPiA+ ID4KPiA+ID4KPiA+ID4gT24gMS8yMS8yMSA0OjI0IFBNLCBKYXJra28gU2Fra2luZW4gd3JvdGU6 Cj4gPiA+ID4gT24gVGh1LCBKYW4gMjEsIDIwMjEgYXQgMDU6MDc6NDJQTSArMDIwMCwgSmFya2tv IFNha2tpbmVuIHdyb3RlOgo+ID4gPiA+PiBPbiBUaHUsIEphbiAyMSwgMjAyMSBhdCAwOTo0NDow N0FNICswMTAwLCBKZXJvbWUgRm9yaXNzaWVyIHdyb3RlOgo+ID4gPiA+Pj4KPiA+ID4gPj4+Cj4g PiA+ID4+PiBPbiAxLzIxLzIxIDE6MDIgQU0sIEphcmtrbyBTYWtraW5lbiB2aWEgT1AtVEVFIHdy b3RlOgo+ID4gPiA+Pj4+IE9uIFdlZCwgSmFuIDIwLCAyMDIxIGF0IDEyOjUzOjI4UE0gKzA1MzAs IFN1bWl0IEdhcmcgd3JvdGU6Cj4gPiA+ID4+Pj4+IE9uIFdlZCwgMjAgSmFuIDIwMjEgYXQgMDc6 MDEsIEphcmtrbyBTYWtraW5lbiA8amFya2tvQGtlcm5lbC5vcmc+IHdyb3RlOgo+ID4gPiA+Pj4+ Pj4KPiA+ID4gPj4+Pj4+IE9uIFR1ZSwgSmFuIDE5LCAyMDIxIGF0IDEyOjMwOjQyUE0gKzAyMDAs IEphcmtrbyBTYWtraW5lbiB3cm90ZToKPiA+ID4gPj4+Pj4+PiBPbiBGcmksIEphbiAxNSwgMjAy MSBhdCAxMTozMjozMUFNICswNTMwLCBTdW1pdCBHYXJnIHdyb3RlOgo+ID4gPiA+Pj4+Pj4+PiBP biBUaHUsIDE0IEphbiAyMDIxIGF0IDA3OjM1LCBKYXJra28gU2Fra2luZW4gPGphcmtrb0BrZXJu ZWwub3JnPiB3cm90ZToKPiA+ID4gPj4+Pj4+Pj4+Cj4gPiA+ID4+Pj4+Pj4+PiBPbiBXZWQsIEph biAxMywgMjAyMSBhdCAwNDo0NzowMFBNICswNTMwLCBTdW1pdCBHYXJnIHdyb3RlOgo+ID4gPiA+ Pj4+Pj4+Pj4+IEhpIEphcmtrbywKPiA+ID4gPj4+Pj4+Pj4+Pgo+ID4gPiA+Pj4+Pj4+Pj4+IE9u IE1vbiwgMTEgSmFuIDIwMjEgYXQgMjI6MDUsIEphcmtrbyBTYWtraW5lbiA8amFya2tvQGtlcm5l bC5vcmc+IHdyb3RlOgo+ID4gPiA+Pj4+Pj4+Pj4+Pgo+ID4gPiA+Pj4+Pj4+Pj4+PiBPbiBUdWUs IE5vdiAwMywgMjAyMCBhdCAwOTozMTo0NFBNICswNTMwLCBTdW1pdCBHYXJnIHdyb3RlOgo+ID4g PiA+Pj4+Pj4+Pj4+Pj4gQWRkIHN1cHBvcnQgZm9yIFRFRSBiYXNlZCB0cnVzdGVkIGtleXMgd2hl cmUgVEVFIHByb3ZpZGVzIHRoZSBmdW5jdGlvbmFsaXR5Cj4gPiA+ID4+Pj4+Pj4+Pj4+PiB0byBz ZWFsIGFuZCB1bnNlYWwgdHJ1c3RlZCBrZXlzIHVzaW5nIGhhcmR3YXJlIHVuaXF1ZSBrZXkuCj4g PiA+ID4+Pj4+Pj4+Pj4+Pgo+ID4gPiA+Pj4+Pj4+Pj4+Pj4gUmVmZXIgdG8gRG9jdW1lbnRhdGlv bi90ZWUudHh0IGZvciBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCBURUUuCj4gPiA+ID4+Pj4+ Pj4+Pj4+Pgo+ID4gPiA+Pj4+Pj4+Pj4+Pj4gU2lnbmVkLW9mZi1ieTogU3VtaXQgR2FyZyA8c3Vt aXQuZ2FyZ0BsaW5hcm8ub3JnPgo+ID4gPiA+Pj4+Pj4+Pj4+Pgo+ID4gPiA+Pj4+Pj4+Pj4+PiBJ IGhhdmVuJ3QgeWV0IGdvdCBRRU1VIGVudmlyb25tZW50IHdvcmtpbmcgd2l0aCBhYXJjaDY0LCB0 aGlzIHByb2R1Y2VzCj4gPiA+ID4+Pj4+Pj4+Pj4+IGp1c3QgYSBibGFuayBzY3JlZW46Cj4gPiA+ ID4+Pj4+Pj4+Pj4+Cj4gPiA+ID4+Pj4+Pj4+Pj4+IC4vb3V0cHV0L2hvc3QvdXNyL2Jpbi9xZW11 LXN5c3RlbS1hYXJjaDY0IC1NIHZpcnQgLWNwdSBjb3J0ZXgtYTUzIC1zbXAgMSAta2VybmVsIG91 dHB1dC9pbWFnZXMvSW1hZ2UgLWluaXRyZCBvdXRwdXQvaW1hZ2VzL3Jvb3Rmcy5jcGlvIC1zZXJp YWwgc3RkaW8KPiA+ID4gPj4+Pj4+Pj4+Pj4KPiA+ID4gPj4+Pj4+Pj4+Pj4gTXkgQnVpbGRSb290 IGZvcmsgZm9yIFRQTSBhbmQga2V5cmluZyB0ZXN0aW5nIGlzIGxvY2F0ZWQgb3ZlciBoZXJlOgo+ ID4gPiA+Pj4+Pj4+Pj4+Pgo+ID4gPiA+Pj4+Pj4+Pj4+PiBodHRwczovL2dpdC5rZXJuZWwub3Jn L3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9qYXJra28vYnVpbGRyb290LXRwbWRkLmdpdC8KPiA+ ID4gPj4+Pj4+Pj4+Pj4KPiA+ID4gPj4+Pj4+Pj4+Pj4gVGhlICJBUk0gdmVyc2lvbiIgaXMgYXQg dGhpcyBwb2ludCBpbiBhYXJjaDY0IGJyYW5jaC4gT3ZlciB0aW1lIEkgd2lsbAo+ID4gPiA+Pj4+ Pj4+Pj4+PiBkZWZpbmUgdHBtZGQteDg2XzY0IGFuZCB0cG1kZC1hYXJjaDY0IGJvYXJkcyBhbmQg ZXZlcnl0aGluZyB3aWxsIGJlIHRoZW4KPiA+ID4gPj4+Pj4+Pj4+Pj4gaW4gdGhlIG1hc3RlciBi cmFuY2guCj4gPiA+ID4+Pj4+Pj4+Pj4+Cj4gPiA+ID4+Pj4+Pj4+Pj4+IFRvIGNyZWF0ZSBpZGVu dGljYWwgaW1hZ2VzIHlvdSBqdXN0IG5lZWQgdG8KPiA+ID4gPj4+Pj4+Pj4+Pj4KPiA+ID4gPj4+ Pj4+Pj4+Pj4gJCBtYWtlIHRwbWRkX2RlZmNvbmZpZyAmJiBtYWtlCj4gPiA+ID4+Pj4+Pj4+Pj4+ Cj4gPiA+ID4+Pj4+Pj4+Pj4+IENhbiB5b3UgY2hlY2sgaWYgeW91IHNlZSBhbnl0aGluZyBvYnZp b3VzbHkgd3Jvbmc/IEknbSBlYWdlciB0byB0ZXN0IHRoaXMKPiA+ID4gPj4+Pj4+Pj4+Pj4gcGF0 Y2ggc2V0LCBhbmQgaW4gYmlnZ2VyIHBpY3R1cmUgSSByZWFsbHkgbmVlZCB0byBoYXZlIHJlYWR5 IHRvIHJ1bgo+ID4gPiA+Pj4+Pj4+Pj4+PiBhYXJjaDY0IGVudmlyb25tZW50IGF2YWlsYWJsZS4K PiA+ID4gPj4+Pj4+Pj4+Pgo+ID4gPiA+Pj4+Pj4+Pj4+IEkgd291bGQgcmF0aGVyIHN1Z2dlc3Qg eW91IHRvIGZvbGxvdyBzdGVwcyBsaXN0ZWQgaGVyZSBbMV0gYXMgdG8gdGVzdAo+ID4gPiA+Pj4+ Pj4+Pj4+IHRoaXMgZmVhdHVyZSBvbiBRZW11IGFhcmNoNjQgd2UgbmVlZCB0byBidWlsZCBmaXJt d2FyZXMgc3VjaCBhcyBURi1BLAo+ID4gPiA+Pj4+Pj4+Pj4+IE9QLVRFRSwgVUVGSSBldGMuIHdo aWNoIGFyZSBhbGwgaW50ZWdyYXRlZCBpbnRvIE9QLVRFRSBRZW11IGJ1aWxkCj4gPiA+ID4+Pj4+ Pj4+Pj4gc3lzdGVtIFsyXS4gQW5kIHRoZW4gaXQgd291bGQgYmUgZWFzaWVyIHRvIG1pZ3JhdGUg dGhlbSB0byB5b3VyCj4gPiA+ID4+Pj4+Pj4+Pj4gYnVpbGRyb290IGVudmlyb25tZW50IGFzIHdl bGwuCj4gPiA+ID4+Pj4+Pj4+Pj4KPiA+ID4gPj4+Pj4+Pj4+PiBbMV0gaHR0cHM6Ly9saXN0cy50 cnVzdGVkZmlybXdhcmUub3JnL3BpcGVybWFpbC9vcC10ZWUvMjAyMC1NYXkvMDAwMDI3Lmh0bWwK PiA+ID4gPj4+Pj4+Pj4+PiBbMl0gaHR0cHM6Ly9vcHRlZS5yZWFkdGhlZG9jcy5pby9lbi9sYXRl c3QvYnVpbGRpbmcvZGV2aWNlcy9xZW11Lmh0bWwjcWVtdS12OAo+ID4gPiA+Pj4+Pj4+Pj4+Cj4g PiA+ID4+Pj4+Pj4+Pj4gLVN1bWl0Cj4gPiA+ID4+Pj4+Pj4+Pgo+ID4gPiA+Pj4+Pj4+Pj4gQ2Fu IHlvdSBwcm92aWRlICdrZXljdGxfY2hhbmdlJz8gT3RoZXJ3aXNlLCB0aGUgc3RlcHMgYXJlIGVh c3kgdG8gZm9sbG93Lgo+ID4gPiA+Pj4+Pj4+Pj4KPiA+ID4gPj4+Pj4+Pj4KPiA+ID4gPj4+Pj4+ Pj4gJCBjYXQga2V5Y3RsX2NoYW5nZQo+ID4gPiA+Pj4+Pj4+PiBkaWZmIC0tZ2l0IGEvY29tbW9u Lm1rIGIvY29tbW9uLm1rCj4gPiA+ID4+Pj4+Pj4+IGluZGV4IGFlYjdiNDEuLjY2M2U1MjggMTAw NjQ0Cj4gPiA+ID4+Pj4+Pj4+IC0tLSBhL2NvbW1vbi5tawo+ID4gPiA+Pj4+Pj4+PiArKysgYi9j b21tb24ubWsKPiA+ID4gPj4+Pj4+Pj4gQEAgLTIyOSw2ICsyMjksNyBAQCBCUjJfUEFDS0FHRV9P UFRFRV9URVNUX1NESyA/PSAkKE9QVEVFX09TX1RBX0RFVl9LSVRfRElSKQo+ID4gPiA+Pj4+Pj4+ PiAgQlIyX1BBQ0tBR0VfT1BURUVfVEVTVF9TSVRFID89ICQoT1BURUVfVEVTVF9QQVRIKQo+ID4g PiA+Pj4+Pj4+PiAgQlIyX1BBQ0tBR0VfU1RSQUNFID89IHkKPiA+ID4gPj4+Pj4+Pj4gIEJSMl9U QVJHRVRfR0VORVJJQ19HRVRUWV9QT1JUID89ICQoaWYKPiA+ID4gPj4+Pj4+Pj4gJChDRkdfTldf Q09OU09MRV9VQVJUKSx0dHlBTUEkKENGR19OV19DT05TT0xFX1VBUlQpLHR0eUFNQTApCj4gPiA+ ID4+Pj4+Pj4+ICtCUjJfUEFDS0FHRV9LRVlVVElMUyA6PSB5Cj4gPiA+ID4+Pj4+Pj4+Cj4gPiA+ ID4+Pj4+Pj4+ICAjIEFsbCBCUjJfKiB2YXJpYWJsZXMgZnJvbSB0aGUgbWFrZWZpbGUgb3IgdGhl IGVudmlyb25tZW50IGFyZSBhcHBlbmRlZCB0bwo+ID4gPiA+Pj4+Pj4+PiAgIyAuLi9vdXQtYnIv ZXh0cmEuY29uZi4gQWxsIHZhbHVlcyBhcmUgcXVvdGVkICIuLi4iIGV4Y2VwdCB5IGFuZCBuLgo+ ID4gPiA+Pj4+Pj4+PiBkaWZmIC0tZ2l0IGEva2NvbmZpZ3MvcWVtdS5jb25mIGIva2NvbmZpZ3Mv cWVtdS5jb25mCj4gPiA+ID4+Pj4+Pj4+IGluZGV4IDM2OGMxOGEuLjgzMmFiNzQgMTAwNjQ0Cj4g PiA+ID4+Pj4+Pj4+IC0tLSBhL2tjb25maWdzL3FlbXUuY29uZgo+ID4gPiA+Pj4+Pj4+PiArKysg Yi9rY29uZmlncy9xZW11LmNvbmYKPiA+ID4gPj4+Pj4+Pj4gQEAgLTIwLDMgKzIwLDUgQEAgQ09O RklHXzlQX0ZTPXkKPiA+ID4gPj4+Pj4+Pj4gIENPTkZJR185UF9GU19QT1NJWF9BQ0w9eQo+ID4g PiA+Pj4+Pj4+PiAgQ09ORklHX0hXX1JBTkRPTT15Cj4gPiA+ID4+Pj4+Pj4+ICBDT05GSUdfSFdf UkFORE9NX1ZJUlRJTz15Cj4gPiA+ID4+Pj4+Pj4+ICtDT05GSUdfVFJVU1RFRF9LRVlTPXkKPiA+ ID4gPj4+Pj4+Pj4gK0NPTkZJR19FTkNSWVBURURfS0VZUz15Cj4gPiA+ID4+Pj4+Pj4+Cj4gPiA+ ID4+Pj4+Pj4+PiBBZnRlciBJJ3ZlIHN1Y2Nlc3NmdWxseSB0ZXN0ZWQgMi80LCBJJ2Qgc3VnZ2Vz dCB0aGF0IHlvdSByb2xsIG91dCBvbmUgbW9yZQo+ID4gPiA+Pj4+Pj4+Pj4gdmVyc2lvbiBhbmQg Q0MgdGhlIGRvY3VtZW50YXRpb24gcGF0Y2ggdG8gRWxhaW5lIGFuZCBNaW5pLCBhbmQgY2xlYXJs eQo+ID4gPiA+Pj4+Pj4+Pj4gcmVtYXJrIGluIHRoZSBjb21taXQgbWVzc2FnZSB0aGF0IFRFRSBp cyBhIHN0YW5kYXJkLCB3aXRoIGEgbGluayB0byB0aGUKPiA+ID4gPj4+Pj4+Pj4+IHNwZWNpZmlj YXRpb24uCj4gPiA+ID4+Pj4+Pj4+Pgo+ID4gPiA+Pj4+Pj4+Pgo+ID4gPiA+Pj4+Pj4+PiBTdXJl LCBJIHdpbGwgcm9sbCBvdXQgdGhlIG5leHQgdmVyc2lvbiBhZnRlciB5b3VyIHRlc3RpbmcuCj4g PiA+ID4+Pj4+Pj4KPiA+ID4gPj4+Pj4+PiBUaGFua3MsIEknbGwgdHJ5IHRoaXMgYXQgaW5zdGFu dCwgYW5kIGdpdmUgbXkgZmVlZGJhY2suCj4gPiA+ID4+Pj4+Pgo+ID4gPiA+Pj4+Pj4gSSBidW1w IGludG8gdGhpczoKPiA+ID4gPj4+Pj4+Cj4gPiA+ID4+Pj4+PiAkIG1ha2UgcnVuLW9ubHkKPiA+ ID4gPj4+Pj4+IGxuIC1zZiAvaG9tZS9qYXJra28vZGV2ZWwvdHBtL29wdGVlL2J1aWxkLy4uL291 dC1ici9pbWFnZXMvcm9vdGZzLmNwaW8uZ3ogL2hvbWUvamFya2tvL2RldmVsL3RwbS9vcHRlZS9i dWlsZC8uLi9vdXQvYmluLwo+ID4gPiA+Pj4+Pj4gbG46IGZhaWxlZCB0byBjcmVhdGUgc3ltYm9s aWMgbGluayAnL2hvbWUvamFya2tvL2RldmVsL3RwbS9vcHRlZS9idWlsZC8uLi9vdXQvYmluLyc6 IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKPiA+ID4gPj4+Pj4+IG1ha2U6ICoqKiBbTWFrZWZp bGU6MTk0OiBydW4tb25seV0gRXJyb3IgMQo+ID4gPiA+Pj4+Pj4KPiA+ID4gPj4+Pj4KPiA+ID4g Pj4+Pj4gQ291bGQgeW91IGNoZWNrIGlmIHRoZSBmb2xsb3dpbmcgZGlyZWN0b3J5IHRyZWUgaXMg YnVpbHQgYWZ0ZXIKPiA+ID4gPj4+Pj4gZXhlY3V0aW5nIHRoZSBiZWxvdyBjb21tYW5kPwo+ID4g PiA+Pj4+Pgo+ID4gPiA+Pj4+PiAkIG1ha2UgLWpgbnByb2NgCj4gPiA+ID4+Pj4+IENGR19JTl9U UkVFX0VBUkxZX1RBUz10cnVzdGVkX2tleXMvZjA0YTBmZTctMWY1ZC00YjliLWFiZjctNjE5Yjg1 YjRjZThjCj4gPiA+ID4+Pj4+Cj4gPiA+ID4+Pj4+ICQgdHJlZSBvdXQvYmluLwo+ID4gPiA+Pj4+ PiBvdXQvYmluLwo+ID4gPiA+Pj4+PiDilJzilIDilIAgYmwxLmJpbiAtPiAvaG9tZS9zdW1pdC9i dWlsZC9vcHRlZS9idWlsZC8uLi90cnVzdGVkLWZpcm13YXJlLWEvYnVpbGQvcWVtdS9yZWxlYXNl L2JsMS5iaW4KPiA+ID4gPj4+Pj4g4pSc4pSA4pSAIGJsMi5iaW4gLT4gL2hvbWUvc3VtaXQvYnVp bGQvb3B0ZWUvYnVpbGQvLi4vdHJ1c3RlZC1maXJtd2FyZS1hL2J1aWxkL3FlbXUvcmVsZWFzZS9i bDIuYmluCj4gPiA+ID4+Pj4+IOKUnOKUgOKUgCBibDMxLmJpbiAtPgo+ID4gPiA+Pj4+PiAvaG9t ZS9zdW1pdC9idWlsZC9vcHRlZS9idWlsZC8uLi90cnVzdGVkLWZpcm13YXJlLWEvYnVpbGQvcWVt dS9yZWxlYXNlL2JsMzEuYmluCj4gPiA+ID4+Pj4+IOKUnOKUgOKUgCBibDMyLmJpbiAtPgo+ID4g PiA+Pj4+PiAvaG9tZS9zdW1pdC9idWlsZC9vcHRlZS9idWlsZC8uLi9vcHRlZV9vcy9vdXQvYXJt L2NvcmUvdGVlLWhlYWRlcl92Mi5iaW4KPiA+ID4gPj4+Pj4g4pSc4pSA4pSAIGJsMzJfZXh0cmEx LmJpbiAtPgo+ID4gPiA+Pj4+PiAvaG9tZS9zdW1pdC9idWlsZC9vcHRlZS9idWlsZC8uLi9vcHRl ZV9vcy9vdXQvYXJtL2NvcmUvdGVlLXBhZ2VyX3YyLmJpbgo+ID4gPiA+Pj4+PiDilJzilIDilIAg YmwzMl9leHRyYTIuYmluIC0+Cj4gPiA+ID4+Pj4+IC9ob21lL3N1bWl0L2J1aWxkL29wdGVlL2J1 aWxkLy4uL29wdGVlX29zL291dC9hcm0vY29yZS90ZWUtcGFnZWFibGVfdjIuYmluCj4gPiA+ID4+ Pj4+IOKUnOKUgOKUgCBibDMzLmJpbiAtPgo+ID4gPiA+Pj4+PiAvaG9tZS9zdW1pdC9idWlsZC9v cHRlZS9idWlsZC8uLi9lZGsyL0J1aWxkL0FybVZpcnRRZW11S2VybmVsLUFBUkNINjQvUkVMRUFT RV9HQ0M0OS9GVi9RRU1VX0VGSS5mZAo+ID4gPiA+Pj4+PiDilJzilIDilIAgSW1hZ2UgLT4gL2hv bWUvc3VtaXQvYnVpbGQvb3B0ZWUvYnVpbGQvLi4vbGludXgvYXJjaC9hcm02NC9ib290L0ltYWdl Cj4gPiA+ID4+Pj4+IOKUlOKUgOKUgCByb290ZnMuY3Bpby5neiAtPgo+ID4gPiA+Pj4+PiAvaG9t ZS9zdW1pdC9idWlsZC9vcHRlZS9idWlsZC8uLi9vdXQtYnIvaW1hZ2VzL3Jvb3Rmcy5jcGlvLmd6 Cj4gPiA+ID4+Pj4+Cj4gPiA+ID4+Pj4+IDAgZGlyZWN0b3JpZXMsIDkgZmlsZXMKPiA+ID4gPj4+ Pj4KPiA+ID4gPj4+Pj4gLVN1bWl0Cj4gPiA+ID4+Pj4KPiA+ID4gPj4+PiBJIGFjdHVhbGx5IHNw b3R0ZWQgYSBidWlsZCBlcnJvciB0aGF0IHdhcyB1bm5vdGljZWQgbGFzdCB0aW1lOgo+ID4gPiA+ Pj4+Cj4gPiA+ID4+Pj4gbWFrZVsyXTogRW50ZXJpbmcgZGlyZWN0b3J5ICcvaG9tZS9qYXJra28v ZGV2ZWwvdHBtL29wdGVlL2VkazIvQmFzZVRvb2xzL1Rlc3RzJwo+ID4gPiA+Pj4+IC9iaW4vc2g6 IDE6IHB5dGhvbjogbm90IGZvdW5kCj4gPiA+ID4+Pj4KPiA+ID4gPj4+PiBJJ2QgcHJlZmVyIG5v dCB0byBpbnN0YWxsIFB5dGhvbjIuIEl0IGhhcyBiZWVuIEVPTCBvdmVyIGEgeWVhci4KPiA+ID4g Pj4+Cj4gPiA+ID4+PiBBRkFJSywgZXZlcnl0aGluZyBzaG91bGQgYnVpbGQgZmluZSB3aXRoIFB5 dGhvbjMuIE9uIG15IFVidW50dSAyMC4wNAo+ID4gPiA+Pj4gbWFjaGluZSwgdGhpcyBpcyBhY2Nv bXBsaXNoZWQgYnkgaW5zdGFsbGluZyBwYWNrYWdlICJweXRob24taXMtcHl0aG9uMyIKPiA+ID4g Pj4+IChhZnRlciB1bmluc3RhbGxpbmcgInB5dGhvbi1pcy1weXRob24yIiBpZiBuZWVkIGJlKS4K PiA+ID4gPj4+Cj4gPiA+ID4+PiAkIGxzIC1sIC91c3IvYmluL3B5dGhvbgo+ID4gPiA+Pj4gbHJ3 eHJ3eHJ3eCAxIHJvb3Qgcm9vdCA3IEFwciAxNSAgMjAyMCAvdXNyL2Jpbi9weXRob24gLT4gcHl0 aG9uMwo+ID4gPiA+Pgo+ID4gPiA+PiBSaWdodCwganVzdCBmb3VuZCBhYm91dCB0aGlzIGluIHVu cmVsYXRlZCBjb250ZXh0IDotKSBbKl0KPiA+ID4gPj4KPiA+ID4gPj4gSG9wZSB0aGlzIHdpbGwg d29yayBvdXQuLi4KPiA+ID4gPj4KPiA+ID4gPj4gWypdIGh0dHBzOi8vZ2l0aHViLmNvbS9zdXJn ZS1zeW50aGVzaXplci9zdXJnZS9wdWxsLzM2NTUKPiA+ID4gPgo+ID4gPiA+IE5vdyBJIGdldAo+ ID4gPiA+Cj4gPiA+ID4gVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgo+ID4gPiA+ ICAgRmlsZSAiL2hvbWUvamFya2tvL1Byb2plY3RzL3RwbS9vcHRlZS9lZGsyL0Jhc2VUb29scy9U ZXN0cy9SdW5UZXN0cy5weSIsIGxpbmUgMzYsIGluIDxtb2R1bGU+Cj4gPiA+ID4gICAgIGFsbFRl c3RzID0gR2V0QWxsVGVzdHNTdWl0ZSgpCj4gPiA+ID4gICBGaWxlICIvaG9tZS9qYXJra28vUHJv amVjdHMvdHBtL29wdGVlL2VkazIvQmFzZVRvb2xzL1Rlc3RzL1J1blRlc3RzLnB5IiwgbGluZSAz MywgaW4gR2V0QWxsVGVzdHNTdWl0ZQo+ID4gPiA+ICAgICByZXR1cm4gdW5pdHRlc3QuVGVzdFN1 aXRlKFtHZXRDVGVzdFN1aXRlKCksIEdldFB5dGhvblRlc3RTdWl0ZSgpXSkKPiA+ID4gPiAgIEZp bGUgIi9ob21lL2phcmtrby9Qcm9qZWN0cy90cG0vb3B0ZWUvZWRrMi9CYXNlVG9vbHMvVGVzdHMv UnVuVGVzdHMucHkiLCBsaW5lIDI1LCBpbiBHZXRDVGVzdFN1aXRlCj4gPiA+ID4gICAgIGltcG9y dCBDVG9vbHNUZXN0cwo+ID4gPiA+ICAgRmlsZSAiL2hvbWUvamFya2tvL1Byb2plY3RzL3RwbS9v cHRlZS9lZGsyL0Jhc2VUb29scy9UZXN0cy9DVG9vbHNUZXN0cy5weSIsIGxpbmUgMjIsIGluIDxt b2R1bGU+Cj4gPiA+ID4gICAgIGltcG9ydCBUaWFub0NvbXByZXNzCj4gPiA+ID4gICBGaWxlICIv aG9tZS9qYXJra28vUHJvamVjdHMvdHBtL29wdGVlL2VkazIvQmFzZVRvb2xzL1Rlc3RzL1RpYW5v Q29tcHJlc3MucHkiLCBsaW5lIDY5LCBpbiA8bW9kdWxlPgo+ID4gPiA+ICAgICBUaGVUZXN0U3Vp dGUgPSBUZXN0VG9vbHMuTWFrZVRoZVRlc3RTdWl0ZShsb2NhbHMoKSkKPiA+ID4gPiAgIEZpbGUg Ii9ob21lL2phcmtrby9Qcm9qZWN0cy90cG0vb3B0ZWUvZWRrMi9CYXNlVG9vbHMvVGVzdHMvVGVz dFRvb2xzLnB5IiwgbGluZSA0MywgaW4gTWFrZVRoZVRlc3RTdWl0ZQo+ID4gPiA+ICAgICBmb3Ig bmFtZSwgaXRlbSBpbiBsb2NhbEl0ZW1zLml0ZXJpdGVtcygpOgo+ID4gPiA+IEF0dHJpYnV0ZUVy cm9yOiAnZGljdCcgb2JqZWN0IGhhcyBubyBhdHRyaWJ1dGUgJ2l0ZXJpdGVtcycKPiA+ID4KPiA+ ID4gUmlnaHQuIFNhbWUgaGVyZSBhZnRlciByZW1vdmluZyBhbGwgdHJhY2VzIG9mIFB5dGhvbjIg ZnJvbSBteSBzeXN0ZW0gOi0vCj4gPiA+Cj4gPiA+IEEgY291cGxlIG9mIGZpeGVzIGFyZSBuZWVk ZWQ6Cj4gPiA+IDEuIEVESzIgbmVlZHMgdG8gYmUgdXBncmFkZWQgdG8gdGFnIG9yIGxhdGVyIFsx XQo+ID4gPiAyLiBUaGUgUFlUSE9OM19FTkFCTEUgZW52aXJvbm1lbnQgdmFyaWFibGUgbmVlZHMg dG8gYmUgc2V0IHRvIFRSVUUgWzJdCj4gPiA+Cj4gPiA+IFsxXSBodHRwczovL2dpdGh1Yi5jb20v T1AtVEVFL21hbmlmZXN0L3B1bGwvMTc3Cj4gPiA+IFsyXSBodHRwczovL2dpdGh1Yi5jb20vT1At VEVFL2J1aWxkL3B1bGwvNDUwCj4gPgo+ID4gQlRXLCBJcyB0byAqcmVhbGx5KiBpbXBvc3NpYmxl IHRvIHRlc3QgdGhpcyB3aXRoIHBsYWluIEJ1aWxkUm9vdC4gIEl0J3MKPiA+IG9idmlvdXMgdGhh dCB0aGlzIGZvcmtzIEJSIGludGVybmFsbHkuCj4gPgo+ID4gSSBtZWFuIGV2ZW4gaWYgSSBnZXQg dGhpcyB3b3JraW5nIG9uY2UsIHRoaXMgd2lsbCBmZWVscyBsaWtlIGEgY2x1bXN5IHdheQo+ID4g dG8gdGVzdCBBYXJjaDY0IHJlZ3VsYXJseS4gSSB1c2UgQnVpbGRSb290IGV4dGVuc2l2ZWx5IGZv ciB4ODYgdGVzdGluZy4gQW5kCj4gPiBpdCB3b3VsZCBiZSBuaWNlIHRvIGJlIGFibGUgdG8gc3Rh cnQgZG9pbmcgcmVndWxhciBBUk0gdGVzdGluZy4KPiAKPiBUaGUgbWFpbiByZWFzb24gdG8gZ3Vp ZGUgeW91IHRvd2FyZHMgdGhlIE9QLVRFRSBidWlsZCBzeXN0ZW0gaXMgdGhhdAo+IHlvdSB3aWxs IGJlIGFibGUgdG8gYnVpbGQgYWxsIHRoZSBmaXJtd2FyZXMgKFRGLUEsIE9QLVRFRSwgZWRrMiBl dGMuKQo+IGZyb20gc291cmNlLiBJZiB5b3UgZG9uJ3QgbmVlZCB0byByZWJ1aWxkIHRob3NlIHRo ZW4gSSBoYXZlIHByZXBhcmVkIGEKPiBmbGFzaCBmaXJtd2FyZSBiaW5hcnkgYmxvYiBmb3IgeW91 ciB0ZXN0aW5nIChhdHRhY2hlZCBmbGFzaC5iaW4pLiBTbwo+IFFlbXUgY21kbGluZSB3aWxsIGxv b2sgbGlrZToKPiAKPiAkIHFlbXUtc3lzdGVtLWFhcmNoNjQgLW5vZ3JhcGhpYyAtcyAtbWFjaGlu ZSB2aXJ0LHNlY3VyZT1vbiAtY3B1Cj4gY29ydGV4LWE1NyAta2VybmVsIG91dC9iaW4vSW1hZ2Ug LW5vLWFjcGkgLWFwcGVuZAo+ICdjb25zb2xlPXR0eUFNQTAsMzg0MDAga2VlcF9ib290Y29uIHJv b3Q9L2Rldi92ZGEyJyAtaW5pdHJkCj4gb3V0L2Jpbi9yb290ZnMuY3Bpby5neiAtc21wIDIgLW0g MTAyNCAtYmlvcyBmbGFzaC5iaW4gLWQgdW5pbXAKPiAKPiBIZXJlIHlvdSBjYW4gdXNlICJJbWFn ZSIgYW5kICJyb290ZnMuY3Bpby5neiIgZnJvbSB5b3VyIHBsYWluIEJSIGJ1aWxkcy4KPiAKPiBH aXZlIGl0IGEgdHJ5IGFuZCBsZXQgbWUga25vdyBpZiB0aGlzIHdvcmtzIGZvciB5b3UuCgpIaSwg c29ycnkgc29tZXRoaW5nIGhhcHBlbmVkIHdpdGggRXZvbHV0aW9uIHRoYXQgSSBkb24ndCB1bmRl cnN0YW5kCmFuZCBpdCBqdXN0IHNlbnQgdGhlIG1lc3NhZ2UgcXVvdGVkIHdpdGhvdXQgbXkgcmVz cG9uc2UuIFNob3VsZAphbHdheXMgc3RpY2sgdG8gbXV0dC4KClRoZXJlJ3MgYSBidWcgaW4gQnVp bGRSb290IHRoYXQgcHJldmVudHMgbWUgdGVzdGluZyByaWdodCBub3csIHdoZW4KeW91IHVzZSBM SU5VWF9PVkVSUklERV9TUkNESVIuIEJSIGRldmVsb3BlcnMgYXJlIGxvb2tpbmcgaW50byB0aGF0 LgoKSSdsbCB0ZXN0IHRoaXMgb25jZSB0aGVyZSdzIGEgcmVzb2x1dGlvbiBmb3IgdGhhdC4KCi9K YXJra28KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxp bnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFk ZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4 LWFybS1rZXJuZWwK