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=-3.5 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED 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 B487CC5DF60 for ; Thu, 7 Nov 2019 16:55:48 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 8863F2077C for ; Thu, 7 Nov 2019 16:55:48 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=goldelico.com header.i=@goldelico.com header.b="ZMD5AUVX" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389722AbfKGQzr (ORCPT ); Thu, 7 Nov 2019 11:55:47 -0500 Received: from mo4-p02-ob.smtp.rzone.de ([81.169.146.169]:12580 "EHLO mo4-p02-ob.smtp.rzone.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727606AbfKGQzq (ORCPT ); Thu, 7 Nov 2019 11:55:46 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1573145743; s=strato-dkim-0002; d=goldelico.com; h=To:References:Message-Id:Cc:Date:In-Reply-To:From:Subject: X-RZG-CLASS-ID:X-RZG-AUTH:From:Subject:Sender; bh=6eRmOVOL1dtrZBZdnx7EAukovBmLX34tKDa/RotG/nY=; b=ZMD5AUVXqp8QFrvEYdnEXJzFLibGFaDEQDaUUogHvt/YsVYpO1SPtS5kBuBgGTPGmO 4i+u5vT1KkAkDyOCiTtX/Ob8dMFohT69mlIPuWdG18j/eUXltUUNrmY+dLx+iG6A1rJU 7H5YDR4cMX0xGp9P8TWw0EEG69gDmGJBc/xCnbz64xpKTmIVKM8RFCZcXYciSnlL3Aoz /Y8QktV0c6WWBJ5z8ulbPlBoemPsPp7GSJrRtmTGoSK1tKmezrlzvYbzM+4qCT6iW5jy L5FpdjIm7WLXNYQUcPseu9KseSzXnI59VTi9RS1Tzggpzbv6c88MowjQaKv+UoeuRD2h qYQg== X-RZG-AUTH: ":JGIXVUS7cutRB/49FwqZ7WcJeFKiMgPgp8VKxflSZ1P34KBj7wpz8NMGH/PrwDCq1eY=" X-RZG-CLASS-ID: mo00 Received: from imac.fritz.box by smtp.strato.de (RZmta 44.29.0 DYNA|AUTH) with ESMTPSA id L09db3vA7GtWfwD (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (curve secp521r1 with 521 ECDH bits, eq. 15360 bits RSA)) (Client did not present a certificate); Thu, 7 Nov 2019 17:55:32 +0100 (CET) Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 9.3 \(3124\)) Subject: Re: [PATCH v2 1/8] RFC: dt-bindings: add img,pvrsgx.yaml for Imagination GPUs From: "H. Nikolaus Schaller" In-Reply-To: Date: Thu, 7 Nov 2019 17:55:31 +0100 Cc: David Airlie , Daniel Vetter , Mark Rutland , =?utf-8?Q?Beno=C3=AEt_Cousson?= , Tony Lindgren , Paul Cercueil , Ralf Baechle , Paul Burton , James Hogan , dri-devel , devicetree , "linux-kernel@vger.kernel.org" , linux-omap , OpenPVRSGX Linux Driver Group , Discussions about the Letux Kernel , kernel@pyra-handheld.com, "open list:MIPS" Content-Transfer-Encoding: quoted-printable Message-Id: <52549A4C-F49D-4FE9-9CD2-B331FB486BA9@goldelico.com> References: <4292cec1fd82cbd7d42742d749557adb01705574.1573124770.git.hns@goldelico.com> To: Rob Herring X-Mailer: Apple Mail (2.3124) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org > Am 07.11.2019 um 15:35 schrieb Rob Herring : >=20 > On Thu, Nov 7, 2019 at 5:06 AM H. Nikolaus Schaller = wrote: >>=20 >> The Imagination PVR/SGX GPU is part of several SoC from >> multiple vendors, e.g. TI OMAP, Ingenic JZ4780, Intel Poulsbo >> and others. >>=20 >> With this binding, we describe how the SGX processor is >> interfaced to the SoC (registers, interrupt etc.). >>=20 >> Clock, Reset and power management should be handled >> by a parent node or elsewhere. >=20 > That's probably TI specific... Yes and no. For example the img4780 seems to need a clock reference in the gpu node. But it could maybe connected in a parent node like recent TI SoC do with the target-module approach. And our goal is to end up with a common driver for all SoC and = architectures in far future. Then, probably clock, reset and power management should be handled in the same way. >=20 >> --- >>=20 >> I have used the doc2yaml script to get a first veryion >> but I am still stuggling with the yaml thing. My impression >> is that while it is human readable, it is not very human >> writable... Unfortunately I haven't found a good tutorial >> for Dummies (like me) for bindings in YAML. >=20 > Did you read .../bindings/example-schema.yaml? It explains the common > cases and what schema are doing. Yes. > I recently added to it, so look at > the version in linux-next. Ah, ok. I haven't read that one. >=20 >> The big problem is not the YAML syntax but what the schema >> should contain and how to correctly formulate ideas in this >> new language. >>=20 >> Specific questions for this RFC: >>=20 >> * formatting: is space/tab indentation correct? >=20 > YAML requires spaces. Which is quite uncommon if you aren't a python programmer... >> * are strings with "" correct or without? >=20 > Generally only keys or values starting with '#' need quotes. There's > other cases, but we simply don't hit them with DT. We tend to quote > $ref values, but that's not strictly needed. Ok. Good. >=20 >> * how do I specify that there is a list of compatible strings = required in a specific order? >=20 > An 'items' list defines the order. I see. >=20 >> * but there are multiple such lists, and only one of them is to be = chosen? >=20 > ^^^^^^ > 'oneOf' is the schema keyword you are looking for. Ok. >=20 >> * how can be described in the binding that there should be certain = values in >> the parent node (ranges) to make it work? >=20 > You can't. Schemas match on a node and work down from there. So you > can do it, but it's more complicated. You'd need a custom 'select' > select that matches on the parent node having the child node you are > looking for (assuming the parent is something generic like > 'simple-bus' which you can't match on). However, based on the example, > I'd say checking 'ranges' is outside the scope of schema checks. > 'ranges' doesn't have to be a certain value any more than every case > of 'reg' (except maybe i2c devices with fixed addresses). Ok. > It's up to > the .dts author how exactly to do address translation. Well, my concern as a regular .dts author is that I usually treat bindings as documentation and giving hints how to write a .dts and what to take care of. If it is not complete, I get into big trouble. > I would like to have more ranges/reg checks such as bounds checks and > overlapping addresses, but I think we'd do those with code, not > schema. >=20 >> I was not able to run >>=20 >> make dt_binding_check dtbs_check >>=20 >> due to some missing dependencies (which I did not want to >> invest time to research them) on my build host, so I could >> not get automated help from those. >=20 > Dependencies are documented in = Documentation/devicetree/writing-schema.rst. One says it needs a libyaml but after installing one my HOSTCC didn't = find it. The other asks for another script which seems to be missing. >=20 >> --- >> .../devicetree/bindings/gpu/img,pvrsgx.yaml | 128 = ++++++++++++++++++ >> 1 file changed, 128 insertions(+) >> create mode 100644 = Documentation/devicetree/bindings/gpu/img,pvrsgx.yaml >>=20 >> diff --git a/Documentation/devicetree/bindings/gpu/img,pvrsgx.yaml = b/Documentation/devicetree/bindings/gpu/img,pvrsgx.yaml >> new file mode 100644 >> index 000000000000..b1b021601c47 >> --- /dev/null >> +++ b/Documentation/devicetree/bindings/gpu/img,pvrsgx.yaml >> @@ -0,0 +1,128 @@ >> +# SPDX-License-Identifier: None >=20 > Obviously not valid. :) >=20 >> +%YAML 1.2 >> +--- >> +$id: http://devicetree.org/schemas/bindings/gpu/img,pvrsgx.yaml# >=20 > This should have been correct with the script, but you need to drop = 'bindings'. Ok. >=20 >> +$schema: http://devicetree.org/meta-schemas/core.yaml# >> + >> +title: Imagination PVR/SGX GPU >> + >> +maintainers: >> + - H. Nikolaus Schaller >> +description: |+ >> + This binding describes the Imagination SGX5 series of 3D = accelerators which >> + are found in several different SoC like TI OMAP, Sitara, Ingenic = JZ4780, >> + Allwinner A83, and Intel Poulsbo and CedarView. >> + >> + Only the Imagination SGX530, SGX540 and SGX544 GPUs are currently = covered by >> + this binding. >> + >> + The SGX node is usually a child node of some DT node belonging to = the SoC >> + which handles clocks, reset and general address space mapping of = the SGX >> + register area. >> + >> +properties: >> + compatible: >> + oneOf: >> + - item: >=20 > 'item/items' Ok, as you described above we need "items". >=20 >> + # BeagleBoard ABC, OpenPandora 600MHz >> + - const: "ti,omap3-sgx530-121", "img,sgx530-121", = "img,sgx530", "img,sgx5" >=20 > Not valid YAML nor json-schema. Each value needs to be list item with = 'const:' Have to look up how that syntax is. > Plenty of examples in bindings/arm/ with board/soc bindings. Ok. >=20 >> + # BeagleBoard XM, GTA04, OpenPandora 1GHz >> + - const: "ti,omap3-sgx530-125", "img,sgx530-125", = "img,sgx530", "img,sgx5" >=20 > This needs to be a new 'items' list under 'oneOf'. Ok! >=20 >> + # BeagleBone Black >> + - const: "ti,am335x-sgx530-125", "img,sgx530-125", = "img,sgx530", "img,sgx5" >> + # Pandaboard (ES) >> + - const: "ti,omap4-sgx540-120", "img,sgx540-120", = "img,sgx540", "img,sgx5" >> + - const "ti,omap4-sgx544-112", "img,sgx544-112", = "img,sgx544", "img,sgx5" >> + # OMAP5 UEVM, Pyra Handheld >> + "ti,omap5-sgx544-116", "img,sgx544-116", "img,sgx544", = "img,sgx5" >> + "ti,dra7-sgx544-116", "img,sgx544-116", "img,sgx544", = "img,sgx5" >=20 > Just gave up on trying to write a schema here? Yes... You see into what issues a first time YAML/schema writer with 35 years C = but no YAML, Python or JSON experience runs into... Writing bindings as .txt was easy :) >=20 >> + # CI20 >> + "ingenic,jz4780-sgx540-120", "img,sgx540-120", "img,sgx540", = "img,sgx5"; >> + >> + reg: >> + items: >> + - description: physical base address and length of the = register area >=20 > For single entries, just 'maxItems: 1' is enough. Unless you have > something special about this device, you don't need a description > here. I am not sure if I understand that yet. >=20 >> + >> + interrupts: >> + items: >> + - description: interrupt from SGX subsystem to core processor >> + >> + clocks: >> + items: >> + - description: optional clocks >> + >> + required: >> + - compatible >> + - reg >> + - interrupts >> + >> +examples: | >> + gpu@fe00 { >> + compatible =3D "ti,omap-omap5-sgx544-116", "img,sgx544-116", = "img,sgx544", "img,sgx5"; >> + reg =3D <0xfe00 0x200>; >> + interrupts =3D ; >> + }; >> + >> + >> +historical: | >=20 > This should be dropped. It's just for reference as you write the = schema. Yes that is clear. I kept it for reference what I intended to translate = from. >=20 >> + Imagination PVR/SGX GPU >> + >> + Only the Imagination SGX530, SGX540 and SGX544 GPUs are currently = covered by this binding. >> + >> + Required properties: >> + - compatible: Should be one of >> + "ti,omap3-sgx530-121", "img,sgx530-121", = "img,sgx530", "img,sgx5"; - BeagleBoard ABC, OpenPandora 600MHz >> + "ti,omap3-sgx530-125", "img,sgx530-125", = "img,sgx530", "img,sgx5"; - BeagleBoard XM, GTA04, OpenPandora 1GHz >> + "ti,am3517-sgx530-125", "img,sgx530-125", = "img,sgx530", "img,sgx5"; >> + "ti,am335x-sgx530-125", "img,sgx530-125", = "img,sgx530", "img,sgx5"; - BeagleBone Black >> + "ti,omap4-sgx540-120", "img,sgx540-120", = "img,sgx540", "img,sgx5"; - Pandaboard (ES) >> + "ti,omap4-sgx544-112", "img,sgx544-112", = "img,sgx544", "img,sgx5"; >> + "ti,omap5-sgx544-116", "img,sgx544-116", = "img,sgx544", "img,sgx5"; - OMAP5 UEVM, Pyra Handheld >> + "ti,dra7-sgx544-116", "img,sgx544-116", "img,sgx544", = "img,sgx5"; >> + "ti,am3517-sgx530-?", "img,sgx530-?", "img,sgx530", = "img,sgx5"; >> + "ti,am43xx-sgx530-?", "img,sgx530-?", "img,sgx530", = "img,sgx5"; >> + "ti,ti81xx-sgx530-?", "img,sgx530-?", "img,sgx530", = "img,sgx5"; >> + "img,jz4780-sgx540-?", "img,sgx540-?", "img,sgx540", = "img,sgx5"; - CI20 >> + "allwinner,sun8i-a83t-sgx544-?", "img,sgx544-116", = "img,sgx544", "img,sgx5"; - Banana-Pi-M3 (Allwinner A83T) >> + "intel,poulsbo-gma500-sgx535", "img,sgx535-116", = "img,sgx535", "img,sgx5"; - Atom Z5xx >> + "intel,medfield-gma-sgx540", "img,sgx540-116", = "img,sgx540", "img,sgx5"; - Atom Z24xx >> + "intel,cedarview-gma3600-sgx545", "img,sgx545-116", = "img,sgx545", "img,sgx5"; - Atom N2600, D2500 >> + >> + The "ti,omap..." entries are needed temporarily to = handle SoC >> + specific builds of the kernel module. >> + >> + In the long run, only the "img,sgx..." entry should = suffice >> + to match a generic driver for all architectures and = driver >> + code can dynamically find out on which SoC it is = running. >> + >> + >> + - reg: Physical base address and length of the = register area. >> + - interrupts: The interrupt numbers. >> + >> + / { >> + ocp { >> + sgx_module: target-module@56000000 { >> + compatible =3D "ti,sysc-omap4", "ti,sysc"; >> + reg =3D <0x5600fe00 0x4>, >> + <0x5600fe10 0x4>; >> + reg-names =3D "rev", "sysc"; >> + ti,sysc-midle =3D , >> + , >> + ; >> + ti,sysc-sidle =3D , >> + , >> + ; >> + clocks =3D <&gpu_clkctrl OMAP5_GPU_CLKCTRL = 0>; >> + clock-names =3D "fck"; >> + #address-cells =3D <1>; >> + #size-cells =3D <1>; >> + ranges =3D <0 0x56000000 0x2000000>; >> + >> + gpu@fe00 { >> + compatible =3D = "ti,omap-omap5-sgx544-116", "img,sgx544-116", "img,sgx544", "img,sgx5"; >> + reg =3D <0xfe00 0x200>; >> + interrupts =3D ; >> + }; >> + }; >> + }; >> + }; >> -- >> 2.23.0 >>=20 BR and thanks for the help towards a PATCH v3, Nikolaus 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=-3.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS 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 3BD3CFA372C for ; Fri, 8 Nov 2019 08:13:53 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (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 1663921D7B for ; Fri, 8 Nov 2019 08:13:53 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1663921D7B Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=goldelico.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 0706D6F87B; Fri, 8 Nov 2019 08:12:58 +0000 (UTC) Received: from mo6-p02-ob.smtp.rzone.de (mo6-p02-ob.smtp.rzone.de [IPv6:2a01:238:20a:202:5302::4]) by gabe.freedesktop.org (Postfix) with ESMTPS id B244D6F74C for ; Thu, 7 Nov 2019 16:55:48 +0000 (UTC) X-RZG-AUTH: ":JGIXVUS7cutRB/49FwqZ7WcJeFKiMgPgp8VKxflSZ1P34KBj7wpz8NMGH/PrwDCq1eY=" X-RZG-CLASS-ID: mo00 Received: from imac.fritz.box by smtp.strato.de (RZmta 44.29.0 DYNA|AUTH) with ESMTPSA id L09db3vA7GtWfwD (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (curve secp521r1 with 521 ECDH bits, eq. 15360 bits RSA)) (Client did not present a certificate); Thu, 7 Nov 2019 17:55:32 +0100 (CET) Mime-Version: 1.0 (Mac OS X Mail 9.3 \(3124\)) Subject: Re: [PATCH v2 1/8] RFC: dt-bindings: add img, pvrsgx.yaml for Imagination GPUs From: "H. Nikolaus Schaller" In-Reply-To: Date: Thu, 7 Nov 2019 17:55:31 +0100 Message-Id: <52549A4C-F49D-4FE9-9CD2-B331FB486BA9@goldelico.com> References: <4292cec1fd82cbd7d42742d749557adb01705574.1573124770.git.hns@goldelico.com> To: Rob Herring X-Mailer: Apple Mail (2.3124) X-Mailman-Approved-At: Fri, 08 Nov 2019 08:12:31 +0000 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1573145747; s=strato-dkim-0002; d=goldelico.com; h=To:References:Message-Id:Cc:Date:In-Reply-To:From:Subject: X-RZG-CLASS-ID:X-RZG-AUTH:From:Subject:Sender; bh=6eRmOVOL1dtrZBZdnx7EAukovBmLX34tKDa/RotG/nY=; b=fMRmnFzq4WgEKzMO9s5uNe6q0ntRx4AftFRwC27H74QLWG32dlEIRox+AeRyrGPXva m7KeaAGkVBQX0r3xLw6PsWhhLZ0x4M/4QjW9ZPgeujI9wN8Hbu+ABt0JDguo6N97c8IH 2lafzpiJlAkRt90sb9TTytw8SWsr0cBW3cKBiCjtOk0rN6vcaMK/LFmr78UOgf3FWUm3 VM0jfiodLSgN7qNiPgwJxIZ8GZnyqPRBnzhLQzYsdjnwMpAibqX2cV/uwmkwgKjEhhQ4 y1adyoGTgD+07Iz1FwolrC8IOMjiZUql21/iKpp2sjRI26mqV9OJhAu1sZSCDSmx41Km 1qlA== X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Mark Rutland , devicetree , Discussions about the Letux Kernel , Paul Burton , David Airlie , James Hogan , OpenPVRSGX Linux Driver Group , "linux-kernel@vger.kernel.org" , Ralf Baechle , "open list:MIPS" , Paul Cercueil , Tony Lindgren , dri-devel , =?utf-8?Q?Beno=C3=AEt_Cousson?= , kernel@pyra-handheld.com, linux-omap Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Message-ID: <20191107165531.0x7C0rdorwKJ6sx4Jb_jvboCwxFXTSi54UFWhsJ_qGU@z> Cj4gQW0gMDcuMTEuMjAxOSB1bSAxNTozNSBzY2hyaWViIFJvYiBIZXJyaW5nIDxyb2JoK2R0QGtl cm5lbC5vcmc+Ogo+IAo+IE9uIFRodSwgTm92IDcsIDIwMTkgYXQgNTowNiBBTSBILiBOaWtvbGF1 cyBTY2hhbGxlciA8aG5zQGdvbGRlbGljby5jb20+IHdyb3RlOgo+PiAKPj4gVGhlIEltYWdpbmF0 aW9uIFBWUi9TR1ggR1BVIGlzIHBhcnQgb2Ygc2V2ZXJhbCBTb0MgZnJvbQo+PiBtdWx0aXBsZSB2 ZW5kb3JzLCBlLmcuIFRJIE9NQVAsIEluZ2VuaWMgSlo0NzgwLCBJbnRlbCBQb3Vsc2JvCj4+IGFu ZCBvdGhlcnMuCj4+IAo+PiBXaXRoIHRoaXMgYmluZGluZywgd2UgZGVzY3JpYmUgaG93IHRoZSBT R1ggcHJvY2Vzc29yIGlzCj4+IGludGVyZmFjZWQgdG8gdGhlIFNvQyAocmVnaXN0ZXJzLCBpbnRl cnJ1cHQgZXRjLikuCj4+IAo+PiBDbG9jaywgUmVzZXQgYW5kIHBvd2VyIG1hbmFnZW1lbnQgc2hv dWxkIGJlIGhhbmRsZWQKPj4gYnkgYSBwYXJlbnQgbm9kZSBvciBlbHNld2hlcmUuCj4gCj4gVGhh dCdzIHByb2JhYmx5IFRJIHNwZWNpZmljLi4uCgpZZXMgYW5kIG5vLgoKRm9yIGV4YW1wbGUgdGhl IGltZzQ3ODAgc2VlbXMgdG8gbmVlZCBhIGNsb2NrIHJlZmVyZW5jZSBpbiB0aGUKZ3B1IG5vZGUu IEJ1dCBpdCBjb3VsZCBtYXliZSBjb25uZWN0ZWQgaW4gYSBwYXJlbnQgbm9kZSBsaWtlIHJlY2Vu dApUSSBTb0MgZG8gd2l0aCB0aGUgdGFyZ2V0LW1vZHVsZSBhcHByb2FjaC4KCkFuZCBvdXIgZ29h bCBpcyB0byBlbmQgdXAgd2l0aCBhIGNvbW1vbiBkcml2ZXIgZm9yIGFsbCBTb0MgYW5kIGFyY2hp dGVjdHVyZXMKaW4gZmFyIGZ1dHVyZS4gVGhlbiwgcHJvYmFibHkgY2xvY2ssIHJlc2V0IGFuZCBw b3dlciBtYW5hZ2VtZW50IHNob3VsZApiZSBoYW5kbGVkIGluIHRoZSBzYW1lIHdheS4KCj4gCj4+ IC0tLQo+PiAKPj4gSSBoYXZlIHVzZWQgdGhlIGRvYzJ5YW1sIHNjcmlwdCB0byBnZXQgYSBmaXJz dCB2ZXJ5aW9uCj4+IGJ1dCBJIGFtIHN0aWxsIHN0dWdnbGluZyB3aXRoIHRoZSB5YW1sIHRoaW5n LiBNeSBpbXByZXNzaW9uCj4+IGlzIHRoYXQgd2hpbGUgaXQgaXMgaHVtYW4gcmVhZGFibGUsIGl0 IGlzIG5vdCB2ZXJ5IGh1bWFuCj4+IHdyaXRhYmxlLi4uIFVuZm9ydHVuYXRlbHkgSSBoYXZlbid0 IGZvdW5kIGEgZ29vZCB0dXRvcmlhbAo+PiBmb3IgRHVtbWllcyAobGlrZSBtZSkgZm9yIGJpbmRp bmdzIGluIFlBTUwuCj4gCj4gRGlkIHlvdSByZWFkIC4uLi9iaW5kaW5ncy9leGFtcGxlLXNjaGVt YS55YW1sPyBJdCBleHBsYWlucyB0aGUgY29tbW9uCj4gY2FzZXMgYW5kIHdoYXQgc2NoZW1hIGFy ZSBkb2luZy4KClllcy4KCj4gSSByZWNlbnRseSBhZGRlZCB0byBpdCwgc28gbG9vayBhdAo+IHRo ZSB2ZXJzaW9uIGluIGxpbnV4LW5leHQuCgpBaCwgb2suIEkgaGF2ZW4ndCByZWFkIHRoYXQgb25l LgoKPiAKPj4gVGhlIGJpZyBwcm9ibGVtIGlzIG5vdCB0aGUgWUFNTCBzeW50YXggYnV0IHdoYXQg dGhlIHNjaGVtYQo+PiBzaG91bGQgY29udGFpbiBhbmQgaG93IHRvIGNvcnJlY3RseSBmb3JtdWxh dGUgaWRlYXMgaW4gdGhpcwo+PiBuZXcgbGFuZ3VhZ2UuCj4+IAo+PiBTcGVjaWZpYyBxdWVzdGlv bnMgZm9yIHRoaXMgUkZDOgo+PiAKPj4gKiBmb3JtYXR0aW5nOiBpcyBzcGFjZS90YWIgaW5kZW50 YXRpb24gY29ycmVjdD8KPiAKPiBZQU1MIHJlcXVpcmVzIHNwYWNlcy4KCldoaWNoIGlzIHF1aXRl IHVuY29tbW9uIGlmIHlvdSBhcmVuJ3QgYSBweXRob24gcHJvZ3JhbW1lci4uLgoKPj4gKiBhcmUg c3RyaW5ncyB3aXRoICIiIGNvcnJlY3Qgb3Igd2l0aG91dD8KPiAKPiBHZW5lcmFsbHkgb25seSBr ZXlzIG9yIHZhbHVlcyBzdGFydGluZyB3aXRoICcjJyBuZWVkIHF1b3Rlcy4gVGhlcmUncwo+IG90 aGVyIGNhc2VzLCBidXQgd2Ugc2ltcGx5IGRvbid0IGhpdCB0aGVtIHdpdGggRFQuIFdlIHRlbmQg dG8gcXVvdGUKPiAkcmVmIHZhbHVlcywgYnV0IHRoYXQncyBub3Qgc3RyaWN0bHkgbmVlZGVkLgoK T2suIEdvb2QuCgo+IAo+PiAqIGhvdyBkbyBJIHNwZWNpZnkgdGhhdCB0aGVyZSBpcyBhIGxpc3Qg b2YgY29tcGF0aWJsZSBzdHJpbmdzIHJlcXVpcmVkIGluIGEgc3BlY2lmaWMgb3JkZXI/Cj4gCj4g QW4gJ2l0ZW1zJyBsaXN0IGRlZmluZXMgdGhlIG9yZGVyLgoKSSBzZWUuCgo+IAo+PiAqIGJ1dCB0 aGVyZSBhcmUgbXVsdGlwbGUgc3VjaCBsaXN0cywgYW5kIG9ubHkgb25lIG9mIHRoZW0gaXMgdG8g YmUgY2hvc2VuPwo+IAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXl5eXl5eCj4gJ29uZU9mJyBpcyB0aGUgc2NoZW1hIGtleXdvcmQgeW91IGFyZSBsb29r aW5nIGZvci4KCk9rLgoKPiAKPj4gKiBob3cgY2FuIGJlIGRlc2NyaWJlZCBpbiB0aGUgYmluZGlu ZyB0aGF0IHRoZXJlIHNob3VsZCBiZSBjZXJ0YWluIHZhbHVlcyBpbgo+PiAgdGhlIHBhcmVudCBu b2RlIChyYW5nZXMpIHRvIG1ha2UgaXQgd29yaz8KPiAKPiBZb3UgY2FuJ3QuIFNjaGVtYXMgbWF0 Y2ggb24gYSBub2RlIGFuZCB3b3JrIGRvd24gZnJvbSB0aGVyZS4gU28geW91Cj4gY2FuIGRvIGl0 LCBidXQgaXQncyBtb3JlIGNvbXBsaWNhdGVkLiBZb3UnZCBuZWVkIGEgY3VzdG9tICdzZWxlY3Qn Cj4gc2VsZWN0IHRoYXQgbWF0Y2hlcyBvbiB0aGUgcGFyZW50IG5vZGUgaGF2aW5nIHRoZSBjaGls ZCBub2RlIHlvdSBhcmUKPiBsb29raW5nIGZvciAoYXNzdW1pbmcgdGhlIHBhcmVudCBpcyBzb21l dGhpbmcgZ2VuZXJpYyBsaWtlCj4gJ3NpbXBsZS1idXMnIHdoaWNoIHlvdSBjYW4ndCBtYXRjaCBv bikuIEhvd2V2ZXIsIGJhc2VkIG9uIHRoZSBleGFtcGxlLAo+IEknZCBzYXkgY2hlY2tpbmcgJ3Jh bmdlcycgaXMgb3V0c2lkZSB0aGUgc2NvcGUgb2Ygc2NoZW1hIGNoZWNrcy4KPiAncmFuZ2VzJyBk b2Vzbid0IGhhdmUgdG8gYmUgYSBjZXJ0YWluIHZhbHVlIGFueSBtb3JlIHRoYW4gZXZlcnkgY2Fz ZQo+IG9mICdyZWcnIChleGNlcHQgbWF5YmUgaTJjIGRldmljZXMgd2l0aCBmaXhlZCBhZGRyZXNz ZXMpLgoKT2suCgo+IEl0J3MgdXAgdG8KPiB0aGUgLmR0cyBhdXRob3IgaG93IGV4YWN0bHkgdG8g ZG8gYWRkcmVzcyB0cmFuc2xhdGlvbi4KCldlbGwsIG15IGNvbmNlcm4gYXMgYSByZWd1bGFyIC5k dHMgYXV0aG9yIGlzIHRoYXQgSSB1c3VhbGx5IHRyZWF0CmJpbmRpbmdzIGFzIGRvY3VtZW50YXRp b24gYW5kIGdpdmluZyBoaW50cyBob3cgdG8gd3JpdGUgYSAuZHRzIGFuZAp3aGF0IHRvIHRha2Ug Y2FyZSBvZi4gSWYgaXQgaXMgbm90IGNvbXBsZXRlLCBJIGdldCBpbnRvIGJpZyB0cm91YmxlLgoK PiBJIHdvdWxkIGxpa2UgdG8gaGF2ZSBtb3JlIHJhbmdlcy9yZWcgY2hlY2tzIHN1Y2ggYXMgYm91 bmRzIGNoZWNrcyBhbmQKPiBvdmVybGFwcGluZyBhZGRyZXNzZXMsIGJ1dCBJIHRoaW5rIHdlJ2Qg ZG8gdGhvc2Ugd2l0aCBjb2RlLCBub3QKPiBzY2hlbWEuCj4gCj4+IEkgd2FzIG5vdCBhYmxlIHRv IHJ1bgo+PiAKPj4gICAgICAgIG1ha2UgZHRfYmluZGluZ19jaGVjayBkdGJzX2NoZWNrCj4+IAo+ PiBkdWUgdG8gc29tZSBtaXNzaW5nIGRlcGVuZGVuY2llcyAod2hpY2ggSSBkaWQgbm90IHdhbnQg dG8KPj4gaW52ZXN0IHRpbWUgdG8gcmVzZWFyY2ggdGhlbSkgb24gbXkgYnVpbGQgaG9zdCwgc28g SSBjb3VsZAo+PiBub3QgZ2V0IGF1dG9tYXRlZCBoZWxwIGZyb20gdGhvc2UuCj4gCj4gRGVwZW5k ZW5jaWVzIGFyZSBkb2N1bWVudGVkIGluIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS93cml0aW5n LXNjaGVtYS5yc3QuCgpPbmUgc2F5cyBpdCBuZWVkcyBhIGxpYnlhbWwgYnV0IGFmdGVyIGluc3Rh bGxpbmcgb25lIG15IEhPU1RDQyBkaWRuJ3QgZmluZAppdC4gVGhlIG90aGVyIGFza3MgZm9yIGFu b3RoZXIgc2NyaXB0IHdoaWNoIHNlZW1zIHRvIGJlIG1pc3NpbmcuCgoKPiAKPj4gLS0tCj4+IC4u Li9kZXZpY2V0cmVlL2JpbmRpbmdzL2dwdS9pbWcscHZyc2d4LnlhbWwgICB8IDEyOCArKysrKysr KysrKysrKysrKysKPj4gMSBmaWxlIGNoYW5nZWQsIDEyOCBpbnNlcnRpb25zKCspCj4+IGNyZWF0 ZSBtb2RlIDEwMDY0NCBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZ3B1L2ltZyxw dnJzZ3gueWFtbAo+PiAKPj4gZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9i aW5kaW5ncy9ncHUvaW1nLHB2cnNneC55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2Jp bmRpbmdzL2dwdS9pbWcscHZyc2d4LnlhbWwKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5k ZXggMDAwMDAwMDAwMDAwLi5iMWIwMjE2MDFjNDcKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi9E b2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZ3B1L2ltZyxwdnJzZ3gueWFtbAo+PiBA QCAtMCwwICsxLDEyOCBAQAo+PiArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTm9uZQo+IAo+ IE9idmlvdXNseSBub3QgdmFsaWQuCgo6KQoKPiAKPj4gKyVZQU1MIDEuMgo+PiArLS0tCj4+ICsk aWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL2JpbmRpbmdzL2dwdS9pbWcscHZyc2d4 LnlhbWwjCj4gCj4gVGhpcyBzaG91bGQgaGF2ZSBiZWVuIGNvcnJlY3Qgd2l0aCB0aGUgc2NyaXB0 LCBidXQgeW91IG5lZWQgdG8gZHJvcCAnYmluZGluZ3MnLgoKT2suCgo+IAo+PiArJHNjaGVtYTog aHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjCj4+ICsKPj4gK3Rp dGxlOiBJbWFnaW5hdGlvbiBQVlIvU0dYIEdQVQo+PiArCj4+ICttYWludGFpbmVyczoKPj4gKyAg LSBILiBOaWtvbGF1cyBTY2hhbGxlciA8aG5zQGdvbGRlbGljby5jb20+Cj4+ICtkZXNjcmlwdGlv bjogfCsKPj4gKyAgVGhpcyBiaW5kaW5nIGRlc2NyaWJlcyB0aGUgSW1hZ2luYXRpb24gU0dYNSBz ZXJpZXMgb2YgM0QgYWNjZWxlcmF0b3JzIHdoaWNoCj4+ICsgIGFyZSBmb3VuZCBpbiBzZXZlcmFs IGRpZmZlcmVudCBTb0MgbGlrZSBUSSBPTUFQLCBTaXRhcmEsIEluZ2VuaWMgSlo0NzgwLAo+PiAr ICBBbGx3aW5uZXIgQTgzLCBhbmQgSW50ZWwgUG91bHNibyBhbmQgQ2VkYXJWaWV3Lgo+PiArCj4+ ICsgIE9ubHkgdGhlIEltYWdpbmF0aW9uIFNHWDUzMCwgU0dYNTQwIGFuZCBTR1g1NDQgR1BVcyBh cmUgY3VycmVudGx5IGNvdmVyZWQgYnkKPj4gKyAgdGhpcyBiaW5kaW5nLgo+PiArCj4+ICsgIFRo ZSBTR1ggbm9kZSBpcyB1c3VhbGx5IGEgY2hpbGQgbm9kZSBvZiBzb21lIERUIG5vZGUgYmVsb25n aW5nIHRvIHRoZSBTb0MKPj4gKyAgd2hpY2ggaGFuZGxlcyBjbG9ja3MsIHJlc2V0IGFuZCBnZW5l cmFsIGFkZHJlc3Mgc3BhY2UgbWFwcGluZyBvZiB0aGUgU0dYCj4+ICsgIHJlZ2lzdGVyIGFyZWEu Cj4+ICsKPj4gK3Byb3BlcnRpZXM6Cj4+ICsgIGNvbXBhdGlibGU6Cj4+ICsgICAgb25lT2Y6Cj4+ ICsgICAgICAtIGl0ZW06Cj4gCj4gJ2l0ZW0vaXRlbXMnCgoKT2ssIGFzIHlvdSBkZXNjcmliZWQg YWJvdmUgd2UgbmVlZCAiaXRlbXMiLgoKPiAKPj4gKyAgICAgICAgIyBCZWFnbGVCb2FyZCBBQkMs IE9wZW5QYW5kb3JhIDYwME1Iego+PiArICAgICAgICAtIGNvbnN0OiAidGksb21hcDMtc2d4NTMw LTEyMSIsICJpbWcsc2d4NTMwLTEyMSIsICJpbWcsc2d4NTMwIiwgImltZyxzZ3g1Igo+IAo+IE5v dCB2YWxpZCBZQU1MIG5vciBqc29uLXNjaGVtYS4gRWFjaCB2YWx1ZSBuZWVkcyB0byBiZSBsaXN0 IGl0ZW0gd2l0aCAnY29uc3Q6JwoKSGF2ZSB0byBsb29rIHVwIGhvdyB0aGF0IHN5bnRheCBpcy4K Cj4gUGxlbnR5IG9mIGV4YW1wbGVzIGluIGJpbmRpbmdzL2FybS8gd2l0aCBib2FyZC9zb2MgYmlu ZGluZ3MuCgpPay4KCj4gCj4+ICsgICAgICAgICMgQmVhZ2xlQm9hcmQgWE0sIEdUQTA0LCBPcGVu UGFuZG9yYSAxR0h6Cj4+ICsgICAgICAgIC0gY29uc3Q6ICJ0aSxvbWFwMy1zZ3g1MzAtMTI1Iiwg ImltZyxzZ3g1MzAtMTI1IiwgImltZyxzZ3g1MzAiLCAiaW1nLHNneDUiCj4gCj4gVGhpcyBuZWVk cyB0byBiZSBhIG5ldyAnaXRlbXMnIGxpc3QgdW5kZXIgJ29uZU9mJy4KCk9rIQoKPiAKPj4gKyAg ICAgICAgIyBCZWFnbGVCb25lIEJsYWNrCj4+ICsgICAgICAgIC0gY29uc3Q6ICJ0aSxhbTMzNXgt c2d4NTMwLTEyNSIsICJpbWcsc2d4NTMwLTEyNSIsICJpbWcsc2d4NTMwIiwgImltZyxzZ3g1Igo+ PiArICAgICAgICAjIFBhbmRhYm9hcmQgKEVTKQo+PiArICAgICAgICAtIGNvbnN0OiAidGksb21h cDQtc2d4NTQwLTEyMCIsICJpbWcsc2d4NTQwLTEyMCIsICJpbWcsc2d4NTQwIiwgImltZyxzZ3g1 Igo+PiArICAgICAgICAtIGNvbnN0ICJ0aSxvbWFwNC1zZ3g1NDQtMTEyIiwgImltZyxzZ3g1NDQt MTEyIiwgImltZyxzZ3g1NDQiLCAiaW1nLHNneDUiCj4+ICsgICAgICAgICMgT01BUDUgVUVWTSwg UHlyYSBIYW5kaGVsZAo+PiArICAgICAgICAidGksb21hcDUtc2d4NTQ0LTExNiIsICJpbWcsc2d4 NTQ0LTExNiIsICJpbWcsc2d4NTQ0IiwgImltZyxzZ3g1Igo+PiArICAgICAgICAidGksZHJhNy1z Z3g1NDQtMTE2IiwgImltZyxzZ3g1NDQtMTE2IiwgImltZyxzZ3g1NDQiLCAiaW1nLHNneDUiCj4g Cj4gSnVzdCBnYXZlIHVwIG9uIHRyeWluZyB0byB3cml0ZSBhIHNjaGVtYSBoZXJlPwoKWWVzLi4u CgpZb3Ugc2VlIGludG8gd2hhdCBpc3N1ZXMgYSBmaXJzdCB0aW1lIFlBTUwvc2NoZW1hIHdyaXRl ciB3aXRoIDM1IHllYXJzIEMgYnV0IG5vCllBTUwsIFB5dGhvbiBvciBKU09OIGV4cGVyaWVuY2Ug cnVucyBpbnRvLi4uCgpXcml0aW5nIGJpbmRpbmdzIGFzIC50eHQgd2FzIGVhc3kgOikKCj4gCj4+ ICsgICAgICAgICMgQ0kyMAo+PiArICAgICAgICAiaW5nZW5pYyxqejQ3ODAtc2d4NTQwLTEyMCIs ICJpbWcsc2d4NTQwLTEyMCIsICJpbWcsc2d4NTQwIiwgImltZyxzZ3g1IjsKPj4gKwo+PiArICBy ZWc6Cj4+ICsgICAgaXRlbXM6Cj4+ICsgICAgICAtIGRlc2NyaXB0aW9uOiBwaHlzaWNhbCBiYXNl IGFkZHJlc3MgYW5kIGxlbmd0aCBvZiB0aGUgcmVnaXN0ZXIgYXJlYQo+IAo+IEZvciBzaW5nbGUg ZW50cmllcywganVzdCAnbWF4SXRlbXM6IDEnIGlzIGVub3VnaC4gVW5sZXNzIHlvdSBoYXZlCj4g c29tZXRoaW5nIHNwZWNpYWwgYWJvdXQgdGhpcyBkZXZpY2UsIHlvdSBkb24ndCBuZWVkIGEgZGVz Y3JpcHRpb24KPiBoZXJlLgoKSSBhbSBub3Qgc3VyZSBpZiBJIHVuZGVyc3RhbmQgdGhhdCB5ZXQu Cgo+IAo+PiArCj4+ICsgIGludGVycnVwdHM6Cj4+ICsgICAgIGl0ZW1zOgo+PiArICAgICAgLSBk ZXNjcmlwdGlvbjogaW50ZXJydXB0IGZyb20gU0dYIHN1YnN5c3RlbSB0byBjb3JlIHByb2Nlc3Nv cgo+PiArCj4+ICsgIGNsb2NrczoKPj4gKyAgICAgaXRlbXM6Cj4+ICsgICAgICAtIGRlc2NyaXB0 aW9uOiBvcHRpb25hbCBjbG9ja3MKPj4gKwo+PiArICByZXF1aXJlZDoKPj4gKyAgICAtIGNvbXBh dGlibGUKPj4gKyAgICAtIHJlZwo+PiArICAgIC0gaW50ZXJydXB0cwo+PiArCj4+ICtleGFtcGxl czogfAo+PiArICBncHVAZmUwMCB7Cj4+ICsgICAgICAgY29tcGF0aWJsZSA9ICJ0aSxvbWFwLW9t YXA1LXNneDU0NC0xMTYiLCAiaW1nLHNneDU0NC0xMTYiLCAiaW1nLHNneDU0NCIsICJpbWcsc2d4 NSI7Cj4+ICsgICAgICAgcmVnID0gPDB4ZmUwMCAweDIwMD47Cj4+ICsgICAgICAgaW50ZXJydXB0 cyA9IDxHSUNfU1BJIDIxIElSUV9UWVBFX0xFVkVMX0hJR0g+Owo+PiArICB9Owo+PiArCj4+ICsK Pj4gK2hpc3RvcmljYWw6IHwKPiAKPiBUaGlzIHNob3VsZCBiZSBkcm9wcGVkLiBJdCdzIGp1c3Qg Zm9yIHJlZmVyZW5jZSBhcyB5b3Ugd3JpdGUgdGhlIHNjaGVtYS4KClllcyB0aGF0IGlzIGNsZWFy LiBJIGtlcHQgaXQgZm9yIHJlZmVyZW5jZSB3aGF0IEkgaW50ZW5kZWQgdG8gdHJhbnNsYXRlIGZy b20uCgo+IAo+PiArICBJbWFnaW5hdGlvbiBQVlIvU0dYIEdQVQo+PiArCj4+ICsgIE9ubHkgdGhl IEltYWdpbmF0aW9uIFNHWDUzMCwgU0dYNTQwIGFuZCBTR1g1NDQgR1BVcyBhcmUgY3VycmVudGx5 IGNvdmVyZWQgYnkgdGhpcyBiaW5kaW5nLgo+PiArCj4+ICsgIFJlcXVpcmVkIHByb3BlcnRpZXM6 Cj4+ICsgIC0gY29tcGF0aWJsZTogICAgICAgIFNob3VsZCBiZSBvbmUgb2YKPj4gKyAgICAgICAg ICAgICAgICJ0aSxvbWFwMy1zZ3g1MzAtMTIxIiwgImltZyxzZ3g1MzAtMTIxIiwgImltZyxzZ3g1 MzAiLCAiaW1nLHNneDUiOyAtIEJlYWdsZUJvYXJkIEFCQywgT3BlblBhbmRvcmEgNjAwTUh6Cj4+ ICsgICAgICAgICAgICAgICAidGksb21hcDMtc2d4NTMwLTEyNSIsICJpbWcsc2d4NTMwLTEyNSIs ICJpbWcsc2d4NTMwIiwgImltZyxzZ3g1IjsgLSBCZWFnbGVCb2FyZCBYTSwgR1RBMDQsIE9wZW5Q YW5kb3JhIDFHSHoKPj4gKyAgICAgICAgICAgICAgICJ0aSxhbTM1MTctc2d4NTMwLTEyNSIsICJp bWcsc2d4NTMwLTEyNSIsICJpbWcsc2d4NTMwIiwgImltZyxzZ3g1IjsKPj4gKyAgICAgICAgICAg ICAgICJ0aSxhbTMzNXgtc2d4NTMwLTEyNSIsICJpbWcsc2d4NTMwLTEyNSIsICJpbWcsc2d4NTMw IiwgImltZyxzZ3g1IjsgLSBCZWFnbGVCb25lIEJsYWNrCj4+ICsgICAgICAgICAgICAgICAidGks b21hcDQtc2d4NTQwLTEyMCIsICJpbWcsc2d4NTQwLTEyMCIsICJpbWcsc2d4NTQwIiwgImltZyxz Z3g1IjsgLSBQYW5kYWJvYXJkIChFUykKPj4gKyAgICAgICAgICAgICAgICJ0aSxvbWFwNC1zZ3g1 NDQtMTEyIiwgImltZyxzZ3g1NDQtMTEyIiwgImltZyxzZ3g1NDQiLCAiaW1nLHNneDUiOwo+PiAr ICAgICAgICAgICAgICAgInRpLG9tYXA1LXNneDU0NC0xMTYiLCAiaW1nLHNneDU0NC0xMTYiLCAi aW1nLHNneDU0NCIsICJpbWcsc2d4NSI7IC0gT01BUDUgVUVWTSwgUHlyYSBIYW5kaGVsZAo+PiAr ICAgICAgICAgICAgICAgInRpLGRyYTctc2d4NTQ0LTExNiIsICJpbWcsc2d4NTQ0LTExNiIsICJp bWcsc2d4NTQ0IiwgImltZyxzZ3g1IjsKPj4gKyAgICAgICAgICAgICAgICJ0aSxhbTM1MTctc2d4 NTMwLT8iLCAiaW1nLHNneDUzMC0/IiwgImltZyxzZ3g1MzAiLCAiaW1nLHNneDUiOwo+PiArICAg ICAgICAgICAgICAgInRpLGFtNDN4eC1zZ3g1MzAtPyIsICJpbWcsc2d4NTMwLT8iLCAiaW1nLHNn eDUzMCIsICJpbWcsc2d4NSI7Cj4+ICsgICAgICAgICAgICAgICAidGksdGk4MXh4LXNneDUzMC0/ IiwgImltZyxzZ3g1MzAtPyIsICJpbWcsc2d4NTMwIiwgImltZyxzZ3g1IjsKPj4gKyAgICAgICAg ICAgICAgICJpbWcsano0NzgwLXNneDU0MC0/IiwgImltZyxzZ3g1NDAtPyIsICJpbWcsc2d4NTQw IiwgImltZyxzZ3g1IjsgLSBDSTIwCj4+ICsgICAgICAgICAgICAgICAiYWxsd2lubmVyLHN1bjhp LWE4M3Qtc2d4NTQ0LT8iLCAiaW1nLHNneDU0NC0xMTYiLCAiaW1nLHNneDU0NCIsICJpbWcsc2d4 NSI7IC0gQmFuYW5hLVBpLU0zIChBbGx3aW5uZXIgQTgzVCkKPj4gKyAgICAgICAgICAgICAgICJp bnRlbCxwb3Vsc2JvLWdtYTUwMC1zZ3g1MzUiLCAiaW1nLHNneDUzNS0xMTYiLCAiaW1nLHNneDUz NSIsICJpbWcsc2d4NSI7IC0gQXRvbSBaNXh4Cj4+ICsgICAgICAgICAgICAgICAiaW50ZWwsbWVk ZmllbGQtZ21hLXNneDU0MCIsICJpbWcsc2d4NTQwLTExNiIsICJpbWcsc2d4NTQwIiwgImltZyxz Z3g1IjsgLSBBdG9tIFoyNHh4Cj4+ICsgICAgICAgICAgICAgICAiaW50ZWwsY2VkYXJ2aWV3LWdt YTM2MDAtc2d4NTQ1IiwgImltZyxzZ3g1NDUtMTE2IiwgImltZyxzZ3g1NDUiLCAiaW1nLHNneDUi OyAtIEF0b20gTjI2MDAsIEQyNTAwCj4+ICsKPj4gKyAgICAgICAgICAgICAgIFRoZSAidGksb21h cC4uLiIgZW50cmllcyBhcmUgbmVlZGVkIHRlbXBvcmFyaWx5IHRvIGhhbmRsZSBTb0MKPj4gKyAg ICAgICAgICAgICAgIHNwZWNpZmljIGJ1aWxkcyBvZiB0aGUga2VybmVsIG1vZHVsZS4KPj4gKwo+ PiArICAgICAgICAgICAgICAgSW4gdGhlIGxvbmcgcnVuLCBvbmx5IHRoZSAiaW1nLHNneC4uLiIg ZW50cnkgc2hvdWxkIHN1ZmZpY2UKPj4gKyAgICAgICAgICAgICAgIHRvIG1hdGNoIGEgZ2VuZXJp YyBkcml2ZXIgZm9yIGFsbCBhcmNoaXRlY3R1cmVzIGFuZCBkcml2ZXIKPj4gKyAgICAgICAgICAg ICAgIGNvZGUgY2FuIGR5bmFtaWNhbGx5IGZpbmQgb3V0IG9uIHdoaWNoIFNvQyBpdCBpcyBydW5u aW5nLgo+PiArCj4+ICsKPj4gKyAgLSByZWc6ICAgICAgICAgICAgICAgUGh5c2ljYWwgYmFzZSBh ZGRyZXNzIGFuZCBsZW5ndGggb2YgdGhlIHJlZ2lzdGVyIGFyZWEuCj4+ICsgIC0gaW50ZXJydXB0 czogICAgICAgIFRoZSBpbnRlcnJ1cHQgbnVtYmVycy4KPj4gKwo+PiArICAvIHsKPj4gKyAgICAg ICBvY3Agewo+PiArICAgICAgICAgICAgICAgc2d4X21vZHVsZTogdGFyZ2V0LW1vZHVsZUA1NjAw MDAwMCB7Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAidGksc3lzYy1v bWFwNCIsICJ0aSxzeXNjIjsKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgcmVnID0gPDB4NTYw MGZlMDAgMHg0PiwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDB4NTYwMGZlMTAg MHg0PjsKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgcmVnLW5hbWVzID0gInJldiIsICJzeXNj IjsKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgdGksc3lzYy1taWRsZSA9IDxTWVNDX0lETEVf Rk9SQ0U+LAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNZU0Nf SURMRV9OTz4sCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1lT Q19JRExFX1NNQVJUPjsKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgdGksc3lzYy1zaWRsZSA9 IDxTWVNDX0lETEVfRk9SQ0U+LAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgPFNZU0NfSURMRV9OTz4sCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA8U1lTQ19JRExFX1NNQVJUPjsKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgY2xv Y2tzID0gPCZncHVfY2xrY3RybCBPTUFQNV9HUFVfQ0xLQ1RSTCAwPjsKPj4gKyAgICAgICAgICAg ICAgICAgICAgICAgY2xvY2stbmFtZXMgPSAiZmNrIjsKPj4gKyAgICAgICAgICAgICAgICAgICAg ICAgI2FkZHJlc3MtY2VsbHMgPSA8MT47Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICNzaXpl LWNlbGxzID0gPDE+Owo+PiArICAgICAgICAgICAgICAgICAgICAgICByYW5nZXMgPSA8MCAweDU2 MDAwMDAwIDB4MjAwMDAwMD47Cj4+ICsKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgZ3B1QGZl MDAgewo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAidGks b21hcC1vbWFwNS1zZ3g1NDQtMTE2IiwgImltZyxzZ3g1NDQtMTE2IiwgImltZyxzZ3g1NDQiLCAi aW1nLHNneDUiOwo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZyA9IDwweGZl MDAgMHgyMDA+Owo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdHMg PSA8R0lDX1NQSSAyMSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgfTsKPj4gKyAgICAgICAgICAgICAgIH07Cj4+ICsgICAgICAgfTsKPj4gKyAgfTsKPj4g LS0KPj4gMi4yMy4wCj4+IAoKQlIgYW5kIHRoYW5rcyBmb3IgdGhlIGhlbHAgdG93YXJkcyBhIFBB VENIIHYzLApOaWtvbGF1cwoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNr dG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2Ry aS1kZXZlbA==