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 mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id E47F5C433F5 for ; Thu, 18 Nov 2021 10:04:23 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id C4BCB6108B for ; Thu, 18 Nov 2021 10:04:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S245500AbhKRKHW convert rfc822-to-8bit (ORCPT ); Thu, 18 Nov 2021 05:07:22 -0500 Received: from mail.kernel.org ([198.145.29.99]:56754 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S245645AbhKRKFe (ORCPT ); Thu, 18 Nov 2021 05:05:34 -0500 Received: from disco-boy.misterjones.org (disco-boy.misterjones.org [51.254.78.96]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id E4EAA61B3A; Thu, 18 Nov 2021 10:02:33 +0000 (UTC) Received: from sofa.misterjones.org ([185.219.108.64] helo=why.misterjones.org) by disco-boy.misterjones.org with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1mneEw-006HaY-Ss; Thu, 18 Nov 2021 10:02:31 +0000 Date: Thu, 18 Nov 2021 10:01:58 +0000 Message-ID: <87o86h7pex.wl-maz@kernel.org> From: Marc Zyngier To: Pali =?UTF-8?B?Um9ow6Fy?= Cc: Bjorn Helgaas , linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-pci@vger.kernel.org, kernel-team@android.com, Alyssa Rosenzweig , Lorenzo Pieralisi , Bjorn Helgaas Subject: Re: [PATCH] PCI: apple: Reset the port for 100ms on probe In-Reply-To: <20211117202859.2m5sqwz6xsjgldji@pali> References: <20211117160053.232158-1-maz@kernel.org> <20211117201245.GA1768803@bhelgaas> <20211117202859.2m5sqwz6xsjgldji@pali> 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/27.1 (x86_64-pc-linux-gnu) MULE/6.0 (HANACHIRUSATO) MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8BIT X-SA-Exim-Connect-IP: 185.219.108.64 X-SA-Exim-Rcpt-To: pali@kernel.org, helgaas@kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-pci@vger.kernel.org, kernel-team@android.com, alyssa@rosenzweig.io, lorenzo.pieralisi@arm.com, bhelgaas@google.com X-SA-Exim-Mail-From: maz@kernel.org X-SA-Exim-Scanned: No (on disco-boy.misterjones.org); SAEximRunCond expanded to false Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org On Wed, 17 Nov 2021 20:28:59 +0000, Pali Rohár wrote: > > Hello! > > On Wednesday 17 November 2021 14:12:45 Bjorn Helgaas wrote: > > [+cc Pali] > > > > On Wed, Nov 17, 2021 at 04:00:53PM +0000, Marc Zyngier wrote: > > > While the Apple PCIe driver works correctly when directly booted > > > from the firmware, it fails to initialise when the kernel is booted > > > from a bootloader using PCIe such as u-boot. > > > > > > That's beacuse we're missing a proper reset of the port (we only > > > clear the reset, but never assert it). > > > > s/beacuse/because/ > > > > > Bring the port back to life by wiggling the #PERST pin for 100ms > > > (as per the spec). > > > > I cc'd Pali because I think he's interested in consolidating or > > somehow rationalizing delays like this. > > > > If we have a specific spec reference here, I think it would help that > > effort. I *think* it's PCIe r5.0, sec 6.6.1, which mentions the 100ms > > along with some additional constraints, like waiting 100ms after Link > > training completes for ports that support > 5.0 GT/s, whether > > Readiness Notifications are used, and CRS Software Visiblity. > > This is not 100ms timeout "after link training completes". > > Timeout in this patch is between flipping PERST# signal, so timeout > means how long needs to be endpoint card in reset state. And this > timeout cannot be controller specific. In past I have tried to find this > timeout in specifications, I was not able. Some summary is in my email: > https://lore.kernel.org/linux-pci/20210310110535.zh4pnn4vpmvzwl5q@pali/ > > So I would like to know, why was chosen 100ms for msleep() in this > patch? Excellent question. I went back to my notes (and the spec), and it looks like I have mistakenly conflated *two* delays here: - The post-#PERST delay, which is 100ms, and which is *not* what this patch is doing while it really should be doing it. This is documented in the base PCIe spec (in Rev 2.0, this is part of 6.6.1). The amusing part is that on this HW, it seems that only the delay from the falling edge matters (which is why I didn't spot the issue). - The duration of the power-on #PERST assertion (Tpvperl), which is also 100ms, and documented in the PCIe Card Electromechanical Specification (Rev 1.0a, 2.2 and 2.2.1). There is also a third delay (Tperst-clk) which represents the time required for the clock to ramp up before releasing #PERST. No, there is no value associated with this. Having come to my senses, and with these constraints in mind, this is what I currently have in my tree: /* Engage #PERST */ gpiod_set_value(reset, 0); ret = apple_pcie_setup_refclk(pcie, port); if (ret < 0) return ret; /* Hold #PERST for 100ms as per the electromechanical spec */ msleep(100); rmw_set(PORT_PERST_OFF, port->base + PORT_PERST); gpiod_set_value(reset, 1); /* Wait for 100ms after #PERST deassertion before anothing else */ msleep(100); Yes, this is totally overkill, as I assume that each port has gone through a complete power-off and is only slowly coming back from the dead. In practice, I can completely remove the initial Tpvperl delay (we have been powered-on for a long time already, and the clock is stable when we come back from setting it up), and cut the second one by half without observing any ill effect (though I feel safer keeping it to its nominal value). If nobody screams, I'll respin something shortly. M. -- 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 mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id A0278C433F5 for ; Thu, 18 Nov 2021 10:04:09 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 693266108B for ; Thu, 18 Nov 2021 10:04:09 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 693266108B Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.infradead.org 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=unBhGD2Zj3K0a36i2rK0XYlrqLtFqW1Odwr2Oiisb9g=; b=R/Nh8d6BPvGOOZ 81FzW7phSdt0/GfH7rrz/AYUWLNOjTSrF9xZ3b3BcTXaAeyNg1VWsTI8YF/MHzSakOxwsRd+8YTno TcHqpBdX8Zb5ERhzBQ3FpnqRotkozmOAV/S8VAOFX/e8b5Yr64ytIT4lkfa0pOwtflm4ephiPTjfD hePd76MIbC2FODgOh8Tnqx/GRS+88KxdVR8PBeHO6d1m5nJ8nkA+nEfZiEyEr33Xhwm3NpDzDMyVY Ehiku7K0ls8/rbSgVf+pDRsCCaGtcScdQjdWN24YE/OEP4cYLpRQ+Q649nU+X4YVzk8oBcj7uIx51 0Dy8tS7v58oya72LiytQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mneFd-007P52-1V; Thu, 18 Nov 2021 10:02:41 +0000 Received: from mail.kernel.org ([198.145.29.99]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mneFa-007P3q-17 for linux-arm-kernel@lists.infradead.org; Thu, 18 Nov 2021 10:02:39 +0000 Received: from disco-boy.misterjones.org (disco-boy.misterjones.org [51.254.78.96]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id E4EAA61B3A; Thu, 18 Nov 2021 10:02:33 +0000 (UTC) Received: from sofa.misterjones.org ([185.219.108.64] helo=why.misterjones.org) by disco-boy.misterjones.org with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1mneEw-006HaY-Ss; Thu, 18 Nov 2021 10:02:31 +0000 Date: Thu, 18 Nov 2021 10:01:58 +0000 Message-ID: <87o86h7pex.wl-maz@kernel.org> From: Marc Zyngier To: Pali =?UTF-8?B?Um9ow6Fy?= Cc: Bjorn Helgaas , linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-pci@vger.kernel.org, kernel-team@android.com, Alyssa Rosenzweig , Lorenzo Pieralisi , Bjorn Helgaas Subject: Re: [PATCH] PCI: apple: Reset the port for 100ms on probe In-Reply-To: <20211117202859.2m5sqwz6xsjgldji@pali> References: <20211117160053.232158-1-maz@kernel.org> <20211117201245.GA1768803@bhelgaas> <20211117202859.2m5sqwz6xsjgldji@pali> 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/27.1 (x86_64-pc-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: pali@kernel.org, helgaas@kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-pci@vger.kernel.org, kernel-team@android.com, alyssa@rosenzweig.io, lorenzo.pieralisi@arm.com, bhelgaas@google.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-20211118_020238_127918_489E1D96 X-CRM114-Status: GOOD ( 32.93 ) 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 T24gV2VkLCAxNyBOb3YgMjAyMSAyMDoyODo1OSArMDAwMCwKUGFsaSBSb2jDoXIgPHBhbGlAa2Vy bmVsLm9yZz4gd3JvdGU6Cj4gCj4gSGVsbG8hCj4gCj4gT24gV2VkbmVzZGF5IDE3IE5vdmVtYmVy IDIwMjEgMTQ6MTI6NDUgQmpvcm4gSGVsZ2FhcyB3cm90ZToKPiA+IFsrY2MgUGFsaV0KPiA+IAo+ ID4gT24gV2VkLCBOb3YgMTcsIDIwMjEgYXQgMDQ6MDA6NTNQTSArMDAwMCwgTWFyYyBaeW5naWVy IHdyb3RlOgo+ID4gPiBXaGlsZSB0aGUgQXBwbGUgUENJZSBkcml2ZXIgd29ya3MgY29ycmVjdGx5 IHdoZW4gZGlyZWN0bHkgYm9vdGVkCj4gPiA+IGZyb20gdGhlIGZpcm13YXJlLCBpdCBmYWlscyB0 byBpbml0aWFsaXNlIHdoZW4gdGhlIGtlcm5lbCBpcyBib290ZWQKPiA+ID4gZnJvbSBhIGJvb3Rs b2FkZXIgdXNpbmcgUENJZSBzdWNoIGFzIHUtYm9vdC4KPiA+ID4gCj4gPiA+IFRoYXQncyBiZWFj dXNlIHdlJ3JlIG1pc3NpbmcgYSBwcm9wZXIgcmVzZXQgb2YgdGhlIHBvcnQgKHdlIG9ubHkKPiA+ ID4gY2xlYXIgdGhlIHJlc2V0LCBidXQgbmV2ZXIgYXNzZXJ0IGl0KS4KPiA+IAo+ID4gcy9iZWFj dXNlL2JlY2F1c2UvCj4gPiAKPiA+ID4gQnJpbmcgdGhlIHBvcnQgYmFjayB0byBsaWZlIGJ5IHdp Z2dsaW5nIHRoZSAjUEVSU1QgcGluIGZvciAxMDBtcwo+ID4gPiAoYXMgcGVyIHRoZSBzcGVjKS4K PiA+IAo+ID4gSSBjYydkIFBhbGkgYmVjYXVzZSBJIHRoaW5rIGhlJ3MgaW50ZXJlc3RlZCBpbiBj b25zb2xpZGF0aW5nIG9yCj4gPiBzb21laG93IHJhdGlvbmFsaXppbmcgZGVsYXlzIGxpa2UgdGhp cy4KPiA+IAo+ID4gSWYgd2UgaGF2ZSBhIHNwZWNpZmljIHNwZWMgcmVmZXJlbmNlIGhlcmUsIEkg dGhpbmsgaXQgd291bGQgaGVscCB0aGF0Cj4gPiBlZmZvcnQuICBJICp0aGluayogaXQncyBQQ0ll IHI1LjAsIHNlYyA2LjYuMSwgd2hpY2ggbWVudGlvbnMgdGhlIDEwMG1zCj4gPiBhbG9uZyB3aXRo IHNvbWUgYWRkaXRpb25hbCBjb25zdHJhaW50cywgbGlrZSB3YWl0aW5nIDEwMG1zIGFmdGVyIExp bmsKPiA+IHRyYWluaW5nIGNvbXBsZXRlcyBmb3IgcG9ydHMgdGhhdCBzdXBwb3J0ID4gNS4wIEdU L3MsIHdoZXRoZXIKPiA+IFJlYWRpbmVzcyBOb3RpZmljYXRpb25zIGFyZSB1c2VkLCBhbmQgQ1JT IFNvZnR3YXJlIFZpc2libGl0eS4KPiAKPiBUaGlzIGlzIG5vdCAxMDBtcyB0aW1lb3V0ICJhZnRl ciBsaW5rIHRyYWluaW5nIGNvbXBsZXRlcyIuCj4gCj4gVGltZW91dCBpbiB0aGlzIHBhdGNoIGlz IGJldHdlZW4gZmxpcHBpbmcgUEVSU1QjIHNpZ25hbCwgc28gdGltZW91dAo+IG1lYW5zIGhvdyBs b25nIG5lZWRzIHRvIGJlIGVuZHBvaW50IGNhcmQgaW4gcmVzZXQgc3RhdGUuIEFuZCB0aGlzCj4g dGltZW91dCBjYW5ub3QgYmUgY29udHJvbGxlciBzcGVjaWZpYy4gSW4gcGFzdCBJIGhhdmUgdHJp ZWQgdG8gZmluZCB0aGlzCj4gdGltZW91dCBpbiBzcGVjaWZpY2F0aW9ucywgSSB3YXMgbm90IGFi bGUuIFNvbWUgc3VtbWFyeSBpcyBpbiBteSBlbWFpbDoKPiBodHRwczovL2xvcmUua2VybmVsLm9y Zy9saW51eC1wY2kvMjAyMTAzMTAxMTA1MzUuemg0cG5uNHZwbXZ6d2w1cUBwYWxpLwo+IAo+IFNv IEkgd291bGQgbGlrZSB0byBrbm93LCB3aHkgd2FzIGNob3NlbiAxMDBtcyBmb3IgbXNsZWVwKCkg aW4gdGhpcwo+IHBhdGNoPwoKRXhjZWxsZW50IHF1ZXN0aW9uLiBJIHdlbnQgYmFjayB0byBteSBu b3RlcyAoYW5kIHRoZSBzcGVjKSwgYW5kIGl0Cmxvb2tzIGxpa2UgSSBoYXZlIG1pc3Rha2VubHkg Y29uZmxhdGVkICp0d28qIGRlbGF5cyBoZXJlOgoKLSBUaGUgcG9zdC0jUEVSU1QgZGVsYXksIHdo aWNoIGlzIDEwMG1zLCBhbmQgd2hpY2ggaXMgKm5vdCogd2hhdCB0aGlzCiAgcGF0Y2ggaXMgZG9p bmcgd2hpbGUgaXQgcmVhbGx5IHNob3VsZCBiZSBkb2luZyBpdC4gVGhpcyBpcwogIGRvY3VtZW50 ZWQgaW4gdGhlIGJhc2UgUENJZSBzcGVjIChpbiBSZXYgMi4wLCB0aGlzIGlzIHBhcnQgb2YKICA2 LjYuMSkuIFRoZSBhbXVzaW5nIHBhcnQgaXMgdGhhdCBvbiB0aGlzIEhXLCBpdCBzZWVtcyB0aGF0 IG9ubHkgdGhlCiAgZGVsYXkgZnJvbSB0aGUgZmFsbGluZyBlZGdlIG1hdHRlcnMgKHdoaWNoIGlz IHdoeSBJIGRpZG4ndCBzcG90IHRoZQogIGlzc3VlKS4KCi0gVGhlIGR1cmF0aW9uIG9mIHRoZSBw b3dlci1vbiAjUEVSU1QgYXNzZXJ0aW9uIChUcHZwZXJsKSwgd2hpY2ggaXMKICBhbHNvIDEwMG1z LCBhbmQgZG9jdW1lbnRlZCBpbiB0aGUgUENJZSBDYXJkIEVsZWN0cm9tZWNoYW5pY2FsCiAgU3Bl Y2lmaWNhdGlvbiAoUmV2IDEuMGEsIDIuMiBhbmQgMi4yLjEpLgoKVGhlcmUgaXMgYWxzbyBhIHRo aXJkIGRlbGF5IChUcGVyc3QtY2xrKSB3aGljaCByZXByZXNlbnRzIHRoZSB0aW1lCnJlcXVpcmVk IGZvciB0aGUgY2xvY2sgdG8gcmFtcCB1cCBiZWZvcmUgcmVsZWFzaW5nICNQRVJTVC4gTm8sIHRo ZXJlCmlzIG5vIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzLgoKSGF2aW5nIGNvbWUgdG8gbXkg c2Vuc2VzLCBhbmQgd2l0aCB0aGVzZSBjb25zdHJhaW50cyBpbiBtaW5kLCB0aGlzIGlzCndoYXQg SSBjdXJyZW50bHkgaGF2ZSBpbiBteSB0cmVlOgoKCS8qIEVuZ2FnZSAjUEVSU1QgKi8KCWdwaW9k X3NldF92YWx1ZShyZXNldCwgMCk7CgoJcmV0ID0gYXBwbGVfcGNpZV9zZXR1cF9yZWZjbGsocGNp ZSwgcG9ydCk7CglpZiAocmV0IDwgMCkKCQlyZXR1cm4gcmV0OwoKCS8qIEhvbGQgI1BFUlNUIGZv ciAxMDBtcyBhcyBwZXIgdGhlIGVsZWN0cm9tZWNoYW5pY2FsIHNwZWMgKi8KCW1zbGVlcCgxMDAp OwoJcm13X3NldChQT1JUX1BFUlNUX09GRiwgcG9ydC0+YmFzZSArIFBPUlRfUEVSU1QpOwoJZ3Bp b2Rfc2V0X3ZhbHVlKHJlc2V0LCAxKTsKCS8qIFdhaXQgZm9yIDEwMG1zIGFmdGVyICNQRVJTVCBk ZWFzc2VydGlvbiBiZWZvcmUgYW5vdGhpbmcgZWxzZSAqLwoJbXNsZWVwKDEwMCk7CgpZZXMsIHRo aXMgaXMgdG90YWxseSBvdmVya2lsbCwgYXMgSSBhc3N1bWUgdGhhdCBlYWNoIHBvcnQgaGFzIGdv bmUKdGhyb3VnaCBhIGNvbXBsZXRlIHBvd2VyLW9mZiBhbmQgaXMgb25seSBzbG93bHkgY29taW5n IGJhY2sgZnJvbSB0aGUKZGVhZC4KCkluIHByYWN0aWNlLCBJIGNhbiBjb21wbGV0ZWx5IHJlbW92 ZSB0aGUgaW5pdGlhbCBUcHZwZXJsIGRlbGF5ICh3ZQpoYXZlIGJlZW4gcG93ZXJlZC1vbiBmb3Ig YSBsb25nIHRpbWUgYWxyZWFkeSwgYW5kIHRoZSBjbG9jayBpcyBzdGFibGUKd2hlbiB3ZSBjb21l IGJhY2sgZnJvbSBzZXR0aW5nIGl0IHVwKSwgYW5kIGN1dCB0aGUgc2Vjb25kIG9uZSBieSBoYWxm CndpdGhvdXQgb2JzZXJ2aW5nIGFueSBpbGwgZWZmZWN0ICh0aG91Z2ggSSBmZWVsIHNhZmVyIGtl ZXBpbmcgaXQgdG8KaXRzIG5vbWluYWwgdmFsdWUpLgoKSWYgbm9ib2R5IHNjcmVhbXMsIEknbGwg cmVzcGluIHNvbWV0aGluZyBzaG9ydGx5LgoKCU0uCgotLSAKV2l0aG91dCBkZXZpYXRpb24gZnJv bSB0aGUgbm9ybSwgcHJvZ3Jlc3MgaXMgbm90IHBvc3NpYmxlLgoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxp c3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZy YWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=