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.3 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=no 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 290E0C433DB for ; Tue, 16 Feb 2021 12:20:39 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (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 D0B6B64DDA for ; Tue, 16 Feb 2021 12:20:38 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org D0B6B64DDA Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+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=merlin.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:Date:Message-ID:References: To:Subject:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=eIaWO4S446C6WzmI6hEOB3JKxhaOIwTgEKwKrh1v08c=; b=uAKJqLR1FOJuFgEWssgu22S7y RZCIbnLHX3pKY6WcrvtCnIGZTxJT1wKgGpZ6NZXzmSkIVM4Ro8mKGmKGRiEzXTB7UqVnNUnNyllNr R/MdvEpsdgZ8TaptIukvGaNYKAfMPoAaQWhBcPDZpoyW/WiNIlacKvDd0dz2NKONW6nbun4PLSrK9 Y1Hp/f/CuS43tocMU9I7i4VM+qwl5pcGhoiA8ciSFiqF9si/ttL9PcLAjLaf9ne0SF+X7hukLcNhV 8AXCEg9+HC6ZxzO/k09dLTm8uyubk1NvhN098yK3WBBPfW7XpEL4MxXO3QAnRvyQi8LW0m4o1J5qd CDYPqSe5w==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1lBzJq-0001Td-SG; Tue, 16 Feb 2021 12:19:06 +0000 Received: from foss.arm.com ([217.140.110.172]) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1lBzJo-0001T0-1h for linux-arm-kernel@lists.infradead.org; Tue, 16 Feb 2021 12:19:05 +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 AEE2CD6E; Tue, 16 Feb 2021 04:18:56 -0800 (PST) Received: from [192.168.0.110] (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 44B793F73B; Tue, 16 Feb 2021 04:18:55 -0800 (PST) From: Alexandru Elisei Subject: Re: [PATCH] KVM: arm64: Handle CMOs on Read Only memslots To: Marc Zyngier References: <20210211142738.1478292-1-maz@kernel.org> <4bfd380b-a654-c104-f424-a258bb142e34@arm.com> <6c127a2d4276b56205d2d28cc0b9ffc2@kernel.org> Message-ID: <951ad762-3f9e-9469-7b71-e93b7cb554a2@arm.com> Date: Tue, 16 Feb 2021 12:19:09 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.7.1 MIME-Version: 1.0 In-Reply-To: <6c127a2d4276b56205d2d28cc0b9ffc2@kernel.org> Content-Language: en-US X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210216_071904_212649_744BE793 X-CRM114-Status: GOOD ( 32.11 ) 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: kvm@vger.kernel.org, Suzuki K Poulose , kernel-team@android.com, Jianyong Wu , James Morse , linux-arm-kernel@lists.infradead.org, Will Deacon , kvmarm@lists.cs.columbia.edu, Julien Thierry 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 SGkgTWFyYywKClRoYW5rIHlvdSBmb3IgdGhlIGV4cGxhbmF0aW9ucyEKCk9uIDIvMTIvMjEgNjox OCBQTSwgTWFyYyBaeW5naWVyIHdyb3RlOgo+IEhpIEFsZXgsCj4KPiBPbiAyMDIxLTAyLTEyIDE3 OjEyLCBBbGV4YW5kcnUgRWxpc2VpIHdyb3RlOgo+PiBIaSBNYXJjLAo+Pgo+PiBJJ3ZlIGJlZW4g dHJ5aW5nIHRvIGdldCBteSBoZWFkIGFyb3VuZCB3aGF0IHRoZSBhcmNoaXRlY3R1cmUgc2F5cyBh Ym91dCBDTU9zLCBzbwo+PiBwbGVhc2UgYmFyZSB3aXRoIG1lIGlmIEkgbWlzdW5kZXJzdG9vZCBz b21lIHRoaW5ncy4KPgo+IE5vIHdvcnJpZXMuIEkndmUgaGFkIHRoaXMgcGF0Y2ggZm9yIGEgZmV3 IHdlZWtzIG5vdywgYW5kIGNhbid0Cj4gbWFrZSB1cCBteSBtaW5kIGFib3V0IGl0LiBJdCBkb2Vz IGFkZHJlc3MgYW4gYWN0dWFsIGlzc3VlIHRob3VnaCwKPiBzbyBJIGNvdWxkbid0IGp1c3QgZGlz Y2FyZCBpdC4uLiA7LSkKPgo+PiBPbiAyLzExLzIxIDI6MjcgUE0sIE1hcmMgWnluZ2llciB3cm90 ZToKPj4+IEl0IGFwcGVhcnMgdGhhdCB3aGVuIGEgZ3Vlc3QgdHJhcHMgaW50byBLVk0gYmVjYXVz ZSBpdCBpcwo+Pj4gcGVyZm9ybWluZyBhIENNTyBvbiBhIFJlYWQgT25seSBtZW1zbG90LCBvdXIg aGFuZGxpbmcgb2YKPj4+IHRoaXMgb3BlcmF0aW9uIGlzICJzbGlnaHRseSBzdWJvcHRpbWFsIiwg YXMgd2UgdHJlYXQgaXQgYXMKPj4+IGFuIE1NSU8gYWNjZXNzIHdpdGhvdXQgYSB2YWxpZCBzeW5k cm9tZS4KPj4+Cj4+PiBUaGUgY2hhbmNlcyB0aGF0IHVzZXJzcGFjZSBpcyBhZGVxdWF0ZWx5IGVx dWlwZWQgdG8gZGVhbAo+Pj4gd2l0aCBzdWNoIGFuIGV4Y2VwdGlvbiBiZWluZyBzbGltLCBpdCB3 b3VsZCBiZSBiZXR0ZXIgdG8KPj4+IGhhbmRsZSBpdCBpbiB0aGUga2VybmVsLgo+Pj4KPj4+IFdo YXQgd2UgbmVlZCB0byBwcm92aWRlIGlzIHJvdWdobHkgYXMgZm9sbG93czoKPj4+Cj4+PiAoYSkg aWYgYSBDTU8gaGl0cyB3cml0ZWFibGUgbWVtb3J5LCBoYW5kbGUgaXQgYXMgYSBub3JtYWwgbWVt b3J5IGFjZXNzCj4+PiAoYikgaWYgYSBDTU8gaGl0cyBub24tbWVtb3J5LCBza2lwIGl0Cj4+PiAo YykgaWYgYSBDTU8gaGl0cyBSL08gbWVtb3J5LCB0aGF0J3Mgd2hlcmUgdGhpbmdzIGJlY29tZSBm dW46Cj4+PiDCoCAoMSkgaWYgdGhlIENNTyBpcyBEQyBJVkFDLCB0aGUgYXJjaGl0ZWN0dXJlIHNh eXMgdGhpcyBzaG91bGQgcmVzdWx0Cj4+PiDCoMKgwqDCoMKgIGluIGEgcGVybWlzc2lvbiBmYXVs dAoKRm9yIEtWTSB0byBnZXQgYSBzdGFnZSAyIGZhdWx0LCB0aGUgSVBBIG11c3QgYWxyZWFkeSBi ZSBtYXBwZWQgYXMgd3JpdGFibGUgaW4gdGhlCmd1ZXN0J3Mgc3RhZ2UgMSB0YWJsZXMuIElmIEkg cmVhZCB0aGF0IHJpZ2h0IGFuZCB5b3UgYXJlIHN1Z2dlc3RpbmcgdGhhdCB0aGUgZ3Vlc3QKc2hv dWxkIGdldCBhIHBlcm1pc3Npb24gZmF1bHQsIEkgZG9uJ3QgdGhpbmsgdGhhdCdzIGNvcnJlY3Qg ZnJvbSB0aGUgZ3Vlc3Qncwp2aWV3cG9pbnQuCgo+Pj4KPj4+IMKgICgyKSBpZiB0aGUgQ01PIGlz IERDIENJVkFDLCBpdCBzaG91bGQgd29yayBzaW1pbGFybHkgdG8gKGEpCj4+Cj4+IFdoZW4geW91 IHNheSBpdCBzaG91bGQgd29yayBzaW1pbGFybHkgdG8gKGEpLCB5b3UgbWVhbiBpdCBzaG91bGQg YmUgaGFuZGxlZCBhcyBhCj4+IG5vcm1hbCBtZW1vcnkgYWNjZXNzLCB3aXRob3V0IHRoZSAiQ01P IGhpdHMgd3JpdGVhYmxlIG1lbW9yeSIgcGFydCwgcmlnaHQ/Cj4KPiBXaGF0IEkgbWVhbiBpcyB0 aGF0IHRoZSBjYWNoZSBpbnZhbGlkYXRpb24gc2hvdWxkIHRha2UgcGxhY2UsCj4gcHJlZmVyYWJs eSB3aXRob3V0IGludm9sdmluZyBLVk0gYXQgYWxsIChvdGhlciB0aGFuIHBvcHVsYXRpbmcKPiBT MiBpZiByZXF1aXJlZCkuCj4KPj4KPj4+Cj4+PiBXZSBhbHJlYWR5IHBlcmZvcm0gKGEpIGFuZCAo YikgY29ycmVjdGx5LCBidXQgKGMpIGlzIGEgdG90YWwgbWVzcy4KPj4+IEhlbmNlIHdlIG5lZWQg dG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBJVkFDIChjLjEpIGFuZCBDSVZBQyAoYy4yKS4KPj4+Cj4+ PiBPbmUgd2F5IHRvIGRvIGl0IGlzIHRvIHRyZWF0IENNT3MgZ2VuZXJhdGluZyBhIHRyYW5zbGF0 aW9uIGZhdWx0IGFzCj4+PiBhICpyZWFkKiwgZXZlbiB3aGVuIHRoZXkgYXJlIG9uIGEgUlcgbWVt c2xvdC4gVGhpcyBhbGxvd3MgdXMgdG8KPj4+IGZ1cnRoZXIgdHJpYWdlIHRoaW5nczoKPj4+Cj4+ PiBJZiB0aGV5IGNvbWUgYmFjayB3aXRoIGEgcGVybWlzc2lvbiBmYXVsdCwgdGhhdCBpcyBiZWNh dXNlIHRoaXMgaXMKPj4+IGEgREMgSVZBQyBpbnN0cnVjdGlvbjoKPj4+IC0gaW5zaWRlIGEgUlcg bWVtc2xvdDogbm8gcHJvYmxlbSwgdHJlYXQgaXQgYXMgYSB3cml0ZSAoYSkoYy4yKQo+Pj4gLSBp bnNpZGUgYSBSTyBtZW1zbG90OiBpbmplY3QgYSBkYXRhIGFib3J0IGluIHRoZSBndWVzdCAoYy4x KQo+Pj4KPj4+IFRoZSBvbmx5IGRyYXdiYWNrIGlzIHRoYXQgREMgSVZBQyBvbiBhIHlldCB1bm1h cHBlZCBwYWdlIGZhdWx0cwo+Pj4gdHdpY2U6IG9uZSBmb3IgdGhlIGluaXRpYWwgdHJhbnNsYXRp b24gZmF1bHQgdGhhdCByZXN1bHQgaW4gYSBSTwo+Pj4gbWFwcGluZywgYW5kIG9uY2UgZm9yIHRo ZSBwZXJtaXNzaW9uIGZhdWx0LiBJIHRoaW5rIHdlIGNhbiBsaXZlIHdpdGgKPj4+IHRoYXQuCj4+ Cj4+IEknbSB0cnlpbmcgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB3aGF0IHRoZSBwcm9ibGVt IGlzLgo+Pgo+PiBnZm5fdG9fcGZuX3Byb3QoKSByZXR1cm5zS1ZNX0hWQV9FUlJfUk9fQkFEIGlm IHRoZSB3cml0ZSBpcyB0byBhIFJPIG1lbXNsb3QuCj4+IEtWTV9IVkFfRVJSX1JPX0JBRCBpcyBQ QUdFX09GRlNFVCArIFBBR0VfU0laRSwgd2hpY2ggbWVhbnMgdGhhdAo+PiBpc19lcnJvcl9ub3Ns b3RfcGZuKCkgcmV0dXJuIHRydWUuIEluIHRoYXQgY2FzZSB3ZSBleGl0IHRvIHVzZXJzcGFjZQo+ PiB3aXRoIC1FRkFVTFQKPj4gZm9yIERDIElWQUMgYW5kIERDIENJVkFDLiBCdXQgd2hhdCB3ZSBz aG91bGQgYmUgZG9pbmcgaXMgdGhpczoKPj4KPj4gLSBGb3IgREMgSVZBQywgaW5qZWN0IGEgZGFi dCB3aXRoIElTUyA9IDB4MTAsIG1lYW5pbmcgYW4gZXh0ZXJuYWwgYWJvcnQgKHRoYXQncwo+PiB3 aGF0IGt2bV9pbmplY3RfZGFidF9kb2VzKCkpLgo+Pgo+PiAtIEZvciBEQyBDSVZBQywgZXhpdCB0 byB1c2Vyc3BhY2Ugd2l0aCAtRUZBVUxULgo+Pgo+PiBEaWQgSSBnZXQgdGhhdCByaWdodD8KPgo+ IE5vdCBxdWl0ZS4gV2hhdCBJICp0aGluayogd2Ugc2hvdWxkIGRvIGlzOgo+Cj4gLSBEQyBDSVZB QyBzaG91bGQganVzdCB3b3JrLCB3aXRob3V0IGdvaW5nIHRvIHVzZXJzcGFjZS4gSSBjYW4ndCBp bWFnaW5lCj4gwqAgYSByZWFzb24gd2h5IHdlJ2QgaW52b2x2ZSB1c2Vyc3BhY2UgZm9yIHRoaXMs IGFuZCB3ZSBjdXJyZW50bHkgZG9uJ3QKPiDCoCByZWFsbHkgaGF2ZSBhIGdvb2Qgd2F5IHRvIGRl c2NyaWJlIHRoaXMgdG8gdXNlcnNwYWNlLgo+Cj4gLSBEQyBJVkFDIGlzIG1vcmUgbnVhbmNlZDog d2UgY291bGQgZWl0aGVyIGluamVjdCBhbiBleGNlcHRpb24gKHdoaWNoCj4gwqAgaXMgd2hhdCB0 aGlzIHBhdGNoIGRvZXMpLCBvciBwZXJmb3JtIHRoZSBDTU8gb3Vyc2VsdmVzIGFzIGEgREMgQ0lW QUMKPiDCoCAoY29uc2lzdGVudCB3aXRoIHRoZSBJVkEtPkNJVkEgdXBncmFkZSBjYXVzZWQgYnkg aGF2aW5nIGEgUzIgdHJhbnNsYXRpb24pLgo+IMKgIFRoaXMgc2Vjb25kIGFwcHJvYWNoIGlzIGNv bXBhcmFibGUgdG8gd2hhdCB3ZSBkbyB3aGVuIHRoZSBndWVzdAo+IMKgIGlzc3VlcyBhIENNTyBv biBhbiBlbXVsYXRlZCBNTUlPIGFkZHJlc3MgKHdlIGRvbid0IGluamVjdCBhIGZhdWx0KS4KCkhl cmUgYXJlIG15IHRob3VnaHRzIGFib3V0IHRoaXMuCgpUaGVyZSBpcyBub3RoaW5nIHRoYXQgdXNl cnNwYWNlIGNhbiBkbyByZWdhcmRpbmcgdGhlIENNTyBvcGVyYXRpb25zLCBzbyBJIGFncmVlCnRo YXQgd2Ugc2hvdWxkIGhhbmRsZSB0aGlzIGluIHRoZSBrZXJuZWwuCgpJZiB0aGVyZSBpcyBubyBt ZW1zbG90IGFzc29jaWF0ZWQgd2l0aCB0aGUgZmF1bHRpbmcgSVBBLCB0aGVuIEkgZG9uJ3QgdGhp bmsgd2UgY2FuCmRvIHRoZSBDTU8gYmVjYXVzZSB0aGVyZSBpcyBubyBQQSBhc3NvY2lhdGVkIHdp dGggdGhlIElQQS4KCkFzc3VtaW5nIHRoZSBtZW1zbG90IGFzc29jaWF0ZWQgd2l0aCB0aGUgZmF1 bHQgSVBBIGlzIHJlYWRvbmx5OgoKV3JpdGVzIGNvbWluZyBmcm9tIHRoZSBndWVzdCBhcmUgZW11 bGF0ZWQsIHNvIHdoYXRldmVyIHRoZSBndWVzdCB3cml0ZXMgd2lsbCBuZXZlcgpiZSBpbiBhIGRp cnR5IGNhY2hlIGxpbmUuIENsZWFuaW5nIHRoYXQgYWRkcmVzcyB3b3VsZCBtYXRjaCB3aGF0IEtW TV9NRU1fUkVBRE9OTFkKQVBJIGd1YXJhbnRlZXM6ICJbLi5dIEluIHRoaXMgY2FzZSwgd3JpdGVz IHRvIHRoaXMgbWVtb3J5IHdpbGwgYmUgcG9zdGVkIHRvCnVzZXJzcGFjZSBhcyBLVk1fRVhJVF9N TUlPIGV4aXRzLiIgTm8gZGlydHkgY2FjaGUgbGluZSAoZnJvbSB0aGUgZ3Vlc3QncyBwb2ludCBv Zgp2aWV3KSwgbm90aGluZyB3cml0dGVuIHRvIG1lbW9yeS4KClRoZSBjYWNoZSBsaW5lIG1pZ2h0 IGJlIGRpcnR5IGZvciB0d28gcmVhc29uczoKCi0gVGhpcyBpcyB0aGUgZmlyc3QgdGltZSB0aGUg Z3Vlc3QgYWNjZXNzZXMgdGhhdCBtZW1vcnkgbG9jYXRpb24uIE5vIG5lZWQgdG8gZG8KYW55dGhp bmcgKG5laXRoZXIgY2xlYW5pbmcsIG5vciBtYXBwaW5nwqAgYXQgc3RhZ2UgMiksIGJlY2F1c2Ug dGhlIHN1YnNlcXVlbnQgcmVhZApmcm9tIHRoZSBndWVzdCB3aWxsIG1hcCBpdCBhdCBzdGFnZSAy LCBhbmQgdGhhdCB3aWxsIHRyaWdnZXIgdGhlIGRjYWNoZSBjbGVhbmluZwppbiB1c2VyX21lbV9h Ym9ydCgpLgoKLSBVc2Vyc3BhY2Ugd3JvdGUgdG8gdGhlIHBoeXNpY2FsIGFkZHJlc3MgYXMgcGFy dCBvZiBkZXZpY2UgZW11bGF0aW9uLiBJdCBpcwplbnRpcmVseSByZWFzb25hYmxlIGZvciBob3N0 IHVzZXJzcGFjZSB0byBhc3N1bWUgdGhhdCB0aGUgUk8gbWVtc2xvdCBpcyBtYXBwZWQgYXMKZGV2 aWNlIG1lbW9yeSBieSB0aGUgZ3Vlc3QsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIGd1ZXN0IHJlYWRz IGZyb20gbWFpbiBtZW1vcnksCndoaWxlIGhvc3QgdXNlcnNwYWNlIHdyaXRlcyB0byBjYWNoZSAo YXNzdW1pbmcgbm8gRldCKS4gSW4gdGhpcyBjYXNlLCBJIHRoaW5rIGl0J3MKdGhlIGhvc3QgdXNl cnNwYWNlJ3MgZHV0eSB0byBkbyB0aGUgZGNhY2hlIGNsZWFuaW5nLgoKQmVjYXVzZSBvZiB0aGUg dHdvIHJlYXNvbnMgYWJvdmUsIEkgdGhpbmsgY2xlYW5pbmcgdGhlIGRjYWNoZSB3aWxsIGhhdmUg bm8gZWZmZWN0CmZyb20gYSBjb3JyZWN0bmVzcyBwZXJzcGVjdGl2ZS4KCkFzIGZvciBpbnZhbGlk YXRpbmcgdGhlIGNhY2hlIGxpbmUsIGJlc2lkZSB0aGUgdHdvIHNjZW5hcmlvcyBhYm92ZSwgYSBj bGVhbiBjYWNoZQpsaW5lIGNvdWxkIGhhdmUgYmVlbiBhbGxvY2F0ZWQgYnkgYSByZWFkLCBkb25l IGVpdGhlciBieSB0aGUgZ3Vlc3QgKGlmIGl0IG1hcHBlZAp0aGUgSVBBIGFzIE5vcm1hbCBjYWNo ZWFibGUpIG9yIGJ5IHRoZSBob3N0IChDUFUgc3BlY3VsYXRpbmcgbG9hZHMgb3IKdXNlcnNwYWNl L2tlcm5lbCByZWFkaW5nIGZyb20gdGhlIGFkZHJlc3MpLiBJIHRoaW5rIGludmFsaWRhdGluZywg anVzdCBsaWtlCmNsZWFuaW5nLCB3b3VsZCBoYXZlIG5vIGVmZmVjdCBvbiB0aGUgY29ycmVjdG5l c3Mgb2YgdGhlIGVtdWxhdGlvbi4KCk15IG9waW5pb24gaXMgdGhhdCB3ZSBzaG91bGQgc2ltcGx5 IHNraXAgQ01PcyBvbiByZWFkLW9ubHkgbWVtc2xvdC4KCldoYXQgZG8geW91IHRoaW5rPwoKVGhh bmtzLApBbGV4Cj4gVGhhbmtzLAo+Cj4gwqDCoMKgwqDCoMKgwqAgTS4KCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGlu ZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMu aW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK