From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9656AC433EF for ; Wed, 5 Jan 2022 12:48:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235704AbiAEMsj (ORCPT ); Wed, 5 Jan 2022 07:48:39 -0500 Received: from foss.arm.com ([217.140.110.172]:44346 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229485AbiAEMsg (ORCPT ); Wed, 5 Jan 2022 07:48:36 -0500 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 EE27A2B; Wed, 5 Jan 2022 04:48:35 -0800 (PST) Received: from [10.163.72.138] (unknown [10.163.72.138]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 1ABD03F5A1; Wed, 5 Jan 2022 04:48:33 -0800 (PST) Subject: =?UTF-8?B?UmU6IOWbnuWkje+8mltQQVRDSF0gYXJtNjQ6IGZpeCBidWlsZCBlcnJv?= =?UTF-8?Q?r_when_use_rodata=5fenabled?= To: AliOS system security , "catalin.marinas" , will Cc: linux-arm-kernel , linux-kernel References: <1641352075-25200-1-git-send-email-alios_sys_security@linux.alibaba.com> <0432f592-789b-7c92-8d7a-99191d7bc669@arm.com> <6f37012b-b082-457f-9aee-2315a461c031.alios_sys_security@linux.alibaba.com> From: Anshuman Khandual Message-ID: <0380f75f-ac8f-5f0f-93e7-20ed07a0d549@arm.com> Date: Wed, 5 Jan 2022 18:18:37 +0530 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 MIME-Version: 1.0 In-Reply-To: <6f37012b-b082-457f-9aee-2315a461c031.alios_sys_security@linux.alibaba.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 1/5/22 6:07 PM, AliOS system security wrote: > Hello, > When I commen out these configs like below to disable rodata function for debug purpose Then it's a modified custom kernel, not mainline anymore. > > diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig > index 3bb0b67..40fbd85 100644 > --- a/arch/arm64/Kconfig > +++ b/arch/arm64/Kconfig > @@ -36,8 +36,8 @@ config ARM64 >         select ARCH_HAS_SET_DIRECT_MAP >         select ARCH_HAS_SET_MEMORY >         select ARCH_STACKWALK > -       select ARCH_HAS_STRICT_KERNEL_RWX > -       select ARCH_HAS_STRICT_MODULE_RWX > +#      select ARCH_HAS_STRICT_KERNEL_RWX > +#      select ARCH_HAS_STRICT_MODULE_RWX >         select ARCH_HAS_SYNC_DMA_FOR_DEVICE > > then build failed with below log: > arch/arm64/mm/mmu.c: In function ‘parse_rodata’: > arch/arm64/mm/mmu.c:601:28: error: ‘rodata_enabled’ undeclared (first use in this function); did you mean ‘kasan_enabled’? >   int ret = strtobool(arg, &rodata_enabled); >                             ^~~~~~~~~~~~~~ >                             kasan_enabled > arch/arm64/mm/mmu.c:601:28: note: each undeclared identifier is reported only once for each function it appears in >   CC      net/core/skbuff.o > arch/arm64/mm/mmu.c: In function ‘map_entry_trampoline’: > arch/arm64/mm/mmu.c:620:18: error: ‘rodata_enabled’ undeclared (first use in this function); did you mean ‘kasan_enabled’? >   pgprot_t prot = rodata_enabled ? PAGE_KERNEL_ROX : PAGE_KERNEL_EXEC; These build errors are caused on a modified kernel, not mainline. > > I hope these configs can be used at least for function test. > And wrap around variable when it is defined within macro should be better.  If the config options are not user selectable (which is the case here), they should not be used for testing. Because there might be already assumptions in the kernel, around its availability. > > Thanks! > > ------------------------------------------------------------------ > 发件人:Anshuman Khandual > 发送时间:2022年1月5日(星期三) 17:21 > 收件人:AliOS system security ; catalin.marinas ; will > 抄 送:linux-arm-kernel ; linux-kernel > 主 题:Re: [PATCH] arm64: fix build error when use rodata_enabled > > Hello, > > On 1/5/22 8:37 AM, AliOS system security wrote: > > rodata_enabled should be used when CONFIG_STRICT_KERNEL_RWX > > or CONFIG_STRICT_MODULE_RWX is selected > > Both these configs get selected invariably with CONFIG_ARM64 in the > platform config file (arch/arm64/Kconfig). I guess there can not be > any such situation, where both configs will be missing/not selected > given ARCH_OPTIONAL_KERNEL_RWX[or _DEFAULT] is not enabled on arm64. > > config ARM64 >         def_bool y >         select ACPI_CCA_REQUIRED if ACPI >  ..... >         select ARCH_HAS_STRICT_KERNEL_RWX >         select ARCH_HAS_STRICT_MODULE_RWX >  ..... > > Hence for all practical purpose, rodata_enabled could be considered > always available. I am sure there other similar situations as well, > where code elements are not wrapped around if the config option is > always present. > > >  > > Signed-off-by: AliOS system security  > > Also please refer Documentation/process/submitting-patches.rst for > the rules regarding names, that can be used for a commit sign off. > > ------------------------------------------------------------------------ > then you just add a line saying:: > >         Signed-off-by: Random J Developer  > > using your real name (sorry, no pseudonyms or anonymous contributions.) > ------------------------------------------------------------------------ > > - Anshuman > > > --- > >  arch/arm64/mm/mmu.c | 14 ++++++++++++-- > >  1 file changed, 12 insertions(+), 2 deletions(-) > >  > > diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c > > index acfae9b..47f8754 100644 > > --- a/arch/arm64/mm/mmu.c > > +++ b/arch/arm64/mm/mmu.c > > @@ -596,6 +596,7 @@ static void __init map_kernel_segment(pgd_t *pgdp, void *va_start, void *va_end, > >   vm_area_add_early(vma); > >  } > >   > > +#if defined(CONFIG_STRICT_KERNEL_RWX) || defined(CONFIG_STRICT_MODULE_RWX) > >  static int __init parse_rodata(char *arg) > >  { > >   int ret = strtobool(arg, &rodata_enabled); > > @@ -613,11 +614,16 @@ static int __init parse_rodata(char *arg) > >   return 0; > >  } > >  early_param("rodata", parse_rodata); > > +#endif > >   > >  #ifdef CONFIG_UNMAP_KERNEL_AT_EL0 > >  static int __init map_entry_trampoline(void) > >  { > > - pgprot_t prot = rodata_enabled ? PAGE_KERNEL_ROX : PAGE_KERNEL_EXEC; > > + pgprot_t prot = PAGE_KERNEL_EXEC; > > +#if defined(CONFIG_STRICT_KERNEL_RWX) || defined(CONFIG_STRICT_MODULE_RWX) > > + if (rodata_enabled) > > +  prot = PAGE_KERNEL_ROX; > > +#endif > >   phys_addr_t pa_start = __pa_symbol(__entry_tramp_text_start); > >   > >   /* The trampoline is always mapped and can therefore be global */ > > @@ -672,7 +678,11 @@ static void __init map_kernel(pgd_t *pgdp) > >    * mapping to install SW breakpoints. Allow this (only) when > >    * explicitly requested with rodata=off. > >    */ > > - pgprot_t text_prot = rodata_enabled ? PAGE_KERNEL_ROX : PAGE_KERNEL_EXEC; > > + pgprot_t text_prot = PAGE_KERNEL_EXEC; > > +#if defined(CONFIG_STRICT_KERNEL_RWX) || defined(CONFIG_STRICT_MODULE_RWX) > > + if (rodata_enabled) > > +  text_prot = PAGE_KERNEL_ROX; > > +#endif > >   > >   /* > >    * If we have a CPU that supports BTI and a kernel built for > >  > > From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 35358C433F5 for ; Wed, 5 Jan 2022 12:49:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date: Message-ID:From:References:Cc:To:Subject:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=HayojyAs48WTJrHdJTiaPmZ/tsEwSn2Q6ObRaagGfg4=; b=ghhYbMxFCpaQhpWc1Qe1xOo7gF qCaUOwKKNw58H1JGG0G0R+FF8/iIRiP0xJzM5AHuKoiWCKq4jJk7MJ3ddAJ3AU6nONUH/bNyay5CL Hci0k60StepDAJDamx562iMNpql/6xb9HoOcaQsBDQt/nIFk8OXrtJHRj9hpTQEyRWej32K+IwSok rZQ8NBdHFPqxVc7l9WWcQ1C6lxWTYHNxXdyWNiCpt5xJj181JtS/EjinGUe4ARmcnIL4bWg5RtqlZ kyxaiokfHgzkheNsXQ1K+epW2+P73TzYrmG7IOmQB6i+JyO0/HpYJSa7dKyPeJvr4GSmWebtrFtIk jVbw8XuA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1n55ic-00EoZB-H5; Wed, 05 Jan 2022 12:48:42 +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 1n55iY-00EoYI-9l for linux-arm-kernel@lists.infradead.org; Wed, 05 Jan 2022 12:48:40 +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 EE27A2B; Wed, 5 Jan 2022 04:48:35 -0800 (PST) Received: from [10.163.72.138] (unknown [10.163.72.138]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 1ABD03F5A1; Wed, 5 Jan 2022 04:48:33 -0800 (PST) Subject: =?UTF-8?B?UmU6IOWbnuWkje+8mltQQVRDSF0gYXJtNjQ6IGZpeCBidWlsZCBlcnJv?= =?UTF-8?Q?r_when_use_rodata=5fenabled?= To: AliOS system security , "catalin.marinas" , will Cc: linux-arm-kernel , linux-kernel References: <1641352075-25200-1-git-send-email-alios_sys_security@linux.alibaba.com> <0432f592-789b-7c92-8d7a-99191d7bc669@arm.com> <6f37012b-b082-457f-9aee-2315a461c031.alios_sys_security@linux.alibaba.com> From: Anshuman Khandual Message-ID: <0380f75f-ac8f-5f0f-93e7-20ed07a0d549@arm.com> Date: Wed, 5 Jan 2022 18:18:37 +0530 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 MIME-Version: 1.0 In-Reply-To: <6f37012b-b082-457f-9aee-2315a461c031.alios_sys_security@linux.alibaba.com> Content-Language: en-US X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220105_044838_459004_C60187F2 X-CRM114-Status: GOOD ( 37.09 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org CgpPbiAxLzUvMjIgNjowNyBQTSwgQWxpT1Mgc3lzdGVtIHNlY3VyaXR5IHdyb3RlOgo+IEhlbGxv LAo+IFdoZW4gSSBjb21tZW4gb3V0IHRoZXNlIGNvbmZpZ3MgbGlrZSBiZWxvdyB0byBkaXNhYmxl IHJvZGF0YSBmdW5jdGlvbiBmb3IgZGVidWcgcHVycG9zZQoKVGhlbiBpdCdzIGEgbW9kaWZpZWQg Y3VzdG9tIGtlcm5lbCwgbm90IG1haW5saW5lIGFueW1vcmUuCgo+IAo+IGRpZmbCoC0tZ2l0wqBh L2FyY2gvYXJtNjQvS2NvbmZpZ8KgYi9hcmNoL2FybTY0L0tjb25maWcKPiBpbmRleMKgM2JiMGI2 Ny4uNDBmYmQ4NcKgMTAwNjQ0Cj4gLS0twqBhL2FyY2gvYXJtNjQvS2NvbmZpZwo+ICsrK8KgYi9h cmNoL2FybTY0L0tjb25maWcKPiBAQMKgLTM2LDjCoCszNiw4wqBAQMKgY29uZmlnwqBBUk02NAo+ IMKgwqDCoMKgwqDCoMKgwqBzZWxlY3TCoEFSQ0hfSEFTX1NFVF9ESVJFQ1RfTUFQCj4gwqDCoMKg wqDCoMKgwqDCoHNlbGVjdMKgQVJDSF9IQVNfU0VUX01FTU9SWQo+IMKgwqDCoMKgwqDCoMKgwqBz ZWxlY3TCoEFSQ0hfU1RBQ0tXQUxLCj4gLcKgwqDCoMKgwqDCoMKgc2VsZWN0wqBBUkNIX0hBU19T VFJJQ1RfS0VSTkVMX1JXWAo+IC3CoMKgwqDCoMKgwqDCoHNlbGVjdMKgQVJDSF9IQVNfU1RSSUNU X01PRFVMRV9SV1gKPiArI8KgwqDCoMKgwqDCoHNlbGVjdMKgQVJDSF9IQVNfU1RSSUNUX0tFUk5F TF9SV1gKPiArI8KgwqDCoMKgwqDCoHNlbGVjdMKgQVJDSF9IQVNfU1RSSUNUX01PRFVMRV9SV1gK PiDCoMKgwqDCoMKgwqDCoMKgc2VsZWN0wqBBUkNIX0hBU19TWU5DX0RNQV9GT1JfREVWSUNFCj4g Cj4gdGhlbiBidWlsZCBmYWlsZWQgd2l0aCBiZWxvdyBsb2c6Cj4gYXJjaC9hcm02NC9tbS9tbXUu YzrCoEluwqBmdW5jdGlvbsKg4oCYcGFyc2Vfcm9kYXRh4oCZOgo+IGFyY2gvYXJtNjQvbW0vbW11 LmM6NjAxOjI4OsKgZXJyb3I6wqDigJhyb2RhdGFfZW5hYmxlZOKAmcKgdW5kZWNsYXJlZMKgKGZp cnN0wqB1c2XCoGluwqB0aGlzwqBmdW5jdGlvbik7wqBkaWTCoHlvdcKgbWVhbsKg4oCYa2FzYW5f ZW5hYmxlZOKAmT8KPiDCoMKgaW50wqByZXTCoD3CoHN0cnRvYm9vbChhcmcswqAmcm9kYXRhX2Vu YWJsZWQpOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgXn5+fn5+fn5+fn5+fn4KPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGthc2FuX2VuYWJsZWQKPiBhcmNoL2FybTY0L21tL21t dS5jOjYwMToyODrCoG5vdGU6wqBlYWNowqB1bmRlY2xhcmVkwqBpZGVudGlmaWVywqBpc8KgcmVw b3J0ZWTCoG9ubHnCoG9uY2XCoGZvcsKgZWFjaMKgZnVuY3Rpb27CoGl0wqBhcHBlYXJzwqBpbgo+ IMKgwqBDQ8KgwqDCoMKgwqDCoG5ldC9jb3JlL3NrYnVmZi5vCj4gYXJjaC9hcm02NC9tbS9tbXUu YzrCoEluwqBmdW5jdGlvbsKg4oCYbWFwX2VudHJ5X3RyYW1wb2xpbmXigJk6Cj4gYXJjaC9hcm02 NC9tbS9tbXUuYzo2MjA6MTg6wqBlcnJvcjrCoOKAmHJvZGF0YV9lbmFibGVk4oCZwqB1bmRlY2xh cmVkwqAoZmlyc3TCoHVzZcKgaW7CoHRoaXPCoGZ1bmN0aW9uKTvCoGRpZMKgeW91wqBtZWFuwqDi gJhrYXNhbl9lbmFibGVk4oCZPwo+IMKgwqBwZ3Byb3RfdMKgcHJvdMKgPcKgcm9kYXRhX2VuYWJs ZWTCoD/CoFBBR0VfS0VSTkVMX1JPWMKgOsKgUEFHRV9LRVJORUxfRVhFQzsKClRoZXNlIGJ1aWxk IGVycm9ycyBhcmUgY2F1c2VkIG9uIGEgbW9kaWZpZWQga2VybmVsLCBub3QgbWFpbmxpbmUuCgo+ IAo+IEkgaG9wZSB0aGVzZSBjb25maWdzIGNhbiBiZSB1c2VkIGF0IGxlYXN0IGZvciBmdW5jdGlv biB0ZXN0Lgo+IEFuZCB3cmFwIGFyb3VuZCB2YXJpYWJsZSB3aGVuIGl0IGlzIGRlZmluZWQgd2l0 aGluwqBtYWNybyBzaG91bGQgYmUgYmV0dGVyLsKgCgpJZiB0aGUgY29uZmlnIG9wdGlvbnMgYXJl IG5vdCB1c2VyIHNlbGVjdGFibGUgKHdoaWNoIGlzIHRoZSBjYXNlIGhlcmUpLCB0aGV5CnNob3Vs ZCBub3QgYmUgdXNlZCBmb3IgdGVzdGluZy4gQmVjYXVzZSB0aGVyZSBtaWdodCBiZSBhbHJlYWR5 IGFzc3VtcHRpb25zIGluCnRoZSBrZXJuZWwsIGFyb3VuZCBpdHMgYXZhaWxhYmlsaXR5LgoKPiAK PiBUaGFua3MhCj4gCj4gICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ICAgICDlj5Hku7bkurrvvJpBbnNodW1hbiBL aGFuZHVhbCA8YW5zaHVtYW4ua2hhbmR1YWxAYXJtLmNvbT4KPiAgICAg5Y+R6YCB5pe26Ze077ya MjAyMuW5tDHmnIg15pelKOaYn+acn+S4iSkgMTc6MjEKPiAgICAg5pS25Lu25Lq677yaQWxpT1Mg c3lzdGVtIHNlY3VyaXR5IDxhbGlvc19zeXNfc2VjdXJpdHlAbGludXguYWxpYmFiYS5jb20+OyBj YXRhbGluLm1hcmluYXMgPGNhdGFsaW4ubWFyaW5hc0Bhcm0uY29tPjsgd2lsbCA8d2lsbEBrZXJu ZWwub3JnPgo+ICAgICDmioTjgIDpgIHvvJpsaW51eC1hcm0ta2VybmVsIDxsaW51eC1hcm0ta2Vy bmVsQGxpc3RzLmluZnJhZGVhZC5vcmc+OyBsaW51eC1rZXJuZWwgPGxpbnV4LWtlcm5lbEB2Z2Vy Lmtlcm5lbC5vcmc+Cj4gICAgIOS4u+OAgOmimO+8mlJlOiBbUEFUQ0hdIGFybTY0OiBmaXggYnVp bGQgZXJyb3Igd2hlbiB1c2Ugcm9kYXRhX2VuYWJsZWQKPiAKPiAgICAgSGVsbG8sCj4gCj4gICAg IE9uwqAxLzUvMjLCoDg6MzfCoEFNLMKgQWxpT1PCoHN5c3RlbcKgc2VjdXJpdHnCoHdyb3RlOgo+ ICAgICA+wqByb2RhdGFfZW5hYmxlZMKgc2hvdWxkwqBiZcKgdXNlZMKgd2hlbsKgQ09ORklHX1NU UklDVF9LRVJORUxfUldYCj4gICAgID7CoG9ywqBDT05GSUdfU1RSSUNUX01PRFVMRV9SV1jCoGlz wqBzZWxlY3RlZAo+IAo+ICAgICBCb3RowqB0aGVzZcKgY29uZmlnc8KgZ2V0wqBzZWxlY3RlZMKg aW52YXJpYWJsecKgd2l0aMKgQ09ORklHX0FSTTY0wqBpbsKgdGhlCj4gICAgIHBsYXRmb3JtwqBj b25maWfCoGZpbGXCoChhcmNoL2FybTY0L0tjb25maWcpLsKgScKgZ3Vlc3PCoHRoZXJlwqBjYW7C oG5vdMKgYmUKPiAgICAgYW55wqBzdWNowqBzaXR1YXRpb24swqB3aGVyZcKgYm90aMKgY29uZmln c8Kgd2lsbMKgYmXCoG1pc3Npbmcvbm90wqBzZWxlY3RlZAo+ICAgICBnaXZlbsKgQVJDSF9PUFRJ T05BTF9LRVJORUxfUldYW29ywqBfREVGQVVMVF3CoGlzwqBub3TCoGVuYWJsZWTCoG9uwqBhcm02 NC4KPiAKPiAgICAgY29uZmlnwqBBUk02NAo+ICAgICDCoMKgwqDCoMKgwqDCoMKgZGVmX2Jvb2zC oHkKPiAgICAgwqDCoMKgwqDCoMKgwqDCoHNlbGVjdMKgQUNQSV9DQ0FfUkVRVUlSRUTCoGlmwqBB Q1BJCj4gICAgIMKgLi4uLi4KPiAgICAgwqDCoMKgwqDCoMKgwqDCoHNlbGVjdMKgQVJDSF9IQVNf U1RSSUNUX0tFUk5FTF9SV1gKPiAgICAgwqDCoMKgwqDCoMKgwqDCoHNlbGVjdMKgQVJDSF9IQVNf U1RSSUNUX01PRFVMRV9SV1gKPiAgICAgwqAuLi4uLgo+IAo+ICAgICBIZW5jZcKgZm9ywqBhbGzC oHByYWN0aWNhbMKgcHVycG9zZSzCoHJvZGF0YV9lbmFibGVkwqBjb3VsZMKgYmXCoGNvbnNpZGVy ZWQKPiAgICAgYWx3YXlzwqBhdmFpbGFibGUuwqBJwqBhbcKgc3VyZcKgdGhlcmXCoG90aGVywqBz aW1pbGFywqBzaXR1YXRpb25zwqBhc8Kgd2VsbCwKPiAgICAgd2hlcmXCoGNvZGXCoGVsZW1lbnRz wqBhcmXCoG5vdMKgd3JhcHBlZMKgYXJvdW5kwqBpZsKgdGhlwqBjb25maWfCoG9wdGlvbsKgaXMK PiAgICAgYWx3YXlzwqBwcmVzZW50Lgo+IAo+ICAgICA+wqAKPiAgICAgPsKgU2lnbmVkLW9mZi1i eTrCoEFsaU9TwqBzeXN0ZW3CoHNlY3VyaXR5wqA8YWxpb3Nfc3lzX3NlY3VyaXR5QGxpbnV4LmFs aWJhYmEuY29tPgo+IAo+ICAgICBBbHNvwqBwbGVhc2XCoHJlZmVywqBEb2N1bWVudGF0aW9uL3By b2Nlc3Mvc3VibWl0dGluZy1wYXRjaGVzLnJzdMKgZm9yCj4gICAgIHRoZcKgcnVsZXPCoHJlZ2Fy ZGluZ8KgbmFtZXMswqB0aGF0wqBjYW7CoGJlwqB1c2VkwqBmb3LCoGHCoGNvbW1pdMKgc2lnbsKg b2ZmLgo+IAo+ICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiAgICAgdGhlbsKgeW91wqBqdXN0wqBhZGTC oGHCoGxpbmXCoHNheWluZzo6Cj4gCj4gICAgIMKgwqDCoMKgwqDCoMKgwqBTaWduZWQtb2ZmLWJ5 OsKgUmFuZG9twqBKwqBEZXZlbG9wZXLCoDxyYW5kb21AZGV2ZWxvcGVyLmV4YW1wbGUub3JnPgo+ IAo+ICAgICB1c2luZ8KgeW91csKgcmVhbMKgbmFtZcKgKHNvcnJ5LMKgbm/CoHBzZXVkb255bXPC oG9ywqBhbm9ueW1vdXPCoGNvbnRyaWJ1dGlvbnMuKQo+ICAgICAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiAK PiAgICAgLcKgQW5zaHVtYW4KPiAKPiAgICAgPsKgLS0tCj4gICAgID7CoMKgYXJjaC9hcm02NC9t bS9tbXUuY8KgfMKgMTTCoCsrKysrKysrKysrKy0tCj4gICAgID7CoMKgMcKgZmlsZcKgY2hhbmdl ZCzCoDEywqBpbnNlcnRpb25zKCspLMKgMsKgZGVsZXRpb25zKC0pCj4gICAgID7CoAo+ICAgICA+ wqBkaWZmwqAtLWdpdMKgYS9hcmNoL2FybTY0L21tL21tdS5jwqBiL2FyY2gvYXJtNjQvbW0vbW11 LmMKPiAgICAgPsKgaW5kZXjCoGFjZmFlOWIuLjQ3Zjg3NTTCoDEwMDY0NAo+ICAgICA+wqAtLS3C oGEvYXJjaC9hcm02NC9tbS9tbXUuYwo+ICAgICA+wqArKyvCoGIvYXJjaC9hcm02NC9tbS9tbXUu Ywo+ICAgICA+wqBAQMKgLTU5Niw2wqArNTk2LDfCoEBAwqBzdGF0aWPCoHZvaWTCoF9faW5pdMKg bWFwX2tlcm5lbF9zZWdtZW50KHBnZF90wqAqcGdkcCzCoHZvaWTCoCp2YV9zdGFydCzCoHZvaWTC oCp2YV9lbmQsCj4gICAgID7CoMKgwqB2bV9hcmVhX2FkZF9lYXJseSh2bWEpOwo+ICAgICA+wqDC oH0KPiAgICAgPsKgwqAKPiAgICAgPsKgKyNpZsKgZGVmaW5lZChDT05GSUdfU1RSSUNUX0tFUk5F TF9SV1gpwqB8fMKgZGVmaW5lZChDT05GSUdfU1RSSUNUX01PRFVMRV9SV1gpCj4gICAgID7CoMKg c3RhdGljwqBpbnTCoF9faW5pdMKgcGFyc2Vfcm9kYXRhKGNoYXLCoCphcmcpCj4gICAgID7CoMKg ewo+ICAgICA+wqDCoMKgaW50wqByZXTCoD3CoHN0cnRvYm9vbChhcmcswqAmcm9kYXRhX2VuYWJs ZWQpOwo+ICAgICA+wqBAQMKgLTYxMywxMcKgKzYxNCwxNsKgQEDCoHN0YXRpY8KgaW50wqBfX2lu aXTCoHBhcnNlX3JvZGF0YShjaGFywqAqYXJnKQo+ICAgICA+wqDCoMKgcmV0dXJuwqAwOwo+ICAg ICA+wqDCoH0KPiAgICAgPsKgwqBlYXJseV9wYXJhbSgicm9kYXRhIizCoHBhcnNlX3JvZGF0YSk7 Cj4gICAgID7CoCsjZW5kaWYKPiAgICAgPsKgwqAKPiAgICAgPsKgwqAjaWZkZWbCoENPTkZJR19V Tk1BUF9LRVJORUxfQVRfRUwwCj4gICAgID7CoMKgc3RhdGljwqBpbnTCoF9faW5pdMKgbWFwX2Vu dHJ5X3RyYW1wb2xpbmUodm9pZCkKPiAgICAgPsKgwqB7Cj4gICAgID7CoC3CoHBncHJvdF90wqBw cm90wqA9wqByb2RhdGFfZW5hYmxlZMKgP8KgUEFHRV9LRVJORUxfUk9YwqA6wqBQQUdFX0tFUk5F TF9FWEVDOwo+ICAgICA+wqArwqBwZ3Byb3RfdMKgcHJvdMKgPcKgUEFHRV9LRVJORUxfRVhFQzsK PiAgICAgPsKgKyNpZsKgZGVmaW5lZChDT05GSUdfU1RSSUNUX0tFUk5FTF9SV1gpwqB8fMKgZGVm aW5lZChDT05GSUdfU1RSSUNUX01PRFVMRV9SV1gpCj4gICAgID7CoCvCoGlmwqAocm9kYXRhX2Vu YWJsZWQpCj4gICAgID7CoCvCoMKgcHJvdMKgPcKgUEFHRV9LRVJORUxfUk9YOwo+ICAgICA+wqAr I2VuZGlmCj4gICAgID7CoMKgwqBwaHlzX2FkZHJfdMKgcGFfc3RhcnTCoD3CoF9fcGFfc3ltYm9s KF9fZW50cnlfdHJhbXBfdGV4dF9zdGFydCk7Cj4gICAgID7CoMKgCj4gICAgID7CoMKgwqAvKsKg VGhlwqB0cmFtcG9saW5lwqBpc8KgYWx3YXlzwqBtYXBwZWTCoGFuZMKgY2FuwqB0aGVyZWZvcmXC oGJlwqBnbG9iYWzCoCovCj4gICAgID7CoEBAwqAtNjcyLDfCoCs2NzgsMTHCoEBAwqBzdGF0aWPC oHZvaWTCoF9faW5pdMKgbWFwX2tlcm5lbChwZ2RfdMKgKnBnZHApCj4gICAgID7CoMKgwqDCoCrC oG1hcHBpbmfCoHRvwqBpbnN0YWxswqBTV8KgYnJlYWtwb2ludHMuwqBBbGxvd8KgdGhpc8KgKG9u bHkpwqB3aGVuCj4gICAgID7CoMKgwqDCoCrCoGV4cGxpY2l0bHnCoHJlcXVlc3RlZMKgd2l0aMKg cm9kYXRhPW9mZi4KPiAgICAgPsKgwqDCoMKgKi8KPiAgICAgPsKgLcKgcGdwcm90X3TCoHRleHRf cHJvdMKgPcKgcm9kYXRhX2VuYWJsZWTCoD/CoFBBR0VfS0VSTkVMX1JPWMKgOsKgUEFHRV9LRVJO RUxfRVhFQzsKPiAgICAgPsKgK8KgcGdwcm90X3TCoHRleHRfcHJvdMKgPcKgUEFHRV9LRVJORUxf RVhFQzsKPiAgICAgPsKgKyNpZsKgZGVmaW5lZChDT05GSUdfU1RSSUNUX0tFUk5FTF9SV1gpwqB8 fMKgZGVmaW5lZChDT05GSUdfU1RSSUNUX01PRFVMRV9SV1gpCj4gICAgID7CoCvCoGlmwqAocm9k YXRhX2VuYWJsZWQpCj4gICAgID7CoCvCoMKgdGV4dF9wcm90wqA9wqBQQUdFX0tFUk5FTF9ST1g7 Cj4gICAgID7CoCsjZW5kaWYKPiAgICAgPsKgwqAKPiAgICAgPsKgwqDCoC8qCj4gICAgID7CoMKg wqDCoCrCoElmwqB3ZcKgaGF2ZcKgYcKgQ1BVwqB0aGF0wqBzdXBwb3J0c8KgQlRJwqBhbmTCoGHC oGtlcm5lbMKgYnVpbHTCoGZvcgo+ICAgICA+wqAKPiAKPiAKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0 CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFk ZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK