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 0A920C433F5 for ; Mon, 14 Mar 2022 12:49:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241248AbiCNMuO (ORCPT ); Mon, 14 Mar 2022 08:50:14 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53620 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242177AbiCNMsZ (ORCPT ); Mon, 14 Mar 2022 08:48:25 -0400 Received: from mail.mleia.com (mleia.com [178.79.152.223]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D6FCC38D95; Mon, 14 Mar 2022 05:43:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=mleia.com; s=mail; t=1647261287; bh=E5qK/LokoWbwQ3NAAGJqmIaSC9RmuNtETGn508KBwxs=; h=Subject:To:Cc:References:From:Date:In-Reply-To:From; b=sVEB/6/ZcCmLhloWfxjr+OKp77Z0EA4Kn00f5Rq+oukexmooJNc5KgHe9b1Dzq7ce mI/PKm73rC2sIXp0F5PMRoigg20jJ6xpoqIGjRVoF71jOB8qFGCyqt5IUzOGNoEzln opJ7Zp0WTg5x3Ltcz6cc7m7Y/V2HRuH/XeFLT0PBz1nUqU55y8ene/DCGxPvzLHdWF /ZrD2li+IUmc2S3tov20ssdd2n0/hE7GaoIC2zd5UnuywAL4t3TCXwKdLtL0PaDY3N 3EQJXLAwQ6KNnwClYo6bOPWOMoGTtPx44FaXJOqg3s/Y6ZZ4lb+kASOVjGtC8x/z0z s+n4b3HaVHjWg== Received: from mail.mleia.com (localhost [127.0.0.1]) by mail.mleia.com (Postfix) with ESMTP id 9203D39F2D5; Mon, 14 Mar 2022 12:34:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=mleia.com; s=mail; t=1647261287; bh=E5qK/LokoWbwQ3NAAGJqmIaSC9RmuNtETGn508KBwxs=; h=Subject:To:Cc:References:From:Date:In-Reply-To:From; b=sVEB/6/ZcCmLhloWfxjr+OKp77Z0EA4Kn00f5Rq+oukexmooJNc5KgHe9b1Dzq7ce mI/PKm73rC2sIXp0F5PMRoigg20jJ6xpoqIGjRVoF71jOB8qFGCyqt5IUzOGNoEzln opJ7Zp0WTg5x3Ltcz6cc7m7Y/V2HRuH/XeFLT0PBz1nUqU55y8ene/DCGxPvzLHdWF /ZrD2li+IUmc2S3tov20ssdd2n0/hE7GaoIC2zd5UnuywAL4t3TCXwKdLtL0PaDY3N 3EQJXLAwQ6KNnwClYo6bOPWOMoGTtPx44FaXJOqg3s/Y6ZZ4lb+kASOVjGtC8x/z0z s+n4b3HaVHjWg== Received: from [192.168.1.102] (88-113-46-102.elisa-laajakaista.fi [88.113.46.102]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by mail.mleia.com (Postfix) with ESMTPSA id 2C53739F095; Mon, 14 Mar 2022 12:34:47 +0000 (UTC) Subject: Re: [PATCH v2 3/3] ARM: dts: lpc32xx: Update spi clock properties To: Robin Murphy , Arnd Bergmann Cc: Kuldeep Singh , Olof Johansson , SoC Team , Rob Herring , DTML , Linux ARM , Linux Kernel Mailing List References: <20220311093800.18778-1-singh.kuldeep87k@gmail.com> <20220311093800.18778-4-singh.kuldeep87k@gmail.com> <4aae560d-d266-d0d0-136f-32891b15bc01@mleia.com> <4f39f086-1932-1729-8761-d5c533356812@mleia.com> From: Vladimir Zapolskiy Message-ID: <4a7e3d0e-f804-74a5-ef5b-206404eb9b61@mleia.com> Date: Mon, 14 Mar 2022 14:34:46 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.6.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-49551924 X-CRM114-CacheID: sfid-20220314_123447_626055_29EE4042 X-CRM114-Status: GOOD ( 34.52 ) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 3/14/22 2:20 PM, Robin Murphy wrote: > On 2022-03-14 11:50, Vladimir Zapolskiy wrote: >> On 3/14/22 1:43 PM, Robin Murphy wrote: >>> On 2022-03-11 14:07, Vladimir Zapolskiy wrote: >>>> On 3/11/22 3:38 PM, Arnd Bergmann wrote: >>>>> On Fri, Mar 11, 2022 at 2:20 PM Vladimir Zapolskiy >>>>> wrote: >>>>>> >>>>>> On 3/11/22 11:38 AM, Kuldeep Singh wrote: >>>>>>> PL022 binding require two clocks to be defined but lpc platform >>>>>>> doesn't >>>>>>> comply with bindings and define only one clock i.e apb_pclk. >>>>>>> >>>>>>> Update spi clocks and clocks-names property by adding appropriate >>>>>>> clock >>>>>>> reference to make it compliant with bindings. >>>>>>> >>>>>>> CC: Vladimir Zapolskiy >>>>>>> Signed-off-by: Kuldeep Singh >>>>>>> --- >>>>>>> v2: >>>>>>> - New patch with similar changeset >>>>>>> - Send to soc ML >>>>>>> >>>>>>>     arch/arm/boot/dts/lpc32xx.dtsi | 8 ++++---- >>>>>>>     1 file changed, 4 insertions(+), 4 deletions(-) >>>>>>> >>>>>>> diff --git a/arch/arm/boot/dts/lpc32xx.dtsi >>>>>>> b/arch/arm/boot/dts/lpc32xx.dtsi >>>>>>> index c87066d6c995..30958e02d5e2 100644 >>>>>>> --- a/arch/arm/boot/dts/lpc32xx.dtsi >>>>>>> +++ b/arch/arm/boot/dts/lpc32xx.dtsi >>>>>>> @@ -178,8 +178,8 @@ ssp0: spi@20084000 { >>>>>>>                                 compatible = "arm,pl022", >>>>>>> "arm,primecell"; >>>>>>>                                 reg = <0x20084000 0x1000>; >>>>>>>                                 interrupts = <20 >>>>>>> IRQ_TYPE_LEVEL_HIGH>; >>>>>>> -                             clocks = <&clk LPC32XX_CLK_SSP0>; >>>>>>> -                             clock-names = "apb_pclk"; >>>>>>> +                             clocks = <&clk LPC32XX_CLK_SSP0>, >>>>>>> <&clk LPC32XX_CLK_SSP0>; >>>>>>> +                             clock-names = "sspclk", "apb_pclk"; >>>>>> >>>>>> In fact I'm uncertain if it is the right change, could it happen that >>>>>> the commit >>>>>> cc0f6e96c4fd ("spi: dt-bindings: Convert Arm pl022 to json-schema") >>>>>> sets a wrong >>>>>> schema pattern? >>>>> >>>>> Good pointm this doesn't quite seem right: it is unlikely that the >>>>> same clock >>>>> is used for both the SPI bus and the APB bus. >>>>> >>>>>> Apparently just one clock is wanted on all observed platforms and >>>>>> cases, this >>>>>> is implicitly confirmed by clock handling in the >>>>>> drivers/spi/spi-pl022.c : >>>>>> >>>>>>           pl022->clk = devm_clk_get(&adev->dev, NULL); >>>>>> >>>>>> So, I would vote to fix the device tree bindings schema. >>>>> >>>>> Isn't this just using the wrong name? The name of the macro >>>>> LPC32XX_CLK_SSP0 might indicate that this is indeed the SPI clock >>>>> rather than the APB clock, so we only need to change clock-names >>>>> property here and leave it unchanged otherwise. >>>> >>>> Yes, the name is wrong, here I'm ready to take the blame: >>>> >>>> Fixes: 93898eb775e5 ("arm: dts: lpc32xx: add clock properties to device >>>> nodes") >>>> >>>> Noteworthy the commit above presets the same clock name to other >>>> PrimeCell >>>> controllers, namely pl110 (LCD), pl080 (DMA), pl175 (EMC) and pl18x >>>> (SD), >>>> plus this one pl022 (SSP), and all but SSP and SD are AHB slaves in >>>> fact. >>>> >>>> On LPC32xx the bus clock source and function clock source for SSP is >>>> HCLK. >>>> >>>> My guess is that the misnamed "apb_pclk" migrated into the schema from >>>> the lpc32xx.dtsi, so I'd suggest, unless some platform really needs it, >>>> firstly fix the schema by removing "apb_pclk" clock. It will leave >>>> just one >>>> clock, so "clock-names" property can be set as optional, and the drop >>>> the property from the lpc32xx.dtsi. >>> >>> No, "apb_pclk" is part of the common AMBA binding, and is required by >>> the "arm,primecell" compatible. You won't (usually) find it referenced >>> in drivers because it's dealt with by amba_get_enable_pclk() via >>> amba_probe(). >>> >> >> Thank you, it explains, why "apb_pclk" is required for all PrimeCell >> controllers on the SoC. Nevertheless, in commit 93898eb775e5 it was >> misidentified with the sspclk clock, the latter one is the only clock >> explicitly utilized by the driver in 2015 and till today. Fixes in dts >> files should be preceded by a fix in the driver. > > There's nothing to fix in the driver, though. In fact it can only be > working today because the Linux driver isn't very strict and simply > assumes that the first clock entry is SSPCLK *without* considering its > name (other consumers of the binding might be stricter; I don't know), Here I'm a bit ignorant, would it be totally reliable to assume that clk_get(dev, NULL) gets the first clock from the list, and will it never happen that one day it takes e.g. the last entry? I'm kind of surprised that the asked fix in the driver meets such a resistance. > and because presumably the HCLK happens to be enabled already anyway. Yes, that's the case here. > Changing the driver behaviour would only stand to cause functional > regressions. > > There are effectively two bugs in the DTS here, firstly that it only has > one clock entry when it should have two, and secondly that the clock > entry which *is* present has the wrong name (or the wrong clock > specifier, depending on how you look at it). Kuldeep's patch merely > fixes the first one by fully describing the way it's currently working > in practice, so it's really just a choice of whether to treat "respect > the binding" and "describe the hardware correctly" as separate issues > and have a follow-up patch to correctly reference HCLK as the second > clock, or whether they're trivial enough to squash together. > The two problems in the DTS are not argued, the chosen way to correct them is questionable though. Well, I won't object to see it split into two changes, but please send them at least in one series then, so that it won't be left forgotten. -- Best wishes, Vladimir 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 2ADEEC433F5 for ; Mon, 14 Mar 2022 12:36:11 +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-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:From: References:Cc:To:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=7dZGOusLP9VCLaLW9dYpXr0sHAir0oJVBisdaaIwd88=; b=ysMaJ0bzWvTqwR8yBAImRlm/bH PLBTB6egPvpIVKAgEldLDtD56Oj0mSdWYaDHoKqaHu4YSKimMGg8P37clF0guMMx1gGsJiff3j0JZ OgaDbkMUKFQIDbkKjK/e4YQM91ZX3Jgr7HO/lEG+7jHu9NNmhKiRHXH1XgAMXPDAHsmfwu8JmOU9B HCa1K24TNgR2rXZX557IVyTA/Ogwi66z1Tx9grEMUDG6WtMnUNon08QqngNa8euRkXNHy0EnjvuHq drtVmkNXXbvK7bPMpkWpYdaWpFLb9LY5bEGRVFnA0aKnvQpz3NhAjdEDZ5rwxgUg0c01dIX7W9LcJ c8b6JLzg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nTjuW-005QYC-MZ; Mon, 14 Mar 2022 12:34:52 +0000 Received: from mleia.com ([178.79.152.223] helo=mail.mleia.com) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nTjuS-005QW1-SN for linux-arm-kernel@lists.infradead.org; Mon, 14 Mar 2022 12:34:50 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=mleia.com; s=mail; t=1647261287; bh=E5qK/LokoWbwQ3NAAGJqmIaSC9RmuNtETGn508KBwxs=; h=Subject:To:Cc:References:From:Date:In-Reply-To:From; b=sVEB/6/ZcCmLhloWfxjr+OKp77Z0EA4Kn00f5Rq+oukexmooJNc5KgHe9b1Dzq7ce mI/PKm73rC2sIXp0F5PMRoigg20jJ6xpoqIGjRVoF71jOB8qFGCyqt5IUzOGNoEzln opJ7Zp0WTg5x3Ltcz6cc7m7Y/V2HRuH/XeFLT0PBz1nUqU55y8ene/DCGxPvzLHdWF /ZrD2li+IUmc2S3tov20ssdd2n0/hE7GaoIC2zd5UnuywAL4t3TCXwKdLtL0PaDY3N 3EQJXLAwQ6KNnwClYo6bOPWOMoGTtPx44FaXJOqg3s/Y6ZZ4lb+kASOVjGtC8x/z0z s+n4b3HaVHjWg== Received: from mail.mleia.com (localhost [127.0.0.1]) by mail.mleia.com (Postfix) with ESMTP id 9203D39F2D5; Mon, 14 Mar 2022 12:34:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=mleia.com; s=mail; t=1647261287; bh=E5qK/LokoWbwQ3NAAGJqmIaSC9RmuNtETGn508KBwxs=; h=Subject:To:Cc:References:From:Date:In-Reply-To:From; b=sVEB/6/ZcCmLhloWfxjr+OKp77Z0EA4Kn00f5Rq+oukexmooJNc5KgHe9b1Dzq7ce mI/PKm73rC2sIXp0F5PMRoigg20jJ6xpoqIGjRVoF71jOB8qFGCyqt5IUzOGNoEzln opJ7Zp0WTg5x3Ltcz6cc7m7Y/V2HRuH/XeFLT0PBz1nUqU55y8ene/DCGxPvzLHdWF /ZrD2li+IUmc2S3tov20ssdd2n0/hE7GaoIC2zd5UnuywAL4t3TCXwKdLtL0PaDY3N 3EQJXLAwQ6KNnwClYo6bOPWOMoGTtPx44FaXJOqg3s/Y6ZZ4lb+kASOVjGtC8x/z0z s+n4b3HaVHjWg== Received: from [192.168.1.102] (88-113-46-102.elisa-laajakaista.fi [88.113.46.102]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by mail.mleia.com (Postfix) with ESMTPSA id 2C53739F095; Mon, 14 Mar 2022 12:34:47 +0000 (UTC) Subject: Re: [PATCH v2 3/3] ARM: dts: lpc32xx: Update spi clock properties To: Robin Murphy , Arnd Bergmann Cc: Kuldeep Singh , Olof Johansson , SoC Team , Rob Herring , DTML , Linux ARM , Linux Kernel Mailing List References: <20220311093800.18778-1-singh.kuldeep87k@gmail.com> <20220311093800.18778-4-singh.kuldeep87k@gmail.com> <4aae560d-d266-d0d0-136f-32891b15bc01@mleia.com> <4f39f086-1932-1729-8761-d5c533356812@mleia.com> From: Vladimir Zapolskiy Message-ID: <4a7e3d0e-f804-74a5-ef5b-206404eb9b61@mleia.com> Date: Mon, 14 Mar 2022 14:34:46 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.6.1 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-49551924 X-CRM114-CacheID: sfid-20220314_123447_626055_29EE4042 X-CRM114-Status: GOOD ( 34.52 ) /bin/ln: failed to access 'reaver_cache/texts/20220314_123447_626055_29EE4042': No such file or directory X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220314_123447_626055_29EE4042 X-CRM114-Status: GOOD ( 37.48 ) 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-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gMy8xNC8yMiAyOjIwIFBNLCBSb2JpbiBNdXJwaHkgd3JvdGU6Cj4gT24gMjAyMi0wMy0xNCAx MTo1MCwgVmxhZGltaXIgWmFwb2xza2l5IHdyb3RlOgo+PiBPbiAzLzE0LzIyIDE6NDMgUE0sIFJv YmluIE11cnBoeSB3cm90ZToKPj4+IE9uIDIwMjItMDMtMTEgMTQ6MDcsIFZsYWRpbWlyIFphcG9s c2tpeSB3cm90ZToKPj4+PiBPbiAzLzExLzIyIDM6MzggUE0sIEFybmQgQmVyZ21hbm4gd3JvdGU6 Cj4+Pj4+IE9uIEZyaSwgTWFyIDExLCAyMDIyIGF0IDI6MjAgUE0gVmxhZGltaXIgWmFwb2xza2l5 IDx2ekBtbGVpYS5jb20+Cj4+Pj4+IHdyb3RlOgo+Pj4+Pj4KPj4+Pj4+IE9uIDMvMTEvMjIgMTE6 MzggQU0sIEt1bGRlZXAgU2luZ2ggd3JvdGU6Cj4+Pj4+Pj4gUEwwMjIgYmluZGluZyByZXF1aXJl IHR3byBjbG9ja3MgdG8gYmUgZGVmaW5lZCBidXQgbHBjIHBsYXRmb3JtCj4+Pj4+Pj4gZG9lc24n dAo+Pj4+Pj4+IGNvbXBseSB3aXRoIGJpbmRpbmdzIGFuZCBkZWZpbmUgb25seSBvbmUgY2xvY2sg aS5lIGFwYl9wY2xrLgo+Pj4+Pj4+Cj4+Pj4+Pj4gVXBkYXRlIHNwaSBjbG9ja3MgYW5kIGNsb2Nr cy1uYW1lcyBwcm9wZXJ0eSBieSBhZGRpbmcgYXBwcm9wcmlhdGUKPj4+Pj4+PiBjbG9jawo+Pj4+ Pj4+IHJlZmVyZW5jZSB0byBtYWtlIGl0IGNvbXBsaWFudCB3aXRoIGJpbmRpbmdzLgo+Pj4+Pj4+ Cj4+Pj4+Pj4gQ0M6IFZsYWRpbWlyIFphcG9sc2tpeSA8dnpAbWxlaWEuY29tPgo+Pj4+Pj4+IFNp Z25lZC1vZmYtYnk6IEt1bGRlZXAgU2luZ2ggPHNpbmdoLmt1bGRlZXA4N2tAZ21haWwuY29tPgo+ Pj4+Pj4+IC0tLQo+Pj4+Pj4+IHYyOgo+Pj4+Pj4+IC0gTmV3IHBhdGNoIHdpdGggc2ltaWxhciBj aGFuZ2VzZXQKPj4+Pj4+PiAtIFNlbmQgdG8gc29jIE1MCj4+Pj4+Pj4KPj4+Pj4+PiAgwqDCoMKg IGFyY2gvYXJtL2Jvb3QvZHRzL2xwYzMyeHguZHRzaSB8IDggKysrKy0tLS0KPj4+Pj4+PiAgwqDC oMKgIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCj4+Pj4+ Pj4KPj4+Pj4+PiBkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvbHBjMzJ4eC5kdHNpCj4+ Pj4+Pj4gYi9hcmNoL2FybS9ib290L2R0cy9scGMzMnh4LmR0c2kKPj4+Pj4+PiBpbmRleCBjODcw NjZkNmM5OTUuLjMwOTU4ZTAyZDVlMiAxMDA2NDQKPj4+Pj4+PiAtLS0gYS9hcmNoL2FybS9ib290 L2R0cy9scGMzMnh4LmR0c2kKPj4+Pj4+PiArKysgYi9hcmNoL2FybS9ib290L2R0cy9scGMzMnh4 LmR0c2kKPj4+Pj4+PiBAQCAtMTc4LDggKzE3OCw4IEBAIHNzcDA6IHNwaUAyMDA4NDAwMCB7Cj4+ Pj4+Pj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGNvbXBhdGlibGUgPSAiYXJtLHBsMDIyIiwKPj4+Pj4+PiAiYXJtLHByaW1l Y2VsbCI7Cj4+Pj4+Pj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJlZyA9IDwweDIwMDg0MDAwIDB4MTAwMD47Cj4+Pj4+Pj4g IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGludGVycnVwdHMgPSA8MjAKPj4+Pj4+PiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKPj4+ Pj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgY2xvY2tzID0gPCZjbGsgTFBDMzJYWF9DTEtfU1NQMD47Cj4+Pj4+Pj4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNsb2NrLW5h bWVzID0gImFwYl9wY2xrIjsKPj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY2xvY2tzID0gPCZjbGsgTFBDMzJYWF9DTEtfU1NQ MD4sCj4+Pj4+Pj4gPCZjbGsgTFBDMzJYWF9DTEtfU1NQMD47Cj4+Pj4+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNsb2NrLW5hbWVz ID0gInNzcGNsayIsICJhcGJfcGNsayI7Cj4+Pj4+Pgo+Pj4+Pj4gSW4gZmFjdCBJJ20gdW5jZXJ0 YWluIGlmIGl0IGlzIHRoZSByaWdodCBjaGFuZ2UsIGNvdWxkIGl0IGhhcHBlbiB0aGF0Cj4+Pj4+ PiB0aGUgY29tbWl0Cj4+Pj4+PiBjYzBmNmU5NmM0ZmQgKCJzcGk6IGR0LWJpbmRpbmdzOiBDb252 ZXJ0IEFybSBwbDAyMiB0byBqc29uLXNjaGVtYSIpCj4+Pj4+PiBzZXRzIGEgd3JvbmcKPj4+Pj4+ IHNjaGVtYSBwYXR0ZXJuPwo+Pj4+Pgo+Pj4+PiBHb29kIHBvaW50bSB0aGlzIGRvZXNuJ3QgcXVp dGUgc2VlbSByaWdodDogaXQgaXMgdW5saWtlbHkgdGhhdCB0aGUKPj4+Pj4gc2FtZSBjbG9jawo+ Pj4+PiBpcyB1c2VkIGZvciBib3RoIHRoZSBTUEkgYnVzIGFuZCB0aGUgQVBCIGJ1cy4KPj4+Pj4K Pj4+Pj4+IEFwcGFyZW50bHkganVzdCBvbmUgY2xvY2sgaXMgd2FudGVkIG9uIGFsbCBvYnNlcnZl ZCBwbGF0Zm9ybXMgYW5kCj4+Pj4+PiBjYXNlcywgdGhpcwo+Pj4+Pj4gaXMgaW1wbGljaXRseSBj b25maXJtZWQgYnkgY2xvY2sgaGFuZGxpbmcgaW4gdGhlCj4+Pj4+PiBkcml2ZXJzL3NwaS9zcGkt cGwwMjIuYyA6Cj4+Pj4+Pgo+Pj4+Pj4gIMKgwqDCoMKgwqDCoMKgwqDCoCBwbDAyMi0+Y2xrID0g ZGV2bV9jbGtfZ2V0KCZhZGV2LT5kZXYsIE5VTEwpOwo+Pj4+Pj4KPj4+Pj4+IFNvLCBJIHdvdWxk IHZvdGUgdG8gZml4IHRoZSBkZXZpY2UgdHJlZSBiaW5kaW5ncyBzY2hlbWEuCj4+Pj4+Cj4+Pj4+ IElzbid0IHRoaXMganVzdCB1c2luZyB0aGUgd3JvbmcgbmFtZT8gVGhlIG5hbWUgb2YgdGhlIG1h Y3JvCj4+Pj4+IExQQzMyWFhfQ0xLX1NTUDAgbWlnaHQgaW5kaWNhdGUgdGhhdCB0aGlzIGlzIGlu ZGVlZCB0aGUgU1BJIGNsb2NrCj4+Pj4+IHJhdGhlciB0aGFuIHRoZSBBUEIgY2xvY2ssIHNvIHdl IG9ubHkgbmVlZCB0byBjaGFuZ2UgY2xvY2stbmFtZXMKPj4+Pj4gcHJvcGVydHkgaGVyZSBhbmQg bGVhdmUgaXQgdW5jaGFuZ2VkIG90aGVyd2lzZS4KPj4+Pgo+Pj4+IFllcywgdGhlIG5hbWUgaXMg d3JvbmcsIGhlcmUgSSdtIHJlYWR5IHRvIHRha2UgdGhlIGJsYW1lOgo+Pj4+Cj4+Pj4gRml4ZXM6 IDkzODk4ZWI3NzVlNSAoImFybTogZHRzOiBscGMzMnh4OiBhZGQgY2xvY2sgcHJvcGVydGllcyB0 byBkZXZpY2UKPj4+PiBub2RlcyIpCj4+Pj4KPj4+PiBOb3Rld29ydGh5IHRoZSBjb21taXQgYWJv dmUgcHJlc2V0cyB0aGUgc2FtZSBjbG9jayBuYW1lIHRvIG90aGVyCj4+Pj4gUHJpbWVDZWxsCj4+ Pj4gY29udHJvbGxlcnMsIG5hbWVseSBwbDExMCAoTENEKSwgcGwwODAgKERNQSksIHBsMTc1IChF TUMpIGFuZCBwbDE4eAo+Pj4+IChTRCksCj4+Pj4gcGx1cyB0aGlzIG9uZSBwbDAyMiAoU1NQKSwg YW5kIGFsbCBidXQgU1NQIGFuZCBTRCBhcmUgQUhCIHNsYXZlcyBpbgo+Pj4+IGZhY3QuCj4+Pj4K Pj4+PiBPbiBMUEMzMnh4IHRoZSBidXMgY2xvY2sgc291cmNlIGFuZCBmdW5jdGlvbiBjbG9jayBz b3VyY2UgZm9yIFNTUCBpcwo+Pj4+IEhDTEsuCj4+Pj4KPj4+PiBNeSBndWVzcyBpcyB0aGF0IHRo ZSBtaXNuYW1lZCAiYXBiX3BjbGsiIG1pZ3JhdGVkIGludG8gdGhlIHNjaGVtYSBmcm9tCj4+Pj4g dGhlIGxwYzMyeHguZHRzaSwgc28gSSdkIHN1Z2dlc3QsIHVubGVzcyBzb21lIHBsYXRmb3JtIHJl YWxseSBuZWVkcyBpdCwKPj4+PiBmaXJzdGx5IGZpeCB0aGUgc2NoZW1hIGJ5IHJlbW92aW5nICJh cGJfcGNsayIgY2xvY2suIEl0IHdpbGwgbGVhdmUKPj4+PiBqdXN0IG9uZQo+Pj4+IGNsb2NrLCBz byAiY2xvY2stbmFtZXMiIHByb3BlcnR5IGNhbiBiZSBzZXQgYXMgb3B0aW9uYWwsIGFuZCB0aGUg ZHJvcAo+Pj4+IHRoZSBwcm9wZXJ0eSBmcm9tIHRoZSBscGMzMnh4LmR0c2kuCj4+Pgo+Pj4gTm8s ICJhcGJfcGNsayIgaXMgcGFydCBvZiB0aGUgY29tbW9uIEFNQkEgYmluZGluZywgYW5kIGlzIHJl cXVpcmVkIGJ5Cj4+PiB0aGUgImFybSxwcmltZWNlbGwiIGNvbXBhdGlibGUuIFlvdSB3b24ndCAo dXN1YWxseSkgZmluZCBpdCByZWZlcmVuY2VkCj4+PiBpbiBkcml2ZXJzIGJlY2F1c2UgaXQncyBk ZWFsdCB3aXRoIGJ5IGFtYmFfZ2V0X2VuYWJsZV9wY2xrKCkgdmlhCj4+PiBhbWJhX3Byb2JlKCku Cj4+Pgo+Pgo+PiBUaGFuayB5b3UsIGl0IGV4cGxhaW5zLCB3aHkgImFwYl9wY2xrIiBpcyByZXF1 aXJlZCBmb3IgYWxsIFByaW1lQ2VsbAo+PiBjb250cm9sbGVycyBvbiB0aGUgU29DLiBOZXZlcnRo ZWxlc3MsIGluIGNvbW1pdCA5Mzg5OGViNzc1ZTUgaXQgd2FzCj4+IG1pc2lkZW50aWZpZWQgd2l0 aCB0aGUgc3NwY2xrIGNsb2NrLCB0aGUgbGF0dGVyIG9uZSBpcyB0aGUgb25seSBjbG9jawo+PiBl eHBsaWNpdGx5IHV0aWxpemVkIGJ5IHRoZSBkcml2ZXIgaW4gMjAxNSBhbmQgdGlsbCB0b2RheS4g Rml4ZXMgaW4gZHRzCj4+IGZpbGVzIHNob3VsZCBiZSBwcmVjZWRlZCBieSBhIGZpeCBpbiB0aGUg ZHJpdmVyLgo+IAo+IFRoZXJlJ3Mgbm90aGluZyB0byBmaXggaW4gdGhlIGRyaXZlciwgdGhvdWdo LiBJbiBmYWN0IGl0IGNhbiBvbmx5IGJlCj4gd29ya2luZyB0b2RheSBiZWNhdXNlIHRoZSBMaW51 eCBkcml2ZXIgaXNuJ3QgdmVyeSBzdHJpY3QgYW5kIHNpbXBseQo+IGFzc3VtZXMgdGhhdCB0aGUg Zmlyc3QgY2xvY2sgZW50cnkgaXMgU1NQQ0xLICp3aXRob3V0KiBjb25zaWRlcmluZyBpdHMKPiBu YW1lIChvdGhlciBjb25zdW1lcnMgb2YgdGhlIGJpbmRpbmcgbWlnaHQgYmUgc3RyaWN0ZXI7IEkg ZG9uJ3Qga25vdyksCgpIZXJlIEknbSBhIGJpdCBpZ25vcmFudCwgd291bGQgaXQgYmUgdG90YWxs eSByZWxpYWJsZSB0byBhc3N1bWUgdGhhdApjbGtfZ2V0KGRldiwgTlVMTCkgZ2V0cyB0aGUgZmly c3QgY2xvY2sgZnJvbSB0aGUgbGlzdCwgYW5kIHdpbGwgaXQgbmV2ZXIKaGFwcGVuIHRoYXQgb25l IGRheSBpdCB0YWtlcyBlLmcuIHRoZSBsYXN0IGVudHJ5PwoKSSdtIGtpbmQgb2Ygc3VycHJpc2Vk IHRoYXQgdGhlIGFza2VkIGZpeCBpbiB0aGUgZHJpdmVyIG1lZXRzIHN1Y2ggYQpyZXNpc3RhbmNl LgoKPiBhbmQgYmVjYXVzZSBwcmVzdW1hYmx5IHRoZSBIQ0xLIGhhcHBlbnMgdG8gYmUgZW5hYmxl ZCBhbHJlYWR5IGFueXdheS4KClllcywgdGhhdCdzIHRoZSBjYXNlIGhlcmUuCgo+IENoYW5naW5n IHRoZSBkcml2ZXIgYmVoYXZpb3VyIHdvdWxkIG9ubHkgc3RhbmQgdG8gY2F1c2UgZnVuY3Rpb25h bAo+IHJlZ3Jlc3Npb25zLgo+IAo+IFRoZXJlIGFyZSBlZmZlY3RpdmVseSB0d28gYnVncyBpbiB0 aGUgRFRTIGhlcmUsIGZpcnN0bHkgdGhhdCBpdCBvbmx5IGhhcwo+IG9uZSBjbG9jayBlbnRyeSB3 aGVuIGl0IHNob3VsZCBoYXZlIHR3bywgYW5kIHNlY29uZGx5IHRoYXQgdGhlIGNsb2NrCj4gZW50 cnkgd2hpY2ggKmlzKiBwcmVzZW50IGhhcyB0aGUgd3JvbmcgbmFtZSAob3IgdGhlIHdyb25nIGNs b2NrCj4gc3BlY2lmaWVyLCBkZXBlbmRpbmcgb24gaG93IHlvdSBsb29rIGF0IGl0KS4gS3VsZGVl cCdzIHBhdGNoIG1lcmVseQo+IGZpeGVzIHRoZSBmaXJzdCBvbmUgYnkgZnVsbHkgZGVzY3JpYmlu ZyB0aGUgd2F5IGl0J3MgY3VycmVudGx5IHdvcmtpbmcKPiBpbiBwcmFjdGljZSwgc28gaXQncyBy ZWFsbHkganVzdCBhIGNob2ljZSBvZiB3aGV0aGVyIHRvIHRyZWF0ICJyZXNwZWN0Cj4gdGhlIGJp bmRpbmciIGFuZCAiZGVzY3JpYmUgdGhlIGhhcmR3YXJlIGNvcnJlY3RseSIgYXMgc2VwYXJhdGUg aXNzdWVzCj4gYW5kIGhhdmUgYSBmb2xsb3ctdXAgcGF0Y2ggdG8gY29ycmVjdGx5IHJlZmVyZW5j ZSBIQ0xLIGFzIHRoZSBzZWNvbmQKPiBjbG9jaywgb3Igd2hldGhlciB0aGV5J3JlIHRyaXZpYWwg ZW5vdWdoIHRvIHNxdWFzaCB0b2dldGhlci4KPiAKClRoZSB0d28gcHJvYmxlbXMgaW4gdGhlIERU UyBhcmUgbm90IGFyZ3VlZCwgdGhlIGNob3NlbiB3YXkgdG8gY29ycmVjdCB0aGVtCmlzIHF1ZXN0 aW9uYWJsZSB0aG91Z2guIFdlbGwsIEkgd29uJ3Qgb2JqZWN0IHRvIHNlZSBpdCBzcGxpdCBpbnRv IHR3bwpjaGFuZ2VzLCBidXQgcGxlYXNlIHNlbmQgdGhlbSBhdCBsZWFzdCBpbiBvbmUgc2VyaWVz IHRoZW4sIHNvIHRoYXQgaXQKd29uJ3QgYmUgbGVmdCBmb3Jnb3R0ZW4uCgotLQpCZXN0IHdpc2hl cywKVmxhZGltaXIKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMu aW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2xpbnV4LWFybS1rZXJuZWwK