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=-5.6 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE, SPF_PASS,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3A976C433E0 for ; Mon, 15 Jun 2020 09:51:41 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 15D9120738 for ; Mon, 15 Jun 2020 09:51:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1592214701; bh=VQSsnQX35sR5TfD+RN9LG5tzaQw22yankU/+xU93cY4=; h=Date:From:To:Cc:Subject:References:In-Reply-To:List-ID:From; b=nrYU+qV3BqohK3bZ5z1WmvbelPVuw5b2cO3qaoPPoBxHG+BZf+rSlBtLES0XU9Bcs UMwYTCyIYAtIYKxay7V0z9Rj0iW7/4FO80Od6j7/bMWns4o9j9FxCOW0jkwIBp/o10 Fp9d292QQLQRSXUCCsx3udijKpXuv2eC+qjQvrTQ= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729335AbgFOJvj (ORCPT ); Mon, 15 Jun 2020 05:51:39 -0400 Received: from mail.kernel.org ([198.145.29.99]:46706 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728368AbgFOJvj (ORCPT ); Mon, 15 Jun 2020 05:51:39 -0400 Received: from willie-the-truck (236.31.169.217.in-addr.arpa [217.169.31.236]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 473972068E; Mon, 15 Jun 2020 09:51:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1592214698; bh=VQSsnQX35sR5TfD+RN9LG5tzaQw22yankU/+xU93cY4=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=NQlHIN8i1uqF1tHVpoAL5v8g7CDhJAeOmA5A4ZAFG/9WAYr0bA3PhhvfkIL4Y7/Ou f9FQVRO5Ig4MDP3DfzPHGzWExA+gt3xKXnkuw3xtrvsmBqYDns3yZXwM6Ccwytdxom 9D7nTIyyyknQuA1HM6+iRJOwaNtrKorByKA5bYhg= Date: Mon, 15 Jun 2020 10:51:34 +0100 From: Will Deacon To: Achin Gupta Cc: Rob Herring , Sudeep Holla , "devicetree@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , "linux-kernel@vger.kernel.org" , Marc Zyngier , nd Subject: Re: [RFC PATCH 1/3] dt-bindings: Add ARM PSA FF binding for non-secure VM partitions Message-ID: <20200615095133.GA2477@willie-the-truck> References: <20200601094512.50509-1-sudeep.holla@arm.com> <20200601094512.50509-2-sudeep.holla@arm.com> <20200609223551.GA1620273@bogus> <20200610074346.GB15939@willie-the-truck> <5B3F18A4-5DA4-411E-9E26-7D25DEE3D414@arm.com> <20200611171222.GB7725@willie-the-truck> <20200615091639.GD46361@C02TC1ARHF1T> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20200615091639.GD46361@C02TC1ARHF1T> User-Agent: Mutt/1.10.1 (2018-07-13) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Jun 15, 2020 at 10:16:39AM +0100, Achin Gupta wrote: > On Thu, Jun 11, 2020 at 06:12:23PM +0100, Will Deacon wrote: > > On Thu, Jun 11, 2020 at 03:46:35PM +0000, Achin Gupta wrote: > > > > On 10 Jun 2020, at 08:43, Will Deacon wrote: > > > > On Tue, Jun 09, 2020 at 04:35:51PM -0600, Rob Herring wrote: > > > >> On Mon, Jun 01, 2020 at 10:45:10AM +0100, Sudeep Holla wrote: > > > >>> Add devicetree bindings for a Arm PSA FF-A compliant non-secure partition > > > >>> at virtual interface(VMs). > > > >>> > > > >>> Signed-off-by: Sudeep Holla > > > >>> --- > > > >>> .../devicetree/bindings/arm/arm,psa-ffa.txt | 47 +++++++++++++++++++ > > > >>> 1 file changed, 47 insertions(+) > > > >>> create mode 100644 Documentation/devicetree/bindings/arm/arm,psa-ffa.txt > > > >> > > > >> I'm hoping this goes away if the firmware is discoverable, but if not DT > > > >> bindings are DT schema now. > > > > > > > > We'll need the binding for the kvm host side, because there are plenty > > > > of partition properties that are not discoverable (e.g. number of vCPUs). > > > > > > Just trying to understand the req. a bit better… > > > > > > The FF-A driver in the host can use FFA_PARTITION_INFO_GET to determine > > > the count of partitions and their vCPUs. > > > > > > Is this about a guest being able to find out how many vCPUs it has? > > > > This is about KVM finding out the information it needs in order to spawn > > non-secure partitions. I don't see how it can do that with > > FFA_PARTITION_INFO_GET -- who would respond? > > Right! FFA_PARTITION_INFO_GET is meant to help the FF-A driver in the kernel to > determine partition properties. It assumes that EL2 SW has already read each > partition's manifest and will reply to this ABI. > > IIUC, with protected KVM, this information will have to be a part of the > manifest that the KVM host consumes. The host does not consume the manifest directly -- instead, the bootloader will use the manifest to populate these DT nodes. Again, these are *only* for non-secure virtual partitions which are to be managed by KVM. > But then, can this be made discoverable (use a SMC for discovery) at all as Rob > had originally suggested. Firmware (Secure world) has no clue and the bootloader > is long gone. Make what discoverable? > Separate topic, protected KVM does not get dibs on the manifest and it relies on > the KVM host to specify the address ranges for each partition? Does this not > mean that the KVM host can control the physical address space each partition > sees. This seems contrary to the isolation guarantees that protected KVM must > provide? The host is trusted during early boot, and gives up this trust after initialising EL2 fully. So roughly speaking, we: * Boot at EL2 and install a shim * Drop down to EL2 and start the host kernel * Before some initialisation (DT parsing, SMP bringup, etc) * Init KVM by calling back up to EL2 to install the full hypervisor At that point, the EL1 host is no longer trusted and the last call effectively "locks it out" from EL2. > > But you're right that number of vCPUs was a bad example. We also need > > information such as the entry point. > > Yes. From a spec perspective this should be specified in the partition manifest > unless the base address of the loaded image can be assummed to be the entry > point. Right, but the format of the manifest isn't defined by the spec so I really don't think it's something that Linux should be dealing with directly. Will 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=-5.5 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 80B43C433DF for ; Mon, 15 Jun 2020 09:51:45 +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 5620E20738 for ; Mon, 15 Jun 2020 09:51:45 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="oavo4x20"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=kernel.org header.i=@kernel.org header.b="NQlHIN8i" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 5620E20738 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org 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=Ywa76LPN65kVpFFPoMW4VRCcJVP3tdTe/OlZkN3Vaek=; b=oavo4x20YcwhdV //ByBt+zG13mKKx3oYFx0qxfXBq5fj1SyF4Vt92FfW63F3GqovVFIHAGEDbtcN6xDDVeC7+actqUw QhvoRxFYt6W3PeRVqIERXHGTfkTugmNgQSALU5nPManigCSRc6NdJraTcmXzSTDrO9lcwUJjCgpa9 6HvH+CiQ57xKMuc9bJMsXRBzQmRepZrl9Rn5RtnPa36iGsPvbFIoTJ3nz09t0AkvGeOzgKI2AOg++ yGa3hUftM93Myh6VP4cdUvk3/vblBphVzGH4IlfUV5KYu33//PZewc6OhrgoSas2+V5Ne2E/IKwTx MZ+mUSXSGn4xBmWksWuQ==; 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 1jklmK-0004JU-7N; Mon, 15 Jun 2020 09:51:44 +0000 Received: from mail.kernel.org ([198.145.29.99]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jklmG-0004Ig-T1 for linux-arm-kernel@lists.infradead.org; Mon, 15 Jun 2020 09:51:42 +0000 Received: from willie-the-truck (236.31.169.217.in-addr.arpa [217.169.31.236]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 473972068E; Mon, 15 Jun 2020 09:51:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1592214698; bh=VQSsnQX35sR5TfD+RN9LG5tzaQw22yankU/+xU93cY4=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=NQlHIN8i1uqF1tHVpoAL5v8g7CDhJAeOmA5A4ZAFG/9WAYr0bA3PhhvfkIL4Y7/Ou f9FQVRO5Ig4MDP3DfzPHGzWExA+gt3xKXnkuw3xtrvsmBqYDns3yZXwM6Ccwytdxom 9D7nTIyyyknQuA1HM6+iRJOwaNtrKorByKA5bYhg= Date: Mon, 15 Jun 2020 10:51:34 +0100 From: Will Deacon To: Achin Gupta Subject: Re: [RFC PATCH 1/3] dt-bindings: Add ARM PSA FF binding for non-secure VM partitions Message-ID: <20200615095133.GA2477@willie-the-truck> References: <20200601094512.50509-1-sudeep.holla@arm.com> <20200601094512.50509-2-sudeep.holla@arm.com> <20200609223551.GA1620273@bogus> <20200610074346.GB15939@willie-the-truck> <5B3F18A4-5DA4-411E-9E26-7D25DEE3D414@arm.com> <20200611171222.GB7725@willie-the-truck> <20200615091639.GD46361@C02TC1ARHF1T> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20200615091639.GD46361@C02TC1ARHF1T> 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-20200615_025140_975806_297C5337 X-CRM114-Status: GOOD ( 27.71 ) 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: Rob Herring , "devicetree@vger.kernel.org" , Marc Zyngier , "linux-kernel@vger.kernel.org" , Sudeep Holla , nd , "linux-arm-kernel@lists.infradead.org" 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 T24gTW9uLCBKdW4gMTUsIDIwMjAgYXQgMTA6MTY6MzlBTSArMDEwMCwgQWNoaW4gR3VwdGEgd3Jv dGU6Cj4gT24gVGh1LCBKdW4gMTEsIDIwMjAgYXQgMDY6MTI6MjNQTSArMDEwMCwgV2lsbCBEZWFj b24gd3JvdGU6Cj4gPiBPbiBUaHUsIEp1biAxMSwgMjAyMCBhdCAwMzo0NjozNVBNICswMDAwLCBB Y2hpbiBHdXB0YSB3cm90ZToKPiA+ID4gPiBPbiAxMCBKdW4gMjAyMCwgYXQgMDg6NDMsIFdpbGwg RGVhY29uIDx3aWxsQGtlcm5lbC5vcmc+IHdyb3RlOgo+ID4gPiA+IE9uIFR1ZSwgSnVuIDA5LCAy MDIwIGF0IDA0OjM1OjUxUE0gLTA2MDAsIFJvYiBIZXJyaW5nIHdyb3RlOgo+ID4gPiA+PiBPbiBN b24sIEp1biAwMSwgMjAyMCBhdCAxMDo0NToxMEFNICswMTAwLCBTdWRlZXAgSG9sbGEgd3JvdGU6 Cj4gPiA+ID4+PiBBZGQgZGV2aWNldHJlZSBiaW5kaW5ncyBmb3IgYSBBcm0gUFNBIEZGLUEgY29t cGxpYW50IG5vbi1zZWN1cmUgcGFydGl0aW9uCj4gPiA+ID4+PiBhdCB2aXJ0dWFsIGludGVyZmFj ZShWTXMpLgo+ID4gPiA+Pj4KPiA+ID4gPj4+IFNpZ25lZC1vZmYtYnk6IFN1ZGVlcCBIb2xsYSA8 c3VkZWVwLmhvbGxhQGFybS5jb20+Cj4gPiA+ID4+PiAtLS0KPiA+ID4gPj4+IC4uLi9kZXZpY2V0 cmVlL2JpbmRpbmdzL2FybS9hcm0scHNhLWZmYS50eHQgICB8IDQ3ICsrKysrKysrKysrKysrKysr KysKPiA+ID4gPj4+IDEgZmlsZSBjaGFuZ2VkLCA0NyBpbnNlcnRpb25zKCspCj4gPiA+ID4+PiBj cmVhdGUgbW9kZSAxMDA2NDQgRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9h cm0scHNhLWZmYS50eHQKPiA+ID4gPj4KPiA+ID4gPj4gSSdtIGhvcGluZyB0aGlzIGdvZXMgYXdh eSBpZiB0aGUgZmlybXdhcmUgaXMgZGlzY292ZXJhYmxlLCBidXQgaWYgbm90IERUCj4gPiA+ID4+ IGJpbmRpbmdzIGFyZSBEVCBzY2hlbWEgbm93Lgo+ID4gPiA+Cj4gPiA+ID4gV2UnbGwgbmVlZCB0 aGUgYmluZGluZyBmb3IgdGhlIGt2bSBob3N0IHNpZGUsIGJlY2F1c2UgdGhlcmUgYXJlIHBsZW50 eQo+ID4gPiA+IG9mIHBhcnRpdGlvbiBwcm9wZXJ0aWVzIHRoYXQgYXJlIG5vdCBkaXNjb3ZlcmFi bGUgKGUuZy4gbnVtYmVyIG9mIHZDUFVzKS4KPiA+ID4KPiA+ID4gSnVzdCB0cnlpbmcgdG8gdW5k ZXJzdGFuZCB0aGUgcmVxLiBhIGJpdCBiZXR0ZXLigKYKPiA+ID4KPiA+ID4gVGhlIEZGLUEgZHJp dmVyIGluIHRoZSBob3N0IGNhbiB1c2UgRkZBX1BBUlRJVElPTl9JTkZPX0dFVCB0byBkZXRlcm1p bmUKPiA+ID4gdGhlIGNvdW50IG9mIHBhcnRpdGlvbnMgYW5kIHRoZWlyIHZDUFVzLgo+ID4gPgo+ ID4gPiBJcyB0aGlzIGFib3V0IGEgZ3Vlc3QgYmVpbmcgYWJsZSB0byBmaW5kIG91dCBob3cgbWFu eSB2Q1BVcyBpdCBoYXM/Cj4gPgo+ID4gVGhpcyBpcyBhYm91dCBLVk0gZmluZGluZyBvdXQgdGhl IGluZm9ybWF0aW9uIGl0IG5lZWRzIGluIG9yZGVyIHRvIHNwYXduCj4gPiBub24tc2VjdXJlIHBh cnRpdGlvbnMuIEkgZG9uJ3Qgc2VlIGhvdyBpdCBjYW4gZG8gdGhhdCB3aXRoCj4gPiBGRkFfUEFS VElUSU9OX0lORk9fR0VUIC0tIHdobyB3b3VsZCByZXNwb25kPwo+IAo+IFJpZ2h0ISBGRkFfUEFS VElUSU9OX0lORk9fR0VUIGlzIG1lYW50IHRvIGhlbHAgdGhlIEZGLUEgZHJpdmVyIGluIHRoZSBr ZXJuZWwgdG8KPiBkZXRlcm1pbmUgcGFydGl0aW9uIHByb3BlcnRpZXMuIEl0IGFzc3VtZXMgdGhh dCBFTDIgU1cgaGFzIGFscmVhZHkgcmVhZCBlYWNoCj4gcGFydGl0aW9uJ3MgbWFuaWZlc3QgYW5k IHdpbGwgcmVwbHkgdG8gdGhpcyBBQkkuCj4gCj4gSUlVQywgd2l0aCBwcm90ZWN0ZWQgS1ZNLCB0 aGlzIGluZm9ybWF0aW9uIHdpbGwgaGF2ZSB0byBiZSBhIHBhcnQgb2YgdGhlCj4gbWFuaWZlc3Qg dGhhdCB0aGUgS1ZNIGhvc3QgY29uc3VtZXMuCgpUaGUgaG9zdCBkb2VzIG5vdCBjb25zdW1lIHRo ZSBtYW5pZmVzdCBkaXJlY3RseSAtLSBpbnN0ZWFkLCB0aGUgYm9vdGxvYWRlcgp3aWxsIHVzZSB0 aGUgbWFuaWZlc3QgdG8gcG9wdWxhdGUgdGhlc2UgRFQgbm9kZXMuIEFnYWluLCB0aGVzZSBhcmUg Km9ubHkqCmZvciBub24tc2VjdXJlIHZpcnR1YWwgcGFydGl0aW9ucyB3aGljaCBhcmUgdG8gYmUg bWFuYWdlZCBieSBLVk0uCgo+IEJ1dCB0aGVuLCBjYW4gdGhpcyBiZSBtYWRlIGRpc2NvdmVyYWJs ZSAodXNlIGEgU01DIGZvciBkaXNjb3ZlcnkpIGF0IGFsbCBhcyBSb2IKPiBoYWQgb3JpZ2luYWxs eSBzdWdnZXN0ZWQuIEZpcm13YXJlIChTZWN1cmUgd29ybGQpIGhhcyBubyBjbHVlIGFuZCB0aGUg Ym9vdGxvYWRlcgo+IGlzIGxvbmcgZ29uZS4KCk1ha2Ugd2hhdCBkaXNjb3ZlcmFibGU/Cgo+IFNl cGFyYXRlIHRvcGljLCBwcm90ZWN0ZWQgS1ZNIGRvZXMgbm90IGdldCBkaWJzIG9uIHRoZSBtYW5p ZmVzdCBhbmQgaXQgcmVsaWVzIG9uCj4gdGhlIEtWTSBob3N0IHRvIHNwZWNpZnkgdGhlIGFkZHJl c3MgcmFuZ2VzIGZvciBlYWNoIHBhcnRpdGlvbj8gRG9lcyB0aGlzIG5vdAo+IG1lYW4gdGhhdCB0 aGUgS1ZNIGhvc3QgY2FuIGNvbnRyb2wgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UgZWFjaCBw YXJ0aXRpb24KPiBzZWVzLiBUaGlzIHNlZW1zIGNvbnRyYXJ5IHRvIHRoZSBpc29sYXRpb24gZ3Vh cmFudGVlcyB0aGF0IHByb3RlY3RlZCBLVk0gbXVzdAo+IHByb3ZpZGU/CgpUaGUgaG9zdCBpcyB0 cnVzdGVkIGR1cmluZyBlYXJseSBib290LCBhbmQgZ2l2ZXMgdXAgdGhpcyB0cnVzdCBhZnRlcgpp bml0aWFsaXNpbmcgRUwyIGZ1bGx5LiBTbyByb3VnaGx5IHNwZWFraW5nLCB3ZToKCgkqIEJvb3Qg YXQgRUwyIGFuZCBpbnN0YWxsIGEgc2hpbQoJKiBEcm9wIGRvd24gdG8gRUwyIGFuZCBzdGFydCB0 aGUgaG9zdCBrZXJuZWwKCSogQmVmb3JlIHNvbWUgaW5pdGlhbGlzYXRpb24gKERUIHBhcnNpbmcs IFNNUCBicmluZ3VwLCBldGMpCgkqIEluaXQgS1ZNIGJ5IGNhbGxpbmcgYmFjayB1cCB0byBFTDIg dG8gaW5zdGFsbCB0aGUgZnVsbCBoeXBlcnZpc29yCgpBdCB0aGF0IHBvaW50LCB0aGUgRUwxIGhv c3QgaXMgbm8gbG9uZ2VyIHRydXN0ZWQgYW5kIHRoZSBsYXN0IGNhbGwKZWZmZWN0aXZlbHkgImxv Y2tzIGl0IG91dCIgZnJvbSBFTDIuCgo+ID4gQnV0IHlvdSdyZSByaWdodCB0aGF0IG51bWJlciBv ZiB2Q1BVcyB3YXMgYSBiYWQgZXhhbXBsZS4gV2UgYWxzbyBuZWVkCj4gPiBpbmZvcm1hdGlvbiBz dWNoIGFzIHRoZSBlbnRyeSBwb2ludC4KPiAKPiBZZXMuIEZyb20gYSBzcGVjIHBlcnNwZWN0aXZl IHRoaXMgc2hvdWxkIGJlIHNwZWNpZmllZCBpbiB0aGUgcGFydGl0aW9uIG1hbmlmZXN0Cj4gdW5s ZXNzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIGxvYWRlZCBpbWFnZSBjYW4gYmUgYXNzdW1tZWQg dG8gYmUgdGhlIGVudHJ5Cj4gcG9pbnQuCgpSaWdodCwgYnV0IHRoZSBmb3JtYXQgb2YgdGhlIG1h bmlmZXN0IGlzbid0IGRlZmluZWQgYnkgdGhlIHNwZWMgc28gSSByZWFsbHkKZG9uJ3QgdGhpbmsg aXQncyBzb21ldGhpbmcgdGhhdCBMaW51eCBzaG91bGQgYmUgZGVhbGluZyB3aXRoIGRpcmVjdGx5 LgoKV2lsbAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K bGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZy YWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGlu dXgtYXJtLWtlcm5lbAo=