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=-18.7 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING,SPF_HELO_NONE,SPF_PASS, UNPARSEABLE_RELAY,URIBL_BLOCKED autolearn=ham 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 DF0C6C433DB for ; Sat, 6 Mar 2021 11:26:38 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id A571D65022 for ; Sat, 6 Mar 2021 11:26:38 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230343AbhCFL0H (ORCPT ); Sat, 6 Mar 2021 06:26:07 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49060 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229917AbhCFLZj (ORCPT ); Sat, 6 Mar 2021 06:25:39 -0500 Received: from bhuna.collabora.co.uk (bhuna.collabora.co.uk [IPv6:2a00:1098:0:82:1000:25:2eeb:e3e3]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8FDA7C06175F for ; Sat, 6 Mar 2021 03:25:38 -0800 (PST) Received: from [127.0.0.1] (localhost [127.0.0.1]) (Authenticated sender: ezequiel) with ESMTPSA id 6F1931F46561 Message-ID: <915739c6fc01f17b00c4fac8b7fede1f25396286.camel@collabora.com> Subject: Re: [PATCH 7/7] ARM: dts: at91: sama5d4: add vdec0 component From: Ezequiel Garcia To: Emil Velikov Cc: Nicolas Ferre , kernel@collabora.com, Philipp Zabel , linux-media@vger.kernel.org, linux-rockchip@lists.infradead.org, Nicolas Dufresne , Benjamin Gaignard Date: Sat, 06 Mar 2021 08:25:26 -0300 In-Reply-To: <20210305183924.1754026-8-emil.l.velikov@gmail.com> References: <20210305183924.1754026-1-emil.l.velikov@gmail.com> <20210305183924.1754026-8-emil.l.velikov@gmail.com> Organization: Collabora Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.38.2-1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org (adding another Nicolas) Hi Emil, Thanks a lot for the patch. On Fri, 2021-03-05 at 18:39 +0000, Emil Velikov wrote: > From: Emil Velikov > > The SoC features a Hantro G1 compatible video decoder. > > Cc: Ezequiel Garcia > Cc: Philipp Zabel > Cc: linux-media@vger.kernel.org > Cc: linux-rockchip@lists.infradead.org > Signed-off-by: Emil Velikov > --- >  arch/arm/boot/dts/sama5d4.dtsi                |   9 ++ Usually device-tree changes go to their own patch. The new compatible string "atmel,sama5d4-vdec" needs an update to the DT bindings, see Documentation/devicetree/bindings/media/nxp,imx8mq-vpu.yaml for an example. DT bindings change should also go to a separate patch, see Documentation/devicetree/bindings/submitting-patches.rst. >  arch/arm/configs/sama5_defconfig              |   3 + Better if config changes are a separate patch. But also, the driver is in staging and we haven't enabled in ARM64 defconfig. Let's leave that decision to the machine maintainer to decide. >  drivers/staging/media/hantro/Kconfig          |  10 +- >  drivers/staging/media/hantro/Makefile         |   3 + >  drivers/staging/media/hantro/hantro_drv.c     |   3 + >  drivers/staging/media/hantro/hantro_hw.h      |   1 + >  .../staging/media/hantro/sama5d4_vdec_hw.c    | 118 ++++++++++++++++++ >  7 files changed, 146 insertions(+), 1 deletion(-) >  create mode 100644 drivers/staging/media/hantro/sama5d4_vdec_hw.c > > diff --git a/arch/arm/boot/dts/sama5d4.dtsi b/arch/arm/boot/dts/sama5d4.dtsi > index 05c55875835d..deaf1f6cc784 100644 > --- a/arch/arm/boot/dts/sama5d4.dtsi > +++ b/arch/arm/boot/dts/sama5d4.dtsi > @@ -101,6 +101,15 @@ nfc_sram: sram@100000 { >                         ranges = <0 0x100000 0x2400>; >                 }; >   > +               vdec0: vdec@00300000 { > +                       compatible = "atmel,sama5d4-vdec"; > +                       reg = <0x00300000 0x100000>; > +                       interrupts = <19 IRQ_TYPE_LEVEL_HIGH 4>; > +                       interrupt-names = "vdec"; > +                       clocks = <&pmc PMC_TYPE_PERIPHERAL 19>; > +                       clock-names = "vdec_clk"; > +               }; > + >                 usb0: gadget@400000 { >                         compatible = "atmel,sama5d3-udc"; >                         reg = <0x00400000 0x100000 > diff --git a/arch/arm/configs/sama5_defconfig b/arch/arm/configs/sama5_defconfig > index 0dca50c64503..10806f38abfb 100644 > --- a/arch/arm/configs/sama5_defconfig > +++ b/arch/arm/configs/sama5_defconfig > @@ -200,6 +200,9 @@ CONFIG_RTC_DRV_AT91RM9200=y >  CONFIG_DMADEVICES=y >  CONFIG_AT_HDMAC=y >  CONFIG_AT_XDMAC=y > +CONFIG_STAGING=y > +CONFIG_STAGING_MEDIA=y > +CONFIG_VIDEO_HANTRO=y >  # CONFIG_IOMMU_SUPPORT is not set >  CONFIG_IIO=y >  CONFIG_AT91_ADC=y > diff --git a/drivers/staging/media/hantro/Kconfig b/drivers/staging/media/hantro/Kconfig > index 5b6cf9f62b1a..43762c8164e0 100644 > --- a/drivers/staging/media/hantro/Kconfig > +++ b/drivers/staging/media/hantro/Kconfig > @@ -1,7 +1,7 @@ >  # SPDX-License-Identifier: GPL-2.0 >  config VIDEO_HANTRO >         tristate "Hantro VPU driver" > -       depends on ARCH_MXC || ARCH_ROCKCHIP || COMPILE_TEST > +       depends on ARCH_MXC || ARCH_ROCKCHIP || ARCH_AT91 || COMPILE_TEST >         depends on VIDEO_DEV && VIDEO_V4L2 >         select MEDIA_CONTROLLER >         select MEDIA_CONTROLLER_REQUEST_API > @@ -24,6 +24,14 @@ config VIDEO_HANTRO_IMX8M >         help >           Enable support for i.MX8M SoCs. >   > +config VIDEO_HANTRO_SAMA5D4 > +       bool "Hantro VDEC SAMA5D4 support" > +       depends on VIDEO_HANTRO > +       depends on ARCH_AT91 || COMPILE_TEST > +       default y > +       help > +         Enable support for Atmel SAMA5D4 SoCs. > + >  config VIDEO_HANTRO_ROCKCHIP >         bool "Hantro VPU Rockchip support" >         depends on VIDEO_HANTRO > diff --git a/drivers/staging/media/hantro/Makefile b/drivers/staging/media/hantro/Makefile > index 3747a32799b2..f4b99901eeee 100644 > --- a/drivers/staging/media/hantro/Makefile > +++ b/drivers/staging/media/hantro/Makefile > @@ -22,6 +22,9 @@ hantro-vpu-y += \ >  hantro-vpu-$(CONFIG_VIDEO_HANTRO_IMX8M) += \ >                 imx8m_vpu_hw.o >   > +hantro-vpu-$(CONFIG_VIDEO_HANTRO_SAMA5D4) += \ > +               sama5d4_vdec_hw.o > + >  hantro-vpu-$(CONFIG_VIDEO_HANTRO_ROCKCHIP) += \ >                 rk3288_vpu_hw.o \ >                 rk3399_vpu_hw.o > diff --git a/drivers/staging/media/hantro/hantro_drv.c b/drivers/staging/media/hantro/hantro_drv.c > index e5f200e64993..19f1202574a2 100644 > --- a/drivers/staging/media/hantro/hantro_drv.c > +++ b/drivers/staging/media/hantro/hantro_drv.c > @@ -478,6 +478,9 @@ static const struct of_device_id of_hantro_match[] = { >  #endif >  #ifdef CONFIG_VIDEO_HANTRO_IMX8M >         { .compatible = "nxp,imx8mq-vpu", .data = &imx8mq_vpu_variant, }, > +#endif > +#ifdef CONFIG_VIDEO_HANTRO_SAMA5D4 > +       { .compatible = "atmel,sama5d4-vdec", .data = &sama5d4_vdec_variant, }, >  #endif >         { /* sentinel */ } >  }; > diff --git a/drivers/staging/media/hantro/hantro_hw.h b/drivers/staging/media/hantro/hantro_hw.h > index 73c71bb2320c..4d39da1d1581 100644 > --- a/drivers/staging/media/hantro/hantro_hw.h > +++ b/drivers/staging/media/hantro/hantro_hw.h > @@ -152,6 +152,7 @@ extern const struct hantro_variant rk3399_vpu_variant; >  extern const struct hantro_variant rk3328_vpu_variant; >  extern const struct hantro_variant rk3288_vpu_variant; >  extern const struct hantro_variant imx8mq_vpu_variant; > +extern const struct hantro_variant sama5d4_vdec_variant; >   >  extern const struct hantro_postproc_regs hantro_g1_postproc_regs; >   > diff --git a/drivers/staging/media/hantro/sama5d4_vdec_hw.c b/drivers/staging/media/hantro/sama5d4_vdec_hw.c > new file mode 100644 > index 000000000000..9cf1068d986b > --- /dev/null > +++ b/drivers/staging/media/hantro/sama5d4_vdec_hw.c > @@ -0,0 +1,118 @@ > +// SPDX-License-Identifier: GPL-2.0 > +/* > + * Hantro VDEC driver > + * > + * Copyright (C) 2021 Collabora Ltd, Emil Velikov > + */ > + > +#include "hantro.h" > + > + > +/* > + * Supported formats. > + */ > + > +static const struct hantro_fmt sama5d4_vdec_postproc_fmts[] = { > +       { > +               .fourcc = V4L2_PIX_FMT_YUYV, > +               .codec_mode = HANTRO_MODE_NONE, > +       }, > +}; > + I haven't found information on how the series was tested in the cover letter, could you add that to the next iteration? Please test the YUYV post-processed output and MPEG-2 decoding as well. Also add the fluster score on this platform, and while here you could give a pass at v4l2-compliance, which should pass without failures. Note that you need to use v4l2-compliance HEAD from git. https://git.linuxtv.org/v4l-utils.git > +static const struct hantro_fmt sama5d4_vdec_fmts[] = { > +       { > +               .fourcc = V4L2_PIX_FMT_NV12, > +               .codec_mode = HANTRO_MODE_NONE, > +       }, > +       { > +               .fourcc = V4L2_PIX_FMT_MPEG2_SLICE, > +               .codec_mode = HANTRO_MODE_MPEG2_DEC, > +               .max_depth = 2, > +               .frmsize = { > +                       .min_width = 48, > +                       .max_width = 1280, > +                       .step_width = MB_DIM, > +                       .min_height = 48, > +                       .max_height = 720, > +                       .step_height = MB_DIM, > +               }, > +       }, > +       { > +               .fourcc = V4L2_PIX_FMT_VP8_FRAME, > +               .codec_mode = HANTRO_MODE_VP8_DEC, > +               .max_depth = 2, > +               .frmsize = { > +                       .min_width = 48, > +                       .max_width = 1280, > +                       .step_width = MB_DIM, > +                       .min_height = 48, > +                       .max_height = 720, > +                       .step_height = MB_DIM, > +               }, > +       }, > +       { > +               .fourcc = V4L2_PIX_FMT_H264_SLICE, > +               .codec_mode = HANTRO_MODE_H264_DEC, > +               .max_depth = 2, > +               .frmsize = { > +                       .min_width = 48, > +                       .max_width = 1280, > +                       .step_width = MB_DIM, > +                       .min_height = 48, > +                       .max_height = 720, > +                       .step_height = MB_DIM, > +               }, > +       }, > +}; > + > +static int sama5d4_hw_init(struct hantro_dev *vpu) > +{ > +       return 0; Ah, the hantro_variant.init ops is not optional, but if this VPU has no hw-specific init, then it should be. In any case, we might get rid of it soon: Benjamin's work will hopefully remove the i.MX8M need for ctrl_base. And then the static clk_set_rate() in Rockchip variants could be replaced with some dynamic rate using devfreq. Thanks! Ezequiel 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=-18.7 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING,SPF_HELO_NONE,SPF_PASS, UNPARSEABLE_RELAY,URIBL_BLOCKED autolearn=ham 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 2FE32C433DB for ; Sat, 6 Mar 2021 11:25:48 +0000 (UTC) Received: from desiato.infradead.org (desiato.infradead.org [90.155.92.199]) (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 487A464EDB for ; Sat, 6 Mar 2021 11:25:47 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 487A464EDB Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=collabora.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=desiato.20200630; h=Sender:Content-Transfer-Encoding :Content-Type:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:Date:Cc:To:From: Subject:Message-ID:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=vCpElSFQIeEUSJaLVgDqM0l1JlB2KT4Q/aRTjLJVd0M=; b=SlFwWXdColPkY/AuMeMapZYW4 pkkK85UglO8tReujuhfY+VRtpUFsHUsdLvpKYpdRCS5lBbhxsfHran+T0CcV/ZYGdXgq9kOs7K7gI VGSlMiEHSz61mCsahRETJWaiLpphzISc1r9XWQGcSqHe95gUs6fuwdszCNrUVZ6EZLB1Ns2R3Z/ek bW+6cl18btGQYZsHlaZ0MnFpt+i2XVV9a1t/Y0aa0fkeEeuDhpFQJVs/b6ZRSkyE4V39UpbYqGd5B ohdMKvG/024jZz/pR88q3Ylkf4sYHHPiUQaXSwGKqtod6ljatVPl8MMvyQwxNByZFNKUyZgIpdGNg NtS9iNLKg==; Received: from localhost ([::1] helo=desiato.infradead.org) by desiato.infradead.org with esmtp (Exim 4.94 #2 (Red Hat Linux)) id 1lIV40-002sL2-8b; Sat, 06 Mar 2021 11:25:40 +0000 Received: from bhuna.collabora.co.uk ([2a00:1098:0:82:1000:25:2eeb:e3e3]) by desiato.infradead.org with esmtps (Exim 4.94 #2 (Red Hat Linux)) id 1lIV3w-002sKM-CG for linux-rockchip@lists.infradead.org; Sat, 06 Mar 2021 11:25:39 +0000 Received: from [127.0.0.1] (localhost [127.0.0.1]) (Authenticated sender: ezequiel) with ESMTPSA id 6F1931F46561 Message-ID: <915739c6fc01f17b00c4fac8b7fede1f25396286.camel@collabora.com> Subject: Re: [PATCH 7/7] ARM: dts: at91: sama5d4: add vdec0 component From: Ezequiel Garcia To: Emil Velikov Cc: Nicolas Ferre , kernel@collabora.com, Philipp Zabel , linux-media@vger.kernel.org, linux-rockchip@lists.infradead.org, Nicolas Dufresne , Benjamin Gaignard Date: Sat, 06 Mar 2021 08:25:26 -0300 In-Reply-To: <20210305183924.1754026-8-emil.l.velikov@gmail.com> References: <20210305183924.1754026-1-emil.l.velikov@gmail.com> <20210305183924.1754026-8-emil.l.velikov@gmail.com> Organization: Collabora User-Agent: Evolution 3.38.2-1 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210306_112536_505429_B54A7672 X-CRM114-Status: GOOD ( 29.99 ) X-BeenThere: linux-rockchip@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Upstream kernel work for Rockchip platforms List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org KGFkZGluZyBhbm90aGVyIE5pY29sYXMpCgpIaSBFbWlsLAoKVGhhbmtzIGEgbG90IGZvciB0aGUg cGF0Y2guCgpPbiBGcmksIDIwMjEtMDMtMDUgYXQgMTg6MzkgKzAwMDAsIEVtaWwgVmVsaWtvdiB3 cm90ZToKPiBGcm9tOiBFbWlsIFZlbGlrb3YgPGVtaWwudmVsaWtvdkBjb2xsYWJvcmEuY29tPgo+ IAo+IFRoZSBTb0MgZmVhdHVyZXMgYSBIYW50cm8gRzEgY29tcGF0aWJsZSB2aWRlbyBkZWNvZGVy Lgo+IAo+IENjOiBFemVxdWllbCBHYXJjaWEgPGV6ZXF1aWVsQGNvbGxhYm9yYS5jb20+Cj4gQ2M6 IFBoaWxpcHAgWmFiZWwgPHAuemFiZWxAcGVuZ3V0cm9uaXguZGU+Cj4gQ2M6IGxpbnV4LW1lZGlh QHZnZXIua2VybmVsLm9yZwo+IENjOiBsaW51eC1yb2NrY2hpcEBsaXN0cy5pbmZyYWRlYWQub3Jn Cj4gU2lnbmVkLW9mZi1ieTogRW1pbCBWZWxpa292IDxlbWlsLnZlbGlrb3ZAY29sbGFib3JhLmNv bT4KPiAtLS0KPiDCoGFyY2gvYXJtL2Jvb3QvZHRzL3NhbWE1ZDQuZHRzacKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCB8wqDCoCA5ICsrCgpVc3VhbGx5IGRldmljZS10cmVlIGNoYW5nZXMg Z28gdG8gdGhlaXIgb3duIHBhdGNoLgoKVGhlIG5ldyBjb21wYXRpYmxlIHN0cmluZyAiYXRtZWws c2FtYTVkNC12ZGVjIiBuZWVkcwphbiB1cGRhdGUgdG8gdGhlIERUIGJpbmRpbmdzLCBzZWUgRG9j dW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21lZGlhL254cCxpbXg4bXEtdnB1LnlhbWwK Zm9yIGFuIGV4YW1wbGUuCgpEVCBiaW5kaW5ncyBjaGFuZ2Ugc2hvdWxkIGFsc28gZ28gdG8gYSBz ZXBhcmF0ZQpwYXRjaCwgc2VlIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zdWJt aXR0aW5nLXBhdGNoZXMucnN0LgoKPiDCoGFyY2gvYXJtL2NvbmZpZ3Mvc2FtYTVfZGVmY29uZmln wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgMyArCgpCZXR0ZXIgaWYgY29uZmlnIGNo YW5nZXMgYXJlIGEgc2VwYXJhdGUgcGF0Y2guCgpCdXQgYWxzbywgdGhlIGRyaXZlciBpcyBpbiBz dGFnaW5nIGFuZCB3ZSBoYXZlbid0IGVuYWJsZWQKaW4gQVJNNjQgZGVmY29uZmlnLiBMZXQncyBs ZWF2ZSB0aGF0IGRlY2lzaW9uIHRvIHRoZSBtYWNoaW5lCm1haW50YWluZXIgdG8gZGVjaWRlLgoK PiDCoGRyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vS2NvbmZpZ8KgwqDCoMKgwqDCoMKgwqDC oCB8wqAgMTAgKy0KPiDCoGRyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vTWFrZWZpbGXCoMKg wqDCoMKgwqDCoMKgIHzCoMKgIDMgKwo+IMKgZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9o YW50cm9fZHJ2LmPCoMKgwqDCoCB8wqDCoCAzICsKPiDCoGRyaXZlcnMvc3RhZ2luZy9tZWRpYS9o YW50cm8vaGFudHJvX2h3LmjCoMKgwqDCoMKgIHzCoMKgIDEgKwo+IMKgLi4uL3N0YWdpbmcvbWVk aWEvaGFudHJvL3NhbWE1ZDRfdmRlY19ody5jwqDCoMKgIHwgMTE4ICsrKysrKysrKysrKysrKysr Kwo+IMKgNyBmaWxlcyBjaGFuZ2VkLCAxNDYgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQo+ IMKgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vc2FtYTVk NF92ZGVjX2h3LmMKPiAKPiBkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc2FtYTVkNC5k dHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvc2FtYTVkNC5kdHNpCj4gaW5kZXggMDVjNTU4NzU4MzVk Li5kZWFmMWY2Y2M3ODQgMTAwNjQ0Cj4gLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc2FtYTVkNC5k dHNpCj4gKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc2FtYTVkNC5kdHNpCj4gQEAgLTEwMSw2ICsx MDEsMTUgQEAgbmZjX3NyYW06IHNyYW1AMTAwMDAwIHsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByYW5nZXMgPSA8MCAweDEwMDAwMCAweDI0MDA+Owo+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfTsKPiDCoAo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqB2ZGVjMDogdmRlY0AwMDMwMDAwMCB7Cj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb21wYXRpYmxlID0gImF0bWVsLHNhbWE1 ZDQtdmRlYyI7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqByZWcgPSA8MHgwMDMwMDAwMCAweDEwMDAwMD47Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpbnRlcnJ1cHRzID0gPDE5IElSUV9UWVBFX0xFVkVMX0hJ R0ggND47Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBp bnRlcnJ1cHQtbmFtZXMgPSAidmRlYyI7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBjbG9ja3MgPSA8JnBtYyBQTUNfVFlQRV9QRVJJUEhFUkFMIDE5PjsK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNsb2NrLW5h bWVzID0gInZkZWNfY2xrIjsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfTsKPiAr Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1c2IwOiBnYWRnZXRANDAwMDAwIHsK PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb21wYXRp YmxlID0gImF0bWVsLHNhbWE1ZDMtdWRjIjsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqByZWcgPSA8MHgwMDQwMDAwMCAweDEwMDAwMAo+IGRpZmYgLS1n aXQgYS9hcmNoL2FybS9jb25maWdzL3NhbWE1X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mv c2FtYTVfZGVmY29uZmlnCj4gaW5kZXggMGRjYTUwYzY0NTAzLi4xMDgwNmYzOGFiZmIgMTAwNjQ0 Cj4gLS0tIGEvYXJjaC9hcm0vY29uZmlncy9zYW1hNV9kZWZjb25maWcKPiArKysgYi9hcmNoL2Fy bS9jb25maWdzL3NhbWE1X2RlZmNvbmZpZwo+IEBAIC0yMDAsNiArMjAwLDkgQEAgQ09ORklHX1JU Q19EUlZfQVQ5MVJNOTIwMD15Cj4gwqBDT05GSUdfRE1BREVWSUNFUz15Cj4gwqBDT05GSUdfQVRf SERNQUM9eQo+IMKgQ09ORklHX0FUX1hETUFDPXkKPiArQ09ORklHX1NUQUdJTkc9eQo+ICtDT05G SUdfU1RBR0lOR19NRURJQT15Cj4gK0NPTkZJR19WSURFT19IQU5UUk89eQo+IMKgIyBDT05GSUdf SU9NTVVfU1VQUE9SVCBpcyBub3Qgc2V0Cj4gwqBDT05GSUdfSUlPPXkKPiDCoENPTkZJR19BVDkx X0FEQz15Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vS2NvbmZp ZyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vS2NvbmZpZwo+IGluZGV4IDViNmNmOWY2 MmIxYS4uNDM3NjJjODE2NGUwIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9o YW50cm8vS2NvbmZpZwo+ICsrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vS2NvbmZp Zwo+IEBAIC0xLDcgKzEsNyBAQAo+IMKgIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu MAo+IMKgY29uZmlnIFZJREVPX0hBTlRSTwo+IMKgwqDCoMKgwqDCoMKgwqB0cmlzdGF0ZSAiSGFu dHJvIFZQVSBkcml2ZXIiCj4gLcKgwqDCoMKgwqDCoMKgZGVwZW5kcyBvbiBBUkNIX01YQyB8fCBB UkNIX1JPQ0tDSElQIHx8IENPTVBJTEVfVEVTVAo+ICvCoMKgwqDCoMKgwqDCoGRlcGVuZHMgb24g QVJDSF9NWEMgfHwgQVJDSF9ST0NLQ0hJUCB8fCBBUkNIX0FUOTEgfHwgQ09NUElMRV9URVNUCj4g wqDCoMKgwqDCoMKgwqDCoGRlcGVuZHMgb24gVklERU9fREVWICYmIFZJREVPX1Y0TDIKPiDCoMKg wqDCoMKgwqDCoMKgc2VsZWN0IE1FRElBX0NPTlRST0xMRVIKPiDCoMKgwqDCoMKgwqDCoMKgc2Vs ZWN0IE1FRElBX0NPTlRST0xMRVJfUkVRVUVTVF9BUEkKPiBAQCAtMjQsNiArMjQsMTQgQEAgY29u ZmlnIFZJREVPX0hBTlRST19JTVg4TQo+IMKgwqDCoMKgwqDCoMKgwqBoZWxwCj4gwqDCoMKgwqDC oMKgwqDCoMKgIEVuYWJsZSBzdXBwb3J0IGZvciBpLk1YOE0gU29Dcy4KPiDCoAo+ICtjb25maWcg VklERU9fSEFOVFJPX1NBTUE1RDQKPiArwqDCoMKgwqDCoMKgwqBib29sICJIYW50cm8gVkRFQyBT QU1BNUQ0IHN1cHBvcnQiCj4gK8KgwqDCoMKgwqDCoMKgZGVwZW5kcyBvbiBWSURFT19IQU5UUk8K PiArwqDCoMKgwqDCoMKgwqBkZXBlbmRzIG9uIEFSQ0hfQVQ5MSB8fCBDT01QSUxFX1RFU1QKPiAr wqDCoMKgwqDCoMKgwqBkZWZhdWx0IHkKPiArwqDCoMKgwqDCoMKgwqBoZWxwCj4gK8KgwqDCoMKg wqDCoMKgwqAgRW5hYmxlIHN1cHBvcnQgZm9yIEF0bWVsIFNBTUE1RDQgU29Dcy4KPiArCj4gwqBj b25maWcgVklERU9fSEFOVFJPX1JPQ0tDSElQCj4gwqDCoMKgwqDCoMKgwqDCoGJvb2wgIkhhbnRy byBWUFUgUm9ja2NoaXAgc3VwcG9ydCIKPiDCoMKgwqDCoMKgwqDCoMKgZGVwZW5kcyBvbiBWSURF T19IQU5UUk8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9NYWtl ZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vTWFrZWZpbGUKPiBpbmRleCAzNzQ3 YTMyNzk5YjIuLmY0Yjk5OTAxZWVlZSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVk aWEvaGFudHJvL01ha2VmaWxlCj4gKysrIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9N YWtlZmlsZQo+IEBAIC0yMiw2ICsyMiw5IEBAIGhhbnRyby12cHUteSArPSBcCj4gwqBoYW50cm8t dnB1LSQoQ09ORklHX1ZJREVPX0hBTlRST19JTVg4TSkgKz0gXAo+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgaW14OG1fdnB1X2h3Lm8KPiDCoAo+ICtoYW50cm8tdnB1LSQoQ09ORklH X1ZJREVPX0hBTlRST19TQU1BNUQ0KSArPSBcCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHNhbWE1ZDRfdmRlY19ody5vCj4gKwo+IMKgaGFudHJvLXZwdS0kKENPTkZJR19WSURFT19I QU5UUk9fUk9DS0NISVApICs9IFwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJr MzI4OF92cHVfaHcubyBcCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByazMzOTlf dnB1X2h3Lm8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9oYW50 cm9fZHJ2LmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyb19kcnYuYwo+IGlu ZGV4IGU1ZjIwMGU2NDk5My4uMTlmMTIwMjU3NGEyIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvc3Rh Z2luZy9tZWRpYS9oYW50cm8vaGFudHJvX2Rydi5jCj4gKysrIGIvZHJpdmVycy9zdGFnaW5nL21l ZGlhL2hhbnRyby9oYW50cm9fZHJ2LmMKPiBAQCAtNDc4LDYgKzQ3OCw5IEBAIHN0YXRpYyBjb25z dCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX2hhbnRyb19tYXRjaFtdID0gewo+IMKgI2VuZGlmCj4g wqAjaWZkZWYgQ09ORklHX1ZJREVPX0hBTlRST19JTVg4TQo+IMKgwqDCoMKgwqDCoMKgwqB7IC5j b21wYXRpYmxlID0gIm54cCxpbXg4bXEtdnB1IiwgLmRhdGEgPSAmaW14OG1xX3ZwdV92YXJpYW50 LCB9LAo+ICsjZW5kaWYKPiArI2lmZGVmIENPTkZJR19WSURFT19IQU5UUk9fU0FNQTVENAo+ICvC oMKgwqDCoMKgwqDCoHsgLmNvbXBhdGlibGUgPSAiYXRtZWwsc2FtYTVkNC12ZGVjIiwgLmRhdGEg PSAmc2FtYTVkNF92ZGVjX3ZhcmlhbnQsIH0sCj4gwqAjZW5kaWYKPiDCoMKgwqDCoMKgwqDCoMKg eyAvKiBzZW50aW5lbCAqLyB9Cj4gwqB9Owo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcv bWVkaWEvaGFudHJvL2hhbnRyb19ody5oIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9o YW50cm9faHcuaAo+IGluZGV4IDczYzcxYmIyMzIwYy4uNGQzOWRhMWQxNTgxIDEwMDY0NAo+IC0t LSBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX2h3LmgKPiArKysgYi9kcml2 ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyb19ody5oCj4gQEAgLTE1Miw2ICsxNTIsNyBA QCBleHRlcm4gY29uc3Qgc3RydWN0IGhhbnRyb192YXJpYW50IHJrMzM5OV92cHVfdmFyaWFudDsK PiDCoGV4dGVybiBjb25zdCBzdHJ1Y3QgaGFudHJvX3ZhcmlhbnQgcmszMzI4X3ZwdV92YXJpYW50 Owo+IMKgZXh0ZXJuIGNvbnN0IHN0cnVjdCBoYW50cm9fdmFyaWFudCByazMyODhfdnB1X3Zhcmlh bnQ7Cj4gwqBleHRlcm4gY29uc3Qgc3RydWN0IGhhbnRyb192YXJpYW50IGlteDhtcV92cHVfdmFy aWFudDsKPiArZXh0ZXJuIGNvbnN0IHN0cnVjdCBoYW50cm9fdmFyaWFudCBzYW1hNWQ0X3ZkZWNf dmFyaWFudDsKPiDCoAo+IMKgZXh0ZXJuIGNvbnN0IHN0cnVjdCBoYW50cm9fcG9zdHByb2NfcmVn cyBoYW50cm9fZzFfcG9zdHByb2NfcmVnczsKPiDCoAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3N0 YWdpbmcvbWVkaWEvaGFudHJvL3NhbWE1ZDRfdmRlY19ody5jIGIvZHJpdmVycy9zdGFnaW5nL21l ZGlhL2hhbnRyby9zYW1hNWQ0X3ZkZWNfaHcuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5k ZXggMDAwMDAwMDAwMDAwLi45Y2YxMDY4ZDk4NmIKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJp dmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9zYW1hNWQ0X3ZkZWNfaHcuYwo+IEBAIC0wLDAgKzEs MTE4IEBACj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4gKy8qCj4gKyAq IEhhbnRybyBWREVDIGRyaXZlcgo+ICsgKgo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQ29sbGFi b3JhIEx0ZCwgRW1pbCBWZWxpa292IDxlbWlsLnZlbGlrb3ZAY29sbGFib3JhLmNvbT4KPiArICov Cj4gKwo+ICsjaW5jbHVkZSAiaGFudHJvLmgiCj4gKwo+ICsKPiArLyoKPiArICogU3VwcG9ydGVk IGZvcm1hdHMuCj4gKyAqLwo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBoYW50cm9fZm10IHNh bWE1ZDRfdmRlY19wb3N0cHJvY19mbXRzW10gPSB7Cj4gK8KgwqDCoMKgwqDCoMKgewo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAuZm91cmNjID0gVjRMMl9QSVhfRk1UX1lVWVYsCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5jb2RlY19tb2RlID0gSEFOVFJPX01PREVf Tk9ORSwKPiArwqDCoMKgwqDCoMKgwqB9LAo+ICt9Owo+ICsKCkkgaGF2ZW4ndCBmb3VuZCBpbmZv cm1hdGlvbiBvbiBob3cgdGhlIHNlcmllcwp3YXMgdGVzdGVkIGluIHRoZSBjb3ZlciBsZXR0ZXIs IGNvdWxkIHlvdSBhZGQgdGhhdCB0byB0aGUgbmV4dAppdGVyYXRpb24/CgpQbGVhc2UgdGVzdCB0 aGUgWVVZViBwb3N0LXByb2Nlc3NlZCBvdXRwdXQgYW5kIE1QRUctMiBkZWNvZGluZyBhcyB3ZWxs LgoKQWxzbyBhZGQgdGhlIGZsdXN0ZXIgc2NvcmUgb24gdGhpcyBwbGF0Zm9ybSwgYW5kIHdoaWxl IGhlcmUgeW91IGNvdWxkCmdpdmUgYSBwYXNzIGF0IHY0bDItY29tcGxpYW5jZSwgd2hpY2ggc2hv dWxkIHBhc3Mgd2l0aG91dCBmYWlsdXJlcy4KTm90ZSB0aGF0IHlvdSBuZWVkIHRvIHVzZSB2NGwy LWNvbXBsaWFuY2UgSEVBRCBmcm9tIGdpdC4KCmh0dHBzOi8vZ2l0LmxpbnV4dHYub3JnL3Y0bC11 dGlscy5naXQKCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGFudHJvX2ZtdCBzYW1hNWQ0X3ZkZWNf Zm10c1tdID0gewo+ICvCoMKgwqDCoMKgwqDCoHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgLmZvdXJjYyA9IFY0TDJfUElYX0ZNVF9OVjEyLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAuY29kZWNfbW9kZSA9IEhBTlRST19NT0RFX05PTkUsCj4gK8KgwqDCoMKgwqDC oMKgfSwKPiArwqDCoMKgwqDCoMKgwqB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oC5mb3VyY2MgPSBWNEwyX1BJWF9GTVRfTVBFRzJfU0xJQ0UsCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoC5jb2RlY19tb2RlID0gSEFOVFJPX01PREVfTVBFRzJfREVDLAo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAubWF4X2RlcHRoID0gMiwKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgLmZybXNpemUgPSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAubWluX3dpZHRoID0gNDgsCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAubWF4X3dpZHRoID0gMTI4MCwKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5zdGVwX3dpZHRoID0g TUJfRElNLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg Lm1pbl9oZWlnaHQgPSA0OCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoC5tYXhfaGVpZ2h0ID0gNzIwLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgLnN0ZXBfaGVpZ2h0ID0gTUJfRElNLAo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqB9LAo+ICvCoMKgwqDCoMKgwqDCoH0sCgo+ICvCoMKgwqDCoMKg wqDCoHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLmZvdXJjYyA9IFY0TDJfUElY X0ZNVF9WUDhfRlJBTUUsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5jb2RlY19t b2RlID0gSEFOVFJPX01PREVfVlA4X0RFQywKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgLm1heF9kZXB0aCA9IDIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5mcm1z aXplID0gewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg Lm1pbl93aWR0aCA9IDQ4LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgLm1heF93aWR0aCA9IDEyODAsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAuc3RlcF93aWR0aCA9IE1CX0RJTSwKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5taW5faGVpZ2h0ID0gNDgsCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAubWF4X2hlaWdodCA9 IDcyMCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5z dGVwX2hlaWdodCA9IE1CX0RJTSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfSwK PiArwqDCoMKgwqDCoMKgwqB9LAo+ICvCoMKgwqDCoMKgwqDCoHsKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgLmZvdXJjYyA9IFY0TDJfUElYX0ZNVF9IMjY0X1NMSUNFLAo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAuY29kZWNfbW9kZSA9IEhBTlRST19NT0RFX0gyNjRf REVDLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAubWF4X2RlcHRoID0gMiwKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLmZybXNpemUgPSB7Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAubWluX3dpZHRoID0gNDgsCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAubWF4X3dpZHRoID0g MTI4MCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5z dGVwX3dpZHRoID0gTUJfRElNLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgLm1pbl9oZWlnaHQgPSA0OCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5tYXhfaGVpZ2h0ID0gNzIwLAo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLnN0ZXBfaGVpZ2h0ID0gTUJfRElNLAo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9LAo+ICvCoMKgwqDCoMKgwqDCoH0sCj4g K307Cj4gKwoKPiArc3RhdGljIGludCBzYW1hNWQ0X2h3X2luaXQoc3RydWN0IGhhbnRyb19kZXYg KnZwdSkKPiArewo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiAwOwoKQWgsIHRoZSBoYW50cm9fdmFy aWFudC5pbml0IG9wcyBpcyBub3Qgb3B0aW9uYWwsIGJ1dAppZiB0aGlzIFZQVSBoYXMgbm8gaHct c3BlY2lmaWMgaW5pdCwgdGhlbiBpdCBzaG91bGQgYmUuCgpJbiBhbnkgY2FzZSwgd2UgbWlnaHQg Z2V0IHJpZCBvZiBpdCBzb29uOiBCZW5qYW1pbidzIHdvcmsKd2lsbCBob3BlZnVsbHkgcmVtb3Zl IHRoZSBpLk1YOE0gbmVlZCBmb3IgY3RybF9iYXNlLgoKQW5kIHRoZW4gdGhlIHN0YXRpYyBjbGtf c2V0X3JhdGUoKSBpbiBSb2NrY2hpcCB2YXJpYW50cyBjb3VsZApiZSByZXBsYWNlZCB3aXRoIHNv bWUgZHluYW1pYyByYXRlIHVzaW5nIGRldmZyZXEuCgpUaGFua3MhCkV6ZXF1aWVsCgoKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTGludXgtcm9ja2NoaXAg bWFpbGluZyBsaXN0CkxpbnV4LXJvY2tjaGlwQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xp c3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1yb2NrY2hpcAo=