From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 A37AA470863; Mon, 19 Oct 2026 14:02:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1792418553; cv=none; b=I75bD6YQH//Ihke0nYAntmjsn+NNnZ9z6FSej6PyU46Yx+f6CoUK1jgoFcUFmRNPBAMRCDCIele4FNuhRIsKT/a8bTLikeoHnbl0nReN1jlvNG/ezQmyPvdRTgWcmOyxIXTOCAQMFVuQOCZ0b6E0DnDoucfgmeNSSgThShvoBWE= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1792418553; c=relaxed/simple; bh=SALaivAsnL7FdkP8FKu4Ia33qbK1Qf9r0RS8fYakPLI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=AoXVxhatRGfSaRjdtzaAA8EiiIYna4cpPV897o1S3HTBXFEHO0axivy6JmDqOL0xuZ9sUHTd4eT316j9CaEPNQFeqLXHGFLowEjUAUu43qjLnuVGZHOYLx/+iqzEXCi1QL3t36FwTYwY9LTUi0w9aPyQpKqq/3mTapuxhjLCo40= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=AarvYVGa; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="AarvYVGa" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5B97B1F000C7; Mon, 19 Oct 2026 14:02:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1792418550; bh=2XmanlZG9q0IdIO4ab4S5QYrOQ1uC6J3c0FBqZkNBk0=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=AarvYVGaSyVcMYvNA6oH+H0Ne0hgsaOtT1iJrElTxAlzDIgucgZesAxTewmdJQ6FG YYTdXOdfvgSmcfwkpT6r3UBUKzLE2VonrH4SMEnfofgTbSgxjX3eJjOaxDIdiwLEBt 7wyPI53ucaj6M2iN0hKeub7yrASL9buSirEb8e8E3Ib6Ul4YqSVIh322/+n3uCRVdk 8m4eEu2jNvg/MNpTZNf3bjRywNL6q3ViTno/S/BvXmBeWjLTpyk1R2wh7ZjQViOegc TF0ey0VY7BMGYzcNHfrb32A/PFE8fhPe0UgrhXq8/SogKo211HqwUcLG7Yk6EEJqqH QHKlaQZo1ZT7g== From: Sasha Levin To: patches@lists.linux.dev, stable@vger.kernel.org Cc: Pengpeng Hou , Bartosz Golaszewski , Sasha Levin , linusw@kernel.org, brgl@kernel.org, pjw@kernel.org, samuel.holland@sifive.com, linux-gpio@vger.kernel.org, linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH AUTOSEL 6.18-6.1] gpio: sifive: add missing MODULE_DEVICE_TABLE() Date: Mon, 19 Oct 2026 09:50:19 -0400 Message-ID: <20261019135441.1420968-328-sashal@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20261019135441.1420968-1-sashal@kernel.org> References: <20261019135441.1420968-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-gpio@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore X-stable-base: Linux 6.18.57 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From: Pengpeng Hou [ Upstream commit 8fe6fa0f223f44b8b869319d1b9c383749aa147b ] The driver has an OF match table wired to .of_match_table, but does not export the table with MODULE_DEVICE_TABLE(). Add the missing MODULE_DEVICE_TABLE(of, ...) entry so module alias information is generated for OF based module autoloading. This is a source-level fix. It does not claim dynamic hardware reproduction; the evidence is the driver-owned match table, its use by the platform driver, and the missing module alias publication. Signed-off-by: Pengpeng Hou Link: https://patch.msgid.link/20260704122230.75964-1-pengpeng@iscas.ac.cn Signed-off-by: Bartosz Golaszewski Signed-off-by: Sasha Levin --- LLM Generated explanations, may be completely bogus: I have the local-tree identity, the one-line diff, and the mailing-list thread, including the GPIO maintainer asking for a `Fixes:`/`Cc: stable` resend. Compiling the nine-phase verdict next. ## Phase 1: Commit message forensics **Step 1.1: Subject line** - Record: `[gpio] [add] add missing MODULE_DEVICE_TABLE() so OF module aliases are generated` **Step 1.2: Tags** - Record: - `Fixes:` — none (expected) - `Reported-by:` — none - `Tested-by:` — none - `Reviewed-by:` — none on the applied commit - `Acked-by:` — none - `Link: https://patch.msgid.link/20260704122230.75964-1- pengpeng@iscas.ac.cn` - `Cc: stable@vger.kernel.org` — none (expected) - `Signed-off-by: Pengpeng Hou ` (author) - `Signed-off-by: Bartosz Golaszewski ` (GPIO maintainer, committer) - Notable: no syzbot, no user crash report. Maintainer SOB is a quality signal. **Step 1.3: Body** - Record: **Bug:** `sifive_gpio_match[]` is wired to `.of_match_table` but not published via `MODULE_DEVICE_TABLE()`, so modpost does not emit OF aliases. **Symptom:** `gpio-sifive.ko` does not autoload from DT compatible strings (`sifive,gpio0`, `sifive,fu540-c000-gpio`). **Version info:** none in the message. **Root cause:** missing module- alias publication, not a runtime logic error in probe. The “source- level fix / no dynamic hardware reproduction” wording is extra justification, not a different bug. **Step 1.4: Hidden bug fix?** - Record: Not hidden. This is an explicit autoload fix. “Add missing MODULE_DEVICE_TABLE” is a standard class of real functional bugs for `tristate` OF drivers. ## Phase 2: Diff analysis **Step 2.1: Inventory** - Record: `drivers/gpio/gpio-sifive.c` — **+1 / -0**. One insertion after `sifive_gpio_match[]`. No functions changed. **Scope:** single- file surgical fix. **Step 2.2: Code flow** - Record: **Before:** OF match table exists and is used by `platform_driver.driver.of_match_table`, so a *already loaded* driver still binds. No `__mod_device_table__*` alias is emitted, so kmod/udev cannot load the module from DT. **After:** `MODULE_DEVICE_TABLE(of, sifive_gpio_match)` creates a used alias to that table; `scripts/mod/file2alias.c` (`do_of_entry`) emits `of:N*T*Csifive,gpio0` / `sifive,fu540-c000-gpio` aliases. **Path affected:** build-time modpost / userspace autoload only. Probe and IRQ setup are unchanged. **Step 2.3: Bug mechanism** - Record: **Category:** hardware enablement / missing module alias (logic/correctness at the module-loading boundary). **Mechanism:** `CONFIG_GPIO_SIFIVE=m` never autoloads; GPIO controller stays unbound unless `modprobe` is done by hand. Same class as device-ID additions: existing driver, existing hardware, missing match publication. **Step 2.4: Fix quality** - Record: Obviously correct one-liner; this is the documented way to export OF aliases. No locking, no API, no data-structure change. **Regression risk:** negligible. For `=y` it is a no-op at runtime. No new userspace ABI beyond standard `modules.alias` entries. ## Phase 3: Git history **Step 3.1: Blame** - Record: Match table introduced in `96868dce644d0` (“gpio/sifive: Add GPIO driver for SiFive SoCs”, 2019; in `v5.5-rc4`). Originally `bool` + `builtin_platform_driver()`, so `MODULE_DEVICE_TABLE` was not required. Bug became real in `6b4c76ded35826` (“gpio: sifive: Allow building the driver as a module”, 2023-07-25) which switched Kconfig to `tristate` and `module_platform_driver()` **without** adding `MODULE_DEVICE_TABLE`. That commit is in `v6.6-rc1` and later. `of_match_table = sifive_gpio_match` confirmed via blame (`6ae42529547a4f` dropped `of_match_ptr` in 2023). **Step 3.2: Fixes: tag** - Record: No `Fixes:` on the candidate. The implicit Fixes target is `6b4c76ded35826`, which **is** an ancestor of this tree (`git merge- base --is-ancestor` succeeded). GPIO maintainer Bartosz said the same on list (Phase 4). **Step 3.3: File history** - Record: Recent `gpio-sifive.c` work is generic-chip API (`8e1c8ccc1df8b`) and the modular conversion. No prerequisite series for this one line. Standalone. **Step 3.4: Author** - Record: Pengpeng Hou is not the GPIO maintainer; same-day sibling `975a1d61260cf` (“gpio: vf610: add missing MODULE_DEVICE_TABLE()”). Samuel Holland (SiFive, author of the modular conversion) sent the identical one-line change earlier (Oct 2025) as “Support module autoloading”. **Step 3.5: Dependencies** - Record: Needs `sifive_gpio_match[]`, `module_platform_driver()`, and `MODULE_DEVICE_TABLE(of, ...)`. All exist in this checkout. Applies standalone. ## Phase 4: Mailing list / external **Step 4.1: Original discussion** - Record: `b4 dig -c 8fe6fa0f223f44` matched patch-id to: - v1 (applied): https://patch.msgid.link/20260704122230.75964-1-pengpeng@iscas.ac.cn (2026-07-04, Pengpeng Hou) - Same diff, earlier: https://patch.msgid.link/20251016003631.3912523- 1-samuel.holland@sifive.com (2025-10-15, Samuel Holland) - Single revision of Pengpeng’s patch. Bartosz: “Applied, thanks!” (2026-07-06). No NAK. - On Samuel’s earlier post, Bartosz wrote it should have been part of `6b4c76ded358` and asked him to **resend with `Fixes:` and `Cc: stable`**. That resend did not land; Pengpeng’s later patch (without those tags) was applied instead. **Step 4.2: Recipients (`b4 dig -w`)** - Record: Pengpeng Hou, Linus Walleij, Bartosz Golaszewski, Paul Walmsley, Samuel Holland, `linux-gpio`, `linux-riscv`, `linux-kernel`. GPIO maintainers were on To/Cc. **Step 4.3: Bug report** - Record: No syzbot/bugzilla. Evidence is source-level plus vendor (SiFive) sending the same patch. No count of field reports. **Step 4.4: Series** - Record: Standalone 1/1. Sibling vf610 fix is a separate driver, not a dependency. **Step 4.5: Stable list** - Record: lore.kernel.org via WebFetch returned 403. Stable-list search **UNVERIFIED** by HTTP. Maintainer request for `Cc: stable` is from `linux-gpio` mbox, not from `stable@`. ## Phase 5: Semantic analysis **Step 5.1: Functions** - Record: No functions modified. Added `MODULE_DEVICE_TABLE(of, sifive_gpio_match)` after `sifive_gpio_match[]`. Related symbols: `sifive_gpio_probe`, `sifive_gpio_driver`. **Step 5.2: Callers** - Record: `sifive_gpio_probe` is the platform `.probe`. Driver core calls it when OF compatible matches **and the module is already loaded**. Autoload is userspace (kmod) using aliases from `MODULE_DEVICE_TABLE`. Not IRQ/hot-path. **Step 5.3: Callees** - Record: Unchanged. Probe still uses generic GPIO + irqchip registration. **Step 5.4: Reachability** - Record: Reachable on SiFive FU540/FU740 and Canaan K210 DT (`compatible = "sifive,gpio0"` / `"sifive,fu540-c000-gpio"`). Userspace-visible: without aliases, GPIO never appears unless the module is forced. Not a syscall crash path. **Step 5.5: Similar patterns** - Record: Same pattern in-tree: `gpio: lpc32xx: fix module autoloading`, `gpio: modepin: Enable module autoloading`, `gpio: vf610: add missing MODULE_DEVICE_TABLE()`, `gpio: cadence: Add missing MODULE_DEVICE_TABLE`. Established GPIO-subsystem practice. ## Phase 6: Local tree (this checkout only) **Step 6.1: Buggy code in this tree?** - Record: Checkout is **Linus `origin/master`**, `git describe` = `v7.3-rc4-27-gf0100363d8c37`, Makefile **7.3.0-rc4**. `gpio-sifive.c`, `sifive_gpio_match[]`, `tristate GPIO_SIFIVE`, and `module_platform_driver()` are all present. Modular conversion `6b4c76ded35826` is an ancestor. The one-line alias export belongs on this code. In-tree DT: `arch/riscv/boot/dts/sifive/fu540-c000.dtsi`, `fu740-c000.dtsi`, `arch/riscv/boot/dts/canaan/k210.dtsi`. Defconfigs (`arch/riscv/configs/defconfig`, K210 defconfigs) set `CONFIG_GPIO_SIFIVE=y`, so *default* RISC-V configs do not hit autoload; `=m` (the reason the driver was made modular: multiplatform image size) does. **Step 6.2: Backport difficulty** - Record: Clean apply. Only needs the `of_device_id` table name `sifive_gpio_match`. No conflict with later generic-chip changes. **Step 6.3: Related fixes already here** - Record: No earlier alternate autoload fix. This is the first `MODULE_DEVICE_TABLE` on this file. ## Phase 7: Subsystem context **Step 7.1** - Record: **Subsystem:** GPIO (`drivers/gpio/`). **Criticality:** IMPORTANT for SiFive/K210 boards (GPIO is a board-level dependency), PERIPHERAL vs core mm/net. Not staging. **Step 7.2** - Record: GPIO is actively maintained (Bartosz). This driver is mature (since v5.5); the modular hole is from v6.6, not new experimental code. ## Phase 8: Impact and risk **Step 8.1: Who is affected** - Record: Driver-specific, config-specific: `CONFIG_GPIO_SIFIVE=m` on DT platforms with those compatibles. Not universal. **Step 8.2: Trigger** - Record: Boot / device enumeration with the module not preloaded. Common for multiplatform modular kernels (the stated goal of `6b4c76ded358`). Unprivileged users do not trigger a crash; the controller simply never binds. Not a race. **Step 8.3: Failure mode** - Record: GPIO chip (and its irqchip) never registers if the module is not loaded. Dependent LEDs, resets, keys, hog lines fail. **Severity: MEDIUM** functionally (hardware dead until `modprobe`), not panic/UAF. For those boards that is user-visible breakage, not cosmetic. **Step 8.4: Risk-benefit** - Record: **Benefit:** high for `=m` SiFive/K210 users; restores the modular conversion’s purpose. **Risk:** very low (1 line, build-time alias only). **Ratio:** strongly favorable. Matches the device-ID / hardware-enablement exception. ## Phase 9: Synthesis **Step 9.1: Evidence** - **For:** Real autoload bug; 1-line obviously correct; GPIO maintainer asked for `Fixes:` + `Cc: stable` on the identical diff; SiFive engineer sent that diff; driver is `tristate` since v6.6; DT hardware exists; zero runtime regression surface; same pattern already used across GPIO. - **Against:** Not a crash/security/corruption issue; in-tree defconfigs use `=y`; no `Reported-by`; Pengpeng’s applied patch omitted the `Fixes:`/`Cc: stable` Bartosz asked for. - **Unresolved:** Stable-list archive (lore HTTP 403). No field bugzilla count. **Step 9.2: Stable rules** 1. Obviously correct and tested? **PASS** — canonical `MODULE_DEVICE_TABLE(of, …)`; maintainer applied it. 2. Real bug affecting users? **PASS** — `=m` never autoloads; modular conversion is pointless without it. 3. Important (crash/security/corruption/deadlock)? **PASS** as hardware- enablement (GPIO controller never binds), same bar as new device IDs / missing aliases — not a panic, but the device does not work. 4. Small and contained? **PASS** — +1 line, one file. 5. No new features/APIs? **PASS** — aliases for existing compatibles. 6. Can apply to this tree? **PASS** — table, tristate Kconfig, and `module_platform_driver()` are here. **Step 9.3: Exception category** - Record: Closest to **device ID / hardware enablement**: publishing existing OF IDs so the existing driver autoloads. Not a new driver or API. **Step 9.4: Decision** This tree has the SiFive GPIO driver as a module-capable OF platform driver with a match table that was never exported. That is a real, contained autoload bug. The GPIO maintainer already treated the identical change as stable material. It should be backported here. ### What the commit solves for this tree Without `MODULE_DEVICE_TABLE(of, sifive_gpio_match)`, `modpost` never writes OF aliases, so `gpio-sifive.ko` will not load from `"sifive,gpio0"` / `"sifive,fu540-c000-gpio"`. On `CONFIG_GPIO_SIFIVE=m` the GPIO (and irq) controller never appears unless someone `modprobe`s it. That undercuts `6b4c76ded358` (“Allow building the driver as a module”) on multiplatform kernels. Built-in `=y` is unaffected; the one- liner is still correct and harmless. ### Risk vs benefit Benefit is restoring autoload for real FU540/FU740/K210 hardware when the driver is modular. Risk is a single build-time alias with no probe/locking/API change. ### Concerns No `Fixes:` on the applied commit (should be `6b4c76ded35826`); that does not block backport. In-tree defconfigs use `=y`, so default images already work; the users who need this are modular/multiplatform configs, which is exactly who the tristate change was for. Verification: - [Phase 1] Parsed tags: Link to msgid `20260704122230.75964-1-pengpeng@iscas.ac.cn`; SOB Pengpeng Hou and Bartosz Golaszewski; no Fixes/Reported-by/Cc: stable - [Phase 2] Diff: +1 line `MODULE_DEVICE_TABLE(of, sifive_gpio_match)` in `drivers/gpio/gpio-sifive.c`; probe unchanged - [Phase 2] Confirmed `MODULE_DEVICE_TABLE` in `include/linux/module.h` and OF alias emission via `scripts/mod/file2alias.c` `do_of_entry` - [Phase 3] `git blame`: match table from `96868dce644d0` (v5.5-rc4); modular bug from `6b4c76ded35826` (in v6.6-rc1); `git merge-base --is- ancestor 6b4c76ded35826 HEAD` succeeded - [Phase 3] `git show 6b4c76ded35826`: bool→tristate + `builtin_platform_driver` → `module_platform_driver` without MODULE_DEVICE_TABLE - [Phase 3] Author log: sibling vf610 commit `975a1d61260cf` - [Phase 4] `b4 dig -c 8fe6fa0f223f44`: Pengpeng v1 applied; same patch- id as Samuel Holland Oct 2025 - [Phase 4] `b4 dig -a`: single Pengpeng revision; `b4 dig -w`: GPIO maintainers + linux-gpio/linux-riscv - [Phase 4] mbox: Bartosz asked Samuel for Fixes: + Cc: stable; later “Applied, thanks!” on Pengpeng’s patch - [Phase 4] WebFetch lore.kernel.org: 403 — UNVERIFIED via HTTP; thread recovered with b4 mbox - [Phase 5] Callers: platform probe + OF match table; autoload is userspace/kmod, not a kernel hot path - [Phase 5] Similar GPIO autoload fixes: `11baa36d31732`, `a5135526426df`, `e6382fcf98907` - [Phase 6] `git describe HEAD` = v7.3-rc4-27-gf0100363d8c37; `make kernelversion` = 7.3.0-rc4; detached `origin/master` - [Phase 6] Kconfig `GPIO_SIFIVE` is `tristate`; DT nodes present; defconfigs use `=y` - [Phase 8] Failure mode: module not autoloaded → GPIO controller absent; severity MEDIUM functional / hardware-enablement - UNVERIFIED: whether this exact commit was discussed on `stable@vger.kernel.org` (lore HTTP 403) - UNVERIFIED: how many distro configs set `CONFIG_GPIO_SIFIVE=m` **YES** drivers/gpio/gpio-sifive.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/gpio/gpio-sifive.c b/drivers/gpio/gpio-sifive.c index 94ef2efbd14f5..e9a992cd4b9cd 100644 --- a/drivers/gpio/gpio-sifive.c +++ b/drivers/gpio/gpio-sifive.c @@ -260,6 +260,7 @@ static const struct of_device_id sifive_gpio_match[] = { { .compatible = "sifive,fu540-c000-gpio" }, { }, }; +MODULE_DEVICE_TABLE(of, sifive_gpio_match); static struct platform_driver sifive_gpio_driver = { .probe = sifive_gpio_probe, -- 2.53.0 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 E533DCCF2E3 for ; Mon, 19 Oct 2026 14:02:47 +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:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=IzRc/+DQTEdUvOUPtBG4nrizc1PjFVj3IME+SXVq3uM=; b=o9ztWaqLSwyNsC tWCrtFTSUfrSjmq9EU/Oy4wWMxCmSk9FBhdcXmzs45FSrR/bD2ZI0g2pKwbxtU+lTfDC4b2j7YEpB fh4MJAOnOH6FdJKZfa/BpCBBXsEqC10fJIVYz4fpJuBDAdKpHD2DjGM0eXNO/mLlyovjZ6PeRAbbp LTAWBNfVNimr7eQtxDEU2K7O5jlvJPkpOvtHKsVHepJcFA3yy++DZPQ/7dxmfOnagTKab7w7DTzzb ty63M+wrCf02gWP+mYsUftqRs2vdMok+O3h8bWhq4sSr7pR0KoJLECnuMd0y+rhSGPN0Fczz0bIlz 14FiNzXaPsGSdYKrdi4w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1xInwe-00000007eC2-25Td; Mon, 19 Oct 2026 14:02:32 +0000 Received: from sea.source.kernel.org ([2600:3c0a:e001:78e:0:1991:8:25]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1xInwc-00000007eAI-3oCK for linux-riscv@lists.infradead.org; Mon, 19 Oct 2026 14:02:31 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by sea.source.kernel.org (Postfix) with ESMTP id A6AFC403F6; Mon, 19 Oct 2026 14:02:30 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5B97B1F000C7; Mon, 19 Oct 2026 14:02:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1792418550; bh=2XmanlZG9q0IdIO4ab4S5QYrOQ1uC6J3c0FBqZkNBk0=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=AarvYVGaSyVcMYvNA6oH+H0Ne0hgsaOtT1iJrElTxAlzDIgucgZesAxTewmdJQ6FG YYTdXOdfvgSmcfwkpT6r3UBUKzLE2VonrH4SMEnfofgTbSgxjX3eJjOaxDIdiwLEBt 7wyPI53ucaj6M2iN0hKeub7yrASL9buSirEb8e8E3Ib6Ul4YqSVIh322/+n3uCRVdk 8m4eEu2jNvg/MNpTZNf3bjRywNL6q3ViTno/S/BvXmBeWjLTpyk1R2wh7ZjQViOegc TF0ey0VY7BMGYzcNHfrb32A/PFE8fhPe0UgrhXq8/SogKo211HqwUcLG7Yk6EEJqqH QHKlaQZo1ZT7g== From: Sasha Levin To: patches@lists.linux.dev, stable@vger.kernel.org Cc: Pengpeng Hou , Bartosz Golaszewski , Sasha Levin , linusw@kernel.org, brgl@kernel.org, pjw@kernel.org, samuel.holland@sifive.com, linux-gpio@vger.kernel.org, linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH AUTOSEL 6.18-6.1] gpio: sifive: add missing MODULE_DEVICE_TABLE() Date: Mon, 19 Oct 2026 09:50:19 -0400 Message-ID: <20261019135441.1420968-328-sashal@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20261019135441.1420968-1-sashal@kernel.org> References: <20261019135441.1420968-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore X-stable-base: Linux 6.18.57 X-BeenThere: linux-riscv@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-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org RnJvbTogUGVuZ3BlbmcgSG91IDxwZW5ncGVuZ0Bpc2Nhcy5hYy5jbj4KClsgVXBzdHJlYW0gY29t bWl0IDhmZTZmYTBmMjIzZjQ0YjhiODY5MzE5ZDFiOWMzODM3NDlhYTE0N2IgXQoKVGhlIGRyaXZl ciBoYXMgYW4gT0YgbWF0Y2ggdGFibGUgd2lyZWQgdG8gLm9mX21hdGNoX3RhYmxlLCBidXQgZG9l cwpub3QgZXhwb3J0IHRoZSB0YWJsZSB3aXRoIE1PRFVMRV9ERVZJQ0VfVEFCTEUoKS4KCkFkZCB0 aGUgbWlzc2luZyBNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCAuLi4pIGVudHJ5IHNvIG1vZHVsZSBh bGlhcwppbmZvcm1hdGlvbiBpcyBnZW5lcmF0ZWQgZm9yIE9GIGJhc2VkIG1vZHVsZSBhdXRvbG9h ZGluZy4KClRoaXMgaXMgYSBzb3VyY2UtbGV2ZWwgZml4LiAgSXQgZG9lcyBub3QgY2xhaW0gZHlu YW1pYyBoYXJkd2FyZQpyZXByb2R1Y3Rpb247IHRoZSBldmlkZW5jZSBpcyB0aGUgZHJpdmVyLW93 bmVkIG1hdGNoIHRhYmxlLCBpdHMgdXNlIGJ5CnRoZSBwbGF0Zm9ybSBkcml2ZXIsIGFuZCB0aGUg bWlzc2luZyBtb2R1bGUgYWxpYXMgcHVibGljYXRpb24uCgpTaWduZWQtb2ZmLWJ5OiBQZW5ncGVu ZyBIb3UgPHBlbmdwZW5nQGlzY2FzLmFjLmNuPgpMaW5rOiBodHRwczovL3BhdGNoLm1zZ2lkLmxp bmsvMjAyNjA3MDQxMjIyMzAuNzU5NjQtMS1wZW5ncGVuZ0Bpc2Nhcy5hYy5jbgpTaWduZWQtb2Zm LWJ5OiBCYXJ0b3N6IEdvbGFzemV3c2tpIDxiYXJ0b3N6LmdvbGFzemV3c2tpQG9zcy5xdWFsY29t bS5jb20+ClNpZ25lZC1vZmYtYnk6IFNhc2hhIExldmluIDxzYXNoYWxAa2VybmVsLm9yZz4KLS0t CgpMTE0gR2VuZXJhdGVkIGV4cGxhbmF0aW9ucywgbWF5IGJlIGNvbXBsZXRlbHkgYm9ndXM6CgpJ IGhhdmUgdGhlIGxvY2FsLXRyZWUgaWRlbnRpdHksIHRoZSBvbmUtbGluZSBkaWZmLCBhbmQgdGhl IG1haWxpbmctbGlzdAp0aHJlYWQsIGluY2x1ZGluZyB0aGUgR1BJTyBtYWludGFpbmVyIGFza2lu ZyBmb3IgYSBgRml4ZXM6YC9gQ2M6IHN0YWJsZWAKcmVzZW5kLiBDb21waWxpbmcgdGhlIG5pbmUt cGhhc2UgdmVyZGljdCBuZXh0LgoKIyMgUGhhc2UgMTogQ29tbWl0IG1lc3NhZ2UgZm9yZW5zaWNz CgoqKlN0ZXAgMS4xOiBTdWJqZWN0IGxpbmUqKgotIFJlY29yZDogYFtncGlvXSBbYWRkXSBhZGQg bWlzc2luZyBNT0RVTEVfREVWSUNFX1RBQkxFKCkgc28gT0YgbW9kdWxlCiAgYWxpYXNlcyBhcmUg Z2VuZXJhdGVkYAoKKipTdGVwIDEuMjogVGFncyoqCi0gUmVjb3JkOgogIC0gYEZpeGVzOmAg4oCU IG5vbmUgKGV4cGVjdGVkKQogIC0gYFJlcG9ydGVkLWJ5OmAg4oCUIG5vbmUKICAtIGBUZXN0ZWQt Ynk6YCDigJQgbm9uZQogIC0gYFJldmlld2VkLWJ5OmAg4oCUIG5vbmUgb24gdGhlIGFwcGxpZWQg Y29tbWl0CiAgLSBgQWNrZWQtYnk6YCDigJQgbm9uZQogIC0gYExpbms6IGh0dHBzOi8vcGF0Y2gu bXNnaWQubGluay8yMDI2MDcwNDEyMjIzMC43NTk2NC0xLQogICAgcGVuZ3BlbmdAaXNjYXMuYWMu Y25gCiAgLSBgQ2M6IHN0YWJsZUB2Z2VyLmtlcm5lbC5vcmdgIOKAlCBub25lIChleHBlY3RlZCkK ICAtIGBTaWduZWQtb2ZmLWJ5OiBQZW5ncGVuZyBIb3UgPHBlbmdwZW5nQGlzY2FzLmFjLmNuPmAg KGF1dGhvcikKICAtIGBTaWduZWQtb2ZmLWJ5OiBCYXJ0b3N6IEdvbGFzemV3c2tpCiAgICA8YmFy dG9zei5nb2xhc3pld3NraUBvc3MucXVhbGNvbW0uY29tPmAgKEdQSU8gbWFpbnRhaW5lciwgY29t bWl0dGVyKQogIC0gTm90YWJsZTogbm8gc3l6Ym90LCBubyB1c2VyIGNyYXNoIHJlcG9ydC4gTWFp bnRhaW5lciBTT0IgaXMgYQogICAgcXVhbGl0eSBzaWduYWwuCgoqKlN0ZXAgMS4zOiBCb2R5KioK LSBSZWNvcmQ6ICoqQnVnOioqIGBzaWZpdmVfZ3Bpb19tYXRjaFtdYCBpcyB3aXJlZCB0byBgLm9m X21hdGNoX3RhYmxlYAogIGJ1dCBub3QgcHVibGlzaGVkIHZpYSBgTU9EVUxFX0RFVklDRV9UQUJM RSgpYCwgc28gbW9kcG9zdCBkb2VzIG5vdAogIGVtaXQgT0YgYWxpYXNlcy4gKipTeW1wdG9tOioq IGBncGlvLXNpZml2ZS5rb2AgZG9lcyBub3QgYXV0b2xvYWQgZnJvbQogIERUIGNvbXBhdGlibGUg c3RyaW5ncyAoYHNpZml2ZSxncGlvMGAsIGBzaWZpdmUsZnU1NDAtYzAwMC1ncGlvYCkuCiAgKipW ZXJzaW9uIGluZm86Kiogbm9uZSBpbiB0aGUgbWVzc2FnZS4gKipSb290IGNhdXNlOioqIG1pc3Np bmcgbW9kdWxlLQogIGFsaWFzIHB1YmxpY2F0aW9uLCBub3QgYSBydW50aW1lIGxvZ2ljIGVycm9y IGluIHByb2JlLiBUaGUg4oCcc291cmNlLQogIGxldmVsIGZpeCAvIG5vIGR5bmFtaWMgaGFyZHdh cmUgcmVwcm9kdWN0aW9u4oCdIHdvcmRpbmcgaXMgZXh0cmEKICBqdXN0aWZpY2F0aW9uLCBub3Qg YSBkaWZmZXJlbnQgYnVnLgoKKipTdGVwIDEuNDogSGlkZGVuIGJ1ZyBmaXg/KioKLSBSZWNvcmQ6 IE5vdCBoaWRkZW4uIFRoaXMgaXMgYW4gZXhwbGljaXQgYXV0b2xvYWQgZml4LiDigJxBZGQgbWlz c2luZwogIE1PRFVMRV9ERVZJQ0VfVEFCTEXigJ0gaXMgYSBzdGFuZGFyZCBjbGFzcyBvZiByZWFs IGZ1bmN0aW9uYWwgYnVncyBmb3IKICBgdHJpc3RhdGVgIE9GIGRyaXZlcnMuCgojIyBQaGFzZSAy OiBEaWZmIGFuYWx5c2lzCgoqKlN0ZXAgMi4xOiBJbnZlbnRvcnkqKgotIFJlY29yZDogYGRyaXZl cnMvZ3Bpby9ncGlvLXNpZml2ZS5jYCDigJQgKiorMSAvIC0wKiouIE9uZSBpbnNlcnRpb24KICBh ZnRlciBgc2lmaXZlX2dwaW9fbWF0Y2hbXWAuIE5vIGZ1bmN0aW9ucyBjaGFuZ2VkLiAqKlNjb3Bl OioqIHNpbmdsZS0KICBmaWxlIHN1cmdpY2FsIGZpeC4KCioqU3RlcCAyLjI6IENvZGUgZmxvdyoq Ci0gUmVjb3JkOiAqKkJlZm9yZToqKiBPRiBtYXRjaCB0YWJsZSBleGlzdHMgYW5kIGlzIHVzZWQg YnkKICBgcGxhdGZvcm1fZHJpdmVyLmRyaXZlci5vZl9tYXRjaF90YWJsZWAsIHNvIGEgKmFscmVh ZHkgbG9hZGVkKiBkcml2ZXIKICBzdGlsbCBiaW5kcy4gTm8gYF9fbW9kX2RldmljZV90YWJsZV9f KmAgYWxpYXMgaXMgZW1pdHRlZCwgc28ga21vZC91ZGV2CiAgY2Fubm90IGxvYWQgdGhlIG1vZHVs ZSBmcm9tIERULiAqKkFmdGVyOioqIGBNT0RVTEVfREVWSUNFX1RBQkxFKG9mLAogIHNpZml2ZV9n cGlvX21hdGNoKWAgY3JlYXRlcyBhIHVzZWQgYWxpYXMgdG8gdGhhdCB0YWJsZTsKICBgc2NyaXB0 cy9tb2QvZmlsZTJhbGlhcy5jYCAoYGRvX29mX2VudHJ5YCkgZW1pdHMKICBgb2Y6TipUKkNzaWZp dmUsZ3BpbzBgIC8gYHNpZml2ZSxmdTU0MC1jMDAwLWdwaW9gIGFsaWFzZXMuICoqUGF0aAogIGFm ZmVjdGVkOioqIGJ1aWxkLXRpbWUgbW9kcG9zdCAvIHVzZXJzcGFjZSBhdXRvbG9hZCBvbmx5LiBQ cm9iZSBhbmQKICBJUlEgc2V0dXAgYXJlIHVuY2hhbmdlZC4KCioqU3RlcCAyLjM6IEJ1ZyBtZWNo YW5pc20qKgotIFJlY29yZDogKipDYXRlZ29yeToqKiBoYXJkd2FyZSBlbmFibGVtZW50IC8gbWlz c2luZyBtb2R1bGUgYWxpYXMKICAobG9naWMvY29ycmVjdG5lc3MgYXQgdGhlIG1vZHVsZS1sb2Fk aW5nIGJvdW5kYXJ5KS4gKipNZWNoYW5pc206KioKICBgQ09ORklHX0dQSU9fU0lGSVZFPW1gIG5l dmVyIGF1dG9sb2FkczsgR1BJTyBjb250cm9sbGVyIHN0YXlzIHVuYm91bmQKICB1bmxlc3MgYG1v ZHByb2JlYCBpcyBkb25lIGJ5IGhhbmQuIFNhbWUgY2xhc3MgYXMgZGV2aWNlLUlEIGFkZGl0aW9u czoKICBleGlzdGluZyBkcml2ZXIsIGV4aXN0aW5nIGhhcmR3YXJlLCBtaXNzaW5nIG1hdGNoIHB1 YmxpY2F0aW9uLgoKKipTdGVwIDIuNDogRml4IHF1YWxpdHkqKgotIFJlY29yZDogT2J2aW91c2x5 IGNvcnJlY3Qgb25lLWxpbmVyOyB0aGlzIGlzIHRoZSBkb2N1bWVudGVkIHdheSB0bwogIGV4cG9y dCBPRiBhbGlhc2VzLiBObyBsb2NraW5nLCBubyBBUEksIG5vIGRhdGEtc3RydWN0dXJlIGNoYW5n ZS4KICAqKlJlZ3Jlc3Npb24gcmlzazoqKiBuZWdsaWdpYmxlLiBGb3IgYD15YCBpdCBpcyBhIG5v LW9wIGF0IHJ1bnRpbWUuIE5vCiAgbmV3IHVzZXJzcGFjZSBBQkkgYmV5b25kIHN0YW5kYXJkIGBt b2R1bGVzLmFsaWFzYCBlbnRyaWVzLgoKIyMgUGhhc2UgMzogR2l0IGhpc3RvcnkKCioqU3RlcCAz LjE6IEJsYW1lKioKLSBSZWNvcmQ6IE1hdGNoIHRhYmxlIGludHJvZHVjZWQgaW4gYDk2ODY4ZGNl NjQ0ZDBgICjigJxncGlvL3NpZml2ZTogQWRkCiAgR1BJTyBkcml2ZXIgZm9yIFNpRml2ZSBTb0Nz 4oCdLCAyMDE5OyBpbiBgdjUuNS1yYzRgKS4gT3JpZ2luYWxseSBgYm9vbGAKICArIGBidWlsdGlu X3BsYXRmb3JtX2RyaXZlcigpYCwgc28gYE1PRFVMRV9ERVZJQ0VfVEFCTEVgIHdhcyBub3QKICBy ZXF1aXJlZC4gQnVnIGJlY2FtZSByZWFsIGluIGA2YjRjNzZkZWQzNTgyNmAgKOKAnGdwaW86IHNp Zml2ZTogQWxsb3cKICBidWlsZGluZyB0aGUgZHJpdmVyIGFzIGEgbW9kdWxl4oCdLCAyMDIzLTA3 LTI1KSB3aGljaCBzd2l0Y2hlZCBLY29uZmlnCiAgdG8gYHRyaXN0YXRlYCBhbmQgYG1vZHVsZV9w bGF0Zm9ybV9kcml2ZXIoKWAgKip3aXRob3V0KiogYWRkaW5nCiAgYE1PRFVMRV9ERVZJQ0VfVEFC TEVgLiBUaGF0IGNvbW1pdCBpcyBpbiBgdjYuNi1yYzFgIGFuZCBsYXRlci4KICBgb2ZfbWF0Y2hf dGFibGUgPSBzaWZpdmVfZ3Bpb19tYXRjaGAgY29uZmlybWVkIHZpYSBibGFtZQogIChgNmFlNDI1 Mjk1NDdhNGZgIGRyb3BwZWQgYG9mX21hdGNoX3B0cmAgaW4gMjAyMykuCgoqKlN0ZXAgMy4yOiBG aXhlczogdGFnKioKLSBSZWNvcmQ6IE5vIGBGaXhlczpgIG9uIHRoZSBjYW5kaWRhdGUuIFRoZSBp bXBsaWNpdCBGaXhlcyB0YXJnZXQgaXMKICBgNmI0Yzc2ZGVkMzU4MjZgLCB3aGljaCAqKmlzKiog YW4gYW5jZXN0b3Igb2YgdGhpcyB0cmVlIChgZ2l0IG1lcmdlLQogIGJhc2UgLS1pcy1hbmNlc3Rv cmAgc3VjY2VlZGVkKS4gR1BJTyBtYWludGFpbmVyIEJhcnRvc3ogc2FpZCB0aGUgc2FtZQogIG9u IGxpc3QgKFBoYXNlIDQpLgoKKipTdGVwIDMuMzogRmlsZSBoaXN0b3J5KioKLSBSZWNvcmQ6IFJl Y2VudCBgZ3Bpby1zaWZpdmUuY2Agd29yayBpcyBnZW5lcmljLWNoaXAgQVBJCiAgKGA4ZTFjOGNj YzFkZjhiYCkgYW5kIHRoZSBtb2R1bGFyIGNvbnZlcnNpb24uIE5vIHByZXJlcXVpc2l0ZSBzZXJp ZXMKICBmb3IgdGhpcyBvbmUgbGluZS4gU3RhbmRhbG9uZS4KCioqU3RlcCAzLjQ6IEF1dGhvcioq Ci0gUmVjb3JkOiBQZW5ncGVuZyBIb3UgaXMgbm90IHRoZSBHUElPIG1haW50YWluZXI7IHNhbWUt ZGF5IHNpYmxpbmcKICBgOTc1YTFkNjEyNjBjZmAgKOKAnGdwaW86IHZmNjEwOiBhZGQgbWlzc2lu ZyBNT0RVTEVfREVWSUNFX1RBQkxFKCnigJ0pLgogIFNhbXVlbCBIb2xsYW5kIChTaUZpdmUsIGF1 dGhvciBvZiB0aGUgbW9kdWxhciBjb252ZXJzaW9uKSBzZW50IHRoZQogIGlkZW50aWNhbCBvbmUt bGluZSBjaGFuZ2UgZWFybGllciAoT2N0IDIwMjUpIGFzIOKAnFN1cHBvcnQgbW9kdWxlCiAgYXV0 b2xvYWRpbmfigJ0uCgoqKlN0ZXAgMy41OiBEZXBlbmRlbmNpZXMqKgotIFJlY29yZDogTmVlZHMg YHNpZml2ZV9ncGlvX21hdGNoW11gLCBgbW9kdWxlX3BsYXRmb3JtX2RyaXZlcigpYCwgYW5kCiAg YE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIC4uLilgLiBBbGwgZXhpc3QgaW4gdGhpcyBjaGVja291 dC4gQXBwbGllcwogIHN0YW5kYWxvbmUuCgojIyBQaGFzZSA0OiBNYWlsaW5nIGxpc3QgLyBleHRl cm5hbAoKKipTdGVwIDQuMTogT3JpZ2luYWwgZGlzY3Vzc2lvbioqCi0gUmVjb3JkOiBgYjQgZGln IC1jIDhmZTZmYTBmMjIzZjQ0YCBtYXRjaGVkIHBhdGNoLWlkIHRvOgogIC0gdjEgKGFwcGxpZWQp OgogICAgaHR0cHM6Ly9wYXRjaC5tc2dpZC5saW5rLzIwMjYwNzA0MTIyMjMwLjc1OTY0LTEtcGVu Z3BlbmdAaXNjYXMuYWMuY24KICAgICgyMDI2LTA3LTA0LCBQZW5ncGVuZyBIb3UpCiAgLSBTYW1l IGRpZmYsIGVhcmxpZXI6IGh0dHBzOi8vcGF0Y2gubXNnaWQubGluay8yMDI1MTAxNjAwMzYzMS4z OTEyNTIzLQogICAgMS1zYW11ZWwuaG9sbGFuZEBzaWZpdmUuY29tICgyMDI1LTEwLTE1LCBTYW11 ZWwgSG9sbGFuZCkKLSBTaW5nbGUgcmV2aXNpb24gb2YgUGVuZ3BlbmfigJlzIHBhdGNoLiBCYXJ0 b3N6OiDigJxBcHBsaWVkLCB0aGFua3Mh4oCdCiAgKDIwMjYtMDctMDYpLiBObyBOQUsuCi0gT24g U2FtdWVs4oCZcyBlYXJsaWVyIHBvc3QsIEJhcnRvc3ogd3JvdGUgaXQgc2hvdWxkIGhhdmUgYmVl biBwYXJ0IG9mCiAgYDZiNGM3NmRlZDM1OGAgYW5kIGFza2VkIGhpbSB0byAqKnJlc2VuZCB3aXRo IGBGaXhlczpgIGFuZCBgQ2M6CiAgc3RhYmxlYCoqLiBUaGF0IHJlc2VuZCBkaWQgbm90IGxhbmQ7 IFBlbmdwZW5n4oCZcyBsYXRlciBwYXRjaCAod2l0aG91dAogIHRob3NlIHRhZ3MpIHdhcyBhcHBs aWVkIGluc3RlYWQuCgoqKlN0ZXAgNC4yOiBSZWNpcGllbnRzIChgYjQgZGlnIC13YCkqKgotIFJl Y29yZDogUGVuZ3BlbmcgSG91LCBMaW51cyBXYWxsZWlqLCBCYXJ0b3N6IEdvbGFzemV3c2tpLCBQ YXVsCiAgV2FsbXNsZXksIFNhbXVlbCBIb2xsYW5kLCBgbGludXgtZ3Bpb2AsIGBsaW51eC1yaXNj dmAsIGBsaW51eC1rZXJuZWxgLgogIEdQSU8gbWFpbnRhaW5lcnMgd2VyZSBvbiBUby9DYy4KCioq U3RlcCA0LjM6IEJ1ZyByZXBvcnQqKgotIFJlY29yZDogTm8gc3l6Ym90L2J1Z3ppbGxhLiBFdmlk ZW5jZSBpcyBzb3VyY2UtbGV2ZWwgcGx1cyB2ZW5kb3IKICAoU2lGaXZlKSBzZW5kaW5nIHRoZSBz YW1lIHBhdGNoLiBObyBjb3VudCBvZiBmaWVsZCByZXBvcnRzLgoKKipTdGVwIDQuNDogU2VyaWVz KioKLSBSZWNvcmQ6IFN0YW5kYWxvbmUgMS8xLiBTaWJsaW5nIHZmNjEwIGZpeCBpcyBhIHNlcGFy YXRlIGRyaXZlciwgbm90IGEKICBkZXBlbmRlbmN5LgoKKipTdGVwIDQuNTogU3RhYmxlIGxpc3Qq KgotIFJlY29yZDogbG9yZS5rZXJuZWwub3JnIHZpYSBXZWJGZXRjaCByZXR1cm5lZCA0MDMuIFN0 YWJsZS1saXN0IHNlYXJjaAogICoqVU5WRVJJRklFRCoqIGJ5IEhUVFAuIE1haW50YWluZXIgcmVx dWVzdCBmb3IgYENjOiBzdGFibGVgIGlzIGZyb20KICBgbGludXgtZ3Bpb2AgbWJveCwgbm90IGZy b20gYHN0YWJsZUBgLgoKIyMgUGhhc2UgNTogU2VtYW50aWMgYW5hbHlzaXMKCioqU3RlcCA1LjE6 IEZ1bmN0aW9ucyoqCi0gUmVjb3JkOiBObyBmdW5jdGlvbnMgbW9kaWZpZWQuIEFkZGVkIGBNT0RV TEVfREVWSUNFX1RBQkxFKG9mLAogIHNpZml2ZV9ncGlvX21hdGNoKWAgYWZ0ZXIgYHNpZml2ZV9n cGlvX21hdGNoW11gLiBSZWxhdGVkIHN5bWJvbHM6CiAgYHNpZml2ZV9ncGlvX3Byb2JlYCwgYHNp Zml2ZV9ncGlvX2RyaXZlcmAuCgoqKlN0ZXAgNS4yOiBDYWxsZXJzKioKLSBSZWNvcmQ6IGBzaWZp dmVfZ3Bpb19wcm9iZWAgaXMgdGhlIHBsYXRmb3JtIGAucHJvYmVgLiBEcml2ZXIgY29yZQogIGNh bGxzIGl0IHdoZW4gT0YgY29tcGF0aWJsZSBtYXRjaGVzICoqYW5kIHRoZSBtb2R1bGUgaXMgYWxy ZWFkeQogIGxvYWRlZCoqLiBBdXRvbG9hZCBpcyB1c2Vyc3BhY2UgKGttb2QpIHVzaW5nIGFsaWFz ZXMgZnJvbQogIGBNT0RVTEVfREVWSUNFX1RBQkxFYC4gTm90IElSUS9ob3QtcGF0aC4KCioqU3Rl cCA1LjM6IENhbGxlZXMqKgotIFJlY29yZDogVW5jaGFuZ2VkLiBQcm9iZSBzdGlsbCB1c2VzIGdl bmVyaWMgR1BJTyArIGlycWNoaXAKICByZWdpc3RyYXRpb24uCgoqKlN0ZXAgNS40OiBSZWFjaGFi aWxpdHkqKgotIFJlY29yZDogUmVhY2hhYmxlIG9uIFNpRml2ZSBGVTU0MC9GVTc0MCBhbmQgQ2Fu YWFuIEsyMTAgRFQKICAoYGNvbXBhdGlibGUgPSAic2lmaXZlLGdwaW8wImAgLyBgInNpZml2ZSxm dTU0MC1jMDAwLWdwaW8iYCkuCiAgVXNlcnNwYWNlLXZpc2libGU6IHdpdGhvdXQgYWxpYXNlcywg R1BJTyBuZXZlciBhcHBlYXJzIHVubGVzcyB0aGUKICBtb2R1bGUgaXMgZm9yY2VkLiBOb3QgYSBz eXNjYWxsIGNyYXNoIHBhdGguCgoqKlN0ZXAgNS41OiBTaW1pbGFyIHBhdHRlcm5zKioKLSBSZWNv cmQ6IFNhbWUgcGF0dGVybiBpbi10cmVlOiBgZ3BpbzogbHBjMzJ4eDogZml4IG1vZHVsZSBhdXRv bG9hZGluZ2AsCiAgYGdwaW86IG1vZGVwaW46IEVuYWJsZSBtb2R1bGUgYXV0b2xvYWRpbmdgLCBg Z3BpbzogdmY2MTA6IGFkZCBtaXNzaW5nCiAgTU9EVUxFX0RFVklDRV9UQUJMRSgpYCwgYGdwaW86 IGNhZGVuY2U6IEFkZCBtaXNzaW5nCiAgTU9EVUxFX0RFVklDRV9UQUJMRWAuIEVzdGFibGlzaGVk IEdQSU8tc3Vic3lzdGVtIHByYWN0aWNlLgoKIyMgUGhhc2UgNjogTG9jYWwgdHJlZSAodGhpcyBj aGVja291dCBvbmx5KQoKKipTdGVwIDYuMTogQnVnZ3kgY29kZSBpbiB0aGlzIHRyZWU/KioKLSBS ZWNvcmQ6IENoZWNrb3V0IGlzICoqTGludXMgYG9yaWdpbi9tYXN0ZXJgKiosIGBnaXQgZGVzY3Jp YmVgID0KICBgdjcuMy1yYzQtMjctZ2YwMTAwMzYzZDhjMzdgLCBNYWtlZmlsZSAqKjcuMy4wLXJj NCoqLiBgZ3Bpby1zaWZpdmUuY2AsCiAgYHNpZml2ZV9ncGlvX21hdGNoW11gLCBgdHJpc3RhdGUg R1BJT19TSUZJVkVgLCBhbmQKICBgbW9kdWxlX3BsYXRmb3JtX2RyaXZlcigpYCBhcmUgYWxsIHBy ZXNlbnQuIE1vZHVsYXIgY29udmVyc2lvbgogIGA2YjRjNzZkZWQzNTgyNmAgaXMgYW4gYW5jZXN0 b3IuIFRoZSBvbmUtbGluZSBhbGlhcyBleHBvcnQgYmVsb25ncyBvbgogIHRoaXMgY29kZS4gSW4t dHJlZSBEVDogYGFyY2gvcmlzY3YvYm9vdC9kdHMvc2lmaXZlL2Z1NTQwLWMwMDAuZHRzaWAsCiAg YGZ1NzQwLWMwMDAuZHRzaWAsIGBhcmNoL3Jpc2N2L2Jvb3QvZHRzL2NhbmFhbi9rMjEwLmR0c2lg LiBEZWZjb25maWdzCiAgKGBhcmNoL3Jpc2N2L2NvbmZpZ3MvZGVmY29uZmlnYCwgSzIxMCBkZWZj b25maWdzKSBzZXQKICBgQ09ORklHX0dQSU9fU0lGSVZFPXlgLCBzbyAqZGVmYXVsdCogUklTQy1W IGNvbmZpZ3MgZG8gbm90IGhpdAogIGF1dG9sb2FkOyBgPW1gICh0aGUgcmVhc29uIHRoZSBkcml2 ZXIgd2FzIG1hZGUgbW9kdWxhcjogbXVsdGlwbGF0Zm9ybQogIGltYWdlIHNpemUpIGRvZXMuCgoq KlN0ZXAgNi4yOiBCYWNrcG9ydCBkaWZmaWN1bHR5KioKLSBSZWNvcmQ6IENsZWFuIGFwcGx5LiBP bmx5IG5lZWRzIHRoZSBgb2ZfZGV2aWNlX2lkYCB0YWJsZSBuYW1lCiAgYHNpZml2ZV9ncGlvX21h dGNoYC4gTm8gY29uZmxpY3Qgd2l0aCBsYXRlciBnZW5lcmljLWNoaXAgY2hhbmdlcy4KCioqU3Rl cCA2LjM6IFJlbGF0ZWQgZml4ZXMgYWxyZWFkeSBoZXJlKioKLSBSZWNvcmQ6IE5vIGVhcmxpZXIg YWx0ZXJuYXRlIGF1dG9sb2FkIGZpeC4gVGhpcyBpcyB0aGUgZmlyc3QKICBgTU9EVUxFX0RFVklD RV9UQUJMRWAgb24gdGhpcyBmaWxlLgoKIyMgUGhhc2UgNzogU3Vic3lzdGVtIGNvbnRleHQKCioq U3RlcCA3LjEqKgotIFJlY29yZDogKipTdWJzeXN0ZW06KiogR1BJTyAoYGRyaXZlcnMvZ3Bpby9g KS4gKipDcml0aWNhbGl0eToqKgogIElNUE9SVEFOVCBmb3IgU2lGaXZlL0syMTAgYm9hcmRzIChH UElPIGlzIGEgYm9hcmQtbGV2ZWwgZGVwZW5kZW5jeSksCiAgUEVSSVBIRVJBTCB2cyBjb3JlIG1t L25ldC4gTm90IHN0YWdpbmcuCgoqKlN0ZXAgNy4yKioKLSBSZWNvcmQ6IEdQSU8gaXMgYWN0aXZl bHkgbWFpbnRhaW5lZCAoQmFydG9zeikuIFRoaXMgZHJpdmVyIGlzIG1hdHVyZQogIChzaW5jZSB2 NS41KTsgdGhlIG1vZHVsYXIgaG9sZSBpcyBmcm9tIHY2LjYsIG5vdCBuZXcgZXhwZXJpbWVudGFs CiAgY29kZS4KCiMjIFBoYXNlIDg6IEltcGFjdCBhbmQgcmlzawoKKipTdGVwIDguMTogV2hvIGlz IGFmZmVjdGVkKioKLSBSZWNvcmQ6IERyaXZlci1zcGVjaWZpYywgY29uZmlnLXNwZWNpZmljOiBg Q09ORklHX0dQSU9fU0lGSVZFPW1gIG9uIERUCiAgcGxhdGZvcm1zIHdpdGggdGhvc2UgY29tcGF0 aWJsZXMuIE5vdCB1bml2ZXJzYWwuCgoqKlN0ZXAgOC4yOiBUcmlnZ2VyKioKLSBSZWNvcmQ6IEJv b3QgLyBkZXZpY2UgZW51bWVyYXRpb24gd2l0aCB0aGUgbW9kdWxlIG5vdCBwcmVsb2FkZWQuCiAg Q29tbW9uIGZvciBtdWx0aXBsYXRmb3JtIG1vZHVsYXIga2VybmVscyAodGhlIHN0YXRlZCBnb2Fs IG9mCiAgYDZiNGM3NmRlZDM1OGApLiBVbnByaXZpbGVnZWQgdXNlcnMgZG8gbm90IHRyaWdnZXIg YSBjcmFzaDsgdGhlCiAgY29udHJvbGxlciBzaW1wbHkgbmV2ZXIgYmluZHMuIE5vdCBhIHJhY2Uu CgoqKlN0ZXAgOC4zOiBGYWlsdXJlIG1vZGUqKgotIFJlY29yZDogR1BJTyBjaGlwIChhbmQgaXRz IGlycWNoaXApIG5ldmVyIHJlZ2lzdGVycyBpZiB0aGUgbW9kdWxlIGlzCiAgbm90IGxvYWRlZC4g RGVwZW5kZW50IExFRHMsIHJlc2V0cywga2V5cywgaG9nIGxpbmVzIGZhaWwuICoqU2V2ZXJpdHk6 CiAgTUVESVVNKiogZnVuY3Rpb25hbGx5IChoYXJkd2FyZSBkZWFkIHVudGlsIGBtb2Rwcm9iZWAp LCBub3QgcGFuaWMvVUFGLgogIEZvciB0aG9zZSBib2FyZHMgdGhhdCBpcyB1c2VyLXZpc2libGUg YnJlYWthZ2UsIG5vdCBjb3NtZXRpYy4KCioqU3RlcCA4LjQ6IFJpc2stYmVuZWZpdCoqCi0gUmVj b3JkOiAqKkJlbmVmaXQ6KiogaGlnaCBmb3IgYD1tYCBTaUZpdmUvSzIxMCB1c2VyczsgcmVzdG9y ZXMgdGhlCiAgbW9kdWxhciBjb252ZXJzaW9u4oCZcyBwdXJwb3NlLiAqKlJpc2s6KiogdmVyeSBs b3cgKDEgbGluZSwgYnVpbGQtdGltZQogIGFsaWFzIG9ubHkpLiAqKlJhdGlvOioqIHN0cm9uZ2x5 IGZhdm9yYWJsZS4gTWF0Y2hlcyB0aGUgZGV2aWNlLUlEIC8KICBoYXJkd2FyZS1lbmFibGVtZW50 IGV4Y2VwdGlvbi4KCiMjIFBoYXNlIDk6IFN5bnRoZXNpcwoKKipTdGVwIDkuMTogRXZpZGVuY2Uq KgotICoqRm9yOioqIFJlYWwgYXV0b2xvYWQgYnVnOyAxLWxpbmUgb2J2aW91c2x5IGNvcnJlY3Q7 IEdQSU8gbWFpbnRhaW5lcgogIGFza2VkIGZvciBgRml4ZXM6YCArIGBDYzogc3RhYmxlYCBvbiB0 aGUgaWRlbnRpY2FsIGRpZmY7IFNpRml2ZQogIGVuZ2luZWVyIHNlbnQgdGhhdCBkaWZmOyBkcml2 ZXIgaXMgYHRyaXN0YXRlYCBzaW5jZSB2Ni42OyBEVCBoYXJkd2FyZQogIGV4aXN0czsgemVybyBy dW50aW1lIHJlZ3Jlc3Npb24gc3VyZmFjZTsgc2FtZSBwYXR0ZXJuIGFscmVhZHkgdXNlZAogIGFj cm9zcyBHUElPLgotICoqQWdhaW5zdDoqKiBOb3QgYSBjcmFzaC9zZWN1cml0eS9jb3JydXB0aW9u IGlzc3VlOyBpbi10cmVlIGRlZmNvbmZpZ3MKICB1c2UgYD15YDsgbm8gYFJlcG9ydGVkLWJ5YDsg UGVuZ3BlbmfigJlzIGFwcGxpZWQgcGF0Y2ggb21pdHRlZCB0aGUKICBgRml4ZXM6YC9gQ2M6IHN0 YWJsZWAgQmFydG9zeiBhc2tlZCBmb3IuCi0gKipVbnJlc29sdmVkOioqIFN0YWJsZS1saXN0IGFy Y2hpdmUgKGxvcmUgSFRUUCA0MDMpLiBObyBmaWVsZCBidWd6aWxsYQogIGNvdW50LgoKKipTdGVw IDkuMjogU3RhYmxlIHJ1bGVzKioKMS4gT2J2aW91c2x5IGNvcnJlY3QgYW5kIHRlc3RlZD8gKipQ QVNTKiog4oCUIGNhbm9uaWNhbAogICBgTU9EVUxFX0RFVklDRV9UQUJMRShvZiwg4oCmKWA7IG1h aW50YWluZXIgYXBwbGllZCBpdC4KMi4gUmVhbCBidWcgYWZmZWN0aW5nIHVzZXJzPyAqKlBBU1Mq KiDigJQgYD1tYCBuZXZlciBhdXRvbG9hZHM7IG1vZHVsYXIKICAgY29udmVyc2lvbiBpcyBwb2lu dGxlc3Mgd2l0aG91dCBpdC4KMy4gSW1wb3J0YW50IChjcmFzaC9zZWN1cml0eS9jb3JydXB0aW9u L2RlYWRsb2NrKT8gKipQQVNTKiogYXMgaGFyZHdhcmUtCiAgIGVuYWJsZW1lbnQgKEdQSU8gY29u dHJvbGxlciBuZXZlciBiaW5kcyksIHNhbWUgYmFyIGFzIG5ldyBkZXZpY2UgSURzCiAgIC8gbWlz c2luZyBhbGlhc2VzIOKAlCBub3QgYSBwYW5pYywgYnV0IHRoZSBkZXZpY2UgZG9lcyBub3Qgd29y ay4KNC4gU21hbGwgYW5kIGNvbnRhaW5lZD8gKipQQVNTKiog4oCUICsxIGxpbmUsIG9uZSBmaWxl Lgo1LiBObyBuZXcgZmVhdHVyZXMvQVBJcz8gKipQQVNTKiog4oCUIGFsaWFzZXMgZm9yIGV4aXN0 aW5nIGNvbXBhdGlibGVzLgo2LiBDYW4gYXBwbHkgdG8gdGhpcyB0cmVlPyAqKlBBU1MqKiDigJQg dGFibGUsIHRyaXN0YXRlIEtjb25maWcsIGFuZAogICBgbW9kdWxlX3BsYXRmb3JtX2RyaXZlcigp YCBhcmUgaGVyZS4KCioqU3RlcCA5LjM6IEV4Y2VwdGlvbiBjYXRlZ29yeSoqCi0gUmVjb3JkOiBD bG9zZXN0IHRvICoqZGV2aWNlIElEIC8gaGFyZHdhcmUgZW5hYmxlbWVudCoqOiBwdWJsaXNoaW5n CiAgZXhpc3RpbmcgT0YgSURzIHNvIHRoZSBleGlzdGluZyBkcml2ZXIgYXV0b2xvYWRzLiBOb3Qg YSBuZXcgZHJpdmVyIG9yCiAgQVBJLgoKKipTdGVwIDkuNDogRGVjaXNpb24qKgpUaGlzIHRyZWUg aGFzIHRoZSBTaUZpdmUgR1BJTyBkcml2ZXIgYXMgYSBtb2R1bGUtY2FwYWJsZSBPRiBwbGF0Zm9y bQpkcml2ZXIgd2l0aCBhIG1hdGNoIHRhYmxlIHRoYXQgd2FzIG5ldmVyIGV4cG9ydGVkLiBUaGF0 IGlzIGEgcmVhbCwKY29udGFpbmVkIGF1dG9sb2FkIGJ1Zy4gVGhlIEdQSU8gbWFpbnRhaW5lciBh bHJlYWR5IHRyZWF0ZWQgdGhlCmlkZW50aWNhbCBjaGFuZ2UgYXMgc3RhYmxlIG1hdGVyaWFsLiBJ dCBzaG91bGQgYmUgYmFja3BvcnRlZCBoZXJlLgoKIyMjIFdoYXQgdGhlIGNvbW1pdCBzb2x2ZXMg Zm9yIHRoaXMgdHJlZQpXaXRob3V0IGBNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBzaWZpdmVfZ3Bp b19tYXRjaClgLCBgbW9kcG9zdGAgbmV2ZXIKd3JpdGVzIE9GIGFsaWFzZXMsIHNvIGBncGlvLXNp Zml2ZS5rb2Agd2lsbCBub3QgbG9hZCBmcm9tCmAic2lmaXZlLGdwaW8wImAgLyBgInNpZml2ZSxm dTU0MC1jMDAwLWdwaW8iYC4gT24gYENPTkZJR19HUElPX1NJRklWRT1tYAp0aGUgR1BJTyAoYW5k IGlycSkgY29udHJvbGxlciBuZXZlciBhcHBlYXJzIHVubGVzcyBzb21lb25lIGBtb2Rwcm9iZWBz Cml0LiBUaGF0IHVuZGVyY3V0cyBgNmI0Yzc2ZGVkMzU4YCAo4oCcQWxsb3cgYnVpbGRpbmcgdGhl IGRyaXZlciBhcyBhCm1vZHVsZeKAnSkgb24gbXVsdGlwbGF0Zm9ybSBrZXJuZWxzLiBCdWlsdC1p biBgPXlgIGlzIHVuYWZmZWN0ZWQ7IHRoZSBvbmUtCmxpbmVyIGlzIHN0aWxsIGNvcnJlY3QgYW5k IGhhcm1sZXNzLgoKIyMjIFJpc2sgdnMgYmVuZWZpdApCZW5lZml0IGlzIHJlc3RvcmluZyBhdXRv bG9hZCBmb3IgcmVhbCBGVTU0MC9GVTc0MC9LMjEwIGhhcmR3YXJlIHdoZW4KdGhlIGRyaXZlciBp cyBtb2R1bGFyLiBSaXNrIGlzIGEgc2luZ2xlIGJ1aWxkLXRpbWUgYWxpYXMgd2l0aCBubwpwcm9i ZS9sb2NraW5nL0FQSSBjaGFuZ2UuCgojIyMgQ29uY2VybnMKTm8gYEZpeGVzOmAgb24gdGhlIGFw cGxpZWQgY29tbWl0IChzaG91bGQgYmUgYDZiNGM3NmRlZDM1ODI2YCk7IHRoYXQKZG9lcyBub3Qg YmxvY2sgYmFja3BvcnQuIEluLXRyZWUgZGVmY29uZmlncyB1c2UgYD15YCwgc28gZGVmYXVsdCBp bWFnZXMKYWxyZWFkeSB3b3JrOyB0aGUgdXNlcnMgd2hvIG5lZWQgdGhpcyBhcmUgbW9kdWxhci9t dWx0aXBsYXRmb3JtIGNvbmZpZ3MsCndoaWNoIGlzIGV4YWN0bHkgd2hvIHRoZSB0cmlzdGF0ZSBj aGFuZ2Ugd2FzIGZvci4KClZlcmlmaWNhdGlvbjoKLSBbUGhhc2UgMV0gUGFyc2VkIHRhZ3M6IExp bmsgdG8gbXNnaWQKICBgMjAyNjA3MDQxMjIyMzAuNzU5NjQtMS1wZW5ncGVuZ0Bpc2Nhcy5hYy5j bmA7IFNPQiBQZW5ncGVuZyBIb3UgYW5kCiAgQmFydG9zeiBHb2xhc3pld3NraTsgbm8gRml4ZXMv UmVwb3J0ZWQtYnkvQ2M6IHN0YWJsZQotIFtQaGFzZSAyXSBEaWZmOiArMSBsaW5lIGBNT0RVTEVf REVWSUNFX1RBQkxFKG9mLCBzaWZpdmVfZ3Bpb19tYXRjaClgCiAgaW4gYGRyaXZlcnMvZ3Bpby9n cGlvLXNpZml2ZS5jYDsgcHJvYmUgdW5jaGFuZ2VkCi0gW1BoYXNlIDJdIENvbmZpcm1lZCBgTU9E VUxFX0RFVklDRV9UQUJMRWAgaW4gYGluY2x1ZGUvbGludXgvbW9kdWxlLmhgCiAgYW5kIE9GIGFs aWFzIGVtaXNzaW9uIHZpYSBgc2NyaXB0cy9tb2QvZmlsZTJhbGlhcy5jYCBgZG9fb2ZfZW50cnlg Ci0gW1BoYXNlIDNdIGBnaXQgYmxhbWVgOiBtYXRjaCB0YWJsZSBmcm9tIGA5Njg2OGRjZTY0NGQw YCAodjUuNS1yYzQpOwogIG1vZHVsYXIgYnVnIGZyb20gYDZiNGM3NmRlZDM1ODI2YCAoaW4gdjYu Ni1yYzEpOyBgZ2l0IG1lcmdlLWJhc2UgLS1pcy0KICBhbmNlc3RvciA2YjRjNzZkZWQzNTgyNiBI RUFEYCBzdWNjZWVkZWQKLSBbUGhhc2UgM10gYGdpdCBzaG93IDZiNGM3NmRlZDM1ODI2YDogYm9v bOKGknRyaXN0YXRlICsKICBgYnVpbHRpbl9wbGF0Zm9ybV9kcml2ZXJgIOKGkiBgbW9kdWxlX3Bs YXRmb3JtX2RyaXZlcmAgd2l0aG91dAogIE1PRFVMRV9ERVZJQ0VfVEFCTEUKLSBbUGhhc2UgM10g QXV0aG9yIGxvZzogc2libGluZyB2ZjYxMCBjb21taXQgYDk3NWExZDYxMjYwY2ZgCi0gW1BoYXNl IDRdIGBiNCBkaWcgLWMgOGZlNmZhMGYyMjNmNDRgOiBQZW5ncGVuZyB2MSBhcHBsaWVkOyBzYW1l IHBhdGNoLQogIGlkIGFzIFNhbXVlbCBIb2xsYW5kIE9jdCAyMDI1Ci0gW1BoYXNlIDRdIGBiNCBk aWcgLWFgOiBzaW5nbGUgUGVuZ3BlbmcgcmV2aXNpb247IGBiNCBkaWcgLXdgOiBHUElPCiAgbWFp bnRhaW5lcnMgKyBsaW51eC1ncGlvL2xpbnV4LXJpc2N2Ci0gW1BoYXNlIDRdIG1ib3g6IEJhcnRv c3ogYXNrZWQgU2FtdWVsIGZvciBGaXhlczogKyBDYzogc3RhYmxlOyBsYXRlcgogIOKAnEFwcGxp ZWQsIHRoYW5rcyHigJ0gb24gUGVuZ3BlbmfigJlzIHBhdGNoCi0gW1BoYXNlIDRdIFdlYkZldGNo IGxvcmUua2VybmVsLm9yZzogNDAzIOKAlCBVTlZFUklGSUVEIHZpYSBIVFRQOyB0aHJlYWQKICBy ZWNvdmVyZWQgd2l0aCBiNCBtYm94Ci0gW1BoYXNlIDVdIENhbGxlcnM6IHBsYXRmb3JtIHByb2Jl ICsgT0YgbWF0Y2ggdGFibGU7IGF1dG9sb2FkIGlzCiAgdXNlcnNwYWNlL2ttb2QsIG5vdCBhIGtl cm5lbCBob3QgcGF0aAotIFtQaGFzZSA1XSBTaW1pbGFyIEdQSU8gYXV0b2xvYWQgZml4ZXM6IGAx MWJhYTM2ZDMxNzMyYCwKICBgYTUxMzU1MjY0MjZkZmAsIGBlNjM4MmZjZjk4OTA3YAotIFtQaGFz ZSA2XSBgZ2l0IGRlc2NyaWJlIEhFQURgID0gdjcuMy1yYzQtMjctZ2YwMTAwMzYzZDhjMzc7IGBt YWtlCiAga2VybmVsdmVyc2lvbmAgPSA3LjMuMC1yYzQ7IGRldGFjaGVkIGBvcmlnaW4vbWFzdGVy YAotIFtQaGFzZSA2XSBLY29uZmlnIGBHUElPX1NJRklWRWAgaXMgYHRyaXN0YXRlYDsgRFQgbm9k ZXMgcHJlc2VudDsKICBkZWZjb25maWdzIHVzZSBgPXlgCi0gW1BoYXNlIDhdIEZhaWx1cmUgbW9k ZTogbW9kdWxlIG5vdCBhdXRvbG9hZGVkIOKGkiBHUElPIGNvbnRyb2xsZXIKICBhYnNlbnQ7IHNl dmVyaXR5IE1FRElVTSBmdW5jdGlvbmFsIC8gaGFyZHdhcmUtZW5hYmxlbWVudAotIFVOVkVSSUZJ RUQ6IHdoZXRoZXIgdGhpcyBleGFjdCBjb21taXQgd2FzIGRpc2N1c3NlZCBvbgogIGBzdGFibGVA dmdlci5rZXJuZWwub3JnYCAobG9yZSBIVFRQIDQwMykKLSBVTlZFUklGSUVEOiBob3cgbWFueSBk aXN0cm8gY29uZmlncyBzZXQgYENPTkZJR19HUElPX1NJRklWRT1tYAoKKipZRVMqKgoKIGRyaXZl cnMvZ3Bpby9ncGlvLXNpZml2ZS5jIHwgMSArCiAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24o KykKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vZ3Bpby1zaWZpdmUuYyBiL2RyaXZlcnMvZ3Bp by9ncGlvLXNpZml2ZS5jCmluZGV4IDk0ZWYyZWZiZDE0ZjUuLmU5YTk5MmNkNGI5Y2QgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3Bpby9ncGlvLXNpZml2ZS5jCisrKyBiL2RyaXZlcnMvZ3Bpby9ncGlv LXNpZml2ZS5jCkBAIC0yNjAsNiArMjYwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZp Y2VfaWQgc2lmaXZlX2dwaW9fbWF0Y2hbXSA9IHsKIAl7IC5jb21wYXRpYmxlID0gInNpZml2ZSxm dTU0MC1jMDAwLWdwaW8iIH0sCiAJeyB9LAogfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHNp Zml2ZV9ncGlvX21hdGNoKTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2lmaXZl X2dwaW9fZHJpdmVyID0gewogCS5wcm9iZQkJPSBzaWZpdmVfZ3Bpb19wcm9iZSwKLS0gCjIuNTMu MAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4 LXJpc2N2IG1haWxpbmcgbGlzdApsaW51eC1yaXNjdkBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6 Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtcmlzY3YK