From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail.tkos.co.il (golan.tkos.co.il [84.110.109.230]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3C25B8F58 for ; Tue, 27 Aug 2024 07:03:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=84.110.109.230 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724742207; cv=none; b=JF8d4NDAk5KDNn2ZWftbkCuITCP2Cw85m1Rf/ckVBwhGdksOiXWt1I0w8AoDpxk9ay2HiBRZYH8Cp9bgB3k/4N4Qgy9GsQIm6JUds9eH5GFlq+06mYOKjF0NmkkDJZ9OCG7jB4B2zuHa9xTv/alT52k8G0ky4XUXlgrhLUi99dQ= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724742207; c=relaxed/simple; bh=rPGBSZ1Nu4oGte5lWpykwFS7VqD7s8DLfHaTrjWVjYU=; h=From:To:Cc:Subject:In-Reply-To:References:Date:Message-ID: MIME-Version:Content-Type; b=Z0dTP88D012zhY0U49wGHRYqELnf0Fihh6n004uLSq5mfwg/YW1D94kmnrBaBLU/S7nbZPy+TJdgV8Y7Rg/vRsW3LStoGpkgL7LU7yP7idF8+0fhgGNB3X7fBTvHchJm5D28B9f+LQ65Zlz+/tSB3xJBg6QApscAl2hUpGWl0D4= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=tkos.co.il; spf=pass smtp.mailfrom=tkos.co.il; dkim=pass (2048-bit key) header.d=tkos.co.il header.i=@tkos.co.il header.b=mC8RkKPD; arc=none smtp.client-ip=84.110.109.230 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=tkos.co.il Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=tkos.co.il Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=tkos.co.il header.i=@tkos.co.il header.b="mC8RkKPD" Received: from localhost (unknown [10.0.8.3]) by mail.tkos.co.il (Postfix) with ESMTP id 4385F440F60; Tue, 27 Aug 2024 10:01:30 +0300 (IDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=tkos.co.il; s=default; t=1724742090; bh=rPGBSZ1Nu4oGte5lWpykwFS7VqD7s8DLfHaTrjWVjYU=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=mC8RkKPDlTDMdLg8O5LjBN7xg7+HIINo6Tc0jbi6128/xF1edkc82jSUISPuUlv29 3GqwSaxrrN87uFR+qSqiBIcQeV7Y6ruXOdEHdT+2zHw+5CZJbxsu2doa6bTWDTT9n0 5LucHaxgKPdt2p1HGotyICNCP8Av2kGH54uBlDq8LWLgg2k8DLgBbDIKuDmHMMZEoE gBoPeiNZAPLGi4ei0Yh70fn6+DXUfubBPbm/9wo7A1L1gsxd8W+51TnS6LdUMZbSTt aQRuxk66+dE+nmekRRWQb6Vmi0SSYOZKyIzNoJ8IZIM7Tdm0YfvlvDfV0QYvAUoOxS YyZmgm0PxEzPA== From: Baruch Siach To: Marek Szyprowski Cc: Christoph Hellwig , Catalin Marinas , Will Deacon , Robin Murphy , iommu@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-s390@vger.kernel.org, Petr =?utf-8?B?VGVzYcWZw61r?= , Ramon Fried , Elad Nachman , linux-rockchip@lists.infradead.org Subject: Re: [PATCH v6 RESED 1/2] dma: replace zone_dma_bits by zone_dma_limit In-Reply-To: (Marek Szyprowski's message of "Tue, 27 Aug 2024 08:14:03 +0200") References: <17c067618b93e5d71f19c37826d54db4299621a3.1723359916.git.baruch@tkos.co.il> <53d988b1-bdce-422a-ae4e-158f305ad703@samsung.com> <87mskyva7o.fsf@tarshish> Date: Tue, 27 Aug 2024 10:03:21 +0300 Message-ID: <87ikvmv45i.fsf@tarshish> Precedence: bulk X-Mailing-List: iommu@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Hi Marek, On Tue, Aug 27 2024, Marek Szyprowski wrote: > On 27.08.2024 06:52, Baruch Siach wrote: >> Hi Marek, >> >> Thanks for your report. >> >> On Mon, Aug 26 2024, Marek Szyprowski wrote: >>> On 11.08.2024 09:09, Baruch Siach wrote: >>>> From: Catalin Marinas >>>> >>>> Hardware DMA limit might not be power of 2. When RAM range starts above >>>> 0, say 4GB, DMA limit of 30 bits should end at 5GB. A single high bit >>>> can not encode this limit. >>>> >>>> Use plain address for DMA zone limit. >>>> >>>> Since DMA zone can now potentially span beyond 4GB physical limit of >>>> DMA32, make sure to use DMA zone for GFP_DMA32 allocations in that cas= e. >>>> >>>> Signed-off-by: Catalin Marinas >>>> Co-developed-by: Baruch Siach >>>> Signed-off-by: Baruch Siach >>>> --- >>> This patch landed recently in linux-next as commit ba0fb44aed47 >>> ("dma-mapping: replace zone_dma_bits by zone_dma_limit"). During my >>> tests I found that it introduces the following warning on ARM64/Rockchip >>> based Odroid M1 board (arch/arm64/boot/dts/rockchip/rk3568-odroid-m1.dt= s): >> Does this warning go away if you revert both 3be9b846896d and ba0fb44aed= 47? > > Yes, linux-next with above mentioned commits reverted works fine. > > >> Upstream rockchip DTs have no dma-ranges property. Is that the case for >> your platform as well? >> >> Can you share kernel report of DMA zones and swiotlb? On my platform I g= et: >> >> [ 0.000000] Zone ranges: >> [ 0.000000] DMA [mem 0x0000000800000000-0x000000083fffffff] >> [ 0.000000] DMA32 empty >> [ 0.000000] Normal [mem 0x0000000840000000-0x0000000fffffffff] >> ... >> [ 0.000000] software IO TLB: area num 8. >> [ 0.000000] software IO TLB: mapped [mem 0x000000083be38000-0x0000000= 83fe38000] (64MB) >> >> What do you get at your end? > > On ba0fb44aed47 I got: > > [ =C2=A0=C2=A0=C2=A00.000000] NUMA: No NUMA configuration found > [ =C2=A0=C2=A0=C2=A00.000000] NUMA: Faking a node at [mem=20 > 0x0000000000200000-0x00000001ffffffff] > [ =C2=A0=C2=A0=C2=A00.000000] NUMA: NODE_DATA [mem 0x1ff7a0600-0x1ff7a2ff= f] > [ =C2=A0=C2=A0=C2=A00.000000] Zone ranges: > [ =C2=A0=C2=A0=C2=A00.000000] =C2=A0=C2=A0DMA =C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0[mem 0x0000000000200000-0x00000001ffffffff] > [ =C2=A0=C2=A0=C2=A00.000000] =C2=A0=C2=A0DMA32 =C2=A0=C2=A0=C2=A0empty > [ =C2=A0=C2=A0=C2=A00.000000] =C2=A0=C2=A0Normal =C2=A0=C2=A0empty > [ =C2=A0=C2=A0=C2=A00.000000] Movable zone start for each node > [ =C2=A0=C2=A0=C2=A00.000000] Early memory node ranges > [ =C2=A0=C2=A0=C2=A00.000000] =C2=A0=C2=A0node =C2=A0=C2=A00: [mem 0x0000= 000000200000-0x00000000083fffff] > [ =C2=A0=C2=A0=C2=A00.000000] =C2=A0=C2=A0node =C2=A0=C2=A00: [mem 0x0000= 000009400000-0x00000000efffffff] > [ =C2=A0=C2=A0=C2=A00.000000] =C2=A0=C2=A0node =C2=A0=C2=A00: [mem 0x0000= 0001f0000000-0x00000001ffffffff] > [ =C2=A0=C2=A0=C2=A00.000000] Initmem setup node 0 [mem=20 > 0x0000000000200000-0x00000001ffffffff] > [ =C2=A0=C2=A0=C2=A00.000000] On node 0, zone DMA: 512 pages in unavailab= le ranges > [ =C2=A0=C2=A0=C2=A00.000000] On node 0, zone DMA: 4096 pages in unavaila= ble ranges > [ =C2=A0=C2=A0=C2=A00.000000] cma: Reserved 96 MiB at 0x00000001f0000000 = on node -1 > > ... > > [ =C2=A0=C2=A0=C2=A00.000000] software IO TLB: SWIOTLB bounce buffer size= adjusted to 3MB > [ =C2=A0=C2=A0=C2=A00.000000] software IO TLB: area num 4. > [ =C2=A0=C2=A0=C2=A00.000000] software IO TLB: mapped [mem=20 > 0x00000001fac00000-0x00000001fb000000] (4MB) > > On the fa3c109a6d30 (parent commit of the $subject) I got: > > [ =C2=A0=C2=A0=C2=A00.000000] NUMA: No NUMA configuration found > [ =C2=A0=C2=A0=C2=A00.000000] NUMA: Faking a node at [mem=20 > 0x0000000000200000-0x00000001ffffffff] > [ =C2=A0=C2=A0=C2=A00.000000] NUMA: NODE_DATA [mem 0x1ff7a0600-0x1ff7a2ff= f] > [ =C2=A0=C2=A0=C2=A00.000000] Zone ranges: > [ =C2=A0=C2=A0=C2=A00.000000] =C2=A0=C2=A0DMA =C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0[mem 0x0000000000200000-0x00000000ffffffff] > [ =C2=A0=C2=A0=C2=A00.000000] =C2=A0=C2=A0DMA32 =C2=A0=C2=A0=C2=A0empty > [ =C2=A0=C2=A0=C2=A00.000000] =C2=A0=C2=A0Normal =C2=A0=C2=A0[mem 0x00000= 00100000000-0x00000001ffffffff] > [ =C2=A0=C2=A0=C2=A00.000000] Movable zone start for each node > [ =C2=A0=C2=A0=C2=A00.000000] Early memory node ranges > [ =C2=A0=C2=A0=C2=A00.000000] =C2=A0=C2=A0node =C2=A0=C2=A00: [mem 0x0000= 000000200000-0x00000000083fffff] > [ =C2=A0=C2=A0=C2=A00.000000] =C2=A0=C2=A0node =C2=A0=C2=A00: [mem 0x0000= 000009400000-0x00000000efffffff] > [ =C2=A0=C2=A0=C2=A00.000000] =C2=A0=C2=A0node =C2=A0=C2=A00: [mem 0x0000= 0001f0000000-0x00000001ffffffff] > [ =C2=A0=C2=A0=C2=A00.000000] Initmem setup node 0 [mem=20 > 0x0000000000200000-0x00000001ffffffff] > [ =C2=A0=C2=A0=C2=A00.000000] On node 0, zone DMA: 512 pages in unavailab= le ranges > [ =C2=A0=C2=A0=C2=A00.000000] On node 0, zone DMA: 4096 pages in unavaila= ble ranges > [ =C2=A0=C2=A0=C2=A00.000000] cma: Reserved 96 MiB at 0x00000000ea000000 = on node -1 > > ... > > [ =C2=A0=C2=A0=C2=A00.000000] software IO TLB: area num 4. > [ =C2=A0=C2=A0=C2=A00.000000] software IO TLB: mapped [mem=20 > 0x00000000e6000000-0x00000000ea000000] (64MB) > > It looks that for some reasons $subject patch changes the default zone=20 > and swiotlb configuration. Does this fix the issue? diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c index bfb10969cbf0..7fcd0aaa9bb6 100644 --- a/arch/arm64/mm/init.c +++ b/arch/arm64/mm/init.c @@ -116,6 +116,9 @@ static void __init arch_reserve_crashkernel(void) =20 static phys_addr_t __init max_zone_phys(phys_addr_t zone_limit) { + if (memblock_start_of_DRAM() < U32_MAX) + zone_limit =3D min(zone_limit, U32_MAX); + return min(zone_limit, memblock_end_of_DRAM() - 1) + 1; } =20 Thanks, baruch >>> ------------[ cut here ]------------ >>> dwmmc_rockchip fe2b0000.mmc: swiotlb addr 0x00000001faf00000+4096 >>> overflow (mask ffffffff, bus limit 0). >>> WARNING: CPU: 3 PID: 1 at kernel/dma/swiotlb.c:1594 swiotlb_map+0x2f0/0= x308 >>> Modules linked in: >>> CPU: 3 UID: 0 PID: 1 Comm: swapper/0 Not tainted 6.11.0-rc4+ #15278 >>> Hardware name: Hardkernel ODROID-M1 (DT) >>> pstate: 60400009 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=3D--) >>> pc : swiotlb_map+0x2f0/0x308 >>> lr : swiotlb_map+0x2f0/0x308 >>> ... >>> Call trace: >>> =C2=A0swiotlb_map+0x2f0/0x308 >>> =C2=A0dma_direct_map_sg+0x9c/0x2e4 >>> =C2=A0__dma_map_sg_attrs+0x28/0x94 >>> =C2=A0dma_map_sg_attrs+0x10/0x24 >>> =C2=A0dw_mci_pre_dma_transfer+0xb8/0xf4 >>> =C2=A0dw_mci_pre_req+0x50/0x68 >>> =C2=A0mmc_blk_mq_issue_rq+0x3e0/0x964 >>> =C2=A0mmc_mq_queue_rq+0x118/0x2b4 >>> =C2=A0blk_mq_dispatch_rq_list+0x21c/0x714 >>> =C2=A0__blk_mq_sched_dispatch_requests+0x490/0x58c >>> =C2=A0blk_mq_sched_dispatch_requests+0x30/0x6c >>> =C2=A0blk_mq_run_hw_queue+0x284/0x40c >>> =C2=A0blk_mq_flush_plug_list.part.0+0x190/0x974 >>> =C2=A0blk_mq_flush_plug_list+0x1c/0x2c >>> =C2=A0__blk_flush_plug+0xe4/0x140 >>> =C2=A0blk_finish_plug+0x38/0x4c >>> =C2=A0__ext4_get_inode_loc+0x22c/0x654 >>> =C2=A0__ext4_get_inode_loc_noinmem+0x40/0xa8 >>> =C2=A0__ext4_iget+0x154/0xcc0 >>> =C2=A0ext4_get_journal_inode+0x30/0x110 >>> =C2=A0ext4_load_and_init_journal+0x9c/0xaf0 >>> =C2=A0ext4_fill_super+0x1fec/0x2d90 >>> =C2=A0get_tree_bdev+0x140/0x1d8 >>> =C2=A0ext4_get_tree+0x18/0x24 >>> =C2=A0vfs_get_tree+0x28/0xe8 >>> =C2=A0path_mount+0x3e8/0xb7c >>> =C2=A0init_mount+0x68/0xac >>> =C2=A0do_mount_root+0x108/0x1dc >>> =C2=A0mount_root_generic+0x100/0x330 >>> =C2=A0mount_root+0x160/0x2d0 >>> =C2=A0initrd_load+0x1f0/0x2a0 >>> =C2=A0prepare_namespace+0x4c/0x29c >>> =C2=A0kernel_init_freeable+0x4b4/0x50c >>> =C2=A0kernel_init+0x20/0x1d8 >>> =C2=A0ret_from_fork+0x10/0x20 >>> irq event stamp: 1305682 >>> hardirqs last=C2=A0 enabled at (1305681): [] >>> console_unlock+0x124/0x130 >>> hardirqs last disabled at (1305682): [] el1_dbg+0x24/= 0x8c >>> softirqs last=C2=A0 enabled at (1305678): [] >>> handle_softirqs+0x4cc/0x4e4 >>> softirqs last disabled at (1305665): [] >>> __do_softirq+0x14/0x20 >>> ---[ end trace 0000000000000000 ]--- >>> >>> This "bus limit 0" seems to be a bit suspicious to me as well as the >>> fact that swiotlb is used for the MMC DMA. I will investigate this >>> further tomorrow. The board boots fine though. >> Looking at the code I guess that bus_dma_limit set to 0 means no bus >> limit. But dma_mask for your device indicates 32-bit device limit. This >> can't work with address above 4GB. For some reason DMA code tries to >> allocate from higher address. This is most likely the reason >> dma_capable() returns false. > > Indeed this looks like a source of the problem: > > [ =C2=A0=C2=A0=C2=A03.123618] Synopsys Designware Multimedia Card Interfa= ce Driver > [ =C2=A0=C2=A0=C2=A03.139653] dwmmc_rockchip fe2b0000.mmc: IDMAC supports= 32-bit=20 > address mode. > [ =C2=A0=C2=A0=C2=A03.147739] dwmmc_rockchip fe2b0000.mmc: Using internal= DMA controller. > [ =C2=A0=C2=A0=C2=A03.161659] dwmmc_rockchip fe2b0000.mmc: Version ID is = 270a > [ =C2=A0=C2=A0=C2=A03.168455] dwmmc_rockchip fe2b0000.mmc: DW MMC control= ler at irq=20 > 56,32 bit host data width,256 deep fifo > [ =C2=A0=C2=A0=C2=A03.182651] dwmmc_rockchip fe2b0000.mmc: Got CD GPIO > > ... > > [ =C2=A0=C2=A011.009258] ------------[ cut here ]------------ > [ =C2=A0=C2=A011.014762] dwmmc_rockchip fe2b0000.mmc: swiotlb addr=20 > 0x00000001faf00000+4096 overflow (mask ffffffff, bus limit 0). > > >> ... > > Best regards --=20 ~. .~ Tk Open Systems =3D}------------------------------------------------ooO--U--Ooo------------= {=3D - baruch@tkos.co.il - tel: +972.52.368.4656, http://www.tkos.co.il - 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 4D2A4C5320E for ; Tue, 27 Aug 2024 07:04:23 +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:MIME-Version:Message-ID:Date:References :In-Reply-To:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=aOjNfJ8NAcw48Oxl62/ZfbOeNydn7AO8bJItNjAGaxM=; b=L5dSacGsWnHir+ x1Kc5CEqHh6G0qva69yqBey3UKXwXCBPjKYbOkKJqDyA3splnTbU6LWFUO1nVn6fJ/vLeB5QyBCYb mJhc0yAkFR3YgzFC03V2tEdeDijz/epjOfuO0wvj7krwBCqM/4C4dmG6mnsh01dcch/R7FLtD3Nqy LhwUATAcimmVd7WvMWdNcfxmOIB0aK8hxLIBTvrjz6Tn9NHownCzYEwGOI/l4pFo1LJLL3IvFmphQ zZ/bcqwr9o55Jvr5+ay+NON2pvYpIzp4RTFRuW/2umckVqcu3LzXlxFBwmVPre8S0/P6fvALwVklp 7E9/vVT8vfWYVydYmoXQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1siqFY-0000000A8ix-1Mcs; Tue, 27 Aug 2024 07:04:20 +0000 Received: from mail.tkos.co.il ([84.110.109.230]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1siqEe-0000000A8Vf-1qTy; Tue, 27 Aug 2024 07:03:26 +0000 Received: from localhost (unknown [10.0.8.3]) by mail.tkos.co.il (Postfix) with ESMTP id 4385F440F60; Tue, 27 Aug 2024 10:01:30 +0300 (IDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=tkos.co.il; s=default; t=1724742090; bh=rPGBSZ1Nu4oGte5lWpykwFS7VqD7s8DLfHaTrjWVjYU=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=mC8RkKPDlTDMdLg8O5LjBN7xg7+HIINo6Tc0jbi6128/xF1edkc82jSUISPuUlv29 3GqwSaxrrN87uFR+qSqiBIcQeV7Y6ruXOdEHdT+2zHw+5CZJbxsu2doa6bTWDTT9n0 5LucHaxgKPdt2p1HGotyICNCP8Av2kGH54uBlDq8LWLgg2k8DLgBbDIKuDmHMMZEoE gBoPeiNZAPLGi4ei0Yh70fn6+DXUfubBPbm/9wo7A1L1gsxd8W+51TnS6LdUMZbSTt aQRuxk66+dE+nmekRRWQb6Vmi0SSYOZKyIzNoJ8IZIM7Tdm0YfvlvDfV0QYvAUoOxS YyZmgm0PxEzPA== From: Baruch Siach To: Marek Szyprowski Cc: Christoph Hellwig , Catalin Marinas , Will Deacon , Robin Murphy , iommu@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-s390@vger.kernel.org, Petr =?utf-8?B?VGVzYcWZw61r?= , Ramon Fried , Elad Nachman , linux-rockchip@lists.infradead.org Subject: Re: [PATCH v6 RESED 1/2] dma: replace zone_dma_bits by zone_dma_limit In-Reply-To: (Marek Szyprowski's message of "Tue, 27 Aug 2024 08:14:03 +0200") References: <17c067618b93e5d71f19c37826d54db4299621a3.1723359916.git.baruch@tkos.co.il> <53d988b1-bdce-422a-ae4e-158f305ad703@samsung.com> <87mskyva7o.fsf@tarshish> Date: Tue, 27 Aug 2024 10:03:21 +0300 Message-ID: <87ikvmv45i.fsf@tarshish> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240827_000324_915124_415364F7 X-CRM114-Status: GOOD ( 25.31 ) X-BeenThere: linux-rockchip@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Upstream kernel work for Rockchip platforms List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org SGkgTWFyZWssCgpPbiBUdWUsIEF1ZyAyNyAyMDI0LCBNYXJlayBTenlwcm93c2tpIHdyb3RlOgo+ IE9uIDI3LjA4LjIwMjQgMDY6NTIsIEJhcnVjaCBTaWFjaCB3cm90ZToKPj4gSGkgTWFyZWssCj4+ Cj4+IFRoYW5rcyBmb3IgeW91ciByZXBvcnQuCj4+Cj4+IE9uIE1vbiwgQXVnIDI2IDIwMjQsIE1h cmVrIFN6eXByb3dza2kgd3JvdGU6Cj4+PiBPbiAxMS4wOC4yMDI0IDA5OjA5LCBCYXJ1Y2ggU2lh Y2ggd3JvdGU6Cj4+Pj4gRnJvbTogQ2F0YWxpbiBNYXJpbmFzIDxjYXRhbGluLm1hcmluYXNAYXJt LmNvbT4KPj4+Pgo+Pj4+IEhhcmR3YXJlIERNQSBsaW1pdCBtaWdodCBub3QgYmUgcG93ZXIgb2Yg Mi4gV2hlbiBSQU0gcmFuZ2Ugc3RhcnRzIGFib3ZlCj4+Pj4gMCwgc2F5IDRHQiwgRE1BIGxpbWl0 IG9mIDMwIGJpdHMgc2hvdWxkIGVuZCBhdCA1R0IuIEEgc2luZ2xlIGhpZ2ggYml0Cj4+Pj4gY2Fu IG5vdCBlbmNvZGUgdGhpcyBsaW1pdC4KPj4+Pgo+Pj4+IFVzZSBwbGFpbiBhZGRyZXNzIGZvciBE TUEgem9uZSBsaW1pdC4KPj4+Pgo+Pj4+IFNpbmNlIERNQSB6b25lIGNhbiBub3cgcG90ZW50aWFs bHkgc3BhbiBiZXlvbmQgNEdCIHBoeXNpY2FsIGxpbWl0IG9mCj4+Pj4gRE1BMzIsIG1ha2Ugc3Vy ZSB0byB1c2UgRE1BIHpvbmUgZm9yIEdGUF9ETUEzMiBhbGxvY2F0aW9ucyBpbiB0aGF0IGNhc2Uu Cj4+Pj4KPj4+PiBTaWduZWQtb2ZmLWJ5OiBDYXRhbGluIE1hcmluYXMgPGNhdGFsaW4ubWFyaW5h c0Bhcm0uY29tPgo+Pj4+IENvLWRldmVsb3BlZC1ieTogQmFydWNoIFNpYWNoIDxiYXJ1Y2hAdGtv cy5jby5pbD4KPj4+PiBTaWduZWQtb2ZmLWJ5OiBCYXJ1Y2ggU2lhY2ggPGJhcnVjaEB0a29zLmNv LmlsPgo+Pj4+IC0tLQo+Pj4gVGhpcyBwYXRjaCBsYW5kZWQgcmVjZW50bHkgaW4gbGludXgtbmV4 dCBhcyBjb21taXQgYmEwZmI0NGFlZDQ3Cj4+PiAoImRtYS1tYXBwaW5nOiByZXBsYWNlIHpvbmVf ZG1hX2JpdHMgYnkgem9uZV9kbWFfbGltaXQiKS4gRHVyaW5nIG15Cj4+PiB0ZXN0cyBJIGZvdW5k IHRoYXQgaXQgaW50cm9kdWNlcyB0aGUgZm9sbG93aW5nIHdhcm5pbmcgb24gQVJNNjQvUm9ja2No aXAKPj4+IGJhc2VkIE9kcm9pZCBNMSBib2FyZCAoYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hp cC9yazM1Njgtb2Ryb2lkLW0xLmR0cyk6Cj4+IERvZXMgdGhpcyB3YXJuaW5nIGdvIGF3YXkgaWYg eW91IHJldmVydCBib3RoIDNiZTliODQ2ODk2ZCBhbmQgYmEwZmI0NGFlZDQ3Pwo+Cj4gWWVzLCBs aW51eC1uZXh0IHdpdGggYWJvdmUgbWVudGlvbmVkIGNvbW1pdHMgcmV2ZXJ0ZWQgd29ya3MgZmlu ZS4KPgo+Cj4+IFVwc3RyZWFtIHJvY2tjaGlwIERUcyBoYXZlIG5vIGRtYS1yYW5nZXMgcHJvcGVy dHkuIElzIHRoYXQgdGhlIGNhc2UgZm9yCj4+IHlvdXIgcGxhdGZvcm0gYXMgd2VsbD8KPj4KPj4g Q2FuIHlvdSBzaGFyZSBrZXJuZWwgcmVwb3J0IG9mIERNQSB6b25lcyBhbmQgc3dpb3RsYj8gT24g bXkgcGxhdGZvcm0gSSBnZXQ6Cj4+Cj4+IFsgICAgMC4wMDAwMDBdIFpvbmUgcmFuZ2VzOgo+PiBb ICAgIDAuMDAwMDAwXSAgIERNQSAgICAgIFttZW0gMHgwMDAwMDAwODAwMDAwMDAwLTB4MDAwMDAw MDgzZmZmZmZmZl0KPj4gWyAgICAwLjAwMDAwMF0gICBETUEzMiAgICBlbXB0eQo+PiBbICAgIDAu MDAwMDAwXSAgIE5vcm1hbCAgIFttZW0gMHgwMDAwMDAwODQwMDAwMDAwLTB4MDAwMDAwMGZmZmZm ZmZmZl0KPj4gLi4uCj4+IFsgICAgMC4wMDAwMDBdIHNvZnR3YXJlIElPIFRMQjogYXJlYSBudW0g OC4KPj4gWyAgICAwLjAwMDAwMF0gc29mdHdhcmUgSU8gVExCOiBtYXBwZWQgW21lbSAweDAwMDAw MDA4M2JlMzgwMDAtMHgwMDAwMDAwODNmZTM4MDAwXSAoNjRNQikKPj4KPj4gV2hhdCBkbyB5b3Ug Z2V0IGF0IHlvdXIgZW5kPwo+Cj4gT24gYmEwZmI0NGFlZDQ3IEkgZ290Ogo+Cj4gWyDCoMKgwqAw LjAwMDAwMF0gTlVNQTogTm8gTlVNQSBjb25maWd1cmF0aW9uIGZvdW5kCj4gWyDCoMKgwqAwLjAw MDAwMF0gTlVNQTogRmFraW5nIGEgbm9kZSBhdCBbbWVtIAo+IDB4MDAwMDAwMDAwMDIwMDAwMC0w eDAwMDAwMDAxZmZmZmZmZmZdCj4gWyDCoMKgwqAwLjAwMDAwMF0gTlVNQTogTk9ERV9EQVRBIFtt ZW0gMHgxZmY3YTA2MDAtMHgxZmY3YTJmZmZdCj4gWyDCoMKgwqAwLjAwMDAwMF0gWm9uZSByYW5n ZXM6Cj4gWyDCoMKgwqAwLjAwMDAwMF0gwqDCoERNQSDCoMKgwqDCoMKgW21lbSAweDAwMDAwMDAw MDAyMDAwMDAtMHgwMDAwMDAwMWZmZmZmZmZmXQo+IFsgwqDCoMKgMC4wMDAwMDBdIMKgwqBETUEz MiDCoMKgwqBlbXB0eQo+IFsgwqDCoMKgMC4wMDAwMDBdIMKgwqBOb3JtYWwgwqDCoGVtcHR5Cj4g WyDCoMKgwqAwLjAwMDAwMF0gTW92YWJsZSB6b25lIHN0YXJ0IGZvciBlYWNoIG5vZGUKPiBbIMKg wqDCoDAuMDAwMDAwXSBFYXJseSBtZW1vcnkgbm9kZSByYW5nZXMKPiBbIMKgwqDCoDAuMDAwMDAw XSDCoMKgbm9kZSDCoMKgMDogW21lbSAweDAwMDAwMDAwMDAyMDAwMDAtMHgwMDAwMDAwMDA4M2Zm ZmZmXQo+IFsgwqDCoMKgMC4wMDAwMDBdIMKgwqBub2RlIMKgwqAwOiBbbWVtIDB4MDAwMDAwMDAw OTQwMDAwMC0weDAwMDAwMDAwZWZmZmZmZmZdCj4gWyDCoMKgwqAwLjAwMDAwMF0gwqDCoG5vZGUg wqDCoDA6IFttZW0gMHgwMDAwMDAwMWYwMDAwMDAwLTB4MDAwMDAwMDFmZmZmZmZmZl0KPiBbIMKg wqDCoDAuMDAwMDAwXSBJbml0bWVtIHNldHVwIG5vZGUgMCBbbWVtIAo+IDB4MDAwMDAwMDAwMDIw MDAwMC0weDAwMDAwMDAxZmZmZmZmZmZdCj4gWyDCoMKgwqAwLjAwMDAwMF0gT24gbm9kZSAwLCB6 b25lIERNQTogNTEyIHBhZ2VzIGluIHVuYXZhaWxhYmxlIHJhbmdlcwo+IFsgwqDCoMKgMC4wMDAw MDBdIE9uIG5vZGUgMCwgem9uZSBETUE6IDQwOTYgcGFnZXMgaW4gdW5hdmFpbGFibGUgcmFuZ2Vz Cj4gWyDCoMKgwqAwLjAwMDAwMF0gY21hOiBSZXNlcnZlZCA5NiBNaUIgYXQgMHgwMDAwMDAwMWYw MDAwMDAwIG9uIG5vZGUgLTEKPgo+IC4uLgo+Cj4gWyDCoMKgwqAwLjAwMDAwMF0gc29mdHdhcmUg SU8gVExCOiBTV0lPVExCIGJvdW5jZSBidWZmZXIgc2l6ZSBhZGp1c3RlZCB0byAzTUIKPiBbIMKg wqDCoDAuMDAwMDAwXSBzb2Z0d2FyZSBJTyBUTEI6IGFyZWEgbnVtIDQuCj4gWyDCoMKgwqAwLjAw MDAwMF0gc29mdHdhcmUgSU8gVExCOiBtYXBwZWQgW21lbSAKPiAweDAwMDAwMDAxZmFjMDAwMDAt MHgwMDAwMDAwMWZiMDAwMDAwXSAoNE1CKQo+Cj4gT24gdGhlIGZhM2MxMDlhNmQzMCAocGFyZW50 IGNvbW1pdCBvZiB0aGUgJHN1YmplY3QpIEkgZ290Ogo+Cj4gWyDCoMKgwqAwLjAwMDAwMF0gTlVN QTogTm8gTlVNQSBjb25maWd1cmF0aW9uIGZvdW5kCj4gWyDCoMKgwqAwLjAwMDAwMF0gTlVNQTog RmFraW5nIGEgbm9kZSBhdCBbbWVtIAo+IDB4MDAwMDAwMDAwMDIwMDAwMC0weDAwMDAwMDAxZmZm ZmZmZmZdCj4gWyDCoMKgwqAwLjAwMDAwMF0gTlVNQTogTk9ERV9EQVRBIFttZW0gMHgxZmY3YTA2 MDAtMHgxZmY3YTJmZmZdCj4gWyDCoMKgwqAwLjAwMDAwMF0gWm9uZSByYW5nZXM6Cj4gWyDCoMKg wqAwLjAwMDAwMF0gwqDCoERNQSDCoMKgwqDCoMKgW21lbSAweDAwMDAwMDAwMDAyMDAwMDAtMHgw MDAwMDAwMGZmZmZmZmZmXQo+IFsgwqDCoMKgMC4wMDAwMDBdIMKgwqBETUEzMiDCoMKgwqBlbXB0 eQo+IFsgwqDCoMKgMC4wMDAwMDBdIMKgwqBOb3JtYWwgwqDCoFttZW0gMHgwMDAwMDAwMTAwMDAw MDAwLTB4MDAwMDAwMDFmZmZmZmZmZl0KPiBbIMKgwqDCoDAuMDAwMDAwXSBNb3ZhYmxlIHpvbmUg c3RhcnQgZm9yIGVhY2ggbm9kZQo+IFsgwqDCoMKgMC4wMDAwMDBdIEVhcmx5IG1lbW9yeSBub2Rl IHJhbmdlcwo+IFsgwqDCoMKgMC4wMDAwMDBdIMKgwqBub2RlIMKgwqAwOiBbbWVtIDB4MDAwMDAw MDAwMDIwMDAwMC0weDAwMDAwMDAwMDgzZmZmZmZdCj4gWyDCoMKgwqAwLjAwMDAwMF0gwqDCoG5v ZGUgwqDCoDA6IFttZW0gMHgwMDAwMDAwMDA5NDAwMDAwLTB4MDAwMDAwMDBlZmZmZmZmZl0KPiBb IMKgwqDCoDAuMDAwMDAwXSDCoMKgbm9kZSDCoMKgMDogW21lbSAweDAwMDAwMDAxZjAwMDAwMDAt MHgwMDAwMDAwMWZmZmZmZmZmXQo+IFsgwqDCoMKgMC4wMDAwMDBdIEluaXRtZW0gc2V0dXAgbm9k ZSAwIFttZW0gCj4gMHgwMDAwMDAwMDAwMjAwMDAwLTB4MDAwMDAwMDFmZmZmZmZmZl0KPiBbIMKg wqDCoDAuMDAwMDAwXSBPbiBub2RlIDAsIHpvbmUgRE1BOiA1MTIgcGFnZXMgaW4gdW5hdmFpbGFi bGUgcmFuZ2VzCj4gWyDCoMKgwqAwLjAwMDAwMF0gT24gbm9kZSAwLCB6b25lIERNQTogNDA5NiBw YWdlcyBpbiB1bmF2YWlsYWJsZSByYW5nZXMKPiBbIMKgwqDCoDAuMDAwMDAwXSBjbWE6IFJlc2Vy dmVkIDk2IE1pQiBhdCAweDAwMDAwMDAwZWEwMDAwMDAgb24gbm9kZSAtMQo+Cj4gLi4uCj4KPiBb IMKgwqDCoDAuMDAwMDAwXSBzb2Z0d2FyZSBJTyBUTEI6IGFyZWEgbnVtIDQuCj4gWyDCoMKgwqAw LjAwMDAwMF0gc29mdHdhcmUgSU8gVExCOiBtYXBwZWQgW21lbSAKPiAweDAwMDAwMDAwZTYwMDAw MDAtMHgwMDAwMDAwMGVhMDAwMDAwXSAoNjRNQikKPgo+IEl0IGxvb2tzIHRoYXQgZm9yIHNvbWUg cmVhc29ucyAkc3ViamVjdCBwYXRjaCBjaGFuZ2VzIHRoZSBkZWZhdWx0IHpvbmUgCj4gYW5kIHN3 aW90bGIgY29uZmlndXJhdGlvbi4KCkRvZXMgdGhpcyBmaXggdGhlIGlzc3VlPwoKZGlmZiAtLWdp dCBhL2FyY2gvYXJtNjQvbW0vaW5pdC5jIGIvYXJjaC9hcm02NC9tbS9pbml0LmMKaW5kZXggYmZi MTA5NjljYmYwLi43ZmNkMGFhYTliYjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvbW0vaW5pdC5j CisrKyBiL2FyY2gvYXJtNjQvbW0vaW5pdC5jCkBAIC0xMTYsNiArMTE2LDkgQEAgc3RhdGljIHZv aWQgX19pbml0IGFyY2hfcmVzZXJ2ZV9jcmFzaGtlcm5lbCh2b2lkKQogCiBzdGF0aWMgcGh5c19h ZGRyX3QgX19pbml0IG1heF96b25lX3BoeXMocGh5c19hZGRyX3Qgem9uZV9saW1pdCkKIHsKKwlp ZiAobWVtYmxvY2tfc3RhcnRfb2ZfRFJBTSgpIDwgVTMyX01BWCkKKwkJem9uZV9saW1pdCA9IG1p bih6b25lX2xpbWl0LCBVMzJfTUFYKTsKKwogCXJldHVybiBtaW4oem9uZV9saW1pdCwgbWVtYmxv Y2tfZW5kX29mX0RSQU0oKSAtIDEpICsgMTsKIH0KIAoKVGhhbmtzLApiYXJ1Y2gKCj4+PiAtLS0t LS0tLS0tLS1bIGN1dCBoZXJlIF0tLS0tLS0tLS0tLS0KPj4+IGR3bW1jX3JvY2tjaGlwIGZlMmIw MDAwLm1tYzogc3dpb3RsYiBhZGRyIDB4MDAwMDAwMDFmYWYwMDAwMCs0MDk2Cj4+PiBvdmVyZmxv dyAobWFzayBmZmZmZmZmZiwgYnVzIGxpbWl0IDApLgo+Pj4gV0FSTklORzogQ1BVOiAzIFBJRDog MSBhdCBrZXJuZWwvZG1hL3N3aW90bGIuYzoxNTk0IHN3aW90bGJfbWFwKzB4MmYwLzB4MzA4Cj4+ PiBNb2R1bGVzIGxpbmtlZCBpbjoKPj4+IENQVTogMyBVSUQ6IDAgUElEOiAxIENvbW06IHN3YXBw ZXIvMCBOb3QgdGFpbnRlZCA2LjExLjAtcmM0KyAjMTUyNzgKPj4+IEhhcmR3YXJlIG5hbWU6IEhh cmRrZXJuZWwgT0RST0lELU0xIChEVCkKPj4+IHBzdGF0ZTogNjA0MDAwMDkgKG5aQ3YgZGFpZiAr UEFOIC1VQU8gLVRDTyAtRElUIC1TU0JTIEJUWVBFPS0tKQo+Pj4gcGMgOiBzd2lvdGxiX21hcCsw eDJmMC8weDMwOAo+Pj4gbHIgOiBzd2lvdGxiX21hcCsweDJmMC8weDMwOAo+Pj4gLi4uCj4+PiBD YWxsIHRyYWNlOgo+Pj4gICDCoHN3aW90bGJfbWFwKzB4MmYwLzB4MzA4Cj4+PiAgIMKgZG1hX2Rp cmVjdF9tYXBfc2crMHg5Yy8weDJlNAo+Pj4gICDCoF9fZG1hX21hcF9zZ19hdHRycysweDI4LzB4 OTQKPj4+ICAgwqBkbWFfbWFwX3NnX2F0dHJzKzB4MTAvMHgyNAo+Pj4gICDCoGR3X21jaV9wcmVf ZG1hX3RyYW5zZmVyKzB4YjgvMHhmNAo+Pj4gICDCoGR3X21jaV9wcmVfcmVxKzB4NTAvMHg2OAo+ Pj4gICDCoG1tY19ibGtfbXFfaXNzdWVfcnErMHgzZTAvMHg5NjQKPj4+ICAgwqBtbWNfbXFfcXVl dWVfcnErMHgxMTgvMHgyYjQKPj4+ICAgwqBibGtfbXFfZGlzcGF0Y2hfcnFfbGlzdCsweDIxYy8w eDcxNAo+Pj4gICDCoF9fYmxrX21xX3NjaGVkX2Rpc3BhdGNoX3JlcXVlc3RzKzB4NDkwLzB4NThj Cj4+PiAgIMKgYmxrX21xX3NjaGVkX2Rpc3BhdGNoX3JlcXVlc3RzKzB4MzAvMHg2Ywo+Pj4gICDC oGJsa19tcV9ydW5faHdfcXVldWUrMHgyODQvMHg0MGMKPj4+ICAgwqBibGtfbXFfZmx1c2hfcGx1 Z19saXN0LnBhcnQuMCsweDE5MC8weDk3NAo+Pj4gICDCoGJsa19tcV9mbHVzaF9wbHVnX2xpc3Qr MHgxYy8weDJjCj4+PiAgIMKgX19ibGtfZmx1c2hfcGx1ZysweGU0LzB4MTQwCj4+PiAgIMKgYmxr X2ZpbmlzaF9wbHVnKzB4MzgvMHg0Ywo+Pj4gICDCoF9fZXh0NF9nZXRfaW5vZGVfbG9jKzB4MjJj LzB4NjU0Cj4+PiAgIMKgX19leHQ0X2dldF9pbm9kZV9sb2Nfbm9pbm1lbSsweDQwLzB4YTgKPj4+ ICAgwqBfX2V4dDRfaWdldCsweDE1NC8weGNjMAo+Pj4gICDCoGV4dDRfZ2V0X2pvdXJuYWxfaW5v ZGUrMHgzMC8weDExMAo+Pj4gICDCoGV4dDRfbG9hZF9hbmRfaW5pdF9qb3VybmFsKzB4OWMvMHhh ZjAKPj4+ICAgwqBleHQ0X2ZpbGxfc3VwZXIrMHgxZmVjLzB4MmQ5MAo+Pj4gICDCoGdldF90cmVl X2JkZXYrMHgxNDAvMHgxZDgKPj4+ICAgwqBleHQ0X2dldF90cmVlKzB4MTgvMHgyNAo+Pj4gICDC oHZmc19nZXRfdHJlZSsweDI4LzB4ZTgKPj4+ICAgwqBwYXRoX21vdW50KzB4M2U4LzB4YjdjCj4+ PiAgIMKgaW5pdF9tb3VudCsweDY4LzB4YWMKPj4+ICAgwqBkb19tb3VudF9yb290KzB4MTA4LzB4 MWRjCj4+PiAgIMKgbW91bnRfcm9vdF9nZW5lcmljKzB4MTAwLzB4MzMwCj4+PiAgIMKgbW91bnRf cm9vdCsweDE2MC8weDJkMAo+Pj4gICDCoGluaXRyZF9sb2FkKzB4MWYwLzB4MmEwCj4+PiAgIMKg cHJlcGFyZV9uYW1lc3BhY2UrMHg0Yy8weDI5Ywo+Pj4gICDCoGtlcm5lbF9pbml0X2ZyZWVhYmxl KzB4NGI0LzB4NTBjCj4+PiAgIMKga2VybmVsX2luaXQrMHgyMC8weDFkOAo+Pj4gICDCoHJldF9m cm9tX2ZvcmsrMHgxMC8weDIwCj4+PiBpcnEgZXZlbnQgc3RhbXA6IDEzMDU2ODIKPj4+IGhhcmRp cnFzIGxhc3TCoCBlbmFibGVkIGF0ICgxMzA1NjgxKTogWzxmZmZmODAwMDgwMGUzMzJjPl0KPj4+ IGNvbnNvbGVfdW5sb2NrKzB4MTI0LzB4MTMwCj4+PiBoYXJkaXJxcyBsYXN0IGRpc2FibGVkIGF0 ICgxMzA1NjgyKTogWzxmZmZmODAwMDgxMjRlNjg0Pl0gZWwxX2RiZysweDI0LzB4OGMKPj4+IHNv ZnRpcnFzIGxhc3TCoCBlbmFibGVkIGF0ICgxMzA1Njc4KTogWzxmZmZmODAwMDgwMDViZTFjPl0K Pj4+IGhhbmRsZV9zb2Z0aXJxcysweDRjYy8weDRlNAo+Pj4gc29mdGlycXMgbGFzdCBkaXNhYmxl ZCBhdCAoMTMwNTY2NSk6IFs8ZmZmZjgwMDA4MDAxMDViMD5dCj4+PiBfX2RvX3NvZnRpcnErMHgx NC8weDIwCj4+PiAtLS1bIGVuZCB0cmFjZSAwMDAwMDAwMDAwMDAwMDAwIF0tLS0KPj4+Cj4+PiBU aGlzICJidXMgbGltaXQgMCIgc2VlbXMgdG8gYmUgYSBiaXQgc3VzcGljaW91cyB0byBtZSBhcyB3 ZWxsIGFzIHRoZQo+Pj4gZmFjdCB0aGF0IHN3aW90bGIgaXMgdXNlZCBmb3IgdGhlIE1NQyBETUEu IEkgd2lsbCBpbnZlc3RpZ2F0ZSB0aGlzCj4+PiBmdXJ0aGVyIHRvbW9ycm93LiBUaGUgYm9hcmQg Ym9vdHMgZmluZSB0aG91Z2guCj4+IExvb2tpbmcgYXQgdGhlIGNvZGUgSSBndWVzcyB0aGF0IGJ1 c19kbWFfbGltaXQgc2V0IHRvIDAgbWVhbnMgbm8gYnVzCj4+IGxpbWl0LiBCdXQgZG1hX21hc2sg Zm9yIHlvdXIgZGV2aWNlIGluZGljYXRlcyAzMi1iaXQgZGV2aWNlIGxpbWl0LiBUaGlzCj4+IGNh bid0IHdvcmsgd2l0aCBhZGRyZXNzIGFib3ZlIDRHQi4gRm9yIHNvbWUgcmVhc29uIERNQSBjb2Rl IHRyaWVzIHRvCj4+IGFsbG9jYXRlIGZyb20gaGlnaGVyIGFkZHJlc3MuIFRoaXMgaXMgbW9zdCBs aWtlbHkgdGhlIHJlYXNvbgo+PiBkbWFfY2FwYWJsZSgpIHJldHVybnMgZmFsc2UuCj4KPiBJbmRl ZWQgdGhpcyBsb29rcyBsaWtlIGEgc291cmNlIG9mIHRoZSBwcm9ibGVtOgo+Cj4gWyDCoMKgwqAz LjEyMzYxOF0gU3lub3BzeXMgRGVzaWdud2FyZSBNdWx0aW1lZGlhIENhcmQgSW50ZXJmYWNlIERy aXZlcgo+IFsgwqDCoMKgMy4xMzk2NTNdIGR3bW1jX3JvY2tjaGlwIGZlMmIwMDAwLm1tYzogSURN QUMgc3VwcG9ydHMgMzItYml0IAo+IGFkZHJlc3MgbW9kZS4KPiBbIMKgwqDCoDMuMTQ3NzM5XSBk d21tY19yb2NrY2hpcCBmZTJiMDAwMC5tbWM6IFVzaW5nIGludGVybmFsIERNQSBjb250cm9sbGVy Lgo+IFsgwqDCoMKgMy4xNjE2NTldIGR3bW1jX3JvY2tjaGlwIGZlMmIwMDAwLm1tYzogVmVyc2lv biBJRCBpcyAyNzBhCj4gWyDCoMKgwqAzLjE2ODQ1NV0gZHdtbWNfcm9ja2NoaXAgZmUyYjAwMDAu bW1jOiBEVyBNTUMgY29udHJvbGxlciBhdCBpcnEgCj4gNTYsMzIgYml0IGhvc3QgZGF0YSB3aWR0 aCwyNTYgZGVlcCBmaWZvCj4gWyDCoMKgwqAzLjE4MjY1MV0gZHdtbWNfcm9ja2NoaXAgZmUyYjAw MDAubW1jOiBHb3QgQ0QgR1BJTwo+Cj4gLi4uCj4KPiBbIMKgwqAxMS4wMDkyNThdIC0tLS0tLS0t LS0tLVsgY3V0IGhlcmUgXS0tLS0tLS0tLS0tLQo+IFsgwqDCoDExLjAxNDc2Ml0gZHdtbWNfcm9j a2NoaXAgZmUyYjAwMDAubW1jOiBzd2lvdGxiIGFkZHIgCj4gMHgwMDAwMDAwMWZhZjAwMDAwKzQw OTYgb3ZlcmZsb3cgKG1hc2sgZmZmZmZmZmYsIGJ1cyBsaW1pdCAwKS4KPgo+Cj4+IC4uLgo+Cj4g QmVzdCByZWdhcmRzCgotLSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB+LiAufiAgIFRrIE9wZW4gU3lzdGVtcwo9fS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLW9vTy0tVS0tT29vLS0tLS0tLS0tLS0tez0K ICAgLSBiYXJ1Y2hAdGtvcy5jby5pbCAtIHRlbDogKzk3Mi41Mi4zNjguNDY1NiwgaHR0cDovL3d3 dy50a29zLmNvLmlsIC0KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCkxpbnV4LXJvY2tjaGlwIG1haWxpbmcgbGlzdApMaW51eC1yb2NrY2hpcEBsaXN0cy5p bmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8v bGludXgtcm9ja2NoaXAK