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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8137DC433EF for ; Tue, 14 Dec 2021 19:59:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237547AbhLNT7S (ORCPT ); Tue, 14 Dec 2021 14:59:18 -0500 Received: from mail-oo1-f44.google.com ([209.85.161.44]:39896 "EHLO mail-oo1-f44.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229451AbhLNT7R (ORCPT ); Tue, 14 Dec 2021 14:59:17 -0500 Received: by mail-oo1-f44.google.com with SMTP id d1-20020a4a3c01000000b002c2612c8e1eso5229497ooa.6; Tue, 14 Dec 2021 11:59:17 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to; bh=VVTV0jMBRXeKBNUdDTq/PhLrjt7B2KXoSyoDyz5SpTI=; b=GRd5icl5FeXlr6k1m1d7KqAftAWzAedocM3/G5Ryk/a9y+CsywSGFSIJkJ4DR+rVOy apAaOHqwcO/EWsJlhGmDCsp5ohCsVLA1ZKVtkOm9OFnSq3LlAuL5tbkH/cTtYjdgcOlr Z4uN0WOoqGzNt/38CAH0775kL/a669DVgU0uurEEfs4A8mG+hcEvq+5DsVukhjyzdaBT p+5Kq0xvmBRsdwTE2m340Hwm2p7C7773sG5cxdsPGVMEqY3upCkLN65hx2S+EgDObVcK 7LuVWAXNZXnVt982qJ3RKMXNRCJlU0eXIs7QH6BiUBtpxAT+DrmrrM1oojZetGNyarVm nzGg== X-Gm-Message-State: AOAM532HxkgHYzEDumX7KbhNedubHnWvdfZT6Gqdy7Duc5ke5ymuwF78 9tOZPap3APNYKz8tRNrM7g== X-Google-Smtp-Source: ABdhPJxCl+0ltbkCyzvWMYj/rkKJG8KkWCWFH/ftnv7hq+wWz3bKrvkVgtqGaSMx0Z1LIfZeW5TaOg== X-Received: by 2002:a4a:ea84:: with SMTP id r4mr4816086ooh.13.1639511957126; Tue, 14 Dec 2021 11:59:17 -0800 (PST) Received: from robh.at.kernel.org (66-90-148-213.dyn.grandenetworks.net. [66.90.148.213]) by smtp.gmail.com with ESMTPSA id r22sm168192oij.36.2021.12.14.11.59.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Dec 2021 11:59:16 -0800 (PST) Received: (nullmailer pid 3812039 invoked by uid 1000); Tue, 14 Dec 2021 19:59:15 -0000 Date: Tue, 14 Dec 2021 13:59:15 -0600 From: Rob Herring To: =?utf-8?B?UmFmYcWCIE1pxYJlY2tp?= Cc: Linus Walleij , =?utf-8?B?UmFmYcWCIE1pxYJlY2tp?= , Tony Lindgren , Andy Shevchenko , linux-gpio@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Florian Fainelli , bcm-kernel-feedback-list@broadcom.com Subject: Re: [PATCH V3 1/2] dt-bindings: pinctrl: support specifying pins, groups & functions Message-ID: References: <20211210114222.26581-1-zajec5@gmail.com> <20211210114222.26581-2-zajec5@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: Precedence: bulk List-ID: X-Mailing-List: linux-gpio@vger.kernel.org On Sat, Dec 11, 2021 at 12:16:25PM +0100, Rafał Miłecki wrote: > Rob: please kindly comment on this idea of storing pins/groups/functions > in DT. I was never a fan of stuffing pin mux/ctrl into DT for what's mostly a one time stuffing of register values. And given how many things run before getting to the kernel, doing proper pin configuration in the kernel is much too late (or redundant because it was actually already done). > > For a sample Linux implementation you can check (incomplete): > [PATCH V2 4/6] pinctrl: support reading pins, groups & functions from DT > https://patchwork.ozlabs.org/project/linux-gpio/patch/20211124230439.17531-5-zajec5@gmail.com/ > > For a real life DT usage you can check: > [PATCH V2 6/6] ARM: dts: BCM5301X: add pinctrl pins, groups & functions > https://patchwork.ozlabs.org/project/linux-gpio/patch/20211124230439.17531-7-zajec5@gmail.com/ What about h/w with no concept of 'groups'? > Also see below inline comments. > > > On 11.12.2021 00:26, Linus Walleij wrote: > > On Fri, Dec 10, 2021 at 12:42 PM Rafał Miłecki wrote: > > > > > This binding change is meant to introduce a generic way of describing > > > pinctrl blocks details. Every pinmux block is expected to have: > > > 1. Named pins > > > 2. Named groups containing one or more pins > > > 3. Named functions referencing one or more groups > > > > > > It doesn't describe how hw should be programmed. That remains binding > > > and driver specific. > > > > So what this does is to take a large chunk of data that we known to be > > associated with the compatible string (names of pins, groups and functions, > > etc) and put it into the device tree instead of the alternative, which is > > what most drivers do, and that is to compile in the data into the > > operating system and just look it up by using a compatible > > string. > > Correct. It changes the place of storing platform specific data. > > > > The DT maintainers have already indicated that this is not desirable > > and I don't see it getting merged before it has a Reviewed-by > > tag from one of the DT binding maintainers. > > Tony pointed out that it was back in 2011. It's worth reconsidering. > https://patchwork.ozlabs.org/comment/2786915/ > > Rob said it depends on whether "data be static (complete) and correct" > https://patchwork.ozlabs.org/comment/2786688/ I haven't seen an answer for that question... That and working for multiple platforms (from different vendors) are the main things that matter to me. > I find it absolutely required to get Rob's Reviewed-by before we merge > it. I hope we can get Rob's opinion on this. > > > > I think we need to know what the USP (unique selling point) is? > > > > Would it be something like not having to duplicate work across some > > boot loaders and operating systems? (Well they all need to parse this > > type of description but that can be put into a library.) > > > > Or something else? > > There are two reasons for me to work on this binding: > > > 1. I think it's cleaner to keep pinctrl details in DT > > DT seems more natural (than C code) for: > a) Translating info from datasheets > b) Storing pin/group/function custom values > c) Defining relations (phandles) > d) Handling chip differences (adding new pins in newer revisions) > > Last time I learnt that pins don't always/usually have numbers (in > datasheets) but are rather named. Still in the "pinctrl_pin_desc" we > have "unsigned number" just to enumerate them and reference in groups. > > Adding or removing pins/groups/functions in DT is as simple as > adding/deleting nodes. That also means less logic in C code. > > > 2. It avoids data duplication > > It allows me to keep pins/groups/functions data in one place (DT) and > use it in both: Linux and U-Boot. No duplication & easier maintenance. > 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 073C0C433EF for ; Tue, 14 Dec 2021 20:00:52 +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:MIME-Version:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=3DJUqZGIoTlnASBBhQtFuI0sEk13H9+a/qmM4bl8y1s=; b=fnKV2qHe2UxDUY Uq0ustpaubfg/S7CBNG64agyWiYlQ85YIo/oWt6E4o5naOOVgVpqv3zoAZJ7ECtX0lI1paDfDSJV/ m+NkSpZSQCVlHKKhwPbYVMkaRVxoTHYsSOA7dAFj4Kkl0BE82zGkjLoudT0SCR2sUnuwtTWxskQLn U87kvVTuSSVPelI4u7QBtsKpzQ8rVhOdUXcaM3Foe75uYB7Xppxk1GfyiLwBNh6bGSFpHQRXnpQE8 EGd5Ia/uNyXR6HzGRuJjJr5/ufw1lvy8tO3120V0GODE+EFXjs1OARWdNLKfRyqHLA4VOi4Tcpdx5 1AaRdUNLiluKuOpCZNmw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mxDxM-00FgbT-U2; Tue, 14 Dec 2021 19:59:25 +0000 Received: from mail-oo1-f45.google.com ([209.85.161.45]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mxDxJ-00FgaY-9h for linux-arm-kernel@lists.infradead.org; Tue, 14 Dec 2021 19:59:22 +0000 Received: by mail-oo1-f45.google.com with SMTP id v19-20020a4a2453000000b002bb88bfb594so5238025oov.4 for ; Tue, 14 Dec 2021 11:59:17 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to; bh=VVTV0jMBRXeKBNUdDTq/PhLrjt7B2KXoSyoDyz5SpTI=; b=P3jVJ4dNlhbbPeySvDaEcPOfj2qlkXg5ejYZbt1FG4mm43F+31aszx91cW1W+YV6JI zsK4fGbY5d1SnTnrlQ0fthEUBNGRkN48sb6yml7Yc6ODw2bY1K0+7pviswSlWwDtW+be z87ICtHIyMHbOkeSIEuMgaodUPBbmA9UUZ3Qkwm1tSGAhmGuyhi+hqDbeirT3sE9GK8B 0917Vmvv2TInQoGzrIWaorCaqxjMOE2tuPxzk3OfRi66ACXgnNtUv7F8xSAzxAVeuXYq O5Ydif+p31RyqDoEdRt1rqWYcmTArRsy6c3iU2UG45BaGsa5JyIaj630Vka8QXhyK5/L V7yw== X-Gm-Message-State: AOAM533iY4NRt8MfJvDqyZDGvNs1yZrFbtdaaJXWV2qQnqEo1jBYjILE zuwCeDF8Knps/hb22wFxBQ== X-Google-Smtp-Source: ABdhPJxCl+0ltbkCyzvWMYj/rkKJG8KkWCWFH/ftnv7hq+wWz3bKrvkVgtqGaSMx0Z1LIfZeW5TaOg== X-Received: by 2002:a4a:ea84:: with SMTP id r4mr4816086ooh.13.1639511957126; Tue, 14 Dec 2021 11:59:17 -0800 (PST) Received: from robh.at.kernel.org (66-90-148-213.dyn.grandenetworks.net. [66.90.148.213]) by smtp.gmail.com with ESMTPSA id r22sm168192oij.36.2021.12.14.11.59.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Dec 2021 11:59:16 -0800 (PST) Received: (nullmailer pid 3812039 invoked by uid 1000); Tue, 14 Dec 2021 19:59:15 -0000 Date: Tue, 14 Dec 2021 13:59:15 -0600 From: Rob Herring To: =?utf-8?B?UmFmYcWCIE1pxYJlY2tp?= Cc: Linus Walleij , =?utf-8?B?UmFmYcWCIE1pxYJlY2tp?= , Tony Lindgren , Andy Shevchenko , linux-gpio@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Florian Fainelli , bcm-kernel-feedback-list@broadcom.com Subject: Re: [PATCH V3 1/2] dt-bindings: pinctrl: support specifying pins, groups & functions Message-ID: References: <20211210114222.26581-1-zajec5@gmail.com> <20211210114222.26581-2-zajec5@gmail.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211214_115921_371400_818777D7 X-CRM114-Status: GOOD ( 41.26 ) 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 T24gU2F0LCBEZWMgMTEsIDIwMjEgYXQgMTI6MTY6MjVQTSArMDEwMCwgUmFmYcWCIE1pxYJlY2tp IHdyb3RlOgo+IFJvYjogcGxlYXNlIGtpbmRseSBjb21tZW50IG9uIHRoaXMgaWRlYSBvZiBzdG9y aW5nIHBpbnMvZ3JvdXBzL2Z1bmN0aW9ucwo+IGluIERULgoKSSB3YXMgbmV2ZXIgYSBmYW4gb2Yg c3R1ZmZpbmcgcGluIG11eC9jdHJsIGludG8gRFQgZm9yIHdoYXQncyBtb3N0bHkgYSAKb25lIHRp bWUgc3R1ZmZpbmcgb2YgcmVnaXN0ZXIgdmFsdWVzLiBBbmQgZ2l2ZW4gaG93IG1hbnkgdGhpbmdz IHJ1biAKYmVmb3JlIGdldHRpbmcgdG8gdGhlIGtlcm5lbCwgZG9pbmcgcHJvcGVyIHBpbiBjb25m aWd1cmF0aW9uIGluIHRoZSAKa2VybmVsIGlzIG11Y2ggdG9vIGxhdGUgKG9yIHJlZHVuZGFudCBi ZWNhdXNlIGl0IHdhcyBhY3R1YWxseSBhbHJlYWR5IApkb25lKS4KCj4gCj4gRm9yIGEgc2FtcGxl IExpbnV4IGltcGxlbWVudGF0aW9uIHlvdSBjYW4gY2hlY2sgKGluY29tcGxldGUpOgo+IFtQQVRD SCBWMiA0LzZdIHBpbmN0cmw6IHN1cHBvcnQgcmVhZGluZyBwaW5zLCBncm91cHMgJiBmdW5jdGlv bnMgZnJvbSBEVAo+IGh0dHBzOi8vcGF0Y2h3b3JrLm96bGFicy5vcmcvcHJvamVjdC9saW51eC1n cGlvL3BhdGNoLzIwMjExMTI0MjMwNDM5LjE3NTMxLTUtemFqZWM1QGdtYWlsLmNvbS8KPiAKPiBG b3IgYSByZWFsIGxpZmUgRFQgdXNhZ2UgeW91IGNhbiBjaGVjazoKPiBbUEFUQ0ggVjIgNi82XSBB Uk06IGR0czogQkNNNTMwMVg6IGFkZCBwaW5jdHJsIHBpbnMsIGdyb3VwcyAmIGZ1bmN0aW9ucwo+ IGh0dHBzOi8vcGF0Y2h3b3JrLm96bGFicy5vcmcvcHJvamVjdC9saW51eC1ncGlvL3BhdGNoLzIw MjExMTI0MjMwNDM5LjE3NTMxLTctemFqZWM1QGdtYWlsLmNvbS8KCldoYXQgYWJvdXQgaC93IHdp dGggbm8gY29uY2VwdCBvZiAnZ3JvdXBzJz8KCgo+IEFsc28gc2VlIGJlbG93IGlubGluZSBjb21t ZW50cy4KPiAKPiAKPiBPbiAxMS4xMi4yMDIxIDAwOjI2LCBMaW51cyBXYWxsZWlqIHdyb3RlOgo+ ID4gT24gRnJpLCBEZWMgMTAsIDIwMjEgYXQgMTI6NDIgUE0gUmFmYcWCIE1pxYJlY2tpIDx6YWpl YzVAZ21haWwuY29tPiB3cm90ZToKPiA+IAo+ID4gPiBUaGlzIGJpbmRpbmcgY2hhbmdlIGlzIG1l YW50IHRvIGludHJvZHVjZSBhIGdlbmVyaWMgd2F5IG9mIGRlc2NyaWJpbmcKPiA+ID4gcGluY3Ry bCBibG9ja3MgZGV0YWlscy4gRXZlcnkgcGlubXV4IGJsb2NrIGlzIGV4cGVjdGVkIHRvIGhhdmU6 Cj4gPiA+IDEuIE5hbWVkIHBpbnMKPiA+ID4gMi4gTmFtZWQgZ3JvdXBzIGNvbnRhaW5pbmcgb25l IG9yIG1vcmUgcGlucwo+ID4gPiAzLiBOYW1lZCBmdW5jdGlvbnMgcmVmZXJlbmNpbmcgb25lIG9y IG1vcmUgZ3JvdXBzCj4gPiA+IAo+ID4gPiBJdCBkb2Vzbid0IGRlc2NyaWJlIGhvdyBodyBzaG91 bGQgYmUgcHJvZ3JhbW1lZC4gVGhhdCByZW1haW5zIGJpbmRpbmcKPiA+ID4gYW5kIGRyaXZlciBz cGVjaWZpYy4KPiA+IAo+ID4gU28gd2hhdCB0aGlzIGRvZXMgaXMgdG8gdGFrZSBhIGxhcmdlIGNo dW5rIG9mIGRhdGEgdGhhdCB3ZSBrbm93biB0byBiZQo+ID4gYXNzb2NpYXRlZCB3aXRoIHRoZSBj b21wYXRpYmxlIHN0cmluZyAobmFtZXMgb2YgcGlucywgZ3JvdXBzIGFuZCBmdW5jdGlvbnMsCj4g PiBldGMpIGFuZCBwdXQgaXQgaW50byB0aGUgZGV2aWNlIHRyZWUgaW5zdGVhZCBvZiB0aGUgYWx0 ZXJuYXRpdmUsIHdoaWNoIGlzCj4gPiB3aGF0IG1vc3QgZHJpdmVycyBkbywgYW5kIHRoYXQgaXMg dG8gY29tcGlsZSBpbiB0aGUgZGF0YSBpbnRvIHRoZQo+ID4gb3BlcmF0aW5nIHN5c3RlbSBhbmQg anVzdCBsb29rIGl0IHVwIGJ5IHVzaW5nIGEgY29tcGF0aWJsZQo+ID4gc3RyaW5nLgo+IAo+IENv cnJlY3QuIEl0IGNoYW5nZXMgdGhlIHBsYWNlIG9mIHN0b3JpbmcgcGxhdGZvcm0gc3BlY2lmaWMg ZGF0YS4KPiAKPiAKPiA+IFRoZSBEVCBtYWludGFpbmVycyBoYXZlIGFscmVhZHkgaW5kaWNhdGVk IHRoYXQgdGhpcyBpcyBub3QgZGVzaXJhYmxlCj4gPiBhbmQgSSBkb24ndCBzZWUgaXQgZ2V0dGlu ZyBtZXJnZWQgYmVmb3JlIGl0IGhhcyBhIFJldmlld2VkLWJ5Cj4gPiB0YWcgZnJvbSBvbmUgb2Yg dGhlIERUIGJpbmRpbmcgbWFpbnRhaW5lcnMuCj4gCj4gVG9ueSBwb2ludGVkIG91dCB0aGF0IGl0 IHdhcyBiYWNrIGluIDIwMTEuIEl0J3Mgd29ydGggcmVjb25zaWRlcmluZy4KPiBodHRwczovL3Bh dGNod29yay5vemxhYnMub3JnL2NvbW1lbnQvMjc4NjkxNS8KPiAKPiBSb2Igc2FpZCBpdCBkZXBl bmRzIG9uIHdoZXRoZXIgImRhdGEgYmUgc3RhdGljIChjb21wbGV0ZSkgYW5kIGNvcnJlY3QiCj4g aHR0cHM6Ly9wYXRjaHdvcmsub3psYWJzLm9yZy9jb21tZW50LzI3ODY2ODgvCgpJIGhhdmVuJ3Qg c2VlbiBhbiBhbnN3ZXIgZm9yIHRoYXQgcXVlc3Rpb24uLi4KClRoYXQgYW5kIHdvcmtpbmcgZm9y IG11bHRpcGxlIHBsYXRmb3JtcyAoZnJvbSBkaWZmZXJlbnQgdmVuZG9ycykgYXJlIHRoZSAKbWFp biB0aGluZ3MgdGhhdCBtYXR0ZXIgdG8gbWUuIAoKPiBJIGZpbmQgaXQgYWJzb2x1dGVseSByZXF1 aXJlZCB0byBnZXQgUm9iJ3MgUmV2aWV3ZWQtYnkgYmVmb3JlIHdlIG1lcmdlCj4gaXQuIEkgaG9w ZSB3ZSBjYW4gZ2V0IFJvYidzIG9waW5pb24gb24gdGhpcy4KPiAKPiAKPiA+IEkgdGhpbmsgd2Ug bmVlZCB0byBrbm93IHdoYXQgdGhlIFVTUCAodW5pcXVlIHNlbGxpbmcgcG9pbnQpIGlzPwo+ID4g Cj4gPiBXb3VsZCBpdCBiZSBzb21ldGhpbmcgbGlrZSBub3QgaGF2aW5nIHRvIGR1cGxpY2F0ZSB3 b3JrIGFjcm9zcyBzb21lCj4gPiBib290IGxvYWRlcnMgYW5kIG9wZXJhdGluZyBzeXN0ZW1zPyAo V2VsbCB0aGV5IGFsbCBuZWVkIHRvIHBhcnNlIHRoaXMKPiA+IHR5cGUgb2YgZGVzY3JpcHRpb24g YnV0IHRoYXQgY2FuIGJlIHB1dCBpbnRvIGEgbGlicmFyeS4pCj4gPiAKPiA+IE9yIHNvbWV0aGlu ZyBlbHNlPwo+IAo+IFRoZXJlIGFyZSB0d28gcmVhc29ucyBmb3IgbWUgdG8gd29yayBvbiB0aGlz IGJpbmRpbmc6Cj4gCj4gCj4gMS4gSSB0aGluayBpdCdzIGNsZWFuZXIgdG8ga2VlcCBwaW5jdHJs IGRldGFpbHMgaW4gRFQKPiAKPiBEVCBzZWVtcyBtb3JlIG5hdHVyYWwgKHRoYW4gQyBjb2RlKSBm b3I6Cj4gYSkgVHJhbnNsYXRpbmcgaW5mbyBmcm9tIGRhdGFzaGVldHMKPiBiKSBTdG9yaW5nIHBp bi9ncm91cC9mdW5jdGlvbiBjdXN0b20gdmFsdWVzCj4gYykgRGVmaW5pbmcgcmVsYXRpb25zIChw aGFuZGxlcykKPiBkKSBIYW5kbGluZyBjaGlwIGRpZmZlcmVuY2VzIChhZGRpbmcgbmV3IHBpbnMg aW4gbmV3ZXIgcmV2aXNpb25zKQo+IAo+IExhc3QgdGltZSBJIGxlYXJudCB0aGF0IHBpbnMgZG9u J3QgYWx3YXlzL3VzdWFsbHkgaGF2ZSBudW1iZXJzIChpbgo+IGRhdGFzaGVldHMpIGJ1dCBhcmUg cmF0aGVyIG5hbWVkLiBTdGlsbCBpbiB0aGUgInBpbmN0cmxfcGluX2Rlc2MiIHdlCj4gaGF2ZSAi dW5zaWduZWQgbnVtYmVyIiBqdXN0IHRvIGVudW1lcmF0ZSB0aGVtIGFuZCByZWZlcmVuY2UgaW4g Z3JvdXBzLgo+IAo+IEFkZGluZyBvciByZW1vdmluZyBwaW5zL2dyb3Vwcy9mdW5jdGlvbnMgaW4g RFQgaXMgYXMgc2ltcGxlIGFzCj4gYWRkaW5nL2RlbGV0aW5nIG5vZGVzLiBUaGF0IGFsc28gbWVh bnMgbGVzcyBsb2dpYyBpbiBDIGNvZGUuCj4gCj4gCj4gMi4gSXQgYXZvaWRzIGRhdGEgZHVwbGlj YXRpb24KPiAKPiBJdCBhbGxvd3MgbWUgdG8ga2VlcCBwaW5zL2dyb3Vwcy9mdW5jdGlvbnMgZGF0 YSBpbiBvbmUgcGxhY2UgKERUKSBhbmQKPiB1c2UgaXQgaW4gYm90aDogTGludXggYW5kIFUtQm9v dC4gTm8gZHVwbGljYXRpb24gJiBlYXNpZXIgbWFpbnRlbmFuY2UuCj4gCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxp bmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3Rz LmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==