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=-10.3 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,NICE_REPLY_A, SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 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 0C16DC11F66 for ; Tue, 29 Jun 2021 11:48:25 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id DDE9361D4A for ; Tue, 29 Jun 2021 11:48:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232809AbhF2Luv (ORCPT ); Tue, 29 Jun 2021 07:50:51 -0400 Received: from foss.arm.com ([217.140.110.172]:49420 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232664AbhF2Luv (ORCPT ); Tue, 29 Jun 2021 07:50:51 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 951E1106F; Tue, 29 Jun 2021 04:48:23 -0700 (PDT) Received: from [10.57.46.146] (unknown [10.57.46.146]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 886783F718; Tue, 29 Jun 2021 04:48:19 -0700 (PDT) Subject: =?UTF-8?Q?Re=3a_=e2=9d=8c_FAIL=3a_Test_report_for_kernel_5=2e13=2e0?= =?UTF-8?Q?-rc7_=28arm-next=2c_8ab9b1a9=29?= From: Robin Murphy To: ACPI Devel Maling List Cc: Veronika Kabatova , Will Deacon , CKI Project , Mark Rutland , Memory Management , skt-results-master@redhat.com, Jeff Bastian , Jan Stancek , Linux ARM , rjw@rjwysocki.net, lenb@kernel.org, guohanjun@huawei.com, Lorenzo Pieralisi , sudeep.holla@arm.com, ardb@kernel.org, Catalin Marinas , lv.zheng@intel.com, tony.luck@intel.com References: <20210625083918.GA2736@willie-the-truck> <31ffe8fc-f5ee-2858-26c5-0fd8bdd68702@arm.com> <20210625110944.GB20835@arm.com> <48b23351-3dba-bec8-242f-3c918ae55708@arm.com> Message-ID: <8a28663f-6541-6ff4-3de0-b140e3f8a5b9@arm.com> Date: Tue, 29 Jun 2021 12:48:14 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 MIME-Version: 1.0 In-Reply-To: <48b23351-3dba-bec8-242f-3c918ae55708@arm.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-GB Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org [ +ACPI audience ] On 2021-06-25 12:15, Robin Murphy wrote: > On 2021-06-25 12:09, Catalin Marinas wrote: >> On Fri, Jun 25, 2021 at 12:02:52PM +0100, Robin Murphy wrote: >>> On 2021-06-25 10:52, Veronika Kabatova wrote: >>> [...] >>>>>>          ❌ stress: stress-ng >>>>> >>>>> Oh no, this looks like another alignment fault in memcpy: >>>>> >>>>> [13330.651903] Unable to handle kernel paging request at virtual >>>>> address ffff8000534705ff >>>>> [13330.651914] Mem abort info: >>>>> [13330.651918]   ESR = 0x96000021 >>>>> [13330.651922]   EC = 0x25: DABT (current EL), IL = 32 bits >>>>> [13330.651928]   SET = 0, FnV = 0 >>>>> [13330.651931]   EA = 0, S1PTW = 0 >>>>> [13330.651933]   FSC = 0x21: alignment fault >>>>> [13330.651938] Data abort info: >>>>> [13330.651940]   ISV = 0, ISS = 0x00000021 >>>>> [13330.651941]   CM = 0, WnR = 0 >>>>> [13330.651943] swapper pgtable: 4k pages, 48-bit VAs, >>>>> pgdp=00000000f3e6b000 >>>>> [13330.651945] [ffff8000534705ff] pgd=1000008ffcfff003, >>>>> p4d=1000008ffcfff003, pud=100000088e57d003, pmd=10000008d0aeb003, >>>>> pte=006800008021370f >>>>> [13330.651956] Internal error: Oops: 96000021 [#1] SMP >>>>> [13330.651961] Modules linked in: unix_diag binfmt_misc fcrypt >>>>> sm4_generic crc32_generic md4 michael_mic nhpoly1305_neon >>>>> nhpoly1305 poly1305_generic libpoly1305 poly1305_neon rmd160 >>>>> sha3_generic sm3_generic streebog_generic wp512 blowfish_generic >>>>> blowfish_common cast5_generic des_generic libdes chacha_generic >>>>> chacha_neon libchacha camellia_generic cast6_generic cast_common >>>>> serpent_generic twofish_generic twofish_common dm_thin_pool >>>>> dm_persistent_data dm_bio_prison nvme nvme_core ipmi_watchdog >>>>> ipmi_poweroff loop tun af_key crypto_user scsi_transport_iscsi >>>>> xt_multiport ip_gre ip_tunnel gre overlay xt_CONNSECMARK xt_SECMARK >>>>> nft_counter xt_state xt_conntrack nft_compat ah6 ah4 nft_objref >>>>> nft_ct nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 nf_tables >>>>> nfnetlink jfs sctp ip6_udp_tunnel udp_tunnel dm_log_writes >>>>> dm_flakey rfkill mlx5_ib ib_uverbs ib_core sunrpc coresight_etm4x >>>>> i2c_smbus coresight_replicator coresight_tpiu coresight_tmc joydev >>>>> mlx5_core acpi_ipmi psample ipmi_ssif mlxfw ! >>>>>    ipmi_devintf >>>>> [13330.652076]  ipmi_msghandler coresight_funnel thunderx2_pmu >>>>> coresight vfat fat fuse zram ip_tables xfs ast crct10dif_ce >>>>> i2c_algo_bit ghash_ce drm_vram_helper drm_kms_helper syscopyarea >>>>> sysfillrect sysimgblt fb_sys_fops cec drm_ttm_helper ttm drm >>>>> gpio_xlp i2c_xlp9xx uas usb_storage aes_neon_bs [last unloaded: nvmet] >>>>> [13330.652123] CPU: 115 PID: 188446 Comm: stress-ng Tainted: >>>>> G           OEL    5.13.0-rc7 #1 >>>>> [13330.652129] Hardware name: HPE Apollo 70 >>>>> /C01_APACHE_MB         , BIOS L50_5.13_1.15 05/08/2020 >>>>> [13330.652133] pstate: 80400009 (Nzcv daif +PAN -UAO -TCO BTYPE=--) >>>>> [13330.652139] pc : __memcpy+0x168/0x250 >>>>> [13330.652150] lr : memory_read_from_buffer+0x58/0x80 >>>>> [13330.652161] sp : ffff800063ef3c20 >>>>> [13330.652163] x29: ffff800063ef3c20 x28: ffff0008b1380000 x27: >>>>> 0000000000000000 >>>>> [13330.652170] x26: 0000000000000000 x25: 0000000000000000 x24: >>>>> ffff00080a960fe0 >>>>> [13330.652176] x23: ffff800063ef3d28 x22: 000000000000063f x21: >>>>> ffff800063ef3c88 >>>>> [13330.652181] x20: 000000000000063f x19: 000000000000063f x18: >>>>> 0000000000000000 >>>>> [13330.652186] x17: 0000000000000000 x16: 0000000000000000 x15: >>>>> 0000000000000000 >>>>> [13330.652191] x14: 0000000000000000 x13: 0000000000000000 x12: >>>>> 0000000000000000 >>>>> [13330.652196] x11: 0000000000000000 x10: 0000000000000000 x9 : >>>>> 0000000000000000 >>>>> [13330.652200] x8 : 0000000000000000 x7 : 0000000000000000 x6 : >>>>> 0000000000000000 >>>>> [13330.652206] x5 : ffff000d0fb0063f x4 : ffff80005347063f x3 : >>>>> ffff000d0fb005c0 >>>>> [13330.652212] x2 : ffffffffffffffef x1 : ffff800053470600 x0 : >>>>> ffff000d0fb00000 >>>>> [13330.652218] Call trace: >>>>> [13330.652221]  __memcpy+0x168/0x250 >>>>> [13330.652225]  acpi_data_show+0x5c/0x8c >>>>> [13330.652232]  sysfs_kf_bin_read+0x78/0xa0 >>>>> [13330.652238]  kernfs_file_read_iter+0x9c/0x1a4 >>>>> [13330.652241]  kernfs_fop_read_iter+0x34/0x50 >>>>> [13330.652244]  new_sync_read+0xdc/0x154 >>>>> [13330.652253]  vfs_read+0x158/0x1e4 >>>>> [13330.652260]  ksys_read+0x64/0xec >>>>> [13330.652266]  __arm64_sys_read+0x28/0x34 >>>>> [13330.652273]  invoke_syscall+0x50/0x120 >>>>> [13330.652280]  el0_svc_common.constprop.0+0x4c/0xd4 >>>>> [13330.652284]  do_el0_svc+0x30/0x9c >>>>> [13330.652286]  el0_svc+0x2c/0x54 >>>>> [13330.652294]  el0t_64_sync_handler+0x1a4/0x1b0 >>>>> [13330.652296]  el0t_64_sync+0x19c/0x1a0 >>>>> [13330.652303] Code: a984346c a9c4342c f1010042 54fffee8 (a97c3c8e) >>>>> [13330.652307] ---[ end trace 227d4380f57145d4 ]--- >>>>> >>>>> So maybe this issue isn't limited to weird modules, after all... >>>>> >>>> >>>> It ran on the machine from the same set that we were able to reproduce >>>> it on previously. If you or anyone else have an idea on how to >>>> stabilize >>>> the reproducibility or have a debug patch we'll be happy to try it. >>> >>> Possibly it depends on the individual machines' firmware exactly how the >>> relevant bits of their ACPI tables are aligned in memory? >>> >>> I've started digging into that callstack - it may not be a "weird >>> module" >>> but it's definitely crusty ACPI code... a238317ce818 ("ACPI: Clean up >>> acpi_os_map/unmap_memory() to eliminate __iomem.") looks frankly a bit >>> questionable in its decision to blithely cast away __iomem, but then the >>> rationale in aafc65c731fe ("ACPI: add arm64 to the platforms that use >>> ioremap") seems particularly dubious on top of that (especially given >>> this >>> end result). >>> >>> At a wild guess, I'm wondering if this may be sufficient: >>> >>> ----->8----- >>> diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c >>> index 327e1b4eb6b0..f5d26b102fbe 100644 >>> --- a/drivers/acpi/osl.c >>> +++ b/drivers/acpi/osl.c >>> @@ -277,7 +277,7 @@ acpi_map_lookup_virt(void __iomem *virt, >>> acpi_size size) >>>          return NULL; >>>   } >>> >>> -#if defined(CONFIG_IA64) || defined(CONFIG_ARM64) >>> +#if defined(CONFIG_IA64) >>>   /* ioremap will take care of cache attributes */ >>>   #define should_use_kmap(pfn)   0 >>>   #else >>> -----8<----- >> >> I thought the same but shouldn't acpi_os_ioremap() map it with the right >> attributes? It uses the EFI maps to check what kind of memory this is. > > Oh crikey, I missed that branch of the rabbit hole... I guess that must > mean that the tables being poked here are *not* covered by the EFI > memory map, so page_is_ram() is unlikely to help either :( After picking through the UEFI spec I think I've now got a clearer picture of what's happening, but I'm not sure where it goes from here... The spec implies that it *is* legitimate for runtime-loaded ACPI tables to lie outside the EFI memory map, and that case they must be assumed to be uncached, so the behaviour of acpi_os_ioremap() is correct. Given the definition of uncached for arm64 memory types though, that means that callers of acpi_os_map_memory() still have to be prepared to get an __iomem pointer back even if they know they're mapping a table rather than some random bit of MMIO for an AML method. Therefore in this case it seems the blame lies partway between acpi_os_map_memory() for casting away __iomem and acpi_data_show() for letting an arbitrary offset lead to an arbitrarily-aligned memcpy(), but I don't know what the best way to fix it is. Either way I've satisfied myself that it's not an issue with the arm64 code itself - I do wonder whether this might also be a problem on IA-64 given ACPI_MISALIGNMENT_NOT_SUPPORTED, and I guess RISC-V may have alignment concerns as well. Robin. 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=-10.7 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 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 8AFB4C11F66 for ; Tue, 29 Jun 2021 11:50:31 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 571736101A for ; Tue, 29 Jun 2021 11:50:31 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 571736101A Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=arm.com 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=bombadil.20210309; h=Sender:Content-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:References: Cc:To:From:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=1AOh1TClU0PPzSoJ9MJM6zlhafNCefBUGgHWbqgd1DQ=; b=K23Zp1ZthAYOR03/buY3qTAU54 GD+GK7jO845KzNsumE4vMl8/o38ueIG5hZNCSZZAwLbmfBKfErWrDxUJqg5vLaTFoUMzDH43ouVrc GKi53Jqs217knxrNY4NXpnO3uE45B35nFOs/3HNSO/lqiumVb0F68aBGDSgx+nU2tcO7xUs1m+c9A Q+w4jrxr4EbM1KxG5TL85ubr+CrRX771HiYd0gsPrS4zRarnv00J3iOb/Iv1YqEuGIvAxXxhIMPRx 1jtnoya1ePe8iQ+6n+ovxbZR2czrBWphKDxU9lW2gcoUPq2H7bxiBCRrz6INzo2o9pD+bgAB5yGtN cqCdmbdQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1lyCE9-00AixN-10; Tue, 29 Jun 2021 11:48:29 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1lyCE5-00Aiwu-E5 for linux-arm-kernel@lists.infradead.org; Tue, 29 Jun 2021 11:48:27 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 951E1106F; Tue, 29 Jun 2021 04:48:23 -0700 (PDT) Received: from [10.57.46.146] (unknown [10.57.46.146]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 886783F718; Tue, 29 Jun 2021 04:48:19 -0700 (PDT) Subject: =?UTF-8?Q?Re=3a_=e2=9d=8c_FAIL=3a_Test_report_for_kernel_5=2e13=2e0?= =?UTF-8?Q?-rc7_=28arm-next=2c_8ab9b1a9=29?= From: Robin Murphy To: ACPI Devel Maling List Cc: Veronika Kabatova , Will Deacon , CKI Project , Mark Rutland , Memory Management , skt-results-master@redhat.com, Jeff Bastian , Jan Stancek , Linux ARM , rjw@rjwysocki.net, lenb@kernel.org, guohanjun@huawei.com, Lorenzo Pieralisi , sudeep.holla@arm.com, ardb@kernel.org, Catalin Marinas , lv.zheng@intel.com, tony.luck@intel.com References: <20210625083918.GA2736@willie-the-truck> <31ffe8fc-f5ee-2858-26c5-0fd8bdd68702@arm.com> <20210625110944.GB20835@arm.com> <48b23351-3dba-bec8-242f-3c918ae55708@arm.com> Message-ID: <8a28663f-6541-6ff4-3de0-b140e3f8a5b9@arm.com> Date: Tue, 29 Jun 2021 12:48:14 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 MIME-Version: 1.0 In-Reply-To: <48b23351-3dba-bec8-242f-3c918ae55708@arm.com> Content-Language: en-GB X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210629_044825_619487_E151B04B X-CRM114-Status: GOOD ( 25.55 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org WyArQUNQSSBhdWRpZW5jZSBdCgpPbiAyMDIxLTA2LTI1IDEyOjE1LCBSb2JpbiBNdXJwaHkgd3Jv dGU6Cj4gT24gMjAyMS0wNi0yNSAxMjowOSwgQ2F0YWxpbiBNYXJpbmFzIHdyb3RlOgo+PiBPbiBG cmksIEp1biAyNSwgMjAyMSBhdCAxMjowMjo1MlBNICswMTAwLCBSb2JpbiBNdXJwaHkgd3JvdGU6 Cj4+PiBPbiAyMDIxLTA2LTI1IDEwOjUyLCBWZXJvbmlrYSBLYWJhdG92YSB3cm90ZToKPj4+IFsu Li5dCj4+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgIOKdjCBzdHJlc3M6IHN0cmVzcy1uZwo+Pj4+Pgo+ Pj4+PiBPaCBubywgdGhpcyBsb29rcyBsaWtlIGFub3RoZXIgYWxpZ25tZW50IGZhdWx0IGluIG1l bWNweToKPj4+Pj4KPj4+Pj4gWzEzMzMwLjY1MTkwM10gVW5hYmxlIHRvIGhhbmRsZSBrZXJuZWwg cGFnaW5nIHJlcXVlc3QgYXQgdmlydHVhbCAKPj4+Pj4gYWRkcmVzcyBmZmZmODAwMDUzNDcwNWZm Cj4+Pj4+IFsxMzMzMC42NTE5MTRdIE1lbSBhYm9ydCBpbmZvOgo+Pj4+PiBbMTMzMzAuNjUxOTE4 XcKgwqAgRVNSID0gMHg5NjAwMDAyMQo+Pj4+PiBbMTMzMzAuNjUxOTIyXcKgwqAgRUMgPSAweDI1 OiBEQUJUIChjdXJyZW50IEVMKSwgSUwgPSAzMiBiaXRzCj4+Pj4+IFsxMzMzMC42NTE5MjhdwqDC oCBTRVQgPSAwLCBGblYgPSAwCj4+Pj4+IFsxMzMzMC42NTE5MzFdwqDCoCBFQSA9IDAsIFMxUFRX ID0gMAo+Pj4+PiBbMTMzMzAuNjUxOTMzXcKgwqAgRlNDID0gMHgyMTogYWxpZ25tZW50IGZhdWx0 Cj4+Pj4+IFsxMzMzMC42NTE5MzhdIERhdGEgYWJvcnQgaW5mbzoKPj4+Pj4gWzEzMzMwLjY1MTk0 MF3CoMKgIElTViA9IDAsIElTUyA9IDB4MDAwMDAwMjEKPj4+Pj4gWzEzMzMwLjY1MTk0MV3CoMKg IENNID0gMCwgV25SID0gMAo+Pj4+PiBbMTMzMzAuNjUxOTQzXSBzd2FwcGVyIHBndGFibGU6IDRr IHBhZ2VzLCA0OC1iaXQgVkFzLCAKPj4+Pj4gcGdkcD0wMDAwMDAwMGYzZTZiMDAwCj4+Pj4+IFsx MzMzMC42NTE5NDVdIFtmZmZmODAwMDUzNDcwNWZmXSBwZ2Q9MTAwMDAwOGZmY2ZmZjAwMywgCj4+ Pj4+IHA0ZD0xMDAwMDA4ZmZjZmZmMDAzLCBwdWQ9MTAwMDAwMDg4ZTU3ZDAwMywgcG1kPTEwMDAw MDA4ZDBhZWIwMDMsIAo+Pj4+PiBwdGU9MDA2ODAwMDA4MDIxMzcwZgo+Pj4+PiBbMTMzMzAuNjUx OTU2XSBJbnRlcm5hbCBlcnJvcjogT29wczogOTYwMDAwMjEgWyMxXSBTTVAKPj4+Pj4gWzEzMzMw LjY1MTk2MV0gTW9kdWxlcyBsaW5rZWQgaW46IHVuaXhfZGlhZyBiaW5mbXRfbWlzYyBmY3J5cHQg Cj4+Pj4+IHNtNF9nZW5lcmljIGNyYzMyX2dlbmVyaWMgbWQ0IG1pY2hhZWxfbWljIG5ocG9seTEz MDVfbmVvbiAKPj4+Pj4gbmhwb2x5MTMwNSBwb2x5MTMwNV9nZW5lcmljIGxpYnBvbHkxMzA1IHBv bHkxMzA1X25lb24gcm1kMTYwIAo+Pj4+PiBzaGEzX2dlbmVyaWMgc20zX2dlbmVyaWMgc3RyZWVi b2dfZ2VuZXJpYyB3cDUxMiBibG93ZmlzaF9nZW5lcmljIAo+Pj4+PiBibG93ZmlzaF9jb21tb24g Y2FzdDVfZ2VuZXJpYyBkZXNfZ2VuZXJpYyBsaWJkZXMgY2hhY2hhX2dlbmVyaWMgCj4+Pj4+IGNo YWNoYV9uZW9uIGxpYmNoYWNoYSBjYW1lbGxpYV9nZW5lcmljIGNhc3Q2X2dlbmVyaWMgY2FzdF9j b21tb24gCj4+Pj4+IHNlcnBlbnRfZ2VuZXJpYyB0d29maXNoX2dlbmVyaWMgdHdvZmlzaF9jb21t b24gZG1fdGhpbl9wb29sIAo+Pj4+PiBkbV9wZXJzaXN0ZW50X2RhdGEgZG1fYmlvX3ByaXNvbiBu dm1lIG52bWVfY29yZSBpcG1pX3dhdGNoZG9nIAo+Pj4+PiBpcG1pX3Bvd2Vyb2ZmIGxvb3AgdHVu IGFmX2tleSBjcnlwdG9fdXNlciBzY3NpX3RyYW5zcG9ydF9pc2NzaSAKPj4+Pj4geHRfbXVsdGlw b3J0IGlwX2dyZSBpcF90dW5uZWwgZ3JlIG92ZXJsYXkgeHRfQ09OTlNFQ01BUksgeHRfU0VDTUFS SyAKPj4+Pj4gbmZ0X2NvdW50ZXIgeHRfc3RhdGUgeHRfY29ubnRyYWNrIG5mdF9jb21wYXQgYWg2 IGFoNCBuZnRfb2JqcmVmIAo+Pj4+PiBuZnRfY3QgbmZfY29ubnRyYWNrIG5mX2RlZnJhZ19pcHY2 IG5mX2RlZnJhZ19pcHY0IG5mX3RhYmxlcyAKPj4+Pj4gbmZuZXRsaW5rIGpmcyBzY3RwIGlwNl91 ZHBfdHVubmVsIHVkcF90dW5uZWwgZG1fbG9nX3dyaXRlcyAKPj4+Pj4gZG1fZmxha2V5IHJma2ls bCBtbHg1X2liIGliX3V2ZXJicyBpYl9jb3JlIHN1bnJwYyBjb3Jlc2lnaHRfZXRtNHggCj4+Pj4+ IGkyY19zbWJ1cyBjb3Jlc2lnaHRfcmVwbGljYXRvciBjb3Jlc2lnaHRfdHBpdSBjb3Jlc2lnaHRf dG1jIGpveWRldiAKPj4+Pj4gbWx4NV9jb3JlIGFjcGlfaXBtaSBwc2FtcGxlIGlwbWlfc3NpZiBt bHhmdyAhCj4+Pj4+IMKgwqAgaXBtaV9kZXZpbnRmCj4+Pj4+IFsxMzMzMC42NTIwNzZdwqAgaXBt aV9tc2doYW5kbGVyIGNvcmVzaWdodF9mdW5uZWwgdGh1bmRlcngyX3BtdSAKPj4+Pj4gY29yZXNp Z2h0IHZmYXQgZmF0IGZ1c2UgenJhbSBpcF90YWJsZXMgeGZzIGFzdCBjcmN0MTBkaWZfY2UgCj4+ Pj4+IGkyY19hbGdvX2JpdCBnaGFzaF9jZSBkcm1fdnJhbV9oZWxwZXIgZHJtX2ttc19oZWxwZXIg c3lzY29weWFyZWEgCj4+Pj4+IHN5c2ZpbGxyZWN0IHN5c2ltZ2JsdCBmYl9zeXNfZm9wcyBjZWMg ZHJtX3R0bV9oZWxwZXIgdHRtIGRybSAKPj4+Pj4gZ3Bpb194bHAgaTJjX3hscDl4eCB1YXMgdXNi X3N0b3JhZ2UgYWVzX25lb25fYnMgW2xhc3QgdW5sb2FkZWQ6IG52bWV0XQo+Pj4+PiBbMTMzMzAu NjUyMTIzXSBDUFU6IDExNSBQSUQ6IDE4ODQ0NiBDb21tOiBzdHJlc3MtbmcgVGFpbnRlZDogCj4+ Pj4+IEfCoMKgwqDCoMKgwqDCoMKgwqDCoCBPRUzCoMKgwqAgNS4xMy4wLXJjNyAjMQo+Pj4+PiBb MTMzMzAuNjUyMTI5XSBIYXJkd2FyZSBuYW1lOiBIUEUgQXBvbGxvIDcwICAgICAgICAgICAgIAo+ Pj4+PiAvQzAxX0FQQUNIRV9NQsKgwqDCoMKgwqDCoMKgwqAgLCBCSU9TIEw1MF81LjEzXzEuMTUg MDUvMDgvMjAyMAo+Pj4+PiBbMTMzMzAuNjUyMTMzXSBwc3RhdGU6IDgwNDAwMDA5IChOemN2IGRh aWYgK1BBTiAtVUFPIC1UQ08gQlRZUEU9LS0pCj4+Pj4+IFsxMzMzMC42NTIxMzldIHBjIDogX19t ZW1jcHkrMHgxNjgvMHgyNTAKPj4+Pj4gWzEzMzMwLjY1MjE1MF0gbHIgOiBtZW1vcnlfcmVhZF9m cm9tX2J1ZmZlcisweDU4LzB4ODAKPj4+Pj4gWzEzMzMwLjY1MjE2MV0gc3AgOiBmZmZmODAwMDYz ZWYzYzIwCj4+Pj4+IFsxMzMzMC42NTIxNjNdIHgyOTogZmZmZjgwMDA2M2VmM2MyMCB4Mjg6IGZm ZmYwMDA4YjEzODAwMDAgeDI3OiAKPj4+Pj4gMDAwMDAwMDAwMDAwMDAwMAo+Pj4+PiBbMTMzMzAu NjUyMTcwXSB4MjY6IDAwMDAwMDAwMDAwMDAwMDAgeDI1OiAwMDAwMDAwMDAwMDAwMDAwIHgyNDog Cj4+Pj4+IGZmZmYwMDA4MGE5NjBmZTAKPj4+Pj4gWzEzMzMwLjY1MjE3Nl0geDIzOiBmZmZmODAw MDYzZWYzZDI4IHgyMjogMDAwMDAwMDAwMDAwMDYzZiB4MjE6IAo+Pj4+PiBmZmZmODAwMDYzZWYz Yzg4Cj4+Pj4+IFsxMzMzMC42NTIxODFdIHgyMDogMDAwMDAwMDAwMDAwMDYzZiB4MTk6IDAwMDAw MDAwMDAwMDA2M2YgeDE4OiAKPj4+Pj4gMDAwMDAwMDAwMDAwMDAwMAo+Pj4+PiBbMTMzMzAuNjUy MTg2XSB4MTc6IDAwMDAwMDAwMDAwMDAwMDAgeDE2OiAwMDAwMDAwMDAwMDAwMDAwIHgxNTogCj4+ Pj4+IDAwMDAwMDAwMDAwMDAwMDAKPj4+Pj4gWzEzMzMwLjY1MjE5MV0geDE0OiAwMDAwMDAwMDAw MDAwMDAwIHgxMzogMDAwMDAwMDAwMDAwMDAwMCB4MTI6IAo+Pj4+PiAwMDAwMDAwMDAwMDAwMDAw Cj4+Pj4+IFsxMzMzMC42NTIxOTZdIHgxMTogMDAwMDAwMDAwMDAwMDAwMCB4MTA6IDAwMDAwMDAw MDAwMDAwMDAgeDkgOiAKPj4+Pj4gMDAwMDAwMDAwMDAwMDAwMAo+Pj4+PiBbMTMzMzAuNjUyMjAw XSB4OCA6IDAwMDAwMDAwMDAwMDAwMDAgeDcgOiAwMDAwMDAwMDAwMDAwMDAwIHg2IDogCj4+Pj4+ IDAwMDAwMDAwMDAwMDAwMDAKPj4+Pj4gWzEzMzMwLjY1MjIwNl0geDUgOiBmZmZmMDAwZDBmYjAw NjNmIHg0IDogZmZmZjgwMDA1MzQ3MDYzZiB4MyA6IAo+Pj4+PiBmZmZmMDAwZDBmYjAwNWMwCj4+ Pj4+IFsxMzMzMC42NTIyMTJdIHgyIDogZmZmZmZmZmZmZmZmZmZlZiB4MSA6IGZmZmY4MDAwNTM0 NzA2MDAgeDAgOiAKPj4+Pj4gZmZmZjAwMGQwZmIwMDAwMAo+Pj4+PiBbMTMzMzAuNjUyMjE4XSBD YWxsIHRyYWNlOgo+Pj4+PiBbMTMzMzAuNjUyMjIxXcKgIF9fbWVtY3B5KzB4MTY4LzB4MjUwCj4+ Pj4+IFsxMzMzMC42NTIyMjVdwqAgYWNwaV9kYXRhX3Nob3crMHg1Yy8weDhjCj4+Pj4+IFsxMzMz MC42NTIyMzJdwqAgc3lzZnNfa2ZfYmluX3JlYWQrMHg3OC8weGEwCj4+Pj4+IFsxMzMzMC42NTIy MzhdwqAga2VybmZzX2ZpbGVfcmVhZF9pdGVyKzB4OWMvMHgxYTQKPj4+Pj4gWzEzMzMwLjY1MjI0 MV3CoCBrZXJuZnNfZm9wX3JlYWRfaXRlcisweDM0LzB4NTAKPj4+Pj4gWzEzMzMwLjY1MjI0NF3C oCBuZXdfc3luY19yZWFkKzB4ZGMvMHgxNTQKPj4+Pj4gWzEzMzMwLjY1MjI1M13CoCB2ZnNfcmVh ZCsweDE1OC8weDFlNAo+Pj4+PiBbMTMzMzAuNjUyMjYwXcKgIGtzeXNfcmVhZCsweDY0LzB4ZWMK Pj4+Pj4gWzEzMzMwLjY1MjI2Nl3CoCBfX2FybTY0X3N5c19yZWFkKzB4MjgvMHgzNAo+Pj4+PiBb MTMzMzAuNjUyMjczXcKgIGludm9rZV9zeXNjYWxsKzB4NTAvMHgxMjAKPj4+Pj4gWzEzMzMwLjY1 MjI4MF3CoCBlbDBfc3ZjX2NvbW1vbi5jb25zdHByb3AuMCsweDRjLzB4ZDQKPj4+Pj4gWzEzMzMw LjY1MjI4NF3CoCBkb19lbDBfc3ZjKzB4MzAvMHg5Ywo+Pj4+PiBbMTMzMzAuNjUyMjg2XcKgIGVs MF9zdmMrMHgyYy8weDU0Cj4+Pj4+IFsxMzMzMC42NTIyOTRdwqAgZWwwdF82NF9zeW5jX2hhbmRs ZXIrMHgxYTQvMHgxYjAKPj4+Pj4gWzEzMzMwLjY1MjI5Nl3CoCBlbDB0XzY0X3N5bmMrMHgxOWMv MHgxYTAKPj4+Pj4gWzEzMzMwLjY1MjMwM10gQ29kZTogYTk4NDM0NmMgYTljNDM0MmMgZjEwMTAw NDIgNTRmZmZlZTggKGE5N2MzYzhlKQo+Pj4+PiBbMTMzMzAuNjUyMzA3XSAtLS1bIGVuZCB0cmFj ZSAyMjdkNDM4MGY1NzE0NWQ0IF0tLS0KPj4+Pj4KPj4+Pj4gU28gbWF5YmUgdGhpcyBpc3N1ZSBp c24ndCBsaW1pdGVkIHRvIHdlaXJkIG1vZHVsZXMsIGFmdGVyIGFsbC4uLgo+Pj4+Pgo+Pj4+Cj4+ Pj4gSXQgcmFuIG9uIHRoZSBtYWNoaW5lIGZyb20gdGhlIHNhbWUgc2V0IHRoYXQgd2Ugd2VyZSBh YmxlIHRvIHJlcHJvZHVjZQo+Pj4+IGl0IG9uIHByZXZpb3VzbHkuIElmIHlvdSBvciBhbnlvbmUg ZWxzZSBoYXZlIGFuIGlkZWEgb24gaG93IHRvIAo+Pj4+IHN0YWJpbGl6ZQo+Pj4+IHRoZSByZXBy b2R1Y2liaWxpdHkgb3IgaGF2ZSBhIGRlYnVnIHBhdGNoIHdlJ2xsIGJlIGhhcHB5IHRvIHRyeSBp dC4KPj4+Cj4+PiBQb3NzaWJseSBpdCBkZXBlbmRzIG9uIHRoZSBpbmRpdmlkdWFsIG1hY2hpbmVz JyBmaXJtd2FyZSBleGFjdGx5IGhvdyB0aGUKPj4+IHJlbGV2YW50IGJpdHMgb2YgdGhlaXIgQUNQ SSB0YWJsZXMgYXJlIGFsaWduZWQgaW4gbWVtb3J5Pwo+Pj4KPj4+IEkndmUgc3RhcnRlZCBkaWdn aW5nIGludG8gdGhhdCBjYWxsc3RhY2sgLSBpdCBtYXkgbm90IGJlIGEgIndlaXJkIAo+Pj4gbW9k dWxlIgo+Pj4gYnV0IGl0J3MgZGVmaW5pdGVseSBjcnVzdHkgQUNQSSBjb2RlLi4uIGEyMzgzMTdj ZTgxOCAoIkFDUEk6IENsZWFuIHVwCj4+PiBhY3BpX29zX21hcC91bm1hcF9tZW1vcnkoKSB0byBl bGltaW5hdGUgX19pb21lbS4iKSBsb29rcyBmcmFua2x5IGEgYml0Cj4+PiBxdWVzdGlvbmFibGUg aW4gaXRzIGRlY2lzaW9uIHRvIGJsaXRoZWx5IGNhc3QgYXdheSBfX2lvbWVtLCBidXQgdGhlbiB0 aGUKPj4+IHJhdGlvbmFsZSBpbiBhYWZjNjVjNzMxZmUgKCJBQ1BJOiBhZGQgYXJtNjQgdG8gdGhl IHBsYXRmb3JtcyB0aGF0IHVzZQo+Pj4gaW9yZW1hcCIpIHNlZW1zIHBhcnRpY3VsYXJseSBkdWJp b3VzIG9uIHRvcCBvZiB0aGF0IChlc3BlY2lhbGx5IGdpdmVuIAo+Pj4gdGhpcwo+Pj4gZW5kIHJl c3VsdCkuCj4+Pgo+Pj4gQXQgYSB3aWxkIGd1ZXNzLCBJJ20gd29uZGVyaW5nIGlmIHRoaXMgbWF5 IGJlIHN1ZmZpY2llbnQ6Cj4+Pgo+Pj4gLS0tLS0+OC0tLS0tCj4+PiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9hY3BpL29zbC5jIGIvZHJpdmVycy9hY3BpL29zbC5jCj4+PiBpbmRleCAzMjdlMWI0ZWI2 YjAuLmY1ZDI2YjEwMmZiZSAxMDA2NDQKPj4+IC0tLSBhL2RyaXZlcnMvYWNwaS9vc2wuYwo+Pj4g KysrIGIvZHJpdmVycy9hY3BpL29zbC5jCj4+PiBAQCAtMjc3LDcgKzI3Nyw3IEBAIGFjcGlfbWFw X2xvb2t1cF92aXJ0KHZvaWQgX19pb21lbSAqdmlydCwgCj4+PiBhY3BpX3NpemUgc2l6ZSkKPj4+ IMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIE5VTEw7Cj4+PiDCoCB9Cj4+Pgo+Pj4gLSNpZiBkZWZp bmVkKENPTkZJR19JQTY0KSB8fCBkZWZpbmVkKENPTkZJR19BUk02NCkKPj4+ICsjaWYgZGVmaW5l ZChDT05GSUdfSUE2NCkKPj4+IMKgIC8qIGlvcmVtYXAgd2lsbCB0YWtlIGNhcmUgb2YgY2FjaGUg YXR0cmlidXRlcyAqLwo+Pj4gwqAgI2RlZmluZSBzaG91bGRfdXNlX2ttYXAocGZuKcKgwqAgMAo+ Pj4gwqAgI2Vsc2UKPj4+IC0tLS0tODwtLS0tLQo+Pgo+PiBJIHRob3VnaHQgdGhlIHNhbWUgYnV0 IHNob3VsZG4ndCBhY3BpX29zX2lvcmVtYXAoKSBtYXAgaXQgd2l0aCB0aGUgcmlnaHQKPj4gYXR0 cmlidXRlcz8gSXQgdXNlcyB0aGUgRUZJIG1hcHMgdG8gY2hlY2sgd2hhdCBraW5kIG9mIG1lbW9y eSB0aGlzIGlzLgo+IAo+IE9oIGNyaWtleSwgSSBtaXNzZWQgdGhhdCBicmFuY2ggb2YgdGhlIHJh YmJpdCBob2xlLi4uIEkgZ3Vlc3MgdGhhdCBtdXN0IAo+IG1lYW4gdGhhdCB0aGUgdGFibGVzIGJl aW5nIHBva2VkIGhlcmUgYXJlICpub3QqIGNvdmVyZWQgYnkgdGhlIEVGSSAKPiBtZW1vcnkgbWFw LCBzbyBwYWdlX2lzX3JhbSgpIGlzIHVubGlrZWx5IHRvIGhlbHAgZWl0aGVyIDooCgpBZnRlciBw aWNraW5nIHRocm91Z2ggdGhlIFVFRkkgc3BlYyBJIHRoaW5rIEkndmUgbm93IGdvdCBhIGNsZWFy ZXIgCnBpY3R1cmUgb2Ygd2hhdCdzIGhhcHBlbmluZywgYnV0IEknbSBub3Qgc3VyZSB3aGVyZSBp dCBnb2VzIGZyb20gaGVyZS4uLgoKVGhlIHNwZWMgaW1wbGllcyB0aGF0IGl0ICppcyogbGVnaXRp bWF0ZSBmb3IgcnVudGltZS1sb2FkZWQgQUNQSSB0YWJsZXMgCnRvIGxpZSBvdXRzaWRlIHRoZSBF RkkgbWVtb3J5IG1hcCwgYW5kIHRoYXQgY2FzZSB0aGV5IG11c3QgYmUgYXNzdW1lZCB0byAKYmUg dW5jYWNoZWQsIHNvIHRoZSBiZWhhdmlvdXIgb2YgYWNwaV9vc19pb3JlbWFwKCkgaXMgY29ycmVj dC4gR2l2ZW4gdGhlIApkZWZpbml0aW9uIG9mIHVuY2FjaGVkIGZvciBhcm02NCBtZW1vcnkgdHlw ZXMgdGhvdWdoLCB0aGF0IG1lYW5zIHRoYXQgCmNhbGxlcnMgb2YgYWNwaV9vc19tYXBfbWVtb3J5 KCkgc3RpbGwgaGF2ZSB0byBiZSBwcmVwYXJlZCB0byBnZXQgYW4gCl9faW9tZW0gcG9pbnRlciBi YWNrIGV2ZW4gaWYgdGhleSBrbm93IHRoZXkncmUgbWFwcGluZyBhIHRhYmxlIHJhdGhlciAKdGhh biBzb21lIHJhbmRvbSBiaXQgb2YgTU1JTyBmb3IgYW4gQU1MIG1ldGhvZC4KClRoZXJlZm9yZSBp biB0aGlzIGNhc2UgaXQgc2VlbXMgdGhlIGJsYW1lIGxpZXMgcGFydHdheSBiZXR3ZWVuIAphY3Bp X29zX21hcF9tZW1vcnkoKSBmb3IgY2FzdGluZyBhd2F5IF9faW9tZW0gYW5kIGFjcGlfZGF0YV9z aG93KCkgZm9yIApsZXR0aW5nIGFuIGFyYml0cmFyeSBvZmZzZXQgbGVhZCB0byBhbiBhcmJpdHJh cmlseS1hbGlnbmVkIG1lbWNweSgpLCBidXQgCkkgZG9uJ3Qga25vdyB3aGF0IHRoZSBiZXN0IHdh eSB0byBmaXggaXQgaXMuIEVpdGhlciB3YXkgSSd2ZSBzYXRpc2ZpZWQgCm15c2VsZiB0aGF0IGl0 J3Mgbm90IGFuIGlzc3VlIHdpdGggdGhlIGFybTY0IGNvZGUgaXRzZWxmIC0gSSBkbyB3b25kZXIg CndoZXRoZXIgdGhpcyBtaWdodCBhbHNvIGJlIGEgcHJvYmxlbSBvbiBJQS02NCBnaXZlbiAKQUNQ SV9NSVNBTElHTk1FTlRfTk9UX1NVUFBPUlRFRCwgYW5kIEkgZ3Vlc3MgUklTQy1WIG1heSBoYXZl IGFsaWdubWVudCAKY29uY2VybnMgYXMgd2VsbC4KClJvYmluLgoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxp c3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZy YWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=