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=-2.1 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=no 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 2EE7CC433E0 for ; Tue, 19 May 2020 13:13:29 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 0888E20823 for ; Tue, 19 May 2020 13:13:29 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=armlinux.org.uk header.i=@armlinux.org.uk header.b="tiq9bVFD" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728795AbgESNN2 (ORCPT ); Tue, 19 May 2020 09:13:28 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44766 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727910AbgESNN2 (ORCPT ); Tue, 19 May 2020 09:13:28 -0400 Received: from pandora.armlinux.org.uk (pandora.armlinux.org.uk [IPv6:2001:4d48:ad52:3201:214:fdff:fe10:1be6]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C933CC08C5C0; Tue, 19 May 2020 06:13:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=armlinux.org.uk; s=pandora-2019; h=Sender:In-Reply-To: Content-Transfer-Encoding:Content-Type:MIME-Version:References:Message-ID: Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id: List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=i57lkD9cnLd3mYhYTL44RTjdfNu1CHhYUTKlZbuE/qA=; b=tiq9bVFD1bBw9CjMczu/C5+9G bekr4ojvKSr9XU8l7UAgzNAV3iIPTKZgkWw+WXIXehnHY6OzYtb3rtlXmb0baQdjXQ8tmTI+wQ+72 wp7x/L+k1T9iFH9OqqYguznUKcSQ2DyMLA9ft+kyB/LbeJLkglwpZMF/5tA9xGiu/NQMT1Z4QE3Wl gpI7DZ9y8RFAiM0DWosfvfD/h3H5ccvJZeP0+ePaj+cFA3s3kYb+vWy7nh83piSmOAZtoBRqhhzSF 5lGCsyQHoXMdHQR5KDfZHvdxbIzKqaIhvF2pSwhaF1lTMk/8iCQn58HvUS0bbAtuHaOaSw4sqGQx2 3j3A88luQ==; Received: from shell.armlinux.org.uk ([fd8f:7570:feb6:1:5054:ff:fe00:4ec]:34192) by pandora.armlinux.org.uk with esmtpsa (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jb23I-0005RT-7a; Tue, 19 May 2020 14:13:00 +0100 Received: from linux by shell.armlinux.org.uk with local (Exim 4.92) (envelope-from ) id 1jb23A-0005l3-T5; Tue, 19 May 2020 14:12:52 +0100 Date: Tue, 19 May 2020 14:12:52 +0100 From: Russell King - ARM Linux admin To: Lukasz Stelmach Cc: Geert Uytterhoeven , Dmitry Osipenko , Nicolas Pitre , Arnd Bergmann , Eric Miao , Uwe =?iso-8859-1?Q?Kleine-K=F6nig?= , Masahiro Yamada , Ard Biesheuvel , Marek Szyprowski , Chris Brandt , Linux ARM , Linux-Renesas , Linux Kernel Mailing List , Bartlomiej Zolnierkiewicz , "open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS" , Rob Herring , Grant Likely Subject: Re: [PATCH v6] ARM: boot: Obtain start of physical memory from DTB Message-ID: <20200519131252.GD1551@shell.armlinux.org.uk> References: <20200519122706.GC1551@shell.armlinux.org.uk> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: User-Agent: Mutt/1.10.1 (2018-07-13) Sender: linux-renesas-soc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-renesas-soc@vger.kernel.org On Tue, May 19, 2020 at 02:49:57PM +0200, Lukasz Stelmach wrote: > It was <2020-05-19 wto 13:27>, when Russell King - ARM Linux admin wrote: > > On Tue, May 19, 2020 at 02:20:25PM +0200, Lukasz Stelmach wrote: > >> It was <2020-05-19 wto 12:43>, when Russell King - ARM Linux admin wrote: > >>> On Tue, May 19, 2020 at 01:21:09PM +0200, Geert Uytterhoeven wrote: > >>>> On Tue, May 19, 2020 at 11:46 AM Russell King - ARM Linux admin > >>>> wrote: > >>>>> On Tue, May 19, 2020 at 11:44:17AM +0200, Geert Uytterhoeven wrote: > >>>>>> On Tue, May 19, 2020 at 10:54 AM Lukasz Stelmach wrote: > >>>>>>> It was <2020-04-29 śro 10:21>, when Geert Uytterhoeven wrote: > >>>>>>>> Currently, the start address of physical memory is obtained by masking > >>>>>>>> the program counter with a fixed mask of 0xf8000000. This mask value > >>>>>>>> was chosen as a balance between the requirements of different platforms. > >>>>>>>> However, this does require that the start address of physical memory is > >>>>>>>> a multiple of 128 MiB, precluding booting Linux on platforms where this > >>>>>>>> requirement is not fulfilled. > >>>>>>>> > >>>>>>>> Fix this limitation by obtaining the start address from the DTB instead, > >>>>>>>> if available (either explicitly passed, or appended to the kernel). > >>>>>>>> Fall back to the traditional method when needed. > [...] > >>>>>>> Apparently reading physical memory layout from DTB breaks crashdump > >>>>>>> kernels. A crashdump kernel is loaded into a region of memory, that is > >>>>>>> reserved in the original (i.e. to be crashed) kernel. The reserved > >>>>>>> region is large enough for the crashdump kernel to run completely inside > >>>>>>> it and don't modify anything outside it, just read and dump the remains > >>>>>>> of the crashed kernel. Using the information from DTB makes the > >>>>>>> decompressor place the kernel outside of the dedicated region. > >>>>>>> > >>>>>>> The log below shows that a zImage and DTB are loaded at 0x18eb8000 and > >>>>>>> 0x193f6000 (physical). The kernel is expected to run at 0x18008000, but > >>>>>>> it is decompressed to 0x00008000 (see r4 reported before jumping from > >>>>>>> within __enter_kernel). If I were to suggest something, there need to be > >>>>>>> one more bit of information passed in the DTB telling the decompressor > >>>>>>> to use the old masking technique to determain kernel address. It would > >>>>>>> be set in the DTB loaded along with the crashdump kernel. > [...] > >>>>>> Describing "to use the old masking technique" sounds a bit hackish to me. > >>>>>> I guess it cannot just restrict the /memory node to the reserved region, > >>>>>> as the crashkernel needs to be able to dump the remains of the crashed > >>>>>> kernel, which lie outside this region. > >>>>> > >>>>> Correct. > >>>>> > >>>>>> However, something under /chosen should work. > >>>>> > >>>>> Yet another sticky plaster... > >>>> > >>>> IMHO the old masking technique is the hacky solution covered by > >>>> plasters. > >>> > >>> One line of code is not "covered by plasters". There are no plasters. > >>> It's a solution that works for 99.99% of people, unlike your approach > >>> that has had a stream of issues over the last four months, and has > >>> required many reworks of the code to fix each one. That in itself > >>> speaks volumes about the suitability of the approach. > >> > >> As I have been working with kexec code (patches soon) I would like to > >> defend the DT approach a bit. It allows to avoid zImage relocation when > >> a decompressed kernel is larger than ~128MiB. In such case zImage isn't > >> small either and moving it around takes some time. > > > > ... which is something that has been supported for a very long time, > > before the days of DT. > > How? If a decompressed kernel requires >128M and a bootloader would like > to put a zImage high enough to *avoid* copying it once again, then the > decompressor can't see any memory below the 128M window it starts in and > can't decompress the kernel there. Do you have such a large kernel? It would be rather inefficient as branch instructions could not be used; every function call would have to be indirect. The maximum is +/- 32MB for a branch. > If we do not care about copying > zImage, then, indeed, everything works fine as it is today. You are > most probably right 99% doesn't require 128M kernel, but the case is > IMHO obvious enough, that it should be adressed somehow. If I have a kernel in excess of 4GB... "it should be addressed somehow"! -- RMK's Patch system: https://www.armlinux.org.uk/developer/patches/ FTTC for 0.8m (est. 1762m) line in suburbia: sync at 13.1Mbps down 424kbps up 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=-2.3 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=no 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 A9134C433DF for ; Tue, 19 May 2020 13:19:26 +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 428C92081A for ; Tue, 19 May 2020 13:19:26 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="XFUsoRiD"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=armlinux.org.uk header.i=@armlinux.org.uk header.b="tiq9bVFD" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 428C92081A Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=armlinux.org.uk Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-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.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=VnMbOMbnUpBlk9+Niwd2gfxs6JTtD1c69Z4W/CpUyVo=; b=XFUsoRiDVFZD4+ fN5ewN9Bhulxv1awdzlLSBYbdZ/1KT7N/Mb2OynPWXOlv9gT09SusICGYV1ypYAbloxRVAmNbGNPr ClqhsHvFlO8SfTPi+jkAbCHYzmHNFefBkjbej7Vs4VNbNYKKmYB1syX+5lyTd41MZ79O8HFLfou4N qzdI/c74uqbPnlBQWrra34R8mquRtIxwkgwgStWFT9leksFT1NgFSYs2hUT5elkSphgx1/FWoDm3v HNEqjszsuR7MaTIDrcAaOONrBOeARO4Nd1/JHGwsyNvtJ3TUtf7RTx1mzcV6X31jMz8hiS//gBqF+ PkSTJGBg+3WYG7irOnUQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jb29V-0000M7-Ff; Tue, 19 May 2020 13:19:25 +0000 Received: from pandora.armlinux.org.uk ([2001:4d48:ad52:3201:214:fdff:fe10:1be6]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jb23i-0000uy-Pk for linux-arm-kernel@lists.infradead.org; Tue, 19 May 2020 13:13:29 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=armlinux.org.uk; s=pandora-2019; h=Sender:In-Reply-To: Content-Transfer-Encoding:Content-Type:MIME-Version:References:Message-ID: Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id: List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=i57lkD9cnLd3mYhYTL44RTjdfNu1CHhYUTKlZbuE/qA=; b=tiq9bVFD1bBw9CjMczu/C5+9G bekr4ojvKSr9XU8l7UAgzNAV3iIPTKZgkWw+WXIXehnHY6OzYtb3rtlXmb0baQdjXQ8tmTI+wQ+72 wp7x/L+k1T9iFH9OqqYguznUKcSQ2DyMLA9ft+kyB/LbeJLkglwpZMF/5tA9xGiu/NQMT1Z4QE3Wl gpI7DZ9y8RFAiM0DWosfvfD/h3H5ccvJZeP0+ePaj+cFA3s3kYb+vWy7nh83piSmOAZtoBRqhhzSF 5lGCsyQHoXMdHQR5KDfZHvdxbIzKqaIhvF2pSwhaF1lTMk/8iCQn58HvUS0bbAtuHaOaSw4sqGQx2 3j3A88luQ==; Received: from shell.armlinux.org.uk ([fd8f:7570:feb6:1:5054:ff:fe00:4ec]:34192) by pandora.armlinux.org.uk with esmtpsa (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jb23I-0005RT-7a; Tue, 19 May 2020 14:13:00 +0100 Received: from linux by shell.armlinux.org.uk with local (Exim 4.92) (envelope-from ) id 1jb23A-0005l3-T5; Tue, 19 May 2020 14:12:52 +0100 Date: Tue, 19 May 2020 14:12:52 +0100 From: Russell King - ARM Linux admin To: Lukasz Stelmach Subject: Re: [PATCH v6] ARM: boot: Obtain start of physical memory from DTB Message-ID: <20200519131252.GD1551@shell.armlinux.org.uk> References: <20200519122706.GC1551@shell.armlinux.org.uk> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.10.1 (2018-07-13) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200519_061326_836432_32AE6C24 X-CRM114-Status: GOOD ( 27.25 ) 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: "open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS" , Grant Likely , Arnd Bergmann , Nicolas Pitre , Masahiro Yamada , Bartlomiej Zolnierkiewicz , Linux Kernel Mailing List , Linux-Renesas , Chris Brandt , Rob Herring , Geert Uytterhoeven , Uwe =?iso-8859-1?Q?Kleine-K=F6nig?= , Eric Miao , Dmitry Osipenko , Ard Biesheuvel , Linux ARM , Marek Szyprowski Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gVHVlLCBNYXkgMTksIDIwMjAgYXQgMDI6NDk6NTdQTSArMDIwMCwgTHVrYXN6IFN0ZWxtYWNo IHdyb3RlOgo+IEl0IHdhcyA8MjAyMC0wNS0xOSB3dG8gMTM6Mjc+LCB3aGVuIFJ1c3NlbGwgS2lu ZyAtIEFSTSBMaW51eCBhZG1pbiB3cm90ZToKPiA+IE9uIFR1ZSwgTWF5IDE5LCAyMDIwIGF0IDAy OjIwOjI1UE0gKzAyMDAsIEx1a2FzeiBTdGVsbWFjaCB3cm90ZToKPiA+PiBJdCB3YXMgPDIwMjAt MDUtMTkgd3RvIDEyOjQzPiwgd2hlbiBSdXNzZWxsIEtpbmcgLSBBUk0gTGludXggYWRtaW4gd3Jv dGU6Cj4gPj4+IE9uIFR1ZSwgTWF5IDE5LCAyMDIwIGF0IDAxOjIxOjA5UE0gKzAyMDAsIEdlZXJ0 IFV5dHRlcmhvZXZlbiB3cm90ZToKPiA+Pj4+IE9uIFR1ZSwgTWF5IDE5LCAyMDIwIGF0IDExOjQ2 IEFNIFJ1c3NlbGwgS2luZyAtIEFSTSBMaW51eCBhZG1pbgo+ID4+Pj4gPGxpbnV4QGFybWxpbnV4 Lm9yZy51az4gd3JvdGU6Cj4gPj4+Pj4gT24gVHVlLCBNYXkgMTksIDIwMjAgYXQgMTE6NDQ6MTdB TSArMDIwMCwgR2VlcnQgVXl0dGVyaG9ldmVuIHdyb3RlOgo+ID4+Pj4+PiBPbiBUdWUsIE1heSAx OSwgMjAyMCBhdCAxMDo1NCBBTSBMdWthc3ogU3RlbG1hY2ggPGwuc3RlbG1hY2hAc2Ftc3VuZy5j b20+IHdyb3RlOgo+ID4+Pj4+Pj4gSXQgd2FzIDwyMDIwLTA0LTI5IMWbcm8gMTA6MjE+LCB3aGVu IEdlZXJ0IFV5dHRlcmhvZXZlbiB3cm90ZToKPiA+Pj4+Pj4+PiBDdXJyZW50bHksIHRoZSBzdGFy dCBhZGRyZXNzIG9mIHBoeXNpY2FsIG1lbW9yeSBpcyBvYnRhaW5lZCBieSBtYXNraW5nCj4gPj4+ Pj4+Pj4gdGhlIHByb2dyYW0gY291bnRlciB3aXRoIGEgZml4ZWQgbWFzayBvZiAweGY4MDAwMDAw LiAgVGhpcyBtYXNrIHZhbHVlCj4gPj4+Pj4+Pj4gd2FzIGNob3NlbiBhcyBhIGJhbGFuY2UgYmV0 d2VlbiB0aGUgcmVxdWlyZW1lbnRzIG9mIGRpZmZlcmVudCBwbGF0Zm9ybXMuCj4gPj4+Pj4+Pj4g SG93ZXZlciwgdGhpcyBkb2VzIHJlcXVpcmUgdGhhdCB0aGUgc3RhcnQgYWRkcmVzcyBvZiBwaHlz aWNhbCBtZW1vcnkgaXMKPiA+Pj4+Pj4+PiBhIG11bHRpcGxlIG9mIDEyOCBNaUIsIHByZWNsdWRp bmcgYm9vdGluZyBMaW51eCBvbiBwbGF0Zm9ybXMgd2hlcmUgdGhpcwo+ID4+Pj4+Pj4+IHJlcXVp cmVtZW50IGlzIG5vdCBmdWxmaWxsZWQuCj4gPj4+Pj4+Pj4KPiA+Pj4+Pj4+PiBGaXggdGhpcyBs aW1pdGF0aW9uIGJ5IG9idGFpbmluZyB0aGUgc3RhcnQgYWRkcmVzcyBmcm9tIHRoZSBEVEIgaW5z dGVhZCwKPiA+Pj4+Pj4+PiBpZiBhdmFpbGFibGUgKGVpdGhlciBleHBsaWNpdGx5IHBhc3NlZCwg b3IgYXBwZW5kZWQgdG8gdGhlIGtlcm5lbCkuCj4gPj4+Pj4+Pj4gRmFsbCBiYWNrIHRvIHRoZSB0 cmFkaXRpb25hbCBtZXRob2Qgd2hlbiBuZWVkZWQuCj4gWy4uLl0KPiA+Pj4+Pj4+IEFwcGFyZW50 bHkgcmVhZGluZyBwaHlzaWNhbCBtZW1vcnkgbGF5b3V0IGZyb20gRFRCIGJyZWFrcyBjcmFzaGR1 bXAKPiA+Pj4+Pj4+IGtlcm5lbHMuIEEgY3Jhc2hkdW1wIGtlcm5lbCBpcyBsb2FkZWQgaW50byBh IHJlZ2lvbiBvZiBtZW1vcnksIHRoYXQgaXMKPiA+Pj4+Pj4+IHJlc2VydmVkIGluIHRoZSBvcmln aW5hbCAoaS5lLiB0byBiZSBjcmFzaGVkKSBrZXJuZWwuIFRoZSByZXNlcnZlZAo+ID4+Pj4+Pj4g cmVnaW9uIGlzIGxhcmdlIGVub3VnaCBmb3IgdGhlIGNyYXNoZHVtcCBrZXJuZWwgdG8gcnVuIGNv bXBsZXRlbHkgaW5zaWRlCj4gPj4+Pj4+PiBpdCBhbmQgZG9uJ3QgbW9kaWZ5IGFueXRoaW5nIG91 dHNpZGUgaXQsIGp1c3QgcmVhZCBhbmQgZHVtcCB0aGUgcmVtYWlucwo+ID4+Pj4+Pj4gb2YgdGhl IGNyYXNoZWQga2VybmVsLiBVc2luZyB0aGUgaW5mb3JtYXRpb24gZnJvbSBEVEIgbWFrZXMgdGhl Cj4gPj4+Pj4+PiBkZWNvbXByZXNzb3IgcGxhY2UgdGhlIGtlcm5lbCBvdXRzaWRlIG9mIHRoZSBk ZWRpY2F0ZWQgcmVnaW9uLgo+ID4+Pj4+Pj4KPiA+Pj4+Pj4+IFRoZSBsb2cgYmVsb3cgc2hvd3Mg dGhhdCBhIHpJbWFnZSBhbmQgRFRCIGFyZSBsb2FkZWQgYXQgMHgxOGViODAwMCBhbmQKPiA+Pj4+ Pj4+IDB4MTkzZjYwMDAgKHBoeXNpY2FsKS4gVGhlIGtlcm5lbCBpcyBleHBlY3RlZCB0byBydW4g YXQgMHgxODAwODAwMCwgYnV0Cj4gPj4+Pj4+PiBpdCBpcyBkZWNvbXByZXNzZWQgdG8gMHgwMDAw ODAwMCAoc2VlIHI0IHJlcG9ydGVkIGJlZm9yZSBqdW1waW5nIGZyb20KPiA+Pj4+Pj4+IHdpdGhp biBfX2VudGVyX2tlcm5lbCkuIElmIEkgd2VyZSB0byBzdWdnZXN0IHNvbWV0aGluZywgdGhlcmUg bmVlZCB0byBiZQo+ID4+Pj4+Pj4gb25lIG1vcmUgYml0IG9mIGluZm9ybWF0aW9uIHBhc3NlZCBp biB0aGUgRFRCIHRlbGxpbmcgdGhlIGRlY29tcHJlc3Nvcgo+ID4+Pj4+Pj4gdG8gdXNlIHRoZSBv bGQgbWFza2luZyB0ZWNobmlxdWUgdG8gZGV0ZXJtYWluIGtlcm5lbCBhZGRyZXNzLiBJdCB3b3Vs ZAo+ID4+Pj4+Pj4gYmUgc2V0IGluIHRoZSBEVEIgbG9hZGVkIGFsb25nIHdpdGggdGhlIGNyYXNo ZHVtcCBrZXJuZWwuCj4gWy4uLl0KPiA+Pj4+Pj4gRGVzY3JpYmluZyAidG8gdXNlIHRoZSBvbGQg bWFza2luZyB0ZWNobmlxdWUiIHNvdW5kcyBhIGJpdCBoYWNraXNoIHRvIG1lLgo+ID4+Pj4+PiBJ IGd1ZXNzIGl0IGNhbm5vdCBqdXN0IHJlc3RyaWN0IHRoZSAvbWVtb3J5IG5vZGUgdG8gdGhlIHJl c2VydmVkIHJlZ2lvbiwKPiA+Pj4+Pj4gYXMgdGhlIGNyYXNoa2VybmVsIG5lZWRzIHRvIGJlIGFi bGUgdG8gZHVtcCB0aGUgcmVtYWlucyBvZiB0aGUgY3Jhc2hlZAo+ID4+Pj4+PiBrZXJuZWwsIHdo aWNoIGxpZSBvdXRzaWRlIHRoaXMgcmVnaW9uLgo+ID4+Pj4+Cj4gPj4+Pj4gQ29ycmVjdC4KPiA+ Pj4+Pgo+ID4+Pj4+PiBIb3dldmVyLCBzb21ldGhpbmcgdW5kZXIgL2Nob3NlbiBzaG91bGQgd29y ay4KPiA+Pj4+Pgo+ID4+Pj4+IFlldCBhbm90aGVyIHN0aWNreSBwbGFzdGVyLi4uCj4gPj4+PiAK PiA+Pj4+IElNSE8gdGhlIG9sZCBtYXNraW5nIHRlY2huaXF1ZSBpcyB0aGUgaGFja3kgc29sdXRp b24gY292ZXJlZCBieQo+ID4+Pj4gcGxhc3RlcnMuCj4gPj4+Cj4gPj4+IE9uZSBsaW5lIG9mIGNv ZGUgaXMgbm90ICJjb3ZlcmVkIGJ5IHBsYXN0ZXJzIi4gIFRoZXJlIGFyZSBubyBwbGFzdGVycy4K PiA+Pj4gSXQncyBhIHNvbHV0aW9uIHRoYXQgd29ya3MgZm9yIDk5Ljk5JSBvZiBwZW9wbGUsIHVu bGlrZSB5b3VyIGFwcHJvYWNoCj4gPj4+IHRoYXQgaGFzIGhhZCBhIHN0cmVhbSBvZiBpc3N1ZXMg b3ZlciB0aGUgbGFzdCBmb3VyIG1vbnRocywgYW5kIGhhcwo+ID4+PiByZXF1aXJlZCBtYW55IHJl d29ya3Mgb2YgdGhlIGNvZGUgdG8gZml4IGVhY2ggb25lLiAgVGhhdCBpbiBpdHNlbGYKPiA+Pj4g c3BlYWtzIHZvbHVtZXMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoZSBhcHByb2FjaC4KPiA+ PiAKPiA+PiBBcyBJIGhhdmUgYmVlbiB3b3JraW5nIHdpdGgga2V4ZWMgY29kZSAocGF0Y2hlcyBz b29uKSBJIHdvdWxkIGxpa2UgdG8KPiA+PiBkZWZlbmQgdGhlIERUIGFwcHJvYWNoIGEgYml0LiBJ dCBhbGxvd3MgdG8gYXZvaWQgekltYWdlIHJlbG9jYXRpb24gd2hlbgo+ID4+IGEgZGVjb21wcmVz c2VkIGtlcm5lbCBpcyBsYXJnZXIgdGhhbiB+MTI4TWlCLiBJbiBzdWNoIGNhc2UgekltYWdlIGlz bid0Cj4gPj4gc21hbGwgZWl0aGVyIGFuZCBtb3ZpbmcgaXQgYXJvdW5kIHRha2VzIHNvbWUgdGlt ZS4KPiA+Cj4gPiAuLi4gd2hpY2ggaXMgc29tZXRoaW5nIHRoYXQgaGFzIGJlZW4gc3VwcG9ydGVk IGZvciBhIHZlcnkgbG9uZyB0aW1lLAo+ID4gYmVmb3JlIHRoZSBkYXlzIG9mIERULgo+IAo+IEhv dz8gSWYgYSBkZWNvbXByZXNzZWQga2VybmVsIHJlcXVpcmVzID4xMjhNIGFuZCBhIGJvb3Rsb2Fk ZXIgd291bGQgbGlrZQo+IHRvIHB1dCBhIHpJbWFnZSBoaWdoIGVub3VnaCB0byAqYXZvaWQqIGNv cHlpbmcgaXQgb25jZSBhZ2FpbiwgdGhlbiB0aGUKPiBkZWNvbXByZXNzb3IgY2FuJ3Qgc2VlIGFu eSBtZW1vcnkgYmVsb3cgdGhlIDEyOE0gd2luZG93IGl0IHN0YXJ0cyBpbiBhbmQKPiBjYW4ndCBk ZWNvbXByZXNzIHRoZSBrZXJuZWwgdGhlcmUuCgpEbyB5b3UgaGF2ZSBzdWNoIGEgbGFyZ2Uga2Vy bmVsPyAgSXQgd291bGQgYmUgcmF0aGVyIGluZWZmaWNpZW50IGFzCmJyYW5jaCBpbnN0cnVjdGlv bnMgY291bGQgbm90IGJlIHVzZWQ7IGV2ZXJ5IGZ1bmN0aW9uIGNhbGwgd291bGQgaGF2ZQp0byBi ZSBpbmRpcmVjdC4gIFRoZSBtYXhpbXVtIGlzICsvLSAzMk1CIGZvciBhIGJyYW5jaC4KCj4gSWYg d2UgZG8gbm90IGNhcmUgYWJvdXQgY29weWluZwo+IHpJbWFnZSwgdGhlbiwgaW5kZWVkLCBldmVy eXRoaW5nIHdvcmtzIGZpbmUgYXMgaXQgaXMgdG9kYXkuIFlvdSBhcmUKPiBtb3N0IHByb2JhYmx5 IHJpZ2h0IDk5JSBkb2Vzbid0IHJlcXVpcmUgMTI4TSBrZXJuZWwsIGJ1dCB0aGUgY2FzZSBpcwo+ IElNSE8gb2J2aW91cyBlbm91Z2gsIHRoYXQgaXQgc2hvdWxkIGJlIGFkcmVzc2VkIHNvbWVob3cu CgpJZiBJIGhhdmUgYSBrZXJuZWwgaW4gZXhjZXNzIG9mIDRHQi4uLiAiaXQgc2hvdWxkIGJlIGFk ZHJlc3NlZCBzb21laG93IiEKCi0tIApSTUsncyBQYXRjaCBzeXN0ZW06IGh0dHBzOi8vd3d3LmFy bWxpbnV4Lm9yZy51ay9kZXZlbG9wZXIvcGF0Y2hlcy8KRlRUQyBmb3IgMC44bSAoZXN0LiAxNzYy bSkgbGluZSBpbiBzdWJ1cmJpYTogc3luYyBhdCAxMy4xTWJwcyBkb3duIDQyNGticHMgdXAKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1r ZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpo dHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJu ZWwK