From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: Laurent Pinchart To: Rob Herring Cc: Laurent Pinchart , dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-renesas-soc@vger.kernel.org, Tomi Valkeinen , linux-media@vger.kernel.org Subject: Re: [PATCH 1/2] devicetree/bindings: display: Add bindings for LVDS panels Date: Sun, 09 Oct 2016 19:33:21 +0300 Message-ID: <1645400.RKG9rcP36z@avalon> In-Reply-To: <20161009012939.GY18158@rob-hp-laptop> References: <1475598210-26857-1-git-send-email-laurent.pinchart+renesas@ideasonboard.com> <1475598210-26857-2-git-send-email-laurent.pinchart+renesas@ideasonboard.com> <20161009012939.GY18158@rob-hp-laptop> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" Sender: devicetree-owner@vger.kernel.org List-ID: Hi Rob, On Saturday 08 Oct 2016 20:29:39 Rob Herring wrote: > On Tue, Oct 04, 2016 at 07:23:29PM +0300, Laurent Pinchart wrote: > > LVDS is a physical layer specification defined in ANSI/TIA/EIA-644-A. > > Multiple incompatible data link layers have been used over time to > > transmit image data to LVDS panels. This binding supports display panels > > compatible with the JEIDA-59-1999, Open-LDI and VESA SWPG > > specifications. > > > > Signed-off-by: Laurent Pinchart > > > > --- > > > > .../bindings/display/panel/panel-lvds.txt | 119 ++++++++++++++++ > > 1 file changed, 119 insertions(+) > > create mode 100644 > > Documentation/devicetree/bindings/display/panel/panel-lvds.txt> > > diff --git > > a/Documentation/devicetree/bindings/display/panel/panel-lvds.txt > > b/Documentation/devicetree/bindings/display/panel/panel-lvds.txt new file > > mode 100644 > > index 000000000000..250861f2673e > > --- /dev/null > > +++ b/Documentation/devicetree/bindings/display/panel/panel-lvds.txt > > @@ -0,0 +1,119 @@ > > +Generic LVDS Panel > > +================== > > + > > +LVDS is a physical layer specification defined in ANSI/TIA/EIA-644-A. > > Multiple > > +incompatible data link layers have been used over time to transmit image > > data > > +to LVDS panels. This bindings supports display panels compatible with the > > +following specifications. > > + > > +[JEIDA] "Digital Interface Standards for Monitor", JEIDA-59-1999, > > February > > +1999 (Version 1.0), Japan Electronic Industry Development Association > > (JEIDA) > > +[LDI] "Open LVDS Display Interface", May 1999 (Version 0.95), National > > +Semiconductor > > +[VESA] "VESA Notebook Panel Standard", October 2007 (Version 1.0), Video > > +Electronics Standards Association (VESA) > > + > > +Device compatible with those specifications have been marketed under the > > +FPD-Link and FlatLink brands. > > + > > + > > +Required properties: > > +- compatible: shall contain "panel-lvds" > > Maybe as a fallback, but on its own, no way. Which brings an interesting question: when designing generic DT bindings, what's the rule regarding > > +- width-mm: panel display width in millimeters > > +- height-mm: panel display height in millimeters > > This is already documented for all panels IIRC. Note that this DT binding has nothing to do with the simple-panel binding. It is instead similar to the panel-dpi and panel-dsi-cm bindings (which currently don't but should specify the panel size in DT). The LVDS panel driver will *not* include any panel-specific information such as size or timings, these are specified in DT. > > +- data-mapping: the color signals mapping order, "jeida-18", "jeida-24" > > + or "vesa-24" > > Maybe this should be part of the compatible. I've thought about it, but given that some panels support selecting between multiple modes (through a mode pin that is usually hardwired), I believe a separate DT property makes sense. Furthermore, LVDS data organization is controlled by the combination of both data-mapping and data-mirror. It makes little sense from my point of view to handle one as part of the compatible string and the other one as a separate property. > > +Optional properties: > > +- label: a symbolic name for the panel > > Could be for any panel or display connector. Yes, but I'm not sure to understand how that's relevant :-) > > +- avdd-supply: reference to the regulator that powers the panel > analog supply > > +- dvdd-supply: reference to the regulator that powers the panel digital > > supply > > Which one has to be powered on first, what voltage, and with what time > in between? This is why "generic" or "simple" bindings don't work. The above-mentioned specifications also define connectors, pinouts and power supplies, but many LVDS panels compatible with the LVDS physical and data layers use a different connector with small differences in power supplies. I believe the voltage is irrelevant here, it doesn't need to be controlled by the operating system. Power supplies order and timing is relevant, I'll investigate the level of differences between panels. I'm also fine with dropping those properties for now. > > +- data-mirror: if set, reverse the bit order on all data lanes (6 to 0 > > instead > > + of 0 to 6) > > + > > +Required nodes: > > +- One "panel-timing" node containing video timings, in accordance with > > the > > + display timing bindings defined in > > + Documentation/devicetree/bindings/display/display-timing.txt. > > I'll let Thierry comment on this one. > > > +- One "port" child node for the LVDS input port, in accordance with the > > + video interface bindings defined in > > + Documentation/devicetree/bindings/media/video-interfaces.txt. > > + > > + > > +LVDS data mappings are defined as follows. > > + > > +- "jeida-18" - 18-bit data mapping compatible with the [JEIDA], [LDI] and > > + [VESA] specifications. Data are transferred as follows on 3 LVDS lanes. > > + > > +Slot 0 1 2 3 4 5 6 > > + ________________ _________________ > > +Clock \_______________________/ > > + ______ ______ ______ ______ ______ ______ ______ > > +DATA0 ><__G0__><__R5__><__R4__><__R3__><__R2__><__R1__><__R0__>< > > +DATA1 ><__B1__><__B0__><__G5__><__G4__><__G3__><__G2__><__G1__>< > > +DATA2 ><_CTL2_><_CTL1_><_CTL0_><__B5__><__B4__><__B3__><__B2__>< > > + > > +- "jeida-24" - 24-bit data mapping compatible with the [DSIM] and [LDI] > > + specifications. Data are transferred as follows on 4 LVDS lanes. > > + > > +Slot 0 1 2 3 4 5 6 > > + ________________ _________________ > > +Clock \_______________________/ > > + ______ ______ ______ ______ ______ ______ ______ > > +DATA0 ><__G2__><__R7__><__R6__><__R5__><__R4__><__R3__><__R2__>< > > +DATA1 ><__B3__><__B2__><__G7__><__G6__><__G5__><__G4__><__G3__>< > > +DATA2 ><_CTL2_><_CTL1_><_CTL0_><__B7__><__B6__><__B5__><__B4__>< > > +DATA3 ><_CTL3_><__B1__><__B0__><__G1__><__G0__><__R1__><__R0__>< > > + > > +- "vesa-24" - 24-bit data mapping compatible with the [VESA] > > specification. + Data are transferred as follows on 4 LVDS lanes. > > + > > +Slot 0 1 2 3 4 5 6 > > + ________________ _________________ > > +Clock \_______________________/ > > + ______ ______ ______ ______ ______ ______ ______ > > +DATA0 ><__G0__><__R5__><__R4__><__R3__><__R2__><__R1__><__R0__>< > > +DATA1 ><__B1__><__B0__><__G5__><__G4__><__G3__><__G2__><__G1__>< > > +DATA2 ><_CTL2_><_CTL1_><_CTL0_><__B5__><__B4__><__B3__><__B2__>< > > +DATA3 ><_CTL3_><__B7__><__B6__><__G7__><__G6__><__R7__><__R6__>< > > + > > + > > +Control signals are mapped as follows. > > + > > +CTL0: HSync > > +CTL1: VSync > > +CTL2: Data Enable > > +CTL3: 0 > > + > > + > > +Example > > +------- > > + > > +panel { > > + compatible = "mitsubishi,aa121td01", "panel-lvds"; > > + label = "lcd"; > > Kind of useless in your example. I can rename that to "LCD0" for instance. > > + > > + width-mm = <261>; > > + height-mm = <163>; > > + > > + data-mapping = "jeida-24"; > > + > > + panel-timing { > > + /* 1280x800 @60Hz */ > > + clock-frequency = <71000000>; > > + hactive = <1280>; > > + vactive = <800>; > > + hsync-len = <70>; > > + hfront-porch = <20>; > > + hback-porch = <70>; > > + vsync-len = <5>; > > + vfront-porch = <3>; > > + vback-porch = <15>; > > + }; > > + > > + port { > > + panel_in: endpoint { > > + remote-endpoint = <&lvds_connector>; > > + }; > > + }; > > +}; -- Regards, Laurent Pinchart From mboxrd@z Thu Jan 1 00:00:00 1970 From: Laurent Pinchart Subject: Re: [PATCH 1/2] devicetree/bindings: display: Add bindings for LVDS panels Date: Sun, 09 Oct 2016 19:33:21 +0300 Message-ID: <1645400.RKG9rcP36z@avalon> References: <1475598210-26857-1-git-send-email-laurent.pinchart+renesas@ideasonboard.com> <1475598210-26857-2-git-send-email-laurent.pinchart+renesas@ideasonboard.com> <20161009012939.GY18158@rob-hp-laptop> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20161009012939.GY18158@rob-hp-laptop> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Rob Herring Cc: devicetree@vger.kernel.org, Laurent Pinchart , dri-devel@lists.freedesktop.org, linux-renesas-soc@vger.kernel.org, Tomi Valkeinen , linux-media@vger.kernel.org List-Id: devicetree@vger.kernel.org SGkgUm9iLAoKT24gU2F0dXJkYXkgMDggT2N0IDIwMTYgMjA6Mjk6MzkgUm9iIEhlcnJpbmcgd3Jv dGU6Cj4gT24gVHVlLCBPY3QgMDQsIDIwMTYgYXQgMDc6MjM6MjlQTSArMDMwMCwgTGF1cmVudCBQ aW5jaGFydCB3cm90ZToKPiA+IExWRFMgaXMgYSBwaHlzaWNhbCBsYXllciBzcGVjaWZpY2F0aW9u IGRlZmluZWQgaW4gQU5TSS9USUEvRUlBLTY0NC1BLgo+ID4gTXVsdGlwbGUgaW5jb21wYXRpYmxl IGRhdGEgbGluayBsYXllcnMgaGF2ZSBiZWVuIHVzZWQgb3ZlciB0aW1lIHRvCj4gPiB0cmFuc21p dCBpbWFnZSBkYXRhIHRvIExWRFMgcGFuZWxzLiBUaGlzIGJpbmRpbmcgc3VwcG9ydHMgZGlzcGxh eSBwYW5lbHMKPiA+IGNvbXBhdGlibGUgd2l0aCB0aGUgSkVJREEtNTktMTk5OSwgT3Blbi1MREkg YW5kIFZFU0EgU1dQRwo+ID4gc3BlY2lmaWNhdGlvbnMuCj4gPiAKPiA+IFNpZ25lZC1vZmYtYnk6 IExhdXJlbnQgUGluY2hhcnQKPiA+IDxsYXVyZW50LnBpbmNoYXJ0K3JlbmVzYXNAaWRlYXNvbmJv YXJkLmNvbT4KPiA+IC0tLQo+ID4gCj4gPiAgLi4uL2JpbmRpbmdzL2Rpc3BsYXkvcGFuZWwvcGFu ZWwtbHZkcy50eHQgICAgICAgICAgfCAxMTkgKysrKysrKysrKysrKysrKwo+ID4gIDEgZmlsZSBj aGFuZ2VkLCAxMTkgaW5zZXJ0aW9ucygrKQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NAo+ID4gIERv Y3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNwbGF5L3BhbmVsL3BhbmVsLWx2ZHMu dHh0PiAKPiA+IGRpZmYgLS1naXQKPiA+IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRp bmdzL2Rpc3BsYXkvcGFuZWwvcGFuZWwtbHZkcy50eHQKPiA+IGIvRG9jdW1lbnRhdGlvbi9kZXZp Y2V0cmVlL2JpbmRpbmdzL2Rpc3BsYXkvcGFuZWwvcGFuZWwtbHZkcy50eHQgbmV3IGZpbGUKPiA+ IG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLjI1MDg2MWYyNjczZQo+ID4gLS0t IC9kZXYvbnVsbAo+ID4gKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Rp c3BsYXkvcGFuZWwvcGFuZWwtbHZkcy50eHQKPiA+IEBAIC0wLDAgKzEsMTE5IEBACj4gPiArR2Vu ZXJpYyBMVkRTIFBhbmVsCj4gPiArPT09PT09PT09PT09PT09PT09Cj4gPiArCj4gPiArTFZEUyBp cyBhIHBoeXNpY2FsIGxheWVyIHNwZWNpZmljYXRpb24gZGVmaW5lZCBpbiBBTlNJL1RJQS9FSUEt NjQ0LUEuCj4gPiBNdWx0aXBsZQo+ID4gK2luY29tcGF0aWJsZSBkYXRhIGxpbmsgbGF5ZXJzIGhh dmUgYmVlbiB1c2VkIG92ZXIgdGltZSB0byB0cmFuc21pdCBpbWFnZQo+ID4gZGF0YQo+ID4gK3Rv IExWRFMgcGFuZWxzLiBUaGlzIGJpbmRpbmdzIHN1cHBvcnRzIGRpc3BsYXkgcGFuZWxzIGNvbXBh dGlibGUgd2l0aCB0aGUKPiA+ICtmb2xsb3dpbmcgc3BlY2lmaWNhdGlvbnMuCj4gPiArCj4gPiAr W0pFSURBXSAiRGlnaXRhbCBJbnRlcmZhY2UgU3RhbmRhcmRzIGZvciBNb25pdG9yIiwgSkVJREEt NTktMTk5OSwKPiA+IEZlYnJ1YXJ5Cj4gPiArMTk5OSAoVmVyc2lvbiAxLjApLCBKYXBhbiBFbGVj dHJvbmljIEluZHVzdHJ5IERldmVsb3BtZW50IEFzc29jaWF0aW9uCj4gPiAoSkVJREEpCj4gPiAr W0xESV0gIk9wZW4gTFZEUyBEaXNwbGF5IEludGVyZmFjZSIsIE1heSAxOTk5IChWZXJzaW9uIDAu OTUpLCBOYXRpb25hbAo+ID4gK1NlbWljb25kdWN0b3IKPiA+ICtbVkVTQV0gIlZFU0EgTm90ZWJv b2sgUGFuZWwgU3RhbmRhcmQiLCBPY3RvYmVyIDIwMDcgKFZlcnNpb24gMS4wKSwgVmlkZW8KPiA+ ICtFbGVjdHJvbmljcyBTdGFuZGFyZHMgQXNzb2NpYXRpb24gKFZFU0EpCj4gPiArCj4gPiArRGV2 aWNlIGNvbXBhdGlibGUgd2l0aCB0aG9zZSBzcGVjaWZpY2F0aW9ucyBoYXZlIGJlZW4gbWFya2V0 ZWQgdW5kZXIgdGhlCj4gPiArRlBELUxpbmsgYW5kIEZsYXRMaW5rIGJyYW5kcy4KPiA+ICsKPiA+ ICsKPiA+ICtSZXF1aXJlZCBwcm9wZXJ0aWVzOgo+ID4gKy0gY29tcGF0aWJsZTogc2hhbGwgY29u dGFpbiAicGFuZWwtbHZkcyIKPiAKPiBNYXliZSBhcyBhIGZhbGxiYWNrLCBidXQgb24gaXRzIG93 biwgbm8gd2F5LgoKV2hpY2ggYnJpbmdzIGFuIGludGVyZXN0aW5nIHF1ZXN0aW9uOiB3aGVuIGRl c2lnbmluZyBnZW5lcmljIERUIGJpbmRpbmdzLCAKd2hhdCdzIHRoZSBydWxlIHJlZ2FyZGluZyAK Cj4gPiArLSB3aWR0aC1tbTogcGFuZWwgZGlzcGxheSB3aWR0aCBpbiBtaWxsaW1ldGVycwo+ID4g Ky0gaGVpZ2h0LW1tOiBwYW5lbCBkaXNwbGF5IGhlaWdodCBpbiBtaWxsaW1ldGVycwo+IAo+IFRo aXMgaXMgYWxyZWFkeSBkb2N1bWVudGVkIGZvciBhbGwgcGFuZWxzIElJUkMuCgpOb3RlIHRoYXQg dGhpcyBEVCBiaW5kaW5nIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggdGhlIHNpbXBsZS1wYW5lbCBi aW5kaW5nLiBJdCAKaXMgaW5zdGVhZCBzaW1pbGFyIHRvIHRoZSBwYW5lbC1kcGkgYW5kIHBhbmVs LWRzaS1jbSBiaW5kaW5ncyAod2hpY2ggY3VycmVudGx5IApkb24ndCBidXQgc2hvdWxkIHNwZWNp ZnkgdGhlIHBhbmVsIHNpemUgaW4gRFQpLiBUaGUgTFZEUyBwYW5lbCBkcml2ZXIgd2lsbCAKKm5v dCogaW5jbHVkZSBhbnkgcGFuZWwtc3BlY2lmaWMgaW5mb3JtYXRpb24gc3VjaCBhcyBzaXplIG9y IHRpbWluZ3MsIHRoZXNlIAphcmUgc3BlY2lmaWVkIGluIERULgoKPiA+ICstIGRhdGEtbWFwcGlu ZzogdGhlIGNvbG9yIHNpZ25hbHMgbWFwcGluZyBvcmRlciwgImplaWRhLTE4IiwgImplaWRhLTI0 Igo+ID4gKyAgb3IgInZlc2EtMjQiCj4gCj4gTWF5YmUgdGhpcyBzaG91bGQgYmUgcGFydCBvZiB0 aGUgY29tcGF0aWJsZS4KCkkndmUgdGhvdWdodCBhYm91dCBpdCwgYnV0IGdpdmVuIHRoYXQgc29t ZSBwYW5lbHMgc3VwcG9ydCBzZWxlY3RpbmcgYmV0d2VlbiAKbXVsdGlwbGUgbW9kZXMgKHRocm91 Z2ggYSBtb2RlIHBpbiB0aGF0IGlzIHVzdWFsbHkgaGFyZHdpcmVkKSwgSSBiZWxpZXZlIGEgCnNl cGFyYXRlIERUIHByb3BlcnR5IG1ha2VzIHNlbnNlLgoKRnVydGhlcm1vcmUsIExWRFMgZGF0YSBv cmdhbml6YXRpb24gaXMgY29udHJvbGxlZCBieSB0aGUgY29tYmluYXRpb24gb2YgYm90aCAKZGF0 YS1tYXBwaW5nIGFuZCBkYXRhLW1pcnJvci4gSXQgbWFrZXMgbGl0dGxlIHNlbnNlIGZyb20gbXkg cG9pbnQgb2YgdmlldyB0byAKaGFuZGxlIG9uZSBhcyBwYXJ0IG9mIHRoZSBjb21wYXRpYmxlIHN0 cmluZyBhbmQgdGhlIG90aGVyIG9uZSBhcyBhIHNlcGFyYXRlIApwcm9wZXJ0eS4KCj4gPiArT3B0 aW9uYWwgcHJvcGVydGllczoKPiA+ICstIGxhYmVsOiBhIHN5bWJvbGljIG5hbWUgZm9yIHRoZSBw YW5lbAo+IAo+IENvdWxkIGJlIGZvciBhbnkgcGFuZWwgb3IgZGlzcGxheSBjb25uZWN0b3IuCgpZ ZXMsIGJ1dCBJJ20gbm90IHN1cmUgdG8gdW5kZXJzdGFuZCBob3cgdGhhdCdzIHJlbGV2YW50IDot KQoKPiA+ICstIGF2ZGQtc3VwcGx5OiByZWZlcmVuY2UgdG8gdGhlIHJlZ3VsYXRvciB0aGF0IHBv d2VycyB0aGUgcGFuZWwKPiBhbmFsb2cgc3VwcGx5Cj4gPiArLSBkdmRkLXN1cHBseTogcmVmZXJl bmNlIHRvIHRoZSByZWd1bGF0b3IgdGhhdCBwb3dlcnMgdGhlIHBhbmVsIGRpZ2l0YWwKPiA+IHN1 cHBseQo+Cj4gV2hpY2ggb25lIGhhcyB0byBiZSBwb3dlcmVkIG9uIGZpcnN0LCB3aGF0IHZvbHRh Z2UsIGFuZCB3aXRoIHdoYXQgdGltZQo+IGluIGJldHdlZW4/IFRoaXMgaXMgd2h5ICJnZW5lcmlj IiBvciAic2ltcGxlIiBiaW5kaW5ncyBkb24ndCB3b3JrLgoKVGhlIGFib3ZlLW1lbnRpb25lZCBz cGVjaWZpY2F0aW9ucyBhbHNvIGRlZmluZSBjb25uZWN0b3JzLCBwaW5vdXRzIGFuZCBwb3dlciAK c3VwcGxpZXMsIGJ1dCBtYW55IExWRFMgcGFuZWxzIGNvbXBhdGlibGUgd2l0aCB0aGUgTFZEUyBw aHlzaWNhbCBhbmQgZGF0YSAKbGF5ZXJzIHVzZSBhIGRpZmZlcmVudCBjb25uZWN0b3Igd2l0aCBz bWFsbCBkaWZmZXJlbmNlcyBpbiBwb3dlciBzdXBwbGllcy4KCkkgYmVsaWV2ZSB0aGUgdm9sdGFn ZSBpcyBpcnJlbGV2YW50IGhlcmUsIGl0IGRvZXNuJ3QgbmVlZCB0byBiZSBjb250cm9sbGVkIGJ5 IAp0aGUgb3BlcmF0aW5nIHN5c3RlbS4gUG93ZXIgc3VwcGxpZXMgb3JkZXIgYW5kIHRpbWluZyBp cyByZWxldmFudCwgSSdsbCAKaW52ZXN0aWdhdGUgdGhlIGxldmVsIG9mIGRpZmZlcmVuY2VzIGJl dHdlZW4gcGFuZWxzLiBJJ20gYWxzbyBmaW5lIHdpdGggCmRyb3BwaW5nIHRob3NlIHByb3BlcnRp ZXMgZm9yIG5vdy4KCj4gPiArLSBkYXRhLW1pcnJvcjogaWYgc2V0LCByZXZlcnNlIHRoZSBiaXQg b3JkZXIgb24gYWxsIGRhdGEgbGFuZXMgKDYgdG8gMAo+ID4gaW5zdGVhZAo+ID4gKyAgb2YgMCB0 byA2KQo+ID4gKwo+ID4gK1JlcXVpcmVkIG5vZGVzOgo+ID4gKy0gT25lICJwYW5lbC10aW1pbmci IG5vZGUgY29udGFpbmluZyB2aWRlbyB0aW1pbmdzLCBpbiBhY2NvcmRhbmNlIHdpdGgKPiA+IHRo ZQo+ID4gKyAgZGlzcGxheSB0aW1pbmcgYmluZGluZ3MgZGVmaW5lZCBpbgo+ID4gKyAgRG9jdW1l bnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Rpc3BsYXkvZGlzcGxheS10aW1pbmcudHh0Lgo+ IAo+IEknbGwgbGV0IFRoaWVycnkgY29tbWVudCBvbiB0aGlzIG9uZS4KPiAKPiA+ICstIE9uZSAi cG9ydCIgY2hpbGQgbm9kZSBmb3IgdGhlIExWRFMgaW5wdXQgcG9ydCwgaW4gYWNjb3JkYW5jZSB3 aXRoIHRoZQo+ID4gKyAgdmlkZW8gaW50ZXJmYWNlIGJpbmRpbmdzIGRlZmluZWQgaW4KPiA+ICsg IERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZWRpYS92aWRlby1pbnRlcmZhY2Vz LnR4dC4KPiA+ICsKPiA+ICsKPiA+ICtMVkRTIGRhdGEgbWFwcGluZ3MgYXJlIGRlZmluZWQgYXMg Zm9sbG93cy4KPiA+ICsKPiA+ICstICJqZWlkYS0xOCIgLSAxOC1iaXQgZGF0YSBtYXBwaW5nIGNv bXBhdGlibGUgd2l0aCB0aGUgW0pFSURBXSwgW0xESV0gYW5kCj4gPiArICBbVkVTQV0gc3BlY2lm aWNhdGlvbnMuIERhdGEgYXJlIHRyYW5zZmVycmVkIGFzIGZvbGxvd3Mgb24gMyBMVkRTIGxhbmVz Lgo+ID4gKwo+ID4gK1Nsb3QJICAgIDAgICAgICAgMSAgICAgICAyICAgICAgIDMgICAgICAgNCAg ICAgICA1ICAgICAgIDYKPiA+ICsJX19fX19fX19fX19fX19fXyAgICAgICAgICAgICAgICAgICAg ICAgICBfX19fX19fX19fX19fX19fXwo+ID4gK0Nsb2NrCSAgICAgICAgICAgICAgICBcX19fX19f X19fX19fX19fX19fX19fX18vCj4gPiArCSAgX19fX19fICBfX19fX18gIF9fX19fXyAgX19fX19f ICBfX19fX18gIF9fX19fXyAgX19fX19fCj4gPiArREFUQTAJPjxfX0cwX18+PF9fUjVfXz48X19S NF9fPjxfX1IzX18+PF9fUjJfXz48X19SMV9fPjxfX1IwX18+PAo+ID4gK0RBVEExCT48X19CMV9f PjxfX0IwX18+PF9fRzVfXz48X19HNF9fPjxfX0czX18+PF9fRzJfXz48X19HMV9fPjwKPiA+ICtE QVRBMgk+PF9DVEwyXz48X0NUTDFfPjxfQ1RMMF8+PF9fQjVfXz48X19CNF9fPjxfX0IzX18+PF9f QjJfXz48Cj4gPiArCj4gPiArLSAiamVpZGEtMjQiIC0gMjQtYml0IGRhdGEgbWFwcGluZyBjb21w YXRpYmxlIHdpdGggdGhlIFtEU0lNXSBhbmQgW0xESV0KPiA+ICsgIHNwZWNpZmljYXRpb25zLiBE YXRhIGFyZSB0cmFuc2ZlcnJlZCBhcyBmb2xsb3dzIG9uIDQgTFZEUyBsYW5lcy4KPiA+ICsKPiA+ ICtTbG90CSAgICAwICAgICAgIDEgICAgICAgMiAgICAgICAzICAgICAgIDQgICAgICAgNSAgICAg ICA2Cj4gPiArCV9fX19fX19fX19fX19fX18gICAgICAgICAgICAgICAgICAgICAgICAgX19fX19f X19fX19fX19fX18KPiA+ICtDbG9jawkgICAgICAgICAgICAgICAgXF9fX19fX19fX19fX19fX19f X19fX19fLwo+ID4gKwkgIF9fX19fXyAgX19fX19fICBfX19fX18gIF9fX19fXyAgX19fX19fICBf X19fX18gIF9fX19fXwo+ID4gK0RBVEEwCT48X19HMl9fPjxfX1I3X18+PF9fUjZfXz48X19SNV9f PjxfX1I0X18+PF9fUjNfXz48X19SMl9fPjwKPiA+ICtEQVRBMQk+PF9fQjNfXz48X19CMl9fPjxf X0c3X18+PF9fRzZfXz48X19HNV9fPjxfX0c0X18+PF9fRzNfXz48Cj4gPiArREFUQTIJPjxfQ1RM Ml8+PF9DVEwxXz48X0NUTDBfPjxfX0I3X18+PF9fQjZfXz48X19CNV9fPjxfX0I0X18+PAo+ID4g K0RBVEEzCT48X0NUTDNfPjxfX0IxX18+PF9fQjBfXz48X19HMV9fPjxfX0cwX18+PF9fUjFfXz48 X19SMF9fPjwKPiA+ICsKPiA+ICstICJ2ZXNhLTI0IiAtIDI0LWJpdCBkYXRhIG1hcHBpbmcgY29t cGF0aWJsZSB3aXRoIHRoZSBbVkVTQV0KPiA+IHNwZWNpZmljYXRpb24uICsgIERhdGEgYXJlIHRy YW5zZmVycmVkIGFzIGZvbGxvd3Mgb24gNCBMVkRTIGxhbmVzLgo+ID4gKwo+ID4gK1Nsb3QJICAg IDAgICAgICAgMSAgICAgICAyICAgICAgIDMgICAgICAgNCAgICAgICA1ICAgICAgIDYKPiA+ICsJ X19fX19fX19fX19fX19fXyAgICAgICAgICAgICAgICAgICAgICAgICBfX19fX19fX19fX19fX19f Xwo+ID4gK0Nsb2NrCSAgICAgICAgICAgICAgICBcX19fX19fX19fX19fX19fX19fX19fX18vCj4g PiArCSAgX19fX19fICBfX19fX18gIF9fX19fXyAgX19fX19fICBfX19fX18gIF9fX19fXyAgX19f X19fCj4gPiArREFUQTAJPjxfX0cwX18+PF9fUjVfXz48X19SNF9fPjxfX1IzX18+PF9fUjJfXz48 X19SMV9fPjxfX1IwX18+PAo+ID4gK0RBVEExCT48X19CMV9fPjxfX0IwX18+PF9fRzVfXz48X19H NF9fPjxfX0czX18+PF9fRzJfXz48X19HMV9fPjwKPiA+ICtEQVRBMgk+PF9DVEwyXz48X0NUTDFf PjxfQ1RMMF8+PF9fQjVfXz48X19CNF9fPjxfX0IzX18+PF9fQjJfXz48Cj4gPiArREFUQTMJPjxf Q1RMM18+PF9fQjdfXz48X19CNl9fPjxfX0c3X18+PF9fRzZfXz48X19SN19fPjxfX1I2X18+PAo+ ID4gKwo+ID4gKwo+ID4gK0NvbnRyb2wgc2lnbmFscyBhcmUgbWFwcGVkIGFzIGZvbGxvd3MuCj4g PiArCj4gPiArQ1RMMDogSFN5bmMKPiA+ICtDVEwxOiBWU3luYwo+ID4gK0NUTDI6IERhdGEgRW5h YmxlCj4gPiArQ1RMMzogMAo+ID4gKwo+ID4gKwo+ID4gK0V4YW1wbGUKPiA+ICstLS0tLS0tCj4g PiArCj4gPiArcGFuZWwgewo+ID4gKwljb21wYXRpYmxlID0gIm1pdHN1YmlzaGksYWExMjF0ZDAx IiwgInBhbmVsLWx2ZHMiOwo+ID4gKwlsYWJlbCA9ICJsY2QiOwo+IAo+IEtpbmQgb2YgdXNlbGVz cyBpbiB5b3VyIGV4YW1wbGUuCgpJIGNhbiByZW5hbWUgdGhhdCB0byAiTENEMCIgZm9yIGluc3Rh bmNlLgoKPiA+ICsKPiA+ICsJd2lkdGgtbW0gPSA8MjYxPjsKPiA+ICsJaGVpZ2h0LW1tID0gPDE2 Mz47Cj4gPiArCj4gPiArCWRhdGEtbWFwcGluZyA9ICJqZWlkYS0yNCI7Cj4gPiArCj4gPiArCXBh bmVsLXRpbWluZyB7Cj4gPiArCQkvKiAxMjgweDgwMCBANjBIeiAqLwo+ID4gKwkJY2xvY2stZnJl cXVlbmN5ID0gPDcxMDAwMDAwPjsKPiA+ICsJCWhhY3RpdmUgPSA8MTI4MD47Cj4gPiArCQl2YWN0 aXZlID0gPDgwMD47Cj4gPiArCQloc3luYy1sZW4gPSA8NzA+Owo+ID4gKwkJaGZyb250LXBvcmNo ID0gPDIwPjsKPiA+ICsJCWhiYWNrLXBvcmNoID0gPDcwPjsKPiA+ICsJCXZzeW5jLWxlbiA9IDw1 PjsKPiA+ICsJCXZmcm9udC1wb3JjaCA9IDwzPjsKPiA+ICsJCXZiYWNrLXBvcmNoID0gPDE1PjsK PiA+ICsJfTsKPiA+ICsKPiA+ICsJcG9ydCB7Cj4gPiArCQlwYW5lbF9pbjogZW5kcG9pbnQgewo+ ID4gKwkJCXJlbW90ZS1lbmRwb2ludCA9IDwmbHZkc19jb25uZWN0b3I+Owo+ID4gKwkJfTsKPiA+ ICsJfTsKPiA+ICt9OwoKLS0gClJlZ2FyZHMsCgpMYXVyZW50IFBpbmNoYXJ0CgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBs aXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVz a3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK