From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1180818132A; Wed, 2 Jul 2025 15:02:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751468536; cv=none; b=l6SYkMGXFBKjjAc2esFwSyH712pZOgU4tTBYuwyAyo37Qx9KbWNu72Mn66Fh4WSF6DSPfYrouJo3ITu1CO0rPiUvQmYdhE2m/NGs4Wd/U6nb1ooAzKfhqWKXT0NHjlI5ivhIDifeHzXvD3x/OayZAv1K9mWtroPgYxqcWeN5rf0= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751468536; c=relaxed/simple; bh=k+A/cyQXhULkpaNkhcUlCGAw8rGrSckexTfJa10Qp04=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=UKIJl1lnZJkr8kJHTd5wPnjVoTzt2LTFl4CvKH+nR7/MDhAuW/do/kKWw0ssSV+w7xO6D0nm2ztXnJtEdZfmK32zvH6pfy0BhHLssQPosKbytTaUtsrCW5comZVuO0suHJmcx6qOl7nHRXzNxLlG0Mx+nMx2Y+pyX7GcoZvxZAE= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=UQ5gjy9V; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="UQ5gjy9V" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 52682C4CEED; Wed, 2 Jul 2025 15:02:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1751468535; bh=k+A/cyQXhULkpaNkhcUlCGAw8rGrSckexTfJa10Qp04=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=UQ5gjy9VmJh9zgyRJNFNNSmzhex5vFfF3bWr8LAXL3oLfIzYui4sps4vtuTmlqM/8 5AeEn5MZMyDNrYboCCTa7pHiejd+3zLh4zDE8hyPvf0lSOy5Wa65M4yfTVTrrLEhBK mP/EeNxGsciKQhq6rR5cSHtkabL7y3LjUdPt6R3z5IUwTA+MIbXKUqeMygY6ooxwXy g9zrs2FbnZEbwP14aoTuVjMe3rh35GaN4CtoAgk6DKIRWrNtqUt9nEVZREkQnuN/tS RJTG/JZlOUa+0TvJnHng2t4O9OkesmMlBoXMI/7D1sw1D5HTSmHzh/tJOZAV1fA5Se wzpU8aAcDYPDA== Date: Wed, 2 Jul 2025 16:02:10 +0100 From: Lee Jones To: Chris Morgan Cc: linux-pm@vger.kernel.org, linux-rockchip@lists.infradead.org, devicetree@vger.kernel.org, broonie@kernel.org, lgirdwood@gmail.com, sre@kernel.org, heiko@sntech.de, conor+dt@kernel.org, krzk+dt@kernel.org, robh@kernel.org, Chris Morgan Subject: Re: [PATCH V3 2/5] mfd: bq257xx: Add support for BQ25703A core driver Message-ID: <20250702150210.GS10134@google.com> References: <20250623162223.184304-1-macroalpha82@gmail.com> <20250623162223.184304-3-macroalpha82@gmail.com> Precedence: bulk X-Mailing-List: linux-pm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20250623162223.184304-3-macroalpha82@gmail.com> On Mon, 23 Jun 2025, Chris Morgan wrote: > From: Chris Morgan > > The Texas Instruments BQ25703A is an integrated charger manager and > boost converter. > > The MFD driver initalizes the device for the regulator driver > and power supply driver. > > Signed-off-by: Chris Morgan > --- > drivers/mfd/Kconfig | 11 ++++ > drivers/mfd/Makefile | 1 + > drivers/mfd/bq257xx.c | 104 ++++++++++++++++++++++++++++++++++ > include/linux/mfd/bq257xx.h | 108 ++++++++++++++++++++++++++++++++++++ > 4 files changed, 224 insertions(+) > create mode 100644 drivers/mfd/bq257xx.c > create mode 100644 include/linux/mfd/bq257xx.h > > diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig > index 6fb3768e3d71..d8b39e8a8a17 100644 > --- a/drivers/mfd/Kconfig > +++ b/drivers/mfd/Kconfig > @@ -1585,6 +1585,17 @@ config MFD_TI_LMU > LM36274. It consists of backlight, LED and regulator driver. > It provides consistent device controls for lighting functions. > > +config MFD_BQ257XX > + tristate "TI BQ257XX Buck/Boost Charge Controller" > + depends on I2C > + select MFD_CORE > + select REGMAP_I2C > + help > + Support Texas Instruments BQ25703 Buck/Boost converter with > + charge controller. It consists of regulators that provide > + system voltage and OTG voltage, and a charger manager for > + batteries containing one or more cells. > + > config MFD_OMAP_USB_HOST > bool "TI OMAP USBHS core and TLL driver" > depends on USB_EHCI_HCD_OMAP || USB_OHCI_HCD_OMAP3 > diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile > index 79495f9f3457..06da932cce5d 100644 > --- a/drivers/mfd/Makefile > +++ b/drivers/mfd/Makefile > @@ -13,6 +13,7 @@ obj-$(CONFIG_MFD_SM501) += sm501.o > obj-$(CONFIG_ARCH_BCM2835) += bcm2835-pm.o > obj-$(CONFIG_MFD_BCM590XX) += bcm590xx.o > obj-$(CONFIG_MFD_BD9571MWV) += bd9571mwv.o > +obj-$(CONFIG_MFD_BQ257XX) += bq257xx.o > obj-$(CONFIG_MFD_CGBC) += cgbc-core.o > obj-$(CONFIG_MFD_CROS_EC_DEV) += cros_ec_dev.o > obj-$(CONFIG_MFD_CS42L43) += cs42l43.o > diff --git a/drivers/mfd/bq257xx.c b/drivers/mfd/bq257xx.c > new file mode 100644 > index 000000000000..27fbb64110ed > --- /dev/null > +++ b/drivers/mfd/bq257xx.c > @@ -0,0 +1,104 @@ > +// SPDX-License-Identifier: GPL-2.0 > +/* > + * BQ257XX Core Driver > + * Copyright (C) 2024 Chris Morgan No updates since then? > + */ > + > +#include > +#include > +#include > +#include > +#include > + > +static const struct regmap_range bq25703_readonly_reg_ranges[] = { > + regmap_reg_range(BQ25703_CHARGER_STATUS, BQ25703_MANUFACT_DEV_ID), > +}; > + > +static const struct regmap_access_table bq25703_writeable_regs = { > + .no_ranges = bq25703_readonly_reg_ranges, > + .n_no_ranges = ARRAY_SIZE(bq25703_readonly_reg_ranges), > +}; > + > +static const struct regmap_range bq25703_volatile_reg_ranges[] = { > + regmap_reg_range(BQ25703_CHARGE_OPTION_0, BQ25703_IIN_HOST), > + regmap_reg_range(BQ25703_CHARGER_STATUS, BQ25703_ADC_OPTION), > +}; > + > +static const struct regmap_access_table bq25703_volatile_regs = { > + .yes_ranges = bq25703_volatile_reg_ranges, > + .n_yes_ranges = ARRAY_SIZE(bq25703_volatile_reg_ranges), > +}; > + > +static const struct regmap_config bq25703_regmap_config = { > + .reg_bits = 8, > + .val_bits = 16, > + .max_register = BQ25703_ADC_OPTION, > + .cache_type = REGCACHE_RBTREE, > + .wr_table = &bq25703_writeable_regs, > + .volatile_table = &bq25703_volatile_regs, > + .val_format_endian = REGMAP_ENDIAN_LITTLE, > +}; > + > +static const struct mfd_cell bq25703_cells[] = { > + MFD_CELL_NAME("bq257xx-regulator"), > + MFD_CELL_NAME("bq257xx-charger"), > +}; > + > +static int bq257xx_probe(struct i2c_client *client) > +{ > + struct bq257xx_device *ddata; > + const struct mfd_cell *cells; > + int nr_cells; > + int ret; > + > + ddata = devm_kzalloc(&client->dev, sizeof(*ddata), GFP_KERNEL); > + if (!ddata) > + return -ENOMEM; > + > + ddata->client = client; > + > + cells = bq25703_cells; > + nr_cells = ARRAY_SIZE(bq25703_cells); What's the justification for using local variables for these? Why not use them directly? > + ddata->regmap = devm_regmap_init_i2c(client, &bq25703_regmap_config); > + if (IS_ERR(ddata->regmap)) { > + dev_err(&client->dev, "Failed to allocate register map\n"); > + return PTR_ERR(ddata->regmap); dev_err_probe() > + } > + > + i2c_set_clientdata(client, ddata); > + > + ret = devm_mfd_add_devices(&client->dev, PLATFORM_DEVID_AUTO, > + cells, nr_cells, NULL, 0, NULL); > + if (ret) { > + dev_err(&client->dev, "Failed to register child devices %d\n", ret); > + return ret; dev_err_probe() > + } > + > + return ret; > +} > + > +static const struct i2c_device_id bq257xx_i2c_ids[] = { > + { "bq25703a" }, > + {} > +}; > +MODULE_DEVICE_TABLE(i2c, bq257xx_i2c_ids); > + > +static const struct of_device_id bq257xx_of_match[] = { > + { .compatible = "ti,bq25703a" }, > + {} > +}; > +MODULE_DEVICE_TABLE(of, bq257xx_of_match); > + > +static struct i2c_driver bq257xx_driver = { > + .driver = { > + .name = "bq257xx", > + .of_match_table = bq257xx_of_match, > + }, > + .probe = bq257xx_probe, > + .id_table = bq257xx_i2c_ids, > +}; > +module_i2c_driver(bq257xx_driver); > + > +MODULE_DESCRIPTION("bq257xx buck/boost/charger driver"); > +MODULE_AUTHOR("Chris Morgan "); > +MODULE_LICENSE("GPL"); > diff --git a/include/linux/mfd/bq257xx.h b/include/linux/mfd/bq257xx.h > new file mode 100644 > index 000000000000..153a96248f32 > --- /dev/null > +++ b/include/linux/mfd/bq257xx.h > @@ -0,0 +1,108 @@ > +/* SPDX-License-Identifier: GPL-2.0 */ > +/* > + * Register definitions for TI BQ257XX > + * Copyright (C) 2020 Texas Instruments Incorporated - http://www.ti.com/ No updates since then? > + */ > + > +#define BQ25703_CHARGE_OPTION_0 0x00 > +#define BQ25703_CHARGE_CURRENT 0x02 > +#define BQ25703_MAX_CHARGE_VOLT 0x04 > +#define BQ25703_OTG_VOLT 0x06 > +#define BQ25703_OTG_CURRENT 0x08 > +#define BQ25703_INPUT_VOLTAGE 0x0a > +#define BQ25703_MIN_VSYS 0x0c > +#define BQ25703_IIN_HOST 0x0e > +#define BQ25703_CHARGER_STATUS 0x20 > +#define BQ25703_PROCHOT_STATUS 0x22 > +#define BQ25703_IIN_DPM 0x24 > +#define BQ25703_ADCIBAT_CHG 0x28 > +#define BQ25703_ADCIINCMPIN 0x2a > +#define BQ25703_ADCVSYSVBAT 0x2c > +#define BQ25703_MANUFACT_DEV_ID 0x2e > +#define BQ25703_CHARGE_OPTION_1 0x30 > +#define BQ25703_CHARGE_OPTION_2 0x32 > +#define BQ25703_CHARGE_OPTION_3 0x34 > +#define BQ25703_ADC_OPTION 0x3a > + > +#define BQ25703_EN_LWPWR BIT(15) > +#define BQ25703_WDTMR_ADJ_MASK GENMASK(14, 13) > +#define BQ25703_WDTMR_DISABLE 0 > +#define BQ25703_WDTMR_5_SEC 1 > +#define BQ25703_WDTMR_88_SEC 2 > +#define BQ25703_WDTMR_175_SEC 3 > + > +#define BQ25703_ICHG_MASK GENMASK(12, 6) > +#define BQ25703_ICHG_STEP_UA 64000 > +#define BQ25703_ICHG_MIN_UA 64000 > +#define BQ25703_ICHG_MAX_UA 8128000 > + > +#define BQ25703_MAX_CHARGE_VOLT_MASK GENMASK(15, 4) > +#define BQ25703_VBATREG_STEP_UV 16000 > +#define BQ25703_VBATREG_MIN_UV 1024000 > +#define BQ25703_VBATREG_MAX_UV 19200000 > + > +#define BQ25703_OTG_VOLT_MASK GENMASK(13, 6) > +#define BQ25703_OTG_VOLT_STEP_UV 64000 > +#define BQ25703_OTG_VOLT_MIN_UV 4480000 > +#define BQ25703_OTG_VOLT_MAX_UV 20800000 > +#define BQ25703_OTG_VOLT_NUM_VOLT 256 > + > +#define BQ25703_OTG_CUR_MASK GENMASK(14, 8) > +#define BQ25703_OTG_CUR_STEP_UA 50000 > +#define BQ25703_OTG_CUR_MAX_UA 6350000 > + > +#define BQ25703_MINVSYS_MASK GENMASK(13, 8) > +#define BQ25703_MINVSYS_STEP_UV 256000 > +#define BQ25703_MINVSYS_MIN_UV 1024000 > +#define BQ25703_MINVSYS_MAX_UV 16128000 > + > +#define BQ25703_STS_AC_STAT BIT(15) > +#define BQ25703_STS_IN_FCHRG BIT(10) > +#define BQ25703_STS_IN_PCHRG BIT(9) > +#define BQ25703_STS_FAULT_ACOV BIT(7) > +#define BQ25703_STS_FAULT_BATOC BIT(6) > +#define BQ25703_STS_FAULT_ACOC BIT(5) > + > +#define BQ25703_IINDPM_MASK GENMASK(14, 8) > +#define BQ25703_IINDPM_STEP_UA 50000 > +#define BQ25703_IINDPM_MIN_UA 50000 > +#define BQ25703_IINDPM_MAX_UA 6400000 > +#define BQ25703_IINDPM_DEFAULT_UA 3300000 > +#define BQ25703_IINDPM_OFFSET_UA 50000 > + > +#define BQ25703_ADCIBAT_DISCHG_MASK GENMASK(6, 0) > +#define BQ25703_ADCIBAT_CHG_MASK GENMASK(14, 8) > +#define BQ25703_ADCIBAT_CHG_STEP_UA 64000 > +#define BQ25703_ADCIBAT_DIS_STEP_UA 256000 > + > +#define BQ25703_ADCIIN GENMASK(15, 8) > +#define BQ25703_ADCIINCMPIN_STEP 50000 > + > +#define BQ25703_ADCVSYS_MASK GENMASK(15, 8) > +#define BQ25703_ADCVBAT_MASK GENMASK(7, 0) > +#define BQ25703_ADCVSYSVBAT_OFFSET_UV 2880000 > +#define BQ25703_ADCVSYSVBAT_STEP 64000 > + > +#define BQ25703_ADC_CH_MASK GENMASK(7, 0) > +#define BQ25703_ADC_CONV_EN BIT(15) > +#define BQ25703_ADC_START BIT(14) > +#define BQ25703_ADC_FULL_SCALE BIT(13) > +#define BQ25703_ADC_CMPIN_EN BIT(7) > +#define BQ25703_ADC_VBUS_EN BIT(6) > +#define BQ25703_ADC_PSYS_EN BIT(5) > +#define BQ25703_ADC_IIN_EN BIT(4) > +#define BQ25703_ADC_IDCHG_EN BIT(3) > +#define BQ25703_ADC_ICHG_EN BIT(2) > +#define BQ25703_ADC_VSYS_EN BIT(1) > +#define BQ25703_ADC_VBAT_EN BIT(0) > + > +#define BQ25703_EN_OTG_MASK BIT(12) > + > +enum bq257xx_id { > + BQ25703A, > +}; > + > +struct bq257xx_device { > + struct i2c_client *client; > + struct regmap *regmap; > +}; > -- > 2.43.0 > -- 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 8D545C83F04 for ; Wed, 2 Jul 2025 15:57:09 +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=SS8E8htcoX+5cA+vxGLJvezuKXnNVKPxT63PV5M1wbk=; b=urZPHjeofwoA9P JUwW8qc9L45VHQ5BQoUZONtMfmRCisRxQCZ3QP10JS3IcLeHleyetxJjni9HXqKdydmNd7s/vdvLQ 42elWAmqs1k5p5tgbPTb824/UKktKQ0/X8Bt+R4TjdSalA5VNQR2axa8twWhvvqt/t/8GpGoRyosD nr6Ix6SuQYBVn8nVY6sLr3BmWDa2MgHyUw8vuPkd6u/jYM90DNnZkb982hcV8+27rQFASrwnPQa8O ym5sT7Ii1KaoGjgtQqfrFMOQ2D7tL00wVl1JzY9Vo8nUTffAwLJuU6gsF4BPlbLTZ5onPnFHbwzLk MyABGZ3dnlMIjMzOD41g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1uWzpT-00000008rto-3XTI; Wed, 02 Jul 2025 15:56:59 +0000 Received: from nyc.source.kernel.org ([147.75.193.91]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1uWyyW-00000008itZ-40Pv for linux-rockchip@lists.infradead.org; Wed, 02 Jul 2025 15:02:18 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by nyc.source.kernel.org (Postfix) with ESMTP id 0081FA53700; Wed, 2 Jul 2025 15:02:16 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 52682C4CEED; Wed, 2 Jul 2025 15:02:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1751468535; bh=k+A/cyQXhULkpaNkhcUlCGAw8rGrSckexTfJa10Qp04=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=UQ5gjy9VmJh9zgyRJNFNNSmzhex5vFfF3bWr8LAXL3oLfIzYui4sps4vtuTmlqM/8 5AeEn5MZMyDNrYboCCTa7pHiejd+3zLh4zDE8hyPvf0lSOy5Wa65M4yfTVTrrLEhBK mP/EeNxGsciKQhq6rR5cSHtkabL7y3LjUdPt6R3z5IUwTA+MIbXKUqeMygY6ooxwXy g9zrs2FbnZEbwP14aoTuVjMe3rh35GaN4CtoAgk6DKIRWrNtqUt9nEVZREkQnuN/tS RJTG/JZlOUa+0TvJnHng2t4O9OkesmMlBoXMI/7D1sw1D5HTSmHzh/tJOZAV1fA5Se wzpU8aAcDYPDA== Date: Wed, 2 Jul 2025 16:02:10 +0100 From: Lee Jones To: Chris Morgan Cc: linux-pm@vger.kernel.org, linux-rockchip@lists.infradead.org, devicetree@vger.kernel.org, broonie@kernel.org, lgirdwood@gmail.com, sre@kernel.org, heiko@sntech.de, conor+dt@kernel.org, krzk+dt@kernel.org, robh@kernel.org, Chris Morgan Subject: Re: [PATCH V3 2/5] mfd: bq257xx: Add support for BQ25703A core driver Message-ID: <20250702150210.GS10134@google.com> References: <20250623162223.184304-1-macroalpha82@gmail.com> <20250623162223.184304-3-macroalpha82@gmail.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20250623162223.184304-3-macroalpha82@gmail.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250702_080217_139306_80E304A0 X-CRM114-Status: GOOD ( 28.09 ) 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 T24gTW9uLCAyMyBKdW4gMjAyNSwgQ2hyaXMgTW9yZ2FuIHdyb3RlOgoKPiBGcm9tOiBDaHJpcyBN b3JnYW4gPG1hY3JvbW9yZ2FuQGhvdG1haWwuY29tPgo+IAo+IFRoZSBUZXhhcyBJbnN0cnVtZW50 cyBCUTI1NzAzQSBpcyBhbiBpbnRlZ3JhdGVkIGNoYXJnZXIgbWFuYWdlciBhbmQKPiBib29zdCBj b252ZXJ0ZXIuCj4gCj4gVGhlIE1GRCBkcml2ZXIgaW5pdGFsaXplcyB0aGUgZGV2aWNlIGZvciB0 aGUgcmVndWxhdG9yIGRyaXZlcgo+IGFuZCBwb3dlciBzdXBwbHkgZHJpdmVyLgo+IAo+IFNpZ25l ZC1vZmYtYnk6IENocmlzIE1vcmdhbiA8bWFjcm9tb3JnYW5AaG90bWFpbC5jb20+Cj4gLS0tCj4g IGRyaXZlcnMvbWZkL0tjb25maWcgICAgICAgICB8ICAxMSArKysrCj4gIGRyaXZlcnMvbWZkL01h a2VmaWxlICAgICAgICB8ICAgMSArCj4gIGRyaXZlcnMvbWZkL2JxMjU3eHguYyAgICAgICB8IDEw NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIGluY2x1ZGUvbGludXgvbWZk L2JxMjU3eHguaCB8IDEwOCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAg NCBmaWxlcyBjaGFuZ2VkLCAyMjQgaW5zZXJ0aW9ucygrKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9tZmQvYnEyNTd4eC5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2xpbnV4 L21mZC9icTI1N3h4LmgKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvS2NvbmZpZyBiL2Ry aXZlcnMvbWZkL0tjb25maWcKPiBpbmRleCA2ZmIzNzY4ZTNkNzEuLmQ4YjM5ZThhOGExNyAxMDA2 NDQKPiAtLS0gYS9kcml2ZXJzL21mZC9LY29uZmlnCj4gKysrIGIvZHJpdmVycy9tZmQvS2NvbmZp Zwo+IEBAIC0xNTg1LDYgKzE1ODUsMTcgQEAgY29uZmlnIE1GRF9USV9MTVUKPiAgCSAgTE0zNjI3 NC4gIEl0IGNvbnNpc3RzIG9mIGJhY2tsaWdodCwgTEVEIGFuZCByZWd1bGF0b3IgZHJpdmVyLgo+ ICAJICBJdCBwcm92aWRlcyBjb25zaXN0ZW50IGRldmljZSBjb250cm9scyBmb3IgbGlnaHRpbmcg ZnVuY3Rpb25zLgo+ICAKPiArY29uZmlnIE1GRF9CUTI1N1hYCj4gKwl0cmlzdGF0ZSAiVEkgQlEy NTdYWCBCdWNrL0Jvb3N0IENoYXJnZSBDb250cm9sbGVyIgo+ICsJZGVwZW5kcyBvbiBJMkMKPiAr CXNlbGVjdCBNRkRfQ09SRQo+ICsJc2VsZWN0IFJFR01BUF9JMkMKPiArCWhlbHAKPiArCSAgU3Vw cG9ydCBUZXhhcyBJbnN0cnVtZW50cyBCUTI1NzAzIEJ1Y2svQm9vc3QgY29udmVydGVyIHdpdGgK PiArCSAgY2hhcmdlIGNvbnRyb2xsZXIuIEl0IGNvbnNpc3RzIG9mIHJlZ3VsYXRvcnMgdGhhdCBw cm92aWRlCj4gKwkgIHN5c3RlbSB2b2x0YWdlIGFuZCBPVEcgdm9sdGFnZSwgYW5kIGEgY2hhcmdl ciBtYW5hZ2VyIGZvcgo+ICsJICBiYXR0ZXJpZXMgY29udGFpbmluZyBvbmUgb3IgbW9yZSBjZWxs cy4KPiArCj4gIGNvbmZpZyBNRkRfT01BUF9VU0JfSE9TVAo+ICAJYm9vbCAiVEkgT01BUCBVU0JI UyBjb3JlIGFuZCBUTEwgZHJpdmVyIgo+ICAJZGVwZW5kcyBvbiBVU0JfRUhDSV9IQ0RfT01BUCB8 fCBVU0JfT0hDSV9IQ0RfT01BUDMKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvTWFrZWZpbGUg Yi9kcml2ZXJzL21mZC9NYWtlZmlsZQo+IGluZGV4IDc5NDk1ZjlmMzQ1Ny4uMDZkYTkzMmNjZTVk IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvbWZkL01ha2VmaWxlCj4gKysrIGIvZHJpdmVycy9tZmQv TWFrZWZpbGUKPiBAQCAtMTMsNiArMTMsNyBAQCBvYmotJChDT05GSUdfTUZEX1NNNTAxKQkJKz0g c201MDEubwo+ICBvYmotJChDT05GSUdfQVJDSF9CQ00yODM1KQkrPSBiY20yODM1LXBtLm8KPiAg b2JqLSQoQ09ORklHX01GRF9CQ001OTBYWCkJKz0gYmNtNTkweHgubwo+ICBvYmotJChDT05GSUdf TUZEX0JEOTU3MU1XVikJKz0gYmQ5NTcxbXd2Lm8KPiArb2JqLSQoQ09ORklHX01GRF9CUTI1N1hY KQkrPSBicTI1N3h4Lm8KPiAgb2JqLSQoQ09ORklHX01GRF9DR0JDKQkJKz0gY2diYy1jb3JlLm8K PiAgb2JqLSQoQ09ORklHX01GRF9DUk9TX0VDX0RFVikJKz0gY3Jvc19lY19kZXYubwo+ICBvYmot JChDT05GSUdfTUZEX0NTNDJMNDMpCSs9IGNzNDJsNDMubwo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L21mZC9icTI1N3h4LmMgYi9kcml2ZXJzL21mZC9icTI1N3h4LmMKPiBuZXcgZmlsZSBtb2RlIDEw MDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uMjdmYmI2NDExMGVkCj4gLS0tIC9kZXYvbnVsbAo+ ICsrKyBiL2RyaXZlcnMvbWZkL2JxMjU3eHguYwo+IEBAIC0wLDAgKzEsMTA0IEBACj4gKy8vIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4gKy8qCj4gKyAqIEJRMjU3WFggQ29yZSBE cml2ZXIKPiArICogQ29weXJpZ2h0IChDKSAyMDI0IENocmlzIE1vcmdhbiA8bWFjcm9tb3JnYW5A aG90bWFpbC5jb20+CgpObyB1cGRhdGVzIHNpbmNlIHRoZW4/Cgo+ICsgKi8KPiArCj4gKyNpbmNs dWRlIDxsaW51eC9kZXZpY2UuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgo+ICsjaW5jbHVk ZSA8bGludXgvbWZkL2JxMjU3eHguaD4KPiArI2luY2x1ZGUgPGxpbnV4L21mZC9jb3JlLmg+Cj4g KyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVn bWFwX3JhbmdlIGJxMjU3MDNfcmVhZG9ubHlfcmVnX3Jhbmdlc1tdID0gewo+ICsJcmVnbWFwX3Jl Z19yYW5nZShCUTI1NzAzX0NIQVJHRVJfU1RBVFVTLCBCUTI1NzAzX01BTlVGQUNUX0RFVl9JRCks Cj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9hY2Nlc3NfdGFibGUgYnEy NTcwM193cml0ZWFibGVfcmVncyA9IHsKPiArCS5ub19yYW5nZXMgPSBicTI1NzAzX3JlYWRvbmx5 X3JlZ19yYW5nZXMsCj4gKwkubl9ub19yYW5nZXMgPSBBUlJBWV9TSVpFKGJxMjU3MDNfcmVhZG9u bHlfcmVnX3JhbmdlcyksCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9y YW5nZSBicTI1NzAzX3ZvbGF0aWxlX3JlZ19yYW5nZXNbXSA9IHsKPiArCXJlZ21hcF9yZWdfcmFu Z2UoQlEyNTcwM19DSEFSR0VfT1BUSU9OXzAsIEJRMjU3MDNfSUlOX0hPU1QpLAo+ICsJcmVnbWFw X3JlZ19yYW5nZShCUTI1NzAzX0NIQVJHRVJfU1RBVFVTLCBCUTI1NzAzX0FEQ19PUFRJT04pLAo+ ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfYWNjZXNzX3RhYmxlIGJxMjU3 MDNfdm9sYXRpbGVfcmVncyA9IHsKPiArCS55ZXNfcmFuZ2VzID0gYnEyNTcwM192b2xhdGlsZV9y ZWdfcmFuZ2VzLAo+ICsJLm5feWVzX3JhbmdlcyA9IEFSUkFZX1NJWkUoYnEyNTcwM192b2xhdGls ZV9yZWdfcmFuZ2VzKSwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2Nv bmZpZyBicTI1NzAzX3JlZ21hcF9jb25maWcgPSB7Cj4gKwkucmVnX2JpdHMgPSA4LAo+ICsJLnZh bF9iaXRzID0gMTYsCj4gKwkubWF4X3JlZ2lzdGVyID0gQlEyNTcwM19BRENfT1BUSU9OLAo+ICsJ LmNhY2hlX3R5cGUgPSBSRUdDQUNIRV9SQlRSRUUsCj4gKwkud3JfdGFibGUgPSAmYnEyNTcwM193 cml0ZWFibGVfcmVncywKPiArCS52b2xhdGlsZV90YWJsZSA9ICZicTI1NzAzX3ZvbGF0aWxlX3Jl Z3MsCj4gKwkudmFsX2Zvcm1hdF9lbmRpYW4gPSBSRUdNQVBfRU5ESUFOX0xJVFRMRSwKPiArfTsK PiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWZkX2NlbGwgYnEyNTcwM19jZWxsc1tdID0gewo+ ICsJTUZEX0NFTExfTkFNRSgiYnEyNTd4eC1yZWd1bGF0b3IiKSwKPiArCU1GRF9DRUxMX05BTUUo ImJxMjU3eHgtY2hhcmdlciIpLAo+ICt9Owo+ICsKPiArc3RhdGljIGludCBicTI1N3h4X3Byb2Jl KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCj4gK3sKPiArCXN0cnVjdCBicTI1N3h4X2Rldmlj ZSAqZGRhdGE7Cj4gKwljb25zdCBzdHJ1Y3QgbWZkX2NlbGwgKmNlbGxzOwo+ICsJaW50IG5yX2Nl bGxzOwo+ICsJaW50IHJldDsKPiArCj4gKwlkZGF0YSA9IGRldm1fa3phbGxvYygmY2xpZW50LT5k ZXYsIHNpemVvZigqZGRhdGEpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghZGRhdGEpCj4gKwkJcmV0 dXJuIC1FTk9NRU07Cj4gKwo+ICsJZGRhdGEtPmNsaWVudCA9IGNsaWVudDsKPiArCj4gKwljZWxs cyA9IGJxMjU3MDNfY2VsbHM7Cj4gKwlucl9jZWxscyA9IEFSUkFZX1NJWkUoYnEyNTcwM19jZWxs cyk7CgpXaGF0J3MgdGhlIGp1c3RpZmljYXRpb24gZm9yIHVzaW5nIGxvY2FsIHZhcmlhYmxlcyBm b3IgdGhlc2U/CgpXaHkgbm90IHVzZSB0aGVtIGRpcmVjdGx5PwoKPiArCWRkYXRhLT5yZWdtYXAg PSBkZXZtX3JlZ21hcF9pbml0X2kyYyhjbGllbnQsICZicTI1NzAzX3JlZ21hcF9jb25maWcpOwo+ ICsJaWYgKElTX0VSUihkZGF0YS0+cmVnbWFwKSkgewo+ICsJCWRldl9lcnIoJmNsaWVudC0+ZGV2 LCAiRmFpbGVkIHRvIGFsbG9jYXRlIHJlZ2lzdGVyIG1hcFxuIik7Cj4gKwkJcmV0dXJuIFBUUl9F UlIoZGRhdGEtPnJlZ21hcCk7CgpkZXZfZXJyX3Byb2JlKCkKCj4gKwl9Cj4gKwo+ICsJaTJjX3Nl dF9jbGllbnRkYXRhKGNsaWVudCwgZGRhdGEpOwo+ICsKPiArCXJldCA9IGRldm1fbWZkX2FkZF9k ZXZpY2VzKCZjbGllbnQtPmRldiwgUExBVEZPUk1fREVWSURfQVVUTywKPiArCQkJCSAgIGNlbGxz LCBucl9jZWxscywgTlVMTCwgMCwgTlVMTCk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJZGV2X2Vycigm Y2xpZW50LT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgY2hpbGQgZGV2aWNlcyAlZFxuIiwgcmV0 KTsKPiArCQlyZXR1cm4gcmV0OwoKZGV2X2Vycl9wcm9iZSgpCgo+ICsJfQo+ICsKPiArCXJldHVy biByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBicTI1 N3h4X2kyY19pZHNbXSA9IHsKPiArCXsgImJxMjU3MDNhIiB9LAo+ICsJe30KPiArfTsKPiArTU9E VUxFX0RFVklDRV9UQUJMRShpMmMsIGJxMjU3eHhfaTJjX2lkcyk7Cj4gKwo+ICtzdGF0aWMgY29u c3Qgc3RydWN0IG9mX2RldmljZV9pZCBicTI1N3h4X29mX21hdGNoW10gPSB7Cj4gKwl7IC5jb21w YXRpYmxlID0gInRpLGJxMjU3MDNhIiB9LAo+ICsJe30KPiArfTsKPiArTU9EVUxFX0RFVklDRV9U QUJMRShvZiwgYnEyNTd4eF9vZl9tYXRjaCk7Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGkyY19kcml2 ZXIgYnEyNTd4eF9kcml2ZXIgPSB7Cj4gKwkuZHJpdmVyID0gewo+ICsJCS5uYW1lID0gImJxMjU3 eHgiLAo+ICsJCS5vZl9tYXRjaF90YWJsZSA9IGJxMjU3eHhfb2ZfbWF0Y2gsCj4gKwl9LAo+ICsJ LnByb2JlID0gYnEyNTd4eF9wcm9iZSwKPiArCS5pZF90YWJsZSA9IGJxMjU3eHhfaTJjX2lkcywK PiArfTsKPiArbW9kdWxlX2kyY19kcml2ZXIoYnEyNTd4eF9kcml2ZXIpOwo+ICsKPiArTU9EVUxF X0RFU0NSSVBUSU9OKCJicTI1N3h4IGJ1Y2svYm9vc3QvY2hhcmdlciBkcml2ZXIiKTsKPiArTU9E VUxFX0FVVEhPUigiQ2hyaXMgTW9yZ2FuIDxtYWNyb21vcmdhbkBob3RtYWlsLmNvbT4iKTsKPiAr TU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC9i cTI1N3h4LmggYi9pbmNsdWRlL2xpbnV4L21mZC9icTI1N3h4LmgKPiBuZXcgZmlsZSBtb2RlIDEw MDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uMTUzYTk2MjQ4ZjMyCj4gLS0tIC9kZXYvbnVsbAo+ ICsrKyBiL2luY2x1ZGUvbGludXgvbWZkL2JxMjU3eHguaAo+IEBAIC0wLDAgKzEsMTA4IEBACj4g Ky8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCj4gKy8qCj4gKyAqIFJlZ2lz dGVyIGRlZmluaXRpb25zIGZvciBUSSBCUTI1N1hYCj4gKyAqIENvcHlyaWdodCAoQykgMjAyMCBU ZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQgLSBodHRwOi8vd3d3LnRpLmNvbS8KCk5vIHVw ZGF0ZXMgc2luY2UgdGhlbj8KCj4gKyAqLwo+ICsKPiArI2RlZmluZSBCUTI1NzAzX0NIQVJHRV9P UFRJT05fMAkJCTB4MDAKPiArI2RlZmluZSBCUTI1NzAzX0NIQVJHRV9DVVJSRU5UCQkJMHgwMgo+ ICsjZGVmaW5lIEJRMjU3MDNfTUFYX0NIQVJHRV9WT0xUCQkJMHgwNAo+ICsjZGVmaW5lIEJRMjU3 MDNfT1RHX1ZPTFQJCQkweDA2Cj4gKyNkZWZpbmUgQlEyNTcwM19PVEdfQ1VSUkVOVAkJCTB4MDgK PiArI2RlZmluZSBCUTI1NzAzX0lOUFVUX1ZPTFRBR0UJCQkweDBhCj4gKyNkZWZpbmUgQlEyNTcw M19NSU5fVlNZUwkJCTB4MGMKPiArI2RlZmluZSBCUTI1NzAzX0lJTl9IT1NUCQkJMHgwZQo+ICsj ZGVmaW5lIEJRMjU3MDNfQ0hBUkdFUl9TVEFUVVMJCQkweDIwCj4gKyNkZWZpbmUgQlEyNTcwM19Q Uk9DSE9UX1NUQVRVUwkJCTB4MjIKPiArI2RlZmluZSBCUTI1NzAzX0lJTl9EUE0JCQkJMHgyNAo+ ICsjZGVmaW5lIEJRMjU3MDNfQURDSUJBVF9DSEcJCQkweDI4Cj4gKyNkZWZpbmUgQlEyNTcwM19B RENJSU5DTVBJTgkJCTB4MmEKPiArI2RlZmluZSBCUTI1NzAzX0FEQ1ZTWVNWQkFUCQkJMHgyYwo+ ICsjZGVmaW5lIEJRMjU3MDNfTUFOVUZBQ1RfREVWX0lECQkJMHgyZQo+ICsjZGVmaW5lIEJRMjU3 MDNfQ0hBUkdFX09QVElPTl8xCQkJMHgzMAo+ICsjZGVmaW5lIEJRMjU3MDNfQ0hBUkdFX09QVElP Tl8yCQkJMHgzMgo+ICsjZGVmaW5lIEJRMjU3MDNfQ0hBUkdFX09QVElPTl8zCQkJMHgzNAo+ICsj ZGVmaW5lIEJRMjU3MDNfQURDX09QVElPTgkJCTB4M2EKPiArCj4gKyNkZWZpbmUgQlEyNTcwM19F Tl9MV1BXUgkJCUJJVCgxNSkKPiArI2RlZmluZSBCUTI1NzAzX1dEVE1SX0FESl9NQVNLCQkJR0VO TUFTSygxNCwgMTMpCj4gKyNkZWZpbmUgQlEyNTcwM19XRFRNUl9ESVNBQkxFCQkJMAo+ICsjZGVm aW5lIEJRMjU3MDNfV0RUTVJfNV9TRUMJCQkxCj4gKyNkZWZpbmUgQlEyNTcwM19XRFRNUl84OF9T RUMJCQkyCj4gKyNkZWZpbmUgQlEyNTcwM19XRFRNUl8xNzVfU0VDCQkJMwo+ICsKPiArI2RlZmlu ZSBCUTI1NzAzX0lDSEdfTUFTSwkJCUdFTk1BU0soMTIsIDYpCj4gKyNkZWZpbmUgQlEyNTcwM19J Q0hHX1NURVBfVUEJCQk2NDAwMAo+ICsjZGVmaW5lIEJRMjU3MDNfSUNIR19NSU5fVUEJCQk2NDAw MAo+ICsjZGVmaW5lIEJRMjU3MDNfSUNIR19NQVhfVUEJCQk4MTI4MDAwCj4gKwo+ICsjZGVmaW5l IEJRMjU3MDNfTUFYX0NIQVJHRV9WT0xUX01BU0sJCUdFTk1BU0soMTUsIDQpCj4gKyNkZWZpbmUg QlEyNTcwM19WQkFUUkVHX1NURVBfVVYJCQkxNjAwMAo+ICsjZGVmaW5lIEJRMjU3MDNfVkJBVFJF R19NSU5fVVYJCQkxMDI0MDAwCj4gKyNkZWZpbmUgQlEyNTcwM19WQkFUUkVHX01BWF9VVgkJCTE5 MjAwMDAwCj4gKwo+ICsjZGVmaW5lIEJRMjU3MDNfT1RHX1ZPTFRfTUFTSwkJCUdFTk1BU0soMTMs IDYpCj4gKyNkZWZpbmUgQlEyNTcwM19PVEdfVk9MVF9TVEVQX1VWCQk2NDAwMAo+ICsjZGVmaW5l IEJRMjU3MDNfT1RHX1ZPTFRfTUlOX1VWCQkJNDQ4MDAwMAo+ICsjZGVmaW5lIEJRMjU3MDNfT1RH X1ZPTFRfTUFYX1VWCQkJMjA4MDAwMDAKPiArI2RlZmluZSBCUTI1NzAzX09UR19WT0xUX05VTV9W T0xUCQkyNTYKPiArCj4gKyNkZWZpbmUgQlEyNTcwM19PVEdfQ1VSX01BU0sJCQlHRU5NQVNLKDE0 LCA4KQo+ICsjZGVmaW5lIEJRMjU3MDNfT1RHX0NVUl9TVEVQX1VBCQkJNTAwMDAKPiArI2RlZmlu ZSBCUTI1NzAzX09UR19DVVJfTUFYX1VBCQkJNjM1MDAwMAo+ICsKPiArI2RlZmluZSBCUTI1NzAz X01JTlZTWVNfTUFTSwkJCUdFTk1BU0soMTMsIDgpCj4gKyNkZWZpbmUgQlEyNTcwM19NSU5WU1lT X1NURVBfVVYJCQkyNTYwMDAKPiArI2RlZmluZSBCUTI1NzAzX01JTlZTWVNfTUlOX1VWCQkJMTAy NDAwMAo+ICsjZGVmaW5lIEJRMjU3MDNfTUlOVlNZU19NQVhfVVYJCQkxNjEyODAwMAo+ICsKPiAr I2RlZmluZSBCUTI1NzAzX1NUU19BQ19TVEFUCQkJQklUKDE1KQo+ICsjZGVmaW5lIEJRMjU3MDNf U1RTX0lOX0ZDSFJHCQkJQklUKDEwKQo+ICsjZGVmaW5lIEJRMjU3MDNfU1RTX0lOX1BDSFJHCQkJ QklUKDkpCj4gKyNkZWZpbmUgQlEyNTcwM19TVFNfRkFVTFRfQUNPVgkJCUJJVCg3KQo+ICsjZGVm aW5lIEJRMjU3MDNfU1RTX0ZBVUxUX0JBVE9DCQkJQklUKDYpCj4gKyNkZWZpbmUgQlEyNTcwM19T VFNfRkFVTFRfQUNPQwkJCUJJVCg1KQo+ICsKPiArI2RlZmluZSBCUTI1NzAzX0lJTkRQTV9NQVNL CQkJR0VOTUFTSygxNCwgOCkKPiArI2RlZmluZSBCUTI1NzAzX0lJTkRQTV9TVEVQX1VBCQkJNTAw MDAKPiArI2RlZmluZSBCUTI1NzAzX0lJTkRQTV9NSU5fVUEJCQk1MDAwMAo+ICsjZGVmaW5lIEJR MjU3MDNfSUlORFBNX01BWF9VQQkJCTY0MDAwMDAKPiArI2RlZmluZSBCUTI1NzAzX0lJTkRQTV9E RUZBVUxUX1VBCQkzMzAwMDAwCj4gKyNkZWZpbmUgQlEyNTcwM19JSU5EUE1fT0ZGU0VUX1VBCQk1 MDAwMAo+ICsKPiArI2RlZmluZSBCUTI1NzAzX0FEQ0lCQVRfRElTQ0hHX01BU0sJCUdFTk1BU0so NiwgMCkKPiArI2RlZmluZSBCUTI1NzAzX0FEQ0lCQVRfQ0hHX01BU0sJCUdFTk1BU0soMTQsIDgp Cj4gKyNkZWZpbmUgQlEyNTcwM19BRENJQkFUX0NIR19TVEVQX1VBCQk2NDAwMAo+ICsjZGVmaW5l IEJRMjU3MDNfQURDSUJBVF9ESVNfU1RFUF9VQQkJMjU2MDAwCj4gKwo+ICsjZGVmaW5lIEJRMjU3 MDNfQURDSUlOCQkJCUdFTk1BU0soMTUsIDgpCj4gKyNkZWZpbmUgQlEyNTcwM19BRENJSU5DTVBJ Tl9TVEVQCQk1MDAwMAo+ICsKPiArI2RlZmluZSBCUTI1NzAzX0FEQ1ZTWVNfTUFTSwkJCUdFTk1B U0soMTUsIDgpCj4gKyNkZWZpbmUgQlEyNTcwM19BRENWQkFUX01BU0sJCQlHRU5NQVNLKDcsIDAp Cj4gKyNkZWZpbmUgQlEyNTcwM19BRENWU1lTVkJBVF9PRkZTRVRfVVYJCTI4ODAwMDAKPiArI2Rl ZmluZSBCUTI1NzAzX0FEQ1ZTWVNWQkFUX1NURVAJCTY0MDAwCj4gKwo+ICsjZGVmaW5lIEJRMjU3 MDNfQURDX0NIX01BU0sJCQlHRU5NQVNLKDcsIDApCj4gKyNkZWZpbmUgQlEyNTcwM19BRENfQ09O Vl9FTgkJCUJJVCgxNSkKPiArI2RlZmluZSBCUTI1NzAzX0FEQ19TVEFSVAkJCUJJVCgxNCkKPiAr I2RlZmluZSBCUTI1NzAzX0FEQ19GVUxMX1NDQUxFCQkJQklUKDEzKQo+ICsjZGVmaW5lIEJRMjU3 MDNfQURDX0NNUElOX0VOCQkJQklUKDcpCj4gKyNkZWZpbmUgQlEyNTcwM19BRENfVkJVU19FTgkJ CUJJVCg2KQo+ICsjZGVmaW5lIEJRMjU3MDNfQURDX1BTWVNfRU4JCQlCSVQoNSkKPiArI2RlZmlu ZSBCUTI1NzAzX0FEQ19JSU5fRU4JCQlCSVQoNCkKPiArI2RlZmluZSBCUTI1NzAzX0FEQ19JRENI R19FTgkJCUJJVCgzKQo+ICsjZGVmaW5lIEJRMjU3MDNfQURDX0lDSEdfRU4JCQlCSVQoMikKPiAr I2RlZmluZSBCUTI1NzAzX0FEQ19WU1lTX0VOCQkJQklUKDEpCj4gKyNkZWZpbmUgQlEyNTcwM19B RENfVkJBVF9FTgkJCUJJVCgwKQo+ICsKPiArI2RlZmluZSBCUTI1NzAzX0VOX09UR19NQVNLCQkJ QklUKDEyKQo+ICsKPiArZW51bSBicTI1N3h4X2lkIHsKPiArCUJRMjU3MDNBLAo+ICt9Owo+ICsK PiArc3RydWN0IGJxMjU3eHhfZGV2aWNlIHsKPiArCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7 Cj4gKwlzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7Cj4gK307Cj4gLS0gCj4gMi40My4wCj4gCgotLSAK TGVlIEpvbmVzIFvmnY7nkLzmlq9dCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpMaW51eC1yb2NrY2hpcCBtYWlsaW5nIGxpc3QKTGludXgtcm9ja2NoaXBA bGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2xpbnV4LXJvY2tjaGlwCg==