From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Return-Path: From: Laurent Pinchart To: Jose Abreu Cc: Russell King - ARM Linux , Laurent Pinchart , dri-devel@lists.freedesktop.org, Andy Yan , Archit Taneja , Fabio Estevam , Heiko Stuebner , Kieran Bingham , Mark Yao , Philipp Zabel , Ulrich Hecht , Vladimir Zapolskiy , linux-renesas-soc@vger.kernel.org Subject: Re: [PATCH 13/22] drm: bridge: dw-hdmi: Replace device type with platform quirks Date: Mon, 05 Dec 2016 13:32:15 +0200 Message-ID: <1576280.tBdiYM6mm0@avalon> In-Reply-To: References: <1480635817-1258-1-git-send-email-laurent.pinchart+renesas@ideasonboard.com> <4921806.T6YjZHsEAd@avalon> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" List-ID: Hi Jose, On Monday 05 Dec 2016 10:50:19 Jose Abreu wrote: > On 02-12-2016 15:43, Laurent Pinchart wrote: > > On Friday 02 Dec 2016 14:24:01 Russell King - ARM Linux wrote: > >> On Fri, Dec 02, 2016 at 01:43:28AM +0200, Laurent Pinchart wrote: > >>> From: Kieran Bingham > >>> > >>> The dw-hdmi driver declares a dev_type to distinguish platform specific > >>> changes. Replace this with a quirk field, so that the platform can > >>> specify the required quirks for the driver, rather than the driver > >>> becoming conditional on multiple platforms. > >>> > >>> As part of this, we rename the dw-hdmi 'spare' which is defined as the > >>> SVSRET bit in later documentation. > >> > >> I'd really prefer that we did not go down the broken route of adding > >> a set of "quirk" flags - look at what a mess SDHCI has become through > >> allowing that kind of practice. > >> > >> I'd much rather we find a saner structure to this - and we know that > >> the hardware has ID registers in it which can be used (so far) to > >> identify the buggy hardware. > > > > I'd much prefer something that would allow runtime identification of the > > device and the corresponding actions to be taken. However, the amount of > > documentation we have on the DWC HDMI TX IP core (and the associated PHY) > > is pretty limited, given that Synopsys doesn't make the documentation > > available publicly. Changes made to the IP core by integrators could > > complicate this further. I'm trying to gather as much information as > > possible to make clean the code up, for instance by trying to identify > > the PHYs used on the various platforms we support. Progress is slow on > > that front, there isn't enough leaked information available online :-) I > > haven't given up though, but I'll need more time. > > > > I don't like quirks much either. They are however already used today, even > > if we trigger them through dev_type instead of quirk flags. This patch > > came from a previous version found in a BSP that simply sprinkled several > > if (hdmi-> dev_type == RCAR_HDMI) through the code. For instance, > > > > - if (hdmi->dev_type == RK3288_HDMI) > > + if (hdmi->dev_type == RK3288_HDMI || hdmi->dev_type == RCAR_HDMI) > > dw_hdmi_phy_enable_spare(hdmi, 1); > > > > which I think is worse than flags as it would quickly degenerate to > > spaghetti code. > > > > For this specific case, we've managed to identify that on Renesas > > platforms the bit set by this function is called SVSRET. Its usage isn't > > clear yet, but I suspect it to control one of the PHY input control > > signals, like the other bits in the same register. I'm trying to get more > > information to clean the implementation further, hopefully with a way to > > determine whether the signal is used based on PHY identification. > > SVSRET is a low power mode consumption and is a PHY input signal > as you suggested. Thank you for the confirmation. Would you happen to know what SVSRET stands for ? > Most of the configurable input signals of the PHY are available by the > controller regbank. I don't think it is possible to detect this at runtime, > I think you have at least to hardcode which version of the PHY you are > using. > > I would suggest that maybe all the PHY logic should be extracted and then > use callbacks to glue controller and phy. Then, depending on the PHY you > could use empty stubs if, for example, a given PHY did not support SVSRET. > Still, I don't know if this is the best option. What I do know is that there > are a large number of PHY's with different flavors that can use the same > controller. The controller has different versions also, and each version can > have quirks but I think it would be easier to manage this driver if we had a > clear distinction between PHY and controller. Agreed, I'd like to go in that direction. What makes it quite difficult is the lack of documentation about the PHYs :-) I've found six different PHY types that can be identified by the CONFIG2_ID register: Bits | Field | Description ------------------------------------------------------------------------------ 7-0 | phytype | PHY interface | | 0x00: Legacy PHY (HDMI TX PHY) | | 0xb2: MHL PHY + HEAC PHY | | 0xc2: MHL PHY | | 0xe2: HDMI 3D TX PHY + HEAC PHY | | 0xf2: HDMI 3D TX PHY | | 0xf3: HDMI2 TX PHY I'm sure there's more than that. In particular I wonder how external vendor PHYs are identified. I'm also wondering whether there's a need to keep support for the legacy PHY signals (ENTMDS and PDZ in the PHY_CONF0 register). As far as I understand they're not used by the Gen2 PHYs (including the external vendor PHYs), but I can't confirm that without more documentation (although I could test that on the platforms I have access to). > > This is all work in progress, and if anyone has access to any > > documentation and can provide additional information I'll be grateful. > > > >>> Signed-off-by: Kieran Bingham > >>> Signed-off-by: Laurent Pinchart > >>> > >>> --- > >>> > >>> drivers/gpu/drm/bridge/dw-hdmi.c | 14 ++++++-------- > >>> drivers/gpu/drm/bridge/dw-hdmi.h | 4 ++-- > >>> drivers/gpu/drm/imx/dw_hdmi-imx.c | 3 +-- > >>> drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c | 2 +- > >>> include/drm/bridge/dw_hdmi.h | 12 +++++------- > >>> 5 files changed, 15 insertions(+), 20 deletions(-) -- Regards, Laurent Pinchart From mboxrd@z Thu Jan 1 00:00:00 1970 From: Laurent Pinchart Subject: Re: [PATCH 13/22] drm: bridge: dw-hdmi: Replace device type with platform quirks Date: Mon, 05 Dec 2016 13:32:15 +0200 Message-ID: <1576280.tBdiYM6mm0@avalon> References: <1480635817-1258-1-git-send-email-laurent.pinchart+renesas@ideasonboard.com> <4921806.T6YjZHsEAd@avalon> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from galahad.ideasonboard.com (galahad.ideasonboard.com [IPv6:2001:4b98:dc2:45:216:3eff:febb:480d]) by gabe.freedesktop.org (Postfix) with ESMTPS id BC7FB89056 for ; Mon, 5 Dec 2016 11:31:56 +0000 (UTC) In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Jose Abreu Cc: Fabio Estevam , Laurent Pinchart , Ulrich Hecht , Russell King - ARM Linux , dri-devel@lists.freedesktop.org, Kieran Bingham , linux-renesas-soc@vger.kernel.org, Andy Yan , Vladimir Zapolskiy List-Id: dri-devel@lists.freedesktop.org SGkgSm9zZSwKCk9uIE1vbmRheSAwNSBEZWMgMjAxNiAxMDo1MDoxOSBKb3NlIEFicmV1IHdyb3Rl Ogo+IE9uIDAyLTEyLTIwMTYgMTU6NDMsIExhdXJlbnQgUGluY2hhcnQgd3JvdGU6Cj4gPiBPbiBG cmlkYXkgMDIgRGVjIDIwMTYgMTQ6MjQ6MDEgUnVzc2VsbCBLaW5nIC0gQVJNIExpbnV4IHdyb3Rl Ogo+ID4+IE9uIEZyaSwgRGVjIDAyLCAyMDE2IGF0IDAxOjQzOjI4QU0gKzAyMDAsIExhdXJlbnQg UGluY2hhcnQgd3JvdGU6Cj4gPj4+IEZyb206IEtpZXJhbiBCaW5naGFtIDxraWVyYW4uYmluZ2hh bStyZW5lc2FzQGlkZWFzb25ib2FyZC5jb20+Cj4gPj4+IAo+ID4+PiBUaGUgZHctaGRtaSBkcml2 ZXIgZGVjbGFyZXMgYSBkZXZfdHlwZSB0byBkaXN0aW5ndWlzaCBwbGF0Zm9ybSBzcGVjaWZpYwo+ ID4+PiBjaGFuZ2VzLiBSZXBsYWNlIHRoaXMgd2l0aCBhIHF1aXJrIGZpZWxkLCBzbyB0aGF0IHRo ZSBwbGF0Zm9ybSBjYW4KPiA+Pj4gc3BlY2lmeSB0aGUgcmVxdWlyZWQgcXVpcmtzIGZvciB0aGUg ZHJpdmVyLCByYXRoZXIgdGhhbiB0aGUgZHJpdmVyCj4gPj4+IGJlY29taW5nIGNvbmRpdGlvbmFs IG9uIG11bHRpcGxlIHBsYXRmb3Jtcy4KPiA+Pj4gCj4gPj4+IEFzIHBhcnQgb2YgdGhpcywgd2Ug cmVuYW1lIHRoZSBkdy1oZG1pICdzcGFyZScgd2hpY2ggaXMgZGVmaW5lZCBhcyB0aGUKPiA+Pj4g U1ZTUkVUIGJpdCBpbiBsYXRlciBkb2N1bWVudGF0aW9uLgo+ID4+IAo+ID4+IEknZCByZWFsbHkg cHJlZmVyIHRoYXQgd2UgZGlkIG5vdCBnbyBkb3duIHRoZSBicm9rZW4gcm91dGUgb2YgYWRkaW5n Cj4gPj4gYSBzZXQgb2YgInF1aXJrIiBmbGFncyAtIGxvb2sgYXQgd2hhdCBhIG1lc3MgU0RIQ0kg aGFzIGJlY29tZSB0aHJvdWdoCj4gPj4gYWxsb3dpbmcgdGhhdCBraW5kIG9mIHByYWN0aWNlLgo+ ID4+IAo+ID4+IEknZCBtdWNoIHJhdGhlciB3ZSBmaW5kIGEgc2FuZXIgc3RydWN0dXJlIHRvIHRo aXMgLSBhbmQgd2Uga25vdyB0aGF0Cj4gPj4gdGhlIGhhcmR3YXJlIGhhcyBJRCByZWdpc3RlcnMg aW4gaXQgd2hpY2ggY2FuIGJlIHVzZWQgKHNvIGZhcikgdG8KPiA+PiBpZGVudGlmeSB0aGUgYnVn Z3kgaGFyZHdhcmUuCj4gPiAKPiA+IEknZCBtdWNoIHByZWZlciBzb21ldGhpbmcgdGhhdCB3b3Vs ZCBhbGxvdyBydW50aW1lIGlkZW50aWZpY2F0aW9uIG9mIHRoZQo+ID4gZGV2aWNlIGFuZCB0aGUg Y29ycmVzcG9uZGluZyBhY3Rpb25zIHRvIGJlIHRha2VuLiBIb3dldmVyLCB0aGUgYW1vdW50IG9m Cj4gPiBkb2N1bWVudGF0aW9uIHdlIGhhdmUgb24gdGhlIERXQyBIRE1JIFRYIElQIGNvcmUgKGFu ZCB0aGUgYXNzb2NpYXRlZCBQSFkpCj4gPiBpcyBwcmV0dHkgbGltaXRlZCwgZ2l2ZW4gdGhhdCBT eW5vcHN5cyBkb2Vzbid0IG1ha2UgdGhlIGRvY3VtZW50YXRpb24KPiA+IGF2YWlsYWJsZSBwdWJs aWNseS4gQ2hhbmdlcyBtYWRlIHRvIHRoZSBJUCBjb3JlIGJ5IGludGVncmF0b3JzIGNvdWxkCj4g PiBjb21wbGljYXRlIHRoaXMgZnVydGhlci4gSSdtIHRyeWluZyB0byBnYXRoZXIgYXMgbXVjaCBp bmZvcm1hdGlvbiBhcwo+ID4gcG9zc2libGUgdG8gbWFrZSBjbGVhbiB0aGUgY29kZSB1cCwgZm9y IGluc3RhbmNlIGJ5IHRyeWluZyB0byBpZGVudGlmeQo+ID4gdGhlIFBIWXMgdXNlZCBvbiB0aGUg dmFyaW91cyBwbGF0Zm9ybXMgd2Ugc3VwcG9ydC4gUHJvZ3Jlc3MgaXMgc2xvdyBvbgo+ID4gdGhh dCBmcm9udCwgdGhlcmUgaXNuJ3QgZW5vdWdoIGxlYWtlZCBpbmZvcm1hdGlvbiBhdmFpbGFibGUg b25saW5lIDotKSBJCj4gPiBoYXZlbid0IGdpdmVuIHVwIHRob3VnaCwgYnV0IEknbGwgbmVlZCBt b3JlIHRpbWUuCj4gPiAKPiA+IEkgZG9uJ3QgbGlrZSBxdWlya3MgbXVjaCBlaXRoZXIuIFRoZXkg YXJlIGhvd2V2ZXIgYWxyZWFkeSB1c2VkIHRvZGF5LCBldmVuCj4gPiBpZiB3ZSB0cmlnZ2VyIHRo ZW0gdGhyb3VnaCBkZXZfdHlwZSBpbnN0ZWFkIG9mIHF1aXJrIGZsYWdzLiBUaGlzIHBhdGNoCj4g PiBjYW1lIGZyb20gYSBwcmV2aW91cyB2ZXJzaW9uIGZvdW5kIGluIGEgQlNQIHRoYXQgc2ltcGx5 IHNwcmlua2xlZCBzZXZlcmFsCj4gPiBpZiAoaGRtaS0+IGRldl90eXBlID09IFJDQVJfSERNSSkg dGhyb3VnaCB0aGUgY29kZS4gRm9yIGluc3RhbmNlLAo+ID4gCj4gPiAtCWlmIChoZG1pLT5kZXZf dHlwZSA9PSBSSzMyODhfSERNSSkKPiA+ICsJaWYgKGhkbWktPmRldl90eXBlID09IFJLMzI4OF9I RE1JIHx8IGhkbWktPmRldl90eXBlID09IFJDQVJfSERNSSkKPiA+IAkJZHdfaGRtaV9waHlfZW5h YmxlX3NwYXJlKGhkbWksIDEpOwo+ID4gCj4gPiB3aGljaCBJIHRoaW5rIGlzIHdvcnNlIHRoYW4g ZmxhZ3MgYXMgaXQgd291bGQgcXVpY2tseSBkZWdlbmVyYXRlIHRvCj4gPiBzcGFnaGV0dGkgY29k ZS4KPiA+IAo+ID4gRm9yIHRoaXMgc3BlY2lmaWMgY2FzZSwgd2UndmUgbWFuYWdlZCB0byBpZGVu dGlmeSB0aGF0IG9uIFJlbmVzYXMKPiA+IHBsYXRmb3JtcyB0aGUgYml0IHNldCBieSB0aGlzIGZ1 bmN0aW9uIGlzIGNhbGxlZCBTVlNSRVQuIEl0cyB1c2FnZSBpc24ndAo+ID4gY2xlYXIgeWV0LCBi dXQgSSBzdXNwZWN0IGl0IHRvIGNvbnRyb2wgb25lIG9mIHRoZSBQSFkgaW5wdXQgY29udHJvbAo+ ID4gc2lnbmFscywgbGlrZSB0aGUgb3RoZXIgYml0cyBpbiB0aGUgc2FtZSByZWdpc3Rlci4gSSdt IHRyeWluZyB0byBnZXQgbW9yZQo+ID4gaW5mb3JtYXRpb24gdG8gY2xlYW4gdGhlIGltcGxlbWVu dGF0aW9uIGZ1cnRoZXIsIGhvcGVmdWxseSB3aXRoIGEgd2F5IHRvCj4gPiBkZXRlcm1pbmUgd2hl dGhlciB0aGUgc2lnbmFsIGlzIHVzZWQgYmFzZWQgb24gUEhZIGlkZW50aWZpY2F0aW9uLgo+IAo+ IFNWU1JFVCBpcyBhIGxvdyBwb3dlciBtb2RlIGNvbnN1bXB0aW9uIGFuZCBpcyBhIFBIWSBpbnB1 dCBzaWduYWwKPiBhcyB5b3Ugc3VnZ2VzdGVkLgoKVGhhbmsgeW91IGZvciB0aGUgY29uZmlybWF0 aW9uLiBXb3VsZCB5b3UgaGFwcGVuIHRvIGtub3cgd2hhdCBTVlNSRVQgc3RhbmRzIApmb3IgPwoK PiBNb3N0IG9mIHRoZSBjb25maWd1cmFibGUgaW5wdXQgc2lnbmFscyBvZiB0aGUgUEhZIGFyZSBh dmFpbGFibGUgYnkgdGhlCj4gY29udHJvbGxlciByZWdiYW5rLiBJIGRvbid0IHRoaW5rIGl0IGlz IHBvc3NpYmxlIHRvIGRldGVjdCB0aGlzIGF0IHJ1bnRpbWUsCj4gSSB0aGluayB5b3UgaGF2ZSBh dCBsZWFzdCB0byBoYXJkY29kZSB3aGljaCB2ZXJzaW9uIG9mIHRoZSBQSFkgeW91IGFyZQo+IHVz aW5nLgo+Cj4gSSB3b3VsZCBzdWdnZXN0IHRoYXQgbWF5YmUgYWxsIHRoZSBQSFkgbG9naWMgc2hv dWxkIGJlIGV4dHJhY3RlZCBhbmQgdGhlbgo+IHVzZSBjYWxsYmFja3MgdG8gZ2x1ZSBjb250cm9s bGVyIGFuZCBwaHkuIFRoZW4sIGRlcGVuZGluZyBvbiB0aGUgUEhZIHlvdQo+IGNvdWxkIHVzZSBl bXB0eSBzdHVicyBpZiwgZm9yIGV4YW1wbGUsIGEgZ2l2ZW4gUEhZIGRpZCBub3Qgc3VwcG9ydCBT VlNSRVQuCj4gU3RpbGwsIEkgZG9uJ3Qga25vdyBpZiB0aGlzIGlzIHRoZSBiZXN0IG9wdGlvbi4g V2hhdCBJIGRvIGtub3cgaXMgdGhhdCB0aGVyZQo+IGFyZSBhIGxhcmdlIG51bWJlciBvZiBQSFkn cyB3aXRoIGRpZmZlcmVudCBmbGF2b3JzIHRoYXQgY2FuIHVzZSB0aGUgc2FtZQo+IGNvbnRyb2xs ZXIuIFRoZSBjb250cm9sbGVyIGhhcyBkaWZmZXJlbnQgdmVyc2lvbnMgYWxzbywgYW5kIGVhY2gg dmVyc2lvbiBjYW4KPiBoYXZlIHF1aXJrcyBidXQgSSB0aGluayBpdCB3b3VsZCBiZSBlYXNpZXIg dG8gbWFuYWdlIHRoaXMgZHJpdmVyIGlmIHdlIGhhZCBhCj4gY2xlYXIgZGlzdGluY3Rpb24gYmV0 d2VlbiBQSFkgYW5kIGNvbnRyb2xsZXIuCgpBZ3JlZWQsIEknZCBsaWtlIHRvIGdvIGluIHRoYXQg ZGlyZWN0aW9uLiBXaGF0IG1ha2VzIGl0IHF1aXRlIGRpZmZpY3VsdCBpcyB0aGUgCmxhY2sgb2Yg ZG9jdW1lbnRhdGlvbiBhYm91dCB0aGUgUEhZcyA6LSkgSSd2ZSBmb3VuZCBzaXggZGlmZmVyZW50 IFBIWSB0eXBlcyAKdGhhdCBjYW4gYmUgaWRlbnRpZmllZCBieSB0aGUgQ09ORklHMl9JRCByZWdp c3RlcjoKCkJpdHMgICAgfCBGaWVsZCAgICAgICAgIAl8IERlc2NyaXB0aW9uCi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQo3LTAgICAgIHwgcGh5dHlwZSAgICAgICAJfCBQSFkgaW50ZXJmYWNlCiAgICAg ICAgfCAgICAgICAgICAgICAgIAl8IDB4MDA6IExlZ2FjeSBQSFkgKEhETUkgVFggUEhZKQogICAg ICAgIHwgICAgICAgICAgICAgICAJfCAweGIyOiBNSEwgUEhZICsgSEVBQyBQSFkKICAgICAgICB8 ICAgICAgICAgICAgICAgCXwgMHhjMjogTUhMIFBIWQogICAgICAgIHwgICAgICAgICAgICAgICAJ fCAweGUyOiBIRE1JIDNEIFRYIFBIWSArIEhFQUMgUEhZCiAgICAgICAgfCAgICAgICAgICAgICAg IAl8IDB4ZjI6IEhETUkgM0QgVFggUEhZCiAgICAgICAgfCAgICAgICAgICAgICAgIAl8IDB4ZjM6 IEhETUkyIFRYIFBIWQoKSSdtIHN1cmUgdGhlcmUncyBtb3JlIHRoYW4gdGhhdC4gSW4gcGFydGlj dWxhciBJIHdvbmRlciBob3cgZXh0ZXJuYWwgdmVuZG9yIApQSFlzIGFyZSBpZGVudGlmaWVkLgoK SSdtIGFsc28gd29uZGVyaW5nIHdoZXRoZXIgdGhlcmUncyBhIG5lZWQgdG8ga2VlcCBzdXBwb3J0 IGZvciB0aGUgbGVnYWN5IFBIWSAKc2lnbmFscyAoRU5UTURTIGFuZCBQRFogaW4gdGhlIFBIWV9D T05GMCByZWdpc3RlcikuIEFzIGZhciBhcyBJIHVuZGVyc3RhbmQgCnRoZXkncmUgbm90IHVzZWQg YnkgdGhlIEdlbjIgUEhZcyAoaW5jbHVkaW5nIHRoZSBleHRlcm5hbCB2ZW5kb3IgUEhZcyksIGJ1 dCBJIApjYW4ndCBjb25maXJtIHRoYXQgd2l0aG91dCBtb3JlIGRvY3VtZW50YXRpb24gKGFsdGhv dWdoIEkgY291bGQgdGVzdCB0aGF0IG9uIAp0aGUgcGxhdGZvcm1zIEkgaGF2ZSBhY2Nlc3MgdG8p LgoKPiA+IFRoaXMgaXMgYWxsIHdvcmsgaW4gcHJvZ3Jlc3MsIGFuZCBpZiBhbnlvbmUgaGFzIGFj Y2VzcyB0byBhbnkKPiA+IGRvY3VtZW50YXRpb24gYW5kIGNhbiBwcm92aWRlIGFkZGl0aW9uYWwg aW5mb3JtYXRpb24gSSdsbCBiZSBncmF0ZWZ1bC4KPiA+IAo+ID4+PiBTaWduZWQtb2ZmLWJ5OiBL aWVyYW4gQmluZ2hhbSA8a2llcmFuLmJpbmdoYW0rcmVuZXNhc0BpZGVhc29uYm9hcmQuY29tPgo+ ID4+PiBTaWduZWQtb2ZmLWJ5OiBMYXVyZW50IFBpbmNoYXJ0Cj4gPj4+IDxsYXVyZW50LnBpbmNo YXJ0K3JlbmVzYXNAaWRlYXNvbmJvYXJkLmNvbT4KPiA+Pj4gLS0tCj4gPj4+IAo+ID4+PiAgZHJp dmVycy9ncHUvZHJtL2JyaWRnZS9kdy1oZG1pLmMgICAgICAgICAgICB8IDE0ICsrKysrKy0tLS0t LS0tCj4gPj4+ICBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2R3LWhkbWkuaCAgICAgICAgICAgIHwg IDQgKystLQo+ID4+PiAgZHJpdmVycy9ncHUvZHJtL2lteC9kd19oZG1pLWlteC5jICAgICAgICAg ICB8ICAzICstLQo+ID4+PiAgZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2R3X2hkbWktcm9ja2No aXAuYyB8ICAyICstCj4gPj4+ICBpbmNsdWRlL2RybS9icmlkZ2UvZHdfaGRtaS5oICAgICAgICAg ICAgICAgIHwgMTIgKysrKystLS0tLS0tCj4gPj4+ICA1IGZpbGVzIGNoYW5nZWQsIDE1IGluc2Vy dGlvbnMoKyksIDIwIGRlbGV0aW9ucygtKQoKLS0gClJlZ2FyZHMsCgpMYXVyZW50IFBpbmNoYXJ0 CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2 ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9s aXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK