From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wr1-f51.google.com (mail-wr1-f51.google.com [209.85.221.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 84E5D23C4 for ; Fri, 3 Feb 2023 11:23:49 +0000 (UTC) Received: by mail-wr1-f51.google.com with SMTP id r2so4339425wrv.7 for ; Fri, 03 Feb 2023 03:23:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:from:to :cc:subject:date:message-id:reply-to; bh=vIOzPmIQfpfrIHgLdmsoioJq9/vt9AQ9/SWmvcYBZ+k=; b=XgBs6o3VgmVG855AY/KN5Trje6g0K3PRcPCbi8e+tcssh4EReUkCjvG4PCS9REBE+f LewSppzIQS//FvZIyhJ7tg6ZBp8BEiykp+SqvS9PHKBHQTZk5ZKLUbYvnQdhqcwDArW2 rm7+FlJJnPEb6Q3jgQyap3t2gJiPAsBx1ZmwIfO6xLpFMugKpof8B4DuRq9c4r/MzWBd xByyHCXxYrGOPI+jjQlHJwUdo+sBlulT0I2nClF3j8oJrne++GqZ04v1ha1OrXwNiUQD zXZ9CzjHbEZ9BnoKKASLijiWsxkibxhtXjyEujEt2hfx38wUqQb4F6UjOq5dp2Zq2yOe 1BXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=vIOzPmIQfpfrIHgLdmsoioJq9/vt9AQ9/SWmvcYBZ+k=; b=TJyw50lZpOzcAddOWxJlppQALFT1cuYayxllOorhNQlvngsKUTYfMUB2Ojv2T+8Ol/ LKbyqYbq6HOyLsuSOvMyeLoxnNQhnK+5YF9p480sMELJvs97JjvIr7FjXUsZPq2X/2JZ jfuS9cKAnZk+hKV2+SbpgMBC0OAqVHadwoWsbFgO65QI86Sk2jbbkxaLr+7JUdbYtj0q HC15H0jbyNWjOhrYBzPXcMgYcHe98hylRBqbBj/uF0ymiQmyURxXnshdRrdYvI5U9wMG f4hUctnDqESQWpHLm7g8zzi9Mm6BiwBqGVmdHmQVdiXxxjHGeeRowJjMTWzBeHkUDYPu i5cA== X-Gm-Message-State: AO0yUKXH8kVsreyXHLiZ44W8gVDJLVQ7ZhFn8n1sGxsNBxHa/g4kdGr+ KLpF4UClydKd9Du2BFKkOrf9nA== X-Google-Smtp-Source: AK7set+6jtSiyNHjXsgEaaspWYCwXu/8Ri4A0WklUPwSPWMYVHRHYUrA9ECa3vmacpA++lUMmvcNug== X-Received: by 2002:a5d:64e6:0:b0:2bf:b33b:fb7a with SMTP id g6-20020a5d64e6000000b002bfb33bfb7amr10444689wri.25.1675423427711; Fri, 03 Feb 2023 03:23:47 -0800 (PST) Received: from myrica (054592b0.skybroadband.com. [5.69.146.176]) by smtp.gmail.com with ESMTPSA id e23-20020a5d5957000000b002366e3f1497sm1794207wri.6.2023.02.03.03.23.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Feb 2023 03:23:47 -0800 (PST) Date: Fri, 3 Feb 2023 11:23:43 +0000 From: Jean-Philippe Brucker To: "Chen, Jason CJ" Cc: "Tian, Kevin" , "maz@kernel.org" , "catalin.marinas@arm.com" , "will@kernel.org" , "joro@8bytes.org" , "robin.murphy@arm.com" , "james.morse@arm.com" , "suzuki.poulose@arm.com" , "oliver.upton@linux.dev" , "yuzenghui@huawei.com" , "smostafa@google.com" , "dbrazdil@google.com" , "ryan.roberts@arm.com" , "linux-arm-kernel@lists.infradead.org" , "kvmarm@lists.linux.dev" , "iommu@lists.linux.dev" , "Zhang, Tina" Subject: Re: [RFC PATCH 00/45] KVM: Arm SMMUv3 driver for pKVM Message-ID: References: <20230201125328.2186498-1-jean-philippe@linaro.org> Precedence: bulk X-Mailing-List: kvmarm@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: Hi Jason, On Fri, Feb 03, 2023 at 08:39:41AM +0000, Chen, Jason CJ wrote: > > > > btw some of my colleagues are porting pKVM to Intel platform. I > > > > believe they will post their work shortly and there might require > > > > some common framework in pKVM hypervisor like iommu domain, > > > > hypercalls, etc. like what we have in the host iommu subsystem. CC > > > > them in case of any early thought they want to throw in. 😊 > > > > > > Cool! The hypervisor part contains iommu/iommu.c which deals with > > > hypercalls and domains and doesn't contain anything specific to Arm > > > (it's only in arch/arm64 because that's where pkvm currently sits). It > > > does rely on io-pgtable at the moment which is not used by VT-d but > > > that can be abstracted as well. It's possible however that on Intel an > > > entirely different set of hypercalls will be needed, if a simpler > > > solution such as sharing page tables fits better because VT-d > > > implementations are more homogeneous. > > > > > > > yes depending on the choice on VT-d there could be different degree of the > > sharing possibility. I'll let Jason/Tina comment on their design choice. > > Thanks Kevin bring us here. Current our POC solution for VT-d is based on nested > translation, as there are two level io-pgtable, we keep first-level page table full > controlled by host VM (IOVA -> host_GPA) and second-level page table is managed > by pKVM (host_GPA -> HPA). This solution is simple straight-forward, but pKVM > still need to provide vIOMMU emulation for host (e.g., shadowing root/context/ > pasid tables, emulating IOTLB flush etc.). I dismissed emulating the SMMU early on because it feels too complex compared to an abstracted hypercall interface, but again that may be due to the high variation of configurations of the SMMU. For nesting, you could use some of the interface that Yi Liu and Jacob Pan have been working on [1]. It should be possible with a couple of attach-table and tlb-invalidate hypercalls to avoid emulating the low-level registers and queues. > As I know, SMMU also support nested translation mode, may I know what's the > mode used for pKVM? It doesn't use nested translation because it is optional in the SMMU, and this series tries to support any possible implementation. Since pKVM on arm64 is being used on mobile platforms I suspect that, to save space, some SMMUs might not implement first-level or second-level page tables. Besides, supporting nesting for Arm would still require hypercalls for pinning DMA pages (solution 2). This series populates the second-level tables with the complete IOVA -> PA translation (similarly to how VFIO works at the moment). If an implementation only supports first-level tables, then the hypervisor would own it and put the IOVA -> PA translation in there. Thanks, Jean [1] https://lore.kernel.org/linux-iommu/1570045363-24856-2-git-send-email-jacob.jun.pan@linux.intel.com/ (It's being reworked but I couldn't find a recent link) > > We met similar solution choices whether to share second-level io-pgtable with CPU > pgtable, and finally we also decided to introduce a new pgtable, this increase the > complexity of page state management - as io-pgtable & cpu-pgtable need to align > the page ownership. > > Now our solution is based on vIOMMU emulation in pKVM, enlighten method should > also be an alternative solution. > > Thanks > Jason CJ Chen 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 09DCCC636CC for ; Fri, 3 Feb 2023 11:25:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version: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-Owner; bh=saYEeW1j+aFLx8pR0XYYmZ3Tsia2vjIaRf4ckIiRBm8=; b=XnEwAtYyHwPvd/ 56QWkfHbrwXgaEjTWbF2M/UuTGksr68L+kG/+fm4Eh94MR8NT1BNXiF8/yM6xQWVDFy0KX+QpRGEf XXg/8IV9C73TinOrl8vTjxsr7MZCpiZWeRx+RA3/49KD/Cx3uPAI3IfVnBqzuK/6KREZU/UE0wi5L 3JdDheNoD/fTL7QZJhTsS+6xOaQQAJHwmgJFKOSNo78DjottqACEb5n9+gG50c3lVeVFNue/RRHPt kSTaHYqrqVfquZugNtTID/UcQF4jTBTi2LShbrr5LAkR0CZg2m7mkjXpBzXZgzq2xrZgFuQ3NYyop X/J880QGqF13FJmFL5Bg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1pNuAe-001a14-Ka; Fri, 03 Feb 2023 11:23:56 +0000 Received: from mail-wr1-x42c.google.com ([2a00:1450:4864:20::42c]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1pNuAa-001a0N-83 for linux-arm-kernel@lists.infradead.org; Fri, 03 Feb 2023 11:23:54 +0000 Received: by mail-wr1-x42c.google.com with SMTP id q5so4394049wrv.0 for ; Fri, 03 Feb 2023 03:23:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:from:to :cc:subject:date:message-id:reply-to; bh=vIOzPmIQfpfrIHgLdmsoioJq9/vt9AQ9/SWmvcYBZ+k=; b=XgBs6o3VgmVG855AY/KN5Trje6g0K3PRcPCbi8e+tcssh4EReUkCjvG4PCS9REBE+f LewSppzIQS//FvZIyhJ7tg6ZBp8BEiykp+SqvS9PHKBHQTZk5ZKLUbYvnQdhqcwDArW2 rm7+FlJJnPEb6Q3jgQyap3t2gJiPAsBx1ZmwIfO6xLpFMugKpof8B4DuRq9c4r/MzWBd xByyHCXxYrGOPI+jjQlHJwUdo+sBlulT0I2nClF3j8oJrne++GqZ04v1ha1OrXwNiUQD zXZ9CzjHbEZ9BnoKKASLijiWsxkibxhtXjyEujEt2hfx38wUqQb4F6UjOq5dp2Zq2yOe 1BXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=vIOzPmIQfpfrIHgLdmsoioJq9/vt9AQ9/SWmvcYBZ+k=; b=g2rG5+3lVbOKfC4DY+tQNImU2fNyxvO6MMpRYWMBMvHVtwbdInHGcqhAulIbRrPT97 TSGejK+kdncv0VA8raAHTqygohR5eVhBWBDIDhHlAYhiQ7vOwwR6Ka+BaOq6GIgqyzLp X65RU0UGkDREZDm7Fp6Vo469BCQB0YXLhSFRRLR4kw5j2f1iTWxmvmWSkZYM8lx9j1QY km5yW3veXmNIG5FUr5EsLbgNGHxAggDExAS87nYNwGG3aXYLrTfnIyVKpun5x2vMwrjK 6ZHUUGJDe6BO3qToFRhYg9D3NAn25M3KI02f5QcchP43QBy03wP6FXCI9Th2o19e7aix j2Bw== X-Gm-Message-State: AO0yUKWANnz8XSFy08mKuqa3IZopZulGnJoZwkKxd3hmGPQMhKIRxmdq T9QpXQkxMFefdxap8VOYjAfA2A== X-Google-Smtp-Source: AK7set+6jtSiyNHjXsgEaaspWYCwXu/8Ri4A0WklUPwSPWMYVHRHYUrA9ECa3vmacpA++lUMmvcNug== X-Received: by 2002:a5d:64e6:0:b0:2bf:b33b:fb7a with SMTP id g6-20020a5d64e6000000b002bfb33bfb7amr10444689wri.25.1675423427711; Fri, 03 Feb 2023 03:23:47 -0800 (PST) Received: from myrica (054592b0.skybroadband.com. [5.69.146.176]) by smtp.gmail.com with ESMTPSA id e23-20020a5d5957000000b002366e3f1497sm1794207wri.6.2023.02.03.03.23.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Feb 2023 03:23:47 -0800 (PST) Date: Fri, 3 Feb 2023 11:23:43 +0000 From: Jean-Philippe Brucker To: "Chen, Jason CJ" Cc: "Tian, Kevin" , "maz@kernel.org" , "catalin.marinas@arm.com" , "will@kernel.org" , "joro@8bytes.org" , "robin.murphy@arm.com" , "james.morse@arm.com" , "suzuki.poulose@arm.com" , "oliver.upton@linux.dev" , "yuzenghui@huawei.com" , "smostafa@google.com" , "dbrazdil@google.com" , "ryan.roberts@arm.com" , "linux-arm-kernel@lists.infradead.org" , "kvmarm@lists.linux.dev" , "iommu@lists.linux.dev" , "Zhang, Tina" Subject: Re: [RFC PATCH 00/45] KVM: Arm SMMUv3 driver for pKVM Message-ID: References: <20230201125328.2186498-1-jean-philippe@linaro.org> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230203_032352_323631_ACE847A2 X-CRM114-Status: GOOD ( 31.20 ) 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 SGkgSmFzb24sCgpPbiBGcmksIEZlYiAwMywgMjAyMyBhdCAwODozOTo0MUFNICswMDAwLCBDaGVu LCBKYXNvbiBDSiB3cm90ZToKPiA+ID4gPiBidHcgc29tZSBvZiBteSBjb2xsZWFndWVzIGFyZSBw b3J0aW5nIHBLVk0gdG8gSW50ZWwgcGxhdGZvcm0uIEkKPiA+ID4gPiBiZWxpZXZlIHRoZXkgd2ls bCBwb3N0IHRoZWlyIHdvcmsgc2hvcnRseSBhbmQgdGhlcmUgbWlnaHQgcmVxdWlyZQo+ID4gPiA+ IHNvbWUgY29tbW9uIGZyYW1ld29yayBpbiBwS1ZNIGh5cGVydmlzb3IgbGlrZSBpb21tdSBkb21h aW4sCj4gPiA+ID4gaHlwZXJjYWxscywgZXRjLiBsaWtlIHdoYXQgd2UgaGF2ZSBpbiB0aGUgaG9z dCBpb21tdSBzdWJzeXN0ZW0uIENDCj4gPiA+ID4gdGhlbSBpbiBjYXNlIG9mIGFueSBlYXJseSB0 aG91Z2h0IHRoZXkgd2FudCB0byB0aHJvdyBpbi4g8J+Yigo+ID4gPgo+ID4gPiBDb29sISBUaGUg aHlwZXJ2aXNvciBwYXJ0IGNvbnRhaW5zIGlvbW11L2lvbW11LmMgd2hpY2ggZGVhbHMgd2l0aAo+ ID4gPiBoeXBlcmNhbGxzIGFuZCBkb21haW5zIGFuZCBkb2Vzbid0IGNvbnRhaW4gYW55dGhpbmcg c3BlY2lmaWMgdG8gQXJtCj4gPiA+IChpdCdzIG9ubHkgaW4gYXJjaC9hcm02NCBiZWNhdXNlIHRo YXQncyB3aGVyZSBwa3ZtIGN1cnJlbnRseSBzaXRzKS4gSXQKPiA+ID4gZG9lcyByZWx5IG9uIGlv LXBndGFibGUgYXQgdGhlIG1vbWVudCB3aGljaCBpcyBub3QgdXNlZCBieSBWVC1kIGJ1dAo+ID4g PiB0aGF0IGNhbiBiZSBhYnN0cmFjdGVkIGFzIHdlbGwuIEl0J3MgcG9zc2libGUgaG93ZXZlciB0 aGF0IG9uIEludGVsIGFuCj4gPiA+IGVudGlyZWx5IGRpZmZlcmVudCBzZXQgb2YgaHlwZXJjYWxs cyB3aWxsIGJlIG5lZWRlZCwgaWYgYSBzaW1wbGVyCj4gPiA+IHNvbHV0aW9uIHN1Y2ggYXMgc2hh cmluZyBwYWdlIHRhYmxlcyBmaXRzIGJldHRlciBiZWNhdXNlIFZULWQKPiA+ID4gaW1wbGVtZW50 YXRpb25zIGFyZSBtb3JlIGhvbW9nZW5lb3VzLgo+ID4gPgo+ID4gCj4gPiB5ZXMgZGVwZW5kaW5n IG9uIHRoZSBjaG9pY2Ugb24gVlQtZCB0aGVyZSBjb3VsZCBiZSBkaWZmZXJlbnQgZGVncmVlIG9m IHRoZQo+ID4gc2hhcmluZyBwb3NzaWJpbGl0eS4gSSdsbCBsZXQgSmFzb24vVGluYSBjb21tZW50 IG9uIHRoZWlyIGRlc2lnbiBjaG9pY2UuCj4gCj4gVGhhbmtzIEtldmluIGJyaW5nIHVzIGhlcmUu IEN1cnJlbnQgb3VyIFBPQyBzb2x1dGlvbiBmb3IgVlQtZCBpcyBiYXNlZCBvbiBuZXN0ZWQKPiB0 cmFuc2xhdGlvbiwgYXMgdGhlcmUgYXJlIHR3byBsZXZlbCBpby1wZ3RhYmxlLCB3ZSBrZWVwIGZp cnN0LWxldmVsIHBhZ2UgdGFibGUgZnVsbCAKPiBjb250cm9sbGVkIGJ5IGhvc3QgVk0gKElPVkEg LT4gaG9zdF9HUEEpIGFuZCBzZWNvbmQtbGV2ZWwgcGFnZSB0YWJsZSBpcyBtYW5hZ2VkIAo+IGJ5 IHBLVk0gKGhvc3RfR1BBIC0+IEhQQSkuIFRoaXMgc29sdXRpb24gaXMgc2ltcGxlIHN0cmFpZ2h0 LWZvcndhcmQsIGJ1dCBwS1ZNIAo+IHN0aWxsIG5lZWQgdG8gcHJvdmlkZSB2SU9NTVUgZW11bGF0 aW9uIGZvciBob3N0IChlLmcuLCBzaGFkb3dpbmcgcm9vdC9jb250ZXh0Lwo+IHBhc2lkIHRhYmxl cywgIGVtdWxhdGluZyBJT1RMQiBmbHVzaCBldGMuKS4gCgpJIGRpc21pc3NlZCBlbXVsYXRpbmcg dGhlIFNNTVUgZWFybHkgb24gYmVjYXVzZSBpdCBmZWVscyB0b28gY29tcGxleApjb21wYXJlZCB0 byBhbiBhYnN0cmFjdGVkIGh5cGVyY2FsbCBpbnRlcmZhY2UsIGJ1dCBhZ2FpbiB0aGF0IG1heSBi ZSBkdWUKdG8gdGhlIGhpZ2ggdmFyaWF0aW9uIG9mIGNvbmZpZ3VyYXRpb25zIG9mIHRoZSBTTU1V LiBGb3IgbmVzdGluZywgeW91CmNvdWxkIHVzZSBzb21lIG9mIHRoZSBpbnRlcmZhY2UgdGhhdCBZ aSBMaXUgYW5kIEphY29iIFBhbiBoYXZlIGJlZW4Kd29ya2luZyBvbiBbMV0uIEl0IHNob3VsZCBi ZSBwb3NzaWJsZSB3aXRoIGEgY291cGxlIG9mIGF0dGFjaC10YWJsZSBhbmQKdGxiLWludmFsaWRh dGUgaHlwZXJjYWxscyB0byBhdm9pZCBlbXVsYXRpbmcgdGhlIGxvdy1sZXZlbCByZWdpc3RlcnMg YW5kCnF1ZXVlcy4KIAo+IEFzIEkga25vdywgU01NVSBhbHNvIHN1cHBvcnQgbmVzdGVkIHRyYW5z bGF0aW9uIG1vZGUsIG1heSBJIGtub3cgd2hhdCdzIHRoZSAKPiBtb2RlIHVzZWQgZm9yIHBLVk0/ CgpJdCBkb2Vzbid0IHVzZSBuZXN0ZWQgdHJhbnNsYXRpb24gYmVjYXVzZSBpdCBpcyBvcHRpb25h bCBpbiB0aGUgU01NVSwgYW5kCnRoaXMgc2VyaWVzIHRyaWVzIHRvIHN1cHBvcnQgYW55IHBvc3Np YmxlIGltcGxlbWVudGF0aW9uLiBTaW5jZSBwS1ZNIG9uCmFybTY0IGlzIGJlaW5nIHVzZWQgb24g bW9iaWxlIHBsYXRmb3JtcyBJIHN1c3BlY3QgdGhhdCwgdG8gc2F2ZSBzcGFjZSwKc29tZSBTTU1V cyBtaWdodCBub3QgaW1wbGVtZW50IGZpcnN0LWxldmVsIG9yIHNlY29uZC1sZXZlbCBwYWdlIHRh Ymxlcy4KQmVzaWRlcywgc3VwcG9ydGluZyBuZXN0aW5nIGZvciBBcm0gd291bGQgc3RpbGwgcmVx dWlyZSBoeXBlcmNhbGxzIGZvcgpwaW5uaW5nIERNQSBwYWdlcyAoc29sdXRpb24gMikuCgpUaGlz IHNlcmllcyBwb3B1bGF0ZXMgdGhlIHNlY29uZC1sZXZlbCB0YWJsZXMgd2l0aCB0aGUgY29tcGxl dGUgSU9WQSAtPiBQQQp0cmFuc2xhdGlvbiAoc2ltaWxhcmx5IHRvIGhvdyBWRklPIHdvcmtzIGF0 IHRoZSBtb21lbnQpLiBJZiBhbgppbXBsZW1lbnRhdGlvbiBvbmx5IHN1cHBvcnRzIGZpcnN0LWxl dmVsIHRhYmxlcywgdGhlbiB0aGUgaHlwZXJ2aXNvciB3b3VsZApvd24gaXQgYW5kIHB1dCB0aGUg SU9WQSAtPiBQQSB0cmFuc2xhdGlvbiBpbiB0aGVyZS4KClRoYW5rcywKSmVhbgoKWzFdIGh0dHBz Oi8vbG9yZS5rZXJuZWwub3JnL2xpbnV4LWlvbW11LzE1NzAwNDUzNjMtMjQ4NTYtMi1naXQtc2Vu ZC1lbWFpbC1qYWNvYi5qdW4ucGFuQGxpbnV4LmludGVsLmNvbS8KICAgIChJdCdzIGJlaW5nIHJl d29ya2VkIGJ1dCBJIGNvdWxkbid0IGZpbmQgYSByZWNlbnQgbGluaykKCj4gCj4gV2UgbWV0IHNp bWlsYXIgc29sdXRpb24gY2hvaWNlcyB3aGV0aGVyIHRvIHNoYXJlIHNlY29uZC1sZXZlbCBpby1w Z3RhYmxlIHdpdGggQ1BVCj4gcGd0YWJsZSwgIGFuZCBmaW5hbGx5IHdlIGFsc28gZGVjaWRlZCB0 byBpbnRyb2R1Y2UgYSBuZXcgcGd0YWJsZSwgdGhpcyBpbmNyZWFzZSB0aGUKPiBjb21wbGV4aXR5 IG9mIHBhZ2Ugc3RhdGUgbWFuYWdlbWVudCAtIGFzIGlvLXBndGFibGUgJiBjcHUtcGd0YWJsZSBu ZWVkIHRvIGFsaWduCj4gdGhlIHBhZ2Ugb3duZXJzaGlwLgo+IAo+IE5vdyBvdXIgc29sdXRpb24g aXMgYmFzZWQgb24gdklPTU1VIGVtdWxhdGlvbiBpbiBwS1ZNLCBlbmxpZ2h0ZW4gbWV0aG9kIHNo b3VsZAo+IGFsc28gYmUgYW4gYWx0ZXJuYXRpdmUgc29sdXRpb24uCj4gCj4gVGhhbmtzCj4gSmFz b24gQ0ogQ2hlbgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMu aW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2xpbnV4LWFybS1rZXJuZWwK