From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (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 97C3CD2F1 for ; Thu, 17 Aug 2023 08:17:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1692260225; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=QOolyAIrKdePCuvcf3d2mbyCsBtqXn7nucEha9KLm/Y=; b=LnMgo9cpTDMhmzBmW5ktXv7EfYNwWvcUHhSdhK4WfY55IdH4tVkewjiMrmKOMXxqA6hOJ6 eFaURtJZF0G1dN4v3v9/TY4sZC8SLbAyXLyhswpfZA8GkJClj8PTou7aEPlSgSwW5EBHzU UPN1ynZioHXJpfjLg2Sbt65rKz7p0yY= Received: from mimecast-mx02.redhat.com (66.187.233.73 [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-266-rtujf1jXPdWVOplIqO1E_A-1; Thu, 17 Aug 2023 04:17:01 -0400 X-MC-Unique: rtujf1jXPdWVOplIqO1E_A-1 Received: from smtp.corp.redhat.com (int-mx09.intmail.prod.int.rdu2.redhat.com [10.11.54.9]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id D18261C06EE0; Thu, 17 Aug 2023 08:16:59 +0000 (UTC) Received: from localhost (unknown [10.39.193.36]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 44BB7492C14; Thu, 17 Aug 2023 08:16:59 +0000 (UTC) From: Cornelia Huck To: Jing Zhang Cc: KVM , KVMARM , ARMLinux , Marc Zyngier , Oliver Upton , Will Deacon , Paolo Bonzini , James Morse , Alexandru Elisei , Suzuki K Poulose , Fuad Tabba , Reiji Watanabe , Raghavendra Rao Ananta , Suraj Jitindar Singh Subject: Re: [PATCH v8 02/11] KVM: arm64: Document KVM_ARM_GET_REG_WRITABLE_MASKS In-Reply-To: Organization: "Red Hat GmbH, Sitz: Werner-von-Siemens-Ring 12, D-85630 Grasbrunn, Handelsregister: Amtsgericht =?utf-8?Q?M=C3=BCnchen=2C?= HRB 153243, =?utf-8?Q?Gesch=C3=A4ftsf=C3=BChrer=3A?= Ryan Barnhart, Charles Cachera, Michael O'Neill, Amy Ross" References: <20230807162210.2528230-1-jingzhangos@google.com> <20230807162210.2528230-3-jingzhangos@google.com> <878raex8g0.fsf@redhat.com> User-Agent: Notmuch/0.37 (https://notmuchmail.org) Date: Thu, 17 Aug 2023 10:16:56 +0200 Message-ID: <874jkyqe13.fsf@redhat.com> 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-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.1 on 10.11.54.9 On Mon, Aug 14 2023, Jing Zhang wrote: > On Mon, Aug 14, 2023 at 2:46=E2=80=AFAM Cornelia Huck = wrote: >> >> On Mon, Aug 07 2023, Jing Zhang wrote: >> >> > Add some basic documentation on how to get feature ID register writable >> > masks from userspace. >> > >> > Signed-off-by: Jing Zhang >> > --- >> > Documentation/virt/kvm/api.rst | 29 +++++++++++++++++++++++++++++ >> > 1 file changed, 29 insertions(+) >> > >> > diff --git a/Documentation/virt/kvm/api.rst b/Documentation/virt/kvm/a= pi.rst >> > index c0ddd3035462..92a9b20f970e 100644 >> > --- a/Documentation/virt/kvm/api.rst >> > +++ b/Documentation/virt/kvm/api.rst >> > @@ -6068,6 +6068,35 @@ writes to the CNTVCT_EL0 and CNTPCT_EL0 registe= rs using the SET_ONE_REG >> > interface. No error will be returned, but the resulting offset will n= ot be >> > applied. >> > >> > +4.139 KVM_ARM_GET_REG_WRITABLE_MASKS >> > +------------------------------------------- >> > + >> > +:Capability: none >> > +:Architectures: arm64 >> > +:Type: vm ioctl >> > +:Parameters: struct reg_mask_range (in/out) >> > +:Returns: 0 on success, < 0 on error >> > + >> > + >> > +:: >> > + >> > + #define ARM64_FEATURE_ID_SPACE_SIZE (3 * 8 * 8) >> > + >> > + struct reg_mask_range { >> > + __u64 addr; /* Pointer to mask array */ >> > + __u64 reserved[7]; >> > + }; >> > + >> > +This ioctl would copy the writable masks for feature ID registers to = userspace. >> > +The Feature ID space is defined as the System register space in AArch= 64 with >> > +op0=3D=3D3, op1=3D=3D{0, 1, 3}, CRn=3D=3D0, CRm=3D=3D{0-7}, op2=3D=3D= {0-7}. >> > +To get the index in the mask array pointed by ``addr`` for a specifie= d feature >> > +ID register, use the macro ``ARM64_FEATURE_ID_SPACE_IDX(op0, op1, crn= , crm, op2)``. >> > +This allows the userspace to know upfront whether it can actually twe= ak the >> > +contents of a feature ID register or not. >> > +The ``reserved[7]`` is reserved for future use to add other register = space. For >> > +feature ID registers, it should be 0, otherwise, KVM may return error. >> >> In case of future extensions, this means that userspace needs to figure >> out what the kernel supports via different content in reg_mask_range >> (i.e. try with a value in one of the currently reserved fields and fall >> back to using addr only if that doesn't work.) Can we do better? >> >> Maybe we could introduce a capability that returns the supported ranges >> as flags, i.e. now we would return 1 for id regs masks, and for the >> future case where we have some values in the next reserved field we >> could return 1 & 2 etc. Would make life easier for userspace that needs >> to work with different kernels, but might be overkill if reserved[] is >> more like an insurance without any concrete plans for extensions. >> > > Maybe it'd be better to leave this to whenever we do need to add other > range support? My point is: How does userspace figure out if the kernel that is running supports ranges other than id regs? If this is just an insurance against changes that might arrive or not, we can live with the awkward "just try it out" approach; if we think it's likely that we'll need to extend it, we need to add the mechanism for userspace to find out about it now, or it would need to probe for presence of the mechanism... 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 0F511EB64DD for ; Thu, 17 Aug 2023 08:17:36 +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:Message-ID:Date:References :In-Reply-To:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=+QY+nMdVp2o8Imu7EeCO9uQsW5ug6hXJzwhvP5/8REk=; b=oa6S1Y0CDn36kM Q+B/Ny+qNIk1g12XH5U0j+gyzM4g+qRv6u4dQsEy9tl1ENMKoMRWgIZkwQktVx14hI0MWxPJhRrCy 2V8V3yWJ9YSxGvZpWJRblsiV2uPsPsr9m9erwhInupRcBQbPNpA36g/siANNhAL8V5k31lYK1IkYq c2crx2rx0XNvelNLM7IeSHOHhSrs/14+tKxIyDMLx/QN6QfCXXSyP4MrrrQkAwPRMbBM86OUEHW1Y hBhkwb1oXha881eECrIwJyUMEKoTTB4murLhiUsEXfD0Naoh5F0h3T/pTgwxDxBu3/qcmrrlTiZPT tiCZ0QO3Vhm1V6LfTLow==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qWYBr-005ngZ-1A; Thu, 17 Aug 2023 08:17:11 +0000 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qWYBn-005ngA-39 for linux-arm-kernel@lists.infradead.org; Thu, 17 Aug 2023 08:17:09 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1692260226; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=QOolyAIrKdePCuvcf3d2mbyCsBtqXn7nucEha9KLm/Y=; b=Gs50TNIOaQtLCL5OX1BjLhGH0Cf8KRM/l/zztkp0vy+OXXfSxhxu6XDloqoyRKgDAC/zZs et7qX2Unuxb7ZO6u3CGgPR+PGx6y7FlaH2RWC6+xr0FCCSkcsbMj/Dtn/qi3pxLu8etbkw YT01WkY+stYi2/1g8dbQ2rfHbZVJ1Zg= Received: from mimecast-mx02.redhat.com (66.187.233.73 [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-266-rtujf1jXPdWVOplIqO1E_A-1; Thu, 17 Aug 2023 04:17:01 -0400 X-MC-Unique: rtujf1jXPdWVOplIqO1E_A-1 Received: from smtp.corp.redhat.com (int-mx09.intmail.prod.int.rdu2.redhat.com [10.11.54.9]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id D18261C06EE0; Thu, 17 Aug 2023 08:16:59 +0000 (UTC) Received: from localhost (unknown [10.39.193.36]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 44BB7492C14; Thu, 17 Aug 2023 08:16:59 +0000 (UTC) From: Cornelia Huck To: Jing Zhang Cc: KVM , KVMARM , ARMLinux , Marc Zyngier , Oliver Upton , Will Deacon , Paolo Bonzini , James Morse , Alexandru Elisei , Suzuki K Poulose , Fuad Tabba , Reiji Watanabe , Raghavendra Rao Ananta , Suraj Jitindar Singh Subject: Re: [PATCH v8 02/11] KVM: arm64: Document KVM_ARM_GET_REG_WRITABLE_MASKS In-Reply-To: Organization: "Red Hat GmbH, Sitz: Werner-von-Siemens-Ring 12, D-85630 Grasbrunn, Handelsregister: Amtsgericht =?utf-8?Q?M=C3=BCnchen=2C?= HRB 153243, =?utf-8?Q?Gesch=C3=A4ftsf=C3=BChrer=3A?= Ryan Barnhart, Charles Cachera, Michael O'Neill, Amy Ross" References: <20230807162210.2528230-1-jingzhangos@google.com> <20230807162210.2528230-3-jingzhangos@google.com> <878raex8g0.fsf@redhat.com> User-Agent: Notmuch/0.37 (https://notmuchmail.org) Date: Thu, 17 Aug 2023 10:16:56 +0200 Message-ID: <874jkyqe13.fsf@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.9 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230817_011708_107246_76E26A14 X-CRM114-Status: GOOD ( 29.59 ) 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 T24gTW9uLCBBdWcgMTQgMjAyMywgSmluZyBaaGFuZyA8amluZ3poYW5nb3NAZ29vZ2xlLmNvbT4g d3JvdGU6Cgo+IE9uIE1vbiwgQXVnIDE0LCAyMDIzIGF0IDI6NDbigK9BTSBDb3JuZWxpYSBIdWNr IDxjb2h1Y2tAcmVkaGF0LmNvbT4gd3JvdGU6Cj4+Cj4+IE9uIE1vbiwgQXVnIDA3IDIwMjMsIEpp bmcgWmhhbmcgPGppbmd6aGFuZ29zQGdvb2dsZS5jb20+IHdyb3RlOgo+Pgo+PiA+IEFkZCBzb21l IGJhc2ljIGRvY3VtZW50YXRpb24gb24gaG93IHRvIGdldCBmZWF0dXJlIElEIHJlZ2lzdGVyIHdy aXRhYmxlCj4+ID4gbWFza3MgZnJvbSB1c2Vyc3BhY2UuCj4+ID4KPj4gPiBTaWduZWQtb2ZmLWJ5 OiBKaW5nIFpoYW5nIDxqaW5nemhhbmdvc0Bnb29nbGUuY29tPgo+PiA+IC0tLQo+PiA+ICBEb2N1 bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QgfCAyOSArKysrKysrKysrKysrKysrKysrKysrKysr KysrKwo+PiA+ICAxIGZpbGUgY2hhbmdlZCwgMjkgaW5zZXJ0aW9ucygrKQo+PiA+Cj4+ID4gZGlm ZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdCBiL0RvY3VtZW50YXRpb24v dmlydC9rdm0vYXBpLnJzdAo+PiA+IGluZGV4IGMwZGRkMzAzNTQ2Mi4uOTJhOWIyMGY5NzBlIDEw MDY0NAo+PiA+IC0tLSBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdAo+PiA+ICsrKyBi L0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdAo+PiA+IEBAIC02MDY4LDYgKzYwNjgsMzUg QEAgd3JpdGVzIHRvIHRoZSBDTlRWQ1RfRUwwIGFuZCBDTlRQQ1RfRUwwIHJlZ2lzdGVycyB1c2lu ZyB0aGUgU0VUX09ORV9SRUcKPj4gPiAgaW50ZXJmYWNlLiBObyBlcnJvciB3aWxsIGJlIHJldHVy bmVkLCBidXQgdGhlIHJlc3VsdGluZyBvZmZzZXQgd2lsbCBub3QgYmUKPj4gPiAgYXBwbGllZC4K Pj4gPgo+PiA+ICs0LjEzOSBLVk1fQVJNX0dFVF9SRUdfV1JJVEFCTEVfTUFTS1MKPj4gPiArLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+PiA+ICsKPj4gPiArOkNh cGFiaWxpdHk6IG5vbmUKPj4gPiArOkFyY2hpdGVjdHVyZXM6IGFybTY0Cj4+ID4gKzpUeXBlOiB2 bSBpb2N0bAo+PiA+ICs6UGFyYW1ldGVyczogc3RydWN0IHJlZ19tYXNrX3JhbmdlIChpbi9vdXQp Cj4+ID4gKzpSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIDwgMCBvbiBlcnJvcgo+PiA+ICsKPj4gPiAr Cj4+ID4gKzo6Cj4+ID4gKwo+PiA+ICsgICAgICAgICNkZWZpbmUgQVJNNjRfRkVBVFVSRV9JRF9T UEFDRV9TSVpFICAoMyAqIDggKiA4KQo+PiA+ICsKPj4gPiArICAgICAgICBzdHJ1Y3QgcmVnX21h c2tfcmFuZ2Ugewo+PiA+ICsgICAgICAgICAgICAgICAgX191NjQgYWRkcjsgICAgICAgICAgICAg LyogUG9pbnRlciB0byBtYXNrIGFycmF5ICovCj4+ID4gKyAgICAgICAgICAgICAgICBfX3U2NCBy ZXNlcnZlZFs3XTsKPj4gPiArICAgICAgICB9Owo+PiA+ICsKPj4gPiArVGhpcyBpb2N0bCB3b3Vs ZCBjb3B5IHRoZSB3cml0YWJsZSBtYXNrcyBmb3IgZmVhdHVyZSBJRCByZWdpc3RlcnMgdG8gdXNl cnNwYWNlLgo+PiA+ICtUaGUgRmVhdHVyZSBJRCBzcGFjZSBpcyBkZWZpbmVkIGFzIHRoZSBTeXN0 ZW0gcmVnaXN0ZXIgc3BhY2UgaW4gQUFyY2g2NCB3aXRoCj4+ID4gK29wMD09Mywgb3AxPT17MCwg MSwgM30sIENSbj09MCwgQ1JtPT17MC03fSwgb3AyPT17MC03fS4KPj4gPiArVG8gZ2V0IHRoZSBp bmRleCBpbiB0aGUgbWFzayBhcnJheSBwb2ludGVkIGJ5IGBgYWRkcmBgIGZvciBhIHNwZWNpZmll ZCBmZWF0dXJlCj4+ID4gK0lEIHJlZ2lzdGVyLCB1c2UgdGhlIG1hY3JvIGBgQVJNNjRfRkVBVFVS RV9JRF9TUEFDRV9JRFgob3AwLCBvcDEsIGNybiwgY3JtLCBvcDIpYGAuCj4+ID4gK1RoaXMgYWxs b3dzIHRoZSB1c2Vyc3BhY2UgdG8ga25vdyB1cGZyb250IHdoZXRoZXIgaXQgY2FuIGFjdHVhbGx5 IHR3ZWFrIHRoZQo+PiA+ICtjb250ZW50cyBvZiBhIGZlYXR1cmUgSUQgcmVnaXN0ZXIgb3Igbm90 Lgo+PiA+ICtUaGUgYGByZXNlcnZlZFs3XWBgIGlzIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlIHRv IGFkZCBvdGhlciByZWdpc3RlciBzcGFjZS4gRm9yCj4+ID4gK2ZlYXR1cmUgSUQgcmVnaXN0ZXJz LCBpdCBzaG91bGQgYmUgMCwgb3RoZXJ3aXNlLCBLVk0gbWF5IHJldHVybiBlcnJvci4KPj4KPj4g SW4gY2FzZSBvZiBmdXR1cmUgZXh0ZW5zaW9ucywgdGhpcyBtZWFucyB0aGF0IHVzZXJzcGFjZSBu ZWVkcyB0byBmaWd1cmUKPj4gb3V0IHdoYXQgdGhlIGtlcm5lbCBzdXBwb3J0cyB2aWEgZGlmZmVy ZW50IGNvbnRlbnQgaW4gcmVnX21hc2tfcmFuZ2UKPj4gKGkuZS4gdHJ5IHdpdGggYSB2YWx1ZSBp biBvbmUgb2YgdGhlIGN1cnJlbnRseSByZXNlcnZlZCBmaWVsZHMgYW5kIGZhbGwKPj4gYmFjayB0 byB1c2luZyBhZGRyIG9ubHkgaWYgdGhhdCBkb2Vzbid0IHdvcmsuKSBDYW4gd2UgZG8gYmV0dGVy Pwo+Pgo+PiBNYXliZSB3ZSBjb3VsZCBpbnRyb2R1Y2UgYSBjYXBhYmlsaXR5IHRoYXQgcmV0dXJu cyB0aGUgc3VwcG9ydGVkIHJhbmdlcwo+PiBhcyBmbGFncywgaS5lLiBub3cgd2Ugd291bGQgcmV0 dXJuIDEgZm9yIGlkIHJlZ3MgbWFza3MsIGFuZCBmb3IgdGhlCj4+IGZ1dHVyZSBjYXNlIHdoZXJl IHdlIGhhdmUgc29tZSB2YWx1ZXMgaW4gdGhlIG5leHQgcmVzZXJ2ZWQgZmllbGQgd2UKPj4gY291 bGQgcmV0dXJuIDEgJiAyIGV0Yy4gV291bGQgbWFrZSBsaWZlIGVhc2llciBmb3IgdXNlcnNwYWNl IHRoYXQgbmVlZHMKPj4gdG8gd29yayB3aXRoIGRpZmZlcmVudCBrZXJuZWxzLCBidXQgbWlnaHQg YmUgb3ZlcmtpbGwgaWYgcmVzZXJ2ZWRbXSBpcwo+PiBtb3JlIGxpa2UgYW4gaW5zdXJhbmNlIHdp dGhvdXQgYW55IGNvbmNyZXRlIHBsYW5zIGZvciBleHRlbnNpb25zLgo+Pgo+Cj4gTWF5YmUgaXQn ZCBiZSBiZXR0ZXIgdG8gbGVhdmUgdGhpcyB0byB3aGVuZXZlciB3ZSBkbyBuZWVkIHRvIGFkZCBv dGhlcgo+IHJhbmdlIHN1cHBvcnQ/CgpNeSBwb2ludCBpczogSG93IGRvZXMgdXNlcnNwYWNlIGZp Z3VyZSBvdXQgaWYgdGhlIGtlcm5lbCB0aGF0IGlzIHJ1bm5pbmcKc3VwcG9ydHMgcmFuZ2VzIG90 aGVyIHRoYW4gaWQgcmVncz8gSWYgdGhpcyBpcyBqdXN0IGFuIGluc3VyYW5jZSBhZ2FpbnN0CmNo YW5nZXMgdGhhdCBtaWdodCBhcnJpdmUgb3Igbm90LCB3ZSBjYW4gbGl2ZSB3aXRoIHRoZSBhd2t3 YXJkICJqdXN0IHRyeQppdCBvdXQiIGFwcHJvYWNoOyBpZiB3ZSB0aGluayBpdCdzIGxpa2VseSB0 aGF0IHdlJ2xsIG5lZWQgdG8gZXh0ZW5kIGl0LAp3ZSBuZWVkIHRvIGFkZCB0aGUgbWVjaGFuaXNt IGZvciB1c2Vyc3BhY2UgdG8gZmluZCBvdXQgYWJvdXQgaXQgbm93LCBvcgppdCB3b3VsZCBuZWVk IHRvIHByb2JlIGZvciBwcmVzZW5jZSBvZiB0aGUgbWVjaGFuaXNtLi4uCgoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWls aW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0 cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=