From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 9C84927EDD for ; Tue, 24 Oct 2023 17:25:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="lkoKW8J+" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 20A85C433C8; Tue, 24 Oct 2023 17:25:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1698168337; bh=SnWhqOBzSfdQFKc2+NrPePJmpUyCSWtBX0wZvzDayBE=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=lkoKW8J+yBAbVUuHRsznJ7NJUM0vyd3HTPdO9NHQRh2oS1BQLKS266jIaCrBIuWPa 8cemPvRda423dU7M/m3jkZ/SuM9BY/SxBv00jxHMO94kuQ5EW48ZyIM3pQgvgqjpj6 Mff08eWSBDXdOsEprA4vs1GcEE50Wt7z+X5P1kFSOyyC7RnuWK9KAQy4isGA6Cg/ZY FJKlLGR4OrtDCKSPsd9+aVTMgLJCxRIc0mOx33qvgeo/Zb857HspXgzZbSADS3Ug/W fZFzCQ+EbqIT/maTBWpgnayzsUqczNYIEBuztSC10nVjCZyYC5jPDgl0XmNpD/jKzs Sg90Q7QBHdsLA== Received: from sofa.misterjones.org ([185.219.108.64] helo=goblin-girl.misterjones.org) by disco-boy.misterjones.org with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.95) (envelope-from ) id 1qvL9q-007Iu3-9e; Tue, 24 Oct 2023 18:25:34 +0100 Date: Tue, 24 Oct 2023 18:25:33 +0100 Message-ID: <86jzrc3pbm.wl-maz@kernel.org> From: Marc Zyngier To: Miguel Luis Cc: "kvmarm@lists.linux.dev" , "kvm@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , Eric Auger , Oliver Upton , James Morse , Suzuki K Poulose , Zenghui Yu Subject: Re: [PATCH 5/5] KVM: arm64: Handle AArch32 SPSR_{irq,abt,und,fiq} as RAZ/WI In-Reply-To: <7DD05DC0-164E-440F-BEB1-E5040C512008@oracle.com> References: <20231023095444.1587322-1-maz@kernel.org> <20231023095444.1587322-6-maz@kernel.org> <7DD05DC0-164E-440F-BEB1-E5040C512008@oracle.com> User-Agent: Wanderlust/2.15.9 (Almost Unreal) SEMI-EPG/1.14.7 (Harue) FLIM-LB/1.14.9 (=?UTF-8?B?R29qxY0=?=) APEL-LB/10.8 EasyPG/1.0.0 Emacs/29.1 (aarch64-unknown-linux-gnu) MULE/6.0 (HANACHIRUSATO) Precedence: bulk X-Mailing-List: kvmarm@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 185.219.108.64 X-SA-Exim-Rcpt-To: miguel.luis@oracle.com, kvmarm@lists.linux.dev, kvm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, eric.auger@redhat.com, oliver.upton@linux.dev, james.morse@arm.com, suzuki.poulose@arm.com, yuzenghui@huawei.com X-SA-Exim-Mail-From: maz@kernel.org X-SA-Exim-Scanned: No (on disco-boy.misterjones.org); SAEximRunCond expanded to false On Mon, 23 Oct 2023 19:55:10 +0100, Miguel Luis wrote: >=20 > Hi Marc, >=20 > > On 23 Oct 2023, at 09:54, Marc Zyngier wrote: > >=20 > > When trapping accesses from a NV guest that tries to access > > SPSR_{irq,abt,und,fiq}, make sure we handle them as RAZ/WI, > > as if AArch32 wasn't implemented. > >=20 > > This involves a bit of repainting to make the visibility > > handler more generic. > >=20 > > Signed-off-by: Marc Zyngier > > --- > > arch/arm64/include/asm/sysreg.h | 4 ++++ > > arch/arm64/kvm/sys_regs.c | 16 +++++++++++++--- > > 2 files changed, 17 insertions(+), 3 deletions(-) > >=20 > > diff --git a/arch/arm64/include/asm/sysreg.h b/arch/arm64/include/asm/s= ysreg.h > > index 4a20a7dc5bc4..5e65f51c10d2 100644 > > --- a/arch/arm64/include/asm/sysreg.h > > +++ b/arch/arm64/include/asm/sysreg.h > > @@ -505,6 +505,10 @@ > > #define SYS_SPSR_EL2 sys_reg(3, 4, 4, 0, 0) > > #define SYS_ELR_EL2 sys_reg(3, 4, 4, 0, 1) > > #define SYS_SP_EL1 sys_reg(3, 4, 4, 1, 0) > > +#define SYS_SPSR_irq sys_reg(3, 4, 4, 3, 0) > > +#define SYS_SPSR_abt sys_reg(3, 4, 4, 3, 1) > > +#define SYS_SPSR_und sys_reg(3, 4, 4, 3, 2) > > +#define SYS_SPSR_fiq sys_reg(3, 4, 4, 3, 3) > > #define SYS_IFSR32_EL2 sys_reg(3, 4, 5, 0, 1) > > #define SYS_AFSR0_EL2 sys_reg(3, 4, 5, 1, 0) > > #define SYS_AFSR1_EL2 sys_reg(3, 4, 5, 1, 1) > > diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c > > index 0071ccccaf00..be1ebd2c5ba0 100644 > > --- a/arch/arm64/kvm/sys_regs.c > > +++ b/arch/arm64/kvm/sys_regs.c > > @@ -1791,8 +1791,8 @@ static unsigned int el2_visibility(const struct k= vm_vcpu *vcpu, > > * HCR_EL2.E2H=3D=3D1, and only in the sysreg table for convenience of > > * handling traps. Given that, they are always hidden from userspace. > > */ > > -static unsigned int elx2_visibility(const struct kvm_vcpu *vcpu, > > - const struct sys_reg_desc *rd) > > +static unsigned int hidden_user_visibility(const struct kvm_vcpu *vcpu, > > + const struct sys_reg_desc *rd) > > { > > return REG_HIDDEN_USER; > > } > > @@ -1803,7 +1803,7 @@ static unsigned int elx2_visibility(const struct = kvm_vcpu *vcpu, > > .reset =3D rst, \ > > .reg =3D name##_EL1, \ > > .val =3D v, \ > > - .visibility =3D elx2_visibility, \ > > + .visibility =3D hidden_user_visibility, \ > > } > >=20 > > /* > > @@ -2387,6 +2387,16 @@ static const struct sys_reg_desc sys_reg_descs[]= =3D { > > EL2_REG(ELR_EL2, access_rw, reset_val, 0), > > { SYS_DESC(SYS_SP_EL1), access_sp_el1}, > >=20 > > + /* AArch32 SPSR_* are RES0 if trapped from a NV guest */ > > + { SYS_DESC(SYS_SPSR_irq), .access =3D trap_raz_wi, > > + .visibility =3D hidden_user_visibility }, > > + { SYS_DESC(SYS_SPSR_abt), .access =3D trap_raz_wi, > > + .visibility =3D hidden_user_visibility }, > > + { SYS_DESC(SYS_SPSR_und), .access =3D trap_raz_wi, > > + .visibility =3D hidden_user_visibility }, > > + { SYS_DESC(SYS_SPSR_fiq), .access =3D trap_raz_wi, > > + .visibility =3D hidden_user_visibility }, > > + >=20 > I=E2=80=99m trying to understand this patch and its surroundings. >=20 > Those SPSR_* registers UNDEF at EL0. I do not understand > why use REG_HIDDEN_USER instead of REG_HIDDEN. USER here means host userspace, not guest EL0. That's because the various SPSR_* registers are already visible from userspace as KVM_REG_ARM_CORE_REG(spsr[KVM_SPSR_*]), and the above entries are solely for the purpose of handling a trap (and thus must not be exposed in the list of available sysregs). This is similar to what we are doing for the ELx2 registers, which are already exposed as EL0/EL1 registers. > Also, could you please explain what is happening at PSTATE.EL =3D=3D EL1 > and if EL2Enabled() && HCR_EL2.NV =3D=3D =E2=80=981=E2=80=99 ? We directly take the trap and not forward it. This isn't exactly the letter of the architecture, but at the same time, treating these registers as RAZ/WI is the only valid implementation. I don't immediately see a problem with taking this shortcut. M. --=20 Without deviation from the norm, progress is not possible. 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 1E5DDC00A8F for ; Tue, 24 Oct 2023 17:26:15 +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: Subject:Cc:To:From:Message-ID:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=glkeOdtDHEesbjt8SluCP0OH16l6YrTBedUQBfH32Nc=; b=YHcBri4no5XTov t7C7ncp4D81eJOhcbou4zaoL+BXsg+KkC8qWCcyovjRveAR3GlIP219HfPA7hW93PTWuQBOw4ismN mfFCWLSJ9X6S8i8mcHgIpgMDXSfSK4b89L9mpFYUeVcGAB2EmWfowMRF7tHBC0yzLys7HNzf8RDJM g8aqmGLtbuwyqycolj7yO9ctc5Tw70oeLiqrHEfxX7dLAprzjv4oXqJixQCbjjZqOL56pl+enOmaS Y47wiiQfm3TFR6ZuMhzzUGu1NszGz5VdXEoGcRZtrQ0Nwu5vH+j34/BkAUL6EN/NwoKVvmLdC9xXx iLLgbhbjKSu4dOkGpvkg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qvLA2-00AaoB-1e; Tue, 24 Oct 2023 17:25:46 +0000 Received: from sin.source.kernel.org ([2604:1380:40e1:4800::1]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qvL9x-00AanM-31 for linux-arm-kernel@lists.infradead.org; Tue, 24 Oct 2023 17:25:43 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sin.source.kernel.org (Postfix) with ESMTP id DFF91CE2442; Tue, 24 Oct 2023 17:25:37 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 20A85C433C8; Tue, 24 Oct 2023 17:25:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1698168337; bh=SnWhqOBzSfdQFKc2+NrPePJmpUyCSWtBX0wZvzDayBE=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=lkoKW8J+yBAbVUuHRsznJ7NJUM0vyd3HTPdO9NHQRh2oS1BQLKS266jIaCrBIuWPa 8cemPvRda423dU7M/m3jkZ/SuM9BY/SxBv00jxHMO94kuQ5EW48ZyIM3pQgvgqjpj6 Mff08eWSBDXdOsEprA4vs1GcEE50Wt7z+X5P1kFSOyyC7RnuWK9KAQy4isGA6Cg/ZY FJKlLGR4OrtDCKSPsd9+aVTMgLJCxRIc0mOx33qvgeo/Zb857HspXgzZbSADS3Ug/W fZFzCQ+EbqIT/maTBWpgnayzsUqczNYIEBuztSC10nVjCZyYC5jPDgl0XmNpD/jKzs Sg90Q7QBHdsLA== Received: from sofa.misterjones.org ([185.219.108.64] helo=goblin-girl.misterjones.org) by disco-boy.misterjones.org with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.95) (envelope-from ) id 1qvL9q-007Iu3-9e; Tue, 24 Oct 2023 18:25:34 +0100 Date: Tue, 24 Oct 2023 18:25:33 +0100 Message-ID: <86jzrc3pbm.wl-maz@kernel.org> From: Marc Zyngier To: Miguel Luis Cc: "kvmarm@lists.linux.dev" , "kvm@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , Eric Auger , Oliver Upton , James Morse , Suzuki K Poulose , Zenghui Yu Subject: Re: [PATCH 5/5] KVM: arm64: Handle AArch32 SPSR_{irq,abt,und,fiq} as RAZ/WI In-Reply-To: <7DD05DC0-164E-440F-BEB1-E5040C512008@oracle.com> References: <20231023095444.1587322-1-maz@kernel.org> <20231023095444.1587322-6-maz@kernel.org> <7DD05DC0-164E-440F-BEB1-E5040C512008@oracle.com> User-Agent: Wanderlust/2.15.9 (Almost Unreal) SEMI-EPG/1.14.7 (Harue) FLIM-LB/1.14.9 (=?UTF-8?B?R29qxY0=?=) APEL-LB/10.8 EasyPG/1.0.0 Emacs/29.1 (aarch64-unknown-linux-gnu) MULE/6.0 (HANACHIRUSATO) MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") X-SA-Exim-Connect-IP: 185.219.108.64 X-SA-Exim-Rcpt-To: miguel.luis@oracle.com, kvmarm@lists.linux.dev, kvm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, eric.auger@redhat.com, oliver.upton@linux.dev, james.morse@arm.com, suzuki.poulose@arm.com, yuzenghui@huawei.com X-SA-Exim-Mail-From: maz@kernel.org X-SA-Exim-Scanned: No (on disco-boy.misterjones.org); SAEximRunCond expanded to false X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231024_102542_325787_0F5FFFA5 X-CRM114-Status: GOOD ( 29.94 ) 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 T24gTW9uLCAyMyBPY3QgMjAyMyAxOTo1NToxMCArMDEwMCwKTWlndWVsIEx1aXMgPG1pZ3VlbC5s dWlzQG9yYWNsZS5jb20+IHdyb3RlOgo+IAo+IEhpIE1hcmMsCj4gCj4gPiBPbiAyMyBPY3QgMjAy MywgYXQgMDk6NTQsIE1hcmMgWnluZ2llciA8bWF6QGtlcm5lbC5vcmc+IHdyb3RlOgo+ID4gCj4g PiBXaGVuIHRyYXBwaW5nIGFjY2Vzc2VzIGZyb20gYSBOViBndWVzdCB0aGF0IHRyaWVzIHRvIGFj Y2Vzcwo+ID4gU1BTUl97aXJxLGFidCx1bmQsZmlxfSwgbWFrZSBzdXJlIHdlIGhhbmRsZSB0aGVt IGFzIFJBWi9XSSwKPiA+IGFzIGlmIEFBcmNoMzIgd2Fzbid0IGltcGxlbWVudGVkLgo+ID4gCj4g PiBUaGlzIGludm9sdmVzIGEgYml0IG9mIHJlcGFpbnRpbmcgdG8gbWFrZSB0aGUgdmlzaWJpbGl0 eQo+ID4gaGFuZGxlciBtb3JlIGdlbmVyaWMuCj4gPiAKPiA+IFNpZ25lZC1vZmYtYnk6IE1hcmMg WnluZ2llciA8bWF6QGtlcm5lbC5vcmc+Cj4gPiAtLS0KPiA+IGFyY2gvYXJtNjQvaW5jbHVkZS9h c20vc3lzcmVnLmggfCAgNCArKysrCj4gPiBhcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jICAgICAg IHwgMTYgKysrKysrKysrKysrKy0tLQo+ID4gMiBmaWxlcyBjaGFuZ2VkLCAxNyBpbnNlcnRpb25z KCspLCAzIGRlbGV0aW9ucygtKQo+ID4gCj4gPiBkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNs dWRlL2FzbS9zeXNyZWcuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3lzcmVnLmgKPiA+IGlu ZGV4IDRhMjBhN2RjNWJjNC4uNWU2NWY1MWMxMGQyIDEwMDY0NAo+ID4gLS0tIGEvYXJjaC9hcm02 NC9pbmNsdWRlL2FzbS9zeXNyZWcuaAo+ID4gKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9z eXNyZWcuaAo+ID4gQEAgLTUwNSw2ICs1MDUsMTAgQEAKPiA+ICNkZWZpbmUgU1lTX1NQU1JfRUwy IHN5c19yZWcoMywgNCwgNCwgMCwgMCkKPiA+ICNkZWZpbmUgU1lTX0VMUl9FTDIgc3lzX3JlZygz LCA0LCA0LCAwLCAxKQo+ID4gI2RlZmluZSBTWVNfU1BfRUwxIHN5c19yZWcoMywgNCwgNCwgMSwg MCkKPiA+ICsjZGVmaW5lIFNZU19TUFNSX2lycSBzeXNfcmVnKDMsIDQsIDQsIDMsIDApCj4gPiAr I2RlZmluZSBTWVNfU1BTUl9hYnQgc3lzX3JlZygzLCA0LCA0LCAzLCAxKQo+ID4gKyNkZWZpbmUg U1lTX1NQU1JfdW5kIHN5c19yZWcoMywgNCwgNCwgMywgMikKPiA+ICsjZGVmaW5lIFNZU19TUFNS X2ZpcSBzeXNfcmVnKDMsIDQsIDQsIDMsIDMpCj4gPiAjZGVmaW5lIFNZU19JRlNSMzJfRUwyIHN5 c19yZWcoMywgNCwgNSwgMCwgMSkKPiA+ICNkZWZpbmUgU1lTX0FGU1IwX0VMMiBzeXNfcmVnKDMs IDQsIDUsIDEsIDApCj4gPiAjZGVmaW5lIFNZU19BRlNSMV9FTDIgc3lzX3JlZygzLCA0LCA1LCAx LCAxKQo+ID4gZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMgYi9hcmNoL2Fy bTY0L2t2bS9zeXNfcmVncy5jCj4gPiBpbmRleCAwMDcxY2NjY2FmMDAuLmJlMWViZDJjNWJhMCAx MDA2NDQKPiA+IC0tLSBhL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMKPiA+ICsrKyBiL2FyY2gv YXJtNjQva3ZtL3N5c19yZWdzLmMKPiA+IEBAIC0xNzkxLDggKzE3OTEsOCBAQCBzdGF0aWMgdW5z aWduZWQgaW50IGVsMl92aXNpYmlsaXR5KGNvbnN0IHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKPiA+ ICAqIEhDUl9FTDIuRTJIPT0xLCBhbmQgb25seSBpbiB0aGUgc3lzcmVnIHRhYmxlIGZvciBjb252 ZW5pZW5jZSBvZgo+ID4gICogaGFuZGxpbmcgdHJhcHMuIEdpdmVuIHRoYXQsIHRoZXkgYXJlIGFs d2F5cyBoaWRkZW4gZnJvbSB1c2Vyc3BhY2UuCj4gPiAgKi8KPiA+IC1zdGF0aWMgdW5zaWduZWQg aW50IGVseDJfdmlzaWJpbGl0eShjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCj4gPiAtICAg IGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnJkKQo+ID4gK3N0YXRpYyB1bnNpZ25lZCBpbnQg aGlkZGVuX3VzZXJfdmlzaWJpbGl0eShjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCj4gPiAr ICAgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcmQpCj4gPiB7Cj4gPiByZXR1cm4gUkVHX0hJ RERFTl9VU0VSOwo+ID4gfQo+ID4gQEAgLTE4MDMsNyArMTgwMyw3IEBAIHN0YXRpYyB1bnNpZ25l ZCBpbnQgZWx4Ml92aXNpYmlsaXR5KGNvbnN0IHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKPiA+IC5y ZXNldCA9IHJzdCwgXAo+ID4gLnJlZyA9IG5hbWUjI19FTDEsIFwKPiA+IC52YWwgPSB2LCBcCj4g PiAtIC52aXNpYmlsaXR5ID0gZWx4Ml92aXNpYmlsaXR5LCBcCj4gPiArIC52aXNpYmlsaXR5ID0g aGlkZGVuX3VzZXJfdmlzaWJpbGl0eSwgXAo+ID4gfQo+ID4gCj4gPiAvKgo+ID4gQEAgLTIzODcs NiArMjM4NywxNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyBzeXNfcmVnX2Rl c2NzW10gPSB7Cj4gPiBFTDJfUkVHKEVMUl9FTDIsIGFjY2Vzc19ydywgcmVzZXRfdmFsLCAwKSwK PiA+IHsgU1lTX0RFU0MoU1lTX1NQX0VMMSksIGFjY2Vzc19zcF9lbDF9LAo+ID4gCj4gPiArIC8q IEFBcmNoMzIgU1BTUl8qIGFyZSBSRVMwIGlmIHRyYXBwZWQgZnJvbSBhIE5WIGd1ZXN0ICovCj4g PiArIHsgU1lTX0RFU0MoU1lTX1NQU1JfaXJxKSwgLmFjY2VzcyA9IHRyYXBfcmF6X3dpLAo+ID4g KyAgLnZpc2liaWxpdHkgPSBoaWRkZW5fdXNlcl92aXNpYmlsaXR5IH0sCj4gPiArIHsgU1lTX0RF U0MoU1lTX1NQU1JfYWJ0KSwgLmFjY2VzcyA9IHRyYXBfcmF6X3dpLAo+ID4gKyAgLnZpc2liaWxp dHkgPSBoaWRkZW5fdXNlcl92aXNpYmlsaXR5IH0sCj4gPiArIHsgU1lTX0RFU0MoU1lTX1NQU1Jf dW5kKSwgLmFjY2VzcyA9IHRyYXBfcmF6X3dpLAo+ID4gKyAgLnZpc2liaWxpdHkgPSBoaWRkZW5f dXNlcl92aXNpYmlsaXR5IH0sCj4gPiArIHsgU1lTX0RFU0MoU1lTX1NQU1JfZmlxKSwgLmFjY2Vz cyA9IHRyYXBfcmF6X3dpLAo+ID4gKyAgLnZpc2liaWxpdHkgPSBoaWRkZW5fdXNlcl92aXNpYmls aXR5IH0sCj4gPiArCj4gCj4gSeKAmW0gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXRjaCBh bmQgaXRzIHN1cnJvdW5kaW5ncy4KPiAKPiBUaG9zZSBTUFNSXyogcmVnaXN0ZXJzIFVOREVGIGF0 IEVMMC4gSSBkbyBub3QgdW5kZXJzdGFuZAo+IHdoeSB1c2UgUkVHX0hJRERFTl9VU0VSIGluc3Rl YWQgb2YgUkVHX0hJRERFTi4KClVTRVIgaGVyZSBtZWFucyBob3N0IHVzZXJzcGFjZSwgbm90IGd1 ZXN0IEVMMC4gVGhhdCdzIGJlY2F1c2UgdGhlCnZhcmlvdXMgU1BTUl8qIHJlZ2lzdGVycyBhcmUg YWxyZWFkeSB2aXNpYmxlIGZyb20gdXNlcnNwYWNlIGFzCktWTV9SRUdfQVJNX0NPUkVfUkVHKHNw c3JbS1ZNX1NQU1JfKl0pLCBhbmQgdGhlIGFib3ZlIGVudHJpZXMgYXJlCnNvbGVseSBmb3IgdGhl IHB1cnBvc2Ugb2YgaGFuZGxpbmcgYSB0cmFwIChhbmQgdGh1cyBtdXN0IG5vdCBiZQpleHBvc2Vk IGluIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBzeXNyZWdzKS4KClRoaXMgaXMgc2ltaWxhciB0byB3 aGF0IHdlIGFyZSBkb2luZyBmb3IgdGhlIEVMeDIgcmVnaXN0ZXJzLCB3aGljaCBhcmUKYWxyZWFk eSBleHBvc2VkIGFzIEVMMC9FTDEgcmVnaXN0ZXJzLgoKPiBBbHNvLCBjb3VsZCB5b3UgcGxlYXNl IGV4cGxhaW4gd2hhdCBpcyBoYXBwZW5pbmcgYXQgUFNUQVRFLkVMID09IEVMMQo+IGFuZCBpZiBF TDJFbmFibGVkKCkgJiYgSENSX0VMMi5OViA9PSDigJgx4oCZICA/CgpXZSBkaXJlY3RseSB0YWtl IHRoZSB0cmFwIGFuZCBub3QgZm9yd2FyZCBpdC4gVGhpcyBpc24ndCBleGFjdGx5IHRoZQpsZXR0 ZXIgb2YgdGhlIGFyY2hpdGVjdHVyZSwgYnV0IGF0IHRoZSBzYW1lIHRpbWUsIHRyZWF0aW5nIHRo ZXNlCnJlZ2lzdGVycyBhcyBSQVovV0kgaXMgdGhlIG9ubHkgdmFsaWQgaW1wbGVtZW50YXRpb24u IEkgZG9uJ3QKaW1tZWRpYXRlbHkgc2VlIGEgcHJvYmxlbSB3aXRoIHRha2luZyB0aGlzIHNob3J0 Y3V0LgoKCU0uCgotLSAKV2l0aG91dCBkZXZpYXRpb24gZnJvbSB0aGUgbm9ybSwgcHJvZ3Jlc3Mg aXMgbm90IHBvc3NpYmxlLgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBs aXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlz dGluZm8vbGludXgtYXJtLWtlcm5lbAo=