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 94520C54E5D for ; Mon, 18 Mar 2024 14:15:00 +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:From:References:Cc:To: Subject:MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=Z5gKXC9p5QDKZWrvLiCj2awpbeAfbuDlhYDOziytS9g=; b=4MvxC08GtOwQAU 0VVDf7f+EAC+gbzGMyEDaif6iLj+VUQCHVii00RNQU5xZ6LM6hDcmD3LzLO1UWD94R/F6hbG2bUg+ IiR2U+u2Z9uNwOPxyUJ28uUYHO/w9N5irEBddJDMWXXePlTG5Cy9cKpqAe+TsqWwRDSHOp75evlZW 8rNnCZJC4Fkh6+Sdb39+VOPLMWj+qPkbw9MXRDmlf0KjpHYAUH/U3sMT3iMn8i8Uco+eOFUh1dIhs SjrYxj6xypl+B+u33aJifjwNS4veP/fcXC+vnxnUunT8g6TnWP8YtZeGsCMntEjzLNhi5kcQ8PyWl 1s13SxK70sqaQJzYWQxA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rmDlI-00000008laW-1X2X; Mon, 18 Mar 2024 14:14:48 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rmDlF-00000008lZs-0OO9 for linux-arm-kernel@lists.infradead.org; Mon, 18 Mar 2024 14:14:46 +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 C94DBDA7; Mon, 18 Mar 2024 07:15:17 -0700 (PDT) Received: from [10.57.12.69] (unknown [10.57.12.69]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 8F1013F67D; Mon, 18 Mar 2024 07:14:39 -0700 (PDT) Message-ID: Date: Mon, 18 Mar 2024 14:14:40 +0000 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [RFC PATCH 12/28] KVM: arm64: Support timers in realm RECs Content-Language: en-GB To: Ganapatrao Kulkarni , kvm@vger.kernel.org, kvmarm@lists.linux.dev Cc: Catalin Marinas , Marc Zyngier , Will Deacon , James Morse , Oliver Upton , Suzuki K Poulose , Zenghui Yu , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Joey Gouly , Alexandru Elisei , Christoffer Dall , Fuad Tabba , linux-coco@lists.linux.dev References: <20230127112248.136810-1-suzuki.poulose@arm.com> <20230127112932.38045-1-steven.price@arm.com> <20230127112932.38045-13-steven.price@arm.com> <9ae4b453-4d5b-4537-b004-4db60183019a@os.amperecomputing.com> From: Steven Price In-Reply-To: <9ae4b453-4d5b-4537-b004-4db60183019a@os.amperecomputing.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240318_071445_251393_C4E6AE50 X-CRM114-Status: GOOD ( 23.41 ) 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 T24gMTgvMDMvMjAyNCAxMToyOCwgR2FuYXBhdHJhbyBLdWxrYXJuaSB3cm90ZToKPiAKPiAKPiBP biAyNy0wMS0yMDIzIDA0OjU5IHBtLCBTdGV2ZW4gUHJpY2Ugd3JvdGU6Cj4+IFRoZSBSTU0ga2Vl cHMgdHJhY2sgb2YgdGhlIHRpbWVyIHdoaWxlIHRoZSByZWFsbSBSRUMgaXMgcnVubmluZywgYnV0 IG9uCj4+IGV4aXQgdG8gdGhlIG5vcm1hbCB3b3JsZCBLVk0gaXMgcmVzcG9uc2libGUgZm9yIGhh bmRsaW5nIHRoZSB0aW1lcnMuCj4+Cj4+IFNpZ25lZC1vZmYtYnk6IFN0ZXZlbiBQcmljZSA8c3Rl dmVuLnByaWNlQGFybS5jb20+Cj4+IC0tLQo+PiDCoCBhcmNoL2FybTY0L2t2bS9hcmNoX3RpbWVy LmPCoCB8IDUzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLQo+PiDCoCBpbmNs dWRlL2t2bS9hcm1fYXJjaF90aW1lci5oIHzCoCAyICsrCj4+IMKgIDIgZmlsZXMgY2hhbmdlZCwg NDkgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKPj4KPj4gZGlmZiAtLWdpdCBhL2FyY2gv YXJtNjQva3ZtL2FyY2hfdGltZXIuYyBiL2FyY2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuYwo+PiBp bmRleCBiYjI0YTc2YjQyMjQuLmQ0YWY5ZWU1ODU1MCAxMDA2NDQKPj4gLS0tIGEvYXJjaC9hcm02 NC9rdm0vYXJjaF90aW1lci5jCj4+ICsrKyBiL2FyY2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuYwo+ PiBAQCAtMTMwLDYgKzEzMCwxMSBAQCBzdGF0aWMgdm9pZCB0aW1lcl9zZXRfb2Zmc2V0KHN0cnVj dAo+PiBhcmNoX3RpbWVyX2NvbnRleHQgKmN0eHQsIHU2NCBvZmZzZXQpCj4+IMKgIHsKPj4gwqDC oMKgwqDCoCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBjdHh0LT52Y3B1Owo+PiDCoCArwqDCoMKg IGlmIChrdm1faXNfcmVhbG0odmNwdS0+a3ZtKSkgewo+PiArwqDCoMKgwqDCoMKgwqAgV0FSTl9P TihvZmZzZXQpOwo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuOwo+PiArwqDCoMKgIH0KPj4gKwo+ PiDCoMKgwqDCoMKgIHN3aXRjaChhcmNoX3RpbWVyX2N0eF9pbmRleChjdHh0KSkgewo+PiDCoMKg wqDCoMKgIGNhc2UgVElNRVJfVlRJTUVSOgo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgX192Y3B1X3N5 c19yZWcodmNwdSwgQ05UVk9GRl9FTDIpID0gb2Zmc2V0Owo+PiBAQCAtNDExLDYgKzQxNiwyMSBA QCBzdGF0aWMgdm9pZCBrdm1fdGltZXJfdXBkYXRlX2lycShzdHJ1Y3Qga3ZtX3ZjcHUKPj4gKnZj cHUsIGJvb2wgbmV3X2xldmVsLAo+PiDCoMKgwqDCoMKgIH0KPj4gwqAgfQo+PiDCoCArdm9pZCBr dm1fcmVhbG1fdGltZXJzX3VwZGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCj4+ICt7Cj4+ICvC oMKgwqAgc3RydWN0IGFyY2hfdGltZXJfY3B1ICphcmNoX3RpbWVyID0gJnZjcHUtPmFyY2gudGlt ZXJfY3B1Owo+PiArwqDCoMKgIGludCBpOwo+PiArCj4+ICvCoMKgwqAgZm9yIChpID0gMDsgaSA8 IE5SX0tWTV9USU1FUlM7IGkrKykgewo+IAo+IERvIHdlIHJlcXVpcmVkIHRvIGNoZWNrIGZvciBh bGwgdGltZXJzLCBpcyByZWFsbS9ybW0gdXNlcyBoeXAgdGltZXJzPwoKR29vZCBwb2ludCwgdGhl IHJlYWxtIGd1ZXN0IGNhbid0IHVzZSB0aGUgaHlwIHRpbWVycywgc28gdGhpcyBzaG91bGQgYmUK TlJfS1ZNX0VMMF9USU1FUlMuIFRoZSBoeXAgdGltZXJzIGFyZSB1c2VkIGJ5IHRoZSBob3N0IHRv IGludGVycnVwdCB0aGUKZ3Vlc3QgZXhlY3V0aW9uLiBJIHRoaW5rIHRoaXMgY29kZSB3YXMgd3Jp dHRlbiBiZWZvcmUgTlYgc3VwcG9ydCBhZGRlZAp0aGUgZXh0cmEgdGltZXJzLgoKPj4gK8KgwqDC oMKgwqDCoMKgIHN0cnVjdCBhcmNoX3RpbWVyX2NvbnRleHQgKnRpbWVyID0gJmFyY2hfdGltZXIt PnRpbWVyc1tpXTsKPj4gK8KgwqDCoMKgwqDCoMKgIGJvb2wgc3RhdHVzID0gdGltZXJfZ2V0X2N0 bCh0aW1lcikgJiBBUkNIX1RJTUVSX0NUUkxfSVRfU1RBVDsKPj4gK8KgwqDCoMKgwqDCoMKgIGJv b2wgbGV2ZWwgPSBrdm1fdGltZXJfaXJxX2Nhbl9maXJlKHRpbWVyKSAmJiBzdGF0dXM7Cj4+ICsK Pj4gK8KgwqDCoMKgwqDCoMKgIGlmIChsZXZlbCAhPSB0aW1lci0+aXJxLmxldmVsKQo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBrdm1fdGltZXJfdXBkYXRlX2lycSh2Y3B1LCBsZXZlbCwgdGlt ZXIpOwo+PiArwqDCoMKgIH0KPj4gK30KPj4gKwo+PiDCoCAvKiBPbmx5IGNhbGxlZCBmb3IgYSBm dWxseSBlbXVsYXRlZCB0aW1lciAqLwo+PiDCoCBzdGF0aWMgdm9pZCB0aW1lcl9lbXVsYXRlKHN0 cnVjdCBhcmNoX3RpbWVyX2NvbnRleHQgKmN0eCkKPj4gwqAgewo+PiBAQCAtNjIxLDYgKzY0MSwx MSBAQCB2b2lkIGt2bV90aW1lcl92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQo+PiDC oMKgwqDCoMKgIGlmICh1bmxpa2VseSghdGltZXItPmVuYWJsZWQpKQo+PiDCoMKgwqDCoMKgwqDC oMKgwqAgcmV0dXJuOwo+PiDCoCArwqDCoMKgIGt2bV90aW1lcl91bmJsb2NraW5nKHZjcHUpOwo+ PiArCj4+ICvCoMKgwqAgaWYgKHZjcHVfaXNfcmVjKHZjcHUpKQo+PiArwqDCoMKgwqDCoMKgwqAg cmV0dXJuOwo+PiArCj4gCj4gRm9yIHJlYWxtLCB0aW1lci0+ZW5hYmxlZCBpcyBub3Qgc2V0LCBs b2FkIHJldHVybnMgYmVmb3JlIHRoaXMgY2hlY2suCgpUcnVlLCB0aGlzIGNhbiBiZSBzaW1wbGlm aWVkLiBUaGFua3MuCgpTdGV2ZQoKPj4gwqDCoMKgwqDCoCBnZXRfdGltZXJfbWFwKHZjcHUsICZt YXApOwo+PiDCoCDCoMKgwqDCoMKgIGlmIChzdGF0aWNfYnJhbmNoX2xpa2VseSgmaGFzX2dpY19h Y3RpdmVfc3RhdGUpKSB7Cj4+IEBAIC02MzMsOCArNjU4LDYgQEAgdm9pZCBrdm1fdGltZXJfdmNw dV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKPj4gwqAgwqDCoMKgwqDCoCBzZXRfY250dm9m Zih0aW1lcl9nZXRfb2Zmc2V0KG1hcC5kaXJlY3RfdnRpbWVyKSk7Cj4+IMKgIC3CoMKgwqAga3Zt X3RpbWVyX3VuYmxvY2tpbmcodmNwdSk7Cj4+IC0KPj4gwqDCoMKgwqDCoCB0aW1lcl9yZXN0b3Jl X3N0YXRlKG1hcC5kaXJlY3RfdnRpbWVyKTsKPj4gwqDCoMKgwqDCoCBpZiAobWFwLmRpcmVjdF9w dGltZXIpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCB0aW1lcl9yZXN0b3JlX3N0YXRlKG1hcC5kaXJl Y3RfcHRpbWVyKTsKPj4gQEAgLTY2OCw2ICs2OTEsOSBAQCB2b2lkIGt2bV90aW1lcl92Y3B1X3B1 dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCj4+IMKgwqDCoMKgwqAgaWYgKHVubGlrZWx5KCF0aW1l ci0+ZW5hYmxlZCkpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm47Cj4+IMKgICvCoMKgwqAg aWYgKHZjcHVfaXNfcmVjKHZjcHUpKQo+PiArwqDCoMKgwqDCoMKgwqAgZ290byBvdXQ7Cj4+ICsK Pj4gwqDCoMKgwqDCoCBnZXRfdGltZXJfbWFwKHZjcHUsICZtYXApOwo+PiDCoCDCoMKgwqDCoMKg IHRpbWVyX3NhdmVfc3RhdGUobWFwLmRpcmVjdF92dGltZXIpOwo+PiBAQCAtNjg2LDkgKzcxMiw2 IEBAIHZvaWQga3ZtX3RpbWVyX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKPj4gwqDC oMKgwqDCoCBpZiAobWFwLmVtdWxfcHRpbWVyKQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgc29mdF90 aW1lcl9jYW5jZWwoJm1hcC5lbXVsX3B0aW1lci0+aHJ0aW1lcik7Cj4+IMKgIC3CoMKgwqAgaWYg KGt2bV92Y3B1X2lzX2Jsb2NraW5nKHZjcHUpKQo+PiAtwqDCoMKgwqDCoMKgwqAga3ZtX3RpbWVy X2Jsb2NraW5nKHZjcHUpOwo+PiAtCj4+IMKgwqDCoMKgwqAgLyoKPj4gwqDCoMKgwqDCoMKgICog VGhlIGtlcm5lbCBtYXkgZGVjaWRlIHRvIHJ1biB1c2Vyc3BhY2UgYWZ0ZXIgY2FsbGluZwo+PiB2 Y3B1X3B1dCwgc28KPj4gwqDCoMKgwqDCoMKgICogd2UgcmVzZXQgY250dm9mZiB0byAwIHRvIGVu c3VyZSBhIGNvbnNpc3RlbnQgcmVhZCBiZXR3ZWVuIHVzZXIKPj4gQEAgLTY5Nyw2ICs3MjAsMTEg QEAgdm9pZCBrdm1fdGltZXJfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQo+PiDCoMKg wqDCoMKgwqAgKiB2aXJ0dWFsIG9mZnNldCBvZiB6ZXJvLCBzbyBubyBuZWVkIHRvIHplcm8gQ05U Vk9GRl9FTDIgcmVnaXN0ZXIuCj4+IMKgwqDCoMKgwqDCoCAqLwo+PiDCoMKgwqDCoMKgIHNldF9j bnR2b2ZmKDApOwo+PiArCj4+ICtvdXQ6Cj4+ICvCoMKgwqAgaWYgKGt2bV92Y3B1X2lzX2Jsb2Nr aW5nKHZjcHUpKQo+PiArwqDCoMKgwqDCoMKgwqAga3ZtX3RpbWVyX2Jsb2NraW5nKHZjcHUpOwo+ PiArCj4+IMKgIH0KPj4gwqAgwqAgLyoKPj4gQEAgLTc4NSwxMiArODEzLDE4IEBAIHZvaWQga3Zt X3RpbWVyX3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCj4+IMKgwqDCoMKgwqAgc3Ry dWN0IGFyY2hfdGltZXJfY3B1ICp0aW1lciA9IHZjcHVfdGltZXIodmNwdSk7Cj4+IMKgwqDCoMKg wqAgc3RydWN0IGFyY2hfdGltZXJfY29udGV4dCAqdnRpbWVyID0gdmNwdV92dGltZXIodmNwdSk7 Cj4+IMKgwqDCoMKgwqAgc3RydWN0IGFyY2hfdGltZXJfY29udGV4dCAqcHRpbWVyID0gdmNwdV9w dGltZXIodmNwdSk7Cj4+ICvCoMKgwqAgdTY0IGNudHZvZmY7Cj4+IMKgIMKgwqDCoMKgwqAgdnRp bWVyLT52Y3B1ID0gdmNwdTsKPj4gwqDCoMKgwqDCoCBwdGltZXItPnZjcHUgPSB2Y3B1Owo+PiDC oCArwqDCoMKgIGlmIChrdm1faXNfcmVhbG0odmNwdS0+a3ZtKSkKPj4gK8KgwqDCoMKgwqDCoMKg IGNudHZvZmYgPSAwOwo+PiArwqDCoMKgIGVsc2UKPj4gK8KgwqDCoMKgwqDCoMKgIGNudHZvZmYg PSBrdm1fcGh5c190aW1lcl9yZWFkKCk7Cj4+ICsKPj4gwqDCoMKgwqDCoCAvKiBTeW5jaHJvbml6 ZSBjbnR2b2ZmIGFjcm9zcyBhbGwgdnRpbWVycyBvZiBhIFZNLiAqLwo+PiAtwqDCoMKgIHVwZGF0 ZV92dGltZXJfY250dm9mZih2Y3B1LCBrdm1fcGh5c190aW1lcl9yZWFkKCkpOwo+PiArwqDCoMKg IHVwZGF0ZV92dGltZXJfY250dm9mZih2Y3B1LCBjbnR2b2ZmKTsKPj4gwqDCoMKgwqDCoCB0aW1l cl9zZXRfb2Zmc2V0KHB0aW1lciwgMCk7Cj4+IMKgIMKgwqDCoMKgwqAgaHJ0aW1lcl9pbml0KCZ0 aW1lci0+YmdfdGltZXIsIENMT0NLX01PTk9UT05JQywKPj4gSFJUSU1FUl9NT0RFX0FCU19IQVJE KTsKPj4gQEAgLTEyNjUsNiArMTI5OSwxMyBAQCBpbnQga3ZtX3RpbWVyX2VuYWJsZShzdHJ1Y3Qg a3ZtX3ZjcHUgKnZjcHUpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPj4g wqDCoMKgwqDCoCB9Cj4+IMKgICvCoMKgwqAgLyoKPj4gK8KgwqDCoMKgICogV2UgZG9uJ3QgdXNl IG1hcHBlZCBJUlFzIGZvciBSZWFsbXMgYmVjYXVzZSB0aGUgUk1JIGRvZXNuJ3QgYWxsb3cKPj4g K8KgwqDCoMKgICogdXMgc2V0dGluZyB0aGUgTFIuSFcgYml0IGluIHRoZSBWR0lDLgo+PiArwqDC oMKgwqAgKi8KPj4gK8KgwqDCoCBpZiAodmNwdV9pc19yZWModmNwdSkpCj4+ICvCoMKgwqDCoMKg wqDCoCByZXR1cm4gMDsKPj4gKwo+PiDCoMKgwqDCoMKgIGdldF90aW1lcl9tYXAodmNwdSwgJm1h cCk7Cj4+IMKgIMKgwqDCoMKgwqAgcmV0ID0ga3ZtX3ZnaWNfbWFwX3BoeXNfaXJxKHZjcHUsCj4+ IGRpZmYgLS1naXQgYS9pbmNsdWRlL2t2bS9hcm1fYXJjaF90aW1lci5oIGIvaW5jbHVkZS9rdm0v YXJtX2FyY2hfdGltZXIuaAo+PiBpbmRleCBjZDZkOGYyNjBlYWIuLjE1ODI4MGUxNWEzMyAxMDA2 NDQKPj4gLS0tIGEvaW5jbHVkZS9rdm0vYXJtX2FyY2hfdGltZXIuaAo+PiArKysgYi9pbmNsdWRl L2t2bS9hcm1fYXJjaF90aW1lci5oCj4+IEBAIC03Niw2ICs3Niw4IEBAIGludCBrdm1fYXJtX3Rp bWVyX3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKPj4gc3RydWN0IGt2bV9kZXZpY2Vf YXR0ciAqYXR0cik7Cj4+IMKgIGludCBrdm1fYXJtX3RpbWVyX2dldF9hdHRyKHN0cnVjdCBrdm1f dmNwdSAqdmNwdSwgc3RydWN0Cj4+IGt2bV9kZXZpY2VfYXR0ciAqYXR0cik7Cj4+IMKgIGludCBr dm1fYXJtX3RpbWVyX2hhc19hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0Cj4+IGt2 bV9kZXZpY2VfYXR0ciAqYXR0cik7Cj4+IMKgICt2b2lkIGt2bV9yZWFsbV90aW1lcnNfdXBkYXRl KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Cj4+ICsKPj4gwqAgdTY0IGt2bV9waHlzX3RpbWVyX3Jl YWQodm9pZCk7Cj4+IMKgIMKgIHZvaWQga3ZtX3RpbWVyX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3Zj cHUgKnZjcHUpOwo+IAo+IFRoYW5rcywKPiBHYW5hcGF0CgoKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QK bGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRl YWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=