From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id CC9124A18 for ; Mon, 4 Jul 2022 21:59:06 +0000 (UTC) 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 CD8EB23A; Mon, 4 Jul 2022 14:59:05 -0700 (PDT) Received: from slackpad.lan (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 8F7D13F70D; Mon, 4 Jul 2022 14:59:03 -0700 (PDT) Date: Mon, 4 Jul 2022 22:58:02 +0100 From: Andre Przywara To: Jernej =?UTF-8?B?xaBrcmFiZWM=?= Cc: Samuel Holland , Chen-Yu Tsai , Rob Herring , Krzysztof Kozlowski , Icenowy Zheng , linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v11 3/6] arm64: dts: allwinner: Add Allwinner H616 .dtsi file Message-ID: <20220704225534.3e1a901a@slackpad.lan> In-Reply-To: <22699277.6Emhk5qWAg@kista> References: <20220428230933.15262-1-andre.przywara@arm.com> <2985997.CbtlEUcBR6@jernej-laptop> <20220704143057.76163208@donnerap.cambridge.arm.com> <22699277.6Emhk5qWAg@kista> Organization: Arm Ltd. X-Mailer: Claws Mail 4.1.0 (GTK 3.24.31; x86_64-slackware-linux-gnu) Precedence: bulk X-Mailing-List: linux-sunxi@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 On Mon, 04 Jul 2022 20:42:47 +0200 Jernej =C5=A0krabec wrote: Hi Jernej, > Dne ponedeljek, 04. julij 2022 ob 15:30:57 CEST je Andre Przywara napisal= (a): > > On Sat, 02 Jul 2022 23:16:53 +0200 > > Jernej =C5=A0krabec wrote: > >=20 > > Hi Jernej, > > =20 > > > Dne =C4=8Detrtek, 30. junij 2022 ob 02:04:10 CEST je Andre Przywara n= apisal(a): =20 > > > > On Tue, 03 May 2022 21:05:11 +0200 > > > > Jernej =C5=A0krabec wrote: > > > >=20 > > > > Hi Jernej, > > > >=20 > > > > many thanks for taking the time to wade through this file! > > > > =20 > > > > > Dne petek, 29. april 2022 ob 01:09:30 CEST je Andre Przywara =20 > napisal(a): =20 > > > > > > This (relatively) new SoC is similar to the H6, but drops the = =20 > (broken) > > > > > > PCIe support and the USB 3.0 controller. It also gets the manag= ement > > > > > > controller removed, which in turn removes *some*, but not all o= f the > > > > > > devices formerly dedicated to the ARISC (CPUS). > > > > > > And while there is still the extra sunxi interrupt controller, = the > > > > > > package lacks the corresponding NMI pin, so no interrupts for t= he =20 > PMIC. > > > > > >=20 > > > > > > The reserved memory node is actually handled by Trusted Firmwar= e =20 > now, > > > > > > but U-Boot fails to propagate this to a separately loaded DTB, = so we > > > > > > keep it in here for now, until U-Boot learns to do this properl= y. > > > > > >=20 > > > > > > Signed-off-by: Andre Przywara > > > > > > --- > > > > > >=20 > > > > > > .../arm64/boot/dts/allwinner/sun50i-h616.dtsi | 574 ++++++++++= +++++ =20 > +++ > > > > > > 1 file changed, 574 insertions(+) > > > > > > create mode 100644 arch/arm64/boot/dts/allwinner/sun50i-h616.d= tsi > > > > > >=20 > > > > > > diff --git a/arch/arm64/boot/dts/allwinner/sun50i-h616.dtsi > > > > > > b/arch/arm64/ =20 > > > > >=20 > > > > > boot/dts/allwinner/sun50i-h616.dtsi > > > > > =20 > > > > > > new file mode 100644 > > > > > > index 000000000000..cc06cdd15ba5 > > > > > > --- /dev/null > > > > > > +++ b/arch/arm64/boot/dts/allwinner/sun50i-h616.dtsi > > > > > > @@ -0,0 +1,574 @@ > > > > > > +// SPDX-License-Identifier: (GPL-2.0+ OR MIT) > > > > > > +// Copyright (C) 2020 Arm Ltd. > > > > > > +// based on the H6 dtsi, which is: > > > > > > +// Copyright (C) 2017 Icenowy Zheng > > > > > > + > > > > > > +#include > > > > > > +#include > > > > > > +#include > > > > > > +#include > > > > > > +#include > > > > > > + > > > > > > +/ { > > > > > > + interrupt-parent =3D <&gic>; > > > > > > + #address-cells =3D <2>; > > > > > > + #size-cells =3D <2>; > > > > > > + > > > > > > + cpus { > > > > > > + #address-cells =3D <1>; > > > > > > + #size-cells =3D <0>; > > > > > > + > > > > > > + cpu0: cpu@0 { > > > > > > + compatible =3D "arm,cortex-a53"; > > > > > > + device_type =3D "cpu"; > > > > > > + reg =3D <0>; > > > > > > + enable-method =3D "psci"; > > > > > > + clocks =3D <&ccu CLK_CPUX>; > > > > > > + }; > > > > > > + > > > > > > + cpu1: cpu@1 { > > > > > > + compatible =3D "arm,cortex-a53"; > > > > > > + device_type =3D "cpu"; > > > > > > + reg =3D <1>; > > > > > > + enable-method =3D "psci"; > > > > > > + clocks =3D <&ccu CLK_CPUX>; > > > > > > + }; > > > > > > + > > > > > > + cpu2: cpu@2 { > > > > > > + compatible =3D "arm,cortex-a53"; > > > > > > + device_type =3D "cpu"; > > > > > > + reg =3D <2>; > > > > > > + enable-method =3D "psci"; > > > > > > + clocks =3D <&ccu CLK_CPUX>; > > > > > > + }; > > > > > > + > > > > > > + cpu3: cpu@3 { > > > > > > + compatible =3D "arm,cortex-a53"; > > > > > > + device_type =3D "cpu"; > > > > > > + reg =3D <3>; > > > > > > + enable-method =3D "psci"; > > > > > > + clocks =3D <&ccu CLK_CPUX>; > > > > > > + }; > > > > > > + }; > > > > > > + > > > > > > + reserved-memory { > > > > > > + #address-cells =3D <2>; > > > > > > + #size-cells =3D <2>; > > > > > > + ranges; > > > > > > + > > > > > > + /* 512KiB reserved for ARM Trusted Firmware (BL31) */ > > > > > > + secmon_reserved: secmon@40000000 { > > > > > > + reg =3D <0x0 0x40000000 0x0 0x80000>; > > > > > > + no-map; > > > > > > + }; > > > > > > + }; =20 > > > > >=20 > > > > > I'm not a fan of above. If anything changes in future in BL31, U-= Boot > > > > > would > > > > > need to reconfigure it anyway. Can we just skip it? =20 > > > >=20 > > > > I am not a fan neither, but last time I checked this is needed to b= oot. > > > > Indeed TF-A inserts this node, with the right values, into U-Boot's= DT. > > > > And that's nicely preserved if you use that DT ($fdtcontroladdr) for > > > > the kernel as well. > > > > But if someone *loads* a DTB into U-Boot (to $fdt_addr_r), then > > > > U-Boot fails to propagate the /reserved-memory node into that copy. > > > > There does not seem to be a global notion of reserved memory in U-B= oot. > > > > Some commands (like tftp) explicitly parse the control DT to find a= nd > > > > respect reserved memory regions. bootm does that also, but only to > > > > avoid placing the ramdisk or DTB into reserved memory. The informat= ion > > > > ends up in images->lmb, but is not used to generate or amend nodes = in > > > > the target DT. > > > > So the bits and pieces are there, but it will require some code to = be > > > > added to the generic U-Boot code. > > > >=20 > > > > So what do you think? Leaving this out will prevent loading DTBs in= to > > > > U-Boot, at the moment, which sounds bad. I suggest we keep it in, f= or > > > > now, it should not really hurt. U-Boot will hopefully start to do t= he > > > > right thing soon, then we can either phase it out here (maybe when = we > > > > actually change something in TF-A), or let U-Boot fix it. =20 > > >=20 > > > TBH, if "soon" is really soon, I would rather wait with H616 DT until= U- =20 > Boot=20 > > > supports carrying over reserved memory nodes. =20 > >=20 > > But this also carries compatibility issues. U-Boot support the H616 for > > more than a year now, and the earliest possible U-Boot release having t= hat > > propagation code would be the one released in October. =20 >=20 > I was hoping you would say July (next U-Boot release) :). Well, 2022.07 was supposed to be released today, and even if that is delayed by a bit, that's obviously far too late ;-) > > And then people > > would still need to update first, so that's quite some months out. > > And I was actually hoping to get at least the H616 DT patches off my > > plate, and get them into the tree to have a stable and agreed upon base > > (before this series turns into a teenager ;-) =20 >=20 > Yeah, I would like that too. >=20 > > Then we could for instance update the U-Boot H616 support. > > =20 > > > Whatever we do now, it will have=20 > > > compatibility issues. If we introduce reserved memory node now, we ca= n't=20 > > > easily drop it later. Bootloaders are not very often updated, but ker= nels =20 > and=20 > > > DTB files are, at least in my experience. So when we decide to drop t= he =20 > node? > >=20 > > I think of the three possibilities: > > - Drop the node now, and ask people to not load DTBs explicitly > > - Drop the node when U-Boot learned to propagate the reservation > > - Keep the node > > the last one is the least painful: having this node in does not really > > hurt, so we can be very relaxed with this removal decision: > > - If U-Boot does not add the reserved node, we are covered. > > - If U-Boot adds the node, it will do so in a way where it deals with > > existing reservations. So either it doesn't actually change anything, or > > it extends the reservation. > > - Should the TF-A location actually move (and we have no plans or needs= to > > do that), people would only get this by updating the firmware, at which > > point the U-Boot part would surely be in place already. We don't really > > support updating just BL31 in an existing binary firmware image, so you > > would get an updated U-Boot as well. > >=20 > > I think the worst case scenario is that users end up with an unneeded 5= 12K > > reservation. If they care, a firmware update should solve this problem. > >=20 > > As for the time to remove that node: we could do that at the time when > > (or rather: if) we actually change the TF-A reservation. At the moment > > there are no plans to do this, and the size reservation is more than > > generous (the current debug build is actually 77 KB or so only). If the= re > > is no change, and the node stays in the .dtsi, it doesn't really hurt, = see > > above. =20 >=20 > I see your point, but I would like to get some input from Samuel first. > > Samuel, what do you think? >=20 > > =20 > > > After 10 years? Alternatively, reserved memory node can be just dropp= ed =20 > and=20 > > > anyone loading DTB file from outside would need to make sure it's pat= ched. =20 > But=20 > > > that's unexpected from user perspective, although patching DT files i= s done =20 > by=20 > > > some distros. =20 > >=20 > > Yeah, let's not go there. As you know, I already dislike the idea of > > explicitly loading DTBs at all, but I understand this is what people, a= nd > > distributions, do, so I'd rather have them covered. Hence the node to > > work with existing firmware. =20 >=20 > Reusing DTB from U-Boot is only useful when you're happy with completenes= s of=20 > DT and with the lack of bugs in it. Then you can save troubles with skipp= ing=20 > external DTB load step and life is easier. But as you know, features and = thus=20 > nodes are added in steps and sometimes some bugs are fixed, which means i= t's=20 > extremely handy to have easily updatable DTB file. Yes, definitely, see my reply to Samuel. I just held back with the DT update in U-Boot because of the conflict between "we only take pure kernel tree DTs" and "there is a breaking change" (r_intc binding). If we find a way forward with the DT stability problem, I am happy to push for a much more frequent DT update, or even update just the DT in an existing firmware installation. This can be automated, since the DTB is just a member in the FIT image, which can be re-assembled with an updated DTB by some tool or script. Or we use capsule updates, of just the DTB, separately (if this is possible)? > Yes, U-Boot can be=20 > automated, but it's tedious for distro to maintain one bootloader package= per=20 > board. Ideally, distro shouldn't care at all about that, Yes, I totally agree, distros should not ship firmware. Since leaving this to the board vendors is not realistic, I wonder if we (as "the sunxi community") should step up here, and provide binary builds (purely for convenience reasons) of board firmware? That could be updated from a running Linux, or put on an SD card, or fetched by distros to generate an installer? Wasn't there even some central storage offered lately by Linux, to hold (UEFI) firmware update files? > but many boards don't=20 > have designated bootloader storage (SPI NOR flash in AW case), so they ha= ve to=20 > be combined on same storage, partition even, as distro. Have you tried eMMC boot partitions? I found them equally convenient as SPI flash, and while not too many boards actually have SPI flash, quite some have eMMC (thinking about TV boxes). I recently even used "dual boot" with a BSP installation. And even the smallest eMMCs seem to have 4 MB per boot partition, so plenty of space for U-Boot (plus TF-A plus crust). > On the other hand,=20 > when building kernel, you automatically build all relevant DTB files, whi= ch you=20 > can then just copy to common place. No device specific handling needed. A= lso,=20 > U-Boot doesn't sync DT files every release, so latest U-Boot doesn't nece= ssarly=20 > mean latest DT. Yes, for the compatibility reasons mentioned. I am more than happy to make this a regular exercise (say at each kernel's -rc3 or so). > Above is a bit off topic, but I hope you understand why distros opt to us= e=20 > external DTB files (speaking from my own experiences). Yes, I understand where they (including LE) are coming from, to provide a pragmatic solution to the users' problems. And that's why I wanted to still give the possibility to load a DTB, even though I think this should not be the standard way. Cheers, Andre 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 E8ACCC433EF for ; Mon, 4 Jul 2022 22:00:42 +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:References:In-Reply-To: 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-Owner; bh=gtQWnxucN3Cjl1uWEBkmZbb/iYZrqi2XsMNEcUdhB2M=; b=4MDUh6l9lqURgk mQaM7ob1JelyrMoEBjcg/jdQ0fYwIOt+LEYOXnAwpthU3Hc+Qg1/WiJJZDLTtG+hZi4DylaJTbW+k YV8WBS0uoIThArdfJ7Cyy2HD/qIHr5q0Kt0wEk0uz4U4PHrmnUYVPeaTdo8jH2fIxxR1HEt3pcI7C A62h/A6YSz6kC0NSMZBLbcU2nBAuXkdpADK45CQKeYxA3JmuXwPDYAK5xm4Cvks69v6ykPJO/n+KV mmtnq4IJqy7KdspPFOJfKUNrV5c7kPQfcZLgUSxZbgRcv9o7BnziL3kW8O86E+0Cy8NwYUI9oVbOV To7G/e0tVI4Bs6F8/sxg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1o8U67-00CfGo-V6; Mon, 04 Jul 2022 21:59:16 +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 1o8U63-00CfFD-BU for linux-arm-kernel@lists.infradead.org; Mon, 04 Jul 2022 21:59:14 +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 CD8EB23A; Mon, 4 Jul 2022 14:59:05 -0700 (PDT) Received: from slackpad.lan (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 8F7D13F70D; Mon, 4 Jul 2022 14:59:03 -0700 (PDT) Date: Mon, 4 Jul 2022 22:58:02 +0100 From: Andre Przywara To: Jernej =?UTF-8?B?xaBrcmFiZWM=?= Cc: Samuel Holland , Chen-Yu Tsai , Rob Herring , Krzysztof Kozlowski , Icenowy Zheng , linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v11 3/6] arm64: dts: allwinner: Add Allwinner H616 .dtsi file Message-ID: <20220704225534.3e1a901a@slackpad.lan> In-Reply-To: <22699277.6Emhk5qWAg@kista> References: <20220428230933.15262-1-andre.przywara@arm.com> <2985997.CbtlEUcBR6@jernej-laptop> <20220704143057.76163208@donnerap.cambridge.arm.com> <22699277.6Emhk5qWAg@kista> Organization: Arm Ltd. X-Mailer: Claws Mail 4.1.0 (GTK 3.24.31; x86_64-slackware-linux-gnu) MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220704_145911_516455_4D0C6B66 X-CRM114-Status: GOOD ( 81.03 ) 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 T24gTW9uLCAwNCBKdWwgMjAyMiAyMDo0Mjo0NyArMDIwMApKZXJuZWogxaBrcmFiZWMgPGplcm5l ai5za3JhYmVjQGdtYWlsLmNvbT4gd3JvdGU6CgpIaSBKZXJuZWosCgo+IERuZSBwb25lZGVsamVr LCAwNC4ganVsaWogMjAyMiBvYiAxNTozMDo1NyBDRVNUIGplIEFuZHJlIFByenl3YXJhIG5hcGlz YWwoYSk6Cj4gPiBPbiBTYXQsIDAyIEp1bCAyMDIyIDIzOjE2OjUzICswMjAwCj4gPiBKZXJuZWog xaBrcmFiZWMgPGplcm5lai5za3JhYmVjQGdtYWlsLmNvbT4gd3JvdGU6Cj4gPiAKPiA+IEhpIEpl cm5laiwKPiA+ICAgCj4gPiA+IERuZSDEjWV0cnRlaywgMzAuIGp1bmlqIDIwMjIgb2IgMDI6MDQ6 MTAgQ0VTVCBqZSBBbmRyZSBQcnp5d2FyYSBuYXBpc2FsKGEpOiAgCj4gPiA+ID4gT24gVHVlLCAw MyBNYXkgMjAyMiAyMTowNToxMSArMDIwMAo+ID4gPiA+IEplcm5laiDFoGtyYWJlYyA8amVybmVq LnNrcmFiZWNAZ21haWwuY29tPiB3cm90ZToKPiA+ID4gPiAKPiA+ID4gPiBIaSBKZXJuZWosCj4g PiA+ID4gCj4gPiA+ID4gbWFueSB0aGFua3MgZm9yIHRha2luZyB0aGUgdGltZSB0byB3YWRlIHRo cm91Z2ggdGhpcyBmaWxlIQo+ID4gPiA+ICAgICAKPiA+ID4gPiA+IERuZSBwZXRlaywgMjkuIGFw cmlsIDIwMjIgb2IgMDE6MDk6MzAgQ0VTVCBqZSBBbmRyZSBQcnp5d2FyYSAgIAo+IG5hcGlzYWwo YSk6ICAKPiA+ID4gPiA+ID4gVGhpcyAocmVsYXRpdmVseSkgbmV3IFNvQyBpcyBzaW1pbGFyIHRv IHRoZSBINiwgYnV0IGRyb3BzIHRoZSAgIAo+IChicm9rZW4pCj4gPiA+ID4gPiA+IFBDSWUgc3Vw cG9ydCBhbmQgdGhlIFVTQiAzLjAgY29udHJvbGxlci4gSXQgYWxzbyBnZXRzIHRoZSBtYW5hZ2Vt ZW50Cj4gPiA+ID4gPiA+IGNvbnRyb2xsZXIgcmVtb3ZlZCwgd2hpY2ggaW4gdHVybiByZW1vdmVz ICpzb21lKiwgYnV0IG5vdCBhbGwgb2YgdGhlCj4gPiA+ID4gPiA+IGRldmljZXMgZm9ybWVybHkg ZGVkaWNhdGVkIHRvIHRoZSBBUklTQyAoQ1BVUykuCj4gPiA+ID4gPiA+IEFuZCB3aGlsZSB0aGVy ZSBpcyBzdGlsbCB0aGUgZXh0cmEgc3VueGkgaW50ZXJydXB0IGNvbnRyb2xsZXIsIHRoZQo+ID4g PiA+ID4gPiBwYWNrYWdlIGxhY2tzIHRoZSBjb3JyZXNwb25kaW5nIE5NSSBwaW4sIHNvIG5vIGlu dGVycnVwdHMgZm9yIHRoZSAgIAo+IFBNSUMuCj4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiBUaGUg cmVzZXJ2ZWQgbWVtb3J5IG5vZGUgaXMgYWN0dWFsbHkgaGFuZGxlZCBieSBUcnVzdGVkIEZpcm13 YXJlICAgCj4gbm93LAo+ID4gPiA+ID4gPiBidXQgVS1Cb290IGZhaWxzIHRvIHByb3BhZ2F0ZSB0 aGlzIHRvIGEgc2VwYXJhdGVseSBsb2FkZWQgRFRCLCBzbyB3ZQo+ID4gPiA+ID4gPiBrZWVwIGl0 IGluIGhlcmUgZm9yIG5vdywgdW50aWwgVS1Cb290IGxlYXJucyB0byBkbyB0aGlzIHByb3Blcmx5 Lgo+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gU2lnbmVkLW9mZi1ieTogQW5kcmUgUHJ6eXdhcmEg PGFuZHJlLnByenl3YXJhQGFybS5jb20+Cj4gPiA+ID4gPiA+IC0tLQo+ID4gPiA+ID4gPiAKPiA+ ID4gPiA+ID4gIC4uLi9hcm02NC9ib290L2R0cy9hbGx3aW5uZXIvc3VuNTBpLWg2MTYuZHRzaSB8 IDU3NCArKysrKysrKysrKysrKysgIAo+ICsrKwo+ID4gPiA+ID4gPiAgMSBmaWxlIGNoYW5nZWQs IDU3NCBpbnNlcnRpb25zKCspCj4gPiA+ID4gPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgYXJjaC9h cm02NC9ib290L2R0cy9hbGx3aW5uZXIvc3VuNTBpLWg2MTYuZHRzaQo+ID4gPiA+ID4gPiAKPiA+ ID4gPiA+ID4gZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvYWxsd2lubmVyL3N1bjUw aS1oNjE2LmR0c2kKPiA+ID4gPiA+ID4gYi9hcmNoL2FybTY0LyAgICAKPiA+ID4gPiA+IAo+ID4g PiA+ID4gYm9vdC9kdHMvYWxsd2lubmVyL3N1bjUwaS1oNjE2LmR0c2kKPiA+ID4gPiA+ICAgICAK PiA+ID4gPiA+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+ID4gPiA+ID4gaW5kZXggMDAwMDAw MDAwMDAwLi5jYzA2Y2RkMTViYTUKPiA+ID4gPiA+ID4gLS0tIC9kZXYvbnVsbAo+ID4gPiA+ID4g PiArKysgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL2FsbHdpbm5lci9zdW41MGktaDYxNi5kdHNpCj4g PiA+ID4gPiA+IEBAIC0wLDAgKzEsNTc0IEBACj4gPiA+ID4gPiA+ICsvLyBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogKEdQTC0yLjArIE9SIE1JVCkKPiA+ID4gPiA+ID4gKy8vIENvcHlyaWdodCAo QykgMjAyMCBBcm0gTHRkLgo+ID4gPiA+ID4gPiArLy8gYmFzZWQgb24gdGhlIEg2IGR0c2ksIHdo aWNoIGlzOgo+ID4gPiA+ID4gPiArLy8gICBDb3B5cmlnaHQgKEMpIDIwMTcgSWNlbm93eSBaaGVu ZyA8aWNlbm93eUBhb3NjLmlvPgo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICsjaW5jbHVkZSA8 ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvYXJtLWdpYy5oPgo+ID4gPiA+ID4gPiAr I2luY2x1ZGUgPGR0LWJpbmRpbmdzL2Nsb2NrL3N1bjUwaS1oNjE2LWNjdS5oPgo+ID4gPiA+ID4g PiArI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2Nsb2NrL3N1bjUwaS1oNi1yLWNjdS5oPgo+ID4gPiA+ ID4gPiArI2luY2x1ZGUgPGR0LWJpbmRpbmdzL3Jlc2V0L3N1bjUwaS1oNjE2LWNjdS5oPgo+ID4g PiA+ID4gPiArI2luY2x1ZGUgPGR0LWJpbmRpbmdzL3Jlc2V0L3N1bjUwaS1oNi1yLWNjdS5oPgo+ ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICsvIHsKPiA+ID4gPiA+ID4gKwlpbnRlcnJ1cHQtcGFy ZW50ID0gPCZnaWM+Owo+ID4gPiA+ID4gPiArCSNhZGRyZXNzLWNlbGxzID0gPDI+Owo+ID4gPiA+ ID4gPiArCSNzaXplLWNlbGxzID0gPDI+Owo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICsJY3B1 cyB7Cj4gPiA+ID4gPiA+ICsJCSNhZGRyZXNzLWNlbGxzID0gPDE+Owo+ID4gPiA+ID4gPiArCQkj c2l6ZS1jZWxscyA9IDwwPjsKPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiArCQljcHUwOiBjcHVA MCB7Cj4gPiA+ID4gPiA+ICsJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTUzIjsKPiA+ID4g PiA+ID4gKwkJCWRldmljZV90eXBlID0gImNwdSI7Cj4gPiA+ID4gPiA+ICsJCQlyZWcgPSA8MD47 Cj4gPiA+ID4gPiA+ICsJCQllbmFibGUtbWV0aG9kID0gInBzY2kiOwo+ID4gPiA+ID4gPiArCQkJ Y2xvY2tzID0gPCZjY3UgQ0xLX0NQVVg+Owo+ID4gPiA+ID4gPiArCQl9Owo+ID4gPiA+ID4gPiAr Cj4gPiA+ID4gPiA+ICsJCWNwdTE6IGNwdUAxIHsKPiA+ID4gPiA+ID4gKwkJCWNvbXBhdGlibGUg PSAiYXJtLGNvcnRleC1hNTMiOwo+ID4gPiA+ID4gPiArCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsK PiA+ID4gPiA+ID4gKwkJCXJlZyA9IDwxPjsKPiA+ID4gPiA+ID4gKwkJCWVuYWJsZS1tZXRob2Qg PSAicHNjaSI7Cj4gPiA+ID4gPiA+ICsJCQljbG9ja3MgPSA8JmNjdSBDTEtfQ1BVWD47Cj4gPiA+ ID4gPiA+ICsJCX07Cj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gKwkJY3B1MjogY3B1QDIgewo+ ID4gPiA+ID4gPiArCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE1MyI7Cj4gPiA+ID4gPiA+ ICsJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOwo+ID4gPiA+ID4gPiArCQkJcmVnID0gPDI+Owo+ID4g PiA+ID4gPiArCQkJZW5hYmxlLW1ldGhvZCA9ICJwc2NpIjsKPiA+ID4gPiA+ID4gKwkJCWNsb2Nr cyA9IDwmY2N1IENMS19DUFVYPjsKPiA+ID4gPiA+ID4gKwkJfTsKPiA+ID4gPiA+ID4gKwo+ID4g PiA+ID4gPiArCQljcHUzOiBjcHVAMyB7Cj4gPiA+ID4gPiA+ICsJCQljb21wYXRpYmxlID0gImFy bSxjb3J0ZXgtYTUzIjsKPiA+ID4gPiA+ID4gKwkJCWRldmljZV90eXBlID0gImNwdSI7Cj4gPiA+ ID4gPiA+ICsJCQlyZWcgPSA8Mz47Cj4gPiA+ID4gPiA+ICsJCQllbmFibGUtbWV0aG9kID0gInBz Y2kiOwo+ID4gPiA+ID4gPiArCQkJY2xvY2tzID0gPCZjY3UgQ0xLX0NQVVg+Owo+ID4gPiA+ID4g PiArCQl9Owo+ID4gPiA+ID4gPiArCX07Cj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gKwlyZXNl cnZlZC1tZW1vcnkgewo+ID4gPiA+ID4gPiArCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKPiA+ID4g PiA+ID4gKwkJI3NpemUtY2VsbHMgPSA8Mj47Cj4gPiA+ID4gPiA+ICsJCXJhbmdlczsKPiA+ID4g PiA+ID4gKwo+ID4gPiA+ID4gPiArCQkvKiA1MTJLaUIgcmVzZXJ2ZWQgZm9yIEFSTSBUcnVzdGVk IEZpcm13YXJlIChCTDMxKSAqLwo+ID4gPiA+ID4gPiArCQlzZWNtb25fcmVzZXJ2ZWQ6IHNlY21v bkA0MDAwMDAwMCB7Cj4gPiA+ID4gPiA+ICsJCQlyZWcgPSA8MHgwIDB4NDAwMDAwMDAgMHgwIDB4 ODAwMDA+Owo+ID4gPiA+ID4gPiArCQkJbm8tbWFwOwo+ID4gPiA+ID4gPiArCQl9Owo+ID4gPiA+ ID4gPiArCX07ICAgIAo+ID4gPiA+ID4gCj4gPiA+ID4gPiBJJ20gbm90IGEgZmFuIG9mIGFib3Zl LiBJZiBhbnl0aGluZyBjaGFuZ2VzIGluIGZ1dHVyZSBpbiBCTDMxLCBVLUJvb3QKPiA+ID4gPiA+ IHdvdWxkCj4gPiA+ID4gPiBuZWVkIHRvIHJlY29uZmlndXJlIGl0IGFueXdheS4gQ2FuIHdlIGp1 c3Qgc2tpcCBpdD8gICAgCj4gPiA+ID4gCj4gPiA+ID4gSSBhbSBub3QgYSBmYW4gbmVpdGhlciwg YnV0IGxhc3QgdGltZSBJIGNoZWNrZWQgdGhpcyBpcyBuZWVkZWQgdG8gYm9vdC4KPiA+ID4gPiBJ bmRlZWQgVEYtQSBpbnNlcnRzIHRoaXMgbm9kZSwgd2l0aCB0aGUgcmlnaHQgdmFsdWVzLCBpbnRv IFUtQm9vdCdzIERULgo+ID4gPiA+IEFuZCB0aGF0J3MgbmljZWx5IHByZXNlcnZlZCBpZiB5b3Ug dXNlIHRoYXQgRFQgKCRmZHRjb250cm9sYWRkcikgZm9yCj4gPiA+ID4gdGhlIGtlcm5lbCBhcyB3 ZWxsLgo+ID4gPiA+IEJ1dCBpZiBzb21lb25lICpsb2FkcyogYSBEVEIgaW50byBVLUJvb3QgKHRv ICRmZHRfYWRkcl9yKSwgdGhlbgo+ID4gPiA+IFUtQm9vdCBmYWlscyB0byBwcm9wYWdhdGUgdGhl IC9yZXNlcnZlZC1tZW1vcnkgbm9kZSBpbnRvIHRoYXQgY29weS4KPiA+ID4gPiBUaGVyZSBkb2Vz IG5vdCBzZWVtIHRvIGJlIGEgZ2xvYmFsIG5vdGlvbiBvZiByZXNlcnZlZCBtZW1vcnkgaW4gVS1C b290Lgo+ID4gPiA+IFNvbWUgY29tbWFuZHMgKGxpa2UgdGZ0cCkgZXhwbGljaXRseSBwYXJzZSB0 aGUgY29udHJvbCBEVCB0byBmaW5kIGFuZAo+ID4gPiA+IHJlc3BlY3QgcmVzZXJ2ZWQgbWVtb3J5 IHJlZ2lvbnMuIGJvb3RtIGRvZXMgdGhhdCBhbHNvLCBidXQgb25seSB0bwo+ID4gPiA+IGF2b2lk IHBsYWNpbmcgdGhlIHJhbWRpc2sgb3IgRFRCIGludG8gcmVzZXJ2ZWQgbWVtb3J5LiBUaGUgaW5m b3JtYXRpb24KPiA+ID4gPiBlbmRzIHVwIGluIGltYWdlcy0+bG1iLCBidXQgaXMgbm90IHVzZWQg dG8gZ2VuZXJhdGUgb3IgYW1lbmQgbm9kZXMgaW4KPiA+ID4gPiB0aGUgdGFyZ2V0IERULgo+ID4g PiA+IFNvIHRoZSBiaXRzIGFuZCBwaWVjZXMgYXJlIHRoZXJlLCBidXQgaXQgd2lsbCByZXF1aXJl IHNvbWUgY29kZSB0byBiZQo+ID4gPiA+IGFkZGVkIHRvIHRoZSBnZW5lcmljIFUtQm9vdCBjb2Rl Lgo+ID4gPiA+IAo+ID4gPiA+IFNvIHdoYXQgZG8geW91IHRoaW5rPyBMZWF2aW5nIHRoaXMgb3V0 IHdpbGwgcHJldmVudCBsb2FkaW5nIERUQnMgaW50bwo+ID4gPiA+IFUtQm9vdCwgYXQgdGhlIG1v bWVudCwgd2hpY2ggc291bmRzIGJhZC4gSSBzdWdnZXN0IHdlIGtlZXAgaXQgaW4sIGZvcgo+ID4g PiA+IG5vdywgaXQgc2hvdWxkIG5vdCByZWFsbHkgaHVydC4gVS1Cb290IHdpbGwgaG9wZWZ1bGx5 IHN0YXJ0IHRvIGRvIHRoZQo+ID4gPiA+IHJpZ2h0IHRoaW5nIHNvb24sIHRoZW4gd2UgY2FuIGVp dGhlciBwaGFzZSBpdCBvdXQgaGVyZSAobWF5YmUgd2hlbiB3ZQo+ID4gPiA+IGFjdHVhbGx5IGNo YW5nZSBzb21ldGhpbmcgaW4gVEYtQSksIG9yIGxldCBVLUJvb3QgZml4IGl0LiAgICAKPiA+ID4g Cj4gPiA+IFRCSCwgaWYgInNvb24iIGlzIHJlYWxseSBzb29uLCBJIHdvdWxkIHJhdGhlciB3YWl0 IHdpdGggSDYxNiBEVCB1bnRpbCBVLSAgCj4gQm9vdCAKPiA+ID4gc3VwcG9ydHMgY2Fycnlpbmcg b3ZlciByZXNlcnZlZCBtZW1vcnkgbm9kZXMuICAKPiA+IAo+ID4gQnV0IHRoaXMgYWxzbyBjYXJy aWVzIGNvbXBhdGliaWxpdHkgaXNzdWVzLiBVLUJvb3Qgc3VwcG9ydCB0aGUgSDYxNiBmb3IKPiA+ IG1vcmUgdGhhbiBhIHllYXIgbm93LCBhbmQgdGhlIGVhcmxpZXN0IHBvc3NpYmxlIFUtQm9vdCBy ZWxlYXNlIGhhdmluZyB0aGF0Cj4gPiBwcm9wYWdhdGlvbiBjb2RlIHdvdWxkIGJlIHRoZSBvbmUg cmVsZWFzZWQgaW4gT2N0b2Jlci4gICAKPiAKPiBJIHdhcyBob3BpbmcgeW91IHdvdWxkIHNheSBK dWx5IChuZXh0IFUtQm9vdCByZWxlYXNlKSA6KS4KCldlbGwsIDIwMjIuMDcgd2FzIHN1cHBvc2Vk IHRvIGJlIHJlbGVhc2VkIHRvZGF5LCBhbmQgZXZlbiBpZiB0aGF0IGlzCmRlbGF5ZWQgYnkgYSBi aXQsIHRoYXQncyBvYnZpb3VzbHkgZmFyIHRvbyBsYXRlIDstKQoKPiA+IEFuZCB0aGVuIHBlb3Bs ZQo+ID4gd291bGQgc3RpbGwgbmVlZCB0byB1cGRhdGUgZmlyc3QsIHNvIHRoYXQncyBxdWl0ZSBz b21lIG1vbnRocyBvdXQuCj4gPiBBbmQgSSB3YXMgYWN0dWFsbHkgaG9waW5nIHRvIGdldCBhdCBs ZWFzdCB0aGUgSDYxNiBEVCBwYXRjaGVzIG9mZiBteQo+ID4gcGxhdGUsIGFuZCBnZXQgdGhlbSBp bnRvIHRoZSB0cmVlIHRvIGhhdmUgYSBzdGFibGUgYW5kIGFncmVlZCB1cG9uIGJhc2UKPiA+IChi ZWZvcmUgdGhpcyBzZXJpZXMgdHVybnMgaW50byBhIHRlZW5hZ2VyIDstKSAgCj4gCj4gWWVhaCwg SSB3b3VsZCBsaWtlIHRoYXQgdG9vLgo+IAo+ID4gVGhlbiB3ZSBjb3VsZCBmb3IgaW5zdGFuY2Ug dXBkYXRlIHRoZSBVLUJvb3QgSDYxNiBzdXBwb3J0Lgo+ID4gICAKPiA+ID4gV2hhdGV2ZXIgd2Ug ZG8gbm93LCBpdCB3aWxsIGhhdmUgCj4gPiA+IGNvbXBhdGliaWxpdHkgaXNzdWVzLiBJZiB3ZSBp bnRyb2R1Y2UgcmVzZXJ2ZWQgbWVtb3J5IG5vZGUgbm93LCB3ZSBjYW4ndCAKPiA+ID4gZWFzaWx5 IGRyb3AgaXQgbGF0ZXIuIEJvb3Rsb2FkZXJzIGFyZSBub3QgdmVyeSBvZnRlbiB1cGRhdGVkLCBi dXQga2VybmVscyAgIAo+IGFuZCAKPiA+ID4gRFRCIGZpbGVzIGFyZSwgYXQgbGVhc3QgaW4gbXkg ZXhwZXJpZW5jZS4gU28gd2hlbiB3ZSBkZWNpZGUgdG8gZHJvcCB0aGUgICAKPiBub2RlPwo+ID4g Cj4gPiBJIHRoaW5rIG9mIHRoZSB0aHJlZSBwb3NzaWJpbGl0aWVzOgo+ID4gLSBEcm9wIHRoZSBu b2RlIG5vdywgYW5kIGFzayBwZW9wbGUgdG8gbm90IGxvYWQgRFRCcyBleHBsaWNpdGx5Cj4gPiAt IERyb3AgdGhlIG5vZGUgd2hlbiBVLUJvb3QgbGVhcm5lZCB0byBwcm9wYWdhdGUgdGhlIHJlc2Vy dmF0aW9uCj4gPiAtIEtlZXAgdGhlIG5vZGUKPiA+IHRoZSBsYXN0IG9uZSBpcyB0aGUgbGVhc3Qg cGFpbmZ1bDogaGF2aW5nIHRoaXMgbm9kZSBpbiBkb2VzIG5vdCByZWFsbHkKPiA+IGh1cnQsIHNv IHdlIGNhbiBiZSB2ZXJ5IHJlbGF4ZWQgd2l0aCB0aGlzIHJlbW92YWwgZGVjaXNpb246Cj4gPiAt IElmIFUtQm9vdCBkb2VzIG5vdCBhZGQgdGhlIHJlc2VydmVkIG5vZGUsIHdlIGFyZSBjb3ZlcmVk Lgo+ID4gLSBJZiBVLUJvb3QgYWRkcyB0aGUgbm9kZSwgaXQgd2lsbCBkbyBzbyBpbiBhIHdheSB3 aGVyZSBpdCBkZWFscyB3aXRoCj4gPiBleGlzdGluZyByZXNlcnZhdGlvbnMuIFNvIGVpdGhlciBp dCBkb2Vzbid0IGFjdHVhbGx5IGNoYW5nZSBhbnl0aGluZywgb3IKPiA+IGl0IGV4dGVuZHMgdGhl IHJlc2VydmF0aW9uLgo+ID4gLSBTaG91bGQgdGhlIFRGLUEgbG9jYXRpb24gYWN0dWFsbHkgbW92 ZSAoYW5kIHdlIGhhdmUgbm8gcGxhbnMgb3IgbmVlZHMgdG8KPiA+IGRvIHRoYXQpLCBwZW9wbGUg d291bGQgb25seSBnZXQgdGhpcyBieSB1cGRhdGluZyB0aGUgZmlybXdhcmUsIGF0IHdoaWNoCj4g PiBwb2ludCB0aGUgVS1Cb290IHBhcnQgd291bGQgc3VyZWx5IGJlIGluIHBsYWNlIGFscmVhZHku IFdlIGRvbid0IHJlYWxseQo+ID4gc3VwcG9ydCB1cGRhdGluZyBqdXN0IEJMMzEgaW4gYW4gZXhp c3RpbmcgYmluYXJ5IGZpcm13YXJlIGltYWdlLCBzbyB5b3UKPiA+IHdvdWxkIGdldCBhbiB1cGRh dGVkIFUtQm9vdCBhcyB3ZWxsLgo+ID4gCj4gPiBJIHRoaW5rIHRoZSB3b3JzdCBjYXNlIHNjZW5h cmlvIGlzIHRoYXQgdXNlcnMgZW5kIHVwIHdpdGggYW4gdW5uZWVkZWQgNTEySwo+ID4gcmVzZXJ2 YXRpb24uIElmIHRoZXkgY2FyZSwgYSBmaXJtd2FyZSB1cGRhdGUgc2hvdWxkIHNvbHZlIHRoaXMg cHJvYmxlbS4KPiA+IAo+ID4gQXMgZm9yIHRoZSB0aW1lIHRvIHJlbW92ZSB0aGF0IG5vZGU6IHdl IGNvdWxkIGRvIHRoYXQgYXQgdGhlIHRpbWUgd2hlbgo+ID4gKG9yIHJhdGhlcjogaWYpIHdlIGFj dHVhbGx5IGNoYW5nZSB0aGUgVEYtQSByZXNlcnZhdGlvbi4gQXQgdGhlIG1vbWVudAo+ID4gdGhl cmUgYXJlIG5vIHBsYW5zIHRvIGRvIHRoaXMsIGFuZCB0aGUgc2l6ZSByZXNlcnZhdGlvbiBpcyBt b3JlIHRoYW4KPiA+IGdlbmVyb3VzICh0aGUgY3VycmVudCBkZWJ1ZyBidWlsZCBpcyBhY3R1YWxs eSA3NyBLQiBvciBzbyBvbmx5KS4gSWYgdGhlcmUKPiA+IGlzIG5vIGNoYW5nZSwgYW5kIHRoZSBu b2RlIHN0YXlzIGluIHRoZSAuZHRzaSwgaXQgZG9lc24ndCByZWFsbHkgaHVydCwgc2VlCj4gPiBh Ym92ZS4gIAo+IAo+IEkgc2VlIHlvdXIgcG9pbnQsIGJ1dCBJIHdvdWxkIGxpa2UgdG8gZ2V0IHNv bWUgaW5wdXQgZnJvbSBTYW11ZWwgZmlyc3QuCj4KPiBTYW11ZWwsIHdoYXQgZG8geW91IHRoaW5r Pwo+IAo+ID4gICAKPiA+ID4gQWZ0ZXIgMTAgeWVhcnM/IEFsdGVybmF0aXZlbHksIHJlc2VydmVk IG1lbW9yeSBub2RlIGNhbiBiZSBqdXN0IGRyb3BwZWQgICAKPiBhbmQgCj4gPiA+IGFueW9uZSBs b2FkaW5nIERUQiBmaWxlIGZyb20gb3V0c2lkZSB3b3VsZCBuZWVkIHRvIG1ha2Ugc3VyZSBpdCdz IHBhdGNoZWQuICAgCj4gQnV0IAo+ID4gPiB0aGF0J3MgdW5leHBlY3RlZCBmcm9tIHVzZXIgcGVy c3BlY3RpdmUsIGFsdGhvdWdoIHBhdGNoaW5nIERUIGZpbGVzIGlzIGRvbmUgICAKPiBieSAKPiA+ ID4gc29tZSBkaXN0cm9zLiAgCj4gPiAKPiA+IFllYWgsIGxldCdzIG5vdCBnbyB0aGVyZS4gQXMg eW91IGtub3csIEkgYWxyZWFkeSBkaXNsaWtlIHRoZSBpZGVhIG9mCj4gPiBleHBsaWNpdGx5IGxv YWRpbmcgRFRCcyBhdCBhbGwsIGJ1dCBJIHVuZGVyc3RhbmQgdGhpcyBpcyB3aGF0IHBlb3BsZSwg YW5kCj4gPiBkaXN0cmlidXRpb25zLCBkbywgc28gSSdkIHJhdGhlciBoYXZlIHRoZW0gY292ZXJl ZC4gSGVuY2UgdGhlIG5vZGUgdG8KPiA+IHdvcmsgd2l0aCBleGlzdGluZyBmaXJtd2FyZS4gIAo+ IAo+IFJldXNpbmcgRFRCIGZyb20gVS1Cb290IGlzIG9ubHkgdXNlZnVsIHdoZW4geW91J3JlIGhh cHB5IHdpdGggY29tcGxldGVuZXNzIG9mIAo+IERUIGFuZCB3aXRoIHRoZSBsYWNrIG9mIGJ1Z3Mg aW4gaXQuIFRoZW4geW91IGNhbiBzYXZlIHRyb3VibGVzIHdpdGggc2tpcHBpbmcgCj4gZXh0ZXJu YWwgRFRCIGxvYWQgc3RlcCBhbmQgbGlmZSBpcyBlYXNpZXIuIEJ1dCBhcyB5b3Uga25vdywgZmVh dHVyZXMgYW5kIHRodXMgCj4gbm9kZXMgYXJlIGFkZGVkIGluIHN0ZXBzIGFuZCBzb21ldGltZXMg c29tZSBidWdzIGFyZSBmaXhlZCwgd2hpY2ggbWVhbnMgaXQncyAKPiBleHRyZW1lbHkgaGFuZHkg dG8gaGF2ZSBlYXNpbHkgdXBkYXRhYmxlIERUQiBmaWxlLgoKWWVzLCBkZWZpbml0ZWx5LCBzZWUg bXkgcmVwbHkgdG8gU2FtdWVsLiBJIGp1c3QgaGVsZCBiYWNrIHdpdGggdGhlIERUCnVwZGF0ZSBp biBVLUJvb3QgYmVjYXVzZSBvZiB0aGUgY29uZmxpY3QgYmV0d2VlbiAid2Ugb25seSB0YWtlIHB1 cmUKa2VybmVsIHRyZWUgRFRzIiBhbmQgInRoZXJlIGlzIGEgYnJlYWtpbmcgY2hhbmdlIiAocl9p bnRjIGJpbmRpbmcpLgoKSWYgd2UgZmluZCBhIHdheSBmb3J3YXJkIHdpdGggdGhlIERUIHN0YWJp bGl0eSBwcm9ibGVtLCBJIGFtIGhhcHB5IHRvCnB1c2ggZm9yIGEgbXVjaCBtb3JlIGZyZXF1ZW50 IERUIHVwZGF0ZSwgb3IgZXZlbiB1cGRhdGUganVzdCB0aGUgRFQgaW4KYW4gZXhpc3RpbmcgZmly bXdhcmUgaW5zdGFsbGF0aW9uLiBUaGlzIGNhbiBiZSBhdXRvbWF0ZWQsIHNpbmNlIHRoZSBEVEIK aXMganVzdCBhIG1lbWJlciBpbiB0aGUgRklUIGltYWdlLCB3aGljaCBjYW4gYmUgcmUtYXNzZW1i bGVkIHdpdGggYW4KdXBkYXRlZCBEVEIgYnkgc29tZSB0b29sIG9yIHNjcmlwdC4gT3Igd2UgdXNl IGNhcHN1bGUgdXBkYXRlcywgb2YganVzdAp0aGUgRFRCLCBzZXBhcmF0ZWx5IChpZiB0aGlzIGlz IHBvc3NpYmxlKT8KCj4gWWVzLCBVLUJvb3QgY2FuIGJlIAo+IGF1dG9tYXRlZCwgYnV0IGl0J3Mg dGVkaW91cyBmb3IgZGlzdHJvIHRvIG1haW50YWluIG9uZSBib290bG9hZGVyIHBhY2thZ2UgcGVy IAo+IGJvYXJkLiBJZGVhbGx5LCBkaXN0cm8gc2hvdWxkbid0IGNhcmUgYXQgYWxsIGFib3V0IHRo YXQsCgpZZXMsIEkgdG90YWxseSBhZ3JlZSwgZGlzdHJvcyBzaG91bGQgbm90IHNoaXAgZmlybXdh cmUuIFNpbmNlIGxlYXZpbmcKdGhpcyB0byB0aGUgYm9hcmQgdmVuZG9ycyBpcyBub3QgcmVhbGlz dGljLCBJIHdvbmRlciBpZiB3ZSAoYXMgInRoZQpzdW54aSBjb21tdW5pdHkiKSBzaG91bGQgc3Rl cCB1cCBoZXJlLCBhbmQgcHJvdmlkZSBiaW5hcnkgYnVpbGRzIChwdXJlbHkKZm9yIGNvbnZlbmll bmNlIHJlYXNvbnMpIG9mIGJvYXJkIGZpcm13YXJlPyBUaGF0IGNvdWxkIGJlIHVwZGF0ZWQgZnJv bQphIHJ1bm5pbmcgTGludXgsIG9yIHB1dCBvbiBhbiBTRCBjYXJkLCBvciBmZXRjaGVkIGJ5IGRp c3Ryb3MgdG8KZ2VuZXJhdGUgYW4gaW5zdGFsbGVyPyBXYXNuJ3QgdGhlcmUgZXZlbiBzb21lIGNl bnRyYWwgc3RvcmFnZSBvZmZlcmVkCmxhdGVseSBieSBMaW51eCwgdG8gaG9sZCAoVUVGSSkgZmly bXdhcmUgdXBkYXRlIGZpbGVzPwoKPiBidXQgbWFueSBib2FyZHMgZG9uJ3QgCj4gaGF2ZSBkZXNp Z25hdGVkIGJvb3Rsb2FkZXIgc3RvcmFnZSAoU1BJIE5PUiBmbGFzaCBpbiBBVyBjYXNlKSwgc28g dGhleSBoYXZlIHRvIAo+IGJlIGNvbWJpbmVkIG9uIHNhbWUgc3RvcmFnZSwgcGFydGl0aW9uIGV2 ZW4sIGFzIGRpc3Ryby4KCkhhdmUgeW91IHRyaWVkIGVNTUMgYm9vdCBwYXJ0aXRpb25zPyBJIGZv dW5kIHRoZW0gZXF1YWxseSBjb252ZW5pZW50IGFzClNQSSBmbGFzaCwgYW5kIHdoaWxlIG5vdCB0 b28gbWFueSBib2FyZHMgYWN0dWFsbHkgaGF2ZSBTUEkgZmxhc2gsCnF1aXRlIHNvbWUgaGF2ZSBl TU1DICh0aGlua2luZyBhYm91dCBUViBib3hlcykuIEkgcmVjZW50bHkgZXZlbgp1c2VkICJkdWFs IGJvb3QiIHdpdGggYSBCU1AgaW5zdGFsbGF0aW9uLgpBbmQgZXZlbiB0aGUgc21hbGxlc3QgZU1N Q3Mgc2VlbSB0byBoYXZlIDQgTUIgcGVyIGJvb3QgcGFydGl0aW9uLCBzbwpwbGVudHkgb2Ygc3Bh Y2UgZm9yIFUtQm9vdCAocGx1cyBURi1BIHBsdXMgY3J1c3QpLgoKPiBPbiB0aGUgb3RoZXIgaGFu ZCwgCj4gd2hlbiBidWlsZGluZyBrZXJuZWwsIHlvdSBhdXRvbWF0aWNhbGx5IGJ1aWxkIGFsbCBy ZWxldmFudCBEVEIgZmlsZXMsIHdoaWNoIHlvdSAKPiBjYW4gdGhlbiBqdXN0IGNvcHkgdG8gY29t bW9uIHBsYWNlLiBObyBkZXZpY2Ugc3BlY2lmaWMgaGFuZGxpbmcgbmVlZGVkLiBBbHNvLCAKPiBV LUJvb3QgZG9lc24ndCBzeW5jIERUIGZpbGVzIGV2ZXJ5IHJlbGVhc2UsIHNvIGxhdGVzdCBVLUJv b3QgZG9lc24ndCBuZWNlc3Nhcmx5IAo+IG1lYW4gbGF0ZXN0IERULgoKWWVzLCBmb3IgdGhlIGNv bXBhdGliaWxpdHkgcmVhc29ucyBtZW50aW9uZWQuIEkgYW0gbW9yZSB0aGFuIGhhcHB5IHRvCm1h a2UgdGhpcyBhIHJlZ3VsYXIgZXhlcmNpc2UgKHNheSBhdCBlYWNoIGtlcm5lbCdzIC1yYzMgb3Ig c28pLgoKPiBBYm92ZSBpcyBhIGJpdCBvZmYgdG9waWMsIGJ1dCBJIGhvcGUgeW91IHVuZGVyc3Rh bmQgd2h5IGRpc3Ryb3Mgb3B0IHRvIHVzZSAKPiBleHRlcm5hbCBEVEIgZmlsZXMgKHNwZWFraW5n IGZyb20gbXkgb3duIGV4cGVyaWVuY2VzKS4KClllcywgSSB1bmRlcnN0YW5kIHdoZXJlIHRoZXkg KGluY2x1ZGluZyBMRSkgYXJlIGNvbWluZyBmcm9tLCB0byBwcm92aWRlCmEgcHJhZ21hdGljIHNv bHV0aW9uIHRvIHRoZSB1c2VycycgcHJvYmxlbXMuIEFuZCB0aGF0J3Mgd2h5IEkgd2FudGVkIHRv CnN0aWxsIGdpdmUgdGhlIHBvc3NpYmlsaXR5IHRvIGxvYWQgYSBEVEIsIGV2ZW4gdGhvdWdoIEkg dGhpbmsgdGhpcwpzaG91bGQgbm90IGJlIHRoZSBzdGFuZGFyZCB3YXkuCgpDaGVlcnMsCkFuZHJl CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1h cm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5v cmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0t a2VybmVsCg==