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 5E41BC6FD20 for ; Wed, 8 Mar 2023 13:56:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231788AbjCHN4x (ORCPT ); Wed, 8 Mar 2023 08:56:53 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53082 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231789AbjCHN4b (ORCPT ); Wed, 8 Mar 2023 08:56:31 -0500 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8A445BC7AF; Wed, 8 Mar 2023 05:55:21 -0800 (PST) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id E7F3461831; Wed, 8 Mar 2023 13:54:39 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 66D6FC433D2; Wed, 8 Mar 2023 13:54:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1678283679; bh=LgJmuPh62bzIRF56GeEnleYs9mQgD2X4Stitbg8Wl8Q=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=hA61oRG3xKfbMJL3tc3kmoQ4ZglzlLfkN3tTw4z5mKtKKTgHKmczk0xRb3nlkrdnj B5l9xf0FbnvMvntjpaXx2eamIVEHDU2lxg6q3vRtfhDdDDz3azrGNc9nMzC3QgR7Kj dHe7wwTkW2Gd8qCjBheuU5YHSfeQSM+pD8EUiABs4YNNh/2TovcFFJGHSG5rA8Apko XT1KspJrlRIsFiePDrLPwMo+ucOZ6lpEG7MilbQ4oDtFM/0u3rrwsg0t+7mY2eF5nU m7IdR33AbdfCZK5YADp+fqNTLxbiessPjeMcz8dHw3BSD0Znul1VBfvSu1h6F4ckQ+ bPPu3QZofv/tg== Date: Wed, 8 Mar 2023 13:54:33 +0000 From: Lee Jones To: ChiYuan Huang Cc: ChiaEn Wu , corbet@lwn.net, pavel@ucw.cz, matthias.bgg@gmail.com, andriy.shevchenko@linux.intel.com, jacek.anaszewski@gmail.com, angelogioacchino.delregno@collabora.com, linux-doc@vger.kernel.org, peterwu.pub@gmail.com, linux-leds@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-kernel@vger.kernel.org, szunichen@gmail.com Subject: Re: [PATCH v17 RESEND 2/3] leds: flash: mt6370: Add MediaTek MT6370 flashlight support Message-ID: <20230308135433.GL9667@google.com> References: <20230305100608.GD2574592@google.com> <20230307034433.GA10739@linuxcarl2.richtek.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20230307034433.GA10739@linuxcarl2.richtek.com> Precedence: bulk List-ID: X-Mailing-List: linux-doc@vger.kernel.org On Tue, 07 Mar 2023, ChiYuan Huang wrote: > Hi, Lee: > Reply below the comments. > > On Sun, Mar 05, 2023 at 10:06:08AM +0000, Lee Jones wrote: > > On Thu, 23 Feb 2023, ChiaEn Wu wrote: > > > > > From: ChiYuan Huang > > > > > > The MediaTek MT6370 is a highly-integrated smart power management IC, > > > which includes a single cell Li-Ion/Li-Polymer switching battery > > > charger, a USB Type-C & Power Delivery (PD) controller, dual Flash > > > LED current sources, a RGB LED driver, a backlight WLED driver, > > > a display bias driver and a general LDO for portable devices. > > > > > > Add support for the MT6370 Flash LED driver. Flash LED in MT6370 > > > has 2 channels and support torch/strobe mode. > > > > > > Acked-by: Jacek Anaszewski > > > Co-developed-by: Alice Chen > > > Signed-off-by: Alice Chen > > > Signed-off-by: ChiYuan Huang > > > Signed-off-by: ChiaEn Wu > > > --- > > > v17 > > > - Update the year of Copyright from 2022 to 2023 > > > > > > --- > > > drivers/leds/flash/Kconfig | 13 + > > > drivers/leds/flash/Makefile | 1 + > > > drivers/leds/flash/leds-mt6370-flash.c | 596 +++++++++++++++++++++++++++++++++ > > > 3 files changed, 610 insertions(+) > > > create mode 100644 drivers/leds/flash/leds-mt6370-flash.c [...] > > > +static int _mt6370_flash_brightness_set(struct led_classdev_flash *fl_cdev, > > > + u32 brightness) > > > +{ > > > + struct mt6370_led *led = to_mt6370_led(fl_cdev, flash); > > > + struct mt6370_priv *priv = led->priv; > > > + struct led_flash_setting *setting = &fl_cdev->brightness; > > > + u32 val = (brightness - setting->min) / setting->step; > > > + int ret, i; > > > + > > > + if (led->led_no == MT6370_LED_JOINT) { > > > > What is a "JOINT"? > > > Since MT6370 has two flash led channels. Per channel can drive the current up to 1.5A. > 'JOINT' case is used if 1.5A driving current is not enough, like as flash current 2A. > They can use two channels to drive 'one' flash led by the HW application. > This will make the driving current larger than the capability of one channel. Is "joint" the term used in the datasheet? Please make this definition clear in the code. If I'm asking, others are likely to too. [...] > > > +static int mt6370_init_flash_properties(struct device *dev, > > > + struct mt6370_led *led, > > > + struct fwnode_handle *fwnode) > > > +{ > > > + struct led_classdev_flash *flash = &led->flash; > > > + struct led_classdev *lcdev = &flash->led_cdev; > > > + struct mt6370_priv *priv = led->priv; > > > + struct led_flash_setting *s; > > > + u32 sources[MT6370_MAX_LEDS]; > > > + u32 max_ua, val; > > > + int i, ret, num; > > > + > > > + num = fwnode_property_count_u32(fwnode, "led-sources"); > > > + if (num < 1) > > > + return dev_err_probe(dev, -EINVAL, > > > + "Not specified or wrong number of led-sources\n"); > > > + > > > + ret = fwnode_property_read_u32_array(fwnode, "led-sources", sources, num); > > > + if (ret) > > > + return ret; > > > + > > > + for (i = 0; i < num; i++) { > > > + if (sources[i] >= MT6370_MAX_LEDS) > > > + return -EINVAL; > > > + if (priv->leds_active & BIT(sources[i])) > > > + return -EINVAL; > > > + priv->leds_active |= BIT(sources[i]); > > > + } > > > + > > > + led->led_no = num == 2 ? MT6370_LED_JOINT : sources[0]; > > > + > > > + max_ua = num == 2 ? MT6370_ITORCH_DOUBLE_MAX_uA : MT6370_ITORCH_MAX_uA; > > > + val = MT6370_ITORCH_MIN_uA; > > > > In what scenario does this not get overwritten? > > > Only if the property is missing. This will make the value keep in minimum. If the property is missing, fwnode_property_read_u32() returns an errno, no? If that's the case, val will be over-written in the if() clause? -- Lee Jones [李琼斯] 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 916A5C64EC4 for ; Wed, 8 Mar 2023 13:55:43 +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=EZYo81VYUUV9yRCCqo4wB4TW5xjzFGYKewT/m9h1l0o=; b=CVcLjEm98T9Kbn vuv5NI109k5xtthzQ4j0NqrfRAp70ZQgW3PYEfUWtR7svvYKmHT3WfaM7jpCBsMOmoG8P+3GnuCTt fISA/H1jcsWtNZZGUwiQkkRRIsMVfnx1vwyhjKG4vXXpXFnUTQFIJk4J9LLNs704aC1t//CvuEUx5 l5ir07lAbKInge449C5edzL/IASS0+I8eYY65beBpJOcsN9BWQDkVwIEqMGUCPMSib29pk1KYzT9M JCUPKs0uBlh0+PgYXtu66aK4Vv5OwoLmq02MKKgNcPqDUy9ksHlcrb7okFjtV6uQ0YZ0PJUFW+RgX DhT+FbpWcVSBQczlnMhw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1pZuFk-005Jjs-33; Wed, 08 Mar 2023 13:54:48 +0000 Received: from dfw.source.kernel.org ([139.178.84.217]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1pZuFd-005JjJ-1E; Wed, 08 Mar 2023 13:54:42 +0000 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id E7B0B6182E; Wed, 8 Mar 2023 13:54:39 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 66D6FC433D2; Wed, 8 Mar 2023 13:54:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1678283679; bh=LgJmuPh62bzIRF56GeEnleYs9mQgD2X4Stitbg8Wl8Q=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=hA61oRG3xKfbMJL3tc3kmoQ4ZglzlLfkN3tTw4z5mKtKKTgHKmczk0xRb3nlkrdnj B5l9xf0FbnvMvntjpaXx2eamIVEHDU2lxg6q3vRtfhDdDDz3azrGNc9nMzC3QgR7Kj dHe7wwTkW2Gd8qCjBheuU5YHSfeQSM+pD8EUiABs4YNNh/2TovcFFJGHSG5rA8Apko XT1KspJrlRIsFiePDrLPwMo+ucOZ6lpEG7MilbQ4oDtFM/0u3rrwsg0t+7mY2eF5nU m7IdR33AbdfCZK5YADp+fqNTLxbiessPjeMcz8dHw3BSD0Znul1VBfvSu1h6F4ckQ+ bPPu3QZofv/tg== Date: Wed, 8 Mar 2023 13:54:33 +0000 From: Lee Jones To: ChiYuan Huang Cc: ChiaEn Wu , corbet@lwn.net, pavel@ucw.cz, matthias.bgg@gmail.com, andriy.shevchenko@linux.intel.com, jacek.anaszewski@gmail.com, angelogioacchino.delregno@collabora.com, linux-doc@vger.kernel.org, peterwu.pub@gmail.com, linux-leds@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-kernel@vger.kernel.org, szunichen@gmail.com Subject: Re: [PATCH v17 RESEND 2/3] leds: flash: mt6370: Add MediaTek MT6370 flashlight support Message-ID: <20230308135433.GL9667@google.com> References: <20230305100608.GD2574592@google.com> <20230307034433.GA10739@linuxcarl2.richtek.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20230307034433.GA10739@linuxcarl2.richtek.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230308_055441_183237_5C38F072 X-CRM114-Status: GOOD ( 32.02 ) 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 T24gVHVlLCAwNyBNYXIgMjAyMywgQ2hpWXVhbiBIdWFuZyB3cm90ZToKCj4gSGksIExlZToKPiAg ICBSZXBseSBiZWxvdyB0aGUgY29tbWVudHMuCj4KPiBPbiBTdW4sIE1hciAwNSwgMjAyMyBhdCAx MDowNjowOEFNICswMDAwLCBMZWUgSm9uZXMgd3JvdGU6Cj4gPiBPbiBUaHUsIDIzIEZlYiAyMDIz LCBDaGlhRW4gV3Ugd3JvdGU6Cj4gPgo+ID4gPiBGcm9tOiBDaGlZdWFuIEh1YW5nIDxjeV9odWFu Z0ByaWNodGVrLmNvbT4KPiA+ID4KPiA+ID4gVGhlIE1lZGlhVGVrIE1UNjM3MCBpcyBhIGhpZ2hs eS1pbnRlZ3JhdGVkIHNtYXJ0IHBvd2VyIG1hbmFnZW1lbnQgSUMsCj4gPiA+IHdoaWNoIGluY2x1 ZGVzIGEgc2luZ2xlIGNlbGwgTGktSW9uL0xpLVBvbHltZXIgc3dpdGNoaW5nIGJhdHRlcnkKPiA+ ID4gY2hhcmdlciwgYSBVU0IgVHlwZS1DICYgUG93ZXIgRGVsaXZlcnkgKFBEKSBjb250cm9sbGVy LCBkdWFsIEZsYXNoCj4gPiA+IExFRCBjdXJyZW50IHNvdXJjZXMsIGEgUkdCIExFRCBkcml2ZXIs IGEgYmFja2xpZ2h0IFdMRUQgZHJpdmVyLAo+ID4gPiBhIGRpc3BsYXkgYmlhcyBkcml2ZXIgYW5k IGEgZ2VuZXJhbCBMRE8gZm9yIHBvcnRhYmxlIGRldmljZXMuCj4gPiA+Cj4gPiA+IEFkZCBzdXBw b3J0IGZvciB0aGUgTVQ2MzcwIEZsYXNoIExFRCBkcml2ZXIuIEZsYXNoIExFRCBpbiBNVDYzNzAK PiA+ID4gaGFzIDIgY2hhbm5lbHMgYW5kIHN1cHBvcnQgdG9yY2gvc3Ryb2JlIG1vZGUuCj4gPiA+ Cj4gPiA+IEFja2VkLWJ5OiBKYWNlayBBbmFzemV3c2tpIDxqYWNlay5hbmFzemV3c2tpQGdtYWls LmNvbT4KPiA+ID4gQ28tZGV2ZWxvcGVkLWJ5OiBBbGljZSBDaGVuIDxhbGljZV9jaGVuQHJpY2h0 ZWsuY29tPgo+ID4gPiBTaWduZWQtb2ZmLWJ5OiBBbGljZSBDaGVuIDxhbGljZV9jaGVuQHJpY2h0 ZWsuY29tPgo+ID4gPiBTaWduZWQtb2ZmLWJ5OiBDaGlZdWFuIEh1YW5nIDxjeV9odWFuZ0ByaWNo dGVrLmNvbT4KPiA+ID4gU2lnbmVkLW9mZi1ieTogQ2hpYUVuIFd1IDxjaGlhZW5fd3VAcmljaHRl ay5jb20+Cj4gPiA+IC0tLQo+ID4gPiB2MTcKPiA+ID4gLSBVcGRhdGUgdGhlIHllYXIgb2YgQ29w eXJpZ2h0IGZyb20gMjAyMiB0byAyMDIzCj4gPiA+Cj4gPiA+IC0tLQo+ID4gPiAgZHJpdmVycy9s ZWRzL2ZsYXNoL0tjb25maWcgICAgICAgICAgICAgfCAgMTMgKwo+ID4gPiAgZHJpdmVycy9sZWRz L2ZsYXNoL01ha2VmaWxlICAgICAgICAgICAgfCAgIDEgKwo+ID4gPiAgZHJpdmVycy9sZWRzL2Zs YXNoL2xlZHMtbXQ2MzcwLWZsYXNoLmMgfCA1OTYgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrCj4gPiA+ICAzIGZpbGVzIGNoYW5nZWQsIDYxMCBpbnNlcnRpb25zKCspCj4gPiA+ICBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9sZWRzL2ZsYXNoL2xlZHMtbXQ2MzcwLWZsYXNoLmMK ClsuLi5dCgo+ID4gPiArc3RhdGljIGludCBfbXQ2MzcwX2ZsYXNoX2JyaWdodG5lc3Nfc2V0KHN0 cnVjdCBsZWRfY2xhc3NkZXZfZmxhc2ggKmZsX2NkZXYsCj4gPiA+ICsJCQkJCXUzMiBicmlnaHRu ZXNzKQo+ID4gPiArewo+ID4gPiArCXN0cnVjdCBtdDYzNzBfbGVkICpsZWQgPSB0b19tdDYzNzBf bGVkKGZsX2NkZXYsIGZsYXNoKTsKPiA+ID4gKwlzdHJ1Y3QgbXQ2MzcwX3ByaXYgKnByaXYgPSBs ZWQtPnByaXY7Cj4gPiA+ICsJc3RydWN0IGxlZF9mbGFzaF9zZXR0aW5nICpzZXR0aW5nID0gJmZs X2NkZXYtPmJyaWdodG5lc3M7Cj4gPiA+ICsJdTMyIHZhbCA9IChicmlnaHRuZXNzIC0gc2V0dGlu Zy0+bWluKSAvIHNldHRpbmctPnN0ZXA7Cj4gPiA+ICsJaW50IHJldCwgaTsKPiA+ID4gKwo+ID4g PiArCWlmIChsZWQtPmxlZF9ubyA9PSBNVDYzNzBfTEVEX0pPSU5UKSB7Cj4gPgo+ID4gV2hhdCBp cyBhICJKT0lOVCI/Cj4gPgo+IFNpbmNlIE1UNjM3MCBoYXMgdHdvIGZsYXNoIGxlZCBjaGFubmVs cy4gUGVyIGNoYW5uZWwgY2FuIGRyaXZlIHRoZSBjdXJyZW50IHVwIHRvIDEuNUEuCj4gJ0pPSU5U JyBjYXNlIGlzIHVzZWQgaWYgMS41QSBkcml2aW5nIGN1cnJlbnQgaXMgbm90IGVub3VnaCwgbGlr ZSBhcyBmbGFzaCBjdXJyZW50IDJBLgo+IFRoZXkgY2FuIHVzZSB0d28gY2hhbm5lbHMgdG8gZHJp dmUgJ29uZScgZmxhc2ggbGVkIGJ5IHRoZSBIVyBhcHBsaWNhdGlvbi4KPiBUaGlzIHdpbGwgbWFr ZSB0aGUgZHJpdmluZyBjdXJyZW50IGxhcmdlciB0aGFuIHRoZSBjYXBhYmlsaXR5IG9mIG9uZSBj aGFubmVsLgoKSXMgImpvaW50IiB0aGUgdGVybSB1c2VkIGluIHRoZSBkYXRhc2hlZXQ/CgpQbGVh c2UgbWFrZSB0aGlzIGRlZmluaXRpb24gY2xlYXIgaW4gdGhlIGNvZGUuCgpJZiBJJ20gYXNraW5n LCBvdGhlcnMgYXJlIGxpa2VseSB0byB0b28uCgpbLi4uXQoKPiA+ID4gK3N0YXRpYyBpbnQgbXQ2 MzcwX2luaXRfZmxhc2hfcHJvcGVydGllcyhzdHJ1Y3QgZGV2aWNlICpkZXYsCj4gPiA+ICsJCQkJ CXN0cnVjdCBtdDYzNzBfbGVkICpsZWQsCj4gPiA+ICsJCQkJCXN0cnVjdCBmd25vZGVfaGFuZGxl ICpmd25vZGUpCj4gPiA+ICt7Cj4gPiA+ICsJc3RydWN0IGxlZF9jbGFzc2Rldl9mbGFzaCAqZmxh c2ggPSAmbGVkLT5mbGFzaDsKPiA+ID4gKwlzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsY2RldiA9ICZm bGFzaC0+bGVkX2NkZXY7Cj4gPiA+ICsJc3RydWN0IG10NjM3MF9wcml2ICpwcml2ID0gbGVkLT5w cml2Owo+ID4gPiArCXN0cnVjdCBsZWRfZmxhc2hfc2V0dGluZyAqczsKPiA+ID4gKwl1MzIgc291 cmNlc1tNVDYzNzBfTUFYX0xFRFNdOwo+ID4gPiArCXUzMiBtYXhfdWEsIHZhbDsKPiA+ID4gKwlp bnQgaSwgcmV0LCBudW07Cj4gPiA+ICsKPiA+ID4gKwludW0gPSBmd25vZGVfcHJvcGVydHlfY291 bnRfdTMyKGZ3bm9kZSwgImxlZC1zb3VyY2VzIik7Cj4gPiA+ICsJaWYgKG51bSA8IDEpCj4gPiA+ ICsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKPiA+ID4gKwkJCQkgICAgICJO b3Qgc3BlY2lmaWVkIG9yIHdyb25nIG51bWJlciBvZiBsZWQtc291cmNlc1xuIik7Cj4gPiA+ICsK PiA+ID4gKwlyZXQgPSBmd25vZGVfcHJvcGVydHlfcmVhZF91MzJfYXJyYXkoZndub2RlLCAibGVk LXNvdXJjZXMiLCBzb3VyY2VzLCBudW0pOwo+ID4gPiArCWlmIChyZXQpCj4gPiA+ICsJCXJldHVy biByZXQ7Cj4gPiA+ICsKPiA+ID4gKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKPiA+ID4g KwkJaWYgKHNvdXJjZXNbaV0gPj0gTVQ2MzcwX01BWF9MRURTKQo+ID4gPiArCQkJcmV0dXJuIC1F SU5WQUw7Cj4gPiA+ICsJCWlmIChwcml2LT5sZWRzX2FjdGl2ZSAmIEJJVChzb3VyY2VzW2ldKSkK PiA+ID4gKwkJCXJldHVybiAtRUlOVkFMOwo+ID4gPiArCQlwcml2LT5sZWRzX2FjdGl2ZSB8PSBC SVQoc291cmNlc1tpXSk7Cj4gPiA+ICsJfQo+ID4gPiArCj4gPiA+ICsJbGVkLT5sZWRfbm8gPSBu dW0gPT0gMiA/IE1UNjM3MF9MRURfSk9JTlQgOiBzb3VyY2VzWzBdOwo+ID4gPiArCj4gPiA+ICsJ bWF4X3VhID0gbnVtID09IDIgPyBNVDYzNzBfSVRPUkNIX0RPVUJMRV9NQVhfdUEgOiBNVDYzNzBf SVRPUkNIX01BWF91QTsKPiA+ID4gKwl2YWwgPSBNVDYzNzBfSVRPUkNIX01JTl91QTsKPiA+Cj4g PiBJbiB3aGF0IHNjZW5hcmlvIGRvZXMgdGhpcyBub3QgZ2V0IG92ZXJ3cml0dGVuPwo+ID4KPiBP bmx5IGlmIHRoZSBwcm9wZXJ0eSBpcyBtaXNzaW5nLiBUaGlzIHdpbGwgbWFrZSB0aGUgdmFsdWUg a2VlcCBpbiBtaW5pbXVtLgoKSWYgdGhlIHByb3BlcnR5IGlzIG1pc3NpbmcsIGZ3bm9kZV9wcm9w ZXJ0eV9yZWFkX3UzMigpIHJldHVybnMgYW4gZXJybm8sIG5vPwoKSWYgdGhhdCdzIHRoZSBjYXNl LCB2YWwgd2lsbCBiZSBvdmVyLXdyaXR0ZW4gaW4gdGhlIGlmKCkgY2xhdXNlPwoKLS0KTGVlIEpv bmVzIFvmnY7nkLzmlq9dCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxp c3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0 aW5mby9saW51eC1hcm0ta2VybmVsCg==