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.6 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 F11DBC433DB for ; Thu, 11 Feb 2021 23:36:32 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id AFDBD64DB2 for ; Thu, 11 Feb 2021 23:36:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229681AbhBKXga (ORCPT ); Thu, 11 Feb 2021 18:36:30 -0500 Received: from mail.kernel.org ([198.145.29.99]:50394 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230155AbhBKXgU (ORCPT ); Thu, 11 Feb 2021 18:36:20 -0500 Received: by mail.kernel.org (Postfix) with ESMTPSA id 2D5D264E35; Thu, 11 Feb 2021 23:35:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1613086539; bh=9+Unce9UcNeCoWlD3/RSxu9DvcAB1f841zj8Wod0b+I=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=mhMYQvH8qjolYZkTBxkW5aNkzHOYttoHxotvi4nJCjGq3A9SVWhjwChLHKjvcKwRt rHS6MlmxzUW9Cy2mOMqxl0lT2pHkJ52y+k0Ij0tSTvGeV2H4Focxxwwfwgwct0Rew1 rIngbJBevN2PeEqhL34J3DV1PEDmF0NNxQWr7Q27JYiEYeNwmdpKdsPs7C0WFtimt2 NrSvcvQ2jBFzYiLs2j2Q0f81J6qZEAk2Cz+KZznaNEJOt+iXlacV1yRDar965CGBmg t9vyvDCaUc9VSg5/o+9ZhAhMsb9JVz52mbr9ypc1tQbpLTYjyaiEpskm695H15jdxv ZVeGK2tKtfOAA== Date: Fri, 12 Feb 2021 01:35:30 +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" , dave.hansen@intel.com 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 Fri, Feb 12, 2021 at 01:34:31AM +0200, Jarkko Sakkinen wrote: > 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 > > I spentt couple of days to try to get this running. > > Here's the log: > > ❯ ./qemu.sh > NOTICE: Booting Trusted Firmware > NOTICE: BL1: v2.3():v2.3 > NOTICE: BL1: Built : 13:28:04, Jan 25 2021 > NOTICE: BL1: Booting BL2 > NOTICE: BL2: v2.3():v2.3 > NOTICE: BL2: Built : 13:28:06, Jan 25 2021 > NOTICE: BL1: Booting BL31 > NOTICE: BL31: v2.3():v2.3 > NOTICE: BL31: Built : 13:28:08, Jan 25 2021 > UEFI firmware (version built at 18:49:27 on Nov 18 2019) > pflash_write: Write to buffer emulation is flawed > pflash_write: Write to buffer emulation is flawed > EFI stub: Booting Linux Kernel... > EFI stub: Using DTB from configuration table > EFI stub: Exiting boot services and installing virtual address map... > Booting Linux on physical CPU 0x0000000000 [0x411fd070] > Linux version 5.11.0-rc5 (jarkko@suppilovahvero) (aarch64-buildroot-linux-uclibc-gcc.br_real (Buildroot 2021.02-rc1-10-ga72c90b972) 9.3.0, GNU ld (GNU Binutils) 2.35.2) #1 SMP Thu Feb 11 22:04:53 EET 2021 > Machine model: linux,dummy-virt > efi: EFI v2.70 by EDK II > efi: SMBIOS=0x7f520000 SMBIOS 3.0=0x7f500000 MEMATTR=0x7e59b018 MEMRESERVE=0x7c143f18 > Zone ranges: > DMA [mem 0x0000000040000000-0x000000007fffffff] > DMA32 empty > Normal empty > Movable zone start for each node > Early memory node ranges > node 0: [mem 0x0000000040000000-0x0000000041ffffff] > node 0: [mem 0x0000000042200000-0x000000007be3ffff] > node 0: [mem 0x000000007be40000-0x000000007c13ffff] > node 0: [mem 0x000000007c140000-0x000000007f41ffff] > node 0: [mem 0x000000007f420000-0x000000007f4affff] > node 0: [mem 0x000000007f4b0000-0x000000007f4cffff] > node 0: [mem 0x000000007f4d0000-0x000000007f5dffff] > node 0: [mem 0x000000007f5e0000-0x000000007fffffff] > Zeroed struct page in unavailable ranges: 864 pages > Initmem setup node 0 [mem 0x0000000040000000-0x000000007fffffff] > psci: probing for conduit method from DT. > psci: PSCIv1.1 detected in firmware. > psci: Using standard PSCI v0.2 function IDs > psci: Trusted OS migration not required > psci: SMC Calling Convention v1.2 > percpu: Embedded 21 pages/cpu s48024 r8192 d29800 u86016 > Detected PIPT I-cache on CPU0 > CPU features: detected: ARM erratum 832075 > CPU features: detected: Spectre-v2 > CPU features: detected: ARM errata 1165522, 1319367, or 1530923 > Built 1 zonelists, mobility grouping on. Total pages: 257536 > Kernel command line: root=/dev/vda rw console=ttyAMA0,115200 > Dentry cache hash table entries: 131072 (order: 8, 1048576 bytes, linear) > Inode-cache hash table entries: 65536 (order: 7, 524288 bytes, linear) > mem auto-init: stack:off, heap alloc:off, heap free:off > Memory: 1011284K/1046528K available (6592K kernel code, 804K rwdata, 1460K rodata, 1088K init, 321K bss, 35244K reserved, 0K cma-reserved) > SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1 > rcu: Hierarchical RCU implementation. > rcu: RCU restricting CPUs from NR_CPUS=256 to nr_cpu_ids=1. > rcu: RCU calculated value of scheduler-enlistment delay is 25 jiffies. > rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=1 > NR_IRQS: 64, nr_irqs: 64, preallocated irqs: 0 > GICv2m: range[mem 0x08020000-0x08020fff], SPI[80:143] > random: get_random_bytes called from start_kernel+0x340/0x53c with crng_init=0 > arch_timer: cp15 timer(s) running at 62.50MHz (virt). > clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0x1cd42e208c, max_idle_ns: 881590405314 ns > sched_clock: 56 bits at 62MHz, resolution 16ns, wraps every 4398046511096ns > Console: colour dummy device 80x25 > Calibrating delay loop (skipped), value calculated using timer frequency.. 125.00 BogoMIPS (lpj=250000) > pid_max: default: 32768 minimum: 301 > Mount-cache hash table entries: 2048 (order: 2, 16384 bytes, linear) > Mountpoint-cache hash table entries: 2048 (order: 2, 16384 bytes, linear) > rcu: Hierarchical SRCU implementation. > Remapping and enabling EFI services. > smp: Bringing up secondary CPUs ... > smp: Brought up 1 node, 1 CPU > SMP: Total of 1 processors activated. > CPU features: detected: 32-bit EL0 Support > CPU features: detected: CRC32 instructions > CPU: All CPU(s) started at EL1 > alternatives: patching kernel code > devtmpfs: initialized > clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns > futex hash table entries: 256 (order: 2, 16384 bytes, linear) > SMBIOS 3.0.0 present. > DMI: QEMU QEMU Virtual Machine, BIOS 0.0.0 02/06/2015 > NET: Registered protocol family 16 > DMA: preallocated 128 KiB GFP_KERNEL pool for atomic allocations > DMA: preallocated 128 KiB GFP_KERNEL|GFP_DMA pool for atomic allocations > DMA: preallocated 128 KiB GFP_KERNEL|GFP_DMA32 pool for atomic allocations > hw-breakpoint: found 6 breakpoint and 4 watchpoint registers. > ASID allocator initialised with 65536 entries > Serial: AMBA PL011 UART driver > 9000000.pl011: ttyAMA0 at MMIO 0x9000000 (irq = 46, base_baud = 0) is a PL011 rev1 > printk: console [ttyAMA0] enabled > iommu: Default domain type: Translated > vgaarb: loaded > SCSI subsystem initialized > Registered efivars operations > clocksource: Switched to clocksource arch_sys_counter > NET: Registered protocol family 2 > tcp_listen_portaddr_hash hash table entries: 512 (order: 1, 8192 bytes, linear) > TCP established hash table entries: 8192 (order: 4, 65536 bytes, linear) > TCP bind hash table entries: 8192 (order: 5, 131072 bytes, linear) > TCP: Hash tables configured (established 8192 bind 8192) > UDP hash table entries: 512 (order: 2, 16384 bytes, linear) > UDP-Lite hash table entries: 512 (order: 2, 16384 bytes, linear) > NET: Registered protocol family 1 > PCI: CLS 0 bytes, default 64 > hw perfevents: enabled with armv8_pmuv3 PMU driver, 5 counters available > workingset: timestamp_bits=62 max_order=18 bucket_order=0 > fuse: init (API version 7.33) > Block layer SCSI generic (bsg) driver version 0.4 loaded (major 251) > io scheduler mq-deadline registered > io scheduler kyber registered > pci-host-generic 4010000000.pcie: host bridge /pcie@10000000 ranges: > pci-host-generic 4010000000.pcie: IO 0x003eff0000..0x003effffff -> 0x0000000000 > pci-host-generic 4010000000.pcie: MEM 0x0010000000..0x003efeffff -> 0x0010000000 > pci-host-generic 4010000000.pcie: MEM 0x8000000000..0xffffffffff -> 0x8000000000 > pci-host-generic 4010000000.pcie: Memory resource size exceeds max for 32 bits > pci-host-generic 4010000000.pcie: ECAM at [mem 0x4010000000-0x401fffffff] for [bus 00-ff] > pci-host-generic 4010000000.pcie: PCI host bridge to bus 0000:00 > pci_bus 0000:00: root bus resource [bus 00-ff] > pci_bus 0000:00: root bus resource [io 0x0000-0xffff] > pci_bus 0000:00: root bus resource [mem 0x10000000-0x3efeffff] > pci_bus 0000:00: root bus resource [mem 0x8000000000-0xffffffffff] > pci 0000:00:00.0: [1b36:0008] type 00 class 0x060000 > pci 0000:00:01.0: [1af4:1000] type 00 class 0x020000 > pci 0000:00:01.0: reg 0x10: [io 0x0080-0x009f] > pci 0000:00:01.0: reg 0x14: [mem 0x10001000-0x10001fff] > pci 0000:00:01.0: reg 0x20: [mem 0x8000000000-0x8000003fff 64bit pref] > pci 0000:00:01.0: reg 0x30: [mem 0xfffc0000-0xffffffff pref] > pci 0000:00:02.0: [1af4:1001] type 00 class 0x010000 > pci 0000:00:02.0: reg 0x10: [io 0x0000-0x007f] > pci 0000:00:02.0: reg 0x14: [mem 0x10000000-0x10000fff] > pci 0000:00:02.0: reg 0x20: [mem 0x8000004000-0x8000007fff 64bit pref] > pci 0000:00:01.0: BAR 6: assigned [mem 0x10000000-0x1003ffff pref] > pci 0000:00:01.0: BAR 4: assigned [mem 0x8000000000-0x8000003fff 64bit pref] > pci 0000:00:02.0: BAR 4: assigned [mem 0x8000004000-0x8000007fff 64bit pref] > pci 0000:00:01.0: BAR 1: assigned [mem 0x10040000-0x10040fff] > pci 0000:00:02.0: BAR 1: assigned [mem 0x10041000-0x10041fff] > pci 0000:00:02.0: BAR 0: assigned [io 0x1000-0x107f] > pci 0000:00:01.0: BAR 0: assigned [io 0x1080-0x109f] > virtio-pci 0000:00:01.0: enabling device (0000 -> 0003) > virtio-pci 0000:00:02.0: enabling device (0000 -> 0003) > cacheinfo: Unable to detect cache hierarchy for CPU 0 > virtio_blk virtio1: [vda] 122880 512-byte logical blocks (62.9 MB/60.0 MiB) > SMCCC: SOC_ID: ARCH_FEATURES(ARCH_SOC_ID) returned error: fffffffffffffffd > NET: Registered protocol family 10 > Segment Routing with IPv6 > sit: IPv6, IPv4 and MPLS over IPv4 tunneling driver > NET: Registered protocol family 17 > NET: Registered protocol family 15 > NET: Registered protocol family 40 > registered taskstats version 1 > EXT4-fs (vda): recovery complete > EXT4-fs (vda): mounted filesystem with ordered data mode. Opts: (null). Quota mode: disabled. > VFS: Mounted root (ext4 filesystem) on device 254:0. > devtmpfs: mounted > Freeing unused kernel memory: 1088K > Run /sbin/init as init process > mount: you must be root > mount: you must be root > mkdir: can't create directory '/dev/pts': Permission denied > mkdir: can't create directory '/dev/shm': Permission denied > mount: you must be root > hostname: sethostname: Operation not permitted > Starting syslogd: OK > Starting klogd: OK > Running sysctl: OK > Initializing random number generator: OK > Saving random seed: random: dd: uninitialized urandom read (512 bytes read) > OK > Starting network: ip: RTNETLINK answers: Operation not permitted > ip: SIOCSIFFLAGS: Operation not permitted > sed: /proc/mounts: No such file or directory > Waiting for interface eth0 to appear............... timeout! > run-parts: /etc/network/if-pre-up.d/wait_iface: exit status 1 > FAIL > can't open /dev/ttyAMA0: Permission denied > can't open /dev/ttyAMA0: Permission denied > can't open /dev/ttyAMA0: Permission denied > can't open /dev/ttyAMA0: Permission denied > > And it continues... > > The qemu command I got did not work "as it is" and because I'm neither too > proficient with qemu nor aarch64, it took a while to get something usable. > This is my current qemu command: > > qemu-system-aarch64 -nographic -s -machine virt,secure=on -cpu cortex-a57 \ > -kernel ~/Projects/tpm/buildroot/output/images/Image \ > -no-acpi \ > -append 'root=/dev/vda rw console=ttyAMA0,115200 ' \ > -drive file=~/Projects/tpm/buildroot/output/images/rootfs.ext4,format=raw \ > -smp 1 \ > -monitor telnet:127.0.0.1:55555,server,nowait \ > -m 1024 -bios ~/Projects/tpm/fw/aarch64-fw.bin -d unimp > > Then I start QEMU monitor from another terminal with: > > socat tcp-connect:127.0.0.1:55555 file:`tty`,raw,echo=0 > > So... what could be the issue with permissions? NOTE: aarch64-fw.bin is the binary file for FW that you provided. I just renamed it. /Jarkko 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.6 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 C90FFC433E0 for ; Thu, 11 Feb 2021 23:36:52 +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 76BFD64E3B for ; Thu, 11 Feb 2021 23:36:52 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 76BFD64E3B 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=mtF3krbjcacKbCnXXj4IYAPgBRO/DePYVBaxCy1tO4U=; b=rqF+Oy6H42Gd1HyeVxdfHE4wB ylV02MFbPzbgZ5GjPVkVHYCuN/fKWrZo4Y85DOBA+uvq/AOIHblJEg31UAE2s/9To7HC+N/dwi12T f7sykj7IJdKWN2NZyf/3HoK1ULwrkDpwOoGivLyBy2//zDm/2b2TJWQtsvATXkONlXZITIN4T0ztY ULSV4RuPDopOxaOhYr0H9amxxmtnHQMKJ+eTTUHv9ujOaxHw62PGk6pQiq9x15bGtDsMQg1icg/ES MNkZifr+UuBztW+mRI61sy6bJm0DM8cWVCkOh6/IG/IWlJQ0mjBoRO2r2Wbh0ZCQOkCwfR2FmOgVT +Bh8xsOmw==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1lALUt-0003Dl-NU; Thu, 11 Feb 2021 23:35:43 +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 1lALUq-0003D7-EO for linux-arm-kernel@lists.infradead.org; Thu, 11 Feb 2021 23:35:42 +0000 Received: by mail.kernel.org (Postfix) with ESMTPSA id 2D5D264E35; Thu, 11 Feb 2021 23:35:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1613086539; bh=9+Unce9UcNeCoWlD3/RSxu9DvcAB1f841zj8Wod0b+I=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=mhMYQvH8qjolYZkTBxkW5aNkzHOYttoHxotvi4nJCjGq3A9SVWhjwChLHKjvcKwRt rHS6MlmxzUW9Cy2mOMqxl0lT2pHkJ52y+k0Ij0tSTvGeV2H4Focxxwwfwgwct0Rew1 rIngbJBevN2PeEqhL34J3DV1PEDmF0NNxQWr7Q27JYiEYeNwmdpKdsPs7C0WFtimt2 NrSvcvQ2jBFzYiLs2j2Q0f81J6qZEAk2Cz+KZznaNEJOt+iXlacV1yRDar965CGBmg t9vyvDCaUc9VSg5/o+9ZhAhMsb9JVz52mbr9ypc1tQbpLTYjyaiEpskm695H15jdxv ZVeGK2tKtfOAA== Date: Fri, 12 Feb 2021 01:35:30 +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-20210211_183540_686315_AD6F6EF7 X-CRM114-Status: GOOD ( 46.19 ) 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: dave.hansen@intel.com, 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 T24gRnJpLCBGZWIgMTIsIDIwMjEgYXQgMDE6MzQ6MzFBTSArMDIwMCwgSmFya2tvIFNha2tpbmVu IHdyb3RlOgo+IE9uIE1vbiwgSmFuIDI1LCAyMDIxIGF0IDAyOjQ3OjM4UE0gKzA1MzAsIFN1bWl0 IEdhcmcgd3JvdGU6Cj4gPiBIaSBKYXJra28sCj4gPiAKPiA+IE9uIEZyaSwgMjIgSmFuIDIwMjEg YXQgMjM6NDIsIEphcmtrbyBTYWtraW5lbiA8amFya2tvQGtlcm5lbC5vcmc+IHdyb3RlOgo+ID4g Pgo+ID4gPiBPbiBUaHUsIEphbiAyMSwgMjAyMSBhdCAwNToyMzo0NVBNICswMTAwLCBKZXJvbWUg Rm9yaXNzaWVyIHdyb3RlOgo+ID4gPiA+Cj4gPiA+ID4KPiA+ID4gPiBPbiAxLzIxLzIxIDQ6MjQg UE0sIEphcmtrbyBTYWtraW5lbiB3cm90ZToKPiA+ID4gPiA+IE9uIFRodSwgSmFuIDIxLCAyMDIx IGF0IDA1OjA3OjQyUE0gKzAyMDAsIEphcmtrbyBTYWtraW5lbiB3cm90ZToKPiA+ID4gPiA+PiBP biBUaHUsIEphbiAyMSwgMjAyMSBhdCAwOTo0NDowN0FNICswMTAwLCBKZXJvbWUgRm9yaXNzaWVy IHdyb3RlOgo+ID4gPiA+ID4+Pgo+ID4gPiA+ID4+Pgo+ID4gPiA+ID4+PiBPbiAxLzIxLzIxIDE6 MDIgQU0sIEphcmtrbyBTYWtraW5lbiB2aWEgT1AtVEVFIHdyb3RlOgo+ID4gPiA+ID4+Pj4gT24g V2VkLCBKYW4gMjAsIDIwMjEgYXQgMTI6NTM6MjhQTSArMDUzMCwgU3VtaXQgR2FyZyB3cm90ZToK PiA+ID4gPiA+Pj4+PiBPbiBXZWQsIDIwIEphbiAyMDIxIGF0IDA3OjAxLCBKYXJra28gU2Fra2lu ZW4gPGphcmtrb0BrZXJuZWwub3JnPiB3cm90ZToKPiA+ID4gPiA+Pj4+Pj4KPiA+ID4gPiA+Pj4+ Pj4gT24gVHVlLCBKYW4gMTksIDIwMjEgYXQgMTI6MzA6NDJQTSArMDIwMCwgSmFya2tvIFNha2tp bmVuIHdyb3RlOgo+ID4gPiA+ID4+Pj4+Pj4gT24gRnJpLCBKYW4gMTUsIDIwMjEgYXQgMTE6MzI6 MzFBTSArMDUzMCwgU3VtaXQgR2FyZyB3cm90ZToKPiA+ID4gPiA+Pj4+Pj4+PiBPbiBUaHUsIDE0 IEphbiAyMDIxIGF0IDA3OjM1LCBKYXJra28gU2Fra2luZW4gPGphcmtrb0BrZXJuZWwub3JnPiB3 cm90ZToKPiA+ID4gPiA+Pj4+Pj4+Pj4KPiA+ID4gPiA+Pj4+Pj4+Pj4gT24gV2VkLCBKYW4gMTMs IDIwMjEgYXQgMDQ6NDc6MDBQTSArMDUzMCwgU3VtaXQgR2FyZyB3cm90ZToKPiA+ID4gPiA+Pj4+ Pj4+Pj4+IEhpIEphcmtrbywKPiA+ID4gPiA+Pj4+Pj4+Pj4+Cj4gPiA+ID4gPj4+Pj4+Pj4+PiBP biBNb24sIDExIEphbiAyMDIxIGF0IDIyOjA1LCBKYXJra28gU2Fra2luZW4gPGphcmtrb0BrZXJu ZWwub3JnPiB3cm90ZToKPiA+ID4gPiA+Pj4+Pj4+Pj4+Pgo+ID4gPiA+ID4+Pj4+Pj4+Pj4+IE9u IFR1ZSwgTm92IDAzLCAyMDIwIGF0IDA5OjMxOjQ0UE0gKzA1MzAsIFN1bWl0IEdhcmcgd3JvdGU6 Cj4gPiA+ID4gPj4+Pj4+Pj4+Pj4+IEFkZCBzdXBwb3J0IGZvciBURUUgYmFzZWQgdHJ1c3RlZCBr ZXlzIHdoZXJlIFRFRSBwcm92aWRlcyB0aGUgZnVuY3Rpb25hbGl0eQo+ID4gPiA+ID4+Pj4+Pj4+ Pj4+PiB0byBzZWFsIGFuZCB1bnNlYWwgdHJ1c3RlZCBrZXlzIHVzaW5nIGhhcmR3YXJlIHVuaXF1 ZSBrZXkuCj4gPiA+ID4gPj4+Pj4+Pj4+Pj4+Cj4gPiA+ID4gPj4+Pj4+Pj4+Pj4+IFJlZmVyIHRv IERvY3VtZW50YXRpb24vdGVlLnR4dCBmb3IgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgVEVF Lgo+ID4gPiA+ID4+Pj4+Pj4+Pj4+Pgo+ID4gPiA+ID4+Pj4+Pj4+Pj4+PiBTaWduZWQtb2ZmLWJ5 OiBTdW1pdCBHYXJnIDxzdW1pdC5nYXJnQGxpbmFyby5vcmc+Cj4gPiA+ID4gPj4+Pj4+Pj4+Pj4K PiA+ID4gPiA+Pj4+Pj4+Pj4+PiBJIGhhdmVuJ3QgeWV0IGdvdCBRRU1VIGVudmlyb25tZW50IHdv cmtpbmcgd2l0aCBhYXJjaDY0LCB0aGlzIHByb2R1Y2VzCj4gPiA+ID4gPj4+Pj4+Pj4+Pj4ganVz dCBhIGJsYW5rIHNjcmVlbjoKPiA+ID4gPiA+Pj4+Pj4+Pj4+Pgo+ID4gPiA+ID4+Pj4+Pj4+Pj4+ IC4vb3V0cHV0L2hvc3QvdXNyL2Jpbi9xZW11LXN5c3RlbS1hYXJjaDY0IC1NIHZpcnQgLWNwdSBj b3J0ZXgtYTUzIC1zbXAgMSAta2VybmVsIG91dHB1dC9pbWFnZXMvSW1hZ2UgLWluaXRyZCBvdXRw dXQvaW1hZ2VzL3Jvb3Rmcy5jcGlvIC1zZXJpYWwgc3RkaW8KPiA+ID4gPiA+Pj4+Pj4+Pj4+Pgo+ ID4gPiA+ID4+Pj4+Pj4+Pj4+IE15IEJ1aWxkUm9vdCBmb3JrIGZvciBUUE0gYW5kIGtleXJpbmcg dGVzdGluZyBpcyBsb2NhdGVkIG92ZXIgaGVyZToKPiA+ID4gPiA+Pj4+Pj4+Pj4+Pgo+ID4gPiA+ ID4+Pj4+Pj4+Pj4+IGh0dHBzOi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwv Z2l0L2phcmtrby9idWlsZHJvb3QtdHBtZGQuZ2l0Lwo+ID4gPiA+ID4+Pj4+Pj4+Pj4+Cj4gPiA+ ID4gPj4+Pj4+Pj4+Pj4gVGhlICJBUk0gdmVyc2lvbiIgaXMgYXQgdGhpcyBwb2ludCBpbiBhYXJj aDY0IGJyYW5jaC4gT3ZlciB0aW1lIEkgd2lsbAo+ID4gPiA+ID4+Pj4+Pj4+Pj4+IGRlZmluZSB0 cG1kZC14ODZfNjQgYW5kIHRwbWRkLWFhcmNoNjQgYm9hcmRzIGFuZCBldmVyeXRoaW5nIHdpbGwg YmUgdGhlbgo+ID4gPiA+ID4+Pj4+Pj4+Pj4+IGluIHRoZSBtYXN0ZXIgYnJhbmNoLgo+ID4gPiA+ ID4+Pj4+Pj4+Pj4+Cj4gPiA+ID4gPj4+Pj4+Pj4+Pj4gVG8gY3JlYXRlIGlkZW50aWNhbCBpbWFn ZXMgeW91IGp1c3QgbmVlZCB0bwo+ID4gPiA+ID4+Pj4+Pj4+Pj4+Cj4gPiA+ID4gPj4+Pj4+Pj4+ Pj4gJCBtYWtlIHRwbWRkX2RlZmNvbmZpZyAmJiBtYWtlCj4gPiA+ID4gPj4+Pj4+Pj4+Pj4KPiA+ ID4gPiA+Pj4+Pj4+Pj4+PiBDYW4geW91IGNoZWNrIGlmIHlvdSBzZWUgYW55dGhpbmcgb2J2aW91 c2x5IHdyb25nPyBJJ20gZWFnZXIgdG8gdGVzdCB0aGlzCj4gPiA+ID4gPj4+Pj4+Pj4+Pj4gcGF0 Y2ggc2V0LCBhbmQgaW4gYmlnZ2VyIHBpY3R1cmUgSSByZWFsbHkgbmVlZCB0byBoYXZlIHJlYWR5 IHRvIHJ1bgo+ID4gPiA+ID4+Pj4+Pj4+Pj4+IGFhcmNoNjQgZW52aXJvbm1lbnQgYXZhaWxhYmxl Lgo+ID4gPiA+ID4+Pj4+Pj4+Pj4KPiA+ID4gPiA+Pj4+Pj4+Pj4+IEkgd291bGQgcmF0aGVyIHN1 Z2dlc3QgeW91IHRvIGZvbGxvdyBzdGVwcyBsaXN0ZWQgaGVyZSBbMV0gYXMgdG8gdGVzdAo+ID4g PiA+ID4+Pj4+Pj4+Pj4gdGhpcyBmZWF0dXJlIG9uIFFlbXUgYWFyY2g2NCB3ZSBuZWVkIHRvIGJ1 aWxkIGZpcm13YXJlcyBzdWNoIGFzIFRGLUEsCj4gPiA+ID4gPj4+Pj4+Pj4+PiBPUC1URUUsIFVF RkkgZXRjLiB3aGljaCBhcmUgYWxsIGludGVncmF0ZWQgaW50byBPUC1URUUgUWVtdSBidWlsZAo+ ID4gPiA+ID4+Pj4+Pj4+Pj4gc3lzdGVtIFsyXS4gQW5kIHRoZW4gaXQgd291bGQgYmUgZWFzaWVy IHRvIG1pZ3JhdGUgdGhlbSB0byB5b3VyCj4gPiA+ID4gPj4+Pj4+Pj4+PiBidWlsZHJvb3QgZW52 aXJvbm1lbnQgYXMgd2VsbC4KPiA+ID4gPiA+Pj4+Pj4+Pj4+Cj4gPiA+ID4gPj4+Pj4+Pj4+PiBb MV0gaHR0cHM6Ly9saXN0cy50cnVzdGVkZmlybXdhcmUub3JnL3BpcGVybWFpbC9vcC10ZWUvMjAy MC1NYXkvMDAwMDI3Lmh0bWwKPiA+ID4gPiA+Pj4+Pj4+Pj4+IFsyXSBodHRwczovL29wdGVlLnJl YWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9idWlsZGluZy9kZXZpY2VzL3FlbXUuaHRtbCNxZW11LXY4 Cj4gPiA+ID4gPj4+Pj4+Pj4+Pgo+ID4gPiA+ID4+Pj4+Pj4+Pj4gLVN1bWl0Cj4gPiA+ID4gPj4+ Pj4+Pj4+Cj4gPiA+ID4gPj4+Pj4+Pj4+IENhbiB5b3UgcHJvdmlkZSAna2V5Y3RsX2NoYW5nZSc/ IE90aGVyd2lzZSwgdGhlIHN0ZXBzIGFyZSBlYXN5IHRvIGZvbGxvdy4KPiA+ID4gPiA+Pj4+Pj4+ Pj4KPiA+ID4gPiA+Pj4+Pj4+Pgo+ID4gPiA+ID4+Pj4+Pj4+ICQgY2F0IGtleWN0bF9jaGFuZ2UK PiA+ID4gPiA+Pj4+Pj4+PiBkaWZmIC0tZ2l0IGEvY29tbW9uLm1rIGIvY29tbW9uLm1rCj4gPiA+ ID4gPj4+Pj4+Pj4gaW5kZXggYWViN2I0MS4uNjYzZTUyOCAxMDA2NDQKPiA+ID4gPiA+Pj4+Pj4+ PiAtLS0gYS9jb21tb24ubWsKPiA+ID4gPiA+Pj4+Pj4+PiArKysgYi9jb21tb24ubWsKPiA+ID4g PiA+Pj4+Pj4+PiBAQCAtMjI5LDYgKzIyOSw3IEBAIEJSMl9QQUNLQUdFX09QVEVFX1RFU1RfU0RL ID89ICQoT1BURUVfT1NfVEFfREVWX0tJVF9ESVIpCj4gPiA+ID4gPj4+Pj4+Pj4gIEJSMl9QQUNL QUdFX09QVEVFX1RFU1RfU0lURSA/PSAkKE9QVEVFX1RFU1RfUEFUSCkKPiA+ID4gPiA+Pj4+Pj4+ PiAgQlIyX1BBQ0tBR0VfU1RSQUNFID89IHkKPiA+ID4gPiA+Pj4+Pj4+PiAgQlIyX1RBUkdFVF9H RU5FUklDX0dFVFRZX1BPUlQgPz0gJChpZgo+ID4gPiA+ID4+Pj4+Pj4+ICQoQ0ZHX05XX0NPTlNP TEVfVUFSVCksdHR5QU1BJChDRkdfTldfQ09OU09MRV9VQVJUKSx0dHlBTUEwKQo+ID4gPiA+ID4+ Pj4+Pj4+ICtCUjJfUEFDS0FHRV9LRVlVVElMUyA6PSB5Cj4gPiA+ID4gPj4+Pj4+Pj4KPiA+ID4g PiA+Pj4+Pj4+PiAgIyBBbGwgQlIyXyogdmFyaWFibGVzIGZyb20gdGhlIG1ha2VmaWxlIG9yIHRo ZSBlbnZpcm9ubWVudCBhcmUgYXBwZW5kZWQgdG8KPiA+ID4gPiA+Pj4+Pj4+PiAgIyAuLi9vdXQt YnIvZXh0cmEuY29uZi4gQWxsIHZhbHVlcyBhcmUgcXVvdGVkICIuLi4iIGV4Y2VwdCB5IGFuZCBu Lgo+ID4gPiA+ID4+Pj4+Pj4+IGRpZmYgLS1naXQgYS9rY29uZmlncy9xZW11LmNvbmYgYi9rY29u Zmlncy9xZW11LmNvbmYKPiA+ID4gPiA+Pj4+Pj4+PiBpbmRleCAzNjhjMThhLi44MzJhYjc0IDEw MDY0NAo+ID4gPiA+ID4+Pj4+Pj4+IC0tLSBhL2tjb25maWdzL3FlbXUuY29uZgo+ID4gPiA+ID4+ Pj4+Pj4+ICsrKyBiL2tjb25maWdzL3FlbXUuY29uZgo+ID4gPiA+ID4+Pj4+Pj4+IEBAIC0yMCwz ICsyMCw1IEBAIENPTkZJR185UF9GUz15Cj4gPiA+ID4gPj4+Pj4+Pj4gIENPTkZJR185UF9GU19Q T1NJWF9BQ0w9eQo+ID4gPiA+ID4+Pj4+Pj4+ICBDT05GSUdfSFdfUkFORE9NPXkKPiA+ID4gPiA+ Pj4+Pj4+PiAgQ09ORklHX0hXX1JBTkRPTV9WSVJUSU89eQo+ID4gPiA+ID4+Pj4+Pj4+ICtDT05G SUdfVFJVU1RFRF9LRVlTPXkKPiA+ID4gPiA+Pj4+Pj4+PiArQ09ORklHX0VOQ1JZUFRFRF9LRVlT PXkKPiA+ID4gPiA+Pj4+Pj4+Pgo+ID4gPiA+ID4+Pj4+Pj4+PiBBZnRlciBJJ3ZlIHN1Y2Nlc3Nm dWxseSB0ZXN0ZWQgMi80LCBJJ2Qgc3VnZ2VzdCB0aGF0IHlvdSByb2xsIG91dCBvbmUgbW9yZQo+ ID4gPiA+ID4+Pj4+Pj4+PiB2ZXJzaW9uIGFuZCBDQyB0aGUgZG9jdW1lbnRhdGlvbiBwYXRjaCB0 byBFbGFpbmUgYW5kIE1pbmksIGFuZCBjbGVhcmx5Cj4gPiA+ID4gPj4+Pj4+Pj4+IHJlbWFyayBp biB0aGUgY29tbWl0IG1lc3NhZ2UgdGhhdCBURUUgaXMgYSBzdGFuZGFyZCwgd2l0aCBhIGxpbmsg dG8gdGhlCj4gPiA+ID4gPj4+Pj4+Pj4+IHNwZWNpZmljYXRpb24uCj4gPiA+ID4gPj4+Pj4+Pj4+ Cj4gPiA+ID4gPj4+Pj4+Pj4KPiA+ID4gPiA+Pj4+Pj4+PiBTdXJlLCBJIHdpbGwgcm9sbCBvdXQg dGhlIG5leHQgdmVyc2lvbiBhZnRlciB5b3VyIHRlc3RpbmcuCj4gPiA+ID4gPj4+Pj4+Pgo+ID4g PiA+ID4+Pj4+Pj4gVGhhbmtzLCBJJ2xsIHRyeSB0aGlzIGF0IGluc3RhbnQsIGFuZCBnaXZlIG15 IGZlZWRiYWNrLgo+ID4gPiA+ID4+Pj4+Pgo+ID4gPiA+ID4+Pj4+PiBJIGJ1bXAgaW50byB0aGlz Ogo+ID4gPiA+ID4+Pj4+Pgo+ID4gPiA+ID4+Pj4+PiAkIG1ha2UgcnVuLW9ubHkKPiA+ID4gPiA+ Pj4+Pj4gbG4gLXNmIC9ob21lL2phcmtrby9kZXZlbC90cG0vb3B0ZWUvYnVpbGQvLi4vb3V0LWJy L2ltYWdlcy9yb290ZnMuY3Bpby5neiAvaG9tZS9qYXJra28vZGV2ZWwvdHBtL29wdGVlL2J1aWxk Ly4uL291dC9iaW4vCj4gPiA+ID4gPj4+Pj4+IGxuOiBmYWlsZWQgdG8gY3JlYXRlIHN5bWJvbGlj IGxpbmsgJy9ob21lL2phcmtrby9kZXZlbC90cG0vb3B0ZWUvYnVpbGQvLi4vb3V0L2Jpbi8nOiBO byBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5Cj4gPiA+ID4gPj4+Pj4+IG1ha2U6ICoqKiBbTWFrZWZp bGU6MTk0OiBydW4tb25seV0gRXJyb3IgMQo+ID4gPiA+ID4+Pj4+Pgo+ID4gPiA+ID4+Pj4+Cj4g PiA+ID4gPj4+Pj4gQ291bGQgeW91IGNoZWNrIGlmIHRoZSBmb2xsb3dpbmcgZGlyZWN0b3J5IHRy ZWUgaXMgYnVpbHQgYWZ0ZXIKPiA+ID4gPiA+Pj4+PiBleGVjdXRpbmcgdGhlIGJlbG93IGNvbW1h bmQ/Cj4gPiA+ID4gPj4+Pj4KPiA+ID4gPiA+Pj4+PiAkIG1ha2UgLWpgbnByb2NgCj4gPiA+ID4g Pj4+Pj4gQ0ZHX0lOX1RSRUVfRUFSTFlfVEFTPXRydXN0ZWRfa2V5cy9mMDRhMGZlNy0xZjVkLTRi OWItYWJmNy02MTliODViNGNlOGMKPiA+ID4gPiA+Pj4+Pgo+ID4gPiA+ID4+Pj4+ICQgdHJlZSBv dXQvYmluLwo+ID4gPiA+ID4+Pj4+IG91dC9iaW4vCj4gPiA+ID4gPj4+Pj4g4pSc4pSA4pSAIGJs MS5iaW4gLT4gL2hvbWUvc3VtaXQvYnVpbGQvb3B0ZWUvYnVpbGQvLi4vdHJ1c3RlZC1maXJtd2Fy ZS1hL2J1aWxkL3FlbXUvcmVsZWFzZS9ibDEuYmluCj4gPiA+ID4gPj4+Pj4g4pSc4pSA4pSAIGJs Mi5iaW4gLT4gL2hvbWUvc3VtaXQvYnVpbGQvb3B0ZWUvYnVpbGQvLi4vdHJ1c3RlZC1maXJtd2Fy ZS1hL2J1aWxkL3FlbXUvcmVsZWFzZS9ibDIuYmluCj4gPiA+ID4gPj4+Pj4g4pSc4pSA4pSAIGJs MzEuYmluIC0+Cj4gPiA+ID4gPj4+Pj4gL2hvbWUvc3VtaXQvYnVpbGQvb3B0ZWUvYnVpbGQvLi4v dHJ1c3RlZC1maXJtd2FyZS1hL2J1aWxkL3FlbXUvcmVsZWFzZS9ibDMxLmJpbgo+ID4gPiA+ID4+ Pj4+IOKUnOKUgOKUgCBibDMyLmJpbiAtPgo+ID4gPiA+ID4+Pj4+IC9ob21lL3N1bWl0L2J1aWxk L29wdGVlL2J1aWxkLy4uL29wdGVlX29zL291dC9hcm0vY29yZS90ZWUtaGVhZGVyX3YyLmJpbgo+ ID4gPiA+ID4+Pj4+IOKUnOKUgOKUgCBibDMyX2V4dHJhMS5iaW4gLT4KPiA+ID4gPiA+Pj4+PiAv aG9tZS9zdW1pdC9idWlsZC9vcHRlZS9idWlsZC8uLi9vcHRlZV9vcy9vdXQvYXJtL2NvcmUvdGVl LXBhZ2VyX3YyLmJpbgo+ID4gPiA+ID4+Pj4+IOKUnOKUgOKUgCBibDMyX2V4dHJhMi5iaW4gLT4K PiA+ID4gPiA+Pj4+PiAvaG9tZS9zdW1pdC9idWlsZC9vcHRlZS9idWlsZC8uLi9vcHRlZV9vcy9v dXQvYXJtL2NvcmUvdGVlLXBhZ2VhYmxlX3YyLmJpbgo+ID4gPiA+ID4+Pj4+IOKUnOKUgOKUgCBi bDMzLmJpbiAtPgo+ID4gPiA+ID4+Pj4+IC9ob21lL3N1bWl0L2J1aWxkL29wdGVlL2J1aWxkLy4u L2VkazIvQnVpbGQvQXJtVmlydFFlbXVLZXJuZWwtQUFSQ0g2NC9SRUxFQVNFX0dDQzQ5L0ZWL1FF TVVfRUZJLmZkCj4gPiA+ID4gPj4+Pj4g4pSc4pSA4pSAIEltYWdlIC0+IC9ob21lL3N1bWl0L2J1 aWxkL29wdGVlL2J1aWxkLy4uL2xpbnV4L2FyY2gvYXJtNjQvYm9vdC9JbWFnZQo+ID4gPiA+ID4+ Pj4+IOKUlOKUgOKUgCByb290ZnMuY3Bpby5neiAtPgo+ID4gPiA+ID4+Pj4+IC9ob21lL3N1bWl0 L2J1aWxkL29wdGVlL2J1aWxkLy4uL291dC1ici9pbWFnZXMvcm9vdGZzLmNwaW8uZ3oKPiA+ID4g PiA+Pj4+Pgo+ID4gPiA+ID4+Pj4+IDAgZGlyZWN0b3JpZXMsIDkgZmlsZXMKPiA+ID4gPiA+Pj4+ Pgo+ID4gPiA+ID4+Pj4+IC1TdW1pdAo+ID4gPiA+ID4+Pj4KPiA+ID4gPiA+Pj4+IEkgYWN0dWFs bHkgc3BvdHRlZCBhIGJ1aWxkIGVycm9yIHRoYXQgd2FzIHVubm90aWNlZCBsYXN0IHRpbWU6Cj4g PiA+ID4gPj4+Pgo+ID4gPiA+ID4+Pj4gbWFrZVsyXTogRW50ZXJpbmcgZGlyZWN0b3J5ICcvaG9t ZS9qYXJra28vZGV2ZWwvdHBtL29wdGVlL2VkazIvQmFzZVRvb2xzL1Rlc3RzJwo+ID4gPiA+ID4+ Pj4gL2Jpbi9zaDogMTogcHl0aG9uOiBub3QgZm91bmQKPiA+ID4gPiA+Pj4+Cj4gPiA+ID4gPj4+ PiBJJ2QgcHJlZmVyIG5vdCB0byBpbnN0YWxsIFB5dGhvbjIuIEl0IGhhcyBiZWVuIEVPTCBvdmVy IGEgeWVhci4KPiA+ID4gPiA+Pj4KPiA+ID4gPiA+Pj4gQUZBSUssIGV2ZXJ5dGhpbmcgc2hvdWxk IGJ1aWxkIGZpbmUgd2l0aCBQeXRob24zLiBPbiBteSBVYnVudHUgMjAuMDQKPiA+ID4gPiA+Pj4g bWFjaGluZSwgdGhpcyBpcyBhY2NvbXBsaXNoZWQgYnkgaW5zdGFsbGluZyBwYWNrYWdlICJweXRo b24taXMtcHl0aG9uMyIKPiA+ID4gPiA+Pj4gKGFmdGVyIHVuaW5zdGFsbGluZyAicHl0aG9uLWlz LXB5dGhvbjIiIGlmIG5lZWQgYmUpLgo+ID4gPiA+ID4+Pgo+ID4gPiA+ID4+PiAkIGxzIC1sIC91 c3IvYmluL3B5dGhvbgo+ID4gPiA+ID4+PiBscnd4cnd4cnd4IDEgcm9vdCByb290IDcgQXByIDE1 ICAyMDIwIC91c3IvYmluL3B5dGhvbiAtPiBweXRob24zCj4gPiA+ID4gPj4KPiA+ID4gPiA+PiBS aWdodCwganVzdCBmb3VuZCBhYm91dCB0aGlzIGluIHVucmVsYXRlZCBjb250ZXh0IDotKSBbKl0K PiA+ID4gPiA+Pgo+ID4gPiA+ID4+IEhvcGUgdGhpcyB3aWxsIHdvcmsgb3V0Li4uCj4gPiA+ID4g Pj4KPiA+ID4gPiA+PiBbKl0gaHR0cHM6Ly9naXRodWIuY29tL3N1cmdlLXN5bnRoZXNpemVyL3N1 cmdlL3B1bGwvMzY1NQo+ID4gPiA+ID4KPiA+ID4gPiA+IE5vdyBJIGdldAo+ID4gPiA+ID4KPiA+ ID4gPiA+IFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKPiA+ID4gPiA+ICAgRmls ZSAiL2hvbWUvamFya2tvL1Byb2plY3RzL3RwbS9vcHRlZS9lZGsyL0Jhc2VUb29scy9UZXN0cy9S dW5UZXN0cy5weSIsIGxpbmUgMzYsIGluIDxtb2R1bGU+Cj4gPiA+ID4gPiAgICAgYWxsVGVzdHMg PSBHZXRBbGxUZXN0c1N1aXRlKCkKPiA+ID4gPiA+ICAgRmlsZSAiL2hvbWUvamFya2tvL1Byb2pl Y3RzL3RwbS9vcHRlZS9lZGsyL0Jhc2VUb29scy9UZXN0cy9SdW5UZXN0cy5weSIsIGxpbmUgMzMs IGluIEdldEFsbFRlc3RzU3VpdGUKPiA+ID4gPiA+ICAgICByZXR1cm4gdW5pdHRlc3QuVGVzdFN1 aXRlKFtHZXRDVGVzdFN1aXRlKCksIEdldFB5dGhvblRlc3RTdWl0ZSgpXSkKPiA+ID4gPiA+ICAg RmlsZSAiL2hvbWUvamFya2tvL1Byb2plY3RzL3RwbS9vcHRlZS9lZGsyL0Jhc2VUb29scy9UZXN0 cy9SdW5UZXN0cy5weSIsIGxpbmUgMjUsIGluIEdldENUZXN0U3VpdGUKPiA+ID4gPiA+ICAgICBp bXBvcnQgQ1Rvb2xzVGVzdHMKPiA+ID4gPiA+ICAgRmlsZSAiL2hvbWUvamFya2tvL1Byb2plY3Rz L3RwbS9vcHRlZS9lZGsyL0Jhc2VUb29scy9UZXN0cy9DVG9vbHNUZXN0cy5weSIsIGxpbmUgMjIs IGluIDxtb2R1bGU+Cj4gPiA+ID4gPiAgICAgaW1wb3J0IFRpYW5vQ29tcHJlc3MKPiA+ID4gPiA+ ICAgRmlsZSAiL2hvbWUvamFya2tvL1Byb2plY3RzL3RwbS9vcHRlZS9lZGsyL0Jhc2VUb29scy9U ZXN0cy9UaWFub0NvbXByZXNzLnB5IiwgbGluZSA2OSwgaW4gPG1vZHVsZT4KPiA+ID4gPiA+ICAg ICBUaGVUZXN0U3VpdGUgPSBUZXN0VG9vbHMuTWFrZVRoZVRlc3RTdWl0ZShsb2NhbHMoKSkKPiA+ ID4gPiA+ICAgRmlsZSAiL2hvbWUvamFya2tvL1Byb2plY3RzL3RwbS9vcHRlZS9lZGsyL0Jhc2VU b29scy9UZXN0cy9UZXN0VG9vbHMucHkiLCBsaW5lIDQzLCBpbiBNYWtlVGhlVGVzdFN1aXRlCj4g PiA+ID4gPiAgICAgZm9yIG5hbWUsIGl0ZW0gaW4gbG9jYWxJdGVtcy5pdGVyaXRlbXMoKToKPiA+ ID4gPiA+IEF0dHJpYnV0ZUVycm9yOiAnZGljdCcgb2JqZWN0IGhhcyBubyBhdHRyaWJ1dGUgJ2l0 ZXJpdGVtcycKPiA+ID4gPgo+ID4gPiA+IFJpZ2h0LiBTYW1lIGhlcmUgYWZ0ZXIgcmVtb3Zpbmcg YWxsIHRyYWNlcyBvZiBQeXRob24yIGZyb20gbXkgc3lzdGVtIDotLwo+ID4gPiA+Cj4gPiA+ID4g QSBjb3VwbGUgb2YgZml4ZXMgYXJlIG5lZWRlZDoKPiA+ID4gPiAxLiBFREsyIG5lZWRzIHRvIGJl IHVwZ3JhZGVkIHRvIHRhZyBvciBsYXRlciBbMV0KPiA+ID4gPiAyLiBUaGUgUFlUSE9OM19FTkFC TEUgZW52aXJvbm1lbnQgdmFyaWFibGUgbmVlZHMgdG8gYmUgc2V0IHRvIFRSVUUgWzJdCj4gPiA+ ID4KPiA+ID4gPiBbMV0gaHR0cHM6Ly9naXRodWIuY29tL09QLVRFRS9tYW5pZmVzdC9wdWxsLzE3 Nwo+ID4gPiA+IFsyXSBodHRwczovL2dpdGh1Yi5jb20vT1AtVEVFL2J1aWxkL3B1bGwvNDUwCj4g PiA+Cj4gPiA+IEJUVywgSXMgdG8gKnJlYWxseSogaW1wb3NzaWJsZSB0byB0ZXN0IHRoaXMgd2l0 aCBwbGFpbiBCdWlsZFJvb3QuICBJdCdzCj4gPiA+IG9idmlvdXMgdGhhdCB0aGlzIGZvcmtzIEJS IGludGVybmFsbHkuCj4gPiA+Cj4gPiA+IEkgbWVhbiBldmVuIGlmIEkgZ2V0IHRoaXMgd29ya2lu ZyBvbmNlLCB0aGlzIHdpbGwgZmVlbHMgbGlrZSBhIGNsdW1zeSB3YXkKPiA+ID4gdG8gdGVzdCBB YXJjaDY0IHJlZ3VsYXJseS4gSSB1c2UgQnVpbGRSb290IGV4dGVuc2l2ZWx5IGZvciB4ODYgdGVz dGluZy4gQW5kCj4gPiA+IGl0IHdvdWxkIGJlIG5pY2UgdG8gYmUgYWJsZSB0byBzdGFydCBkb2lu ZyByZWd1bGFyIEFSTSB0ZXN0aW5nLgo+ID4gCj4gPiBUaGUgbWFpbiByZWFzb24gdG8gZ3VpZGUg eW91IHRvd2FyZHMgdGhlIE9QLVRFRSBidWlsZCBzeXN0ZW0gaXMgdGhhdAo+ID4geW91IHdpbGwg YmUgYWJsZSB0byBidWlsZCBhbGwgdGhlIGZpcm13YXJlcyAoVEYtQSwgT1AtVEVFLCBlZGsyIGV0 Yy4pCj4gPiBmcm9tIHNvdXJjZS4gSWYgeW91IGRvbid0IG5lZWQgdG8gcmVidWlsZCB0aG9zZSB0 aGVuIEkgaGF2ZSBwcmVwYXJlZCBhCj4gPiBmbGFzaCBmaXJtd2FyZSBiaW5hcnkgYmxvYiBmb3Ig eW91ciB0ZXN0aW5nIChhdHRhY2hlZCBmbGFzaC5iaW4pLiBTbwo+ID4gUWVtdSBjbWRsaW5lIHdp bGwgbG9vayBsaWtlOgo+ID4gCj4gPiAkIHFlbXUtc3lzdGVtLWFhcmNoNjQgLW5vZ3JhcGhpYyAt cyAtbWFjaGluZSB2aXJ0LHNlY3VyZT1vbiAtY3B1Cj4gPiBjb3J0ZXgtYTU3IC1rZXJuZWwgb3V0 L2Jpbi9JbWFnZSAtbm8tYWNwaSAtYXBwZW5kCj4gPiAnY29uc29sZT10dHlBTUEwLDM4NDAwIGtl ZXBfYm9vdGNvbiByb290PS9kZXYvdmRhMicgLWluaXRyZAo+ID4gb3V0L2Jpbi9yb290ZnMuY3Bp by5neiAtc21wIDIgLW0gMTAyNCAtYmlvcyBmbGFzaC5iaW4gLWQgdW5pbXAKPiAKPiBJIHNwZW50 dCBjb3VwbGUgb2YgZGF5cyB0byB0cnkgdG8gZ2V0IHRoaXMgcnVubmluZy4KPiAKPiBIZXJlJ3Mg dGhlIGxvZzoKPiAKPiDina8gLi9xZW11LnNoCj4gTk9USUNFOiAgQm9vdGluZyBUcnVzdGVkIEZp cm13YXJlCj4gTk9USUNFOiAgQkwxOiB2Mi4zKCk6djIuMwo+IE5PVElDRTogIEJMMTogQnVpbHQg OiAxMzoyODowNCwgSmFuIDI1IDIwMjEKPiBOT1RJQ0U6ICBCTDE6IEJvb3RpbmcgQkwyCj4gTk9U SUNFOiAgQkwyOiB2Mi4zKCk6djIuMwo+IE5PVElDRTogIEJMMjogQnVpbHQgOiAxMzoyODowNiwg SmFuIDI1IDIwMjEKPiBOT1RJQ0U6ICBCTDE6IEJvb3RpbmcgQkwzMQo+IE5PVElDRTogIEJMMzE6 IHYyLjMoKTp2Mi4zCj4gTk9USUNFOiAgQkwzMTogQnVpbHQgOiAxMzoyODowOCwgSmFuIDI1IDIw MjEKPiBVRUZJIGZpcm13YXJlICh2ZXJzaW9uICBidWlsdCBhdCAxODo0OToyNyBvbiBOb3YgMTgg MjAxOSkKPiBwZmxhc2hfd3JpdGU6IFdyaXRlIHRvIGJ1ZmZlciBlbXVsYXRpb24gaXMgZmxhd2Vk Cj4gcGZsYXNoX3dyaXRlOiBXcml0ZSB0byBidWZmZXIgZW11bGF0aW9uIGlzIGZsYXdlZAo+IEVG SSBzdHViOiBCb290aW5nIExpbnV4IEtlcm5lbC4uLgo+IEVGSSBzdHViOiBVc2luZyBEVEIgZnJv bSBjb25maWd1cmF0aW9uIHRhYmxlCj4gRUZJIHN0dWI6IEV4aXRpbmcgYm9vdCBzZXJ2aWNlcyBh bmQgaW5zdGFsbGluZyB2aXJ0dWFsIGFkZHJlc3MgbWFwLi4uCj4gQm9vdGluZyBMaW51eCBvbiBw aHlzaWNhbCBDUFUgMHgwMDAwMDAwMDAwIFsweDQxMWZkMDcwXQo+IExpbnV4IHZlcnNpb24gNS4x MS4wLXJjNSAoamFya2tvQHN1cHBpbG92YWh2ZXJvKSAoYWFyY2g2NC1idWlsZHJvb3QtbGludXgt dWNsaWJjLWdjYy5icl9yZWFsIChCdWlsZHJvb3QgMjAyMS4wMi1yYzEtMTAtZ2E3MmM5MGI5NzIp IDkuMy4wLCBHTlUgbGQgKEdOVSBCaW51dGlscykgMi4zNS4yKSAjMSBTTVAgVGh1IEZlYiAxMSAy MjowNDo1MyBFRVQgMjAyMQo+IE1hY2hpbmUgbW9kZWw6IGxpbnV4LGR1bW15LXZpcnQKPiBlZmk6 IEVGSSB2Mi43MCBieSBFREsgSUkKPiBlZmk6IFNNQklPUz0weDdmNTIwMDAwIFNNQklPUyAzLjA9 MHg3ZjUwMDAwMCBNRU1BVFRSPTB4N2U1OWIwMTggTUVNUkVTRVJWRT0weDdjMTQzZjE4Cj4gWm9u ZSByYW5nZXM6Cj4gICBETUEgICAgICBbbWVtIDB4MDAwMDAwMDA0MDAwMDAwMC0weDAwMDAwMDAw N2ZmZmZmZmZdCj4gICBETUEzMiAgICBlbXB0eQo+ICAgTm9ybWFsICAgZW1wdHkKPiBNb3ZhYmxl IHpvbmUgc3RhcnQgZm9yIGVhY2ggbm9kZQo+IEVhcmx5IG1lbW9yeSBub2RlIHJhbmdlcwo+ICAg bm9kZSAgIDA6IFttZW0gMHgwMDAwMDAwMDQwMDAwMDAwLTB4MDAwMDAwMDA0MWZmZmZmZl0KPiAg IG5vZGUgICAwOiBbbWVtIDB4MDAwMDAwMDA0MjIwMDAwMC0weDAwMDAwMDAwN2JlM2ZmZmZdCj4g ICBub2RlICAgMDogW21lbSAweDAwMDAwMDAwN2JlNDAwMDAtMHgwMDAwMDAwMDdjMTNmZmZmXQo+ ICAgbm9kZSAgIDA6IFttZW0gMHgwMDAwMDAwMDdjMTQwMDAwLTB4MDAwMDAwMDA3ZjQxZmZmZl0K PiAgIG5vZGUgICAwOiBbbWVtIDB4MDAwMDAwMDA3ZjQyMDAwMC0weDAwMDAwMDAwN2Y0YWZmZmZd Cj4gICBub2RlICAgMDogW21lbSAweDAwMDAwMDAwN2Y0YjAwMDAtMHgwMDAwMDAwMDdmNGNmZmZm XQo+ICAgbm9kZSAgIDA6IFttZW0gMHgwMDAwMDAwMDdmNGQwMDAwLTB4MDAwMDAwMDA3ZjVkZmZm Zl0KPiAgIG5vZGUgICAwOiBbbWVtIDB4MDAwMDAwMDA3ZjVlMDAwMC0weDAwMDAwMDAwN2ZmZmZm ZmZdCj4gWmVyb2VkIHN0cnVjdCBwYWdlIGluIHVuYXZhaWxhYmxlIHJhbmdlczogODY0IHBhZ2Vz Cj4gSW5pdG1lbSBzZXR1cCBub2RlIDAgW21lbSAweDAwMDAwMDAwNDAwMDAwMDAtMHgwMDAwMDAw MDdmZmZmZmZmXQo+IHBzY2k6IHByb2JpbmcgZm9yIGNvbmR1aXQgbWV0aG9kIGZyb20gRFQuCj4g cHNjaTogUFNDSXYxLjEgZGV0ZWN0ZWQgaW4gZmlybXdhcmUuCj4gcHNjaTogVXNpbmcgc3RhbmRh cmQgUFNDSSB2MC4yIGZ1bmN0aW9uIElEcwo+IHBzY2k6IFRydXN0ZWQgT1MgbWlncmF0aW9uIG5v dCByZXF1aXJlZAo+IHBzY2k6IFNNQyBDYWxsaW5nIENvbnZlbnRpb24gdjEuMgo+IHBlcmNwdTog RW1iZWRkZWQgMjEgcGFnZXMvY3B1IHM0ODAyNCByODE5MiBkMjk4MDAgdTg2MDE2Cj4gRGV0ZWN0 ZWQgUElQVCBJLWNhY2hlIG9uIENQVTAKPiBDUFUgZmVhdHVyZXM6IGRldGVjdGVkOiBBUk0gZXJy YXR1bSA4MzIwNzUKPiBDUFUgZmVhdHVyZXM6IGRldGVjdGVkOiBTcGVjdHJlLXYyCj4gQ1BVIGZl YXR1cmVzOiBkZXRlY3RlZDogQVJNIGVycmF0YSAxMTY1NTIyLCAxMzE5MzY3LCBvciAxNTMwOTIz Cj4gQnVpbHQgMSB6b25lbGlzdHMsIG1vYmlsaXR5IGdyb3VwaW5nIG9uLiAgVG90YWwgcGFnZXM6 IDI1NzUzNgo+IEtlcm5lbCBjb21tYW5kIGxpbmU6IHJvb3Q9L2Rldi92ZGEgcncgY29uc29sZT10 dHlBTUEwLDExNTIwMAo+IERlbnRyeSBjYWNoZSBoYXNoIHRhYmxlIGVudHJpZXM6IDEzMTA3MiAo b3JkZXI6IDgsIDEwNDg1NzYgYnl0ZXMsIGxpbmVhcikKPiBJbm9kZS1jYWNoZSBoYXNoIHRhYmxl IGVudHJpZXM6IDY1NTM2IChvcmRlcjogNywgNTI0Mjg4IGJ5dGVzLCBsaW5lYXIpCj4gbWVtIGF1 dG8taW5pdDogc3RhY2s6b2ZmLCBoZWFwIGFsbG9jOm9mZiwgaGVhcCBmcmVlOm9mZgo+IE1lbW9y eTogMTAxMTI4NEsvMTA0NjUyOEsgYXZhaWxhYmxlICg2NTkySyBrZXJuZWwgY29kZSwgODA0SyBy d2RhdGEsIDE0NjBLIHJvZGF0YSwgMTA4OEsgaW5pdCwgMzIxSyBic3MsIDM1MjQ0SyByZXNlcnZl ZCwgMEsgY21hLXJlc2VydmVkKQo+IFNMVUI6IEhXYWxpZ249NjQsIE9yZGVyPTAtMywgTWluT2Jq ZWN0cz0wLCBDUFVzPTEsIE5vZGVzPTEKPiByY3U6IEhpZXJhcmNoaWNhbCBSQ1UgaW1wbGVtZW50 YXRpb24uCj4gcmN1OiAgICBSQ1UgcmVzdHJpY3RpbmcgQ1BVcyBmcm9tIE5SX0NQVVM9MjU2IHRv IG5yX2NwdV9pZHM9MS4KPiByY3U6IFJDVSBjYWxjdWxhdGVkIHZhbHVlIG9mIHNjaGVkdWxlci1l bmxpc3RtZW50IGRlbGF5IGlzIDI1IGppZmZpZXMuCj4gcmN1OiBBZGp1c3RpbmcgZ2VvbWV0cnkg Zm9yIHJjdV9mYW5vdXRfbGVhZj0xNiwgbnJfY3B1X2lkcz0xCj4gTlJfSVJRUzogNjQsIG5yX2ly cXM6IDY0LCBwcmVhbGxvY2F0ZWQgaXJxczogMAo+IEdJQ3YybTogcmFuZ2VbbWVtIDB4MDgwMjAw MDAtMHgwODAyMGZmZl0sIFNQSVs4MDoxNDNdCj4gcmFuZG9tOiBnZXRfcmFuZG9tX2J5dGVzIGNh bGxlZCBmcm9tIHN0YXJ0X2tlcm5lbCsweDM0MC8weDUzYyB3aXRoIGNybmdfaW5pdD0wCj4gYXJj aF90aW1lcjogY3AxNSB0aW1lcihzKSBydW5uaW5nIGF0IDYyLjUwTUh6ICh2aXJ0KS4KPiBjbG9j a3NvdXJjZTogYXJjaF9zeXNfY291bnRlcjogbWFzazogMHhmZmZmZmZmZmZmZmZmZiBtYXhfY3lj bGVzOiAweDFjZDQyZTIwOGMsIG1heF9pZGxlX25zOiA4ODE1OTA0MDUzMTQgbnMKPiBzY2hlZF9j bG9jazogNTYgYml0cyBhdCA2Mk1IeiwgcmVzb2x1dGlvbiAxNm5zLCB3cmFwcyBldmVyeSA0Mzk4 MDQ2NTExMDk2bnMKPiBDb25zb2xlOiBjb2xvdXIgZHVtbXkgZGV2aWNlIDgweDI1Cj4gQ2FsaWJy YXRpbmcgZGVsYXkgbG9vcCAoc2tpcHBlZCksIHZhbHVlIGNhbGN1bGF0ZWQgdXNpbmcgdGltZXIg ZnJlcXVlbmN5Li4gMTI1LjAwIEJvZ29NSVBTIChscGo9MjUwMDAwKQo+IHBpZF9tYXg6IGRlZmF1 bHQ6IDMyNzY4IG1pbmltdW06IDMwMQo+IE1vdW50LWNhY2hlIGhhc2ggdGFibGUgZW50cmllczog MjA0OCAob3JkZXI6IDIsIDE2Mzg0IGJ5dGVzLCBsaW5lYXIpCj4gTW91bnRwb2ludC1jYWNoZSBo YXNoIHRhYmxlIGVudHJpZXM6IDIwNDggKG9yZGVyOiAyLCAxNjM4NCBieXRlcywgbGluZWFyKQo+ IHJjdTogSGllcmFyY2hpY2FsIFNSQ1UgaW1wbGVtZW50YXRpb24uCj4gUmVtYXBwaW5nIGFuZCBl bmFibGluZyBFRkkgc2VydmljZXMuCj4gc21wOiBCcmluZ2luZyB1cCBzZWNvbmRhcnkgQ1BVcyAu Li4KPiBzbXA6IEJyb3VnaHQgdXAgMSBub2RlLCAxIENQVQo+IFNNUDogVG90YWwgb2YgMSBwcm9j ZXNzb3JzIGFjdGl2YXRlZC4KPiBDUFUgZmVhdHVyZXM6IGRldGVjdGVkOiAzMi1iaXQgRUwwIFN1 cHBvcnQKPiBDUFUgZmVhdHVyZXM6IGRldGVjdGVkOiBDUkMzMiBpbnN0cnVjdGlvbnMKPiBDUFU6 IEFsbCBDUFUocykgc3RhcnRlZCBhdCBFTDEKPiBhbHRlcm5hdGl2ZXM6IHBhdGNoaW5nIGtlcm5l bCBjb2RlCj4gZGV2dG1wZnM6IGluaXRpYWxpemVkCj4gY2xvY2tzb3VyY2U6IGppZmZpZXM6IG1h c2s6IDB4ZmZmZmZmZmYgbWF4X2N5Y2xlczogMHhmZmZmZmZmZiwgbWF4X2lkbGVfbnM6IDc2NDUw NDE3ODUxMDAwMDAgbnMKPiBmdXRleCBoYXNoIHRhYmxlIGVudHJpZXM6IDI1NiAob3JkZXI6IDIs IDE2Mzg0IGJ5dGVzLCBsaW5lYXIpCj4gU01CSU9TIDMuMC4wIHByZXNlbnQuCj4gRE1JOiBRRU1V IFFFTVUgVmlydHVhbCBNYWNoaW5lLCBCSU9TIDAuMC4wIDAyLzA2LzIwMTUKPiBORVQ6IFJlZ2lz dGVyZWQgcHJvdG9jb2wgZmFtaWx5IDE2Cj4gRE1BOiBwcmVhbGxvY2F0ZWQgMTI4IEtpQiBHRlBf S0VSTkVMIHBvb2wgZm9yIGF0b21pYyBhbGxvY2F0aW9ucwo+IERNQTogcHJlYWxsb2NhdGVkIDEy OCBLaUIgR0ZQX0tFUk5FTHxHRlBfRE1BIHBvb2wgZm9yIGF0b21pYyBhbGxvY2F0aW9ucwo+IERN QTogcHJlYWxsb2NhdGVkIDEyOCBLaUIgR0ZQX0tFUk5FTHxHRlBfRE1BMzIgcG9vbCBmb3IgYXRv bWljIGFsbG9jYXRpb25zCj4gaHctYnJlYWtwb2ludDogZm91bmQgNiBicmVha3BvaW50IGFuZCA0 IHdhdGNocG9pbnQgcmVnaXN0ZXJzLgo+IEFTSUQgYWxsb2NhdG9yIGluaXRpYWxpc2VkIHdpdGgg NjU1MzYgZW50cmllcwo+IFNlcmlhbDogQU1CQSBQTDAxMSBVQVJUIGRyaXZlcgo+IDkwMDAwMDAu cGwwMTE6IHR0eUFNQTAgYXQgTU1JTyAweDkwMDAwMDAgKGlycSA9IDQ2LCBiYXNlX2JhdWQgPSAw KSBpcyBhIFBMMDExIHJldjEKPiBwcmludGs6IGNvbnNvbGUgW3R0eUFNQTBdIGVuYWJsZWQKPiBp b21tdTogRGVmYXVsdCBkb21haW4gdHlwZTogVHJhbnNsYXRlZAo+IHZnYWFyYjogbG9hZGVkCj4g U0NTSSBzdWJzeXN0ZW0gaW5pdGlhbGl6ZWQKPiBSZWdpc3RlcmVkIGVmaXZhcnMgb3BlcmF0aW9u cwo+IGNsb2Nrc291cmNlOiBTd2l0Y2hlZCB0byBjbG9ja3NvdXJjZSBhcmNoX3N5c19jb3VudGVy Cj4gTkVUOiBSZWdpc3RlcmVkIHByb3RvY29sIGZhbWlseSAyCj4gdGNwX2xpc3Rlbl9wb3J0YWRk cl9oYXNoIGhhc2ggdGFibGUgZW50cmllczogNTEyIChvcmRlcjogMSwgODE5MiBieXRlcywgbGlu ZWFyKQo+IFRDUCBlc3RhYmxpc2hlZCBoYXNoIHRhYmxlIGVudHJpZXM6IDgxOTIgKG9yZGVyOiA0 LCA2NTUzNiBieXRlcywgbGluZWFyKQo+IFRDUCBiaW5kIGhhc2ggdGFibGUgZW50cmllczogODE5 MiAob3JkZXI6IDUsIDEzMTA3MiBieXRlcywgbGluZWFyKQo+IFRDUDogSGFzaCB0YWJsZXMgY29u ZmlndXJlZCAoZXN0YWJsaXNoZWQgODE5MiBiaW5kIDgxOTIpCj4gVURQIGhhc2ggdGFibGUgZW50 cmllczogNTEyIChvcmRlcjogMiwgMTYzODQgYnl0ZXMsIGxpbmVhcikKPiBVRFAtTGl0ZSBoYXNo IHRhYmxlIGVudHJpZXM6IDUxMiAob3JkZXI6IDIsIDE2Mzg0IGJ5dGVzLCBsaW5lYXIpCj4gTkVU OiBSZWdpc3RlcmVkIHByb3RvY29sIGZhbWlseSAxCj4gUENJOiBDTFMgMCBieXRlcywgZGVmYXVs dCA2NAo+IGh3IHBlcmZldmVudHM6IGVuYWJsZWQgd2l0aCBhcm12OF9wbXV2MyBQTVUgZHJpdmVy LCA1IGNvdW50ZXJzIGF2YWlsYWJsZQo+IHdvcmtpbmdzZXQ6IHRpbWVzdGFtcF9iaXRzPTYyIG1h eF9vcmRlcj0xOCBidWNrZXRfb3JkZXI9MAo+IGZ1c2U6IGluaXQgKEFQSSB2ZXJzaW9uIDcuMzMp Cj4gQmxvY2sgbGF5ZXIgU0NTSSBnZW5lcmljIChic2cpIGRyaXZlciB2ZXJzaW9uIDAuNCBsb2Fk ZWQgKG1ham9yIDI1MSkKPiBpbyBzY2hlZHVsZXIgbXEtZGVhZGxpbmUgcmVnaXN0ZXJlZAo+IGlv IHNjaGVkdWxlciBreWJlciByZWdpc3RlcmVkCj4gcGNpLWhvc3QtZ2VuZXJpYyA0MDEwMDAwMDAw LnBjaWU6IGhvc3QgYnJpZGdlIC9wY2llQDEwMDAwMDAwIHJhbmdlczoKPiBwY2ktaG9zdC1nZW5l cmljIDQwMTAwMDAwMDAucGNpZTogICAgICAgSU8gMHgwMDNlZmYwMDAwLi4weDAwM2VmZmZmZmYg LT4gMHgwMDAwMDAwMDAwCj4gcGNpLWhvc3QtZ2VuZXJpYyA0MDEwMDAwMDAwLnBjaWU6ICAgICAg TUVNIDB4MDAxMDAwMDAwMC4uMHgwMDNlZmVmZmZmIC0+IDB4MDAxMDAwMDAwMAo+IHBjaS1ob3N0 LWdlbmVyaWMgNDAxMDAwMDAwMC5wY2llOiAgICAgIE1FTSAweDgwMDAwMDAwMDAuLjB4ZmZmZmZm ZmZmZiAtPiAweDgwMDAwMDAwMDAKPiBwY2ktaG9zdC1nZW5lcmljIDQwMTAwMDAwMDAucGNpZTog TWVtb3J5IHJlc291cmNlIHNpemUgZXhjZWVkcyBtYXggZm9yIDMyIGJpdHMKPiBwY2ktaG9zdC1n ZW5lcmljIDQwMTAwMDAwMDAucGNpZTogRUNBTSBhdCBbbWVtIDB4NDAxMDAwMDAwMC0weDQwMWZm ZmZmZmZdIGZvciBbYnVzIDAwLWZmXQo+IHBjaS1ob3N0LWdlbmVyaWMgNDAxMDAwMDAwMC5wY2ll OiBQQ0kgaG9zdCBicmlkZ2UgdG8gYnVzIDAwMDA6MDAKPiBwY2lfYnVzIDAwMDA6MDA6IHJvb3Qg YnVzIHJlc291cmNlIFtidXMgMDAtZmZdCj4gcGNpX2J1cyAwMDAwOjAwOiByb290IGJ1cyByZXNv dXJjZSBbaW8gIDB4MDAwMC0weGZmZmZdCj4gcGNpX2J1cyAwMDAwOjAwOiByb290IGJ1cyByZXNv dXJjZSBbbWVtIDB4MTAwMDAwMDAtMHgzZWZlZmZmZl0KPiBwY2lfYnVzIDAwMDA6MDA6IHJvb3Qg YnVzIHJlc291cmNlIFttZW0gMHg4MDAwMDAwMDAwLTB4ZmZmZmZmZmZmZl0KPiBwY2kgMDAwMDow MDowMC4wOiBbMWIzNjowMDA4XSB0eXBlIDAwIGNsYXNzIDB4MDYwMDAwCj4gcGNpIDAwMDA6MDA6 MDEuMDogWzFhZjQ6MTAwMF0gdHlwZSAwMCBjbGFzcyAweDAyMDAwMAo+IHBjaSAwMDAwOjAwOjAx LjA6IHJlZyAweDEwOiBbaW8gIDB4MDA4MC0weDAwOWZdCj4gcGNpIDAwMDA6MDA6MDEuMDogcmVn IDB4MTQ6IFttZW0gMHgxMDAwMTAwMC0weDEwMDAxZmZmXQo+IHBjaSAwMDAwOjAwOjAxLjA6IHJl ZyAweDIwOiBbbWVtIDB4ODAwMDAwMDAwMC0weDgwMDAwMDNmZmYgNjRiaXQgcHJlZl0KPiBwY2kg MDAwMDowMDowMS4wOiByZWcgMHgzMDogW21lbSAweGZmZmMwMDAwLTB4ZmZmZmZmZmYgcHJlZl0K PiBwY2kgMDAwMDowMDowMi4wOiBbMWFmNDoxMDAxXSB0eXBlIDAwIGNsYXNzIDB4MDEwMDAwCj4g cGNpIDAwMDA6MDA6MDIuMDogcmVnIDB4MTA6IFtpbyAgMHgwMDAwLTB4MDA3Zl0KPiBwY2kgMDAw MDowMDowMi4wOiByZWcgMHgxNDogW21lbSAweDEwMDAwMDAwLTB4MTAwMDBmZmZdCj4gcGNpIDAw MDA6MDA6MDIuMDogcmVnIDB4MjA6IFttZW0gMHg4MDAwMDA0MDAwLTB4ODAwMDAwN2ZmZiA2NGJp dCBwcmVmXQo+IHBjaSAwMDAwOjAwOjAxLjA6IEJBUiA2OiBhc3NpZ25lZCBbbWVtIDB4MTAwMDAw MDAtMHgxMDAzZmZmZiBwcmVmXQo+IHBjaSAwMDAwOjAwOjAxLjA6IEJBUiA0OiBhc3NpZ25lZCBb bWVtIDB4ODAwMDAwMDAwMC0weDgwMDAwMDNmZmYgNjRiaXQgcHJlZl0KPiBwY2kgMDAwMDowMDow Mi4wOiBCQVIgNDogYXNzaWduZWQgW21lbSAweDgwMDAwMDQwMDAtMHg4MDAwMDA3ZmZmIDY0Yml0 IHByZWZdCj4gcGNpIDAwMDA6MDA6MDEuMDogQkFSIDE6IGFzc2lnbmVkIFttZW0gMHgxMDA0MDAw MC0weDEwMDQwZmZmXQo+IHBjaSAwMDAwOjAwOjAyLjA6IEJBUiAxOiBhc3NpZ25lZCBbbWVtIDB4 MTAwNDEwMDAtMHgxMDA0MWZmZl0KPiBwY2kgMDAwMDowMDowMi4wOiBCQVIgMDogYXNzaWduZWQg W2lvICAweDEwMDAtMHgxMDdmXQo+IHBjaSAwMDAwOjAwOjAxLjA6IEJBUiAwOiBhc3NpZ25lZCBb aW8gIDB4MTA4MC0weDEwOWZdCj4gdmlydGlvLXBjaSAwMDAwOjAwOjAxLjA6IGVuYWJsaW5nIGRl dmljZSAoMDAwMCAtPiAwMDAzKQo+IHZpcnRpby1wY2kgMDAwMDowMDowMi4wOiBlbmFibGluZyBk ZXZpY2UgKDAwMDAgLT4gMDAwMykKPiBjYWNoZWluZm86IFVuYWJsZSB0byBkZXRlY3QgY2FjaGUg aGllcmFyY2h5IGZvciBDUFUgMAo+IHZpcnRpb19ibGsgdmlydGlvMTogW3ZkYV0gMTIyODgwIDUx Mi1ieXRlIGxvZ2ljYWwgYmxvY2tzICg2Mi45IE1CLzYwLjAgTWlCKQo+IFNNQ0NDOiBTT0NfSUQ6 IEFSQ0hfRkVBVFVSRVMoQVJDSF9TT0NfSUQpIHJldHVybmVkIGVycm9yOiBmZmZmZmZmZmZmZmZm ZmZkCj4gTkVUOiBSZWdpc3RlcmVkIHByb3RvY29sIGZhbWlseSAxMAo+IFNlZ21lbnQgUm91dGlu ZyB3aXRoIElQdjYKPiBzaXQ6IElQdjYsIElQdjQgYW5kIE1QTFMgb3ZlciBJUHY0IHR1bm5lbGlu ZyBkcml2ZXIKPiBORVQ6IFJlZ2lzdGVyZWQgcHJvdG9jb2wgZmFtaWx5IDE3Cj4gTkVUOiBSZWdp c3RlcmVkIHByb3RvY29sIGZhbWlseSAxNQo+IE5FVDogUmVnaXN0ZXJlZCBwcm90b2NvbCBmYW1p bHkgNDAKPiByZWdpc3RlcmVkIHRhc2tzdGF0cyB2ZXJzaW9uIDEKPiBFWFQ0LWZzICh2ZGEpOiBy ZWNvdmVyeSBjb21wbGV0ZQo+IEVYVDQtZnMgKHZkYSk6IG1vdW50ZWQgZmlsZXN5c3RlbSB3aXRo IG9yZGVyZWQgZGF0YSBtb2RlLiBPcHRzOiAobnVsbCkuIFF1b3RhIG1vZGU6IGRpc2FibGVkLgo+ IFZGUzogTW91bnRlZCByb290IChleHQ0IGZpbGVzeXN0ZW0pIG9uIGRldmljZSAyNTQ6MC4KPiBk ZXZ0bXBmczogbW91bnRlZAo+IEZyZWVpbmcgdW51c2VkIGtlcm5lbCBtZW1vcnk6IDEwODhLCj4g UnVuIC9zYmluL2luaXQgYXMgaW5pdCBwcm9jZXNzCj4gbW91bnQ6IHlvdSBtdXN0IGJlIHJvb3QK PiBtb3VudDogeW91IG11c3QgYmUgcm9vdAo+IG1rZGlyOiBjYW4ndCBjcmVhdGUgZGlyZWN0b3J5 ICcvZGV2L3B0cyc6IFBlcm1pc3Npb24gZGVuaWVkCj4gbWtkaXI6IGNhbid0IGNyZWF0ZSBkaXJl Y3RvcnkgJy9kZXYvc2htJzogUGVybWlzc2lvbiBkZW5pZWQKPiBtb3VudDogeW91IG11c3QgYmUg cm9vdAo+IGhvc3RuYW1lOiBzZXRob3N0bmFtZTogT3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQKPiBT dGFydGluZyBzeXNsb2dkOiBPSwo+IFN0YXJ0aW5nIGtsb2dkOiBPSwo+IFJ1bm5pbmcgc3lzY3Rs OiBPSwo+IEluaXRpYWxpemluZyByYW5kb20gbnVtYmVyIGdlbmVyYXRvcjogT0sKPiBTYXZpbmcg cmFuZG9tIHNlZWQ6IHJhbmRvbTogZGQ6IHVuaW5pdGlhbGl6ZWQgdXJhbmRvbSByZWFkICg1MTIg Ynl0ZXMgcmVhZCkKPiBPSwo+IFN0YXJ0aW5nIG5ldHdvcms6IGlwOiBSVE5FVExJTksgYW5zd2Vy czogT3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQKPiBpcDogU0lPQ1NJRkZMQUdTOiBPcGVyYXRpb24g bm90IHBlcm1pdHRlZAo+IHNlZDogL3Byb2MvbW91bnRzOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0 b3J5Cj4gV2FpdGluZyBmb3IgaW50ZXJmYWNlIGV0aDAgdG8gYXBwZWFyLi4uLi4uLi4uLi4uLi4u IHRpbWVvdXQhCj4gcnVuLXBhcnRzOiAvZXRjL25ldHdvcmsvaWYtcHJlLXVwLmQvd2FpdF9pZmFj ZTogZXhpdCBzdGF0dXMgMQo+IEZBSUwKPiBjYW4ndCBvcGVuIC9kZXYvdHR5QU1BMDogUGVybWlz c2lvbiBkZW5pZWQKPiBjYW4ndCBvcGVuIC9kZXYvdHR5QU1BMDogUGVybWlzc2lvbiBkZW5pZWQK PiBjYW4ndCBvcGVuIC9kZXYvdHR5QU1BMDogUGVybWlzc2lvbiBkZW5pZWQKPiBjYW4ndCBvcGVu IC9kZXYvdHR5QU1BMDogUGVybWlzc2lvbiBkZW5pZWQKPiAKPiBBbmQgaXQgY29udGludWVzLi4u Cj4gCj4gVGhlIHFlbXUgY29tbWFuZCBJIGdvdCBkaWQgbm90IHdvcmsgImFzIGl0IGlzIiBhbmQg YmVjYXVzZSBJJ20gbmVpdGhlciB0b28KPiBwcm9maWNpZW50IHdpdGggcWVtdSBub3IgYWFyY2g2 NCwgaXQgdG9vayBhIHdoaWxlIHRvIGdldCBzb21ldGhpbmcgdXNhYmxlLgo+IFRoaXMgaXMgbXkg Y3VycmVudCBxZW11IGNvbW1hbmQ6Cj4gCj4gcWVtdS1zeXN0ZW0tYWFyY2g2NCAtbm9ncmFwaGlj IC1zIC1tYWNoaW5lIHZpcnQsc2VjdXJlPW9uIC1jcHUgY29ydGV4LWE1NyBcCj4gICAgICAgICAg ICAgICAgICAgICAta2VybmVsIH4vUHJvamVjdHMvdHBtL2J1aWxkcm9vdC9vdXRwdXQvaW1hZ2Vz L0ltYWdlIFwKPiAJCSAgICAtbm8tYWNwaSBcCj4gCQkgICAgLWFwcGVuZCAncm9vdD0vZGV2L3Zk YSBydyBjb25zb2xlPXR0eUFNQTAsMTE1MjAwICcgXAo+ICAgICAgICAgICAgICAgICAgICAgLWRy aXZlIGZpbGU9fi9Qcm9qZWN0cy90cG0vYnVpbGRyb290L291dHB1dC9pbWFnZXMvcm9vdGZzLmV4 dDQsZm9ybWF0PXJhdyBcCj4gICAgICAgICAgICAgICAgICAgICAtc21wIDEgXAo+IAkJICAgIC1t b25pdG9yIHRlbG5ldDoxMjcuMC4wLjE6NTU1NTUsc2VydmVyLG5vd2FpdCBcCj4gCQkgICAgLW0g MTAyNCAtYmlvcyB+L1Byb2plY3RzL3RwbS9mdy9hYXJjaDY0LWZ3LmJpbiAtZCB1bmltcAo+IAo+ IFRoZW4gSSBzdGFydCBRRU1VIG1vbml0b3IgZnJvbSBhbm90aGVyIHRlcm1pbmFsIHdpdGg6Cj4g Cj4gc29jYXQgdGNwLWNvbm5lY3Q6MTI3LjAuMC4xOjU1NTU1IGZpbGU6YHR0eWAscmF3LGVjaG89 MAo+IAo+IFNvLi4uIHdoYXQgY291bGQgYmUgdGhlIGlzc3VlIHdpdGggcGVybWlzc2lvbnM/CgpO T1RFOiBhYXJjaDY0LWZ3LmJpbiBpcyB0aGUgYmluYXJ5IGZpbGUgZm9yIEZXIHRoYXQgeW91IHBy b3ZpZGVkLiBJIGp1c3QgcmVuYW1lZCBpdC4KCi9KYXJra28KCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0 CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFk ZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK