From: David Lechner <dlechner@baylibre.com>
To: Jonathan Cameron <jic23@kernel.org>,
	Rob Herring <robh@kernel.org>,
	Krzysztof Kozlowski <krzk+dt@kernel.org>,
	Conor Dooley <conor+dt@kernel.org>
Cc: David Lechner <dlechner@baylibre.com>,
	Michael Hennerich <michael.hennerich@analog.com>,
	=?utf-8?q?Nuno_S=C3=A1?= <nuno.sa@analog.com>,
	Jonathan Corbet <corbet@lwn.net>,
	linux-iio@vger.kernel.org,
	devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-doc@vger.kernel.org,
	Ramona Gradinariu <ramona.gradinariu@analog.com>
Subject: [PATCH v3 0/3] iio: adc: ad4695: new driver for AD4695 and similar ADCs
Date: Mon, 24 Jun 2024 17:01:52 -0500
Message-ID: <20240624-iio-adc-ad4695-v3-0-a22c302f06bf@baylibre.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257456
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-doc,org.kernel.vger.linux-iio
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

This is adding DT bindings and a new driver for the AD4695 and similar
devices. The plan is to implement quite a few more features, but this
is a complex chip so we're spreading out the work. To start with, we
have a reasonably complete DT binding and a very basic driver.

This work is being done in collaboration with Analog Devices Inc.,
hence they listed as maintainers rather than me. The code has been
tested on a ZedBoard with an EVAL-AD4696FMCZ using the internal LDO,
an external reference and a variety of input channel configurations.

---
Changes in v3:
* Dropped "dt-bindings: iio: adc: add common-mode-channel dependency"
  patch.
* Link to v2: https://lore.kernel.org/r/20240617-iio-adc-ad4695-v2-0-63ef6583f25d@baylibre.com

[PATCH 1/3]
* Change interrupts to be per pin instead of per signal.
* Drop diff-channels and single-channel properties.
* Odd numbered pins added to common-mode-channel property enum.
* REFGND and COM values changed to avoid confusion with pin numbers.
* Add inX-supply properties for odd numbed input pins.

[PATCH 2/3]
* always include all channels, not just ones customized in DT
* rework channel fwnode parsing for DT changes

[PATCH 3/3]
* Rework DT examples for DT bindings changes

Changes in v2:

[PATCH 1/4]
* New patch
* Depends on recently applied patch
  https://lore.kernel.org/linux-iio/20240607-ad4111-v7-1-97e3855900a0@analog.com/

[PATCH 2/4]
* Drop *-wlcsp compatible strings
* Don't use fallback compatible strings
* Reword supply descriptions
* Use standard channel properties instead of adi,pin-pairing
* Fix unnecessary | character
* Fix missing blank line
* Add header file with common mode channel macros

[PATCH 3/4]
* rework register definition macros
* remove code structure comments at top level
* remove simple wrapper functions around regmap functions
* rework channel fwnode parsing for DT changes
* fix missing return value check

[PATCH 4/4]
* Rework DT examples for DT bindings changes
* Fix wrong MAINTAINERS update

* Link to v1: https://lore.kernel.org/r/20240612-iio-adc-ad4695-v1-0-6a4ed251fc86@baylibre.com

---
David Lechner (3):
      dt-bindings: iio: adc: add AD4695 and similar ADCs
      iio: adc: ad4695: Add driver for AD4695 and similar ADCs
      Documentation: iio: Document ad4695 driver

 .../devicetree/bindings/iio/adc/adi,ad4695.yaml    | 256 ++++++++
 Documentation/iio/ad4695.rst                       | 155 +++++
 Documentation/iio/index.rst                        |   1 +
 MAINTAINERS                                        |  12 +
 drivers/iio/adc/Kconfig                            |  11 +
 drivers/iio/adc/Makefile                           |   1 +
 drivers/iio/adc/ad4695.c                           | 730 +++++++++++++++++++++
 include/dt-bindings/iio/adi,ad4695.h               |   9 +
 8 files changed, 1175 insertions(+)
---
base-commit: 2dfa1b7bfc07e58acb9f9eaa8c871f37189dbfee
change-id: 20240517-iio-adc-ad4695-ef72b2a2cf88

Best regards,
-- 
David Lechner <dlechner@baylibre.com>

.

Date: Mon, 24 Jun 2024 15:02:05 -0700
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
Mime-Version: 1.0
Message-ID: <20240624220206.3373197-1-dhavale@google.com>
Subject: [PATCH v1] erofs: fix possible memory leak in z_erofs_gbuf_exit()
From: Sandeep Dhavale <dhavale@google.com>
To: linux-erofs@lists.ozlabs.org, Gao Xiang <xiang@kernel.org>, 
	Chao Yu <chao@kernel.org>, Yue Hu <huyue2@coolpad.com>, 
	Jeffle Xu <jefflexu@linux.alibaba.com>, Sandeep Dhavale <dhavale@google.com>, 
	Chunhai Guo <guochunhai@vivo.com>
Cc: hsiangkao@linux.alibaba.com, kernel-team@android.com, 
	linux-kernel@vger.kernel.org
Content-Type: text/plain; charset="UTF-8"
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257460
Newsgroups: org.kernel.vger.linux-kernel,org.ozlabs.lists.linux-erofs
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Because we incorrectly reused of variable `i` in `z_erofs_gbuf_exit()`
for inner loop, we may exit early from outer loop resulting in memory
leak. Fix this by using separate variable for iterating through inner loop.

Fixes: f36f3010f676 ("erofs: rename per-CPU buffers to global buffer pool and make it configurable")

Signed-off-by: Sandeep Dhavale <dhavale@google.com>
---
 fs/erofs/zutil.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/fs/erofs/zutil.c b/fs/erofs/zutil.c
index 036024bce9f7..b80f612867c2 100644
--- a/fs/erofs/zutil.c
+++ b/fs/erofs/zutil.c
@@ -148,7 +148,7 @@ int __init z_erofs_gbuf_init(void)
 
 void z_erofs_gbuf_exit(void)
 {
-	int i;
+	int i, j;
 
 	for (i = 0; i < z_erofs_gbuf_count + (!!z_erofs_rsvbuf); ++i) {
 		struct z_erofs_gbuf *gbuf = &z_erofs_gbufpool[i];
@@ -161,9 +161,9 @@ void z_erofs_gbuf_exit(void)
 		if (!gbuf->pages)
 			continue;
 
-		for (i = 0; i < gbuf->nrpages; ++i)
-			if (gbuf->pages[i])
-				put_page(gbuf->pages[i]);
+		for (j = 0; j < gbuf->nrpages; ++j)
+			if (gbuf->pages[j])
+				put_page(gbuf->pages[j]);
 		kfree(gbuf->pages);
 		gbuf->pages = NULL;
 	}
-- 
2.45.2.741.gdbec12cfda-goog

.

Date: Mon, 24 Jun 2024 17:07:36 -0500
From: Maxwell Bland <mbland@motorola.com>
To: linux-mm@kvack.org
Cc: Catalin Marinas <catalin.marinas@arm.com>, Will Deacon <will@kernel.org>,
        Jonathan Corbet <corbet@lwn.net>,
        Andrew Morton <akpm@linux-foundation.org>,
        Ard Biesheuvel <ardb@kernel.org>, Mark Rutland <mark.rutland@arm.com>,
        Christophe Leroy <christophe.leroy@csgroup.eu>,
        Maxwell Bland <mbland@motorola.com>,
        Alexandre Ghiti <alexghiti@rivosinc.com>,
        linux-arm-kernel@lists.infradead.org, linux-doc@vger.kernel.org,
        linux-kernel@vger.kernel.org
Subject: [PATCH v5 0/6] ptdump: add intermediate directory support
Message-ID: <2bcb3htsjhepxdybpw2bwot2jnuezl3p5mnj5rhjwgitlsufe7@xzhkyntridw3>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257464 org.kvack.linux-mm:201196
Newsgroups: org.kernel.vger.linux-kernel,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-doc,org.kvack.linux-mm
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Makes several improvements to (arm64) ptdump debugging, including:

- support note_page on intermediate table entries
- (arm64) print intermediate entries and add an array for their specific
  attributes
- (arm64) bitfield definitions and printing for hierarchical access
  control bits
- (arm64) adjust the entry ranges to remove the implicit exclusive upper
  bound
- (arm64) indent page table by level while maintaining attribute
  alignment
- (arm64) improve documentation clarity, detail, and precision

Thank you again to the maintainers for their review of this patch.

A comparison of the differences in output is provided here:
github.com/maxwell-bland/linux-patch-data/tree/main/ptdump-non-leaf

New in v5:
- Clean up and fix ptdump.c calls to reference right directory level
- Change "pxd" bit specifier for non-leaf directories to tbl_bits,
  introduce a proper delineation between blk_bits and tbl_bits,
  where table entries will no longer print attributes that are
  specific to blocks
- Because we now support printing details on table descriptors, add
  encodings for the ARMv8 APTable bits
- Make attributes uniformly capitalized, make their explanations more
  precise
- Fix typos

v4:
https://lore.kernel.org/all/aw675dhrbplkitj3szjut2vyidsxokogkjj3vi76wl2x4wybtg@5rhk5ca5zpmv/
- Inclusive upper bounds on range specifications
- Splits commit into multiple smaller commits and separates cosmetic,
  documentation, and logic changes
- Updates documentation more sensibly
- Fixes bug in size computation and handles ULONG_MAX bound overflow

v3:
https://lore.kernel.org/all/fik5ys53dbkpkl22o4s7sw7cxi6dqjcpm2f3kno5tyms73jm5y@buo4jsktsnrt/
- Added tabulation to delineate entries
- Fixed formatting issues with mailer and rebased to mm/linus

v2:
https://lore.kernel.org/r/20240423142307.495726312-1-mbland@motorola.com
- Rebased onto linux-next/akpm (the incorrect branch)

v1:
https://lore.kernel.org/all/20240423121820.874441838-1-mbland@motorola.com/

Maxwell Bland (6):
  mm: add ARCH_SUPPORTS_NON_LEAF_PTDUMP
  arm64: add APTable encoding to pagetable defs
  arm64: table descriptor ptdump support
  arm64: indent ptdump by level, aligning attributes
  arm64: exclusive upper bound for ptdump entries
  arm64: add attrs and format to ptdump document

 Documentation/arch/arm64/ptdump.rst    | 131 ++++++++++-----------
 arch/arm64/Kconfig                     |   1 +
 arch/arm64/include/asm/pgtable-hwdef.h |   6 +
 arch/arm64/mm/ptdump.c                 | 150 +++++++++++++++++++------
 mm/Kconfig.debug                       |   8 ++
 mm/ptdump.c                            |  26 +++--
 6 files changed, 214 insertions(+), 108 deletions(-)

-- 
2.43.0


.

Date: Mon, 24 Jun 2024 22:12:04 +0000
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
Mime-Version: 1.0
Message-ID: <20240624221211.2593736-1-ipylypiv@google.com>
Subject: [PATCH v2 0/6] ATA PASS-THROUGH sense data fixes
From: Igor Pylypiv <ipylypiv@google.com>
To: Damien Le Moal <dlemoal@kernel.org>, Niklas Cassel <cassel@kernel.org>
Cc: Tejun Heo <tj@kernel.org>, Hannes Reinecke <hare@suse.de>, 
	"Martin K. Petersen" <martin.petersen@oracle.com>, Jason Yan <yanaijie@huawei.com>, 
	linux-ide@vger.kernel.org, linux-kernel@vger.kernel.org, 
	Igor Pylypiv <ipylypiv@google.com>
Content-Type: text/plain; charset="UTF-8"
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257466
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-ide
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

This patch series is fixing a few ATA PASS-THROUGH issues:
1. Not reporting "ATA Status Return sense data descriptor" / "Fixed format
   sense data" when ATA_QCFLAG_SENSE_VALID is set.
2. Generating "fake" sk/asc/ascq based on ATA status/error registers when
   ATA_QCFLAG_SENSE_VALID is set and CK_COND=1.
3. Fixed format sense data was using incorrect field offsets for ATA
   PASS-THROUGH commands.
4. Using qc->result_tf in ATA sense data generation functions without
   checking if qc->result_tf contains a valid data.

Changes since v1:

Thanks Damien and Niklas for the reviews!

- Squashed two v1 patches 2/4 and 3/4 into one patch with a different
  implementation.
- Added 'Cc: stable@vger.kernel.org' tags to patches that are fixing bugs.
- Reordered patches with the 'Cc: stable@vger.kernel.org' tag to be applied
  first in order to simplify backports to stable releases.
- Restored the buffer memset in atapi_eh_request_sense().
- Updated declaration order in v1 patch 4/4.
- Added a patch to cleanup unused ATA device id in ata_to_sense_error().
- Updated fill_result_tf() to set ATA_QCFLAG_RTF_FILLED after populating
  the result taskfile. Removed now redundant flag sets/checks from ahci.
- Updated ATA sense data generation functions to return early if result_tf
  is not filled. Added WARN_ON_ONCE checks to generate a warning when
  ATA_QCFLAG_RTF_FILLED is not set and libata needs to generate sense data.

Igor Pylypiv (6):
  ata: libata-scsi: Do not overwrite valid sense data when CK_COND=1
  ata: libata-scsi: Fix offsets for the fixed format sense data
  ata: libata-scsi: Remove redundant sense_buffer memsets
  ata: libata-scsi: Do not pass ATA device id to ata_to_sense_error()
  ata: libata: Set ATA_QCFLAG_RTF_FILLED in fill_result_tf()
  ata: libata-scsi: Check ATA_QCFLAG_RTF_FILLED before using result_tf

 drivers/ata/libahci.c     |  10 ---
 drivers/ata/libata-core.c |   8 ++
 drivers/ata/libata-scsi.c | 179 +++++++++++++++++++++-----------------
 3 files changed, 107 insertions(+), 90 deletions(-)

-- 
2.45.2.741.gdbec12cfda-goog

.

From: weilin.wang@intel.com
To: weilin.wang@intel.com,
	Namhyung Kim <namhyung@kernel.org>,
	Ian Rogers <irogers@google.com>,
	Arnaldo Carvalho de Melo <acme@kernel.org>,
	Peter Zijlstra <peterz@infradead.org>,
	Ingo Molnar <mingo@redhat.com>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Jiri Olsa <jolsa@kernel.org>,
	Adrian Hunter <adrian.hunter@intel.com>,
	Kan Liang <kan.liang@linux.intel.com>
Cc: linux-perf-users@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	Perry Taylor <perry.taylor@intel.com>,
	Samantha Alt <samantha.alt@intel.com>,
	Caleb Biggers <caleb.biggers@intel.com>
Subject: [RFC PATCH v14 0/8] TPEBS counting mode support
Date: Mon, 24 Jun 2024 18:20:16 -0400
Message-ID: <20240624222026.229401-1-weilin.wang@intel.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257483
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-perf-users
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

From: Weilin Wang <weilin.wang@intel.com>

Changes in v14:
 - Fix the python import test failure. We cannot support PYTHON_PERF because it
 will trigger a chain of dependency issues if we add intel-tpebs.c to it. So,
 only enable tpebs functions in evsel and evlist when PYTHON_PERF is not
 defined.
 - Fix shellcheck warning for the tpebs test.

Changes in v13:
 - Add document for the command line option and fix build error in non-x86_64.
 - Update example with non-zero retire_latency value when tpebs recording is
 enabled.
 - Add tpebs_stop() back to tpebs_set_evsel() because in hybrid platform, when
 the forked perf record is not killed, the reader thread does not get any
 sampled data from the PIPE. As a result, tpebs_set_evesel() will always return
 zero on retire_latency values. This does not happen on my test GNR machine.
 Since -I is not supported yet, I think we should add tpebs_stop() to ensure
 correctness for now. More investigation is required here when we work on
 supporting -I mode.
 - Rebase code on top of perf-tools-next.

Changes in v12:
 - Update MTL metric JSON file to include E-Core TMA3.6 changes.
 - Update comments and code for better code quality. Keep tpebs_start() and
 tpebs_delete() at evsel level for now and add comments on these functions with
 more details about potential future changes. Remove tpebs_stop() call from
 tpebs_set_evsel(). Simplify the tpebs_start() and tpebs_stop()/tpebs_delete()
 interfaces. Also fixed the bugs on not freed "new" pointer and the incorrect
 variable value assignment to val instead of counter->val.

Changes in v11:
 - Make retire_latency evsels not opened for counting. This works correctly now
 with the code Namhyung suggested that adjusting group read size when
 retire_latency evsels included in the group.
 - Update retire_latency value assignment using rint() to reduce precision loss
 while keeping code generic.
 - Fix the build error caused by not used variable in the test.

Other changes in v10:
 - Change perf record fork from perf stat to evsel. All the major operations
 like tpebs start, stop, read_evsel should directly work through evsel.
 - Make intel-tpebs x86_64 only. This change is cross-compiled to arm64.
 - Put tpebs code to intel-tepbs and simplify intel-tpebs APIs to minimum number
of functions and variables. Update funtion name and variable names to use
consistent prefix. Also improve error handling.
 - Integrate code patch from Ian for the :R parser.
 - Update MTL metrics to TMA 4.8.

V9: https://lore.kernel.org/all/20240521173952.3397644-1-weilin.wang@intel.com/

Changes in v9:
 - Update the retire_latency result print and metric calculation method. Plugin
the value to evsel so that no special code is required.
 - Update --control:fifo to use pipe instead of named pipe.
 - Add test for TPEBS counting mode.
 - Update Document with more details.

Changes in v8:
 - In this revision, the code is updated to base on Ian's patch on R modifier
parser https://lore.kernel.org/lkml/20240428053616.1125891-3-irogers@google.com/
After this change, there is no special code required for R modifier in
metricgroup.c and metricgroup.h files.

Caveat of this change:
  Ideally, we will need to add special handling to skip counting events with R
modifier in evsel. Currently, this is not implemented so the event with :R will
be both counted and sampled. Usually, in a metric formula that uses retire_latency,
it would already require to count the event. As a result, we will endup count the
same event twice. This should be able to be handled properly when we finalize our
design on evsel R modifier support.

 - Move TPEBS specific code out from main perf stat code to separate files in
util/intel-tpebs.c and util/intel-tpebs.h. [Namhyung]
 - Use --control:fifo to ack perf stat from forked perf record instead of sleep(2) [Namhyung]
 - Add introductions about TPEBS and R modifier in Documents. [Namhyung]


Changes in v7:
 - Update code and comments for better code quality [Namhyung]
 - Add a separate commit for perf data [Namhyung]
 - Update retire latency print function to improve alignment [Namhyung]

Changes in v6:
 - Update code and add comments for better code quality [Namhyung]
 - Remove the added fd var and directly pass the opened fd to data.file.fd [Namhyung]
 - Add kill() to stop perf record when perf stat exists early [Namhyung]
 - Add command opt check to ensure only start perf record when -a/-C given [Namhyung]
 - Squash commits [Namhyung]

Changes in v5:
 - Update code and add comments for better code quality [Ian]

Changes in v4:
 - Remove uncessary debug print and update code and comments for better
readability and quality [Namhyung]
 - Update mtl metric json file with consistent TmaL1 and TopdownL1 metricgroup

Changes in v3:
 - Remove ':' when event name has '@' [Ian]
 - Use 'R' as the modifier instead of "retire_latency" [Ian]

Changes in v2:
 - Add MTL metric file
 - Add more descriptions and example to the patch [Arnaldo]

Here is an example of running perf stat to collect a metric that uses
retire_latency value of event MEM_INST_RETIRED.STLB_HIT_STORES on a MTL system.

In this simple example, there is no MEM_INST_RETIRED.STLB_HIT_STORES sample.
Therefore, the MEM_INST_RETIRED.STLB_HIT_STORES:p count and retire_latency value
are all 0.

./perf stat -M tma_dtlb_store -a -- sleep 1

[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 0.000 MB - ]

 Performance counter stats for 'system wide':

       181,047,168      cpu_core/TOPDOWN.SLOTS/          #      0.6 %  tma_dtlb_store
         3,195,608      cpu_core/topdown-retiring/
        40,156,649      cpu_core/topdown-mem-bound/
         3,550,925      cpu_core/topdown-bad-spec/
       117,571,818      cpu_core/topdown-fe-bound/
        57,118,087      cpu_core/topdown-be-bound/
            69,179      cpu_core/EXE_ACTIVITY.BOUND_ON_STORES/
             4,582      cpu_core/MEM_INST_RETIRED.STLB_HIT_STORES/
        30,183,104      cpu_core/CPU_CLK_UNHALTED.DISTRIBUTED/
        30,556,790      cpu_core/CPU_CLK_UNHALTED.THREAD/
           168,486      cpu_core/DTLB_STORE_MISSES.WALK_ACTIVE/
              0.00 MEM_INST_RETIRED.STLB_HIT_STORES:p       0        0

       1.003105924 seconds time elapsed

v1:
TPEBS is one of the features provided by the next generation of Intel PMU.
Please refer to Section 8.4.1 of "IntelÂ® Architecture Instruction Set Extensions
Programming Reference" [1] for more details about this feature.

This set of patches supports TPEBS in counting mode. The code works in the
following way: it forks a perf record process from perf stat when retire_latency
of one or more events are used in a metric formula. Perf stat would send a
SIGTERM signal to perf record before it needs the retire latency value for
metric calculation. Perf stat will then process sample data to extract the
retire latency data for metric calculations. Currently, the code uses the
arithmetic average of retire latency values.

[1] https://www.intel.com/content/www/us/en/content-details/812218/intel-architecture-instruction-set-extensions-programming-reference.html?wapkw=future%20features


Ian Rogers (1):
  perf parse-events: Add a retirement latency modifier

Weilin Wang (7):
  perf data: Allow to use given fd in data->file.fd
  perf stat: Fork and launch perf record when perf stat needs to get
    retire latency value for a metric.
  perf stat: Plugin retire_lat value from sampled data to evsel
  perf vendor events intel: Add MTL metric json files
  perf stat: Add command line option for enabling tpebs recording
  perf Document: Add TPEBS to Documents
  perf test: Add test for Intel TPEBS counting mode

 tools/perf/Documentation/perf-list.txt        |    1 +
 tools/perf/Documentation/perf-stat.txt        |    8 +
 tools/perf/Documentation/topdown.txt          |   30 +
 tools/perf/arch/x86/util/evlist.c             |    6 +
 tools/perf/builtin-stat.c                     |    8 +
 .../arch/x86/meteorlake/metricgroups.json     |  142 +
 .../arch/x86/meteorlake/mtl-metrics.json      | 2535 +++++++++++++++++
 .../perf/tests/shell/test_stat_intel_tpebs.sh |   18 +
 tools/perf/util/Build                         |    1 +
 tools/perf/util/data.c                        |    7 +-
 tools/perf/util/evlist.c                      |    4 +
 tools/perf/util/evsel.c                       |   91 +-
 tools/perf/util/evsel.h                       |    6 +
 tools/perf/util/intel-tpebs.c                 |  407 +++
 tools/perf/util/intel-tpebs.h                 |   35 +
 tools/perf/util/parse-events.c                |    2 +
 tools/perf/util/parse-events.h                |    1 +
 tools/perf/util/parse-events.l                |    3 +-
 18 files changed, 3301 insertions(+), 4 deletions(-)
 create mode 100644 tools/perf/pmu-events/arch/x86/meteorlake/metricgroups.json
 create mode 100644 tools/perf/pmu-events/arch/x86/meteorlake/mtl-metrics.json
 create mode 100755 tools/perf/tests/shell/test_stat_intel_tpebs.sh
 create mode 100644 tools/perf/util/intel-tpebs.c
 create mode 100644 tools/perf/util/intel-tpebs.h

--
2.43.0

.

From: yskelg@gmail.com
To: Markus Elfring <Markus.Elfring@web.de>,
	Harald Freudenberger <freude@linux.ibm.com>,
	Heiko Carstens <hca@linux.ibm.com>,
	Vasily Gorbik <gor@linux.ibm.com>,
	Alexander Gordeev <agordeev@linux.ibm.com>,
	Christian Borntraeger <borntraeger@linux.ibm.com>,
	Sven Schnelle <svens@linux.ibm.com>
Cc: MichelleJin <shjy180909@gmail.com>,
	linux-s390@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	Yunseong Kim <yskelg@gmail.com>
Subject: [PATCH v2] s390/zcrypt: optimizes memory allocation in online_show()
Date: Tue, 25 Jun 2024 07:29:34 +0900
Message-ID: <20240624222933.81363-2-yskelg@gmail.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257497
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-s390
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

From: Yunseong Kim <yskelg@gmail.com>

Make memory allocation more precise (based on maxzqs) by allocating
memory only for the queues that are truly affected by the online state
changes.

Fixes: df6f508c68db ("s390/ap/zcrypt: notify userspace with online, config and mode info")
Link: https://lore.kernel.org/linux-s390/your-ad-here.call-01625406648-ext-2488@work.hours/
Cc: linux-s390@vger.kernel.org
Signed-off-by: Yunseong Kim <yskelg@gmail.com>
---
 drivers/s390/crypto/zcrypt_card.c | 16 +++++++---------
 1 file changed, 7 insertions(+), 9 deletions(-)

diff --git a/drivers/s390/crypto/zcrypt_card.c b/drivers/s390/crypto/zcrypt_card.c
index 050462d95222..2c80be3f2a00 100644
--- a/drivers/s390/crypto/zcrypt_card.c
+++ b/drivers/s390/crypto/zcrypt_card.c
@@ -88,9 +88,10 @@ static ssize_t online_store(struct device *dev,
 	 * the zqueue objects, we make sure they exist after lock release.
 	 */
 	list_for_each_entry(zq, &zc->zqueues, list)
-		maxzqs++;
+		if (!!zq->online != !!online)
+			maxzqs++;
 	if (maxzqs > 0)
-		zq_uelist = kcalloc(maxzqs + 1, sizeof(*zq_uelist), GFP_ATOMIC);
+		zq_uelist = kcalloc(maxzqs, sizeof(*zq_uelist), GFP_ATOMIC);
 	list_for_each_entry(zq, &zc->zqueues, list)
 		if (zcrypt_queue_force_online(zq, online))
 			if (zq_uelist) {
@@ -98,14 +99,11 @@ static ssize_t online_store(struct device *dev,
 				zq_uelist[i++] = zq;
 			}
 	spin_unlock(&zcrypt_list_lock);
-	if (zq_uelist) {
-		for (i = 0; zq_uelist[i]; i++) {
-			zq = zq_uelist[i];
-			ap_send_online_uevent(&zq->queue->ap_dev, online);
-			zcrypt_queue_put(zq);
-		}
-		kfree(zq_uelist);
+	while (i--) {
+		ap_send_online_uevent(&zq->queue->ap_dev, online);
+		zcrypt_queue_put(zq_uelist[i]);
 	}
+	kfree(zq_uelist);
 
 	return count;
 }
-- 
2.45.2

.

From: yskelg@gmail.com
To: Markus Elfring <Markus.Elfring@web.de>,
	Harald Freudenberger <freude@linux.ibm.com>,
	Heiko Carstens <hca@linux.ibm.com>,
	Vasily Gorbik <gor@linux.ibm.com>,
	Alexander Gordeev <agordeev@linux.ibm.com>,
	Christian Borntraeger <borntraeger@linux.ibm.com>,
	Sven Schnelle <svens@linux.ibm.com>
Cc: MichelleJin <shjy180909@gmail.com>,
	linux-s390@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	Yunseong Kim <yskelg@gmail.com>
Subject: [PATCH RESEND v2] s390/zcrypt: optimizes memory allocation in online_store()
Date: Tue, 25 Jun 2024 07:31:39 +0900
Message-ID: <20240624223138.81769-2-yskelg@gmail.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257499
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-s390
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

From: Yunseong Kim <yskelg@gmail.com>

Make memory allocation more precise (based on maxzqs) by allocating
memory only for the queues that are truly affected by the online state
changes.

Fixes: df6f508c68db ("s390/ap/zcrypt: notify userspace with online, config and mode info")
Link: https://lore.kernel.org/linux-s390/your-ad-here.call-01625406648-ext-2488@work.hours/
Cc: linux-s390@vger.kernel.org
Signed-off-by: Yunseong Kim <yskelg@gmail.com>
---
 drivers/s390/crypto/zcrypt_card.c | 16 +++++++---------
 1 file changed, 7 insertions(+), 9 deletions(-)

diff --git a/drivers/s390/crypto/zcrypt_card.c b/drivers/s390/crypto/zcrypt_card.c
index 050462d95222..2c80be3f2a00 100644
--- a/drivers/s390/crypto/zcrypt_card.c
+++ b/drivers/s390/crypto/zcrypt_card.c
@@ -88,9 +88,10 @@ static ssize_t online_store(struct device *dev,
 	 * the zqueue objects, we make sure they exist after lock release.
 	 */
 	list_for_each_entry(zq, &zc->zqueues, list)
-		maxzqs++;
+		if (!!zq->online != !!online)
+			maxzqs++;
 	if (maxzqs > 0)
-		zq_uelist = kcalloc(maxzqs + 1, sizeof(*zq_uelist), GFP_ATOMIC);
+		zq_uelist = kcalloc(maxzqs, sizeof(*zq_uelist), GFP_ATOMIC);
 	list_for_each_entry(zq, &zc->zqueues, list)
 		if (zcrypt_queue_force_online(zq, online))
 			if (zq_uelist) {
@@ -98,14 +99,11 @@ static ssize_t online_store(struct device *dev,
 				zq_uelist[i++] = zq;
 			}
 	spin_unlock(&zcrypt_list_lock);
-	if (zq_uelist) {
-		for (i = 0; zq_uelist[i]; i++) {
-			zq = zq_uelist[i];
-			ap_send_online_uevent(&zq->queue->ap_dev, online);
-			zcrypt_queue_put(zq);
-		}
-		kfree(zq_uelist);
+	while (i--) {
+		ap_send_online_uevent(&zq->queue->ap_dev, online);
+		zcrypt_queue_put(zq_uelist[i]);
 	}
+	kfree(zq_uelist);
 
 	return count;
 }
-- 
2.45.2

.

From: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Date: Tue, 25 Jun 2024 01:38:25 +0300
Subject: [PATCH v3] drm/msm/dpu: remove CRTC frame event callback
 registration
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
Message-Id: <20240625-dpu-no-crtc-register-v3-1-1b161df13776@linaro.org>
To: Rob Clark <robdclark@gmail.com>, 
 Abhinav Kumar <quic_abhinavk@quicinc.com>, Sean Paul <sean@poorly.run>, 
 Marijn Suijten <marijn.suijten@somainline.org>, 
 David Airlie <airlied@gmail.com>, Daniel Vetter <daniel@ffwll.ch>
Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, 
 freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org, 
 Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257500
Newsgroups: org.kernel.vger.linux-kernel,org.freedesktop.lists.dri-devel,org.kernel.vger.linux-arm-msm
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

The frame event callback is always set to dpu_crtc_frame_event_cb() (or
to NULL) and the data is always either the CRTC itself or NULL
(correpondingly). Thus drop the event callback registration, call the
dpu_crtc_frame_event_cb() directly and gate on the dpu_enc->crtc
assigned using dpu_encoder_assign_crtc().

Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
Changes in v3:
- Fixed documentation for dpu_crtc_frame_event_cb() to stop mentioning
  registration. (Abhinav)
- Link to v2: https://lore.kernel.org/dri-devel/20231005220659.2404199-1-dmitry.baryshkov@linaro.org/

Changes in v2:
- Rebased on top of linux-next
- Link to v1: https://lore.kernel.org/dri-devel/20230102154748.951328-1-dmitry.baryshkov@linaro.org/
---
 drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c    | 25 +++++++-----------
 drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.h    |  2 ++
 drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 41 +++++------------------------
 drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.h | 10 -------
 drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h   |  4 ---
 5 files changed, 18 insertions(+), 64 deletions(-)

diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c
index 9f2164782844..4c1be2f0555f 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c
@@ -658,18 +658,18 @@ static void dpu_crtc_frame_event_work(struct kthread_work *work)
 	DPU_ATRACE_END("crtc_frame_event");
 }
 
-/*
- * dpu_crtc_frame_event_cb - crtc frame event callback API. CRTC module
- * registers this API to encoder for all frame event callbacks like
- * frame_error, frame_done, idle_timeout, etc. Encoder may call different events
- * from different context - IRQ, user thread, commit_thread, etc. Each event
- * should be carefully reviewed and should be processed in proper task context
- * to avoid schedulin delay or properly manage the irq context's bottom half
- * processing.
+/**
+ * dpu_crtc_frame_event_cb - crtc frame event callback API
+ * @crtc: Pointer to crtc
+ * @event: Event to process
+ *
+ * Encoder may call this for different events from different context - IRQ,
+ * user thread, commit_thread, etc. Each event should be carefully reviewed and
+ * should be processed in proper task context to avoid schedulin delay or
+ * properly manage the irq context's bottom half processing.
  */
-static void dpu_crtc_frame_event_cb(void *data, u32 event)
+void dpu_crtc_frame_event_cb(struct drm_crtc *crtc, u32 event)
 {
-	struct drm_crtc *crtc = (struct drm_crtc *)data;
 	struct dpu_crtc *dpu_crtc;
 	struct msm_drm_private *priv;
 	struct dpu_crtc_frame_event *fevent;
@@ -1091,9 +1091,6 @@ static void dpu_crtc_disable(struct drm_crtc *crtc,
 
 	dpu_core_perf_crtc_update(crtc, 0);
 
-	drm_for_each_encoder_mask(encoder, crtc->dev, crtc->state->encoder_mask)
-		dpu_encoder_register_frame_event_callback(encoder, NULL, NULL);
-
 	memset(cstate->mixers, 0, sizeof(cstate->mixers));
 	cstate->num_mixers = 0;
 
@@ -1132,8 +1129,6 @@ static void dpu_crtc_enable(struct drm_crtc *crtc,
 		 */
 		if (dpu_encoder_get_intf_mode(encoder) == INTF_MODE_VIDEO)
 			request_bandwidth = true;
-		dpu_encoder_register_frame_event_callback(encoder,
-				dpu_crtc_frame_event_cb, (void *)crtc);
 	}
 
 	if (request_bandwidth)
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.h
index 539b68b1626a..b26d5fe40c72 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.h
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.h
@@ -300,4 +300,6 @@ static inline enum dpu_crtc_client_type dpu_crtc_get_client_type(
 	return crtc && crtc->state ? RT_CLIENT : NRT_CLIENT;
 }
 
+void dpu_crtc_frame_event_cb(struct drm_crtc *crtc, u32 event);
+
 #endif /* _DPU_CRTC_H_ */
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
index 708657598cce..4099e72820f9 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
@@ -151,8 +151,6 @@ enum dpu_enc_rc_states {
  * @frame_busy_mask:		Bitmask tracking which phys_enc we are still
  *				busy processing current command.
  *				Bit0 = phys_encs[0] etc.
- * @crtc_frame_event_cb:	callback handler for frame event
- * @crtc_frame_event_cb_data:	callback handler private data
  * @frame_done_timeout_ms:	frame done timeout in ms
  * @frame_done_timeout_cnt:	atomic counter tracking the number of frame
  * 				done timeouts
@@ -192,8 +190,6 @@ struct dpu_encoder_virt {
 
 	struct mutex enc_lock;
 	DECLARE_BITMAP(frame_busy_mask, MAX_PHYS_ENCODERS_PER_VIRTUAL);
-	void (*crtc_frame_event_cb)(void *, u32 event);
-	void *crtc_frame_event_cb_data;
 
 	atomic_t frame_done_timeout_ms;
 	atomic_t frame_done_timeout_cnt;
@@ -1456,28 +1452,6 @@ void dpu_encoder_toggle_vblank_for_crtc(struct drm_encoder *drm_enc,
 	}
 }
 
-void dpu_encoder_register_frame_event_callback(struct drm_encoder *drm_enc,
-		void (*frame_event_cb)(void *, u32 event),
-		void *frame_event_cb_data)
-{
-	struct dpu_encoder_virt *dpu_enc = to_dpu_encoder_virt(drm_enc);
-	unsigned long lock_flags;
-	bool enable;
-
-	enable = frame_event_cb ? true : false;
-
-	if (!drm_enc) {
-		DPU_ERROR("invalid encoder\n");
-		return;
-	}
-	trace_dpu_enc_frame_event_cb(DRMID(drm_enc), enable);
-
-	spin_lock_irqsave(&dpu_enc->enc_spinlock, lock_flags);
-	dpu_enc->crtc_frame_event_cb = frame_event_cb;
-	dpu_enc->crtc_frame_event_cb_data = frame_event_cb_data;
-	spin_unlock_irqrestore(&dpu_enc->enc_spinlock, lock_flags);
-}
-
 void dpu_encoder_frame_done_callback(
 		struct drm_encoder *drm_enc,
 		struct dpu_encoder_phys *ready_phys, u32 event)
@@ -1517,15 +1491,12 @@ void dpu_encoder_frame_done_callback(
 			dpu_encoder_resource_control(drm_enc,
 					DPU_ENC_RC_EVENT_FRAME_DONE);
 
-			if (dpu_enc->crtc_frame_event_cb)
-				dpu_enc->crtc_frame_event_cb(
-					dpu_enc->crtc_frame_event_cb_data,
-					event);
+			if (dpu_enc->crtc)
+				dpu_crtc_frame_event_cb(dpu_enc->crtc, event);
 		}
 	} else {
-		if (dpu_enc->crtc_frame_event_cb)
-			dpu_enc->crtc_frame_event_cb(
-				dpu_enc->crtc_frame_event_cb_data, event);
+		if (dpu_enc->crtc)
+			dpu_crtc_frame_event_cb(dpu_enc->crtc, event);
 	}
 }
 
@@ -2459,7 +2430,7 @@ static void dpu_encoder_frame_done_timeout(struct timer_list *t)
 		return;
 	}
 
-	if (!dpu_enc->frame_busy_mask[0] || !dpu_enc->crtc_frame_event_cb) {
+	if (!dpu_enc->frame_busy_mask[0] || !dpu_enc->crtc) {
 		DRM_DEBUG_KMS("id:%u invalid timeout frame_busy_mask=%lu\n",
 			      DRMID(drm_enc), dpu_enc->frame_busy_mask[0]);
 		return;
@@ -2475,7 +2446,7 @@ static void dpu_encoder_frame_done_timeout(struct timer_list *t)
 
 	event = DPU_ENCODER_FRAME_EVENT_ERROR;
 	trace_dpu_enc_frame_done_timeout(DRMID(drm_enc), event);
-	dpu_enc->crtc_frame_event_cb(dpu_enc->crtc_frame_event_cb_data, event);
+	dpu_crtc_frame_event_cb(dpu_enc->crtc, event);
 }
 
 static const struct drm_encoder_helper_funcs dpu_encoder_helper_funcs = {
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.h
index 76be77e30954..fab08e68b41b 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.h
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.h
@@ -55,16 +55,6 @@ void dpu_encoder_assign_crtc(struct drm_encoder *encoder,
 void dpu_encoder_toggle_vblank_for_crtc(struct drm_encoder *encoder,
 					struct drm_crtc *crtc, bool enable);
 
-/**
- * dpu_encoder_register_frame_event_callback - provide callback to encoder that
- *	will be called after the request is complete, or other events.
- * @encoder:	encoder pointer
- * @cb:		callback pointer, provide NULL to deregister
- * @data:	user data provided to callback
- */
-void dpu_encoder_register_frame_event_callback(struct drm_encoder *encoder,
-		void (*cb)(void *, u32), void *data);
-
 /**
  * dpu_encoder_prepare_for_kickoff - schedule double buffer flip of the ctl
  *	path (i.e. ctl flush and start) at next appropriate time.
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h
index 0fdd41162e4b..5307cbc2007c 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h
@@ -354,10 +354,6 @@ DEFINE_EVENT(dpu_enc_id_enable_template, dpu_enc_vblank_cb,
 	TP_PROTO(uint32_t drm_id, bool enable),
 	TP_ARGS(drm_id, enable)
 );
-DEFINE_EVENT(dpu_enc_id_enable_template, dpu_enc_frame_event_cb,
-	TP_PROTO(uint32_t drm_id, bool enable),
-	TP_ARGS(drm_id, enable)
-);
 DEFINE_EVENT(dpu_enc_id_enable_template, dpu_enc_phys_cmd_connect_te,
 	TP_PROTO(uint32_t drm_id, bool enable),
 	TP_ARGS(drm_id, enable)

---
base-commit: f76698bd9a8ca01d3581236082d786e9a6b72bb7
change-id: 20240625-dpu-no-crtc-register-65a8e05c90bd

Best regards,
-- 
Dmitry Baryshkov <dmitry.baryshkov@linaro.org>

.

X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Date: Mon, 24 Jun 2024 16:21:31 -0700
Message-ID: <0000000000009ca899061bab0a49@google.com>
Subject: [syzbot] [bcachefs?] [kvm?] general protection fault in
 detach_if_pending (3)
From: syzbot <syzbot+f4b2fbba4d8c2e290380@syzkaller.appspotmail.com>
To: bfoster@redhat.com, kent.overstreet@linux.dev, kvm@vger.kernel.org, 
	linux-bcachefs@vger.kernel.org, linux-kernel@vger.kernel.org, 
	syzkaller-bugs@googlegroups.com
Content-Type: text/plain; charset="UTF-8"
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257518
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.kvm,org.kernel.vger.linux-bcachefs
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Hello,

syzbot found the following issue on:

HEAD commit:    626737a5791b Merge tag 'pinctrl-v6.10-2' of git://git.kern..
git tree:       upstream
console output: https://syzkaller.appspot.com/x/log.txt?x=117e90d6980000
kernel config:  https://syzkaller.appspot.com/x/.config?x=53ab35b556129242
dashboard link: https://syzkaller.appspot.com/bug?extid=f4b2fbba4d8c2e290380
compiler:       gcc (Debian 12.2.0-14) 12.2.0, GNU ld (GNU Binutils for Debian) 2.40
userspace arch: i386

Unfortunately, I don't have any reproducer for this issue yet.

Downloadable assets:
disk image (non-bootable): https://storage.googleapis.com/syzbot-assets/7bc7510fe41f/non_bootable_disk-626737a5.raw.xz
vmlinux: https://storage.googleapis.com/syzbot-assets/03802640516e/vmlinux-626737a5.xz
kernel image: https://storage.googleapis.com/syzbot-assets/09b1b299316b/bzImage-626737a5.xz

IMPORTANT: if you fix the issue, please add the following tag to the commit:
Reported-by: syzbot+f4b2fbba4d8c2e290380@syzkaller.appspotmail.com

bcachefs (loop3): flushing journal and stopping allocators complete, journal seq 14
bcachefs (loop3): shutdown complete, journal seq 15
bcachefs (loop3): marking filesystem clean
bcachefs (loop3): shutdown complete
Oops: general protection fault, probably for non-canonical address 0xdffffc0000000000: 0000 [#1] PREEMPT SMP KASAN NOPTI
KASAN: null-ptr-deref in range [0x0000000000000000-0x0000000000000007]
CPU: 0 PID: 6009 Comm: syz-executor.3 Not tainted 6.10.0-rc5-syzkaller-00012-g626737a5791b #0
Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.2-debian-1.16.2-1 04/01/2014
RIP: 0010:__hlist_del include/linux/list.h:988 [inline]
RIP: 0010:detach_timer kernel/time/timer.c:934 [inline]
RIP: 0010:detach_if_pending+0x14c/0x450 kernel/time/timer.c:953
Code: df 4c 89 ea 4c 8b 23 48 c1 ea 03 80 3c 02 00 0f 85 ea 02 00 00 48 b8 00 00 00 00 00 fc ff df 4c 8b 6b 08 4c 89 ea 48 c1 ea 03 <80> 3c 02 00 0f 85 be 02 00 00 4d 85 e4 4d 89 65 00 74 2a e8 9c 5a
RSP: 0018:ffffc90003f0fb78 EFLAGS: 00010046
RAX: dffffc0000000000 RBX: ffffe8ffad268390 RCX: ffffffff817b36ca
RDX: 0000000000000000 RSI: ffffffff817b34ee RDI: 0000000000000001
RBP: 0000000000000001 R08: 0000000000000001 R09: 0000000000000000
R10: 0000000000000001 R11: 0000000000000001 R12: 0000000000000000
R13: 0000000000000001 R14: 0000000000000001 R15: 000000000003d94c
FS:  0000000000000000(0000) GS:ffff88802c000000(0063) knlGS:00000000574c8400
CS:  0010 DS: 002b ES: 002b CR0: 0000000080050033
CR2: 00000000f735bfd0 CR3: 0000000046582000 CR4: 0000000000350ef0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
Call Trace:
 <TASK>
 __try_to_del_timer_sync+0xc5/0x170 kernel/time/timer.c:1509
 __timer_delete_sync+0xf4/0x1b0 kernel/time/timer.c:1665
 del_timer_sync include/linux/timer.h:185 [inline]
 cleanup_srcu_struct+0x124/0x520 kernel/rcu/srcutree.c:659
 bch2_fs_btree_iter_exit+0x479/0x640 fs/bcachefs/btree_iter.c:3411
 __bch2_fs_free fs/bcachefs/super.c:556 [inline]
 bch2_fs_release+0x117/0x870 fs/bcachefs/super.c:605
 kobject_cleanup lib/kobject.c:689 [inline]
 kobject_release lib/kobject.c:720 [inline]
 kref_put include/linux/kref.h:65 [inline]
 kobject_put+0x1fa/0x5b0 lib/kobject.c:737
 deactivate_locked_super+0xbe/0x1a0 fs/super.c:473
 deactivate_super+0xde/0x100 fs/super.c:506
 cleanup_mnt+0x222/0x450 fs/namespace.c:1267
 task_work_run+0x14e/0x250 kernel/task_work.c:180
 resume_user_mode_work include/linux/resume_user_mode.h:50 [inline]
 exit_to_user_mode_loop kernel/entry/common.c:114 [inline]
 exit_to_user_mode_prepare include/linux/entry-common.h:328 [inline]
 __syscall_exit_to_user_mode_work kernel/entry/common.c:207 [inline]
 syscall_exit_to_user_mode+0x278/0x2a0 kernel/entry/common.c:218
 __do_fast_syscall_32+0x80/0x120 arch/x86/entry/common.c:389
 do_fast_syscall_32+0x32/0x80 arch/x86/entry/common.c:411
 entry_SYSENTER_compat_after_hwframe+0x84/0x8e
RIP: 0023:0xf72df579
Code: b8 01 10 06 03 74 b4 01 10 07 03 74 b0 01 10 08 03 74 d8 01 00 00 00 00 00 00 00 00 00 00 00 00 00 51 52 55 89 e5 0f 34 cd 80 <5d> 5a 59 c3 90 90 90 90 8d b4 26 00 00 00 00 8d b4 26 00 00 00 00
RSP: 002b:00000000fff0a178 EFLAGS: 00000292 ORIG_RAX: 0000000000000034
RAX: 0000000000000000 RBX: 00000000fff0a220 RCX: 0000000000000009
RDX: 00000000f7435ff4 RSI: 00000000f7386361 RDI: 00000000fff0b2c4
RBP: 00000000fff0a220 R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000292 R12: 0000000000000000
R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000
 </TASK>
Modules linked in:
---[ end trace 0000000000000000 ]---
RIP: 0010:__hlist_del include/linux/list.h:988 [inline]
RIP: 0010:detach_timer kernel/time/timer.c:934 [inline]
RIP: 0010:detach_if_pending+0x14c/0x450 kernel/time/timer.c:953
Code: df 4c 89 ea 4c 8b 23 48 c1 ea 03 80 3c 02 00 0f 85 ea 02 00 00 48 b8 00 00 00 00 00 fc ff df 4c 8b 6b 08 4c 89 ea 48 c1 ea 03 <80> 3c 02 00 0f 85 be 02 00 00 4d 85 e4 4d 89 65 00 74 2a e8 9c 5a
RSP: 0018:ffffc90003f0fb78 EFLAGS: 00010046
RAX: dffffc0000000000 RBX: ffffe8ffad268390 RCX: ffffffff817b36ca
RDX: 0000000000000000 RSI: ffffffff817b34ee RDI: 0000000000000001
RBP: 0000000000000001 R08: 0000000000000001 R09: 0000000000000000
R10: 0000000000000001 R11: 0000000000000001 R12: 0000000000000000
R13: 0000000000000001 R14: 0000000000000001 R15: 000000000003d94c
FS:  0000000000000000(0000) GS:ffff88802c000000(0063) knlGS:00000000574c8400
CS:  0010 DS: 002b ES: 002b CR0: 0000000080050033
CR2: 00000000f735bfd0 CR3: 0000000046582000 CR4: 0000000000350ef0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
----------------
Code disassembly (best guess):
   0:	df 4c 89 ea          	fisttps -0x16(%rcx,%rcx,4)
   4:	4c 8b 23             	mov    (%rbx),%r12
   7:	48 c1 ea 03          	shr    $0x3,%rdx
   b:	80 3c 02 00          	cmpb   $0x0,(%rdx,%rax,1)
   f:	0f 85 ea 02 00 00    	jne    0x2ff
  15:	48 b8 00 00 00 00 00 	movabs $0xdffffc0000000000,%rax
  1c:	fc ff df
  1f:	4c 8b 6b 08          	mov    0x8(%rbx),%r13
  23:	4c 89 ea             	mov    %r13,%rdx
  26:	48 c1 ea 03          	shr    $0x3,%rdx
* 2a:	80 3c 02 00          	cmpb   $0x0,(%rdx,%rax,1) <-- trapping instruction
  2e:	0f 85 be 02 00 00    	jne    0x2f2
  34:	4d 85 e4             	test   %r12,%r12
  37:	4d 89 65 00          	mov    %r12,0x0(%r13)
  3b:	74 2a                	je     0x67
  3d:	e8                   	.byte 0xe8
  3e:	9c                   	pushf
  3f:	5a                   	pop    %rdx


---
This report is generated by a bot. It may contain errors.
See https://goo.gl/tpsmEJ for more information about syzbot.
syzbot engineers can be reached at syzkaller@googlegroups.com.

syzbot will keep track of this issue. See:
https://goo.gl/tpsmEJ#status for how to communicate with syzbot.

If the report is already addressed, let syzbot know by replying with:
#syz fix: exact-commit-title

If you want to overwrite report's subsystems, reply with:
#syz set subsystems: new-subsystem
(See the list of subsystem names on the web dashboard)

If the report is a duplicate of another one, reply with:
#syz dup: exact-subject-of-another-report

If you want to undo deduplication, reply with:
#syz undup
.

Date: Tue, 25 Jun 2024 00:12:26 +0000
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
Mime-Version: 1.0
Message-ID: <20240625001232.1476315-1-ziweixiao@google.com>
Subject: [PATCH net-next v3 0/5] gve: Add flow steering support
From: Ziwei Xiao <ziweixiao@google.com>
To: netdev@vger.kernel.org
Cc: jeroendb@google.com, pkaligineedi@google.com, shailend@google.com, 
	davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, 
	willemb@google.com, hramamurthy@google.com, ziweixiao@google.com, 
	rushilg@google.com, horms@kernel.org, linux-kernel@vger.kernel.org
Content-Type: text/plain; charset="UTF-8"
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257534 org.kernel.vger.netdev:354916
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.netdev
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

To support flow steering in GVE driver, there are two adminq changes
need to be made in advance.

The first one is adding adminq mutex lock, which is to allow the
incoming flow steering operations to be able to temporarily drop the
rtnl_lock to reduce the latency for registering flow rules among
several NICs at the same time. This could be achieved by the future
changes to reduce the drivers' dependencies on the rtnl lock for
particular ethtool ops.

The second one is to add the extended adminq command so that we can
support larger adminq command such as configure_flow_rule command. In
that patch, there is a new added function called
gve_adminq_execute_extended_cmd with the attribute of __maybe_unused.
That attribute will be removed in the third patch of this series where
it will use the previously unused function.

And the other three patches are needed for the actual flow steering
feature support in driver.

Jeroen de Borst (4):
  gve: Add adminq extended command
  gve: Add flow steering device option
  gve: Add flow steering adminq commands
  gve: Add flow steering ethtool support

Ziwei Xiao (1):
  gve: Add adminq mutex lock

 drivers/net/ethernet/google/gve/Makefile      |   2 +-
 drivers/net/ethernet/google/gve/gve.h         |  54 +++-
 drivers/net/ethernet/google/gve/gve_adminq.c  | 228 +++++++++++++-
 drivers/net/ethernet/google/gve/gve_adminq.h  | 103 ++++++
 drivers/net/ethernet/google/gve/gve_ethtool.c |  72 ++++-
 .../net/ethernet/google/gve/gve_flow_rule.c   | 298 ++++++++++++++++++
 drivers/net/ethernet/google/gve/gve_main.c    |  83 ++++-
 7 files changed, 817 insertions(+), 23 deletions(-)
 create mode 100644 drivers/net/ethernet/google/gve/gve_flow_rule.c

-- 
2.45.2.741.gdbec12cfda-goog

.

Return-Path: <linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org>
From: Jesse Taube <jesse@rivosinc.com>
To: linux-riscv@lists.infradead.org
Cc: Jonathan Corbet <corbet@lwn.net>,
	Paul Walmsley <paul.walmsley@sifive.com>,
	Palmer Dabbelt <palmer@dabbelt.com>,
	Albert Ou <aou@eecs.berkeley.edu>,
	Conor Dooley <conor@kernel.org>,
	Rob Herring <robh@kernel.org>,
	Krzysztof Kozlowski <krzk+dt@kernel.org>,
	=?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= <cleger@rivosinc.com>,
	Evan Green <evan@rivosinc.com>,
	Andrew Jones <ajones@ventanamicro.com>,
	Jesse Taube <jesse@rivosinc.com>,
	Charlie Jenkins <charlie@rivosinc.com>,
	Xiao Wang <xiao.w.wang@intel.com>,
	Andy Chiu <andy.chiu@sifive.com>,
	Eric Biggers <ebiggers@google.com>,
	Greentime Hu <greentime.hu@sifive.com>,
	=?UTF-8?q?Bj=C3=B6rn=20T=C3=B6pel?= <bjorn@rivosinc.com>,
	Heiko Stuebner <heiko@sntech.de>,
	Costa Shulyupin <costa.shul@redhat.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Baoquan He <bhe@redhat.com>,
	Anup Patel <apatel@ventanamicro.com>,
	Zong Li <zong.li@sifive.com>,
	Sami Tolvanen <samitolvanen@google.com>,
	Ben Dooks <ben.dooks@codethink.co.uk>,
	Alexandre Ghiti <alexghiti@rivosinc.com>,
	"Gustavo A. R. Silva" <gustavoars@kernel.org>,
	Erick Archer <erick.archer@gmx.com>,
	Joel Granados <j.granados@samsung.com>,
	linux-doc@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	devicetree@vger.kernel.org
Subject: [PATCH v3 0/8] RISC-V: Detect and report speed of unaligned vector accesses
Date: Mon, 24 Jun 2024 20:49:53 -0400
Message-ID: <20240625005001.37901-1-jesse@rivosinc.com>
MIME-Version: 1.0
X-BeenThere: linux-riscv@lists.infradead.org
X-Mailman-Version: 2.1.34
List-Id: <linux-riscv.lists.infradead.org>
List-Unsubscribe: <http://lists.infradead.org/mailman/options/linux-riscv>,
 <mailto:linux-riscv-request@lists.infradead.org?subject=unsubscribe>
List-Archive: <http://lists.infradead.org/pipermail/linux-riscv/>
List-Post: <mailto:linux-riscv@lists.infradead.org>
List-Help: <mailto:linux-riscv-request@lists.infradead.org?subject=help>
List-Subscribe: <http://lists.infradead.org/mailman/listinfo/linux-riscv>,
 <mailto:linux-riscv-request@lists.infradead.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: "linux-riscv" <linux-riscv-bounces@lists.infradead.org>
Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org
Xref: photonic.trudheim.com org.infradead.lists.linux-riscv:78955 org.kernel.vger.linux-kernel:1257543
Newsgroups: org.infradead.lists.linux-riscv,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-doc,org.kernel.vger.linux-kernel
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Adds support for detecting and reporting the speed of unaligned vector
accesses on RISC-V CPUs. Adds vec_misaligned_speed key to the hwprobe
adds Zicclsm to cpufeature and fixes the check for scalar unaligned
emulated all CPUs. The vec_misaligned_speed key keeps the same format
as the scalar unaligned access speed key.

This set does not emulate unaligned vector accesses on CPUs that do not
support them. Only reports if userspace can run them and speed of
unaligned vector accesses if supported.

If Zicclsm is present, the kernel will set both scalar and vector unaligned access speed to FAST.

This patch requires the following patche to be applied first:
RISC-V: fix vector insn load/store width mask
https://lore.kernel.org/all/20240606182800.415831-1-jesse@rivosinc.com/

Jesse Taube (8):
  RISC-V: Add Zicclsm to cpufeature and hwprobe
  dt-bindings: riscv: Add Zicclsm ISA extension description.
  RISC-V: Check scalar unaligned access on all CPUs
  RISC-V: Check Zicclsm to set unaligned access speed
  RISC-V: Replace RISCV_MISALIGNED with RISCV_SCALAR_MISALIGNED
  RISC-V: Detect unaligned vector accesses supported
  RISC-V: Report vector unaligned access speed hwprobe
  RISC-V: hwprobe: Document unaligned vector perf key

 Documentation/arch/riscv/hwprobe.rst          |  19 +++
 .../devicetree/bindings/riscv/extensions.yaml |   7 +
 arch/riscv/Kconfig                            |  57 ++++++-
 arch/riscv/include/asm/cpufeature.h           |   7 +-
 arch/riscv/include/asm/entry-common.h         |  11 --
 arch/riscv/include/asm/hwcap.h                |   1 +
 arch/riscv/include/asm/hwprobe.h              |   2 +-
 arch/riscv/include/asm/vector.h               |   1 +
 arch/riscv/include/uapi/asm/hwprobe.h         |   6 +
 arch/riscv/kernel/Makefile                    |   3 +-
 arch/riscv/kernel/copy-unaligned.h            |   5 +
 arch/riscv/kernel/cpufeature.c                |   1 +
 arch/riscv/kernel/fpu.S                       |   4 +-
 arch/riscv/kernel/sys_hwprobe.c               |  42 +++++
 arch/riscv/kernel/traps_misaligned.c          | 143 +++++++++++++---
 arch/riscv/kernel/unaligned_access_speed.c    | 159 +++++++++++++++++-
 arch/riscv/kernel/vec-copy-unaligned.S        |  58 +++++++
 arch/riscv/kernel/vector.c                    |   2 +-
 18 files changed, 480 insertions(+), 48 deletions(-)
 create mode 100644 arch/riscv/kernel/vec-copy-unaligned.S

-- 
2.45.2


_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
.

Date: Tue, 25 Jun 2024 00:46:07 +0000
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
Mime-Version: 1.0
Message-ID: <20240625004607.3223757-1-jthies@google.com>
Subject: [PATCH v1] usb: typec: ucsi: Only set number of plug altmodes after registration
From: Jameson Thies <jthies@google.com>
To: heikki.krogerus@linux.intel.com, linux-usb@vger.kernel.org
Cc: jthies@google.com, jonathanh@nvidia.com, bleung@google.com, 
	abhishekpandit@chromium.org, andersson@kernel.org, 
	dmitry.baryshkov@linaro.org, fabrice.gasnier@foss.st.com, 
	gregkh@linuxfoundation.org, hdegoede@redhat.com, neil.armstrong@linaro.org, 
	rajaram.regupathy@intel.com, saranya.gopal@intel.com, 
	linux-kernel@vger.kernel.org
Content-Type: text/plain; charset="UTF-8"
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257552
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-usb
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Move the setting of the plug's number of alternate modes into the
same condition as the plug's registration to prevent dereferencing the
connector's plug pointer while it is null.

Fixes: c313a44ac9cd ("usb: typec: ucsi: Always set number of alternate modes")
Suggested-by: Jon Hunter <jonathanh@nvidia.com>
Signed-off-by: Jameson Thies <jthies@google.com>
---
 drivers/usb/typec/ucsi/ucsi.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/usb/typec/ucsi/ucsi.c b/drivers/usb/typec/ucsi/ucsi.c
index 76c48d873b2a..77e46bf4a098 100644
--- a/drivers/usb/typec/ucsi/ucsi.c
+++ b/drivers/usb/typec/ucsi/ucsi.c
@@ -1180,13 +1180,13 @@ static int ucsi_check_cable(struct ucsi_connector *con)
 		ret = ucsi_register_altmodes(con, UCSI_RECIPIENT_SOP_P);
 		if (ret < 0)
 			return ret;
-	}
 
-	if (con->plug_altmode[0]) {
-		num_plug_am = ucsi_get_num_altmode(con->plug_altmode);
-		typec_plug_set_num_altmodes(con->plug, num_plug_am);
-	} else {
-		typec_plug_set_num_altmodes(con->plug, 0);
+		if (con->plug_altmode[0]) {
+			num_plug_am = ucsi_get_num_altmode(con->plug_altmode);
+			typec_plug_set_num_altmodes(con->plug, num_plug_am);
+		} else {
+			typec_plug_set_num_altmodes(con->plug, 0);
+		}
 	}
 
 	return 0;

base-commit: 819984a0dd3606b7c46fe156cd56a0dc0d604788
-- 
2.45.2.741.gdbec12cfda-goog

.

X-Envelope-To: akpm@linux-foundation.org
X-Envelope-To: hannes@cmpxchg.org
X-Envelope-To: mhocko@kernel.org
X-Envelope-To: shakeel.butt@linux.dev
X-Envelope-To: muchun.song@linux.dev
X-Envelope-To: linux-kernel@vger.kernel.org
X-Envelope-To: cgroups@vger.kernel.org
X-Envelope-To: linux-mm@kvack.org
X-Envelope-To: roman.gushchin@linux.dev
X-Envelope-To: willy@infradead.org
X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers.
From: Roman Gushchin <roman.gushchin@linux.dev>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Johannes Weiner <hannes@cmpxchg.org>,
	Michal Hocko <mhocko@kernel.org>,
	Shakeel Butt <shakeel.butt@linux.dev>,
	Muchun Song <muchun.song@linux.dev>,
	linux-kernel@vger.kernel.org,
	cgroups@vger.kernel.org,
	linux-mm@kvack.org,
	Roman Gushchin <roman.gushchin@linux.dev>,
	Matthew Wilcox <willy@infradead.org>
Subject: [PATCH v2 00/14] mm: memcg: separate legacy cgroup v1 code and put under config option
Date: Mon, 24 Jun 2024 17:58:52 -0700
Message-ID: <20240625005906.106920-1-roman.gushchin@linux.dev>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-Migadu-Flow: FLOW_OUT
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257558 org.kvack.linux-mm:201212
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.cgroups,org.kvack.linux-mm
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Cgroups v2 have been around for a while and many users have fully adopted them,
so they never use cgroups v1 features and functionality. Yet they have to "pay"
for the cgroup v1 support anyway:
1) the kernel binary contains an unused cgroup v1 code,
2) some code paths have additional checks which are not needed,
3) some common structures like task_struct and mem_cgroup contain unused
   cgroup v1-specific members.

Cgroup v1's memory controller has a number of features that are not supported
by cgroup v2 and their implementation is pretty much self contained.
Most notably, these features are: soft limit reclaim, oom handling in userspace,
complicated event notification system, charge migration. Cgroup v1-specific code
in memcontrol.c is close to 4k lines in size and it's intervened with generic
and cgroup v2-specific code. It's a burden on developers and maintainers.

This patchset aims to solve these problems by:
1) moving cgroup v1-specific memcg code to the new mm/memcontrol-v1.c file,
2) putting definitions shared by memcontrol.c and memcontrol-v1.c into the
   mm/memcontrol-v1.h header,
3) introducing the CONFIG_MEMCG_V1 config option, turned off by default,
4) making memcontrol-v1.c to compile only if CONFIG_MEMCG_V1 is set.

If CONFIG_MEMCG_V1 is not set, cgroup v1 memory controller is still available
for mounting, however no memory-specific control knobs are present.

This patchset is based against mm-unstable tree (b610f75d19a34),
however a version based on mm-stable can be found here:
  https://github.com/rgushchin/linux/tree/memcontrol_v1.1-stable .

v2:
  - minor compilation fix
  - #else/#endif comments fix (Lance Yang)

v1:
  - switched to CONFIG_MEMCG_V1 being off by default based on LSFMMBPF
    discussion [1]
  - switched to memcg1_ prefix (Johannes)
  - many minor fixes
  - dropped patches which put struct memcg members under CONFIG_MEMCG_V1
    (will post as a separate patchset)

rfc:
  https://lwn.net/Articles/973082/

[1]: https://lwn.net/Articles/974575/

MAINTAINERS                |    2 +
include/linux/memcontrol.h |  156 ++++---
init/Kconfig               |    9 +
mm/Makefile                |    2 +
mm/memcontrol-v1.c         | 2933 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
mm/memcontrol-v1.h         |  132 ++++++
mm/memcontrol.c            | 4169 +++++++++++++++++++++++++++---------------------------------------------------------------------------------------------------------------------------------------------------
mm/vmscan.c                |   10 +-
8 files changed, 3794 insertions(+), 3619 deletions(-)

Suggested-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Signed-off-by: Roman Gushchin <roman.gushchin@linux.dev>


Roman Gushchin (14):
  mm: memcg: introduce memcontrol-v1.c
  mm: memcg: move soft limit reclaim code to memcontrol-v1.c
  mm: memcg: rename soft limit reclaim-related functions
  mm: memcg: move charge migration code to memcontrol-v1.c
  mm: memcg: rename charge move-related functions
  mm: memcg: move legacy memcg event code into memcontrol-v1.c
  mm: memcg: rename memcg_check_events()
  mm: memcg: move cgroup v1 oom handling code into memcontrol-v1.c
  mm: memcg: rename memcg_oom_recover()
  mm: memcg: move cgroup v1 interface files to memcontrol-v1.c
  mm: memcg: make memcg1_update_tree() static
  mm: memcg: group cgroup v1 memcg related declarations
  mm: memcg: put cgroup v1-related members of task_struct under config
    option
  MAINTAINERS: add mm/memcontrol-v1.c/h to the list of maintained files

 MAINTAINERS                |    2 +
 include/linux/memcontrol.h |  156 +-
 init/Kconfig               |    9 +
 mm/Makefile                |    2 +
 mm/memcontrol-v1.c         | 2933 +++++++++++++++++++++++++
 mm/memcontrol-v1.h         |  132 ++
 mm/memcontrol.c            | 4141 ++++++------------------------------
 mm/vmscan.c                |   10 +-
 8 files changed, 3780 insertions(+), 3605 deletions(-)
 create mode 100644 mm/memcontrol-v1.c
 create mode 100644 mm/memcontrol-v1.h

-- 
2.45.2

.

From: Shiji Yang <yangshiji66@outlook.com>
To: linux-gpio@vger.kernel.org
Cc: Alban Bedel <albeu@free.fr>,
	Linus Walleij <linus.walleij@linaro.org>,
	Bartosz Golaszewski <brgl@bgdev.pl>,
	linux-kernel@vger.kernel.org,
	Shiji Yang <yangshiji66@outlook.com>
Subject: [PATCH] gpio: ath79: convert to dynamic GPIO base allocation
Date: Tue, 25 Jun 2024 09:06:02 +0800
Message-ID: <TYCP286MB08958A751BD29BB5B04485D9BCD52@TYCP286MB0895.JPNP286.PROD.OUTLOOK.COM>
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257576
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-gpio
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

ath79 target has already been converted to device tree based
platform. Using dynamic GPIO numberspace base to suppress the
warning:

gpio gpiochip0: Static allocation of GPIO base is deprecated, use dynamic allocation.

Tested on Atheros AR7241 and AR9344.

Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
---
 drivers/gpio/gpio-ath79.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/gpio/gpio-ath79.c b/drivers/gpio/gpio-ath79.c
index f0c0c0f77eb0..d986424a661e 100644
--- a/drivers/gpio/gpio-ath79.c
+++ b/drivers/gpio/gpio-ath79.c
@@ -273,8 +273,8 @@ static int ath79_gpio_probe(struct platform_device *pdev)
 		dev_err(dev, "bgpio_init failed\n");
 		return err;
 	}
-	/* Use base 0 to stay compatible with legacy platforms */
-	ctrl->gc.base = 0;
+	/* Dynamic allocation */
+	ctrl->gc.base = -1;
 
 	/* Optional interrupt setup */
 	if (!np || of_property_read_bool(np, "interrupt-controller")) {
-- 
2.45.1

.

References: <20240430183730.561960-1-ankur.a.arora@oracle.com>
 <20240430183730.561960-9-ankur.a.arora@oracle.com>
 <20240619121711.jid3enfzak7vykyn@bogus> <871q4pc0f9.fsf@oracle.com>
 <ZnlQg9kcAWG443re@bogus>
From: Ankur Arora <ankur.a.arora@oracle.com>
To: Sudeep Holla <sudeep.holla@arm.com>
Cc: Ankur Arora <ankur.a.arora@oracle.com>, linux-pm@vger.kernel.org,
        kvm@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
        linux-kernel@vger.kernel.org, catalin.marinas@arm.com, will@kernel.org,
        tglx@linutronix.de, mingo@redhat.com, bp@alien8.de, x86@kernel.org,
        hpa@zytor.com, pbonzini@redhat.com, wanpengli@tencent.com,
        vkuznets@redhat.com, rafael@kernel.org, daniel.lezcano@linaro.org,
        peterz@infradead.org, arnd@arndb.de, lenb@kernel.org,
        mark.rutland@arm.com, harisokn@amazon.com, joao.m.martins@oracle.com,
        boris.ostrovsky@oracle.com, konrad.wilk@oracle.com
Subject: Re: [PATCH 8/9] arm64: support cpuidle-haltpoll
In-reply-to: <ZnlQg9kcAWG443re@bogus>
Date: Mon, 24 Jun 2024 18:17:19 -0700
Message-ID: <87bk3pakio.fsf@oracle.com>
Content-Type: text/plain
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257578
Newsgroups: org.kernel.vger.linux-kernel,org.infradead.lists.linux-arm-kernel,org.kernel.vger.kvm,org.kernel.vger.linux-pm
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail


Sudeep Holla <sudeep.holla@arm.com> writes:

> On Fri, Jun 21, 2024 at 04:59:22PM -0700, Ankur Arora wrote:
>>
>> Sudeep Holla <sudeep.holla@arm.com> writes:
>>
>> > On Tue, Apr 30, 2024 at 11:37:29AM -0700, Ankur Arora wrote:
>> >> Add architectural support for the cpuidle-haltpoll driver by defining
>> >> arch_haltpoll_*(). Also select ARCH_HAS_OPTIMIZED_POLL since we have
>> >> an optimized polling mechanism via smp_cond_load*().
>> >>
>> >> Add the configuration option, ARCH_CPUIDLE_HALTPOLL to allow
>> >> cpuidle-haltpoll to be selected.
>> >>
>> >> Note that we limit cpuidle-haltpoll support to when the event-stream is
>> >> available. This is necessary because polling via smp_cond_load_relaxed()
>> >> uses WFE to wait for a store which might not happen for an prolonged
>> >> period of time. So, ensure the event-stream is around to provide a
>> >> terminating condition.
>> >>
>> >
>> > Currently the event stream is configured 10kHz(1 signal per 100uS IIRC).
>> > But the information in the cpuidle states for exit latency and residency
>> > is set to 0(as per drivers/cpuidle/poll_state.c). Will this not cause any
>> > performance issues ?
>>
>> No I don't think there's any performance issue.
>>
>
> Thanks for the confirmation, that was my assumption as well.
>
>> When the core is waiting in WFE for &thread_info->flags to
>> change, and set_nr_if_polling() happens, the CPU will come out
>> of the wait quickly.
>> So, the exit latency, residency can be reasonably set to 0.
>>
>
> Sure
>
>> If, however, there is no store to &thread_info->flags, then the event
>> stream is what would cause us to come out of the WFE and check if
>> the poll timeout has been exceeded.
>> In that case, there was no work to be done, so there was nothing
>> to wake up from.
>>
>
> This is exactly what I was referring when I asked about performance, but
> it looks like it is not a concern for the reason specified about.
>
>> So, in either circumstance there's no performance loss.
>>
>> However, when we are polling under the haltpoll governor, this might
>> mean that we spend more time polling than determined based on the
>> guest_halt_poll_ns. But, that would only happen in the last polling
>> iteration.
>>
>> So, I'd say, at worst no performance loss. But, we would sometimes
>> poll for longer than necessary before exiting to the host.
>>
>
> Does it make sense to add some comment that implies briefly what we
> have discussed here ? Mainly why 0 exit and target residency values
> are fine and how worst case WFE wakeup doesn't impact the performance.

Yeah let me thresh out the commit message for this patch a bit more.

Thanks for the review!

--
ankur
.

From: Shiji Yang <yangshiji66@outlook.com>
To: linux-gpio@vger.kernel.org
Cc: Linus Walleij <linus.walleij@linaro.org>,
	Bartosz Golaszewski <brgl@bgdev.pl>,
	Asmaa Mnebhi <asmaa@nvidia.com>,
	Andy Shevchenko <andy.shevchenko@gmail.com>,
	linux-kernel@vger.kernel.org,
	Shiji Yang <yangshiji66@outlook.com>,
	Mark Mentovai <mark@mentovai.com>,
	Jonas Gorski <jonas.gorski@gmail.com>,
	=?UTF-8?q?L=C3=B3r=C3=A1nd=20Horv=C3=A1th?= <lorand.horvath82@gmail.com>
Subject: [PATCH] gpio: mmio: do not calculate bgpio_bits via "ngpios"
Date: Tue, 25 Jun 2024 09:19:49 +0800
Message-ID: <TYCP286MB089577B47D70F0AB25ABA6F5BCD52@TYCP286MB0895.JPNP286.PROD.OUTLOOK.COM>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257580
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-gpio
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

bgpio_bits must be aligned with the data bus width. For example, on a
32 bit big endian system and we only have 16 GPIOs. If we only assume
bgpio_bits=16 we can never control the GPIO because the base address
is the lowest address.

low address                          high address
-------------------------------------------------
|   byte3   |   byte2   |   byte1   |   byte0   |
-------------------------------------------------
|    NaN    |    NaN    |  gpio8-15 |  gpio0-7  |
-------------------------------------------------

Fixes: 55b2395e4e92 ("gpio: mmio: handle "ngpios" properly in bgpio_init()")
Fixes: https://github.com/openwrt/openwrt/issues/15739
Reported-by: Mark Mentovai <mark@mentovai.com>
Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
Suggested-By: Mark Mentovai <mark@mentovai.com>
Reviewed-by: Jonas Gorski <jonas.gorski@gmail.com>
Tested-by: LÃ³rÃ¡nd HorvÃ¡th <lorand.horvath82@gmail.com>
---
 drivers/gpio/gpio-mmio.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/drivers/gpio/gpio-mmio.c b/drivers/gpio/gpio-mmio.c
index 71e1af7c2184..d89e78f0ead3 100644
--- a/drivers/gpio/gpio-mmio.c
+++ b/drivers/gpio/gpio-mmio.c
@@ -619,8 +619,6 @@ int bgpio_init(struct gpio_chip *gc, struct device *dev,
 	ret = gpiochip_get_ngpios(gc, dev);
 	if (ret)
 		gc->ngpio = gc->bgpio_bits;
-	else
-		gc->bgpio_bits = roundup_pow_of_two(round_up(gc->ngpio, 8));
 
 	ret = bgpio_setup_io(gc, dat, set, clr, flags);
 	if (ret)
-- 
2.45.1

.

From: Jeff Johnson <quic_jjohnson@quicinc.com>
Date: Mon, 24 Jun 2024 18:24:07 -0700
Subject: [PATCH v2] drm/ttm/tests: add missing MODULE_DESCRIPTION() macros
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
Message-ID: <20240624-md-drivers-gpu-drm-ttm-tests-v2-1-76bb765e19c9@quicinc.com>
To: Christian Koenig <christian.koenig@amd.com>,
        Huang Rui
	<ray.huang@amd.com>,
        Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
        Maxime Ripard <mripard@kernel.org>,
        Thomas Zimmermann <tzimmermann@suse.de>,
        David Airlie <airlied@gmail.com>, Daniel Vetter <daniel@ffwll.ch>
CC: <dri-devel@lists.freedesktop.org>, <linux-kernel@vger.kernel.org>,
        <kernel-janitors@vger.kernel.org>,
        Jeff Johnson <quic_jjohnson@quicinc.com>
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257582
Newsgroups: org.kernel.vger.linux-kernel,org.freedesktop.lists.dri-devel,org.kernel.vger.kernel-janitors
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

make allmodconfig && make W=1 C=1 reports:
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/gpu/drm/ttm/tests/ttm_device_test.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/gpu/drm/ttm/tests/ttm_pool_test.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/gpu/drm/ttm/tests/ttm_resource_test.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/gpu/drm/ttm/tests/ttm_tt_test.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/gpu/drm/ttm/tests/ttm_bo_test.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/gpu/drm/ttm/tests/ttm_bo_validate_test.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/gpu/drm/ttm/tests/ttm_mock_manager.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/gpu/drm/ttm/tests/ttm_kunit_helpers.o

Add the missing invocations of the MODULE_DESCRIPTION() macro.

Signed-off-by: Jeff Johnson <quic_jjohnson@quicinc.com>
---
Changes in v2:
- Rebased on top of linux-next/master to resolve conflict with commit
  "drm/ttm/tests: Correct modules' licenses" as well as add descriptions
  for two new modules recently added.
- Link to v1: https://lore.kernel.org/r/20240609-md-drivers-gpu-drm-ttm-tests-v1-1-d94123d95b4c@quicinc.com
---
 drivers/gpu/drm/ttm/tests/ttm_bo_test.c          | 1 +
 drivers/gpu/drm/ttm/tests/ttm_bo_validate_test.c | 1 +
 drivers/gpu/drm/ttm/tests/ttm_device_test.c      | 1 +
 drivers/gpu/drm/ttm/tests/ttm_kunit_helpers.c    | 1 +
 drivers/gpu/drm/ttm/tests/ttm_mock_manager.c     | 1 +
 drivers/gpu/drm/ttm/tests/ttm_pool_test.c        | 1 +
 drivers/gpu/drm/ttm/tests/ttm_resource_test.c    | 1 +
 drivers/gpu/drm/ttm/tests/ttm_tt_test.c          | 1 +
 8 files changed, 8 insertions(+)

diff --git a/drivers/gpu/drm/ttm/tests/ttm_bo_test.c b/drivers/gpu/drm/ttm/tests/ttm_bo_test.c
index 407c31b21872..d1b32303d051 100644
--- a/drivers/gpu/drm/ttm/tests/ttm_bo_test.c
+++ b/drivers/gpu/drm/ttm/tests/ttm_bo_test.c
@@ -633,4 +633,5 @@ static struct kunit_suite ttm_bo_test_suite = {
 
 kunit_test_suites(&ttm_bo_test_suite);
 
+MODULE_DESCRIPTION("KUnit tests for ttm_bo APIs");
 MODULE_LICENSE("GPL and additional rights");
diff --git a/drivers/gpu/drm/ttm/tests/ttm_bo_validate_test.c b/drivers/gpu/drm/ttm/tests/ttm_bo_validate_test.c
index bc8281c03420..1adf18481ea0 100644
--- a/drivers/gpu/drm/ttm/tests/ttm_bo_validate_test.c
+++ b/drivers/gpu/drm/ttm/tests/ttm_bo_validate_test.c
@@ -1221,4 +1221,5 @@ static struct kunit_suite ttm_bo_validate_test_suite = {
 
 kunit_test_suites(&ttm_bo_validate_test_suite);
 
+MODULE_DESCRIPTION("KUnit tests for ttm_bo APIs");
 MODULE_LICENSE("GPL and additional rights");
diff --git a/drivers/gpu/drm/ttm/tests/ttm_device_test.c b/drivers/gpu/drm/ttm/tests/ttm_device_test.c
index 0f235a834ede..1621903818e5 100644
--- a/drivers/gpu/drm/ttm/tests/ttm_device_test.c
+++ b/drivers/gpu/drm/ttm/tests/ttm_device_test.c
@@ -209,4 +209,5 @@ static struct kunit_suite ttm_device_test_suite = {
 
 kunit_test_suites(&ttm_device_test_suite);
 
+MODULE_DESCRIPTION("KUnit tests for ttm_device APIs");
 MODULE_LICENSE("GPL and additional rights");
diff --git a/drivers/gpu/drm/ttm/tests/ttm_kunit_helpers.c b/drivers/gpu/drm/ttm/tests/ttm_kunit_helpers.c
index 70f40814b26a..b91c13f46225 100644
--- a/drivers/gpu/drm/ttm/tests/ttm_kunit_helpers.c
+++ b/drivers/gpu/drm/ttm/tests/ttm_kunit_helpers.c
@@ -301,4 +301,5 @@ void ttm_test_devices_fini(struct kunit *test)
 }
 EXPORT_SYMBOL_GPL(ttm_test_devices_fini);
 
+MODULE_DESCRIPTION("TTM KUnit test helper functions");
 MODULE_LICENSE("GPL and additional rights");
diff --git a/drivers/gpu/drm/ttm/tests/ttm_mock_manager.c b/drivers/gpu/drm/ttm/tests/ttm_mock_manager.c
index 7f34fecd3fef..f6d1c8a2845d 100644
--- a/drivers/gpu/drm/ttm/tests/ttm_mock_manager.c
+++ b/drivers/gpu/drm/ttm/tests/ttm_mock_manager.c
@@ -230,4 +230,5 @@ void ttm_bad_manager_fini(struct ttm_device *bdev, uint32_t mem_type)
 }
 EXPORT_SYMBOL_GPL(ttm_bad_manager_fini);
 
+MODULE_DESCRIPTION("KUnit tests for ttm with mock resource managers");
 MODULE_LICENSE("GPL and additional rights");
diff --git a/drivers/gpu/drm/ttm/tests/ttm_pool_test.c b/drivers/gpu/drm/ttm/tests/ttm_pool_test.c
index 5d4dc5b1c6d7..8ade53371f72 100644
--- a/drivers/gpu/drm/ttm/tests/ttm_pool_test.c
+++ b/drivers/gpu/drm/ttm/tests/ttm_pool_test.c
@@ -433,4 +433,5 @@ static struct kunit_suite ttm_pool_test_suite = {
 
 kunit_test_suites(&ttm_pool_test_suite);
 
+MODULE_DESCRIPTION("KUnit tests for ttm_pool APIs");
 MODULE_LICENSE("GPL and additional rights");
diff --git a/drivers/gpu/drm/ttm/tests/ttm_resource_test.c b/drivers/gpu/drm/ttm/tests/ttm_resource_test.c
index 77be0942ab62..9c2f13e53162 100644
--- a/drivers/gpu/drm/ttm/tests/ttm_resource_test.c
+++ b/drivers/gpu/drm/ttm/tests/ttm_resource_test.c
@@ -332,4 +332,5 @@ static struct kunit_suite ttm_resource_test_suite = {
 
 kunit_test_suites(&ttm_resource_test_suite);
 
+MODULE_DESCRIPTION("KUnit tests for ttm_resource and ttm_sys_man APIs");
 MODULE_LICENSE("GPL and additional rights");
diff --git a/drivers/gpu/drm/ttm/tests/ttm_tt_test.c b/drivers/gpu/drm/ttm/tests/ttm_tt_test.c
index a8c76dbd6913..61ec6f580b62 100644
--- a/drivers/gpu/drm/ttm/tests/ttm_tt_test.c
+++ b/drivers/gpu/drm/ttm/tests/ttm_tt_test.c
@@ -398,4 +398,5 @@ static struct kunit_suite ttm_tt_test_suite = {
 
 kunit_test_suites(&ttm_tt_test_suite);
 
+MODULE_DESCRIPTION("KUnit tests for ttm_tt APIs");
 MODULE_LICENSE("GPL and additional rights");

---
base-commit: 62c97045b8f720c2eac807a5f38e26c9ed512371
change-id: 20240609-md-drivers-gpu-drm-ttm-tests-f7b63f46eb3c

.

From: yskelg@gmail.com
To: Harald Freudenberger <freude@linux.ibm.com>,
	Heiko Carstens <hca@linux.ibm.com>,
	Vasily Gorbik <gor@linux.ibm.com>,
	Alexander Gordeev <agordeev@linux.ibm.com>,
	Christian Borntraeger <borntraeger@linux.ibm.com>,
	Sven Schnelle <svens@linux.ibm.com>,
	Markus Elfring <Markus.Elfring@web.de>
Cc: MichelleJin <shjy180909@gmail.com>,
	linux-s390@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	Yunseong Kim <yskelg@gmail.com>
Subject: [PATCH v2] s390/raw3270: Handle memory allocation failures in raw3270_setup_console()
Date: Tue, 25 Jun 2024 10:32:26 +0900
Message-ID: <20240625013225.17076-2-yskelg@gmail.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257585
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-s390
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

From: Yunseong Kim <yskelg@gmail.com>

A null pointer is stored in a local variable after a call of the function
"kzalloc" failed. This pointer was passed to a subsequent call of the
function "raw3270_setup_device" where an undesirable dereference will be
performed then. Thus add corresponding return value checks.
The allocated each memory areas are immediately overwritten by the called
function zero-initialisation be omitted by calling the "kmalloc" instead.
After "ccw_device_enable_console" succeeds, set the bit raw3270 flag to
RAW3270_FLAGS_CONSOLE.

Fixes: 33403dcfcdfd ("[S390] 3270 console: convert from bootmem to slab")
Cc: linux-s390@vger.kernel.org
Signed-off-by: Yunseong Kim <yskelg@gmail.com>
---
 drivers/s390/char/raw3270.c | 20 +++++++++++++++-----
 1 file changed, 15 insertions(+), 5 deletions(-)

diff --git a/drivers/s390/char/raw3270.c b/drivers/s390/char/raw3270.c
index c57694be9bd3..4f3f98bcbc83 100644
--- a/drivers/s390/char/raw3270.c
+++ b/drivers/s390/char/raw3270.c
@@ -811,18 +811,28 @@ struct raw3270 __init *raw3270_setup_console(void)
 	if (IS_ERR(cdev))
 		return ERR_CAST(cdev);
 
-	rp = kzalloc(sizeof(*rp), GFP_KERNEL | GFP_DMA);
-	ascebc = kzalloc(256, GFP_KERNEL);
+	rp = kmalloc(sizeof(*rp), GFP_KERNEL | GFP_DMA);
+	if (!rp)
+		return ERR_PTR(-ENOMEM);
+	ascebc = kmalloc(256, GFP_KERNEL);
+	if (!ascebc) {
+		kfree(rp);
+		return ERR_PTR(-ENOMEM);
+	}
 	rc = raw3270_setup_device(cdev, rp, ascebc);
-	if (rc)
+	if (rc) {
+		kfree(ascebc);
+		kfree(rp);
 		return ERR_PTR(rc);
-	set_bit(RAW3270_FLAGS_CONSOLE, &rp->flags);
-
+	}
 	rc = ccw_device_enable_console(cdev);
 	if (rc) {
 		ccw_device_destroy_console(cdev);
+		kfree(ascebc);
+		kfree(rp);
 		return ERR_PTR(rc);
 	}
+	set_bit(RAW3270_FLAGS_CONSOLE, &rp->flags);
 
 	spin_lock_irqsave(get_ccwdev_lock(rp->cdev), flags);
 	do {
-- 
2.45.2

.

From: Nianyao Tang <tangnianyao@huawei.com>
To: <maz@kernel.org>, <tglx@linutronix.de>,
	<linux-arm-kernel@lists.infradead.org>, <linux-kernel@vger.kernel.org>
CC: <guoyang2@huawei.com>, <wangwudi@hisilicon.com>, <tangnianyao@huawei.com>
Subject: [RESEND PATCH] irqchip/gic-v4.1: Use the ITS of the NUMA node where current  cpu is located
Date: Tue, 25 Jun 2024 01:40:19 +0000
Message-ID: <20240625014019.3914240-1-tangnianyao@huawei.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257588
Newsgroups: org.kernel.vger.linux-kernel,org.infradead.lists.linux-arm-kernel
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

When GICv4.1 enabled, guest sending IPI use the last ITS reported.
On multi-NUMA environment with more than one ITS, it makes IPI performance
various from VM to VM, depending on which NUMA the VM is deployed on.
We can use closer ITS instead of the last ITS reported.

Modify find_4_1_its to find the ITS of the NUMA node where current
cpu is located and save it with per cpu variable.

(There's format issues with the previous patch, resend it)

Signed-off-by: Nianyao Tang <tangnianyao@huawei.com>
---
 drivers/irqchip/irq-gic-v3-its.c | 27 ++++++++++++++++++---------
 1 file changed, 18 insertions(+), 9 deletions(-)

diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c
index 3c755d5dad6e..d35b42f3b2af 100644
--- a/drivers/irqchip/irq-gic-v3-its.c
+++ b/drivers/irqchip/irq-gic-v3-its.c
@@ -193,6 +193,8 @@ static DEFINE_RAW_SPINLOCK(vmovp_lock);
 
 static DEFINE_IDA(its_vpeid_ida);
 
+static DEFINE_PER_CPU(struct its_node *, its_on_cpu);
+
 #define gic_data_rdist()		(raw_cpu_ptr(gic_rdists->rdist))
 #define gic_data_rdist_cpu(cpu)		(per_cpu_ptr(gic_rdists->rdist, cpu))
 #define gic_data_rdist_rd_base()	(gic_data_rdist()->rd_base)
@@ -4058,19 +4060,25 @@ static struct irq_chip its_vpe_irq_chip = {
 
 static struct its_node *find_4_1_its(void)
 {
-	static struct its_node *its = NULL;
+	struct its_node *its = NULL;
+	struct its_node *its_non_cpu_node = NULL;
+	int cpu = smp_processor_id();
 
-	if (!its) {
-		list_for_each_entry(its, &its_nodes, entry) {
-			if (is_v4_1(its))
-				return its;
-		}
+	if (per_cpu(its_on_cpu, cpu))
+		return per_cpu(its_on_cpu, cpu);
 
-		/* Oops? */
-		its = NULL;
-	}
+	list_for_each_entry(its, &its_nodes, entry) {
+		if (is_v4_1(its) && its->numa_node == cpu_to_node(cpu)) {
+			per_cpu(its_on_cpu, cpu) = its;
+			return its;
+		} else if (is_v4_1(its))
+			its_non_cpu_node = its;
+	}
 
-	return its;
+	if (!per_cpu(its_on_cpu, cpu) && its_non_cpu_node)
+		per_cpu(its_on_cpu, cpu) = its_non_cpu_node;
+
+	return its_non_cpu_node;
 }
 
 static void its_vpe_4_1_send_inv(struct irq_data *d)
-- 
2.30.0

.

From: Shiji Yang <yangshiji66@outlook.com>
To: linux-mips@vger.kernel.org
Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
	Arnd Bergmann <arnd@arndb.de>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Javier Martinez Canillas <javierm@redhat.com>,
	Khalid Aziz <khalid@gonehiking.org>,
	Baoquan He <bhe@redhat.com>,
	Jiaxun Yang <jiaxun.yang@flygoat.com>,
	Serge Semin <fancer.lancer@gmail.com>,
	linux-kernel@vger.kernel.org,
	Shiji Yang <yangshiji66@outlook.com>,
	Mieczyslaw Nalewaj <namiltd@yahoo.com>
Subject: [PATCH V2] mips: kernel: fix detect_memory_region() function
Date: Tue, 25 Jun 2024 09:44:44 +0800
Message-ID: <TYCP286MB089598ABD1E2F66003D71EB8BCD52@TYCP286MB0895.JPNP286.PROD.OUTLOOK.COM>
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257590
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-mips
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

The detect_memory_region() has been broken on 6.6 kernel[1]. This
patch fixes it by:
1. Do not use memcmp() on unallocated memory, as the new introduced
   fortify dynamic object size check[2] will return unexpected result.
2. Use a fixed pattern instead of a random function pointer as the
   magic value.
3. Flip magic value and double check it.
4. Enable this feature only for 32-bit CPUs. Currently, only ath79 and
   ralink CPUs are using it. And 64-bit CPU doesn't have the KSEG1ADDR
   definition.

[1] https://github.com/openwrt/openwrt/pull/14774#issuecomment-1989356746
[2] commit 439a1bcac648 ("fortify: Use __builtin_dynamic_object_size() when available")
Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
Tested-by: Mieczyslaw Nalewaj <namiltd@yahoo.com>
---
 arch/mips/include/asm/bootinfo.h |  2 ++
 arch/mips/kernel/setup.c         | 17 ++++++++++++-----
 2 files changed, 14 insertions(+), 5 deletions(-)

diff --git a/arch/mips/include/asm/bootinfo.h b/arch/mips/include/asm/bootinfo.h
index 2128ba903391..8516c11916a4 100644
--- a/arch/mips/include/asm/bootinfo.h
+++ b/arch/mips/include/asm/bootinfo.h
@@ -93,7 +93,9 @@ const char *get_system_type(void);
 
 extern unsigned long mips_machtype;
 
+#ifndef CONFIG_64BIT
 extern void detect_memory_region(phys_addr_t start, phys_addr_t sz_min,  phys_addr_t sz_max);
+#endif
 
 extern void prom_init(void);
 extern void prom_free_prom_memory(void);
diff --git a/arch/mips/kernel/setup.c b/arch/mips/kernel/setup.c
index 12a1a4ffb602..3a3bc1b7e62e 100644
--- a/arch/mips/kernel/setup.c
+++ b/arch/mips/kernel/setup.c
@@ -86,21 +86,27 @@ static struct resource bss_resource = { .name = "Kernel bss", };
 unsigned long __kaslr_offset __ro_after_init;
 EXPORT_SYMBOL(__kaslr_offset);
 
-static void *detect_magic __initdata = detect_memory_region;
-
 #ifdef CONFIG_MIPS_AUTO_PFN_OFFSET
 unsigned long ARCH_PFN_OFFSET;
 EXPORT_SYMBOL(ARCH_PFN_OFFSET);
 #endif
 
+#ifndef CONFIG_64BIT
+static u32 detect_magic __initdata;
+#define MIPS_MEM_TEST_PATTERN		0xaa5555aa
+
 void __init detect_memory_region(phys_addr_t start, phys_addr_t sz_min, phys_addr_t sz_max)
 {
-	void *dm = &detect_magic;
+	void *dm = (void *)KSEG1ADDR(&detect_magic);
 	phys_addr_t size;
 
 	for (size = sz_min; size < sz_max; size <<= 1) {
-		if (!memcmp(dm, dm + size, sizeof(detect_magic)))
-			break;
+		__raw_writel(MIPS_MEM_TEST_PATTERN, dm);
+		if (__raw_readl(dm) == __raw_readl(dm + size)) {
+			__raw_writel(~MIPS_MEM_TEST_PATTERN, dm);
+			if (__raw_readl(dm) == __raw_readl(dm + size))
+				break;
+		}
 	}
 
 	pr_debug("Memory: %lluMB of RAM detected at 0x%llx (min: %lluMB, max: %lluMB)\n",
@@ -111,6 +117,7 @@ void __init detect_memory_region(phys_addr_t start, phys_addr_t sz_min, phys_add
 
 	memblock_add(start, size);
 }
+#endif /* CONFIG_64BIT */
 
 /*
  * Manage initrd
-- 
2.45.1

.

From: Zizhi Wo <wozizhi@huawei.com>
To: <chandan.babu@oracle.com>, <djwong@kernel.org>, <dchinner@redhat.com>,
	<wozizhi@huawei.com>
CC: <linux-xfs@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
	<yangerkun@huawei.com>
Subject: [PATCH V3] xfs: Avoid races with cnt_btree lastrec updates
Date: Tue, 25 Jun 2024 09:46:51 +0800
Message-ID: <20240625014651.382485-1-wozizhi@huawei.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257592
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-xfs
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

A concurrent file creation and little writing could unexpectedly return
-ENOSPC error since there is a race window that the allocator could get
the wrong agf->agf_longest.

Write file process steps:
1) Find the entry that best meets the conditions, then calculate the start
   address and length of the remaining part of the entry after allocation.
2) Delete this entry and update the -current- agf->agf_longest.
3) Insert the remaining unused parts of this entry based on the
   calculations in 1), and update the agf->agf_longest again if necessary.

Create file process steps:
1) Check whether there are free inodes in the inode chunk.
2) If there is no free inode, check whether there has space for creating
   inode chunks, perform the no-lock judgment first.
3) If the judgment succeeds, the judgment is performed again with agf lock
   held. Otherwire, an error is returned directly.

If the write process is in step 2) but not go to 3) yet, the create file
process goes to 2) at this time, it may be mistaken for no space,
resulting in the file system still has space but the file creation fails.

We have sent two different commits to the community in order to fix this
problem[1][2]. Unfortunately, both solutions have flaws. In [2], I
discussed with Dave and Darrick, realized that a better solution to this
problem requires the "last cnt record tracking" to be ripped out of the
generic btree code. And surprisingly, Dave directly provided his fix code.
This patch includes appropriate modifications based on his tmp-code to
address this issue.

The entire fix can be roughly divided into two parts:
1) Delete the code related to lastrec-update in the generic btree code.
2) Place the process of updating longest freespace with cntbt separately
   to the end of the cntbt modifications. Move the cursor to the rightmost
   firstly, and update the longest free extent based on the record.

Note that we can not update the longest with xfs_alloc_get_rec() after
find the longest record, as xfs_verify_agbno() may not pass because
pag->block_count is updated on the outside. Therefore, use
xfs_btree_get_rec() as a replacement.

[1] https://lore.kernel.org/all/20240419061848.1032366-2-yebin10@huawei.com
[2] https://lore.kernel.org/all/20240604071121.3981686-1-wozizhi@huawei.com

Reported by: Ye Bin <yebin10@huawei.com>
Signed-off-by: Zizhi Wo <wozizhi@huawei.com>
---
 fs/xfs/libxfs/xfs_alloc.c       | 115 ++++++++++++++++++++++++++++++++
 fs/xfs/libxfs/xfs_alloc_btree.c |  64 ------------------
 fs/xfs/libxfs/xfs_btree.c       |  51 --------------
 fs/xfs/libxfs/xfs_btree.h       |  16 +----
 4 files changed, 116 insertions(+), 130 deletions(-)

diff --git a/fs/xfs/libxfs/xfs_alloc.c b/fs/xfs/libxfs/xfs_alloc.c
index 6c55a6e88eba..ef8415af47f8 100644
--- a/fs/xfs/libxfs/xfs_alloc.c
+++ b/fs/xfs/libxfs/xfs_alloc.c
@@ -465,6 +465,98 @@ xfs_alloc_fix_len(
 	args->len = rlen;
 }
 
+/*
+ * Determine if the cursor points to the block that contains the right-most
+ * block of records in the by-count btree. This block contains the largest
+ * contiguous free extent in the AG, so if we modify a record in this block we
+ * need to call xfs_alloc_fixup_longest() once the modifications are done to
+ * ensure the agf->agf_longest field is kept up to date with the longest free
+ * extent tracked by the by-count btree.
+ */
+static bool
+xfs_alloc_cursor_at_lastrec(
+	struct xfs_btree_cur	*cnt_cur)
+{
+	struct xfs_btree_block	*block;
+	union xfs_btree_ptr	ptr;
+	struct xfs_buf		*bp;
+
+	block = xfs_btree_get_block(cnt_cur, 0, &bp);
+
+	xfs_btree_get_sibling(cnt_cur, block, &ptr, XFS_BB_RIGHTSIB);
+	return xfs_btree_ptr_is_null(cnt_cur, &ptr);
+}
+
+/*
+ * Find the rightmost record of the cntbt, and return the longest free space
+ * recorded in it. Simply set both the block number and the length to their
+ * maximum values before searching.
+ */
+static int
+xfs_cntbt_longest(
+	struct xfs_btree_cur	*cnt_cur,
+	xfs_extlen_t		*longest)
+{
+	struct xfs_alloc_rec_incore irec;
+	union xfs_btree_rec	    *rec;
+	int			    stat = 0;
+	int			    error;
+
+	memset(&cnt_cur->bc_rec, 0xFF, sizeof(cnt_cur->bc_rec));
+	error = xfs_btree_lookup(cnt_cur, XFS_LOOKUP_LE, &stat);
+	if (error)
+		return error;
+	if (!stat) {
+		/* totally empty tree */
+		*longest = 0;
+		return 0;
+	}
+
+	error = xfs_btree_get_rec(cnt_cur, &rec, &stat);
+	if (error)
+		return error;
+	if (!stat) {
+		ASSERT(0);
+		*longest = 0;
+		return 0;
+	}
+
+	xfs_alloc_btrec_to_irec(rec, &irec);
+	*longest = irec.ar_blockcount;
+	return 0;
+}
+
+/*
+ * Update the longest contiguous free extent in the AG from the by-count cursor
+ * that is passed to us. This should be done at the end of any allocation or
+ * freeing operation that touches the longest extent in the btree.
+ *
+ * Needing to update the longest extent can be determined by calling
+ * xfs_alloc_cursor_at_lastrec() after the cursor is positioned for record
+ * modification but before the modification begins.
+ */
+static int
+xfs_alloc_fixup_longest(
+	struct xfs_btree_cur	*cnt_cur)
+{
+	struct xfs_perag	*pag = cnt_cur->bc_ag.pag;
+	struct xfs_buf		*bp = cnt_cur->bc_ag.agbp;
+	struct xfs_agf		*agf = bp->b_addr;
+	xfs_extlen_t		longest = 0;
+	int			error;
+
+	/* Lookup last rec in order to update AGF. */
+	error = xfs_cntbt_longest(cnt_cur, &longest);
+	if (error)
+		return error;
+
+	pag->pagf_longest = longest;
+	agf->agf_longest = cpu_to_be32(pag->pagf_longest);
+	xfs_alloc_log_agf(cnt_cur->bc_tp, bp, XFS_AGF_LONGEST);
+
+	return 0;
+}
+
 /*
  * Update the two btrees, logically removing from freespace the extent
  * starting at rbno, rlen blocks.  The extent is contained within the
@@ -489,6 +581,7 @@ xfs_alloc_fixup_trees(
 	xfs_extlen_t	nflen1=0;	/* first new free length */
 	xfs_extlen_t	nflen2=0;	/* second new free length */
 	struct xfs_mount *mp;
+	bool		fixup_longest = false;
 
 	mp = cnt_cur->bc_mp;
 
@@ -577,6 +670,10 @@ xfs_alloc_fixup_trees(
 		nfbno2 = rbno + rlen;
 		nflen2 = (fbno + flen) - nfbno2;
 	}
+
+	if (xfs_alloc_cursor_at_lastrec(cnt_cur))
+		fixup_longest = true;
+
 	/*
 	 * Delete the entry from the by-size btree.
 	 */
@@ -654,6 +751,10 @@ xfs_alloc_fixup_trees(
 			return -EFSCORRUPTED;
 		}
 	}
+
+	if (fixup_longest)
+		return xfs_alloc_fixup_longest(cnt_cur);
+
 	return 0;
 }
 
@@ -1956,6 +2057,7 @@ xfs_free_ag_extent(
 	int				i;
 	int				error;
 	struct xfs_perag		*pag = agbp->b_pag;
+	bool				fixup_longest = false;
 
 	bno_cur = cnt_cur = NULL;
 	mp = tp->t_mountp;
@@ -2219,8 +2321,13 @@ xfs_free_ag_extent(
 	}
 	xfs_btree_del_cursor(bno_cur, XFS_BTREE_NOERROR);
 	bno_cur = NULL;
+
 	/*
 	 * In all cases we need to insert the new freespace in the by-size tree.
+	 *
+	 * If this new freespace is being inserted in the block that contains
+	 * the largest free space in the btree, make sure we also fix up the
+	 * agf->agf-longest tracker field.
 	 */
 	if ((error = xfs_alloc_lookup_eq(cnt_cur, nbno, nlen, &i)))
 		goto error0;
@@ -2229,6 +2336,8 @@ xfs_free_ag_extent(
 		error = -EFSCORRUPTED;
 		goto error0;
 	}
+	if (xfs_alloc_cursor_at_lastrec(cnt_cur))
+		fixup_longest = true;
 	if ((error = xfs_btree_insert(cnt_cur, &i)))
 		goto error0;
 	if (XFS_IS_CORRUPT(mp, i != 1)) {
@@ -2236,6 +2345,12 @@ xfs_free_ag_extent(
 		error = -EFSCORRUPTED;
 		goto error0;
 	}
+	if (fixup_longest) {
+		error = xfs_alloc_fixup_longest(cnt_cur);
+		if (error)
+			goto error0;
+	}
+
 	xfs_btree_del_cursor(cnt_cur, XFS_BTREE_NOERROR);
 	cnt_cur = NULL;
 
diff --git a/fs/xfs/libxfs/xfs_alloc_btree.c b/fs/xfs/libxfs/xfs_alloc_btree.c
index 6ef5ddd89600..585e98e87ef9 100644
--- a/fs/xfs/libxfs/xfs_alloc_btree.c
+++ b/fs/xfs/libxfs/xfs_alloc_btree.c
@@ -115,67 +115,6 @@ xfs_allocbt_free_block(
 	return 0;
 }
 
-/*
- * Update the longest extent in the AGF
- */
-STATIC void
-xfs_allocbt_update_lastrec(
-	struct xfs_btree_cur		*cur,
-	const struct xfs_btree_block	*block,
-	const union xfs_btree_rec	*rec,
-	int				ptr,
-	int				reason)
-{
-	struct xfs_agf		*agf = cur->bc_ag.agbp->b_addr;
-	struct xfs_perag	*pag;
-	__be32			len;
-	int			numrecs;
-
-	ASSERT(!xfs_btree_is_bno(cur->bc_ops));
-
-	switch (reason) {
-	case LASTREC_UPDATE:
-		/*
-		 * If this is the last leaf block and it's the last record,
-		 * then update the size of the longest extent in the AG.
-		 */
-		if (ptr != xfs_btree_get_numrecs(block))
-			return;
-		len = rec->alloc.ar_blockcount;
-		break;
-	case LASTREC_INSREC:
-		if (be32_to_cpu(rec->alloc.ar_blockcount) <=
-		    be32_to_cpu(agf->agf_longest))
-			return;
-		len = rec->alloc.ar_blockcount;
-		break;
-	case LASTREC_DELREC:
-		numrecs = xfs_btree_get_numrecs(block);
-		if (ptr <= numrecs)
-			return;
-		ASSERT(ptr == numrecs + 1);
-
-		if (numrecs) {
-			xfs_alloc_rec_t *rrp;
-
-			rrp = XFS_ALLOC_REC_ADDR(cur->bc_mp, block, numrecs);
-			len = rrp->ar_blockcount;
-		} else {
-			len = 0;
-		}
-
-		break;
-	default:
-		ASSERT(0);
-		return;
-	}
-
-	agf->agf_longest = len;
-	pag = cur->bc_ag.agbp->b_pag;
-	pag->pagf_longest = be32_to_cpu(len);
-	xfs_alloc_log_agf(cur->bc_tp, cur->bc_ag.agbp, XFS_AGF_LONGEST);
-}
-
 STATIC int
 xfs_allocbt_get_minrecs(
 	struct xfs_btree_cur	*cur,
@@ -493,7 +432,6 @@ const struct xfs_btree_ops xfs_bnobt_ops = {
 	.set_root		= xfs_allocbt_set_root,
 	.alloc_block		= xfs_allocbt_alloc_block,
 	.free_block		= xfs_allocbt_free_block,
-	.update_lastrec		= xfs_allocbt_update_lastrec,
 	.get_minrecs		= xfs_allocbt_get_minrecs,
 	.get_maxrecs		= xfs_allocbt_get_maxrecs,
 	.init_key_from_rec	= xfs_allocbt_init_key_from_rec,
@@ -511,7 +449,6 @@ const struct xfs_btree_ops xfs_bnobt_ops = {
 const struct xfs_btree_ops xfs_cntbt_ops = {
 	.name			= "cnt",
 	.type			= XFS_BTREE_TYPE_AG,
-	.geom_flags		= XFS_BTGEO_LASTREC_UPDATE,
 
 	.rec_len		= sizeof(xfs_alloc_rec_t),
 	.key_len		= sizeof(xfs_alloc_key_t),
@@ -525,7 +462,6 @@ const struct xfs_btree_ops xfs_cntbt_ops = {
 	.set_root		= xfs_allocbt_set_root,
 	.alloc_block		= xfs_allocbt_alloc_block,
 	.free_block		= xfs_allocbt_free_block,
-	.update_lastrec		= xfs_allocbt_update_lastrec,
 	.get_minrecs		= xfs_allocbt_get_minrecs,
 	.get_maxrecs		= xfs_allocbt_get_maxrecs,
 	.init_key_from_rec	= xfs_allocbt_init_key_from_rec,
diff --git a/fs/xfs/libxfs/xfs_btree.c b/fs/xfs/libxfs/xfs_btree.c
index d29547572a68..a5c4af148853 100644
--- a/fs/xfs/libxfs/xfs_btree.c
+++ b/fs/xfs/libxfs/xfs_btree.c
@@ -1331,30 +1331,6 @@ xfs_btree_init_block_cur(
 			xfs_btree_owner(cur));
 }
 
-/*
- * Return true if ptr is the last record in the btree and
- * we need to track updates to this record.  The decision
- * will be further refined in the update_lastrec method.
- */
-STATIC int
-xfs_btree_is_lastrec(
-	struct xfs_btree_cur	*cur,
-	struct xfs_btree_block	*block,
-	int			level)
-{
-	union xfs_btree_ptr	ptr;
-
-	if (level > 0)
-		return 0;
-	if (!(cur->bc_ops->geom_flags & XFS_BTGEO_LASTREC_UPDATE))
-		return 0;
-
-	xfs_btree_get_sibling(cur, block, &ptr, XFS_BB_RIGHTSIB);
-	if (!xfs_btree_ptr_is_null(cur, &ptr))
-		return 0;
-	return 1;
-}
-
 STATIC void
 xfs_btree_buf_to_ptr(
 	struct xfs_btree_cur	*cur,
@@ -2420,15 +2396,6 @@ xfs_btree_update(
 	xfs_btree_copy_recs(cur, rp, rec, 1);
 	xfs_btree_log_recs(cur, bp, ptr, ptr);
 
-	/*
-	 * If we are tracking the last record in the tree and
-	 * we are at the far right edge of the tree, update it.
-	 */
-	if (xfs_btree_is_lastrec(cur, block, 0)) {
-		cur->bc_ops->update_lastrec(cur, block, rec,
-					    ptr, LASTREC_UPDATE);
-	}
-
 	/* Pass new key value up to our parent. */
 	if (xfs_btree_needs_key_update(cur, ptr)) {
 		error = xfs_btree_update_keys(cur, 0);
@@ -3617,15 +3584,6 @@ xfs_btree_insrec(
 			goto error0;
 	}
 
-	/*
-	 * If we are tracking the last record in the tree and
-	 * we are at the far right edge of the tree, update it.
-	 */
-	if (xfs_btree_is_lastrec(cur, block, level)) {
-		cur->bc_ops->update_lastrec(cur, block, rec,
-					    ptr, LASTREC_INSREC);
-	}
-
 	/*
 	 * Return the new block number, if any.
 	 * If there is one, give back a record value and a cursor too.
@@ -3983,15 +3941,6 @@ xfs_btree_delrec(
 	xfs_btree_set_numrecs(block, --numrecs);
 	xfs_btree_log_block(cur, bp, XFS_BB_NUMRECS);
 
-	/*
-	 * If we are tracking the last record in the tree and
-	 * we are at the far right edge of the tree, update it.
-	 */
-	if (xfs_btree_is_lastrec(cur, block, level)) {
-		cur->bc_ops->update_lastrec(cur, block, NULL,
-					    ptr, LASTREC_DELREC);
-	}
-
 	/*
 	 * We're at the root level.  First, shrink the root block in-memory.
 	 * Try to get rid of the next level down.  If we can't then there's
diff --git a/fs/xfs/libxfs/xfs_btree.h b/fs/xfs/libxfs/xfs_btree.h
index f93374278aa1..10b7ddc3b2b3 100644
--- a/fs/xfs/libxfs/xfs_btree.h
+++ b/fs/xfs/libxfs/xfs_btree.h
@@ -154,12 +154,6 @@ struct xfs_btree_ops {
 			       int *stat);
 	int	(*free_block)(struct xfs_btree_cur *cur, struct xfs_buf *bp);
 
-	/* update last record information */
-	void	(*update_lastrec)(struct xfs_btree_cur *cur,
-				  const struct xfs_btree_block *block,
-				  const union xfs_btree_rec *rec,
-				  int ptr, int reason);
-
 	/* records in block/level */
 	int	(*get_minrecs)(struct xfs_btree_cur *cur, int level);
 	int	(*get_maxrecs)(struct xfs_btree_cur *cur, int level);
@@ -222,15 +216,7 @@ struct xfs_btree_ops {
 };
 
 /* btree geometry flags */
-#define XFS_BTGEO_LASTREC_UPDATE	(1U << 0) /* track last rec externally */
-#define XFS_BTGEO_OVERLAPPING		(1U << 1) /* overlapping intervals */
-
-/*
- * Reasons for the update_lastrec method to be called.
- */
-#define LASTREC_UPDATE	0
-#define LASTREC_INSREC	1
-#define LASTREC_DELREC	2
+#define XFS_BTGEO_OVERLAPPING		(1U << 0) /* overlapping intervals */
 
 
 union xfs_btree_irec {
-- 
2.39.2

.

From: Pengfei Li <pengfei.li_1@nxp.com>
To: krzk+dt@kernel.org,
	robh@kernel.org,
	abelvesa@kernel.org,
	mturquette@baylibre.com,
	sboyd@kernel.org,
	conor+dt@kernel.org,
	shawnguo@kernel.org,
	s.hauer@pengutronix.de,
	ping.bai@nxp.com,
	ye.li@nxp.com,
	peng.fan@nxp.com,
	aisheng.dong@nxp.com,
	frank.li@nxp.com
Cc: kernel@pengutronix.de,
	festevam@gmail.com,
	linux-clk@vger.kernel.org,
	imx@lists.linux.dev,
	devicetree@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org
Subject: [PATCH 0/2] clk: imx93: Drop macro IMX93_CLK_END
Date: Tue, 25 Jun 2024 10:51:45 -0700
Message-Id: <20240625175147.94985-1-pengfei.li_1@nxp.com>
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257593
Newsgroups: org.kernel.vger.linux-kernel,dev.linux.lists.imx,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-clk,org.kernel.vger.linux-devicetree
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

'IMX93_CLK_END' macro was previously defined in imx93-clock.h to
indicate the number of clocks, but it is not part of the ABI, so
it should be dropped.

Pengfei Li (2):
  clk: imx93: Drop macro IMX93_CLK_END
  dt-bindings: clock: imx93: Drop IMX93_CLK_END macro definition

 drivers/clk/imx/clk-imx93.c             | 25 +++++++++++++++++++++----
 include/dt-bindings/clock/imx93-clock.h |  1 -
 2 files changed, 21 insertions(+), 5 deletions(-)

-- 
2.34.1

.

From: Ma Ke <make24@iscas.ac.cn>
To: neal_liu@aspeedtech.com,
	gregkh@linuxfoundation.org,
	joel@jms.id.au,
	andrew@codeconstruct.com.au
Cc: linux-aspeed@lists.ozlabs.org,
	linux-usb@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org,
	Ma Ke <make_ruc2021@163.com>
Subject: [PATCH v3] usb: gadget: aspeed_udc: validate endpoint index for ast udc
Date: Tue, 25 Jun 2024 10:03:26 +0800
Message-Id: <20240625020326.2564860-1-make24@iscas.ac.cn>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257599
Newsgroups: org.kernel.vger.linux-kernel,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-usb
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

From: Ma Ke <make_ruc2021@163.com>

We should verify the bound of the array to assure that host
may not manipulate the index to point past endpoint array.

Found by static analysis.

Signed-off-by: Ma Ke <make_ruc2021@163.com>
---
Changes in v3:
- added the changelog as suggested.
Changes in v2:
- use correct macro-defined constants as suggested;
- explain the method for finding and testing vulnearabilities.
---
 drivers/usb/gadget/udc/aspeed_udc.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/usb/gadget/udc/aspeed_udc.c b/drivers/usb/gadget/udc/aspeed_udc.c
index 3916c8e2ba01..d972ef4644bc 100644
--- a/drivers/usb/gadget/udc/aspeed_udc.c
+++ b/drivers/usb/gadget/udc/aspeed_udc.c
@@ -1009,6 +1009,8 @@ static void ast_udc_getstatus(struct ast_udc_dev *udc)
 		break;
 	case USB_RECIP_ENDPOINT:
 		epnum = crq.wIndex & USB_ENDPOINT_NUMBER_MASK;
+		if (epnum >= AST_UDC_NUM_ENDPOINTS)
+			goto stall;
 		status = udc->ep[epnum].stopped;
 		break;
 	default:
-- 
2.25.1

.

From: Jie Gan <quic_jiegan@quicinc.com>
To: Mathieu Poirier <mathieu.poirier@linaro.org>,
        Suzuki K Poulose
	<suzuki.poulose@arm.com>,
        Alexander Shishkin
	<alexander.shishkin@linux.intel.com>,
        Konrad Dybcio <konradybcio@gmail.com>,
        Mike Leach <mike.leach@linaro.org>, Rob Herring <robh+dt@kernel.org>,
        Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>
CC: Jinlong Mao <quic_jinlmao@quicinc.com>,
        Greg Kroah-Hartman
	<gregkh@linuxfoundation.org>,
        <coresight@lists.linaro.org>, <linux-arm-kernel@lists.infradead.org>,
        <linux-kernel@vger.kernel.org>, <devicetree@vger.kernel.org>,
        Tingwei Zhang <quic_tingweiz@quicinc.com>,
        Yuanfang Zhang <quic_yuanfang@quicinc.com>,
        Tao Zhang
	<quic_taozha@quicinc.com>,
        Trilok Soni <quic_tsoni@quicinc.com>,
        Song Chai
	<quic_songchai@quicinc.com>,
        <linux-arm-msm@vger.kernel.org>, <andersson@kernel.org>,
        <quic_yijiyang@quicinc.com>, <quic_yuanjiey@quicinc.com>,
        <quic_liuxin@quicinc.com>, <quic_yanzl@quicinc.com>,
        <quic_xinlon@quicinc.com>, <quic_xueqnie@quicinc.com>,
        <quic_sijiwu@quicinc.com>
Subject: [PATCH] Coresight: Set correct cs_mode for TPDM to fix disable issue
Date: Tue, 25 Jun 2024 10:12:12 +0800
Message-ID: <20240625021212.1443304-1-quic_jiegan@quicinc.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257605
Newsgroups: org.kernel.vger.linux-kernel,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-arm-msm,org.kernel.vger.linux-devicetree
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

The coresight_disable_source_sysfs function should verify the
mode of the coresight device before disabling the source.
However, the mode for the TPDM device is always set to
CS_MODE_DISABLED, resulting in the check consistently failing.
As a result, TPDM cannot be properly disabled.

To fix the issue:
Configure CS_MODE_SYSFS/CS_MODE_PERF during the enablement of TPDM.
Configure CS_MODE_DISABLED during the disablement of TPDM.

Fixes: 1f5149c7751c("coresight: Move all sysfs code to sysfs file")
Signed-off-by: Jie Gan <quic_jiegan@quicinc.com>
---
 drivers/hwtracing/coresight/coresight-tpdm.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/drivers/hwtracing/coresight/coresight-tpdm.c b/drivers/hwtracing/coresight/coresight-tpdm.c
index a9708ab0d488..90a5105f6199 100644
--- a/drivers/hwtracing/coresight/coresight-tpdm.c
+++ b/drivers/hwtracing/coresight/coresight-tpdm.c
@@ -449,6 +449,11 @@ static int tpdm_enable(struct coresight_device *csdev, struct perf_event *event,
 		return -EBUSY;
 	}
 
+	if (!coresight_take_mode(csdev, mode)) {
+		spin_unlock(&drvdata->spinlock);
+		return -EBUSY;
+	}
+
 	__tpdm_enable(drvdata);
 	drvdata->enable = true;
 	spin_unlock(&drvdata->spinlock);
@@ -506,6 +511,7 @@ static void tpdm_disable(struct coresight_device *csdev,
 	}
 
 	__tpdm_disable(drvdata);
+	coresight_set_mode(csdev, CS_MODE_DISABLED);
 	drvdata->enable = false;
 	spin_unlock(&drvdata->spinlock);
 
-- 
2.34.1

.

From: Ma Ke <make24@iscas.ac.cn>
To: neal_liu@aspeedtech.com,
	gregkh@linuxfoundation.org,
	joel@jms.id.au,
	andrew@codeconstruct.com.au
Cc: linux-aspeed@lists.ozlabs.org,
	linux-usb@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org,
	Ma Ke <make24@iscas.ac.cn>
Subject: [PATCH v4] usb: gadget: aspeed_udc: validate endpoint index for ast udc
Date: Tue, 25 Jun 2024 10:23:06 +0800
Message-Id: <20240625022306.2568122-1-make24@iscas.ac.cn>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257606
Newsgroups: org.kernel.vger.linux-kernel,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-usb
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

We should verify the bound of the array to assure that host
may not manipulate the index to point past endpoint array.

Found by static analysis.

Signed-off-by: Ma Ke <make24@iscas.ac.cn>
---
Changes in v4:
- used a consistent email address to send patches, sorry for my negligence.
Changes in v3:
- added the changelog as suggested.
Changes in v2:
- used the correct macro-defined constants as suggested;
- explained the method for finding and testing vulnerabilities.
---
 drivers/usb/gadget/udc/aspeed_udc.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/usb/gadget/udc/aspeed_udc.c b/drivers/usb/gadget/udc/aspeed_udc.c
index 3916c8e2ba01..d972ef4644bc 100644
--- a/drivers/usb/gadget/udc/aspeed_udc.c
+++ b/drivers/usb/gadget/udc/aspeed_udc.c
@@ -1009,6 +1009,8 @@ static void ast_udc_getstatus(struct ast_udc_dev *udc)
 		break;
 	case USB_RECIP_ENDPOINT:
 		epnum = crq.wIndex & USB_ENDPOINT_NUMBER_MASK;
+		if (epnum >= AST_UDC_NUM_ENDPOINTS)
+			goto stall;
 		status = udc->ep[epnum].stopped;
 		break;
 	default:
-- 
2.25.1

.

From: Rui Qi <qirui.001@bytedance.com>
To: linmiaohe@huawei.com,
	nao.horiguchi@gmail.com,
	akpm@linux-foundation.org
Cc: linux-mm@kvack.org,
	linux-kernel@vger.kernel.org,
	Rui Qi <qirui.001@bytedance.com>
Subject: [PATCH] mm/memory-failure: allow memory allocation from emergency reserves
Date: Tue, 25 Jun 2024 10:23:42 +0800
Message-Id: <20240625022342.6158-1-qirui.001@bytedance.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257607 org.kvack.linux-mm:201229
Newsgroups: org.kernel.vger.linux-kernel,org.kvack.linux-mm
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

From: Rui Qi <qirui.001@bytedance.com>

we hope that memory errors can be successfully handled quickly, using
__GFP_MEMALLOC can help us improve the success rate of processing
under memory pressure, because to_kill struct is freed very quickly,
so using __GFP_MEMALLOC will not exacerbate memory pressure for a long time,
and  more memory will be freed after killed task exiting, which will also
reduce memory pressure.

Signed-off-by: Rui Qi <qirui.001@bytedance.com>
---
 mm/memory-failure.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/mm/memory-failure.c b/mm/memory-failure.c
index 05818d09b4eb..0608383f927a 100644
--- a/mm/memory-failure.c
+++ b/mm/memory-failure.c
@@ -451,7 +451,7 @@ static void __add_to_kill(struct task_struct *tsk, struct page *p,
 {
 	struct to_kill *tk;
 
-	tk = kmalloc(sizeof(struct to_kill), GFP_ATOMIC);
+	tk = kmalloc(sizeof(struct to_kill), GFP_ATOMIC | __GFP_MEMALLOC);
 	if (!tk) {
 		pr_err("Out of memory while machine check handling\n");
 		return;
@@ -1931,7 +1931,7 @@ static int folio_set_hugetlb_hwpoison(struct folio *folio, struct page *page)
 			return -EHWPOISON;
 	}
 
-	raw_hwp = kmalloc(sizeof(struct raw_hwp_page), GFP_ATOMIC);
+	raw_hwp = kmalloc(sizeof(struct raw_hwp_page), GFP_ATOMIC | __GFP_MEMALLOC);
 	if (raw_hwp) {
 		raw_hwp->page = page;
 		llist_add(&raw_hwp->node, head);
-- 
2.39.3 (Apple Git-145)

.

From: Frank Li <Frank.Li@nxp.com>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Rob Herring <robh@kernel.org>,
	Krzysztof Kozlowski <krzk+dt@kernel.org>,
	Conor Dooley <conor+dt@kernel.org>,
	linux-usb@vger.kernel.org (open list:USB SUBSYSTEM),
	devicetree@vger.kernel.org (open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS),
	linux-kernel@vger.kernel.org (open list)
Cc: imx@lists.linux.dev
Subject: [PATCH 1/1] dt-bindings: usb: Convert fsl-usb to yaml
Date: Mon, 24 Jun 2024 22:25:40 -0400
Message-Id: <20240625022541.2007010-1-Frank.Li@nxp.com>
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257610
Newsgroups: org.kernel.vger.linux-kernel,dev.linux.lists.imx,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-usb
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Convert fsl-usb binding doc to yaml format.

Additional change:
- Remove port0 and port1 from required list.
- Use common usb-drd.yaml for dr_mode property
- Keep two difference examples.
- Add interrupts to required property list.
- Remove #address-cells and #size-cells in example.
- Use predefined irq type macro.

Signed-off-by: Frank Li <Frank.Li@nxp.com>
---
 .../devicetree/bindings/usb/fsl-usb.txt       | 81 ----------------
 .../devicetree/bindings/usb/fsl-usb.yaml      | 96 +++++++++++++++++++
 2 files changed, 96 insertions(+), 81 deletions(-)
 delete mode 100644 Documentation/devicetree/bindings/usb/fsl-usb.txt
 create mode 100644 Documentation/devicetree/bindings/usb/fsl-usb.yaml

diff --git a/Documentation/devicetree/bindings/usb/fsl-usb.txt b/Documentation/devicetree/bindings/usb/fsl-usb.txt
deleted file mode 100644
index 0b08b006c5ead..0000000000000
--- a/Documentation/devicetree/bindings/usb/fsl-usb.txt
+++ /dev/null
@@ -1,81 +0,0 @@
-Freescale SOC USB controllers
-
-The device node for a USB controller that is part of a Freescale
-SOC is as described in the document "Open Firmware Recommended
-Practice : Universal Serial Bus" with the following modifications
-and additions :
-
-Required properties :
- - compatible : Should be "fsl-usb2-mph" for multi port host USB
-   controllers, or "fsl-usb2-dr" for dual role USB controllers
-   or "fsl,mpc5121-usb2-dr" for dual role USB controllers of MPC5121.
-   Wherever applicable, the IP version of the USB controller should
-   also be mentioned (for eg. fsl-usb2-dr-v2.2 for bsc9132).
- - phy_type : For multi port host USB controllers, should be one of
-   "ulpi", or "serial". For dual role USB controllers, should be
-   one of "ulpi", "utmi", "utmi_wide", or "serial".
- - reg : Offset and length of the register set for the device
- - port0 : boolean; if defined, indicates port0 is connected for
-   fsl-usb2-mph compatible controllers.  Either this property or
-   "port1" (or both) must be defined for "fsl-usb2-mph" compatible
-   controllers.
- - port1 : boolean; if defined, indicates port1 is connected for
-   fsl-usb2-mph compatible controllers.  Either this property or
-   "port0" (or both) must be defined for "fsl-usb2-mph" compatible
-   controllers.
- - dr_mode : indicates the working mode for "fsl-usb2-dr" compatible
-   controllers.  Can be "host", "peripheral", or "otg".  Default to
-   "host" if not defined for backward compatibility.
-
-Recommended properties :
- - interrupts : <a b> where a is the interrupt number and b is a
-   field that represents an encoding of the sense and level
-   information for the interrupt.  This should be encoded based on
-   the information in section 2) depending on the type of interrupt
-   controller you have.
-
-Optional properties :
- - fsl,invert-drvvbus : boolean; for MPC5121 USB0 only. Indicates the
-   port power polarity of internal PHY signal DRVVBUS is inverted.
- - fsl,invert-pwr-fault : boolean; for MPC5121 USB0 only. Indicates
-   the PWR_FAULT signal polarity is inverted.
-
-Example multi port host USB controller device node :
-	usb@22000 {
-		compatible = "fsl-usb2-mph";
-		reg = <22000 1000>;
-		#address-cells = <1>;
-		#size-cells = <0>;
-		interrupt-parent = <700>;
-		interrupts = <27 1>;
-		phy_type = "ulpi";
-		port0;
-		port1;
-	};
-
-Example dual role USB controller device node :
-	usb@23000 {
-		compatible = "fsl-usb2-dr";
-		reg = <23000 1000>;
-		#address-cells = <1>;
-		#size-cells = <0>;
-		interrupt-parent = <700>;
-		interrupts = <26 1>;
-		dr_mode = "otg";
-		phy = "ulpi";
-	};
-
-Example dual role USB controller device node for MPC5121ADS:
-
-	usb@4000 {
-		compatible = "fsl,mpc5121-usb2-dr";
-		reg = <0x4000 0x1000>;
-		#address-cells = <1>;
-		#size-cells = <0>;
-		interrupt-parent = < &ipic >;
-		interrupts = <44 0x8>;
-		dr_mode = "otg";
-		phy_type = "utmi_wide";
-		fsl,invert-drvvbus;
-		fsl,invert-pwr-fault;
-	};
diff --git a/Documentation/devicetree/bindings/usb/fsl-usb.yaml b/Documentation/devicetree/bindings/usb/fsl-usb.yaml
new file mode 100644
index 0000000000000..8b5724e213f09
--- /dev/null
+++ b/Documentation/devicetree/bindings/usb/fsl-usb.yaml
@@ -0,0 +1,96 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/usb/fsl-usb.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Freescale SOC USB controllers
+
+maintainers:
+  - Frank Li <Frank.Li@nxp.com>
+
+description: |
+  The device node for a USB controller that is part of a Freescale
+  SOC is as described in the document "Open Firmware Recommended
+  Practice: Universal Serial Bus" with the following modifications
+  and additions.
+
+properties:
+  compatible:
+    oneOf:
+      - enum:
+          - fsl-usb2-mph
+          - fsl-usb2-dr
+          - fsl-usb2-dr-v2.2
+      - items:
+          - enum:
+              - fsl-usb2-dr-v2.2
+              - fsl-usb2-dr-v2.5
+          - const: fsl-usb2-dr
+
+  phy_type:
+    $ref: /schemas/types.yaml#/definitions/string
+    enum: [ulpi, serial, utmi, utmi_wide]
+
+  reg:
+    maxItems: 1
+
+  interrupts:
+    maxItems: 1
+
+  port0:
+    $ref: /schemas/types.yaml#/definitions/flag
+    description:
+      Indicates port0 is connected for fsl-usb2-mph compatible controllers.
+
+  port1:
+    $ref: /schemas/types.yaml#/definitions/flag
+    description:
+      Indicates port1 is connected for "fsl-usb2-mph" compatible controllers.
+
+  fsl,invert-drvvbus:
+    $ref: /schemas/types.yaml#/definitions/flag
+    description:
+      for MPC5121 USB0 only. Indicates the
+      port power polarity of internal PHY signal DRVVBUS is inverted.
+
+  fsl,invert-pwr-fault:
+    $ref: /schemas/types.yaml#/definitions/flag
+    description:
+      for MPC5121 USB0 only. Indicates
+      the PWR_FAULT signal polarity is inverted.
+
+required:
+  - compatible
+  - reg
+  - interrupts
+  - phy_type
+
+allOf:
+  - $ref: usb-drd.yaml#
+
+unevaluatedProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/interrupt-controller/irq.h>
+
+    usb@22000 {
+        compatible = "fsl-usb2-mph";
+        reg = <22000 1000>;
+        interrupts = <27 IRQ_TYPE_EDGE_RISING>;
+        phy_type = "ulpi";
+        port0;
+        port1;
+    };
+
+  - |
+    #include <dt-bindings/interrupt-controller/irq.h>
+
+    usb@23000 {
+        compatible = "fsl-usb2-dr";
+        reg = <23000 1000>;
+        interrupts = <26 IRQ_TYPE_EDGE_RISING>;
+        dr_mode = "otg";
+        phy_type = "ulpi";
+    };
-- 
2.34.1

.

From: Yasin Lee <yasin.lee.x@gmail.com>
Subject: [PATCH v7 0/3] iio: proximity: Add TYHX HX9023S sensor driver
Date: Tue, 25 Jun 2024 10:15:09 +0800
Message-Id: <20240625-add-tyhx-hx9023s-sensor-driver-v7-0-b1d65b221811@gmail.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
To: Rob Herring <robh@kernel.org>, Krzysztof Kozlowski <krzk+dt@kernel.org>, 
 Conor Dooley <conor+dt@kernel.org>, Jonathan Cameron <jic23@kernel.org>, 
 Lars-Peter Clausen <lars@metafoo.de>, yasin.lee.x@outlook.com
Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, 
 linux-iio@vger.kernel.org, Yasin Lee <yasin.lee.x@gmail.com>, 
 Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>, 
 Conor Dooley <conor@kernel.org>, 
 Alexandru Ardelean <aardelean@baylibre.com>, 
 Andy Shevchenko <andy.shevchenko@gmail.com>, 
 =?utf-8?q?Uwe_Kleine-K=C3=B6nig?= <u.kleine-koenig@pengutronix.de>
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257613
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-iio
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Signed-off-by: Yasin Lee <yasin.lee.x@gmail.com>
---
Changes in v7:

**tyhx,hx9023s.yaml:**

- Removed the unused reference to iio.yaml
- Removed the `input-channel` property and switched to inheriting the `single-channel` property from adc.yaml
- Sorted the items in the `required` list

**hx9023s.c:**

- Header Files Section:
  - Added `<linux/cleanup.h>`
  - Removed `<linux/delay.h>`
  - Replaced `<linux/math.h>` with `<linux/math64.h>`
- Register Initialization:
  - Deleted the `struct hx9023s_addr_val_pair`
  - Changed the type of `hx9023s_reg_init_list` to `struct reg_sequence`
  - Deleted the `hx9023s_reg_init` function and used `regmap_multi_reg_write` for register initialization in `probe`
- struct hx9023s_ch_data:
  - Added a comment to the member `mutex` explaining the data it protects
- Function hx9023s_sample:
  - Fixed the error related to `hx9023s_data_lock` calls
- Function hx9023s_property_get:
  - Added boundary protection for `reg`
- Function hx9023s_id_check:
  - Optimized the function
- Function hx9023s_probe:
  - Changed the call to `devm_iio_device_register` to `return devm_iio_device_register()`
- Functions hx9023s_suspend and hx9023s_resume:
  - Added `guard(mutex)(&data->mutex)`
- Code Check:
  - Ran `checkpatch.pl --strict` and fixed the identified issues
- Link to v6: https://lore.kernel.org/r/20240621-add-tyhx-hx9023s-sensor-driver-v6-0-65196a9020f1@gmail.com

Changes in v6:

**vendor-prefixes.yaml:**

- Formatted the description in the commit

**tyhx,hx9023s.yaml:**

- Added a link to the DataSheet
- Added `#address-cells` and `#size-cells`
- Removed the following properties:
  - `channel-in-use`
  - `channel-positive`
  - `channel-negative`
- Corrected the reference path to `adc.yaml`
- Inherited `diff-channels` from `adc.yaml` as differential channels
- Added `input-channel` property as a single-ended configuration channel
- Made `vdd-supply` a required option
- Used the generic name `proximity` instead of the chip name in the DTS example

**hx9023s.c:**

- Removed the following headers:
  - `#include <linux/acpi.h>`
  - `#include <linux/byteorder/generic.h>`
  - `#include <linux/kernel.h>`
- Added `#include <asm/byteorder.h>`
- Updated some macro names:
  - `HX9023S_DATA_2BYTES` ---> `HX9023S_2BYTES`
  - `HX9023S_DATA_3BYTES` ---> `HX9023S_3BYTES`
  - `HX9023S_DATA_BYTES_MAX` ---> `HX9023S_BYTES_MAX`
- Added the following macro definitions:
  - `#define HX9023S_POS 0x03`
  - `#define HX9023S_NEG 0x02`
  - `#define HX9023S_NOT_CONNECTED 16`
  - `#define HX9023S_GLOBAL_CTRL0 0x00`
- `struct hx9023s_ch_data`:
  - Added comments explaining the members `raw`, `lp`, `bl`, `diff`
  - Changed the type of struct member `thre` from `int` to `unsigned int`
  - Removed member `cs_position`
  - Changed the type of `struct buffer` member `channels[HX9023S_CH_NUM]` from `__be16` to `__le16`
  - Moved `struct hx9023s_ch_data ch_data` to the bottom
- Updated comments in the array `hx9023s_reg_init_list`:
  - Changed `adc` to `ADC`, `avg` to `average`, and `osr` to `OSR`
  - Provided a more detailed comment for the register `HX9023S_RAW_BL_RD_CFG`
- `struct regmap_config hx9023s_regmap_config`:
  - Added `.rd_type` member
  - Changed `.cache_type` from `REGCACHE_RBTREE` to `REGCACHE_MAPLE`
- Bugfix: The function `hx9023s_data_lock` now only operates on one bit instead of two
- `hx9023s_ch_cfg` function:
  - Replaced magic characters with meaningful macro definitions
  - Changed byte concatenation operations to use `put_unaligned_le16`
- Reviewed each function and made the following changes:
  - Some returns now directly return `regmap_read/write()`
  - For single-byte write operations, changed from `regmap_bulk_write(,,,1)` to `regmap_write(,,)`
  - Changed the type of loop variable `i` to `unsigned`
- `hx9023s_write_far_debounce` and `hx9023s_write_near_debounce` functions:
  - Removed magic numbers and optimized the code
- `hx9023s_get_thres_near` and `hx9023s_get_thres_far` functions:
  - Used intermediate variables for readability and simplified the code logic
- `hx9023s_set_thres_near` and `hx9023s_set_thres_far` functions:
  - Optimized the logic and simplified the code
- `hx9023s_get_prox_state` function:
  - Changed the return value type to `int`
- `hx9023s_data_select` function:
  - Changed the return value type to `int`
- `hx9023s_sample` function:
  - Added intermediate variables for better readability
- `hx9023s_ch_en` function:
  - Optimized the code logic to reduce line count
- `hx9023s_property_get` function:
  - Rewritten due to DTS changes, and calls `fwnode_handle_put` on error to prevent memory leaks
- `hx9023s_get_proximity` function:
  - Added error handling logic for data
- `hx9023s_get_samp_freq` function:
  - Used macro definitions from `units.h` instead of specific numbers for frequency calculation
- `hx9023s_set_samp_freq` function:
  - Used macro definitions from `units.h` instead of specific numbers for frequency calculation
- `hx9023s_write_raw` function:
  - Changed the type of local variable `dir` to `unsigned`
- `hx9023s_write_event_config` function:
  - Replaced `set_bit` and `clear_bit` with `__assign_bit`
- `hx9023s_trigger_handler` function:
  - Added error handling logic for data; fixed uninitialized variable `i` bug
- `hx9023s_buffer_preenable` function:
  - Fixed uninitialized variable `channel` bug
- Added `hx9023s_id_check` function
- `hx9023s_probe` function:
  - Returns directly on `devm_iio_device_alloc` error, without logging; removed `fsleep`
- `hx9023s_resume` function:
  - Calls `hx9023s_interrupt_enable` only when `data->trigger_enabled` is true
- Removed `hx9023s_acpi_match`
- Link to v5: https://lore.kernel.org/linux-iio/SN7PR12MB8101B6D0AB1246797C67E25BA4CE2@SN7PR12MB8101.namprd12.prod.outlook.com/

Changes in v5:
- I have addressed all the issues mentioned in the email responses.
  Additionally, regarding the IIO-related header files, I have checked and found no unused headers.
- Link to v4: https://lore.kernel.org/linux-iio/SN7PR12MB810129D8180B1C9593A8E078A4FB2@SN7PR12MB8101.namprd12.prod.outlook.com/

Changes in v4:
- Removed hardware-irrelevant properties from dt-bindings, retaining only channel configuration
  related `channel-positive` and `channel-negative`. Grouped by channel.
  Retained `channel-in-use` as it is hardware-related.
- Removed redundant register definitions.
- Reorganized `struct hx9023s_data`, extracting channel-related attributes
  into a new `struct hx9023s_ch_data`.
- Optimized bit operation related code.
- Replaced `of_` versions with generic firmware parsing functions.
- Fixed other issues mentioned in the email feedback.
- Link to v3: https://lore.kernel.org/linux-iio/20240602152638.2c674930@jic23-huawei/

---
Yasin Lee (3):
      dt-bindings: vendor-prefixes: add tyhx
      dt-bindings: iio: proximity: Add TYHX HX9023S
      iio: proximity: Add driver support for TYHX's HX9023S capacitive proximity sensor

 .../bindings/iio/proximity/tyhx,hx9023s.yaml       |  107 ++
 .../devicetree/bindings/vendor-prefixes.yaml       |    2 +
 drivers/iio/proximity/Kconfig                      |   14 +
 drivers/iio/proximity/Makefile                     |    1 +
 drivers/iio/proximity/hx9023s.c                    | 1131 ++++++++++++++++++++
 5 files changed, 1255 insertions(+)
---
base-commit: 0291f73eaa59fe0dbb715fa405bb47a1d8206e0e
change-id: 20240616-add-tyhx-hx9023s-sensor-driver-e7dbe3bfe596

Best regards,
-- 
Yasin Lee <yasin.lee.x@gmail.com>

.

Date: Tue, 25 Jun 2024 10:57:06 +0800
From: kernel test robot <lkp@intel.com>
To: Miguel Ojeda <ojeda@kernel.org>
Cc: llvm@lists.linux.dev, oe-kbuild-all@lists.linux.dev,
	linux-kernel@vger.kernel.org, Alice Ryhl <aliceryhl@google.com>
Subject: error: <unknown>:0:0: in function
 _RNvMNtCs5QSdWC790r4_4core3f32f7next_up float (float): SSE register return
 with SSE disabled
Message-ID: <202406251026.yENX4J42-lkp@intel.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257626
Newsgroups: org.kernel.vger.linux-kernel,dev.linux.lists.llvm,dev.linux.lists.oe-kbuild-all
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Hi Miguel,

FYI, the error/warning still remains.

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   55027e689933ba2e64f3d245fb1ff185b3e7fc81
commit: 56f64b370612d8967df2c2e0cead805444d4e71a rust: upgrade to Rust 1.78.0
date:   7 weeks ago
config: um-randconfig-002-20240625 (https://download.01.org/0day-ci/archive/20240625/202406251026.yENX4J42-lkp@intel.com/config)
compiler: clang version 19.0.0git (https://github.com/llvm/llvm-project ad79a14c9e5ec4a369eed4adf567c22cc029863f)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240625/202406251026.yENX4J42-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202406251026.yENX4J42-lkp@intel.com/

All errors (new ones prefixed by >>):

   arch/x86/um/user-offsets.c:17:6: warning: no previous prototype for function 'foo' [-Wmissing-prototypes]
   17 | void foo(void)
   |      ^
   arch/x86/um/user-offsets.c:17:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
   17 | void foo(void)
   | ^
   | static
   1 warning generated.
   In file included from arch/um/kernel/asm-offsets.c:1:
   arch/x86/um/shared/sysdep/kernel-offsets.h:9:6: warning: no previous prototype for function 'foo' [-Wmissing-prototypes]
   9 | void foo(void)
   |      ^
   arch/x86/um/shared/sysdep/kernel-offsets.h:9:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
   9 | void foo(void)
   | ^
   | static
   1 warning generated.
   clang diag: include/linux/vmstat.h:522:36: warning: arithmetic between different enumeration types ('enum node_stat_item' and 'enum lru_list') [-Wenum-enum-conversion]
   clang diag: include/asm-generic/io.h:547:31: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
   clang diag: include/asm-generic/io.h:560:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
   clang diag: include/asm-generic/io.h:573:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
   clang diag: include/asm-generic/io.h:584:33: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
   clang diag: include/asm-generic/io.h:594:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
   clang diag: include/asm-generic/io.h:604:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
   clang diag: include/asm-generic/io.h:692:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
   clang diag: include/asm-generic/io.h:700:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
   clang diag: include/asm-generic/io.h:708:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
   clang diag: include/asm-generic/io.h:717:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
   clang diag: include/asm-generic/io.h:726:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
   clang diag: include/asm-generic/io.h:735:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
   clang diag: include/linux/vmstat.h:522:36: warning: arithmetic between different enumeration types ('enum node_stat_item' and 'enum lru_list') [-Wenum-enum-conversion]
   clang diag: include/asm-generic/io.h:547:31: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
   clang diag: include/asm-generic/io.h:560:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
   clang diag: include/asm-generic/io.h:573:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
   clang diag: include/asm-generic/io.h:584:33: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
   clang diag: include/asm-generic/io.h:594:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
   clang diag: include/asm-generic/io.h:604:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
   clang diag: include/asm-generic/io.h:692:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
   clang diag: include/asm-generic/io.h:700:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
   clang diag: include/asm-generic/io.h:708:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
   clang diag: include/asm-generic/io.h:717:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
   clang diag: include/asm-generic/io.h:726:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
   clang diag: include/asm-generic/io.h:735:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
>> error: <unknown>:0:0: in function _RNvMNtCs5QSdWC790r4_4core3f32f7next_up float (float): SSE register return with SSE disabled

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
.

Return-Path: <linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org>
From: Yunhui Cui <cuiyunhui@bytedance.com>
To: paul.walmsley@sifive.com,
	palmer@dabbelt.com,
	aou@eecs.berkeley.edu,
	cuiyunhui@bytedance.com,
	andy.chiu@sifive.com,
	alexghiti@rivosinc.com,
	conor.dooley@microchip.com,
	bjorn@rivosinc.com,
	sorear@fastmail.com,
	cleger@rivosinc.com,
	linux-riscv@lists.infradead.org,
	linux-kernel@vger.kernel.org
Subject: [PATCH] riscv: Randomize lower bits of stack address
Date: Tue, 25 Jun 2024 11:05:02 +0800
Message-Id: <20240625030502.68988-1-cuiyunhui@bytedance.com>
MIME-Version: 1.0
X-BeenThere: linux-riscv@lists.infradead.org
X-Mailman-Version: 2.1.34
List-Id: <linux-riscv.lists.infradead.org>
List-Unsubscribe: <http://lists.infradead.org/mailman/options/linux-riscv>,
 <mailto:linux-riscv-request@lists.infradead.org?subject=unsubscribe>
List-Archive: <http://lists.infradead.org/pipermail/linux-riscv/>
List-Post: <mailto:linux-riscv@lists.infradead.org>
List-Help: <mailto:linux-riscv-request@lists.infradead.org?subject=help>
List-Subscribe: <http://lists.infradead.org/mailman/listinfo/linux-riscv>,
 <mailto:linux-riscv-request@lists.infradead.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: "linux-riscv" <linux-riscv-bounces@lists.infradead.org>
Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org
Xref: photonic.trudheim.com org.infradead.lists.linux-riscv:78966 org.kernel.vger.linux-kernel:1257628
Newsgroups: org.infradead.lists.linux-riscv,org.kernel.vger.linux-kernel
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Implement arch_align_stack() to randomize the lower bits
of the stack address.

Signed-off-by: Yunhui Cui <cuiyunhui@bytedance.com>
---
 arch/riscv/include/asm/exec.h | 8 ++++++++
 arch/riscv/kernel/process.c   | 9 +++++++++
 2 files changed, 17 insertions(+)
 create mode 100644 arch/riscv/include/asm/exec.h

diff --git a/arch/riscv/include/asm/exec.h b/arch/riscv/include/asm/exec.h
new file mode 100644
index 000000000000..07d9942682e0
--- /dev/null
+++ b/arch/riscv/include/asm/exec.h
@@ -0,0 +1,8 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#ifndef __ASM_EXEC_H
+#define __ASM_EXEC_H
+
+extern unsigned long arch_align_stack(unsigned long sp);
+
+#endif	/* __ASM_EXEC_H */
diff --git a/arch/riscv/kernel/process.c b/arch/riscv/kernel/process.c
index e4bc61c4e58a..e3142d8a6e28 100644
--- a/arch/riscv/kernel/process.c
+++ b/arch/riscv/kernel/process.c
@@ -15,6 +15,7 @@
 #include <linux/tick.h>
 #include <linux/ptrace.h>
 #include <linux/uaccess.h>
+#include <linux/personality.h>
 
 #include <asm/unistd.h>
 #include <asm/processor.h>
@@ -26,6 +27,7 @@
 #include <asm/cpuidle.h>
 #include <asm/vector.h>
 #include <asm/cpufeature.h>
+#include <asm/exec.h>
 
 #if defined(CONFIG_STACKPROTECTOR) && !defined(CONFIG_STACKPROTECTOR_PER_TASK)
 #include <linux/stackprotector.h>
@@ -99,6 +101,13 @@ void show_regs(struct pt_regs *regs)
 		dump_backtrace(regs, NULL, KERN_DEFAULT);
 }
 
+unsigned long arch_align_stack(unsigned long sp)
+{
+	if (!(current->personality & ADDR_NO_RANDOMIZE) && randomize_va_space)
+		sp -= get_random_u32_below(PAGE_SIZE);
+	return sp & ~0xf;
+}
+
 #ifdef CONFIG_COMPAT
 static bool compat_mode_supported __read_mostly;
 
-- 
2.20.1


_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
.

From: Gatlin Newhouse <gatlin.newhouse@gmail.com>
To: Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>,
	Borislav Petkov <bp@alien8.de>,
	Dave Hansen <dave.hansen@linux.intel.com>,
	x86@kernel.org,
	"H. Peter Anvin" <hpa@zytor.com>,
	Kees Cook <keescook@chromium.org>,
	Marco Elver <elver@google.com>,
	Andrey Konovalov <andreyknvl@gmail.com>,
	Andrey Ryabinin <ryabinin.a.a@gmail.com>,
	Nathan Chancellor <nathan@kernel.org>,
	Nick Desaulniers <ndesaulniers@google.com>,
	Bill Wendling <morbo@google.com>,
	Justin Stitt <justinstitt@google.com>,
	Gatlin Newhouse <gatlin.newhouse@gmail.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	"Mike Rapoport (IBM)" <rppt@kernel.org>,
	Baoquan He <bhe@redhat.com>,
	Rick Edgecombe <rick.p.edgecombe@intel.com>,
	Changbin Du <changbin.du@huawei.com>,
	Pengfei Xu <pengfei.xu@intel.com>,
	Xin Li <xin3.li@intel.com>,
	Jason Gunthorpe <jgg@ziepe.ca>,
	Uros Bizjak <ubizjak@gmail.com>,
	Arnd Bergmann <arnd@arndb.de>,
	"Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>,
	linux-kernel@vger.kernel.org,
	kasan-dev@googlegroups.com,
	linux-hardening@vger.kernel.org,
	llvm@lists.linux.dev
Subject: [PATCH v3] x86/traps: Enable UBSAN traps on x86
Date: Tue, 25 Jun 2024 03:24:55 +0000
Message-Id: <20240625032509.4155839-1-gatlin.newhouse@gmail.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257637
Newsgroups: org.kernel.vger.linux-kernel,dev.linux.lists.llvm,org.kernel.vger.linux-hardening
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Currently ARM architectures output which specific sanitizer caused
the trap, via the encoded data in the trap instruction. Clang on
x86 currently encodes the same data in ud1 instructions but the x86
handle_bug() and is_valid_bugaddr() functions currently only look
at ud2s.

Bring x86 to parity with arm64, similar to commit 25b84002afb9
("arm64: Support Clang UBSAN trap codes for better reporting").
Enable the output of UBSAN type information on x86 architectures
compiled with clang when CONFIG_UBSAN_TRAP=y.

Signed-off-by: Gatlin Newhouse <gatlin.newhouse@gmail.com>
---
Changes in v3:
  - Address Thomas's remarks about: change log structure,
    get_ud_type() instead of is_valid_bugaddr(), handle_bug()
    changes, and handle_ubsan_failure().

Changes in v2:
  - Name the new constants 'LEN_ASOP' and 'INSN_ASOP' instead of
    'LEN_REX' and 'INSN_REX'
  - Change handle_ubsan_failure() from enum bug_trap_type to void
    function

v1: https://lore.kernel.org/linux-hardening/20240529022043.3661757-1-gatlin.newhouse@gmail.com/
v2: https://lore.kernel.org/linux-hardening/20240601031019.3708758-1-gatlin.newhouse@gmail.com/
---
 MAINTAINERS                  |  2 ++
 arch/x86/include/asm/bug.h   | 11 ++++++++++
 arch/x86/include/asm/ubsan.h | 23 +++++++++++++++++++++
 arch/x86/kernel/Makefile     |  1 +
 arch/x86/kernel/traps.c      | 40 +++++++++++++++++++++++++++++++-----
 arch/x86/kernel/ubsan.c      | 21 +++++++++++++++++++
 6 files changed, 93 insertions(+), 5 deletions(-)
 create mode 100644 arch/x86/include/asm/ubsan.h
 create mode 100644 arch/x86/kernel/ubsan.c

diff --git a/MAINTAINERS b/MAINTAINERS
index 28e20975c26f..b8512887ffb1 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -22635,6 +22635,8 @@ L:	kasan-dev@googlegroups.com
 L:	linux-hardening@vger.kernel.org
 S:	Supported
 T:	git git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux.git for-next/hardening
+F:	arch/x86/include/asm/ubsan.h
+F:	arch/x86/kernel/ubsan.c
 F:	Documentation/dev-tools/ubsan.rst
 F:	include/linux/ubsan.h
 F:	lib/Kconfig.ubsan
diff --git a/arch/x86/include/asm/bug.h b/arch/x86/include/asm/bug.h
index a3ec87d198ac..a363d13c263b 100644
--- a/arch/x86/include/asm/bug.h
+++ b/arch/x86/include/asm/bug.h
@@ -13,6 +13,17 @@
 #define INSN_UD2	0x0b0f
 #define LEN_UD2		2
 
+/*
+ * In clang we have UD1s reporting UBSAN failures on X86, 64 and 32bit.
+ */
+#define INSN_UD1	0xb90f
+#define INSN_UD_MASK	0xFFFF
+#define LEN_UD1		2
+#define INSN_ASOP	0x67
+#define INSN_ASOP_MASK	0x00FF
+#define BUG_UD_NONE	0xFFFF
+#define BUG_UD2		0xFFFE
+
 #ifdef CONFIG_GENERIC_BUG
 
 #ifdef CONFIG_X86_32
diff --git a/arch/x86/include/asm/ubsan.h b/arch/x86/include/asm/ubsan.h
new file mode 100644
index 000000000000..ac2080984e83
--- /dev/null
+++ b/arch/x86/include/asm/ubsan.h
@@ -0,0 +1,23 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef _ASM_X86_UBSAN_H
+#define _ASM_X86_UBSAN_H
+
+/*
+ * Clang Undefined Behavior Sanitizer trap mode support.
+ */
+#include <linux/bug.h>
+#include <linux/ubsan.h>
+#include <asm/ptrace.h>
+
+/*
+ * UBSAN uses the EAX register to encode its type in the ModRM byte.
+ */
+#define UBSAN_REG	0x40
+
+#ifdef CONFIG_UBSAN_TRAP
+void handle_ubsan_failure(struct pt_regs *regs, u16 insn);
+#else
+static inline void handle_ubsan_failure(struct pt_regs *regs, u16 insn) { return; }
+#endif /* CONFIG_UBSAN_TRAP */
+
+#endif /* _ASM_X86_UBSAN_H */
diff --git a/arch/x86/kernel/Makefile b/arch/x86/kernel/Makefile
index 74077694da7d..fe1d9db27500 100644
--- a/arch/x86/kernel/Makefile
+++ b/arch/x86/kernel/Makefile
@@ -145,6 +145,7 @@ obj-$(CONFIG_UNWINDER_GUESS)		+= unwind_guess.o
 obj-$(CONFIG_AMD_MEM_ENCRYPT)		+= sev.o
 
 obj-$(CONFIG_CFI_CLANG)			+= cfi.o
+obj-$(CONFIG_UBSAN_TRAP)		+= ubsan.o
 
 obj-$(CONFIG_CALL_THUNKS)		+= callthunks.o
 
diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c
index 4fa0b17e5043..aef21287e7ed 100644
--- a/arch/x86/kernel/traps.c
+++ b/arch/x86/kernel/traps.c
@@ -67,6 +67,7 @@
 #include <asm/vdso.h>
 #include <asm/tdx.h>
 #include <asm/cfi.h>
+#include <asm/ubsan.h>
 
 #ifdef CONFIG_X86_64
 #include <asm/x86_init.h>
@@ -91,6 +92,29 @@ __always_inline int is_valid_bugaddr(unsigned long addr)
 	return *(unsigned short *)addr == INSN_UD2;
 }
 
+/*
+ * Check for UD1, UD2, with or without Address Size Override Prefixes instructions.
+ */
+__always_inline u16 get_ud_type(unsigned long addr)
+{
+	u16 insn;
+
+	if (addr < TASK_SIZE_MAX)
+		return BUG_UD_NONE;
+	insn = *(u16 *)addr;
+	if ((insn & INSN_UD_MASK) == INSN_UD2)
+		return BUG_UD2;
+	if ((insn & INSN_ASOP_MASK) == INSN_ASOP)
+		insn = *(u16 *)(++addr);
+
+	// UBSAN encode the failure type in the two bytes after UD1
+	if ((insn & INSN_UD_MASK) == INSN_UD1)
+		return *(u16 *)(addr + LEN_UD1);
+
+	return BUG_UD_NONE;
+}
+
+
 static nokprobe_inline int
 do_trap_no_signal(struct task_struct *tsk, int trapnr, const char *str,
 		  struct pt_regs *regs,	long error_code)
@@ -216,6 +240,7 @@ static inline void handle_invalid_op(struct pt_regs *regs)
 static noinstr bool handle_bug(struct pt_regs *regs)
 {
 	bool handled = false;
+	int ud_type;
 
 	/*
 	 * Normally @regs are unpoisoned by irqentry_enter(), but handle_bug()
@@ -223,7 +248,8 @@ static noinstr bool handle_bug(struct pt_regs *regs)
 	 * irqentry_enter().
 	 */
 	kmsan_unpoison_entry_regs(regs);
-	if (!is_valid_bugaddr(regs->ip))
+	ud_type = get_ud_type(regs->ip);
+	if (ud_type == BUG_UD_NONE)
 		return handled;
 
 	/*
@@ -236,10 +262,14 @@ static noinstr bool handle_bug(struct pt_regs *regs)
 	 */
 	if (regs->flags & X86_EFLAGS_IF)
 		raw_local_irq_enable();
-	if (report_bug(regs->ip, regs) == BUG_TRAP_TYPE_WARN ||
-	    handle_cfi_failure(regs) == BUG_TRAP_TYPE_WARN) {
-		regs->ip += LEN_UD2;
-		handled = true;
+	if (ud_type == INSN_UD2) {
+		if (report_bug(regs->ip, regs) == BUG_TRAP_TYPE_WARN ||
+		    handle_cfi_failure(regs) == BUG_TRAP_TYPE_WARN) {
+			regs->ip += LEN_UD2;
+			handled = true;
+		}
+	} else {
+		handle_ubsan_failure(regs, ud_type);
 	}
 	if (regs->flags & X86_EFLAGS_IF)
 		raw_local_irq_disable();
diff --git a/arch/x86/kernel/ubsan.c b/arch/x86/kernel/ubsan.c
new file mode 100644
index 000000000000..c90e337a1b6a
--- /dev/null
+++ b/arch/x86/kernel/ubsan.c
@@ -0,0 +1,21 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Clang Undefined Behavior Sanitizer trap mode support.
+ */
+#include <linux/bug.h>
+#include <linux/string.h>
+#include <linux/printk.h>
+#include <linux/ubsan.h>
+#include <asm/ptrace.h>
+#include <asm/ubsan.h>
+
+/*
+ * Checks for the information embedded in the UD1 trap instruction
+ * for the UB Sanitizer in order to pass along debugging output.
+ */
+void handle_ubsan_failure(struct pt_regs *regs, u16 type)
+{
+	if ((type & 0xFF) == UBSAN_REG)
+		type >>= 8;
+	pr_crit("%s at %pS\n", report_ubsan_failure(regs, type), (void *)regs->ip);
+}
-- 
2.25.1

.

From: Jacky Huang <ychuang570808@gmail.com>
To: dan.carpenter@linaro.org,
	gregkh@linuxfoundation.org,
	jirislaby@kernel.org
Cc: linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org,
	linux-serial@vger.kernel.org,
	Jacky Huang <ychuang3@nuvoton.com>
Subject: [PATCH v3] tty: serial: ma35d1: Add a NULL check for of_node
Date: Tue, 25 Jun 2024 03:29:19 +0000
Message-Id: <20240625032919.73-1-ychuang570808@gmail.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257639
Newsgroups: org.kernel.vger.linux-kernel,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-serial
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

From: Jacky Huang <ychuang3@nuvoton.com>

The pdev->dev.of_node can be NULL if the "serial" node is absent.
Add a NULL check to return an error in such cases.

v3:
    - Added "Reported-by:" line.
v2:
    - Added "Fixes" line.

Fixes: 930cbf92db01 ("tty: serial: Add Nuvoton ma35d1 serial driver support")
Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
Closes: https://lore.kernel.org/all/8df7ce45-fd58-4235-88f7-43fe7cd67e8f@moroto.mountain/
Signed-off-by: Jacky Huang <ychuang3@nuvoton.com>
---
 drivers/tty/serial/ma35d1_serial.c | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/drivers/tty/serial/ma35d1_serial.c b/drivers/tty/serial/ma35d1_serial.c
index 19f0a305cc43..3b4206e815fe 100644
--- a/drivers/tty/serial/ma35d1_serial.c
+++ b/drivers/tty/serial/ma35d1_serial.c
@@ -688,12 +688,13 @@ static int ma35d1serial_probe(struct platform_device *pdev)
 	struct uart_ma35d1_port *up;
 	int ret = 0;
 
-	if (pdev->dev.of_node) {
-		ret = of_alias_get_id(pdev->dev.of_node, "serial");
-		if (ret < 0) {
-			dev_err(&pdev->dev, "failed to get alias/pdev id, errno %d\n", ret);
-			return ret;
-		}
+	if (!pdev->dev.of_node)
+		return -ENODEV;
+
+	ret = of_alias_get_id(pdev->dev.of_node, "serial");
+	if (ret < 0) {
+		dev_err(&pdev->dev, "failed to get alias/pdev id, errno %d\n", ret);
+		return ret;
 	}
 	up = &ma35d1serial_ports[ret];
 	up->port.line = ret;
-- 
2.34.1

.

From: Lukas Bulwahn <lbulwahn@redhat.com>
To: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>,
	Daniel Baluta <daniel.baluta@nxp.com>,
	Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>,
	Liam Girdwood <lgirdwood@gmail.com>,
	Mark Brown <broonie@kernel.org>,
	linux-sound@vger.kernel.org
Cc: kernel-janitors@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	Lukas Bulwahn <lukas.bulwahn@redhat.com>
Subject: [PATCH] MAINTAINERS: adjust file entries after adding vendor prefix in sound dtbs
Date: Tue, 25 Jun 2024 05:34:19 +0200
Message-ID: <20240625033419.149775-1-lukas.bulwahn@redhat.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257641
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.kernel-janitors,org.kernel.vger.linux-sound
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

From: Lukas Bulwahn <lukas.bulwahn@redhat.com>

Commit ae8fc2948b48 ("ASoC: dt-bindings: add missing vender prefix on
filename") renames a few files in Documentation/devicetree/bindings/sound/,
but misses to adjust the file entries pointing to those files in
MAINTAINERS.

Hence, ./scripts/get_maintainer.pl --self-test=patterns complains about
broken references.

Adjust the file entries in NXP SGTL5000 DRIVER and TEXAS INSTRUMENTS AUDIO
(ASoC/HDA) DRIVERS.

Signed-off-by: Lukas Bulwahn <lukas.bulwahn@redhat.com>
---
 MAINTAINERS | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/MAINTAINERS b/MAINTAINERS
index 77008faf25ee..0ee7a337cfa9 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -16334,7 +16334,7 @@ NXP SGTL5000 DRIVER
 M:	Fabio Estevam <festevam@gmail.com>
 L:	alsa-devel@alsa-project.org (moderated for non-subscribers)
 S:	Maintained
-F:	Documentation/devicetree/bindings/sound/sgtl5000.yaml
+F:	Documentation/devicetree/bindings/sound/fsl,sgtl5000.yaml
 F:	sound/soc/codecs/sgtl5000*
 
 NXP SJA1105 ETHERNET SWITCH DRIVER
@@ -22408,13 +22408,13 @@ M:	Baojun Xu <baojun.xu@ti.com>
 L:	alsa-devel@alsa-project.org (moderated for non-subscribers)
 S:	Maintained
 F:	Documentation/devicetree/bindings/sound/tas2552.txt
-F:	Documentation/devicetree/bindings/sound/tas2562.yaml
-F:	Documentation/devicetree/bindings/sound/tas2770.yaml
-F:	Documentation/devicetree/bindings/sound/tas27xx.yaml
+F:	Documentation/devicetree/bindings/sound/ti,tas2562.yaml
+F:	Documentation/devicetree/bindings/sound/ti,tas2770.yaml
+F:	Documentation/devicetree/bindings/sound/ti,tas27xx.yaml
 F:	Documentation/devicetree/bindings/sound/ti,pcm1681.yaml
 F:	Documentation/devicetree/bindings/sound/ti,pcm3168a.yaml
 F:	Documentation/devicetree/bindings/sound/ti,tlv320*.yaml
-F:	Documentation/devicetree/bindings/sound/tlv320adcx140.yaml
+F:	Documentation/devicetree/bindings/sound/ti,tlv320adcx140.yaml
 F:	Documentation/devicetree/bindings/sound/tlv320aic31xx.txt
 F:	Documentation/devicetree/bindings/sound/tpa6130a2.txt
 F:	include/sound/tas2*.h
-- 
2.45.2

.

From: Changbin Du <changbin.du@huawei.com>
To: Peter Zijlstra <peterz@infradead.org>, Ingo Molnar <mingo@redhat.com>,
	Arnaldo Carvalho de Melo <acme@kernel.org>, Namhyung Kim
	<namhyung@kernel.org>, Nathan Chancellor <nathan@kernel.org>
CC: Mark Rutland <mark.rutland@arm.com>, Alexander Shishkin
	<alexander.shishkin@linux.intel.com>, Jiri Olsa <jolsa@kernel.org>, Ian
 Rogers <irogers@google.com>, Adrian Hunter <adrian.hunter@intel.com>, "Liang,
 Kan" <kan.liang@linux.intel.com>, Nick Desaulniers <ndesaulniers@google.com>,
	Bill Wendling <morbo@google.com>, Justin Stitt <justinstitt@google.com>,
	<linux-perf-users@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
	<llvm@lists.linux.dev>, Changbin Du <changbin.du@huawei.com>
Subject: [PATCH v4 0/5] perf: support specify vdso path in cmdline
Date: Tue, 25 Jun 2024 11:37:35 +0800
Message-ID: <20240625033740.223009-1-changbin.du@huawei.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257642
Newsgroups: org.kernel.vger.linux-kernel,dev.linux.lists.llvm,org.kernel.vger.linux-perf-users
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

The vdso dumped from process memory (in buildid-cache) lacks debugging
info. To annotate vdso symbols with source lines we need specify a
debugging version.

For x86, we can find them from your local build as
'arch/x86/entry/vdso/vdso{32,64}.so.dbg'. Or they may resides in
'/lib/modules/<version>/vdso/vdso{32,64}.so' on Ubuntu. But notice that the
builid has to match. 

If user doesn't specify the path, perf will search them internally as long
as vmlinux.

Below samples are captured on my local build kernel. perf succesfully
find debugging version vdso and we can annotate with source without
specifying vdso path.

$ sudo perf record -a
$ sudo perf report --objdump=llvm-objdump

Samples: 17K of event 'cycles:P', 4000 Hz, Event count (approx.): 1760
__vdso_clock_gettime  /work/linux-host/arch/x86/entry/vdso/vdso64.so.d
Percentâ”‚       movq    -48(%rbp),%rsi
       â”‚       testq   %rax,%rax
       â”‚     ;               return vread_hvclock();
       â”‚       movq    %rax,%rdx
       â”‚     ;               if (unlikely(!vdso_cycles_ok(cycles)))
       â”‚     â†‘ js      eb
       â”‚     â†‘ jmp     74
       â”‚     ;               ts->tv_sec = vdso_ts->sec;
  0.02 â”‚147:   leaq    2(%rbx),%rax
       â”‚       shlq    $4, %rax
       â”‚       addq    %r10,%rax
       â”‚     ;               while ((seq = READ_ONCE(vd->seq)) & 1) {
  9.38 â”‚152:   movl    (%r10),%ecx

When doing cross platform analysis, we need to specify the vdso path if
we are interested in its symbols. At most two vdso can be given.

$ sudo perf report --objdump=llvm-objdump \
      --vdso arch/x86/entry/vdso/vdso64.so.dbg,arch/x86/entry/vdso/vdso32.so.dbg

v4:
  - split the refactoring from the actual change.
v3:
  - update documentation.
v2:
  - now search vdso automatically as long as vmlinux, as suggested by Adrian.
  - remove change 'prefer symsrc_filename for filename'.

Changbin Du (5):
  perf: support specify vdso path in cmdline
  perf: disasm: refactor function dso__disassemble_filename
  perf: disasm: use build_id_path if fallback failed
  perf: symbol: generalize vmlinux path searching
  perf: symbol: try to seach vdso path if not given by user

 tools/perf/Documentation/perf-annotate.txt |   3 +
 tools/perf/Documentation/perf-c2c.txt      |   3 +
 tools/perf/Documentation/perf-inject.txt   |   3 +
 tools/perf/Documentation/perf-report.txt   |   3 +
 tools/perf/Documentation/perf-script.txt   |   3 +
 tools/perf/Documentation/perf-top.txt      |   3 +
 tools/perf/builtin-annotate.c              |   3 +
 tools/perf/builtin-c2c.c                   |   2 +
 tools/perf/builtin-inject.c                |   2 +
 tools/perf/builtin-kallsyms.c              |   2 +
 tools/perf/builtin-probe.c                 |   2 +
 tools/perf/builtin-report.c                |   2 +
 tools/perf/builtin-script.c                |   2 +
 tools/perf/builtin-top.c                   |   4 +
 tools/perf/tests/builtin-test.c            |   3 +-
 tools/perf/util/disasm.c                   | 122 +++++++----
 tools/perf/util/machine.c                  |   4 +-
 tools/perf/util/symbol.c                   | 233 ++++++++++++++++-----
 tools/perf/util/symbol.h                   |   9 +-
 tools/perf/util/symbol_conf.h              |   6 +
 20 files changed, 312 insertions(+), 102 deletions(-)

-- 
2.34.1

.

Return-Path: <linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org>
From: Jisheng Zhang <jszhang@kernel.org>
To: Paul Walmsley <paul.walmsley@sifive.com>,
	Palmer Dabbelt <palmer@dabbelt.com>,
	Albert Ou <aou@eecs.berkeley.edu>
Cc: linux-riscv@lists.infradead.org,
	linux-kernel@vger.kernel.org
Subject: [PATCH 0/4] riscv: uaccess: optimizations
Date: Tue, 25 Jun 2024 12:04:56 +0800
Message-ID: <20240625040500.1788-1-jszhang@kernel.org>
MIME-Version: 1.0
X-BeenThere: linux-riscv@lists.infradead.org
X-Mailman-Version: 2.1.34
List-Id: <linux-riscv.lists.infradead.org>
List-Unsubscribe: <http://lists.infradead.org/mailman/options/linux-riscv>,
 <mailto:linux-riscv-request@lists.infradead.org?subject=unsubscribe>
List-Archive: <http://lists.infradead.org/pipermail/linux-riscv/>
List-Post: <mailto:linux-riscv@lists.infradead.org>
List-Help: <mailto:linux-riscv-request@lists.infradead.org?subject=help>
List-Subscribe: <http://lists.infradead.org/mailman/listinfo/linux-riscv>,
 <mailto:linux-riscv-request@lists.infradead.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: "linux-riscv" <linux-riscv-bounces@lists.infradead.org>
Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org
Xref: photonic.trudheim.com org.infradead.lists.linux-riscv:78968 org.kernel.vger.linux-kernel:1257655
Newsgroups: org.infradead.lists.linux-riscv,org.kernel.vger.linux-kernel
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

This series tries to optimize riscv uaccess in the following way:

patch1 implement the user_access_begin and families, I.E the unsafe
accessors. when a function like strncpy_from_user() is called,
the userspace access protection is disabled and enabled for every
word read. After patch1, the protection is disabled at the beginning
of the copy and enabled at the end.

patch2 is a simple clean up

patch3 uses 'asm goto' for put_user()
patch4 uses 'asm goto output' for get_user()

Both patch3 and patch4 are based on the fact -- 'asm goto' and
'asm goto output'generates noticeably better code since we don't need
to test the error etc, the exception just jumps to the error handling
directly.


Jisheng Zhang (4):
  riscv: implement user_access_begin and families
  riscv: uaccess: use input constraints for ptr of __put_user
  riscv: uaccess: use 'asm goto' for put_user()
  riscv: uaccess: use 'asm goto output' for get_user

 arch/riscv/include/asm/uaccess.h | 201 +++++++++++++++++++++++--------
 1 file changed, 149 insertions(+), 52 deletions(-)

-- 
2.43.0


_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
.

From: Taniya Das <quic_tdas@quicinc.com>
Date: Tue, 25 Jun 2024 10:03:11 +0530
Subject: [PATCH v2] pmdomain: qcom: rpmhpd: Skip retention level for Power
 Domains
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
Message-ID: <20240625-avoid_mxc_retention-v2-1-af9c2f549a5f@quicinc.com>
To: Bjorn Andersson <andersson@kernel.org>,
        Ulf Hansson
	<ulf.hansson@linaro.org>,
        Konrad Dybcio <konrad.dybcio@linaro.org>,
        "Andy
 Gross" <agross@kernel.org>
CC: <linux-arm-msm@vger.kernel.org>, <linux-pm@vger.kernel.org>,
        <linux-kernel@vger.kernel.org>, <quic_jkona@quicinc.com>,
        <quic_imrashai@quicinc.com>, Taniya Das <quic_tdas@quicinc.com>,
        <stable@vger.kernel.org>
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257664
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-arm-msm,org.kernel.vger.linux-pm,org.kernel.vger.stable
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

In the cases where the power domain connected to logics is allowed to
transition from a level(L)-->power collapse(0)-->retention(1) or
vice versa retention(1)-->power collapse(0)-->level(L)  will cause the
logic to lose the configurations. The ARC does not support retention
to collapse transition on MxC rails.

The targets from SM8450 onwards the PLL logics of clock controllers are
connected to MxC rails and the recommended configurations are carried
out during the clock controller probes. The MxC transition as mentioned
above should be skipped to ensure the PLL settings are intact across
clock controller power on & off.

On older targets that do not split MX into MxA and MxC does not collapse
the logic and it is parked always at RETENTION, thus this issue is never
observed on those targets.

Cc: stable@vger.kernel.org # v5.17
Reviewed-by: Bjorn Andersson <andersson@kernel.org>
Signed-off-by: Taniya Das <quic_tdas@quicinc.com>
---
[Changes in v2]: Incorporate the comments in the commit text.
---
 drivers/pmdomain/qcom/rpmhpd.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/drivers/pmdomain/qcom/rpmhpd.c b/drivers/pmdomain/qcom/rpmhpd.c
index de9121ef4216..d2cb4271a1ca 100644
--- a/drivers/pmdomain/qcom/rpmhpd.c
+++ b/drivers/pmdomain/qcom/rpmhpd.c
@@ -40,6 +40,7 @@
  * @addr:		Resource address as looped up using resource name from
  *			cmd-db
  * @state_synced:	Indicator that sync_state has been invoked for the rpmhpd resource
+ * @skip_retention_level: Indicate that retention level should not be used for the power domain
  */
 struct rpmhpd {
 	struct device	*dev;
@@ -56,6 +57,7 @@ struct rpmhpd {
 	const char	*res_name;
 	u32		addr;
 	bool		state_synced;
+	bool            skip_retention_level;
 };
 
 struct rpmhpd_desc {
@@ -173,6 +175,7 @@ static struct rpmhpd mxc = {
 	.pd = { .name = "mxc", },
 	.peer = &mxc_ao,
 	.res_name = "mxc.lvl",
+	.skip_retention_level = true,
 };
 
 static struct rpmhpd mxc_ao = {
@@ -180,6 +183,7 @@ static struct rpmhpd mxc_ao = {
 	.active_only = true,
 	.peer = &mxc,
 	.res_name = "mxc.lvl",
+	.skip_retention_level = true,
 };
 
 static struct rpmhpd nsp = {
@@ -819,6 +823,9 @@ static int rpmhpd_update_level_mapping(struct rpmhpd *rpmhpd)
 		return -EINVAL;
 
 	for (i = 0; i < rpmhpd->level_count; i++) {
+		if (rpmhpd->skip_retention_level && buf[i] == RPMH_REGULATOR_LEVEL_RETENTION)
+			continue;
+
 		rpmhpd->level[i] = buf[i];
 
 		/* Remember the first corner with non-zero level */

---
base-commit: 62c97045b8f720c2eac807a5f38e26c9ed512371
change-id: 20240625-avoid_mxc_retention-b095a761d981

Best regards,
-- 
Taniya Das <quic_tdas@quicinc.com>

.

From: Manikandan Muralidharan <manikandan.m@microchip.com>
To: <linus.walleij@linaro.org>, <brgl@bgdev.pl>, <robh@kernel.org>,
	<krzk+dt@kernel.org>, <conor+dt@kernel.org>, <nicolas.ferre@microchip.com>,
	<alexandre.belloni@bootlin.com>, <claudiu.beznea@tuxon.dev>, <arnd@arndb.de>,
	<durai.manickamkr@microchip.com>, <linux-gpio@vger.kernel.org>,
	<devicetree@vger.kernel.org>, <linux-arm-kernel@lists.infradead.org>,
	<linux-kernel@vger.kernel.org>
CC: <manikandan.m@microchip.com>
Subject: [PATCH v2 0/5] Convert Atmel PIO3 Pinctrl and GPIO bindings to yaml
Date: Tue, 25 Jun 2024 10:05:20 +0530
Message-ID: <20240625043525.279711-1-manikandan.m@microchip.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257665
Newsgroups: org.kernel.vger.linux-kernel,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-gpio
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

This patch series cleans-up the compatible property of PIO3 Pinctrl
and GPIO bank nodes in DT and includes the text to yaml conversion of
Atmel PIO3 Pinctrl and GPIO bindings.

yaml files are validated using the following commands

make dt_binding_check DT_SCHEMA_FILES=<converted_yaml_file>
make CHECK_DTBS=y DT_SCHEMA_FILES=<converted_yaml_file>

changelogs are available in respective patches.

Manikandan Muralidharan (5):
  ARM: dts: microchip: change to simple-mfd from simple-bus for PIO3
    pinumux controller
  ARM: dts: microchip: Remove additional compatible string from PIO3
    pinctrl nodes
  ARM: dts: microchip: sam9x60: Remove additional compatible string from
    GPIO node
  dt-bindings: gpio: convert Atmel GPIO to json-schema
  dt-bindings: pinctrl: Convert Atmel PIO3 pinctrl to json-schema

 .../bindings/gpio/atmel,at91rm9200-gpio.yaml  |  81 ++++++++
 .../devicetree/bindings/gpio/gpio_atmel.txt   |  31 ---
 .../bindings/pinctrl/atmel,at91-pinctrl.txt   | 178 ----------------
 .../pinctrl/atmel,at91rm9200-pinctrl.yaml     | 194 ++++++++++++++++++
 arch/arm/boot/dts/microchip/at91rm9200.dtsi   |   2 +-
 arch/arm/boot/dts/microchip/at91sam9260.dtsi  |   2 +-
 arch/arm/boot/dts/microchip/at91sam9261.dtsi  |   2 +-
 arch/arm/boot/dts/microchip/at91sam9263.dtsi  |   2 +-
 arch/arm/boot/dts/microchip/at91sam9g45.dtsi  |   2 +-
 arch/arm/boot/dts/microchip/at91sam9n12.dtsi  |   2 +-
 arch/arm/boot/dts/microchip/at91sam9rl.dtsi   |   2 +-
 arch/arm/boot/dts/microchip/at91sam9x5.dtsi   |   2 +-
 arch/arm/boot/dts/microchip/sam9x60.dtsi      |  10 +-
 arch/arm/boot/dts/microchip/sama5d3.dtsi      |   2 +-
 arch/arm/boot/dts/microchip/sama5d4.dtsi      |   2 +-
 15 files changed, 290 insertions(+), 224 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/gpio/atmel,at91rm9200-gpio.yaml
 delete mode 100644 Documentation/devicetree/bindings/gpio/gpio_atmel.txt
 delete mode 100644 Documentation/devicetree/bindings/pinctrl/atmel,at91-pinctrl.txt
 create mode 100644 Documentation/devicetree/bindings/pinctrl/atmel,at91rm9200-pinctrl.yaml

-- 
2.25.1

.

From: Chengming Zhou <chengming.zhou@linux.dev>
Subject: [PATCH v3 0/2] mm/zsmalloc: change back to per-size_class lock
Date: Tue, 25 Jun 2024 12:39:03 +0800
Message-Id: <20240625-zsmalloc-lock-mm-everything-v3-0-ad941699cb61@linux.dev>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
To: Minchan Kim <minchan@kernel.org>, 
 Sergey Senozhatsky <senozhatsky@chromium.org>, 
 Andrew Morton <akpm@linux-foundation.org>, 
 Johannes Weiner <hannes@cmpxchg.org>, Yosry Ahmed <yosryahmed@google.com>, 
 Nhat Pham <nphamcs@gmail.com>
Cc: Yu Zhao <yuzhao@google.com>, Takero Funaki <flintglass@gmail.com>, 
 Chengming Zhou <zhouchengming@bytedance.com>, 
 Dan Carpenter <dan.carpenter@linaro.org>, linux-mm@kvack.org, 
 linux-kernel@vger.kernel.org, Chengming Zhou <chengming.zhou@linux.dev>
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257672 org.kvack.linux-mm:201238
Newsgroups: org.kernel.vger.linux-kernel,org.kvack.linux-mm
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Changes in v3:
- Fix error handling again in zswap_pool_create(), thanks Yosry.
- Add Reviewed-by tag from Sergey, thanks.
- Link to v2: https://lore.kernel.org/r/20240621-zsmalloc-lock-mm-everything-v2-0-d30e9cd2b793@linux.dev

Changes in v2:
- Fix error handling in zswap_pool_create(), thanks Dan Carpenter.
- Add Reviewed-by tag from Nhat, thanks.
- Improve changelog to explain about other backends, per Yu Zhao.
- Link to v1: https://lore.kernel.org/r/20240617-zsmalloc-lock-mm-everything-v1-0-5e5081ea11b3@linux.dev

Commit c0547d0b6a4b ("zsmalloc: consolidate zs_pool's migrate_lock and
size_class's locks") changed per-size_class lock to pool spinlock to
prepare reclaim support in zsmalloc. Then reclaim support in zsmalloc
had been dropped in favor of LRU reclaim in zswap, but this locking
change had been left there.

Obviously, the scalability of pool spinlock is worse than per-size_class.
And we have a workaround that using 32 pools in zswap to avoid this
scalability problem, which brings its own problems like memory waste
and more memory fragmentation.

So this series changes back to use per-size_class lock and using testing
data in much stressed situation to verify that we can use only one pool
in zswap. Note we only test and care about the zsmalloc backend, which
makes sense now since zsmalloc became a lot more popular than other
backends.

Testing kernel build (make bzImage -j32) on tmpfs with memory.max=1GB,
and zswap shrinker enabled with 10GB swapfile on ext4.

				real	user    sys
6.10.0-rc3			138.18	1241.38 1452.73
6.10.0-rc3-onepool		149.45	1240.45 1844.69
6.10.0-rc3-onepool-perclass	138.23	1242.37 1469.71

We can see from "sys" column that per-size_class locking with only one
pool in zswap can have near performance with the current 32 pools.

Signed-off-by: Chengming Zhou <chengming.zhou@linux.dev>
---
Chengming Zhou (2):
      mm/zsmalloc: change back to per-size_class lock
      mm/zswap: use only one pool in zswap

 mm/zsmalloc.c | 85 +++++++++++++++++++++++++++++++++++------------------------
 mm/zswap.c    | 61 ++++++++++++++----------------------------
 2 files changed, 70 insertions(+), 76 deletions(-)
---
base-commit: 7c4c5a2ebbcea9031dbb130bb529c8eba025b16a
change-id: 20240617-zsmalloc-lock-mm-everything-387ada6e3ac9

Best regards,
-- 
Chengming Zhou <chengming.zhou@linux.dev>

.

From: Lu Baolu <baolu.lu@linux.intel.com>
To: Joerg Roedel <joro@8bytes.org>,
	Kevin Tian <kevin.tian@intel.com>,
	Yi Liu <yi.l.liu@intel.com>,
	Jacob Pan <jacob.jun.pan@linux.intel.com>
Cc: Will Deacon <will@kernel.org>,
	Robin Murphy <robin.murphy@arm.com>,
	iommu@lists.linux.dev,
	linux-kernel@vger.kernel.org,
	Lu Baolu <baolu.lu@linux.intel.com>,
	Paul Menzel <pmenzel@molgen.mpg.de>
Subject: [PATCH 1/1] iommu/vt-d: Downgrade warning for pre-enabled IR
Date: Tue, 25 Jun 2024 12:39:12 +0800
Message-Id: <20240625043912.258036-1-baolu.lu@linux.intel.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257676
Newsgroups: org.kernel.vger.linux-kernel,dev.linux.lists.iommu
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Emitting a warning is overkill in intel_setup_irq_remapping() since the
interrupt remapping is pre-enabled. For example, there's no guarantee
that kexec will explicitly disable interrupt remapping before booting a
new kernel. As a result, users are seeing warning messages like below
when they kexec boot a kernel, though there is nothing wrong:

 DMAR-IR: IRQ remapping was enabled on dmar18 but we are not in kdump mode
 DMAR-IR: IRQ remapping was enabled on dmar17 but we are not in kdump mode
 DMAR-IR: IRQ remapping was enabled on dmar16 but we are not in kdump mode
 ... ...

Downgrade the severity of this message to avoid user confusion.

CC: Paul Menzel <pmenzel@molgen.mpg.de>
Link: https://lore.kernel.org/linux-iommu/5517f76a-94ad-452c-bae6-34ecc0ec4831@molgen.mpg.de/
Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
---
 drivers/iommu/intel/irq_remapping.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/iommu/intel/irq_remapping.c b/drivers/iommu/intel/irq_remapping.c
index e4a70886678c..e090ca07364b 100644
--- a/drivers/iommu/intel/irq_remapping.c
+++ b/drivers/iommu/intel/irq_remapping.c
@@ -597,8 +597,8 @@ static int intel_setup_irq_remapping(struct intel_iommu *iommu)
 
 	if (ir_pre_enabled(iommu)) {
 		if (!is_kdump_kernel()) {
-			pr_warn("IRQ remapping was enabled on %s but we are not in kdump mode\n",
-				iommu->name);
+			pr_info_once("IRQ remapping was enabled on %s but we are not in kdump mode\n",
+				     iommu->name);
 			clear_ir_pre_enabled(iommu);
 			iommu_disable_irq_remapping(iommu);
 		} else if (iommu_load_old_irte(iommu))
-- 
2.34.1

.

Date: Mon, 24 Jun 2024 22:00:24 -0700 (PDT)
From: Hugh Dickins <hughd@google.com>
To: Andrew Morton <akpm@linux-foundation.org>
cc: Barry Song <21cnbao@gmail.com>, Hugh Dickins <hughd@google.com>, 
    baolin.wang@linux.alibaba.com, chrisl@kernel.org, david@redhat.com, 
    linux-kernel@vger.kernel.org, linux-mm@kvack.org, mhocko@suse.com, 
    ryan.roberts@arm.com, shy828301@gmail.com, surenb@google.com, 
    v-songbaohua@oppo.com, willy@infradead.org, ying.huang@intel.com, 
    yosryahmed@google.com, yuanshuai@oppo.com, yuzhao@google.com
Subject: [PATCH mm-unstable] mm: folio_add_new_anon_rmap() careful
 __folio_set_swapbacked()
Message-ID: <f3599b1d-8323-0dc5-e9e0-fdb3cfc3dd5a@google.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257684 org.kvack.linux-mm:201243
Newsgroups: org.kernel.vger.linux-kernel,org.kvack.linux-mm
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Commit "mm: use folio_add_new_anon_rmap() if folio_test_anon(folio)==
false" has extended folio_add_new_anon_rmap() to use on non-exclusive
folios, already visible to others in swap cache and on LRU.

That renders its non-atomic __folio_set_swapbacked() unsafe: it risks
overwriting concurrent atomic operations on folio->flags, losing bits
added or restoring bits cleared.  Since it's only used in this risky
way when folio_test_locked and !folio_test_anon, many such races are
excluded; but, for example, isolations by folio_test_clear_lru() are
vulnerable, and setting or clearing active.

It could just use the atomic folio_set_swapbacked(); but this function
does try to avoid atomics where it can, so use a branch instead: just
avoid setting swapbacked when it is already set, that is good enough.
(Swapbacked is normally stable once set: lazyfree can undo it, but
only later, when found anon in a page table.)

This fixes a lot of instability under compaction and swapping loads:
assorted "Bad page"s, VM_BUG_ON_FOLIO()s, apparently even page double
frees - though I've not worked out what races could lead to the latter.

Signed-off-by: Hugh Dickins <hughd@google.com>
---
 mm/rmap.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/mm/rmap.c b/mm/rmap.c
index df1a43295c85..5394c1178bf1 100644
--- a/mm/rmap.c
+++ b/mm/rmap.c
@@ -1408,7 +1408,9 @@ void folio_add_new_anon_rmap(struct folio *folio, struct vm_area_struct *vma,
 	VM_WARN_ON_FOLIO(folio_test_hugetlb(folio), folio);
 	VM_BUG_ON_VMA(address < vma->vm_start ||
 			address + (nr << PAGE_SHIFT) > vma->vm_end, vma);
-	__folio_set_swapbacked(folio);
+
+	if (!folio_test_swapbacked(folio))
+		__folio_set_swapbacked(folio);
 	__folio_set_anon(folio, vma, address, exclusive);
 
 	if (likely(!folio_test_large(folio))) {
-- 
2.35.3

.

From: Xiaobo Liu <cppcoffee@gmail.com>
To: valentina.manea.m@gmail.com,
	shuah@kernel.org,
	i@zenithal.me
Cc: gregkh@linuxfoundation.org,
	linux-usb@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	Xiaobo Liu <cppcoffee@gmail.com>
Subject: [PATCH] usb/usbip: remove unnecessary code
Date: Tue, 25 Jun 2024 13:13:21 +0800
Message-Id: <20240625051321.63761-1-cppcoffee@gmail.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257691
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-usb
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Both if branches assign a value to the `cmd` variable.
We can remove the cmd variable and use `pdu->base.command` directly.

Signed-off-by: Xiaobo Liu <cppcoffee@gmail.com>
---
 drivers/usb/usbip/usbip_common.c | 10 +---------
 1 file changed, 1 insertion(+), 9 deletions(-)

diff --git a/drivers/usb/usbip/usbip_common.c b/drivers/usb/usbip/usbip_common.c
index a2b2da125..74a01a265 100644
--- a/drivers/usb/usbip/usbip_common.c
+++ b/drivers/usb/usbip/usbip_common.c
@@ -568,17 +568,9 @@ static void correct_endian_ret_unlink(struct usbip_header_ret_unlink *pdu,
 
 void usbip_header_correct_endian(struct usbip_header *pdu, int send)
 {
-	__u32 cmd = 0;
-
-	if (send)
-		cmd = pdu->base.command;
-
 	correct_endian_basic(&pdu->base, send);
 
-	if (!send)
-		cmd = pdu->base.command;
-
-	switch (cmd) {
+	switch (pdu->base.command) {
 	case USBIP_CMD_SUBMIT:
 		correct_endian_cmd_submit(&pdu->u.cmd_submit, send);
 		break;
-- 
2.34.1

.

From: Udit Kumar <u-kumar1@ti.com>
To: <vigneshr@ti.com>, <nm@ti.com>, <tony@atomide.com>
CC: <gregkh@linuxfoundation.org>, <jirislaby@kernel.org>,
        <ronald.wahl@raritan.com>, <thomas.richard@bootlin.com>,
        <tglx@linutronix.de>, <linux-kernel@vger.kernel.org>,
        <linux-serial@vger.kernel.org>, <ilpo.jarvinen@linux.intel.com>,
        Udit Kumar
	<u-kumar1@ti.com>, <stable@vger.kernel.org>
Subject: [PATCH] serial: 8250_omap: Implementation of Errata i2310 adding fifo level check
Date: Tue, 25 Jun 2024 10:43:38 +0530
Message-ID: <20240625051338.2761599-1-u-kumar1@ti.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257692
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-serial,org.kernel.vger.stable
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

As per Errata i2310[0], Erroneous timeout can be triggered,
if this Erroneous interrupt is not cleared then it may leads
to storm of interrupts.

This patch adding fifo empty check before applying errata.

[0] https://www.ti.com/lit/pdf/sprz536 page 23

Fixes: b67e830d38fa ("serial: 8250: 8250_omap: Fix possible interrupt storm on K3 SoCs")
Cc: stable@vger.kernel.org
Signed-off-by: Udit Kumar <u-kumar1@ti.com>
---
This is check is added on top of errata implementation v3 patch 
https://lore.kernel.org/all/20240619105903.165434-1-u-kumar1@ti.com/


 drivers/tty/serial/8250/8250_omap.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/tty/serial/8250/8250_omap.c b/drivers/tty/serial/8250/8250_omap.c
index ddac0a13cf84..1af9aed99c65 100644
--- a/drivers/tty/serial/8250/8250_omap.c
+++ b/drivers/tty/serial/8250/8250_omap.c
@@ -672,7 +672,8 @@ static irqreturn_t omap8250_irq(int irq, void *dev_id)
 	 * https://www.ti.com/lit/pdf/sprz536
 	 */
 	if (priv->habit & UART_RX_TIMEOUT_QUIRK &&
-		(iir & UART_IIR_RX_TIMEOUT) == UART_IIR_RX_TIMEOUT) {
+	    (iir & UART_IIR_RX_TIMEOUT) == UART_IIR_RX_TIMEOUT &&
+	    serial_port_in(port, UART_OMAP_RX_LVL) == 0) {
 		unsigned char efr2, timeout_h, timeout_l;
 
 		efr2 = serial_in(up, UART_OMAP_EFR2);
-- 
2.34.1

.

From: Shengjiu Wang <shengjiu.wang@nxp.com>
To: lgirdwood@gmail.com,
	broonie@kernel.org,
	robh@kernel.org,
	krzk+dt@kernel.org,
	conor+dt@kernel.org,
	shengjiu.wang@gmail.com,
	linux-sound@vger.kernel.org,
	devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	shawnguo@kernel.org,
	s.hauer@pengutronix.de,
	kernel@pengutronix.de,
	festevam@gmail.com,
	imx@lists.linux.dev,
	linux-arm-kernel@lists.infradead.org
Subject: [PATCH 0/3] arm64: dts: imx8mp: add audio XCVR sound card
Date: Tue, 25 Jun 2024 12:56:52 +0800
Message-Id: <1719291415-1168-1-git-send-email-shengjiu.wang@nxp.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257693
Newsgroups: org.kernel.vger.linux-kernel,dev.linux.lists.imx,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-sound
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Add audio XCVR sound card, which support SPDIF TX & RX,
eARC RX and ARC RX.

Shengjiu Wang (3):
  ASoC: dt-bindings: fsl,xcvr: Adjust the number of interrupts
  arm64: dts: imx8mp: Add audio XCVR device node
  arm64: dts: imx8mp-evk: Add audio XCVR sound card

 .../devicetree/bindings/sound/fsl,xcvr.yaml   |  6 +++--
 arch/arm64/boot/dts/freescale/imx8mp-evk.dts  | 27 +++++++++++++++++++
 arch/arm64/boot/dts/freescale/imx8mp.dtsi     | 26 ++++++++++++++++++
 3 files changed, 57 insertions(+), 2 deletions(-)

-- 
2.34.1

.

From: Shivnandan Kumar <quic_kshivnan@quicinc.com>
To: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>,
        Bjorn Andersson
	<andersson@kernel.org>,
        Konrad Dybcio <konrad.dybcio@linaro.org>
CC: <linux-kernel@vger.kernel.org>, <linux-arm-msm@vger.kernel.org>,
        <quic_rgottimu@quicinc.com>,
        Shivnandan Kumar <quic_kshivnan@quicinc.com>
Subject: [PATCH v2] soc: qcom: icc-bwmon: Add tracepoints in bwmon_intr_thread
Date: Tue, 25 Jun 2024 11:26:11 +0530
Message-ID: <20240625055611.1375273-1-quic_kshivnan@quicinc.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257719
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-arm-msm
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Add tracepoint for tracing the measured traffic in kbps,
up_kbps and down_kbps in bwmon. This information is valuable
for understanding what bwmon hw measures at the system cache
level and at the DDR level which is helpful in debugging
bwmon behavior.

Signed-off-by: Shivnandan Kumar <quic_kshivnan@quicinc.com>
---

v2:
* Fix multiple assignments [Dmitry]
* Fix alignment [Dmitry]

 MAINTAINERS                        |  1 +
 drivers/soc/qcom/icc-bwmon.c       |  6 +++-
 drivers/soc/qcom/trace_icc-bwmon.h | 48 ++++++++++++++++++++++++++++++
 3 files changed, 54 insertions(+), 1 deletion(-)
 create mode 100644 drivers/soc/qcom/trace_icc-bwmon.h

diff --git a/MAINTAINERS b/MAINTAINERS
index 242fc612fbc5..1b410c0183bb 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -18573,6 +18573,7 @@ M:	Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
 L:	linux-arm-msm@vger.kernel.org
 S:	Maintained
 F:	Documentation/devicetree/bindings/interconnect/qcom,msm8998-bwmon.yaml
+F:	drivers/soc/qcom/trace_icc-bwmon.h
 F:	drivers/soc/qcom/icc-bwmon.c

 QUALCOMM IOMMU
diff --git a/drivers/soc/qcom/icc-bwmon.c b/drivers/soc/qcom/icc-bwmon.c
index fb323b3364db..fc391d077d93 100644
--- a/drivers/soc/qcom/icc-bwmon.c
+++ b/drivers/soc/qcom/icc-bwmon.c
@@ -17,6 +17,8 @@
 #include <linux/pm_opp.h>
 #include <linux/regmap.h>
 #include <linux/sizes.h>
+#define CREATE_TRACE_POINTS
+#include "trace_icc-bwmon.h"

 /*
  * The BWMON samples data throughput within 'sample_ms' time. With three
@@ -645,9 +647,10 @@ static irqreturn_t bwmon_intr_thread(int irq, void *dev_id)
 	struct icc_bwmon *bwmon = dev_id;
 	unsigned int irq_enable = 0;
 	struct dev_pm_opp *opp, *target_opp;
-	unsigned int bw_kbps, up_kbps, down_kbps;
+	unsigned int bw_kbps, up_kbps, down_kbps, meas_kbps;

 	bw_kbps = bwmon->target_kbps;
+	meas_kbps = bwmon->target_kbps;

 	target_opp = dev_pm_opp_find_bw_ceil(bwmon->dev, &bw_kbps, 0);
 	if (IS_ERR(target_opp) && PTR_ERR(target_opp) == -ERANGE)
@@ -679,6 +682,7 @@ static irqreturn_t bwmon_intr_thread(int irq, void *dev_id)
 	bwmon_clear_irq(bwmon);
 	bwmon_enable(bwmon, irq_enable);

+	trace_qcom_bwmon_update(dev_name(bwmon->dev), meas_kbps, up_kbps, down_kbps);
 	if (bwmon->target_kbps == bwmon->current_kbps)
 		goto out;

diff --git a/drivers/soc/qcom/trace_icc-bwmon.h b/drivers/soc/qcom/trace_icc-bwmon.h
new file mode 100644
index 000000000000..beb8e6b485a9
--- /dev/null
+++ b/drivers/soc/qcom/trace_icc-bwmon.h
@@ -0,0 +1,48 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (c) 2024 Qualcomm Innovation Center, Inc. All rights reserved.
+ */
+
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM icc_bwmon
+
+#if !defined(_TRACE_ICC_BWMON_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_ICC_BWMON_H
+#include <linux/tracepoint.h>
+
+TRACE_EVENT(qcom_bwmon_update,
+	    TP_PROTO(const char *name,
+		     unsigned int meas_kbps, unsigned int up_kbps, unsigned int down_kbps),
+
+	    TP_ARGS(name, meas_kbps, up_kbps, down_kbps),
+
+	    TP_STRUCT__entry(
+			     __string(name, name)
+			     __field(unsigned int, meas_kbps)
+			     __field(unsigned int, up_kbps)
+			     __field(unsigned int, down_kbps)
+	    ),
+
+	    TP_fast_assign(
+			   __assign_str(name);
+			   __entry->meas_kbps = meas_kbps;
+			   __entry->up_kbps = up_kbps;
+			   __entry->down_kbps = down_kbps;
+	    ),
+
+	    TP_printk("name=%s meas_kbps=%u up_kbps=%u down_kbps=%u",
+		      __get_str(name),
+		      __entry->meas_kbps,
+		      __entry->up_kbps,
+		      __entry->down_kbps)
+);
+
+#endif /* _TRACE_ICC_BWMON_H */
+
+#undef TRACE_INCLUDE_PATH
+#define TRACE_INCLUDE_PATH ../../drivers/soc/qcom/
+
+#undef TRACE_INCLUDE_FILE
+#define TRACE_INCLUDE_FILE trace_icc-bwmon
+
+#include <trace/define_trace.h>
--
2.25.1

.

From: Huacai Chen <chenhuacai@loongson.cn>
To: Huacai Chen <chenhuacai@kernel.org>
Cc: loongarch@lists.linux.dev,
	Xuefeng Li <lixuefeng@loongson.cn>,
	Guo Ren <guoren@kernel.org>,
	Xuerui Wang <kernel@xen0n.name>,
	Jiaxun Yang <jiaxun.yang@flygoat.com>,
	linux-kernel@vger.kernel.org,
	loongson-kernel@lists.loongnix.cn,
	Huacai Chen <chenhuacai@loongson.cn>
Subject: [PATCH] LoongArch: Automatically disable KASLR for hibernation
Date: Tue, 25 Jun 2024 14:16:31 +0800
Message-ID: <20240625061631.3461764-1-chenhuacai@loongson.cn>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257728
Newsgroups: org.kernel.vger.linux-kernel,dev.linux.lists.loongarch
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Hibernation assumes the memory layout after resume be the same as that
before sleep, so it expects the kernel is loaded at the same position.
To achieve this goal we automatically disable KASLR if user explicitly
requests hibernation via the "resume=" command line. Since "nohibernate"
and "noresume" have higher priorities than "resume=", we only disable
KASLR if there is no "nohibernate" and "noresume".

Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
---
 arch/loongarch/kernel/relocate.c | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/arch/loongarch/kernel/relocate.c b/arch/loongarch/kernel/relocate.c
index 1acfa704c8d0..6834d627ff20 100644
--- a/arch/loongarch/kernel/relocate.c
+++ b/arch/loongarch/kernel/relocate.c
@@ -123,6 +123,32 @@ static inline __init bool kaslr_disabled(void)
 	if (str == boot_command_line || (str > boot_command_line && *(str - 1) == ' '))
 		return true;
 
+#ifdef CONFIG_HIBERNATION
+	str = strstr(builtin_cmdline, "nohibernate");
+	if (str == builtin_cmdline || (str > builtin_cmdline && *(str - 1) == ' '))
+		return false;
+
+	str = strstr(boot_command_line, "nohibernate");
+	if (str == boot_command_line || (str > boot_command_line && *(str - 1) == ' '))
+		return false;
+
+	str = strstr(builtin_cmdline, "noresume");
+	if (str == builtin_cmdline || (str > builtin_cmdline && *(str - 1) == ' '))
+		return false;
+
+	str = strstr(boot_command_line, "noresume");
+	if (str == boot_command_line || (str > boot_command_line && *(str - 1) == ' '))
+		return false;
+
+	str = strstr(builtin_cmdline, "resume=");
+	if (str == builtin_cmdline || (str > builtin_cmdline && *(str - 1) == ' '))
+		return true;
+
+	str = strstr(boot_command_line, "resume=");
+	if (str == boot_command_line || (str > boot_command_line && *(str - 1) == ' '))
+		return true;
+#endif
+
 	return false;
 }
 
-- 
2.43.0

.

From: Jacky Huang <ychuang570808@gmail.com>
To: dan.carpenter@linaro.org,
	gregkh@linuxfoundation.org,
	jirislaby@kernel.org
Cc: linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org,
	linux-serial@vger.kernel.org,
	Jacky Huang <ychuang3@nuvoton.com>
Subject: [PATCH v4] tty: serial: ma35d1: Add a NULL check for of_node
Date: Tue, 25 Jun 2024 06:41:28 +0000
Message-Id: <20240625064128.127-1-ychuang570808@gmail.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257743
Newsgroups: org.kernel.vger.linux-kernel,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-serial
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

From: Jacky Huang <ychuang3@nuvoton.com>

The pdev->dev.of_node can be NULL if the "serial" node is absent.
Add a NULL check to return an error in such cases.

Fixes: 930cbf92db01 ("tty: serial: Add Nuvoton ma35d1 serial driver support")
Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
Closes: https://lore.kernel.org/all/8df7ce45-fd58-4235-88f7-43fe7cd67e8f@moroto.mountain/
Signed-off-by: Jacky Huang <ychuang3@nuvoton.com>
---
  V3 -> V4: Move the version info lines to the correct position.
  V2 -> V3: Added the "Reported-by:" line.
  V1 -> V2: Added the "Fixes" line.

 drivers/tty/serial/ma35d1_serial.c | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/drivers/tty/serial/ma35d1_serial.c b/drivers/tty/serial/ma35d1_serial.c
index 19f0a305cc43..3b4206e815fe 100644
--- a/drivers/tty/serial/ma35d1_serial.c
+++ b/drivers/tty/serial/ma35d1_serial.c
@@ -688,12 +688,13 @@ static int ma35d1serial_probe(struct platform_device *pdev)
 	struct uart_ma35d1_port *up;
 	int ret = 0;
 
-	if (pdev->dev.of_node) {
-		ret = of_alias_get_id(pdev->dev.of_node, "serial");
-		if (ret < 0) {
-			dev_err(&pdev->dev, "failed to get alias/pdev id, errno %d\n", ret);
-			return ret;
-		}
+	if (!pdev->dev.of_node)
+		return -ENODEV;
+
+	ret = of_alias_get_id(pdev->dev.of_node, "serial");
+	if (ret < 0) {
+		dev_err(&pdev->dev, "failed to get alias/pdev id, errno %d\n", ret);
+		return ret;
 	}
 	up = &ma35d1serial_ports[ret];
 	up->port.line = ret;
-- 
2.34.1

.

From: Kanak Shilledar <kanakshilledar@gmail.com>
To: 
Cc: Kanak Shilledar <kanakshilledar@gmail.com>,
	Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>,
	Andi Shyti <andi.shyti@kernel.org>,
	Rob Herring <robh@kernel.org>,
	Krzysztof Kozlowski <krzk+dt@kernel.org>,
	Conor Dooley <conor+dt@kernel.org>,
	Vladimir Zapolskiy <vz@mleia.com>,
	linux-i2c@vger.kernel.org,
	devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org
Subject: [PATCH v3] dt-bindings: i2c: nxp,lpc1788-i2c: convert to dt schema
Date: Tue, 25 Jun 2024 12:29:32 +0530
Message-ID: <20240625065939.6146-1-kanakshilledar@gmail.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257755
Newsgroups: org.kernel.vger.linux-kernel,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-i2c
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Convert the NXP I2C controller for LPC2xxx/178x/18xx/43xx
to newer DT schema. Created DT schema based on the .txt file
which had `compatible`, `reg`, `interrupts`, `clocks`,
`#address-cells` and `#size-cells` as required properties.

Additional changes to the original .txt binding
- added maintainer from the MAINTAINERS file.
- added resets property required by the corresponding DTS files.

Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Signed-off-by: Kanak Shilledar <kanakshilledar@gmail.com>
---
Changes in v3:
- removed "address-cells" and "size-cells" as per feedback.
Changes in v2:
- updated subject line to include device name.
- changed removed description from properties except `clock-frequency`.
- updated MAINTAINERS to track this file.
---
 .../devicetree/bindings/i2c/i2c-lpc2k.txt     | 33 ------------
 .../bindings/i2c/nxp,lpc1788-i2c.yaml         | 54 +++++++++++++++++++
 MAINTAINERS                                   |  2 +-
 3 files changed, 55 insertions(+), 34 deletions(-)
 delete mode 100644 Documentation/devicetree/bindings/i2c/i2c-lpc2k.txt
 create mode 100644 Documentation/devicetree/bindings/i2c/nxp,lpc1788-i2c.yaml

diff --git a/Documentation/devicetree/bindings/i2c/i2c-lpc2k.txt b/Documentation/devicetree/bindings/i2c/i2c-lpc2k.txt
deleted file mode 100644
index 4101aa621ad4..000000000000
--- a/Documentation/devicetree/bindings/i2c/i2c-lpc2k.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-NXP I2C controller for LPC2xxx/178x/18xx/43xx
-
-Required properties:
- - compatible: must be "nxp,lpc1788-i2c"
- - reg: physical address and length of the device registers
- - interrupts: a single interrupt specifier
- - clocks: clock for the device
- - #address-cells: should be <1>
- - #size-cells: should be <0>
-
-Optional properties:
-- clock-frequency: the desired I2C bus clock frequency in Hz; in
-  absence of this property the default value is used (100 kHz).
-
-Example:
-i2c0: i2c@400a1000 {
-	compatible = "nxp,lpc1788-i2c";
-	reg = <0x400a1000 0x1000>;
-	interrupts = <18>;
-	clocks = <&ccu1 CLK_APB1_I2C0>;
-	#address-cells = <1>;
-	#size-cells = <0>;
-};
-
-&i2c0 {
-	clock-frequency = <400000>;
-
-	lm75@48 {
-		compatible = "nxp,lm75";
-		reg = <0x48>;
-	};
-};
-
diff --git a/Documentation/devicetree/bindings/i2c/nxp,lpc1788-i2c.yaml b/Documentation/devicetree/bindings/i2c/nxp,lpc1788-i2c.yaml
new file mode 100644
index 000000000000..9a1b95c2d03c
--- /dev/null
+++ b/Documentation/devicetree/bindings/i2c/nxp,lpc1788-i2c.yaml
@@ -0,0 +1,54 @@
+# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/i2c/nxp,lpc1788-i2c.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: NXP I2C controller for LPC2xxx/178x/18xx/43xx
+
+maintainers:
+  - Vladimir Zapolskiy <vz@mleia.com>
+
+allOf:
+  - $ref: /schemas/i2c/i2c-controller.yaml#
+
+properties:
+  compatible:
+    const: nxp,lpc1788-i2c
+
+  reg:
+    maxItems: 1
+
+  interrupts:
+    maxItems: 1
+
+  clocks:
+    maxItems: 1
+
+  clock-frequency:
+    description: the desired I2C bus clock frequency in Hz
+    default: 100000
+
+  resets:
+    maxItems: 1
+
+required:
+  - compatible
+  - reg
+  - interrupts
+  - clocks
+
+unevaluatedProperties: false
+
+examples:
+  - |
+    #include "dt-bindings/clock/lpc18xx-ccu.h"
+
+    i2c@400a1000 {
+        compatible = "nxp,lpc1788-i2c";
+        reg = <0x400a1000 0x1000>;
+        interrupts = <18>;
+        clocks = <&ccu1 CLK_APB1_I2C0>;
+        #address-cells = <1>;
+        #size-cells = <0>;
+    };
diff --git a/MAINTAINERS b/MAINTAINERS
index cf9c9221c388..920e4f28b5ae 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2374,7 +2374,7 @@ ARM/LPC18XX ARCHITECTURE
 M:	Vladimir Zapolskiy <vz@mleia.com>
 L:	linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 S:	Maintained
-F:	Documentation/devicetree/bindings/i2c/i2c-lpc2k.txt
+F:	Documentation/devicetree/bindings/i2c/nxp,lpc1788-i2c.yaml
 F:	arch/arm/boot/dts/nxp/lpc/lpc43*
 F:	drivers/i2c/busses/i2c-lpc2k.c
 F:	drivers/memory/pl172.c
-- 
2.45.2

.

From: Cheng Ming Lin <linchengming884@gmail.com>
To: miquel.raynal@bootlin.com,
	dwmw2@infradead.org,
	computersforpeace@gmail.com,
	marek.vasut@gmail.com,
	vigneshr@ti.com,
	linux-mtd@lists.infradead.org,
	linux-kernel@vger.kernel.org
Cc: richard@nod.at,
	alvinzhou@mxic.com.tw,
	leoyu@mxic.com.tw,
	Cheng Ming Lin <chengminglin@mxic.com.tw>,
	stable@vger.kernel.org,
	Jaime Liao <jaimeliao@mxic.com.tw>
Subject: [PATCH v5.10.y] mtd: spinand: macronix: Add support for serial NAND flash
Date: Tue, 25 Jun 2024 15:00:29 +0800
Message-Id: <20240625070029.61703-1-linchengming884@gmail.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257756
Newsgroups: org.kernel.vger.linux-kernel,org.infradead.lists.linux-mtd,org.kernel.vger.stable
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

From: Cheng Ming Lin <chengminglin@mxic.com.tw>

Macronix NAND Flash devices are available in different configurations
and densities.

MX"35" means SPI NAND
MX35"LF"/"UF" , LF means 3V and UF meands 1.8V
MX35LF"2G" , 2G means 2Gbits
MX35LF2G"E4"/"24"/"14",
E4 means internal ECC and Quad I/O(x4)
24 means 8-bit ecc requirement and Quad I/O(x4)
14 means 4-bit ecc requirement and Quad I/O(x4)

MX35LF2G14AC is 3V 2Gbit serial NAND flash device
(without on-die ECC)
https://www.mxic.com.tw/Lists/Datasheet/Attachments/7926/MX35LF2G14AC,%203V,%202Gb,%20v1.1.pdf

MX35UF4G24AD/MX35UF2G24AD/MX35UF1G24AD is 1.8V 4Gbit serial NAND flash device
(without on-die ECC)
https://www.mxic.com.tw/Lists/Datasheet/Attachments/7980/MX35UF4G24AD,%201.8V,%204Gb,%20v0.00.pdf

MX35UF4GE4AD/MX35UF2GE4AD/MX35UF1GE4AD are 1.8V 4G/2Gbit serial
NAND flash device with 8-bit on-die ECC
https://www.mxic.com.tw/Lists/Datasheet/Attachments/7983/MX35UF4GE4AD,%201.8V,%204Gb,%20v0.00.pdf

MX35UF2GE4AC/MX35UF1GE4AC are 1.8V 2G/1Gbit serial
NAND flash device with 8-bit on-die ECC
https://www.mxic.com.tw/Lists/Datasheet/Attachments/7974/MX35UF2GE4AC,%201.8V,%202Gb,%20v1.0.pdf

MX35UF2G14AC/MX35UF1G14AC are 1.8V 2G/1Gbit serial
NAND flash device (without on-die ECC)
https://www.mxic.com.tw/Lists/Datasheet/Attachments/7931/MX35UF2G14AC,%201.8V,%202Gb,%20v1.1.pdf

Validated via normal(default) and QUAD mode by read, erase, read back,
on Xilinx Zynq PicoZed FPGA board which included Macronix
SPI Host(drivers/spi/spi-mxic.c).

Cc: stable@vger.kernel.org # 5.10.y
Signed-off-by: Cheng Ming Lin <chengminglin@mxic.com.tw>
Signed-off-by: Jaime Liao <jaimeliao@mxic.com.tw>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Link: https://lore.kernel.org/linux-mtd/1621475108-22523-1-git-send-email-jaimeliao@mxic.com.tw
---
 drivers/mtd/nand/spi/macronix.c | 110 ++++++++++++++++++++++++++++++++
 1 file changed, 110 insertions(+)

diff --git a/drivers/mtd/nand/spi/macronix.c b/drivers/mtd/nand/spi/macronix.c
index 8bd3f6bf9b10..e42524687b5c 100644
--- a/drivers/mtd/nand/spi/macronix.c
+++ b/drivers/mtd/nand/spi/macronix.c
@@ -139,6 +139,116 @@ static const struct spinand_info macronix_spinand_table[] = {
 		     0,
 		     SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
 				     mx35lf1ge4ab_ecc_get_status)),
+	SPINAND_INFO("MX35LF2G14AC",
+		     SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x20),
+		     NAND_MEMORG(1, 2048, 64, 64, 2048, 40, 2, 1, 1),
+		     NAND_ECCREQ(4, 512),
+		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
+					      &write_cache_variants,
+					      &update_cache_variants),
+		     SPINAND_HAS_QE_BIT,
+		     SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
+				     mx35lf1ge4ab_ecc_get_status)),
+	SPINAND_INFO("MX35UF4G24AD",
+		     SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xb5),
+		     NAND_MEMORG(1, 4096, 256, 64, 2048, 40, 2, 1, 1),
+		     NAND_ECCREQ(8, 512),
+		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
+					      &write_cache_variants,
+					      &update_cache_variants),
+		     SPINAND_HAS_QE_BIT,
+		     SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
+				     mx35lf1ge4ab_ecc_get_status)),
+	SPINAND_INFO("MX35UF4GE4AD",
+		     SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xb7),
+		     NAND_MEMORG(1, 4096, 256, 64, 2048, 40, 1, 1, 1),
+		     NAND_ECCREQ(8, 512),
+		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
+					      &write_cache_variants,
+					      &update_cache_variants),
+		     SPINAND_HAS_QE_BIT,
+		     SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
+				     mx35lf1ge4ab_ecc_get_status)),
+	SPINAND_INFO("MX35UF2G14AC",
+		     SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xa0),
+		     NAND_MEMORG(1, 2048, 64, 64, 2048, 40, 2, 1, 1),
+		     NAND_ECCREQ(4, 512),
+		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
+					      &write_cache_variants,
+					      &update_cache_variants),
+		     SPINAND_HAS_QE_BIT,
+		     SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
+				     mx35lf1ge4ab_ecc_get_status)),
+	SPINAND_INFO("MX35UF2G24AD",
+		     SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xa4),
+		     NAND_MEMORG(1, 2048, 128, 64, 2048, 40, 2, 1, 1),
+		     NAND_ECCREQ(8, 512),
+		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
+					      &write_cache_variants,
+					      &update_cache_variants),
+		     SPINAND_HAS_QE_BIT,
+		     SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
+				     mx35lf1ge4ab_ecc_get_status)),
+	SPINAND_INFO("MX35UF2GE4AD",
+		     SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xa6),
+		     NAND_MEMORG(1, 2048, 128, 64, 2048, 40, 1, 1, 1),
+		     NAND_ECCREQ(8, 512),
+		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
+					      &write_cache_variants,
+					      &update_cache_variants),
+		     SPINAND_HAS_QE_BIT,
+		     SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
+				     mx35lf1ge4ab_ecc_get_status)),
+	SPINAND_INFO("MX35UF2GE4AC",
+		     SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xa2),
+		     NAND_MEMORG(1, 2048, 64, 64, 2048, 40, 1, 1, 1),
+		     NAND_ECCREQ(4, 512),
+		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
+					      &write_cache_variants,
+					      &update_cache_variants),
+		     SPINAND_HAS_QE_BIT,
+		     SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
+				     mx35lf1ge4ab_ecc_get_status)),
+	SPINAND_INFO("MX35UF1G14AC",
+		     SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x90),
+		     NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 1),
+		     NAND_ECCREQ(4, 512),
+		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
+					      &write_cache_variants,
+					      &update_cache_variants),
+		     SPINAND_HAS_QE_BIT,
+		     SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
+				     mx35lf1ge4ab_ecc_get_status)),
+	SPINAND_INFO("MX35UF1G24AD",
+		     SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x94),
+		     NAND_MEMORG(1, 2048, 128, 64, 1024, 20, 1, 1, 1),
+		     NAND_ECCREQ(8, 512),
+		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
+					      &write_cache_variants,
+					      &update_cache_variants),
+		     SPINAND_HAS_QE_BIT,
+		     SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
+				     mx35lf1ge4ab_ecc_get_status)),
+	SPINAND_INFO("MX35UF1GE4AD",
+		     SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x96),
+		     NAND_MEMORG(1, 2048, 128, 64, 1024, 20, 1, 1, 1),
+		     NAND_ECCREQ(8, 512),
+		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
+					      &write_cache_variants,
+					      &update_cache_variants),
+		     SPINAND_HAS_QE_BIT,
+		     SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
+				     mx35lf1ge4ab_ecc_get_status)),
+	SPINAND_INFO("MX35UF1GE4AC",
+		     SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x92),
+		     NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 1),
+		     NAND_ECCREQ(4, 512),
+		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
+					      &write_cache_variants,
+					      &update_cache_variants),
+		     SPINAND_HAS_QE_BIT,
+		     SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
+				     mx35lf1ge4ab_ecc_get_status)),
 	SPINAND_INFO("MX31LF1GE4BC",
 		     SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x1e),
 		     NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 1),
-- 
2.25.1

.

From: Cheng Ming Lin <linchengming884@gmail.com>
To: miquel.raynal@bootlin.com,
	dwmw2@infradead.org,
	computersforpeace@gmail.com,
	marek.vasut@gmail.com,
	vigneshr@ti.com,
	linux-mtd@lists.infradead.org,
	linux-kernel@vger.kernel.org
Cc: richard@nod.at,
	alvinzhou@mxic.com.tw,
	leoyu@mxic.com.tw,
	Cheng Ming Lin <chengminglin@mxic.com.tw>,
	stable@vger.kernel.org,
	Jaime Liao <jaimeliao@mxic.com.tw>
Subject: [PATCH v5.4.y v3] mtd: spinand: macronix: Add support for serial NAND flash
Date: Tue, 25 Jun 2024 15:01:42 +0800
Message-Id: <20240625070142.61782-1-linchengming884@gmail.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257760
Newsgroups: org.kernel.vger.linux-kernel,org.infradead.lists.linux-mtd,org.kernel.vger.stable
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

From: Cheng Ming Lin <chengminglin@mxic.com.tw>

Macronix NAND Flash devices are available in different configurations
and densities.

MX"35" means SPI NAND
MX35"LF"/"UF" , LF means 3V and UF meands 1.8V
MX35LF"2G" , 2G means 2Gbits
MX35LF2G"E4"/"24"/"14",
E4 means internal ECC and Quad I/O(x4)
24 means 8-bit ecc requirement and Quad I/O(x4)
14 means 4-bit ecc requirement and Quad I/O(x4)

MX35LF2G14AC is 3V 2Gbit serial NAND flash device
(without on-die ECC)
https://www.mxic.com.tw/Lists/Datasheet/Attachments/7926/MX35LF2G14AC,%203V,%202Gb,%20v1.1.pdf

MX35UF4G24AD/MX35UF2G24AD/MX35UF1G24AD is 1.8V 4Gbit serial NAND flash device
(without on-die ECC)
https://www.mxic.com.tw/Lists/Datasheet/Attachments/7980/MX35UF4G24AD,%201.8V,%204Gb,%20v0.00.pdf

MX35UF4GE4AD/MX35UF2GE4AD/MX35UF1GE4AD are 1.8V 4G/2Gbit serial
NAND flash device with 8-bit on-die ECC
https://www.mxic.com.tw/Lists/Datasheet/Attachments/7983/MX35UF4GE4AD,%201.8V,%204Gb,%20v0.00.pdf

MX35UF2GE4AC/MX35UF1GE4AC are 1.8V 2G/1Gbit serial
NAND flash device with 8-bit on-die ECC
https://www.mxic.com.tw/Lists/Datasheet/Attachments/7974/MX35UF2GE4AC,%201.8V,%202Gb,%20v1.0.pdf

MX35UF2G14AC/MX35UF1G14AC are 1.8V 2G/1Gbit serial
NAND flash device (without on-die ECC)
https://www.mxic.com.tw/Lists/Datasheet/Attachments/7931/MX35UF2G14AC,%201.8V,%202Gb,%20v1.1.pdf

Validated via normal(default) and QUAD mode by read, erase, read back,
on Xilinx Zynq PicoZed FPGA board which included Macronix
SPI Host(drivers/spi/spi-mxic.c).

Cc: stable@vger.kernel.org # 5.4.y
Signed-off-by: Cheng Ming Lin <chengminglin@mxic.com.tw>
Signed-off-by: Jaime Liao <jaimeliao@mxic.com.tw>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Link: https://lore.kernel.org/linux-mtd/1621475108-22523-1-git-send-email-jaimeliao@mxic.com.tw
---
 drivers/mtd/nand/spi/macronix.c | 99 +++++++++++++++++++++++++++++++++
 1 file changed, 99 insertions(+)

diff --git a/drivers/mtd/nand/spi/macronix.c b/drivers/mtd/nand/spi/macronix.c
index f18c6cfe8ff5..a38d0de5f765 100644
--- a/drivers/mtd/nand/spi/macronix.c
+++ b/drivers/mtd/nand/spi/macronix.c
@@ -132,6 +132,105 @@ static const struct spinand_info macronix_spinand_table[] = {
 					      &update_cache_variants),
 		     SPINAND_HAS_QE_BIT,
 		     SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout, NULL)),
+	SPINAND_INFO("MX35LF2G14AC", 0x20,
+		     NAND_MEMORG(1, 2048, 64, 64, 2048, 40, 2, 1, 1),
+		     NAND_ECCREQ(4, 512),
+		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
+					      &write_cache_variants,
+					      &update_cache_variants),
+		     SPINAND_HAS_QE_BIT,
+		     SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
+				     mx35lf1ge4ab_ecc_get_status)),
+	SPINAND_INFO("MX35UF4G24AD", 0xb5,
+		     NAND_MEMORG(1, 4096, 256, 64, 2048, 40, 2, 1, 1),
+		     NAND_ECCREQ(8, 512),
+		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
+					      &write_cache_variants,
+					      &update_cache_variants),
+		     SPINAND_HAS_QE_BIT,
+		     SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
+				     mx35lf1ge4ab_ecc_get_status)),
+	SPINAND_INFO("MX35UF4GE4AD", 0xb7,
+		     NAND_MEMORG(1, 4096, 256, 64, 2048, 40, 1, 1, 1),
+		     NAND_ECCREQ(8, 512),
+		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
+					      &write_cache_variants,
+					      &update_cache_variants),
+		     SPINAND_HAS_QE_BIT,
+		     SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
+				     mx35lf1ge4ab_ecc_get_status)),
+	SPINAND_INFO("MX35UF2G14AC", 0xa0,
+		     NAND_MEMORG(1, 2048, 64, 64, 2048, 40, 2, 1, 1),
+		     NAND_ECCREQ(4, 512),
+		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
+					      &write_cache_variants,
+					      &update_cache_variants),
+		     SPINAND_HAS_QE_BIT,
+		     SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
+				     mx35lf1ge4ab_ecc_get_status)),
+	SPINAND_INFO("MX35UF2G24AD", 0xa4,
+		     NAND_MEMORG(1, 2048, 128, 64, 2048, 40, 2, 1, 1),
+		     NAND_ECCREQ(8, 512),
+		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
+					      &write_cache_variants,
+					      &update_cache_variants),
+		     SPINAND_HAS_QE_BIT,
+		     SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
+				     mx35lf1ge4ab_ecc_get_status)),
+	SPINAND_INFO("MX35UF2GE4AD", 0xa6,
+		     NAND_MEMORG(1, 2048, 128, 64, 2048, 40, 1, 1, 1),
+		     NAND_ECCREQ(8, 512),
+		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
+					      &write_cache_variants,
+					      &update_cache_variants),
+		     SPINAND_HAS_QE_BIT,
+		     SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
+				     mx35lf1ge4ab_ecc_get_status)),
+	SPINAND_INFO("MX35UF2GE4AC", 0xa2,
+		     NAND_MEMORG(1, 2048, 64, 64, 2048, 40, 1, 1, 1),
+		     NAND_ECCREQ(4, 512),
+		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
+					      &write_cache_variants,
+					      &update_cache_variants),
+		     SPINAND_HAS_QE_BIT,
+		     SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
+				     mx35lf1ge4ab_ecc_get_status)),
+	SPINAND_INFO("MX35UF1G14AC", 0x90,
+		     NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 1),
+		     NAND_ECCREQ(4, 512),
+		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
+					      &write_cache_variants,
+					      &update_cache_variants),
+		     SPINAND_HAS_QE_BIT,
+		     SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
+				     mx35lf1ge4ab_ecc_get_status)),
+	SPINAND_INFO("MX35UF1G24AD", 0x94,
+		     NAND_MEMORG(1, 2048, 128, 64, 1024, 20, 1, 1, 1),
+		     NAND_ECCREQ(8, 512),
+		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
+					      &write_cache_variants,
+					      &update_cache_variants),
+		     SPINAND_HAS_QE_BIT,
+		     SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
+				     mx35lf1ge4ab_ecc_get_status)),
+	SPINAND_INFO("MX35UF1GE4AD", 0x96,
+		     NAND_MEMORG(1, 2048, 128, 64, 1024, 20, 1, 1, 1),
+		     NAND_ECCREQ(8, 512),
+		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
+					      &write_cache_variants,
+					      &update_cache_variants),
+		     SPINAND_HAS_QE_BIT,
+		     SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
+				     mx35lf1ge4ab_ecc_get_status)),
+	SPINAND_INFO("MX35UF1GE4AC", 0x92,
+		     NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 1),
+		     NAND_ECCREQ(4, 512),
+		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
+					      &write_cache_variants,
+					      &update_cache_variants),
+		     SPINAND_HAS_QE_BIT,
+		     SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
+				     mx35lf1ge4ab_ecc_get_status)),
 };
 
 static int macronix_spinand_detect(struct spinand_device *spinand)
-- 
2.25.1

.

X-QQ-Originating-IP: YsTpw8TXEcRnmEuuIyqSvNkkmr5rT8eEDSQNnxCh5hw=
X-QQ-GoodBg: 1
X-BIZMAIL-ID: 1584190134348375892
From: tuhaowen <tuhaowen@uniontech.com>
To: stern@rowland.harvard.edu,
	gregkh@linuxfoundation.org
Cc: linux-usb@vger.kernel.org,
	usb-storage@lists.one-eyed-alien.net,
	linux-kernel@vger.kernel.org,
	wangyuli@uniontech.com,
	tuhaowen <tuhaowen@uniontech.com>
Subject: [PATCH] drv/usb: Fix the issue with Realtek USB wireless adapter AC650
Date: Tue, 25 Jun 2024 15:07:24 +0800
Message-Id: <20240625070724.22044-1-tuhaowen@uniontech.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-QQ-SENDSIZE: 520
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257771
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-usb
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Due to the dual-mode functionality of the Realtek USB wireless
adapter AC650, it initially presents itself as a flash drive
before the driver is installed.

In Linux, multi-state devices are recognized as storage devices
on startup because the driver has not yet been loaded.

As a result, the AC650 is identified as a DISK device at boot,
preventing the use of its WLAN mode. The issue can only be
resolved by unplugging and replugging the adapter.

Signed-off-by: tuhaowen <tuhaowen@uniontech.com>
---
 drivers/usb/storage/unusual_devs.h | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h
index fd68204374f2..f660d3e52436 100644
--- a/drivers/usb/storage/unusual_devs.h
+++ b/drivers/usb/storage/unusual_devs.h
@@ -1487,6 +1487,12 @@ UNUSUAL_DEV( 0x0bc2, 0x3332, 0x0000, 0x9999,
 		USB_SC_DEVICE, USB_PR_DEVICE, NULL,
 		US_FL_NO_WP_DETECT ),
 
+UNUSUAL_DEV(0x0bda, 0x1a2b, 0x0000, 0x9999,
+		"Realtek",
+		"USB Network Device",
+		USB_SC_DEVICE, USB_PR_DEVICE, NULL,
+		US_FL_IGNORE_DEVICE),
+
 UNUSUAL_DEV(  0x0d49, 0x7310, 0x0000, 0x9999,
 		"Maxtor",
 		"USB to SATA",
-- 
2.20.1

.

From: Cheng Ming Lin <linchengming884@gmail.com>
To: miquel.raynal@bootlin.com,
	dwmw2@infradead.org,
	computersforpeace@gmail.com,
	marek.vasut@gmail.com,
	vigneshr@ti.com,
	linux-mtd@lists.infradead.org,
	linux-kernel@vger.kernel.org
Cc: richard@nod.at,
	alvinzhou@mxic.com.tw,
	leoyu@mxic.com.tw,
	Cheng Ming Lin <chengminglin@mxic.com.tw>,
	stable@vger.kernel.org,
	Jaime Liao <jaimeliao@mxic.com.tw>
Subject: [PATCH v5.10.y v2] mtd: spinand: macronix: Add support for serial NAND flash
Date: Tue, 25 Jun 2024 15:09:37 +0800
Message-Id: <20240625070937.62021-1-linchengming884@gmail.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257777
Newsgroups: org.kernel.vger.linux-kernel,org.infradead.lists.linux-mtd,org.kernel.vger.stable
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

From: Cheng Ming Lin <chengminglin@mxic.com.tw>

[ Upstream commit c374839f9b4475173e536d1eaddff45cb481dbdf ]

Macronix NAND Flash devices are available in different configurations
and densities.

MX"35" means SPI NAND
MX35"LF"/"UF" , LF means 3V and UF meands 1.8V
MX35LF"2G" , 2G means 2Gbits
MX35LF2G"E4"/"24"/"14",
E4 means internal ECC and Quad I/O(x4)
24 means 8-bit ecc requirement and Quad I/O(x4)
14 means 4-bit ecc requirement and Quad I/O(x4)

MX35LF2G14AC is 3V 2Gbit serial NAND flash device
(without on-die ECC)
https://www.mxic.com.tw/Lists/Datasheet/Attachments/7926/MX35LF2G14AC,%203V,%202Gb,%20v1.1.pdf

MX35UF4G24AD/MX35UF2G24AD/MX35UF1G24AD is 1.8V 4Gbit serial NAND flash device
(without on-die ECC)
https://www.mxic.com.tw/Lists/Datasheet/Attachments/7980/MX35UF4G24AD,%201.8V,%204Gb,%20v0.00.pdf

MX35UF4GE4AD/MX35UF2GE4AD/MX35UF1GE4AD are 1.8V 4G/2Gbit serial
NAND flash device with 8-bit on-die ECC
https://www.mxic.com.tw/Lists/Datasheet/Attachments/7983/MX35UF4GE4AD,%201.8V,%204Gb,%20v0.00.pdf

MX35UF2GE4AC/MX35UF1GE4AC are 1.8V 2G/1Gbit serial
NAND flash device with 8-bit on-die ECC
https://www.mxic.com.tw/Lists/Datasheet/Attachments/7974/MX35UF2GE4AC,%201.8V,%202Gb,%20v1.0.pdf

MX35UF2G14AC/MX35UF1G14AC are 1.8V 2G/1Gbit serial
NAND flash device (without on-die ECC)
https://www.mxic.com.tw/Lists/Datasheet/Attachments/7931/MX35UF2G14AC,%201.8V,%202Gb,%20v1.1.pdf

Validated via normal(default) and QUAD mode by read, erase, read back,
on Xilinx Zynq PicoZed FPGA board which included Macronix
SPI Host(drivers/spi/spi-mxic.c).

Cc: stable@vger.kernel.org # 5.10.y
Signed-off-by: Cheng Ming Lin <chengminglin@mxic.com.tw>
Signed-off-by: Jaime Liao <jaimeliao@mxic.com.tw>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Link: https://lore.kernel.org/linux-mtd/1621475108-22523-1-git-send-email-jaimeliao@mxic.com.tw
---
 drivers/mtd/nand/spi/macronix.c | 110 ++++++++++++++++++++++++++++++++
 1 file changed, 110 insertions(+)

diff --git a/drivers/mtd/nand/spi/macronix.c b/drivers/mtd/nand/spi/macronix.c
index 8bd3f6bf9b10..e42524687b5c 100644
--- a/drivers/mtd/nand/spi/macronix.c
+++ b/drivers/mtd/nand/spi/macronix.c
@@ -139,6 +139,116 @@ static const struct spinand_info macronix_spinand_table[] = {
 		     0,
 		     SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
 				     mx35lf1ge4ab_ecc_get_status)),
+	SPINAND_INFO("MX35LF2G14AC",
+		     SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x20),
+		     NAND_MEMORG(1, 2048, 64, 64, 2048, 40, 2, 1, 1),
+		     NAND_ECCREQ(4, 512),
+		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
+					      &write_cache_variants,
+					      &update_cache_variants),
+		     SPINAND_HAS_QE_BIT,
+		     SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
+				     mx35lf1ge4ab_ecc_get_status)),
+	SPINAND_INFO("MX35UF4G24AD",
+		     SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xb5),
+		     NAND_MEMORG(1, 4096, 256, 64, 2048, 40, 2, 1, 1),
+		     NAND_ECCREQ(8, 512),
+		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
+					      &write_cache_variants,
+					      &update_cache_variants),
+		     SPINAND_HAS_QE_BIT,
+		     SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
+				     mx35lf1ge4ab_ecc_get_status)),
+	SPINAND_INFO("MX35UF4GE4AD",
+		     SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xb7),
+		     NAND_MEMORG(1, 4096, 256, 64, 2048, 40, 1, 1, 1),
+		     NAND_ECCREQ(8, 512),
+		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
+					      &write_cache_variants,
+					      &update_cache_variants),
+		     SPINAND_HAS_QE_BIT,
+		     SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
+				     mx35lf1ge4ab_ecc_get_status)),
+	SPINAND_INFO("MX35UF2G14AC",
+		     SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xa0),
+		     NAND_MEMORG(1, 2048, 64, 64, 2048, 40, 2, 1, 1),
+		     NAND_ECCREQ(4, 512),
+		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
+					      &write_cache_variants,
+					      &update_cache_variants),
+		     SPINAND_HAS_QE_BIT,
+		     SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
+				     mx35lf1ge4ab_ecc_get_status)),
+	SPINAND_INFO("MX35UF2G24AD",
+		     SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xa4),
+		     NAND_MEMORG(1, 2048, 128, 64, 2048, 40, 2, 1, 1),
+		     NAND_ECCREQ(8, 512),
+		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
+					      &write_cache_variants,
+					      &update_cache_variants),
+		     SPINAND_HAS_QE_BIT,
+		     SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
+				     mx35lf1ge4ab_ecc_get_status)),
+	SPINAND_INFO("MX35UF2GE4AD",
+		     SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xa6),
+		     NAND_MEMORG(1, 2048, 128, 64, 2048, 40, 1, 1, 1),
+		     NAND_ECCREQ(8, 512),
+		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
+					      &write_cache_variants,
+					      &update_cache_variants),
+		     SPINAND_HAS_QE_BIT,
+		     SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
+				     mx35lf1ge4ab_ecc_get_status)),
+	SPINAND_INFO("MX35UF2GE4AC",
+		     SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xa2),
+		     NAND_MEMORG(1, 2048, 64, 64, 2048, 40, 1, 1, 1),
+		     NAND_ECCREQ(4, 512),
+		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
+					      &write_cache_variants,
+					      &update_cache_variants),
+		     SPINAND_HAS_QE_BIT,
+		     SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
+				     mx35lf1ge4ab_ecc_get_status)),
+	SPINAND_INFO("MX35UF1G14AC",
+		     SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x90),
+		     NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 1),
+		     NAND_ECCREQ(4, 512),
+		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
+					      &write_cache_variants,
+					      &update_cache_variants),
+		     SPINAND_HAS_QE_BIT,
+		     SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
+				     mx35lf1ge4ab_ecc_get_status)),
+	SPINAND_INFO("MX35UF1G24AD",
+		     SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x94),
+		     NAND_MEMORG(1, 2048, 128, 64, 1024, 20, 1, 1, 1),
+		     NAND_ECCREQ(8, 512),
+		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
+					      &write_cache_variants,
+					      &update_cache_variants),
+		     SPINAND_HAS_QE_BIT,
+		     SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
+				     mx35lf1ge4ab_ecc_get_status)),
+	SPINAND_INFO("MX35UF1GE4AD",
+		     SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x96),
+		     NAND_MEMORG(1, 2048, 128, 64, 1024, 20, 1, 1, 1),
+		     NAND_ECCREQ(8, 512),
+		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
+					      &write_cache_variants,
+					      &update_cache_variants),
+		     SPINAND_HAS_QE_BIT,
+		     SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
+				     mx35lf1ge4ab_ecc_get_status)),
+	SPINAND_INFO("MX35UF1GE4AC",
+		     SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x92),
+		     NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 1),
+		     NAND_ECCREQ(4, 512),
+		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
+					      &write_cache_variants,
+					      &update_cache_variants),
+		     SPINAND_HAS_QE_BIT,
+		     SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
+				     mx35lf1ge4ab_ecc_get_status)),
 	SPINAND_INFO("MX31LF1GE4BC",
 		     SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x1e),
 		     NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 1),
-- 
2.25.1

.

From: Cheng Ming Lin <linchengming884@gmail.com>
To: miquel.raynal@bootlin.com,
	dwmw2@infradead.org,
	computersforpeace@gmail.com,
	marek.vasut@gmail.com,
	vigneshr@ti.com,
	linux-mtd@lists.infradead.org,
	linux-kernel@vger.kernel.org
Cc: richard@nod.at,
	alvinzhou@mxic.com.tw,
	leoyu@mxic.com.tw,
	Cheng Ming Lin <chengminglin@mxic.com.tw>,
	stable@vger.kernel.org,
	Jaime Liao <jaimeliao@mxic.com.tw>
Subject: [PATCH v5.4.y v4] mtd: spinand: macronix: Add support for serial NAND flash
Date: Tue, 25 Jun 2024 15:12:51 +0800
Message-Id: <20240625071251.62100-1-linchengming884@gmail.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257779
Newsgroups: org.kernel.vger.linux-kernel,org.infradead.lists.linux-mtd,org.kernel.vger.stable
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

From: Cheng Ming Lin <chengminglin@mxic.com.tw>

commit c374839f9b4475173e536d1eaddff45cb481dbdf upstream.

Macronix NAND Flash devices are available in different configurations
and densities.

MX"35" means SPI NAND
MX35"LF"/"UF" , LF means 3V and UF meands 1.8V
MX35LF"2G" , 2G means 2Gbits
MX35LF2G"E4"/"24"/"14",
E4 means internal ECC and Quad I/O(x4)
24 means 8-bit ecc requirement and Quad I/O(x4)
14 means 4-bit ecc requirement and Quad I/O(x4)

MX35LF2G14AC is 3V 2Gbit serial NAND flash device
(without on-die ECC)
https://www.mxic.com.tw/Lists/Datasheet/Attachments/7926/MX35LF2G14AC,%203V,%202Gb,%20v1.1.pdf

MX35UF4G24AD/MX35UF2G24AD/MX35UF1G24AD is 1.8V 4Gbit serial NAND flash device
(without on-die ECC)
https://www.mxic.com.tw/Lists/Datasheet/Attachments/7980/MX35UF4G24AD,%201.8V,%204Gb,%20v0.00.pdf

MX35UF4GE4AD/MX35UF2GE4AD/MX35UF1GE4AD are 1.8V 4G/2Gbit serial
NAND flash device with 8-bit on-die ECC
https://www.mxic.com.tw/Lists/Datasheet/Attachments/7983/MX35UF4GE4AD,%201.8V,%204Gb,%20v0.00.pdf

MX35UF2GE4AC/MX35UF1GE4AC are 1.8V 2G/1Gbit serial
NAND flash device with 8-bit on-die ECC
https://www.mxic.com.tw/Lists/Datasheet/Attachments/7974/MX35UF2GE4AC,%201.8V,%202Gb,%20v1.0.pdf

MX35UF2G14AC/MX35UF1G14AC are 1.8V 2G/1Gbit serial
NAND flash device (without on-die ECC)
https://www.mxic.com.tw/Lists/Datasheet/Attachments/7931/MX35UF2G14AC,%201.8V,%202Gb,%20v1.1.pdf

Validated via normal(default) and QUAD mode by read, erase, read back,
on Xilinx Zynq PicoZed FPGA board which included Macronix
SPI Host(drivers/spi/spi-mxic.c).

Cc: stable@vger.kernel.org # 5.4.y
Signed-off-by: Cheng Ming Lin <chengminglin@mxic.com.tw>
Signed-off-by: Jaime Liao <jaimeliao@mxic.com.tw>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Link: https://lore.kernel.org/linux-mtd/1621475108-22523-1-git-send-email-jaimeliao@mxic.com.tw
---
 drivers/mtd/nand/spi/macronix.c | 99 +++++++++++++++++++++++++++++++++
 1 file changed, 99 insertions(+)

diff --git a/drivers/mtd/nand/spi/macronix.c b/drivers/mtd/nand/spi/macronix.c
index f18c6cfe8ff5..a38d0de5f765 100644
--- a/drivers/mtd/nand/spi/macronix.c
+++ b/drivers/mtd/nand/spi/macronix.c
@@ -132,6 +132,105 @@ static const struct spinand_info macronix_spinand_table[] = {
 					      &update_cache_variants),
 		     SPINAND_HAS_QE_BIT,
 		     SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout, NULL)),
+	SPINAND_INFO("MX35LF2G14AC", 0x20,
+		     NAND_MEMORG(1, 2048, 64, 64, 2048, 40, 2, 1, 1),
+		     NAND_ECCREQ(4, 512),
+		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
+					      &write_cache_variants,
+					      &update_cache_variants),
+		     SPINAND_HAS_QE_BIT,
+		     SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
+				     mx35lf1ge4ab_ecc_get_status)),
+	SPINAND_INFO("MX35UF4G24AD", 0xb5,
+		     NAND_MEMORG(1, 4096, 256, 64, 2048, 40, 2, 1, 1),
+		     NAND_ECCREQ(8, 512),
+		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
+					      &write_cache_variants,
+					      &update_cache_variants),
+		     SPINAND_HAS_QE_BIT,
+		     SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
+				     mx35lf1ge4ab_ecc_get_status)),
+	SPINAND_INFO("MX35UF4GE4AD", 0xb7,
+		     NAND_MEMORG(1, 4096, 256, 64, 2048, 40, 1, 1, 1),
+		     NAND_ECCREQ(8, 512),
+		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
+					      &write_cache_variants,
+					      &update_cache_variants),
+		     SPINAND_HAS_QE_BIT,
+		     SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
+				     mx35lf1ge4ab_ecc_get_status)),
+	SPINAND_INFO("MX35UF2G14AC", 0xa0,
+		     NAND_MEMORG(1, 2048, 64, 64, 2048, 40, 2, 1, 1),
+		     NAND_ECCREQ(4, 512),
+		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
+					      &write_cache_variants,
+					      &update_cache_variants),
+		     SPINAND_HAS_QE_BIT,
+		     SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
+				     mx35lf1ge4ab_ecc_get_status)),
+	SPINAND_INFO("MX35UF2G24AD", 0xa4,
+		     NAND_MEMORG(1, 2048, 128, 64, 2048, 40, 2, 1, 1),
+		     NAND_ECCREQ(8, 512),
+		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
+					      &write_cache_variants,
+					      &update_cache_variants),
+		     SPINAND_HAS_QE_BIT,
+		     SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
+				     mx35lf1ge4ab_ecc_get_status)),
+	SPINAND_INFO("MX35UF2GE4AD", 0xa6,
+		     NAND_MEMORG(1, 2048, 128, 64, 2048, 40, 1, 1, 1),
+		     NAND_ECCREQ(8, 512),
+		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
+					      &write_cache_variants,
+					      &update_cache_variants),
+		     SPINAND_HAS_QE_BIT,
+		     SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
+				     mx35lf1ge4ab_ecc_get_status)),
+	SPINAND_INFO("MX35UF2GE4AC", 0xa2,
+		     NAND_MEMORG(1, 2048, 64, 64, 2048, 40, 1, 1, 1),
+		     NAND_ECCREQ(4, 512),
+		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
+					      &write_cache_variants,
+					      &update_cache_variants),
+		     SPINAND_HAS_QE_BIT,
+		     SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
+				     mx35lf1ge4ab_ecc_get_status)),
+	SPINAND_INFO("MX35UF1G14AC", 0x90,
+		     NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 1),
+		     NAND_ECCREQ(4, 512),
+		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
+					      &write_cache_variants,
+					      &update_cache_variants),
+		     SPINAND_HAS_QE_BIT,
+		     SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
+				     mx35lf1ge4ab_ecc_get_status)),
+	SPINAND_INFO("MX35UF1G24AD", 0x94,
+		     NAND_MEMORG(1, 2048, 128, 64, 1024, 20, 1, 1, 1),
+		     NAND_ECCREQ(8, 512),
+		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
+					      &write_cache_variants,
+					      &update_cache_variants),
+		     SPINAND_HAS_QE_BIT,
+		     SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
+				     mx35lf1ge4ab_ecc_get_status)),
+	SPINAND_INFO("MX35UF1GE4AD", 0x96,
+		     NAND_MEMORG(1, 2048, 128, 64, 1024, 20, 1, 1, 1),
+		     NAND_ECCREQ(8, 512),
+		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
+					      &write_cache_variants,
+					      &update_cache_variants),
+		     SPINAND_HAS_QE_BIT,
+		     SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
+				     mx35lf1ge4ab_ecc_get_status)),
+	SPINAND_INFO("MX35UF1GE4AC", 0x92,
+		     NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 1),
+		     NAND_ECCREQ(4, 512),
+		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
+					      &write_cache_variants,
+					      &update_cache_variants),
+		     SPINAND_HAS_QE_BIT,
+		     SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
+				     mx35lf1ge4ab_ecc_get_status)),
 };
 
 static int macronix_spinand_detect(struct spinand_device *spinand)
-- 
2.25.1

.

From: Luca Ceresoli <luca.ceresoli@bootlin.com>
Date: Tue, 25 Jun 2024 09:26:52 +0200
Subject: [PATCH] Revert "leds: led-core: Fix refcount leak in of_led_get()"
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
Message-Id: <20240625-led-class-device-leak-v1-1-9eb4436310c2@bootlin.com>
To: Pavel Machek <pavel@ucw.cz>, Lee Jones <lee@kernel.org>, 
 Miaoqian Lin <linmq006@gmail.com>
Cc: Hans de Goede <hdegoede@redhat.com>, 
 =?utf-8?q?Herv=C3=A9_Codina?= <herve.codina@bootlin.com>, 
 Thomas Petazzoni <thomas.petazzoni@bootlin.com>, linux-leds@vger.kernel.org, 
 linux-kernel@vger.kernel.org, Luca Ceresoli <luca.ceresoli@bootlin.com>
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257795
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-leds
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

This reverts commit da1afe8e6099980fe1e2fd7436dca284af9d3f29.

Commit 699a8c7c4bd3 ("leds: Add of_led_get() and led_put()"), introduced in
5.5, added of_led_get() and led_put() but missed a put_device() in
led_put(), thus creating a leak in case the consumer device is removed.

Arguably device removal was not very popular, so this went apparently
unnoticed until 2022. In January 2023 two different patches got merged to
fix the same bug:

 - commit da1afe8e6099 ("leds: led-core: Fix refcount leak in of_led_get()")
 - commit 445110941eb9 ("leds: led-class: Add missing put_device() to led_put()")

They fix the bug in two different ways, which creates no patch conflicts,
and both were merged in v6.2. The result is that now there is one more
put_device() than get_device()s, instead of one less.

Arguably device removal is not very popular yet, so this apparently hasn't
been noticed as well up to now. But it blew up here while I'm working with
device tree overlay insertion and removal. The symptom is an apparently
unrelated list of oopses on device removal, with reasons:

  kernfs: can not remove 'uevent', no directory
  kernfs: can not remove 'brightness', no directory
  kernfs: can not remove 'max_brightness', no directory
  ...

Here sysfs fails removing attribute files, which is because the device name
changed and so the sysfs path. This is because the device name string got
corrupted, which is because it got freed too early and its memory reused.

Different symptoms could appear in different use cases.

Fix by removing one of the two fixes.

The choice was to remove commit da1afe8e6099 because:

 * it is calling put_device() inside of_led_get() just after getting the
   device, thus it is basically not refcounting the LED device at all
   during its entire lifetime
 * it does not add a corresponding put_device() in led_get(), so it fixes
   only the OF case

The other fix (445110941eb9) is adding the put_device() in led_put() so it
covers the entire lifetime, and it works even in the non-DT case.

Fixes: da1afe8e6099 ("leds: led-core: Fix refcount leak in of_led_get()")
Co-developed-by: HervÃ© Codina <herve.codina@bootlin.com>
Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
---
 drivers/leds/led-class.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/drivers/leds/led-class.c b/drivers/leds/led-class.c
index 24fcff682b24..b23d2138cd83 100644
--- a/drivers/leds/led-class.c
+++ b/drivers/leds/led-class.c
@@ -258,7 +258,6 @@ struct led_classdev *of_led_get(struct device_node *np, int index)
 
 	led_dev = class_find_device_by_of_node(&leds_class, led_node);
 	of_node_put(led_node);
-	put_device(led_dev);
 
 	return led_module_get(led_dev);
 }

---
base-commit: 28ef3e64d0a22f6a29a1ea489293715a29623e52
change-id: 20240625-led-class-device-leak-6637a2821678

Best regards,
-- 
Luca Ceresoli <luca.ceresoli@bootlin.com>

.

From: Bartosz Golaszewski <brgl@bgdev.pl>
To: Linus Walleij <linus.walleij@linaro.org>
Cc: linux-gpio@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
Subject: [PATCH] gpiolib: unexport gpiochip_get_desc()
Date: Tue, 25 Jun 2024 09:38:15 +0200
Message-ID: <20240625073815.12376-1-brgl@bgdev.pl>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257803
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-gpio
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

From: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>

This function has been deprecated for some time and is now only used
within the GPIOLIB core. Remove it from the public header and unexport
it as all current users are linked against the compilation unit where
it is defined.

Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
---
 drivers/gpio/gpiolib.c      | 1 -
 drivers/gpio/gpiolib.h      | 1 +
 include/linux/gpio/driver.h | 1 -
 3 files changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
index ed620442f32c..edaeee53db75 100644
--- a/drivers/gpio/gpiolib.c
+++ b/drivers/gpio/gpiolib.c
@@ -179,7 +179,6 @@ struct gpio_desc *gpiochip_get_desc(struct gpio_chip *gc,
 {
 	return gpio_device_get_desc(gc->gpiodev, hwnum);
 }
-EXPORT_SYMBOL_GPL(gpiochip_get_desc);
 
 /**
  * gpio_device_get_desc() - get the GPIO descriptor corresponding to the given
diff --git a/drivers/gpio/gpiolib.h b/drivers/gpio/gpiolib.h
index a75635891c6f..4de0bf1a62d3 100644
--- a/drivers/gpio/gpiolib.h
+++ b/drivers/gpio/gpiolib.h
@@ -243,6 +243,7 @@ int gpio_set_debounce_timeout(struct gpio_desc *desc, unsigned int debounce);
 int gpiod_hog(struct gpio_desc *desc, const char *name,
 		unsigned long lflags, enum gpiod_flags dflags);
 int gpiochip_get_ngpios(struct gpio_chip *gc, struct device *dev);
+struct gpio_desc *gpiochip_get_desc(struct gpio_chip *gc, unsigned int hwnum);
 const char *gpiod_get_label(struct gpio_desc *desc);
 
 /*
diff --git a/include/linux/gpio/driver.h b/include/linux/gpio/driver.h
index 6d31388dde0a..2dd7cb9cc270 100644
--- a/include/linux/gpio/driver.h
+++ b/include/linux/gpio/driver.h
@@ -787,7 +787,6 @@ struct gpio_desc *gpiochip_request_own_desc(struct gpio_chip *gc,
 					    enum gpiod_flags dflags);
 void gpiochip_free_own_desc(struct gpio_desc *desc);
 
-struct gpio_desc *gpiochip_get_desc(struct gpio_chip *gc, unsigned int hwnum);
 struct gpio_desc *
 gpio_device_get_desc(struct gpio_device *gdev, unsigned int hwnum);
 
-- 
2.43.0

.

From: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
To: mhi@lists.linux.dev
Cc: linux-arm-msm@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>,
	Slark Xiao <slark_xiao@163.com>
Subject: [PATCH] bus: mhi: host: pci_generic: Use unique 'mhi_pci_dev_info' for product families
Date: Tue, 25 Jun 2024 13:11:48 +0530
Message-Id: <20240625074148.7412-1-manivannan.sadhasivam@linaro.org>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257806
Newsgroups: org.kernel.vger.linux-kernel,dev.linux.lists.mhi,org.kernel.vger.linux-arm-msm
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Currently, a single 'mhi_pci_dev_info' is shared across different product
families. Even though it makes the device functional, it misleads the users
by sharing the common product name.

For instance, below message will be printed for Foxconn SDX62 modem during
boot:

"MHI PCI device found: foxconn-sdx65"

But this is quite misleading to the users since the actual modem plugged in
could be 'T99W373' which is based on SDX62.

So fix this issue by using a unique 'mhi_pci_dev_info' for product
families. This allows us to specify a unique product name for each product
family. Also, once this name is exposed to client drivers, they may use
this name to identify the modems and use any modem specific configuration.

Modems of unknown product families are not impacted by this change.

CC: Slark Xiao <slark_xiao@163.com>
Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
---
 drivers/bus/mhi/host/pci_generic.c | 76 +++++++++++++++++++++++-------
 1 file changed, 58 insertions(+), 18 deletions(-)

diff --git a/drivers/bus/mhi/host/pci_generic.c b/drivers/bus/mhi/host/pci_generic.c
index 08844ee79654..25113b87b780 100644
--- a/drivers/bus/mhi/host/pci_generic.c
+++ b/drivers/bus/mhi/host/pci_generic.c
@@ -419,8 +419,10 @@ static const struct mhi_controller_config modem_foxconn_sdx55_config = {
 	.event_cfg = mhi_foxconn_sdx55_events,
 };
 
-static const struct mhi_pci_dev_info mhi_foxconn_sdx24_info = {
-	.name = "foxconn-sdx24",
+static const struct mhi_pci_dev_info mhi_foxconn_sdx55_info = {
+	.name = "foxconn-sdx55",
+	.fw = "qcom/sdx55m/sbl1.mbn",
+	.edl = "qcom/sdx55m/edl.mbn",
 	.config = &modem_foxconn_sdx55_config,
 	.bar_num = MHI_PCI_DEFAULT_BAR_NUM,
 	.dma_data_width = 32,
@@ -428,8 +430,8 @@ static const struct mhi_pci_dev_info mhi_foxconn_sdx24_info = {
 	.sideband_wake = false,
 };
 
-static const struct mhi_pci_dev_info mhi_foxconn_sdx55_info = {
-	.name = "foxconn-sdx55",
+static const struct mhi_pci_dev_info mhi_foxconn_t99w175_info = {
+	.name = "foxconn-t99w175",
 	.fw = "qcom/sdx55m/sbl1.mbn",
 	.edl = "qcom/sdx55m/edl.mbn",
 	.config = &modem_foxconn_sdx55_config,
@@ -439,8 +441,46 @@ static const struct mhi_pci_dev_info mhi_foxconn_sdx55_info = {
 	.sideband_wake = false,
 };
 
-static const struct mhi_pci_dev_info mhi_foxconn_sdx65_info = {
-	.name = "foxconn-sdx65",
+static const struct mhi_pci_dev_info mhi_foxconn_dw5930e_info = {
+	.name = "foxconn-dw5930e",
+	.fw = "qcom/sdx55m/sbl1.mbn",
+	.edl = "qcom/sdx55m/edl.mbn",
+	.config = &modem_foxconn_sdx55_config,
+	.bar_num = MHI_PCI_DEFAULT_BAR_NUM,
+	.dma_data_width = 32,
+	.mru_default = 32768,
+	.sideband_wake = false,
+};
+
+static const struct mhi_pci_dev_info mhi_foxconn_t99w368_info = {
+	.name = "foxconn-t99w368",
+	.config = &modem_foxconn_sdx55_config,
+	.bar_num = MHI_PCI_DEFAULT_BAR_NUM,
+	.dma_data_width = 32,
+	.mru_default = 32768,
+	.sideband_wake = false,
+};
+
+static const struct mhi_pci_dev_info mhi_foxconn_t99w373_info = {
+	.name = "foxconn-t99w373",
+	.config = &modem_foxconn_sdx55_config,
+	.bar_num = MHI_PCI_DEFAULT_BAR_NUM,
+	.dma_data_width = 32,
+	.mru_default = 32768,
+	.sideband_wake = false,
+};
+
+static const struct mhi_pci_dev_info mhi_foxconn_t99w510_info = {
+	.name = "foxconn-t99w510",
+	.config = &modem_foxconn_sdx55_config,
+	.bar_num = MHI_PCI_DEFAULT_BAR_NUM,
+	.dma_data_width = 32,
+	.mru_default = 32768,
+	.sideband_wake = false,
+};
+
+static const struct mhi_pci_dev_info mhi_foxconn_dw5932e_info = {
+	.name = "foxconn-dw5932e",
 	.config = &modem_foxconn_sdx55_config,
 	.bar_num = MHI_PCI_DEFAULT_BAR_NUM,
 	.dma_data_width = 32,
@@ -646,40 +686,40 @@ static const struct pci_device_id mhi_pci_id_table[] = {
 		.driver_data = (kernel_ulong_t) &mhi_quectel_em1xx_info },
 	/* T99W175 (sdx55), Both for eSIM and Non-eSIM */
 	{ PCI_DEVICE(PCI_VENDOR_ID_FOXCONN, 0xe0ab),
-		.driver_data = (kernel_ulong_t) &mhi_foxconn_sdx55_info },
+		.driver_data = (kernel_ulong_t) &mhi_foxconn_t99w175_info },
 	/* DW5930e (sdx55), With eSIM, It's also T99W175 */
 	{ PCI_DEVICE(PCI_VENDOR_ID_FOXCONN, 0xe0b0),
-		.driver_data = (kernel_ulong_t) &mhi_foxconn_sdx55_info },
+		.driver_data = (kernel_ulong_t) &mhi_foxconn_dw5930e_info },
 	/* DW5930e (sdx55), Non-eSIM, It's also T99W175 */
 	{ PCI_DEVICE(PCI_VENDOR_ID_FOXCONN, 0xe0b1),
-		.driver_data = (kernel_ulong_t) &mhi_foxconn_sdx55_info },
+		.driver_data = (kernel_ulong_t) &mhi_foxconn_dw5930e_info },
 	/* T99W175 (sdx55), Based on Qualcomm new baseline */
 	{ PCI_DEVICE(PCI_VENDOR_ID_FOXCONN, 0xe0bf),
-		.driver_data = (kernel_ulong_t) &mhi_foxconn_sdx55_info },
+		.driver_data = (kernel_ulong_t) &mhi_foxconn_t99w175_info },
 	/* T99W175 (sdx55) */
 	{ PCI_DEVICE(PCI_VENDOR_ID_FOXCONN, 0xe0c3),
-		.driver_data = (kernel_ulong_t) &mhi_foxconn_sdx55_info },
+		.driver_data = (kernel_ulong_t) &mhi_foxconn_t99w175_info },
 	/* T99W368 (sdx65) */
 	{ PCI_DEVICE(PCI_VENDOR_ID_FOXCONN, 0xe0d8),
-		.driver_data = (kernel_ulong_t) &mhi_foxconn_sdx65_info },
+		.driver_data = (kernel_ulong_t) &mhi_foxconn_t99w368_info },
 	/* T99W373 (sdx62) */
 	{ PCI_DEVICE(PCI_VENDOR_ID_FOXCONN, 0xe0d9),
-		.driver_data = (kernel_ulong_t) &mhi_foxconn_sdx65_info },
+		.driver_data = (kernel_ulong_t) &mhi_foxconn_t99w373_info },
 	/* T99W510 (sdx24), variant 1 */
 	{ PCI_DEVICE(PCI_VENDOR_ID_FOXCONN, 0xe0f0),
-		.driver_data = (kernel_ulong_t) &mhi_foxconn_sdx24_info },
+		.driver_data = (kernel_ulong_t) &mhi_foxconn_t99w510_info },
 	/* T99W510 (sdx24), variant 2 */
 	{ PCI_DEVICE(PCI_VENDOR_ID_FOXCONN, 0xe0f1),
-		.driver_data = (kernel_ulong_t) &mhi_foxconn_sdx24_info },
+		.driver_data = (kernel_ulong_t) &mhi_foxconn_t99w510_info },
 	/* T99W510 (sdx24), variant 3 */
 	{ PCI_DEVICE(PCI_VENDOR_ID_FOXCONN, 0xe0f2),
-		.driver_data = (kernel_ulong_t) &mhi_foxconn_sdx24_info },
+		.driver_data = (kernel_ulong_t) &mhi_foxconn_t99w510_info },
 	/* DW5932e-eSIM (sdx62), With eSIM */
 	{ PCI_DEVICE(PCI_VENDOR_ID_FOXCONN, 0xe0f5),
-		.driver_data = (kernel_ulong_t) &mhi_foxconn_sdx65_info },
+		.driver_data = (kernel_ulong_t) &mhi_foxconn_dw5932e_info },
 	/* DW5932e (sdx62), Non-eSIM */
 	{ PCI_DEVICE(PCI_VENDOR_ID_FOXCONN, 0xe0f9),
-		.driver_data = (kernel_ulong_t) &mhi_foxconn_sdx65_info },
+		.driver_data = (kernel_ulong_t) &mhi_foxconn_dw5932e_info },
 	/* MV31-W (Cinterion) */
 	{ PCI_DEVICE(PCI_VENDOR_ID_THALES, 0x00b3),
 		.driver_data = (kernel_ulong_t) &mhi_mv31_info },
-- 
2.25.1

.

X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
From: shichao lai <shichaorai@gmail.com>
Date: Tue, 25 Jun 2024 15:46:27 +0800
Message-ID: <CACjpba5b+1BsF8pntpfttMg+eA-ea_kTbdpgAyOnxGaiP31gGA@mail.gmail.com>
Subject: KASAN: slab-use-after-free Read in em28xx_init_extension
To: Mauro Carvalho Chehab <mchehab@kernel.org>, syzkaller-bugs@googlegroup.com, 
	linux-kernel@vger.kernel.org, linux-media@vger.kernel.org
Content-Type: multipart/mixed; boundary="000000000000125b2c061bb2199e"
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257814
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-media
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

--000000000000125b2c061bb2199e
Content-Type: text/plain; charset="UTF-8"

Hello
I found a potential bug titled "KASAN: slab-use-after-free Read in
em28xx_init_extension"
This bug may be related to the previous bugs but new modules are in the traces,
such as security/tomoyo. Unfortunately, I didn't get the repro from syzkaller.

Similar reports & bugs:
1. https://groups.google.com/g/syzkaller-bugs/c/3Cmf7yuRTo8/m/XiHMsxW6BAAJ
2. https://groups.google.com/g/syzkaller-bugs/c/xJlNyYnPiYI/m/tboOjArwBAAJ
3. https://groups.google.com/g/syzkaller-bugs/c/gPfdAdmsuhc/m/mpnerq76AQAJ

kernel version: v6.8
kernel config: attachment
gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04)

If you fix this issue, please add the following tag to the commit:
Reported-by: Shichao Lai <shichaorai@gmail.com>
Thanks!

==================================================================
BUG: KASAN: slab-use-after-free in
__list_add_valid_or_report+0xe3/0x100 lib/list_debug.c:32
Read of size 8 at addr ffff888111948250 by task kworker/0:4/4049

CPU: 0 PID: 4049 Comm: kworker/0:4 Not tainted 6.8.0 #1
Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS
rel-1.16.2-0-gea1b7a073390-prebuilt.qemu.org 04/01/2014
Workqueue: events request_module_async
Call Trace:
 <TASK>
 __dump_stack lib/dump_stack.c:88 [inline]
 dump_stack_lvl+0xd9/0x150 lib/dump_stack.c:106
 print_address_description mm/kasan/report.c:377 [inline]
 print_report+0xc1/0x5e0 mm/kasan/report.c:488
 kasan_report+0xbe/0xf0 mm/kasan/report.c:601
 __list_add_valid_or_report+0xe3/0x100 lib/list_debug.c:32
 __list_add_valid include/linux/list.h:88 [inline]
 __list_add include/linux/list.h:150 [inline]
 list_add_tail include/linux/list.h:183 [inline]
 em28xx_init_extension+0x48/0x1f0 drivers/media/usb/em28xx/em28xx-core.c:1113
 request_module_async+0x61/0x70 drivers/media/usb/em28xx/em28xx-cards.c:3405
 process_one_work+0x878/0x15c0 kernel/workqueue.c:2633
 process_scheduled_works kernel/workqueue.c:2706 [inline]
 worker_thread+0x855/0x1200 kernel/workqueue.c:2787
 kthread+0x2cc/0x3b0 kernel/kthread.c:388
 ret_from_fork+0x45/0x80 arch/x86/kernel/process.c:147
 ret_from_fork_asm+0x11/0x20 arch/x86/entry/entry_64.S:243
 </TASK>

Allocated by task 2395:
 kasan_save_stack+0x24/0x40 mm/kasan/common.c:47
 kasan_save_track+0x14/0x30 mm/kasan/common.c:68
 poison_kmalloc_redzone mm/kasan/common.c:370 [inline]
 __kasan_kmalloc+0x7b/0x90 mm/kasan/common.c:387
 kasan_kmalloc include/linux/kasan.h:211 [inline]
 __do_kmalloc_node mm/slub.c:3981 [inline]
 __kmalloc+0x1f0/0x440 mm/slub.c:3994
 kmalloc include/linux/slab.h:594 [inline]
 tomoyo_realpath_from_path+0xc3/0x600 security/tomoyo/realpath.c:251
 tomoyo_get_realpath security/tomoyo/file.c:151 [inline]
 tomoyo_check_open_permission+0x290/0x3a0 security/tomoyo/file.c:771
 tomoyo_file_open+0x6f/0x90 security/tomoyo/tomoyo.c:334
 security_file_open+0x49/0xa0 security/security.c:2933
 do_dentry_open+0x576/0x16f0 fs/open.c:940
 do_open fs/namei.c:3645 [inline]
 path_openat+0x1b1f/0x2660 fs/namei.c:3802
 do_filp_open+0x1c9/0x410 fs/namei.c:3829
 do_sys_openat2+0x160/0x1c0 fs/open.c:1404
 do_sys_open fs/open.c:1419 [inline]
 __do_sys_openat fs/open.c:1435 [inline]
 __se_sys_openat fs/open.c:1430 [inline]
 __x64_sys_openat+0x140/0x1f0 fs/open.c:1430
 do_syscall_x64 arch/x86/entry/common.c:52 [inline]
 do_syscall_64+0xd2/0x250 arch/x86/entry/common.c:83
 entry_SYSCALL_64_after_hwframe+0x63/0x6b

Freed by task 2395:
 kasan_save_stack+0x24/0x40 mm/kasan/common.c:47
 kasan_save_track+0x14/0x30 mm/kasan/common.c:68
 kasan_save_free_info+0x3b/0x60 mm/kasan/generic.c:589
 poison_slab_object mm/kasan/common.c:240 [inline]
 poison_slab_object mm/kasan/common.c:211 [inline]
 __kasan_slab_free+0x102/0x190 mm/kasan/common.c:256
 kasan_slab_free include/linux/kasan.h:184 [inline]
 slab_free_hook mm/slub.c:2121 [inline]
 slab_free mm/slub.c:4299 [inline]
 kfree+0xed/0x340 mm/slub.c:4409
 tomoyo_realpath_from_path+0x190/0x600 security/tomoyo/realpath.c:286
 tomoyo_get_realpath security/tomoyo/file.c:151 [inline]
 tomoyo_check_open_permission+0x290/0x3a0 security/tomoyo/file.c:771
 tomoyo_file_open+0x6f/0x90 security/tomoyo/tomoyo.c:334
 security_file_open+0x49/0xa0 security/security.c:2933
 do_dentry_open+0x576/0x16f0 fs/open.c:940
 do_open fs/namei.c:3645 [inline]
 path_openat+0x1b1f/0x2660 fs/namei.c:3802
 do_filp_open+0x1c9/0x410 fs/namei.c:3829
 do_sys_openat2+0x160/0x1c0 fs/open.c:1404
 do_sys_open fs/open.c:1419 [inline]
 __do_sys_openat fs/open.c:1435 [inline]
 __se_sys_openat fs/open.c:1430 [inline]
 __x64_sys_openat+0x140/0x1f0 fs/open.c:1430
 do_syscall_x64 arch/x86/entry/common.c:52 [inline]
 do_syscall_64+0xd2/0x250 arch/x86/entry/common.c:83
 entry_SYSCALL_64_after_hwframe+0x63/0x6b

The buggy address belongs to the object at ffff888111948000
 which belongs to the cache kmalloc-4k of size 4096
The buggy address is located 592 bytes inside of
 freed 4096-byte region [ffff888111948000, ffff888111949000)

The buggy address belongs to the physical page:
page:ffffea0004465200 refcount:1 mapcount:0 mapping:0000000000000000
index:0x0 pfn:0x111948
head:ffffea0004465200 order:3 entire_mapcount:0 nr_pages_mapped:0 pincount:0
flags: 0x200000000000840(slab|head|node=0|zone=2)
page_type: 0xffffffff()
raw: 0200000000000840 ffff888100042140 dead000000000100 dead000000000122
raw: 0000000000000000 0000000000040004 00000001ffffffff 0000000000000000
page dumped because: kasan: bad access detected
page_owner tracks the page as allocated
page last allocated via order 3, migratetype Unmovable, gfp_mask
0x1d2040(__GFP_IO|__GFP_NOWARN|__GFP_NORETRY|__GFP_COMP|__GFP_NOMEMALLOC|__GFP_HARDWALL),
pid 2380, tgid 2380 (systemd-journal), ts 138489329275, free_ts
138483811668
 set_page_owner include/linux/page_owner.h:31 [inline]
 post_alloc_hook+0x2d9/0x350 mm/page_alloc.c:1533
 prep_new_page mm/page_alloc.c:1540 [inline]
 get_page_from_freelist+0x1008/0x2e40 mm/page_alloc.c:3311
 __alloc_pages+0x210/0x2060 mm/page_alloc.c:4569
 __alloc_pages_node include/linux/gfp.h:238 [inline]
 alloc_pages_node include/linux/gfp.h:261 [inline]
 alloc_slab_page mm/slub.c:2190 [inline]
 allocate_slab mm/slub.c:2354 [inline]
 new_slab+0xd3/0x3b0 mm/slub.c:2407
 ___slab_alloc+0x945/0x1700 mm/slub.c:3540
 __slab_alloc.constprop.0+0x56/0xa0 mm/slub.c:3625
 __slab_alloc_node mm/slub.c:3678 [inline]
 slab_alloc_node mm/slub.c:3850 [inline]
 __do_kmalloc_node mm/slub.c:3980 [inline]
 __kmalloc+0x3a8/0x440 mm/slub.c:3994
 kmalloc include/linux/slab.h:594 [inline]
 tomoyo_realpath_from_path+0xc3/0x600 security/tomoyo/realpath.c:251
 tomoyo_get_realpath security/tomoyo/file.c:151 [inline]
 tomoyo_path_perm+0x22f/0x420 security/tomoyo/file.c:822
 security_inode_getattr+0xd3/0x140 security/security.c:2238
 vfs_getattr fs/stat.c:173 [inline]
 vfs_fstat+0x4a/0xc0 fs/stat.c:198
 __do_sys_newfstat+0x7a/0xf0 fs/stat.c:478
 do_syscall_x64 arch/x86/entry/common.c:52 [inline]
 do_syscall_64+0xd2/0x250 arch/x86/entry/common.c:83
 entry_SYSCALL_64_after_hwframe+0x63/0x6b
page last free pid 2380 tgid 2380 stack trace:
 reset_page_owner include/linux/page_owner.h:24 [inline]
 free_pages_prepare mm/page_alloc.c:1140 [inline]
 free_unref_page_prepare+0x4f2/0xad0 mm/page_alloc.c:2346
 free_unref_page+0x33/0x2d0 mm/page_alloc.c:2486
 __put_partials+0x154/0x170 mm/slub.c:2922
 qlink_free mm/kasan/quarantine.c:163 [inline]
 qlist_free_all+0x50/0x140 mm/kasan/quarantine.c:179
 kasan_quarantine_reduce+0x18e/0x1d0 mm/kasan/quarantine.c:286
 __kasan_slab_alloc+0x45/0x60 mm/kasan/common.c:322
 kasan_slab_alloc include/linux/kasan.h:201 [inline]
 slab_post_alloc_hook mm/slub.c:3813 [inline]
 slab_alloc_node mm/slub.c:3860 [inline]
 kmem_cache_alloc+0x12a/0x2e0 mm/slub.c:3867
 getname_flags.part.0+0x50/0x4f0 fs/namei.c:140
 getname_flags include/linux/audit.h:322 [inline]
 getname+0x92/0xd0 fs/namei.c:219
 do_sys_openat2+0xe8/0x1c0 fs/open.c:1398
 do_sys_open fs/open.c:1419 [inline]
 __do_sys_openat fs/open.c:1435 [inline]
 __se_sys_openat fs/open.c:1430 [inline]
 __x64_sys_openat+0x140/0x1f0 fs/open.c:1430
 do_syscall_x64 arch/x86/entry/common.c:52 [inline]
 do_syscall_64+0xd2/0x250 arch/x86/entry/common.c:83
 entry_SYSCALL_64_after_hwframe+0x63/0x6b

Memory state around the buggy address:
 ffff888111948100: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
 ffff888111948180: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
>ffff888111948200: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
                                                 ^
 ffff888111948280: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
 ffff888111948300: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
==================================================================

--000000000000125b2c061bb2199e
Content-Type: application/octet-stream; name=".config"
Content-Disposition: attachment; filename=".config"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_lxu3fm9r0

IwojIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZpbGU7IERPIE5PVCBFRElULgojIExpbnV4L3g4
NiA2LjguMCBLZXJuZWwgQ29uZmlndXJhdGlvbgojCkNPTkZJR19DQ19WRVJTSU9OX1RFWFQ9Imdj
YyAoVWJ1bnR1IDExLjQuMC0xdWJ1bnR1MX4yMi4wNCkgMTEuNC4wIgpDT05GSUdfQ0NfSVNfR0ND
PXkKQ09ORklHX0dDQ19WRVJTSU9OPTExMDQwMApDT05GSUdfQ0xBTkdfVkVSU0lPTj0wCkNPTkZJ
R19BU19JU19HTlU9eQpDT05GSUdfQVNfVkVSU0lPTj0yMzgwMApDT05GSUdfTERfSVNfQkZEPXkK
Q09ORklHX0xEX1ZFUlNJT049MjM4MDAKQ09ORklHX0xMRF9WRVJTSU9OPTAKQ09ORklHX0NDX0NB
Tl9MSU5LPXkKQ09ORklHX0NDX0NBTl9MSU5LX1NUQVRJQz15CkNPTkZJR19DQ19IQVNfQVNNX0dP
VE9fT1VUUFVUPXkKQ09ORklHX0NDX0hBU19BU01fR09UT19USUVEX09VVFBVVD15CkNPTkZJR19H
Q0NfQVNNX0dPVE9fT1VUUFVUX1dPUktBUk9VTkQ9eQpDT05GSUdfVE9PTFNfU1VQUE9SVF9SRUxS
PXkKQ09ORklHX0NDX0hBU19BU01fSU5MSU5FPXkKQ09ORklHX0NDX0hBU19OT19QUk9GSUxFX0ZO
X0FUVFI9eQpDT05GSUdfUEFIT0xFX1ZFUlNJT049MTI1CkNPTkZJR19DT05TVFJVQ1RPUlM9eQpD
T05GSUdfSVJRX1dPUks9eQpDT05GSUdfQlVJTERUSU1FX1RBQkxFX1NPUlQ9eQpDT05GSUdfVEhS
RUFEX0lORk9fSU5fVEFTSz15CgojCiMgR2VuZXJhbCBzZXR1cAojCkNPTkZJR19JTklUX0VOVl9B
UkdfTElNSVQ9MzIKIyBDT05GSUdfQ09NUElMRV9URVNUIGlzIG5vdCBzZXQKIyBDT05GSUdfV0VS
Uk9SIGlzIG5vdCBzZXQKQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgpDT05GSUdfTE9DQUxWRVJTSU9O
X0FVVE89eQpDT05GSUdfQlVJTERfU0FMVD0iIgpDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CkNP
TkZJR19IQVZFX0tFUk5FTF9CWklQMj15CkNPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKQ09ORklH
X0hBVkVfS0VSTkVMX1haPXkKQ09ORklHX0hBVkVfS0VSTkVMX0xaTz15CkNPTkZJR19IQVZFX0tF
Uk5FTF9MWjQ9eQpDT05GSUdfSEFWRV9LRVJORUxfWlNURD15CkNPTkZJR19LRVJORUxfR1pJUD15
CiMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CiMgQ09ORklHX0tFUk5FTF9MWk1BIGlz
IG5vdCBzZXQKIyBDT05GSUdfS0VSTkVMX1haIGlzIG5vdCBzZXQKIyBDT05GSUdfS0VSTkVMX0xa
TyBpcyBub3Qgc2V0CiMgQ09ORklHX0tFUk5FTF9MWjQgaXMgbm90IHNldAojIENPTkZJR19LRVJO
RUxfWlNURCBpcyBub3Qgc2V0CkNPTkZJR19ERUZBVUxUX0lOSVQ9IiIKQ09ORklHX0RFRkFVTFRf
SE9TVE5BTUU9Iihub25lKSIKQ09ORklHX1NZU1ZJUEM9eQpDT05GSUdfU1lTVklQQ19TWVNDVEw9
eQpDT05GSUdfU1lTVklQQ19DT01QQVQ9eQpDT05GSUdfUE9TSVhfTVFVRVVFPXkKQ09ORklHX1BP
U0lYX01RVUVVRV9TWVNDVEw9eQojIENPTkZJR19XQVRDSF9RVUVVRSBpcyBub3Qgc2V0CkNPTkZJ
R19DUk9TU19NRU1PUllfQVRUQUNIPXkKIyBDT05GSUdfVVNFTElCIGlzIG5vdCBzZXQKQ09ORklH
X0FVRElUPXkKQ09ORklHX0hBVkVfQVJDSF9BVURJVFNZU0NBTEw9eQpDT05GSUdfQVVESVRTWVND
QUxMPXkKCiMKIyBJUlEgc3Vic3lzdGVtCiMKQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKQ09O
RklHX0dFTkVSSUNfSVJRX1NIT1c9eQpDT05GSUdfR0VORVJJQ19JUlFfRUZGRUNUSVZFX0FGRl9N
QVNLPXkKQ09ORklHX0dFTkVSSUNfUEVORElOR19JUlE9eQpDT05GSUdfR0VORVJJQ19JUlFfTUlH
UkFUSU9OPXkKQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15CkNPTkZJR19JUlFfRE9NQUlOPXkK
Q09ORklHX0lSUV9ET01BSU5fSElFUkFSQ0hZPXkKQ09ORklHX0dFTkVSSUNfTVNJX0lSUT15CkNP
TkZJR19JUlFfTVNJX0lPTU1VPXkKQ09ORklHX0dFTkVSSUNfSVJRX01BVFJJWF9BTExPQ0FUT1I9
eQpDT05GSUdfR0VORVJJQ19JUlFfUkVTRVJWQVRJT05fTU9ERT15CkNPTkZJR19JUlFfRk9SQ0VE
X1RIUkVBRElORz15CkNPTkZJR19TUEFSU0VfSVJRPXkKIyBDT05GSUdfR0VORVJJQ19JUlFfREVC
VUdGUyBpcyBub3Qgc2V0CiMgZW5kIG9mIElSUSBzdWJzeXN0ZW0KCkNPTkZJR19DTE9DS1NPVVJD
RV9XQVRDSERPRz15CkNPTkZJR19BUkNIX0NMT0NLU09VUkNFX0lOSVQ9eQpDT05GSUdfQ0xPQ0tT
T1VSQ0VfVkFMSURBVEVfTEFTVF9DWUNMRT15CkNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9
eQpDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRT
X0JST0FEQ0FTVD15CkNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX01JTl9BREpVU1Q9eQpDT05G
SUdfR0VORVJJQ19DTU9TX1VQREFURT15CkNPTkZJR19IQVZFX1BPU0lYX0NQVV9USU1FUlNfVEFT
S19XT1JLPXkKQ09ORklHX1BPU0lYX0NQVV9USU1FUlNfVEFTS19XT1JLPXkKQ09ORklHX0NPTlRF
WFRfVFJBQ0tJTkc9eQpDT05GSUdfQ09OVEVYVF9UUkFDS0lOR19JRExFPXkKCiMKIyBUaW1lcnMg
c3Vic3lzdGVtCiMKQ09ORklHX1RJQ0tfT05FU0hPVD15CkNPTkZJR19OT19IWl9DT01NT049eQoj
IENPTkZJR19IWl9QRVJJT0RJQyBpcyBub3Qgc2V0CkNPTkZJR19OT19IWl9JRExFPXkKIyBDT05G
SUdfTk9fSFpfRlVMTCBpcyBub3Qgc2V0CkNPTkZJR19DT05URVhUX1RSQUNLSU5HX1VTRVI9eQoj
IENPTkZJR19DT05URVhUX1RSQUNLSU5HX1VTRVJfRk9SQ0UgaXMgbm90IHNldApDT05GSUdfTk9f
SFo9eQpDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKQ09ORklHX0NMT0NLU09VUkNFX1dBVENIRE9H
X01BWF9TS0VXX1VTPTEyNQojIGVuZCBvZiBUaW1lcnMgc3Vic3lzdGVtCgpDT05GSUdfQlBGPXkK
Q09ORklHX0hBVkVfRUJQRl9KSVQ9eQpDT05GSUdfQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVD15
CgojCiMgQlBGIHN1YnN5c3RlbQojCkNPTkZJR19CUEZfU1lTQ0FMTD15CiMgQ09ORklHX0JQRl9K
SVQgaXMgbm90IHNldAojIENPTkZJR19CUEZfVU5QUklWX0RFRkFVTFRfT0ZGIGlzIG5vdCBzZXQK
IyBDT05GSUdfQlBGX1BSRUxPQUQgaXMgbm90IHNldAojIGVuZCBvZiBCUEYgc3Vic3lzdGVtCgpD
T05GSUdfUFJFRU1QVF9CVUlMRD15CiMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CkNP
TkZJR19QUkVFTVBUX1ZPTFVOVEFSWT15CiMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldApDT05G
SUdfUFJFRU1QVF9DT1VOVD15CkNPTkZJR19QUkVFTVBUSU9OPXkKQ09ORklHX1BSRUVNUFRfRFlO
QU1JQz15CiMgQ09ORklHX1NDSEVEX0NPUkUgaXMgbm90IHNldAoKIwojIENQVS9UYXNrIHRpbWUg
YW5kIHN0YXRzIGFjY291bnRpbmcKIwpDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORz15CiMgQ09O
RklHX1RJQ0tfQ1BVX0FDQ09VTlRJTkcgaXMgbm90IHNldApDT05GSUdfVklSVF9DUFVfQUNDT1VO
VElOR19HRU49eQojIENPTkZJR19JUlFfVElNRV9BQ0NPVU5USU5HIGlzIG5vdCBzZXQKQ09ORklH
X0JTRF9QUk9DRVNTX0FDQ1Q9eQojIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBz
ZXQKQ09ORklHX1RBU0tTVEFUUz15CkNPTkZJR19UQVNLX0RFTEFZX0FDQ1Q9eQpDT05GSUdfVEFT
S19YQUNDVD15CkNPTkZJR19UQVNLX0lPX0FDQ09VTlRJTkc9eQojIENPTkZJR19QU0kgaXMgbm90
IHNldAojIGVuZCBvZiBDUFUvVGFzayB0aW1lIGFuZCBzdGF0cyBhY2NvdW50aW5nCgpDT05GSUdf
Q1BVX0lTT0xBVElPTj15CgojCiMgUkNVIFN1YnN5c3RlbQojCkNPTkZJR19UUkVFX1JDVT15CkNP
TkZJR19QUkVFTVBUX1JDVT15CiMgQ09ORklHX1JDVV9FWFBFUlQgaXMgbm90IHNldApDT05GSUdf
VFJFRV9TUkNVPXkKQ09ORklHX1RBU0tTX1JDVV9HRU5FUklDPXkKQ09ORklHX1RBU0tTX1JDVT15
CkNPTkZJR19UQVNLU19UUkFDRV9SQ1U9eQpDT05GSUdfUkNVX1NUQUxMX0NPTU1PTj15CkNPTkZJ
R19SQ1VfTkVFRF9TRUdDQkxJU1Q9eQojIGVuZCBvZiBSQ1UgU3Vic3lzdGVtCgojIENPTkZJR19J
S0NPTkZJRyBpcyBub3Qgc2V0CiMgQ09ORklHX0lLSEVBREVSUyBpcyBub3Qgc2V0CkNPTkZJR19M
T0dfQlVGX1NISUZUPTE4CkNPTkZJR19MT0dfQ1BVX01BWF9CVUZfU0hJRlQ9MAojIENPTkZJR19Q
UklOVEtfSU5ERVggaXMgbm90IHNldApDT05GSUdfSEFWRV9VTlNUQUJMRV9TQ0hFRF9DTE9DSz15
CgojCiMgU2NoZWR1bGVyIGZlYXR1cmVzCiMKIyBDT05GSUdfVUNMQU1QX1RBU0sgaXMgbm90IHNl
dAojIGVuZCBvZiBTY2hlZHVsZXIgZmVhdHVyZXMKCkNPTkZJR19BUkNIX1NVUFBPUlRTX05VTUFf
QkFMQU5DSU5HPXkKQ09ORklHX0FSQ0hfV0FOVF9CQVRDSEVEX1VOTUFQX1RMQl9GTFVTSD15CkNP
TkZJR19DQ19IQVNfSU5UMTI4PXkKQ09ORklHX0NDX0lNUExJQ0lUX0ZBTExUSFJPVUdIPSItV2lt
cGxpY2l0LWZhbGx0aHJvdWdoPTUiCkNPTkZJR19HQ0MxMF9OT19BUlJBWV9CT1VORFM9eQpDT05G
SUdfQ0NfTk9fQVJSQVlfQk9VTkRTPXkKQ09ORklHX0dDQ19OT19TVFJJTkdPUF9PVkVSRkxPVz15
CkNPTkZJR19DQ19OT19TVFJJTkdPUF9PVkVSRkxPVz15CkNPTkZJR19BUkNIX1NVUFBPUlRTX0lO
VDEyOD15CiMgQ09ORklHX05VTUFfQkFMQU5DSU5HIGlzIG5vdCBzZXQKQ09ORklHX0NHUk9VUFM9
eQpDT05GSUdfUEFHRV9DT1VOVEVSPXkKIyBDT05GSUdfQ0dST1VQX0ZBVk9SX0RZTk1PRFMgaXMg
bm90IHNldApDT05GSUdfTUVNQ0c9eQpDT05GSUdfTUVNQ0dfS01FTT15CkNPTkZJR19CTEtfQ0dS
T1VQPXkKQ09ORklHX0NHUk9VUF9XUklURUJBQ0s9eQpDT05GSUdfQ0dST1VQX1NDSEVEPXkKQ09O
RklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQojIENPTkZJR19DRlNfQkFORFdJRFRIIGlzIG5vdCBzZXQK
IyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldApDT05GSUdfU0NIRURfTU1fQ0lEPXkK
Q09ORklHX0NHUk9VUF9QSURTPXkKQ09ORklHX0NHUk9VUF9SRE1BPXkKQ09ORklHX0NHUk9VUF9G
UkVFWkVSPXkKQ09ORklHX0NHUk9VUF9IVUdFVExCPXkKQ09ORklHX0NQVVNFVFM9eQpDT05GSUdf
UFJPQ19QSURfQ1BVU0VUPXkKQ09ORklHX0NHUk9VUF9ERVZJQ0U9eQpDT05GSUdfQ0dST1VQX0NQ
VUFDQ1Q9eQpDT05GSUdfQ0dST1VQX1BFUkY9eQojIENPTkZJR19DR1JPVVBfQlBGIGlzIG5vdCBz
ZXQKQ09ORklHX0NHUk9VUF9NSVNDPXkKQ09ORklHX0NHUk9VUF9ERUJVRz15CkNPTkZJR19TT0NL
X0NHUk9VUF9EQVRBPXkKQ09ORklHX05BTUVTUEFDRVM9eQpDT05GSUdfVVRTX05TPXkKQ09ORklH
X1RJTUVfTlM9eQpDT05GSUdfSVBDX05TPXkKQ09ORklHX1VTRVJfTlM9eQpDT05GSUdfUElEX05T
PXkKQ09ORklHX05FVF9OUz15CiMgQ09ORklHX0NIRUNLUE9JTlRfUkVTVE9SRSBpcyBub3Qgc2V0
CiMgQ09ORklHX1NDSEVEX0FVVE9HUk9VUCBpcyBub3Qgc2V0CkNPTkZJR19SRUxBWT15CkNPTkZJ
R19CTEtfREVWX0lOSVRSRD15CkNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCkNPTkZJR19SRF9H
WklQPXkKQ09ORklHX1JEX0JaSVAyPXkKQ09ORklHX1JEX0xaTUE9eQpDT05GSUdfUkRfWFo9eQpD
T05GSUdfUkRfTFpPPXkKQ09ORklHX1JEX0xaND15CkNPTkZJR19SRF9aU1REPXkKIyBDT05GSUdf
Qk9PVF9DT05GSUcgaXMgbm90IHNldApDT05GSUdfSU5JVFJBTUZTX1BSRVNFUlZFX01USU1FPXkK
Q09ORklHX0NDX09QVElNSVpFX0ZPUl9QRVJGT1JNQU5DRT15CiMgQ09ORklHX0NDX09QVElNSVpF
X0ZPUl9TSVpFIGlzIG5vdCBzZXQKQ09ORklHX0xEX09SUEhBTl9XQVJOPXkKQ09ORklHX0xEX09S
UEhBTl9XQVJOX0xFVkVMPSJ3YXJuIgpDT05GSUdfU1lTQ1RMPXkKQ09ORklHX0hBVkVfVUlEMTY9
eQpDT05GSUdfU1lTQ1RMX0VYQ0VQVElPTl9UUkFDRT15CkNPTkZJR19IQVZFX1BDU1BLUl9QTEFU
Rk9STT15CkNPTkZJR19FWFBFUlQ9eQpDT05GSUdfVUlEMTY9eQpDT05GSUdfTVVMVElVU0VSPXkK
Q09ORklHX1NHRVRNQVNLX1NZU0NBTEw9eQpDT05GSUdfU1lTRlNfU1lTQ0FMTD15CkNPTkZJR19G
SEFORExFPXkKQ09ORklHX1BPU0lYX1RJTUVSUz15CkNPTkZJR19QUklOVEs9eQpDT05GSUdfQlVH
PXkKQ09ORklHX0VMRl9DT1JFPXkKQ09ORklHX1BDU1BLUl9QTEFURk9STT15CkNPTkZJR19CQVNF
X0ZVTEw9eQpDT05GSUdfRlVURVg9eQpDT05GSUdfRlVURVhfUEk9eQpDT05GSUdfRVBPTEw9eQpD
T05GSUdfU0lHTkFMRkQ9eQpDT05GSUdfVElNRVJGRD15CkNPTkZJR19FVkVOVEZEPXkKQ09ORklH
X1NITUVNPXkKQ09ORklHX0FJTz15CkNPTkZJR19JT19VUklORz15CkNPTkZJR19BRFZJU0VfU1lT
Q0FMTFM9eQpDT05GSUdfTUVNQkFSUklFUj15CkNPTkZJR19LQ01QPXkKQ09ORklHX1JTRVE9eQoj
IENPTkZJR19ERUJVR19SU0VRIGlzIG5vdCBzZXQKQ09ORklHX0NBQ0hFU1RBVF9TWVNDQUxMPXkK
IyBDT05GSUdfUEMxMDQgaXMgbm90IHNldApDT05GSUdfS0FMTFNZTVM9eQojIENPTkZJR19LQUxM
U1lNU19TRUxGVEVTVCBpcyBub3Qgc2V0CkNPTkZJR19LQUxMU1lNU19BTEw9eQpDT05GSUdfS0FM
TFNZTVNfQUJTT0xVVEVfUEVSQ1BVPXkKQ09ORklHX0tBTExTWU1TX0JBU0VfUkVMQVRJVkU9eQpD
T05GSUdfQVJDSF9IQVNfTUVNQkFSUklFUl9TWU5DX0NPUkU9eQpDT05GSUdfSEFWRV9QRVJGX0VW
RU5UUz15CgojCiMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKIwpDT05G
SUdfUEVSRl9FVkVOVFM9eQojIENPTkZJR19ERUJVR19QRVJGX1VTRV9WTUFMTE9DIGlzIG5vdCBz
ZXQKIyBlbmQgb2YgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKCkNPTkZJ
R19TWVNURU1fREFUQV9WRVJJRklDQVRJT049eQpDT05GSUdfUFJPRklMSU5HPXkKQ09ORklHX1RS
QUNFUE9JTlRTPXkKCiMKIyBLZXhlYyBhbmQgY3Jhc2ggZmVhdHVyZXMKIwpDT05GSUdfQ1JBU0hf
Q09SRT15CkNPTkZJR19LRVhFQ19DT1JFPXkKQ09ORklHX0tFWEVDPXkKIyBDT05GSUdfS0VYRUNf
RklMRSBpcyBub3Qgc2V0CiMgQ09ORklHX0tFWEVDX0pVTVAgaXMgbm90IHNldApDT05GSUdfQ1JB
U0hfRFVNUD15CkNPTkZJR19DUkFTSF9IT1RQTFVHPXkKQ09ORklHX0NSQVNIX01BWF9NRU1PUllf
UkFOR0VTPTgxOTIKIyBlbmQgb2YgS2V4ZWMgYW5kIGNyYXNoIGZlYXR1cmVzCiMgZW5kIG9mIEdl
bmVyYWwgc2V0dXAKCkNPTkZJR182NEJJVD15CkNPTkZJR19YODZfNjQ9eQpDT05GSUdfWDg2PXkK
Q09ORklHX0lOU1RSVUNUSU9OX0RFQ09ERVI9eQpDT05GSUdfT1VUUFVUX0ZPUk1BVD0iZWxmNjQt
eDg2LTY0IgpDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9S
VD15CkNPTkZJR19NTVU9eQpDT05GSUdfQVJDSF9NTUFQX1JORF9CSVRTX01JTj0yOApDT05GSUdf
QVJDSF9NTUFQX1JORF9CSVRTX01BWD0zMgpDT05GSUdfQVJDSF9NTUFQX1JORF9DT01QQVRfQklU
U19NSU49OApDT05GSUdfQVJDSF9NTUFQX1JORF9DT01QQVRfQklUU19NQVg9MTYKQ09ORklHX0dF
TkVSSUNfSVNBX0RNQT15CkNPTkZJR19HRU5FUklDX0NTVU09eQpDT05GSUdfR0VORVJJQ19CVUc9
eQpDT05GSUdfR0VORVJJQ19CVUdfUkVMQVRJVkVfUE9JTlRFUlM9eQpDT05GSUdfQVJDSF9NQVlf
SEFWRV9QQ19GREM9eQpDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQpDT05GSUdfQVJD
SF9IQVNfQ1BVX1JFTEFYPXkKQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQpDT05G
SUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKQ09ORklHX0FVRElUX0FSQ0g9eQpDT05GSUdfS0FT
QU5fU0hBRE9XX09GRlNFVD0weGRmZmZmYzAwMDAwMDAwMDAKQ09ORklHX0hBVkVfSU5URUxfVFhU
PXkKQ09ORklHX1g4Nl82NF9TTVA9eQpDT05GSUdfQVJDSF9TVVBQT1JUU19VUFJPQkVTPXkKQ09O
RklHX0ZJWF9FQVJMWUNPTl9NRU09eQpDT05GSUdfUEdUQUJMRV9MRVZFTFM9NApDT05GSUdfQ0Nf
SEFTX1NBTkVfU1RBQ0tQUk9URUNUT1I9eQoKIwojIFByb2Nlc3NvciB0eXBlIGFuZCBmZWF0dXJl
cwojCkNPTkZJR19TTVA9eQojIENPTkZJR19YODZfWDJBUElDIGlzIG5vdCBzZXQKQ09ORklHX1g4
Nl9NUFBBUlNFPXkKIyBDT05GSUdfR09MREZJU0ggaXMgbm90IHNldAojIENPTkZJR19YODZfQ1BV
X1JFU0NUUkwgaXMgbm90IHNldApDT05GSUdfWDg2X0VYVEVOREVEX1BMQVRGT1JNPXkKIyBDT05G
SUdfWDg2X1ZTTVAgaXMgbm90IHNldAojIENPTkZJR19YODZfR09MREZJU0ggaXMgbm90IHNldAoj
IENPTkZJR19YODZfSU5URUxfTUlEIGlzIG5vdCBzZXQKIyBDT05GSUdfWDg2X0lOVEVMX0xQU1Mg
aXMgbm90IHNldAojIENPTkZJR19YODZfQU1EX1BMQVRGT1JNX0RFVklDRSBpcyBub3Qgc2V0CkNP
TkZJR19JT1NGX01CST15CiMgQ09ORklHX0lPU0ZfTUJJX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklH
X1g4Nl9TVVBQT1JUU19NRU1PUllfRkFJTFVSRT15CkNPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BP
SU5URVI9eQpDT05GSUdfSFlQRVJWSVNPUl9HVUVTVD15CkNPTkZJR19QQVJBVklSVD15CkNPTkZJ
R19QQVJBVklSVF9ERUJVRz15CkNPTkZJR19QQVJBVklSVF9TUElOTE9DS1M9eQpDT05GSUdfWDg2
X0hWX0NBTExCQUNLX1ZFQ1RPUj15CiMgQ09ORklHX1hFTiBpcyBub3Qgc2V0CkNPTkZJR19LVk1f
R1VFU1Q9eQpDT05GSUdfQVJDSF9DUFVJRExFX0hBTFRQT0xMPXkKQ09ORklHX1BWSD15CiMgQ09O
RklHX1BBUkFWSVJUX1RJTUVfQUNDT1VOVElORyBpcyBub3Qgc2V0CkNPTkZJR19QQVJBVklSVF9D
TE9DSz15CiMgQ09ORklHX0pBSUxIT1VTRV9HVUVTVCBpcyBub3Qgc2V0CiMgQ09ORklHX0FDUk5f
R1VFU1QgaXMgbm90IHNldAojIENPTkZJR19NSzggaXMgbm90IHNldAojIENPTkZJR19NUFNDIGlz
IG5vdCBzZXQKQ09ORklHX01DT1JFMj15CiMgQ09ORklHX01BVE9NIGlzIG5vdCBzZXQKIyBDT05G
SUdfR0VORVJJQ19DUFUgaXMgbm90IHNldApDT05GSUdfWDg2X0lOVEVSTk9ERV9DQUNIRV9TSElG
VD02CkNPTkZJR19YODZfTDFfQ0FDSEVfU0hJRlQ9NgpDT05GSUdfWDg2X0lOVEVMX1VTRVJDT1BZ
PXkKQ09ORklHX1g4Nl9VU0VfUFBST19DSEVDS1NVTT15CkNPTkZJR19YODZfUDZfTk9QPXkKQ09O
RklHX1g4Nl9UU0M9eQpDT05GSUdfWDg2X0hBVkVfUEFFPXkKQ09ORklHX1g4Nl9DTVBYQ0hHNjQ9
eQpDT05GSUdfWDg2X0NNT1Y9eQpDT05GSUdfWDg2X01JTklNVU1fQ1BVX0ZBTUlMWT02NApDT05G
SUdfWDg2X0RFQlVHQ1RMTVNSPXkKQ09ORklHX0lBMzJfRkVBVF9DVEw9eQpDT05GSUdfWDg2X1ZN
WF9GRUFUVVJFX05BTUVTPXkKQ09ORklHX1BST0NFU1NPUl9TRUxFQ1Q9eQpDT05GSUdfQ1BVX1NV
UF9JTlRFTD15CkNPTkZJR19DUFVfU1VQX0FNRD15CiMgQ09ORklHX0NQVV9TVVBfSFlHT04gaXMg
bm90IHNldAojIENPTkZJR19DUFVfU1VQX0NFTlRBVVIgaXMgbm90IHNldAojIENPTkZJR19DUFVf
U1VQX1pIQU9YSU4gaXMgbm90IHNldApDT05GSUdfSFBFVF9USU1FUj15CkNPTkZJR19IUEVUX0VN
VUxBVEVfUlRDPXkKQ09ORklHX0RNST15CiMgQ09ORklHX0dBUlRfSU9NTVUgaXMgbm90IHNldAoj
IENPTkZJR19NQVhTTVAgaXMgbm90IHNldApDT05GSUdfTlJfQ1BVU19SQU5HRV9CRUdJTj0yCkNP
TkZJR19OUl9DUFVTX1JBTkdFX0VORD01MTIKQ09ORklHX05SX0NQVVNfREVGQVVMVD02NApDT05G
SUdfTlJfQ1BVUz04CkNPTkZJR19TQ0hFRF9DTFVTVEVSPXkKQ09ORklHX1NDSEVEX1NNVD15CkNP
TkZJR19TQ0hFRF9NQz15CkNPTkZJR19TQ0hFRF9NQ19QUklPPXkKQ09ORklHX1g4Nl9MT0NBTF9B
UElDPXkKQ09ORklHX1g4Nl9JT19BUElDPXkKQ09ORklHX1g4Nl9SRVJPVVRFX0ZPUl9CUk9LRU5f
Qk9PVF9JUlFTPXkKQ09ORklHX1g4Nl9NQ0U9eQojIENPTkZJR19YODZfTUNFTE9HX0xFR0FDWSBp
cyBub3Qgc2V0CkNPTkZJR19YODZfTUNFX0lOVEVMPXkKQ09ORklHX1g4Nl9NQ0VfQU1EPXkKQ09O
RklHX1g4Nl9NQ0VfVEhSRVNIT0xEPXkKIyBDT05GSUdfWDg2X01DRV9JTkpFQ1QgaXMgbm90IHNl
dAoKIwojIFBlcmZvcm1hbmNlIG1vbml0b3JpbmcKIwpDT05GSUdfUEVSRl9FVkVOVFNfSU5URUxf
VU5DT1JFPXkKQ09ORklHX1BFUkZfRVZFTlRTX0lOVEVMX1JBUEw9eQpDT05GSUdfUEVSRl9FVkVO
VFNfSU5URUxfQ1NUQVRFPXkKIyBDT05GSUdfUEVSRl9FVkVOVFNfQU1EX1BPV0VSIGlzIG5vdCBz
ZXQKQ09ORklHX1BFUkZfRVZFTlRTX0FNRF9VTkNPUkU9eQojIENPTkZJR19QRVJGX0VWRU5UU19B
TURfQlJTIGlzIG5vdCBzZXQKIyBlbmQgb2YgUGVyZm9ybWFuY2UgbW9uaXRvcmluZwoKQ09ORklH
X1g4Nl8xNkJJVD15CkNPTkZJR19YODZfRVNQRklYNjQ9eQpDT05GSUdfWDg2X1ZTWVNDQUxMX0VN
VUxBVElPTj15CkNPTkZJR19YODZfSU9QTF9JT1BFUk09eQpDT05GSUdfTUlDUk9DT0RFPXkKIyBD
T05GSUdfTUlDUk9DT0RFX0xBVEVfTE9BRElORyBpcyBub3Qgc2V0CkNPTkZJR19YODZfTVNSPXkK
Q09ORklHX1g4Nl9DUFVJRD15CiMgQ09ORklHX1g4Nl81TEVWRUwgaXMgbm90IHNldApDT05GSUdf
WDg2X0RJUkVDVF9HQlBBR0VTPXkKIyBDT05GSUdfWDg2X0NQQV9TVEFUSVNUSUNTIGlzIG5vdCBz
ZXQKQ09ORklHX05VTUE9eQpDT05GSUdfQU1EX05VTUE9eQpDT05GSUdfWDg2XzY0X0FDUElfTlVN
QT15CiMgQ09ORklHX05VTUFfRU1VIGlzIG5vdCBzZXQKQ09ORklHX05PREVTX1NISUZUPTYKQ09O
RklHX0FSQ0hfU1BBUlNFTUVNX0VOQUJMRT15CkNPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxU
PXkKQ09ORklHX0FSQ0hfUFJPQ19LQ09SRV9URVhUPXkKQ09ORklHX0lMTEVHQUxfUE9JTlRFUl9W
QUxVRT0weGRlYWQwMDAwMDAwMDAwMDAKIyBDT05GSUdfWDg2X1BNRU1fTEVHQUNZIGlzIG5vdCBz
ZXQKIyBDT05GSUdfWDg2X0NIRUNLX0JJT1NfQ09SUlVQVElPTiBpcyBub3Qgc2V0CkNPTkZJR19N
VFJSPXkKIyBDT05GSUdfTVRSUl9TQU5JVElaRVIgaXMgbm90IHNldApDT05GSUdfWDg2X1BBVD15
CkNPTkZJR19BUkNIX1VTRVNfUEdfVU5DQUNIRUQ9eQpDT05GSUdfWDg2X1VNSVA9eQpDT05GSUdf
Q0NfSEFTX0lCVD15CkNPTkZJR19YODZfQ0VUPXkKQ09ORklHX1g4Nl9LRVJORUxfSUJUPXkKQ09O
RklHX1g4Nl9JTlRFTF9NRU1PUllfUFJPVEVDVElPTl9LRVlTPXkKIyBDT05GSUdfWDg2X0lOVEVM
X1RTWF9NT0RFX09GRiBpcyBub3Qgc2V0CkNPTkZJR19YODZfSU5URUxfVFNYX01PREVfT049eQoj
IENPTkZJR19YODZfSU5URUxfVFNYX01PREVfQVVUTyBpcyBub3Qgc2V0CiMgQ09ORklHX1g4Nl9V
U0VSX1NIQURPV19TVEFDSyBpcyBub3Qgc2V0CiMgQ09ORklHX0VGSSBpcyBub3Qgc2V0CkNPTkZJ
R19IWl8xMDA9eQojIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAojIENPTkZJR19IWl8zMDAgaXMg
bm90IHNldAojIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKQ09ORklHX0haPTEwMApDT05GSUdf
U0NIRURfSFJUSUNLPXkKQ09ORklHX0FSQ0hfU1VQUE9SVFNfS0VYRUM9eQpDT05GSUdfQVJDSF9T
VVBQT1JUU19LRVhFQ19GSUxFPXkKQ09ORklHX0FSQ0hfU1VQUE9SVFNfS0VYRUNfUFVSR0FUT1JZ
PXkKQ09ORklHX0FSQ0hfU1VQUE9SVFNfS0VYRUNfU0lHPXkKQ09ORklHX0FSQ0hfU1VQUE9SVFNf
S0VYRUNfU0lHX0ZPUkNFPXkKQ09ORklHX0FSQ0hfU1VQUE9SVFNfS0VYRUNfQlpJTUFHRV9WRVJJ
RllfU0lHPXkKQ09ORklHX0FSQ0hfU1VQUE9SVFNfS0VYRUNfSlVNUD15CkNPTkZJR19BUkNIX1NV
UFBPUlRTX0NSQVNIX0RVTVA9eQpDT05GSUdfQVJDSF9TVVBQT1JUU19DUkFTSF9IT1RQTFVHPXkK
Q09ORklHX0FSQ0hfSEFTX0dFTkVSSUNfQ1JBU0hLRVJORUxfUkVTRVJWQVRJT049eQpDT05GSUdf
UEhZU0lDQUxfU1RBUlQ9MHgxMDAwMDAwCiMgQ09ORklHX1JFTE9DQVRBQkxFIGlzIG5vdCBzZXQK
Q09ORklHX1BIWVNJQ0FMX0FMSUdOPTB4MjAwMDAwCiMgQ09ORklHX0FERFJFU1NfTUFTS0lORyBp
cyBub3Qgc2V0CkNPTkZJR19IT1RQTFVHX0NQVT15CiMgQ09ORklHX0NPTVBBVF9WRFNPIGlzIG5v
dCBzZXQKQ09ORklHX0xFR0FDWV9WU1lTQ0FMTF9YT05MWT15CiMgQ09ORklHX0xFR0FDWV9WU1lT
Q0FMTF9OT05FIGlzIG5vdCBzZXQKQ09ORklHX0NNRExJTkVfQk9PTD15CkNPTkZJR19DTURMSU5F
PSJlYXJseXByaW50az1zZXJpYWwgbmV0LmlmbmFtZXM9MCBzeXNjdGwua2VybmVsLmh1bmdfdGFz
a19hbGxfY3B1X2JhY2t0cmFjZT0xIGltYV9wb2xpY3k9dGNiIG5mLWNvbm50cmFjay1mdHAucG9y
dHM9MjAwMDAgbmYtY29ubnRyYWNrLXRmdHAucG9ydHM9MjAwMDAgbmYtY29ubnRyYWNrLXNpcC5w
b3J0cz0yMDAwMCBuZi1jb25udHJhY2staXJjLnBvcnRzPTIwMDAwIG5mLWNvbm50cmFjay1zYW5l
LnBvcnRzPTIwMDAwIGJpbmRlci5kZWJ1Z19tYXNrPTAgcmN1cGRhdGUucmN1X2V4cGVkaXRlZD0x
IHJjdXBkYXRlLnJjdV9jcHVfc3RhbGxfY3B1dGltZT0xIG5vX2hhc2hfcG9pbnRlcnMgcGFnZV9v
d25lcj1vbiBzeXNjdGwudm0ubnJfaHVnZXBhZ2VzPTQgc3lzY3RsLnZtLm5yX292ZXJjb21taXRf
aHVnZXBhZ2VzPTQgc2VjcmV0bWVtLmVuYWJsZT0xIHN5c2N0bC5tYXhfcmN1X3N0YWxsX3RvX3Bh
bmljPTEgbXNyLmFsbG93X3dyaXRlcz1vZmYgY29yZWR1bXBfZmlsdGVyPTB4ZmZmZiByb290PS9k
ZXYvc2RhIGNvbnNvbGU9dHR5UzAgdnN5c2NhbGw9bmF0aXZlIG51bWE9ZmFrZT0yIGt2bS1pbnRl
bC5uZXN0ZWQ9MSBzcGVjX3N0b3JlX2J5cGFzc19kaXNhYmxlPXByY3RsIG5vcGNpZCB2aXZpZC5u
X2RldnM9MTYgdml2aWQubXVsdGlwbGFuYXI9MSwyLDEsMiwxLDIsMSwyLDEsMiwxLDIsMSwyLDEs
MiBuZXRyb20ubnJfbmRldnM9MTYgcm9zZS5yb3NlX25kZXZzPTE2IHNtcC5jc2RfbG9ja190aW1l
b3V0PTEwMDAwMCB3YXRjaGRvZ190aHJlc2g9NTUgd29ya3F1ZXVlLndhdGNoZG9nX3RocmVzaD0x
NDAgc3lzY3RsLm5ldC5jb3JlLm5ldGRldl91bnJlZ2lzdGVyX3RpbWVvdXRfc2Vjcz0xNDAgZHVt
bXlfaGNkLm51bT04IHBhbmljX29uX3dhcm49MSIKIyBDT05GSUdfQ01ETElORV9PVkVSUklERSBp
cyBub3Qgc2V0CkNPTkZJR19NT0RJRllfTERUX1NZU0NBTEw9eQojIENPTkZJR19TVFJJQ1RfU0lH
QUxUU1RBQ0tfU0laRSBpcyBub3Qgc2V0CkNPTkZJR19IQVZFX0xJVkVQQVRDSD15CiMgZW5kIG9m
IFByb2Nlc3NvciB0eXBlIGFuZCBmZWF0dXJlcwoKQ09ORklHX0NDX0hBU19TTFM9eQpDT05GSUdf
Q0NfSEFTX1JFVFVSTl9USFVOSz15CkNPTkZJR19DQ19IQVNfRU5UUllfUEFERElORz15CkNPTkZJ
R19GVU5DVElPTl9QQURESU5HX0NGST0xMQpDT05GSUdfRlVOQ1RJT05fUEFERElOR19CWVRFUz0x
NgpDT05GSUdfU1BFQ1VMQVRJT05fTUlUSUdBVElPTlM9eQojIENPTkZJR19QQUdFX1RBQkxFX0lT
T0xBVElPTiBpcyBub3Qgc2V0CiMgQ09ORklHX1JFVFBPTElORSBpcyBub3Qgc2V0CkNPTkZJR19D
UFVfSUJQQl9FTlRSWT15CkNPTkZJR19DUFVfSUJSU19FTlRSWT15CiMgQ09ORklHX1NMUyBpcyBu
b3Qgc2V0CiMgQ09ORklHX0dEU19GT1JDRV9NSVRJR0FUSU9OIGlzIG5vdCBzZXQKQ09ORklHX0FS
Q0hfSEFTX0FERF9QQUdFUz15CgojCiMgUG93ZXIgbWFuYWdlbWVudCBhbmQgQUNQSSBvcHRpb25z
CiMKQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fSEVBREVSPXkKQ09ORklHX1NVU1BFTkQ9eQpDT05G
SUdfU1VTUEVORF9GUkVFWkVSPXkKIyBDT05GSUdfU1VTUEVORF9TS0lQX1NZTkMgaXMgbm90IHNl
dApDT05GSUdfSElCRVJOQVRFX0NBTExCQUNLUz15CkNPTkZJR19ISUJFUk5BVElPTj15CkNPTkZJ
R19ISUJFUk5BVElPTl9TTkFQU0hPVF9ERVY9eQpDT05GSUdfUE1fU1REX1BBUlRJVElPTj0iIgpD
T05GSUdfUE1fU0xFRVA9eQpDT05GSUdfUE1fU0xFRVBfU01QPXkKIyBDT05GSUdfUE1fQVVUT1NM
RUVQIGlzIG5vdCBzZXQKIyBDT05GSUdfUE1fVVNFUlNQQUNFX0FVVE9TTEVFUCBpcyBub3Qgc2V0
CiMgQ09ORklHX1BNX1dBS0VMT0NLUyBpcyBub3Qgc2V0CkNPTkZJR19QTT15CkNPTkZJR19QTV9E
RUJVRz15CiMgQ09ORklHX1BNX0FEVkFOQ0VEX0RFQlVHIGlzIG5vdCBzZXQKIyBDT05GSUdfUE1f
VEVTVF9TVVNQRU5EIGlzIG5vdCBzZXQKQ09ORklHX1BNX1NMRUVQX0RFQlVHPXkKQ09ORklHX1BN
X1RSQUNFPXkKQ09ORklHX1BNX1RSQUNFX1JUQz15CkNPTkZJR19QTV9DTEs9eQojIENPTkZJR19X
UV9QT1dFUl9FRkZJQ0lFTlRfREVGQVVMVCBpcyBub3Qgc2V0CiMgQ09ORklHX0VORVJHWV9NT0RF
TCBpcyBub3Qgc2V0CkNPTkZJR19BUkNIX1NVUFBPUlRTX0FDUEk9eQpDT05GSUdfQUNQST15CkNP
TkZJR19BQ1BJX0xFR0FDWV9UQUJMRVNfTE9PS1VQPXkKQ09ORklHX0FSQ0hfTUlHSFRfSEFWRV9B
Q1BJX1BEQz15CkNPTkZJR19BQ1BJX1NZU1RFTV9QT1dFUl9TVEFURVNfU1VQUE9SVD15CkNPTkZJ
R19BQ1BJX1RIRVJNQUxfTElCPXkKIyBDT05GSUdfQUNQSV9ERUJVR0dFUiBpcyBub3Qgc2V0CkNP
TkZJR19BQ1BJX1NQQ1JfVEFCTEU9eQojIENPTkZJR19BQ1BJX0ZQRFQgaXMgbm90IHNldApDT05G
SUdfQUNQSV9MUElUPXkKQ09ORklHX0FDUElfU0xFRVA9eQpDT05GSUdfQUNQSV9SRVZfT1ZFUlJJ
REVfUE9TU0lCTEU9eQojIENPTkZJR19BQ1BJX0VDX0RFQlVHRlMgaXMgbm90IHNldApDT05GSUdf
QUNQSV9BQz15CkNPTkZJR19BQ1BJX0JBVFRFUlk9eQpDT05GSUdfQUNQSV9CVVRUT049eQpDT05G
SUdfQUNQSV9WSURFTz15CkNPTkZJR19BQ1BJX0ZBTj15CiMgQ09ORklHX0FDUElfVEFEIGlzIG5v
dCBzZXQKQ09ORklHX0FDUElfRE9DSz15CkNPTkZJR19BQ1BJX0NQVV9GUkVRX1BTUz15CkNPTkZJ
R19BQ1BJX1BST0NFU1NPUl9DU1RBVEU9eQpDT05GSUdfQUNQSV9QUk9DRVNTT1JfSURMRT15CkNP
TkZJR19BQ1BJX0NQUENfTElCPXkKQ09ORklHX0FDUElfUFJPQ0VTU09SPXkKQ09ORklHX0FDUElf
SE9UUExVR19DUFU9eQojIENPTkZJR19BQ1BJX1BST0NFU1NPUl9BR0dSRUdBVE9SIGlzIG5vdCBz
ZXQKQ09ORklHX0FDUElfVEhFUk1BTD15CkNPTkZJR19BQ1BJX1BMQVRGT1JNX1BST0ZJTEU9eQpD
T05GSUdfQVJDSF9IQVNfQUNQSV9UQUJMRV9VUEdSQURFPXkKQ09ORklHX0FDUElfVEFCTEVfVVBH
UkFERT15CiMgQ09ORklHX0FDUElfREVCVUcgaXMgbm90IHNldAojIENPTkZJR19BQ1BJX1BDSV9T
TE9UIGlzIG5vdCBzZXQKQ09ORklHX0FDUElfQ09OVEFJTkVSPXkKQ09ORklHX0FDUElfSE9UUExV
R19JT0FQSUM9eQojIENPTkZJR19BQ1BJX1NCUyBpcyBub3Qgc2V0CiMgQ09ORklHX0FDUElfSEVE
IGlzIG5vdCBzZXQKIyBDT05GSUdfQUNQSV9DVVNUT01fTUVUSE9EIGlzIG5vdCBzZXQKIyBDT05G
SUdfQUNQSV9SRURVQ0VEX0hBUkRXQVJFX09OTFkgaXMgbm90IHNldAojIENPTkZJR19BQ1BJX05G
SVQgaXMgbm90IHNldApDT05GSUdfQUNQSV9OVU1BPXkKIyBDT05GSUdfQUNQSV9ITUFUIGlzIG5v
dCBzZXQKQ09ORklHX0hBVkVfQUNQSV9BUEVJPXkKQ09ORklHX0hBVkVfQUNQSV9BUEVJX05NST15
CiMgQ09ORklHX0FDUElfQVBFSSBpcyBub3Qgc2V0CiMgQ09ORklHX0FDUElfRFBURiBpcyBub3Qg
c2V0CiMgQ09ORklHX0FDUElfRVhUTE9HIGlzIG5vdCBzZXQKIyBDT05GSUdfQUNQSV9DT05GSUdG
UyBpcyBub3Qgc2V0CiMgQ09ORklHX0FDUElfUEZSVVQgaXMgbm90IHNldApDT05GSUdfQUNQSV9Q
Q0M9eQojIENPTkZJR19BQ1BJX0ZGSCBpcyBub3Qgc2V0CiMgQ09ORklHX1BNSUNfT1BSRUdJT04g
aXMgbm90IHNldApDT05GSUdfWDg2X1BNX1RJTUVSPXkKCiMKIyBDUFUgRnJlcXVlbmN5IHNjYWxp
bmcKIwpDT05GSUdfQ1BVX0ZSRVE9eQpDT05GSUdfQ1BVX0ZSRVFfR09WX0FUVFJfU0VUPXkKQ09O
RklHX0NQVV9GUkVRX0dPVl9DT01NT049eQojIENPTkZJR19DUFVfRlJFUV9TVEFUIGlzIG5vdCBz
ZXQKIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUEVSRk9STUFOQ0UgaXMgbm90IHNldAoj
IENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QT1dFUlNBVkUgaXMgbm90IHNldApDT05GSUdf
Q1BVX0ZSRVFfREVGQVVMVF9HT1ZfVVNFUlNQQUNFPXkKIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVM
VF9HT1ZfU0NIRURVVElMIGlzIG5vdCBzZXQKQ09ORklHX0NQVV9GUkVRX0dPVl9QRVJGT1JNQU5D
RT15CiMgQ09ORklHX0NQVV9GUkVRX0dPVl9QT1dFUlNBVkUgaXMgbm90IHNldApDT05GSUdfQ1BV
X0ZSRVFfR09WX1VTRVJTUEFDRT15CkNPTkZJR19DUFVfRlJFUV9HT1ZfT05ERU1BTkQ9eQojIENP
TkZJR19DUFVfRlJFUV9HT1ZfQ09OU0VSVkFUSVZFIGlzIG5vdCBzZXQKQ09ORklHX0NQVV9GUkVR
X0dPVl9TQ0hFRFVUSUw9eQoKIwojIENQVSBmcmVxdWVuY3kgc2NhbGluZyBkcml2ZXJzCiMKIyBD
T05GSUdfQ1BVRlJFUV9EVCBpcyBub3Qgc2V0CiMgQ09ORklHX0NQVUZSRVFfRFRfUExBVERFViBp
cyBub3Qgc2V0CkNPTkZJR19YODZfSU5URUxfUFNUQVRFPXkKIyBDT05GSUdfWDg2X1BDQ19DUFVG
UkVRIGlzIG5vdCBzZXQKIyBDT05GSUdfWDg2X0FNRF9QU1RBVEUgaXMgbm90IHNldAojIENPTkZJ
R19YODZfQU1EX1BTVEFURV9VVCBpcyBub3Qgc2V0CkNPTkZJR19YODZfQUNQSV9DUFVGUkVRPXkK
Q09ORklHX1g4Nl9BQ1BJX0NQVUZSRVFfQ1BCPXkKIyBDT05GSUdfWDg2X1BPV0VSTk9XX0s4IGlz
IG5vdCBzZXQKIyBDT05GSUdfWDg2X0FNRF9GUkVRX1NFTlNJVElWSVRZIGlzIG5vdCBzZXQKIyBD
T05GSUdfWDg2X1NQRUVEU1RFUF9DRU5UUklOTyBpcyBub3Qgc2V0CiMgQ09ORklHX1g4Nl9QNF9D
TE9DS01PRCBpcyBub3Qgc2V0CgojCiMgc2hhcmVkIG9wdGlvbnMKIwojIGVuZCBvZiBDUFUgRnJl
cXVlbmN5IHNjYWxpbmcKCiMKIyBDUFUgSWRsZQojCkNPTkZJR19DUFVfSURMRT15CiMgQ09ORklH
X0NQVV9JRExFX0dPVl9MQURERVIgaXMgbm90IHNldApDT05GSUdfQ1BVX0lETEVfR09WX01FTlU9
eQojIENPTkZJR19DUFVfSURMRV9HT1ZfVEVPIGlzIG5vdCBzZXQKQ09ORklHX0NQVV9JRExFX0dP
Vl9IQUxUUE9MTD15CkNPTkZJR19IQUxUUE9MTF9DUFVJRExFPXkKIyBlbmQgb2YgQ1BVIElkbGUK
CkNPTkZJR19JTlRFTF9JRExFPXkKIyBlbmQgb2YgUG93ZXIgbWFuYWdlbWVudCBhbmQgQUNQSSBv
cHRpb25zCgojCiMgQnVzIG9wdGlvbnMgKFBDSSBldGMuKQojCkNPTkZJR19QQ0lfRElSRUNUPXkK
Q09ORklHX1BDSV9NTUNPTkZJRz15CkNPTkZJR19NTUNPTkZfRkFNMTBIPXkKIyBDT05GSUdfUENJ
X0NOQjIwTEVfUVVJUksgaXMgbm90IHNldAojIENPTkZJR19JU0FfQlVTIGlzIG5vdCBzZXQKQ09O
RklHX0lTQV9ETUFfQVBJPXkKQ09ORklHX0FNRF9OQj15CiMgZW5kIG9mIEJ1cyBvcHRpb25zIChQ
Q0kgZXRjLikKCiMKIyBCaW5hcnkgRW11bGF0aW9ucwojCkNPTkZJR19JQTMyX0VNVUxBVElPTj15
CiMgQ09ORklHX0lBMzJfRU1VTEFUSU9OX0RFRkFVTFRfRElTQUJMRUQgaXMgbm90IHNldApDT05G
SUdfWDg2X1gzMl9BQkk9eQpDT05GSUdfQ09NUEFUXzMyPXkKQ09ORklHX0NPTVBBVD15CkNPTkZJ
R19DT01QQVRfRk9SX1U2NF9BTElHTk1FTlQ9eQojIGVuZCBvZiBCaW5hcnkgRW11bGF0aW9ucwoK
Q09ORklHX0hBVkVfS1ZNPXkKQ09ORklHX1ZJUlRVQUxJWkFUSU9OPXkKIyBDT05GSUdfS1ZNIGlz
IG5vdCBzZXQKQ09ORklHX0FTX0FWWDUxMj15CkNPTkZJR19BU19TSEExX05JPXkKQ09ORklHX0FT
X1NIQTI1Nl9OST15CkNPTkZJR19BU19UUEFVU0U9eQpDT05GSUdfQVNfR0ZOST15CkNPTkZJR19B
U19XUlVTUz15CgojCiMgR2VuZXJhbCBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IG9wdGlvbnMKIwpD
T05GSUdfSE9UUExVR19TTVQ9eQpDT05GSUdfSE9UUExVR19DT1JFX1NZTkM9eQpDT05GSUdfSE9U
UExVR19DT1JFX1NZTkNfREVBRD15CkNPTkZJR19IT1RQTFVHX0NPUkVfU1lOQ19GVUxMPXkKQ09O
RklHX0hPVFBMVUdfU1BMSVRfU1RBUlRVUD15CkNPTkZJR19IT1RQTFVHX1BBUkFMTEVMPXkKQ09O
RklHX0dFTkVSSUNfRU5UUlk9eQojIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKQ09ORklHX0pV
TVBfTEFCRUw9eQojIENPTkZJR19TVEFUSUNfS0VZU19TRUxGVEVTVCBpcyBub3Qgc2V0CiMgQ09O
RklHX1NUQVRJQ19DQUxMX1NFTEZURVNUIGlzIG5vdCBzZXQKQ09ORklHX1VQUk9CRVM9eQpDT05G
SUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CkNPTkZJR19BUkNIX1VTRV9CVUlM
VElOX0JTV0FQPXkKQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKQ09ORklHX0hBVkVfS1BST0JF
Uz15CkNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQpDT05GSUdfSEFWRV9PUFRQUk9CRVM9eQpDT05G
SUdfSEFWRV9LUFJPQkVTX09OX0ZUUkFDRT15CkNPTkZJR19BUkNIX0NPUlJFQ1RfU1RBQ0tUUkFD
RV9PTl9LUkVUUFJPQkU9eQpDT05GSUdfSEFWRV9GVU5DVElPTl9FUlJPUl9JTkpFQ1RJT049eQpD
T05GSUdfSEFWRV9OTUk9eQpDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CkNPTkZJR19U
UkFDRV9JUlFGTEFHU19OTUlfU1VQUE9SVD15CkNPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkK
Q09ORklHX0hBVkVfRE1BX0NPTlRJR1VPVVM9eQpDT05GSUdfR0VORVJJQ19TTVBfSURMRV9USFJF
QUQ9eQpDT05GSUdfQVJDSF9IQVNfRk9SVElGWV9TT1VSQ0U9eQpDT05GSUdfQVJDSF9IQVNfU0VU
X01FTU9SWT15CkNPTkZJR19BUkNIX0hBU19TRVRfRElSRUNUX01BUD15CkNPTkZJR19BUkNIX0hB
U19DUFVfRklOQUxJWkVfSU5JVD15CkNPTkZJR19IQVZFX0FSQ0hfVEhSRUFEX1NUUlVDVF9XSElU
RUxJU1Q9eQpDT05GSUdfQVJDSF9XQU5UU19EWU5BTUlDX1RBU0tfU1RSVUNUPXkKQ09ORklHX0FS
Q0hfV0FOVFNfTk9fSU5TVFI9eQpDT05GSUdfSEFWRV9BU01fTU9EVkVSU0lPTlM9eQpDT05GSUdf
SEFWRV9SRUdTX0FORF9TVEFDS19BQ0NFU1NfQVBJPXkKQ09ORklHX0hBVkVfUlNFUT15CkNPTkZJ
R19IQVZFX1JVU1Q9eQpDT05GSUdfSEFWRV9GVU5DVElPTl9BUkdfQUNDRVNTX0FQST15CkNPTkZJ
R19IQVZFX0hXX0JSRUFLUE9JTlQ9eQpDT05GSUdfSEFWRV9NSVhFRF9CUkVBS1BPSU5UU19SRUdT
PXkKQ09ORklHX0hBVkVfVVNFUl9SRVRVUk5fTk9USUZJRVI9eQpDT05GSUdfSEFWRV9QRVJGX0VW
RU5UU19OTUk9eQpDT05GSUdfSEFWRV9IQVJETE9DS1VQX0RFVEVDVE9SX1BFUkY9eQpDT05GSUdf
SEFWRV9QRVJGX1JFR1M9eQpDT05GSUdfSEFWRV9QRVJGX1VTRVJfU1RBQ0tfRFVNUD15CkNPTkZJ
R19IQVZFX0FSQ0hfSlVNUF9MQUJFTD15CkNPTkZJR19IQVZFX0FSQ0hfSlVNUF9MQUJFTF9SRUxB
VElWRT15CkNPTkZJR19NTVVfR0FUSEVSX1RBQkxFX0ZSRUU9eQpDT05GSUdfTU1VX0dBVEhFUl9S
Q1VfVEFCTEVfRlJFRT15CkNPTkZJR19NTVVfR0FUSEVSX01FUkdFX1ZNQVM9eQpDT05GSUdfTU1V
X0xBWllfVExCX1JFRkNPVU5UPXkKQ09ORklHX0FSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHPXkK
Q09ORklHX0FSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUz15CkNPTkZJR19IQVZFX0FMSUdO
RURfU1RSVUNUX1BBR0U9eQpDT05GSUdfSEFWRV9DTVBYQ0hHX0xPQ0FMPXkKQ09ORklHX0hBVkVf
Q01QWENIR19ET1VCTEU9eQpDT05GSUdfQVJDSF9XQU5UX0NPTVBBVF9JUENfUEFSU0VfVkVSU0lP
Tj15CkNPTkZJR19BUkNIX1dBTlRfT0xEX0NPTVBBVF9JUEM9eQpDT05GSUdfSEFWRV9BUkNIX1NF
Q0NPTVA9eQpDT05GSUdfSEFWRV9BUkNIX1NFQ0NPTVBfRklMVEVSPXkKQ09ORklHX1NFQ0NPTVA9
eQpDT05GSUdfU0VDQ09NUF9GSUxURVI9eQojIENPTkZJR19TRUNDT01QX0NBQ0hFX0RFQlVHIGlz
IG5vdCBzZXQKQ09ORklHX0hBVkVfQVJDSF9TVEFDS0xFQUs9eQpDT05GSUdfSEFWRV9TVEFDS1BS
T1RFQ1RPUj15CkNPTkZJR19TVEFDS1BST1RFQ1RPUj15CkNPTkZJR19TVEFDS1BST1RFQ1RPUl9T
VFJPTkc9eQpDT05GSUdfQVJDSF9TVVBQT1JUU19MVE9fQ0xBTkc9eQpDT05GSUdfQVJDSF9TVVBQ
T1JUU19MVE9fQ0xBTkdfVEhJTj15CkNPTkZJR19MVE9fTk9ORT15CkNPTkZJR19BUkNIX1NVUFBP
UlRTX0NGSV9DTEFORz15CkNPTkZJR19IQVZFX0FSQ0hfV0lUSElOX1NUQUNLX0ZSQU1FUz15CkNP
TkZJR19IQVZFX0NPTlRFWFRfVFJBQ0tJTkdfVVNFUj15CkNPTkZJR19IQVZFX0NPTlRFWFRfVFJB
Q0tJTkdfVVNFUl9PRkZTVEFDSz15CkNPTkZJR19IQVZFX1ZJUlRfQ1BVX0FDQ09VTlRJTkdfR0VO
PXkKQ09ORklHX0hBVkVfSVJRX1RJTUVfQUNDT1VOVElORz15CkNPTkZJR19IQVZFX01PVkVfUFVE
PXkKQ09ORklHX0hBVkVfTU9WRV9QTUQ9eQpDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hV
R0VQQUdFPXkKQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQ9eQpDT05G
SUdfSEFWRV9BUkNIX0hVR0VfVk1BUD15CkNPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFMTE9DPXkK
Q09ORklHX0FSQ0hfV0FOVF9IVUdFX1BNRF9TSEFSRT15CkNPTkZJR19IQVZFX0FSQ0hfU09GVF9E
SVJUWT15CkNPTkZJR19IQVZFX01PRF9BUkNIX1NQRUNJRklDPXkKQ09ORklHX01PRFVMRVNfVVNF
X0VMRl9SRUxBPXkKQ09ORklHX0hBVkVfSVJRX0VYSVRfT05fSVJRX1NUQUNLPXkKQ09ORklHX0hB
VkVfU09GVElSUV9PTl9PV05fU1RBQ0s9eQpDT05GSUdfU09GVElSUV9PTl9PV05fU1RBQ0s9eQpD
T05GSUdfQVJDSF9IQVNfRUxGX1JBTkRPTUlaRT15CkNPTkZJR19IQVZFX0FSQ0hfTU1BUF9STkRf
QklUUz15CkNPTkZJR19IQVZFX0VYSVRfVEhSRUFEPXkKQ09ORklHX0FSQ0hfTU1BUF9STkRfQklU
Uz0yOApDT05GSUdfSEFWRV9BUkNIX01NQVBfUk5EX0NPTVBBVF9CSVRTPXkKQ09ORklHX0FSQ0hf
TU1BUF9STkRfQ09NUEFUX0JJVFM9OApDT05GSUdfSEFWRV9BUkNIX0NPTVBBVF9NTUFQX0JBU0VT
PXkKQ09ORklHX1BBR0VfU0laRV9MRVNTX1RIQU5fNjRLQj15CkNPTkZJR19QQUdFX1NJWkVfTEVT
U19USEFOXzI1NktCPXkKQ09ORklHX0hBVkVfT0JKVE9PTD15CkNPTkZJR19IQVZFX0pVTVBfTEFC
RUxfSEFDSz15CkNPTkZJR19IQVZFX05PSU5TVFJfSEFDSz15CkNPTkZJR19IQVZFX05PSU5TVFJf
VkFMSURBVElPTj15CkNPTkZJR19IQVZFX1VBQ0NFU1NfVkFMSURBVElPTj15CkNPTkZJR19IQVZF
X1NUQUNLX1ZBTElEQVRJT049eQpDT05GSUdfSEFWRV9SRUxJQUJMRV9TVEFDS1RSQUNFPXkKQ09O
RklHX09MRF9TSUdTVVNQRU5EMz15CkNPTkZJR19DT01QQVRfT0xEX1NJR0FDVElPTj15CkNPTkZJ
R19DT01QQVRfMzJCSVRfVElNRT15CkNPTkZJR19IQVZFX0FSQ0hfVk1BUF9TVEFDSz15CkNPTkZJ
R19WTUFQX1NUQUNLPXkKQ09ORklHX0hBVkVfQVJDSF9SQU5ET01JWkVfS1NUQUNLX09GRlNFVD15
CkNPTkZJR19SQU5ET01JWkVfS1NUQUNLX09GRlNFVD15CiMgQ09ORklHX1JBTkRPTUlaRV9LU1RB
Q0tfT0ZGU0VUX0RFRkFVTFQgaXMgbm90IHNldApDT05GSUdfQVJDSF9IQVNfU1RSSUNUX0tFUk5F
TF9SV1g9eQpDT05GSUdfU1RSSUNUX0tFUk5FTF9SV1g9eQpDT05GSUdfQVJDSF9IQVNfU1RSSUNU
X01PRFVMRV9SV1g9eQpDT05GSUdfU1RSSUNUX01PRFVMRV9SV1g9eQpDT05GSUdfSEFWRV9BUkNI
X1BSRUwzMl9SRUxPQ0FUSU9OUz15CiMgQ09ORklHX0xPQ0tfRVZFTlRfQ09VTlRTIGlzIG5vdCBz
ZXQKQ09ORklHX0FSQ0hfSEFTX01FTV9FTkNSWVBUPXkKQ09ORklHX0hBVkVfU1RBVElDX0NBTEw9
eQpDT05GSUdfSEFWRV9TVEFUSUNfQ0FMTF9JTkxJTkU9eQpDT05GSUdfSEFWRV9QUkVFTVBUX0RZ
TkFNSUM9eQpDT05GSUdfSEFWRV9QUkVFTVBUX0RZTkFNSUNfQ0FMTD15CkNPTkZJR19BUkNIX1dB
TlRfTERfT1JQSEFOX1dBUk49eQpDT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9
eQpDT05GSUdfQVJDSF9TVVBQT1JUU19QQUdFX1RBQkxFX0NIRUNLPXkKQ09ORklHX0FSQ0hfSEFT
X0VMRkNPUkVfQ09NUEFUPXkKQ09ORklHX0FSQ0hfSEFTX1BBUkFOT0lEX0wxRF9GTFVTSD15CkNP
TkZJR19EWU5BTUlDX1NJR0ZSQU1FPXkKQ09ORklHX0FSQ0hfSEFTX0hXX1BURV9ZT1VORz15CkNP
TkZJR19BUkNIX0hBU19OT05MRUFGX1BNRF9ZT1VORz15CgojCiMgR0NPVi1iYXNlZCBrZXJuZWwg
cHJvZmlsaW5nCiMKIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldApDT05GSUdfQVJDSF9I
QVNfR0NPVl9QUk9GSUxFX0FMTD15CiMgZW5kIG9mIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGlu
ZwoKQ09ORklHX0hBVkVfR0NDX1BMVUdJTlM9eQpDT05GSUdfRlVOQ1RJT05fQUxJR05NRU5UXzRC
PXkKQ09ORklHX0ZVTkNUSU9OX0FMSUdOTUVOVF8xNkI9eQpDT05GSUdfRlVOQ1RJT05fQUxJR05N
RU5UPTE2CiMgZW5kIG9mIEdlbmVyYWwgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBvcHRpb25zCgpD
T05GSUdfUlRfTVVURVhFUz15CkNPTkZJR19CQVNFX1NNQUxMPTAKQ09ORklHX01PRFVMRV9TSUdf
Rk9STUFUPXkKQ09ORklHX01PRFVMRVM9eQojIENPTkZJR19NT0RVTEVfREVCVUcgaXMgbm90IHNl
dAojIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CkNPTkZJR19NT0RVTEVfVU5M
T0FEPXkKQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQojIENPTkZJR19NT0RVTEVfVU5MT0FE
X1RBSU5UX1RSQUNLSU5HIGlzIG5vdCBzZXQKIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNl
dAojIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldApDT05GSUdfTU9EVUxF
X1NJRz15CiMgQ09ORklHX01PRFVMRV9TSUdfRk9SQ0UgaXMgbm90IHNldAojIENPTkZJR19NT0RV
TEVfU0lHX0FMTCBpcyBub3Qgc2V0CkNPTkZJR19NT0RVTEVfU0lHX1NIQTI1Nj15CiMgQ09ORklH
X01PRFVMRV9TSUdfU0hBMzg0IGlzIG5vdCBzZXQKIyBDT05GSUdfTU9EVUxFX1NJR19TSEE1MTIg
aXMgbm90IHNldAojIENPTkZJR19NT0RVTEVfU0lHX1NIQTNfMjU2IGlzIG5vdCBzZXQKIyBDT05G
SUdfTU9EVUxFX1NJR19TSEEzXzM4NCBpcyBub3Qgc2V0CiMgQ09ORklHX01PRFVMRV9TSUdfU0hB
M181MTIgaXMgbm90IHNldApDT05GSUdfTU9EVUxFX1NJR19IQVNIPSJzaGEyNTYiCkNPTkZJR19N
T0RVTEVfQ09NUFJFU1NfTk9ORT15CiMgQ09ORklHX01PRFVMRV9DT01QUkVTU19HWklQIGlzIG5v
dCBzZXQKIyBDT05GSUdfTU9EVUxFX0NPTVBSRVNTX1haIGlzIG5vdCBzZXQKIyBDT05GSUdfTU9E
VUxFX0NPTVBSRVNTX1pTVEQgaXMgbm90IHNldAojIENPTkZJR19NT0RVTEVfQUxMT1dfTUlTU0lO
R19OQU1FU1BBQ0VfSU1QT1JUUyBpcyBub3Qgc2V0CkNPTkZJR19NT0RQUk9CRV9QQVRIPSIvc2Jp
bi9tb2Rwcm9iZSIKIyBDT05GSUdfVFJJTV9VTlVTRURfS1NZTVMgaXMgbm90IHNldApDT05GSUdf
TU9EVUxFU19UUkVFX0xPT0tVUD15CkNPTkZJR19CTE9DSz15CkNPTkZJR19CTE9DS19MRUdBQ1lf
QVVUT0xPQUQ9eQpDT05GSUdfQkxLX1JRX0FMTE9DX1RJTUU9eQpDT05GSUdfQkxLX0RFVl9CU0df
Q09NTU9OPXkKIyBDT05GSUdfQkxLX0RFVl9CU0dMSUIgaXMgbm90IHNldAojIENPTkZJR19CTEtf
REVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiMgQ09ORklHX0JMS19ERVZfV1JJVEVfTU9VTlRFRCBp
cyBub3Qgc2V0CiMgQ09ORklHX0JMS19ERVZfWk9ORUQgaXMgbm90IHNldAojIENPTkZJR19CTEtf
REVWX1RIUk9UVExJTkcgaXMgbm90IHNldAojIENPTkZJR19CTEtfV0JUIGlzIG5vdCBzZXQKQ09O
RklHX0JMS19DR1JPVVBfSU9MQVRFTkNZPXkKQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUPXkKQ09O
RklHX0JMS19DR1JPVVBfSU9QUklPPXkKQ09ORklHX0JMS19ERUJVR19GUz15CiMgQ09ORklHX0JM
S19TRURfT1BBTCBpcyBub3Qgc2V0CiMgQ09ORklHX0JMS19JTkxJTkVfRU5DUllQVElPTiBpcyBu
b3Qgc2V0CgojCiMgUGFydGl0aW9uIFR5cGVzCiMKIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VE
IGlzIG5vdCBzZXQKQ09ORklHX01TRE9TX1BBUlRJVElPTj15CkNPTkZJR19FRklfUEFSVElUSU9O
PXkKIyBlbmQgb2YgUGFydGl0aW9uIFR5cGVzCgpDT05GSUdfQkxLX01RX1BDST15CkNPTkZJR19C
TEtfTVFfVklSVElPPXkKQ09ORklHX0JMS19QTT15CkNPTkZJR19CTE9DS19IT0xERVJfREVQUkVD
QVRFRD15CkNPTkZJR19CTEtfTVFfU1RBQ0tJTkc9eQoKIwojIElPIFNjaGVkdWxlcnMKIwpDT05G
SUdfTVFfSU9TQ0hFRF9ERUFETElORT15CkNPTkZJR19NUV9JT1NDSEVEX0tZQkVSPXkKIyBDT05G
SUdfSU9TQ0hFRF9CRlEgaXMgbm90IHNldAojIGVuZCBvZiBJTyBTY2hlZHVsZXJzCgpDT05GSUdf
QVNOMT15CkNPTkZJR19VTklOTElORV9TUElOX1VOTE9DSz15CkNPTkZJR19BUkNIX1NVUFBPUlRT
X0FUT01JQ19STVc9eQpDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUj15CkNPTkZJR19SV1NFTV9T
UElOX09OX09XTkVSPXkKQ09ORklHX0xPQ0tfU1BJTl9PTl9PV05FUj15CkNPTkZJR19BUkNIX1VT
RV9RVUVVRURfU1BJTkxPQ0tTPXkKQ09ORklHX1FVRVVFRF9TUElOTE9DS1M9eQpDT05GSUdfQVJD
SF9VU0VfUVVFVUVEX1JXTE9DS1M9eQpDT05GSUdfUVVFVUVEX1JXTE9DS1M9eQpDT05GSUdfQVJD
SF9IQVNfTk9OX09WRVJMQVBQSU5HX0FERFJFU1NfU1BBQ0U9eQpDT05GSUdfQVJDSF9IQVNfU1lO
Q19DT1JFX0JFRk9SRV9VU0VSTU9ERT15CkNPTkZJR19BUkNIX0hBU19TWVNDQUxMX1dSQVBQRVI9
eQpDT05GSUdfRlJFRVpFUj15CgojCiMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKIwpDT05GSUdf
QklORk1UX0VMRj15CkNPTkZJR19DT01QQVRfQklORk1UX0VMRj15CkNPTkZJR19FTEZDT1JFPXkK
Q09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTPXkKQ09ORklHX0JJTkZNVF9TQ1JJ
UFQ9eQpDT05GSUdfQklORk1UX01JU0M9eQpDT05GSUdfQ09SRURVTVA9eQojIGVuZCBvZiBFeGVj
dXRhYmxlIGZpbGUgZm9ybWF0cwoKIwojIE1lbW9yeSBNYW5hZ2VtZW50IG9wdGlvbnMKIwpDT05G
SUdfU1dBUD15CiMgQ09ORklHX1pTV0FQIGlzIG5vdCBzZXQKCiMKIyBTbGFiIGFsbG9jYXRvciBv
cHRpb25zCiMKQ09ORklHX1NMVUI9eQojIENPTkZJR19TTFVCX1RJTlkgaXMgbm90IHNldApDT05G
SUdfU0xBQl9NRVJHRV9ERUZBVUxUPXkKIyBDT05GSUdfU0xBQl9GUkVFTElTVF9SQU5ET00gaXMg
bm90IHNldAojIENPTkZJR19TTEFCX0ZSRUVMSVNUX0hBUkRFTkVEIGlzIG5vdCBzZXQKIyBDT05G
SUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CkNPTkZJR19TTFVCX0NQVV9QQVJUSUFMPXkKIyBDT05G
SUdfUkFORE9NX0tNQUxMT0NfQ0FDSEVTIGlzIG5vdCBzZXQKIyBlbmQgb2YgU2xhYiBhbGxvY2F0
b3Igb3B0aW9ucwoKIyBDT05GSUdfU0hVRkZMRV9QQUdFX0FMTE9DQVRPUiBpcyBub3Qgc2V0CiMg
Q09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldApDT05GSUdfU1BBUlNFTUVNPXkKQ09ORklHX1NQ
QVJTRU1FTV9FWFRSRU1FPXkKQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRT15CkNPTkZJ
R19TUEFSU0VNRU1fVk1FTU1BUD15CkNPTkZJR19BUkNIX1dBTlRfT1BUSU1JWkVfREFYX1ZNRU1N
QVA9eQpDT05GSUdfQVJDSF9XQU5UX09QVElNSVpFX0hVR0VUTEJfVk1FTU1BUD15CkNPTkZJR19I
QVZFX0ZBU1RfR1VQPXkKQ09ORklHX0VYQ0xVU0lWRV9TWVNURU1fUkFNPXkKQ09ORklHX0FSQ0hf
RU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIyBDT05GSUdfTUVNT1JZX0hPVFBMVUcgaXMgbm90IHNl
dApDT05GSUdfQVJDSF9NSFBfTUVNTUFQX09OX01FTU9SWV9FTkFCTEU9eQpDT05GSUdfU1BMSVRf
UFRMT0NLX0NQVVM9NApDT05GSUdfQVJDSF9FTkFCTEVfU1BMSVRfUE1EX1BUTE9DSz15CkNPTkZJ
R19DT01QQUNUSU9OPXkKQ09ORklHX0NPTVBBQ1RfVU5FVklDVEFCTEVfREVGQVVMVD0xCiMgQ09O
RklHX1BBR0VfUkVQT1JUSU5HIGlzIG5vdCBzZXQKQ09ORklHX01JR1JBVElPTj15CkNPTkZJR19B
UkNIX0VOQUJMRV9IVUdFUEFHRV9NSUdSQVRJT049eQpDT05GSUdfUENQX0JBVENIX1NDQUxFX01B
WD01CkNPTkZJR19QSFlTX0FERFJfVF82NEJJVD15CkNPTkZJR19NTVVfTk9USUZJRVI9eQojIENP
TkZJR19LU00gaXMgbm90IHNldApDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKQ09O
RklHX0FSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkU9eQojIENPTkZJR19NRU1PUllfRkFJTFVS
RSBpcyBub3Qgc2V0CkNPTkZJR19BUkNIX1dBTlRfR0VORVJBTF9IVUdFVExCPXkKQ09ORklHX0FS
Q0hfV0FOVFNfVEhQX1NXQVA9eQojIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSBpcyBub3Qg
c2V0CkNPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTks9eQpDT05GSUdfTkVFRF9Q
RVJfQ1BVX1BBR0VfRklSU1RfQ0hVTks9eQpDT05GSUdfVVNFX1BFUkNQVV9OVU1BX05PREVfSUQ9
eQpDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUE9eQojIENPTkZJR19DTUEgaXMgbm90IHNl
dApDT05GSUdfR0VORVJJQ19FQVJMWV9JT1JFTUFQPXkKIyBDT05GSUdfREVGRVJSRURfU1RSVUNU
X1BBR0VfSU5JVCBpcyBub3Qgc2V0CiMgQ09ORklHX0lETEVfUEFHRV9UUkFDS0lORyBpcyBub3Qg
c2V0CkNPTkZJR19BUkNIX0hBU19DQUNIRV9MSU5FX1NJWkU9eQpDT05GSUdfQVJDSF9IQVNfQ1VS
UkVOVF9TVEFDS19QT0lOVEVSPXkKQ09ORklHX0FSQ0hfSEFTX1BURV9ERVZNQVA9eQpDT05GSUdf
QVJDSF9IQVNfWk9ORV9ETUFfU0VUPXkKQ09ORklHX1pPTkVfRE1BPXkKQ09ORklHX1pPTkVfRE1B
MzI9eQpDT05GSUdfVk1BUF9QRk49eQpDT05GSUdfQVJDSF9VU0VTX0hJR0hfVk1BX0ZMQUdTPXkK
Q09ORklHX0FSQ0hfSEFTX1BLRVlTPXkKQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIyBDT05G
SUdfUEVSQ1BVX1NUQVRTIGlzIG5vdCBzZXQKIyBDT05GSUdfR1VQX1RFU1QgaXMgbm90IHNldAoj
IENPTkZJR19ETUFQT09MX1RFU1QgaXMgbm90IHNldApDT05GSUdfQVJDSF9IQVNfUFRFX1NQRUNJ
QUw9eQpDT05GSUdfS01BUF9MT0NBTD15CkNPTkZJR19NRU1GRF9DUkVBVEU9eQpDT05GSUdfU0VD
UkVUTUVNPXkKIyBDT05GSUdfQU5PTl9WTUFfTkFNRSBpcyBub3Qgc2V0CiMgQ09ORklHX1VTRVJG
QVVMVEZEIGlzIG5vdCBzZXQKIyBDT05GSUdfTFJVX0dFTiBpcyBub3Qgc2V0CkNPTkZJR19BUkNI
X1NVUFBPUlRTX1BFUl9WTUFfTE9DSz15CkNPTkZJR19QRVJfVk1BX0xPQ0s9eQpDT05GSUdfTE9D
S19NTV9BTkRfRklORF9WTUE9eQoKIwojIERhdGEgQWNjZXNzIE1vbml0b3JpbmcKIwojIENPTkZJ
R19EQU1PTiBpcyBub3Qgc2V0CiMgZW5kIG9mIERhdGEgQWNjZXNzIE1vbml0b3JpbmcKIyBlbmQg
b2YgTWVtb3J5IE1hbmFnZW1lbnQgb3B0aW9ucwoKQ09ORklHX05FVD15CkNPTkZJR19DT01QQVRf
TkVUTElOS19NRVNTQUdFUz15CkNPTkZJR19ORVRfSU5HUkVTUz15CkNPTkZJR19ORVRfRUdSRVNT
PXkKQ09ORklHX05FVF9YR1JFU1M9eQpDT05GSUdfU0tCX0VYVEVOU0lPTlM9eQoKIwojIE5ldHdv
cmtpbmcgb3B0aW9ucwojCkNPTkZJR19QQUNLRVQ9eQojIENPTkZJR19QQUNLRVRfRElBRyBpcyBu
b3Qgc2V0CkNPTkZJR19VTklYPXkKQ09ORklHX1VOSVhfU0NNPXkKQ09ORklHX0FGX1VOSVhfT09C
PXkKIyBDT05GSUdfVU5JWF9ESUFHIGlzIG5vdCBzZXQKIyBDT05GSUdfVExTIGlzIG5vdCBzZXQK
Q09ORklHX1hGUk09eQpDT05GSUdfWEZSTV9BTEdPPXkKQ09ORklHX1hGUk1fVVNFUj15CiMgQ09O
RklHX1hGUk1fVVNFUl9DT01QQVQgaXMgbm90IHNldAojIENPTkZJR19YRlJNX0lOVEVSRkFDRSBp
cyBub3Qgc2V0CiMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CiMgQ09ORklHX1hG
Uk1fTUlHUkFURSBpcyBub3Qgc2V0CiMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0
CkNPTkZJR19YRlJNX0FIPXkKQ09ORklHX1hGUk1fRVNQPXkKIyBDT05GSUdfTkVUX0tFWSBpcyBu
b3Qgc2V0CiMgQ09ORklHX1hEUF9TT0NLRVRTIGlzIG5vdCBzZXQKQ09ORklHX05FVF9IQU5EU0hB
S0U9eQpDT05GSUdfSU5FVD15CkNPTkZJR19JUF9NVUxUSUNBU1Q9eQpDT05GSUdfSVBfQURWQU5D
RURfUk9VVEVSPXkKIyBDT05GSUdfSVBfRklCX1RSSUVfU1RBVFMgaXMgbm90IHNldApDT05GSUdf
SVBfTVVMVElQTEVfVEFCTEVTPXkKQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSD15CkNPTkZJR19J
UF9ST1VURV9WRVJCT1NFPXkKQ09ORklHX0lQX1BOUD15CkNPTkZJR19JUF9QTlBfREhDUD15CkNP
TkZJR19JUF9QTlBfQk9PVFA9eQpDT05GSUdfSVBfUE5QX1JBUlA9eQojIENPTkZJR19ORVRfSVBJ
UCBpcyBub3Qgc2V0CiMgQ09ORklHX05FVF9JUEdSRV9ERU1VWCBpcyBub3Qgc2V0CkNPTkZJR19O
RVRfSVBfVFVOTkVMPXkKQ09ORklHX0lQX01ST1VURV9DT01NT049eQpDT05GSUdfSVBfTVJPVVRF
PXkKIyBDT05GSUdfSVBfTVJPVVRFX01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0CkNPTkZJR19J
UF9QSU1TTV9WMT15CkNPTkZJR19JUF9QSU1TTV9WMj15CkNPTkZJR19TWU5fQ09PS0lFUz15CiMg
Q09ORklHX05FVF9JUFZUSSBpcyBub3Qgc2V0CiMgQ09ORklHX05FVF9GT1UgaXMgbm90IHNldAoj
IENPTkZJR19ORVRfRk9VX0lQX1RVTk5FTFMgaXMgbm90IHNldAojIENPTkZJR19JTkVUX0FIIGlz
IG5vdCBzZXQKIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAojIENPTkZJR19JTkVUX0lQQ09N
UCBpcyBub3Qgc2V0CkNPTkZJR19JTkVUX1RBQkxFX1BFUlRVUkJfT1JERVI9MTYKQ09ORklHX0lO
RVRfVFVOTkVMPXkKIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXQKQ09ORklHX1RDUF9DT05H
X0FEVkFOQ0VEPXkKIyBDT05GSUdfVENQX0NPTkdfQklDIGlzIG5vdCBzZXQKQ09ORklHX1RDUF9D
T05HX0NVQklDPXkKIyBDT05GSUdfVENQX0NPTkdfV0VTVFdPT0QgaXMgbm90IHNldAojIENPTkZJ
R19UQ1BfQ09OR19IVENQIGlzIG5vdCBzZXQKIyBDT05GSUdfVENQX0NPTkdfSFNUQ1AgaXMgbm90
IHNldAojIENPTkZJR19UQ1BfQ09OR19IWUJMQSBpcyBub3Qgc2V0CiMgQ09ORklHX1RDUF9DT05H
X1ZFR0FTIGlzIG5vdCBzZXQKIyBDT05GSUdfVENQX0NPTkdfTlYgaXMgbm90IHNldAojIENPTkZJ
R19UQ1BfQ09OR19TQ0FMQUJMRSBpcyBub3Qgc2V0CiMgQ09ORklHX1RDUF9DT05HX0xQIGlzIG5v
dCBzZXQKIyBDT05GSUdfVENQX0NPTkdfVkVOTyBpcyBub3Qgc2V0CiMgQ09ORklHX1RDUF9DT05H
X1lFQUggaXMgbm90IHNldAojIENPTkZJR19UQ1BfQ09OR19JTExJTk9JUyBpcyBub3Qgc2V0CiMg
Q09ORklHX1RDUF9DT05HX0RDVENQIGlzIG5vdCBzZXQKIyBDT05GSUdfVENQX0NPTkdfQ0RHIGlz
IG5vdCBzZXQKIyBDT05GSUdfVENQX0NPTkdfQkJSIGlzIG5vdCBzZXQKQ09ORklHX0RFRkFVTFRf
Q1VCSUM9eQojIENPTkZJR19ERUZBVUxUX1JFTk8gaXMgbm90IHNldApDT05GSUdfREVGQVVMVF9U
Q1BfQ09ORz0iY3ViaWMiCkNPTkZJR19UQ1BfU0lHUE9PTD15CiMgQ09ORklHX1RDUF9BTyBpcyBu
b3Qgc2V0CkNPTkZJR19UQ1BfTUQ1U0lHPXkKQ09ORklHX0lQVjY9eQojIENPTkZJR19JUFY2X1JP
VVRFUl9QUkVGIGlzIG5vdCBzZXQKIyBDT05GSUdfSVBWNl9PUFRJTUlTVElDX0RBRCBpcyBub3Qg
c2V0CkNPTkZJR19JTkVUNl9BSD15CkNPTkZJR19JTkVUNl9FU1A9eQojIENPTkZJR19JTkVUNl9F
U1BfT0ZGTE9BRCBpcyBub3Qgc2V0CiMgQ09ORklHX0lORVQ2X0VTUElOVENQIGlzIG5vdCBzZXQK
IyBDT05GSUdfSU5FVDZfSVBDT01QIGlzIG5vdCBzZXQKIyBDT05GSUdfSVBWNl9NSVA2IGlzIG5v
dCBzZXQKIyBDT05GSUdfSVBWNl9JTEEgaXMgbm90IHNldAojIENPTkZJR19JUFY2X1ZUSSBpcyBu
b3Qgc2V0CkNPTkZJR19JUFY2X1NJVD15CiMgQ09ORklHX0lQVjZfU0lUXzZSRCBpcyBub3Qgc2V0
CkNPTkZJR19JUFY2X05ESVNDX05PREVUWVBFPXkKIyBDT05GSUdfSVBWNl9UVU5ORUwgaXMgbm90
IHNldAojIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0CiMgQ09ORklHX0lQ
VjZfTVJPVVRFIGlzIG5vdCBzZXQKIyBDT05GSUdfSVBWNl9TRUc2X0xXVFVOTkVMIGlzIG5vdCBz
ZXQKIyBDT05GSUdfSVBWNl9TRUc2X0hNQUMgaXMgbm90IHNldAojIENPTkZJR19JUFY2X1JQTF9M
V1RVTk5FTCBpcyBub3Qgc2V0CiMgQ09ORklHX0lQVjZfSU9BTTZfTFdUVU5ORUwgaXMgbm90IHNl
dApDT05GSUdfTkVUTEFCRUw9eQojIENPTkZJR19NUFRDUCBpcyBub3Qgc2V0CkNPTkZJR19ORVRX
T1JLX1NFQ01BUks9eQpDT05GSUdfTkVUX1BUUF9DTEFTU0lGWT15CiMgQ09ORklHX05FVFdPUktf
UEhZX1RJTUVTVEFNUElORyBpcyBub3Qgc2V0CkNPTkZJR19ORVRGSUxURVI9eQojIENPTkZJR19O
RVRGSUxURVJfQURWQU5DRUQgaXMgbm90IHNldAoKIwojIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3Vy
YXRpb24KIwpDT05GSUdfTkVURklMVEVSX0lOR1JFU1M9eQpDT05GSUdfTkVURklMVEVSX0VHUkVT
Uz15CkNPTkZJR19ORVRGSUxURVJfU0tJUF9FR1JFU1M9eQpDT05GSUdfTkVURklMVEVSX05FVExJ
Tks9eQpDT05GSUdfTkVURklMVEVSX0JQRl9MSU5LPXkKQ09ORklHX05FVEZJTFRFUl9ORVRMSU5L
X0xPRz15CkNPTkZJR19ORl9DT05OVFJBQ0s9eQpDT05GSUdfTkZfTE9HX1NZU0xPRz15CkNPTkZJ
R19ORl9DT05OVFJBQ0tfU0VDTUFSSz15CiMgQ09ORklHX05GX0NPTk5UUkFDS19QUk9DRlMgaXMg
bm90IHNldAojIENPTkZJR19ORl9DT05OVFJBQ0tfTEFCRUxTIGlzIG5vdCBzZXQKQ09ORklHX05G
X0NPTk5UUkFDS19GVFA9eQpDT05GSUdfTkZfQ09OTlRSQUNLX0lSQz15CiMgQ09ORklHX05GX0NP
Tk5UUkFDS19ORVRCSU9TX05TIGlzIG5vdCBzZXQKQ09ORklHX05GX0NPTk5UUkFDS19TSVA9eQpD
T05GSUdfTkZfQ1RfTkVUTElOSz15CiMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0dMVUVfQ1Qg
aXMgbm90IHNldApDT05GSUdfTkZfTkFUPXkKQ09ORklHX05GX05BVF9GVFA9eQpDT05GSUdfTkZf
TkFUX0lSQz15CkNPTkZJR19ORl9OQVRfU0lQPXkKQ09ORklHX05GX05BVF9NQVNRVUVSQURFPXkK
IyBDT05GSUdfTkZfVEFCTEVTIGlzIG5vdCBzZXQKQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPXkK
IyBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfQ09NUEFUIGlzIG5vdCBzZXQKCiMKIyBYdGFibGVz
IGNvbWJpbmVkIG1vZHVsZXMKIwpDT05GSUdfTkVURklMVEVSX1hUX01BUks9eQoKIwojIFh0YWJs
ZXMgdGFyZ2V0cwojCkNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5TRUNNQVJLPXkKQ09O
RklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTE9HPXkKQ09ORklHX05FVEZJTFRFUl9YVF9OQVQ9eQoj
IENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05FVE1BUCBpcyBub3Qgc2V0CkNPTkZJR19ORVRG
SUxURVJfWFRfVEFSR0VUX05GTE9HPXkKIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9SRURJ
UkVDVCBpcyBub3Qgc2V0CkNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BU1FVRVJBREU9eQpD
T05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9TRUNNQVJLPXkKQ09ORklHX05FVEZJTFRFUl9YVF9U
QVJHRVRfVENQTVNTPXkKCiMKIyBYdGFibGVzIG1hdGNoZXMKIwpDT05GSUdfTkVURklMVEVSX1hU
X01BVENIX0FERFJUWVBFPXkKQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OVFJBQ0s9eQpD
T05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWT15CkNPTkZJR19ORVRGSUxURVJfWFRfTUFU
Q0hfU1RBVEU9eQojIGVuZCBvZiBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCgojIENPTkZJ
R19JUF9TRVQgaXMgbm90IHNldAojIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CgojCiMgSVA6IE5l
dGZpbHRlciBDb25maWd1cmF0aW9uCiMKQ09ORklHX05GX0RFRlJBR19JUFY0PXkKIyBDT05GSUdf
TkZfU09DS0VUX0lQVjQgaXMgbm90IHNldAojIENPTkZJR19ORl9UUFJPWFlfSVBWNCBpcyBub3Qg
c2V0CiMgQ09ORklHX05GX0RVUF9JUFY0IGlzIG5vdCBzZXQKQ09ORklHX05GX0xPR19BUlA9eQpD
T05GSUdfTkZfTE9HX0lQVjQ9eQpDT05GSUdfTkZfUkVKRUNUX0lQVjQ9eQpDT05GSUdfSVBfTkZf
SVBUQUJMRVM9eQpDT05GSUdfSVBfTkZfRklMVEVSPXkKQ09ORklHX0lQX05GX1RBUkdFVF9SRUpF
Q1Q9eQpDT05GSUdfSVBfTkZfTkFUPXkKQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFPXkK
Q09ORklHX0lQX05GX01BTkdMRT15CiMgQ09ORklHX0lQX05GX1JBVyBpcyBub3Qgc2V0CiMgZW5k
IG9mIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgoKIwojIElQdjY6IE5ldGZpbHRlciBDb25m
aWd1cmF0aW9uCiMKIyBDT05GSUdfTkZfU09DS0VUX0lQVjYgaXMgbm90IHNldAojIENPTkZJR19O
Rl9UUFJPWFlfSVBWNiBpcyBub3Qgc2V0CiMgQ09ORklHX05GX0RVUF9JUFY2IGlzIG5vdCBzZXQK
Q09ORklHX05GX1JFSkVDVF9JUFY2PXkKQ09ORklHX05GX0xPR19JUFY2PXkKQ09ORklHX0lQNl9O
Rl9JUFRBQkxFUz15CkNPTkZJR19JUDZfTkZfTUFUQ0hfSVBWNkhFQURFUj15CkNPTkZJR19JUDZf
TkZfRklMVEVSPXkKQ09ORklHX0lQNl9ORl9UQVJHRVRfUkVKRUNUPXkKQ09ORklHX0lQNl9ORl9N
QU5HTEU9eQojIENPTkZJR19JUDZfTkZfUkFXIGlzIG5vdCBzZXQKIyBlbmQgb2YgSVB2NjogTmV0
ZmlsdGVyIENvbmZpZ3VyYXRpb24KCkNPTkZJR19ORl9ERUZSQUdfSVBWNj15CiMgQ09ORklHX05G
X0NPTk5UUkFDS19CUklER0UgaXMgbm90IHNldAojIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQK
IyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CiMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiMgQ09O
RklHX1RJUEMgaXMgbm90IHNldApDT05GSUdfQVRNPXkKIyBDT05GSUdfQVRNX0NMSVAgaXMgbm90
IHNldAojIENPTkZJR19BVE1fTEFORSBpcyBub3Qgc2V0CiMgQ09ORklHX0FUTV9CUjI2ODQgaXMg
bm90IHNldAojIENPTkZJR19MMlRQIGlzIG5vdCBzZXQKIyBDT05GSUdfQlJJREdFIGlzIG5vdCBz
ZXQKIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CiMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90
IHNldAojIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAoj
IENPTkZJR19YMjUgaXMgbm90IHNldAojIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKQ09ORklHX1BI
T05FVD15CiMgQ09ORklHXzZMT1dQQU4gaXMgbm90IHNldApDT05GSUdfSUVFRTgwMjE1ND15CiMg
Q09ORklHX0lFRUU4MDIxNTRfTkw4MDIxNTRfRVhQRVJJTUVOVEFMIGlzIG5vdCBzZXQKIyBDT05G
SUdfSUVFRTgwMjE1NF9TT0NLRVQgaXMgbm90IHNldApDT05GSUdfTUFDODAyMTU0PXkKQ09ORklH
X05FVF9TQ0hFRD15CgojCiMgUXVldWVpbmcvU2NoZWR1bGluZwojCiMgQ09ORklHX05FVF9TQ0hf
SFRCIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX1NDSF9IRlNDIGlzIG5vdCBzZXQKIyBDT05GSUdf
TkVUX1NDSF9QUklPIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX1NDSF9NVUxUSVEgaXMgbm90IHNl
dAojIENPTkZJR19ORVRfU0NIX1JFRCBpcyBub3Qgc2V0CiMgQ09ORklHX05FVF9TQ0hfU0ZCIGlz
IG5vdCBzZXQKIyBDT05GSUdfTkVUX1NDSF9TRlEgaXMgbm90IHNldAojIENPTkZJR19ORVRfU0NI
X1RFUUwgaXMgbm90IHNldAojIENPTkZJR19ORVRfU0NIX1RCRiBpcyBub3Qgc2V0CiMgQ09ORklH
X05FVF9TQ0hfQ0JTIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX1NDSF9FVEYgaXMgbm90IHNldAoj
IENPTkZJR19ORVRfU0NIX1RBUFJJTyBpcyBub3Qgc2V0CiMgQ09ORklHX05FVF9TQ0hfR1JFRCBp
cyBub3Qgc2V0CiMgQ09ORklHX05FVF9TQ0hfTkVURU0gaXMgbm90IHNldAojIENPTkZJR19ORVRf
U0NIX0RSUiBpcyBub3Qgc2V0CiMgQ09ORklHX05FVF9TQ0hfTVFQUklPIGlzIG5vdCBzZXQKIyBD
T05GSUdfTkVUX1NDSF9TS0JQUklPIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX1NDSF9DSE9LRSBp
cyBub3Qgc2V0CiMgQ09ORklHX05FVF9TQ0hfUUZRIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX1ND
SF9DT0RFTCBpcyBub3Qgc2V0CiMgQ09ORklHX05FVF9TQ0hfRlFfQ09ERUwgaXMgbm90IHNldAoj
IENPTkZJR19ORVRfU0NIX0NBS0UgaXMgbm90IHNldAojIENPTkZJR19ORVRfU0NIX0ZRIGlzIG5v
dCBzZXQKIyBDT05GSUdfTkVUX1NDSF9ISEYgaXMgbm90IHNldAojIENPTkZJR19ORVRfU0NIX1BJ
RSBpcyBub3Qgc2V0CiMgQ09ORklHX05FVF9TQ0hfSU5HUkVTUyBpcyBub3Qgc2V0CiMgQ09ORklH
X05FVF9TQ0hfUExVRyBpcyBub3Qgc2V0CiMgQ09ORklHX05FVF9TQ0hfRVRTIGlzIG5vdCBzZXQK
IyBDT05GSUdfTkVUX1NDSF9ERUZBVUxUIGlzIG5vdCBzZXQKCiMKIyBDbGFzc2lmaWNhdGlvbgoj
CkNPTkZJR19ORVRfQ0xTPXkKIyBDT05GSUdfTkVUX0NMU19CQVNJQyBpcyBub3Qgc2V0CiMgQ09O
RklHX05FVF9DTFNfUk9VVEU0IGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX0NMU19GVyBpcyBub3Qg
c2V0CiMgQ09ORklHX05FVF9DTFNfVTMyIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX0NMU19GTE9X
IGlzIG5vdCBzZXQKQ09ORklHX05FVF9DTFNfQ0dST1VQPXkKIyBDT05GSUdfTkVUX0NMU19CUEYg
aXMgbm90IHNldAojIENPTkZJR19ORVRfQ0xTX0ZMT1dFUiBpcyBub3Qgc2V0CiMgQ09ORklHX05F
VF9DTFNfTUFUQ0hBTEwgaXMgbm90IHNldApDT05GSUdfTkVUX0VNQVRDSD15CkNPTkZJR19ORVRf
RU1BVENIX1NUQUNLPTMyCiMgQ09ORklHX05FVF9FTUFUQ0hfQ01QIGlzIG5vdCBzZXQKIyBDT05G
SUdfTkVUX0VNQVRDSF9OQllURSBpcyBub3Qgc2V0CiMgQ09ORklHX05FVF9FTUFUQ0hfVTMyIGlz
IG5vdCBzZXQKIyBDT05GSUdfTkVUX0VNQVRDSF9NRVRBIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVU
X0VNQVRDSF9URVhUIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX0VNQVRDSF9DQU5JRCBpcyBub3Qg
c2V0CiMgQ09ORklHX05FVF9FTUFUQ0hfSVBUIGlzIG5vdCBzZXQKQ09ORklHX05FVF9DTFNfQUNU
PXkKIyBDT05GSUdfTkVUX0FDVF9QT0xJQ0UgaXMgbm90IHNldAojIENPTkZJR19ORVRfQUNUX0dB
Q1QgaXMgbm90IHNldAojIENPTkZJR19ORVRfQUNUX01JUlJFRCBpcyBub3Qgc2V0CiMgQ09ORklH
X05FVF9BQ1RfU0FNUExFIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX0FDVF9JUFQgaXMgbm90IHNl
dAojIENPTkZJR19ORVRfQUNUX05BVCBpcyBub3Qgc2V0CiMgQ09ORklHX05FVF9BQ1RfUEVESVQg
aXMgbm90IHNldAojIENPTkZJR19ORVRfQUNUX1NJTVAgaXMgbm90IHNldAojIENPTkZJR19ORVRf
QUNUX1NLQkVESVQgaXMgbm90IHNldAojIENPTkZJR19ORVRfQUNUX0NTVU0gaXMgbm90IHNldAoj
IENPTkZJR19ORVRfQUNUX01QTFMgaXMgbm90IHNldAojIENPTkZJR19ORVRfQUNUX1ZMQU4gaXMg
bm90IHNldAojIENPTkZJR19ORVRfQUNUX0JQRiBpcyBub3Qgc2V0CiMgQ09ORklHX05FVF9BQ1Rf
U0tCTU9EIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX0FDVF9JRkUgaXMgbm90IHNldAojIENPTkZJ
R19ORVRfQUNUX1RVTk5FTF9LRVkgaXMgbm90IHNldAojIENPTkZJR19ORVRfQUNUX0dBVEUgaXMg
bm90IHNldAojIENPTkZJR19ORVRfVENfU0tCX0VYVCBpcyBub3Qgc2V0CkNPTkZJR19ORVRfU0NI
X0ZJRk89eQojIENPTkZJR19EQ0IgaXMgbm90IHNldApDT05GSUdfRE5TX1JFU09MVkVSPXkKIyBD
T05GSUdfQkFUTUFOX0FEViBpcyBub3Qgc2V0CiMgQ09ORklHX09QRU5WU1dJVENIIGlzIG5vdCBz
ZXQKIyBDT05GSUdfVlNPQ0tFVFMgaXMgbm90IHNldAojIENPTkZJR19ORVRMSU5LX0RJQUcgaXMg
bm90IHNldAojIENPTkZJR19NUExTIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX05TSCBpcyBub3Qg
c2V0CiMgQ09ORklHX0hTUiBpcyBub3Qgc2V0CiMgQ09ORklHX05FVF9TV0lUQ0hERVYgaXMgbm90
IHNldAojIENPTkZJR19ORVRfTDNfTUFTVEVSX0RFViBpcyBub3Qgc2V0CiMgQ09ORklHX1FSVFIg
aXMgbm90IHNldAojIENPTkZJR19ORVRfTkNTSSBpcyBub3Qgc2V0CiMgQ09ORklHX1BDUFVfREVW
X1JFRkNOVCBpcyBub3Qgc2V0CkNPTkZJR19NQVhfU0tCX0ZSQUdTPTE3CkNPTkZJR19SUFM9eQpD
T05GSUdfUkZTX0FDQ0VMPXkKQ09ORklHX1NPQ0tfUlhfUVVFVUVfTUFQUElORz15CkNPTkZJR19Y
UFM9eQpDT05GSUdfQ0dST1VQX05FVF9QUklPPXkKQ09ORklHX0NHUk9VUF9ORVRfQ0xBU1NJRD15
CkNPTkZJR19ORVRfUlhfQlVTWV9QT0xMPXkKQ09ORklHX0JRTD15CkNPTkZJR19ORVRfRkxPV19M
SU1JVD15CgojCiMgTmV0d29yayB0ZXN0aW5nCiMKIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qg
c2V0CiMgQ09ORklHX05FVF9EUk9QX01PTklUT1IgaXMgbm90IHNldAojIGVuZCBvZiBOZXR3b3Jr
IHRlc3RpbmcKIyBlbmQgb2YgTmV0d29ya2luZyBvcHRpb25zCgojIENPTkZJR19IQU1SQURJTyBp
cyBub3Qgc2V0CkNPTkZJR19DQU49eQojIENPTkZJR19DQU5fUkFXIGlzIG5vdCBzZXQKIyBDT05G
SUdfQ0FOX0JDTSBpcyBub3Qgc2V0CiMgQ09ORklHX0NBTl9HVyBpcyBub3Qgc2V0CiMgQ09ORklH
X0NBTl9KMTkzOSBpcyBub3Qgc2V0CiMgQ09ORklHX0NBTl9JU09UUCBpcyBub3Qgc2V0CkNPTkZJ
R19CVD15CkNPTkZJR19CVF9CUkVEUj15CiMgQ09ORklHX0JUX1JGQ09NTSBpcyBub3Qgc2V0CiMg
Q09ORklHX0JUX0JORVAgaXMgbm90IHNldAojIENPTkZJR19CVF9DTVRQIGlzIG5vdCBzZXQKQ09O
RklHX0JUX0hJRFA9eQojIENPTkZJR19CVF9IUyBpcyBub3Qgc2V0CiMgQ09ORklHX0JUX0xFIGlz
IG5vdCBzZXQKIyBDT05GSUdfQlRfTEVEUyBpcyBub3Qgc2V0CiMgQ09ORklHX0JUX01TRlRFWFQg
aXMgbm90IHNldAojIENPTkZJR19CVF9BT1NQRVhUIGlzIG5vdCBzZXQKIyBDT05GSUdfQlRfREVC
VUdGUyBpcyBub3Qgc2V0CiMgQ09ORklHX0JUX1NFTEZURVNUIGlzIG5vdCBzZXQKCiMKIyBCbHVl
dG9vdGggZGV2aWNlIGRyaXZlcnMKIwpDT05GSUdfQlRfSU5URUw9eQpDT05GSUdfQlRfQkNNPXkK
Q09ORklHX0JUX1JUTD15CkNPTkZJR19CVF9IQ0lCVFVTQj15CiMgQ09ORklHX0JUX0hDSUJUVVNC
X0FVVE9TVVNQRU5EIGlzIG5vdCBzZXQKIyBDT05GSUdfQlRfSENJQlRVU0JfUE9MTF9TWU5DIGlz
IG5vdCBzZXQKQ09ORklHX0JUX0hDSUJUVVNCX0JDTT15CiMgQ09ORklHX0JUX0hDSUJUVVNCX01U
SyBpcyBub3Qgc2V0CkNPTkZJR19CVF9IQ0lCVFVTQl9SVEw9eQojIENPTkZJR19CVF9IQ0lCVFNE
SU8gaXMgbm90IHNldAojIENPTkZJR19CVF9IQ0lVQVJUIGlzIG5vdCBzZXQKQ09ORklHX0JUX0hD
SUJDTTIwM1g9eQojIENPTkZJR19CVF9IQ0lCQ000Mzc3IGlzIG5vdCBzZXQKQ09ORklHX0JUX0hD
SUJQQTEwWD15CkNPTkZJR19CVF9IQ0lCRlVTQj15CiMgQ09ORklHX0JUX0hDSURUTDEgaXMgbm90
IHNldAojIENPTkZJR19CVF9IQ0lCVDNDIGlzIG5vdCBzZXQKIyBDT05GSUdfQlRfSENJQkxVRUNB
UkQgaXMgbm90IHNldAojIENPTkZJR19CVF9IQ0lWSENJIGlzIG5vdCBzZXQKQ09ORklHX0JUX01S
Vkw9eQpDT05GSUdfQlRfTVJWTF9TRElPPXkKQ09ORklHX0JUX0FUSDNLPXkKIyBDT05GSUdfQlRf
TVRLU0RJTyBpcyBub3Qgc2V0CiMgQ09ORklHX0JUX1ZJUlRJTyBpcyBub3Qgc2V0CiMgZW5kIG9m
IEJsdWV0b290aCBkZXZpY2UgZHJpdmVycwoKIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAoj
IENPTkZJR19BRl9LQ00gaXMgbm90IHNldAojIENPTkZJR19NQ1RQIGlzIG5vdCBzZXQKQ09ORklH
X0ZJQl9SVUxFUz15CkNPTkZJR19XSVJFTEVTUz15CkNPTkZJR19XSVJFTEVTU19FWFQ9eQpDT05G
SUdfV0VYVF9DT1JFPXkKQ09ORklHX1dFWFRfUFJPQz15CkNPTkZJR19XRVhUX1BSSVY9eQpDT05G
SUdfQ0ZHODAyMTE9eQojIENPTkZJR19OTDgwMjExX1RFU1RNT0RFIGlzIG5vdCBzZXQKIyBDT05G
SUdfQ0ZHODAyMTFfREVWRUxPUEVSX1dBUk5JTkdTIGlzIG5vdCBzZXQKIyBDT05GSUdfQ0ZHODAy
MTFfQ0VSVElGSUNBVElPTl9PTlVTIGlzIG5vdCBzZXQKQ09ORklHX0NGRzgwMjExX1JFUVVJUkVf
U0lHTkVEX1JFR0RCPXkKQ09ORklHX0NGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZUz15CkNP
TkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTPXkKQ09ORklHX0NGRzgwMjExX0RFQlVHRlM9eQpDT05G
SUdfQ0ZHODAyMTFfQ1JEQV9TVVBQT1JUPXkKIyBDT05GSUdfQ0ZHODAyMTFfV0VYVCBpcyBub3Qg
c2V0CkNPTkZJR19MSUI4MDIxMT15CiMgQ09ORklHX0xJQjgwMjExX0RFQlVHIGlzIG5vdCBzZXQK
Q09ORklHX01BQzgwMjExPXkKQ09ORklHX01BQzgwMjExX0hBU19SQz15CkNPTkZJR19NQUM4MDIx
MV9SQ19NSU5TVFJFTD15CkNPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUX01JTlNUUkVMPXkKQ09O
RklHX01BQzgwMjExX1JDX0RFRkFVTFQ9Im1pbnN0cmVsX2h0IgojIENPTkZJR19NQUM4MDIxMV9N
RVNIIGlzIG5vdCBzZXQKQ09ORklHX01BQzgwMjExX0xFRFM9eQpDT05GSUdfTUFDODAyMTFfREVC
VUdGUz15CiMgQ09ORklHX01BQzgwMjExX01FU1NBR0VfVFJBQ0lORyBpcyBub3Qgc2V0CiMgQ09O
RklHX01BQzgwMjExX0RFQlVHX01FTlUgaXMgbm90IHNldApDT05GSUdfTUFDODAyMTFfU1RBX0hB
U0hfTUFYX1NJWkU9MApDT05GSUdfUkZLSUxMPXkKQ09ORklHX1JGS0lMTF9MRURTPXkKQ09ORklH
X1JGS0lMTF9JTlBVVD15CiMgQ09ORklHX1JGS0lMTF9HUElPIGlzIG5vdCBzZXQKQ09ORklHX05F
VF85UD15CkNPTkZJR19ORVRfOVBfRkQ9eQpDT05GSUdfTkVUXzlQX1ZJUlRJTz15CiMgQ09ORklH
X05FVF85UF9ERUJVRyBpcyBub3Qgc2V0CiMgQ09ORklHX0NBSUYgaXMgbm90IHNldAojIENPTkZJ
R19DRVBIX0xJQiBpcyBub3Qgc2V0CkNPTkZJR19ORkM9eQpDT05GSUdfTkZDX0RJR0lUQUw9eQpD
T05GSUdfTkZDX05DST15CiMgQ09ORklHX05GQ19OQ0lfU1BJIGlzIG5vdCBzZXQKIyBDT05GSUdf
TkZDX05DSV9VQVJUIGlzIG5vdCBzZXQKIyBDT05GSUdfTkZDX0hDSSBpcyBub3Qgc2V0CgojCiMg
TmVhciBGaWVsZCBDb21tdW5pY2F0aW9uIChORkMpIGRldmljZXMKIwojIENPTkZJR19ORkNfVFJG
Nzk3MEEgaXMgbm90IHNldAojIENPTkZJR19ORkNfU0lNIGlzIG5vdCBzZXQKQ09ORklHX05GQ19Q
T1JUMTAwPXkKIyBDT05GSUdfTkZDX1ZJUlRVQUxfTkNJIGlzIG5vdCBzZXQKIyBDT05GSUdfTkZD
X0ZEUCBpcyBub3Qgc2V0CkNPTkZJR19ORkNfUE41MzM9eQpDT05GSUdfTkZDX1BONTMzX1VTQj15
CiMgQ09ORklHX05GQ19QTjUzM19JMkMgaXMgbm90IHNldApDT05GSUdfTkZDX01SVkw9eQpDT05G
SUdfTkZDX01SVkxfVVNCPXkKIyBDT05GSUdfTkZDX01SVkxfSTJDIGlzIG5vdCBzZXQKIyBDT05G
SUdfTkZDX1NUX05DSV9JMkMgaXMgbm90IHNldAojIENPTkZJR19ORkNfU1RfTkNJX1NQSSBpcyBu
b3Qgc2V0CiMgQ09ORklHX05GQ19OWFBfTkNJIGlzIG5vdCBzZXQKIyBDT05GSUdfTkZDX1MzRldS
TjVfSTJDIGlzIG5vdCBzZXQKIyBDT05GSUdfTkZDX1NUOTVIRiBpcyBub3Qgc2V0CiMgZW5kIG9m
IE5lYXIgRmllbGQgQ29tbXVuaWNhdGlvbiAoTkZDKSBkZXZpY2VzCgojIENPTkZJR19QU0FNUExF
IGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX0lGRSBpcyBub3Qgc2V0CiMgQ09ORklHX0xXVFVOTkVM
IGlzIG5vdCBzZXQKQ09ORklHX0RTVF9DQUNIRT15CkNPTkZJR19HUk9fQ0VMTFM9eQpDT05GSUdf
TkVUX1NFTEZURVNUUz15CkNPTkZJR19ORVRfU09DS19NU0c9eQpDT05GSUdfUEFHRV9QT09MPXkK
IyBDT05GSUdfUEFHRV9QT09MX1NUQVRTIGlzIG5vdCBzZXQKQ09ORklHX0ZBSUxPVkVSPXkKQ09O
RklHX0VUSFRPT0xfTkVUTElOSz15CgojCiMgRGV2aWNlIERyaXZlcnMKIwpDT05GSUdfSEFWRV9F
SVNBPXkKIyBDT05GSUdfRUlTQSBpcyBub3Qgc2V0CkNPTkZJR19IQVZFX1BDST15CkNPTkZJR19Q
Q0k9eQpDT05GSUdfUENJX0RPTUFJTlM9eQpDT05GSUdfUENJRVBPUlRCVVM9eQojIENPTkZJR19I
T1RQTFVHX1BDSV9QQ0lFIGlzIG5vdCBzZXQKIyBDT05GSUdfUENJRUFFUiBpcyBub3Qgc2V0CkNP
TkZJR19QQ0lFQVNQTT15CkNPTkZJR19QQ0lFQVNQTV9ERUZBVUxUPXkKIyBDT05GSUdfUENJRUFT
UE1fUE9XRVJTQVZFIGlzIG5vdCBzZXQKIyBDT05GSUdfUENJRUFTUE1fUE9XRVJfU1VQRVJTQVZF
IGlzIG5vdCBzZXQKIyBDT05GSUdfUENJRUFTUE1fUEVSRk9STUFOQ0UgaXMgbm90IHNldApDT05G
SUdfUENJRV9QTUU9eQojIENPTkZJR19QQ0lFX1BUTSBpcyBub3Qgc2V0CkNPTkZJR19QQ0lfTVNJ
PXkKQ09ORklHX1BDSV9RVUlSS1M9eQojIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAojIENP
TkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CkNPTkZJR19QQ0lfQVRTPXkKQ09ORklHX1BDSV9FQ0FN
PXkKQ09ORklHX1BDSV9MT0NLTEVTU19DT05GSUc9eQojIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBz
ZXQKQ09ORklHX1BDSV9QUkk9eQpDT05GSUdfUENJX1BBU0lEPXkKQ09ORklHX1BDSV9MQUJFTD15
CiMgQ09ORklHX1BDSV9EWU5BTUlDX09GX05PREVTIGlzIG5vdCBzZXQKIyBDT05GSUdfUENJRV9C
VVNfVFVORV9PRkYgaXMgbm90IHNldApDT05GSUdfUENJRV9CVVNfREVGQVVMVD15CiMgQ09ORklH
X1BDSUVfQlVTX1NBRkUgaXMgbm90IHNldAojIENPTkZJR19QQ0lFX0JVU19QRVJGT1JNQU5DRSBp
cyBub3Qgc2V0CiMgQ09ORklHX1BDSUVfQlVTX1BFRVIyUEVFUiBpcyBub3Qgc2V0CkNPTkZJR19W
R0FfQVJCPXkKQ09ORklHX1ZHQV9BUkJfTUFYX0dQVVM9MTYKQ09ORklHX0hPVFBMVUdfUENJPXkK
IyBDT05GSUdfSE9UUExVR19QQ0lfQUNQSSBpcyBub3Qgc2V0CiMgQ09ORklHX0hPVFBMVUdfUENJ
X0NQQ0kgaXMgbm90IHNldAojIENPTkZJR19IT1RQTFVHX1BDSV9TSFBDIGlzIG5vdCBzZXQKCiMK
IyBQQ0kgY29udHJvbGxlciBkcml2ZXJzCiMKIyBDT05GSUdfUENJX0ZUUENJMTAwIGlzIG5vdCBz
ZXQKQ09ORklHX1BDSV9IT1NUX0NPTU1PTj15CkNPTkZJR19QQ0lfSE9TVF9HRU5FUklDPXkKIyBD
T05GSUdfVk1EIGlzIG5vdCBzZXQKIyBDT05GSUdfUENJRV9NSUNST0NISVBfSE9TVCBpcyBub3Qg
c2V0CiMgQ09ORklHX1BDSUVfWElMSU5YIGlzIG5vdCBzZXQKCiMKIyBDYWRlbmNlLWJhc2VkIFBD
SWUgY29udHJvbGxlcnMKIwojIENPTkZJR19QQ0lFX0NBREVOQ0VfUExBVF9IT1NUIGlzIG5vdCBz
ZXQKIyBlbmQgb2YgQ2FkZW5jZS1iYXNlZCBQQ0llIGNvbnRyb2xsZXJzCgojCiMgRGVzaWduV2Fy
ZS1iYXNlZCBQQ0llIGNvbnRyb2xsZXJzCiMKIyBDT05GSUdfUENJX01FU09OIGlzIG5vdCBzZXQK
IyBDT05GSUdfUENJRV9JTlRFTF9HVyBpcyBub3Qgc2V0CiMgQ09ORklHX1BDSUVfRFdfUExBVF9I
T1NUIGlzIG5vdCBzZXQKIyBlbmQgb2YgRGVzaWduV2FyZS1iYXNlZCBQQ0llIGNvbnRyb2xsZXJz
CgojCiMgTW9iaXZlaWwtYmFzZWQgUENJZSBjb250cm9sbGVycwojCiMgZW5kIG9mIE1vYml2ZWls
LWJhc2VkIFBDSWUgY29udHJvbGxlcnMKIyBlbmQgb2YgUENJIGNvbnRyb2xsZXIgZHJpdmVycwoK
IwojIFBDSSBFbmRwb2ludAojCiMgQ09ORklHX1BDSV9FTkRQT0lOVCBpcyBub3Qgc2V0CiMgZW5k
IG9mIFBDSSBFbmRwb2ludAoKIwojIFBDSSBzd2l0Y2ggY29udHJvbGxlciBkcml2ZXJzCiMKIyBD
T05GSUdfUENJX1NXX1NXSVRDSFRFQyBpcyBub3Qgc2V0CiMgZW5kIG9mIFBDSSBzd2l0Y2ggY29u
dHJvbGxlciBkcml2ZXJzCgojIENPTkZJR19DWExfQlVTIGlzIG5vdCBzZXQKQ09ORklHX1BDQ0FS
RD15CkNPTkZJR19QQ01DSUE9eQpDT05GSUdfUENNQ0lBX0xPQURfQ0lTPXkKQ09ORklHX0NBUkRC
VVM9eQoKIwojIFBDLWNhcmQgYnJpZGdlcwojCkNPTkZJR19ZRU5UQT15CkNPTkZJR19ZRU5UQV9P
Mj15CkNPTkZJR19ZRU5UQV9SSUNPSD15CkNPTkZJR19ZRU5UQV9UST15CkNPTkZJR19ZRU5UQV9F
TkVfVFVORT15CkNPTkZJR19ZRU5UQV9UT1NISUJBPXkKIyBDT05GSUdfUEQ2NzI5IGlzIG5vdCBz
ZXQKIyBDT05GSUdfSTgyMDkyIGlzIG5vdCBzZXQKQ09ORklHX1BDQ0FSRF9OT05TVEFUSUM9eQoj
IENPTkZJR19SQVBJRElPIGlzIG5vdCBzZXQKCiMKIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiMK
Q09ORklHX0FVWElMSUFSWV9CVVM9eQpDT05GSUdfVUVWRU5UX0hFTFBFUj15CkNPTkZJR19VRVZF
TlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCkNPTkZJR19ERVZUTVBGUz15CkNPTkZJR19E
RVZUTVBGU19NT1VOVD15CiMgQ09ORklHX0RFVlRNUEZTX1NBRkUgaXMgbm90IHNldApDT05GSUdf
U1RBTkRBTE9ORT15CkNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKCiMKIyBGaXJtd2Fy
ZSBsb2FkZXIKIwpDT05GSUdfRldfTE9BREVSPXkKIyBDT05GSUdfRldfTE9BREVSX0RFQlVHIGlz
IG5vdCBzZXQKQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCiMgQ09ORklHX0ZXX0xPQURFUl9VU0VS
X0hFTFBFUiBpcyBub3Qgc2V0CiMgQ09ORklHX0ZXX0xPQURFUl9DT01QUkVTUyBpcyBub3Qgc2V0
CkNPTkZJR19GV19DQUNIRT15CiMgQ09ORklHX0ZXX1VQTE9BRCBpcyBub3Qgc2V0CiMgZW5kIG9m
IEZpcm13YXJlIGxvYWRlcgoKQ09ORklHX1dBTlRfREVWX0NPUkVEVU1QPXkKQ09ORklHX0FMTE9X
X0RFVl9DT1JFRFVNUD15CkNPTkZJR19ERVZfQ09SRURVTVA9eQojIENPTkZJR19ERUJVR19EUklW
RVIgaXMgbm90IHNldApDT05GSUdfREVCVUdfREVWUkVTPXkKIyBDT05GSUdfREVCVUdfVEVTVF9E
UklWRVJfUkVNT1ZFIGlzIG5vdCBzZXQKIyBDT05GSUdfVEVTVF9BU1lOQ19EUklWRVJfUFJPQkUg
aXMgbm90IHNldApDT05GSUdfR0VORVJJQ19DUFVfREVWSUNFUz15CkNPTkZJR19HRU5FUklDX0NQ
VV9BVVRPUFJPQkU9eQpDT05GSUdfR0VORVJJQ19DUFVfVlVMTkVSQUJJTElUSUVTPXkKQ09ORklH
X1JFR01BUD15CkNPTkZJR19SRUdNQVBfSTJDPXkKQ09ORklHX1JFR01BUF9NTUlPPXkKQ09ORklH
X1JFR01BUF9JUlE9eQpDT05GSUdfRE1BX1NIQVJFRF9CVUZGRVI9eQojIENPTkZJR19ETUFfRkVO
Q0VfVFJBQ0UgaXMgbm90IHNldAojIENPTkZJR19GV19ERVZMSU5LX1NZTkNfU1RBVEVfVElNRU9V
VCBpcyBub3Qgc2V0CiMgZW5kIG9mIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKCiMKIyBCdXMgZGV2
aWNlcwojCiMgQ09ORklHX01PWFRFVCBpcyBub3Qgc2V0CiMgQ09ORklHX01ISV9CVVMgaXMgbm90
IHNldAojIENPTkZJR19NSElfQlVTX0VQIGlzIG5vdCBzZXQKIyBlbmQgb2YgQnVzIGRldmljZXMK
CiMKIyBDYWNoZSBEcml2ZXJzCiMKIyBlbmQgb2YgQ2FjaGUgRHJpdmVycwoKQ09ORklHX0NPTk5F
Q1RPUj15CkNPTkZJR19QUk9DX0VWRU5UUz15CgojCiMgRmlybXdhcmUgRHJpdmVycwojCgojCiMg
QVJNIFN5c3RlbSBDb250cm9sIGFuZCBNYW5hZ2VtZW50IEludGVyZmFjZSBQcm90b2NvbAojCiMg
ZW5kIG9mIEFSTSBTeXN0ZW0gQ29udHJvbCBhbmQgTWFuYWdlbWVudCBJbnRlcmZhY2UgUHJvdG9j
b2wKCiMgQ09ORklHX0VERCBpcyBub3Qgc2V0CkNPTkZJR19GSVJNV0FSRV9NRU1NQVA9eQpDT05G
SUdfRE1JSUQ9eQojIENPTkZJR19ETUlfU1lTRlMgaXMgbm90IHNldApDT05GSUdfRE1JX1NDQU5f
TUFDSElORV9OT05fRUZJX0ZBTExCQUNLPXkKIyBDT05GSUdfSVNDU0lfSUJGVCBpcyBub3Qgc2V0
CiMgQ09ORklHX0ZXX0NGR19TWVNGUyBpcyBub3Qgc2V0CiMgQ09ORklHX1NZU0ZCX1NJTVBMRUZC
IGlzIG5vdCBzZXQKIyBDT05GSUdfR09PR0xFX0ZJUk1XQVJFIGlzIG5vdCBzZXQKCiMKIyBRdWFs
Y29tbSBmaXJtd2FyZSBkcml2ZXJzCiMKIyBlbmQgb2YgUXVhbGNvbW0gZmlybXdhcmUgZHJpdmVy
cwoKIwojIFRlZ3JhIGZpcm13YXJlIGRyaXZlcgojCiMgZW5kIG9mIFRlZ3JhIGZpcm13YXJlIGRy
aXZlcgojIGVuZCBvZiBGaXJtd2FyZSBEcml2ZXJzCgojIENPTkZJR19HTlNTIGlzIG5vdCBzZXQK
IyBDT05GSUdfTVREIGlzIG5vdCBzZXQKQ09ORklHX09GPXkKIyBDT05GSUdfT0ZfVU5JVFRFU1Qg
aXMgbm90IHNldApDT05GSUdfT0ZfS09CSj15CkNPTkZJR19PRl9BRERSRVNTPXkKQ09ORklHX09G
X0lSUT15CiMgQ09ORklHX09GX09WRVJMQVkgaXMgbm90IHNldApDT05GSUdfT0ZfTlVNQT15CkNP
TkZJR19BUkNIX01JR0hUX0hBVkVfUENfUEFSUE9SVD15CkNPTkZJR19QQVJQT1JUPXkKIyBDT05G
SUdfUEFSUE9SVF9QQyBpcyBub3Qgc2V0CiMgQ09ORklHX1BBUlBPUlRfMTI4NCBpcyBub3Qgc2V0
CkNPTkZJR19QQVJQT1JUX05PVF9QQz15CkNPTkZJR19QTlA9eQpDT05GSUdfUE5QX0RFQlVHX01F
U1NBR0VTPXkKCiMKIyBQcm90b2NvbHMKIwpDT05GSUdfUE5QQUNQST15CkNPTkZJR19CTEtfREVW
PXkKIyBDT05GSUdfQkxLX0RFVl9OVUxMX0JMSyBpcyBub3Qgc2V0CiMgQ09ORklHX0JMS19ERVZf
RkQgaXMgbm90IHNldApDT05GSUdfQ0RST009eQojIENPTkZJR19CTEtfREVWX1BDSUVTU0RfTVRJ
UDMyWFggaXMgbm90IHNldApDT05GSUdfQkxLX0RFVl9MT09QPXkKQ09ORklHX0JMS19ERVZfTE9P
UF9NSU5fQ09VTlQ9OAojIENPTkZJR19CTEtfREVWX0RSQkQgaXMgbm90IHNldAojIENPTkZJR19C
TEtfREVWX05CRCBpcyBub3Qgc2V0CiMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKIyBD
T05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBu
b3Qgc2V0CkNPTkZJR19WSVJUSU9fQkxLPXkKIyBDT05GSUdfQkxLX0RFVl9SQkQgaXMgbm90IHNl
dAojIENPTkZJR19CTEtfREVWX1VCTEsgaXMgbm90IHNldAoKIwojIE5WTUUgU3VwcG9ydAojCiMg
Q09ORklHX0JMS19ERVZfTlZNRSBpcyBub3Qgc2V0CiMgQ09ORklHX05WTUVfRkMgaXMgbm90IHNl
dAojIENPTkZJR19OVk1FX1RDUCBpcyBub3Qgc2V0CiMgQ09ORklHX05WTUVfVEFSR0VUIGlzIG5v
dCBzZXQKIyBlbmQgb2YgTlZNRSBTdXBwb3J0CgojCiMgTWlzYyBkZXZpY2VzCiMKIyBDT05GSUdf
QUQ1MjVYX0RQT1QgaXMgbm90IHNldAojIENPTkZJR19EVU1NWV9JUlEgaXMgbm90IHNldAojIENP
TkZJR19JQk1fQVNNIGlzIG5vdCBzZXQKIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0CiMgQ09O
RklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CiMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAoj
IENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAojIENPTkZJR19IUF9JTE8gaXMg
bm90IHNldAojIENPTkZJR19BUERTOTgwMkFMUyBpcyBub3Qgc2V0CiMgQ09ORklHX0lTTDI5MDAz
IGlzIG5vdCBzZXQKIyBDT05GSUdfSVNMMjkwMjAgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JT
X1RTTDI1NTAgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0JIMTc3MCBpcyBub3Qgc2V0CiMg
Q09ORklHX1NFTlNPUlNfQVBEUzk5MFggaXMgbm90IHNldAojIENPTkZJR19ITUM2MzUyIGlzIG5v
dCBzZXQKIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKIyBDT05GSUdfTEFUVElDRV9FQ1AzX0NP
TkZJRyBpcyBub3Qgc2V0CiMgQ09ORklHX1NSQU0gaXMgbm90IHNldAojIENPTkZJR19EV19YREFU
QV9QQ0lFIGlzIG5vdCBzZXQKIyBDT05GSUdfUENJX0VORFBPSU5UX1RFU1QgaXMgbm90IHNldAoj
IENPTkZJR19YSUxJTlhfU0RGRUMgaXMgbm90IHNldApDT05GSUdfTUlTQ19SVFNYPXkKIyBDT05G
SUdfSElTSV9ISUtFWV9VU0IgaXMgbm90IHNldAojIENPTkZJR19WQ1BVX1NUQUxMX0RFVEVDVE9S
IGlzIG5vdCBzZXQKIyBDT05GSUdfTlNNIGlzIG5vdCBzZXQKIyBDT05GSUdfQzJQT1JUIGlzIG5v
dCBzZXQKCiMKIyBFRVBST00gc3VwcG9ydAojCiMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBz
ZXQKIyBDT05GSUdfRUVQUk9NX0FUMjUgaXMgbm90IHNldAojIENPTkZJR19FRVBST01fTUFYNjg3
NSBpcyBub3Qgc2V0CkNPTkZJR19FRVBST01fOTNDWDY9eQojIENPTkZJR19FRVBST01fOTNYWDQ2
IGlzIG5vdCBzZXQKIyBDT05GSUdfRUVQUk9NX0lEVF84OUhQRVNYIGlzIG5vdCBzZXQKIyBDT05G
SUdfRUVQUk9NX0VFMTAwNCBpcyBub3Qgc2V0CiMgZW5kIG9mIEVFUFJPTSBzdXBwb3J0CgojIENP
TkZJR19DQjcxMF9DT1JFIGlzIG5vdCBzZXQKCiMKIyBUZXhhcyBJbnN0cnVtZW50cyBzaGFyZWQg
dHJhbnNwb3J0IGxpbmUgZGlzY2lwbGluZQojCiMgQ09ORklHX1RJX1NUIGlzIG5vdCBzZXQKIyBl
bmQgb2YgVGV4YXMgSW5zdHJ1bWVudHMgc2hhcmVkIHRyYW5zcG9ydCBsaW5lIGRpc2NpcGxpbmUK
CiMgQ09ORklHX1NFTlNPUlNfTElTM19JMkMgaXMgbm90IHNldAojIENPTkZJR19BTFRFUkFfU1RB
UEwgaXMgbm90IHNldApDT05GSUdfSU5URUxfTUVJPXkKQ09ORklHX0lOVEVMX01FSV9NRT15CiMg
Q09ORklHX0lOVEVMX01FSV9UWEUgaXMgbm90IHNldAojIENPTkZJR19JTlRFTF9NRUlfR1NDIGlz
IG5vdCBzZXQKIyBDT05GSUdfSU5URUxfTUVJX1ZTQ19IVyBpcyBub3Qgc2V0CiMgQ09ORklHX0lO
VEVMX01FSV9IRENQIGlzIG5vdCBzZXQKIyBDT05GSUdfSU5URUxfTUVJX1BYUCBpcyBub3Qgc2V0
CiMgQ09ORklHX0lOVEVMX01FSV9HU0NfUFJPWFkgaXMgbm90IHNldAojIENPTkZJR19WTVdBUkVf
Vk1DSSBpcyBub3Qgc2V0CiMgQ09ORklHX0dFTldRRSBpcyBub3Qgc2V0CiMgQ09ORklHX0VDSE8g
aXMgbm90IHNldAojIENPTkZJR19CQ01fVksgaXMgbm90IHNldAojIENPTkZJR19NSVNDX0FMQ09S
X1BDSSBpcyBub3Qgc2V0CiMgQ09ORklHX01JU0NfUlRTWF9QQ0kgaXMgbm90IHNldApDT05GSUdf
TUlTQ19SVFNYX1VTQj15CiMgQ09ORklHX1VBQ0NFIGlzIG5vdCBzZXQKIyBDT05GSUdfUFZQQU5J
QyBpcyBub3Qgc2V0CiMgQ09ORklHX0dQX1BDSTFYWFhYIGlzIG5vdCBzZXQKIyBlbmQgb2YgTWlz
YyBkZXZpY2VzCgojCiMgU0NTSSBkZXZpY2Ugc3VwcG9ydAojCkNPTkZJR19TQ1NJX01PRD15CiMg
Q09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldApDT05GSUdfU0NTSV9DT01NT049eQpDT05GSUdf
U0NTST15CkNPTkZJR19TQ1NJX0RNQT15CkNPTkZJR19TQ1NJX1BST0NfRlM9eQoKIwojIFNDU0kg
c3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCiMKQ09ORklHX0JMS19ERVZfU0Q9eQoj
IENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKQ09ORklHX0JMS19ERVZfU1I9eQpDT05GSUdf
Q0hSX0RFVl9TRz15CkNPTkZJR19CTEtfREVWX0JTRz15CiMgQ09ORklHX0NIUl9ERVZfU0NIIGlz
IG5vdCBzZXQKQ09ORklHX1NDU0lfQ09OU1RBTlRTPXkKIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlz
IG5vdCBzZXQKIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKCiMKIyBTQ1NJIFRy
YW5zcG9ydHMKIwpDT05GSUdfU0NTSV9TUElfQVRUUlM9eQojIENPTkZJR19TQ1NJX0ZDX0FUVFJT
IGlzIG5vdCBzZXQKIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CiMgQ09ORklH
X1NDU0lfU0FTX0FUVFJTIGlzIG5vdCBzZXQKIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5v
dCBzZXQKIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAojIGVuZCBvZiBTQ1NJIFRy
YW5zcG9ydHMKCkNPTkZJR19TQ1NJX0xPV0xFVkVMPXkKIyBDT05GSUdfSVNDU0lfVENQIGlzIG5v
dCBzZXQKIyBDT05GSUdfSVNDU0lfQk9PVF9TWVNGUyBpcyBub3Qgc2V0CiMgQ09ORklHX1NDU0lf
Q1hHQjNfSVNDU0kgaXMgbm90IHNldAojIENPTkZJR19TQ1NJX0NYR0I0X0lTQ1NJIGlzIG5vdCBz
ZXQKIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKIyBDT05GSUdfQkUySVNDU0kg
aXMgbm90IHNldAojIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiMgQ09O
RklHX1NDU0lfSFBTQSBpcyBub3Qgc2V0CiMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0
CiMgQ09ORklHX1NDU0lfM1dfU0FTIGlzIG5vdCBzZXQKIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBu
b3Qgc2V0CiMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0CiMgQ09ORklHX1NDU0lfQUlD
N1hYWCBpcyBub3Qgc2V0CiMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CiMgQ09ORklH
X1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0CiMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAoj
IENPTkZJR19TQ1NJX01WVU1JIGlzIG5vdCBzZXQKIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBu
b3Qgc2V0CiMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKIyBDT05GSUdfU0NTSV9FU0FT
MlIgaXMgbm90IHNldAojIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAojIENPTkZJ
R19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAojIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90
IHNldAojIENPTkZJR19TQ1NJX01QVDNTQVMgaXMgbm90IHNldAojIENPTkZJR19TQ1NJX01QVDJT
QVMgaXMgbm90IHNldAojIENPTkZJR19TQ1NJX01QSTNNUiBpcyBub3Qgc2V0CiMgQ09ORklHX1ND
U0lfU01BUlRQUUkgaXMgbm90IHNldAojIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CiMg
Q09ORklHX1NDU0lfQlVTTE9HSUMgaXMgbm90IHNldAojIENPTkZJR19TQ1NJX01ZUkIgaXMgbm90
IHNldAojIENPTkZJR19TQ1NJX01ZUlMgaXMgbm90IHNldAojIENPTkZJR19WTVdBUkVfUFZTQ1NJ
IGlzIG5vdCBzZXQKIyBDT05GSUdfU0NTSV9TTklDIGlzIG5vdCBzZXQKIyBDT05GSUdfU0NTSV9E
TVgzMTkxRCBpcyBub3Qgc2V0CiMgQ09ORklHX1NDU0lfRkRPTUFJTl9QQ0kgaXMgbm90IHNldAoj
IENPTkZJR19TQ1NJX0lTQ0kgaXMgbm90IHNldAojIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0
CiMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKIyBDT05GSUdfU0NTSV9JTklBMTAwIGlz
IG5vdCBzZXQKIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKIyBDT05GSUdfU0NTSV9TWU01
M0M4WFhfMiBpcyBub3Qgc2V0CiMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKIyBDT05GSUdf
U0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CiMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5v
dCBzZXQKIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAojIENPTkZJR19TQ1NJX0FNNTND
OTc0IGlzIG5vdCBzZXQKIyBDT05GSUdfU0NTSV9XRDcxOVggaXMgbm90IHNldAojIENPTkZJR19T
Q1NJX0RFQlVHIGlzIG5vdCBzZXQKIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKIyBD
T05GSUdfU0NTSV9QTTgwMDEgaXMgbm90IHNldApDT05GSUdfU0NTSV9WSVJUSU89eQojIENPTkZJ
R19TQ1NJX0xPV0xFVkVMX1BDTUNJQSBpcyBub3Qgc2V0CiMgQ09ORklHX1NDU0lfREggaXMgbm90
IHNldAojIGVuZCBvZiBTQ1NJIGRldmljZSBzdXBwb3J0CgpDT05GSUdfQVRBPXkKQ09ORklHX1NB
VEFfSE9TVD15CkNPTkZJR19QQVRBX1RJTUlOR1M9eQpDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9
eQpDT05GSUdfQVRBX0ZPUkNFPXkKQ09ORklHX0FUQV9BQ1BJPXkKIyBDT05GSUdfU0FUQV9aUE9E
RCBpcyBub3Qgc2V0CkNPTkZJR19TQVRBX1BNUD15CgojCiMgQ29udHJvbGxlcnMgd2l0aCBub24t
U0ZGIG5hdGl2ZSBpbnRlcmZhY2UKIwpDT05GSUdfU0FUQV9BSENJPXkKQ09ORklHX1NBVEFfTU9C
SUxFX0xQTV9QT0xJQ1k9MAojIENPTkZJR19TQVRBX0FIQ0lfUExBVEZPUk0gaXMgbm90IHNldAoj
IENPTkZJR19BSENJX0RXQyBpcyBub3Qgc2V0CiMgQ09ORklHX0FIQ0lfQ0VWQSBpcyBub3Qgc2V0
CiMgQ09ORklHX1NBVEFfSU5JQzE2MlggaXMgbm90IHNldAojIENPTkZJR19TQVRBX0FDQVJEX0FI
Q0kgaXMgbm90IHNldAojIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQ09ORklHX0FUQV9T
RkY9eQoKIwojIFNGRiBjb250cm9sbGVycyB3aXRoIGN1c3RvbSBETUEgaW50ZXJmYWNlCiMKIyBD
T05GSUdfUERDX0FETUEgaXMgbm90IHNldAojIENPTkZJR19TQVRBX1FTVE9SIGlzIG5vdCBzZXQK
IyBDT05GSUdfU0FUQV9TWDQgaXMgbm90IHNldApDT05GSUdfQVRBX0JNRE1BPXkKCiMKIyBTQVRB
IFNGRiBjb250cm9sbGVycyB3aXRoIEJNRE1BCiMKQ09ORklHX0FUQV9QSUlYPXkKIyBDT05GSUdf
U0FUQV9EV0MgaXMgbm90IHNldAojIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKIyBDT05GSUdf
U0FUQV9OViBpcyBub3Qgc2V0CiMgQ09ORklHX1NBVEFfUFJPTUlTRSBpcyBub3Qgc2V0CiMgQ09O
RklHX1NBVEFfU0lMIGlzIG5vdCBzZXQKIyBDT05GSUdfU0FUQV9TSVMgaXMgbm90IHNldAojIENP
TkZJR19TQVRBX1NWVyBpcyBub3Qgc2V0CiMgQ09ORklHX1NBVEFfVUxJIGlzIG5vdCBzZXQKIyBD
T05GSUdfU0FUQV9WSUEgaXMgbm90IHNldAojIENPTkZJR19TQVRBX1ZJVEVTU0UgaXMgbm90IHNl
dAoKIwojIFBBVEEgU0ZGIGNvbnRyb2xsZXJzIHdpdGggQk1ETUEKIwojIENPTkZJR19QQVRBX0FM
SSBpcyBub3Qgc2V0CkNPTkZJR19QQVRBX0FNRD15CiMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90
IHNldAojIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiMgQ09ORklHX1BBVEFfQVRQODY3
WCBpcyBub3Qgc2V0CiMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKIyBDT05GSUdfUEFU
QV9DWVBSRVNTIGlzIG5vdCBzZXQKIyBDT05GSUdfUEFUQV9FRkFSIGlzIG5vdCBzZXQKIyBDT05G
SUdfUEFUQV9IUFQzNjYgaXMgbm90IHNldAojIENPTkZJR19QQVRBX0hQVDM3WCBpcyBub3Qgc2V0
CiMgQ09ORklHX1BBVEFfSFBUM1gyTiBpcyBub3Qgc2V0CiMgQ09ORklHX1BBVEFfSFBUM1gzIGlz
IG5vdCBzZXQKIyBDT05GSUdfUEFUQV9JVDgyMTMgaXMgbm90IHNldAojIENPTkZJR19QQVRBX0lU
ODIxWCBpcyBub3Qgc2V0CiMgQ09ORklHX1BBVEFfSk1JQ1JPTiBpcyBub3Qgc2V0CiMgQ09ORklH
X1BBVEFfTUFSVkVMTCBpcyBub3Qgc2V0CiMgQ09ORklHX1BBVEFfTkVUQ0VMTCBpcyBub3Qgc2V0
CiMgQ09ORklHX1BBVEFfTklOSkEzMiBpcyBub3Qgc2V0CiMgQ09ORklHX1BBVEFfTlM4NzQxNSBp
cyBub3Qgc2V0CkNPTkZJR19QQVRBX09MRFBJSVg9eQojIENPTkZJR19QQVRBX09QVElETUEgaXMg
bm90IHNldAojIENPTkZJR19QQVRBX1BEQzIwMjdYIGlzIG5vdCBzZXQKIyBDT05GSUdfUEFUQV9Q
RENfT0xEIGlzIG5vdCBzZXQKIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKIyBDT05G
SUdfUEFUQV9SREMgaXMgbm90IHNldApDT05GSUdfUEFUQV9TQ0g9eQojIENPTkZJR19QQVRBX1NF
UlZFUldPUktTIGlzIG5vdCBzZXQKIyBDT05GSUdfUEFUQV9TSUw2ODAgaXMgbm90IHNldAojIENP
TkZJR19QQVRBX1NJUyBpcyBub3Qgc2V0CiMgQ09ORklHX1BBVEFfVE9TSElCQSBpcyBub3Qgc2V0
CiMgQ09ORklHX1BBVEFfVFJJRkxFWCBpcyBub3Qgc2V0CiMgQ09ORklHX1BBVEFfVklBIGlzIG5v
dCBzZXQKIyBDT05GSUdfUEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKCiMKIyBQSU8tb25seSBTRkYg
Y29udHJvbGxlcnMKIwojIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAojIENPTkZJ
R19QQVRBX01QSUlYIGlzIG5vdCBzZXQKIyBDT05GSUdfUEFUQV9OUzg3NDEwIGlzIG5vdCBzZXQK
IyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBzZXQKIyBDT05GSUdfUEFUQV9QQ01DSUEgaXMgbm90
IHNldAojIENPTkZJR19QQVRBX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKIyBDT05GSUdfUEFUQV9S
WjEwMDAgaXMgbm90IHNldAoKIwojIEdlbmVyaWMgZmFsbGJhY2sgLyBsZWdhY3kgZHJpdmVycwoj
CiMgQ09ORklHX1BBVEFfQUNQSSBpcyBub3Qgc2V0CiMgQ09ORklHX0FUQV9HRU5FUklDIGlzIG5v
dCBzZXQKIyBDT05GSUdfUEFUQV9MRUdBQ1kgaXMgbm90IHNldApDT05GSUdfTUQ9eQpDT05GSUdf
QkxLX0RFVl9NRD15CkNPTkZJR19NRF9BVVRPREVURUNUPXkKQ09ORklHX01EX0JJVE1BUF9GSUxF
PXkKIyBDT05GSUdfTURfUkFJRDAgaXMgbm90IHNldAojIENPTkZJR19NRF9SQUlEMSBpcyBub3Qg
c2V0CiMgQ09ORklHX01EX1JBSUQxMCBpcyBub3Qgc2V0CiMgQ09ORklHX01EX1JBSUQ0NTYgaXMg
bm90IHNldAojIENPTkZJR19CQ0FDSEUgaXMgbm90IHNldApDT05GSUdfQkxLX0RFVl9ETV9CVUlM
VElOPXkKQ09ORklHX0JMS19ERVZfRE09eQojIENPTkZJR19ETV9ERUJVRyBpcyBub3Qgc2V0CiMg
Q09ORklHX0RNX1VOU1RSSVBFRCBpcyBub3Qgc2V0CiMgQ09ORklHX0RNX0NSWVBUIGlzIG5vdCBz
ZXQKIyBDT05GSUdfRE1fU05BUFNIT1QgaXMgbm90IHNldAojIENPTkZJR19ETV9USElOX1BST1ZJ
U0lPTklORyBpcyBub3Qgc2V0CiMgQ09ORklHX0RNX0NBQ0hFIGlzIG5vdCBzZXQKIyBDT05GSUdf
RE1fV1JJVEVDQUNIRSBpcyBub3Qgc2V0CiMgQ09ORklHX0RNX0VCUyBpcyBub3Qgc2V0CiMgQ09O
RklHX0RNX0VSQSBpcyBub3Qgc2V0CiMgQ09ORklHX0RNX0NMT05FIGlzIG5vdCBzZXQKQ09ORklH
X0RNX01JUlJPUj15CiMgQ09ORklHX0RNX0xPR19VU0VSU1BBQ0UgaXMgbm90IHNldAojIENPTkZJ
R19ETV9SQUlEIGlzIG5vdCBzZXQKQ09ORklHX0RNX1pFUk89eQojIENPTkZJR19ETV9NVUxUSVBB
VEggaXMgbm90IHNldAojIENPTkZJR19ETV9ERUxBWSBpcyBub3Qgc2V0CiMgQ09ORklHX0RNX0RV
U1QgaXMgbm90IHNldAojIENPTkZJR19ETV9JTklUIGlzIG5vdCBzZXQKIyBDT05GSUdfRE1fVUVW
RU5UIGlzIG5vdCBzZXQKIyBDT05GSUdfRE1fRkxBS0VZIGlzIG5vdCBzZXQKIyBDT05GSUdfRE1f
VkVSSVRZIGlzIG5vdCBzZXQKIyBDT05GSUdfRE1fU1dJVENIIGlzIG5vdCBzZXQKIyBDT05GSUdf
RE1fTE9HX1dSSVRFUyBpcyBub3Qgc2V0CiMgQ09ORklHX0RNX0lOVEVHUklUWSBpcyBub3Qgc2V0
CiMgQ09ORklHX0RNX0FVRElUIGlzIG5vdCBzZXQKQ09ORklHX1RBUkdFVF9DT1JFPXkKIyBDT05G
SUdfVENNX0lCTE9DSyBpcyBub3Qgc2V0CiMgQ09ORklHX1RDTV9GSUxFSU8gaXMgbm90IHNldAoj
IENPTkZJR19UQ01fUFNDU0kgaXMgbm90IHNldAojIENPTkZJR19MT09QQkFDS19UQVJHRVQgaXMg
bm90IHNldAojIENPTkZJR19JU0NTSV9UQVJHRVQgaXMgbm90IHNldAojIENPTkZJR19SRU1PVEVf
VEFSR0VUIGlzIG5vdCBzZXQKIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKCiMKIyBJRUVFIDEz
OTQgKEZpcmVXaXJlKSBzdXBwb3J0CiMKIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAojIENP
TkZJR19GSVJFV0lSRV9OT1NZIGlzIG5vdCBzZXQKIyBlbmQgb2YgSUVFRSAxMzk0IChGaXJlV2ly
ZSkgc3VwcG9ydAoKQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTPXkKQ09ORklHX01BQ19FTVVNT1VT
RUJUTj15CkNPTkZJR19ORVRERVZJQ0VTPXkKQ09ORklHX01JST15CkNPTkZJR19ORVRfQ09SRT15
CiMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAojIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiMg
Q09ORklHX1dJUkVHVUFSRCBpcyBub3Qgc2V0CiMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0
CiMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0CiMgQ09ORklHX05FVF9URUFNIGlzIG5vdCBzZXQK
IyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CiMgQ09ORklHX0lQVkxBTiBpcyBub3Qgc2V0CiMg
Q09ORklHX1ZYTEFOIGlzIG5vdCBzZXQKIyBDT05GSUdfR0VORVZFIGlzIG5vdCBzZXQKIyBDT05G
SUdfQkFSRVVEUCBpcyBub3Qgc2V0CiMgQ09ORklHX0dUUCBpcyBub3Qgc2V0CiMgQ09ORklHX0FN
VCBpcyBub3Qgc2V0CiMgQ09ORklHX01BQ1NFQyBpcyBub3Qgc2V0CkNPTkZJR19ORVRDT05TT0xF
PXkKIyBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUQ09O
U09MRV9FWFRFTkRFRF9MT0cgaXMgbm90IHNldApDT05GSUdfTkVUUE9MTD15CkNPTkZJR19ORVRf
UE9MTF9DT05UUk9MTEVSPXkKIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKIyBDT05GSUdfVFVOX1ZO
RVRfQ1JPU1NfTEUgaXMgbm90IHNldAojIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKQ09ORklHX1ZJ
UlRJT19ORVQ9eQojIENPTkZJR19OTE1PTiBpcyBub3Qgc2V0CiMgQ09ORklHX05FVEtJVCBpcyBu
b3Qgc2V0CiMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CiMgQ09ORklHX0FUTV9EUklWRVJTIGlz
IG5vdCBzZXQKQ09ORklHX0VUSEVSTkVUPXkKQ09ORklHX05FVF9WRU5ET1JfM0NPTT15CiMgQ09O
RklHX1BDTUNJQV8zQzU3NCBpcyBub3Qgc2V0CiMgQ09ORklHX1BDTUNJQV8zQzU4OSBpcyBub3Qg
c2V0CiMgQ09ORklHX1ZPUlRFWCBpcyBub3Qgc2V0CiMgQ09ORklHX1RZUEhPT04gaXMgbm90IHNl
dApDT05GSUdfTkVUX1ZFTkRPUl9BREFQVEVDPXkKIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBp
cyBub3Qgc2V0CkNPTkZJR19ORVRfVkVORE9SX0FHRVJFPXkKIyBDT05GSUdfRVQxMzFYIGlzIG5v
dCBzZXQKQ09ORklHX05FVF9WRU5ET1JfQUxBQ1JJVEVDSD15CiMgQ09ORklHX1NMSUNPU1MgaXMg
bm90IHNldApDT05GSUdfTkVUX1ZFTkRPUl9BTFRFT049eQojIENPTkZJR19BQ0VOSUMgaXMgbm90
IHNldAojIENPTkZJR19BTFRFUkFfVFNFIGlzIG5vdCBzZXQKQ09ORklHX05FVF9WRU5ET1JfQU1B
Wk9OPXkKIyBDT05GSUdfRU5BX0VUSEVSTkVUIGlzIG5vdCBzZXQKQ09ORklHX05FVF9WRU5ET1Jf
QU1EPXkKIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAojIENPTkZJR19QQ05FVDMyIGlz
IG5vdCBzZXQKIyBDT05GSUdfUENNQ0lBX05NQ0xBTiBpcyBub3Qgc2V0CiMgQ09ORklHX0FNRF9Y
R0JFIGlzIG5vdCBzZXQKIyBDT05GSUdfUERTX0NPUkUgaXMgbm90IHNldApDT05GSUdfTkVUX1ZF
TkRPUl9BUVVBTlRJQT15CiMgQ09ORklHX0FRVElPTiBpcyBub3Qgc2V0CkNPTkZJR19ORVRfVkVO
RE9SX0FSQz15CkNPTkZJR19ORVRfVkVORE9SX0FTSVg9eQojIENPTkZJR19TUElfQVg4ODc5NkMg
aXMgbm90IHNldApDT05GSUdfTkVUX1ZFTkRPUl9BVEhFUk9TPXkKIyBDT05GSUdfQVRMMiBpcyBu
b3Qgc2V0CiMgQ09ORklHX0FUTDEgaXMgbm90IHNldAojIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0
CiMgQ09ORklHX0FUTDFDIGlzIG5vdCBzZXQKIyBDT05GSUdfQUxYIGlzIG5vdCBzZXQKIyBDT05G
SUdfQ1hfRUNBVCBpcyBub3Qgc2V0CkNPTkZJR19ORVRfVkVORE9SX0JST0FEQ09NPXkKIyBDT05G
SUdfQjQ0IGlzIG5vdCBzZXQKIyBDT05GSUdfQkNNR0VORVQgaXMgbm90IHNldAojIENPTkZJR19C
TlgyIGlzIG5vdCBzZXQKIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0CkNPTkZJR19USUdPTjM9eQpD
T05GSUdfVElHT04zX0hXTU9OPXkKIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAojIENPTkZJR19T
WVNURU1QT1JUIGlzIG5vdCBzZXQKIyBDT05GSUdfQk5YVCBpcyBub3Qgc2V0CkNPTkZJR19ORVRf
VkVORE9SX0NBREVOQ0U9eQojIENPTkZJR19NQUNCIGlzIG5vdCBzZXQKQ09ORklHX05FVF9WRU5E
T1JfQ0FWSVVNPXkKIyBDT05GSUdfVEhVTkRFUl9OSUNfUEYgaXMgbm90IHNldAojIENPTkZJR19U
SFVOREVSX05JQ19WRiBpcyBub3Qgc2V0CiMgQ09ORklHX1RIVU5ERVJfTklDX0JHWCBpcyBub3Qg
c2V0CiMgQ09ORklHX1RIVU5ERVJfTklDX1JHWCBpcyBub3Qgc2V0CiMgQ09ORklHX0NBVklVTV9Q
VFAgaXMgbm90IHNldAojIENPTkZJR19MSVFVSURJTyBpcyBub3Qgc2V0CiMgQ09ORklHX0xJUVVJ
RElPX1ZGIGlzIG5vdCBzZXQKQ09ORklHX05FVF9WRU5ET1JfQ0hFTFNJTz15CiMgQ09ORklHX0NI
RUxTSU9fVDEgaXMgbm90IHNldAojIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKIyBDT05G
SUdfQ0hFTFNJT19UNCBpcyBub3Qgc2V0CiMgQ09ORklHX0NIRUxTSU9fVDRWRiBpcyBub3Qgc2V0
CkNPTkZJR19ORVRfVkVORE9SX0NJU0NPPXkKIyBDT05GSUdfRU5JQyBpcyBub3Qgc2V0CkNPTkZJ
R19ORVRfVkVORE9SX0NPUlRJTkE9eQojIENPTkZJR19HRU1JTklfRVRIRVJORVQgaXMgbm90IHNl
dApDT05GSUdfTkVUX1ZFTkRPUl9EQVZJQ09NPXkKIyBDT05GSUdfRE05MDUxIGlzIG5vdCBzZXQK
IyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CkNPTkZJR19ORVRfVkVORE9SX0RFQz15CkNPTkZJR19O
RVRfVFVMSVA9eQojIENPTkZJR19ERTIxMDRYIGlzIG5vdCBzZXQKIyBDT05GSUdfVFVMSVAgaXMg
bm90IHNldAojIENPTkZJR19XSU5CT05EXzg0MCBpcyBub3Qgc2V0CiMgQ09ORklHX0RNOTEwMiBp
cyBub3Qgc2V0CiMgQ09ORklHX1VMSTUyNlggaXMgbm90IHNldAojIENPTkZJR19QQ01DSUFfWElS
Q09NIGlzIG5vdCBzZXQKQ09ORklHX05FVF9WRU5ET1JfRExJTks9eQojIENPTkZJR19ETDJLIGlz
IG5vdCBzZXQKIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldApDT05GSUdfTkVUX1ZFTkRPUl9F
TVVMRVg9eQojIENPTkZJR19CRTJORVQgaXMgbm90IHNldApDT05GSUdfTkVUX1ZFTkRPUl9FTkdM
RURFUj15CiMgQ09ORklHX1RTTkVQIGlzIG5vdCBzZXQKQ09ORklHX05FVF9WRU5ET1JfRVpDSElQ
PXkKIyBDT05GSUdfRVpDSElQX05QU19NQU5BR0VNRU5UX0VORVQgaXMgbm90IHNldApDT05GSUdf
TkVUX1ZFTkRPUl9GVUpJVFNVPXkKIyBDT05GSUdfUENNQ0lBX0ZNVkoxOFggaXMgbm90IHNldApD
T05GSUdfTkVUX1ZFTkRPUl9GVU5HSUJMRT15CiMgQ09ORklHX0ZVTl9FVEggaXMgbm90IHNldApD
T05GSUdfTkVUX1ZFTkRPUl9HT09HTEU9eQojIENPTkZJR19HVkUgaXMgbm90IHNldApDT05GSUdf
TkVUX1ZFTkRPUl9IVUFXRUk9eQojIENPTkZJR19ISU5JQyBpcyBub3Qgc2V0CkNPTkZJR19ORVRf
VkVORE9SX0k4MjVYWD15CkNPTkZJR19ORVRfVkVORE9SX0lOVEVMPXkKQ09ORklHX0UxMDA9eQpD
T05GSUdfRTEwMDA9eQpDT05GSUdfRTEwMDBFPXkKQ09ORklHX0UxMDAwRV9IV1RTPXkKIyBDT05G
SUdfSUdCIGlzIG5vdCBzZXQKIyBDT05GSUdfSUdCVkYgaXMgbm90IHNldAojIENPTkZJR19JWEdC
RSBpcyBub3Qgc2V0CiMgQ09ORklHX0lYR0JFVkYgaXMgbm90IHNldAojIENPTkZJR19JNDBFIGlz
IG5vdCBzZXQKIyBDT05GSUdfSTQwRVZGIGlzIG5vdCBzZXQKIyBDT05GSUdfSUNFIGlzIG5vdCBz
ZXQKIyBDT05GSUdfRk0xMEsgaXMgbm90IHNldAojIENPTkZJR19JR0MgaXMgbm90IHNldAojIENP
TkZJR19JRFBGIGlzIG5vdCBzZXQKIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVU
X1ZFTkRPUl9BREkgaXMgbm90IHNldApDT05GSUdfTkVUX1ZFTkRPUl9MSVRFWD15CiMgQ09ORklH
X0xJVEVYX0xJVEVFVEggaXMgbm90IHNldApDT05GSUdfTkVUX1ZFTkRPUl9NQVJWRUxMPXkKIyBD
T05GSUdfTVZNRElPIGlzIG5vdCBzZXQKIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CkNPTkZJR19T
S1kyPXkKIyBDT05GSUdfU0tZMl9ERUJVRyBpcyBub3Qgc2V0CiMgQ09ORklHX09DVEVPTl9FUCBp
cyBub3Qgc2V0CkNPTkZJR19ORVRfVkVORE9SX01FTExBTk9YPXkKIyBDT05GSUdfTUxYNF9FTiBp
cyBub3Qgc2V0CiMgQ09ORklHX01MWDVfQ09SRSBpcyBub3Qgc2V0CiMgQ09ORklHX01MWFNXX0NP
UkUgaXMgbm90IHNldAojIENPTkZJR19NTFhGVyBpcyBub3Qgc2V0CkNPTkZJR19ORVRfVkVORE9S
X01JQ1JFTD15CiMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CiMgQ09ORklHX0tTODg1MSBpcyBu
b3Qgc2V0CiMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAojIENPTkZJR19LU1o4ODRYX1BD
SSBpcyBub3Qgc2V0CkNPTkZJR19ORVRfVkVORE9SX01JQ1JPQ0hJUD15CiMgQ09ORklHX0VOQzI4
SjYwIGlzIG5vdCBzZXQKIyBDT05GSUdfRU5DWDI0SjYwMCBpcyBub3Qgc2V0CiMgQ09ORklHX0xB
Tjc0M1ggaXMgbm90IHNldAojIENPTkZJR19WQ0FQIGlzIG5vdCBzZXQKQ09ORklHX05FVF9WRU5E
T1JfTUlDUk9TRU1JPXkKQ09ORklHX05FVF9WRU5ET1JfTUlDUk9TT0ZUPXkKQ09ORklHX05FVF9W
RU5ET1JfTVlSST15CiMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKIyBDT05GSUdfRkVBTE5Y
IGlzIG5vdCBzZXQKQ09ORklHX05FVF9WRU5ET1JfTkk9eQojIENPTkZJR19OSV9YR0VfTUFOQUdF
TUVOVF9FTkVUIGlzIG5vdCBzZXQKQ09ORklHX05FVF9WRU5ET1JfTkFUU0VNST15CiMgQ09ORklH
X05BVFNFTUkgaXMgbm90IHNldAojIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKQ09ORklHX05F
VF9WRU5ET1JfTkVURVJJT049eQojIENPTkZJR19TMklPIGlzIG5vdCBzZXQKQ09ORklHX05FVF9W
RU5ET1JfTkVUUk9OT01FPXkKIyBDT05GSUdfTkZQIGlzIG5vdCBzZXQKQ09ORklHX05FVF9WRU5E
T1JfODM5MD15CiMgQ09ORklHX1BDTUNJQV9BWE5FVCBpcyBub3Qgc2V0CiMgQ09ORklHX05FMktf
UENJIGlzIG5vdCBzZXQKIyBDT05GSUdfUENNQ0lBX1BDTkVUIGlzIG5vdCBzZXQKQ09ORklHX05F
VF9WRU5ET1JfTlZJRElBPXkKQ09ORklHX0ZPUkNFREVUSD15CkNPTkZJR19ORVRfVkVORE9SX09L
ST15CiMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKQ09ORklHX05FVF9WRU5ET1JfUEFDS0VUX0VO
R0lORVM9eQojIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKIyBDT05GSUdfWUVMTE9XRklOIGlz
IG5vdCBzZXQKQ09ORklHX05FVF9WRU5ET1JfUEVOU0FORE89eQojIENPTkZJR19JT05JQyBpcyBu
b3Qgc2V0CkNPTkZJR19ORVRfVkVORE9SX1FMT0dJQz15CiMgQ09ORklHX1FMQTNYWFggaXMgbm90
IHNldAojIENPTkZJR19RTENOSUMgaXMgbm90IHNldAojIENPTkZJR19ORVRYRU5fTklDIGlzIG5v
dCBzZXQKIyBDT05GSUdfUUVEIGlzIG5vdCBzZXQKQ09ORklHX05FVF9WRU5ET1JfQlJPQ0FERT15
CiMgQ09ORklHX0JOQSBpcyBub3Qgc2V0CkNPTkZJR19ORVRfVkVORE9SX1FVQUxDT01NPXkKIyBD
T05GSUdfUUNBNzAwMF9TUEkgaXMgbm90IHNldAojIENPTkZJR19RQ09NX0VNQUMgaXMgbm90IHNl
dAojIENPTkZJR19STU5FVCBpcyBub3Qgc2V0CkNPTkZJR19ORVRfVkVORE9SX1JEQz15CiMgQ09O
RklHX1I2MDQwIGlzIG5vdCBzZXQKQ09ORklHX05FVF9WRU5ET1JfUkVBTFRFSz15CiMgQ09ORklH
X0FUUCBpcyBub3Qgc2V0CiMgQ09ORklHXzgxMzlDUCBpcyBub3Qgc2V0CkNPTkZJR184MTM5VE9P
PXkKQ09ORklHXzgxMzlUT09fUElPPXkKIyBDT05GSUdfODEzOVRPT19UVU5FX1RXSVNURVIgaXMg
bm90IHNldAojIENPTkZJR184MTM5VE9PXzgxMjkgaXMgbm90IHNldAojIENPTkZJR184MTM5X09M
RF9SWF9SRVNFVCBpcyBub3Qgc2V0CkNPTkZJR19SODE2OT15CkNPTkZJR19ORVRfVkVORE9SX1JF
TkVTQVM9eQpDT05GSUdfTkVUX1ZFTkRPUl9ST0NLRVI9eQpDT05GSUdfTkVUX1ZFTkRPUl9TQU1T
VU5HPXkKIyBDT05GSUdfU1hHQkVfRVRIIGlzIG5vdCBzZXQKQ09ORklHX05FVF9WRU5ET1JfU0VF
UT15CkNPTkZJR19ORVRfVkVORE9SX1NJTEFOPXkKIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0
CkNPTkZJR19ORVRfVkVORE9SX1NJUz15CiMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0CiMgQ09O
RklHX1NJUzE5MCBpcyBub3Qgc2V0CkNPTkZJR19ORVRfVkVORE9SX1NPTEFSRkxBUkU9eQojIENP
TkZJR19TRkMgaXMgbm90IHNldAojIENPTkZJR19TRkNfRkFMQ09OIGlzIG5vdCBzZXQKIyBDT05G
SUdfU0ZDX1NJRU5BIGlzIG5vdCBzZXQKQ09ORklHX05FVF9WRU5ET1JfU01TQz15CiMgQ09ORklH
X1BDTUNJQV9TTUM5MUM5MiBpcyBub3Qgc2V0CiMgQ09ORklHX0VQSUMxMDAgaXMgbm90IHNldAoj
IENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CiMgQ09ORklHX1NNU0M5NDIwIGlzIG5vdCBzZXQK
Q09ORklHX05FVF9WRU5ET1JfU09DSU9ORVhUPXkKQ09ORklHX05FVF9WRU5ET1JfU1RNSUNSTz15
CiMgQ09ORklHX1NUTU1BQ19FVEggaXMgbm90IHNldApDT05GSUdfTkVUX1ZFTkRPUl9TVU49eQoj
IENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAojIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAoj
IENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKQ09ORklH
X05FVF9WRU5ET1JfU1lOT1BTWVM9eQojIENPTkZJR19EV0NfWExHTUFDIGlzIG5vdCBzZXQKQ09O
RklHX05FVF9WRU5ET1JfVEVIVVRJPXkKIyBDT05GSUdfVEVIVVRJIGlzIG5vdCBzZXQKQ09ORklH
X05FVF9WRU5ET1JfVEk9eQojIENPTkZJR19USV9DUFNXX1BIWV9TRUwgaXMgbm90IHNldAojIENP
TkZJR19UTEFOIGlzIG5vdCBzZXQKQ09ORklHX05FVF9WRU5ET1JfVkVSVEVYQ09NPXkKIyBDT05G
SUdfTVNFMTAyWCBpcyBub3Qgc2V0CkNPTkZJR19ORVRfVkVORE9SX1ZJQT15CiMgQ09ORklHX1ZJ
QV9SSElORSBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CkNPTkZJ
R19ORVRfVkVORE9SX1dBTkdYVU49eQojIENPTkZJR19OR0JFIGlzIG5vdCBzZXQKIyBDT05GSUdf
VFhHQkUgaXMgbm90IHNldApDT05GSUdfTkVUX1ZFTkRPUl9XSVpORVQ9eQojIENPTkZJR19XSVpO
RVRfVzUxMDAgaXMgbm90IHNldAojIENPTkZJR19XSVpORVRfVzUzMDAgaXMgbm90IHNldApDT05G
SUdfTkVUX1ZFTkRPUl9YSUxJTlg9eQojIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNl
dAojIENPTkZJR19YSUxJTlhfTExfVEVNQUMgaXMgbm90IHNldApDT05GSUdfTkVUX1ZFTkRPUl9Y
SVJDT009eQojIENPTkZJR19QQ01DSUFfWElSQzJQUyBpcyBub3Qgc2V0CiMgQ09ORklHX0ZEREkg
aXMgbm90IHNldAojIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CiMgQ09ORklHX05FVF9TQjEwMDAg
aXMgbm90IHNldApDT05GSUdfUEhZTElOSz15CkNPTkZJR19QSFlMSUI9eQpDT05GSUdfU1dQSFk9
eQojIENPTkZJR19MRURfVFJJR0dFUl9QSFkgaXMgbm90IHNldApDT05GSUdfUEhZTElCX0xFRFM9
eQpDT05GSUdfRklYRURfUEhZPXkKIyBDT05GSUdfU0ZQIGlzIG5vdCBzZXQKCiMKIyBNSUkgUEhZ
IGRldmljZSBkcml2ZXJzCiMKIyBDT05GSUdfQU1EX1BIWSBpcyBub3Qgc2V0CiMgQ09ORklHX0FE
SU5fUEhZIGlzIG5vdCBzZXQKIyBDT05GSUdfQURJTjExMDBfUEhZIGlzIG5vdCBzZXQKIyBDT05G
SUdfQVFVQU5USUFfUEhZIGlzIG5vdCBzZXQKQ09ORklHX0FYODg3OTZCX1BIWT15CiMgQ09ORklH
X0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CiMgQ09ORklHX0JDTTU0MTQwX1BIWSBpcyBub3Qgc2V0
CiMgQ09ORklHX0JDTTdYWFhfUEhZIGlzIG5vdCBzZXQKIyBDT05GSUdfQkNNODQ4ODFfUEhZIGlz
IG5vdCBzZXQKIyBDT05GSUdfQkNNODdYWF9QSFkgaXMgbm90IHNldAojIENPTkZJR19DSUNBREFf
UEhZIGlzIG5vdCBzZXQKIyBDT05GSUdfQ09SVElOQV9QSFkgaXMgbm90IHNldAojIENPTkZJR19E
QVZJQ09NX1BIWSBpcyBub3Qgc2V0CiMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAojIENP
TkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKIyBDT05GSUdfSU5URUxfWFdBWV9QSFkgaXMgbm90IHNl
dAojIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAojIENPTkZJR19NQVJWRUxMX1BI
WSBpcyBub3Qgc2V0CiMgQ09ORklHX01BUlZFTExfMTBHX1BIWSBpcyBub3Qgc2V0CiMgQ09ORklH
X01BUlZFTExfODhRMlhYWF9QSFkgaXMgbm90IHNldAojIENPTkZJR19NQVJWRUxMXzg4WDIyMjJf
UEhZIGlzIG5vdCBzZXQKIyBDT05GSUdfTUFYTElORUFSX0dQSFkgaXMgbm90IHNldAojIENPTkZJ
R19NRURJQVRFS19HRV9QSFkgaXMgbm90IHNldAojIENPTkZJR19NSUNSRUxfUEhZIGlzIG5vdCBz
ZXQKIyBDT05GSUdfTUlDUk9DSElQX1QxU19QSFkgaXMgbm90IHNldApDT05GSUdfTUlDUk9DSElQ
X1BIWT15CiMgQ09ORklHX01JQ1JPQ0hJUF9UMV9QSFkgaXMgbm90IHNldAojIENPTkZJR19NSUNS
T1NFTUlfUEhZIGlzIG5vdCBzZXQKIyBDT05GSUdfTU9UT1JDT01NX1BIWSBpcyBub3Qgc2V0CiMg
Q09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0CiMgQ09ORklHX05YUF9DQlRYX1BIWSBpcyBu
b3Qgc2V0CiMgQ09ORklHX05YUF9DNDVfVEpBMTFYWF9QSFkgaXMgbm90IHNldAojIENPTkZJR19O
WFBfVEpBMTFYWF9QSFkgaXMgbm90IHNldAojIENPTkZJR19OQ04yNjAwMF9QSFkgaXMgbm90IHNl
dAojIENPTkZJR19BVDgwM1hfUEhZIGlzIG5vdCBzZXQKIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5v
dCBzZXQKQ09ORklHX1JFQUxURUtfUEhZPXkKIyBDT05GSUdfUkVORVNBU19QSFkgaXMgbm90IHNl
dAojIENPTkZJR19ST0NLQ0hJUF9QSFkgaXMgbm90IHNldApDT05GSUdfU01TQ19QSFk9eQojIENP
TkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKIyBDT05GSUdfVEVSQU5FVElDU19QSFkgaXMgbm90IHNl
dAojIENPTkZJR19EUDgzODIyX1BIWSBpcyBub3Qgc2V0CiMgQ09ORklHX0RQODNUQzgxMV9QSFkg
aXMgbm90IHNldAojIENPTkZJR19EUDgzODQ4X1BIWSBpcyBub3Qgc2V0CiMgQ09ORklHX0RQODM4
NjdfUEhZIGlzIG5vdCBzZXQKIyBDT05GSUdfRFA4Mzg2OV9QSFkgaXMgbm90IHNldAojIENPTkZJ
R19EUDgzVEQ1MTBfUEhZIGlzIG5vdCBzZXQKIyBDT05GSUdfRFA4M1RHNzIwX1BIWSBpcyBub3Qg
c2V0CiMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKIyBDT05GSUdfWElMSU5YX0dNSUky
UkdNSUkgaXMgbm90IHNldAojIENPTkZJR19NSUNSRUxfS1M4OTk1TUEgaXMgbm90IHNldAojIENP
TkZJR19QU0VfQ09OVFJPTExFUiBpcyBub3Qgc2V0CkNPTkZJR19DQU5fREVWPXkKIyBDT05GSUdf
Q0FOX1ZDQU4gaXMgbm90IHNldAojIENPTkZJR19DQU5fVlhDQU4gaXMgbm90IHNldAojIENPTkZJ
R19DQU5fTkVUTElOSyBpcyBub3Qgc2V0CiMgQ09ORklHX0NBTl9ERUJVR19ERVZJQ0VTIGlzIG5v
dCBzZXQKQ09ORklHX01ESU9fREVWSUNFPXkKQ09ORklHX01ESU9fQlVTPXkKQ09ORklHX0ZXTk9E
RV9NRElPPXkKQ09ORklHX09GX01ESU89eQpDT05GSUdfQUNQSV9NRElPPXkKQ09ORklHX01ESU9f
REVWUkVTPXkKIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIyBDT05GSUdfTURJT19C
Q01fVU5JTUFDIGlzIG5vdCBzZXQKIyBDT05GSUdfTURJT19ISVNJX0ZFTUFDIGlzIG5vdCBzZXQK
IyBDT05GSUdfTURJT19NVlVTQiBpcyBub3Qgc2V0CiMgQ09ORklHX01ESU9fTVNDQ19NSUlNIGlz
IG5vdCBzZXQKIyBDT05GSUdfTURJT19PQ1RFT04gaXMgbm90IHNldAojIENPTkZJR19NRElPX0lQ
UTQwMTkgaXMgbm90IHNldAojIENPTkZJR19NRElPX0lQUTgwNjQgaXMgbm90IHNldAojIENPTkZJ
R19NRElPX1RIVU5ERVIgaXMgbm90IHNldAoKIwojIE1ESU8gTXVsdGlwbGV4ZXJzCiMKIyBDT05G
SUdfTURJT19CVVNfTVVYX0dQSU8gaXMgbm90IHNldAojIENPTkZJR19NRElPX0JVU19NVVhfTVVM
VElQTEVYRVIgaXMgbm90IHNldAojIENPTkZJR19NRElPX0JVU19NVVhfTU1JT1JFRyBpcyBub3Qg
c2V0CgojCiMgUENTIGRldmljZSBkcml2ZXJzCiMKIyBlbmQgb2YgUENTIGRldmljZSBkcml2ZXJz
CgojIENPTkZJR19QTElQIGlzIG5vdCBzZXQKIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKIyBDT05G
SUdfU0xJUCBpcyBub3Qgc2V0CkNPTkZJR19VU0JfTkVUX0RSSVZFUlM9eQpDT05GSUdfVVNCX0NB
VEM9eQpDT05GSUdfVVNCX0tBV0VUSD15CkNPTkZJR19VU0JfUEVHQVNVUz15CkNPTkZJR19VU0Jf
UlRMODE1MD15CkNPTkZJR19VU0JfUlRMODE1Mj15CkNPTkZJR19VU0JfTEFONzhYWD15CkNPTkZJ
R19VU0JfVVNCTkVUPXkKQ09ORklHX1VTQl9ORVRfQVg4ODE3WD15CkNPTkZJR19VU0JfTkVUX0FY
ODgxNzlfMTc4QT15CkNPTkZJR19VU0JfTkVUX0NEQ0VUSEVSPXkKQ09ORklHX1VTQl9ORVRfQ0RD
X0VFTT15CkNPTkZJR19VU0JfTkVUX0NEQ19OQ009eQpDT05GSUdfVVNCX05FVF9IVUFXRUlfQ0RD
X05DTT15CkNPTkZJR19VU0JfTkVUX0NEQ19NQklNPXkKQ09ORklHX1VTQl9ORVRfRE05NjAxPXkK
Q09ORklHX1VTQl9ORVRfU1I5NzAwPXkKQ09ORklHX1VTQl9ORVRfU1I5ODAwPXkKQ09ORklHX1VT
Ql9ORVRfU01TQzc1WFg9eQpDT05GSUdfVVNCX05FVF9TTVNDOTVYWD15CkNPTkZJR19VU0JfTkVU
X0dMNjIwQT15CkNPTkZJR19VU0JfTkVUX05FVDEwODA9eQpDT05GSUdfVVNCX05FVF9QTFVTQj15
CkNPTkZJR19VU0JfTkVUX01DUzc4MzA9eQpDT05GSUdfVVNCX05FVF9STkRJU19IT1NUPXkKQ09O
RklHX1VTQl9ORVRfQ0RDX1NVQlNFVF9FTkFCTEU9eQpDT05GSUdfVVNCX05FVF9DRENfU1VCU0VU
PXkKQ09ORklHX1VTQl9BTElfTTU2MzI9eQpDT05GSUdfVVNCX0FOMjcyMD15CkNPTkZJR19VU0Jf
QkVMS0lOPXkKQ09ORklHX1VTQl9BUk1MSU5VWD15CkNPTkZJR19VU0JfRVBTT04yODg4PXkKQ09O
RklHX1VTQl9LQzIxOTA9eQpDT05GSUdfVVNCX05FVF9aQVVSVVM9eQpDT05GSUdfVVNCX05FVF9D
WDgyMzEwX0VUSD15CkNPTkZJR19VU0JfTkVUX0tBTE1JQT15CkNPTkZJR19VU0JfTkVUX1FNSV9X
V0FOPXkKQ09ORklHX1VTQl9IU089eQpDT05GSUdfVVNCX05FVF9JTlQ1MVgxPXkKQ09ORklHX1VT
Ql9DRENfUEhPTkVUPXkKQ09ORklHX1VTQl9JUEhFVEg9eQpDT05GSUdfVVNCX1NJRVJSQV9ORVQ9
eQpDT05GSUdfVVNCX1ZMNjAwPXkKQ09ORklHX1VTQl9ORVRfQ0g5MjAwPXkKIyBDT05GSUdfVVNC
X05FVF9BUUMxMTEgaXMgbm90IHNldApDT05GSUdfVVNCX1JUTDgxNTNfRUNNPXkKQ09ORklHX1dM
QU49eQpDT05GSUdfV0xBTl9WRU5ET1JfQURNVEVLPXkKIyBDT05GSUdfQURNODIxMSBpcyBub3Qg
c2V0CkNPTkZJR19BVEhfQ09NTU9OPXkKQ09ORklHX1dMQU5fVkVORE9SX0FUSD15CiMgQ09ORklH
X0FUSF9ERUJVRyBpcyBub3Qgc2V0CiMgQ09ORklHX0FUSDVLIGlzIG5vdCBzZXQKIyBDT05GSUdf
QVRINUtfUENJIGlzIG5vdCBzZXQKQ09ORklHX0FUSDlLX0hXPXkKQ09ORklHX0FUSDlLX0NPTU1P
Tj15CkNPTkZJR19BVEg5S19DT01NT05fREVCVUc9eQpDT05GSUdfQVRIOUtfQlRDT0VYX1NVUFBP
UlQ9eQpDT05GSUdfQVRIOUs9eQojIENPTkZJR19BVEg5S19QQ0kgaXMgbm90IHNldAojIENPTkZJ
R19BVEg5S19BSEIgaXMgbm90IHNldApDT05GSUdfQVRIOUtfREVCVUdGUz15CiMgQ09ORklHX0FU
SDlLX1NUQVRJT05fU1RBVElTVElDUyBpcyBub3Qgc2V0CiMgQ09ORklHX0FUSDlLX0RZTkFDSyBp
cyBub3Qgc2V0CiMgQ09ORklHX0FUSDlLX1dPVyBpcyBub3Qgc2V0CiMgQ09ORklHX0FUSDlLX1JG
S0lMTCBpcyBub3Qgc2V0CiMgQ09ORklHX0FUSDlLX0NIQU5ORUxfQ09OVEVYVCBpcyBub3Qgc2V0
CiMgQ09ORklHX0FUSDlLX1BDT0VNIGlzIG5vdCBzZXQKQ09ORklHX0FUSDlLX0hUQz15CkNPTkZJ
R19BVEg5S19IVENfREVCVUdGUz15CiMgQ09ORklHX0FUSDlLX0hXUk5HIGlzIG5vdCBzZXQKIyBD
T05GSUdfQVRIOUtfQ09NTU9OX1NQRUNUUkFMIGlzIG5vdCBzZXQKQ09ORklHX0NBUkw5MTcwPXkK
Q09ORklHX0NBUkw5MTcwX0xFRFM9eQojIENPTkZJR19DQVJMOTE3MF9ERUJVR0ZTIGlzIG5vdCBz
ZXQKQ09ORklHX0NBUkw5MTcwX1dQQz15CkNPTkZJR19DQVJMOTE3MF9IV1JORz15CkNPTkZJR19B
VEg2S0w9eQojIENPTkZJR19BVEg2S0xfU0RJTyBpcyBub3Qgc2V0CkNPTkZJR19BVEg2S0xfVVNC
PXkKIyBDT05GSUdfQVRINktMX0RFQlVHIGlzIG5vdCBzZXQKIyBDT05GSUdfQVRINktMX1RSQUNJ
TkcgaXMgbm90IHNldApDT05GSUdfQVI1NTIzPXkKIyBDT05GSUdfV0lMNjIxMCBpcyBub3Qgc2V0
CkNPTkZJR19BVEgxMEs9eQpDT05GSUdfQVRIMTBLX0NFPXkKIyBDT05GSUdfQVRIMTBLX1BDSSBp
cyBub3Qgc2V0CiMgQ09ORklHX0FUSDEwS19TRElPIGlzIG5vdCBzZXQKQ09ORklHX0FUSDEwS19V
U0I9eQojIENPTkZJR19BVEgxMEtfREVCVUcgaXMgbm90IHNldAojIENPTkZJR19BVEgxMEtfREVC
VUdGUyBpcyBub3Qgc2V0CiMgQ09ORklHX0FUSDEwS19UUkFDSU5HIGlzIG5vdCBzZXQKIyBDT05G
SUdfV0NOMzZYWCBpcyBub3Qgc2V0CiMgQ09ORklHX0FUSDExSyBpcyBub3Qgc2V0CiMgQ09ORklH
X0FUSDEySyBpcyBub3Qgc2V0CkNPTkZJR19XTEFOX1ZFTkRPUl9BVE1FTD15CkNPTkZJR19BVDc2
QzUwWF9VU0I9eQpDT05GSUdfV0xBTl9WRU5ET1JfQlJPQURDT009eQojIENPTkZJR19CNDMgaXMg
bm90IHNldAojIENPTkZJR19CNDNMRUdBQ1kgaXMgbm90IHNldApDT05GSUdfQlJDTVVUSUw9eQoj
IENPTkZJR19CUkNNU01BQyBpcyBub3Qgc2V0CkNPTkZJR19CUkNNRk1BQz15CkNPTkZJR19CUkNN
Rk1BQ19QUk9UT19CQ0RDPXkKIyBDT05GSUdfQlJDTUZNQUNfU0RJTyBpcyBub3Qgc2V0CkNPTkZJ
R19CUkNNRk1BQ19VU0I9eQojIENPTkZJR19CUkNNRk1BQ19QQ0lFIGlzIG5vdCBzZXQKIyBDT05G
SUdfQlJDTV9UUkFDSU5HIGlzIG5vdCBzZXQKIyBDT05GSUdfQlJDTURCRyBpcyBub3Qgc2V0CkNP
TkZJR19XTEFOX1ZFTkRPUl9JTlRFTD15CiMgQ09ORklHX0lQVzIxMDAgaXMgbm90IHNldAojIENP
TkZJR19JUFcyMjAwIGlzIG5vdCBzZXQKIyBDT05GSUdfSVdMNDk2NSBpcyBub3Qgc2V0CiMgQ09O
RklHX0lXTDM5NDUgaXMgbm90IHNldAojIENPTkZJR19JV0xXSUZJIGlzIG5vdCBzZXQKQ09ORklH
X1dMQU5fVkVORE9SX0lOVEVSU0lMPXkKQ09ORklHX1A1NF9DT01NT049eQpDT05GSUdfUDU0X1VT
Qj15CiMgQ09ORklHX1A1NF9QQ0kgaXMgbm90IHNldAojIENPTkZJR19QNTRfU1BJIGlzIG5vdCBz
ZXQKQ09ORklHX1A1NF9MRURTPXkKQ09ORklHX1dMQU5fVkVORE9SX01BUlZFTEw9eQpDT05GSUdf
TElCRVJUQVM9eQpDT05GSUdfTElCRVJUQVNfVVNCPXkKQ09ORklHX0xJQkVSVEFTX1NESU89eQpD
T05GSUdfTElCRVJUQVNfU1BJPXkKIyBDT05GSUdfTElCRVJUQVNfREVCVUcgaXMgbm90IHNldApD
T05GSUdfTElCRVJUQVNfTUVTSD15CkNPTkZJR19MSUJFUlRBU19USElORklSTT15CiMgQ09ORklH
X0xJQkVSVEFTX1RISU5GSVJNX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX0xJQkVSVEFTX1RISU5G
SVJNX1VTQj15CkNPTkZJR19NV0lGSUVYPXkKIyBDT05GSUdfTVdJRklFWF9TRElPIGlzIG5vdCBz
ZXQKIyBDT05GSUdfTVdJRklFWF9QQ0lFIGlzIG5vdCBzZXQKQ09ORklHX01XSUZJRVhfVVNCPXkK
IyBDT05GSUdfTVdMOEsgaXMgbm90IHNldApDT05GSUdfV0xBTl9WRU5ET1JfTUVESUFURUs9eQpD
T05GSUdfTVQ3NjAxVT15CiMgQ09ORklHX01UNzZ4MFUgaXMgbm90IHNldAojIENPTkZJR19NVDc2
eDBFIGlzIG5vdCBzZXQKIyBDT05GSUdfTVQ3NngyRSBpcyBub3Qgc2V0CiMgQ09ORklHX01UNzZ4
MlUgaXMgbm90IHNldAojIENPTkZJR19NVDc2MDNFIGlzIG5vdCBzZXQKIyBDT05GSUdfTVQ3NjE1
RSBpcyBub3Qgc2V0CiMgQ09ORklHX01UNzY2M1UgaXMgbm90IHNldAojIENPTkZJR19NVDc2NjNT
IGlzIG5vdCBzZXQKIyBDT05GSUdfTVQ3OTE1RSBpcyBub3Qgc2V0CiMgQ09ORklHX01UNzkyMUUg
aXMgbm90IHNldAojIENPTkZJR19NVDc5MjFTIGlzIG5vdCBzZXQKIyBDT05GSUdfTVQ3OTIxVSBp
cyBub3Qgc2V0CiMgQ09ORklHX01UNzk5NkUgaXMgbm90IHNldAojIENPTkZJR19NVDc5MjVFIGlz
IG5vdCBzZXQKIyBDT05GSUdfTVQ3OTI1VSBpcyBub3Qgc2V0CkNPTkZJR19XTEFOX1ZFTkRPUl9N
SUNST0NISVA9eQpDT05GSUdfV0lMQzEwMDA9eQpDT05GSUdfV0lMQzEwMDBfU0RJTz15CiMgQ09O
RklHX1dJTEMxMDAwX1NQSSBpcyBub3Qgc2V0CiMgQ09ORklHX1dJTEMxMDAwX0hXX09PQl9JTlRS
IGlzIG5vdCBzZXQKQ09ORklHX1dMQU5fVkVORE9SX1BVUkVMSUZJPXkKIyBDT05GSUdfUExGWExD
IGlzIG5vdCBzZXQKQ09ORklHX1dMQU5fVkVORE9SX1JBTElOSz15CkNPTkZJR19SVDJYMDA9eQoj
IENPTkZJR19SVDI0MDBQQ0kgaXMgbm90IHNldAojIENPTkZJR19SVDI1MDBQQ0kgaXMgbm90IHNl
dAojIENPTkZJR19SVDYxUENJIGlzIG5vdCBzZXQKIyBDT05GSUdfUlQyODAwUENJIGlzIG5vdCBz
ZXQKQ09ORklHX1JUMjUwMFVTQj15CkNPTkZJR19SVDczVVNCPXkKQ09ORklHX1JUMjgwMFVTQj15
CkNPTkZJR19SVDI4MDBVU0JfUlQzM1hYPXkKQ09ORklHX1JUMjgwMFVTQl9SVDM1WFg9eQpDT05G
SUdfUlQyODAwVVNCX1JUMzU3Mz15CkNPTkZJR19SVDI4MDBVU0JfUlQ1M1hYPXkKQ09ORklHX1JU
MjgwMFVTQl9SVDU1WFg9eQpDT05GSUdfUlQyODAwVVNCX1VOS05PV049eQpDT05GSUdfUlQyODAw
X0xJQj15CkNPTkZJR19SVDJYMDBfTElCX1VTQj15CkNPTkZJR19SVDJYMDBfTElCPXkKQ09ORklH
X1JUMlgwMF9MSUJfRklSTVdBUkU9eQpDT05GSUdfUlQyWDAwX0xJQl9DUllQVE89eQpDT05GSUdf
UlQyWDAwX0xJQl9MRURTPXkKIyBDT05GSUdfUlQyWDAwX0xJQl9ERUJVR0ZTIGlzIG5vdCBzZXQK
IyBDT05GSUdfUlQyWDAwX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX1dMQU5fVkVORE9SX1JFQUxU
RUs9eQojIENPTkZJR19SVEw4MTgwIGlzIG5vdCBzZXQKQ09ORklHX1JUTDgxODc9eQpDT05GSUdf
UlRMODE4N19MRURTPXkKQ09ORklHX1JUTF9DQVJEUz15CkNPTkZJR19SVEw4MTkyQ0U9eQpDT05G
SUdfUlRMODE5MlNFPXkKQ09ORklHX1JUTDgxOTJERT15CkNPTkZJR19SVEw4NzIzQUU9eQpDT05G
SUdfUlRMODcyM0JFPXkKQ09ORklHX1JUTDgxODhFRT15CkNPTkZJR19SVEw4MTkyRUU9eQpDT05G
SUdfUlRMODgyMUFFPXkKQ09ORklHX1JUTDgxOTJDVT15CkNPTkZJR19SVExXSUZJPXkKQ09ORklH
X1JUTFdJRklfUENJPXkKQ09ORklHX1JUTFdJRklfVVNCPXkKIyBDT05GSUdfUlRMV0lGSV9ERUJV
RyBpcyBub3Qgc2V0CkNPTkZJR19SVEw4MTkyQ19DT01NT049eQpDT05GSUdfUlRMODcyM19DT01N
T049eQpDT05GSUdfUlRMQlRDT0VYSVNUPXkKQ09ORklHX1JUTDhYWFhVPXkKQ09ORklHX1JUTDhY
WFhVX1VOVEVTVEVEPXkKIyBDT05GSUdfUlRXODggaXMgbm90IHNldAojIENPTkZJR19SVFc4OSBp
cyBub3Qgc2V0CkNPTkZJR19XTEFOX1ZFTkRPUl9SU0k9eQpDT05GSUdfUlNJXzkxWD15CiMgQ09O
RklHX1JTSV9ERUJVR0ZTIGlzIG5vdCBzZXQKIyBDT05GSUdfUlNJX1NESU8gaXMgbm90IHNldApD
T05GSUdfUlNJX1VTQj15CiMgQ09ORklHX1JTSV9DT0VYIGlzIG5vdCBzZXQKQ09ORklHX1dMQU5f
VkVORE9SX1NJTEFCUz15CiMgQ09ORklHX1dGWCBpcyBub3Qgc2V0CkNPTkZJR19XTEFOX1ZFTkRP
Ul9TVD15CiMgQ09ORklHX0NXMTIwMCBpcyBub3Qgc2V0CkNPTkZJR19XTEFOX1ZFTkRPUl9UST15
CiMgQ09ORklHX1dMMTI1MSBpcyBub3Qgc2V0CiMgQ09ORklHX1dMMTJYWCBpcyBub3Qgc2V0CiMg
Q09ORklHX1dMMThYWCBpcyBub3Qgc2V0CiMgQ09ORklHX1dMQ09SRSBpcyBub3Qgc2V0CkNPTkZJ
R19XTEFOX1ZFTkRPUl9aWURBUz15CkNPTkZJR19aRDEyMTFSVz15CiMgQ09ORklHX1pEMTIxMVJX
X0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX1dMQU5fVkVORE9SX1FVQU5URU5OQT15CiMgQ09ORklH
X1FUTkZNQUNfUENJRSBpcyBub3Qgc2V0CiMgQ09ORklHX01BQzgwMjExX0hXU0lNIGlzIG5vdCBz
ZXQKIyBDT05GSUdfVklSVF9XSUZJIGlzIG5vdCBzZXQKIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQK
Q09ORklHX0lFRUU4MDIxNTRfRFJJVkVSUz15CiMgQ09ORklHX0lFRUU4MDIxNTRfRkFLRUxCIGlz
IG5vdCBzZXQKIyBDT05GSUdfSUVFRTgwMjE1NF9BVDg2UkYyMzAgaXMgbm90IHNldAojIENPTkZJ
R19JRUVFODAyMTU0X01SRjI0SjQwIGlzIG5vdCBzZXQKIyBDT05GSUdfSUVFRTgwMjE1NF9DQzI1
MjAgaXMgbm90IHNldApDT05GSUdfSUVFRTgwMjE1NF9BVFVTQj15CiMgQ09ORklHX0lFRUU4MDIx
NTRfQURGNzI0MiBpcyBub3Qgc2V0CiMgQ09ORklHX0lFRUU4MDIxNTRfQ0E4MjEwIGlzIG5vdCBz
ZXQKIyBDT05GSUdfSUVFRTgwMjE1NF9NQ1IyMEEgaXMgbm90IHNldAojIENPTkZJR19JRUVFODAy
MTU0X0hXU0lNIGlzIG5vdCBzZXQKCiMKIyBXaXJlbGVzcyBXQU4KIwojIENPTkZJR19XV0FOIGlz
IG5vdCBzZXQKIyBlbmQgb2YgV2lyZWxlc3MgV0FOCgojIENPTkZJR19WTVhORVQzIGlzIG5vdCBz
ZXQKIyBDT05GSUdfRlVKSVRTVV9FUyBpcyBub3Qgc2V0CiMgQ09ORklHX05FVERFVlNJTSBpcyBu
b3Qgc2V0CkNPTkZJR19ORVRfRkFJTE9WRVI9eQpDT05GSUdfSVNETj15CkNPTkZJR19JU0ROX0NB
UEk9eQpDT05GSUdfTUlTRE49eQojIENPTkZJR19NSVNETl9EU1AgaXMgbm90IHNldAojIENPTkZJ
R19NSVNETl9MMU9JUCBpcyBub3Qgc2V0CgojCiMgbUlTRE4gaGFyZHdhcmUgZHJpdmVycwojCiMg
Q09ORklHX01JU0ROX0hGQ1BDSSBpcyBub3Qgc2V0CiMgQ09ORklHX01JU0ROX0hGQ01VTFRJIGlz
IG5vdCBzZXQKQ09ORklHX01JU0ROX0hGQ1VTQj15CiMgQ09ORklHX01JU0ROX0FWTUZSSVRaIGlz
IG5vdCBzZXQKIyBDT05GSUdfTUlTRE5fU1BFRURGQVggaXMgbm90IHNldAojIENPTkZJR19NSVNE
Tl9JTkZJTkVPTiBpcyBub3Qgc2V0CiMgQ09ORklHX01JU0ROX1c2NjkyIGlzIG5vdCBzZXQKIyBD
T05GSUdfTUlTRE5fTkVUSkVUIGlzIG5vdCBzZXQKCiMKIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAoj
CkNPTkZJR19JTlBVVD15CkNPTkZJR19JTlBVVF9MRURTPXkKQ09ORklHX0lOUFVUX0ZGX01FTUxF
U1M9eQpDT05GSUdfSU5QVVRfU1BBUlNFS01BUD15CiMgQ09ORklHX0lOUFVUX01BVFJJWEtNQVAg
aXMgbm90IHNldApDT05GSUdfSU5QVVRfVklWQUxESUZNQVA9eQoKIwojIFVzZXJsYW5kIGludGVy
ZmFjZXMKIwojIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CiMgQ09ORklHX0lOUFVU
X0pPWURFViBpcyBub3Qgc2V0CkNPTkZJR19JTlBVVF9FVkRFVj15CiMgQ09ORklHX0lOUFVUX0VW
QlVHIGlzIG5vdCBzZXQKCiMKIyBJbnB1dCBEZXZpY2UgRHJpdmVycwojCkNPTkZJR19JTlBVVF9L
RVlCT0FSRD15CiMgQ09ORklHX0tFWUJPQVJEX0FEQyBpcyBub3Qgc2V0CiMgQ09ORklHX0tFWUJP
QVJEX0FEUDU1ODggaXMgbm90IHNldAojIENPTkZJR19LRVlCT0FSRF9BRFA1NTg5IGlzIG5vdCBz
ZXQKQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKIyBDT05GSUdfS0VZQk9BUkRfUVQxMDUwIGlzIG5v
dCBzZXQKIyBDT05GSUdfS0VZQk9BUkRfUVQxMDcwIGlzIG5vdCBzZXQKIyBDT05GSUdfS0VZQk9B
UkRfUVQyMTYwIGlzIG5vdCBzZXQKIyBDT05GSUdfS0VZQk9BUkRfRExJTktfRElSNjg1IGlzIG5v
dCBzZXQKIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAojIENPTkZJR19LRVlCT0FS
RF9HUElPIGlzIG5vdCBzZXQKIyBDT05GSUdfS0VZQk9BUkRfR1BJT19QT0xMRUQgaXMgbm90IHNl
dAojIENPTkZJR19LRVlCT0FSRF9UQ0E2NDE2IGlzIG5vdCBzZXQKIyBDT05GSUdfS0VZQk9BUkRf
VENBODQxOCBpcyBub3Qgc2V0CiMgQ09ORklHX0tFWUJPQVJEX01BVFJJWCBpcyBub3Qgc2V0CiMg
Q09ORklHX0tFWUJPQVJEX0xNODMyMyBpcyBub3Qgc2V0CiMgQ09ORklHX0tFWUJPQVJEX0xNODMz
MyBpcyBub3Qgc2V0CiMgQ09ORklHX0tFWUJPQVJEX01BWDczNTkgaXMgbm90IHNldAojIENPTkZJ
R19LRVlCT0FSRF9NQ1MgaXMgbm90IHNldAojIENPTkZJR19LRVlCT0FSRF9NUFIxMjEgaXMgbm90
IHNldAojIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAojIENPTkZJR19LRVlCT0FS
RF9PUEVOQ09SRVMgaXMgbm90IHNldAojIENPTkZJR19LRVlCT0FSRF9QSU5FUEhPTkUgaXMgbm90
IHNldAojIENPTkZJR19LRVlCT0FSRF9TQU1TVU5HIGlzIG5vdCBzZXQKIyBDT05GSUdfS0VZQk9B
UkRfU1RPV0FXQVkgaXMgbm90IHNldAojIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNl
dAojIENPTkZJR19LRVlCT0FSRF9PTUFQNCBpcyBub3Qgc2V0CiMgQ09ORklHX0tFWUJPQVJEX1RN
Ml9UT1VDSEtFWSBpcyBub3Qgc2V0CiMgQ09ORklHX0tFWUJPQVJEX1RXTDQwMzAgaXMgbm90IHNl
dAojIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiMgQ09ORklHX0tFWUJPQVJEX0NB
UDExWFggaXMgbm90IHNldAojIENPTkZJR19LRVlCT0FSRF9CQ00gaXMgbm90IHNldAojIENPTkZJ
R19LRVlCT0FSRF9DWVBSRVNTX1NGIGlzIG5vdCBzZXQKQ09ORklHX0lOUFVUX01PVVNFPXkKQ09O
RklHX01PVVNFX1BTMj15CkNPTkZJR19NT1VTRV9QUzJfQUxQUz15CkNPTkZJR19NT1VTRV9QUzJf
QllEPXkKQ09ORklHX01PVVNFX1BTMl9MT0dJUFMyUFA9eQpDT05GSUdfTU9VU0VfUFMyX1NZTkFQ
VElDUz15CkNPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTX1NNQlVTPXkKQ09ORklHX01PVVNFX1BT
Ml9DWVBSRVNTPXkKQ09ORklHX01PVVNFX1BTMl9MSUZFQk9PSz15CkNPTkZJR19NT1VTRV9QUzJf
VFJBQ0tQT0lOVD15CiMgQ09ORklHX01PVVNFX1BTMl9FTEFOVEVDSCBpcyBub3Qgc2V0CiMgQ09O
RklHX01PVVNFX1BTMl9TRU5URUxJQyBpcyBub3Qgc2V0CiMgQ09ORklHX01PVVNFX1BTMl9UT1VD
SEtJVCBpcyBub3Qgc2V0CkNPTkZJR19NT1VTRV9QUzJfRk9DQUxURUNIPXkKIyBDT05GSUdfTU9V
U0VfUFMyX1ZNTU9VU0UgaXMgbm90IHNldApDT05GSUdfTU9VU0VfUFMyX1NNQlVTPXkKIyBDT05G
SUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKQ09ORklHX01PVVNFX0FQUExFVE9VQ0g9eQpDT05G
SUdfTU9VU0VfQkNNNTk3ND15CiMgQ09ORklHX01PVVNFX0NZQVBBIGlzIG5vdCBzZXQKIyBDT05G
SUdfTU9VU0VfRUxBTl9JMkMgaXMgbm90IHNldAojIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5v
dCBzZXQKIyBDT05GSUdfTU9VU0VfR1BJTyBpcyBub3Qgc2V0CiMgQ09ORklHX01PVVNFX1NZTkFQ
VElDU19JMkMgaXMgbm90IHNldApDT05GSUdfTU9VU0VfU1lOQVBUSUNTX1VTQj15CkNPTkZJR19J
TlBVVF9KT1lTVElDSz15CiMgQ09ORklHX0pPWVNUSUNLX0FOQUxPRyBpcyBub3Qgc2V0CiMgQ09O
RklHX0pPWVNUSUNLX0EzRCBpcyBub3Qgc2V0CiMgQ09ORklHX0pPWVNUSUNLX0FEQyBpcyBub3Qg
c2V0CiMgQ09ORklHX0pPWVNUSUNLX0FESSBpcyBub3Qgc2V0CiMgQ09ORklHX0pPWVNUSUNLX0NP
QlJBIGlzIG5vdCBzZXQKIyBDT05GSUdfSk9ZU1RJQ0tfR0YySyBpcyBub3Qgc2V0CiMgQ09ORklH
X0pPWVNUSUNLX0dSSVAgaXMgbm90IHNldAojIENPTkZJR19KT1lTVElDS19HUklQX01QIGlzIG5v
dCBzZXQKIyBDT05GSUdfSk9ZU1RJQ0tfR1VJTExFTU9UIGlzIG5vdCBzZXQKIyBDT05GSUdfSk9Z
U1RJQ0tfSU5URVJBQ1QgaXMgbm90IHNldAojIENPTkZJR19KT1lTVElDS19TSURFV0lOREVSIGlz
IG5vdCBzZXQKIyBDT05GSUdfSk9ZU1RJQ0tfVE1EQyBpcyBub3Qgc2V0CkNPTkZJR19KT1lTVElD
S19JRk9SQ0U9eQpDT05GSUdfSk9ZU1RJQ0tfSUZPUkNFX1VTQj15CiMgQ09ORklHX0pPWVNUSUNL
X0lGT1JDRV8yMzIgaXMgbm90IHNldAojIENPTkZJR19KT1lTVElDS19XQVJSSU9SIGlzIG5vdCBz
ZXQKIyBDT05GSUdfSk9ZU1RJQ0tfTUFHRUxMQU4gaXMgbm90IHNldAojIENPTkZJR19KT1lTVElD
S19TUEFDRU9SQiBpcyBub3Qgc2V0CiMgQ09ORklHX0pPWVNUSUNLX1NQQUNFQkFMTCBpcyBub3Qg
c2V0CiMgQ09ORklHX0pPWVNUSUNLX1NUSU5HRVIgaXMgbm90IHNldAojIENPTkZJR19KT1lTVElD
S19UV0lESk9ZIGlzIG5vdCBzZXQKIyBDT05GSUdfSk9ZU1RJQ0tfWkhFTkhVQSBpcyBub3Qgc2V0
CiMgQ09ORklHX0pPWVNUSUNLX0RCOSBpcyBub3Qgc2V0CiMgQ09ORklHX0pPWVNUSUNLX0dBTUVD
T04gaXMgbm90IHNldAojIENPTkZJR19KT1lTVElDS19UVVJCT0dSQUZYIGlzIG5vdCBzZXQKIyBD
T05GSUdfSk9ZU1RJQ0tfQVM1MDExIGlzIG5vdCBzZXQKIyBDT05GSUdfSk9ZU1RJQ0tfSk9ZRFVN
UCBpcyBub3Qgc2V0CkNPTkZJR19KT1lTVElDS19YUEFEPXkKQ09ORklHX0pPWVNUSUNLX1hQQURf
RkY9eQpDT05GSUdfSk9ZU1RJQ0tfWFBBRF9MRURTPXkKIyBDT05GSUdfSk9ZU1RJQ0tfV0FMS0VS
QTA3MDEgaXMgbm90IHNldAojIENPTkZJR19KT1lTVElDS19QU1hQQURfU1BJIGlzIG5vdCBzZXQK
IyBDT05GSUdfSk9ZU1RJQ0tfUFhSQyBpcyBub3Qgc2V0CiMgQ09ORklHX0pPWVNUSUNLX1FXSUlD
IGlzIG5vdCBzZXQKIyBDT05GSUdfSk9ZU1RJQ0tfRlNJQTZCIGlzIG5vdCBzZXQKIyBDT05GSUdf
Sk9ZU1RJQ0tfU0VOU0VIQVQgaXMgbm90IHNldAojIENPTkZJR19KT1lTVElDS19TRUVTQVcgaXMg
bm90IHNldApDT05GSUdfSU5QVVRfVEFCTEVUPXkKQ09ORklHX1RBQkxFVF9VU0JfQUNFQ0FEPXkK
Q09ORklHX1RBQkxFVF9VU0JfQUlQVEVLPXkKQ09ORklHX1RBQkxFVF9VU0JfSEFOV0FORz15CkNP
TkZJR19UQUJMRVRfVVNCX0tCVEFCPXkKQ09ORklHX1RBQkxFVF9VU0JfUEVHQVNVUz15CiMgQ09O
RklHX1RBQkxFVF9TRVJJQUxfV0FDT000IGlzIG5vdCBzZXQKQ09ORklHX0lOUFVUX1RPVUNIU0NS
RUVOPXkKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0NiBpcyBub3Qgc2V0CiMgQ09ORklHX1RP
VUNIU0NSRUVOX0FENzg3NyBpcyBub3Qgc2V0CiMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OSBp
cyBub3Qgc2V0CiMgQ09ORklHX1RPVUNIU0NSRUVOX0FEQyBpcyBub3Qgc2V0CiMgQ09ORklHX1RP
VUNIU0NSRUVOX0FSMTAyMV9JMkMgaXMgbm90IHNldAojIENPTkZJR19UT1VDSFNDUkVFTl9BVE1F
TF9NWFQgaXMgbm90IHNldAojIENPTkZJR19UT1VDSFNDUkVFTl9BVU9fUElYQ0lSIGlzIG5vdCBz
ZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQlUyMTAxMyBpcyBub3Qgc2V0CiMgQ09ORklHX1RPVUNI
U0NSRUVOX0JVMjEwMjkgaXMgbm90IHNldAojIENPTkZJR19UT1VDSFNDUkVFTl9DSElQT05FX0lD
TjgzMTggaXMgbm90IHNldAojIENPTkZJR19UT1VDSFNDUkVFTl9DSElQT05FX0lDTjg1MDUgaXMg
bm90IHNldAojIENPTkZJR19UT1VDSFNDUkVFTl9DWThDVE1BMTQwIGlzIG5vdCBzZXQKIyBDT05G
SUdfVE9VQ0hTQ1JFRU5fQ1k4Q1RNRzExMCBpcyBub3Qgc2V0CiMgQ09ORklHX1RPVUNIU0NSRUVO
X0NZVFRTUF9DT1JFIGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQ1lUVFNQNF9DT1JF
IGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQ1lUVFNQNSBpcyBub3Qgc2V0CiMgQ09O
RklHX1RPVUNIU0NSRUVOX0RZTkFQUk8gaXMgbm90IHNldAojIENPTkZJR19UT1VDSFNDUkVFTl9I
QU1QU0hJUkUgaXMgbm90IHNldAojIENPTkZJR19UT1VDSFNDUkVFTl9FRVRJIGlzIG5vdCBzZXQK
IyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUdBTEFYIGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JF
RU5fRUdBTEFYX1NFUklBTCBpcyBub3Qgc2V0CiMgQ09ORklHX1RPVUNIU0NSRUVOX0VYQzMwMDAg
aXMgbm90IHNldAojIENPTkZJR19UT1VDSFNDUkVFTl9GVUpJVFNVIGlzIG5vdCBzZXQKIyBDT05G
SUdfVE9VQ0hTQ1JFRU5fR09PRElYIGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fSElE
RUVQIGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fSFlDT05fSFk0NlhYIGlzIG5vdCBz
ZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fSFlOSVRST05fQ1NUWFhYIGlzIG5vdCBzZXQKIyBDT05G
SUdfVE9VQ0hTQ1JFRU5fSUxJMjEwWCBpcyBub3Qgc2V0CiMgQ09ORklHX1RPVUNIU0NSRUVOX0lM
SVRFSyBpcyBub3Qgc2V0CiMgQ09ORklHX1RPVUNIU0NSRUVOX1M2U1k3NjEgaXMgbm90IHNldAoj
IENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0CiMgQ09ORklHX1RPVUNIU0NSRUVO
X0VLVEYyMTI3IGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUxBTiBpcyBub3Qgc2V0
CiMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0CiMgQ09ORklHX1RPVUNIU0NSRUVO
X1dBQ09NX1c4MDAxIGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fV0FDT01fSTJDIGlz
IG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUFYMTE4MDEgaXMgbm90IHNldAojIENPTkZJ
R19UT1VDSFNDUkVFTl9NQ1M1MDAwIGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTU1T
MTE0IGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUVMRkFTX01JUDQgaXMgbm90IHNl
dAojIENPTkZJR19UT1VDSFNDUkVFTl9NU0cyNjM4IGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hT
Q1JFRU5fTVRPVUNIIGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTk9WQVRFS19OVlRf
VFMgaXMgbm90IHNldAojIENPTkZJR19UT1VDSFNDUkVFTl9JTUFHSVMgaXMgbm90IHNldAojIENP
TkZJR19UT1VDSFNDUkVFTl9JTVg2VUxfVFNDIGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JF
RU5fSU5FWElPIGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUEVOTU9VTlQgaXMgbm90
IHNldAojIENPTkZJR19UT1VDSFNDUkVFTl9FRFRfRlQ1WDA2IGlzIG5vdCBzZXQKIyBDT05GSUdf
VE9VQ0hTQ1JFRU5fVE9VQ0hSSUdIVCBpcyBub3Qgc2V0CiMgQ09ORklHX1RPVUNIU0NSRUVOX1RP
VUNIV0lOIGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUElYQ0lSIGlzIG5vdCBzZXQK
IyBDT05GSUdfVE9VQ0hTQ1JFRU5fV0RUODdYWF9JMkMgaXMgbm90IHNldApDT05GSUdfVE9VQ0hT
Q1JFRU5fVVNCX0NPTVBPU0lURT15CkNPTkZJR19UT1VDSFNDUkVFTl9VU0JfRUdBTEFYPXkKQ09O
RklHX1RPVUNIU0NSRUVOX1VTQl9QQU5KSVQ9eQpDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCXzNNPXkK
Q09ORklHX1RPVUNIU0NSRUVOX1VTQl9JVE09eQpDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0VUVVJC
Tz15CkNPTkZJR19UT1VDSFNDUkVFTl9VU0JfR1VOWkU9eQpDT05GSUdfVE9VQ0hTQ1JFRU5fVVNC
X0RNQ19UU0MxMD15CkNPTkZJR19UT1VDSFNDUkVFTl9VU0JfSVJUT1VDSD15CkNPTkZJR19UT1VD
SFNDUkVFTl9VU0JfSURFQUxURUs9eQpDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0dFTkVSQUxfVE9V
Q0g9eQpDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0dPVE9QPXkKQ09ORklHX1RPVUNIU0NSRUVOX1VT
Ql9KQVNURUM9eQpDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0VMTz15CkNPTkZJR19UT1VDSFNDUkVF
Tl9VU0JfRTJJPXkKQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9aWVRST05JQz15CkNPTkZJR19UT1VD
SFNDUkVFTl9VU0JfRVRUX1RDNDVVU0I9eQpDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX05FWElPPXkK
Q09ORklHX1RPVUNIU0NSRUVOX1VTQl9FQVNZVE9VQ0g9eQojIENPTkZJR19UT1VDSFNDUkVFTl9U
T1VDSElUMjEzIGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVFNDX1NFUklPIGlzIG5v
dCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVFNDMjAwNCBpcyBub3Qgc2V0CiMgQ09ORklHX1RP
VUNIU0NSRUVOX1RTQzIwMDUgaXMgbm90IHNldAojIENPTkZJR19UT1VDSFNDUkVFTl9UU0MyMDA3
IGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUk1fVFMgaXMgbm90IHNldAojIENPTkZJ
R19UT1VDSFNDUkVFTl9TSUxFQUQgaXMgbm90IHNldAojIENPTkZJR19UT1VDSFNDUkVFTl9TSVNf
STJDIGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fU1QxMjMyIGlzIG5vdCBzZXQKIyBD
T05GSUdfVE9VQ0hTQ1JFRU5fU1RNRlRTIGlzIG5vdCBzZXQKQ09ORklHX1RPVUNIU0NSRUVOX1NV
UjQwPXkKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fU1VSRkFDRTNfU1BJIGlzIG5vdCBzZXQKIyBDT05G
SUdfVE9VQ0hTQ1JFRU5fU1g4NjU0IGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVFBT
NjUwN1ggaXMgbm90IHNldAojIENPTkZJR19UT1VDSFNDUkVFTl9aRVQ2MjIzIGlzIG5vdCBzZXQK
IyBDT05GSUdfVE9VQ0hTQ1JFRU5fWkZPUkNFIGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JF
RU5fQ09MSUJSSV9WRjUwIGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUk9ITV9CVTIx
MDIzIGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fSVFTNVhYIGlzIG5vdCBzZXQKIyBD
T05GSUdfVE9VQ0hTQ1JFRU5fSVFTNzIxMSBpcyBub3Qgc2V0CiMgQ09ORklHX1RPVUNIU0NSRUVO
X1pJTklUSVggaXMgbm90IHNldAojIENPTkZJR19UT1VDSFNDUkVFTl9ISU1BWF9IWDgzMTEyQiBp
cyBub3Qgc2V0CkNPTkZJR19JTlBVVF9NSVNDPXkKIyBDT05GSUdfSU5QVVRfQUQ3MTRYIGlzIG5v
dCBzZXQKIyBDT05GSUdfSU5QVVRfQVRNRUxfQ0FQVE9VQ0ggaXMgbm90IHNldAojIENPTkZJR19J
TlBVVF9CTUExNTAgaXMgbm90IHNldAojIENPTkZJR19JTlBVVF9FM1gwX0JVVFRPTiBpcyBub3Qg
c2V0CiMgQ09ORklHX0lOUFVUX1BDU1BLUiBpcyBub3Qgc2V0CiMgQ09ORklHX0lOUFVUX01NQTg0
NTAgaXMgbm90IHNldAojIENPTkZJR19JTlBVVF9BUEFORUwgaXMgbm90IHNldAojIENPTkZJR19J
TlBVVF9HUElPX0JFRVBFUiBpcyBub3Qgc2V0CiMgQ09ORklHX0lOUFVUX0dQSU9fREVDT0RFUiBp
cyBub3Qgc2V0CiMgQ09ORklHX0lOUFVUX0dQSU9fVklCUkEgaXMgbm90IHNldAojIENPTkZJR19J
TlBVVF9BVExBU19CVE5TIGlzIG5vdCBzZXQKQ09ORklHX0lOUFVUX0FUSV9SRU1PVEUyPXkKQ09O
RklHX0lOUFVUX0tFWVNQQU5fUkVNT1RFPXkKIyBDT05GSUdfSU5QVVRfS1hUSjkgaXMgbm90IHNl
dApDT05GSUdfSU5QVVRfUE9XRVJNQVRFPXkKQ09ORklHX0lOUFVUX1lFQUxJTks9eQpDT05GSUdf
SU5QVVRfQ00xMDk9eQojIENPTkZJR19JTlBVVF9SRUdVTEFUT1JfSEFQVElDIGlzIG5vdCBzZXQK
IyBDT05GSUdfSU5QVVRfUkVUVV9QV1JCVVRUT04gaXMgbm90IHNldAojIENPTkZJR19JTlBVVF9U
V0w0MDMwX1BXUkJVVFRPTiBpcyBub3Qgc2V0CiMgQ09ORklHX0lOUFVUX1RXTDQwMzBfVklCUkEg
aXMgbm90IHNldAojIENPTkZJR19JTlBVVF9VSU5QVVQgaXMgbm90IHNldAojIENPTkZJR19JTlBV
VF9QQ0Y4NTc0IGlzIG5vdCBzZXQKIyBDT05GSUdfSU5QVVRfR1BJT19ST1RBUllfRU5DT0RFUiBp
cyBub3Qgc2V0CiMgQ09ORklHX0lOUFVUX0RBNzI4MF9IQVBUSUNTIGlzIG5vdCBzZXQKIyBDT05G
SUdfSU5QVVRfQURYTDM0WCBpcyBub3Qgc2V0CkNPTkZJR19JTlBVVF9JTVNfUENVPXkKIyBDT05G
SUdfSU5QVVRfSVFTMjY5QSBpcyBub3Qgc2V0CiMgQ09ORklHX0lOUFVUX0lRUzYyNkEgaXMgbm90
IHNldAojIENPTkZJR19JTlBVVF9JUVM3MjIyIGlzIG5vdCBzZXQKIyBDT05GSUdfSU5QVVRfQ01B
MzAwMCBpcyBub3Qgc2V0CiMgQ09ORklHX0lOUFVUX0lERUFQQURfU0xJREVCQVIgaXMgbm90IHNl
dAojIENPTkZJR19JTlBVVF9EUlYyNjBYX0hBUFRJQ1MgaXMgbm90IHNldAojIENPTkZJR19JTlBV
VF9EUlYyNjY1X0hBUFRJQ1MgaXMgbm90IHNldAojIENPTkZJR19JTlBVVF9EUlYyNjY3X0hBUFRJ
Q1MgaXMgbm90IHNldApDT05GSUdfUk1JNF9DT1JFPXkKIyBDT05GSUdfUk1JNF9JMkMgaXMgbm90
IHNldAojIENPTkZJR19STUk0X1NQSSBpcyBub3Qgc2V0CiMgQ09ORklHX1JNSTRfU01CIGlzIG5v
dCBzZXQKQ09ORklHX1JNSTRfRjAzPXkKQ09ORklHX1JNSTRfRjAzX1NFUklPPXkKQ09ORklHX1JN
STRfMkRfU0VOU09SPXkKQ09ORklHX1JNSTRfRjExPXkKQ09ORklHX1JNSTRfRjEyPXkKQ09ORklH
X1JNSTRfRjMwPXkKIyBDT05GSUdfUk1JNF9GMzQgaXMgbm90IHNldAojIENPTkZJR19STUk0X0Yz
QSBpcyBub3Qgc2V0CiMgQ09ORklHX1JNSTRfRjU0IGlzIG5vdCBzZXQKIyBDT05GSUdfUk1JNF9G
NTUgaXMgbm90IHNldAoKIwojIEhhcmR3YXJlIEkvTyBwb3J0cwojCkNPTkZJR19TRVJJTz15CkNP
TkZJR19BUkNIX01JR0hUX0hBVkVfUENfU0VSSU89eQpDT05GSUdfU0VSSU9fSTgwNDI9eQpDT05G
SUdfU0VSSU9fU0VSUE9SVD15CiMgQ09ORklHX1NFUklPX0NUODJDNzEwIGlzIG5vdCBzZXQKIyBD
T05GSUdfU0VSSU9fUEFSS0JEIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5v
dCBzZXQKQ09ORklHX1NFUklPX0xJQlBTMj15CiMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0
CiMgQ09ORklHX1NFUklPX0FMVEVSQV9QUzIgaXMgbm90IHNldAojIENPTkZJR19TRVJJT19QUzJN
VUxUIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VSSU9fQVJDX1BTMiBpcyBub3Qgc2V0CiMgQ09ORklH
X1NFUklPX0FQQlBTMiBpcyBub3Qgc2V0CiMgQ09ORklHX1NFUklPX0dQSU9fUFMyIGlzIG5vdCBz
ZXQKIyBDT05GSUdfVVNFUklPIGlzIG5vdCBzZXQKIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNl
dAojIGVuZCBvZiBIYXJkd2FyZSBJL08gcG9ydHMKIyBlbmQgb2YgSW5wdXQgZGV2aWNlIHN1cHBv
cnQKCiMKIyBDaGFyYWN0ZXIgZGV2aWNlcwojCkNPTkZJR19UVFk9eQpDT05GSUdfVlQ9eQpDT05G
SUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQpDT05GSUdfVlRfQ09OU09MRT15CkNPTkZJR19WVF9D
T05TT0xFX1NMRUVQPXkKQ09ORklHX0hXX0NPTlNPTEU9eQojIENPTkZJR19WVF9IV19DT05TT0xF
X0JJTkRJTkcgaXMgbm90IHNldApDT05GSUdfVU5JWDk4X1BUWVM9eQojIENPTkZJR19MRUdBQ1lf
UFRZUyBpcyBub3Qgc2V0CkNPTkZJR19MRUdBQ1lfVElPQ1NUST15CkNPTkZJR19MRElTQ19BVVRP
TE9BRD15CgojCiMgU2VyaWFsIGRyaXZlcnMKIwpDT05GSUdfU0VSSUFMX0VBUkxZQ09OPXkKQ09O
RklHX1NFUklBTF84MjUwPXkKQ09ORklHX1NFUklBTF84MjUwX0RFUFJFQ0FURURfT1BUSU9OUz15
CkNPTkZJR19TRVJJQUxfODI1MF9QTlA9eQojIENPTkZJR19TRVJJQUxfODI1MF8xNjU1MEFfVkFS
SUFOVFMgaXMgbm90IHNldAojIENPTkZJR19TRVJJQUxfODI1MF9GSU5URUsgaXMgbm90IHNldApD
T05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CkNPTkZJR19TRVJJQUxfODI1MF9ETUE9eQpDT05G
SUdfU0VSSUFMXzgyNTBfUENJTElCPXkKQ09ORklHX1NFUklBTF84MjUwX1BDST15CkNPTkZJR19T
RVJJQUxfODI1MF9FWEFSPXkKIyBDT05GSUdfU0VSSUFMXzgyNTBfQ1MgaXMgbm90IHNldApDT05G
SUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MzIKQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFS
VFM9NApDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQpDT05GSUdfU0VSSUFMXzgyNTBfTUFO
WV9QT1JUUz15CiMgQ09ORklHX1NFUklBTF84MjUwX1BDSTFYWFhYIGlzIG5vdCBzZXQKQ09ORklH
X1NFUklBTF84MjUwX1NIQVJFX0lSUT15CkNPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRPXkK
Q09ORklHX1NFUklBTF84MjUwX1JTQT15CkNPTkZJR19TRVJJQUxfODI1MF9EV0xJQj15CiMgQ09O
RklHX1NFUklBTF84MjUwX0RXIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VSSUFMXzgyNTBfUlQyODhY
IGlzIG5vdCBzZXQKQ09ORklHX1NFUklBTF84MjUwX0xQU1M9eQpDT05GSUdfU0VSSUFMXzgyNTBf
TUlEPXkKQ09ORklHX1NFUklBTF84MjUwX1BFUklDT009eQojIENPTkZJR19TRVJJQUxfT0ZfUExB
VEZPUk0gaXMgbm90IHNldAoKIwojIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKIwojIENP
TkZJR19TRVJJQUxfTUFYMzEwMCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFUklBTF9NQVgzMTBYIGlz
IG5vdCBzZXQKIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKQ09ORklHX1NFUklB
TF9DT1JFPXkKQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQojIENPTkZJR19TRVJJQUxfSlNN
IGlzIG5vdCBzZXQKIyBDT05GSUdfU0VSSUFMX1NJRklWRSBpcyBub3Qgc2V0CiMgQ09ORklHX1NF
UklBTF9MQU5USVEgaXMgbm90IHNldAojIENPTkZJR19TRVJJQUxfU0NDTlhQIGlzIG5vdCBzZXQK
IyBDT05GSUdfU0VSSUFMX1NDMTZJUzdYWCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFUklBTF9BTFRF
UkFfSlRBR1VBUlQgaXMgbm90IHNldAojIENPTkZJR19TRVJJQUxfQUxURVJBX1VBUlQgaXMgbm90
IHNldAojIENPTkZJR19TRVJJQUxfWElMSU5YX1BTX1VBUlQgaXMgbm90IHNldAojIENPTkZJR19T
RVJJQUxfQVJDIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VSSUFMX1JQMiBpcyBub3Qgc2V0CiMgQ09O
RklHX1NFUklBTF9GU0xfTFBVQVJUIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VSSUFMX0ZTTF9MSU5G
TEVYVUFSVCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFUklBTF9DT05FWEFOVF9ESUdJQ09MT1IgaXMg
bm90IHNldAojIENPTkZJR19TRVJJQUxfU1BSRCBpcyBub3Qgc2V0CiMgZW5kIG9mIFNlcmlhbCBk
cml2ZXJzCgpDT05GSUdfU0VSSUFMX01DVFJMX0dQSU89eQpDT05GSUdfU0VSSUFMX05PTlNUQU5E
QVJEPXkKIyBDT05GSUdfTU9YQV9JTlRFTExJTyBpcyBub3Qgc2V0CiMgQ09ORklHX01PWEFfU01B
UlRJTyBpcyBub3Qgc2V0CiMgQ09ORklHX05fSERMQyBpcyBub3Qgc2V0CiMgQ09ORklHX0lQV0lS
RUxFU1MgaXMgbm90IHNldAojIENPTkZJR19OX0dTTSBpcyBub3Qgc2V0CiMgQ09ORklHX05PWk9N
SSBpcyBub3Qgc2V0CiMgQ09ORklHX05VTExfVFRZIGlzIG5vdCBzZXQKQ09ORklHX0hWQ19EUklW
RVI9eQojIENPTkZJR19TRVJJQUxfREVWX0JVUyBpcyBub3Qgc2V0CiMgQ09ORklHX1RUWV9QUklO
VEsgaXMgbm90IHNldAojIENPTkZJR19QUklOVEVSIGlzIG5vdCBzZXQKIyBDT05GSUdfUFBERVYg
aXMgbm90IHNldApDT05GSUdfVklSVElPX0NPTlNPTEU9eQojIENPTkZJR19JUE1JX0hBTkRMRVIg
aXMgbm90IHNldApDT05GSUdfSFdfUkFORE9NPXkKIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9N
RU0gaXMgbm90IHNldAojIENPTkZJR19IV19SQU5ET01fSU5URUwgaXMgbm90IHNldAojIENPTkZJ
R19IV19SQU5ET01fQU1EIGlzIG5vdCBzZXQKIyBDT05GSUdfSFdfUkFORE9NX0JBNDMxIGlzIG5v
dCBzZXQKIyBDT05GSUdfSFdfUkFORE9NX1ZJQSBpcyBub3Qgc2V0CkNPTkZJR19IV19SQU5ET01f
VklSVElPPXkKIyBDT05GSUdfSFdfUkFORE9NX0NDVFJORyBpcyBub3Qgc2V0CiMgQ09ORklHX0hX
X1JBTkRPTV9YSVBIRVJBIGlzIG5vdCBzZXQKIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAoj
IENPTkZJR19NV0FWRSBpcyBub3Qgc2V0CiMgQ09ORklHX0RFVk1FTSBpcyBub3Qgc2V0CkNPTkZJ
R19OVlJBTT15CiMgQ09ORklHX0RFVlBPUlQgaXMgbm90IHNldApDT05GSUdfSFBFVD15CiMgQ09O
RklHX0hQRVRfTU1BUCBpcyBub3Qgc2V0CiMgQ09ORklHX0hBTkdDSEVDS19USU1FUiBpcyBub3Qg
c2V0CkNPTkZJR19UQ0dfVFBNPXkKIyBDT05GSUdfSFdfUkFORE9NX1RQTSBpcyBub3Qgc2V0CkNP
TkZJR19UQ0dfVElTX0NPUkU9eQpDT05GSUdfVENHX1RJUz15CiMgQ09ORklHX1RDR19USVNfU1BJ
IGlzIG5vdCBzZXQKIyBDT05GSUdfVENHX1RJU19JMkMgaXMgbm90IHNldAojIENPTkZJR19UQ0df
VElTX0kyQ19DUjUwIGlzIG5vdCBzZXQKIyBDT05GSUdfVENHX1RJU19JMkNfQVRNRUwgaXMgbm90
IHNldAojIENPTkZJR19UQ0dfVElTX0kyQ19JTkZJTkVPTiBpcyBub3Qgc2V0CiMgQ09ORklHX1RD
R19USVNfSTJDX05VVk9UT04gaXMgbm90IHNldAojIENPTkZJR19UQ0dfTlNDIGlzIG5vdCBzZXQK
IyBDT05GSUdfVENHX0FUTUVMIGlzIG5vdCBzZXQKIyBDT05GSUdfVENHX0lORklORU9OIGlzIG5v
dCBzZXQKQ09ORklHX1RDR19DUkI9eQojIENPTkZJR19UQ0dfVlRQTV9QUk9YWSBpcyBub3Qgc2V0
CiMgQ09ORklHX1RDR19USVNfU1QzM1pQMjRfSTJDIGlzIG5vdCBzZXQKIyBDT05GSUdfVENHX1RJ
U19TVDMzWlAyNF9TUEkgaXMgbm90IHNldAojIENPTkZJR19URUxDTE9DSyBpcyBub3Qgc2V0CiMg
Q09ORklHX1hJTExZQlVTIGlzIG5vdCBzZXQKIyBDT05GSUdfWElMTFlVU0IgaXMgbm90IHNldAoj
IGVuZCBvZiBDaGFyYWN0ZXIgZGV2aWNlcwoKIwojIEkyQyBzdXBwb3J0CiMKQ09ORklHX0kyQz15
CkNPTkZJR19BQ1BJX0kyQ19PUFJFR0lPTj15CkNPTkZJR19JMkNfQk9BUkRJTkZPPXkKQ09ORklH
X0kyQ19DT01QQVQ9eQojIENPTkZJR19JMkNfQ0hBUkRFViBpcyBub3Qgc2V0CkNPTkZJR19JMkNf
TVVYPXkKCiMKIyBNdWx0aXBsZXhlciBJMkMgQ2hpcCBzdXBwb3J0CiMKIyBDT05GSUdfSTJDX0FS
Ql9HUElPX0NIQUxMRU5HRSBpcyBub3Qgc2V0CiMgQ09ORklHX0kyQ19NVVhfR1BJTyBpcyBub3Qg
c2V0CiMgQ09ORklHX0kyQ19NVVhfR1BNVVggaXMgbm90IHNldAojIENPTkZJR19JMkNfTVVYX0xU
QzQzMDYgaXMgbm90IHNldAojIENPTkZJR19JMkNfTVVYX1BDQTk1NDEgaXMgbm90IHNldAojIENP
TkZJR19JMkNfTVVYX1BDQTk1NHggaXMgbm90IHNldAojIENPTkZJR19JMkNfTVVYX1JFRyBpcyBu
b3Qgc2V0CiMgQ09ORklHX0kyQ19NVVhfTUxYQ1BMRCBpcyBub3Qgc2V0CiMgZW5kIG9mIE11bHRp
cGxleGVyIEkyQyBDaGlwIHN1cHBvcnQKCkNPTkZJR19JMkNfSEVMUEVSX0FVVE89eQpDT05GSUdf
STJDX1NNQlVTPXkKQ09ORklHX0kyQ19BTEdPQklUPXkKCiMKIyBJMkMgSGFyZHdhcmUgQnVzIHN1
cHBvcnQKIwoKIwojIFBDIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCiMKIyBDT05GSUdf
STJDX0FMSTE1MzUgaXMgbm90IHNldAojIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0CiMg
Q09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qg
c2V0CiMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKIyBDT05GSUdfSTJDX0FNRF9NUDIg
aXMgbm90IHNldApDT05GSUdfSTJDX0k4MDE9eQojIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0
CiMgQ09ORklHX0kyQ19JU01UIGlzIG5vdCBzZXQKIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBz
ZXQKIyBDT05GSUdfSTJDX0NIVF9XQyBpcyBub3Qgc2V0CiMgQ09ORklHX0kyQ19ORk9SQ0UyIGlz
IG5vdCBzZXQKIyBDT05GSUdfSTJDX05WSURJQV9HUFUgaXMgbm90IHNldAojIENPTkZJR19JMkNf
U0lTNTU5NSBpcyBub3Qgc2V0CiMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAojIENPTkZJ
R19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CiMgQ09O
RklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAoKIwojIEFDUEkgZHJpdmVycwojCiMgQ09ORklHX0ky
Q19TQ01JIGlzIG5vdCBzZXQKCiMKIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1i
ZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKIwojIENPTkZJR19JMkNfQ0JVU19HUElPIGlzIG5vdCBz
ZXQKQ09ORklHX0kyQ19ERVNJR05XQVJFX0NPUkU9eQojIENPTkZJR19JMkNfREVTSUdOV0FSRV9T
TEFWRSBpcyBub3Qgc2V0CkNPTkZJR19JMkNfREVTSUdOV0FSRV9QTEFURk9STT15CiMgQ09ORklH
X0kyQ19ERVNJR05XQVJFX0JBWVRSQUlMIGlzIG5vdCBzZXQKIyBDT05GSUdfSTJDX0RFU0lHTldB
UkVfUENJIGlzIG5vdCBzZXQKIyBDT05GSUdfSTJDX0VNRVYyIGlzIG5vdCBzZXQKIyBDT05GSUdf
STJDX0dQSU8gaXMgbm90IHNldAojIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKIyBDT05G
SUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CiMgQ09ORklHX0kyQ19SSzNYIGlzIG5vdCBz
ZXQKIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CiMgQ09ORklHX0kyQ19YSUxJTlggaXMg
bm90IHNldAoKIwojIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKIwpDT05GSUdf
STJDX0RJT0xBTl9VMkM9eQpDT05GSUdfSTJDX0RMTjI9eQojIENPTkZJR19JMkNfQ1AyNjE1IGlz
IG5vdCBzZXQKIyBDT05GSUdfSTJDX1BBUlBPUlQgaXMgbm90IHNldAojIENPTkZJR19JMkNfUENJ
MVhYWFggaXMgbm90IHNldApDT05GSUdfSTJDX1JPQk9URlVaWl9PU0lGPXkKIyBDT05GSUdfSTJD
X1RBT1NfRVZNIGlzIG5vdCBzZXQKQ09ORklHX0kyQ19USU5ZX1VTQj15CkNPTkZJR19JMkNfVklQ
RVJCT0FSRD15CgojCiMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCiMKIyBDT05GSUdfSTJD
X01MWENQTEQgaXMgbm90IHNldAojIENPTkZJR19JMkNfVklSVElPIGlzIG5vdCBzZXQKIyBlbmQg
b2YgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CgojIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0
CiMgQ09ORklHX0kyQ19TTEFWRSBpcyBub3Qgc2V0CiMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlz
IG5vdCBzZXQKIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAojIENPTkZJR19JMkNf
REVCVUdfQlVTIGlzIG5vdCBzZXQKIyBlbmQgb2YgSTJDIHN1cHBvcnQKCiMgQ09ORklHX0kzQyBp
cyBub3Qgc2V0CkNPTkZJR19TUEk9eQojIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldApDT05G
SUdfU1BJX01BU1RFUj15CiMgQ09ORklHX1NQSV9NRU0gaXMgbm90IHNldAoKIwojIFNQSSBNYXN0
ZXIgQ29udHJvbGxlciBEcml2ZXJzCiMKIyBDT05GSUdfU1BJX0FMVEVSQSBpcyBub3Qgc2V0CiMg
Q09ORklHX1NQSV9BWElfU1BJX0VOR0lORSBpcyBub3Qgc2V0CiMgQ09ORklHX1NQSV9CSVRCQU5H
IGlzIG5vdCBzZXQKIyBDT05GSUdfU1BJX0JVVFRFUkZMWSBpcyBub3Qgc2V0CiMgQ09ORklHX1NQ
SV9DQURFTkNFIGlzIG5vdCBzZXQKIyBDT05GSUdfU1BJX0NBREVOQ0VfUVVBRFNQSSBpcyBub3Qg
c2V0CiMgQ09ORklHX1NQSV9ERVNJR05XQVJFIGlzIG5vdCBzZXQKQ09ORklHX1NQSV9ETE4yPXkK
IyBDT05GSUdfU1BJX0dQSU8gaXMgbm90IHNldAojIENPTkZJR19TUElfTE03MF9MTFAgaXMgbm90
IHNldAojIENPTkZJR19TUElfRlNMX1NQSSBpcyBub3Qgc2V0CiMgQ09ORklHX1NQSV9NSUNST0NI
SVBfQ09SRSBpcyBub3Qgc2V0CiMgQ09ORklHX1NQSV9NSUNST0NISVBfQ09SRV9RU1BJIGlzIG5v
dCBzZXQKIyBDT05GSUdfU1BJX0xBTlRJUV9TU0MgaXMgbm90IHNldAojIENPTkZJR19TUElfT0Nf
VElOWSBpcyBub3Qgc2V0CiMgQ09ORklHX1NQSV9QQ0kxWFhYWCBpcyBub3Qgc2V0CiMgQ09ORklH
X1NQSV9QWEEyWFggaXMgbm90IHNldAojIENPTkZJR19TUElfU0MxOElTNjAyIGlzIG5vdCBzZXQK
IyBDT05GSUdfU1BJX1NJRklWRSBpcyBub3Qgc2V0CiMgQ09ORklHX1NQSV9NWElDIGlzIG5vdCBz
ZXQKIyBDT05GSUdfU1BJX1hDT01NIGlzIG5vdCBzZXQKIyBDT05GSUdfU1BJX1hJTElOWCBpcyBu
b3Qgc2V0CiMgQ09ORklHX1NQSV9BTUQgaXMgbm90IHNldAoKIwojIFNQSSBNdWx0aXBsZXhlciBz
dXBwb3J0CiMKIyBDT05GSUdfU1BJX01VWCBpcyBub3Qgc2V0CgojCiMgU1BJIFByb3RvY29sIE1h
c3RlcnMKIwojIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKIyBDT05GSUdfU1BJX0xPT1BC
QUNLX1RFU1QgaXMgbm90IHNldAojIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0CiMgQ09O
RklHX1NQSV9TTEFWRSBpcyBub3Qgc2V0CkNPTkZJR19TUElfRFlOQU1JQz15CiMgQ09ORklHX1NQ
TUkgaXMgbm90IHNldAojIENPTkZJR19IU0kgaXMgbm90IHNldApDT05GSUdfUFBTPXkKIyBDT05G
SUdfUFBTX0RFQlVHIGlzIG5vdCBzZXQKCiMKIyBQUFMgY2xpZW50cyBzdXBwb3J0CiMKIyBDT05G
SUdfUFBTX0NMSUVOVF9LVElNRVIgaXMgbm90IHNldAojIENPTkZJR19QUFNfQ0xJRU5UX0xESVND
IGlzIG5vdCBzZXQKIyBDT05GSUdfUFBTX0NMSUVOVF9QQVJQT1JUIGlzIG5vdCBzZXQKIyBDT05G
SUdfUFBTX0NMSUVOVF9HUElPIGlzIG5vdCBzZXQKCiMKIyBQUFMgZ2VuZXJhdG9ycyBzdXBwb3J0
CiMKCiMKIyBQVFAgY2xvY2sgc3VwcG9ydAojCkNPTkZJR19QVFBfMTU4OF9DTE9DSz15CkNPTkZJ
R19QVFBfMTU4OF9DTE9DS19PUFRJT05BTD15CgojCiMgRW5hYmxlIFBIWUxJQiBhbmQgTkVUV09S
S19QSFlfVElNRVNUQU1QSU5HIHRvIHNlZSB0aGUgYWRkaXRpb25hbCBjbG9ja3MuCiMKQ09ORklH
X1BUUF8xNTg4X0NMT0NLX0tWTT15CiMgQ09ORklHX1BUUF8xNTg4X0NMT0NLX0lEVDgyUDMzIGlz
IG5vdCBzZXQKIyBDT05GSUdfUFRQXzE1ODhfQ0xPQ0tfSURUQ00gaXMgbm90IHNldAojIENPTkZJ
R19QVFBfMTU4OF9DTE9DS19NT0NLIGlzIG5vdCBzZXQKIyBDT05GSUdfUFRQXzE1ODhfQ0xPQ0tf
Vk1XIGlzIG5vdCBzZXQKIyBlbmQgb2YgUFRQIGNsb2NrIHN1cHBvcnQKCiMgQ09ORklHX1BJTkNU
UkwgaXMgbm90IHNldApDT05GSUdfR1BJT0xJQj15CkNPTkZJR19HUElPTElCX0ZBU1RQQVRIX0xJ
TUlUPTUxMgpDT05GSUdfT0ZfR1BJTz15CkNPTkZJR19HUElPX0FDUEk9eQpDT05GSUdfR1BJT0xJ
Ql9JUlFDSElQPXkKIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0CiMgQ09ORklHX0dQSU9f
U1lTRlMgaXMgbm90IHNldAojIENPTkZJR19HUElPX0NERVYgaXMgbm90IHNldAoKIwojIE1lbW9y
eSBtYXBwZWQgR1BJTyBkcml2ZXJzCiMKIyBDT05GSUdfR1BJT183NFhYX01NSU8gaXMgbm90IHNl
dAojIENPTkZJR19HUElPX0FMVEVSQSBpcyBub3Qgc2V0CiMgQ09ORklHX0dQSU9fQU1EUFQgaXMg
bm90IHNldAojIENPTkZJR19HUElPX0NBREVOQ0UgaXMgbm90IHNldAojIENPTkZJR19HUElPX0RX
QVBCIGlzIG5vdCBzZXQKIyBDT05GSUdfR1BJT19FWEFSIGlzIG5vdCBzZXQKIyBDT05GSUdfR1BJ
T19GVEdQSU8wMTAgaXMgbm90IHNldAojIENPTkZJR19HUElPX0dFTkVSSUNfUExBVEZPUk0gaXMg
bm90IHNldAojIENPTkZJR19HUElPX0dSR1BJTyBpcyBub3Qgc2V0CiMgQ09ORklHX0dQSU9fSExX
RCBpcyBub3Qgc2V0CiMgQ09ORklHX0dQSU9fTE9HSUNWQyBpcyBub3Qgc2V0CiMgQ09ORklHX0dQ
SU9fTUI4NlM3WCBpcyBub3Qgc2V0CiMgQ09ORklHX0dQSU9fU0lGSVZFIGlzIG5vdCBzZXQKIyBD
T05GSUdfR1BJT19TWVNDT04gaXMgbm90IHNldAojIENPTkZJR19HUElPX1hJTElOWCBpcyBub3Qg
c2V0CiMgQ09ORklHX0dQSU9fQU1EX0ZDSCBpcyBub3Qgc2V0CiMgZW5kIG9mIE1lbW9yeSBtYXBw
ZWQgR1BJTyBkcml2ZXJzCgojCiMgUG9ydC1tYXBwZWQgSS9PIEdQSU8gZHJpdmVycwojCiMgQ09O
RklHX0dQSU9fVlg4NTUgaXMgbm90IHNldAojIENPTkZJR19HUElPX0Y3MTg4WCBpcyBub3Qgc2V0
CiMgQ09ORklHX0dQSU9fSVQ4NyBpcyBub3Qgc2V0CiMgQ09ORklHX0dQSU9fU0NIMzExWCBpcyBu
b3Qgc2V0CiMgQ09ORklHX0dQSU9fV0lOQk9ORCBpcyBub3Qgc2V0CiMgQ09ORklHX0dQSU9fV1Mx
NkM0OCBpcyBub3Qgc2V0CiMgZW5kIG9mIFBvcnQtbWFwcGVkIEkvTyBHUElPIGRyaXZlcnMKCiMK
IyBJMkMgR1BJTyBleHBhbmRlcnMKIwojIENPTkZJR19HUElPX0FETlAgaXMgbm90IHNldAojIENP
TkZJR19HUElPX0ZYTDY0MDggaXMgbm90IHNldAojIENPTkZJR19HUElPX0RTNDUyMCBpcyBub3Qg
c2V0CiMgQ09ORklHX0dQSU9fR1dfUExEIGlzIG5vdCBzZXQKIyBDT05GSUdfR1BJT19NQVg3MzAw
IGlzIG5vdCBzZXQKIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKIyBDT05GSUdfR1BJ
T19QQ0E5NTNYIGlzIG5vdCBzZXQKIyBDT05GSUdfR1BJT19QQ0E5NTcwIGlzIG5vdCBzZXQKIyBD
T05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKIyBDT05GSUdfR1BJT19UUElDMjgxMCBpcyBu
b3Qgc2V0CiMgZW5kIG9mIEkyQyBHUElPIGV4cGFuZGVycwoKIwojIE1GRCBHUElPIGV4cGFuZGVy
cwojCkNPTkZJR19HUElPX0RMTjI9eQojIENPTkZJR19HUElPX0VMS0hBUlRMQUtFIGlzIG5vdCBz
ZXQKIyBDT05GSUdfR1BJT19UV0w0MDMwIGlzIG5vdCBzZXQKIyBlbmQgb2YgTUZEIEdQSU8gZXhw
YW5kZXJzCgojCiMgUENJIEdQSU8gZXhwYW5kZXJzCiMKIyBDT05GSUdfR1BJT19BTUQ4MTExIGlz
IG5vdCBzZXQKIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0CiMgQ09ORklHX0dQSU9fTUxf
SU9IIGlzIG5vdCBzZXQKIyBDT05GSUdfR1BJT19QQ0lfSURJT18xNiBpcyBub3Qgc2V0CiMgQ09O
RklHX0dQSU9fUENJRV9JRElPXzI0IGlzIG5vdCBzZXQKIyBDT05GSUdfR1BJT19SREMzMjFYIGlz
IG5vdCBzZXQKIyBDT05GSUdfR1BJT19TT0RBVklMTEUgaXMgbm90IHNldAojIGVuZCBvZiBQQ0kg
R1BJTyBleHBhbmRlcnMKCiMKIyBTUEkgR1BJTyBleHBhbmRlcnMKIwojIENPTkZJR19HUElPXzc0
WDE2NCBpcyBub3Qgc2V0CiMgQ09ORklHX0dQSU9fTUFYMzE5MVggaXMgbm90IHNldAojIENPTkZJ
R19HUElPX01BWDczMDEgaXMgbm90IHNldAojIENPTkZJR19HUElPX01DMzM4ODAgaXMgbm90IHNl
dAojIENPTkZJR19HUElPX1BJU09TUiBpcyBub3Qgc2V0CiMgQ09ORklHX0dQSU9fWFJBMTQwMyBp
cyBub3Qgc2V0CiMgZW5kIG9mIFNQSSBHUElPIGV4cGFuZGVycwoKIwojIFVTQiBHUElPIGV4cGFu
ZGVycwojCkNPTkZJR19HUElPX1ZJUEVSQk9BUkQ9eQojIGVuZCBvZiBVU0IgR1BJTyBleHBhbmRl
cnMKCiMKIyBWaXJ0dWFsIEdQSU8gZHJpdmVycwojCiMgQ09ORklHX0dQSU9fQUdHUkVHQVRPUiBp
cyBub3Qgc2V0CiMgQ09ORklHX0dQSU9fTEFUQ0ggaXMgbm90IHNldAojIENPTkZJR19HUElPX01P
Q0tVUCBpcyBub3Qgc2V0CiMgQ09ORklHX0dQSU9fVklSVElPIGlzIG5vdCBzZXQKIyBDT05GSUdf
R1BJT19TSU0gaXMgbm90IHNldAojIGVuZCBvZiBWaXJ0dWFsIEdQSU8gZHJpdmVycwoKQ09ORklH
X1cxPXkKIyBDT05GSUdfVzFfQ09OIGlzIG5vdCBzZXQKCiMKIyAxLXdpcmUgQnVzIE1hc3RlcnMK
IwojIENPTkZJR19XMV9NQVNURVJfQU1EX0FYSSBpcyBub3Qgc2V0CiMgQ09ORklHX1cxX01BU1RF
Ul9NQVRST1ggaXMgbm90IHNldApDT05GSUdfVzFfTUFTVEVSX0RTMjQ5MD15CiMgQ09ORklHX1cx
X01BU1RFUl9EUzI0ODIgaXMgbm90IHNldAojIENPTkZJR19XMV9NQVNURVJfR1BJTyBpcyBub3Qg
c2V0CiMgQ09ORklHX1cxX01BU1RFUl9TR0kgaXMgbm90IHNldAojIGVuZCBvZiAxLXdpcmUgQnVz
IE1hc3RlcnMKCiMKIyAxLXdpcmUgU2xhdmVzCiMKIyBDT05GSUdfVzFfU0xBVkVfVEhFUk0gaXMg
bm90IHNldAojIENPTkZJR19XMV9TTEFWRV9TTUVNIGlzIG5vdCBzZXQKIyBDT05GSUdfVzFfU0xB
VkVfRFMyNDA1IGlzIG5vdCBzZXQKIyBDT05GSUdfVzFfU0xBVkVfRFMyNDA4IGlzIG5vdCBzZXQK
IyBDT05GSUdfVzFfU0xBVkVfRFMyNDEzIGlzIG5vdCBzZXQKIyBDT05GSUdfVzFfU0xBVkVfRFMy
NDA2IGlzIG5vdCBzZXQKIyBDT05GSUdfVzFfU0xBVkVfRFMyNDIzIGlzIG5vdCBzZXQKIyBDT05G
SUdfVzFfU0xBVkVfRFMyODA1IGlzIG5vdCBzZXQKIyBDT05GSUdfVzFfU0xBVkVfRFMyNDMwIGlz
IG5vdCBzZXQKIyBDT05GSUdfVzFfU0xBVkVfRFMyNDMxIGlzIG5vdCBzZXQKIyBDT05GSUdfVzFf
U0xBVkVfRFMyNDMzIGlzIG5vdCBzZXQKIyBDT05GSUdfVzFfU0xBVkVfRFMyNDM4IGlzIG5vdCBz
ZXQKIyBDT05GSUdfVzFfU0xBVkVfRFMyNTBYIGlzIG5vdCBzZXQKIyBDT05GSUdfVzFfU0xBVkVf
RFMyNzgwIGlzIG5vdCBzZXQKIyBDT05GSUdfVzFfU0xBVkVfRFMyNzgxIGlzIG5vdCBzZXQKIyBD
T05GSUdfVzFfU0xBVkVfRFMyOEUwNCBpcyBub3Qgc2V0CiMgQ09ORklHX1cxX1NMQVZFX0RTMjhF
MTcgaXMgbm90IHNldAojIGVuZCBvZiAxLXdpcmUgU2xhdmVzCgojIENPTkZJR19QT1dFUl9SRVNF
VCBpcyBub3Qgc2V0CkNPTkZJR19QT1dFUl9TVVBQTFk9eQojIENPTkZJR19QT1dFUl9TVVBQTFlf
REVCVUcgaXMgbm90IHNldApDT05GSUdfUE9XRVJfU1VQUExZX0hXTU9OPXkKIyBDT05GSUdfR0VO
RVJJQ19BRENfQkFUVEVSWSBpcyBub3Qgc2V0CiMgQ09ORklHX0lQNVhYWF9QT1dFUiBpcyBub3Qg
c2V0CiMgQ09ORklHX1RFU1RfUE9XRVIgaXMgbm90IHNldAojIENPTkZJR19DSEFSR0VSX0FEUDUw
NjEgaXMgbm90IHNldAojIENPTkZJR19CQVRURVJZX0NXMjAxNSBpcyBub3Qgc2V0CiMgQ09ORklH
X0JBVFRFUllfRFMyNzYwIGlzIG5vdCBzZXQKIyBDT05GSUdfQkFUVEVSWV9EUzI3ODAgaXMgbm90
IHNldAojIENPTkZJR19CQVRURVJZX0RTMjc4MSBpcyBub3Qgc2V0CiMgQ09ORklHX0JBVFRFUllf
RFMyNzgyIGlzIG5vdCBzZXQKIyBDT05GSUdfQkFUVEVSWV9TQU1TVU5HX1NESSBpcyBub3Qgc2V0
CiMgQ09ORklHX0JBVFRFUllfU0JTIGlzIG5vdCBzZXQKIyBDT05GSUdfQ0hBUkdFUl9TQlMgaXMg
bm90IHNldAojIENPTkZJR19NQU5BR0VSX1NCUyBpcyBub3Qgc2V0CiMgQ09ORklHX0JBVFRFUllf
QlEyN1hYWCBpcyBub3Qgc2V0CiMgQ09ORklHX0JBVFRFUllfTUFYMTcwNDAgaXMgbm90IHNldAoj
IENPTkZJR19CQVRURVJZX01BWDE3MDQyIGlzIG5vdCBzZXQKIyBDT05GSUdfQkFUVEVSWV9NQVgx
NzIxWCBpcyBub3Qgc2V0CkNPTkZJR19DSEFSR0VSX0lTUDE3MDQ9eQojIENPTkZJR19DSEFSR0VS
X01BWDg5MDMgaXMgbm90IHNldAojIENPTkZJR19DSEFSR0VSX1RXTDQwMzAgaXMgbm90IHNldAoj
IENPTkZJR19DSEFSR0VSX0xQODcyNyBpcyBub3Qgc2V0CiMgQ09ORklHX0NIQVJHRVJfR1BJTyBp
cyBub3Qgc2V0CiMgQ09ORklHX0NIQVJHRVJfTUFOQUdFUiBpcyBub3Qgc2V0CiMgQ09ORklHX0NI
QVJHRVJfTFQzNjUxIGlzIG5vdCBzZXQKIyBDT05GSUdfQ0hBUkdFUl9MVEM0MTYyTCBpcyBub3Qg
c2V0CiMgQ09ORklHX0NIQVJHRVJfREVURUNUT1JfTUFYMTQ2NTYgaXMgbm90IHNldAojIENPTkZJ
R19DSEFSR0VSX01BWDc3OTc2IGlzIG5vdCBzZXQKIyBDT05GSUdfQ0hBUkdFUl9CUTI0MTVYIGlz
IG5vdCBzZXQKQ09ORklHX0NIQVJHRVJfQlEyNDE5MD15CiMgQ09ORklHX0NIQVJHRVJfQlEyNDI1
NyBpcyBub3Qgc2V0CiMgQ09ORklHX0NIQVJHRVJfQlEyNDczNSBpcyBub3Qgc2V0CiMgQ09ORklH
X0NIQVJHRVJfQlEyNTE1WCBpcyBub3Qgc2V0CiMgQ09ORklHX0NIQVJHRVJfQlEyNTg5MCBpcyBu
b3Qgc2V0CiMgQ09ORklHX0NIQVJHRVJfQlEyNTk4MCBpcyBub3Qgc2V0CiMgQ09ORklHX0NIQVJH
RVJfQlEyNTZYWCBpcyBub3Qgc2V0CiMgQ09ORklHX0NIQVJHRVJfU01CMzQ3IGlzIG5vdCBzZXQK
IyBDT05GSUdfQkFUVEVSWV9HQVVHRV9MVEMyOTQxIGlzIG5vdCBzZXQKIyBDT05GSUdfQkFUVEVS
WV9HT0xERklTSCBpcyBub3Qgc2V0CiMgQ09ORklHX0JBVFRFUllfUlQ1MDMzIGlzIG5vdCBzZXQK
IyBDT05GSUdfQ0hBUkdFUl9SVDk0NTUgaXMgbm90IHNldAojIENPTkZJR19DSEFSR0VSX1JUOTQ2
NyBpcyBub3Qgc2V0CiMgQ09ORklHX0NIQVJHRVJfUlQ5NDcxIGlzIG5vdCBzZXQKIyBDT05GSUdf
Q0hBUkdFUl9VQ1MxMDAyIGlzIG5vdCBzZXQKIyBDT05GSUdfQ0hBUkdFUl9CRDk5OTU0IGlzIG5v
dCBzZXQKIyBDT05GSUdfQkFUVEVSWV9VRzMxMDUgaXMgbm90IHNldAojIENPTkZJR19GVUVMX0dB
VUdFX01NODAxMyBpcyBub3Qgc2V0CkNPTkZJR19IV01PTj15CiMgQ09ORklHX0hXTU9OX0RFQlVH
X0NISVAgaXMgbm90IHNldAoKIwojIE5hdGl2ZSBkcml2ZXJzCiMKIyBDT05GSUdfU0VOU09SU19B
QklUVUdVUlUgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0FCSVRVR1VSVTMgaXMgbm90IHNl
dAojIENPTkZJR19TRU5TT1JTX0FENzMxNCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfQUQ3
NDE0IGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAojIENPTkZJ
R19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMg
bm90IHNldAojIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAojIENPTkZJR19TRU5T
T1JTX0FETTEwMjkgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNl
dAojIENPTkZJR19TRU5TT1JTX0FETTExNzcgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0FE
TTkyNDAgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0FEVDczMTAgaXMgbm90IHNldAojIENP
TkZJR19TRU5TT1JTX0FEVDc0MTAgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0FEVDc0MTEg
aXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0FEVDc0NjIgaXMgbm90IHNldAojIENPTkZJR19T
RU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0FEVDc0NzUgaXMgbm90
IHNldAojIENPTkZJR19TRU5TT1JTX0FIVDEwIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19B
UVVBQ09NUFVURVJfRDVORVhUIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19BUzM3MCBpcyBu
b3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfQVNDNzYyMSBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNP
UlNfQVhJX0ZBTl9DT05UUk9MIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19LOFRFTVAgaXMg
bm90IHNldAojIENPTkZJR19TRU5TT1JTX0sxMFRFTVAgaXMgbm90IHNldAojIENPTkZJR19TRU5T
T1JTX0ZBTTE1SF9QT1dFUiBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfQVBQTEVTTUMgaXMg
bm90IHNldAojIENPTkZJR19TRU5TT1JTX0FTQjEwMCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNP
UlNfQVRYUDEgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0NPUlNBSVJfQ1BSTyBpcyBub3Qg
c2V0CiMgQ09ORklHX1NFTlNPUlNfQ09SU0FJUl9QU1UgaXMgbm90IHNldAojIENPTkZJR19TRU5T
T1JTX0RSSVZFVEVNUCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfRFM2MjAgaXMgbm90IHNl
dAojIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfREVM
TF9TTU0gaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAojIENP
TkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZH
IGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKIyBDT05GSUdf
U0VOU09SU19GU0NITUQgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0ZUU1RFVVRBVEVTIGlz
IG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19HSUdBQllURV9XQVRFUkZPUkNFIGlzIG5vdCBzZXQK
IyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19HTDUy
MFNNIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19HNzYwQSBpcyBub3Qgc2V0CiMgQ09ORklH
X1NFTlNPUlNfRzc2MiBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfR1BJT19GQU4gaXMgbm90
IHNldAojIENPTkZJR19TRU5TT1JTX0hJSDYxMzAgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JT
X0hTMzAwMSBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfSUlPX0hXTU9OIGlzIG5vdCBzZXQK
IyBDT05GSUdfU0VOU09SU19JNTUwMCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfQ09SRVRF
TVAgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAojIENPTkZJR19T
RU5TT1JTX0pDNDIgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX1BPV0VSWiBpcyBub3Qgc2V0
CiMgQ09ORklHX1NFTlNPUlNfUE9XUjEyMjAgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0xJ
TkVBR0UgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0xUQzI5NDUgaXMgbm90IHNldAojIENP
TkZJR19TRU5TT1JTX0xUQzI5NDdfSTJDIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19MVEMy
OTQ3X1NQSSBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfTFRDMjk5MCBpcyBub3Qgc2V0CiMg
Q09ORklHX1NFTlNPUlNfTFRDMjk5MSBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfTFRDMjk5
MiBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfTFRDNDE1MSBpcyBub3Qgc2V0CiMgQ09ORklH
X1NFTlNPUlNfTFRDNDIxNSBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfTFRDNDIyMiBpcyBu
b3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfTFRDNDI0NSBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNP
UlNfTFRDNDI2MCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfTFRDNDI2MSBpcyBub3Qgc2V0
CiMgQ09ORklHX1NFTlNPUlNfTUFYMTExMSBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfTUFY
MTI3IGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19NQVgxNjA2NSBpcyBub3Qgc2V0CiMgQ09O
RklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfTUFYMTY2OCBp
cyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfTUFYMTk3IGlzIG5vdCBzZXQKIyBDT05GSUdfU0VO
U09SU19NQVgzMTcyMiBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfTUFYMzE3MzAgaXMgbm90
IHNldAojIENPTkZJR19TRU5TT1JTX01BWDMxNzYwIGlzIG5vdCBzZXQKIyBDT05GSUdfTUFYMzE4
MjcgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX01BWDY2MjAgaXMgbm90IHNldAojIENPTkZJ
R19TRU5TT1JTX01BWDY2MjEgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX01BWDY2MzkgaXMg
bm90IHNldAojIENPTkZJR19TRU5TT1JTX01BWDY2NDIgaXMgbm90IHNldAojIENPTkZJR19TRU5T
T1JTX01BWDY2NTAgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX01BWDY2OTcgaXMgbm90IHNl
dAojIENPTkZJR19TRU5TT1JTX01BWDMxNzkwIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19N
QzM0VlI1MDAgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX01DUDMwMjEgaXMgbm90IHNldAoj
IENPTkZJR19TRU5TT1JTX1RDNjU0IGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19UUFMyMzg2
MSBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfTVI3NTIwMyBpcyBub3Qgc2V0CiMgQ09ORklH
X1NFTlNPUlNfQURDWFggaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNl
dAojIENPTkZJR19TRU5TT1JTX0xNNzAgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0xNNzMg
aXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAojIENPTkZJR19TRU5T
T1JTX0xNNzcgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAojIENP
TkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90
IHNldAojIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0xN
ODcgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAojIENPTkZJR19T
RU5TT1JTX0xNOTIgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAoj
IENPTkZJR19TRU5TT1JTX0xNOTUyMzQgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0xNOTUy
NDEgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0xNOTUyNDUgaXMgbm90IHNldAojIENPTkZJ
R19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMg
bm90IHNldAojIENPTkZJR19TRU5TT1JTX05UQ19USEVSTUlTVE9SIGlzIG5vdCBzZXQKIyBDT05G
SUdfU0VOU09SU19OQ1Q2NjgzIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19OQ1Q2Nzc1IGlz
IG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19OQ1Q2Nzc1X0kyQyBpcyBub3Qgc2V0CiMgQ09ORklH
X1NFTlNPUlNfTkNUNzgwMiBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfTkNUNzkwNCBpcyBu
b3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfTlBDTTdYWCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNP
UlNfTlpYVF9LUkFLRU4yIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19OWlhUX1NNQVJUMiBp
cyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfT0NDX1A4X0kyQyBpcyBub3Qgc2V0CiMgQ09ORklH
X1NFTlNPUlNfT1hQIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBz
ZXQKIyBDT05GSUdfUE1CVVMgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX1NCVFNJIGlzIG5v
dCBzZXQKIyBDT05GSUdfU0VOU09SU19TQlJNSSBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNf
U0hUMTUgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX1NIVDIxIGlzIG5vdCBzZXQKIyBDT05G
SUdfU0VOU09SU19TSFQzeCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfU0hUNHggaXMgbm90
IHNldAojIENPTkZJR19TRU5TT1JTX1NIVEMxIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19T
SVM1NTk1IGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKIyBD
T05GSUdfU0VOU09SU19FTUMxNDAzIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19FTUMyMTAz
IGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19FTUMyMzA1IGlzIG5vdCBzZXQKIyBDT05GSUdf
U0VOU09SU19FTUM2VzIwMSBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMg
bm90IHNldAojIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAojIENPTkZJR19T
RU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX1NDSDU2MjcgaXMg
bm90IHNldAojIENPTkZJR19TRU5TT1JTX1NDSDU2MzYgaXMgbm90IHNldAojIENPTkZJR19TRU5T
T1JTX1NUVFM3NTEgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0FEQzEyOEQ4MTggaXMgbm90
IHNldAojIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JT
X0FEUzc4NzEgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0FNQzY4MjEgaXMgbm90IHNldAoj
IENPTkZJR19TRU5TT1JTX0lOQTIwOSBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfSU5BMlhY
IGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19JTkEyMzggaXMgbm90IHNldAojIENPTkZJR19T
RU5TT1JTX0lOQTMyMjEgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX1RDNzQgaXMgbm90IHNl
dAojIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfVE1Q
MTAyIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19UTVAxMDMgaXMgbm90IHNldAojIENPTkZJ
R19TRU5TT1JTX1RNUDEwOCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5v
dCBzZXQKIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JT
X1RNUDQ2NCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfVE1QNTEzIGlzIG5vdCBzZXQKIyBD
T05GSUdfU0VOU09SU19WSUFfQ1BVVEVNUCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfVklB
Njg2QSBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKIyBDT05G
SUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX1c4Mzc3M0cgaXMg
bm90IHNldAojIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAojIENPTkZJR19TRU5T
T1JTX1c4Mzc5MUQgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNl
dAojIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfVzgz
Nzk1IGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAojIENP
TkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfVzgzNjI3
SEYgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CiMgQ09O
RklHX1NFTlNPUlNfWEdFTkUgaXMgbm90IHNldAoKIwojIEFDUEkgZHJpdmVycwojCiMgQ09ORklH
X1NFTlNPUlNfQUNQSV9QT1dFUiBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfQVRLMDExMCBp
cyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfQVNVU19XTUkgaXMgbm90IHNldAojIENPTkZJR19T
RU5TT1JTX0FTVVNfRUMgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0hQX1dNSSBpcyBub3Qg
c2V0CkNPTkZJR19USEVSTUFMPXkKIyBDT05GSUdfVEhFUk1BTF9ORVRMSU5LIGlzIG5vdCBzZXQK
IyBDT05GSUdfVEhFUk1BTF9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKIyBDT05GSUdfVEhFUk1BTF9E
RUJVR0ZTIGlzIG5vdCBzZXQKQ09ORklHX1RIRVJNQUxfRU1FUkdFTkNZX1BPV0VST0ZGX0RFTEFZ
X01TPTAKQ09ORklHX1RIRVJNQUxfSFdNT049eQojIENPTkZJR19USEVSTUFMX09GIGlzIG5vdCBz
ZXQKQ09ORklHX1RIRVJNQUxfV1JJVEFCTEVfVFJJUFM9eQpDT05GSUdfVEhFUk1BTF9ERUZBVUxU
X0dPVl9TVEVQX1dJU0U9eQojIENPTkZJR19USEVSTUFMX0RFRkFVTFRfR09WX0ZBSVJfU0hBUkUg
aXMgbm90IHNldAojIENPTkZJR19USEVSTUFMX0RFRkFVTFRfR09WX1VTRVJfU1BBQ0UgaXMgbm90
IHNldAojIENPTkZJR19USEVSTUFMX0dPVl9GQUlSX1NIQVJFIGlzIG5vdCBzZXQKQ09ORklHX1RI
RVJNQUxfR09WX1NURVBfV0lTRT15CiMgQ09ORklHX1RIRVJNQUxfR09WX0JBTkdfQkFORyBpcyBu
b3Qgc2V0CkNPTkZJR19USEVSTUFMX0dPVl9VU0VSX1NQQUNFPXkKIyBDT05GSUdfVEhFUk1BTF9F
TVVMQVRJT04gaXMgbm90IHNldAojIENPTkZJR19USEVSTUFMX01NSU8gaXMgbm90IHNldAoKIwoj
IEludGVsIHRoZXJtYWwgZHJpdmVycwojCiMgQ09ORklHX0lOVEVMX1BPV0VSQ0xBTVAgaXMgbm90
IHNldApDT05GSUdfWDg2X1RIRVJNQUxfVkVDVE9SPXkKQ09ORklHX0lOVEVMX1RDQz15CkNPTkZJ
R19YODZfUEtHX1RFTVBfVEhFUk1BTD15CiMgQ09ORklHX0lOVEVMX1NPQ19EVFNfVEhFUk1BTCBp
cyBub3Qgc2V0CgojCiMgQUNQSSBJTlQzNDBYIHRoZXJtYWwgZHJpdmVycwojCiMgQ09ORklHX0lO
VDM0MFhfVEhFUk1BTCBpcyBub3Qgc2V0CiMgZW5kIG9mIEFDUEkgSU5UMzQwWCB0aGVybWFsIGRy
aXZlcnMKCiMgQ09ORklHX0lOVEVMX1BDSF9USEVSTUFMIGlzIG5vdCBzZXQKIyBDT05GSUdfSU5U
RUxfVENDX0NPT0xJTkcgaXMgbm90IHNldAojIENPTkZJR19JTlRFTF9IRklfVEhFUk1BTCBpcyBu
b3Qgc2V0CiMgZW5kIG9mIEludGVsIHRoZXJtYWwgZHJpdmVycwoKIyBDT05GSUdfR0VORVJJQ19B
RENfVEhFUk1BTCBpcyBub3Qgc2V0CkNPTkZJR19XQVRDSERPRz15CiMgQ09ORklHX1dBVENIRE9H
X0NPUkUgaXMgbm90IHNldAojIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CkNP
TkZJR19XQVRDSERPR19IQU5ETEVfQk9PVF9FTkFCTEVEPXkKQ09ORklHX1dBVENIRE9HX09QRU5f
VElNRU9VVD0wCiMgQ09ORklHX1dBVENIRE9HX1NZU0ZTIGlzIG5vdCBzZXQKIyBDT05GSUdfV0FU
Q0hET0dfSFJUSU1FUl9QUkVUSU1FT1VUIGlzIG5vdCBzZXQKCiMKIyBXYXRjaGRvZyBQcmV0aW1l
b3V0IEdvdmVybm9ycwojCgojCiMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKIwojIENPTkZJR19T
T0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKIyBDT05GSUdfR1BJT19XQVRDSERPRyBpcyBub3Qgc2V0
CiMgQ09ORklHX1dEQVRfV0RUIGlzIG5vdCBzZXQKIyBDT05GSUdfWElMSU5YX1dBVENIRE9HIGlz
IG5vdCBzZXQKIyBDT05GSUdfWklJUkFWRV9XQVRDSERPRyBpcyBub3Qgc2V0CiMgQ09ORklHX0NB
REVOQ0VfV0FUQ0hET0cgaXMgbm90IHNldAojIENPTkZJR19EV19XQVRDSERPRyBpcyBub3Qgc2V0
CiMgQ09ORklHX1RXTDQwMzBfV0FUQ0hET0cgaXMgbm90IHNldAojIENPTkZJR19NQVg2M1hYX1dB
VENIRE9HIGlzIG5vdCBzZXQKIyBDT05GSUdfUkVUVV9XQVRDSERPRyBpcyBub3Qgc2V0CiMgQ09O
RklHX0FDUVVJUkVfV0RUIGlzIG5vdCBzZXQKIyBDT05GSUdfQURWQU5URUNIX1dEVCBpcyBub3Qg
c2V0CiMgQ09ORklHX0FEVkFOVEVDSF9FQ19XRFQgaXMgbm90IHNldAojIENPTkZJR19BTElNMTUz
NV9XRFQgaXMgbm90IHNldAojIENPTkZJR19BTElNNzEwMV9XRFQgaXMgbm90IHNldAojIENPTkZJ
R19FQkNfQzM4NF9XRFQgaXMgbm90IHNldAojIENPTkZJR19FWEFSX1dEVCBpcyBub3Qgc2V0CiMg
Q09ORklHX0Y3MTgwOEVfV0RUIGlzIG5vdCBzZXQKIyBDT05GSUdfU1A1MTAwX1RDTyBpcyBub3Qg
c2V0CiMgQ09ORklHX1NCQ19GSVRQQzJfV0FUQ0hET0cgaXMgbm90IHNldAojIENPTkZJR19FVVJP
VEVDSF9XRFQgaXMgbm90IHNldAojIENPTkZJR19JQjcwMF9XRFQgaXMgbm90IHNldAojIENPTkZJ
R19JQk1BU1IgaXMgbm90IHNldAojIENPTkZJR19XQUZFUl9XRFQgaXMgbm90IHNldAojIENPTkZJ
R19JNjMwMEVTQl9XRFQgaXMgbm90IHNldAojIENPTkZJR19JRTZYWF9XRFQgaXMgbm90IHNldAoj
IENPTkZJR19JVENPX1dEVCBpcyBub3Qgc2V0CiMgQ09ORklHX0lUODcxMkZfV0RUIGlzIG5vdCBz
ZXQKIyBDT05GSUdfSVQ4N19XRFQgaXMgbm90IHNldAojIENPTkZJR19IUF9XQVRDSERPRyBpcyBu
b3Qgc2V0CiMgQ09ORklHX1NDMTIwMF9XRFQgaXMgbm90IHNldAojIENPTkZJR19QQzg3NDEzX1dE
VCBpcyBub3Qgc2V0CiMgQ09ORklHX05WX1RDTyBpcyBub3Qgc2V0CiMgQ09ORklHXzYwWFhfV0RU
IGlzIG5vdCBzZXQKIyBDT05GSUdfQ1BVNV9XRFQgaXMgbm90IHNldAojIENPTkZJR19TTVNDX1ND
SDMxMVhfV0RUIGlzIG5vdCBzZXQKIyBDT05GSUdfU01TQzM3Qjc4N19XRFQgaXMgbm90IHNldAoj
IENPTkZJR19UUU1YODZfV0RUIGlzIG5vdCBzZXQKIyBDT05GSUdfVklBX1dEVCBpcyBub3Qgc2V0
CiMgQ09ORklHX1c4MzYyN0hGX1dEVCBpcyBub3Qgc2V0CiMgQ09ORklHX1c4Mzg3N0ZfV0RUIGlz
IG5vdCBzZXQKIyBDT05GSUdfVzgzOTc3Rl9XRFQgaXMgbm90IHNldAojIENPTkZJR19NQUNIWl9X
RFQgaXMgbm90IHNldAojIENPTkZJR19TQkNfRVBYX0MzX1dBVENIRE9HIGlzIG5vdCBzZXQKIyBD
T05GSUdfSU5URUxfTUVJX1dEVCBpcyBub3Qgc2V0CiMgQ09ORklHX05JOTAzWF9XRFQgaXMgbm90
IHNldAojIENPTkZJR19OSUM3MDE4X1dEVCBpcyBub3Qgc2V0CiMgQ09ORklHX01FTl9BMjFfV0RU
IGlzIG5vdCBzZXQKCiMKIyBQQ0ktYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKIwojIENPTkZJR19QQ0lQ
Q1dBVENIRE9HIGlzIG5vdCBzZXQKIyBDT05GSUdfV0RUUENJIGlzIG5vdCBzZXQKCiMKIyBVU0It
YmFzZWQgV2F0Y2hkb2cgQ2FyZHMKIwpDT05GSUdfVVNCUENXQVRDSERPRz15CkNPTkZJR19TU0Jf
UE9TU0lCTEU9eQpDT05GSUdfU1NCPXkKQ09ORklHX1NTQl9QQ0lIT1NUX1BPU1NJQkxFPXkKIyBD
T05GSUdfU1NCX1BDSUhPU1QgaXMgbm90IHNldApDT05GSUdfU1NCX1BDTUNJQUhPU1RfUE9TU0lC
TEU9eQojIENPTkZJR19TU0JfUENNQ0lBSE9TVCBpcyBub3Qgc2V0CkNPTkZJR19TU0JfU0RJT0hP
U1RfUE9TU0lCTEU9eQojIENPTkZJR19TU0JfU0RJT0hPU1QgaXMgbm90IHNldAojIENPTkZJR19T
U0JfRFJJVkVSX0dQSU8gaXMgbm90IHNldApDT05GSUdfQkNNQV9QT1NTSUJMRT15CkNPTkZJR19C
Q01BPXkKQ09ORklHX0JDTUFfSE9TVF9QQ0lfUE9TU0lCTEU9eQojIENPTkZJR19CQ01BX0hPU1Rf
UENJIGlzIG5vdCBzZXQKIyBDT05GSUdfQkNNQV9IT1NUX1NPQyBpcyBub3Qgc2V0CiMgQ09ORklH
X0JDTUFfRFJJVkVSX1BDSSBpcyBub3Qgc2V0CiMgQ09ORklHX0JDTUFfRFJJVkVSX0dNQUNfQ01O
IGlzIG5vdCBzZXQKIyBDT05GSUdfQkNNQV9EUklWRVJfR1BJTyBpcyBub3Qgc2V0CiMgQ09ORklH
X0JDTUFfREVCVUcgaXMgbm90IHNldAoKIwojIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMK
IwpDT05GSUdfTUZEX0NPUkU9eQojIENPTkZJR19NRkRfQUNUODk0NUEgaXMgbm90IHNldAojIENP
TkZJR19NRkRfQVMzNzExIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX1NNUFJPIGlzIG5vdCBzZXQK
IyBDT05GSUdfTUZEX0FTMzcyMiBpcyBub3Qgc2V0CiMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBu
b3Qgc2V0CiMgQ09ORklHX01GRF9BQVQyODcwX0NPUkUgaXMgbm90IHNldAojIENPTkZJR19NRkRf
QVRNRUxfRkxFWENPTSBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9BVE1FTF9ITENEQyBpcyBub3Qg
c2V0CiMgQ09ORklHX01GRF9CQ001OTBYWCBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9CRDk1NzFN
V1YgaXMgbm90IHNldAojIENPTkZJR19NRkRfQVhQMjBYX0kyQyBpcyBub3Qgc2V0CiMgQ09ORklH
X01GRF9DUzQyTDQzX0kyQyBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9NQURFUkEgaXMgbm90IHNl
dAojIENPTkZJR19NRkRfTUFYNTk3MCBpcyBub3Qgc2V0CiMgQ09ORklHX1BNSUNfREE5MDNYIGlz
IG5vdCBzZXQKIyBDT05GSUdfTUZEX0RBOTA1Ml9TUEkgaXMgbm90IHNldAojIENPTkZJR19NRkRf
REE5MDUyX0kyQyBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9EQTkwNTUgaXMgbm90IHNldAojIENP
TkZJR19NRkRfREE5MDYyIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX0RBOTA2MyBpcyBub3Qgc2V0
CiMgQ09ORklHX01GRF9EQTkxNTAgaXMgbm90IHNldApDT05GSUdfTUZEX0RMTjI9eQojIENPTkZJ
R19NRkRfR0FURVdPUktTX0dTQyBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9NQzEzWFhYX1NQSSBp
cyBub3Qgc2V0CiMgQ09ORklHX01GRF9NQzEzWFhYX0kyQyBpcyBub3Qgc2V0CiMgQ09ORklHX01G
RF9NUDI2MjkgaXMgbm90IHNldAojIENPTkZJR19NRkRfSEk2NDIxX1BNSUMgaXMgbm90IHNldAoj
IENPTkZJR19NRkRfSU5URUxfUVVBUktfSTJDX0dQSU8gaXMgbm90IHNldAojIENPTkZJR19MUENf
SUNIIGlzIG5vdCBzZXQKIyBDT05GSUdfTFBDX1NDSCBpcyBub3Qgc2V0CiMgQ09ORklHX0lOVEVM
X1NPQ19QTUlDIGlzIG5vdCBzZXQKQ09ORklHX0lOVEVMX1NPQ19QTUlDX0NIVFdDPXkKIyBDT05G
SUdfSU5URUxfU09DX1BNSUNfQ0hURENfVEkgaXMgbm90IHNldAojIENPTkZJR19NRkRfSU5URUxf
TFBTU19BQ1BJIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX0lOVEVMX0xQU1NfUENJIGlzIG5vdCBz
ZXQKIyBDT05GSUdfTUZEX0lOVEVMX1BNQ19CWFQgaXMgbm90IHNldAojIENPTkZJR19NRkRfSVFT
NjJYIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX0pBTlpfQ01PRElPIGlzIG5vdCBzZXQKIyBDT05G
SUdfTUZEX0tFTVBMRCBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF84OFBNODAwIGlzIG5vdCBzZXQK
IyBDT05GSUdfTUZEXzg4UE04MDUgaXMgbm90IHNldAojIENPTkZJR19NRkRfODhQTTg2MFggaXMg
bm90IHNldAojIENPTkZJR19NRkRfTUFYMTQ1NzcgaXMgbm90IHNldAojIENPTkZJR19NRkRfTUFY
Nzc1NDEgaXMgbm90IHNldAojIENPTkZJR19NRkRfTUFYNzc2MjAgaXMgbm90IHNldAojIENPTkZJ
R19NRkRfTUFYNzc2NTAgaXMgbm90IHNldAojIENPTkZJR19NRkRfTUFYNzc2ODYgaXMgbm90IHNl
dAojIENPTkZJR19NRkRfTUFYNzc2OTMgaXMgbm90IHNldAojIENPTkZJR19NRkRfTUFYNzc3MTQg
aXMgbm90IHNldAojIENPTkZJR19NRkRfTUFYNzc4NDMgaXMgbm90IHNldAojIENPTkZJR19NRkRf
TUFYODkwNyBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9NQVg4OTI1IGlzIG5vdCBzZXQKIyBDT05G
SUdfTUZEX01BWDg5OTcgaXMgbm90IHNldAojIENPTkZJR19NRkRfTUFYODk5OCBpcyBub3Qgc2V0
CiMgQ09ORklHX01GRF9NVDYzNjAgaXMgbm90IHNldAojIENPTkZJR19NRkRfTVQ2MzcwIGlzIG5v
dCBzZXQKIyBDT05GSUdfTUZEX01UNjM5NyBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9NRU5GMjFC
TUMgaXMgbm90IHNldAojIENPTkZJR19NRkRfT0NFTE9UIGlzIG5vdCBzZXQKIyBDT05GSUdfRVpY
X1BDQVAgaXMgbm90IHNldAojIENPTkZJR19NRkRfQ1BDQVAgaXMgbm90IHNldApDT05GSUdfTUZE
X1ZJUEVSQk9BUkQ9eQojIENPTkZJR19NRkRfTlRYRUMgaXMgbm90IHNldApDT05GSUdfTUZEX1JF
VFU9eQojIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAojIENPTkZJR19NRkRfU1k3NjM2
QSBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9SREMzMjFYIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZE
X1JUNDgzMSBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9SVDUwMzMgaXMgbm90IHNldAojIENPTkZJ
R19NRkRfUlQ1MTIwIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX1JDNVQ1ODMgaXMgbm90IHNldAoj
IENPTkZJR19NRkRfUks4WFhfSTJDIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX1JLOFhYX1NQSSBp
cyBub3Qgc2V0CiMgQ09ORklHX01GRF9STjVUNjE4IGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX1NF
Q19DT1JFIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX1NJNDc2WF9DT1JFIGlzIG5vdCBzZXQKIyBD
T05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX1NLWTgxNDUyIGlzIG5vdCBz
ZXQKIyBDT05GSUdfTUZEX1NUTVBFIGlzIG5vdCBzZXQKQ09ORklHX01GRF9TWVNDT049eQojIENP
TkZJR19NRkRfTFAzOTQzIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX0xQODc4OCBpcyBub3Qgc2V0
CiMgQ09ORklHX01GRF9USV9MTVUgaXMgbm90IHNldAojIENPTkZJR19NRkRfUEFMTUFTIGlzIG5v
dCBzZXQKIyBDT05GSUdfVFBTNjEwNVggaXMgbm90IHNldAojIENPTkZJR19UUFM2NTAxMCBpcyBu
b3Qgc2V0CiMgQ09ORklHX1RQUzY1MDdYIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX1RQUzY1MDg2
IGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX1RQUzY1MDkwIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZE
X1RQUzY1MjE3IGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX1RJX0xQODczWCBpcyBub3Qgc2V0CiMg
Q09ORklHX01GRF9USV9MUDg3NTY1IGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX1RQUzY1MjE4IGlz
IG5vdCBzZXQKIyBDT05GSUdfTUZEX1RQUzY1MjE5IGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX1RQ
UzY1ODZYIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX1RQUzY1OTEwIGlzIG5vdCBzZXQKIyBDT05G
SUdfTUZEX1RQUzY1OTEyX0kyQyBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9UUFM2NTkxMl9TUEkg
aXMgbm90IHNldAojIENPTkZJR19NRkRfVFBTNjU5NF9JMkMgaXMgbm90IHNldAojIENPTkZJR19N
RkRfVFBTNjU5NF9TUEkgaXMgbm90IHNldApDT05GSUdfVFdMNDAzMF9DT1JFPXkKIyBDT05GSUdf
TUZEX1RXTDQwMzBfQVVESU8gaXMgbm90IHNldAojIENPTkZJR19UV0w2MDQwX0NPUkUgaXMgbm90
IHNldAojIENPTkZJR19NRkRfV0wxMjczX0NPUkUgaXMgbm90IHNldAojIENPTkZJR19NRkRfTE0z
NTMzIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX1RDMzU4OVggaXMgbm90IHNldAojIENPTkZJR19N
RkRfVFFNWDg2IGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX1ZYODU1IGlzIG5vdCBzZXQKIyBDT05G
SUdfTUZEX0xPQ0hOQUdBUiBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9BUklaT05BX0kyQyBpcyBu
b3Qgc2V0CiMgQ09ORklHX01GRF9BUklaT05BX1NQSSBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9X
TTg0MDAgaXMgbm90IHNldAojIENPTkZJR19NRkRfV004MzFYX0kyQyBpcyBub3Qgc2V0CiMgQ09O
RklHX01GRF9XTTgzMVhfU1BJIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMg
bm90IHNldAojIENPTkZJR19NRkRfV004OTk0IGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX1JPSE1f
QkQ3MThYWCBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9ST0hNX0JENzE4MjggaXMgbm90IHNldAoj
IENPTkZJR19NRkRfUk9ITV9CRDk1N1hNVUYgaXMgbm90IHNldAojIENPTkZJR19NRkRfU1RQTUlD
MSBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9TVE1GWCBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9B
VEMyNjBYX0kyQyBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9RQ09NX1BNODAwOCBpcyBub3Qgc2V0
CiMgQ09ORklHX01GRF9JTlRFTF9NMTBfQk1DX1NQSSBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9S
U01VX0kyQyBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9SU01VX1NQSSBpcyBub3Qgc2V0CiMgZW5k
IG9mIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKCkNPTkZJR19SRUdVTEFUT1I9eQojIENP
TkZJR19SRUdVTEFUT1JfREVCVUcgaXMgbm90IHNldAojIENPTkZJR19SRUdVTEFUT1JfRklYRURf
Vk9MVEFHRSBpcyBub3Qgc2V0CiMgQ09ORklHX1JFR1VMQVRPUl9WSVJUVUFMX0NPTlNVTUVSIGlz
IG5vdCBzZXQKIyBDT05GSUdfUkVHVUxBVE9SX1VTRVJTUEFDRV9DT05TVU1FUiBpcyBub3Qgc2V0
CiMgQ09ORklHX1JFR1VMQVRPUl9ORVRMSU5LX0VWRU5UUyBpcyBub3Qgc2V0CiMgQ09ORklHX1JF
R1VMQVRPUl84OFBHODZYIGlzIG5vdCBzZXQKIyBDT05GSUdfUkVHVUxBVE9SX0FDVDg4NjUgaXMg
bm90IHNldAojIENPTkZJR19SRUdVTEFUT1JfQUQ1Mzk4IGlzIG5vdCBzZXQKIyBDT05GSUdfUkVH
VUxBVE9SX0FXMzc1MDMgaXMgbm90IHNldAojIENPTkZJR19SRUdVTEFUT1JfREE5MTIxIGlzIG5v
dCBzZXQKIyBDT05GSUdfUkVHVUxBVE9SX0RBOTIxMCBpcyBub3Qgc2V0CiMgQ09ORklHX1JFR1VM
QVRPUl9EQTkyMTEgaXMgbm90IHNldAojIENPTkZJR19SRUdVTEFUT1JfRkFONTM1NTUgaXMgbm90
IHNldAojIENPTkZJR19SRUdVTEFUT1JfRkFONTM4ODAgaXMgbm90IHNldAojIENPTkZJR19SRUdV
TEFUT1JfR1BJTyBpcyBub3Qgc2V0CiMgQ09ORklHX1JFR1VMQVRPUl9JU0w5MzA1IGlzIG5vdCBz
ZXQKIyBDT05GSUdfUkVHVUxBVE9SX0lTTDYyNzFBIGlzIG5vdCBzZXQKIyBDT05GSUdfUkVHVUxB
VE9SX0xQMzk3MSBpcyBub3Qgc2V0CiMgQ09ORklHX1JFR1VMQVRPUl9MUDM5NzIgaXMgbm90IHNl
dAojIENPTkZJR19SRUdVTEFUT1JfTFA4NzJYIGlzIG5vdCBzZXQKIyBDT05GSUdfUkVHVUxBVE9S
X0xQODc1NSBpcyBub3Qgc2V0CiMgQ09ORklHX1JFR1VMQVRPUl9MVEMzNTg5IGlzIG5vdCBzZXQK
IyBDT05GSUdfUkVHVUxBVE9SX0xUQzM2NzYgaXMgbm90IHNldAojIENPTkZJR19SRUdVTEFUT1Jf
TUFYMTU4NiBpcyBub3Qgc2V0CiMgQ09ORklHX1JFR1VMQVRPUl9NQVg3NzUwMyBpcyBub3Qgc2V0
CiMgQ09ORklHX1JFR1VMQVRPUl9NQVg3Nzg1NyBpcyBub3Qgc2V0CiMgQ09ORklHX1JFR1VMQVRP
Ul9NQVg4NjQ5IGlzIG5vdCBzZXQKIyBDT05GSUdfUkVHVUxBVE9SX01BWDg2NjAgaXMgbm90IHNl
dAojIENPTkZJR19SRUdVTEFUT1JfTUFYODg5MyBpcyBub3Qgc2V0CiMgQ09ORklHX1JFR1VMQVRP
Ul9NQVg4OTUyIGlzIG5vdCBzZXQKIyBDT05GSUdfUkVHVUxBVE9SX01BWDIwMDg2IGlzIG5vdCBz
ZXQKIyBDT05GSUdfUkVHVUxBVE9SX01BWDIwNDExIGlzIG5vdCBzZXQKIyBDT05GSUdfUkVHVUxB
VE9SX01BWDc3ODI2IGlzIG5vdCBzZXQKIyBDT05GSUdfUkVHVUxBVE9SX01DUDE2NTAyIGlzIG5v
dCBzZXQKIyBDT05GSUdfUkVHVUxBVE9SX01QNTQxNiBpcyBub3Qgc2V0CiMgQ09ORklHX1JFR1VM
QVRPUl9NUDg4NTkgaXMgbm90IHNldAojIENPTkZJR19SRUdVTEFUT1JfTVA4ODZYIGlzIG5vdCBz
ZXQKIyBDT05GSUdfUkVHVUxBVE9SX01QUTc5MjAgaXMgbm90IHNldAojIENPTkZJR19SRUdVTEFU
T1JfTVQ2MzExIGlzIG5vdCBzZXQKIyBDT05GSUdfUkVHVUxBVE9SX1BDQTk0NTAgaXMgbm90IHNl
dAojIENPTkZJR19SRUdVTEFUT1JfUEY4WDAwIGlzIG5vdCBzZXQKIyBDT05GSUdfUkVHVUxBVE9S
X1BGVVpFMTAwIGlzIG5vdCBzZXQKIyBDT05GSUdfUkVHVUxBVE9SX1BWODgwNjAgaXMgbm90IHNl
dAojIENPTkZJR19SRUdVTEFUT1JfUFY4ODA4MCBpcyBub3Qgc2V0CiMgQ09ORklHX1JFR1VMQVRP
Ul9QVjg4MDkwIGlzIG5vdCBzZXQKIyBDT05GSUdfUkVHVUxBVE9SX1JBQTIxNTMwMCBpcyBub3Qg
c2V0CiMgQ09ORklHX1JFR1VMQVRPUl9SQVNQQkVSUllQSV9UT1VDSFNDUkVFTl9BVFRJTlkgaXMg
bm90IHNldAojIENPTkZJR19SRUdVTEFUT1JfUlQ0ODAxIGlzIG5vdCBzZXQKIyBDT05GSUdfUkVH
VUxBVE9SX1JUNDgwMyBpcyBub3Qgc2V0CiMgQ09ORklHX1JFR1VMQVRPUl9SVDUxOTBBIGlzIG5v
dCBzZXQKIyBDT05GSUdfUkVHVUxBVE9SX1JUNTczOSBpcyBub3Qgc2V0CiMgQ09ORklHX1JFR1VM
QVRPUl9SVDU3NTkgaXMgbm90IHNldAojIENPTkZJR19SRUdVTEFUT1JfUlQ2MTYwIGlzIG5vdCBz
ZXQKIyBDT05GSUdfUkVHVUxBVE9SX1JUNjE5MCBpcyBub3Qgc2V0CiMgQ09ORklHX1JFR1VMQVRP
Ul9SVDYyNDUgaXMgbm90IHNldAojIENPTkZJR19SRUdVTEFUT1JfUlRRMjEzNCBpcyBub3Qgc2V0
CiMgQ09ORklHX1JFR1VMQVRPUl9SVE1WMjAgaXMgbm90IHNldAojIENPTkZJR19SRUdVTEFUT1Jf
UlRRNjc1MiBpcyBub3Qgc2V0CiMgQ09ORklHX1JFR1VMQVRPUl9SVFEyMjA4IGlzIG5vdCBzZXQK
IyBDT05GSUdfUkVHVUxBVE9SX1NMRzUxMDAwIGlzIG5vdCBzZXQKIyBDT05GSUdfUkVHVUxBVE9S
X1NZODEwNkEgaXMgbm90IHNldAojIENPTkZJR19SRUdVTEFUT1JfU1k4ODI0WCBpcyBub3Qgc2V0
CiMgQ09ORklHX1JFR1VMQVRPUl9TWTg4MjdOIGlzIG5vdCBzZXQKIyBDT05GSUdfUkVHVUxBVE9S
X1RQUzUxNjMyIGlzIG5vdCBzZXQKIyBDT05GSUdfUkVHVUxBVE9SX1RQUzYyMzYwIGlzIG5vdCBz
ZXQKIyBDT05GSUdfUkVHVUxBVE9SX1RQUzYyODZYIGlzIG5vdCBzZXQKIyBDT05GSUdfUkVHVUxB
VE9SX1RQUzYyODdYIGlzIG5vdCBzZXQKIyBDT05GSUdfUkVHVUxBVE9SX1RQUzY1MDIzIGlzIG5v
dCBzZXQKIyBDT05GSUdfUkVHVUxBVE9SX1RQUzY1MDdYIGlzIG5vdCBzZXQKIyBDT05GSUdfUkVH
VUxBVE9SX1RQUzY1MTMyIGlzIG5vdCBzZXQKIyBDT05GSUdfUkVHVUxBVE9SX1RQUzY1MjRYIGlz
IG5vdCBzZXQKQ09ORklHX1JFR1VMQVRPUl9UV0w0MDMwPXkKIyBDT05GSUdfUkVHVUxBVE9SX1ZD
VFJMIGlzIG5vdCBzZXQKQ09ORklHX1JDX0NPUkU9eQojIENPTkZJR19MSVJDIGlzIG5vdCBzZXQK
IyBDT05GSUdfUkNfTUFQIGlzIG5vdCBzZXQKIyBDT05GSUdfUkNfREVDT0RFUlMgaXMgbm90IHNl
dApDT05GSUdfUkNfREVWSUNFUz15CiMgQ09ORklHX0lSX0VORSBpcyBub3Qgc2V0CiMgQ09ORklH
X0lSX0ZJTlRFSyBpcyBub3Qgc2V0CiMgQ09ORklHX0lSX0dQSU9fQ0lSIGlzIG5vdCBzZXQKIyBD
T05GSUdfSVJfSElYNUhEMiBpcyBub3Qgc2V0CkNPTkZJR19JUl9JR09SUExVR1VTQj15CkNPTkZJ
R19JUl9JR1VBTkE9eQpDT05GSUdfSVJfSU1PTj15CiMgQ09ORklHX0lSX0lNT05fUkFXIGlzIG5v
dCBzZXQKIyBDT05GSUdfSVJfSVRFX0NJUiBpcyBub3Qgc2V0CkNPTkZJR19JUl9NQ0VVU0I9eQoj
IENPTkZJR19JUl9OVVZPVE9OIGlzIG5vdCBzZXQKQ09ORklHX0lSX1JFRFJBVDM9eQojIENPTkZJ
R19JUl9TRVJJQUwgaXMgbm90IHNldApDT05GSUdfSVJfU1RSRUFNWkFQPXkKIyBDT05GSUdfSVJf
VE9ZIGlzIG5vdCBzZXQKQ09ORklHX0lSX1RUVVNCSVI9eQojIENPTkZJR19JUl9XSU5CT05EX0NJ
UiBpcyBub3Qgc2V0CkNPTkZJR19SQ19BVElfUkVNT1RFPXkKIyBDT05GSUdfUkNfTE9PUEJBQ0sg
aXMgbm90IHNldAojIENPTkZJR19SQ19YQk9YX0RWRCBpcyBub3Qgc2V0CkNPTkZJR19DRUNfQ09S
RT15CgojCiMgQ0VDIHN1cHBvcnQKIwojIENPTkZJR19NRURJQV9DRUNfUkMgaXMgbm90IHNldApD
T05GSUdfTUVESUFfQ0VDX1NVUFBPUlQ9eQojIENPTkZJR19DRUNfQ0g3MzIyIGlzIG5vdCBzZXQK
IyBDT05GSUdfQ0VDX0dQSU8gaXMgbm90IHNldAojIENPTkZJR19DRUNfU0VDTyBpcyBub3Qgc2V0
CkNPTkZJR19VU0JfUFVMU0U4X0NFQz15CkNPTkZJR19VU0JfUkFJTlNIQURPV19DRUM9eQojIGVu
ZCBvZiBDRUMgc3VwcG9ydAoKQ09ORklHX01FRElBX1NVUFBPUlQ9eQojIENPTkZJR19NRURJQV9T
VVBQT1JUX0ZJTFRFUiBpcyBub3Qgc2V0CiMgQ09ORklHX01FRElBX1NVQkRSVl9BVVRPU0VMRUNU
IGlzIG5vdCBzZXQKCiMKIyBNZWRpYSBkZXZpY2UgdHlwZXMKIwpDT05GSUdfTUVESUFfQ0FNRVJB
X1NVUFBPUlQ9eQpDT05GSUdfTUVESUFfQU5BTE9HX1RWX1NVUFBPUlQ9eQpDT05GSUdfTUVESUFf
RElHSVRBTF9UVl9TVVBQT1JUPXkKQ09ORklHX01FRElBX1JBRElPX1NVUFBPUlQ9eQpDT05GSUdf
TUVESUFfU0RSX1NVUFBPUlQ9eQpDT05GSUdfTUVESUFfUExBVEZPUk1fU1VQUE9SVD15CkNPTkZJ
R19NRURJQV9URVNUX1NVUFBPUlQ9eQojIGVuZCBvZiBNZWRpYSBkZXZpY2UgdHlwZXMKCiMKIyBN
ZWRpYSBjb3JlIHN1cHBvcnQKIwpDT05GSUdfVklERU9fREVWPXkKQ09ORklHX01FRElBX0NPTlRS
T0xMRVI9eQpDT05GSUdfRFZCX0NPUkU9eQojIGVuZCBvZiBNZWRpYSBjb3JlIHN1cHBvcnQKCiMK
IyBWaWRlbzRMaW51eCBvcHRpb25zCiMKQ09ORklHX1ZJREVPX1Y0TDJfSTJDPXkKIyBDT05GSUdf
VklERU9fQURWX0RFQlVHIGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9fRklYRURfTUlOT1JfUkFO
R0VTIGlzIG5vdCBzZXQKQ09ORklHX1ZJREVPX1RVTkVSPXkKIyBlbmQgb2YgVmlkZW80TGludXgg
b3B0aW9ucwoKIwojIE1lZGlhIGNvbnRyb2xsZXIgb3B0aW9ucwojCkNPTkZJR19NRURJQV9DT05U
Uk9MTEVSX0RWQj15CiMgZW5kIG9mIE1lZGlhIGNvbnRyb2xsZXIgb3B0aW9ucwoKIwojIERpZ2l0
YWwgVFYgb3B0aW9ucwojCiMgQ09ORklHX0RWQl9NTUFQIGlzIG5vdCBzZXQKIyBDT05GSUdfRFZC
X05FVCBpcyBub3Qgc2V0CkNPTkZJR19EVkJfTUFYX0FEQVBURVJTPTE2CiMgQ09ORklHX0RWQl9E
WU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CiMgQ09ORklHX0RWQl9ERU1VWF9TRUNUSU9OX0xPU1Nf
TE9HIGlzIG5vdCBzZXQKIyBDT05GSUdfRFZCX1VMRV9ERUJVRyBpcyBub3Qgc2V0CiMgZW5kIG9m
IERpZ2l0YWwgVFYgb3B0aW9ucwoKIwojIE1lZGlhIGRyaXZlcnMKIwoKIwojIE1lZGlhIGRyaXZl
cnMKIwpDT05GSUdfTUVESUFfVVNCX1NVUFBPUlQ9eQoKIwojIFdlYmNhbSBkZXZpY2VzCiMKQ09O
RklHX1VTQl9HU1BDQT15CkNPTkZJR19VU0JfR1NQQ0FfQkVOUT15CkNPTkZJR19VU0JfR1NQQ0Ff
Q09ORVg9eQpDT05GSUdfVVNCX0dTUENBX0NQSUExPXkKQ09ORklHX1VTQl9HU1BDQV9EVENTMDMz
PXkKQ09ORklHX1VTQl9HU1BDQV9FVE9NUz15CkNPTkZJR19VU0JfR1NQQ0FfRklORVBJWD15CkNP
TkZJR19VU0JfR1NQQ0FfSkVJTElOSj15CkNPTkZJR19VU0JfR1NQQ0FfSkwyMDA1QkNEPXkKQ09O
RklHX1VTQl9HU1BDQV9LSU5FQ1Q9eQpDT05GSUdfVVNCX0dTUENBX0tPTklDQT15CkNPTkZJR19V
U0JfR1NQQ0FfTUFSUz15CkNPTkZJR19VU0JfR1NQQ0FfTVI5NzMxMEE9eQpDT05GSUdfVVNCX0dT
UENBX05XODBYPXkKQ09ORklHX1VTQl9HU1BDQV9PVjUxOT15CkNPTkZJR19VU0JfR1NQQ0FfT1Y1
MzQ9eQpDT05GSUdfVVNCX0dTUENBX09WNTM0Xzk9eQpDT05GSUdfVVNCX0dTUENBX1BBQzIwNz15
CkNPTkZJR19VU0JfR1NQQ0FfUEFDNzMwMj15CkNPTkZJR19VU0JfR1NQQ0FfUEFDNzMxMT15CkNP
TkZJR19VU0JfR1NQQ0FfU0U0MDE9eQpDT05GSUdfVVNCX0dTUENBX1NOOUMyMDI4PXkKQ09ORklH
X1VTQl9HU1BDQV9TTjlDMjBYPXkKQ09ORklHX1VTQl9HU1BDQV9TT05JWEI9eQpDT05GSUdfVVNC
X0dTUENBX1NPTklYSj15CkNPTkZJR19VU0JfR1NQQ0FfU1BDQTE1Mjg9eQpDT05GSUdfVVNCX0dT
UENBX1NQQ0E1MDA9eQpDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDE9eQpDT05GSUdfVVNCX0dTUENB
X1NQQ0E1MDU9eQpDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDY9eQpDT05GSUdfVVNCX0dTUENBX1NQ
Q0E1MDg9eQpDT05GSUdfVVNCX0dTUENBX1NQQ0E1NjE9eQpDT05GSUdfVVNCX0dTUENBX1NROTA1
PXkKQ09ORklHX1VTQl9HU1BDQV9TUTkwNUM9eQpDT05GSUdfVVNCX0dTUENBX1NROTMwWD15CkNP
TkZJR19VU0JfR1NQQ0FfU1RLMDE0PXkKQ09ORklHX1VTQl9HU1BDQV9TVEsxMTM1PXkKQ09ORklH
X1VTQl9HU1BDQV9TVFYwNjgwPXkKQ09ORklHX1VTQl9HU1BDQV9TVU5QTFVTPXkKQ09ORklHX1VT
Ql9HU1BDQV9UNjEzPXkKQ09ORklHX1VTQl9HU1BDQV9UT1BSTz15CkNPTkZJR19VU0JfR1NQQ0Ff
VE9VUFRFSz15CkNPTkZJR19VU0JfR1NQQ0FfVFY4NTMyPXkKQ09ORklHX1VTQl9HU1BDQV9WQzAz
Mlg9eQpDT05GSUdfVVNCX0dTUENBX1ZJQ0FNPXkKQ09ORklHX1VTQl9HU1BDQV9YSVJMSU5LX0NJ
VD15CkNPTkZJR19VU0JfR1NQQ0FfWkMzWFg9eQpDT05GSUdfVVNCX0dMODYwPXkKQ09ORklHX1VT
Ql9NNTYwMj15CkNPTkZJR19VU0JfU1RWMDZYWD15CkNPTkZJR19VU0JfUFdDPXkKIyBDT05GSUdf
VVNCX1BXQ19ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19VU0JfUFdDX0lOUFVUX0VWREVWPXkKQ09O
RklHX1VTQl9TMjI1NT15CkNPTkZJR19WSURFT19VU0JUVj15CkNPTkZJR19VU0JfVklERU9fQ0xB
U1M9eQpDT05GSUdfVVNCX1ZJREVPX0NMQVNTX0lOUFVUX0VWREVWPXkKCiMKIyBBbmFsb2cgVFYg
VVNCIGRldmljZXMKIwpDT05GSUdfVklERU9fR083MDA3PXkKQ09ORklHX1ZJREVPX0dPNzAwN19V
U0I9eQpDT05GSUdfVklERU9fR083MDA3X0xPQURFUj15CkNPTkZJR19WSURFT19HTzcwMDdfVVNC
X1MyMjUwX0JPQVJEPXkKQ09ORklHX1ZJREVPX0hEUFZSPXkKQ09ORklHX1ZJREVPX1BWUlVTQjI9
eQpDT05GSUdfVklERU9fUFZSVVNCMl9TWVNGUz15CkNPTkZJR19WSURFT19QVlJVU0IyX0RWQj15
CiMgQ09ORklHX1ZJREVPX1BWUlVTQjJfREVCVUdJRkMgaXMgbm90IHNldApDT05GSUdfVklERU9f
U1RLMTE2MD15CgojCiMgQW5hbG9nL2RpZ2l0YWwgVFYgVVNCIGRldmljZXMKIwpDT05GSUdfVklE
RU9fQVUwODI4PXkKQ09ORklHX1ZJREVPX0FVMDgyOF9WNEwyPXkKQ09ORklHX1ZJREVPX0FVMDgy
OF9SQz15CkNPTkZJR19WSURFT19DWDIzMVhYPXkKQ09ORklHX1ZJREVPX0NYMjMxWFhfUkM9eQpD
T05GSUdfVklERU9fQ1gyMzFYWF9BTFNBPXkKQ09ORklHX1ZJREVPX0NYMjMxWFhfRFZCPXkKCiMK
IyBEaWdpdGFsIFRWIFVTQiBkZXZpY2VzCiMKQ09ORklHX0RWQl9BUzEwMj15CkNPTkZJR19EVkJf
QjJDMl9GTEVYQ09QX1VTQj15CiMgQ09ORklHX0RWQl9CMkMyX0ZMRVhDT1BfVVNCX0RFQlVHIGlz
IG5vdCBzZXQKQ09ORklHX0RWQl9VU0JfVjI9eQpDT05GSUdfRFZCX1VTQl9BRjkwMTU9eQpDT05G
SUdfRFZCX1VTQl9BRjkwMzU9eQpDT05GSUdfRFZCX1VTQl9BTllTRUU9eQpDT05GSUdfRFZCX1VT
Ql9BVTY2MTA9eQpDT05GSUdfRFZCX1VTQl9BWjYwMDc9eQpDT05GSUdfRFZCX1VTQl9DRTYyMzA9
eQpDT05GSUdfRFZCX1VTQl9EVkJTS1k9eQpDT05GSUdfRFZCX1VTQl9FQzE2OD15CkNPTkZJR19E
VkJfVVNCX0dMODYxPXkKQ09ORklHX0RWQl9VU0JfTE1FMjUxMD15CkNPTkZJR19EVkJfVVNCX01Y
TDExMVNGPXkKQ09ORklHX0RWQl9VU0JfUlRMMjhYWFU9eQpDT05GSUdfRFZCX1VTQl9aRDEzMDE9
eQpDT05GSUdfRFZCX1VTQj15CiMgQ09ORklHX0RWQl9VU0JfREVCVUcgaXMgbm90IHNldApDT05G
SUdfRFZCX1VTQl9BODAwPXkKQ09ORklHX0RWQl9VU0JfQUY5MDA1PXkKQ09ORklHX0RWQl9VU0Jf
QUY5MDA1X1JFTU9URT15CkNPTkZJR19EVkJfVVNCX0FaNjAyNz15CkNPTkZJR19EVkJfVVNCX0NJ
TkVSR1lfVDI9eQpDT05GSUdfRFZCX1VTQl9DWFVTQj15CiMgQ09ORklHX0RWQl9VU0JfQ1hVU0Jf
QU5BTE9HIGlzIG5vdCBzZXQKQ09ORklHX0RWQl9VU0JfRElCMDcwMD15CkNPTkZJR19EVkJfVVNC
X0RJQjMwMDBNQz15CkNPTkZJR19EVkJfVVNCX0RJQlVTQl9NQj15CiMgQ09ORklHX0RWQl9VU0Jf
RElCVVNCX01CX0ZBVUxUWSBpcyBub3Qgc2V0CkNPTkZJR19EVkJfVVNCX0RJQlVTQl9NQz15CkNP
TkZJR19EVkJfVVNCX0RJR0lUVj15CkNPTkZJR19EVkJfVVNCX0RUVDIwMFU9eQpDT05GSUdfRFZC
X1VTQl9EVFY1MTAwPXkKQ09ORklHX0RWQl9VU0JfRFcyMTAyPXkKQ09ORklHX0RWQl9VU0JfR1A4
UFNLPXkKQ09ORklHX0RWQl9VU0JfTTkyMFg9eQpDT05GSUdfRFZCX1VTQl9OT1ZBX1RfVVNCMj15
CkNPTkZJR19EVkJfVVNCX09QRVJBMT15CkNPTkZJR19EVkJfVVNCX1BDVFY0NTJFPXkKQ09ORklH
X0RWQl9VU0JfVEVDSE5JU0FUX1VTQjI9eQpDT05GSUdfRFZCX1VTQl9UVFVTQjI9eQpDT05GSUdf
RFZCX1VTQl9VTVRfMDEwPXkKQ09ORklHX0RWQl9VU0JfVlA3MDJYPXkKQ09ORklHX0RWQl9VU0Jf
VlA3MDQ1PXkKQ09ORklHX1NNU19VU0JfRFJWPXkKQ09ORklHX0RWQl9UVFVTQl9CVURHRVQ9eQpD
T05GSUdfRFZCX1RUVVNCX0RFQz15CgojCiMgV2ViY2FtLCBUViAoYW5hbG9nL2RpZ2l0YWwpIFVT
QiBkZXZpY2VzCiMKQ09ORklHX1ZJREVPX0VNMjhYWD15CkNPTkZJR19WSURFT19FTTI4WFhfVjRM
Mj15CkNPTkZJR19WSURFT19FTTI4WFhfQUxTQT15CkNPTkZJR19WSURFT19FTTI4WFhfRFZCPXkK
Q09ORklHX1ZJREVPX0VNMjhYWF9SQz15CgojCiMgU29mdHdhcmUgZGVmaW5lZCByYWRpbyBVU0Ig
ZGV2aWNlcwojCkNPTkZJR19VU0JfQUlSU1BZPXkKQ09ORklHX1VTQl9IQUNLUkY9eQpDT05GSUdf
VVNCX01TSTI1MDA9eQpDT05GSUdfTUVESUFfUENJX1NVUFBPUlQ9eQoKIwojIE1lZGlhIGNhcHR1
cmUgc3VwcG9ydAojCiMgQ09ORklHX1ZJREVPX1NPTE82WDEwIGlzIG5vdCBzZXQKIyBDT05GSUdf
VklERU9fVFc1ODY0IGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9fVFc2OCBpcyBub3Qgc2V0CiMg
Q09ORklHX1ZJREVPX1RXNjg2WCBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX1pPUkFOIGlzIG5v
dCBzZXQKCiMKIyBNZWRpYSBjYXB0dXJlL2FuYWxvZyBUViBzdXBwb3J0CiMKIyBDT05GSUdfVklE
RU9fRFQzMTU1IGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9fSVZUViBpcyBub3Qgc2V0CiMgQ09O
RklHX1ZJREVPX0hFWElVTV9HRU1JTkkgaXMgbm90IHNldAojIENPTkZJR19WSURFT19IRVhJVU1f
T1JJT04gaXMgbm90IHNldAojIENPTkZJR19WSURFT19NWEIgaXMgbm90IHNldAoKIwojIE1lZGlh
IGNhcHR1cmUvYW5hbG9nL2h5YnJpZCBUViBzdXBwb3J0CiMKIyBDT05GSUdfVklERU9fQlQ4NDgg
aXMgbm90IHNldAojIENPTkZJR19WSURFT19DWDE4IGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9f
Q1gyMzg4NSBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX0NYMjU4MjEgaXMgbm90IHNldAojIENP
TkZJR19WSURFT19DWDg4IGlzIG5vdCBzZXQKQ09ORklHX1ZJREVPX1NBQTcxMzQ9eQojIENPTkZJ
R19WSURFT19TQUE3MTM0X0FMU0EgaXMgbm90IHNldAojIENPTkZJR19WSURFT19TQUE3MTM0X1JD
IGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9fU0FBNzEzNF9EVkIgaXMgbm90IHNldApDT05GSUdf
VklERU9fU0FBNzEzNF9HTzcwMDc9eQojIENPTkZJR19WSURFT19TQUE3MTY0IGlzIG5vdCBzZXQK
CiMKIyBNZWRpYSBkaWdpdGFsIFRWIFBDSSBBZGFwdGVycwojCkNPTkZJR19EVkJfQjJDMl9GTEVY
Q09QX1BDST15CiMgQ09ORklHX0RWQl9CMkMyX0ZMRVhDT1BfUENJX0RFQlVHIGlzIG5vdCBzZXQK
IyBDT05GSUdfRFZCX0REQlJJREdFIGlzIG5vdCBzZXQKIyBDT05GSUdfRFZCX0RNMTEwNSBpcyBu
b3Qgc2V0CiMgQ09ORklHX01BTlRJU19DT1JFIGlzIG5vdCBzZXQKIyBDT05GSUdfRFZCX05FVFVQ
X1VOSURWQiBpcyBub3Qgc2V0CiMgQ09ORklHX0RWQl9OR0VORSBpcyBub3Qgc2V0CiMgQ09ORklH
X0RWQl9QTFVUTzIgaXMgbm90IHNldAojIENPTkZJR19EVkJfUFQxIGlzIG5vdCBzZXQKIyBDT05G
SUdfRFZCX1BUMyBpcyBub3Qgc2V0CiMgQ09ORklHX0RWQl9TTUlQQ0lFIGlzIG5vdCBzZXQKIyBD
T05GSUdfRFZCX0JVREdFVF9DT1JFIGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9fSVBVM19DSU8y
IGlzIG5vdCBzZXQKIyBDT05GSUdfSU5URUxfVlNDIGlzIG5vdCBzZXQKIyBDT05GSUdfSVBVX0JS
SURHRSBpcyBub3Qgc2V0CkNPTkZJR19SQURJT19BREFQVEVSUz15CiMgQ09ORklHX1JBRElPX01B
WElSQURJTyBpcyBub3Qgc2V0CiMgQ09ORklHX1JBRElPX1NBQTc3MDZIIGlzIG5vdCBzZXQKQ09O
RklHX1JBRElPX1NIQVJLPXkKQ09ORklHX1JBRElPX1NIQVJLMj15CkNPTkZJR19SQURJT19TSTQ3
MTM9eQpDT05GSUdfUkFESU9fVEVBNTc1WD15CiMgQ09ORklHX1JBRElPX1RFQTU3NjQgaXMgbm90
IHNldAojIENPTkZJR19SQURJT19URUY2ODYyIGlzIG5vdCBzZXQKIyBDT05GSUdfUkFESU9fV0wx
MjczIGlzIG5vdCBzZXQKQ09ORklHX1VTQl9EU0JSPXkKQ09ORklHX1VTQl9LRUVORT15CkNPTkZJ
R19VU0JfTUE5MDE9eQpDT05GSUdfVVNCX01SODAwPXkKQ09ORklHX1VTQl9SQVJFTU9OTz15CkNP
TkZJR19SQURJT19TSTQ3MFg9eQpDT05GSUdfVVNCX1NJNDcwWD15CiMgQ09ORklHX0kyQ19TSTQ3
MFggaXMgbm90IHNldApDT05GSUdfVVNCX1NJNDcxMz15CiMgQ09ORklHX1BMQVRGT1JNX1NJNDcx
MyBpcyBub3Qgc2V0CkNPTkZJR19JMkNfU0k0NzEzPXkKIyBDT05GSUdfTUVESUFfUExBVEZPUk1f
RFJJVkVSUyBpcyBub3Qgc2V0CgojCiMgTU1DL1NESU8gRFZCIGFkYXB0ZXJzCiMKQ09ORklHX1NN
U19TRElPX0RSVj15CiMgQ09ORklHX1Y0TF9URVNUX0RSSVZFUlMgaXMgbm90IHNldAojIENPTkZJ
R19EVkJfVEVTVF9EUklWRVJTIGlzIG5vdCBzZXQKQ09ORklHX01FRElBX0NPTU1PTl9PUFRJT05T
PXkKCiMKIyBjb21tb24gZHJpdmVyIG9wdGlvbnMKIwpDT05GSUdfQ1lQUkVTU19GSVJNV0FSRT15
CkNPTkZJR19UVFBDSV9FRVBST009eQpDT05GSUdfVVZDX0NPTU1PTj15CkNPTkZJR19WSURFT19D
WDIzNDFYPXkKQ09ORklHX1ZJREVPX1RWRUVQUk9NPXkKQ09ORklHX0RWQl9CMkMyX0ZMRVhDT1A9
eQpDT05GSUdfU01TX1NJQU5PX01EVFY9eQpDT05GSUdfU01TX1NJQU5PX1JDPXkKQ09ORklHX1NN
U19TSUFOT19ERUJVR0ZTPXkKQ09ORklHX1ZJREVPQlVGMl9DT1JFPXkKQ09ORklHX1ZJREVPQlVG
Ml9WNEwyPXkKQ09ORklHX1ZJREVPQlVGMl9NRU1PUFM9eQpDT05GSUdfVklERU9CVUYyX1ZNQUxM
T0M9eQpDT05GSUdfVklERU9CVUYyX0RNQV9TRz15CiMgZW5kIG9mIE1lZGlhIGRyaXZlcnMKCiMK
IyBNZWRpYSBhbmNpbGxhcnkgZHJpdmVycwojCkNPTkZJR19NRURJQV9BVFRBQ0g9eQojIENPTkZJ
R19WSURFT19JUl9JMkMgaXMgbm90IHNldAojIENPTkZJR19WSURFT19DQU1FUkFfU0VOU09SIGlz
IG5vdCBzZXQKCiMKIyBDYW1lcmEgSVNQcwojCiMgQ09ORklHX1ZJREVPX1RIUDczMTIgaXMgbm90
IHNldAojIGVuZCBvZiBDYW1lcmEgSVNQcwoKIwojIExlbnMgZHJpdmVycwojCiMgQ09ORklHX1ZJ
REVPX0FENTgyMCBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX0FLNzM3NSBpcyBub3Qgc2V0CiMg
Q09ORklHX1ZJREVPX0RXOTcxNCBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX0RXOTcxOSBpcyBu
b3Qgc2V0CiMgQ09ORklHX1ZJREVPX0RXOTc2OCBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX0RX
OTgwN19WQ00gaXMgbm90IHNldAojIGVuZCBvZiBMZW5zIGRyaXZlcnMKCiMKIyBGbGFzaCBkZXZp
Y2VzCiMKIyBDT05GSUdfVklERU9fQURQMTY1MyBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX0xN
MzU2MCBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX0xNMzY0NiBpcyBub3Qgc2V0CiMgZW5kIG9m
IEZsYXNoIGRldmljZXMKCiMKIyBBdWRpbyBkZWNvZGVycywgcHJvY2Vzc29ycyBhbmQgbWl4ZXJz
CiMKIyBDT05GSUdfVklERU9fQ1MzMzA4IGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9fQ1M1MzQ1
IGlzIG5vdCBzZXQKQ09ORklHX1ZJREVPX0NTNTNMMzJBPXkKQ09ORklHX1ZJREVPX01TUDM0MDA9
eQojIENPTkZJR19WSURFT19TT05ZX0JURl9NUFggaXMgbm90IHNldAojIENPTkZJR19WSURFT19U
REE3NDMyIGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9fVERBOTg0MCBpcyBub3Qgc2V0CiMgQ09O
RklHX1ZJREVPX1RFQTY0MTVDIGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9fVEVBNjQyMCBpcyBu
b3Qgc2V0CiMgQ09ORklHX1ZJREVPX1RMVjMyMEFJQzIzQiBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJ
REVPX1RWQVVESU8gaXMgbm90IHNldAojIENPTkZJR19WSURFT19VREExMzQyIGlzIG5vdCBzZXQK
IyBDT05GSUdfVklERU9fVlAyN1NNUFggaXMgbm90IHNldAojIENPTkZJR19WSURFT19XTTg3Mzkg
aXMgbm90IHNldApDT05GSUdfVklERU9fV004Nzc1PXkKIyBlbmQgb2YgQXVkaW8gZGVjb2RlcnMs
IHByb2Nlc3NvcnMgYW5kIG1peGVycwoKIwojIFJEUyBkZWNvZGVycwojCiMgQ09ORklHX1ZJREVP
X1NBQTY1ODggaXMgbm90IHNldAojIGVuZCBvZiBSRFMgZGVjb2RlcnMKCiMKIyBWaWRlbyBkZWNv
ZGVycwojCiMgQ09ORklHX1ZJREVPX0FEVjcxODAgaXMgbm90IHNldAojIENPTkZJR19WSURFT19B
RFY3MTgzIGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9fQURWNzQ4WCBpcyBub3Qgc2V0CiMgQ09O
RklHX1ZJREVPX0FEVjc2MDQgaXMgbm90IHNldAojIENPTkZJR19WSURFT19BRFY3ODQyIGlzIG5v
dCBzZXQKIyBDT05GSUdfVklERU9fQlQ4MTkgaXMgbm90IHNldAojIENPTkZJR19WSURFT19CVDg1
NiBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX0JUODY2IGlzIG5vdCBzZXQKIyBDT05GSUdfVklE
RU9fSVNMNzk5OFggaXMgbm90IHNldAojIENPTkZJR19WSURFT19LUzAxMjcgaXMgbm90IHNldAoj
IENPTkZJR19WSURFT19NQVg5Mjg2IGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9fTUw4NlY3NjY3
IGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9fU0FBNzExMCBpcyBub3Qgc2V0CkNPTkZJR19WSURF
T19TQUE3MTFYPXkKIyBDT05GSUdfVklERU9fVEMzNTg3NDMgaXMgbm90IHNldAojIENPTkZJR19W
SURFT19UQzM1ODc0NiBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX1RWUDUxNFggaXMgbm90IHNl
dAojIENPTkZJR19WSURFT19UVlA1MTUwIGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9fVFZQNzAw
MiBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX1RXMjgwNCBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJ
REVPX1RXOTkwMCBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX1RXOTkwMyBpcyBub3Qgc2V0CiMg
Q09ORklHX1ZJREVPX1RXOTkwNiBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX1RXOTkxMCBpcyBu
b3Qgc2V0CiMgQ09ORklHX1ZJREVPX1ZQWDMyMjAgaXMgbm90IHNldAoKIwojIFZpZGVvIGFuZCBh
dWRpbyBkZWNvZGVycwojCiMgQ09ORklHX1ZJREVPX1NBQTcxN1ggaXMgbm90IHNldApDT05GSUdf
VklERU9fQ1gyNTg0MD15CiMgZW5kIG9mIFZpZGVvIGRlY29kZXJzCgojCiMgVmlkZW8gZW5jb2Rl
cnMKIwojIENPTkZJR19WSURFT19BRFY3MTcwIGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9fQURW
NzE3NSBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX0FEVjczNDMgaXMgbm90IHNldAojIENPTkZJ
R19WSURFT19BRFY3MzkzIGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9fQURWNzUxMSBpcyBub3Qg
c2V0CiMgQ09ORklHX1ZJREVPX0FLODgxWCBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX1NBQTcx
MjcgaXMgbm90IHNldAojIENPTkZJR19WSURFT19TQUE3MTg1IGlzIG5vdCBzZXQKIyBDT05GSUdf
VklERU9fVEhTODIwMCBpcyBub3Qgc2V0CiMgZW5kIG9mIFZpZGVvIGVuY29kZXJzCgojCiMgVmlk
ZW8gaW1wcm92ZW1lbnQgY2hpcHMKIwojIENPTkZJR19WSURFT19VUEQ2NDAzMUEgaXMgbm90IHNl
dAojIENPTkZJR19WSURFT19VUEQ2NDA4MyBpcyBub3Qgc2V0CiMgZW5kIG9mIFZpZGVvIGltcHJv
dmVtZW50IGNoaXBzCgojCiMgQXVkaW8vVmlkZW8gY29tcHJlc3Npb24gY2hpcHMKIwojIENPTkZJ
R19WSURFT19TQUE2NzUySFMgaXMgbm90IHNldAojIGVuZCBvZiBBdWRpby9WaWRlbyBjb21wcmVz
c2lvbiBjaGlwcwoKIwojIFNEUiB0dW5lciBjaGlwcwojCiMgQ09ORklHX1NEUl9NQVgyMTc1IGlz
IG5vdCBzZXQKIyBlbmQgb2YgU0RSIHR1bmVyIGNoaXBzCgojCiMgTWlzY2VsbGFuZW91cyBoZWxw
ZXIgY2hpcHMKIwojIENPTkZJR19WSURFT19JMkMgaXMgbm90IHNldAojIENPTkZJR19WSURFT19N
NTI3OTAgaXMgbm90IHNldAojIENPTkZJR19WSURFT19TVF9NSVBJRDAyIGlzIG5vdCBzZXQKIyBD
T05GSUdfVklERU9fVEhTNzMwMyBpcyBub3Qgc2V0CiMgZW5kIG9mIE1pc2NlbGxhbmVvdXMgaGVs
cGVyIGNoaXBzCgojCiMgVmlkZW8gc2VyaWFsaXplcnMgYW5kIGRlc2VyaWFsaXplcnMKIwojIENP
TkZJR19WSURFT19EUzkwVUI5MTMgaXMgbm90IHNldAojIENPTkZJR19WSURFT19EUzkwVUI5NTMg
aXMgbm90IHNldAojIENPTkZJR19WSURFT19EUzkwVUI5NjAgaXMgbm90IHNldAojIGVuZCBvZiBW
aWRlbyBzZXJpYWxpemVycyBhbmQgZGVzZXJpYWxpemVycwoKIwojIE1lZGlhIFNQSSBBZGFwdGVy
cwojCiMgQ09ORklHX0NYRDI4ODBfU1BJX0RSViBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX0dT
MTY2MiBpcyBub3Qgc2V0CiMgZW5kIG9mIE1lZGlhIFNQSSBBZGFwdGVycwoKQ09ORklHX01FRElB
X1RVTkVSPXkKCiMKIyBDdXN0b21pemUgVFYgdHVuZXJzCiMKIyBDT05GSUdfTUVESUFfVFVORVJf
RTQwMDAgaXMgbm90IHNldAojIENPTkZJR19NRURJQV9UVU5FUl9GQzAwMTEgaXMgbm90IHNldAoj
IENPTkZJR19NRURJQV9UVU5FUl9GQzAwMTIgaXMgbm90IHNldAojIENPTkZJR19NRURJQV9UVU5F
Ul9GQzAwMTMgaXMgbm90IHNldAojIENPTkZJR19NRURJQV9UVU5FUl9GQzI1ODAgaXMgbm90IHNl
dAojIENPTkZJR19NRURJQV9UVU5FUl9JVDkxM1ggaXMgbm90IHNldAojIENPTkZJR19NRURJQV9U
VU5FUl9NODhSUzYwMDBUIGlzIG5vdCBzZXQKIyBDT05GSUdfTUVESUFfVFVORVJfTUFYMjE2NSBp
cyBub3Qgc2V0CiMgQ09ORklHX01FRElBX1RVTkVSX01DNDRTODAzIGlzIG5vdCBzZXQKQ09ORklH
X01FRElBX1RVTkVSX01TSTAwMT15CiMgQ09ORklHX01FRElBX1RVTkVSX01UMjA2MCBpcyBub3Qg
c2V0CiMgQ09ORklHX01FRElBX1RVTkVSX01UMjA2MyBpcyBub3Qgc2V0CiMgQ09ORklHX01FRElB
X1RVTkVSX01UMjBYWCBpcyBub3Qgc2V0CiMgQ09ORklHX01FRElBX1RVTkVSX01UMjEzMSBpcyBu
b3Qgc2V0CiMgQ09ORklHX01FRElBX1RVTkVSX01UMjI2NiBpcyBub3Qgc2V0CiMgQ09ORklHX01F
RElBX1RVTkVSX01YTDMwMVJGIGlzIG5vdCBzZXQKIyBDT05GSUdfTUVESUFfVFVORVJfTVhMNTAw
NVMgaXMgbm90IHNldAojIENPTkZJR19NRURJQV9UVU5FUl9NWEw1MDA3VCBpcyBub3Qgc2V0CiMg
Q09ORklHX01FRElBX1RVTkVSX1FNMUQxQjAwMDQgaXMgbm90IHNldAojIENPTkZJR19NRURJQV9U
VU5FUl9RTTFEMUMwMDQyIGlzIG5vdCBzZXQKIyBDT05GSUdfTUVESUFfVFVORVJfUVQxMDEwIGlz
IG5vdCBzZXQKIyBDT05GSUdfTUVESUFfVFVORVJfUjgyMFQgaXMgbm90IHNldAojIENPTkZJR19N
RURJQV9UVU5FUl9TSTIxNTcgaXMgbm90IHNldAojIENPTkZJR19NRURJQV9UVU5FUl9TSU1QTEUg
aXMgbm90IHNldAojIENPTkZJR19NRURJQV9UVU5FUl9UREExODIxMiBpcyBub3Qgc2V0CiMgQ09O
RklHX01FRElBX1RVTkVSX1REQTE4MjE4IGlzIG5vdCBzZXQKIyBDT05GSUdfTUVESUFfVFVORVJf
VERBMTgyNTAgaXMgbm90IHNldAojIENPTkZJR19NRURJQV9UVU5FUl9UREExODI3MSBpcyBub3Qg
c2V0CiMgQ09ORklHX01FRElBX1RVTkVSX1REQTgyN1ggaXMgbm90IHNldAojIENPTkZJR19NRURJ
QV9UVU5FUl9UREE4MjkwIGlzIG5vdCBzZXQKIyBDT05GSUdfTUVESUFfVFVORVJfVERBOTg4NyBp
cyBub3Qgc2V0CiMgQ09ORklHX01FRElBX1RVTkVSX1RFQTU3NjEgaXMgbm90IHNldAojIENPTkZJ
R19NRURJQV9UVU5FUl9URUE1NzY3IGlzIG5vdCBzZXQKIyBDT05GSUdfTUVESUFfVFVORVJfVFVB
OTAwMSBpcyBub3Qgc2V0CiMgQ09ORklHX01FRElBX1RVTkVSX1hDMjAyOCBpcyBub3Qgc2V0CiMg
Q09ORklHX01FRElBX1RVTkVSX1hDNDAwMCBpcyBub3Qgc2V0CiMgQ09ORklHX01FRElBX1RVTkVS
X1hDNTAwMCBpcyBub3Qgc2V0CiMgZW5kIG9mIEN1c3RvbWl6ZSBUViB0dW5lcnMKCiMKIyBDdXN0
b21pc2UgRFZCIEZyb250ZW5kcwojCgojCiMgTXVsdGlzdGFuZGFyZCAoc2F0ZWxsaXRlKSBmcm9u
dGVuZHMKIwojIENPTkZJR19EVkJfTTg4RFMzMTAzIGlzIG5vdCBzZXQKIyBDT05GSUdfRFZCX01Y
TDVYWCBpcyBub3Qgc2V0CiMgQ09ORklHX0RWQl9TVEIwODk5IGlzIG5vdCBzZXQKIyBDT05GSUdf
RFZCX1NUQjYxMDAgaXMgbm90IHNldAojIENPTkZJR19EVkJfU1RWMDkweCBpcyBub3Qgc2V0CiMg
Q09ORklHX0RWQl9TVFYwOTEwIGlzIG5vdCBzZXQKIyBDT05GSUdfRFZCX1NUVjYxMTB4IGlzIG5v
dCBzZXQKIyBDT05GSUdfRFZCX1NUVjYxMTEgaXMgbm90IHNldAoKIwojIE11bHRpc3RhbmRhcmQg
KGNhYmxlICsgdGVycmVzdHJpYWwpIGZyb250ZW5kcwojCiMgQ09ORklHX0RWQl9EUlhLIGlzIG5v
dCBzZXQKIyBDT05GSUdfRFZCX01OODg0NzIgaXMgbm90IHNldAojIENPTkZJR19EVkJfTU44ODQ3
MyBpcyBub3Qgc2V0CiMgQ09ORklHX0RWQl9TSTIxNjUgaXMgbm90IHNldAojIENPTkZJR19EVkJf
VERBMTgyNzFDMkREIGlzIG5vdCBzZXQKCiMKIyBEVkItUyAoc2F0ZWxsaXRlKSBmcm9udGVuZHMK
IwojIENPTkZJR19EVkJfQ1gyNDExMCBpcyBub3Qgc2V0CiMgQ09ORklHX0RWQl9DWDI0MTE2IGlz
IG5vdCBzZXQKIyBDT05GSUdfRFZCX0NYMjQxMTcgaXMgbm90IHNldAojIENPTkZJR19EVkJfQ1gy
NDEyMCBpcyBub3Qgc2V0CiMgQ09ORklHX0RWQl9DWDI0MTIzIGlzIG5vdCBzZXQKIyBDT05GSUdf
RFZCX0RTMzAwMCBpcyBub3Qgc2V0CiMgQ09ORklHX0RWQl9NQjg2QTE2IGlzIG5vdCBzZXQKIyBD
T05GSUdfRFZCX01UMzEyIGlzIG5vdCBzZXQKIyBDT05GSUdfRFZCX1M1SDE0MjAgaXMgbm90IHNl
dAojIENPTkZJR19EVkJfU0kyMVhYIGlzIG5vdCBzZXQKIyBDT05GSUdfRFZCX1NUQjYwMDAgaXMg
bm90IHNldAojIENPTkZJR19EVkJfU1RWMDI4OCBpcyBub3Qgc2V0CiMgQ09ORklHX0RWQl9TVFYw
Mjk5IGlzIG5vdCBzZXQKIyBDT05GSUdfRFZCX1NUVjA5MDAgaXMgbm90IHNldAojIENPTkZJR19E
VkJfU1RWNjExMCBpcyBub3Qgc2V0CiMgQ09ORklHX0RWQl9UREExMDA3MSBpcyBub3Qgc2V0CiMg
Q09ORklHX0RWQl9UREExMDA4NiBpcyBub3Qgc2V0CiMgQ09ORklHX0RWQl9UREE4MDgzIGlzIG5v
dCBzZXQKIyBDT05GSUdfRFZCX1REQTgyNjEgaXMgbm90IHNldAojIENPTkZJR19EVkJfVERBODI2
WCBpcyBub3Qgc2V0CiMgQ09ORklHX0RWQl9UUzIwMjAgaXMgbm90IHNldAojIENPTkZJR19EVkJf
VFVBNjEwMCBpcyBub3Qgc2V0CiMgQ09ORklHX0RWQl9UVU5FUl9DWDI0MTEzIGlzIG5vdCBzZXQK
IyBDT05GSUdfRFZCX1RVTkVSX0lURDEwMDAgaXMgbm90IHNldAojIENPTkZJR19EVkJfVkVTMVg5
MyBpcyBub3Qgc2V0CiMgQ09ORklHX0RWQl9aTDEwMDM2IGlzIG5vdCBzZXQKIyBDT05GSUdfRFZC
X1pMMTAwMzkgaXMgbm90IHNldAoKIwojIERWQi1UICh0ZXJyZXN0cmlhbCkgZnJvbnRlbmRzCiMK
Q09ORklHX0RWQl9BRjkwMTM9eQpDT05GSUdfRFZCX0FTMTAyX0ZFPXkKIyBDT05GSUdfRFZCX0NY
MjI3MDAgaXMgbm90IHNldAojIENPTkZJR19EVkJfQ1gyMjcwMiBpcyBub3Qgc2V0CiMgQ09ORklH
X0RWQl9DWEQyODIwUiBpcyBub3Qgc2V0CiMgQ09ORklHX0RWQl9DWEQyODQxRVIgaXMgbm90IHNl
dApDT05GSUdfRFZCX0RJQjMwMDBNQj15CkNPTkZJR19EVkJfRElCMzAwME1DPXkKIyBDT05GSUdf
RFZCX0RJQjcwMDBNIGlzIG5vdCBzZXQKIyBDT05GSUdfRFZCX0RJQjcwMDBQIGlzIG5vdCBzZXQK
IyBDT05GSUdfRFZCX0RJQjkwMDAgaXMgbm90IHNldAojIENPTkZJR19EVkJfRFJYRCBpcyBub3Qg
c2V0CkNPTkZJR19EVkJfRUMxMDA9eQpDT05GSUdfRFZCX0dQOFBTS19GRT15CiMgQ09ORklHX0RW
Ql9MNjQ3ODEgaXMgbm90IHNldAojIENPTkZJR19EVkJfTVQzNTIgaXMgbm90IHNldAojIENPTkZJ
R19EVkJfTlhUNjAwMCBpcyBub3Qgc2V0CkNPTkZJR19EVkJfUlRMMjgzMD15CkNPTkZJR19EVkJf
UlRMMjgzMj15CkNPTkZJR19EVkJfUlRMMjgzMl9TRFI9eQojIENPTkZJR19EVkJfUzVIMTQzMiBp
cyBub3Qgc2V0CiMgQ09ORklHX0RWQl9TSTIxNjggaXMgbm90IHNldAojIENPTkZJR19EVkJfU1A4
ODdYIGlzIG5vdCBzZXQKIyBDT05GSUdfRFZCX1NUVjAzNjcgaXMgbm90IHNldAojIENPTkZJR19E
VkJfVERBMTAwNDggaXMgbm90IHNldAojIENPTkZJR19EVkJfVERBMTAwNFggaXMgbm90IHNldAoj
IENPTkZJR19EVkJfWkQxMzAxX0RFTU9EIGlzIG5vdCBzZXQKQ09ORklHX0RWQl9aTDEwMzUzPXkK
IyBDT05GSUdfRFZCX0NYRDI4ODAgaXMgbm90IHNldAoKIwojIERWQi1DIChjYWJsZSkgZnJvbnRl
bmRzCiMKIyBDT05GSUdfRFZCX1NUVjAyOTcgaXMgbm90IHNldAojIENPTkZJR19EVkJfVERBMTAw
MjEgaXMgbm90IHNldAojIENPTkZJR19EVkJfVERBMTAwMjMgaXMgbm90IHNldAojIENPTkZJR19E
VkJfVkVTMTgyMCBpcyBub3Qgc2V0CgojCiMgQVRTQyAoTm9ydGggQW1lcmljYW4vS29yZWFuIFRl
cnJlc3RyaWFsL0NhYmxlIERUVikgZnJvbnRlbmRzCiMKIyBDT05GSUdfRFZCX0FVODUyMl9EVFYg
aXMgbm90IHNldAojIENPTkZJR19EVkJfQVU4NTIyX1Y0TCBpcyBub3Qgc2V0CiMgQ09ORklHX0RW
Ql9CQ00zNTEwIGlzIG5vdCBzZXQKIyBDT05GSUdfRFZCX0xHMjE2MCBpcyBub3Qgc2V0CiMgQ09O
RklHX0RWQl9MR0RUMzMwNSBpcyBub3Qgc2V0CiMgQ09ORklHX0RWQl9MR0RUMzMwNkEgaXMgbm90
IHNldAojIENPTkZJR19EVkJfTEdEVDMzMFggaXMgbm90IHNldAojIENPTkZJR19EVkJfTVhMNjky
IGlzIG5vdCBzZXQKIyBDT05GSUdfRFZCX05YVDIwMFggaXMgbm90IHNldAojIENPTkZJR19EVkJf
T1I1MTEzMiBpcyBub3Qgc2V0CiMgQ09ORklHX0RWQl9PUjUxMjExIGlzIG5vdCBzZXQKIyBDT05G
SUdfRFZCX1M1SDE0MDkgaXMgbm90IHNldAojIENPTkZJR19EVkJfUzVIMTQxMSBpcyBub3Qgc2V0
CgojCiMgSVNEQi1UICh0ZXJyZXN0cmlhbCkgZnJvbnRlbmRzCiMKIyBDT05GSUdfRFZCX0RJQjgw
MDAgaXMgbm90IHNldAojIENPTkZJR19EVkJfTUI4NkEyMFMgaXMgbm90IHNldAojIENPTkZJR19E
VkJfUzkyMSBpcyBub3Qgc2V0CgojCiMgSVNEQi1TIChzYXRlbGxpdGUpICYgSVNEQi1UICh0ZXJy
ZXN0cmlhbCkgZnJvbnRlbmRzCiMKIyBDT05GSUdfRFZCX01OODg0NDNYIGlzIG5vdCBzZXQKIyBD
T05GSUdfRFZCX1RDOTA1MjIgaXMgbm90IHNldAoKIwojIERpZ2l0YWwgdGVycmVzdHJpYWwgb25s
eSB0dW5lcnMvUExMCiMKIyBDT05GSUdfRFZCX1BMTCBpcyBub3Qgc2V0CiMgQ09ORklHX0RWQl9U
VU5FUl9ESUIwMDcwIGlzIG5vdCBzZXQKIyBDT05GSUdfRFZCX1RVTkVSX0RJQjAwOTAgaXMgbm90
IHNldAoKIwojIFNFQyBjb250cm9sIGRldmljZXMgZm9yIERWQi1TCiMKIyBDT05GSUdfRFZCX0E4
MjkzIGlzIG5vdCBzZXQKQ09ORklHX0RWQl9BRjkwMzM9eQojIENPTkZJR19EVkJfQVNDT1QyRSBp
cyBub3Qgc2V0CiMgQ09ORklHX0RWQl9BVEJNODgzMCBpcyBub3Qgc2V0CiMgQ09ORklHX0RWQl9I
RUxFTkUgaXMgbm90IHNldAojIENPTkZJR19EVkJfSE9SVVMzQSBpcyBub3Qgc2V0CiMgQ09ORklH
X0RWQl9JU0w2NDA1IGlzIG5vdCBzZXQKIyBDT05GSUdfRFZCX0lTTDY0MjEgaXMgbm90IHNldAoj
IENPTkZJR19EVkJfSVNMNjQyMyBpcyBub3Qgc2V0CiMgQ09ORklHX0RWQl9JWDI1MDVWIGlzIG5v
dCBzZXQKIyBDT05GSUdfRFZCX0xHUzhHTDUgaXMgbm90IHNldAojIENPTkZJR19EVkJfTEdTOEdY
WCBpcyBub3Qgc2V0CiMgQ09ORklHX0RWQl9MTkJIMjUgaXMgbm90IHNldAojIENPTkZJR19EVkJf
TE5CSDI5IGlzIG5vdCBzZXQKIyBDT05GSUdfRFZCX0xOQlAyMSBpcyBub3Qgc2V0CiMgQ09ORklH
X0RWQl9MTkJQMjIgaXMgbm90IHNldAojIENPTkZJR19EVkJfTTg4UlMyMDAwIGlzIG5vdCBzZXQK
IyBDT05GSUdfRFZCX1REQTY2NXggaXMgbm90IHNldAojIENPTkZJR19EVkJfRFJYMzlYWUogaXMg
bm90IHNldAoKIwojIENvbW1vbiBJbnRlcmZhY2UgKEVONTAyMjEpIGNvbnRyb2xsZXIgZHJpdmVy
cwojCiMgQ09ORklHX0RWQl9DWEQyMDk5IGlzIG5vdCBzZXQKIyBDT05GSUdfRFZCX1NQMiBpcyBu
b3Qgc2V0CiMgZW5kIG9mIEN1c3RvbWlzZSBEVkIgRnJvbnRlbmRzCgojCiMgVG9vbHMgdG8gZGV2
ZWxvcCBuZXcgZnJvbnRlbmRzCiMKIyBDT05GSUdfRFZCX0RVTU1ZX0ZFIGlzIG5vdCBzZXQKIyBl
bmQgb2YgTWVkaWEgYW5jaWxsYXJ5IGRyaXZlcnMKCiMKIyBHcmFwaGljcyBzdXBwb3J0CiMKQ09O
RklHX0FQRVJUVVJFX0hFTFBFUlM9eQpDT05GSUdfVklERU9fQ01ETElORT15CkNPTkZJR19WSURF
T19OT01PREVTRVQ9eQojIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKIyBDT05GSUdfUEFO
RUwgaXMgbm90IHNldApDT05GSUdfQUdQPXkKQ09ORklHX0FHUF9BTUQ2ND15CkNPTkZJR19BR1Bf
SU5URUw9eQojIENPTkZJR19BR1BfU0lTIGlzIG5vdCBzZXQKIyBDT05GSUdfQUdQX1ZJQSBpcyBu
b3Qgc2V0CkNPTkZJR19JTlRFTF9HVFQ9eQojIENPTkZJR19WR0FfU1dJVENIRVJPTyBpcyBub3Qg
c2V0CkNPTkZJR19EUk09eQpDT05GSUdfRFJNX01JUElfRFNJPXkKIyBDT05GSUdfRFJNX0RFQlVH
X01NIGlzIG5vdCBzZXQKQ09ORklHX0RSTV9LTVNfSEVMUEVSPXkKIyBDT05GSUdfRFJNX0RFQlVH
X0RQX01TVF9UT1BPTE9HWV9SRUZTIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX0RFQlVHX01PREVT
RVRfTE9DSyBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9GQkRFVl9FTVVMQVRJT04gaXMgbm90IHNl
dAojIENPTkZJR19EUk1fTE9BRF9FRElEX0ZJUk1XQVJFIGlzIG5vdCBzZXQKQ09ORklHX0RSTV9E
SVNQTEFZX0hFTFBFUj15CkNPTkZJR19EUk1fRElTUExBWV9EUF9IRUxQRVI9eQpDT05GSUdfRFJN
X0RJU1BMQVlfSERDUF9IRUxQRVI9eQpDT05GSUdfRFJNX0RJU1BMQVlfSERNSV9IRUxQRVI9eQoj
IENPTkZJR19EUk1fRFBfQVVYX0NIQVJERVYgaXMgbm90IHNldAojIENPTkZJR19EUk1fRFBfQ0VD
IGlzIG5vdCBzZXQKQ09ORklHX0RSTV9UVE09eQpDT05GSUdfRFJNX0JVRERZPXkKQ09ORklHX0RS
TV9HRU1fU0hNRU1fSEVMUEVSPXkKCiMKIyBJMkMgZW5jb2RlciBvciBoZWxwZXIgY2hpcHMKIwoj
IENPTkZJR19EUk1fSTJDX0NINzAwNiBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9JMkNfU0lMMTY0
IGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX0kyQ19OWFBfVERBOTk4WCBpcyBub3Qgc2V0CiMgQ09O
RklHX0RSTV9JMkNfTlhQX1REQTk5NTAgaXMgbm90IHNldAojIGVuZCBvZiBJMkMgZW5jb2RlciBv
ciBoZWxwZXIgY2hpcHMKCiMKIyBBUk0gZGV2aWNlcwojCiMgQ09ORklHX0RSTV9LT01FREEgaXMg
bm90IHNldAojIGVuZCBvZiBBUk0gZGV2aWNlcwoKIyBDT05GSUdfRFJNX1JBREVPTiBpcyBub3Qg
c2V0CiMgQ09ORklHX0RSTV9BTURHUFUgaXMgbm90IHNldAojIENPTkZJR19EUk1fTk9VVkVBVSBp
cyBub3Qgc2V0CkNPTkZJR19EUk1fSTkxNT15CkNPTkZJR19EUk1fSTkxNV9GT1JDRV9QUk9CRT0i
IgpDT05GSUdfRFJNX0k5MTVfQ0FQVFVSRV9FUlJPUj15CkNPTkZJR19EUk1fSTkxNV9DT01QUkVT
U19FUlJPUj15CkNPTkZJR19EUk1fSTkxNV9VU0VSUFRSPXkKCiMKIyBkcm0vaTkxNSBEZWJ1Z2dp
bmcKIwojIENPTkZJR19EUk1fSTkxNV9XRVJST1IgaXMgbm90IHNldAojIENPTkZJR19EUk1fSTkx
NV9ERUJVRyBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9JOTE1X0RFQlVHX01NSU8gaXMgbm90IHNl
dAojIENPTkZJR19EUk1fSTkxNV9TV19GRU5DRV9ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKIyBD
T05GSUdfRFJNX0k5MTVfU1dfRkVOQ0VfQ0hFQ0tfREFHIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJN
X0k5MTVfREVCVUdfR1VDIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX0k5MTVfU0VMRlRFU1QgaXMg
bm90IHNldAojIENPTkZJR19EUk1fSTkxNV9MT1dfTEVWRUxfVFJBQ0VQT0lOVFMgaXMgbm90IHNl
dAojIENPTkZJR19EUk1fSTkxNV9ERUJVR19WQkxBTktfRVZBREUgaXMgbm90IHNldAojIENPTkZJ
R19EUk1fSTkxNV9ERUJVR19SVU5USU1FX1BNIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX0k5MTVf
REVCVUdfV0FLRVJFRiBpcyBub3Qgc2V0CiMgZW5kIG9mIGRybS9pOTE1IERlYnVnZ2luZwoKIwoj
IGRybS9pOTE1IFByb2ZpbGUgR3VpZGVkIE9wdGltaXNhdGlvbgojCkNPTkZJR19EUk1fSTkxNV9S
RVFVRVNUX1RJTUVPVVQ9MjAwMDAKQ09ORklHX0RSTV9JOTE1X0ZFTkNFX1RJTUVPVVQ9MTAwMDAK
Q09ORklHX0RSTV9JOTE1X1VTRVJGQVVMVF9BVVRPU1VTUEVORD0yNTAKQ09ORklHX0RSTV9JOTE1
X0hFQVJUQkVBVF9JTlRFUlZBTD0yNTAwCkNPTkZJR19EUk1fSTkxNV9QUkVFTVBUX1RJTUVPVVQ9
NjQwCkNPTkZJR19EUk1fSTkxNV9QUkVFTVBUX1RJTUVPVVRfQ09NUFVURT03NTAwCkNPTkZJR19E
Uk1fSTkxNV9NQVhfUkVRVUVTVF9CVVNZV0FJVD04MDAwCkNPTkZJR19EUk1fSTkxNV9TVE9QX1RJ
TUVPVVQ9MTAwCkNPTkZJR19EUk1fSTkxNV9USU1FU0xJQ0VfRFVSQVRJT049MQojIGVuZCBvZiBk
cm0vaTkxNSBQcm9maWxlIEd1aWRlZCBPcHRpbWlzYXRpb24KCiMgQ09ORklHX0RSTV9YRSBpcyBu
b3Qgc2V0CiMgQ09ORklHX0RSTV9WR0VNIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX1ZLTVMgaXMg
bm90IHNldAojIENPTkZJR19EUk1fVk1XR0ZYIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX0dNQTUw
MCBpcyBub3Qgc2V0CkNPTkZJR19EUk1fVURMPXkKIyBDT05GSUdfRFJNX0FTVCBpcyBub3Qgc2V0
CiMgQ09ORklHX0RSTV9NR0FHMjAwIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX1FYTCBpcyBub3Qg
c2V0CkNPTkZJR19EUk1fVklSVElPX0dQVT15CkNPTkZJR19EUk1fVklSVElPX0dQVV9LTVM9eQpD
T05GSUdfRFJNX1BBTkVMPXkKCiMKIyBEaXNwbGF5IFBhbmVscwojCiMgQ09ORklHX0RSTV9QQU5F
TF9BQlRfWTAzMFhYMDY3QSBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9QQU5FTF9BUk1fVkVSU0FU
SUxFIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX1BBTkVMX0FTVVNfWjAwVF9UTTVQNV9OVDM1NTk2
IGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX1BBTkVMX0FVT19BMDMwSlROMDEgaXMgbm90IHNldAoj
IENPTkZJR19EUk1fUEFORUxfQk9FX0JGMDYwWThNX0FKMCBpcyBub3Qgc2V0CiMgQ09ORklHX0RS
TV9QQU5FTF9CT0VfSElNQVg4Mjc5RCBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9QQU5FTF9CT0Vf
VFYxMDFXVU1fTkw2IGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX1BBTkVMX0RTSV9DTSBpcyBub3Qg
c2V0CiMgQ09ORklHX0RSTV9QQU5FTF9MVkRTIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX1BBTkVM
X1NJTVBMRSBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9QQU5FTF9FRFAgaXMgbm90IHNldAojIENP
TkZJR19EUk1fUEFORUxfRUJCR19GVDg3MTkgaXMgbm90IHNldAojIENPTkZJR19EUk1fUEFORUxf
RUxJREFfS0QzNVQxMzMgaXMgbm90IHNldAojIENPTkZJR19EUk1fUEFORUxfRkVJWElOX0sxMDFf
SU0yQkEwMiBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9QQU5FTF9GRUlZQU5HX0ZZMDcwMjRESTI2
QTMwRCBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9QQU5FTF9ISU1BWF9IWDgzOTQgaXMgbm90IHNl
dAojIENPTkZJR19EUk1fUEFORUxfSUxJVEVLX0lMOTMyMiBpcyBub3Qgc2V0CiMgQ09ORklHX0RS
TV9QQU5FTF9JTElURUtfSUxJOTM0MSBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9QQU5FTF9JTElU
RUtfSUxJOTgwNSBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9QQU5FTF9JTElURUtfSUxJOTg4MUMg
aXMgbm90IHNldAojIENPTkZJR19EUk1fUEFORUxfSUxJVEVLX0lMSTk4ODJUIGlzIG5vdCBzZXQK
IyBDT05GSUdfRFJNX1BBTkVMX0lOTk9MVVhfRUowMzBOQSBpcyBub3Qgc2V0CiMgQ09ORklHX0RS
TV9QQU5FTF9JTk5PTFVYX1AwNzlaQ0EgaXMgbm90IHNldAojIENPTkZJR19EUk1fUEFORUxfSkFE
QVJEX0pEOTM2NURBX0gzIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX1BBTkVMX0pESV9MVDA3ME1F
MDUwMDAgaXMgbm90IHNldAojIENPTkZJR19EUk1fUEFORUxfSkRJX0xQTTEwMkExODhBIGlzIG5v
dCBzZXQKIyBDT05GSUdfRFJNX1BBTkVMX0pESV9SNjM0NTIgaXMgbm90IHNldAojIENPTkZJR19E
Uk1fUEFORUxfS0hBREFTX1RTMDUwIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX1BBTkVMX0tJTkdE
SVNQTEFZX0tEMDk3RDA0IGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX1BBTkVMX0xFQURURUtfTFRL
MDUwSDMxNDZXIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX1BBTkVMX0xFQURURUtfTFRLNTAwSEQx
ODI5IGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX1BBTkVMX1NBTVNVTkdfTEQ5MDQwIGlzIG5vdCBz
ZXQKIyBDT05GSUdfRFJNX1BBTkVMX0xHX0xCMDM1UTAyIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJN
X1BBTkVMX0xHX0xHNDU3MyBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9QQU5FTF9NQUdOQUNISVBf
RDUzRTZFQTg5NjYgaXMgbm90IHNldAojIENPTkZJR19EUk1fUEFORUxfTkVDX05MODA0OEhMMTEg
aXMgbm90IHNldAojIENPTkZJR19EUk1fUEFORUxfTkVXVklTSU9OX05WMzA1MUQgaXMgbm90IHNl
dAojIENPTkZJR19EUk1fUEFORUxfTkVXVklTSU9OX05WMzA1MkMgaXMgbm90IHNldAojIENPTkZJ
R19EUk1fUEFORUxfTk9WQVRFS19OVDM1NTEwIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX1BBTkVM
X05PVkFURUtfTlQzNTU2MCBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9QQU5FTF9OT1ZBVEVLX05U
MzU5NTAgaXMgbm90IHNldAojIENPTkZJR19EUk1fUEFORUxfTk9WQVRFS19OVDM2NTIzIGlzIG5v
dCBzZXQKIyBDT05GSUdfRFJNX1BBTkVMX05PVkFURUtfTlQzNjY3MkEgaXMgbm90IHNldAojIENP
TkZJR19EUk1fUEFORUxfTk9WQVRFS19OVDM5MDE2IGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX1BB
TkVMX01BTlRJWF9NTEFGMDU3V0U1MSBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9QQU5FTF9PTElN
RVhfTENEX09MSU5VWElOTyBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9QQU5FTF9PUklTRVRFQ0hf
T1RBNTYwMUEgaXMgbm90IHNldAojIENPTkZJR19EUk1fUEFORUxfT1JJU0VURUNIX09UTTgwMDlB
IGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX1BBTkVMX09TRF9PU0QxMDFUMjU4N181M1RTIGlzIG5v
dCBzZXQKIyBDT05GSUdfRFJNX1BBTkVMX1BBTkFTT05JQ19WVlgxMEYwMzROMDAgaXMgbm90IHNl
dAojIENPTkZJR19EUk1fUEFORUxfUkFTUEJFUlJZUElfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAoj
IENPTkZJR19EUk1fUEFORUxfUkFZRElVTV9STTY3MTkxIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJN
X1BBTkVMX1JBWURJVU1fUk02ODIwMCBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9QQU5FTF9SQVlE
SVVNX1JNNjkyRTUgaXMgbm90IHNldAojIENPTkZJR19EUk1fUEFORUxfUk9OQk9fUkIwNzBEMzAg
aXMgbm90IHNldAojIENPTkZJR19EUk1fUEFORUxfU0FNU1VOR19BVE5BMzNYQzIwIGlzIG5vdCBz
ZXQKIyBDT05GSUdfRFJNX1BBTkVMX1NBTVNVTkdfREI3NDMwIGlzIG5vdCBzZXQKIyBDT05GSUdf
RFJNX1BBTkVMX1NBTVNVTkdfUzZEMTZEMCBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9QQU5FTF9T
QU1TVU5HX1M2RDI3QTEgaXMgbm90IHNldAojIENPTkZJR19EUk1fUEFORUxfU0FNU1VOR19TNkQ3
QUEwIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX1BBTkVMX1NBTVNVTkdfUzZFM0hBMiBpcyBub3Qg
c2V0CiMgQ09ORklHX0RSTV9QQU5FTF9TQU1TVU5HX1M2RTYzSjBYMDMgaXMgbm90IHNldAojIENP
TkZJR19EUk1fUEFORUxfU0FNU1VOR19TNkU2M00wIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX1BB
TkVMX1NBTVNVTkdfUzZFODhBMF9BTVM0NTJFRjAxIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX1BB
TkVMX1NBTVNVTkdfUzZFOEFBMCBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9QQU5FTF9TQU1TVU5H
X1NPRkVGMDAgaXMgbm90IHNldAojIENPTkZJR19EUk1fUEFORUxfU0VJS09fNDNXVkYxRyBpcyBu
b3Qgc2V0CiMgQ09ORklHX0RSTV9QQU5FTF9TSEFSUF9MUTEwMVIxU1gwMSBpcyBub3Qgc2V0CiMg
Q09ORklHX0RSTV9QQU5FTF9TSEFSUF9MUzAzN1Y3RFcwMSBpcyBub3Qgc2V0CiMgQ09ORklHX0RS
TV9QQU5FTF9TSEFSUF9MUzA0M1QxTEUwMSBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9QQU5FTF9T
SEFSUF9MUzA2MFQxU1gwMSBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9QQU5FTF9TSVRST05JWF9T
VDc3MDEgaXMgbm90IHNldAojIENPTkZJR19EUk1fUEFORUxfU0lUUk9OSVhfU1Q3NzAzIGlzIG5v
dCBzZXQKIyBDT05GSUdfRFJNX1BBTkVMX1NJVFJPTklYX1NUNzc4OVYgaXMgbm90IHNldAojIENP
TkZJR19EUk1fUEFORUxfU1lOQVBUSUNTX1I2MzM1MyBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9Q
QU5FTF9TT05ZX0FDWDU2NUFLTSBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9QQU5FTF9TT05ZX1RE
NDM1M19KREkgaXMgbm90IHNldAojIENPTkZJR19EUk1fUEFORUxfU09OWV9UVUxJUF9UUlVMWV9O
VDM1NTIxIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX1BBTkVMX1NUQVJURUtfS0QwNzBGSEZJRDAx
NSBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9QQU5FTF9URE9fVEwwNzBXU0gzMCBpcyBub3Qgc2V0
CiMgQ09ORklHX0RSTV9QQU5FTF9UUE9fVEQwMjhUVEVDMSBpcyBub3Qgc2V0CiMgQ09ORklHX0RS
TV9QQU5FTF9UUE9fVEQwNDNNVEVBMSBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9QQU5FTF9UUE9f
VFBHMTEwIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX1BBTkVMX1RSVUxZX05UMzU1OTdfV1FYR0Eg
aXMgbm90IHNldAojIENPTkZJR19EUk1fUEFORUxfVklTSU9OT1hfUk02OTI5OSBpcyBub3Qgc2V0
CiMgQ09ORklHX0RSTV9QQU5FTF9WSVNJT05PWF9WVERSNjEzMCBpcyBub3Qgc2V0CiMgQ09ORklH
X0RSTV9QQU5FTF9WSVNJT05PWF9SNjY0NTEgaXMgbm90IHNldAojIENPTkZJR19EUk1fUEFORUxf
V0lERUNISVBTX1dTMjQwMSBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9QQU5FTF9YSU5QRU5HX1hQ
UDA1NUMyNzIgaXMgbm90IHNldAojIGVuZCBvZiBEaXNwbGF5IFBhbmVscwoKQ09ORklHX0RSTV9C
UklER0U9eQpDT05GSUdfRFJNX1BBTkVMX0JSSURHRT15CgojCiMgRGlzcGxheSBJbnRlcmZhY2Ug
QnJpZGdlcwojCiMgQ09ORklHX0RSTV9DSElQT05FX0lDTjYyMTEgaXMgbm90IHNldAojIENPTkZJ
R19EUk1fQ0hST05URUxfQ0g3MDMzIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX0RJU1BMQVlfQ09O
TkVDVE9SIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX0lURV9JVDY1MDUgaXMgbm90IHNldAojIENP
TkZJR19EUk1fTE9OVElVTV9MVDg5MTJCIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX0xPTlRJVU1f
TFQ5MjExIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX0xPTlRJVU1fTFQ5NjExIGlzIG5vdCBzZXQK
IyBDT05GSUdfRFJNX0xPTlRJVU1fTFQ5NjExVVhDIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX0lU
RV9JVDY2MTIxIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX0xWRFNfQ09ERUMgaXMgbm90IHNldAoj
IENPTkZJR19EUk1fTUVHQUNISVBTX1NURFBYWFhYX0dFX0I4NTBWM19GVyBpcyBub3Qgc2V0CiMg
Q09ORklHX0RSTV9OV0xfTUlQSV9EU0kgaXMgbm90IHNldAojIENPTkZJR19EUk1fTlhQX1BUTjM0
NjAgaXMgbm90IHNldAojIENPTkZJR19EUk1fUEFSQURFX1BTODYyMiBpcyBub3Qgc2V0CiMgQ09O
RklHX0RSTV9QQVJBREVfUFM4NjQwIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX1NBTVNVTkdfRFNJ
TSBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9TSUxfU0lJODYyMCBpcyBub3Qgc2V0CiMgQ09ORklH
X0RSTV9TSUk5MDJYIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX1NJSTkyMzQgaXMgbm90IHNldAoj
IENPTkZJR19EUk1fU0lNUExFX0JSSURHRSBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9USElORV9U
SEM2M0xWRDEwMjQgaXMgbm90IHNldAojIENPTkZJR19EUk1fVE9TSElCQV9UQzM1ODc2MiBpcyBu
b3Qgc2V0CiMgQ09ORklHX0RSTV9UT1NISUJBX1RDMzU4NzY0IGlzIG5vdCBzZXQKIyBDT05GSUdf
RFJNX1RPU0hJQkFfVEMzNTg3NjcgaXMgbm90IHNldAojIENPTkZJR19EUk1fVE9TSElCQV9UQzM1
ODc2OCBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9UT1NISUJBX1RDMzU4Nzc1IGlzIG5vdCBzZXQK
IyBDT05GSUdfRFJNX1RJX0RMUEMzNDMzIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX1RJX1RGUDQx
MCBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9USV9TTjY1RFNJODMgaXMgbm90IHNldAojIENPTkZJ
R19EUk1fVElfU042NURTSTg2IGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX1RJX1RQRDEyUzAxNSBp
cyBub3Qgc2V0CiMgQ09ORklHX0RSTV9BTkFMT0dJWF9BTlg2MzQ1IGlzIG5vdCBzZXQKIyBDT05G
SUdfRFJNX0FOQUxPR0lYX0FOWDc4WFggaXMgbm90IHNldAojIENPTkZJR19EUk1fQU5BTE9HSVhf
QU5YNzYyNSBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9JMkNfQURWNzUxMSBpcyBub3Qgc2V0CiMg
Q09ORklHX0RSTV9DRE5TX0RTSSBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9DRE5TX01IRFA4NTQ2
IGlzIG5vdCBzZXQKIyBlbmQgb2YgRGlzcGxheSBJbnRlcmZhY2UgQnJpZGdlcwoKIyBDT05GSUdf
RFJNX0VUTkFWSVYgaXMgbm90IHNldAojIENPTkZJR19EUk1fTE9HSUNWQyBpcyBub3Qgc2V0CiMg
Q09ORklHX0RSTV9BUkNQR1UgaXMgbm90IHNldAojIENPTkZJR19EUk1fQk9DSFMgaXMgbm90IHNl
dAojIENPTkZJR19EUk1fQ0lSUlVTX1FFTVUgaXMgbm90IHNldAojIENPTkZJR19EUk1fR00xMlUz
MjAgaXMgbm90IHNldAojIENPTkZJR19EUk1fUEFORUxfTUlQSV9EQkkgaXMgbm90IHNldAojIENP
TkZJR19EUk1fU0lNUExFRFJNIGlzIG5vdCBzZXQKIyBDT05GSUdfVElOWURSTV9IWDgzNTdEIGlz
IG5vdCBzZXQKIyBDT05GSUdfVElOWURSTV9JTEk5MTYzIGlzIG5vdCBzZXQKIyBDT05GSUdfVElO
WURSTV9JTEk5MjI1IGlzIG5vdCBzZXQKIyBDT05GSUdfVElOWURSTV9JTEk5MzQxIGlzIG5vdCBz
ZXQKIyBDT05GSUdfVElOWURSTV9JTEk5NDg2IGlzIG5vdCBzZXQKIyBDT05GSUdfVElOWURSTV9N
STAyODNRVCBpcyBub3Qgc2V0CiMgQ09ORklHX1RJTllEUk1fUkVQQVBFUiBpcyBub3Qgc2V0CiMg
Q09ORklHX1RJTllEUk1fU1Q3NTg2IGlzIG5vdCBzZXQKIyBDT05GSUdfVElOWURSTV9TVDc3MzVS
IGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX1ZCT1hWSURFTyBpcyBub3Qgc2V0CiMgQ09ORklHX0RS
TV9HVUQgaXMgbm90IHNldAojIENPTkZJR19EUk1fU1NEMTMwWCBpcyBub3Qgc2V0CkNPTkZJR19E
Uk1fUEFORUxfT1JJRU5UQVRJT05fUVVJUktTPXkKCiMKIyBGcmFtZSBidWZmZXIgRGV2aWNlcwoj
CkNPTkZJR19GQj15CiMgQ09ORklHX0ZCX0NJUlJVUyBpcyBub3Qgc2V0CiMgQ09ORklHX0ZCX1BN
MiBpcyBub3Qgc2V0CiMgQ09ORklHX0ZCX0NZQkVSMjAwMCBpcyBub3Qgc2V0CiMgQ09ORklHX0ZC
X0FSQyBpcyBub3Qgc2V0CiMgQ09ORklHX0ZCX0FTSUxJQU5UIGlzIG5vdCBzZXQKIyBDT05GSUdf
RkJfSU1TVFQgaXMgbm90IHNldAojIENPTkZJR19GQl9WR0ExNiBpcyBub3Qgc2V0CiMgQ09ORklH
X0ZCX1VWRVNBIGlzIG5vdCBzZXQKIyBDT05GSUdfRkJfVkVTQSBpcyBub3Qgc2V0CiMgQ09ORklH
X0ZCX040MTEgaXMgbm90IHNldAojIENPTkZJR19GQl9IR0EgaXMgbm90IHNldAojIENPTkZJR19G
Ql9PUEVOQ09SRVMgaXMgbm90IHNldAojIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CiMg
Q09ORklHX0ZCX05WSURJQSBpcyBub3Qgc2V0CiMgQ09ORklHX0ZCX1JJVkEgaXMgbm90IHNldAoj
IENPTkZJR19GQl9JNzQwIGlzIG5vdCBzZXQKIyBDT05GSUdfRkJfTUFUUk9YIGlzIG5vdCBzZXQK
IyBDT05GSUdfRkJfUkFERU9OIGlzIG5vdCBzZXQKIyBDT05GSUdfRkJfQVRZMTI4IGlzIG5vdCBz
ZXQKIyBDT05GSUdfRkJfQVRZIGlzIG5vdCBzZXQKIyBDT05GSUdfRkJfUzMgaXMgbm90IHNldAoj
IENPTkZJR19GQl9TQVZBR0UgaXMgbm90IHNldAojIENPTkZJR19GQl9TSVMgaXMgbm90IHNldAoj
IENPTkZJR19GQl9WSUEgaXMgbm90IHNldAojIENPTkZJR19GQl9ORU9NQUdJQyBpcyBub3Qgc2V0
CiMgQ09ORklHX0ZCX0tZUk8gaXMgbm90IHNldAojIENPTkZJR19GQl8zREZYIGlzIG5vdCBzZXQK
IyBDT05GSUdfRkJfVlQ4NjIzIGlzIG5vdCBzZXQKIyBDT05GSUdfRkJfVFJJREVOVCBpcyBub3Qg
c2V0CiMgQ09ORklHX0ZCX0FSSyBpcyBub3Qgc2V0CiMgQ09ORklHX0ZCX1BNMyBpcyBub3Qgc2V0
CiMgQ09ORklHX0ZCX0NBUk1JTkUgaXMgbm90IHNldApDT05GSUdfRkJfU01TQ1VGWD15CiMgQ09O
RklHX0ZCX0lCTV9HWFQ0NTAwIGlzIG5vdCBzZXQKIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qg
c2V0CiMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CiMgQ09ORklHX0ZCX01CODYyWFgg
aXMgbm90IHNldAojIENPTkZJR19GQl9TSU1QTEUgaXMgbm90IHNldAojIENPTkZJR19GQl9TU0Qx
MzA3IGlzIG5vdCBzZXQKIyBDT05GSUdfRkJfU003MTIgaXMgbm90IHNldApDT05GSUdfRkJfQ09S
RT15CkNPTkZJR19GQl9OT1RJRlk9eQojIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQK
IyBDT05GSUdfRkJfREVWSUNFIGlzIG5vdCBzZXQKQ09ORklHX0ZCX1NZU19GSUxMUkVDVD15CkNP
TkZJR19GQl9TWVNfQ09QWUFSRUE9eQpDT05GSUdfRkJfU1lTX0lNQUdFQkxJVD15CiMgQ09ORklH
X0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKQ09ORklHX0ZCX1NZU01FTV9GT1BTPXkKQ09O
RklHX0ZCX0RFRkVSUkVEX0lPPXkKQ09ORklHX0ZCX1NZU01FTV9IRUxQRVJTPXkKQ09ORklHX0ZC
X1NZU01FTV9IRUxQRVJTX0RFRkVSUkVEPXkKQ09ORklHX0ZCX01PREVfSEVMUEVSUz15CiMgQ09O
RklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CiMgZW5kIG9mIEZyYW1lIGJ1ZmZlciBEZXZp
Y2VzCgojCiMgQmFja2xpZ2h0ICYgTENEIGRldmljZSBzdXBwb3J0CiMKQ09ORklHX0xDRF9DTEFT
U19ERVZJQ0U9eQojIENPTkZJR19MQ0RfTDRGMDAyNDJUMDMgaXMgbm90IHNldAojIENPTkZJR19M
Q0RfTE1TMjgzR0YwNSBpcyBub3Qgc2V0CiMgQ09ORklHX0xDRF9MVFYzNTBRViBpcyBub3Qgc2V0
CiMgQ09ORklHX0xDRF9JTEk5MjJYIGlzIG5vdCBzZXQKIyBDT05GSUdfTENEX0lMSTkzMjAgaXMg
bm90IHNldAojIENPTkZJR19MQ0RfVERPMjRNIGlzIG5vdCBzZXQKIyBDT05GSUdfTENEX1ZHRzI0
MzJBNCBpcyBub3Qgc2V0CiMgQ09ORklHX0xDRF9QTEFURk9STSBpcyBub3Qgc2V0CiMgQ09ORklH
X0xDRF9BTVMzNjlGRzA2IGlzIG5vdCBzZXQKIyBDT05GSUdfTENEX0xNUzUwMUtGMDMgaXMgbm90
IHNldAojIENPTkZJR19MQ0RfSFg4MzU3IGlzIG5vdCBzZXQKIyBDT05GSUdfTENEX09UTTMyMjVB
IGlzIG5vdCBzZXQKQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9eQojIENPTkZJR19CQUNL
TElHSFRfS1REMjUzIGlzIG5vdCBzZXQKIyBDT05GSUdfQkFDS0xJR0hUX0tUWjg4NjYgaXMgbm90
IHNldAojIENPTkZJR19CQUNLTElHSFRfQVBQTEUgaXMgbm90IHNldAojIENPTkZJR19CQUNLTElH
SFRfUUNPTV9XTEVEIGlzIG5vdCBzZXQKIyBDT05GSUdfQkFDS0xJR0hUX1NBSEFSQSBpcyBub3Qg
c2V0CiMgQ09ORklHX0JBQ0tMSUdIVF9BRFA4ODYwIGlzIG5vdCBzZXQKIyBDT05GSUdfQkFDS0xJ
R0hUX0FEUDg4NzAgaXMgbm90IHNldAojIENPTkZJR19CQUNLTElHSFRfTE0zNjM5IGlzIG5vdCBz
ZXQKIyBDT05GSUdfQkFDS0xJR0hUX1BBTkRPUkEgaXMgbm90IHNldAojIENPTkZJR19CQUNLTElH
SFRfR1BJTyBpcyBub3Qgc2V0CiMgQ09ORklHX0JBQ0tMSUdIVF9MVjUyMDdMUCBpcyBub3Qgc2V0
CiMgQ09ORklHX0JBQ0tMSUdIVF9CRDYxMDcgaXMgbm90IHNldAojIENPTkZJR19CQUNLTElHSFRf
QVJDWENOTiBpcyBub3Qgc2V0CiMgQ09ORklHX0JBQ0tMSUdIVF9MRUQgaXMgbm90IHNldAojIGVu
ZCBvZiBCYWNrbGlnaHQgJiBMQ0QgZGV2aWNlIHN1cHBvcnQKCkNPTkZJR19IRE1JPXkKCiMKIyBD
b25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKIwpDT05GSUdfVkdBX0NPTlNPTEU9eQpDT05G
SUdfRFVNTVlfQ09OU09MRT15CkNPTkZJR19EVU1NWV9DT05TT0xFX0NPTFVNTlM9ODAKQ09ORklH
X0RVTU1ZX0NPTlNPTEVfUk9XUz0yNQojIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFIGlzIG5v
dCBzZXQKIyBlbmQgb2YgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CgojIENPTkZJR19M
T0dPIGlzIG5vdCBzZXQKIyBlbmQgb2YgR3JhcGhpY3Mgc3VwcG9ydAoKIyBDT05GSUdfRFJNX0FD
Q0VMIGlzIG5vdCBzZXQKQ09ORklHX1NPVU5EPXkKQ09ORklHX1NORD15CkNPTkZJR19TTkRfVElN
RVI9eQpDT05GSUdfU05EX1BDTT15CkNPTkZJR19TTkRfSFdERVA9eQpDT05GSUdfU05EX1NFUV9E
RVZJQ0U9eQpDT05GSUdfU05EX1JBV01JREk9eQpDT05GSUdfU05EX0pBQ0s9eQpDT05GSUdfU05E
X0pBQ0tfSU5QVVRfREVWPXkKIyBDT05GSUdfU05EX09TU0VNVUwgaXMgbm90IHNldApDT05GSUdf
U05EX1BDTV9USU1FUj15CkNPTkZJR19TTkRfSFJUSU1FUj15CiMgQ09ORklHX1NORF9EWU5BTUlD
X01JTk9SUyBpcyBub3Qgc2V0CkNPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKQ09ORklHX1NO
RF9QUk9DX0ZTPXkKQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15CiMgQ09ORklHX1NORF9WRVJC
T1NFX1BSSU5USyBpcyBub3Qgc2V0CkNPTkZJR19TTkRfQ1RMX0ZBU1RfTE9PS1VQPXkKQ09ORklH
X1NORF9ERUJVRz15CiMgQ09ORklHX1NORF9ERUJVR19WRVJCT1NFIGlzIG5vdCBzZXQKQ09ORklH
X1NORF9QQ01fWFJVTl9ERUJVRz15CiMgQ09ORklHX1NORF9DVExfSU5QVVRfVkFMSURBVElPTiBp
cyBub3Qgc2V0CiMgQ09ORklHX1NORF9DVExfREVCVUcgaXMgbm90IHNldAojIENPTkZJR19TTkRf
SkFDS19JTkpFQ1RJT05fREVCVUcgaXMgbm90IHNldApDT05GSUdfU05EX1ZNQVNURVI9eQpDT05G
SUdfU05EX0RNQV9TR0JVRj15CkNPTkZJR19TTkRfU0VRVUVOQ0VSPXkKQ09ORklHX1NORF9TRVFf
RFVNTVk9eQpDT05GSUdfU05EX1NFUV9IUlRJTUVSX0RFRkFVTFQ9eQpDT05GSUdfU05EX1NFUV9N
SURJX0VWRU5UPXkKQ09ORklHX1NORF9TRVFfTUlEST15CiMgQ09ORklHX1NORF9TRVFfVU1QIGlz
IG5vdCBzZXQKQ09ORklHX1NORF9EUklWRVJTPXkKIyBDT05GSUdfU05EX1BDU1AgaXMgbm90IHNl
dAojIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldAojIENPTkZJR19TTkRfQUxPT1AgaXMgbm90
IHNldAojIENPTkZJR19TTkRfUENNVEVTVCBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9WSVJNSURJ
IGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX01U
UzY0IGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAojIENP
TkZJR19TTkRfTVBVNDAxIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1BPUlRNQU4yWDQgaXMgbm90
IHNldApDT05GSUdfU05EX1BDST15CiMgQ09ORklHX1NORF9BRDE4ODkgaXMgbm90IHNldAojIENP
TkZJR19TTkRfQUxTMzAwIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX0FMUzQwMDAgaXMgbm90IHNl
dAojIENPTkZJR19TTkRfQUxJNTQ1MSBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9BU0lIUEkgaXMg
bm90IHNldAojIENPTkZJR19TTkRfQVRJSVhQIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX0FUSUlY
UF9NT0RFTSBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9BVTg4MTAgaXMgbm90IHNldAojIENPTkZJ
R19TTkRfQVU4ODIwIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX0FVODgzMCBpcyBub3Qgc2V0CiMg
Q09ORklHX1NORF9BVzIgaXMgbm90IHNldAojIENPTkZJR19TTkRfQVpUMzMyOCBpcyBub3Qgc2V0
CiMgQ09ORklHX1NORF9CVDg3WCBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9DQTAxMDYgaXMgbm90
IHNldAojIENPTkZJR19TTkRfQ01JUENJIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX09YWUdFTiBp
cyBub3Qgc2V0CiMgQ09ORklHX1NORF9DUzQyODEgaXMgbm90IHNldAojIENPTkZJR19TTkRfQ1M0
NlhYIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX0NUWEZJIGlzIG5vdCBzZXQKIyBDT05GSUdfU05E
X0RBUkxBMjAgaXMgbm90IHNldAojIENPTkZJR19TTkRfR0lOQTIwIGlzIG5vdCBzZXQKIyBDT05G
SUdfU05EX0xBWUxBMjAgaXMgbm90IHNldAojIENPTkZJR19TTkRfREFSTEEyNCBpcyBub3Qgc2V0
CiMgQ09ORklHX1NORF9HSU5BMjQgaXMgbm90IHNldAojIENPTkZJR19TTkRfTEFZTEEyNCBpcyBu
b3Qgc2V0CiMgQ09ORklHX1NORF9NT05BIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX01JQSBpcyBu
b3Qgc2V0CiMgQ09ORklHX1NORF9FQ0hPM0cgaXMgbm90IHNldAojIENPTkZJR19TTkRfSU5ESUdP
IGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX0lORElHT0lPIGlzIG5vdCBzZXQKIyBDT05GSUdfU05E
X0lORElHT0RKIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX0lORElHT0lPWCBpcyBub3Qgc2V0CiMg
Q09ORklHX1NORF9JTkRJR09ESlggaXMgbm90IHNldAojIENPTkZJR19TTkRfRU1VMTBLMSBpcyBu
b3Qgc2V0CiMgQ09ORklHX1NORF9FTVUxMEsxWCBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9FTlMx
MzcwIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX0VOUzEzNzEgaXMgbm90IHNldAojIENPTkZJR19T
TkRfRVMxOTM4IGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX0VTMTk2OCBpcyBub3Qgc2V0CiMgQ09O
RklHX1NORF9GTTgwMSBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9IRFNQIGlzIG5vdCBzZXQKIyBD
T05GSUdfU05EX0hEU1BNIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX0lDRTE3MTIgaXMgbm90IHNl
dAojIENPTkZJR19TTkRfSUNFMTcyNCBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9JTlRFTDhYMCBp
cyBub3Qgc2V0CiMgQ09ORklHX1NORF9JTlRFTDhYME0gaXMgbm90IHNldAojIENPTkZJR19TTkRf
S09SRzEyMTIgaXMgbm90IHNldAojIENPTkZJR19TTkRfTE9MQSBpcyBub3Qgc2V0CiMgQ09ORklH
X1NORF9MWDY0NjRFUyBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9NQUVTVFJPMyBpcyBub3Qgc2V0
CiMgQ09ORklHX1NORF9NSVhBUlQgaXMgbm90IHNldAojIENPTkZJR19TTkRfTk0yNTYgaXMgbm90
IHNldAojIENPTkZJR19TTkRfUENYSFIgaXMgbm90IHNldAojIENPTkZJR19TTkRfUklQVElERSBp
cyBub3Qgc2V0CiMgQ09ORklHX1NORF9STUUzMiBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9STUU5
NiBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9STUU5NjUyIGlzIG5vdCBzZXQKIyBDT05GSUdfU05E
X1NFNlggaXMgbm90IHNldAojIENPTkZJR19TTkRfU09OSUNWSUJFUyBpcyBub3Qgc2V0CiMgQ09O
RklHX1NORF9UUklERU5UIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1ZJQTgyWFggaXMgbm90IHNl
dAojIENPTkZJR19TTkRfVklBODJYWF9NT0RFTSBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9WSVJU
VU9TTyBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9WWDIyMiBpcyBub3Qgc2V0CiMgQ09ORklHX1NO
RF9ZTUZQQ0kgaXMgbm90IHNldAoKIwojIEhELUF1ZGlvCiMKQ09ORklHX1NORF9IREE9eQpDT05G
SUdfU05EX0hEQV9JTlRFTD15CkNPTkZJR19TTkRfSERBX0hXREVQPXkKIyBDT05GSUdfU05EX0hE
QV9SRUNPTkZJRyBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9IREFfSU5QVVRfQkVFUCBpcyBub3Qg
c2V0CiMgQ09ORklHX1NORF9IREFfUEFUQ0hfTE9BREVSIGlzIG5vdCBzZXQKIyBDT05GSUdfU05E
X0hEQV9DT0RFQ19SRUFMVEVLIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX0hEQV9DT0RFQ19BTkFM
T0cgaXMgbm90IHNldAojIENPTkZJR19TTkRfSERBX0NPREVDX1NJR01BVEVMIGlzIG5vdCBzZXQK
IyBDT05GSUdfU05EX0hEQV9DT0RFQ19WSUEgaXMgbm90IHNldAojIENPTkZJR19TTkRfSERBX0NP
REVDX0hETUkgaXMgbm90IHNldAojIENPTkZJR19TTkRfSERBX0NPREVDX0NJUlJVUyBpcyBub3Qg
c2V0CiMgQ09ORklHX1NORF9IREFfQ09ERUNfQ1M4NDA5IGlzIG5vdCBzZXQKIyBDT05GSUdfU05E
X0hEQV9DT0RFQ19DT05FWEFOVCBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9IREFfQ09ERUNfQ0Ew
MTEwIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX0hEQV9DT0RFQ19DQTAxMzIgaXMgbm90IHNldAoj
IENPTkZJR19TTkRfSERBX0NPREVDX0NNRURJQSBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9IREFf
Q09ERUNfU0kzMDU0IGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX0hEQV9HRU5FUklDIGlzIG5vdCBz
ZXQKQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRV9ERUZBVUxUPTAKIyBDT05GSUdfU05EX0hEQV9J
TlRFTF9IRE1JX1NJTEVOVF9TVFJFQU0gaXMgbm90IHNldAojIENPTkZJR19TTkRfSERBX0NUTF9E
RVZfSUQgaXMgbm90IHNldAojIGVuZCBvZiBIRC1BdWRpbwoKQ09ORklHX1NORF9IREFfQ09SRT15
CkNPTkZJR19TTkRfSERBX0NPTVBPTkVOVD15CkNPTkZJR19TTkRfSERBX0k5MTU9eQpDT05GSUdf
U05EX0hEQV9QUkVBTExPQ19TSVpFPTAKQ09ORklHX1NORF9JTlRFTF9OSExUPXkKQ09ORklHX1NO
RF9JTlRFTF9EU1BfQ09ORklHPXkKQ09ORklHX1NORF9JTlRFTF9TT1VORFdJUkVfQUNQST15CiMg
Q09ORklHX1NORF9TUEkgaXMgbm90IHNldApDT05GSUdfU05EX1VTQj15CkNPTkZJR19TTkRfVVNC
X0FVRElPPXkKIyBDT05GSUdfU05EX1VTQl9BVURJT19NSURJX1YyIGlzIG5vdCBzZXQKQ09ORklH
X1NORF9VU0JfQVVESU9fVVNFX01FRElBX0NPTlRST0xMRVI9eQpDT05GSUdfU05EX1VTQl9VQTEw
MT15CkNPTkZJR19TTkRfVVNCX1VTWDJZPXkKQ09ORklHX1NORF9VU0JfQ0FJQVE9eQpDT05GSUdf
U05EX1VTQl9DQUlBUV9JTlBVVD15CkNPTkZJR19TTkRfVVNCX1VTMTIyTD15CkNPTkZJR19TTkRf
VVNCXzZGSVJFPXkKQ09ORklHX1NORF9VU0JfSElGQUNFPXkKQ09ORklHX1NORF9CQ0QyMDAwPXkK
Q09ORklHX1NORF9VU0JfTElORTY9eQpDT05GSUdfU05EX1VTQl9QT0Q9eQpDT05GSUdfU05EX1VT
Ql9QT0RIRD15CkNPTkZJR19TTkRfVVNCX1RPTkVQT1JUPXkKQ09ORklHX1NORF9VU0JfVkFSSUFY
PXkKQ09ORklHX1NORF9QQ01DSUE9eQojIENPTkZJR19TTkRfVlhQT0NLRVQgaXMgbm90IHNldAoj
IENPTkZJR19TTkRfUERBVURJT0NGIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQyBpcyBub3Qg
c2V0CkNPTkZJR19TTkRfWDg2PXkKIyBDT05GSUdfSERNSV9MUEVfQVVESU8gaXMgbm90IHNldAoj
IENPTkZJR19TTkRfVklSVElPIGlzIG5vdCBzZXQKQ09ORklHX0hJRF9TVVBQT1JUPXkKQ09ORklH
X0hJRD15CkNPTkZJR19ISURfQkFUVEVSWV9TVFJFTkdUSD15CkNPTkZJR19ISURSQVc9eQpDT05G
SUdfVUhJRD15CkNPTkZJR19ISURfR0VORVJJQz15CgojCiMgU3BlY2lhbCBISUQgZHJpdmVycwoj
CkNPTkZJR19ISURfQTRURUNIPXkKQ09ORklHX0hJRF9BQ0NVVE9VQ0g9eQpDT05GSUdfSElEX0FD
UlVYPXkKQ09ORklHX0hJRF9BQ1JVWF9GRj15CkNPTkZJR19ISURfQVBQTEU9eQpDT05GSUdfSElE
X0FQUExFSVI9eQpDT05GSUdfSElEX0FTVVM9eQpDT05GSUdfSElEX0FVUkVBTD15CkNPTkZJR19I
SURfQkVMS0lOPXkKQ09ORklHX0hJRF9CRVRPUF9GRj15CiMgQ09ORklHX0hJRF9CSUdCRU5fRkYg
aXMgbm90IHNldApDT05GSUdfSElEX0NIRVJSWT15CkNPTkZJR19ISURfQ0hJQ09OWT15CkNPTkZJ
R19ISURfQ09SU0FJUj15CiMgQ09ORklHX0hJRF9DT1VHQVIgaXMgbm90IHNldAojIENPTkZJR19I
SURfTUFDQUxMWSBpcyBub3Qgc2V0CkNPTkZJR19ISURfUFJPRElLRVlTPXkKQ09ORklHX0hJRF9D
TUVESUE9eQpDT05GSUdfSElEX0NQMjExMj15CiMgQ09ORklHX0hJRF9DUkVBVElWRV9TQjA1NDAg
aXMgbm90IHNldApDT05GSUdfSElEX0NZUFJFU1M9eQpDT05GSUdfSElEX0RSQUdPTlJJU0U9eQpD
T05GSUdfRFJBR09OUklTRV9GRj15CkNPTkZJR19ISURfRU1TX0ZGPXkKIyBDT05GSUdfSElEX0VM
QU4gaXMgbm90IHNldApDT05GSUdfSElEX0VMRUNPTT15CkNPTkZJR19ISURfRUxPPXkKIyBDT05G
SUdfSElEX0VWSVNJT04gaXMgbm90IHNldApDT05GSUdfSElEX0VaS0VZPXkKIyBDT05GSUdfSElE
X0ZUMjYwIGlzIG5vdCBzZXQKQ09ORklHX0hJRF9HRU1CSVJEPXkKQ09ORklHX0hJRF9HRlJNPXkK
IyBDT05GSUdfSElEX0dMT1JJT1VTIGlzIG5vdCBzZXQKQ09ORklHX0hJRF9IT0xURUs9eQpDT05G
SUdfSE9MVEVLX0ZGPXkKIyBDT05GSUdfSElEX0dPT0dMRV9TVEFESUFfRkYgaXMgbm90IHNldAoj
IENPTkZJR19ISURfVklWQUxESSBpcyBub3Qgc2V0CkNPTkZJR19ISURfR1Q2ODNSPXkKQ09ORklH
X0hJRF9LRVlUT1VDSD15CkNPTkZJR19ISURfS1lFPXkKQ09ORklHX0hJRF9VQ0xPR0lDPXkKQ09O
RklHX0hJRF9XQUxUT1A9eQojIENPTkZJR19ISURfVklFV1NPTklDIGlzIG5vdCBzZXQKIyBDT05G
SUdfSElEX1ZSQzIgaXMgbm90IHNldAojIENPTkZJR19ISURfWElBT01JIGlzIG5vdCBzZXQKQ09O
RklHX0hJRF9HWVJBVElPTj15CkNPTkZJR19ISURfSUNBREU9eQpDT05GSUdfSElEX0lURT15CiMg
Q09ORklHX0hJRF9KQUJSQSBpcyBub3Qgc2V0CkNPTkZJR19ISURfVFdJTkhBTj15CkNPTkZJR19I
SURfS0VOU0lOR1RPTj15CkNPTkZJR19ISURfTENQT1dFUj15CkNPTkZJR19ISURfTEVEPXkKQ09O
RklHX0hJRF9MRU5PVk89eQojIENPTkZJR19ISURfTEVUU0tFVENIIGlzIG5vdCBzZXQKQ09ORklH
X0hJRF9MT0dJVEVDSD15CkNPTkZJR19ISURfTE9HSVRFQ0hfREo9eQpDT05GSUdfSElEX0xPR0lU
RUNIX0hJRFBQPXkKQ09ORklHX0xPR0lURUNIX0ZGPXkKQ09ORklHX0xPR0lSVU1CTEVQQUQyX0ZG
PXkKQ09ORklHX0xPR0lHOTQwX0ZGPXkKQ09ORklHX0xPR0lXSEVFTFNfRkY9eQpDT05GSUdfSElE
X01BR0lDTU9VU0U9eQojIENPTkZJR19ISURfTUFMVFJPTiBpcyBub3Qgc2V0CkNPTkZJR19ISURf
TUFZRkxBU0g9eQojIENPTkZJR19ISURfTUVHQVdPUkxEX0ZGIGlzIG5vdCBzZXQKQ09ORklHX0hJ
RF9SRURSQUdPTj15CkNPTkZJR19ISURfTUlDUk9TT0ZUPXkKQ09ORklHX0hJRF9NT05URVJFWT15
CkNPTkZJR19ISURfTVVMVElUT1VDSD15CiMgQ09ORklHX0hJRF9OSU5URU5ETyBpcyBub3Qgc2V0
CkNPTkZJR19ISURfTlRJPXkKQ09ORklHX0hJRF9OVFJJRz15CiMgQ09ORklHX0hJRF9OVklESUFf
U0hJRUxEIGlzIG5vdCBzZXQKQ09ORklHX0hJRF9PUlRFSz15CkNPTkZJR19ISURfUEFOVEhFUkxP
UkQ9eQpDT05GSUdfUEFOVEhFUkxPUkRfRkY9eQpDT05GSUdfSElEX1BFTk1PVU5UPXkKQ09ORklH
X0hJRF9QRVRBTFlOWD15CkNPTkZJR19ISURfUElDT0xDRD15CkNPTkZJR19ISURfUElDT0xDRF9G
Qj15CkNPTkZJR19ISURfUElDT0xDRF9CQUNLTElHSFQ9eQpDT05GSUdfSElEX1BJQ09MQ0RfTENE
PXkKQ09ORklHX0hJRF9QSUNPTENEX0xFRFM9eQpDT05GSUdfSElEX1BJQ09MQ0RfQ0lSPXkKQ09O
RklHX0hJRF9QTEFOVFJPTklDUz15CiMgQ09ORklHX0hJRF9QWFJDIGlzIG5vdCBzZXQKIyBDT05G
SUdfSElEX1JBWkVSIGlzIG5vdCBzZXQKQ09ORklHX0hJRF9QUklNQVg9eQpDT05GSUdfSElEX1JF
VFJPREU9eQpDT05GSUdfSElEX1JPQ0NBVD15CkNPTkZJR19ISURfU0FJVEVLPXkKQ09ORklHX0hJ
RF9TQU1TVU5HPXkKIyBDT05GSUdfSElEX1NFTUlURUsgaXMgbm90IHNldAojIENPTkZJR19ISURf
U0lHTUFNSUNSTyBpcyBub3Qgc2V0CkNPTkZJR19ISURfU09OWT15CkNPTkZJR19TT05ZX0ZGPXkK
Q09ORklHX0hJRF9TUEVFRExJTks9eQojIENPTkZJR19ISURfU1RFQU0gaXMgbm90IHNldApDT05G
SUdfSElEX1NURUVMU0VSSUVTPXkKQ09ORklHX0hJRF9TVU5QTFVTPXkKQ09ORklHX0hJRF9STUk9
eQpDT05GSUdfSElEX0dSRUVOQVNJQT15CkNPTkZJR19HUkVFTkFTSUFfRkY9eQpDT05GSUdfSElE
X1NNQVJUSk9ZUExVUz15CkNPTkZJR19TTUFSVEpPWVBMVVNfRkY9eQpDT05GSUdfSElEX1RJVk89
eQpDT05GSUdfSElEX1RPUFNFRUQ9eQojIENPTkZJR19ISURfVE9QUkUgaXMgbm90IHNldApDT05G
SUdfSElEX1RISU5HTT15CkNPTkZJR19ISURfVEhSVVNUTUFTVEVSPXkKQ09ORklHX1RIUlVTVE1B
U1RFUl9GRj15CkNPTkZJR19ISURfVURSQVdfUFMzPXkKIyBDT05GSUdfSElEX1UyRlpFUk8gaXMg
bm90IHNldApDT05GSUdfSElEX1dBQ09NPXkKQ09ORklHX0hJRF9XSUlNT1RFPXkKQ09ORklHX0hJ
RF9YSU5NTz15CkNPTkZJR19ISURfWkVST1BMVVM9eQpDT05GSUdfWkVST1BMVVNfRkY9eQpDT05G
SUdfSElEX1pZREFDUk9OPXkKQ09ORklHX0hJRF9TRU5TT1JfSFVCPXkKQ09ORklHX0hJRF9TRU5T
T1JfQ1VTVE9NX1NFTlNPUj15CkNPTkZJR19ISURfQUxQUz15CiMgQ09ORklHX0hJRF9NQ1AyMjAw
IGlzIG5vdCBzZXQKIyBDT05GSUdfSElEX01DUDIyMjEgaXMgbm90IHNldAojIGVuZCBvZiBTcGVj
aWFsIEhJRCBkcml2ZXJzCgojCiMgSElELUJQRiBzdXBwb3J0CiMKIyBlbmQgb2YgSElELUJQRiBz
dXBwb3J0CgojCiMgVVNCIEhJRCBzdXBwb3J0CiMKQ09ORklHX1VTQl9ISUQ9eQpDT05GSUdfSElE
X1BJRD15CkNPTkZJR19VU0JfSElEREVWPXkKIyBlbmQgb2YgVVNCIEhJRCBzdXBwb3J0CgpDT05G
SUdfSTJDX0hJRD15CiMgQ09ORklHX0kyQ19ISURfQUNQSSBpcyBub3Qgc2V0CiMgQ09ORklHX0ky
Q19ISURfT0YgaXMgbm90IHNldAojIENPTkZJR19JMkNfSElEX09GX0VMQU4gaXMgbm90IHNldAoj
IENPTkZJR19JMkNfSElEX09GX0dPT0RJWCBpcyBub3Qgc2V0CgojCiMgSW50ZWwgSVNIIEhJRCBz
dXBwb3J0CiMKQ09ORklHX0lOVEVMX0lTSF9ISUQ9eQojIENPTkZJR19JTlRFTF9JU0hfRklSTVdB
UkVfRE9XTkxPQURFUiBpcyBub3Qgc2V0CiMgZW5kIG9mIEludGVsIElTSCBISUQgc3VwcG9ydAoK
IwojIEFNRCBTRkggSElEIFN1cHBvcnQKIwojIENPTkZJR19BTURfU0ZIX0hJRCBpcyBub3Qgc2V0
CiMgZW5kIG9mIEFNRCBTRkggSElEIFN1cHBvcnQKCkNPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5E
SUFOPXkKQ09ORklHX1VTQl9TVVBQT1JUPXkKQ09ORklHX1VTQl9DT01NT049eQpDT05GSUdfVVNC
X0xFRF9UUklHPXkKQ09ORklHX1VTQl9VTFBJX0JVUz15CiMgQ09ORklHX1VTQl9DT05OX0dQSU8g
aXMgbm90IHNldApDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CkNPTkZJR19VU0I9eQpDT05GSUdf
VVNCX1BDST15CkNPTkZJR19VU0JfUENJX0FNRD15CkNPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RF
VklDRVM9eQoKIwojIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKIwpDT05GSUdfVVNCX0RFRkFV
TFRfUEVSU0lTVD15CiMgQ09ORklHX1VTQl9GRVdfSU5JVF9SRVRSSUVTIGlzIG5vdCBzZXQKQ09O
RklHX1VTQl9EWU5BTUlDX01JTk9SUz15CkNPTkZJR19VU0JfT1RHPXkKIyBDT05GSUdfVVNCX09U
R19QUk9EVUNUTElTVCBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9PVEdfRElTQUJMRV9FWFRFUk5B
TF9IVUIgaXMgbm90IHNldApDT05GSUdfVVNCX09UR19GU009eQpDT05GSUdfVVNCX0xFRFNfVFJJ
R0dFUl9VU0JQT1JUPXkKQ09ORklHX1VTQl9BVVRPU1VTUEVORF9ERUxBWT0yCkNPTkZJR19VU0Jf
TU9OPXkKCiMKIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKIwpDT05GSUdfVVNCX0M2N1gw
MF9IQ0Q9eQpDT05GSUdfVVNCX1hIQ0lfSENEPXkKQ09ORklHX1VTQl9YSENJX0RCR0NBUD15CkNP
TkZJR19VU0JfWEhDSV9QQ0k9eQojIENPTkZJR19VU0JfWEhDSV9QQ0lfUkVORVNBUyBpcyBub3Qg
c2V0CkNPTkZJR19VU0JfWEhDSV9QTEFURk9STT15CkNPTkZJR19VU0JfRUhDSV9IQ0Q9eQpDT05G
SUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQ9eQpDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQ9eQpD
T05GSUdfVVNCX0VIQ0lfUENJPXkKIyBDT05GSUdfVVNCX0VIQ0lfRlNMIGlzIG5vdCBzZXQKQ09O
RklHX1VTQl9FSENJX0hDRF9QTEFURk9STT15CkNPTkZJR19VU0JfT1hVMjEwSFBfSENEPXkKQ09O
RklHX1VTQl9JU1AxMTZYX0hDRD15CkNPTkZJR19VU0JfTUFYMzQyMV9IQ0Q9eQpDT05GSUdfVVNC
X09IQ0lfSENEPXkKQ09ORklHX1VTQl9PSENJX0hDRF9QQ0k9eQojIENPTkZJR19VU0JfT0hDSV9I
Q0RfU1NCIGlzIG5vdCBzZXQKQ09ORklHX1VTQl9PSENJX0hDRF9QTEFURk9STT15CkNPTkZJR19V
U0JfVUhDSV9IQ0Q9eQpDT05GSUdfVVNCX1NMODExX0hDRD15CkNPTkZJR19VU0JfU0w4MTFfSENE
X0lTTz15CkNPTkZJR19VU0JfU0w4MTFfQ1M9eQpDT05GSUdfVVNCX1I4QTY2NTk3X0hDRD15CkNP
TkZJR19VU0JfSENEX0JDTUE9eQpDT05GSUdfVVNCX0hDRF9TU0I9eQojIENPTkZJR19VU0JfSENE
X1RFU1RfTU9ERSBpcyBub3Qgc2V0CgojCiMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCiMKQ09O
RklHX1VTQl9BQ009eQpDT05GSUdfVVNCX1BSSU5URVI9eQpDT05GSUdfVVNCX1dETT15CkNPTkZJ
R19VU0JfVE1DPXkKCiMKIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJM
S19ERVZfU0QgbWF5CiMKCiMKIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAg
Zm9yIG1vcmUgaW5mbwojCkNPTkZJR19VU0JfU1RPUkFHRT15CiMgQ09ORklHX1VTQl9TVE9SQUdF
X0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX1VTQl9TVE9SQUdFX1JFQUxURUs9eQpDT05GSUdfUkVB
TFRFS19BVVRPUE09eQpDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQj15CkNPTkZJR19VU0JfU1RP
UkFHRV9GUkVFQ09NPXkKQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMD15CkNPTkZJR19VU0JfU1RP
UkFHRV9VU0JBVD15CkNPTkZJR19VU0JfU1RPUkFHRV9TRERSMDk9eQpDT05GSUdfVVNCX1NUT1JB
R0VfU0REUjU1PXkKQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UPXkKQ09ORklHX1VTQl9TVE9S
QUdFX0FMQVVEQT15CkNPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSD15CkNPTkZJR19VU0JfU1RP
UkFHRV9LQVJNQT15CkNPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCPXkKQ09ORklHX1VT
Ql9TVE9SQUdFX0VORV9VQjYyNTA9eQpDT05GSUdfVVNCX1VBUz15CgojCiMgVVNCIEltYWdpbmcg
ZGV2aWNlcwojCkNPTkZJR19VU0JfTURDODAwPXkKQ09ORklHX1VTQl9NSUNST1RFSz15CkNPTkZJ
R19VU0JJUF9DT1JFPXkKQ09ORklHX1VTQklQX1ZIQ0lfSENEPXkKQ09ORklHX1VTQklQX1ZIQ0lf
SENfUE9SVFM9OApDT05GSUdfVVNCSVBfVkhDSV9OUl9IQ1M9MQpDT05GSUdfVVNCSVBfSE9TVD15
CkNPTkZJR19VU0JJUF9WVURDPXkKIyBDT05GSUdfVVNCSVBfREVCVUcgaXMgbm90IHNldAoKIwoj
IFVTQiBkdWFsLW1vZGUgY29udHJvbGxlciBkcml2ZXJzCiMKIyBDT05GSUdfVVNCX0NETlNfU1VQ
UE9SVCBpcyBub3Qgc2V0CkNPTkZJR19VU0JfTVVTQl9IRFJDPXkKIyBDT05GSUdfVVNCX01VU0Jf
SE9TVCBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9NVVNCX0dBREdFVCBpcyBub3Qgc2V0CkNPTkZJ
R19VU0JfTVVTQl9EVUFMX1JPTEU9eQoKIwojIFBsYXRmb3JtIEdsdWUgTGF5ZXIKIwoKIwojIE1V
U0IgRE1BIG1vZGUKIwpDT05GSUdfTVVTQl9QSU9fT05MWT15CkNPTkZJR19VU0JfRFdDMz15CkNP
TkZJR19VU0JfRFdDM19VTFBJPXkKIyBDT05GSUdfVVNCX0RXQzNfSE9TVCBpcyBub3Qgc2V0CiMg
Q09ORklHX1VTQl9EV0MzX0dBREdFVCBpcyBub3Qgc2V0CkNPTkZJR19VU0JfRFdDM19EVUFMX1JP
TEU9eQoKIwojIFBsYXRmb3JtIEdsdWUgRHJpdmVyIFN1cHBvcnQKIwpDT05GSUdfVVNCX0RXQzNf
UENJPXkKIyBDT05GSUdfVVNCX0RXQzNfSEFQUyBpcyBub3Qgc2V0CkNPTkZJR19VU0JfRFdDM19P
Rl9TSU1QTEU9eQpDT05GSUdfVVNCX0RXQzI9eQpDT05GSUdfVVNCX0RXQzJfSE9TVD15CgojCiMg
R2FkZ2V0L0R1YWwtcm9sZSBtb2RlIHJlcXVpcmVzIFVTQiBHYWRnZXQgc3VwcG9ydCB0byBiZSBl
bmFibGVkCiMKIyBDT05GSUdfVVNCX0RXQzJfUEVSSVBIRVJBTCBpcyBub3Qgc2V0CiMgQ09ORklH
X1VTQl9EV0MyX0RVQUxfUk9MRSBpcyBub3Qgc2V0CkNPTkZJR19VU0JfRFdDMl9QQ0k9eQojIENP
TkZJR19VU0JfRFdDMl9ERUJVRyBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9EV0MyX1RSQUNLX01J
U1NFRF9TT0ZTIGlzIG5vdCBzZXQKQ09ORklHX1VTQl9DSElQSURFQT15CkNPTkZJR19VU0JfQ0hJ
UElERUFfVURDPXkKQ09ORklHX1VTQl9DSElQSURFQV9IT1NUPXkKQ09ORklHX1VTQl9DSElQSURF
QV9QQ0k9eQojIENPTkZJR19VU0JfQ0hJUElERUFfTVNNIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNC
X0NISVBJREVBX05QQ00gaXMgbm90IHNldAojIENPTkZJR19VU0JfQ0hJUElERUFfSU1YIGlzIG5v
dCBzZXQKIyBDT05GSUdfVVNCX0NISVBJREVBX0dFTkVSSUMgaXMgbm90IHNldAojIENPTkZJR19V
U0JfQ0hJUElERUFfVEVHUkEgaXMgbm90IHNldApDT05GSUdfVVNCX0lTUDE3NjA9eQpDT05GSUdf
VVNCX0lTUDE3NjBfSENEPXkKQ09ORklHX1VTQl9JU1AxNzYxX1VEQz15CiMgQ09ORklHX1VTQl9J
U1AxNzYwX0hPU1RfUk9MRSBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9JU1AxNzYwX0dBREdFVF9S
T0xFIGlzIG5vdCBzZXQKQ09ORklHX1VTQl9JU1AxNzYwX0RVQUxfUk9MRT15CgojCiMgVVNCIHBv
cnQgZHJpdmVycwojCkNPTkZJR19VU0JfU0VSSUFMPXkKQ09ORklHX1VTQl9TRVJJQUxfQ09OU09M
RT15CkNPTkZJR19VU0JfU0VSSUFMX0dFTkVSSUM9eQpDT05GSUdfVVNCX1NFUklBTF9TSU1QTEU9
eQpDT05GSUdfVVNCX1NFUklBTF9BSVJDQUJMRT15CkNPTkZJR19VU0JfU0VSSUFMX0FSSzMxMTY9
eQpDT05GSUdfVVNCX1NFUklBTF9CRUxLSU49eQpDT05GSUdfVVNCX1NFUklBTF9DSDM0MT15CkNP
TkZJR19VU0JfU0VSSUFMX1dISVRFSEVBVD15CkNPTkZJR19VU0JfU0VSSUFMX0RJR0lfQUNDRUxF
UE9SVD15CkNPTkZJR19VU0JfU0VSSUFMX0NQMjEwWD15CkNPTkZJR19VU0JfU0VSSUFMX0NZUFJF
U1NfTTg9eQpDT05GSUdfVVNCX1NFUklBTF9FTVBFRz15CkNPTkZJR19VU0JfU0VSSUFMX0ZURElf
U0lPPXkKQ09ORklHX1VTQl9TRVJJQUxfVklTT1I9eQpDT05GSUdfVVNCX1NFUklBTF9JUEFRPXkK
Q09ORklHX1VTQl9TRVJJQUxfSVI9eQpDT05GSUdfVVNCX1NFUklBTF9FREdFUE9SVD15CkNPTkZJ
R19VU0JfU0VSSUFMX0VER0VQT1JUX1RJPXkKQ09ORklHX1VTQl9TRVJJQUxfRjgxMjMyPXkKQ09O
RklHX1VTQl9TRVJJQUxfRjgxNTNYPXkKQ09ORklHX1VTQl9TRVJJQUxfR0FSTUlOPXkKQ09ORklH
X1VTQl9TRVJJQUxfSVBXPXkKQ09ORklHX1VTQl9TRVJJQUxfSVVVPXkKQ09ORklHX1VTQl9TRVJJ
QUxfS0VZU1BBTl9QREE9eQpDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOPXkKQ09ORklHX1VTQl9T
RVJJQUxfS0xTST15CkNPTkZJR19VU0JfU0VSSUFMX0tPQklMX1NDVD15CkNPTkZJR19VU0JfU0VS
SUFMX01DVF9VMjMyPXkKQ09ORklHX1VTQl9TRVJJQUxfTUVUUk89eQpDT05GSUdfVVNCX1NFUklB
TF9NT1M3NzIwPXkKQ09ORklHX1VTQl9TRVJJQUxfTU9TNzcxNV9QQVJQT1JUPXkKQ09ORklHX1VT
Ql9TRVJJQUxfTU9TNzg0MD15CkNPTkZJR19VU0JfU0VSSUFMX01YVVBPUlQ9eQpDT05GSUdfVVNC
X1NFUklBTF9OQVZNQU49eQpDT05GSUdfVVNCX1NFUklBTF9QTDIzMDM9eQpDT05GSUdfVVNCX1NF
UklBTF9PVEk2ODU4PXkKQ09ORklHX1VTQl9TRVJJQUxfUUNBVVg9eQpDT05GSUdfVVNCX1NFUklB
TF9RVUFMQ09NTT15CkNPTkZJR19VU0JfU0VSSUFMX1NQQ1A4WDU9eQpDT05GSUdfVVNCX1NFUklB
TF9TQUZFPXkKIyBDT05GSUdfVVNCX1NFUklBTF9TQUZFX1BBRERFRCBpcyBub3Qgc2V0CkNPTkZJ
R19VU0JfU0VSSUFMX1NJRVJSQVdJUkVMRVNTPXkKQ09ORklHX1VTQl9TRVJJQUxfU1lNQk9MPXkK
Q09ORklHX1VTQl9TRVJJQUxfVEk9eQpDT05GSUdfVVNCX1NFUklBTF9DWUJFUkpBQ0s9eQpDT05G
SUdfVVNCX1NFUklBTF9XV0FOPXkKQ09ORklHX1VTQl9TRVJJQUxfT1BUSU9OPXkKQ09ORklHX1VT
Ql9TRVJJQUxfT01OSU5FVD15CkNPTkZJR19VU0JfU0VSSUFMX09QVElDT049eQpDT05GSUdfVVNC
X1NFUklBTF9YU0VOU19NVD15CkNPTkZJR19VU0JfU0VSSUFMX1dJU0hCT05FPXkKQ09ORklHX1VT
Ql9TRVJJQUxfU1NVMTAwPXkKQ09ORklHX1VTQl9TRVJJQUxfUVQyPXkKQ09ORklHX1VTQl9TRVJJ
QUxfVVBENzhGMDczMD15CiMgQ09ORklHX1VTQl9TRVJJQUxfWFIgaXMgbm90IHNldApDT05GSUdf
VVNCX1NFUklBTF9ERUJVRz15CgojCiMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwojCkNPTkZJ
R19VU0JfVVNTNzIwPXkKQ09ORklHX1VTQl9FTUk2Mj15CkNPTkZJR19VU0JfRU1JMjY9eQpDT05G
SUdfVVNCX0FEVVRVWD15CkNPTkZJR19VU0JfU0VWU0VHPXkKQ09ORklHX1VTQl9MRUdPVE9XRVI9
eQpDT05GSUdfVVNCX0xDRD15CkNPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjM9eQpDT05GSUdfVVNC
X0NZVEhFUk09eQpDT05GSUdfVVNCX0lETU9VU0U9eQpDT05GSUdfVVNCX0FQUExFRElTUExBWT15
CiMgQ09ORklHX0FQUExFX01GSV9GQVNUQ0hBUkdFIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0xK
Q0EgaXMgbm90IHNldApDT05GSUdfVVNCX1NJU1VTQlZHQT15CkNPTkZJR19VU0JfTEQ9eQpDT05G
SUdfVVNCX1RSQU5DRVZJQlJBVE9SPXkKQ09ORklHX1VTQl9JT1dBUlJJT1I9eQpDT05GSUdfVVNC
X1RFU1Q9eQpDT05GSUdfVVNCX0VIU0VUX1RFU1RfRklYVFVSRT15CkNPTkZJR19VU0JfSVNJR0hU
Rlc9eQpDT05GSUdfVVNCX1lVUkVYPXkKQ09ORklHX1VTQl9FWlVTQl9GWDI9eQpDT05GSUdfVVNC
X0hVQl9VU0IyNTFYQj15CkNPTkZJR19VU0JfSFNJQ19VU0IzNTAzPXkKQ09ORklHX1VTQl9IU0lD
X1VTQjQ2MDQ9eQpDT05GSUdfVVNCX0xJTktfTEFZRVJfVEVTVD15CkNPTkZJR19VU0JfQ0hBT1NL
RVk9eQojIENPTkZJR19VU0JfT05CT0FSRF9IVUIgaXMgbm90IHNldApDT05GSUdfVVNCX0FUTT15
CkNPTkZJR19VU0JfU1BFRURUT1VDSD15CkNPTkZJR19VU0JfQ1hBQ1JVPXkKQ09ORklHX1VTQl9V
RUFHTEVBVE09eQpDT05GSUdfVVNCX1hVU0JBVE09eQoKIwojIFVTQiBQaHlzaWNhbCBMYXllciBk
cml2ZXJzCiMKQ09ORklHX1VTQl9QSFk9eQpDT05GSUdfTk9QX1VTQl9YQ0VJVj15CkNPTkZJR19V
U0JfR1BJT19WQlVTPXkKQ09ORklHX1RBSFZPX1VTQj15CkNPTkZJR19UQUhWT19VU0JfSE9TVF9C
WV9ERUZBVUxUPXkKQ09ORklHX1VTQl9JU1AxMzAxPXkKIyBlbmQgb2YgVVNCIFBoeXNpY2FsIExh
eWVyIGRyaXZlcnMKCkNPTkZJR19VU0JfR0FER0VUPXkKIyBDT05GSUdfVVNCX0dBREdFVF9ERUJV
RyBpcyBub3Qgc2V0CkNPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTPXkKQ09ORklHX1VTQl9H
QURHRVRfREVCVUdfRlM9eQpDT05GSUdfVVNCX0dBREdFVF9WQlVTX0RSQVc9NTAwCkNPTkZJR19V
U0JfR0FER0VUX1NUT1JBR0VfTlVNX0JVRkZFUlM9MgoKIwojIFVTQiBQZXJpcGhlcmFsIENvbnRy
b2xsZXIKIwpDT05GSUdfVVNCX0dSX1VEQz15CkNPTkZJR19VU0JfUjhBNjY1OTc9eQpDT05GSUdf
VVNCX1BYQTI3WD15CkNPTkZJR19VU0JfTVZfVURDPXkKQ09ORklHX1VTQl9NVl9VM0Q9eQpDT05G
SUdfVVNCX1NOUF9DT1JFPXkKIyBDT05GSUdfVVNCX1NOUF9VRENfUExBVCBpcyBub3Qgc2V0CiMg
Q09ORklHX1VTQl9NNjY1OTIgaXMgbm90IHNldApDT05GSUdfVVNCX0JEQ19VREM9eQpDT05GSUdf
VVNCX0FNRDU1MzZVREM9eQpDT05GSUdfVVNCX05FVDIyNzI9eQpDT05GSUdfVVNCX05FVDIyNzJf
RE1BPXkKQ09ORklHX1VTQl9ORVQyMjgwPXkKQ09ORklHX1VTQl9HT0tVPXkKQ09ORklHX1VTQl9F
RzIwVD15CiMgQ09ORklHX1VTQl9HQURHRVRfWElMSU5YIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNC
X01BWDM0MjBfVURDIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0NETlMyX1VEQyBpcyBub3Qgc2V0
CkNPTkZJR19VU0JfRFVNTVlfSENEPXkKIyBlbmQgb2YgVVNCIFBlcmlwaGVyYWwgQ29udHJvbGxl
cgoKIyBDT05GSUdfVVNCX0NPTkZJR0ZTIGlzIG5vdCBzZXQKCiMKIyBVU0IgR2FkZ2V0IHByZWNv
bXBvc2VkIGNvbmZpZ3VyYXRpb25zCiMKIyBDT05GSUdfVVNCX1pFUk8gaXMgbm90IHNldAojIENP
TkZJR19VU0JfQVVESU8gaXMgbm90IHNldAojIENPTkZJR19VU0JfRVRIIGlzIG5vdCBzZXQKIyBD
T05GSUdfVVNCX0dfTkNNIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0dBREdFVEZTIGlzIG5vdCBz
ZXQKIyBDT05GSUdfVVNCX0ZVTkNUSU9ORlMgaXMgbm90IHNldAojIENPTkZJR19VU0JfTUFTU19T
VE9SQUdFIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0dBREdFVF9UQVJHRVQgaXMgbm90IHNldAoj
IENPTkZJR19VU0JfR19TRVJJQUwgaXMgbm90IHNldAojIENPTkZJR19VU0JfTUlESV9HQURHRVQg
aXMgbm90IHNldAojIENPTkZJR19VU0JfR19QUklOVEVSIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNC
X0NEQ19DT01QT1NJVEUgaXMgbm90IHNldAojIENPTkZJR19VU0JfR19OT0tJQSBpcyBub3Qgc2V0
CiMgQ09ORklHX1VTQl9HX0FDTV9NUyBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9HX01VTFRJIGlz
IG5vdCBzZXQKIyBDT05GSUdfVVNCX0dfSElEIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0dfREJH
UCBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9HX1dFQkNBTSBpcyBub3Qgc2V0CkNPTkZJR19VU0Jf
UkFXX0dBREdFVD15CiMgZW5kIG9mIFVTQiBHYWRnZXQgcHJlY29tcG9zZWQgY29uZmlndXJhdGlv
bnMKCkNPTkZJR19UWVBFQz15CkNPTkZJR19UWVBFQ19UQ1BNPXkKQ09ORklHX1RZUEVDX1RDUENJ
PXkKIyBDT05GSUdfVFlQRUNfUlQxNzExSCBpcyBub3Qgc2V0CiMgQ09ORklHX1RZUEVDX1RDUENJ
X01BWElNIGlzIG5vdCBzZXQKQ09ORklHX1RZUEVDX0ZVU0IzMDI9eQpDT05GSUdfVFlQRUNfVUNT
ST15CiMgQ09ORklHX1VDU0lfQ0NHIGlzIG5vdCBzZXQKQ09ORklHX1VDU0lfQUNQST15CiMgQ09O
RklHX1VDU0lfU1RNMzJHMCBpcyBub3Qgc2V0CkNPTkZJR19UWVBFQ19UUFM2NTk4WD15CiMgQ09O
RklHX1RZUEVDX0FOWDc0MTEgaXMgbm90IHNldAojIENPTkZJR19UWVBFQ19SVDE3MTkgaXMgbm90
IHNldAojIENPTkZJR19UWVBFQ19IRDNTUzMyMjAgaXMgbm90IHNldAojIENPTkZJR19UWVBFQ19T
VFVTQjE2MFggaXMgbm90IHNldAojIENPTkZJR19UWVBFQ19XVVNCMzgwMSBpcyBub3Qgc2V0Cgoj
CiMgVVNCIFR5cGUtQyBNdWx0aXBsZXhlci9EZU11bHRpcGxleGVyIFN3aXRjaCBzdXBwb3J0CiMK
IyBDT05GSUdfVFlQRUNfTVVYX0ZTQTQ0ODAgaXMgbm90IHNldAojIENPTkZJR19UWVBFQ19NVVhf
R1BJT19TQlUgaXMgbm90IHNldAojIENPTkZJR19UWVBFQ19NVVhfUEkzVVNCMzA1MzIgaXMgbm90
IHNldAojIENPTkZJR19UWVBFQ19NVVhfTkI3VlBROTA0TSBpcyBub3Qgc2V0CiMgQ09ORklHX1RZ
UEVDX01VWF9QVE4zNjUwMiBpcyBub3Qgc2V0CiMgQ09ORklHX1RZUEVDX01VWF9XQ0Q5MzlYX1VT
QlNTIGlzIG5vdCBzZXQKIyBlbmQgb2YgVVNCIFR5cGUtQyBNdWx0aXBsZXhlci9EZU11bHRpcGxl
eGVyIFN3aXRjaCBzdXBwb3J0CgojCiMgVVNCIFR5cGUtQyBBbHRlcm5hdGUgTW9kZSBkcml2ZXJz
CiMKIyBDT05GSUdfVFlQRUNfRFBfQUxUTU9ERSBpcyBub3Qgc2V0CiMgZW5kIG9mIFVTQiBUeXBl
LUMgQWx0ZXJuYXRlIE1vZGUgZHJpdmVycwoKQ09ORklHX1VTQl9ST0xFX1NXSVRDSD15CiMgQ09O
RklHX1VTQl9ST0xFU19JTlRFTF9YSENJIGlzIG5vdCBzZXQKQ09ORklHX01NQz15CiMgQ09ORklH
X1BXUlNFUV9FTU1DIGlzIG5vdCBzZXQKIyBDT05GSUdfUFdSU0VRX1NEODc4NyBpcyBub3Qgc2V0
CiMgQ09ORklHX1BXUlNFUV9TSU1QTEUgaXMgbm90IHNldAojIENPTkZJR19NTUNfQkxPQ0sgaXMg
bm90IHNldAojIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAojIENPTkZJR19NTUNfVEVTVCBp
cyBub3Qgc2V0CgojCiMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKIwojIENP
TkZJR19NTUNfREVCVUcgaXMgbm90IHNldAojIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAoj
IENPTkZJR19NTUNfV0JTRCBpcyBub3Qgc2V0CiMgQ09ORklHX01NQ19USUZNX1NEIGlzIG5vdCBz
ZXQKIyBDT05GSUdfTU1DX1NQSSBpcyBub3Qgc2V0CiMgQ09ORklHX01NQ19TRFJJQ09IX0NTIGlz
IG5vdCBzZXQKIyBDT05GSUdfTU1DX0NCNzEwIGlzIG5vdCBzZXQKIyBDT05GSUdfTU1DX1ZJQV9T
RE1NQyBpcyBub3Qgc2V0CkNPTkZJR19NTUNfVlVCMzAwPXkKQ09ORklHX01NQ19VU0hDPXkKIyBD
T05GSUdfTU1DX1VTREhJNlJPTDAgaXMgbm90IHNldApDT05GSUdfTU1DX1JFQUxURUtfVVNCPXkK
IyBDT05GSUdfTU1DX0NRSENJIGlzIG5vdCBzZXQKIyBDT05GSUdfTU1DX0hTUSBpcyBub3Qgc2V0
CiMgQ09ORklHX01NQ19UT1NISUJBX1BDSSBpcyBub3Qgc2V0CiMgQ09ORklHX01NQ19NVEsgaXMg
bm90IHNldAojIENPTkZJR19TQ1NJX1VGU0hDRCBpcyBub3Qgc2V0CkNPTkZJR19NRU1TVElDSz15
CiMgQ09ORklHX01FTVNUSUNLX0RFQlVHIGlzIG5vdCBzZXQKCiMKIyBNZW1vcnlTdGljayBkcml2
ZXJzCiMKIyBDT05GSUdfTUVNU1RJQ0tfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0CiMgQ09ORklH
X01TUFJPX0JMT0NLIGlzIG5vdCBzZXQKIyBDT05GSUdfTVNfQkxPQ0sgaXMgbm90IHNldAoKIwoj
IE1lbW9yeVN0aWNrIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiMKIyBDT05GSUdfTUVNU1RJQ0tf
VElGTV9NUyBpcyBub3Qgc2V0CiMgQ09ORklHX01FTVNUSUNLX0pNSUNST05fMzhYIGlzIG5vdCBz
ZXQKIyBDT05GSUdfTUVNU1RJQ0tfUjU5MiBpcyBub3Qgc2V0CkNPTkZJR19NRU1TVElDS19SRUFM
VEVLX1VTQj15CkNPTkZJR19ORVdfTEVEUz15CkNPTkZJR19MRURTX0NMQVNTPXkKIyBDT05GSUdf
TEVEU19DTEFTU19GTEFTSCBpcyBub3Qgc2V0CiMgQ09ORklHX0xFRFNfQ0xBU1NfTVVMVElDT0xP
UiBpcyBub3Qgc2V0CiMgQ09ORklHX0xFRFNfQlJJR0hUTkVTU19IV19DSEFOR0VEIGlzIG5vdCBz
ZXQKCiMKIyBMRUQgZHJpdmVycwojCiMgQ09ORklHX0xFRFNfQU4zMDI1OUEgaXMgbm90IHNldAoj
IENPTkZJR19MRURTX0FQVSBpcyBub3Qgc2V0CiMgQ09ORklHX0xFRFNfQVcyMDBYWCBpcyBub3Qg
c2V0CiMgQ09ORklHX0xFRFNfQVcyMDEzIGlzIG5vdCBzZXQKIyBDT05GSUdfTEVEU19CQ002MzI4
IGlzIG5vdCBzZXQKIyBDT05GSUdfTEVEU19CQ002MzU4IGlzIG5vdCBzZXQKIyBDT05GSUdfTEVE
U19DSFRfV0NPVkUgaXMgbm90IHNldAojIENPTkZJR19MRURTX0NSMDAxNDExNCBpcyBub3Qgc2V0
CiMgQ09ORklHX0xFRFNfRUwxNTIwMzAwMCBpcyBub3Qgc2V0CiMgQ09ORklHX0xFRFNfTE0zNTMw
IGlzIG5vdCBzZXQKIyBDT05GSUdfTEVEU19MTTM1MzIgaXMgbm90IHNldAojIENPTkZJR19MRURT
X0xNMzY0MiBpcyBub3Qgc2V0CiMgQ09ORklHX0xFRFNfTE0zNjkyWCBpcyBub3Qgc2V0CiMgQ09O
RklHX0xFRFNfUENBOTUzMiBpcyBub3Qgc2V0CiMgQ09ORklHX0xFRFNfR1BJTyBpcyBub3Qgc2V0
CiMgQ09ORklHX0xFRFNfTFAzOTQ0IGlzIG5vdCBzZXQKIyBDT05GSUdfTEVEU19MUDM5NTIgaXMg
bm90IHNldAojIENPTkZJR19MRURTX0xQNTBYWCBpcyBub3Qgc2V0CiMgQ09ORklHX0xFRFNfTFA1
NVhYX0NPTU1PTiBpcyBub3Qgc2V0CiMgQ09ORklHX0xFRFNfTFA4ODYwIGlzIG5vdCBzZXQKIyBD
T05GSUdfTEVEU19QQ0E5NTVYIGlzIG5vdCBzZXQKIyBDT05GSUdfTEVEU19QQ0E5NjNYIGlzIG5v
dCBzZXQKIyBDT05GSUdfTEVEU19QQ0E5OTVYIGlzIG5vdCBzZXQKIyBDT05GSUdfTEVEU19EQUMx
MjRTMDg1IGlzIG5vdCBzZXQKIyBDT05GSUdfTEVEU19SRUdVTEFUT1IgaXMgbm90IHNldAojIENP
TkZJR19MRURTX0JEMjYwNk1WViBpcyBub3Qgc2V0CiMgQ09ORklHX0xFRFNfQkQyODAyIGlzIG5v
dCBzZXQKIyBDT05GSUdfTEVEU19JTlRFTF9TUzQyMDAgaXMgbm90IHNldAojIENPTkZJR19MRURT
X0xUMzU5MyBpcyBub3Qgc2V0CiMgQ09ORklHX0xFRFNfVENBNjUwNyBpcyBub3Qgc2V0CiMgQ09O
RklHX0xFRFNfVExDNTkxWFggaXMgbm90IHNldAojIENPTkZJR19MRURTX0xNMzU1eCBpcyBub3Qg
c2V0CiMgQ09ORklHX0xFRFNfSVMzMUZMMzE5WCBpcyBub3Qgc2V0CiMgQ09ORklHX0xFRFNfSVMz
MUZMMzJYWCBpcyBub3Qgc2V0CgojCiMgTEVEIGRyaXZlciBmb3IgYmxpbmsoMSkgVVNCIFJHQiBM
RUQgaXMgdW5kZXIgU3BlY2lhbCBISUQgZHJpdmVycyAoSElEX1RISU5HTSkKIwojIENPTkZJR19M
RURTX0JMSU5LTSBpcyBub3Qgc2V0CiMgQ09ORklHX0xFRFNfU1lTQ09OIGlzIG5vdCBzZXQKIyBD
T05GSUdfTEVEU19NTFhDUExEIGlzIG5vdCBzZXQKIyBDT05GSUdfTEVEU19NTFhSRUcgaXMgbm90
IHNldAojIENPTkZJR19MRURTX1VTRVIgaXMgbm90IHNldAojIENPTkZJR19MRURTX05JQzc4Qlgg
aXMgbm90IHNldAojIENPTkZJR19MRURTX1NQSV9CWVRFIGlzIG5vdCBzZXQKIyBDT05GSUdfTEVE
U19MTTM2OTcgaXMgbm90IHNldAojIENPTkZJR19MRURTX0xHTSBpcyBub3Qgc2V0CgojCiMgRmxh
c2ggYW5kIFRvcmNoIExFRCBkcml2ZXJzCiMKCiMKIyBSR0IgTEVEIGRyaXZlcnMKIwoKIwojIExF
RCBUcmlnZ2VycwojCkNPTkZJR19MRURTX1RSSUdHRVJTPXkKIyBDT05GSUdfTEVEU19UUklHR0VS
X1RJTUVSIGlzIG5vdCBzZXQKIyBDT05GSUdfTEVEU19UUklHR0VSX09ORVNIT1QgaXMgbm90IHNl
dAojIENPTkZJR19MRURTX1RSSUdHRVJfRElTSyBpcyBub3Qgc2V0CiMgQ09ORklHX0xFRFNfVFJJ
R0dFUl9IRUFSVEJFQVQgaXMgbm90IHNldAojIENPTkZJR19MRURTX1RSSUdHRVJfQkFDS0xJR0hU
IGlzIG5vdCBzZXQKIyBDT05GSUdfTEVEU19UUklHR0VSX0NQVSBpcyBub3Qgc2V0CiMgQ09ORklH
X0xFRFNfVFJJR0dFUl9BQ1RJVklUWSBpcyBub3Qgc2V0CiMgQ09ORklHX0xFRFNfVFJJR0dFUl9H
UElPIGlzIG5vdCBzZXQKIyBDT05GSUdfTEVEU19UUklHR0VSX0RFRkFVTFRfT04gaXMgbm90IHNl
dAoKIwojIGlwdGFibGVzIHRyaWdnZXIgaXMgdW5kZXIgTmV0ZmlsdGVyIGNvbmZpZyAoTEVEIHRh
cmdldCkKIwojIENPTkZJR19MRURTX1RSSUdHRVJfVFJBTlNJRU5UIGlzIG5vdCBzZXQKIyBDT05G
SUdfTEVEU19UUklHR0VSX0NBTUVSQSBpcyBub3Qgc2V0CiMgQ09ORklHX0xFRFNfVFJJR0dFUl9Q
QU5JQyBpcyBub3Qgc2V0CiMgQ09ORklHX0xFRFNfVFJJR0dFUl9ORVRERVYgaXMgbm90IHNldAoj
IENPTkZJR19MRURTX1RSSUdHRVJfUEFUVEVSTiBpcyBub3Qgc2V0CkNPTkZJR19MRURTX1RSSUdH
RVJfQVVESU89eQojIENPTkZJR19MRURTX1RSSUdHRVJfVFRZIGlzIG5vdCBzZXQKCiMKIyBTaW1w
bGUgTEVEIGRyaXZlcnMKIwojIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKIyBDT05G
SUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CkNPTkZJR19FREFDX0FUT01JQ19TQ1JVQj15CkNPTkZJ
R19FREFDX1NVUFBPUlQ9eQpDT05GSUdfRURBQz15CiMgQ09ORklHX0VEQUNfTEVHQUNZX1NZU0ZT
IGlzIG5vdCBzZXQKIyBDT05GSUdfRURBQ19ERUJVRyBpcyBub3Qgc2V0CiMgQ09ORklHX0VEQUNf
REVDT0RFX01DRSBpcyBub3Qgc2V0CiMgQ09ORklHX0VEQUNfRTc1MlggaXMgbm90IHNldAojIENP
TkZJR19FREFDX0k4Mjk3NVggaXMgbm90IHNldAojIENPTkZJR19FREFDX0kzMDAwIGlzIG5vdCBz
ZXQKIyBDT05GSUdfRURBQ19JMzIwMCBpcyBub3Qgc2V0CiMgQ09ORklHX0VEQUNfSUUzMTIwMCBp
cyBub3Qgc2V0CiMgQ09ORklHX0VEQUNfWDM4IGlzIG5vdCBzZXQKIyBDT05GSUdfRURBQ19JNTQw
MCBpcyBub3Qgc2V0CiMgQ09ORklHX0VEQUNfSTdDT1JFIGlzIG5vdCBzZXQKIyBDT05GSUdfRURB
Q19JNTEwMCBpcyBub3Qgc2V0CiMgQ09ORklHX0VEQUNfSTczMDAgaXMgbm90IHNldAojIENPTkZJ
R19FREFDX1NCUklER0UgaXMgbm90IHNldAojIENPTkZJR19FREFDX1NLWCBpcyBub3Qgc2V0CiMg
Q09ORklHX0VEQUNfSTEwTk0gaXMgbm90IHNldAojIENPTkZJR19FREFDX1BORDIgaXMgbm90IHNl
dAojIENPTkZJR19FREFDX0lHRU42IGlzIG5vdCBzZXQKQ09ORklHX1JUQ19MSUI9eQpDT05GSUdf
UlRDX01DMTQ2ODE4X0xJQj15CkNPTkZJR19SVENfQ0xBU1M9eQojIENPTkZJR19SVENfSENUT1NZ
UyBpcyBub3Qgc2V0CkNPTkZJR19SVENfU1lTVE9IQz15CkNPTkZJR19SVENfU1lTVE9IQ19ERVZJ
Q0U9InJ0YzAiCiMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19SVENfTlZNRU09
eQoKIwojIFJUQyBpbnRlcmZhY2VzCiMKQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKQ09ORklHX1JU
Q19JTlRGX1BST0M9eQpDT05GSUdfUlRDX0lOVEZfREVWPXkKIyBDT05GSUdfUlRDX0lOVEZfREVW
X1VJRV9FTVVMIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKCiMK
IyBJMkMgUlRDIGRyaXZlcnMKIwojIENPTkZJR19SVENfRFJWX0FCQjVaRVMzIGlzIG5vdCBzZXQK
IyBDT05GSUdfUlRDX0RSVl9BQkVPWjkgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX0FCWDgw
WCBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKIyBDT05GSUdf
UlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qg
c2V0CiMgQ09ORklHX1JUQ19EUlZfSFlNODU2MyBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZf
TUFYNjkwMCBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfTUFYMzEzMzUgaXMgbm90IHNldAoj
IENPTkZJR19SVENfRFJWX05DVDMwMThZIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9SUzVD
MzcyIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKIyBDT05G
SUdfUlRDX0RSVl9JU0wxMjAyMiBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfSVNMMTIwMjYg
aXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKIyBDT05GSUdfUlRD
X0RSVl9QQ0Y4NTIzIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTA2MyBpcyBub3Qg
c2V0CiMgQ09ORklHX1JUQ19EUlZfUENGODUzNjMgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJW
X1BDRjg1NjMgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAoj
IENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfQlEzMksg
aXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX1RXTDQwMzAgaXMgbm90IHNldAojIENPTkZJR19S
VENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qg
c2V0CiMgQ09ORklHX1JUQ19EUlZfUlg4MDEwIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9S
WDg1ODEgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CiMgQ09O
RklHX1JUQ19EUlZfRU0zMDI3IGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9SVjMwMjggaXMg
bm90IHNldAojIENPTkZJR19SVENfRFJWX1JWMzAzMiBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19E
UlZfUlY4ODAzIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9TRDMwNzggaXMgbm90IHNldAoK
IwojIFNQSSBSVEMgZHJpdmVycwojCiMgQ09ORklHX1JUQ19EUlZfTTQxVDkzIGlzIG5vdCBzZXQK
IyBDT05GSUdfUlRDX0RSVl9NNDFUOTQgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX0RTMTMw
MiBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfRFMxMzA1IGlzIG5vdCBzZXQKIyBDT05GSUdf
UlRDX0RSVl9EUzEzNDMgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX0RTMTM0NyBpcyBub3Qg
c2V0CiMgQ09ORklHX1JUQ19EUlZfRFMxMzkwIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9N
QVg2OTE2IGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CiMgQ09O
RklHX1JUQ19EUlZfUlg0NTgxIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlz
IG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRD
X0RSVl9QQ0YyMTIzIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9NQ1A3OTUgaXMgbm90IHNl
dApDT05GSUdfUlRDX0kyQ19BTkRfU1BJPXkKCiMKIyBTUEkgYW5kIEkyQyBSVEMgZHJpdmVycwoj
CiMgQ09ORklHX1JUQ19EUlZfRFMzMjMyIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9QQ0Yy
MTI3IGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9SVjMwMjlDMiBpcyBub3Qgc2V0CiMgQ09O
RklHX1JUQ19EUlZfUlg2MTEwIGlzIG5vdCBzZXQKCiMKIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwoj
CkNPTkZJR19SVENfRFJWX0NNT1M9eQojIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0
CiMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9EUzE1
NTMgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX0RTMTY4NV9GQU1JTFkgaXMgbm90IHNldAoj
IENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfRFMyNDA0
IGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CiMgQ09ORklH
X1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90
IHNldAojIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZf
TVNNNjI0MiBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKIyBD
T05GSUdfUlRDX0RSVl9aWU5RTVAgaXMgbm90IHNldAoKIwojIG9uLUNQVSBSVEMgZHJpdmVycwoj
CiMgQ09ORklHX1JUQ19EUlZfQ0FERU5DRSBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfRlRS
VEMwMTAgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX1I3MzAxIGlzIG5vdCBzZXQKCiMKIyBI
SUQgU2Vuc29yIFJUQyBkcml2ZXJzCiMKQ09ORklHX1JUQ19EUlZfSElEX1NFTlNPUl9USU1FPXkK
IyBDT05GSUdfUlRDX0RSVl9HT0xERklTSCBpcyBub3Qgc2V0CkNPTkZJR19ETUFERVZJQ0VTPXkK
IyBDT05GSUdfRE1BREVWSUNFU19ERUJVRyBpcyBub3Qgc2V0CgojCiMgRE1BIERldmljZXMKIwpD
T05GSUdfRE1BX0VOR0lORT15CkNPTkZJR19ETUFfVklSVFVBTF9DSEFOTkVMUz15CkNPTkZJR19E
TUFfQUNQST15CkNPTkZJR19ETUFfT0Y9eQojIENPTkZJR19BTFRFUkFfTVNHRE1BIGlzIG5vdCBz
ZXQKIyBDT05GSUdfRFdfQVhJX0RNQUMgaXMgbm90IHNldAojIENPTkZJR19GU0xfRURNQSBpcyBu
b3Qgc2V0CiMgQ09ORklHX0lOVEVMX0lETUE2NCBpcyBub3Qgc2V0CiMgQ09ORklHX0lOVEVMX0lE
WEQgaXMgbm90IHNldAojIENPTkZJR19JTlRFTF9JRFhEX0NPTVBBVCBpcyBub3Qgc2V0CiMgQ09O
RklHX0lOVEVMX0lPQVRETUEgaXMgbm90IHNldAojIENPTkZJR19QTFhfRE1BIGlzIG5vdCBzZXQK
IyBDT05GSUdfWElMSU5YX0RNQSBpcyBub3Qgc2V0CiMgQ09ORklHX1hJTElOWF9YRE1BIGlzIG5v
dCBzZXQKIyBDT05GSUdfWElMSU5YX1pZTlFNUF9EUERNQSBpcyBub3Qgc2V0CiMgQ09ORklHX0FN
RF9QVERNQSBpcyBub3Qgc2V0CiMgQ09ORklHX1FDT01fSElETUFfTUdNVCBpcyBub3Qgc2V0CiMg
Q09ORklHX1FDT01fSElETUEgaXMgbm90IHNldApDT05GSUdfRFdfRE1BQ19DT1JFPXkKIyBDT05G
SUdfRFdfRE1BQyBpcyBub3Qgc2V0CiMgQ09ORklHX0RXX0RNQUNfUENJIGlzIG5vdCBzZXQKIyBD
T05GSUdfRFdfRURNQSBpcyBub3Qgc2V0CkNPTkZJR19IU1VfRE1BPXkKIyBDT05GSUdfU0ZfUERN
QSBpcyBub3Qgc2V0CiMgQ09ORklHX0lOVEVMX0xETUEgaXMgbm90IHNldAoKIwojIERNQSBDbGll
bnRzCiMKIyBDT05GSUdfQVNZTkNfVFhfRE1BIGlzIG5vdCBzZXQKIyBDT05GSUdfRE1BVEVTVCBp
cyBub3Qgc2V0CgojCiMgRE1BQlVGIG9wdGlvbnMKIwpDT05GSUdfU1lOQ19GSUxFPXkKIyBDT05G
SUdfU1dfU1lOQyBpcyBub3Qgc2V0CiMgQ09ORklHX1VETUFCVUYgaXMgbm90IHNldAojIENPTkZJ
R19ETUFCVUZfTU9WRV9OT1RJRlkgaXMgbm90IHNldAojIENPTkZJR19ETUFCVUZfREVCVUcgaXMg
bm90IHNldAojIENPTkZJR19ETUFCVUZfU0VMRlRFU1RTIGlzIG5vdCBzZXQKIyBDT05GSUdfRE1B
QlVGX0hFQVBTIGlzIG5vdCBzZXQKIyBDT05GSUdfRE1BQlVGX1NZU0ZTX1NUQVRTIGlzIG5vdCBz
ZXQKIyBlbmQgb2YgRE1BQlVGIG9wdGlvbnMKCiMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiMgQ09O
RklHX1ZGSU8gaXMgbm90IHNldAojIENPTkZJR19WSVJUX0RSSVZFUlMgaXMgbm90IHNldApDT05G
SUdfVklSVElPX0FOQ0hPUj15CkNPTkZJR19WSVJUSU89eQpDT05GSUdfVklSVElPX1BDSV9MSUI9
eQpDT05GSUdfVklSVElPX1BDSV9MSUJfTEVHQUNZPXkKQ09ORklHX1ZJUlRJT19NRU5VPXkKQ09O
RklHX1ZJUlRJT19QQ0k9eQpDT05GSUdfVklSVElPX1BDSV9BRE1JTl9MRUdBQ1k9eQpDT05GSUdf
VklSVElPX1BDSV9MRUdBQ1k9eQojIENPTkZJR19WSVJUSU9fQkFMTE9PTiBpcyBub3Qgc2V0CkNP
TkZJR19WSVJUSU9fSU5QVVQ9eQojIENPTkZJR19WSVJUSU9fTU1JTyBpcyBub3Qgc2V0CkNPTkZJ
R19WSVJUSU9fRE1BX1NIQVJFRF9CVUZGRVI9eQojIENPTkZJR19WRFBBIGlzIG5vdCBzZXQKQ09O
RklHX1ZIT1NUX01FTlU9eQojIENPTkZJR19WSE9TVF9ORVQgaXMgbm90IHNldAojIENPTkZJR19W
SE9TVF9TQ1NJIGlzIG5vdCBzZXQKIyBDT05GSUdfVkhPU1RfQ1JPU1NfRU5ESUFOX0xFR0FDWSBp
cyBub3Qgc2V0CgojCiMgTWljcm9zb2Z0IEh5cGVyLVYgZ3Vlc3Qgc3VwcG9ydAojCiMgQ09ORklH
X0hZUEVSViBpcyBub3Qgc2V0CiMgZW5kIG9mIE1pY3Jvc29mdCBIeXBlci1WIGd1ZXN0IHN1cHBv
cnQKCkNPTkZJR19HUkVZQlVTPXkKQ09ORklHX0dSRVlCVVNfRVMyPXkKQ09ORklHX0NPTUVEST15
CiMgQ09ORklHX0NPTUVESV9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19DT01FRElfREVGQVVMVF9C
VUZfU0laRV9LQj0yMDQ4CkNPTkZJR19DT01FRElfREVGQVVMVF9CVUZfTUFYU0laRV9LQj0yMDQ4
MAojIENPTkZJR19DT01FRElfTUlTQ19EUklWRVJTIGlzIG5vdCBzZXQKIyBDT05GSUdfQ09NRURJ
X1BDSV9EUklWRVJTIGlzIG5vdCBzZXQKIyBDT05GSUdfQ09NRURJX1BDTUNJQV9EUklWRVJTIGlz
IG5vdCBzZXQKQ09ORklHX0NPTUVESV9VU0JfRFJJVkVSUz15CkNPTkZJR19DT01FRElfRFQ5ODEy
PXkKQ09ORklHX0NPTUVESV9OSV9VU0I2NTAxPXkKQ09ORklHX0NPTUVESV9VU0JEVVg9eQpDT05G
SUdfQ09NRURJX1VTQkRVWEZBU1Q9eQpDT05GSUdfQ09NRURJX1VTQkRVWFNJR01BPXkKQ09ORklH
X0NPTUVESV9WTUs4MFhYPXkKIyBDT05GSUdfQ09NRURJXzgyNTVfU0EgaXMgbm90IHNldAojIENP
TkZJR19DT01FRElfS0NPTUVESUxJQiBpcyBub3Qgc2V0CiMgQ09ORklHX0NPTUVESV9URVNUUyBp
cyBub3Qgc2V0CkNPTkZJR19TVEFHSU5HPXkKQ09ORklHX1BSSVNNMl9VU0I9eQojIENPTkZJR19S
VExMSUIgaXMgbm90IHNldAojIENPTkZJR19SVEw4NzIzQlMgaXMgbm90IHNldApDT05GSUdfUjg3
MTJVPXkKIyBDT05GSUdfUlRTNTIwOCBpcyBub3Qgc2V0CiMgQ09ORklHX1ZUNjY1NSBpcyBub3Qg
c2V0CiMgQ09ORklHX1ZUNjY1NiBpcyBub3Qgc2V0CgojCiMgSUlPIHN0YWdpbmcgZHJpdmVycwoj
CgojCiMgQWNjZWxlcm9tZXRlcnMKIwojIENPTkZJR19BRElTMTYyMDMgaXMgbm90IHNldAojIENP
TkZJR19BRElTMTYyNDAgaXMgbm90IHNldAojIGVuZCBvZiBBY2NlbGVyb21ldGVycwoKIwojIEFu
YWxvZyB0byBkaWdpdGFsIGNvbnZlcnRlcnMKIwojIENPTkZJR19BRDc4MTYgaXMgbm90IHNldAoj
IGVuZCBvZiBBbmFsb2cgdG8gZGlnaXRhbCBjb252ZXJ0ZXJzCgojCiMgQW5hbG9nIGRpZ2l0YWwg
YmktZGlyZWN0aW9uIGNvbnZlcnRlcnMKIwojIENPTkZJR19BRFQ3MzE2IGlzIG5vdCBzZXQKIyBl
bmQgb2YgQW5hbG9nIGRpZ2l0YWwgYmktZGlyZWN0aW9uIGNvbnZlcnRlcnMKCiMKIyBEaXJlY3Qg
RGlnaXRhbCBTeW50aGVzaXMKIwojIENPTkZJR19BRDk4MzIgaXMgbm90IHNldAojIENPTkZJR19B
RDk4MzQgaXMgbm90IHNldAojIGVuZCBvZiBEaXJlY3QgRGlnaXRhbCBTeW50aGVzaXMKCiMKIyBO
ZXR3b3JrIEFuYWx5emVyLCBJbXBlZGFuY2UgQ29udmVydGVycwojCiMgQ09ORklHX0FENTkzMyBp
cyBub3Qgc2V0CiMgZW5kIG9mIE5ldHdvcmsgQW5hbHl6ZXIsIEltcGVkYW5jZSBDb252ZXJ0ZXJz
CiMgZW5kIG9mIElJTyBzdGFnaW5nIGRyaXZlcnMKCiMgQ09ORklHX0ZCX1NNNzUwIGlzIG5vdCBz
ZXQKIyBDT05GSUdfU1RBR0lOR19NRURJQSBpcyBub3Qgc2V0CiMgQ09ORklHX1NUQUdJTkdfQk9B
UkQgaXMgbm90IHNldAojIENPTkZJR19MVEVfR0RNNzI0WCBpcyBub3Qgc2V0CiMgQ09ORklHX01P
U1RfQ09NUE9ORU5UUyBpcyBub3Qgc2V0CiMgQ09ORklHX0tTNzAxMCBpcyBub3Qgc2V0CiMgQ09O
RklHX0dSRVlCVVNfQk9PVFJPTSBpcyBub3Qgc2V0CiMgQ09ORklHX0dSRVlCVVNfRklSTVdBUkUg
aXMgbm90IHNldApDT05GSUdfR1JFWUJVU19ISUQ9eQojIENPTkZJR19HUkVZQlVTX0xJR0hUIGlz
IG5vdCBzZXQKIyBDT05GSUdfR1JFWUJVU19MT0cgaXMgbm90IHNldAojIENPTkZJR19HUkVZQlVT
X0xPT1BCQUNLIGlzIG5vdCBzZXQKIyBDT05GSUdfR1JFWUJVU19QT1dFUiBpcyBub3Qgc2V0CiMg
Q09ORklHX0dSRVlCVVNfUkFXIGlzIG5vdCBzZXQKIyBDT05GSUdfR1JFWUJVU19WSUJSQVRPUiBp
cyBub3Qgc2V0CkNPTkZJR19HUkVZQlVTX0JSSURHRURfUEhZPXkKIyBDT05GSUdfR1JFWUJVU19H
UElPIGlzIG5vdCBzZXQKIyBDT05GSUdfR1JFWUJVU19JMkMgaXMgbm90IHNldAojIENPTkZJR19H
UkVZQlVTX1NESU8gaXMgbm90IHNldAojIENPTkZJR19HUkVZQlVTX1NQSSBpcyBub3Qgc2V0CiMg
Q09ORklHX0dSRVlCVVNfVUFSVCBpcyBub3Qgc2V0CkNPTkZJR19HUkVZQlVTX1VTQj15CiMgQ09O
RklHX1BJNDMzIGlzIG5vdCBzZXQKIyBDT05GSUdfWElMX0FYSVNfRklGTyBpcyBub3Qgc2V0CiMg
Q09ORklHX0ZJRUxEQlVTX0RFViBpcyBub3Qgc2V0CiMgQ09ORklHX1ZNRV9CVVMgaXMgbm90IHNl
dApDT05GSUdfQ0hST01FX1BMQVRGT1JNUz15CiMgQ09ORklHX0NIUk9NRU9TX0FDUEkgaXMgbm90
IHNldAojIENPTkZJR19DSFJPTUVPU19MQVBUT1AgaXMgbm90IHNldAojIENPTkZJR19DSFJPTUVP
U19QU1RPUkUgaXMgbm90IHNldAojIENPTkZJR19DSFJPTUVPU19UQk1DIGlzIG5vdCBzZXQKIyBD
T05GSUdfQ1JPU19FQyBpcyBub3Qgc2V0CiMgQ09ORklHX0NST1NfS0JEX0xFRF9CQUNLTElHSFQg
aXMgbm90IHNldAojIENPTkZJR19DUk9TX0hQU19JMkMgaXMgbm90IHNldAojIENPTkZJR19DSFJP
TUVPU19QUklWQUNZX1NDUkVFTiBpcyBub3Qgc2V0CiMgQ09ORklHX01FTExBTk9YX1BMQVRGT1JN
IGlzIG5vdCBzZXQKQ09ORklHX1NVUkZBQ0VfUExBVEZPUk1TPXkKIyBDT05GSUdfU1VSRkFDRTNf
V01JIGlzIG5vdCBzZXQKIyBDT05GSUdfU1VSRkFDRV8zX1BPV0VSX09QUkVHSU9OIGlzIG5vdCBz
ZXQKIyBDT05GSUdfU1VSRkFDRV9HUEUgaXMgbm90IHNldAojIENPTkZJR19TVVJGQUNFX0hPVFBM
VUcgaXMgbm90IHNldAojIENPTkZJR19TVVJGQUNFX1BSTzNfQlVUVE9OIGlzIG5vdCBzZXQKQ09O
RklHX1g4Nl9QTEFURk9STV9ERVZJQ0VTPXkKQ09ORklHX0FDUElfV01JPXkKQ09ORklHX1dNSV9C
TU9GPXkKIyBDT05GSUdfSFVBV0VJX1dNSSBpcyBub3Qgc2V0CiMgQ09ORklHX01YTV9XTUkgaXMg
bm90IHNldAojIENPTkZJR19OVklESUFfV01JX0VDX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CiMgQ09O
RklHX1hJQU9NSV9XTUkgaXMgbm90IHNldAojIENPTkZJR19HSUdBQllURV9XTUkgaXMgbm90IHNl
dAojIENPTkZJR19ZT0dBQk9PSyBpcyBub3Qgc2V0CiMgQ09ORklHX0FDRVJIREYgaXMgbm90IHNl
dAojIENPTkZJR19BQ0VSX1dJUkVMRVNTIGlzIG5vdCBzZXQKIyBDT05GSUdfQUNFUl9XTUkgaXMg
bm90IHNldAojIENPTkZJR19BTURfUE1DIGlzIG5vdCBzZXQKIyBDT05GSUdfQU1EX0hTTVAgaXMg
bm90IHNldAojIENPTkZJR19BTURfV0JSRiBpcyBub3Qgc2V0CiMgQ09ORklHX0FEVl9TV0JVVFRP
TiBpcyBub3Qgc2V0CiMgQ09ORklHX0FQUExFX0dNVVggaXMgbm90IHNldAojIENPTkZJR19BU1VT
X0xBUFRPUCBpcyBub3Qgc2V0CiMgQ09ORklHX0FTVVNfV0lSRUxFU1MgaXMgbm90IHNldApDT05G
SUdfQVNVU19XTUk9eQojIENPTkZJR19BU1VTX05CX1dNSSBpcyBub3Qgc2V0CiMgQ09ORklHX0FT
VVNfVEYxMDNDX0RPQ0sgaXMgbm90IHNldApDT05GSUdfRUVFUENfTEFQVE9QPXkKIyBDT05GSUdf
RUVFUENfV01JIGlzIG5vdCBzZXQKIyBDT05GSUdfWDg2X1BMQVRGT1JNX0RSSVZFUlNfREVMTCBp
cyBub3Qgc2V0CiMgQ09ORklHX0FNSUxPX1JGS0lMTCBpcyBub3Qgc2V0CiMgQ09ORklHX0ZVSklU
U1VfTEFQVE9QIGlzIG5vdCBzZXQKIyBDT05GSUdfRlVKSVRTVV9UQUJMRVQgaXMgbm90IHNldAoj
IENPTkZJR19HUERfUE9DS0VUX0ZBTiBpcyBub3Qgc2V0CiMgQ09ORklHX1g4Nl9QTEFURk9STV9E
UklWRVJTX0hQIGlzIG5vdCBzZXQKIyBDT05GSUdfV0lSRUxFU1NfSE9US0VZIGlzIG5vdCBzZXQK
IyBDT05GSUdfSUJNX1JUTCBpcyBub3Qgc2V0CiMgQ09ORklHX0lERUFQQURfTEFQVE9QIGlzIG5v
dCBzZXQKIyBDT05GSUdfTEVOT1ZPX1lNQyBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfSERB
UFMgaXMgbm90IHNldAojIENPTkZJR19USElOS1BBRF9BQ1BJIGlzIG5vdCBzZXQKIyBDT05GSUdf
VEhJTktQQURfTE1JIGlzIG5vdCBzZXQKIyBDT05GSUdfSU5URUxfQVRPTUlTUDJfUE0gaXMgbm90
IHNldAojIENPTkZJR19JTlRFTF9JRlMgaXMgbm90IHNldAojIENPTkZJR19JTlRFTF9TQVJfSU5U
MTA5MiBpcyBub3Qgc2V0CiMgQ09ORklHX0lOVEVMX1NLTF9JTlQzNDcyIGlzIG5vdCBzZXQKCiMK
IyBJbnRlbCBTcGVlZCBTZWxlY3QgVGVjaG5vbG9neSBpbnRlcmZhY2Ugc3VwcG9ydAojCiMgQ09O
RklHX0lOVEVMX1NQRUVEX1NFTEVDVF9JTlRFUkZBQ0UgaXMgbm90IHNldAojIGVuZCBvZiBJbnRl
bCBTcGVlZCBTZWxlY3QgVGVjaG5vbG9neSBpbnRlcmZhY2Ugc3VwcG9ydAoKIyBDT05GSUdfSU5U
RUxfV01JX1NCTF9GV19VUERBVEUgaXMgbm90IHNldAojIENPTkZJR19JTlRFTF9XTUlfVEhVTkRF
UkJPTFQgaXMgbm90IHNldAoKIwojIEludGVsIFVuY29yZSBGcmVxdWVuY3kgQ29udHJvbAojCiMg
Q09ORklHX0lOVEVMX1VOQ09SRV9GUkVRX0NPTlRST0wgaXMgbm90IHNldAojIGVuZCBvZiBJbnRl
bCBVbmNvcmUgRnJlcXVlbmN5IENvbnRyb2wKCiMgQ09ORklHX0lOVEVMX0hJRF9FVkVOVCBpcyBu
b3Qgc2V0CiMgQ09ORklHX0lOVEVMX1ZCVE4gaXMgbm90IHNldAojIENPTkZJR19JTlRFTF9JTlQw
MDAyX1ZHUElPIGlzIG5vdCBzZXQKIyBDT05GSUdfSU5URUxfT0FLVFJBSUwgaXMgbm90IHNldAoj
IENPTkZJR19JTlRFTF9JU0hUUF9FQ0xJVEUgaXMgbm90IHNldAojIENPTkZJR19JTlRFTF9QVU5J
VF9JUEMgaXMgbm90IHNldAojIENPTkZJR19JTlRFTF9SU1QgaXMgbm90IHNldAojIENPTkZJR19J
TlRFTF9TTUFSVENPTk5FQ1QgaXMgbm90IHNldAojIENPTkZJR19JTlRFTF9UVVJCT19NQVhfMyBp
cyBub3Qgc2V0CiMgQ09ORklHX0lOVEVMX1ZTRUMgaXMgbm90IHNldAojIENPTkZJR19NU0lfRUMg
aXMgbm90IHNldAojIENPTkZJR19NU0lfTEFQVE9QIGlzIG5vdCBzZXQKIyBDT05GSUdfTVNJX1dN
SSBpcyBub3Qgc2V0CiMgQ09ORklHX1BDRU5HSU5FU19BUFUyIGlzIG5vdCBzZXQKIyBDT05GSUdf
QkFSQ09fUDUwX0dQSU8gaXMgbm90IHNldAojIENPTkZJR19TQU1TVU5HX0xBUFRPUCBpcyBub3Qg
c2V0CiMgQ09ORklHX1NBTVNVTkdfUTEwIGlzIG5vdCBzZXQKIyBDT05GSUdfQUNQSV9UT1NISUJB
IGlzIG5vdCBzZXQKIyBDT05GSUdfVE9TSElCQV9CVF9SRktJTEwgaXMgbm90IHNldAojIENPTkZJ
R19UT1NISUJBX0hBUFMgaXMgbm90IHNldAojIENPTkZJR19UT1NISUJBX1dNSSBpcyBub3Qgc2V0
CiMgQ09ORklHX0FDUElfQ01QQyBpcyBub3Qgc2V0CiMgQ09ORklHX0NPTVBBTF9MQVBUT1AgaXMg
bm90IHNldAojIENPTkZJR19MR19MQVBUT1AgaXMgbm90IHNldAojIENPTkZJR19QQU5BU09OSUNf
TEFQVE9QIGlzIG5vdCBzZXQKIyBDT05GSUdfU09OWV9MQVBUT1AgaXMgbm90IHNldAojIENPTkZJ
R19TWVNURU03Nl9BQ1BJIGlzIG5vdCBzZXQKIyBDT05GSUdfVE9QU1RBUl9MQVBUT1AgaXMgbm90
IHNldAojIENPTkZJR19TRVJJQUxfTVVMVElfSU5TVEFOVElBVEUgaXMgbm90IHNldAojIENPTkZJ
R19NTFhfUExBVEZPUk0gaXMgbm90IHNldAojIENPTkZJR19JTlNQVVJfUExBVEZPUk1fUFJPRklM
RSBpcyBub3Qgc2V0CiMgQ09ORklHX0lOVEVMX0lQUyBpcyBub3Qgc2V0CiMgQ09ORklHX0lOVEVM
X1NDVV9QQ0kgaXMgbm90IHNldAojIENPTkZJR19JTlRFTF9TQ1VfUExBVEZPUk0gaXMgbm90IHNl
dAojIENPTkZJR19TSUVNRU5TX1NJTUFUSUNfSVBDIGlzIG5vdCBzZXQKIyBDT05GSUdfV0lOTUFU
RV9GTTA3X0tFWVMgaXMgbm90IHNldApDT05GSUdfUDJTQj15CkNPTkZJR19IQVZFX0NMSz15CkNP
TkZJR19IQVZFX0NMS19QUkVQQVJFPXkKQ09ORklHX0NPTU1PTl9DTEs9eQojIENPTkZJR19MTUsw
NDgzMiBpcyBub3Qgc2V0CiMgQ09ORklHX0NPTU1PTl9DTEtfTUFYOTQ4NSBpcyBub3Qgc2V0CiMg
Q09ORklHX0NPTU1PTl9DTEtfU0k1MzQxIGlzIG5vdCBzZXQKIyBDT05GSUdfQ09NTU9OX0NMS19T
STUzNTEgaXMgbm90IHNldAojIENPTkZJR19DT01NT05fQ0xLX1NJNTE0IGlzIG5vdCBzZXQKIyBD
T05GSUdfQ09NTU9OX0NMS19TSTU0NCBpcyBub3Qgc2V0CiMgQ09ORklHX0NPTU1PTl9DTEtfU0k1
NzAgaXMgbm90IHNldAojIENPTkZJR19DT01NT05fQ0xLX0NEQ0U3MDYgaXMgbm90IHNldAojIENP
TkZJR19DT01NT05fQ0xLX0NEQ0U5MjUgaXMgbm90IHNldAojIENPTkZJR19DT01NT05fQ0xLX0NT
MjAwMF9DUCBpcyBub3Qgc2V0CiMgQ09ORklHX0NMS19UV0wgaXMgbm90IHNldAojIENPTkZJR19D
T01NT05fQ0xLX0FYSV9DTEtHRU4gaXMgbm90IHNldAojIENPTkZJR19DT01NT05fQ0xLX1JTOV9Q
Q0lFIGlzIG5vdCBzZXQKIyBDT05GSUdfQ09NTU9OX0NMS19TSTUyMVhYIGlzIG5vdCBzZXQKIyBD
T05GSUdfQ09NTU9OX0NMS19WQzMgaXMgbm90IHNldAojIENPTkZJR19DT01NT05fQ0xLX1ZDNSBp
cyBub3Qgc2V0CiMgQ09ORklHX0NPTU1PTl9DTEtfVkM3IGlzIG5vdCBzZXQKIyBDT05GSUdfQ09N
TU9OX0NMS19GSVhFRF9NTUlPIGlzIG5vdCBzZXQKIyBDT05GSUdfQ0xLX0xHTV9DR1UgaXMgbm90
IHNldAojIENPTkZJR19YSUxJTlhfVkNVIGlzIG5vdCBzZXQKIyBDT05GSUdfQ09NTU9OX0NMS19Y
TE5YX0NMS1daUkQgaXMgbm90IHNldAojIENPTkZJR19IV1NQSU5MT0NLIGlzIG5vdCBzZXQKCiMK
IyBDbG9jayBTb3VyY2UgZHJpdmVycwojCkNPTkZJR19DTEtFVlRfSTgyNTM9eQpDT05GSUdfSTgy
NTNfTE9DSz15CkNPTkZJR19DTEtCTERfSTgyNTM9eQojIGVuZCBvZiBDbG9jayBTb3VyY2UgZHJp
dmVycwoKQ09ORklHX01BSUxCT1g9eQojIENPTkZJR19QTEFURk9STV9NSFUgaXMgbm90IHNldApD
T05GSUdfUENDPXkKIyBDT05GSUdfQUxURVJBX01CT1ggaXMgbm90IHNldAojIENPTkZJR19NQUlM
Qk9YX1RFU1QgaXMgbm90IHNldApDT05GSUdfSU9NTVVfSU9WQT15CkNPTkZJR19JT01NVV9BUEk9
eQpDT05GSUdfSU9NTVVfU1VQUE9SVD15CgojCiMgR2VuZXJpYyBJT01NVSBQYWdldGFibGUgU3Vw
cG9ydAojCkNPTkZJR19JT01NVV9JT19QR1RBQkxFPXkKIyBlbmQgb2YgR2VuZXJpYyBJT01NVSBQ
YWdldGFibGUgU3VwcG9ydAoKIyBDT05GSUdfSU9NTVVfREVCVUdGUyBpcyBub3Qgc2V0CiMgQ09O
RklHX0lPTU1VX0RFRkFVTFRfRE1BX1NUUklDVCBpcyBub3Qgc2V0CkNPTkZJR19JT01NVV9ERUZB
VUxUX0RNQV9MQVpZPXkKIyBDT05GSUdfSU9NTVVfREVGQVVMVF9QQVNTVEhST1VHSCBpcyBub3Qg
c2V0CkNPTkZJR19PRl9JT01NVT15CkNPTkZJR19JT01NVV9ETUE9eQpDT05GSUdfQU1EX0lPTU1V
PXkKQ09ORklHX0RNQVJfVEFCTEU9eQpDT05GSUdfSU5URUxfSU9NTVU9eQojIENPTkZJR19JTlRF
TF9JT01NVV9TVk0gaXMgbm90IHNldAojIENPTkZJR19JTlRFTF9JT01NVV9ERUZBVUxUX09OIGlz
IG5vdCBzZXQKQ09ORklHX0lOVEVMX0lPTU1VX0ZMT1BQWV9XQT15CkNPTkZJR19JTlRFTF9JT01N
VV9TQ0FMQUJMRV9NT0RFX0RFRkFVTFRfT049eQpDT05GSUdfSU5URUxfSU9NTVVfUEVSRl9FVkVO
VFM9eQojIENPTkZJR19JT01NVUZEIGlzIG5vdCBzZXQKIyBDT05GSUdfSVJRX1JFTUFQIGlzIG5v
dCBzZXQKIyBDT05GSUdfVklSVElPX0lPTU1VIGlzIG5vdCBzZXQKCiMKIyBSZW1vdGVwcm9jIGRy
aXZlcnMKIwojIENPTkZJR19SRU1PVEVQUk9DIGlzIG5vdCBzZXQKIyBlbmQgb2YgUmVtb3RlcHJv
YyBkcml2ZXJzCgojCiMgUnBtc2cgZHJpdmVycwojCiMgQ09ORklHX1JQTVNHX1FDT01fR0xJTktf
UlBNIGlzIG5vdCBzZXQKIyBDT05GSUdfUlBNU0dfVklSVElPIGlzIG5vdCBzZXQKIyBlbmQgb2Yg
UnBtc2cgZHJpdmVycwoKIyBDT05GSUdfU09VTkRXSVJFIGlzIG5vdCBzZXQKCiMKIyBTT0MgKFN5
c3RlbSBPbiBDaGlwKSBzcGVjaWZpYyBEcml2ZXJzCiMKCiMKIyBBbWxvZ2ljIFNvQyBkcml2ZXJz
CiMKIyBlbmQgb2YgQW1sb2dpYyBTb0MgZHJpdmVycwoKIwojIEJyb2FkY29tIFNvQyBkcml2ZXJz
CiMKIyBlbmQgb2YgQnJvYWRjb20gU29DIGRyaXZlcnMKCiMKIyBOWFAvRnJlZXNjYWxlIFFvcklR
IFNvQyBkcml2ZXJzCiMKIyBlbmQgb2YgTlhQL0ZyZWVzY2FsZSBRb3JJUSBTb0MgZHJpdmVycwoK
IwojIGZ1aml0c3UgU29DIGRyaXZlcnMKIwojIGVuZCBvZiBmdWppdHN1IFNvQyBkcml2ZXJzCgoj
CiMgaS5NWCBTb0MgZHJpdmVycwojCiMgZW5kIG9mIGkuTVggU29DIGRyaXZlcnMKCiMKIyBFbmFi
bGUgTGl0ZVggU29DIEJ1aWxkZXIgc3BlY2lmaWMgZHJpdmVycwojCiMgQ09ORklHX0xJVEVYX1NP
Q19DT05UUk9MTEVSIGlzIG5vdCBzZXQKIyBlbmQgb2YgRW5hYmxlIExpdGVYIFNvQyBCdWlsZGVy
IHNwZWNpZmljIGRyaXZlcnMKCiMgQ09ORklHX1dQQ000NTBfU09DIGlzIG5vdCBzZXQKCiMKIyBR
dWFsY29tbSBTb0MgZHJpdmVycwojCiMgZW5kIG9mIFF1YWxjb21tIFNvQyBkcml2ZXJzCgojIENP
TkZJR19TT0NfVEkgaXMgbm90IHNldAoKIwojIFhpbGlueCBTb0MgZHJpdmVycwojCiMgZW5kIG9m
IFhpbGlueCBTb0MgZHJpdmVycwojIGVuZCBvZiBTT0MgKFN5c3RlbSBPbiBDaGlwKSBzcGVjaWZp
YyBEcml2ZXJzCgojCiMgUE0gRG9tYWlucwojCgojCiMgQW1sb2dpYyBQTSBEb21haW5zCiMKIyBl
bmQgb2YgQW1sb2dpYyBQTSBEb21haW5zCgojCiMgQnJvYWRjb20gUE0gRG9tYWlucwojCiMgZW5k
IG9mIEJyb2FkY29tIFBNIERvbWFpbnMKCiMKIyBpLk1YIFBNIERvbWFpbnMKIwojIGVuZCBvZiBp
Lk1YIFBNIERvbWFpbnMKCiMKIyBRdWFsY29tbSBQTSBEb21haW5zCiMKIyBlbmQgb2YgUXVhbGNv
bW0gUE0gRG9tYWlucwojIGVuZCBvZiBQTSBEb21haW5zCgojIENPTkZJR19QTV9ERVZGUkVRIGlz
IG5vdCBzZXQKQ09ORklHX0VYVENPTj15CgojCiMgRXh0Y29uIERldmljZSBEcml2ZXJzCiMKIyBD
T05GSUdfRVhUQ09OX0FEQ19KQUNLIGlzIG5vdCBzZXQKIyBDT05GSUdfRVhUQ09OX0ZTQTk0ODAg
aXMgbm90IHNldAojIENPTkZJR19FWFRDT05fR1BJTyBpcyBub3Qgc2V0CiMgQ09ORklHX0VYVENP
Tl9JTlRFTF9JTlQzNDk2IGlzIG5vdCBzZXQKQ09ORklHX0VYVENPTl9JTlRFTF9DSFRfV0M9eQoj
IENPTkZJR19FWFRDT05fTUFYMzM1NSBpcyBub3Qgc2V0CiMgQ09ORklHX0VYVENPTl9QVE41MTUw
IGlzIG5vdCBzZXQKIyBDT05GSUdfRVhUQ09OX1JUODk3M0EgaXMgbm90IHNldAojIENPTkZJR19F
WFRDT05fU001NTAyIGlzIG5vdCBzZXQKIyBDT05GSUdfRVhUQ09OX1VTQl9HUElPIGlzIG5vdCBz
ZXQKIyBDT05GSUdfRVhUQ09OX1VTQkNfVFVTQjMyMCBpcyBub3Qgc2V0CiMgQ09ORklHX01FTU9S
WSBpcyBub3Qgc2V0CkNPTkZJR19JSU89eQpDT05GSUdfSUlPX0JVRkZFUj15CiMgQ09ORklHX0lJ
T19CVUZGRVJfQ0IgaXMgbm90IHNldAojIENPTkZJR19JSU9fQlVGRkVSX0RNQSBpcyBub3Qgc2V0
CiMgQ09ORklHX0lJT19CVUZGRVJfRE1BRU5HSU5FIGlzIG5vdCBzZXQKIyBDT05GSUdfSUlPX0JV
RkZFUl9IV19DT05TVU1FUiBpcyBub3Qgc2V0CkNPTkZJR19JSU9fS0ZJRk9fQlVGPXkKQ09ORklH
X0lJT19UUklHR0VSRURfQlVGRkVSPXkKIyBDT05GSUdfSUlPX0NPTkZJR0ZTIGlzIG5vdCBzZXQK
Q09ORklHX0lJT19UUklHR0VSPXkKQ09ORklHX0lJT19DT05TVU1FUlNfUEVSX1RSSUdHRVI9Mgoj
IENPTkZJR19JSU9fU1dfREVWSUNFIGlzIG5vdCBzZXQKIyBDT05GSUdfSUlPX1NXX1RSSUdHRVIg
aXMgbm90IHNldAojIENPTkZJR19JSU9fVFJJR0dFUkVEX0VWRU5UIGlzIG5vdCBzZXQKCiMKIyBB
Y2NlbGVyb21ldGVycwojCiMgQ09ORklHX0FESVMxNjIwMSBpcyBub3Qgc2V0CiMgQ09ORklHX0FE
SVMxNjIwOSBpcyBub3Qgc2V0CiMgQ09ORklHX0FEWEwzMTNfSTJDIGlzIG5vdCBzZXQKIyBDT05G
SUdfQURYTDMxM19TUEkgaXMgbm90IHNldAojIENPTkZJR19BRFhMMzQ1X0kyQyBpcyBub3Qgc2V0
CiMgQ09ORklHX0FEWEwzNDVfU1BJIGlzIG5vdCBzZXQKIyBDT05GSUdfQURYTDM1NV9JMkMgaXMg
bm90IHNldAojIENPTkZJR19BRFhMMzU1X1NQSSBpcyBub3Qgc2V0CiMgQ09ORklHX0FEWEwzNjdf
U1BJIGlzIG5vdCBzZXQKIyBDT05GSUdfQURYTDM2N19JMkMgaXMgbm90IHNldAojIENPTkZJR19B
RFhMMzcyX1NQSSBpcyBub3Qgc2V0CiMgQ09ORklHX0FEWEwzNzJfSTJDIGlzIG5vdCBzZXQKIyBD
T05GSUdfQk1BMTgwIGlzIG5vdCBzZXQKIyBDT05GSUdfQk1BMjIwIGlzIG5vdCBzZXQKIyBDT05G
SUdfQk1BNDAwIGlzIG5vdCBzZXQKIyBDT05GSUdfQk1DMTUwX0FDQ0VMIGlzIG5vdCBzZXQKIyBD
T05GSUdfQk1JMDg4X0FDQ0VMIGlzIG5vdCBzZXQKIyBDT05GSUdfREEyODAgaXMgbm90IHNldAoj
IENPTkZJR19EQTMxMSBpcyBub3Qgc2V0CiMgQ09ORklHX0RNQVJEMDYgaXMgbm90IHNldAojIENP
TkZJR19ETUFSRDA5IGlzIG5vdCBzZXQKIyBDT05GSUdfRE1BUkQxMCBpcyBub3Qgc2V0CiMgQ09O
RklHX0ZYTFM4OTYyQUZfSTJDIGlzIG5vdCBzZXQKIyBDT05GSUdfRlhMUzg5NjJBRl9TUEkgaXMg
bm90IHNldApDT05GSUdfSElEX1NFTlNPUl9BQ0NFTF8zRD15CiMgQ09ORklHX0lJT19TVF9BQ0NF
TF8zQVhJUyBpcyBub3Qgc2V0CiMgQ09ORklHX0lJT19LWDAyMkFfU1BJIGlzIG5vdCBzZXQKIyBD
T05GSUdfSUlPX0tYMDIyQV9JMkMgaXMgbm90IHNldAojIENPTkZJR19LWFNEOSBpcyBub3Qgc2V0
CiMgQ09ORklHX0tYQ0pLMTAxMyBpcyBub3Qgc2V0CiMgQ09ORklHX01DMzIzMCBpcyBub3Qgc2V0
CiMgQ09ORklHX01NQTc0NTVfSTJDIGlzIG5vdCBzZXQKIyBDT05GSUdfTU1BNzQ1NV9TUEkgaXMg
bm90IHNldAojIENPTkZJR19NTUE3NjYwIGlzIG5vdCBzZXQKIyBDT05GSUdfTU1BODQ1MiBpcyBu
b3Qgc2V0CiMgQ09ORklHX01NQTk1NTEgaXMgbm90IHNldAojIENPTkZJR19NTUE5NTUzIGlzIG5v
dCBzZXQKIyBDT05GSUdfTVNBMzExIGlzIG5vdCBzZXQKIyBDT05GSUdfTVhDNDAwNSBpcyBub3Qg
c2V0CiMgQ09ORklHX01YQzYyNTUgaXMgbm90IHNldAojIENPTkZJR19TQ0EzMDAwIGlzIG5vdCBz
ZXQKIyBDT05GSUdfU0NBMzMwMCBpcyBub3Qgc2V0CiMgQ09ORklHX1NUSzgzMTIgaXMgbm90IHNl
dAojIENPTkZJR19TVEs4QkE1MCBpcyBub3Qgc2V0CiMgZW5kIG9mIEFjY2VsZXJvbWV0ZXJzCgoj
CiMgQW5hbG9nIHRvIGRpZ2l0YWwgY29udmVydGVycwojCiMgQ09ORklHX0FENDEzMCBpcyBub3Qg
c2V0CiMgQ09ORklHX0FENzA5MVI1IGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ3MDkxUjggaXMgbm90
IHNldAojIENPTkZJR19BRDcxMjQgaXMgbm90IHNldAojIENPTkZJR19BRDcxOTIgaXMgbm90IHNl
dAojIENPTkZJR19BRDcyNjYgaXMgbm90IHNldAojIENPTkZJR19BRDcyODAgaXMgbm90IHNldAoj
IENPTkZJR19BRDcyOTEgaXMgbm90IHNldAojIENPTkZJR19BRDcyOTIgaXMgbm90IHNldAojIENP
TkZJR19BRDcyOTggaXMgbm90IHNldAojIENPTkZJR19BRDc0NzYgaXMgbm90IHNldAojIENPTkZJ
R19BRDc2MDZfSUZBQ0VfUEFSQUxMRUwgaXMgbm90IHNldAojIENPTkZJR19BRDc2MDZfSUZBQ0Vf
U1BJIGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ3NzY2IGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ3NzY4
XzEgaXMgbm90IHNldAojIENPTkZJR19BRDc3ODAgaXMgbm90IHNldAojIENPTkZJR19BRDc3OTEg
aXMgbm90IHNldAojIENPTkZJR19BRDc3OTMgaXMgbm90IHNldAojIENPTkZJR19BRDc4ODcgaXMg
bm90IHNldAojIENPTkZJR19BRDc5MjMgaXMgbm90IHNldAojIENPTkZJR19BRDc5NDkgaXMgbm90
IHNldAojIENPTkZJR19BRDc5OVggaXMgbm90IHNldAojIENPTkZJR19BRElfQVhJX0FEQyBpcyBu
b3Qgc2V0CiMgQ09ORklHX0NDMTAwMDFfQURDIGlzIG5vdCBzZXQKQ09ORklHX0RMTjJfQURDPXkK
IyBDT05GSUdfRU5WRUxPUEVfREVURUNUT1IgaXMgbm90IHNldAojIENPTkZJR19ISTg0MzUgaXMg
bm90IHNldAojIENPTkZJR19IWDcxMSBpcyBub3Qgc2V0CiMgQ09ORklHX0lOQTJYWF9BREMgaXMg
bm90IHNldAojIENPTkZJR19MVEMyMzA5IGlzIG5vdCBzZXQKIyBDT05GSUdfTFRDMjQ3MSBpcyBu
b3Qgc2V0CiMgQ09ORklHX0xUQzI0ODUgaXMgbm90IHNldAojIENPTkZJR19MVEMyNDk2IGlzIG5v
dCBzZXQKIyBDT05GSUdfTFRDMjQ5NyBpcyBub3Qgc2V0CiMgQ09ORklHX01BWDEwMjcgaXMgbm90
IHNldAojIENPTkZJR19NQVgxMTEwMCBpcyBub3Qgc2V0CiMgQ09ORklHX01BWDExMTggaXMgbm90
IHNldAojIENPTkZJR19NQVgxMTIwNSBpcyBub3Qgc2V0CiMgQ09ORklHX01BWDExNDEwIGlzIG5v
dCBzZXQKIyBDT05GSUdfTUFYMTI0MSBpcyBub3Qgc2V0CiMgQ09ORklHX01BWDEzNjMgaXMgbm90
IHNldAojIENPTkZJR19NQVgzNDQwOCBpcyBub3Qgc2V0CiMgQ09ORklHX01BWDk2MTEgaXMgbm90
IHNldAojIENPTkZJR19NQ1AzMjBYIGlzIG5vdCBzZXQKIyBDT05GSUdfTUNQMzQyMiBpcyBub3Qg
c2V0CiMgQ09ORklHX01DUDM1NjQgaXMgbm90IHNldAojIENPTkZJR19NQ1AzOTExIGlzIG5vdCBz
ZXQKIyBDT05GSUdfTkFVNzgwMiBpcyBub3Qgc2V0CiMgQ09ORklHX1JJQ0hURUtfUlRRNjA1NiBp
cyBub3Qgc2V0CiMgQ09ORklHX1NEX0FEQ19NT0RVTEFUT1IgaXMgbm90IHNldAojIENPTkZJR19U
SV9BREMwODFDIGlzIG5vdCBzZXQKIyBDT05GSUdfVElfQURDMDgzMiBpcyBub3Qgc2V0CiMgQ09O
RklHX1RJX0FEQzA4NFMwMjEgaXMgbm90IHNldAojIENPTkZJR19USV9BREMxMjEzOCBpcyBub3Qg
c2V0CiMgQ09ORklHX1RJX0FEQzEwOFMxMDIgaXMgbm90IHNldAojIENPTkZJR19USV9BREMxMjhT
MDUyIGlzIG5vdCBzZXQKIyBDT05GSUdfVElfQURDMTYxUzYyNiBpcyBub3Qgc2V0CiMgQ09ORklH
X1RJX0FEUzEwMTUgaXMgbm90IHNldAojIENPTkZJR19USV9BRFM3OTI0IGlzIG5vdCBzZXQKIyBD
T05GSUdfVElfQURTMTEwMCBpcyBub3Qgc2V0CiMgQ09ORklHX1RJX0FEUzc5NTAgaXMgbm90IHNl
dAojIENPTkZJR19USV9BRFM4MzQ0IGlzIG5vdCBzZXQKIyBDT05GSUdfVElfQURTODY4OCBpcyBu
b3Qgc2V0CiMgQ09ORklHX1RJX0FEUzEyNFMwOCBpcyBub3Qgc2V0CiMgQ09ORklHX1RJX0FEUzEz
MUUwOCBpcyBub3Qgc2V0CiMgQ09ORklHX1RJX0xNUDkyMDY0IGlzIG5vdCBzZXQKIyBDT05GSUdf
VElfVExDNDU0MSBpcyBub3Qgc2V0CiMgQ09ORklHX1RJX1RTQzIwNDYgaXMgbm90IHNldAojIENP
TkZJR19UV0w0MDMwX01BREMgaXMgbm90IHNldAojIENPTkZJR19UV0w2MDMwX0dQQURDIGlzIG5v
dCBzZXQKIyBDT05GSUdfVkY2MTBfQURDIGlzIG5vdCBzZXQKQ09ORklHX1ZJUEVSQk9BUkRfQURD
PXkKIyBDT05GSUdfWElMSU5YX1hBREMgaXMgbm90IHNldAojIGVuZCBvZiBBbmFsb2cgdG8gZGln
aXRhbCBjb252ZXJ0ZXJzCgojCiMgQW5hbG9nIHRvIGRpZ2l0YWwgYW5kIGRpZ2l0YWwgdG8gYW5h
bG9nIGNvbnZlcnRlcnMKIwojIENPTkZJR19BRDc0MTE1IGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ3
NDQxM1IgaXMgbm90IHNldAojIGVuZCBvZiBBbmFsb2cgdG8gZGlnaXRhbCBhbmQgZGlnaXRhbCB0
byBhbmFsb2cgY29udmVydGVycwoKIwojIEFuYWxvZyBGcm9udCBFbmRzCiMKIyBDT05GSUdfSUlP
X1JFU0NBTEUgaXMgbm90IHNldAojIGVuZCBvZiBBbmFsb2cgRnJvbnQgRW5kcwoKIwojIEFtcGxp
ZmllcnMKIwojIENPTkZJR19BRDgzNjYgaXMgbm90IHNldAojIENPTkZJR19BREE0MjUwIGlzIG5v
dCBzZXQKIyBDT05GSUdfSE1DNDI1IGlzIG5vdCBzZXQKIyBlbmQgb2YgQW1wbGlmaWVycwoKIwoj
IENhcGFjaXRhbmNlIHRvIGRpZ2l0YWwgY29udmVydGVycwojCiMgQ09ORklHX0FENzE1MCBpcyBu
b3Qgc2V0CiMgQ09ORklHX0FENzc0NiBpcyBub3Qgc2V0CiMgZW5kIG9mIENhcGFjaXRhbmNlIHRv
IGRpZ2l0YWwgY29udmVydGVycwoKIwojIENoZW1pY2FsIFNlbnNvcnMKIwojIENPTkZJR19BT1NP
TkdfQUdTMDJNQSBpcyBub3Qgc2V0CiMgQ09ORklHX0FUTEFTX1BIX1NFTlNPUiBpcyBub3Qgc2V0
CiMgQ09ORklHX0FUTEFTX0VaT19TRU5TT1IgaXMgbm90IHNldAojIENPTkZJR19CTUU2ODAgaXMg
bm90IHNldAojIENPTkZJR19DQ1M4MTEgaXMgbm90IHNldAojIENPTkZJR19JQVFDT1JFIGlzIG5v
dCBzZXQKIyBDT05GSUdfU0NEMzBfQ09SRSBpcyBub3Qgc2V0CiMgQ09ORklHX1NDRDRYIGlzIG5v
dCBzZXQKIyBDT05GSUdfU0VOU0lSSU9OX1NHUDMwIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU0lS
SU9OX1NHUDQwIGlzIG5vdCBzZXQKIyBDT05GSUdfU1BTMzBfSTJDIGlzIG5vdCBzZXQKIyBDT05G
SUdfU0VOU0VBSVJfU1VOUklTRV9DTzIgaXMgbm90IHNldAojIENPTkZJR19WWjg5WCBpcyBub3Qg
c2V0CiMgZW5kIG9mIENoZW1pY2FsIFNlbnNvcnMKCiMKIyBIaWQgU2Vuc29yIElJTyBDb21tb24K
IwpDT05GSUdfSElEX1NFTlNPUl9JSU9fQ09NTU9OPXkKQ09ORklHX0hJRF9TRU5TT1JfSUlPX1RS
SUdHRVI9eQojIGVuZCBvZiBIaWQgU2Vuc29yIElJTyBDb21tb24KCiMKIyBJSU8gU0NNSSBTZW5z
b3JzCiMKIyBlbmQgb2YgSUlPIFNDTUkgU2Vuc29ycwoKIwojIFNTUCBTZW5zb3IgQ29tbW9uCiMK
IyBDT05GSUdfSUlPX1NTUF9TRU5TT1JIVUIgaXMgbm90IHNldAojIGVuZCBvZiBTU1AgU2Vuc29y
IENvbW1vbgoKIwojIERpZ2l0YWwgdG8gYW5hbG9nIGNvbnZlcnRlcnMKIwojIENPTkZJR19BRDM1
NTJSIGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ1MDY0IGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ1MzYw
IGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ1MzgwIGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ1NDIxIGlz
IG5vdCBzZXQKIyBDT05GSUdfQUQ1NDQ2IGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ1NDQ5IGlzIG5v
dCBzZXQKIyBDT05GSUdfQUQ1NTkyUiBpcyBub3Qgc2V0CiMgQ09ORklHX0FENTU5M1IgaXMgbm90
IHNldAojIENPTkZJR19BRDU1MDQgaXMgbm90IHNldAojIENPTkZJR19BRDU2MjRSX1NQSSBpcyBu
b3Qgc2V0CiMgQ09ORklHX0xUQzI2ODggaXMgbm90IHNldAojIENPTkZJR19BRDU2ODZfU1BJIGlz
IG5vdCBzZXQKIyBDT05GSUdfQUQ1Njk2X0kyQyBpcyBub3Qgc2V0CiMgQ09ORklHX0FENTc1NSBp
cyBub3Qgc2V0CiMgQ09ORklHX0FENTc1OCBpcyBub3Qgc2V0CiMgQ09ORklHX0FENTc2MSBpcyBu
b3Qgc2V0CiMgQ09ORklHX0FENTc2NCBpcyBub3Qgc2V0CiMgQ09ORklHX0FENTc2NiBpcyBub3Qg
c2V0CiMgQ09ORklHX0FENTc3MFIgaXMgbm90IHNldAojIENPTkZJR19BRDU3OTEgaXMgbm90IHNl
dAojIENPTkZJR19BRDcyOTMgaXMgbm90IHNldAojIENPTkZJR19BRDczMDMgaXMgbm90IHNldAoj
IENPTkZJR19BRDg4MDEgaXMgbm90IHNldAojIENPTkZJR19EUE9UX0RBQyBpcyBub3Qgc2V0CiMg
Q09ORklHX0RTNDQyNCBpcyBub3Qgc2V0CiMgQ09ORklHX0xUQzE2NjAgaXMgbm90IHNldAojIENP
TkZJR19MVEMyNjMyIGlzIG5vdCBzZXQKIyBDT05GSUdfTTYyMzMyIGlzIG5vdCBzZXQKIyBDT05G
SUdfTUFYNTE3IGlzIG5vdCBzZXQKIyBDT05GSUdfTUFYNTUyMiBpcyBub3Qgc2V0CiMgQ09ORklH
X01BWDU4MjEgaXMgbm90IHNldAojIENPTkZJR19NQ1A0NzI1IGlzIG5vdCBzZXQKIyBDT05GSUdf
TUNQNDcyOCBpcyBub3Qgc2V0CiMgQ09ORklHX01DUDQ4MjEgaXMgbm90IHNldAojIENPTkZJR19N
Q1A0OTIyIGlzIG5vdCBzZXQKIyBDT05GSUdfVElfREFDMDgyUzA4NSBpcyBub3Qgc2V0CiMgQ09O
RklHX1RJX0RBQzU1NzEgaXMgbm90IHNldAojIENPTkZJR19USV9EQUM3MzExIGlzIG5vdCBzZXQK
IyBDT05GSUdfVElfREFDNzYxMiBpcyBub3Qgc2V0CiMgQ09ORklHX1ZGNjEwX0RBQyBpcyBub3Qg
c2V0CiMgZW5kIG9mIERpZ2l0YWwgdG8gYW5hbG9nIGNvbnZlcnRlcnMKCiMKIyBJSU8gZHVtbXkg
ZHJpdmVyCiMKIyBlbmQgb2YgSUlPIGR1bW15IGRyaXZlcgoKIwojIEZpbHRlcnMKIwojIENPTkZJ
R19BRE1WODgxOCBpcyBub3Qgc2V0CiMgZW5kIG9mIEZpbHRlcnMKCiMKIyBGcmVxdWVuY3kgU3lu
dGhlc2l6ZXJzIEREUy9QTEwKIwoKIwojIENsb2NrIEdlbmVyYXRvci9EaXN0cmlidXRpb24KIwoj
IENPTkZJR19BRDk1MjMgaXMgbm90IHNldAojIGVuZCBvZiBDbG9jayBHZW5lcmF0b3IvRGlzdHJp
YnV0aW9uCgojCiMgUGhhc2UtTG9ja2VkIExvb3AgKFBMTCkgZnJlcXVlbmN5IHN5bnRoZXNpemVy
cwojCiMgQ09ORklHX0FERjQzNTAgaXMgbm90IHNldAojIENPTkZJR19BREY0MzcxIGlzIG5vdCBz
ZXQKIyBDT05GSUdfQURGNDM3NyBpcyBub3Qgc2V0CiMgQ09ORklHX0FETVYxMDEzIGlzIG5vdCBz
ZXQKIyBDT05GSUdfQURNVjEwMTQgaXMgbm90IHNldAojIENPTkZJR19BRE1WNDQyMCBpcyBub3Qg
c2V0CiMgQ09ORklHX0FEUkY2NzgwIGlzIG5vdCBzZXQKIyBlbmQgb2YgUGhhc2UtTG9ja2VkIExv
b3AgKFBMTCkgZnJlcXVlbmN5IHN5bnRoZXNpemVycwojIGVuZCBvZiBGcmVxdWVuY3kgU3ludGhl
c2l6ZXJzIEREUy9QTEwKCiMKIyBEaWdpdGFsIGd5cm9zY29wZSBzZW5zb3JzCiMKIyBDT05GSUdf
QURJUzE2MDgwIGlzIG5vdCBzZXQKIyBDT05GSUdfQURJUzE2MTMwIGlzIG5vdCBzZXQKIyBDT05G
SUdfQURJUzE2MTM2IGlzIG5vdCBzZXQKIyBDT05GSUdfQURJUzE2MjYwIGlzIG5vdCBzZXQKIyBD
T05GSUdfQURYUlMyOTAgaXMgbm90IHNldAojIENPTkZJR19BRFhSUzQ1MCBpcyBub3Qgc2V0CiMg
Q09ORklHX0JNRzE2MCBpcyBub3Qgc2V0CiMgQ09ORklHX0ZYQVMyMTAwMkMgaXMgbm90IHNldApD
T05GSUdfSElEX1NFTlNPUl9HWVJPXzNEPXkKIyBDT05GSUdfTVBVMzA1MF9JMkMgaXMgbm90IHNl
dAojIENPTkZJR19JSU9fU1RfR1lST18zQVhJUyBpcyBub3Qgc2V0CiMgQ09ORklHX0lURzMyMDAg
aXMgbm90IHNldAojIGVuZCBvZiBEaWdpdGFsIGd5cm9zY29wZSBzZW5zb3JzCgojCiMgSGVhbHRo
IFNlbnNvcnMKIwoKIwojIEhlYXJ0IFJhdGUgTW9uaXRvcnMKIwojIENPTkZJR19BRkU0NDAzIGlz
IG5vdCBzZXQKIyBDT05GSUdfQUZFNDQwNCBpcyBub3Qgc2V0CiMgQ09ORklHX01BWDMwMTAwIGlz
IG5vdCBzZXQKIyBDT05GSUdfTUFYMzAxMDIgaXMgbm90IHNldAojIGVuZCBvZiBIZWFydCBSYXRl
IE1vbml0b3JzCiMgZW5kIG9mIEhlYWx0aCBTZW5zb3JzCgojCiMgSHVtaWRpdHkgc2Vuc29ycwoj
CiMgQ09ORklHX0FNMjMxNSBpcyBub3Qgc2V0CiMgQ09ORklHX0RIVDExIGlzIG5vdCBzZXQKIyBD
T05GSUdfSERDMTAwWCBpcyBub3Qgc2V0CiMgQ09ORklHX0hEQzIwMTAgaXMgbm90IHNldAojIENP
TkZJR19IREMzMDIwIGlzIG5vdCBzZXQKQ09ORklHX0hJRF9TRU5TT1JfSFVNSURJVFk9eQojIENP
TkZJR19IVFMyMjEgaXMgbm90IHNldAojIENPTkZJR19IVFUyMSBpcyBub3Qgc2V0CiMgQ09ORklH
X1NJNzAwNSBpcyBub3Qgc2V0CiMgQ09ORklHX1NJNzAyMCBpcyBub3Qgc2V0CiMgZW5kIG9mIEh1
bWlkaXR5IHNlbnNvcnMKCiMKIyBJbmVydGlhbCBtZWFzdXJlbWVudCB1bml0cwojCiMgQ09ORklH
X0FESVMxNjQwMCBpcyBub3Qgc2V0CiMgQ09ORklHX0FESVMxNjQ2MCBpcyBub3Qgc2V0CiMgQ09O
RklHX0FESVMxNjQ3NSBpcyBub3Qgc2V0CiMgQ09ORklHX0FESVMxNjQ4MCBpcyBub3Qgc2V0CiMg
Q09ORklHX0JNSTE2MF9JMkMgaXMgbm90IHNldAojIENPTkZJR19CTUkxNjBfU1BJIGlzIG5vdCBz
ZXQKIyBDT05GSUdfQk1JMzIzX0kyQyBpcyBub3Qgc2V0CiMgQ09ORklHX0JNSTMyM19TUEkgaXMg
bm90IHNldAojIENPTkZJR19CT1NDSF9CTk8wNTVfSTJDIGlzIG5vdCBzZXQKIyBDT05GSUdfRlhP
Uzg3MDBfSTJDIGlzIG5vdCBzZXQKIyBDT05GSUdfRlhPUzg3MDBfU1BJIGlzIG5vdCBzZXQKIyBD
T05GSUdfS01YNjEgaXMgbm90IHNldAojIENPTkZJR19JTlZfSUNNNDI2MDBfSTJDIGlzIG5vdCBz
ZXQKIyBDT05GSUdfSU5WX0lDTTQyNjAwX1NQSSBpcyBub3Qgc2V0CiMgQ09ORklHX0lOVl9NUFU2
MDUwX0kyQyBpcyBub3Qgc2V0CiMgQ09ORklHX0lOVl9NUFU2MDUwX1NQSSBpcyBub3Qgc2V0CiMg
Q09ORklHX0lJT19TVF9MU002RFNYIGlzIG5vdCBzZXQKIyBDT05GSUdfSUlPX1NUX0xTTTlEUzAg
aXMgbm90IHNldAojIGVuZCBvZiBJbmVydGlhbCBtZWFzdXJlbWVudCB1bml0cwoKIwojIExpZ2h0
IHNlbnNvcnMKIwojIENPTkZJR19BQ1BJX0FMUyBpcyBub3Qgc2V0CiMgQ09ORklHX0FESkRfUzMx
MSBpcyBub3Qgc2V0CiMgQ09ORklHX0FEVVgxMDIwIGlzIG5vdCBzZXQKIyBDT05GSUdfQUwzMDEw
IGlzIG5vdCBzZXQKIyBDT05GSUdfQUwzMzIwQSBpcyBub3Qgc2V0CiMgQ09ORklHX0FQRFM5MzAw
IGlzIG5vdCBzZXQKIyBDT05GSUdfQVBEUzk5NjAgaXMgbm90IHNldAojIENPTkZJR19BUzczMjEx
IGlzIG5vdCBzZXQKIyBDT05GSUdfQkgxNzUwIGlzIG5vdCBzZXQKIyBDT05GSUdfQkgxNzgwIGlz
IG5vdCBzZXQKIyBDT05GSUdfQ00zMjE4MSBpcyBub3Qgc2V0CiMgQ09ORklHX0NNMzIzMiBpcyBu
b3Qgc2V0CiMgQ09ORklHX0NNMzMyMyBpcyBub3Qgc2V0CiMgQ09ORklHX0NNMzYwNSBpcyBub3Qg
c2V0CiMgQ09ORklHX0NNMzY2NTEgaXMgbm90IHNldAojIENPTkZJR19HUDJBUDAwMiBpcyBub3Qg
c2V0CiMgQ09ORklHX0dQMkFQMDIwQTAwRiBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfSVNM
MjkwMTggaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0lTTDI5MDI4IGlzIG5vdCBzZXQKIyBD
T05GSUdfSVNMMjkxMjUgaXMgbm90IHNldAojIENPTkZJR19JU0w3NjY4MiBpcyBub3Qgc2V0CkNP
TkZJR19ISURfU0VOU09SX0FMUz15CkNPTkZJR19ISURfU0VOU09SX1BST1g9eQojIENPTkZJR19K
U0ExMjEyIGlzIG5vdCBzZXQKIyBDT05GSUdfUk9ITV9CVTI3MDA4IGlzIG5vdCBzZXQKIyBDT05G
SUdfUk9ITV9CVTI3MDM0IGlzIG5vdCBzZXQKIyBDT05GSUdfUlBSMDUyMSBpcyBub3Qgc2V0CiMg
Q09ORklHX0xUUjM5MCBpcyBub3Qgc2V0CiMgQ09ORklHX0xUUjUwMSBpcyBub3Qgc2V0CiMgQ09O
RklHX0xUUkYyMTZBIGlzIG5vdCBzZXQKIyBDT05GSUdfTFYwMTA0Q1MgaXMgbm90IHNldAojIENP
TkZJR19NQVg0NDAwMCBpcyBub3Qgc2V0CiMgQ09ORklHX01BWDQ0MDA5IGlzIG5vdCBzZXQKIyBD
T05GSUdfTk9BMTMwNSBpcyBub3Qgc2V0CiMgQ09ORklHX09QVDMwMDEgaXMgbm90IHNldAojIENP
TkZJR19PUFQ0MDAxIGlzIG5vdCBzZXQKIyBDT05GSUdfUEExMjIwMzAwMSBpcyBub3Qgc2V0CiMg
Q09ORklHX1NJMTEzMyBpcyBub3Qgc2V0CiMgQ09ORklHX1NJMTE0NSBpcyBub3Qgc2V0CiMgQ09O
RklHX1NUSzMzMTAgaXMgbm90IHNldAojIENPTkZJR19TVF9VVklTMjUgaXMgbm90IHNldAojIENP
TkZJR19UQ1MzNDE0IGlzIG5vdCBzZXQKIyBDT05GSUdfVENTMzQ3MiBpcyBub3Qgc2V0CiMgQ09O
RklHX1NFTlNPUlNfVFNMMjU2MyBpcyBub3Qgc2V0CiMgQ09ORklHX1RTTDI1ODMgaXMgbm90IHNl
dAojIENPTkZJR19UU0wyNTkxIGlzIG5vdCBzZXQKIyBDT05GSUdfVFNMMjc3MiBpcyBub3Qgc2V0
CiMgQ09ORklHX1RTTDQ1MzEgaXMgbm90IHNldAojIENPTkZJR19VUzUxODJEIGlzIG5vdCBzZXQK
IyBDT05GSUdfVkNOTDQwMDAgaXMgbm90IHNldAojIENPTkZJR19WQ05MNDAzNSBpcyBub3Qgc2V0
CiMgQ09ORklHX1ZFTUw2MDMwIGlzIG5vdCBzZXQKIyBDT05GSUdfVkVNTDYwNzAgaXMgbm90IHNl
dAojIENPTkZJR19WRU1MNjA3NSBpcyBub3Qgc2V0CiMgQ09ORklHX1ZMNjE4MCBpcyBub3Qgc2V0
CiMgQ09ORklHX1pPUFQyMjAxIGlzIG5vdCBzZXQKIyBlbmQgb2YgTGlnaHQgc2Vuc29ycwoKIwoj
IE1hZ25ldG9tZXRlciBzZW5zb3JzCiMKIyBDT05GSUdfQUs4OTc0IGlzIG5vdCBzZXQKIyBDT05G
SUdfQUs4OTc1IGlzIG5vdCBzZXQKIyBDT05GSUdfQUswOTkxMSBpcyBub3Qgc2V0CiMgQ09ORklH
X0JNQzE1MF9NQUdOX0kyQyBpcyBub3Qgc2V0CiMgQ09ORklHX0JNQzE1MF9NQUdOX1NQSSBpcyBu
b3Qgc2V0CiMgQ09ORklHX01BRzMxMTAgaXMgbm90IHNldApDT05GSUdfSElEX1NFTlNPUl9NQUdO
RVRPTUVURVJfM0Q9eQojIENPTkZJR19NTUMzNTI0MCBpcyBub3Qgc2V0CiMgQ09ORklHX0lJT19T
VF9NQUdOXzNBWElTIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19ITUM1ODQzX0kyQyBpcyBu
b3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfSE1DNTg0M19TUEkgaXMgbm90IHNldAojIENPTkZJR19T
RU5TT1JTX1JNMzEwMF9JMkMgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX1JNMzEwMF9TUEkg
aXMgbm90IHNldAojIENPTkZJR19USV9UTUFHNTI3MyBpcyBub3Qgc2V0CiMgQ09ORklHX1lBTUFI
QV9ZQVM1MzAgaXMgbm90IHNldAojIGVuZCBvZiBNYWduZXRvbWV0ZXIgc2Vuc29ycwoKIwojIE11
bHRpcGxleGVycwojCiMgQ09ORklHX0lJT19NVVggaXMgbm90IHNldAojIGVuZCBvZiBNdWx0aXBs
ZXhlcnMKCiMKIyBJbmNsaW5vbWV0ZXIgc2Vuc29ycwojCkNPTkZJR19ISURfU0VOU09SX0lOQ0xJ
Tk9NRVRFUl8zRD15CkNPTkZJR19ISURfU0VOU09SX0RFVklDRV9ST1RBVElPTj15CiMgZW5kIG9m
IEluY2xpbm9tZXRlciBzZW5zb3JzCgojCiMgVHJpZ2dlcnMgLSBzdGFuZGFsb25lCiMKIyBDT05G
SUdfSUlPX0lOVEVSUlVQVF9UUklHR0VSIGlzIG5vdCBzZXQKIyBDT05GSUdfSUlPX1NZU0ZTX1RS
SUdHRVIgaXMgbm90IHNldAojIGVuZCBvZiBUcmlnZ2VycyAtIHN0YW5kYWxvbmUKCiMKIyBMaW5l
YXIgYW5kIGFuZ3VsYXIgcG9zaXRpb24gc2Vuc29ycwojCiMgQ09ORklHX0hJRF9TRU5TT1JfQ1VT
VE9NX0lOVEVMX0hJTkdFIGlzIG5vdCBzZXQKIyBlbmQgb2YgTGluZWFyIGFuZCBhbmd1bGFyIHBv
c2l0aW9uIHNlbnNvcnMKCiMKIyBEaWdpdGFsIHBvdGVudGlvbWV0ZXJzCiMKIyBDT05GSUdfQUQ1
MTEwIGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ1MjcyIGlzIG5vdCBzZXQKIyBDT05GSUdfRFMxODAz
IGlzIG5vdCBzZXQKIyBDT05GSUdfTUFYNTQzMiBpcyBub3Qgc2V0CiMgQ09ORklHX01BWDU0ODEg
aXMgbm90IHNldAojIENPTkZJR19NQVg1NDg3IGlzIG5vdCBzZXQKIyBDT05GSUdfTUNQNDAxOCBp
cyBub3Qgc2V0CiMgQ09ORklHX01DUDQxMzEgaXMgbm90IHNldAojIENPTkZJR19NQ1A0NTMxIGlz
IG5vdCBzZXQKIyBDT05GSUdfTUNQNDEwMTAgaXMgbm90IHNldAojIENPTkZJR19UUEwwMTAyIGlz
IG5vdCBzZXQKIyBDT05GSUdfWDkyNTAgaXMgbm90IHNldAojIGVuZCBvZiBEaWdpdGFsIHBvdGVu
dGlvbWV0ZXJzCgojCiMgRGlnaXRhbCBwb3RlbnRpb3N0YXRzCiMKIyBDT05GSUdfTE1QOTEwMDAg
aXMgbm90IHNldAojIGVuZCBvZiBEaWdpdGFsIHBvdGVudGlvc3RhdHMKCiMKIyBQcmVzc3VyZSBz
ZW5zb3JzCiMKIyBDT05GSUdfQUJQMDYwTUcgaXMgbm90IHNldAojIENPTkZJR19ST0hNX0JNMTM5
MCBpcyBub3Qgc2V0CiMgQ09ORklHX0JNUDI4MCBpcyBub3Qgc2V0CiMgQ09ORklHX0RMSEw2MEQg
aXMgbm90IHNldAojIENPTkZJR19EUFMzMTAgaXMgbm90IHNldApDT05GSUdfSElEX1NFTlNPUl9Q
UkVTUz15CiMgQ09ORklHX0hQMDMgaXMgbm90IHNldAojIENPTkZJR19IU0MwMzBQQSBpcyBub3Qg
c2V0CiMgQ09ORklHX0lDUDEwMTAwIGlzIG5vdCBzZXQKIyBDT05GSUdfTVBMMTE1X0kyQyBpcyBu
b3Qgc2V0CiMgQ09ORklHX01QTDExNV9TUEkgaXMgbm90IHNldAojIENPTkZJR19NUEwzMTE1IGlz
IG5vdCBzZXQKIyBDT05GSUdfTVBSTFMwMDI1UEEgaXMgbm90IHNldAojIENPTkZJR19NUzU2MTEg
aXMgbm90IHNldAojIENPTkZJR19NUzU2MzcgaXMgbm90IHNldAojIENPTkZJR19JSU9fU1RfUFJF
U1MgaXMgbm90IHNldAojIENPTkZJR19UNTQwMyBpcyBub3Qgc2V0CiMgQ09ORklHX0hQMjA2QyBp
cyBub3Qgc2V0CiMgQ09ORklHX1pQQTIzMjYgaXMgbm90IHNldAojIGVuZCBvZiBQcmVzc3VyZSBz
ZW5zb3JzCgojCiMgTGlnaHRuaW5nIHNlbnNvcnMKIwojIENPTkZJR19BUzM5MzUgaXMgbm90IHNl
dAojIGVuZCBvZiBMaWdodG5pbmcgc2Vuc29ycwoKIwojIFByb3hpbWl0eSBhbmQgZGlzdGFuY2Ug
c2Vuc29ycwojCiMgQ09ORklHX0lSU0QyMDAgaXMgbm90IHNldAojIENPTkZJR19JU0wyOTUwMSBp
cyBub3Qgc2V0CiMgQ09ORklHX0xJREFSX0xJVEVfVjIgaXMgbm90IHNldAojIENPTkZJR19NQjEy
MzIgaXMgbm90IHNldAojIENPTkZJR19QSU5HIGlzIG5vdCBzZXQKIyBDT05GSUdfUkZENzc0MDIg
aXMgbm90IHNldAojIENPTkZJR19TUkYwNCBpcyBub3Qgc2V0CiMgQ09ORklHX1NYOTMxMCBpcyBu
b3Qgc2V0CiMgQ09ORklHX1NYOTMyNCBpcyBub3Qgc2V0CiMgQ09ORklHX1NYOTM2MCBpcyBub3Qg
c2V0CiMgQ09ORklHX1NYOTUwMCBpcyBub3Qgc2V0CiMgQ09ORklHX1NSRjA4IGlzIG5vdCBzZXQK
IyBDT05GSUdfVkNOTDMwMjAgaXMgbm90IHNldAojIENPTkZJR19WTDUzTDBYX0kyQyBpcyBub3Qg
c2V0CiMgZW5kIG9mIFByb3hpbWl0eSBhbmQgZGlzdGFuY2Ugc2Vuc29ycwoKIwojIFJlc29sdmVy
IHRvIGRpZ2l0YWwgY29udmVydGVycwojCiMgQ09ORklHX0FEMlM5MCBpcyBub3Qgc2V0CiMgQ09O
RklHX0FEMlMxMjAwIGlzIG5vdCBzZXQKIyBDT05GSUdfQUQyUzEyMTAgaXMgbm90IHNldAojIGVu
ZCBvZiBSZXNvbHZlciB0byBkaWdpdGFsIGNvbnZlcnRlcnMKCiMKIyBUZW1wZXJhdHVyZSBzZW5z
b3JzCiMKIyBDT05GSUdfTFRDMjk4MyBpcyBub3Qgc2V0CiMgQ09ORklHX01BWElNX1RIRVJNT0NP
VVBMRSBpcyBub3Qgc2V0CkNPTkZJR19ISURfU0VOU09SX1RFTVA9eQojIENPTkZJR19NTFg5MDYx
NCBpcyBub3Qgc2V0CiMgQ09ORklHX01MWDkwNjMyIGlzIG5vdCBzZXQKIyBDT05GSUdfTUxYOTA2
MzUgaXMgbm90IHNldAojIENPTkZJR19UTVAwMDYgaXMgbm90IHNldAojIENPTkZJR19UTVAwMDcg
aXMgbm90IHNldAojIENPTkZJR19UTVAxMTcgaXMgbm90IHNldAojIENPTkZJR19UU1lTMDEgaXMg
bm90IHNldAojIENPTkZJR19UU1lTMDJEIGlzIG5vdCBzZXQKIyBDT05GSUdfTUFYMzAyMDggaXMg
bm90IHNldAojIENPTkZJR19NQVgzMTg1NiBpcyBub3Qgc2V0CiMgQ09ORklHX01BWDMxODY1IGlz
IG5vdCBzZXQKIyBDT05GSUdfTUNQOTYwMCBpcyBub3Qgc2V0CiMgZW5kIG9mIFRlbXBlcmF0dXJl
IHNlbnNvcnMKCiMgQ09ORklHX05UQiBpcyBub3Qgc2V0CiMgQ09ORklHX1BXTSBpcyBub3Qgc2V0
CgojCiMgSVJRIGNoaXAgc3VwcG9ydAojCkNPTkZJR19JUlFDSElQPXkKIyBDT05GSUdfQUxfRklD
IGlzIG5vdCBzZXQKIyBDT05GSUdfWElMSU5YX0lOVEMgaXMgbm90IHNldAojIGVuZCBvZiBJUlEg
Y2hpcCBzdXBwb3J0CgojIENPTkZJR19JUEFDS19CVVMgaXMgbm90IHNldApDT05GSUdfUkVTRVRf
Q09OVFJPTExFUj15CiMgQ09ORklHX1JFU0VUX0lOVEVMX0dXIGlzIG5vdCBzZXQKIyBDT05GSUdf
UkVTRVRfU0lNUExFIGlzIG5vdCBzZXQKIyBDT05GSUdfUkVTRVRfVElfU1lTQ09OIGlzIG5vdCBz
ZXQKIyBDT05GSUdfUkVTRVRfVElfVFBTMzgwWCBpcyBub3Qgc2V0CgojCiMgUEhZIFN1YnN5c3Rl
bQojCkNPTkZJR19HRU5FUklDX1BIWT15CiMgQ09ORklHX1VTQl9MR01fUEhZIGlzIG5vdCBzZXQK
IyBDT05GSUdfUEhZX0NBTl9UUkFOU0NFSVZFUiBpcyBub3Qgc2V0CgojCiMgUEhZIGRyaXZlcnMg
Zm9yIEJyb2FkY29tIHBsYXRmb3JtcwojCiMgQ09ORklHX0JDTV9LT05BX1VTQjJfUEhZIGlzIG5v
dCBzZXQKIyBlbmQgb2YgUEhZIGRyaXZlcnMgZm9yIEJyb2FkY29tIHBsYXRmb3JtcwoKIyBDT05G
SUdfUEhZX0NBREVOQ0VfVE9SUkVOVCBpcyBub3Qgc2V0CiMgQ09ORklHX1BIWV9DQURFTkNFX0RQ
SFkgaXMgbm90IHNldAojIENPTkZJR19QSFlfQ0FERU5DRV9EUEhZX1JYIGlzIG5vdCBzZXQKIyBD
T05GSUdfUEhZX0NBREVOQ0VfU0lFUlJBIGlzIG5vdCBzZXQKIyBDT05GSUdfUEhZX0NBREVOQ0Vf
U0FMVk8gaXMgbm90IHNldAojIENPTkZJR19QSFlfUFhBXzI4Tk1fSFNJQyBpcyBub3Qgc2V0CiMg
Q09ORklHX1BIWV9QWEFfMjhOTV9VU0IyIGlzIG5vdCBzZXQKIyBDT05GSUdfUEhZX0xBTjk2Nlhf
U0VSREVTIGlzIG5vdCBzZXQKQ09ORklHX1BIWV9DUENBUF9VU0I9eQojIENPTkZJR19QSFlfTUFQ
UEhPTkVfTURNNjYwMCBpcyBub3Qgc2V0CiMgQ09ORklHX1BIWV9PQ0VMT1RfU0VSREVTIGlzIG5v
dCBzZXQKQ09ORklHX1BIWV9RQ09NX1VTQl9IUz15CkNPTkZJR19QSFlfUUNPTV9VU0JfSFNJQz15
CkNPTkZJR19QSFlfU0FNU1VOR19VU0IyPXkKQ09ORklHX1BIWV9UVVNCMTIxMD15CiMgQ09ORklH
X1BIWV9JTlRFTF9MR01fQ09NQk8gaXMgbm90IHNldAojIENPTkZJR19QSFlfSU5URUxfTEdNX0VN
TUMgaXMgbm90IHNldAojIGVuZCBvZiBQSFkgU3Vic3lzdGVtCgojIENPTkZJR19QT1dFUkNBUCBp
cyBub3Qgc2V0CiMgQ09ORklHX01DQiBpcyBub3Qgc2V0CgojCiMgUGVyZm9ybWFuY2UgbW9uaXRv
ciBzdXBwb3J0CiMKIyBDT05GSUdfRFdDX1BDSUVfUE1VIGlzIG5vdCBzZXQKIyBlbmQgb2YgUGVy
Zm9ybWFuY2UgbW9uaXRvciBzdXBwb3J0CgpDT05GSUdfUkFTPXkKIyBDT05GSUdfVVNCNCBpcyBu
b3Qgc2V0CgojCiMgQW5kcm9pZAojCiMgQ09ORklHX0FORFJPSURfQklOREVSX0lQQyBpcyBub3Qg
c2V0CiMgZW5kIG9mIEFuZHJvaWQKCiMgQ09ORklHX0xJQk5WRElNTSBpcyBub3Qgc2V0CiMgQ09O
RklHX0RBWCBpcyBub3Qgc2V0CkNPTkZJR19OVk1FTT15CkNPTkZJR19OVk1FTV9TWVNGUz15CkNP
TkZJR19OVk1FTV9MQVlPVVRTPXkKCiMKIyBMYXlvdXQgVHlwZXMKIwojIENPTkZJR19OVk1FTV9M
QVlPVVRfU0wyOF9WUEQgaXMgbm90IHNldAojIENPTkZJR19OVk1FTV9MQVlPVVRfT05JRV9UTFYg
aXMgbm90IHNldAojIGVuZCBvZiBMYXlvdXQgVHlwZXMKCiMgQ09ORklHX05WTUVNX1JNRU0gaXMg
bm90IHNldAoKIwojIEhXIHRyYWNpbmcgc3VwcG9ydAojCiMgQ09ORklHX1NUTSBpcyBub3Qgc2V0
CiMgQ09ORklHX0lOVEVMX1RIIGlzIG5vdCBzZXQKIyBlbmQgb2YgSFcgdHJhY2luZyBzdXBwb3J0
CgojIENPTkZJR19GUEdBIGlzIG5vdCBzZXQKIyBDT05GSUdfRlNJIGlzIG5vdCBzZXQKIyBDT05G
SUdfVEVFIGlzIG5vdCBzZXQKIyBDT05GSUdfU0lPWCBpcyBub3Qgc2V0CiMgQ09ORklHX1NMSU1C
VVMgaXMgbm90IHNldAojIENPTkZJR19JTlRFUkNPTk5FQ1QgaXMgbm90IHNldAojIENPTkZJR19D
T1VOVEVSIGlzIG5vdCBzZXQKQ09ORklHX01PU1Q9eQojIENPTkZJR19NT1NUX1VTQl9IRE0gaXMg
bm90IHNldAojIENPTkZJR19NT1NUX0NERVYgaXMgbm90IHNldAojIENPTkZJR19NT1NUX1NORCBp
cyBub3Qgc2V0CiMgQ09ORklHX1BFQ0kgaXMgbm90IHNldAojIENPTkZJR19IVEUgaXMgbm90IHNl
dAojIGVuZCBvZiBEZXZpY2UgRHJpdmVycwoKIwojIEZpbGUgc3lzdGVtcwojCkNPTkZJR19EQ0FD
SEVfV09SRF9BQ0NFU1M9eQojIENPTkZJR19WQUxJREFURV9GU19QQVJTRVIgaXMgbm90IHNldApD
T05GSUdfRlNfSU9NQVA9eQpDT05GSUdfQlVGRkVSX0hFQUQ9eQpDT05GSUdfTEVHQUNZX0RJUkVD
VF9JTz15CiMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAojIENPTkZJR19FWFQzX0ZTIGlzIG5v
dCBzZXQKQ09ORklHX0VYVDRfRlM9eQpDT05GSUdfRVhUNF9VU0VfRk9SX0VYVDI9eQpDT05GSUdf
RVhUNF9GU19QT1NJWF9BQ0w9eQpDT05GSUdfRVhUNF9GU19TRUNVUklUWT15CiMgQ09ORklHX0VY
VDRfREVCVUcgaXMgbm90IHNldApDT05GSUdfSkJEMj15CiMgQ09ORklHX0pCRDJfREVCVUcgaXMg
bm90IHNldApDT05GSUdfRlNfTUJDQUNIRT15CiMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBz
ZXQKIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQK
IyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQK
IyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAojIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNl
dAojIENPTkZJR19GMkZTX0ZTIGlzIG5vdCBzZXQKIyBDT05GSUdfQkNBQ0hFRlNfRlMgaXMgbm90
IHNldApDT05GSUdfRlNfUE9TSVhfQUNMPXkKQ09ORklHX0VYUE9SVEZTPXkKIyBDT05GSUdfRVhQ
T1JURlNfQkxPQ0tfT1BTIGlzIG5vdCBzZXQKQ09ORklHX0ZJTEVfTE9DS0lORz15CiMgQ09ORklH
X0ZTX0VOQ1JZUFRJT04gaXMgbm90IHNldAojIENPTkZJR19GU19WRVJJVFkgaXMgbm90IHNldApD
T05GSUdfRlNOT1RJRlk9eQpDT05GSUdfRE5PVElGWT15CkNPTkZJR19JTk9USUZZX1VTRVI9eQoj
IENPTkZJR19GQU5PVElGWSBpcyBub3Qgc2V0CkNPTkZJR19RVU9UQT15CkNPTkZJR19RVU9UQV9O
RVRMSU5LX0lOVEVSRkFDRT15CiMgQ09ORklHX1FVT1RBX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklH
X1FVT1RBX1RSRUU9eQojIENPTkZJR19RRk1UX1YxIGlzIG5vdCBzZXQKQ09ORklHX1FGTVRfVjI9
eQpDT05GSUdfUVVPVEFDVEw9eQpDT05GSUdfQVVUT0ZTX0ZTPXkKIyBDT05GSUdfRlVTRV9GUyBp
cyBub3Qgc2V0CiMgQ09ORklHX09WRVJMQVlfRlMgaXMgbm90IHNldAoKIwojIENhY2hlcwojCkNP
TkZJR19ORVRGU19TVVBQT1JUPXkKIyBDT05GSUdfTkVURlNfU1RBVFMgaXMgbm90IHNldAojIENP
TkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKIyBlbmQgb2YgQ2FjaGVzCgojCiMgQ0QtUk9NL0RWRCBG
aWxlc3lzdGVtcwojCkNPTkZJR19JU085NjYwX0ZTPXkKQ09ORklHX0pPTElFVD15CkNPTkZJR19a
SVNPRlM9eQojIENPTkZJR19VREZfRlMgaXMgbm90IHNldAojIGVuZCBvZiBDRC1ST00vRFZEIEZp
bGVzeXN0ZW1zCgojCiMgRE9TL0ZBVC9FWEZBVC9OVCBGaWxlc3lzdGVtcwojCkNPTkZJR19GQVRf
RlM9eQpDT05GSUdfTVNET1NfRlM9eQpDT05GSUdfVkZBVF9GUz15CkNPTkZJR19GQVRfREVGQVVM
VF9DT0RFUEFHRT00MzcKQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgoj
IENPTkZJR19GQVRfREVGQVVMVF9VVEY4IGlzIG5vdCBzZXQKIyBDT05GSUdfRVhGQVRfRlMgaXMg
bm90IHNldAojIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKIyBDT05GSUdfTlRGUzNfRlMgaXMg
bm90IHNldAojIGVuZCBvZiBET1MvRkFUL0VYRkFUL05UIEZpbGVzeXN0ZW1zCgojCiMgUHNldWRv
IGZpbGVzeXN0ZW1zCiMKQ09ORklHX1BST0NfRlM9eQpDT05GSUdfUFJPQ19LQ09SRT15CkNPTkZJ
R19QUk9DX1ZNQ09SRT15CiMgQ09ORklHX1BST0NfVk1DT1JFX0RFVklDRV9EVU1QIGlzIG5vdCBz
ZXQKQ09ORklHX1BST0NfU1lTQ1RMPXkKQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKIyBDT05G
SUdfUFJPQ19DSElMRFJFTiBpcyBub3Qgc2V0CkNPTkZJR19QUk9DX1BJRF9BUkNIX1NUQVRVUz15
CkNPTkZJR19LRVJORlM9eQpDT05GSUdfU1lTRlM9eQpDT05GSUdfVE1QRlM9eQpDT05GSUdfVE1Q
RlNfUE9TSVhfQUNMPXkKQ09ORklHX1RNUEZTX1hBVFRSPXkKIyBDT05GSUdfVE1QRlNfSU5PREU2
NCBpcyBub3Qgc2V0CiMgQ09ORklHX1RNUEZTX1FVT1RBIGlzIG5vdCBzZXQKQ09ORklHX0hVR0VU
TEJGUz15CiMgQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT04g
aXMgbm90IHNldApDT05GSUdfSFVHRVRMQl9QQUdFPXkKQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJ
TUlaRV9WTUVNTUFQPXkKQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0U9eQpDT05GSUdfQ09O
RklHRlNfRlM9eQojIGVuZCBvZiBQc2V1ZG8gZmlsZXN5c3RlbXMKCkNPTkZJR19NSVNDX0ZJTEVT
WVNURU1TPXkKIyBDT05GSUdfT1JBTkdFRlNfRlMgaXMgbm90IHNldAojIENPTkZJR19BREZTX0ZT
IGlzIG5vdCBzZXQKIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CiMgQ09ORklHX0VDUllQVF9G
UyBpcyBub3Qgc2V0CiMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CiMgQ09ORklHX0hGU1BMVVNf
RlMgaXMgbm90IHNldAojIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKIyBDT05GSUdfQkZTX0ZT
IGlzIG5vdCBzZXQKIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JBTUZTIGlz
IG5vdCBzZXQKIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAojIENPTkZJR19WWEZTX0ZTIGlz
IG5vdCBzZXQKIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAojIENPTkZJR19PTUZTX0ZTIGlz
IG5vdCBzZXQKIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CiMgQ09ORklHX1FOWDRGU19GUyBp
cyBub3Qgc2V0CiMgQ09ORklHX1FOWDZGU19GUyBpcyBub3Qgc2V0CiMgQ09ORklHX1JPTUZTX0ZT
IGlzIG5vdCBzZXQKIyBDT05GSUdfUFNUT1JFIGlzIG5vdCBzZXQKIyBDT05GSUdfU1lTVl9GUyBp
cyBub3Qgc2V0CiMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CiMgQ09ORklHX0VST0ZTX0ZTIGlz
IG5vdCBzZXQKQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQpDT05GSUdfTkZTX0ZTPXkKQ09O
RklHX05GU19WMj15CkNPTkZJR19ORlNfVjM9eQpDT05GSUdfTkZTX1YzX0FDTD15CkNPTkZJR19O
RlNfVjQ9eQojIENPTkZJR19ORlNfU1dBUCBpcyBub3Qgc2V0CiMgQ09ORklHX05GU19WNF8xIGlz
IG5vdCBzZXQKQ09ORklHX1JPT1RfTkZTPXkKIyBDT05GSUdfTkZTX0ZTQ0FDSEUgaXMgbm90IHNl
dAojIENPTkZJR19ORlNfVVNFX0xFR0FDWV9ETlMgaXMgbm90IHNldApDT05GSUdfTkZTX1VTRV9L
RVJORUxfRE5TPXkKQ09ORklHX05GU19ESVNBQkxFX1VEUF9TVVBQT1JUPXkKIyBDT05GSUdfTkZT
RCBpcyBub3Qgc2V0CkNPTkZJR19HUkFDRV9QRVJJT0Q9eQpDT05GSUdfTE9DS0Q9eQpDT05GSUdf
TE9DS0RfVjQ9eQpDT05GSUdfTkZTX0FDTF9TVVBQT1JUPXkKQ09ORklHX05GU19DT01NT049eQpD
T05GSUdfU1VOUlBDPXkKQ09ORklHX1NVTlJQQ19HU1M9eQpDT05GSUdfUlBDU0VDX0dTU19LUkI1
PXkKIyBDT05GSUdfU1VOUlBDX0RFQlVHIGlzIG5vdCBzZXQKIyBDT05GSUdfQ0VQSF9GUyBpcyBu
b3Qgc2V0CiMgQ09ORklHX0NJRlMgaXMgbm90IHNldAojIENPTkZJR19TTUJfU0VSVkVSIGlzIG5v
dCBzZXQKIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CiMgQ09ORklHX0FGU19GUyBpcyBub3Qg
c2V0CkNPTkZJR185UF9GUz15CiMgQ09ORklHXzlQX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiMg
Q09ORklHXzlQX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKQ09ORklHX05MUz15CkNPTkZJR19OTFNf
REVGQVVMVD0idXRmOCIKQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQojIENPTkZJR19OTFNfQ09E
RVBBR0VfNzM3IGlzIG5vdCBzZXQKIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0
CiMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAojIENPTkZJR19OTFNfQ09ERVBB
R0VfODUyIGlzIG5vdCBzZXQKIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CiMg
Q09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAojIENPTkZJR19OTFNfQ09ERVBBR0Vf
ODYwIGlzIG5vdCBzZXQKIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CiMgQ09O
RklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAojIENPTkZJR19OTFNfQ09ERVBBR0VfODYz
IGlzIG5vdCBzZXQKIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CiMgQ09ORklH
X05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAojIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlz
IG5vdCBzZXQKIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CiMgQ09ORklHX05M
U19DT0RFUEFHRV85MzYgaXMgbm90IHNldAojIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5v
dCBzZXQKIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CiMgQ09ORklHX05MU19D
T0RFUEFHRV85NDkgaXMgbm90IHNldAojIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBz
ZXQKIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CiMgQ09ORklHX05MU19DT0RFUEFH
RV8xMjUwIGlzIG5vdCBzZXQKIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldApD
T05GSUdfTkxTX0FTQ0lJPXkKQ09ORklHX05MU19JU084ODU5XzE9eQojIENPTkZJR19OTFNfSVNP
ODg1OV8yIGlzIG5vdCBzZXQKIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CiMgQ09O
RklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAojIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5v
dCBzZXQKIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CiMgQ09ORklHX05MU19JU084
ODU5XzcgaXMgbm90IHNldAojIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKIyBDT05G
SUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAojIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBu
b3Qgc2V0CiMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKIyBDT05GSUdfTkxTX0tP
SThfUiBpcyBub3Qgc2V0CiMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAojIENPTkZJR19O
TFNfTUFDX1JPTUFOIGlzIG5vdCBzZXQKIyBDT05GSUdfTkxTX01BQ19DRUxUSUMgaXMgbm90IHNl
dAojIENPTkZJR19OTFNfTUFDX0NFTlRFVVJPIGlzIG5vdCBzZXQKIyBDT05GSUdfTkxTX01BQ19D
Uk9BVElBTiBpcyBub3Qgc2V0CiMgQ09ORklHX05MU19NQUNfQ1lSSUxMSUMgaXMgbm90IHNldAoj
IENPTkZJR19OTFNfTUFDX0dBRUxJQyBpcyBub3Qgc2V0CiMgQ09ORklHX05MU19NQUNfR1JFRUsg
aXMgbm90IHNldAojIENPTkZJR19OTFNfTUFDX0lDRUxBTkQgaXMgbm90IHNldAojIENPTkZJR19O
TFNfTUFDX0lOVUlUIGlzIG5vdCBzZXQKIyBDT05GSUdfTkxTX01BQ19ST01BTklBTiBpcyBub3Qg
c2V0CiMgQ09ORklHX05MU19NQUNfVFVSS0lTSCBpcyBub3Qgc2V0CkNPTkZJR19OTFNfVVRGOD15
CiMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CiMgQ09ORklHX1VOSUNPREUgaXMgbm90IHNldApDT05G
SUdfSU9fV1E9eQojIGVuZCBvZiBGaWxlIHN5c3RlbXMKCiMKIyBTZWN1cml0eSBvcHRpb25zCiMK
Q09ORklHX0tFWVM9eQojIENPTkZJR19LRVlTX1JFUVVFU1RfQ0FDSEUgaXMgbm90IHNldAojIENP
TkZJR19QRVJTSVNURU5UX0tFWVJJTkdTIGlzIG5vdCBzZXQKIyBDT05GSUdfVFJVU1RFRF9LRVlT
IGlzIG5vdCBzZXQKQ09ORklHX0VOQ1JZUFRFRF9LRVlTPXkKIyBDT05GSUdfVVNFUl9ERUNSWVBU
RURfREFUQSBpcyBub3Qgc2V0CiMgQ09ORklHX0tFWV9ESF9PUEVSQVRJT05TIGlzIG5vdCBzZXQK
IyBDT05GSUdfU0VDVVJJVFlfRE1FU0dfUkVTVFJJQ1QgaXMgbm90IHNldApDT05GSUdfU0VDVVJJ
VFk9eQpDT05GSUdfU0VDVVJJVFlGUz15CkNPTkZJR19TRUNVUklUWV9ORVRXT1JLPXkKQ09ORklH
X1NFQ1VSSVRZX05FVFdPUktfWEZSTT15CkNPTkZJR19TRUNVUklUWV9QQVRIPXkKIyBDT05GSUdf
SU5URUxfVFhUIGlzIG5vdCBzZXQKQ09ORklHX0hBUkRFTkVEX1VTRVJDT1BZPXkKQ09ORklHX0ZP
UlRJRllfU09VUkNFPXkKIyBDT05GSUdfU1RBVElDX1VTRVJNT0RFSEVMUEVSIGlzIG5vdCBzZXQK
IyBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFQ1VSSVRZX1NN
QUNLIGlzIG5vdCBzZXQKQ09ORklHX1NFQ1VSSVRZX1RPTU9ZTz15CkNPTkZJR19TRUNVUklUWV9U
T01PWU9fTUFYX0FDQ0VQVF9FTlRSWT02NApDT05GSUdfU0VDVVJJVFlfVE9NT1lPX01BWF9BVURJ
VF9MT0c9MzIKQ09ORklHX1NFQ1VSSVRZX1RPTU9ZT19PTUlUX1VTRVJTUEFDRV9MT0FERVI9eQpD
T05GSUdfU0VDVVJJVFlfVE9NT1lPX0lOU0VDVVJFX0JVSUxUSU5fU0VUVElORz15CkNPTkZJR19T
RUNVUklUWV9BUFBBUk1PUj15CkNPTkZJR19TRUNVUklUWV9BUFBBUk1PUl9ERUJVRz15CkNPTkZJ
R19TRUNVUklUWV9BUFBBUk1PUl9ERUJVR19BU1NFUlRTPXkKIyBDT05GSUdfU0VDVVJJVFlfQVBQ
QVJNT1JfREVCVUdfTUVTU0FHRVMgaXMgbm90IHNldApDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1Jf
SU5UUk9TUEVDVF9QT0xJQ1k9eQpDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1JfSEFTSD15CkNPTkZJ
R19TRUNVUklUWV9BUFBBUk1PUl9IQVNIX0RFRkFVTFQ9eQojIENPTkZJR19TRUNVUklUWV9BUFBB
Uk1PUl9FWFBPUlRfQklOQVJZIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1Jf
UEFSQU5PSURfTE9BRCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFQ1VSSVRZX0xPQURQSU4gaXMgbm90
IHNldApDT05GSUdfU0VDVVJJVFlfWUFNQT15CkNPTkZJR19TRUNVUklUWV9TQUZFU0VUSUQ9eQpD
T05GSUdfU0VDVVJJVFlfTE9DS0RPV05fTFNNPXkKQ09ORklHX1NFQ1VSSVRZX0xPQ0tET1dOX0xT
TV9FQVJMWT15CkNPTkZJR19MT0NLX0RPV05fS0VSTkVMX0ZPUkNFX05PTkU9eQojIENPTkZJR19M
T0NLX0RPV05fS0VSTkVMX0ZPUkNFX0lOVEVHUklUWSBpcyBub3Qgc2V0CiMgQ09ORklHX0xPQ0tf
RE9XTl9LRVJORUxfRk9SQ0VfQ09ORklERU5USUFMSVRZIGlzIG5vdCBzZXQKQ09ORklHX1NFQ1VS
SVRZX0xBTkRMT0NLPXkKQ09ORklHX0lOVEVHUklUWT15CkNPTkZJR19JTlRFR1JJVFlfU0lHTkFU
VVJFPXkKQ09ORklHX0lOVEVHUklUWV9BU1lNTUVUUklDX0tFWVM9eQpDT05GSUdfSU5URUdSSVRZ
X1RSVVNURURfS0VZUklORz15CkNPTkZJR19JTlRFR1JJVFlfQVVESVQ9eQpDT05GSUdfSU1BPXkK
Q09ORklHX0lNQV9NRUFTVVJFX1BDUl9JRFg9MTAKQ09ORklHX0lNQV9MU01fUlVMRVM9eQpDT05G
SUdfSU1BX05HX1RFTVBMQVRFPXkKIyBDT05GSUdfSU1BX1NJR19URU1QTEFURSBpcyBub3Qgc2V0
CkNPTkZJR19JTUFfREVGQVVMVF9URU1QTEFURT0iaW1hLW5nIgojIENPTkZJR19JTUFfREVGQVVM
VF9IQVNIX1NIQTEgaXMgbm90IHNldApDT05GSUdfSU1BX0RFRkFVTFRfSEFTSF9TSEEyNTY9eQoj
IENPTkZJR19JTUFfREVGQVVMVF9IQVNIX1NIQTUxMiBpcyBub3Qgc2V0CkNPTkZJR19JTUFfREVG
QVVMVF9IQVNIPSJzaGEyNTYiCkNPTkZJR19JTUFfV1JJVEVfUE9MSUNZPXkKQ09ORklHX0lNQV9S
RUFEX1BPTElDWT15CkNPTkZJR19JTUFfQVBQUkFJU0U9eQojIENPTkZJR19JTUFfQVJDSF9QT0xJ
Q1kgaXMgbm90IHNldAojIENPTkZJR19JTUFfQVBQUkFJU0VfQlVJTERfUE9MSUNZIGlzIG5vdCBz
ZXQKIyBDT05GSUdfSU1BX0FQUFJBSVNFX0JPT1RQQVJBTSBpcyBub3Qgc2V0CkNPTkZJR19JTUFf
QVBQUkFJU0VfTU9EU0lHPXkKIyBDT05GSUdfSU1BX0JMQUNLTElTVF9LRVlSSU5HIGlzIG5vdCBz
ZXQKIyBDT05GSUdfSU1BX0xPQURfWDUwOSBpcyBub3Qgc2V0CkNPTkZJR19JTUFfTUVBU1VSRV9B
U1lNTUVUUklDX0tFWVM9eQpDT05GSUdfSU1BX1FVRVVFX0VBUkxZX0JPT1RfS0VZUz15CiMgQ09O
RklHX0lNQV9ESVNBQkxFX0hUQUJMRSBpcyBub3Qgc2V0CkNPTkZJR19FVk09eQpDT05GSUdfRVZN
X0FUVFJfRlNVVUlEPXkKQ09ORklHX0VWTV9BRERfWEFUVFJTPXkKIyBDT05GSUdfRVZNX0xPQURf
WDUwOSBpcyBub3Qgc2V0CiMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBz
ZXQKQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfQVBQQVJNT1I9eQojIENPTkZJR19ERUZBVUxUX1NF
Q1VSSVRZX0RBQyBpcyBub3Qgc2V0CkNPTkZJR19MU009ImxhbmRsb2NrLGxvY2tkb3duLHlhbWEs
c2FmZXNldGlkLGludGVncml0eSx0b21veW8sYXBwYXJtb3IsYnBmIgoKIwojIEtlcm5lbCBoYXJk
ZW5pbmcgb3B0aW9ucwojCgojCiMgTWVtb3J5IGluaXRpYWxpemF0aW9uCiMKQ09ORklHX0lOSVRf
U1RBQ0tfTk9ORT15CkNPTkZJR19JTklUX09OX0FMTE9DX0RFRkFVTFRfT049eQojIENPTkZJR19J
TklUX09OX0ZSRUVfREVGQVVMVF9PTiBpcyBub3Qgc2V0CkNPTkZJR19DQ19IQVNfWkVST19DQUxM
X1VTRURfUkVHUz15CiMgQ09ORklHX1pFUk9fQ0FMTF9VU0VEX1JFR1MgaXMgbm90IHNldAojIGVu
ZCBvZiBNZW1vcnkgaW5pdGlhbGl6YXRpb24KCiMKIyBIYXJkZW5pbmcgb2Yga2VybmVsIGRhdGEg
c3RydWN0dXJlcwojCkNPTkZJR19MSVNUX0hBUkRFTkVEPXkKQ09ORklHX0JVR19PTl9EQVRBX0NP
UlJVUFRJT049eQojIGVuZCBvZiBIYXJkZW5pbmcgb2Yga2VybmVsIGRhdGEgc3RydWN0dXJlcwoK
Q09ORklHX1JBTkRTVFJVQ1RfTk9ORT15CiMgZW5kIG9mIEtlcm5lbCBoYXJkZW5pbmcgb3B0aW9u
cwojIGVuZCBvZiBTZWN1cml0eSBvcHRpb25zCgpDT05GSUdfQ1JZUFRPPXkKCiMKIyBDcnlwdG8g
Y29yZSBvciBoZWxwZXIKIwpDT05GSUdfQ1JZUFRPX0FMR0FQST15CkNPTkZJR19DUllQVE9fQUxH
QVBJMj15CkNPTkZJR19DUllQVE9fQUVBRD15CkNPTkZJR19DUllQVE9fQUVBRDI9eQpDT05GSUdf
Q1JZUFRPX1NJRzI9eQpDT05GSUdfQ1JZUFRPX1NLQ0lQSEVSPXkKQ09ORklHX0NSWVBUT19TS0NJ
UEhFUjI9eQpDT05GSUdfQ1JZUFRPX0hBU0g9eQpDT05GSUdfQ1JZUFRPX0hBU0gyPXkKQ09ORklH
X0NSWVBUT19STkc9eQpDT05GSUdfQ1JZUFRPX1JORzI9eQpDT05GSUdfQ1JZUFRPX1JOR19ERUZB
VUxUPXkKQ09ORklHX0NSWVBUT19BS0NJUEhFUjI9eQpDT05GSUdfQ1JZUFRPX0FLQ0lQSEVSPXkK
Q09ORklHX0NSWVBUT19LUFAyPXkKQ09ORklHX0NSWVBUT19LUFA9eQpDT05GSUdfQ1JZUFRPX0FD
T01QMj15CkNPTkZJR19DUllQVE9fTUFOQUdFUj15CkNPTkZJR19DUllQVE9fTUFOQUdFUjI9eQoj
IENPTkZJR19DUllQVE9fVVNFUiBpcyBub3Qgc2V0CkNPTkZJR19DUllQVE9fTUFOQUdFUl9ESVNB
QkxFX1RFU1RTPXkKQ09ORklHX0NSWVBUT19OVUxMPXkKQ09ORklHX0NSWVBUT19OVUxMMj15CiMg
Q09ORklHX0NSWVBUT19QQ1JZUFQgaXMgbm90IHNldAojIENPTkZJR19DUllQVE9fQ1JZUFREIGlz
IG5vdCBzZXQKQ09ORklHX0NSWVBUT19BVVRIRU5DPXkKIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMg
bm90IHNldAojIGVuZCBvZiBDcnlwdG8gY29yZSBvciBoZWxwZXIKCiMKIyBQdWJsaWMta2V5IGNy
eXB0b2dyYXBoeQojCkNPTkZJR19DUllQVE9fUlNBPXkKIyBDT05GSUdfQ1JZUFRPX0RIIGlzIG5v
dCBzZXQKQ09ORklHX0NSWVBUT19FQ0M9eQpDT05GSUdfQ1JZUFRPX0VDREg9eQojIENPTkZJR19D
UllQVE9fRUNEU0EgaXMgbm90IHNldAojIENPTkZJR19DUllQVE9fRUNSRFNBIGlzIG5vdCBzZXQK
IyBDT05GSUdfQ1JZUFRPX1NNMiBpcyBub3Qgc2V0CiMgQ09ORklHX0NSWVBUT19DVVJWRTI1NTE5
IGlzIG5vdCBzZXQKIyBlbmQgb2YgUHVibGljLWtleSBjcnlwdG9ncmFwaHkKCiMKIyBCbG9jayBj
aXBoZXJzCiMKQ09ORklHX0NSWVBUT19BRVM9eQojIENPTkZJR19DUllQVE9fQUVTX1RJIGlzIG5v
dCBzZXQKIyBDT05GSUdfQ1JZUFRPX0FSSUEgaXMgbm90IHNldAojIENPTkZJR19DUllQVE9fQkxP
V0ZJU0ggaXMgbm90IHNldAojIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAojIENP
TkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAojIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90
IHNldAojIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JZUFRPX0ZDUllQ
VCBpcyBub3Qgc2V0CiMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKIyBDT05GSUdf
Q1JZUFRPX1NNNF9HRU5FUklDIGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMg
bm90IHNldAojIGVuZCBvZiBCbG9jayBjaXBoZXJzCgojCiMgTGVuZ3RoLXByZXNlcnZpbmcgY2lw
aGVycyBhbmQgbW9kZXMKIwojIENPTkZJR19DUllQVE9fQURJQU5UVU0gaXMgbm90IHNldAojIENP
TkZJR19DUllQVE9fQ0hBQ0hBMjAgaXMgbm90IHNldApDT05GSUdfQ1JZUFRPX0NCQz15CkNPTkZJ
R19DUllQVE9fQ1RSPXkKIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CkNPTkZJR19DUllQ
VE9fRUNCPXkKIyBDT05GSUdfQ1JZUFRPX0hDVFIyIGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JZUFRP
X0tFWVdSQVAgaXMgbm90IHNldAojIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKIyBDT05G
SUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAojIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQK
IyBlbmQgb2YgTGVuZ3RoLXByZXNlcnZpbmcgY2lwaGVycyBhbmQgbW9kZXMKCiMKIyBBRUFEIChh
dXRoZW50aWNhdGVkIGVuY3J5cHRpb24gd2l0aCBhc3NvY2lhdGVkIGRhdGEpIGNpcGhlcnMKIwoj
IENPTkZJR19DUllQVE9fQUVHSVMxMjggaXMgbm90IHNldAojIENPTkZJR19DUllQVE9fQ0hBQ0hB
MjBQT0xZMTMwNSBpcyBub3Qgc2V0CkNPTkZJR19DUllQVE9fQ0NNPXkKQ09ORklHX0NSWVBUT19H
Q009eQpDT05GSUdfQ1JZUFRPX0dFTklWPXkKQ09ORklHX0NSWVBUT19TRVFJVj15CkNPTkZJR19D
UllQVE9fRUNIQUlOSVY9eQojIENPTkZJR19DUllQVE9fRVNTSVYgaXMgbm90IHNldAojIGVuZCBv
ZiBBRUFEIChhdXRoZW50aWNhdGVkIGVuY3J5cHRpb24gd2l0aCBhc3NvY2lhdGVkIGRhdGEpIGNp
cGhlcnMKCiMKIyBIYXNoZXMsIGRpZ2VzdHMsIGFuZCBNQUNzCiMKIyBDT05GSUdfQ1JZUFRPX0JM
QUtFMkIgaXMgbm90IHNldApDT05GSUdfQ1JZUFRPX0NNQUM9eQpDT05GSUdfQ1JZUFRPX0dIQVNI
PXkKQ09ORklHX0NSWVBUT19ITUFDPXkKIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CkNP
TkZJR19DUllQVE9fTUQ1PXkKIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQK
IyBDT05GSUdfQ1JZUFRPX1BPTFkxMzA1IGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JZUFRPX1JNRDE2
MCBpcyBub3Qgc2V0CkNPTkZJR19DUllQVE9fU0hBMT15CkNPTkZJR19DUllQVE9fU0hBMjU2PXkK
Q09ORklHX0NSWVBUT19TSEE1MTI9eQpDT05GSUdfQ1JZUFRPX1NIQTM9eQojIENPTkZJR19DUllQ
VE9fU00zX0dFTkVSSUMgaXMgbm90IHNldAojIENPTkZJR19DUllQVE9fU1RSRUVCT0cgaXMgbm90
IHNldAojIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiMgQ09ORklHX0NSWVBUT19XUDUx
MiBpcyBub3Qgc2V0CiMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JZ
UFRPX1hYSEFTSCBpcyBub3Qgc2V0CiMgZW5kIG9mIEhhc2hlcywgZGlnZXN0cywgYW5kIE1BQ3MK
CiMKIyBDUkNzIChjeWNsaWMgcmVkdW5kYW5jeSBjaGVja3MpCiMKQ09ORklHX0NSWVBUT19DUkMz
MkM9eQojIENPTkZJR19DUllQVE9fQ1JDMzIgaXMgbm90IHNldApDT05GSUdfQ1JZUFRPX0NSQ1Qx
MERJRj15CiMgZW5kIG9mIENSQ3MgKGN5Y2xpYyByZWR1bmRhbmN5IGNoZWNrcykKCiMKIyBDb21w
cmVzc2lvbgojCiMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JZ
UFRPX0xaTyBpcyBub3Qgc2V0CiMgQ09ORklHX0NSWVBUT184NDIgaXMgbm90IHNldAojIENPTkZJ
R19DUllQVE9fTFo0IGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JZUFRPX0xaNEhDIGlzIG5vdCBzZXQK
IyBDT05GSUdfQ1JZUFRPX1pTVEQgaXMgbm90IHNldAojIGVuZCBvZiBDb21wcmVzc2lvbgoKIwoj
IFJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbgojCiMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlz
IG5vdCBzZXQKQ09ORklHX0NSWVBUT19EUkJHX01FTlU9eQpDT05GSUdfQ1JZUFRPX0RSQkdfSE1B
Qz15CiMgQ09ORklHX0NSWVBUT19EUkJHX0hBU0ggaXMgbm90IHNldAojIENPTkZJR19DUllQVE9f
RFJCR19DVFIgaXMgbm90IHNldApDT05GSUdfQ1JZUFRPX0RSQkc9eQpDT05GSUdfQ1JZUFRPX0pJ
VFRFUkVOVFJPUFk9eQpDT05GSUdfQ1JZUFRPX0pJVFRFUkVOVFJPUFlfTUVNT1JZX0JMT0NLUz02
NApDT05GSUdfQ1JZUFRPX0pJVFRFUkVOVFJPUFlfTUVNT1JZX0JMT0NLU0laRT0zMgpDT05GSUdf
Q1JZUFRPX0pJVFRFUkVOVFJPUFlfT1NSPTEKIyBlbmQgb2YgUmFuZG9tIG51bWJlciBnZW5lcmF0
aW9uCgojCiMgVXNlcnNwYWNlIGludGVyZmFjZQojCiMgQ09ORklHX0NSWVBUT19VU0VSX0FQSV9I
QVNIIGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JZUFRPX1VTRVJfQVBJX1NLQ0lQSEVSIGlzIG5vdCBz
ZXQKIyBDT05GSUdfQ1JZUFRPX1VTRVJfQVBJX1JORyBpcyBub3Qgc2V0CiMgQ09ORklHX0NSWVBU
T19VU0VSX0FQSV9BRUFEIGlzIG5vdCBzZXQKIyBlbmQgb2YgVXNlcnNwYWNlIGludGVyZmFjZQoK
Q09ORklHX0NSWVBUT19IQVNIX0lORk89eQoKIwojIEFjY2VsZXJhdGVkIENyeXB0b2dyYXBoaWMg
QWxnb3JpdGhtcyBmb3IgQ1BVICh4ODYpCiMKIyBDT05GSUdfQ1JZUFRPX0NVUlZFMjU1MTlfWDg2
IGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JZUFRPX0FFU19OSV9JTlRFTCBpcyBub3Qgc2V0CiMgQ09O
RklHX0NSWVBUT19CTE9XRklTSF9YODZfNjQgaXMgbm90IHNldAojIENPTkZJR19DUllQVE9fQ0FN
RUxMSUFfWDg2XzY0IGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBX0FFU05JX0FW
WF9YODZfNjQgaXMgbm90IHNldAojIENPTkZJR19DUllQVE9fQ0FNRUxMSUFfQUVTTklfQVZYMl9Y
ODZfNjQgaXMgbm90IHNldAojIENPTkZJR19DUllQVE9fQ0FTVDVfQVZYX1g4Nl82NCBpcyBub3Qg
c2V0CiMgQ09ORklHX0NSWVBUT19DQVNUNl9BVlhfWDg2XzY0IGlzIG5vdCBzZXQKIyBDT05GSUdf
Q1JZUFRPX0RFUzNfRURFX1g4Nl82NCBpcyBub3Qgc2V0CiMgQ09ORklHX0NSWVBUT19TRVJQRU5U
X1NTRTJfWDg2XzY0IGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlRfQVZYX1g4Nl82
NCBpcyBub3Qgc2V0CiMgQ09ORklHX0NSWVBUT19TRVJQRU5UX0FWWDJfWDg2XzY0IGlzIG5vdCBz
ZXQKIyBDT05GSUdfQ1JZUFRPX1NNNF9BRVNOSV9BVlhfWDg2XzY0IGlzIG5vdCBzZXQKIyBDT05G
SUdfQ1JZUFRPX1NNNF9BRVNOSV9BVlgyX1g4Nl82NCBpcyBub3Qgc2V0CiMgQ09ORklHX0NSWVBU
T19UV09GSVNIX1g4Nl82NCBpcyBub3Qgc2V0CiMgQ09ORklHX0NSWVBUT19UV09GSVNIX1g4Nl82
NF8zV0FZIGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQVZYX1g4Nl82NCBpcyBu
b3Qgc2V0CiMgQ09ORklHX0NSWVBUT19BUklBX0FFU05JX0FWWF9YODZfNjQgaXMgbm90IHNldAoj
IENPTkZJR19DUllQVE9fQVJJQV9BRVNOSV9BVlgyX1g4Nl82NCBpcyBub3Qgc2V0CiMgQ09ORklH
X0NSWVBUT19BUklBX0dGTklfQVZYNTEyX1g4Nl82NCBpcyBub3Qgc2V0CiMgQ09ORklHX0NSWVBU
T19DSEFDSEEyMF9YODZfNjQgaXMgbm90IHNldAojIENPTkZJR19DUllQVE9fQUVHSVMxMjhfQUVT
TklfU1NFMiBpcyBub3Qgc2V0CiMgQ09ORklHX0NSWVBUT19OSFBPTFkxMzA1X1NTRTIgaXMgbm90
IHNldAojIENPTkZJR19DUllQVE9fTkhQT0xZMTMwNV9BVlgyIGlzIG5vdCBzZXQKIyBDT05GSUdf
Q1JZUFRPX0JMQUtFMlNfWDg2IGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JZUFRPX1BPTFlWQUxfQ0xN
VUxfTkkgaXMgbm90IHNldAojIENPTkZJR19DUllQVE9fUE9MWTEzMDVfWDg2XzY0IGlzIG5vdCBz
ZXQKIyBDT05GSUdfQ1JZUFRPX1NIQTFfU1NTRTMgaXMgbm90IHNldAojIENPTkZJR19DUllQVE9f
U0hBMjU2X1NTU0UzIGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JZUFRPX1NIQTUxMl9TU1NFMyBpcyBu
b3Qgc2V0CiMgQ09ORklHX0NSWVBUT19TTTNfQVZYX1g4Nl82NCBpcyBub3Qgc2V0CiMgQ09ORklH
X0NSWVBUT19HSEFTSF9DTE1VTF9OSV9JTlRFTCBpcyBub3Qgc2V0CiMgQ09ORklHX0NSWVBUT19D
UkMzMkNfSU5URUwgaXMgbm90IHNldAojIENPTkZJR19DUllQVE9fQ1JDMzJfUENMTVVMIGlzIG5v
dCBzZXQKIyBDT05GSUdfQ1JZUFRPX0NSQ1QxMERJRl9QQ0xNVUwgaXMgbm90IHNldAojIGVuZCBv
ZiBBY2NlbGVyYXRlZCBDcnlwdG9ncmFwaGljIEFsZ29yaXRobXMgZm9yIENQVSAoeDg2KQoKQ09O
RklHX0NSWVBUT19IVz15CiMgQ09ORklHX0NSWVBUT19ERVZfUEFETE9DSyBpcyBub3Qgc2V0CiMg
Q09ORklHX0NSWVBUT19ERVZfQVRNRUxfRUNDIGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JZUFRPX0RF
Vl9BVE1FTF9TSEEyMDRBIGlzIG5vdCBzZXQKQ09ORklHX0NSWVBUT19ERVZfQ0NQPXkKQ09ORklH
X0NSWVBUT19ERVZfQ0NQX0REPXkKIyBDT05GSUdfQ1JZUFRPX0RFVl9TUF9DQ1AgaXMgbm90IHNl
dAojIENPTkZJR19DUllQVE9fREVWX1NQX1BTUCBpcyBub3Qgc2V0CiMgQ09ORklHX0NSWVBUT19E
RVZfTklUUk9YX0NOTjU1WFggaXMgbm90IHNldAojIENPTkZJR19DUllQVE9fREVWX1FBVF9ESDg5
NXhDQyBpcyBub3Qgc2V0CiMgQ09ORklHX0NSWVBUT19ERVZfUUFUX0MzWFhYIGlzIG5vdCBzZXQK
IyBDT05GSUdfQ1JZUFRPX0RFVl9RQVRfQzYyWCBpcyBub3Qgc2V0CiMgQ09ORklHX0NSWVBUT19E
RVZfUUFUXzRYWFggaXMgbm90IHNldAojIENPTkZJR19DUllQVE9fREVWX1FBVF80MjBYWCBpcyBu
b3Qgc2V0CiMgQ09ORklHX0NSWVBUT19ERVZfUUFUX0RIODk1eENDVkYgaXMgbm90IHNldAojIENP
TkZJR19DUllQVE9fREVWX1FBVF9DM1hYWFZGIGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JZUFRPX0RF
Vl9RQVRfQzYyWFZGIGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JZUFRPX0RFVl9WSVJUSU8gaXMgbm90
IHNldAojIENPTkZJR19DUllQVE9fREVWX1NBRkVYQ0VMIGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JZ
UFRPX0RFVl9DQ1JFRSBpcyBub3Qgc2V0CiMgQ09ORklHX0NSWVBUT19ERVZfQU1MT0dJQ19HWEwg
aXMgbm90IHNldApDT05GSUdfQVNZTU1FVFJJQ19LRVlfVFlQRT15CkNPTkZJR19BU1lNTUVUUklD
X1BVQkxJQ19LRVlfU1VCVFlQRT15CkNPTkZJR19YNTA5X0NFUlRJRklDQVRFX1BBUlNFUj15CiMg
Q09ORklHX1BLQ1M4X1BSSVZBVEVfS0VZX1BBUlNFUiBpcyBub3Qgc2V0CkNPTkZJR19QS0NTN19N
RVNTQUdFX1BBUlNFUj15CiMgQ09ORklHX1BLQ1M3X1RFU1RfS0VZIGlzIG5vdCBzZXQKIyBDT05G
SUdfU0lHTkVEX1BFX0ZJTEVfVkVSSUZJQ0FUSU9OIGlzIG5vdCBzZXQKIyBDT05GSUdfRklQU19T
SUdOQVRVUkVfU0VMRlRFU1QgaXMgbm90IHNldAoKIwojIENlcnRpZmljYXRlcyBmb3Igc2lnbmF0
dXJlIGNoZWNraW5nCiMKQ09ORklHX01PRFVMRV9TSUdfS0VZPSJjZXJ0cy9zaWduaW5nX2tleS5w
ZW0iCkNPTkZJR19NT0RVTEVfU0lHX0tFWV9UWVBFX1JTQT15CkNPTkZJR19TWVNURU1fVFJVU1RF
RF9LRVlSSU5HPXkKQ09ORklHX1NZU1RFTV9UUlVTVEVEX0tFWVM9IiIKIyBDT05GSUdfU1lTVEVN
X0VYVFJBX0NFUlRJRklDQVRFIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VDT05EQVJZX1RSVVNURURf
S0VZUklORyBpcyBub3Qgc2V0CiMgQ09ORklHX1NZU1RFTV9CTEFDS0xJU1RfS0VZUklORyBpcyBu
b3Qgc2V0CiMgZW5kIG9mIENlcnRpZmljYXRlcyBmb3Igc2lnbmF0dXJlIGNoZWNraW5nCgpDT05G
SUdfQklOQVJZX1BSSU5URj15CgojCiMgTGlicmFyeSByb3V0aW5lcwojCkNPTkZJR19MSU5FQVJf
UkFOR0VTPXkKIyBDT05GSUdfUEFDS0lORyBpcyBub3Qgc2V0CkNPTkZJR19CSVRSRVZFUlNFPXkK
Q09ORklHX0dFTkVSSUNfU1RSTkNQWV9GUk9NX1VTRVI9eQpDT05GSUdfR0VORVJJQ19TVFJOTEVO
X1VTRVI9eQpDT05GSUdfR0VORVJJQ19ORVRfVVRJTFM9eQojIENPTkZJR19DT1JESUMgaXMgbm90
IHNldAojIENPTkZJR19QUklNRV9OVU1CRVJTIGlzIG5vdCBzZXQKQ09ORklHX1JBVElPTkFMPXkK
Q09ORklHX0dFTkVSSUNfUENJX0lPTUFQPXkKQ09ORklHX0dFTkVSSUNfSU9NQVA9eQpDT05GSUdf
QVJDSF9VU0VfQ01QWENIR19MT0NLUkVGPXkKQ09ORklHX0FSQ0hfSEFTX0ZBU1RfTVVMVElQTElF
Uj15CkNPTkZJR19BUkNIX1VTRV9TWU1fQU5OT1RBVElPTlM9eQoKIwojIENyeXB0byBsaWJyYXJ5
IHJvdXRpbmVzCiMKQ09ORklHX0NSWVBUT19MSUJfVVRJTFM9eQpDT05GSUdfQ1JZUFRPX0xJQl9B
RVM9eQpDT05GSUdfQ1JZUFRPX0xJQl9BUkM0PXkKQ09ORklHX0NSWVBUT19MSUJfR0YxMjhNVUw9
eQpDT05GSUdfQ1JZUFRPX0xJQl9CTEFLRTJTX0dFTkVSSUM9eQojIENPTkZJR19DUllQVE9fTElC
X0NIQUNIQSBpcyBub3Qgc2V0CiMgQ09ORklHX0NSWVBUT19MSUJfQ1VSVkUyNTUxOSBpcyBub3Qg
c2V0CkNPTkZJR19DUllQVE9fTElCX1BPTFkxMzA1X1JTSVpFPTExCiMgQ09ORklHX0NSWVBUT19M
SUJfUE9MWTEzMDUgaXMgbm90IHNldAojIENPTkZJR19DUllQVE9fTElCX0NIQUNIQTIwUE9MWTEz
MDUgaXMgbm90IHNldApDT05GSUdfQ1JZUFRPX0xJQl9TSEExPXkKQ09ORklHX0NSWVBUT19MSUJf
U0hBMjU2PXkKIyBlbmQgb2YgQ3J5cHRvIGxpYnJhcnkgcm91dGluZXMKCkNPTkZJR19DUkNfQ0NJ
VFQ9eQpDT05GSUdfQ1JDMTY9eQpDT05GSUdfQ1JDX1QxMERJRj15CiMgQ09ORklHX0NSQzY0X1JP
Q0tTT0ZUIGlzIG5vdCBzZXQKQ09ORklHX0NSQ19JVFVfVD15CkNPTkZJR19DUkMzMj15CiMgQ09O
RklHX0NSQzMyX1NFTEZURVNUIGlzIG5vdCBzZXQKQ09ORklHX0NSQzMyX1NMSUNFQlk4PXkKIyBD
T05GSUdfQ1JDMzJfU0xJQ0VCWTQgaXMgbm90IHNldAojIENPTkZJR19DUkMzMl9TQVJXQVRFIGlz
IG5vdCBzZXQKIyBDT05GSUdfQ1JDMzJfQklUIGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JDNjQgaXMg
bm90IHNldAojIENPTkZJR19DUkM0IGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0
CiMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiMgQ09ORklHX0NSQzggaXMgbm90IHNldApD
T05GSUdfWFhIQVNIPXkKIyBDT05GSUdfUkFORE9NMzJfU0VMRlRFU1QgaXMgbm90IHNldApDT05G
SUdfWkxJQl9JTkZMQVRFPXkKQ09ORklHX1pMSUJfREVGTEFURT15CkNPTkZJR19MWk9fQ09NUFJF
U1M9eQpDT05GSUdfTFpPX0RFQ09NUFJFU1M9eQpDT05GSUdfTFo0X0RFQ09NUFJFU1M9eQpDT05G
SUdfWlNURF9DT01NT049eQpDT05GSUdfWlNURF9ERUNPTVBSRVNTPXkKQ09ORklHX1haX0RFQz15
CkNPTkZJR19YWl9ERUNfWDg2PXkKQ09ORklHX1haX0RFQ19QT1dFUlBDPXkKQ09ORklHX1haX0RF
Q19BUk09eQpDT05GSUdfWFpfREVDX0FSTVRIVU1CPXkKQ09ORklHX1haX0RFQ19TUEFSQz15CiMg
Q09ORklHX1haX0RFQ19NSUNST0xaTUEgaXMgbm90IHNldApDT05GSUdfWFpfREVDX0JDSj15CiMg
Q09ORklHX1haX0RFQ19URVNUIGlzIG5vdCBzZXQKQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15CkNP
TkZJR19ERUNPTVBSRVNTX0JaSVAyPXkKQ09ORklHX0RFQ09NUFJFU1NfTFpNQT15CkNPTkZJR19E
RUNPTVBSRVNTX1haPXkKQ09ORklHX0RFQ09NUFJFU1NfTFpPPXkKQ09ORklHX0RFQ09NUFJFU1Nf
TFo0PXkKQ09ORklHX0RFQ09NUFJFU1NfWlNURD15CkNPTkZJR19HRU5FUklDX0FMTE9DQVRPUj15
CkNPTkZJR19JTlRFUlZBTF9UUkVFPXkKQ09ORklHX1hBUlJBWV9NVUxUST15CkNPTkZJR19BU1NP
Q0lBVElWRV9BUlJBWT15CkNPTkZJR19IQVNfSU9NRU09eQpDT05GSUdfSEFTX0lPUE9SVD15CkNP
TkZJR19IQVNfSU9QT1JUX01BUD15CkNPTkZJR19IQVNfRE1BPXkKQ09ORklHX0RNQV9PUFM9eQpD
T05GSUdfTkVFRF9TR19ETUFfRkxBR1M9eQpDT05GSUdfTkVFRF9TR19ETUFfTEVOR1RIPXkKQ09O
RklHX05FRURfRE1BX01BUF9TVEFURT15CkNPTkZJR19BUkNIX0RNQV9BRERSX1RfNjRCSVQ9eQpD
T05GSUdfU1dJT1RMQj15CiMgQ09ORklHX1NXSU9UTEJfRFlOQU1JQyBpcyBub3Qgc2V0CiMgQ09O
RklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAojIENPTkZJR19ETUFfTUFQX0JFTkNITUFSSyBp
cyBub3Qgc2V0CkNPTkZJR19TR0xfQUxMT0M9eQpDT05GSUdfQ0hFQ0tfU0lHTkFUVVJFPXkKIyBD
T05GSUdfQ1BVTUFTS19PRkZTVEFDSyBpcyBub3Qgc2V0CiMgQ09ORklHX0ZPUkNFX05SX0NQVVMg
aXMgbm90IHNldApDT05GSUdfQ1BVX1JNQVA9eQpDT05GSUdfRFFMPXkKQ09ORklHX0dMT0I9eQoj
IENPTkZJR19HTE9CX1NFTEZURVNUIGlzIG5vdCBzZXQKQ09ORklHX05MQVRUUj15CkNPTkZJR19D
TFpfVEFCPXkKIyBDT05GSUdfSVJRX1BPTEwgaXMgbm90IHNldApDT05GSUdfTVBJTElCPXkKQ09O
RklHX1NJR05BVFVSRT15CkNPTkZJR19ESU1MSUI9eQpDT05GSUdfT0lEX1JFR0lTVFJZPXkKQ09O
RklHX0hBVkVfR0VORVJJQ19WRFNPPXkKQ09ORklHX0dFTkVSSUNfR0VUVElNRU9GREFZPXkKQ09O
RklHX0dFTkVSSUNfVkRTT19USU1FX05TPXkKQ09ORklHX1NHX1BPT0w9eQpDT05GSUdfQVJDSF9I
QVNfUE1FTV9BUEk9eQpDT05GSUdfQVJDSF9IQVNfQ1BVX0NBQ0hFX0lOVkFMSURBVEVfTUVNUkVH
SU9OPXkKQ09ORklHX0FSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRT15CkNPTkZJR19BUkNIX0hB
U19DT1BZX01DPXkKQ09ORklHX0FSQ0hfU1RBQ0tXQUxLPXkKQ09ORklHX1NUQUNLREVQT1Q9eQpD
T05GSUdfU1RBQ0tERVBPVF9BTFdBWVNfSU5JVD15CkNPTkZJR19TVEFDS0RFUE9UX01BWF9GUkFN
RVM9NjQKQ09ORklHX1JFRl9UUkFDS0VSPXkKQ09ORklHX1NCSVRNQVA9eQojIENPTkZJR19MV1Ff
VEVTVCBpcyBub3Qgc2V0CiMgZW5kIG9mIExpYnJhcnkgcm91dGluZXMKCkNPTkZJR19GSVJNV0FS
RV9UQUJMRT15CgojCiMgS2VybmVsIGhhY2tpbmcKIwoKIwojIHByaW50ayBhbmQgZG1lc2cgb3B0
aW9ucwojCkNPTkZJR19QUklOVEtfVElNRT15CkNPTkZJR19QUklOVEtfQ0FMTEVSPXkKIyBDT05G
SUdfU1RBQ0tUUkFDRV9CVUlMRF9JRCBpcyBub3Qgc2V0CkNPTkZJR19DT05TT0xFX0xPR0xFVkVM
X0RFRkFVTFQ9NwpDT05GSUdfQ09OU09MRV9MT0dMRVZFTF9RVUlFVD00CkNPTkZJR19NRVNTQUdF
X0xPR0xFVkVMX0RFRkFVTFQ9NAojIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0
CkNPTkZJR19EWU5BTUlDX0RFQlVHPXkKQ09ORklHX0RZTkFNSUNfREVCVUdfQ09SRT15CkNPTkZJ
R19TWU1CT0xJQ19FUlJOQU1FPXkKQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQojIGVuZCBvZiBw
cmludGsgYW5kIGRtZXNnIG9wdGlvbnMKCkNPTkZJR19ERUJVR19LRVJORUw9eQpDT05GSUdfREVC
VUdfTUlTQz15CgojCiMgQ29tcGlsZS10aW1lIGNoZWNrcyBhbmQgY29tcGlsZXIgb3B0aW9ucwoj
CkNPTkZJR19ERUJVR19JTkZPPXkKQ09ORklHX0FTX0hBU19OT05fQ09OU1RfVUxFQjEyOD15CiMg
Q09ORklHX0RFQlVHX0lORk9fTk9ORSBpcyBub3Qgc2V0CiMgQ09ORklHX0RFQlVHX0lORk9fRFdB
UkZfVE9PTENIQUlOX0RFRkFVTFQgaXMgbm90IHNldApDT05GSUdfREVCVUdfSU5GT19EV0FSRjQ9
eQojIENPTkZJR19ERUJVR19JTkZPX0RXQVJGNSBpcyBub3Qgc2V0CiMgQ09ORklHX0RFQlVHX0lO
Rk9fUkVEVUNFRCBpcyBub3Qgc2V0CkNPTkZJR19ERUJVR19JTkZPX0NPTVBSRVNTRURfTk9ORT15
CiMgQ09ORklHX0RFQlVHX0lORk9fQ09NUFJFU1NFRF9aTElCIGlzIG5vdCBzZXQKIyBDT05GSUdf
REVCVUdfSU5GT19TUExJVCBpcyBub3Qgc2V0CiMgQ09ORklHX0RFQlVHX0lORk9fQlRGIGlzIG5v
dCBzZXQKQ09ORklHX1BBSE9MRV9IQVNfU1BMSVRfQlRGPXkKQ09ORklHX1BBSE9MRV9IQVNfTEFO
R19FWENMVURFPXkKIyBDT05GSUdfR0RCX1NDUklQVFMgaXMgbm90IHNldApDT05GSUdfRlJBTUVf
V0FSTj0yMDQ4CiMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIyBDT05GSUdfUkVB
REFCTEVfQVNNIGlzIG5vdCBzZXQKIyBDT05GSUdfSEVBREVSU19JTlNUQUxMIGlzIG5vdCBzZXQK
IyBDT05GSUdfREVCVUdfU0VDVElPTl9NSVNNQVRDSCBpcyBub3Qgc2V0CkNPTkZJR19TRUNUSU9O
X01JU01BVENIX1dBUk5fT05MWT15CiMgQ09ORklHX0RFQlVHX0ZPUkNFX0ZVTkNUSU9OX0FMSUdO
XzY0QiBpcyBub3Qgc2V0CkNPTkZJR19PQkpUT09MPXkKQ09ORklHX05PSU5TVFJfVkFMSURBVElP
Tj15CiMgQ09ORklHX1ZNTElOVVhfTUFQIGlzIG5vdCBzZXQKIyBDT05GSUdfREVCVUdfRk9SQ0Vf
V0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKIyBlbmQgb2YgQ29tcGlsZS10aW1lIGNoZWNrcyBhbmQg
Y29tcGlsZXIgb3B0aW9ucwoKIwojIEdlbmVyaWMgS2VybmVsIERlYnVnZ2luZyBJbnN0cnVtZW50
cwojCiMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKQ09ORklHX0RFQlVHX0ZTPXkKQ09O
RklHX0RFQlVHX0ZTX0FMTE9XX0FMTD15CiMgQ09ORklHX0RFQlVHX0ZTX0RJU0FMTE9XX01PVU5U
IGlzIG5vdCBzZXQKIyBDT05GSUdfREVCVUdfRlNfQUxMT1dfTk9ORSBpcyBub3Qgc2V0CkNPTkZJ
R19IQVZFX0FSQ0hfS0dEQj15CiMgQ09ORklHX0tHREIgaXMgbm90IHNldApDT05GSUdfQVJDSF9I
QVNfVUJTQU5fU0FOSVRJWkVfQUxMPXkKQ09ORklHX1VCU0FOPXkKIyBDT05GSUdfVUJTQU5fVFJB
UCBpcyBub3Qgc2V0CkNPTkZJR19DQ19IQVNfVUJTQU5fQk9VTkRTX1NUUklDVD15CkNPTkZJR19V
QlNBTl9CT1VORFM9eQpDT05GSUdfVUJTQU5fQk9VTkRTX1NUUklDVD15CkNPTkZJR19VQlNBTl9T
SElGVD15CiMgQ09ORklHX1VCU0FOX0RJVl9aRVJPIGlzIG5vdCBzZXQKIyBDT05GSUdfVUJTQU5f
Qk9PTCBpcyBub3Qgc2V0CiMgQ09ORklHX1VCU0FOX0VOVU0gaXMgbm90IHNldAojIENPTkZJR19V
QlNBTl9BTElHTk1FTlQgaXMgbm90IHNldApDT05GSUdfVUJTQU5fU0FOSVRJWkVfQUxMPXkKIyBD
T05GSUdfVEVTVF9VQlNBTiBpcyBub3Qgc2V0CkNPTkZJR19IQVZFX0FSQ0hfS0NTQU49eQpDT05G
SUdfSEFWRV9LQ1NBTl9DT01QSUxFUj15CiMgZW5kIG9mIEdlbmVyaWMgS2VybmVsIERlYnVnZ2lu
ZyBJbnN0cnVtZW50cwoKIwojIE5ldHdvcmtpbmcgRGVidWdnaW5nCiMKQ09ORklHX05FVF9ERVZf
UkVGQ05UX1RSQUNLRVI9eQpDT05GSUdfTkVUX05TX1JFRkNOVF9UUkFDS0VSPXkKQ09ORklHX0RF
QlVHX05FVD15CiMgZW5kIG9mIE5ldHdvcmtpbmcgRGVidWdnaW5nCgojCiMgTWVtb3J5IERlYnVn
Z2luZwojCkNPTkZJR19QQUdFX0VYVEVOU0lPTj15CiMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBp
cyBub3Qgc2V0CkNPTkZJR19TTFVCX0RFQlVHPXkKIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBu
b3Qgc2V0CkNPTkZJR19QQUdFX09XTkVSPXkKQ09ORklHX1BBR0VfVEFCTEVfQ0hFQ0s9eQpDT05G
SUdfUEFHRV9UQUJMRV9DSEVDS19FTkZPUkNFRD15CkNPTkZJR19QQUdFX1BPSVNPTklORz15CiMg
Q09ORklHX0RFQlVHX1BBR0VfUkVGIGlzIG5vdCBzZXQKIyBDT05GSUdfREVCVUdfUk9EQVRBX1RF
U1QgaXMgbm90IHNldApDT05GSUdfQVJDSF9IQVNfREVCVUdfV1g9eQpDT05GSUdfREVCVUdfV1g9
eQpDT05GSUdfR0VORVJJQ19QVERVTVA9eQpDT05GSUdfUFREVU1QX0NPUkU9eQpDT05GSUdfUFRE
VU1QX0RFQlVHRlM9eQpDT05GSUdfSEFWRV9ERUJVR19LTUVNTEVBSz15CiMgQ09ORklHX0RFQlVH
X0tNRU1MRUFLIGlzIG5vdCBzZXQKIyBDT05GSUdfUEVSX1ZNQV9MT0NLX1NUQVRTIGlzIG5vdCBz
ZXQKQ09ORklHX0RFQlVHX09CSkVDVFM9eQojIENPTkZJR19ERUJVR19PQkpFQ1RTX1NFTEZURVNU
IGlzIG5vdCBzZXQKQ09ORklHX0RFQlVHX09CSkVDVFNfRlJFRT15CkNPTkZJR19ERUJVR19PQkpF
Q1RTX1RJTUVSUz15CkNPTkZJR19ERUJVR19PQkpFQ1RTX1dPUks9eQpDT05GSUdfREVCVUdfT0JK
RUNUU19SQ1VfSEVBRD15CkNPTkZJR19ERUJVR19PQkpFQ1RTX1BFUkNQVV9DT1VOVEVSPXkKQ09O
RklHX0RFQlVHX09CSkVDVFNfRU5BQkxFX0RFRkFVTFQ9MQojIENPTkZJR19TSFJJTktFUl9ERUJV
RyBpcyBub3Qgc2V0CkNPTkZJR19ERUJVR19TVEFDS19VU0FHRT15CkNPTkZJR19TQ0hFRF9TVEFD
S19FTkRfQ0hFQ0s9eQpDT05GSUdfQVJDSF9IQVNfREVCVUdfVk1fUEdUQUJMRT15CkNPTkZJR19E
RUJVR19WTV9JUlFTT0ZGPXkKQ09ORklHX0RFQlVHX1ZNPXkKQ09ORklHX0RFQlVHX1ZNX01BUExF
X1RSRUU9eQpDT05GSUdfREVCVUdfVk1fUkI9eQpDT05GSUdfREVCVUdfVk1fUEdGTEFHUz15CkNP
TkZJR19ERUJVR19WTV9QR1RBQkxFPXkKQ09ORklHX0FSQ0hfSEFTX0RFQlVHX1ZJUlRVQUw9eQpD
T05GSUdfREVCVUdfVklSVFVBTD15CkNPTkZJR19ERUJVR19NRU1PUllfSU5JVD15CkNPTkZJR19E
RUJVR19QRVJfQ1BVX01BUFM9eQpDT05GSUdfREVCVUdfS01BUF9MT0NBTD15CkNPTkZJR19BUkNI
X1NVUFBPUlRTX0tNQVBfTE9DQUxfRk9SQ0VfTUFQPXkKQ09ORklHX0RFQlVHX0tNQVBfTE9DQUxf
Rk9SQ0VfTUFQPXkKQ09ORklHX0hBVkVfQVJDSF9LQVNBTj15CkNPTkZJR19IQVZFX0FSQ0hfS0FT
QU5fVk1BTExPQz15CkNPTkZJR19DQ19IQVNfS0FTQU5fR0VORVJJQz15CkNPTkZJR19DQ19IQVNf
V09SS0lOR19OT1NBTklUSVpFX0FERFJFU1M9eQpDT05GSUdfS0FTQU49eQpDT05GSUdfS0FTQU5f
R0VORVJJQz15CiMgQ09ORklHX0tBU0FOX09VVExJTkUgaXMgbm90IHNldApDT05GSUdfS0FTQU5f
SU5MSU5FPXkKQ09ORklHX0tBU0FOX1NUQUNLPXkKQ09ORklHX0tBU0FOX1ZNQUxMT0M9eQojIENP
TkZJR19LQVNBTl9NT0RVTEVfVEVTVCBpcyBub3Qgc2V0CiMgQ09ORklHX0tBU0FOX0VYVFJBX0lO
Rk8gaXMgbm90IHNldApDT05GSUdfSEFWRV9BUkNIX0tGRU5DRT15CiMgQ09ORklHX0tGRU5DRSBp
cyBub3Qgc2V0CkNPTkZJR19IQVZFX0FSQ0hfS01TQU49eQojIGVuZCBvZiBNZW1vcnkgRGVidWdn
aW5nCgojIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CgojCiMgRGVidWcgT29wcywgTG9j
a3VwcyBhbmQgSGFuZ3MKIwpDT05GSUdfUEFOSUNfT05fT09QUz15CkNPTkZJR19QQU5JQ19PTl9P
T1BTX1ZBTFVFPTEKQ09ORklHX1BBTklDX1RJTUVPVVQ9ODY0MDAKQ09ORklHX0xPQ0tVUF9ERVRF
Q1RPUj15CkNPTkZJR19TT0ZUTE9DS1VQX0RFVEVDVE9SPXkKQ09ORklHX0JPT1RQQVJBTV9TT0ZU
TE9DS1VQX1BBTklDPXkKQ09ORklHX0hBVkVfSEFSRExPQ0tVUF9ERVRFQ1RPUl9CVUREWT15CkNP
TkZJR19IQVJETE9DS1VQX0RFVEVDVE9SPXkKIyBDT05GSUdfSEFSRExPQ0tVUF9ERVRFQ1RPUl9Q
UkVGRVJfQlVERFkgaXMgbm90IHNldApDT05GSUdfSEFSRExPQ0tVUF9ERVRFQ1RPUl9QRVJGPXkK
IyBDT05GSUdfSEFSRExPQ0tVUF9ERVRFQ1RPUl9CVUREWSBpcyBub3Qgc2V0CiMgQ09ORklHX0hB
UkRMT0NLVVBfREVURUNUT1JfQVJDSCBpcyBub3Qgc2V0CkNPTkZJR19IQVJETE9DS1VQX0RFVEVD
VE9SX0NPVU5UU19IUlRJTUVSPXkKQ09ORklHX0hBUkRMT0NLVVBfQ0hFQ0tfVElNRVNUQU1QPXkK
Q09ORklHX0JPT1RQQVJBTV9IQVJETE9DS1VQX1BBTklDPXkKQ09ORklHX0RFVEVDVF9IVU5HX1RB
U0s9eQpDT05GSUdfREVGQVVMVF9IVU5HX1RBU0tfVElNRU9VVD0xNDAKQ09ORklHX0JPT1RQQVJB
TV9IVU5HX1RBU0tfUEFOSUM9eQpDT05GSUdfV1FfV0FUQ0hET0c9eQojIENPTkZJR19XUV9DUFVf
SU5URU5TSVZFX1JFUE9SVCBpcyBub3Qgc2V0CiMgQ09ORklHX1RFU1RfTE9DS1VQIGlzIG5vdCBz
ZXQKIyBlbmQgb2YgRGVidWcgT29wcywgTG9ja3VwcyBhbmQgSGFuZ3MKCiMKIyBTY2hlZHVsZXIg
RGVidWdnaW5nCiMKIyBDT05GSUdfU0NIRURfREVCVUcgaXMgbm90IHNldApDT05GSUdfU0NIRURf
SU5GTz15CkNPTkZJR19TQ0hFRFNUQVRTPXkKIyBlbmQgb2YgU2NoZWR1bGVyIERlYnVnZ2luZwoK
Q09ORklHX0RFQlVHX1RJTUVLRUVQSU5HPXkKQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQoKIwojIExv
Y2sgRGVidWdnaW5nIChzcGlubG9ja3MsIG11dGV4ZXMsIGV0Yy4uLikKIwpDT05GSUdfTE9DS19E
RUJVR0dJTkdfU1VQUE9SVD15CkNPTkZJR19QUk9WRV9MT0NLSU5HPXkKIyBDT05GSUdfUFJPVkVf
UkFXX0xPQ0tfTkVTVElORyBpcyBub3Qgc2V0CiMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0
CkNPTkZJR19ERUJVR19SVF9NVVRFWEVTPXkKQ09ORklHX0RFQlVHX1NQSU5MT0NLPXkKQ09ORklH
X0RFQlVHX01VVEVYRVM9eQpDT05GSUdfREVCVUdfV1dfTVVURVhfU0xPV1BBVEg9eQpDT05GSUdf
REVCVUdfUldTRU1TPXkKQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0M9eQpDT05GSUdfTE9DS0RFUD15
CkNPTkZJR19MT0NLREVQX0JJVFM9MTcKQ09ORklHX0xPQ0tERVBfQ0hBSU5TX0JJVFM9MTgKQ09O
RklHX0xPQ0tERVBfU1RBQ0tfVFJBQ0VfQklUUz0yMApDT05GSUdfTE9DS0RFUF9TVEFDS19UUkFD
RV9IQVNIX0JJVFM9MTQKQ09ORklHX0xPQ0tERVBfQ0lSQ1VMQVJfUVVFVUVfQklUUz0xMgojIENP
TkZJR19ERUJVR19MT0NLREVQIGlzIG5vdCBzZXQKQ09ORklHX0RFQlVHX0FUT01JQ19TTEVFUD15
CiMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CiMgQ09ORklH
X0xPQ0tfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKIyBDT05GSUdfV1dfTVVURVhfU0VMRlRFU1Qg
aXMgbm90IHNldAojIENPTkZJR19TQ0ZfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKQ09ORklHX0NT
RF9MT0NLX1dBSVRfREVCVUc9eQojIENPTkZJR19DU0RfTE9DS19XQUlUX0RFQlVHX0RFRkFVTFQg
aXMgbm90IHNldAojIGVuZCBvZiBMb2NrIERlYnVnZ2luZyAoc3BpbmxvY2tzLCBtdXRleGVzLCBl
dGMuLi4pCgpDT05GSUdfVFJBQ0VfSVJRRkxBR1M9eQpDT05GSUdfVFJBQ0VfSVJRRkxBR1NfTk1J
PXkKQ09ORklHX05NSV9DSEVDS19DUFU9eQpDT05GSUdfREVCVUdfSVJRRkxBR1M9eQpDT05GSUdf
U1RBQ0tUUkFDRT15CiMgQ09ORklHX1dBUk5fQUxMX1VOU0VFREVEX1JBTkRPTSBpcyBub3Qgc2V0
CiMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAojIENPTkZJR19ERUJVR19LT0JKRUNU
X1JFTEVBU0UgaXMgbm90IHNldAoKIwojIERlYnVnIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMKIwpD
T05GSUdfREVCVUdfTElTVD15CkNPTkZJR19ERUJVR19QTElTVD15CkNPTkZJR19ERUJVR19TRz15
CkNPTkZJR19ERUJVR19OT1RJRklFUlM9eQpDT05GSUdfREVCVUdfTUFQTEVfVFJFRT15CiMgZW5k
IG9mIERlYnVnIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMKCiMKIyBSQ1UgRGVidWdnaW5nCiMKQ09O
RklHX1BST1ZFX1JDVT15CiMgQ09ORklHX1JDVV9TQ0FMRV9URVNUIGlzIG5vdCBzZXQKIyBDT05G
SUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiMgQ09ORklHX1JDVV9SRUZfU0NBTEVfVEVT
VCBpcyBub3Qgc2V0CkNPTkZJR19SQ1VfQ1BVX1NUQUxMX1RJTUVPVVQ9MTAwCkNPTkZJR19SQ1Vf
RVhQX0NQVV9TVEFMTF9USU1FT1VUPTIxMDAwCiMgQ09ORklHX1JDVV9DUFVfU1RBTExfQ1BVVElN
RSBpcyBub3Qgc2V0CiMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CkNPTkZJR19SQ1VfRVFT
X0RFQlVHPXkKIyBlbmQgb2YgUkNVIERlYnVnZ2luZwoKIyBDT05GSUdfREVCVUdfV1FfRk9SQ0Vf
UlJfQ1BVIGlzIG5vdCBzZXQKIyBDT05GSUdfQ1BVX0hPVFBMVUdfU1RBVEVfQ09OVFJPTCBpcyBu
b3Qgc2V0CiMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldApDT05GSUdfVVNFUl9TVEFDS1RS
QUNFX1NVUFBPUlQ9eQpDT05GSUdfTk9QX1RSQUNFUj15CkNPTkZJR19IQVZFX1JFVEhPT0s9eQpD
T05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQpDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15
CkNPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfUkVHUz15CkNPTkZJR19IQVZFX0RZTkFN
SUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTPXkKQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0Vf
V0lUSF9BUkdTPXkKQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0VfTk9fUEFUQ0hBQkxFPXkKQ09O
RklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQpDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNF
UE9JTlRTPXkKQ09ORklHX0hBVkVfRkVOVFJZPXkKQ09ORklHX0hBVkVfT0JKVE9PTF9NQ09VTlQ9
eQpDT05GSUdfSEFWRV9PQkpUT09MX05PUF9NQ09VTlQ9eQpDT05GSUdfSEFWRV9DX1JFQ09SRE1D
T1VOVD15CkNPTkZJR19IQVZFX0JVSUxEVElNRV9NQ09VTlRfU09SVD15CkNPTkZJR19UUkFDRV9D
TE9DSz15CkNPTkZJR19SSU5HX0JVRkZFUj15CkNPTkZJR19FVkVOVF9UUkFDSU5HPXkKQ09ORklH
X0NPTlRFWFRfU1dJVENIX1RSQUNFUj15CkNPTkZJR19QUkVFTVBUSVJRX1RSQUNFUE9JTlRTPXkK
Q09ORklHX1RSQUNJTkc9eQpDT05GSUdfR0VORVJJQ19UUkFDRVI9eQpDT05GSUdfVFJBQ0lOR19T
VVBQT1JUPXkKQ09ORklHX0ZUUkFDRT15CiMgQ09ORklHX0JPT1RUSU1FX1RSQUNJTkcgaXMgbm90
IHNldAojIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAojIENPTkZJR19TVEFDS19U
UkFDRVIgaXMgbm90IHNldAojIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CiMgQ09O
RklHX1BSRUVNUFRfVFJBQ0VSIGlzIG5vdCBzZXQKIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5v
dCBzZXQKIyBDT05GSUdfSFdMQVRfVFJBQ0VSIGlzIG5vdCBzZXQKIyBDT05GSUdfT1NOT0lTRV9U
UkFDRVIgaXMgbm90IHNldAojIENPTkZJR19USU1FUkxBVF9UUkFDRVIgaXMgbm90IHNldAojIENP
TkZJR19NTUlPVFJBQ0UgaXMgbm90IHNldAojIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMgaXMgbm90
IHNldAojIENPTkZJR19UUkFDRVJfU05BUFNIT1QgaXMgbm90IHNldApDT05GSUdfQlJBTkNIX1BS
T0ZJTEVfTk9ORT15CiMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBz
ZXQKQ09ORklHX0JMS19ERVZfSU9fVFJBQ0U9eQpDT05GSUdfVVBST0JFX0VWRU5UUz15CkNPTkZJ
R19CUEZfRVZFTlRTPXkKQ09ORklHX0RZTkFNSUNfRVZFTlRTPXkKQ09ORklHX1BST0JFX0VWRU5U
Uz15CiMgQ09ORklHX1NZTlRIX0VWRU5UUyBpcyBub3Qgc2V0CiMgQ09ORklHX1VTRVJfRVZFTlRT
IGlzIG5vdCBzZXQKIyBDT05GSUdfSElTVF9UUklHR0VSUyBpcyBub3Qgc2V0CkNPTkZJR19UUkFD
RV9FVkVOVF9JTkpFQ1Q9eQojIENPTkZJR19UUkFDRVBPSU5UX0JFTkNITUFSSyBpcyBub3Qgc2V0
CiMgQ09ORklHX1JJTkdfQlVGRkVSX0JFTkNITUFSSyBpcyBub3Qgc2V0CiMgQ09ORklHX1RSQUNF
X0VWQUxfTUFQX0ZJTEUgaXMgbm90IHNldAojIENPTkZJR19GVFJBQ0VfU1RBUlRVUF9URVNUIGlz
IG5vdCBzZXQKIyBDT05GSUdfUklOR19CVUZGRVJfU1RBUlRVUF9URVNUIGlzIG5vdCBzZXQKQ09O
RklHX1JJTkdfQlVGRkVSX1ZBTElEQVRFX1RJTUVfREVMVEFTPXkKIyBDT05GSUdfUFJFRU1QVElS
UV9ERUxBWV9URVNUIGlzIG5vdCBzZXQKIyBDT05GSUdfUlYgaXMgbm90IHNldApDT05GSUdfUFJP
VklERV9PSENJMTM5NF9ETUFfSU5JVD15CiMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldApDT05G
SUdfSEFWRV9TQU1QTEVfRlRSQUNFX0RJUkVDVD15CkNPTkZJR19IQVZFX1NBTVBMRV9GVFJBQ0Vf
RElSRUNUX01VTFRJPXkKQ09ORklHX0FSQ0hfSEFTX0RFVk1FTV9JU19BTExPV0VEPXkKIyBDT05G
SUdfU1RSSUNUX0RFVk1FTSBpcyBub3Qgc2V0CgojCiMgeDg2IERlYnVnZ2luZwojCkNPTkZJR19F
QVJMWV9QUklOVEtfVVNCPXkKQ09ORklHX1g4Nl9WRVJCT1NFX0JPT1RVUD15CkNPTkZJR19FQVJM
WV9QUklOVEs9eQpDT05GSUdfRUFSTFlfUFJJTlRLX0RCR1A9eQojIENPTkZJR19FQVJMWV9QUklO
VEtfVVNCX1hEQkMgaXMgbm90IHNldAojIENPTkZJR19ERUJVR19UTEJGTFVTSCBpcyBub3Qgc2V0
CkNPTkZJR19IQVZFX01NSU9UUkFDRV9TVVBQT1JUPXkKIyBDT05GSUdfWDg2X0RFQ09ERVJfU0VM
RlRFU1QgaXMgbm90IHNldApDT05GSUdfSU9fREVMQVlfMFg4MD15CiMgQ09ORklHX0lPX0RFTEFZ
XzBYRUQgaXMgbm90IHNldAojIENPTkZJR19JT19ERUxBWV9VREVMQVkgaXMgbm90IHNldAojIENP
TkZJR19JT19ERUxBWV9OT05FIGlzIG5vdCBzZXQKQ09ORklHX0RFQlVHX0JPT1RfUEFSQU1TPXkK
IyBDT05GSUdfQ1BBX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX0RFQlVHX0VOVFJZPXkKIyBDT05G
SUdfREVCVUdfTk1JX1NFTEZURVNUIGlzIG5vdCBzZXQKQ09ORklHX1g4Nl9ERUJVR19GUFU9eQoj
IENPTkZJR19QVU5JVF9BVE9NX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX1VOV0lOREVSX09SQz15
CiMgQ09ORklHX1VOV0lOREVSX0ZSQU1FX1BPSU5URVIgaXMgbm90IHNldAojIGVuZCBvZiB4ODYg
RGVidWdnaW5nCgojCiMgS2VybmVsIFRlc3RpbmcgYW5kIENvdmVyYWdlCiMKIyBDT05GSUdfS1VO
SVQgaXMgbm90IHNldAojIENPTkZJR19OT1RJRklFUl9FUlJPUl9JTkpFQ1RJT04gaXMgbm90IHNl
dApDT05GSUdfRkFVTFRfSU5KRUNUSU9OPXkKQ09ORklHX0ZBSUxTTEFCPXkKQ09ORklHX0ZBSUxf
UEFHRV9BTExPQz15CkNPTkZJR19GQVVMVF9JTkpFQ1RJT05fVVNFUkNPUFk9eQpDT05GSUdfRkFJ
TF9NQUtFX1JFUVVFU1Q9eQpDT05GSUdfRkFJTF9JT19USU1FT1VUPXkKQ09ORklHX0ZBSUxfRlVU
RVg9eQpDT05GSUdfRkFVTFRfSU5KRUNUSU9OX0RFQlVHX0ZTPXkKIyBDT05GSUdfRkFJTF9NTUNf
UkVRVUVTVCBpcyBub3Qgc2V0CkNPTkZJR19GQVVMVF9JTkpFQ1RJT05fQ09ORklHRlM9eQojIENP
TkZJR19GQVVMVF9JTkpFQ1RJT05fU1RBQ0tUUkFDRV9GSUxURVIgaXMgbm90IHNldApDT05GSUdf
QVJDSF9IQVNfS0NPVj15CkNPTkZJR19DQ19IQVNfU0FOQ09WX1RSQUNFX1BDPXkKQ09ORklHX0tD
T1Y9eQpDT05GSUdfS0NPVl9FTkFCTEVfQ09NUEFSSVNPTlM9eQpDT05GSUdfS0NPVl9JTlNUUlVN
RU5UX0FMTD15CkNPTkZJR19LQ09WX0lSUV9BUkVBX1NJWkU9MHg0MDAwMApDT05GSUdfUlVOVElN
RV9URVNUSU5HX01FTlU9eQojIENPTkZJR19URVNUX0RIUlkgaXMgbm90IHNldAojIENPTkZJR19M
S0RUTSBpcyBub3Qgc2V0CiMgQ09ORklHX1RFU1RfTUlOX0hFQVAgaXMgbm90IHNldAojIENPTkZJ
R19URVNUX0RJVjY0IGlzIG5vdCBzZXQKIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBu
b3Qgc2V0CiMgQ09ORklHX1RFU1RfUkVGX1RSQUNLRVIgaXMgbm90IHNldAojIENPTkZJR19SQlRS
RUVfVEVTVCBpcyBub3Qgc2V0CiMgQ09ORklHX1JFRURfU09MT01PTl9URVNUIGlzIG5vdCBzZXQK
IyBDT05GSUdfSU5URVJWQUxfVFJFRV9URVNUIGlzIG5vdCBzZXQKIyBDT05GSUdfUEVSQ1BVX1RF
U1QgaXMgbm90IHNldAojIENPTkZJR19BVE9NSUM2NF9TRUxGVEVTVCBpcyBub3Qgc2V0CiMgQ09O
RklHX1RFU1RfSEVYRFVNUCBpcyBub3Qgc2V0CiMgQ09ORklHX1NUUklOR19TRUxGVEVTVCBpcyBu
b3Qgc2V0CiMgQ09ORklHX1RFU1RfU1RSSU5HX0hFTFBFUlMgaXMgbm90IHNldAojIENPTkZJR19U
RVNUX0tTVFJUT1ggaXMgbm90IHNldAojIENPTkZJR19URVNUX1BSSU5URiBpcyBub3Qgc2V0CiMg
Q09ORklHX1RFU1RfU0NBTkYgaXMgbm90IHNldAojIENPTkZJR19URVNUX0JJVE1BUCBpcyBub3Qg
c2V0CiMgQ09ORklHX1RFU1RfVVVJRCBpcyBub3Qgc2V0CiMgQ09ORklHX1RFU1RfWEFSUkFZIGlz
IG5vdCBzZXQKIyBDT05GSUdfVEVTVF9NQVBMRV9UUkVFIGlzIG5vdCBzZXQKIyBDT05GSUdfVEVT
VF9SSEFTSFRBQkxFIGlzIG5vdCBzZXQKIyBDT05GSUdfVEVTVF9JREEgaXMgbm90IHNldAojIENP
TkZJR19URVNUX0xLTSBpcyBub3Qgc2V0CiMgQ09ORklHX1RFU1RfQklUT1BTIGlzIG5vdCBzZXQK
IyBDT05GSUdfVEVTVF9WTUFMTE9DIGlzIG5vdCBzZXQKIyBDT05GSUdfVEVTVF9VU0VSX0NPUFkg
aXMgbm90IHNldAojIENPTkZJR19URVNUX0JQRiBpcyBub3Qgc2V0CiMgQ09ORklHX1RFU1RfQkxB
Q0tIT0xFX0RFViBpcyBub3Qgc2V0CiMgQ09ORklHX0ZJTkRfQklUX0JFTkNITUFSSyBpcyBub3Qg
c2V0CiMgQ09ORklHX1RFU1RfRklSTVdBUkUgaXMgbm90IHNldAojIENPTkZJR19URVNUX1NZU0NU
TCBpcyBub3Qgc2V0CiMgQ09ORklHX1RFU1RfVURFTEFZIGlzIG5vdCBzZXQKIyBDT05GSUdfVEVT
VF9TVEFUSUNfS0VZUyBpcyBub3Qgc2V0CiMgQ09ORklHX1RFU1RfRFlOQU1JQ19ERUJVRyBpcyBu
b3Qgc2V0CiMgQ09ORklHX1RFU1RfS01PRCBpcyBub3Qgc2V0CiMgQ09ORklHX1RFU1RfREVCVUdf
VklSVFVBTCBpcyBub3Qgc2V0CiMgQ09ORklHX1RFU1RfTUVNQ0FUX1AgaXMgbm90IHNldAojIENP
TkZJR19URVNUX01FTUlOSVQgaXMgbm90IHNldAojIENPTkZJR19URVNUX0ZSRUVfUEFHRVMgaXMg
bm90IHNldAojIENPTkZJR19URVNUX0NMT0NLU09VUkNFX1dBVENIRE9HIGlzIG5vdCBzZXQKIyBD
T05GSUdfVEVTVF9PQkpQT09MIGlzIG5vdCBzZXQKQ09ORklHX0FSQ0hfVVNFX01FTVRFU1Q9eQoj
IENPTkZJR19NRU1URVNUIGlzIG5vdCBzZXQKIyBlbmQgb2YgS2VybmVsIFRlc3RpbmcgYW5kIENv
dmVyYWdlCgojCiMgUnVzdCBoYWNraW5nCiMKIyBlbmQgb2YgUnVzdCBoYWNraW5nCiMgZW5kIG9m
IEtlcm5lbCBoYWNraW5nCg==
--000000000000125b2c061bb2199e--
.

X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
From: shichao lai <shichaorai@gmail.com>
Date: Tue, 25 Jun 2024 15:49:52 +0800
Message-ID: <CACjpba7xCf=Tn8bRRdj7h7WErEGQp3u1=sxH1khE1Ow6RTevug@mail.gmail.com>
Subject: KASAN: slab-use-after-free Read in em28xx_init_extension
To: Mauro Carvalho Chehab <mchehab@kernel.org>, linux-kernel@vger.kernel.org, 
	linux-media@vger.kernel.org, syzkaller-bugs@googlegroups.com
Content-Type: multipart/mixed; boundary="00000000000087137e061bb225b5"
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257818
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-media
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

--00000000000087137e061bb225b5
Content-Type: text/plain; charset="UTF-8"

Hello!
I found a potential bug titled "KASAN: slab-use-after-free Read in
em28xx_init_extension"
This bug may be related to the previous bugs but new modules are in the traces,
such as security/tomoyo. Unfortunately, I didn't get the repro from syzkaller.

Similar reports & bugs:
1. https://groups.google.com/g/syzkaller-bugs/c/3Cmf7yuRTo8/m/XiHMsxW6BAAJ
2. https://groups.google.com/g/syzkaller-bugs/c/xJlNyYnPiYI/m/tboOjArwBAAJ
3. https://groups.google.com/g/syzkaller-bugs/c/gPfdAdmsuhc/m/mpnerq76AQAJ

kernel version: v6.8
kernel config: attachment
gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04)

If you fix this issue, please add the following tag to the commit:
Reported-by: Shichao Lai <shichaorai@gmail.com>
Thanks!

==================================================================
BUG: KASAN: slab-use-after-free in
__list_add_valid_or_report+0xe3/0x100 lib/list_debug.c:32
Read of size 8 at addr ffff888111948250 by task kworker/0:4/4049

CPU: 0 PID: 4049 Comm: kworker/0:4 Not tainted 6.8.0 #1
Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS
rel-1.16.2-0-gea1b7a073390-prebuilt.qemu.org 04/01/2014
Workqueue: events request_module_async
Call Trace:
 <TASK>
 __dump_stack lib/dump_stack.c:88 [inline]
 dump_stack_lvl+0xd9/0x150 lib/dump_stack.c:106
 print_address_description mm/kasan/report.c:377 [inline]
 print_report+0xc1/0x5e0 mm/kasan/report.c:488
 kasan_report+0xbe/0xf0 mm/kasan/report.c:601
 __list_add_valid_or_report+0xe3/0x100 lib/list_debug.c:32
 __list_add_valid include/linux/list.h:88 [inline]
 __list_add include/linux/list.h:150 [inline]
 list_add_tail include/linux/list.h:183 [inline]
 em28xx_init_extension+0x48/0x1f0 drivers/media/usb/em28xx/em28xx-core.c:1113
 request_module_async+0x61/0x70 drivers/media/usb/em28xx/em28xx-cards.c:3405
 process_one_work+0x878/0x15c0 kernel/workqueue.c:2633
 process_scheduled_works kernel/workqueue.c:2706 [inline]
 worker_thread+0x855/0x1200 kernel/workqueue.c:2787
 kthread+0x2cc/0x3b0 kernel/kthread.c:388
 ret_from_fork+0x45/0x80 arch/x86/kernel/process.c:147
 ret_from_fork_asm+0x11/0x20 arch/x86/entry/entry_64.S:243
 </TASK>

Allocated by task 2395:
 kasan_save_stack+0x24/0x40 mm/kasan/common.c:47
 kasan_save_track+0x14/0x30 mm/kasan/common.c:68
 poison_kmalloc_redzone mm/kasan/common.c:370 [inline]
 __kasan_kmalloc+0x7b/0x90 mm/kasan/common.c:387
 kasan_kmalloc include/linux/kasan.h:211 [inline]
 __do_kmalloc_node mm/slub.c:3981 [inline]
 __kmalloc+0x1f0/0x440 mm/slub.c:3994
 kmalloc include/linux/slab.h:594 [inline]
 tomoyo_realpath_from_path+0xc3/0x600 security/tomoyo/realpath.c:251
 tomoyo_get_realpath security/tomoyo/file.c:151 [inline]
 tomoyo_check_open_permission+0x290/0x3a0 security/tomoyo/file.c:771
 tomoyo_file_open+0x6f/0x90 security/tomoyo/tomoyo.c:334
 security_file_open+0x49/0xa0 security/security.c:2933
 do_dentry_open+0x576/0x16f0 fs/open.c:940
 do_open fs/namei.c:3645 [inline]
 path_openat+0x1b1f/0x2660 fs/namei.c:3802
 do_filp_open+0x1c9/0x410 fs/namei.c:3829
 do_sys_openat2+0x160/0x1c0 fs/open.c:1404
 do_sys_open fs/open.c:1419 [inline]
 __do_sys_openat fs/open.c:1435 [inline]
 __se_sys_openat fs/open.c:1430 [inline]
 __x64_sys_openat+0x140/0x1f0 fs/open.c:1430
 do_syscall_x64 arch/x86/entry/common.c:52 [inline]
 do_syscall_64+0xd2/0x250 arch/x86/entry/common.c:83
 entry_SYSCALL_64_after_hwframe+0x63/0x6b

Freed by task 2395:
 kasan_save_stack+0x24/0x40 mm/kasan/common.c:47
 kasan_save_track+0x14/0x30 mm/kasan/common.c:68
 kasan_save_free_info+0x3b/0x60 mm/kasan/generic.c:589
 poison_slab_object mm/kasan/common.c:240 [inline]
 poison_slab_object mm/kasan/common.c:211 [inline]
 __kasan_slab_free+0x102/0x190 mm/kasan/common.c:256
 kasan_slab_free include/linux/kasan.h:184 [inline]
 slab_free_hook mm/slub.c:2121 [inline]
 slab_free mm/slub.c:4299 [inline]
 kfree+0xed/0x340 mm/slub.c:4409
 tomoyo_realpath_from_path+0x190/0x600 security/tomoyo/realpath.c:286
 tomoyo_get_realpath security/tomoyo/file.c:151 [inline]
 tomoyo_check_open_permission+0x290/0x3a0 security/tomoyo/file.c:771
 tomoyo_file_open+0x6f/0x90 security/tomoyo/tomoyo.c:334
 security_file_open+0x49/0xa0 security/security.c:2933
 do_dentry_open+0x576/0x16f0 fs/open.c:940
 do_open fs/namei.c:3645 [inline]
 path_openat+0x1b1f/0x2660 fs/namei.c:3802
 do_filp_open+0x1c9/0x410 fs/namei.c:3829
 do_sys_openat2+0x160/0x1c0 fs/open.c:1404
 do_sys_open fs/open.c:1419 [inline]
 __do_sys_openat fs/open.c:1435 [inline]
 __se_sys_openat fs/open.c:1430 [inline]
 __x64_sys_openat+0x140/0x1f0 fs/open.c:1430
 do_syscall_x64 arch/x86/entry/common.c:52 [inline]
 do_syscall_64+0xd2/0x250 arch/x86/entry/common.c:83
 entry_SYSCALL_64_after_hwframe+0x63/0x6b

The buggy address belongs to the object at ffff888111948000
 which belongs to the cache kmalloc-4k of size 4096
The buggy address is located 592 bytes inside of
 freed 4096-byte region [ffff888111948000, ffff888111949000)

The buggy address belongs to the physical page:
page:ffffea0004465200 refcount:1 mapcount:0 mapping:0000000000000000
index:0x0 pfn:0x111948
head:ffffea0004465200 order:3 entire_mapcount:0 nr_pages_mapped:0 pincount:0
flags: 0x200000000000840(slab|head|node=0|zone=2)
page_type: 0xffffffff()
raw: 0200000000000840 ffff888100042140 dead000000000100 dead000000000122
raw: 0000000000000000 0000000000040004 00000001ffffffff 0000000000000000
page dumped because: kasan: bad access detected
page_owner tracks the page as allocated
page last allocated via order 3, migratetype Unmovable, gfp_mask
0x1d2040(__GFP_IO|__GFP_NOWARN|__GFP_NORETRY|__GFP_COMP|__GFP_NOMEMALLOC|__GFP_HARDWALL),
pid 2380, tgid 2380 (systemd-journal), ts 138489329275, free_ts
138483811668
 set_page_owner include/linux/page_owner.h:31 [inline]
 post_alloc_hook+0x2d9/0x350 mm/page_alloc.c:1533
 prep_new_page mm/page_alloc.c:1540 [inline]
 get_page_from_freelist+0x1008/0x2e40 mm/page_alloc.c:3311
 __alloc_pages+0x210/0x2060 mm/page_alloc.c:4569
 __alloc_pages_node include/linux/gfp.h:238 [inline]
 alloc_pages_node include/linux/gfp.h:261 [inline]
 alloc_slab_page mm/slub.c:2190 [inline]
 allocate_slab mm/slub.c:2354 [inline]
 new_slab+0xd3/0x3b0 mm/slub.c:2407
 ___slab_alloc+0x945/0x1700 mm/slub.c:3540
 __slab_alloc.constprop.0+0x56/0xa0 mm/slub.c:3625
 __slab_alloc_node mm/slub.c:3678 [inline]
 slab_alloc_node mm/slub.c:3850 [inline]
 __do_kmalloc_node mm/slub.c:3980 [inline]
 __kmalloc+0x3a8/0x440 mm/slub.c:3994
 kmalloc include/linux/slab.h:594 [inline]
 tomoyo_realpath_from_path+0xc3/0x600 security/tomoyo/realpath.c:251
 tomoyo_get_realpath security/tomoyo/file.c:151 [inline]
 tomoyo_path_perm+0x22f/0x420 security/tomoyo/file.c:822
 security_inode_getattr+0xd3/0x140 security/security.c:2238
 vfs_getattr fs/stat.c:173 [inline]
 vfs_fstat+0x4a/0xc0 fs/stat.c:198
 __do_sys_newfstat+0x7a/0xf0 fs/stat.c:478
 do_syscall_x64 arch/x86/entry/common.c:52 [inline]
 do_syscall_64+0xd2/0x250 arch/x86/entry/common.c:83
 entry_SYSCALL_64_after_hwframe+0x63/0x6b
page last free pid 2380 tgid 2380 stack trace:
 reset_page_owner include/linux/page_owner.h:24 [inline]
 free_pages_prepare mm/page_alloc.c:1140 [inline]
 free_unref_page_prepare+0x4f2/0xad0 mm/page_alloc.c:2346
 free_unref_page+0x33/0x2d0 mm/page_alloc.c:2486
 __put_partials+0x154/0x170 mm/slub.c:2922
 qlink_free mm/kasan/quarantine.c:163 [inline]
 qlist_free_all+0x50/0x140 mm/kasan/quarantine.c:179
 kasan_quarantine_reduce+0x18e/0x1d0 mm/kasan/quarantine.c:286
 __kasan_slab_alloc+0x45/0x60 mm/kasan/common.c:322
 kasan_slab_alloc include/linux/kasan.h:201 [inline]
 slab_post_alloc_hook mm/slub.c:3813 [inline]
 slab_alloc_node mm/slub.c:3860 [inline]
 kmem_cache_alloc+0x12a/0x2e0 mm/slub.c:3867
 getname_flags.part.0+0x50/0x4f0 fs/namei.c:140
 getname_flags include/linux/audit.h:322 [inline]
 getname+0x92/0xd0 fs/namei.c:219
 do_sys_openat2+0xe8/0x1c0 fs/open.c:1398
 do_sys_open fs/open.c:1419 [inline]
 __do_sys_openat fs/open.c:1435 [inline]
 __se_sys_openat fs/open.c:1430 [inline]
 __x64_sys_openat+0x140/0x1f0 fs/open.c:1430
 do_syscall_x64 arch/x86/entry/common.c:52 [inline]
 do_syscall_64+0xd2/0x250 arch/x86/entry/common.c:83
 entry_SYSCALL_64_after_hwframe+0x63/0x6b

Memory state around the buggy address:
 ffff888111948100: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
 ffff888111948180: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
>ffff888111948200: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
                                                 ^
 ffff888111948280: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
 ffff888111948300: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
==================================================================

--00000000000087137e061bb225b5
Content-Type: application/octet-stream; name=".config"
Content-Disposition: attachment; filename=".config"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_lxu3voio0

IwojIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZpbGU7IERPIE5PVCBFRElULgojIExpbnV4L3g4
NiA2LjguMCBLZXJuZWwgQ29uZmlndXJhdGlvbgojCkNPTkZJR19DQ19WRVJTSU9OX1RFWFQ9Imdj
YyAoVWJ1bnR1IDExLjQuMC0xdWJ1bnR1MX4yMi4wNCkgMTEuNC4wIgpDT05GSUdfQ0NfSVNfR0ND
PXkKQ09ORklHX0dDQ19WRVJTSU9OPTExMDQwMApDT05GSUdfQ0xBTkdfVkVSU0lPTj0wCkNPTkZJ
R19BU19JU19HTlU9eQpDT05GSUdfQVNfVkVSU0lPTj0yMzgwMApDT05GSUdfTERfSVNfQkZEPXkK
Q09ORklHX0xEX1ZFUlNJT049MjM4MDAKQ09ORklHX0xMRF9WRVJTSU9OPTAKQ09ORklHX0NDX0NB
Tl9MSU5LPXkKQ09ORklHX0NDX0NBTl9MSU5LX1NUQVRJQz15CkNPTkZJR19DQ19IQVNfQVNNX0dP
VE9fT1VUUFVUPXkKQ09ORklHX0NDX0hBU19BU01fR09UT19USUVEX09VVFBVVD15CkNPTkZJR19H
Q0NfQVNNX0dPVE9fT1VUUFVUX1dPUktBUk9VTkQ9eQpDT05GSUdfVE9PTFNfU1VQUE9SVF9SRUxS
PXkKQ09ORklHX0NDX0hBU19BU01fSU5MSU5FPXkKQ09ORklHX0NDX0hBU19OT19QUk9GSUxFX0ZO
X0FUVFI9eQpDT05GSUdfUEFIT0xFX1ZFUlNJT049MTI1CkNPTkZJR19DT05TVFJVQ1RPUlM9eQpD
T05GSUdfSVJRX1dPUks9eQpDT05GSUdfQlVJTERUSU1FX1RBQkxFX1NPUlQ9eQpDT05GSUdfVEhS
RUFEX0lORk9fSU5fVEFTSz15CgojCiMgR2VuZXJhbCBzZXR1cAojCkNPTkZJR19JTklUX0VOVl9B
UkdfTElNSVQ9MzIKIyBDT05GSUdfQ09NUElMRV9URVNUIGlzIG5vdCBzZXQKIyBDT05GSUdfV0VS
Uk9SIGlzIG5vdCBzZXQKQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgpDT05GSUdfTE9DQUxWRVJTSU9O
X0FVVE89eQpDT05GSUdfQlVJTERfU0FMVD0iIgpDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CkNP
TkZJR19IQVZFX0tFUk5FTF9CWklQMj15CkNPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKQ09ORklH
X0hBVkVfS0VSTkVMX1haPXkKQ09ORklHX0hBVkVfS0VSTkVMX0xaTz15CkNPTkZJR19IQVZFX0tF
Uk5FTF9MWjQ9eQpDT05GSUdfSEFWRV9LRVJORUxfWlNURD15CkNPTkZJR19LRVJORUxfR1pJUD15
CiMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CiMgQ09ORklHX0tFUk5FTF9MWk1BIGlz
IG5vdCBzZXQKIyBDT05GSUdfS0VSTkVMX1haIGlzIG5vdCBzZXQKIyBDT05GSUdfS0VSTkVMX0xa
TyBpcyBub3Qgc2V0CiMgQ09ORklHX0tFUk5FTF9MWjQgaXMgbm90IHNldAojIENPTkZJR19LRVJO
RUxfWlNURCBpcyBub3Qgc2V0CkNPTkZJR19ERUZBVUxUX0lOSVQ9IiIKQ09ORklHX0RFRkFVTFRf
SE9TVE5BTUU9Iihub25lKSIKQ09ORklHX1NZU1ZJUEM9eQpDT05GSUdfU1lTVklQQ19TWVNDVEw9
eQpDT05GSUdfU1lTVklQQ19DT01QQVQ9eQpDT05GSUdfUE9TSVhfTVFVRVVFPXkKQ09ORklHX1BP
U0lYX01RVUVVRV9TWVNDVEw9eQojIENPTkZJR19XQVRDSF9RVUVVRSBpcyBub3Qgc2V0CkNPTkZJ
R19DUk9TU19NRU1PUllfQVRUQUNIPXkKIyBDT05GSUdfVVNFTElCIGlzIG5vdCBzZXQKQ09ORklH
X0FVRElUPXkKQ09ORklHX0hBVkVfQVJDSF9BVURJVFNZU0NBTEw9eQpDT05GSUdfQVVESVRTWVND
QUxMPXkKCiMKIyBJUlEgc3Vic3lzdGVtCiMKQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKQ09O
RklHX0dFTkVSSUNfSVJRX1NIT1c9eQpDT05GSUdfR0VORVJJQ19JUlFfRUZGRUNUSVZFX0FGRl9N
QVNLPXkKQ09ORklHX0dFTkVSSUNfUEVORElOR19JUlE9eQpDT05GSUdfR0VORVJJQ19JUlFfTUlH
UkFUSU9OPXkKQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15CkNPTkZJR19JUlFfRE9NQUlOPXkK
Q09ORklHX0lSUV9ET01BSU5fSElFUkFSQ0hZPXkKQ09ORklHX0dFTkVSSUNfTVNJX0lSUT15CkNP
TkZJR19JUlFfTVNJX0lPTU1VPXkKQ09ORklHX0dFTkVSSUNfSVJRX01BVFJJWF9BTExPQ0FUT1I9
eQpDT05GSUdfR0VORVJJQ19JUlFfUkVTRVJWQVRJT05fTU9ERT15CkNPTkZJR19JUlFfRk9SQ0VE
X1RIUkVBRElORz15CkNPTkZJR19TUEFSU0VfSVJRPXkKIyBDT05GSUdfR0VORVJJQ19JUlFfREVC
VUdGUyBpcyBub3Qgc2V0CiMgZW5kIG9mIElSUSBzdWJzeXN0ZW0KCkNPTkZJR19DTE9DS1NPVVJD
RV9XQVRDSERPRz15CkNPTkZJR19BUkNIX0NMT0NLU09VUkNFX0lOSVQ9eQpDT05GSUdfQ0xPQ0tT
T1VSQ0VfVkFMSURBVEVfTEFTVF9DWUNMRT15CkNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9
eQpDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRT
X0JST0FEQ0FTVD15CkNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX01JTl9BREpVU1Q9eQpDT05G
SUdfR0VORVJJQ19DTU9TX1VQREFURT15CkNPTkZJR19IQVZFX1BPU0lYX0NQVV9USU1FUlNfVEFT
S19XT1JLPXkKQ09ORklHX1BPU0lYX0NQVV9USU1FUlNfVEFTS19XT1JLPXkKQ09ORklHX0NPTlRF
WFRfVFJBQ0tJTkc9eQpDT05GSUdfQ09OVEVYVF9UUkFDS0lOR19JRExFPXkKCiMKIyBUaW1lcnMg
c3Vic3lzdGVtCiMKQ09ORklHX1RJQ0tfT05FU0hPVD15CkNPTkZJR19OT19IWl9DT01NT049eQoj
IENPTkZJR19IWl9QRVJJT0RJQyBpcyBub3Qgc2V0CkNPTkZJR19OT19IWl9JRExFPXkKIyBDT05G
SUdfTk9fSFpfRlVMTCBpcyBub3Qgc2V0CkNPTkZJR19DT05URVhUX1RSQUNLSU5HX1VTRVI9eQoj
IENPTkZJR19DT05URVhUX1RSQUNLSU5HX1VTRVJfRk9SQ0UgaXMgbm90IHNldApDT05GSUdfTk9f
SFo9eQpDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKQ09ORklHX0NMT0NLU09VUkNFX1dBVENIRE9H
X01BWF9TS0VXX1VTPTEyNQojIGVuZCBvZiBUaW1lcnMgc3Vic3lzdGVtCgpDT05GSUdfQlBGPXkK
Q09ORklHX0hBVkVfRUJQRl9KSVQ9eQpDT05GSUdfQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVD15
CgojCiMgQlBGIHN1YnN5c3RlbQojCkNPTkZJR19CUEZfU1lTQ0FMTD15CiMgQ09ORklHX0JQRl9K
SVQgaXMgbm90IHNldAojIENPTkZJR19CUEZfVU5QUklWX0RFRkFVTFRfT0ZGIGlzIG5vdCBzZXQK
IyBDT05GSUdfQlBGX1BSRUxPQUQgaXMgbm90IHNldAojIGVuZCBvZiBCUEYgc3Vic3lzdGVtCgpD
T05GSUdfUFJFRU1QVF9CVUlMRD15CiMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CkNP
TkZJR19QUkVFTVBUX1ZPTFVOVEFSWT15CiMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldApDT05G
SUdfUFJFRU1QVF9DT1VOVD15CkNPTkZJR19QUkVFTVBUSU9OPXkKQ09ORklHX1BSRUVNUFRfRFlO
QU1JQz15CiMgQ09ORklHX1NDSEVEX0NPUkUgaXMgbm90IHNldAoKIwojIENQVS9UYXNrIHRpbWUg
YW5kIHN0YXRzIGFjY291bnRpbmcKIwpDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORz15CiMgQ09O
RklHX1RJQ0tfQ1BVX0FDQ09VTlRJTkcgaXMgbm90IHNldApDT05GSUdfVklSVF9DUFVfQUNDT1VO
VElOR19HRU49eQojIENPTkZJR19JUlFfVElNRV9BQ0NPVU5USU5HIGlzIG5vdCBzZXQKQ09ORklH
X0JTRF9QUk9DRVNTX0FDQ1Q9eQojIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBz
ZXQKQ09ORklHX1RBU0tTVEFUUz15CkNPTkZJR19UQVNLX0RFTEFZX0FDQ1Q9eQpDT05GSUdfVEFT
S19YQUNDVD15CkNPTkZJR19UQVNLX0lPX0FDQ09VTlRJTkc9eQojIENPTkZJR19QU0kgaXMgbm90
IHNldAojIGVuZCBvZiBDUFUvVGFzayB0aW1lIGFuZCBzdGF0cyBhY2NvdW50aW5nCgpDT05GSUdf
Q1BVX0lTT0xBVElPTj15CgojCiMgUkNVIFN1YnN5c3RlbQojCkNPTkZJR19UUkVFX1JDVT15CkNP
TkZJR19QUkVFTVBUX1JDVT15CiMgQ09ORklHX1JDVV9FWFBFUlQgaXMgbm90IHNldApDT05GSUdf
VFJFRV9TUkNVPXkKQ09ORklHX1RBU0tTX1JDVV9HRU5FUklDPXkKQ09ORklHX1RBU0tTX1JDVT15
CkNPTkZJR19UQVNLU19UUkFDRV9SQ1U9eQpDT05GSUdfUkNVX1NUQUxMX0NPTU1PTj15CkNPTkZJ
R19SQ1VfTkVFRF9TRUdDQkxJU1Q9eQojIGVuZCBvZiBSQ1UgU3Vic3lzdGVtCgojIENPTkZJR19J
S0NPTkZJRyBpcyBub3Qgc2V0CiMgQ09ORklHX0lLSEVBREVSUyBpcyBub3Qgc2V0CkNPTkZJR19M
T0dfQlVGX1NISUZUPTE4CkNPTkZJR19MT0dfQ1BVX01BWF9CVUZfU0hJRlQ9MAojIENPTkZJR19Q
UklOVEtfSU5ERVggaXMgbm90IHNldApDT05GSUdfSEFWRV9VTlNUQUJMRV9TQ0hFRF9DTE9DSz15
CgojCiMgU2NoZWR1bGVyIGZlYXR1cmVzCiMKIyBDT05GSUdfVUNMQU1QX1RBU0sgaXMgbm90IHNl
dAojIGVuZCBvZiBTY2hlZHVsZXIgZmVhdHVyZXMKCkNPTkZJR19BUkNIX1NVUFBPUlRTX05VTUFf
QkFMQU5DSU5HPXkKQ09ORklHX0FSQ0hfV0FOVF9CQVRDSEVEX1VOTUFQX1RMQl9GTFVTSD15CkNP
TkZJR19DQ19IQVNfSU5UMTI4PXkKQ09ORklHX0NDX0lNUExJQ0lUX0ZBTExUSFJPVUdIPSItV2lt
cGxpY2l0LWZhbGx0aHJvdWdoPTUiCkNPTkZJR19HQ0MxMF9OT19BUlJBWV9CT1VORFM9eQpDT05G
SUdfQ0NfTk9fQVJSQVlfQk9VTkRTPXkKQ09ORklHX0dDQ19OT19TVFJJTkdPUF9PVkVSRkxPVz15
CkNPTkZJR19DQ19OT19TVFJJTkdPUF9PVkVSRkxPVz15CkNPTkZJR19BUkNIX1NVUFBPUlRTX0lO
VDEyOD15CiMgQ09ORklHX05VTUFfQkFMQU5DSU5HIGlzIG5vdCBzZXQKQ09ORklHX0NHUk9VUFM9
eQpDT05GSUdfUEFHRV9DT1VOVEVSPXkKIyBDT05GSUdfQ0dST1VQX0ZBVk9SX0RZTk1PRFMgaXMg
bm90IHNldApDT05GSUdfTUVNQ0c9eQpDT05GSUdfTUVNQ0dfS01FTT15CkNPTkZJR19CTEtfQ0dS
T1VQPXkKQ09ORklHX0NHUk9VUF9XUklURUJBQ0s9eQpDT05GSUdfQ0dST1VQX1NDSEVEPXkKQ09O
RklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQojIENPTkZJR19DRlNfQkFORFdJRFRIIGlzIG5vdCBzZXQK
IyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldApDT05GSUdfU0NIRURfTU1fQ0lEPXkK
Q09ORklHX0NHUk9VUF9QSURTPXkKQ09ORklHX0NHUk9VUF9SRE1BPXkKQ09ORklHX0NHUk9VUF9G
UkVFWkVSPXkKQ09ORklHX0NHUk9VUF9IVUdFVExCPXkKQ09ORklHX0NQVVNFVFM9eQpDT05GSUdf
UFJPQ19QSURfQ1BVU0VUPXkKQ09ORklHX0NHUk9VUF9ERVZJQ0U9eQpDT05GSUdfQ0dST1VQX0NQ
VUFDQ1Q9eQpDT05GSUdfQ0dST1VQX1BFUkY9eQojIENPTkZJR19DR1JPVVBfQlBGIGlzIG5vdCBz
ZXQKQ09ORklHX0NHUk9VUF9NSVNDPXkKQ09ORklHX0NHUk9VUF9ERUJVRz15CkNPTkZJR19TT0NL
X0NHUk9VUF9EQVRBPXkKQ09ORklHX05BTUVTUEFDRVM9eQpDT05GSUdfVVRTX05TPXkKQ09ORklH
X1RJTUVfTlM9eQpDT05GSUdfSVBDX05TPXkKQ09ORklHX1VTRVJfTlM9eQpDT05GSUdfUElEX05T
PXkKQ09ORklHX05FVF9OUz15CiMgQ09ORklHX0NIRUNLUE9JTlRfUkVTVE9SRSBpcyBub3Qgc2V0
CiMgQ09ORklHX1NDSEVEX0FVVE9HUk9VUCBpcyBub3Qgc2V0CkNPTkZJR19SRUxBWT15CkNPTkZJ
R19CTEtfREVWX0lOSVRSRD15CkNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCkNPTkZJR19SRF9H
WklQPXkKQ09ORklHX1JEX0JaSVAyPXkKQ09ORklHX1JEX0xaTUE9eQpDT05GSUdfUkRfWFo9eQpD
T05GSUdfUkRfTFpPPXkKQ09ORklHX1JEX0xaND15CkNPTkZJR19SRF9aU1REPXkKIyBDT05GSUdf
Qk9PVF9DT05GSUcgaXMgbm90IHNldApDT05GSUdfSU5JVFJBTUZTX1BSRVNFUlZFX01USU1FPXkK
Q09ORklHX0NDX09QVElNSVpFX0ZPUl9QRVJGT1JNQU5DRT15CiMgQ09ORklHX0NDX09QVElNSVpF
X0ZPUl9TSVpFIGlzIG5vdCBzZXQKQ09ORklHX0xEX09SUEhBTl9XQVJOPXkKQ09ORklHX0xEX09S
UEhBTl9XQVJOX0xFVkVMPSJ3YXJuIgpDT05GSUdfU1lTQ1RMPXkKQ09ORklHX0hBVkVfVUlEMTY9
eQpDT05GSUdfU1lTQ1RMX0VYQ0VQVElPTl9UUkFDRT15CkNPTkZJR19IQVZFX1BDU1BLUl9QTEFU
Rk9STT15CkNPTkZJR19FWFBFUlQ9eQpDT05GSUdfVUlEMTY9eQpDT05GSUdfTVVMVElVU0VSPXkK
Q09ORklHX1NHRVRNQVNLX1NZU0NBTEw9eQpDT05GSUdfU1lTRlNfU1lTQ0FMTD15CkNPTkZJR19G
SEFORExFPXkKQ09ORklHX1BPU0lYX1RJTUVSUz15CkNPTkZJR19QUklOVEs9eQpDT05GSUdfQlVH
PXkKQ09ORklHX0VMRl9DT1JFPXkKQ09ORklHX1BDU1BLUl9QTEFURk9STT15CkNPTkZJR19CQVNF
X0ZVTEw9eQpDT05GSUdfRlVURVg9eQpDT05GSUdfRlVURVhfUEk9eQpDT05GSUdfRVBPTEw9eQpD
T05GSUdfU0lHTkFMRkQ9eQpDT05GSUdfVElNRVJGRD15CkNPTkZJR19FVkVOVEZEPXkKQ09ORklH
X1NITUVNPXkKQ09ORklHX0FJTz15CkNPTkZJR19JT19VUklORz15CkNPTkZJR19BRFZJU0VfU1lT
Q0FMTFM9eQpDT05GSUdfTUVNQkFSUklFUj15CkNPTkZJR19LQ01QPXkKQ09ORklHX1JTRVE9eQoj
IENPTkZJR19ERUJVR19SU0VRIGlzIG5vdCBzZXQKQ09ORklHX0NBQ0hFU1RBVF9TWVNDQUxMPXkK
IyBDT05GSUdfUEMxMDQgaXMgbm90IHNldApDT05GSUdfS0FMTFNZTVM9eQojIENPTkZJR19LQUxM
U1lNU19TRUxGVEVTVCBpcyBub3Qgc2V0CkNPTkZJR19LQUxMU1lNU19BTEw9eQpDT05GSUdfS0FM
TFNZTVNfQUJTT0xVVEVfUEVSQ1BVPXkKQ09ORklHX0tBTExTWU1TX0JBU0VfUkVMQVRJVkU9eQpD
T05GSUdfQVJDSF9IQVNfTUVNQkFSUklFUl9TWU5DX0NPUkU9eQpDT05GSUdfSEFWRV9QRVJGX0VW
RU5UUz15CgojCiMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKIwpDT05G
SUdfUEVSRl9FVkVOVFM9eQojIENPTkZJR19ERUJVR19QRVJGX1VTRV9WTUFMTE9DIGlzIG5vdCBz
ZXQKIyBlbmQgb2YgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKCkNPTkZJ
R19TWVNURU1fREFUQV9WRVJJRklDQVRJT049eQpDT05GSUdfUFJPRklMSU5HPXkKQ09ORklHX1RS
QUNFUE9JTlRTPXkKCiMKIyBLZXhlYyBhbmQgY3Jhc2ggZmVhdHVyZXMKIwpDT05GSUdfQ1JBU0hf
Q09SRT15CkNPTkZJR19LRVhFQ19DT1JFPXkKQ09ORklHX0tFWEVDPXkKIyBDT05GSUdfS0VYRUNf
RklMRSBpcyBub3Qgc2V0CiMgQ09ORklHX0tFWEVDX0pVTVAgaXMgbm90IHNldApDT05GSUdfQ1JB
U0hfRFVNUD15CkNPTkZJR19DUkFTSF9IT1RQTFVHPXkKQ09ORklHX0NSQVNIX01BWF9NRU1PUllf
UkFOR0VTPTgxOTIKIyBlbmQgb2YgS2V4ZWMgYW5kIGNyYXNoIGZlYXR1cmVzCiMgZW5kIG9mIEdl
bmVyYWwgc2V0dXAKCkNPTkZJR182NEJJVD15CkNPTkZJR19YODZfNjQ9eQpDT05GSUdfWDg2PXkK
Q09ORklHX0lOU1RSVUNUSU9OX0RFQ09ERVI9eQpDT05GSUdfT1VUUFVUX0ZPUk1BVD0iZWxmNjQt
eDg2LTY0IgpDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9S
VD15CkNPTkZJR19NTVU9eQpDT05GSUdfQVJDSF9NTUFQX1JORF9CSVRTX01JTj0yOApDT05GSUdf
QVJDSF9NTUFQX1JORF9CSVRTX01BWD0zMgpDT05GSUdfQVJDSF9NTUFQX1JORF9DT01QQVRfQklU
U19NSU49OApDT05GSUdfQVJDSF9NTUFQX1JORF9DT01QQVRfQklUU19NQVg9MTYKQ09ORklHX0dF
TkVSSUNfSVNBX0RNQT15CkNPTkZJR19HRU5FUklDX0NTVU09eQpDT05GSUdfR0VORVJJQ19CVUc9
eQpDT05GSUdfR0VORVJJQ19CVUdfUkVMQVRJVkVfUE9JTlRFUlM9eQpDT05GSUdfQVJDSF9NQVlf
SEFWRV9QQ19GREM9eQpDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQpDT05GSUdfQVJD
SF9IQVNfQ1BVX1JFTEFYPXkKQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQpDT05G
SUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKQ09ORklHX0FVRElUX0FSQ0g9eQpDT05GSUdfS0FT
QU5fU0hBRE9XX09GRlNFVD0weGRmZmZmYzAwMDAwMDAwMDAKQ09ORklHX0hBVkVfSU5URUxfVFhU
PXkKQ09ORklHX1g4Nl82NF9TTVA9eQpDT05GSUdfQVJDSF9TVVBQT1JUU19VUFJPQkVTPXkKQ09O
RklHX0ZJWF9FQVJMWUNPTl9NRU09eQpDT05GSUdfUEdUQUJMRV9MRVZFTFM9NApDT05GSUdfQ0Nf
SEFTX1NBTkVfU1RBQ0tQUk9URUNUT1I9eQoKIwojIFByb2Nlc3NvciB0eXBlIGFuZCBmZWF0dXJl
cwojCkNPTkZJR19TTVA9eQojIENPTkZJR19YODZfWDJBUElDIGlzIG5vdCBzZXQKQ09ORklHX1g4
Nl9NUFBBUlNFPXkKIyBDT05GSUdfR09MREZJU0ggaXMgbm90IHNldAojIENPTkZJR19YODZfQ1BV
X1JFU0NUUkwgaXMgbm90IHNldApDT05GSUdfWDg2X0VYVEVOREVEX1BMQVRGT1JNPXkKIyBDT05G
SUdfWDg2X1ZTTVAgaXMgbm90IHNldAojIENPTkZJR19YODZfR09MREZJU0ggaXMgbm90IHNldAoj
IENPTkZJR19YODZfSU5URUxfTUlEIGlzIG5vdCBzZXQKIyBDT05GSUdfWDg2X0lOVEVMX0xQU1Mg
aXMgbm90IHNldAojIENPTkZJR19YODZfQU1EX1BMQVRGT1JNX0RFVklDRSBpcyBub3Qgc2V0CkNP
TkZJR19JT1NGX01CST15CiMgQ09ORklHX0lPU0ZfTUJJX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklH
X1g4Nl9TVVBQT1JUU19NRU1PUllfRkFJTFVSRT15CkNPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BP
SU5URVI9eQpDT05GSUdfSFlQRVJWSVNPUl9HVUVTVD15CkNPTkZJR19QQVJBVklSVD15CkNPTkZJ
R19QQVJBVklSVF9ERUJVRz15CkNPTkZJR19QQVJBVklSVF9TUElOTE9DS1M9eQpDT05GSUdfWDg2
X0hWX0NBTExCQUNLX1ZFQ1RPUj15CiMgQ09ORklHX1hFTiBpcyBub3Qgc2V0CkNPTkZJR19LVk1f
R1VFU1Q9eQpDT05GSUdfQVJDSF9DUFVJRExFX0hBTFRQT0xMPXkKQ09ORklHX1BWSD15CiMgQ09O
RklHX1BBUkFWSVJUX1RJTUVfQUNDT1VOVElORyBpcyBub3Qgc2V0CkNPTkZJR19QQVJBVklSVF9D
TE9DSz15CiMgQ09ORklHX0pBSUxIT1VTRV9HVUVTVCBpcyBub3Qgc2V0CiMgQ09ORklHX0FDUk5f
R1VFU1QgaXMgbm90IHNldAojIENPTkZJR19NSzggaXMgbm90IHNldAojIENPTkZJR19NUFNDIGlz
IG5vdCBzZXQKQ09ORklHX01DT1JFMj15CiMgQ09ORklHX01BVE9NIGlzIG5vdCBzZXQKIyBDT05G
SUdfR0VORVJJQ19DUFUgaXMgbm90IHNldApDT05GSUdfWDg2X0lOVEVSTk9ERV9DQUNIRV9TSElG
VD02CkNPTkZJR19YODZfTDFfQ0FDSEVfU0hJRlQ9NgpDT05GSUdfWDg2X0lOVEVMX1VTRVJDT1BZ
PXkKQ09ORklHX1g4Nl9VU0VfUFBST19DSEVDS1NVTT15CkNPTkZJR19YODZfUDZfTk9QPXkKQ09O
RklHX1g4Nl9UU0M9eQpDT05GSUdfWDg2X0hBVkVfUEFFPXkKQ09ORklHX1g4Nl9DTVBYQ0hHNjQ9
eQpDT05GSUdfWDg2X0NNT1Y9eQpDT05GSUdfWDg2X01JTklNVU1fQ1BVX0ZBTUlMWT02NApDT05G
SUdfWDg2X0RFQlVHQ1RMTVNSPXkKQ09ORklHX0lBMzJfRkVBVF9DVEw9eQpDT05GSUdfWDg2X1ZN
WF9GRUFUVVJFX05BTUVTPXkKQ09ORklHX1BST0NFU1NPUl9TRUxFQ1Q9eQpDT05GSUdfQ1BVX1NV
UF9JTlRFTD15CkNPTkZJR19DUFVfU1VQX0FNRD15CiMgQ09ORklHX0NQVV9TVVBfSFlHT04gaXMg
bm90IHNldAojIENPTkZJR19DUFVfU1VQX0NFTlRBVVIgaXMgbm90IHNldAojIENPTkZJR19DUFVf
U1VQX1pIQU9YSU4gaXMgbm90IHNldApDT05GSUdfSFBFVF9USU1FUj15CkNPTkZJR19IUEVUX0VN
VUxBVEVfUlRDPXkKQ09ORklHX0RNST15CiMgQ09ORklHX0dBUlRfSU9NTVUgaXMgbm90IHNldAoj
IENPTkZJR19NQVhTTVAgaXMgbm90IHNldApDT05GSUdfTlJfQ1BVU19SQU5HRV9CRUdJTj0yCkNP
TkZJR19OUl9DUFVTX1JBTkdFX0VORD01MTIKQ09ORklHX05SX0NQVVNfREVGQVVMVD02NApDT05G
SUdfTlJfQ1BVUz04CkNPTkZJR19TQ0hFRF9DTFVTVEVSPXkKQ09ORklHX1NDSEVEX1NNVD15CkNP
TkZJR19TQ0hFRF9NQz15CkNPTkZJR19TQ0hFRF9NQ19QUklPPXkKQ09ORklHX1g4Nl9MT0NBTF9B
UElDPXkKQ09ORklHX1g4Nl9JT19BUElDPXkKQ09ORklHX1g4Nl9SRVJPVVRFX0ZPUl9CUk9LRU5f
Qk9PVF9JUlFTPXkKQ09ORklHX1g4Nl9NQ0U9eQojIENPTkZJR19YODZfTUNFTE9HX0xFR0FDWSBp
cyBub3Qgc2V0CkNPTkZJR19YODZfTUNFX0lOVEVMPXkKQ09ORklHX1g4Nl9NQ0VfQU1EPXkKQ09O
RklHX1g4Nl9NQ0VfVEhSRVNIT0xEPXkKIyBDT05GSUdfWDg2X01DRV9JTkpFQ1QgaXMgbm90IHNl
dAoKIwojIFBlcmZvcm1hbmNlIG1vbml0b3JpbmcKIwpDT05GSUdfUEVSRl9FVkVOVFNfSU5URUxf
VU5DT1JFPXkKQ09ORklHX1BFUkZfRVZFTlRTX0lOVEVMX1JBUEw9eQpDT05GSUdfUEVSRl9FVkVO
VFNfSU5URUxfQ1NUQVRFPXkKIyBDT05GSUdfUEVSRl9FVkVOVFNfQU1EX1BPV0VSIGlzIG5vdCBz
ZXQKQ09ORklHX1BFUkZfRVZFTlRTX0FNRF9VTkNPUkU9eQojIENPTkZJR19QRVJGX0VWRU5UU19B
TURfQlJTIGlzIG5vdCBzZXQKIyBlbmQgb2YgUGVyZm9ybWFuY2UgbW9uaXRvcmluZwoKQ09ORklH
X1g4Nl8xNkJJVD15CkNPTkZJR19YODZfRVNQRklYNjQ9eQpDT05GSUdfWDg2X1ZTWVNDQUxMX0VN
VUxBVElPTj15CkNPTkZJR19YODZfSU9QTF9JT1BFUk09eQpDT05GSUdfTUlDUk9DT0RFPXkKIyBD
T05GSUdfTUlDUk9DT0RFX0xBVEVfTE9BRElORyBpcyBub3Qgc2V0CkNPTkZJR19YODZfTVNSPXkK
Q09ORklHX1g4Nl9DUFVJRD15CiMgQ09ORklHX1g4Nl81TEVWRUwgaXMgbm90IHNldApDT05GSUdf
WDg2X0RJUkVDVF9HQlBBR0VTPXkKIyBDT05GSUdfWDg2X0NQQV9TVEFUSVNUSUNTIGlzIG5vdCBz
ZXQKQ09ORklHX05VTUE9eQpDT05GSUdfQU1EX05VTUE9eQpDT05GSUdfWDg2XzY0X0FDUElfTlVN
QT15CiMgQ09ORklHX05VTUFfRU1VIGlzIG5vdCBzZXQKQ09ORklHX05PREVTX1NISUZUPTYKQ09O
RklHX0FSQ0hfU1BBUlNFTUVNX0VOQUJMRT15CkNPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxU
PXkKQ09ORklHX0FSQ0hfUFJPQ19LQ09SRV9URVhUPXkKQ09ORklHX0lMTEVHQUxfUE9JTlRFUl9W
QUxVRT0weGRlYWQwMDAwMDAwMDAwMDAKIyBDT05GSUdfWDg2X1BNRU1fTEVHQUNZIGlzIG5vdCBz
ZXQKIyBDT05GSUdfWDg2X0NIRUNLX0JJT1NfQ09SUlVQVElPTiBpcyBub3Qgc2V0CkNPTkZJR19N
VFJSPXkKIyBDT05GSUdfTVRSUl9TQU5JVElaRVIgaXMgbm90IHNldApDT05GSUdfWDg2X1BBVD15
CkNPTkZJR19BUkNIX1VTRVNfUEdfVU5DQUNIRUQ9eQpDT05GSUdfWDg2X1VNSVA9eQpDT05GSUdf
Q0NfSEFTX0lCVD15CkNPTkZJR19YODZfQ0VUPXkKQ09ORklHX1g4Nl9LRVJORUxfSUJUPXkKQ09O
RklHX1g4Nl9JTlRFTF9NRU1PUllfUFJPVEVDVElPTl9LRVlTPXkKIyBDT05GSUdfWDg2X0lOVEVM
X1RTWF9NT0RFX09GRiBpcyBub3Qgc2V0CkNPTkZJR19YODZfSU5URUxfVFNYX01PREVfT049eQoj
IENPTkZJR19YODZfSU5URUxfVFNYX01PREVfQVVUTyBpcyBub3Qgc2V0CiMgQ09ORklHX1g4Nl9V
U0VSX1NIQURPV19TVEFDSyBpcyBub3Qgc2V0CiMgQ09ORklHX0VGSSBpcyBub3Qgc2V0CkNPTkZJ
R19IWl8xMDA9eQojIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAojIENPTkZJR19IWl8zMDAgaXMg
bm90IHNldAojIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKQ09ORklHX0haPTEwMApDT05GSUdf
U0NIRURfSFJUSUNLPXkKQ09ORklHX0FSQ0hfU1VQUE9SVFNfS0VYRUM9eQpDT05GSUdfQVJDSF9T
VVBQT1JUU19LRVhFQ19GSUxFPXkKQ09ORklHX0FSQ0hfU1VQUE9SVFNfS0VYRUNfUFVSR0FUT1JZ
PXkKQ09ORklHX0FSQ0hfU1VQUE9SVFNfS0VYRUNfU0lHPXkKQ09ORklHX0FSQ0hfU1VQUE9SVFNf
S0VYRUNfU0lHX0ZPUkNFPXkKQ09ORklHX0FSQ0hfU1VQUE9SVFNfS0VYRUNfQlpJTUFHRV9WRVJJ
RllfU0lHPXkKQ09ORklHX0FSQ0hfU1VQUE9SVFNfS0VYRUNfSlVNUD15CkNPTkZJR19BUkNIX1NV
UFBPUlRTX0NSQVNIX0RVTVA9eQpDT05GSUdfQVJDSF9TVVBQT1JUU19DUkFTSF9IT1RQTFVHPXkK
Q09ORklHX0FSQ0hfSEFTX0dFTkVSSUNfQ1JBU0hLRVJORUxfUkVTRVJWQVRJT049eQpDT05GSUdf
UEhZU0lDQUxfU1RBUlQ9MHgxMDAwMDAwCiMgQ09ORklHX1JFTE9DQVRBQkxFIGlzIG5vdCBzZXQK
Q09ORklHX1BIWVNJQ0FMX0FMSUdOPTB4MjAwMDAwCiMgQ09ORklHX0FERFJFU1NfTUFTS0lORyBp
cyBub3Qgc2V0CkNPTkZJR19IT1RQTFVHX0NQVT15CiMgQ09ORklHX0NPTVBBVF9WRFNPIGlzIG5v
dCBzZXQKQ09ORklHX0xFR0FDWV9WU1lTQ0FMTF9YT05MWT15CiMgQ09ORklHX0xFR0FDWV9WU1lT
Q0FMTF9OT05FIGlzIG5vdCBzZXQKQ09ORklHX0NNRExJTkVfQk9PTD15CkNPTkZJR19DTURMSU5F
PSJlYXJseXByaW50az1zZXJpYWwgbmV0LmlmbmFtZXM9MCBzeXNjdGwua2VybmVsLmh1bmdfdGFz
a19hbGxfY3B1X2JhY2t0cmFjZT0xIGltYV9wb2xpY3k9dGNiIG5mLWNvbm50cmFjay1mdHAucG9y
dHM9MjAwMDAgbmYtY29ubnRyYWNrLXRmdHAucG9ydHM9MjAwMDAgbmYtY29ubnRyYWNrLXNpcC5w
b3J0cz0yMDAwMCBuZi1jb25udHJhY2staXJjLnBvcnRzPTIwMDAwIG5mLWNvbm50cmFjay1zYW5l
LnBvcnRzPTIwMDAwIGJpbmRlci5kZWJ1Z19tYXNrPTAgcmN1cGRhdGUucmN1X2V4cGVkaXRlZD0x
IHJjdXBkYXRlLnJjdV9jcHVfc3RhbGxfY3B1dGltZT0xIG5vX2hhc2hfcG9pbnRlcnMgcGFnZV9v
d25lcj1vbiBzeXNjdGwudm0ubnJfaHVnZXBhZ2VzPTQgc3lzY3RsLnZtLm5yX292ZXJjb21taXRf
aHVnZXBhZ2VzPTQgc2VjcmV0bWVtLmVuYWJsZT0xIHN5c2N0bC5tYXhfcmN1X3N0YWxsX3RvX3Bh
bmljPTEgbXNyLmFsbG93X3dyaXRlcz1vZmYgY29yZWR1bXBfZmlsdGVyPTB4ZmZmZiByb290PS9k
ZXYvc2RhIGNvbnNvbGU9dHR5UzAgdnN5c2NhbGw9bmF0aXZlIG51bWE9ZmFrZT0yIGt2bS1pbnRl
bC5uZXN0ZWQ9MSBzcGVjX3N0b3JlX2J5cGFzc19kaXNhYmxlPXByY3RsIG5vcGNpZCB2aXZpZC5u
X2RldnM9MTYgdml2aWQubXVsdGlwbGFuYXI9MSwyLDEsMiwxLDIsMSwyLDEsMiwxLDIsMSwyLDEs
MiBuZXRyb20ubnJfbmRldnM9MTYgcm9zZS5yb3NlX25kZXZzPTE2IHNtcC5jc2RfbG9ja190aW1l
b3V0PTEwMDAwMCB3YXRjaGRvZ190aHJlc2g9NTUgd29ya3F1ZXVlLndhdGNoZG9nX3RocmVzaD0x
NDAgc3lzY3RsLm5ldC5jb3JlLm5ldGRldl91bnJlZ2lzdGVyX3RpbWVvdXRfc2Vjcz0xNDAgZHVt
bXlfaGNkLm51bT04IHBhbmljX29uX3dhcm49MSIKIyBDT05GSUdfQ01ETElORV9PVkVSUklERSBp
cyBub3Qgc2V0CkNPTkZJR19NT0RJRllfTERUX1NZU0NBTEw9eQojIENPTkZJR19TVFJJQ1RfU0lH
QUxUU1RBQ0tfU0laRSBpcyBub3Qgc2V0CkNPTkZJR19IQVZFX0xJVkVQQVRDSD15CiMgZW5kIG9m
IFByb2Nlc3NvciB0eXBlIGFuZCBmZWF0dXJlcwoKQ09ORklHX0NDX0hBU19TTFM9eQpDT05GSUdf
Q0NfSEFTX1JFVFVSTl9USFVOSz15CkNPTkZJR19DQ19IQVNfRU5UUllfUEFERElORz15CkNPTkZJ
R19GVU5DVElPTl9QQURESU5HX0NGST0xMQpDT05GSUdfRlVOQ1RJT05fUEFERElOR19CWVRFUz0x
NgpDT05GSUdfU1BFQ1VMQVRJT05fTUlUSUdBVElPTlM9eQojIENPTkZJR19QQUdFX1RBQkxFX0lT
T0xBVElPTiBpcyBub3Qgc2V0CiMgQ09ORklHX1JFVFBPTElORSBpcyBub3Qgc2V0CkNPTkZJR19D
UFVfSUJQQl9FTlRSWT15CkNPTkZJR19DUFVfSUJSU19FTlRSWT15CiMgQ09ORklHX1NMUyBpcyBu
b3Qgc2V0CiMgQ09ORklHX0dEU19GT1JDRV9NSVRJR0FUSU9OIGlzIG5vdCBzZXQKQ09ORklHX0FS
Q0hfSEFTX0FERF9QQUdFUz15CgojCiMgUG93ZXIgbWFuYWdlbWVudCBhbmQgQUNQSSBvcHRpb25z
CiMKQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fSEVBREVSPXkKQ09ORklHX1NVU1BFTkQ9eQpDT05G
SUdfU1VTUEVORF9GUkVFWkVSPXkKIyBDT05GSUdfU1VTUEVORF9TS0lQX1NZTkMgaXMgbm90IHNl
dApDT05GSUdfSElCRVJOQVRFX0NBTExCQUNLUz15CkNPTkZJR19ISUJFUk5BVElPTj15CkNPTkZJ
R19ISUJFUk5BVElPTl9TTkFQU0hPVF9ERVY9eQpDT05GSUdfUE1fU1REX1BBUlRJVElPTj0iIgpD
T05GSUdfUE1fU0xFRVA9eQpDT05GSUdfUE1fU0xFRVBfU01QPXkKIyBDT05GSUdfUE1fQVVUT1NM
RUVQIGlzIG5vdCBzZXQKIyBDT05GSUdfUE1fVVNFUlNQQUNFX0FVVE9TTEVFUCBpcyBub3Qgc2V0
CiMgQ09ORklHX1BNX1dBS0VMT0NLUyBpcyBub3Qgc2V0CkNPTkZJR19QTT15CkNPTkZJR19QTV9E
RUJVRz15CiMgQ09ORklHX1BNX0FEVkFOQ0VEX0RFQlVHIGlzIG5vdCBzZXQKIyBDT05GSUdfUE1f
VEVTVF9TVVNQRU5EIGlzIG5vdCBzZXQKQ09ORklHX1BNX1NMRUVQX0RFQlVHPXkKQ09ORklHX1BN
X1RSQUNFPXkKQ09ORklHX1BNX1RSQUNFX1JUQz15CkNPTkZJR19QTV9DTEs9eQojIENPTkZJR19X
UV9QT1dFUl9FRkZJQ0lFTlRfREVGQVVMVCBpcyBub3Qgc2V0CiMgQ09ORklHX0VORVJHWV9NT0RF
TCBpcyBub3Qgc2V0CkNPTkZJR19BUkNIX1NVUFBPUlRTX0FDUEk9eQpDT05GSUdfQUNQST15CkNP
TkZJR19BQ1BJX0xFR0FDWV9UQUJMRVNfTE9PS1VQPXkKQ09ORklHX0FSQ0hfTUlHSFRfSEFWRV9B
Q1BJX1BEQz15CkNPTkZJR19BQ1BJX1NZU1RFTV9QT1dFUl9TVEFURVNfU1VQUE9SVD15CkNPTkZJ
R19BQ1BJX1RIRVJNQUxfTElCPXkKIyBDT05GSUdfQUNQSV9ERUJVR0dFUiBpcyBub3Qgc2V0CkNP
TkZJR19BQ1BJX1NQQ1JfVEFCTEU9eQojIENPTkZJR19BQ1BJX0ZQRFQgaXMgbm90IHNldApDT05G
SUdfQUNQSV9MUElUPXkKQ09ORklHX0FDUElfU0xFRVA9eQpDT05GSUdfQUNQSV9SRVZfT1ZFUlJJ
REVfUE9TU0lCTEU9eQojIENPTkZJR19BQ1BJX0VDX0RFQlVHRlMgaXMgbm90IHNldApDT05GSUdf
QUNQSV9BQz15CkNPTkZJR19BQ1BJX0JBVFRFUlk9eQpDT05GSUdfQUNQSV9CVVRUT049eQpDT05G
SUdfQUNQSV9WSURFTz15CkNPTkZJR19BQ1BJX0ZBTj15CiMgQ09ORklHX0FDUElfVEFEIGlzIG5v
dCBzZXQKQ09ORklHX0FDUElfRE9DSz15CkNPTkZJR19BQ1BJX0NQVV9GUkVRX1BTUz15CkNPTkZJ
R19BQ1BJX1BST0NFU1NPUl9DU1RBVEU9eQpDT05GSUdfQUNQSV9QUk9DRVNTT1JfSURMRT15CkNP
TkZJR19BQ1BJX0NQUENfTElCPXkKQ09ORklHX0FDUElfUFJPQ0VTU09SPXkKQ09ORklHX0FDUElf
SE9UUExVR19DUFU9eQojIENPTkZJR19BQ1BJX1BST0NFU1NPUl9BR0dSRUdBVE9SIGlzIG5vdCBz
ZXQKQ09ORklHX0FDUElfVEhFUk1BTD15CkNPTkZJR19BQ1BJX1BMQVRGT1JNX1BST0ZJTEU9eQpD
T05GSUdfQVJDSF9IQVNfQUNQSV9UQUJMRV9VUEdSQURFPXkKQ09ORklHX0FDUElfVEFCTEVfVVBH
UkFERT15CiMgQ09ORklHX0FDUElfREVCVUcgaXMgbm90IHNldAojIENPTkZJR19BQ1BJX1BDSV9T
TE9UIGlzIG5vdCBzZXQKQ09ORklHX0FDUElfQ09OVEFJTkVSPXkKQ09ORklHX0FDUElfSE9UUExV
R19JT0FQSUM9eQojIENPTkZJR19BQ1BJX1NCUyBpcyBub3Qgc2V0CiMgQ09ORklHX0FDUElfSEVE
IGlzIG5vdCBzZXQKIyBDT05GSUdfQUNQSV9DVVNUT01fTUVUSE9EIGlzIG5vdCBzZXQKIyBDT05G
SUdfQUNQSV9SRURVQ0VEX0hBUkRXQVJFX09OTFkgaXMgbm90IHNldAojIENPTkZJR19BQ1BJX05G
SVQgaXMgbm90IHNldApDT05GSUdfQUNQSV9OVU1BPXkKIyBDT05GSUdfQUNQSV9ITUFUIGlzIG5v
dCBzZXQKQ09ORklHX0hBVkVfQUNQSV9BUEVJPXkKQ09ORklHX0hBVkVfQUNQSV9BUEVJX05NST15
CiMgQ09ORklHX0FDUElfQVBFSSBpcyBub3Qgc2V0CiMgQ09ORklHX0FDUElfRFBURiBpcyBub3Qg
c2V0CiMgQ09ORklHX0FDUElfRVhUTE9HIGlzIG5vdCBzZXQKIyBDT05GSUdfQUNQSV9DT05GSUdG
UyBpcyBub3Qgc2V0CiMgQ09ORklHX0FDUElfUEZSVVQgaXMgbm90IHNldApDT05GSUdfQUNQSV9Q
Q0M9eQojIENPTkZJR19BQ1BJX0ZGSCBpcyBub3Qgc2V0CiMgQ09ORklHX1BNSUNfT1BSRUdJT04g
aXMgbm90IHNldApDT05GSUdfWDg2X1BNX1RJTUVSPXkKCiMKIyBDUFUgRnJlcXVlbmN5IHNjYWxp
bmcKIwpDT05GSUdfQ1BVX0ZSRVE9eQpDT05GSUdfQ1BVX0ZSRVFfR09WX0FUVFJfU0VUPXkKQ09O
RklHX0NQVV9GUkVRX0dPVl9DT01NT049eQojIENPTkZJR19DUFVfRlJFUV9TVEFUIGlzIG5vdCBz
ZXQKIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUEVSRk9STUFOQ0UgaXMgbm90IHNldAoj
IENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QT1dFUlNBVkUgaXMgbm90IHNldApDT05GSUdf
Q1BVX0ZSRVFfREVGQVVMVF9HT1ZfVVNFUlNQQUNFPXkKIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVM
VF9HT1ZfU0NIRURVVElMIGlzIG5vdCBzZXQKQ09ORklHX0NQVV9GUkVRX0dPVl9QRVJGT1JNQU5D
RT15CiMgQ09ORklHX0NQVV9GUkVRX0dPVl9QT1dFUlNBVkUgaXMgbm90IHNldApDT05GSUdfQ1BV
X0ZSRVFfR09WX1VTRVJTUEFDRT15CkNPTkZJR19DUFVfRlJFUV9HT1ZfT05ERU1BTkQ9eQojIENP
TkZJR19DUFVfRlJFUV9HT1ZfQ09OU0VSVkFUSVZFIGlzIG5vdCBzZXQKQ09ORklHX0NQVV9GUkVR
X0dPVl9TQ0hFRFVUSUw9eQoKIwojIENQVSBmcmVxdWVuY3kgc2NhbGluZyBkcml2ZXJzCiMKIyBD
T05GSUdfQ1BVRlJFUV9EVCBpcyBub3Qgc2V0CiMgQ09ORklHX0NQVUZSRVFfRFRfUExBVERFViBp
cyBub3Qgc2V0CkNPTkZJR19YODZfSU5URUxfUFNUQVRFPXkKIyBDT05GSUdfWDg2X1BDQ19DUFVG
UkVRIGlzIG5vdCBzZXQKIyBDT05GSUdfWDg2X0FNRF9QU1RBVEUgaXMgbm90IHNldAojIENPTkZJ
R19YODZfQU1EX1BTVEFURV9VVCBpcyBub3Qgc2V0CkNPTkZJR19YODZfQUNQSV9DUFVGUkVRPXkK
Q09ORklHX1g4Nl9BQ1BJX0NQVUZSRVFfQ1BCPXkKIyBDT05GSUdfWDg2X1BPV0VSTk9XX0s4IGlz
IG5vdCBzZXQKIyBDT05GSUdfWDg2X0FNRF9GUkVRX1NFTlNJVElWSVRZIGlzIG5vdCBzZXQKIyBD
T05GSUdfWDg2X1NQRUVEU1RFUF9DRU5UUklOTyBpcyBub3Qgc2V0CiMgQ09ORklHX1g4Nl9QNF9D
TE9DS01PRCBpcyBub3Qgc2V0CgojCiMgc2hhcmVkIG9wdGlvbnMKIwojIGVuZCBvZiBDUFUgRnJl
cXVlbmN5IHNjYWxpbmcKCiMKIyBDUFUgSWRsZQojCkNPTkZJR19DUFVfSURMRT15CiMgQ09ORklH
X0NQVV9JRExFX0dPVl9MQURERVIgaXMgbm90IHNldApDT05GSUdfQ1BVX0lETEVfR09WX01FTlU9
eQojIENPTkZJR19DUFVfSURMRV9HT1ZfVEVPIGlzIG5vdCBzZXQKQ09ORklHX0NQVV9JRExFX0dP
Vl9IQUxUUE9MTD15CkNPTkZJR19IQUxUUE9MTF9DUFVJRExFPXkKIyBlbmQgb2YgQ1BVIElkbGUK
CkNPTkZJR19JTlRFTF9JRExFPXkKIyBlbmQgb2YgUG93ZXIgbWFuYWdlbWVudCBhbmQgQUNQSSBv
cHRpb25zCgojCiMgQnVzIG9wdGlvbnMgKFBDSSBldGMuKQojCkNPTkZJR19QQ0lfRElSRUNUPXkK
Q09ORklHX1BDSV9NTUNPTkZJRz15CkNPTkZJR19NTUNPTkZfRkFNMTBIPXkKIyBDT05GSUdfUENJ
X0NOQjIwTEVfUVVJUksgaXMgbm90IHNldAojIENPTkZJR19JU0FfQlVTIGlzIG5vdCBzZXQKQ09O
RklHX0lTQV9ETUFfQVBJPXkKQ09ORklHX0FNRF9OQj15CiMgZW5kIG9mIEJ1cyBvcHRpb25zIChQ
Q0kgZXRjLikKCiMKIyBCaW5hcnkgRW11bGF0aW9ucwojCkNPTkZJR19JQTMyX0VNVUxBVElPTj15
CiMgQ09ORklHX0lBMzJfRU1VTEFUSU9OX0RFRkFVTFRfRElTQUJMRUQgaXMgbm90IHNldApDT05G
SUdfWDg2X1gzMl9BQkk9eQpDT05GSUdfQ09NUEFUXzMyPXkKQ09ORklHX0NPTVBBVD15CkNPTkZJ
R19DT01QQVRfRk9SX1U2NF9BTElHTk1FTlQ9eQojIGVuZCBvZiBCaW5hcnkgRW11bGF0aW9ucwoK
Q09ORklHX0hBVkVfS1ZNPXkKQ09ORklHX1ZJUlRVQUxJWkFUSU9OPXkKIyBDT05GSUdfS1ZNIGlz
IG5vdCBzZXQKQ09ORklHX0FTX0FWWDUxMj15CkNPTkZJR19BU19TSEExX05JPXkKQ09ORklHX0FT
X1NIQTI1Nl9OST15CkNPTkZJR19BU19UUEFVU0U9eQpDT05GSUdfQVNfR0ZOST15CkNPTkZJR19B
U19XUlVTUz15CgojCiMgR2VuZXJhbCBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IG9wdGlvbnMKIwpD
T05GSUdfSE9UUExVR19TTVQ9eQpDT05GSUdfSE9UUExVR19DT1JFX1NZTkM9eQpDT05GSUdfSE9U
UExVR19DT1JFX1NZTkNfREVBRD15CkNPTkZJR19IT1RQTFVHX0NPUkVfU1lOQ19GVUxMPXkKQ09O
RklHX0hPVFBMVUdfU1BMSVRfU1RBUlRVUD15CkNPTkZJR19IT1RQTFVHX1BBUkFMTEVMPXkKQ09O
RklHX0dFTkVSSUNfRU5UUlk9eQojIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKQ09ORklHX0pV
TVBfTEFCRUw9eQojIENPTkZJR19TVEFUSUNfS0VZU19TRUxGVEVTVCBpcyBub3Qgc2V0CiMgQ09O
RklHX1NUQVRJQ19DQUxMX1NFTEZURVNUIGlzIG5vdCBzZXQKQ09ORklHX1VQUk9CRVM9eQpDT05G
SUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CkNPTkZJR19BUkNIX1VTRV9CVUlM
VElOX0JTV0FQPXkKQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKQ09ORklHX0hBVkVfS1BST0JF
Uz15CkNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQpDT05GSUdfSEFWRV9PUFRQUk9CRVM9eQpDT05G
SUdfSEFWRV9LUFJPQkVTX09OX0ZUUkFDRT15CkNPTkZJR19BUkNIX0NPUlJFQ1RfU1RBQ0tUUkFD
RV9PTl9LUkVUUFJPQkU9eQpDT05GSUdfSEFWRV9GVU5DVElPTl9FUlJPUl9JTkpFQ1RJT049eQpD
T05GSUdfSEFWRV9OTUk9eQpDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CkNPTkZJR19U
UkFDRV9JUlFGTEFHU19OTUlfU1VQUE9SVD15CkNPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkK
Q09ORklHX0hBVkVfRE1BX0NPTlRJR1VPVVM9eQpDT05GSUdfR0VORVJJQ19TTVBfSURMRV9USFJF
QUQ9eQpDT05GSUdfQVJDSF9IQVNfRk9SVElGWV9TT1VSQ0U9eQpDT05GSUdfQVJDSF9IQVNfU0VU
X01FTU9SWT15CkNPTkZJR19BUkNIX0hBU19TRVRfRElSRUNUX01BUD15CkNPTkZJR19BUkNIX0hB
U19DUFVfRklOQUxJWkVfSU5JVD15CkNPTkZJR19IQVZFX0FSQ0hfVEhSRUFEX1NUUlVDVF9XSElU
RUxJU1Q9eQpDT05GSUdfQVJDSF9XQU5UU19EWU5BTUlDX1RBU0tfU1RSVUNUPXkKQ09ORklHX0FS
Q0hfV0FOVFNfTk9fSU5TVFI9eQpDT05GSUdfSEFWRV9BU01fTU9EVkVSU0lPTlM9eQpDT05GSUdf
SEFWRV9SRUdTX0FORF9TVEFDS19BQ0NFU1NfQVBJPXkKQ09ORklHX0hBVkVfUlNFUT15CkNPTkZJ
R19IQVZFX1JVU1Q9eQpDT05GSUdfSEFWRV9GVU5DVElPTl9BUkdfQUNDRVNTX0FQST15CkNPTkZJ
R19IQVZFX0hXX0JSRUFLUE9JTlQ9eQpDT05GSUdfSEFWRV9NSVhFRF9CUkVBS1BPSU5UU19SRUdT
PXkKQ09ORklHX0hBVkVfVVNFUl9SRVRVUk5fTk9USUZJRVI9eQpDT05GSUdfSEFWRV9QRVJGX0VW
RU5UU19OTUk9eQpDT05GSUdfSEFWRV9IQVJETE9DS1VQX0RFVEVDVE9SX1BFUkY9eQpDT05GSUdf
SEFWRV9QRVJGX1JFR1M9eQpDT05GSUdfSEFWRV9QRVJGX1VTRVJfU1RBQ0tfRFVNUD15CkNPTkZJ
R19IQVZFX0FSQ0hfSlVNUF9MQUJFTD15CkNPTkZJR19IQVZFX0FSQ0hfSlVNUF9MQUJFTF9SRUxB
VElWRT15CkNPTkZJR19NTVVfR0FUSEVSX1RBQkxFX0ZSRUU9eQpDT05GSUdfTU1VX0dBVEhFUl9S
Q1VfVEFCTEVfRlJFRT15CkNPTkZJR19NTVVfR0FUSEVSX01FUkdFX1ZNQVM9eQpDT05GSUdfTU1V
X0xBWllfVExCX1JFRkNPVU5UPXkKQ09ORklHX0FSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHPXkK
Q09ORklHX0FSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUz15CkNPTkZJR19IQVZFX0FMSUdO
RURfU1RSVUNUX1BBR0U9eQpDT05GSUdfSEFWRV9DTVBYQ0hHX0xPQ0FMPXkKQ09ORklHX0hBVkVf
Q01QWENIR19ET1VCTEU9eQpDT05GSUdfQVJDSF9XQU5UX0NPTVBBVF9JUENfUEFSU0VfVkVSU0lP
Tj15CkNPTkZJR19BUkNIX1dBTlRfT0xEX0NPTVBBVF9JUEM9eQpDT05GSUdfSEFWRV9BUkNIX1NF
Q0NPTVA9eQpDT05GSUdfSEFWRV9BUkNIX1NFQ0NPTVBfRklMVEVSPXkKQ09ORklHX1NFQ0NPTVA9
eQpDT05GSUdfU0VDQ09NUF9GSUxURVI9eQojIENPTkZJR19TRUNDT01QX0NBQ0hFX0RFQlVHIGlz
IG5vdCBzZXQKQ09ORklHX0hBVkVfQVJDSF9TVEFDS0xFQUs9eQpDT05GSUdfSEFWRV9TVEFDS1BS
T1RFQ1RPUj15CkNPTkZJR19TVEFDS1BST1RFQ1RPUj15CkNPTkZJR19TVEFDS1BST1RFQ1RPUl9T
VFJPTkc9eQpDT05GSUdfQVJDSF9TVVBQT1JUU19MVE9fQ0xBTkc9eQpDT05GSUdfQVJDSF9TVVBQ
T1JUU19MVE9fQ0xBTkdfVEhJTj15CkNPTkZJR19MVE9fTk9ORT15CkNPTkZJR19BUkNIX1NVUFBP
UlRTX0NGSV9DTEFORz15CkNPTkZJR19IQVZFX0FSQ0hfV0lUSElOX1NUQUNLX0ZSQU1FUz15CkNP
TkZJR19IQVZFX0NPTlRFWFRfVFJBQ0tJTkdfVVNFUj15CkNPTkZJR19IQVZFX0NPTlRFWFRfVFJB
Q0tJTkdfVVNFUl9PRkZTVEFDSz15CkNPTkZJR19IQVZFX1ZJUlRfQ1BVX0FDQ09VTlRJTkdfR0VO
PXkKQ09ORklHX0hBVkVfSVJRX1RJTUVfQUNDT1VOVElORz15CkNPTkZJR19IQVZFX01PVkVfUFVE
PXkKQ09ORklHX0hBVkVfTU9WRV9QTUQ9eQpDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hV
R0VQQUdFPXkKQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQ9eQpDT05G
SUdfSEFWRV9BUkNIX0hVR0VfVk1BUD15CkNPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFMTE9DPXkK
Q09ORklHX0FSQ0hfV0FOVF9IVUdFX1BNRF9TSEFSRT15CkNPTkZJR19IQVZFX0FSQ0hfU09GVF9E
SVJUWT15CkNPTkZJR19IQVZFX01PRF9BUkNIX1NQRUNJRklDPXkKQ09ORklHX01PRFVMRVNfVVNF
X0VMRl9SRUxBPXkKQ09ORklHX0hBVkVfSVJRX0VYSVRfT05fSVJRX1NUQUNLPXkKQ09ORklHX0hB
VkVfU09GVElSUV9PTl9PV05fU1RBQ0s9eQpDT05GSUdfU09GVElSUV9PTl9PV05fU1RBQ0s9eQpD
T05GSUdfQVJDSF9IQVNfRUxGX1JBTkRPTUlaRT15CkNPTkZJR19IQVZFX0FSQ0hfTU1BUF9STkRf
QklUUz15CkNPTkZJR19IQVZFX0VYSVRfVEhSRUFEPXkKQ09ORklHX0FSQ0hfTU1BUF9STkRfQklU
Uz0yOApDT05GSUdfSEFWRV9BUkNIX01NQVBfUk5EX0NPTVBBVF9CSVRTPXkKQ09ORklHX0FSQ0hf
TU1BUF9STkRfQ09NUEFUX0JJVFM9OApDT05GSUdfSEFWRV9BUkNIX0NPTVBBVF9NTUFQX0JBU0VT
PXkKQ09ORklHX1BBR0VfU0laRV9MRVNTX1RIQU5fNjRLQj15CkNPTkZJR19QQUdFX1NJWkVfTEVT
U19USEFOXzI1NktCPXkKQ09ORklHX0hBVkVfT0JKVE9PTD15CkNPTkZJR19IQVZFX0pVTVBfTEFC
RUxfSEFDSz15CkNPTkZJR19IQVZFX05PSU5TVFJfSEFDSz15CkNPTkZJR19IQVZFX05PSU5TVFJf
VkFMSURBVElPTj15CkNPTkZJR19IQVZFX1VBQ0NFU1NfVkFMSURBVElPTj15CkNPTkZJR19IQVZF
X1NUQUNLX1ZBTElEQVRJT049eQpDT05GSUdfSEFWRV9SRUxJQUJMRV9TVEFDS1RSQUNFPXkKQ09O
RklHX09MRF9TSUdTVVNQRU5EMz15CkNPTkZJR19DT01QQVRfT0xEX1NJR0FDVElPTj15CkNPTkZJ
R19DT01QQVRfMzJCSVRfVElNRT15CkNPTkZJR19IQVZFX0FSQ0hfVk1BUF9TVEFDSz15CkNPTkZJ
R19WTUFQX1NUQUNLPXkKQ09ORklHX0hBVkVfQVJDSF9SQU5ET01JWkVfS1NUQUNLX09GRlNFVD15
CkNPTkZJR19SQU5ET01JWkVfS1NUQUNLX09GRlNFVD15CiMgQ09ORklHX1JBTkRPTUlaRV9LU1RB
Q0tfT0ZGU0VUX0RFRkFVTFQgaXMgbm90IHNldApDT05GSUdfQVJDSF9IQVNfU1RSSUNUX0tFUk5F
TF9SV1g9eQpDT05GSUdfU1RSSUNUX0tFUk5FTF9SV1g9eQpDT05GSUdfQVJDSF9IQVNfU1RSSUNU
X01PRFVMRV9SV1g9eQpDT05GSUdfU1RSSUNUX01PRFVMRV9SV1g9eQpDT05GSUdfSEFWRV9BUkNI
X1BSRUwzMl9SRUxPQ0FUSU9OUz15CiMgQ09ORklHX0xPQ0tfRVZFTlRfQ09VTlRTIGlzIG5vdCBz
ZXQKQ09ORklHX0FSQ0hfSEFTX01FTV9FTkNSWVBUPXkKQ09ORklHX0hBVkVfU1RBVElDX0NBTEw9
eQpDT05GSUdfSEFWRV9TVEFUSUNfQ0FMTF9JTkxJTkU9eQpDT05GSUdfSEFWRV9QUkVFTVBUX0RZ
TkFNSUM9eQpDT05GSUdfSEFWRV9QUkVFTVBUX0RZTkFNSUNfQ0FMTD15CkNPTkZJR19BUkNIX1dB
TlRfTERfT1JQSEFOX1dBUk49eQpDT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9
eQpDT05GSUdfQVJDSF9TVVBQT1JUU19QQUdFX1RBQkxFX0NIRUNLPXkKQ09ORklHX0FSQ0hfSEFT
X0VMRkNPUkVfQ09NUEFUPXkKQ09ORklHX0FSQ0hfSEFTX1BBUkFOT0lEX0wxRF9GTFVTSD15CkNP
TkZJR19EWU5BTUlDX1NJR0ZSQU1FPXkKQ09ORklHX0FSQ0hfSEFTX0hXX1BURV9ZT1VORz15CkNP
TkZJR19BUkNIX0hBU19OT05MRUFGX1BNRF9ZT1VORz15CgojCiMgR0NPVi1iYXNlZCBrZXJuZWwg
cHJvZmlsaW5nCiMKIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldApDT05GSUdfQVJDSF9I
QVNfR0NPVl9QUk9GSUxFX0FMTD15CiMgZW5kIG9mIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGlu
ZwoKQ09ORklHX0hBVkVfR0NDX1BMVUdJTlM9eQpDT05GSUdfRlVOQ1RJT05fQUxJR05NRU5UXzRC
PXkKQ09ORklHX0ZVTkNUSU9OX0FMSUdOTUVOVF8xNkI9eQpDT05GSUdfRlVOQ1RJT05fQUxJR05N
RU5UPTE2CiMgZW5kIG9mIEdlbmVyYWwgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBvcHRpb25zCgpD
T05GSUdfUlRfTVVURVhFUz15CkNPTkZJR19CQVNFX1NNQUxMPTAKQ09ORklHX01PRFVMRV9TSUdf
Rk9STUFUPXkKQ09ORklHX01PRFVMRVM9eQojIENPTkZJR19NT0RVTEVfREVCVUcgaXMgbm90IHNl
dAojIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CkNPTkZJR19NT0RVTEVfVU5M
T0FEPXkKQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQojIENPTkZJR19NT0RVTEVfVU5MT0FE
X1RBSU5UX1RSQUNLSU5HIGlzIG5vdCBzZXQKIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNl
dAojIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldApDT05GSUdfTU9EVUxF
X1NJRz15CiMgQ09ORklHX01PRFVMRV9TSUdfRk9SQ0UgaXMgbm90IHNldAojIENPTkZJR19NT0RV
TEVfU0lHX0FMTCBpcyBub3Qgc2V0CkNPTkZJR19NT0RVTEVfU0lHX1NIQTI1Nj15CiMgQ09ORklH
X01PRFVMRV9TSUdfU0hBMzg0IGlzIG5vdCBzZXQKIyBDT05GSUdfTU9EVUxFX1NJR19TSEE1MTIg
aXMgbm90IHNldAojIENPTkZJR19NT0RVTEVfU0lHX1NIQTNfMjU2IGlzIG5vdCBzZXQKIyBDT05G
SUdfTU9EVUxFX1NJR19TSEEzXzM4NCBpcyBub3Qgc2V0CiMgQ09ORklHX01PRFVMRV9TSUdfU0hB
M181MTIgaXMgbm90IHNldApDT05GSUdfTU9EVUxFX1NJR19IQVNIPSJzaGEyNTYiCkNPTkZJR19N
T0RVTEVfQ09NUFJFU1NfTk9ORT15CiMgQ09ORklHX01PRFVMRV9DT01QUkVTU19HWklQIGlzIG5v
dCBzZXQKIyBDT05GSUdfTU9EVUxFX0NPTVBSRVNTX1haIGlzIG5vdCBzZXQKIyBDT05GSUdfTU9E
VUxFX0NPTVBSRVNTX1pTVEQgaXMgbm90IHNldAojIENPTkZJR19NT0RVTEVfQUxMT1dfTUlTU0lO
R19OQU1FU1BBQ0VfSU1QT1JUUyBpcyBub3Qgc2V0CkNPTkZJR19NT0RQUk9CRV9QQVRIPSIvc2Jp
bi9tb2Rwcm9iZSIKIyBDT05GSUdfVFJJTV9VTlVTRURfS1NZTVMgaXMgbm90IHNldApDT05GSUdf
TU9EVUxFU19UUkVFX0xPT0tVUD15CkNPTkZJR19CTE9DSz15CkNPTkZJR19CTE9DS19MRUdBQ1lf
QVVUT0xPQUQ9eQpDT05GSUdfQkxLX1JRX0FMTE9DX1RJTUU9eQpDT05GSUdfQkxLX0RFVl9CU0df
Q09NTU9OPXkKIyBDT05GSUdfQkxLX0RFVl9CU0dMSUIgaXMgbm90IHNldAojIENPTkZJR19CTEtf
REVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiMgQ09ORklHX0JMS19ERVZfV1JJVEVfTU9VTlRFRCBp
cyBub3Qgc2V0CiMgQ09ORklHX0JMS19ERVZfWk9ORUQgaXMgbm90IHNldAojIENPTkZJR19CTEtf
REVWX1RIUk9UVExJTkcgaXMgbm90IHNldAojIENPTkZJR19CTEtfV0JUIGlzIG5vdCBzZXQKQ09O
RklHX0JMS19DR1JPVVBfSU9MQVRFTkNZPXkKQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUPXkKQ09O
RklHX0JMS19DR1JPVVBfSU9QUklPPXkKQ09ORklHX0JMS19ERUJVR19GUz15CiMgQ09ORklHX0JM
S19TRURfT1BBTCBpcyBub3Qgc2V0CiMgQ09ORklHX0JMS19JTkxJTkVfRU5DUllQVElPTiBpcyBu
b3Qgc2V0CgojCiMgUGFydGl0aW9uIFR5cGVzCiMKIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VE
IGlzIG5vdCBzZXQKQ09ORklHX01TRE9TX1BBUlRJVElPTj15CkNPTkZJR19FRklfUEFSVElUSU9O
PXkKIyBlbmQgb2YgUGFydGl0aW9uIFR5cGVzCgpDT05GSUdfQkxLX01RX1BDST15CkNPTkZJR19C
TEtfTVFfVklSVElPPXkKQ09ORklHX0JMS19QTT15CkNPTkZJR19CTE9DS19IT0xERVJfREVQUkVD
QVRFRD15CkNPTkZJR19CTEtfTVFfU1RBQ0tJTkc9eQoKIwojIElPIFNjaGVkdWxlcnMKIwpDT05G
SUdfTVFfSU9TQ0hFRF9ERUFETElORT15CkNPTkZJR19NUV9JT1NDSEVEX0tZQkVSPXkKIyBDT05G
SUdfSU9TQ0hFRF9CRlEgaXMgbm90IHNldAojIGVuZCBvZiBJTyBTY2hlZHVsZXJzCgpDT05GSUdf
QVNOMT15CkNPTkZJR19VTklOTElORV9TUElOX1VOTE9DSz15CkNPTkZJR19BUkNIX1NVUFBPUlRT
X0FUT01JQ19STVc9eQpDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUj15CkNPTkZJR19SV1NFTV9T
UElOX09OX09XTkVSPXkKQ09ORklHX0xPQ0tfU1BJTl9PTl9PV05FUj15CkNPTkZJR19BUkNIX1VT
RV9RVUVVRURfU1BJTkxPQ0tTPXkKQ09ORklHX1FVRVVFRF9TUElOTE9DS1M9eQpDT05GSUdfQVJD
SF9VU0VfUVVFVUVEX1JXTE9DS1M9eQpDT05GSUdfUVVFVUVEX1JXTE9DS1M9eQpDT05GSUdfQVJD
SF9IQVNfTk9OX09WRVJMQVBQSU5HX0FERFJFU1NfU1BBQ0U9eQpDT05GSUdfQVJDSF9IQVNfU1lO
Q19DT1JFX0JFRk9SRV9VU0VSTU9ERT15CkNPTkZJR19BUkNIX0hBU19TWVNDQUxMX1dSQVBQRVI9
eQpDT05GSUdfRlJFRVpFUj15CgojCiMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKIwpDT05GSUdf
QklORk1UX0VMRj15CkNPTkZJR19DT01QQVRfQklORk1UX0VMRj15CkNPTkZJR19FTEZDT1JFPXkK
Q09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTPXkKQ09ORklHX0JJTkZNVF9TQ1JJ
UFQ9eQpDT05GSUdfQklORk1UX01JU0M9eQpDT05GSUdfQ09SRURVTVA9eQojIGVuZCBvZiBFeGVj
dXRhYmxlIGZpbGUgZm9ybWF0cwoKIwojIE1lbW9yeSBNYW5hZ2VtZW50IG9wdGlvbnMKIwpDT05G
SUdfU1dBUD15CiMgQ09ORklHX1pTV0FQIGlzIG5vdCBzZXQKCiMKIyBTbGFiIGFsbG9jYXRvciBv
cHRpb25zCiMKQ09ORklHX1NMVUI9eQojIENPTkZJR19TTFVCX1RJTlkgaXMgbm90IHNldApDT05G
SUdfU0xBQl9NRVJHRV9ERUZBVUxUPXkKIyBDT05GSUdfU0xBQl9GUkVFTElTVF9SQU5ET00gaXMg
bm90IHNldAojIENPTkZJR19TTEFCX0ZSRUVMSVNUX0hBUkRFTkVEIGlzIG5vdCBzZXQKIyBDT05G
SUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CkNPTkZJR19TTFVCX0NQVV9QQVJUSUFMPXkKIyBDT05G
SUdfUkFORE9NX0tNQUxMT0NfQ0FDSEVTIGlzIG5vdCBzZXQKIyBlbmQgb2YgU2xhYiBhbGxvY2F0
b3Igb3B0aW9ucwoKIyBDT05GSUdfU0hVRkZMRV9QQUdFX0FMTE9DQVRPUiBpcyBub3Qgc2V0CiMg
Q09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldApDT05GSUdfU1BBUlNFTUVNPXkKQ09ORklHX1NQ
QVJTRU1FTV9FWFRSRU1FPXkKQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRT15CkNPTkZJ
R19TUEFSU0VNRU1fVk1FTU1BUD15CkNPTkZJR19BUkNIX1dBTlRfT1BUSU1JWkVfREFYX1ZNRU1N
QVA9eQpDT05GSUdfQVJDSF9XQU5UX09QVElNSVpFX0hVR0VUTEJfVk1FTU1BUD15CkNPTkZJR19I
QVZFX0ZBU1RfR1VQPXkKQ09ORklHX0VYQ0xVU0lWRV9TWVNURU1fUkFNPXkKQ09ORklHX0FSQ0hf
RU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIyBDT05GSUdfTUVNT1JZX0hPVFBMVUcgaXMgbm90IHNl
dApDT05GSUdfQVJDSF9NSFBfTUVNTUFQX09OX01FTU9SWV9FTkFCTEU9eQpDT05GSUdfU1BMSVRf
UFRMT0NLX0NQVVM9NApDT05GSUdfQVJDSF9FTkFCTEVfU1BMSVRfUE1EX1BUTE9DSz15CkNPTkZJ
R19DT01QQUNUSU9OPXkKQ09ORklHX0NPTVBBQ1RfVU5FVklDVEFCTEVfREVGQVVMVD0xCiMgQ09O
RklHX1BBR0VfUkVQT1JUSU5HIGlzIG5vdCBzZXQKQ09ORklHX01JR1JBVElPTj15CkNPTkZJR19B
UkNIX0VOQUJMRV9IVUdFUEFHRV9NSUdSQVRJT049eQpDT05GSUdfUENQX0JBVENIX1NDQUxFX01B
WD01CkNPTkZJR19QSFlTX0FERFJfVF82NEJJVD15CkNPTkZJR19NTVVfTk9USUZJRVI9eQojIENP
TkZJR19LU00gaXMgbm90IHNldApDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKQ09O
RklHX0FSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkU9eQojIENPTkZJR19NRU1PUllfRkFJTFVS
RSBpcyBub3Qgc2V0CkNPTkZJR19BUkNIX1dBTlRfR0VORVJBTF9IVUdFVExCPXkKQ09ORklHX0FS
Q0hfV0FOVFNfVEhQX1NXQVA9eQojIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSBpcyBub3Qg
c2V0CkNPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTks9eQpDT05GSUdfTkVFRF9Q
RVJfQ1BVX1BBR0VfRklSU1RfQ0hVTks9eQpDT05GSUdfVVNFX1BFUkNQVV9OVU1BX05PREVfSUQ9
eQpDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUE9eQojIENPTkZJR19DTUEgaXMgbm90IHNl
dApDT05GSUdfR0VORVJJQ19FQVJMWV9JT1JFTUFQPXkKIyBDT05GSUdfREVGRVJSRURfU1RSVUNU
X1BBR0VfSU5JVCBpcyBub3Qgc2V0CiMgQ09ORklHX0lETEVfUEFHRV9UUkFDS0lORyBpcyBub3Qg
c2V0CkNPTkZJR19BUkNIX0hBU19DQUNIRV9MSU5FX1NJWkU9eQpDT05GSUdfQVJDSF9IQVNfQ1VS
UkVOVF9TVEFDS19QT0lOVEVSPXkKQ09ORklHX0FSQ0hfSEFTX1BURV9ERVZNQVA9eQpDT05GSUdf
QVJDSF9IQVNfWk9ORV9ETUFfU0VUPXkKQ09ORklHX1pPTkVfRE1BPXkKQ09ORklHX1pPTkVfRE1B
MzI9eQpDT05GSUdfVk1BUF9QRk49eQpDT05GSUdfQVJDSF9VU0VTX0hJR0hfVk1BX0ZMQUdTPXkK
Q09ORklHX0FSQ0hfSEFTX1BLRVlTPXkKQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIyBDT05G
SUdfUEVSQ1BVX1NUQVRTIGlzIG5vdCBzZXQKIyBDT05GSUdfR1VQX1RFU1QgaXMgbm90IHNldAoj
IENPTkZJR19ETUFQT09MX1RFU1QgaXMgbm90IHNldApDT05GSUdfQVJDSF9IQVNfUFRFX1NQRUNJ
QUw9eQpDT05GSUdfS01BUF9MT0NBTD15CkNPTkZJR19NRU1GRF9DUkVBVEU9eQpDT05GSUdfU0VD
UkVUTUVNPXkKIyBDT05GSUdfQU5PTl9WTUFfTkFNRSBpcyBub3Qgc2V0CiMgQ09ORklHX1VTRVJG
QVVMVEZEIGlzIG5vdCBzZXQKIyBDT05GSUdfTFJVX0dFTiBpcyBub3Qgc2V0CkNPTkZJR19BUkNI
X1NVUFBPUlRTX1BFUl9WTUFfTE9DSz15CkNPTkZJR19QRVJfVk1BX0xPQ0s9eQpDT05GSUdfTE9D
S19NTV9BTkRfRklORF9WTUE9eQoKIwojIERhdGEgQWNjZXNzIE1vbml0b3JpbmcKIwojIENPTkZJ
R19EQU1PTiBpcyBub3Qgc2V0CiMgZW5kIG9mIERhdGEgQWNjZXNzIE1vbml0b3JpbmcKIyBlbmQg
b2YgTWVtb3J5IE1hbmFnZW1lbnQgb3B0aW9ucwoKQ09ORklHX05FVD15CkNPTkZJR19DT01QQVRf
TkVUTElOS19NRVNTQUdFUz15CkNPTkZJR19ORVRfSU5HUkVTUz15CkNPTkZJR19ORVRfRUdSRVNT
PXkKQ09ORklHX05FVF9YR1JFU1M9eQpDT05GSUdfU0tCX0VYVEVOU0lPTlM9eQoKIwojIE5ldHdv
cmtpbmcgb3B0aW9ucwojCkNPTkZJR19QQUNLRVQ9eQojIENPTkZJR19QQUNLRVRfRElBRyBpcyBu
b3Qgc2V0CkNPTkZJR19VTklYPXkKQ09ORklHX1VOSVhfU0NNPXkKQ09ORklHX0FGX1VOSVhfT09C
PXkKIyBDT05GSUdfVU5JWF9ESUFHIGlzIG5vdCBzZXQKIyBDT05GSUdfVExTIGlzIG5vdCBzZXQK
Q09ORklHX1hGUk09eQpDT05GSUdfWEZSTV9BTEdPPXkKQ09ORklHX1hGUk1fVVNFUj15CiMgQ09O
RklHX1hGUk1fVVNFUl9DT01QQVQgaXMgbm90IHNldAojIENPTkZJR19YRlJNX0lOVEVSRkFDRSBp
cyBub3Qgc2V0CiMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CiMgQ09ORklHX1hG
Uk1fTUlHUkFURSBpcyBub3Qgc2V0CiMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0
CkNPTkZJR19YRlJNX0FIPXkKQ09ORklHX1hGUk1fRVNQPXkKIyBDT05GSUdfTkVUX0tFWSBpcyBu
b3Qgc2V0CiMgQ09ORklHX1hEUF9TT0NLRVRTIGlzIG5vdCBzZXQKQ09ORklHX05FVF9IQU5EU0hB
S0U9eQpDT05GSUdfSU5FVD15CkNPTkZJR19JUF9NVUxUSUNBU1Q9eQpDT05GSUdfSVBfQURWQU5D
RURfUk9VVEVSPXkKIyBDT05GSUdfSVBfRklCX1RSSUVfU1RBVFMgaXMgbm90IHNldApDT05GSUdf
SVBfTVVMVElQTEVfVEFCTEVTPXkKQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSD15CkNPTkZJR19J
UF9ST1VURV9WRVJCT1NFPXkKQ09ORklHX0lQX1BOUD15CkNPTkZJR19JUF9QTlBfREhDUD15CkNP
TkZJR19JUF9QTlBfQk9PVFA9eQpDT05GSUdfSVBfUE5QX1JBUlA9eQojIENPTkZJR19ORVRfSVBJ
UCBpcyBub3Qgc2V0CiMgQ09ORklHX05FVF9JUEdSRV9ERU1VWCBpcyBub3Qgc2V0CkNPTkZJR19O
RVRfSVBfVFVOTkVMPXkKQ09ORklHX0lQX01ST1VURV9DT01NT049eQpDT05GSUdfSVBfTVJPVVRF
PXkKIyBDT05GSUdfSVBfTVJPVVRFX01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0CkNPTkZJR19J
UF9QSU1TTV9WMT15CkNPTkZJR19JUF9QSU1TTV9WMj15CkNPTkZJR19TWU5fQ09PS0lFUz15CiMg
Q09ORklHX05FVF9JUFZUSSBpcyBub3Qgc2V0CiMgQ09ORklHX05FVF9GT1UgaXMgbm90IHNldAoj
IENPTkZJR19ORVRfRk9VX0lQX1RVTk5FTFMgaXMgbm90IHNldAojIENPTkZJR19JTkVUX0FIIGlz
IG5vdCBzZXQKIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAojIENPTkZJR19JTkVUX0lQQ09N
UCBpcyBub3Qgc2V0CkNPTkZJR19JTkVUX1RBQkxFX1BFUlRVUkJfT1JERVI9MTYKQ09ORklHX0lO
RVRfVFVOTkVMPXkKIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXQKQ09ORklHX1RDUF9DT05H
X0FEVkFOQ0VEPXkKIyBDT05GSUdfVENQX0NPTkdfQklDIGlzIG5vdCBzZXQKQ09ORklHX1RDUF9D
T05HX0NVQklDPXkKIyBDT05GSUdfVENQX0NPTkdfV0VTVFdPT0QgaXMgbm90IHNldAojIENPTkZJ
R19UQ1BfQ09OR19IVENQIGlzIG5vdCBzZXQKIyBDT05GSUdfVENQX0NPTkdfSFNUQ1AgaXMgbm90
IHNldAojIENPTkZJR19UQ1BfQ09OR19IWUJMQSBpcyBub3Qgc2V0CiMgQ09ORklHX1RDUF9DT05H
X1ZFR0FTIGlzIG5vdCBzZXQKIyBDT05GSUdfVENQX0NPTkdfTlYgaXMgbm90IHNldAojIENPTkZJ
R19UQ1BfQ09OR19TQ0FMQUJMRSBpcyBub3Qgc2V0CiMgQ09ORklHX1RDUF9DT05HX0xQIGlzIG5v
dCBzZXQKIyBDT05GSUdfVENQX0NPTkdfVkVOTyBpcyBub3Qgc2V0CiMgQ09ORklHX1RDUF9DT05H
X1lFQUggaXMgbm90IHNldAojIENPTkZJR19UQ1BfQ09OR19JTExJTk9JUyBpcyBub3Qgc2V0CiMg
Q09ORklHX1RDUF9DT05HX0RDVENQIGlzIG5vdCBzZXQKIyBDT05GSUdfVENQX0NPTkdfQ0RHIGlz
IG5vdCBzZXQKIyBDT05GSUdfVENQX0NPTkdfQkJSIGlzIG5vdCBzZXQKQ09ORklHX0RFRkFVTFRf
Q1VCSUM9eQojIENPTkZJR19ERUZBVUxUX1JFTk8gaXMgbm90IHNldApDT05GSUdfREVGQVVMVF9U
Q1BfQ09ORz0iY3ViaWMiCkNPTkZJR19UQ1BfU0lHUE9PTD15CiMgQ09ORklHX1RDUF9BTyBpcyBu
b3Qgc2V0CkNPTkZJR19UQ1BfTUQ1U0lHPXkKQ09ORklHX0lQVjY9eQojIENPTkZJR19JUFY2X1JP
VVRFUl9QUkVGIGlzIG5vdCBzZXQKIyBDT05GSUdfSVBWNl9PUFRJTUlTVElDX0RBRCBpcyBub3Qg
c2V0CkNPTkZJR19JTkVUNl9BSD15CkNPTkZJR19JTkVUNl9FU1A9eQojIENPTkZJR19JTkVUNl9F
U1BfT0ZGTE9BRCBpcyBub3Qgc2V0CiMgQ09ORklHX0lORVQ2X0VTUElOVENQIGlzIG5vdCBzZXQK
IyBDT05GSUdfSU5FVDZfSVBDT01QIGlzIG5vdCBzZXQKIyBDT05GSUdfSVBWNl9NSVA2IGlzIG5v
dCBzZXQKIyBDT05GSUdfSVBWNl9JTEEgaXMgbm90IHNldAojIENPTkZJR19JUFY2X1ZUSSBpcyBu
b3Qgc2V0CkNPTkZJR19JUFY2X1NJVD15CiMgQ09ORklHX0lQVjZfU0lUXzZSRCBpcyBub3Qgc2V0
CkNPTkZJR19JUFY2X05ESVNDX05PREVUWVBFPXkKIyBDT05GSUdfSVBWNl9UVU5ORUwgaXMgbm90
IHNldAojIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0CiMgQ09ORklHX0lQ
VjZfTVJPVVRFIGlzIG5vdCBzZXQKIyBDT05GSUdfSVBWNl9TRUc2X0xXVFVOTkVMIGlzIG5vdCBz
ZXQKIyBDT05GSUdfSVBWNl9TRUc2X0hNQUMgaXMgbm90IHNldAojIENPTkZJR19JUFY2X1JQTF9M
V1RVTk5FTCBpcyBub3Qgc2V0CiMgQ09ORklHX0lQVjZfSU9BTTZfTFdUVU5ORUwgaXMgbm90IHNl
dApDT05GSUdfTkVUTEFCRUw9eQojIENPTkZJR19NUFRDUCBpcyBub3Qgc2V0CkNPTkZJR19ORVRX
T1JLX1NFQ01BUks9eQpDT05GSUdfTkVUX1BUUF9DTEFTU0lGWT15CiMgQ09ORklHX05FVFdPUktf
UEhZX1RJTUVTVEFNUElORyBpcyBub3Qgc2V0CkNPTkZJR19ORVRGSUxURVI9eQojIENPTkZJR19O
RVRGSUxURVJfQURWQU5DRUQgaXMgbm90IHNldAoKIwojIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3Vy
YXRpb24KIwpDT05GSUdfTkVURklMVEVSX0lOR1JFU1M9eQpDT05GSUdfTkVURklMVEVSX0VHUkVT
Uz15CkNPTkZJR19ORVRGSUxURVJfU0tJUF9FR1JFU1M9eQpDT05GSUdfTkVURklMVEVSX05FVExJ
Tks9eQpDT05GSUdfTkVURklMVEVSX0JQRl9MSU5LPXkKQ09ORklHX05FVEZJTFRFUl9ORVRMSU5L
X0xPRz15CkNPTkZJR19ORl9DT05OVFJBQ0s9eQpDT05GSUdfTkZfTE9HX1NZU0xPRz15CkNPTkZJ
R19ORl9DT05OVFJBQ0tfU0VDTUFSSz15CiMgQ09ORklHX05GX0NPTk5UUkFDS19QUk9DRlMgaXMg
bm90IHNldAojIENPTkZJR19ORl9DT05OVFJBQ0tfTEFCRUxTIGlzIG5vdCBzZXQKQ09ORklHX05G
X0NPTk5UUkFDS19GVFA9eQpDT05GSUdfTkZfQ09OTlRSQUNLX0lSQz15CiMgQ09ORklHX05GX0NP
Tk5UUkFDS19ORVRCSU9TX05TIGlzIG5vdCBzZXQKQ09ORklHX05GX0NPTk5UUkFDS19TSVA9eQpD
T05GSUdfTkZfQ1RfTkVUTElOSz15CiMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0dMVUVfQ1Qg
aXMgbm90IHNldApDT05GSUdfTkZfTkFUPXkKQ09ORklHX05GX05BVF9GVFA9eQpDT05GSUdfTkZf
TkFUX0lSQz15CkNPTkZJR19ORl9OQVRfU0lQPXkKQ09ORklHX05GX05BVF9NQVNRVUVSQURFPXkK
IyBDT05GSUdfTkZfVEFCTEVTIGlzIG5vdCBzZXQKQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPXkK
IyBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfQ09NUEFUIGlzIG5vdCBzZXQKCiMKIyBYdGFibGVz
IGNvbWJpbmVkIG1vZHVsZXMKIwpDT05GSUdfTkVURklMVEVSX1hUX01BUks9eQoKIwojIFh0YWJs
ZXMgdGFyZ2V0cwojCkNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5TRUNNQVJLPXkKQ09O
RklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTE9HPXkKQ09ORklHX05FVEZJTFRFUl9YVF9OQVQ9eQoj
IENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05FVE1BUCBpcyBub3Qgc2V0CkNPTkZJR19ORVRG
SUxURVJfWFRfVEFSR0VUX05GTE9HPXkKIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9SRURJ
UkVDVCBpcyBub3Qgc2V0CkNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BU1FVRVJBREU9eQpD
T05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9TRUNNQVJLPXkKQ09ORklHX05FVEZJTFRFUl9YVF9U
QVJHRVRfVENQTVNTPXkKCiMKIyBYdGFibGVzIG1hdGNoZXMKIwpDT05GSUdfTkVURklMVEVSX1hU
X01BVENIX0FERFJUWVBFPXkKQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OVFJBQ0s9eQpD
T05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWT15CkNPTkZJR19ORVRGSUxURVJfWFRfTUFU
Q0hfU1RBVEU9eQojIGVuZCBvZiBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCgojIENPTkZJ
R19JUF9TRVQgaXMgbm90IHNldAojIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CgojCiMgSVA6IE5l
dGZpbHRlciBDb25maWd1cmF0aW9uCiMKQ09ORklHX05GX0RFRlJBR19JUFY0PXkKIyBDT05GSUdf
TkZfU09DS0VUX0lQVjQgaXMgbm90IHNldAojIENPTkZJR19ORl9UUFJPWFlfSVBWNCBpcyBub3Qg
c2V0CiMgQ09ORklHX05GX0RVUF9JUFY0IGlzIG5vdCBzZXQKQ09ORklHX05GX0xPR19BUlA9eQpD
T05GSUdfTkZfTE9HX0lQVjQ9eQpDT05GSUdfTkZfUkVKRUNUX0lQVjQ9eQpDT05GSUdfSVBfTkZf
SVBUQUJMRVM9eQpDT05GSUdfSVBfTkZfRklMVEVSPXkKQ09ORklHX0lQX05GX1RBUkdFVF9SRUpF
Q1Q9eQpDT05GSUdfSVBfTkZfTkFUPXkKQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFPXkK
Q09ORklHX0lQX05GX01BTkdMRT15CiMgQ09ORklHX0lQX05GX1JBVyBpcyBub3Qgc2V0CiMgZW5k
IG9mIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgoKIwojIElQdjY6IE5ldGZpbHRlciBDb25m
aWd1cmF0aW9uCiMKIyBDT05GSUdfTkZfU09DS0VUX0lQVjYgaXMgbm90IHNldAojIENPTkZJR19O
Rl9UUFJPWFlfSVBWNiBpcyBub3Qgc2V0CiMgQ09ORklHX05GX0RVUF9JUFY2IGlzIG5vdCBzZXQK
Q09ORklHX05GX1JFSkVDVF9JUFY2PXkKQ09ORklHX05GX0xPR19JUFY2PXkKQ09ORklHX0lQNl9O
Rl9JUFRBQkxFUz15CkNPTkZJR19JUDZfTkZfTUFUQ0hfSVBWNkhFQURFUj15CkNPTkZJR19JUDZf
TkZfRklMVEVSPXkKQ09ORklHX0lQNl9ORl9UQVJHRVRfUkVKRUNUPXkKQ09ORklHX0lQNl9ORl9N
QU5HTEU9eQojIENPTkZJR19JUDZfTkZfUkFXIGlzIG5vdCBzZXQKIyBlbmQgb2YgSVB2NjogTmV0
ZmlsdGVyIENvbmZpZ3VyYXRpb24KCkNPTkZJR19ORl9ERUZSQUdfSVBWNj15CiMgQ09ORklHX05G
X0NPTk5UUkFDS19CUklER0UgaXMgbm90IHNldAojIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQK
IyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CiMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiMgQ09O
RklHX1RJUEMgaXMgbm90IHNldApDT05GSUdfQVRNPXkKIyBDT05GSUdfQVRNX0NMSVAgaXMgbm90
IHNldAojIENPTkZJR19BVE1fTEFORSBpcyBub3Qgc2V0CiMgQ09ORklHX0FUTV9CUjI2ODQgaXMg
bm90IHNldAojIENPTkZJR19MMlRQIGlzIG5vdCBzZXQKIyBDT05GSUdfQlJJREdFIGlzIG5vdCBz
ZXQKIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CiMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90
IHNldAojIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAoj
IENPTkZJR19YMjUgaXMgbm90IHNldAojIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKQ09ORklHX1BI
T05FVD15CiMgQ09ORklHXzZMT1dQQU4gaXMgbm90IHNldApDT05GSUdfSUVFRTgwMjE1ND15CiMg
Q09ORklHX0lFRUU4MDIxNTRfTkw4MDIxNTRfRVhQRVJJTUVOVEFMIGlzIG5vdCBzZXQKIyBDT05G
SUdfSUVFRTgwMjE1NF9TT0NLRVQgaXMgbm90IHNldApDT05GSUdfTUFDODAyMTU0PXkKQ09ORklH
X05FVF9TQ0hFRD15CgojCiMgUXVldWVpbmcvU2NoZWR1bGluZwojCiMgQ09ORklHX05FVF9TQ0hf
SFRCIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX1NDSF9IRlNDIGlzIG5vdCBzZXQKIyBDT05GSUdf
TkVUX1NDSF9QUklPIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX1NDSF9NVUxUSVEgaXMgbm90IHNl
dAojIENPTkZJR19ORVRfU0NIX1JFRCBpcyBub3Qgc2V0CiMgQ09ORklHX05FVF9TQ0hfU0ZCIGlz
IG5vdCBzZXQKIyBDT05GSUdfTkVUX1NDSF9TRlEgaXMgbm90IHNldAojIENPTkZJR19ORVRfU0NI
X1RFUUwgaXMgbm90IHNldAojIENPTkZJR19ORVRfU0NIX1RCRiBpcyBub3Qgc2V0CiMgQ09ORklH
X05FVF9TQ0hfQ0JTIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX1NDSF9FVEYgaXMgbm90IHNldAoj
IENPTkZJR19ORVRfU0NIX1RBUFJJTyBpcyBub3Qgc2V0CiMgQ09ORklHX05FVF9TQ0hfR1JFRCBp
cyBub3Qgc2V0CiMgQ09ORklHX05FVF9TQ0hfTkVURU0gaXMgbm90IHNldAojIENPTkZJR19ORVRf
U0NIX0RSUiBpcyBub3Qgc2V0CiMgQ09ORklHX05FVF9TQ0hfTVFQUklPIGlzIG5vdCBzZXQKIyBD
T05GSUdfTkVUX1NDSF9TS0JQUklPIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX1NDSF9DSE9LRSBp
cyBub3Qgc2V0CiMgQ09ORklHX05FVF9TQ0hfUUZRIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX1ND
SF9DT0RFTCBpcyBub3Qgc2V0CiMgQ09ORklHX05FVF9TQ0hfRlFfQ09ERUwgaXMgbm90IHNldAoj
IENPTkZJR19ORVRfU0NIX0NBS0UgaXMgbm90IHNldAojIENPTkZJR19ORVRfU0NIX0ZRIGlzIG5v
dCBzZXQKIyBDT05GSUdfTkVUX1NDSF9ISEYgaXMgbm90IHNldAojIENPTkZJR19ORVRfU0NIX1BJ
RSBpcyBub3Qgc2V0CiMgQ09ORklHX05FVF9TQ0hfSU5HUkVTUyBpcyBub3Qgc2V0CiMgQ09ORklH
X05FVF9TQ0hfUExVRyBpcyBub3Qgc2V0CiMgQ09ORklHX05FVF9TQ0hfRVRTIGlzIG5vdCBzZXQK
IyBDT05GSUdfTkVUX1NDSF9ERUZBVUxUIGlzIG5vdCBzZXQKCiMKIyBDbGFzc2lmaWNhdGlvbgoj
CkNPTkZJR19ORVRfQ0xTPXkKIyBDT05GSUdfTkVUX0NMU19CQVNJQyBpcyBub3Qgc2V0CiMgQ09O
RklHX05FVF9DTFNfUk9VVEU0IGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX0NMU19GVyBpcyBub3Qg
c2V0CiMgQ09ORklHX05FVF9DTFNfVTMyIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX0NMU19GTE9X
IGlzIG5vdCBzZXQKQ09ORklHX05FVF9DTFNfQ0dST1VQPXkKIyBDT05GSUdfTkVUX0NMU19CUEYg
aXMgbm90IHNldAojIENPTkZJR19ORVRfQ0xTX0ZMT1dFUiBpcyBub3Qgc2V0CiMgQ09ORklHX05F
VF9DTFNfTUFUQ0hBTEwgaXMgbm90IHNldApDT05GSUdfTkVUX0VNQVRDSD15CkNPTkZJR19ORVRf
RU1BVENIX1NUQUNLPTMyCiMgQ09ORklHX05FVF9FTUFUQ0hfQ01QIGlzIG5vdCBzZXQKIyBDT05G
SUdfTkVUX0VNQVRDSF9OQllURSBpcyBub3Qgc2V0CiMgQ09ORklHX05FVF9FTUFUQ0hfVTMyIGlz
IG5vdCBzZXQKIyBDT05GSUdfTkVUX0VNQVRDSF9NRVRBIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVU
X0VNQVRDSF9URVhUIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX0VNQVRDSF9DQU5JRCBpcyBub3Qg
c2V0CiMgQ09ORklHX05FVF9FTUFUQ0hfSVBUIGlzIG5vdCBzZXQKQ09ORklHX05FVF9DTFNfQUNU
PXkKIyBDT05GSUdfTkVUX0FDVF9QT0xJQ0UgaXMgbm90IHNldAojIENPTkZJR19ORVRfQUNUX0dB
Q1QgaXMgbm90IHNldAojIENPTkZJR19ORVRfQUNUX01JUlJFRCBpcyBub3Qgc2V0CiMgQ09ORklH
X05FVF9BQ1RfU0FNUExFIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX0FDVF9JUFQgaXMgbm90IHNl
dAojIENPTkZJR19ORVRfQUNUX05BVCBpcyBub3Qgc2V0CiMgQ09ORklHX05FVF9BQ1RfUEVESVQg
aXMgbm90IHNldAojIENPTkZJR19ORVRfQUNUX1NJTVAgaXMgbm90IHNldAojIENPTkZJR19ORVRf
QUNUX1NLQkVESVQgaXMgbm90IHNldAojIENPTkZJR19ORVRfQUNUX0NTVU0gaXMgbm90IHNldAoj
IENPTkZJR19ORVRfQUNUX01QTFMgaXMgbm90IHNldAojIENPTkZJR19ORVRfQUNUX1ZMQU4gaXMg
bm90IHNldAojIENPTkZJR19ORVRfQUNUX0JQRiBpcyBub3Qgc2V0CiMgQ09ORklHX05FVF9BQ1Rf
U0tCTU9EIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX0FDVF9JRkUgaXMgbm90IHNldAojIENPTkZJ
R19ORVRfQUNUX1RVTk5FTF9LRVkgaXMgbm90IHNldAojIENPTkZJR19ORVRfQUNUX0dBVEUgaXMg
bm90IHNldAojIENPTkZJR19ORVRfVENfU0tCX0VYVCBpcyBub3Qgc2V0CkNPTkZJR19ORVRfU0NI
X0ZJRk89eQojIENPTkZJR19EQ0IgaXMgbm90IHNldApDT05GSUdfRE5TX1JFU09MVkVSPXkKIyBD
T05GSUdfQkFUTUFOX0FEViBpcyBub3Qgc2V0CiMgQ09ORklHX09QRU5WU1dJVENIIGlzIG5vdCBz
ZXQKIyBDT05GSUdfVlNPQ0tFVFMgaXMgbm90IHNldAojIENPTkZJR19ORVRMSU5LX0RJQUcgaXMg
bm90IHNldAojIENPTkZJR19NUExTIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX05TSCBpcyBub3Qg
c2V0CiMgQ09ORklHX0hTUiBpcyBub3Qgc2V0CiMgQ09ORklHX05FVF9TV0lUQ0hERVYgaXMgbm90
IHNldAojIENPTkZJR19ORVRfTDNfTUFTVEVSX0RFViBpcyBub3Qgc2V0CiMgQ09ORklHX1FSVFIg
aXMgbm90IHNldAojIENPTkZJR19ORVRfTkNTSSBpcyBub3Qgc2V0CiMgQ09ORklHX1BDUFVfREVW
X1JFRkNOVCBpcyBub3Qgc2V0CkNPTkZJR19NQVhfU0tCX0ZSQUdTPTE3CkNPTkZJR19SUFM9eQpD
T05GSUdfUkZTX0FDQ0VMPXkKQ09ORklHX1NPQ0tfUlhfUVVFVUVfTUFQUElORz15CkNPTkZJR19Y
UFM9eQpDT05GSUdfQ0dST1VQX05FVF9QUklPPXkKQ09ORklHX0NHUk9VUF9ORVRfQ0xBU1NJRD15
CkNPTkZJR19ORVRfUlhfQlVTWV9QT0xMPXkKQ09ORklHX0JRTD15CkNPTkZJR19ORVRfRkxPV19M
SU1JVD15CgojCiMgTmV0d29yayB0ZXN0aW5nCiMKIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qg
c2V0CiMgQ09ORklHX05FVF9EUk9QX01PTklUT1IgaXMgbm90IHNldAojIGVuZCBvZiBOZXR3b3Jr
IHRlc3RpbmcKIyBlbmQgb2YgTmV0d29ya2luZyBvcHRpb25zCgojIENPTkZJR19IQU1SQURJTyBp
cyBub3Qgc2V0CkNPTkZJR19DQU49eQojIENPTkZJR19DQU5fUkFXIGlzIG5vdCBzZXQKIyBDT05G
SUdfQ0FOX0JDTSBpcyBub3Qgc2V0CiMgQ09ORklHX0NBTl9HVyBpcyBub3Qgc2V0CiMgQ09ORklH
X0NBTl9KMTkzOSBpcyBub3Qgc2V0CiMgQ09ORklHX0NBTl9JU09UUCBpcyBub3Qgc2V0CkNPTkZJ
R19CVD15CkNPTkZJR19CVF9CUkVEUj15CiMgQ09ORklHX0JUX1JGQ09NTSBpcyBub3Qgc2V0CiMg
Q09ORklHX0JUX0JORVAgaXMgbm90IHNldAojIENPTkZJR19CVF9DTVRQIGlzIG5vdCBzZXQKQ09O
RklHX0JUX0hJRFA9eQojIENPTkZJR19CVF9IUyBpcyBub3Qgc2V0CiMgQ09ORklHX0JUX0xFIGlz
IG5vdCBzZXQKIyBDT05GSUdfQlRfTEVEUyBpcyBub3Qgc2V0CiMgQ09ORklHX0JUX01TRlRFWFQg
aXMgbm90IHNldAojIENPTkZJR19CVF9BT1NQRVhUIGlzIG5vdCBzZXQKIyBDT05GSUdfQlRfREVC
VUdGUyBpcyBub3Qgc2V0CiMgQ09ORklHX0JUX1NFTEZURVNUIGlzIG5vdCBzZXQKCiMKIyBCbHVl
dG9vdGggZGV2aWNlIGRyaXZlcnMKIwpDT05GSUdfQlRfSU5URUw9eQpDT05GSUdfQlRfQkNNPXkK
Q09ORklHX0JUX1JUTD15CkNPTkZJR19CVF9IQ0lCVFVTQj15CiMgQ09ORklHX0JUX0hDSUJUVVNC
X0FVVE9TVVNQRU5EIGlzIG5vdCBzZXQKIyBDT05GSUdfQlRfSENJQlRVU0JfUE9MTF9TWU5DIGlz
IG5vdCBzZXQKQ09ORklHX0JUX0hDSUJUVVNCX0JDTT15CiMgQ09ORklHX0JUX0hDSUJUVVNCX01U
SyBpcyBub3Qgc2V0CkNPTkZJR19CVF9IQ0lCVFVTQl9SVEw9eQojIENPTkZJR19CVF9IQ0lCVFNE
SU8gaXMgbm90IHNldAojIENPTkZJR19CVF9IQ0lVQVJUIGlzIG5vdCBzZXQKQ09ORklHX0JUX0hD
SUJDTTIwM1g9eQojIENPTkZJR19CVF9IQ0lCQ000Mzc3IGlzIG5vdCBzZXQKQ09ORklHX0JUX0hD
SUJQQTEwWD15CkNPTkZJR19CVF9IQ0lCRlVTQj15CiMgQ09ORklHX0JUX0hDSURUTDEgaXMgbm90
IHNldAojIENPTkZJR19CVF9IQ0lCVDNDIGlzIG5vdCBzZXQKIyBDT05GSUdfQlRfSENJQkxVRUNB
UkQgaXMgbm90IHNldAojIENPTkZJR19CVF9IQ0lWSENJIGlzIG5vdCBzZXQKQ09ORklHX0JUX01S
Vkw9eQpDT05GSUdfQlRfTVJWTF9TRElPPXkKQ09ORklHX0JUX0FUSDNLPXkKIyBDT05GSUdfQlRf
TVRLU0RJTyBpcyBub3Qgc2V0CiMgQ09ORklHX0JUX1ZJUlRJTyBpcyBub3Qgc2V0CiMgZW5kIG9m
IEJsdWV0b290aCBkZXZpY2UgZHJpdmVycwoKIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAoj
IENPTkZJR19BRl9LQ00gaXMgbm90IHNldAojIENPTkZJR19NQ1RQIGlzIG5vdCBzZXQKQ09ORklH
X0ZJQl9SVUxFUz15CkNPTkZJR19XSVJFTEVTUz15CkNPTkZJR19XSVJFTEVTU19FWFQ9eQpDT05G
SUdfV0VYVF9DT1JFPXkKQ09ORklHX1dFWFRfUFJPQz15CkNPTkZJR19XRVhUX1BSSVY9eQpDT05G
SUdfQ0ZHODAyMTE9eQojIENPTkZJR19OTDgwMjExX1RFU1RNT0RFIGlzIG5vdCBzZXQKIyBDT05G
SUdfQ0ZHODAyMTFfREVWRUxPUEVSX1dBUk5JTkdTIGlzIG5vdCBzZXQKIyBDT05GSUdfQ0ZHODAy
MTFfQ0VSVElGSUNBVElPTl9PTlVTIGlzIG5vdCBzZXQKQ09ORklHX0NGRzgwMjExX1JFUVVJUkVf
U0lHTkVEX1JFR0RCPXkKQ09ORklHX0NGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZUz15CkNP
TkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTPXkKQ09ORklHX0NGRzgwMjExX0RFQlVHRlM9eQpDT05G
SUdfQ0ZHODAyMTFfQ1JEQV9TVVBQT1JUPXkKIyBDT05GSUdfQ0ZHODAyMTFfV0VYVCBpcyBub3Qg
c2V0CkNPTkZJR19MSUI4MDIxMT15CiMgQ09ORklHX0xJQjgwMjExX0RFQlVHIGlzIG5vdCBzZXQK
Q09ORklHX01BQzgwMjExPXkKQ09ORklHX01BQzgwMjExX0hBU19SQz15CkNPTkZJR19NQUM4MDIx
MV9SQ19NSU5TVFJFTD15CkNPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUX01JTlNUUkVMPXkKQ09O
RklHX01BQzgwMjExX1JDX0RFRkFVTFQ9Im1pbnN0cmVsX2h0IgojIENPTkZJR19NQUM4MDIxMV9N
RVNIIGlzIG5vdCBzZXQKQ09ORklHX01BQzgwMjExX0xFRFM9eQpDT05GSUdfTUFDODAyMTFfREVC
VUdGUz15CiMgQ09ORklHX01BQzgwMjExX01FU1NBR0VfVFJBQ0lORyBpcyBub3Qgc2V0CiMgQ09O
RklHX01BQzgwMjExX0RFQlVHX01FTlUgaXMgbm90IHNldApDT05GSUdfTUFDODAyMTFfU1RBX0hB
U0hfTUFYX1NJWkU9MApDT05GSUdfUkZLSUxMPXkKQ09ORklHX1JGS0lMTF9MRURTPXkKQ09ORklH
X1JGS0lMTF9JTlBVVD15CiMgQ09ORklHX1JGS0lMTF9HUElPIGlzIG5vdCBzZXQKQ09ORklHX05F
VF85UD15CkNPTkZJR19ORVRfOVBfRkQ9eQpDT05GSUdfTkVUXzlQX1ZJUlRJTz15CiMgQ09ORklH
X05FVF85UF9ERUJVRyBpcyBub3Qgc2V0CiMgQ09ORklHX0NBSUYgaXMgbm90IHNldAojIENPTkZJ
R19DRVBIX0xJQiBpcyBub3Qgc2V0CkNPTkZJR19ORkM9eQpDT05GSUdfTkZDX0RJR0lUQUw9eQpD
T05GSUdfTkZDX05DST15CiMgQ09ORklHX05GQ19OQ0lfU1BJIGlzIG5vdCBzZXQKIyBDT05GSUdf
TkZDX05DSV9VQVJUIGlzIG5vdCBzZXQKIyBDT05GSUdfTkZDX0hDSSBpcyBub3Qgc2V0CgojCiMg
TmVhciBGaWVsZCBDb21tdW5pY2F0aW9uIChORkMpIGRldmljZXMKIwojIENPTkZJR19ORkNfVFJG
Nzk3MEEgaXMgbm90IHNldAojIENPTkZJR19ORkNfU0lNIGlzIG5vdCBzZXQKQ09ORklHX05GQ19Q
T1JUMTAwPXkKIyBDT05GSUdfTkZDX1ZJUlRVQUxfTkNJIGlzIG5vdCBzZXQKIyBDT05GSUdfTkZD
X0ZEUCBpcyBub3Qgc2V0CkNPTkZJR19ORkNfUE41MzM9eQpDT05GSUdfTkZDX1BONTMzX1VTQj15
CiMgQ09ORklHX05GQ19QTjUzM19JMkMgaXMgbm90IHNldApDT05GSUdfTkZDX01SVkw9eQpDT05G
SUdfTkZDX01SVkxfVVNCPXkKIyBDT05GSUdfTkZDX01SVkxfSTJDIGlzIG5vdCBzZXQKIyBDT05G
SUdfTkZDX1NUX05DSV9JMkMgaXMgbm90IHNldAojIENPTkZJR19ORkNfU1RfTkNJX1NQSSBpcyBu
b3Qgc2V0CiMgQ09ORklHX05GQ19OWFBfTkNJIGlzIG5vdCBzZXQKIyBDT05GSUdfTkZDX1MzRldS
TjVfSTJDIGlzIG5vdCBzZXQKIyBDT05GSUdfTkZDX1NUOTVIRiBpcyBub3Qgc2V0CiMgZW5kIG9m
IE5lYXIgRmllbGQgQ29tbXVuaWNhdGlvbiAoTkZDKSBkZXZpY2VzCgojIENPTkZJR19QU0FNUExF
IGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX0lGRSBpcyBub3Qgc2V0CiMgQ09ORklHX0xXVFVOTkVM
IGlzIG5vdCBzZXQKQ09ORklHX0RTVF9DQUNIRT15CkNPTkZJR19HUk9fQ0VMTFM9eQpDT05GSUdf
TkVUX1NFTEZURVNUUz15CkNPTkZJR19ORVRfU09DS19NU0c9eQpDT05GSUdfUEFHRV9QT09MPXkK
IyBDT05GSUdfUEFHRV9QT09MX1NUQVRTIGlzIG5vdCBzZXQKQ09ORklHX0ZBSUxPVkVSPXkKQ09O
RklHX0VUSFRPT0xfTkVUTElOSz15CgojCiMgRGV2aWNlIERyaXZlcnMKIwpDT05GSUdfSEFWRV9F
SVNBPXkKIyBDT05GSUdfRUlTQSBpcyBub3Qgc2V0CkNPTkZJR19IQVZFX1BDST15CkNPTkZJR19Q
Q0k9eQpDT05GSUdfUENJX0RPTUFJTlM9eQpDT05GSUdfUENJRVBPUlRCVVM9eQojIENPTkZJR19I
T1RQTFVHX1BDSV9QQ0lFIGlzIG5vdCBzZXQKIyBDT05GSUdfUENJRUFFUiBpcyBub3Qgc2V0CkNP
TkZJR19QQ0lFQVNQTT15CkNPTkZJR19QQ0lFQVNQTV9ERUZBVUxUPXkKIyBDT05GSUdfUENJRUFT
UE1fUE9XRVJTQVZFIGlzIG5vdCBzZXQKIyBDT05GSUdfUENJRUFTUE1fUE9XRVJfU1VQRVJTQVZF
IGlzIG5vdCBzZXQKIyBDT05GSUdfUENJRUFTUE1fUEVSRk9STUFOQ0UgaXMgbm90IHNldApDT05G
SUdfUENJRV9QTUU9eQojIENPTkZJR19QQ0lFX1BUTSBpcyBub3Qgc2V0CkNPTkZJR19QQ0lfTVNJ
PXkKQ09ORklHX1BDSV9RVUlSS1M9eQojIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAojIENP
TkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CkNPTkZJR19QQ0lfQVRTPXkKQ09ORklHX1BDSV9FQ0FN
PXkKQ09ORklHX1BDSV9MT0NLTEVTU19DT05GSUc9eQojIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBz
ZXQKQ09ORklHX1BDSV9QUkk9eQpDT05GSUdfUENJX1BBU0lEPXkKQ09ORklHX1BDSV9MQUJFTD15
CiMgQ09ORklHX1BDSV9EWU5BTUlDX09GX05PREVTIGlzIG5vdCBzZXQKIyBDT05GSUdfUENJRV9C
VVNfVFVORV9PRkYgaXMgbm90IHNldApDT05GSUdfUENJRV9CVVNfREVGQVVMVD15CiMgQ09ORklH
X1BDSUVfQlVTX1NBRkUgaXMgbm90IHNldAojIENPTkZJR19QQ0lFX0JVU19QRVJGT1JNQU5DRSBp
cyBub3Qgc2V0CiMgQ09ORklHX1BDSUVfQlVTX1BFRVIyUEVFUiBpcyBub3Qgc2V0CkNPTkZJR19W
R0FfQVJCPXkKQ09ORklHX1ZHQV9BUkJfTUFYX0dQVVM9MTYKQ09ORklHX0hPVFBMVUdfUENJPXkK
IyBDT05GSUdfSE9UUExVR19QQ0lfQUNQSSBpcyBub3Qgc2V0CiMgQ09ORklHX0hPVFBMVUdfUENJ
X0NQQ0kgaXMgbm90IHNldAojIENPTkZJR19IT1RQTFVHX1BDSV9TSFBDIGlzIG5vdCBzZXQKCiMK
IyBQQ0kgY29udHJvbGxlciBkcml2ZXJzCiMKIyBDT05GSUdfUENJX0ZUUENJMTAwIGlzIG5vdCBz
ZXQKQ09ORklHX1BDSV9IT1NUX0NPTU1PTj15CkNPTkZJR19QQ0lfSE9TVF9HRU5FUklDPXkKIyBD
T05GSUdfVk1EIGlzIG5vdCBzZXQKIyBDT05GSUdfUENJRV9NSUNST0NISVBfSE9TVCBpcyBub3Qg
c2V0CiMgQ09ORklHX1BDSUVfWElMSU5YIGlzIG5vdCBzZXQKCiMKIyBDYWRlbmNlLWJhc2VkIFBD
SWUgY29udHJvbGxlcnMKIwojIENPTkZJR19QQ0lFX0NBREVOQ0VfUExBVF9IT1NUIGlzIG5vdCBz
ZXQKIyBlbmQgb2YgQ2FkZW5jZS1iYXNlZCBQQ0llIGNvbnRyb2xsZXJzCgojCiMgRGVzaWduV2Fy
ZS1iYXNlZCBQQ0llIGNvbnRyb2xsZXJzCiMKIyBDT05GSUdfUENJX01FU09OIGlzIG5vdCBzZXQK
IyBDT05GSUdfUENJRV9JTlRFTF9HVyBpcyBub3Qgc2V0CiMgQ09ORklHX1BDSUVfRFdfUExBVF9I
T1NUIGlzIG5vdCBzZXQKIyBlbmQgb2YgRGVzaWduV2FyZS1iYXNlZCBQQ0llIGNvbnRyb2xsZXJz
CgojCiMgTW9iaXZlaWwtYmFzZWQgUENJZSBjb250cm9sbGVycwojCiMgZW5kIG9mIE1vYml2ZWls
LWJhc2VkIFBDSWUgY29udHJvbGxlcnMKIyBlbmQgb2YgUENJIGNvbnRyb2xsZXIgZHJpdmVycwoK
IwojIFBDSSBFbmRwb2ludAojCiMgQ09ORklHX1BDSV9FTkRQT0lOVCBpcyBub3Qgc2V0CiMgZW5k
IG9mIFBDSSBFbmRwb2ludAoKIwojIFBDSSBzd2l0Y2ggY29udHJvbGxlciBkcml2ZXJzCiMKIyBD
T05GSUdfUENJX1NXX1NXSVRDSFRFQyBpcyBub3Qgc2V0CiMgZW5kIG9mIFBDSSBzd2l0Y2ggY29u
dHJvbGxlciBkcml2ZXJzCgojIENPTkZJR19DWExfQlVTIGlzIG5vdCBzZXQKQ09ORklHX1BDQ0FS
RD15CkNPTkZJR19QQ01DSUE9eQpDT05GSUdfUENNQ0lBX0xPQURfQ0lTPXkKQ09ORklHX0NBUkRC
VVM9eQoKIwojIFBDLWNhcmQgYnJpZGdlcwojCkNPTkZJR19ZRU5UQT15CkNPTkZJR19ZRU5UQV9P
Mj15CkNPTkZJR19ZRU5UQV9SSUNPSD15CkNPTkZJR19ZRU5UQV9UST15CkNPTkZJR19ZRU5UQV9F
TkVfVFVORT15CkNPTkZJR19ZRU5UQV9UT1NISUJBPXkKIyBDT05GSUdfUEQ2NzI5IGlzIG5vdCBz
ZXQKIyBDT05GSUdfSTgyMDkyIGlzIG5vdCBzZXQKQ09ORklHX1BDQ0FSRF9OT05TVEFUSUM9eQoj
IENPTkZJR19SQVBJRElPIGlzIG5vdCBzZXQKCiMKIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiMK
Q09ORklHX0FVWElMSUFSWV9CVVM9eQpDT05GSUdfVUVWRU5UX0hFTFBFUj15CkNPTkZJR19VRVZF
TlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCkNPTkZJR19ERVZUTVBGUz15CkNPTkZJR19E
RVZUTVBGU19NT1VOVD15CiMgQ09ORklHX0RFVlRNUEZTX1NBRkUgaXMgbm90IHNldApDT05GSUdf
U1RBTkRBTE9ORT15CkNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKCiMKIyBGaXJtd2Fy
ZSBsb2FkZXIKIwpDT05GSUdfRldfTE9BREVSPXkKIyBDT05GSUdfRldfTE9BREVSX0RFQlVHIGlz
IG5vdCBzZXQKQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCiMgQ09ORklHX0ZXX0xPQURFUl9VU0VS
X0hFTFBFUiBpcyBub3Qgc2V0CiMgQ09ORklHX0ZXX0xPQURFUl9DT01QUkVTUyBpcyBub3Qgc2V0
CkNPTkZJR19GV19DQUNIRT15CiMgQ09ORklHX0ZXX1VQTE9BRCBpcyBub3Qgc2V0CiMgZW5kIG9m
IEZpcm13YXJlIGxvYWRlcgoKQ09ORklHX1dBTlRfREVWX0NPUkVEVU1QPXkKQ09ORklHX0FMTE9X
X0RFVl9DT1JFRFVNUD15CkNPTkZJR19ERVZfQ09SRURVTVA9eQojIENPTkZJR19ERUJVR19EUklW
RVIgaXMgbm90IHNldApDT05GSUdfREVCVUdfREVWUkVTPXkKIyBDT05GSUdfREVCVUdfVEVTVF9E
UklWRVJfUkVNT1ZFIGlzIG5vdCBzZXQKIyBDT05GSUdfVEVTVF9BU1lOQ19EUklWRVJfUFJPQkUg
aXMgbm90IHNldApDT05GSUdfR0VORVJJQ19DUFVfREVWSUNFUz15CkNPTkZJR19HRU5FUklDX0NQ
VV9BVVRPUFJPQkU9eQpDT05GSUdfR0VORVJJQ19DUFVfVlVMTkVSQUJJTElUSUVTPXkKQ09ORklH
X1JFR01BUD15CkNPTkZJR19SRUdNQVBfSTJDPXkKQ09ORklHX1JFR01BUF9NTUlPPXkKQ09ORklH
X1JFR01BUF9JUlE9eQpDT05GSUdfRE1BX1NIQVJFRF9CVUZGRVI9eQojIENPTkZJR19ETUFfRkVO
Q0VfVFJBQ0UgaXMgbm90IHNldAojIENPTkZJR19GV19ERVZMSU5LX1NZTkNfU1RBVEVfVElNRU9V
VCBpcyBub3Qgc2V0CiMgZW5kIG9mIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKCiMKIyBCdXMgZGV2
aWNlcwojCiMgQ09ORklHX01PWFRFVCBpcyBub3Qgc2V0CiMgQ09ORklHX01ISV9CVVMgaXMgbm90
IHNldAojIENPTkZJR19NSElfQlVTX0VQIGlzIG5vdCBzZXQKIyBlbmQgb2YgQnVzIGRldmljZXMK
CiMKIyBDYWNoZSBEcml2ZXJzCiMKIyBlbmQgb2YgQ2FjaGUgRHJpdmVycwoKQ09ORklHX0NPTk5F
Q1RPUj15CkNPTkZJR19QUk9DX0VWRU5UUz15CgojCiMgRmlybXdhcmUgRHJpdmVycwojCgojCiMg
QVJNIFN5c3RlbSBDb250cm9sIGFuZCBNYW5hZ2VtZW50IEludGVyZmFjZSBQcm90b2NvbAojCiMg
ZW5kIG9mIEFSTSBTeXN0ZW0gQ29udHJvbCBhbmQgTWFuYWdlbWVudCBJbnRlcmZhY2UgUHJvdG9j
b2wKCiMgQ09ORklHX0VERCBpcyBub3Qgc2V0CkNPTkZJR19GSVJNV0FSRV9NRU1NQVA9eQpDT05G
SUdfRE1JSUQ9eQojIENPTkZJR19ETUlfU1lTRlMgaXMgbm90IHNldApDT05GSUdfRE1JX1NDQU5f
TUFDSElORV9OT05fRUZJX0ZBTExCQUNLPXkKIyBDT05GSUdfSVNDU0lfSUJGVCBpcyBub3Qgc2V0
CiMgQ09ORklHX0ZXX0NGR19TWVNGUyBpcyBub3Qgc2V0CiMgQ09ORklHX1NZU0ZCX1NJTVBMRUZC
IGlzIG5vdCBzZXQKIyBDT05GSUdfR09PR0xFX0ZJUk1XQVJFIGlzIG5vdCBzZXQKCiMKIyBRdWFs
Y29tbSBmaXJtd2FyZSBkcml2ZXJzCiMKIyBlbmQgb2YgUXVhbGNvbW0gZmlybXdhcmUgZHJpdmVy
cwoKIwojIFRlZ3JhIGZpcm13YXJlIGRyaXZlcgojCiMgZW5kIG9mIFRlZ3JhIGZpcm13YXJlIGRy
aXZlcgojIGVuZCBvZiBGaXJtd2FyZSBEcml2ZXJzCgojIENPTkZJR19HTlNTIGlzIG5vdCBzZXQK
IyBDT05GSUdfTVREIGlzIG5vdCBzZXQKQ09ORklHX09GPXkKIyBDT05GSUdfT0ZfVU5JVFRFU1Qg
aXMgbm90IHNldApDT05GSUdfT0ZfS09CSj15CkNPTkZJR19PRl9BRERSRVNTPXkKQ09ORklHX09G
X0lSUT15CiMgQ09ORklHX09GX09WRVJMQVkgaXMgbm90IHNldApDT05GSUdfT0ZfTlVNQT15CkNP
TkZJR19BUkNIX01JR0hUX0hBVkVfUENfUEFSUE9SVD15CkNPTkZJR19QQVJQT1JUPXkKIyBDT05G
SUdfUEFSUE9SVF9QQyBpcyBub3Qgc2V0CiMgQ09ORklHX1BBUlBPUlRfMTI4NCBpcyBub3Qgc2V0
CkNPTkZJR19QQVJQT1JUX05PVF9QQz15CkNPTkZJR19QTlA9eQpDT05GSUdfUE5QX0RFQlVHX01F
U1NBR0VTPXkKCiMKIyBQcm90b2NvbHMKIwpDT05GSUdfUE5QQUNQST15CkNPTkZJR19CTEtfREVW
PXkKIyBDT05GSUdfQkxLX0RFVl9OVUxMX0JMSyBpcyBub3Qgc2V0CiMgQ09ORklHX0JMS19ERVZf
RkQgaXMgbm90IHNldApDT05GSUdfQ0RST009eQojIENPTkZJR19CTEtfREVWX1BDSUVTU0RfTVRJ
UDMyWFggaXMgbm90IHNldApDT05GSUdfQkxLX0RFVl9MT09QPXkKQ09ORklHX0JMS19ERVZfTE9P
UF9NSU5fQ09VTlQ9OAojIENPTkZJR19CTEtfREVWX0RSQkQgaXMgbm90IHNldAojIENPTkZJR19C
TEtfREVWX05CRCBpcyBub3Qgc2V0CiMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKIyBD
T05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBu
b3Qgc2V0CkNPTkZJR19WSVJUSU9fQkxLPXkKIyBDT05GSUdfQkxLX0RFVl9SQkQgaXMgbm90IHNl
dAojIENPTkZJR19CTEtfREVWX1VCTEsgaXMgbm90IHNldAoKIwojIE5WTUUgU3VwcG9ydAojCiMg
Q09ORklHX0JMS19ERVZfTlZNRSBpcyBub3Qgc2V0CiMgQ09ORklHX05WTUVfRkMgaXMgbm90IHNl
dAojIENPTkZJR19OVk1FX1RDUCBpcyBub3Qgc2V0CiMgQ09ORklHX05WTUVfVEFSR0VUIGlzIG5v
dCBzZXQKIyBlbmQgb2YgTlZNRSBTdXBwb3J0CgojCiMgTWlzYyBkZXZpY2VzCiMKIyBDT05GSUdf
QUQ1MjVYX0RQT1QgaXMgbm90IHNldAojIENPTkZJR19EVU1NWV9JUlEgaXMgbm90IHNldAojIENP
TkZJR19JQk1fQVNNIGlzIG5vdCBzZXQKIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0CiMgQ09O
RklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CiMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAoj
IENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAojIENPTkZJR19IUF9JTE8gaXMg
bm90IHNldAojIENPTkZJR19BUERTOTgwMkFMUyBpcyBub3Qgc2V0CiMgQ09ORklHX0lTTDI5MDAz
IGlzIG5vdCBzZXQKIyBDT05GSUdfSVNMMjkwMjAgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JT
X1RTTDI1NTAgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0JIMTc3MCBpcyBub3Qgc2V0CiMg
Q09ORklHX1NFTlNPUlNfQVBEUzk5MFggaXMgbm90IHNldAojIENPTkZJR19ITUM2MzUyIGlzIG5v
dCBzZXQKIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKIyBDT05GSUdfTEFUVElDRV9FQ1AzX0NP
TkZJRyBpcyBub3Qgc2V0CiMgQ09ORklHX1NSQU0gaXMgbm90IHNldAojIENPTkZJR19EV19YREFU
QV9QQ0lFIGlzIG5vdCBzZXQKIyBDT05GSUdfUENJX0VORFBPSU5UX1RFU1QgaXMgbm90IHNldAoj
IENPTkZJR19YSUxJTlhfU0RGRUMgaXMgbm90IHNldApDT05GSUdfTUlTQ19SVFNYPXkKIyBDT05G
SUdfSElTSV9ISUtFWV9VU0IgaXMgbm90IHNldAojIENPTkZJR19WQ1BVX1NUQUxMX0RFVEVDVE9S
IGlzIG5vdCBzZXQKIyBDT05GSUdfTlNNIGlzIG5vdCBzZXQKIyBDT05GSUdfQzJQT1JUIGlzIG5v
dCBzZXQKCiMKIyBFRVBST00gc3VwcG9ydAojCiMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBz
ZXQKIyBDT05GSUdfRUVQUk9NX0FUMjUgaXMgbm90IHNldAojIENPTkZJR19FRVBST01fTUFYNjg3
NSBpcyBub3Qgc2V0CkNPTkZJR19FRVBST01fOTNDWDY9eQojIENPTkZJR19FRVBST01fOTNYWDQ2
IGlzIG5vdCBzZXQKIyBDT05GSUdfRUVQUk9NX0lEVF84OUhQRVNYIGlzIG5vdCBzZXQKIyBDT05G
SUdfRUVQUk9NX0VFMTAwNCBpcyBub3Qgc2V0CiMgZW5kIG9mIEVFUFJPTSBzdXBwb3J0CgojIENP
TkZJR19DQjcxMF9DT1JFIGlzIG5vdCBzZXQKCiMKIyBUZXhhcyBJbnN0cnVtZW50cyBzaGFyZWQg
dHJhbnNwb3J0IGxpbmUgZGlzY2lwbGluZQojCiMgQ09ORklHX1RJX1NUIGlzIG5vdCBzZXQKIyBl
bmQgb2YgVGV4YXMgSW5zdHJ1bWVudHMgc2hhcmVkIHRyYW5zcG9ydCBsaW5lIGRpc2NpcGxpbmUK
CiMgQ09ORklHX1NFTlNPUlNfTElTM19JMkMgaXMgbm90IHNldAojIENPTkZJR19BTFRFUkFfU1RB
UEwgaXMgbm90IHNldApDT05GSUdfSU5URUxfTUVJPXkKQ09ORklHX0lOVEVMX01FSV9NRT15CiMg
Q09ORklHX0lOVEVMX01FSV9UWEUgaXMgbm90IHNldAojIENPTkZJR19JTlRFTF9NRUlfR1NDIGlz
IG5vdCBzZXQKIyBDT05GSUdfSU5URUxfTUVJX1ZTQ19IVyBpcyBub3Qgc2V0CiMgQ09ORklHX0lO
VEVMX01FSV9IRENQIGlzIG5vdCBzZXQKIyBDT05GSUdfSU5URUxfTUVJX1BYUCBpcyBub3Qgc2V0
CiMgQ09ORklHX0lOVEVMX01FSV9HU0NfUFJPWFkgaXMgbm90IHNldAojIENPTkZJR19WTVdBUkVf
Vk1DSSBpcyBub3Qgc2V0CiMgQ09ORklHX0dFTldRRSBpcyBub3Qgc2V0CiMgQ09ORklHX0VDSE8g
aXMgbm90IHNldAojIENPTkZJR19CQ01fVksgaXMgbm90IHNldAojIENPTkZJR19NSVNDX0FMQ09S
X1BDSSBpcyBub3Qgc2V0CiMgQ09ORklHX01JU0NfUlRTWF9QQ0kgaXMgbm90IHNldApDT05GSUdf
TUlTQ19SVFNYX1VTQj15CiMgQ09ORklHX1VBQ0NFIGlzIG5vdCBzZXQKIyBDT05GSUdfUFZQQU5J
QyBpcyBub3Qgc2V0CiMgQ09ORklHX0dQX1BDSTFYWFhYIGlzIG5vdCBzZXQKIyBlbmQgb2YgTWlz
YyBkZXZpY2VzCgojCiMgU0NTSSBkZXZpY2Ugc3VwcG9ydAojCkNPTkZJR19TQ1NJX01PRD15CiMg
Q09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldApDT05GSUdfU0NTSV9DT01NT049eQpDT05GSUdf
U0NTST15CkNPTkZJR19TQ1NJX0RNQT15CkNPTkZJR19TQ1NJX1BST0NfRlM9eQoKIwojIFNDU0kg
c3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCiMKQ09ORklHX0JMS19ERVZfU0Q9eQoj
IENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKQ09ORklHX0JMS19ERVZfU1I9eQpDT05GSUdf
Q0hSX0RFVl9TRz15CkNPTkZJR19CTEtfREVWX0JTRz15CiMgQ09ORklHX0NIUl9ERVZfU0NIIGlz
IG5vdCBzZXQKQ09ORklHX1NDU0lfQ09OU1RBTlRTPXkKIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlz
IG5vdCBzZXQKIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKCiMKIyBTQ1NJIFRy
YW5zcG9ydHMKIwpDT05GSUdfU0NTSV9TUElfQVRUUlM9eQojIENPTkZJR19TQ1NJX0ZDX0FUVFJT
IGlzIG5vdCBzZXQKIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CiMgQ09ORklH
X1NDU0lfU0FTX0FUVFJTIGlzIG5vdCBzZXQKIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5v
dCBzZXQKIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAojIGVuZCBvZiBTQ1NJIFRy
YW5zcG9ydHMKCkNPTkZJR19TQ1NJX0xPV0xFVkVMPXkKIyBDT05GSUdfSVNDU0lfVENQIGlzIG5v
dCBzZXQKIyBDT05GSUdfSVNDU0lfQk9PVF9TWVNGUyBpcyBub3Qgc2V0CiMgQ09ORklHX1NDU0lf
Q1hHQjNfSVNDU0kgaXMgbm90IHNldAojIENPTkZJR19TQ1NJX0NYR0I0X0lTQ1NJIGlzIG5vdCBz
ZXQKIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKIyBDT05GSUdfQkUySVNDU0kg
aXMgbm90IHNldAojIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiMgQ09O
RklHX1NDU0lfSFBTQSBpcyBub3Qgc2V0CiMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0
CiMgQ09ORklHX1NDU0lfM1dfU0FTIGlzIG5vdCBzZXQKIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBu
b3Qgc2V0CiMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0CiMgQ09ORklHX1NDU0lfQUlD
N1hYWCBpcyBub3Qgc2V0CiMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CiMgQ09ORklH
X1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0CiMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAoj
IENPTkZJR19TQ1NJX01WVU1JIGlzIG5vdCBzZXQKIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBu
b3Qgc2V0CiMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKIyBDT05GSUdfU0NTSV9FU0FT
MlIgaXMgbm90IHNldAojIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAojIENPTkZJ
R19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAojIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90
IHNldAojIENPTkZJR19TQ1NJX01QVDNTQVMgaXMgbm90IHNldAojIENPTkZJR19TQ1NJX01QVDJT
QVMgaXMgbm90IHNldAojIENPTkZJR19TQ1NJX01QSTNNUiBpcyBub3Qgc2V0CiMgQ09ORklHX1ND
U0lfU01BUlRQUUkgaXMgbm90IHNldAojIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CiMg
Q09ORklHX1NDU0lfQlVTTE9HSUMgaXMgbm90IHNldAojIENPTkZJR19TQ1NJX01ZUkIgaXMgbm90
IHNldAojIENPTkZJR19TQ1NJX01ZUlMgaXMgbm90IHNldAojIENPTkZJR19WTVdBUkVfUFZTQ1NJ
IGlzIG5vdCBzZXQKIyBDT05GSUdfU0NTSV9TTklDIGlzIG5vdCBzZXQKIyBDT05GSUdfU0NTSV9E
TVgzMTkxRCBpcyBub3Qgc2V0CiMgQ09ORklHX1NDU0lfRkRPTUFJTl9QQ0kgaXMgbm90IHNldAoj
IENPTkZJR19TQ1NJX0lTQ0kgaXMgbm90IHNldAojIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0
CiMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKIyBDT05GSUdfU0NTSV9JTklBMTAwIGlz
IG5vdCBzZXQKIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKIyBDT05GSUdfU0NTSV9TWU01
M0M4WFhfMiBpcyBub3Qgc2V0CiMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKIyBDT05GSUdf
U0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CiMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5v
dCBzZXQKIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAojIENPTkZJR19TQ1NJX0FNNTND
OTc0IGlzIG5vdCBzZXQKIyBDT05GSUdfU0NTSV9XRDcxOVggaXMgbm90IHNldAojIENPTkZJR19T
Q1NJX0RFQlVHIGlzIG5vdCBzZXQKIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKIyBD
T05GSUdfU0NTSV9QTTgwMDEgaXMgbm90IHNldApDT05GSUdfU0NTSV9WSVJUSU89eQojIENPTkZJ
R19TQ1NJX0xPV0xFVkVMX1BDTUNJQSBpcyBub3Qgc2V0CiMgQ09ORklHX1NDU0lfREggaXMgbm90
IHNldAojIGVuZCBvZiBTQ1NJIGRldmljZSBzdXBwb3J0CgpDT05GSUdfQVRBPXkKQ09ORklHX1NB
VEFfSE9TVD15CkNPTkZJR19QQVRBX1RJTUlOR1M9eQpDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9
eQpDT05GSUdfQVRBX0ZPUkNFPXkKQ09ORklHX0FUQV9BQ1BJPXkKIyBDT05GSUdfU0FUQV9aUE9E
RCBpcyBub3Qgc2V0CkNPTkZJR19TQVRBX1BNUD15CgojCiMgQ29udHJvbGxlcnMgd2l0aCBub24t
U0ZGIG5hdGl2ZSBpbnRlcmZhY2UKIwpDT05GSUdfU0FUQV9BSENJPXkKQ09ORklHX1NBVEFfTU9C
SUxFX0xQTV9QT0xJQ1k9MAojIENPTkZJR19TQVRBX0FIQ0lfUExBVEZPUk0gaXMgbm90IHNldAoj
IENPTkZJR19BSENJX0RXQyBpcyBub3Qgc2V0CiMgQ09ORklHX0FIQ0lfQ0VWQSBpcyBub3Qgc2V0
CiMgQ09ORklHX1NBVEFfSU5JQzE2MlggaXMgbm90IHNldAojIENPTkZJR19TQVRBX0FDQVJEX0FI
Q0kgaXMgbm90IHNldAojIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQ09ORklHX0FUQV9T
RkY9eQoKIwojIFNGRiBjb250cm9sbGVycyB3aXRoIGN1c3RvbSBETUEgaW50ZXJmYWNlCiMKIyBD
T05GSUdfUERDX0FETUEgaXMgbm90IHNldAojIENPTkZJR19TQVRBX1FTVE9SIGlzIG5vdCBzZXQK
IyBDT05GSUdfU0FUQV9TWDQgaXMgbm90IHNldApDT05GSUdfQVRBX0JNRE1BPXkKCiMKIyBTQVRB
IFNGRiBjb250cm9sbGVycyB3aXRoIEJNRE1BCiMKQ09ORklHX0FUQV9QSUlYPXkKIyBDT05GSUdf
U0FUQV9EV0MgaXMgbm90IHNldAojIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKIyBDT05GSUdf
U0FUQV9OViBpcyBub3Qgc2V0CiMgQ09ORklHX1NBVEFfUFJPTUlTRSBpcyBub3Qgc2V0CiMgQ09O
RklHX1NBVEFfU0lMIGlzIG5vdCBzZXQKIyBDT05GSUdfU0FUQV9TSVMgaXMgbm90IHNldAojIENP
TkZJR19TQVRBX1NWVyBpcyBub3Qgc2V0CiMgQ09ORklHX1NBVEFfVUxJIGlzIG5vdCBzZXQKIyBD
T05GSUdfU0FUQV9WSUEgaXMgbm90IHNldAojIENPTkZJR19TQVRBX1ZJVEVTU0UgaXMgbm90IHNl
dAoKIwojIFBBVEEgU0ZGIGNvbnRyb2xsZXJzIHdpdGggQk1ETUEKIwojIENPTkZJR19QQVRBX0FM
SSBpcyBub3Qgc2V0CkNPTkZJR19QQVRBX0FNRD15CiMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90
IHNldAojIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiMgQ09ORklHX1BBVEFfQVRQODY3
WCBpcyBub3Qgc2V0CiMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKIyBDT05GSUdfUEFU
QV9DWVBSRVNTIGlzIG5vdCBzZXQKIyBDT05GSUdfUEFUQV9FRkFSIGlzIG5vdCBzZXQKIyBDT05G
SUdfUEFUQV9IUFQzNjYgaXMgbm90IHNldAojIENPTkZJR19QQVRBX0hQVDM3WCBpcyBub3Qgc2V0
CiMgQ09ORklHX1BBVEFfSFBUM1gyTiBpcyBub3Qgc2V0CiMgQ09ORklHX1BBVEFfSFBUM1gzIGlz
IG5vdCBzZXQKIyBDT05GSUdfUEFUQV9JVDgyMTMgaXMgbm90IHNldAojIENPTkZJR19QQVRBX0lU
ODIxWCBpcyBub3Qgc2V0CiMgQ09ORklHX1BBVEFfSk1JQ1JPTiBpcyBub3Qgc2V0CiMgQ09ORklH
X1BBVEFfTUFSVkVMTCBpcyBub3Qgc2V0CiMgQ09ORklHX1BBVEFfTkVUQ0VMTCBpcyBub3Qgc2V0
CiMgQ09ORklHX1BBVEFfTklOSkEzMiBpcyBub3Qgc2V0CiMgQ09ORklHX1BBVEFfTlM4NzQxNSBp
cyBub3Qgc2V0CkNPTkZJR19QQVRBX09MRFBJSVg9eQojIENPTkZJR19QQVRBX09QVElETUEgaXMg
bm90IHNldAojIENPTkZJR19QQVRBX1BEQzIwMjdYIGlzIG5vdCBzZXQKIyBDT05GSUdfUEFUQV9Q
RENfT0xEIGlzIG5vdCBzZXQKIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKIyBDT05G
SUdfUEFUQV9SREMgaXMgbm90IHNldApDT05GSUdfUEFUQV9TQ0g9eQojIENPTkZJR19QQVRBX1NF
UlZFUldPUktTIGlzIG5vdCBzZXQKIyBDT05GSUdfUEFUQV9TSUw2ODAgaXMgbm90IHNldAojIENP
TkZJR19QQVRBX1NJUyBpcyBub3Qgc2V0CiMgQ09ORklHX1BBVEFfVE9TSElCQSBpcyBub3Qgc2V0
CiMgQ09ORklHX1BBVEFfVFJJRkxFWCBpcyBub3Qgc2V0CiMgQ09ORklHX1BBVEFfVklBIGlzIG5v
dCBzZXQKIyBDT05GSUdfUEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKCiMKIyBQSU8tb25seSBTRkYg
Y29udHJvbGxlcnMKIwojIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAojIENPTkZJ
R19QQVRBX01QSUlYIGlzIG5vdCBzZXQKIyBDT05GSUdfUEFUQV9OUzg3NDEwIGlzIG5vdCBzZXQK
IyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBzZXQKIyBDT05GSUdfUEFUQV9QQ01DSUEgaXMgbm90
IHNldAojIENPTkZJR19QQVRBX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKIyBDT05GSUdfUEFUQV9S
WjEwMDAgaXMgbm90IHNldAoKIwojIEdlbmVyaWMgZmFsbGJhY2sgLyBsZWdhY3kgZHJpdmVycwoj
CiMgQ09ORklHX1BBVEFfQUNQSSBpcyBub3Qgc2V0CiMgQ09ORklHX0FUQV9HRU5FUklDIGlzIG5v
dCBzZXQKIyBDT05GSUdfUEFUQV9MRUdBQ1kgaXMgbm90IHNldApDT05GSUdfTUQ9eQpDT05GSUdf
QkxLX0RFVl9NRD15CkNPTkZJR19NRF9BVVRPREVURUNUPXkKQ09ORklHX01EX0JJVE1BUF9GSUxF
PXkKIyBDT05GSUdfTURfUkFJRDAgaXMgbm90IHNldAojIENPTkZJR19NRF9SQUlEMSBpcyBub3Qg
c2V0CiMgQ09ORklHX01EX1JBSUQxMCBpcyBub3Qgc2V0CiMgQ09ORklHX01EX1JBSUQ0NTYgaXMg
bm90IHNldAojIENPTkZJR19CQ0FDSEUgaXMgbm90IHNldApDT05GSUdfQkxLX0RFVl9ETV9CVUlM
VElOPXkKQ09ORklHX0JMS19ERVZfRE09eQojIENPTkZJR19ETV9ERUJVRyBpcyBub3Qgc2V0CiMg
Q09ORklHX0RNX1VOU1RSSVBFRCBpcyBub3Qgc2V0CiMgQ09ORklHX0RNX0NSWVBUIGlzIG5vdCBz
ZXQKIyBDT05GSUdfRE1fU05BUFNIT1QgaXMgbm90IHNldAojIENPTkZJR19ETV9USElOX1BST1ZJ
U0lPTklORyBpcyBub3Qgc2V0CiMgQ09ORklHX0RNX0NBQ0hFIGlzIG5vdCBzZXQKIyBDT05GSUdf
RE1fV1JJVEVDQUNIRSBpcyBub3Qgc2V0CiMgQ09ORklHX0RNX0VCUyBpcyBub3Qgc2V0CiMgQ09O
RklHX0RNX0VSQSBpcyBub3Qgc2V0CiMgQ09ORklHX0RNX0NMT05FIGlzIG5vdCBzZXQKQ09ORklH
X0RNX01JUlJPUj15CiMgQ09ORklHX0RNX0xPR19VU0VSU1BBQ0UgaXMgbm90IHNldAojIENPTkZJ
R19ETV9SQUlEIGlzIG5vdCBzZXQKQ09ORklHX0RNX1pFUk89eQojIENPTkZJR19ETV9NVUxUSVBB
VEggaXMgbm90IHNldAojIENPTkZJR19ETV9ERUxBWSBpcyBub3Qgc2V0CiMgQ09ORklHX0RNX0RV
U1QgaXMgbm90IHNldAojIENPTkZJR19ETV9JTklUIGlzIG5vdCBzZXQKIyBDT05GSUdfRE1fVUVW
RU5UIGlzIG5vdCBzZXQKIyBDT05GSUdfRE1fRkxBS0VZIGlzIG5vdCBzZXQKIyBDT05GSUdfRE1f
VkVSSVRZIGlzIG5vdCBzZXQKIyBDT05GSUdfRE1fU1dJVENIIGlzIG5vdCBzZXQKIyBDT05GSUdf
RE1fTE9HX1dSSVRFUyBpcyBub3Qgc2V0CiMgQ09ORklHX0RNX0lOVEVHUklUWSBpcyBub3Qgc2V0
CiMgQ09ORklHX0RNX0FVRElUIGlzIG5vdCBzZXQKQ09ORklHX1RBUkdFVF9DT1JFPXkKIyBDT05G
SUdfVENNX0lCTE9DSyBpcyBub3Qgc2V0CiMgQ09ORklHX1RDTV9GSUxFSU8gaXMgbm90IHNldAoj
IENPTkZJR19UQ01fUFNDU0kgaXMgbm90IHNldAojIENPTkZJR19MT09QQkFDS19UQVJHRVQgaXMg
bm90IHNldAojIENPTkZJR19JU0NTSV9UQVJHRVQgaXMgbm90IHNldAojIENPTkZJR19SRU1PVEVf
VEFSR0VUIGlzIG5vdCBzZXQKIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKCiMKIyBJRUVFIDEz
OTQgKEZpcmVXaXJlKSBzdXBwb3J0CiMKIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAojIENP
TkZJR19GSVJFV0lSRV9OT1NZIGlzIG5vdCBzZXQKIyBlbmQgb2YgSUVFRSAxMzk0IChGaXJlV2ly
ZSkgc3VwcG9ydAoKQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTPXkKQ09ORklHX01BQ19FTVVNT1VT
RUJUTj15CkNPTkZJR19ORVRERVZJQ0VTPXkKQ09ORklHX01JST15CkNPTkZJR19ORVRfQ09SRT15
CiMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAojIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiMg
Q09ORklHX1dJUkVHVUFSRCBpcyBub3Qgc2V0CiMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0
CiMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0CiMgQ09ORklHX05FVF9URUFNIGlzIG5vdCBzZXQK
IyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CiMgQ09ORklHX0lQVkxBTiBpcyBub3Qgc2V0CiMg
Q09ORklHX1ZYTEFOIGlzIG5vdCBzZXQKIyBDT05GSUdfR0VORVZFIGlzIG5vdCBzZXQKIyBDT05G
SUdfQkFSRVVEUCBpcyBub3Qgc2V0CiMgQ09ORklHX0dUUCBpcyBub3Qgc2V0CiMgQ09ORklHX0FN
VCBpcyBub3Qgc2V0CiMgQ09ORklHX01BQ1NFQyBpcyBub3Qgc2V0CkNPTkZJR19ORVRDT05TT0xF
PXkKIyBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUQ09O
U09MRV9FWFRFTkRFRF9MT0cgaXMgbm90IHNldApDT05GSUdfTkVUUE9MTD15CkNPTkZJR19ORVRf
UE9MTF9DT05UUk9MTEVSPXkKIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKIyBDT05GSUdfVFVOX1ZO
RVRfQ1JPU1NfTEUgaXMgbm90IHNldAojIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKQ09ORklHX1ZJ
UlRJT19ORVQ9eQojIENPTkZJR19OTE1PTiBpcyBub3Qgc2V0CiMgQ09ORklHX05FVEtJVCBpcyBu
b3Qgc2V0CiMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CiMgQ09ORklHX0FUTV9EUklWRVJTIGlz
IG5vdCBzZXQKQ09ORklHX0VUSEVSTkVUPXkKQ09ORklHX05FVF9WRU5ET1JfM0NPTT15CiMgQ09O
RklHX1BDTUNJQV8zQzU3NCBpcyBub3Qgc2V0CiMgQ09ORklHX1BDTUNJQV8zQzU4OSBpcyBub3Qg
c2V0CiMgQ09ORklHX1ZPUlRFWCBpcyBub3Qgc2V0CiMgQ09ORklHX1RZUEhPT04gaXMgbm90IHNl
dApDT05GSUdfTkVUX1ZFTkRPUl9BREFQVEVDPXkKIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBp
cyBub3Qgc2V0CkNPTkZJR19ORVRfVkVORE9SX0FHRVJFPXkKIyBDT05GSUdfRVQxMzFYIGlzIG5v
dCBzZXQKQ09ORklHX05FVF9WRU5ET1JfQUxBQ1JJVEVDSD15CiMgQ09ORklHX1NMSUNPU1MgaXMg
bm90IHNldApDT05GSUdfTkVUX1ZFTkRPUl9BTFRFT049eQojIENPTkZJR19BQ0VOSUMgaXMgbm90
IHNldAojIENPTkZJR19BTFRFUkFfVFNFIGlzIG5vdCBzZXQKQ09ORklHX05FVF9WRU5ET1JfQU1B
Wk9OPXkKIyBDT05GSUdfRU5BX0VUSEVSTkVUIGlzIG5vdCBzZXQKQ09ORklHX05FVF9WRU5ET1Jf
QU1EPXkKIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAojIENPTkZJR19QQ05FVDMyIGlz
IG5vdCBzZXQKIyBDT05GSUdfUENNQ0lBX05NQ0xBTiBpcyBub3Qgc2V0CiMgQ09ORklHX0FNRF9Y
R0JFIGlzIG5vdCBzZXQKIyBDT05GSUdfUERTX0NPUkUgaXMgbm90IHNldApDT05GSUdfTkVUX1ZF
TkRPUl9BUVVBTlRJQT15CiMgQ09ORklHX0FRVElPTiBpcyBub3Qgc2V0CkNPTkZJR19ORVRfVkVO
RE9SX0FSQz15CkNPTkZJR19ORVRfVkVORE9SX0FTSVg9eQojIENPTkZJR19TUElfQVg4ODc5NkMg
aXMgbm90IHNldApDT05GSUdfTkVUX1ZFTkRPUl9BVEhFUk9TPXkKIyBDT05GSUdfQVRMMiBpcyBu
b3Qgc2V0CiMgQ09ORklHX0FUTDEgaXMgbm90IHNldAojIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0
CiMgQ09ORklHX0FUTDFDIGlzIG5vdCBzZXQKIyBDT05GSUdfQUxYIGlzIG5vdCBzZXQKIyBDT05G
SUdfQ1hfRUNBVCBpcyBub3Qgc2V0CkNPTkZJR19ORVRfVkVORE9SX0JST0FEQ09NPXkKIyBDT05G
SUdfQjQ0IGlzIG5vdCBzZXQKIyBDT05GSUdfQkNNR0VORVQgaXMgbm90IHNldAojIENPTkZJR19C
TlgyIGlzIG5vdCBzZXQKIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0CkNPTkZJR19USUdPTjM9eQpD
T05GSUdfVElHT04zX0hXTU9OPXkKIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAojIENPTkZJR19T
WVNURU1QT1JUIGlzIG5vdCBzZXQKIyBDT05GSUdfQk5YVCBpcyBub3Qgc2V0CkNPTkZJR19ORVRf
VkVORE9SX0NBREVOQ0U9eQojIENPTkZJR19NQUNCIGlzIG5vdCBzZXQKQ09ORklHX05FVF9WRU5E
T1JfQ0FWSVVNPXkKIyBDT05GSUdfVEhVTkRFUl9OSUNfUEYgaXMgbm90IHNldAojIENPTkZJR19U
SFVOREVSX05JQ19WRiBpcyBub3Qgc2V0CiMgQ09ORklHX1RIVU5ERVJfTklDX0JHWCBpcyBub3Qg
c2V0CiMgQ09ORklHX1RIVU5ERVJfTklDX1JHWCBpcyBub3Qgc2V0CiMgQ09ORklHX0NBVklVTV9Q
VFAgaXMgbm90IHNldAojIENPTkZJR19MSVFVSURJTyBpcyBub3Qgc2V0CiMgQ09ORklHX0xJUVVJ
RElPX1ZGIGlzIG5vdCBzZXQKQ09ORklHX05FVF9WRU5ET1JfQ0hFTFNJTz15CiMgQ09ORklHX0NI
RUxTSU9fVDEgaXMgbm90IHNldAojIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKIyBDT05G
SUdfQ0hFTFNJT19UNCBpcyBub3Qgc2V0CiMgQ09ORklHX0NIRUxTSU9fVDRWRiBpcyBub3Qgc2V0
CkNPTkZJR19ORVRfVkVORE9SX0NJU0NPPXkKIyBDT05GSUdfRU5JQyBpcyBub3Qgc2V0CkNPTkZJ
R19ORVRfVkVORE9SX0NPUlRJTkE9eQojIENPTkZJR19HRU1JTklfRVRIRVJORVQgaXMgbm90IHNl
dApDT05GSUdfTkVUX1ZFTkRPUl9EQVZJQ09NPXkKIyBDT05GSUdfRE05MDUxIGlzIG5vdCBzZXQK
IyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CkNPTkZJR19ORVRfVkVORE9SX0RFQz15CkNPTkZJR19O
RVRfVFVMSVA9eQojIENPTkZJR19ERTIxMDRYIGlzIG5vdCBzZXQKIyBDT05GSUdfVFVMSVAgaXMg
bm90IHNldAojIENPTkZJR19XSU5CT05EXzg0MCBpcyBub3Qgc2V0CiMgQ09ORklHX0RNOTEwMiBp
cyBub3Qgc2V0CiMgQ09ORklHX1VMSTUyNlggaXMgbm90IHNldAojIENPTkZJR19QQ01DSUFfWElS
Q09NIGlzIG5vdCBzZXQKQ09ORklHX05FVF9WRU5ET1JfRExJTks9eQojIENPTkZJR19ETDJLIGlz
IG5vdCBzZXQKIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldApDT05GSUdfTkVUX1ZFTkRPUl9F
TVVMRVg9eQojIENPTkZJR19CRTJORVQgaXMgbm90IHNldApDT05GSUdfTkVUX1ZFTkRPUl9FTkdM
RURFUj15CiMgQ09ORklHX1RTTkVQIGlzIG5vdCBzZXQKQ09ORklHX05FVF9WRU5ET1JfRVpDSElQ
PXkKIyBDT05GSUdfRVpDSElQX05QU19NQU5BR0VNRU5UX0VORVQgaXMgbm90IHNldApDT05GSUdf
TkVUX1ZFTkRPUl9GVUpJVFNVPXkKIyBDT05GSUdfUENNQ0lBX0ZNVkoxOFggaXMgbm90IHNldApD
T05GSUdfTkVUX1ZFTkRPUl9GVU5HSUJMRT15CiMgQ09ORklHX0ZVTl9FVEggaXMgbm90IHNldApD
T05GSUdfTkVUX1ZFTkRPUl9HT09HTEU9eQojIENPTkZJR19HVkUgaXMgbm90IHNldApDT05GSUdf
TkVUX1ZFTkRPUl9IVUFXRUk9eQojIENPTkZJR19ISU5JQyBpcyBub3Qgc2V0CkNPTkZJR19ORVRf
VkVORE9SX0k4MjVYWD15CkNPTkZJR19ORVRfVkVORE9SX0lOVEVMPXkKQ09ORklHX0UxMDA9eQpD
T05GSUdfRTEwMDA9eQpDT05GSUdfRTEwMDBFPXkKQ09ORklHX0UxMDAwRV9IV1RTPXkKIyBDT05G
SUdfSUdCIGlzIG5vdCBzZXQKIyBDT05GSUdfSUdCVkYgaXMgbm90IHNldAojIENPTkZJR19JWEdC
RSBpcyBub3Qgc2V0CiMgQ09ORklHX0lYR0JFVkYgaXMgbm90IHNldAojIENPTkZJR19JNDBFIGlz
IG5vdCBzZXQKIyBDT05GSUdfSTQwRVZGIGlzIG5vdCBzZXQKIyBDT05GSUdfSUNFIGlzIG5vdCBz
ZXQKIyBDT05GSUdfRk0xMEsgaXMgbm90IHNldAojIENPTkZJR19JR0MgaXMgbm90IHNldAojIENP
TkZJR19JRFBGIGlzIG5vdCBzZXQKIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVU
X1ZFTkRPUl9BREkgaXMgbm90IHNldApDT05GSUdfTkVUX1ZFTkRPUl9MSVRFWD15CiMgQ09ORklH
X0xJVEVYX0xJVEVFVEggaXMgbm90IHNldApDT05GSUdfTkVUX1ZFTkRPUl9NQVJWRUxMPXkKIyBD
T05GSUdfTVZNRElPIGlzIG5vdCBzZXQKIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CkNPTkZJR19T
S1kyPXkKIyBDT05GSUdfU0tZMl9ERUJVRyBpcyBub3Qgc2V0CiMgQ09ORklHX09DVEVPTl9FUCBp
cyBub3Qgc2V0CkNPTkZJR19ORVRfVkVORE9SX01FTExBTk9YPXkKIyBDT05GSUdfTUxYNF9FTiBp
cyBub3Qgc2V0CiMgQ09ORklHX01MWDVfQ09SRSBpcyBub3Qgc2V0CiMgQ09ORklHX01MWFNXX0NP
UkUgaXMgbm90IHNldAojIENPTkZJR19NTFhGVyBpcyBub3Qgc2V0CkNPTkZJR19ORVRfVkVORE9S
X01JQ1JFTD15CiMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CiMgQ09ORklHX0tTODg1MSBpcyBu
b3Qgc2V0CiMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAojIENPTkZJR19LU1o4ODRYX1BD
SSBpcyBub3Qgc2V0CkNPTkZJR19ORVRfVkVORE9SX01JQ1JPQ0hJUD15CiMgQ09ORklHX0VOQzI4
SjYwIGlzIG5vdCBzZXQKIyBDT05GSUdfRU5DWDI0SjYwMCBpcyBub3Qgc2V0CiMgQ09ORklHX0xB
Tjc0M1ggaXMgbm90IHNldAojIENPTkZJR19WQ0FQIGlzIG5vdCBzZXQKQ09ORklHX05FVF9WRU5E
T1JfTUlDUk9TRU1JPXkKQ09ORklHX05FVF9WRU5ET1JfTUlDUk9TT0ZUPXkKQ09ORklHX05FVF9W
RU5ET1JfTVlSST15CiMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKIyBDT05GSUdfRkVBTE5Y
IGlzIG5vdCBzZXQKQ09ORklHX05FVF9WRU5ET1JfTkk9eQojIENPTkZJR19OSV9YR0VfTUFOQUdF
TUVOVF9FTkVUIGlzIG5vdCBzZXQKQ09ORklHX05FVF9WRU5ET1JfTkFUU0VNST15CiMgQ09ORklH
X05BVFNFTUkgaXMgbm90IHNldAojIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKQ09ORklHX05F
VF9WRU5ET1JfTkVURVJJT049eQojIENPTkZJR19TMklPIGlzIG5vdCBzZXQKQ09ORklHX05FVF9W
RU5ET1JfTkVUUk9OT01FPXkKIyBDT05GSUdfTkZQIGlzIG5vdCBzZXQKQ09ORklHX05FVF9WRU5E
T1JfODM5MD15CiMgQ09ORklHX1BDTUNJQV9BWE5FVCBpcyBub3Qgc2V0CiMgQ09ORklHX05FMktf
UENJIGlzIG5vdCBzZXQKIyBDT05GSUdfUENNQ0lBX1BDTkVUIGlzIG5vdCBzZXQKQ09ORklHX05F
VF9WRU5ET1JfTlZJRElBPXkKQ09ORklHX0ZPUkNFREVUSD15CkNPTkZJR19ORVRfVkVORE9SX09L
ST15CiMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKQ09ORklHX05FVF9WRU5ET1JfUEFDS0VUX0VO
R0lORVM9eQojIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKIyBDT05GSUdfWUVMTE9XRklOIGlz
IG5vdCBzZXQKQ09ORklHX05FVF9WRU5ET1JfUEVOU0FORE89eQojIENPTkZJR19JT05JQyBpcyBu
b3Qgc2V0CkNPTkZJR19ORVRfVkVORE9SX1FMT0dJQz15CiMgQ09ORklHX1FMQTNYWFggaXMgbm90
IHNldAojIENPTkZJR19RTENOSUMgaXMgbm90IHNldAojIENPTkZJR19ORVRYRU5fTklDIGlzIG5v
dCBzZXQKIyBDT05GSUdfUUVEIGlzIG5vdCBzZXQKQ09ORklHX05FVF9WRU5ET1JfQlJPQ0FERT15
CiMgQ09ORklHX0JOQSBpcyBub3Qgc2V0CkNPTkZJR19ORVRfVkVORE9SX1FVQUxDT01NPXkKIyBD
T05GSUdfUUNBNzAwMF9TUEkgaXMgbm90IHNldAojIENPTkZJR19RQ09NX0VNQUMgaXMgbm90IHNl
dAojIENPTkZJR19STU5FVCBpcyBub3Qgc2V0CkNPTkZJR19ORVRfVkVORE9SX1JEQz15CiMgQ09O
RklHX1I2MDQwIGlzIG5vdCBzZXQKQ09ORklHX05FVF9WRU5ET1JfUkVBTFRFSz15CiMgQ09ORklH
X0FUUCBpcyBub3Qgc2V0CiMgQ09ORklHXzgxMzlDUCBpcyBub3Qgc2V0CkNPTkZJR184MTM5VE9P
PXkKQ09ORklHXzgxMzlUT09fUElPPXkKIyBDT05GSUdfODEzOVRPT19UVU5FX1RXSVNURVIgaXMg
bm90IHNldAojIENPTkZJR184MTM5VE9PXzgxMjkgaXMgbm90IHNldAojIENPTkZJR184MTM5X09M
RF9SWF9SRVNFVCBpcyBub3Qgc2V0CkNPTkZJR19SODE2OT15CkNPTkZJR19ORVRfVkVORE9SX1JF
TkVTQVM9eQpDT05GSUdfTkVUX1ZFTkRPUl9ST0NLRVI9eQpDT05GSUdfTkVUX1ZFTkRPUl9TQU1T
VU5HPXkKIyBDT05GSUdfU1hHQkVfRVRIIGlzIG5vdCBzZXQKQ09ORklHX05FVF9WRU5ET1JfU0VF
UT15CkNPTkZJR19ORVRfVkVORE9SX1NJTEFOPXkKIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0
CkNPTkZJR19ORVRfVkVORE9SX1NJUz15CiMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0CiMgQ09O
RklHX1NJUzE5MCBpcyBub3Qgc2V0CkNPTkZJR19ORVRfVkVORE9SX1NPTEFSRkxBUkU9eQojIENP
TkZJR19TRkMgaXMgbm90IHNldAojIENPTkZJR19TRkNfRkFMQ09OIGlzIG5vdCBzZXQKIyBDT05G
SUdfU0ZDX1NJRU5BIGlzIG5vdCBzZXQKQ09ORklHX05FVF9WRU5ET1JfU01TQz15CiMgQ09ORklH
X1BDTUNJQV9TTUM5MUM5MiBpcyBub3Qgc2V0CiMgQ09ORklHX0VQSUMxMDAgaXMgbm90IHNldAoj
IENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CiMgQ09ORklHX1NNU0M5NDIwIGlzIG5vdCBzZXQK
Q09ORklHX05FVF9WRU5ET1JfU09DSU9ORVhUPXkKQ09ORklHX05FVF9WRU5ET1JfU1RNSUNSTz15
CiMgQ09ORklHX1NUTU1BQ19FVEggaXMgbm90IHNldApDT05GSUdfTkVUX1ZFTkRPUl9TVU49eQoj
IENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAojIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAoj
IENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKQ09ORklH
X05FVF9WRU5ET1JfU1lOT1BTWVM9eQojIENPTkZJR19EV0NfWExHTUFDIGlzIG5vdCBzZXQKQ09O
RklHX05FVF9WRU5ET1JfVEVIVVRJPXkKIyBDT05GSUdfVEVIVVRJIGlzIG5vdCBzZXQKQ09ORklH
X05FVF9WRU5ET1JfVEk9eQojIENPTkZJR19USV9DUFNXX1BIWV9TRUwgaXMgbm90IHNldAojIENP
TkZJR19UTEFOIGlzIG5vdCBzZXQKQ09ORklHX05FVF9WRU5ET1JfVkVSVEVYQ09NPXkKIyBDT05G
SUdfTVNFMTAyWCBpcyBub3Qgc2V0CkNPTkZJR19ORVRfVkVORE9SX1ZJQT15CiMgQ09ORklHX1ZJ
QV9SSElORSBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CkNPTkZJ
R19ORVRfVkVORE9SX1dBTkdYVU49eQojIENPTkZJR19OR0JFIGlzIG5vdCBzZXQKIyBDT05GSUdf
VFhHQkUgaXMgbm90IHNldApDT05GSUdfTkVUX1ZFTkRPUl9XSVpORVQ9eQojIENPTkZJR19XSVpO
RVRfVzUxMDAgaXMgbm90IHNldAojIENPTkZJR19XSVpORVRfVzUzMDAgaXMgbm90IHNldApDT05G
SUdfTkVUX1ZFTkRPUl9YSUxJTlg9eQojIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNl
dAojIENPTkZJR19YSUxJTlhfTExfVEVNQUMgaXMgbm90IHNldApDT05GSUdfTkVUX1ZFTkRPUl9Y
SVJDT009eQojIENPTkZJR19QQ01DSUFfWElSQzJQUyBpcyBub3Qgc2V0CiMgQ09ORklHX0ZEREkg
aXMgbm90IHNldAojIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CiMgQ09ORklHX05FVF9TQjEwMDAg
aXMgbm90IHNldApDT05GSUdfUEhZTElOSz15CkNPTkZJR19QSFlMSUI9eQpDT05GSUdfU1dQSFk9
eQojIENPTkZJR19MRURfVFJJR0dFUl9QSFkgaXMgbm90IHNldApDT05GSUdfUEhZTElCX0xFRFM9
eQpDT05GSUdfRklYRURfUEhZPXkKIyBDT05GSUdfU0ZQIGlzIG5vdCBzZXQKCiMKIyBNSUkgUEhZ
IGRldmljZSBkcml2ZXJzCiMKIyBDT05GSUdfQU1EX1BIWSBpcyBub3Qgc2V0CiMgQ09ORklHX0FE
SU5fUEhZIGlzIG5vdCBzZXQKIyBDT05GSUdfQURJTjExMDBfUEhZIGlzIG5vdCBzZXQKIyBDT05G
SUdfQVFVQU5USUFfUEhZIGlzIG5vdCBzZXQKQ09ORklHX0FYODg3OTZCX1BIWT15CiMgQ09ORklH
X0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CiMgQ09ORklHX0JDTTU0MTQwX1BIWSBpcyBub3Qgc2V0
CiMgQ09ORklHX0JDTTdYWFhfUEhZIGlzIG5vdCBzZXQKIyBDT05GSUdfQkNNODQ4ODFfUEhZIGlz
IG5vdCBzZXQKIyBDT05GSUdfQkNNODdYWF9QSFkgaXMgbm90IHNldAojIENPTkZJR19DSUNBREFf
UEhZIGlzIG5vdCBzZXQKIyBDT05GSUdfQ09SVElOQV9QSFkgaXMgbm90IHNldAojIENPTkZJR19E
QVZJQ09NX1BIWSBpcyBub3Qgc2V0CiMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAojIENP
TkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKIyBDT05GSUdfSU5URUxfWFdBWV9QSFkgaXMgbm90IHNl
dAojIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAojIENPTkZJR19NQVJWRUxMX1BI
WSBpcyBub3Qgc2V0CiMgQ09ORklHX01BUlZFTExfMTBHX1BIWSBpcyBub3Qgc2V0CiMgQ09ORklH
X01BUlZFTExfODhRMlhYWF9QSFkgaXMgbm90IHNldAojIENPTkZJR19NQVJWRUxMXzg4WDIyMjJf
UEhZIGlzIG5vdCBzZXQKIyBDT05GSUdfTUFYTElORUFSX0dQSFkgaXMgbm90IHNldAojIENPTkZJ
R19NRURJQVRFS19HRV9QSFkgaXMgbm90IHNldAojIENPTkZJR19NSUNSRUxfUEhZIGlzIG5vdCBz
ZXQKIyBDT05GSUdfTUlDUk9DSElQX1QxU19QSFkgaXMgbm90IHNldApDT05GSUdfTUlDUk9DSElQ
X1BIWT15CiMgQ09ORklHX01JQ1JPQ0hJUF9UMV9QSFkgaXMgbm90IHNldAojIENPTkZJR19NSUNS
T1NFTUlfUEhZIGlzIG5vdCBzZXQKIyBDT05GSUdfTU9UT1JDT01NX1BIWSBpcyBub3Qgc2V0CiMg
Q09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0CiMgQ09ORklHX05YUF9DQlRYX1BIWSBpcyBu
b3Qgc2V0CiMgQ09ORklHX05YUF9DNDVfVEpBMTFYWF9QSFkgaXMgbm90IHNldAojIENPTkZJR19O
WFBfVEpBMTFYWF9QSFkgaXMgbm90IHNldAojIENPTkZJR19OQ04yNjAwMF9QSFkgaXMgbm90IHNl
dAojIENPTkZJR19BVDgwM1hfUEhZIGlzIG5vdCBzZXQKIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5v
dCBzZXQKQ09ORklHX1JFQUxURUtfUEhZPXkKIyBDT05GSUdfUkVORVNBU19QSFkgaXMgbm90IHNl
dAojIENPTkZJR19ST0NLQ0hJUF9QSFkgaXMgbm90IHNldApDT05GSUdfU01TQ19QSFk9eQojIENP
TkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKIyBDT05GSUdfVEVSQU5FVElDU19QSFkgaXMgbm90IHNl
dAojIENPTkZJR19EUDgzODIyX1BIWSBpcyBub3Qgc2V0CiMgQ09ORklHX0RQODNUQzgxMV9QSFkg
aXMgbm90IHNldAojIENPTkZJR19EUDgzODQ4X1BIWSBpcyBub3Qgc2V0CiMgQ09ORklHX0RQODM4
NjdfUEhZIGlzIG5vdCBzZXQKIyBDT05GSUdfRFA4Mzg2OV9QSFkgaXMgbm90IHNldAojIENPTkZJ
R19EUDgzVEQ1MTBfUEhZIGlzIG5vdCBzZXQKIyBDT05GSUdfRFA4M1RHNzIwX1BIWSBpcyBub3Qg
c2V0CiMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKIyBDT05GSUdfWElMSU5YX0dNSUky
UkdNSUkgaXMgbm90IHNldAojIENPTkZJR19NSUNSRUxfS1M4OTk1TUEgaXMgbm90IHNldAojIENP
TkZJR19QU0VfQ09OVFJPTExFUiBpcyBub3Qgc2V0CkNPTkZJR19DQU5fREVWPXkKIyBDT05GSUdf
Q0FOX1ZDQU4gaXMgbm90IHNldAojIENPTkZJR19DQU5fVlhDQU4gaXMgbm90IHNldAojIENPTkZJ
R19DQU5fTkVUTElOSyBpcyBub3Qgc2V0CiMgQ09ORklHX0NBTl9ERUJVR19ERVZJQ0VTIGlzIG5v
dCBzZXQKQ09ORklHX01ESU9fREVWSUNFPXkKQ09ORklHX01ESU9fQlVTPXkKQ09ORklHX0ZXTk9E
RV9NRElPPXkKQ09ORklHX09GX01ESU89eQpDT05GSUdfQUNQSV9NRElPPXkKQ09ORklHX01ESU9f
REVWUkVTPXkKIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIyBDT05GSUdfTURJT19C
Q01fVU5JTUFDIGlzIG5vdCBzZXQKIyBDT05GSUdfTURJT19ISVNJX0ZFTUFDIGlzIG5vdCBzZXQK
IyBDT05GSUdfTURJT19NVlVTQiBpcyBub3Qgc2V0CiMgQ09ORklHX01ESU9fTVNDQ19NSUlNIGlz
IG5vdCBzZXQKIyBDT05GSUdfTURJT19PQ1RFT04gaXMgbm90IHNldAojIENPTkZJR19NRElPX0lQ
UTQwMTkgaXMgbm90IHNldAojIENPTkZJR19NRElPX0lQUTgwNjQgaXMgbm90IHNldAojIENPTkZJ
R19NRElPX1RIVU5ERVIgaXMgbm90IHNldAoKIwojIE1ESU8gTXVsdGlwbGV4ZXJzCiMKIyBDT05G
SUdfTURJT19CVVNfTVVYX0dQSU8gaXMgbm90IHNldAojIENPTkZJR19NRElPX0JVU19NVVhfTVVM
VElQTEVYRVIgaXMgbm90IHNldAojIENPTkZJR19NRElPX0JVU19NVVhfTU1JT1JFRyBpcyBub3Qg
c2V0CgojCiMgUENTIGRldmljZSBkcml2ZXJzCiMKIyBlbmQgb2YgUENTIGRldmljZSBkcml2ZXJz
CgojIENPTkZJR19QTElQIGlzIG5vdCBzZXQKIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKIyBDT05G
SUdfU0xJUCBpcyBub3Qgc2V0CkNPTkZJR19VU0JfTkVUX0RSSVZFUlM9eQpDT05GSUdfVVNCX0NB
VEM9eQpDT05GSUdfVVNCX0tBV0VUSD15CkNPTkZJR19VU0JfUEVHQVNVUz15CkNPTkZJR19VU0Jf
UlRMODE1MD15CkNPTkZJR19VU0JfUlRMODE1Mj15CkNPTkZJR19VU0JfTEFONzhYWD15CkNPTkZJ
R19VU0JfVVNCTkVUPXkKQ09ORklHX1VTQl9ORVRfQVg4ODE3WD15CkNPTkZJR19VU0JfTkVUX0FY
ODgxNzlfMTc4QT15CkNPTkZJR19VU0JfTkVUX0NEQ0VUSEVSPXkKQ09ORklHX1VTQl9ORVRfQ0RD
X0VFTT15CkNPTkZJR19VU0JfTkVUX0NEQ19OQ009eQpDT05GSUdfVVNCX05FVF9IVUFXRUlfQ0RD
X05DTT15CkNPTkZJR19VU0JfTkVUX0NEQ19NQklNPXkKQ09ORklHX1VTQl9ORVRfRE05NjAxPXkK
Q09ORklHX1VTQl9ORVRfU1I5NzAwPXkKQ09ORklHX1VTQl9ORVRfU1I5ODAwPXkKQ09ORklHX1VT
Ql9ORVRfU01TQzc1WFg9eQpDT05GSUdfVVNCX05FVF9TTVNDOTVYWD15CkNPTkZJR19VU0JfTkVU
X0dMNjIwQT15CkNPTkZJR19VU0JfTkVUX05FVDEwODA9eQpDT05GSUdfVVNCX05FVF9QTFVTQj15
CkNPTkZJR19VU0JfTkVUX01DUzc4MzA9eQpDT05GSUdfVVNCX05FVF9STkRJU19IT1NUPXkKQ09O
RklHX1VTQl9ORVRfQ0RDX1NVQlNFVF9FTkFCTEU9eQpDT05GSUdfVVNCX05FVF9DRENfU1VCU0VU
PXkKQ09ORklHX1VTQl9BTElfTTU2MzI9eQpDT05GSUdfVVNCX0FOMjcyMD15CkNPTkZJR19VU0Jf
QkVMS0lOPXkKQ09ORklHX1VTQl9BUk1MSU5VWD15CkNPTkZJR19VU0JfRVBTT04yODg4PXkKQ09O
RklHX1VTQl9LQzIxOTA9eQpDT05GSUdfVVNCX05FVF9aQVVSVVM9eQpDT05GSUdfVVNCX05FVF9D
WDgyMzEwX0VUSD15CkNPTkZJR19VU0JfTkVUX0tBTE1JQT15CkNPTkZJR19VU0JfTkVUX1FNSV9X
V0FOPXkKQ09ORklHX1VTQl9IU089eQpDT05GSUdfVVNCX05FVF9JTlQ1MVgxPXkKQ09ORklHX1VT
Ql9DRENfUEhPTkVUPXkKQ09ORklHX1VTQl9JUEhFVEg9eQpDT05GSUdfVVNCX1NJRVJSQV9ORVQ9
eQpDT05GSUdfVVNCX1ZMNjAwPXkKQ09ORklHX1VTQl9ORVRfQ0g5MjAwPXkKIyBDT05GSUdfVVNC
X05FVF9BUUMxMTEgaXMgbm90IHNldApDT05GSUdfVVNCX1JUTDgxNTNfRUNNPXkKQ09ORklHX1dM
QU49eQpDT05GSUdfV0xBTl9WRU5ET1JfQURNVEVLPXkKIyBDT05GSUdfQURNODIxMSBpcyBub3Qg
c2V0CkNPTkZJR19BVEhfQ09NTU9OPXkKQ09ORklHX1dMQU5fVkVORE9SX0FUSD15CiMgQ09ORklH
X0FUSF9ERUJVRyBpcyBub3Qgc2V0CiMgQ09ORklHX0FUSDVLIGlzIG5vdCBzZXQKIyBDT05GSUdf
QVRINUtfUENJIGlzIG5vdCBzZXQKQ09ORklHX0FUSDlLX0hXPXkKQ09ORklHX0FUSDlLX0NPTU1P
Tj15CkNPTkZJR19BVEg5S19DT01NT05fREVCVUc9eQpDT05GSUdfQVRIOUtfQlRDT0VYX1NVUFBP
UlQ9eQpDT05GSUdfQVRIOUs9eQojIENPTkZJR19BVEg5S19QQ0kgaXMgbm90IHNldAojIENPTkZJ
R19BVEg5S19BSEIgaXMgbm90IHNldApDT05GSUdfQVRIOUtfREVCVUdGUz15CiMgQ09ORklHX0FU
SDlLX1NUQVRJT05fU1RBVElTVElDUyBpcyBub3Qgc2V0CiMgQ09ORklHX0FUSDlLX0RZTkFDSyBp
cyBub3Qgc2V0CiMgQ09ORklHX0FUSDlLX1dPVyBpcyBub3Qgc2V0CiMgQ09ORklHX0FUSDlLX1JG
S0lMTCBpcyBub3Qgc2V0CiMgQ09ORklHX0FUSDlLX0NIQU5ORUxfQ09OVEVYVCBpcyBub3Qgc2V0
CiMgQ09ORklHX0FUSDlLX1BDT0VNIGlzIG5vdCBzZXQKQ09ORklHX0FUSDlLX0hUQz15CkNPTkZJ
R19BVEg5S19IVENfREVCVUdGUz15CiMgQ09ORklHX0FUSDlLX0hXUk5HIGlzIG5vdCBzZXQKIyBD
T05GSUdfQVRIOUtfQ09NTU9OX1NQRUNUUkFMIGlzIG5vdCBzZXQKQ09ORklHX0NBUkw5MTcwPXkK
Q09ORklHX0NBUkw5MTcwX0xFRFM9eQojIENPTkZJR19DQVJMOTE3MF9ERUJVR0ZTIGlzIG5vdCBz
ZXQKQ09ORklHX0NBUkw5MTcwX1dQQz15CkNPTkZJR19DQVJMOTE3MF9IV1JORz15CkNPTkZJR19B
VEg2S0w9eQojIENPTkZJR19BVEg2S0xfU0RJTyBpcyBub3Qgc2V0CkNPTkZJR19BVEg2S0xfVVNC
PXkKIyBDT05GSUdfQVRINktMX0RFQlVHIGlzIG5vdCBzZXQKIyBDT05GSUdfQVRINktMX1RSQUNJ
TkcgaXMgbm90IHNldApDT05GSUdfQVI1NTIzPXkKIyBDT05GSUdfV0lMNjIxMCBpcyBub3Qgc2V0
CkNPTkZJR19BVEgxMEs9eQpDT05GSUdfQVRIMTBLX0NFPXkKIyBDT05GSUdfQVRIMTBLX1BDSSBp
cyBub3Qgc2V0CiMgQ09ORklHX0FUSDEwS19TRElPIGlzIG5vdCBzZXQKQ09ORklHX0FUSDEwS19V
U0I9eQojIENPTkZJR19BVEgxMEtfREVCVUcgaXMgbm90IHNldAojIENPTkZJR19BVEgxMEtfREVC
VUdGUyBpcyBub3Qgc2V0CiMgQ09ORklHX0FUSDEwS19UUkFDSU5HIGlzIG5vdCBzZXQKIyBDT05G
SUdfV0NOMzZYWCBpcyBub3Qgc2V0CiMgQ09ORklHX0FUSDExSyBpcyBub3Qgc2V0CiMgQ09ORklH
X0FUSDEySyBpcyBub3Qgc2V0CkNPTkZJR19XTEFOX1ZFTkRPUl9BVE1FTD15CkNPTkZJR19BVDc2
QzUwWF9VU0I9eQpDT05GSUdfV0xBTl9WRU5ET1JfQlJPQURDT009eQojIENPTkZJR19CNDMgaXMg
bm90IHNldAojIENPTkZJR19CNDNMRUdBQ1kgaXMgbm90IHNldApDT05GSUdfQlJDTVVUSUw9eQoj
IENPTkZJR19CUkNNU01BQyBpcyBub3Qgc2V0CkNPTkZJR19CUkNNRk1BQz15CkNPTkZJR19CUkNN
Rk1BQ19QUk9UT19CQ0RDPXkKIyBDT05GSUdfQlJDTUZNQUNfU0RJTyBpcyBub3Qgc2V0CkNPTkZJ
R19CUkNNRk1BQ19VU0I9eQojIENPTkZJR19CUkNNRk1BQ19QQ0lFIGlzIG5vdCBzZXQKIyBDT05G
SUdfQlJDTV9UUkFDSU5HIGlzIG5vdCBzZXQKIyBDT05GSUdfQlJDTURCRyBpcyBub3Qgc2V0CkNP
TkZJR19XTEFOX1ZFTkRPUl9JTlRFTD15CiMgQ09ORklHX0lQVzIxMDAgaXMgbm90IHNldAojIENP
TkZJR19JUFcyMjAwIGlzIG5vdCBzZXQKIyBDT05GSUdfSVdMNDk2NSBpcyBub3Qgc2V0CiMgQ09O
RklHX0lXTDM5NDUgaXMgbm90IHNldAojIENPTkZJR19JV0xXSUZJIGlzIG5vdCBzZXQKQ09ORklH
X1dMQU5fVkVORE9SX0lOVEVSU0lMPXkKQ09ORklHX1A1NF9DT01NT049eQpDT05GSUdfUDU0X1VT
Qj15CiMgQ09ORklHX1A1NF9QQ0kgaXMgbm90IHNldAojIENPTkZJR19QNTRfU1BJIGlzIG5vdCBz
ZXQKQ09ORklHX1A1NF9MRURTPXkKQ09ORklHX1dMQU5fVkVORE9SX01BUlZFTEw9eQpDT05GSUdf
TElCRVJUQVM9eQpDT05GSUdfTElCRVJUQVNfVVNCPXkKQ09ORklHX0xJQkVSVEFTX1NESU89eQpD
T05GSUdfTElCRVJUQVNfU1BJPXkKIyBDT05GSUdfTElCRVJUQVNfREVCVUcgaXMgbm90IHNldApD
T05GSUdfTElCRVJUQVNfTUVTSD15CkNPTkZJR19MSUJFUlRBU19USElORklSTT15CiMgQ09ORklH
X0xJQkVSVEFTX1RISU5GSVJNX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX0xJQkVSVEFTX1RISU5G
SVJNX1VTQj15CkNPTkZJR19NV0lGSUVYPXkKIyBDT05GSUdfTVdJRklFWF9TRElPIGlzIG5vdCBz
ZXQKIyBDT05GSUdfTVdJRklFWF9QQ0lFIGlzIG5vdCBzZXQKQ09ORklHX01XSUZJRVhfVVNCPXkK
IyBDT05GSUdfTVdMOEsgaXMgbm90IHNldApDT05GSUdfV0xBTl9WRU5ET1JfTUVESUFURUs9eQpD
T05GSUdfTVQ3NjAxVT15CiMgQ09ORklHX01UNzZ4MFUgaXMgbm90IHNldAojIENPTkZJR19NVDc2
eDBFIGlzIG5vdCBzZXQKIyBDT05GSUdfTVQ3NngyRSBpcyBub3Qgc2V0CiMgQ09ORklHX01UNzZ4
MlUgaXMgbm90IHNldAojIENPTkZJR19NVDc2MDNFIGlzIG5vdCBzZXQKIyBDT05GSUdfTVQ3NjE1
RSBpcyBub3Qgc2V0CiMgQ09ORklHX01UNzY2M1UgaXMgbm90IHNldAojIENPTkZJR19NVDc2NjNT
IGlzIG5vdCBzZXQKIyBDT05GSUdfTVQ3OTE1RSBpcyBub3Qgc2V0CiMgQ09ORklHX01UNzkyMUUg
aXMgbm90IHNldAojIENPTkZJR19NVDc5MjFTIGlzIG5vdCBzZXQKIyBDT05GSUdfTVQ3OTIxVSBp
cyBub3Qgc2V0CiMgQ09ORklHX01UNzk5NkUgaXMgbm90IHNldAojIENPTkZJR19NVDc5MjVFIGlz
IG5vdCBzZXQKIyBDT05GSUdfTVQ3OTI1VSBpcyBub3Qgc2V0CkNPTkZJR19XTEFOX1ZFTkRPUl9N
SUNST0NISVA9eQpDT05GSUdfV0lMQzEwMDA9eQpDT05GSUdfV0lMQzEwMDBfU0RJTz15CiMgQ09O
RklHX1dJTEMxMDAwX1NQSSBpcyBub3Qgc2V0CiMgQ09ORklHX1dJTEMxMDAwX0hXX09PQl9JTlRS
IGlzIG5vdCBzZXQKQ09ORklHX1dMQU5fVkVORE9SX1BVUkVMSUZJPXkKIyBDT05GSUdfUExGWExD
IGlzIG5vdCBzZXQKQ09ORklHX1dMQU5fVkVORE9SX1JBTElOSz15CkNPTkZJR19SVDJYMDA9eQoj
IENPTkZJR19SVDI0MDBQQ0kgaXMgbm90IHNldAojIENPTkZJR19SVDI1MDBQQ0kgaXMgbm90IHNl
dAojIENPTkZJR19SVDYxUENJIGlzIG5vdCBzZXQKIyBDT05GSUdfUlQyODAwUENJIGlzIG5vdCBz
ZXQKQ09ORklHX1JUMjUwMFVTQj15CkNPTkZJR19SVDczVVNCPXkKQ09ORklHX1JUMjgwMFVTQj15
CkNPTkZJR19SVDI4MDBVU0JfUlQzM1hYPXkKQ09ORklHX1JUMjgwMFVTQl9SVDM1WFg9eQpDT05G
SUdfUlQyODAwVVNCX1JUMzU3Mz15CkNPTkZJR19SVDI4MDBVU0JfUlQ1M1hYPXkKQ09ORklHX1JU
MjgwMFVTQl9SVDU1WFg9eQpDT05GSUdfUlQyODAwVVNCX1VOS05PV049eQpDT05GSUdfUlQyODAw
X0xJQj15CkNPTkZJR19SVDJYMDBfTElCX1VTQj15CkNPTkZJR19SVDJYMDBfTElCPXkKQ09ORklH
X1JUMlgwMF9MSUJfRklSTVdBUkU9eQpDT05GSUdfUlQyWDAwX0xJQl9DUllQVE89eQpDT05GSUdf
UlQyWDAwX0xJQl9MRURTPXkKIyBDT05GSUdfUlQyWDAwX0xJQl9ERUJVR0ZTIGlzIG5vdCBzZXQK
IyBDT05GSUdfUlQyWDAwX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX1dMQU5fVkVORE9SX1JFQUxU
RUs9eQojIENPTkZJR19SVEw4MTgwIGlzIG5vdCBzZXQKQ09ORklHX1JUTDgxODc9eQpDT05GSUdf
UlRMODE4N19MRURTPXkKQ09ORklHX1JUTF9DQVJEUz15CkNPTkZJR19SVEw4MTkyQ0U9eQpDT05G
SUdfUlRMODE5MlNFPXkKQ09ORklHX1JUTDgxOTJERT15CkNPTkZJR19SVEw4NzIzQUU9eQpDT05G
SUdfUlRMODcyM0JFPXkKQ09ORklHX1JUTDgxODhFRT15CkNPTkZJR19SVEw4MTkyRUU9eQpDT05G
SUdfUlRMODgyMUFFPXkKQ09ORklHX1JUTDgxOTJDVT15CkNPTkZJR19SVExXSUZJPXkKQ09ORklH
X1JUTFdJRklfUENJPXkKQ09ORklHX1JUTFdJRklfVVNCPXkKIyBDT05GSUdfUlRMV0lGSV9ERUJV
RyBpcyBub3Qgc2V0CkNPTkZJR19SVEw4MTkyQ19DT01NT049eQpDT05GSUdfUlRMODcyM19DT01N
T049eQpDT05GSUdfUlRMQlRDT0VYSVNUPXkKQ09ORklHX1JUTDhYWFhVPXkKQ09ORklHX1JUTDhY
WFhVX1VOVEVTVEVEPXkKIyBDT05GSUdfUlRXODggaXMgbm90IHNldAojIENPTkZJR19SVFc4OSBp
cyBub3Qgc2V0CkNPTkZJR19XTEFOX1ZFTkRPUl9SU0k9eQpDT05GSUdfUlNJXzkxWD15CiMgQ09O
RklHX1JTSV9ERUJVR0ZTIGlzIG5vdCBzZXQKIyBDT05GSUdfUlNJX1NESU8gaXMgbm90IHNldApD
T05GSUdfUlNJX1VTQj15CiMgQ09ORklHX1JTSV9DT0VYIGlzIG5vdCBzZXQKQ09ORklHX1dMQU5f
VkVORE9SX1NJTEFCUz15CiMgQ09ORklHX1dGWCBpcyBub3Qgc2V0CkNPTkZJR19XTEFOX1ZFTkRP
Ul9TVD15CiMgQ09ORklHX0NXMTIwMCBpcyBub3Qgc2V0CkNPTkZJR19XTEFOX1ZFTkRPUl9UST15
CiMgQ09ORklHX1dMMTI1MSBpcyBub3Qgc2V0CiMgQ09ORklHX1dMMTJYWCBpcyBub3Qgc2V0CiMg
Q09ORklHX1dMMThYWCBpcyBub3Qgc2V0CiMgQ09ORklHX1dMQ09SRSBpcyBub3Qgc2V0CkNPTkZJ
R19XTEFOX1ZFTkRPUl9aWURBUz15CkNPTkZJR19aRDEyMTFSVz15CiMgQ09ORklHX1pEMTIxMVJX
X0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX1dMQU5fVkVORE9SX1FVQU5URU5OQT15CiMgQ09ORklH
X1FUTkZNQUNfUENJRSBpcyBub3Qgc2V0CiMgQ09ORklHX01BQzgwMjExX0hXU0lNIGlzIG5vdCBz
ZXQKIyBDT05GSUdfVklSVF9XSUZJIGlzIG5vdCBzZXQKIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQK
Q09ORklHX0lFRUU4MDIxNTRfRFJJVkVSUz15CiMgQ09ORklHX0lFRUU4MDIxNTRfRkFLRUxCIGlz
IG5vdCBzZXQKIyBDT05GSUdfSUVFRTgwMjE1NF9BVDg2UkYyMzAgaXMgbm90IHNldAojIENPTkZJ
R19JRUVFODAyMTU0X01SRjI0SjQwIGlzIG5vdCBzZXQKIyBDT05GSUdfSUVFRTgwMjE1NF9DQzI1
MjAgaXMgbm90IHNldApDT05GSUdfSUVFRTgwMjE1NF9BVFVTQj15CiMgQ09ORklHX0lFRUU4MDIx
NTRfQURGNzI0MiBpcyBub3Qgc2V0CiMgQ09ORklHX0lFRUU4MDIxNTRfQ0E4MjEwIGlzIG5vdCBz
ZXQKIyBDT05GSUdfSUVFRTgwMjE1NF9NQ1IyMEEgaXMgbm90IHNldAojIENPTkZJR19JRUVFODAy
MTU0X0hXU0lNIGlzIG5vdCBzZXQKCiMKIyBXaXJlbGVzcyBXQU4KIwojIENPTkZJR19XV0FOIGlz
IG5vdCBzZXQKIyBlbmQgb2YgV2lyZWxlc3MgV0FOCgojIENPTkZJR19WTVhORVQzIGlzIG5vdCBz
ZXQKIyBDT05GSUdfRlVKSVRTVV9FUyBpcyBub3Qgc2V0CiMgQ09ORklHX05FVERFVlNJTSBpcyBu
b3Qgc2V0CkNPTkZJR19ORVRfRkFJTE9WRVI9eQpDT05GSUdfSVNETj15CkNPTkZJR19JU0ROX0NB
UEk9eQpDT05GSUdfTUlTRE49eQojIENPTkZJR19NSVNETl9EU1AgaXMgbm90IHNldAojIENPTkZJ
R19NSVNETl9MMU9JUCBpcyBub3Qgc2V0CgojCiMgbUlTRE4gaGFyZHdhcmUgZHJpdmVycwojCiMg
Q09ORklHX01JU0ROX0hGQ1BDSSBpcyBub3Qgc2V0CiMgQ09ORklHX01JU0ROX0hGQ01VTFRJIGlz
IG5vdCBzZXQKQ09ORklHX01JU0ROX0hGQ1VTQj15CiMgQ09ORklHX01JU0ROX0FWTUZSSVRaIGlz
IG5vdCBzZXQKIyBDT05GSUdfTUlTRE5fU1BFRURGQVggaXMgbm90IHNldAojIENPTkZJR19NSVNE
Tl9JTkZJTkVPTiBpcyBub3Qgc2V0CiMgQ09ORklHX01JU0ROX1c2NjkyIGlzIG5vdCBzZXQKIyBD
T05GSUdfTUlTRE5fTkVUSkVUIGlzIG5vdCBzZXQKCiMKIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAoj
CkNPTkZJR19JTlBVVD15CkNPTkZJR19JTlBVVF9MRURTPXkKQ09ORklHX0lOUFVUX0ZGX01FTUxF
U1M9eQpDT05GSUdfSU5QVVRfU1BBUlNFS01BUD15CiMgQ09ORklHX0lOUFVUX01BVFJJWEtNQVAg
aXMgbm90IHNldApDT05GSUdfSU5QVVRfVklWQUxESUZNQVA9eQoKIwojIFVzZXJsYW5kIGludGVy
ZmFjZXMKIwojIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CiMgQ09ORklHX0lOUFVU
X0pPWURFViBpcyBub3Qgc2V0CkNPTkZJR19JTlBVVF9FVkRFVj15CiMgQ09ORklHX0lOUFVUX0VW
QlVHIGlzIG5vdCBzZXQKCiMKIyBJbnB1dCBEZXZpY2UgRHJpdmVycwojCkNPTkZJR19JTlBVVF9L
RVlCT0FSRD15CiMgQ09ORklHX0tFWUJPQVJEX0FEQyBpcyBub3Qgc2V0CiMgQ09ORklHX0tFWUJP
QVJEX0FEUDU1ODggaXMgbm90IHNldAojIENPTkZJR19LRVlCT0FSRF9BRFA1NTg5IGlzIG5vdCBz
ZXQKQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKIyBDT05GSUdfS0VZQk9BUkRfUVQxMDUwIGlzIG5v
dCBzZXQKIyBDT05GSUdfS0VZQk9BUkRfUVQxMDcwIGlzIG5vdCBzZXQKIyBDT05GSUdfS0VZQk9B
UkRfUVQyMTYwIGlzIG5vdCBzZXQKIyBDT05GSUdfS0VZQk9BUkRfRExJTktfRElSNjg1IGlzIG5v
dCBzZXQKIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAojIENPTkZJR19LRVlCT0FS
RF9HUElPIGlzIG5vdCBzZXQKIyBDT05GSUdfS0VZQk9BUkRfR1BJT19QT0xMRUQgaXMgbm90IHNl
dAojIENPTkZJR19LRVlCT0FSRF9UQ0E2NDE2IGlzIG5vdCBzZXQKIyBDT05GSUdfS0VZQk9BUkRf
VENBODQxOCBpcyBub3Qgc2V0CiMgQ09ORklHX0tFWUJPQVJEX01BVFJJWCBpcyBub3Qgc2V0CiMg
Q09ORklHX0tFWUJPQVJEX0xNODMyMyBpcyBub3Qgc2V0CiMgQ09ORklHX0tFWUJPQVJEX0xNODMz
MyBpcyBub3Qgc2V0CiMgQ09ORklHX0tFWUJPQVJEX01BWDczNTkgaXMgbm90IHNldAojIENPTkZJ
R19LRVlCT0FSRF9NQ1MgaXMgbm90IHNldAojIENPTkZJR19LRVlCT0FSRF9NUFIxMjEgaXMgbm90
IHNldAojIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAojIENPTkZJR19LRVlCT0FS
RF9PUEVOQ09SRVMgaXMgbm90IHNldAojIENPTkZJR19LRVlCT0FSRF9QSU5FUEhPTkUgaXMgbm90
IHNldAojIENPTkZJR19LRVlCT0FSRF9TQU1TVU5HIGlzIG5vdCBzZXQKIyBDT05GSUdfS0VZQk9B
UkRfU1RPV0FXQVkgaXMgbm90IHNldAojIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNl
dAojIENPTkZJR19LRVlCT0FSRF9PTUFQNCBpcyBub3Qgc2V0CiMgQ09ORklHX0tFWUJPQVJEX1RN
Ml9UT1VDSEtFWSBpcyBub3Qgc2V0CiMgQ09ORklHX0tFWUJPQVJEX1RXTDQwMzAgaXMgbm90IHNl
dAojIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiMgQ09ORklHX0tFWUJPQVJEX0NB
UDExWFggaXMgbm90IHNldAojIENPTkZJR19LRVlCT0FSRF9CQ00gaXMgbm90IHNldAojIENPTkZJ
R19LRVlCT0FSRF9DWVBSRVNTX1NGIGlzIG5vdCBzZXQKQ09ORklHX0lOUFVUX01PVVNFPXkKQ09O
RklHX01PVVNFX1BTMj15CkNPTkZJR19NT1VTRV9QUzJfQUxQUz15CkNPTkZJR19NT1VTRV9QUzJf
QllEPXkKQ09ORklHX01PVVNFX1BTMl9MT0dJUFMyUFA9eQpDT05GSUdfTU9VU0VfUFMyX1NZTkFQ
VElDUz15CkNPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTX1NNQlVTPXkKQ09ORklHX01PVVNFX1BT
Ml9DWVBSRVNTPXkKQ09ORklHX01PVVNFX1BTMl9MSUZFQk9PSz15CkNPTkZJR19NT1VTRV9QUzJf
VFJBQ0tQT0lOVD15CiMgQ09ORklHX01PVVNFX1BTMl9FTEFOVEVDSCBpcyBub3Qgc2V0CiMgQ09O
RklHX01PVVNFX1BTMl9TRU5URUxJQyBpcyBub3Qgc2V0CiMgQ09ORklHX01PVVNFX1BTMl9UT1VD
SEtJVCBpcyBub3Qgc2V0CkNPTkZJR19NT1VTRV9QUzJfRk9DQUxURUNIPXkKIyBDT05GSUdfTU9V
U0VfUFMyX1ZNTU9VU0UgaXMgbm90IHNldApDT05GSUdfTU9VU0VfUFMyX1NNQlVTPXkKIyBDT05G
SUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKQ09ORklHX01PVVNFX0FQUExFVE9VQ0g9eQpDT05G
SUdfTU9VU0VfQkNNNTk3ND15CiMgQ09ORklHX01PVVNFX0NZQVBBIGlzIG5vdCBzZXQKIyBDT05G
SUdfTU9VU0VfRUxBTl9JMkMgaXMgbm90IHNldAojIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5v
dCBzZXQKIyBDT05GSUdfTU9VU0VfR1BJTyBpcyBub3Qgc2V0CiMgQ09ORklHX01PVVNFX1NZTkFQ
VElDU19JMkMgaXMgbm90IHNldApDT05GSUdfTU9VU0VfU1lOQVBUSUNTX1VTQj15CkNPTkZJR19J
TlBVVF9KT1lTVElDSz15CiMgQ09ORklHX0pPWVNUSUNLX0FOQUxPRyBpcyBub3Qgc2V0CiMgQ09O
RklHX0pPWVNUSUNLX0EzRCBpcyBub3Qgc2V0CiMgQ09ORklHX0pPWVNUSUNLX0FEQyBpcyBub3Qg
c2V0CiMgQ09ORklHX0pPWVNUSUNLX0FESSBpcyBub3Qgc2V0CiMgQ09ORklHX0pPWVNUSUNLX0NP
QlJBIGlzIG5vdCBzZXQKIyBDT05GSUdfSk9ZU1RJQ0tfR0YySyBpcyBub3Qgc2V0CiMgQ09ORklH
X0pPWVNUSUNLX0dSSVAgaXMgbm90IHNldAojIENPTkZJR19KT1lTVElDS19HUklQX01QIGlzIG5v
dCBzZXQKIyBDT05GSUdfSk9ZU1RJQ0tfR1VJTExFTU9UIGlzIG5vdCBzZXQKIyBDT05GSUdfSk9Z
U1RJQ0tfSU5URVJBQ1QgaXMgbm90IHNldAojIENPTkZJR19KT1lTVElDS19TSURFV0lOREVSIGlz
IG5vdCBzZXQKIyBDT05GSUdfSk9ZU1RJQ0tfVE1EQyBpcyBub3Qgc2V0CkNPTkZJR19KT1lTVElD
S19JRk9SQ0U9eQpDT05GSUdfSk9ZU1RJQ0tfSUZPUkNFX1VTQj15CiMgQ09ORklHX0pPWVNUSUNL
X0lGT1JDRV8yMzIgaXMgbm90IHNldAojIENPTkZJR19KT1lTVElDS19XQVJSSU9SIGlzIG5vdCBz
ZXQKIyBDT05GSUdfSk9ZU1RJQ0tfTUFHRUxMQU4gaXMgbm90IHNldAojIENPTkZJR19KT1lTVElD
S19TUEFDRU9SQiBpcyBub3Qgc2V0CiMgQ09ORklHX0pPWVNUSUNLX1NQQUNFQkFMTCBpcyBub3Qg
c2V0CiMgQ09ORklHX0pPWVNUSUNLX1NUSU5HRVIgaXMgbm90IHNldAojIENPTkZJR19KT1lTVElD
S19UV0lESk9ZIGlzIG5vdCBzZXQKIyBDT05GSUdfSk9ZU1RJQ0tfWkhFTkhVQSBpcyBub3Qgc2V0
CiMgQ09ORklHX0pPWVNUSUNLX0RCOSBpcyBub3Qgc2V0CiMgQ09ORklHX0pPWVNUSUNLX0dBTUVD
T04gaXMgbm90IHNldAojIENPTkZJR19KT1lTVElDS19UVVJCT0dSQUZYIGlzIG5vdCBzZXQKIyBD
T05GSUdfSk9ZU1RJQ0tfQVM1MDExIGlzIG5vdCBzZXQKIyBDT05GSUdfSk9ZU1RJQ0tfSk9ZRFVN
UCBpcyBub3Qgc2V0CkNPTkZJR19KT1lTVElDS19YUEFEPXkKQ09ORklHX0pPWVNUSUNLX1hQQURf
RkY9eQpDT05GSUdfSk9ZU1RJQ0tfWFBBRF9MRURTPXkKIyBDT05GSUdfSk9ZU1RJQ0tfV0FMS0VS
QTA3MDEgaXMgbm90IHNldAojIENPTkZJR19KT1lTVElDS19QU1hQQURfU1BJIGlzIG5vdCBzZXQK
IyBDT05GSUdfSk9ZU1RJQ0tfUFhSQyBpcyBub3Qgc2V0CiMgQ09ORklHX0pPWVNUSUNLX1FXSUlD
IGlzIG5vdCBzZXQKIyBDT05GSUdfSk9ZU1RJQ0tfRlNJQTZCIGlzIG5vdCBzZXQKIyBDT05GSUdf
Sk9ZU1RJQ0tfU0VOU0VIQVQgaXMgbm90IHNldAojIENPTkZJR19KT1lTVElDS19TRUVTQVcgaXMg
bm90IHNldApDT05GSUdfSU5QVVRfVEFCTEVUPXkKQ09ORklHX1RBQkxFVF9VU0JfQUNFQ0FEPXkK
Q09ORklHX1RBQkxFVF9VU0JfQUlQVEVLPXkKQ09ORklHX1RBQkxFVF9VU0JfSEFOV0FORz15CkNP
TkZJR19UQUJMRVRfVVNCX0tCVEFCPXkKQ09ORklHX1RBQkxFVF9VU0JfUEVHQVNVUz15CiMgQ09O
RklHX1RBQkxFVF9TRVJJQUxfV0FDT000IGlzIG5vdCBzZXQKQ09ORklHX0lOUFVUX1RPVUNIU0NS
RUVOPXkKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0NiBpcyBub3Qgc2V0CiMgQ09ORklHX1RP
VUNIU0NSRUVOX0FENzg3NyBpcyBub3Qgc2V0CiMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OSBp
cyBub3Qgc2V0CiMgQ09ORklHX1RPVUNIU0NSRUVOX0FEQyBpcyBub3Qgc2V0CiMgQ09ORklHX1RP
VUNIU0NSRUVOX0FSMTAyMV9JMkMgaXMgbm90IHNldAojIENPTkZJR19UT1VDSFNDUkVFTl9BVE1F
TF9NWFQgaXMgbm90IHNldAojIENPTkZJR19UT1VDSFNDUkVFTl9BVU9fUElYQ0lSIGlzIG5vdCBz
ZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQlUyMTAxMyBpcyBub3Qgc2V0CiMgQ09ORklHX1RPVUNI
U0NSRUVOX0JVMjEwMjkgaXMgbm90IHNldAojIENPTkZJR19UT1VDSFNDUkVFTl9DSElQT05FX0lD
TjgzMTggaXMgbm90IHNldAojIENPTkZJR19UT1VDSFNDUkVFTl9DSElQT05FX0lDTjg1MDUgaXMg
bm90IHNldAojIENPTkZJR19UT1VDSFNDUkVFTl9DWThDVE1BMTQwIGlzIG5vdCBzZXQKIyBDT05G
SUdfVE9VQ0hTQ1JFRU5fQ1k4Q1RNRzExMCBpcyBub3Qgc2V0CiMgQ09ORklHX1RPVUNIU0NSRUVO
X0NZVFRTUF9DT1JFIGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQ1lUVFNQNF9DT1JF
IGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQ1lUVFNQNSBpcyBub3Qgc2V0CiMgQ09O
RklHX1RPVUNIU0NSRUVOX0RZTkFQUk8gaXMgbm90IHNldAojIENPTkZJR19UT1VDSFNDUkVFTl9I
QU1QU0hJUkUgaXMgbm90IHNldAojIENPTkZJR19UT1VDSFNDUkVFTl9FRVRJIGlzIG5vdCBzZXQK
IyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUdBTEFYIGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JF
RU5fRUdBTEFYX1NFUklBTCBpcyBub3Qgc2V0CiMgQ09ORklHX1RPVUNIU0NSRUVOX0VYQzMwMDAg
aXMgbm90IHNldAojIENPTkZJR19UT1VDSFNDUkVFTl9GVUpJVFNVIGlzIG5vdCBzZXQKIyBDT05G
SUdfVE9VQ0hTQ1JFRU5fR09PRElYIGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fSElE
RUVQIGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fSFlDT05fSFk0NlhYIGlzIG5vdCBz
ZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fSFlOSVRST05fQ1NUWFhYIGlzIG5vdCBzZXQKIyBDT05G
SUdfVE9VQ0hTQ1JFRU5fSUxJMjEwWCBpcyBub3Qgc2V0CiMgQ09ORklHX1RPVUNIU0NSRUVOX0lM
SVRFSyBpcyBub3Qgc2V0CiMgQ09ORklHX1RPVUNIU0NSRUVOX1M2U1k3NjEgaXMgbm90IHNldAoj
IENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0CiMgQ09ORklHX1RPVUNIU0NSRUVO
X0VLVEYyMTI3IGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUxBTiBpcyBub3Qgc2V0
CiMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0CiMgQ09ORklHX1RPVUNIU0NSRUVO
X1dBQ09NX1c4MDAxIGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fV0FDT01fSTJDIGlz
IG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUFYMTE4MDEgaXMgbm90IHNldAojIENPTkZJ
R19UT1VDSFNDUkVFTl9NQ1M1MDAwIGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTU1T
MTE0IGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUVMRkFTX01JUDQgaXMgbm90IHNl
dAojIENPTkZJR19UT1VDSFNDUkVFTl9NU0cyNjM4IGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hT
Q1JFRU5fTVRPVUNIIGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTk9WQVRFS19OVlRf
VFMgaXMgbm90IHNldAojIENPTkZJR19UT1VDSFNDUkVFTl9JTUFHSVMgaXMgbm90IHNldAojIENP
TkZJR19UT1VDSFNDUkVFTl9JTVg2VUxfVFNDIGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JF
RU5fSU5FWElPIGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUEVOTU9VTlQgaXMgbm90
IHNldAojIENPTkZJR19UT1VDSFNDUkVFTl9FRFRfRlQ1WDA2IGlzIG5vdCBzZXQKIyBDT05GSUdf
VE9VQ0hTQ1JFRU5fVE9VQ0hSSUdIVCBpcyBub3Qgc2V0CiMgQ09ORklHX1RPVUNIU0NSRUVOX1RP
VUNIV0lOIGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUElYQ0lSIGlzIG5vdCBzZXQK
IyBDT05GSUdfVE9VQ0hTQ1JFRU5fV0RUODdYWF9JMkMgaXMgbm90IHNldApDT05GSUdfVE9VQ0hT
Q1JFRU5fVVNCX0NPTVBPU0lURT15CkNPTkZJR19UT1VDSFNDUkVFTl9VU0JfRUdBTEFYPXkKQ09O
RklHX1RPVUNIU0NSRUVOX1VTQl9QQU5KSVQ9eQpDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCXzNNPXkK
Q09ORklHX1RPVUNIU0NSRUVOX1VTQl9JVE09eQpDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0VUVVJC
Tz15CkNPTkZJR19UT1VDSFNDUkVFTl9VU0JfR1VOWkU9eQpDT05GSUdfVE9VQ0hTQ1JFRU5fVVNC
X0RNQ19UU0MxMD15CkNPTkZJR19UT1VDSFNDUkVFTl9VU0JfSVJUT1VDSD15CkNPTkZJR19UT1VD
SFNDUkVFTl9VU0JfSURFQUxURUs9eQpDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0dFTkVSQUxfVE9V
Q0g9eQpDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0dPVE9QPXkKQ09ORklHX1RPVUNIU0NSRUVOX1VT
Ql9KQVNURUM9eQpDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0VMTz15CkNPTkZJR19UT1VDSFNDUkVF
Tl9VU0JfRTJJPXkKQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9aWVRST05JQz15CkNPTkZJR19UT1VD
SFNDUkVFTl9VU0JfRVRUX1RDNDVVU0I9eQpDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX05FWElPPXkK
Q09ORklHX1RPVUNIU0NSRUVOX1VTQl9FQVNZVE9VQ0g9eQojIENPTkZJR19UT1VDSFNDUkVFTl9U
T1VDSElUMjEzIGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVFNDX1NFUklPIGlzIG5v
dCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVFNDMjAwNCBpcyBub3Qgc2V0CiMgQ09ORklHX1RP
VUNIU0NSRUVOX1RTQzIwMDUgaXMgbm90IHNldAojIENPTkZJR19UT1VDSFNDUkVFTl9UU0MyMDA3
IGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUk1fVFMgaXMgbm90IHNldAojIENPTkZJ
R19UT1VDSFNDUkVFTl9TSUxFQUQgaXMgbm90IHNldAojIENPTkZJR19UT1VDSFNDUkVFTl9TSVNf
STJDIGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fU1QxMjMyIGlzIG5vdCBzZXQKIyBD
T05GSUdfVE9VQ0hTQ1JFRU5fU1RNRlRTIGlzIG5vdCBzZXQKQ09ORklHX1RPVUNIU0NSRUVOX1NV
UjQwPXkKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fU1VSRkFDRTNfU1BJIGlzIG5vdCBzZXQKIyBDT05G
SUdfVE9VQ0hTQ1JFRU5fU1g4NjU0IGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVFBT
NjUwN1ggaXMgbm90IHNldAojIENPTkZJR19UT1VDSFNDUkVFTl9aRVQ2MjIzIGlzIG5vdCBzZXQK
IyBDT05GSUdfVE9VQ0hTQ1JFRU5fWkZPUkNFIGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JF
RU5fQ09MSUJSSV9WRjUwIGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUk9ITV9CVTIx
MDIzIGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fSVFTNVhYIGlzIG5vdCBzZXQKIyBD
T05GSUdfVE9VQ0hTQ1JFRU5fSVFTNzIxMSBpcyBub3Qgc2V0CiMgQ09ORklHX1RPVUNIU0NSRUVO
X1pJTklUSVggaXMgbm90IHNldAojIENPTkZJR19UT1VDSFNDUkVFTl9ISU1BWF9IWDgzMTEyQiBp
cyBub3Qgc2V0CkNPTkZJR19JTlBVVF9NSVNDPXkKIyBDT05GSUdfSU5QVVRfQUQ3MTRYIGlzIG5v
dCBzZXQKIyBDT05GSUdfSU5QVVRfQVRNRUxfQ0FQVE9VQ0ggaXMgbm90IHNldAojIENPTkZJR19J
TlBVVF9CTUExNTAgaXMgbm90IHNldAojIENPTkZJR19JTlBVVF9FM1gwX0JVVFRPTiBpcyBub3Qg
c2V0CiMgQ09ORklHX0lOUFVUX1BDU1BLUiBpcyBub3Qgc2V0CiMgQ09ORklHX0lOUFVUX01NQTg0
NTAgaXMgbm90IHNldAojIENPTkZJR19JTlBVVF9BUEFORUwgaXMgbm90IHNldAojIENPTkZJR19J
TlBVVF9HUElPX0JFRVBFUiBpcyBub3Qgc2V0CiMgQ09ORklHX0lOUFVUX0dQSU9fREVDT0RFUiBp
cyBub3Qgc2V0CiMgQ09ORklHX0lOUFVUX0dQSU9fVklCUkEgaXMgbm90IHNldAojIENPTkZJR19J
TlBVVF9BVExBU19CVE5TIGlzIG5vdCBzZXQKQ09ORklHX0lOUFVUX0FUSV9SRU1PVEUyPXkKQ09O
RklHX0lOUFVUX0tFWVNQQU5fUkVNT1RFPXkKIyBDT05GSUdfSU5QVVRfS1hUSjkgaXMgbm90IHNl
dApDT05GSUdfSU5QVVRfUE9XRVJNQVRFPXkKQ09ORklHX0lOUFVUX1lFQUxJTks9eQpDT05GSUdf
SU5QVVRfQ00xMDk9eQojIENPTkZJR19JTlBVVF9SRUdVTEFUT1JfSEFQVElDIGlzIG5vdCBzZXQK
IyBDT05GSUdfSU5QVVRfUkVUVV9QV1JCVVRUT04gaXMgbm90IHNldAojIENPTkZJR19JTlBVVF9U
V0w0MDMwX1BXUkJVVFRPTiBpcyBub3Qgc2V0CiMgQ09ORklHX0lOUFVUX1RXTDQwMzBfVklCUkEg
aXMgbm90IHNldAojIENPTkZJR19JTlBVVF9VSU5QVVQgaXMgbm90IHNldAojIENPTkZJR19JTlBV
VF9QQ0Y4NTc0IGlzIG5vdCBzZXQKIyBDT05GSUdfSU5QVVRfR1BJT19ST1RBUllfRU5DT0RFUiBp
cyBub3Qgc2V0CiMgQ09ORklHX0lOUFVUX0RBNzI4MF9IQVBUSUNTIGlzIG5vdCBzZXQKIyBDT05G
SUdfSU5QVVRfQURYTDM0WCBpcyBub3Qgc2V0CkNPTkZJR19JTlBVVF9JTVNfUENVPXkKIyBDT05G
SUdfSU5QVVRfSVFTMjY5QSBpcyBub3Qgc2V0CiMgQ09ORklHX0lOUFVUX0lRUzYyNkEgaXMgbm90
IHNldAojIENPTkZJR19JTlBVVF9JUVM3MjIyIGlzIG5vdCBzZXQKIyBDT05GSUdfSU5QVVRfQ01B
MzAwMCBpcyBub3Qgc2V0CiMgQ09ORklHX0lOUFVUX0lERUFQQURfU0xJREVCQVIgaXMgbm90IHNl
dAojIENPTkZJR19JTlBVVF9EUlYyNjBYX0hBUFRJQ1MgaXMgbm90IHNldAojIENPTkZJR19JTlBV
VF9EUlYyNjY1X0hBUFRJQ1MgaXMgbm90IHNldAojIENPTkZJR19JTlBVVF9EUlYyNjY3X0hBUFRJ
Q1MgaXMgbm90IHNldApDT05GSUdfUk1JNF9DT1JFPXkKIyBDT05GSUdfUk1JNF9JMkMgaXMgbm90
IHNldAojIENPTkZJR19STUk0X1NQSSBpcyBub3Qgc2V0CiMgQ09ORklHX1JNSTRfU01CIGlzIG5v
dCBzZXQKQ09ORklHX1JNSTRfRjAzPXkKQ09ORklHX1JNSTRfRjAzX1NFUklPPXkKQ09ORklHX1JN
STRfMkRfU0VOU09SPXkKQ09ORklHX1JNSTRfRjExPXkKQ09ORklHX1JNSTRfRjEyPXkKQ09ORklH
X1JNSTRfRjMwPXkKIyBDT05GSUdfUk1JNF9GMzQgaXMgbm90IHNldAojIENPTkZJR19STUk0X0Yz
QSBpcyBub3Qgc2V0CiMgQ09ORklHX1JNSTRfRjU0IGlzIG5vdCBzZXQKIyBDT05GSUdfUk1JNF9G
NTUgaXMgbm90IHNldAoKIwojIEhhcmR3YXJlIEkvTyBwb3J0cwojCkNPTkZJR19TRVJJTz15CkNP
TkZJR19BUkNIX01JR0hUX0hBVkVfUENfU0VSSU89eQpDT05GSUdfU0VSSU9fSTgwNDI9eQpDT05G
SUdfU0VSSU9fU0VSUE9SVD15CiMgQ09ORklHX1NFUklPX0NUODJDNzEwIGlzIG5vdCBzZXQKIyBD
T05GSUdfU0VSSU9fUEFSS0JEIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5v
dCBzZXQKQ09ORklHX1NFUklPX0xJQlBTMj15CiMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0
CiMgQ09ORklHX1NFUklPX0FMVEVSQV9QUzIgaXMgbm90IHNldAojIENPTkZJR19TRVJJT19QUzJN
VUxUIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VSSU9fQVJDX1BTMiBpcyBub3Qgc2V0CiMgQ09ORklH
X1NFUklPX0FQQlBTMiBpcyBub3Qgc2V0CiMgQ09ORklHX1NFUklPX0dQSU9fUFMyIGlzIG5vdCBz
ZXQKIyBDT05GSUdfVVNFUklPIGlzIG5vdCBzZXQKIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNl
dAojIGVuZCBvZiBIYXJkd2FyZSBJL08gcG9ydHMKIyBlbmQgb2YgSW5wdXQgZGV2aWNlIHN1cHBv
cnQKCiMKIyBDaGFyYWN0ZXIgZGV2aWNlcwojCkNPTkZJR19UVFk9eQpDT05GSUdfVlQ9eQpDT05G
SUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQpDT05GSUdfVlRfQ09OU09MRT15CkNPTkZJR19WVF9D
T05TT0xFX1NMRUVQPXkKQ09ORklHX0hXX0NPTlNPTEU9eQojIENPTkZJR19WVF9IV19DT05TT0xF
X0JJTkRJTkcgaXMgbm90IHNldApDT05GSUdfVU5JWDk4X1BUWVM9eQojIENPTkZJR19MRUdBQ1lf
UFRZUyBpcyBub3Qgc2V0CkNPTkZJR19MRUdBQ1lfVElPQ1NUST15CkNPTkZJR19MRElTQ19BVVRP
TE9BRD15CgojCiMgU2VyaWFsIGRyaXZlcnMKIwpDT05GSUdfU0VSSUFMX0VBUkxZQ09OPXkKQ09O
RklHX1NFUklBTF84MjUwPXkKQ09ORklHX1NFUklBTF84MjUwX0RFUFJFQ0FURURfT1BUSU9OUz15
CkNPTkZJR19TRVJJQUxfODI1MF9QTlA9eQojIENPTkZJR19TRVJJQUxfODI1MF8xNjU1MEFfVkFS
SUFOVFMgaXMgbm90IHNldAojIENPTkZJR19TRVJJQUxfODI1MF9GSU5URUsgaXMgbm90IHNldApD
T05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CkNPTkZJR19TRVJJQUxfODI1MF9ETUE9eQpDT05G
SUdfU0VSSUFMXzgyNTBfUENJTElCPXkKQ09ORklHX1NFUklBTF84MjUwX1BDST15CkNPTkZJR19T
RVJJQUxfODI1MF9FWEFSPXkKIyBDT05GSUdfU0VSSUFMXzgyNTBfQ1MgaXMgbm90IHNldApDT05G
SUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MzIKQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFS
VFM9NApDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQpDT05GSUdfU0VSSUFMXzgyNTBfTUFO
WV9QT1JUUz15CiMgQ09ORklHX1NFUklBTF84MjUwX1BDSTFYWFhYIGlzIG5vdCBzZXQKQ09ORklH
X1NFUklBTF84MjUwX1NIQVJFX0lSUT15CkNPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRPXkK
Q09ORklHX1NFUklBTF84MjUwX1JTQT15CkNPTkZJR19TRVJJQUxfODI1MF9EV0xJQj15CiMgQ09O
RklHX1NFUklBTF84MjUwX0RXIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VSSUFMXzgyNTBfUlQyODhY
IGlzIG5vdCBzZXQKQ09ORklHX1NFUklBTF84MjUwX0xQU1M9eQpDT05GSUdfU0VSSUFMXzgyNTBf
TUlEPXkKQ09ORklHX1NFUklBTF84MjUwX1BFUklDT009eQojIENPTkZJR19TRVJJQUxfT0ZfUExB
VEZPUk0gaXMgbm90IHNldAoKIwojIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKIwojIENP
TkZJR19TRVJJQUxfTUFYMzEwMCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFUklBTF9NQVgzMTBYIGlz
IG5vdCBzZXQKIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKQ09ORklHX1NFUklB
TF9DT1JFPXkKQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQojIENPTkZJR19TRVJJQUxfSlNN
IGlzIG5vdCBzZXQKIyBDT05GSUdfU0VSSUFMX1NJRklWRSBpcyBub3Qgc2V0CiMgQ09ORklHX1NF
UklBTF9MQU5USVEgaXMgbm90IHNldAojIENPTkZJR19TRVJJQUxfU0NDTlhQIGlzIG5vdCBzZXQK
IyBDT05GSUdfU0VSSUFMX1NDMTZJUzdYWCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFUklBTF9BTFRF
UkFfSlRBR1VBUlQgaXMgbm90IHNldAojIENPTkZJR19TRVJJQUxfQUxURVJBX1VBUlQgaXMgbm90
IHNldAojIENPTkZJR19TRVJJQUxfWElMSU5YX1BTX1VBUlQgaXMgbm90IHNldAojIENPTkZJR19T
RVJJQUxfQVJDIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VSSUFMX1JQMiBpcyBub3Qgc2V0CiMgQ09O
RklHX1NFUklBTF9GU0xfTFBVQVJUIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VSSUFMX0ZTTF9MSU5G
TEVYVUFSVCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFUklBTF9DT05FWEFOVF9ESUdJQ09MT1IgaXMg
bm90IHNldAojIENPTkZJR19TRVJJQUxfU1BSRCBpcyBub3Qgc2V0CiMgZW5kIG9mIFNlcmlhbCBk
cml2ZXJzCgpDT05GSUdfU0VSSUFMX01DVFJMX0dQSU89eQpDT05GSUdfU0VSSUFMX05PTlNUQU5E
QVJEPXkKIyBDT05GSUdfTU9YQV9JTlRFTExJTyBpcyBub3Qgc2V0CiMgQ09ORklHX01PWEFfU01B
UlRJTyBpcyBub3Qgc2V0CiMgQ09ORklHX05fSERMQyBpcyBub3Qgc2V0CiMgQ09ORklHX0lQV0lS
RUxFU1MgaXMgbm90IHNldAojIENPTkZJR19OX0dTTSBpcyBub3Qgc2V0CiMgQ09ORklHX05PWk9N
SSBpcyBub3Qgc2V0CiMgQ09ORklHX05VTExfVFRZIGlzIG5vdCBzZXQKQ09ORklHX0hWQ19EUklW
RVI9eQojIENPTkZJR19TRVJJQUxfREVWX0JVUyBpcyBub3Qgc2V0CiMgQ09ORklHX1RUWV9QUklO
VEsgaXMgbm90IHNldAojIENPTkZJR19QUklOVEVSIGlzIG5vdCBzZXQKIyBDT05GSUdfUFBERVYg
aXMgbm90IHNldApDT05GSUdfVklSVElPX0NPTlNPTEU9eQojIENPTkZJR19JUE1JX0hBTkRMRVIg
aXMgbm90IHNldApDT05GSUdfSFdfUkFORE9NPXkKIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9N
RU0gaXMgbm90IHNldAojIENPTkZJR19IV19SQU5ET01fSU5URUwgaXMgbm90IHNldAojIENPTkZJ
R19IV19SQU5ET01fQU1EIGlzIG5vdCBzZXQKIyBDT05GSUdfSFdfUkFORE9NX0JBNDMxIGlzIG5v
dCBzZXQKIyBDT05GSUdfSFdfUkFORE9NX1ZJQSBpcyBub3Qgc2V0CkNPTkZJR19IV19SQU5ET01f
VklSVElPPXkKIyBDT05GSUdfSFdfUkFORE9NX0NDVFJORyBpcyBub3Qgc2V0CiMgQ09ORklHX0hX
X1JBTkRPTV9YSVBIRVJBIGlzIG5vdCBzZXQKIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAoj
IENPTkZJR19NV0FWRSBpcyBub3Qgc2V0CiMgQ09ORklHX0RFVk1FTSBpcyBub3Qgc2V0CkNPTkZJ
R19OVlJBTT15CiMgQ09ORklHX0RFVlBPUlQgaXMgbm90IHNldApDT05GSUdfSFBFVD15CiMgQ09O
RklHX0hQRVRfTU1BUCBpcyBub3Qgc2V0CiMgQ09ORklHX0hBTkdDSEVDS19USU1FUiBpcyBub3Qg
c2V0CkNPTkZJR19UQ0dfVFBNPXkKIyBDT05GSUdfSFdfUkFORE9NX1RQTSBpcyBub3Qgc2V0CkNP
TkZJR19UQ0dfVElTX0NPUkU9eQpDT05GSUdfVENHX1RJUz15CiMgQ09ORklHX1RDR19USVNfU1BJ
IGlzIG5vdCBzZXQKIyBDT05GSUdfVENHX1RJU19JMkMgaXMgbm90IHNldAojIENPTkZJR19UQ0df
VElTX0kyQ19DUjUwIGlzIG5vdCBzZXQKIyBDT05GSUdfVENHX1RJU19JMkNfQVRNRUwgaXMgbm90
IHNldAojIENPTkZJR19UQ0dfVElTX0kyQ19JTkZJTkVPTiBpcyBub3Qgc2V0CiMgQ09ORklHX1RD
R19USVNfSTJDX05VVk9UT04gaXMgbm90IHNldAojIENPTkZJR19UQ0dfTlNDIGlzIG5vdCBzZXQK
IyBDT05GSUdfVENHX0FUTUVMIGlzIG5vdCBzZXQKIyBDT05GSUdfVENHX0lORklORU9OIGlzIG5v
dCBzZXQKQ09ORklHX1RDR19DUkI9eQojIENPTkZJR19UQ0dfVlRQTV9QUk9YWSBpcyBub3Qgc2V0
CiMgQ09ORklHX1RDR19USVNfU1QzM1pQMjRfSTJDIGlzIG5vdCBzZXQKIyBDT05GSUdfVENHX1RJ
U19TVDMzWlAyNF9TUEkgaXMgbm90IHNldAojIENPTkZJR19URUxDTE9DSyBpcyBub3Qgc2V0CiMg
Q09ORklHX1hJTExZQlVTIGlzIG5vdCBzZXQKIyBDT05GSUdfWElMTFlVU0IgaXMgbm90IHNldAoj
IGVuZCBvZiBDaGFyYWN0ZXIgZGV2aWNlcwoKIwojIEkyQyBzdXBwb3J0CiMKQ09ORklHX0kyQz15
CkNPTkZJR19BQ1BJX0kyQ19PUFJFR0lPTj15CkNPTkZJR19JMkNfQk9BUkRJTkZPPXkKQ09ORklH
X0kyQ19DT01QQVQ9eQojIENPTkZJR19JMkNfQ0hBUkRFViBpcyBub3Qgc2V0CkNPTkZJR19JMkNf
TVVYPXkKCiMKIyBNdWx0aXBsZXhlciBJMkMgQ2hpcCBzdXBwb3J0CiMKIyBDT05GSUdfSTJDX0FS
Ql9HUElPX0NIQUxMRU5HRSBpcyBub3Qgc2V0CiMgQ09ORklHX0kyQ19NVVhfR1BJTyBpcyBub3Qg
c2V0CiMgQ09ORklHX0kyQ19NVVhfR1BNVVggaXMgbm90IHNldAojIENPTkZJR19JMkNfTVVYX0xU
QzQzMDYgaXMgbm90IHNldAojIENPTkZJR19JMkNfTVVYX1BDQTk1NDEgaXMgbm90IHNldAojIENP
TkZJR19JMkNfTVVYX1BDQTk1NHggaXMgbm90IHNldAojIENPTkZJR19JMkNfTVVYX1JFRyBpcyBu
b3Qgc2V0CiMgQ09ORklHX0kyQ19NVVhfTUxYQ1BMRCBpcyBub3Qgc2V0CiMgZW5kIG9mIE11bHRp
cGxleGVyIEkyQyBDaGlwIHN1cHBvcnQKCkNPTkZJR19JMkNfSEVMUEVSX0FVVE89eQpDT05GSUdf
STJDX1NNQlVTPXkKQ09ORklHX0kyQ19BTEdPQklUPXkKCiMKIyBJMkMgSGFyZHdhcmUgQnVzIHN1
cHBvcnQKIwoKIwojIFBDIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCiMKIyBDT05GSUdf
STJDX0FMSTE1MzUgaXMgbm90IHNldAojIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0CiMg
Q09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qg
c2V0CiMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKIyBDT05GSUdfSTJDX0FNRF9NUDIg
aXMgbm90IHNldApDT05GSUdfSTJDX0k4MDE9eQojIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0
CiMgQ09ORklHX0kyQ19JU01UIGlzIG5vdCBzZXQKIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBz
ZXQKIyBDT05GSUdfSTJDX0NIVF9XQyBpcyBub3Qgc2V0CiMgQ09ORklHX0kyQ19ORk9SQ0UyIGlz
IG5vdCBzZXQKIyBDT05GSUdfSTJDX05WSURJQV9HUFUgaXMgbm90IHNldAojIENPTkZJR19JMkNf
U0lTNTU5NSBpcyBub3Qgc2V0CiMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAojIENPTkZJ
R19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CiMgQ09O
RklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAoKIwojIEFDUEkgZHJpdmVycwojCiMgQ09ORklHX0ky
Q19TQ01JIGlzIG5vdCBzZXQKCiMKIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1i
ZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKIwojIENPTkZJR19JMkNfQ0JVU19HUElPIGlzIG5vdCBz
ZXQKQ09ORklHX0kyQ19ERVNJR05XQVJFX0NPUkU9eQojIENPTkZJR19JMkNfREVTSUdOV0FSRV9T
TEFWRSBpcyBub3Qgc2V0CkNPTkZJR19JMkNfREVTSUdOV0FSRV9QTEFURk9STT15CiMgQ09ORklH
X0kyQ19ERVNJR05XQVJFX0JBWVRSQUlMIGlzIG5vdCBzZXQKIyBDT05GSUdfSTJDX0RFU0lHTldB
UkVfUENJIGlzIG5vdCBzZXQKIyBDT05GSUdfSTJDX0VNRVYyIGlzIG5vdCBzZXQKIyBDT05GSUdf
STJDX0dQSU8gaXMgbm90IHNldAojIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKIyBDT05G
SUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CiMgQ09ORklHX0kyQ19SSzNYIGlzIG5vdCBz
ZXQKIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CiMgQ09ORklHX0kyQ19YSUxJTlggaXMg
bm90IHNldAoKIwojIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKIwpDT05GSUdf
STJDX0RJT0xBTl9VMkM9eQpDT05GSUdfSTJDX0RMTjI9eQojIENPTkZJR19JMkNfQ1AyNjE1IGlz
IG5vdCBzZXQKIyBDT05GSUdfSTJDX1BBUlBPUlQgaXMgbm90IHNldAojIENPTkZJR19JMkNfUENJ
MVhYWFggaXMgbm90IHNldApDT05GSUdfSTJDX1JPQk9URlVaWl9PU0lGPXkKIyBDT05GSUdfSTJD
X1RBT1NfRVZNIGlzIG5vdCBzZXQKQ09ORklHX0kyQ19USU5ZX1VTQj15CkNPTkZJR19JMkNfVklQ
RVJCT0FSRD15CgojCiMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCiMKIyBDT05GSUdfSTJD
X01MWENQTEQgaXMgbm90IHNldAojIENPTkZJR19JMkNfVklSVElPIGlzIG5vdCBzZXQKIyBlbmQg
b2YgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CgojIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0
CiMgQ09ORklHX0kyQ19TTEFWRSBpcyBub3Qgc2V0CiMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlz
IG5vdCBzZXQKIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAojIENPTkZJR19JMkNf
REVCVUdfQlVTIGlzIG5vdCBzZXQKIyBlbmQgb2YgSTJDIHN1cHBvcnQKCiMgQ09ORklHX0kzQyBp
cyBub3Qgc2V0CkNPTkZJR19TUEk9eQojIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldApDT05G
SUdfU1BJX01BU1RFUj15CiMgQ09ORklHX1NQSV9NRU0gaXMgbm90IHNldAoKIwojIFNQSSBNYXN0
ZXIgQ29udHJvbGxlciBEcml2ZXJzCiMKIyBDT05GSUdfU1BJX0FMVEVSQSBpcyBub3Qgc2V0CiMg
Q09ORklHX1NQSV9BWElfU1BJX0VOR0lORSBpcyBub3Qgc2V0CiMgQ09ORklHX1NQSV9CSVRCQU5H
IGlzIG5vdCBzZXQKIyBDT05GSUdfU1BJX0JVVFRFUkZMWSBpcyBub3Qgc2V0CiMgQ09ORklHX1NQ
SV9DQURFTkNFIGlzIG5vdCBzZXQKIyBDT05GSUdfU1BJX0NBREVOQ0VfUVVBRFNQSSBpcyBub3Qg
c2V0CiMgQ09ORklHX1NQSV9ERVNJR05XQVJFIGlzIG5vdCBzZXQKQ09ORklHX1NQSV9ETE4yPXkK
IyBDT05GSUdfU1BJX0dQSU8gaXMgbm90IHNldAojIENPTkZJR19TUElfTE03MF9MTFAgaXMgbm90
IHNldAojIENPTkZJR19TUElfRlNMX1NQSSBpcyBub3Qgc2V0CiMgQ09ORklHX1NQSV9NSUNST0NI
SVBfQ09SRSBpcyBub3Qgc2V0CiMgQ09ORklHX1NQSV9NSUNST0NISVBfQ09SRV9RU1BJIGlzIG5v
dCBzZXQKIyBDT05GSUdfU1BJX0xBTlRJUV9TU0MgaXMgbm90IHNldAojIENPTkZJR19TUElfT0Nf
VElOWSBpcyBub3Qgc2V0CiMgQ09ORklHX1NQSV9QQ0kxWFhYWCBpcyBub3Qgc2V0CiMgQ09ORklH
X1NQSV9QWEEyWFggaXMgbm90IHNldAojIENPTkZJR19TUElfU0MxOElTNjAyIGlzIG5vdCBzZXQK
IyBDT05GSUdfU1BJX1NJRklWRSBpcyBub3Qgc2V0CiMgQ09ORklHX1NQSV9NWElDIGlzIG5vdCBz
ZXQKIyBDT05GSUdfU1BJX1hDT01NIGlzIG5vdCBzZXQKIyBDT05GSUdfU1BJX1hJTElOWCBpcyBu
b3Qgc2V0CiMgQ09ORklHX1NQSV9BTUQgaXMgbm90IHNldAoKIwojIFNQSSBNdWx0aXBsZXhlciBz
dXBwb3J0CiMKIyBDT05GSUdfU1BJX01VWCBpcyBub3Qgc2V0CgojCiMgU1BJIFByb3RvY29sIE1h
c3RlcnMKIwojIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKIyBDT05GSUdfU1BJX0xPT1BC
QUNLX1RFU1QgaXMgbm90IHNldAojIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0CiMgQ09O
RklHX1NQSV9TTEFWRSBpcyBub3Qgc2V0CkNPTkZJR19TUElfRFlOQU1JQz15CiMgQ09ORklHX1NQ
TUkgaXMgbm90IHNldAojIENPTkZJR19IU0kgaXMgbm90IHNldApDT05GSUdfUFBTPXkKIyBDT05G
SUdfUFBTX0RFQlVHIGlzIG5vdCBzZXQKCiMKIyBQUFMgY2xpZW50cyBzdXBwb3J0CiMKIyBDT05G
SUdfUFBTX0NMSUVOVF9LVElNRVIgaXMgbm90IHNldAojIENPTkZJR19QUFNfQ0xJRU5UX0xESVND
IGlzIG5vdCBzZXQKIyBDT05GSUdfUFBTX0NMSUVOVF9QQVJQT1JUIGlzIG5vdCBzZXQKIyBDT05G
SUdfUFBTX0NMSUVOVF9HUElPIGlzIG5vdCBzZXQKCiMKIyBQUFMgZ2VuZXJhdG9ycyBzdXBwb3J0
CiMKCiMKIyBQVFAgY2xvY2sgc3VwcG9ydAojCkNPTkZJR19QVFBfMTU4OF9DTE9DSz15CkNPTkZJ
R19QVFBfMTU4OF9DTE9DS19PUFRJT05BTD15CgojCiMgRW5hYmxlIFBIWUxJQiBhbmQgTkVUV09S
S19QSFlfVElNRVNUQU1QSU5HIHRvIHNlZSB0aGUgYWRkaXRpb25hbCBjbG9ja3MuCiMKQ09ORklH
X1BUUF8xNTg4X0NMT0NLX0tWTT15CiMgQ09ORklHX1BUUF8xNTg4X0NMT0NLX0lEVDgyUDMzIGlz
IG5vdCBzZXQKIyBDT05GSUdfUFRQXzE1ODhfQ0xPQ0tfSURUQ00gaXMgbm90IHNldAojIENPTkZJ
R19QVFBfMTU4OF9DTE9DS19NT0NLIGlzIG5vdCBzZXQKIyBDT05GSUdfUFRQXzE1ODhfQ0xPQ0tf
Vk1XIGlzIG5vdCBzZXQKIyBlbmQgb2YgUFRQIGNsb2NrIHN1cHBvcnQKCiMgQ09ORklHX1BJTkNU
UkwgaXMgbm90IHNldApDT05GSUdfR1BJT0xJQj15CkNPTkZJR19HUElPTElCX0ZBU1RQQVRIX0xJ
TUlUPTUxMgpDT05GSUdfT0ZfR1BJTz15CkNPTkZJR19HUElPX0FDUEk9eQpDT05GSUdfR1BJT0xJ
Ql9JUlFDSElQPXkKIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0CiMgQ09ORklHX0dQSU9f
U1lTRlMgaXMgbm90IHNldAojIENPTkZJR19HUElPX0NERVYgaXMgbm90IHNldAoKIwojIE1lbW9y
eSBtYXBwZWQgR1BJTyBkcml2ZXJzCiMKIyBDT05GSUdfR1BJT183NFhYX01NSU8gaXMgbm90IHNl
dAojIENPTkZJR19HUElPX0FMVEVSQSBpcyBub3Qgc2V0CiMgQ09ORklHX0dQSU9fQU1EUFQgaXMg
bm90IHNldAojIENPTkZJR19HUElPX0NBREVOQ0UgaXMgbm90IHNldAojIENPTkZJR19HUElPX0RX
QVBCIGlzIG5vdCBzZXQKIyBDT05GSUdfR1BJT19FWEFSIGlzIG5vdCBzZXQKIyBDT05GSUdfR1BJ
T19GVEdQSU8wMTAgaXMgbm90IHNldAojIENPTkZJR19HUElPX0dFTkVSSUNfUExBVEZPUk0gaXMg
bm90IHNldAojIENPTkZJR19HUElPX0dSR1BJTyBpcyBub3Qgc2V0CiMgQ09ORklHX0dQSU9fSExX
RCBpcyBub3Qgc2V0CiMgQ09ORklHX0dQSU9fTE9HSUNWQyBpcyBub3Qgc2V0CiMgQ09ORklHX0dQ
SU9fTUI4NlM3WCBpcyBub3Qgc2V0CiMgQ09ORklHX0dQSU9fU0lGSVZFIGlzIG5vdCBzZXQKIyBD
T05GSUdfR1BJT19TWVNDT04gaXMgbm90IHNldAojIENPTkZJR19HUElPX1hJTElOWCBpcyBub3Qg
c2V0CiMgQ09ORklHX0dQSU9fQU1EX0ZDSCBpcyBub3Qgc2V0CiMgZW5kIG9mIE1lbW9yeSBtYXBw
ZWQgR1BJTyBkcml2ZXJzCgojCiMgUG9ydC1tYXBwZWQgSS9PIEdQSU8gZHJpdmVycwojCiMgQ09O
RklHX0dQSU9fVlg4NTUgaXMgbm90IHNldAojIENPTkZJR19HUElPX0Y3MTg4WCBpcyBub3Qgc2V0
CiMgQ09ORklHX0dQSU9fSVQ4NyBpcyBub3Qgc2V0CiMgQ09ORklHX0dQSU9fU0NIMzExWCBpcyBu
b3Qgc2V0CiMgQ09ORklHX0dQSU9fV0lOQk9ORCBpcyBub3Qgc2V0CiMgQ09ORklHX0dQSU9fV1Mx
NkM0OCBpcyBub3Qgc2V0CiMgZW5kIG9mIFBvcnQtbWFwcGVkIEkvTyBHUElPIGRyaXZlcnMKCiMK
IyBJMkMgR1BJTyBleHBhbmRlcnMKIwojIENPTkZJR19HUElPX0FETlAgaXMgbm90IHNldAojIENP
TkZJR19HUElPX0ZYTDY0MDggaXMgbm90IHNldAojIENPTkZJR19HUElPX0RTNDUyMCBpcyBub3Qg
c2V0CiMgQ09ORklHX0dQSU9fR1dfUExEIGlzIG5vdCBzZXQKIyBDT05GSUdfR1BJT19NQVg3MzAw
IGlzIG5vdCBzZXQKIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKIyBDT05GSUdfR1BJ
T19QQ0E5NTNYIGlzIG5vdCBzZXQKIyBDT05GSUdfR1BJT19QQ0E5NTcwIGlzIG5vdCBzZXQKIyBD
T05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKIyBDT05GSUdfR1BJT19UUElDMjgxMCBpcyBu
b3Qgc2V0CiMgZW5kIG9mIEkyQyBHUElPIGV4cGFuZGVycwoKIwojIE1GRCBHUElPIGV4cGFuZGVy
cwojCkNPTkZJR19HUElPX0RMTjI9eQojIENPTkZJR19HUElPX0VMS0hBUlRMQUtFIGlzIG5vdCBz
ZXQKIyBDT05GSUdfR1BJT19UV0w0MDMwIGlzIG5vdCBzZXQKIyBlbmQgb2YgTUZEIEdQSU8gZXhw
YW5kZXJzCgojCiMgUENJIEdQSU8gZXhwYW5kZXJzCiMKIyBDT05GSUdfR1BJT19BTUQ4MTExIGlz
IG5vdCBzZXQKIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0CiMgQ09ORklHX0dQSU9fTUxf
SU9IIGlzIG5vdCBzZXQKIyBDT05GSUdfR1BJT19QQ0lfSURJT18xNiBpcyBub3Qgc2V0CiMgQ09O
RklHX0dQSU9fUENJRV9JRElPXzI0IGlzIG5vdCBzZXQKIyBDT05GSUdfR1BJT19SREMzMjFYIGlz
IG5vdCBzZXQKIyBDT05GSUdfR1BJT19TT0RBVklMTEUgaXMgbm90IHNldAojIGVuZCBvZiBQQ0kg
R1BJTyBleHBhbmRlcnMKCiMKIyBTUEkgR1BJTyBleHBhbmRlcnMKIwojIENPTkZJR19HUElPXzc0
WDE2NCBpcyBub3Qgc2V0CiMgQ09ORklHX0dQSU9fTUFYMzE5MVggaXMgbm90IHNldAojIENPTkZJ
R19HUElPX01BWDczMDEgaXMgbm90IHNldAojIENPTkZJR19HUElPX01DMzM4ODAgaXMgbm90IHNl
dAojIENPTkZJR19HUElPX1BJU09TUiBpcyBub3Qgc2V0CiMgQ09ORklHX0dQSU9fWFJBMTQwMyBp
cyBub3Qgc2V0CiMgZW5kIG9mIFNQSSBHUElPIGV4cGFuZGVycwoKIwojIFVTQiBHUElPIGV4cGFu
ZGVycwojCkNPTkZJR19HUElPX1ZJUEVSQk9BUkQ9eQojIGVuZCBvZiBVU0IgR1BJTyBleHBhbmRl
cnMKCiMKIyBWaXJ0dWFsIEdQSU8gZHJpdmVycwojCiMgQ09ORklHX0dQSU9fQUdHUkVHQVRPUiBp
cyBub3Qgc2V0CiMgQ09ORklHX0dQSU9fTEFUQ0ggaXMgbm90IHNldAojIENPTkZJR19HUElPX01P
Q0tVUCBpcyBub3Qgc2V0CiMgQ09ORklHX0dQSU9fVklSVElPIGlzIG5vdCBzZXQKIyBDT05GSUdf
R1BJT19TSU0gaXMgbm90IHNldAojIGVuZCBvZiBWaXJ0dWFsIEdQSU8gZHJpdmVycwoKQ09ORklH
X1cxPXkKIyBDT05GSUdfVzFfQ09OIGlzIG5vdCBzZXQKCiMKIyAxLXdpcmUgQnVzIE1hc3RlcnMK
IwojIENPTkZJR19XMV9NQVNURVJfQU1EX0FYSSBpcyBub3Qgc2V0CiMgQ09ORklHX1cxX01BU1RF
Ul9NQVRST1ggaXMgbm90IHNldApDT05GSUdfVzFfTUFTVEVSX0RTMjQ5MD15CiMgQ09ORklHX1cx
X01BU1RFUl9EUzI0ODIgaXMgbm90IHNldAojIENPTkZJR19XMV9NQVNURVJfR1BJTyBpcyBub3Qg
c2V0CiMgQ09ORklHX1cxX01BU1RFUl9TR0kgaXMgbm90IHNldAojIGVuZCBvZiAxLXdpcmUgQnVz
IE1hc3RlcnMKCiMKIyAxLXdpcmUgU2xhdmVzCiMKIyBDT05GSUdfVzFfU0xBVkVfVEhFUk0gaXMg
bm90IHNldAojIENPTkZJR19XMV9TTEFWRV9TTUVNIGlzIG5vdCBzZXQKIyBDT05GSUdfVzFfU0xB
VkVfRFMyNDA1IGlzIG5vdCBzZXQKIyBDT05GSUdfVzFfU0xBVkVfRFMyNDA4IGlzIG5vdCBzZXQK
IyBDT05GSUdfVzFfU0xBVkVfRFMyNDEzIGlzIG5vdCBzZXQKIyBDT05GSUdfVzFfU0xBVkVfRFMy
NDA2IGlzIG5vdCBzZXQKIyBDT05GSUdfVzFfU0xBVkVfRFMyNDIzIGlzIG5vdCBzZXQKIyBDT05G
SUdfVzFfU0xBVkVfRFMyODA1IGlzIG5vdCBzZXQKIyBDT05GSUdfVzFfU0xBVkVfRFMyNDMwIGlz
IG5vdCBzZXQKIyBDT05GSUdfVzFfU0xBVkVfRFMyNDMxIGlzIG5vdCBzZXQKIyBDT05GSUdfVzFf
U0xBVkVfRFMyNDMzIGlzIG5vdCBzZXQKIyBDT05GSUdfVzFfU0xBVkVfRFMyNDM4IGlzIG5vdCBz
ZXQKIyBDT05GSUdfVzFfU0xBVkVfRFMyNTBYIGlzIG5vdCBzZXQKIyBDT05GSUdfVzFfU0xBVkVf
RFMyNzgwIGlzIG5vdCBzZXQKIyBDT05GSUdfVzFfU0xBVkVfRFMyNzgxIGlzIG5vdCBzZXQKIyBD
T05GSUdfVzFfU0xBVkVfRFMyOEUwNCBpcyBub3Qgc2V0CiMgQ09ORklHX1cxX1NMQVZFX0RTMjhF
MTcgaXMgbm90IHNldAojIGVuZCBvZiAxLXdpcmUgU2xhdmVzCgojIENPTkZJR19QT1dFUl9SRVNF
VCBpcyBub3Qgc2V0CkNPTkZJR19QT1dFUl9TVVBQTFk9eQojIENPTkZJR19QT1dFUl9TVVBQTFlf
REVCVUcgaXMgbm90IHNldApDT05GSUdfUE9XRVJfU1VQUExZX0hXTU9OPXkKIyBDT05GSUdfR0VO
RVJJQ19BRENfQkFUVEVSWSBpcyBub3Qgc2V0CiMgQ09ORklHX0lQNVhYWF9QT1dFUiBpcyBub3Qg
c2V0CiMgQ09ORklHX1RFU1RfUE9XRVIgaXMgbm90IHNldAojIENPTkZJR19DSEFSR0VSX0FEUDUw
NjEgaXMgbm90IHNldAojIENPTkZJR19CQVRURVJZX0NXMjAxNSBpcyBub3Qgc2V0CiMgQ09ORklH
X0JBVFRFUllfRFMyNzYwIGlzIG5vdCBzZXQKIyBDT05GSUdfQkFUVEVSWV9EUzI3ODAgaXMgbm90
IHNldAojIENPTkZJR19CQVRURVJZX0RTMjc4MSBpcyBub3Qgc2V0CiMgQ09ORklHX0JBVFRFUllf
RFMyNzgyIGlzIG5vdCBzZXQKIyBDT05GSUdfQkFUVEVSWV9TQU1TVU5HX1NESSBpcyBub3Qgc2V0
CiMgQ09ORklHX0JBVFRFUllfU0JTIGlzIG5vdCBzZXQKIyBDT05GSUdfQ0hBUkdFUl9TQlMgaXMg
bm90IHNldAojIENPTkZJR19NQU5BR0VSX1NCUyBpcyBub3Qgc2V0CiMgQ09ORklHX0JBVFRFUllf
QlEyN1hYWCBpcyBub3Qgc2V0CiMgQ09ORklHX0JBVFRFUllfTUFYMTcwNDAgaXMgbm90IHNldAoj
IENPTkZJR19CQVRURVJZX01BWDE3MDQyIGlzIG5vdCBzZXQKIyBDT05GSUdfQkFUVEVSWV9NQVgx
NzIxWCBpcyBub3Qgc2V0CkNPTkZJR19DSEFSR0VSX0lTUDE3MDQ9eQojIENPTkZJR19DSEFSR0VS
X01BWDg5MDMgaXMgbm90IHNldAojIENPTkZJR19DSEFSR0VSX1RXTDQwMzAgaXMgbm90IHNldAoj
IENPTkZJR19DSEFSR0VSX0xQODcyNyBpcyBub3Qgc2V0CiMgQ09ORklHX0NIQVJHRVJfR1BJTyBp
cyBub3Qgc2V0CiMgQ09ORklHX0NIQVJHRVJfTUFOQUdFUiBpcyBub3Qgc2V0CiMgQ09ORklHX0NI
QVJHRVJfTFQzNjUxIGlzIG5vdCBzZXQKIyBDT05GSUdfQ0hBUkdFUl9MVEM0MTYyTCBpcyBub3Qg
c2V0CiMgQ09ORklHX0NIQVJHRVJfREVURUNUT1JfTUFYMTQ2NTYgaXMgbm90IHNldAojIENPTkZJ
R19DSEFSR0VSX01BWDc3OTc2IGlzIG5vdCBzZXQKIyBDT05GSUdfQ0hBUkdFUl9CUTI0MTVYIGlz
IG5vdCBzZXQKQ09ORklHX0NIQVJHRVJfQlEyNDE5MD15CiMgQ09ORklHX0NIQVJHRVJfQlEyNDI1
NyBpcyBub3Qgc2V0CiMgQ09ORklHX0NIQVJHRVJfQlEyNDczNSBpcyBub3Qgc2V0CiMgQ09ORklH
X0NIQVJHRVJfQlEyNTE1WCBpcyBub3Qgc2V0CiMgQ09ORklHX0NIQVJHRVJfQlEyNTg5MCBpcyBu
b3Qgc2V0CiMgQ09ORklHX0NIQVJHRVJfQlEyNTk4MCBpcyBub3Qgc2V0CiMgQ09ORklHX0NIQVJH
RVJfQlEyNTZYWCBpcyBub3Qgc2V0CiMgQ09ORklHX0NIQVJHRVJfU01CMzQ3IGlzIG5vdCBzZXQK
IyBDT05GSUdfQkFUVEVSWV9HQVVHRV9MVEMyOTQxIGlzIG5vdCBzZXQKIyBDT05GSUdfQkFUVEVS
WV9HT0xERklTSCBpcyBub3Qgc2V0CiMgQ09ORklHX0JBVFRFUllfUlQ1MDMzIGlzIG5vdCBzZXQK
IyBDT05GSUdfQ0hBUkdFUl9SVDk0NTUgaXMgbm90IHNldAojIENPTkZJR19DSEFSR0VSX1JUOTQ2
NyBpcyBub3Qgc2V0CiMgQ09ORklHX0NIQVJHRVJfUlQ5NDcxIGlzIG5vdCBzZXQKIyBDT05GSUdf
Q0hBUkdFUl9VQ1MxMDAyIGlzIG5vdCBzZXQKIyBDT05GSUdfQ0hBUkdFUl9CRDk5OTU0IGlzIG5v
dCBzZXQKIyBDT05GSUdfQkFUVEVSWV9VRzMxMDUgaXMgbm90IHNldAojIENPTkZJR19GVUVMX0dB
VUdFX01NODAxMyBpcyBub3Qgc2V0CkNPTkZJR19IV01PTj15CiMgQ09ORklHX0hXTU9OX0RFQlVH
X0NISVAgaXMgbm90IHNldAoKIwojIE5hdGl2ZSBkcml2ZXJzCiMKIyBDT05GSUdfU0VOU09SU19B
QklUVUdVUlUgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0FCSVRVR1VSVTMgaXMgbm90IHNl
dAojIENPTkZJR19TRU5TT1JTX0FENzMxNCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfQUQ3
NDE0IGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAojIENPTkZJ
R19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMg
bm90IHNldAojIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAojIENPTkZJR19TRU5T
T1JTX0FETTEwMjkgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNl
dAojIENPTkZJR19TRU5TT1JTX0FETTExNzcgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0FE
TTkyNDAgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0FEVDczMTAgaXMgbm90IHNldAojIENP
TkZJR19TRU5TT1JTX0FEVDc0MTAgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0FEVDc0MTEg
aXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0FEVDc0NjIgaXMgbm90IHNldAojIENPTkZJR19T
RU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0FEVDc0NzUgaXMgbm90
IHNldAojIENPTkZJR19TRU5TT1JTX0FIVDEwIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19B
UVVBQ09NUFVURVJfRDVORVhUIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19BUzM3MCBpcyBu
b3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfQVNDNzYyMSBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNP
UlNfQVhJX0ZBTl9DT05UUk9MIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19LOFRFTVAgaXMg
bm90IHNldAojIENPTkZJR19TRU5TT1JTX0sxMFRFTVAgaXMgbm90IHNldAojIENPTkZJR19TRU5T
T1JTX0ZBTTE1SF9QT1dFUiBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfQVBQTEVTTUMgaXMg
bm90IHNldAojIENPTkZJR19TRU5TT1JTX0FTQjEwMCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNP
UlNfQVRYUDEgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0NPUlNBSVJfQ1BSTyBpcyBub3Qg
c2V0CiMgQ09ORklHX1NFTlNPUlNfQ09SU0FJUl9QU1UgaXMgbm90IHNldAojIENPTkZJR19TRU5T
T1JTX0RSSVZFVEVNUCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfRFM2MjAgaXMgbm90IHNl
dAojIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfREVM
TF9TTU0gaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAojIENP
TkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZH
IGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKIyBDT05GSUdf
U0VOU09SU19GU0NITUQgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0ZUU1RFVVRBVEVTIGlz
IG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19HSUdBQllURV9XQVRFUkZPUkNFIGlzIG5vdCBzZXQK
IyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19HTDUy
MFNNIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19HNzYwQSBpcyBub3Qgc2V0CiMgQ09ORklH
X1NFTlNPUlNfRzc2MiBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfR1BJT19GQU4gaXMgbm90
IHNldAojIENPTkZJR19TRU5TT1JTX0hJSDYxMzAgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JT
X0hTMzAwMSBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfSUlPX0hXTU9OIGlzIG5vdCBzZXQK
IyBDT05GSUdfU0VOU09SU19JNTUwMCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfQ09SRVRF
TVAgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAojIENPTkZJR19T
RU5TT1JTX0pDNDIgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX1BPV0VSWiBpcyBub3Qgc2V0
CiMgQ09ORklHX1NFTlNPUlNfUE9XUjEyMjAgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0xJ
TkVBR0UgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0xUQzI5NDUgaXMgbm90IHNldAojIENP
TkZJR19TRU5TT1JTX0xUQzI5NDdfSTJDIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19MVEMy
OTQ3X1NQSSBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfTFRDMjk5MCBpcyBub3Qgc2V0CiMg
Q09ORklHX1NFTlNPUlNfTFRDMjk5MSBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfTFRDMjk5
MiBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfTFRDNDE1MSBpcyBub3Qgc2V0CiMgQ09ORklH
X1NFTlNPUlNfTFRDNDIxNSBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfTFRDNDIyMiBpcyBu
b3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfTFRDNDI0NSBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNP
UlNfTFRDNDI2MCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfTFRDNDI2MSBpcyBub3Qgc2V0
CiMgQ09ORklHX1NFTlNPUlNfTUFYMTExMSBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfTUFY
MTI3IGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19NQVgxNjA2NSBpcyBub3Qgc2V0CiMgQ09O
RklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfTUFYMTY2OCBp
cyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfTUFYMTk3IGlzIG5vdCBzZXQKIyBDT05GSUdfU0VO
U09SU19NQVgzMTcyMiBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfTUFYMzE3MzAgaXMgbm90
IHNldAojIENPTkZJR19TRU5TT1JTX01BWDMxNzYwIGlzIG5vdCBzZXQKIyBDT05GSUdfTUFYMzE4
MjcgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX01BWDY2MjAgaXMgbm90IHNldAojIENPTkZJ
R19TRU5TT1JTX01BWDY2MjEgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX01BWDY2MzkgaXMg
bm90IHNldAojIENPTkZJR19TRU5TT1JTX01BWDY2NDIgaXMgbm90IHNldAojIENPTkZJR19TRU5T
T1JTX01BWDY2NTAgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX01BWDY2OTcgaXMgbm90IHNl
dAojIENPTkZJR19TRU5TT1JTX01BWDMxNzkwIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19N
QzM0VlI1MDAgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX01DUDMwMjEgaXMgbm90IHNldAoj
IENPTkZJR19TRU5TT1JTX1RDNjU0IGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19UUFMyMzg2
MSBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfTVI3NTIwMyBpcyBub3Qgc2V0CiMgQ09ORklH
X1NFTlNPUlNfQURDWFggaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNl
dAojIENPTkZJR19TRU5TT1JTX0xNNzAgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0xNNzMg
aXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAojIENPTkZJR19TRU5T
T1JTX0xNNzcgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAojIENP
TkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90
IHNldAojIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0xN
ODcgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAojIENPTkZJR19T
RU5TT1JTX0xNOTIgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAoj
IENPTkZJR19TRU5TT1JTX0xNOTUyMzQgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0xNOTUy
NDEgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0xNOTUyNDUgaXMgbm90IHNldAojIENPTkZJ
R19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMg
bm90IHNldAojIENPTkZJR19TRU5TT1JTX05UQ19USEVSTUlTVE9SIGlzIG5vdCBzZXQKIyBDT05G
SUdfU0VOU09SU19OQ1Q2NjgzIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19OQ1Q2Nzc1IGlz
IG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19OQ1Q2Nzc1X0kyQyBpcyBub3Qgc2V0CiMgQ09ORklH
X1NFTlNPUlNfTkNUNzgwMiBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfTkNUNzkwNCBpcyBu
b3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfTlBDTTdYWCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNP
UlNfTlpYVF9LUkFLRU4yIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19OWlhUX1NNQVJUMiBp
cyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfT0NDX1A4X0kyQyBpcyBub3Qgc2V0CiMgQ09ORklH
X1NFTlNPUlNfT1hQIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBz
ZXQKIyBDT05GSUdfUE1CVVMgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX1NCVFNJIGlzIG5v
dCBzZXQKIyBDT05GSUdfU0VOU09SU19TQlJNSSBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNf
U0hUMTUgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX1NIVDIxIGlzIG5vdCBzZXQKIyBDT05G
SUdfU0VOU09SU19TSFQzeCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfU0hUNHggaXMgbm90
IHNldAojIENPTkZJR19TRU5TT1JTX1NIVEMxIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19T
SVM1NTk1IGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKIyBD
T05GSUdfU0VOU09SU19FTUMxNDAzIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19FTUMyMTAz
IGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19FTUMyMzA1IGlzIG5vdCBzZXQKIyBDT05GSUdf
U0VOU09SU19FTUM2VzIwMSBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMg
bm90IHNldAojIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAojIENPTkZJR19T
RU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX1NDSDU2MjcgaXMg
bm90IHNldAojIENPTkZJR19TRU5TT1JTX1NDSDU2MzYgaXMgbm90IHNldAojIENPTkZJR19TRU5T
T1JTX1NUVFM3NTEgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0FEQzEyOEQ4MTggaXMgbm90
IHNldAojIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JT
X0FEUzc4NzEgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0FNQzY4MjEgaXMgbm90IHNldAoj
IENPTkZJR19TRU5TT1JTX0lOQTIwOSBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfSU5BMlhY
IGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19JTkEyMzggaXMgbm90IHNldAojIENPTkZJR19T
RU5TT1JTX0lOQTMyMjEgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX1RDNzQgaXMgbm90IHNl
dAojIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfVE1Q
MTAyIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19UTVAxMDMgaXMgbm90IHNldAojIENPTkZJ
R19TRU5TT1JTX1RNUDEwOCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5v
dCBzZXQKIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JT
X1RNUDQ2NCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfVE1QNTEzIGlzIG5vdCBzZXQKIyBD
T05GSUdfU0VOU09SU19WSUFfQ1BVVEVNUCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfVklB
Njg2QSBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKIyBDT05G
SUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX1c4Mzc3M0cgaXMg
bm90IHNldAojIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAojIENPTkZJR19TRU5T
T1JTX1c4Mzc5MUQgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNl
dAojIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfVzgz
Nzk1IGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAojIENP
TkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfVzgzNjI3
SEYgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CiMgQ09O
RklHX1NFTlNPUlNfWEdFTkUgaXMgbm90IHNldAoKIwojIEFDUEkgZHJpdmVycwojCiMgQ09ORklH
X1NFTlNPUlNfQUNQSV9QT1dFUiBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfQVRLMDExMCBp
cyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfQVNVU19XTUkgaXMgbm90IHNldAojIENPTkZJR19T
RU5TT1JTX0FTVVNfRUMgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0hQX1dNSSBpcyBub3Qg
c2V0CkNPTkZJR19USEVSTUFMPXkKIyBDT05GSUdfVEhFUk1BTF9ORVRMSU5LIGlzIG5vdCBzZXQK
IyBDT05GSUdfVEhFUk1BTF9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKIyBDT05GSUdfVEhFUk1BTF9E
RUJVR0ZTIGlzIG5vdCBzZXQKQ09ORklHX1RIRVJNQUxfRU1FUkdFTkNZX1BPV0VST0ZGX0RFTEFZ
X01TPTAKQ09ORklHX1RIRVJNQUxfSFdNT049eQojIENPTkZJR19USEVSTUFMX09GIGlzIG5vdCBz
ZXQKQ09ORklHX1RIRVJNQUxfV1JJVEFCTEVfVFJJUFM9eQpDT05GSUdfVEhFUk1BTF9ERUZBVUxU
X0dPVl9TVEVQX1dJU0U9eQojIENPTkZJR19USEVSTUFMX0RFRkFVTFRfR09WX0ZBSVJfU0hBUkUg
aXMgbm90IHNldAojIENPTkZJR19USEVSTUFMX0RFRkFVTFRfR09WX1VTRVJfU1BBQ0UgaXMgbm90
IHNldAojIENPTkZJR19USEVSTUFMX0dPVl9GQUlSX1NIQVJFIGlzIG5vdCBzZXQKQ09ORklHX1RI
RVJNQUxfR09WX1NURVBfV0lTRT15CiMgQ09ORklHX1RIRVJNQUxfR09WX0JBTkdfQkFORyBpcyBu
b3Qgc2V0CkNPTkZJR19USEVSTUFMX0dPVl9VU0VSX1NQQUNFPXkKIyBDT05GSUdfVEhFUk1BTF9F
TVVMQVRJT04gaXMgbm90IHNldAojIENPTkZJR19USEVSTUFMX01NSU8gaXMgbm90IHNldAoKIwoj
IEludGVsIHRoZXJtYWwgZHJpdmVycwojCiMgQ09ORklHX0lOVEVMX1BPV0VSQ0xBTVAgaXMgbm90
IHNldApDT05GSUdfWDg2X1RIRVJNQUxfVkVDVE9SPXkKQ09ORklHX0lOVEVMX1RDQz15CkNPTkZJ
R19YODZfUEtHX1RFTVBfVEhFUk1BTD15CiMgQ09ORklHX0lOVEVMX1NPQ19EVFNfVEhFUk1BTCBp
cyBub3Qgc2V0CgojCiMgQUNQSSBJTlQzNDBYIHRoZXJtYWwgZHJpdmVycwojCiMgQ09ORklHX0lO
VDM0MFhfVEhFUk1BTCBpcyBub3Qgc2V0CiMgZW5kIG9mIEFDUEkgSU5UMzQwWCB0aGVybWFsIGRy
aXZlcnMKCiMgQ09ORklHX0lOVEVMX1BDSF9USEVSTUFMIGlzIG5vdCBzZXQKIyBDT05GSUdfSU5U
RUxfVENDX0NPT0xJTkcgaXMgbm90IHNldAojIENPTkZJR19JTlRFTF9IRklfVEhFUk1BTCBpcyBu
b3Qgc2V0CiMgZW5kIG9mIEludGVsIHRoZXJtYWwgZHJpdmVycwoKIyBDT05GSUdfR0VORVJJQ19B
RENfVEhFUk1BTCBpcyBub3Qgc2V0CkNPTkZJR19XQVRDSERPRz15CiMgQ09ORklHX1dBVENIRE9H
X0NPUkUgaXMgbm90IHNldAojIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CkNP
TkZJR19XQVRDSERPR19IQU5ETEVfQk9PVF9FTkFCTEVEPXkKQ09ORklHX1dBVENIRE9HX09QRU5f
VElNRU9VVD0wCiMgQ09ORklHX1dBVENIRE9HX1NZU0ZTIGlzIG5vdCBzZXQKIyBDT05GSUdfV0FU
Q0hET0dfSFJUSU1FUl9QUkVUSU1FT1VUIGlzIG5vdCBzZXQKCiMKIyBXYXRjaGRvZyBQcmV0aW1l
b3V0IEdvdmVybm9ycwojCgojCiMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKIwojIENPTkZJR19T
T0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKIyBDT05GSUdfR1BJT19XQVRDSERPRyBpcyBub3Qgc2V0
CiMgQ09ORklHX1dEQVRfV0RUIGlzIG5vdCBzZXQKIyBDT05GSUdfWElMSU5YX1dBVENIRE9HIGlz
IG5vdCBzZXQKIyBDT05GSUdfWklJUkFWRV9XQVRDSERPRyBpcyBub3Qgc2V0CiMgQ09ORklHX0NB
REVOQ0VfV0FUQ0hET0cgaXMgbm90IHNldAojIENPTkZJR19EV19XQVRDSERPRyBpcyBub3Qgc2V0
CiMgQ09ORklHX1RXTDQwMzBfV0FUQ0hET0cgaXMgbm90IHNldAojIENPTkZJR19NQVg2M1hYX1dB
VENIRE9HIGlzIG5vdCBzZXQKIyBDT05GSUdfUkVUVV9XQVRDSERPRyBpcyBub3Qgc2V0CiMgQ09O
RklHX0FDUVVJUkVfV0RUIGlzIG5vdCBzZXQKIyBDT05GSUdfQURWQU5URUNIX1dEVCBpcyBub3Qg
c2V0CiMgQ09ORklHX0FEVkFOVEVDSF9FQ19XRFQgaXMgbm90IHNldAojIENPTkZJR19BTElNMTUz
NV9XRFQgaXMgbm90IHNldAojIENPTkZJR19BTElNNzEwMV9XRFQgaXMgbm90IHNldAojIENPTkZJ
R19FQkNfQzM4NF9XRFQgaXMgbm90IHNldAojIENPTkZJR19FWEFSX1dEVCBpcyBub3Qgc2V0CiMg
Q09ORklHX0Y3MTgwOEVfV0RUIGlzIG5vdCBzZXQKIyBDT05GSUdfU1A1MTAwX1RDTyBpcyBub3Qg
c2V0CiMgQ09ORklHX1NCQ19GSVRQQzJfV0FUQ0hET0cgaXMgbm90IHNldAojIENPTkZJR19FVVJP
VEVDSF9XRFQgaXMgbm90IHNldAojIENPTkZJR19JQjcwMF9XRFQgaXMgbm90IHNldAojIENPTkZJ
R19JQk1BU1IgaXMgbm90IHNldAojIENPTkZJR19XQUZFUl9XRFQgaXMgbm90IHNldAojIENPTkZJ
R19JNjMwMEVTQl9XRFQgaXMgbm90IHNldAojIENPTkZJR19JRTZYWF9XRFQgaXMgbm90IHNldAoj
IENPTkZJR19JVENPX1dEVCBpcyBub3Qgc2V0CiMgQ09ORklHX0lUODcxMkZfV0RUIGlzIG5vdCBz
ZXQKIyBDT05GSUdfSVQ4N19XRFQgaXMgbm90IHNldAojIENPTkZJR19IUF9XQVRDSERPRyBpcyBu
b3Qgc2V0CiMgQ09ORklHX1NDMTIwMF9XRFQgaXMgbm90IHNldAojIENPTkZJR19QQzg3NDEzX1dE
VCBpcyBub3Qgc2V0CiMgQ09ORklHX05WX1RDTyBpcyBub3Qgc2V0CiMgQ09ORklHXzYwWFhfV0RU
IGlzIG5vdCBzZXQKIyBDT05GSUdfQ1BVNV9XRFQgaXMgbm90IHNldAojIENPTkZJR19TTVNDX1ND
SDMxMVhfV0RUIGlzIG5vdCBzZXQKIyBDT05GSUdfU01TQzM3Qjc4N19XRFQgaXMgbm90IHNldAoj
IENPTkZJR19UUU1YODZfV0RUIGlzIG5vdCBzZXQKIyBDT05GSUdfVklBX1dEVCBpcyBub3Qgc2V0
CiMgQ09ORklHX1c4MzYyN0hGX1dEVCBpcyBub3Qgc2V0CiMgQ09ORklHX1c4Mzg3N0ZfV0RUIGlz
IG5vdCBzZXQKIyBDT05GSUdfVzgzOTc3Rl9XRFQgaXMgbm90IHNldAojIENPTkZJR19NQUNIWl9X
RFQgaXMgbm90IHNldAojIENPTkZJR19TQkNfRVBYX0MzX1dBVENIRE9HIGlzIG5vdCBzZXQKIyBD
T05GSUdfSU5URUxfTUVJX1dEVCBpcyBub3Qgc2V0CiMgQ09ORklHX05JOTAzWF9XRFQgaXMgbm90
IHNldAojIENPTkZJR19OSUM3MDE4X1dEVCBpcyBub3Qgc2V0CiMgQ09ORklHX01FTl9BMjFfV0RU
IGlzIG5vdCBzZXQKCiMKIyBQQ0ktYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKIwojIENPTkZJR19QQ0lQ
Q1dBVENIRE9HIGlzIG5vdCBzZXQKIyBDT05GSUdfV0RUUENJIGlzIG5vdCBzZXQKCiMKIyBVU0It
YmFzZWQgV2F0Y2hkb2cgQ2FyZHMKIwpDT05GSUdfVVNCUENXQVRDSERPRz15CkNPTkZJR19TU0Jf
UE9TU0lCTEU9eQpDT05GSUdfU1NCPXkKQ09ORklHX1NTQl9QQ0lIT1NUX1BPU1NJQkxFPXkKIyBD
T05GSUdfU1NCX1BDSUhPU1QgaXMgbm90IHNldApDT05GSUdfU1NCX1BDTUNJQUhPU1RfUE9TU0lC
TEU9eQojIENPTkZJR19TU0JfUENNQ0lBSE9TVCBpcyBub3Qgc2V0CkNPTkZJR19TU0JfU0RJT0hP
U1RfUE9TU0lCTEU9eQojIENPTkZJR19TU0JfU0RJT0hPU1QgaXMgbm90IHNldAojIENPTkZJR19T
U0JfRFJJVkVSX0dQSU8gaXMgbm90IHNldApDT05GSUdfQkNNQV9QT1NTSUJMRT15CkNPTkZJR19C
Q01BPXkKQ09ORklHX0JDTUFfSE9TVF9QQ0lfUE9TU0lCTEU9eQojIENPTkZJR19CQ01BX0hPU1Rf
UENJIGlzIG5vdCBzZXQKIyBDT05GSUdfQkNNQV9IT1NUX1NPQyBpcyBub3Qgc2V0CiMgQ09ORklH
X0JDTUFfRFJJVkVSX1BDSSBpcyBub3Qgc2V0CiMgQ09ORklHX0JDTUFfRFJJVkVSX0dNQUNfQ01O
IGlzIG5vdCBzZXQKIyBDT05GSUdfQkNNQV9EUklWRVJfR1BJTyBpcyBub3Qgc2V0CiMgQ09ORklH
X0JDTUFfREVCVUcgaXMgbm90IHNldAoKIwojIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMK
IwpDT05GSUdfTUZEX0NPUkU9eQojIENPTkZJR19NRkRfQUNUODk0NUEgaXMgbm90IHNldAojIENP
TkZJR19NRkRfQVMzNzExIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX1NNUFJPIGlzIG5vdCBzZXQK
IyBDT05GSUdfTUZEX0FTMzcyMiBpcyBub3Qgc2V0CiMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBu
b3Qgc2V0CiMgQ09ORklHX01GRF9BQVQyODcwX0NPUkUgaXMgbm90IHNldAojIENPTkZJR19NRkRf
QVRNRUxfRkxFWENPTSBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9BVE1FTF9ITENEQyBpcyBub3Qg
c2V0CiMgQ09ORklHX01GRF9CQ001OTBYWCBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9CRDk1NzFN
V1YgaXMgbm90IHNldAojIENPTkZJR19NRkRfQVhQMjBYX0kyQyBpcyBub3Qgc2V0CiMgQ09ORklH
X01GRF9DUzQyTDQzX0kyQyBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9NQURFUkEgaXMgbm90IHNl
dAojIENPTkZJR19NRkRfTUFYNTk3MCBpcyBub3Qgc2V0CiMgQ09ORklHX1BNSUNfREE5MDNYIGlz
IG5vdCBzZXQKIyBDT05GSUdfTUZEX0RBOTA1Ml9TUEkgaXMgbm90IHNldAojIENPTkZJR19NRkRf
REE5MDUyX0kyQyBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9EQTkwNTUgaXMgbm90IHNldAojIENP
TkZJR19NRkRfREE5MDYyIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX0RBOTA2MyBpcyBub3Qgc2V0
CiMgQ09ORklHX01GRF9EQTkxNTAgaXMgbm90IHNldApDT05GSUdfTUZEX0RMTjI9eQojIENPTkZJ
R19NRkRfR0FURVdPUktTX0dTQyBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9NQzEzWFhYX1NQSSBp
cyBub3Qgc2V0CiMgQ09ORklHX01GRF9NQzEzWFhYX0kyQyBpcyBub3Qgc2V0CiMgQ09ORklHX01G
RF9NUDI2MjkgaXMgbm90IHNldAojIENPTkZJR19NRkRfSEk2NDIxX1BNSUMgaXMgbm90IHNldAoj
IENPTkZJR19NRkRfSU5URUxfUVVBUktfSTJDX0dQSU8gaXMgbm90IHNldAojIENPTkZJR19MUENf
SUNIIGlzIG5vdCBzZXQKIyBDT05GSUdfTFBDX1NDSCBpcyBub3Qgc2V0CiMgQ09ORklHX0lOVEVM
X1NPQ19QTUlDIGlzIG5vdCBzZXQKQ09ORklHX0lOVEVMX1NPQ19QTUlDX0NIVFdDPXkKIyBDT05G
SUdfSU5URUxfU09DX1BNSUNfQ0hURENfVEkgaXMgbm90IHNldAojIENPTkZJR19NRkRfSU5URUxf
TFBTU19BQ1BJIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX0lOVEVMX0xQU1NfUENJIGlzIG5vdCBz
ZXQKIyBDT05GSUdfTUZEX0lOVEVMX1BNQ19CWFQgaXMgbm90IHNldAojIENPTkZJR19NRkRfSVFT
NjJYIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX0pBTlpfQ01PRElPIGlzIG5vdCBzZXQKIyBDT05G
SUdfTUZEX0tFTVBMRCBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF84OFBNODAwIGlzIG5vdCBzZXQK
IyBDT05GSUdfTUZEXzg4UE04MDUgaXMgbm90IHNldAojIENPTkZJR19NRkRfODhQTTg2MFggaXMg
bm90IHNldAojIENPTkZJR19NRkRfTUFYMTQ1NzcgaXMgbm90IHNldAojIENPTkZJR19NRkRfTUFY
Nzc1NDEgaXMgbm90IHNldAojIENPTkZJR19NRkRfTUFYNzc2MjAgaXMgbm90IHNldAojIENPTkZJ
R19NRkRfTUFYNzc2NTAgaXMgbm90IHNldAojIENPTkZJR19NRkRfTUFYNzc2ODYgaXMgbm90IHNl
dAojIENPTkZJR19NRkRfTUFYNzc2OTMgaXMgbm90IHNldAojIENPTkZJR19NRkRfTUFYNzc3MTQg
aXMgbm90IHNldAojIENPTkZJR19NRkRfTUFYNzc4NDMgaXMgbm90IHNldAojIENPTkZJR19NRkRf
TUFYODkwNyBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9NQVg4OTI1IGlzIG5vdCBzZXQKIyBDT05G
SUdfTUZEX01BWDg5OTcgaXMgbm90IHNldAojIENPTkZJR19NRkRfTUFYODk5OCBpcyBub3Qgc2V0
CiMgQ09ORklHX01GRF9NVDYzNjAgaXMgbm90IHNldAojIENPTkZJR19NRkRfTVQ2MzcwIGlzIG5v
dCBzZXQKIyBDT05GSUdfTUZEX01UNjM5NyBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9NRU5GMjFC
TUMgaXMgbm90IHNldAojIENPTkZJR19NRkRfT0NFTE9UIGlzIG5vdCBzZXQKIyBDT05GSUdfRVpY
X1BDQVAgaXMgbm90IHNldAojIENPTkZJR19NRkRfQ1BDQVAgaXMgbm90IHNldApDT05GSUdfTUZE
X1ZJUEVSQk9BUkQ9eQojIENPTkZJR19NRkRfTlRYRUMgaXMgbm90IHNldApDT05GSUdfTUZEX1JF
VFU9eQojIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAojIENPTkZJR19NRkRfU1k3NjM2
QSBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9SREMzMjFYIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZE
X1JUNDgzMSBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9SVDUwMzMgaXMgbm90IHNldAojIENPTkZJ
R19NRkRfUlQ1MTIwIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX1JDNVQ1ODMgaXMgbm90IHNldAoj
IENPTkZJR19NRkRfUks4WFhfSTJDIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX1JLOFhYX1NQSSBp
cyBub3Qgc2V0CiMgQ09ORklHX01GRF9STjVUNjE4IGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX1NF
Q19DT1JFIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX1NJNDc2WF9DT1JFIGlzIG5vdCBzZXQKIyBD
T05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX1NLWTgxNDUyIGlzIG5vdCBz
ZXQKIyBDT05GSUdfTUZEX1NUTVBFIGlzIG5vdCBzZXQKQ09ORklHX01GRF9TWVNDT049eQojIENP
TkZJR19NRkRfTFAzOTQzIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX0xQODc4OCBpcyBub3Qgc2V0
CiMgQ09ORklHX01GRF9USV9MTVUgaXMgbm90IHNldAojIENPTkZJR19NRkRfUEFMTUFTIGlzIG5v
dCBzZXQKIyBDT05GSUdfVFBTNjEwNVggaXMgbm90IHNldAojIENPTkZJR19UUFM2NTAxMCBpcyBu
b3Qgc2V0CiMgQ09ORklHX1RQUzY1MDdYIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX1RQUzY1MDg2
IGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX1RQUzY1MDkwIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZE
X1RQUzY1MjE3IGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX1RJX0xQODczWCBpcyBub3Qgc2V0CiMg
Q09ORklHX01GRF9USV9MUDg3NTY1IGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX1RQUzY1MjE4IGlz
IG5vdCBzZXQKIyBDT05GSUdfTUZEX1RQUzY1MjE5IGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX1RQ
UzY1ODZYIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX1RQUzY1OTEwIGlzIG5vdCBzZXQKIyBDT05G
SUdfTUZEX1RQUzY1OTEyX0kyQyBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9UUFM2NTkxMl9TUEkg
aXMgbm90IHNldAojIENPTkZJR19NRkRfVFBTNjU5NF9JMkMgaXMgbm90IHNldAojIENPTkZJR19N
RkRfVFBTNjU5NF9TUEkgaXMgbm90IHNldApDT05GSUdfVFdMNDAzMF9DT1JFPXkKIyBDT05GSUdf
TUZEX1RXTDQwMzBfQVVESU8gaXMgbm90IHNldAojIENPTkZJR19UV0w2MDQwX0NPUkUgaXMgbm90
IHNldAojIENPTkZJR19NRkRfV0wxMjczX0NPUkUgaXMgbm90IHNldAojIENPTkZJR19NRkRfTE0z
NTMzIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX1RDMzU4OVggaXMgbm90IHNldAojIENPTkZJR19N
RkRfVFFNWDg2IGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX1ZYODU1IGlzIG5vdCBzZXQKIyBDT05G
SUdfTUZEX0xPQ0hOQUdBUiBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9BUklaT05BX0kyQyBpcyBu
b3Qgc2V0CiMgQ09ORklHX01GRF9BUklaT05BX1NQSSBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9X
TTg0MDAgaXMgbm90IHNldAojIENPTkZJR19NRkRfV004MzFYX0kyQyBpcyBub3Qgc2V0CiMgQ09O
RklHX01GRF9XTTgzMVhfU1BJIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMg
bm90IHNldAojIENPTkZJR19NRkRfV004OTk0IGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX1JPSE1f
QkQ3MThYWCBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9ST0hNX0JENzE4MjggaXMgbm90IHNldAoj
IENPTkZJR19NRkRfUk9ITV9CRDk1N1hNVUYgaXMgbm90IHNldAojIENPTkZJR19NRkRfU1RQTUlD
MSBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9TVE1GWCBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9B
VEMyNjBYX0kyQyBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9RQ09NX1BNODAwOCBpcyBub3Qgc2V0
CiMgQ09ORklHX01GRF9JTlRFTF9NMTBfQk1DX1NQSSBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9S
U01VX0kyQyBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9SU01VX1NQSSBpcyBub3Qgc2V0CiMgZW5k
IG9mIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKCkNPTkZJR19SRUdVTEFUT1I9eQojIENP
TkZJR19SRUdVTEFUT1JfREVCVUcgaXMgbm90IHNldAojIENPTkZJR19SRUdVTEFUT1JfRklYRURf
Vk9MVEFHRSBpcyBub3Qgc2V0CiMgQ09ORklHX1JFR1VMQVRPUl9WSVJUVUFMX0NPTlNVTUVSIGlz
IG5vdCBzZXQKIyBDT05GSUdfUkVHVUxBVE9SX1VTRVJTUEFDRV9DT05TVU1FUiBpcyBub3Qgc2V0
CiMgQ09ORklHX1JFR1VMQVRPUl9ORVRMSU5LX0VWRU5UUyBpcyBub3Qgc2V0CiMgQ09ORklHX1JF
R1VMQVRPUl84OFBHODZYIGlzIG5vdCBzZXQKIyBDT05GSUdfUkVHVUxBVE9SX0FDVDg4NjUgaXMg
bm90IHNldAojIENPTkZJR19SRUdVTEFUT1JfQUQ1Mzk4IGlzIG5vdCBzZXQKIyBDT05GSUdfUkVH
VUxBVE9SX0FXMzc1MDMgaXMgbm90IHNldAojIENPTkZJR19SRUdVTEFUT1JfREE5MTIxIGlzIG5v
dCBzZXQKIyBDT05GSUdfUkVHVUxBVE9SX0RBOTIxMCBpcyBub3Qgc2V0CiMgQ09ORklHX1JFR1VM
QVRPUl9EQTkyMTEgaXMgbm90IHNldAojIENPTkZJR19SRUdVTEFUT1JfRkFONTM1NTUgaXMgbm90
IHNldAojIENPTkZJR19SRUdVTEFUT1JfRkFONTM4ODAgaXMgbm90IHNldAojIENPTkZJR19SRUdV
TEFUT1JfR1BJTyBpcyBub3Qgc2V0CiMgQ09ORklHX1JFR1VMQVRPUl9JU0w5MzA1IGlzIG5vdCBz
ZXQKIyBDT05GSUdfUkVHVUxBVE9SX0lTTDYyNzFBIGlzIG5vdCBzZXQKIyBDT05GSUdfUkVHVUxB
VE9SX0xQMzk3MSBpcyBub3Qgc2V0CiMgQ09ORklHX1JFR1VMQVRPUl9MUDM5NzIgaXMgbm90IHNl
dAojIENPTkZJR19SRUdVTEFUT1JfTFA4NzJYIGlzIG5vdCBzZXQKIyBDT05GSUdfUkVHVUxBVE9S
X0xQODc1NSBpcyBub3Qgc2V0CiMgQ09ORklHX1JFR1VMQVRPUl9MVEMzNTg5IGlzIG5vdCBzZXQK
IyBDT05GSUdfUkVHVUxBVE9SX0xUQzM2NzYgaXMgbm90IHNldAojIENPTkZJR19SRUdVTEFUT1Jf
TUFYMTU4NiBpcyBub3Qgc2V0CiMgQ09ORklHX1JFR1VMQVRPUl9NQVg3NzUwMyBpcyBub3Qgc2V0
CiMgQ09ORklHX1JFR1VMQVRPUl9NQVg3Nzg1NyBpcyBub3Qgc2V0CiMgQ09ORklHX1JFR1VMQVRP
Ul9NQVg4NjQ5IGlzIG5vdCBzZXQKIyBDT05GSUdfUkVHVUxBVE9SX01BWDg2NjAgaXMgbm90IHNl
dAojIENPTkZJR19SRUdVTEFUT1JfTUFYODg5MyBpcyBub3Qgc2V0CiMgQ09ORklHX1JFR1VMQVRP
Ul9NQVg4OTUyIGlzIG5vdCBzZXQKIyBDT05GSUdfUkVHVUxBVE9SX01BWDIwMDg2IGlzIG5vdCBz
ZXQKIyBDT05GSUdfUkVHVUxBVE9SX01BWDIwNDExIGlzIG5vdCBzZXQKIyBDT05GSUdfUkVHVUxB
VE9SX01BWDc3ODI2IGlzIG5vdCBzZXQKIyBDT05GSUdfUkVHVUxBVE9SX01DUDE2NTAyIGlzIG5v
dCBzZXQKIyBDT05GSUdfUkVHVUxBVE9SX01QNTQxNiBpcyBub3Qgc2V0CiMgQ09ORklHX1JFR1VM
QVRPUl9NUDg4NTkgaXMgbm90IHNldAojIENPTkZJR19SRUdVTEFUT1JfTVA4ODZYIGlzIG5vdCBz
ZXQKIyBDT05GSUdfUkVHVUxBVE9SX01QUTc5MjAgaXMgbm90IHNldAojIENPTkZJR19SRUdVTEFU
T1JfTVQ2MzExIGlzIG5vdCBzZXQKIyBDT05GSUdfUkVHVUxBVE9SX1BDQTk0NTAgaXMgbm90IHNl
dAojIENPTkZJR19SRUdVTEFUT1JfUEY4WDAwIGlzIG5vdCBzZXQKIyBDT05GSUdfUkVHVUxBVE9S
X1BGVVpFMTAwIGlzIG5vdCBzZXQKIyBDT05GSUdfUkVHVUxBVE9SX1BWODgwNjAgaXMgbm90IHNl
dAojIENPTkZJR19SRUdVTEFUT1JfUFY4ODA4MCBpcyBub3Qgc2V0CiMgQ09ORklHX1JFR1VMQVRP
Ul9QVjg4MDkwIGlzIG5vdCBzZXQKIyBDT05GSUdfUkVHVUxBVE9SX1JBQTIxNTMwMCBpcyBub3Qg
c2V0CiMgQ09ORklHX1JFR1VMQVRPUl9SQVNQQkVSUllQSV9UT1VDSFNDUkVFTl9BVFRJTlkgaXMg
bm90IHNldAojIENPTkZJR19SRUdVTEFUT1JfUlQ0ODAxIGlzIG5vdCBzZXQKIyBDT05GSUdfUkVH
VUxBVE9SX1JUNDgwMyBpcyBub3Qgc2V0CiMgQ09ORklHX1JFR1VMQVRPUl9SVDUxOTBBIGlzIG5v
dCBzZXQKIyBDT05GSUdfUkVHVUxBVE9SX1JUNTczOSBpcyBub3Qgc2V0CiMgQ09ORklHX1JFR1VM
QVRPUl9SVDU3NTkgaXMgbm90IHNldAojIENPTkZJR19SRUdVTEFUT1JfUlQ2MTYwIGlzIG5vdCBz
ZXQKIyBDT05GSUdfUkVHVUxBVE9SX1JUNjE5MCBpcyBub3Qgc2V0CiMgQ09ORklHX1JFR1VMQVRP
Ul9SVDYyNDUgaXMgbm90IHNldAojIENPTkZJR19SRUdVTEFUT1JfUlRRMjEzNCBpcyBub3Qgc2V0
CiMgQ09ORklHX1JFR1VMQVRPUl9SVE1WMjAgaXMgbm90IHNldAojIENPTkZJR19SRUdVTEFUT1Jf
UlRRNjc1MiBpcyBub3Qgc2V0CiMgQ09ORklHX1JFR1VMQVRPUl9SVFEyMjA4IGlzIG5vdCBzZXQK
IyBDT05GSUdfUkVHVUxBVE9SX1NMRzUxMDAwIGlzIG5vdCBzZXQKIyBDT05GSUdfUkVHVUxBVE9S
X1NZODEwNkEgaXMgbm90IHNldAojIENPTkZJR19SRUdVTEFUT1JfU1k4ODI0WCBpcyBub3Qgc2V0
CiMgQ09ORklHX1JFR1VMQVRPUl9TWTg4MjdOIGlzIG5vdCBzZXQKIyBDT05GSUdfUkVHVUxBVE9S
X1RQUzUxNjMyIGlzIG5vdCBzZXQKIyBDT05GSUdfUkVHVUxBVE9SX1RQUzYyMzYwIGlzIG5vdCBz
ZXQKIyBDT05GSUdfUkVHVUxBVE9SX1RQUzYyODZYIGlzIG5vdCBzZXQKIyBDT05GSUdfUkVHVUxB
VE9SX1RQUzYyODdYIGlzIG5vdCBzZXQKIyBDT05GSUdfUkVHVUxBVE9SX1RQUzY1MDIzIGlzIG5v
dCBzZXQKIyBDT05GSUdfUkVHVUxBVE9SX1RQUzY1MDdYIGlzIG5vdCBzZXQKIyBDT05GSUdfUkVH
VUxBVE9SX1RQUzY1MTMyIGlzIG5vdCBzZXQKIyBDT05GSUdfUkVHVUxBVE9SX1RQUzY1MjRYIGlz
IG5vdCBzZXQKQ09ORklHX1JFR1VMQVRPUl9UV0w0MDMwPXkKIyBDT05GSUdfUkVHVUxBVE9SX1ZD
VFJMIGlzIG5vdCBzZXQKQ09ORklHX1JDX0NPUkU9eQojIENPTkZJR19MSVJDIGlzIG5vdCBzZXQK
IyBDT05GSUdfUkNfTUFQIGlzIG5vdCBzZXQKIyBDT05GSUdfUkNfREVDT0RFUlMgaXMgbm90IHNl
dApDT05GSUdfUkNfREVWSUNFUz15CiMgQ09ORklHX0lSX0VORSBpcyBub3Qgc2V0CiMgQ09ORklH
X0lSX0ZJTlRFSyBpcyBub3Qgc2V0CiMgQ09ORklHX0lSX0dQSU9fQ0lSIGlzIG5vdCBzZXQKIyBD
T05GSUdfSVJfSElYNUhEMiBpcyBub3Qgc2V0CkNPTkZJR19JUl9JR09SUExVR1VTQj15CkNPTkZJ
R19JUl9JR1VBTkE9eQpDT05GSUdfSVJfSU1PTj15CiMgQ09ORklHX0lSX0lNT05fUkFXIGlzIG5v
dCBzZXQKIyBDT05GSUdfSVJfSVRFX0NJUiBpcyBub3Qgc2V0CkNPTkZJR19JUl9NQ0VVU0I9eQoj
IENPTkZJR19JUl9OVVZPVE9OIGlzIG5vdCBzZXQKQ09ORklHX0lSX1JFRFJBVDM9eQojIENPTkZJ
R19JUl9TRVJJQUwgaXMgbm90IHNldApDT05GSUdfSVJfU1RSRUFNWkFQPXkKIyBDT05GSUdfSVJf
VE9ZIGlzIG5vdCBzZXQKQ09ORklHX0lSX1RUVVNCSVI9eQojIENPTkZJR19JUl9XSU5CT05EX0NJ
UiBpcyBub3Qgc2V0CkNPTkZJR19SQ19BVElfUkVNT1RFPXkKIyBDT05GSUdfUkNfTE9PUEJBQ0sg
aXMgbm90IHNldAojIENPTkZJR19SQ19YQk9YX0RWRCBpcyBub3Qgc2V0CkNPTkZJR19DRUNfQ09S
RT15CgojCiMgQ0VDIHN1cHBvcnQKIwojIENPTkZJR19NRURJQV9DRUNfUkMgaXMgbm90IHNldApD
T05GSUdfTUVESUFfQ0VDX1NVUFBPUlQ9eQojIENPTkZJR19DRUNfQ0g3MzIyIGlzIG5vdCBzZXQK
IyBDT05GSUdfQ0VDX0dQSU8gaXMgbm90IHNldAojIENPTkZJR19DRUNfU0VDTyBpcyBub3Qgc2V0
CkNPTkZJR19VU0JfUFVMU0U4X0NFQz15CkNPTkZJR19VU0JfUkFJTlNIQURPV19DRUM9eQojIGVu
ZCBvZiBDRUMgc3VwcG9ydAoKQ09ORklHX01FRElBX1NVUFBPUlQ9eQojIENPTkZJR19NRURJQV9T
VVBQT1JUX0ZJTFRFUiBpcyBub3Qgc2V0CiMgQ09ORklHX01FRElBX1NVQkRSVl9BVVRPU0VMRUNU
IGlzIG5vdCBzZXQKCiMKIyBNZWRpYSBkZXZpY2UgdHlwZXMKIwpDT05GSUdfTUVESUFfQ0FNRVJB
X1NVUFBPUlQ9eQpDT05GSUdfTUVESUFfQU5BTE9HX1RWX1NVUFBPUlQ9eQpDT05GSUdfTUVESUFf
RElHSVRBTF9UVl9TVVBQT1JUPXkKQ09ORklHX01FRElBX1JBRElPX1NVUFBPUlQ9eQpDT05GSUdf
TUVESUFfU0RSX1NVUFBPUlQ9eQpDT05GSUdfTUVESUFfUExBVEZPUk1fU1VQUE9SVD15CkNPTkZJ
R19NRURJQV9URVNUX1NVUFBPUlQ9eQojIGVuZCBvZiBNZWRpYSBkZXZpY2UgdHlwZXMKCiMKIyBN
ZWRpYSBjb3JlIHN1cHBvcnQKIwpDT05GSUdfVklERU9fREVWPXkKQ09ORklHX01FRElBX0NPTlRS
T0xMRVI9eQpDT05GSUdfRFZCX0NPUkU9eQojIGVuZCBvZiBNZWRpYSBjb3JlIHN1cHBvcnQKCiMK
IyBWaWRlbzRMaW51eCBvcHRpb25zCiMKQ09ORklHX1ZJREVPX1Y0TDJfSTJDPXkKIyBDT05GSUdf
VklERU9fQURWX0RFQlVHIGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9fRklYRURfTUlOT1JfUkFO
R0VTIGlzIG5vdCBzZXQKQ09ORklHX1ZJREVPX1RVTkVSPXkKIyBlbmQgb2YgVmlkZW80TGludXgg
b3B0aW9ucwoKIwojIE1lZGlhIGNvbnRyb2xsZXIgb3B0aW9ucwojCkNPTkZJR19NRURJQV9DT05U
Uk9MTEVSX0RWQj15CiMgZW5kIG9mIE1lZGlhIGNvbnRyb2xsZXIgb3B0aW9ucwoKIwojIERpZ2l0
YWwgVFYgb3B0aW9ucwojCiMgQ09ORklHX0RWQl9NTUFQIGlzIG5vdCBzZXQKIyBDT05GSUdfRFZC
X05FVCBpcyBub3Qgc2V0CkNPTkZJR19EVkJfTUFYX0FEQVBURVJTPTE2CiMgQ09ORklHX0RWQl9E
WU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CiMgQ09ORklHX0RWQl9ERU1VWF9TRUNUSU9OX0xPU1Nf
TE9HIGlzIG5vdCBzZXQKIyBDT05GSUdfRFZCX1VMRV9ERUJVRyBpcyBub3Qgc2V0CiMgZW5kIG9m
IERpZ2l0YWwgVFYgb3B0aW9ucwoKIwojIE1lZGlhIGRyaXZlcnMKIwoKIwojIE1lZGlhIGRyaXZl
cnMKIwpDT05GSUdfTUVESUFfVVNCX1NVUFBPUlQ9eQoKIwojIFdlYmNhbSBkZXZpY2VzCiMKQ09O
RklHX1VTQl9HU1BDQT15CkNPTkZJR19VU0JfR1NQQ0FfQkVOUT15CkNPTkZJR19VU0JfR1NQQ0Ff
Q09ORVg9eQpDT05GSUdfVVNCX0dTUENBX0NQSUExPXkKQ09ORklHX1VTQl9HU1BDQV9EVENTMDMz
PXkKQ09ORklHX1VTQl9HU1BDQV9FVE9NUz15CkNPTkZJR19VU0JfR1NQQ0FfRklORVBJWD15CkNP
TkZJR19VU0JfR1NQQ0FfSkVJTElOSj15CkNPTkZJR19VU0JfR1NQQ0FfSkwyMDA1QkNEPXkKQ09O
RklHX1VTQl9HU1BDQV9LSU5FQ1Q9eQpDT05GSUdfVVNCX0dTUENBX0tPTklDQT15CkNPTkZJR19V
U0JfR1NQQ0FfTUFSUz15CkNPTkZJR19VU0JfR1NQQ0FfTVI5NzMxMEE9eQpDT05GSUdfVVNCX0dT
UENBX05XODBYPXkKQ09ORklHX1VTQl9HU1BDQV9PVjUxOT15CkNPTkZJR19VU0JfR1NQQ0FfT1Y1
MzQ9eQpDT05GSUdfVVNCX0dTUENBX09WNTM0Xzk9eQpDT05GSUdfVVNCX0dTUENBX1BBQzIwNz15
CkNPTkZJR19VU0JfR1NQQ0FfUEFDNzMwMj15CkNPTkZJR19VU0JfR1NQQ0FfUEFDNzMxMT15CkNP
TkZJR19VU0JfR1NQQ0FfU0U0MDE9eQpDT05GSUdfVVNCX0dTUENBX1NOOUMyMDI4PXkKQ09ORklH
X1VTQl9HU1BDQV9TTjlDMjBYPXkKQ09ORklHX1VTQl9HU1BDQV9TT05JWEI9eQpDT05GSUdfVVNC
X0dTUENBX1NPTklYSj15CkNPTkZJR19VU0JfR1NQQ0FfU1BDQTE1Mjg9eQpDT05GSUdfVVNCX0dT
UENBX1NQQ0E1MDA9eQpDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDE9eQpDT05GSUdfVVNCX0dTUENB
X1NQQ0E1MDU9eQpDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDY9eQpDT05GSUdfVVNCX0dTUENBX1NQ
Q0E1MDg9eQpDT05GSUdfVVNCX0dTUENBX1NQQ0E1NjE9eQpDT05GSUdfVVNCX0dTUENBX1NROTA1
PXkKQ09ORklHX1VTQl9HU1BDQV9TUTkwNUM9eQpDT05GSUdfVVNCX0dTUENBX1NROTMwWD15CkNP
TkZJR19VU0JfR1NQQ0FfU1RLMDE0PXkKQ09ORklHX1VTQl9HU1BDQV9TVEsxMTM1PXkKQ09ORklH
X1VTQl9HU1BDQV9TVFYwNjgwPXkKQ09ORklHX1VTQl9HU1BDQV9TVU5QTFVTPXkKQ09ORklHX1VT
Ql9HU1BDQV9UNjEzPXkKQ09ORklHX1VTQl9HU1BDQV9UT1BSTz15CkNPTkZJR19VU0JfR1NQQ0Ff
VE9VUFRFSz15CkNPTkZJR19VU0JfR1NQQ0FfVFY4NTMyPXkKQ09ORklHX1VTQl9HU1BDQV9WQzAz
Mlg9eQpDT05GSUdfVVNCX0dTUENBX1ZJQ0FNPXkKQ09ORklHX1VTQl9HU1BDQV9YSVJMSU5LX0NJ
VD15CkNPTkZJR19VU0JfR1NQQ0FfWkMzWFg9eQpDT05GSUdfVVNCX0dMODYwPXkKQ09ORklHX1VT
Ql9NNTYwMj15CkNPTkZJR19VU0JfU1RWMDZYWD15CkNPTkZJR19VU0JfUFdDPXkKIyBDT05GSUdf
VVNCX1BXQ19ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19VU0JfUFdDX0lOUFVUX0VWREVWPXkKQ09O
RklHX1VTQl9TMjI1NT15CkNPTkZJR19WSURFT19VU0JUVj15CkNPTkZJR19VU0JfVklERU9fQ0xB
U1M9eQpDT05GSUdfVVNCX1ZJREVPX0NMQVNTX0lOUFVUX0VWREVWPXkKCiMKIyBBbmFsb2cgVFYg
VVNCIGRldmljZXMKIwpDT05GSUdfVklERU9fR083MDA3PXkKQ09ORklHX1ZJREVPX0dPNzAwN19V
U0I9eQpDT05GSUdfVklERU9fR083MDA3X0xPQURFUj15CkNPTkZJR19WSURFT19HTzcwMDdfVVNC
X1MyMjUwX0JPQVJEPXkKQ09ORklHX1ZJREVPX0hEUFZSPXkKQ09ORklHX1ZJREVPX1BWUlVTQjI9
eQpDT05GSUdfVklERU9fUFZSVVNCMl9TWVNGUz15CkNPTkZJR19WSURFT19QVlJVU0IyX0RWQj15
CiMgQ09ORklHX1ZJREVPX1BWUlVTQjJfREVCVUdJRkMgaXMgbm90IHNldApDT05GSUdfVklERU9f
U1RLMTE2MD15CgojCiMgQW5hbG9nL2RpZ2l0YWwgVFYgVVNCIGRldmljZXMKIwpDT05GSUdfVklE
RU9fQVUwODI4PXkKQ09ORklHX1ZJREVPX0FVMDgyOF9WNEwyPXkKQ09ORklHX1ZJREVPX0FVMDgy
OF9SQz15CkNPTkZJR19WSURFT19DWDIzMVhYPXkKQ09ORklHX1ZJREVPX0NYMjMxWFhfUkM9eQpD
T05GSUdfVklERU9fQ1gyMzFYWF9BTFNBPXkKQ09ORklHX1ZJREVPX0NYMjMxWFhfRFZCPXkKCiMK
IyBEaWdpdGFsIFRWIFVTQiBkZXZpY2VzCiMKQ09ORklHX0RWQl9BUzEwMj15CkNPTkZJR19EVkJf
QjJDMl9GTEVYQ09QX1VTQj15CiMgQ09ORklHX0RWQl9CMkMyX0ZMRVhDT1BfVVNCX0RFQlVHIGlz
IG5vdCBzZXQKQ09ORklHX0RWQl9VU0JfVjI9eQpDT05GSUdfRFZCX1VTQl9BRjkwMTU9eQpDT05G
SUdfRFZCX1VTQl9BRjkwMzU9eQpDT05GSUdfRFZCX1VTQl9BTllTRUU9eQpDT05GSUdfRFZCX1VT
Ql9BVTY2MTA9eQpDT05GSUdfRFZCX1VTQl9BWjYwMDc9eQpDT05GSUdfRFZCX1VTQl9DRTYyMzA9
eQpDT05GSUdfRFZCX1VTQl9EVkJTS1k9eQpDT05GSUdfRFZCX1VTQl9FQzE2OD15CkNPTkZJR19E
VkJfVVNCX0dMODYxPXkKQ09ORklHX0RWQl9VU0JfTE1FMjUxMD15CkNPTkZJR19EVkJfVVNCX01Y
TDExMVNGPXkKQ09ORklHX0RWQl9VU0JfUlRMMjhYWFU9eQpDT05GSUdfRFZCX1VTQl9aRDEzMDE9
eQpDT05GSUdfRFZCX1VTQj15CiMgQ09ORklHX0RWQl9VU0JfREVCVUcgaXMgbm90IHNldApDT05G
SUdfRFZCX1VTQl9BODAwPXkKQ09ORklHX0RWQl9VU0JfQUY5MDA1PXkKQ09ORklHX0RWQl9VU0Jf
QUY5MDA1X1JFTU9URT15CkNPTkZJR19EVkJfVVNCX0FaNjAyNz15CkNPTkZJR19EVkJfVVNCX0NJ
TkVSR1lfVDI9eQpDT05GSUdfRFZCX1VTQl9DWFVTQj15CiMgQ09ORklHX0RWQl9VU0JfQ1hVU0Jf
QU5BTE9HIGlzIG5vdCBzZXQKQ09ORklHX0RWQl9VU0JfRElCMDcwMD15CkNPTkZJR19EVkJfVVNC
X0RJQjMwMDBNQz15CkNPTkZJR19EVkJfVVNCX0RJQlVTQl9NQj15CiMgQ09ORklHX0RWQl9VU0Jf
RElCVVNCX01CX0ZBVUxUWSBpcyBub3Qgc2V0CkNPTkZJR19EVkJfVVNCX0RJQlVTQl9NQz15CkNP
TkZJR19EVkJfVVNCX0RJR0lUVj15CkNPTkZJR19EVkJfVVNCX0RUVDIwMFU9eQpDT05GSUdfRFZC
X1VTQl9EVFY1MTAwPXkKQ09ORklHX0RWQl9VU0JfRFcyMTAyPXkKQ09ORklHX0RWQl9VU0JfR1A4
UFNLPXkKQ09ORklHX0RWQl9VU0JfTTkyMFg9eQpDT05GSUdfRFZCX1VTQl9OT1ZBX1RfVVNCMj15
CkNPTkZJR19EVkJfVVNCX09QRVJBMT15CkNPTkZJR19EVkJfVVNCX1BDVFY0NTJFPXkKQ09ORklH
X0RWQl9VU0JfVEVDSE5JU0FUX1VTQjI9eQpDT05GSUdfRFZCX1VTQl9UVFVTQjI9eQpDT05GSUdf
RFZCX1VTQl9VTVRfMDEwPXkKQ09ORklHX0RWQl9VU0JfVlA3MDJYPXkKQ09ORklHX0RWQl9VU0Jf
VlA3MDQ1PXkKQ09ORklHX1NNU19VU0JfRFJWPXkKQ09ORklHX0RWQl9UVFVTQl9CVURHRVQ9eQpD
T05GSUdfRFZCX1RUVVNCX0RFQz15CgojCiMgV2ViY2FtLCBUViAoYW5hbG9nL2RpZ2l0YWwpIFVT
QiBkZXZpY2VzCiMKQ09ORklHX1ZJREVPX0VNMjhYWD15CkNPTkZJR19WSURFT19FTTI4WFhfVjRM
Mj15CkNPTkZJR19WSURFT19FTTI4WFhfQUxTQT15CkNPTkZJR19WSURFT19FTTI4WFhfRFZCPXkK
Q09ORklHX1ZJREVPX0VNMjhYWF9SQz15CgojCiMgU29mdHdhcmUgZGVmaW5lZCByYWRpbyBVU0Ig
ZGV2aWNlcwojCkNPTkZJR19VU0JfQUlSU1BZPXkKQ09ORklHX1VTQl9IQUNLUkY9eQpDT05GSUdf
VVNCX01TSTI1MDA9eQpDT05GSUdfTUVESUFfUENJX1NVUFBPUlQ9eQoKIwojIE1lZGlhIGNhcHR1
cmUgc3VwcG9ydAojCiMgQ09ORklHX1ZJREVPX1NPTE82WDEwIGlzIG5vdCBzZXQKIyBDT05GSUdf
VklERU9fVFc1ODY0IGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9fVFc2OCBpcyBub3Qgc2V0CiMg
Q09ORklHX1ZJREVPX1RXNjg2WCBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX1pPUkFOIGlzIG5v
dCBzZXQKCiMKIyBNZWRpYSBjYXB0dXJlL2FuYWxvZyBUViBzdXBwb3J0CiMKIyBDT05GSUdfVklE
RU9fRFQzMTU1IGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9fSVZUViBpcyBub3Qgc2V0CiMgQ09O
RklHX1ZJREVPX0hFWElVTV9HRU1JTkkgaXMgbm90IHNldAojIENPTkZJR19WSURFT19IRVhJVU1f
T1JJT04gaXMgbm90IHNldAojIENPTkZJR19WSURFT19NWEIgaXMgbm90IHNldAoKIwojIE1lZGlh
IGNhcHR1cmUvYW5hbG9nL2h5YnJpZCBUViBzdXBwb3J0CiMKIyBDT05GSUdfVklERU9fQlQ4NDgg
aXMgbm90IHNldAojIENPTkZJR19WSURFT19DWDE4IGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9f
Q1gyMzg4NSBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX0NYMjU4MjEgaXMgbm90IHNldAojIENP
TkZJR19WSURFT19DWDg4IGlzIG5vdCBzZXQKQ09ORklHX1ZJREVPX1NBQTcxMzQ9eQojIENPTkZJ
R19WSURFT19TQUE3MTM0X0FMU0EgaXMgbm90IHNldAojIENPTkZJR19WSURFT19TQUE3MTM0X1JD
IGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9fU0FBNzEzNF9EVkIgaXMgbm90IHNldApDT05GSUdf
VklERU9fU0FBNzEzNF9HTzcwMDc9eQojIENPTkZJR19WSURFT19TQUE3MTY0IGlzIG5vdCBzZXQK
CiMKIyBNZWRpYSBkaWdpdGFsIFRWIFBDSSBBZGFwdGVycwojCkNPTkZJR19EVkJfQjJDMl9GTEVY
Q09QX1BDST15CiMgQ09ORklHX0RWQl9CMkMyX0ZMRVhDT1BfUENJX0RFQlVHIGlzIG5vdCBzZXQK
IyBDT05GSUdfRFZCX0REQlJJREdFIGlzIG5vdCBzZXQKIyBDT05GSUdfRFZCX0RNMTEwNSBpcyBu
b3Qgc2V0CiMgQ09ORklHX01BTlRJU19DT1JFIGlzIG5vdCBzZXQKIyBDT05GSUdfRFZCX05FVFVQ
X1VOSURWQiBpcyBub3Qgc2V0CiMgQ09ORklHX0RWQl9OR0VORSBpcyBub3Qgc2V0CiMgQ09ORklH
X0RWQl9QTFVUTzIgaXMgbm90IHNldAojIENPTkZJR19EVkJfUFQxIGlzIG5vdCBzZXQKIyBDT05G
SUdfRFZCX1BUMyBpcyBub3Qgc2V0CiMgQ09ORklHX0RWQl9TTUlQQ0lFIGlzIG5vdCBzZXQKIyBD
T05GSUdfRFZCX0JVREdFVF9DT1JFIGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9fSVBVM19DSU8y
IGlzIG5vdCBzZXQKIyBDT05GSUdfSU5URUxfVlNDIGlzIG5vdCBzZXQKIyBDT05GSUdfSVBVX0JS
SURHRSBpcyBub3Qgc2V0CkNPTkZJR19SQURJT19BREFQVEVSUz15CiMgQ09ORklHX1JBRElPX01B
WElSQURJTyBpcyBub3Qgc2V0CiMgQ09ORklHX1JBRElPX1NBQTc3MDZIIGlzIG5vdCBzZXQKQ09O
RklHX1JBRElPX1NIQVJLPXkKQ09ORklHX1JBRElPX1NIQVJLMj15CkNPTkZJR19SQURJT19TSTQ3
MTM9eQpDT05GSUdfUkFESU9fVEVBNTc1WD15CiMgQ09ORklHX1JBRElPX1RFQTU3NjQgaXMgbm90
IHNldAojIENPTkZJR19SQURJT19URUY2ODYyIGlzIG5vdCBzZXQKIyBDT05GSUdfUkFESU9fV0wx
MjczIGlzIG5vdCBzZXQKQ09ORklHX1VTQl9EU0JSPXkKQ09ORklHX1VTQl9LRUVORT15CkNPTkZJ
R19VU0JfTUE5MDE9eQpDT05GSUdfVVNCX01SODAwPXkKQ09ORklHX1VTQl9SQVJFTU9OTz15CkNP
TkZJR19SQURJT19TSTQ3MFg9eQpDT05GSUdfVVNCX1NJNDcwWD15CiMgQ09ORklHX0kyQ19TSTQ3
MFggaXMgbm90IHNldApDT05GSUdfVVNCX1NJNDcxMz15CiMgQ09ORklHX1BMQVRGT1JNX1NJNDcx
MyBpcyBub3Qgc2V0CkNPTkZJR19JMkNfU0k0NzEzPXkKIyBDT05GSUdfTUVESUFfUExBVEZPUk1f
RFJJVkVSUyBpcyBub3Qgc2V0CgojCiMgTU1DL1NESU8gRFZCIGFkYXB0ZXJzCiMKQ09ORklHX1NN
U19TRElPX0RSVj15CiMgQ09ORklHX1Y0TF9URVNUX0RSSVZFUlMgaXMgbm90IHNldAojIENPTkZJ
R19EVkJfVEVTVF9EUklWRVJTIGlzIG5vdCBzZXQKQ09ORklHX01FRElBX0NPTU1PTl9PUFRJT05T
PXkKCiMKIyBjb21tb24gZHJpdmVyIG9wdGlvbnMKIwpDT05GSUdfQ1lQUkVTU19GSVJNV0FSRT15
CkNPTkZJR19UVFBDSV9FRVBST009eQpDT05GSUdfVVZDX0NPTU1PTj15CkNPTkZJR19WSURFT19D
WDIzNDFYPXkKQ09ORklHX1ZJREVPX1RWRUVQUk9NPXkKQ09ORklHX0RWQl9CMkMyX0ZMRVhDT1A9
eQpDT05GSUdfU01TX1NJQU5PX01EVFY9eQpDT05GSUdfU01TX1NJQU5PX1JDPXkKQ09ORklHX1NN
U19TSUFOT19ERUJVR0ZTPXkKQ09ORklHX1ZJREVPQlVGMl9DT1JFPXkKQ09ORklHX1ZJREVPQlVG
Ml9WNEwyPXkKQ09ORklHX1ZJREVPQlVGMl9NRU1PUFM9eQpDT05GSUdfVklERU9CVUYyX1ZNQUxM
T0M9eQpDT05GSUdfVklERU9CVUYyX0RNQV9TRz15CiMgZW5kIG9mIE1lZGlhIGRyaXZlcnMKCiMK
IyBNZWRpYSBhbmNpbGxhcnkgZHJpdmVycwojCkNPTkZJR19NRURJQV9BVFRBQ0g9eQojIENPTkZJ
R19WSURFT19JUl9JMkMgaXMgbm90IHNldAojIENPTkZJR19WSURFT19DQU1FUkFfU0VOU09SIGlz
IG5vdCBzZXQKCiMKIyBDYW1lcmEgSVNQcwojCiMgQ09ORklHX1ZJREVPX1RIUDczMTIgaXMgbm90
IHNldAojIGVuZCBvZiBDYW1lcmEgSVNQcwoKIwojIExlbnMgZHJpdmVycwojCiMgQ09ORklHX1ZJ
REVPX0FENTgyMCBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX0FLNzM3NSBpcyBub3Qgc2V0CiMg
Q09ORklHX1ZJREVPX0RXOTcxNCBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX0RXOTcxOSBpcyBu
b3Qgc2V0CiMgQ09ORklHX1ZJREVPX0RXOTc2OCBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX0RX
OTgwN19WQ00gaXMgbm90IHNldAojIGVuZCBvZiBMZW5zIGRyaXZlcnMKCiMKIyBGbGFzaCBkZXZp
Y2VzCiMKIyBDT05GSUdfVklERU9fQURQMTY1MyBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX0xN
MzU2MCBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX0xNMzY0NiBpcyBub3Qgc2V0CiMgZW5kIG9m
IEZsYXNoIGRldmljZXMKCiMKIyBBdWRpbyBkZWNvZGVycywgcHJvY2Vzc29ycyBhbmQgbWl4ZXJz
CiMKIyBDT05GSUdfVklERU9fQ1MzMzA4IGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9fQ1M1MzQ1
IGlzIG5vdCBzZXQKQ09ORklHX1ZJREVPX0NTNTNMMzJBPXkKQ09ORklHX1ZJREVPX01TUDM0MDA9
eQojIENPTkZJR19WSURFT19TT05ZX0JURl9NUFggaXMgbm90IHNldAojIENPTkZJR19WSURFT19U
REE3NDMyIGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9fVERBOTg0MCBpcyBub3Qgc2V0CiMgQ09O
RklHX1ZJREVPX1RFQTY0MTVDIGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9fVEVBNjQyMCBpcyBu
b3Qgc2V0CiMgQ09ORklHX1ZJREVPX1RMVjMyMEFJQzIzQiBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJ
REVPX1RWQVVESU8gaXMgbm90IHNldAojIENPTkZJR19WSURFT19VREExMzQyIGlzIG5vdCBzZXQK
IyBDT05GSUdfVklERU9fVlAyN1NNUFggaXMgbm90IHNldAojIENPTkZJR19WSURFT19XTTg3Mzkg
aXMgbm90IHNldApDT05GSUdfVklERU9fV004Nzc1PXkKIyBlbmQgb2YgQXVkaW8gZGVjb2RlcnMs
IHByb2Nlc3NvcnMgYW5kIG1peGVycwoKIwojIFJEUyBkZWNvZGVycwojCiMgQ09ORklHX1ZJREVP
X1NBQTY1ODggaXMgbm90IHNldAojIGVuZCBvZiBSRFMgZGVjb2RlcnMKCiMKIyBWaWRlbyBkZWNv
ZGVycwojCiMgQ09ORklHX1ZJREVPX0FEVjcxODAgaXMgbm90IHNldAojIENPTkZJR19WSURFT19B
RFY3MTgzIGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9fQURWNzQ4WCBpcyBub3Qgc2V0CiMgQ09O
RklHX1ZJREVPX0FEVjc2MDQgaXMgbm90IHNldAojIENPTkZJR19WSURFT19BRFY3ODQyIGlzIG5v
dCBzZXQKIyBDT05GSUdfVklERU9fQlQ4MTkgaXMgbm90IHNldAojIENPTkZJR19WSURFT19CVDg1
NiBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX0JUODY2IGlzIG5vdCBzZXQKIyBDT05GSUdfVklE
RU9fSVNMNzk5OFggaXMgbm90IHNldAojIENPTkZJR19WSURFT19LUzAxMjcgaXMgbm90IHNldAoj
IENPTkZJR19WSURFT19NQVg5Mjg2IGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9fTUw4NlY3NjY3
IGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9fU0FBNzExMCBpcyBub3Qgc2V0CkNPTkZJR19WSURF
T19TQUE3MTFYPXkKIyBDT05GSUdfVklERU9fVEMzNTg3NDMgaXMgbm90IHNldAojIENPTkZJR19W
SURFT19UQzM1ODc0NiBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX1RWUDUxNFggaXMgbm90IHNl
dAojIENPTkZJR19WSURFT19UVlA1MTUwIGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9fVFZQNzAw
MiBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX1RXMjgwNCBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJ
REVPX1RXOTkwMCBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX1RXOTkwMyBpcyBub3Qgc2V0CiMg
Q09ORklHX1ZJREVPX1RXOTkwNiBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX1RXOTkxMCBpcyBu
b3Qgc2V0CiMgQ09ORklHX1ZJREVPX1ZQWDMyMjAgaXMgbm90IHNldAoKIwojIFZpZGVvIGFuZCBh
dWRpbyBkZWNvZGVycwojCiMgQ09ORklHX1ZJREVPX1NBQTcxN1ggaXMgbm90IHNldApDT05GSUdf
VklERU9fQ1gyNTg0MD15CiMgZW5kIG9mIFZpZGVvIGRlY29kZXJzCgojCiMgVmlkZW8gZW5jb2Rl
cnMKIwojIENPTkZJR19WSURFT19BRFY3MTcwIGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9fQURW
NzE3NSBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX0FEVjczNDMgaXMgbm90IHNldAojIENPTkZJ
R19WSURFT19BRFY3MzkzIGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9fQURWNzUxMSBpcyBub3Qg
c2V0CiMgQ09ORklHX1ZJREVPX0FLODgxWCBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX1NBQTcx
MjcgaXMgbm90IHNldAojIENPTkZJR19WSURFT19TQUE3MTg1IGlzIG5vdCBzZXQKIyBDT05GSUdf
VklERU9fVEhTODIwMCBpcyBub3Qgc2V0CiMgZW5kIG9mIFZpZGVvIGVuY29kZXJzCgojCiMgVmlk
ZW8gaW1wcm92ZW1lbnQgY2hpcHMKIwojIENPTkZJR19WSURFT19VUEQ2NDAzMUEgaXMgbm90IHNl
dAojIENPTkZJR19WSURFT19VUEQ2NDA4MyBpcyBub3Qgc2V0CiMgZW5kIG9mIFZpZGVvIGltcHJv
dmVtZW50IGNoaXBzCgojCiMgQXVkaW8vVmlkZW8gY29tcHJlc3Npb24gY2hpcHMKIwojIENPTkZJ
R19WSURFT19TQUE2NzUySFMgaXMgbm90IHNldAojIGVuZCBvZiBBdWRpby9WaWRlbyBjb21wcmVz
c2lvbiBjaGlwcwoKIwojIFNEUiB0dW5lciBjaGlwcwojCiMgQ09ORklHX1NEUl9NQVgyMTc1IGlz
IG5vdCBzZXQKIyBlbmQgb2YgU0RSIHR1bmVyIGNoaXBzCgojCiMgTWlzY2VsbGFuZW91cyBoZWxw
ZXIgY2hpcHMKIwojIENPTkZJR19WSURFT19JMkMgaXMgbm90IHNldAojIENPTkZJR19WSURFT19N
NTI3OTAgaXMgbm90IHNldAojIENPTkZJR19WSURFT19TVF9NSVBJRDAyIGlzIG5vdCBzZXQKIyBD
T05GSUdfVklERU9fVEhTNzMwMyBpcyBub3Qgc2V0CiMgZW5kIG9mIE1pc2NlbGxhbmVvdXMgaGVs
cGVyIGNoaXBzCgojCiMgVmlkZW8gc2VyaWFsaXplcnMgYW5kIGRlc2VyaWFsaXplcnMKIwojIENP
TkZJR19WSURFT19EUzkwVUI5MTMgaXMgbm90IHNldAojIENPTkZJR19WSURFT19EUzkwVUI5NTMg
aXMgbm90IHNldAojIENPTkZJR19WSURFT19EUzkwVUI5NjAgaXMgbm90IHNldAojIGVuZCBvZiBW
aWRlbyBzZXJpYWxpemVycyBhbmQgZGVzZXJpYWxpemVycwoKIwojIE1lZGlhIFNQSSBBZGFwdGVy
cwojCiMgQ09ORklHX0NYRDI4ODBfU1BJX0RSViBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX0dT
MTY2MiBpcyBub3Qgc2V0CiMgZW5kIG9mIE1lZGlhIFNQSSBBZGFwdGVycwoKQ09ORklHX01FRElB
X1RVTkVSPXkKCiMKIyBDdXN0b21pemUgVFYgdHVuZXJzCiMKIyBDT05GSUdfTUVESUFfVFVORVJf
RTQwMDAgaXMgbm90IHNldAojIENPTkZJR19NRURJQV9UVU5FUl9GQzAwMTEgaXMgbm90IHNldAoj
IENPTkZJR19NRURJQV9UVU5FUl9GQzAwMTIgaXMgbm90IHNldAojIENPTkZJR19NRURJQV9UVU5F
Ul9GQzAwMTMgaXMgbm90IHNldAojIENPTkZJR19NRURJQV9UVU5FUl9GQzI1ODAgaXMgbm90IHNl
dAojIENPTkZJR19NRURJQV9UVU5FUl9JVDkxM1ggaXMgbm90IHNldAojIENPTkZJR19NRURJQV9U
VU5FUl9NODhSUzYwMDBUIGlzIG5vdCBzZXQKIyBDT05GSUdfTUVESUFfVFVORVJfTUFYMjE2NSBp
cyBub3Qgc2V0CiMgQ09ORklHX01FRElBX1RVTkVSX01DNDRTODAzIGlzIG5vdCBzZXQKQ09ORklH
X01FRElBX1RVTkVSX01TSTAwMT15CiMgQ09ORklHX01FRElBX1RVTkVSX01UMjA2MCBpcyBub3Qg
c2V0CiMgQ09ORklHX01FRElBX1RVTkVSX01UMjA2MyBpcyBub3Qgc2V0CiMgQ09ORklHX01FRElB
X1RVTkVSX01UMjBYWCBpcyBub3Qgc2V0CiMgQ09ORklHX01FRElBX1RVTkVSX01UMjEzMSBpcyBu
b3Qgc2V0CiMgQ09ORklHX01FRElBX1RVTkVSX01UMjI2NiBpcyBub3Qgc2V0CiMgQ09ORklHX01F
RElBX1RVTkVSX01YTDMwMVJGIGlzIG5vdCBzZXQKIyBDT05GSUdfTUVESUFfVFVORVJfTVhMNTAw
NVMgaXMgbm90IHNldAojIENPTkZJR19NRURJQV9UVU5FUl9NWEw1MDA3VCBpcyBub3Qgc2V0CiMg
Q09ORklHX01FRElBX1RVTkVSX1FNMUQxQjAwMDQgaXMgbm90IHNldAojIENPTkZJR19NRURJQV9U
VU5FUl9RTTFEMUMwMDQyIGlzIG5vdCBzZXQKIyBDT05GSUdfTUVESUFfVFVORVJfUVQxMDEwIGlz
IG5vdCBzZXQKIyBDT05GSUdfTUVESUFfVFVORVJfUjgyMFQgaXMgbm90IHNldAojIENPTkZJR19N
RURJQV9UVU5FUl9TSTIxNTcgaXMgbm90IHNldAojIENPTkZJR19NRURJQV9UVU5FUl9TSU1QTEUg
aXMgbm90IHNldAojIENPTkZJR19NRURJQV9UVU5FUl9UREExODIxMiBpcyBub3Qgc2V0CiMgQ09O
RklHX01FRElBX1RVTkVSX1REQTE4MjE4IGlzIG5vdCBzZXQKIyBDT05GSUdfTUVESUFfVFVORVJf
VERBMTgyNTAgaXMgbm90IHNldAojIENPTkZJR19NRURJQV9UVU5FUl9UREExODI3MSBpcyBub3Qg
c2V0CiMgQ09ORklHX01FRElBX1RVTkVSX1REQTgyN1ggaXMgbm90IHNldAojIENPTkZJR19NRURJ
QV9UVU5FUl9UREE4MjkwIGlzIG5vdCBzZXQKIyBDT05GSUdfTUVESUFfVFVORVJfVERBOTg4NyBp
cyBub3Qgc2V0CiMgQ09ORklHX01FRElBX1RVTkVSX1RFQTU3NjEgaXMgbm90IHNldAojIENPTkZJ
R19NRURJQV9UVU5FUl9URUE1NzY3IGlzIG5vdCBzZXQKIyBDT05GSUdfTUVESUFfVFVORVJfVFVB
OTAwMSBpcyBub3Qgc2V0CiMgQ09ORklHX01FRElBX1RVTkVSX1hDMjAyOCBpcyBub3Qgc2V0CiMg
Q09ORklHX01FRElBX1RVTkVSX1hDNDAwMCBpcyBub3Qgc2V0CiMgQ09ORklHX01FRElBX1RVTkVS
X1hDNTAwMCBpcyBub3Qgc2V0CiMgZW5kIG9mIEN1c3RvbWl6ZSBUViB0dW5lcnMKCiMKIyBDdXN0
b21pc2UgRFZCIEZyb250ZW5kcwojCgojCiMgTXVsdGlzdGFuZGFyZCAoc2F0ZWxsaXRlKSBmcm9u
dGVuZHMKIwojIENPTkZJR19EVkJfTTg4RFMzMTAzIGlzIG5vdCBzZXQKIyBDT05GSUdfRFZCX01Y
TDVYWCBpcyBub3Qgc2V0CiMgQ09ORklHX0RWQl9TVEIwODk5IGlzIG5vdCBzZXQKIyBDT05GSUdf
RFZCX1NUQjYxMDAgaXMgbm90IHNldAojIENPTkZJR19EVkJfU1RWMDkweCBpcyBub3Qgc2V0CiMg
Q09ORklHX0RWQl9TVFYwOTEwIGlzIG5vdCBzZXQKIyBDT05GSUdfRFZCX1NUVjYxMTB4IGlzIG5v
dCBzZXQKIyBDT05GSUdfRFZCX1NUVjYxMTEgaXMgbm90IHNldAoKIwojIE11bHRpc3RhbmRhcmQg
KGNhYmxlICsgdGVycmVzdHJpYWwpIGZyb250ZW5kcwojCiMgQ09ORklHX0RWQl9EUlhLIGlzIG5v
dCBzZXQKIyBDT05GSUdfRFZCX01OODg0NzIgaXMgbm90IHNldAojIENPTkZJR19EVkJfTU44ODQ3
MyBpcyBub3Qgc2V0CiMgQ09ORklHX0RWQl9TSTIxNjUgaXMgbm90IHNldAojIENPTkZJR19EVkJf
VERBMTgyNzFDMkREIGlzIG5vdCBzZXQKCiMKIyBEVkItUyAoc2F0ZWxsaXRlKSBmcm9udGVuZHMK
IwojIENPTkZJR19EVkJfQ1gyNDExMCBpcyBub3Qgc2V0CiMgQ09ORklHX0RWQl9DWDI0MTE2IGlz
IG5vdCBzZXQKIyBDT05GSUdfRFZCX0NYMjQxMTcgaXMgbm90IHNldAojIENPTkZJR19EVkJfQ1gy
NDEyMCBpcyBub3Qgc2V0CiMgQ09ORklHX0RWQl9DWDI0MTIzIGlzIG5vdCBzZXQKIyBDT05GSUdf
RFZCX0RTMzAwMCBpcyBub3Qgc2V0CiMgQ09ORklHX0RWQl9NQjg2QTE2IGlzIG5vdCBzZXQKIyBD
T05GSUdfRFZCX01UMzEyIGlzIG5vdCBzZXQKIyBDT05GSUdfRFZCX1M1SDE0MjAgaXMgbm90IHNl
dAojIENPTkZJR19EVkJfU0kyMVhYIGlzIG5vdCBzZXQKIyBDT05GSUdfRFZCX1NUQjYwMDAgaXMg
bm90IHNldAojIENPTkZJR19EVkJfU1RWMDI4OCBpcyBub3Qgc2V0CiMgQ09ORklHX0RWQl9TVFYw
Mjk5IGlzIG5vdCBzZXQKIyBDT05GSUdfRFZCX1NUVjA5MDAgaXMgbm90IHNldAojIENPTkZJR19E
VkJfU1RWNjExMCBpcyBub3Qgc2V0CiMgQ09ORklHX0RWQl9UREExMDA3MSBpcyBub3Qgc2V0CiMg
Q09ORklHX0RWQl9UREExMDA4NiBpcyBub3Qgc2V0CiMgQ09ORklHX0RWQl9UREE4MDgzIGlzIG5v
dCBzZXQKIyBDT05GSUdfRFZCX1REQTgyNjEgaXMgbm90IHNldAojIENPTkZJR19EVkJfVERBODI2
WCBpcyBub3Qgc2V0CiMgQ09ORklHX0RWQl9UUzIwMjAgaXMgbm90IHNldAojIENPTkZJR19EVkJf
VFVBNjEwMCBpcyBub3Qgc2V0CiMgQ09ORklHX0RWQl9UVU5FUl9DWDI0MTEzIGlzIG5vdCBzZXQK
IyBDT05GSUdfRFZCX1RVTkVSX0lURDEwMDAgaXMgbm90IHNldAojIENPTkZJR19EVkJfVkVTMVg5
MyBpcyBub3Qgc2V0CiMgQ09ORklHX0RWQl9aTDEwMDM2IGlzIG5vdCBzZXQKIyBDT05GSUdfRFZC
X1pMMTAwMzkgaXMgbm90IHNldAoKIwojIERWQi1UICh0ZXJyZXN0cmlhbCkgZnJvbnRlbmRzCiMK
Q09ORklHX0RWQl9BRjkwMTM9eQpDT05GSUdfRFZCX0FTMTAyX0ZFPXkKIyBDT05GSUdfRFZCX0NY
MjI3MDAgaXMgbm90IHNldAojIENPTkZJR19EVkJfQ1gyMjcwMiBpcyBub3Qgc2V0CiMgQ09ORklH
X0RWQl9DWEQyODIwUiBpcyBub3Qgc2V0CiMgQ09ORklHX0RWQl9DWEQyODQxRVIgaXMgbm90IHNl
dApDT05GSUdfRFZCX0RJQjMwMDBNQj15CkNPTkZJR19EVkJfRElCMzAwME1DPXkKIyBDT05GSUdf
RFZCX0RJQjcwMDBNIGlzIG5vdCBzZXQKIyBDT05GSUdfRFZCX0RJQjcwMDBQIGlzIG5vdCBzZXQK
IyBDT05GSUdfRFZCX0RJQjkwMDAgaXMgbm90IHNldAojIENPTkZJR19EVkJfRFJYRCBpcyBub3Qg
c2V0CkNPTkZJR19EVkJfRUMxMDA9eQpDT05GSUdfRFZCX0dQOFBTS19GRT15CiMgQ09ORklHX0RW
Ql9MNjQ3ODEgaXMgbm90IHNldAojIENPTkZJR19EVkJfTVQzNTIgaXMgbm90IHNldAojIENPTkZJ
R19EVkJfTlhUNjAwMCBpcyBub3Qgc2V0CkNPTkZJR19EVkJfUlRMMjgzMD15CkNPTkZJR19EVkJf
UlRMMjgzMj15CkNPTkZJR19EVkJfUlRMMjgzMl9TRFI9eQojIENPTkZJR19EVkJfUzVIMTQzMiBp
cyBub3Qgc2V0CiMgQ09ORklHX0RWQl9TSTIxNjggaXMgbm90IHNldAojIENPTkZJR19EVkJfU1A4
ODdYIGlzIG5vdCBzZXQKIyBDT05GSUdfRFZCX1NUVjAzNjcgaXMgbm90IHNldAojIENPTkZJR19E
VkJfVERBMTAwNDggaXMgbm90IHNldAojIENPTkZJR19EVkJfVERBMTAwNFggaXMgbm90IHNldAoj
IENPTkZJR19EVkJfWkQxMzAxX0RFTU9EIGlzIG5vdCBzZXQKQ09ORklHX0RWQl9aTDEwMzUzPXkK
IyBDT05GSUdfRFZCX0NYRDI4ODAgaXMgbm90IHNldAoKIwojIERWQi1DIChjYWJsZSkgZnJvbnRl
bmRzCiMKIyBDT05GSUdfRFZCX1NUVjAyOTcgaXMgbm90IHNldAojIENPTkZJR19EVkJfVERBMTAw
MjEgaXMgbm90IHNldAojIENPTkZJR19EVkJfVERBMTAwMjMgaXMgbm90IHNldAojIENPTkZJR19E
VkJfVkVTMTgyMCBpcyBub3Qgc2V0CgojCiMgQVRTQyAoTm9ydGggQW1lcmljYW4vS29yZWFuIFRl
cnJlc3RyaWFsL0NhYmxlIERUVikgZnJvbnRlbmRzCiMKIyBDT05GSUdfRFZCX0FVODUyMl9EVFYg
aXMgbm90IHNldAojIENPTkZJR19EVkJfQVU4NTIyX1Y0TCBpcyBub3Qgc2V0CiMgQ09ORklHX0RW
Ql9CQ00zNTEwIGlzIG5vdCBzZXQKIyBDT05GSUdfRFZCX0xHMjE2MCBpcyBub3Qgc2V0CiMgQ09O
RklHX0RWQl9MR0RUMzMwNSBpcyBub3Qgc2V0CiMgQ09ORklHX0RWQl9MR0RUMzMwNkEgaXMgbm90
IHNldAojIENPTkZJR19EVkJfTEdEVDMzMFggaXMgbm90IHNldAojIENPTkZJR19EVkJfTVhMNjky
IGlzIG5vdCBzZXQKIyBDT05GSUdfRFZCX05YVDIwMFggaXMgbm90IHNldAojIENPTkZJR19EVkJf
T1I1MTEzMiBpcyBub3Qgc2V0CiMgQ09ORklHX0RWQl9PUjUxMjExIGlzIG5vdCBzZXQKIyBDT05G
SUdfRFZCX1M1SDE0MDkgaXMgbm90IHNldAojIENPTkZJR19EVkJfUzVIMTQxMSBpcyBub3Qgc2V0
CgojCiMgSVNEQi1UICh0ZXJyZXN0cmlhbCkgZnJvbnRlbmRzCiMKIyBDT05GSUdfRFZCX0RJQjgw
MDAgaXMgbm90IHNldAojIENPTkZJR19EVkJfTUI4NkEyMFMgaXMgbm90IHNldAojIENPTkZJR19E
VkJfUzkyMSBpcyBub3Qgc2V0CgojCiMgSVNEQi1TIChzYXRlbGxpdGUpICYgSVNEQi1UICh0ZXJy
ZXN0cmlhbCkgZnJvbnRlbmRzCiMKIyBDT05GSUdfRFZCX01OODg0NDNYIGlzIG5vdCBzZXQKIyBD
T05GSUdfRFZCX1RDOTA1MjIgaXMgbm90IHNldAoKIwojIERpZ2l0YWwgdGVycmVzdHJpYWwgb25s
eSB0dW5lcnMvUExMCiMKIyBDT05GSUdfRFZCX1BMTCBpcyBub3Qgc2V0CiMgQ09ORklHX0RWQl9U
VU5FUl9ESUIwMDcwIGlzIG5vdCBzZXQKIyBDT05GSUdfRFZCX1RVTkVSX0RJQjAwOTAgaXMgbm90
IHNldAoKIwojIFNFQyBjb250cm9sIGRldmljZXMgZm9yIERWQi1TCiMKIyBDT05GSUdfRFZCX0E4
MjkzIGlzIG5vdCBzZXQKQ09ORklHX0RWQl9BRjkwMzM9eQojIENPTkZJR19EVkJfQVNDT1QyRSBp
cyBub3Qgc2V0CiMgQ09ORklHX0RWQl9BVEJNODgzMCBpcyBub3Qgc2V0CiMgQ09ORklHX0RWQl9I
RUxFTkUgaXMgbm90IHNldAojIENPTkZJR19EVkJfSE9SVVMzQSBpcyBub3Qgc2V0CiMgQ09ORklH
X0RWQl9JU0w2NDA1IGlzIG5vdCBzZXQKIyBDT05GSUdfRFZCX0lTTDY0MjEgaXMgbm90IHNldAoj
IENPTkZJR19EVkJfSVNMNjQyMyBpcyBub3Qgc2V0CiMgQ09ORklHX0RWQl9JWDI1MDVWIGlzIG5v
dCBzZXQKIyBDT05GSUdfRFZCX0xHUzhHTDUgaXMgbm90IHNldAojIENPTkZJR19EVkJfTEdTOEdY
WCBpcyBub3Qgc2V0CiMgQ09ORklHX0RWQl9MTkJIMjUgaXMgbm90IHNldAojIENPTkZJR19EVkJf
TE5CSDI5IGlzIG5vdCBzZXQKIyBDT05GSUdfRFZCX0xOQlAyMSBpcyBub3Qgc2V0CiMgQ09ORklH
X0RWQl9MTkJQMjIgaXMgbm90IHNldAojIENPTkZJR19EVkJfTTg4UlMyMDAwIGlzIG5vdCBzZXQK
IyBDT05GSUdfRFZCX1REQTY2NXggaXMgbm90IHNldAojIENPTkZJR19EVkJfRFJYMzlYWUogaXMg
bm90IHNldAoKIwojIENvbW1vbiBJbnRlcmZhY2UgKEVONTAyMjEpIGNvbnRyb2xsZXIgZHJpdmVy
cwojCiMgQ09ORklHX0RWQl9DWEQyMDk5IGlzIG5vdCBzZXQKIyBDT05GSUdfRFZCX1NQMiBpcyBu
b3Qgc2V0CiMgZW5kIG9mIEN1c3RvbWlzZSBEVkIgRnJvbnRlbmRzCgojCiMgVG9vbHMgdG8gZGV2
ZWxvcCBuZXcgZnJvbnRlbmRzCiMKIyBDT05GSUdfRFZCX0RVTU1ZX0ZFIGlzIG5vdCBzZXQKIyBl
bmQgb2YgTWVkaWEgYW5jaWxsYXJ5IGRyaXZlcnMKCiMKIyBHcmFwaGljcyBzdXBwb3J0CiMKQ09O
RklHX0FQRVJUVVJFX0hFTFBFUlM9eQpDT05GSUdfVklERU9fQ01ETElORT15CkNPTkZJR19WSURF
T19OT01PREVTRVQ9eQojIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKIyBDT05GSUdfUEFO
RUwgaXMgbm90IHNldApDT05GSUdfQUdQPXkKQ09ORklHX0FHUF9BTUQ2ND15CkNPTkZJR19BR1Bf
SU5URUw9eQojIENPTkZJR19BR1BfU0lTIGlzIG5vdCBzZXQKIyBDT05GSUdfQUdQX1ZJQSBpcyBu
b3Qgc2V0CkNPTkZJR19JTlRFTF9HVFQ9eQojIENPTkZJR19WR0FfU1dJVENIRVJPTyBpcyBub3Qg
c2V0CkNPTkZJR19EUk09eQpDT05GSUdfRFJNX01JUElfRFNJPXkKIyBDT05GSUdfRFJNX0RFQlVH
X01NIGlzIG5vdCBzZXQKQ09ORklHX0RSTV9LTVNfSEVMUEVSPXkKIyBDT05GSUdfRFJNX0RFQlVH
X0RQX01TVF9UT1BPTE9HWV9SRUZTIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX0RFQlVHX01PREVT
RVRfTE9DSyBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9GQkRFVl9FTVVMQVRJT04gaXMgbm90IHNl
dAojIENPTkZJR19EUk1fTE9BRF9FRElEX0ZJUk1XQVJFIGlzIG5vdCBzZXQKQ09ORklHX0RSTV9E
SVNQTEFZX0hFTFBFUj15CkNPTkZJR19EUk1fRElTUExBWV9EUF9IRUxQRVI9eQpDT05GSUdfRFJN
X0RJU1BMQVlfSERDUF9IRUxQRVI9eQpDT05GSUdfRFJNX0RJU1BMQVlfSERNSV9IRUxQRVI9eQoj
IENPTkZJR19EUk1fRFBfQVVYX0NIQVJERVYgaXMgbm90IHNldAojIENPTkZJR19EUk1fRFBfQ0VD
IGlzIG5vdCBzZXQKQ09ORklHX0RSTV9UVE09eQpDT05GSUdfRFJNX0JVRERZPXkKQ09ORklHX0RS
TV9HRU1fU0hNRU1fSEVMUEVSPXkKCiMKIyBJMkMgZW5jb2RlciBvciBoZWxwZXIgY2hpcHMKIwoj
IENPTkZJR19EUk1fSTJDX0NINzAwNiBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9JMkNfU0lMMTY0
IGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX0kyQ19OWFBfVERBOTk4WCBpcyBub3Qgc2V0CiMgQ09O
RklHX0RSTV9JMkNfTlhQX1REQTk5NTAgaXMgbm90IHNldAojIGVuZCBvZiBJMkMgZW5jb2RlciBv
ciBoZWxwZXIgY2hpcHMKCiMKIyBBUk0gZGV2aWNlcwojCiMgQ09ORklHX0RSTV9LT01FREEgaXMg
bm90IHNldAojIGVuZCBvZiBBUk0gZGV2aWNlcwoKIyBDT05GSUdfRFJNX1JBREVPTiBpcyBub3Qg
c2V0CiMgQ09ORklHX0RSTV9BTURHUFUgaXMgbm90IHNldAojIENPTkZJR19EUk1fTk9VVkVBVSBp
cyBub3Qgc2V0CkNPTkZJR19EUk1fSTkxNT15CkNPTkZJR19EUk1fSTkxNV9GT1JDRV9QUk9CRT0i
IgpDT05GSUdfRFJNX0k5MTVfQ0FQVFVSRV9FUlJPUj15CkNPTkZJR19EUk1fSTkxNV9DT01QUkVT
U19FUlJPUj15CkNPTkZJR19EUk1fSTkxNV9VU0VSUFRSPXkKCiMKIyBkcm0vaTkxNSBEZWJ1Z2dp
bmcKIwojIENPTkZJR19EUk1fSTkxNV9XRVJST1IgaXMgbm90IHNldAojIENPTkZJR19EUk1fSTkx
NV9ERUJVRyBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9JOTE1X0RFQlVHX01NSU8gaXMgbm90IHNl
dAojIENPTkZJR19EUk1fSTkxNV9TV19GRU5DRV9ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKIyBD
T05GSUdfRFJNX0k5MTVfU1dfRkVOQ0VfQ0hFQ0tfREFHIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJN
X0k5MTVfREVCVUdfR1VDIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX0k5MTVfU0VMRlRFU1QgaXMg
bm90IHNldAojIENPTkZJR19EUk1fSTkxNV9MT1dfTEVWRUxfVFJBQ0VQT0lOVFMgaXMgbm90IHNl
dAojIENPTkZJR19EUk1fSTkxNV9ERUJVR19WQkxBTktfRVZBREUgaXMgbm90IHNldAojIENPTkZJ
R19EUk1fSTkxNV9ERUJVR19SVU5USU1FX1BNIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX0k5MTVf
REVCVUdfV0FLRVJFRiBpcyBub3Qgc2V0CiMgZW5kIG9mIGRybS9pOTE1IERlYnVnZ2luZwoKIwoj
IGRybS9pOTE1IFByb2ZpbGUgR3VpZGVkIE9wdGltaXNhdGlvbgojCkNPTkZJR19EUk1fSTkxNV9S
RVFVRVNUX1RJTUVPVVQ9MjAwMDAKQ09ORklHX0RSTV9JOTE1X0ZFTkNFX1RJTUVPVVQ9MTAwMDAK
Q09ORklHX0RSTV9JOTE1X1VTRVJGQVVMVF9BVVRPU1VTUEVORD0yNTAKQ09ORklHX0RSTV9JOTE1
X0hFQVJUQkVBVF9JTlRFUlZBTD0yNTAwCkNPTkZJR19EUk1fSTkxNV9QUkVFTVBUX1RJTUVPVVQ9
NjQwCkNPTkZJR19EUk1fSTkxNV9QUkVFTVBUX1RJTUVPVVRfQ09NUFVURT03NTAwCkNPTkZJR19E
Uk1fSTkxNV9NQVhfUkVRVUVTVF9CVVNZV0FJVD04MDAwCkNPTkZJR19EUk1fSTkxNV9TVE9QX1RJ
TUVPVVQ9MTAwCkNPTkZJR19EUk1fSTkxNV9USU1FU0xJQ0VfRFVSQVRJT049MQojIGVuZCBvZiBk
cm0vaTkxNSBQcm9maWxlIEd1aWRlZCBPcHRpbWlzYXRpb24KCiMgQ09ORklHX0RSTV9YRSBpcyBu
b3Qgc2V0CiMgQ09ORklHX0RSTV9WR0VNIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX1ZLTVMgaXMg
bm90IHNldAojIENPTkZJR19EUk1fVk1XR0ZYIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX0dNQTUw
MCBpcyBub3Qgc2V0CkNPTkZJR19EUk1fVURMPXkKIyBDT05GSUdfRFJNX0FTVCBpcyBub3Qgc2V0
CiMgQ09ORklHX0RSTV9NR0FHMjAwIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX1FYTCBpcyBub3Qg
c2V0CkNPTkZJR19EUk1fVklSVElPX0dQVT15CkNPTkZJR19EUk1fVklSVElPX0dQVV9LTVM9eQpD
T05GSUdfRFJNX1BBTkVMPXkKCiMKIyBEaXNwbGF5IFBhbmVscwojCiMgQ09ORklHX0RSTV9QQU5F
TF9BQlRfWTAzMFhYMDY3QSBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9QQU5FTF9BUk1fVkVSU0FU
SUxFIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX1BBTkVMX0FTVVNfWjAwVF9UTTVQNV9OVDM1NTk2
IGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX1BBTkVMX0FVT19BMDMwSlROMDEgaXMgbm90IHNldAoj
IENPTkZJR19EUk1fUEFORUxfQk9FX0JGMDYwWThNX0FKMCBpcyBub3Qgc2V0CiMgQ09ORklHX0RS
TV9QQU5FTF9CT0VfSElNQVg4Mjc5RCBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9QQU5FTF9CT0Vf
VFYxMDFXVU1fTkw2IGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX1BBTkVMX0RTSV9DTSBpcyBub3Qg
c2V0CiMgQ09ORklHX0RSTV9QQU5FTF9MVkRTIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX1BBTkVM
X1NJTVBMRSBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9QQU5FTF9FRFAgaXMgbm90IHNldAojIENP
TkZJR19EUk1fUEFORUxfRUJCR19GVDg3MTkgaXMgbm90IHNldAojIENPTkZJR19EUk1fUEFORUxf
RUxJREFfS0QzNVQxMzMgaXMgbm90IHNldAojIENPTkZJR19EUk1fUEFORUxfRkVJWElOX0sxMDFf
SU0yQkEwMiBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9QQU5FTF9GRUlZQU5HX0ZZMDcwMjRESTI2
QTMwRCBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9QQU5FTF9ISU1BWF9IWDgzOTQgaXMgbm90IHNl
dAojIENPTkZJR19EUk1fUEFORUxfSUxJVEVLX0lMOTMyMiBpcyBub3Qgc2V0CiMgQ09ORklHX0RS
TV9QQU5FTF9JTElURUtfSUxJOTM0MSBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9QQU5FTF9JTElU
RUtfSUxJOTgwNSBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9QQU5FTF9JTElURUtfSUxJOTg4MUMg
aXMgbm90IHNldAojIENPTkZJR19EUk1fUEFORUxfSUxJVEVLX0lMSTk4ODJUIGlzIG5vdCBzZXQK
IyBDT05GSUdfRFJNX1BBTkVMX0lOTk9MVVhfRUowMzBOQSBpcyBub3Qgc2V0CiMgQ09ORklHX0RS
TV9QQU5FTF9JTk5PTFVYX1AwNzlaQ0EgaXMgbm90IHNldAojIENPTkZJR19EUk1fUEFORUxfSkFE
QVJEX0pEOTM2NURBX0gzIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX1BBTkVMX0pESV9MVDA3ME1F
MDUwMDAgaXMgbm90IHNldAojIENPTkZJR19EUk1fUEFORUxfSkRJX0xQTTEwMkExODhBIGlzIG5v
dCBzZXQKIyBDT05GSUdfRFJNX1BBTkVMX0pESV9SNjM0NTIgaXMgbm90IHNldAojIENPTkZJR19E
Uk1fUEFORUxfS0hBREFTX1RTMDUwIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX1BBTkVMX0tJTkdE
SVNQTEFZX0tEMDk3RDA0IGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX1BBTkVMX0xFQURURUtfTFRL
MDUwSDMxNDZXIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX1BBTkVMX0xFQURURUtfTFRLNTAwSEQx
ODI5IGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX1BBTkVMX1NBTVNVTkdfTEQ5MDQwIGlzIG5vdCBz
ZXQKIyBDT05GSUdfRFJNX1BBTkVMX0xHX0xCMDM1UTAyIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJN
X1BBTkVMX0xHX0xHNDU3MyBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9QQU5FTF9NQUdOQUNISVBf
RDUzRTZFQTg5NjYgaXMgbm90IHNldAojIENPTkZJR19EUk1fUEFORUxfTkVDX05MODA0OEhMMTEg
aXMgbm90IHNldAojIENPTkZJR19EUk1fUEFORUxfTkVXVklTSU9OX05WMzA1MUQgaXMgbm90IHNl
dAojIENPTkZJR19EUk1fUEFORUxfTkVXVklTSU9OX05WMzA1MkMgaXMgbm90IHNldAojIENPTkZJ
R19EUk1fUEFORUxfTk9WQVRFS19OVDM1NTEwIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX1BBTkVM
X05PVkFURUtfTlQzNTU2MCBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9QQU5FTF9OT1ZBVEVLX05U
MzU5NTAgaXMgbm90IHNldAojIENPTkZJR19EUk1fUEFORUxfTk9WQVRFS19OVDM2NTIzIGlzIG5v
dCBzZXQKIyBDT05GSUdfRFJNX1BBTkVMX05PVkFURUtfTlQzNjY3MkEgaXMgbm90IHNldAojIENP
TkZJR19EUk1fUEFORUxfTk9WQVRFS19OVDM5MDE2IGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX1BB
TkVMX01BTlRJWF9NTEFGMDU3V0U1MSBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9QQU5FTF9PTElN
RVhfTENEX09MSU5VWElOTyBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9QQU5FTF9PUklTRVRFQ0hf
T1RBNTYwMUEgaXMgbm90IHNldAojIENPTkZJR19EUk1fUEFORUxfT1JJU0VURUNIX09UTTgwMDlB
IGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX1BBTkVMX09TRF9PU0QxMDFUMjU4N181M1RTIGlzIG5v
dCBzZXQKIyBDT05GSUdfRFJNX1BBTkVMX1BBTkFTT05JQ19WVlgxMEYwMzROMDAgaXMgbm90IHNl
dAojIENPTkZJR19EUk1fUEFORUxfUkFTUEJFUlJZUElfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAoj
IENPTkZJR19EUk1fUEFORUxfUkFZRElVTV9STTY3MTkxIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJN
X1BBTkVMX1JBWURJVU1fUk02ODIwMCBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9QQU5FTF9SQVlE
SVVNX1JNNjkyRTUgaXMgbm90IHNldAojIENPTkZJR19EUk1fUEFORUxfUk9OQk9fUkIwNzBEMzAg
aXMgbm90IHNldAojIENPTkZJR19EUk1fUEFORUxfU0FNU1VOR19BVE5BMzNYQzIwIGlzIG5vdCBz
ZXQKIyBDT05GSUdfRFJNX1BBTkVMX1NBTVNVTkdfREI3NDMwIGlzIG5vdCBzZXQKIyBDT05GSUdf
RFJNX1BBTkVMX1NBTVNVTkdfUzZEMTZEMCBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9QQU5FTF9T
QU1TVU5HX1M2RDI3QTEgaXMgbm90IHNldAojIENPTkZJR19EUk1fUEFORUxfU0FNU1VOR19TNkQ3
QUEwIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX1BBTkVMX1NBTVNVTkdfUzZFM0hBMiBpcyBub3Qg
c2V0CiMgQ09ORklHX0RSTV9QQU5FTF9TQU1TVU5HX1M2RTYzSjBYMDMgaXMgbm90IHNldAojIENP
TkZJR19EUk1fUEFORUxfU0FNU1VOR19TNkU2M00wIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX1BB
TkVMX1NBTVNVTkdfUzZFODhBMF9BTVM0NTJFRjAxIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX1BB
TkVMX1NBTVNVTkdfUzZFOEFBMCBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9QQU5FTF9TQU1TVU5H
X1NPRkVGMDAgaXMgbm90IHNldAojIENPTkZJR19EUk1fUEFORUxfU0VJS09fNDNXVkYxRyBpcyBu
b3Qgc2V0CiMgQ09ORklHX0RSTV9QQU5FTF9TSEFSUF9MUTEwMVIxU1gwMSBpcyBub3Qgc2V0CiMg
Q09ORklHX0RSTV9QQU5FTF9TSEFSUF9MUzAzN1Y3RFcwMSBpcyBub3Qgc2V0CiMgQ09ORklHX0RS
TV9QQU5FTF9TSEFSUF9MUzA0M1QxTEUwMSBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9QQU5FTF9T
SEFSUF9MUzA2MFQxU1gwMSBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9QQU5FTF9TSVRST05JWF9T
VDc3MDEgaXMgbm90IHNldAojIENPTkZJR19EUk1fUEFORUxfU0lUUk9OSVhfU1Q3NzAzIGlzIG5v
dCBzZXQKIyBDT05GSUdfRFJNX1BBTkVMX1NJVFJPTklYX1NUNzc4OVYgaXMgbm90IHNldAojIENP
TkZJR19EUk1fUEFORUxfU1lOQVBUSUNTX1I2MzM1MyBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9Q
QU5FTF9TT05ZX0FDWDU2NUFLTSBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9QQU5FTF9TT05ZX1RE
NDM1M19KREkgaXMgbm90IHNldAojIENPTkZJR19EUk1fUEFORUxfU09OWV9UVUxJUF9UUlVMWV9O
VDM1NTIxIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX1BBTkVMX1NUQVJURUtfS0QwNzBGSEZJRDAx
NSBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9QQU5FTF9URE9fVEwwNzBXU0gzMCBpcyBub3Qgc2V0
CiMgQ09ORklHX0RSTV9QQU5FTF9UUE9fVEQwMjhUVEVDMSBpcyBub3Qgc2V0CiMgQ09ORklHX0RS
TV9QQU5FTF9UUE9fVEQwNDNNVEVBMSBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9QQU5FTF9UUE9f
VFBHMTEwIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX1BBTkVMX1RSVUxZX05UMzU1OTdfV1FYR0Eg
aXMgbm90IHNldAojIENPTkZJR19EUk1fUEFORUxfVklTSU9OT1hfUk02OTI5OSBpcyBub3Qgc2V0
CiMgQ09ORklHX0RSTV9QQU5FTF9WSVNJT05PWF9WVERSNjEzMCBpcyBub3Qgc2V0CiMgQ09ORklH
X0RSTV9QQU5FTF9WSVNJT05PWF9SNjY0NTEgaXMgbm90IHNldAojIENPTkZJR19EUk1fUEFORUxf
V0lERUNISVBTX1dTMjQwMSBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9QQU5FTF9YSU5QRU5HX1hQ
UDA1NUMyNzIgaXMgbm90IHNldAojIGVuZCBvZiBEaXNwbGF5IFBhbmVscwoKQ09ORklHX0RSTV9C
UklER0U9eQpDT05GSUdfRFJNX1BBTkVMX0JSSURHRT15CgojCiMgRGlzcGxheSBJbnRlcmZhY2Ug
QnJpZGdlcwojCiMgQ09ORklHX0RSTV9DSElQT05FX0lDTjYyMTEgaXMgbm90IHNldAojIENPTkZJ
R19EUk1fQ0hST05URUxfQ0g3MDMzIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX0RJU1BMQVlfQ09O
TkVDVE9SIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX0lURV9JVDY1MDUgaXMgbm90IHNldAojIENP
TkZJR19EUk1fTE9OVElVTV9MVDg5MTJCIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX0xPTlRJVU1f
TFQ5MjExIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX0xPTlRJVU1fTFQ5NjExIGlzIG5vdCBzZXQK
IyBDT05GSUdfRFJNX0xPTlRJVU1fTFQ5NjExVVhDIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX0lU
RV9JVDY2MTIxIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX0xWRFNfQ09ERUMgaXMgbm90IHNldAoj
IENPTkZJR19EUk1fTUVHQUNISVBTX1NURFBYWFhYX0dFX0I4NTBWM19GVyBpcyBub3Qgc2V0CiMg
Q09ORklHX0RSTV9OV0xfTUlQSV9EU0kgaXMgbm90IHNldAojIENPTkZJR19EUk1fTlhQX1BUTjM0
NjAgaXMgbm90IHNldAojIENPTkZJR19EUk1fUEFSQURFX1BTODYyMiBpcyBub3Qgc2V0CiMgQ09O
RklHX0RSTV9QQVJBREVfUFM4NjQwIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX1NBTVNVTkdfRFNJ
TSBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9TSUxfU0lJODYyMCBpcyBub3Qgc2V0CiMgQ09ORklH
X0RSTV9TSUk5MDJYIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX1NJSTkyMzQgaXMgbm90IHNldAoj
IENPTkZJR19EUk1fU0lNUExFX0JSSURHRSBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9USElORV9U
SEM2M0xWRDEwMjQgaXMgbm90IHNldAojIENPTkZJR19EUk1fVE9TSElCQV9UQzM1ODc2MiBpcyBu
b3Qgc2V0CiMgQ09ORklHX0RSTV9UT1NISUJBX1RDMzU4NzY0IGlzIG5vdCBzZXQKIyBDT05GSUdf
RFJNX1RPU0hJQkFfVEMzNTg3NjcgaXMgbm90IHNldAojIENPTkZJR19EUk1fVE9TSElCQV9UQzM1
ODc2OCBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9UT1NISUJBX1RDMzU4Nzc1IGlzIG5vdCBzZXQK
IyBDT05GSUdfRFJNX1RJX0RMUEMzNDMzIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX1RJX1RGUDQx
MCBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9USV9TTjY1RFNJODMgaXMgbm90IHNldAojIENPTkZJ
R19EUk1fVElfU042NURTSTg2IGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX1RJX1RQRDEyUzAxNSBp
cyBub3Qgc2V0CiMgQ09ORklHX0RSTV9BTkFMT0dJWF9BTlg2MzQ1IGlzIG5vdCBzZXQKIyBDT05G
SUdfRFJNX0FOQUxPR0lYX0FOWDc4WFggaXMgbm90IHNldAojIENPTkZJR19EUk1fQU5BTE9HSVhf
QU5YNzYyNSBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9JMkNfQURWNzUxMSBpcyBub3Qgc2V0CiMg
Q09ORklHX0RSTV9DRE5TX0RTSSBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9DRE5TX01IRFA4NTQ2
IGlzIG5vdCBzZXQKIyBlbmQgb2YgRGlzcGxheSBJbnRlcmZhY2UgQnJpZGdlcwoKIyBDT05GSUdf
RFJNX0VUTkFWSVYgaXMgbm90IHNldAojIENPTkZJR19EUk1fTE9HSUNWQyBpcyBub3Qgc2V0CiMg
Q09ORklHX0RSTV9BUkNQR1UgaXMgbm90IHNldAojIENPTkZJR19EUk1fQk9DSFMgaXMgbm90IHNl
dAojIENPTkZJR19EUk1fQ0lSUlVTX1FFTVUgaXMgbm90IHNldAojIENPTkZJR19EUk1fR00xMlUz
MjAgaXMgbm90IHNldAojIENPTkZJR19EUk1fUEFORUxfTUlQSV9EQkkgaXMgbm90IHNldAojIENP
TkZJR19EUk1fU0lNUExFRFJNIGlzIG5vdCBzZXQKIyBDT05GSUdfVElOWURSTV9IWDgzNTdEIGlz
IG5vdCBzZXQKIyBDT05GSUdfVElOWURSTV9JTEk5MTYzIGlzIG5vdCBzZXQKIyBDT05GSUdfVElO
WURSTV9JTEk5MjI1IGlzIG5vdCBzZXQKIyBDT05GSUdfVElOWURSTV9JTEk5MzQxIGlzIG5vdCBz
ZXQKIyBDT05GSUdfVElOWURSTV9JTEk5NDg2IGlzIG5vdCBzZXQKIyBDT05GSUdfVElOWURSTV9N
STAyODNRVCBpcyBub3Qgc2V0CiMgQ09ORklHX1RJTllEUk1fUkVQQVBFUiBpcyBub3Qgc2V0CiMg
Q09ORklHX1RJTllEUk1fU1Q3NTg2IGlzIG5vdCBzZXQKIyBDT05GSUdfVElOWURSTV9TVDc3MzVS
IGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX1ZCT1hWSURFTyBpcyBub3Qgc2V0CiMgQ09ORklHX0RS
TV9HVUQgaXMgbm90IHNldAojIENPTkZJR19EUk1fU1NEMTMwWCBpcyBub3Qgc2V0CkNPTkZJR19E
Uk1fUEFORUxfT1JJRU5UQVRJT05fUVVJUktTPXkKCiMKIyBGcmFtZSBidWZmZXIgRGV2aWNlcwoj
CkNPTkZJR19GQj15CiMgQ09ORklHX0ZCX0NJUlJVUyBpcyBub3Qgc2V0CiMgQ09ORklHX0ZCX1BN
MiBpcyBub3Qgc2V0CiMgQ09ORklHX0ZCX0NZQkVSMjAwMCBpcyBub3Qgc2V0CiMgQ09ORklHX0ZC
X0FSQyBpcyBub3Qgc2V0CiMgQ09ORklHX0ZCX0FTSUxJQU5UIGlzIG5vdCBzZXQKIyBDT05GSUdf
RkJfSU1TVFQgaXMgbm90IHNldAojIENPTkZJR19GQl9WR0ExNiBpcyBub3Qgc2V0CiMgQ09ORklH
X0ZCX1VWRVNBIGlzIG5vdCBzZXQKIyBDT05GSUdfRkJfVkVTQSBpcyBub3Qgc2V0CiMgQ09ORklH
X0ZCX040MTEgaXMgbm90IHNldAojIENPTkZJR19GQl9IR0EgaXMgbm90IHNldAojIENPTkZJR19G
Ql9PUEVOQ09SRVMgaXMgbm90IHNldAojIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CiMg
Q09ORklHX0ZCX05WSURJQSBpcyBub3Qgc2V0CiMgQ09ORklHX0ZCX1JJVkEgaXMgbm90IHNldAoj
IENPTkZJR19GQl9JNzQwIGlzIG5vdCBzZXQKIyBDT05GSUdfRkJfTUFUUk9YIGlzIG5vdCBzZXQK
IyBDT05GSUdfRkJfUkFERU9OIGlzIG5vdCBzZXQKIyBDT05GSUdfRkJfQVRZMTI4IGlzIG5vdCBz
ZXQKIyBDT05GSUdfRkJfQVRZIGlzIG5vdCBzZXQKIyBDT05GSUdfRkJfUzMgaXMgbm90IHNldAoj
IENPTkZJR19GQl9TQVZBR0UgaXMgbm90IHNldAojIENPTkZJR19GQl9TSVMgaXMgbm90IHNldAoj
IENPTkZJR19GQl9WSUEgaXMgbm90IHNldAojIENPTkZJR19GQl9ORU9NQUdJQyBpcyBub3Qgc2V0
CiMgQ09ORklHX0ZCX0tZUk8gaXMgbm90IHNldAojIENPTkZJR19GQl8zREZYIGlzIG5vdCBzZXQK
IyBDT05GSUdfRkJfVlQ4NjIzIGlzIG5vdCBzZXQKIyBDT05GSUdfRkJfVFJJREVOVCBpcyBub3Qg
c2V0CiMgQ09ORklHX0ZCX0FSSyBpcyBub3Qgc2V0CiMgQ09ORklHX0ZCX1BNMyBpcyBub3Qgc2V0
CiMgQ09ORklHX0ZCX0NBUk1JTkUgaXMgbm90IHNldApDT05GSUdfRkJfU01TQ1VGWD15CiMgQ09O
RklHX0ZCX0lCTV9HWFQ0NTAwIGlzIG5vdCBzZXQKIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qg
c2V0CiMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CiMgQ09ORklHX0ZCX01CODYyWFgg
aXMgbm90IHNldAojIENPTkZJR19GQl9TSU1QTEUgaXMgbm90IHNldAojIENPTkZJR19GQl9TU0Qx
MzA3IGlzIG5vdCBzZXQKIyBDT05GSUdfRkJfU003MTIgaXMgbm90IHNldApDT05GSUdfRkJfQ09S
RT15CkNPTkZJR19GQl9OT1RJRlk9eQojIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQK
IyBDT05GSUdfRkJfREVWSUNFIGlzIG5vdCBzZXQKQ09ORklHX0ZCX1NZU19GSUxMUkVDVD15CkNP
TkZJR19GQl9TWVNfQ09QWUFSRUE9eQpDT05GSUdfRkJfU1lTX0lNQUdFQkxJVD15CiMgQ09ORklH
X0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKQ09ORklHX0ZCX1NZU01FTV9GT1BTPXkKQ09O
RklHX0ZCX0RFRkVSUkVEX0lPPXkKQ09ORklHX0ZCX1NZU01FTV9IRUxQRVJTPXkKQ09ORklHX0ZC
X1NZU01FTV9IRUxQRVJTX0RFRkVSUkVEPXkKQ09ORklHX0ZCX01PREVfSEVMUEVSUz15CiMgQ09O
RklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CiMgZW5kIG9mIEZyYW1lIGJ1ZmZlciBEZXZp
Y2VzCgojCiMgQmFja2xpZ2h0ICYgTENEIGRldmljZSBzdXBwb3J0CiMKQ09ORklHX0xDRF9DTEFT
U19ERVZJQ0U9eQojIENPTkZJR19MQ0RfTDRGMDAyNDJUMDMgaXMgbm90IHNldAojIENPTkZJR19M
Q0RfTE1TMjgzR0YwNSBpcyBub3Qgc2V0CiMgQ09ORklHX0xDRF9MVFYzNTBRViBpcyBub3Qgc2V0
CiMgQ09ORklHX0xDRF9JTEk5MjJYIGlzIG5vdCBzZXQKIyBDT05GSUdfTENEX0lMSTkzMjAgaXMg
bm90IHNldAojIENPTkZJR19MQ0RfVERPMjRNIGlzIG5vdCBzZXQKIyBDT05GSUdfTENEX1ZHRzI0
MzJBNCBpcyBub3Qgc2V0CiMgQ09ORklHX0xDRF9QTEFURk9STSBpcyBub3Qgc2V0CiMgQ09ORklH
X0xDRF9BTVMzNjlGRzA2IGlzIG5vdCBzZXQKIyBDT05GSUdfTENEX0xNUzUwMUtGMDMgaXMgbm90
IHNldAojIENPTkZJR19MQ0RfSFg4MzU3IGlzIG5vdCBzZXQKIyBDT05GSUdfTENEX09UTTMyMjVB
IGlzIG5vdCBzZXQKQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9eQojIENPTkZJR19CQUNL
TElHSFRfS1REMjUzIGlzIG5vdCBzZXQKIyBDT05GSUdfQkFDS0xJR0hUX0tUWjg4NjYgaXMgbm90
IHNldAojIENPTkZJR19CQUNLTElHSFRfQVBQTEUgaXMgbm90IHNldAojIENPTkZJR19CQUNLTElH
SFRfUUNPTV9XTEVEIGlzIG5vdCBzZXQKIyBDT05GSUdfQkFDS0xJR0hUX1NBSEFSQSBpcyBub3Qg
c2V0CiMgQ09ORklHX0JBQ0tMSUdIVF9BRFA4ODYwIGlzIG5vdCBzZXQKIyBDT05GSUdfQkFDS0xJ
R0hUX0FEUDg4NzAgaXMgbm90IHNldAojIENPTkZJR19CQUNLTElHSFRfTE0zNjM5IGlzIG5vdCBz
ZXQKIyBDT05GSUdfQkFDS0xJR0hUX1BBTkRPUkEgaXMgbm90IHNldAojIENPTkZJR19CQUNLTElH
SFRfR1BJTyBpcyBub3Qgc2V0CiMgQ09ORklHX0JBQ0tMSUdIVF9MVjUyMDdMUCBpcyBub3Qgc2V0
CiMgQ09ORklHX0JBQ0tMSUdIVF9CRDYxMDcgaXMgbm90IHNldAojIENPTkZJR19CQUNLTElHSFRf
QVJDWENOTiBpcyBub3Qgc2V0CiMgQ09ORklHX0JBQ0tMSUdIVF9MRUQgaXMgbm90IHNldAojIGVu
ZCBvZiBCYWNrbGlnaHQgJiBMQ0QgZGV2aWNlIHN1cHBvcnQKCkNPTkZJR19IRE1JPXkKCiMKIyBD
b25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKIwpDT05GSUdfVkdBX0NPTlNPTEU9eQpDT05G
SUdfRFVNTVlfQ09OU09MRT15CkNPTkZJR19EVU1NWV9DT05TT0xFX0NPTFVNTlM9ODAKQ09ORklH
X0RVTU1ZX0NPTlNPTEVfUk9XUz0yNQojIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFIGlzIG5v
dCBzZXQKIyBlbmQgb2YgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CgojIENPTkZJR19M
T0dPIGlzIG5vdCBzZXQKIyBlbmQgb2YgR3JhcGhpY3Mgc3VwcG9ydAoKIyBDT05GSUdfRFJNX0FD
Q0VMIGlzIG5vdCBzZXQKQ09ORklHX1NPVU5EPXkKQ09ORklHX1NORD15CkNPTkZJR19TTkRfVElN
RVI9eQpDT05GSUdfU05EX1BDTT15CkNPTkZJR19TTkRfSFdERVA9eQpDT05GSUdfU05EX1NFUV9E
RVZJQ0U9eQpDT05GSUdfU05EX1JBV01JREk9eQpDT05GSUdfU05EX0pBQ0s9eQpDT05GSUdfU05E
X0pBQ0tfSU5QVVRfREVWPXkKIyBDT05GSUdfU05EX09TU0VNVUwgaXMgbm90IHNldApDT05GSUdf
U05EX1BDTV9USU1FUj15CkNPTkZJR19TTkRfSFJUSU1FUj15CiMgQ09ORklHX1NORF9EWU5BTUlD
X01JTk9SUyBpcyBub3Qgc2V0CkNPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKQ09ORklHX1NO
RF9QUk9DX0ZTPXkKQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15CiMgQ09ORklHX1NORF9WRVJC
T1NFX1BSSU5USyBpcyBub3Qgc2V0CkNPTkZJR19TTkRfQ1RMX0ZBU1RfTE9PS1VQPXkKQ09ORklH
X1NORF9ERUJVRz15CiMgQ09ORklHX1NORF9ERUJVR19WRVJCT1NFIGlzIG5vdCBzZXQKQ09ORklH
X1NORF9QQ01fWFJVTl9ERUJVRz15CiMgQ09ORklHX1NORF9DVExfSU5QVVRfVkFMSURBVElPTiBp
cyBub3Qgc2V0CiMgQ09ORklHX1NORF9DVExfREVCVUcgaXMgbm90IHNldAojIENPTkZJR19TTkRf
SkFDS19JTkpFQ1RJT05fREVCVUcgaXMgbm90IHNldApDT05GSUdfU05EX1ZNQVNURVI9eQpDT05G
SUdfU05EX0RNQV9TR0JVRj15CkNPTkZJR19TTkRfU0VRVUVOQ0VSPXkKQ09ORklHX1NORF9TRVFf
RFVNTVk9eQpDT05GSUdfU05EX1NFUV9IUlRJTUVSX0RFRkFVTFQ9eQpDT05GSUdfU05EX1NFUV9N
SURJX0VWRU5UPXkKQ09ORklHX1NORF9TRVFfTUlEST15CiMgQ09ORklHX1NORF9TRVFfVU1QIGlz
IG5vdCBzZXQKQ09ORklHX1NORF9EUklWRVJTPXkKIyBDT05GSUdfU05EX1BDU1AgaXMgbm90IHNl
dAojIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldAojIENPTkZJR19TTkRfQUxPT1AgaXMgbm90
IHNldAojIENPTkZJR19TTkRfUENNVEVTVCBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9WSVJNSURJ
IGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX01U
UzY0IGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAojIENP
TkZJR19TTkRfTVBVNDAxIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1BPUlRNQU4yWDQgaXMgbm90
IHNldApDT05GSUdfU05EX1BDST15CiMgQ09ORklHX1NORF9BRDE4ODkgaXMgbm90IHNldAojIENP
TkZJR19TTkRfQUxTMzAwIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX0FMUzQwMDAgaXMgbm90IHNl
dAojIENPTkZJR19TTkRfQUxJNTQ1MSBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9BU0lIUEkgaXMg
bm90IHNldAojIENPTkZJR19TTkRfQVRJSVhQIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX0FUSUlY
UF9NT0RFTSBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9BVTg4MTAgaXMgbm90IHNldAojIENPTkZJ
R19TTkRfQVU4ODIwIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX0FVODgzMCBpcyBub3Qgc2V0CiMg
Q09ORklHX1NORF9BVzIgaXMgbm90IHNldAojIENPTkZJR19TTkRfQVpUMzMyOCBpcyBub3Qgc2V0
CiMgQ09ORklHX1NORF9CVDg3WCBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9DQTAxMDYgaXMgbm90
IHNldAojIENPTkZJR19TTkRfQ01JUENJIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX09YWUdFTiBp
cyBub3Qgc2V0CiMgQ09ORklHX1NORF9DUzQyODEgaXMgbm90IHNldAojIENPTkZJR19TTkRfQ1M0
NlhYIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX0NUWEZJIGlzIG5vdCBzZXQKIyBDT05GSUdfU05E
X0RBUkxBMjAgaXMgbm90IHNldAojIENPTkZJR19TTkRfR0lOQTIwIGlzIG5vdCBzZXQKIyBDT05G
SUdfU05EX0xBWUxBMjAgaXMgbm90IHNldAojIENPTkZJR19TTkRfREFSTEEyNCBpcyBub3Qgc2V0
CiMgQ09ORklHX1NORF9HSU5BMjQgaXMgbm90IHNldAojIENPTkZJR19TTkRfTEFZTEEyNCBpcyBu
b3Qgc2V0CiMgQ09ORklHX1NORF9NT05BIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX01JQSBpcyBu
b3Qgc2V0CiMgQ09ORklHX1NORF9FQ0hPM0cgaXMgbm90IHNldAojIENPTkZJR19TTkRfSU5ESUdP
IGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX0lORElHT0lPIGlzIG5vdCBzZXQKIyBDT05GSUdfU05E
X0lORElHT0RKIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX0lORElHT0lPWCBpcyBub3Qgc2V0CiMg
Q09ORklHX1NORF9JTkRJR09ESlggaXMgbm90IHNldAojIENPTkZJR19TTkRfRU1VMTBLMSBpcyBu
b3Qgc2V0CiMgQ09ORklHX1NORF9FTVUxMEsxWCBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9FTlMx
MzcwIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX0VOUzEzNzEgaXMgbm90IHNldAojIENPTkZJR19T
TkRfRVMxOTM4IGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX0VTMTk2OCBpcyBub3Qgc2V0CiMgQ09O
RklHX1NORF9GTTgwMSBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9IRFNQIGlzIG5vdCBzZXQKIyBD
T05GSUdfU05EX0hEU1BNIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX0lDRTE3MTIgaXMgbm90IHNl
dAojIENPTkZJR19TTkRfSUNFMTcyNCBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9JTlRFTDhYMCBp
cyBub3Qgc2V0CiMgQ09ORklHX1NORF9JTlRFTDhYME0gaXMgbm90IHNldAojIENPTkZJR19TTkRf
S09SRzEyMTIgaXMgbm90IHNldAojIENPTkZJR19TTkRfTE9MQSBpcyBub3Qgc2V0CiMgQ09ORklH
X1NORF9MWDY0NjRFUyBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9NQUVTVFJPMyBpcyBub3Qgc2V0
CiMgQ09ORklHX1NORF9NSVhBUlQgaXMgbm90IHNldAojIENPTkZJR19TTkRfTk0yNTYgaXMgbm90
IHNldAojIENPTkZJR19TTkRfUENYSFIgaXMgbm90IHNldAojIENPTkZJR19TTkRfUklQVElERSBp
cyBub3Qgc2V0CiMgQ09ORklHX1NORF9STUUzMiBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9STUU5
NiBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9STUU5NjUyIGlzIG5vdCBzZXQKIyBDT05GSUdfU05E
X1NFNlggaXMgbm90IHNldAojIENPTkZJR19TTkRfU09OSUNWSUJFUyBpcyBub3Qgc2V0CiMgQ09O
RklHX1NORF9UUklERU5UIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1ZJQTgyWFggaXMgbm90IHNl
dAojIENPTkZJR19TTkRfVklBODJYWF9NT0RFTSBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9WSVJU
VU9TTyBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9WWDIyMiBpcyBub3Qgc2V0CiMgQ09ORklHX1NO
RF9ZTUZQQ0kgaXMgbm90IHNldAoKIwojIEhELUF1ZGlvCiMKQ09ORklHX1NORF9IREE9eQpDT05G
SUdfU05EX0hEQV9JTlRFTD15CkNPTkZJR19TTkRfSERBX0hXREVQPXkKIyBDT05GSUdfU05EX0hE
QV9SRUNPTkZJRyBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9IREFfSU5QVVRfQkVFUCBpcyBub3Qg
c2V0CiMgQ09ORklHX1NORF9IREFfUEFUQ0hfTE9BREVSIGlzIG5vdCBzZXQKIyBDT05GSUdfU05E
X0hEQV9DT0RFQ19SRUFMVEVLIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX0hEQV9DT0RFQ19BTkFM
T0cgaXMgbm90IHNldAojIENPTkZJR19TTkRfSERBX0NPREVDX1NJR01BVEVMIGlzIG5vdCBzZXQK
IyBDT05GSUdfU05EX0hEQV9DT0RFQ19WSUEgaXMgbm90IHNldAojIENPTkZJR19TTkRfSERBX0NP
REVDX0hETUkgaXMgbm90IHNldAojIENPTkZJR19TTkRfSERBX0NPREVDX0NJUlJVUyBpcyBub3Qg
c2V0CiMgQ09ORklHX1NORF9IREFfQ09ERUNfQ1M4NDA5IGlzIG5vdCBzZXQKIyBDT05GSUdfU05E
X0hEQV9DT0RFQ19DT05FWEFOVCBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9IREFfQ09ERUNfQ0Ew
MTEwIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX0hEQV9DT0RFQ19DQTAxMzIgaXMgbm90IHNldAoj
IENPTkZJR19TTkRfSERBX0NPREVDX0NNRURJQSBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9IREFf
Q09ERUNfU0kzMDU0IGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX0hEQV9HRU5FUklDIGlzIG5vdCBz
ZXQKQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRV9ERUZBVUxUPTAKIyBDT05GSUdfU05EX0hEQV9J
TlRFTF9IRE1JX1NJTEVOVF9TVFJFQU0gaXMgbm90IHNldAojIENPTkZJR19TTkRfSERBX0NUTF9E
RVZfSUQgaXMgbm90IHNldAojIGVuZCBvZiBIRC1BdWRpbwoKQ09ORklHX1NORF9IREFfQ09SRT15
CkNPTkZJR19TTkRfSERBX0NPTVBPTkVOVD15CkNPTkZJR19TTkRfSERBX0k5MTU9eQpDT05GSUdf
U05EX0hEQV9QUkVBTExPQ19TSVpFPTAKQ09ORklHX1NORF9JTlRFTF9OSExUPXkKQ09ORklHX1NO
RF9JTlRFTF9EU1BfQ09ORklHPXkKQ09ORklHX1NORF9JTlRFTF9TT1VORFdJUkVfQUNQST15CiMg
Q09ORklHX1NORF9TUEkgaXMgbm90IHNldApDT05GSUdfU05EX1VTQj15CkNPTkZJR19TTkRfVVNC
X0FVRElPPXkKIyBDT05GSUdfU05EX1VTQl9BVURJT19NSURJX1YyIGlzIG5vdCBzZXQKQ09ORklH
X1NORF9VU0JfQVVESU9fVVNFX01FRElBX0NPTlRST0xMRVI9eQpDT05GSUdfU05EX1VTQl9VQTEw
MT15CkNPTkZJR19TTkRfVVNCX1VTWDJZPXkKQ09ORklHX1NORF9VU0JfQ0FJQVE9eQpDT05GSUdf
U05EX1VTQl9DQUlBUV9JTlBVVD15CkNPTkZJR19TTkRfVVNCX1VTMTIyTD15CkNPTkZJR19TTkRf
VVNCXzZGSVJFPXkKQ09ORklHX1NORF9VU0JfSElGQUNFPXkKQ09ORklHX1NORF9CQ0QyMDAwPXkK
Q09ORklHX1NORF9VU0JfTElORTY9eQpDT05GSUdfU05EX1VTQl9QT0Q9eQpDT05GSUdfU05EX1VT
Ql9QT0RIRD15CkNPTkZJR19TTkRfVVNCX1RPTkVQT1JUPXkKQ09ORklHX1NORF9VU0JfVkFSSUFY
PXkKQ09ORklHX1NORF9QQ01DSUE9eQojIENPTkZJR19TTkRfVlhQT0NLRVQgaXMgbm90IHNldAoj
IENPTkZJR19TTkRfUERBVURJT0NGIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQyBpcyBub3Qg
c2V0CkNPTkZJR19TTkRfWDg2PXkKIyBDT05GSUdfSERNSV9MUEVfQVVESU8gaXMgbm90IHNldAoj
IENPTkZJR19TTkRfVklSVElPIGlzIG5vdCBzZXQKQ09ORklHX0hJRF9TVVBQT1JUPXkKQ09ORklH
X0hJRD15CkNPTkZJR19ISURfQkFUVEVSWV9TVFJFTkdUSD15CkNPTkZJR19ISURSQVc9eQpDT05G
SUdfVUhJRD15CkNPTkZJR19ISURfR0VORVJJQz15CgojCiMgU3BlY2lhbCBISUQgZHJpdmVycwoj
CkNPTkZJR19ISURfQTRURUNIPXkKQ09ORklHX0hJRF9BQ0NVVE9VQ0g9eQpDT05GSUdfSElEX0FD
UlVYPXkKQ09ORklHX0hJRF9BQ1JVWF9GRj15CkNPTkZJR19ISURfQVBQTEU9eQpDT05GSUdfSElE
X0FQUExFSVI9eQpDT05GSUdfSElEX0FTVVM9eQpDT05GSUdfSElEX0FVUkVBTD15CkNPTkZJR19I
SURfQkVMS0lOPXkKQ09ORklHX0hJRF9CRVRPUF9GRj15CiMgQ09ORklHX0hJRF9CSUdCRU5fRkYg
aXMgbm90IHNldApDT05GSUdfSElEX0NIRVJSWT15CkNPTkZJR19ISURfQ0hJQ09OWT15CkNPTkZJ
R19ISURfQ09SU0FJUj15CiMgQ09ORklHX0hJRF9DT1VHQVIgaXMgbm90IHNldAojIENPTkZJR19I
SURfTUFDQUxMWSBpcyBub3Qgc2V0CkNPTkZJR19ISURfUFJPRElLRVlTPXkKQ09ORklHX0hJRF9D
TUVESUE9eQpDT05GSUdfSElEX0NQMjExMj15CiMgQ09ORklHX0hJRF9DUkVBVElWRV9TQjA1NDAg
aXMgbm90IHNldApDT05GSUdfSElEX0NZUFJFU1M9eQpDT05GSUdfSElEX0RSQUdPTlJJU0U9eQpD
T05GSUdfRFJBR09OUklTRV9GRj15CkNPTkZJR19ISURfRU1TX0ZGPXkKIyBDT05GSUdfSElEX0VM
QU4gaXMgbm90IHNldApDT05GSUdfSElEX0VMRUNPTT15CkNPTkZJR19ISURfRUxPPXkKIyBDT05G
SUdfSElEX0VWSVNJT04gaXMgbm90IHNldApDT05GSUdfSElEX0VaS0VZPXkKIyBDT05GSUdfSElE
X0ZUMjYwIGlzIG5vdCBzZXQKQ09ORklHX0hJRF9HRU1CSVJEPXkKQ09ORklHX0hJRF9HRlJNPXkK
IyBDT05GSUdfSElEX0dMT1JJT1VTIGlzIG5vdCBzZXQKQ09ORklHX0hJRF9IT0xURUs9eQpDT05G
SUdfSE9MVEVLX0ZGPXkKIyBDT05GSUdfSElEX0dPT0dMRV9TVEFESUFfRkYgaXMgbm90IHNldAoj
IENPTkZJR19ISURfVklWQUxESSBpcyBub3Qgc2V0CkNPTkZJR19ISURfR1Q2ODNSPXkKQ09ORklH
X0hJRF9LRVlUT1VDSD15CkNPTkZJR19ISURfS1lFPXkKQ09ORklHX0hJRF9VQ0xPR0lDPXkKQ09O
RklHX0hJRF9XQUxUT1A9eQojIENPTkZJR19ISURfVklFV1NPTklDIGlzIG5vdCBzZXQKIyBDT05G
SUdfSElEX1ZSQzIgaXMgbm90IHNldAojIENPTkZJR19ISURfWElBT01JIGlzIG5vdCBzZXQKQ09O
RklHX0hJRF9HWVJBVElPTj15CkNPTkZJR19ISURfSUNBREU9eQpDT05GSUdfSElEX0lURT15CiMg
Q09ORklHX0hJRF9KQUJSQSBpcyBub3Qgc2V0CkNPTkZJR19ISURfVFdJTkhBTj15CkNPTkZJR19I
SURfS0VOU0lOR1RPTj15CkNPTkZJR19ISURfTENQT1dFUj15CkNPTkZJR19ISURfTEVEPXkKQ09O
RklHX0hJRF9MRU5PVk89eQojIENPTkZJR19ISURfTEVUU0tFVENIIGlzIG5vdCBzZXQKQ09ORklH
X0hJRF9MT0dJVEVDSD15CkNPTkZJR19ISURfTE9HSVRFQ0hfREo9eQpDT05GSUdfSElEX0xPR0lU
RUNIX0hJRFBQPXkKQ09ORklHX0xPR0lURUNIX0ZGPXkKQ09ORklHX0xPR0lSVU1CTEVQQUQyX0ZG
PXkKQ09ORklHX0xPR0lHOTQwX0ZGPXkKQ09ORklHX0xPR0lXSEVFTFNfRkY9eQpDT05GSUdfSElE
X01BR0lDTU9VU0U9eQojIENPTkZJR19ISURfTUFMVFJPTiBpcyBub3Qgc2V0CkNPTkZJR19ISURf
TUFZRkxBU0g9eQojIENPTkZJR19ISURfTUVHQVdPUkxEX0ZGIGlzIG5vdCBzZXQKQ09ORklHX0hJ
RF9SRURSQUdPTj15CkNPTkZJR19ISURfTUlDUk9TT0ZUPXkKQ09ORklHX0hJRF9NT05URVJFWT15
CkNPTkZJR19ISURfTVVMVElUT1VDSD15CiMgQ09ORklHX0hJRF9OSU5URU5ETyBpcyBub3Qgc2V0
CkNPTkZJR19ISURfTlRJPXkKQ09ORklHX0hJRF9OVFJJRz15CiMgQ09ORklHX0hJRF9OVklESUFf
U0hJRUxEIGlzIG5vdCBzZXQKQ09ORklHX0hJRF9PUlRFSz15CkNPTkZJR19ISURfUEFOVEhFUkxP
UkQ9eQpDT05GSUdfUEFOVEhFUkxPUkRfRkY9eQpDT05GSUdfSElEX1BFTk1PVU5UPXkKQ09ORklH
X0hJRF9QRVRBTFlOWD15CkNPTkZJR19ISURfUElDT0xDRD15CkNPTkZJR19ISURfUElDT0xDRF9G
Qj15CkNPTkZJR19ISURfUElDT0xDRF9CQUNLTElHSFQ9eQpDT05GSUdfSElEX1BJQ09MQ0RfTENE
PXkKQ09ORklHX0hJRF9QSUNPTENEX0xFRFM9eQpDT05GSUdfSElEX1BJQ09MQ0RfQ0lSPXkKQ09O
RklHX0hJRF9QTEFOVFJPTklDUz15CiMgQ09ORklHX0hJRF9QWFJDIGlzIG5vdCBzZXQKIyBDT05G
SUdfSElEX1JBWkVSIGlzIG5vdCBzZXQKQ09ORklHX0hJRF9QUklNQVg9eQpDT05GSUdfSElEX1JF
VFJPREU9eQpDT05GSUdfSElEX1JPQ0NBVD15CkNPTkZJR19ISURfU0FJVEVLPXkKQ09ORklHX0hJ
RF9TQU1TVU5HPXkKIyBDT05GSUdfSElEX1NFTUlURUsgaXMgbm90IHNldAojIENPTkZJR19ISURf
U0lHTUFNSUNSTyBpcyBub3Qgc2V0CkNPTkZJR19ISURfU09OWT15CkNPTkZJR19TT05ZX0ZGPXkK
Q09ORklHX0hJRF9TUEVFRExJTks9eQojIENPTkZJR19ISURfU1RFQU0gaXMgbm90IHNldApDT05G
SUdfSElEX1NURUVMU0VSSUVTPXkKQ09ORklHX0hJRF9TVU5QTFVTPXkKQ09ORklHX0hJRF9STUk9
eQpDT05GSUdfSElEX0dSRUVOQVNJQT15CkNPTkZJR19HUkVFTkFTSUFfRkY9eQpDT05GSUdfSElE
X1NNQVJUSk9ZUExVUz15CkNPTkZJR19TTUFSVEpPWVBMVVNfRkY9eQpDT05GSUdfSElEX1RJVk89
eQpDT05GSUdfSElEX1RPUFNFRUQ9eQojIENPTkZJR19ISURfVE9QUkUgaXMgbm90IHNldApDT05G
SUdfSElEX1RISU5HTT15CkNPTkZJR19ISURfVEhSVVNUTUFTVEVSPXkKQ09ORklHX1RIUlVTVE1B
U1RFUl9GRj15CkNPTkZJR19ISURfVURSQVdfUFMzPXkKIyBDT05GSUdfSElEX1UyRlpFUk8gaXMg
bm90IHNldApDT05GSUdfSElEX1dBQ09NPXkKQ09ORklHX0hJRF9XSUlNT1RFPXkKQ09ORklHX0hJ
RF9YSU5NTz15CkNPTkZJR19ISURfWkVST1BMVVM9eQpDT05GSUdfWkVST1BMVVNfRkY9eQpDT05G
SUdfSElEX1pZREFDUk9OPXkKQ09ORklHX0hJRF9TRU5TT1JfSFVCPXkKQ09ORklHX0hJRF9TRU5T
T1JfQ1VTVE9NX1NFTlNPUj15CkNPTkZJR19ISURfQUxQUz15CiMgQ09ORklHX0hJRF9NQ1AyMjAw
IGlzIG5vdCBzZXQKIyBDT05GSUdfSElEX01DUDIyMjEgaXMgbm90IHNldAojIGVuZCBvZiBTcGVj
aWFsIEhJRCBkcml2ZXJzCgojCiMgSElELUJQRiBzdXBwb3J0CiMKIyBlbmQgb2YgSElELUJQRiBz
dXBwb3J0CgojCiMgVVNCIEhJRCBzdXBwb3J0CiMKQ09ORklHX1VTQl9ISUQ9eQpDT05GSUdfSElE
X1BJRD15CkNPTkZJR19VU0JfSElEREVWPXkKIyBlbmQgb2YgVVNCIEhJRCBzdXBwb3J0CgpDT05G
SUdfSTJDX0hJRD15CiMgQ09ORklHX0kyQ19ISURfQUNQSSBpcyBub3Qgc2V0CiMgQ09ORklHX0ky
Q19ISURfT0YgaXMgbm90IHNldAojIENPTkZJR19JMkNfSElEX09GX0VMQU4gaXMgbm90IHNldAoj
IENPTkZJR19JMkNfSElEX09GX0dPT0RJWCBpcyBub3Qgc2V0CgojCiMgSW50ZWwgSVNIIEhJRCBz
dXBwb3J0CiMKQ09ORklHX0lOVEVMX0lTSF9ISUQ9eQojIENPTkZJR19JTlRFTF9JU0hfRklSTVdB
UkVfRE9XTkxPQURFUiBpcyBub3Qgc2V0CiMgZW5kIG9mIEludGVsIElTSCBISUQgc3VwcG9ydAoK
IwojIEFNRCBTRkggSElEIFN1cHBvcnQKIwojIENPTkZJR19BTURfU0ZIX0hJRCBpcyBub3Qgc2V0
CiMgZW5kIG9mIEFNRCBTRkggSElEIFN1cHBvcnQKCkNPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5E
SUFOPXkKQ09ORklHX1VTQl9TVVBQT1JUPXkKQ09ORklHX1VTQl9DT01NT049eQpDT05GSUdfVVNC
X0xFRF9UUklHPXkKQ09ORklHX1VTQl9VTFBJX0JVUz15CiMgQ09ORklHX1VTQl9DT05OX0dQSU8g
aXMgbm90IHNldApDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CkNPTkZJR19VU0I9eQpDT05GSUdf
VVNCX1BDST15CkNPTkZJR19VU0JfUENJX0FNRD15CkNPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RF
VklDRVM9eQoKIwojIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKIwpDT05GSUdfVVNCX0RFRkFV
TFRfUEVSU0lTVD15CiMgQ09ORklHX1VTQl9GRVdfSU5JVF9SRVRSSUVTIGlzIG5vdCBzZXQKQ09O
RklHX1VTQl9EWU5BTUlDX01JTk9SUz15CkNPTkZJR19VU0JfT1RHPXkKIyBDT05GSUdfVVNCX09U
R19QUk9EVUNUTElTVCBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9PVEdfRElTQUJMRV9FWFRFUk5B
TF9IVUIgaXMgbm90IHNldApDT05GSUdfVVNCX09UR19GU009eQpDT05GSUdfVVNCX0xFRFNfVFJJ
R0dFUl9VU0JQT1JUPXkKQ09ORklHX1VTQl9BVVRPU1VTUEVORF9ERUxBWT0yCkNPTkZJR19VU0Jf
TU9OPXkKCiMKIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKIwpDT05GSUdfVVNCX0M2N1gw
MF9IQ0Q9eQpDT05GSUdfVVNCX1hIQ0lfSENEPXkKQ09ORklHX1VTQl9YSENJX0RCR0NBUD15CkNP
TkZJR19VU0JfWEhDSV9QQ0k9eQojIENPTkZJR19VU0JfWEhDSV9QQ0lfUkVORVNBUyBpcyBub3Qg
c2V0CkNPTkZJR19VU0JfWEhDSV9QTEFURk9STT15CkNPTkZJR19VU0JfRUhDSV9IQ0Q9eQpDT05G
SUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQ9eQpDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQ9eQpD
T05GSUdfVVNCX0VIQ0lfUENJPXkKIyBDT05GSUdfVVNCX0VIQ0lfRlNMIGlzIG5vdCBzZXQKQ09O
RklHX1VTQl9FSENJX0hDRF9QTEFURk9STT15CkNPTkZJR19VU0JfT1hVMjEwSFBfSENEPXkKQ09O
RklHX1VTQl9JU1AxMTZYX0hDRD15CkNPTkZJR19VU0JfTUFYMzQyMV9IQ0Q9eQpDT05GSUdfVVNC
X09IQ0lfSENEPXkKQ09ORklHX1VTQl9PSENJX0hDRF9QQ0k9eQojIENPTkZJR19VU0JfT0hDSV9I
Q0RfU1NCIGlzIG5vdCBzZXQKQ09ORklHX1VTQl9PSENJX0hDRF9QTEFURk9STT15CkNPTkZJR19V
U0JfVUhDSV9IQ0Q9eQpDT05GSUdfVVNCX1NMODExX0hDRD15CkNPTkZJR19VU0JfU0w4MTFfSENE
X0lTTz15CkNPTkZJR19VU0JfU0w4MTFfQ1M9eQpDT05GSUdfVVNCX1I4QTY2NTk3X0hDRD15CkNP
TkZJR19VU0JfSENEX0JDTUE9eQpDT05GSUdfVVNCX0hDRF9TU0I9eQojIENPTkZJR19VU0JfSENE
X1RFU1RfTU9ERSBpcyBub3Qgc2V0CgojCiMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCiMKQ09O
RklHX1VTQl9BQ009eQpDT05GSUdfVVNCX1BSSU5URVI9eQpDT05GSUdfVVNCX1dETT15CkNPTkZJ
R19VU0JfVE1DPXkKCiMKIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJM
S19ERVZfU0QgbWF5CiMKCiMKIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAg
Zm9yIG1vcmUgaW5mbwojCkNPTkZJR19VU0JfU1RPUkFHRT15CiMgQ09ORklHX1VTQl9TVE9SQUdF
X0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX1VTQl9TVE9SQUdFX1JFQUxURUs9eQpDT05GSUdfUkVB
TFRFS19BVVRPUE09eQpDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQj15CkNPTkZJR19VU0JfU1RP
UkFHRV9GUkVFQ09NPXkKQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMD15CkNPTkZJR19VU0JfU1RP
UkFHRV9VU0JBVD15CkNPTkZJR19VU0JfU1RPUkFHRV9TRERSMDk9eQpDT05GSUdfVVNCX1NUT1JB
R0VfU0REUjU1PXkKQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UPXkKQ09ORklHX1VTQl9TVE9S
QUdFX0FMQVVEQT15CkNPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSD15CkNPTkZJR19VU0JfU1RP
UkFHRV9LQVJNQT15CkNPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCPXkKQ09ORklHX1VT
Ql9TVE9SQUdFX0VORV9VQjYyNTA9eQpDT05GSUdfVVNCX1VBUz15CgojCiMgVVNCIEltYWdpbmcg
ZGV2aWNlcwojCkNPTkZJR19VU0JfTURDODAwPXkKQ09ORklHX1VTQl9NSUNST1RFSz15CkNPTkZJ
R19VU0JJUF9DT1JFPXkKQ09ORklHX1VTQklQX1ZIQ0lfSENEPXkKQ09ORklHX1VTQklQX1ZIQ0lf
SENfUE9SVFM9OApDT05GSUdfVVNCSVBfVkhDSV9OUl9IQ1M9MQpDT05GSUdfVVNCSVBfSE9TVD15
CkNPTkZJR19VU0JJUF9WVURDPXkKIyBDT05GSUdfVVNCSVBfREVCVUcgaXMgbm90IHNldAoKIwoj
IFVTQiBkdWFsLW1vZGUgY29udHJvbGxlciBkcml2ZXJzCiMKIyBDT05GSUdfVVNCX0NETlNfU1VQ
UE9SVCBpcyBub3Qgc2V0CkNPTkZJR19VU0JfTVVTQl9IRFJDPXkKIyBDT05GSUdfVVNCX01VU0Jf
SE9TVCBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9NVVNCX0dBREdFVCBpcyBub3Qgc2V0CkNPTkZJ
R19VU0JfTVVTQl9EVUFMX1JPTEU9eQoKIwojIFBsYXRmb3JtIEdsdWUgTGF5ZXIKIwoKIwojIE1V
U0IgRE1BIG1vZGUKIwpDT05GSUdfTVVTQl9QSU9fT05MWT15CkNPTkZJR19VU0JfRFdDMz15CkNP
TkZJR19VU0JfRFdDM19VTFBJPXkKIyBDT05GSUdfVVNCX0RXQzNfSE9TVCBpcyBub3Qgc2V0CiMg
Q09ORklHX1VTQl9EV0MzX0dBREdFVCBpcyBub3Qgc2V0CkNPTkZJR19VU0JfRFdDM19EVUFMX1JP
TEU9eQoKIwojIFBsYXRmb3JtIEdsdWUgRHJpdmVyIFN1cHBvcnQKIwpDT05GSUdfVVNCX0RXQzNf
UENJPXkKIyBDT05GSUdfVVNCX0RXQzNfSEFQUyBpcyBub3Qgc2V0CkNPTkZJR19VU0JfRFdDM19P
Rl9TSU1QTEU9eQpDT05GSUdfVVNCX0RXQzI9eQpDT05GSUdfVVNCX0RXQzJfSE9TVD15CgojCiMg
R2FkZ2V0L0R1YWwtcm9sZSBtb2RlIHJlcXVpcmVzIFVTQiBHYWRnZXQgc3VwcG9ydCB0byBiZSBl
bmFibGVkCiMKIyBDT05GSUdfVVNCX0RXQzJfUEVSSVBIRVJBTCBpcyBub3Qgc2V0CiMgQ09ORklH
X1VTQl9EV0MyX0RVQUxfUk9MRSBpcyBub3Qgc2V0CkNPTkZJR19VU0JfRFdDMl9QQ0k9eQojIENP
TkZJR19VU0JfRFdDMl9ERUJVRyBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9EV0MyX1RSQUNLX01J
U1NFRF9TT0ZTIGlzIG5vdCBzZXQKQ09ORklHX1VTQl9DSElQSURFQT15CkNPTkZJR19VU0JfQ0hJ
UElERUFfVURDPXkKQ09ORklHX1VTQl9DSElQSURFQV9IT1NUPXkKQ09ORklHX1VTQl9DSElQSURF
QV9QQ0k9eQojIENPTkZJR19VU0JfQ0hJUElERUFfTVNNIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNC
X0NISVBJREVBX05QQ00gaXMgbm90IHNldAojIENPTkZJR19VU0JfQ0hJUElERUFfSU1YIGlzIG5v
dCBzZXQKIyBDT05GSUdfVVNCX0NISVBJREVBX0dFTkVSSUMgaXMgbm90IHNldAojIENPTkZJR19V
U0JfQ0hJUElERUFfVEVHUkEgaXMgbm90IHNldApDT05GSUdfVVNCX0lTUDE3NjA9eQpDT05GSUdf
VVNCX0lTUDE3NjBfSENEPXkKQ09ORklHX1VTQl9JU1AxNzYxX1VEQz15CiMgQ09ORklHX1VTQl9J
U1AxNzYwX0hPU1RfUk9MRSBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9JU1AxNzYwX0dBREdFVF9S
T0xFIGlzIG5vdCBzZXQKQ09ORklHX1VTQl9JU1AxNzYwX0RVQUxfUk9MRT15CgojCiMgVVNCIHBv
cnQgZHJpdmVycwojCkNPTkZJR19VU0JfU0VSSUFMPXkKQ09ORklHX1VTQl9TRVJJQUxfQ09OU09M
RT15CkNPTkZJR19VU0JfU0VSSUFMX0dFTkVSSUM9eQpDT05GSUdfVVNCX1NFUklBTF9TSU1QTEU9
eQpDT05GSUdfVVNCX1NFUklBTF9BSVJDQUJMRT15CkNPTkZJR19VU0JfU0VSSUFMX0FSSzMxMTY9
eQpDT05GSUdfVVNCX1NFUklBTF9CRUxLSU49eQpDT05GSUdfVVNCX1NFUklBTF9DSDM0MT15CkNP
TkZJR19VU0JfU0VSSUFMX1dISVRFSEVBVD15CkNPTkZJR19VU0JfU0VSSUFMX0RJR0lfQUNDRUxF
UE9SVD15CkNPTkZJR19VU0JfU0VSSUFMX0NQMjEwWD15CkNPTkZJR19VU0JfU0VSSUFMX0NZUFJF
U1NfTTg9eQpDT05GSUdfVVNCX1NFUklBTF9FTVBFRz15CkNPTkZJR19VU0JfU0VSSUFMX0ZURElf
U0lPPXkKQ09ORklHX1VTQl9TRVJJQUxfVklTT1I9eQpDT05GSUdfVVNCX1NFUklBTF9JUEFRPXkK
Q09ORklHX1VTQl9TRVJJQUxfSVI9eQpDT05GSUdfVVNCX1NFUklBTF9FREdFUE9SVD15CkNPTkZJ
R19VU0JfU0VSSUFMX0VER0VQT1JUX1RJPXkKQ09ORklHX1VTQl9TRVJJQUxfRjgxMjMyPXkKQ09O
RklHX1VTQl9TRVJJQUxfRjgxNTNYPXkKQ09ORklHX1VTQl9TRVJJQUxfR0FSTUlOPXkKQ09ORklH
X1VTQl9TRVJJQUxfSVBXPXkKQ09ORklHX1VTQl9TRVJJQUxfSVVVPXkKQ09ORklHX1VTQl9TRVJJ
QUxfS0VZU1BBTl9QREE9eQpDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOPXkKQ09ORklHX1VTQl9T
RVJJQUxfS0xTST15CkNPTkZJR19VU0JfU0VSSUFMX0tPQklMX1NDVD15CkNPTkZJR19VU0JfU0VS
SUFMX01DVF9VMjMyPXkKQ09ORklHX1VTQl9TRVJJQUxfTUVUUk89eQpDT05GSUdfVVNCX1NFUklB
TF9NT1M3NzIwPXkKQ09ORklHX1VTQl9TRVJJQUxfTU9TNzcxNV9QQVJQT1JUPXkKQ09ORklHX1VT
Ql9TRVJJQUxfTU9TNzg0MD15CkNPTkZJR19VU0JfU0VSSUFMX01YVVBPUlQ9eQpDT05GSUdfVVNC
X1NFUklBTF9OQVZNQU49eQpDT05GSUdfVVNCX1NFUklBTF9QTDIzMDM9eQpDT05GSUdfVVNCX1NF
UklBTF9PVEk2ODU4PXkKQ09ORklHX1VTQl9TRVJJQUxfUUNBVVg9eQpDT05GSUdfVVNCX1NFUklB
TF9RVUFMQ09NTT15CkNPTkZJR19VU0JfU0VSSUFMX1NQQ1A4WDU9eQpDT05GSUdfVVNCX1NFUklB
TF9TQUZFPXkKIyBDT05GSUdfVVNCX1NFUklBTF9TQUZFX1BBRERFRCBpcyBub3Qgc2V0CkNPTkZJ
R19VU0JfU0VSSUFMX1NJRVJSQVdJUkVMRVNTPXkKQ09ORklHX1VTQl9TRVJJQUxfU1lNQk9MPXkK
Q09ORklHX1VTQl9TRVJJQUxfVEk9eQpDT05GSUdfVVNCX1NFUklBTF9DWUJFUkpBQ0s9eQpDT05G
SUdfVVNCX1NFUklBTF9XV0FOPXkKQ09ORklHX1VTQl9TRVJJQUxfT1BUSU9OPXkKQ09ORklHX1VT
Ql9TRVJJQUxfT01OSU5FVD15CkNPTkZJR19VU0JfU0VSSUFMX09QVElDT049eQpDT05GSUdfVVNC
X1NFUklBTF9YU0VOU19NVD15CkNPTkZJR19VU0JfU0VSSUFMX1dJU0hCT05FPXkKQ09ORklHX1VT
Ql9TRVJJQUxfU1NVMTAwPXkKQ09ORklHX1VTQl9TRVJJQUxfUVQyPXkKQ09ORklHX1VTQl9TRVJJ
QUxfVVBENzhGMDczMD15CiMgQ09ORklHX1VTQl9TRVJJQUxfWFIgaXMgbm90IHNldApDT05GSUdf
VVNCX1NFUklBTF9ERUJVRz15CgojCiMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwojCkNPTkZJ
R19VU0JfVVNTNzIwPXkKQ09ORklHX1VTQl9FTUk2Mj15CkNPTkZJR19VU0JfRU1JMjY9eQpDT05G
SUdfVVNCX0FEVVRVWD15CkNPTkZJR19VU0JfU0VWU0VHPXkKQ09ORklHX1VTQl9MRUdPVE9XRVI9
eQpDT05GSUdfVVNCX0xDRD15CkNPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjM9eQpDT05GSUdfVVNC
X0NZVEhFUk09eQpDT05GSUdfVVNCX0lETU9VU0U9eQpDT05GSUdfVVNCX0FQUExFRElTUExBWT15
CiMgQ09ORklHX0FQUExFX01GSV9GQVNUQ0hBUkdFIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0xK
Q0EgaXMgbm90IHNldApDT05GSUdfVVNCX1NJU1VTQlZHQT15CkNPTkZJR19VU0JfTEQ9eQpDT05G
SUdfVVNCX1RSQU5DRVZJQlJBVE9SPXkKQ09ORklHX1VTQl9JT1dBUlJJT1I9eQpDT05GSUdfVVNC
X1RFU1Q9eQpDT05GSUdfVVNCX0VIU0VUX1RFU1RfRklYVFVSRT15CkNPTkZJR19VU0JfSVNJR0hU
Rlc9eQpDT05GSUdfVVNCX1lVUkVYPXkKQ09ORklHX1VTQl9FWlVTQl9GWDI9eQpDT05GSUdfVVNC
X0hVQl9VU0IyNTFYQj15CkNPTkZJR19VU0JfSFNJQ19VU0IzNTAzPXkKQ09ORklHX1VTQl9IU0lD
X1VTQjQ2MDQ9eQpDT05GSUdfVVNCX0xJTktfTEFZRVJfVEVTVD15CkNPTkZJR19VU0JfQ0hBT1NL
RVk9eQojIENPTkZJR19VU0JfT05CT0FSRF9IVUIgaXMgbm90IHNldApDT05GSUdfVVNCX0FUTT15
CkNPTkZJR19VU0JfU1BFRURUT1VDSD15CkNPTkZJR19VU0JfQ1hBQ1JVPXkKQ09ORklHX1VTQl9V
RUFHTEVBVE09eQpDT05GSUdfVVNCX1hVU0JBVE09eQoKIwojIFVTQiBQaHlzaWNhbCBMYXllciBk
cml2ZXJzCiMKQ09ORklHX1VTQl9QSFk9eQpDT05GSUdfTk9QX1VTQl9YQ0VJVj15CkNPTkZJR19V
U0JfR1BJT19WQlVTPXkKQ09ORklHX1RBSFZPX1VTQj15CkNPTkZJR19UQUhWT19VU0JfSE9TVF9C
WV9ERUZBVUxUPXkKQ09ORklHX1VTQl9JU1AxMzAxPXkKIyBlbmQgb2YgVVNCIFBoeXNpY2FsIExh
eWVyIGRyaXZlcnMKCkNPTkZJR19VU0JfR0FER0VUPXkKIyBDT05GSUdfVVNCX0dBREdFVF9ERUJV
RyBpcyBub3Qgc2V0CkNPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTPXkKQ09ORklHX1VTQl9H
QURHRVRfREVCVUdfRlM9eQpDT05GSUdfVVNCX0dBREdFVF9WQlVTX0RSQVc9NTAwCkNPTkZJR19V
U0JfR0FER0VUX1NUT1JBR0VfTlVNX0JVRkZFUlM9MgoKIwojIFVTQiBQZXJpcGhlcmFsIENvbnRy
b2xsZXIKIwpDT05GSUdfVVNCX0dSX1VEQz15CkNPTkZJR19VU0JfUjhBNjY1OTc9eQpDT05GSUdf
VVNCX1BYQTI3WD15CkNPTkZJR19VU0JfTVZfVURDPXkKQ09ORklHX1VTQl9NVl9VM0Q9eQpDT05G
SUdfVVNCX1NOUF9DT1JFPXkKIyBDT05GSUdfVVNCX1NOUF9VRENfUExBVCBpcyBub3Qgc2V0CiMg
Q09ORklHX1VTQl9NNjY1OTIgaXMgbm90IHNldApDT05GSUdfVVNCX0JEQ19VREM9eQpDT05GSUdf
VVNCX0FNRDU1MzZVREM9eQpDT05GSUdfVVNCX05FVDIyNzI9eQpDT05GSUdfVVNCX05FVDIyNzJf
RE1BPXkKQ09ORklHX1VTQl9ORVQyMjgwPXkKQ09ORklHX1VTQl9HT0tVPXkKQ09ORklHX1VTQl9F
RzIwVD15CiMgQ09ORklHX1VTQl9HQURHRVRfWElMSU5YIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNC
X01BWDM0MjBfVURDIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0NETlMyX1VEQyBpcyBub3Qgc2V0
CkNPTkZJR19VU0JfRFVNTVlfSENEPXkKIyBlbmQgb2YgVVNCIFBlcmlwaGVyYWwgQ29udHJvbGxl
cgoKIyBDT05GSUdfVVNCX0NPTkZJR0ZTIGlzIG5vdCBzZXQKCiMKIyBVU0IgR2FkZ2V0IHByZWNv
bXBvc2VkIGNvbmZpZ3VyYXRpb25zCiMKIyBDT05GSUdfVVNCX1pFUk8gaXMgbm90IHNldAojIENP
TkZJR19VU0JfQVVESU8gaXMgbm90IHNldAojIENPTkZJR19VU0JfRVRIIGlzIG5vdCBzZXQKIyBD
T05GSUdfVVNCX0dfTkNNIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0dBREdFVEZTIGlzIG5vdCBz
ZXQKIyBDT05GSUdfVVNCX0ZVTkNUSU9ORlMgaXMgbm90IHNldAojIENPTkZJR19VU0JfTUFTU19T
VE9SQUdFIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0dBREdFVF9UQVJHRVQgaXMgbm90IHNldAoj
IENPTkZJR19VU0JfR19TRVJJQUwgaXMgbm90IHNldAojIENPTkZJR19VU0JfTUlESV9HQURHRVQg
aXMgbm90IHNldAojIENPTkZJR19VU0JfR19QUklOVEVSIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNC
X0NEQ19DT01QT1NJVEUgaXMgbm90IHNldAojIENPTkZJR19VU0JfR19OT0tJQSBpcyBub3Qgc2V0
CiMgQ09ORklHX1VTQl9HX0FDTV9NUyBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9HX01VTFRJIGlz
IG5vdCBzZXQKIyBDT05GSUdfVVNCX0dfSElEIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0dfREJH
UCBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9HX1dFQkNBTSBpcyBub3Qgc2V0CkNPTkZJR19VU0Jf
UkFXX0dBREdFVD15CiMgZW5kIG9mIFVTQiBHYWRnZXQgcHJlY29tcG9zZWQgY29uZmlndXJhdGlv
bnMKCkNPTkZJR19UWVBFQz15CkNPTkZJR19UWVBFQ19UQ1BNPXkKQ09ORklHX1RZUEVDX1RDUENJ
PXkKIyBDT05GSUdfVFlQRUNfUlQxNzExSCBpcyBub3Qgc2V0CiMgQ09ORklHX1RZUEVDX1RDUENJ
X01BWElNIGlzIG5vdCBzZXQKQ09ORklHX1RZUEVDX0ZVU0IzMDI9eQpDT05GSUdfVFlQRUNfVUNT
ST15CiMgQ09ORklHX1VDU0lfQ0NHIGlzIG5vdCBzZXQKQ09ORklHX1VDU0lfQUNQST15CiMgQ09O
RklHX1VDU0lfU1RNMzJHMCBpcyBub3Qgc2V0CkNPTkZJR19UWVBFQ19UUFM2NTk4WD15CiMgQ09O
RklHX1RZUEVDX0FOWDc0MTEgaXMgbm90IHNldAojIENPTkZJR19UWVBFQ19SVDE3MTkgaXMgbm90
IHNldAojIENPTkZJR19UWVBFQ19IRDNTUzMyMjAgaXMgbm90IHNldAojIENPTkZJR19UWVBFQ19T
VFVTQjE2MFggaXMgbm90IHNldAojIENPTkZJR19UWVBFQ19XVVNCMzgwMSBpcyBub3Qgc2V0Cgoj
CiMgVVNCIFR5cGUtQyBNdWx0aXBsZXhlci9EZU11bHRpcGxleGVyIFN3aXRjaCBzdXBwb3J0CiMK
IyBDT05GSUdfVFlQRUNfTVVYX0ZTQTQ0ODAgaXMgbm90IHNldAojIENPTkZJR19UWVBFQ19NVVhf
R1BJT19TQlUgaXMgbm90IHNldAojIENPTkZJR19UWVBFQ19NVVhfUEkzVVNCMzA1MzIgaXMgbm90
IHNldAojIENPTkZJR19UWVBFQ19NVVhfTkI3VlBROTA0TSBpcyBub3Qgc2V0CiMgQ09ORklHX1RZ
UEVDX01VWF9QVE4zNjUwMiBpcyBub3Qgc2V0CiMgQ09ORklHX1RZUEVDX01VWF9XQ0Q5MzlYX1VT
QlNTIGlzIG5vdCBzZXQKIyBlbmQgb2YgVVNCIFR5cGUtQyBNdWx0aXBsZXhlci9EZU11bHRpcGxl
eGVyIFN3aXRjaCBzdXBwb3J0CgojCiMgVVNCIFR5cGUtQyBBbHRlcm5hdGUgTW9kZSBkcml2ZXJz
CiMKIyBDT05GSUdfVFlQRUNfRFBfQUxUTU9ERSBpcyBub3Qgc2V0CiMgZW5kIG9mIFVTQiBUeXBl
LUMgQWx0ZXJuYXRlIE1vZGUgZHJpdmVycwoKQ09ORklHX1VTQl9ST0xFX1NXSVRDSD15CiMgQ09O
RklHX1VTQl9ST0xFU19JTlRFTF9YSENJIGlzIG5vdCBzZXQKQ09ORklHX01NQz15CiMgQ09ORklH
X1BXUlNFUV9FTU1DIGlzIG5vdCBzZXQKIyBDT05GSUdfUFdSU0VRX1NEODc4NyBpcyBub3Qgc2V0
CiMgQ09ORklHX1BXUlNFUV9TSU1QTEUgaXMgbm90IHNldAojIENPTkZJR19NTUNfQkxPQ0sgaXMg
bm90IHNldAojIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAojIENPTkZJR19NTUNfVEVTVCBp
cyBub3Qgc2V0CgojCiMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKIwojIENP
TkZJR19NTUNfREVCVUcgaXMgbm90IHNldAojIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAoj
IENPTkZJR19NTUNfV0JTRCBpcyBub3Qgc2V0CiMgQ09ORklHX01NQ19USUZNX1NEIGlzIG5vdCBz
ZXQKIyBDT05GSUdfTU1DX1NQSSBpcyBub3Qgc2V0CiMgQ09ORklHX01NQ19TRFJJQ09IX0NTIGlz
IG5vdCBzZXQKIyBDT05GSUdfTU1DX0NCNzEwIGlzIG5vdCBzZXQKIyBDT05GSUdfTU1DX1ZJQV9T
RE1NQyBpcyBub3Qgc2V0CkNPTkZJR19NTUNfVlVCMzAwPXkKQ09ORklHX01NQ19VU0hDPXkKIyBD
T05GSUdfTU1DX1VTREhJNlJPTDAgaXMgbm90IHNldApDT05GSUdfTU1DX1JFQUxURUtfVVNCPXkK
IyBDT05GSUdfTU1DX0NRSENJIGlzIG5vdCBzZXQKIyBDT05GSUdfTU1DX0hTUSBpcyBub3Qgc2V0
CiMgQ09ORklHX01NQ19UT1NISUJBX1BDSSBpcyBub3Qgc2V0CiMgQ09ORklHX01NQ19NVEsgaXMg
bm90IHNldAojIENPTkZJR19TQ1NJX1VGU0hDRCBpcyBub3Qgc2V0CkNPTkZJR19NRU1TVElDSz15
CiMgQ09ORklHX01FTVNUSUNLX0RFQlVHIGlzIG5vdCBzZXQKCiMKIyBNZW1vcnlTdGljayBkcml2
ZXJzCiMKIyBDT05GSUdfTUVNU1RJQ0tfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0CiMgQ09ORklH
X01TUFJPX0JMT0NLIGlzIG5vdCBzZXQKIyBDT05GSUdfTVNfQkxPQ0sgaXMgbm90IHNldAoKIwoj
IE1lbW9yeVN0aWNrIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiMKIyBDT05GSUdfTUVNU1RJQ0tf
VElGTV9NUyBpcyBub3Qgc2V0CiMgQ09ORklHX01FTVNUSUNLX0pNSUNST05fMzhYIGlzIG5vdCBz
ZXQKIyBDT05GSUdfTUVNU1RJQ0tfUjU5MiBpcyBub3Qgc2V0CkNPTkZJR19NRU1TVElDS19SRUFM
VEVLX1VTQj15CkNPTkZJR19ORVdfTEVEUz15CkNPTkZJR19MRURTX0NMQVNTPXkKIyBDT05GSUdf
TEVEU19DTEFTU19GTEFTSCBpcyBub3Qgc2V0CiMgQ09ORklHX0xFRFNfQ0xBU1NfTVVMVElDT0xP
UiBpcyBub3Qgc2V0CiMgQ09ORklHX0xFRFNfQlJJR0hUTkVTU19IV19DSEFOR0VEIGlzIG5vdCBz
ZXQKCiMKIyBMRUQgZHJpdmVycwojCiMgQ09ORklHX0xFRFNfQU4zMDI1OUEgaXMgbm90IHNldAoj
IENPTkZJR19MRURTX0FQVSBpcyBub3Qgc2V0CiMgQ09ORklHX0xFRFNfQVcyMDBYWCBpcyBub3Qg
c2V0CiMgQ09ORklHX0xFRFNfQVcyMDEzIGlzIG5vdCBzZXQKIyBDT05GSUdfTEVEU19CQ002MzI4
IGlzIG5vdCBzZXQKIyBDT05GSUdfTEVEU19CQ002MzU4IGlzIG5vdCBzZXQKIyBDT05GSUdfTEVE
U19DSFRfV0NPVkUgaXMgbm90IHNldAojIENPTkZJR19MRURTX0NSMDAxNDExNCBpcyBub3Qgc2V0
CiMgQ09ORklHX0xFRFNfRUwxNTIwMzAwMCBpcyBub3Qgc2V0CiMgQ09ORklHX0xFRFNfTE0zNTMw
IGlzIG5vdCBzZXQKIyBDT05GSUdfTEVEU19MTTM1MzIgaXMgbm90IHNldAojIENPTkZJR19MRURT
X0xNMzY0MiBpcyBub3Qgc2V0CiMgQ09ORklHX0xFRFNfTE0zNjkyWCBpcyBub3Qgc2V0CiMgQ09O
RklHX0xFRFNfUENBOTUzMiBpcyBub3Qgc2V0CiMgQ09ORklHX0xFRFNfR1BJTyBpcyBub3Qgc2V0
CiMgQ09ORklHX0xFRFNfTFAzOTQ0IGlzIG5vdCBzZXQKIyBDT05GSUdfTEVEU19MUDM5NTIgaXMg
bm90IHNldAojIENPTkZJR19MRURTX0xQNTBYWCBpcyBub3Qgc2V0CiMgQ09ORklHX0xFRFNfTFA1
NVhYX0NPTU1PTiBpcyBub3Qgc2V0CiMgQ09ORklHX0xFRFNfTFA4ODYwIGlzIG5vdCBzZXQKIyBD
T05GSUdfTEVEU19QQ0E5NTVYIGlzIG5vdCBzZXQKIyBDT05GSUdfTEVEU19QQ0E5NjNYIGlzIG5v
dCBzZXQKIyBDT05GSUdfTEVEU19QQ0E5OTVYIGlzIG5vdCBzZXQKIyBDT05GSUdfTEVEU19EQUMx
MjRTMDg1IGlzIG5vdCBzZXQKIyBDT05GSUdfTEVEU19SRUdVTEFUT1IgaXMgbm90IHNldAojIENP
TkZJR19MRURTX0JEMjYwNk1WViBpcyBub3Qgc2V0CiMgQ09ORklHX0xFRFNfQkQyODAyIGlzIG5v
dCBzZXQKIyBDT05GSUdfTEVEU19JTlRFTF9TUzQyMDAgaXMgbm90IHNldAojIENPTkZJR19MRURT
X0xUMzU5MyBpcyBub3Qgc2V0CiMgQ09ORklHX0xFRFNfVENBNjUwNyBpcyBub3Qgc2V0CiMgQ09O
RklHX0xFRFNfVExDNTkxWFggaXMgbm90IHNldAojIENPTkZJR19MRURTX0xNMzU1eCBpcyBub3Qg
c2V0CiMgQ09ORklHX0xFRFNfSVMzMUZMMzE5WCBpcyBub3Qgc2V0CiMgQ09ORklHX0xFRFNfSVMz
MUZMMzJYWCBpcyBub3Qgc2V0CgojCiMgTEVEIGRyaXZlciBmb3IgYmxpbmsoMSkgVVNCIFJHQiBM
RUQgaXMgdW5kZXIgU3BlY2lhbCBISUQgZHJpdmVycyAoSElEX1RISU5HTSkKIwojIENPTkZJR19M
RURTX0JMSU5LTSBpcyBub3Qgc2V0CiMgQ09ORklHX0xFRFNfU1lTQ09OIGlzIG5vdCBzZXQKIyBD
T05GSUdfTEVEU19NTFhDUExEIGlzIG5vdCBzZXQKIyBDT05GSUdfTEVEU19NTFhSRUcgaXMgbm90
IHNldAojIENPTkZJR19MRURTX1VTRVIgaXMgbm90IHNldAojIENPTkZJR19MRURTX05JQzc4Qlgg
aXMgbm90IHNldAojIENPTkZJR19MRURTX1NQSV9CWVRFIGlzIG5vdCBzZXQKIyBDT05GSUdfTEVE
U19MTTM2OTcgaXMgbm90IHNldAojIENPTkZJR19MRURTX0xHTSBpcyBub3Qgc2V0CgojCiMgRmxh
c2ggYW5kIFRvcmNoIExFRCBkcml2ZXJzCiMKCiMKIyBSR0IgTEVEIGRyaXZlcnMKIwoKIwojIExF
RCBUcmlnZ2VycwojCkNPTkZJR19MRURTX1RSSUdHRVJTPXkKIyBDT05GSUdfTEVEU19UUklHR0VS
X1RJTUVSIGlzIG5vdCBzZXQKIyBDT05GSUdfTEVEU19UUklHR0VSX09ORVNIT1QgaXMgbm90IHNl
dAojIENPTkZJR19MRURTX1RSSUdHRVJfRElTSyBpcyBub3Qgc2V0CiMgQ09ORklHX0xFRFNfVFJJ
R0dFUl9IRUFSVEJFQVQgaXMgbm90IHNldAojIENPTkZJR19MRURTX1RSSUdHRVJfQkFDS0xJR0hU
IGlzIG5vdCBzZXQKIyBDT05GSUdfTEVEU19UUklHR0VSX0NQVSBpcyBub3Qgc2V0CiMgQ09ORklH
X0xFRFNfVFJJR0dFUl9BQ1RJVklUWSBpcyBub3Qgc2V0CiMgQ09ORklHX0xFRFNfVFJJR0dFUl9H
UElPIGlzIG5vdCBzZXQKIyBDT05GSUdfTEVEU19UUklHR0VSX0RFRkFVTFRfT04gaXMgbm90IHNl
dAoKIwojIGlwdGFibGVzIHRyaWdnZXIgaXMgdW5kZXIgTmV0ZmlsdGVyIGNvbmZpZyAoTEVEIHRh
cmdldCkKIwojIENPTkZJR19MRURTX1RSSUdHRVJfVFJBTlNJRU5UIGlzIG5vdCBzZXQKIyBDT05G
SUdfTEVEU19UUklHR0VSX0NBTUVSQSBpcyBub3Qgc2V0CiMgQ09ORklHX0xFRFNfVFJJR0dFUl9Q
QU5JQyBpcyBub3Qgc2V0CiMgQ09ORklHX0xFRFNfVFJJR0dFUl9ORVRERVYgaXMgbm90IHNldAoj
IENPTkZJR19MRURTX1RSSUdHRVJfUEFUVEVSTiBpcyBub3Qgc2V0CkNPTkZJR19MRURTX1RSSUdH
RVJfQVVESU89eQojIENPTkZJR19MRURTX1RSSUdHRVJfVFRZIGlzIG5vdCBzZXQKCiMKIyBTaW1w
bGUgTEVEIGRyaXZlcnMKIwojIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKIyBDT05G
SUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CkNPTkZJR19FREFDX0FUT01JQ19TQ1JVQj15CkNPTkZJ
R19FREFDX1NVUFBPUlQ9eQpDT05GSUdfRURBQz15CiMgQ09ORklHX0VEQUNfTEVHQUNZX1NZU0ZT
IGlzIG5vdCBzZXQKIyBDT05GSUdfRURBQ19ERUJVRyBpcyBub3Qgc2V0CiMgQ09ORklHX0VEQUNf
REVDT0RFX01DRSBpcyBub3Qgc2V0CiMgQ09ORklHX0VEQUNfRTc1MlggaXMgbm90IHNldAojIENP
TkZJR19FREFDX0k4Mjk3NVggaXMgbm90IHNldAojIENPTkZJR19FREFDX0kzMDAwIGlzIG5vdCBz
ZXQKIyBDT05GSUdfRURBQ19JMzIwMCBpcyBub3Qgc2V0CiMgQ09ORklHX0VEQUNfSUUzMTIwMCBp
cyBub3Qgc2V0CiMgQ09ORklHX0VEQUNfWDM4IGlzIG5vdCBzZXQKIyBDT05GSUdfRURBQ19JNTQw
MCBpcyBub3Qgc2V0CiMgQ09ORklHX0VEQUNfSTdDT1JFIGlzIG5vdCBzZXQKIyBDT05GSUdfRURB
Q19JNTEwMCBpcyBub3Qgc2V0CiMgQ09ORklHX0VEQUNfSTczMDAgaXMgbm90IHNldAojIENPTkZJ
R19FREFDX1NCUklER0UgaXMgbm90IHNldAojIENPTkZJR19FREFDX1NLWCBpcyBub3Qgc2V0CiMg
Q09ORklHX0VEQUNfSTEwTk0gaXMgbm90IHNldAojIENPTkZJR19FREFDX1BORDIgaXMgbm90IHNl
dAojIENPTkZJR19FREFDX0lHRU42IGlzIG5vdCBzZXQKQ09ORklHX1JUQ19MSUI9eQpDT05GSUdf
UlRDX01DMTQ2ODE4X0xJQj15CkNPTkZJR19SVENfQ0xBU1M9eQojIENPTkZJR19SVENfSENUT1NZ
UyBpcyBub3Qgc2V0CkNPTkZJR19SVENfU1lTVE9IQz15CkNPTkZJR19SVENfU1lTVE9IQ19ERVZJ
Q0U9InJ0YzAiCiMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19SVENfTlZNRU09
eQoKIwojIFJUQyBpbnRlcmZhY2VzCiMKQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKQ09ORklHX1JU
Q19JTlRGX1BST0M9eQpDT05GSUdfUlRDX0lOVEZfREVWPXkKIyBDT05GSUdfUlRDX0lOVEZfREVW
X1VJRV9FTVVMIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKCiMK
IyBJMkMgUlRDIGRyaXZlcnMKIwojIENPTkZJR19SVENfRFJWX0FCQjVaRVMzIGlzIG5vdCBzZXQK
IyBDT05GSUdfUlRDX0RSVl9BQkVPWjkgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX0FCWDgw
WCBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKIyBDT05GSUdf
UlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qg
c2V0CiMgQ09ORklHX1JUQ19EUlZfSFlNODU2MyBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZf
TUFYNjkwMCBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfTUFYMzEzMzUgaXMgbm90IHNldAoj
IENPTkZJR19SVENfRFJWX05DVDMwMThZIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9SUzVD
MzcyIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKIyBDT05G
SUdfUlRDX0RSVl9JU0wxMjAyMiBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfSVNMMTIwMjYg
aXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKIyBDT05GSUdfUlRD
X0RSVl9QQ0Y4NTIzIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTA2MyBpcyBub3Qg
c2V0CiMgQ09ORklHX1JUQ19EUlZfUENGODUzNjMgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJW
X1BDRjg1NjMgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAoj
IENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfQlEzMksg
aXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX1RXTDQwMzAgaXMgbm90IHNldAojIENPTkZJR19S
VENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qg
c2V0CiMgQ09ORklHX1JUQ19EUlZfUlg4MDEwIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9S
WDg1ODEgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CiMgQ09O
RklHX1JUQ19EUlZfRU0zMDI3IGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9SVjMwMjggaXMg
bm90IHNldAojIENPTkZJR19SVENfRFJWX1JWMzAzMiBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19E
UlZfUlY4ODAzIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9TRDMwNzggaXMgbm90IHNldAoK
IwojIFNQSSBSVEMgZHJpdmVycwojCiMgQ09ORklHX1JUQ19EUlZfTTQxVDkzIGlzIG5vdCBzZXQK
IyBDT05GSUdfUlRDX0RSVl9NNDFUOTQgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX0RTMTMw
MiBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfRFMxMzA1IGlzIG5vdCBzZXQKIyBDT05GSUdf
UlRDX0RSVl9EUzEzNDMgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX0RTMTM0NyBpcyBub3Qg
c2V0CiMgQ09ORklHX1JUQ19EUlZfRFMxMzkwIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9N
QVg2OTE2IGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CiMgQ09O
RklHX1JUQ19EUlZfUlg0NTgxIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlz
IG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRD
X0RSVl9QQ0YyMTIzIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9NQ1A3OTUgaXMgbm90IHNl
dApDT05GSUdfUlRDX0kyQ19BTkRfU1BJPXkKCiMKIyBTUEkgYW5kIEkyQyBSVEMgZHJpdmVycwoj
CiMgQ09ORklHX1JUQ19EUlZfRFMzMjMyIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9QQ0Yy
MTI3IGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9SVjMwMjlDMiBpcyBub3Qgc2V0CiMgQ09O
RklHX1JUQ19EUlZfUlg2MTEwIGlzIG5vdCBzZXQKCiMKIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwoj
CkNPTkZJR19SVENfRFJWX0NNT1M9eQojIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0
CiMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9EUzE1
NTMgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX0RTMTY4NV9GQU1JTFkgaXMgbm90IHNldAoj
IENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfRFMyNDA0
IGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CiMgQ09ORklH
X1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90
IHNldAojIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZf
TVNNNjI0MiBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKIyBD
T05GSUdfUlRDX0RSVl9aWU5RTVAgaXMgbm90IHNldAoKIwojIG9uLUNQVSBSVEMgZHJpdmVycwoj
CiMgQ09ORklHX1JUQ19EUlZfQ0FERU5DRSBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfRlRS
VEMwMTAgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX1I3MzAxIGlzIG5vdCBzZXQKCiMKIyBI
SUQgU2Vuc29yIFJUQyBkcml2ZXJzCiMKQ09ORklHX1JUQ19EUlZfSElEX1NFTlNPUl9USU1FPXkK
IyBDT05GSUdfUlRDX0RSVl9HT0xERklTSCBpcyBub3Qgc2V0CkNPTkZJR19ETUFERVZJQ0VTPXkK
IyBDT05GSUdfRE1BREVWSUNFU19ERUJVRyBpcyBub3Qgc2V0CgojCiMgRE1BIERldmljZXMKIwpD
T05GSUdfRE1BX0VOR0lORT15CkNPTkZJR19ETUFfVklSVFVBTF9DSEFOTkVMUz15CkNPTkZJR19E
TUFfQUNQST15CkNPTkZJR19ETUFfT0Y9eQojIENPTkZJR19BTFRFUkFfTVNHRE1BIGlzIG5vdCBz
ZXQKIyBDT05GSUdfRFdfQVhJX0RNQUMgaXMgbm90IHNldAojIENPTkZJR19GU0xfRURNQSBpcyBu
b3Qgc2V0CiMgQ09ORklHX0lOVEVMX0lETUE2NCBpcyBub3Qgc2V0CiMgQ09ORklHX0lOVEVMX0lE
WEQgaXMgbm90IHNldAojIENPTkZJR19JTlRFTF9JRFhEX0NPTVBBVCBpcyBub3Qgc2V0CiMgQ09O
RklHX0lOVEVMX0lPQVRETUEgaXMgbm90IHNldAojIENPTkZJR19QTFhfRE1BIGlzIG5vdCBzZXQK
IyBDT05GSUdfWElMSU5YX0RNQSBpcyBub3Qgc2V0CiMgQ09ORklHX1hJTElOWF9YRE1BIGlzIG5v
dCBzZXQKIyBDT05GSUdfWElMSU5YX1pZTlFNUF9EUERNQSBpcyBub3Qgc2V0CiMgQ09ORklHX0FN
RF9QVERNQSBpcyBub3Qgc2V0CiMgQ09ORklHX1FDT01fSElETUFfTUdNVCBpcyBub3Qgc2V0CiMg
Q09ORklHX1FDT01fSElETUEgaXMgbm90IHNldApDT05GSUdfRFdfRE1BQ19DT1JFPXkKIyBDT05G
SUdfRFdfRE1BQyBpcyBub3Qgc2V0CiMgQ09ORklHX0RXX0RNQUNfUENJIGlzIG5vdCBzZXQKIyBD
T05GSUdfRFdfRURNQSBpcyBub3Qgc2V0CkNPTkZJR19IU1VfRE1BPXkKIyBDT05GSUdfU0ZfUERN
QSBpcyBub3Qgc2V0CiMgQ09ORklHX0lOVEVMX0xETUEgaXMgbm90IHNldAoKIwojIERNQSBDbGll
bnRzCiMKIyBDT05GSUdfQVNZTkNfVFhfRE1BIGlzIG5vdCBzZXQKIyBDT05GSUdfRE1BVEVTVCBp
cyBub3Qgc2V0CgojCiMgRE1BQlVGIG9wdGlvbnMKIwpDT05GSUdfU1lOQ19GSUxFPXkKIyBDT05G
SUdfU1dfU1lOQyBpcyBub3Qgc2V0CiMgQ09ORklHX1VETUFCVUYgaXMgbm90IHNldAojIENPTkZJ
R19ETUFCVUZfTU9WRV9OT1RJRlkgaXMgbm90IHNldAojIENPTkZJR19ETUFCVUZfREVCVUcgaXMg
bm90IHNldAojIENPTkZJR19ETUFCVUZfU0VMRlRFU1RTIGlzIG5vdCBzZXQKIyBDT05GSUdfRE1B
QlVGX0hFQVBTIGlzIG5vdCBzZXQKIyBDT05GSUdfRE1BQlVGX1NZU0ZTX1NUQVRTIGlzIG5vdCBz
ZXQKIyBlbmQgb2YgRE1BQlVGIG9wdGlvbnMKCiMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiMgQ09O
RklHX1ZGSU8gaXMgbm90IHNldAojIENPTkZJR19WSVJUX0RSSVZFUlMgaXMgbm90IHNldApDT05G
SUdfVklSVElPX0FOQ0hPUj15CkNPTkZJR19WSVJUSU89eQpDT05GSUdfVklSVElPX1BDSV9MSUI9
eQpDT05GSUdfVklSVElPX1BDSV9MSUJfTEVHQUNZPXkKQ09ORklHX1ZJUlRJT19NRU5VPXkKQ09O
RklHX1ZJUlRJT19QQ0k9eQpDT05GSUdfVklSVElPX1BDSV9BRE1JTl9MRUdBQ1k9eQpDT05GSUdf
VklSVElPX1BDSV9MRUdBQ1k9eQojIENPTkZJR19WSVJUSU9fQkFMTE9PTiBpcyBub3Qgc2V0CkNP
TkZJR19WSVJUSU9fSU5QVVQ9eQojIENPTkZJR19WSVJUSU9fTU1JTyBpcyBub3Qgc2V0CkNPTkZJ
R19WSVJUSU9fRE1BX1NIQVJFRF9CVUZGRVI9eQojIENPTkZJR19WRFBBIGlzIG5vdCBzZXQKQ09O
RklHX1ZIT1NUX01FTlU9eQojIENPTkZJR19WSE9TVF9ORVQgaXMgbm90IHNldAojIENPTkZJR19W
SE9TVF9TQ1NJIGlzIG5vdCBzZXQKIyBDT05GSUdfVkhPU1RfQ1JPU1NfRU5ESUFOX0xFR0FDWSBp
cyBub3Qgc2V0CgojCiMgTWljcm9zb2Z0IEh5cGVyLVYgZ3Vlc3Qgc3VwcG9ydAojCiMgQ09ORklH
X0hZUEVSViBpcyBub3Qgc2V0CiMgZW5kIG9mIE1pY3Jvc29mdCBIeXBlci1WIGd1ZXN0IHN1cHBv
cnQKCkNPTkZJR19HUkVZQlVTPXkKQ09ORklHX0dSRVlCVVNfRVMyPXkKQ09ORklHX0NPTUVEST15
CiMgQ09ORklHX0NPTUVESV9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19DT01FRElfREVGQVVMVF9C
VUZfU0laRV9LQj0yMDQ4CkNPTkZJR19DT01FRElfREVGQVVMVF9CVUZfTUFYU0laRV9LQj0yMDQ4
MAojIENPTkZJR19DT01FRElfTUlTQ19EUklWRVJTIGlzIG5vdCBzZXQKIyBDT05GSUdfQ09NRURJ
X1BDSV9EUklWRVJTIGlzIG5vdCBzZXQKIyBDT05GSUdfQ09NRURJX1BDTUNJQV9EUklWRVJTIGlz
IG5vdCBzZXQKQ09ORklHX0NPTUVESV9VU0JfRFJJVkVSUz15CkNPTkZJR19DT01FRElfRFQ5ODEy
PXkKQ09ORklHX0NPTUVESV9OSV9VU0I2NTAxPXkKQ09ORklHX0NPTUVESV9VU0JEVVg9eQpDT05G
SUdfQ09NRURJX1VTQkRVWEZBU1Q9eQpDT05GSUdfQ09NRURJX1VTQkRVWFNJR01BPXkKQ09ORklH
X0NPTUVESV9WTUs4MFhYPXkKIyBDT05GSUdfQ09NRURJXzgyNTVfU0EgaXMgbm90IHNldAojIENP
TkZJR19DT01FRElfS0NPTUVESUxJQiBpcyBub3Qgc2V0CiMgQ09ORklHX0NPTUVESV9URVNUUyBp
cyBub3Qgc2V0CkNPTkZJR19TVEFHSU5HPXkKQ09ORklHX1BSSVNNMl9VU0I9eQojIENPTkZJR19S
VExMSUIgaXMgbm90IHNldAojIENPTkZJR19SVEw4NzIzQlMgaXMgbm90IHNldApDT05GSUdfUjg3
MTJVPXkKIyBDT05GSUdfUlRTNTIwOCBpcyBub3Qgc2V0CiMgQ09ORklHX1ZUNjY1NSBpcyBub3Qg
c2V0CiMgQ09ORklHX1ZUNjY1NiBpcyBub3Qgc2V0CgojCiMgSUlPIHN0YWdpbmcgZHJpdmVycwoj
CgojCiMgQWNjZWxlcm9tZXRlcnMKIwojIENPTkZJR19BRElTMTYyMDMgaXMgbm90IHNldAojIENP
TkZJR19BRElTMTYyNDAgaXMgbm90IHNldAojIGVuZCBvZiBBY2NlbGVyb21ldGVycwoKIwojIEFu
YWxvZyB0byBkaWdpdGFsIGNvbnZlcnRlcnMKIwojIENPTkZJR19BRDc4MTYgaXMgbm90IHNldAoj
IGVuZCBvZiBBbmFsb2cgdG8gZGlnaXRhbCBjb252ZXJ0ZXJzCgojCiMgQW5hbG9nIGRpZ2l0YWwg
YmktZGlyZWN0aW9uIGNvbnZlcnRlcnMKIwojIENPTkZJR19BRFQ3MzE2IGlzIG5vdCBzZXQKIyBl
bmQgb2YgQW5hbG9nIGRpZ2l0YWwgYmktZGlyZWN0aW9uIGNvbnZlcnRlcnMKCiMKIyBEaXJlY3Qg
RGlnaXRhbCBTeW50aGVzaXMKIwojIENPTkZJR19BRDk4MzIgaXMgbm90IHNldAojIENPTkZJR19B
RDk4MzQgaXMgbm90IHNldAojIGVuZCBvZiBEaXJlY3QgRGlnaXRhbCBTeW50aGVzaXMKCiMKIyBO
ZXR3b3JrIEFuYWx5emVyLCBJbXBlZGFuY2UgQ29udmVydGVycwojCiMgQ09ORklHX0FENTkzMyBp
cyBub3Qgc2V0CiMgZW5kIG9mIE5ldHdvcmsgQW5hbHl6ZXIsIEltcGVkYW5jZSBDb252ZXJ0ZXJz
CiMgZW5kIG9mIElJTyBzdGFnaW5nIGRyaXZlcnMKCiMgQ09ORklHX0ZCX1NNNzUwIGlzIG5vdCBz
ZXQKIyBDT05GSUdfU1RBR0lOR19NRURJQSBpcyBub3Qgc2V0CiMgQ09ORklHX1NUQUdJTkdfQk9B
UkQgaXMgbm90IHNldAojIENPTkZJR19MVEVfR0RNNzI0WCBpcyBub3Qgc2V0CiMgQ09ORklHX01P
U1RfQ09NUE9ORU5UUyBpcyBub3Qgc2V0CiMgQ09ORklHX0tTNzAxMCBpcyBub3Qgc2V0CiMgQ09O
RklHX0dSRVlCVVNfQk9PVFJPTSBpcyBub3Qgc2V0CiMgQ09ORklHX0dSRVlCVVNfRklSTVdBUkUg
aXMgbm90IHNldApDT05GSUdfR1JFWUJVU19ISUQ9eQojIENPTkZJR19HUkVZQlVTX0xJR0hUIGlz
IG5vdCBzZXQKIyBDT05GSUdfR1JFWUJVU19MT0cgaXMgbm90IHNldAojIENPTkZJR19HUkVZQlVT
X0xPT1BCQUNLIGlzIG5vdCBzZXQKIyBDT05GSUdfR1JFWUJVU19QT1dFUiBpcyBub3Qgc2V0CiMg
Q09ORklHX0dSRVlCVVNfUkFXIGlzIG5vdCBzZXQKIyBDT05GSUdfR1JFWUJVU19WSUJSQVRPUiBp
cyBub3Qgc2V0CkNPTkZJR19HUkVZQlVTX0JSSURHRURfUEhZPXkKIyBDT05GSUdfR1JFWUJVU19H
UElPIGlzIG5vdCBzZXQKIyBDT05GSUdfR1JFWUJVU19JMkMgaXMgbm90IHNldAojIENPTkZJR19H
UkVZQlVTX1NESU8gaXMgbm90IHNldAojIENPTkZJR19HUkVZQlVTX1NQSSBpcyBub3Qgc2V0CiMg
Q09ORklHX0dSRVlCVVNfVUFSVCBpcyBub3Qgc2V0CkNPTkZJR19HUkVZQlVTX1VTQj15CiMgQ09O
RklHX1BJNDMzIGlzIG5vdCBzZXQKIyBDT05GSUdfWElMX0FYSVNfRklGTyBpcyBub3Qgc2V0CiMg
Q09ORklHX0ZJRUxEQlVTX0RFViBpcyBub3Qgc2V0CiMgQ09ORklHX1ZNRV9CVVMgaXMgbm90IHNl
dApDT05GSUdfQ0hST01FX1BMQVRGT1JNUz15CiMgQ09ORklHX0NIUk9NRU9TX0FDUEkgaXMgbm90
IHNldAojIENPTkZJR19DSFJPTUVPU19MQVBUT1AgaXMgbm90IHNldAojIENPTkZJR19DSFJPTUVP
U19QU1RPUkUgaXMgbm90IHNldAojIENPTkZJR19DSFJPTUVPU19UQk1DIGlzIG5vdCBzZXQKIyBD
T05GSUdfQ1JPU19FQyBpcyBub3Qgc2V0CiMgQ09ORklHX0NST1NfS0JEX0xFRF9CQUNLTElHSFQg
aXMgbm90IHNldAojIENPTkZJR19DUk9TX0hQU19JMkMgaXMgbm90IHNldAojIENPTkZJR19DSFJP
TUVPU19QUklWQUNZX1NDUkVFTiBpcyBub3Qgc2V0CiMgQ09ORklHX01FTExBTk9YX1BMQVRGT1JN
IGlzIG5vdCBzZXQKQ09ORklHX1NVUkZBQ0VfUExBVEZPUk1TPXkKIyBDT05GSUdfU1VSRkFDRTNf
V01JIGlzIG5vdCBzZXQKIyBDT05GSUdfU1VSRkFDRV8zX1BPV0VSX09QUkVHSU9OIGlzIG5vdCBz
ZXQKIyBDT05GSUdfU1VSRkFDRV9HUEUgaXMgbm90IHNldAojIENPTkZJR19TVVJGQUNFX0hPVFBM
VUcgaXMgbm90IHNldAojIENPTkZJR19TVVJGQUNFX1BSTzNfQlVUVE9OIGlzIG5vdCBzZXQKQ09O
RklHX1g4Nl9QTEFURk9STV9ERVZJQ0VTPXkKQ09ORklHX0FDUElfV01JPXkKQ09ORklHX1dNSV9C
TU9GPXkKIyBDT05GSUdfSFVBV0VJX1dNSSBpcyBub3Qgc2V0CiMgQ09ORklHX01YTV9XTUkgaXMg
bm90IHNldAojIENPTkZJR19OVklESUFfV01JX0VDX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CiMgQ09O
RklHX1hJQU9NSV9XTUkgaXMgbm90IHNldAojIENPTkZJR19HSUdBQllURV9XTUkgaXMgbm90IHNl
dAojIENPTkZJR19ZT0dBQk9PSyBpcyBub3Qgc2V0CiMgQ09ORklHX0FDRVJIREYgaXMgbm90IHNl
dAojIENPTkZJR19BQ0VSX1dJUkVMRVNTIGlzIG5vdCBzZXQKIyBDT05GSUdfQUNFUl9XTUkgaXMg
bm90IHNldAojIENPTkZJR19BTURfUE1DIGlzIG5vdCBzZXQKIyBDT05GSUdfQU1EX0hTTVAgaXMg
bm90IHNldAojIENPTkZJR19BTURfV0JSRiBpcyBub3Qgc2V0CiMgQ09ORklHX0FEVl9TV0JVVFRP
TiBpcyBub3Qgc2V0CiMgQ09ORklHX0FQUExFX0dNVVggaXMgbm90IHNldAojIENPTkZJR19BU1VT
X0xBUFRPUCBpcyBub3Qgc2V0CiMgQ09ORklHX0FTVVNfV0lSRUxFU1MgaXMgbm90IHNldApDT05G
SUdfQVNVU19XTUk9eQojIENPTkZJR19BU1VTX05CX1dNSSBpcyBub3Qgc2V0CiMgQ09ORklHX0FT
VVNfVEYxMDNDX0RPQ0sgaXMgbm90IHNldApDT05GSUdfRUVFUENfTEFQVE9QPXkKIyBDT05GSUdf
RUVFUENfV01JIGlzIG5vdCBzZXQKIyBDT05GSUdfWDg2X1BMQVRGT1JNX0RSSVZFUlNfREVMTCBp
cyBub3Qgc2V0CiMgQ09ORklHX0FNSUxPX1JGS0lMTCBpcyBub3Qgc2V0CiMgQ09ORklHX0ZVSklU
U1VfTEFQVE9QIGlzIG5vdCBzZXQKIyBDT05GSUdfRlVKSVRTVV9UQUJMRVQgaXMgbm90IHNldAoj
IENPTkZJR19HUERfUE9DS0VUX0ZBTiBpcyBub3Qgc2V0CiMgQ09ORklHX1g4Nl9QTEFURk9STV9E
UklWRVJTX0hQIGlzIG5vdCBzZXQKIyBDT05GSUdfV0lSRUxFU1NfSE9US0VZIGlzIG5vdCBzZXQK
IyBDT05GSUdfSUJNX1JUTCBpcyBub3Qgc2V0CiMgQ09ORklHX0lERUFQQURfTEFQVE9QIGlzIG5v
dCBzZXQKIyBDT05GSUdfTEVOT1ZPX1lNQyBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfSERB
UFMgaXMgbm90IHNldAojIENPTkZJR19USElOS1BBRF9BQ1BJIGlzIG5vdCBzZXQKIyBDT05GSUdf
VEhJTktQQURfTE1JIGlzIG5vdCBzZXQKIyBDT05GSUdfSU5URUxfQVRPTUlTUDJfUE0gaXMgbm90
IHNldAojIENPTkZJR19JTlRFTF9JRlMgaXMgbm90IHNldAojIENPTkZJR19JTlRFTF9TQVJfSU5U
MTA5MiBpcyBub3Qgc2V0CiMgQ09ORklHX0lOVEVMX1NLTF9JTlQzNDcyIGlzIG5vdCBzZXQKCiMK
IyBJbnRlbCBTcGVlZCBTZWxlY3QgVGVjaG5vbG9neSBpbnRlcmZhY2Ugc3VwcG9ydAojCiMgQ09O
RklHX0lOVEVMX1NQRUVEX1NFTEVDVF9JTlRFUkZBQ0UgaXMgbm90IHNldAojIGVuZCBvZiBJbnRl
bCBTcGVlZCBTZWxlY3QgVGVjaG5vbG9neSBpbnRlcmZhY2Ugc3VwcG9ydAoKIyBDT05GSUdfSU5U
RUxfV01JX1NCTF9GV19VUERBVEUgaXMgbm90IHNldAojIENPTkZJR19JTlRFTF9XTUlfVEhVTkRF
UkJPTFQgaXMgbm90IHNldAoKIwojIEludGVsIFVuY29yZSBGcmVxdWVuY3kgQ29udHJvbAojCiMg
Q09ORklHX0lOVEVMX1VOQ09SRV9GUkVRX0NPTlRST0wgaXMgbm90IHNldAojIGVuZCBvZiBJbnRl
bCBVbmNvcmUgRnJlcXVlbmN5IENvbnRyb2wKCiMgQ09ORklHX0lOVEVMX0hJRF9FVkVOVCBpcyBu
b3Qgc2V0CiMgQ09ORklHX0lOVEVMX1ZCVE4gaXMgbm90IHNldAojIENPTkZJR19JTlRFTF9JTlQw
MDAyX1ZHUElPIGlzIG5vdCBzZXQKIyBDT05GSUdfSU5URUxfT0FLVFJBSUwgaXMgbm90IHNldAoj
IENPTkZJR19JTlRFTF9JU0hUUF9FQ0xJVEUgaXMgbm90IHNldAojIENPTkZJR19JTlRFTF9QVU5J
VF9JUEMgaXMgbm90IHNldAojIENPTkZJR19JTlRFTF9SU1QgaXMgbm90IHNldAojIENPTkZJR19J
TlRFTF9TTUFSVENPTk5FQ1QgaXMgbm90IHNldAojIENPTkZJR19JTlRFTF9UVVJCT19NQVhfMyBp
cyBub3Qgc2V0CiMgQ09ORklHX0lOVEVMX1ZTRUMgaXMgbm90IHNldAojIENPTkZJR19NU0lfRUMg
aXMgbm90IHNldAojIENPTkZJR19NU0lfTEFQVE9QIGlzIG5vdCBzZXQKIyBDT05GSUdfTVNJX1dN
SSBpcyBub3Qgc2V0CiMgQ09ORklHX1BDRU5HSU5FU19BUFUyIGlzIG5vdCBzZXQKIyBDT05GSUdf
QkFSQ09fUDUwX0dQSU8gaXMgbm90IHNldAojIENPTkZJR19TQU1TVU5HX0xBUFRPUCBpcyBub3Qg
c2V0CiMgQ09ORklHX1NBTVNVTkdfUTEwIGlzIG5vdCBzZXQKIyBDT05GSUdfQUNQSV9UT1NISUJB
IGlzIG5vdCBzZXQKIyBDT05GSUdfVE9TSElCQV9CVF9SRktJTEwgaXMgbm90IHNldAojIENPTkZJ
R19UT1NISUJBX0hBUFMgaXMgbm90IHNldAojIENPTkZJR19UT1NISUJBX1dNSSBpcyBub3Qgc2V0
CiMgQ09ORklHX0FDUElfQ01QQyBpcyBub3Qgc2V0CiMgQ09ORklHX0NPTVBBTF9MQVBUT1AgaXMg
bm90IHNldAojIENPTkZJR19MR19MQVBUT1AgaXMgbm90IHNldAojIENPTkZJR19QQU5BU09OSUNf
TEFQVE9QIGlzIG5vdCBzZXQKIyBDT05GSUdfU09OWV9MQVBUT1AgaXMgbm90IHNldAojIENPTkZJ
R19TWVNURU03Nl9BQ1BJIGlzIG5vdCBzZXQKIyBDT05GSUdfVE9QU1RBUl9MQVBUT1AgaXMgbm90
IHNldAojIENPTkZJR19TRVJJQUxfTVVMVElfSU5TVEFOVElBVEUgaXMgbm90IHNldAojIENPTkZJ
R19NTFhfUExBVEZPUk0gaXMgbm90IHNldAojIENPTkZJR19JTlNQVVJfUExBVEZPUk1fUFJPRklM
RSBpcyBub3Qgc2V0CiMgQ09ORklHX0lOVEVMX0lQUyBpcyBub3Qgc2V0CiMgQ09ORklHX0lOVEVM
X1NDVV9QQ0kgaXMgbm90IHNldAojIENPTkZJR19JTlRFTF9TQ1VfUExBVEZPUk0gaXMgbm90IHNl
dAojIENPTkZJR19TSUVNRU5TX1NJTUFUSUNfSVBDIGlzIG5vdCBzZXQKIyBDT05GSUdfV0lOTUFU
RV9GTTA3X0tFWVMgaXMgbm90IHNldApDT05GSUdfUDJTQj15CkNPTkZJR19IQVZFX0NMSz15CkNP
TkZJR19IQVZFX0NMS19QUkVQQVJFPXkKQ09ORklHX0NPTU1PTl9DTEs9eQojIENPTkZJR19MTUsw
NDgzMiBpcyBub3Qgc2V0CiMgQ09ORklHX0NPTU1PTl9DTEtfTUFYOTQ4NSBpcyBub3Qgc2V0CiMg
Q09ORklHX0NPTU1PTl9DTEtfU0k1MzQxIGlzIG5vdCBzZXQKIyBDT05GSUdfQ09NTU9OX0NMS19T
STUzNTEgaXMgbm90IHNldAojIENPTkZJR19DT01NT05fQ0xLX1NJNTE0IGlzIG5vdCBzZXQKIyBD
T05GSUdfQ09NTU9OX0NMS19TSTU0NCBpcyBub3Qgc2V0CiMgQ09ORklHX0NPTU1PTl9DTEtfU0k1
NzAgaXMgbm90IHNldAojIENPTkZJR19DT01NT05fQ0xLX0NEQ0U3MDYgaXMgbm90IHNldAojIENP
TkZJR19DT01NT05fQ0xLX0NEQ0U5MjUgaXMgbm90IHNldAojIENPTkZJR19DT01NT05fQ0xLX0NT
MjAwMF9DUCBpcyBub3Qgc2V0CiMgQ09ORklHX0NMS19UV0wgaXMgbm90IHNldAojIENPTkZJR19D
T01NT05fQ0xLX0FYSV9DTEtHRU4gaXMgbm90IHNldAojIENPTkZJR19DT01NT05fQ0xLX1JTOV9Q
Q0lFIGlzIG5vdCBzZXQKIyBDT05GSUdfQ09NTU9OX0NMS19TSTUyMVhYIGlzIG5vdCBzZXQKIyBD
T05GSUdfQ09NTU9OX0NMS19WQzMgaXMgbm90IHNldAojIENPTkZJR19DT01NT05fQ0xLX1ZDNSBp
cyBub3Qgc2V0CiMgQ09ORklHX0NPTU1PTl9DTEtfVkM3IGlzIG5vdCBzZXQKIyBDT05GSUdfQ09N
TU9OX0NMS19GSVhFRF9NTUlPIGlzIG5vdCBzZXQKIyBDT05GSUdfQ0xLX0xHTV9DR1UgaXMgbm90
IHNldAojIENPTkZJR19YSUxJTlhfVkNVIGlzIG5vdCBzZXQKIyBDT05GSUdfQ09NTU9OX0NMS19Y
TE5YX0NMS1daUkQgaXMgbm90IHNldAojIENPTkZJR19IV1NQSU5MT0NLIGlzIG5vdCBzZXQKCiMK
IyBDbG9jayBTb3VyY2UgZHJpdmVycwojCkNPTkZJR19DTEtFVlRfSTgyNTM9eQpDT05GSUdfSTgy
NTNfTE9DSz15CkNPTkZJR19DTEtCTERfSTgyNTM9eQojIGVuZCBvZiBDbG9jayBTb3VyY2UgZHJp
dmVycwoKQ09ORklHX01BSUxCT1g9eQojIENPTkZJR19QTEFURk9STV9NSFUgaXMgbm90IHNldApD
T05GSUdfUENDPXkKIyBDT05GSUdfQUxURVJBX01CT1ggaXMgbm90IHNldAojIENPTkZJR19NQUlM
Qk9YX1RFU1QgaXMgbm90IHNldApDT05GSUdfSU9NTVVfSU9WQT15CkNPTkZJR19JT01NVV9BUEk9
eQpDT05GSUdfSU9NTVVfU1VQUE9SVD15CgojCiMgR2VuZXJpYyBJT01NVSBQYWdldGFibGUgU3Vw
cG9ydAojCkNPTkZJR19JT01NVV9JT19QR1RBQkxFPXkKIyBlbmQgb2YgR2VuZXJpYyBJT01NVSBQ
YWdldGFibGUgU3VwcG9ydAoKIyBDT05GSUdfSU9NTVVfREVCVUdGUyBpcyBub3Qgc2V0CiMgQ09O
RklHX0lPTU1VX0RFRkFVTFRfRE1BX1NUUklDVCBpcyBub3Qgc2V0CkNPTkZJR19JT01NVV9ERUZB
VUxUX0RNQV9MQVpZPXkKIyBDT05GSUdfSU9NTVVfREVGQVVMVF9QQVNTVEhST1VHSCBpcyBub3Qg
c2V0CkNPTkZJR19PRl9JT01NVT15CkNPTkZJR19JT01NVV9ETUE9eQpDT05GSUdfQU1EX0lPTU1V
PXkKQ09ORklHX0RNQVJfVEFCTEU9eQpDT05GSUdfSU5URUxfSU9NTVU9eQojIENPTkZJR19JTlRF
TF9JT01NVV9TVk0gaXMgbm90IHNldAojIENPTkZJR19JTlRFTF9JT01NVV9ERUZBVUxUX09OIGlz
IG5vdCBzZXQKQ09ORklHX0lOVEVMX0lPTU1VX0ZMT1BQWV9XQT15CkNPTkZJR19JTlRFTF9JT01N
VV9TQ0FMQUJMRV9NT0RFX0RFRkFVTFRfT049eQpDT05GSUdfSU5URUxfSU9NTVVfUEVSRl9FVkVO
VFM9eQojIENPTkZJR19JT01NVUZEIGlzIG5vdCBzZXQKIyBDT05GSUdfSVJRX1JFTUFQIGlzIG5v
dCBzZXQKIyBDT05GSUdfVklSVElPX0lPTU1VIGlzIG5vdCBzZXQKCiMKIyBSZW1vdGVwcm9jIGRy
aXZlcnMKIwojIENPTkZJR19SRU1PVEVQUk9DIGlzIG5vdCBzZXQKIyBlbmQgb2YgUmVtb3RlcHJv
YyBkcml2ZXJzCgojCiMgUnBtc2cgZHJpdmVycwojCiMgQ09ORklHX1JQTVNHX1FDT01fR0xJTktf
UlBNIGlzIG5vdCBzZXQKIyBDT05GSUdfUlBNU0dfVklSVElPIGlzIG5vdCBzZXQKIyBlbmQgb2Yg
UnBtc2cgZHJpdmVycwoKIyBDT05GSUdfU09VTkRXSVJFIGlzIG5vdCBzZXQKCiMKIyBTT0MgKFN5
c3RlbSBPbiBDaGlwKSBzcGVjaWZpYyBEcml2ZXJzCiMKCiMKIyBBbWxvZ2ljIFNvQyBkcml2ZXJz
CiMKIyBlbmQgb2YgQW1sb2dpYyBTb0MgZHJpdmVycwoKIwojIEJyb2FkY29tIFNvQyBkcml2ZXJz
CiMKIyBlbmQgb2YgQnJvYWRjb20gU29DIGRyaXZlcnMKCiMKIyBOWFAvRnJlZXNjYWxlIFFvcklR
IFNvQyBkcml2ZXJzCiMKIyBlbmQgb2YgTlhQL0ZyZWVzY2FsZSBRb3JJUSBTb0MgZHJpdmVycwoK
IwojIGZ1aml0c3UgU29DIGRyaXZlcnMKIwojIGVuZCBvZiBmdWppdHN1IFNvQyBkcml2ZXJzCgoj
CiMgaS5NWCBTb0MgZHJpdmVycwojCiMgZW5kIG9mIGkuTVggU29DIGRyaXZlcnMKCiMKIyBFbmFi
bGUgTGl0ZVggU29DIEJ1aWxkZXIgc3BlY2lmaWMgZHJpdmVycwojCiMgQ09ORklHX0xJVEVYX1NP
Q19DT05UUk9MTEVSIGlzIG5vdCBzZXQKIyBlbmQgb2YgRW5hYmxlIExpdGVYIFNvQyBCdWlsZGVy
IHNwZWNpZmljIGRyaXZlcnMKCiMgQ09ORklHX1dQQ000NTBfU09DIGlzIG5vdCBzZXQKCiMKIyBR
dWFsY29tbSBTb0MgZHJpdmVycwojCiMgZW5kIG9mIFF1YWxjb21tIFNvQyBkcml2ZXJzCgojIENP
TkZJR19TT0NfVEkgaXMgbm90IHNldAoKIwojIFhpbGlueCBTb0MgZHJpdmVycwojCiMgZW5kIG9m
IFhpbGlueCBTb0MgZHJpdmVycwojIGVuZCBvZiBTT0MgKFN5c3RlbSBPbiBDaGlwKSBzcGVjaWZp
YyBEcml2ZXJzCgojCiMgUE0gRG9tYWlucwojCgojCiMgQW1sb2dpYyBQTSBEb21haW5zCiMKIyBl
bmQgb2YgQW1sb2dpYyBQTSBEb21haW5zCgojCiMgQnJvYWRjb20gUE0gRG9tYWlucwojCiMgZW5k
IG9mIEJyb2FkY29tIFBNIERvbWFpbnMKCiMKIyBpLk1YIFBNIERvbWFpbnMKIwojIGVuZCBvZiBp
Lk1YIFBNIERvbWFpbnMKCiMKIyBRdWFsY29tbSBQTSBEb21haW5zCiMKIyBlbmQgb2YgUXVhbGNv
bW0gUE0gRG9tYWlucwojIGVuZCBvZiBQTSBEb21haW5zCgojIENPTkZJR19QTV9ERVZGUkVRIGlz
IG5vdCBzZXQKQ09ORklHX0VYVENPTj15CgojCiMgRXh0Y29uIERldmljZSBEcml2ZXJzCiMKIyBD
T05GSUdfRVhUQ09OX0FEQ19KQUNLIGlzIG5vdCBzZXQKIyBDT05GSUdfRVhUQ09OX0ZTQTk0ODAg
aXMgbm90IHNldAojIENPTkZJR19FWFRDT05fR1BJTyBpcyBub3Qgc2V0CiMgQ09ORklHX0VYVENP
Tl9JTlRFTF9JTlQzNDk2IGlzIG5vdCBzZXQKQ09ORklHX0VYVENPTl9JTlRFTF9DSFRfV0M9eQoj
IENPTkZJR19FWFRDT05fTUFYMzM1NSBpcyBub3Qgc2V0CiMgQ09ORklHX0VYVENPTl9QVE41MTUw
IGlzIG5vdCBzZXQKIyBDT05GSUdfRVhUQ09OX1JUODk3M0EgaXMgbm90IHNldAojIENPTkZJR19F
WFRDT05fU001NTAyIGlzIG5vdCBzZXQKIyBDT05GSUdfRVhUQ09OX1VTQl9HUElPIGlzIG5vdCBz
ZXQKIyBDT05GSUdfRVhUQ09OX1VTQkNfVFVTQjMyMCBpcyBub3Qgc2V0CiMgQ09ORklHX01FTU9S
WSBpcyBub3Qgc2V0CkNPTkZJR19JSU89eQpDT05GSUdfSUlPX0JVRkZFUj15CiMgQ09ORklHX0lJ
T19CVUZGRVJfQ0IgaXMgbm90IHNldAojIENPTkZJR19JSU9fQlVGRkVSX0RNQSBpcyBub3Qgc2V0
CiMgQ09ORklHX0lJT19CVUZGRVJfRE1BRU5HSU5FIGlzIG5vdCBzZXQKIyBDT05GSUdfSUlPX0JV
RkZFUl9IV19DT05TVU1FUiBpcyBub3Qgc2V0CkNPTkZJR19JSU9fS0ZJRk9fQlVGPXkKQ09ORklH
X0lJT19UUklHR0VSRURfQlVGRkVSPXkKIyBDT05GSUdfSUlPX0NPTkZJR0ZTIGlzIG5vdCBzZXQK
Q09ORklHX0lJT19UUklHR0VSPXkKQ09ORklHX0lJT19DT05TVU1FUlNfUEVSX1RSSUdHRVI9Mgoj
IENPTkZJR19JSU9fU1dfREVWSUNFIGlzIG5vdCBzZXQKIyBDT05GSUdfSUlPX1NXX1RSSUdHRVIg
aXMgbm90IHNldAojIENPTkZJR19JSU9fVFJJR0dFUkVEX0VWRU5UIGlzIG5vdCBzZXQKCiMKIyBB
Y2NlbGVyb21ldGVycwojCiMgQ09ORklHX0FESVMxNjIwMSBpcyBub3Qgc2V0CiMgQ09ORklHX0FE
SVMxNjIwOSBpcyBub3Qgc2V0CiMgQ09ORklHX0FEWEwzMTNfSTJDIGlzIG5vdCBzZXQKIyBDT05G
SUdfQURYTDMxM19TUEkgaXMgbm90IHNldAojIENPTkZJR19BRFhMMzQ1X0kyQyBpcyBub3Qgc2V0
CiMgQ09ORklHX0FEWEwzNDVfU1BJIGlzIG5vdCBzZXQKIyBDT05GSUdfQURYTDM1NV9JMkMgaXMg
bm90IHNldAojIENPTkZJR19BRFhMMzU1X1NQSSBpcyBub3Qgc2V0CiMgQ09ORklHX0FEWEwzNjdf
U1BJIGlzIG5vdCBzZXQKIyBDT05GSUdfQURYTDM2N19JMkMgaXMgbm90IHNldAojIENPTkZJR19B
RFhMMzcyX1NQSSBpcyBub3Qgc2V0CiMgQ09ORklHX0FEWEwzNzJfSTJDIGlzIG5vdCBzZXQKIyBD
T05GSUdfQk1BMTgwIGlzIG5vdCBzZXQKIyBDT05GSUdfQk1BMjIwIGlzIG5vdCBzZXQKIyBDT05G
SUdfQk1BNDAwIGlzIG5vdCBzZXQKIyBDT05GSUdfQk1DMTUwX0FDQ0VMIGlzIG5vdCBzZXQKIyBD
T05GSUdfQk1JMDg4X0FDQ0VMIGlzIG5vdCBzZXQKIyBDT05GSUdfREEyODAgaXMgbm90IHNldAoj
IENPTkZJR19EQTMxMSBpcyBub3Qgc2V0CiMgQ09ORklHX0RNQVJEMDYgaXMgbm90IHNldAojIENP
TkZJR19ETUFSRDA5IGlzIG5vdCBzZXQKIyBDT05GSUdfRE1BUkQxMCBpcyBub3Qgc2V0CiMgQ09O
RklHX0ZYTFM4OTYyQUZfSTJDIGlzIG5vdCBzZXQKIyBDT05GSUdfRlhMUzg5NjJBRl9TUEkgaXMg
bm90IHNldApDT05GSUdfSElEX1NFTlNPUl9BQ0NFTF8zRD15CiMgQ09ORklHX0lJT19TVF9BQ0NF
TF8zQVhJUyBpcyBub3Qgc2V0CiMgQ09ORklHX0lJT19LWDAyMkFfU1BJIGlzIG5vdCBzZXQKIyBD
T05GSUdfSUlPX0tYMDIyQV9JMkMgaXMgbm90IHNldAojIENPTkZJR19LWFNEOSBpcyBub3Qgc2V0
CiMgQ09ORklHX0tYQ0pLMTAxMyBpcyBub3Qgc2V0CiMgQ09ORklHX01DMzIzMCBpcyBub3Qgc2V0
CiMgQ09ORklHX01NQTc0NTVfSTJDIGlzIG5vdCBzZXQKIyBDT05GSUdfTU1BNzQ1NV9TUEkgaXMg
bm90IHNldAojIENPTkZJR19NTUE3NjYwIGlzIG5vdCBzZXQKIyBDT05GSUdfTU1BODQ1MiBpcyBu
b3Qgc2V0CiMgQ09ORklHX01NQTk1NTEgaXMgbm90IHNldAojIENPTkZJR19NTUE5NTUzIGlzIG5v
dCBzZXQKIyBDT05GSUdfTVNBMzExIGlzIG5vdCBzZXQKIyBDT05GSUdfTVhDNDAwNSBpcyBub3Qg
c2V0CiMgQ09ORklHX01YQzYyNTUgaXMgbm90IHNldAojIENPTkZJR19TQ0EzMDAwIGlzIG5vdCBz
ZXQKIyBDT05GSUdfU0NBMzMwMCBpcyBub3Qgc2V0CiMgQ09ORklHX1NUSzgzMTIgaXMgbm90IHNl
dAojIENPTkZJR19TVEs4QkE1MCBpcyBub3Qgc2V0CiMgZW5kIG9mIEFjY2VsZXJvbWV0ZXJzCgoj
CiMgQW5hbG9nIHRvIGRpZ2l0YWwgY29udmVydGVycwojCiMgQ09ORklHX0FENDEzMCBpcyBub3Qg
c2V0CiMgQ09ORklHX0FENzA5MVI1IGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ3MDkxUjggaXMgbm90
IHNldAojIENPTkZJR19BRDcxMjQgaXMgbm90IHNldAojIENPTkZJR19BRDcxOTIgaXMgbm90IHNl
dAojIENPTkZJR19BRDcyNjYgaXMgbm90IHNldAojIENPTkZJR19BRDcyODAgaXMgbm90IHNldAoj
IENPTkZJR19BRDcyOTEgaXMgbm90IHNldAojIENPTkZJR19BRDcyOTIgaXMgbm90IHNldAojIENP
TkZJR19BRDcyOTggaXMgbm90IHNldAojIENPTkZJR19BRDc0NzYgaXMgbm90IHNldAojIENPTkZJ
R19BRDc2MDZfSUZBQ0VfUEFSQUxMRUwgaXMgbm90IHNldAojIENPTkZJR19BRDc2MDZfSUZBQ0Vf
U1BJIGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ3NzY2IGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ3NzY4
XzEgaXMgbm90IHNldAojIENPTkZJR19BRDc3ODAgaXMgbm90IHNldAojIENPTkZJR19BRDc3OTEg
aXMgbm90IHNldAojIENPTkZJR19BRDc3OTMgaXMgbm90IHNldAojIENPTkZJR19BRDc4ODcgaXMg
bm90IHNldAojIENPTkZJR19BRDc5MjMgaXMgbm90IHNldAojIENPTkZJR19BRDc5NDkgaXMgbm90
IHNldAojIENPTkZJR19BRDc5OVggaXMgbm90IHNldAojIENPTkZJR19BRElfQVhJX0FEQyBpcyBu
b3Qgc2V0CiMgQ09ORklHX0NDMTAwMDFfQURDIGlzIG5vdCBzZXQKQ09ORklHX0RMTjJfQURDPXkK
IyBDT05GSUdfRU5WRUxPUEVfREVURUNUT1IgaXMgbm90IHNldAojIENPTkZJR19ISTg0MzUgaXMg
bm90IHNldAojIENPTkZJR19IWDcxMSBpcyBub3Qgc2V0CiMgQ09ORklHX0lOQTJYWF9BREMgaXMg
bm90IHNldAojIENPTkZJR19MVEMyMzA5IGlzIG5vdCBzZXQKIyBDT05GSUdfTFRDMjQ3MSBpcyBu
b3Qgc2V0CiMgQ09ORklHX0xUQzI0ODUgaXMgbm90IHNldAojIENPTkZJR19MVEMyNDk2IGlzIG5v
dCBzZXQKIyBDT05GSUdfTFRDMjQ5NyBpcyBub3Qgc2V0CiMgQ09ORklHX01BWDEwMjcgaXMgbm90
IHNldAojIENPTkZJR19NQVgxMTEwMCBpcyBub3Qgc2V0CiMgQ09ORklHX01BWDExMTggaXMgbm90
IHNldAojIENPTkZJR19NQVgxMTIwNSBpcyBub3Qgc2V0CiMgQ09ORklHX01BWDExNDEwIGlzIG5v
dCBzZXQKIyBDT05GSUdfTUFYMTI0MSBpcyBub3Qgc2V0CiMgQ09ORklHX01BWDEzNjMgaXMgbm90
IHNldAojIENPTkZJR19NQVgzNDQwOCBpcyBub3Qgc2V0CiMgQ09ORklHX01BWDk2MTEgaXMgbm90
IHNldAojIENPTkZJR19NQ1AzMjBYIGlzIG5vdCBzZXQKIyBDT05GSUdfTUNQMzQyMiBpcyBub3Qg
c2V0CiMgQ09ORklHX01DUDM1NjQgaXMgbm90IHNldAojIENPTkZJR19NQ1AzOTExIGlzIG5vdCBz
ZXQKIyBDT05GSUdfTkFVNzgwMiBpcyBub3Qgc2V0CiMgQ09ORklHX1JJQ0hURUtfUlRRNjA1NiBp
cyBub3Qgc2V0CiMgQ09ORklHX1NEX0FEQ19NT0RVTEFUT1IgaXMgbm90IHNldAojIENPTkZJR19U
SV9BREMwODFDIGlzIG5vdCBzZXQKIyBDT05GSUdfVElfQURDMDgzMiBpcyBub3Qgc2V0CiMgQ09O
RklHX1RJX0FEQzA4NFMwMjEgaXMgbm90IHNldAojIENPTkZJR19USV9BREMxMjEzOCBpcyBub3Qg
c2V0CiMgQ09ORklHX1RJX0FEQzEwOFMxMDIgaXMgbm90IHNldAojIENPTkZJR19USV9BREMxMjhT
MDUyIGlzIG5vdCBzZXQKIyBDT05GSUdfVElfQURDMTYxUzYyNiBpcyBub3Qgc2V0CiMgQ09ORklH
X1RJX0FEUzEwMTUgaXMgbm90IHNldAojIENPTkZJR19USV9BRFM3OTI0IGlzIG5vdCBzZXQKIyBD
T05GSUdfVElfQURTMTEwMCBpcyBub3Qgc2V0CiMgQ09ORklHX1RJX0FEUzc5NTAgaXMgbm90IHNl
dAojIENPTkZJR19USV9BRFM4MzQ0IGlzIG5vdCBzZXQKIyBDT05GSUdfVElfQURTODY4OCBpcyBu
b3Qgc2V0CiMgQ09ORklHX1RJX0FEUzEyNFMwOCBpcyBub3Qgc2V0CiMgQ09ORklHX1RJX0FEUzEz
MUUwOCBpcyBub3Qgc2V0CiMgQ09ORklHX1RJX0xNUDkyMDY0IGlzIG5vdCBzZXQKIyBDT05GSUdf
VElfVExDNDU0MSBpcyBub3Qgc2V0CiMgQ09ORklHX1RJX1RTQzIwNDYgaXMgbm90IHNldAojIENP
TkZJR19UV0w0MDMwX01BREMgaXMgbm90IHNldAojIENPTkZJR19UV0w2MDMwX0dQQURDIGlzIG5v
dCBzZXQKIyBDT05GSUdfVkY2MTBfQURDIGlzIG5vdCBzZXQKQ09ORklHX1ZJUEVSQk9BUkRfQURD
PXkKIyBDT05GSUdfWElMSU5YX1hBREMgaXMgbm90IHNldAojIGVuZCBvZiBBbmFsb2cgdG8gZGln
aXRhbCBjb252ZXJ0ZXJzCgojCiMgQW5hbG9nIHRvIGRpZ2l0YWwgYW5kIGRpZ2l0YWwgdG8gYW5h
bG9nIGNvbnZlcnRlcnMKIwojIENPTkZJR19BRDc0MTE1IGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ3
NDQxM1IgaXMgbm90IHNldAojIGVuZCBvZiBBbmFsb2cgdG8gZGlnaXRhbCBhbmQgZGlnaXRhbCB0
byBhbmFsb2cgY29udmVydGVycwoKIwojIEFuYWxvZyBGcm9udCBFbmRzCiMKIyBDT05GSUdfSUlP
X1JFU0NBTEUgaXMgbm90IHNldAojIGVuZCBvZiBBbmFsb2cgRnJvbnQgRW5kcwoKIwojIEFtcGxp
ZmllcnMKIwojIENPTkZJR19BRDgzNjYgaXMgbm90IHNldAojIENPTkZJR19BREE0MjUwIGlzIG5v
dCBzZXQKIyBDT05GSUdfSE1DNDI1IGlzIG5vdCBzZXQKIyBlbmQgb2YgQW1wbGlmaWVycwoKIwoj
IENhcGFjaXRhbmNlIHRvIGRpZ2l0YWwgY29udmVydGVycwojCiMgQ09ORklHX0FENzE1MCBpcyBu
b3Qgc2V0CiMgQ09ORklHX0FENzc0NiBpcyBub3Qgc2V0CiMgZW5kIG9mIENhcGFjaXRhbmNlIHRv
IGRpZ2l0YWwgY29udmVydGVycwoKIwojIENoZW1pY2FsIFNlbnNvcnMKIwojIENPTkZJR19BT1NP
TkdfQUdTMDJNQSBpcyBub3Qgc2V0CiMgQ09ORklHX0FUTEFTX1BIX1NFTlNPUiBpcyBub3Qgc2V0
CiMgQ09ORklHX0FUTEFTX0VaT19TRU5TT1IgaXMgbm90IHNldAojIENPTkZJR19CTUU2ODAgaXMg
bm90IHNldAojIENPTkZJR19DQ1M4MTEgaXMgbm90IHNldAojIENPTkZJR19JQVFDT1JFIGlzIG5v
dCBzZXQKIyBDT05GSUdfU0NEMzBfQ09SRSBpcyBub3Qgc2V0CiMgQ09ORklHX1NDRDRYIGlzIG5v
dCBzZXQKIyBDT05GSUdfU0VOU0lSSU9OX1NHUDMwIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU0lS
SU9OX1NHUDQwIGlzIG5vdCBzZXQKIyBDT05GSUdfU1BTMzBfSTJDIGlzIG5vdCBzZXQKIyBDT05G
SUdfU0VOU0VBSVJfU1VOUklTRV9DTzIgaXMgbm90IHNldAojIENPTkZJR19WWjg5WCBpcyBub3Qg
c2V0CiMgZW5kIG9mIENoZW1pY2FsIFNlbnNvcnMKCiMKIyBIaWQgU2Vuc29yIElJTyBDb21tb24K
IwpDT05GSUdfSElEX1NFTlNPUl9JSU9fQ09NTU9OPXkKQ09ORklHX0hJRF9TRU5TT1JfSUlPX1RS
SUdHRVI9eQojIGVuZCBvZiBIaWQgU2Vuc29yIElJTyBDb21tb24KCiMKIyBJSU8gU0NNSSBTZW5z
b3JzCiMKIyBlbmQgb2YgSUlPIFNDTUkgU2Vuc29ycwoKIwojIFNTUCBTZW5zb3IgQ29tbW9uCiMK
IyBDT05GSUdfSUlPX1NTUF9TRU5TT1JIVUIgaXMgbm90IHNldAojIGVuZCBvZiBTU1AgU2Vuc29y
IENvbW1vbgoKIwojIERpZ2l0YWwgdG8gYW5hbG9nIGNvbnZlcnRlcnMKIwojIENPTkZJR19BRDM1
NTJSIGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ1MDY0IGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ1MzYw
IGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ1MzgwIGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ1NDIxIGlz
IG5vdCBzZXQKIyBDT05GSUdfQUQ1NDQ2IGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ1NDQ5IGlzIG5v
dCBzZXQKIyBDT05GSUdfQUQ1NTkyUiBpcyBub3Qgc2V0CiMgQ09ORklHX0FENTU5M1IgaXMgbm90
IHNldAojIENPTkZJR19BRDU1MDQgaXMgbm90IHNldAojIENPTkZJR19BRDU2MjRSX1NQSSBpcyBu
b3Qgc2V0CiMgQ09ORklHX0xUQzI2ODggaXMgbm90IHNldAojIENPTkZJR19BRDU2ODZfU1BJIGlz
IG5vdCBzZXQKIyBDT05GSUdfQUQ1Njk2X0kyQyBpcyBub3Qgc2V0CiMgQ09ORklHX0FENTc1NSBp
cyBub3Qgc2V0CiMgQ09ORklHX0FENTc1OCBpcyBub3Qgc2V0CiMgQ09ORklHX0FENTc2MSBpcyBu
b3Qgc2V0CiMgQ09ORklHX0FENTc2NCBpcyBub3Qgc2V0CiMgQ09ORklHX0FENTc2NiBpcyBub3Qg
c2V0CiMgQ09ORklHX0FENTc3MFIgaXMgbm90IHNldAojIENPTkZJR19BRDU3OTEgaXMgbm90IHNl
dAojIENPTkZJR19BRDcyOTMgaXMgbm90IHNldAojIENPTkZJR19BRDczMDMgaXMgbm90IHNldAoj
IENPTkZJR19BRDg4MDEgaXMgbm90IHNldAojIENPTkZJR19EUE9UX0RBQyBpcyBub3Qgc2V0CiMg
Q09ORklHX0RTNDQyNCBpcyBub3Qgc2V0CiMgQ09ORklHX0xUQzE2NjAgaXMgbm90IHNldAojIENP
TkZJR19MVEMyNjMyIGlzIG5vdCBzZXQKIyBDT05GSUdfTTYyMzMyIGlzIG5vdCBzZXQKIyBDT05G
SUdfTUFYNTE3IGlzIG5vdCBzZXQKIyBDT05GSUdfTUFYNTUyMiBpcyBub3Qgc2V0CiMgQ09ORklH
X01BWDU4MjEgaXMgbm90IHNldAojIENPTkZJR19NQ1A0NzI1IGlzIG5vdCBzZXQKIyBDT05GSUdf
TUNQNDcyOCBpcyBub3Qgc2V0CiMgQ09ORklHX01DUDQ4MjEgaXMgbm90IHNldAojIENPTkZJR19N
Q1A0OTIyIGlzIG5vdCBzZXQKIyBDT05GSUdfVElfREFDMDgyUzA4NSBpcyBub3Qgc2V0CiMgQ09O
RklHX1RJX0RBQzU1NzEgaXMgbm90IHNldAojIENPTkZJR19USV9EQUM3MzExIGlzIG5vdCBzZXQK
IyBDT05GSUdfVElfREFDNzYxMiBpcyBub3Qgc2V0CiMgQ09ORklHX1ZGNjEwX0RBQyBpcyBub3Qg
c2V0CiMgZW5kIG9mIERpZ2l0YWwgdG8gYW5hbG9nIGNvbnZlcnRlcnMKCiMKIyBJSU8gZHVtbXkg
ZHJpdmVyCiMKIyBlbmQgb2YgSUlPIGR1bW15IGRyaXZlcgoKIwojIEZpbHRlcnMKIwojIENPTkZJ
R19BRE1WODgxOCBpcyBub3Qgc2V0CiMgZW5kIG9mIEZpbHRlcnMKCiMKIyBGcmVxdWVuY3kgU3lu
dGhlc2l6ZXJzIEREUy9QTEwKIwoKIwojIENsb2NrIEdlbmVyYXRvci9EaXN0cmlidXRpb24KIwoj
IENPTkZJR19BRDk1MjMgaXMgbm90IHNldAojIGVuZCBvZiBDbG9jayBHZW5lcmF0b3IvRGlzdHJp
YnV0aW9uCgojCiMgUGhhc2UtTG9ja2VkIExvb3AgKFBMTCkgZnJlcXVlbmN5IHN5bnRoZXNpemVy
cwojCiMgQ09ORklHX0FERjQzNTAgaXMgbm90IHNldAojIENPTkZJR19BREY0MzcxIGlzIG5vdCBz
ZXQKIyBDT05GSUdfQURGNDM3NyBpcyBub3Qgc2V0CiMgQ09ORklHX0FETVYxMDEzIGlzIG5vdCBz
ZXQKIyBDT05GSUdfQURNVjEwMTQgaXMgbm90IHNldAojIENPTkZJR19BRE1WNDQyMCBpcyBub3Qg
c2V0CiMgQ09ORklHX0FEUkY2NzgwIGlzIG5vdCBzZXQKIyBlbmQgb2YgUGhhc2UtTG9ja2VkIExv
b3AgKFBMTCkgZnJlcXVlbmN5IHN5bnRoZXNpemVycwojIGVuZCBvZiBGcmVxdWVuY3kgU3ludGhl
c2l6ZXJzIEREUy9QTEwKCiMKIyBEaWdpdGFsIGd5cm9zY29wZSBzZW5zb3JzCiMKIyBDT05GSUdf
QURJUzE2MDgwIGlzIG5vdCBzZXQKIyBDT05GSUdfQURJUzE2MTMwIGlzIG5vdCBzZXQKIyBDT05G
SUdfQURJUzE2MTM2IGlzIG5vdCBzZXQKIyBDT05GSUdfQURJUzE2MjYwIGlzIG5vdCBzZXQKIyBD
T05GSUdfQURYUlMyOTAgaXMgbm90IHNldAojIENPTkZJR19BRFhSUzQ1MCBpcyBub3Qgc2V0CiMg
Q09ORklHX0JNRzE2MCBpcyBub3Qgc2V0CiMgQ09ORklHX0ZYQVMyMTAwMkMgaXMgbm90IHNldApD
T05GSUdfSElEX1NFTlNPUl9HWVJPXzNEPXkKIyBDT05GSUdfTVBVMzA1MF9JMkMgaXMgbm90IHNl
dAojIENPTkZJR19JSU9fU1RfR1lST18zQVhJUyBpcyBub3Qgc2V0CiMgQ09ORklHX0lURzMyMDAg
aXMgbm90IHNldAojIGVuZCBvZiBEaWdpdGFsIGd5cm9zY29wZSBzZW5zb3JzCgojCiMgSGVhbHRo
IFNlbnNvcnMKIwoKIwojIEhlYXJ0IFJhdGUgTW9uaXRvcnMKIwojIENPTkZJR19BRkU0NDAzIGlz
IG5vdCBzZXQKIyBDT05GSUdfQUZFNDQwNCBpcyBub3Qgc2V0CiMgQ09ORklHX01BWDMwMTAwIGlz
IG5vdCBzZXQKIyBDT05GSUdfTUFYMzAxMDIgaXMgbm90IHNldAojIGVuZCBvZiBIZWFydCBSYXRl
IE1vbml0b3JzCiMgZW5kIG9mIEhlYWx0aCBTZW5zb3JzCgojCiMgSHVtaWRpdHkgc2Vuc29ycwoj
CiMgQ09ORklHX0FNMjMxNSBpcyBub3Qgc2V0CiMgQ09ORklHX0RIVDExIGlzIG5vdCBzZXQKIyBD
T05GSUdfSERDMTAwWCBpcyBub3Qgc2V0CiMgQ09ORklHX0hEQzIwMTAgaXMgbm90IHNldAojIENP
TkZJR19IREMzMDIwIGlzIG5vdCBzZXQKQ09ORklHX0hJRF9TRU5TT1JfSFVNSURJVFk9eQojIENP
TkZJR19IVFMyMjEgaXMgbm90IHNldAojIENPTkZJR19IVFUyMSBpcyBub3Qgc2V0CiMgQ09ORklH
X1NJNzAwNSBpcyBub3Qgc2V0CiMgQ09ORklHX1NJNzAyMCBpcyBub3Qgc2V0CiMgZW5kIG9mIEh1
bWlkaXR5IHNlbnNvcnMKCiMKIyBJbmVydGlhbCBtZWFzdXJlbWVudCB1bml0cwojCiMgQ09ORklH
X0FESVMxNjQwMCBpcyBub3Qgc2V0CiMgQ09ORklHX0FESVMxNjQ2MCBpcyBub3Qgc2V0CiMgQ09O
RklHX0FESVMxNjQ3NSBpcyBub3Qgc2V0CiMgQ09ORklHX0FESVMxNjQ4MCBpcyBub3Qgc2V0CiMg
Q09ORklHX0JNSTE2MF9JMkMgaXMgbm90IHNldAojIENPTkZJR19CTUkxNjBfU1BJIGlzIG5vdCBz
ZXQKIyBDT05GSUdfQk1JMzIzX0kyQyBpcyBub3Qgc2V0CiMgQ09ORklHX0JNSTMyM19TUEkgaXMg
bm90IHNldAojIENPTkZJR19CT1NDSF9CTk8wNTVfSTJDIGlzIG5vdCBzZXQKIyBDT05GSUdfRlhP
Uzg3MDBfSTJDIGlzIG5vdCBzZXQKIyBDT05GSUdfRlhPUzg3MDBfU1BJIGlzIG5vdCBzZXQKIyBD
T05GSUdfS01YNjEgaXMgbm90IHNldAojIENPTkZJR19JTlZfSUNNNDI2MDBfSTJDIGlzIG5vdCBz
ZXQKIyBDT05GSUdfSU5WX0lDTTQyNjAwX1NQSSBpcyBub3Qgc2V0CiMgQ09ORklHX0lOVl9NUFU2
MDUwX0kyQyBpcyBub3Qgc2V0CiMgQ09ORklHX0lOVl9NUFU2MDUwX1NQSSBpcyBub3Qgc2V0CiMg
Q09ORklHX0lJT19TVF9MU002RFNYIGlzIG5vdCBzZXQKIyBDT05GSUdfSUlPX1NUX0xTTTlEUzAg
aXMgbm90IHNldAojIGVuZCBvZiBJbmVydGlhbCBtZWFzdXJlbWVudCB1bml0cwoKIwojIExpZ2h0
IHNlbnNvcnMKIwojIENPTkZJR19BQ1BJX0FMUyBpcyBub3Qgc2V0CiMgQ09ORklHX0FESkRfUzMx
MSBpcyBub3Qgc2V0CiMgQ09ORklHX0FEVVgxMDIwIGlzIG5vdCBzZXQKIyBDT05GSUdfQUwzMDEw
IGlzIG5vdCBzZXQKIyBDT05GSUdfQUwzMzIwQSBpcyBub3Qgc2V0CiMgQ09ORklHX0FQRFM5MzAw
IGlzIG5vdCBzZXQKIyBDT05GSUdfQVBEUzk5NjAgaXMgbm90IHNldAojIENPTkZJR19BUzczMjEx
IGlzIG5vdCBzZXQKIyBDT05GSUdfQkgxNzUwIGlzIG5vdCBzZXQKIyBDT05GSUdfQkgxNzgwIGlz
IG5vdCBzZXQKIyBDT05GSUdfQ00zMjE4MSBpcyBub3Qgc2V0CiMgQ09ORklHX0NNMzIzMiBpcyBu
b3Qgc2V0CiMgQ09ORklHX0NNMzMyMyBpcyBub3Qgc2V0CiMgQ09ORklHX0NNMzYwNSBpcyBub3Qg
c2V0CiMgQ09ORklHX0NNMzY2NTEgaXMgbm90IHNldAojIENPTkZJR19HUDJBUDAwMiBpcyBub3Qg
c2V0CiMgQ09ORklHX0dQMkFQMDIwQTAwRiBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfSVNM
MjkwMTggaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0lTTDI5MDI4IGlzIG5vdCBzZXQKIyBD
T05GSUdfSVNMMjkxMjUgaXMgbm90IHNldAojIENPTkZJR19JU0w3NjY4MiBpcyBub3Qgc2V0CkNP
TkZJR19ISURfU0VOU09SX0FMUz15CkNPTkZJR19ISURfU0VOU09SX1BST1g9eQojIENPTkZJR19K
U0ExMjEyIGlzIG5vdCBzZXQKIyBDT05GSUdfUk9ITV9CVTI3MDA4IGlzIG5vdCBzZXQKIyBDT05G
SUdfUk9ITV9CVTI3MDM0IGlzIG5vdCBzZXQKIyBDT05GSUdfUlBSMDUyMSBpcyBub3Qgc2V0CiMg
Q09ORklHX0xUUjM5MCBpcyBub3Qgc2V0CiMgQ09ORklHX0xUUjUwMSBpcyBub3Qgc2V0CiMgQ09O
RklHX0xUUkYyMTZBIGlzIG5vdCBzZXQKIyBDT05GSUdfTFYwMTA0Q1MgaXMgbm90IHNldAojIENP
TkZJR19NQVg0NDAwMCBpcyBub3Qgc2V0CiMgQ09ORklHX01BWDQ0MDA5IGlzIG5vdCBzZXQKIyBD
T05GSUdfTk9BMTMwNSBpcyBub3Qgc2V0CiMgQ09ORklHX09QVDMwMDEgaXMgbm90IHNldAojIENP
TkZJR19PUFQ0MDAxIGlzIG5vdCBzZXQKIyBDT05GSUdfUEExMjIwMzAwMSBpcyBub3Qgc2V0CiMg
Q09ORklHX1NJMTEzMyBpcyBub3Qgc2V0CiMgQ09ORklHX1NJMTE0NSBpcyBub3Qgc2V0CiMgQ09O
RklHX1NUSzMzMTAgaXMgbm90IHNldAojIENPTkZJR19TVF9VVklTMjUgaXMgbm90IHNldAojIENP
TkZJR19UQ1MzNDE0IGlzIG5vdCBzZXQKIyBDT05GSUdfVENTMzQ3MiBpcyBub3Qgc2V0CiMgQ09O
RklHX1NFTlNPUlNfVFNMMjU2MyBpcyBub3Qgc2V0CiMgQ09ORklHX1RTTDI1ODMgaXMgbm90IHNl
dAojIENPTkZJR19UU0wyNTkxIGlzIG5vdCBzZXQKIyBDT05GSUdfVFNMMjc3MiBpcyBub3Qgc2V0
CiMgQ09ORklHX1RTTDQ1MzEgaXMgbm90IHNldAojIENPTkZJR19VUzUxODJEIGlzIG5vdCBzZXQK
IyBDT05GSUdfVkNOTDQwMDAgaXMgbm90IHNldAojIENPTkZJR19WQ05MNDAzNSBpcyBub3Qgc2V0
CiMgQ09ORklHX1ZFTUw2MDMwIGlzIG5vdCBzZXQKIyBDT05GSUdfVkVNTDYwNzAgaXMgbm90IHNl
dAojIENPTkZJR19WRU1MNjA3NSBpcyBub3Qgc2V0CiMgQ09ORklHX1ZMNjE4MCBpcyBub3Qgc2V0
CiMgQ09ORklHX1pPUFQyMjAxIGlzIG5vdCBzZXQKIyBlbmQgb2YgTGlnaHQgc2Vuc29ycwoKIwoj
IE1hZ25ldG9tZXRlciBzZW5zb3JzCiMKIyBDT05GSUdfQUs4OTc0IGlzIG5vdCBzZXQKIyBDT05G
SUdfQUs4OTc1IGlzIG5vdCBzZXQKIyBDT05GSUdfQUswOTkxMSBpcyBub3Qgc2V0CiMgQ09ORklH
X0JNQzE1MF9NQUdOX0kyQyBpcyBub3Qgc2V0CiMgQ09ORklHX0JNQzE1MF9NQUdOX1NQSSBpcyBu
b3Qgc2V0CiMgQ09ORklHX01BRzMxMTAgaXMgbm90IHNldApDT05GSUdfSElEX1NFTlNPUl9NQUdO
RVRPTUVURVJfM0Q9eQojIENPTkZJR19NTUMzNTI0MCBpcyBub3Qgc2V0CiMgQ09ORklHX0lJT19T
VF9NQUdOXzNBWElTIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19ITUM1ODQzX0kyQyBpcyBu
b3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfSE1DNTg0M19TUEkgaXMgbm90IHNldAojIENPTkZJR19T
RU5TT1JTX1JNMzEwMF9JMkMgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX1JNMzEwMF9TUEkg
aXMgbm90IHNldAojIENPTkZJR19USV9UTUFHNTI3MyBpcyBub3Qgc2V0CiMgQ09ORklHX1lBTUFI
QV9ZQVM1MzAgaXMgbm90IHNldAojIGVuZCBvZiBNYWduZXRvbWV0ZXIgc2Vuc29ycwoKIwojIE11
bHRpcGxleGVycwojCiMgQ09ORklHX0lJT19NVVggaXMgbm90IHNldAojIGVuZCBvZiBNdWx0aXBs
ZXhlcnMKCiMKIyBJbmNsaW5vbWV0ZXIgc2Vuc29ycwojCkNPTkZJR19ISURfU0VOU09SX0lOQ0xJ
Tk9NRVRFUl8zRD15CkNPTkZJR19ISURfU0VOU09SX0RFVklDRV9ST1RBVElPTj15CiMgZW5kIG9m
IEluY2xpbm9tZXRlciBzZW5zb3JzCgojCiMgVHJpZ2dlcnMgLSBzdGFuZGFsb25lCiMKIyBDT05G
SUdfSUlPX0lOVEVSUlVQVF9UUklHR0VSIGlzIG5vdCBzZXQKIyBDT05GSUdfSUlPX1NZU0ZTX1RS
SUdHRVIgaXMgbm90IHNldAojIGVuZCBvZiBUcmlnZ2VycyAtIHN0YW5kYWxvbmUKCiMKIyBMaW5l
YXIgYW5kIGFuZ3VsYXIgcG9zaXRpb24gc2Vuc29ycwojCiMgQ09ORklHX0hJRF9TRU5TT1JfQ1VT
VE9NX0lOVEVMX0hJTkdFIGlzIG5vdCBzZXQKIyBlbmQgb2YgTGluZWFyIGFuZCBhbmd1bGFyIHBv
c2l0aW9uIHNlbnNvcnMKCiMKIyBEaWdpdGFsIHBvdGVudGlvbWV0ZXJzCiMKIyBDT05GSUdfQUQ1
MTEwIGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ1MjcyIGlzIG5vdCBzZXQKIyBDT05GSUdfRFMxODAz
IGlzIG5vdCBzZXQKIyBDT05GSUdfTUFYNTQzMiBpcyBub3Qgc2V0CiMgQ09ORklHX01BWDU0ODEg
aXMgbm90IHNldAojIENPTkZJR19NQVg1NDg3IGlzIG5vdCBzZXQKIyBDT05GSUdfTUNQNDAxOCBp
cyBub3Qgc2V0CiMgQ09ORklHX01DUDQxMzEgaXMgbm90IHNldAojIENPTkZJR19NQ1A0NTMxIGlz
IG5vdCBzZXQKIyBDT05GSUdfTUNQNDEwMTAgaXMgbm90IHNldAojIENPTkZJR19UUEwwMTAyIGlz
IG5vdCBzZXQKIyBDT05GSUdfWDkyNTAgaXMgbm90IHNldAojIGVuZCBvZiBEaWdpdGFsIHBvdGVu
dGlvbWV0ZXJzCgojCiMgRGlnaXRhbCBwb3RlbnRpb3N0YXRzCiMKIyBDT05GSUdfTE1QOTEwMDAg
aXMgbm90IHNldAojIGVuZCBvZiBEaWdpdGFsIHBvdGVudGlvc3RhdHMKCiMKIyBQcmVzc3VyZSBz
ZW5zb3JzCiMKIyBDT05GSUdfQUJQMDYwTUcgaXMgbm90IHNldAojIENPTkZJR19ST0hNX0JNMTM5
MCBpcyBub3Qgc2V0CiMgQ09ORklHX0JNUDI4MCBpcyBub3Qgc2V0CiMgQ09ORklHX0RMSEw2MEQg
aXMgbm90IHNldAojIENPTkZJR19EUFMzMTAgaXMgbm90IHNldApDT05GSUdfSElEX1NFTlNPUl9Q
UkVTUz15CiMgQ09ORklHX0hQMDMgaXMgbm90IHNldAojIENPTkZJR19IU0MwMzBQQSBpcyBub3Qg
c2V0CiMgQ09ORklHX0lDUDEwMTAwIGlzIG5vdCBzZXQKIyBDT05GSUdfTVBMMTE1X0kyQyBpcyBu
b3Qgc2V0CiMgQ09ORklHX01QTDExNV9TUEkgaXMgbm90IHNldAojIENPTkZJR19NUEwzMTE1IGlz
IG5vdCBzZXQKIyBDT05GSUdfTVBSTFMwMDI1UEEgaXMgbm90IHNldAojIENPTkZJR19NUzU2MTEg
aXMgbm90IHNldAojIENPTkZJR19NUzU2MzcgaXMgbm90IHNldAojIENPTkZJR19JSU9fU1RfUFJF
U1MgaXMgbm90IHNldAojIENPTkZJR19UNTQwMyBpcyBub3Qgc2V0CiMgQ09ORklHX0hQMjA2QyBp
cyBub3Qgc2V0CiMgQ09ORklHX1pQQTIzMjYgaXMgbm90IHNldAojIGVuZCBvZiBQcmVzc3VyZSBz
ZW5zb3JzCgojCiMgTGlnaHRuaW5nIHNlbnNvcnMKIwojIENPTkZJR19BUzM5MzUgaXMgbm90IHNl
dAojIGVuZCBvZiBMaWdodG5pbmcgc2Vuc29ycwoKIwojIFByb3hpbWl0eSBhbmQgZGlzdGFuY2Ug
c2Vuc29ycwojCiMgQ09ORklHX0lSU0QyMDAgaXMgbm90IHNldAojIENPTkZJR19JU0wyOTUwMSBp
cyBub3Qgc2V0CiMgQ09ORklHX0xJREFSX0xJVEVfVjIgaXMgbm90IHNldAojIENPTkZJR19NQjEy
MzIgaXMgbm90IHNldAojIENPTkZJR19QSU5HIGlzIG5vdCBzZXQKIyBDT05GSUdfUkZENzc0MDIg
aXMgbm90IHNldAojIENPTkZJR19TUkYwNCBpcyBub3Qgc2V0CiMgQ09ORklHX1NYOTMxMCBpcyBu
b3Qgc2V0CiMgQ09ORklHX1NYOTMyNCBpcyBub3Qgc2V0CiMgQ09ORklHX1NYOTM2MCBpcyBub3Qg
c2V0CiMgQ09ORklHX1NYOTUwMCBpcyBub3Qgc2V0CiMgQ09ORklHX1NSRjA4IGlzIG5vdCBzZXQK
IyBDT05GSUdfVkNOTDMwMjAgaXMgbm90IHNldAojIENPTkZJR19WTDUzTDBYX0kyQyBpcyBub3Qg
c2V0CiMgZW5kIG9mIFByb3hpbWl0eSBhbmQgZGlzdGFuY2Ugc2Vuc29ycwoKIwojIFJlc29sdmVy
IHRvIGRpZ2l0YWwgY29udmVydGVycwojCiMgQ09ORklHX0FEMlM5MCBpcyBub3Qgc2V0CiMgQ09O
RklHX0FEMlMxMjAwIGlzIG5vdCBzZXQKIyBDT05GSUdfQUQyUzEyMTAgaXMgbm90IHNldAojIGVu
ZCBvZiBSZXNvbHZlciB0byBkaWdpdGFsIGNvbnZlcnRlcnMKCiMKIyBUZW1wZXJhdHVyZSBzZW5z
b3JzCiMKIyBDT05GSUdfTFRDMjk4MyBpcyBub3Qgc2V0CiMgQ09ORklHX01BWElNX1RIRVJNT0NP
VVBMRSBpcyBub3Qgc2V0CkNPTkZJR19ISURfU0VOU09SX1RFTVA9eQojIENPTkZJR19NTFg5MDYx
NCBpcyBub3Qgc2V0CiMgQ09ORklHX01MWDkwNjMyIGlzIG5vdCBzZXQKIyBDT05GSUdfTUxYOTA2
MzUgaXMgbm90IHNldAojIENPTkZJR19UTVAwMDYgaXMgbm90IHNldAojIENPTkZJR19UTVAwMDcg
aXMgbm90IHNldAojIENPTkZJR19UTVAxMTcgaXMgbm90IHNldAojIENPTkZJR19UU1lTMDEgaXMg
bm90IHNldAojIENPTkZJR19UU1lTMDJEIGlzIG5vdCBzZXQKIyBDT05GSUdfTUFYMzAyMDggaXMg
bm90IHNldAojIENPTkZJR19NQVgzMTg1NiBpcyBub3Qgc2V0CiMgQ09ORklHX01BWDMxODY1IGlz
IG5vdCBzZXQKIyBDT05GSUdfTUNQOTYwMCBpcyBub3Qgc2V0CiMgZW5kIG9mIFRlbXBlcmF0dXJl
IHNlbnNvcnMKCiMgQ09ORklHX05UQiBpcyBub3Qgc2V0CiMgQ09ORklHX1BXTSBpcyBub3Qgc2V0
CgojCiMgSVJRIGNoaXAgc3VwcG9ydAojCkNPTkZJR19JUlFDSElQPXkKIyBDT05GSUdfQUxfRklD
IGlzIG5vdCBzZXQKIyBDT05GSUdfWElMSU5YX0lOVEMgaXMgbm90IHNldAojIGVuZCBvZiBJUlEg
Y2hpcCBzdXBwb3J0CgojIENPTkZJR19JUEFDS19CVVMgaXMgbm90IHNldApDT05GSUdfUkVTRVRf
Q09OVFJPTExFUj15CiMgQ09ORklHX1JFU0VUX0lOVEVMX0dXIGlzIG5vdCBzZXQKIyBDT05GSUdf
UkVTRVRfU0lNUExFIGlzIG5vdCBzZXQKIyBDT05GSUdfUkVTRVRfVElfU1lTQ09OIGlzIG5vdCBz
ZXQKIyBDT05GSUdfUkVTRVRfVElfVFBTMzgwWCBpcyBub3Qgc2V0CgojCiMgUEhZIFN1YnN5c3Rl
bQojCkNPTkZJR19HRU5FUklDX1BIWT15CiMgQ09ORklHX1VTQl9MR01fUEhZIGlzIG5vdCBzZXQK
IyBDT05GSUdfUEhZX0NBTl9UUkFOU0NFSVZFUiBpcyBub3Qgc2V0CgojCiMgUEhZIGRyaXZlcnMg
Zm9yIEJyb2FkY29tIHBsYXRmb3JtcwojCiMgQ09ORklHX0JDTV9LT05BX1VTQjJfUEhZIGlzIG5v
dCBzZXQKIyBlbmQgb2YgUEhZIGRyaXZlcnMgZm9yIEJyb2FkY29tIHBsYXRmb3JtcwoKIyBDT05G
SUdfUEhZX0NBREVOQ0VfVE9SUkVOVCBpcyBub3Qgc2V0CiMgQ09ORklHX1BIWV9DQURFTkNFX0RQ
SFkgaXMgbm90IHNldAojIENPTkZJR19QSFlfQ0FERU5DRV9EUEhZX1JYIGlzIG5vdCBzZXQKIyBD
T05GSUdfUEhZX0NBREVOQ0VfU0lFUlJBIGlzIG5vdCBzZXQKIyBDT05GSUdfUEhZX0NBREVOQ0Vf
U0FMVk8gaXMgbm90IHNldAojIENPTkZJR19QSFlfUFhBXzI4Tk1fSFNJQyBpcyBub3Qgc2V0CiMg
Q09ORklHX1BIWV9QWEFfMjhOTV9VU0IyIGlzIG5vdCBzZXQKIyBDT05GSUdfUEhZX0xBTjk2Nlhf
U0VSREVTIGlzIG5vdCBzZXQKQ09ORklHX1BIWV9DUENBUF9VU0I9eQojIENPTkZJR19QSFlfTUFQ
UEhPTkVfTURNNjYwMCBpcyBub3Qgc2V0CiMgQ09ORklHX1BIWV9PQ0VMT1RfU0VSREVTIGlzIG5v
dCBzZXQKQ09ORklHX1BIWV9RQ09NX1VTQl9IUz15CkNPTkZJR19QSFlfUUNPTV9VU0JfSFNJQz15
CkNPTkZJR19QSFlfU0FNU1VOR19VU0IyPXkKQ09ORklHX1BIWV9UVVNCMTIxMD15CiMgQ09ORklH
X1BIWV9JTlRFTF9MR01fQ09NQk8gaXMgbm90IHNldAojIENPTkZJR19QSFlfSU5URUxfTEdNX0VN
TUMgaXMgbm90IHNldAojIGVuZCBvZiBQSFkgU3Vic3lzdGVtCgojIENPTkZJR19QT1dFUkNBUCBp
cyBub3Qgc2V0CiMgQ09ORklHX01DQiBpcyBub3Qgc2V0CgojCiMgUGVyZm9ybWFuY2UgbW9uaXRv
ciBzdXBwb3J0CiMKIyBDT05GSUdfRFdDX1BDSUVfUE1VIGlzIG5vdCBzZXQKIyBlbmQgb2YgUGVy
Zm9ybWFuY2UgbW9uaXRvciBzdXBwb3J0CgpDT05GSUdfUkFTPXkKIyBDT05GSUdfVVNCNCBpcyBu
b3Qgc2V0CgojCiMgQW5kcm9pZAojCiMgQ09ORklHX0FORFJPSURfQklOREVSX0lQQyBpcyBub3Qg
c2V0CiMgZW5kIG9mIEFuZHJvaWQKCiMgQ09ORklHX0xJQk5WRElNTSBpcyBub3Qgc2V0CiMgQ09O
RklHX0RBWCBpcyBub3Qgc2V0CkNPTkZJR19OVk1FTT15CkNPTkZJR19OVk1FTV9TWVNGUz15CkNP
TkZJR19OVk1FTV9MQVlPVVRTPXkKCiMKIyBMYXlvdXQgVHlwZXMKIwojIENPTkZJR19OVk1FTV9M
QVlPVVRfU0wyOF9WUEQgaXMgbm90IHNldAojIENPTkZJR19OVk1FTV9MQVlPVVRfT05JRV9UTFYg
aXMgbm90IHNldAojIGVuZCBvZiBMYXlvdXQgVHlwZXMKCiMgQ09ORklHX05WTUVNX1JNRU0gaXMg
bm90IHNldAoKIwojIEhXIHRyYWNpbmcgc3VwcG9ydAojCiMgQ09ORklHX1NUTSBpcyBub3Qgc2V0
CiMgQ09ORklHX0lOVEVMX1RIIGlzIG5vdCBzZXQKIyBlbmQgb2YgSFcgdHJhY2luZyBzdXBwb3J0
CgojIENPTkZJR19GUEdBIGlzIG5vdCBzZXQKIyBDT05GSUdfRlNJIGlzIG5vdCBzZXQKIyBDT05G
SUdfVEVFIGlzIG5vdCBzZXQKIyBDT05GSUdfU0lPWCBpcyBub3Qgc2V0CiMgQ09ORklHX1NMSU1C
VVMgaXMgbm90IHNldAojIENPTkZJR19JTlRFUkNPTk5FQ1QgaXMgbm90IHNldAojIENPTkZJR19D
T1VOVEVSIGlzIG5vdCBzZXQKQ09ORklHX01PU1Q9eQojIENPTkZJR19NT1NUX1VTQl9IRE0gaXMg
bm90IHNldAojIENPTkZJR19NT1NUX0NERVYgaXMgbm90IHNldAojIENPTkZJR19NT1NUX1NORCBp
cyBub3Qgc2V0CiMgQ09ORklHX1BFQ0kgaXMgbm90IHNldAojIENPTkZJR19IVEUgaXMgbm90IHNl
dAojIGVuZCBvZiBEZXZpY2UgRHJpdmVycwoKIwojIEZpbGUgc3lzdGVtcwojCkNPTkZJR19EQ0FD
SEVfV09SRF9BQ0NFU1M9eQojIENPTkZJR19WQUxJREFURV9GU19QQVJTRVIgaXMgbm90IHNldApD
T05GSUdfRlNfSU9NQVA9eQpDT05GSUdfQlVGRkVSX0hFQUQ9eQpDT05GSUdfTEVHQUNZX0RJUkVD
VF9JTz15CiMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAojIENPTkZJR19FWFQzX0ZTIGlzIG5v
dCBzZXQKQ09ORklHX0VYVDRfRlM9eQpDT05GSUdfRVhUNF9VU0VfRk9SX0VYVDI9eQpDT05GSUdf
RVhUNF9GU19QT1NJWF9BQ0w9eQpDT05GSUdfRVhUNF9GU19TRUNVUklUWT15CiMgQ09ORklHX0VY
VDRfREVCVUcgaXMgbm90IHNldApDT05GSUdfSkJEMj15CiMgQ09ORklHX0pCRDJfREVCVUcgaXMg
bm90IHNldApDT05GSUdfRlNfTUJDQUNIRT15CiMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBz
ZXQKIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQK
IyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQK
IyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAojIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNl
dAojIENPTkZJR19GMkZTX0ZTIGlzIG5vdCBzZXQKIyBDT05GSUdfQkNBQ0hFRlNfRlMgaXMgbm90
IHNldApDT05GSUdfRlNfUE9TSVhfQUNMPXkKQ09ORklHX0VYUE9SVEZTPXkKIyBDT05GSUdfRVhQ
T1JURlNfQkxPQ0tfT1BTIGlzIG5vdCBzZXQKQ09ORklHX0ZJTEVfTE9DS0lORz15CiMgQ09ORklH
X0ZTX0VOQ1JZUFRJT04gaXMgbm90IHNldAojIENPTkZJR19GU19WRVJJVFkgaXMgbm90IHNldApD
T05GSUdfRlNOT1RJRlk9eQpDT05GSUdfRE5PVElGWT15CkNPTkZJR19JTk9USUZZX1VTRVI9eQoj
IENPTkZJR19GQU5PVElGWSBpcyBub3Qgc2V0CkNPTkZJR19RVU9UQT15CkNPTkZJR19RVU9UQV9O
RVRMSU5LX0lOVEVSRkFDRT15CiMgQ09ORklHX1FVT1RBX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklH
X1FVT1RBX1RSRUU9eQojIENPTkZJR19RRk1UX1YxIGlzIG5vdCBzZXQKQ09ORklHX1FGTVRfVjI9
eQpDT05GSUdfUVVPVEFDVEw9eQpDT05GSUdfQVVUT0ZTX0ZTPXkKIyBDT05GSUdfRlVTRV9GUyBp
cyBub3Qgc2V0CiMgQ09ORklHX09WRVJMQVlfRlMgaXMgbm90IHNldAoKIwojIENhY2hlcwojCkNP
TkZJR19ORVRGU19TVVBQT1JUPXkKIyBDT05GSUdfTkVURlNfU1RBVFMgaXMgbm90IHNldAojIENP
TkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKIyBlbmQgb2YgQ2FjaGVzCgojCiMgQ0QtUk9NL0RWRCBG
aWxlc3lzdGVtcwojCkNPTkZJR19JU085NjYwX0ZTPXkKQ09ORklHX0pPTElFVD15CkNPTkZJR19a
SVNPRlM9eQojIENPTkZJR19VREZfRlMgaXMgbm90IHNldAojIGVuZCBvZiBDRC1ST00vRFZEIEZp
bGVzeXN0ZW1zCgojCiMgRE9TL0ZBVC9FWEZBVC9OVCBGaWxlc3lzdGVtcwojCkNPTkZJR19GQVRf
RlM9eQpDT05GSUdfTVNET1NfRlM9eQpDT05GSUdfVkZBVF9GUz15CkNPTkZJR19GQVRfREVGQVVM
VF9DT0RFUEFHRT00MzcKQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgoj
IENPTkZJR19GQVRfREVGQVVMVF9VVEY4IGlzIG5vdCBzZXQKIyBDT05GSUdfRVhGQVRfRlMgaXMg
bm90IHNldAojIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKIyBDT05GSUdfTlRGUzNfRlMgaXMg
bm90IHNldAojIGVuZCBvZiBET1MvRkFUL0VYRkFUL05UIEZpbGVzeXN0ZW1zCgojCiMgUHNldWRv
IGZpbGVzeXN0ZW1zCiMKQ09ORklHX1BST0NfRlM9eQpDT05GSUdfUFJPQ19LQ09SRT15CkNPTkZJ
R19QUk9DX1ZNQ09SRT15CiMgQ09ORklHX1BST0NfVk1DT1JFX0RFVklDRV9EVU1QIGlzIG5vdCBz
ZXQKQ09ORklHX1BST0NfU1lTQ1RMPXkKQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKIyBDT05G
SUdfUFJPQ19DSElMRFJFTiBpcyBub3Qgc2V0CkNPTkZJR19QUk9DX1BJRF9BUkNIX1NUQVRVUz15
CkNPTkZJR19LRVJORlM9eQpDT05GSUdfU1lTRlM9eQpDT05GSUdfVE1QRlM9eQpDT05GSUdfVE1Q
RlNfUE9TSVhfQUNMPXkKQ09ORklHX1RNUEZTX1hBVFRSPXkKIyBDT05GSUdfVE1QRlNfSU5PREU2
NCBpcyBub3Qgc2V0CiMgQ09ORklHX1RNUEZTX1FVT1RBIGlzIG5vdCBzZXQKQ09ORklHX0hVR0VU
TEJGUz15CiMgQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT04g
aXMgbm90IHNldApDT05GSUdfSFVHRVRMQl9QQUdFPXkKQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJ
TUlaRV9WTUVNTUFQPXkKQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0U9eQpDT05GSUdfQ09O
RklHRlNfRlM9eQojIGVuZCBvZiBQc2V1ZG8gZmlsZXN5c3RlbXMKCkNPTkZJR19NSVNDX0ZJTEVT
WVNURU1TPXkKIyBDT05GSUdfT1JBTkdFRlNfRlMgaXMgbm90IHNldAojIENPTkZJR19BREZTX0ZT
IGlzIG5vdCBzZXQKIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CiMgQ09ORklHX0VDUllQVF9G
UyBpcyBub3Qgc2V0CiMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CiMgQ09ORklHX0hGU1BMVVNf
RlMgaXMgbm90IHNldAojIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKIyBDT05GSUdfQkZTX0ZT
IGlzIG5vdCBzZXQKIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JBTUZTIGlz
IG5vdCBzZXQKIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAojIENPTkZJR19WWEZTX0ZTIGlz
IG5vdCBzZXQKIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAojIENPTkZJR19PTUZTX0ZTIGlz
IG5vdCBzZXQKIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CiMgQ09ORklHX1FOWDRGU19GUyBp
cyBub3Qgc2V0CiMgQ09ORklHX1FOWDZGU19GUyBpcyBub3Qgc2V0CiMgQ09ORklHX1JPTUZTX0ZT
IGlzIG5vdCBzZXQKIyBDT05GSUdfUFNUT1JFIGlzIG5vdCBzZXQKIyBDT05GSUdfU1lTVl9GUyBp
cyBub3Qgc2V0CiMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CiMgQ09ORklHX0VST0ZTX0ZTIGlz
IG5vdCBzZXQKQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQpDT05GSUdfTkZTX0ZTPXkKQ09O
RklHX05GU19WMj15CkNPTkZJR19ORlNfVjM9eQpDT05GSUdfTkZTX1YzX0FDTD15CkNPTkZJR19O
RlNfVjQ9eQojIENPTkZJR19ORlNfU1dBUCBpcyBub3Qgc2V0CiMgQ09ORklHX05GU19WNF8xIGlz
IG5vdCBzZXQKQ09ORklHX1JPT1RfTkZTPXkKIyBDT05GSUdfTkZTX0ZTQ0FDSEUgaXMgbm90IHNl
dAojIENPTkZJR19ORlNfVVNFX0xFR0FDWV9ETlMgaXMgbm90IHNldApDT05GSUdfTkZTX1VTRV9L
RVJORUxfRE5TPXkKQ09ORklHX05GU19ESVNBQkxFX1VEUF9TVVBQT1JUPXkKIyBDT05GSUdfTkZT
RCBpcyBub3Qgc2V0CkNPTkZJR19HUkFDRV9QRVJJT0Q9eQpDT05GSUdfTE9DS0Q9eQpDT05GSUdf
TE9DS0RfVjQ9eQpDT05GSUdfTkZTX0FDTF9TVVBQT1JUPXkKQ09ORklHX05GU19DT01NT049eQpD
T05GSUdfU1VOUlBDPXkKQ09ORklHX1NVTlJQQ19HU1M9eQpDT05GSUdfUlBDU0VDX0dTU19LUkI1
PXkKIyBDT05GSUdfU1VOUlBDX0RFQlVHIGlzIG5vdCBzZXQKIyBDT05GSUdfQ0VQSF9GUyBpcyBu
b3Qgc2V0CiMgQ09ORklHX0NJRlMgaXMgbm90IHNldAojIENPTkZJR19TTUJfU0VSVkVSIGlzIG5v
dCBzZXQKIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CiMgQ09ORklHX0FGU19GUyBpcyBub3Qg
c2V0CkNPTkZJR185UF9GUz15CiMgQ09ORklHXzlQX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiMg
Q09ORklHXzlQX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKQ09ORklHX05MUz15CkNPTkZJR19OTFNf
REVGQVVMVD0idXRmOCIKQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQojIENPTkZJR19OTFNfQ09E
RVBBR0VfNzM3IGlzIG5vdCBzZXQKIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0
CiMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAojIENPTkZJR19OTFNfQ09ERVBB
R0VfODUyIGlzIG5vdCBzZXQKIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CiMg
Q09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAojIENPTkZJR19OTFNfQ09ERVBBR0Vf
ODYwIGlzIG5vdCBzZXQKIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CiMgQ09O
RklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAojIENPTkZJR19OTFNfQ09ERVBBR0VfODYz
IGlzIG5vdCBzZXQKIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CiMgQ09ORklH
X05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAojIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlz
IG5vdCBzZXQKIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CiMgQ09ORklHX05M
U19DT0RFUEFHRV85MzYgaXMgbm90IHNldAojIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5v
dCBzZXQKIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CiMgQ09ORklHX05MU19D
T0RFUEFHRV85NDkgaXMgbm90IHNldAojIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBz
ZXQKIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CiMgQ09ORklHX05MU19DT0RFUEFH
RV8xMjUwIGlzIG5vdCBzZXQKIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldApD
T05GSUdfTkxTX0FTQ0lJPXkKQ09ORklHX05MU19JU084ODU5XzE9eQojIENPTkZJR19OTFNfSVNP
ODg1OV8yIGlzIG5vdCBzZXQKIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CiMgQ09O
RklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAojIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5v
dCBzZXQKIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CiMgQ09ORklHX05MU19JU084
ODU5XzcgaXMgbm90IHNldAojIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKIyBDT05G
SUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAojIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBu
b3Qgc2V0CiMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKIyBDT05GSUdfTkxTX0tP
SThfUiBpcyBub3Qgc2V0CiMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAojIENPTkZJR19O
TFNfTUFDX1JPTUFOIGlzIG5vdCBzZXQKIyBDT05GSUdfTkxTX01BQ19DRUxUSUMgaXMgbm90IHNl
dAojIENPTkZJR19OTFNfTUFDX0NFTlRFVVJPIGlzIG5vdCBzZXQKIyBDT05GSUdfTkxTX01BQ19D
Uk9BVElBTiBpcyBub3Qgc2V0CiMgQ09ORklHX05MU19NQUNfQ1lSSUxMSUMgaXMgbm90IHNldAoj
IENPTkZJR19OTFNfTUFDX0dBRUxJQyBpcyBub3Qgc2V0CiMgQ09ORklHX05MU19NQUNfR1JFRUsg
aXMgbm90IHNldAojIENPTkZJR19OTFNfTUFDX0lDRUxBTkQgaXMgbm90IHNldAojIENPTkZJR19O
TFNfTUFDX0lOVUlUIGlzIG5vdCBzZXQKIyBDT05GSUdfTkxTX01BQ19ST01BTklBTiBpcyBub3Qg
c2V0CiMgQ09ORklHX05MU19NQUNfVFVSS0lTSCBpcyBub3Qgc2V0CkNPTkZJR19OTFNfVVRGOD15
CiMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CiMgQ09ORklHX1VOSUNPREUgaXMgbm90IHNldApDT05G
SUdfSU9fV1E9eQojIGVuZCBvZiBGaWxlIHN5c3RlbXMKCiMKIyBTZWN1cml0eSBvcHRpb25zCiMK
Q09ORklHX0tFWVM9eQojIENPTkZJR19LRVlTX1JFUVVFU1RfQ0FDSEUgaXMgbm90IHNldAojIENP
TkZJR19QRVJTSVNURU5UX0tFWVJJTkdTIGlzIG5vdCBzZXQKIyBDT05GSUdfVFJVU1RFRF9LRVlT
IGlzIG5vdCBzZXQKQ09ORklHX0VOQ1JZUFRFRF9LRVlTPXkKIyBDT05GSUdfVVNFUl9ERUNSWVBU
RURfREFUQSBpcyBub3Qgc2V0CiMgQ09ORklHX0tFWV9ESF9PUEVSQVRJT05TIGlzIG5vdCBzZXQK
IyBDT05GSUdfU0VDVVJJVFlfRE1FU0dfUkVTVFJJQ1QgaXMgbm90IHNldApDT05GSUdfU0VDVVJJ
VFk9eQpDT05GSUdfU0VDVVJJVFlGUz15CkNPTkZJR19TRUNVUklUWV9ORVRXT1JLPXkKQ09ORklH
X1NFQ1VSSVRZX05FVFdPUktfWEZSTT15CkNPTkZJR19TRUNVUklUWV9QQVRIPXkKIyBDT05GSUdf
SU5URUxfVFhUIGlzIG5vdCBzZXQKQ09ORklHX0hBUkRFTkVEX1VTRVJDT1BZPXkKQ09ORklHX0ZP
UlRJRllfU09VUkNFPXkKIyBDT05GSUdfU1RBVElDX1VTRVJNT0RFSEVMUEVSIGlzIG5vdCBzZXQK
IyBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFQ1VSSVRZX1NN
QUNLIGlzIG5vdCBzZXQKQ09ORklHX1NFQ1VSSVRZX1RPTU9ZTz15CkNPTkZJR19TRUNVUklUWV9U
T01PWU9fTUFYX0FDQ0VQVF9FTlRSWT02NApDT05GSUdfU0VDVVJJVFlfVE9NT1lPX01BWF9BVURJ
VF9MT0c9MzIKQ09ORklHX1NFQ1VSSVRZX1RPTU9ZT19PTUlUX1VTRVJTUEFDRV9MT0FERVI9eQpD
T05GSUdfU0VDVVJJVFlfVE9NT1lPX0lOU0VDVVJFX0JVSUxUSU5fU0VUVElORz15CkNPTkZJR19T
RUNVUklUWV9BUFBBUk1PUj15CkNPTkZJR19TRUNVUklUWV9BUFBBUk1PUl9ERUJVRz15CkNPTkZJ
R19TRUNVUklUWV9BUFBBUk1PUl9ERUJVR19BU1NFUlRTPXkKIyBDT05GSUdfU0VDVVJJVFlfQVBQ
QVJNT1JfREVCVUdfTUVTU0FHRVMgaXMgbm90IHNldApDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1Jf
SU5UUk9TUEVDVF9QT0xJQ1k9eQpDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1JfSEFTSD15CkNPTkZJ
R19TRUNVUklUWV9BUFBBUk1PUl9IQVNIX0RFRkFVTFQ9eQojIENPTkZJR19TRUNVUklUWV9BUFBB
Uk1PUl9FWFBPUlRfQklOQVJZIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1Jf
UEFSQU5PSURfTE9BRCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFQ1VSSVRZX0xPQURQSU4gaXMgbm90
IHNldApDT05GSUdfU0VDVVJJVFlfWUFNQT15CkNPTkZJR19TRUNVUklUWV9TQUZFU0VUSUQ9eQpD
T05GSUdfU0VDVVJJVFlfTE9DS0RPV05fTFNNPXkKQ09ORklHX1NFQ1VSSVRZX0xPQ0tET1dOX0xT
TV9FQVJMWT15CkNPTkZJR19MT0NLX0RPV05fS0VSTkVMX0ZPUkNFX05PTkU9eQojIENPTkZJR19M
T0NLX0RPV05fS0VSTkVMX0ZPUkNFX0lOVEVHUklUWSBpcyBub3Qgc2V0CiMgQ09ORklHX0xPQ0tf
RE9XTl9LRVJORUxfRk9SQ0VfQ09ORklERU5USUFMSVRZIGlzIG5vdCBzZXQKQ09ORklHX1NFQ1VS
SVRZX0xBTkRMT0NLPXkKQ09ORklHX0lOVEVHUklUWT15CkNPTkZJR19JTlRFR1JJVFlfU0lHTkFU
VVJFPXkKQ09ORklHX0lOVEVHUklUWV9BU1lNTUVUUklDX0tFWVM9eQpDT05GSUdfSU5URUdSSVRZ
X1RSVVNURURfS0VZUklORz15CkNPTkZJR19JTlRFR1JJVFlfQVVESVQ9eQpDT05GSUdfSU1BPXkK
Q09ORklHX0lNQV9NRUFTVVJFX1BDUl9JRFg9MTAKQ09ORklHX0lNQV9MU01fUlVMRVM9eQpDT05G
SUdfSU1BX05HX1RFTVBMQVRFPXkKIyBDT05GSUdfSU1BX1NJR19URU1QTEFURSBpcyBub3Qgc2V0
CkNPTkZJR19JTUFfREVGQVVMVF9URU1QTEFURT0iaW1hLW5nIgojIENPTkZJR19JTUFfREVGQVVM
VF9IQVNIX1NIQTEgaXMgbm90IHNldApDT05GSUdfSU1BX0RFRkFVTFRfSEFTSF9TSEEyNTY9eQoj
IENPTkZJR19JTUFfREVGQVVMVF9IQVNIX1NIQTUxMiBpcyBub3Qgc2V0CkNPTkZJR19JTUFfREVG
QVVMVF9IQVNIPSJzaGEyNTYiCkNPTkZJR19JTUFfV1JJVEVfUE9MSUNZPXkKQ09ORklHX0lNQV9S
RUFEX1BPTElDWT15CkNPTkZJR19JTUFfQVBQUkFJU0U9eQojIENPTkZJR19JTUFfQVJDSF9QT0xJ
Q1kgaXMgbm90IHNldAojIENPTkZJR19JTUFfQVBQUkFJU0VfQlVJTERfUE9MSUNZIGlzIG5vdCBz
ZXQKIyBDT05GSUdfSU1BX0FQUFJBSVNFX0JPT1RQQVJBTSBpcyBub3Qgc2V0CkNPTkZJR19JTUFf
QVBQUkFJU0VfTU9EU0lHPXkKIyBDT05GSUdfSU1BX0JMQUNLTElTVF9LRVlSSU5HIGlzIG5vdCBz
ZXQKIyBDT05GSUdfSU1BX0xPQURfWDUwOSBpcyBub3Qgc2V0CkNPTkZJR19JTUFfTUVBU1VSRV9B
U1lNTUVUUklDX0tFWVM9eQpDT05GSUdfSU1BX1FVRVVFX0VBUkxZX0JPT1RfS0VZUz15CiMgQ09O
RklHX0lNQV9ESVNBQkxFX0hUQUJMRSBpcyBub3Qgc2V0CkNPTkZJR19FVk09eQpDT05GSUdfRVZN
X0FUVFJfRlNVVUlEPXkKQ09ORklHX0VWTV9BRERfWEFUVFJTPXkKIyBDT05GSUdfRVZNX0xPQURf
WDUwOSBpcyBub3Qgc2V0CiMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBz
ZXQKQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfQVBQQVJNT1I9eQojIENPTkZJR19ERUZBVUxUX1NF
Q1VSSVRZX0RBQyBpcyBub3Qgc2V0CkNPTkZJR19MU009ImxhbmRsb2NrLGxvY2tkb3duLHlhbWEs
c2FmZXNldGlkLGludGVncml0eSx0b21veW8sYXBwYXJtb3IsYnBmIgoKIwojIEtlcm5lbCBoYXJk
ZW5pbmcgb3B0aW9ucwojCgojCiMgTWVtb3J5IGluaXRpYWxpemF0aW9uCiMKQ09ORklHX0lOSVRf
U1RBQ0tfTk9ORT15CkNPTkZJR19JTklUX09OX0FMTE9DX0RFRkFVTFRfT049eQojIENPTkZJR19J
TklUX09OX0ZSRUVfREVGQVVMVF9PTiBpcyBub3Qgc2V0CkNPTkZJR19DQ19IQVNfWkVST19DQUxM
X1VTRURfUkVHUz15CiMgQ09ORklHX1pFUk9fQ0FMTF9VU0VEX1JFR1MgaXMgbm90IHNldAojIGVu
ZCBvZiBNZW1vcnkgaW5pdGlhbGl6YXRpb24KCiMKIyBIYXJkZW5pbmcgb2Yga2VybmVsIGRhdGEg
c3RydWN0dXJlcwojCkNPTkZJR19MSVNUX0hBUkRFTkVEPXkKQ09ORklHX0JVR19PTl9EQVRBX0NP
UlJVUFRJT049eQojIGVuZCBvZiBIYXJkZW5pbmcgb2Yga2VybmVsIGRhdGEgc3RydWN0dXJlcwoK
Q09ORklHX1JBTkRTVFJVQ1RfTk9ORT15CiMgZW5kIG9mIEtlcm5lbCBoYXJkZW5pbmcgb3B0aW9u
cwojIGVuZCBvZiBTZWN1cml0eSBvcHRpb25zCgpDT05GSUdfQ1JZUFRPPXkKCiMKIyBDcnlwdG8g
Y29yZSBvciBoZWxwZXIKIwpDT05GSUdfQ1JZUFRPX0FMR0FQST15CkNPTkZJR19DUllQVE9fQUxH
QVBJMj15CkNPTkZJR19DUllQVE9fQUVBRD15CkNPTkZJR19DUllQVE9fQUVBRDI9eQpDT05GSUdf
Q1JZUFRPX1NJRzI9eQpDT05GSUdfQ1JZUFRPX1NLQ0lQSEVSPXkKQ09ORklHX0NSWVBUT19TS0NJ
UEhFUjI9eQpDT05GSUdfQ1JZUFRPX0hBU0g9eQpDT05GSUdfQ1JZUFRPX0hBU0gyPXkKQ09ORklH
X0NSWVBUT19STkc9eQpDT05GSUdfQ1JZUFRPX1JORzI9eQpDT05GSUdfQ1JZUFRPX1JOR19ERUZB
VUxUPXkKQ09ORklHX0NSWVBUT19BS0NJUEhFUjI9eQpDT05GSUdfQ1JZUFRPX0FLQ0lQSEVSPXkK
Q09ORklHX0NSWVBUT19LUFAyPXkKQ09ORklHX0NSWVBUT19LUFA9eQpDT05GSUdfQ1JZUFRPX0FD
T01QMj15CkNPTkZJR19DUllQVE9fTUFOQUdFUj15CkNPTkZJR19DUllQVE9fTUFOQUdFUjI9eQoj
IENPTkZJR19DUllQVE9fVVNFUiBpcyBub3Qgc2V0CkNPTkZJR19DUllQVE9fTUFOQUdFUl9ESVNB
QkxFX1RFU1RTPXkKQ09ORklHX0NSWVBUT19OVUxMPXkKQ09ORklHX0NSWVBUT19OVUxMMj15CiMg
Q09ORklHX0NSWVBUT19QQ1JZUFQgaXMgbm90IHNldAojIENPTkZJR19DUllQVE9fQ1JZUFREIGlz
IG5vdCBzZXQKQ09ORklHX0NSWVBUT19BVVRIRU5DPXkKIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMg
bm90IHNldAojIGVuZCBvZiBDcnlwdG8gY29yZSBvciBoZWxwZXIKCiMKIyBQdWJsaWMta2V5IGNy
eXB0b2dyYXBoeQojCkNPTkZJR19DUllQVE9fUlNBPXkKIyBDT05GSUdfQ1JZUFRPX0RIIGlzIG5v
dCBzZXQKQ09ORklHX0NSWVBUT19FQ0M9eQpDT05GSUdfQ1JZUFRPX0VDREg9eQojIENPTkZJR19D
UllQVE9fRUNEU0EgaXMgbm90IHNldAojIENPTkZJR19DUllQVE9fRUNSRFNBIGlzIG5vdCBzZXQK
IyBDT05GSUdfQ1JZUFRPX1NNMiBpcyBub3Qgc2V0CiMgQ09ORklHX0NSWVBUT19DVVJWRTI1NTE5
IGlzIG5vdCBzZXQKIyBlbmQgb2YgUHVibGljLWtleSBjcnlwdG9ncmFwaHkKCiMKIyBCbG9jayBj
aXBoZXJzCiMKQ09ORklHX0NSWVBUT19BRVM9eQojIENPTkZJR19DUllQVE9fQUVTX1RJIGlzIG5v
dCBzZXQKIyBDT05GSUdfQ1JZUFRPX0FSSUEgaXMgbm90IHNldAojIENPTkZJR19DUllQVE9fQkxP
V0ZJU0ggaXMgbm90IHNldAojIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAojIENP
TkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAojIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90
IHNldAojIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JZUFRPX0ZDUllQ
VCBpcyBub3Qgc2V0CiMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKIyBDT05GSUdf
Q1JZUFRPX1NNNF9HRU5FUklDIGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMg
bm90IHNldAojIGVuZCBvZiBCbG9jayBjaXBoZXJzCgojCiMgTGVuZ3RoLXByZXNlcnZpbmcgY2lw
aGVycyBhbmQgbW9kZXMKIwojIENPTkZJR19DUllQVE9fQURJQU5UVU0gaXMgbm90IHNldAojIENP
TkZJR19DUllQVE9fQ0hBQ0hBMjAgaXMgbm90IHNldApDT05GSUdfQ1JZUFRPX0NCQz15CkNPTkZJ
R19DUllQVE9fQ1RSPXkKIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CkNPTkZJR19DUllQ
VE9fRUNCPXkKIyBDT05GSUdfQ1JZUFRPX0hDVFIyIGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JZUFRP
X0tFWVdSQVAgaXMgbm90IHNldAojIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKIyBDT05G
SUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAojIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQK
IyBlbmQgb2YgTGVuZ3RoLXByZXNlcnZpbmcgY2lwaGVycyBhbmQgbW9kZXMKCiMKIyBBRUFEIChh
dXRoZW50aWNhdGVkIGVuY3J5cHRpb24gd2l0aCBhc3NvY2lhdGVkIGRhdGEpIGNpcGhlcnMKIwoj
IENPTkZJR19DUllQVE9fQUVHSVMxMjggaXMgbm90IHNldAojIENPTkZJR19DUllQVE9fQ0hBQ0hB
MjBQT0xZMTMwNSBpcyBub3Qgc2V0CkNPTkZJR19DUllQVE9fQ0NNPXkKQ09ORklHX0NSWVBUT19H
Q009eQpDT05GSUdfQ1JZUFRPX0dFTklWPXkKQ09ORklHX0NSWVBUT19TRVFJVj15CkNPTkZJR19D
UllQVE9fRUNIQUlOSVY9eQojIENPTkZJR19DUllQVE9fRVNTSVYgaXMgbm90IHNldAojIGVuZCBv
ZiBBRUFEIChhdXRoZW50aWNhdGVkIGVuY3J5cHRpb24gd2l0aCBhc3NvY2lhdGVkIGRhdGEpIGNp
cGhlcnMKCiMKIyBIYXNoZXMsIGRpZ2VzdHMsIGFuZCBNQUNzCiMKIyBDT05GSUdfQ1JZUFRPX0JM
QUtFMkIgaXMgbm90IHNldApDT05GSUdfQ1JZUFRPX0NNQUM9eQpDT05GSUdfQ1JZUFRPX0dIQVNI
PXkKQ09ORklHX0NSWVBUT19ITUFDPXkKIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CkNP
TkZJR19DUllQVE9fTUQ1PXkKIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQK
IyBDT05GSUdfQ1JZUFRPX1BPTFkxMzA1IGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JZUFRPX1JNRDE2
MCBpcyBub3Qgc2V0CkNPTkZJR19DUllQVE9fU0hBMT15CkNPTkZJR19DUllQVE9fU0hBMjU2PXkK
Q09ORklHX0NSWVBUT19TSEE1MTI9eQpDT05GSUdfQ1JZUFRPX1NIQTM9eQojIENPTkZJR19DUllQ
VE9fU00zX0dFTkVSSUMgaXMgbm90IHNldAojIENPTkZJR19DUllQVE9fU1RSRUVCT0cgaXMgbm90
IHNldAojIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiMgQ09ORklHX0NSWVBUT19XUDUx
MiBpcyBub3Qgc2V0CiMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JZ
UFRPX1hYSEFTSCBpcyBub3Qgc2V0CiMgZW5kIG9mIEhhc2hlcywgZGlnZXN0cywgYW5kIE1BQ3MK
CiMKIyBDUkNzIChjeWNsaWMgcmVkdW5kYW5jeSBjaGVja3MpCiMKQ09ORklHX0NSWVBUT19DUkMz
MkM9eQojIENPTkZJR19DUllQVE9fQ1JDMzIgaXMgbm90IHNldApDT05GSUdfQ1JZUFRPX0NSQ1Qx
MERJRj15CiMgZW5kIG9mIENSQ3MgKGN5Y2xpYyByZWR1bmRhbmN5IGNoZWNrcykKCiMKIyBDb21w
cmVzc2lvbgojCiMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JZ
UFRPX0xaTyBpcyBub3Qgc2V0CiMgQ09ORklHX0NSWVBUT184NDIgaXMgbm90IHNldAojIENPTkZJ
R19DUllQVE9fTFo0IGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JZUFRPX0xaNEhDIGlzIG5vdCBzZXQK
IyBDT05GSUdfQ1JZUFRPX1pTVEQgaXMgbm90IHNldAojIGVuZCBvZiBDb21wcmVzc2lvbgoKIwoj
IFJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbgojCiMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlz
IG5vdCBzZXQKQ09ORklHX0NSWVBUT19EUkJHX01FTlU9eQpDT05GSUdfQ1JZUFRPX0RSQkdfSE1B
Qz15CiMgQ09ORklHX0NSWVBUT19EUkJHX0hBU0ggaXMgbm90IHNldAojIENPTkZJR19DUllQVE9f
RFJCR19DVFIgaXMgbm90IHNldApDT05GSUdfQ1JZUFRPX0RSQkc9eQpDT05GSUdfQ1JZUFRPX0pJ
VFRFUkVOVFJPUFk9eQpDT05GSUdfQ1JZUFRPX0pJVFRFUkVOVFJPUFlfTUVNT1JZX0JMT0NLUz02
NApDT05GSUdfQ1JZUFRPX0pJVFRFUkVOVFJPUFlfTUVNT1JZX0JMT0NLU0laRT0zMgpDT05GSUdf
Q1JZUFRPX0pJVFRFUkVOVFJPUFlfT1NSPTEKIyBlbmQgb2YgUmFuZG9tIG51bWJlciBnZW5lcmF0
aW9uCgojCiMgVXNlcnNwYWNlIGludGVyZmFjZQojCiMgQ09ORklHX0NSWVBUT19VU0VSX0FQSV9I
QVNIIGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JZUFRPX1VTRVJfQVBJX1NLQ0lQSEVSIGlzIG5vdCBz
ZXQKIyBDT05GSUdfQ1JZUFRPX1VTRVJfQVBJX1JORyBpcyBub3Qgc2V0CiMgQ09ORklHX0NSWVBU
T19VU0VSX0FQSV9BRUFEIGlzIG5vdCBzZXQKIyBlbmQgb2YgVXNlcnNwYWNlIGludGVyZmFjZQoK
Q09ORklHX0NSWVBUT19IQVNIX0lORk89eQoKIwojIEFjY2VsZXJhdGVkIENyeXB0b2dyYXBoaWMg
QWxnb3JpdGhtcyBmb3IgQ1BVICh4ODYpCiMKIyBDT05GSUdfQ1JZUFRPX0NVUlZFMjU1MTlfWDg2
IGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JZUFRPX0FFU19OSV9JTlRFTCBpcyBub3Qgc2V0CiMgQ09O
RklHX0NSWVBUT19CTE9XRklTSF9YODZfNjQgaXMgbm90IHNldAojIENPTkZJR19DUllQVE9fQ0FN
RUxMSUFfWDg2XzY0IGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBX0FFU05JX0FW
WF9YODZfNjQgaXMgbm90IHNldAojIENPTkZJR19DUllQVE9fQ0FNRUxMSUFfQUVTTklfQVZYMl9Y
ODZfNjQgaXMgbm90IHNldAojIENPTkZJR19DUllQVE9fQ0FTVDVfQVZYX1g4Nl82NCBpcyBub3Qg
c2V0CiMgQ09ORklHX0NSWVBUT19DQVNUNl9BVlhfWDg2XzY0IGlzIG5vdCBzZXQKIyBDT05GSUdf
Q1JZUFRPX0RFUzNfRURFX1g4Nl82NCBpcyBub3Qgc2V0CiMgQ09ORklHX0NSWVBUT19TRVJQRU5U
X1NTRTJfWDg2XzY0IGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlRfQVZYX1g4Nl82
NCBpcyBub3Qgc2V0CiMgQ09ORklHX0NSWVBUT19TRVJQRU5UX0FWWDJfWDg2XzY0IGlzIG5vdCBz
ZXQKIyBDT05GSUdfQ1JZUFRPX1NNNF9BRVNOSV9BVlhfWDg2XzY0IGlzIG5vdCBzZXQKIyBDT05G
SUdfQ1JZUFRPX1NNNF9BRVNOSV9BVlgyX1g4Nl82NCBpcyBub3Qgc2V0CiMgQ09ORklHX0NSWVBU
T19UV09GSVNIX1g4Nl82NCBpcyBub3Qgc2V0CiMgQ09ORklHX0NSWVBUT19UV09GSVNIX1g4Nl82
NF8zV0FZIGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQVZYX1g4Nl82NCBpcyBu
b3Qgc2V0CiMgQ09ORklHX0NSWVBUT19BUklBX0FFU05JX0FWWF9YODZfNjQgaXMgbm90IHNldAoj
IENPTkZJR19DUllQVE9fQVJJQV9BRVNOSV9BVlgyX1g4Nl82NCBpcyBub3Qgc2V0CiMgQ09ORklH
X0NSWVBUT19BUklBX0dGTklfQVZYNTEyX1g4Nl82NCBpcyBub3Qgc2V0CiMgQ09ORklHX0NSWVBU
T19DSEFDSEEyMF9YODZfNjQgaXMgbm90IHNldAojIENPTkZJR19DUllQVE9fQUVHSVMxMjhfQUVT
TklfU1NFMiBpcyBub3Qgc2V0CiMgQ09ORklHX0NSWVBUT19OSFBPTFkxMzA1X1NTRTIgaXMgbm90
IHNldAojIENPTkZJR19DUllQVE9fTkhQT0xZMTMwNV9BVlgyIGlzIG5vdCBzZXQKIyBDT05GSUdf
Q1JZUFRPX0JMQUtFMlNfWDg2IGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JZUFRPX1BPTFlWQUxfQ0xN
VUxfTkkgaXMgbm90IHNldAojIENPTkZJR19DUllQVE9fUE9MWTEzMDVfWDg2XzY0IGlzIG5vdCBz
ZXQKIyBDT05GSUdfQ1JZUFRPX1NIQTFfU1NTRTMgaXMgbm90IHNldAojIENPTkZJR19DUllQVE9f
U0hBMjU2X1NTU0UzIGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JZUFRPX1NIQTUxMl9TU1NFMyBpcyBu
b3Qgc2V0CiMgQ09ORklHX0NSWVBUT19TTTNfQVZYX1g4Nl82NCBpcyBub3Qgc2V0CiMgQ09ORklH
X0NSWVBUT19HSEFTSF9DTE1VTF9OSV9JTlRFTCBpcyBub3Qgc2V0CiMgQ09ORklHX0NSWVBUT19D
UkMzMkNfSU5URUwgaXMgbm90IHNldAojIENPTkZJR19DUllQVE9fQ1JDMzJfUENMTVVMIGlzIG5v
dCBzZXQKIyBDT05GSUdfQ1JZUFRPX0NSQ1QxMERJRl9QQ0xNVUwgaXMgbm90IHNldAojIGVuZCBv
ZiBBY2NlbGVyYXRlZCBDcnlwdG9ncmFwaGljIEFsZ29yaXRobXMgZm9yIENQVSAoeDg2KQoKQ09O
RklHX0NSWVBUT19IVz15CiMgQ09ORklHX0NSWVBUT19ERVZfUEFETE9DSyBpcyBub3Qgc2V0CiMg
Q09ORklHX0NSWVBUT19ERVZfQVRNRUxfRUNDIGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JZUFRPX0RF
Vl9BVE1FTF9TSEEyMDRBIGlzIG5vdCBzZXQKQ09ORklHX0NSWVBUT19ERVZfQ0NQPXkKQ09ORklH
X0NSWVBUT19ERVZfQ0NQX0REPXkKIyBDT05GSUdfQ1JZUFRPX0RFVl9TUF9DQ1AgaXMgbm90IHNl
dAojIENPTkZJR19DUllQVE9fREVWX1NQX1BTUCBpcyBub3Qgc2V0CiMgQ09ORklHX0NSWVBUT19E
RVZfTklUUk9YX0NOTjU1WFggaXMgbm90IHNldAojIENPTkZJR19DUllQVE9fREVWX1FBVF9ESDg5
NXhDQyBpcyBub3Qgc2V0CiMgQ09ORklHX0NSWVBUT19ERVZfUUFUX0MzWFhYIGlzIG5vdCBzZXQK
IyBDT05GSUdfQ1JZUFRPX0RFVl9RQVRfQzYyWCBpcyBub3Qgc2V0CiMgQ09ORklHX0NSWVBUT19E
RVZfUUFUXzRYWFggaXMgbm90IHNldAojIENPTkZJR19DUllQVE9fREVWX1FBVF80MjBYWCBpcyBu
b3Qgc2V0CiMgQ09ORklHX0NSWVBUT19ERVZfUUFUX0RIODk1eENDVkYgaXMgbm90IHNldAojIENP
TkZJR19DUllQVE9fREVWX1FBVF9DM1hYWFZGIGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JZUFRPX0RF
Vl9RQVRfQzYyWFZGIGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JZUFRPX0RFVl9WSVJUSU8gaXMgbm90
IHNldAojIENPTkZJR19DUllQVE9fREVWX1NBRkVYQ0VMIGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JZ
UFRPX0RFVl9DQ1JFRSBpcyBub3Qgc2V0CiMgQ09ORklHX0NSWVBUT19ERVZfQU1MT0dJQ19HWEwg
aXMgbm90IHNldApDT05GSUdfQVNZTU1FVFJJQ19LRVlfVFlQRT15CkNPTkZJR19BU1lNTUVUUklD
X1BVQkxJQ19LRVlfU1VCVFlQRT15CkNPTkZJR19YNTA5X0NFUlRJRklDQVRFX1BBUlNFUj15CiMg
Q09ORklHX1BLQ1M4X1BSSVZBVEVfS0VZX1BBUlNFUiBpcyBub3Qgc2V0CkNPTkZJR19QS0NTN19N
RVNTQUdFX1BBUlNFUj15CiMgQ09ORklHX1BLQ1M3X1RFU1RfS0VZIGlzIG5vdCBzZXQKIyBDT05G
SUdfU0lHTkVEX1BFX0ZJTEVfVkVSSUZJQ0FUSU9OIGlzIG5vdCBzZXQKIyBDT05GSUdfRklQU19T
SUdOQVRVUkVfU0VMRlRFU1QgaXMgbm90IHNldAoKIwojIENlcnRpZmljYXRlcyBmb3Igc2lnbmF0
dXJlIGNoZWNraW5nCiMKQ09ORklHX01PRFVMRV9TSUdfS0VZPSJjZXJ0cy9zaWduaW5nX2tleS5w
ZW0iCkNPTkZJR19NT0RVTEVfU0lHX0tFWV9UWVBFX1JTQT15CkNPTkZJR19TWVNURU1fVFJVU1RF
RF9LRVlSSU5HPXkKQ09ORklHX1NZU1RFTV9UUlVTVEVEX0tFWVM9IiIKIyBDT05GSUdfU1lTVEVN
X0VYVFJBX0NFUlRJRklDQVRFIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VDT05EQVJZX1RSVVNURURf
S0VZUklORyBpcyBub3Qgc2V0CiMgQ09ORklHX1NZU1RFTV9CTEFDS0xJU1RfS0VZUklORyBpcyBu
b3Qgc2V0CiMgZW5kIG9mIENlcnRpZmljYXRlcyBmb3Igc2lnbmF0dXJlIGNoZWNraW5nCgpDT05G
SUdfQklOQVJZX1BSSU5URj15CgojCiMgTGlicmFyeSByb3V0aW5lcwojCkNPTkZJR19MSU5FQVJf
UkFOR0VTPXkKIyBDT05GSUdfUEFDS0lORyBpcyBub3Qgc2V0CkNPTkZJR19CSVRSRVZFUlNFPXkK
Q09ORklHX0dFTkVSSUNfU1RSTkNQWV9GUk9NX1VTRVI9eQpDT05GSUdfR0VORVJJQ19TVFJOTEVO
X1VTRVI9eQpDT05GSUdfR0VORVJJQ19ORVRfVVRJTFM9eQojIENPTkZJR19DT1JESUMgaXMgbm90
IHNldAojIENPTkZJR19QUklNRV9OVU1CRVJTIGlzIG5vdCBzZXQKQ09ORklHX1JBVElPTkFMPXkK
Q09ORklHX0dFTkVSSUNfUENJX0lPTUFQPXkKQ09ORklHX0dFTkVSSUNfSU9NQVA9eQpDT05GSUdf
QVJDSF9VU0VfQ01QWENIR19MT0NLUkVGPXkKQ09ORklHX0FSQ0hfSEFTX0ZBU1RfTVVMVElQTElF
Uj15CkNPTkZJR19BUkNIX1VTRV9TWU1fQU5OT1RBVElPTlM9eQoKIwojIENyeXB0byBsaWJyYXJ5
IHJvdXRpbmVzCiMKQ09ORklHX0NSWVBUT19MSUJfVVRJTFM9eQpDT05GSUdfQ1JZUFRPX0xJQl9B
RVM9eQpDT05GSUdfQ1JZUFRPX0xJQl9BUkM0PXkKQ09ORklHX0NSWVBUT19MSUJfR0YxMjhNVUw9
eQpDT05GSUdfQ1JZUFRPX0xJQl9CTEFLRTJTX0dFTkVSSUM9eQojIENPTkZJR19DUllQVE9fTElC
X0NIQUNIQSBpcyBub3Qgc2V0CiMgQ09ORklHX0NSWVBUT19MSUJfQ1VSVkUyNTUxOSBpcyBub3Qg
c2V0CkNPTkZJR19DUllQVE9fTElCX1BPTFkxMzA1X1JTSVpFPTExCiMgQ09ORklHX0NSWVBUT19M
SUJfUE9MWTEzMDUgaXMgbm90IHNldAojIENPTkZJR19DUllQVE9fTElCX0NIQUNIQTIwUE9MWTEz
MDUgaXMgbm90IHNldApDT05GSUdfQ1JZUFRPX0xJQl9TSEExPXkKQ09ORklHX0NSWVBUT19MSUJf
U0hBMjU2PXkKIyBlbmQgb2YgQ3J5cHRvIGxpYnJhcnkgcm91dGluZXMKCkNPTkZJR19DUkNfQ0NJ
VFQ9eQpDT05GSUdfQ1JDMTY9eQpDT05GSUdfQ1JDX1QxMERJRj15CiMgQ09ORklHX0NSQzY0X1JP
Q0tTT0ZUIGlzIG5vdCBzZXQKQ09ORklHX0NSQ19JVFVfVD15CkNPTkZJR19DUkMzMj15CiMgQ09O
RklHX0NSQzMyX1NFTEZURVNUIGlzIG5vdCBzZXQKQ09ORklHX0NSQzMyX1NMSUNFQlk4PXkKIyBD
T05GSUdfQ1JDMzJfU0xJQ0VCWTQgaXMgbm90IHNldAojIENPTkZJR19DUkMzMl9TQVJXQVRFIGlz
IG5vdCBzZXQKIyBDT05GSUdfQ1JDMzJfQklUIGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JDNjQgaXMg
bm90IHNldAojIENPTkZJR19DUkM0IGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0
CiMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiMgQ09ORklHX0NSQzggaXMgbm90IHNldApD
T05GSUdfWFhIQVNIPXkKIyBDT05GSUdfUkFORE9NMzJfU0VMRlRFU1QgaXMgbm90IHNldApDT05G
SUdfWkxJQl9JTkZMQVRFPXkKQ09ORklHX1pMSUJfREVGTEFURT15CkNPTkZJR19MWk9fQ09NUFJF
U1M9eQpDT05GSUdfTFpPX0RFQ09NUFJFU1M9eQpDT05GSUdfTFo0X0RFQ09NUFJFU1M9eQpDT05G
SUdfWlNURF9DT01NT049eQpDT05GSUdfWlNURF9ERUNPTVBSRVNTPXkKQ09ORklHX1haX0RFQz15
CkNPTkZJR19YWl9ERUNfWDg2PXkKQ09ORklHX1haX0RFQ19QT1dFUlBDPXkKQ09ORklHX1haX0RF
Q19BUk09eQpDT05GSUdfWFpfREVDX0FSTVRIVU1CPXkKQ09ORklHX1haX0RFQ19TUEFSQz15CiMg
Q09ORklHX1haX0RFQ19NSUNST0xaTUEgaXMgbm90IHNldApDT05GSUdfWFpfREVDX0JDSj15CiMg
Q09ORklHX1haX0RFQ19URVNUIGlzIG5vdCBzZXQKQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15CkNP
TkZJR19ERUNPTVBSRVNTX0JaSVAyPXkKQ09ORklHX0RFQ09NUFJFU1NfTFpNQT15CkNPTkZJR19E
RUNPTVBSRVNTX1haPXkKQ09ORklHX0RFQ09NUFJFU1NfTFpPPXkKQ09ORklHX0RFQ09NUFJFU1Nf
TFo0PXkKQ09ORklHX0RFQ09NUFJFU1NfWlNURD15CkNPTkZJR19HRU5FUklDX0FMTE9DQVRPUj15
CkNPTkZJR19JTlRFUlZBTF9UUkVFPXkKQ09ORklHX1hBUlJBWV9NVUxUST15CkNPTkZJR19BU1NP
Q0lBVElWRV9BUlJBWT15CkNPTkZJR19IQVNfSU9NRU09eQpDT05GSUdfSEFTX0lPUE9SVD15CkNP
TkZJR19IQVNfSU9QT1JUX01BUD15CkNPTkZJR19IQVNfRE1BPXkKQ09ORklHX0RNQV9PUFM9eQpD
T05GSUdfTkVFRF9TR19ETUFfRkxBR1M9eQpDT05GSUdfTkVFRF9TR19ETUFfTEVOR1RIPXkKQ09O
RklHX05FRURfRE1BX01BUF9TVEFURT15CkNPTkZJR19BUkNIX0RNQV9BRERSX1RfNjRCSVQ9eQpD
T05GSUdfU1dJT1RMQj15CiMgQ09ORklHX1NXSU9UTEJfRFlOQU1JQyBpcyBub3Qgc2V0CiMgQ09O
RklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAojIENPTkZJR19ETUFfTUFQX0JFTkNITUFSSyBp
cyBub3Qgc2V0CkNPTkZJR19TR0xfQUxMT0M9eQpDT05GSUdfQ0hFQ0tfU0lHTkFUVVJFPXkKIyBD
T05GSUdfQ1BVTUFTS19PRkZTVEFDSyBpcyBub3Qgc2V0CiMgQ09ORklHX0ZPUkNFX05SX0NQVVMg
aXMgbm90IHNldApDT05GSUdfQ1BVX1JNQVA9eQpDT05GSUdfRFFMPXkKQ09ORklHX0dMT0I9eQoj
IENPTkZJR19HTE9CX1NFTEZURVNUIGlzIG5vdCBzZXQKQ09ORklHX05MQVRUUj15CkNPTkZJR19D
TFpfVEFCPXkKIyBDT05GSUdfSVJRX1BPTEwgaXMgbm90IHNldApDT05GSUdfTVBJTElCPXkKQ09O
RklHX1NJR05BVFVSRT15CkNPTkZJR19ESU1MSUI9eQpDT05GSUdfT0lEX1JFR0lTVFJZPXkKQ09O
RklHX0hBVkVfR0VORVJJQ19WRFNPPXkKQ09ORklHX0dFTkVSSUNfR0VUVElNRU9GREFZPXkKQ09O
RklHX0dFTkVSSUNfVkRTT19USU1FX05TPXkKQ09ORklHX1NHX1BPT0w9eQpDT05GSUdfQVJDSF9I
QVNfUE1FTV9BUEk9eQpDT05GSUdfQVJDSF9IQVNfQ1BVX0NBQ0hFX0lOVkFMSURBVEVfTUVNUkVH
SU9OPXkKQ09ORklHX0FSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRT15CkNPTkZJR19BUkNIX0hB
U19DT1BZX01DPXkKQ09ORklHX0FSQ0hfU1RBQ0tXQUxLPXkKQ09ORklHX1NUQUNLREVQT1Q9eQpD
T05GSUdfU1RBQ0tERVBPVF9BTFdBWVNfSU5JVD15CkNPTkZJR19TVEFDS0RFUE9UX01BWF9GUkFN
RVM9NjQKQ09ORklHX1JFRl9UUkFDS0VSPXkKQ09ORklHX1NCSVRNQVA9eQojIENPTkZJR19MV1Ff
VEVTVCBpcyBub3Qgc2V0CiMgZW5kIG9mIExpYnJhcnkgcm91dGluZXMKCkNPTkZJR19GSVJNV0FS
RV9UQUJMRT15CgojCiMgS2VybmVsIGhhY2tpbmcKIwoKIwojIHByaW50ayBhbmQgZG1lc2cgb3B0
aW9ucwojCkNPTkZJR19QUklOVEtfVElNRT15CkNPTkZJR19QUklOVEtfQ0FMTEVSPXkKIyBDT05G
SUdfU1RBQ0tUUkFDRV9CVUlMRF9JRCBpcyBub3Qgc2V0CkNPTkZJR19DT05TT0xFX0xPR0xFVkVM
X0RFRkFVTFQ9NwpDT05GSUdfQ09OU09MRV9MT0dMRVZFTF9RVUlFVD00CkNPTkZJR19NRVNTQUdF
X0xPR0xFVkVMX0RFRkFVTFQ9NAojIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0
CkNPTkZJR19EWU5BTUlDX0RFQlVHPXkKQ09ORklHX0RZTkFNSUNfREVCVUdfQ09SRT15CkNPTkZJ
R19TWU1CT0xJQ19FUlJOQU1FPXkKQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQojIGVuZCBvZiBw
cmludGsgYW5kIGRtZXNnIG9wdGlvbnMKCkNPTkZJR19ERUJVR19LRVJORUw9eQpDT05GSUdfREVC
VUdfTUlTQz15CgojCiMgQ29tcGlsZS10aW1lIGNoZWNrcyBhbmQgY29tcGlsZXIgb3B0aW9ucwoj
CkNPTkZJR19ERUJVR19JTkZPPXkKQ09ORklHX0FTX0hBU19OT05fQ09OU1RfVUxFQjEyOD15CiMg
Q09ORklHX0RFQlVHX0lORk9fTk9ORSBpcyBub3Qgc2V0CiMgQ09ORklHX0RFQlVHX0lORk9fRFdB
UkZfVE9PTENIQUlOX0RFRkFVTFQgaXMgbm90IHNldApDT05GSUdfREVCVUdfSU5GT19EV0FSRjQ9
eQojIENPTkZJR19ERUJVR19JTkZPX0RXQVJGNSBpcyBub3Qgc2V0CiMgQ09ORklHX0RFQlVHX0lO
Rk9fUkVEVUNFRCBpcyBub3Qgc2V0CkNPTkZJR19ERUJVR19JTkZPX0NPTVBSRVNTRURfTk9ORT15
CiMgQ09ORklHX0RFQlVHX0lORk9fQ09NUFJFU1NFRF9aTElCIGlzIG5vdCBzZXQKIyBDT05GSUdf
REVCVUdfSU5GT19TUExJVCBpcyBub3Qgc2V0CiMgQ09ORklHX0RFQlVHX0lORk9fQlRGIGlzIG5v
dCBzZXQKQ09ORklHX1BBSE9MRV9IQVNfU1BMSVRfQlRGPXkKQ09ORklHX1BBSE9MRV9IQVNfTEFO
R19FWENMVURFPXkKIyBDT05GSUdfR0RCX1NDUklQVFMgaXMgbm90IHNldApDT05GSUdfRlJBTUVf
V0FSTj0yMDQ4CiMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIyBDT05GSUdfUkVB
REFCTEVfQVNNIGlzIG5vdCBzZXQKIyBDT05GSUdfSEVBREVSU19JTlNUQUxMIGlzIG5vdCBzZXQK
IyBDT05GSUdfREVCVUdfU0VDVElPTl9NSVNNQVRDSCBpcyBub3Qgc2V0CkNPTkZJR19TRUNUSU9O
X01JU01BVENIX1dBUk5fT05MWT15CiMgQ09ORklHX0RFQlVHX0ZPUkNFX0ZVTkNUSU9OX0FMSUdO
XzY0QiBpcyBub3Qgc2V0CkNPTkZJR19PQkpUT09MPXkKQ09ORklHX05PSU5TVFJfVkFMSURBVElP
Tj15CiMgQ09ORklHX1ZNTElOVVhfTUFQIGlzIG5vdCBzZXQKIyBDT05GSUdfREVCVUdfRk9SQ0Vf
V0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKIyBlbmQgb2YgQ29tcGlsZS10aW1lIGNoZWNrcyBhbmQg
Y29tcGlsZXIgb3B0aW9ucwoKIwojIEdlbmVyaWMgS2VybmVsIERlYnVnZ2luZyBJbnN0cnVtZW50
cwojCiMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKQ09ORklHX0RFQlVHX0ZTPXkKQ09O
RklHX0RFQlVHX0ZTX0FMTE9XX0FMTD15CiMgQ09ORklHX0RFQlVHX0ZTX0RJU0FMTE9XX01PVU5U
IGlzIG5vdCBzZXQKIyBDT05GSUdfREVCVUdfRlNfQUxMT1dfTk9ORSBpcyBub3Qgc2V0CkNPTkZJ
R19IQVZFX0FSQ0hfS0dEQj15CiMgQ09ORklHX0tHREIgaXMgbm90IHNldApDT05GSUdfQVJDSF9I
QVNfVUJTQU5fU0FOSVRJWkVfQUxMPXkKQ09ORklHX1VCU0FOPXkKIyBDT05GSUdfVUJTQU5fVFJB
UCBpcyBub3Qgc2V0CkNPTkZJR19DQ19IQVNfVUJTQU5fQk9VTkRTX1NUUklDVD15CkNPTkZJR19V
QlNBTl9CT1VORFM9eQpDT05GSUdfVUJTQU5fQk9VTkRTX1NUUklDVD15CkNPTkZJR19VQlNBTl9T
SElGVD15CiMgQ09ORklHX1VCU0FOX0RJVl9aRVJPIGlzIG5vdCBzZXQKIyBDT05GSUdfVUJTQU5f
Qk9PTCBpcyBub3Qgc2V0CiMgQ09ORklHX1VCU0FOX0VOVU0gaXMgbm90IHNldAojIENPTkZJR19V
QlNBTl9BTElHTk1FTlQgaXMgbm90IHNldApDT05GSUdfVUJTQU5fU0FOSVRJWkVfQUxMPXkKIyBD
T05GSUdfVEVTVF9VQlNBTiBpcyBub3Qgc2V0CkNPTkZJR19IQVZFX0FSQ0hfS0NTQU49eQpDT05G
SUdfSEFWRV9LQ1NBTl9DT01QSUxFUj15CiMgZW5kIG9mIEdlbmVyaWMgS2VybmVsIERlYnVnZ2lu
ZyBJbnN0cnVtZW50cwoKIwojIE5ldHdvcmtpbmcgRGVidWdnaW5nCiMKQ09ORklHX05FVF9ERVZf
UkVGQ05UX1RSQUNLRVI9eQpDT05GSUdfTkVUX05TX1JFRkNOVF9UUkFDS0VSPXkKQ09ORklHX0RF
QlVHX05FVD15CiMgZW5kIG9mIE5ldHdvcmtpbmcgRGVidWdnaW5nCgojCiMgTWVtb3J5IERlYnVn
Z2luZwojCkNPTkZJR19QQUdFX0VYVEVOU0lPTj15CiMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBp
cyBub3Qgc2V0CkNPTkZJR19TTFVCX0RFQlVHPXkKIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBu
b3Qgc2V0CkNPTkZJR19QQUdFX09XTkVSPXkKQ09ORklHX1BBR0VfVEFCTEVfQ0hFQ0s9eQpDT05G
SUdfUEFHRV9UQUJMRV9DSEVDS19FTkZPUkNFRD15CkNPTkZJR19QQUdFX1BPSVNPTklORz15CiMg
Q09ORklHX0RFQlVHX1BBR0VfUkVGIGlzIG5vdCBzZXQKIyBDT05GSUdfREVCVUdfUk9EQVRBX1RF
U1QgaXMgbm90IHNldApDT05GSUdfQVJDSF9IQVNfREVCVUdfV1g9eQpDT05GSUdfREVCVUdfV1g9
eQpDT05GSUdfR0VORVJJQ19QVERVTVA9eQpDT05GSUdfUFREVU1QX0NPUkU9eQpDT05GSUdfUFRE
VU1QX0RFQlVHRlM9eQpDT05GSUdfSEFWRV9ERUJVR19LTUVNTEVBSz15CiMgQ09ORklHX0RFQlVH
X0tNRU1MRUFLIGlzIG5vdCBzZXQKIyBDT05GSUdfUEVSX1ZNQV9MT0NLX1NUQVRTIGlzIG5vdCBz
ZXQKQ09ORklHX0RFQlVHX09CSkVDVFM9eQojIENPTkZJR19ERUJVR19PQkpFQ1RTX1NFTEZURVNU
IGlzIG5vdCBzZXQKQ09ORklHX0RFQlVHX09CSkVDVFNfRlJFRT15CkNPTkZJR19ERUJVR19PQkpF
Q1RTX1RJTUVSUz15CkNPTkZJR19ERUJVR19PQkpFQ1RTX1dPUks9eQpDT05GSUdfREVCVUdfT0JK
RUNUU19SQ1VfSEVBRD15CkNPTkZJR19ERUJVR19PQkpFQ1RTX1BFUkNQVV9DT1VOVEVSPXkKQ09O
RklHX0RFQlVHX09CSkVDVFNfRU5BQkxFX0RFRkFVTFQ9MQojIENPTkZJR19TSFJJTktFUl9ERUJV
RyBpcyBub3Qgc2V0CkNPTkZJR19ERUJVR19TVEFDS19VU0FHRT15CkNPTkZJR19TQ0hFRF9TVEFD
S19FTkRfQ0hFQ0s9eQpDT05GSUdfQVJDSF9IQVNfREVCVUdfVk1fUEdUQUJMRT15CkNPTkZJR19E
RUJVR19WTV9JUlFTT0ZGPXkKQ09ORklHX0RFQlVHX1ZNPXkKQ09ORklHX0RFQlVHX1ZNX01BUExF
X1RSRUU9eQpDT05GSUdfREVCVUdfVk1fUkI9eQpDT05GSUdfREVCVUdfVk1fUEdGTEFHUz15CkNP
TkZJR19ERUJVR19WTV9QR1RBQkxFPXkKQ09ORklHX0FSQ0hfSEFTX0RFQlVHX1ZJUlRVQUw9eQpD
T05GSUdfREVCVUdfVklSVFVBTD15CkNPTkZJR19ERUJVR19NRU1PUllfSU5JVD15CkNPTkZJR19E
RUJVR19QRVJfQ1BVX01BUFM9eQpDT05GSUdfREVCVUdfS01BUF9MT0NBTD15CkNPTkZJR19BUkNI
X1NVUFBPUlRTX0tNQVBfTE9DQUxfRk9SQ0VfTUFQPXkKQ09ORklHX0RFQlVHX0tNQVBfTE9DQUxf
Rk9SQ0VfTUFQPXkKQ09ORklHX0hBVkVfQVJDSF9LQVNBTj15CkNPTkZJR19IQVZFX0FSQ0hfS0FT
QU5fVk1BTExPQz15CkNPTkZJR19DQ19IQVNfS0FTQU5fR0VORVJJQz15CkNPTkZJR19DQ19IQVNf
V09SS0lOR19OT1NBTklUSVpFX0FERFJFU1M9eQpDT05GSUdfS0FTQU49eQpDT05GSUdfS0FTQU5f
R0VORVJJQz15CiMgQ09ORklHX0tBU0FOX09VVExJTkUgaXMgbm90IHNldApDT05GSUdfS0FTQU5f
SU5MSU5FPXkKQ09ORklHX0tBU0FOX1NUQUNLPXkKQ09ORklHX0tBU0FOX1ZNQUxMT0M9eQojIENP
TkZJR19LQVNBTl9NT0RVTEVfVEVTVCBpcyBub3Qgc2V0CiMgQ09ORklHX0tBU0FOX0VYVFJBX0lO
Rk8gaXMgbm90IHNldApDT05GSUdfSEFWRV9BUkNIX0tGRU5DRT15CiMgQ09ORklHX0tGRU5DRSBp
cyBub3Qgc2V0CkNPTkZJR19IQVZFX0FSQ0hfS01TQU49eQojIGVuZCBvZiBNZW1vcnkgRGVidWdn
aW5nCgojIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CgojCiMgRGVidWcgT29wcywgTG9j
a3VwcyBhbmQgSGFuZ3MKIwpDT05GSUdfUEFOSUNfT05fT09QUz15CkNPTkZJR19QQU5JQ19PTl9P
T1BTX1ZBTFVFPTEKQ09ORklHX1BBTklDX1RJTUVPVVQ9ODY0MDAKQ09ORklHX0xPQ0tVUF9ERVRF
Q1RPUj15CkNPTkZJR19TT0ZUTE9DS1VQX0RFVEVDVE9SPXkKQ09ORklHX0JPT1RQQVJBTV9TT0ZU
TE9DS1VQX1BBTklDPXkKQ09ORklHX0hBVkVfSEFSRExPQ0tVUF9ERVRFQ1RPUl9CVUREWT15CkNP
TkZJR19IQVJETE9DS1VQX0RFVEVDVE9SPXkKIyBDT05GSUdfSEFSRExPQ0tVUF9ERVRFQ1RPUl9Q
UkVGRVJfQlVERFkgaXMgbm90IHNldApDT05GSUdfSEFSRExPQ0tVUF9ERVRFQ1RPUl9QRVJGPXkK
IyBDT05GSUdfSEFSRExPQ0tVUF9ERVRFQ1RPUl9CVUREWSBpcyBub3Qgc2V0CiMgQ09ORklHX0hB
UkRMT0NLVVBfREVURUNUT1JfQVJDSCBpcyBub3Qgc2V0CkNPTkZJR19IQVJETE9DS1VQX0RFVEVD
VE9SX0NPVU5UU19IUlRJTUVSPXkKQ09ORklHX0hBUkRMT0NLVVBfQ0hFQ0tfVElNRVNUQU1QPXkK
Q09ORklHX0JPT1RQQVJBTV9IQVJETE9DS1VQX1BBTklDPXkKQ09ORklHX0RFVEVDVF9IVU5HX1RB
U0s9eQpDT05GSUdfREVGQVVMVF9IVU5HX1RBU0tfVElNRU9VVD0xNDAKQ09ORklHX0JPT1RQQVJB
TV9IVU5HX1RBU0tfUEFOSUM9eQpDT05GSUdfV1FfV0FUQ0hET0c9eQojIENPTkZJR19XUV9DUFVf
SU5URU5TSVZFX1JFUE9SVCBpcyBub3Qgc2V0CiMgQ09ORklHX1RFU1RfTE9DS1VQIGlzIG5vdCBz
ZXQKIyBlbmQgb2YgRGVidWcgT29wcywgTG9ja3VwcyBhbmQgSGFuZ3MKCiMKIyBTY2hlZHVsZXIg
RGVidWdnaW5nCiMKIyBDT05GSUdfU0NIRURfREVCVUcgaXMgbm90IHNldApDT05GSUdfU0NIRURf
SU5GTz15CkNPTkZJR19TQ0hFRFNUQVRTPXkKIyBlbmQgb2YgU2NoZWR1bGVyIERlYnVnZ2luZwoK
Q09ORklHX0RFQlVHX1RJTUVLRUVQSU5HPXkKQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQoKIwojIExv
Y2sgRGVidWdnaW5nIChzcGlubG9ja3MsIG11dGV4ZXMsIGV0Yy4uLikKIwpDT05GSUdfTE9DS19E
RUJVR0dJTkdfU1VQUE9SVD15CkNPTkZJR19QUk9WRV9MT0NLSU5HPXkKIyBDT05GSUdfUFJPVkVf
UkFXX0xPQ0tfTkVTVElORyBpcyBub3Qgc2V0CiMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0
CkNPTkZJR19ERUJVR19SVF9NVVRFWEVTPXkKQ09ORklHX0RFQlVHX1NQSU5MT0NLPXkKQ09ORklH
X0RFQlVHX01VVEVYRVM9eQpDT05GSUdfREVCVUdfV1dfTVVURVhfU0xPV1BBVEg9eQpDT05GSUdf
REVCVUdfUldTRU1TPXkKQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0M9eQpDT05GSUdfTE9DS0RFUD15
CkNPTkZJR19MT0NLREVQX0JJVFM9MTcKQ09ORklHX0xPQ0tERVBfQ0hBSU5TX0JJVFM9MTgKQ09O
RklHX0xPQ0tERVBfU1RBQ0tfVFJBQ0VfQklUUz0yMApDT05GSUdfTE9DS0RFUF9TVEFDS19UUkFD
RV9IQVNIX0JJVFM9MTQKQ09ORklHX0xPQ0tERVBfQ0lSQ1VMQVJfUVVFVUVfQklUUz0xMgojIENP
TkZJR19ERUJVR19MT0NLREVQIGlzIG5vdCBzZXQKQ09ORklHX0RFQlVHX0FUT01JQ19TTEVFUD15
CiMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CiMgQ09ORklH
X0xPQ0tfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKIyBDT05GSUdfV1dfTVVURVhfU0VMRlRFU1Qg
aXMgbm90IHNldAojIENPTkZJR19TQ0ZfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKQ09ORklHX0NT
RF9MT0NLX1dBSVRfREVCVUc9eQojIENPTkZJR19DU0RfTE9DS19XQUlUX0RFQlVHX0RFRkFVTFQg
aXMgbm90IHNldAojIGVuZCBvZiBMb2NrIERlYnVnZ2luZyAoc3BpbmxvY2tzLCBtdXRleGVzLCBl
dGMuLi4pCgpDT05GSUdfVFJBQ0VfSVJRRkxBR1M9eQpDT05GSUdfVFJBQ0VfSVJRRkxBR1NfTk1J
PXkKQ09ORklHX05NSV9DSEVDS19DUFU9eQpDT05GSUdfREVCVUdfSVJRRkxBR1M9eQpDT05GSUdf
U1RBQ0tUUkFDRT15CiMgQ09ORklHX1dBUk5fQUxMX1VOU0VFREVEX1JBTkRPTSBpcyBub3Qgc2V0
CiMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAojIENPTkZJR19ERUJVR19LT0JKRUNU
X1JFTEVBU0UgaXMgbm90IHNldAoKIwojIERlYnVnIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMKIwpD
T05GSUdfREVCVUdfTElTVD15CkNPTkZJR19ERUJVR19QTElTVD15CkNPTkZJR19ERUJVR19TRz15
CkNPTkZJR19ERUJVR19OT1RJRklFUlM9eQpDT05GSUdfREVCVUdfTUFQTEVfVFJFRT15CiMgZW5k
IG9mIERlYnVnIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMKCiMKIyBSQ1UgRGVidWdnaW5nCiMKQ09O
RklHX1BST1ZFX1JDVT15CiMgQ09ORklHX1JDVV9TQ0FMRV9URVNUIGlzIG5vdCBzZXQKIyBDT05G
SUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiMgQ09ORklHX1JDVV9SRUZfU0NBTEVfVEVT
VCBpcyBub3Qgc2V0CkNPTkZJR19SQ1VfQ1BVX1NUQUxMX1RJTUVPVVQ9MTAwCkNPTkZJR19SQ1Vf
RVhQX0NQVV9TVEFMTF9USU1FT1VUPTIxMDAwCiMgQ09ORklHX1JDVV9DUFVfU1RBTExfQ1BVVElN
RSBpcyBub3Qgc2V0CiMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CkNPTkZJR19SQ1VfRVFT
X0RFQlVHPXkKIyBlbmQgb2YgUkNVIERlYnVnZ2luZwoKIyBDT05GSUdfREVCVUdfV1FfRk9SQ0Vf
UlJfQ1BVIGlzIG5vdCBzZXQKIyBDT05GSUdfQ1BVX0hPVFBMVUdfU1RBVEVfQ09OVFJPTCBpcyBu
b3Qgc2V0CiMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldApDT05GSUdfVVNFUl9TVEFDS1RS
QUNFX1NVUFBPUlQ9eQpDT05GSUdfTk9QX1RSQUNFUj15CkNPTkZJR19IQVZFX1JFVEhPT0s9eQpD
T05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQpDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15
CkNPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfUkVHUz15CkNPTkZJR19IQVZFX0RZTkFN
SUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTPXkKQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0Vf
V0lUSF9BUkdTPXkKQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0VfTk9fUEFUQ0hBQkxFPXkKQ09O
RklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQpDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNF
UE9JTlRTPXkKQ09ORklHX0hBVkVfRkVOVFJZPXkKQ09ORklHX0hBVkVfT0JKVE9PTF9NQ09VTlQ9
eQpDT05GSUdfSEFWRV9PQkpUT09MX05PUF9NQ09VTlQ9eQpDT05GSUdfSEFWRV9DX1JFQ09SRE1D
T1VOVD15CkNPTkZJR19IQVZFX0JVSUxEVElNRV9NQ09VTlRfU09SVD15CkNPTkZJR19UUkFDRV9D
TE9DSz15CkNPTkZJR19SSU5HX0JVRkZFUj15CkNPTkZJR19FVkVOVF9UUkFDSU5HPXkKQ09ORklH
X0NPTlRFWFRfU1dJVENIX1RSQUNFUj15CkNPTkZJR19QUkVFTVBUSVJRX1RSQUNFUE9JTlRTPXkK
Q09ORklHX1RSQUNJTkc9eQpDT05GSUdfR0VORVJJQ19UUkFDRVI9eQpDT05GSUdfVFJBQ0lOR19T
VVBQT1JUPXkKQ09ORklHX0ZUUkFDRT15CiMgQ09ORklHX0JPT1RUSU1FX1RSQUNJTkcgaXMgbm90
IHNldAojIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAojIENPTkZJR19TVEFDS19U
UkFDRVIgaXMgbm90IHNldAojIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CiMgQ09O
RklHX1BSRUVNUFRfVFJBQ0VSIGlzIG5vdCBzZXQKIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5v
dCBzZXQKIyBDT05GSUdfSFdMQVRfVFJBQ0VSIGlzIG5vdCBzZXQKIyBDT05GSUdfT1NOT0lTRV9U
UkFDRVIgaXMgbm90IHNldAojIENPTkZJR19USU1FUkxBVF9UUkFDRVIgaXMgbm90IHNldAojIENP
TkZJR19NTUlPVFJBQ0UgaXMgbm90IHNldAojIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMgaXMgbm90
IHNldAojIENPTkZJR19UUkFDRVJfU05BUFNIT1QgaXMgbm90IHNldApDT05GSUdfQlJBTkNIX1BS
T0ZJTEVfTk9ORT15CiMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBz
ZXQKQ09ORklHX0JMS19ERVZfSU9fVFJBQ0U9eQpDT05GSUdfVVBST0JFX0VWRU5UUz15CkNPTkZJ
R19CUEZfRVZFTlRTPXkKQ09ORklHX0RZTkFNSUNfRVZFTlRTPXkKQ09ORklHX1BST0JFX0VWRU5U
Uz15CiMgQ09ORklHX1NZTlRIX0VWRU5UUyBpcyBub3Qgc2V0CiMgQ09ORklHX1VTRVJfRVZFTlRT
IGlzIG5vdCBzZXQKIyBDT05GSUdfSElTVF9UUklHR0VSUyBpcyBub3Qgc2V0CkNPTkZJR19UUkFD
RV9FVkVOVF9JTkpFQ1Q9eQojIENPTkZJR19UUkFDRVBPSU5UX0JFTkNITUFSSyBpcyBub3Qgc2V0
CiMgQ09ORklHX1JJTkdfQlVGRkVSX0JFTkNITUFSSyBpcyBub3Qgc2V0CiMgQ09ORklHX1RSQUNF
X0VWQUxfTUFQX0ZJTEUgaXMgbm90IHNldAojIENPTkZJR19GVFJBQ0VfU1RBUlRVUF9URVNUIGlz
IG5vdCBzZXQKIyBDT05GSUdfUklOR19CVUZGRVJfU1RBUlRVUF9URVNUIGlzIG5vdCBzZXQKQ09O
RklHX1JJTkdfQlVGRkVSX1ZBTElEQVRFX1RJTUVfREVMVEFTPXkKIyBDT05GSUdfUFJFRU1QVElS
UV9ERUxBWV9URVNUIGlzIG5vdCBzZXQKIyBDT05GSUdfUlYgaXMgbm90IHNldApDT05GSUdfUFJP
VklERV9PSENJMTM5NF9ETUFfSU5JVD15CiMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldApDT05G
SUdfSEFWRV9TQU1QTEVfRlRSQUNFX0RJUkVDVD15CkNPTkZJR19IQVZFX1NBTVBMRV9GVFJBQ0Vf
RElSRUNUX01VTFRJPXkKQ09ORklHX0FSQ0hfSEFTX0RFVk1FTV9JU19BTExPV0VEPXkKIyBDT05G
SUdfU1RSSUNUX0RFVk1FTSBpcyBub3Qgc2V0CgojCiMgeDg2IERlYnVnZ2luZwojCkNPTkZJR19F
QVJMWV9QUklOVEtfVVNCPXkKQ09ORklHX1g4Nl9WRVJCT1NFX0JPT1RVUD15CkNPTkZJR19FQVJM
WV9QUklOVEs9eQpDT05GSUdfRUFSTFlfUFJJTlRLX0RCR1A9eQojIENPTkZJR19FQVJMWV9QUklO
VEtfVVNCX1hEQkMgaXMgbm90IHNldAojIENPTkZJR19ERUJVR19UTEJGTFVTSCBpcyBub3Qgc2V0
CkNPTkZJR19IQVZFX01NSU9UUkFDRV9TVVBQT1JUPXkKIyBDT05GSUdfWDg2X0RFQ09ERVJfU0VM
RlRFU1QgaXMgbm90IHNldApDT05GSUdfSU9fREVMQVlfMFg4MD15CiMgQ09ORklHX0lPX0RFTEFZ
XzBYRUQgaXMgbm90IHNldAojIENPTkZJR19JT19ERUxBWV9VREVMQVkgaXMgbm90IHNldAojIENP
TkZJR19JT19ERUxBWV9OT05FIGlzIG5vdCBzZXQKQ09ORklHX0RFQlVHX0JPT1RfUEFSQU1TPXkK
IyBDT05GSUdfQ1BBX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX0RFQlVHX0VOVFJZPXkKIyBDT05G
SUdfREVCVUdfTk1JX1NFTEZURVNUIGlzIG5vdCBzZXQKQ09ORklHX1g4Nl9ERUJVR19GUFU9eQoj
IENPTkZJR19QVU5JVF9BVE9NX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX1VOV0lOREVSX09SQz15
CiMgQ09ORklHX1VOV0lOREVSX0ZSQU1FX1BPSU5URVIgaXMgbm90IHNldAojIGVuZCBvZiB4ODYg
RGVidWdnaW5nCgojCiMgS2VybmVsIFRlc3RpbmcgYW5kIENvdmVyYWdlCiMKIyBDT05GSUdfS1VO
SVQgaXMgbm90IHNldAojIENPTkZJR19OT1RJRklFUl9FUlJPUl9JTkpFQ1RJT04gaXMgbm90IHNl
dApDT05GSUdfRkFVTFRfSU5KRUNUSU9OPXkKQ09ORklHX0ZBSUxTTEFCPXkKQ09ORklHX0ZBSUxf
UEFHRV9BTExPQz15CkNPTkZJR19GQVVMVF9JTkpFQ1RJT05fVVNFUkNPUFk9eQpDT05GSUdfRkFJ
TF9NQUtFX1JFUVVFU1Q9eQpDT05GSUdfRkFJTF9JT19USU1FT1VUPXkKQ09ORklHX0ZBSUxfRlVU
RVg9eQpDT05GSUdfRkFVTFRfSU5KRUNUSU9OX0RFQlVHX0ZTPXkKIyBDT05GSUdfRkFJTF9NTUNf
UkVRVUVTVCBpcyBub3Qgc2V0CkNPTkZJR19GQVVMVF9JTkpFQ1RJT05fQ09ORklHRlM9eQojIENP
TkZJR19GQVVMVF9JTkpFQ1RJT05fU1RBQ0tUUkFDRV9GSUxURVIgaXMgbm90IHNldApDT05GSUdf
QVJDSF9IQVNfS0NPVj15CkNPTkZJR19DQ19IQVNfU0FOQ09WX1RSQUNFX1BDPXkKQ09ORklHX0tD
T1Y9eQpDT05GSUdfS0NPVl9FTkFCTEVfQ09NUEFSSVNPTlM9eQpDT05GSUdfS0NPVl9JTlNUUlVN
RU5UX0FMTD15CkNPTkZJR19LQ09WX0lSUV9BUkVBX1NJWkU9MHg0MDAwMApDT05GSUdfUlVOVElN
RV9URVNUSU5HX01FTlU9eQojIENPTkZJR19URVNUX0RIUlkgaXMgbm90IHNldAojIENPTkZJR19M
S0RUTSBpcyBub3Qgc2V0CiMgQ09ORklHX1RFU1RfTUlOX0hFQVAgaXMgbm90IHNldAojIENPTkZJ
R19URVNUX0RJVjY0IGlzIG5vdCBzZXQKIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBu
b3Qgc2V0CiMgQ09ORklHX1RFU1RfUkVGX1RSQUNLRVIgaXMgbm90IHNldAojIENPTkZJR19SQlRS
RUVfVEVTVCBpcyBub3Qgc2V0CiMgQ09ORklHX1JFRURfU09MT01PTl9URVNUIGlzIG5vdCBzZXQK
IyBDT05GSUdfSU5URVJWQUxfVFJFRV9URVNUIGlzIG5vdCBzZXQKIyBDT05GSUdfUEVSQ1BVX1RF
U1QgaXMgbm90IHNldAojIENPTkZJR19BVE9NSUM2NF9TRUxGVEVTVCBpcyBub3Qgc2V0CiMgQ09O
RklHX1RFU1RfSEVYRFVNUCBpcyBub3Qgc2V0CiMgQ09ORklHX1NUUklOR19TRUxGVEVTVCBpcyBu
b3Qgc2V0CiMgQ09ORklHX1RFU1RfU1RSSU5HX0hFTFBFUlMgaXMgbm90IHNldAojIENPTkZJR19U
RVNUX0tTVFJUT1ggaXMgbm90IHNldAojIENPTkZJR19URVNUX1BSSU5URiBpcyBub3Qgc2V0CiMg
Q09ORklHX1RFU1RfU0NBTkYgaXMgbm90IHNldAojIENPTkZJR19URVNUX0JJVE1BUCBpcyBub3Qg
c2V0CiMgQ09ORklHX1RFU1RfVVVJRCBpcyBub3Qgc2V0CiMgQ09ORklHX1RFU1RfWEFSUkFZIGlz
IG5vdCBzZXQKIyBDT05GSUdfVEVTVF9NQVBMRV9UUkVFIGlzIG5vdCBzZXQKIyBDT05GSUdfVEVT
VF9SSEFTSFRBQkxFIGlzIG5vdCBzZXQKIyBDT05GSUdfVEVTVF9JREEgaXMgbm90IHNldAojIENP
TkZJR19URVNUX0xLTSBpcyBub3Qgc2V0CiMgQ09ORklHX1RFU1RfQklUT1BTIGlzIG5vdCBzZXQK
IyBDT05GSUdfVEVTVF9WTUFMTE9DIGlzIG5vdCBzZXQKIyBDT05GSUdfVEVTVF9VU0VSX0NPUFkg
aXMgbm90IHNldAojIENPTkZJR19URVNUX0JQRiBpcyBub3Qgc2V0CiMgQ09ORklHX1RFU1RfQkxB
Q0tIT0xFX0RFViBpcyBub3Qgc2V0CiMgQ09ORklHX0ZJTkRfQklUX0JFTkNITUFSSyBpcyBub3Qg
c2V0CiMgQ09ORklHX1RFU1RfRklSTVdBUkUgaXMgbm90IHNldAojIENPTkZJR19URVNUX1NZU0NU
TCBpcyBub3Qgc2V0CiMgQ09ORklHX1RFU1RfVURFTEFZIGlzIG5vdCBzZXQKIyBDT05GSUdfVEVT
VF9TVEFUSUNfS0VZUyBpcyBub3Qgc2V0CiMgQ09ORklHX1RFU1RfRFlOQU1JQ19ERUJVRyBpcyBu
b3Qgc2V0CiMgQ09ORklHX1RFU1RfS01PRCBpcyBub3Qgc2V0CiMgQ09ORklHX1RFU1RfREVCVUdf
VklSVFVBTCBpcyBub3Qgc2V0CiMgQ09ORklHX1RFU1RfTUVNQ0FUX1AgaXMgbm90IHNldAojIENP
TkZJR19URVNUX01FTUlOSVQgaXMgbm90IHNldAojIENPTkZJR19URVNUX0ZSRUVfUEFHRVMgaXMg
bm90IHNldAojIENPTkZJR19URVNUX0NMT0NLU09VUkNFX1dBVENIRE9HIGlzIG5vdCBzZXQKIyBD
T05GSUdfVEVTVF9PQkpQT09MIGlzIG5vdCBzZXQKQ09ORklHX0FSQ0hfVVNFX01FTVRFU1Q9eQoj
IENPTkZJR19NRU1URVNUIGlzIG5vdCBzZXQKIyBlbmQgb2YgS2VybmVsIFRlc3RpbmcgYW5kIENv
dmVyYWdlCgojCiMgUnVzdCBoYWNraW5nCiMKIyBlbmQgb2YgUnVzdCBoYWNraW5nCiMgZW5kIG9m
IEtlcm5lbCBoYWNraW5nCg==
--00000000000087137e061bb225b5--
.

From: Ma Ke <make24@iscas.ac.cn>
To: kherbst@redhat.com,
	lyude@redhat.com,
	dakr@redhat.com,
	airlied@gmail.com,
	daniel@ffwll.ch,
	make24@iscas.ac.cn
Cc: dri-devel@lists.freedesktop.org,
	nouveau@lists.freedesktop.org,
	linux-kernel@vger.kernel.org,
	stable@vger.kernel.org
Subject: [PATCH] drm/nouveau/dispnv04: fix null pointer dereference in nv17_tv_get_hd_modes
Date: Tue, 25 Jun 2024 16:10:29 +0800
Message-Id: <20240625081029.2619437-1-make24@iscas.ac.cn>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257833
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.stable
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

In nv17_tv_get_hd_modes(), the return value of drm_mode_duplicate() is
assigned to mode, which will lead to a possible NULL pointer dereference
on failure of drm_mode_duplicate(). The same applies to drm_cvt_mode().
Add a check to avoid null pointer dereference.

Cc: stable@vger.kernel.org
Signed-off-by: Ma Ke <make24@iscas.ac.cn>
---
 drivers/gpu/drm/nouveau/dispnv04/tvnv17.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/gpu/drm/nouveau/dispnv04/tvnv17.c b/drivers/gpu/drm/nouveau/dispnv04/tvnv17.c
index 670c9739e5e1..9c3dc9a5bb46 100644
--- a/drivers/gpu/drm/nouveau/dispnv04/tvnv17.c
+++ b/drivers/gpu/drm/nouveau/dispnv04/tvnv17.c
@@ -258,6 +258,8 @@ static int nv17_tv_get_hd_modes(struct drm_encoder *encoder,
 		if (modes[i].hdisplay == output_mode->hdisplay &&
 		    modes[i].vdisplay == output_mode->vdisplay) {
 			mode = drm_mode_duplicate(encoder->dev, output_mode);
+			if (!mode)
+				continue;
 			mode->type |= DRM_MODE_TYPE_PREFERRED;
 
 		} else {
@@ -265,6 +267,8 @@ static int nv17_tv_get_hd_modes(struct drm_encoder *encoder,
 					    modes[i].vdisplay, 60, false,
 					    (output_mode->flags &
 					     DRM_MODE_FLAG_INTERLACE), false);
+			if (!mode)
+				continue;
 		}
 
 		/* CVT modes are sometimes unsuitable... */
-- 
2.25.1

.

From: Ma Ke <make24@iscas.ac.cn>
To: kherbst@redhat.com,
	lyude@redhat.com,
	dakr@redhat.com,
	airlied@gmail.com,
	daniel@ffwll.ch,
	make24@iscas.ac.cn
Cc: dri-devel@lists.freedesktop.org,
	nouveau@lists.freedesktop.org,
	linux-kernel@vger.kernel.org,
	stable@vger.kernel.org
Subject: [PATCH] drm/nouveau/dispnv04: fix null pointer dereference in nv17_tv_get_ld_modes
Date: Tue, 25 Jun 2024 16:18:28 +0800
Message-Id: <20240625081828.2620794-1-make24@iscas.ac.cn>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257842
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.stable
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

In nv17_tv_get_ld_modes(), the return value of drm_mode_duplicate() is
assigned to mode, which will lead to a possible NULL pointer dereference
on failure of drm_mode_duplicate(). Add a check to avoid npd.

Cc: stable@vger.kernel.org
Signed-off-by: Ma Ke <make24@iscas.ac.cn>
---
 drivers/gpu/drm/nouveau/dispnv04/tvnv17.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/gpu/drm/nouveau/dispnv04/tvnv17.c b/drivers/gpu/drm/nouveau/dispnv04/tvnv17.c
index 670c9739e5e1..4a08e61f3336 100644
--- a/drivers/gpu/drm/nouveau/dispnv04/tvnv17.c
+++ b/drivers/gpu/drm/nouveau/dispnv04/tvnv17.c
@@ -209,6 +209,8 @@ static int nv17_tv_get_ld_modes(struct drm_encoder *encoder,
 		struct drm_display_mode *mode;
 
 		mode = drm_mode_duplicate(encoder->dev, tv_mode);
+		if (!mode)
+			continue;
 
 		mode->clock = tv_norm->tv_enc_mode.vrefresh *
 			mode->htotal / 1000 *
-- 
2.25.1

.

From: echken <chengcheng.luo@smartx.com>
To: pshelar@ovn.org,
	davem@davemloft.net,
	edumazet@google.com,
	kuba@kernel.org,
	pabeni@redhat.com
Cc: netdev@vger.kernel.org,
	dev@openvswitch.org,
	linux-kernel@vger.kernel.org,
	echken <chengcheng.luo@smartx.com>
Subject: [PATCH 1/2] Add GSO UDP Offloading feature to OVS Internal Port
Date: Tue, 25 Jun 2024 08:29:24 +0000
Message-Id: <20240625082924.775877-1-chengcheng.luo@smartx.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257853 org.kernel.vger.netdev:354948
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.netdev
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

The OVS internal port does not support UDP fragmentation offloading,
resulting in large packets sent through the OVS internal port to OVS
being prematurely fragmented. This increases the total number of packets
processed in the path from the vport to the OVS bridge output port,
affecting transmission efficiency.

Signed-off-by: echken <chengcheng.luo@smartx.com>
---
 net/openvswitch/vport-internal_dev.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/net/openvswitch/vport-internal_dev.c b/net/openvswitch/vport-internal_dev.c
index 74c88a6baa43..c5a72c4dc6fd 100644
--- a/net/openvswitch/vport-internal_dev.c
+++ b/net/openvswitch/vport-internal_dev.c
@@ -110,7 +110,8 @@ static void do_setup(struct net_device *netdev)
 
 	netdev->features = NETIF_F_LLTX | NETIF_F_SG | NETIF_F_FRAGLIST |
 			   NETIF_F_HIGHDMA | NETIF_F_HW_CSUM |
-			   NETIF_F_GSO_SOFTWARE | NETIF_F_GSO_ENCAP_ALL;
+			   NETIF_F_GSO_SOFTWARE | NETIF_F_GSO_ENCAP_ALL |
+			   NETIF_F_GSO_UDP | NETIF_F_GSO_UDP_L4;
 
 	netdev->vlan_features = netdev->features;
 	netdev->hw_enc_features = netdev->features;
-- 
2.34.1

.

From: Alain Volmat <alain.volmat@foss.st.com>
To: Alain Volmat <alain.volmat@foss.st.com>,
        Sakari Ailus
	<sakari.ailus@linux.intel.com>,
        Mauro Carvalho Chehab <mchehab@kernel.org>
CC: <linux-media@vger.kernel.org>, <linux-kernel@vger.kernel.org>
Subject: [PATCH 0/2] media: i2c: gc2145: CCI_REG16_LE usage & RAW8
Date: Tue, 25 Jun 2024 10:29:53 +0200
Message-ID: <20240625082956.2556293-1-alain.volmat@foss.st.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257856
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-media
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Add RAW8 format support within the driver and use CCI_REG16_LE macro
on 16 bit registers of P3(CSI) area in order to avoid having to
access them in 8 bit.

Tested on STM32MP135F-DK board.

Alain Volmat (2):
  media: i2c: gc2145: addition of RAW8 formats support
  media: i2c: gc2145: use CCI_REG16_LE for little-endian registers

 drivers/media/i2c/gc2145.c | 90 ++++++++++++++++++++++++++++++--------
 1 file changed, 72 insertions(+), 18 deletions(-)

-- 
2.25.1

.

From: Alexey Makhalov <alexey.makhalov@broadcom.com>
To: linux-kernel@vger.kernel.org,
	virtualization@lists.linux.dev,
	bp@alien8.de,
	hpa@zytor.com,
	dave.hansen@linux.intel.com,
	mingo@redhat.com,
	tglx@linutronix.de
Cc: x86@kernel.org,
	ajay.kaher@broadcom.com,
	bcm-kernel-feedback-list@broadcom.com,
	Alexey Makhalov <alexey.makhalov@broadcom.com>,
	Alex James <alex.james@broadcom.com>
Subject: [PATCH] x86/vmware: fix panic in vmware_hypercall_slow()
Date: Tue, 25 Jun 2024 01:33:48 -0700
Message-Id: <20240625083348.2299-1-alexey.makhalov@broadcom.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257865
Newsgroups: org.kernel.vger.linux-kernel,dev.linux.lists.virtualization
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Caller of vmware_hypercall_slow() can pass NULL into *out1,
*out2,... *out5. It will lead to a NULL pointer dereference.

Check a pointer for NULL before assigning a value.

Fixes: 	666cbb562d05d ("x86/vmware: Introduce VMware hypercall API")
Co-developed-by: Alex James <alex.james@broadcom.com>
Signed-off-by: Alex James <alex.james@broadcom.com>
Signed-off-by: Alexey Makhalov <alexey.makhalov@broadcom.com>
---
 arch/x86/kernel/cpu/vmware.c | 26 +++++++++++++++++++-------
 1 file changed, 19 insertions(+), 7 deletions(-)

diff --git a/arch/x86/kernel/cpu/vmware.c b/arch/x86/kernel/cpu/vmware.c
index 55903563afd3..16da970499f2 100644
--- a/arch/x86/kernel/cpu/vmware.c
+++ b/arch/x86/kernel/cpu/vmware.c
@@ -72,13 +72,13 @@ unsigned long vmware_hypercall_slow(unsigned long cmd,
 				    u32 *out1, u32 *out2, u32 *out3,
 				    u32 *out4, u32 *out5)
 {
-	unsigned long out0;
+	unsigned long out0, rbx, rcx, rdx, rsi, rdi;
 
 	switch (vmware_hypercall_mode) {
 	case CPUID_VMWARE_FEATURES_ECX_VMCALL:
 		asm_inline volatile ("vmcall"
-				: "=a" (out0), "=b" (*out1), "=c" (*out2),
-				"=d" (*out3), "=S" (*out4), "=D" (*out5)
+				: "=a" (out0), "=b" (rbx), "=c" (rcx),
+				"=d" (rdx), "=S" (rsi), "=D" (rdi)
 				: "a" (VMWARE_HYPERVISOR_MAGIC),
 				"b" (in1),
 				"c" (cmd),
@@ -89,8 +89,8 @@ unsigned long vmware_hypercall_slow(unsigned long cmd,
 		break;
 	case CPUID_VMWARE_FEATURES_ECX_VMMCALL:
 		asm_inline volatile ("vmmcall"
-				: "=a" (out0), "=b" (*out1), "=c" (*out2),
-				"=d" (*out3), "=S" (*out4), "=D" (*out5)
+				: "=a" (out0), "=b" (rbx), "=c" (rcx),
+				"=d" (rdx), "=S" (rsi), "=D" (rdi)
 				: "a" (VMWARE_HYPERVISOR_MAGIC),
 				"b" (in1),
 				"c" (cmd),
@@ -101,8 +101,8 @@ unsigned long vmware_hypercall_slow(unsigned long cmd,
 		break;
 	default:
 		asm_inline volatile ("movw %[port], %%dx; inl (%%dx), %%eax"
-				: "=a" (out0), "=b" (*out1), "=c" (*out2),
-				"=d" (*out3), "=S" (*out4), "=D" (*out5)
+				: "=a" (out0), "=b" (rbx), "=c" (rcx),
+				"=d" (rdx), "=S" (rsi), "=D" (rdi)
 				: [port] "i" (VMWARE_HYPERVISOR_PORT),
 				"a" (VMWARE_HYPERVISOR_MAGIC),
 				"b" (in1),
@@ -113,6 +113,18 @@ unsigned long vmware_hypercall_slow(unsigned long cmd,
 				: "cc", "memory");
 		break;
 	}
+
+	if (out1)
+		*out1 = rbx;
+	if (out2)
+		*out2 = rcx;
+	if (out3)
+		*out3 = rdx;
+	if (out4)
+		*out4 = rsi;
+	if (out5)
+		*out5 = rdi;
+
 	return out0;
 }
 
-- 
2.39.4

.

From: Luca Ceresoli <luca.ceresoli@bootlin.com>
Date: Tue, 25 Jun 2024 10:34:38 +0200
Subject: [PATCH v2] Revert "leds: led-core: Fix refcount leak in
 of_led_get()"
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
Message-Id: <20240625-led-class-device-leak-v2-1-75fdccf47421@bootlin.com>
To: Pavel Machek <pavel@ucw.cz>, Lee Jones <lee@kernel.org>, 
 Miaoqian Lin <linmq006@gmail.com>
Cc: Hans de Goede <hdegoede@redhat.com>, 
 =?utf-8?q?Herv=C3=A9_Codina?= <herve.codina@bootlin.com>, 
 Thomas Petazzoni <thomas.petazzoni@bootlin.com>, linux-leds@vger.kernel.org, 
 linux-kernel@vger.kernel.org, Luca Ceresoli <luca.ceresoli@bootlin.com>
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257866
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-leds
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

This reverts commit da1afe8e6099980fe1e2fd7436dca284af9d3f29.

Commit 699a8c7c4bd3 ("leds: Add of_led_get() and led_put()"), introduced in
5.5, added of_led_get() and led_put() but missed a put_device() in
led_put(), thus creating a leak in case the consumer device is removed.

Arguably device removal was not very popular, so this went apparently
unnoticed until 2022. In January 2023 two different patches got merged to
fix the same bug:

 - commit da1afe8e6099 ("leds: led-core: Fix refcount leak in of_led_get()")
 - commit 445110941eb9 ("leds: led-class: Add missing put_device() to led_put()")

They fix the bug in two different ways, which creates no patch conflicts,
and both were merged in v6.2. The result is that now there is one more
put_device() than get_device()s, instead of one less.

Arguably device removal is not very popular yet, so this apparently hasn't
been noticed as well up to now. But it blew up here while I'm working with
device tree overlay insertion and removal. The symptom is an apparently
unrelated list of oopses on device removal, with reasons:

  kernfs: can not remove 'uevent', no directory
  kernfs: can not remove 'brightness', no directory
  kernfs: can not remove 'max_brightness', no directory
  ...

Here sysfs fails removing attribute files, which is because the device name
changed and so the sysfs path. This is because the device name string got
corrupted, which is because it got freed too early and its memory reused.

Different symptoms could appear in different use cases.

Fix by removing one of the two fixes.

The choice was to remove commit da1afe8e6099 because:

 * it is calling put_device() inside of_led_get() just after getting the
   device, thus it is basically not refcounting the LED device at all
   during its entire lifetime
 * it does not add a corresponding put_device() in led_get(), so it fixes
   only the OF case

The other fix (445110941eb9) is adding the put_device() in led_put() so it
covers the entire lifetime, and it works even in the non-DT case.

Fixes: da1afe8e6099 ("leds: led-core: Fix refcount leak in of_led_get()")
Co-developed-by: HervÃ© Codina <herve.codina@bootlin.com>
Signed-off-by: HervÃ© Codina <herve.codina@bootlin.com>
Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
---
Changes in v2:
- Add missing SoB line for co-developer
- Link to v1: https://lore.kernel.org/r/20240625-led-class-device-leak-v1-1-9eb4436310c2@bootlin.com
---

Changed in v2:
 - add missing SoM line for HervÃ©
---
 drivers/leds/led-class.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/drivers/leds/led-class.c b/drivers/leds/led-class.c
index 24fcff682b24..b23d2138cd83 100644
--- a/drivers/leds/led-class.c
+++ b/drivers/leds/led-class.c
@@ -258,7 +258,6 @@ struct led_classdev *of_led_get(struct device_node *np, int index)
 
 	led_dev = class_find_device_by_of_node(&leds_class, led_node);
 	of_node_put(led_node);
-	put_device(led_dev);
 
 	return led_module_get(led_dev);
 }

---
base-commit: 28ef3e64d0a22f6a29a1ea489293715a29623e52
change-id: 20240625-led-class-device-leak-6637a2821678

Best regards,
-- 
Luca Ceresoli <luca.ceresoli@bootlin.com>

.

From: Jason-JH.Lin <jason-jh.lin@mediatek.com>
To: Jassi Brar <jassisinghbrar@gmail.com>, AngeloGioacchino Del Regno
	<angelogioacchino.delregno@collabora.com>, Chun-Kuang Hu
	<chunkuang.hu@kernel.org>
CC: Matthias Brugger <matthias.bgg@gmail.com>, <linux-kernel@vger.kernel.org>,
	<linux-arm-kernel@lists.infradead.org>, <linux-mediatek@lists.infradead.org>,
	Jason-ch Chen <jason-ch.chen@mediatek.com>, "Jason-JH . Lin"
	<jason-jh.lin@mediatek.com>, Singo Chang <singo.chang@mediatek.com>, Nancy
 Lin <nancy.lin@mediatek.com>,
	<Project_Global_Chrome_Upstream_Group@mediatek.com>, Hsiao Chien Sung
	<shawn.sung@mediatek.com>
Subject: [PATCH] soc: mtk-cmdq: Add cmdq_pkt_logic_command to support math operation
Date: Tue, 25 Jun 2024 16:39:57 +0800
Message-ID: <20240625083957.3540-1-jason-jh.lin@mediatek.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Type: text/plain
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257869
Newsgroups: org.kernel.vger.linux-kernel,org.infradead.lists.linux-arm-kernel,org.infradead.lists.linux-mediatek
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Add cmdq_pkt_logic_command to support math operation.

cmdq_pkt_logic_command can append logic command to the CMDQ packet,
ask GCE to execute a arithmetic calculate instruction,
such as add, subtract, multiply, AND, OR and NOT, etc.

Note that all arithmetic instructions are unsigned calculations.
If there are any overflows, GCE will sent the invalid IRQ to notify
CMDQ driver.

Signed-off-by: Jason-JH.Lin <jason-jh.lin@mediatek.com>
Signed-off-by: Hsiao Chien Sung <shawn.sung@mediatek.com>
---
 drivers/soc/mediatek/mtk-cmdq-helper.c | 34 +++++++++++++++++++++
 include/linux/soc/mediatek/mtk-cmdq.h  | 42 ++++++++++++++++++++++++++
 2 files changed, 76 insertions(+)

diff --git a/drivers/soc/mediatek/mtk-cmdq-helper.c b/drivers/soc/mediatek/mtk-cmdq-helper.c
index 046522664dc1..f3cd15387f2d 100644
--- a/drivers/soc/mediatek/mtk-cmdq-helper.c
+++ b/drivers/soc/mediatek/mtk-cmdq-helper.c
@@ -15,6 +15,7 @@
 /* dedicate the last GPR_R15 to assign the register address to be poll */
 #define CMDQ_POLL_ADDR_GPR	(15)
 #define CMDQ_EOC_IRQ_EN		BIT(0)
+#define CMDQ_IMMEDIATE_VALUE	0
 #define CMDQ_REG_TYPE		1
 #define CMDQ_JUMP_RELATIVE	0
 #define CMDQ_JUMP_ABSOLUTE	1
@@ -45,6 +46,16 @@ struct cmdq_instruction {
 	u8 op;
 };
 
+static inline u8 cmdq_operand_get_type(struct cmdq_operand *op)
+{
+	return op->reg ? CMDQ_REG_TYPE : CMDQ_IMMEDIATE_VALUE;
+}
+
+static inline u16 cmdq_operand_get_idx_value(struct cmdq_operand *op)
+{
+	return op->reg ? op->idx : op->value;
+}
+
 int cmdq_dev_get_client_reg(struct device *dev,
 			    struct cmdq_client_reg *client_reg, int idx)
 {
@@ -461,6 +472,29 @@ int cmdq_pkt_poll_addr(struct cmdq_pkt *pkt, dma_addr_t addr, u32 value, u32 mas
 }
 EXPORT_SYMBOL(cmdq_pkt_poll_addr);
 
+int cmdq_pkt_logic_command(struct cmdq_pkt *pkt, u16 result_reg_idx,
+			   struct cmdq_operand *left_operand,
+			   enum cmdq_logic_op s_op,
+			   struct cmdq_operand *right_operand)
+{
+	struct cmdq_instruction inst = { {0} };
+
+	if (!left_operand || !right_operand || s_op >= CMDQ_LOGIC_MAX)
+		return -EINVAL;
+
+	inst.op = CMDQ_CODE_LOGIC;
+	inst.dst_t = CMDQ_REG_TYPE;
+	inst.src_t = cmdq_operand_get_type(left_operand);
+	inst.arg_c_t = cmdq_operand_get_type(right_operand);
+	inst.sop = s_op;
+	inst.reg_dst = result_reg_idx;
+	inst.src_reg = cmdq_operand_get_idx_value(left_operand);
+	inst.arg_c = cmdq_operand_get_idx_value(right_operand);
+
+	return cmdq_pkt_append_command(pkt, inst);
+}
+EXPORT_SYMBOL(cmdq_pkt_logic_command);
+
 int cmdq_pkt_assign(struct cmdq_pkt *pkt, u16 reg_idx, u32 value)
 {
 	struct cmdq_instruction inst = {};
diff --git a/include/linux/soc/mediatek/mtk-cmdq.h b/include/linux/soc/mediatek/mtk-cmdq.h
index d4a8e34505e6..5bee6f7fc400 100644
--- a/include/linux/soc/mediatek/mtk-cmdq.h
+++ b/include/linux/soc/mediatek/mtk-cmdq.h
@@ -25,6 +25,31 @@
 
 struct cmdq_pkt;
 
+enum cmdq_logic_op {
+	CMDQ_LOGIC_ASSIGN = 0,
+	CMDQ_LOGIC_ADD = 1,
+	CMDQ_LOGIC_SUBTRACT = 2,
+	CMDQ_LOGIC_MULTIPLY = 3,
+	CMDQ_LOGIC_XOR = 8,
+	CMDQ_LOGIC_NOT = 9,
+	CMDQ_LOGIC_OR = 10,
+	CMDQ_LOGIC_AND = 11,
+	CMDQ_LOGIC_LEFT_SHIFT = 12,
+	CMDQ_LOGIC_RIGHT_SHIFT = 13,
+	CMDQ_LOGIC_MAX,
+};
+
+struct cmdq_operand {
+	/* register type */
+	bool reg;
+	union {
+		/* index */
+		u16 idx;
+		/* value */
+		u16 value;
+	};
+};
+
 struct cmdq_client_reg {
 	u8 subsys;
 	u16 offset;
@@ -272,6 +297,23 @@ int cmdq_pkt_poll(struct cmdq_pkt *pkt, u8 subsys,
 int cmdq_pkt_poll_mask(struct cmdq_pkt *pkt, u8 subsys,
 		       u16 offset, u32 value, u32 mask);
 
+/**
+ * cmdq_pkt_logic_command() - Append logic command to the CMDQ packet, ask GCE to
+ *		          execute an instruction that store the result of logic operation
+ *		          with left and right operand into result_reg_idx.
+ * @pkt:		the CMDQ packet
+ * @result_reg_idx:	SPR index that store operation result of left_operand and right_operand
+ * @left_operand:	left operand
+ * @s_op:		the logic operator enum
+ * @right_operand:	right operand
+ *
+ * Return: 0 for success; else the error code is returned
+ */
+int cmdq_pkt_logic_command(struct cmdq_pkt *pkt, u16 result_reg_idx,
+			   struct cmdq_operand *left_operand,
+			   enum cmdq_logic_op s_op,
+			   struct cmdq_operand *right_operand);
+
 /**
  * cmdq_pkt_assign() - Append logic assign command to the CMDQ packet, ask GCE
  *		       to execute an instruction that set a constant value into
-- 
2.18.0

.

Message-ID: <a07d41c9-5236-44ad-8e89-f3be5da90e98@gmail.com>
Date: Tue, 25 Jun 2024 17:56:49 +0900
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Language: en-US
To: "Paul E. McKenney" <paulmck@kernel.org>, Marco Elver <elver@google.com>,
 Andrea Parri <parri.andrea@gmail.com>
Cc: Will Deacon <will@kernel.org>, Peter Zijlstra <peterz@infradead.org>,
 Boqun Feng <boqun.feng@gmail.com>, Nicholas Piggin <npiggin@gmail.com>,
 David Howells <dhowells@redhat.com>, Jade Alglave <j.alglave@ucl.ac.uk>,
 Luc Maranget <luc.maranget@inria.fr>, Daniel Lustig <dlustig@nvidia.com>,
 Joel Fernandes <joel@joelfernandes.org>,
 Alan Stern <stern@rowland.harvard.edu>, linux-kernel@vger.kernel.org,
 linux-arch@vger.kernel.org, Akira Yokosawa <akiyks@gmail.com>
From: Akira Yokosawa <akiyks@gmail.com>
Subject: [PATCH lkmm v2 0/2] tools/memory-model: Add locking.txt and
 glossary.txt to README
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257889
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-arch
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Hi all,

Here is a v2 series with the trailing white space fixed and Acked-by's
from Andrea applied.

Please find v1 at [1] if you need to.

[1]: https://lore.kernel.org/ae2b0f62-a593-4e7c-ab51-06d4e8a21005@gmail.com/

        Thanks, Akira
--
Akira Yokosawa (2):
  tools/memory-model: Add locking.txt and glossary.txt to README
  tools/memory-model: simple.txt: Fix stale reference to
    recipes-pairs.txt

 tools/memory-model/Documentation/README     | 17 +++++++++++++++++
 tools/memory-model/Documentation/simple.txt |  2 +-
 2 files changed, 18 insertions(+), 1 deletion(-)


base-commit: 5bdd17ab5a7259d2da562eab63abab3a6d95adcd
-- 
2.34.1

.

From: Gavin Shan <gshan@redhat.com>
To: linux-mm@kvack.org
Cc: linux-fsdevel@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	david@redhat.com,
	djwong@kernel.org,
	willy@infradead.org,
	akpm@linux-foundation.org,
	hughd@google.com,
	torvalds@linux-foundation.org,
	zhenyzha@redhat.com,
	shan.gavin@gmail.com
Subject: [PATCH 0/4] mm/filemap: Limit page cache size to that supported by xarray
Date: Tue, 25 Jun 2024 19:06:42 +1000
Message-ID: <20240625090646.1194644-1-gshan@redhat.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257901 org.kvack.linux-mm:201277
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-fsdevel,org.kvack.linux-mm
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Currently, xarray can't support arbitrary page cache size. More details
can be found from the WARN_ON() statement in xas_split_alloc(). In our
test whose code is attached below, we hit the WARN_ON() on ARM64 system
where the base page size is 64KB and huge page size is 512MB. The issue
was reported long time ago and some discussions on it can be found here
[1].

[1] https://www.spinics.net/lists/linux-xfs/msg75404.html 

In order to fix the issue, we need to adjust MAX_PAGECACHE_ORDER to one
supported by xarray and avoid PMD-sized page cache if needed. The code
changes are suggested by David Hildenbrand.

PATCH[1] adjusts MAX_PAGECACHE_ORDER to that supported by xarray
PATCH[2-3] avoids PMD-sized page cache in the synchronous readahead path
PATCH[4] avoids PMD-sized page cache for shmem files if needed

Test program
============
# cat test.c
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/syscall.h>
#include <sys/mman.h>

#define TEST_XFS_FILENAME	"/tmp/data"
#define TEST_SHMEM_FILENAME	"/dev/shm/data"
#define TEST_MEM_SIZE		0x20000000

int main(int argc, char **argv)
{
	const char *filename;
	int fd = 0;
	void *buf = (void *)-1, *p;
	int pgsize = getpagesize();
	int ret;

	if (pgsize != 0x10000) {
		fprintf(stderr, "64KB base page size is required\n");
		return -EPERM;
	}

	system("echo force > /sys/kernel/mm/transparent_hugepage/shmem_enabled");
	system("rm -fr /tmp/data");
	system("rm -fr /dev/shm/data");
	system("echo 1 > /proc/sys/vm/drop_caches");

	/* Open xfs or shmem file */
	filename = TEST_XFS_FILENAME;
	if (argc > 1 && !strcmp(argv[1], "shmem"))
		filename = TEST_SHMEM_FILENAME;

	fd = open(filename, O_CREAT | O_RDWR | O_TRUNC);
	if (fd < 0) {
		fprintf(stderr, "Unable to open <%s>\n", filename);
		return -EIO;
	}

	/* Extend file size */
	ret = ftruncate(fd, TEST_MEM_SIZE);
	if (ret) {
		fprintf(stderr, "Error %d to ftruncate()\n", ret);
		goto cleanup;
	}

	/* Create VMA */
	buf = mmap(NULL, TEST_MEM_SIZE,
		   PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
	if (buf == (void *)-1) {
		fprintf(stderr, "Unable to mmap <%s>\n", filename);
		goto cleanup;
	}

	fprintf(stdout, "mapped buffer at 0x%p\n", buf);
	ret = madvise(buf, TEST_MEM_SIZE, MADV_HUGEPAGE);
        if (ret) {
		fprintf(stderr, "Unable to madvise(MADV_HUGEPAGE)\n");
		goto cleanup;
	}

	/* Populate VMA */
	ret = madvise(buf, TEST_MEM_SIZE, MADV_POPULATE_WRITE);
	if (ret) {
		fprintf(stderr, "Error %d to madvise(MADV_POPULATE_WRITE)\n", ret);
		goto cleanup;
	}

	/* Punch the file to enforce xarray split */
	ret = fallocate(fd, FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE,
        		TEST_MEM_SIZE - pgsize, pgsize);
	if (ret)
		fprintf(stderr, "Error %d to fallocate()\n", ret);

cleanup:
	if (buf != (void *)-1)
		munmap(buf, TEST_MEM_SIZE);
	if (fd > 0)
		close(fd);

	return 0;
}

# gcc test.c -o test
# cat /proc/1/smaps | grep KernelPageSize | head -n 1
KernelPageSize:       64 kB
# ./test shmem
   :
------------[ cut here ]------------
WARNING: CPU: 17 PID: 5253 at lib/xarray.c:1025 xas_split_alloc+0xf8/0x128
Modules linked in: nft_fib_inet nft_fib_ipv4 nft_fib_ipv6 nft_fib  \
nft_reject_inet nf_reject_ipv4 nf_reject_ipv6 nft_reject nft_ct    \
nft_chain_nat nf_nat nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4    \
ip_set nf_tables rfkill nfnetlink vfat fat virtio_balloon          \
drm fuse xfs libcrc32c crct10dif_ce ghash_ce sha2_ce sha256_arm64  \
virtio_net sha1_ce net_failover failover virtio_console virtio_blk \
dimlib virtio_mmio
CPU: 17 PID: 5253 Comm: test Kdump: loaded Tainted: G W 6.10.0-rc5-gavin+ #12
Hardware name: QEMU KVM Virtual Machine, BIOS edk2-20240524-1.el9 05/24/2024
pstate: 83400005 (Nzcv daif +PAN -UAO +TCO +DIT -SSBS BTYPE=--)
pc : xas_split_alloc+0xf8/0x128
lr : split_huge_page_to_list_to_order+0x1c4/0x720
sp : ffff80008a92f5b0
x29: ffff80008a92f5b0 x28: ffff80008a92f610 x27: ffff80008a92f728
x26: 0000000000000cc0 x25: 000000000000000d x24: ffff0000cf00c858
x23: ffff80008a92f610 x22: ffffffdfc0600000 x21: 0000000000000000
x20: 0000000000000000 x19: ffffffdfc0600000 x18: 0000000000000000
x17: 0000000000000000 x16: 0000018000000000 x15: 3374004000000000
x14: 0000e00000000000 x13: 0000000000002000 x12: 0000000000000020
x11: 3374000000000000 x10: 3374e1c0ffff6000 x9 : ffffb463a84c681c
x8 : 0000000000000003 x7 : 0000000000000000 x6 : ffff00011c976ce0
x5 : ffffb463aa47e378 x4 : 0000000000000000 x3 : 0000000000000cc0
x2 : 000000000000000d x1 : 000000000000000c x0 : 0000000000000000
Call trace:
 xas_split_alloc+0xf8/0x128
 split_huge_page_to_list_to_order+0x1c4/0x720
 truncate_inode_partial_folio+0xdc/0x160
 shmem_undo_range+0x2bc/0x6a8
 shmem_fallocate+0x134/0x430
 vfs_fallocate+0x124/0x2e8
 ksys_fallocate+0x4c/0xa0
 __arm64_sys_fallocate+0x24/0x38
 invoke_syscall.constprop.0+0x7c/0xd8
 do_el0_svc+0xb4/0xd0
 el0_svc+0x44/0x1d8
 el0t_64_sync_handler+0x134/0x150
 el0t_64_sync+0x17c/0x180

Gavin Shan (4):
  mm/filemap: Make MAX_PAGECACHE_ORDER acceptable to xarray
  mm/filemap: Skip to allocate PMD-sized folios if needed
  mm/readahead: Limit page cache size in page_cache_ra_order()
  mm/shmem: Disable PMD-sized page cache if needed

 include/linux/pagemap.h | 11 +++++++++--
 mm/filemap.c            |  2 +-
 mm/readahead.c          |  8 ++++----
 mm/shmem.c              | 15 +++++++++++++--
 4 files changed, 27 insertions(+), 9 deletions(-)

-- 
2.45.1

.

Date: Tue, 25 Jun 2024 11:07:34 +0200
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
To: Thomas Gleixner <tglx@linutronix.de>
Cc: LKML <linux-kernel@vger.kernel.org>, linux-rt-users@vger.kernel.org,
	Steven Rostedt <rostedt@goodmis.org>
Subject: [ANNOUNCE] v6.10-rc5-rt9
Message-ID: <20240625090734.F2QP6hPW@linutronix.de>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257906
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-rt-users
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Dear RT folks!

I'm pleased to announce the v6.10-rc5-rt9 patch set. 

Changes since v6.10-rc5-rt8:

  - Update the net/BH series to version nine that has been posted.

  - Update the zram patches based on feedback from upstream.

  - There can be warning about a softlocked CPU if there is a lot of
    output via printk() and printing thread therefore prints for a long
    time. This requires a non-preemptible kernel. Reported by Derek
    Barbosa.

  - Integrated Frederick's perf series. The original series to fix "perf
    test sigtrap" has been rebased on top of it and an updated based on
    Frederick's review. It has been posted v4.

Known issues
    None.

The delta patch against v6.10-rc5-rt8 is appended below and can be found here:
 
     https://cdn.kernel.org/pub/linux/kernel/projects/rt/6.10/incr/patch-6.10-rc5-rt8-rt9.patch.xz

You can get this release via the git tree at:

    https://git.kernel.org/pub/scm/linux/kernel/git/rt/linux-rt-devel.git v6.10-rc5-rt9

The RT patch against v6.10-rc5 can be found here:

    https://cdn.kernel.org/pub/linux/kernel/projects/rt/6.10/older/patch-6.10-rc5-rt9.patch.xz

The split quilt queue is available at:

    https://cdn.kernel.org/pub/linux/kernel/projects/rt/6.10/older/patches-6.10-rc5-rt9.tar.xz

Sebastian

diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c
index aab5fb3b1aba6..a35d4bd2e60ef 100644
--- a/drivers/block/zram/zram_drv.c
+++ b/drivers/block/zram/zram_drv.c
@@ -57,7 +57,6 @@ static void zram_free_page(struct zram *zram, size_t index);
 static int zram_read_page(struct zram *zram, struct page *page, u32 index,
 			  struct bio *parent);
 
-#ifdef CONFIG_PREEMPT_RT
 static void zram_meta_init_table_locks(struct zram *zram, size_t num_pages)
 {
 	size_t index;
@@ -68,46 +67,19 @@ static void zram_meta_init_table_locks(struct zram *zram, size_t num_pages)
 
 static int zram_slot_trylock(struct zram *zram, u32 index)
 {
-	int ret;
-
-	ret = spin_trylock(&zram->table[index].lock);
-	if (ret)
-		__set_bit(ZRAM_LOCK, &zram->table[index].flags);
-	return ret;
+	return spin_trylock(&zram->table[index].lock);
 }
 
 static void zram_slot_lock(struct zram *zram, u32 index)
 {
 	spin_lock(&zram->table[index].lock);
-	__set_bit(ZRAM_LOCK, &zram->table[index].flags);
 }
 
 static void zram_slot_unlock(struct zram *zram, u32 index)
 {
-	__clear_bit(ZRAM_LOCK, &zram->table[index].flags);
 	spin_unlock(&zram->table[index].lock);
 }
 
-#else
-
-static void zram_meta_init_table_locks(struct zram *zram, size_t num_pages) { }
-
-static int zram_slot_trylock(struct zram *zram, u32 index)
-{
-	return bit_spin_trylock(ZRAM_LOCK, &zram->table[index].flags);
-}
-
-static void zram_slot_lock(struct zram *zram, u32 index)
-{
-	bit_spin_lock(ZRAM_LOCK, &zram->table[index].flags);
-}
-
-static void zram_slot_unlock(struct zram *zram, u32 index)
-{
-	bit_spin_unlock(ZRAM_LOCK, &zram->table[index].flags);
-}
-#endif
-
 static inline bool init_done(struct zram *zram)
 {
 	return zram->disksize;
@@ -1320,7 +1292,7 @@ static void zram_free_page(struct zram *zram, size_t index)
 	zram_set_handle(zram, index, 0);
 	zram_set_obj_size(zram, index, 0);
 	WARN_ON_ONCE(zram->table[index].flags &
-		~(1UL << ZRAM_LOCK | 1UL << ZRAM_UNDER_WB));
+		~(1UL << ZRAM_UNDER_WB));
 }
 
 /*
@@ -2440,9 +2412,10 @@ static void destroy_devices(void)
 
 static int __init zram_init(void)
 {
+	struct zram_table_entry zram_te;
 	int ret;
 
-	BUILD_BUG_ON(__NR_ZRAM_PAGEFLAGS > BITS_PER_LONG);
+	BUILD_BUG_ON(__NR_ZRAM_PAGEFLAGS > sizeof(zram_te.flags) * 8);
 
 	ret = cpuhp_setup_state_multi(CPUHP_ZCOMP_PREPARE, "block/zram:prepare",
 				      zcomp_cpu_up_prepare, zcomp_cpu_dead);
diff --git a/drivers/block/zram/zram_drv.h b/drivers/block/zram/zram_drv.h
index 4e0c7c6d48132..531cefc666682 100644
--- a/drivers/block/zram/zram_drv.h
+++ b/drivers/block/zram/zram_drv.h
@@ -45,9 +45,7 @@
 
 /* Flags for zram pages (table[page_no].flags) */
 enum zram_pageflags {
-	/* zram slot is locked */
-	ZRAM_LOCK = ZRAM_FLAG_SHIFT,
-	ZRAM_SAME,	/* Page consists the same element */
+	ZRAM_SAME = ZRAM_FLAG_SHIFT,	/* Page consists the same element */
 	ZRAM_WB,	/* page is stored on backing_device */
 	ZRAM_UNDER_WB,	/* page is under writeback */
 	ZRAM_HUGE,	/* Incompressible page */
@@ -68,10 +66,8 @@ struct zram_table_entry {
 		unsigned long handle;
 		unsigned long element;
 	};
-	unsigned long flags;
-#ifdef CONFIG_PREEMPT_RT
+	unsigned int flags;
 	spinlock_t lock;
-#endif
 #ifdef CONFIG_ZRAM_TRACK_ENTRY_ACTIME
 	ktime_t ac_time;
 #endif
diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h
index 27e30bf2a1c50..65ece0d5b4b6d 100644
--- a/include/linux/perf_event.h
+++ b/include/linux/perf_event.h
@@ -786,6 +786,7 @@ struct perf_event {
 	struct irq_work			pending_disable_irq;
 	struct callback_head		pending_task;
 	unsigned int			pending_work;
+	struct rcuwait			pending_work_wait;
 
 	atomic_t			event_limit;
 
@@ -970,12 +971,6 @@ struct perf_event_context {
 	local_t				nr_pending;
 };
 
-/*
- * Number of contexts where an event can trigger:
- *	task, softirq, hardirq, nmi.
- */
-#define PERF_NR_CONTEXTS	4
-
 struct perf_cpu_pmu_context {
 	struct perf_event_pmu_context	epc;
 	struct perf_event_pmu_context	*task_epc;
diff --git a/include/linux/sched.h b/include/linux/sched.h
index 34c6169f631eb..c582eb3ed7a6b 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -736,6 +736,12 @@ enum perf_event_task_context {
 	perf_nr_task_contexts,
 };
 
+/*
+ * Number of contexts where an event can trigger:
+ *      task, softirq, hardirq, nmi.
+ */
+#define PERF_NR_CONTEXTS	4
+
 struct wake_q_node {
 	struct wake_q_node *next;
 };
@@ -1260,6 +1266,7 @@ struct task_struct {
 	unsigned int			futex_state;
 #endif
 #ifdef CONFIG_PERF_EVENTS
+	u8				perf_recursion[PERF_NR_CONTEXTS];
 	struct perf_event_context	*perf_event_ctxp;
 	struct mutex			perf_event_mutex;
 	struct list_head		perf_event_list;
diff --git a/include/linux/task_work.h b/include/linux/task_work.h
index 795ef5a684294..26b8a47f41fca 100644
--- a/include/linux/task_work.h
+++ b/include/linux/task_work.h
@@ -30,7 +30,8 @@ int task_work_add(struct task_struct *task, struct callback_head *twork,
 
 struct callback_head *task_work_cancel_match(struct task_struct *task,
 	bool (*match)(struct callback_head *, void *data), void *data);
-struct callback_head *task_work_cancel(struct task_struct *, task_work_func_t);
+struct callback_head *task_work_cancel_func(struct task_struct *, task_work_func_t);
+bool task_work_cancel(struct task_struct *task, struct callback_head *cb);
 void task_work_run(void);
 
 static inline void exit_task_work(struct task_struct *task)
diff --git a/kernel/events/callchain.c b/kernel/events/callchain.c
index 1273be84392cf..ad57944b6c40e 100644
--- a/kernel/events/callchain.c
+++ b/kernel/events/callchain.c
@@ -29,7 +29,7 @@ static inline size_t perf_callchain_entry__sizeof(void)
 				 sysctl_perf_event_max_contexts_per_stack));
 }
 
-static DEFINE_PER_CPU(int, callchain_recursion[PERF_NR_CONTEXTS]);
+static DEFINE_PER_CPU(u8, callchain_recursion[PERF_NR_CONTEXTS]);
 static atomic_t nr_callchain_events;
 static DEFINE_MUTEX(callchain_mutex);
 static struct callchain_cpus_entries *callchain_cpus_entries;
diff --git a/kernel/events/core.c b/kernel/events/core.c
index c51a782374aff..8bba63ea9c686 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -5191,10 +5191,35 @@ static bool exclusive_event_installable(struct perf_event *event,
 static void perf_addr_filters_splice(struct perf_event *event,
 				       struct list_head *head);
 
+static void perf_pending_task_sync(struct perf_event *event)
+{
+	struct callback_head *head = &event->pending_task;
+
+	if (!event->pending_work)
+		return;
+	/*
+	 * If the task is queued to the current task's queue, we
+	 * obviously can't wait for it to complete. Simply cancel it.
+	 */
+	if (task_work_cancel(current, head)) {
+		event->pending_work = 0;
+		local_dec(&event->ctx->nr_pending);
+		return;
+	}
+
+	/*
+	 * All accesses related to the event are within the same RCU section in
+	 * perf_pending_task(). The RCU grace period before the event is freed
+	 * will make sure all those accesses are complete by then.
+	 */
+	rcuwait_wait_event(&event->pending_work_wait, !event->pending_work, TASK_UNINTERRUPTIBLE);
+}
+
 static void _free_event(struct perf_event *event)
 {
 	irq_work_sync(&event->pending_irq);
 	irq_work_sync(&event->pending_disable_irq);
+	perf_pending_task_sync(event);
 
 	unaccount_event(event);
 
@@ -6823,14 +6848,30 @@ static void perf_pending_irq(struct irq_work *entry)
 static void perf_pending_task(struct callback_head *head)
 {
 	struct perf_event *event = container_of(head, struct perf_event, pending_task);
+	int rctx;
+
+	/*
+	 * All accesses to the event must belong to the same implicit RCU read-side
+	 * critical section as the ->pending_work reset. See comment in
+	 * perf_pending_task_sync().
+	 */
+	rcu_read_lock();
+	/*
+	 * If we 'fail' here, that's OK, it means recursion is already disabled
+	 * and we won't recurse 'further'.
+	 */
+	rctx = perf_swevent_get_recursion_context();
 
 	if (event->pending_work) {
 		event->pending_work = 0;
 		perf_sigtrap(event);
 		local_dec(&event->ctx->nr_pending);
+		rcuwait_wake_up(&event->pending_work_wait);
 	}
+	rcu_read_unlock();
 
-	put_event(event);
+	if (rctx >= 0)
+		perf_swevent_put_recursion_context(rctx);
 }
 
 #ifdef CONFIG_GUEST_PERF_EVENTS
@@ -9691,11 +9732,15 @@ static int __perf_event_overflow(struct perf_event *event,
 
 		if (regs)
 			pending_id = hash32_ptr((void *)instruction_pointer(regs)) ?: 1;
-		if (!event->pending_work) {
+
+		if (!event->pending_work &&
+		    !task_work_add(current, &event->pending_task, TWA_RESUME)) {
 			event->pending_work = pending_id;
 			local_inc(&event->ctx->nr_pending);
-			WARN_ON_ONCE(!atomic_long_inc_not_zero(&event->refcount));
-			task_work_add(current, &event->pending_task, TWA_RESUME);
+
+			event->pending_addr = 0;
+			if (valid_sample && (data->sample_flags & PERF_SAMPLE_ADDR))
+				event->pending_addr = data->addr;
 			/*
 			 * The NMI path returns directly to userland. The
 			 * irq_work is raised as a dummy interrupt to ensure
@@ -9704,6 +9749,7 @@ static int __perf_event_overflow(struct perf_event *event,
 			 */
 			if (in_nmi())
 				irq_work_queue(&event->pending_disable_irq);
+
 		} else if (event->attr.exclude_kernel && valid_sample) {
 			/*
 			 * Should not be able to return to user space without
@@ -9719,10 +9765,6 @@ static int __perf_event_overflow(struct perf_event *event,
 			 */
 			WARN_ON_ONCE(event->pending_work != pending_id);
 		}
-
-		event->pending_addr = 0;
-		if (valid_sample && (data->sample_flags & PERF_SAMPLE_ADDR))
-			event->pending_addr = data->addr;
 	}
 
 	READ_ONCE(event->overflow_handler)(event, data, regs);
@@ -9750,11 +9792,7 @@ struct swevent_htable {
 	struct swevent_hlist		*swevent_hlist;
 	struct mutex			hlist_mutex;
 	int				hlist_refcount;
-
-	/* Recursion avoidance in each contexts */
-	int				recursion[PERF_NR_CONTEXTS];
 };
-
 static DEFINE_PER_CPU(struct swevent_htable, swevent_htable);
 
 /*
@@ -9952,17 +9990,13 @@ DEFINE_PER_CPU(struct pt_regs, __perf_regs[4]);
 
 int perf_swevent_get_recursion_context(void)
 {
-	struct swevent_htable *swhash = this_cpu_ptr(&swevent_htable);
-
-	return get_recursion_context(swhash->recursion);
+	return get_recursion_context(current->perf_recursion);
 }
 EXPORT_SYMBOL_GPL(perf_swevent_get_recursion_context);
 
 void perf_swevent_put_recursion_context(int rctx)
 {
-	struct swevent_htable *swhash = this_cpu_ptr(&swevent_htable);
-
-	put_recursion_context(swhash->recursion, rctx);
+	put_recursion_context(current->perf_recursion, rctx);
 }
 
 void ___perf_sw_event(u32 event_id, u64 nr, struct pt_regs *regs, u64 addr)
@@ -11954,6 +11988,7 @@ perf_event_alloc(struct perf_event_attr *attr, int cpu,
 	init_irq_work(&event->pending_irq, perf_pending_irq);
 	event->pending_disable_irq = IRQ_WORK_INIT_HARD(perf_pending_disable);
 	init_task_work(&event->pending_task, perf_pending_task);
+	rcuwait_init(&event->pending_work_wait);
 
 	mutex_init(&event->mmap_mutex);
 	raw_spin_lock_init(&event->addr_filters.lock);
@@ -13065,13 +13100,6 @@ static void sync_child_event(struct perf_event *child_event)
 		     &parent_event->child_total_time_running);
 }
 
-static bool task_work_cb_match(struct callback_head *cb, void *data)
-{
-	struct perf_event *event = container_of(cb, struct perf_event, pending_task);
-
-	return event == data;
-}
-
 static void
 perf_event_exit_event(struct perf_event *event, struct perf_event_context *ctx)
 {
@@ -13111,17 +13139,6 @@ perf_event_exit_event(struct perf_event *event, struct perf_event_context *ctx)
 		 * Kick perf_poll() for is_event_hup();
 		 */
 		perf_event_wakeup(parent_event);
-		/*
-		 * Cancel pending task_work and update counters if it has not
-		 * yet been delivered to userland. free_event() expects the
-		 * reference counter at 1 and keeping the event around until the
-		 * task return to userland will be a unexpected.
-		 */
-		if (event->pending_work &&
-		    task_work_cancel_match(current, task_work_cb_match, event)) {
-			put_event(event);
-			local_dec(&event->ctx->nr_pending);
-		}
 		free_event(event);
 		put_event(parent_event);
 		return;
@@ -13647,6 +13664,7 @@ int perf_event_init_task(struct task_struct *child, u64 clone_flags)
 {
 	int ret;
 
+	memset(child->perf_recursion, 0, sizeof(child->perf_recursion));
 	child->perf_event_ctxp = NULL;
 	mutex_init(&child->perf_event_mutex);
 	INIT_LIST_HEAD(&child->perf_event_list);
diff --git a/kernel/events/internal.h b/kernel/events/internal.h
index 5150d5f84c033..f0daaa6f2a33b 100644
--- a/kernel/events/internal.h
+++ b/kernel/events/internal.h
@@ -208,7 +208,7 @@ arch_perf_out_copy_user(void *dst, const void *src, unsigned long n)
 
 DEFINE_OUTPUT_COPY(__output_copy_user, arch_perf_out_copy_user)
 
-static inline int get_recursion_context(int *recursion)
+static inline int get_recursion_context(u8 *recursion)
 {
 	unsigned char rctx = interrupt_context_level();
 
@@ -221,7 +221,7 @@ static inline int get_recursion_context(int *recursion)
 	return rctx;
 }
 
-static inline void put_recursion_context(int *recursion, int rctx)
+static inline void put_recursion_context(u8 *recursion, unsigned char rctx)
 {
 	barrier();
 	recursion[rctx]--;
diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c
index 71b0fc2d0aeaa..dd53298ef1a5c 100644
--- a/kernel/irq/manage.c
+++ b/kernel/irq/manage.c
@@ -1337,7 +1337,7 @@ static int irq_thread(void *data)
 	 * synchronize_hardirq(). So neither IRQTF_RUNTHREAD nor the
 	 * oneshot mask bit can be set.
 	 */
-	task_work_cancel(current, irq_thread_dtor);
+	task_work_cancel_func(current, irq_thread_dtor);
 	return 0;
 }
 
diff --git a/kernel/printk/nbcon.c b/kernel/printk/nbcon.c
index bb9689f94d302..0813ce88a49c5 100644
--- a/kernel/printk/nbcon.c
+++ b/kernel/printk/nbcon.c
@@ -1119,6 +1119,7 @@ static int nbcon_kthread_func(void *__console)
 		}
 
 		console_srcu_read_unlock(cookie);
+		cond_resched();
 
 	} while (backlog);
 
diff --git a/kernel/task_work.c b/kernel/task_work.c
index 95a7e1b7f1dab..2134ac8057a94 100644
--- a/kernel/task_work.c
+++ b/kernel/task_work.c
@@ -120,9 +120,9 @@ static bool task_work_func_match(struct callback_head *cb, void *data)
 }
 
 /**
- * task_work_cancel - cancel a pending work added by task_work_add()
- * @task: the task which should execute the work
- * @func: identifies the work to remove
+ * task_work_cancel_func - cancel a pending work matching a function added by task_work_add()
+ * @task: the task which should execute the func's work
+ * @func: identifies the func to match with a work to remove
  *
  * Find the last queued pending work with ->func == @func and remove
  * it from queue.
@@ -131,11 +131,35 @@ static bool task_work_func_match(struct callback_head *cb, void *data)
  * The found work or NULL if not found.
  */
 struct callback_head *
-task_work_cancel(struct task_struct *task, task_work_func_t func)
+task_work_cancel_func(struct task_struct *task, task_work_func_t func)
 {
 	return task_work_cancel_match(task, task_work_func_match, func);
 }
 
+static bool task_work_match(struct callback_head *cb, void *data)
+{
+	return cb == data;
+}
+
+/**
+ * task_work_cancel - cancel a pending work added by task_work_add()
+ * @task: the task which should execute the work
+ * @cb: the callback to remove if queued
+ *
+ * Remove a callback from a task's queue if queued.
+ *
+ * RETURNS:
+ * True if the callback was queued and got cancelled, false otherwise.
+ */
+bool task_work_cancel(struct task_struct *task, struct callback_head *cb)
+{
+	struct callback_head *ret;
+
+	ret = task_work_cancel_match(task, task_work_match, cb);
+
+	return ret == cb;
+}
+
 /**
  * task_work_run - execute the works added by task_work_add()
  *
@@ -168,7 +192,7 @@ void task_work_run(void)
 		if (!work)
 			break;
 		/*
-		 * Synchronize with task_work_cancel(). It can not remove
+		 * Synchronize with task_work_cancel_match(). It can not remove
 		 * the first entry == work, cmpxchg(task_works) must fail.
 		 * But it can remove another entry from the ->next list.
 		 */
diff --git a/localversion-rt b/localversion-rt
index 700c857efd9ba..22746d6390a42 100644
--- a/localversion-rt
+++ b/localversion-rt
@@ -1 +1 @@
--rt8
+-rt9
diff --git a/net/core/dev.c b/net/core/dev.c
index 7d59afa862630..bd3cead02b530 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -6339,6 +6339,7 @@ enum {
 static void busy_poll_stop(struct napi_struct *napi, void *have_poll_lock,
 			   unsigned flags, u16 budget)
 {
+	struct bpf_net_context __bpf_net_ctx, *bpf_net_ctx;
 	bool skip_schedule = false;
 	unsigned long timeout;
 	int rc;
@@ -6356,6 +6357,7 @@ static void busy_poll_stop(struct napi_struct *napi, void *have_poll_lock,
 	clear_bit(NAPI_STATE_IN_BUSY_POLL, &napi->state);
 
 	local_bh_disable();
+	bpf_net_ctx = bpf_net_ctx_set(&__bpf_net_ctx);
 
 	if (flags & NAPI_F_PREFER_BUSY_POLL) {
 		napi->defer_hard_irqs_count = READ_ONCE(napi->dev->napi_defer_hard_irqs);
@@ -6378,6 +6380,7 @@ static void busy_poll_stop(struct napi_struct *napi, void *have_poll_lock,
 	netpoll_poll_unlock(have_poll_lock);
 	if (rc == budget)
 		__busy_poll_stop(napi, skip_schedule);
+	bpf_net_ctx_clear(bpf_net_ctx);
 	local_bh_enable();
 }
 
diff --git a/security/keys/keyctl.c b/security/keys/keyctl.c
index 4bc3e9398ee3d..ab927a142f515 100644
--- a/security/keys/keyctl.c
+++ b/security/keys/keyctl.c
@@ -1694,7 +1694,7 @@ long keyctl_session_to_parent(void)
 		goto unlock;
 
 	/* cancel an already pending keyring replacement */
-	oldwork = task_work_cancel(parent, key_change_session_keyring);
+	oldwork = task_work_cancel_func(parent, key_change_session_keyring);
 
 	/* the replacement session keyring is applied just prior to userspace
 	 * restarting */
.

From: Manikandan Muralidharan <manikandan.m@microchip.com>
To: <megi@xff.cz>, <javierm@redhat.com>, <neil.armstrong@linaro.org>,
	<quic_jesszhan@quicinc.com>, <maarten.lankhorst@linux.intel.com>,
	<mripard@kernel.org>, <tzimmermann@suse.de>, <airlied@gmail.com>,
	<daniel@ffwll.ch>, <robh@kernel.org>, <krzk+dt@kernel.org>,
	<conor+dt@kernel.org>, <dri-devel@lists.freedesktop.org>,
	<devicetree@vger.kernel.org>, <linux-kernel@vger.kernel.org>
CC: <manikandan.m@microchip.com>
Subject: [PATCH 0/4] Panel HIMAX support for Microchip's AC40T08A MIPI display
Date: Tue, 25 Jun 2024 14:38:49 +0530
Message-ID: <20240625090853.343176-1-manikandan.m@microchip.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257909
Newsgroups: org.kernel.vger.linux-kernel,org.freedesktop.lists.dri-devel,org.kernel.vger.linux-devicetree
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

This patch series adds panel himax display controller support for the
Microchip's AC40T08A MIPI display.

Manikandan Muralidharan (4):
  dt-bindings: display: himax-hx8394: remove reset-gpio from required
    properties
  drm/panel: himax-hx8394: switch to devm_gpiod_get_optional() for
    reset_gpio
  dt-bindings: display: himax-hx8394: Add Microchip AC40T08A MIPI
    Display panel
  drm/panel: himax-hx8394: Add Support for Microchip AC40T08A MIPI
    Display Panel

 .../bindings/display/panel/himax,hx8394.yaml  |   2 +-
 drivers/gpu/drm/panel/panel-himax-hx8394.c    | 153 +++++++++++++++++-
 2 files changed, 153 insertions(+), 2 deletions(-)

-- 
2.25.1

.

From: Animesh Agarwal <animeshagarwal28@gmail.com>
To: 
Cc: animeshagarwal28@gmail.com,
	Daniel Baluta <daniel.baluta@nxp.com>,
	Liam Girdwood <lgirdwood@gmail.com>,
	Mark Brown <broonie@kernel.org>,
	Rob Herring <robh@kernel.org>,
	Krzysztof Kozlowski <krzk+dt@kernel.org>,
	Conor Dooley <conor+dt@kernel.org>,
	linux-sound@vger.kernel.org,
	devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: [PATCH] ASoC: dt-bindings: realtek,rt5677: Convert to dtschema
Date: Tue, 25 Jun 2024 14:52:09 +0530
Message-ID: <20240625092214.88005-1-animeshagarwal28@gmail.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257921
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-sound
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Convert the RT5677 audio CODEC bindings to DT schema.

Signed-off-by: Animesh Agarwal <animeshagarwal28@gmail.com>
Cc: Daniel Baluta <daniel.baluta@nxp.com>
---
 .../bindings/sound/realtek,rt5677.yaml        | 117 ++++++++++++++++++
 .../devicetree/bindings/sound/rt5677.txt      |  78 ------------
 2 files changed, 117 insertions(+), 78 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/sound/realtek,rt5677.yaml
 delete mode 100644 Documentation/devicetree/bindings/sound/rt5677.txt

diff --git a/Documentation/devicetree/bindings/sound/realtek,rt5677.yaml b/Documentation/devicetree/bindings/sound/realtek,rt5677.yaml
new file mode 100644
index 000000000000..598495dbe7fc
--- /dev/null
+++ b/Documentation/devicetree/bindings/sound/realtek,rt5677.yaml
@@ -0,0 +1,117 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/sound/realtek,rt5677.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: RT5677 audio CODEC
+
+maintainers:
+  - Animesh Agarwal <animeshagarwal28@gmail.com>
+
+description: |
+  This device supports I2C only.
+
+  Pins on the device (for linking into audio routes):
+    * IN1P
+    * IN1N
+    * IN2P
+    * IN2N
+    * MICBIAS1
+    * DMIC1
+    * DMIC2
+    * DMIC3
+    * DMIC4
+    * LOUT1
+    * LOUT2
+    * LOUT3
+
+allOf:
+  - $ref: dai-common.yaml#
+
+properties:
+  compatible:
+    const: realtek,rt5677
+
+  reg:
+    maxItems: 1
+
+  interrupts:
+    maxItems: 1
+
+  gpio-controller: true
+
+  '#gpio-cells':
+    const: 2
+
+  realtek,pow-ldo2-gpio:
+    maxItems: 1
+    description: CODEC's POW_LDO2 pin.
+
+  realtek,reset-gpio:
+    maxItems: 1
+    description: CODEC's RESET pin. Active low.
+
+  realtek,gpio-config:
+    description: |
+      Array of six 8bit elements that configures GPIO.
+      0 - floating (reset value)
+      1 - pull down
+      2 - pull up
+    $ref: /schemas/types.yaml#/definitions/uint32-array
+    minItems: 6
+    maxItems: 6
+    items:
+      maximum: 2
+
+patternProperties:
+  "^realtek,in[1-2]-differential$":
+    type: boolean
+    description: Indicate MIC1/2 input are differential, rather than
+      single-ended.
+
+  "^realtek,lout[1-3]-differential$":
+    type: boolean
+    description: Indicate LOUT1/2/3 outputs are differential, rather than
+      single-ended.
+
+  "^realtek,jd[1-3]-gpio$":
+    $ref: /schemas/types.yaml#/definitions/uint32
+    enum:
+      - 0 # OFF
+      - 1 # GPIO1 for jd1 and GPIO4 for jd2.
+      - 2 # GPIO2 for jd1 and GPIO5 for jd2.
+      - 3 # GPIO3 for jd1 and GPIO6 for jd2.
+    description: Configures GPIO Mic Jack detection 1, 2 and 3.
+
+required:
+  - compatible
+  - reg
+  - interrupts
+  - gpio-controller
+  - '#gpio-cells'
+
+unevaluatedProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/gpio/gpio.h>
+    #include <dt-bindings/interrupt-controller/irq.h>
+
+    i2c {
+        #address-cells = <1>;
+        #size-cells = <0>;
+
+        codec@2c {
+            compatible = "realtek,rt5677";
+            reg = <0x2c>;
+            interrupt-parent = <&gpio>;
+            interrupts = <3 IRQ_TYPE_LEVEL_HIGH>;
+            gpio-controller;
+            #gpio-cells = <2>;
+            realtek,pow-ldo2-gpio = <&gpio 3 GPIO_ACTIVE_HIGH>;
+            realtek,reset-gpio = <&gpio 3 GPIO_ACTIVE_LOW>;
+            realtek,in1-differential;
+            realtek,gpio-config = <0 0 0 0 0 2>;
+        };
+    };
diff --git a/Documentation/devicetree/bindings/sound/rt5677.txt b/Documentation/devicetree/bindings/sound/rt5677.txt
deleted file mode 100644
index da2430099181..000000000000
--- a/Documentation/devicetree/bindings/sound/rt5677.txt
+++ /dev/null
@@ -1,78 +0,0 @@
-RT5677 audio CODEC
-
-This device supports I2C only.
-
-Required properties:
-
-- compatible : "realtek,rt5677".
-
-- reg : The I2C address of the device.
-
-- interrupts : The CODEC's interrupt output.
-
-- gpio-controller : Indicates this device is a GPIO controller.
-
-- #gpio-cells : Should be two. The first cell is the pin number and the
-  second cell is used to specify optional parameters (currently unused).
-
-Optional properties:
-
-- realtek,pow-ldo2-gpio : The GPIO that controls the CODEC's POW_LDO2 pin.
-- realtek,reset-gpio : The GPIO that controls the CODEC's RESET pin. Active low.
-
-- realtek,in1-differential
-- realtek,in2-differential
-- realtek,lout1-differential
-- realtek,lout2-differential
-- realtek,lout3-differential
-  Boolean. Indicate MIC1/2 input and LOUT1/2/3 outputs are differential,
-  rather than single-ended.
-
-- realtek,gpio-config
-  Array of six 8bit elements that configures GPIO.
-    0 - floating (reset value)
-    1 - pull down
-    2 - pull up
-
-- realtek,jd1-gpio
-  Configures GPIO Mic Jack detection 1.
-  Select 0 ~ 3 as OFF, GPIO1, GPIO2 and GPIO3 respectively.
-
-- realtek,jd2-gpio
-- realtek,jd3-gpio
-  Configures GPIO Mic Jack detection 2 and 3.
-  Select 0 ~ 3 as OFF, GPIO4, GPIO5 and GPIO6 respectively.
-
-Pins on the device (for linking into audio routes):
-
-  * IN1P
-  * IN1N
-  * IN2P
-  * IN2N
-  * MICBIAS1
-  * DMIC1
-  * DMIC2
-  * DMIC3
-  * DMIC4
-  * LOUT1
-  * LOUT2
-  * LOUT3
-
-Example:
-
-rt5677 {
-	compatible = "realtek,rt5677";
-	reg = <0x2c>;
-	interrupt-parent = <&gpio>;
-	interrupts = <TEGRA_GPIO(W, 3) IRQ_TYPE_LEVEL_HIGH>;
-
-	gpio-controller;
-	#gpio-cells = <2>;
-
-	realtek,pow-ldo2-gpio =
-		<&gpio TEGRA_GPIO(V, 3) GPIO_ACTIVE_HIGH>;
-	realtek,reset-gpio = <&gpio TEGRA_GPIO(BB, 3) GPIO_ACTIVE_LOW>;
-	realtek,in1-differential = "true";
-	realtek,gpio-config = /bits/ 8  <0 0 0 0 0 2>;   /* pull up GPIO6 */
-	realtek,jd2-gpio = <3>;  /* Enables Jack detection for GPIO6 */
-};
-- 
2.45.2

.

From: Jinjie Ruan <ruanjinjie@huawei.com>
To: <catalin.marinas@arm.com>, <will@kernel.org>, <oleg@redhat.com>,
	<tglx@linutronix.de>, <peterz@infradead.org>, <luto@kernel.org>,
	<kees@kernel.org>, <wad@chromium.org>, <ruanjinjie@huawei.com>,
	<rostedt@goodmis.org>, <arnd@arndb.de>, <ardb@kernel.org>,
	<broonie@kernel.org>, <mark.rutland@arm.com>, <rick.p.edgecombe@intel.com>,
	<leobras@redhat.com>, <linux-kernel@vger.kernel.org>,
	<linux-arm-kernel@lists.infradead.org>
Subject: [PATCH 0/3]  arm64: entry: Convert to generic entry
Date: Tue, 25 Jun 2024 17:27:56 +0800
Message-ID: <20240625092759.1533875-1-ruanjinjie@huawei.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257922
Newsgroups: org.kernel.vger.linux-kernel,org.infradead.lists.linux-arm-kernel
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Currently, x86, Riscv, Loongarch use the generic entry. Convert arm64
to use the generic entry infrastructure from kernel/entry/*. The generic
entry makes maintainers' work easier and codes more elegant, which aslo
removed a lot of duplicate code.

Jinjie Ruan (3):
  entry: Add some arch funcs to support arm64 to use generic entry
  arm64: Prepare to switch to generic entry
  arm64: entry: Convert to generic entry

 arch/arm64/Kconfig                    |   1 +
 arch/arm64/include/asm/entry-common.h |  60 +++++
 arch/arm64/include/asm/ptrace.h       |   5 +
 arch/arm64/include/asm/stacktrace.h   |   5 +-
 arch/arm64/include/asm/syscall.h      |   6 +-
 arch/arm64/include/asm/thread_info.h  |  23 +-
 arch/arm64/kernel/entry-common.c      | 355 ++++++--------------------
 arch/arm64/kernel/ptrace.c            |  78 +++---
 arch/arm64/kernel/signal.c            |   3 +-
 arch/arm64/kernel/syscall.c           |  18 +-
 include/linux/entry-common.h          |  51 ++++
 kernel/entry/common.c                 |  49 +++-
 12 files changed, 294 insertions(+), 360 deletions(-)
 create mode 100644 arch/arm64/include/asm/entry-common.h

-- 
2.34.1

.

From: =?UTF-8?q?Cs=C3=B3k=C3=A1s=2C=20Bence?= <csokas.bence@prolan.hu>
To: <linux-mtd@lists.infradead.org>, <linux-kernel@vger.kernel.org>
CC: =?UTF-8?q?Cs=C3=B3k=C3=A1s=2C=20Bence?= <csokas.bence@prolan.hu>, "Miquel
 Raynal" <miquel.raynal@bootlin.com>, Richard Weinberger <richard@nod.at>,
	Vignesh Raghavendra <vigneshr@ti.com>
Subject: [PATCH] mtd: cmdlinepart: Replace `dbg()` macro with `pr_debug()`
Date: Tue, 25 Jun 2024 11:31:47 +0200
Message-ID: <20240625093148.3579660-1-csokas.bence@prolan.hu>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
X-ESET-AS: R=OK;S=0;OP=CALC;TIME=1719307913;VERSION=7972;MC=1585764846;ID=1416094;TRN=0;CRV=0;IPC=;SP=0;SIPS=0;PI=3;F=0
X-ESET-Antispam: OK
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257929
Newsgroups: org.kernel.vger.linux-kernel,org.infradead.lists.linux-mtd
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

This macro was left over from the dawn of Git history.
For some reason it was defined in such a way that
you needed double brackets around it. Replace it with
the now-standard `pr_debug()`.

Signed-off-by: CsÃ³kÃ¡s, Bence <csokas.bence@prolan.hu>
---
 drivers/mtd/parsers/cmdlinepart.c | 18 +++++-------------
 1 file changed, 5 insertions(+), 13 deletions(-)

diff --git a/drivers/mtd/parsers/cmdlinepart.c b/drivers/mtd/parsers/cmdlinepart.c
index b34856def816..504e5fa2b45b 100644
--- a/drivers/mtd/parsers/cmdlinepart.c
+++ b/drivers/mtd/parsers/cmdlinepart.c
@@ -44,14 +44,6 @@
 #include <linux/module.h>
 #include <linux/err.h>
 
-/* debug macro */
-#if 0
-#define dbg(x) do { printk("DEBUG-CMDLINE-PART: "); printk x; } while(0)
-#else
-#define dbg(x)
-#endif
-
-
 /* special size referring to all the remaining space in a partition */
 #define SIZE_REMAINING ULLONG_MAX
 #define OFFSET_CONTINUOUS ULLONG_MAX
@@ -199,9 +191,9 @@ static struct mtd_partition * newpart(char *s,
 	parts[this_part].name = extra_mem;
 	extra_mem += name_len + 1;
 
-	dbg(("partition %d: name <%s>, offset %llx, size %llx, mask flags %x\n",
+	pr_debug("partition %d: name <%s>, offset %llx, size %llx, mask flags %x\n",
 	     this_part, parts[this_part].name, parts[this_part].offset,
-	     parts[this_part].size, parts[this_part].mask_flags));
+	     parts[this_part].size, parts[this_part].mask_flags);
 
 	/* return (updated) pointer to extra_mem memory */
 	if (extra_mem_ptr)
@@ -267,7 +259,7 @@ static int mtdpart_setup_real(char *s)
 		}
 		mtd_id_len = p - mtd_id;
 
-		dbg(("parsing <%s>\n", p+1));
+		pr_debug("parsing <%s>\n", p+1);
 
 		/*
 		 * parse one mtd. have it reserve memory for the
@@ -304,8 +296,8 @@ static int mtdpart_setup_real(char *s)
 		this_mtd->next = partitions;
 		partitions = this_mtd;
 
-		dbg(("mtdid=<%s> num_parts=<%d>\n",
-		     this_mtd->mtd_id, this_mtd->num_parts));
+		pr_debug("mtdid=<%s> num_parts=<%d>\n",
+		     this_mtd->mtd_id, this_mtd->num_parts);
 
 
 		/* EOS - we're done */
-- 
2.34.1


.

From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: stable@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	patches@lists.linux.dev,
	linux-kernel@vger.kernel.org,
	torvalds@linux-foundation.org,
	akpm@linux-foundation.org,
	linux@roeck-us.net,
	shuah@kernel.org,
	patches@kernelci.org,
	lkft-triage@lists.linaro.org,
	pavel@denx.de,
	jonathanh@nvidia.com,
	f.fainelli@gmail.com,
	sudipm.mukherjee@gmail.com,
	srw@sladewatkins.net,
	rwarsow@gmx.de,
	conor@kernel.org,
	allen.lkml@gmail.com,
	broonie@kernel.org
Subject: [PATCH 6.9 000/250] 6.9.7-rc1 review
Date: Tue, 25 Jun 2024 11:29:18 +0200
Message-ID: <20240625085548.033507125@linuxfoundation.org>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
X-stable: review
X-Patchwork-Hint: ignore
X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.9.7-rc1.gz
X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
X-KernelTest-Branch: linux-6.9.y
X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git
X-KernelTest-Version: 6.9.7-rc1
X-KernelTest-Deadline: 2024-06-27T08:55+00:00
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257932
Newsgroups: org.kernel.vger.linux-kernel,dev.linux.lists.patches,org.kernel.vger.stable
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

This is the start of the stable review cycle for the 6.9.7 release.
There are 250 patches in this series, all will be posted as a response
to this one.  If anyone has any issues with these being applied, please
let me know.

Responses should be made by Thu, 27 Jun 2024 08:54:55 +0000.
Anything received after that time might be too late.

The whole patch series can be found in one patch at:
	https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.9.7-rc1.gz
or in the git tree and branch at:
	git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-6.9.y
and the diffstat can be found below.

thanks,

greg k-h

-------------
Pseudo-Shortlog of commits:

Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Linux 6.9.7-rc1

Linus Torvalds <torvalds@linux-foundation.org>
    Revert "mm: mmap: allow for the maximum number of bits for randomizing mmap_base by default"

Andrew Ballance <andrewjballance@gmail.com>
    hid: asus: asus_report_fixup: fix potential read out of bounds

Linus Torvalds <torvalds@linux-foundation.org>
    kprobe/ftrace: fix build error due to bad function definition

Davide Caratti <dcaratti@redhat.com>
    net/sched: unregister lockdep keys in qdisc_create/qdisc_alloc error path

Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
    ASoC: Intel: sof-sdw: really remove FOUR_SPEAKER quirk

Baochen Qiang <quic_bqiang@quicinc.com>
    wifi: ath12k: check M3 buffer size as well whey trying to reuse it

Martin Leung <martin.leung@amd.com>
    drm/amd/display: revert Exit idle optimizations before HDCP execution

Tony Luck <tony.luck@intel.com>
    x86/cpu: Fix x86_match_cpu() to match just X86_VENDOR_INTEL

Tony Luck <tony.luck@intel.com>
    x86/cpu/vfm: Add new macros to work with (vendor/family/model) values

Jeff Johnson <quic_jjohnson@quicinc.com>
    tracing: Add MODULE_DESCRIPTION() to preemptirq_delay_test

Bart Van Assche <bvanassche@acm.org>
    nbd: Fix signal handling

Bart Van Assche <bvanassche@acm.org>
    nbd: Improve the documentation of the locking assumptions

Matthew Brost <matthew.brost@intel.com>
    drm/xe: Use ordered WQ for G2H handler

Patrice Chotard <patrice.chotard@foss.st.com>
    spi: stm32: qspi: Clamp stm32_qspi_get_mode() output to CCR_BUSWIDTH_4

Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    thermal: core: Change PM notifier priority to the minimum

Frank Li <Frank.Li@nxp.com>
    arm64: dts: imx8qm-mek: fix gpio number for reg_usdhc2_vmmc

Patrice Chotard <patrice.chotard@foss.st.com>
    spi: stm32: qspi: Fix dual flash mode sanity test in stm32_qspi_setup()

Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
    thermal: int340x: processor_thermal: Support shared interrupts

Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    dt-bindings: i2c: google,cros-ec-i2c-tunnel: correct path to i2c-controller schema

Paolo Bonzini <pbonzini@redhat.com>
    virt: guest_memfd: fix reference leak on hwpoisoned page

Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    dt-bindings: i2c: atmel,at91sam: correct path to i2c-controller schema

Grygorii Tertychnyi <grembeter@gmail.com>
    i2c: ocores: set IACK bit after core is enabled

GUO Zihua <guozihua@huawei.com>
    ima: Avoid blocking in RCU read-side critical section

Peter Xu <peterx@redhat.com>
    mm/page_table_check: fix crash on ZONE_DEVICE

Eric Dumazet <edumazet@google.com>
    tcp: clear tp->retrans_stamp in tcp_rcv_fastopen_synack()

Matthieu Baerts (NGI0) <matttbe@kernel.org>
    selftests: mptcp: userspace_pm: fixed subtest names

Baolin Wang <baolin.wang@linux.alibaba.com>
    mm: shmem: fix getting incorrect lruvec when replacing a shmem folio

Ran Xiaokai <ran.xiaokai@zte.com.cn>
    mm: huge_memory: fix misused mapping_large_folio_support() for anon folios

Rafael Aquini <aquini@redhat.com>
    mm: mmap: allow for the maximum number of bits for randomizing mmap_base by default

Jiaxun Yang <jiaxun.yang@flygoat.com>
    MIPS: mipsmtregs: Fix target register for MFTC0

Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    serial: 8250_dw: Revert "Move definitions to the shared header"

Ard Biesheuvel <ardb@kernel.org>
    efi/x86: Free EFI memory map only when installing a new one.

Aleksandr Nogikh <nogikh@google.com>
    kcov: don't lose track of remote references during softirqs

Peter Oberparleiter <oberpar@linux.ibm.com>
    gcov: add support for GCC 14

Dmitry Safonov <0x7f454c46@gmail.com>
    net/tcp_ao: Don't leak ao_info on error-path

Louis Chauvet <louis.chauvet@bootlin.com>
    dmaengine: xilinx: xdma: Fix data synchronisation in xdma_channel_isr()

Niklas Cassel <cassel@kernel.org>
    ata: ahci: Do not enable LPM if no LPM states are supported by the HBA

Bart Van Assche <bvanassche@acm.org>
    scsi: usb: uas: Do not query the IO Advice Hints Grouping mode page for USB/UAS devices

Bart Van Assche <bvanassche@acm.org>
    scsi: core: Introduce the BLIST_SKIP_IO_HINTS flag

Joseph Qi <joseph.qi@linux.alibaba.com>
    ocfs2: fix NULL pointer dereference in ocfs2_abort_trigger()

Joseph Qi <joseph.qi@linux.alibaba.com>
    ocfs2: fix NULL pointer dereference in ocfs2_journal_dirty()

Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    dt-bindings: dma: fsl-edma: fix dma-channels constraints

Michael Strauss <michael.strauss@amd.com>
    drm/amd/display: Attempt to avoid empty TUs when endpoint is DPIA

Roman Li <roman.li@amd.com>
    drm/amd/display: Remove redundant idle optimization check

Yunxiang Li <Yunxiang.Li@amd.com>
    drm/amdgpu: fix locking scope when flushing tlb

Alex Deucher <alexander.deucher@amd.com>
    drm/amdgpu: fix UBSAN warning in kv_dpm.c

Alex Deucher <alexander.deucher@amd.com>
    drm/radeon: fix UBSAN warning in kv_dpm.c

Jani Nikula <jani.nikula@intel.com>
    drm/i915/mso: using joiner is not possible with eDP MSO

Pablo CaÃ±o <pablocpascual@gmail.com>
    ALSA: hda/realtek: Add quirk for Lenovo Yoga Pro 7 14AHP9

Edson Juliano Drosdeck <edson.drosdeck@gmail.com>
    ALSA: hda/realtek: Limit mic boost on N14AP7

Andy Chi <andy.chi@canonical.com>
    ALSA: hda/realtek: fix mute/micmute LEDs don't work for ProBook 445/465 G11.

Johannes Berg <johannes.berg@intel.com>
    wifi: mac80211: fix monitor channel with chanctx emulation

Miklos Szeredi <mszeredi@redhat.com>
    ovl: fix encoding fid for lower only root

Jason Gunthorpe <jgg@ziepe.ca>
    RDMA/mlx5: Ensure created mkeys always have a populated rb_key

Jason Gunthorpe <jgg@ziepe.ca>
    RDMA/mlx5: Follow rb_key.ats when creating new mkeys

Jason Gunthorpe <jgg@ziepe.ca>
    RDMA/mlx5: Remove extra unlock on error path

Honggang LI <honggangli@163.com>
    RDMA/rxe: Fix data copy for IB_SEND_INLINE

Sean Christopherson <seanjc@google.com>
    KVM: x86: Always sync PIR to IRR prior to scanning I/O APIC routes

Marc Zyngier <maz@kernel.org>
    KVM: arm64: Disassociate vcpus from redistributor region on teardown

Breno Leitao <leitao@debian.org>
    KVM: Fix a data race on last_boosted_vcpu in kvm_vcpu_on_spin()

Hui Li <lihui@loongson.cn>
    LoongArch: Fix multiple hardware watchpoint issues

Hui Li <lihui@loongson.cn>
    LoongArch: Trigger user-space watchpoints correctly

Hui Li <lihui@loongson.cn>
    LoongArch: Fix watchpoint setting error

Steve French <stfrench@microsoft.com>
    cifs: fix typo in module parameter enable_gcm_256

Joel Slebodnick <jslebodn@redhat.com>
    scsi: ufs: core: Free memory allocated for model before reinit

Boris Burkov <boris@bur.io>
    btrfs: retry block group reclaim without infinite loop

Ignat Korchagin <ignat@cloudflare.com>
    net: do not leave a dangling sk pointer, when socket creation fails

Oleksij Rempel <o.rempel@pengutronix.de>
    net: phy: dp83tg720: get master/slave configuration in link down state

Jose Ignacio Tornos Martinez <jtornosm@redhat.com>
    net: usb: ax88179_178a: improve reset check

Oleksij Rempel <o.rempel@pengutronix.de>
    net: stmmac: Assign configured channel value to EXTTS event

Oleksij Rempel <o.rempel@pengutronix.de>
    net: phy: dp83tg720: wake up PHYs in managed mode

Baokun Li <libaokun1@huawei.com>
    ext4: fix slab-out-of-bounds in ext4_mb_find_good_group_avg_frag_lists()

Baokun Li <libaokun1@huawei.com>
    ext4: avoid overflow when setting values via sysfs

Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    ACPI: EC: Evaluate orphan _REG under EC device

Konstantin Taranov <kotaranov@microsoft.com>
    RDMA/mana_ib: Ignore optional access flags for MRs

Patrisious Haddad <phaddad@nvidia.com>
    RDMA/mlx5: Add check for srq max_sge attribute

Yishai Hadas <yishaih@nvidia.com>
    RDMA/mlx5: Fix unwind flow as part of mlx5_ib_stage_init_init

Xi Ruoyao <xry111@xry111.site>
    LoongArch: Only allow OBJTOOL & ORC unwinder if toolchain supports -mthin-add-sub

Sudeep Holla <sudeep.holla@arm.com>
    firmware: psci: Fix return value from psci_system_suspend()

Chenliang Li <cliang01.li@samsung.com>
    io_uring/rsrc: fix incorrect assignment of iter->nr_segs in io_import_fixed

Michal Wajdeczko <michal.wajdeczko@intel.com>
    drm/xe/vf: Don't touch GuC irq registers if using memory irqs

Marc Kleine-Budde <mkl@pengutronix.de>
    spi: spi-imx: imx51: revert burst length calculation back to bits_per_word

Dave Martin <Dave.Martin@arm.com>
    x86/resctrl: Don't try to free nonexistent RMIDs

Amit Kumar Mahapatra <amit.kumar-mahapatra@amd.com>
    spi: Fix SPI slave probe failure

Hans de Goede <hdegoede@redhat.com>
    ACPI: scan: Ignore camera graph port nodes on all Dell Tiger, Alder and Raptor Lake models

Raju Rangoju <Raju.Rangoju@amd.com>
    ACPICA: Revert "ACPICA: avoid Info: mapping multiple BARs. Your kernel is fine."

Max Krummenacher <max.krummenacher@toradex.com>
    arm64: dts: freescale: imx8mm-verdin: enable hysteresis on slow input pin

Fabio Estevam <festevam@gmail.com>
    arm64: dts: imx93-11x11-evk: Remove the 'no-sdio' property

Tim Harvey <tharvey@gateworks.com>
    arm64: dts: freescale: imx8mp-venice-gw73xx-2x: fix BT shutdown GPIO

Liu Ying <victor.liu@nxp.com>
    arm: dts: imx53-qsb-hdmi: Disable panel instead of deleting node

Marek Vasut <marex@denx.de>
    arm64: dts: imx8mp: Fix TC9595 input clock on DH i.MX8M Plus DHCOM SoM

Julien Panis <jpanis@baylibre.com>
    thermal/drivers/mediatek/lvts_thermal: Return error in case of invalid efuse data

Kalle Niemi <kaleposti@gmail.com>
    regulator: bd71815: fix ramp values

Nikita Shubin <n.shubin@yadro.com>
    dmaengine: ioatdma: Fix missing kmem_cache_destroy()

Arnd Bergmann <arnd@arndb.de>
    dmaengine: fsl-edma: avoid linking both modules

Nikita Shubin <n.shubin@yadro.com>
    dmaengine: ioatdma: Fix kmemleak in ioat_pci_probe()

Nikita Shubin <n.shubin@yadro.com>
    dmaengine: ioatdma: Fix error path in ioat3_dma_probe()

Nikita Shubin <n.shubin@yadro.com>
    dmaengine: ioatdma: Fix leaking on version mismatch

Siddharth Vadapalli <s-vadapalli@ti.com>
    dmaengine: ti: k3-udma-glue: Fix of_k3_udma_glue_parse_chn_by_id()

Li RongQing <lirongqing@baidu.com>
    dmaengine: idxd: Fix possible Use-After-Free in irq_process_work_list

Biju Das <biju.das.jz@bp.renesas.com>
    regulator: core: Fix modpost error "regulator_get_regmap" undefined

Honggang LI <honggangli@163.com>
    RDMA/rxe: Fix responder length checking for UD request packets

Charles Keepax <ckeepax@opensource.cirrus.com>
    spi: cs42l43: Correct SPI root clock speed

Nathan Lynch <nathanl@linux.ibm.com>
    powerpc/crypto: Add generated P8 asm to .gitignore

Abel Vesa <abel.vesa@linaro.org>
    phy: qcom: qmp-combo: Switch from V6 to V6 N4 register offsets

Abel Vesa <abel.vesa@linaro.org>
    phy: qcom-qmp: pcs: Add missing v6 N4 register offsets

Abel Vesa <abel.vesa@linaro.org>
    phy: qcom-qmp: qserdes-txrx: Add missing registers offsets

Joao Paulo Goncalves <joao.goncalves@toradex.com>
    arm64: dts: freescale: imx8mm-verdin: Fix GPU speed

Selvin Xavier <selvin.xavier@broadcom.com>
    RDMA/bnxt_re: Fix the max msix vectors macro

Oliver Neukum <oneukum@suse.com>
    net: usb: rtl8150 fix unintiatilzed variables in rtl8150_get_link_ksettings

Pavan Chebbi <pavan.chebbi@broadcom.com>
    bnxt_en: Restore PTP tx_avail count in case of skb_pad() error

Marcin Szycik <marcin.szycik@linux.intel.com>
    ice: Fix VSI list rule with ICE_SW_LKUP_LAST type

Jianguo Wu <wujianguo@chinatelecom.cn>
    netfilter: move the sysctl nf_hooks_lwtunnel into the netfilter core

Jianguo Wu <wujianguo@chinatelecom.cn>
    seg6: fix parameter passing when calling NF_HOOK() in End.DX4 and End.DX6 behaviors

Jozsef Kadlecsik <kadlec@netfilter.org>
    netfilter: ipset: Fix suspicious rcu_dereference_protected()

Geetha sowjanya <gakula@marvell.com>
    octeontx2-pf: Fix linking objects into multiple modules

Simon Horman <horms@kernel.org>
    octeontx2-pf: Add error handling to VLAN unoffload handling

Heng Qi <hengqi@linux.alibaba.com>
    virtio_net: fixing XDP for fully checksummed packets handling

Heng Qi <hengqi@linux.alibaba.com>
    virtio_net: checksum offloading handling fix

Xiaolei Wang <xiaolei.wang@windriver.com>
    net: stmmac: No need to calculate speed divider when offload is disabled

Simon Horman <horms@kernel.org>
    selftests: openvswitch: Use bash as interpreter

Dan Carpenter <dan.carpenter@linaro.org>
    ptp: fix integer overflow in max_vclocks_store

Xin Long <lucien.xin@gmail.com>
    sched: act_ct: add netns into the key of tcf_ct_flow_table

Xin Long <lucien.xin@gmail.com>
    tipc: force a dst refcount before doing decryption

David Ruth <druth@chromium.org>
    net/sched: act_api: fix possible infinite loop in tcf_idr_check_alloc()

Raju Lakkaraju <Raju.Lakkaraju@microchip.com>
    net: phy: mxl-gpy: Remove interrupt mask clearing from config_init

Raju Lakkaraju <Raju.Lakkaraju@microchip.com>
    net: lan743x: Support WOL at both the PHY and MAC appropriately

Raju Lakkaraju <Raju.Lakkaraju@microchip.com>
    net: lan743x: disable WOL upon resume to restore full data path operation

Stefan Wahren <wahrenst@gmx.net>
    qca_spi: Make interrupt remembering atomic

Yue Haibing <yuehaibing@huawei.com>
    netns: Make get_net_ns() handle zero refcount net

Eric Dumazet <edumazet@google.com>
    xfrm6: check ip6_dst_idev() return value in xfrm6_get_saddr()

Eric Dumazet <edumazet@google.com>
    ipv6: prevent possible NULL dereference in rt6_probe()

Eric Dumazet <edumazet@google.com>
    ipv6: prevent possible NULL deref in fib6_nh_init()

Gavrilov Ilia <Ilia.Gavrilov@infotecs.ru>
    netrom: Fix a memory leak in nr_heartbeat_expiry()

Ajrat Makhmutov <rautyrauty@gmail.com>
    ALSA: hda/realtek: Enable headset mic on IdeaPad 330-17IKB 81DM

Jakub Kicinski <kuba@kernel.org>
    netdev-genl: fix error codes when outputting XDP features

Florian Westphal <fw@strlen.de>
    bpf: Avoid splat in pskb_pull_reason

Simon Trimmer <simont@opensource.cirrus.com>
    ALSA: hda: tas2781: Component should be unbound before deconstruction

Simon Trimmer <simont@opensource.cirrus.com>
    ALSA: hda: cs35l41: Component should be unbound before deconstruction

Simon Trimmer <simont@opensource.cirrus.com>
    ALSA: hda: cs35l56: Component should be unbound before deconstruction

Ondrej Mosnacek <omosnace@redhat.com>
    cipso: fix total option length computation

Aryan Srivastava <aryan.srivastava@alliedtelesis.co.nz>
    net: mvpp2: use slab_build_skb for oversized frames

Johannes Thumshirn <johannes.thumshirn@wdc.com>
    btrfs: zoned: allocate dummy checksums for zoned NODATASUM writes

Daniel Borkmann <daniel@iogearbox.net>
    bpf: Fix reg_set_min_max corruption of fake_reg

Wojciech Drewek <wojciech.drewek@intel.com>
    ice: implement AQ download pkg retry

Paul Greenwalt <paul.greenwalt@intel.com>
    ice: fix 200G link speed message log

En-Wei Wu <en-wei.wu@canonical.com>
    ice: avoid IRQ collision to fix init failure on ACPI S3 resume

Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
    ALSA/hda: intel-dsp-config: Document AVS as dsp_driver option

Dustin L. Howett <dustin@howett.net>
    ALSA: hda/realtek: Remove Framework Laptop 16 from quirks

Remi Pommarel <repk@triplefau.lt>
    wifi: mac80211: Recalc offload when monitor stop

Shaul Triebitz <shaul.triebitz@intel.com>
    wifi: iwlwifi: mvm: fix ROC version check

Masami Hiramatsu (Google) <mhiramat@kernel.org>
    tracing: Build event generation tests only as modules

Christian Marangi <ansuelsmth@gmail.com>
    mips: bmips: BCM6358: make sure CBR is correctly set

Ilpo JÃ¤rvinen <ilpo.jarvinen@linux.intel.com>
    MIPS: Routerboard 532: Fix vendor retry check code

Takashi Iwai <tiwai@suse.de>
    ALSA: seq: ump: Fix missing System Reset message handling

Simon Trimmer <simont@opensource.cirrus.com>
    ALSA: hda: cs35l41: Possible null pointer dereference in cs35l41_hda_unbind()

Viresh Kumar <viresh.kumar@linaro.org>
    OPP: Fix required_opp_tables for multiple genpds using same table

Ilpo JÃ¤rvinen <ilpo.jarvinen@linux.intel.com>
    PCI: Do not wait for disconnected devices when resuming

Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    ACPI: EC: Install address space handler at the namespace root

Peng Ma <andypma@tencent.com>
    cpufreq: amd-pstate: fix memory leak on CPU EPP exit

Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    usb: typec: qcom-pmic-typec: split HPD bridge alloc and registration

Alex Williamson <alex.williamson@redhat.com>
    vfio/pci: Collect hot-reset devices to local buffer

Dave Jiang <dave.jiang@intel.com>
    cxl: Add post-reset warning if reset results in loss of previously committed HDM decoders

Alexander Stein <alexander.stein@ew.tq-group.com>
    i2c: lpi2c: Avoid calling clk_get_rate during transfer

Linus Torvalds <torvalds@linux-foundation.org>
    tty: add the option to have a tty reject a new ldisc

Mathias Nyman <mathias.nyman@linux.intel.com>
    xhci: remove XHCI_TRUST_TX_LENGTH quirk

Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    usb: gadget: function: Remove usage of the deprecated ida_simple_xx() API

Parker Newman <pnewman@connecttech.com>
    serial: exar: adding missing CTI and Exar PCI ids

Esben Haabendal <esben@geanix.com>
    serial: imx: Introduce timeout when waiting on transmitter empty

Songyang Li <leesongyang@outlook.com>
    MIPS: Octeon: Add PCIe link status check

Jaegeuk Kim <jaegeuk@kernel.org>
    f2fs: don't set RO when shutting down f2fs

Mario Limonciello <mario.limonciello@amd.com>
    PCI/PM: Avoid D3cold for HP Pavilion 17 PC/1972 PCIe Ports

Roman Smirnov <r.smirnov@omp.ru>
    udf: udftime: prevent overflow in udf_disk_stamp_to_time()

Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    usb: typec: ucsi_glink: drop special handling for CCI_BUSY

Hans de Goede <hdegoede@redhat.com>
    usb: dwc3: pci: Don't set "linux,phy_charger_detect" property on Lenovo Yoga Tab2 1380

Joao Pinto <Joao.Pinto@synopsys.com>
    Avoid hw_desc array overrun in dw-axi-dmac

Alex Henrie <alexhenrie24@gmail.com>
    usb: misc: uss720: check for incompatible versions of the Belkin F5U002

Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    usb: typec: ucsi_glink: rework quirks implementation

Yunlei He <heyunlei@oppo.com>
    f2fs: remove clear SB_INLINECRYPT flag in default_options

Chao Yu <chao@kernel.org>
    f2fs: fix to detect inconsistent nat entry during truncation

Michael Grzeschik <m.grzeschik@pengutronix.de>
    usb: gadget: uvc: configfs: ensure guid to be valid before set

Stephen Brennan <stephen.s.brennan@oracle.com>
    kprobe/ftrace: bail out if ftrace was killed

Baokun Li <libaokun1@huawei.com>
    ext4: fix uninitialized ratelimit_state->lock access in __ext4_fill_super()

Jan Kara <jack@suse.cz>
    ext4: do not create EA inode under buffer lock

Aleksandr Aprelkov <aaprelkov@usergate.com>
    iommu/arm-smmu-v3: Free MSIs in case of ENOMEM

Tzung-Bi Shih <tzungbi@kernel.org>
    power: supply: cros_usbpd: provide ID table for avoiding fallback match

Ben Fradella <bfradell@netapp.com>
    platform/x86: p2sb: Don't init until unassigned resources have been assigned

Michael Ellerman <mpe@ellerman.id.au>
    powerpc/io: Avoid clang null pointer arithmetic warnings

Fullway Wang <fullwaywang@outlook.com>
    media: mtk-vcodec: potential null pointer deference in SCP

Ricardo Ribalda <ribalda@chromium.org>
    media: intel/ipu6: Fix build with !ACPI

Nathan Lynch <nathanl@linux.ibm.com>
    powerpc/pseries: Enforce hcall result buffer validity and size

Stefan Binding <sbinding@opensource.cirrus.com>
    ALSA: hda/realtek: Add quirks for Lenovo 13X

Stefan Binding <sbinding@opensource.cirrus.com>
    ALSA: hda/realtek: Add quirks for HP Omen models using CS35L41

Hans de Goede <hdegoede@redhat.com>
    platform/x86: x86-android-tablets: Add Lenovo Yoga Tablet 2 Pro 1380F/L data

Hans de Goede <hdegoede@redhat.com>
    platform/x86: x86-android-tablets: Unregister devices in reverse order

Erico Nunes <nunes.erico@gmail.com>
    drm/lima: mask irqs in timeout path before hard reset

Erico Nunes <nunes.erico@gmail.com>
    drm/lima: include pp bcast irq in timeout handler check

Erico Nunes <nunes.erico@gmail.com>
    drm/lima: add mask irq callback to gp and pp

Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
    ASoC: Intel: sof_sdw: add quirk for Dell SKU 0C0F

Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
    ASoC: Intel: sof_sdw: add JD2 quirk for HP Omen 14

Waiman Long <longman@redhat.com>
    cgroup/cpuset: Make cpuset hotplug processing synchronous

Arvid Norlander <lkml@vorpal.se>
    platform/x86: toshiba_acpi: Add quirk for buttons on Z830

Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
    drm/amd/display: Workaround register access in idle race with cursor

Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
    drm/amd/display: Exit idle optimizations before HDCP execution

Uri Arev <me@wantyapps.xyz>
    Bluetooth: ath3k: Fix multiple issues reported by checkpatch.pl

David Arinzon <darinzon@amazon.com>
    net: ena: Add validation for completion descriptors consistency

Jakub Kicinski <kuba@kernel.org>
    selftests: net: fix timestamp not arriving in cmsg_time.sh

Jose E. Marchesi <jose.marchesi@oracle.com>
    bpf: avoid uninitialized warnings in verifier_global_subprogs.c

Takashi Iwai <tiwai@suse.de>
    ACPI: video: Add backlight=native quirk for Lenovo Slim 7 16ARH7

Luke D. Jones <luke@ljones.dev>
    HID: asus: fix more n-key report descriptors if n-key quirked

Sean O'Brien <seobrien@chromium.org>
    HID: Add quirk for Logitech Casa touchpad

Leon Yen <leon.yen@mediatek.com>
    wifi: mt76: mt7921s: fix potential hung tasks during chip recovery

Lingbo Kong <quic_lingbok@quicinc.com>
    wifi: ath12k: fix the problem that down grade phy mode operation

Breno Leitao <leitao@debian.org>
    netpoll: Fix race condition in netpoll_owner_active

Tamim Khan <tamim@fusetak.com>
    ACPI: resource: Skip IRQ override on Asus Vivobook Pro N6506MV

Luiz Angelo Daros de Luca <luizluca@gmail.com>
    net: dsa: realtek: do not assert reset on remove

Luiz Angelo Daros de Luca <luizluca@gmail.com>
    net: dsa: realtek: keep default LED state in rtl8366rb

Kunwu Chan <chentao@kylinos.cn>
    kselftest: arm64: Add a null pointer check

Shiqi Liu <shiqiliu@hust.edu.cn>
    arm64/sysreg: Update PIE permission encodings

Davide Caratti <dcaratti@redhat.com>
    net/sched: fix false lockdep warning on qdisc root lock

Daniel Golle <daniel@makrotopia.org>
    net: sfp: add quirk for ATS SFP-GE-T 1000Base-TX module

Marek BehÃºn <kabel@kernel.org>
    net: sfp: enhance quirk for Fibrestore 2.5G copper SFP module

Manish Rangankar <mrangankar@marvell.com>
    scsi: qedi: Fix crash while reading debugfs attribute

Baochen Qiang <quic_bqiang@quicinc.com>
    wifi: ath12k: fix kernel crash during resume

Guenter Schafranek <gschafra@web.de>
    ACPI: resource: Do IRQ override on GMxBGxx (XMG APEX 17 M23)

Wander Lairson Costa <wander@redhat.com>
    drop_monitor: replace spin_lock by raw_spin_lock

Hans de Goede <hdegoede@redhat.com>
    ACPI: x86: Add PNP_UART1_SKIP quirk for Lenovo Blade2 tablets

Adrian Hunter <adrian.hunter@intel.com>
    clocksource: Make watchdog and suspend-timing multiplication overflow safe

Eric Dumazet <edumazet@google.com>
    af_packet: avoid a false positive warning in packet_setsockopt()

Arnd Bergmann <arnd@arndb.de>
    wifi: ath9k: work around memset overflow warning

Ping-Ke Shih <pkshih@realtek.com>
    wifi: rtw89: 8852c: add quirk to set PCI BER for certain platforms

Eric Dumazet <edumazet@google.com>
    batman-adv: bypass empty buckets in batadv_purge_orig_ref()

Jian Wen <wenjianhn@gmail.com>
    devlink: use kvzalloc() to allocate devlink instance resources

Alexei Starovoitov <ast@kernel.org>
    bpf: Avoid kfree_rcu() under lock in bpf_lpm_trie.

Yonghong Song <yonghong.song@linux.dev>
    selftests/bpf: Fix flaky test btf_map_in_map/lookup_update

Alessandro Carminati (Red Hat) <alessandro.carminati@gmail.com>
    selftests/bpf: Prevent client connect before server bind in test_tc_tunnel.sh

Rand Deeb <rand.sec96@gmail.com>
    ssb: Fix potential NULL pointer dereference in ssb_device_uevent()

Justin Stitt <justinstitt@google.com>
    block/ioctl: prefer different overflow check

Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    arm64: defconfig: select INTERCONNECT_QCOM_SM6115 as built-in

Kees Cook <keescook@chromium.org>
    ubsan: Avoid i386 UBSAN handler crashes with Clang

Tzung-Bi Shih <tzungbi@kernel.org>
    platform/chrome: cros_usbpd_notify: provide ID table for avoiding fallback match

Tzung-Bi Shih <tzungbi@kernel.org>
    platform/chrome: cros_usbpd_logger: provide ID table for avoiding fallback match

Zqiang <qiang.zhang1211@gmail.com>
    rcutorture: Fix invalid context warning when enable srcu barrier testing

Zqiang <qiang.zhang1211@gmail.com>
    rcutorture: Make stall-tasks directly exit when rcutorture tests end

Paul E. McKenney <paulmck@kernel.org>
    rcutorture: Fix rcu_torture_one_read() pipe_count overflow comment

Jens Axboe <axboe@kernel.dk>
    io_uring/sqpoll: work around a potential audit memory leak

Chenghai Huang <huangchenghai2@huawei.com>
    crypto: hisilicon/qm - Add the err memory release process to qm uninit

Chenghai Huang <huangchenghai2@huawei.com>
    crypto: hisilicon/sec - Fix memory leak for sec resource release

Herbert Xu <herbert@gondor.apana.org.au>
    padata: Disable BH when taking works lock on MT path

Kemeng Shi <shikemeng@huaweicloud.com>
    fs/writeback: bail out if there is no more inodes for IO and queued once


-------------

Diffstat:

 .../devicetree/bindings/dma/fsl,edma.yaml          |   4 +-
 .../devicetree/bindings/i2c/atmel,at91sam-i2c.yaml |   2 +-
 .../bindings/i2c/google,cros-ec-i2c-tunnel.yaml    |   2 +-
 Makefile                                           |   4 +-
 arch/arm/boot/dts/nxp/imx/imx53-qsb-common.dtsi    |   2 +-
 arch/arm/boot/dts/nxp/imx/imx53-qsb-hdmi.dtso      |   6 +-
 arch/arm64/boot/dts/freescale/imx8mm-verdin.dtsi   |   3 +-
 .../arm64/boot/dts/freescale/imx8mp-dhcom-som.dtsi |   2 +-
 .../boot/dts/freescale/imx8mp-venice-gw73xx.dtsi   |   2 +-
 arch/arm64/boot/dts/freescale/imx8qm-mek.dts       |   2 +-
 arch/arm64/boot/dts/freescale/imx93-11x11-evk.dts  |   1 -
 arch/arm64/configs/defconfig                       |   1 +
 arch/arm64/include/asm/sysreg.h                    |  24 +--
 arch/arm64/kvm/vgic/vgic-init.c                    |   2 +-
 arch/arm64/kvm/vgic/vgic-mmio-v3.c                 |  15 +-
 arch/arm64/kvm/vgic/vgic.h                         |   2 +-
 arch/csky/kernel/probes/ftrace.c                   |   3 +
 arch/loongarch/Kconfig                             |   5 +-
 arch/loongarch/Kconfig.debug                       |   1 +
 arch/loongarch/include/asm/hw_breakpoint.h         |   4 +-
 arch/loongarch/kernel/ftrace_dyn.c                 |   3 +
 arch/loongarch/kernel/hw_breakpoint.c              |  96 +++++----
 arch/loongarch/kernel/ptrace.c                     |  47 +++--
 arch/mips/bmips/setup.c                            |   3 +-
 arch/mips/include/asm/mipsmtregs.h                 |   2 +-
 arch/mips/pci/ops-rc32434.c                        |   4 +-
 arch/mips/pci/pcie-octeon.c                        |   6 +
 arch/parisc/kernel/ftrace.c                        |   3 +
 arch/powerpc/crypto/.gitignore                     |   2 +
 arch/powerpc/include/asm/hvcall.h                  |   8 +-
 arch/powerpc/include/asm/io.h                      |  24 +--
 arch/powerpc/kernel/kprobes-ftrace.c               |   3 +
 arch/riscv/kernel/probes/ftrace.c                  |   3 +
 arch/s390/kernel/ftrace.c                          |   3 +
 arch/x86/include/asm/cpu_device_id.h               |  98 ++++++++++
 arch/x86/include/asm/efi.h                         |   1 -
 arch/x86/kernel/cpu/match.c                        |   4 +-
 arch/x86/kernel/cpu/resctrl/monitor.c              |   3 +-
 arch/x86/kernel/kprobes/ftrace.c                   |   3 +
 arch/x86/kvm/x86.c                                 |   9 +-
 arch/x86/platform/efi/memmap.c                     |  12 +-
 block/ioctl.c                                      |   2 +-
 drivers/acpi/acpica/acevents.h                     |   4 +
 drivers/acpi/acpica/evregion.c                     |   6 +-
 drivers/acpi/acpica/evxfregn.c                     |  54 ++++++
 drivers/acpi/acpica/exregion.c                     |  23 +--
 drivers/acpi/ec.c                                  |  28 ++-
 drivers/acpi/internal.h                            |   5 +-
 drivers/acpi/mipi-disco-img.c                      |  28 ++-
 drivers/acpi/resource.c                            |  13 ++
 drivers/acpi/video_detect.c                        |   8 +
 drivers/acpi/x86/utils.c                           |  20 +-
 drivers/ata/ahci.c                                 |   8 +
 drivers/block/nbd.c                                |  34 ++--
 drivers/bluetooth/ath3k.c                          |  25 ++-
 drivers/cpufreq/amd-pstate.c                       |   7 +
 drivers/crypto/hisilicon/qm.c                      |   5 +-
 drivers/crypto/hisilicon/sec2/sec_crypto.c         |   4 +-
 drivers/cxl/core/pci.c                             |  29 +++
 drivers/cxl/cxl.h                                  |   2 +
 drivers/cxl/pci.c                                  |  22 +++
 drivers/dma/Kconfig                                |   2 +-
 drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c     |   6 +-
 drivers/dma/dw-axi-dmac/dw-axi-dmac.h              |   1 +
 drivers/dma/idxd/irq.c                             |   4 +-
 drivers/dma/ioat/init.c                            |  55 +++---
 drivers/dma/ti/k3-udma-glue.c                      |   5 +-
 drivers/dma/xilinx/xdma.c                          |   4 +-
 drivers/firmware/efi/memmap.c                      |   9 -
 drivers/firmware/psci/psci.c                       |   4 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c            |  66 ++++---
 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c  |   3 -
 drivers/gpu/drm/amd/display/dc/dc_dmub_srv.c       |  23 ++-
 .../drm/amd/display/dc/hwss/dcn35/dcn35_hwseq.c    |  72 +++++++
 .../drm/amd/display/dc/hwss/dcn35/dcn35_hwseq.h    |   2 +
 .../gpu/drm/amd/display/dc/hwss/dcn35/dcn35_init.c |   2 +-
 drivers/gpu/drm/amd/pm/legacy-dpm/kv_dpm.c         |   2 +
 drivers/gpu/drm/i915/display/intel_dp.c            |   4 +
 drivers/gpu/drm/lima/lima_bcast.c                  |  12 ++
 drivers/gpu/drm/lima/lima_bcast.h                  |   3 +
 drivers/gpu/drm/lima/lima_gp.c                     |   8 +
 drivers/gpu/drm/lima/lima_pp.c                     |  18 ++
 drivers/gpu/drm/lima/lima_sched.c                  |   9 +
 drivers/gpu/drm/lima/lima_sched.h                  |   1 +
 drivers/gpu/drm/radeon/sumo_dpm.c                  |   2 +
 drivers/gpu/drm/xe/xe_guc.c                        |   4 +-
 drivers/gpu/drm/xe/xe_guc_ct.c                     |   4 +
 drivers/hid/hid-asus.c                             |  51 +++--
 drivers/hid/hid-ids.h                              |   1 +
 drivers/hid/hid-multitouch.c                       |   6 +
 drivers/i2c/busses/i2c-imx-lpi2c.c                 |  19 +-
 drivers/i2c/busses/i2c-ocores.c                    |   2 +-
 drivers/infiniband/hw/bnxt_re/bnxt_re.h            |   4 +-
 drivers/infiniband/hw/mana/mr.c                    |   1 +
 drivers/infiniband/hw/mlx5/main.c                  |   4 +-
 drivers/infiniband/hw/mlx5/mr.c                    |   8 +-
 drivers/infiniband/hw/mlx5/srq.c                   |  13 +-
 drivers/infiniband/sw/rxe/rxe_resp.c               |  13 ++
 drivers/infiniband/sw/rxe/rxe_verbs.c              |   2 +-
 drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c        |   2 +-
 drivers/media/pci/intel/ipu-bridge.c               |  66 +++++--
 .../mediatek/vcodec/common/mtk_vcodec_fw_scp.c     |   2 +
 drivers/net/dsa/realtek/rtl8366rb.c                |  87 ++-------
 drivers/net/dsa/realtek/rtl83xx.c                  |   7 +-
 drivers/net/ethernet/amazon/ena/ena_eth_com.c      |  37 +++-
 drivers/net/ethernet/amazon/ena/ena_netdev.c       |   2 +
 drivers/net/ethernet/amazon/ena/ena_regs_defs.h    |   1 +
 drivers/net/ethernet/broadcom/bnxt/bnxt.c          |   5 +-
 drivers/net/ethernet/intel/ice/ice_ddp.c           |  23 ++-
 drivers/net/ethernet/intel/ice/ice_main.c          |  10 +-
 drivers/net/ethernet/intel/ice/ice_switch.c        |   6 +-
 drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c    |   5 +-
 .../net/ethernet/marvell/octeontx2/nic/Makefile    |   3 +-
 .../ethernet/marvell/octeontx2/nic/otx2_dcbnl.c    |   7 +
 .../ethernet/marvell/octeontx2/nic/otx2_devlink.c  |   2 +
 .../net/ethernet/marvell/octeontx2/nic/otx2_txrx.c |   5 +-
 drivers/net/ethernet/microchip/lan743x_ethtool.c   |  44 ++++-
 drivers/net/ethernet/microchip/lan743x_main.c      |  48 ++++-
 drivers/net/ethernet/microchip/lan743x_main.h      |  28 +++
 drivers/net/ethernet/qualcomm/qca_debug.c          |   6 +-
 drivers/net/ethernet/qualcomm/qca_spi.c            |  16 +-
 drivers/net/ethernet/qualcomm/qca_spi.h            |   3 +-
 .../net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c  |   6 +-
 drivers/net/ethernet/stmicro/stmmac/stmmac_tc.c    |  40 ++--
 drivers/net/phy/dp83tg720.c                        |  38 +++-
 drivers/net/phy/mxl-gpy.c                          |  58 ++++--
 drivers/net/phy/sfp.c                              |  21 +-
 drivers/net/usb/ax88179_178a.c                     |  18 +-
 drivers/net/usb/rtl8150.c                          |   3 +-
 drivers/net/virtio_net.c                           |  32 ++-
 drivers/net/wireless/ath/ath.h                     |   6 +-
 drivers/net/wireless/ath/ath12k/core.c             |   1 -
 drivers/net/wireless/ath/ath12k/mac.c              |  16 +-
 drivers/net/wireless/ath/ath12k/qmi.c              |  61 ++++--
 drivers/net/wireless/ath/ath12k/qmi.h              |   2 +
 drivers/net/wireless/ath/ath9k/main.c              |   3 +-
 drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c  |   2 +-
 drivers/net/wireless/mediatek/mt76/mt7921/mac.c    |   2 +
 .../net/wireless/mediatek/mt76/mt7921/pci_mac.c    |   2 -
 .../net/wireless/mediatek/mt76/mt7921/sdio_mac.c   |   2 -
 drivers/net/wireless/mediatek/mt76/sdio.c          |   3 +-
 drivers/net/wireless/realtek/rtw89/core.c          |  18 ++
 drivers/net/wireless/realtek/rtw89/core.h          |  10 +
 drivers/net/wireless/realtek/rtw89/pci.c           |  19 ++
 drivers/net/wireless/realtek/rtw89/pci.h           |   5 +
 drivers/net/wireless/realtek/rtw89/rtw8851be.c     |   1 +
 drivers/net/wireless/realtek/rtw89/rtw8852ae.c     |   1 +
 drivers/net/wireless/realtek/rtw89/rtw8852be.c     |   1 +
 drivers/net/wireless/realtek/rtw89/rtw8852ce.c     |  23 +++
 drivers/net/wireless/realtek/rtw89/rtw8922ae.c     |   1 +
 drivers/opp/core.c                                 |  31 ++-
 drivers/pci/pci.c                                  |  17 ++
 drivers/phy/qualcomm/phy-qcom-qmp-combo.c          | 189 +++++++++++++++---
 drivers/phy/qualcomm/phy-qcom-qmp-pcs-v6-n4.h      |  32 +++
 .../phy/qualcomm/phy-qcom-qmp-qserdes-txrx-v6_n4.h |  13 ++
 drivers/phy/qualcomm/phy-qcom-qmp.h                |   2 +
 drivers/platform/chrome/cros_usbpd_logger.c        |   9 +-
 drivers/platform/chrome/cros_usbpd_notify.c        |   9 +-
 drivers/platform/x86/p2sb.c                        |  29 +--
 drivers/platform/x86/toshiba_acpi.c                |  36 +++-
 drivers/platform/x86/x86-android-tablets/core.c    |   8 +-
 drivers/platform/x86/x86-android-tablets/dmi.c     |  18 ++
 drivers/platform/x86/x86-android-tablets/lenovo.c  | 216 +++++++++++++++++++++
 .../x86/x86-android-tablets/x86-android-tablets.h  |   1 +
 drivers/pmdomain/core.c                            |  10 +
 drivers/power/supply/cros_usbpd-charger.c          |  11 +-
 drivers/ptp/ptp_sysfs.c                            |   3 +-
 drivers/regulator/bd71815-regulator.c              |   2 +-
 drivers/regulator/core.c                           |   1 +
 drivers/scsi/qedi/qedi_debugfs.c                   |  12 +-
 drivers/scsi/sd.c                                  |   4 +
 drivers/spi/spi-cs42l43.c                          |   2 +-
 drivers/spi/spi-imx.c                              |  14 +-
 drivers/spi/spi-stm32-qspi.c                       |  12 +-
 drivers/spi/spi.c                                  |  10 +-
 drivers/ssb/main.c                                 |   4 +-
 .../int340x_thermal/processor_thermal_device_pci.c |   3 +-
 drivers/thermal/mediatek/lvts_thermal.c            |   6 +-
 drivers/thermal/thermal_core.c                     |   6 +
 drivers/tty/serial/8250/8250_dw.c                  |  27 +++
 drivers/tty/serial/8250/8250_dwlib.h               |  32 ---
 drivers/tty/serial/8250/8250_exar.c                |  42 ++++
 drivers/tty/serial/imx.c                           |   7 +-
 drivers/tty/tty_ldisc.c                            |   6 +
 drivers/tty/vt/vt.c                                |  10 +
 drivers/ufs/core/ufshcd.c                          |   1 +
 drivers/usb/dwc3/dwc3-pci.c                        |   8 +-
 drivers/usb/gadget/function/f_hid.c                |   6 +-
 drivers/usb/gadget/function/f_printer.c            |   6 +-
 drivers/usb/gadget/function/rndis.c                |   4 +-
 drivers/usb/gadget/function/uvc_configfs.c         |  14 +-
 drivers/usb/host/xhci-pci.c                        |  15 +-
 drivers/usb/host/xhci-rcar.c                       |   6 +-
 drivers/usb/host/xhci-ring.c                       |  15 +-
 drivers/usb/host/xhci.h                            |   4 +-
 drivers/usb/misc/uss720.c                          |  22 ++-
 drivers/usb/storage/scsiglue.c                     |   6 +
 drivers/usb/storage/uas.c                          |   7 +
 drivers/usb/typec/tcpm/qcom/qcom_pmic_typec.c      |  10 +-
 drivers/usb/typec/ucsi/ucsi_glink.c                |  22 +--
 drivers/vfio/pci/vfio_pci_core.c                   |  78 +++++---
 fs/btrfs/bio.c                                     |   4 +-
 fs/btrfs/block-group.c                             |  11 +-
 fs/ext4/mballoc.c                                  |   4 +
 fs/ext4/super.c                                    |  22 +--
 fs/ext4/sysfs.c                                    |  24 ++-
 fs/ext4/xattr.c                                    | 113 +++++------
 fs/f2fs/node.c                                     |  12 +-
 fs/f2fs/super.c                                    |  12 +-
 fs/fs-writeback.c                                  |   7 +-
 fs/ocfs2/journal.c                                 | 192 ++++++++++--------
 fs/ocfs2/ocfs2.h                                   |  27 +++
 fs/ocfs2/super.c                                   |   4 +-
 fs/overlayfs/export.c                              |   6 +-
 fs/smb/client/cifsfs.c                             |   2 +-
 fs/udf/udftime.c                                   |  11 +-
 include/acpi/acpixf.h                              |   4 +
 include/linux/bpf_verifier.h                       |   2 +
 include/linux/cpuset.h                             |   3 -
 include/linux/kcov.h                               |   2 +
 include/linux/kprobes.h                            |   7 +
 include/linux/lsm_hook_defs.h                      |   2 +-
 include/linux/mod_devicetable.h                    |   2 +
 include/linux/pagemap.h                            |   4 +
 include/linux/pci.h                                |   7 +-
 include/linux/pm_domain.h                          |   6 +
 include/linux/security.h                           |   5 +-
 include/linux/tty_driver.h                         |   8 +
 include/net/netns/netfilter.h                      |   3 +
 include/net/sch_generic.h                          |   1 +
 include/scsi/scsi_devinfo.h                        |   4 +-
 io_uring/rsrc.c                                    |   1 -
 io_uring/sqpoll.c                                  |   8 +
 kernel/auditfilter.c                               |   5 +-
 kernel/bpf/lpm_trie.c                              |  13 +-
 kernel/bpf/verifier.c                              |  14 +-
 kernel/cgroup/cpuset.c                             | 141 ++++++--------
 kernel/cpu.c                                       |  48 -----
 kernel/gcov/gcc_4_7.c                              |   4 +-
 kernel/kcov.c                                      |   1 +
 kernel/kprobes.c                                   |   6 +
 kernel/padata.c                                    |   8 +-
 kernel/power/process.c                             |   2 -
 kernel/rcu/rcutorture.c                            |  16 +-
 kernel/time/clocksource.c                          |  42 ++--
 kernel/trace/Kconfig                               |   4 +-
 kernel/trace/ftrace.c                              |   1 +
 kernel/trace/preemptirq_delay_test.c               |   1 +
 lib/ubsan.h                                        |  41 ++--
 mm/huge_memory.c                                   |  28 +--
 mm/memcontrol.c                                    |   3 +-
 mm/page_table_check.c                              |  11 +-
 mm/shmem.c                                         |   2 +-
 net/batman-adv/originator.c                        |   2 +
 net/core/drop_monitor.c                            |  20 +-
 net/core/filter.c                                  |   5 +
 net/core/net_namespace.c                           |   9 +-
 net/core/netdev-genl.c                             |  16 +-
 net/core/netpoll.c                                 |   2 +-
 net/core/sock.c                                    |   3 +
 net/devlink/core.c                                 |   6 +-
 net/ipv4/cipso_ipv4.c                              |  12 +-
 net/ipv4/tcp_ao.c                                  |   6 +-
 net/ipv4/tcp_input.c                               |   1 +
 net/ipv6/route.c                                   |   4 +-
 net/ipv6/seg6_local.c                              |   8 +-
 net/ipv6/xfrm6_policy.c                            |   8 +-
 net/mac80211/driver-ops.c                          |  17 ++
 net/mac80211/iface.c                               |  22 +--
 net/mac80211/util.c                                |   2 +-
 net/netfilter/core.c                               |  13 +-
 net/netfilter/ipset/ip_set_core.c                  |  11 +-
 net/netfilter/nf_conntrack_standalone.c            |  15 --
 net/netfilter/nf_hooks_lwtunnel.c                  |  67 +++++++
 net/netfilter/nf_internals.h                       |   6 +
 net/netrom/nr_timer.c                              |   3 +-
 net/packet/af_packet.c                             |  26 +--
 net/sched/act_api.c                                |   3 +-
 net/sched/act_ct.c                                 |  16 +-
 net/sched/sch_api.c                                |   1 +
 net/sched/sch_generic.c                            |   4 +
 net/sched/sch_htb.c                                |  22 +--
 net/tipc/node.c                                    |   1 +
 security/apparmor/audit.c                          |   6 +-
 security/apparmor/include/audit.h                  |   2 +-
 security/integrity/ima/ima.h                       |   2 +-
 security/integrity/ima/ima_policy.c                |  15 +-
 security/security.c                                |   6 +-
 security/selinux/include/audit.h                   |   4 +-
 security/selinux/ss/services.c                     |   5 +-
 security/smack/smack_lsm.c                         |   4 +-
 sound/core/seq/seq_ump_convert.c                   |   2 +
 sound/hda/intel-dsp-config.c                       |   2 +-
 sound/pci/hda/cs35l41_hda.c                        |   6 +-
 sound/pci/hda/cs35l56_hda.c                        |   4 +-
 sound/pci/hda/patch_realtek.c                      |  15 +-
 sound/pci/hda/tas2781_hda_i2c.c                    |   4 +-
 sound/soc/intel/boards/sof_sdw.c                   |  18 ++
 tools/arch/arm64/include/asm/sysreg.h              |  24 +--
 tools/testing/selftests/arm64/tags/tags_test.c     |   4 +
 .../selftests/bpf/prog_tests/btf_map_in_map.c      |  26 +--
 .../selftests/bpf/progs/verifier_global_subprogs.c |   7 +
 tools/testing/selftests/bpf/test_tc_tunnel.sh      |  13 +-
 tools/testing/selftests/net/cmsg_sender.c          |  20 +-
 tools/testing/selftests/net/mptcp/userspace_pm.sh  |  46 +++--
 .../selftests/net/openvswitch/openvswitch.sh       |   2 +-
 virt/kvm/guest_memfd.c                             |   5 +-
 virt/kvm/kvm_main.c                                |   5 +-
 308 files changed, 3159 insertions(+), 1398 deletions(-)


.

From: Chunjie Zhu <chunjie.zhu@cloud.com>
To: "Darrick J. Wong" <djwong@kernel.org>
Cc: Chunjie Zhu <chunjie.zhu@cloud.com>,
	linux-xfs@vger.kernel.org,
	linux-fsdevel@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: [PATCH v1 1/1] revert "iomap: add support for dma aligned direct-io"
Date: Tue, 25 Jun 2024 09:38:51 +0000
Message-Id: <20240625093851.73331-1-chunjie.zhu@cloud.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257939
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-fsdevel,org.kernel.vger.linux-xfs
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

This reverts commit bf8d08532bc19a14cfb54ae61099dccadefca446 as it
causes applications unable to probe a consistent value for direct
io buffer alignment, see an example,

                                 buffer alignment: 512
                                          |
                                         ext3
                                          |
   buffer alignment: 4          lvm (dma_alignment: 511)
           |                              |
          xfs                       device mapper
           |                              |
         sda1                            sda2
           |                              |
           ---  sda (dma_alignment: 3)  ---

Signed-off-by: Chunjie Zhu <chunjie.zhu@cloud.com>
---
 fs/iomap/direct-io.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/fs/iomap/direct-io.c b/fs/iomap/direct-io.c
index bcd3f8cf5ea4..448b563a634c 100644
--- a/fs/iomap/direct-io.c
+++ b/fs/iomap/direct-io.c
@@ -277,7 +277,9 @@ static loff_t iomap_dio_bio_iter(const struct iomap_iter *iter,
 {
 	const struct iomap *iomap = &iter->iomap;
 	struct inode *inode = iter->inode;
+	unsigned int blkbits = blksize_bits(bdev_logical_block_size(iomap->bdev));
 	unsigned int fs_block_size = i_blocksize(inode), pad;
+	unsigned int align = iov_iter_alignment(dio->submit.iter);
 	loff_t length = iomap_length(iter);
 	loff_t pos = iter->pos;
 	blk_opf_t bio_opf;
@@ -288,8 +290,7 @@ static loff_t iomap_dio_bio_iter(const struct iomap_iter *iter,
 	size_t copied = 0;
 	size_t orig_count;
 
-	if ((pos | length) & (bdev_logical_block_size(iomap->bdev) - 1) ||
-	    !bdev_iter_is_aligned(iomap->bdev, dio->submit.iter))
+	if ((pos | length | align) & ((1 << blkbits) - 1))
 		return -EINVAL;
 
 	if (iomap->type == IOMAP_UNWRITTEN) {
-- 
2.34.1

.

From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: stable@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	patches@lists.linux.dev,
	linux-kernel@vger.kernel.org,
	torvalds@linux-foundation.org,
	akpm@linux-foundation.org,
	linux@roeck-us.net,
	shuah@kernel.org,
	patches@kernelci.org,
	lkft-triage@lists.linaro.org,
	pavel@denx.de,
	jonathanh@nvidia.com,
	f.fainelli@gmail.com,
	sudipm.mukherjee@gmail.com,
	srw@sladewatkins.net,
	rwarsow@gmx.de,
	conor@kernel.org,
	allen.lkml@gmail.com,
	broonie@kernel.org
Subject: [PATCH 6.6 000/192] 6.6.36-rc1 review
Date: Tue, 25 Jun 2024 11:31:12 +0200
Message-ID: <20240625085537.150087723@linuxfoundation.org>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
X-stable: review
X-Patchwork-Hint: ignore
X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.6.36-rc1.gz
X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
X-KernelTest-Branch: linux-6.6.y
X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git
X-KernelTest-Version: 6.6.36-rc1
X-KernelTest-Deadline: 2024-06-27T08:55+00:00
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257942
Newsgroups: org.kernel.vger.linux-kernel,dev.linux.lists.patches,org.kernel.vger.stable
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

This is the start of the stable review cycle for the 6.6.36 release.
There are 192 patches in this series, all will be posted as a response
to this one.  If anyone has any issues with these being applied, please
let me know.

Responses should be made by Thu, 27 Jun 2024 08:54:55 +0000.
Anything received after that time might be too late.

The whole patch series can be found in one patch at:
	https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.6.36-rc1.gz
or in the git tree and branch at:
	git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-6.6.y
and the diffstat can be found below.

thanks,

greg k-h

-------------
Pseudo-Shortlog of commits:

Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Linux 6.6.36-rc1

Linus Torvalds <torvalds@linux-foundation.org>
    Revert "mm: mmap: allow for the maximum number of bits for randomizing mmap_base by default"

Andrew Ballance <andrewjballance@gmail.com>
    hid: asus: asus_report_fixup: fix potential read out of bounds

Linus Torvalds <torvalds@linux-foundation.org>
    kprobe/ftrace: fix build error due to bad function definition

Davide Caratti <dcaratti@redhat.com>
    net/sched: unregister lockdep keys in qdisc_create/qdisc_alloc error path

Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
    ASoC: Intel: sof-sdw: really remove FOUR_SPEAKER quirk

Martin Leung <martin.leung@amd.com>
    drm/amd/display: revert Exit idle optimizations before HDCP execution

Jiaxun Yang <jiaxun.yang@flygoat.com>
    LoongArch: Fix entry point in kernel image header

Wang Yao <wangyao@lemote.com>
    efi/loongarch: Directly position the loaded image file

Arnd Bergmann <arnd@arndb.de>
    efi: move screen_info into efi init code

Arnd Bergmann <arnd@arndb.de>
    vgacon: rework screen_info #ifdef checks

Nam Cao <namcao@linutronix.de>
    riscv: force PAGE_SIZE linear mapping if debug_pagealloc is enabled

Alexandre Ghiti <alexghiti@rivosinc.com>
    riscv: Don't use PGD entries for the linear mapping

Tony Luck <tony.luck@intel.com>
    x86/cpu: Fix x86_match_cpu() to match just X86_VENDOR_INTEL

Tony Luck <tony.luck@intel.com>
    x86/cpu/vfm: Add new macros to work with (vendor/family/model) values

Jeff Johnson <quic_jjohnson@quicinc.com>
    tracing: Add MODULE_DESCRIPTION() to preemptirq_delay_test

Bart Van Assche <bvanassche@acm.org>
    nbd: Fix signal handling

Bart Van Assche <bvanassche@acm.org>
    nbd: Improve the documentation of the locking assumptions

Su Yue <glass.su@suse.com>
    ocfs2: update inode fsync transaction id in ocfs2_unlink and ocfs2_link

Jeff Layton <jlayton@kernel.org>
    ocfs2: convert to new timestamp accessors

Martin Kaistra <martin.kaistra@linutronix.de>
    wifi: rtl8xxxu: enable MFP support with security flag of RX descriptor

Adrian Hunter <adrian.hunter@intel.com>
    perf script: Show also errors for --insn-trace option

Changbin Du <changbin.du@huawei.com>
    perf: script: add raw|disasm arguments to --insn-trace option

Patrice Chotard <patrice.chotard@foss.st.com>
    spi: stm32: qspi: Clamp stm32_qspi_get_mode() output to CCR_BUSWIDTH_4

Frank Li <Frank.Li@nxp.com>
    arm64: dts: imx8qm-mek: fix gpio number for reg_usdhc2_vmmc

Patrice Chotard <patrice.chotard@foss.st.com>
    spi: stm32: qspi: Fix dual flash mode sanity test in stm32_qspi_setup()

Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    dt-bindings: i2c: google,cros-ec-i2c-tunnel: correct path to i2c-controller schema

Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    dt-bindings: i2c: atmel,at91sam: correct path to i2c-controller schema

Grygorii Tertychnyi <grembeter@gmail.com>
    i2c: ocores: set IACK bit after core is enabled

Peter Xu <peterx@redhat.com>
    mm/page_table_check: fix crash on ZONE_DEVICE

Eric Dumazet <edumazet@google.com>
    tcp: clear tp->retrans_stamp in tcp_rcv_fastopen_synack()

Rafael Aquini <aquini@redhat.com>
    mm: mmap: allow for the maximum number of bits for randomizing mmap_base by default

Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    serial: 8250_dw: Revert "Move definitions to the shared header"

Ard Biesheuvel <ardb@kernel.org>
    efi/x86: Free EFI memory map only when installing a new one.

Aleksandr Nogikh <nogikh@google.com>
    kcov: don't lose track of remote references during softirqs

Peter Oberparleiter <oberpar@linux.ibm.com>
    gcov: add support for GCC 14

Joseph Qi <joseph.qi@linux.alibaba.com>
    ocfs2: fix NULL pointer dereference in ocfs2_abort_trigger()

Joseph Qi <joseph.qi@linux.alibaba.com>
    ocfs2: fix NULL pointer dereference in ocfs2_journal_dirty()

Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    dt-bindings: dma: fsl-edma: fix dma-channels constraints

Alex Deucher <alexander.deucher@amd.com>
    drm/amdgpu: fix UBSAN warning in kv_dpm.c

Alex Deucher <alexander.deucher@amd.com>
    drm/radeon: fix UBSAN warning in kv_dpm.c

Jani Nikula <jani.nikula@intel.com>
    drm/i915/mso: using joiner is not possible with eDP MSO

Pablo CaÃ±o <pablocpascual@gmail.com>
    ALSA: hda/realtek: Add quirk for Lenovo Yoga Pro 7 14AHP9

Edson Juliano Drosdeck <edson.drosdeck@gmail.com>
    ALSA: hda/realtek: Limit mic boost on N14AP7

Andy Chi <andy.chi@canonical.com>
    ALSA: hda/realtek: fix mute/micmute LEDs don't work for ProBook 445/465 G11.

Miklos Szeredi <mszeredi@redhat.com>
    ovl: fix encoding fid for lower only root

Jason Gunthorpe <jgg@ziepe.ca>
    RDMA/mlx5: Follow rb_key.ats when creating new mkeys

Jason Gunthorpe <jgg@ziepe.ca>
    RDMA/mlx5: Remove extra unlock on error path

Honggang LI <honggangli@163.com>
    RDMA/rxe: Fix data copy for IB_SEND_INLINE

Sean Christopherson <seanjc@google.com>
    KVM: x86: Always sync PIR to IRR prior to scanning I/O APIC routes

Marc Zyngier <maz@kernel.org>
    KVM: arm64: Disassociate vcpus from redistributor region on teardown

Breno Leitao <leitao@debian.org>
    KVM: Fix a data race on last_boosted_vcpu in kvm_vcpu_on_spin()

Hui Li <lihui@loongson.cn>
    LoongArch: Fix multiple hardware watchpoint issues

Hui Li <lihui@loongson.cn>
    LoongArch: Trigger user-space watchpoints correctly

Hui Li <lihui@loongson.cn>
    LoongArch: Fix watchpoint setting error

Steve French <stfrench@microsoft.com>
    cifs: fix typo in module parameter enable_gcm_256

Joel Slebodnick <jslebodn@redhat.com>
    scsi: ufs: core: Free memory allocated for model before reinit

Boris Burkov <boris@bur.io>
    btrfs: retry block group reclaim without infinite loop

Ignat Korchagin <ignat@cloudflare.com>
    net: do not leave a dangling sk pointer, when socket creation fails

Jose Ignacio Tornos Martinez <jtornosm@redhat.com>
    net: usb: ax88179_178a: improve reset check

Oleksij Rempel <o.rempel@pengutronix.de>
    net: stmmac: Assign configured channel value to EXTTS event

Carlos Llamas <cmllamas@google.com>
    locking/atomic: scripts: fix ${atomic}_sub_and_test() kerneldoc

Baokun Li <libaokun1@huawei.com>
    ext4: fix slab-out-of-bounds in ext4_mb_find_good_group_avg_frag_lists()

Baokun Li <libaokun1@huawei.com>
    ext4: avoid overflow when setting values via sysfs

Martin Kaiser <martin@kaiser.cx>
    arm64: defconfig: enable the vf610 gpio driver

Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    ACPI: EC: Evaluate orphan _REG under EC device

Konstantin Taranov <kotaranov@microsoft.com>
    RDMA/mana_ib: Ignore optional access flags for MRs

Patrisious Haddad <phaddad@nvidia.com>
    RDMA/mlx5: Add check for srq max_sge attribute

Yishai Hadas <yishaih@nvidia.com>
    RDMA/mlx5: Fix unwind flow as part of mlx5_ib_stage_init_init

Sudeep Holla <sudeep.holla@arm.com>
    firmware: psci: Fix return value from psci_system_suspend()

Chenliang Li <cliang01.li@samsung.com>
    io_uring/rsrc: fix incorrect assignment of iter->nr_segs in io_import_fixed

Marc Kleine-Budde <mkl@pengutronix.de>
    spi: spi-imx: imx51: revert burst length calculation back to bits_per_word

Raju Rangoju <Raju.Rangoju@amd.com>
    ACPICA: Revert "ACPICA: avoid Info: mapping multiple BARs. Your kernel is fine."

Max Krummenacher <max.krummenacher@toradex.com>
    arm64: dts: freescale: imx8mm-verdin: enable hysteresis on slow input pin

Fabio Estevam <festevam@gmail.com>
    arm64: dts: imx93-11x11-evk: Remove the 'no-sdio' property

Tim Harvey <tharvey@gateworks.com>
    arm64: dts: freescale: imx8mp-venice-gw73xx-2x: fix BT shutdown GPIO

Marek Vasut <marex@denx.de>
    arm64: dts: imx8mp: Fix TC9595 input clock on DH i.MX8M Plus DHCOM SoM

Marek Vasut <marex@denx.de>
    arm64: dts: imx8mp: Fix TC9595 reset GPIO on DH i.MX8M Plus DHCOM SoM

Julien Panis <jpanis@baylibre.com>
    thermal/drivers/mediatek/lvts_thermal: Return error in case of invalid efuse data

Kalle Niemi <kaleposti@gmail.com>
    regulator: bd71815: fix ramp values

Nikita Shubin <n.shubin@yadro.com>
    dmaengine: ioatdma: Fix missing kmem_cache_destroy()

Arnd Bergmann <arnd@arndb.de>
    dmaengine: fsl-edma: avoid linking both modules

Nikita Shubin <n.shubin@yadro.com>
    dmaengine: ioatdma: Fix kmemleak in ioat_pci_probe()

Nikita Shubin <n.shubin@yadro.com>
    dmaengine: ioatdma: Fix error path in ioat3_dma_probe()

Nikita Shubin <n.shubin@yadro.com>
    dmaengine: ioatdma: Fix leaking on version mismatch

Li RongQing <lirongqing@baidu.com>
    dmaengine: idxd: Fix possible Use-After-Free in irq_process_work_list

Biju Das <biju.das.jz@bp.renesas.com>
    regulator: core: Fix modpost error "regulator_get_regmap" undefined

Honggang LI <honggangli@163.com>
    RDMA/rxe: Fix responder length checking for UD request packets

Charles Keepax <ckeepax@opensource.cirrus.com>
    spi: cs42l43: Correct SPI root clock speed

Selvin Xavier <selvin.xavier@broadcom.com>
    RDMA/bnxt_re: Fix the max msix vectors macro

Oliver Neukum <oneukum@suse.com>
    net: usb: rtl8150 fix unintiatilzed variables in rtl8150_get_link_ksettings

Pavan Chebbi <pavan.chebbi@broadcom.com>
    bnxt_en: Restore PTP tx_avail count in case of skb_pad() error

Marcin Szycik <marcin.szycik@linux.intel.com>
    ice: Fix VSI list rule with ICE_SW_LKUP_LAST type

Jianguo Wu <wujianguo@chinatelecom.cn>
    netfilter: move the sysctl nf_hooks_lwtunnel into the netfilter core

Jianguo Wu <wujianguo@chinatelecom.cn>
    seg6: fix parameter passing when calling NF_HOOK() in End.DX4 and End.DX6 behaviors

Jozsef Kadlecsik <kadlec@netfilter.org>
    netfilter: ipset: Fix suspicious rcu_dereference_protected()

Geetha sowjanya <gakula@marvell.com>
    octeontx2-pf: Fix linking objects into multiple modules

Simon Horman <horms@kernel.org>
    octeontx2-pf: Add error handling to VLAN unoffload handling

Heng Qi <hengqi@linux.alibaba.com>
    virtio_net: fixing XDP for fully checksummed packets handling

Heng Qi <hengqi@linux.alibaba.com>
    virtio_net: checksum offloading handling fix

Xiaolei Wang <xiaolei.wang@windriver.com>
    net: stmmac: No need to calculate speed divider when offload is disabled

Simon Horman <horms@kernel.org>
    selftests: openvswitch: Use bash as interpreter

Dan Carpenter <dan.carpenter@linaro.org>
    ptp: fix integer overflow in max_vclocks_store

Xin Long <lucien.xin@gmail.com>
    sched: act_ct: add netns into the key of tcf_ct_flow_table

Xin Long <lucien.xin@gmail.com>
    tipc: force a dst refcount before doing decryption

David Ruth <druth@chromium.org>
    net/sched: act_api: fix possible infinite loop in tcf_idr_check_alloc()

Pedro Tammela <pctammela@mojatatu.com>
    net/sched: act_api: rely on rcu in tcf_idr_check_alloc

Raju Lakkaraju <Raju.Lakkaraju@microchip.com>
    net: phy: mxl-gpy: Remove interrupt mask clearing from config_init

Raju Lakkaraju <Raju.Lakkaraju@microchip.com>
    net: lan743x: Support WOL at both the PHY and MAC appropriately

Raju Lakkaraju <Raju.Lakkaraju@microchip.com>
    net: lan743x: disable WOL upon resume to restore full data path operation

Stefan Wahren <wahrenst@gmx.net>
    qca_spi: Make interrupt remembering atomic

Yue Haibing <yuehaibing@huawei.com>
    netns: Make get_net_ns() handle zero refcount net

Eric Dumazet <edumazet@google.com>
    xfrm6: check ip6_dst_idev() return value in xfrm6_get_saddr()

Eric Dumazet <edumazet@google.com>
    ipv6: prevent possible NULL dereference in rt6_probe()

Eric Dumazet <edumazet@google.com>
    ipv6: prevent possible NULL deref in fib6_nh_init()

Gavrilov Ilia <Ilia.Gavrilov@infotecs.ru>
    netrom: Fix a memory leak in nr_heartbeat_expiry()

Ajrat Makhmutov <rautyrauty@gmail.com>
    ALSA: hda/realtek: Enable headset mic on IdeaPad 330-17IKB 81DM

Florian Westphal <fw@strlen.de>
    bpf: Avoid splat in pskb_pull_reason

Simon Trimmer <simont@opensource.cirrus.com>
    ALSA: hda: tas2781: Component should be unbound before deconstruction

Simon Trimmer <simont@opensource.cirrus.com>
    ALSA: hda: cs35l56: Component should be unbound before deconstruction

Ondrej Mosnacek <omosnace@redhat.com>
    cipso: fix total option length computation

Aryan Srivastava <aryan.srivastava@alliedtelesis.co.nz>
    net: mvpp2: use slab_build_skb for oversized frames

Johannes Thumshirn <johannes.thumshirn@wdc.com>
    btrfs: zoned: allocate dummy checksums for zoned NODATASUM writes

En-Wei Wu <en-wei.wu@canonical.com>
    ice: avoid IRQ collision to fix init failure on ACPI S3 resume

Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
    ALSA/hda: intel-dsp-config: Document AVS as dsp_driver option

Dustin L. Howett <dustin@howett.net>
    ALSA: hda/realtek: Remove Framework Laptop 16 from quirks

Masami Hiramatsu (Google) <mhiramat@kernel.org>
    tracing: Build event generation tests only as modules

Christian Marangi <ansuelsmth@gmail.com>
    mips: bmips: BCM6358: make sure CBR is correctly set

Ilpo JÃ¤rvinen <ilpo.jarvinen@linux.intel.com>
    MIPS: Routerboard 532: Fix vendor retry check code

Takashi Iwai <tiwai@suse.de>
    ALSA: seq: ump: Fix missing System Reset message handling

Simon Trimmer <simont@opensource.cirrus.com>
    ALSA: hda: cs35l41: Possible null pointer dereference in cs35l41_hda_unbind()

Ilpo JÃ¤rvinen <ilpo.jarvinen@linux.intel.com>
    PCI: Do not wait for disconnected devices when resuming

Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    ACPI: EC: Install address space handler at the namespace root

Peng Ma <andypma@tencent.com>
    cpufreq: amd-pstate: fix memory leak on CPU EPP exit

Alex Williamson <alex.williamson@redhat.com>
    vfio/pci: Collect hot-reset devices to local buffer

Linus Torvalds <torvalds@linux-foundation.org>
    tty: add the option to have a tty reject a new ldisc

Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    usb: gadget: function: Remove usage of the deprecated ida_simple_xx() API

Parker Newman <pnewman@connecttech.com>
    serial: exar: adding missing CTI and Exar PCI ids

Esben Haabendal <esben@geanix.com>
    serial: imx: Introduce timeout when waiting on transmitter empty

Songyang Li <leesongyang@outlook.com>
    MIPS: Octeon: Add PCIe link status check

Jaegeuk Kim <jaegeuk@kernel.org>
    f2fs: don't set RO when shutting down f2fs

Mario Limonciello <mario.limonciello@amd.com>
    PCI/PM: Avoid D3cold for HP Pavilion 17 PC/1972 PCIe Ports

Roman Smirnov <r.smirnov@omp.ru>
    udf: udftime: prevent overflow in udf_disk_stamp_to_time()

Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    usb: typec: ucsi_glink: drop special handling for CCI_BUSY

Hans de Goede <hdegoede@redhat.com>
    usb: dwc3: pci: Don't set "linux,phy_charger_detect" property on Lenovo Yoga Tab2 1380

Joao Pinto <Joao.Pinto@synopsys.com>
    Avoid hw_desc array overrun in dw-axi-dmac

Alex Henrie <alexhenrie24@gmail.com>
    usb: misc: uss720: check for incompatible versions of the Belkin F5U002

Yunlei He <heyunlei@oppo.com>
    f2fs: remove clear SB_INLINECRYPT flag in default_options

Michael Grzeschik <m.grzeschik@pengutronix.de>
    usb: gadget: uvc: configfs: ensure guid to be valid before set

Stephen Brennan <stephen.s.brennan@oracle.com>
    kprobe/ftrace: bail out if ftrace was killed

Baokun Li <libaokun1@huawei.com>
    ext4: fix uninitialized ratelimit_state->lock access in __ext4_fill_super()

Aleksandr Aprelkov <aaprelkov@usergate.com>
    iommu/arm-smmu-v3: Free MSIs in case of ENOMEM

Tzung-Bi Shih <tzungbi@kernel.org>
    power: supply: cros_usbpd: provide ID table for avoiding fallback match

Ben Fradella <bfradell@netapp.com>
    platform/x86: p2sb: Don't init until unassigned resources have been assigned

Michael Ellerman <mpe@ellerman.id.au>
    powerpc/io: Avoid clang null pointer arithmetic warnings

Fullway Wang <fullwaywang@outlook.com>
    media: mtk-vcodec: potential null pointer deference in SCP

Ricardo Ribalda <ribalda@chromium.org>
    media: intel/ipu6: Fix build with !ACPI

Nathan Lynch <nathanl@linux.ibm.com>
    powerpc/pseries: Enforce hcall result buffer validity and size

Stefan Binding <sbinding@opensource.cirrus.com>
    ALSA: hda/realtek: Add quirks for Lenovo 13X

Erico Nunes <nunes.erico@gmail.com>
    drm/lima: mask irqs in timeout path before hard reset

Erico Nunes <nunes.erico@gmail.com>
    drm/lima: add mask irq callback to gp and pp

Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
    ASoC: Intel: sof_sdw: add quirk for Dell SKU 0C0F

Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
    ASoC: Intel: sof_sdw: add JD2 quirk for HP Omen 14

Arvid Norlander <lkml@vorpal.se>
    platform/x86: toshiba_acpi: Add quirk for buttons on Z830

Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
    drm/amd/display: Exit idle optimizations before HDCP execution

Uri Arev <me@wantyapps.xyz>
    Bluetooth: ath3k: Fix multiple issues reported by checkpatch.pl

Takashi Iwai <tiwai@suse.de>
    ACPI: video: Add backlight=native quirk for Lenovo Slim 7 16ARH7

Luke D. Jones <luke@ljones.dev>
    HID: asus: fix more n-key report descriptors if n-key quirked

Sean O'Brien <seobrien@chromium.org>
    HID: Add quirk for Logitech Casa touchpad

Leon Yen <leon.yen@mediatek.com>
    wifi: mt76: mt7921s: fix potential hung tasks during chip recovery

Breno Leitao <leitao@debian.org>
    netpoll: Fix race condition in netpoll_owner_active

Luiz Angelo Daros de Luca <luizluca@gmail.com>
    net: dsa: realtek: keep default LED state in rtl8366rb

Kunwu Chan <chentao@kylinos.cn>
    kselftest: arm64: Add a null pointer check

Davide Caratti <dcaratti@redhat.com>
    net/sched: fix false lockdep warning on qdisc root lock

Daniel Golle <daniel@makrotopia.org>
    net: sfp: add quirk for ATS SFP-GE-T 1000Base-TX module

Manish Rangankar <mrangankar@marvell.com>
    scsi: qedi: Fix crash while reading debugfs attribute

Wander Lairson Costa <wander@redhat.com>
    drop_monitor: replace spin_lock by raw_spin_lock

Hans de Goede <hdegoede@redhat.com>
    ACPI: x86: Add PNP_UART1_SKIP quirk for Lenovo Blade2 tablets

Eric Dumazet <edumazet@google.com>
    af_packet: avoid a false positive warning in packet_setsockopt()

Arnd Bergmann <arnd@arndb.de>
    wifi: ath9k: work around memset overflow warning

Eric Dumazet <edumazet@google.com>
    batman-adv: bypass empty buckets in batadv_purge_orig_ref()

Yonghong Song <yonghong.song@linux.dev>
    selftests/bpf: Fix flaky test btf_map_in_map/lookup_update

Alessandro Carminati (Red Hat) <alessandro.carminati@gmail.com>
    selftests/bpf: Prevent client connect before server bind in test_tc_tunnel.sh

Rand Deeb <rand.sec96@gmail.com>
    ssb: Fix potential NULL pointer dereference in ssb_device_uevent()

Justin Stitt <justinstitt@google.com>
    block/ioctl: prefer different overflow check

Zqiang <qiang.zhang1211@gmail.com>
    rcutorture: Fix invalid context warning when enable srcu barrier testing

Zqiang <qiang.zhang1211@gmail.com>
    rcutorture: Make stall-tasks directly exit when rcutorture tests end

Paul E. McKenney <paulmck@kernel.org>
    rcutorture: Fix rcu_torture_one_read() pipe_count overflow comment

Jens Axboe <axboe@kernel.dk>
    io_uring/sqpoll: work around a potential audit memory leak

Chenghai Huang <huangchenghai2@huawei.com>
    crypto: hisilicon/qm - Add the err memory release process to qm uninit

Chenghai Huang <huangchenghai2@huawei.com>
    crypto: hisilicon/sec - Fix memory leak for sec resource release

Herbert Xu <herbert@gondor.apana.org.au>
    padata: Disable BH when taking works lock on MT path

Kemeng Shi <shikemeng@huaweicloud.com>
    fs/writeback: bail out if there is no more inodes for IO and queued once


-------------

Diffstat:

 .../devicetree/bindings/dma/fsl,edma.yaml          |   4 +-
 .../devicetree/bindings/i2c/atmel,at91sam-i2c.yaml |   2 +-
 .../bindings/i2c/google,cros-ec-i2c-tunnel.yaml    |   2 +-
 Makefile                                           |   4 +-
 arch/alpha/kernel/setup.c                          |   2 +
 arch/alpha/kernel/sys_sio.c                        |   2 +
 arch/arm64/boot/dts/freescale/imx8mm-verdin.dtsi   |   2 +-
 .../arm64/boot/dts/freescale/imx8mp-dhcom-som.dtsi |   4 +-
 .../boot/dts/freescale/imx8mp-venice-gw73xx.dtsi   |   2 +-
 arch/arm64/boot/dts/freescale/imx8qm-mek.dts       |   2 +-
 arch/arm64/boot/dts/freescale/imx93-11x11-evk.dts  |   1 -
 arch/arm64/configs/defconfig                       |   1 +
 arch/arm64/kernel/efi.c                            |   4 -
 arch/arm64/kernel/image-vars.h                     |   2 +
 arch/arm64/kvm/vgic/vgic-init.c                    |   2 +-
 arch/arm64/kvm/vgic/vgic-mmio-v3.c                 |  15 +-
 arch/arm64/kvm/vgic/vgic.h                         |   2 +-
 arch/csky/kernel/probes/ftrace.c                   |   3 +
 arch/ia64/kernel/setup.c                           |   6 +
 arch/loongarch/include/asm/efi.h                   |   2 -
 arch/loongarch/include/asm/hw_breakpoint.h         |   4 +-
 arch/loongarch/kernel/efi.c                        |   8 +-
 arch/loongarch/kernel/ftrace_dyn.c                 |   3 +
 arch/loongarch/kernel/head.S                       |   3 +-
 arch/loongarch/kernel/hw_breakpoint.c              |  96 ++++++-----
 arch/loongarch/kernel/image-vars.h                 |   3 +-
 arch/loongarch/kernel/ptrace.c                     |  47 ++---
 arch/loongarch/kernel/setup.c                      |   3 -
 arch/loongarch/kernel/vmlinux.lds.S                |  11 +-
 arch/mips/bmips/setup.c                            |   3 +-
 arch/mips/kernel/setup.c                           |   2 +-
 arch/mips/pci/ops-rc32434.c                        |   4 +-
 arch/mips/pci/pcie-octeon.c                        |   6 +
 arch/mips/sibyte/swarm/setup.c                     |   2 +-
 arch/mips/sni/setup.c                              |   2 +-
 arch/parisc/kernel/ftrace.c                        |   3 +
 arch/powerpc/include/asm/hvcall.h                  |   8 +-
 arch/powerpc/include/asm/io.h                      |  24 +--
 arch/powerpc/kernel/kprobes-ftrace.c               |   3 +
 arch/riscv/kernel/image-vars.h                     |   2 +
 arch/riscv/kernel/probes/ftrace.c                  |   3 +
 arch/riscv/kernel/setup.c                          |  12 --
 arch/riscv/mm/init.c                               |  13 +-
 arch/s390/kernel/ftrace.c                          |   3 +
 arch/x86/include/asm/cpu_device_id.h               |  98 +++++++++++
 arch/x86/include/asm/efi.h                         |   1 -
 arch/x86/kernel/cpu/match.c                        |   4 +-
 arch/x86/kernel/kprobes/ftrace.c                   |   3 +
 arch/x86/kvm/x86.c                                 |   9 +-
 arch/x86/platform/efi/memmap.c                     |  12 +-
 block/ioctl.c                                      |   2 +-
 drivers/acpi/acpica/acevents.h                     |   4 +
 drivers/acpi/acpica/evregion.c                     |   6 +-
 drivers/acpi/acpica/evxfregn.c                     |  54 ++++++
 drivers/acpi/acpica/exregion.c                     |  23 +--
 drivers/acpi/ec.c                                  |  28 ++-
 drivers/acpi/internal.h                            |   1 -
 drivers/acpi/video_detect.c                        |   8 +
 drivers/acpi/x86/utils.c                           |  20 ++-
 drivers/block/nbd.c                                |  34 ++--
 drivers/bluetooth/ath3k.c                          |  25 ++-
 drivers/cpufreq/amd-pstate.c                       |   7 +
 drivers/crypto/hisilicon/qm.c                      |   5 +-
 drivers/crypto/hisilicon/sec2/sec_crypto.c         |   4 +-
 drivers/dma/Kconfig                                |   2 +-
 drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c     |   6 +-
 drivers/dma/dw-axi-dmac/dw-axi-dmac.h              |   1 +
 drivers/dma/idxd/irq.c                             |   4 +-
 drivers/dma/ioat/init.c                            |  55 +++---
 drivers/firmware/efi/efi-init.c                    |  14 +-
 drivers/firmware/efi/libstub/efi-stub-entry.c      |   8 +-
 drivers/firmware/efi/libstub/loongarch-stub.c      |   9 +-
 drivers/firmware/efi/libstub/loongarch-stub.h      |   4 +
 drivers/firmware/efi/libstub/loongarch.c           |   8 +-
 drivers/firmware/efi/memmap.c                      |   9 -
 drivers/firmware/psci/psci.c                       |   4 +-
 drivers/gpu/drm/amd/pm/legacy-dpm/kv_dpm.c         |   2 +
 drivers/gpu/drm/i915/display/intel_dp.c            |   4 +
 drivers/gpu/drm/lima/lima_bcast.c                  |  12 ++
 drivers/gpu/drm/lima/lima_bcast.h                  |   3 +
 drivers/gpu/drm/lima/lima_gp.c                     |   8 +
 drivers/gpu/drm/lima/lima_pp.c                     |  18 ++
 drivers/gpu/drm/lima/lima_sched.c                  |   7 +
 drivers/gpu/drm/lima/lima_sched.h                  |   1 +
 drivers/gpu/drm/radeon/sumo_dpm.c                  |   2 +
 drivers/hid/hid-asus.c                             |  51 +++---
 drivers/hid/hid-ids.h                              |   1 +
 drivers/hid/hid-multitouch.c                       |   6 +
 drivers/i2c/busses/i2c-ocores.c                    |   2 +-
 drivers/infiniband/hw/bnxt_re/bnxt_re.h            |   4 +-
 drivers/infiniband/hw/mana/mr.c                    |   1 +
 drivers/infiniband/hw/mlx5/main.c                  |   4 +-
 drivers/infiniband/hw/mlx5/mr.c                    |   5 +-
 drivers/infiniband/hw/mlx5/srq.c                   |  13 +-
 drivers/infiniband/sw/rxe/rxe_resp.c               |  13 ++
 drivers/infiniband/sw/rxe/rxe_verbs.c              |   2 +-
 drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c        |   2 +-
 drivers/media/pci/intel/ipu-bridge.c               |  66 +++++--
 .../mediatek/vcodec/common/mtk_vcodec_fw_scp.c     |   2 +
 drivers/net/dsa/realtek/rtl8366rb.c                |  87 +++-------
 drivers/net/ethernet/broadcom/bnxt/bnxt.c          |   5 +-
 drivers/net/ethernet/intel/ice/ice_main.c          |   7 +-
 drivers/net/ethernet/intel/ice/ice_switch.c        |   6 +-
 drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c    |   5 +-
 .../net/ethernet/marvell/octeontx2/nic/Makefile    |   3 +-
 .../ethernet/marvell/octeontx2/nic/otx2_dcbnl.c    |   7 +
 .../ethernet/marvell/octeontx2/nic/otx2_devlink.c  |   2 +
 .../net/ethernet/marvell/octeontx2/nic/otx2_txrx.c |   5 +-
 drivers/net/ethernet/microchip/lan743x_ethtool.c   |  44 ++++-
 drivers/net/ethernet/microchip/lan743x_main.c      |  48 +++++-
 drivers/net/ethernet/microchip/lan743x_main.h      |  28 +++
 drivers/net/ethernet/qualcomm/qca_debug.c          |   6 +-
 drivers/net/ethernet/qualcomm/qca_spi.c            |  16 +-
 drivers/net/ethernet/qualcomm/qca_spi.h            |   3 +-
 .../net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c  |   6 +-
 drivers/net/ethernet/stmicro/stmmac/stmmac_tc.c    |  40 +++--
 drivers/net/phy/mxl-gpy.c                          |  58 ++++---
 drivers/net/phy/sfp.c                              |   3 +
 drivers/net/usb/ax88179_178a.c                     |  18 +-
 drivers/net/usb/rtl8150.c                          |   3 +-
 drivers/net/virtio_net.c                           |  32 +++-
 drivers/net/wireless/ath/ath.h                     |   6 +-
 drivers/net/wireless/ath/ath9k/main.c              |   3 +-
 drivers/net/wireless/mediatek/mt76/mt7921/mac.c    |   2 +
 .../net/wireless/mediatek/mt76/mt7921/pci_mac.c    |   2 -
 .../net/wireless/mediatek/mt76/mt7921/sdio_mac.c   |   2 -
 drivers/net/wireless/mediatek/mt76/sdio.c          |   3 +-
 drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h   |   9 +
 .../net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c  |   7 +-
 drivers/pci/pci.c                                  |  17 ++
 drivers/platform/x86/p2sb.c                        |  29 ++--
 drivers/platform/x86/toshiba_acpi.c                |  36 +++-
 drivers/power/supply/cros_usbpd-charger.c          |  11 +-
 drivers/ptp/ptp_sysfs.c                            |   3 +-
 drivers/regulator/bd71815-regulator.c              |   2 +-
 drivers/regulator/core.c                           |   1 +
 drivers/scsi/qedi/qedi_debugfs.c                   |  12 +-
 drivers/spi/spi-cs42l43.c                          |   2 +-
 drivers/spi/spi-imx.c                              |  14 +-
 drivers/spi/spi-stm32-qspi.c                       |  12 +-
 drivers/ssb/main.c                                 |   4 +-
 drivers/thermal/mediatek/lvts_thermal.c            |   6 +-
 drivers/tty/serial/8250/8250_dw.c                  |  27 +++
 drivers/tty/serial/8250/8250_dwlib.h               |  32 ----
 drivers/tty/serial/8250/8250_exar.c                |  42 +++++
 drivers/tty/serial/imx.c                           |   7 +-
 drivers/tty/tty_ldisc.c                            |   6 +
 drivers/tty/vt/vt.c                                |  10 ++
 drivers/ufs/core/ufshcd.c                          |   1 +
 drivers/usb/dwc3/dwc3-pci.c                        |   8 +-
 drivers/usb/gadget/function/f_hid.c                |   6 +-
 drivers/usb/gadget/function/f_printer.c            |   6 +-
 drivers/usb/gadget/function/rndis.c                |   4 +-
 drivers/usb/gadget/function/uvc_configfs.c         |  14 +-
 drivers/usb/misc/uss720.c                          |  22 ++-
 drivers/usb/typec/ucsi/ucsi_glink.c                |   8 +-
 drivers/vfio/pci/vfio_pci_core.c                   |  78 +++++----
 fs/btrfs/bio.c                                     |   4 +-
 fs/btrfs/block-group.c                             |  11 +-
 fs/ext4/mballoc.c                                  |   4 +
 fs/ext4/super.c                                    |  22 ++-
 fs/ext4/sysfs.c                                    |  24 ++-
 fs/f2fs/super.c                                    |  12 +-
 fs/fs-writeback.c                                  |   7 +-
 fs/ocfs2/acl.c                                     |   4 +-
 fs/ocfs2/alloc.c                                   |   6 +-
 fs/ocfs2/aops.c                                    |   6 +-
 fs/ocfs2/dir.c                                     |   9 +-
 fs/ocfs2/dlmfs/dlmfs.c                             |   4 +-
 fs/ocfs2/dlmglue.c                                 |  29 ++--
 fs/ocfs2/file.c                                    |  30 ++--
 fs/ocfs2/inode.c                                   |  28 +--
 fs/ocfs2/journal.c                                 | 192 ++++++++++++---------
 fs/ocfs2/move_extents.c                            |   4 +-
 fs/ocfs2/namei.c                                   |  18 +-
 fs/ocfs2/ocfs2.h                                   |  27 +++
 fs/ocfs2/refcounttree.c                            |  12 +-
 fs/ocfs2/super.c                                   |   4 +-
 fs/ocfs2/xattr.c                                   |   4 +-
 fs/overlayfs/export.c                              |   6 +-
 fs/smb/client/cifsfs.c                             |   2 +-
 fs/udf/udftime.c                                   |  11 +-
 include/acpi/acpixf.h                              |   4 +
 include/linux/atomic/atomic-arch-fallback.h        |   6 +-
 include/linux/atomic/atomic-instrumented.h         |   8 +-
 include/linux/atomic/atomic-long.h                 |   4 +-
 include/linux/kcov.h                               |   2 +
 include/linux/kprobes.h                            |   7 +
 include/linux/mod_devicetable.h                    |   2 +
 include/linux/pci.h                                |   7 +-
 include/linux/tty_driver.h                         |   8 +
 include/net/netns/netfilter.h                      |   3 +
 include/net/sch_generic.h                          |   1 +
 io_uring/rsrc.c                                    |   1 -
 io_uring/sqpoll.c                                  |   8 +
 kernel/gcov/gcc_4_7.c                              |   4 +-
 kernel/kcov.c                                      |   1 +
 kernel/kprobes.c                                   |   6 +
 kernel/padata.c                                    |   8 +-
 kernel/rcu/rcutorture.c                            |  16 +-
 kernel/trace/Kconfig                               |   4 +-
 kernel/trace/ftrace.c                              |   1 +
 kernel/trace/preemptirq_delay_test.c               |   1 +
 mm/page_table_check.c                              |  11 +-
 net/batman-adv/originator.c                        |   2 +
 net/core/drop_monitor.c                            |  20 +--
 net/core/filter.c                                  |   5 +
 net/core/net_namespace.c                           |   9 +-
 net/core/netpoll.c                                 |   2 +-
 net/core/sock.c                                    |   3 +
 net/ipv4/cipso_ipv4.c                              |  12 +-
 net/ipv4/tcp_input.c                               |   1 +
 net/ipv6/route.c                                   |   4 +-
 net/ipv6/seg6_local.c                              |   8 +-
 net/ipv6/xfrm6_policy.c                            |   8 +-
 net/netfilter/core.c                               |  13 +-
 net/netfilter/ipset/ip_set_core.c                  |  11 +-
 net/netfilter/nf_conntrack_standalone.c            |  15 --
 net/netfilter/nf_hooks_lwtunnel.c                  |  67 +++++++
 net/netfilter/nf_internals.h                       |   6 +
 net/netrom/nr_timer.c                              |   3 +-
 net/packet/af_packet.c                             |  26 +--
 net/sched/act_api.c                                |  66 ++++---
 net/sched/act_ct.c                                 |  16 +-
 net/sched/sch_api.c                                |   1 +
 net/sched/sch_generic.c                            |   4 +
 net/sched/sch_htb.c                                |  22 +--
 net/tipc/node.c                                    |   1 +
 scripts/atomic/kerneldoc/sub_and_test              |   2 +-
 sound/core/seq/seq_ump_convert.c                   |   2 +
 sound/hda/intel-dsp-config.c                       |   2 +-
 sound/pci/hda/cs35l41_hda.c                        |   2 +-
 sound/pci/hda/cs35l56_hda.c                        |   4 +-
 sound/pci/hda/patch_realtek.c                      |  11 +-
 sound/pci/hda/tas2781_hda_i2c.c                    |   4 +-
 sound/soc/intel/boards/sof_sdw.c                   |  18 ++
 tools/perf/Documentation/perf-script.txt           |   7 +-
 tools/perf/builtin-script.c                        |  24 ++-
 tools/testing/selftests/arm64/tags/tags_test.c     |   4 +
 .../selftests/bpf/prog_tests/btf_map_in_map.c      |  26 +--
 tools/testing/selftests/bpf/test_tc_tunnel.sh      |  13 +-
 .../selftests/net/openvswitch/openvswitch.sh       |   2 +-
 virt/kvm/kvm_main.c                                |   5 +-
 243 files changed, 1956 insertions(+), 1007 deletions(-)


.

From: Aradhya Bhatia <a-bhatia1@ti.com>
To: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>,
        Tomi Valkeinen
	<tomi.valkeinen@ideasonboard.com>,
        Andrzej Hajda <andrzej.hajda@intel.com>,
        Neil Armstrong <neil.armstrong@linaro.org>,
        Robert Foss <rfoss@kernel.org>,
        Laurent Pinchart <Laurent.pinchart@ideasonboard.com>,
        Jonas Karlman
	<jonas@kwiboo.se>,
        Jernej Skrabec <jernej.skrabec@gmail.com>,
        Maarten
 Lankhorst <maarten.lankhorst@linux.intel.com>,
        Maxime Ripard
	<mripard@kernel.org>,
        Thomas Zimmermann <tzimmermann@suse.de>,
        David Airlie
	<airlied@gmail.com>, Daniel Vetter <daniel@ffwll.ch>,
        Sam Ravnborg
	<sam@ravnborg.org>
CC: DRI Development List <dri-devel@lists.freedesktop.org>,
        Linux Kernel List
	<linux-kernel@vger.kernel.org>,
        Aradhya Bhatia <a-bhatia1@ti.com>, Devarsh
 Thakkar <devarsht@ti.com>,
        Jayesh Choudhary <j-choudhary@ti.com>, Jai Luthra
	<j-luthra@ti.com>
Subject: [PATCH] drm/bridge: display-connector: Fix atomic_get_input_bus_fmt hook
Date: Tue, 25 Jun 2024 15:20:49 +0530
Message-ID: <20240625095049.328461-1-a-bhatia1@ti.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257945
Newsgroups: org.kernel.vger.linux-kernel,org.freedesktop.lists.dri-devel
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

The display-connector acts as a pass-through bridge. To truly reflect
that, this bridge should accept the same input format, as it expects to
output. That in turn should be the same as what the preceding bridge has
to output.

While the get_output_fmt hook does exactly that by calling the same hook
of the previous bridge, the get_input_fmt hook should simply propagate
the expected output format as its required input format.

Let's say bridge(n) converts YUV bus format to RGB before transmitting
the video signals. B is supposed to be RGB and A is YUV. The
get_input_fmt hook of bridge(n) should receive RGB as its expected
output format for it to select YUV as its required input format.

Moreover, since the display-connector is a pass-through bridge, X and Y
should both be RGB as well.

    +-------------+            +-------------+
A   |             |   B    X   |             |   Y
--->|  Bridge(n)  +--->    --->| Display     +--->
    |             |            | Connector   |
    |             |            |             |
    +-------------+            +-------------+

But that's not what's happening at the moment.

The core will call get_output_fmt hook of display-connector, which will
call the same hook of bridge(n). Y will get set to RGB because B is RGB.

Now the core will call get_input_fmt hook of display-connector with Y =
RGB as its expected output format. This hook will in turn call the
get_input_fmt hook of bridge(n), with expected output as RGB. This hook
will then return YUV as its required input format, which will set X =
YUV.

This is where things get off the track. The core will then call
bridge(n)'s get_input_fmt hook but this time the expected output will
have changed to X = YUV, instead of what ideally should have been X =
RGB. We don't know how bridge(n)'s input format requirement will change
now that its expected output format isn't RGB but YUV.

Ideally, formats Y, X, B need to be the same and the get_input_fmt hook
for bridge(n) should be called with these as its expected output format.
Calling that hook twice can potentially change the expected output
format - which can then change the required input format again, or it
might just throw an -ENOTSUPP error.

While many bridges don't utilize these APIs, or in a lot of cases A and
B are same anyway, it is not the biggest problem, but one that should be
fixed anyway.

Fix this.

Fixes: 7cd70656d128 ("drm/bridge: display-connector: implement bus fmts callbacks")
Signed-off-by: Aradhya Bhatia <a-bhatia1@ti.com>
---
 drivers/gpu/drm/bridge/display-connector.c | 40 +---------------------
 1 file changed, 1 insertion(+), 39 deletions(-)

diff --git a/drivers/gpu/drm/bridge/display-connector.c b/drivers/gpu/drm/bridge/display-connector.c
index ab8e00baf3f1..eebf1fbcdd23 100644
--- a/drivers/gpu/drm/bridge/display-connector.c
+++ b/drivers/gpu/drm/bridge/display-connector.c
@@ -131,50 +131,12 @@ static u32 *display_connector_get_output_bus_fmts(struct drm_bridge *bridge,
 							      num_output_fmts);
 }
 
-/*
- * Since this bridge is tied to the connector, it acts like a passthrough,
- * so concerning the input bus formats, either pass the bus formats from the
- * previous bridge or MEDIA_BUS_FMT_FIXED (like select_bus_fmt_recursive())
- * when atomic_get_input_bus_fmts is not supported.
- * This supports negotiation if the bridge chain has all bits in place.
- */
-static u32 *display_connector_get_input_bus_fmts(struct drm_bridge *bridge,
-					struct drm_bridge_state *bridge_state,
-					struct drm_crtc_state *crtc_state,
-					struct drm_connector_state *conn_state,
-					u32 output_fmt,
-					unsigned int *num_input_fmts)
-{
-	struct drm_bridge *prev_bridge = drm_bridge_get_prev_bridge(bridge);
-	struct drm_bridge_state *prev_bridge_state;
-
-	if (!prev_bridge || !prev_bridge->funcs->atomic_get_input_bus_fmts) {
-		u32 *in_bus_fmts;
-
-		*num_input_fmts = 1;
-		in_bus_fmts = kmalloc(sizeof(*in_bus_fmts), GFP_KERNEL);
-		if (!in_bus_fmts)
-			return NULL;
-
-		in_bus_fmts[0] = MEDIA_BUS_FMT_FIXED;
-
-		return in_bus_fmts;
-	}
-
-	prev_bridge_state = drm_atomic_get_new_bridge_state(crtc_state->state,
-							    prev_bridge);
-
-	return prev_bridge->funcs->atomic_get_input_bus_fmts(prev_bridge, prev_bridge_state,
-							     crtc_state, conn_state, output_fmt,
-							     num_input_fmts);
-}
-
 static const struct drm_bridge_funcs display_connector_bridge_funcs = {
 	.attach = display_connector_attach,
 	.detect = display_connector_detect,
 	.edid_read = display_connector_edid_read,
 	.atomic_get_output_bus_fmts = display_connector_get_output_bus_fmts,
-	.atomic_get_input_bus_fmts = display_connector_get_input_bus_fmts,
+	.atomic_get_input_bus_fmts = drm_atomic_helper_bridge_propagate_bus_fmt,
 	.atomic_duplicate_state = drm_atomic_helper_bridge_duplicate_state,
 	.atomic_destroy_state = drm_atomic_helper_bridge_destroy_state,
 	.atomic_reset = drm_atomic_helper_bridge_reset,

base-commit: 62c97045b8f720c2eac807a5f38e26c9ed512371
-- 
2.34.1

.

From: Chen-Yu Tsai <wenst@chromium.org>
To: Matthias Brugger <matthias.bgg@gmail.com>,
	AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Cc: Chen-Yu Tsai <wenst@chromium.org>,
	Rob Herring <robh@kernel.org>,
	Krzysztof Kozlowski <krzk+dt@kernel.org>,
	Conor Dooley <conor+dt@kernel.org>,
	devicetree@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-mediatek@lists.infradead.org,
	linux-kernel@vger.kernel.org
Subject: [PATCH] arm64: dts: mt8183-kukui: clean up regulator tree
Date: Tue, 25 Jun 2024 17:54:38 +0800
Message-ID: <20240625095441.3474194-1-wenst@chromium.org>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257950
Newsgroups: org.kernel.vger.linux-kernel,org.infradead.lists.linux-arm-kernel,org.infradead.lists.linux-mediatek,org.kernel.vger.linux-devicetree
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Some regulators in the kukui device tree are modeled incorrectly. Some
are missing supplies and some switches are incorrectly modeled as
voltage regulators. A pass-through was incorrectly modeled as a
regulator.

Add supplies where missing, remove voltage constraints for "switches",
and drop the "bl_pp5000" pass-through.

This depends on commit 2a99858c172e ("arm64: dts: mediatek: mt8183-kukui:
Add PMIC regulator supplies") for reg_vsys.

Fixes: cd894e274b74 ("arm64: dts: mt8183: Add krane-sku176 board")
Fixes: f15722c0fef0 ("arm64: dts: mt8183: Add pwm and backlight node")
Signed-off-by: Chen-Yu Tsai <wenst@chromium.org>
---
 .../arm64/boot/dts/mediatek/mt8183-kukui.dtsi | 22 +++++--------------
 1 file changed, 6 insertions(+), 16 deletions(-)

diff --git a/arch/arm64/boot/dts/mediatek/mt8183-kukui.dtsi b/arch/arm64/boot/dts/mediatek/mt8183-kukui.dtsi
index 64b3389028e9..57d962e94af7 100644
--- a/arch/arm64/boot/dts/mediatek/mt8183-kukui.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8183-kukui.dtsi
@@ -24,7 +24,7 @@ chosen {
 	backlight_lcd0: backlight_lcd0 {
 		compatible = "pwm-backlight";
 		pwms = <&pwm0 0 500000>;
-		power-supply = <&bl_pp5000>;
+		power-supply = <&reg_vsys>;
 		enable-gpios = <&pio 176 0>;
 		brightness-levels = <0 1023>;
 		num-interpolated-steps = <1023>;
@@ -47,10 +47,9 @@ clk32k: oscillator1 {
 	it6505_pp18_reg: regulator0 {
 		compatible = "regulator-fixed";
 		regulator-name = "it6505_pp18";
-		regulator-min-microvolt = <1800000>;
-		regulator-max-microvolt = <1800000>;
 		gpio = <&pio 178 0>;
 		enable-active-high;
+		vin-supply = <&pp1800_alw>;
 	};
 
 	lcd_pp3300: regulator1 {
@@ -62,27 +61,16 @@ lcd_pp3300: regulator1 {
 		regulator-boot-on;
 	};
 
-	bl_pp5000: regulator2 {
-		compatible = "regulator-fixed";
-		regulator-name = "bl_pp5000";
-		regulator-min-microvolt = <5000000>;
-		regulator-max-microvolt = <5000000>;
-		regulator-always-on;
-		regulator-boot-on;
-	};
-
 	mmc1_fixed_power: regulator3 {
 		compatible = "regulator-fixed";
 		regulator-name = "mmc1_power";
-		regulator-min-microvolt = <3300000>;
-		regulator-max-microvolt = <3300000>;
+		vin-supply = <&pp3300_alw>;
 	};
 
 	mmc1_fixed_io: regulator4 {
 		compatible = "regulator-fixed";
 		regulator-name = "mmc1_io";
-		regulator-min-microvolt = <1800000>;
-		regulator-max-microvolt = <1800000>;
+		vin-supply = <&pp1800_alw>;
 	};
 
 	pp1800_alw: regulator5 {
@@ -92,6 +80,7 @@ pp1800_alw: regulator5 {
 		regulator-boot-on;
 		regulator-min-microvolt = <1800000>;
 		regulator-max-microvolt = <1800000>;
+		vin-supply = <&reg_vsys>;
 	};
 
 	pp3300_alw: regulator6 {
@@ -101,6 +90,7 @@ pp3300_alw: regulator6 {
 		regulator-boot-on;
 		regulator-min-microvolt = <3300000>;
 		regulator-max-microvolt = <3300000>;
+		vin-supply = <&reg_vsys>;
 	};
 
 	/* system wide semi-regulated power rail from charger */
-- 
2.45.2.741.gdbec12cfda-goog

.

From: Chen-Yu Tsai <wenst@chromium.org>
To: Matthias Brugger <matthias.bgg@gmail.com>,
	AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Cc: Chen-Yu Tsai <wenst@chromium.org>,
	Rob Herring <robh@kernel.org>,
	Krzysztof Kozlowski <krzk+dt@kernel.org>,
	Conor Dooley <conor+dt@kernel.org>,
	devicetree@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-mediatek@lists.infradead.org,
	linux-kernel@vger.kernel.org
Subject: [PATCH] arm64: dts: mediatek: mt8183-kukui-jacuzzi: Simplify DSI endpoint replacement
Date: Tue, 25 Jun 2024 17:57:04 +0800
Message-ID: <20240625095705.3474713-1-wenst@chromium.org>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257954
Newsgroups: org.kernel.vger.linux-kernel,org.infradead.lists.linux-arm-kernel,org.infradead.lists.linux-mediatek,org.kernel.vger.linux-devicetree
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Currently the Jacuzzi dtsi file redeclares the full DSI endpoint tree
from the DSI controller just to replace the remote endpoint. This is
not necessary since the local endpoint already has a label that can be
referenced. This will also confusion when the inherited layout is
changed.

Replace the redeclared DSI endpoint tree with a label reference.

Signed-off-by: Chen-Yu Tsai <wenst@chromium.org>
---
 .../boot/dts/mediatek/mt8183-kukui-jacuzzi.dtsi     | 13 ++++---------
 1 file changed, 4 insertions(+), 9 deletions(-)

diff --git a/arch/arm64/boot/dts/mediatek/mt8183-kukui-jacuzzi.dtsi b/arch/arm64/boot/dts/mediatek/mt8183-kukui-jacuzzi.dtsi
index fa4ab4d2899f..783c333107bc 100644
--- a/arch/arm64/boot/dts/mediatek/mt8183-kukui-jacuzzi.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8183-kukui-jacuzzi.dtsi
@@ -91,16 +91,11 @@ cros_ec_pwm: pwm {
 
 &dsi0 {
 	status = "okay";
-	/delete-property/#size-cells;
-	/delete-property/#address-cells;
 	/delete-node/panel@0;
-	ports {
-		port {
-			dsi_out: endpoint {
-				remote-endpoint = <&anx7625_in>;
-			};
-		};
-	};
+};
+
+&dsi_out {
+	remote-endpoint = <&anx7625_in>;
 };
 
 &i2c0 {
-- 
2.45.2.741.gdbec12cfda-goog

.

From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: stable@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	patches@lists.linux.dev,
	linux-kernel@vger.kernel.org,
	torvalds@linux-foundation.org,
	akpm@linux-foundation.org,
	linux@roeck-us.net,
	shuah@kernel.org,
	patches@kernelci.org,
	lkft-triage@lists.linaro.org,
	pavel@denx.de,
	jonathanh@nvidia.com,
	f.fainelli@gmail.com,
	sudipm.mukherjee@gmail.com,
	srw@sladewatkins.net,
	rwarsow@gmx.de,
	conor@kernel.org,
	allen.lkml@gmail.com,
	broonie@kernel.org
Subject: [PATCH 6.1 000/131] 6.1.96-rc1 review
Date: Tue, 25 Jun 2024 11:32:35 +0200
Message-ID: <20240625085525.931079317@linuxfoundation.org>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
X-stable: review
X-Patchwork-Hint: ignore
X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.1.96-rc1.gz
X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
X-KernelTest-Branch: linux-6.1.y
X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git
X-KernelTest-Version: 6.1.96-rc1
X-KernelTest-Deadline: 2024-06-27T08:55+00:00
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257956
Newsgroups: org.kernel.vger.linux-kernel,dev.linux.lists.patches,org.kernel.vger.stable
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

This is the start of the stable review cycle for the 6.1.96 release.
There are 131 patches in this series, all will be posted as a response
to this one.  If anyone has any issues with these being applied, please
let me know.

Responses should be made by Thu, 27 Jun 2024 08:54:55 +0000.
Anything received after that time might be too late.

The whole patch series can be found in one patch at:
	https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.1.96-rc1.gz
or in the git tree and branch at:
	git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-6.1.y
and the diffstat can be found below.

thanks,

greg k-h

-------------
Pseudo-Shortlog of commits:

Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Linux 6.1.96-rc1

Linus Torvalds <torvalds@linux-foundation.org>
    Revert "mm: mmap: allow for the maximum number of bits for randomizing mmap_base by default"

Andrew Ballance <andrewjballance@gmail.com>
    hid: asus: asus_report_fixup: fix potential read out of bounds

Davide Caratti <dcaratti@redhat.com>
    net/sched: unregister lockdep keys in qdisc_create/qdisc_alloc error path

Martin Leung <martin.leung@amd.com>
    drm/amd/display: revert Exit idle optimizations before HDCP execution

Matthias Maennich <maennich@google.com>
    kheaders: explicitly define file modes for archived headers

Masahiro Yamada <masahiroy@kernel.org>
    Revert "kheaders: substituting --sort in archive creation"

Tony Luck <tony.luck@intel.com>
    x86/cpu: Fix x86_match_cpu() to match just X86_VENDOR_INTEL

Tony Luck <tony.luck@intel.com>
    x86/cpu/vfm: Add new macros to work with (vendor/family/model) values

Jeff Johnson <quic_jjohnson@quicinc.com>
    tracing: Add MODULE_DESCRIPTION() to preemptirq_delay_test

Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
    pmdomain: ti-sci: Fix duplicate PD referrals

Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    ARM: dts: samsung: smdk4412: fix keypad no-autorepeat

Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    ARM: dts: samsung: exynos4412-origen: fix keypad no-autorepeat

Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    ARM: dts: samsung: smdkv310: fix keypad no-autorepeat

Adrian Hunter <adrian.hunter@intel.com>
    perf script: Show also errors for --insn-trace option

Changbin Du <changbin.du@huawei.com>
    perf: script: add raw|disasm arguments to --insn-trace option

Patrice Chotard <patrice.chotard@foss.st.com>
    spi: stm32: qspi: Clamp stm32_qspi_get_mode() output to CCR_BUSWIDTH_4

Frank Li <Frank.Li@nxp.com>
    arm64: dts: imx8qm-mek: fix gpio number for reg_usdhc2_vmmc

Patrice Chotard <patrice.chotard@foss.st.com>
    spi: stm32: qspi: Fix dual flash mode sanity test in stm32_qspi_setup()

Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    dt-bindings: i2c: google,cros-ec-i2c-tunnel: correct path to i2c-controller schema

Grygorii Tertychnyi <grembeter@gmail.com>
    i2c: ocores: set IACK bit after core is enabled

Peter Xu <peterx@redhat.com>
    mm/page_table_check: fix crash on ZONE_DEVICE

Eric Dumazet <edumazet@google.com>
    tcp: clear tp->retrans_stamp in tcp_rcv_fastopen_synack()

Rafael Aquini <aquini@redhat.com>
    mm: mmap: allow for the maximum number of bits for randomizing mmap_base by default

Aleksandr Nogikh <nogikh@google.com>
    kcov: don't lose track of remote references during softirqs

Peter Oberparleiter <oberpar@linux.ibm.com>
    gcov: add support for GCC 14

Alex Deucher <alexander.deucher@amd.com>
    drm/amdgpu: fix UBSAN warning in kv_dpm.c

Alex Deucher <alexander.deucher@amd.com>
    drm/radeon: fix UBSAN warning in kv_dpm.c

Jani Nikula <jani.nikula@intel.com>
    drm/i915/mso: using joiner is not possible with eDP MSO

Edson Juliano Drosdeck <edson.drosdeck@gmail.com>
    ALSA: hda/realtek: Limit mic boost on N14AP7

Andy Chi <andy.chi@canonical.com>
    ALSA: hda/realtek: fix mute/micmute LEDs don't work for ProBook 445/465 G11.

Sean Christopherson <seanjc@google.com>
    KVM: x86: Always sync PIR to IRR prior to scanning I/O APIC routes

Marc Zyngier <maz@kernel.org>
    KVM: arm64: Disassociate vcpus from redistributor region on teardown

Breno Leitao <leitao@debian.org>
    KVM: Fix a data race on last_boosted_vcpu in kvm_vcpu_on_spin()

Steve French <stfrench@microsoft.com>
    cifs: fix typo in module parameter enable_gcm_256

Boris Burkov <boris@bur.io>
    btrfs: retry block group reclaim without infinite loop

Ignat Korchagin <ignat@cloudflare.com>
    net: do not leave a dangling sk pointer, when socket creation fails

Jose Ignacio Tornos Martinez <jtornosm@redhat.com>
    net: usb: ax88179_178a: improve reset check

Oleksij Rempel <linux@rempel-privat.de>
    net: stmmac: Assign configured channel value to EXTTS event

Florian Fainelli <f.fainelli@gmail.com>
    MIPS: dts: bcm63268: Add missing properties to the TWD node

Nathan Chancellor <nathan@kernel.org>
    kbuild: Remove support for Clang's ThinLTO caching

Patrisious Haddad <phaddad@nvidia.com>
    RDMA/mlx5: Add check for srq max_sge attribute

Sudeep Holla <sudeep.holla@arm.com>
    firmware: psci: Fix return value from psci_system_suspend()

Raju Rangoju <Raju.Rangoju@amd.com>
    ACPICA: Revert "ACPICA: avoid Info: mapping multiple BARs. Your kernel is fine."

Max Krummenacher <max.krummenacher@toradex.com>
    arm64: dts: freescale: imx8mm-verdin: enable hysteresis on slow input pin

Fabio Estevam <festevam@gmail.com>
    arm64: dts: imx93-11x11-evk: Remove the 'no-sdio' property

Kalle Niemi <kaleposti@gmail.com>
    regulator: bd71815: fix ramp values

Nikita Shubin <n.shubin@yadro.com>
    dmaengine: ioatdma: Fix missing kmem_cache_destroy()

Nikita Shubin <n.shubin@yadro.com>
    dmaengine: ioatdma: Fix kmemleak in ioat_pci_probe()

Nikita Shubin <n.shubin@yadro.com>
    dmaengine: ioatdma: Fix error path in ioat3_dma_probe()

Bjorn Helgaas <bhelgaas@google.com>
    dmaengine: ioat: use PCI core macros for PCIe Capability

Nikita Shubin <n.shubin@yadro.com>
    dmaengine: ioatdma: Fix leaking on version mismatch

Bjorn Helgaas <bhelgaas@google.com>
    dmaengine: ioat: Drop redundant pci_enable_pcie_error_reporting()

Li RongQing <lirongqing@baidu.com>
    dmaengine: idxd: Fix possible Use-After-Free in irq_process_work_list

Biju Das <biju.das.jz@bp.renesas.com>
    regulator: core: Fix modpost error "regulator_get_regmap" undefined

Oliver Neukum <oneukum@suse.com>
    net: usb: rtl8150 fix unintiatilzed variables in rtl8150_get_link_ksettings

Pavan Chebbi <pavan.chebbi@broadcom.com>
    bnxt_en: Restore PTP tx_avail count in case of skb_pad() error

Marcin Szycik <marcin.szycik@linux.intel.com>
    ice: Fix VSI list rule with ICE_SW_LKUP_LAST type

Jianguo Wu <wujianguo@chinatelecom.cn>
    seg6: fix parameter passing when calling NF_HOOK() in End.DX4 and End.DX6 behaviors

Jozsef Kadlecsik <kadlec@netfilter.org>
    netfilter: ipset: Fix suspicious rcu_dereference_protected()

Simon Horman <horms@kernel.org>
    octeontx2-pf: Add error handling to VLAN unoffload handling

Heng Qi <hengqi@linux.alibaba.com>
    virtio_net: checksum offloading handling fix

Xiaolei Wang <xiaolei.wang@windriver.com>
    net: stmmac: No need to calculate speed divider when offload is disabled

Dan Carpenter <dan.carpenter@linaro.org>
    ptp: fix integer overflow in max_vclocks_store

Xin Long <lucien.xin@gmail.com>
    sched: act_ct: add netns into the key of tcf_ct_flow_table

Xin Long <lucien.xin@gmail.com>
    tipc: force a dst refcount before doing decryption

David Ruth <druth@chromium.org>
    net/sched: act_api: fix possible infinite loop in tcf_idr_check_alloc()

Pedro Tammela <pctammela@mojatatu.com>
    net/sched: act_api: rely on rcu in tcf_idr_check_alloc

Raju Lakkaraju <Raju.Lakkaraju@microchip.com>
    net: phy: mxl-gpy: Remove interrupt mask clearing from config_init

Xu Liang <lxu@maxlinear.com>
    net: phy: mxl-gpy: enhance delay time required by loopback disable function

Raju Lakkaraju <Raju.Lakkaraju@microchip.com>
    net: lan743x: Support WOL at both the PHY and MAC appropriately

Raju Lakkaraju <Raju.Lakkaraju@microchip.com>
    net: lan743x: disable WOL upon resume to restore full data path operation

Stefan Wahren <wahrenst@gmx.net>
    qca_spi: Make interrupt remembering atomic

Yue Haibing <yuehaibing@huawei.com>
    netns: Make get_net_ns() handle zero refcount net

Eric Dumazet <edumazet@google.com>
    xfrm6: check ip6_dst_idev() return value in xfrm6_get_saddr()

Eric Dumazet <edumazet@google.com>
    ipv6: prevent possible NULL dereference in rt6_probe()

Eric Dumazet <edumazet@google.com>
    ipv6: prevent possible NULL deref in fib6_nh_init()

Gavrilov Ilia <Ilia.Gavrilov@infotecs.ru>
    netrom: Fix a memory leak in nr_heartbeat_expiry()

Ajrat Makhmutov <rautyrauty@gmail.com>
    ALSA: hda/realtek: Enable headset mic on IdeaPad 330-17IKB 81DM

Florian Westphal <fw@strlen.de>
    bpf: Avoid splat in pskb_pull_reason

Ondrej Mosnacek <omosnace@redhat.com>
    cipso: fix total option length computation

En-Wei Wu <en-wei.wu@canonical.com>
    ice: avoid IRQ collision to fix init failure on ACPI S3 resume

Michal Swiatkowski <michal.swiatkowski@linux.intel.com>
    ice: move RDMA init to ice_idc.c

Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
    ALSA/hda: intel-dsp-config: Document AVS as dsp_driver option

Dustin L. Howett <dustin@howett.net>
    ALSA: hda/realtek: Remove Framework Laptop 16 from quirks

Masami Hiramatsu (Google) <mhiramat@kernel.org>
    tracing: Build event generation tests only as modules

Christian Marangi <ansuelsmth@gmail.com>
    mips: bmips: BCM6358: make sure CBR is correctly set

Ilpo JÃ¤rvinen <ilpo.jarvinen@linux.intel.com>
    MIPS: Routerboard 532: Fix vendor retry check code

Linus Torvalds <torvalds@linux-foundation.org>
    tty: add the option to have a tty reject a new ldisc

Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    usb: gadget: function: Remove usage of the deprecated ida_simple_xx() API

Parker Newman <pnewman@connecttech.com>
    serial: exar: adding missing CTI and Exar PCI ids

Esben Haabendal <esben@geanix.com>
    serial: imx: Introduce timeout when waiting on transmitter empty

Songyang Li <leesongyang@outlook.com>
    MIPS: Octeon: Add PCIe link status check

Mario Limonciello <mario.limonciello@amd.com>
    PCI/PM: Avoid D3cold for HP Pavilion 17 PC/1972 PCIe Ports

Roman Smirnov <r.smirnov@omp.ru>
    udf: udftime: prevent overflow in udf_disk_stamp_to_time()

Hans de Goede <hdegoede@redhat.com>
    usb: dwc3: pci: Don't set "linux,phy_charger_detect" property on Lenovo Yoga Tab2 1380

Joao Pinto <Joao.Pinto@synopsys.com>
    Avoid hw_desc array overrun in dw-axi-dmac

Alex Henrie <alexhenrie24@gmail.com>
    usb: misc: uss720: check for incompatible versions of the Belkin F5U002

Yunlei He <heyunlei@oppo.com>
    f2fs: remove clear SB_INLINECRYPT flag in default_options

Aleksandr Aprelkov <aaprelkov@usergate.com>
    iommu/arm-smmu-v3: Free MSIs in case of ENOMEM

Tzung-Bi Shih <tzungbi@kernel.org>
    power: supply: cros_usbpd: provide ID table for avoiding fallback match

Ben Fradella <bfradell@netapp.com>
    platform/x86: p2sb: Don't init until unassigned resources have been assigned

Michael Ellerman <mpe@ellerman.id.au>
    powerpc/io: Avoid clang null pointer arithmetic warnings

Nathan Lynch <nathanl@linux.ibm.com>
    powerpc/pseries: Enforce hcall result buffer validity and size

Stefan Binding <sbinding@opensource.cirrus.com>
    ALSA: hda/realtek: Add quirks for Lenovo 13X

Erico Nunes <nunes.erico@gmail.com>
    drm/lima: mask irqs in timeout path before hard reset

Erico Nunes <nunes.erico@gmail.com>
    drm/lima: add mask irq callback to gp and pp

Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
    ASoC: Intel: sof_sdw: add JD2 quirk for HP Omen 14

Arvid Norlander <lkml@vorpal.se>
    platform/x86: toshiba_acpi: Add quirk for buttons on Z830

Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
    drm/amd/display: Exit idle optimizations before HDCP execution

Uri Arev <me@wantyapps.xyz>
    Bluetooth: ath3k: Fix multiple issues reported by checkpatch.pl

Luke D. Jones <luke@ljones.dev>
    HID: asus: fix more n-key report descriptors if n-key quirked

Sean O'Brien <seobrien@chromium.org>
    HID: Add quirk for Logitech Casa touchpad

Leon Yen <leon.yen@mediatek.com>
    wifi: mt76: mt7921s: fix potential hung tasks during chip recovery

Breno Leitao <leitao@debian.org>
    netpoll: Fix race condition in netpoll_owner_active

Luiz Angelo Daros de Luca <luizluca@gmail.com>
    net: dsa: realtek: keep default LED state in rtl8366rb

Kunwu Chan <chentao@kylinos.cn>
    kselftest: arm64: Add a null pointer check

Davide Caratti <dcaratti@redhat.com>
    net/sched: fix false lockdep warning on qdisc root lock

Manish Rangankar <mrangankar@marvell.com>
    scsi: qedi: Fix crash while reading debugfs attribute

Wander Lairson Costa <wander@redhat.com>
    drop_monitor: replace spin_lock by raw_spin_lock

Eric Dumazet <edumazet@google.com>
    af_packet: avoid a false positive warning in packet_setsockopt()

Arnd Bergmann <arnd@arndb.de>
    wifi: ath9k: work around memset overflow warning

Eric Dumazet <edumazet@google.com>
    batman-adv: bypass empty buckets in batadv_purge_orig_ref()

Yonghong Song <yonghong.song@linux.dev>
    selftests/bpf: Fix flaky test btf_map_in_map/lookup_update

Alessandro Carminati (Red Hat) <alessandro.carminati@gmail.com>
    selftests/bpf: Prevent client connect before server bind in test_tc_tunnel.sh

Justin Stitt <justinstitt@google.com>
    block/ioctl: prefer different overflow check

Zqiang <qiang.zhang1211@gmail.com>
    rcutorture: Fix invalid context warning when enable srcu barrier testing

Zqiang <qiang.zhang1211@gmail.com>
    rcutorture: Make stall-tasks directly exit when rcutorture tests end

Paul E. McKenney <paulmck@kernel.org>
    rcutorture: Fix rcu_torture_one_read() pipe_count overflow comment

Jens Axboe <axboe@kernel.dk>
    io_uring/sqpoll: work around a potential audit memory leak

Chenghai Huang <huangchenghai2@huawei.com>
    crypto: hisilicon/sec - Fix memory leak for sec resource release

Herbert Xu <herbert@gondor.apana.org.au>
    padata: Disable BH when taking works lock on MT path


-------------

Diffstat:

 .../bindings/i2c/google,cros-ec-i2c-tunnel.yaml    |  2 +-
 Makefile                                           |  9 +-
 arch/arm/boot/dts/exynos4210-smdkv310.dts          |  2 +-
 arch/arm/boot/dts/exynos4412-origen.dts            |  2 +-
 arch/arm/boot/dts/exynos4412-smdk4412.dts          |  2 +-
 arch/arm64/boot/dts/freescale/imx8mm-verdin.dtsi   |  2 +-
 arch/arm64/boot/dts/freescale/imx8qm-mek.dts       |  2 +-
 arch/arm64/boot/dts/freescale/imx93-11x11-evk.dts  |  1 -
 arch/arm64/kvm/vgic/vgic-init.c                    |  2 +-
 arch/arm64/kvm/vgic/vgic-mmio-v3.c                 | 15 +++-
 arch/arm64/kvm/vgic/vgic.h                         |  2 +-
 arch/mips/bmips/setup.c                            |  3 +-
 arch/mips/boot/dts/brcm/bcm63268.dtsi              |  2 +
 arch/mips/pci/ops-rc32434.c                        |  4 +-
 arch/mips/pci/pcie-octeon.c                        |  6 ++
 arch/powerpc/include/asm/hvcall.h                  |  8 +-
 arch/powerpc/include/asm/io.h                      | 24 +++---
 arch/x86/include/asm/cpu_device_id.h               | 98 ++++++++++++++++++++++
 arch/x86/kernel/cpu/match.c                        |  4 +-
 arch/x86/kvm/x86.c                                 |  9 +-
 block/ioctl.c                                      |  2 +-
 drivers/acpi/acpica/exregion.c                     | 23 +----
 drivers/bluetooth/ath3k.c                          | 25 +++---
 drivers/crypto/hisilicon/sec2/sec_crypto.c         |  4 +-
 drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c     |  6 +-
 drivers/dma/dw-axi-dmac/dw-axi-dmac.h              |  1 +
 drivers/dma/idxd/irq.c                             |  4 +-
 drivers/dma/ioat/init.c                            | 65 +++++++-------
 drivers/dma/ioat/registers.h                       |  7 --
 drivers/firmware/psci/psci.c                       |  4 +-
 drivers/gpu/drm/amd/pm/legacy-dpm/kv_dpm.c         |  2 +
 drivers/gpu/drm/i915/display/intel_dp.c            |  4 +
 drivers/gpu/drm/lima/lima_bcast.c                  | 12 +++
 drivers/gpu/drm/lima/lima_bcast.h                  |  3 +
 drivers/gpu/drm/lima/lima_gp.c                     |  8 ++
 drivers/gpu/drm/lima/lima_pp.c                     | 18 ++++
 drivers/gpu/drm/lima/lima_sched.c                  |  7 ++
 drivers/gpu/drm/lima/lima_sched.h                  |  1 +
 drivers/gpu/drm/radeon/sumo_dpm.c                  |  2 +
 drivers/hid/hid-asus.c                             | 49 +++++------
 drivers/hid/hid-ids.h                              |  1 +
 drivers/hid/hid-multitouch.c                       |  6 ++
 drivers/i2c/busses/i2c-ocores.c                    |  2 +-
 drivers/infiniband/hw/mlx5/srq.c                   | 13 +--
 drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c        |  2 +-
 drivers/net/dsa/realtek/rtl8366rb.c                | 87 +++++--------------
 drivers/net/ethernet/broadcom/bnxt/bnxt.c          |  5 +-
 drivers/net/ethernet/intel/ice/ice.h               |  1 +
 drivers/net/ethernet/intel/ice/ice_idc.c           | 52 +++++++++++-
 drivers/net/ethernet/intel/ice/ice_main.c          | 36 +++-----
 drivers/net/ethernet/intel/ice/ice_switch.c        |  6 +-
 .../net/ethernet/marvell/octeontx2/nic/otx2_txrx.c |  5 +-
 drivers/net/ethernet/microchip/lan743x_ethtool.c   | 44 +++++++++-
 drivers/net/ethernet/microchip/lan743x_main.c      | 48 +++++++++--
 drivers/net/ethernet/microchip/lan743x_main.h      | 28 +++++++
 drivers/net/ethernet/qualcomm/qca_debug.c          |  6 +-
 drivers/net/ethernet/qualcomm/qca_spi.c            | 16 ++--
 drivers/net/ethernet/qualcomm/qca_spi.h            |  3 +-
 .../net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c  |  6 +-
 drivers/net/ethernet/stmicro/stmmac/stmmac_tc.c    | 40 +++++----
 drivers/net/phy/mxl-gpy.c                          | 97 ++++++++++++++-------
 drivers/net/usb/ax88179_178a.c                     | 18 ++--
 drivers/net/usb/rtl8150.c                          |  3 +-
 drivers/net/virtio_net.c                           | 12 ++-
 drivers/net/wireless/ath/ath.h                     |  6 +-
 drivers/net/wireless/ath/ath9k/main.c              |  3 +-
 drivers/net/wireless/mediatek/mt76/mt7921/mac.c    |  2 +
 .../net/wireless/mediatek/mt76/mt7921/pci_mac.c    |  2 -
 .../net/wireless/mediatek/mt76/mt7921/sdio_mac.c   |  2 -
 drivers/net/wireless/mediatek/mt76/sdio.c          |  3 +-
 drivers/pci/pci.c                                  | 12 +++
 drivers/platform/x86/p2sb.c                        | 29 +++----
 drivers/platform/x86/toshiba_acpi.c                | 36 +++++++-
 drivers/power/supply/cros_usbpd-charger.c          | 11 ++-
 drivers/ptp/ptp_sysfs.c                            |  3 +-
 drivers/regulator/bd71815-regulator.c              |  2 +-
 drivers/regulator/core.c                           |  1 +
 drivers/scsi/qedi/qedi_debugfs.c                   | 12 +--
 drivers/soc/ti/ti_sci_pm_domains.c                 | 20 ++++-
 drivers/spi/spi-stm32-qspi.c                       | 12 ++-
 drivers/tty/serial/8250/8250_exar.c                | 42 ++++++++++
 drivers/tty/serial/imx.c                           |  7 +-
 drivers/tty/tty_ldisc.c                            |  6 ++
 drivers/tty/vt/vt.c                                | 10 +++
 drivers/usb/dwc3/dwc3-pci.c                        |  8 +-
 drivers/usb/gadget/function/f_hid.c                |  6 +-
 drivers/usb/gadget/function/f_printer.c            |  6 +-
 drivers/usb/gadget/function/rndis.c                |  4 +-
 drivers/usb/misc/uss720.c                          | 22 +++--
 fs/btrfs/block-group.c                             | 11 ++-
 fs/f2fs/super.c                                    |  2 -
 fs/smb/client/cifsfs.c                             |  2 +-
 fs/udf/udftime.c                                   | 11 ++-
 include/linux/kcov.h                               |  2 +
 include/linux/mod_devicetable.h                    |  2 +
 include/linux/tty_driver.h                         |  8 ++
 include/net/sch_generic.h                          |  1 +
 io_uring/sqpoll.c                                  |  8 ++
 kernel/gcov/gcc_4_7.c                              |  4 +-
 kernel/gen_kheaders.sh                             |  9 +-
 kernel/kcov.c                                      |  1 +
 kernel/padata.c                                    |  8 +-
 kernel/rcu/rcutorture.c                            | 16 ++--
 kernel/trace/Kconfig                               |  4 +-
 kernel/trace/preemptirq_delay_test.c               |  1 +
 mm/page_table_check.c                              | 11 ++-
 net/batman-adv/originator.c                        |  2 +
 net/core/drop_monitor.c                            | 20 ++---
 net/core/filter.c                                  |  5 ++
 net/core/net_namespace.c                           |  9 +-
 net/core/netpoll.c                                 |  2 +-
 net/core/sock.c                                    |  3 +
 net/ipv4/cipso_ipv4.c                              | 12 ++-
 net/ipv4/tcp_input.c                               |  1 +
 net/ipv6/route.c                                   |  4 +-
 net/ipv6/seg6_local.c                              |  8 +-
 net/ipv6/xfrm6_policy.c                            |  8 +-
 net/netfilter/ipset/ip_set_core.c                  | 11 +--
 net/netrom/nr_timer.c                              |  3 +-
 net/packet/af_packet.c                             | 26 +++---
 net/sched/act_api.c                                | 66 ++++++++++-----
 net/sched/act_ct.c                                 | 16 ++--
 net/sched/sch_api.c                                |  1 +
 net/sched/sch_generic.c                            |  4 +
 net/sched/sch_htb.c                                | 22 +----
 net/tipc/node.c                                    |  1 +
 sound/hda/intel-dsp-config.c                       |  2 +-
 sound/pci/hda/patch_realtek.c                      | 10 ++-
 sound/soc/intel/boards/sof_sdw.c                   |  9 ++
 tools/perf/Documentation/perf-script.txt           |  7 +-
 tools/perf/builtin-script.c                        | 24 ++++--
 tools/testing/selftests/arm64/tags/tags_test.c     |  4 +
 .../selftests/bpf/prog_tests/btf_map_in_map.c      | 26 +-----
 tools/testing/selftests/bpf/test_tc_tunnel.sh      | 13 ++-
 virt/kvm/kvm_main.c                                |  5 +-
 135 files changed, 1112 insertions(+), 563 deletions(-)


.

From: Chen-Yu Tsai <wenst@chromium.org>
To: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
	Maxime Ripard <mripard@kernel.org>,
	Thomas Zimmermann <tzimmermann@suse.de>,
	David Airlie <airlied@gmail.com>,
	Daniel Vetter <daniel@ffwll.ch>
Cc: Chen-Yu Tsai <wenst@chromium.org>,
	dri-devel@lists.freedesktop.org,
	linux-kernel@vger.kernel.org,
	Luca Ceresoli <luca.ceresoli@bootlin.com>
Subject: [PATCH] drm/mipi-dsi: Add OF notifier handler
Date: Tue, 25 Jun 2024 18:08:17 +0800
Message-ID: <20240625100818.3478242-1-wenst@chromium.org>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257959
Newsgroups: org.kernel.vger.linux-kernel,org.freedesktop.lists.dri-devel
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Add OF notifier handler needed for creating/destroying MIPI DSI devices
according to dynamic runtime changes in the DT live tree. This code is
enabled when CONFIG_OF_DYNAMIC is selected.

This is based on existing code for I2C and SPI subsystems.

Signed-off-by: Chen-Yu Tsai <wenst@chromium.org>
---
This is a patch I wrote for the ChromeOS SKU component prober [1]. That
series is still being worked on, but in the meantime I thought this
patch might be useful to Luca. Luca talked about a hot-pluggable
connector that has DSI at ELC earlier this year. If DT live tree
patching is used in this case, this patch could be needed.

[1] https://lore.kernel.org/linux-arm-kernel/20231109100606.1245545-1-wenst@chromium.org/

 drivers/gpu/drm/drm_mipi_dsi.c | 67 +++++++++++++++++++++++++++++++++-
 1 file changed, 66 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/drm_mipi_dsi.c b/drivers/gpu/drm/drm_mipi_dsi.c
index a471c46f5ca6..a47e8928db53 100644
--- a/drivers/gpu/drm/drm_mipi_dsi.c
+++ b/drivers/gpu/drm/drm_mipi_dsi.c
@@ -118,6 +118,7 @@ static void mipi_dsi_dev_release(struct device *dev)
 {
 	struct mipi_dsi_device *dsi = to_mipi_dsi_device(dev);
 
+	of_node_clear_flag(dev->of_node, OF_POPULATED);
 	of_node_put(dev->of_node);
 	kfree(dsi);
 }
@@ -158,6 +159,7 @@ static struct mipi_dsi_device *
 of_mipi_dsi_device_add(struct mipi_dsi_host *host, struct device_node *node)
 {
 	struct mipi_dsi_device_info info = { };
+	struct mipi_dsi_device *device;
 	int ret;
 	u32 reg;
 
@@ -175,9 +177,70 @@ of_mipi_dsi_device_add(struct mipi_dsi_host *host, struct device_node *node)
 
 	info.channel = reg;
 	info.node = of_node_get(node);
+	of_node_set_flag(node, OF_POPULATED);
 
-	return mipi_dsi_device_register_full(host, &info);
+	device = mipi_dsi_device_register_full(host, &info);
+	if (IS_ERR(device))
+		of_node_clear_flag(node, OF_POPULATED);
+
+	return device;
 }
+
+#if IS_ENABLED(CONFIG_OF_DYNAMIC)
+static int of_mipi_dsi_notify(struct notifier_block *nb, unsigned long action, void *arg)
+{
+	struct of_reconfig_data *rd = arg;
+	struct mipi_dsi_host *host;
+	struct mipi_dsi_device *device;
+
+	switch (of_reconfig_get_state_change(action, rd)) {
+	case OF_RECONFIG_CHANGE_ADD:
+		host = of_find_mipi_dsi_host_by_node(rd->dn->parent);
+		if (!host)
+			return NOTIFY_OK;	/* not for us */
+
+		if (of_node_test_and_set_flag(rd->dn, OF_POPULATED))
+			return NOTIFY_OK;
+
+		/*
+		 * Clear the flag before adding the device so that fw_devlink
+		 * doesn't skip adding consumers to this device.
+		 */
+		rd->dn->fwnode.flags &= ~FWNODE_FLAG_NOT_DEVICE;
+		device = of_mipi_dsi_device_add(host, rd->dn);
+		if (IS_ERR(device)) {
+			dev_err(host->dev, "failed to create device for '%pOF'\n", rd->dn);
+			of_node_clear_flag(rd->dn, OF_POPULATED);
+			return notifier_from_errno(PTR_ERR(device));
+		}
+		break;
+	case OF_RECONFIG_CHANGE_REMOVE:
+		/* already depopulated? */
+		if (!of_node_check_flag(rd->dn, OF_POPULATED))
+			return NOTIFY_OK;
+
+		/* find our device by node */
+		device = of_find_mipi_dsi_device_by_node(rd->dn);
+		if (!device)
+			return NOTIFY_OK;	/* no? not meant for us */
+
+		/* unregister takes one ref away */
+		mipi_dsi_device_unregister(device);
+
+		/* and put the reference of the find */
+		put_device(&device->dev);
+		break;
+	}
+
+	return NOTIFY_OK;
+}
+
+static struct notifier_block mipi_dsi_of_notifier = {
+	.notifier_call = of_mipi_dsi_notify,
+};
+#else
+static struct notifier_block mipi_dsi_of_notifier __always_unused;
+#endif
 #else
 static struct mipi_dsi_device *
 of_mipi_dsi_device_add(struct mipi_dsi_host *host, struct device_node *node)
@@ -1703,6 +1766,8 @@ EXPORT_SYMBOL(mipi_dsi_driver_unregister);
 
 static int __init mipi_dsi_bus_init(void)
 {
+	if (IS_ENABLED(CONFIG_OF_DYNAMIC))
+		WARN_ON(of_reconfig_notifier_register(&mipi_dsi_of_notifier));
 	return bus_register(&mipi_dsi_bus_type);
 }
 postcore_initcall(mipi_dsi_bus_init);
-- 
2.45.2.741.gdbec12cfda-goog

.

From: Manikandan Muralidharan <manikandan.m@microchip.com>
To: <sam@ravnborg.org>, <bbrezillon@kernel.org>,
	<maarten.lankhorst@linux.intel.com>, <mripard@kernel.org>,
	<tzimmermann@suse.de>, <airlied@gmail.com>, <daniel@ffwll.ch>,
	<nicolas.ferre@microchip.com>, <alexandre.belloni@bootlin.com>,
	<claudiu.beznea@tuxon.dev>, <dri-devel@lists.freedesktop.org>,
	<linux-arm-kernel@lists.infradead.org>, <linux-kernel@vger.kernel.org>
CC: <manikandan.m@microchip.com>
Subject: [PATCH] drm: atmel-hlcdc: fix static checker warning by initializing the local variable
Date: Tue, 25 Jun 2024 15:40:30 +0530
Message-ID: <20240625101030.373965-1-manikandan.m@microchip.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257960
Newsgroups: org.kernel.vger.linux-kernel,org.freedesktop.lists.dri-devel,org.infradead.lists.linux-arm-kernel
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Initialize the local variable used to store the status of LCDC Channel
status register of each layer to fix the static checker warning
reported by smatch

Fixes: aa71584b323a ("drm: atmel-hlcdc: add driver ops to differentiate HLCDC and XLCDC IP")
Signed-off-by: Manikandan Muralidharan <manikandan.m@microchip.com>
---
 drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_plane.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_plane.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_plane.c
index 4a7ba0918eca..4150c4d0b4f2 100644
--- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_plane.c
+++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_plane.c
@@ -559,7 +559,7 @@ static void atmel_hlcdc_plane_update_buffers(struct atmel_hlcdc_plane *plane,
 	const struct atmel_hlcdc_layer_desc *desc = plane->layer.desc;
 	struct atmel_hlcdc_dc *dc = plane->base.dev->dev_private;
 	struct drm_framebuffer *fb = state->base.fb;
-	u32 sr;
+	u32 sr = 0;
 	int i;
 
 	if (!dc->desc->is_xlcdc)
-- 
2.25.1

.

From: Chen-Yu Tsai <wenst@chromium.org>
To: Marcel Holtmann <marcel@holtmann.org>,
	Luiz Augusto von Dentz <luiz.dentz@gmail.com>
Cc: Chen-Yu Tsai <wenst@chromium.org>,
	linux-bluetooth@vger.kernel.org,
	linux-mediatek@lists.infradead.org,
	linux-kernel@vger.kernel.org,
	Sean Wang <sean.wang@kernel.org>
Subject: [PATCH] Bluetooth: btmtksdio: Lookup device node only as fallback
Date: Tue, 25 Jun 2024 18:21:45 +0800
Message-ID: <20240625102147.3496597-1-wenst@chromium.org>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257968
Newsgroups: org.kernel.vger.linux-kernel,org.infradead.lists.linux-mediatek,org.kernel.vger.linux-bluetooth
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

If the device tree is properly written, the SDIO function device node
should be correctly defined, and the mmc core in Linux should correctly
tie it to the device being probed.

Only fall back to searching for the device node by compatible if the
original device node tied to the device is incorrect, as seen in older
device trees.

Signed-off-by: Chen-Yu Tsai <wenst@chromium.org>
---
This follows up on the MT7921S bluetooth binding and DT fixup patches [1].
This should not be backported.

[1] https://lore.kernel.org/linux-bluetooth/20240412073046.1192744-1-wenst@chromium.org/

 drivers/bluetooth/btmtksdio.c | 17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)

diff --git a/drivers/bluetooth/btmtksdio.c b/drivers/bluetooth/btmtksdio.c
index b4e560a17aa6..d81fa8dacb4e 100644
--- a/drivers/bluetooth/btmtksdio.c
+++ b/drivers/bluetooth/btmtksdio.c
@@ -1330,6 +1330,8 @@ static int btmtksdio_probe(struct sdio_func *func,
 {
 	struct btmtksdio_dev *bdev;
 	struct hci_dev *hdev;
+	struct device_node *old_node;
+	bool restore_node;
 	int err;
 
 	bdev = devm_kzalloc(&func->dev, sizeof(*bdev), GFP_KERNEL);
@@ -1413,13 +1415,24 @@ static int btmtksdio_probe(struct sdio_func *func,
 	if (err)
 		bt_dev_err(hdev, "failed to initialize device wakeup");
 
-	bdev->dev->of_node = of_find_compatible_node(NULL, NULL,
-						     "mediatek,mt7921s-bluetooth");
+	restore_node = false;
+	if (!of_device_is_compatible(bdev->dev->of_node, "mediatek,mt7921s-bluetooth")) {
+		restore_node = true;
+		old_node = bdev->dev->of_node;
+		bdev->dev->of_node = of_find_compatible_node(NULL, NULL,
+							     "mediatek,mt7921s-bluetooth");
+	}
+
 	bdev->reset = devm_gpiod_get_optional(bdev->dev, "reset",
 					      GPIOD_OUT_LOW);
 	if (IS_ERR(bdev->reset))
 		err = PTR_ERR(bdev->reset);
 
+	if (restore_node) {
+		of_node_put(bdev->dev->of_node);
+		bdev->dev->of_node = old_node;
+	}
+
 	return err;
 }
 
-- 
2.45.2.741.gdbec12cfda-goog

.

From: Konstantin Taranov <kotaranov@linux.microsoft.com>
To: kotaranov@microsoft.com,
	weh@microsoft.com,
	sharmaajay@microsoft.com,
	longli@microsoft.com,
	jgg@ziepe.ca,
	leon@kernel.org
Cc: linux-rdma@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: [PATCH rdma-next 1/1] RDMA/mana_ib: Set correct device into ib
Date: Tue, 25 Jun 2024 03:28:27 -0700
Message-Id: <1719311307-7920-1-git-send-email-kotaranov@linux.microsoft.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257971
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-rdma
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

From: Konstantin Taranov <kotaranov@microsoft.com>

When mc->ports[0] is not slave, use it in the set_netdev.
When mana is used in netvsc, the stored net devices in mana
are slaves and GIDs should be taken from their master devices.
In the baremetal case, the mc->ports devices will not be slaves.

Fixes: 8b184e4f1c32 ("RDMA/mana_ib: Enable RoCE on port 1")
Signed-off-by: Konstantin Taranov <kotaranov@microsoft.com>
---
 drivers/infiniband/hw/mana/device.c | 19 ++++++++++++-------
 1 file changed, 12 insertions(+), 7 deletions(-)

diff --git a/drivers/infiniband/hw/mana/device.c b/drivers/infiniband/hw/mana/device.c
index b07a8e2e838f..5395306a86e8 100644
--- a/drivers/infiniband/hw/mana/device.c
+++ b/drivers/infiniband/hw/mana/device.c
@@ -11,6 +11,8 @@ MODULE_DESCRIPTION("Microsoft Azure Network Adapter IB driver");
 MODULE_LICENSE("GPL");
 MODULE_IMPORT_NS(NET_MANA);
 
+#define mana_ndev_is_slave(dev)   (((dev)->flags & IFF_SLAVE) == IFF_SLAVE)
+
 static const struct ib_device_ops mana_ib_dev_ops = {
 	.owner = THIS_MODULE,
 	.driver_id = RDMA_DRIVER_MANA,
@@ -56,7 +58,7 @@ static int mana_ib_probe(struct auxiliary_device *adev,
 {
 	struct mana_adev *madev = container_of(adev, struct mana_adev, adev);
 	struct gdma_dev *mdev = madev->mdev;
-	struct net_device *upper_ndev;
+	struct net_device *ndev;
 	struct mana_context *mc;
 	struct mana_ib_dev *dev;
 	u8 mac_addr[ETH_ALEN];
@@ -85,16 +87,19 @@ static int mana_ib_probe(struct auxiliary_device *adev,
 	dev->ib_dev.dev.parent = mdev->gdma_context->dev;
 
 	rcu_read_lock(); /* required to get upper dev */
-	upper_ndev = netdev_master_upper_dev_get_rcu(mc->ports[0]);
-	if (!upper_ndev) {
+	if (mana_ndev_is_slave(mc->ports[0]))
+		ndev = netdev_master_upper_dev_get_rcu(mc->ports[0]);
+	else
+		ndev = mc->ports[0];
+	if (!ndev) {
 		rcu_read_unlock();
 		ret = -ENODEV;
-		ibdev_err(&dev->ib_dev, "Failed to get master netdev");
+		ibdev_err(&dev->ib_dev, "Failed to get netdev for port 1");
 		goto free_ib_device;
 	}
-	ether_addr_copy(mac_addr, upper_ndev->dev_addr);
-	addrconf_addr_eui48((u8 *)&dev->ib_dev.node_guid, upper_ndev->dev_addr);
-	ret = ib_device_set_netdev(&dev->ib_dev, upper_ndev, 1);
+	ether_addr_copy(mac_addr, ndev->dev_addr);
+	addrconf_addr_eui48((u8 *)&dev->ib_dev.node_guid, ndev->dev_addr);
+	ret = ib_device_set_netdev(&dev->ib_dev, ndev, 1);
 	rcu_read_unlock();
 	if (ret) {
 		ibdev_err(&dev->ib_dev, "Failed to set ib netdev, ret %d", ret);
-- 
2.43.0

.

From: Kalle Valo <kvalo@kernel.org>
To: linux-wireless@vger.kernel.org
Cc: linux-kernel@vger.kernel.org,
	gregkh@linuxfoundation.org,
	florian.c.schilhabel@googlemail.com
Subject: [PATCH wireless] MAINTAINERS: Remembering Larry Finger
Date: Tue, 25 Jun 2024 13:39:29 +0300
Message-Id: <20240625103929.1332926-1-kvalo@kernel.org>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257980 org.kernel.vger.linux-wireless:85302
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-wireless
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

We got sad news that Larry is not with us anymore. He was a long time
Linux developer, his first commit was back in 2005 and he has
maintained several wireless drivers over the years. He was known for
patiently supporting Linux users with all sorts of problems they had.
Larry's work helped so many people around the world and I always
enjoyed working with him, even though I sadly never met him.

Rest in Peace, Larry. You will be missed.

Link: https://lore.kernel.org/all/77997185-86a6-41c5-af7a-74e4e9064437@lwfinger.net/
Link: https://arstechnica.com/gadgets/2024/06/larry-finger-linux-wireless-hero-was-a-persistent-patient-coder-and-mentor/
Signed-off-by: Kalle Valo <kvalo@kernel.org>
---
 CREDITS     | 4 ++++
 MAINTAINERS | 5 +----
 2 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/CREDITS b/CREDITS
index 0107047f807b..1a1a54555e11 100644
--- a/CREDITS
+++ b/CREDITS
@@ -1214,6 +1214,10 @@ D: UDF filesystem
 S: (ask for current address)
 S: USA
 
+N: Larry Finger
+E: Larry.Finger@lwfinger.net
+D: Maintainer of wireless drivers, too many to list here
+
 N: JÃ¼rgen Fischer
 E: fischer@norbit.de
 D: Author of Adaptec AHA-152x SCSI driver
diff --git a/MAINTAINERS b/MAINTAINERS
index d6c90161c7bf..250c4c3aee22 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -3602,10 +3602,9 @@ W:	https://wireless.wiki.kernel.org/en/users/Drivers/b43
 F:	drivers/net/wireless/broadcom/b43/
 
 B43LEGACY WIRELESS DRIVER
-M:	Larry Finger <Larry.Finger@lwfinger.net>
 L:	linux-wireless@vger.kernel.org
 L:	b43-dev@lists.infradead.org
-S:	Maintained
+S:	Orphan
 W:	https://wireless.wiki.kernel.org/en/users/Drivers/b43
 F:	drivers/net/wireless/broadcom/b43legacy/
 
@@ -19511,7 +19510,6 @@ F:	drivers/net/wireless/realtek/rtl818x/rtl8180/
 
 RTL8187 WIRELESS DRIVER
 M:	Hin-Tak Leung <hintak.leung@gmail.com>
-M:	Larry Finger <Larry.Finger@lwfinger.net>
 L:	linux-wireless@vger.kernel.org
 S:	Maintained
 T:	git https://github.com/pkshih/rtw.git
@@ -21249,7 +21247,6 @@ W:	http://wiki.laptop.org/go/DCON
 F:	drivers/staging/olpc_dcon/
 
 STAGING - REALTEK RTL8712U DRIVERS
-M:	Larry Finger <Larry.Finger@lwfinger.net>
 M:	Florian Schilhabel <florian.c.schilhabel@googlemail.com>.
 S:	Odd Fixes
 F:	drivers/staging/rtl8712/

base-commit: 14f89946b6b383e617657a1e81fe6bf520ce86d5
-- 
2.39.2

.

From: Anand Moon <linux.amoon@gmail.com>
To: Shawn Lin <shawn.lin@rock-chips.com>,
	Lorenzo Pieralisi <lpieralisi@kernel.org>,
	=?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= <kw@linux.com>,
	Rob Herring <robh@kernel.org>,
	Bjorn Helgaas <bhelgaas@google.com>,
	Heiko Stuebner <heiko@sntech.de>
Cc: Anand Moon <linux.amoon@gmail.com>,
	linux-pci@vger.kernel.org,
	linux-rockchip@lists.infradead.org,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org
Subject: [PATCH v4 1/3] PCI: rockchip: Simplify clock handling by using clk_bulk*() function
Date: Tue, 25 Jun 2024 16:10:32 +0530
Message-ID: <20240625104039.48311-1-linux.amoon@gmail.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257981 org.kernel.vger.linux-pci:144441
Newsgroups: org.kernel.vger.linux-kernel,org.infradead.lists.linux-arm-kernel,org.infradead.lists.linux-rockchip,org.kernel.vger.linux-pci
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Refactor the clock handling in the Rockchip PCIe driver,
introducing a more robust and efficient method for enabling and
disabling clocks using clk_bulk*() API. Using the clk_bulk APIs,
the clock handling for the core clocks becomes much simpler.

Signed-off-by: Anand Moon <linux.amoon@gmail.com>
---
v4: use dev_err_probe for error patch.
v3: Fix typo in commit message, dropped reported by.
v2: Fix compilation error reported by Intel test robot.
---
 drivers/pci/controller/pcie-rockchip.c | 68 ++++----------------------
 drivers/pci/controller/pcie-rockchip.h | 15 ++++--
 2 files changed, 21 insertions(+), 62 deletions(-)

diff --git a/drivers/pci/controller/pcie-rockchip.c b/drivers/pci/controller/pcie-rockchip.c
index 0ef2e622d36e..804135511528 100644
--- a/drivers/pci/controller/pcie-rockchip.c
+++ b/drivers/pci/controller/pcie-rockchip.c
@@ -30,7 +30,7 @@ int rockchip_pcie_parse_dt(struct rockchip_pcie *rockchip)
 	struct platform_device *pdev = to_platform_device(dev);
 	struct device_node *node = dev->of_node;
 	struct resource *regs;
-	int err;
+	int err, i;
 
 	if (rockchip->is_rc) {
 		regs = platform_get_resource_byname(pdev,
@@ -127,29 +127,12 @@ int rockchip_pcie_parse_dt(struct rockchip_pcie *rockchip)
 					     "failed to get ep GPIO\n");
 	}
 
-	rockchip->aclk_pcie = devm_clk_get(dev, "aclk");
-	if (IS_ERR(rockchip->aclk_pcie)) {
-		dev_err(dev, "aclk clock not found\n");
-		return PTR_ERR(rockchip->aclk_pcie);
-	}
-
-	rockchip->aclk_perf_pcie = devm_clk_get(dev, "aclk-perf");
-	if (IS_ERR(rockchip->aclk_perf_pcie)) {
-		dev_err(dev, "aclk_perf clock not found\n");
-		return PTR_ERR(rockchip->aclk_perf_pcie);
-	}
-
-	rockchip->hclk_pcie = devm_clk_get(dev, "hclk");
-	if (IS_ERR(rockchip->hclk_pcie)) {
-		dev_err(dev, "hclk clock not found\n");
-		return PTR_ERR(rockchip->hclk_pcie);
-	}
+	for (i = 0; i < ROCKCHIP_NUM_CLKS; i++)
+		rockchip->clks[i].id = rockchip_pci_clks[i];
 
-	rockchip->clk_pcie_pm = devm_clk_get(dev, "pm");
-	if (IS_ERR(rockchip->clk_pcie_pm)) {
-		dev_err(dev, "pm clock not found\n");
-		return PTR_ERR(rockchip->clk_pcie_pm);
-	}
+	err = devm_clk_bulk_get(dev, ROCKCHIP_NUM_CLKS, rockchip->clks);
+	if (err)
+		return dev_err_probe(dev, err, "failed to get clocks\n");
 
 	return 0;
 }
@@ -372,39 +355,11 @@ int rockchip_pcie_enable_clocks(struct rockchip_pcie *rockchip)
 	struct device *dev = rockchip->dev;
 	int err;
 
-	err = clk_prepare_enable(rockchip->aclk_pcie);
-	if (err) {
-		dev_err(dev, "unable to enable aclk_pcie clock\n");
-		return err;
-	}
-
-	err = clk_prepare_enable(rockchip->aclk_perf_pcie);
-	if (err) {
-		dev_err(dev, "unable to enable aclk_perf_pcie clock\n");
-		goto err_aclk_perf_pcie;
-	}
-
-	err = clk_prepare_enable(rockchip->hclk_pcie);
-	if (err) {
-		dev_err(dev, "unable to enable hclk_pcie clock\n");
-		goto err_hclk_pcie;
-	}
-
-	err = clk_prepare_enable(rockchip->clk_pcie_pm);
-	if (err) {
-		dev_err(dev, "unable to enable clk_pcie_pm clock\n");
-		goto err_clk_pcie_pm;
-	}
+	err = clk_bulk_prepare_enable(ROCKCHIP_NUM_CLKS, rockchip->clks);
+	if (err)
+		return dev_err_probe(dev, err, "failed to enable clocks\n");
 
 	return 0;
-
-err_clk_pcie_pm:
-	clk_disable_unprepare(rockchip->hclk_pcie);
-err_hclk_pcie:
-	clk_disable_unprepare(rockchip->aclk_perf_pcie);
-err_aclk_perf_pcie:
-	clk_disable_unprepare(rockchip->aclk_pcie);
-	return err;
 }
 EXPORT_SYMBOL_GPL(rockchip_pcie_enable_clocks);
 
@@ -412,10 +367,7 @@ void rockchip_pcie_disable_clocks(void *data)
 {
 	struct rockchip_pcie *rockchip = data;
 
-	clk_disable_unprepare(rockchip->clk_pcie_pm);
-	clk_disable_unprepare(rockchip->hclk_pcie);
-	clk_disable_unprepare(rockchip->aclk_perf_pcie);
-	clk_disable_unprepare(rockchip->aclk_pcie);
+	clk_bulk_disable_unprepare(ROCKCHIP_NUM_CLKS, rockchip->clks);
 }
 EXPORT_SYMBOL_GPL(rockchip_pcie_disable_clocks);
 
diff --git a/drivers/pci/controller/pcie-rockchip.h b/drivers/pci/controller/pcie-rockchip.h
index 6111de35f84c..72346e17e45e 100644
--- a/drivers/pci/controller/pcie-rockchip.h
+++ b/drivers/pci/controller/pcie-rockchip.h
@@ -11,6 +11,7 @@
 #ifndef _PCIE_ROCKCHIP_H
 #define _PCIE_ROCKCHIP_H
 
+#include <linux/clk.h>
 #include <linux/kernel.h>
 #include <linux/pci.h>
 #include <linux/pci-ecam.h>
@@ -287,6 +288,15 @@
 		(((c) << ((b) * 8 + 5)) & \
 		 ROCKCHIP_PCIE_CORE_EP_FUNC_BAR_CFG_BAR_CTRL_MASK(b))
 
+#define ROCKCHIP_NUM_CLKS	ARRAY_SIZE(rockchip_pci_clks)
+
+static const char * const rockchip_pci_clks[] = {
+	"aclk",
+	"aclk-perf",
+	"hclk",
+	"pm",
+};
+
 struct rockchip_pcie {
 	void	__iomem *reg_base;		/* DT axi-base */
 	void	__iomem *apb_base;		/* DT apb-base */
@@ -299,10 +309,7 @@ struct rockchip_pcie {
 	struct	reset_control *pm_rst;
 	struct	reset_control *aclk_rst;
 	struct	reset_control *pclk_rst;
-	struct	clk *aclk_pcie;
-	struct	clk *aclk_perf_pcie;
-	struct	clk *hclk_pcie;
-	struct	clk *clk_pcie_pm;
+	struct  clk_bulk_data clks[ROCKCHIP_NUM_CLKS];
 	struct	regulator *vpcie12v; /* 12V power supply */
 	struct	regulator *vpcie3v3; /* 3.3V power supply */
 	struct	regulator *vpcie1v8; /* 1.8V power supply */

base-commit: 35bb670d65fc0f80c62383ab4f2544cec85ac57a
-- 
2.44.0

.

From: Shradha Todi <shradha.t@samsung.com>
To: linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org
Cc: manivannan.sadhasivam@linaro.org, lpieralisi@kernel.org, kw@linux.com,
	robh@kernel.org, bhelgaas@google.com, jingoohan1@gmail.com,
	fancer.lancer@gmail.com, yoshihiro.shimoda.uh@renesas.com,
	conor.dooley@microchip.com, pankaj.dubey@samsung.com, gost.dev@samsung.com,
	Shradha Todi <shradha.t@samsung.com>
Subject: [PATCH v3 0/3] Add support for RAS DES feature in PCIe DW
Date: Tue, 25 Jun 2024 15:08:10 +0530
Message-Id: <20240625093813.112555-1-shradha.t@samsung.com>
Content-Type: text/plain; charset="utf-8"
References: <CGME20240625094434epcas5p2e48bda118809ccb841c983d737d4f09d@epcas5p2.samsung.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257984 org.kernel.vger.linux-pci:144444
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-pci
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

DesignWare controller provides a vendor specific extended capability
called RASDES as an IP feature. This extended capability  provides
hardware information like:
 - Debug registers to know the state of the link or controller. 
 - Error injection mechanisms to inject various PCIe errors including
   sequence number, CRC
 - Statistical counters to know how many times a particular event
   occurred

However, in Linux we do not have any generic or custom support to be
able to use this feature in an efficient manner. This is the reason we
are proposing this framework. Debug and bring up time of high-speed IPs
are highly dependent on costlier hardware analyzers and this solution
will in some ways help to reduce the HW analyzer usage.

The debugfs entries can be used to get information about underlying
hardware and can be shared with user space. Separate debugfs entries has
been created to cater to all the DES hooks provided by the controller.
The debugfs entries interacts with the RASDES registers in the required
sequence and provides the meaningful data to the user. This eases the
effort to understand and use the register information for debugging.

v2: https://lore.kernel.org/lkml/20240319163315.GD3297@thinkpad/T/

v1: https://lore.kernel.org/all/20210518174618.42089-1-shradha.t@samsung.com/T/

Shradha Todi (3):
  PCI: dwc: Add support for vendor specific capability search
  PCI: debugfs: Add support for RASDES framework in DWC
  PCI: dwc: Create debugfs files in DWC driver

 drivers/pci/controller/dwc/Kconfig            |   8 +
 drivers/pci/controller/dwc/Makefile           |   1 +
 .../controller/dwc/pcie-designware-debugfs.c  | 474 ++++++++++++++++++
 .../controller/dwc/pcie-designware-debugfs.h  |   0
 .../pci/controller/dwc/pcie-designware-host.c |   2 +
 drivers/pci/controller/dwc/pcie-designware.c  |  20 +
 drivers/pci/controller/dwc/pcie-designware.h  |  18 +
 7 files changed, 523 insertions(+)
 create mode 100644 drivers/pci/controller/dwc/pcie-designware-debugfs.c
 create mode 100644 drivers/pci/controller/dwc/pcie-designware-debugfs.h

-- 
2.17.1

.

From: Adrian Hunter <adrian.hunter@intel.com>
To: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: Jiri Olsa <jolsa@kernel.org>,
	Namhyung Kim <namhyung@kernel.org>,
	Ian Rogers <irogers@google.com>,
	Kan Liang <kan.liang@linux.intel.com>,
	linux-kernel@vger.kernel.org,
	linux-perf-users@vger.kernel.org
Subject: [PATCH 0/2] perf intel-pt: Some small fixes
Date: Tue, 25 Jun 2024 13:45:30 +0300
Message-Id: <20240625104532.11990-1-adrian.hunter@intel.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257989
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-perf-users
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Hi

Here are a couple of small Intel PT fixes.


Adrian Hunter (2):
      perf intel-pt: Fix aux_watermark calculation for 64-bit size
      perf intel-pt: Fix exclude_guest setting

 tools/perf/arch/x86/util/intel-pt.c | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)


Regards
Adrian
.

From: Luis Felipe Hernandez <luis.hernandez093@gmail.com>
To: jikos@kernel.org,
	bentiss@kernel.org
Cc: Luis Felipe Hernandez <luis.hernandez093@gmail.com>,
	skhan@linuxfoundation.org,
	ricardo@marliere.net,
	linux-kernel-mentees@lists.linuxfoundation.org,
	linux-input@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: [PATCH RESEND] hid: bpf: Fix grammar
Date: Tue, 25 Jun 2024 06:55:51 -0400
Message-ID: <20240625105553.50830-1-luis.hernandez093@gmail.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1257998
Newsgroups: org.kernel.vger.linux-kernel,dev.linux.lists.linux-kernel-mentees,org.kernel.vger.linux-input
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

* spelling fix: XBox -> Xbox, lowercase 'b' as per Microsoft branding
* rephrase: paddle -> paddles, the controller itself has more than one paddle
* rephrase: replace usage of "those" in favor of explicitly making reference
  to the paddles
* grammatical fix: report -> reports, use present tense verb. 
* spelling fix: interpret
* consistency: capitalize the first word in bullet points

Signed-off-by: Luis Felipe Hernandez <luis.hernandez093@gmail.com>
---
 .../hid/bpf/progs/Microsoft__XBox-Elite-2.bpf.c   | 15 +++++++--------
 1 file changed, 7 insertions(+), 8 deletions(-)

diff --git a/drivers/hid/bpf/progs/Microsoft__XBox-Elite-2.bpf.c b/drivers/hid/bpf/progs/Microsoft__XBox-Elite-2.bpf.c
index c04abecab8ee..858cf20ebe2c 100644
--- a/drivers/hid/bpf/progs/Microsoft__XBox-Elite-2.bpf.c
+++ b/drivers/hid/bpf/progs/Microsoft__XBox-Elite-2.bpf.c
@@ -15,20 +15,19 @@ HID_BPF_CONFIG(
 );
 
 /*
- * When using the XBox Wireless Controller Elite 2 over Bluetooth,
- * the device exports the paddle on the back of the device as a single
+ * When using the Xbox Wireless Controller Elite 2 over Bluetooth,
+ * the device exports the paddles on the back of the device as a single
  * bitfield value of usage "Assign Selection".
  *
- * The kernel doesn't process those usages properly and report KEY_UNKNOWN
- * for it.
+ * The kernel doesn't process the paddles usage properly and reports KEY_UNKNOWN.
  *
- * SDL doesn't know how to interprete that KEY_UNKNOWN and thus ignores the paddles.
+ * SDL doesn't know how to interpret KEY_UNKNOWN and thus ignores the paddles.
  *
  * Given that over USB the kernel uses BTN_TRIGGER_HAPPY[5-8], we
- * can tweak the report descriptor to make the kernel interprete it properly:
- * - we need an application collection of gamepad (so we have to close the current
+ * can tweak the report descriptor to make the kernel interpret it properly:
+ * - We need an application collection of gamepad (so we have to close the current
  *   Consumer Control one)
- * - we need to change the usage to be buttons from 0x15 to 0x18
+ * - We need to change the usage to be buttons from 0x15 to 0x18
  */
 
 #define OFFSET_ASSIGN_SELECTION		211
-- 
2.45.1

.

From: Mateusz Guzik <mjguzik@gmail.com>
To: brauner@kernel.org
Cc: viro@zeniv.linux.org.uk,
	jack@suse.cz,
	linux-kernel@vger.kernel.org,
	linux-fsdevel@vger.kernel.org,
	io-uring@vger.kernel.org,
	axboe@kernel.dk,
	torvalds@linux-foundation.org,
	xry111@xry111.site,
	loongarch@lists.linux.dev,
	Mateusz Guzik <mjguzik@gmail.com>
Subject: [PATCH 0/2] statx NULL path support
Date: Tue, 25 Jun 2024 13:00:26 +0200
Message-ID: <20240625110029.606032-1-mjguzik@gmail.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258003
Newsgroups: org.kernel.vger.linux-kernel,dev.linux.lists.loongarch,org.kernel.vger.io-uring,org.kernel.vger.linux-fsdevel
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Generated against vfs/vfs.empty.path, uses the new vfs_empty_path
helper.

I had to revert "xattr: handle AT_EMPTY_PATH correctly" locally due to
compilation errors.

io_uring is only-compile tested at the moment, perhaps the author
(cc'ed) has a handy testcase for statx.

Note rebasing this against newer fs branches will result in a trivial
merge conflict due to later removed argument from getname_flags.

Mateusz Guzik (2):
  vfs: add CLASS fd_raw
  vfs: support statx(..., NULL, AT_EMPTY_PATH, ...)

 fs/internal.h        |  2 +
 fs/stat.c            | 90 ++++++++++++++++++++++++++++++++------------
 include/linux/file.h |  1 +
 io_uring/statx.c     | 23 ++++++-----
 4 files changed, 81 insertions(+), 35 deletions(-)

-- 
2.43.0

.

From: Matthias Schiffer <matthias.schiffer@ew.tq-group.com>
To: Nishanth Menon <nm@ti.com>,
	Vignesh Raghavendra <vigneshr@ti.com>,
	Tero Kristo <kristo@kernel.org>
Cc: Andrew Davis <afd@ti.com>,
	Rob Herring <robh@kernel.org>,
	Krzysztof Kozlowski <krzk+dt@kernel.org>,
	Conor Dooley <conor+dt@kernel.org>,
	linux-arm-kernel@lists.infradead.org,
	devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux@ew.tq-group.com,
	Matthias Schiffer <matthias.schiffer@ew.tq-group.com>
Subject: [PATCH] arm64: dts: ti: k3-am64-tqma64xxl: relicense to GPL-2.0-only OR MIT
Date: Tue, 25 Jun 2024 13:02:44 +0200
Message-ID: <20240625110244.9881-1-matthias.schiffer@ew.tq-group.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258007
Newsgroups: org.kernel.vger.linux-kernel,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-devicetree
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

MIT license was added to the AM64x SoC DTSIs in commit 6248b20e3203
("arm64: dts: ti: k3-am64: Add MIT license along with GPL-2.0"). Apply
the same license change to the TQMa64xxL SoM and MBaX4XxL baseboard
Device Trees.

The copyright year is updated to indicate the license change.

Signed-off-by: Matthias Schiffer <matthias.schiffer@ew.tq-group.com>
---
 arch/arm64/boot/dts/ti/k3-am64-tqma64xxl-mbax4xxl-sdcard.dtso | 4 ++--
 arch/arm64/boot/dts/ti/k3-am64-tqma64xxl-mbax4xxl-wlan.dtso   | 4 ++--
 arch/arm64/boot/dts/ti/k3-am642-tqma64xxl-mbax4xxl.dts        | 4 ++--
 arch/arm64/boot/dts/ti/k3-am642-tqma64xxl.dtsi                | 4 ++--
 4 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/arch/arm64/boot/dts/ti/k3-am64-tqma64xxl-mbax4xxl-sdcard.dtso b/arch/arm64/boot/dts/ti/k3-am64-tqma64xxl-mbax4xxl-sdcard.dtso
index 79ed19c6c0e90..c4525024ba5d7 100644
--- a/arch/arm64/boot/dts/ti/k3-am64-tqma64xxl-mbax4xxl-sdcard.dtso
+++ b/arch/arm64/boot/dts/ti/k3-am64-tqma64xxl-mbax4xxl-sdcard.dtso
@@ -1,6 +1,6 @@
-// SPDX-License-Identifier: GPL-2.0-only
+// SPDX-License-Identifier: GPL-2.0-only OR MIT
 /*
- * Copyright (c) 2022-2023 TQ-Systems GmbH <linux@ew.tq-group.com>, D-82229 Seefeld, Germany.
+ * Copyright (c) 2022-2024 TQ-Systems GmbH <linux@ew.tq-group.com>, D-82229 Seefeld, Germany.
  */
 
 /dts-v1/;
diff --git a/arch/arm64/boot/dts/ti/k3-am64-tqma64xxl-mbax4xxl-wlan.dtso b/arch/arm64/boot/dts/ti/k3-am64-tqma64xxl-mbax4xxl-wlan.dtso
index 32596a84b7ba1..82f8a21b6cbf8 100644
--- a/arch/arm64/boot/dts/ti/k3-am64-tqma64xxl-mbax4xxl-wlan.dtso
+++ b/arch/arm64/boot/dts/ti/k3-am64-tqma64xxl-mbax4xxl-wlan.dtso
@@ -1,6 +1,6 @@
-// SPDX-License-Identifier: GPL-2.0-only
+// SPDX-License-Identifier: GPL-2.0-only OR MIT
 /*
- * Copyright (c) 2022-2023 TQ-Systems GmbH <linux@ew.tq-group.com>, D-82229 Seefeld, Germany.
+ * Copyright (c) 2022-2024 TQ-Systems GmbH <linux@ew.tq-group.com>, D-82229 Seefeld, Germany.
  */
 
 /dts-v1/;
diff --git a/arch/arm64/boot/dts/ti/k3-am642-tqma64xxl-mbax4xxl.dts b/arch/arm64/boot/dts/ti/k3-am642-tqma64xxl-mbax4xxl.dts
index 1f4dc5ad1696a..c40ad67cee019 100644
--- a/arch/arm64/boot/dts/ti/k3-am642-tqma64xxl-mbax4xxl.dts
+++ b/arch/arm64/boot/dts/ti/k3-am642-tqma64xxl-mbax4xxl.dts
@@ -1,7 +1,7 @@
-// SPDX-License-Identifier: GPL-2.0-only
+// SPDX-License-Identifier: GPL-2.0-only OR MIT
 /*
  * Copyright (C) 2021 Texas Instruments Incorporated - https://www.ti.com/
- * Copyright (c) 2022-2023 TQ-Systems GmbH <linux@ew.tq-group.com>, D-82229 Seefeld, Germany.
+ * Copyright (c) 2022-2024 TQ-Systems GmbH <linux@ew.tq-group.com>, D-82229 Seefeld, Germany.
  */
 
 /dts-v1/;
diff --git a/arch/arm64/boot/dts/ti/k3-am642-tqma64xxl.dtsi b/arch/arm64/boot/dts/ti/k3-am642-tqma64xxl.dtsi
index 6c785eff7d2ff..828d815d6bdfc 100644
--- a/arch/arm64/boot/dts/ti/k3-am642-tqma64xxl.dtsi
+++ b/arch/arm64/boot/dts/ti/k3-am642-tqma64xxl.dtsi
@@ -1,7 +1,7 @@
-// SPDX-License-Identifier: GPL-2.0-only
+// SPDX-License-Identifier: GPL-2.0-only OR MIT
 /*
  * Copyright (C) 2021 Texas Instruments Incorporated - https://www.ti.com/
- * Copyright (c) 2022-2023 TQ-Systems GmbH <linux@ew.tq-group.com>, D-82229 Seefeld, Germany.
+ * Copyright (c) 2022-2024 TQ-Systems GmbH <linux@ew.tq-group.com>, D-82229 Seefeld, Germany.
  */
 
 #include "k3-am642.dtsi"
-- 
TQ-Systems GmbH | MÃ¼hlstraÃŸe 2, Gut Delling | 82229 Seefeld, Germany
Amtsgericht MÃ¼nchen, HRB 105018
GeschÃ¤ftsfÃ¼hrer: Detlef Schneider, RÃ¼diger Stahl, Stefan Schneider
https://www.tq-group.com/

.

From: Jerome Brunet <jbrunet@baylibre.com>
To: Neil Armstrong <neil.armstrong@linaro.org>
Cc: Jerome Brunet <jbrunet@baylibre.com>,
	Kevin Hilman <khilman@baylibre.com>,
	linux-kernel@vger.kernel.org,
	linux-amlogic@lists.infradead.org,
	devicetree@vger.kernel.org,
	Rob Herring <robh@kernel.org>,
	Krzysztof Kozlowski <krzk+dt@kernel.org>,
	Conor Dooley <conor+dt@kernel.org>
Subject: [PATCH] arm64: dts: amlogic: sm1: fix spdif compatibles
Date: Tue, 25 Jun 2024 13:18:43 +0200
Message-ID: <20240625111845.928192-1-jbrunet@baylibre.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
X-Patchwork-Bot: notify
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258015
Newsgroups: org.kernel.vger.linux-kernel,org.infradead.lists.linux-amlogic,org.kernel.vger.linux-devicetree
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

The spdif input and output of g12 and sm1 are compatible but
sm1 should use the related compatible since it exists.

Fixes: 86f2159468d5 ("arm64: dts: meson-sm1: add spdifin and pdifout nodes")
Signed-off-by: Jerome Brunet <jbrunet@baylibre.com>
---
 arch/arm64/boot/dts/amlogic/meson-sm1.dtsi | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/arm64/boot/dts/amlogic/meson-sm1.dtsi b/arch/arm64/boot/dts/amlogic/meson-sm1.dtsi
index d13cf5b4aac7..75c8aa815eff 100644
--- a/arch/arm64/boot/dts/amlogic/meson-sm1.dtsi
+++ b/arch/arm64/boot/dts/amlogic/meson-sm1.dtsi
@@ -335,7 +335,7 @@ tdmin_lb: audio-controller@3c0 {
 		};
 
 		spdifin: audio-controller@400 {
-			compatible = "amlogic,g12a-spdifin",
+			compatible = "amlogic,sm1-spdifin",
 				     "amlogic,axg-spdifin";
 			reg = <0x0 0x400 0x0 0x30>;
 			#sound-dai-cells = <0>;
@@ -349,7 +349,7 @@ spdifin: audio-controller@400 {
 		};
 
 		spdifout_a: audio-controller@480 {
-			compatible = "amlogic,g12a-spdifout",
+			compatible = "amlogic,sm1-spdifout",
 				     "amlogic,axg-spdifout";
 			reg = <0x0 0x480 0x0 0x50>;
 			#sound-dai-cells = <0>;
-- 
2.43.0

.

From: Jayesh Choudhary <j-choudhary@ti.com>
To: <linux-kernel@vger.kernel.org>, <nm@ti.com>, <vigneshr@ti.com>,
        <j-luthra@ti.com>, <j-choudhary@ti.com>
CC: <kristo@kernel.org>, <robh@kernel.org>, <krzk+dt@kernel.org>,
        <conor+dt@kernel.org>, <linux-arm-kernel@lists.infradead.org>,
        <devicetree@vger.kernel.org>, <u-kumar1@ti.com>
Subject: [PATCH v3 0/2] Enable audio support for J722S-EVM
Date: Tue, 25 Jun 2024 17:02:59 +0530
Message-ID: <20240625113301.217369-1-j-choudhary@ti.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258026
Newsgroups: org.kernel.vger.linux-kernel,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-devicetree
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Hello All,
These 2 patches enable audio on J722S-EVM platform.

This patch depends upon the bcdma driver fix posted upstream:
<https://lore.kernel.org/all/20240607-bcdma_chan_cnt-v2-1-bf1a55529d91@ti.com/>

Changelog v2->v3:
- Move audio_refclk1 node to SOC level dtsi (k3-j722s-main.dtsi)
  in a separate patch
- Rename vcc_3v3_aud to vsys_io_3v3
- Fix ball number for McASP pins in comments
- Fix padding for audio_ext_refclk1_pins_default pinmux
- Pick up R-by from Jai

v2 patch:
<https://lore.kernel.org/all/20240612051246.41117-1-j-choudhary@ti.com/>

Changelog v1->v2:
- Fix dtb warning for pin-muxing

v1 patch:
<https://lore.kernel.org/all/20240611082820.17442-1-j-choudhary@ti.com/>

Jayesh Choudhary (2):
  arm64: dts: ti: k3-j722s-main: Add audio_refclk node
  arm64: dts: ti: k3-j722s-evm: Enable analog audio support

 arch/arm64/boot/dts/ti/k3-j722s-evm.dts   | 109 ++++++++++++++++++++++
 arch/arm64/boot/dts/ti/k3-j722s-main.dtsi |   9 ++
 2 files changed, 118 insertions(+)

-- 
2.25.1

.

Date: Tue, 25 Jun 2024 12:36:44 +0100
From: Mark Brown <broonie@kernel.org>
To: Andy Gross <agross@kernel.org>
Cc: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Linux Next Mailing List <linux-next@vger.kernel.org>
Subject: linux-next: build failure after merge of the qcom tree
Message-ID: <ZnqrzC35XKH3XNVg@sirena.org.uk>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Type: multipart/signed; micalg=pgp-sha512;
	protocol="application/pgp-signature"; boundary="N7PPyFVAYBxZFVrB"
Content-Disposition: inline
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258034 org.kernel.vger.linux-next:61928
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-next
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail


--N7PPyFVAYBxZFVrB
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

Hi all,

After merging the qcom tree, today's linux-next build (arm
multi_v7_defconfig) failed like this:

ERROR: modpost: "__auxiliary_driver_register" [drivers/soc/qcom/qcom_pd_mapper.ko] undefined!
ERROR: modpost: "servreg_loc_pfr_resp_ei" [drivers/soc/qcom/qcom_pd_mapper.ko] undefined!
ERROR: modpost: "auxiliary_driver_unregister" [drivers/soc/qcom/qcom_pd_mapper.ko] undefined!
ERROR: modpost: "servreg_get_domain_list_resp_ei" [drivers/soc/qcom/qcom_pd_mapper.ko] undefined!
ERROR: modpost: "servreg_get_domain_list_req_ei" [drivers/soc/qcom/qcom_pd_mapper.ko] undefined!
ERROR: modpost: "servreg_loc_pfr_req_ei" [drivers/soc/qcom/qcom_pd_mapper.ko] undefined!

Caused by commit

  1ebcde047c547134e ("soc: qcom: add pd-mapper implementation")

I have used the tree from 20240624 instead.

--N7PPyFVAYBxZFVrB
Content-Type: application/pgp-signature; name="signature.asc"

-----BEGIN PGP SIGNATURE-----

iQEzBAABCgAdFiEEreZoqmdXGLWf4p/qJNaLcl1Uh9AFAmZ6q8sACgkQJNaLcl1U
h9B2Lwf8CimZgqYQ8B1E4t+tkB1pWP/1x7+sBeCS3tumdwb5XCCbpC8wkZ8bU58+
gkzL1clpaflsGFr2U1mPoptSGHrPoM46w+VjfJEZ/fw+XudkABVR6oymh4PCbTUj
/8hUitY/OKUdB7gEidEdJmNG9eU/YBS+YwPW7G1ST+05LF+bDM/0Yfllq9xKcldK
lDTTDdJsPZyDGI+ahkQ9qa6bt4pKXb4FpPGn2Q38osnn2dJnZl1Ym+MiXGDcrb7T
1R8OBtkuj/68GDHn+V+yb/FhIgte5aUuratXspVj5KjzPsLjQInH8JLR8JAMRh1F
LdG+yuITp84RbcgekGdurNymTujw0w==
=7/LJ
-----END PGP SIGNATURE-----

--N7PPyFVAYBxZFVrB--
.

From: "Pankaj Raghav (Samsung)" <kernel@pankajraghav.com>
To: david@fromorbit.com,
	willy@infradead.org,
	chandan.babu@oracle.com,
	djwong@kernel.org,
	brauner@kernel.org,
	akpm@linux-foundation.org
Cc: linux-kernel@vger.kernel.org,
	yang@os.amperecomputing.com,
	linux-mm@kvack.org,
	john.g.garry@oracle.com,
	linux-fsdevel@vger.kernel.org,
	hare@suse.de,
	p.raghav@samsung.com,
	mcgrof@kernel.org,
	gost.dev@samsung.com,
	cl@os.amperecomputing.com,
	linux-xfs@vger.kernel.org,
	kernel@pankajraghav.com,
	hch@lst.de,
	Zi Yan <zi.yan@sent.com>
Subject: [PATCH v8 00/10] enable bs > ps in XFS
Date: Tue, 25 Jun 2024 11:44:10 +0000
Message-ID: <20240625114420.719014-1-kernel@pankajraghav.com>
Content-Type: text/plain; charset="utf-8"
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258038 org.kvack.linux-mm:201304
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-fsdevel,org.kernel.vger.linux-xfs,org.kvack.linux-mm
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

From: Pankaj Raghav <p.raghav@samsung.com>

This is the eight version of the series that enables block size > page size
(Large Block Size) in XFS.
The context and motivation can be seen in cover letter of the RFC v1 [0].
We also recorded a talk about this effort at LPC [1], if someone would
like more context on this effort.

A lot of emphasis has been put on testing using kdevops, starting with an XFS
baseline [3]. The testing has been split into regression and progression.

Regression testing:
In regression testing, we ran the whole test suite to check for regressions on
existing profiles due to the page cache changes.

I also ran split_huge_page_test selftest on XFS filesystem to check for
huge page splits in min order chunks is done correctly.

No regressions were found with these patches added on top.

Progression testing:
For progression testing, we tested for 8k, 16k, 32k and 64k block sizes.  To
compare it with existing support, an ARM VM with 64k base page system (without
our patches) was used as a reference to check for actual failures due to LBS
support in a 4k base page size system.

There are some tests that assumes block size < page size that needs to be fixed.
We have a tree with fixes for xfstests [4], most of the changes have been posted
already, and only a few minor changes need to be posted. Already part of these
changes has been upstreamed to fstests, and new tests have also been written and
are out for review, namely for mmap zeroing-around corner cases, compaction
and fsstress races on mm, and stress testing folio truncation on file mapped
folios.

No new failures were found with the LBS support.

We've done some preliminary performance tests with fio on XFS on 4k block size
against pmem and NVMe with buffered IO and Direct IO on vanilla Vs + these
patches applied, and detected no regressions.

We also wrote an eBPF tool called blkalgn [5] to see if IO sent to the device
is aligned and at least filesystem block size in length.

For those who want this in a git tree we have this up on a kdevops
large-block-minorder-for-next-v8 tag [6].

[0] https://lore.kernel.org/lkml/20230915183848.1018717-1-kernel@pankajraghav.com/
[1] https://www.youtube.com/watch?v=ar72r5Xf7x4
[2] https://lkml.kernel.org/r/20240501153120.4094530-1-willy@infradead.org
[3] https://github.com/linux-kdevops/kdevops/blob/master/docs/xfs-bugs.md
489 non-critical issues and 55 critical issues. We've determined and reported
that the 55 critical issues have all fall into 5 common  XFS asserts or hung
tasks  and 2 memory management asserts.
[4] https://github.com/linux-kdevops/fstests/tree/lbs-fixes
[5] https://github.com/iovisor/bcc/pull/4813
[6] https://github.com/linux-kdevops/linux/
[7] https://lore.kernel.org/linux-kernel/Zl20pc-YlIWCSy6Z@casper.infradead.org/#t

Changes since v7:
- Move by min_nrpages in page_cache_ra_unbounded if we found a folio as
  we don't have a stable reference.
- Rename iomap_init to iomap_pagecache_init and add a new iomap_dio_init
  and mark the zero_fs_64k memory as RO.
- Simplified calculation in xfs_sb_validate_fsb_count().
- Collected RVB from willy, Darrick and Hannes.

Dave Chinner (1):
  xfs: use kvmalloc for xattr buffers

Luis Chamberlain (1):
  mm: split a folio in minimum folio order chunks

Matthew Wilcox (Oracle) (1):
  fs: Allow fine-grained control of folio sizes

Pankaj Raghav (7):
  filemap: allocate mapping_min_order folios in the page cache
  readahead: allocate folios with mapping_min_order in readahead
  filemap: cap PTE range to be created to allowed zero fill in
    folio_map_range()
  iomap: fix iomap_dio_zero() for fs bs > system page size
  xfs: expose block size in stat
  xfs: make the calculation generic in xfs_sb_validate_fsb_count()
  xfs: enable block size larger than page size support

 fs/iomap/buffered-io.c        |   4 +-
 fs/iomap/direct-io.c          |  30 +++++++++-
 fs/xfs/libxfs/xfs_attr_leaf.c |  15 ++---
 fs/xfs/libxfs/xfs_ialloc.c    |   5 ++
 fs/xfs/libxfs/xfs_shared.h    |   3 +
 fs/xfs/xfs_icache.c           |   6 +-
 fs/xfs/xfs_iops.c             |   2 +-
 fs/xfs/xfs_mount.c            |   8 ++-
 fs/xfs/xfs_super.c            |  18 +++---
 include/linux/huge_mm.h       |  14 +++--
 include/linux/pagemap.h       | 109 +++++++++++++++++++++++++++++-----
 mm/filemap.c                  |  36 +++++++----
 mm/huge_memory.c              |  55 +++++++++++++++--
 mm/readahead.c                |  85 +++++++++++++++++++-------
 14 files changed, 309 insertions(+), 81 deletions(-)


base-commit: b992b79ca8bc336fa8e2c80990b5af80ed8f36fd
-- 
2.44.1

.

From: linan666@huaweicloud.com
To: axboe@kernel.dk
Cc: linux-block@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	hch@lst.de,
	linan666@huaweicloud.com,
	yukuai3@huawei.com,
	yi.zhang@huawei.com,
	houtao1@huawei.com,
	yangerkun@huawei.com
Subject: [PATCH] block: clean up the check in blkdev_iomap_begin()
Date: Tue, 25 Jun 2024 19:55:17 +0800
Message-Id: <20240625115517.1472120-1-linan666@huaweicloud.com>
X-Mailing-List: linux-block@vger.kernel.org
List-Id: <linux-block.vger.kernel.org>
List-Subscribe: <mailto:linux-block+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-block+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-block:93453 org.kernel.vger.linux-kernel:1258050
Newsgroups: org.kernel.vger.linux-block,org.kernel.vger.linux-kernel
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

From: Li Nan <linan122@huawei.com>

It is odd to check the offset amidst a series of assignments. Moving this
check to the beginning of the function makes the code look better.

Signed-off-by: Li Nan <linan122@huawei.com>
---
 block/fops.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/block/fops.c b/block/fops.c
index 376265935714..bc5ad3e6197f 100644
--- a/block/fops.c
+++ b/block/fops.c
@@ -383,10 +383,11 @@ static int blkdev_iomap_begin(struct inode *inode, loff_t offset, loff_t length,
 	struct block_device *bdev = I_BDEV(inode);
 	loff_t isize = i_size_read(inode);
 
-	iomap->bdev = bdev;
-	iomap->offset = ALIGN_DOWN(offset, bdev_logical_block_size(bdev));
 	if (offset >= isize)
 		return -EIO;
+
+	iomap->bdev = bdev;
+	iomap->offset = ALIGN_DOWN(offset, bdev_logical_block_size(bdev));
 	iomap->type = IOMAP_MAPPED;
 	iomap->addr = iomap->offset;
 	iomap->length = isize - iomap->offset;
-- 
2.39.2

.

From: Jerome Brunet <jbrunet@baylibre.com>
To: Neil Armstrong <neil.armstrong@linaro.org>
Cc: Jerome Brunet <jbrunet@baylibre.com>,
	Kevin Hilman <khilman@baylibre.com>,
	linux-kernel@vger.kernel.org,
	linux-amlogic@lists.infradead.org,
	devicetree@vger.kernel.org,
	Rob Herring <robh@kernel.org>,
	Krzysztof Kozlowski <krzk+dt@kernel.org>,
	Conor Dooley <conor+dt@kernel.org>
Subject: [PATCH] arm64: dts: amlogic: g12: bump spdif output drive strength
Date: Tue, 25 Jun 2024 13:54:41 +0200
Message-ID: <20240625115443.934763-1-jbrunet@baylibre.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
X-Patchwork-Bot: notify
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258055
Newsgroups: org.kernel.vger.linux-kernel,org.infradead.lists.linux-amlogic,org.kernel.vger.linux-devicetree
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Spdif output currently uses a 0.5mA drive strength by default.
While the result depends on how the spdif output is hooked to
rest of the system, this is a bit weak and signal quality
may be poor. This was reported on the vim3l for example.

Increase the drive strength to 3mA, as used for TDM, to be on the
safe side.

Fixes: 649675db939d ("arm64: dts: meson: g12a: add spdifouts")
Signed-off-by: Jerome Brunet <jbrunet@baylibre.com>
---
 arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi b/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi
index 138fb18c6480..4057ee808a58 100644
--- a/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi
+++ b/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi
@@ -987,7 +987,7 @@ spdif_out_h_pins: spdif-out-h {
 						mux {
 							groups = "spdif_out_h";
 							function = "spdif_out";
-							drive-strength-microamp = <500>;
+							drive-strength-microamp = <3000>;
 							bias-disable;
 						};
 					};
@@ -996,7 +996,7 @@ spdif_out_a11_pins: spdif-out-a11 {
 						mux {
 							groups = "spdif_out_a11";
 							function = "spdif_out";
-							drive-strength-microamp = <500>;
+							drive-strength-microamp = <3000>;
 							bias-disable;
 						};
 					};
@@ -1005,7 +1005,7 @@ spdif_out_a13_pins: spdif-out-a13 {
 						mux {
 							groups = "spdif_out_a13";
 							function = "spdif_out";
-							drive-strength-microamp = <500>;
+							drive-strength-microamp = <3000>;
 							bias-disable;
 						};
 					};
@@ -1826,7 +1826,7 @@ spdif_ao_out_pins: spdif-ao-out {
 					mux {
 						groups = "spdif_ao_out";
 						function = "spdif_ao_out";
-						drive-strength-microamp = <500>;
+						drive-strength-microamp = <3000>;
 						bias-disable;
 					};
 				};
-- 
2.43.0

.

From: Geert Uytterhoeven <geert+renesas@glider.be>
To: Philipp Zabel <p.zabel@pengutronix.de>,
	Abel Vesa <abel.vesa@linaro.org>,
	Marco Felsch <m.felsch@pengutronix.de>,
	Shengjiu Wang <shengjiu.wang@nxp.com>
Cc: imx@lists.linux.dev,
	linux-kernel@vger.kernel.org,
	Geert Uytterhoeven <geert+renesas@glider.be>
Subject: [PATCH] reset: RESET_IMX8MP_AUDIOMIX should depend on ARCH_MXC
Date: Tue, 25 Jun 2024 13:57:48 +0200
Message-Id: <6d8116a56186fbf468229e823c7c8dfcd9488959.1719316665.git.geert+renesas@glider.be>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258057
Newsgroups: org.kernel.vger.linux-kernel,dev.linux.lists.imx
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

The i.MX8MP AudioMix reset controller is only present on Freescale i.MX8
SoCs.  Hence add a dependency on ARCH_MXC, to prevent asking the user
about this driver when configuring a kernel without i.MX SoC support.

Fixes: fe125601d17cc1ea ("reset: imx8mp-audiomix: Add AudioMix Block Control reset driver")
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
 drivers/reset/Kconfig | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/reset/Kconfig b/drivers/reset/Kconfig
index e59da17ea0b2d620..36cfdb81cd345f94 100644
--- a/drivers/reset/Kconfig
+++ b/drivers/reset/Kconfig
@@ -93,6 +93,7 @@ config RESET_IMX7
 
 config RESET_IMX8MP_AUDIOMIX
 	tristate "i.MX8MP AudioMix Reset Driver"
+	depends on ARCH_MXC || COMPILE_TEST
 	select AUXILIARY_BUS
 	default CLK_IMX8MP
 	help
-- 
2.34.1

.

From: Claudiu <claudiu.beznea@tuxon.dev>
To: chris.brandt@renesas.com,
	andi.shyti@kernel.org,
	robh@kernel.org,
	krzk+dt@kernel.org,
	conor+dt@kernel.org,
	geert+renesas@glider.be,
	magnus.damm@gmail.com,
	mturquette@baylibre.com,
	sboyd@kernel.org,
	p.zabel@pengutronix.de,
	wsa+renesas@sang-engineering.com
Cc: linux-renesas-soc@vger.kernel.org,
	linux-i2c@vger.kernel.org,
	devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-clk@vger.kernel.org,
	claudiu.beznea@tuxon.dev,
	Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Subject: [PATCH v2 00/12] i2c: riic: Add support for Renesas RZ/G3S
Date: Tue, 25 Jun 2024 15:13:46 +0300
Message-Id: <20240625121358.590547-1-claudiu.beznea.uj@bp.renesas.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258076
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-clk,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-i2c,org.kernel.vger.linux-renesas-soc
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>

Hi,

Series adds I2C support for the Renesas RZ/G3S SoC.

Series is split as follows:
- patch 01/12      - add clock, reset and PM domain support
- patch 02-03/12   - add some cleanups on RIIC driver
- patch 05/12      - enable runtime autosuspend support on the RIIC driver
- patch 06/12      - add suspend to RAM support on the RIIC driver
- patch 07/12      - prepares for the addition of fast mode plus
- patch 08/12      - updates the I2C documentation for the RZ/G3S SoC
- patch 09/12      - add fast mode plus support on the RIIC driver
- patches 10-12/12 - device tree support

Thank you,
Claudiu Beznea

Changes in v2:
- change the i2c clock names to match the documentation
- update commit description for patch "i2c: riic: Use temporary
  variable for struct device"
- addressed review comments
- dropped renesas,riic-no-fast-mode-plus DT property and associated code

Claudiu Beznea (12):
  clk: renesas: r9a08g045: Add clock, reset and power domain support for
    I2C
  i2c: riic: Use temporary variable for struct device
  i2c: riic: Call pm_runtime_get_sync() when need to access registers
  i2c: riic: Use pm_runtime_resume_and_get()
  i2c: riic: Enable runtime PM autosuspend support
  i2c: riic: Add suspend/resume support
  i2c: riic: Define individual arrays to describe the register offsets
  dt-bindings: i2c: renesas,riic: Document the R9A08G045 support
  i2c: riic: Add support for fast mode plus
  arm64: dts: renesas: r9a08g045: Add I2C nodes
  arm64: dts: renesas: rzg3s-smarc: Enable i2c0 node
  arm64: dts: renesas: rzg3s-smarc-som: Enable i2c1 node

 .../devicetree/bindings/i2c/renesas,riic.yaml |   4 +
 arch/arm64/boot/dts/renesas/r9a08g045.dtsi    |  88 +++++++
 .../boot/dts/renesas/rzg3s-smarc-som.dtsi     |   5 +
 arch/arm64/boot/dts/renesas/rzg3s-smarc.dtsi  |   7 +
 drivers/clk/renesas/r9a08g045-cpg.c           |  20 ++
 drivers/i2c/busses/i2c-riic.c                 | 237 ++++++++++++------
 6 files changed, 289 insertions(+), 72 deletions(-)

-- 
2.39.2

.

Return-Path: <linux-nvme-bounces+linux-nvme=archiver.kernel.org@lists.infradead.org>
From: John Meneghini <jmeneghi@redhat.com>
To: kbusch@kernel.org,
	hch@lst.de,
	sagi@grimberg.me
Cc: linux-nvme@lists.infradead.org,
	linux-kernel@vger.kernel.org,
	emilne@redhat.com,
	jmeneghi@redhat.com,
	jrani@purestorage.com,
	randyj@purestorage.com,
	chaitanyak@nvidia.com,
	hare@kernel.org
Subject: [PATCH v8 0/2] nvme: queue-depth multipath iopolicy
Date: Tue, 25 Jun 2024 08:26:03 -0400
Message-ID: <20240625122605.857462-1-jmeneghi@redhat.com>
MIME-Version: 1.0
Content-type: text/plain
Content-Transfer-Encoding: 8bit
X-BeenThere: linux-nvme@lists.infradead.org
X-Mailman-Version: 2.1.34
List-Id: <linux-nvme.lists.infradead.org>
List-Unsubscribe: <http://lists.infradead.org/mailman/options/linux-nvme>,
 <mailto:linux-nvme-request@lists.infradead.org?subject=unsubscribe>
List-Archive: <http://lists.infradead.org/pipermail/linux-nvme/>
List-Post: <mailto:linux-nvme@lists.infradead.org>
List-Help: <mailto:linux-nvme-request@lists.infradead.org?subject=help>
List-Subscribe: <http://lists.infradead.org/mailman/listinfo/linux-nvme>,
 <mailto:linux-nvme-request@lists.infradead.org?subject=subscribe>
Sender: "Linux-nvme" <linux-nvme-bounces@lists.infradead.org>
Errors-To: linux-nvme-bounces+linux-nvme=archiver.kernel.org@lists.infradead.org
Xref: photonic.trudheim.com org.infradead.lists.linux-nvme:61475 org.kernel.vger.linux-kernel:1258090
Newsgroups: org.infradead.lists.linux-nvme,org.kernel.vger.linux-kernel
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

I've addressed all of Christoph's review comments and rebased this to
the latest nvme-6.11 branch. I also retested everything. The test
results can be seen at: 

https://github.com/johnmeneghini/iopolicy/?tab=readme-ov-file#sample-data

Please add this to nvme-6.11.

Changes since V7

Broke the changes to nvme_find_path() into a prepare patch.
This made the patch much more readable. Removed the WARN_ON_ONCE
in nvme_mpath_end_request() and changed the pr_notice message
in nvme_subsys_iopolicy_update().

Changes since V6:

Cleanup tab formatting in nvme.h and removed extra white lines.
Removed the results variable from nvme_mpath_end_request(). 

Changes since V5:

Refactored nvme_find_path() to reduce the spaghetti code.
Cleaned up all comments and reduced the total size of the 
diff, and fixed the commit message. Thomas Song now 
gets credit as the first author.

Changes since V4:

Removed atomic_set() from and return if (old_iopolicy == iopolicy)
At the beginning of nvme_subsys_iopolicy_update().

Changes since V3:

Addresssed all review comments, fixed the commit log, and moved
nr_counter initialization from nvme_mpath_init_ctlr() to
nvme_mpath_init_identify().

Changes since V2:

Add the NVME_MPATH_CNT_ACTIVE flag to eliminate a READ_ONCE in the
completion path and increment/decrement the active_nr count on all mpath
IOs - including passthru commands.

Send a pr_notice when ever the iopolicy on a subsystem is changed. This
is important for support reasons. It is fully expected that users will
be changing the iopolicy with active IO in progress.

Squashed everything and rebased to nvme-v6.10

Changes since V1:

I'm re-issuing Ewan's queue-depth patches in preparation for LSFMM

These patches were first show at ALPSS 2023 where I shared the following
graphs which measure the IO distribution across 4 active-optimized
controllers using the round-robin verses queue-depth iopolicy.

 https://people.redhat.com/jmeneghi/ALPSS_2023/NVMe_QD_Multipathing.pdf

Since that time we have continued testing these patches with a number of
different nvme-of storage arrays and test bed configurations, and I've
codified the tests and methods we use to measure IO distribution

All of my test results, together with the scripts I used to generate these
graphs, are available at:

 https://github.com/johnmeneghini/iopolicy

Please use the scripts in this repository to do your own testing.

These patches are based on nvme-v6.9


John Meneghini (1):
  nvme-multipath: prepare for "queue-depth" iopolicy

Thomas Song (1):
  nvme-multipath: implement "queue-depth" iopolicy

 drivers/nvme/host/core.c      |   2 +-
 drivers/nvme/host/multipath.c | 102 +++++++++++++++++++++++++++++++---
 drivers/nvme/host/nvme.h      |   4 ++
 3 files changed, 99 insertions(+), 9 deletions(-)

-- 
2.45.2


.

Return-Path: <linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org>
From: <daire.mcnamara@microchip.com>
To: <linux-pci@vger.kernel.org>, <devicetree@vger.kernel.org>
CC: <conor.dooley@microchip.com>, <lpieralisi@kernel.org>, <kw@linux.com>,
	<robh@kernel.org>, <bhelgaas@google.com>, <linux-kernel@vger.kernel.org>,
	<linux-riscv@lists.infradead.org>, <krzk+dt@kernel.org>,
	<conor+dt@kernel.org>, <daire.mcnamara@microchip.com>,
	<ilpo.jarvinen@linux.intel.com>
Subject: [PATCH v5 0/3] Fix address translations on MPFS PCIe controller
Date: Tue, 25 Jun 2024 13:17:46 +0100
Message-ID: <20240625121746.3745641-1-daire.mcnamara@microchip.com>
MIME-Version: 1.0
X-BeenThere: linux-riscv@lists.infradead.org
X-Mailman-Version: 2.1.34
List-Id: <linux-riscv.lists.infradead.org>
List-Unsubscribe: <http://lists.infradead.org/mailman/options/linux-riscv>,
 <mailto:linux-riscv-request@lists.infradead.org?subject=unsubscribe>
List-Archive: <http://lists.infradead.org/pipermail/linux-riscv/>
List-Post: <mailto:linux-riscv@lists.infradead.org>
List-Help: <mailto:linux-riscv-request@lists.infradead.org?subject=help>
List-Subscribe: <http://lists.infradead.org/mailman/listinfo/linux-riscv>,
 <mailto:linux-riscv-request@lists.infradead.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: "linux-riscv" <linux-riscv-bounces@lists.infradead.org>
Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org
Xref: photonic.trudheim.com org.infradead.lists.linux-riscv:78984 org.kernel.vger.linux-kernel:1258091 org.kernel.vger.linux-pci:144451
Newsgroups: org.infradead.lists.linux-riscv,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-kernel,org.kernel.vger.linux-pci
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

From: Daire McNamara <daire.mcnamara@microchip.com>

Hi all,

On Microchip PolarFire SoC (MPFS), the PCIe controller is connected to the
CPU via one of three Fabric Interface Connectors (FICs).  Each FIC present
to the CPU complex as 64-bit AXI-M and 64-bit AXI-S.  To preserve
compatibility with other PolarFire family members, the PCIe controller is
connected to its encapsulating FIC via a 32-bit AXI-M and 32-bit AXI-S
interface.

Each FIC is implemented in FPGA logic and can incorporate logic along its 64-bit
AXI-M to 32-bit AXI-M chain (including address translation) and, likewise, along
its 32-bit AXI-S to 64-bit AXI-S chain (again including address translation).

In order to reduce the potential support space for the PCIe controller in
this environment, MPFS supports certain reference designs for these address
translations: reference designs for cache-coherent memory accesses
and reference designs for non-cache-coherent memory accesses. The precise
details of these reference designs and associated customer guidelines
recommending that customers adhere to the addressing schemes used in those
reference designs are available from Microchip, but the implication for the
PCIe controller address translation between CPU-space and PCIe-space are:

For outbound address translation, the PCIe controller address translation tables
are treated as if they are 32-bit only.  Any further address translation must
be done in FPGA fabric.

For inbound address translation, the PCIe controller is configurable for two
cases:
* In the case of cache-coherent designs, the base of the AXI-S side of the
  address translation must be set to 0 and the size should be 4 GiB wide. The
  FPGA fabric must complete any address translations based on that 0-based
  address translation.
* In the case of non-cache coherent designs, the base of AXI-S side of the
  address translation must be set to 0x8000'0000 and the size shall be 2 GiB
  wide.  The FPGA fabric must complete any address translation based on that
  0x80000000 base.

So, for example, in the non-cache-coherent case, with a device tree property
that maps an inbound range from 0x10'0000'0000 in PCIe space to 0x10'0000'0000
in CPU space, the PCIe rootport will translate a PCIe address of 0x10'0000'0000
to an intermediate 32-bit AXI-S address of 0x8000'0000 and the FIC is
responsible for translating that intermediate 32-bit AXI-S address of
0x8000'0000 to a 64-bit AXI-S address of 0x10'0000'0000.

And similarly, for example, in the cache-coherent case, with a device tree
property that maps an inbound range from 0x10'0000'0000 in PCIe space to
0x10'0000'0000 in CPU space, the PCIe rootport will translate a PCIe address
of 0x10'0000'0000 to an intermediate 32-bit AXI-S address of 0x0000'0000 and
the FIC is responsible for translating that intermediate 32-bit AXI-S address
of 0x0000'0000 to a 64-bit AXI-S address of 0x10'0000'0000.

See https://lore.kernel.org/all/20220902142202.2437658-1-daire.mcnamara@microchip.com/T/
for backstory.

Changes since v4:
- Added more cleanups suggested by Ilpo Jarvinen
  Added cleanups for inbound v4 and outbound v3.

Changes since v3:
- Added nice cleanups suggested by Ilpo Jarvinen

Changes since v2:
- Added <Signed-off-by: tag>

Changes since v1:
- added bindings patch to allow dma-noncoherent
- changed a size_t to u64 to pass 32-bit compile tests
- allowed 64-bit outbound pcie translations
- tied PCIe side of eCAM translation table to 0

Conor Dooley (1):
  dt-bindings: PCI: microchip,pcie-host: allow dma-noncoherent

Daire McNamara (2):
  PCI: microchip: Fix outbound address translation tables
  PCI: microchip: Fix inbound address translation tables

 .../bindings/pci/microchip,pcie-host.yaml     |   2 +
 drivers/pci/controller/pcie-microchip-host.c  | 118 +++++++++++++++---
 2 files changed, 106 insertions(+), 14 deletions(-)


base-commit: a38297e3fb012ddfa7ce0321a7e5a8daeb1872b6
prerequisite-patch-id: 18ffa3e9b0f8886d8d173845165d49d7a4a9f1cd
prerequisite-patch-id: 9fc9d99faa001c3cfb2b6617656d186f609d4cb8
prerequisite-patch-id: 29f2d8291454d817b2266bedd343b3126ad2fdfa
prerequisite-patch-id: bde5836bc0d45aac5f4d03e002e560cdb1333c49
prerequisite-patch-id: 632616001dfa9bdd48afc912c694d1111a7e0df8
-- 
2.34.1


_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
.

From: "yongfa.hu" <hushange@163.com>
To: akpm@linux-foundation.org
Cc: linux-mm@kvack.org,
	linux-kernel@vger.kernel.org,
	hushange@163.com
Subject: [PATCH] mm: remove partial comments of kswapd_shrink_node head
Date: Tue, 25 Jun 2024 20:15:47 +0800
Message-Id: <20240625121547.23613-1-hushange@163.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258095 org.kvack.linux-mm:201316
Newsgroups: org.kernel.vger.linux-kernel,org.kvack.linux-mm
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

when function kswapd_shrink_node return, it will not check the condition
mentioned in the removed comments: "if the lack of progress was
due to pages under writeback", so remove it.

Signed-off-by: yongfa.hu <hushange@163.com>
---
 mm/vmscan.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/mm/vmscan.c b/mm/vmscan.c
index 900bad16e..a2369a3b1 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -6747,8 +6747,7 @@ static bool prepare_kswapd_sleep(pg_data_t *pgdat, int order,
  * zone that is currently unbalanced.
  *
  * Returns true if kswapd scanned at least the requested number of pages to
- * reclaim or if the lack of progress was due to pages under writeback.
- * This is used to determine if the scanning priority needs to be raised.
+ * reclaim. This is used to determine if the scanning priority needs to be raised.
  */
 static bool kswapd_shrink_node(pg_data_t *pgdat,
 			       struct scan_control *sc)
-- 
2.17.1

.

From: Guanshun Liu <lgs156412@gmail.com>
To: rppt@kernel.org
Cc: akpm@linux-foundation.org,
	linux-mm@kvack.org,
	linux-kernel@vger.kernel.org,
	Guanshun Liu <lgs156412@gmail.com>
Subject: [PATCH v2] memblock: export memblock_free() to free reserved memory.
Date: Tue, 25 Jun 2024 20:16:52 +0800
Message-Id: <20240625121652.1189095-1-lgs156412@gmail.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258097 org.kvack.linux-mm:201317
Newsgroups: org.kernel.vger.linux-kernel,org.kvack.linux-mm
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

On architectures that support the preservation of memblock metadata
after __init, allow drivers to call memblock_free() to free a
reservation configured in dts. This is a hack to support the
freeing of bootsplash reservations passed to Linux by the bootloader.

Signed-off-by: Guanshun Liu <lgs156412@gmail.com>
---
 mm/memblock.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/mm/memblock.c b/mm/memblock.c
index 6d18485571b4..20e7f81fc076 100644
--- a/mm/memblock.c
+++ b/mm/memblock.c
@@ -848,6 +848,9 @@ void __init_memblock memblock_free(void *ptr, size_t size)
 	if (ptr)
 		memblock_phys_free(__pa(ptr), size);
 }
+#ifdef CONFIG_ARCH_KEEP_MEMBLOCK
+EXPORT_SYMBOL_GPL(memblock_free);
+#endif
 
 /**
  * memblock_phys_free - free boot memory block
-- 
2.25.1

.

From: Yang Chen <yangchen.openbmc@gmail.com>
To: joel@jms.id.au,
	andrew@codeconstruct.com.au,
	patrick@stwcx.xyz,
	linux-arm-kernel@lists.infradead.org,
	linux-aspeed@lists.ozlabs.org,
	linux-kernel@vger.kernel.org,
	devicetree@vger.kernel.org
Cc: Jerry.Lin@quantatw.com,
	yangchen.openbmc@gmail.com
Subject: [PATCH 00/17] Revise Facebook Minerva BMC DTS
Date: Tue, 25 Jun 2024 20:18:18 +0800
Message-Id: <20240625121835.751013-1-yangchen.openbmc@gmail.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258099
Newsgroups: org.kernel.vger.linux-kernel,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-devicetree
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Revise the Linux device tree entry related to Facebook platform Minerva
specific devices connected to the Aspeed AST2600 BMC.

Yang Chen (17):
  ARM: dts: aspeed: minerva: change the address of tmp75
  ARM: dts: aspeed: minerva: Add spi-gpio
  ARM: dts: aspeed: minerva: change aliases for uart
  ARM: dts: aspeed: minerva: add eeprom on i2c bus
  ARM: dts: aspeed: minerva: change RTC reference
  ARM: dts: aspeed: minerva: enable mdio3
  ARM: dts: aspeed: minerva: remove unused bus and device
  ARM: dts: aspeed: minerva: Define the LEDs node name
  ARM: dts: aspeed: minerva: Add adc sensors for fan board
  ARM: dts: aspeed: minerva: add linename of two pins
  ARM: dts: aspeed: minerva: enable ehci0 for USB
  ARM: dts: aspeed: minerva: add tmp75 sensor
  ARM: dts: minerva: add power monitor xdp710
  ARM: dts: aspeed: minerva: revise sgpio line name
  ARM: dts: aspeed: minerva: Switch the i2c bus number
  ARM: dts: aspeed: minerva: remove unused power device
  ARM: dts: aspeed: minerva: add ltc4287 device

 .../aspeed/aspeed-bmc-facebook-minerva.dts    | 516 +++++++++++++-----
 1 file changed, 373 insertions(+), 143 deletions(-)

-- 
2.34.1

.

From: Dev Jain <dev.jain@arm.com>
To: shuah@kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-kselftest@vger.kernel.org,
	Catalin.Marinas@arm.com,
	will@kernel.org
Cc: broonie@kernel.org,
	ryan.roberts@arm.com,
	rob.herring@arm.com,
	mark.rutland@arm.com,
	linux@armlinux.org.uk,
	suzuki.poulose@arm.com,
	Anshuman.Khandual@arm.com,
	aneesh.kumar@kernel.org,
	linux-kernel@vger.kernel.org,
	Dev Jain <dev.jain@arm.com>
Subject: [PATCH v3 0/9] A new selftests/ directory for arm compatibility testing
Date: Tue, 25 Jun 2024 17:53:59 +0530
Message-Id: <20240625122408.1439097-1-dev.jain@arm.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258121
Newsgroups: org.kernel.vger.linux-kernel,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-kselftest
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

This series introduces the selftests/arm directory, which tests 32 and
64-bit kernel compatibility with 32-bit ELFs running on the Aarch platform.
The need for this bucket of tests is that 32 bit applications built on
legacy ARM architecture must not break on the new Aarch64 platforms and
the 64-bit kernel. The kernel must emulate the data structures, system
calls and the registers according to Aarch32, when running a 32-bit
process; this directory fills that testing requirement.

One may find similarity between this directory and selftests/arm64; it is
advisable to refer to that since a lot has been pulled from there itself.

The mm directory includes a test for checking 4GB limit of the virtual
address space of a process.

The signal directory contains two tests, following a common theme: mangle
with arm_cpsr, dumped by the kernel to user space while invoking the signal
handler; kernel must spot this illegal attempt and terminate the program by
SEGV.

The elf directory includes a test for checking the 32-bit status of the ELF.

The abi directory includes two ptrace tests, in the first, a 32-bit parent
debugs a 32-bit child, and in the second, a 64-bit parent debugs a 32-bit
child. The second test will be skipped when running on a 32-bit kernel.

Credits to Mark Brown for suggesting this work.

Testing:
The series has been tested on the Aarch64 kernel. For the Aarch32 kernel,
I used qemu-system-arm with machine 'vexpress-a15', along with a buildroot
rootfs; the individual statically built tests pass on that, but building
the entire test suite on that remains untested, due to my lack of
experience with qemu and rootfses.
Since I have done some changes in selftests/arm64, I have tested that
those tests do not break.

v2->v3:
 - mm, elf: Split into multiple testcases
 - Eliminate copying in signal/ using ifdeffery and pulling from selftests/arm64
 - Delete config file, since it does not make sense for testing a 32-bit kernel
 - Split ptrace in selftests/arm64, and pull some stuff from there
 - Add abi tests containing ptrace and ptrace_64
 - Fix build warnings in selftests/arm64 (can be applied independent of this series)

v1->v2:
 - Formatting changes
 - Add .gitignore files and config file

v1:
 - https://lore.kernel.org/all/20240405084410.256788-1-dev.jain@arm.com/

Dev Jain (9):
  selftests/arm: Add mm test
  selftests/arm: Add elf test
  selftests: arm, arm64: Use ifdeffery to pull signal infrastructure
  selftests/arm: Add signal tests
  selftests/arm64: Fix build warnings for ptrace
  selftests/arm64: Split ptrace, use ifdeffery
  selftests/arm: Add ptrace test
  selftests/arm: Add ptrace_64 test
  selftests: Add build infrastructure along with README

 tools/testing/selftests/Makefile              |   1 +
 tools/testing/selftests/arm/Makefile          |  56 ++++++++
 tools/testing/selftests/arm/README            |  32 +++++
 tools/testing/selftests/arm/abi/.gitignore    |   4 +
 tools/testing/selftests/arm/abi/Makefile      |  26 ++++
 tools/testing/selftests/arm/abi/ptrace.c      |  82 +++++++++++
 tools/testing/selftests/arm/abi/ptrace.h      |  57 ++++++++
 tools/testing/selftests/arm/abi/ptrace_64.c   |  91 ++++++++++++
 .../selftests/arm/abi/trivial_32bit_program.c |  14 ++
 tools/testing/selftests/arm/elf/.gitignore    |   2 +
 tools/testing/selftests/arm/elf/Makefile      |   6 +
 tools/testing/selftests/arm/elf/parse_elf.c   |  77 ++++++++++
 tools/testing/selftests/arm/mm/.gitignore     |   2 +
 tools/testing/selftests/arm/mm/Makefile       |   6 +
 tools/testing/selftests/arm/mm/compat_va.c    |  89 ++++++++++++
 tools/testing/selftests/arm/signal/.gitignore |   3 +
 tools/testing/selftests/arm/signal/Makefile   |  30 ++++
 .../selftests/arm/signal/test_signals.c       |   2 +
 .../selftests/arm/signal/test_signals.h       |   2 +
 .../selftests/arm/signal/test_signals_utils.c |   2 +
 .../selftests/arm/signal/test_signals_utils.h |   2 +
 .../testcases/mangle_cpsr_invalid_aif_bits.c  |  33 +++++
 .../mangle_cpsr_invalid_compat_toggle.c       |  29 ++++
 tools/testing/selftests/arm64/abi/ptrace.c    | 121 ++--------------
 tools/testing/selftests/arm64/abi/ptrace.h    | 135 ++++++++++++++++++
 .../selftests/arm64/signal/test_signals.h     |  12 ++
 .../arm64/signal/test_signals_utils.c         |  51 +++++--
 .../arm64/signal/test_signals_utils.h         |   3 +
 28 files changed, 850 insertions(+), 120 deletions(-)
 create mode 100644 tools/testing/selftests/arm/Makefile
 create mode 100644 tools/testing/selftests/arm/README
 create mode 100644 tools/testing/selftests/arm/abi/.gitignore
 create mode 100644 tools/testing/selftests/arm/abi/Makefile
 create mode 100644 tools/testing/selftests/arm/abi/ptrace.c
 create mode 100644 tools/testing/selftests/arm/abi/ptrace.h
 create mode 100644 tools/testing/selftests/arm/abi/ptrace_64.c
 create mode 100644 tools/testing/selftests/arm/abi/trivial_32bit_program.c
 create mode 100644 tools/testing/selftests/arm/elf/.gitignore
 create mode 100644 tools/testing/selftests/arm/elf/Makefile
 create mode 100644 tools/testing/selftests/arm/elf/parse_elf.c
 create mode 100644 tools/testing/selftests/arm/mm/.gitignore
 create mode 100644 tools/testing/selftests/arm/mm/Makefile
 create mode 100644 tools/testing/selftests/arm/mm/compat_va.c
 create mode 100644 tools/testing/selftests/arm/signal/.gitignore
 create mode 100644 tools/testing/selftests/arm/signal/Makefile
 create mode 100644 tools/testing/selftests/arm/signal/test_signals.c
 create mode 100644 tools/testing/selftests/arm/signal/test_signals.h
 create mode 100644 tools/testing/selftests/arm/signal/test_signals_utils.c
 create mode 100644 tools/testing/selftests/arm/signal/test_signals_utils.h
 create mode 100644 tools/testing/selftests/arm/signal/testcases/mangle_cpsr_invalid_aif_bits.c
 create mode 100644 tools/testing/selftests/arm/signal/testcases/mangle_cpsr_invalid_compat_toggle.c
 create mode 100644 tools/testing/selftests/arm64/abi/ptrace.h

-- 
2.39.2

.

Return-Path: <linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org>
From: <daire.mcnamara@microchip.com>
To: <linux-pci@vger.kernel.org>, <devicetree@vger.kernel.org>
CC: <conor.dooley@microchip.com>, <lpieralisi@kernel.org>, <kw@linux.com>,
	<robh@kernel.org>, <bhelgaas@google.com>, <linux-kernel@vger.kernel.org>,
	<linux-riscv@lists.infradead.org>, <krzk+dt@kernel.org>,
	<conor+dt@kernel.org>, <daire.mcnamara@microchip.com>,
	<ilpo.jarvinen@linux.intel.com>
Subject: [PATCH v5 0/3] Fix address translations on MPFS PCIe controller
Date: Tue, 25 Jun 2024 13:38:42 +0100
Message-ID: <20240625123845.3747764-1-daire.mcnamara@microchip.com>
MIME-Version: 1.0
X-BeenThere: linux-riscv@lists.infradead.org
X-Mailman-Version: 2.1.34
List-Id: <linux-riscv.lists.infradead.org>
List-Unsubscribe: <http://lists.infradead.org/mailman/options/linux-riscv>,
 <mailto:linux-riscv-request@lists.infradead.org?subject=unsubscribe>
List-Archive: <http://lists.infradead.org/pipermail/linux-riscv/>
List-Post: <mailto:linux-riscv@lists.infradead.org>
List-Help: <mailto:linux-riscv-request@lists.infradead.org?subject=help>
List-Subscribe: <http://lists.infradead.org/mailman/listinfo/linux-riscv>,
 <mailto:linux-riscv-request@lists.infradead.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: "linux-riscv" <linux-riscv-bounces@lists.infradead.org>
Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org
Xref: photonic.trudheim.com org.infradead.lists.linux-riscv:78986 org.kernel.vger.linux-kernel:1258132 org.kernel.vger.linux-pci:144453
Newsgroups: org.infradead.lists.linux-riscv,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-kernel,org.kernel.vger.linux-pci
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

From: Daire McNamara <daire.mcnamara@microchip.com>

Hi all,

On Microchip PolarFire SoC (MPFS), the PCIe controller is connected to the
CPU via one of three Fabric Interface Connectors (FICs).  Each FIC present
to the CPU complex as 64-bit AXI-M and 64-bit AXI-S.  To preserve
compatibility with other PolarFire family members, the PCIe controller is
connected to its encapsulating FIC via a 32-bit AXI-M and 32-bit AXI-S
interface.

Each FIC is implemented in FPGA logic and can incorporate logic along its 64-bit
AXI-M to 32-bit AXI-M chain (including address translation) and, likewise, along
its 32-bit AXI-S to 64-bit AXI-S chain (again including address translation).

In order to reduce the potential support space for the PCIe controller in
this environment, MPFS supports certain reference designs for these address
translations: reference designs for cache-coherent memory accesses
and reference designs for non-cache-coherent memory accesses. The precise
details of these reference designs and associated customer guidelines
recommending that customers adhere to the addressing schemes used in those
reference designs are available from Microchip, but the implication for the
PCIe controller address translation between CPU-space and PCIe-space are:

For outbound address translation, the PCIe controller address translation tables
are treated as if they are 32-bit only.  Any further address translation must
be done in FPGA fabric.

For inbound address translation, the PCIe controller is configurable for two
cases:
* In the case of cache-coherent designs, the base of the AXI-S side of the
  address translation must be set to 0 and the size should be 4 GiB wide. The
  FPGA fabric must complete any address translations based on that 0-based
  address translation.
* In the case of non-cache coherent designs, the base of AXI-S side of the
  address translation must be set to 0x8000'0000 and the size shall be 2 GiB
  wide.  The FPGA fabric must complete any address translation based on that
  0x80000000 base.

So, for example, in the non-cache-coherent case, with a device tree property
that maps an inbound range from 0x10'0000'0000 in PCIe space to 0x10'0000'0000
in CPU space, the PCIe rootport will translate a PCIe address of 0x10'0000'0000
to an intermediate 32-bit AXI-S address of 0x8000'0000 and the FIC is
responsible for translating that intermediate 32-bit AXI-S address of
0x8000'0000 to a 64-bit AXI-S address of 0x10'0000'0000.

And similarly, for example, in the cache-coherent case, with a device tree
property that maps an inbound range from 0x10'0000'0000 in PCIe space to
0x10'0000'0000 in CPU space, the PCIe rootport will translate a PCIe address
of 0x10'0000'0000 to an intermediate 32-bit AXI-S address of 0x0000'0000 and
the FIC is responsible for translating that intermediate 32-bit AXI-S address
of 0x0000'0000 to a 64-bit AXI-S address of 0x10'0000'0000.

See https://lore.kernel.org/all/20220902142202.2437658-1-daire.mcnamara@microchip.com/T/
for backstory.

Changes since v4:
- Added more cleanups suggested by Ilpo Jarvinen
  Added cleanups for inbound v4 and outbound v3.

Changes since v3:
- Added nice cleanups suggested by Ilpo Jarvinen

Changes since v2:
- Added <Signed-off-by: tag>

Changes since v1:
- added bindings patch to allow dma-noncoherent
- changed a size_t to u64 to pass 32-bit compile tests
- allowed 64-bit outbound pcie translations
- tied PCIe side of eCAM translation table to 0

Conor Dooley (1):
  dt-bindings: PCI: microchip,pcie-host: allow dma-noncoherent

Daire McNamara (2):
  PCI: microchip: Fix outbound address translation tables
  PCI: microchip: Fix inbound address translation tables

 .../bindings/pci/microchip,pcie-host.yaml     |   2 +
 drivers/pci/controller/pcie-microchip-host.c  | 118 +++++++++++++++---
 2 files changed, 106 insertions(+), 14 deletions(-)


base-commit: a38297e3fb012ddfa7ce0321a7e5a8daeb1872b6
prerequisite-patch-id: 18ffa3e9b0f8886d8d173845165d49d7a4a9f1cd
prerequisite-patch-id: 9fc9d99faa001c3cfb2b6617656d186f609d4cb8
prerequisite-patch-id: 29f2d8291454d817b2266bedd343b3126ad2fdfa
prerequisite-patch-id: bde5836bc0d45aac5f4d03e002e560cdb1333c49
prerequisite-patch-id: 632616001dfa9bdd48afc912c694d1111a7e0df8
-- 
2.34.1


_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
.

From: Prabhakar <prabhakar.csengg@gmail.com>
To: Laurent Pinchart <laurent.pinchart@ideasonboard.com>,
	Kieran Bingham <kieran.bingham+renesas@ideasonboard.com>,
	David Airlie <airlied@gmail.com>,
	Daniel Vetter <daniel@ffwll.ch>,
	Biju Das <biju.das.jz@bp.renesas.com>,
	Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
	Maxime Ripard <mripard@kernel.org>,
	Thomas Zimmermann <tzimmermann@suse.de>,
	Geert Uytterhoeven <geert+renesas@glider.be>,
	dri-devel@lists.freedesktop.org
Cc: linux-renesas-soc@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	Prabhakar <prabhakar.csengg@gmail.com>,
	Fabrizio Castro <fabrizio.castro.jz@renesas.com>,
	Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Subject: [PATCH] drm: renesas: Move RZ/G2L MIPI DSI driver to rz-du
Date: Tue, 25 Jun 2024 13:32:44 +0100
Message-Id: <20240625123244.200533-1-prabhakar.mahadev-lad.rj@bp.renesas.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258140
Newsgroups: org.kernel.vger.linux-kernel,org.freedesktop.lists.dri-devel,org.kernel.vger.linux-renesas-soc
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

From: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>

All the RZ/G2L DU specific components are located under the rz-du folder,
so it makes sense to move the RZ/G2L MIPI DSI driver there instead of
keeping it in the rcar-du folder. This change improves the organization
and modularity of the driver configuration by grouping related settings together.

Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
---
 drivers/gpu/drm/renesas/rcar-du/Kconfig                   | 8 --------
 drivers/gpu/drm/renesas/rcar-du/Makefile                  | 2 --
 drivers/gpu/drm/renesas/rz-du/Kconfig                     | 8 ++++++++
 drivers/gpu/drm/renesas/rz-du/Makefile                    | 2 ++
 .../gpu/drm/renesas/{rcar-du => rz-du}/rzg2l_mipi_dsi.c   | 0
 .../drm/renesas/{rcar-du => rz-du}/rzg2l_mipi_dsi_regs.h  | 0
 6 files changed, 10 insertions(+), 10 deletions(-)
 rename drivers/gpu/drm/renesas/{rcar-du => rz-du}/rzg2l_mipi_dsi.c (100%)
 rename drivers/gpu/drm/renesas/{rcar-du => rz-du}/rzg2l_mipi_dsi_regs.h (100%)

diff --git a/drivers/gpu/drm/renesas/rcar-du/Kconfig b/drivers/gpu/drm/renesas/rcar-du/Kconfig
index 53c356aed5d5..39af73cf2092 100644
--- a/drivers/gpu/drm/renesas/rcar-du/Kconfig
+++ b/drivers/gpu/drm/renesas/rcar-du/Kconfig
@@ -60,14 +60,6 @@ config DRM_RCAR_MIPI_DSI
 	select DRM_MIPI_DSI
 	select RESET_CONTROLLER
 
-config DRM_RZG2L_MIPI_DSI
-	tristate "RZ/G2L MIPI DSI Encoder Support"
-	depends on DRM && DRM_BRIDGE && OF
-	depends on ARCH_RENESAS || COMPILE_TEST
-	select DRM_MIPI_DSI
-	help
-	  Enable support for the RZ/G2L Display Unit embedded MIPI DSI encoders.
-
 config DRM_RCAR_VSP
 	bool "R-Car DU VSP Compositor Support" if ARM
 	default y if ARM64
diff --git a/drivers/gpu/drm/renesas/rcar-du/Makefile b/drivers/gpu/drm/renesas/rcar-du/Makefile
index b8f2c82651d9..6f132325c8b7 100644
--- a/drivers/gpu/drm/renesas/rcar-du/Makefile
+++ b/drivers/gpu/drm/renesas/rcar-du/Makefile
@@ -14,5 +14,3 @@ obj-$(CONFIG_DRM_RCAR_DU)		+= rcar-du-drm.o
 obj-$(CONFIG_DRM_RCAR_DW_HDMI)		+= rcar_dw_hdmi.o
 obj-$(CONFIG_DRM_RCAR_LVDS)		+= rcar_lvds.o
 obj-$(CONFIG_DRM_RCAR_MIPI_DSI)		+= rcar_mipi_dsi.o
-
-obj-$(CONFIG_DRM_RZG2L_MIPI_DSI)	+= rzg2l_mipi_dsi.o
diff --git a/drivers/gpu/drm/renesas/rz-du/Kconfig b/drivers/gpu/drm/renesas/rz-du/Kconfig
index 5f0db2c5fee6..8ec14271ebba 100644
--- a/drivers/gpu/drm/renesas/rz-du/Kconfig
+++ b/drivers/gpu/drm/renesas/rz-du/Kconfig
@@ -10,3 +10,11 @@ config DRM_RZG2L_DU
 	help
 	  Choose this option if you have an RZ/G2L alike chipset.
 	  If M is selected the module will be called rzg2l-du-drm.
+
+config DRM_RZG2L_MIPI_DSI
+	tristate "RZ/G2L MIPI DSI Encoder Support"
+	depends on DRM && DRM_BRIDGE && OF
+	depends on ARCH_RENESAS || COMPILE_TEST
+	select DRM_MIPI_DSI
+	help
+	  Enable support for the RZ/G2L Display Unit embedded MIPI DSI encoders.
diff --git a/drivers/gpu/drm/renesas/rz-du/Makefile b/drivers/gpu/drm/renesas/rz-du/Makefile
index 663b82a2577f..2987900ea6b6 100644
--- a/drivers/gpu/drm/renesas/rz-du/Makefile
+++ b/drivers/gpu/drm/renesas/rz-du/Makefile
@@ -6,3 +6,5 @@ rzg2l-du-drm-y := rzg2l_du_crtc.o \
 
 rzg2l-du-drm-$(CONFIG_VIDEO_RENESAS_VSP1)	+= rzg2l_du_vsp.o
 obj-$(CONFIG_DRM_RZG2L_DU)		+= rzg2l-du-drm.o
+
+obj-$(CONFIG_DRM_RZG2L_MIPI_DSI)	+= rzg2l_mipi_dsi.o
diff --git a/drivers/gpu/drm/renesas/rcar-du/rzg2l_mipi_dsi.c b/drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c
similarity index 100%
rename from drivers/gpu/drm/renesas/rcar-du/rzg2l_mipi_dsi.c
rename to drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c
diff --git a/drivers/gpu/drm/renesas/rcar-du/rzg2l_mipi_dsi_regs.h b/drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi_regs.h
similarity index 100%
rename from drivers/gpu/drm/renesas/rcar-du/rzg2l_mipi_dsi_regs.h
rename to drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi_regs.h
-- 
2.34.1

.

From: Kory Maincent <kory.maincent@bootlin.com>
Subject: [PATCH net-next v4 0/7] net: pse-pd: Add new PSE c33 features
Date: Tue, 25 Jun 2024 14:33:45 +0200
Message-Id: <20240625-feature_poe_power_cap-v4-0-b0813aad57d5@bootlin.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
To: "David S. Miller" <davem@davemloft.net>, 
 Eric Dumazet <edumazet@google.com>, Jakub Kicinski <kuba@kernel.org>, 
 Paolo Abeni <pabeni@redhat.com>, Donald Hunter <donald.hunter@gmail.com>, 
 Oleksij Rempel <o.rempel@pengutronix.de>, Jonathan Corbet <corbet@lwn.net>
Cc: Thomas Petazzoni <thomas.petazzoni@bootlin.com>, 
 linux-kernel@vger.kernel.org, netdev@vger.kernel.org, 
 Dent Project <dentproject@linuxfoundation.org>, kernel@pengutronix.de, 
 linux-doc@vger.kernel.org, Kory Maincent <kory.maincent@bootlin.com>
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258141 org.kernel.vger.netdev:354973
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-doc,org.kernel.vger.netdev
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

From: Kory Maincent (Dent Project) <kory.maincent@bootlin.com>

This patch series adds new c33 features to the PSE API.
- Expand the PSE PI informations status with power, class and failure
  reason
- Add the possibility to get and set the PSE PIs power limit

Changes in v4:
- Made few update in PSE extended state an substate.
- Add support for c33 pse power limit ranges.
- Few changes in the specs and the documentation.
- Link to v3: https://lore.kernel.org/r/20240614-feature_poe_power_cap-v3-0-a26784e78311@bootlin.com

Changes in v3:
- Use u32 instead of u8 size for c33 pse extended state and substate.
- Reformat the state and substate enumeration to follow Oleksij proposal which
  is more IEEE 802.3 standard compliant
- Sent the first patch standalone in net.
- Link to v2: https://lore.kernel.org/r/20240607-feature_poe_power_cap-v2-0-c03c2deb83ab@bootlin.com

Changes in v2:
- Use uA and uV instead of mA and mV to have more precision in the power
  calculation. Need to use 64bit variables for the calculation.
- Modify the pd-92x0behavior in case of setting the current out of the
  available ranges. Report an error now.
- Link to v1: https://lore.kernel.org/r/20240529-feature_poe_power_cap-v1-0-0c4b1d5953b8@bootlin.com

Signed-off-by: Kory Maincent <kory.maincent@bootlin.com>
---
Kory Maincent (7):
      net: ethtool: pse-pd: Expand C33 PSE status with class, power and extended state
      netlink: specs: Expand the PSE netlink command with C33 new features
      net: pse-pd: pd692x0: Expand ethtool status message
      net: pse-pd: Add new power limit get and set c33 features
      net: ethtool: Add new power limit get and set features
      netlink: specs: Expand the PSE netlink command with C33 pw-limit attributes
      net: pse-pd: pd692x0: Enhance with new current limit and voltage read callbacks

 Documentation/netlink/specs/ethtool.yaml     |  58 +++++
 Documentation/networking/ethtool-netlink.rst |  87 +++++++-
 drivers/net/pse-pd/pd692x0.c                 | 317 ++++++++++++++++++++++++++-
 drivers/net/pse-pd/pse_core.c                | 172 ++++++++++++++-
 include/linux/ethtool.h                      |  20 ++
 include/linux/pse-pd/pse.h                   |  51 +++++
 include/uapi/linux/ethtool.h                 | 191 ++++++++++++++++
 include/uapi/linux/ethtool_netlink.h         |  12 +
 net/ethtool/pse-pd.c                         | 119 +++++++++-
 9 files changed, 997 insertions(+), 30 deletions(-)
---
base-commit: b98d89947d124c8ca9150b32fdc0c5fb099243cf
change-id: 20240425-feature_poe_power_cap-18e90ba7294b

Best regards,
-- 
KÃ¶ry Maincent, Bootlin
Embedded Linux and kernel engineering
https://bootlin.com

.

From: Conor Dooley <conor.dooley@microchip.com>
To: <linux-kernel@vger.kernel.org>
CC: <conor@kernel.org>, <conor.dooley@microchip.com>, Ulf Hansson
	<ulf.hansson@linaro.org>, Cyril Jean <cyril.jean@microchip.com>,
	<linux-mmc@vger.kernel.org>
Subject: [PATCH v2] mmc: mmc_spi: allow for spi controllers incapable of getting as low as 400k
Date: Tue, 25 Jun 2024 13:33:21 +0100
Message-ID: <20240625-gigantic-frown-1ef4afa3e6fa@wendy>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258149
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-mmc
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Some controllers may not be able to reach a bus clock as low as 400 KHz
due to a lack of sufficient divisors. In these cases, the SD card slot
becomes non-functional as Linux continuously attempts to set the bus
clock to 400 KHz. If the controller is incapable of getting that low,
set its minimum frequency instead. While this may eliminate some SD
cards, it allows those capable of operating at the controller's minimum
frequency to be used.

Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
---

Without the RFC tag, but otherwise unchanged.

rfc/v1: https://lore.kernel.org/all/20240612-dense-resample-563f07c30185@spud/

CC: Ulf Hansson <ulf.hansson@linaro.org>
CC: Cyril Jean <cyril.jean@microchip.com>
CC: linux-mmc@vger.kernel.org
CC: linux-kernel@vger.kernel.org
---
 drivers/mmc/host/mmc_spi.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/mmc/host/mmc_spi.c b/drivers/mmc/host/mmc_spi.c
index 09d7a6a0dc1aa..c9caa1ece7ef9 100644
--- a/drivers/mmc/host/mmc_spi.c
+++ b/drivers/mmc/host/mmc_spi.c
@@ -1208,7 +1208,10 @@ static int mmc_spi_probe(struct spi_device *spi)
 	 * that's the only reason not to use a few MHz for f_min (until
 	 * the upper layer reads the target frequency from the CSD).
 	 */
-	mmc->f_min = 400000;
+	if (spi->controller->min_speed_hz > 400000)
+		dev_warn(&spi->dev,"Controller unable to reduce bus clock to 400 KHz\n");
+
+	mmc->f_min = max(spi->controller->min_speed_hz, 400000);
 	mmc->f_max = spi->max_speed_hz;
 
 	host = mmc_priv(mmc);
-- 
2.43.2

.

From: Jocelyn Falempe <jfalempe@redhat.com>
To: Michael Ellerman <mpe@ellerman.id.au>,
	Nicholas Piggin <npiggin@gmail.com>,
	Christophe Leroy <christophe.leroy@csgroup.eu>,
	"Naveen N. Rao" <naveen.n.rao@linux.ibm.com>,
	Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
	Maxime Ripard <mripard@kernel.org>,
	Thomas Zimmermann <tzimmermann@suse.de>,
	David Airlie <airlied@gmail.com>,
	Daniel Vetter <daniel@ffwll.ch>,
	"K. Y. Srinivasan" <kys@microsoft.com>,
	Haiyang Zhang <haiyangz@microsoft.com>,
	Wei Liu <wei.liu@kernel.org>,
	Dexuan Cui <decui@microsoft.com>,
	Miquel Raynal <miquel.raynal@bootlin.com>,
	Richard Weinberger <richard@nod.at>,
	Vignesh Raghavendra <vigneshr@ti.com>,
	Kees Cook <kees@kernel.org>,
	Tony Luck <tony.luck@intel.com>,
	"Guilherme G. Piccoli" <gpiccoli@igalia.com>,
	Petr Mladek <pmladek@suse.com>,
	Steven Rostedt <rostedt@goodmis.org>,
	John Ogness <john.ogness@linutronix.de>,
	Sergey Senozhatsky <senozhatsky@chromium.org>,
	Jocelyn Falempe <jfalempe@redhat.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Jani Nikula <jani.nikula@intel.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Kefeng Wang <wangkefeng.wang@huawei.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	Uros Bizjak <ubizjak@gmail.com>,
	linuxppc-dev@lists.ozlabs.org,
	linux-kernel@vger.kernel.org,
	dri-devel@lists.freedesktop.org,
	linux-hyperv@vger.kernel.org,
	linux-mtd@lists.infradead.org,
	linux-hardening@vger.kernel.org
Subject: [PATCH] printk: Add a short description string to kmsg_dump()
Date: Tue, 25 Jun 2024 14:39:29 +0200
Message-ID: <20240625123954.211184-1-jfalempe@redhat.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258155
Newsgroups: org.kernel.vger.linux-kernel,org.freedesktop.lists.dri-devel,org.infradead.lists.linux-mtd,org.kernel.vger.linux-hardening,org.kernel.vger.linux-hyperv
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

kmsg_dump doesn't forward the panic reason string to the kmsg_dumper
callback.
This patch adds a new parameter "const char *desc" to the kmsg_dumper
dump() callback, and update all drivers that are using it.

To avoid updating all kmsg_dump() call, it adds a kmsg_dump_desc()
function and a macro for backward compatibility.

I've written this for drm_panic, but it can be useful for other
kmsg_dumper.
It allows to see the panic reason, like "sysrq triggered crash"
or "VFS: Unable to mount root fs on xxxx" on the drm panic screen.

Signed-off-by: Jocelyn Falempe <jfalempe@redhat.com>
---
 arch/powerpc/kernel/nvram_64.c             |  3 ++-
 arch/powerpc/platforms/powernv/opal-kmsg.c |  3 ++-
 drivers/gpu/drm/drm_panic.c                |  3 ++-
 drivers/hv/hv_common.c                     |  3 ++-
 drivers/mtd/mtdoops.c                      |  3 ++-
 fs/pstore/platform.c                       |  3 ++-
 include/linux/kmsg_dump.h                  | 13 ++++++++++---
 kernel/panic.c                             |  2 +-
 kernel/printk/printk.c                     |  8 +++++---
 9 files changed, 28 insertions(+), 13 deletions(-)

diff --git a/arch/powerpc/kernel/nvram_64.c b/arch/powerpc/kernel/nvram_64.c
index e385d3164648c..6b3a80d8cfa64 100644
--- a/arch/powerpc/kernel/nvram_64.c
+++ b/arch/powerpc/kernel/nvram_64.c
@@ -643,7 +643,8 @@ void __init nvram_init_oops_partition(int rtas_partition_exists)
  * partition.  If that's too much, go back and capture uncompressed text.
  */
 static void oops_to_nvram(struct kmsg_dumper *dumper,
-			  enum kmsg_dump_reason reason)
+			  enum kmsg_dump_reason reason,
+			  const char *desc)
 {
 	struct oops_log_info *oops_hdr = (struct oops_log_info *)oops_buf;
 	static unsigned int oops_count = 0;
diff --git a/arch/powerpc/platforms/powernv/opal-kmsg.c b/arch/powerpc/platforms/powernv/opal-kmsg.c
index 6c3bc4b4da983..49b60de6feb04 100644
--- a/arch/powerpc/platforms/powernv/opal-kmsg.c
+++ b/arch/powerpc/platforms/powernv/opal-kmsg.c
@@ -20,7 +20,8 @@
  * message, it just ensures that OPAL completely flushes the console buffer.
  */
 static void kmsg_dump_opal_console_flush(struct kmsg_dumper *dumper,
-				     enum kmsg_dump_reason reason)
+				     enum kmsg_dump_reason reason,
+				     const char *desc)
 {
 	/*
 	 * Outside of a panic context the pollers will continue to run,
diff --git a/drivers/gpu/drm/drm_panic.c b/drivers/gpu/drm/drm_panic.c
index 293d4dcbc80da..88e9359fe6d78 100644
--- a/drivers/gpu/drm/drm_panic.c
+++ b/drivers/gpu/drm/drm_panic.c
@@ -604,7 +604,8 @@ static struct drm_plane *to_drm_plane(struct kmsg_dumper *kd)
 	return container_of(kd, struct drm_plane, kmsg_panic);
 }
 
-static void drm_panic(struct kmsg_dumper *dumper, enum kmsg_dump_reason reason)
+static void drm_panic(struct kmsg_dumper *dumper, enum kmsg_dump_reason reason,
+		      const char *desc)
 {
 	struct drm_plane *plane = to_drm_plane(dumper);
 
diff --git a/drivers/hv/hv_common.c b/drivers/hv/hv_common.c
index 9c452bfbd5719..b0786ee9c94e3 100644
--- a/drivers/hv/hv_common.c
+++ b/drivers/hv/hv_common.c
@@ -207,7 +207,8 @@ static int hv_die_panic_notify_crash(struct notifier_block *self,
  * buffer and call into Hyper-V to transfer the data.
  */
 static void hv_kmsg_dump(struct kmsg_dumper *dumper,
-			 enum kmsg_dump_reason reason)
+			 enum kmsg_dump_reason reason,
+			 const char *desc)
 {
 	struct kmsg_dump_iter iter;
 	size_t bytes_written;
diff --git a/drivers/mtd/mtdoops.c b/drivers/mtd/mtdoops.c
index 2f11585b5613e..c618999a96832 100644
--- a/drivers/mtd/mtdoops.c
+++ b/drivers/mtd/mtdoops.c
@@ -298,7 +298,8 @@ static void find_next_position(struct mtdoops_context *cxt)
 }
 
 static void mtdoops_do_dump(struct kmsg_dumper *dumper,
-			    enum kmsg_dump_reason reason)
+			    enum kmsg_dump_reason reason,
+			    const char *desc)
 {
 	struct mtdoops_context *cxt = container_of(dumper,
 			struct mtdoops_context, dump);
diff --git a/fs/pstore/platform.c b/fs/pstore/platform.c
index 3497ede88aa01..a6ed5d56021ef 100644
--- a/fs/pstore/platform.c
+++ b/fs/pstore/platform.c
@@ -275,7 +275,8 @@ void pstore_record_init(struct pstore_record *record,
  * end of the buffer.
  */
 static void pstore_dump(struct kmsg_dumper *dumper,
-			enum kmsg_dump_reason reason)
+			enum kmsg_dump_reason reason,
+			const char *desc)
 {
 	struct kmsg_dump_iter iter;
 	unsigned long	total = 0;
diff --git a/include/linux/kmsg_dump.h b/include/linux/kmsg_dump.h
index 906521c2329ca..a8f8a6204542d 100644
--- a/include/linux/kmsg_dump.h
+++ b/include/linux/kmsg_dump.h
@@ -49,13 +49,15 @@ struct kmsg_dump_iter {
  */
 struct kmsg_dumper {
 	struct list_head list;
-	void (*dump)(struct kmsg_dumper *dumper, enum kmsg_dump_reason reason);
+	void (*dump)(struct kmsg_dumper *dumper,
+		     enum kmsg_dump_reason reason,
+		     const char *desc);
 	enum kmsg_dump_reason max_reason;
 	bool registered;
 };
 
 #ifdef CONFIG_PRINTK
-void kmsg_dump(enum kmsg_dump_reason reason);
+void kmsg_dump_desc(enum kmsg_dump_reason reason, const char *desc);
 
 bool kmsg_dump_get_line(struct kmsg_dump_iter *iter, bool syslog,
 			char *line, size_t size, size_t *len);
@@ -71,7 +73,7 @@ int kmsg_dump_unregister(struct kmsg_dumper *dumper);
 
 const char *kmsg_dump_reason_str(enum kmsg_dump_reason reason);
 #else
-static inline void kmsg_dump(enum kmsg_dump_reason reason)
+static inline void kmsg_dump_desc(enum kmsg_dump_reason reason, const char *desc)
 {
 }
 
@@ -107,4 +109,9 @@ static inline const char *kmsg_dump_reason_str(enum kmsg_dump_reason reason)
 }
 #endif
 
+static inline void kmsg_dump(enum kmsg_dump_reason reason)
+{
+	kmsg_dump_desc(reason, NULL);
+}
+
 #endif /* _LINUX_KMSG_DUMP_H */
diff --git a/kernel/panic.c b/kernel/panic.c
index 0843a275531a7..0a8b29c44f3c1 100644
--- a/kernel/panic.c
+++ b/kernel/panic.c
@@ -378,7 +378,7 @@ void panic(const char *fmt, ...)
 
 	panic_print_sys_info(false);
 
-	kmsg_dump(KMSG_DUMP_PANIC);
+	kmsg_dump_desc(KMSG_DUMP_PANIC, buf);
 
 	/*
 	 * If you doubt kdump always works fine in any situation,
diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
index d0bff0b0abfdb..2e7195894e41a 100644
--- a/kernel/printk/printk.c
+++ b/kernel/printk/printk.c
@@ -4287,14 +4287,16 @@ const char *kmsg_dump_reason_str(enum kmsg_dump_reason reason)
 EXPORT_SYMBOL_GPL(kmsg_dump_reason_str);
 
 /**
- * kmsg_dump - dump kernel log to kernel message dumpers.
+ * kmsg_dump_desc - dump kernel log to kernel message dumpers.
  * @reason: the reason (oops, panic etc) for dumping
+ * @desc: a short string to describe what caused the panic or oops. Can be NULL
+ * if no additional description is available.
  *
  * Call each of the registered dumper's dump() callback, which can
  * retrieve the kmsg records with kmsg_dump_get_line() or
  * kmsg_dump_get_buffer().
  */
-void kmsg_dump(enum kmsg_dump_reason reason)
+void kmsg_dump_desc(enum kmsg_dump_reason reason, const char *desc)
 {
 	struct kmsg_dumper *dumper;
 
@@ -4314,7 +4316,7 @@ void kmsg_dump(enum kmsg_dump_reason reason)
 			continue;
 
 		/* invoke dumper which will iterate over records */
-		dumper->dump(dumper, reason);
+		dumper->dump(dumper, reason, desc);
 	}
 	rcu_read_unlock();
 }

base-commit: f76698bd9a8ca01d3581236082d786e9a6b72bb7
-- 
2.45.1

.

From: Nicolas Schier <n.schier@avm.de>
Date: Tue, 25 Jun 2024 14:45:56 +0200
Subject: [PATCH] kbuild: deb-dpkg: Check optional env variables before use
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
Message-Id: <20240625-mkdebian-check-if-optional-vars-are-defined-v1-1-53f196b9f83a@avm.de>
To: Masahiro Yamada <masahiroy@kernel.org>, 
 Nathan Chancellor <nathan@kernel.org>, Nicolas Schier <nicolas@fjasle.eu>
Cc: linux-kbuild@vger.kernel.org, linux-kernel@vger.kernel.org, 
 Nicolas Schier <n.schier@avm.de>
X-purgate-ID: 149429::1719319560-40F0C4F2-F9180F22/0/0
X-purgate-type: clean
X-purgate-size: 2111
X-purgate-Ad: Categorized by eleven eXpurgate (R) http://www.eleven.de
X-purgate: This mail is considered clean (visit http://www.eleven.de for further information)
X-purgate: clean
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258164
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-kbuild
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Add checks to mkdebian for undefined optional environment variables
before evaluating them.

Some variables used by scripts/package/mkdebian are fully optional and
not set by kbuild.  In order to allow enabling 'set -u' (shell script
exits on dereference of undefined variables), introduce the explicit
checking.

Suggested-by: Masahiro Yamada <masahiroy@kernel.org>
Signed-off-by: Nicolas Schier <n.schier@avm.de>
---
This allows application of the original patch
   [PATCH 1/2] kconfig: add -e and -u options to *conf-cfg.sh scripts
   [PATCH 2/2] kbuild: package: add -e and -u options to shell scripts
as sent https://lore.kernel.org/linux-kbuild/20240611160938.3511096-1-masahiroy@kernel.org/
---
 scripts/package/mkdebian | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/scripts/package/mkdebian b/scripts/package/mkdebian
index b9a5b789c655..2a7bb05c7f60 100755
--- a/scripts/package/mkdebian
+++ b/scripts/package/mkdebian
@@ -19,7 +19,7 @@ if_enabled_echo() {
 }
 
 set_debarch() {
-	if [ -n "$KBUILD_DEBARCH" ] ; then
+	if [ "${KBUILD_DEBARCH:+set}" ] ; then
 		debarch="$KBUILD_DEBARCH"
 		return
 	fi
@@ -147,7 +147,7 @@ fi
 
 # Some variables and settings used throughout the script
 version=$KERNELRELEASE
-if [ -n "$KDEB_PKGVERSION" ]; then
+if [ "${KDEB_PKGVERSION:+set}" ]; then
 	packageversion=$KDEB_PKGVERSION
 else
 	packageversion=$(${srctree}/scripts/setlocalversion --no-local ${srctree})-$($srctree/scripts/build-version)
@@ -164,7 +164,7 @@ debarch=
 set_debarch
 
 # Try to determine distribution
-if [ -n "$KDEB_CHANGELOG_DIST" ]; then
+if [ "${KDEB_CHANGELOG_DIST:+set}" ]; then
         distribution=$KDEB_CHANGELOG_DIST
 # In some cases lsb_release returns the codename as n/a, which breaks dpkg-parsechangelog
 elif distribution=$(lsb_release -cs 2>/dev/null) && [ -n "$distribution" ] && [ "$distribution" != "n/a" ]; then

---
base-commit: 3893a22a160edd1c15b483deb3dee36b36ee4226
change-id: 20240625-mkdebian-check-if-optional-vars-are-defined-a46cf0524e4e

Best regards,
-- 
Nicolas Schier

.

From: Philipp Zabel <p.zabel@pengutronix.de>
Date: Tue, 25 Jun 2024 14:51:41 +0200
Subject: [PATCH] reset: tegra-bpmp: allow building under COMPILE_TEST
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
Message-Id: <20240625-reset-compile-bpmp-v1-1-647e846303d8@pengutronix.de>
To: Thierry Reding <thierry.reding@gmail.com>, 
 Jonathan Hunter <jonathanh@nvidia.com>
Cc: linux-kernel@vger.kernel.org, linux-tegra@vger.kernel.org, 
 kernel@pengutronix.de, Philipp Zabel <p.zabel@pengutronix.de>
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258167
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-tegra
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

The Tegra BPMP reset driver can be compiled without TEGRA_BPMP being
enabled. Allow it to be built under COMPILE_TEST.

Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
---
 drivers/reset/Makefile      | 2 +-
 drivers/reset/tegra/Kconfig | 3 ++-
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/reset/Makefile b/drivers/reset/Makefile
index 1b814f08fed7..27b0bbdfcc04 100644
--- a/drivers/reset/Makefile
+++ b/drivers/reset/Makefile
@@ -3,7 +3,7 @@ obj-y += core.o
 obj-y += hisilicon/
 obj-y += starfive/
 obj-y += sti/
-obj-$(CONFIG_ARCH_TEGRA) += tegra/
+obj-y += tegra/
 obj-$(CONFIG_RESET_A10SR) += reset-a10sr.o
 obj-$(CONFIG_RESET_ATH79) += reset-ath79.o
 obj-$(CONFIG_RESET_AXS10X) += reset-axs10x.o
diff --git a/drivers/reset/tegra/Kconfig b/drivers/reset/tegra/Kconfig
index e4a9a389e98c..4a2d26d1210a 100644
--- a/drivers/reset/tegra/Kconfig
+++ b/drivers/reset/tegra/Kconfig
@@ -1,3 +1,4 @@
 # SPDX-License-Identifier: GPL-2.0-only
 config RESET_TEGRA_BPMP
-	def_bool TEGRA_BPMP
+	bool "Tegra BPMP Reset Driver" if COMPILE_TEST
+	default TEGRA_BPMP

---
base-commit: eb5d88b1538850c6d9ddfcd0b59dc7c84831b530
change-id: 20240625-reset-compile-bpmp-b3f46b475c72

Best regards,
-- 
Philipp Zabel <p.zabel@pengutronix.de>

.

From: Jianhua Lin <jianhua.lin@mediatek.com>
To: <daniel.almeida@collabora.com>, <mchehab@kernel.org>,
	<angelogioacchino.delregno@collabora.com>
CC: <linux-media@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
	<linux-arm-kernel@lists.infradead.org>, <linux-mediatek@lists.infradead.org>,
	<Project_Global_Chrome_Upstream_Group@mediatek.com>, Jianhua Lin
	<jianhua.lin@mediatek.com>
Subject: [PATCH v2 1/1] media: mediatek: jpeg: support 34bits
Date: Tue, 25 Jun 2024 20:56:11 +0800
Message-ID: <20240625125611.29145-1-jianhua.lin@mediatek.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258169
Newsgroups: org.kernel.vger.linux-kernel,org.infradead.lists.linux-arm-kernel,org.infradead.lists.linux-mediatek,org.kernel.vger.linux-media
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

the iommu HW supported 34bits iova space(16GB),
but mediatek jpeg enc/dec driver still is 32bit,
then need to set the bit32/bit33 iova to jpeg HW.

Signed-off-by: Jianhua Lin <jianhua.lin@mediatek.com>
---
Changes compared with v1:
- used of_property_read_bool instead.
- used the ternary operator instead.
- added comment to explain the multiplier.
- cleaned up coding style warning max line length.

 .../platform/mediatek/jpeg/mtk_jpeg_core.c    | 10 +++-
 .../platform/mediatek/jpeg/mtk_jpeg_core.h    |  2 +
 .../platform/mediatek/jpeg/mtk_jpeg_dec_hw.c  | 59 +++++++++++++++----
 .../platform/mediatek/jpeg/mtk_jpeg_dec_hw.h  |  1 +
 .../platform/mediatek/jpeg/mtk_jpeg_dec_reg.h |  8 +++
 .../platform/mediatek/jpeg/mtk_jpeg_enc_hw.c  | 45 ++++++++++++--
 .../platform/mediatek/jpeg/mtk_jpeg_enc_hw.h  | 11 +++-
 7 files changed, 117 insertions(+), 19 deletions(-)

diff --git a/drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.c b/drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.c
index ac48658e2de4..5e3053f99dda 100644
--- a/drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.c
+++ b/drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.c
@@ -1030,6 +1030,7 @@ static void mtk_jpeg_dec_device_run(void *priv)
 	spin_lock_irqsave(&jpeg->hw_lock, flags);
 	mtk_jpeg_dec_reset(jpeg->reg_base);
 	mtk_jpeg_dec_set_config(jpeg->reg_base,
+				jpeg->support_34bit,
 				&jpeg_src_buf->dec_param,
 				jpeg_src_buf->bs_size,
 				&bs,
@@ -1317,6 +1318,11 @@ static int mtk_jpeg_probe(struct platform_device *pdev)
 		return -EINVAL;
 	}
 
+	if (of_property_read_bool(pdev->dev.of_node, "mediatek,34bits"))
+		jpeg->support_34bit = true;
+
+	dev_info(&pdev->dev, "use 34bits: %d", jpeg->support_34bit);
+
 	if (!jpeg->variant->multi_core) {
 		ret = mtk_jpeg_single_core_init(pdev, jpeg);
 		if (ret) {
@@ -1564,7 +1570,8 @@ static irqreturn_t mtk_jpeg_enc_done(struct mtk_jpeg_dev *jpeg)
 	src_buf = v4l2_m2m_src_buf_remove(ctx->fh.m2m_ctx);
 	dst_buf = v4l2_m2m_dst_buf_remove(ctx->fh.m2m_ctx);
 
-	result_size = mtk_jpeg_enc_get_file_size(jpeg->reg_base);
+	result_size = mtk_jpeg_enc_get_file_size(jpeg->reg_base,
+			ctx->jpeg->support_34bit);
 	vb2_set_plane_payload(&dst_buf->vb2_buf, 0, result_size);
 
 	buf_state = VB2_BUF_STATE_DONE;
@@ -1764,6 +1771,7 @@ static void mtk_jpegdec_worker(struct work_struct *work)
 	ctx->total_frame_num++;
 	mtk_jpeg_dec_reset(comp_jpeg[hw_id]->reg_base);
 	mtk_jpeg_dec_set_config(comp_jpeg[hw_id]->reg_base,
+				jpeg->support_34bit,
 				&jpeg_src_buf->dec_param,
 				jpeg_src_buf->bs_size,
 				&bs,
diff --git a/drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.h b/drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.h
index 8ba6e757e11a..42f9af8d2e2a 100644
--- a/drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.h
+++ b/drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.h
@@ -209,6 +209,7 @@ struct mtk_jpegdec_comp_dev {
  * @reg_decbase:	jpg decode register base addr
  * @dec_hw_dev:	jpg decode hardware device
  * @hw_index:		jpg hw index
+ * @support_34bit:	flag to check if support dma_address 34bit
  */
 struct mtk_jpeg_dev {
 	struct mutex		lock;
@@ -231,6 +232,7 @@ struct mtk_jpeg_dev {
 	void __iomem *reg_decbase[MTK_JPEGDEC_HW_MAX];
 	struct mtk_jpegdec_comp_dev *dec_hw_dev[MTK_JPEGDEC_HW_MAX];
 	atomic_t hw_index;
+	bool support_34bit;
 };
 
 /**
diff --git a/drivers/media/platform/mediatek/jpeg/mtk_jpeg_dec_hw.c b/drivers/media/platform/mediatek/jpeg/mtk_jpeg_dec_hw.c
index 4a6ee211e18f..931eb99c44b7 100644
--- a/drivers/media/platform/mediatek/jpeg/mtk_jpeg_dec_hw.c
+++ b/drivers/media/platform/mediatek/jpeg/mtk_jpeg_dec_hw.c
@@ -270,7 +270,7 @@ void mtk_jpeg_dec_reset(void __iomem *base)
 EXPORT_SYMBOL_GPL(mtk_jpeg_dec_reset);
 
 static void mtk_jpeg_dec_set_brz_factor(void __iomem *base, u8 yscale_w,
-					u8 yscale_h, u8 uvscale_w, u8 uvscale_h)
+				u8 yscale_h, u8 uvscale_w, u8 uvscale_h)
 {
 	u32 val;
 
@@ -279,23 +279,43 @@ static void mtk_jpeg_dec_set_brz_factor(void __iomem *base, u8 yscale_w,
 	writel(val, base + JPGDEC_REG_BRZ_FACTOR);
 }
 
-static void mtk_jpeg_dec_set_dst_bank0(void __iomem *base, u32 addr_y,
-				       u32 addr_u, u32 addr_v)
+static void mtk_jpeg_dec_set_dst_bank0(void __iomem *base, bool support_34bit,
+		dma_addr_t addr_y, dma_addr_t addr_u, dma_addr_t addr_v)
 {
+	u32 val;
+
 	mtk_jpeg_verify_align(addr_y, 16, JPGDEC_REG_DEST_ADDR0_Y);
 	writel(addr_y, base + JPGDEC_REG_DEST_ADDR0_Y);
 	mtk_jpeg_verify_align(addr_u, 16, JPGDEC_REG_DEST_ADDR0_U);
 	writel(addr_u, base + JPGDEC_REG_DEST_ADDR0_U);
 	mtk_jpeg_verify_align(addr_v, 16, JPGDEC_REG_DEST_ADDR0_V);
 	writel(addr_v, base + JPGDEC_REG_DEST_ADDR0_V);
+	if (support_34bit) {
+		val = upper_32_bits(addr_y) & 0x3;
+		writel(val, base + JPGDEC_REG_DEST_ADDR0_Y_EXT);
+		val = upper_32_bits(addr_u) & 0x3;
+		writel(val, base + JPGDEC_REG_DEST_ADDR0_U_EXT);
+		val = upper_32_bits(addr_v) & 0x3;
+		writel(val, base + JPGDEC_REG_DEST_ADDR0_V_EXT);
+	}
 }
 
-static void mtk_jpeg_dec_set_dst_bank1(void __iomem *base, u32 addr_y,
-				       u32 addr_u, u32 addr_v)
+static void mtk_jpeg_dec_set_dst_bank1(void __iomem *base, bool support_34bit,
+		dma_addr_t addr_y, dma_addr_t addr_u, dma_addr_t addr_v)
 {
+	u32 val;
+
 	writel(addr_y, base + JPGDEC_REG_DEST_ADDR1_Y);
 	writel(addr_u, base + JPGDEC_REG_DEST_ADDR1_U);
 	writel(addr_v, base + JPGDEC_REG_DEST_ADDR1_V);
+	if (support_34bit) {
+		val = upper_32_bits(addr_y) & 0x3;
+		writel(val, base + JPGDEC_REG_DEST_ADDR1_Y_EXT);
+		val = upper_32_bits(addr_u) & 0x3;
+		writel(val, base + JPGDEC_REG_DEST_ADDR1_U_EXT);
+		val = upper_32_bits(addr_v) & 0x3;
+		writel(val, base + JPGDEC_REG_DEST_ADDR1_V_EXT);
+	}
 }
 
 static void mtk_jpeg_dec_set_mem_stride(void __iomem *base, u32 stride_y,
@@ -322,18 +342,31 @@ static void mtk_jpeg_dec_set_dec_mode(void __iomem *base, u32 mode)
 	writel(mode & 0x03, base + JPGDEC_REG_OPERATION_MODE);
 }
 
-static void mtk_jpeg_dec_set_bs_write_ptr(void __iomem *base, u32 ptr)
+static void mtk_jpeg_dec_set_bs_write_ptr(void __iomem *base,
+				bool support_34bit, dma_addr_t ptr)
 {
+	u32 val;
+
 	mtk_jpeg_verify_align(ptr, 16, JPGDEC_REG_FILE_BRP);
 	writel(ptr, base + JPGDEC_REG_FILE_BRP);
+	if (support_34bit) {
+		val = upper_32_bits(ptr) & 0x3;
+		writel(val, base + JPGDEC_REG_FILE_BRP_EXT);
+	}
 }
 
-static void mtk_jpeg_dec_set_bs_info(void __iomem *base, u32 addr, u32 size,
-				     u32 bitstream_size)
+static void mtk_jpeg_dec_set_bs_info(void __iomem *base, bool support_34bit,
+		dma_addr_t addr, u32 size, u32 bitstream_size)
 {
+	u32 val;
+
 	mtk_jpeg_verify_align(addr, 16, JPGDEC_REG_FILE_ADDR);
 	mtk_jpeg_verify_align(size, 128, JPGDEC_REG_FILE_TOTAL_SIZE);
 	writel(addr, base + JPGDEC_REG_FILE_ADDR);
+	if (support_34bit) {
+		val = upper_32_bits(addr) & 0x3;
+		writel(val, base + JPGDEC_REG_FILE_ADDR_EXT);
+	}
 	writel(size, base + JPGDEC_REG_FILE_TOTAL_SIZE);
 	writel(bitstream_size, base + JPGDEC_REG_BIT_STREAM_SIZE);
 }
@@ -404,6 +437,7 @@ static void mtk_jpeg_dec_set_sampling_factor(void __iomem *base, u32 comp_num,
 }
 
 void mtk_jpeg_dec_set_config(void __iomem *base,
+			     bool support_34bits,
 			     struct mtk_jpeg_dec_param *cfg,
 			     u32 bitstream_size,
 			     struct mtk_jpeg_bs *bs,
@@ -413,8 +447,9 @@ void mtk_jpeg_dec_set_config(void __iomem *base,
 	mtk_jpeg_dec_set_dec_mode(base, 0);
 	mtk_jpeg_dec_set_comp0_du(base, cfg->unit_num);
 	mtk_jpeg_dec_set_total_mcu(base, cfg->total_mcu);
-	mtk_jpeg_dec_set_bs_info(base, bs->str_addr, bs->size, bitstream_size);
-	mtk_jpeg_dec_set_bs_write_ptr(base, bs->end_addr);
+	mtk_jpeg_dec_set_bs_info(base, support_34bits, bs->str_addr,
+				       bs->size, bitstream_size);
+	mtk_jpeg_dec_set_bs_write_ptr(base, support_34bits, bs->end_addr);
 	mtk_jpeg_dec_set_du_membership(base, cfg->membership, 1,
 				       (cfg->comp_num == 1) ? 1 : 0);
 	mtk_jpeg_dec_set_comp_id(base, cfg->comp_id[0], cfg->comp_id[1],
@@ -432,9 +467,9 @@ void mtk_jpeg_dec_set_config(void __iomem *base,
 				    cfg->mem_stride[1]);
 	mtk_jpeg_dec_set_img_stride(base, cfg->img_stride[0],
 				    cfg->img_stride[1]);
-	mtk_jpeg_dec_set_dst_bank0(base, fb->plane_addr[0],
+	mtk_jpeg_dec_set_dst_bank0(base, support_34bits, fb->plane_addr[0],
 				   fb->plane_addr[1], fb->plane_addr[2]);
-	mtk_jpeg_dec_set_dst_bank1(base, 0, 0, 0);
+	mtk_jpeg_dec_set_dst_bank1(base, support_34bits, 0, 0, 0);
 	mtk_jpeg_dec_set_dma_group(base, cfg->dma_mcu, cfg->dma_group,
 				   cfg->dma_last_mcu);
 	mtk_jpeg_dec_set_pause_mcu_idx(base, cfg->total_mcu);
diff --git a/drivers/media/platform/mediatek/jpeg/mtk_jpeg_dec_hw.h b/drivers/media/platform/mediatek/jpeg/mtk_jpeg_dec_hw.h
index 8c31c6b12417..2948c9c300a4 100644
--- a/drivers/media/platform/mediatek/jpeg/mtk_jpeg_dec_hw.h
+++ b/drivers/media/platform/mediatek/jpeg/mtk_jpeg_dec_hw.h
@@ -71,6 +71,7 @@ int mtk_jpeg_dec_fill_param(struct mtk_jpeg_dec_param *param);
 u32 mtk_jpeg_dec_get_int_status(void __iomem *dec_reg_base);
 u32 mtk_jpeg_dec_enum_result(u32 irq_result);
 void mtk_jpeg_dec_set_config(void __iomem *base,
+			     bool support_34bits,
 			     struct mtk_jpeg_dec_param *cfg,
 			     u32 bitstream_size,
 			     struct mtk_jpeg_bs *bs,
diff --git a/drivers/media/platform/mediatek/jpeg/mtk_jpeg_dec_reg.h b/drivers/media/platform/mediatek/jpeg/mtk_jpeg_dec_reg.h
index 27b7711ca341..e94f52de7c69 100644
--- a/drivers/media/platform/mediatek/jpeg/mtk_jpeg_dec_reg.h
+++ b/drivers/media/platform/mediatek/jpeg/mtk_jpeg_dec_reg.h
@@ -46,5 +46,13 @@
 #define JPGDEC_REG_INTERRUPT_STATUS	0x0274
 #define JPGDEC_REG_STATUS		0x0278
 #define JPGDEC_REG_BIT_STREAM_SIZE	0x0344
+#define JPGDEC_REG_DEST_ADDR0_Y_EXT	0x0360
+#define JPGDEC_REG_DEST_ADDR0_U_EXT	0x0364
+#define JPGDEC_REG_DEST_ADDR0_V_EXT	0x0368
+#define JPGDEC_REG_DEST_ADDR1_Y_EXT	0x036c
+#define JPGDEC_REG_DEST_ADDR1_U_EXT	0x0370
+#define JPGDEC_REG_DEST_ADDR1_V_EXT	0x0374
+#define JPGDEC_REG_FILE_ADDR_EXT	0x0378
+#define JPGDEC_REG_FILE_BRP_EXT		0x037c
 
 #endif /* _MTK_JPEG_REG_H */
diff --git a/drivers/media/platform/mediatek/jpeg/mtk_jpeg_enc_hw.c b/drivers/media/platform/mediatek/jpeg/mtk_jpeg_enc_hw.c
index f8fa3b841ccf..0c654afd987e 100644
--- a/drivers/media/platform/mediatek/jpeg/mtk_jpeg_enc_hw.c
+++ b/drivers/media/platform/mediatek/jpeg/mtk_jpeg_enc_hw.c
@@ -62,9 +62,15 @@ void mtk_jpeg_enc_reset(void __iomem *base)
 }
 EXPORT_SYMBOL_GPL(mtk_jpeg_enc_reset);
 
-u32 mtk_jpeg_enc_get_file_size(void __iomem *base)
+u32 mtk_jpeg_enc_get_file_size(void __iomem *base, bool support_34bit)
 {
-	return readl(base + JPEG_ENC_DMA_ADDR0) -
+	/*
+	 * The dma addr0 to be shifted left by 2 bits
+	 * for support greater than 4G address.
+	 */
+	u32 value = (support_34bit) ? 4 : 1;
+
+	return readl(base + JPEG_ENC_DMA_ADDR0) * value -
 	       readl(base + JPEG_ENC_DST_ADDR0);
 }
 EXPORT_SYMBOL_GPL(mtk_jpeg_enc_get_file_size);
@@ -75,6 +81,13 @@ void mtk_jpeg_enc_start(void __iomem *base)
 
 	value = readl(base + JPEG_ENC_CTRL);
 	value |= JPEG_ENC_CTRL_INT_EN_BIT | JPEG_ENC_CTRL_ENABLE_BIT;
+	/*
+	 * Enable hw auto padding for height is not 16 alignment,
+	 * to ensure decoder downscales is correct.
+	 */
+	value |= JPEG_ENC_CTRL_RDMA_PADDING_EN;
+	value |= JPEG_ENC_CTRL_RDMA_RIGHT_PADDING_EN;
+	value &= ~JPEG_ENC_CTRL_RDMA_PADDING_0_EN;
 	writel(value, base + JPEG_ENC_CTRL);
 }
 EXPORT_SYMBOL_GPL(mtk_jpeg_enc_start);
@@ -84,14 +97,25 @@ void mtk_jpeg_set_enc_src(struct mtk_jpeg_ctx *ctx,  void __iomem *base,
 {
 	int i;
 	dma_addr_t dma_addr;
+	u32 val;
+	bool support_34bit = ctx->jpeg->support_34bit;
 
 	for (i = 0; i < src_buf->num_planes; i++) {
 		dma_addr = vb2_dma_contig_plane_dma_addr(src_buf, i) +
 			   src_buf->planes[i].data_offset;
-		if (!i)
+		if (!i) {
 			writel(dma_addr, base + JPEG_ENC_SRC_LUMA_ADDR);
-		else
+			if (support_34bit) {
+				val = upper_32_bits(dma_addr) & 0x3;
+				writel(val, base + JPEG_ENC_SRC_LUMA_ADDR_EXT);
+			}
+		} else {
 			writel(dma_addr, base + JPEG_ENC_SRC_CHROMA_ADDR);
+			if (support_34bit) {
+				val = upper_32_bits(dma_addr) & 0x3;
+				writel(val, base + JPEG_ENC_SRC_CHRO_ADDR_EXT);
+			}
+		}
 	}
 }
 EXPORT_SYMBOL_GPL(mtk_jpeg_set_enc_src);
@@ -103,6 +127,8 @@ void mtk_jpeg_set_enc_dst(struct mtk_jpeg_ctx *ctx, void __iomem *base,
 	size_t size;
 	u32 dma_addr_offset;
 	u32 dma_addr_offsetmask;
+	u32 val;
+	bool support_34bit = ctx->jpeg->support_34bit;
 
 	dma_addr = vb2_dma_contig_plane_dma_addr(dst_buf, 0);
 	dma_addr_offset = ctx->enable_exif ? MTK_JPEG_MAX_EXIF_SIZE : 0;
@@ -112,7 +138,15 @@ void mtk_jpeg_set_enc_dst(struct mtk_jpeg_ctx *ctx, void __iomem *base,
 	writel(dma_addr_offset & ~0xf, base + JPEG_ENC_OFFSET_ADDR);
 	writel(dma_addr_offsetmask & 0xf, base + JPEG_ENC_BYTE_OFFSET_MASK);
 	writel(dma_addr & ~0xf, base + JPEG_ENC_DST_ADDR0);
+	if (support_34bit) {
+		val = upper_32_bits(dma_addr) & 0x3;
+		writel(val, base + JPEG_ENC_DEST_ADDR0_EXT);
+	}
 	writel((dma_addr + size) & ~0xf, base + JPEG_ENC_STALL_ADDR0);
+	if (support_34bit) {
+		val = upper_32_bits(dma_addr + size) & 0x3;
+		writel(val, base + JPEG_ENC_STALL_ADDR0_EXT);
+	}
 }
 EXPORT_SYMBOL_GPL(mtk_jpeg_set_enc_dst);
 
@@ -278,7 +312,8 @@ static irqreturn_t mtk_jpegenc_hw_irq_handler(int irq, void *priv)
 	if (!(irq_status & JPEG_ENC_INT_STATUS_DONE))
 		dev_warn(jpeg->dev, "Jpg Enc occurs unknown Err.");
 
-	result_size = mtk_jpeg_enc_get_file_size(jpeg->reg_base);
+	result_size = mtk_jpeg_enc_get_file_size(jpeg->reg_base,
+			ctx->jpeg->support_34bit);
 	vb2_set_plane_payload(&dst_buf->vb2_buf, 0, result_size);
 	buf_state = VB2_BUF_STATE_DONE;
 	v4l2_m2m_buf_done(src_buf, buf_state);
diff --git a/drivers/media/platform/mediatek/jpeg/mtk_jpeg_enc_hw.h b/drivers/media/platform/mediatek/jpeg/mtk_jpeg_enc_hw.h
index 61c60e4e58ea..cebc6c8fdecd 100644
--- a/drivers/media/platform/mediatek/jpeg/mtk_jpeg_enc_hw.h
+++ b/drivers/media/platform/mediatek/jpeg/mtk_jpeg_enc_hw.h
@@ -68,6 +68,15 @@
 #define JPEG_ENC_DCM_CTRL		0x300
 #define JPEG_ENC_CODEC_SEL		0x314
 #define JPEG_ENC_ULTRA_THRES		0x318
+#define JPEG_ENC_SRC_LUMA_ADDR_EXT      0x584
+#define JPEG_ENC_SRC_CHRO_ADDR_EXT      0x588
+#define JPEG_ENC_Q_TBL_ADDR_EXT         0x58C
+#define JPEG_ENC_DEST_ADDR0_EXT         0x590
+#define JPEG_ENC_STALL_ADDR0_EXT        0x594
+
+#define JPEG_ENC_CTRL_RDMA_PADDING_EN           (1 << 20)
+#define JPEG_ENC_CTRL_RDMA_RIGHT_PADDING_EN     (1 << 29)
+#define JPEG_ENC_CTRL_RDMA_PADDING_0_EN         (1 << 30)
 
 /**
  * struct mtk_jpeg_enc_qlt - JPEG encoder quality data
@@ -80,7 +89,7 @@ struct mtk_jpeg_enc_qlt {
 };
 
 void mtk_jpeg_enc_reset(void __iomem *base);
-u32 mtk_jpeg_enc_get_file_size(void __iomem *base);
+u32 mtk_jpeg_enc_get_file_size(void __iomem *base, bool support_34bit);
 void mtk_jpeg_enc_start(void __iomem *enc_reg_base);
 void mtk_jpeg_set_enc_src(struct mtk_jpeg_ctx *ctx,  void __iomem *base,
 			  struct vb2_buffer *src_buf);
-- 
2.18.0

.

From: Tvrtko Ursulin <tursulin@igalia.com>
To: linux-arm-kernel@lists.infradead.org
Cc: linux-kernel@vger.kernel.org,
	kernel-dev@igalia.com,
	Tvrtko Ursulin <tvrtko.ursulin@igalia.com>,
	Catalin Marinas <catalin.marinas@arm.com>,
	Will Deacon <will@kernel.org>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Subject: [PATCH 0/2] NUMA emulation for arm64
Date: Tue, 25 Jun 2024 13:58:01 +0100
Message-ID: <20240625125803.38038-1-tursulin@igalia.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258172
Newsgroups: org.kernel.vger.linux-kernel,org.infradead.lists.linux-arm-kernel
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

From: Tvrtko Ursulin <tvrtko.ursulin@igalia.com>

This series adds a very simple NUMA emulation implementation and enables
selecting it on arm64 platforms.

Obvious question is why? Short answer - it can bring a significant performance
uplift on Raspberry Pi 5.

Longer answer is that splitting the physical RAM into chunks, and utilising an
allocation policy such as interleaving, can enable the BCM2721 memory controller
to better utilise parallelism in physical memory chip organisation.

In more conrete numbers, testing with Geekbench 6 shows that splitting into four
emulated NUMA nodes can uplift the single core score of the benchmark by around
6%, and the multi-core by around 18%.

Code is quite simple and new functionality can be enabled using the new
NUMA_EMULATION Kconfig option and then at runtime using the existing (shared
with other platforms) numa=fake=<N> kernel boot argument.

Note however that the default allocation policy is not interleaving and further
steps are required to "unlock" the performance uplift.

Simplest method is probably to launch test programs via the
"numactl --interleave=all COMMAND" wrapper, but it is also possible to change
the system wide policy via systemd configuration.

Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Will Deacon <will@kernel.org>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: â€œRafael J. Wysocki" <rafael@kernel.org>

MaÃ­ra Canal (2):
  numa: Add simple generic NUMA emulation
  arm64/numa: Add NUMA emulation for ARM64

 arch/arm64/Kconfig            | 10 ++++++
 drivers/base/Kconfig          |  7 ++++
 drivers/base/Makefile         |  1 +
 drivers/base/arch_numa.c      |  6 ++++
 drivers/base/numa_emulation.c | 67 +++++++++++++++++++++++++++++++++++
 drivers/base/numa_emulation.h | 21 +++++++++++
 6 files changed, 112 insertions(+)
 create mode 100644 drivers/base/numa_emulation.c
 create mode 100644 drivers/base/numa_emulation.h

-- 
2.44.0

.

From: Chen Yu <yu.c.chen@intel.com>
To: Dave Hansen <dave.hansen@linux.intel.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>,
	Borislav Petkov <bp@alien8.de>
Cc: x86@kernel.org,
	"H. Peter Anvin" <hpa@zytor.com>,
	Arnd Bergmann <arnd@arndb.de>,
	virtualization@lists.linux.dev,
	linux-kernel@vger.kernel.org,
	Juergen Gross <jgross@suse.com>,
	Nikolay Borisov <nik.borisov@suse.com>,
	Chen Yu <yu.chen.surf@gmail.com>,
	Chen Yu <yu.c.chen@intel.com>,
	Qiuxu Zhuo <qiuxu.zhuo@intel.com>,
	Prem Nath Dey <prem.nath.dey@intel.com>,
	Xiaoping Zhou <xiaoping.zhou@intel.com>
Subject: [PATCH v3] x86/paravirt: Disable virt spinlock on bare metal
Date: Tue, 25 Jun 2024 20:54:03 +0800
Message-Id: <20240625125403.187110-1-yu.c.chen@intel.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258174
Newsgroups: org.kernel.vger.linux-kernel,dev.linux.lists.virtualization
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

The kernel can change spinlock behavior when running as a guest. But
this guest-friendly behavior causes performance problems on bare metal.
So there's a 'virt_spin_lock_key' static key to switch between the two
modes.

The static key is always enabled by default (run in guest mode) and
should be disabled for bare metal (and in some guests that want native
behavior).

Performance drop is reported when running encode/decode workload and
BenchSEE cache sub-workload.
Bisect points to commit ce0a1b608bfc ("x86/paravirt: Silence unused
native_pv_lock_init() function warning"). When CONFIG_PARAVIRT_SPINLOCKS
is disabled the virt_spin_lock_key is incorrectly set to true on bare
metal. The qspinlock degenerates to test-and-set spinlock, which
decrease the performance on bare metal.

Set the default value of virt_spin_lock_key to false. If booting in a VM,
enable this key. Later during the VM initialization, if other
high-efficient spinlock is preferred(paravirt-spinlock eg), the
virt_spin_lock_key is disabled accordingly. The relation is described as
below:

X86_FEATURE_HYPERVISOR         Y    Y    Y     N
CONFIG_PARAVIRT_SPINLOCKS      Y    Y    N     Y/N
PV spinlock                    Y    N    N     Y/N

virt_spin_lock_key             N    N    Y     N

Fixes: ce0a1b608bfc ("x86/paravirt: Silence unused native_pv_lock_init() function warning")
Suggested-by: Dave Hansen <dave.hansen@linux.intel.com>
Suggested-by: Qiuxu Zhuo <qiuxu.zhuo@intel.com>
Suggested-by: Nikolay Borisov <nik.borisov@suse.com>
Reported-by: Prem Nath Dey <prem.nath.dey@intel.com>
Reported-by: Xiaoping Zhou <xiaoping.zhou@intel.com>
Signed-off-by: Chen Yu <yu.c.chen@intel.com>
---
v2._v3:
  Change the default value of virt_spin_lock_key from true to false.
  Enable this key when it is in the VM, and disable it when needed.
  This makes the code more readable. (Nikolay Borisov)
  Dropped Reviewed-by because the code has been changed.
v1->v2:
  Refine the commit log per Dave's suggestion.
  Simplify the fix by directly disabling the virt_spin_lock_key on bare metal.
  Collect Reviewed-by from Juergen.
---
 arch/x86/include/asm/qspinlock.h | 4 ++--
 arch/x86/kernel/paravirt.c       | 7 +++----
 2 files changed, 5 insertions(+), 6 deletions(-)

diff --git a/arch/x86/include/asm/qspinlock.h b/arch/x86/include/asm/qspinlock.h
index a053c1293975..a32bd2aabdf9 100644
--- a/arch/x86/include/asm/qspinlock.h
+++ b/arch/x86/include/asm/qspinlock.h
@@ -66,13 +66,13 @@ static inline bool vcpu_is_preempted(long cpu)
 
 #ifdef CONFIG_PARAVIRT
 /*
- * virt_spin_lock_key - enables (by default) the virt_spin_lock() hijack.
+ * virt_spin_lock_key - disables (by default) the virt_spin_lock() hijack.
  *
  * Native (and PV wanting native due to vCPU pinning) should disable this key.
  * It is done in this backwards fashion to only have a single direction change,
  * which removes ordering between native_pv_spin_init() and HV setup.
  */
-DECLARE_STATIC_KEY_TRUE(virt_spin_lock_key);
+DECLARE_STATIC_KEY_FALSE(virt_spin_lock_key);
 
 /*
  * Shortcut for the queued_spin_lock_slowpath() function that allows
diff --git a/arch/x86/kernel/paravirt.c b/arch/x86/kernel/paravirt.c
index 5358d43886ad..fec381533555 100644
--- a/arch/x86/kernel/paravirt.c
+++ b/arch/x86/kernel/paravirt.c
@@ -51,13 +51,12 @@ DEFINE_ASM_FUNC(pv_native_irq_enable, "sti", .noinstr.text);
 DEFINE_ASM_FUNC(pv_native_read_cr2, "mov %cr2, %rax", .noinstr.text);
 #endif
 
-DEFINE_STATIC_KEY_TRUE(virt_spin_lock_key);
+DEFINE_STATIC_KEY_FALSE(virt_spin_lock_key);
 
 void __init native_pv_lock_init(void)
 {
-	if (IS_ENABLED(CONFIG_PARAVIRT_SPINLOCKS) &&
-	    !boot_cpu_has(X86_FEATURE_HYPERVISOR))
-		static_branch_disable(&virt_spin_lock_key);
+	if (boot_cpu_has(X86_FEATURE_HYPERVISOR))
+		static_branch_enable(&virt_spin_lock_key);
 }
 
 static void native_tlb_remove_table(struct mmu_gather *tlb, void *table)
-- 
2.25.1

.

From: Tvrtko Ursulin <tursulin@igalia.com>
To: linux-mm@kvack.org
Cc: linux-kernel@vger.kernel.org,
	kernel-dev@igalia.com,
	Tvrtko Ursulin <tvrtko.ursulin@igalia.com>,
	Huang Ying <ying.huang@intel.com>,
	Mel Gorman <mgorman@suse.de>,
	Peter Zijlstra <peterz@infradead.org>,
	Ingo Molnar <mingo@redhat.com>,
	Rik van Riel <riel@surriel.com>,
	Johannes Weiner <hannes@cmpxchg.org>,
	"Matthew Wilcox (Oracle)" <willy@infradead.org>,
	Dave Hansen <dave.hansen@intel.com>,
	Andi Kleen <ak@linux.intel.com>,
	Michal Hocko <mhocko@suse.com>,
	David Rientjes <rientjes@google.com>
Subject: [PATCH] mm/numa_balancing: Teach mpol_to_str about the balancing mode
Date: Tue, 25 Jun 2024 14:26:05 +0100
Message-ID: <20240625132605.38428-1-tursulin@igalia.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258192 org.kvack.linux-mm:201325
Newsgroups: org.kernel.vger.linux-kernel,org.kvack.linux-mm
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

From: Tvrtko Ursulin <tvrtko.ursulin@igalia.com>

If a task has had MPOL_F_NUMA_BALANCING set it is useful to show that in
procfs. Teach the mpol_to_str helper about its existance and while at it
update the comment to account for "weighted interleave" when suggesting
a recommended buffer size.

Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@igalia.com>
References: bda420b98505 ("numa balancing: migrate on fault among multiple bound nodes")
Cc: Huang Ying <ying.huang@intel.com>
Cc: Mel Gorman <mgorman@suse.de>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Rik van Riel <riel@surriel.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org>
Cc: Dave Hansen <dave.hansen@intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Michal Hocko <mhocko@suse.com>
Cc: David Rientjes <rientjes@google.com>
---
 mm/mempolicy.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/mm/mempolicy.c b/mm/mempolicy.c
index aec756ae5637..d147287c4505 100644
--- a/mm/mempolicy.c
+++ b/mm/mempolicy.c
@@ -3293,8 +3293,9 @@ int mpol_parse_str(char *str, struct mempolicy **mpol)
  * @pol:  pointer to mempolicy to be formatted
  *
  * Convert @pol into a string.  If @buffer is too short, truncate the string.
- * Recommend a @maxlen of at least 32 for the longest mode, "interleave", the
- * longest flag, "relative", and to display at least a few node ids.
+ * Recommend a @maxlen of at least 42 for the longest mode, "weighted
+ * interleave", the longest flag, "balancing", and to display at least a few
+ * node ids.
  */
 void mpol_to_str(char *buffer, int maxlen, struct mempolicy *pol)
 {
@@ -3331,12 +3332,15 @@ void mpol_to_str(char *buffer, int maxlen, struct mempolicy *pol)
 		p += snprintf(p, buffer + maxlen - p, "=");
 
 		/*
-		 * Currently, the only defined flags are mutually exclusive
+		 * The below two flags are mutually exclusive:
 		 */
 		if (flags & MPOL_F_STATIC_NODES)
 			p += snprintf(p, buffer + maxlen - p, "static");
 		else if (flags & MPOL_F_RELATIVE_NODES)
 			p += snprintf(p, buffer + maxlen - p, "relative");
+
+		if (flags & MPOL_F_NUMA_BALANCING)
+			p += snprintf(p, buffer + maxlen - p, "balancing");
 	}
 
 	if (!nodes_empty(nodes))
-- 
2.44.0

.

From: James Clark <james.clark@arm.com>
To: coresight@lists.linaro.org,
	suzuki.poulose@arm.com,
	gankulkarni@os.amperecomputing.com,
	mike.leach@linaro.org,
	leo.yan@linux.dev,
	anshuman.khandual@arm.com,
	jszu@nvidia.com,
	bwicaksono@nvidia.com
Cc: James Clark <james.clark@arm.com>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Maxime Coquelin <mcoquelin.stm32@gmail.com>,
	Alexandre Torgue <alexandre.torgue@foss.st.com>,
	John Garry <john.g.garry@oracle.com>,
	Will Deacon <will@kernel.org>,
	Peter Zijlstra <peterz@infradead.org>,
	Ingo Molnar <mingo@redhat.com>,
	Arnaldo Carvalho de Melo <acme@kernel.org>,
	Namhyung Kim <namhyung@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>,
	Jiri Olsa <jolsa@kernel.org>,
	Ian Rogers <irogers@google.com>,
	Adrian Hunter <adrian.hunter@intel.com>,
	"Liang, Kan" <kan.liang@linux.intel.com>,
	linux-kernel@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-stm32@st-md-mailman.stormreply.com,
	linux-perf-users@vger.kernel.org
Subject: [PATCH v4 00/17] coresight: Use per-sink trace ID maps for Perf sessions
Date: Tue, 25 Jun 2024 14:30:43 +0100
Message-Id: <20240625133105.671245-1-james.clark@arm.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258198
Newsgroups: org.kernel.vger.linux-kernel,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-perf-users
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

This will allow sessions with more than CORESIGHT_TRACE_IDS_MAX ETMs
as long as there are fewer than that many ETMs connected to each sink.

Each sink owns its own trace ID map, and any Perf session connecting to
that sink will allocate from it, even if the sink is currently in use by
other users. This is similar to the existing behavior where the dynamic
trace IDs are constant as long as there is any concurrent Perf session
active. It's not completely optimal because slightly more IDs will be
used than necessary, but the optimal solution involves tracking the PIDs
of each session and allocating ID maps based on the session owner. This
is difficult to do with the combination of per-thread and per-cpu modes
and some scheduling issues. The complexity of this isn't likely to worth
it because even with multiple users they'd just see a difference in the
ordering of ID allocations rather than hitting any limits (unless the
hardware does have too many ETMs connected to one sink).

Per-thread mode works but only until there are any overlapping IDs, at
which point Perf will error out. Both per-thread mode and sysfs mode are
left to future changes, but both can be added on top of this initial
implementation and only sysfs mode requires further driver changes.

The HW_ID version field hasn't been bumped in order to not break Perf
which already has an error condition for other values of that field.
Instead a new minor version has been added which signifies that there
are new fields but the old fields are backwards compatible.

Changes since v3:

  * Fix issue where trace IDs were overwritten by possibly invalid ones
    by Perf in unformatted mode. Now the HW_IDs are also used for
    unformatted mode unless the kernel didn't emit any.
  * Add a commit to check the OpenCSD version.
  * Add a commit to not save invalid IDs in the Perf header.
  * Replace cs_etm_queue's formatted and formatted_set members with a
    single enum which is easier to use.
  * Drop CORESIGHT_TRACE_ID_UNUSED_FLAG as it's no longer needed.
  * Add a commit to print the queue number in the raw dump.
  * Don't assert on the number of unformatted decoders if decoders == 0.


Changes since v2:

  * Rebase on coresight-next 6.10-rc2 (b9b25c8496).
  * Fix double free of csdev if device registration fails.
  * Fix leak of coresight_trace_id_perf_start() if trace ID allocation
    fails.
  * Don't resend HW_ID for sink changes in per-thread mode. The existing
    CPU field on AUX records can be used to track this instead.
  * Tidy function doc for coresight_trace_id_release_all()
  * Drop first two commits now that they are in coresight-next
  * Add a commit to make the trace ID spinlock local to the map

Changes since V1:

 * Rename coresight_device.perf_id_map to perf_sink_id_map.
 * Instead of outputting a HW_ID for each reachable ETM, output
   the sink ID and continue to output only the HW_ID once for
   each mapping.
 * Keep the first two Perf patches so that it applies cleanly
   on coresight-next, although they have been applied on perf-tools-next
 * Add new *_map() functions to the trace ID public API instead of
   modifying existing ones.
 * Collapse "coresight: Pass trace ID map into source enable" into
   "coresight: Use per-sink trace ID maps for Perf sessions" because the
   first commit relied on the default map being accessible which is no
   longer necessary due to the previous bullet point.


James Clark (17):
  perf: cs-etm: Create decoders after both AUX and HW_ID search passes
  perf: cs-etm: Allocate queues for all CPUs
  perf: cs-etm: Move traceid_list to each queue
  perf: cs-etm: Create decoders based on the trace ID mappings
  perf: cs-etm: Only save valid trace IDs into files
  perf: cs-etm: Support version 0.1 of HW_ID packets
  perf: cs-etm: Print queue number in raw trace dump
  perf: cs-etm: Add runtime version check for OpenCSD
  coresight: Remove unused ETM Perf stubs
  coresight: Clarify comments around the PID of the sink owner
  coresight: Move struct coresight_trace_id_map to common header
  coresight: Expose map arguments in trace ID API
  coresight: Make CPU id map a property of a trace ID map
  coresight: Use per-sink trace ID maps for Perf sessions
  coresight: Remove pending trace ID release mechanism
  coresight: Emit sink ID in the HW_ID packets
  coresight: Make trace ID map spinlock local to the map

 drivers/hwtracing/coresight/coresight-core.c  |  37 +-
 drivers/hwtracing/coresight/coresight-dummy.c |   3 +-
 .../hwtracing/coresight/coresight-etm-perf.c  |  36 +-
 .../hwtracing/coresight/coresight-etm-perf.h  |  18 -
 .../coresight/coresight-etm3x-core.c          |   9 +-
 .../coresight/coresight-etm4x-core.c          |   9 +-
 drivers/hwtracing/coresight/coresight-priv.h  |   1 +
 drivers/hwtracing/coresight/coresight-stm.c   |   3 +-
 drivers/hwtracing/coresight/coresight-sysfs.c |   3 +-
 .../hwtracing/coresight/coresight-tmc-etr.c   |   5 +-
 drivers/hwtracing/coresight/coresight-tmc.h   |   5 +-
 drivers/hwtracing/coresight/coresight-tpdm.c  |   3 +-
 .../hwtracing/coresight/coresight-trace-id.c  | 133 ++--
 .../hwtracing/coresight/coresight-trace-id.h  |  70 +-
 include/linux/coresight-pmu.h                 |  17 +-
 include/linux/coresight.h                     |  21 +-
 tools/build/feature/test-libopencsd.c         |   4 +-
 tools/include/linux/coresight-pmu.h           |  17 +-
 tools/perf/Makefile.config                    |   2 +-
 tools/perf/arch/arm/util/cs-etm.c             |  11 +-
 .../perf/util/cs-etm-decoder/cs-etm-decoder.c |  49 +-
 .../perf/util/cs-etm-decoder/cs-etm-decoder.h |   3 +-
 .../util/cs-etm-decoder/cs-etm-min-version.h  |  13 +
 tools/perf/util/cs-etm.c                      | 625 +++++++++++-------
 tools/perf/util/cs-etm.h                      |  12 +-
 25 files changed, 636 insertions(+), 473 deletions(-)
 create mode 100644 tools/perf/util/cs-etm-decoder/cs-etm-min-version.h

-- 
2.34.1

.

From: Michael Walle <mwalle@kernel.org>
To: Neil Armstrong <neil.armstrong@linaro.org>,
	Jessica Zhang <quic_jesszhan@quicinc.com>,
	David Airlie <airlied@gmail.com>,
	Daniel Vetter <daniel@ffwll.ch>,
	Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
	Maxime Ripard <mripard@kernel.org>,
	Thomas Zimmermann <tzimmermann@suse.de>,
	Rob Herring <robh@kernel.org>,
	Krzysztof Kozlowski <krzk+dt@kernel.org>,
	Conor Dooley <conor+dt@kernel.org>,
	Michael Walle <mwalle@kernel.org>
Cc: dri-devel@lists.freedesktop.org,
	devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	Gunnar Dibbern <gunnar.dibbern@lht.dlh.de>
Subject: [PATCH 0/2] drm/panel: initial support for the Ortustech COM35H3P70ULC
Date: Tue, 25 Jun 2024 15:33:15 +0200
Message-Id: <20240625133317.2869038-1-mwalle@kernel.org>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258218
Newsgroups: org.kernel.vger.linux-kernel,org.freedesktop.lists.dri-devel,org.kernel.vger.linux-devicetree
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Add initial support for the 480x640 DSI panel from Ortustech. The
panel uses an Ilitek ILI9806E panel driver IC.

Michael Walle (2):
  dt-bindings: display: panel: add Ilitek ili9806e panel controller
  drm/panel: add Ilitek ILI9806E panel driver

 .../display/panel/ilitek,ili9806e.yaml        |  63 +++
 MAINTAINERS                                   |   5 +
 drivers/gpu/drm/panel/Kconfig                 |   9 +
 drivers/gpu/drm/panel/Makefile                |   1 +
 drivers/gpu/drm/panel/panel-ilitek-ili9806e.c | 413 ++++++++++++++++++
 5 files changed, 491 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/display/panel/ilitek,ili9806e.yaml
 create mode 100644 drivers/gpu/drm/panel/panel-ilitek-ili9806e.c

-- 
2.39.2

.

From: Dhananjay Ugwekar <Dhananjay.Ugwekar@amd.com>
To: <rafael@kernel.org>, <viresh.kumar@linaro.org>, <gautham.shenoy@amd.com>,
	<mario.limonciello@amd.com>, <perry.yuan@amd.com>,
	<skhan@linuxfoundation.org>, <li.meng@amd.com>, <ray.huang@amd.com>
CC: <linux-pm@vger.kernel.org>, <linux-kernel@vger.kernel.org>, "Dhananjay
 Ugwekar" <Dhananjay.Ugwekar@amd.com>
Subject: [PATCH 0/2] AMD Pstate driver fixes 
Date: Tue, 25 Jun 2024 13:41:25 +0000
Message-ID: <20240625134127.4464-1-Dhananjay.Ugwekar@amd.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258228
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-pm
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

1. Handle the nominal freq units inconsistency in amd-pstate-ut, which was
leading to the below error on inserting the amd-pstate-ut module.

[ 4982.498864] amd_pstate_ut: 1    amd_pstate_ut_acpi_cpc_valid  success!
[ 4982.498873] amd_pstate_ut: 2    amd_pstate_ut_check_enabled   success!
[ 4982.509151] amd_pstate_ut: 3    amd_pstate_ut_check_perf      success!
[ 4982.509155] amd_pstate_ut: amd_pstate_ut_check_freq cpu0 max=3709000  >= nominal=2401 > lowest_nonlinear=1903000 > min=400000 > 0, the formula is incorrect!
[ 4982.509157] amd_pstate_ut: 4    amd_pstate_ut_check_freq      fail!

2. Setting the scaling_min/max_freq on shared memory CPPC systems was
broken in amd-pstate-epp driver(amd_pstate=active mode). The
scaling_min_freq and scaling_max_freq value was not being propagated to
the shared memory area, so the frequency capping was not being honored.

Tested on a AMD Zen3 Milan machine(shared memory CPPC): 

stress-ng is running on the system to keep the CPU utilization at 100%
to test the scaling_max_freq capping.

Before the patch:
We can see below, setting the scaling_max_freq is not taking effect.
 
linux/tools/power/x86/turbostat# ./turbostat --Summary
turbostat version 2023.11.07 - Len Brown <lenb@kernel.org>
[Snip]
cpu0: cpufreq driver: amd-pstate-epp
cpu0: cpufreq governor: performance
[Snip]
Avg_MHz Busy%   Bzy_MHz TSC_MHz IPC     IRQ     POLL    C1      C2      POLL%   C1%     C2%     CorWatt PkgWatt
2620    100.00  2620    2026    0.80    164935  0       0       0       0.00    0.00    0.00    176.07  249.18
2580    100.00  2580    1995    0.80    162208  0       0       0       0.00    0.00    0.00    173.27  245.37
2584    100.00  2584    1998    0.79    162379  0       0       0       0.00    0.00    0.00    173.42  245.68
2577    100.00  2577    1996    0.79    162146  0       0       0       0.00    0.00    0.00    173.15  245.41
2578    100.00  2578    1996    0.80    162025  0       0       0       0.00    0.00    0.00    173.07  245.46
2575    100.00  2575    1996    0.80    162115  0       0       0       0.00    0.00    0.00    172.96  245.41
2576    100.00  2576    1996    0.79    161998  0       0       0       0.00    0.00    0.00    172.87  245.32
linux/tools/power/x86/turbostat# echo 2000000 | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_max_freq
2000000
linux/tools/power/x86/turbostat# cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_max_freq | uniq
2000000
linux/tools/power/x86/turbostat# ./turbostat --Summary
turbostat version 2023.11.07 - Len Brown <lenb@kernel.org>
[Snip]
cpu0: cpufreq driver: amd-pstate-epp
cpu0: cpufreq governor: performance
[Snip]
Avg_MHz Busy%   Bzy_MHz TSC_MHz IPC     IRQ     POLL    C1      C2      POLL%   C1%     C2%     CorWatt PkgWatt
2620    100.00  2620    2038    0.79    166103  0       0       2       0.00    0.00    0.00    175.44  250.96
2566    100.00  2566    1996    0.79    162038  0       0       0       0.00    0.00    0.00    171.79  245.23
2566    100.00  2566    1996    0.79    162289  0       0       0       0.00    0.00    0.00    171.76  245.59
2571    100.00  2571    1996    0.80    162034  0       0       0       0.00    0.00    0.00    171.69  245.44
2566    100.00  2566    1996    0.79    162179  0       0       0       0.00    0.00    0.00    171.62  245.41
2567    100.00  2567    1996    0.79    162028  0       0       0       0.00    0.00    0.00    171.57  245.46
2567    100.00  2567    1996    0.80    162037  0       0       0       0.00    0.00    0.00    171.53  245.41

After applying the patch:
On setting scaling_max_freq at 2GHz, the CPU frequency gets capped at 2GHz.

linux/tools/power/x86/turbostat# ./turbostat --Summary
turbostat version 2023.11.07 - Len Brown <lenb@kernel.org>
[Snip]
cpu0: cpufreq driver: amd-pstate-epp
cpu0: cpufreq governor: performance
[Snip]
Avg_MHz Busy%   Bzy_MHz TSC_MHz IPC     IRQ     POLL    C1      C2      POLL%   C1%     C2%     CorWatt PkgWatt
2551    100.00  2551    1956    0.80    165998  0       0       0       0.00    0.00    0.00    171.34  231.22
2713    100.00  2713    2078    0.79    175801  0       0       0       0.00    0.00    0.00    181.92  266.13
2594    100.00  2594    1991    0.79    162183  0       0       1       0.00    0.00    0.00    173.99  244.50
2606    100.00  2606    2003    0.79    162632  0       0       0       0.00    0.00    0.00    174.81  246.51
2599    100.00  2599    1996    0.79    162168  0       0       0       0.00    0.00    0.00    174.05  245.46
linux/tools/power/x86/turbostat# echo 2000000 | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_max_freq
2000000
linux/tools/power/x86/turbostat# cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_max_freq | uniq
2000000
linux/tools/power/x86/turbostat# ./turbostat --Summary
turbostat version 2023.11.07 - Len Brown <lenb@kernel.org>
[Snip]
cpu0: cpufreq driver: amd-pstate-epp
cpu0: cpufreq governor: performance
[Snip]
Avg_MHz Busy%   Bzy_MHz TSC_MHz IPC     IRQ     POLL    C1      C2      POLL%   C1%     C2%     CorWatt PkgWatt
2010    100.00  2010    2030    0.80    165565  0       0       0       0.00    0.00    0.00    101.22  173.52
1975    100.00  1975    1995    0.80    162042  0       0       0       0.00    0.00    0.00    99.03   169.88
1977    100.00  1977    1998    0.80    162559  0       0       0       0.00    0.00    0.00    99.16   170.20
1976    100.00  1976    1996    0.80    162243  0       0       0       0.00    0.00    0.00    99.09   170.08
1976    100.00  1976    1996    0.80    162490  0       0       0       0.00    0.00    0.00    99.17   170.16
1976    100.00  1976    1996    0.80    162056  0       0       0       0.00    0.00    0.00    99.11   170.17


Dhananjay Ugwekar (2):
  cpufreq/amd-pstate-ut: Handle the inconsistency between nominal_freq and
    other *_freq units
  cpufreq/amd-pstate: Fix the scaling_min/max_freq setting on shared
    memory CPPC systems

 drivers/cpufreq/amd-pstate-ut.c | 12 +++++++-----
 drivers/cpufreq/amd-pstate.c    | 10 ++++++++++
 2 files changed, 17 insertions(+), 5 deletions(-)

-- 
2.34.1

.

From: Joel Granados via B4 Relay <devnull+j.granados.samsung.com@kernel.org>
Date: Tue, 25 Jun 2024 15:49:31 +0200
Subject: [PATCH] iommu/intel: Enable pci capabilities before assigning
 cache tags
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
Message-Id: <20240625-jag-ats_cache_tag_fix-v1-1-67f956e3fa93@samsung.com>
To: David Woodhouse <dwmw2@infradead.org>, 
 Lu Baolu <baolu.lu@linux.intel.com>, Joerg Roedel <joro@8bytes.org>, 
 Will Deacon <will@kernel.org>, Robin Murphy <robin.murphy@arm.com>
Cc: iommu@lists.linux.dev, linux-kernel@vger.kernel.org, 
 Joel Granados <j.granados@samsung.com>
X-Original-From: Joel Granados <j.granados@samsung.com>
Reply-To: j.granados@samsung.com
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258239
Newsgroups: org.kernel.vger.linux-kernel,dev.linux.lists.iommu,org.kernel.feeds.b4-sent
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

From: Joel Granados <j.granados@samsung.com>

Enable the pci capabilities by calling iommu_enable_pci_caps before we
assign a cache tag. The cache_tag_assign_domain call in
dmar_domain_attach_device uses the device_domain_info->ats_enabled
element to decide on the cache_tag_type value. Therefore ats_enabled
needs to be evaluated before the call to the tag cache assignment.

Signed-off-by: Joel Granados <j.granados@samsung.com>
---
The "what" and "why" are included in the commit message.

Tried to place cache_tag_assign_domain before the early return in
"if(dev_is_real_dma_subdevice(dev))". This means that the call to
iommu_enable_pci_caps landed before the setup functions [1] which is not
an issue as they seem to be orthogonal (I would like to be proven wrong
here).

An alternative to this patch would be to use a different way of checking
if the device is ATS enabled in __cache_tag_assign_domain.

Comments greatly appreciated

Best

joel

[1] setup functions: domain_context_mapping,
    intel_pasid_setup_pass_through, domain_setup_first_level and
    intel_pasid_setup_second_level.
---
 drivers/iommu/intel/iommu.c | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c
index 2e9811bf2a4e..ecd79741e67c 100644
--- a/drivers/iommu/intel/iommu.c
+++ b/drivers/iommu/intel/iommu.c
@@ -2114,17 +2114,20 @@ static int dmar_domain_attach_device(struct dmar_domain *domain,
 	if (ret)
 		return ret;
 
-	ret = cache_tag_assign_domain(domain, dev, IOMMU_NO_PASID);
-	if (ret) {
-		domain_detach_iommu(domain, iommu);
-		return ret;
-	}
-
 	info->domain = domain;
 	spin_lock_irqsave(&domain->lock, flags);
 	list_add(&info->link, &domain->devices);
 	spin_unlock_irqrestore(&domain->lock, flags);
 
+	if (sm_supported(info->iommu) || !domain_type_is_si(info->domain))
+		iommu_enable_pci_caps(info);
+
+	ret = cache_tag_assign_domain(domain, dev, IOMMU_NO_PASID);
+	if (ret) {
+		domain_detach_iommu(domain, iommu);
+		return ret;
+	}
+
 	if (dev_is_real_dma_subdevice(dev))
 		return 0;
 
@@ -2142,9 +2145,6 @@ static int dmar_domain_attach_device(struct dmar_domain *domain,
 		return ret;
 	}
 
-	if (sm_supported(info->iommu) || !domain_type_is_si(info->domain))
-		iommu_enable_pci_caps(info);
-
 	return 0;
 }
 

---
base-commit: f2661062f16b2de5d7b6a5c42a9a5c96326b8454
change-id: 20240625-jag-ats_cache_tag_fix-d747bb0f5d48

Best regards,
-- 
Joel Granados <j.granados@samsung.com>


.

From: Aapo Vienamo <aapo.vienamo@linux.intel.com>
To: Andy Shevchenko <andy@kernel.org>,
	Linus Walleij <linus.walleij@linaro.org>,
	Bartosz Golaszewski <brgl@bgdev.pl>
Cc: Mika Westerberg <mika.westerberg@linux.intel.com>,
	linux-gpio@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	Aapo Vienamo <aapo.vienamo@linux.intel.com>
Subject: [PATCH] gpio: graniterapids: Add missing raw_spinlock_init()
Date: Tue, 25 Jun 2024 16:53:43 +0300
Message-ID: <20240625135343.673745-1-aapo.vienamo@linux.intel.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258242
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-gpio
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Add the missing raw_spin_lock_init() call to gnr_gpio_probe().

Fixes: ecc4b1418e23 ("gpio: Add Intel Granite Rapids-D vGPIO driver")
Signed-off-by: Aapo Vienamo <aapo.vienamo@linux.intel.com>
---
 drivers/gpio/gpio-graniterapids.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/gpio/gpio-graniterapids.c b/drivers/gpio/gpio-graniterapids.c
index c693fe05d50f..f2e911a3d2ca 100644
--- a/drivers/gpio/gpio-graniterapids.c
+++ b/drivers/gpio/gpio-graniterapids.c
@@ -296,6 +296,8 @@ static int gnr_gpio_probe(struct platform_device *pdev)
 	if (!priv)
 		return -ENOMEM;
 
+	raw_spin_lock_init(&priv->lock);
+
 	regs = devm_platform_ioremap_resource(pdev, 0);
 	if (IS_ERR(regs))
 		return PTR_ERR(regs);
-- 
2.45.2

.

From: Yunsheng Lin <linyunsheng@huawei.com>
To: <davem@davemloft.net>, <kuba@kernel.org>, <pabeni@redhat.com>
CC: <netdev@vger.kernel.org>, <linux-kernel@vger.kernel.org>, Yunsheng Lin
	<linyunsheng@huawei.com>, Alexander Duyck <alexander.duyck@gmail.com>, Alexei
 Starovoitov <ast@kernel.org>, Daniel Borkmann <daniel@iogearbox.net>, Jesper
 Dangaard Brouer <hawk@kernel.org>, John Fastabend <john.fastabend@gmail.com>,
	Matthias Brugger <matthias.bgg@gmail.com>, AngeloGioacchino Del Regno
	<angelogioacchino.delregno@collabora.com>, <bpf@vger.kernel.org>,
	<linux-arm-kernel@lists.infradead.org>, <linux-mediatek@lists.infradead.org>
Subject: [PATCH net-next v9 00/13] First try to replace page_frag with page_frag_cache
Date: Tue, 25 Jun 2024 21:52:03 +0800
Message-ID: <20240625135216.47007-1-linyunsheng@huawei.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258244 org.kernel.vger.netdev:354983
Newsgroups: org.kernel.vger.linux-kernel,org.infradead.lists.linux-arm-kernel,org.infradead.lists.linux-mediatek,org.kernel.vger.bpf,org.kernel.vger.netdev
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

After [1], there are still two implementations for page frag:

1. mm/page_alloc.c: net stack seems to be using it in the
   rx part with 'struct page_frag_cache' and the main API
   being page_frag_alloc_align().
2. net/core/sock.c: net stack seems to be using it in the
   tx part with 'struct page_frag' and the main API being
   skb_page_frag_refill().

This patchset tries to unfiy the page frag implementation
by replacing page_frag with page_frag_cache for sk_page_frag()
first. net_high_order_alloc_disable_key for the implementation
in net/core/sock.c doesn't seems matter that much now have
have pcp support for high-order pages in commit 44042b449872
("mm/page_alloc: allow high-order pages to be stored on the
per-cpu lists").

As the related change is mostly related to networking, so
targeting the net-next. And will try to replace the rest
of page_frag in the follow patchset.

After this patchset:
1. Unify the page frag implementation by taking the best out of
   two the existing implementations: we are able to save some space
   for the 'page_frag_cache' API user, and avoid 'get_page()' for
   the old 'page_frag' API user.
2. Future bugfix and performance can be done in one place, hence
   improving maintainability of page_frag's implementation.

Kernel Image changing:
    Linux Kernel   total |      text      data        bss
    ------------------------------------------------------
    after     45250307 |   27274279   17209996     766032
    before    45254134 |   27278118   17209984     766032
    delta        -3827 |      -3839        +12         +0

Performance validation:
1. Using micro-benchmark ko added in patch 1 to test aligned and
   non-aligned API performance impact for the existing users, there
   is no notiable performance degradation. Instead we seems to some
   minor performance boot for both aligned and non-aligned API after
   this patchset as below.

2. Use the below netcat test case, we also have some minor
   performance boot for repalcing 'page_frag' with 'page_frag_cache'
   after this patchset.
   server: taskset -c 32 nc -l -k 1234 > /dev/null
   client: perf stat -r 200 -- taskset -c 0 head -c 20G /dev/zero | taskset -c 1 nc 127.0.0.1 1234


In order to avoid performance noise as much as possible, the testing
is done in system without any other laod and have enough iterations to
prove the data is stable enogh, complete log for testing is below:

taskset -c 32 nc -l -k 1234 > /dev/null
perf stat -r 200 -- insmod ./page_frag_test.ko test_push_cpu=16 test_pop_cpu=17
perf stat -r 200 -- insmod ./page_frag_test.ko test_push_cpu=16 test_pop_cpu=17 test_align=1
perf stat -r 200 -- taskset -c 0 head -c 20G /dev/zero | taskset -c 1 nc 127.0.0.1 1234

*After* this patchset:

 Performance counter stats for 'insmod ./page_frag_test.ko test_push_cpu=16 test_pop_cpu=17' (200 runs):

         17.829030      task-clock (msec)         #    0.001 CPUs utilized            ( +-  0.30% )
                 7      context-switches          #    0.386 K/sec                    ( +-  0.35% )
                 0      cpu-migrations            #    0.003 K/sec                    ( +- 28.06% )
                83      page-faults               #    0.005 M/sec                    ( +-  0.10% )
          46303585      cycles                    #    2.597 GHz                      ( +-  0.30% )
          61119216      instructions              #    1.32  insn per cycle           ( +-  0.01% )
          14811318      branches                  #  830.742 M/sec                    ( +-  0.01% )
             21046      branch-misses             #    0.14% of all branches          ( +-  0.09% )

      23.856064365 seconds time elapsed                                          ( +-  0.08% )


 Performance counter stats for 'insmod ./page_frag_test.ko test_push_cpu=16 test_pop_cpu=17 test_align=1' (200 runs):

         17.628569      task-clock (msec)         #    0.001 CPUs utilized            ( +-  0.01% )
                 7      context-switches          #    0.397 K/sec                    ( +-  0.12% )
                 0      cpu-migrations            #    0.000 K/sec
                83      page-faults               #    0.005 M/sec                    ( +-  0.10% )
          45785943      cycles                    #    2.597 GHz                      ( +-  0.01% )
          60043610      instructions              #    1.31  insn per cycle           ( +-  0.01% )
          14550182      branches                  #  825.375 M/sec                    ( +-  0.01% )
             21492      branch-misses             #    0.15% of all branches          ( +-  0.08% )

      23.443927103 seconds time elapsed                                          ( +-  0.05% )

 Performance counter stats for 'taskset -c 0 head -c 20G /dev/zero' (200 runs):

      16626.042731      task-clock (msec)         #    0.607 CPUs utilized            ( +-  0.03% )
           3291020      context-switches          #    0.198 M/sec                    ( +-  0.05% )
                 1      cpu-migrations            #    0.000 K/sec                    ( +-  0.50% )
                85      page-faults               #    0.005 K/sec                    ( +-  0.16% )
       30581044838      cycles                    #    1.839 GHz                      ( +-  0.05% )
       34962744631      instructions              #    1.14  insn per cycle           ( +-  0.01% )
        6483883671      branches                  #  389.984 M/sec                    ( +-  0.02% )
          99624551      branch-misses             #    1.54% of all branches          ( +-  0.17% )

      27.370305077 seconds time elapsed                                          ( +-  0.01% )


*Before* this patchset:

Performance counter stats for 'insmod ./page_frag_test.ko test_push_cpu=16 test_pop_cpu=17' (200 runs):

         18.143552      task-clock (msec)         #    0.001 CPUs utilized            ( +-  0.28% )
                 7      context-switches          #    0.382 K/sec                    ( +-  0.28% )
                 1      cpu-migrations            #    0.056 K/sec                    ( +-  0.97% )
                83      page-faults               #    0.005 M/sec                    ( +-  0.10% )
          47105569      cycles                    #    2.596 GHz                      ( +-  0.28% )
          60628757      instructions              #    1.29  insn per cycle           ( +-  0.04% )
          14686743      branches                  #  809.475 M/sec                    ( +-  0.04% )
             21826      branch-misses             #    0.15% of all branches          ( +-  0.12% )

      23.918006193 seconds time elapsed                                          ( +-  0.10% )

 Performance counter stats for 'insmod ./page_frag_test.ko test_push_cpu=16 test_pop_cpu=17 test_align=1' (200 runs):

         21.726393      task-clock (msec)         #    0.001 CPUs utilized            ( +-  0.72% )
                 7      context-switches          #    0.321 K/sec                    ( +-  0.24% )
                 1      cpu-migrations            #    0.047 K/sec                    ( +-  0.85% )
                83      page-faults               #    0.004 M/sec                    ( +-  0.10% )
          56422898      cycles                    #    2.597 GHz                      ( +-  0.72% )
          61271860      instructions              #    1.09  insn per cycle           ( +-  0.05% )
          14837500      branches                  #  682.925 M/sec                    ( +-  0.05% )
             21484      branch-misses             #    0.14% of all branches          ( +-  0.10% )

      23.876306259 seconds time elapsed                                          ( +-  0.13% )

 Performance counter stats for 'taskset -c 0 head -c 20G /dev/zero' (200 runs):

      17364.040855      task-clock (msec)         #    0.624 CPUs utilized            ( +-  0.02% )
           3340375      context-switches          #    0.192 M/sec                    ( +-  0.06% )
                 1      cpu-migrations            #    0.000 K/sec
                85      page-faults               #    0.005 K/sec                    ( +-  0.15% )
       32077623335      cycles                    #    1.847 GHz                      ( +-  0.03% )
       35121047596      instructions              #    1.09  insn per cycle           ( +-  0.01% )
        6519872824      branches                  #  375.481 M/sec                    ( +-  0.02% )
         101877022      branch-misses             #    1.56% of all branches          ( +-  0.14% )

      27.842745343 seconds time elapsed                                          ( +-  0.02% )


Note, ipv4-udp, ipv6-tcp and ipv6-udp is also tested with the below script:
nc -u -l -k 1234 > /dev/null
perf stat -r 4 -- head -c 51200000000 /dev/zero | nc -N -u 127.0.0.1 1234

nc -l6 -k 1234 > /dev/null
perf stat -r 4 -- head -c 51200000000 /dev/zero | nc -N ::1 1234

nc -l6 -k -u 1234 > /dev/null
perf stat -r 4 -- head -c 51200000000 /dev/zero | nc -u -N ::1 1234

CC: Alexander Duyck <alexander.duyck@gmail.com>

1. https://lore.kernel.org/all/20240228093013.8263-1-linyunsheng@huawei.com/

Change log:
V9:
   1. Add check for test_alloc_len and change perm of module_param()
      to 0 as Wang Wei' comment.
   2. Rebased on latest net-next.

V8: Remove patch 2 & 3 in V7, as free_unref_page() is changed to call
    pcp_allowed_order() and used in page_frag API recently in:
    commit 5b8d75913a0e ("mm: combine free_the_page() and free_unref_page()")

V7: Fix doc build warning and error.

V6:
   1. Fix some typo and compiler error for x86 pointed out by Jakub and
      Simon.
   2. Add two refactoring and optimization patches.

V5:
   1. Add page_frag_alloc_pg() API for tls_device.c case and refactor
      some implementation, update kernel bin size changing as bin size
      is increased after that.
   2. Add ack from Mat.

RFC v4:
   1. Update doc according to Randy and Mat's suggestion.
   2. Change probe API to "probe" for a specific amount  of available space,
      rather than "nonzero" space according to Mat's suggestion.
   3. Retest and update the test result.

v3:
   1. Use new layout for 'struct page_frag_cache' as the discussion
      with Alexander and other sugeestions from Alexander.
   2. Add probe API to address Mat' comment about mptcp use case.
   3. Some doc updating according to Bagas' suggestion.

v2:
   1. reorder test module to patch 1.
   2. split doc and maintainer updating to two patches.
   3. refactor the page_frag before moving.
   4. fix a type and 'static' warning in test module.
   5. add a patch for xtensa arch to enable using get_order() in
      BUILD_BUG_ON().
   6. Add test case and performance data for the socket code.

Yunsheng Lin (13):
  mm: page_frag: add a test module for page_frag
  mm: move the page fragment allocator from page_alloc into its own file
  mm: page_frag: use initial zero offset for page_frag_alloc_align()
  mm: page_frag: add '_va' suffix to page_frag API
  mm: page_frag: avoid caller accessing 'page_frag_cache' directly
  mm: page_frag: reuse existing space for 'size' and 'pfmemalloc'
  mm: page_frag: some minor refactoring before adding new API
  mm: page_frag: use __alloc_pages() to replace alloc_pages_node()
  net: introduce the skb_copy_to_va_nocache() helper
  mm: page_frag: introduce prepare/probe/commit API
  net: replace page_frag with page_frag_cache
  mm: page_frag: update documentation for page_frag
  mm: page_frag: add a entry in MAINTAINERS for page_frag

 Documentation/mm/page_frags.rst               | 163 +++++++-
 MAINTAINERS                                   |  11 +
 .../chelsio/inline_crypto/chtls/chtls.h       |   3 -
 .../chelsio/inline_crypto/chtls/chtls_io.c    | 100 ++---
 .../chelsio/inline_crypto/chtls/chtls_main.c  |   3 -
 drivers/net/ethernet/google/gve/gve_rx.c      |   4 +-
 drivers/net/ethernet/intel/ice/ice_txrx.c     |   2 +-
 drivers/net/ethernet/intel/ice/ice_txrx.h     |   2 +-
 drivers/net/ethernet/intel/ice/ice_txrx_lib.c |   2 +-
 .../net/ethernet/intel/ixgbevf/ixgbevf_main.c |   4 +-
 .../marvell/octeontx2/nic/otx2_common.c       |   2 +-
 drivers/net/ethernet/mediatek/mtk_wed_wo.c    |   4 +-
 drivers/net/tun.c                             |  44 +-
 drivers/nvme/host/tcp.c                       |   8 +-
 drivers/nvme/target/tcp.c                     |  22 +-
 drivers/vhost/net.c                           |   8 +-
 include/linux/gfp.h                           |  22 -
 include/linux/mm_types.h                      |  18 -
 include/linux/page_frag_cache.h               | 299 +++++++++++++
 include/linux/sched.h                         |   3 +-
 include/linux/skbuff.h                        |   7 +-
 include/net/sock.h                            |  29 +-
 kernel/bpf/cpumap.c                           |   2 +-
 kernel/exit.c                                 |   3 +-
 kernel/fork.c                                 |   3 +-
 mm/Kconfig.debug                              |   8 +
 mm/Makefile                                   |   2 +
 mm/page_alloc.c                               | 136 ------
 mm/page_frag_cache.c                          | 346 +++++++++++++++
 mm/page_frag_test.c                           | 393 ++++++++++++++++++
 net/core/skbuff.c                             |  79 ++--
 net/core/skmsg.c                              |  22 +-
 net/core/sock.c                               |  46 +-
 net/core/xdp.c                                |   2 +-
 net/ipv4/ip_output.c                          |  33 +-
 net/ipv4/tcp.c                                |  35 +-
 net/ipv4/tcp_output.c                         |  28 +-
 net/ipv6/ip6_output.c                         |  33 +-
 net/kcm/kcmsock.c                             |  30 +-
 net/mptcp/protocol.c                          |  67 +--
 net/rxrpc/conn_object.c                       |   4 +-
 net/rxrpc/local_object.c                      |   4 +-
 net/rxrpc/txbuf.c                             |  15 +-
 net/sched/em_meta.c                           |   2 +-
 net/sunrpc/svcsock.c                          |  12 +-
 net/tls/tls_device.c                          | 137 +++---
 46 files changed, 1642 insertions(+), 560 deletions(-)
 create mode 100644 include/linux/page_frag_cache.h
 create mode 100644 mm/page_frag_cache.c
 create mode 100644 mm/page_frag_test.c

-- 
2.33.0

.

Message-ID: <345098dc-8cb4-4808-98cf-fa9ab3af4fc4@I-love.SAKURA.ne.jp>
Date: Tue, 25 Jun 2024 22:56:46 +0900
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Language: en-US
To: Alexei Starovoitov <ast@kernel.org>,
        Daniel Borkmann <daniel@iogearbox.net>,
        Andrii Nakryiko <andrii@kernel.org>,
        Martin KaFai Lau <martin.lau@linux.dev>,
        Eduard Zingerman
 <eddyz87@gmail.com>, Song Liu <song@kernel.org>,
        Yonghong Song <yonghong.song@linux.dev>,
        John Fastabend <john.fastabend@gmail.com>,
        KP Singh <kpsingh@kernel.org>, Stanislav Fomichev <sdf@fomichev.me>,
        Hao Luo <haoluo@google.com>, Jiri Olsa <jolsa@kernel.org>,
        Petr Mladek <pmladek@suse.com>, Steven Rostedt <rostedt@goodmis.org>,
        John Ogness
 <john.ogness@linutronix.de>,
        Sergey Senozhatsky <senozhatsky@chromium.org>
Cc: bpf <bpf@vger.kernel.org>, LKML <linux-kernel@vger.kernel.org>
From: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Subject: [PATCH] bpf: defer printk() inside __bpf_prog_run()
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258257
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.bpf
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

syzbot is reporting circular locking dependency inside __bpf_prog_run(),
for fault injection calls printk() despite rq lock is already held.

Guard __bpf_prog_run() using printk_deferred_{enter,exit}() (and
preempt_{disable,enable}() if CONFIG_PREEMPT_RT=n) in order to defer any
printk() messages. (migrate_{disable,enable}() is not needed if
CONFIG_PREEMPT_RT=y because cant_migrate() asserts that caller already
disabled migration.)

======================================================
WARNING: possible circular locking dependency detected
6.10.0-rc4-syzkaller-00874-g84562f9953ec #0 Not tainted
------------------------------------------------------
syz-executor.1/25480 is trying to acquire lock:
ffffffff8e328140 (console_owner){..-.}-{0:0}, at: rcu_try_lock_acquire include/linux/rcupdate.h:334 [inline]
ffffffff8e328140 (console_owner){..-.}-{0:0}, at: srcu_read_lock_nmisafe include/linux/srcu.h:232 [inline]
ffffffff8e328140 (console_owner){..-.}-{0:0}, at: console_srcu_read_lock kernel/printk/printk.c:286 [inline]
ffffffff8e328140 (console_owner){..-.}-{0:0}, at: console_flush_all+0x152/0xfd0 kernel/printk/printk.c:2986

but task is already holding lock:
ffff8880b943e798 (&rq->__lock){-.-.}-{2:2}, at: raw_spin_rq_lock_nested+0x2a/0x140 kernel/sched/core.c:559

which lock already depends on the new lock.

(...snipped...)

Chain exists of:
  console_owner --> &p->pi_lock --> &rq->__lock

 Possible unsafe locking scenario:

       CPU0                    CPU1
       ----                    ----
  lock(&rq->__lock);
                               lock(&p->pi_lock);
                               lock(&rq->__lock);
  lock(console_owner);

 *** DEADLOCK ***

6 locks held by syz-executor.1/25480:
 #0: ffffffff8f5e6f48 (rtnl_mutex){+.+.}-{3:3}, at: dev_ioctl+0x706/0x1340 net/core/dev_ioctl.c:785
 #1: ffffffff8f67dd68 (flowtable_lock){+.+.}-{3:3}, at: nf_flow_table_cleanup+0x23/0xb0 net/netfilter/nf_flow_table_core.c:593
 #2: ffff8880b943e798 (&rq->__lock){-.-.}-{2:2}, at: raw_spin_rq_lock_nested+0x2a/0x140 kernel/sched/core.c:559
 #3: ffffffff8e333fa0 (rcu_read_lock){....}-{1:2}, at: rcu_lock_acquire include/linux/rcupdate.h:329 [inline]
 #3: ffffffff8e333fa0 (rcu_read_lock){....}-{1:2}, at: rcu_read_lock include/linux/rcupdate.h:781 [inline]
 #3: ffffffff8e333fa0 (rcu_read_lock){....}-{1:2}, at: __bpf_trace_run kernel/trace/bpf_trace.c:2402 [inline]
 #3: ffffffff8e333fa0 (rcu_read_lock){....}-{1:2}, at: bpf_trace_run4+0x244/0x590 kernel/trace/bpf_trace.c:2446
 #4: ffffffff8e20fa60 (console_lock){+.+.}-{0:0}, at: _printk+0xd5/0x120 kernel/printk/printk.c:2370
 #5: ffffffff8e20f690 (console_srcu){....}-{0:0}, at: rcu_try_lock_acquire include/linux/rcupdate.h:334 [inline]
 #5: ffffffff8e20f690 (console_srcu){....}-{0:0}, at: srcu_read_lock_nmisafe include/linux/srcu.h:232 [inline]
 #5: ffffffff8e20f690 (console_srcu){....}-{0:0}, at: console_srcu_read_lock kernel/printk/printk.c:286 [inline]
 #5: ffffffff8e20f690 (console_srcu){....}-{0:0}, at: console_flush_all+0x152/0xfd0 kernel/printk/printk.c:2986

stack backtrace:
CPU: 0 PID: 25480 Comm: syz-executor.1 Not tainted 6.10.0-rc4-syzkaller-00874-g84562f9953ec #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 06/07/2024
Call Trace:
 <TASK>
 __dump_stack lib/dump_stack.c:88 [inline]
 dump_stack_lvl+0x241/0x360 lib/dump_stack.c:114
 check_noncircular+0x36a/0x4a0 kernel/locking/lockdep.c:2187
 check_prev_add kernel/locking/lockdep.c:3134 [inline]
 check_prevs_add kernel/locking/lockdep.c:3253 [inline]
 validate_chain+0x18e0/0x5900 kernel/locking/lockdep.c:3869
 __lock_acquire+0x1346/0x1fd0 kernel/locking/lockdep.c:5137
 lock_acquire+0x1ed/0x550 kernel/locking/lockdep.c:5754
 console_lock_spinning_enable kernel/printk/printk.c:1870 [inline]
 console_emit_next_record kernel/printk/printk.c:2922 [inline]
 console_flush_all+0x810/0xfd0 kernel/printk/printk.c:2994
 console_unlock+0x13b/0x4d0 kernel/printk/printk.c:3063
 vprintk_emit+0x5a6/0x770 kernel/printk/printk.c:2345
 _printk+0xd5/0x120 kernel/printk/printk.c:2370
 fail_dump lib/fault-inject.c:45 [inline]
 should_fail_ex+0x391/0x4e0 lib/fault-inject.c:153
 __copy_to_user_inatomic include/linux/uaccess.h:123 [inline]
 copy_to_user_nofault+0x86/0x140 mm/maccess.c:149
 bpf_prog_b0a3dac844962ed2+0x47/0x4d
 bpf_dispatcher_nop_func include/linux/bpf.h:1243 [inline]
 __bpf_prog_run include/linux/filter.h:691 [inline]
 bpf_prog_run include/linux/filter.h:698 [inline]
 __bpf_trace_run kernel/trace/bpf_trace.c:2403 [inline]
 bpf_trace_run4+0x334/0x590 kernel/trace/bpf_trace.c:2446
 __traceiter_sched_switch+0x98/0xd0 include/trace/events/sched.h:222
 trace_sched_switch include/trace/events/sched.h:222 [inline]
 __schedule+0x2587/0x4a20 kernel/sched/core.c:6742
 preempt_schedule_notrace+0x100/0x140 kernel/sched/core.c:7017
 preempt_schedule_notrace_thunk+0x1a/0x30 arch/x86/entry/thunk.S:13
 rcu_is_watching+0x7e/0xb0 kernel/rcu/tree.c:725
 trace_lock_acquire include/trace/events/lock.h:24 [inline]
 lock_acquire+0xe3/0x550 kernel/locking/lockdep.c:5725
 rcu_lock_acquire include/linux/rcupdate.h:329 [inline]
 rcu_read_lock include/linux/rcupdate.h:781 [inline]
 start_flush_work kernel/workqueue.c:4122 [inline]
 __flush_work+0x107/0xd00 kernel/workqueue.c:4181
 flush_work kernel/workqueue.c:4232 [inline]
 flush_delayed_work+0x169/0x1c0 kernel/workqueue.c:4254
 nf_flow_table_gc_cleanup net/netfilter/nf_flow_table_core.c:585 [inline]
 nf_flow_table_cleanup+0x62/0xb0 net/netfilter/nf_flow_table_core.c:595
 flow_offload_netdev_event+0x51/0x70 net/netfilter/nft_flow_offload.c:492
 notifier_call_chain+0x19f/0x3e0 kernel/notifier.c:93
 __dev_notify_flags+0x207/0x400
 dev_change_flags+0xf0/0x1a0 net/core/dev.c:8858
 dev_ifsioc+0x7c8/0xe70 net/core/dev_ioctl.c:529
 dev_ioctl+0x719/0x1340 net/core/dev_ioctl.c:786
 sock_do_ioctl+0x240/0x460 net/socket.c:1236
 sock_ioctl+0x629/0x8e0 net/socket.c:1341
 vfs_ioctl fs/ioctl.c:51 [inline]
 __do_sys_ioctl fs/ioctl.c:907 [inline]
 __se_sys_ioctl+0xfc/0x170 fs/ioctl.c:893
 do_syscall_x64 arch/x86/entry/common.c:52 [inline]
 do_syscall_64+0xf3/0x230 arch/x86/entry/common.c:83
 entry_SYSCALL_64_after_hwframe+0x77/0x7f

Reported-by: syzbot <syzbot+f78380e4eae53c64125c@syzkaller.appspotmail.com>
Closes: https://syzkaller.appspot.com/bug?extid=f78380e4eae53c64125c
Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
---
Only compile tested.

 include/linux/filter.h | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/include/linux/filter.h b/include/linux/filter.h
index dd41a93f06b2e..977ae5b486164 100644
--- a/include/linux/filter.h
+++ b/include/linux/filter.h
@@ -674,6 +674,10 @@ static __always_inline u32 __bpf_prog_run(const struct bpf_prog *prog,
 	u32 ret;
 
 	cant_migrate();
+#ifndef CONFIG_PREEMPT_RT
+	preempt_disable();
+#endif
+	printk_deferred_enter();
 	if (static_branch_unlikely(&bpf_stats_enabled_key)) {
 		struct bpf_prog_stats *stats;
 		u64 duration, start = sched_clock();
@@ -690,6 +694,10 @@ static __always_inline u32 __bpf_prog_run(const struct bpf_prog *prog,
 	} else {
 		ret = dfunc(ctx, prog->insnsi, prog->bpf_func);
 	}
+	printk_deferred_exit();
+#ifndef CONFIG_PREEMPT_RT
+	preempt_enable();
+#endif
 	return ret;
 }
 
-- 
2.43.0
.

Date: Tue, 25 Jun 2024 15:31:51 +0200
From: Wim Van Sebroeck <wim@linux-watchdog.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	LKML <linux-kernel@vger.kernel.org>,
	Linux Watchdog Mailing List <linux-watchdog@vger.kernel.org>,
	Guenter Roeck <linux@roeck-us.net>, Arnd Bergmann <arnd@arndb.de>,
	Jeff Johnson <quic_jjohnson@quicinc.com>
Subject: [GIT PULL REQUEST] watchdog - v6.10 release cycle (fixes).
Message-ID: <20240625133151.GA1554@www.linux-watchdog.org>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258260
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-watchdog
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Hi Linus,

Please pull following watchdog changes for the v6.10 release cycle.

This series contains:
* lenovo_se10_wdt: add HAS_IOPORT dependency
* add missing MODULE_DESCRIPTION() macros

The output from git request-pull:
----------------------------------------------------------------
The following changes since commit c3f38fa61af77b49866b006939479069cd451173:

  Linux 6.10-rc2 (2024-06-02 15:44:56 -0700)

are available in the git repository at:

  git://www.linux-watchdog.org/linux-watchdog.git linux-watchdog-6.10-rc-fixes

for you to fetch changes up to acf9e67a7625367b89440855572b29c5ec19dd20:

  watchdog: add missing MODULE_DESCRIPTION() macros (2024-06-15 12:49:57 +0200)

----------------------------------------------------------------
linux-watchdog 6.10-rc-fixes tag

----------------------------------------------------------------
Arnd Bergmann (1):
      watchdog: lenovo_se10_wdt: add HAS_IOPORT dependency

Jeff Johnson (1):
      watchdog: add missing MODULE_DESCRIPTION() macros

 drivers/watchdog/Kconfig           | 1 +
 drivers/watchdog/menz69_wdt.c      | 1 +
 drivers/watchdog/omap_wdt.c        | 1 +
 drivers/watchdog/simatic-ipc-wdt.c | 1 +
 drivers/watchdog/ts4800_wdt.c      | 1 +
 drivers/watchdog/twl4030_wdt.c     | 1 +
 6 files changed, 6 insertions(+)
----------------------------------------------------------------

Kind regards,
Wim.

.

From: Mateusz Guzik <mjguzik@gmail.com>
To: brauner@kernel.org
Cc: viro@zeniv.linux.org.uk,
	jack@suse.cz,
	linux-kernel@vger.kernel.org,
	linux-fsdevel@vger.kernel.org,
	io-uring@vger.kernel.org,
	axboe@kernel.dk,
	torvalds@linux-foundation.org,
	xry111@xry111.site,
	loongarch@lists.linux.dev,
	Mateusz Guzik <mjguzik@gmail.com>
Subject: [PATCH v2] vfs: support statx(..., NULL, AT_EMPTY_PATH, ...)
Date: Tue, 25 Jun 2024 16:16:18 +0200
Message-ID: <20240625141618.615247-1-mjguzik@gmail.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258275
Newsgroups: org.kernel.vger.linux-kernel,dev.linux.lists.loongarch,org.kernel.vger.io-uring,org.kernel.vger.linux-fsdevel
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

The newly used helper also checks for 0-sized buffers.

NULL paths with any flag value other than AT_EMPTY_PATH go the usual
route and end up with -EFAULT to retain compatibility (Rust is abusing
calls of the sort to detect availability of statx).

This avoids path lookup code, lockref management, memory allocation and
in case of NULL path userspace memory access (which can be quite
expensive with SMAP on x86_64).

statx(..., AT_EMPTY_PATH, ...) issued on Sapphire Rapids (ops/s):
stock:     4231237
0-check:   5944063 (+40%)
NULL path: 6601619 (+11%/+56%)

Signed-off-by: Mateusz Guzik <mjguzik@gmail.com>
---

Diffed against fs-next and assumes c050122bdbb4 ("fs: new helper
vfs_empty_path()") from vfs.empty.path is already applied.

WARNING: io_uring remains untested (modulo compilation). I presume
Jens has a handy way of making sure things still work. 

While the io_uring part can be added at a later date, but I'm trying to
avoid a scenario where someone has code which works with the NULL path
and breaks when moving to io_uring. I am not going to argue about it
however, worst case changes to io_uring can be trivially dropped and
someone(tm) can add their own variant whenever they see fit.

v2:
- support glibc passing AT_NO_AUTOMOUNT | AT_EMPTY_PATH
- tidy up some commentary
- drop the fdget_raw CLASS addition as it is already present in newer
  trees

 fs/internal.h    |   2 +
 fs/stat.c        | 106 +++++++++++++++++++++++++++++++++++------------
 io_uring/statx.c |  21 ++++++----
 3 files changed, 93 insertions(+), 36 deletions(-)

diff --git a/fs/internal.h b/fs/internal.h
index 84f371193f74..1d820018e6dc 100644
--- a/fs/internal.h
+++ b/fs/internal.h
@@ -247,6 +247,8 @@ extern const struct dentry_operations ns_dentry_operations;
 int getname_statx_lookup_flags(int flags);
 int do_statx(int dfd, struct filename *filename, unsigned int flags,
 	     unsigned int mask, struct statx __user *buffer);
+int do_statx_fd(int fd, unsigned int flags, unsigned int mask,
+		struct statx __user *buffer);
 
 /*
  * fs/splice.c:
diff --git a/fs/stat.c b/fs/stat.c
index 5039c34a385d..8114eed25d93 100644
--- a/fs/stat.c
+++ b/fs/stat.c
@@ -214,6 +214,43 @@ int getname_statx_lookup_flags(int flags)
 	return lookup_flags;
 }
 
+static int vfs_statx_path(struct path *path, int flags, struct kstat *stat,
+			  u32 request_mask)
+{
+	int error = vfs_getattr(path, stat, request_mask, flags);
+
+	if (request_mask & STATX_MNT_ID_UNIQUE) {
+		stat->mnt_id = real_mount(path->mnt)->mnt_id_unique;
+		stat->result_mask |= STATX_MNT_ID_UNIQUE;
+	} else {
+		stat->mnt_id = real_mount(path->mnt)->mnt_id;
+		stat->result_mask |= STATX_MNT_ID;
+	}
+
+	if (path->mnt->mnt_root == path->dentry)
+		stat->attributes |= STATX_ATTR_MOUNT_ROOT;
+	stat->attributes_mask |= STATX_ATTR_MOUNT_ROOT;
+
+	/* Handle STATX_DIOALIGN for block devices. */
+	if (request_mask & STATX_DIOALIGN) {
+		struct inode *inode = d_backing_inode(path->dentry);
+
+		if (S_ISBLK(inode->i_mode))
+			bdev_statx_dioalign(inode, stat);
+	}
+
+	return error;
+}
+
+static int vfs_statx_fd(int fd, int flags, struct kstat *stat,
+			  u32 request_mask)
+{
+	CLASS(fd_raw, f)(fd);
+	if (!f.file)
+		return -EBADF;
+	return vfs_statx_path(&f.file->f_path, flags, stat, request_mask);
+}
+
 /**
  * vfs_statx - Get basic and extra attributes by filename
  * @dfd: A file descriptor representing the base dir for a relative filename
@@ -243,36 +280,13 @@ static int vfs_statx(int dfd, struct filename *filename, int flags,
 retry:
 	error = filename_lookup(dfd, filename, lookup_flags, &path, NULL);
 	if (error)
-		goto out;
-
-	error = vfs_getattr(&path, stat, request_mask, flags);
-
-	if (request_mask & STATX_MNT_ID_UNIQUE) {
-		stat->mnt_id = real_mount(path.mnt)->mnt_id_unique;
-		stat->result_mask |= STATX_MNT_ID_UNIQUE;
-	} else {
-		stat->mnt_id = real_mount(path.mnt)->mnt_id;
-		stat->result_mask |= STATX_MNT_ID;
-	}
-
-	if (path.mnt->mnt_root == path.dentry)
-		stat->attributes |= STATX_ATTR_MOUNT_ROOT;
-	stat->attributes_mask |= STATX_ATTR_MOUNT_ROOT;
-
-	/* Handle STATX_DIOALIGN for block devices. */
-	if (request_mask & STATX_DIOALIGN) {
-		struct inode *inode = d_backing_inode(path.dentry);
-
-		if (S_ISBLK(inode->i_mode))
-			bdev_statx_dioalign(inode, stat);
-	}
-
+		return error;
+	error = vfs_statx_path(&path, flags, stat, request_mask);
 	path_put(&path);
 	if (retry_estale(error, lookup_flags)) {
 		lookup_flags |= LOOKUP_REVAL;
 		goto retry;
 	}
-out:
 	return error;
 }
 
@@ -683,16 +697,40 @@ int do_statx(int dfd, struct filename *filename, unsigned int flags,
 	return cp_statx(&stat, buffer);
 }
 
+int do_statx_fd(int fd, unsigned int flags, unsigned int mask,
+	     struct statx __user *buffer)
+{
+	struct kstat stat;
+	int error;
+
+	if (mask & STATX__RESERVED)
+		return -EINVAL;
+	if ((flags & AT_STATX_SYNC_TYPE) == AT_STATX_SYNC_TYPE)
+		return -EINVAL;
+
+	/* STATX_CHANGE_COOKIE is kernel-only for now. Ignore requests
+	 * from userland.
+	 */
+	mask &= ~STATX_CHANGE_COOKIE;
+
+	error = vfs_statx_fd(fd, flags, &stat, mask);
+	if (error)
+		return error;
+
+	return cp_statx(&stat, buffer);
+}
+
 /**
  * sys_statx - System call to get enhanced stats
  * @dfd: Base directory to pathwalk from *or* fd to stat.
- * @filename: File to stat or "" with AT_EMPTY_PATH
+ * @filename: File to stat or either NULL or "" with AT_EMPTY_PATH
  * @flags: AT_* flags to control pathwalk.
  * @mask: Parts of statx struct actually required.
  * @buffer: Result buffer.
  *
  * Note that fstat() can be emulated by setting dfd to the fd of interest,
- * supplying "" as the filename and setting AT_EMPTY_PATH in the flags.
+ * supplying "" (or preferably NULL) as the filename and setting AT_EMPTY_PATH
+ * in the flags.
  */
 SYSCALL_DEFINE5(statx,
 		int, dfd, const char __user *, filename, unsigned, flags,
@@ -700,8 +738,22 @@ SYSCALL_DEFINE5(statx,
 		struct statx __user *, buffer)
 {
 	int ret;
+	unsigned lflags;
 	struct filename *name;
 
+	/*
+	 * Short-circuit handling of NULL and "" paths.
+	 *
+	 * For a NULL path we require and accept only the AT_EMPTY_PATH flag.
+	 *
+	 * However, glibc on 32-bit architectures implements fstatat as statx
+	 * with the "" pathname and AT_NO_AUTOMOUNT | AT_EMPTY_PATH flags.
+	 * Supporting this results in the uglification below.
+	 */
+	lflags = flags & ~AT_NO_AUTOMOUNT;
+	if (lflags == AT_EMPTY_PATH && vfs_empty_path(dfd, filename))
+		return do_statx_fd(dfd, lflags, mask, buffer);
+
 	name = getname_flags(filename, getname_statx_lookup_flags(flags));
 	ret = do_statx(dfd, name, flags, mask, buffer);
 	putname(name);
diff --git a/io_uring/statx.c b/io_uring/statx.c
index f7f9b202eec0..a7216058b05b 100644
--- a/io_uring/statx.c
+++ b/io_uring/statx.c
@@ -23,6 +23,7 @@ struct io_statx {
 int io_statx_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe)
 {
 	struct io_statx *sx = io_kiocb_to_cmd(req, struct io_statx);
+	struct filename *filename;
 	const char __user *path;
 
 	if (sqe->buf_index || sqe->splice_fd_in)
@@ -36,14 +37,13 @@ int io_statx_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe)
 	sx->buffer = u64_to_user_ptr(READ_ONCE(sqe->addr2));
 	sx->flags = READ_ONCE(sqe->statx_flags);
 
-	sx->filename = getname_flags(path,
-				     getname_statx_lookup_flags(sx->flags));
-
-	if (IS_ERR(sx->filename)) {
-		int ret = PTR_ERR(sx->filename);
-
-		sx->filename = NULL;
-		return ret;
+	sx->filename = NULL;
+	if (!(sx->flags == AT_EMPTY_PATH && vfs_empty_path(sx->dfd, path))) {
+		filename = getname_flags(path,
+					 getname_statx_lookup_flags(sx->flags));
+		if (IS_ERR(filename))
+			return PTR_ERR(filename);
+		sx->filename = filename;
 	}
 
 	req->flags |= REQ_F_NEED_CLEANUP;
@@ -58,7 +58,10 @@ int io_statx(struct io_kiocb *req, unsigned int issue_flags)
 
 	WARN_ON_ONCE(issue_flags & IO_URING_F_NONBLOCK);
 
-	ret = do_statx(sx->dfd, sx->filename, sx->flags, sx->mask, sx->buffer);
+	if (sx->filename == NULL)
+		ret = do_statx_fd(sx->dfd, sx->flags, sx->mask, sx->buffer);
+	else
+		ret = do_statx(sx->dfd, sx->filename, sx->flags, sx->mask, sx->buffer);
 	io_req_set_res(req, ret, 0);
 	return IOU_OK;
 }
-- 
2.43.0

.

From: Jerome Brunet <jbrunet@baylibre.com>
To: Neil Armstrong <neil.armstrong@linaro.org>,
	Jessica Zhang <quic_jesszhan@quicinc.com>,
	Sam Ravnborg <sam@ravnborg.org>,
	Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
	Maxime Ripard <mripard@kernel.org>,
	Thomas Zimmermann <tzimmermann@suse.de>,
	David Airlie <airlied@gmail.com>,
	Daniel Vetter <daniel@ffwll.ch>
Cc: Jerome Brunet <jbrunet@baylibre.com>,
	linux-kernel@vger.kernel.org,
	devicetree@vger.kernel.org,
	Rob Herring <robh@kernel.org>,
	Krzysztof Kozlowski <krzk+dt@kernel.org>,
	Conor Dooley <conor+dt@kernel.org>,
	dri-devel@lists.freedesktop.org
Subject: [PATCH 0/3] drm: panel: add support lincoln LCD197 panel
Date: Tue, 25 Jun 2024 16:25:47 +0200
Message-ID: <20240625142552.1000988-1-jbrunet@baylibre.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
X-Patchwork-Bot: notify
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258284
Newsgroups: org.kernel.vger.linux-kernel,org.freedesktop.lists.dri-devel,org.kernel.vger.linux-devicetree
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

This patchset adds support for the Lincoln LCD197 1080x1920 DSI panel.

Jerome Brunet (3):
  dt-bindings: vendor-prefixes: add prefix for lincoln
  dt-bindings: panel-simple-dsi: add lincoln LCD197 panel bindings
  drm/panel: add lincoln lcd197 support

 .../display/panel/panel-simple-dsi.yaml       |   2 +
 .../devicetree/bindings/vendor-prefixes.yaml  |   2 +
 drivers/gpu/drm/panel/Kconfig                 |  11 +
 drivers/gpu/drm/panel/Makefile                |   1 +
 drivers/gpu/drm/panel/panel-lincoln-lcd197.c  | 333 ++++++++++++++++++
 5 files changed, 349 insertions(+)
 create mode 100644 drivers/gpu/drm/panel/panel-lincoln-lcd197.c

-- 
2.43.0

.

From: Kamel Bouhara <kamel.bouhara@bootlin.com>
To: Dmitry Torokhov <dmitry.torokhov@gmail.com>,
	Rob Herring <robh+dt@kernel.org>,
	Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>,
	Conor Dooley <conor+dt@kernel.org>,
	Henrik Rydberg <rydberg@bitmath.org>,
	linux-input@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	devicetree@vger.kernel.org,
	Marco Felsch <m.felsch@pengutronix.de>,
	Jeff LaBundy <jeff@labundy.com>
Cc: catalin.popescu@leica-geosystems.com,
	mark.satterthwaite@touchnetix.com,
	Thomas Petazzoni <thomas.petazzoni@bootlin.com>,
	Gregory Clement <gregory.clement@bootlin.com>,
	bsp-development.geo@leica-geosystems.com,
	Kamel Bouhara <kamel.bouhara@bootlin.com>
Subject: [PATCH v14 0/3] Input: Add TouchNetix axiom touchscreen driver
Date: Tue, 25 Jun 2024 16:39:45 +0200
Message-ID: <20240625143948.54452-1-kamel.bouhara@bootlin.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258304
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-input
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Add a new driver for the TouchNetix's axiom family of touchscreen
controller. This driver only support i2c and can be later adapted for
SPI and USB support.
--
Changes in v14:
 - Fix is_report/present as booleans
 - Add a comment to describe the boolean variable insert
 - Remove not needed packed attributed from struct axiom_cmd_header
 - Remove duplicate target event checking
 - Only emit ABS_MT_DISTANCE/ABS_MT_PRESSURE
 - Remove input_report_key() as a mean to indicate firs reported contact
 - Remove EV_REL only need for u46 aka debug data
 - Report only MT_TOOL_FINGER instead of MT_TOOL_MAX
 - Remove unused EV_REL
 - Remove emit BTN_TOUCH as a way to indicate first target report
 - Remove unjustified delay after read access
 - Remove falling back to polling mode when no irq acquired in ACPI/DT
 - Remove handle of u46 report as it's not used
 - Remove touchscreen_report_pos() call as it generates extra dummy events
 - Rebase on v6.10-rc5

Changes in v13:
 - Fix CRC16 not selected reported in:https://lore.kernel.org/oe-kbuild-all/202405311035.5QZSREJv-lkp@intel.com/
 - Rebase on v6.10-rc2

Changes in v12:
 - Fix REGMAP_I2C not selected
 - Rebase on v6.10-rc1

Changes in v11:
 - Fix regulators name to match dt-binding
 - Enable regulators before reset is asserted

Changes in v10:
 - Set regulators as required
 - Enable power supply before reset
 - Fix ref count due to regulator requested twice
 - Rebase on v6.9-rc4

Changes in v9:
 - Fix issue reported in https://lore.kernel.org/oe-kbuild-all/202402201157.BKo97uWl-lkp@intel.com/
 - Rebase on v6.8-rc2

Changes in v8:
 - Fix missing call to input_report_slot_state()
 - Fix issue reported in https://lore.kernel.org/oe-kbuild-all/202402020623.8T1Ah513-lkp@intel.com/

Changes in v7:
 - Remove startup time from dt-binding
 - Fix usage table not correctly populated

Changes in v6:
 - Fix missing unevaluatedProperties.in dt-binding
 - Use __le16 to correctly deal with device endianness
 - Use standart kernel types s/char/u8/
 - Use regmap api as driver might support spi later
 - Use get_unaligned_le16() for the sake of clarity
 - Use devm_regulator_enable_optional()

Changes in v5:
 - Fix wrong message constructed in axiom_i2c_read
 - Delay required between i2c reads is >= 250us
 - Do not split report reading in two phases as we'll
   have to wait 500us
 - Use lower-case in properties names
 - Make regulators properties are required in dt-binding
 - Fix bug report: https://lore.kernel.org/lkml/202312051457.y3N1q3sZ-lkp@intel.com/
 - Fix bug report: https://lore.kernel.org/lkml/6f8e3b64-5b21-4a50-8680-063ef7a93bdb@suswa.mountain/

Changes in v4:
 - Cleanup unused headers and macros
 - Use standard kernel type
 - Namespace structures and functions
 - Use packed struct when possible to avoid bitfield operators
 - Fix missing break when address is found in axiom_populate_target_address()
 - Split reads in two steps for the reports, first length then report
   itself so we only read required bytes
 - Get poll-interval from devicetree
 - Add VDDI/VDDA regulators
 - Add a startup delay of 110 ms required after VDDA/VDDI is applied
 - Remove axiom_i2c_write() as it is no more used

Changes in v3:
 - Remove irq-gpios property in dt-binding
 - Use a generic node name
 - Fix issues reported in https://lore.kernel.org/oe-kbuild-all/202310100300.oAC2M62R-lkp@intel.com/

Changes in v2:
 - Add device tree binding documentation
 - Move core functions in axiom_i2c as we only care about i2c support now
 - Use static function when required
 - Use syntax dev_err_probe()
 - Add an hardware based reset

Kamel Bouhara (3):
  dt-bindings: vendor-prefixes: Add TouchNetix AS
  dt-bindings: input: Add TouchNetix axiom touchscreen
  Input: Add TouchNetix axiom i2c touchscreen driver

 .../input/touchscreen/touchnetix,ax54a.yaml   |  62 ++
 .../devicetree/bindings/vendor-prefixes.yaml  |   2 +
 MAINTAINERS                                   |   8 +
 drivers/input/touchscreen/Kconfig             |  14 +
 drivers/input/touchscreen/Makefile            |   1 +
 drivers/input/touchscreen/touchnetix_axiom.c  | 616 ++++++++++++++++++
 6 files changed, 703 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/input/touchscreen/touchnetix,ax54a.yaml
 create mode 100644 drivers/input/touchscreen/touchnetix_axiom.c

--
2.25.1

.

Date: Tue, 25 Jun 2024 22:40:48 +0800
From: kernel test robot <oliver.sang@intel.com>
To: Shivamurthy Shastri <shivamurthy.shastri@linutronix.de>
CC: <oe-lkp@lists.linux.dev>, <lkp@intel.com>, <linux-pci@vger.kernel.org>,
	<linux-kernel@vger.kernel.org>, Anna-Maria Behnsen
	<anna-maria@linutronix.de>, <oliver.sang@intel.com>
Subject: [anna-maria-devel:devmsi-arm] [PCI/MSI]  5f632ae043:
 BUG:kernel_NULL_pointer_dereference,address
Message-ID: <202406252154.e6678312-oliver.sang@intel.com>
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: inline
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258310 org.kernel.vger.linux-pci:144459
Newsgroups: org.kernel.vger.linux-kernel,dev.linux.lists.oe-lkp,org.kernel.vger.linux-pci
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail



Hello,

kernel test robot noticed "BUG:kernel_NULL_pointer_dereference,address" on:

commit: 5f632ae0439cdbfaaa26cc49f08680ad6e38846c ("PCI/MSI: Provide MSI_FLAG_PCI_MSI_MASK_PARENT")
https://git.kernel.org/cgit/linux/kernel/git/anna-maria/linux-devel.git devmsi-arm

in testcase: vm-scalability
version: vm-scalability-x86_64-6f4ef16-0_20240303
with following parameters:

	runtime: 300
	thp_enabled: always
	thp_defrag: always
	nr_task: 32
	nr_ssd: 1
	priority: 1
	test: swap-w-seq-mt
	cpufreq_governor: performance



compiler: gcc-13
test machine: 128 threads 2 sockets Intel(R) Xeon(R) Platinum 8358 CPU @ 2.60GHz (Ice Lake) with 128G memory

(please refer to attached dmesg/kmsg for entire log/backtrace)



If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <oliver.sang@intel.com>
| Closes: https://lore.kernel.org/oe-lkp/202406252154.e6678312-oliver.sang@intel.com


[   12.206077][    T9] BUG: kernel NULL pointer dereference, address: 0000000000000000
[   12.206995][    T9] #PF: supervisor instruction fetch in kernel mode
[   12.206995][    T9] #PF: error_code(0x0010) - not-present page
[   12.206995][    T9] PGD 0
[   12.206995][    T9] Oops: Oops: 0010 [#1] SMP NOPTI
[   12.206995][    T9] CPU: 0 PID: 9 Comm: kworker/0:1 Not tainted 6.10.0-rc3-00003-g5f632ae0439c #1
[   12.206995][    T9] Hardware name: Intel Corporation M50CYP2SB1U/M50CYP2SB1U, BIOS SE5C620.86B.01.01.0003.2104260124 04/26/2021
[   12.206995][    T9] Workqueue: events work_for_cpu_fn
[   12.206995][    T9] RIP: 0010:0x0
[ 12.206995][ T9] Code: Unable to access opcode bytes at 0xffffffffffffffd6.

Code starting with the faulting instruction
===========================================
[   12.206995][    T9] RSP: 0000:ffa0000000173b20 EFLAGS: 00010002
[   12.206995][    T9] RAX: 0000000000000000 RBX: ff1100010608da00 RCX: 0000000000000002
[   12.206995][    T9] RDX: ff1100010608fc30 RSI: 0000000000000080 RDI: ff11000104e0f680
[   12.206995][    T9] RBP: ff11000104edbb00 R08: 0000000000000002 R09: ffa0000000173a54
[   12.206995][    T9] R10: 0000000000000000 R11: ffffffff82031850 R12: 0000000000000000
[   12.206995][    T9] R13: ff11000104e1a300 R14: ff1100010608db60 R15: ff1100010608daa4
[   12.206995][    T9] FS:  0000000000000000(0000) GS:ff1100103e200000(0000) knlGS:0000000000000000
[   12.206995][    T9] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[   12.206995][    T9] CR2: ffffffffffffffd6 CR3: 000000207de1c001 CR4: 0000000000771ef0
[   12.206995][    T9] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
[   12.206995][    T9] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
[   12.206995][    T9] PKRU: 55555554
[   12.206995][    T9] Call Trace:
[   12.206995][    T9]  <TASK>
[ 12.206995][ T9] ? __die (arch/x86/kernel/dumpstack.c:421 arch/x86/kernel/dumpstack.c:434) 
[ 12.206995][ T9] ? page_fault_oops (arch/x86/mm/fault.c:715) 
[ 12.206995][ T9] ? exc_page_fault (arch/x86/include/asm/irqflags.h:37 arch/x86/include/asm/irqflags.h:72 arch/x86/mm/fault.c:1489 arch/x86/mm/fault.c:1539) 
[ 12.206995][ T9] ? asm_exc_page_fault (arch/x86/include/asm/idtentry.h:623) 
[ 12.206995][ T9] ? __pfx_pci_conf1_read (arch/x86/pci/direct.c:23) 
[ 12.206995][ T9] pci_irq_unmask_msi (drivers/pci/msi/irqdomain.c:164 drivers/pci/msi/irqdomain.c:179) 
[ 12.206995][ T9] irq_enable (kernel/irq/chip.c:438 kernel/irq/chip.c:432 kernel/irq/chip.c:345) 
[ 12.206995][ T9] __irq_startup (kernel/irq/internals.h:241 kernel/irq/chip.c:180 kernel/irq/chip.c:250) 
[ 12.206995][ T9] irq_startup (kernel/irq/chip.c:269) 
[ 12.206995][ T9] __setup_irq (kernel/irq/manage.c:1810) 
[ 12.206995][ T9] request_threaded_irq (kernel/irq/manage.c:2211) 
[ 12.206995][ T9] pcie_pme_probe (include/linux/interrupt.h:171 drivers/pci/pcie/pme.c:350) 
[ 12.206995][ T9] pcie_port_probe_service (drivers/pci/pcie/portdrv.c:529) 
[ 12.206995][ T9] really_probe (drivers/base/dd.c:578 drivers/base/dd.c:656) 
[ 12.206995][ T9] ? __pfx___device_attach_driver (drivers/base/dd.c:920) 
[ 12.206995][ T9] __driver_probe_device (drivers/base/dd.c:798) 
[ 12.206995][ T9] driver_probe_device (drivers/base/dd.c:828) 
[ 12.206995][ T9] __device_attach_driver (drivers/base/dd.c:957) 
[ 12.206995][ T9] bus_for_each_drv (drivers/base/bus.c:457) 
[ 12.206995][ T9] __device_attach (drivers/base/dd.c:1028) 
[ 12.206995][ T9] bus_probe_device (drivers/base/bus.c:532) 
[ 12.206995][ T9] device_add (drivers/base/core.c:3728) 
[ 12.206995][ T9] pcie_portdrv_probe (drivers/pci/pcie/portdrv.c:311 drivers/pci/pcie/portdrv.c:364 drivers/pci/pcie/portdrv.c:696) 
[ 12.206995][ T9] local_pci_probe (drivers/pci/pci-driver.c:324) 
[ 12.206995][ T9] work_for_cpu_fn (kernel/workqueue.c:6670) 
[ 12.206995][ T9] process_one_work (kernel/workqueue.c:3231) 
[ 12.206995][ T9] worker_thread (kernel/workqueue.c:3306 (discriminator 2) kernel/workqueue.c:3393 (discriminator 2)) 
[ 12.206995][ T9] ? __pfx_worker_thread (kernel/workqueue.c:3339) 
[ 12.206995][ T9] ? __pfx_worker_thread (kernel/workqueue.c:3339) 
[ 12.206995][ T9] kthread (kernel/kthread.c:389) 
[ 12.206995][ T9] ? __pfx_kthread (kernel/kthread.c:342) 
[ 12.206995][ T9] ret_from_fork (arch/x86/kernel/process.c:147) 
[ 12.206995][ T9] ? __pfx_kthread (kernel/kthread.c:342) 
[ 12.206995][ T9] ret_from_fork_asm (arch/x86/entry/entry_64.S:257) 
[   12.206995][    T9]  </TASK>
[   12.206995][    T9] Modules linked in:
[   12.206995][    T9] CR2: 0000000000000000
[   12.206995][    T9] ---[ end trace 0000000000000000 ]---
[   12.206995][    T9] RIP: 0010:0x0
[ 12.206995][ T9] Code: Unable to access opcode bytes at 0xffffffffffffffd6.

Code starting with the faulting instruction
===========================================


The kernel config and materials to reproduce are available at:
https://download.01.org/0day-ci/archive/20240625/202406252154.e6678312-oliver.sang@intel.com



-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

.

Date: Tue, 25 Jun 2024 15:42:18 +0100
From: Mark Brown <broonie@kernel.org>
To: Thomas Gleixner <tglx@linutronix.de>, Ingo Molnar <mingo@redhat.com>,
	"H. Peter Anvin" <hpa@zytor.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Jisheng Zhang <jszhang@kernel.org>
Cc: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Linux Next Mailing List <linux-next@vger.kernel.org>
Subject: linux-next: build failure after merge of the tip tree
Message-ID: <ZnrXSitgAnCO0EG9@sirena.org.uk>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Type: multipart/signed; micalg=pgp-sha512;
	protocol="application/pgp-signature"; boundary="JTVGzSLxTT9nEpPz"
Content-Disposition: inline
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258312 org.kernel.vger.linux-next:61930
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-next
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail


--JTVGzSLxTT9nEpPz
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

Hi all,

After merging the tip tree, today's linux-next build (x86_64
allmodconfig) failed like this:

/tmp/next/build/drivers/irqchip/irq-dw-apb-ictl.c:33:25: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'dw_apb_ictl_handle_irq'
   33 | static void __irq_entry dw_apb_ictl_handle_irq(struct pt_regs *regs)
      |                         ^~~~~~~~~~~~~~~~~~~~~~
In file included from /tmp/next/build/drivers/irqchip/irq-dw-apb-ictl.c:15:
/tmp/next/build/drivers/irqchip/irq-dw-apb-ictl.c: In function 'dw_apb_ictl_init':
/tmp/next/build/drivers/irqchip/irq-dw-apb-ictl.c:206:32: error: 'dw_apb_ictl_handle_irq' undeclared (first use in this function); did you mean 'dw_apb_ictl_init'?
  206 |                 set_handle_irq(dw_apb_ictl_handle_irq);
      |                                ^~~~~~~~~~~~~~~~~~~~~~
/tmp/next/build/include/linux/irq.h:1331:23: note: in definition of macro 'set_handle_irq'
 1331 |                 (void)handle_irq;               \
      |                       ^~~~~~~~~~
/tmp/next/build/drivers/irqchip/irq-dw-apb-ictl.c:206:32: note: each undeclared identifier is reported only once for each function it appears in
  206 |                 set_handle_irq(dw_apb_ictl_handle_irq);
      |                                ^~~~~~~~~~~~~~~~~~~~~~
/tmp/next/build/include/linux/irq.h:1331:23: note: in definition of macro 'set_handle_irq'
 1331 |                 (void)handle_irq;               \
      |                       ^~~~~~~~~~


Caused by commit

  7cc4f309c933ec5d ("irqchip/dw-apb-ictl: Support building as module")

(I think, I didn't specifically verify.)  I have used the tree from
20240624 instead.

--JTVGzSLxTT9nEpPz
Content-Type: application/pgp-signature; name="signature.asc"

-----BEGIN PGP SIGNATURE-----

iQEzBAABCgAdFiEEreZoqmdXGLWf4p/qJNaLcl1Uh9AFAmZ610kACgkQJNaLcl1U
h9CCGwf+LYtQ2RGGwJPGLIUjsQTZfr3lXibDSFKGxnGijXitQww/AjsSc781a5dd
IwmtPKxxma0gSKbzWTYMJ/SLt8MyQmWV79aEt8lB/cQLs0QnA9/niUe/CryhdCJu
DFSPV3B3xEhfuJlVe+kpHv5FMJJtMxGScju9VLbmWEjaRe2A8i9Srb9ns6sJl9t1
DVgyoiGAEA3KAyS5yZ+S9Y5r/14GGw4K7vhm2n0ymiwXm3GZzv1CfjoKq//S3/2v
pFD036zgzYJY7RkfCmLMzuR6x5PNFzMapkynJfzVLOiUx4cNngnrxoFrF+vvey/a
ZlRGW4dZwgCr33TFjCAax/7FY3sP/Q==
=Kafz
-----END PGP SIGNATURE-----

--JTVGzSLxTT9nEpPz--
.

Date: Tue, 25 Jun 2024 22:49:29 +0800
From: kernel test robot <oliver.sang@intel.com>
To: Yu Kuai <yukuai3@huawei.com>
CC: <oe-lkp@lists.linux.dev>, <lkp@intel.com>, <linux-kernel@vger.kernel.org>,
	Jens Axboe <axboe@kernel.dk>, <linux-block@vger.kernel.org>,
	<ying.huang@intel.com>, <feng.tang@intel.com>, <fengwei.yin@intel.com>,
	<oliver.sang@intel.com>
Subject: [linus:master] [block]  060406c61c:
 sysbench-fileio.write_operations/s -1.7% regression
Message-ID: <202406252157.348c160f-oliver.sang@intel.com>
Content-Type: text/plain; charset="iso-8859-1"
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
X-Mailing-List: linux-block@vger.kernel.org
List-Id: <linux-block.vger.kernel.org>
List-Subscribe: <mailto:linux-block+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-block+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Xref: photonic.trudheim.com org.kernel.vger.linux-block:93458 org.kernel.vger.linux-kernel:1258315
Newsgroups: org.kernel.vger.linux-block,dev.linux.lists.oe-lkp,org.kernel.vger.linux-kernel
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail



Hello,

kernel test robot noticed a -1.7% regression of sysbench-fileio.write_operations/s on:


commit: 060406c61c7cb4bbd82a02d179decca9c9bb3443 ("block: add plug while submitting IO")
https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git master

testcase: sysbench-fileio
test machine: 128 threads 2 sockets Intel(R) Xeon(R) Platinum 8358 CPU @ 2.60GHz (Ice Lake) with 128G memory
parameters:

	period: 600s
	nr_threads: 100%
	disk: 1HDD
	fs: xfs
	size: 64G
	filenum: 1024f
	rwmode: rndwr
	iomode: sync
	cpufreq_governor: performance




If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <oliver.sang@intel.com>
| Closes: https://lore.kernel.org/oe-lkp/202406252157.348c160f-oliver.sang@intel.com


Details are as below:
-------------------------------------------------------------------------------------------------->


The kernel config and materials to reproduce are available at:
https://download.01.org/0day-ci/archive/20240625/202406252157.348c160f-oliver.sang@intel.com

=========================================================================================
compiler/cpufreq_governor/disk/filenum/fs/iomode/kconfig/nr_threads/period/rootfs/rwmode/size/tbox_group/testcase:
  gcc-13/performance/1HDD/1024f/xfs/sync/x86_64-rhel-8.3/100%/600s/debian-12-x86_64-20240206.cgz/rndwr/64G/lkp-icl-2sp6/sysbench-fileio

commit: 
  3a861560cc ("bcache: fix variable length array abuse in btree_iter")
  060406c61c ("block: add plug while submitting IO")

3a861560ccb35f2a 060406c61c7cb4bbd82a02d179d 
---------------- --------------------------- 
         %stddev     %change         %stddev
             \          |                \  
     24.53 ±  5%      -3.0       21.49 ±  3%  mpstat.cpu.all.idle%
     52604 ± 70%     +99.5%     104921 ± 10%  numa-numastat.node1.other_node
     24267 ±  4%     -10.3%      21772 ±  3%  uptime.idle
      8218            -1.6%       8084        vmstat.system.cs
     24.75 ±  5%     -12.3%      21.72 ±  3%  iostat.cpu.idle
     75.08            +4.0%      78.12        iostat.cpu.iowait
    132522 ± 11%     +23.4%     163559 ±  6%  numa-meminfo.node0.Inactive(file)
    237987 ±  6%     -15.5%     201059 ±  5%  numa-meminfo.node1.Inactive(file)
     22.53 ± 11%      -6.3       16.22 ± 25%  perf-profile.children.cycles-pp.native_flush_tlb_one_user
      0.58 ± 29%      +0.5        1.05 ± 28%  perf-profile.children.cycles-pp.set_pte_vaddr_p4d
     22.53 ± 11%      -6.3       16.22 ± 25%  perf-profile.self.cycles-pp.native_flush_tlb_one_user
      0.58 ± 29%      +0.5        1.05 ± 28%  perf-profile.self.cycles-pp.set_pte_vaddr_p4d
      0.03 ±  6%     +13.9%       0.03 ±  4%  sched_debug.cfs_rq:/.h_nr_running.avg
      0.03 ±  6%     +13.9%       0.03 ±  4%  sched_debug.cfs_rq:/.nr_running.avg
   -226.99           +41.3%    -320.83        sched_debug.cpu.nr_uninterruptible.min
     25.90 ± 20%     +40.7%      36.44 ± 10%  sched_debug.cpu.nr_uninterruptible.stddev
    194997            -1.7%     191663        proc-vmstat.nr_dirtied
     92615            -1.6%      91119        proc-vmstat.nr_inactive_file
    194997            -1.7%     191663        proc-vmstat.nr_written
     92615            -1.6%      91119        proc-vmstat.nr_zone_inactive_file
    952833            -1.7%     936954        proc-vmstat.pgpgout
      1035            -1.4%       1020        sysbench-fileio.fsync_operations/s
    140.12            +1.7%     142.56        sysbench-fileio.latency_avg_ms
   1559978            -1.7%    1533306        sysbench-fileio.time.file_system_outputs
      1497 ±  3%     -51.2%     730.50 ± 10%  sysbench-fileio.time.involuntary_context_switches
   1871907            -1.5%    1843314        sysbench-fileio.time.voluntary_context_switches
      1.31            -1.7%       1.29        sysbench-fileio.write_bytes_MB/s
      1.25            -1.7%       1.23        sysbench-fileio.write_bytes_MiB/s
     80.13            -1.7%      78.74        sysbench-fileio.write_operations/s
     71858 ±  7%     +18.7%      85272 ±  3%  numa-vmstat.node0.nr_dirtied
     33121 ± 11%     +23.4%      40882 ±  6%  numa-vmstat.node0.nr_inactive_file
     71858 ±  7%     +18.7%      85272 ±  3%  numa-vmstat.node0.nr_written
     33121 ± 11%     +23.4%      40882 ±  6%  numa-vmstat.node0.nr_zone_inactive_file
    123139 ±  4%     -13.6%     106391 ±  2%  numa-vmstat.node1.nr_dirtied
     59483 ±  6%     -15.5%      50254 ±  5%  numa-vmstat.node1.nr_inactive_file
    123139 ±  4%     -13.6%     106391 ±  2%  numa-vmstat.node1.nr_written
     59483 ±  6%     -15.5%      50254 ±  5%  numa-vmstat.node1.nr_zone_inactive_file
     52604 ± 70%     +99.5%     104921 ± 10%  numa-vmstat.node1.numa_other
      2.55            +4.8%       2.68        perf-stat.i.MPKI
  92991408 ±  2%      -3.7%   89545806 ±  2%  perf-stat.i.branch-instructions
      6.14            +0.3        6.41        perf-stat.i.branch-miss-rate%
  18893060            -3.6%   18215592        perf-stat.i.cache-references
      1.83            +4.9%       1.92        perf-stat.i.cpi
 6.848e+08            -2.5%  6.675e+08 ±  2%  perf-stat.i.cpu-cycles
    214.11 ±  2%      -7.2%     198.60        perf-stat.i.cpu-migrations
 4.678e+08 ±  2%      -3.9%  4.495e+08 ±  2%  perf-stat.i.instructions
      0.58            -4.3%       0.56        perf-stat.i.ipc
  92993821 ±  2%      -3.7%   89564915 ±  2%  perf-stat.ps.branch-instructions
  18876617            -3.6%   18201664        perf-stat.ps.cache-references
 6.863e+08            -2.5%  6.692e+08 ±  2%  perf-stat.ps.cpu-cycles
    213.74 ±  2%      -7.2%     198.25        perf-stat.ps.cpu-migrations
 4.678e+08 ±  2%      -3.9%  4.497e+08 ±  2%  perf-stat.ps.instructions
 3.003e+11 ±  2%      -3.9%  2.887e+11 ±  2%  perf-stat.total.instructions




Disclaimer:
Results have been estimated based on internal Intel analysis and are provided
for informational purposes only. Any difference in system hardware or software
design or configuration may affect actual performance.


-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

.

From: Jerome Brunet <jbrunet@baylibre.com>
To: Neil Armstrong <neil.armstrong@linaro.org>,
	Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
	Maxime Ripard <mripard@kernel.org>,
	Thomas Zimmermann <tzimmermann@suse.de>,
	David Airlie <airlied@gmail.com>,
	Daniel Vetter <daniel@ffwll.ch>
Cc: Jerome Brunet <jbrunet@baylibre.com>,
	Kevin Hilman <khilman@baylibre.com>,
	linux-amlogic@lists.infradead.org,
	linux-kernel@vger.kernel.org,
	devicetree@vger.kernel.org,
	Rob Herring <robh@kernel.org>,
	Krzysztof Kozlowski <krzk+dt@kernel.org>,
	Conor Dooley <conor+dt@kernel.org>,
	dri-devel@lists.freedesktop.org
Subject: [PATCH 0/2] arm64: dts: amlogic: add power domain to hdmitx
Date: Tue, 25 Jun 2024 16:50:13 +0200
Message-ID: <20240625145017.1003346-1-jbrunet@baylibre.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
X-Patchwork-Bot: notify
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258324
Newsgroups: org.kernel.vger.linux-kernel,org.freedesktop.lists.dri-devel,org.infradead.lists.linux-amlogic,org.kernel.vger.linux-devicetree
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

This patchset add the bindings for the power domain of the HDMI Tx
on Amlogic SoC.

This is a 1st step in cleaning HDMI Tx and its direct usage of HHI
register space. Eventually, this will help remove component usage from
the Amlogic display drivers.

Jerome Brunet (2):
  dt-bindings: display: meson-dw-hdmi: add missing power-domain
  arm64: dts: amlogic: add power domain to hdmitx

 .../devicetree/bindings/display/amlogic,meson-dw-hdmi.yaml   | 5 +++++
 arch/arm64/boot/dts/amlogic/meson-g12.dtsi                   | 4 ++++
 arch/arm64/boot/dts/amlogic/meson-gxbb.dtsi                  | 1 +
 arch/arm64/boot/dts/amlogic/meson-gxl.dtsi                   | 1 +
 arch/arm64/boot/dts/amlogic/meson-sm1.dtsi                   | 4 ++++
 5 files changed, 15 insertions(+)

-- 
2.43.0

.

From: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Subject: [PATCH v3 0/7] usb: typec: ucsi: rework glue driver interface
Date: Tue, 25 Jun 2024 17:54:25 +0300
Message-Id: <20240625-ucsi-rework-interface-v3-0-7a6c8e17be3a@linaro.org>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
To: Heikki Krogerus <heikki.krogerus@linux.intel.com>, 
 Greg Kroah-Hartman <gregkh@linuxfoundation.org>, 
 Maxime Coquelin <mcoquelin.stm32@gmail.com>, 
 Alexandre Torgue <alexandre.torgue@foss.st.com>
Cc: Nikita Travkin <nikita@trvn.ru>, 
 Neil Armstrong <neil.armstrong@linaro.org>, linux-usb@vger.kernel.org, 
 linux-kernel@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com, 
 linux-arm-kernel@lists.infradead.org
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258334
Newsgroups: org.kernel.vger.linux-kernel,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-usb
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

The interface between UCSI and the glue driver is very low-level. It
allows reading the UCSI data from any offset (but in reality the UCSI
driver reads only VERSION, CCI an MESSAGE_IN data). All event handling
is to be done by the glue driver (which already resulted in several
similar-but-slightly different implementations). It leaves no place to
optimize the write-read-read sequence for the command execution (which
might be beneficial for some of the drivers), etc.

The patchseries attempts to restructure the UCSI glue driver interface
in order to provide sensible operations instead of a low-level read /
write calls.

If this approach is found to be acceptable, I plan to further rework the
command interface, moving reading CCI and MESSAGE_IN to the common
control code, which should simplify driver's implementation and remove
necessity to split quirks between sync_control and read_message_in e.g.
as implemented in the ucsi_ccg.c.

Note, the series was tested only on the ucsi_glink platforms. Further
testing is appreciated.

Depends: [1], [2]

[1] https://lore.kernel.org/linux-usb/20240612124656.2305603-1-fabrice.gasnier@foss.st.com/

[2] https://lore.kernel.org/linux-usb/20240621-ucsi-yoga-ec-driver-v8-1-e03f3536b8c6@linaro.org/

Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
Changes in v3:
- Rebased on top of the next to resolve conflicts with the merge LG Gram
  patch (Heikki)
- Link to v2: https://lore.kernel.org/r/20240621-ucsi-rework-interface-v2-0-a399ff96bf88@linaro.org

Changes in v2:
- Dropped the RFC prefix
- Rebased on top of the fixed STM32 patch
- Included the pending Yoga C630 driver into the cleanup.
- Link to v1: https://lore.kernel.org/r/20240603-ucsi-rework-interface-v1-0-99a6d544cec8@linaro.org

---
Dmitry Baryshkov (7):
      usb: typec: ucsi: move ucsi_acknowledge() from ucsi_read_error()
      usb: typec: ucsi: simplify command sending API
      usb: typec: ucsi: split read operation
      usb: typec: ucsi: rework command execution functions
      usb: typec: ucsi: inline ucsi_read_message_in
      usb: typec: ucsi: extract common code for command handling
      usb: typec: ucsi: reorder operations in ucsi_run_command()

 drivers/usb/typec/ucsi/ucsi.c           | 215 +++++++++++++++++---------------
 drivers/usb/typec/ucsi/ucsi.h           |  26 ++--
 drivers/usb/typec/ucsi/ucsi_acpi.c      | 127 ++++++++++---------
 drivers/usb/typec/ucsi/ucsi_ccg.c       | 103 +++++++--------
 drivers/usb/typec/ucsi/ucsi_glink.c     |  74 ++++-------
 drivers/usb/typec/ucsi/ucsi_stm32g0.c   |  79 ++++--------
 drivers/usb/typec/ucsi/ucsi_yoga_c630.c | 104 +++++----------
 7 files changed, 322 insertions(+), 406 deletions(-)
---
base-commit: c0068dfdd1aaf0fa9d60367b0f392ce145ee27c3
change-id: 20240525-ucsi-rework-interface-5ff2264f6aec

Best regards,
-- 
Dmitry Baryshkov <dmitry.baryshkov@linaro.org>

.

From: Olivier Moysan <olivier.moysan@foss.st.com>
To: <fabrice.gasnier@foss.st.com>, Jonathan Cameron <jic23@kernel.org>,
        Lars-Peter Clausen <lars@metafoo.de>, Rob Herring <robh@kernel.org>,
        Krzysztof Kozlowski <krzk+dt@kernel.org>,
        Conor Dooley <conor+dt@kernel.org>,
        Olivier Moysan <olivier.moysan@foss.st.com>,
        Arnaud Pouliquen
	<arnaud.pouliquen@foss.st.com>,
        Maxime Coquelin <mcoquelin.stm32@gmail.com>,
        Alexandre Torgue <alexandre.torgue@foss.st.com>,
        Nuno Sa
	<nuno.sa@analog.com>, Liam Girdwood <lgirdwood@gmail.com>,
        Mark Brown
	<broonie@kernel.org>
CC: <linux-iio@vger.kernel.org>, <devicetree@vger.kernel.org>,
        <linux-kernel@vger.kernel.org>, <alsa-devel@alsa-project.org>,
        <linux-stm32@st-md-mailman.stormreply.com>,
        <linux-arm-kernel@lists.infradead.org>
Subject: [PATCH v2 0/8] iio: adc: dfsdm: add scaling support
Date: Tue, 25 Jun 2024 17:07:08 +0200
Message-ID: <20240625150717.1038212-1-olivier.moysan@foss.st.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258361
Newsgroups: org.kernel.vger.linux-kernel,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-iio
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

The aim of this serie is to add scaling support to STM32 DFSDM
peripheral in the analog context.

The DFSDM currently operates as a consumer of IIO channels
provided by a generic SD modulator. As previously discussed in RFC [1],
this topology is not suitable for implementing scaling.

This series brings the integration of the DFSDM driver with the new 
IIO backend framework [2], enabling the DFSDM IIO device to offer 
scaling feature based on reference voltage data obtained from the
IIO SD modulator backend. This generic SD modulator backend takes the
place of the former SD modulator, used with legacy implementation.

The DFSDM driver has been updated to adopt the generic ADC channel
binding [3]. The reasons for this include:
- Reducing the use of proprietary properties
- Simplifying the coexistence of legacy and new backend bindings
- Prepare the support of the MDF peripheral on STM32MP25 SoC

Backward compatibility is maintained through legacy support.

This series extends the backend framework with the following APIs:
- iio_backend_read_raw:
	This API is intented to retrieve the voltage information from the
	backend. It is based on IIO framework read_raw API.
- iio_backend_disable / iio_backend_enable:
	backend enable/disable to be used for PM management
- devm_iio_backend_fwnode_get
	Intended for parsing DT subnodes to allow generic channel binding
	support, as generic channel DT nodes are not populated as devices.

[1]: https://lore.kernel.org/lkml/20200204101008.11411-1-olivier.moysan@st.com/
[2]: https://lore.kernel.org/all/20240206-iio-backend-v9-0-df66d159c000@analog.com/
[3]: devicetree/bindings/iio/adc/adc.yaml

Changes in v2:
- Update enable/disable backend API
- Rename devm_iio_backend_subnode_get(), as devm_iio_backend_fwnode_get()
- Update iio_backend_read_raw() prototype to fully match IIO framework
  read_raw callback prototype.
- Change st,adc-channel-type property name and type in DFSDM binding
- Remove sd-backend and rename ads1201 compatibles in SD binding

Conor, in this v2, I left the SD modulator driver & binding unchanged,
regarding the naming issue you raised previously.

The problem here is that we have two versions of the generic sigma delta
modulator driver: one for legacy support and a new one to support new
binding. Maybe an alternate, is to rename former sd modulator as
"legacy" or something similar.
I will address this point in a v3 if necessary.

Olivier Moysan (8):
  iio: add read raw service to iio backend framework
  iio: add enable and disable services to iio backend framework
  iio: add child nodes support in iio backend framework
  dt-bindings: iio: dfsdm: move to backend framework
  dt-bindings: iio: add sigma delta modulator backend
  iio: adc: stm32-dfsdm: adopt generic channels bindings
  iio: add sd modulator generic iio backend
  iio: adc: stm32-dfsdm: add scaling support to dfsdm

 .../iio/adc/sd-modulator-backend.yaml         |  39 +++
 .../bindings/iio/adc/st,stm32-dfsdm-adc.yaml  | 157 ++++++++-
 drivers/iio/adc/Kconfig                       |  11 +
 drivers/iio/adc/Makefile                      |   1 +
 drivers/iio/adc/sd_adc_backend.c              | 117 +++++++
 drivers/iio/adc/stm32-dfsdm-adc.c             | 302 +++++++++++++++---
 drivers/iio/industrialio-backend.c            | 108 +++++--
 include/linux/iio/backend.h                   |  10 +-
 8 files changed, 679 insertions(+), 66 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/iio/adc/sd-modulator-backend.yaml
 create mode 100644 drivers/iio/adc/sd_adc_backend.c


base-commit: 2dfa1b7bfc07e58acb9f9eaa8c871f37189dbfee
-- 
2.25.1

.

From: Bartosz Golaszewski <brgl@bgdev.pl>
To: Bjorn Andersson <andersson@kernel.org>,
	Konrad Dybcio <konrad.dybcio@linaro.org>,
	Rob Herring <robh@kernel.org>,
	Krzysztof Kozlowski <krzk+dt@kernel.org>,
	Conor Dooley <conor+dt@kernel.org>
Cc: linux-arm-msm@vger.kernel.org,
	devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	netdev@vger.kernel.org,
	Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
Subject: [PATCH v2 0/3] arm64: dts: qcom: sa8775p-ride: support both board variants
Date: Tue, 25 Jun 2024 17:14:27 +0200
Message-ID: <20240625151430.34024-1-brgl@bgdev.pl>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258371 org.kernel.vger.netdev:355003
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-arm-msm,org.kernel.vger.linux-devicetree,org.kernel.vger.netdev
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

From: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>

Split the current .dts into two: the existing one keeps the name and
supports revision 2 of the board while patch 2 adds a .dts for revision 3.

Changes since v1:
- add a new compatible for Rev3

Bartosz Golaszewski (3):
  dt-bindings: arm: qcom: add sa8775p-ride Rev 3
  arm64: dts: qcom: move common parts for sa8775p-ride variants into a
    .dtsi
  arm64: dts: qcom: sa8775p-ride-r3: add new board file

 .../devicetree/bindings/arm/qcom.yaml         |   1 +
 arch/arm64/boot/dts/qcom/Makefile             |   1 +
 arch/arm64/boot/dts/qcom/sa8775p-ride-r3.dts  |  47 +
 arch/arm64/boot/dts/qcom/sa8775p-ride.dts     | 836 +-----------------
 arch/arm64/boot/dts/qcom/sa8775p-ride.dtsi    | 814 +++++++++++++++++
 5 files changed, 885 insertions(+), 814 deletions(-)
 create mode 100644 arch/arm64/boot/dts/qcom/sa8775p-ride-r3.dts
 create mode 100644 arch/arm64/boot/dts/qcom/sa8775p-ride.dtsi

-- 
2.43.0

.

From: "Masami Hiramatsu (Google)" <mhiramat@kernel.org>
To: Steven Rostedt <rostedt@goodmis.org>,
	Shuah Khan <shuah@kernel.org>
Cc: Masami Hiramatsu <mhiramat@kernel.org>,
	Tom Zanussi <zanussi@kernel.org>,
	Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
	linux-kernel@vger.kernel.org,
	linux-trace-kernel@vger.kernel.org,
	linux-kselftest@vger.kernel.org
Subject: [RFC PATCH 0/3] tracing: Support poll on event hist file
Date: Wed, 26 Jun 2024 00:16:52 +0900
Message-Id: <171932861260.584123.15653284949837094747.stgit@devnote2>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258375
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-kselftest,org.kernel.vger.linux-trace-kernel
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Hi,

Here is an RFC patch to support polling on event 'hist' file.

There has been interest in allowing user programs to monitor kernel
events in real time. Ftrace provides `trace_pipe` interface to wait
on events in the ring buffer, but it is needed to wait until filling
up a page with events in the ring buffer. We can also peek the
`trace` file periodically, but that is inefficient way to monitor
a randomely happening event.

This patch set allows user to `poll`(or `select`, `epoll`) on event
histogram interface. As you know each event has its own `hist` file
which shows histograms generated by trigger action. So user can set
a new hist trigger on any event you want to monitor, and poll on the
`hist` file until it is updated.

There are 2 poll events are supported, POLLIN and POLLPRI. POLLIN
means that there are any readable update on `hist` file and this
event will be flashed only when you call read(). So, this is
useful if you want to read the histogram periodically.
The other POLLPRI event is for monitoring trace event. Like the
POLLIN, this will be returned when the histogram is updated, but
you don't need to read() the file and use poll() again.

Note that this waits for histogram update (not event arrival), thus
you must set a histogram on the event at first.

Here is an example usage:

----
TRACEFS=/sys/kernel/tracing
EVENT=$TRACEFS/events/sched/sched_process_free

# setup histogram trigger and enable event
echo "hist:key=comm" >> $EVENT/trigger
echo 1 > $EVENT/enable

# Wait for update
poll $EVENT/hist

# Event arrived.
echo "process free event is comming"
tail $TRACEFS/trace
----

The 'poll' command is in the selftest patch.

You can take this series also from here;

https://git.kernel.org/pub/scm/linux/kernel/git/mhiramat/linux.git/log/?h=topic/event-hist-poll

Thank you,

---

Masami Hiramatsu (Google) (3):
      tracing/hist: Add poll(POLLIN) support on hist file
      tracing/hist: Support POLLPRI event for poll on histogram
      selftests/tracing: Add hist poll() support test


 include/linux/trace_events.h                       |    5 +
 kernel/trace/trace_events.c                        |   18 ++++
 kernel/trace/trace_events_hist.c                   |  101 +++++++++++++++++++-
 tools/testing/selftests/ftrace/Makefile            |    3 +
 tools/testing/selftests/ftrace/poll.c              |   34 +++++++
 .../ftrace/test.d/trigger/trigger-hist-poll.tc     |   46 +++++++++
 6 files changed, 204 insertions(+), 3 deletions(-)
 create mode 100644 tools/testing/selftests/ftrace/poll.c
 create mode 100644 tools/testing/selftests/ftrace/test.d/trigger/trigger-hist-poll.tc

--
Masami Hiramatsu (Google) <mhiramat@kernel.org>
.

From: Mateusz Guzik <mjguzik@gmail.com>
To: brauner@kernel.org
Cc: viro@zeniv.linux.org.uk,
	jack@suse.cz,
	linux-kernel@vger.kernel.org,
	linux-fsdevel@vger.kernel.org,
	io-uring@vger.kernel.org,
	axboe@kernel.dk,
	torvalds@linux-foundation.org,
	xry111@xry111.site,
	loongarch@lists.linux.dev,
	Mateusz Guzik <mjguzik@gmail.com>
Subject: [PATCH v3] vfs: support statx(..., NULL, AT_EMPTY_PATH, ...)
Date: Tue, 25 Jun 2024 17:18:06 +0200
Message-ID: <20240625151807.620812-1-mjguzik@gmail.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258379
Newsgroups: org.kernel.vger.linux-kernel,dev.linux.lists.loongarch,org.kernel.vger.io-uring,org.kernel.vger.linux-fsdevel
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

The newly used helper also checks for empty ("") paths.

NULL paths with any flag value other than AT_EMPTY_PATH go the usual
route and end up with -EFAULT to retain compatibility (Rust is abusing
calls of the sort to detect availability of statx).

This avoids path lookup code, lockref management, memory allocation and
in case of NULL path userspace memory access (which can be quite
expensive with SMAP on x86_64).

Benchmarked with statx(..., AT_EMPTY_PATH, ...) running on Sapphire
Rapids, with the "" path for the first two cases and NULL for the last
one.

Results in ops/s:
stock:     4231237
pre-check: 5944063 (+40%)
NULL path: 6601619 (+11%/+56%)

Signed-off-by: Mateusz Guzik <mjguzik@gmail.com>
---

Diffed against fs-next and assumes c050122bdbb4 ("fs: new helper
vfs_empty_path()") from vfs.empty.path is already applied.

WARNING: io_uring remains untested (modulo compilation). I presume
Jens has a handy way of making sure things still work. 

While the io_uring part can be added at a later date, I'm trying to
avoid a scenario where someone has code which works with the NULL path
and breaks when moving to io_uring. I am not going to argue about it ,
worst case changes to io_uring can be trivially dropped and someone(tm)
can add their own variant whenever they see fit.

v3:
- also support AT_STATX* flags for NULL and ""

v2:
- support glibc passing AT_NO_AUTOMOUNT | AT_EMPTY_PATH
- tidy up some commentary
- drop the fdget_raw CLASS addition as it is already present in newer
  trees

 fs/internal.h    |   2 +
 fs/stat.c        | 107 +++++++++++++++++++++++++++++++++++------------
 io_uring/statx.c |  22 ++++++----
 3 files changed, 96 insertions(+), 35 deletions(-)

diff --git a/fs/internal.h b/fs/internal.h
index 84f371193f74..1d820018e6dc 100644
--- a/fs/internal.h
+++ b/fs/internal.h
@@ -247,6 +247,8 @@ extern const struct dentry_operations ns_dentry_operations;
 int getname_statx_lookup_flags(int flags);
 int do_statx(int dfd, struct filename *filename, unsigned int flags,
 	     unsigned int mask, struct statx __user *buffer);
+int do_statx_fd(int fd, unsigned int flags, unsigned int mask,
+		struct statx __user *buffer);
 
 /*
  * fs/splice.c:
diff --git a/fs/stat.c b/fs/stat.c
index 5039c34a385d..3778e605eac8 100644
--- a/fs/stat.c
+++ b/fs/stat.c
@@ -214,6 +214,43 @@ int getname_statx_lookup_flags(int flags)
 	return lookup_flags;
 }
 
+static int vfs_statx_path(struct path *path, int flags, struct kstat *stat,
+			  u32 request_mask)
+{
+	int error = vfs_getattr(path, stat, request_mask, flags);
+
+	if (request_mask & STATX_MNT_ID_UNIQUE) {
+		stat->mnt_id = real_mount(path->mnt)->mnt_id_unique;
+		stat->result_mask |= STATX_MNT_ID_UNIQUE;
+	} else {
+		stat->mnt_id = real_mount(path->mnt)->mnt_id;
+		stat->result_mask |= STATX_MNT_ID;
+	}
+
+	if (path->mnt->mnt_root == path->dentry)
+		stat->attributes |= STATX_ATTR_MOUNT_ROOT;
+	stat->attributes_mask |= STATX_ATTR_MOUNT_ROOT;
+
+	/* Handle STATX_DIOALIGN for block devices. */
+	if (request_mask & STATX_DIOALIGN) {
+		struct inode *inode = d_backing_inode(path->dentry);
+
+		if (S_ISBLK(inode->i_mode))
+			bdev_statx_dioalign(inode, stat);
+	}
+
+	return error;
+}
+
+static int vfs_statx_fd(int fd, int flags, struct kstat *stat,
+			  u32 request_mask)
+{
+	CLASS(fd_raw, f)(fd);
+	if (!f.file)
+		return -EBADF;
+	return vfs_statx_path(&f.file->f_path, flags, stat, request_mask);
+}
+
 /**
  * vfs_statx - Get basic and extra attributes by filename
  * @dfd: A file descriptor representing the base dir for a relative filename
@@ -243,36 +280,13 @@ static int vfs_statx(int dfd, struct filename *filename, int flags,
 retry:
 	error = filename_lookup(dfd, filename, lookup_flags, &path, NULL);
 	if (error)
-		goto out;
-
-	error = vfs_getattr(&path, stat, request_mask, flags);
-
-	if (request_mask & STATX_MNT_ID_UNIQUE) {
-		stat->mnt_id = real_mount(path.mnt)->mnt_id_unique;
-		stat->result_mask |= STATX_MNT_ID_UNIQUE;
-	} else {
-		stat->mnt_id = real_mount(path.mnt)->mnt_id;
-		stat->result_mask |= STATX_MNT_ID;
-	}
-
-	if (path.mnt->mnt_root == path.dentry)
-		stat->attributes |= STATX_ATTR_MOUNT_ROOT;
-	stat->attributes_mask |= STATX_ATTR_MOUNT_ROOT;
-
-	/* Handle STATX_DIOALIGN for block devices. */
-	if (request_mask & STATX_DIOALIGN) {
-		struct inode *inode = d_backing_inode(path.dentry);
-
-		if (S_ISBLK(inode->i_mode))
-			bdev_statx_dioalign(inode, stat);
-	}
-
+		return error;
+	error = vfs_statx_path(&path, flags, stat, request_mask);
 	path_put(&path);
 	if (retry_estale(error, lookup_flags)) {
 		lookup_flags |= LOOKUP_REVAL;
 		goto retry;
 	}
-out:
 	return error;
 }
 
@@ -683,16 +697,40 @@ int do_statx(int dfd, struct filename *filename, unsigned int flags,
 	return cp_statx(&stat, buffer);
 }
 
+int do_statx_fd(int fd, unsigned int flags, unsigned int mask,
+	     struct statx __user *buffer)
+{
+	struct kstat stat;
+	int error;
+
+	if (mask & STATX__RESERVED)
+		return -EINVAL;
+	if ((flags & AT_STATX_SYNC_TYPE) == AT_STATX_SYNC_TYPE)
+		return -EINVAL;
+
+	/* STATX_CHANGE_COOKIE is kernel-only for now. Ignore requests
+	 * from userland.
+	 */
+	mask &= ~STATX_CHANGE_COOKIE;
+
+	error = vfs_statx_fd(fd, flags, &stat, mask);
+	if (error)
+		return error;
+
+	return cp_statx(&stat, buffer);
+}
+
 /**
  * sys_statx - System call to get enhanced stats
  * @dfd: Base directory to pathwalk from *or* fd to stat.
- * @filename: File to stat or "" with AT_EMPTY_PATH
+ * @filename: File to stat or either NULL or "" with AT_EMPTY_PATH
  * @flags: AT_* flags to control pathwalk.
  * @mask: Parts of statx struct actually required.
  * @buffer: Result buffer.
  *
  * Note that fstat() can be emulated by setting dfd to the fd of interest,
- * supplying "" as the filename and setting AT_EMPTY_PATH in the flags.
+ * supplying "" (or preferably NULL) as the filename and setting AT_EMPTY_PATH
+ * in the flags.
  */
 SYSCALL_DEFINE5(statx,
 		int, dfd, const char __user *, filename, unsigned, flags,
@@ -700,8 +738,23 @@ SYSCALL_DEFINE5(statx,
 		struct statx __user *, buffer)
 {
 	int ret;
+	unsigned lflags;
 	struct filename *name;
 
+	/*
+	 * Short-circuit handling of NULL and "" paths.
+	 *
+	 * For a NULL path we require and accept only the AT_EMPTY_PATH flag
+	 * (possibly |'d with AT_STATX flags).
+	 *
+	 * However, glibc on 32-bit architectures implements fstatat as statx
+	 * with the "" pathname and AT_NO_AUTOMOUNT | AT_EMPTY_PATH flags.
+	 * Supporting this results in the uglification below.
+	 */
+	lflags = flags & ~(AT_NO_AUTOMOUNT | AT_STATX_SYNC_TYPE);
+	if (lflags == AT_EMPTY_PATH && vfs_empty_path(dfd, filename))
+		return do_statx_fd(dfd, flags & ~AT_NO_AUTOMOUNT, mask, buffer);
+
 	name = getname_flags(filename, getname_statx_lookup_flags(flags));
 	ret = do_statx(dfd, name, flags, mask, buffer);
 	putname(name);
diff --git a/io_uring/statx.c b/io_uring/statx.c
index f7f9b202eec0..2b27af51fc12 100644
--- a/io_uring/statx.c
+++ b/io_uring/statx.c
@@ -23,6 +23,7 @@ struct io_statx {
 int io_statx_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe)
 {
 	struct io_statx *sx = io_kiocb_to_cmd(req, struct io_statx);
+	struct filename *filename;
 	const char __user *path;
 
 	if (sqe->buf_index || sqe->splice_fd_in)
@@ -36,14 +37,16 @@ int io_statx_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe)
 	sx->buffer = u64_to_user_ptr(READ_ONCE(sqe->addr2));
 	sx->flags = READ_ONCE(sqe->statx_flags);
 
-	sx->filename = getname_flags(path,
-				     getname_statx_lookup_flags(sx->flags));
-
-	if (IS_ERR(sx->filename)) {
-		int ret = PTR_ERR(sx->filename);
-
+	if ((sx->flags & (AT_EMPTY_PATH | AT_STATX_SYNC_TYPE)) ==
+	    (AT_EMPTY_PATH | AT_STATX_SYNC_TYPE) &&
+	    vfs_empty_path(sx->dfd, path)) {
 		sx->filename = NULL;
-		return ret;
+	} else {
+		filename = getname_flags(path,
+					 getname_statx_lookup_flags(sx->flags));
+		if (IS_ERR(filename))
+			return PTR_ERR(filename);
+		sx->filename = filename;
 	}
 
 	req->flags |= REQ_F_NEED_CLEANUP;
@@ -58,7 +61,10 @@ int io_statx(struct io_kiocb *req, unsigned int issue_flags)
 
 	WARN_ON_ONCE(issue_flags & IO_URING_F_NONBLOCK);
 
-	ret = do_statx(sx->dfd, sx->filename, sx->flags, sx->mask, sx->buffer);
+	if (sx->filename == NULL)
+		ret = do_statx_fd(sx->dfd, sx->flags, sx->mask, sx->buffer);
+	else
+		ret = do_statx(sx->dfd, sx->filename, sx->flags, sx->mask, sx->buffer);
 	io_req_set_res(req, ret, 0);
 	return IOU_OK;
 }
-- 
2.43.0

.

From: Teddy Engel <engel.teddy@gmail.com>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	oe-kbuild-all@lists.linux.dev,
	devel@driverdev.osuosl.org,
	linux-staging@lists.linux.dev,
	linux-kernel@vger.kernel.org
Cc: Teddy Engel <engel.teddy@gmail.com>,
	kernel test robot <lkp@intel.com>
Subject: [PATCH v2] staging: rtl8192e: Fix conflicting types error with net_device.
Date: Tue, 25 Jun 2024 16:19:18 +0100
Message-Id: <20240625151918.10839-1-engel.teddy@gmail.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258380
Newsgroups: org.kernel.vger.linux-kernel,dev.linux.lists.linux-staging,dev.linux.lists.oe-kbuild-all,org.linuxdriverproject.driverdev-devel
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Add a pre-declaration of struct net_device so the compiler is able to
use rtl_pci.h / rtl_cam.h.

Fix for commit: 7dff0b27d9c842f88149bf611cbc0b59be1dcd3c:
[34/59] staging: rtl89192e: Remove unnecessary pre-declaration of struct
net_device.

Signed-off-by: Teddy Engel <engel.teddy@gmail.com>
Reported-by: kernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202406250858.L8rJMHQm-lkp@intel.com/
---
v2: Add commit id that's being fixed.

 drivers/staging/rtl8192e/rtl8192e/rtl_cam.h | 2 ++
 drivers/staging/rtl8192e/rtl8192e/rtl_pci.h | 2 ++
 2 files changed, 4 insertions(+)

diff --git a/drivers/staging/rtl8192e/rtl8192e/rtl_cam.h b/drivers/staging/rtl8192e/rtl8192e/rtl_cam.h
index 3a5635494385..9deffdf96072 100644
--- a/drivers/staging/rtl8192e/rtl8192e/rtl_cam.h
+++ b/drivers/staging/rtl8192e/rtl8192e/rtl_cam.h
@@ -12,6 +12,8 @@
 
 #include <linux/types.h>
 
+struct net_device;
+
 void rtl92e_cam_reset(struct net_device *dev);
 void rtl92e_enable_hw_security_config(struct net_device *dev);
 void rtl92e_set_key(struct net_device *dev, u8 EntryNo, u8 KeyIndex,
diff --git a/drivers/staging/rtl8192e/rtl8192e/rtl_pci.h b/drivers/staging/rtl8192e/rtl8192e/rtl_pci.h
index c645775b2150..3e39c4835ac8 100644
--- a/drivers/staging/rtl8192e/rtl8192e/rtl_pci.h
+++ b/drivers/staging/rtl8192e/rtl8192e/rtl_pci.h
@@ -13,6 +13,8 @@
 #include <linux/types.h>
 #include <linux/pci.h>
 
+struct net_device;
+
 bool rtl92e_check_adapter(struct pci_dev *pdev, struct net_device *dev);
 
 #endif
-- 
2.39.2

.

From: Abhinav Jain <jain.abhinav177@gmail.com>
To: shuah@kernel.org,
	akpm@linux-foundation.org,
	linux-kernel@vger.kernel.org,
	linux-fsdevel@vger.kernel.org,
	linux-kselftest@vger.kernel.org
Cc: skhan@linuxfoundation.org,
	jain.abhinav177@gmail.com,
	javier.carrasco.cruz@gmail.com
Subject: [PATCH] selftests/proc: fix unused result warning during test compilation
Date: Tue, 25 Jun 2024 15:21:39 +0000
Message-Id: <20240625152139.16412-1-jain.abhinav177@gmail.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258382
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-fsdevel,org.kernel.vger.linux-kselftest
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Check the return value from write function to get rid of the warning
during test compilation, shared below.
Tested by compiling after the change, the warning disappears.

proc-empty-vm.c:385:17: warning: ignoring return value of â€˜writeâ€™
declared with attribute â€˜warn_unused_resultâ€™ [-Wunused-result]
  385 |                 write(1, buf, rv);

Signed-off-by: Abhinav Jain <jain.abhinav177@gmail.com>
---
 tools/testing/selftests/proc/proc-empty-vm.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/tools/testing/selftests/proc/proc-empty-vm.c b/tools/testing/selftests/proc/proc-empty-vm.c
index 56198d4ca2bf..510ab4a5330a 100644
--- a/tools/testing/selftests/proc/proc-empty-vm.c
+++ b/tools/testing/selftests/proc/proc-empty-vm.c
@@ -382,7 +382,12 @@ static int test_proc_pid_statm(pid_t pid)
 	assert(rv >= 0);
 	assert(rv <= sizeof(buf));
 	if (0) {
-		write(1, buf, rv);
+		ssize_t bytes_written = write(1, buf, rv);
+
+		if (bytes_written != rv) {
+			perror("write");
+			return EXIT_FAILURE;
+		}
 	}
 
 	const char *p = buf;
-- 
2.34.1

.

Message-ID: <CWLP265MB6516C4904E979DB10F00F9F8FDD52@CWLP265MB6516.GBRP265.PROD.OUTLOOK.COM>
Subject: [PATCH] Staging: rtl8192e: rtllib_rx: fixed alignment
From: Yusef Aslam <yuzi54780@outlook.com>
To: greg-kh@linuxfoundation.org
Cc: linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org
Date: Tue, 25 Jun 2024 16:25:06 +0100
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258385
Newsgroups: org.kernel.vger.linux-kernel,dev.linux.lists.linux-staging
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Fixed alignment.From 3acc0622bca28c1a00696e7abd7c305ca5ad1f72 Mon Sep 17 00=
:00:00 2001
From: Yusef Aslam <YUZi54780@outlook.com>
Date: Tue, 25 Jun 2024 15:03:08 +0100
Subject: [PATCH] Staging: rtl8192e: rtllib_rx: fixed alignment

Fixed alignment.

Signed-off-by: Yusef Aslam <YUZi54780@outlook.com>
---
 drivers/staging/rtl8192e/rtllib_rx.c | 98 ++++++++++++++--------------
 1 file changed, 49 insertions(+), 49 deletions(-)

diff --git a/drivers/staging/rtl8192e/rtllib_rx.c
b/drivers/staging/rtl8192e/rtllib_rx.c
index ebf8a2fd36d3..b1a476e29670 100644
--- a/drivers/staging/rtl8192e/rtllib_rx.c
+++ b/drivers/staging/rtl8192e/rtllib_rx.c
@@ -55,7 +55,7 @@ static inline void rtllib_monitor_rx(struct
rtllib_device *ieee,
 /* Called only as a tasklet (software IRQ) */
 static struct rtllib_frag_entry *
 rtllib_frag_cache_find(struct rtllib_device *ieee, unsigned int seq,
-			  unsigned int frag, u8 tid, u8 *src, u8 *dst)
+		       unsigned int frag, u8 tid, u8 *src, u8 *dst)
 {
 	struct rtllib_frag_entry *entry;
 	int i;
@@ -84,7 +84,7 @@ rtllib_frag_cache_find(struct rtllib_device *ieee,
unsigned int seq,
 /* Called only as a tasklet (software IRQ) */
 static struct sk_buff *
 rtllib_frag_cache_get(struct rtllib_device *ieee,
-			 struct ieee80211_hdr *hdr)
+		      struct ieee80211_hdr *hdr)
 {
 	struct sk_buff *skb =3D NULL;
 	u16 fc =3D le16_to_cpu(hdr->frame_control);
@@ -143,7 +143,7 @@ rtllib_frag_cache_get(struct rtllib_device *ieee,
 		 * should have already been received
 		 */
 		entry =3D rtllib_frag_cache_find(ieee, seq, frag, tid,
hdr->addr2,
-						  hdr->addr1);
+					       hdr->addr1);
 		if (entry) {
 			entry->last_frag =3D frag;
 			skb =3D entry->skb;
@@ -155,7 +155,7 @@ rtllib_frag_cache_get(struct rtllib_device *ieee,
=20
 /* Called only as a tasklet (software IRQ) */
 static int rtllib_frag_cache_invalidate(struct rtllib_device *ieee,
-					   struct ieee80211_hdr *hdr)
+					struct ieee80211_hdr *hdr)
 {
 	u16 fc =3D le16_to_cpu(hdr->frame_control);
 	u16 sc =3D le16_to_cpu(hdr->seq_ctrl);
@@ -181,7 +181,7 @@ static int rtllib_frag_cache_invalidate(struct
rtllib_device *ieee,
 	}
=20
 	entry =3D rtllib_frag_cache_find(ieee, seq, -1, tid, hdr->addr2,
-					  hdr->addr1);
+				       hdr->addr1);
=20
 	if (!entry) {
 		netdev_dbg(ieee->dev,
@@ -202,8 +202,8 @@ static int rtllib_frag_cache_invalidate(struct
rtllib_device *ieee,
  */
 static inline int
 rtllib_rx_frame_mgmt(struct rtllib_device *ieee, struct sk_buff *skb,
-			struct rtllib_rx_stats *rx_stats, u16 type,
-			u16 stype)
+		     struct rtllib_rx_stats *rx_stats, u16 type,
+		     u16 stype)
 {
 	/* On the struct stats definition there is written that
 	 * this is not mandatory.... but seems that the probe
@@ -228,7 +228,7 @@ rtllib_rx_frame_mgmt(struct rtllib_device *ieee,
struct sk_buff *skb,
=20
 /* Called by rtllib_rx_frame_decrypt */
 static int rtllib_is_eapol_frame(struct rtllib_device *ieee,
-				    struct sk_buff *skb, size_t
hdrlen)
+				 struct sk_buff *skb, size_t hdrlen)
 {
 	struct net_device *dev =3D ieee->dev;
 	u16 fc, ethertype;
@@ -346,7 +346,7 @@ rtllib_rx_frame_decrypt_msdu(struct rtllib_device
*ieee, struct sk_buff *skb,
 /* this function is stolen from ipw2200 driver*/
 #define IEEE_PACKET_RETRY_TIME (5 * HZ)
 static int is_duplicate_packet(struct rtllib_device *ieee,
-				      struct ieee80211_hdr *header)
+			       struct ieee80211_hdr *header)
 {
 	u16 fc =3D le16_to_cpu(header->frame_control);
 	u16 sc =3D le16_to_cpu(header->seq_ctrl);
@@ -411,10 +411,10 @@ static bool AddReorderEntry(struct rx_ts_record
*ts,
 	while (pList->next !=3D &ts->rx_pending_pkt_list) {
 		if (SN_LESS(pReorderEntry->SeqNum, ((struct
rx_reorder_entry *)
 		    list_entry(pList->next, struct rx_reorder_entry,
-		    list))->SeqNum))
+			       list))->SeqNum))
 			pList =3D pList->next;
 		else if (SN_EQUAL(pReorderEntry->SeqNum,
-			((struct rx_reorder_entry *)list_entry(pList-
>next,
+				  ((struct rx_reorder_entry
*)list_entry(pList->next,
 			struct rx_reorder_entry, list))->SeqNum))
 			return false;
 		else
@@ -601,7 +601,7 @@ static void RxReorderIndicatePacket(struct
rtllib_device *ieee,
 		if (!list_empty(&ieee->RxReorder_Unused_List)) {
 			pReorderEntry =3D (struct rx_reorder_entry *)
 					list_entry(ieee-
>RxReorder_Unused_List.next,
-					struct rx_reorder_entry,
list);
+						   struct
rx_reorder_entry, list);
 			list_del_init(&pReorderEntry->list);
=20
 			/* Make a reorder entry and insert
@@ -738,7 +738,7 @@ static u8 parse_subframe(struct rtllib_device
*ieee, struct sk_buff *skb,
 	/* just for debug purpose */
 	SeqNum =3D WLAN_GET_SEQ_SEQ(le16_to_cpu(hdr->seq_ctrl));
 	if ((RTLLIB_QOS_HAS_SEQ(fc)) &&
-	   (((union frameqos *)(skb->data + RTLLIB_3ADDR_LEN))-
>field.reserved))
+	    (((union frameqos *)(skb->data + RTLLIB_3ADDR_LEN))-
>field.reserved))
 		is_aggregate_frame =3D true;
=20
 	if (RTLLIB_QOS_HAS_SEQ(fc))
@@ -880,7 +880,7 @@ static int rtllib_rx_check_duplicate(struct
rtllib_device *ieee,
 	frag =3D WLAN_GET_SEQ_FRAG(sc);
=20
 	if (!ieee->ht_info->cur_rx_reorder_enable ||
-		!ieee->current_network.qos_data.active ||
+	    !ieee->current_network.qos_data.active ||
 		!IsDataFrame(skb->data) ||
 		IsLegacyDataFrame(skb->data)) {
 		if (!ieee80211_is_beacon(hdr->frame_control)) {
@@ -980,7 +980,7 @@ static int rtllib_rx_data_filter(struct
rtllib_device *ieee, struct ieee80211_hd
 }
=20
 static int rtllib_rx_get_crypt(struct rtllib_device *ieee, struct
sk_buff *skb,
-			struct lib80211_crypt_data **crypt, size_t
hdrlen)
+			       struct lib80211_crypt_data **crypt,
size_t hdrlen)
 {
 	struct ieee80211_hdr *hdr =3D (struct ieee80211_hdr *)skb->data;
 	u16 fc =3D le16_to_cpu(hdr->frame_control);
@@ -1012,8 +1012,8 @@ static int rtllib_rx_get_crypt(struct
rtllib_device *ieee, struct sk_buff *skb,
 }
=20
 static int rtllib_rx_decrypt(struct rtllib_device *ieee, struct
sk_buff *skb,
-		      struct rtllib_rx_stats *rx_stats,
-		      struct lib80211_crypt_data *crypt, size_t
hdrlen)
+			     struct rtllib_rx_stats *rx_stats,
+			     struct lib80211_crypt_data *crypt, size_t
hdrlen)
 {
 	struct ieee80211_hdr *hdr;
 	int keyidx =3D 0;
@@ -1096,7 +1096,7 @@ static int rtllib_rx_decrypt(struct rtllib_device
*ieee, struct sk_buff *skb,
 	 * encrypted/authenticated
 	 */
 	if ((fc & IEEE80211_FCTL_PROTECTED) &&
-		rtllib_rx_frame_decrypt_msdu(ieee, skb, keyidx,
crypt)) {
+	    rtllib_rx_frame_decrypt_msdu(ieee, skb, keyidx, crypt)) {
 		netdev_info(ieee->dev, "%s: =3D=3D>decrypt msdu error\n",
__func__);
 		return -1;
 	}
@@ -1156,10 +1156,10 @@ static void rtllib_rx_check_leave_lps(struct
rtllib_device *ieee, u8 unicast,
 }
=20
 static void rtllib_rx_indicate_pkt_legacy(struct rtllib_device *ieee,
-		struct rtllib_rx_stats *rx_stats,
-		struct rtllib_rxb *rxb,
-		u8 *dst,
-		u8 *src)
+					  struct rtllib_rx_stats
*rx_stats,
+					  struct rtllib_rxb *rxb,
+					  u8 *dst,
+					  u8 *src)
 {
 	struct net_device *dev =3D ieee->dev;
 	u16 ethertype;
@@ -1179,8 +1179,8 @@ static void rtllib_rx_indicate_pkt_legacy(struct
rtllib_device *ieee,
 			 */
 			ethertype =3D (sub_skb->data[6] << 8) | sub_skb-
>data[7];
 			if (sub_skb->len >=3D 8 &&
-				((memcmp(sub_skb->data,
rfc1042_header, SNAP_SIZE) =3D=3D 0 &&
-				ethertype !=3D ETH_P_AARP && ethertype
!=3D ETH_P_IPX) ||
+			    ((memcmp(sub_skb->data, rfc1042_header,
SNAP_SIZE) =3D=3D 0 &&
+			      ethertype !=3D ETH_P_AARP && ethertype !=3D
ETH_P_IPX) ||
 				memcmp(sub_skb->data,
bridge_tunnel_header, SNAP_SIZE) =3D=3D 0)) {
 				/* remove RFC1042 or Bridge-Tunnel
encapsulation
 				 * and replace EtherType
@@ -1224,7 +1224,7 @@ static void rtllib_rx_indicate_pkt_legacy(struct
rtllib_device *ieee,
 }
=20
 static int rtllib_rx_InfraAdhoc(struct rtllib_device *ieee, struct
sk_buff *skb,
-		 struct rtllib_rx_stats *rx_stats)
+				struct rtllib_rx_stats *rx_stats)
 {
 	struct net_device *dev =3D ieee->dev;
 	struct ieee80211_hdr *hdr =3D (struct ieee80211_hdr *)skb->data;
@@ -1327,7 +1327,7 @@ static int rtllib_rx_InfraAdhoc(struct
rtllib_device *ieee, struct sk_buff *skb,
 		TID =3D Frame_QoSTID(skb->data);
 		SeqNum =3D WLAN_GET_SEQ_SEQ(sc);
 		rtllib_get_ts(ieee, (struct ts_common_info **)&ts,
hdr->addr2, TID,
-		      RX_DIR, true);
+			      RX_DIR, true);
 		if (TID !=3D 0 && TID !=3D 3)
 			ieee->bis_any_nonbepkts =3D true;
 	}
@@ -1384,7 +1384,7 @@ static int rtllib_rx_InfraAdhoc(struct
rtllib_device *ieee, struct sk_buff *skb,
 }
=20
 static int rtllib_rx_Monitor(struct rtllib_device *ieee, struct
sk_buff *skb,
-		 struct rtllib_rx_stats *rx_stats)
+			     struct rtllib_rx_stats *rx_stats)
 {
 	struct ieee80211_hdr *hdr =3D (struct ieee80211_hdr *)skb->data;
 	u16 fc =3D le16_to_cpu(hdr->frame_control);
@@ -1416,7 +1416,7 @@ static int rtllib_rx_Monitor(struct rtllib_device
*ieee, struct sk_buff *skb,
  * This function is called only as a tasklet (software IRQ).
  */
 int rtllib_rx(struct rtllib_device *ieee, struct sk_buff *skb,
-		 struct rtllib_rx_stats *rx_stats)
+	      struct rtllib_rx_stats *rx_stats)
 {
 	int ret =3D 0;
=20
@@ -1581,10 +1581,10 @@ static int
rtllib_parse_qos_info_param_IE(struct rtllib_device *ieee,
 		struct rtllib_qos_parameter_info param_element;
=20
 		rc =3D rtllib_read_qos_param_element(&param_element,
-						      info_element);
+						   info_element);
 		if (rc =3D=3D 0) {
			rtllib_qos_convert_ac_to_parameters(&param_element,
-							     =20
&(network->qos_data));
+							    &(network-
>qos_data));
 			network->flags |=3D NETWORK_HAS_QOS_PARAMETERS;
 			network->qos_data.param_count =3D
 			    param_element.info_element.ac_info & 0x0F;
@@ -1698,7 +1698,7 @@ static void rtllib_parse_mife_generic(struct
rtllib_device *ieee,
 			if (*tmp_htcap_len !=3D 0) {
 				network->bssht.bd_ht_spec_ver =3D
HT_SPEC_VER_EWC;
 				network->bssht.bd_ht_cap_len =3D
min_t(u16, *tmp_htcap_len,
-								=20
sizeof(network->bssht.bd_ht_cap_buf));
+							    =20
sizeof(network->bssht.bd_ht_cap_buf));
 				memcpy(network->bssht.bd_ht_cap_buf,
 				       info_element->data,
 				       network->bssht.bd_ht_cap_len);
@@ -1868,7 +1868,7 @@ static void rtllib_parse_mfie_ht_cap(struct
rtllib_info_element *info_element,
 	if (*tmp_htcap_len !=3D 0) {
 		ht->bd_ht_spec_ver =3D HT_SPEC_VER_EWC;
 		ht->bd_ht_cap_len =3D min_t(u16, *tmp_htcap_len,
-				       sizeof(ht->bd_ht_cap_buf));
+					  sizeof(ht->bd_ht_cap_buf));
 		memcpy(ht->bd_ht_cap_buf, info_element->data, ht-
>bd_ht_cap_len);
=20
 		ht->bd_support_ht =3D true;
@@ -1886,10 +1886,10 @@ static void rtllib_parse_mfie_ht_cap(struct
rtllib_info_element *info_element,
 }
=20
 int rtllib_parse_info_param(struct rtllib_device *ieee,
-		struct rtllib_info_element *info_element,
-		u16 length,
-		struct rtllib_network *network,
-		struct rtllib_rx_stats *stats)
+			    struct rtllib_info_element *info_element,
+			    u16 length,
+			    struct rtllib_network *network,
+			    struct rtllib_rx_stats *stats)
 {
 	u8 i;
 	short offset;
@@ -1914,7 +1914,7 @@ int rtllib_parse_info_param(struct rtllib_device
*ieee,
 		switch (info_element->id) {
 		case MFIE_TYPE_SSID:
 			if (rtllib_is_empty_essid(info_element->data,
-						     info_element-
>len)) {
+						  info_element->len))
{
 				network->flags |=3D NETWORK_EMPTY_ESSID;
 				break;
 			}
@@ -2193,10 +2193,10 @@ static inline int rtllib_network_init(
 	network->wzc_ie_len =3D 0;
=20
 	if (rtllib_parse_info_param(ieee,
-			beacon->info_element,
-			(stats->len - sizeof(*beacon)),
-			network,
-			stats))
+				    beacon->info_element,
+				    (stats->len - sizeof(*beacon)),
+				    network,
+				    stats))
 		return 1;
=20
 	network->mode =3D 0;
@@ -2333,9 +2333,9 @@ static inline void update_network(struct
rtllib_device *ieee,
=20
 	dst->wmm_info =3D src->wmm_info;
 	if (src->wmm_param[0].ac_aci_acm_aifsn ||
-	   src->wmm_param[1].ac_aci_acm_aifsn ||
-	   src->wmm_param[2].ac_aci_acm_aifsn ||
-	   src->wmm_param[3].ac_aci_acm_aifsn)
+	    src->wmm_param[1].ac_aci_acm_aifsn ||
+	    src->wmm_param[2].ac_aci_acm_aifsn ||
+	    src->wmm_param[3].ac_aci_acm_aifsn)
 		memcpy(dst->wmm_param, src->wmm_param,
WME_AC_PRAM_LEN);
=20
 	dst->SignalStrength =3D src->SignalStrength;
@@ -2454,7 +2454,7 @@ static inline void rtllib_process_probe_response(
=20
 	spin_lock_irqsave(&ieee->lock, flags);
 	if (is_same_network(&ieee->current_network, network,
-	   (network->ssid_len ? 1 : 0))) {
+			    (network->ssid_len ? 1 : 0))) {
 		update_network(ieee, &ieee->current_network, network);
 		if ((ieee->current_network.mode =3D=3D WIRELESS_MODE_N_24G
||
 		     ieee->current_network.mode =3D=3D WIRELESS_MODE_G) &&
@@ -2471,7 +2471,7 @@ static inline void rtllib_process_probe_response(
 	}
 	list_for_each_entry(target, &ieee->network_list, list) {
 		if (is_same_network(target, network,
-		   (target->ssid_len ? 1 : 0)))
+				    (target->ssid_len ? 1 : 0)))
 			break;
 		if (!oldest || (target->last_scanned < oldest-
>last_scanned))
 			oldest =3D target;
@@ -2532,7 +2532,7 @@ static inline void rtllib_process_probe_response(
 	spin_unlock_irqrestore(&ieee->lock, flags);
 	if (ieee80211_is_beacon(frame_ctl) &&
 	    is_same_network(&ieee->current_network, network,
-	    (network->ssid_len ? 1 : 0)) &&
+			    (network->ssid_len ? 1 : 0)) &&
 	    (ieee->link_state =3D=3D MAC80211_LINKED)) {
 		ieee->handle_beacon(ieee->dev, beacon, &ieee-
>current_network);
 	}
@@ -2557,8 +2557,8 @@ static void rtllib_rx_mgt(struct rtllib_device
*ieee,
 				stats);
=20
 		if (ieee->sta_sleep || (ieee->ps !=3D RTLLIB_PS_DISABLED
&&
-		    ieee->iw_mode =3D=3D IW_MODE_INFRA &&
-		    ieee->link_state =3D=3D MAC80211_LINKED))
+					ieee->iw_mode =3D=3D IW_MODE_INFRA
&&
+					ieee->link_state =3D=3D
MAC80211_LINKED))
 			schedule_work(&ieee->ps_task);
 	} else if (ieee80211_is_probe_resp(header->frame_control)) {
 		netdev_dbg(ieee->dev, "received PROBE RESPONSE\n");
--=20
2.44.2


.

Message-ID: <CWLP265MB651697C43A8A396DE8989CD8FDD52@CWLP265MB6516.GBRP265.PROD.OUTLOOK.COM>
Subject: [PATCH] Staging: rtl8192e: rtllib_rx: fixed alignment
From: Yusef Aslam <yuzi54780@outlook.com>
To: gregkh@linuxfoundation.org
Cc: linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org
Date: Tue, 25 Jun 2024 16:28:38 +0100
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258387
Newsgroups: org.kernel.vger.linux-kernel,dev.linux.lists.linux-staging
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

From 3acc0622bca28c1a00696e7abd7c305ca5ad1f72 Mon Sep 17 00:00:00 2001
From: Yusef Aslam <YUZi54780@outlook.com>
Date: Tue, 25 Jun 2024 15:03:08 +0100
Subject: [PATCH] Staging: rtl8192e: rtllib_rx: fixed alignment

Fixed alignment.

Signed-off-by: Yusef Aslam <YUZi54780@outlook.com>
---
 drivers/staging/rtl8192e/rtllib_rx.c | 98 ++++++++++++++--------------
 1 file changed, 49 insertions(+), 49 deletions(-)

diff --git a/drivers/staging/rtl8192e/rtllib_rx.c
b/drivers/staging/rtl8192e/rtllib_rx.c
index ebf8a2fd36d3..b1a476e29670 100644
--- a/drivers/staging/rtl8192e/rtllib_rx.c
+++ b/drivers/staging/rtl8192e/rtllib_rx.c
@@ -55,7 +55,7 @@ static inline void rtllib_monitor_rx(struct
rtllib_device *ieee,
 /* Called only as a tasklet (software IRQ) */
 static struct rtllib_frag_entry *
 rtllib_frag_cache_find(struct rtllib_device *ieee, unsigned int seq,
-			  unsigned int frag, u8 tid, u8 *src, u8 *dst)
+		       unsigned int frag, u8 tid, u8 *src, u8 *dst)
 {
 	struct rtllib_frag_entry *entry;
 	int i;
@@ -84,7 +84,7 @@ rtllib_frag_cache_find(struct rtllib_device *ieee,
unsigned int seq,
 /* Called only as a tasklet (software IRQ) */
 static struct sk_buff *
 rtllib_frag_cache_get(struct rtllib_device *ieee,
-			 struct ieee80211_hdr *hdr)
+		      struct ieee80211_hdr *hdr)
 {
 	struct sk_buff *skb =3D NULL;
 	u16 fc =3D le16_to_cpu(hdr->frame_control);
@@ -143,7 +143,7 @@ rtllib_frag_cache_get(struct rtllib_device *ieee,
 		 * should have already been received
 		 */
 		entry =3D rtllib_frag_cache_find(ieee, seq, frag, tid,
hdr->addr2,
-						  hdr->addr1);
+					       hdr->addr1);
 		if (entry) {
 			entry->last_frag =3D frag;
 			skb =3D entry->skb;
@@ -155,7 +155,7 @@ rtllib_frag_cache_get(struct rtllib_device *ieee,
=20
 /* Called only as a tasklet (software IRQ) */
 static int rtllib_frag_cache_invalidate(struct rtllib_device *ieee,
-					   struct ieee80211_hdr *hdr)
+					struct ieee80211_hdr *hdr)
 {
 	u16 fc =3D le16_to_cpu(hdr->frame_control);
 	u16 sc =3D le16_to_cpu(hdr->seq_ctrl);
@@ -181,7 +181,7 @@ static int rtllib_frag_cache_invalidate(struct
rtllib_device *ieee,
 	}
=20
 	entry =3D rtllib_frag_cache_find(ieee, seq, -1, tid, hdr->addr2,
-					  hdr->addr1);
+				       hdr->addr1);
=20
 	if (!entry) {
 		netdev_dbg(ieee->dev,
@@ -202,8 +202,8 @@ static int rtllib_frag_cache_invalidate(struct
rtllib_device *ieee,
  */
 static inline int
 rtllib_rx_frame_mgmt(struct rtllib_device *ieee, struct sk_buff *skb,
-			struct rtllib_rx_stats *rx_stats, u16 type,
-			u16 stype)
+		     struct rtllib_rx_stats *rx_stats, u16 type,
+		     u16 stype)
 {
 	/* On the struct stats definition there is written that
 	 * this is not mandatory.... but seems that the probe
@@ -228,7 +228,7 @@ rtllib_rx_frame_mgmt(struct rtllib_device *ieee,
struct sk_buff *skb,
=20
 /* Called by rtllib_rx_frame_decrypt */
 static int rtllib_is_eapol_frame(struct rtllib_device *ieee,
-				    struct sk_buff *skb, size_t
hdrlen)
+				 struct sk_buff *skb, size_t hdrlen)
 {
 	struct net_device *dev =3D ieee->dev;
 	u16 fc, ethertype;
@@ -346,7 +346,7 @@ rtllib_rx_frame_decrypt_msdu(struct rtllib_device
*ieee, struct sk_buff *skb,
 /* this function is stolen from ipw2200 driver*/
 #define IEEE_PACKET_RETRY_TIME (5 * HZ)
 static int is_duplicate_packet(struct rtllib_device *ieee,
-				      struct ieee80211_hdr *header)
+			       struct ieee80211_hdr *header)
 {
 	u16 fc =3D le16_to_cpu(header->frame_control);
 	u16 sc =3D le16_to_cpu(header->seq_ctrl);
@@ -411,10 +411,10 @@ static bool AddReorderEntry(struct rx_ts_record
*ts,
 	while (pList->next !=3D &ts->rx_pending_pkt_list) {
 		if (SN_LESS(pReorderEntry->SeqNum, ((struct
rx_reorder_entry *)
 		    list_entry(pList->next, struct rx_reorder_entry,
-		    list))->SeqNum))
+			       list))->SeqNum))
 			pList =3D pList->next;
 		else if (SN_EQUAL(pReorderEntry->SeqNum,
-			((struct rx_reorder_entry *)list_entry(pList-
>next,
+				  ((struct rx_reorder_entry
*)list_entry(pList->next,
 			struct rx_reorder_entry, list))->SeqNum))
 			return false;
 		else
@@ -601,7 +601,7 @@ static void RxReorderIndicatePacket(struct
rtllib_device *ieee,
 		if (!list_empty(&ieee->RxReorder_Unused_List)) {
 			pReorderEntry =3D (struct rx_reorder_entry *)
 					list_entry(ieee-
>RxReorder_Unused_List.next,
-					struct rx_reorder_entry,
list);
+						   struct
rx_reorder_entry, list);
 			list_del_init(&pReorderEntry->list);
=20
 			/* Make a reorder entry and insert
@@ -738,7 +738,7 @@ static u8 parse_subframe(struct rtllib_device
*ieee, struct sk_buff *skb,
 	/* just for debug purpose */
 	SeqNum =3D WLAN_GET_SEQ_SEQ(le16_to_cpu(hdr->seq_ctrl));
 	if ((RTLLIB_QOS_HAS_SEQ(fc)) &&
-	   (((union frameqos *)(skb->data + RTLLIB_3ADDR_LEN))-
>field.reserved))
+	    (((union frameqos *)(skb->data + RTLLIB_3ADDR_LEN))-
>field.reserved))
 		is_aggregate_frame =3D true;
=20
 	if (RTLLIB_QOS_HAS_SEQ(fc))
@@ -880,7 +880,7 @@ static int rtllib_rx_check_duplicate(struct
rtllib_device *ieee,
 	frag =3D WLAN_GET_SEQ_FRAG(sc);
=20
 	if (!ieee->ht_info->cur_rx_reorder_enable ||
-		!ieee->current_network.qos_data.active ||
+	    !ieee->current_network.qos_data.active ||
 		!IsDataFrame(skb->data) ||
 		IsLegacyDataFrame(skb->data)) {
 		if (!ieee80211_is_beacon(hdr->frame_control)) {
@@ -980,7 +980,7 @@ static int rtllib_rx_data_filter(struct
rtllib_device *ieee, struct ieee80211_hd
 }
=20
 static int rtllib_rx_get_crypt(struct rtllib_device *ieee, struct
sk_buff *skb,
-			struct lib80211_crypt_data **crypt, size_t
hdrlen)
+			       struct lib80211_crypt_data **crypt,
size_t hdrlen)
 {
 	struct ieee80211_hdr *hdr =3D (struct ieee80211_hdr *)skb->data;
 	u16 fc =3D le16_to_cpu(hdr->frame_control);
@@ -1012,8 +1012,8 @@ static int rtllib_rx_get_crypt(struct
rtllib_device *ieee, struct sk_buff *skb,
 }
=20
 static int rtllib_rx_decrypt(struct rtllib_device *ieee, struct
sk_buff *skb,
-		      struct rtllib_rx_stats *rx_stats,
-		      struct lib80211_crypt_data *crypt, size_t
hdrlen)
+			     struct rtllib_rx_stats *rx_stats,
+			     struct lib80211_crypt_data *crypt, size_t
hdrlen)
 {
 	struct ieee80211_hdr *hdr;
 	int keyidx =3D 0;
@@ -1096,7 +1096,7 @@ static int rtllib_rx_decrypt(struct rtllib_device
*ieee, struct sk_buff *skb,
 	 * encrypted/authenticated
 	 */
 	if ((fc & IEEE80211_FCTL_PROTECTED) &&
-		rtllib_rx_frame_decrypt_msdu(ieee, skb, keyidx,
crypt)) {
+	    rtllib_rx_frame_decrypt_msdu(ieee, skb, keyidx, crypt)) {
 		netdev_info(ieee->dev, "%s: =3D=3D>decrypt msdu error\n",
__func__);
 		return -1;
 	}
@@ -1156,10 +1156,10 @@ static void rtllib_rx_check_leave_lps(struct
rtllib_device *ieee, u8 unicast,
 }
=20
 static void rtllib_rx_indicate_pkt_legacy(struct rtllib_device *ieee,
-		struct rtllib_rx_stats *rx_stats,
-		struct rtllib_rxb *rxb,
-		u8 *dst,
-		u8 *src)
+					  struct rtllib_rx_stats
*rx_stats,
+					  struct rtllib_rxb *rxb,
+					  u8 *dst,
+					  u8 *src)
 {
 	struct net_device *dev =3D ieee->dev;
 	u16 ethertype;
@@ -1179,8 +1179,8 @@ static void rtllib_rx_indicate_pkt_legacy(struct
rtllib_device *ieee,
 			 */
 			ethertype =3D (sub_skb->data[6] << 8) | sub_skb-
>data[7];
 			if (sub_skb->len >=3D 8 &&
-				((memcmp(sub_skb->data,
rfc1042_header, SNAP_SIZE) =3D=3D 0 &&
-				ethertype !=3D ETH_P_AARP && ethertype
!=3D ETH_P_IPX) ||
+			    ((memcmp(sub_skb->data, rfc1042_header,
SNAP_SIZE) =3D=3D 0 &&
+			      ethertype !=3D ETH_P_AARP && ethertype !=3D
ETH_P_IPX) ||
 				memcmp(sub_skb->data,
bridge_tunnel_header, SNAP_SIZE) =3D=3D 0)) {
 				/* remove RFC1042 or Bridge-Tunnel
encapsulation
 				 * and replace EtherType
@@ -1224,7 +1224,7 @@ static void rtllib_rx_indicate_pkt_legacy(struct
rtllib_device *ieee,
 }
=20
 static int rtllib_rx_InfraAdhoc(struct rtllib_device *ieee, struct
sk_buff *skb,
-		 struct rtllib_rx_stats *rx_stats)
+				struct rtllib_rx_stats *rx_stats)
 {
 	struct net_device *dev =3D ieee->dev;
 	struct ieee80211_hdr *hdr =3D (struct ieee80211_hdr *)skb->data;
@@ -1327,7 +1327,7 @@ static int rtllib_rx_InfraAdhoc(struct
rtllib_device *ieee, struct sk_buff *skb,
 		TID =3D Frame_QoSTID(skb->data);
 		SeqNum =3D WLAN_GET_SEQ_SEQ(sc);
 		rtllib_get_ts(ieee, (struct ts_common_info **)&ts,
hdr->addr2, TID,
-		      RX_DIR, true);
+			      RX_DIR, true);
 		if (TID !=3D 0 && TID !=3D 3)
 			ieee->bis_any_nonbepkts =3D true;
 	}
@@ -1384,7 +1384,7 @@ static int rtllib_rx_InfraAdhoc(struct
rtllib_device *ieee, struct sk_buff *skb,
 }
=20
 static int rtllib_rx_Monitor(struct rtllib_device *ieee, struct
sk_buff *skb,
-		 struct rtllib_rx_stats *rx_stats)
+			     struct rtllib_rx_stats *rx_stats)
 {
 	struct ieee80211_hdr *hdr =3D (struct ieee80211_hdr *)skb->data;
 	u16 fc =3D le16_to_cpu(hdr->frame_control);
@@ -1416,7 +1416,7 @@ static int rtllib_rx_Monitor(struct rtllib_device
*ieee, struct sk_buff *skb,
  * This function is called only as a tasklet (software IRQ).
  */
 int rtllib_rx(struct rtllib_device *ieee, struct sk_buff *skb,
-		 struct rtllib_rx_stats *rx_stats)
+	      struct rtllib_rx_stats *rx_stats)
 {
 	int ret =3D 0;
=20
@@ -1581,10 +1581,10 @@ static int
rtllib_parse_qos_info_param_IE(struct rtllib_device *ieee,
 		struct rtllib_qos_parameter_info param_element;
=20
 		rc =3D rtllib_read_qos_param_element(&param_element,
-						      info_element);
+						   info_element);
 		if (rc =3D=3D 0) {
			rtllib_qos_convert_ac_to_parameters(&param_element,
-							     =20
&(network->qos_data));
+							    &(network-
>qos_data));
 			network->flags |=3D NETWORK_HAS_QOS_PARAMETERS;
 			network->qos_data.param_count =3D
 			    param_element.info_element.ac_info & 0x0F;
@@ -1698,7 +1698,7 @@ static void rtllib_parse_mife_generic(struct
rtllib_device *ieee,
 			if (*tmp_htcap_len !=3D 0) {
 				network->bssht.bd_ht_spec_ver =3D
HT_SPEC_VER_EWC;
 				network->bssht.bd_ht_cap_len =3D
min_t(u16, *tmp_htcap_len,
-								=20
sizeof(network->bssht.bd_ht_cap_buf));
+							    =20
sizeof(network->bssht.bd_ht_cap_buf));
 				memcpy(network->bssht.bd_ht_cap_buf,
 				       info_element->data,
 				       network->bssht.bd_ht_cap_len);
@@ -1868,7 +1868,7 @@ static void rtllib_parse_mfie_ht_cap(struct
rtllib_info_element *info_element,
 	if (*tmp_htcap_len !=3D 0) {
 		ht->bd_ht_spec_ver =3D HT_SPEC_VER_EWC;
 		ht->bd_ht_cap_len =3D min_t(u16, *tmp_htcap_len,
-				       sizeof(ht->bd_ht_cap_buf));
+					  sizeof(ht->bd_ht_cap_buf));
 		memcpy(ht->bd_ht_cap_buf, info_element->data, ht-
>bd_ht_cap_len);
=20
 		ht->bd_support_ht =3D true;
@@ -1886,10 +1886,10 @@ static void rtllib_parse_mfie_ht_cap(struct
rtllib_info_element *info_element,
 }
=20
 int rtllib_parse_info_param(struct rtllib_device *ieee,
-		struct rtllib_info_element *info_element,
-		u16 length,
-		struct rtllib_network *network,
-		struct rtllib_rx_stats *stats)
+			    struct rtllib_info_element *info_element,
+			    u16 length,
+			    struct rtllib_network *network,
+			    struct rtllib_rx_stats *stats)
 {
 	u8 i;
 	short offset;
@@ -1914,7 +1914,7 @@ int rtllib_parse_info_param(struct rtllib_device
*ieee,
 		switch (info_element->id) {
 		case MFIE_TYPE_SSID:
 			if (rtllib_is_empty_essid(info_element->data,
-						     info_element-
>len)) {
+						  info_element->len))
{
 				network->flags |=3D NETWORK_EMPTY_ESSID;
 				break;
 			}
@@ -2193,10 +2193,10 @@ static inline int rtllib_network_init(
 	network->wzc_ie_len =3D 0;
=20
 	if (rtllib_parse_info_param(ieee,
-			beacon->info_element,
-			(stats->len - sizeof(*beacon)),
-			network,
-			stats))
+				    beacon->info_element,
+				    (stats->len - sizeof(*beacon)),
+				    network,
+				    stats))
 		return 1;
=20
 	network->mode =3D 0;
@@ -2333,9 +2333,9 @@ static inline void update_network(struct
rtllib_device *ieee,
=20
 	dst->wmm_info =3D src->wmm_info;
 	if (src->wmm_param[0].ac_aci_acm_aifsn ||
-	   src->wmm_param[1].ac_aci_acm_aifsn ||
-	   src->wmm_param[2].ac_aci_acm_aifsn ||
-	   src->wmm_param[3].ac_aci_acm_aifsn)
+	    src->wmm_param[1].ac_aci_acm_aifsn ||
+	    src->wmm_param[2].ac_aci_acm_aifsn ||
+	    src->wmm_param[3].ac_aci_acm_aifsn)
 		memcpy(dst->wmm_param, src->wmm_param,
WME_AC_PRAM_LEN);
=20
 	dst->SignalStrength =3D src->SignalStrength;
@@ -2454,7 +2454,7 @@ static inline void rtllib_process_probe_response(
=20
 	spin_lock_irqsave(&ieee->lock, flags);
 	if (is_same_network(&ieee->current_network, network,
-	   (network->ssid_len ? 1 : 0))) {
+			    (network->ssid_len ? 1 : 0))) {
 		update_network(ieee, &ieee->current_network, network);
 		if ((ieee->current_network.mode =3D=3D WIRELESS_MODE_N_24G
||
 		     ieee->current_network.mode =3D=3D WIRELESS_MODE_G) &&
@@ -2471,7 +2471,7 @@ static inline void rtllib_process_probe_response(
 	}
 	list_for_each_entry(target, &ieee->network_list, list) {
 		if (is_same_network(target, network,
-		   (target->ssid_len ? 1 : 0)))
+				    (target->ssid_len ? 1 : 0)))
 			break;
 		if (!oldest || (target->last_scanned < oldest-
>last_scanned))
 			oldest =3D target;
@@ -2532,7 +2532,7 @@ static inline void rtllib_process_probe_response(
 	spin_unlock_irqrestore(&ieee->lock, flags);
 	if (ieee80211_is_beacon(frame_ctl) &&
 	    is_same_network(&ieee->current_network, network,
-	    (network->ssid_len ? 1 : 0)) &&
+			    (network->ssid_len ? 1 : 0)) &&
 	    (ieee->link_state =3D=3D MAC80211_LINKED)) {
 		ieee->handle_beacon(ieee->dev, beacon, &ieee-
>current_network);
 	}
@@ -2557,8 +2557,8 @@ static void rtllib_rx_mgt(struct rtllib_device
*ieee,
 				stats);
=20
 		if (ieee->sta_sleep || (ieee->ps !=3D RTLLIB_PS_DISABLED
&&
-		    ieee->iw_mode =3D=3D IW_MODE_INFRA &&
-		    ieee->link_state =3D=3D MAC80211_LINKED))
+					ieee->iw_mode =3D=3D IW_MODE_INFRA
&&
+					ieee->link_state =3D=3D
MAC80211_LINKED))
 			schedule_work(&ieee->ps_task);
 	} else if (ieee80211_is_probe_resp(header->frame_control)) {
 		netdev_dbg(ieee->dev, "received PROBE RESPONSE\n");
--=20
2.44.2


.

From: MD Danish Anwar <danishanwar@ti.com>
To: Suman Anna <s-anna@ti.com>, Conor Dooley <conor+dt@kernel.org>,
        Krzysztof
 Kozlowski <krzk+dt@kernel.org>,
        Rob Herring <robh@kernel.org>,
        Santosh
 Shilimkar <ssantosh@kernel.org>, Nishanth Menon <nm@ti.com>
CC: <devicetree@vger.kernel.org>, <linux-arm-kernel@lists.infradead.org>,
        <linux-kernel@vger.kernel.org>, <srk@ti.com>,
        Vignesh Raghavendra
	<vigneshr@ti.com>,
        Roger Quadros <rogerq@kernel.org>,
        MD Danish Anwar
	<danishanwar@ti.com>
Subject: [PATCH v3 0/2] Add documentation for PA_STATS and MAINTAINERS entry for ti,pruss.yaml
Date: Tue, 25 Jun 2024 21:03:14 +0530
Message-ID: <20240625153319.795665-1-danishanwar@ti.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258393
Newsgroups: org.kernel.vger.linux-kernel,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-devicetree
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Hi,

This series adds documentation for PA_STATS in dt-bindings file ti,pruss.yaml.
This bindings file doesn't have a MAINTAINERS entry. This series add the
MAINTAINERS entry for this file as well.

Changes since v2:
*) Added RB tag of Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> to
   patch 2/2
*) Added patch 1/2 to the series as the binding file is orphan.

v2 https://lore.kernel.org/all/20240529115149.630273-1-danishanwar@ti.com/

MD Danish Anwar (2):
  MAINTAINERS: Add entry for ti,pruss.yaml to TI KEYSTONE MULTICORE
    NAVIGATOR DRIVERS
  dt-bindings: soc: ti: pruss: Add documentation for PA_STATS support

 .../devicetree/bindings/soc/ti/ti,pruss.yaml  | 20 +++++++++++++++++++
 MAINTAINERS                                   |  1 +
 2 files changed, 21 insertions(+)


base-commit: 62c97045b8f720c2eac807a5f38e26c9ed512371
-- 
2.34.1

.

From: Anand Moon <linux.amoon@gmail.com>
To: Lorenzo Pieralisi <lpieralisi@kernel.org>,
	=?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= <kw@linux.com>,
	Rob Herring <robh@kernel.org>,
	Bjorn Helgaas <bhelgaas@google.com>,
	Heiko Stuebner <heiko@sntech.de>
Cc: Anand Moon <linux.amoon@gmail.com>,
	linux-pci@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-rockchip@lists.infradead.org,
	linux-kernel@vger.kernel.org
Subject: [PATCH linu-next v1] PCI: dw-rockchip: Enable async probe by default
Date: Tue, 25 Jun 2024 21:27:57 +0530
Message-ID: <20240625155759.132878-1-linux.amoon@gmail.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258421 org.kernel.vger.linux-pci:144464
Newsgroups: org.kernel.vger.linux-kernel,org.infradead.lists.linux-arm-kernel,org.infradead.lists.linux-rockchip,org.kernel.vger.linux-pci
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Rockchip PCIe driver lets waits for the combo PHY link like PCIe 3.0,
PCIe 2.0 and SATA 3.0 controller to be up during the probe this
consumes several milliseconds during boot.

Establishing a PCIe link can take a while; allow asynchronous probing so
that link establishment can happen in the background while other devices
are being probed.

Signed-off-by: Anand Moon <linux.amoon@gmail.com>
---
 drivers/pci/controller/dwc/pcie-dw-rockchip.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/pci/controller/dwc/pcie-dw-rockchip.c b/drivers/pci/controller/dwc/pcie-dw-rockchip.c
index 61b1acba7182..74a3e9d172a0 100644
--- a/drivers/pci/controller/dwc/pcie-dw-rockchip.c
+++ b/drivers/pci/controller/dwc/pcie-dw-rockchip.c
@@ -367,6 +367,7 @@ static struct platform_driver rockchip_pcie_driver = {
 		.name	= "rockchip-dw-pcie",
 		.of_match_table = rockchip_pcie_of_match,
 		.suppress_bind_attrs = true,
+		.probe_type = PROBE_PREFER_ASYNCHRONOUS,
 	},
 	.probe = rockchip_pcie_probe,
 };
-- 
2.44.0

.

From: Yasin Lee <yasin.lee.x@gmail.com>
Subject: [PATCH v8 0/3] iio: proximity: Add TYHX HX9023S sensor driver
Date: Tue, 25 Jun 2024 23:58:51 +0800
Message-Id: <20240625-add-tyhx-hx9023s-sensor-driver-v8-0-0c224e3bddbc@gmail.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
To: Rob Herring <robh@kernel.org>, Krzysztof Kozlowski <krzk+dt@kernel.org>, 
 Conor Dooley <conor+dt@kernel.org>, Jonathan Cameron <jic23@kernel.org>, 
 Lars-Peter Clausen <lars@metafoo.de>, yasin.lee.x@outlook.com
Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, 
 linux-iio@vger.kernel.org, Yasin Lee <yasin.lee.x@gmail.com>, 
 Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258424
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-iio
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Signed-off-by: Yasin Lee <yasin.lee.x@gmail.com>
---
Changes in v8:
- Removed incorrect tags from the commit messages 
- Removed duplicate properties in the dt-binding.
- Link to v7: https://lore.kernel.org/r/20240625-add-tyhx-hx9023s-sensor-driver-v7-0-b1d65b221811@gmail.com

Changes in v7:

**tyhx,hx9023s.yaml:**

- Removed the unused reference to iio.yaml
- Removed the `input-channel` property and switched to inheriting the `single-channel` property from adc.yaml
- Sorted the items in the `required` list

**hx9023s.c:**

- Header Files Section:
  - Added `<linux/cleanup.h>`
  - Removed `<linux/delay.h>`
  - Replaced `<linux/math.h>` with `<linux/math64.h>`
- Register Initialization:
  - Deleted the `struct hx9023s_addr_val_pair`
  - Changed the type of `hx9023s_reg_init_list` to `struct reg_sequence`
  - Deleted the `hx9023s_reg_init` function and used `regmap_multi_reg_write` for register initialization in `probe`
- struct hx9023s_ch_data:
  - Added a comment to the member `mutex` explaining the data it protects
- Function hx9023s_sample:
  - Fixed the error related to `hx9023s_data_lock` calls
- Function hx9023s_property_get:
  - Added boundary protection for `reg`
- Function hx9023s_id_check:
  - Optimized the function
- Function hx9023s_probe:
  - Changed the call to `devm_iio_device_register` to `return devm_iio_device_register()`
- Functions hx9023s_suspend and hx9023s_resume:
  - Added `guard(mutex)(&data->mutex)`
- Code Check:
  - Ran `checkpatch.pl --strict` and fixed the identified issues
- Link to v6: https://lore.kernel.org/r/20240621-add-tyhx-hx9023s-sensor-driver-v6-0-65196a9020f1@gmail.com

Changes in v6:

**vendor-prefixes.yaml:**

- Formatted the description in the commit

**tyhx,hx9023s.yaml:**

- Added a link to the DataSheet
- Added `#address-cells` and `#size-cells`
- Removed the following properties:
  - `channel-in-use`
  - `channel-positive`
  - `channel-negative`
- Corrected the reference path to `adc.yaml`
- Inherited `diff-channels` from `adc.yaml` as differential channels
- Added `input-channel` property as a single-ended configuration channel
- Made `vdd-supply` a required option
- Used the generic name `proximity` instead of the chip name in the DTS example

**hx9023s.c:**

- Removed the following headers:
  - `#include <linux/acpi.h>`
  - `#include <linux/byteorder/generic.h>`
  - `#include <linux/kernel.h>`
- Added `#include <asm/byteorder.h>`
- Updated some macro names:
  - `HX9023S_DATA_2BYTES` ---> `HX9023S_2BYTES`
  - `HX9023S_DATA_3BYTES` ---> `HX9023S_3BYTES`
  - `HX9023S_DATA_BYTES_MAX` ---> `HX9023S_BYTES_MAX`
- Added the following macro definitions:
  - `#define HX9023S_POS 0x03`
  - `#define HX9023S_NEG 0x02`
  - `#define HX9023S_NOT_CONNECTED 16`
  - `#define HX9023S_GLOBAL_CTRL0 0x00`
- `struct hx9023s_ch_data`:
  - Added comments explaining the members `raw`, `lp`, `bl`, `diff`
  - Changed the type of struct member `thre` from `int` to `unsigned int`
  - Removed member `cs_position`
  - Changed the type of `struct buffer` member `channels[HX9023S_CH_NUM]` from `__be16` to `__le16`
  - Moved `struct hx9023s_ch_data ch_data` to the bottom
- Updated comments in the array `hx9023s_reg_init_list`:
  - Changed `adc` to `ADC`, `avg` to `average`, and `osr` to `OSR`
  - Provided a more detailed comment for the register `HX9023S_RAW_BL_RD_CFG`
- `struct regmap_config hx9023s_regmap_config`:
  - Added `.rd_type` member
  - Changed `.cache_type` from `REGCACHE_RBTREE` to `REGCACHE_MAPLE`
- Bugfix: The function `hx9023s_data_lock` now only operates on one bit instead of two
- `hx9023s_ch_cfg` function:
  - Replaced magic characters with meaningful macro definitions
  - Changed byte concatenation operations to use `put_unaligned_le16`
- Reviewed each function and made the following changes:
  - Some returns now directly return `regmap_read/write()`
  - For single-byte write operations, changed from `regmap_bulk_write(,,,1)` to `regmap_write(,,)`
  - Changed the type of loop variable `i` to `unsigned`
- `hx9023s_write_far_debounce` and `hx9023s_write_near_debounce` functions:
  - Removed magic numbers and optimized the code
- `hx9023s_get_thres_near` and `hx9023s_get_thres_far` functions:
  - Used intermediate variables for readability and simplified the code logic
- `hx9023s_set_thres_near` and `hx9023s_set_thres_far` functions:
  - Optimized the logic and simplified the code
- `hx9023s_get_prox_state` function:
  - Changed the return value type to `int`
- `hx9023s_data_select` function:
  - Changed the return value type to `int`
- `hx9023s_sample` function:
  - Added intermediate variables for better readability
- `hx9023s_ch_en` function:
  - Optimized the code logic to reduce line count
- `hx9023s_property_get` function:
  - Rewritten due to DTS changes, and calls `fwnode_handle_put` on error to prevent memory leaks
- `hx9023s_get_proximity` function:
  - Added error handling logic for data
- `hx9023s_get_samp_freq` function:
  - Used macro definitions from `units.h` instead of specific numbers for frequency calculation
- `hx9023s_set_samp_freq` function:
  - Used macro definitions from `units.h` instead of specific numbers for frequency calculation
- `hx9023s_write_raw` function:
  - Changed the type of local variable `dir` to `unsigned`
- `hx9023s_write_event_config` function:
  - Replaced `set_bit` and `clear_bit` with `__assign_bit`
- `hx9023s_trigger_handler` function:
  - Added error handling logic for data; fixed uninitialized variable `i` bug
- `hx9023s_buffer_preenable` function:
  - Fixed uninitialized variable `channel` bug
- Added `hx9023s_id_check` function
- `hx9023s_probe` function:
  - Returns directly on `devm_iio_device_alloc` error, without logging; removed `fsleep`
- `hx9023s_resume` function:
  - Calls `hx9023s_interrupt_enable` only when `data->trigger_enabled` is true
- Removed `hx9023s_acpi_match`
- Link to v5: https://lore.kernel.org/linux-iio/SN7PR12MB8101B6D0AB1246797C67E25BA4CE2@SN7PR12MB8101.namprd12.prod.outlook.com/

Changes in v5:
- I have addressed all the issues mentioned in the email responses.
  Additionally, regarding the IIO-related header files, I have checked and found no unused headers.
- Link to v4: https://lore.kernel.org/linux-iio/SN7PR12MB810129D8180B1C9593A8E078A4FB2@SN7PR12MB8101.namprd12.prod.outlook.com/

Changes in v4:
- Removed hardware-irrelevant properties from dt-bindings, retaining only channel configuration
  related `channel-positive` and `channel-negative`. Grouped by channel.
  Retained `channel-in-use` as it is hardware-related.
- Removed redundant register definitions.
- Reorganized `struct hx9023s_data`, extracting channel-related attributes
  into a new `struct hx9023s_ch_data`.
- Optimized bit operation related code.
- Replaced `of_` versions with generic firmware parsing functions.
- Fixed other issues mentioned in the email feedback.
- Link to v3: https://lore.kernel.org/linux-iio/20240602152638.2c674930@jic23-huawei/

---
Yasin Lee (3):
      dt-bindings: vendor-prefixes: add tyhx
      dt-bindings: iio: proximity: Add TYHX HX9023S
      iio: proximity: Add driver support for TYHX's HX9023S capacitive proximity sensor

 .../bindings/iio/proximity/tyhx,hx9023s.yaml       |   93 ++
 .../devicetree/bindings/vendor-prefixes.yaml       |    2 +
 drivers/iio/proximity/Kconfig                      |   14 +
 drivers/iio/proximity/Makefile                     |    1 +
 drivers/iio/proximity/hx9023s.c                    | 1131 ++++++++++++++++++++
 5 files changed, 1241 insertions(+)
---
base-commit: 1231e065edd236295c31904fe760117551608efa
change-id: 20240616-add-tyhx-hx9023s-sensor-driver-e7dbe3bfe596

Best regards,
-- 
Yasin Lee <yasin.lee.x@gmail.com>

.

Message-ID: <39ad29ec-6660-4c33-bd4f-78dbf339106a@gmx.de>
Date: Tue, 25 Jun 2024 18:05:24 +0200
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
From: Ronald Warsow <rwarsow@gmx.de>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>, stable@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Content-Language: de-DE, en-US
Subject: Re: [PATCH 6.9 000/250] 6.9.7-rc1 review
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258429
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.stable
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Hi Greg

no regressions here on x86_64 (RKL, Intel 11th Gen. CPU)

Thanks

Tested-by: Ronald Warsow <rwarsow@gmx.de>

.

From: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
To: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>,
	Banajit Goswami <bgoswami@quicinc.com>,
	Liam Girdwood <lgirdwood@gmail.com>,
	Mark Brown <broonie@kernel.org>,
	Jaroslav Kysela <perex@perex.cz>,
	Takashi Iwai <tiwai@suse.com>,
	alsa-devel@alsa-project.org,
	linux-arm-msm@vger.kernel.org,
	linux-sound@vger.kernel.org,
	linux-kernel@vger.kernel.org
Cc: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Subject: [PATCH] ASoC: codecs: lpass-rx-macro: add missing handling of v2.1 codec
Date: Tue, 25 Jun 2024 18:06:14 +0200
Message-ID: <20240625160614.450506-1-krzysztof.kozlowski@linaro.org>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258431
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-arm-msm,org.kernel.vger.linux-sound
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

We have also v2.1 version of the codec (see 'enum lpass_codec_version'),
so handle it as well in all switch cases.

Fixes: dbacef05898d ("ASoC: codec: lpass-rx-macro: prepare driver to accomdate new codec versions")
Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
---
 sound/soc/codecs/lpass-rx-macro.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/sound/soc/codecs/lpass-rx-macro.c b/sound/soc/codecs/lpass-rx-macro.c
index 00ecc470ba8b..1c3429f004ed 100644
--- a/sound/soc/codecs/lpass-rx-macro.c
+++ b/sound/soc/codecs/lpass-rx-macro.c
@@ -1601,6 +1601,7 @@ static bool rx_is_rw_register(struct device *dev, unsigned int reg)
 	case LPASS_CODEC_VERSION_1_1:
 	case LPASS_CODEC_VERSION_1_2:
 	case LPASS_CODEC_VERSION_2_0:
+	case LPASS_CODEC_VERSION_2_1:
 		return rx_pre_2_5_is_rw_register(dev, reg);
 	case LPASS_CODEC_VERSION_2_5:
 	case LPASS_CODEC_VERSION_2_6:
@@ -3639,6 +3640,7 @@ static int rx_macro_component_probe(struct snd_soc_component *component)
 	case LPASS_CODEC_VERSION_1_1:
 	case LPASS_CODEC_VERSION_1_2:
 	case LPASS_CODEC_VERSION_2_0:
+	case LPASS_CODEC_VERSION_2_1:
 		controls = rx_macro_def_snd_controls;
 		num_controls = ARRAY_SIZE(rx_macro_def_snd_controls);
 		widgets = rx_macro_def_dapm_widgets;
@@ -3812,6 +3814,7 @@ static int rx_macro_probe(struct platform_device *pdev)
 	case LPASS_CODEC_VERSION_1_1:
 	case LPASS_CODEC_VERSION_1_2:
 	case LPASS_CODEC_VERSION_2_0:
+	case LPASS_CODEC_VERSION_2_1:
 		rx->rxn_reg_stride = 0x80;
 		def_count = ARRAY_SIZE(rx_defaults) + ARRAY_SIZE(rx_pre_2_5_defaults);
 		reg_defaults = kmalloc_array(def_count, sizeof(struct reg_default), GFP_KERNEL);
-- 
2.43.0

.

From: Udit Kumar <u-kumar1@ti.com>
To: <vigneshr@ti.com>, <nm@ti.com>, <tony@atomide.com>
CC: <gregkh@linuxfoundation.org>, <jirislaby@kernel.org>,
        <ronald.wahl@raritan.com>, <thomas.richard@bootlin.com>,
        <tglx@linutronix.de>, <linux-kernel@vger.kernel.org>,
        <linux-serial@vger.kernel.org>, Udit Kumar <u-kumar1@ti.com>,
        <stable@vger.kernel.org>
Subject: [PATCH v2] serial: 8250_omap: Fix Errata i2310 with RX FIFO level check
Date: Tue, 25 Jun 2024 21:37:25 +0530
Message-ID: <20240625160725.2102194-1-u-kumar1@ti.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258434
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-serial,org.kernel.vger.stable
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Errata i2310[0] says, Erroneous timeout can be triggered,
if this Erroneous interrupt is not cleared then it may leads
to storm of interrupts.

Commit 9d141c1e6157 ("serial: 8250_omap: Implementation of Errata i2310")
which added the workaround but missed ensuring RX FIFO is really empty
before applying the errata workaround as recommended in the errata text.
Fix this by adding back check for UART_OMAP_RX_LVL to be 0 for
workaround to take effect.

[0] https://www.ti.com/lit/pdf/sprz536 page 23

Fixes: 9d141c1e6157 ("serial: 8250_omap: Implementation of Errata i2310")
Cc: stable@vger.kernel.org
Reported-by: Vignesh Raghavendra <vigneshr@ti.com>
Closes: https://lore.kernel.org/all/e96d0c55-0b12-4cbf-9d23-48963543de49@ti.com/
Signed-off-by: Udit Kumar <u-kumar1@ti.com>
---
Testlogs
https://gist.github.com/uditkumarti/4f5120f203a238fbebe411eb82b63753

Changelog:
Changes in v2
- Update commit message, subject, Fixes tag
link to v1:
https://lore.kernel.org/all/20240625051338.2761599-1-u-kumar1@ti.com/

 drivers/tty/serial/8250/8250_omap.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/tty/serial/8250/8250_omap.c b/drivers/tty/serial/8250/8250_omap.c
index ddac0a13cf84..1af9aed99c65 100644
--- a/drivers/tty/serial/8250/8250_omap.c
+++ b/drivers/tty/serial/8250/8250_omap.c
@@ -672,7 +672,8 @@ static irqreturn_t omap8250_irq(int irq, void *dev_id)
 	 * https://www.ti.com/lit/pdf/sprz536
 	 */
 	if (priv->habit & UART_RX_TIMEOUT_QUIRK &&
-		(iir & UART_IIR_RX_TIMEOUT) == UART_IIR_RX_TIMEOUT) {
+	    (iir & UART_IIR_RX_TIMEOUT) == UART_IIR_RX_TIMEOUT &&
+	    serial_port_in(port, UART_OMAP_RX_LVL) == 0) {
 		unsigned char efr2, timeout_h, timeout_l;
 
 		efr2 = serial_in(up, UART_OMAP_EFR2);
-- 
2.34.1

.

Date: Tue, 25 Jun 2024 17:25:24 +0100
From: Mark Brown <broonie@kernel.org>
To: Linux Next Mailing List <linux-next@vger.kernel.org>
Cc: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: linux-next: Tree for Jun 25
Message-ID: <ZnrvdJzGbayRgjpn@sirena.org.uk>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Type: multipart/signed; micalg=pgp-sha512;
	protocol="application/pgp-signature"; boundary="Gl2hLb5HDDNJNRJ1"
Content-Disposition: inline
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258450 org.kernel.vger.linux-next:61931
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-next
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail


--Gl2hLb5HDDNJNRJ1
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

Hi all,

Changes since 20240624:

The qcom tree gained a build failure, I used the version from 20240624
instead.

The tip tree gained a build failure, I used the version from 20240624
instead.

Non-merge commits (relative to Linus' tree): 7415
 8225 files changed, 734187 insertions(+), 141975 deletions(-)

----------------------------------------------------------------------------

I have created today's linux-next tree at
git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
(patches at http://www.kernel.org/pub/linux/kernel/next/ ).  If you
are tracking the linux-next tree using git, you should not use "git pull"
to do so as that will try to merge the new linux-next release with the
old one.  You should use "git fetch" and checkout or reset to the new
master.

You can see which trees have been included by looking in the Next/Trees
file in the source.  There is also the merge.log file in the Next
directory.  Between each merge, the tree was built with a defconfig
for arm64, an allmodconfig for x86_64, a multi_v7_defconfig for arm
and a native build of tools/perf.

Below is a summary of the state of the merge.

I am currently merging 378 trees (counting Linus' and 106 trees of bug
fix patches pending for the current merge release).

Stats about the size of the tree over time can be seen at
http://neuling.org/linux-next-size.html .

Status of my local build tests will be at
http://kisskb.ellerman.id.au/linux-next .  If maintainers want to give
advice about cross compilers/configs that work, we are always open to add
more builds.

Thanks to Randy Dunlap for doing many randconfig builds.  And to Paul
Gortmaker for triage and bug fixes.

--Gl2hLb5HDDNJNRJ1
Content-Type: application/pgp-signature; name="signature.asc"

-----BEGIN PGP SIGNATURE-----

iQEzBAABCgAdFiEEreZoqmdXGLWf4p/qJNaLcl1Uh9AFAmZ673MACgkQJNaLcl1U
h9DNOwf/a/FH7CPSFX+0/LDT1bRVQcIQa7VSqhcQ6zkdkZdAFCJeBSYd5nHJ6DzD
491OGldLYnds7xypFV8OvWBd+jhQlP2eX4lYOsuPOGFLiqXxzEpJuhhzfiWEJ59g
e4OKfjcqLhcayMx6qbtw6hpLvS7NB31a86RWGJFJNRGGe+7KYdJUuBaGnKqRQarF
F5XPSwRMHANij8+qcDVEAqoV9BIobT0pUrqIy0t2pWdKM9jm1ktqnSB+Jlw5T3S0
VhwgkRgJRio3cAUdDeCape3gkLe143KpSB0fWezyimYP8RY7VN+SSnUsIUrOL0bU
geAC2gch43JHr8hIJOFvJi/ytnXF2Q==
=cfiR
-----END PGP SIGNATURE-----

--Gl2hLb5HDDNJNRJ1--
.

From: Douglas Anderson <dianders@chromium.org>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Jiri Slaby <jirislaby@kernel.org>
Cc: =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= <ilpo.jarvinen@linux.intel.com>,
	Neil Armstrong <neil.armstrong@linaro.org>,
	Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
	Tony Lindgren <tony@atomide.com>,
	=?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= <u.kleine-koenig@pengutronix.de>,
	linux-arm-msm@vger.kernel.org,
	Bjorn Andersson <andersson@kernel.org>,
	Stephen Boyd <swboyd@chromium.org>,
	linux-serial@vger.kernel.org,
	=?UTF-8?q?N=C3=ADcolas=20F=20=2E=20R=20=2E=20A=20=2E=20Prado?= <nfraprado@collabora.com>,
	John Ogness <john.ogness@linutronix.de>,
	linux-kernel@vger.kernel.org,
	Yicong Yang <yangyicong@hisilicon.com>,
	Johan Hovold <johan+linaro@kernel.org>,
	Konrad Dybcio <konrad.dybcio@linaro.org>,
	Douglas Anderson <dianders@chromium.org>,
	Rob Herring <robh@kernel.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Vijaya Krishna Nivarthi <quic_vnivarth@quicinc.com>
Subject: [PATCH] serial: qcom-geni: Avoid hard lockup if bytes are dropped
Date: Tue, 25 Jun 2024 09:24:44 -0700
Message-ID: <20240625092440.1.Icf914852be911b95aefa9d798b6f1cd1a180f985@changeid>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258452
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-arm-msm,org.kernel.vger.linux-serial
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

If you start sending a large chunk of text over the UART (like `cat
/var/log/messages`) and then hit Ctrl-C to stop it then, as of commit
1788cf6a91d9 ("tty: serial: switch from circ_buf to kfifo"), you'll
get a hard lockup. Specifically, the driver ends up looping in
qcom_geni_serial_send_chunk_fifo(). uart_fifo_out() will return 0
bytes were transferred and the loop will never make progress.

Avoid the hard lockup by making sure we never kick off a transfer that
is larger than we can queue up immediately.

The issue stems from the fact that the geni serial driver tried to be
more efficient by kicking off large transfers. It tried to do this
because the design of geni means that whenever we get to the end of a
transfer there is a period of time where the line goes idle while we
wait for an interrupt to start a new transfer.

The geni serial driver kicked off large transfers by peeking into the
Linux software FIFO and kicking off a transfer based on the number of
bytes there. While that worked (mostly), there was an unhandled corner
case when the Linux software FIFO shrank, as happens when you kill a
process that had queued up lots of data to send.

Prior to the recent kfifo change, the geni driver would keep sending
data that had been "removed" from the Linux software FIFO. While
definitely wrong, this didn't feel too terrible. In the above instance
of hitting Ctrl-C while catting a large file you'd see the file keep
spewing out to the console for a few hundred milliseconds after the
process died. As mentioned above, after the kfifo change we get a hard
lockup.

Digging into the geni serial driver shows a whole pile of issues and
those should be fixed. One patch series attempting to fix the issue
has had positive testing/reviews [1] but it's a fairly large change.
While debating / researching the right long term solution, this small
patch at least prevents the hard lockup.

NOTE: this change does have performance impacts. On my sc7180-trogdor
device I measured something like a 2% slowdown. Others has seen
something more like a 20-25% slowdown [2]. However, correctness trumps
performance so landing this makes sense while better solutions are
devised.

[1] https://lore.kernel.org/r/20240610222515.3023730-1-dianders@chromium.org
[2] https://lore.kernel.org/r/ZnraAlR9QeYhd628@hovoldconsulting.com

Fixes: 1788cf6a91d9 ("tty: serial: switch from circ_buf to kfifo")
Signed-off-by: Douglas Anderson <dianders@chromium.org>
---
As discussed with Johan [3], this probably makes sense to land as a
stopgap while we come to agreement on how to solve the larger issues.

NOTE: I'll be away from my work computer for the next 1.5 weeks.
Hopefully this can land in the meantime. If it needs spinning /
reworking I wouldn't object to someone else taking it on.

I've removed all "Tested-by" tags here since the code is pretty
different and it only solves a subset of the issues of the larger
series.

[3] https://lore.kernel.org/r/ZnraAlR9QeYhd628@hovoldconsulting.com

 drivers/tty/serial/qcom_geni_serial.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/tty/serial/qcom_geni_serial.c b/drivers/tty/serial/qcom_geni_serial.c
index 2bd25afe0d92..fc202233a3ee 100644
--- a/drivers/tty/serial/qcom_geni_serial.c
+++ b/drivers/tty/serial/qcom_geni_serial.c
@@ -904,8 +904,8 @@ static void qcom_geni_serial_handle_tx_fifo(struct uart_port *uport,
 		goto out_write_wakeup;
 
 	if (!port->tx_remaining) {
-		qcom_geni_serial_setup_tx(uport, pending);
-		port->tx_remaining = pending;
+		qcom_geni_serial_setup_tx(uport, chunk);
+		port->tx_remaining = chunk;
 
 		irq_en = readl(uport->membase + SE_GENI_M_IRQ_EN);
 		if (!(irq_en & M_TX_FIFO_WATERMARK_EN))
-- 
2.45.2.741.gdbec12cfda-goog

.

From: Teddy Engel <engel.teddy@gmail.com>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	oe-kbuild-all@lists.linux.dev,
	devel@driverdev.osuosl.org,
	linux-staging@lists.linux.dev,
	linux-kernel@vger.kernel.org
Cc: Teddy Engel <engel.teddy@gmail.com>,
	kernel test robot <lkp@intel.com>
Subject: [PATCH v3] staging: rtl8192e: Fix conflicting types error with net_device.
Date: Tue, 25 Jun 2024 17:33:34 +0100
Message-Id: <20240625163334.11117-1-engel.teddy@gmail.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258461
Newsgroups: org.kernel.vger.linux-kernel,dev.linux.lists.linux-staging,dev.linux.lists.oe-kbuild-all,org.linuxdriverproject.driverdev-devel
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Add a pre-declaration of struct net_device so the compiler is able to
use rtl_pci.h / rtl_cam.h.

Signed-off-by: Teddy Engel <engel.teddy@gmail.com>
Reported-by: kernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202406250858.L8rJMHQm-lkp@intel.com/
Fixes: 7dff0b27d9c8 ("staging: rtl8192e: Remove unnecessary pre-declaration of struct net_device")
---
v3: Replace ad-hoc commit id / subject by expected Fixes tag.
v2: Add commit id / commit subject  under description.

 drivers/staging/rtl8192e/rtl8192e/rtl_cam.h | 2 ++
 drivers/staging/rtl8192e/rtl8192e/rtl_pci.h | 2 ++
 2 files changed, 4 insertions(+)

diff --git a/drivers/staging/rtl8192e/rtl8192e/rtl_cam.h b/drivers/staging/rtl8192e/rtl8192e/rtl_cam.h
index 3a5635494385..9deffdf96072 100644
--- a/drivers/staging/rtl8192e/rtl8192e/rtl_cam.h
+++ b/drivers/staging/rtl8192e/rtl8192e/rtl_cam.h
@@ -12,6 +12,8 @@
 
 #include <linux/types.h>
 
+struct net_device;
+
 void rtl92e_cam_reset(struct net_device *dev);
 void rtl92e_enable_hw_security_config(struct net_device *dev);
 void rtl92e_set_key(struct net_device *dev, u8 EntryNo, u8 KeyIndex,
diff --git a/drivers/staging/rtl8192e/rtl8192e/rtl_pci.h b/drivers/staging/rtl8192e/rtl8192e/rtl_pci.h
index c645775b2150..3e39c4835ac8 100644
--- a/drivers/staging/rtl8192e/rtl8192e/rtl_pci.h
+++ b/drivers/staging/rtl8192e/rtl8192e/rtl_pci.h
@@ -13,6 +13,8 @@
 #include <linux/types.h>
 #include <linux/pci.h>
 
+struct net_device;
+
 bool rtl92e_check_adapter(struct pci_dev *pdev, struct net_device *dev);
 
 #endif
-- 
2.39.2

.

From: Pei Li <peili.dev@gmail.com>
Date: Tue, 25 Jun 2024 09:42:05 -0700
Subject: [PATCH] jfs: Fix shift-out-of-bounds in dbDiscardAG
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
Message-Id: <20240625-bug0-v1-1-fcee34ac00a7@gmail.com>
To: Dave Kleikamp <shaggy@kernel.org>
Cc: jfs-discussion@lists.sourceforge.net, linux-kernel@vger.kernel.org, 
 linux-kernel-mentees@lists.linuxfoundation.org, 
 syzkaller-bugs@googlegroups.com, skhan@linuxfoundation.org, 
 peili.dev@gmail.com, syzbot+61be3359d2ee3467e7e4@syzkaller.appspotmail.com
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258469
Newsgroups: org.kernel.vger.linux-kernel,dev.linux.lists.linux-kernel-mentees
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

When searching for the next smaller log2 block, BLKSTOL2() returned 0,
causing shift exponent -1 to be negative.

This patch fixes the issue by exiting the loop directly when negative
shift is found.

Reported-by: syzbot+61be3359d2ee3467e7e4@syzkaller.appspotmail.com
Closes: https://syzkaller.appspot.com/bug?extid=61be3359d2ee3467e7e4
Signed-off-by: Pei Li <peili.dev@gmail.com>
---
Syzbot reported the following error:
UBSAN: shift-out-of-bounds in fs/jfs/jfs_dmap.c:1629:18
shift exponent -1 is negative

If BLKSTOL2() returned 0, the shift exponent will be -1.

The solution is to check the exponent and if it is smaller than 0,
exit the loop directly.
---
 fs/jfs/jfs_dmap.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/fs/jfs/jfs_dmap.c b/fs/jfs/jfs_dmap.c
index cb3cda1390ad..5713994328cb 100644
--- a/fs/jfs/jfs_dmap.c
+++ b/fs/jfs/jfs_dmap.c
@@ -1626,6 +1626,8 @@ s64 dbDiscardAG(struct inode *ip, int agno, s64 minlen)
 		} else if (rc == -ENOSPC) {
 			/* search for next smaller log2 block */
 			l2nb = BLKSTOL2(nblocks) - 1;
+			if (unlikely(l2nb < 0))
+				break;
 			nblocks = 1LL << l2nb;
 		} else {
 			/* Trim any already allocated blocks */

---
base-commit: 2ccbdf43d5e758f8493a95252073cf9078a5fea5
change-id: 20240625-bug0-11e890f449af

Best regards,
-- 
Pei Li <peili.dev@gmail.com>

.

From: Jeff Johnson <quic_jjohnson@quicinc.com>
Date: Tue, 25 Jun 2024 09:42:49 -0700
Subject: [PATCH v2] fs: nfs: add missing MODULE_DESCRIPTION() macros
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
Message-ID: <20240625-md-fs-nfs-v2-1-2316b64ffaa5@quicinc.com>
To: Trond Myklebust <trond.myklebust@hammerspace.com>,
        Anna Schumaker
	<anna@kernel.org>,
        Chuck Lever <chuck.lever@oracle.com>,
        Jeff Layton
	<jlayton@kernel.org>, Neil Brown <neilb@suse.de>,
        Olga Kornievskaia
	<kolga@netapp.com>, Dai Ngo <Dai.Ngo@oracle.com>,
        Tom Talpey
	<tom@talpey.com>, Trond Myklebust <trondmy@kernel.org>
CC: <linux-nfs@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
        <kernel-janitors@vger.kernel.org>,
        Jeff Johnson <quic_jjohnson@quicinc.com>
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258470 org.kernel.vger.linux-nfs:86297
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.kernel-janitors,org.kernel.vger.linux-nfs
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Fix the 'make W=1' warnings:
WARNING: modpost: missing MODULE_DESCRIPTION() in fs/nfs_common/nfs_acl.o
WARNING: modpost: missing MODULE_DESCRIPTION() in fs/nfs_common/grace.o
WARNING: modpost: missing MODULE_DESCRIPTION() in fs/nfs/nfs.o
WARNING: modpost: missing MODULE_DESCRIPTION() in fs/nfs/nfsv2.o
WARNING: modpost: missing MODULE_DESCRIPTION() in fs/nfs/nfsv3.o
WARNING: modpost: missing MODULE_DESCRIPTION() in fs/nfs/nfsv4.o

Signed-off-by: Jeff Johnson <quic_jjohnson@quicinc.com>
---
Changes in v2:
- Updated the description in grace.c per Jeff Layton
- Link to v1: https://lore.kernel.org/r/20240527-md-fs-nfs-v1-1-64a15e9b53a6@quicinc.com
---
 fs/nfs/inode.c         | 1 +
 fs/nfs/nfs2super.c     | 1 +
 fs/nfs/nfs3super.c     | 1 +
 fs/nfs/nfs4super.c     | 1 +
 fs/nfs_common/grace.c  | 1 +
 fs/nfs_common/nfsacl.c | 1 +
 6 files changed, 6 insertions(+)

diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c
index acef52ecb1bb..57c473e9d00f 100644
--- a/fs/nfs/inode.c
+++ b/fs/nfs/inode.c
@@ -2538,6 +2538,7 @@ static void __exit exit_nfs_fs(void)
 
 /* Not quite true; I just maintain it */
 MODULE_AUTHOR("Olaf Kirch <okir@monad.swb.de>");
+MODULE_DESCRIPTION("NFS client support");
 MODULE_LICENSE("GPL");
 module_param(enable_ino64, bool, 0644);
 
diff --git a/fs/nfs/nfs2super.c b/fs/nfs/nfs2super.c
index 467f21ee6a35..b1badc70bd71 100644
--- a/fs/nfs/nfs2super.c
+++ b/fs/nfs/nfs2super.c
@@ -26,6 +26,7 @@ static void __exit exit_nfs_v2(void)
 	unregister_nfs_version(&nfs_v2);
 }
 
+MODULE_DESCRIPTION("NFSv2 client support");
 MODULE_LICENSE("GPL");
 
 module_init(init_nfs_v2);
diff --git a/fs/nfs/nfs3super.c b/fs/nfs/nfs3super.c
index 8a9be9e47f76..20a80478449e 100644
--- a/fs/nfs/nfs3super.c
+++ b/fs/nfs/nfs3super.c
@@ -27,6 +27,7 @@ static void __exit exit_nfs_v3(void)
 	unregister_nfs_version(&nfs_v3);
 }
 
+MODULE_DESCRIPTION("NFSv3 client support");
 MODULE_LICENSE("GPL");
 
 module_init(init_nfs_v3);
diff --git a/fs/nfs/nfs4super.c b/fs/nfs/nfs4super.c
index 8da5a9c000f4..b29a26923ce0 100644
--- a/fs/nfs/nfs4super.c
+++ b/fs/nfs/nfs4super.c
@@ -332,6 +332,7 @@ static void __exit exit_nfs_v4(void)
 	nfs_dns_resolver_destroy();
 }
 
+MODULE_DESCRIPTION("NFSv4 client support");
 MODULE_LICENSE("GPL");
 
 module_init(init_nfs_v4);
diff --git a/fs/nfs_common/grace.c b/fs/nfs_common/grace.c
index 1479583fbb62..27cd0d13143b 100644
--- a/fs/nfs_common/grace.c
+++ b/fs/nfs_common/grace.c
@@ -139,6 +139,7 @@ exit_grace(void)
 }
 
 MODULE_AUTHOR("Jeff Layton <jlayton@primarydata.com>");
+MODULE_DESCRIPTION("NFS client and server infrastructure");
 MODULE_LICENSE("GPL");
 module_init(init_grace)
 module_exit(exit_grace)
diff --git a/fs/nfs_common/nfsacl.c b/fs/nfs_common/nfsacl.c
index 5a5bd85d08f8..ea382b75b26c 100644
--- a/fs/nfs_common/nfsacl.c
+++ b/fs/nfs_common/nfsacl.c
@@ -29,6 +29,7 @@
 #include <linux/nfs3.h>
 #include <linux/sort.h>
 
+MODULE_DESCRIPTION("NFS ACL support");
 MODULE_LICENSE("GPL");
 
 struct nfsacl_encode_desc {

---
base-commit: 50736169ecc8387247fe6a00932852ce7b057083
change-id: 20240527-md-fs-nfs-42f19eb60b50

.

Return-Path: <linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org>
From: Evan Green <evan@rivosinc.com>
To: Palmer Dabbelt <palmer@dabbelt.com>
Cc: Yangyu Chen <cyy@cyyself.name>,
	Evan Green <evan@rivosinc.com>,
	Albert Ou <aou@eecs.berkeley.edu>,
	Alexandre Ghiti <alexghiti@rivosinc.com>,
	Andrew Jones <ajones@ventanamicro.com>,
	Andy Chiu <andy.chiu@sifive.com>,
	Ben Dooks <ben.dooks@codethink.co.uk>,
	=?UTF-8?q?Bj=C3=B6rn=20T=C3=B6pel?= <bjorn@rivosinc.com>,
	Charlie Jenkins <charlie@rivosinc.com>,
	=?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= <cleger@rivosinc.com>,
	Conor Dooley <conor.dooley@microchip.com>,
	Costa Shulyupin <costa.shul@redhat.com>,
	Erick Archer <erick.archer@gmx.com>,
	"Gustavo A. R. Silva" <gustavoars@kernel.org>,
	Jonathan Corbet <corbet@lwn.net>,
	Paul Walmsley <paul.walmsley@sifive.com>,
	linux-doc@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-riscv@lists.infradead.org
Subject: [PATCH v2 0/2] RISC-V: hwprobe: Misaligned scalar perf fix and rename
Date: Tue, 25 Jun 2024 09:51:19 -0700
Message-Id: <20240625165121.2160354-1-evan@rivosinc.com>
MIME-Version: 1.0
X-BeenThere: linux-riscv@lists.infradead.org
X-Mailman-Version: 2.1.34
List-Id: <linux-riscv.lists.infradead.org>
List-Unsubscribe: <http://lists.infradead.org/mailman/options/linux-riscv>,
 <mailto:linux-riscv-request@lists.infradead.org?subject=unsubscribe>
List-Archive: <http://lists.infradead.org/pipermail/linux-riscv/>
List-Post: <mailto:linux-riscv@lists.infradead.org>
List-Help: <mailto:linux-riscv-request@lists.infradead.org?subject=help>
List-Subscribe: <http://lists.infradead.org/mailman/listinfo/linux-riscv>,
 <mailto:linux-riscv-request@lists.infradead.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: "linux-riscv" <linux-riscv-bounces@lists.infradead.org>
Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org
Xref: photonic.trudheim.com org.infradead.lists.linux-riscv:78997 org.kernel.vger.linux-kernel:1258472
Newsgroups: org.infradead.lists.linux-riscv,org.kernel.vger.linux-doc,org.kernel.vger.linux-kernel
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail


The CPUPERF0 hwprobe key was documented and identified in code as
a bitmask value, but its contents were an enum. This produced
incorrect behavior in conjunction with the WHICH_CPUS hwprobe flag.
The first patch in this series fixes the bitmask/enum problem by
creating a new hwprobe key that returns the same data, but is
properly described as a value instead of a bitmask. The second patch
renames the value definitions in preparation for adding vector misaligned
access info. The second patch has the side effect of causing users
using the old key values to fail to compile, which may allow them
to see and update to the new key without breaking binary compatibility
with old programs.


Changes in v2:
 - Clarified the distinction of slow and fast refers to misaligned word
   accesses. Previously it just said misaligned accesses, leaving it
   ambiguous as to which type of access was measured.
 - Removed shifts in values (Andrew)
 - Renamed key to RISCV_HWPROBE_KEY_MISALIGNED_SCALAR_PERF (Palmer)
 - Added patch to rename misaligned perf key values (Palmer)

Evan Green (2):
  RISC-V: hwprobe: Add MISALIGNED_PERF key
  RISC-V: hwprobe: Add SCALAR to misaligned perf defines

 Documentation/arch/riscv/hwprobe.rst       | 29 +++++++++++++---------
 arch/riscv/include/asm/hwprobe.h           |  2 +-
 arch/riscv/include/uapi/asm/hwprobe.h      | 13 +++++-----
 arch/riscv/kernel/sys_hwprobe.c            | 11 ++++----
 arch/riscv/kernel/traps_misaligned.c       |  6 ++---
 arch/riscv/kernel/unaligned_access_speed.c | 12 ++++-----
 6 files changed, 40 insertions(+), 33 deletions(-)

-- 
2.34.1


_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
.

From: Andrew Davis <afd@ti.com>
To: Rob Herring <robh+dt@kernel.org>,
        Krzysztof Kozlowski
	<krzysztof.kozlowski+dt@linaro.org>,
        Conor Dooley <conor+dt@kernel.org>,
        Jan
 Kiszka <jan.kiszka@siemens.com>, Tony Lindgren <tony@atomide.com>,
        Nishanth
 Menon <nm@ti.com>, Vignesh Raghavendra <vigneshr@ti.com>
CC: <devicetree@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
        Andrew Davis
	<afd@ti.com>
Subject: [PATCH 1/2] dt-bindings: soc: ti: am654-serdes-ctrl: Add simple-mfd to compatible items
Date: Tue, 25 Jun 2024 11:45:27 -0500
Message-ID: <20240625164528.183107-1-afd@ti.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258475
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-devicetree
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

This node contains a child which is only probed if simple-mfd is in the
compatible list. Add this here.

Signed-off-by: Andrew Davis <afd@ti.com>
---
 .../devicetree/bindings/soc/ti/ti,am654-serdes-ctrl.yaml       | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/Documentation/devicetree/bindings/soc/ti/ti,am654-serdes-ctrl.yaml b/Documentation/devicetree/bindings/soc/ti/ti,am654-serdes-ctrl.yaml
index a10a3b89ae05e..94b36943a50ff 100644
--- a/Documentation/devicetree/bindings/soc/ti/ti,am654-serdes-ctrl.yaml
+++ b/Documentation/devicetree/bindings/soc/ti/ti,am654-serdes-ctrl.yaml
@@ -14,6 +14,7 @@ properties:
     items:
       - const: ti,am654-serdes-ctrl
       - const: syscon
+      - const: simple-mfd
 
   reg:
     maxItems: 1
@@ -31,7 +32,7 @@ additionalProperties: false
 examples:
   - |
     clock@4080 {
-        compatible = "ti,am654-serdes-ctrl", "syscon";
+        compatible = "ti,am654-serdes-ctrl", "syscon", "simple-mfd";
         reg = <0x4080 0x4>;
 
         mux-controller {
-- 
2.39.2

.

From: Lizhe <sensor1010@163.com>
To: gregkh@linuxfoundation.org,
	stern@rowland.harvard.edu,
	hgajjar@de.adit-jv.com,
	stanley_chang@realtek.com,
	ricardo.canuelo@collabora.com,
	johan+linaro@kernel.org
Cc: linux-usb@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	Lizhe <sensor1010@163.com>
Subject: [PATCH] USB: hub:no need to obtain usb device
Date: Tue, 25 Jun 2024 09:46:07 -0700
Message-Id: <20240625164607.3367-1-sensor1010@163.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258478
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-usb
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

the usb device connected to the port has obtained.
there is no need to obtain it again.

Signed-off-by: Lizhe <sensor1010@163.com>
---
 drivers/usb/core/hub.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
index 4b93c0bd1d4b..f37b991fa86a 100644
--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
@@ -5358,7 +5358,7 @@ static void hub_port_connect(struct usb_hub *hub, int port1, u16 portstatus,
 	if (udev) {
 		if (hcd->usb_phy && !hdev->parent)
 			usb_phy_notify_disconnect(hcd->usb_phy, udev->speed);
-		usb_disconnect(&port_dev->child);
+		usb_disconnect(&udev);
 	}
 
 	/* We can forget about a "removed" device when there's a physical
-- 
2.17.1

.

From: Jeff Johnson <quic_jjohnson@quicinc.com>
Date: Tue, 25 Jun 2024 09:53:45 -0700
Subject: [PATCH v2] scsi: ufs: qcom: add missing MODULE_DESCRIPTION() macro
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
Message-ID: <20240625-md-drivers-ufs-host-v2-1-59a56974b05a@quicinc.com>
To: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>,
        "James E.J.
 Bottomley" <James.Bottomley@HansenPartnership.com>,
        "Martin K. Petersen"
	<martin.petersen@oracle.com>,
        Bart Van Assche <bvanassche@acm.org>
CC: <linux-arm-msm@vger.kernel.org>, <linux-scsi@vger.kernel.org>,
        <linux-kernel@vger.kernel.org>, <kernel-janitors@vger.kernel.org>,
        "Jeff
 Johnson" <quic_jjohnson@quicinc.com>
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258485
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.kernel-janitors,org.kernel.vger.linux-arm-msm,org.kernel.vger.linux-scsi
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

With ARCH=arm64, make allmodconfig && make W=1 C=1 reports:
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/ufs/host/ufs-qcom.o

Add the missing invocation of the MODULE_DESCRIPTION() macro.

Signed-off-by: Jeff Johnson <quic_jjohnson@quicinc.com>
---
Changes in v2:
- Updated the description per Bart Van Assche
- Link to v1: https://lore.kernel.org/r/20240612-md-drivers-ufs-host-v1-1-df35924685b8@quicinc.com
---
 drivers/ufs/host/ufs-qcom.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/ufs/host/ufs-qcom.c b/drivers/ufs/host/ufs-qcom.c
index cca190d1c577..c12004030b50 100644
--- a/drivers/ufs/host/ufs-qcom.c
+++ b/drivers/ufs/host/ufs-qcom.c
@@ -1883,4 +1883,5 @@ static struct platform_driver ufs_qcom_pltform = {
 };
 module_platform_driver(ufs_qcom_pltform);
 
+MODULE_DESCRIPTION("Qualcomm UFS host controller driver");
 MODULE_LICENSE("GPL v2");

---
base-commit: 83a7eefedc9b56fe7bfeff13b6c7356688ffa670
change-id: 20240612-md-drivers-ufs-host-a8a0aad539f0

.

From: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
To: Liam Girdwood <lgirdwood@gmail.com>,
	Mark Brown <broonie@kernel.org>,
	Jaroslav Kysela <perex@perex.cz>,
	Takashi Iwai <tiwai@suse.com>,
	Srinivas Kandagatla <srinivas.kandagatla@linaro.org>,
	Banajit Goswami <bgoswami@quicinc.com>,
	linux-sound@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	alsa-devel@alsa-project.org,
	linux-arm-msm@vger.kernel.org
Cc: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Subject: [PATCH 1/2] ASoC: codecs: lpass-macro: Gracefully handle unknown version
Date: Tue, 25 Jun 2024 18:57:35 +0200
Message-ID: <20240625165736.722106-1-krzysztof.kozlowski@linaro.org>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258487
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-arm-msm,org.kernel.vger.linux-sound
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Qualcomm LPASS macro codec driver parses registers in order to
detect version of the codec.  It recognizes codecs v2.0 - v2.8, however
we know that there are earlier versions and 'enum lpass_codec_version'
has also v1.0, v1.1 and v1.2.  If by any chance we run on unrecognized
version, driver will use random value from the stack as the codec
version.

Fix it by mapping such cases to an enum of value 0:
LPASS_CODEC_VERSION_UNKNOWN.

Fixes: 378918d59181 ("ASoC: codecs: lpass-macro: add helpers to get codec version")
Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
---
 sound/soc/codecs/lpass-macro-common.h | 3 ++-
 sound/soc/codecs/lpass-va-macro.c     | 3 ++-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/sound/soc/codecs/lpass-macro-common.h b/sound/soc/codecs/lpass-macro-common.h
index f6f1bfe8eb77..94697d0ba8c9 100644
--- a/sound/soc/codecs/lpass-macro-common.h
+++ b/sound/soc/codecs/lpass-macro-common.h
@@ -19,7 +19,8 @@ enum lpass_version {
 };
 
 enum lpass_codec_version {
-	LPASS_CODEC_VERSION_1_0 = 1,
+	LPASS_CODEC_VERSION_UNKNOWN,
+	LPASS_CODEC_VERSION_1_0,
 	LPASS_CODEC_VERSION_1_1,
 	LPASS_CODEC_VERSION_1_2,
 	LPASS_CODEC_VERSION_2_0,
diff --git a/sound/soc/codecs/lpass-va-macro.c b/sound/soc/codecs/lpass-va-macro.c
index ae80865cd459..f9262d7d2c26 100644
--- a/sound/soc/codecs/lpass-va-macro.c
+++ b/sound/soc/codecs/lpass-va-macro.c
@@ -1463,7 +1463,8 @@ static int va_macro_validate_dmic_sample_rate(u32 dmic_sample_rate,
 
 static void va_macro_set_lpass_codec_version(struct va_macro *va)
 {
-	int core_id_0 = 0, core_id_1 = 0, core_id_2 = 0, version;
+	int core_id_0 = 0, core_id_1 = 0, core_id_2 = 0;
+	int version = LPASS_CODEC_VERSION_UNKNOWN;
 
 	regmap_read(va->regmap, CDC_VA_TOP_CSR_CORE_ID_0, &core_id_0);
 	regmap_read(va->regmap, CDC_VA_TOP_CSR_CORE_ID_1, &core_id_1);
-- 
2.43.0

.

From: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Subject: [PATCH 0/3] ASoC: codecs: lpass-wsa-macro: Add support for newer
 v2.5 version
Date: Tue, 25 Jun 2024 18:58:44 +0200
Message-Id: <20240625-qcom-audio-wsa-second-speaker-v1-0-f65ffdfc368c@linaro.org>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
To: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>, 
 Banajit Goswami <bgoswami@quicinc.com>, Liam Girdwood <lgirdwood@gmail.com>, 
 Mark Brown <broonie@kernel.org>, Jaroslav Kysela <perex@perex.cz>, 
 Takashi Iwai <tiwai@suse.com>
Cc: alsa-devel@alsa-project.org, linux-arm-msm@vger.kernel.org, 
 linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, 
 Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258490
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-arm-msm,org.kernel.vger.linux-sound
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Hi,

LPASS codec v2.5 and newer have differences in registers which we did
not implement so far.  Lack of proper support is visible during
playback: on SoCs with v2.6 (e.g. Qualcomm SM8550) only one speaker
plays.

Add missing bits for v2.5 and newer codecs.

This is similar work to already merged:
https://lore.kernel.org/all/20240612-lpass-codec-v25-v4-0-f63d3676dbc4@linaro.org/

No dependencies.

Best regards,
Krzysztof

---
Krzysztof Kozlowski (3):
      ASoC: codecs: lpass-wsa-macro: Drop unused define
      ASoC: codecs: lpass-wsa-macro: Prepare to accommodate new codec versions
      ASoC: codecs: lpass-wsa-macro: Correct support for newer v2.5 version

 sound/soc/codecs/lpass-wsa-macro.c | 644 ++++++++++++++++++++++++++++++-------
 1 file changed, 521 insertions(+), 123 deletions(-)
---
base-commit: d585065ee5b64c60496a2403bafee1540cb319ec
change-id: 20240625-qcom-audio-wsa-second-speaker-ee1a5d2d267b

Best regards,
-- 
Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>

.

From: Allen Pais <allen.lkml@gmail.com>
To: Aubin Constans <aubin.constans@microchip.com>,
	Ulf Hansson <ulf.hansson@linaro.org>,
	Nicolas Ferre <nicolas.ferre@microchip.com>,
	Alexandre Belloni <alexandre.belloni@bootlin.com>,
	Claudiu Beznea <claudiu.beznea@tuxon.dev>,
	Manuel Lauss <manuel.lauss@gmail.com>,
	=?UTF-8?q?Micha=C5=82=20Miros=C5=82aw?= <mirq-linux@rere.qmqm.pl>,
	Jaehoon Chung <jh80.chung@samsung.com>,
	Aaro Koskinen <aaro.koskinen@iki.fi>,
	Wolfram Sang <wsa+renesas@sang-engineering.com>,
	Adrian Hunter <adrian.hunter@intel.com>,
	Florian Fainelli <florian.fainelli@broadcom.com>,
	Ray Jui <rjui@broadcom.com>,
	Scott Branden <sbranden@broadcom.com>,
	Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com>,
	Alex Dubov <oakad@yahoo.com>,
	Kunihiko Hayashi <hayashi.kunihiko@socionext.com>,
	Masami Hiramatsu <mhiramat@kernel.org>,
	Bruce Chang <brucechang@via.com.tw>,
	Harald Welte <HaraldWelte@viatech.com>,
	Pierre Ossman <pierre@ossman.eu>
Cc: Allen Pais <allen.lkml@gmail.com>,
	Christian Loehle <christian.loehle@arm.com>,
	linux-mmc@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org,
	linux-omap@vger.kernel.org,
	linux-renesas-soc@vger.kernel.org
Subject: [PATCH v4] mmc: Convert from tasklet to BH workqueue
Date: Tue, 25 Jun 2024 10:09:34 -0700
Message-Id: <20240625170938.2579372-1-allen.lkml@gmail.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258504
Newsgroups: org.kernel.vger.linux-kernel,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-mmc,org.kernel.vger.linux-omap,org.kernel.vger.linux-renesas-soc
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

The only generic interface to execute asynchronously in the BH context is
tasklet; however, it's marked deprecated and has some design flaws. To
replace tasklets, BH workqueue support was recently added. A BH workqueue
behaves similarly to regular workqueues except that the queued work items
are executed in the BH context.

This patch converts drivers/mmc/* from tasklet to BH workqueue.

Based on the work done by Tejun Heo <tj@kernel.org>

Tested-by: Christian Loehle <christian.loehle@arm.com>
Tested-by: Aubin Constans <aubin.constans@microchip.com>
Acked-by: Aubin Constans <aubin.constans@microchip.com>
Acked-by: MichaÅ‚ MirosÅ‚aw <mirq-linux@rere.qmqm.pl>
Reviewed-by: Christian Loehle <christian.loehle@arm.com>
Signed-off-by: Allen Pais <allen.lkml@gmail.com>
---
v4:
   - dropped changes to renasas sdhci(dma_complete)
   - Wolfram to send a patch for it.
v3:
   - fixed a comment - [Adrian Hunter]
v2:
   - fixed patch styling issues
   - rename work to bh_work

Link to v1:
https://lore.kernel.org/all/20240327160314.9982-10-apais@linux.microsoft.com/
---
 drivers/mmc/host/atmel-mci.c                  | 35 ++++-----
 drivers/mmc/host/au1xmmc.c                    | 37 +++++-----
 drivers/mmc/host/cb710-mmc.c                  | 14 ++--
 drivers/mmc/host/cb710-mmc.h                  |  3 +-
 drivers/mmc/host/dw_mmc.c                     | 24 +++---
 drivers/mmc/host/dw_mmc.h                     |  9 ++-
 drivers/mmc/host/omap.c                       | 17 +++--
 drivers/mmc/host/renesas_sdhi_internal_dmac.c |  9 +--
 drivers/mmc/host/renesas_sdhi_sys_dmac.c      |  9 +--
 drivers/mmc/host/sdhci-bcm-kona.c             |  2 +-
 drivers/mmc/host/tifm_sd.c                    | 15 ++--
 drivers/mmc/host/tmio_mmc.h                   |  3 +-
 drivers/mmc/host/tmio_mmc_core.c              |  4 +-
 drivers/mmc/host/uniphier-sd.c                | 12 +--
 drivers/mmc/host/via-sdmmc.c                  | 25 ++++---
 drivers/mmc/host/wbsd.c                       | 74 +++++++++----------
 drivers/mmc/host/wbsd.h                       | 10 +--
 17 files changed, 154 insertions(+), 148 deletions(-)

diff --git a/drivers/mmc/host/atmel-mci.c b/drivers/mmc/host/atmel-mci.c
index 8199d9620075..6490df54a6f5 100644
--- a/drivers/mmc/host/atmel-mci.c
+++ b/drivers/mmc/host/atmel-mci.c
@@ -33,6 +33,7 @@
 #include <linux/pm.h>
 #include <linux/pm_runtime.h>
 #include <linux/pinctrl/consumer.h>
+#include <linux/workqueue.h>
 
 #include <asm/cacheflush.h>
 #include <asm/io.h>
@@ -272,12 +273,12 @@ struct atmel_mci_dma {
  *	EVENT_DATA_ERROR is pending.
  * @stop_cmdr: Value to be loaded into CMDR when the stop command is
  *	to be sent.
- * @tasklet: Tasklet running the request state machine.
+ * @bh_work: Work running the request state machine.
  * @pending_events: Bitmask of events flagged by the interrupt handler
- *	to be processed by the tasklet.
+ *	to be processed by the work.
  * @completed_events: Bitmask of events which the state machine has
  *	processed.
- * @state: Tasklet state.
+ * @state: Work state.
  * @queue: List of slots waiting for access to the controller.
  * @need_clock_update: Update the clock rate before the next request.
  * @need_reset: Reset controller before next request.
@@ -352,7 +353,7 @@ struct atmel_mci {
 	u32			data_status;
 	u32			stop_cmdr;
 
-	struct tasklet_struct	tasklet;
+	struct work_struct	bh_work;
 	unsigned long		pending_events;
 	unsigned long		completed_events;
 	enum atmel_mci_state	state;
@@ -735,7 +736,7 @@ static void atmci_timeout_timer(struct timer_list *t)
 	host->need_reset = 1;
 	host->state = STATE_END_REQUEST;
 	smp_wmb();
-	tasklet_schedule(&host->tasklet);
+	queue_work(system_bh_wq, &host->bh_work);
 }
 
 static inline unsigned int atmci_ns_to_clocks(struct atmel_mci *host,
@@ -958,7 +959,7 @@ static void atmci_pdc_complete(struct atmel_mci *host)
 
 	dev_dbg(dev, "(%s) set pending xfer complete\n", __func__);
 	atmci_set_pending(host, EVENT_XFER_COMPLETE);
-	tasklet_schedule(&host->tasklet);
+	queue_work(system_bh_wq, &host->bh_work);
 }
 
 static void atmci_dma_cleanup(struct atmel_mci *host)
@@ -972,7 +973,7 @@ static void atmci_dma_cleanup(struct atmel_mci *host)
 }
 
 /*
- * This function is called by the DMA driver from tasklet context.
+ * This function is called by the DMA driver from bh context.
  */
 static void atmci_dma_complete(void *arg)
 {
@@ -995,7 +996,7 @@ static void atmci_dma_complete(void *arg)
 	if (data) {
 		dev_dbg(dev, "(%s) set pending xfer complete\n", __func__);
 		atmci_set_pending(host, EVENT_XFER_COMPLETE);
-		tasklet_schedule(&host->tasklet);
+		queue_work(system_bh_wq, &host->bh_work);
 
 		/*
 		 * Regardless of what the documentation says, we have
@@ -1008,7 +1009,7 @@ static void atmci_dma_complete(void *arg)
 		 * haven't seen all the potential error bits yet.
 		 *
 		 * The interrupt handler will schedule a different
-		 * tasklet to finish things up when the data transfer
+		 * bh work to finish things up when the data transfer
 		 * is completely done.
 		 *
 		 * We may not complete the mmc request here anyway
@@ -1745,9 +1746,9 @@ static void atmci_detect_change(struct timer_list *t)
 	}
 }
 
-static void atmci_tasklet_func(struct tasklet_struct *t)
+static void atmci_work_func(struct work_struct *t)
 {
-	struct atmel_mci        *host = from_tasklet(host, t, tasklet);
+	struct atmel_mci        *host = from_work(host, t, bh_work);
 	struct mmc_request	*mrq = host->mrq;
 	struct mmc_data		*data = host->data;
 	struct device		*dev = host->dev;
@@ -1759,7 +1760,7 @@ static void atmci_tasklet_func(struct tasklet_struct *t)
 
 	state = host->state;
 
-	dev_vdbg(dev, "tasklet: state %u pending/completed/mask %lx/%lx/%x\n",
+	dev_vdbg(dev, "bh_work: state %u pending/completed/mask %lx/%lx/%x\n",
 		state, host->pending_events, host->completed_events,
 		atmci_readl(host, ATMCI_IMR));
 
@@ -2118,7 +2119,7 @@ static irqreturn_t atmci_interrupt(int irq, void *dev_id)
 			dev_dbg(dev, "set pending data error\n");
 			smp_wmb();
 			atmci_set_pending(host, EVENT_DATA_ERROR);
-			tasklet_schedule(&host->tasklet);
+			queue_work(system_bh_wq, &host->bh_work);
 		}
 
 		if (pending & ATMCI_TXBUFE) {
@@ -2187,7 +2188,7 @@ static irqreturn_t atmci_interrupt(int irq, void *dev_id)
 			smp_wmb();
 			dev_dbg(dev, "set pending notbusy\n");
 			atmci_set_pending(host, EVENT_NOTBUSY);
-			tasklet_schedule(&host->tasklet);
+			queue_work(system_bh_wq, &host->bh_work);
 		}
 
 		if (pending & ATMCI_NOTBUSY) {
@@ -2196,7 +2197,7 @@ static irqreturn_t atmci_interrupt(int irq, void *dev_id)
 			smp_wmb();
 			dev_dbg(dev, "set pending notbusy\n");
 			atmci_set_pending(host, EVENT_NOTBUSY);
-			tasklet_schedule(&host->tasklet);
+			queue_work(system_bh_wq, &host->bh_work);
 		}
 
 		if (pending & ATMCI_RXRDY)
@@ -2211,7 +2212,7 @@ static irqreturn_t atmci_interrupt(int irq, void *dev_id)
 			smp_wmb();
 			dev_dbg(dev, "set pending cmd rdy\n");
 			atmci_set_pending(host, EVENT_CMD_RDY);
-			tasklet_schedule(&host->tasklet);
+			queue_work(system_bh_wq, &host->bh_work);
 		}
 
 		if (pending & (ATMCI_SDIOIRQA | ATMCI_SDIOIRQB))
@@ -2487,7 +2488,7 @@ static int atmci_probe(struct platform_device *pdev)
 
 	host->mapbase = regs->start;
 
-	tasklet_setup(&host->tasklet, atmci_tasklet_func);
+	INIT_WORK(&host->bh_work, atmci_work_func);
 
 	ret = request_irq(irq, atmci_interrupt, 0, dev_name(dev), host);
 	if (ret) {
diff --git a/drivers/mmc/host/au1xmmc.c b/drivers/mmc/host/au1xmmc.c
index b5a5c6a2fe8b..6e80bcb668ec 100644
--- a/drivers/mmc/host/au1xmmc.c
+++ b/drivers/mmc/host/au1xmmc.c
@@ -42,6 +42,7 @@
 #include <linux/leds.h>
 #include <linux/mmc/host.h>
 #include <linux/slab.h>
+#include <linux/workqueue.h>
 
 #include <asm/io.h>
 #include <asm/mach-au1x00/au1000.h>
@@ -113,8 +114,8 @@ struct au1xmmc_host {
 
 	int irq;
 
-	struct tasklet_struct finish_task;
-	struct tasklet_struct data_task;
+	struct work_struct finish_bh_work;
+	struct work_struct data_bh_work;
 	struct au1xmmc_platform_data *platdata;
 	struct platform_device *pdev;
 	struct resource *ioarea;
@@ -253,9 +254,9 @@ static void au1xmmc_finish_request(struct au1xmmc_host *host)
 	mmc_request_done(host->mmc, mrq);
 }
 
-static void au1xmmc_tasklet_finish(struct tasklet_struct *t)
+static void au1xmmc_finish_bh_work(struct work_struct *t)
 {
-	struct au1xmmc_host *host = from_tasklet(host, t, finish_task);
+	struct au1xmmc_host *host = from_work(host, t, finish_bh_work);
 	au1xmmc_finish_request(host);
 }
 
@@ -363,9 +364,9 @@ static void au1xmmc_data_complete(struct au1xmmc_host *host, u32 status)
 	au1xmmc_finish_request(host);
 }
 
-static void au1xmmc_tasklet_data(struct tasklet_struct *t)
+static void au1xmmc_data_bh_work(struct work_struct *t)
 {
-	struct au1xmmc_host *host = from_tasklet(host, t, data_task);
+	struct au1xmmc_host *host = from_work(host, t, data_bh_work);
 
 	u32 status = __raw_readl(HOST_STATUS(host));
 	au1xmmc_data_complete(host, status);
@@ -425,7 +426,7 @@ static void au1xmmc_send_pio(struct au1xmmc_host *host)
 		if (host->flags & HOST_F_STOP)
 			SEND_STOP(host);
 
-		tasklet_schedule(&host->data_task);
+		queue_work(system_bh_wq, &host->data_bh_work);
 	}
 }
 
@@ -505,7 +506,7 @@ static void au1xmmc_receive_pio(struct au1xmmc_host *host)
 		if (host->flags & HOST_F_STOP)
 			SEND_STOP(host);
 
-		tasklet_schedule(&host->data_task);
+		queue_work(system_bh_wq, &host->data_bh_work);
 	}
 }
 
@@ -561,7 +562,7 @@ static void au1xmmc_cmd_complete(struct au1xmmc_host *host, u32 status)
 
 	if (!trans || cmd->error) {
 		IRQ_OFF(host, SD_CONFIG_TH | SD_CONFIG_RA | SD_CONFIG_RF);
-		tasklet_schedule(&host->finish_task);
+		queue_work(system_bh_wq, &host->finish_bh_work);
 		return;
 	}
 
@@ -797,7 +798,7 @@ static irqreturn_t au1xmmc_irq(int irq, void *dev_id)
 		IRQ_OFF(host, SD_CONFIG_NE | SD_CONFIG_TH);
 
 		/* IRQ_OFF(host, SD_CONFIG_TH | SD_CONFIG_RA | SD_CONFIG_RF); */
-		tasklet_schedule(&host->finish_task);
+		queue_work(system_bh_wq, &host->finish_bh_work);
 	}
 #if 0
 	else if (status & SD_STATUS_DD) {
@@ -806,7 +807,7 @@ static irqreturn_t au1xmmc_irq(int irq, void *dev_id)
 			au1xmmc_receive_pio(host);
 		else {
 			au1xmmc_data_complete(host, status);
-			/* tasklet_schedule(&host->data_task); */
+			/* queue_work(system_bh_wq, &host->data_bh_work); */
 		}
 	}
 #endif
@@ -854,7 +855,7 @@ static void au1xmmc_dbdma_callback(int irq, void *dev_id)
 	if (host->flags & HOST_F_STOP)
 		SEND_STOP(host);
 
-	tasklet_schedule(&host->data_task);
+	queue_work(system_bh_wq, &host->data_bh_work);
 }
 
 static int au1xmmc_dbdma_init(struct au1xmmc_host *host)
@@ -1039,9 +1040,9 @@ static int au1xmmc_probe(struct platform_device *pdev)
 	if (host->platdata)
 		mmc->caps &= ~(host->platdata->mask_host_caps);
 
-	tasklet_setup(&host->data_task, au1xmmc_tasklet_data);
+	INIT_WORK(&host->data_bh_work, au1xmmc_data_bh_work);
 
-	tasklet_setup(&host->finish_task, au1xmmc_tasklet_finish);
+	INIT_WORK(&host->finish_bh_work, au1xmmc_finish_bh_work);
 
 	if (has_dbdma()) {
 		ret = au1xmmc_dbdma_init(host);
@@ -1091,8 +1092,8 @@ static int au1xmmc_probe(struct platform_device *pdev)
 	if (host->flags & HOST_F_DBDMA)
 		au1xmmc_dbdma_shutdown(host);
 
-	tasklet_kill(&host->data_task);
-	tasklet_kill(&host->finish_task);
+	cancel_work_sync(&host->data_bh_work);
+	cancel_work_sync(&host->finish_bh_work);
 
 	if (host->platdata && host->platdata->cd_setup &&
 	    !(mmc->caps & MMC_CAP_NEEDS_POLL))
@@ -1135,8 +1136,8 @@ static void au1xmmc_remove(struct platform_device *pdev)
 		__raw_writel(0, HOST_CONFIG2(host));
 		wmb(); /* drain writebuffer */
 
-		tasklet_kill(&host->data_task);
-		tasklet_kill(&host->finish_task);
+		cancel_work_sync(&host->data_bh_work);
+		cancel_work_sync(&host->finish_bh_work);
 
 		if (host->flags & HOST_F_DBDMA)
 			au1xmmc_dbdma_shutdown(host);
diff --git a/drivers/mmc/host/cb710-mmc.c b/drivers/mmc/host/cb710-mmc.c
index 0aec33b88bef..902f7f20abaa 100644
--- a/drivers/mmc/host/cb710-mmc.c
+++ b/drivers/mmc/host/cb710-mmc.c
@@ -493,7 +493,7 @@ static void cb710_mmc_request(struct mmc_host *mmc, struct mmc_request *mrq)
 	if (!cb710_mmc_command(mmc, mrq->cmd) && mrq->stop)
 		cb710_mmc_command(mmc, mrq->stop);
 
-	tasklet_schedule(&reader->finish_req_tasklet);
+	queue_work(system_bh_wq, &reader->finish_req_bh_work);
 }
 
 static int cb710_mmc_powerup(struct cb710_slot *slot)
@@ -646,10 +646,10 @@ static int cb710_mmc_irq_handler(struct cb710_slot *slot)
 	return 1;
 }
 
-static void cb710_mmc_finish_request_tasklet(struct tasklet_struct *t)
+static void cb710_mmc_finish_request_bh_work(struct work_struct *t)
 {
-	struct cb710_mmc_reader *reader = from_tasklet(reader, t,
-						       finish_req_tasklet);
+	struct cb710_mmc_reader *reader = from_work(reader, t,
+						       finish_req_bh_work);
 	struct mmc_request *mrq = reader->mrq;
 
 	reader->mrq = NULL;
@@ -718,8 +718,8 @@ static int cb710_mmc_init(struct platform_device *pdev)
 
 	reader = mmc_priv(mmc);
 
-	tasklet_setup(&reader->finish_req_tasklet,
-		      cb710_mmc_finish_request_tasklet);
+	INIT_WORK(&reader->finish_req_bh_work,
+			cb710_mmc_finish_request_bh_work);
 	spin_lock_init(&reader->irq_lock);
 	cb710_dump_regs(chip, CB710_DUMP_REGS_MMC);
 
@@ -763,7 +763,7 @@ static void cb710_mmc_exit(struct platform_device *pdev)
 	cb710_write_port_32(slot, CB710_MMC_CONFIG_PORT, 0);
 	cb710_write_port_16(slot, CB710_MMC_CONFIGB_PORT, 0);
 
-	tasklet_kill(&reader->finish_req_tasklet);
+	cancel_work_sync(&reader->finish_req_bh_work);
 
 	mmc_free_host(mmc);
 }
diff --git a/drivers/mmc/host/cb710-mmc.h b/drivers/mmc/host/cb710-mmc.h
index 5e053077dbed..59abaccaad10 100644
--- a/drivers/mmc/host/cb710-mmc.h
+++ b/drivers/mmc/host/cb710-mmc.h
@@ -8,10 +8,11 @@
 #define LINUX_CB710_MMC_H
 
 #include <linux/cb710.h>
+#include <linux/workqueue.h>
 
 /* per-MMC-reader structure */
 struct cb710_mmc_reader {
-	struct tasklet_struct finish_req_tasklet;
+	struct work_struct finish_req_bh_work;
 	struct mmc_request *mrq;
 	spinlock_t irq_lock;
 	unsigned char last_power_mode;
diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c
index 8e2d676b9239..7195de2cde44 100644
--- a/drivers/mmc/host/dw_mmc.c
+++ b/drivers/mmc/host/dw_mmc.c
@@ -493,7 +493,7 @@ static void dw_mci_dmac_complete_dma(void *arg)
 	 */
 	if (data) {
 		set_bit(EVENT_XFER_COMPLETE, &host->pending_events);
-		tasklet_schedule(&host->tasklet);
+		queue_work(system_bh_wq, &host->bh_work);
 	}
 }
 
@@ -1834,7 +1834,7 @@ static enum hrtimer_restart dw_mci_fault_timer(struct hrtimer *t)
 	if (!host->data_status) {
 		host->data_status = SDMMC_INT_DCRC;
 		set_bit(EVENT_DATA_ERROR, &host->pending_events);
-		tasklet_schedule(&host->tasklet);
+		queue_work(system_bh_wq, &host->bh_work);
 	}
 
 	spin_unlock_irqrestore(&host->irq_lock, flags);
@@ -2056,9 +2056,9 @@ static bool dw_mci_clear_pending_data_complete(struct dw_mci *host)
 	return true;
 }
 
-static void dw_mci_tasklet_func(struct tasklet_struct *t)
+static void dw_mci_work_func(struct work_struct *t)
 {
-	struct dw_mci *host = from_tasklet(host, t, tasklet);
+	struct dw_mci *host = from_work(host, t, bh_work);
 	struct mmc_data	*data;
 	struct mmc_command *cmd;
 	struct mmc_request *mrq;
@@ -2113,7 +2113,7 @@ static void dw_mci_tasklet_func(struct tasklet_struct *t)
 				 * will waste a bit of time (we already know
 				 * the command was bad), it can't cause any
 				 * errors since it's possible it would have
-				 * taken place anyway if this tasklet got
+				 * taken place anyway if this bh work got
 				 * delayed. Allowing the transfer to take place
 				 * avoids races and keeps things simple.
 				 */
@@ -2706,7 +2706,7 @@ static void dw_mci_cmd_interrupt(struct dw_mci *host, u32 status)
 	smp_wmb(); /* drain writebuffer */
 
 	set_bit(EVENT_CMD_COMPLETE, &host->pending_events);
-	tasklet_schedule(&host->tasklet);
+	queue_work(system_bh_wq, &host->bh_work);
 
 	dw_mci_start_fault_timer(host);
 }
@@ -2774,7 +2774,7 @@ static irqreturn_t dw_mci_interrupt(int irq, void *dev_id)
 				set_bit(EVENT_DATA_COMPLETE,
 					&host->pending_events);
 
-			tasklet_schedule(&host->tasklet);
+			queue_work(system_bh_wq, &host->bh_work);
 
 			spin_unlock(&host->irq_lock);
 		}
@@ -2793,7 +2793,7 @@ static irqreturn_t dw_mci_interrupt(int irq, void *dev_id)
 					dw_mci_read_data_pio(host, true);
 			}
 			set_bit(EVENT_DATA_COMPLETE, &host->pending_events);
-			tasklet_schedule(&host->tasklet);
+			queue_work(system_bh_wq, &host->bh_work);
 
 			spin_unlock(&host->irq_lock);
 		}
@@ -3098,7 +3098,7 @@ static void dw_mci_cmd11_timer(struct timer_list *t)
 
 	host->cmd_status = SDMMC_INT_RTO;
 	set_bit(EVENT_CMD_COMPLETE, &host->pending_events);
-	tasklet_schedule(&host->tasklet);
+	queue_work(system_bh_wq, &host->bh_work);
 }
 
 static void dw_mci_cto_timer(struct timer_list *t)
@@ -3144,7 +3144,7 @@ static void dw_mci_cto_timer(struct timer_list *t)
 		 */
 		host->cmd_status = SDMMC_INT_RTO;
 		set_bit(EVENT_CMD_COMPLETE, &host->pending_events);
-		tasklet_schedule(&host->tasklet);
+		queue_work(system_bh_wq, &host->bh_work);
 		break;
 	default:
 		dev_warn(host->dev, "Unexpected command timeout, state %d\n",
@@ -3195,7 +3195,7 @@ static void dw_mci_dto_timer(struct timer_list *t)
 		host->data_status = SDMMC_INT_DRTO;
 		set_bit(EVENT_DATA_ERROR, &host->pending_events);
 		set_bit(EVENT_DATA_COMPLETE, &host->pending_events);
-		tasklet_schedule(&host->tasklet);
+		queue_work(system_bh_wq, &host->bh_work);
 		break;
 	default:
 		dev_warn(host->dev, "Unexpected data timeout, state %d\n",
@@ -3435,7 +3435,7 @@ int dw_mci_probe(struct dw_mci *host)
 	else
 		host->fifo_reg = host->regs + DATA_240A_OFFSET;
 
-	tasklet_setup(&host->tasklet, dw_mci_tasklet_func);
+	INIT_WORK(&host->bh_work, dw_mci_work_func);
 	ret = devm_request_irq(host->dev, host->irq, dw_mci_interrupt,
 			       host->irq_flags, "dw-mci", host);
 	if (ret)
diff --git a/drivers/mmc/host/dw_mmc.h b/drivers/mmc/host/dw_mmc.h
index 4ed81f94f7ca..b504f7ae513a 100644
--- a/drivers/mmc/host/dw_mmc.h
+++ b/drivers/mmc/host/dw_mmc.h
@@ -17,6 +17,7 @@
 #include <linux/fault-inject.h>
 #include <linux/hrtimer.h>
 #include <linux/interrupt.h>
+#include <linux/workqueue.h>
 
 enum dw_mci_state {
 	STATE_IDLE = 0,
@@ -89,12 +90,12 @@ struct dw_mci_dma_slave {
  * @stop_cmdr: Value to be loaded into CMDR when the stop command is
  *	to be sent.
  * @dir_status: Direction of current transfer.
- * @tasklet: Tasklet running the request state machine.
+ * @bh_work: Work running the request state machine.
  * @pending_events: Bitmask of events flagged by the interrupt handler
- *	to be processed by the tasklet.
+ *	to be processed by bh work.
  * @completed_events: Bitmask of events which the state machine has
  *	processed.
- * @state: Tasklet state.
+ * @state: BH work state.
  * @queue: List of slots waiting for access to the controller.
  * @bus_hz: The rate of @mck in Hz. This forms the basis for MMC bus
  *	rate and timeout calculations.
@@ -194,7 +195,7 @@ struct dw_mci {
 	u32			data_status;
 	u32			stop_cmdr;
 	u32			dir_status;
-	struct tasklet_struct	tasklet;
+	struct work_struct	bh_work;
 	unsigned long		pending_events;
 	unsigned long		completed_events;
 	enum dw_mci_state	state;
diff --git a/drivers/mmc/host/omap.c b/drivers/mmc/host/omap.c
index a8ee0df47148..335350a4e99a 100644
--- a/drivers/mmc/host/omap.c
+++ b/drivers/mmc/host/omap.c
@@ -28,6 +28,7 @@
 #include <linux/slab.h>
 #include <linux/gpio/consumer.h>
 #include <linux/platform_data/mmc-omap.h>
+#include <linux/workqueue.h>
 
 
 #define	OMAP_MMC_REG_CMD	0x00
@@ -105,7 +106,7 @@ struct mmc_omap_slot {
 	u16			power_mode;
 	unsigned int		fclk_freq;
 
-	struct tasklet_struct	cover_tasklet;
+	struct work_struct	cover_bh_work;
 	struct timer_list       cover_timer;
 	unsigned		cover_open;
 
@@ -873,18 +874,18 @@ void omap_mmc_notify_cover_event(struct device *dev, int num, int is_closed)
 		sysfs_notify(&slot->mmc->class_dev.kobj, NULL, "cover_switch");
 	}
 
-	tasklet_hi_schedule(&slot->cover_tasklet);
+	queue_work(system_bh_highpri_wq, &slot->cover_bh_work);
 }
 
 static void mmc_omap_cover_timer(struct timer_list *t)
 {
 	struct mmc_omap_slot *slot = from_timer(slot, t, cover_timer);
-	tasklet_schedule(&slot->cover_tasklet);
+	queue_work(system_bh_wq, &slot->cover_bh_work);
 }
 
-static void mmc_omap_cover_handler(struct tasklet_struct *t)
+static void mmc_omap_cover_bh_handler(struct work_struct *t)
 {
-	struct mmc_omap_slot *slot = from_tasklet(slot, t, cover_tasklet);
+	struct mmc_omap_slot *slot = from_work(slot, t, cover_bh_work);
 	int cover_open = mmc_omap_cover_is_open(slot);
 
 	mmc_detect_change(slot->mmc, 0);
@@ -1314,7 +1315,7 @@ static int mmc_omap_new_slot(struct mmc_omap_host *host, int id)
 
 	if (slot->pdata->get_cover_state != NULL) {
 		timer_setup(&slot->cover_timer, mmc_omap_cover_timer, 0);
-		tasklet_setup(&slot->cover_tasklet, mmc_omap_cover_handler);
+		INIT_WORK(&slot->cover_bh_work, mmc_omap_cover_bh_handler);
 	}
 
 	r = mmc_add_host(mmc);
@@ -1333,7 +1334,7 @@ static int mmc_omap_new_slot(struct mmc_omap_host *host, int id)
 					&dev_attr_cover_switch);
 		if (r < 0)
 			goto err_remove_slot_name;
-		tasklet_schedule(&slot->cover_tasklet);
+		queue_work(system_bh_wq, &slot->cover_bh_work);
 	}
 
 	return 0;
@@ -1356,7 +1357,7 @@ static void mmc_omap_remove_slot(struct mmc_omap_slot *slot)
 	if (slot->pdata->get_cover_state != NULL)
 		device_remove_file(&mmc->class_dev, &dev_attr_cover_switch);
 
-	tasklet_kill(&slot->cover_tasklet);
+	cancel_work_sync(&slot->cover_bh_work);
 	del_timer_sync(&slot->cover_timer);
 	flush_workqueue(slot->host->mmc_omap_wq);
 
diff --git a/drivers/mmc/host/renesas_sdhi_internal_dmac.c b/drivers/mmc/host/renesas_sdhi_internal_dmac.c
index 422fa63a2e99..abf2db3c8e08 100644
--- a/drivers/mmc/host/renesas_sdhi_internal_dmac.c
+++ b/drivers/mmc/host/renesas_sdhi_internal_dmac.c
@@ -440,9 +440,9 @@ renesas_sdhi_internal_dmac_start_dma(struct tmio_mmc_host *host,
 	renesas_sdhi_internal_dmac_enable_dma(host, false);
 }
 
-static void renesas_sdhi_internal_dmac_issue_tasklet_fn(unsigned long arg)
+static void renesas_sdhi_internal_dmac_issue_work_fn(struct work_struct *work)
 {
-	struct tmio_mmc_host *host = (struct tmio_mmc_host *)arg;
+	struct tmio_mmc_host *host = from_work(host, work, dma_issue);
 	struct renesas_sdhi *priv = host_to_priv(host);
 
 	tmio_mmc_enable_mmc_irqs(host, TMIO_STAT_DATAEND);
@@ -547,9 +547,8 @@ renesas_sdhi_internal_dmac_request_dma(struct tmio_mmc_host *host,
 	tasklet_init(&priv->dma_priv.dma_complete,
 		     renesas_sdhi_internal_dmac_complete_tasklet_fn,
 		     (unsigned long)host);
-	tasklet_init(&host->dma_issue,
-		     renesas_sdhi_internal_dmac_issue_tasklet_fn,
-		     (unsigned long)host);
+	INIT_WORK(&host->dma_issue,
+		     renesas_sdhi_internal_dmac_issue_bh_work_fn);
 
 	/* Add pre_req and post_req */
 	host->ops.pre_req = renesas_sdhi_internal_dmac_pre_req;
diff --git a/drivers/mmc/host/renesas_sdhi_sys_dmac.c b/drivers/mmc/host/renesas_sdhi_sys_dmac.c
index 9cf7f9feab72..c55218cb426d 100644
--- a/drivers/mmc/host/renesas_sdhi_sys_dmac.c
+++ b/drivers/mmc/host/renesas_sdhi_sys_dmac.c
@@ -312,9 +312,9 @@ static void renesas_sdhi_sys_dmac_start_dma(struct tmio_mmc_host *host,
 	}
 }
 
-static void renesas_sdhi_sys_dmac_issue_tasklet_fn(unsigned long priv)
+static void renesas_sdhi_sys_dmac_issue_work_fn(struct work_struct *work)
 {
-	struct tmio_mmc_host *host = (struct tmio_mmc_host *)priv;
+	struct tmio_mmc_host *host = from_work(host, work, dma_issue);
 	struct dma_chan *chan = NULL;
 
 	spin_lock_irq(&host->lock);
@@ -401,9 +401,8 @@ static void renesas_sdhi_sys_dmac_request_dma(struct tmio_mmc_host *host,
 			goto ebouncebuf;
 
 		init_completion(&priv->dma_priv.dma_dataend);
-		tasklet_init(&host->dma_issue,
-			     renesas_sdhi_sys_dmac_issue_tasklet_fn,
-			     (unsigned long)host);
+		INIT_WORK(&host->dma_issue,
+			     renesas_sdhi_sys_dmac_issue_work_fn);
 	}
 
 	renesas_sdhi_sys_dmac_enable_dma(host, true);
diff --git a/drivers/mmc/host/sdhci-bcm-kona.c b/drivers/mmc/host/sdhci-bcm-kona.c
index cb9152c6a65d..e067c7f5c537 100644
--- a/drivers/mmc/host/sdhci-bcm-kona.c
+++ b/drivers/mmc/host/sdhci-bcm-kona.c
@@ -107,7 +107,7 @@ static void sdhci_bcm_kona_sd_init(struct sdhci_host *host)
  * Software emulation of the SD card insertion/removal. Set insert=1 for insert
  * and insert=0 for removal. The card detection is done by GPIO. For Broadcom
  * IP to function properly the bit 0 of CORESTAT register needs to be set/reset
- * to generate the CD IRQ handled in sdhci.c which schedules card_tasklet.
+* to generate the CD IRQ handled in sdhci.c
  */
 static int sdhci_bcm_kona_sd_card_emulate(struct sdhci_host *host, int insert)
 {
diff --git a/drivers/mmc/host/tifm_sd.c b/drivers/mmc/host/tifm_sd.c
index b5a2f2f25ad9..aea14bf3e2e8 100644
--- a/drivers/mmc/host/tifm_sd.c
+++ b/drivers/mmc/host/tifm_sd.c
@@ -13,6 +13,7 @@
 #include <linux/highmem.h>
 #include <linux/scatterlist.h>
 #include <linux/module.h>
+#include <linux/workqueue.h>
 #include <asm/io.h>
 
 #define DRIVER_NAME "tifm_sd"
@@ -97,7 +98,7 @@ struct tifm_sd {
 	unsigned int          clk_div;
 	unsigned long         timeout_jiffies;
 
-	struct tasklet_struct finish_tasklet;
+	struct work_struct    finish_bh_work;
 	struct timer_list     timer;
 	struct mmc_request    *req;
 
@@ -463,7 +464,7 @@ static void tifm_sd_check_status(struct tifm_sd *host)
 		}
 	}
 finish_request:
-	tasklet_schedule(&host->finish_tasklet);
+	queue_work(system_bh_wq, &host->finish_bh_work);
 }
 
 /* Called from interrupt handler */
@@ -723,9 +724,9 @@ static void tifm_sd_request(struct mmc_host *mmc, struct mmc_request *mrq)
 	mmc_request_done(mmc, mrq);
 }
 
-static void tifm_sd_end_cmd(struct tasklet_struct *t)
+static void tifm_sd_end_cmd(struct work_struct *t)
 {
-	struct tifm_sd *host = from_tasklet(host, t, finish_tasklet);
+	struct tifm_sd *host = from_work(host, t, finish_bh_work);
 	struct tifm_dev *sock = host->dev;
 	struct mmc_host *mmc = tifm_get_drvdata(sock);
 	struct mmc_request *mrq;
@@ -960,7 +961,7 @@ static int tifm_sd_probe(struct tifm_dev *sock)
 	 */
 	mmc->max_busy_timeout = TIFM_MMCSD_REQ_TIMEOUT_MS;
 
-	tasklet_setup(&host->finish_tasklet, tifm_sd_end_cmd);
+	INIT_WORK(&host->finish_bh_work, tifm_sd_end_cmd);
 	timer_setup(&host->timer, tifm_sd_abort, 0);
 
 	mmc->ops = &tifm_sd_ops;
@@ -999,7 +1000,7 @@ static void tifm_sd_remove(struct tifm_dev *sock)
 	writel(0, sock->addr + SOCK_MMCSD_INT_ENABLE);
 	spin_unlock_irqrestore(&sock->lock, flags);
 
-	tasklet_kill(&host->finish_tasklet);
+	cancel_work_sync(&host->finish_bh_work);
 
 	spin_lock_irqsave(&sock->lock, flags);
 	if (host->req) {
@@ -1009,7 +1010,7 @@ static void tifm_sd_remove(struct tifm_dev *sock)
 		host->req->cmd->error = -ENOMEDIUM;
 		if (host->req->stop)
 			host->req->stop->error = -ENOMEDIUM;
-		tasklet_schedule(&host->finish_tasklet);
+		queue_work(system_bh_wq, &host->finish_bh_work);
 	}
 	spin_unlock_irqrestore(&sock->lock, flags);
 	mmc_remove_host(mmc);
diff --git a/drivers/mmc/host/tmio_mmc.h b/drivers/mmc/host/tmio_mmc.h
index 2af5730c21f4..a75755f31d31 100644
--- a/drivers/mmc/host/tmio_mmc.h
+++ b/drivers/mmc/host/tmio_mmc.h
@@ -21,6 +21,7 @@
 #include <linux/scatterlist.h>
 #include <linux/spinlock.h>
 #include <linux/interrupt.h>
+#include <linux/workqueue.h>
 
 #define CTL_SD_CMD 0x00
 #define CTL_ARG_REG 0x04
@@ -153,7 +154,7 @@ struct tmio_mmc_host {
 	bool			dma_on;
 	struct dma_chan		*chan_rx;
 	struct dma_chan		*chan_tx;
-	struct tasklet_struct	dma_issue;
+	struct work_struct	dma_issue;
 	struct scatterlist	bounce_sg;
 	u8			*bounce_buf;
 
diff --git a/drivers/mmc/host/tmio_mmc_core.c b/drivers/mmc/host/tmio_mmc_core.c
index 2780f0a29871..b61a6310311d 100644
--- a/drivers/mmc/host/tmio_mmc_core.c
+++ b/drivers/mmc/host/tmio_mmc_core.c
@@ -608,7 +608,7 @@ static void tmio_mmc_cmd_irq(struct tmio_mmc_host *host, unsigned int stat)
 			} else {
 				tmio_mmc_disable_mmc_irqs(host,
 							  TMIO_MASK_READOP);
-				tasklet_schedule(&host->dma_issue);
+				queue_work(system_bh_wq, &host->dma_issue);
 			}
 		} else {
 			if (!host->dma_on) {
@@ -616,7 +616,7 @@ static void tmio_mmc_cmd_irq(struct tmio_mmc_host *host, unsigned int stat)
 			} else {
 				tmio_mmc_disable_mmc_irqs(host,
 							  TMIO_MASK_WRITEOP);
-				tasklet_schedule(&host->dma_issue);
+				queue_work(system_bh_wq, &host->dma_issue);
 			}
 		}
 	} else {
diff --git a/drivers/mmc/host/uniphier-sd.c b/drivers/mmc/host/uniphier-sd.c
index 1404989e6151..417fd13efdfd 100644
--- a/drivers/mmc/host/uniphier-sd.c
+++ b/drivers/mmc/host/uniphier-sd.c
@@ -90,9 +90,9 @@ static void uniphier_sd_dma_endisable(struct tmio_mmc_host *host, int enable)
 }
 
 /* external DMA engine */
-static void uniphier_sd_external_dma_issue(struct tasklet_struct *t)
+static void uniphier_sd_external_dma_issue(struct work_struct *t)
 {
-	struct tmio_mmc_host *host = from_tasklet(host, t, dma_issue);
+	struct tmio_mmc_host *host = from_work(host, t, dma_issue);
 	struct uniphier_sd_priv *priv = uniphier_sd_priv(host);
 
 	uniphier_sd_dma_endisable(host, 1);
@@ -199,7 +199,7 @@ static void uniphier_sd_external_dma_request(struct tmio_mmc_host *host,
 	host->chan_rx = chan;
 	host->chan_tx = chan;
 
-	tasklet_setup(&host->dma_issue, uniphier_sd_external_dma_issue);
+	INIT_WORK(&host->dma_issue, uniphier_sd_external_dma_issue);
 }
 
 static void uniphier_sd_external_dma_release(struct tmio_mmc_host *host)
@@ -236,9 +236,9 @@ static const struct tmio_mmc_dma_ops uniphier_sd_external_dma_ops = {
 	.dataend = uniphier_sd_external_dma_dataend,
 };
 
-static void uniphier_sd_internal_dma_issue(struct tasklet_struct *t)
+static void uniphier_sd_internal_dma_issue(struct work_struct *t)
 {
-	struct tmio_mmc_host *host = from_tasklet(host, t, dma_issue);
+	struct tmio_mmc_host *host = from_work(host, t, dma_issue);
 	unsigned long flags;
 
 	spin_lock_irqsave(&host->lock, flags);
@@ -317,7 +317,7 @@ static void uniphier_sd_internal_dma_request(struct tmio_mmc_host *host,
 
 	host->chan_tx = (void *)0xdeadbeaf;
 
-	tasklet_setup(&host->dma_issue, uniphier_sd_internal_dma_issue);
+	INIT_WORK(&host->dma_issue, uniphier_sd_internal_dma_issue);
 }
 
 static void uniphier_sd_internal_dma_release(struct tmio_mmc_host *host)
diff --git a/drivers/mmc/host/via-sdmmc.c b/drivers/mmc/host/via-sdmmc.c
index ba6044b16e07..f77457105ec3 100644
--- a/drivers/mmc/host/via-sdmmc.c
+++ b/drivers/mmc/host/via-sdmmc.c
@@ -12,6 +12,7 @@
 #include <linux/interrupt.h>
 
 #include <linux/mmc/host.h>
+#include <linux/workqueue.h>
 
 #define DRV_NAME	"via_sdmmc"
 
@@ -307,7 +308,7 @@ struct via_crdr_mmc_host {
 	struct sdhcreg pm_sdhc_reg;
 
 	struct work_struct carddet_work;
-	struct tasklet_struct finish_tasklet;
+	struct work_struct finish_bh_work;
 
 	struct timer_list timer;
 	spinlock_t lock;
@@ -643,7 +644,7 @@ static void via_sdc_finish_data(struct via_crdr_mmc_host *host)
 	if (data->stop)
 		via_sdc_send_command(host, data->stop);
 	else
-		tasklet_schedule(&host->finish_tasklet);
+		queue_work(system_bh_wq, &host->finish_bh_work);
 }
 
 static void via_sdc_finish_command(struct via_crdr_mmc_host *host)
@@ -653,7 +654,7 @@ static void via_sdc_finish_command(struct via_crdr_mmc_host *host)
 	host->cmd->error = 0;
 
 	if (!host->cmd->data)
-		tasklet_schedule(&host->finish_tasklet);
+		queue_work(system_bh_wq, &host->finish_bh_work);
 
 	host->cmd = NULL;
 }
@@ -682,7 +683,7 @@ static void via_sdc_request(struct mmc_host *mmc, struct mmc_request *mrq)
 	status = readw(host->sdhc_mmiobase + VIA_CRDR_SDSTATUS);
 	if (!(status & VIA_CRDR_SDSTS_SLOTG) || host->reject) {
 		host->mrq->cmd->error = -ENOMEDIUM;
-		tasklet_schedule(&host->finish_tasklet);
+		queue_work(system_bh_wq, &host->finish_bh_work);
 	} else {
 		via_sdc_send_command(host, mrq->cmd);
 	}
@@ -848,7 +849,7 @@ static void via_sdc_cmd_isr(struct via_crdr_mmc_host *host, u16 intmask)
 		host->cmd->error = -EILSEQ;
 
 	if (host->cmd->error)
-		tasklet_schedule(&host->finish_tasklet);
+		queue_work(system_bh_wq, &host->finish_bh_work);
 	else if (intmask & VIA_CRDR_SDSTS_CRD)
 		via_sdc_finish_command(host);
 }
@@ -955,16 +956,16 @@ static void via_sdc_timeout(struct timer_list *t)
 				sdhost->cmd->error = -ETIMEDOUT;
 			else
 				sdhost->mrq->cmd->error = -ETIMEDOUT;
-			tasklet_schedule(&sdhost->finish_tasklet);
+			queue_work(system_bh_wq, &sdhost->finish_bh_work);
 		}
 	}
 
 	spin_unlock_irqrestore(&sdhost->lock, flags);
 }
 
-static void via_sdc_tasklet_finish(struct tasklet_struct *t)
+static void via_sdc_finish_bh_work(struct work_struct *t)
 {
-	struct via_crdr_mmc_host *host = from_tasklet(host, t, finish_tasklet);
+	struct via_crdr_mmc_host *host = from_work(host, t, finish_bh_work);
 	unsigned long flags;
 	struct mmc_request *mrq;
 
@@ -1005,7 +1006,7 @@ static void via_sdc_card_detect(struct work_struct *work)
 			pr_err("%s: Card removed during transfer!\n",
 			       mmc_hostname(host->mmc));
 			host->mrq->cmd->error = -ENOMEDIUM;
-			tasklet_schedule(&host->finish_tasklet);
+			queue_work(system_bh_wq, &host->finish_bh_work);
 		}
 
 		spin_unlock_irqrestore(&host->lock, flags);
@@ -1051,7 +1052,7 @@ static void via_init_mmc_host(struct via_crdr_mmc_host *host)
 
 	INIT_WORK(&host->carddet_work, via_sdc_card_detect);
 
-	tasklet_setup(&host->finish_tasklet, via_sdc_tasklet_finish);
+	INIT_WORK(&host->finish_bh_work, via_sdc_finish_bh_work);
 
 	addrbase = host->sdhc_mmiobase;
 	writel(0x0, addrbase + VIA_CRDR_SDINTMASK);
@@ -1193,7 +1194,7 @@ static void via_sd_remove(struct pci_dev *pcidev)
 		sdhost->mrq->cmd->error = -ENOMEDIUM;
 		if (sdhost->mrq->stop)
 			sdhost->mrq->stop->error = -ENOMEDIUM;
-		tasklet_schedule(&sdhost->finish_tasklet);
+		queue_work(system_bh_wq, &sdhost->finish_bh_work);
 	}
 	spin_unlock_irqrestore(&sdhost->lock, flags);
 
@@ -1203,7 +1204,7 @@ static void via_sd_remove(struct pci_dev *pcidev)
 
 	del_timer_sync(&sdhost->timer);
 
-	tasklet_kill(&sdhost->finish_tasklet);
+	cancel_work_sync(&sdhost->finish_bh_work);
 
 	/* switch off power */
 	gatt = readb(sdhost->pcictrl_mmiobase + VIA_CRDR_PCICLKGATT);
diff --git a/drivers/mmc/host/wbsd.c b/drivers/mmc/host/wbsd.c
index f0562f712d98..6e20405d0430 100644
--- a/drivers/mmc/host/wbsd.c
+++ b/drivers/mmc/host/wbsd.c
@@ -459,7 +459,7 @@ static void wbsd_empty_fifo(struct wbsd_host *host)
 	 * FIFO threshold interrupts properly.
 	 */
 	if ((data->blocks * data->blksz - data->bytes_xfered) < 16)
-		tasklet_schedule(&host->fifo_tasklet);
+		queue_work(system_bh_wq, &host->fifo_bh_work);
 }
 
 static void wbsd_fill_fifo(struct wbsd_host *host)
@@ -524,7 +524,7 @@ static void wbsd_fill_fifo(struct wbsd_host *host)
 	 * 'FIFO empty' under certain conditions. So we
 	 * need to be a bit more pro-active.
 	 */
-	tasklet_schedule(&host->fifo_tasklet);
+	queue_work(system_bh_wq, &host->fifo_bh_work);
 }
 
 static void wbsd_prepare_data(struct wbsd_host *host, struct mmc_data *data)
@@ -746,7 +746,7 @@ static void wbsd_request(struct mmc_host *mmc, struct mmc_request *mrq)
 	struct mmc_command *cmd;
 
 	/*
-	 * Disable tasklets to avoid a deadlock.
+	 * Disable bh works to avoid a deadlock.
 	 */
 	spin_lock_bh(&host->lock);
 
@@ -821,7 +821,7 @@ static void wbsd_request(struct mmc_host *mmc, struct mmc_request *mrq)
 		 * Dirty fix for hardware bug.
 		 */
 		if (host->dma == -1)
-			tasklet_schedule(&host->fifo_tasklet);
+			queue_work(system_bh_wq, &host->fifo_bh_work);
 
 		spin_unlock_bh(&host->lock);
 
@@ -961,13 +961,13 @@ static void wbsd_reset_ignore(struct timer_list *t)
 	 * Card status might have changed during the
 	 * blackout.
 	 */
-	tasklet_schedule(&host->card_tasklet);
+	queue_work(system_bh_wq, &host->card_bh_work);
 
 	spin_unlock_bh(&host->lock);
 }
 
 /*
- * Tasklets
+ * BH Works
  */
 
 static inline struct mmc_data *wbsd_get_data(struct wbsd_host *host)
@@ -987,9 +987,9 @@ static inline struct mmc_data *wbsd_get_data(struct wbsd_host *host)
 	return host->mrq->cmd->data;
 }
 
-static void wbsd_tasklet_card(struct tasklet_struct *t)
+static void wbsd_card_bh_work(struct work_struct *t)
 {
-	struct wbsd_host *host = from_tasklet(host, t, card_tasklet);
+	struct wbsd_host *host = from_work(host, t, card_bh_work);
 	u8 csr;
 	int delay = -1;
 
@@ -1020,7 +1020,7 @@ static void wbsd_tasklet_card(struct tasklet_struct *t)
 			wbsd_reset(host);
 
 			host->mrq->cmd->error = -ENOMEDIUM;
-			tasklet_schedule(&host->finish_tasklet);
+			queue_work(system_bh_wq, &host->finish_bh_work);
 		}
 
 		delay = 0;
@@ -1036,9 +1036,9 @@ static void wbsd_tasklet_card(struct tasklet_struct *t)
 		mmc_detect_change(host->mmc, msecs_to_jiffies(delay));
 }
 
-static void wbsd_tasklet_fifo(struct tasklet_struct *t)
+static void wbsd_fifo_bh_work(struct work_struct *t)
 {
-	struct wbsd_host *host = from_tasklet(host, t, fifo_tasklet);
+	struct wbsd_host *host = from_work(host, t, fifo_bh_work);
 	struct mmc_data *data;
 
 	spin_lock(&host->lock);
@@ -1060,16 +1060,16 @@ static void wbsd_tasklet_fifo(struct tasklet_struct *t)
 	 */
 	if (host->num_sg == 0) {
 		wbsd_write_index(host, WBSD_IDX_FIFOEN, 0);
-		tasklet_schedule(&host->finish_tasklet);
+		queue_work(system_bh_wq, &host->finish_bh_work);
 	}
 
 end:
 	spin_unlock(&host->lock);
 }
 
-static void wbsd_tasklet_crc(struct tasklet_struct *t)
+static void wbsd_crc_bh_work(struct work_struct *t)
 {
-	struct wbsd_host *host = from_tasklet(host, t, crc_tasklet);
+	struct wbsd_host *host = from_work(host, t, crc_bh_work);
 	struct mmc_data *data;
 
 	spin_lock(&host->lock);
@@ -1085,15 +1085,15 @@ static void wbsd_tasklet_crc(struct tasklet_struct *t)
 
 	data->error = -EILSEQ;
 
-	tasklet_schedule(&host->finish_tasklet);
+	queue_work(system_bh_wq, &host->finish_bh_work);
 
 end:
 	spin_unlock(&host->lock);
 }
 
-static void wbsd_tasklet_timeout(struct tasklet_struct *t)
+static void wbsd_timeout_bh_work(struct work_struct *t)
 {
-	struct wbsd_host *host = from_tasklet(host, t, timeout_tasklet);
+	struct wbsd_host *host = from_work(host, t, timeout_bh_work);
 	struct mmc_data *data;
 
 	spin_lock(&host->lock);
@@ -1109,15 +1109,15 @@ static void wbsd_tasklet_timeout(struct tasklet_struct *t)
 
 	data->error = -ETIMEDOUT;
 
-	tasklet_schedule(&host->finish_tasklet);
+	queue_work(system_bh_wq, &host->finish_bh_work);
 
 end:
 	spin_unlock(&host->lock);
 }
 
-static void wbsd_tasklet_finish(struct tasklet_struct *t)
+static void wbsd_finish_bh_work(struct work_struct *t)
 {
-	struct wbsd_host *host = from_tasklet(host, t, finish_tasklet);
+	struct wbsd_host *host = from_work(host, t, finish_bh_work);
 	struct mmc_data *data;
 
 	spin_lock(&host->lock);
@@ -1156,18 +1156,18 @@ static irqreturn_t wbsd_irq(int irq, void *dev_id)
 	host->isr |= isr;
 
 	/*
-	 * Schedule tasklets as needed.
+	 * Schedule bh work as needed.
 	 */
 	if (isr & WBSD_INT_CARD)
-		tasklet_schedule(&host->card_tasklet);
+		queue_work(system_bh_wq, &host->card_bh_work);
 	if (isr & WBSD_INT_FIFO_THRE)
-		tasklet_schedule(&host->fifo_tasklet);
+		queue_work(system_bh_wq, &host->fifo_bh_work);
 	if (isr & WBSD_INT_CRC)
-		tasklet_hi_schedule(&host->crc_tasklet);
+		queue_work(system_bh_highpri_wq, &host->crc_bh_work);
 	if (isr & WBSD_INT_TIMEOUT)
-		tasklet_hi_schedule(&host->timeout_tasklet);
+		queue_work(system_bh_highpri_wq, &host->timeout_bh_work);
 	if (isr & WBSD_INT_TC)
-		tasklet_schedule(&host->finish_tasklet);
+		queue_work(system_bh_wq, &host->finish_bh_work);
 
 	return IRQ_HANDLED;
 }
@@ -1443,13 +1443,13 @@ static int wbsd_request_irq(struct wbsd_host *host, int irq)
 	int ret;
 
 	/*
-	 * Set up tasklets. Must be done before requesting interrupt.
+	 * Set up bh works. Must be done before requesting interrupt.
 	 */
-	tasklet_setup(&host->card_tasklet, wbsd_tasklet_card);
-	tasklet_setup(&host->fifo_tasklet, wbsd_tasklet_fifo);
-	tasklet_setup(&host->crc_tasklet, wbsd_tasklet_crc);
-	tasklet_setup(&host->timeout_tasklet, wbsd_tasklet_timeout);
-	tasklet_setup(&host->finish_tasklet, wbsd_tasklet_finish);
+	INIT_WORK(&host->card_bh_work, wbsd_card_bh_work);
+	INIT_WORK(&host->fifo_bh_work, wbsd_fifo_bh_work);
+	INIT_WORK(&host->crc_bh_work, wbsd_crc_bh_work);
+	INIT_WORK(&host->timeout_bh_work, wbsd_timeout_bh_work);
+	INIT_WORK(&host->finish_bh_work, wbsd_finish_bh_work);
 
 	/*
 	 * Allocate interrupt.
@@ -1472,11 +1472,11 @@ static void  wbsd_release_irq(struct wbsd_host *host)
 
 	host->irq = 0;
 
-	tasklet_kill(&host->card_tasklet);
-	tasklet_kill(&host->fifo_tasklet);
-	tasklet_kill(&host->crc_tasklet);
-	tasklet_kill(&host->timeout_tasklet);
-	tasklet_kill(&host->finish_tasklet);
+	cancel_work_sync(&host->card_bh_work);
+	cancel_work_sync(&host->fifo_bh_work);
+	cancel_work_sync(&host->crc_bh_work);
+	cancel_work_sync(&host->timeout_bh_work);
+	cancel_work_sync(&host->finish_bh_work);
 }
 
 /*
diff --git a/drivers/mmc/host/wbsd.h b/drivers/mmc/host/wbsd.h
index be30b4d8ce4c..970886831305 100644
--- a/drivers/mmc/host/wbsd.h
+++ b/drivers/mmc/host/wbsd.h
@@ -171,11 +171,11 @@ struct wbsd_host
 	int			irq;		/* Interrupt */
 	int			dma;		/* DMA channel */
 
-	struct tasklet_struct	card_tasklet;	/* Tasklet structures */
-	struct tasklet_struct	fifo_tasklet;
-	struct tasklet_struct	crc_tasklet;
-	struct tasklet_struct	timeout_tasklet;
-	struct tasklet_struct	finish_tasklet;
+	struct work_struct	card_bh_work;	/* Work structures */
+	struct work_struct	fifo_bh_work;
+	struct work_struct	crc_bh_work;
+	struct work_struct	timeout_bh_work;
+	struct work_struct	finish_bh_work;
 
 	struct timer_list	ignore_timer;	/* Ignore detection timer */
 };
-- 
2.34.1

.

X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Date: Tue, 25 Jun 2024 10:13:20 -0700
Message-ID: <000000000000b2c201061bba0374@google.com>
Subject: [syzbot] [bcachefs?] UBSAN: shift-out-of-bounds in bch2_blacklist_entries_gc
From: syzbot <syzbot+835d255ad6bc7f29ee12@syzkaller.appspotmail.com>
To: bfoster@redhat.com, kent.overstreet@linux.dev, 
	linux-bcachefs@vger.kernel.org, linux-kernel@vger.kernel.org, 
	syzkaller-bugs@googlegroups.com
Content-Type: text/plain; charset="UTF-8"
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258506
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-bcachefs
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Hello,

syzbot found the following issue on:

HEAD commit:    563a50672d8a Merge tag 'xfs-6.10-fixes-4' of git://git.ker..
git tree:       upstream
console output: https://syzkaller.appspot.com/x/log.txt?x=1286cdda980000
kernel config:  https://syzkaller.appspot.com/x/.config?x=c3820d4fff43c7a3
dashboard link: https://syzkaller.appspot.com/bug?extid=835d255ad6bc7f29ee12
compiler:       gcc (Debian 12.2.0-14) 12.2.0, GNU ld (GNU Binutils for Debian) 2.40
syz repro:      https://syzkaller.appspot.com/x/repro.syz?x=15e2d08e980000
C reproducer:   https://syzkaller.appspot.com/x/repro.c?x=1009808e980000

Downloadable assets:
disk image (non-bootable): https://storage.googleapis.com/syzbot-assets/7bc7510fe41f/non_bootable_disk-563a5067.raw.xz
vmlinux: https://storage.googleapis.com/syzbot-assets/6ef95d163dde/vmlinux-563a5067.xz
kernel image: https://storage.googleapis.com/syzbot-assets/0102d9e1ac9a/bzImage-563a5067.xz
mounted in repro: https://storage.googleapis.com/syzbot-assets/7fdc5cd163b4/mount_0.gz

IMPORTANT: if you fix the issue, please add the following tag to the commit:
Reported-by: syzbot+835d255ad6bc7f29ee12@syzkaller.appspotmail.com

bcachefs (loop0): stripes_read... done
bcachefs (loop0): snapshots_read... done
bcachefs (loop0): journal_replay... done
bcachefs (loop0): resume_logged_ops... done
------------[ cut here ]------------
UBSAN: shift-out-of-bounds in ./include/linux/log2.h:67:13
shift exponent 4294967295 is too large for 64-bit type 'long unsigned int'
CPU: 0 PID: 5189 Comm: syz-executor355 Not tainted 6.10.0-rc4-syzkaller-00283-g563a50672d8a #0
Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.2-debian-1.16.2-1 04/01/2014
Call Trace:
 <TASK>
 __dump_stack lib/dump_stack.c:88 [inline]
 dump_stack_lvl+0x16c/0x1f0 lib/dump_stack.c:114
 ubsan_epilogue lib/ubsan.c:231 [inline]
 __ubsan_handle_shift_out_of_bounds+0x2a5/0x480 lib/ubsan.c:468
 __rounddown_pow_of_two include/linux/log2.h:67 [inline]
 eytzinger1_first fs/bcachefs/eytzinger.h:51 [inline]
 eytzinger0_first fs/bcachefs/eytzinger.h:194 [inline]
 bch2_blacklist_entries_gc.cold+0x35/0x56 fs/bcachefs/journal_seq_blacklist.c:235
 bch2_fs_recovery+0x3240/0x3e40 fs/bcachefs/recovery.c:897
 bch2_fs_start+0x2e9/0x600 fs/bcachefs/super.c:1036
 bch2_fs_open+0xfa0/0x1110 fs/bcachefs/super.c:2128
 bch2_mount+0xe2c/0x1230 fs/bcachefs/fs.c:1926
 legacy_get_tree+0x109/0x220 fs/fs_context.c:662
 vfs_get_tree+0x8f/0x380 fs/super.c:1780
 do_new_mount fs/namespace.c:3352 [inline]
 path_mount+0x14e6/0x1f20 fs/namespace.c:3679
 do_mount fs/namespace.c:3692 [inline]
 __do_sys_mount fs/namespace.c:3898 [inline]
 __se_sys_mount fs/namespace.c:3875 [inline]
 __x64_sys_mount+0x297/0x320 fs/namespace.c:3875
 do_syscall_x64 arch/x86/entry/common.c:52 [inline]
 do_syscall_64+0xcd/0x250 arch/x86/entry/common.c:83
 entry_SYSCALL_64_after_hwframe+0x77/0x7f
RIP: 0033:0x7fd8395e2bba
Code: d8 64 89 02 48 c7 c0 ff ff ff ff eb a6 e8 5e 04 00 00 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 40 00 49 89 ca b8 a5 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 b8 ff ff ff f7 d8 64 89 01 48
RSP: 002b:00007ffe022b6078 EFLAGS: 00000282 ORIG_RAX: 00000000000000a5
RAX: ffffffffffffffda RBX: 00007ffe022b6090 RCX: 00007fd8395e2bba
RDX: 0000000020011a00 RSI: 0000000020000040 RDI: 00007ffe022b6090
RBP: 0000000000000004 R08: 00007ffe022b60d0 R09: 00000000000119f4
R10: 0000000001200014 R11: 0000000000000282 R12: 0000000001200014
R13: 00007ffe022b60d0 R14: 0000000000000003 R15: 0000000001000000
 </TASK>
---[ end trace ]---


---
This report is generated by a bot. It may contain errors.
See https://goo.gl/tpsmEJ for more information about syzbot.
syzbot engineers can be reached at syzkaller@googlegroups.com.

syzbot will keep track of this issue. See:
https://goo.gl/tpsmEJ#status for how to communicate with syzbot.

If the report is already addressed, let syzbot know by replying with:
#syz fix: exact-commit-title

If you want syzbot to run the reproducer, reply with:
#syz test: git://repo/address.git branch-or-commit-hash
If you attach or paste a git patch, syzbot will apply it before testing.

If you want to overwrite report's subsystems, reply with:
#syz set subsystems: new-subsystem
(See the list of subsystem names on the web dashboard)

If the report is a duplicate of another one, reply with:
#syz dup: exact-subject-of-another-report

If you want to undo deduplication, reply with:
#syz undup
.

X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Date: Tue, 25 Jun 2024 10:13:20 -0700
Message-ID: <000000000000b5c648061bba03cd@google.com>
Subject: [syzbot] [bcachefs?] KASAN: slab-use-after-free Read in bch2_sb_errors_from_cpu
From: syzbot <syzbot+a2bc0e838efd7663f4d9@syzkaller.appspotmail.com>
To: bfoster@redhat.com, kent.overstreet@linux.dev, 
	linux-bcachefs@vger.kernel.org, linux-kernel@vger.kernel.org, 
	syzkaller-bugs@googlegroups.com
Content-Type: text/plain; charset="UTF-8"
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258507
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-bcachefs
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Hello,

syzbot found the following issue on:

HEAD commit:    66cc544fd75c Merge tag 'dmaengine-fix-6.10' of git://git.k..
git tree:       upstream
console output: https://syzkaller.appspot.com/x/log.txt?x=11a7e5ea980000
kernel config:  https://syzkaller.appspot.com/x/.config?x=c3820d4fff43c7a3
dashboard link: https://syzkaller.appspot.com/bug?extid=a2bc0e838efd7663f4d9
compiler:       gcc (Debian 12.2.0-14) 12.2.0, GNU ld (GNU Binutils for Debian) 2.40
syz repro:      https://syzkaller.appspot.com/x/repro.syz?x=107ed151980000
C reproducer:   https://syzkaller.appspot.com/x/repro.c?x=1765c589980000

Downloadable assets:
disk image (non-bootable): https://storage.googleapis.com/syzbot-assets/7bc7510fe41f/non_bootable_disk-66cc544f.raw.xz
vmlinux: https://storage.googleapis.com/syzbot-assets/be894c048296/vmlinux-66cc544f.xz
kernel image: https://storage.googleapis.com/syzbot-assets/edc3f9fbd3ca/bzImage-66cc544f.xz
mounted in repro: https://storage.googleapis.com/syzbot-assets/3d5362aaefc3/mount_0.gz

IMPORTANT: if you fix the issue, please add the following tag to the commit:
Reported-by: syzbot+a2bc0e838efd7663f4d9@syzkaller.appspotmail.com

==================================================================
BUG: KASAN: slab-use-after-free in bch2_sb_errors_from_cpu+0x255/0x280 fs/bcachefs/sb-errors.c:122
Read of size 8 at addr ffff88801ac73100 by task kworker/u32:2/45

CPU: 3 PID: 45 Comm: kworker/u32:2 Not tainted 6.10.0-rc4-syzkaller-00164-g66cc544fd75c #0
Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.2-debian-1.16.2-1 04/01/2014
Workqueue: btree_update btree_interior_update_work
Call Trace:
 <TASK>
 __dump_stack lib/dump_stack.c:88 [inline]
 dump_stack_lvl+0x116/0x1f0 lib/dump_stack.c:114
 print_address_description mm/kasan/report.c:377 [inline]
 print_report+0xc3/0x620 mm/kasan/report.c:488
 kasan_report+0xd9/0x110 mm/kasan/report.c:601
 bch2_sb_errors_from_cpu+0x255/0x280 fs/bcachefs/sb-errors.c:122
 bch2_write_super+0x12b2/0x37a0 fs/bcachefs/super-io.c:969
 btree_update_new_nodes_mark_sb fs/bcachefs/btree_update_interior.c:626 [inline]
 btree_update_nodes_written fs/bcachefs/btree_update_interior.c:688 [inline]
 btree_interior_update_work+0x46e/0x2cb0 fs/bcachefs/btree_update_interior.c:859
 process_one_work+0x9fb/0x1b60 kernel/workqueue.c:3231
 process_scheduled_works kernel/workqueue.c:3312 [inline]
 worker_thread+0x6c8/0xf70 kernel/workqueue.c:3393
 kthread+0x2c1/0x3a0 kernel/kthread.c:389
 ret_from_fork+0x45/0x80 arch/x86/kernel/process.c:147
 ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:244
 </TASK>

Allocated by task 5596:
 kasan_save_stack+0x33/0x60 mm/kasan/common.c:47
 kasan_save_track+0x14/0x30 mm/kasan/common.c:68
 poison_kmalloc_redzone mm/kasan/common.c:370 [inline]
 __kasan_kmalloc+0xaa/0xb0 mm/kasan/common.c:387
 kasan_kmalloc include/linux/kasan.h:211 [inline]
 __do_kmalloc_node mm/slub.c:4122 [inline]
 __kmalloc_node_noprof+0x215/0x440 mm/slub.c:4129
 kmalloc_node_noprof include/linux/slab.h:681 [inline]
 kvmalloc_node_noprof+0x9d/0x1a0 mm/util.c:634
 kvmalloc_array_node_noprof include/linux/slab.h:800 [inline]
 __bch2_darray_resize+0xd8/0x250 fs/bcachefs/darray.c:12
 __darray_resize fs/bcachefs/darray.h:31 [inline]
 __darray_make_room fs/bcachefs/darray.h:43 [inline]
 bch2_sb_error_count+0x34f/0x4e0 fs/bcachefs/sb-errors.c:102
 __bch2_inode_invalid+0x2c6/0x4d0 fs/bcachefs/inode.c:441
 bch2_inode_v3_invalid+0x1f1/0x2e0 fs/bcachefs/inode.c:529
 bch2_bkey_val_invalid+0x222/0x2f0 fs/bcachefs/bkey_methods.c:143
 bch2_btree_node_read_done+0x3294/0x4fe0 fs/bcachefs/btree_io.c:1232
 btree_node_read_work+0x567/0x1060 fs/bcachefs/btree_io.c:1345
 bch2_btree_node_read+0x8b3/0xe40 fs/bcachefs/btree_io.c:1730
 __bch2_btree_root_read fs/bcachefs/btree_io.c:1769 [inline]
 bch2_btree_root_read+0x2ca/0x690 fs/bcachefs/btree_io.c:1793
 read_btree_roots fs/bcachefs/recovery.c:475 [inline]
 bch2_fs_recovery+0x1ba8/0x3db0 fs/bcachefs/recovery.c:803
 bch2_fs_start+0x2e9/0x600 fs/bcachefs/super.c:1035
 bch2_fs_open+0xfa0/0x1110 fs/bcachefs/super.c:2127
 bch2_mount+0xe2c/0x1230 fs/bcachefs/fs.c:1919
 legacy_get_tree+0x109/0x220 fs/fs_context.c:662
 vfs_get_tree+0x8f/0x380 fs/super.c:1780
 do_new_mount fs/namespace.c:3352 [inline]
 path_mount+0x14e6/0x1f20 fs/namespace.c:3679
 do_mount fs/namespace.c:3692 [inline]
 __do_sys_mount fs/namespace.c:3898 [inline]
 __se_sys_mount fs/namespace.c:3875 [inline]
 __x64_sys_mount+0x297/0x320 fs/namespace.c:3875
 do_syscall_x64 arch/x86/entry/common.c:52 [inline]
 do_syscall_64+0xcd/0x250 arch/x86/entry/common.c:83
 entry_SYSCALL_64_after_hwframe+0x77/0x7f

Freed by task 5596:
 kasan_save_stack+0x33/0x60 mm/kasan/common.c:47
 kasan_save_track+0x14/0x30 mm/kasan/common.c:68
 kasan_save_free_info+0x3b/0x60 mm/kasan/generic.c:579
 poison_slab_object+0xf7/0x160 mm/kasan/common.c:240
 __kasan_slab_free+0x32/0x50 mm/kasan/common.c:256
 kasan_slab_free include/linux/kasan.h:184 [inline]
 slab_free_hook mm/slub.c:2196 [inline]
 slab_free mm/slub.c:4437 [inline]
 kfree+0x12a/0x3b0 mm/slub.c:4558
 kvfree+0x47/0x50 mm/util.c:680
 __bch2_darray_resize+0x185/0x250 fs/bcachefs/darray.c:18
 __darray_resize fs/bcachefs/darray.h:31 [inline]
 __darray_make_room fs/bcachefs/darray.h:43 [inline]
 bch2_sb_error_count+0x34f/0x4e0 fs/bcachefs/sb-errors.c:102
 bch2_fsck_err+0x180/0x1730 fs/bcachefs/error.c:210
 bch2_bucket_ref_update+0xcd3/0xf80 fs/bcachefs/buckets.c:834
 __mark_pointer+0x10c/0x410 fs/bcachefs/buckets.c:1000
 bch2_trigger_pointer.constprop.0+0xce4/0x25c0 fs/bcachefs/buckets.c:1037
 __trigger_extent+0x414/0xc00 fs/bcachefs/buckets.c:1176
 bch2_trigger_extent+0x4ee/0x5d0 fs/bcachefs/buckets.c:1261
 bch2_key_trigger fs/bcachefs/bkey_methods.h:88 [inline]
 bch2_key_trigger_new fs/bcachefs/bkey_methods.h:116 [inline]
 run_one_trans_trigger fs/bcachefs/btree_trans_commit.c:517 [inline]
 run_btree_triggers+0x6f1/0xd10 fs/bcachefs/btree_trans_commit.c:544
 bch2_trans_commit_run_triggers fs/bcachefs/btree_trans_commit.c:576 [inline]
 __bch2_trans_commit+0x366/0x7ad0 fs/bcachefs/btree_trans_commit.c:1022
 bch2_trans_commit fs/bcachefs/btree_update.h:170 [inline]
 bch2_extent_update+0x494/0xa40 fs/bcachefs/io_write.c:326
 bch2_fpunch_at+0x7e6/0xbc0 fs/bcachefs/io_misc.c:184
 __bch2_resume_logged_op_truncate+0x4ce/0x7a0 fs/bcachefs/io_misc.c:260
 bch2_truncate+0x1e1/0x220 fs/bcachefs/io_misc.c:291
 bchfs_truncate+0x90c/0xd70 fs/bcachefs/fs-io.c:476
 bch2_setattr+0x1ab/0x250 fs/bcachefs/fs.c:918
 notify_change+0x742/0x11f0 fs/attr.c:497
 do_truncate+0x15c/0x220 fs/open.c:65
 vfs_truncate+0x3ef/0x4e0 fs/open.c:111
 do_sys_truncate fs/open.c:134 [inline]
 __do_sys_truncate fs/open.c:146 [inline]
 __se_sys_truncate fs/open.c:144 [inline]
 __x64_sys_truncate+0x177/0x1f0 fs/open.c:144
 do_syscall_x64 arch/x86/entry/common.c:52 [inline]
 do_syscall_64+0xcd/0x250 arch/x86/entry/common.c:83
 entry_SYSCALL_64_after_hwframe+0x77/0x7f

The buggy address belongs to the object at ffff88801ac73100
 which belongs to the cache kmalloc-16 of size 16
The buggy address is located 0 bytes inside of
 freed 16-byte region [ffff88801ac73100, ffff88801ac73110)

The buggy address belongs to the physical page:
page: refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x1ac73
flags: 0xfff00000000000(node=0|zone=1|lastcpupid=0x7ff)
page_type: 0xffffefff(slab)
raw: 00fff00000000000 ffff888015442640 ffffea0000675400 dead000000000002
raw: 0000000000000000 0000000000800080 00000001ffffefff 0000000000000000
page dumped because: kasan: bad access detected
page_owner tracks the page as allocated
page last allocated via order 0, migratetype Unmovable, gfp_mask 0xd2820(GFP_ATOMIC|__GFP_NOWARN|__GFP_NORETRY|__GFP_COMP|__GFP_NOMEMALLOC), pid 1, tgid 1 (init), ts 23767929677, free_ts 22379130869
 create_dummy_stack mm/page_owner.c:94 [inline]
 register_dummy_stack+0x8a/0xd0 mm/page_owner.c:100
 init_page_owner+0x48/0xbf0 mm/page_owner.c:118
 invoke_init_callbacks mm/page_ext.c:148 [inline]
 page_ext_init+0x6af/0xaa0 mm/page_ext.c:493
 mm_core_init+0x68d/0x740 mm/mm_init.c:2725
page last free pid 8 tgid 8 stack trace:
 reset_page_owner include/linux/page_owner.h:25 [inline]
 free_pages_prepare mm/page_alloc.c:1088 [inline]
 free_unref_page+0x64a/0xe40 mm/page_alloc.c:2583
 vfree+0x181/0x7a0 mm/vmalloc.c:3346
 delayed_vfree_work+0x56/0x70 mm/vmalloc.c:3267
 process_one_work+0x9fb/0x1b60 kernel/workqueue.c:3231
 process_scheduled_works kernel/workqueue.c:3312 [inline]
 worker_thread+0x6c8/0xf70 kernel/workqueue.c:3393
 kthread+0x2c1/0x3a0 kernel/kthread.c:389
 ret_from_fork+0x45/0x80 arch/x86/kernel/process.c:147
 ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:244

Memory state around the buggy address:
 ffff88801ac73000: 00 00 fc fc fa fb fc fc fa fb fc fc fa fb fc fc
 ffff88801ac73080: fa fb fc fc fa fb fc fc fa fb fc fc fa fb fc fc
>ffff88801ac73100: fa fb fc fc fa fb fc fc fa fb fc fc fa fb fc fc
                   ^
 ffff88801ac73180: fa fb fc fc fa fb fc fc fa fb fc fc fa fb fc fc
 ffff88801ac73200: fa fb fc fc fa fb fc fc fa fb fc fc fa fb fc fc
==================================================================


---
This report is generated by a bot. It may contain errors.
See https://goo.gl/tpsmEJ for more information about syzbot.
syzbot engineers can be reached at syzkaller@googlegroups.com.

syzbot will keep track of this issue. See:
https://goo.gl/tpsmEJ#status for how to communicate with syzbot.

If the report is already addressed, let syzbot know by replying with:
#syz fix: exact-commit-title

If you want syzbot to run the reproducer, reply with:
#syz test: git://repo/address.git branch-or-commit-hash
If you attach or paste a git patch, syzbot will apply it before testing.

If you want to overwrite report's subsystems, reply with:
#syz set subsystems: new-subsystem
(See the list of subsystem names on the web dashboard)

If the report is a duplicate of another one, reply with:
#syz dup: exact-subject-of-another-report

If you want to undo deduplication, reply with:
#syz undup
.

From: Jeff Layton <jlayton@kernel.org>
Date: Tue, 25 Jun 2024 13:19:12 -0400
Subject: [PATCH] nfsd: fix a regression in threads procfile interface
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
Message-Id: <20240625-nfsd-testing-v1-1-89c4782c5a2e@kernel.org>
To: Chuck Lever <chuck.lever@oracle.com>, Neil Brown <neilb@suse.de>, 
 Olga Kornievskaia <kolga@netapp.com>, Dai Ngo <Dai.Ngo@oracle.com>, 
 Tom Talpey <tom@talpey.com>
Cc: linux-nfs@vger.kernel.org, linux-kernel@vger.kernel.org, 
 Jeff Layton <jlayton@kernel.org>
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258508 org.kernel.vger.linux-nfs:86299
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-nfs
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

The old threads interface passed in NULL for the pool here which tells
svc_set_num_threads to distribute the count over all the available
pools. Fix the logic to handle this case correctly.

Fixes: bbb07968d5e2 ("nfsd: make nfsd_svc take an array of thread counts")
Signed-off-by: Jeff Layton <jlayton@kernel.org>
---
It's probably best to squash this into bbb07968d5e2.
---
 fs/nfsd/nfssvc.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/fs/nfsd/nfssvc.c b/fs/nfsd/nfssvc.c
index 9edb4f7c4cc2..23e73190687f 100644
--- a/fs/nfsd/nfssvc.c
+++ b/fs/nfsd/nfssvc.c
@@ -735,6 +735,13 @@ int nfsd_set_nrthreads(int n, int *nthreads, struct net *net)
 	if (nn->nfsd_serv == NULL || n <= 0)
 		return 0;
 
+	/*
+	 * Special case: When n == 1, pass in NULL for the pool, so that the
+	 * change is distributed equally among them.
+	 */
+	if (n == 1)
+		return svc_set_num_threads(nn->nfsd_serv, NULL, nthreads[0]);
+
 	if (n > nn->nfsd_serv->sv_nrpools)
 		n = nn->nfsd_serv->sv_nrpools;
 

---
base-commit: 26086b8c567f3f758cdf3e1fc2ae205095751cb8
change-id: 20240625-nfsd-testing-84df99227eba

Best regards,
-- 
Jeff Layton <jlayton@kernel.org>

.

Date: Tue, 25 Jun 2024 10:25:37 -0700
Message-Id: <20240625172603.900667-1-irogers@google.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
Mime-Version: 1.0
Subject: [PATCH v1 00/26] Constify tool pointers
From: Ian Rogers <irogers@google.com>
To: Peter Zijlstra <peterz@infradead.org>, Ingo Molnar <mingo@redhat.com>, 
	Arnaldo Carvalho de Melo <acme@kernel.org>, Namhyung Kim <namhyung@kernel.org>, 
	Mark Rutland <mark.rutland@arm.com>, 
	Alexander Shishkin <alexander.shishkin@linux.intel.com>, Jiri Olsa <jolsa@kernel.org>, 
	Ian Rogers <irogers@google.com>, Adrian Hunter <adrian.hunter@intel.com>, 
	Kan Liang <kan.liang@linux.intel.com>, John Garry <john.g.garry@oracle.com>, 
	Will Deacon <will@kernel.org>, James Clark <james.clark@arm.com>, 
	Mike Leach <mike.leach@linaro.org>, Leo Yan <leo.yan@linux.dev>, 
	Suzuki K Poulose <suzuki.poulose@arm.com>, Yicong Yang <yangyicong@hisilicon.com>, 
	Jonathan Cameron <jonathan.cameron@huawei.com>, Nick Terrell <terrelln@fb.com>, 
	Nick Desaulniers <ndesaulniers@google.com>, Oliver Upton <oliver.upton@linux.dev>, 
	Anshuman Khandual <anshuman.khandual@arm.com>, Song Liu <song@kernel.org>, 
	Ilkka Koskinen <ilkka@os.amperecomputing.com>, Huacai Chen <chenhuacai@kernel.org>, 
	Yanteng Si <siyanteng@loongson.cn>, Sun Haiyong <sunhaiyong@loongson.cn>, 
	linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, 
	linux-arm-kernel@lists.infradead.org
Content-Type: text/plain; charset="UTF-8"
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258514
Newsgroups: org.kernel.vger.linux-kernel,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-perf-users
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

struct perf_tool provides a set of function pointers that are called
through when processing perf data. To make filling the pointers less
cumbersome, if they are NULL perf_tools__fill_defaults will add
default do nothing implementations.

This change refactors struct perf_tool to have an init function that
provides the default implementation. The special use of NULL and
perf_tools__fill_defaults are removed. As a consequence the tool
pointers can then all be made const, which better reflects the
behavior a particular perf command would expect of the tool and to
some extent can reduce the cognitive load on someone working on a
command.

Ian Rogers (26):
  perf tool: Constify tool pointers
  perf tool: Move fill defaults into tool.c
  perf tool: Add perf_tool__init
  perf kmem: Use perf_tool__init
  perf buildid-list: Use perf_tool__init
  perf kvm: Use perf_tool__init
  perf lock: Use perf_tool__init
  perf evlist: Use perf_tool__init
  perf record: Use perf_tool__init
  perf c2c: Use perf_tool__init
  perf script: Use perf_tool__init
  perf inject: Use perf_tool__init
  perf report: Use perf_tool__init
  perf stat: Use perf_tool__init
  perf annotate: Use perf_tool__init
  perf sched: Use perf_tool__init
  perf mem: Use perf_tool__init
  perf timechart: Use perf_tool__init
  perf diff: Use perf_tool__init
  perf data convert json: Use perf_tool__init
  perf data convert ctf: Use perf_tool__init
  perf auxevent: Add explicit dummy tool initialization
  perf test event_update: Ensure tools is initialized
  perf kwork: Use perf_tool__init
  perf tool: Remove perf_tool__fill_defaults
  perf session: Constify tool

 tools/perf/arch/x86/util/event.c    |   4 +-
 tools/perf/bench/synthesize.c       |   2 +-
 tools/perf/builtin-annotate.c       |  44 ++--
 tools/perf/builtin-buildid-list.c   |  10 +
 tools/perf/builtin-c2c.c            |  33 ++-
 tools/perf/builtin-diff.c           |  30 ++-
 tools/perf/builtin-evlist.c         |  10 +-
 tools/perf/builtin-inject.c         | 159 +++++++------
 tools/perf/builtin-kmem.c           |  20 +-
 tools/perf/builtin-kvm.c            |  19 +-
 tools/perf/builtin-kwork.c          |  33 ++-
 tools/perf/builtin-lock.c           |  41 ++--
 tools/perf/builtin-mem.c            |  37 +--
 tools/perf/builtin-record.c         |  49 ++--
 tools/perf/builtin-report.c         |  67 +++---
 tools/perf/builtin-sched.c          |  50 ++--
 tools/perf/builtin-script.c         | 106 ++++-----
 tools/perf/builtin-stat.c           |  26 +--
 tools/perf/builtin-timechart.c      |  25 +-
 tools/perf/builtin-top.c            |   2 +-
 tools/perf/builtin-trace.c          |   4 +-
 tools/perf/tests/cpumap.c           |   6 +-
 tools/perf/tests/dlfilter-test.c    |   2 +-
 tools/perf/tests/dwarf-unwind.c     |   2 +-
 tools/perf/tests/event_update.c     |   9 +-
 tools/perf/tests/stat.c             |   6 +-
 tools/perf/tests/thread-map.c       |   2 +-
 tools/perf/util/Build               |   1 +
 tools/perf/util/arm-spe.c           |   9 +-
 tools/perf/util/auxtrace.c          |  12 +-
 tools/perf/util/auxtrace.h          |  20 +-
 tools/perf/util/bpf-event.c         |   4 +-
 tools/perf/util/build-id.c          |  34 +--
 tools/perf/util/build-id.h          |   8 +-
 tools/perf/util/cs-etm.c            |   9 +-
 tools/perf/util/data-convert-bt.c   |  34 ++-
 tools/perf/util/data-convert-json.c |  47 ++--
 tools/perf/util/event.c             |  54 +++--
 tools/perf/util/event.h             |  38 ++--
 tools/perf/util/header.c            |   6 +-
 tools/perf/util/header.h            |   4 +-
 tools/perf/util/hisi-ptt.c          |   6 +-
 tools/perf/util/intel-bts.c         |   9 +-
 tools/perf/util/intel-pt.c          |  10 +-
 tools/perf/util/jitdump.c           |   4 +-
 tools/perf/util/s390-cpumsf.c       |   7 +-
 tools/perf/util/session.c           | 342 ++--------------------------
 tools/perf/util/session.h           |   6 +-
 tools/perf/util/synthetic-events.c  |  80 +++----
 tools/perf/util/synthetic-events.h  |  70 +++---
 tools/perf/util/tool.c              | 294 ++++++++++++++++++++++++
 tools/perf/util/tool.h              |  18 +-
 tools/perf/util/tsc.c               |   2 +-
 53 files changed, 945 insertions(+), 981 deletions(-)
 create mode 100644 tools/perf/util/tool.c

-- 
2.45.2.741.gdbec12cfda-goog

.

From: Thadeu Lima de Souza Cascardo <cascardo@igalia.com>
To: linux-fsdevel@vger.kernel.org
Cc: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>,
	linux-kernel@vger.kernel.org,
	Gwendal Grignou <gwendal@chromium.org>,
	dlunev@chromium.org,
	Thadeu Lima de Souza Cascardo <cascardo@igalia.com>
Subject: [PATCH v2 0/2] fat: add support for directories without . and .. entries
Date: Tue, 25 Jun 2024 14:51:31 -0300
Message-Id: <20240625175133.922758-1-cascardo@igalia.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258549
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-fsdevel
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Some FAT filesystems do not have . and .. entries in some directories.
Currently, such filesystems are not mounted because such directories will
have no links. They are also corrupted as inodes are evicted and that leads
to such directories clusters being marked as freed. Later mounts will then
error out when finding such clusters.

These two commits allow those filesystems to be mounted and . and .. to
still appear when listing such directories.

v2:
- Also ignore the absence of . directory and always have at least two links.
- Add a second commit to always emit . and .. at readdir.

Thadeu Lima de Souza Cascardo (2):
  fat: ignore . and .. subdirs and always add links to dirs
  fat: always use dir_emit_dots and ignore . and .. entries

 fs/fat/dir.c   | 28 ++++++++++++----------------
 fs/fat/inode.c |  2 +-
 2 files changed, 13 insertions(+), 17 deletions(-)

-- 
2.34.1

.

From: Konrad Dybcio <konrad.dybcio@linaro.org>
Subject: [PATCH v4 0/5] Add SMEM-based speedbin matching
Date: Tue, 25 Jun 2024 20:28:05 +0200
Message-Id: <20240625-topic-smem_speedbin-v4-0-f6f8493ab814@linaro.org>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
To: Rob Clark <robdclark@gmail.com>, Sean Paul <sean@poorly.run>, 
 Abhinav Kumar <quic_abhinavk@quicinc.com>, 
 Dmitry Baryshkov <dmitry.baryshkov@linaro.org>, 
 David Airlie <airlied@gmail.com>, Daniel Vetter <daniel@ffwll.ch>, 
 Bjorn Andersson <andersson@kernel.org>, Rob Herring <robh@kernel.org>, 
 Krzysztof Kozlowski <krzk+dt@kernel.org>, 
 Conor Dooley <conor+dt@kernel.org>
Cc: Marijn Suijten <marijn.suijten@somainline.org>, 
 linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, 
 freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org, 
 devicetree@vger.kernel.org, Konrad Dybcio <konrad.dybcio@linaro.org>
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258585
Newsgroups: org.kernel.vger.linux-kernel,org.freedesktop.lists.dri-devel,org.kernel.vger.linux-arm-msm,org.kernel.vger.linux-devicetree
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Newer (SM8550+) SoCs don't seem to have a nice speedbin fuse anymore,
but instead rely on a set of combinations of "feature code" (FC) and
"product code" (PC) identifiers to match the bins. This series adds
support for that.

I suppose a qcom/for-soc immutable branch would be in order if we want
to land this in the upcoming cycle.

FWIW I preferred the fuses myself..

Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
---
Changes in v4:
- Drop applied qcom patches
- Make the fuse/speedbin fields u16 again (as Pcode is unused)
- Add comments explaining why there's only speedbin0 for 8550
- Fix some checkpatch fluff (code style)
- Rebase on next-20240625

Changes in v3:
- Wrap the argument usage in new preprocessor macros in braces (Bjorn)
- Make the SOCINFO_FC_INT_MAX define inclusive, adjust .h and .c (Bjorn)
- Pick up rbs
- Rebase on next-20240605
- Drop the already-applied ("Avoid a nullptr dereference when speedbin
  setting fails")

Changes in v2:
- Separate moving existing and adding new defines
- Fix kerneldoc copypasta
- Remove some wrong comments and defines
- Remove assumed "max" values for PCs and external FCs
- Improve some commit messages
- Return -EOPNOTSUPP instead of -EINVAL when calling p/fcode getters
  on socinfo older than v16
- Drop pcode getters and evaluation (doesn't matter for Adreno on
  non-proto SoCs)
- Rework the speedbin logic to be hopefully saner
- Link to v1: https://lore.kernel.org/r/20240405-topic-smem_speedbin-v1-0-ce2b864251b1@linaro.org

---
Konrad Dybcio (5):
      drm/msm/adreno: Implement SMEM-based speed bin
      drm/msm/adreno: Add speedbin data for SM8550 / A740
      drm/msm/adreno: Define A530 speed bins explicitly
      drm/msm/adreno: Redo the speedbin assignment
      arm64: dts: qcom: sm8550: Wire up GPU speed bin & more OPPs

 arch/arm64/boot/dts/qcom/sm8550.dtsi       | 21 +++++++-
 drivers/gpu/drm/msm/adreno/a5xx_catalog.c  |  6 +++
 drivers/gpu/drm/msm/adreno/a5xx_gpu.c      | 34 ------------
 drivers/gpu/drm/msm/adreno/a6xx_catalog.c  |  8 +++
 drivers/gpu/drm/msm/adreno/a6xx_gpu.c      | 54 -------------------
 drivers/gpu/drm/msm/adreno/adreno_device.c |  2 +
 drivers/gpu/drm/msm/adreno/adreno_gpu.c    | 84 +++++++++++++++++++++++++++---
 drivers/gpu/drm/msm/adreno/adreno_gpu.h    |  6 ++-
 8 files changed, 118 insertions(+), 97 deletions(-)
---
base-commit: 0fc4bfab2cd45f9acb86c4f04b5191e114e901ed
change-id: 20240404-topic-smem_speedbin-8deecd0bef0e

Best regards,
-- 
Konrad Dybcio <konrad.dybcio@linaro.org>

.

From: alexjlzheng@gmail.com
To: chandan.babu@oracle.com,
	djwong@kernel.org
Cc: david@fromorbit.com,
	hch@infradead.org,
	linux-kernel@vger.kernel.org,
	linux-xfs@vger.kernel.org,
	alexjlzheng@tencent.com
Subject: [PATCH xfs v2 0/2] Separate xfs_log_vec/iovec to save memory
Date: Wed, 26 Jun 2024 02:28:40 +0800
Message-ID: <20240625182842.1038809-1-alexjlzheng@tencent.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258591
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-xfs
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

From: Jinliang Zheng <alexjlzheng@tencent.com>

xfs_log_iovec dominates the memory usage of the
xfs_log_vec/xfs_log_iovec combination, and it is no longer useful after
the data is flushed to the iclog. This patchset separates xfs_log_iovec
from xfs_log_vec and releases them early to save memory.

Changelog:
V1:
- https://lore.kernel.org/linux-xfs/20240623123119.3562031-1-alexjlzheng@tencent.com/

V2:
- add kmem_cache for small object xfs_log_vec
- reduce redundant free and allocation of xfs_log_vec

Jinliang Zheng (2):
  xfs: add xfs_log_vec_cache for separate xfs_log_vec/xfs_log_iovec
  xfs: make xfs_log_iovec independent from xfs_log_vec and free it early

 fs/xfs/xfs_log.c     |  3 +++
 fs/xfs/xfs_log.h     | 10 ++++++++--
 fs/xfs/xfs_log_cil.c | 33 ++++++++++++++++++++-------------
 fs/xfs/xfs_super.c   |  9 +++++++++
 4 files changed, 40 insertions(+), 15 deletions(-)

-- 
2.39.3

.

From: Pei Li <peili.dev@gmail.com>
Date: Tue, 25 Jun 2024 11:41:29 -0700
Subject: [PATCH] bcachefs: Fix shift-out-of-bounds in
 bch2_blacklist_entries_gc
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
Message-Id: <20240625-bug1-v1-1-9344c68582a7@gmail.com>
To: Kent Overstreet <kent.overstreet@linux.dev>, 
 Brian Foster <bfoster@redhat.com>
Cc: linux-bcachefs@vger.kernel.org, linux-kernel@vger.kernel.org, 
 syzkaller-bugs@googlegroups.com, skhan@linuxfoundation.org, 
 peili.dev@gmail.com, syzbot+835d255ad6bc7f29ee12@syzkaller.appspotmail.com
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258602
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-bcachefs
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

This series fix the shift-out-of-bounds issue in
bch2_blacklist_entries_gc().

Instead of passing 0 to eytzinger0_first() when iterating the entries,
we explicitly check 0 and initialize i to be 0.

syzbot has tested the proposed patch and the reproducer did not trigger
any issue:

Reported-and-tested-by: syzbot+835d255ad6bc7f29ee12@syzkaller.appspotmail.com
Closes: https://syzkaller.appspot.com/bug?extid=835d255ad6bc7f29ee12
Signed-off-by: Pei Li <peili.dev@gmail.com>
---
Syzbot reported the following issue:
UBSAN: shift-out-of-bounds in ./include/linux/log2.h:67:13
shift exponent 4294967295 is too large for 64-bit type 'long unsigned int'

This is because 0 is passed to __rounddown_pow_of_two(), and -1 is
returned as an unsigned integer. In 32 bit system, it will become
4294967295.

This patch fixes the issue by adding check in
bch2_blacklist_entries_gc() to avoid passing 0 into eytzinger0_first().
If we found out t->nr equals to 0, we directly use 0 to access the root
of the list.

Tested on:

commit:         55027e68 Merge tag 'input-for-v6.10-rc5' of git://git...
git tree:       upstream
console output: https://syzkaller.appspot.com/x/log.txt?x=1191153e980000
kernel config:  https://syzkaller.appspot.com/x/.config?x=d6b9ee98d841760c
dashboard link: https://syzkaller.appspot.com/bug?extid=835d255ad6bc7f29ee12
compiler:       gcc (Debian 12.2.0-14) 12.2.0, GNU ld (GNU Binutils for Debian) 2.40
patch:          https://syzkaller.appspot.com/x/patch.diff?x=15ca4301980000
---
 fs/bcachefs/journal_seq_blacklist.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/fs/bcachefs/journal_seq_blacklist.c b/fs/bcachefs/journal_seq_blacklist.c
index ed4846709611..1f25c111c54c 100644
--- a/fs/bcachefs/journal_seq_blacklist.c
+++ b/fs/bcachefs/journal_seq_blacklist.c
@@ -232,7 +232,7 @@ bool bch2_blacklist_entries_gc(struct bch_fs *c)
 	BUG_ON(nr != t->nr);
 
 	unsigned i;
-	for (src = bl->start, i = eytzinger0_first(t->nr);
+	for (src = bl->start, i = t->nr == 0 ? 0 : eytzinger0_first(t->nr);
 	     src < bl->start + nr;
 	     src++, i = eytzinger0_next(i, nr)) {
 		BUG_ON(t->entries[i].start	!= le64_to_cpu(src->start));

---
base-commit: 563a50672d8a86ec4b114a4a2f44d6e7ff855f5b
change-id: 20240625-bug1-42684cf9d7ed

Best regards,
-- 
Pei Li <peili.dev@gmail.com>

.

X-IronPort-RemoteIP: 209.85.160.70
X-IronPort-MID: 375722550
X-IronPort-Reputation: None
X-IronPort-Listener: OutgoingMail
X-IronPort-SenderGroup: RELAY_GSUITE
X-IronPort-MailFlowPolicy: $RELAYED
IronPort-Data: A9a23:PahF3a0bHjebefVKvPbD5YRwkn2cJEfYwER7XKvMYLTBsI5bp2QGy
 jccUTyDMq2INDajc9B0aITj8hsCv5eEnNZiTQJrqSg9HnlHl5H5CIXCJC8cHc8zwu4v7q5Dx
 59DAjUVBJlsFhcwnj/0b/686yA6jfzVLlbFILasEjhrQgN5QzsWhxtmmuoo6qZlmtH8CA6W0
 T/Ii5S31GSNhXgsYgr414rZ8Ekz5Kqo5WtD1rADTasjUGH2xiF94K03ePnZw0vQGuF8AuO8T
 uDf+7C1lkux1wstEN6sjoHgeUQMRLPIVSDW4paBc/H/6vTqjnVaPpcTbZLwW28O49m6t4kZJ
 OF2iHCFYVxB0psgOQgqe0Iw/ylWZcWq8VJcSJS1mZX7I0buKhMAzxjyZa2f0EJxFutfWAlzG
 fIkxD8lMz+6nP+Yn+KCeOxdo59zPODuAt9EgyQ1pd3ZJa5OrZHrRqzL4Zpf1W51iJ8WW/nZY
 MUdZHxkaxGojx9nYA9GTsJj2r723j+gK1W0q3rMzUYzy3PazAV32pDnLZzYdsHiqcB9xRnF+
 Ticojmhav0cHJu98giM70/rvOHeggLqadgVLp2K2sc/1TV/wURWUnX6T2CTpfi/l177WN9FL
 UEQ0jQhoLJ090GxSNT5GRqirxa5UgU0XtNRF6g94VjIxPWMpQmeAWcAQ3hKb9lOWNIKeAHGH
 2Shx7vBbQGDepXPIZ5B3t94dQ+PBBU=
IronPort-HdrOrdr: A9a23:aZC2560sDgx6vLEv81tcfAqjBJEkLtp133Aq2lEZdPUzSKClfq
 GV88jzsCWetN9/Yh8dcLy7WZVoOEmskqKduLNhW4tKPjOW21dAXbsD0WKK+VSJcUDDH4hmpM
 JdmsNFeb/N5DZB/L3HyTj9P9E8wMSWtICE7N2utUuFlDsaEp2IOT0JcjpyFSBNNW17OaY=
X-Talos-CUID: =?us-ascii?q?9a23=3AaVT2j2rZGgede/H7jJUwKhrmUZ0KS2bA4iiAGn2?=
 =?us-ascii?q?9OEMyGK28TGHMo5oxxg=3D=3D?=
X-Talos-MUID: =?us-ascii?q?9a23=3ADFkd4w1VeewmtzWdIKGMbACpPzUjpIaVOkkQrNI?=
 =?us-ascii?q?8tdibFD1BYTCnrAabe9py?=
From: sahanlb <sahanb@bu.edu>
To: mst@redhat.com,
	jasowang@redhat.com,
	xuanzhuo@linux.alibaba.com
Cc: virtualization@lists.linux.dev,
	linux-kernel@vger.kernel.org,
	drepper@redhat.com,
	sahanlb <sahanb@bu.edu>
Subject: [PATCH] virtio-pci: PCI extended capabilities for virtio
Date: Tue, 25 Jun 2024 14:39:37 -0400
Message-ID: <20240625184043.10658-1-sahanb@bu.edu>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-CES-GSUITE_AUTH: bf3aNvsZpxl8
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258603
Newsgroups: org.kernel.vger.linux-kernel,dev.linux.lists.virtualization
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

PCI legacy configuration space does not have sufficient space for a device
that supports all kinds of virtio structures via PCI capabilities. This is
especially true if one were to use virtio drivers with physical devices.
Link: https://par.nsf.gov/servlets/purl/10463939
A physical device may already have many capabilities in the legacy space.

This patch adds support to place virtio capabilities in the PCI extended
configuration space and makes the driver search both legacy and extended
PCI configuration spaces.

Add new argument to vp_modern_map_capability to indicate whether mapping
a legacy or extended capability.
Add new function virtio_pci_find_ext_capability to walk extended
capabilities and find virtio capabilities.

Modify vp_modern_probe to search both legacy and extended configuration
spaces.
If virtio_pci_find_capability fails to find common, isr, notify, or device
virtio structures, call virtio_pci_find_ext_capability.

Notify virtio structure can get mapped either in vp_modern_probe or in
vp_modern_map_vq_notify. Add new attribute 'notify_ecap' to
struct virtio_pci_modern_device to indicate whether the notify capability
is in the extended congiguration structure.

Add virtio extended capability structures to
"include/uapi/linux/virtio_pci.h".
Format for the extended structures derived from
Link: https://lore.kernel.org/all/20220112055755.41011-2-jasowang@redhat.com/

This patch has been validated using an FPGA development board to implement 
a virtio interface.

Signed-off-by: sahanlb <sahanb@bu.edu>
---
 drivers/virtio/virtio_pci_modern_dev.c | 174 ++++++++++++++++++++-----
 include/linux/virtio_pci_modern.h      |   1 +
 include/uapi/linux/virtio_pci.h        |  31 +++++
 3 files changed, 175 insertions(+), 31 deletions(-)

diff --git a/drivers/virtio/virtio_pci_modern_dev.c b/drivers/virtio/virtio_pci_modern_dev.c
index 0d3dbfaf4b23..75d0555edc7a 100644
--- a/drivers/virtio/virtio_pci_modern_dev.c
+++ b/drivers/virtio/virtio_pci_modern_dev.c
@@ -15,26 +15,41 @@
  * @size: map size
  * @len: the length that is actually mapped
  * @pa: physical address of the capability
+ * @ecap: capability is in the extended config space
  *
  * Returns the io address of for the part of the capability
  */
 static void __iomem *
 vp_modern_map_capability(struct virtio_pci_modern_device *mdev, int off,
 			 size_t minlen, u32 align, u32 start, u32 size,
-			 size_t *len, resource_size_t *pa)
+			 size_t *len, resource_size_t *pa, u8 ecap)
 {
 	struct pci_dev *dev = mdev->pci_dev;
 	u8 bar;
 	u32 offset, length;
 	void __iomem *p;
 
-	pci_read_config_byte(dev, off + offsetof(struct virtio_pci_cap,
-						 bar),
-			     &bar);
-	pci_read_config_dword(dev, off + offsetof(struct virtio_pci_cap, offset),
-			     &offset);
-	pci_read_config_dword(dev, off + offsetof(struct virtio_pci_cap, length),
-			      &length);
+	if (ecap) {
+		pci_read_config_byte(dev, off + offsetof(struct virtio_pci_ecap,
+							 bar),
+				     &bar);
+		pci_read_config_dword(dev, off + offsetof(struct virtio_pci_ecap,
+							  offset),
+				     &offset);
+		pci_read_config_dword(dev, off + offsetof(struct virtio_pci_ecap,
+							  length),
+				      &length);
+	} else {
+		pci_read_config_byte(dev, off + offsetof(struct virtio_pci_cap,
+							 bar),
+				     &bar);
+		pci_read_config_dword(dev, off + offsetof(struct virtio_pci_cap,
+							  offset),
+				     &offset);
+		pci_read_config_dword(dev, off + offsetof(struct virtio_pci_cap,
+							  length),
+				      &length);
+	}
 
 	/* Check if the BAR may have changed since we requested the region. */
 	if (bar >= PCI_STD_NUM_BARS || !(mdev->modern_bars & (1 << bar))) {
@@ -142,6 +157,47 @@ static inline int virtio_pci_find_capability(struct pci_dev *dev, u8 cfg_type,
 	return 0;
 }
 
+/**
+ * virtio_pci_find_ext_capability - walk extended capabilities to find device info.
+ * @dev: the pci device
+ * @cfg_type: the VIRTIO_PCI_CAP_* value we seek
+ * @ioresource_types: IORESOURCE_MEM and/or IORESOURCE_IO.
+ * @bars: the bitmask of BARs
+ *
+ * Returns offset of the capability, or 0.
+ */
+static inline int virtio_pci_find_ext_capability(struct pci_dev *dev, u16 cfg_type,
+						 u32 ioresource_types, int *bars)
+{
+	int pos;
+
+	for (pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_VNDR);
+	     pos > 0;
+	     pos = pci_find_next_ext_capability(dev, pos, PCI_EXT_CAP_ID_VNDR)) {
+		u16 type;
+		u8  bar;
+
+		pci_read_config_word(dev, pos + offsetof(struct virtio_pci_ecap,
+							 cfg_type),
+				     &type);
+		pci_read_config_byte(dev, pos + offsetof(struct virtio_pci_ecap,
+							 bar),
+				     &bar);
+
+		/* Ignore structures with reserved BAR values */
+		if (bar >= PCI_STD_NUM_BARS)
+			continue;
+
+		if (type == cfg_type) {
+			if (pci_resource_len(dev, bar) &&
+			    pci_resource_flags(dev, bar) & ioresource_types) {
+				*bars |= (1 << bar);
+				return pos;
+			}
+		}
+	}
+	return 0;
+}
 /* This is part of the ABI.  Don't screw with it. */
 static inline void check_offsets(void)
 {
@@ -226,7 +282,12 @@ int vp_modern_probe(struct virtio_pci_modern_device *mdev)
 	int err, common, isr, notify, device;
 	u32 notify_length;
 	u32 notify_offset;
+	u8 common_ecap, isr_ecap, notify_ecap, device_ecap;
 	int devid;
+	common_ecap = 0;
+	isr_ecap    = 0;
+	notify_ecap = 0;
+	device_ecap = 0;
 
 	check_offsets();
 
@@ -257,18 +318,42 @@ int vp_modern_probe(struct virtio_pci_modern_device *mdev)
 					    IORESOURCE_IO | IORESOURCE_MEM,
 					    &mdev->modern_bars);
 	if (!common) {
-		dev_info(&pci_dev->dev,
-			 "virtio_pci: leaving for legacy driver\n");
-		return -ENODEV;
+		/* Check extended configuration space. */
+		common = virtio_pci_find_ext_capability(pci_dev, VIRTIO_PCI_CAP_COMMON_CFG,
+							IORESOURCE_IO | IORESOURCE_MEM,
+							&mdev->modern_bars);
+		if (!common) {
+			dev_info(&pci_dev->dev,
+				 "virtio_pci: leaving for legacy driver\n");
+			return -ENODEV;
+		}
+		common_ecap = 1;
 	}
 
 	/* If common is there, these should be too... */
+	/* These also could be in the extended configuration space. */
 	isr = virtio_pci_find_capability(pci_dev, VIRTIO_PCI_CAP_ISR_CFG,
 					 IORESOURCE_IO | IORESOURCE_MEM,
 					 &mdev->modern_bars);
+	if (!isr) {
+		isr = virtio_pci_find_ext_capability(pci_dev,
+						     VIRTIO_PCI_CAP_ISR_CFG,
+						     IORESOURCE_IO | IORESOURCE_MEM,
+						     &mdev->modern_bars);
+		isr_ecap = 1;
+	}
+
 	notify = virtio_pci_find_capability(pci_dev, VIRTIO_PCI_CAP_NOTIFY_CFG,
 					    IORESOURCE_IO | IORESOURCE_MEM,
 					    &mdev->modern_bars);
+	if (!notify) {
+		notify = virtio_pci_find_ext_capability(pci_dev,
+							VIRTIO_PCI_CAP_NOTIFY_CFG,
+							IORESOURCE_IO | IORESOURCE_MEM,
+							&mdev->modern_bars);
+		notify_ecap = 1;
+	}
+
 	if (!isr || !notify) {
 		dev_err(&pci_dev->dev,
 			"virtio_pci: missing capabilities %i/%i/%i\n",
@@ -290,6 +375,13 @@ int vp_modern_probe(struct virtio_pci_modern_device *mdev)
 	device = virtio_pci_find_capability(pci_dev, VIRTIO_PCI_CAP_DEVICE_CFG,
 					    IORESOURCE_IO | IORESOURCE_MEM,
 					    &mdev->modern_bars);
+	if (!device) {
+		device = virtio_pci_find_ext_capability(pci_dev,
+							VIRTIO_PCI_CAP_DEVICE_CFG,
+							IORESOURCE_IO | IORESOURCE_MEM,
+							&mdev->modern_bars);
+		device_ecap = 1;
+	}
 
 	err = pci_request_selected_regions(pci_dev, mdev->modern_bars,
 					   "virtio-pci-modern");
@@ -301,30 +393,48 @@ int vp_modern_probe(struct virtio_pci_modern_device *mdev)
 			      sizeof(struct virtio_pci_common_cfg), 4, 0,
 			      offsetofend(struct virtio_pci_modern_common_cfg,
 					  admin_queue_num),
-			      &mdev->common_len, NULL);
+			      &mdev->common_len, NULL, common_ecap);
 	if (!mdev->common)
 		goto err_map_common;
 	mdev->isr = vp_modern_map_capability(mdev, isr, sizeof(u8), 1,
 					     0, 1,
-					     NULL, NULL);
+					     NULL, NULL, isr_ecap);
 	if (!mdev->isr)
 		goto err_map_isr;
 
-	/* Read notify_off_multiplier from config space. */
-	pci_read_config_dword(pci_dev,
-			      notify + offsetof(struct virtio_pci_notify_cap,
-						notify_off_multiplier),
-			      &mdev->notify_offset_multiplier);
-	/* Read notify length and offset from config space. */
-	pci_read_config_dword(pci_dev,
-			      notify + offsetof(struct virtio_pci_notify_cap,
-						cap.length),
-			      &notify_length);
-
-	pci_read_config_dword(pci_dev,
-			      notify + offsetof(struct virtio_pci_notify_cap,
-						cap.offset),
-			      &notify_offset);
+	if (notify_ecap) {
+		/* Read notify_off_multiplier from config space. */
+		pci_read_config_dword(pci_dev,
+				      notify + offsetof(struct virtio_pci_notify_ecap,
+							notify_off_multiplier),
+				      &mdev->notify_offset_multiplier);
+		/* Read notify length and offset from config space. */
+		pci_read_config_dword(pci_dev,
+				      notify + offsetof(struct virtio_pci_notify_ecap,
+							cap.length),
+				      &notify_length);
+
+		pci_read_config_dword(pci_dev,
+				      notify + offsetof(struct virtio_pci_notify_ecap,
+							cap.offset),
+				      &notify_offset);
+	} else {
+		/* Read notify_off_multiplier from config space. */
+		pci_read_config_dword(pci_dev,
+				      notify + offsetof(struct virtio_pci_notify_cap,
+							notify_off_multiplier),
+				      &mdev->notify_offset_multiplier);
+		/* Read notify length and offset from config space. */
+		pci_read_config_dword(pci_dev,
+				      notify + offsetof(struct virtio_pci_notify_cap,
+							cap.length),
+				      &notify_length);
+
+		pci_read_config_dword(pci_dev,
+				      notify + offsetof(struct virtio_pci_notify_cap,
+							cap.offset),
+				      &notify_offset);
+	}
 
 	/* We don't know how many VQs we'll map, ahead of the time.
 	 * If notify length is small, map it all now.
@@ -335,11 +445,13 @@ int vp_modern_probe(struct virtio_pci_modern_device *mdev)
 							     2, 2,
 							     0, notify_length,
 							     &mdev->notify_len,
-							     &mdev->notify_pa);
+							     &mdev->notify_pa,
+							     notify_ecap);
 		if (!mdev->notify_base)
 			goto err_map_notify;
 	} else {
 		mdev->notify_map_cap = notify;
+		mdev->notify_ecap = notify_ecap;
 	}
 
 	/* Again, we don't know how much we should map, but PAGE_SIZE
@@ -349,7 +461,7 @@ int vp_modern_probe(struct virtio_pci_modern_device *mdev)
 		mdev->device = vp_modern_map_capability(mdev, device, 0, 4,
 							0, PAGE_SIZE,
 							&mdev->device_len,
-							NULL);
+							NULL, device_ecap);
 		if (!mdev->device)
 			goto err_map_device;
 	}
@@ -718,7 +830,7 @@ void __iomem *vp_modern_map_vq_notify(struct virtio_pci_modern_device *mdev,
 		return vp_modern_map_capability(mdev,
 				       mdev->notify_map_cap, 2, 2,
 				       off * mdev->notify_offset_multiplier, 2,
-				       NULL, pa);
+				       NULL, pa, mdev->notify_ecap);
 	}
 }
 EXPORT_SYMBOL_GPL(vp_modern_map_vq_notify);
diff --git a/include/linux/virtio_pci_modern.h b/include/linux/virtio_pci_modern.h
index c0b1b1ca1163..d9c2e66f23f4 100644
--- a/include/linux/virtio_pci_modern.h
+++ b/include/linux/virtio_pci_modern.h
@@ -41,6 +41,7 @@ struct virtio_pci_modern_device {
 	size_t common_len;
 
 	int notify_map_cap;
+	u8 notify_ecap;
 
 	u32 notify_offset_multiplier;
 	int modern_bars;
diff --git a/include/uapi/linux/virtio_pci.h b/include/uapi/linux/virtio_pci.h
index a8208492e822..a7348ef8f61a 100644
--- a/include/uapi/linux/virtio_pci.h
+++ b/include/uapi/linux/virtio_pci.h
@@ -129,17 +129,43 @@ struct virtio_pci_cap {
 	__le32 length;		/* Length of the structure, in bytes. */
 };
 
+/* PCI extended capability header */
+struct virtio_pci_ecap {
+	__le16 cap_vndr;      /* Generic PCI field: PCI_EXT_CAP_ID_VNDR */
+	__le16 cap_rev:4;     /* Generic PCI field: capability version: 0x1 */
+	__le16 cap_next:12;   /* Generic PCI field: next ptr */
+	__le16 cfg_type;      /* Identifies the structure */
+	__le16 cfg_rev:4;     /* Identifies the version of the structure: 0x1 */
+	__le16 cap_len:12;    /* The bytes of the entire capability */
+	__u8 bar;             /* Where to find it. */
+	__u8 id;              /* Multiple capabilities of the same type */
+	__u8 padding[2];      /* Pad to full dword. */
+	__le32 offset;        /* Offset within bar. */
+	__le32 length;        /* Length of the structure, in bytes. */
+};
+
 struct virtio_pci_cap64 {
 	struct virtio_pci_cap cap;
 	__le32 offset_hi;             /* Most sig 32 bits of offset */
 	__le32 length_hi;             /* Most sig 32 bits of length */
 };
 
+struct virtio_pci_ecap64 {
+	struct virtio_pci_ecap cap;
+	__le32 offset_hi;             /* Most sig 32 bits of offset */
+	__le32 length_hi;             /* Most sig 32 bits of length */
+};
+
 struct virtio_pci_notify_cap {
 	struct virtio_pci_cap cap;
 	__le32 notify_off_multiplier;	/* Multiplier for queue_notify_off. */
 };
 
+struct virtio_pci_notify_ecap {
+	struct virtio_pci_ecap cap;
+	__le32 notify_off_multiplier;	/* Multiplier for queue_notify_off. */
+};
+
 /* Fields in VIRTIO_PCI_CAP_COMMON_CFG: */
 struct virtio_pci_common_cfg {
 	/* About the whole device. */
@@ -186,6 +212,11 @@ struct virtio_pci_cfg_cap {
 	__u8 pci_cfg_data[4]; /* Data for BAR access. */
 };
 
+struct virtio_pci_cfg_ecap {
+	struct virtio_pci_ecap cap;
+	__u8 pci_cfg_data[4]; /* Data for BAR access. */
+};
+
 /* Macro versions of offsets for the Old Timers! */
 #define VIRTIO_PCI_CAP_VNDR		0
 #define VIRTIO_PCI_CAP_NEXT		1
-- 
2.42.0

.

From: Rasmus Villemoes <linux@rasmusvillemoes.dk>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Jiri Slaby <jirislaby@kernel.org>,
	Shawn Guo <shawnguo@kernel.org>,
	Sascha Hauer <s.hauer@pengutronix.de>,
	Pengutronix Kernel Team <kernel@pengutronix.de>,
	Fabio Estevam <festevam@gmail.com>
Cc: Rasmus Villemoes <linux@rasmusvillemoes.dk>,
	=?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= <u.kleine-koenig@pengutronix.de>,
	linux-kernel@vger.kernel.org,
	linux-serial@vger.kernel.org,
	imx@lists.linux.dev,
	linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2] serial: imx: ensure RTS signal is not left active after shutdown
Date: Tue, 25 Jun 2024 20:42:05 +0200
Message-ID: <20240625184206.508837-1-linux@rasmusvillemoes.dk>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258604
Newsgroups: org.kernel.vger.linux-kernel,dev.linux.lists.imx,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-serial
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

If a process is killed while writing to a /dev/ttymxc* device in RS485
mode, we observe that the RTS signal is left high, thus making it
impossible for other devices to transmit anything.

Moreover, the ->tx_state variable is left in state SEND, which means
that when one next opens the device and configures baud rate etc., the
initialization code in imx_uart_set_termios dutifully ensures the RTS
pin is pulled down, but since ->tx_state is already SEND, the logic in
imx_uart_start_tx() does not in fact pull the pin high before
transmitting, so nothing actually gets on the wire on the other side
of the transceiver. Only when that transmission is allowed to complete
is the state machine then back in a consistent state.

This is completely reproducible by doing something as simple as

  seq 10000 > /dev/ttymxc0

and hitting ctrl-C, and watching with a logic analyzer.

Signed-off-by: Rasmus Villemoes <linux@rasmusvillemoes.dk>
---
v2: Use dev_warn() instead of dev_WARN_ONCE().

v1: https://lore.kernel.org/lkml/20240524121246.1896651-1-linux@rasmusvillemoes.dk/

A screen dump from a logic analyzer can be seen at:

  https://ibb.co/xCcP7Jy

This is on an imx8mp board, with /dev/ttymxc0 and /dev/ttymxc2 both
configured for rs485 and connected to each other. I'm writing to
/dev/ttymxc2. This demonstrates both bugs; that RTS is left high when
a write is interrupted, and that a subsequent write actually fails to
have RTS high while TX'ing.

I'm not sure what commit to name as a Fixes:. This certainly happens
on 6.6 and onwards, but I assume the problem exists since the tx_state
machine was introduced in cb1a60923609 (serial: imx: implement rts
delaying for rs485), and possibly even before that.


 drivers/tty/serial/imx.c | 51 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 51 insertions(+)

diff --git a/drivers/tty/serial/imx.c b/drivers/tty/serial/imx.c
index 2eb22594960f..85c240e8c24e 100644
--- a/drivers/tty/serial/imx.c
+++ b/drivers/tty/serial/imx.c
@@ -1551,6 +1551,7 @@ static void imx_uart_shutdown(struct uart_port *port)
 	struct imx_port *sport = (struct imx_port *)port;
 	unsigned long flags;
 	u32 ucr1, ucr2, ucr4, uts;
+	int loops;
 
 	if (sport->dma_is_enabled) {
 		dmaengine_terminate_sync(sport->dma_chan_tx);
@@ -1613,6 +1614,56 @@ static void imx_uart_shutdown(struct uart_port *port)
 	ucr4 &= ~UCR4_TCEN;
 	imx_uart_writel(sport, ucr4, UCR4);
 
+	/*
+	 * We have to ensure the tx state machine ends up in OFF. This
+	 * is especially important for rs485 where we must not leave
+	 * the RTS signal high, blocking the bus indefinitely.
+	 *
+	 * All interrupts are now disabled, so imx_uart_stop_tx() will
+	 * no longer be called from imx_uart_transmit_buffer(). It may
+	 * still be called via the hrtimers, and if those are in play,
+	 * we have to honour the delays.
+	 */
+	if (sport->tx_state == WAIT_AFTER_RTS || sport->tx_state == SEND)
+		imx_uart_stop_tx(port);
+
+	/*
+	 * In many cases (rs232 mode, or if tx_state was
+	 * WAIT_AFTER_RTS, or if tx_state was SEND and there is no
+	 * delay_rts_after_send), this will have moved directly to
+	 * OFF. In rs485 mode, tx_state might already have been
+	 * WAIT_AFTER_SEND and the hrtimer thus already started, or
+	 * the above imx_uart_stop_tx() call could have started it. In
+	 * those cases, we have to wait for the hrtimer to fire and
+	 * complete the transition to OFF.
+	 */
+	loops = port->rs485.flags & SER_RS485_ENABLED ?
+		port->rs485.delay_rts_after_send : 0;
+	while (sport->tx_state != OFF && loops--) {
+		uart_port_unlock_irqrestore(&sport->port, flags);
+		msleep(1);
+		uart_port_lock_irqsave(&sport->port, &flags);
+	}
+
+	if (sport->tx_state != OFF) {
+		dev_warn(sport->port.dev, "unexpected tx_state %d\n",
+			 sport->tx_state);
+		/*
+		 * This machine may be busted, but ensure the RTS
+		 * signal is inactive in order not to block other
+		 * devices.
+		 */
+		if (port->rs485.flags & SER_RS485_ENABLED) {
+			ucr2 = imx_uart_readl(sport, UCR2);
+			if (port->rs485.flags & SER_RS485_RTS_AFTER_SEND)
+				imx_uart_rts_active(sport, &ucr2);
+			else
+				imx_uart_rts_inactive(sport, &ucr2);
+			imx_uart_writel(sport, ucr2, UCR2);
+		}
+		sport->tx_state = OFF;
+	}
+
 	uart_port_unlock_irqrestore(&sport->port, flags);
 
 	clk_disable_unprepare(sport->clk_per);
-- 
2.45.2

.

Date: Tue, 25 Jun 2024 11:42:17 -0700
Message-Id: <20240625184224.929018-1-irogers@google.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
Mime-Version: 1.0
Subject: [PATCH v4 0/7] Refactor perf python module build
From: Ian Rogers <irogers@google.com>
To: Peter Zijlstra <peterz@infradead.org>, Ingo Molnar <mingo@redhat.com>, 
	Arnaldo Carvalho de Melo <acme@kernel.org>, Namhyung Kim <namhyung@kernel.org>, 
	Mark Rutland <mark.rutland@arm.com>, 
	Alexander Shishkin <alexander.shishkin@linux.intel.com>, Jiri Olsa <jolsa@kernel.org>, 
	Ian Rogers <irogers@google.com>, Adrian Hunter <adrian.hunter@intel.com>, 
	Kan Liang <kan.liang@linux.intel.com>, John Garry <john.g.garry@oracle.com>, 
	Will Deacon <will@kernel.org>, James Clark <james.clark@arm.com>, 
	Mike Leach <mike.leach@linaro.org>, Leo Yan <leo.yan@linux.dev>, Guo Ren <guoren@kernel.org>, 
	Paul Walmsley <paul.walmsley@sifive.com>, Palmer Dabbelt <palmer@dabbelt.com>, 
	Albert Ou <aou@eecs.berkeley.edu>, Suzuki K Poulose <suzuki.poulose@arm.com>, 
	Yicong Yang <yangyicong@hisilicon.com>, Jonathan Cameron <jonathan.cameron@huawei.com>, 
	Miguel Ojeda <ojeda@kernel.org>, Alex Gaynor <alex.gaynor@gmail.com>, 
	Wedson Almeida Filho <wedsonaf@gmail.com>, Boqun Feng <boqun.feng@gmail.com>, Gary Guo <gary@garyguo.net>, 
	"=?UTF-8?q?Bj=C3=B6rn=20Roy=20Baron?=" <bjorn3_gh@protonmail.com>, Benno Lossin <benno.lossin@proton.me>, 
	Andreas Hindborg <a.hindborg@samsung.com>, Alice Ryhl <aliceryhl@google.com>, 
	Nick Terrell <terrelln@fb.com>, Andrei Vagin <avagin@google.com>, Kees Cook <keescook@chromium.org>, 
	Oliver Upton <oliver.upton@linux.dev>, Ze Gao <zegao2021@gmail.com>, 
	linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org
Content-Type: text/plain; charset="UTF-8"
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258605
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-perf-users
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Refactor the perf python module build to instead of building C files
it links libraries. To support this make static libraries for tests,
ui, util and pmu-events. Doing this allows fewer functions to be
stubbed out, importantly parse_events is no longer stubbed out which
will improve the ability to work with heterogeneous cores.

By not building .c files for the python module and for the build of
perf, this should also help build times.

Patch 1 adds '*.a' cleanup to the clean target.

Patches 2 to 6 add static libraries for existing parts of the perf
build.

Patch 7 adds the python build using libraries rather than C source
files.

Patch 8 cleans up the python dependencies and removes the no longer
needed python-ext-sources.

v4: Rebase past conflict with commit eae7044b67a6 ("perf hist: Honor
    symbol_conf.skip_empty") - fixes like this commit won't be
    necessary after these changes. Swap a tab for spaces for better
    consistency.
v3: Add missed xtensa directory for the util build. Remove adding the
    arch directory to perf-y as it creates an empty object file that
    breaks with GCC and LTO.
v2: Add '*.a' cleanup to clean target. Add reviewed-by James Clark.

Ian Rogers (7):
  perf build: Add '*.a' to clean targets
  perf ui: Make ui its own library
  perf pmu-events: Make pmu-events a library
  perf test: Make tests its own library
  perf bench: Make bench its own library
  perf util: Make util its own library
  perf python: Switch module to linking libraries from building source

 tools/perf/Build                              |  14 +-
 tools/perf/Makefile.config                    |   5 +
 tools/perf/Makefile.perf                      |  75 +++-
 tools/perf/arch/Build                         |   5 +-
 tools/perf/arch/arm/Build                     |   4 +-
 tools/perf/arch/arm/tests/Build               |   8 +-
 tools/perf/arch/arm/util/Build                |  10 +-
 tools/perf/arch/arm64/Build                   |   4 +-
 tools/perf/arch/arm64/tests/Build             |   8 +-
 tools/perf/arch/arm64/util/Build              |  20 +-
 tools/perf/arch/csky/Build                    |   2 +-
 tools/perf/arch/csky/util/Build               |   6 +-
 tools/perf/arch/loongarch/Build               |   2 +-
 tools/perf/arch/loongarch/util/Build          |   8 +-
 tools/perf/arch/mips/Build                    |   2 +-
 tools/perf/arch/mips/util/Build               |   6 +-
 tools/perf/arch/powerpc/Build                 |   4 +-
 tools/perf/arch/powerpc/tests/Build           |   6 +-
 tools/perf/arch/powerpc/util/Build            |  24 +-
 tools/perf/arch/riscv/Build                   |   2 +-
 tools/perf/arch/riscv/util/Build              |   8 +-
 tools/perf/arch/s390/Build                    |   2 +-
 tools/perf/arch/s390/util/Build               |  16 +-
 tools/perf/arch/sh/Build                      |   2 +-
 tools/perf/arch/sh/util/Build                 |   2 +-
 tools/perf/arch/sparc/Build                   |   2 +-
 tools/perf/arch/sparc/util/Build              |   2 +-
 tools/perf/arch/x86/Build                     |   6 +-
 tools/perf/arch/x86/tests/Build               |  20 +-
 tools/perf/arch/x86/util/Build                |  42 +-
 tools/perf/arch/xtensa/Build                  |   2 +-
 tools/perf/bench/Build                        |  46 +-
 tools/perf/scripts/Build                      |   4 +-
 tools/perf/scripts/perl/Perf-Trace-Util/Build |   2 +-
 .../perf/scripts/python/Perf-Trace-Util/Build |   2 +-
 tools/perf/tests/Build                        | 140 +++----
 tools/perf/tests/workloads/Build              |  12 +-
 tools/perf/ui/Build                           |  18 +-
 tools/perf/ui/browsers/Build                  |  14 +-
 tools/perf/ui/tui/Build                       |   8 +-
 tools/perf/util/Build                         | 394 +++++++++---------
 tools/perf/util/arm-spe-decoder/Build         |   2 +-
 tools/perf/util/cs-etm-decoder/Build          |   2 +-
 tools/perf/util/hisi-ptt-decoder/Build        |   2 +-
 tools/perf/util/intel-pt-decoder/Build        |   2 +-
 tools/perf/util/perf-regs-arch/Build          |  18 +-
 tools/perf/util/python.c                      | 274 +++++-------
 tools/perf/util/scripting-engines/Build       |   4 +-
 tools/perf/util/setup.py                      |  33 +-
 49 files changed, 625 insertions(+), 671 deletions(-)

-- 
2.45.2.741.gdbec12cfda-goog

.

From: Roman Storozhenko <romeusmeister@gmail.com>
Subject: [PATCH 0/2] cpupower: Add 'uninstall' targers for arch-related
 debug subprojects
Date: Tue, 25 Jun 2024 20:53:54 +0200
Message-Id: <20240625-add_uninstall-v1-0-ab031bbd98e6@gmail.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
To: Thomas Renninger <trenn@suse.com>, Shuah Khan <shuah@kernel.org>
Cc: linux-pm@vger.kernel.org, 
 Javier Carrasco <javier.carrasco.cruz@gmail.com>, 
 linux-kernel@vger.kernel.org, Roman Storozhenko <romeusmeister@gmail.com>
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258623
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-pm
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

This patch series adds 'uninstall' targets to the makefiles of
'debug/i386' and 'debug/x86_64' architecture-specifics debug subprojects

Signed-off-by: Roman Storozhenko <romeusmeister@gmail.com>
---
Roman Storozhenko (2):
      cpupower: Add 'uninstall' target for 'debug/i386' subproject
      cpupower: Add 'uninstall' target for 'debug/x86_64' subproject

 tools/power/cpupower/debug/i386/Makefile   | 8 +++++++-
 tools/power/cpupower/debug/x86_64/Makefile | 6 +++++-
 2 files changed, 12 insertions(+), 2 deletions(-)
---
base-commit: 0fc4bfab2cd45f9acb86c4f04b5191e114e901ed
change-id: 20240625-add_uninstall-14246eeec69a

Best regards,
-- 
Roman Storozhenko <romeusmeister@gmail.com>

.

From: Garrett Giordano <ggiordano@phytec.com>
To: nm@ti.com,
	vigneshr@ti.com,
	kristo@kernel.org,
	robh@kernel.org,
	krzk+dt@kernel.org,
	conor+dt@kernel.org,
	w.egorov@phytec.de
Cc: linux-arm-kernel@lists.infradead.org,
	devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	upstream@lists.phytec.de
Subject: [PATCH 1/4] arm64: dts: ti: k3-am62a: Enable AUDIO_REFCLKx
Date: Tue, 25 Jun 2024 11:53:59 -0700
Message-Id: <20240625185402.1896623-1-ggiordano@phytec.com>
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258626
Newsgroups: org.kernel.vger.linux-kernel,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-devicetree
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

On AM62a SoCs the AUDIO_REFCLKx clocks can be used as an input to
external peripherals when configured through CTRL_MMR, so add the
clock nodes.

Based on: Link: https://lore.kernel.org/lkml/20230807202159.13095-2-francesco@dolcini.it/
Signed-off-by: Garrett Giordano <ggiordano@phytec.com>
---
 arch/arm64/boot/dts/ti/k3-am62a-main.dtsi | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/arch/arm64/boot/dts/ti/k3-am62a-main.dtsi b/arch/arm64/boot/dts/ti/k3-am62a-main.dtsi
index bf9c2d9c6439..2a6e333f752c 100644
--- a/arch/arm64/boot/dts/ti/k3-am62a-main.dtsi
+++ b/arch/arm64/boot/dts/ti/k3-am62a-main.dtsi
@@ -59,6 +59,24 @@ epwm_tbclk: clock-controller@4130 {
 			reg = <0x4130 0x4>;
 			#clock-cells = <1>;
 		};
+
+		audio_refclk0: clock-controller@82e0 {
+			compatible = "ti,am62-audio-refclk";
+			reg = <0x82e0 0x4>;
+			clocks = <&k3_clks 157 0>;
+			assigned-clocks = <&k3_clks 157 0>;
+			assigned-clock-parents = <&k3_clks 157 8>;
+			#clock-cells = <0>;
+		};
+
+		audio_refclk1: clock-controller@82e4 {
+			compatible = "ti,am62-audio-refclk";
+			reg = <0x82e4 0x4>;
+			clocks = <&k3_clks 157 10>;
+			assigned-clocks = <&k3_clks 157 10>;
+			assigned-clock-parents = <&k3_clks 157 18>;
+			#clock-cells = <0>;
+		};
 	};
 
 	dmss: bus@48000000 {
-- 
2.25.1

.

From: Konrad Dybcio <konrad.dybcio@linaro.org>
Subject: [PATCH v2 0/2] Clean up barriers
Date: Tue, 25 Jun 2024 20:54:40 +0200
Message-Id: <20240625-adreno_barriers-v2-0-c01f2ef4b62a@linaro.org>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
To: Rob Clark <robdclark@gmail.com>, Sean Paul <sean@poorly.run>, 
 Abhinav Kumar <quic_abhinavk@quicinc.com>, 
 Dmitry Baryshkov <dmitry.baryshkov@linaro.org>, 
 David Airlie <airlied@gmail.com>, Daniel Vetter <daniel@ffwll.ch>
Cc: Marijn Suijten <marijn.suijten@somainline.org>, 
 linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, 
 freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org, 
 Akhil P Oommen <quic_akhilpo@quicinc.com>, 
 Konrad Dybcio <konrad.dybcio@linaro.org>
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258630
Newsgroups: org.kernel.vger.linux-kernel,org.freedesktop.lists.dri-devel,org.kernel.vger.linux-arm-msm
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Changes in v3:
- Drop the wrapper functions
- Drop the readback in GMU code
- Split the commit in two

Link to v2: https://lore.kernel.org/linux-arm-msm/20240509-topic-adreno-v2-1-b82a9f99b345@linaro.org/

Changes in v2:
- Introduce gpu_write_flush() and use it
- Don't accidentally break a630 by trying to write to non-existent GBIF

Link to v1: https://lore.kernel.org/linux-arm-msm/20240508-topic-adreno-v1-1-1babd05c119d@linaro.org/

Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
---
Konrad Dybcio (2):
      drm/msm/adreno: De-spaghettify the use of memory barriers
      Revert "drm/msm/a6xx: Poll for GBIF unhalt status in hw_init"

 drivers/gpu/drm/msm/adreno/a6xx_gmu.c |  4 +---
 drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 14 ++++++--------
 2 files changed, 7 insertions(+), 11 deletions(-)
---
base-commit: 0fc4bfab2cd45f9acb86c4f04b5191e114e901ed
change-id: 20240625-adreno_barriers-29f356742418

Best regards,
-- 
Konrad Dybcio <konrad.dybcio@linaro.org>

.

From: "Liam R. Howlett" <Liam.Howlett@oracle.com>
To: linux-mm@kvack.org, Andrew Morton <akpm@linux-foundation.org>
Cc: Suren Baghdasaryan <surenb@google.com>, Vlastimil Babka <vbabka@suse.cz>,
        Lorenzo Stoakes <lstoakes@gmail.com>,
        Matthew Wilcox <willy@infradead.org>, sidhartha.kumar@oracle.com,
        "Paul E . McKenney" <paulmck@kernel.org>,
        Bert Karwatzki <spasswolf@web.de>, Jiri Olsa <olsajiri@gmail.com>,
        linux-kernel@vger.kernel.org, Kees Cook <kees@kernel.org>,
        "Liam R. Howlett" <Liam.Howlett@oracle.com>
Subject: [PATCH v2 00/15] Avoid MAP_FIXED gap exposure
Date: Tue, 25 Jun 2024 15:11:30 -0400
Message-ID: <20240625191145.3382793-1-Liam.Howlett@oracle.com>
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258645 org.kvack.linux-mm:201379
Newsgroups: org.kernel.vger.linux-kernel,org.kvack.linux-mm
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

It is now possible to walk the vma tree using the rcu read locks and is
beneficial to do so to reduce lock contention.  Doing so while a
MAP_FIXED mapping is executing means that a reader may see a gap in the
vma tree that should never logically exist - and does not when using the
mmap lock in read mode.  The temporal gap exists because mmap_region()
calls munmap() prior to installing the new mapping.

This patch set stops rcu readers from seeing the temporal gap by
splitting up the munmap() function into two parts.  The first part
prepares the vma tree for modifications by doing the necessary splits
and tracks the vmas marked for removal in a side tree.  The second part
completes the munmapping of the vmas after the vma tree has been
overwritten (either by a MAP_FIXED replacement vma or by a NULL in the
munmap() case).

Please note that rcu walkers will still be able to see a temporary state
of split vmas that may be in the process of being removed, but the
temporal gap will not be exposed.  vma_start_write() are called on both
parts of the split vma, so this state is detectable.

RFC: https://lore.kernel.org/linux-mm/20240531163217.1584450-1-Liam.Howlett@oracle.com/
v1: https://lore.kernel.org/linux-mm/20240611180200.711239-1-Liam.Howlett@oracle.com/

Changes since v1:
- Fixed issue with expanding vmas clearing the incorrect PTE range,
  Thanks Bert Karwatzki and Jiri Olsa for testing linux-next
- Separated patches into smaller portions for easier reviewing
- Replaced open coded shifting of length with PHYS_PFN()
- Changed security calculation (Cc Kees on this change)
- Changed the vma iterator use to point to the targeted area instead of
  the previous vma
- Remove page table entries prior to fully removing the vmas, if a
  driver may do mappings
- Tested with stress-ng and split/joining of VMA at the start, end, and
  middle of a vma.

Liam R. Howlett (15):
  mm/mmap: Correctly position vma_iterator in __split_vma()
  mm/mmap: Introduce abort_munmap_vmas()
  mm/mmap: Introduce vmi_complete_munmap_vmas()
  mm/mmap: Extract the gathering of vmas from do_vmi_align_munmap()
  mm/mmap: Introduce vma_munmap_struct for use in munmap operations
  mm/mmap: Change munmap to use vma_munmap_struct() for accounting and
    surrounding vmas
  mm/mmap: Extract validate_mm() from vma_complete()
  mm/mmap: Inline munmap operation in mmap_region()
  mm/mmap: Expand mmap_region() munmap call
  mm/mmap: Reposition vma iterator in mmap_region()
  mm/mmap: Track start and end of munmap in vma_munmap_struct
  mm/mmap: Avoid zeroing vma tree in mmap_region()
  mm/mmap: Use PHYS_PFN in mmap_region()
  mm/mmap: Use vms accounted pages in mmap_region()
  mm/mmap: Move may_expand_vm() check in mmap_region()

 mm/internal.h |  25 +++
 mm/mmap.c     | 449 +++++++++++++++++++++++++++++++-------------------
 2 files changed, 304 insertions(+), 170 deletions(-)

-- 
2.43.0

.

From: Andrei Lalaev <andrey.lalaev@gmail.com>
To: dmitry.torokhov@gmail.com
Cc: andrey.lalaev@gmail.com,
	linux-input@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	robh@kernel.org,
	m.felsch@pengutronix.de
Subject: Re: [PATCH] Input: qt1050 - handle CHIP_ID reading error
Date: Tue, 25 Jun 2024 21:30:33 +0200
Message-ID: <20240625193047.35564-1-andrey.lalaev@gmail.com>
Reply-To: Znrs5QVAuSjH5sCT@google.com
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258663
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-input
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

> But how did we get into the situation with the chip being missing?

In my case, this chip is a part of an external board.
So, for example, I see this messageÂ in the case of a bad cable connection.

Also, I prefer to see messages with error codes instead of random values from a stack :)

Best regards,
Andrei Lalaev
.

Date: Tue, 25 Jun 2024 21:46:01 +0200
From: Philipp Hortmann <philipp.g.hortmann@gmail.com>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org
Subject: [PATCH] staging: rtl8723bs: Remove unused variable pwdev_priv
Message-ID: <20240625194601.GA16828@matrix-ESPRIMO-P710>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258670
Newsgroups: org.kernel.vger.linux-kernel,dev.linux.lists.linux-staging
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Remove unused variable pwdev_priv.

Fixes: bdee203cd80c ("staging: rtl8723bs: Remove switch(type) as type is constant")
Reported-by: kernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202406250759.FnxzD3PK-lkp@intel.com/
Signed-off-by: Philipp Hortmann <philipp.g.hortmann@gmail.com>
---
Tested with rtl8723bs in ODYS Trendbook Next 14
---
 drivers/staging/rtl8723bs/os_dep/ioctl_cfg80211.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/drivers/staging/rtl8723bs/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723bs/os_dep/ioctl_cfg80211.c
index 2bd8b1447698..eb3c73cc2662 100644
--- a/drivers/staging/rtl8723bs/os_dep/ioctl_cfg80211.c
+++ b/drivers/staging/rtl8723bs/os_dep/ioctl_cfg80211.c
@@ -2550,7 +2550,6 @@ static int cfg80211_rtw_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
 	u8 tx_ch = (u8)ieee80211_frequency_to_channel(chan->center_freq);
 	u8 category, action;
 	struct adapter *padapter;
-	struct rtw_wdev_priv *pwdev_priv;
 
 	if (!ndev) {
 		ret = -EINVAL;
@@ -2558,7 +2557,6 @@ static int cfg80211_rtw_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
 	}
 
 	padapter = rtw_netdev_priv(ndev);
-	pwdev_priv = adapter_wdev_data(padapter);
 
 	/* cookie generation */
 	*cookie = (unsigned long)buf;
-- 
2.45.2

.

Content-Type: multipart/mixed; boundary="------------bT82KLeQoW7zBQpU2ZM30tur"
Message-ID: <5cf9727e-073e-4691-880c-06630c60f6b8@linuxfoundation.org>
Date: Tue, 25 Jun 2024 13:53:41 -0600
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Language: en-US
To: Mauro Carvalho Chehab <mchehab@kernel.org>
Cc: Hans Verkuil <hverkuil@xs4all.nl>,
 Laurent Pinchart <laurent.pinchart@ideasonboard.com>,
 Shuah Khan <skhan@linuxfoundation.org>, linux-media@vger.kernel.org,
 linux-kernel@vger.kernel.org
From: Shuah Khan <skhan@linuxfoundation.org>
Subject: [GIT PULL] Linux Media vimc update for 6.11-rc1
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258677
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-media
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

This is a multi-part message in MIME format.
--------------bT82KLeQoW7zBQpU2ZM30tur
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit

Hi Mauro,

Please pull the following vimc next update for Linux 6.11-rc1.

This vimc update for Linux 6.11-rc1 consists of a nine patch series
that cleans up and improves the vimc driver, with the end goal of
converting it to the V4L2 subdev active state API. The goal of
this exercise is to make the API used by a virtual test driver, to
increase test coverage.

The series starts with 4 random cleanups, to avoid unnecessary
iterations (1/9), constify structures (2/9 and 3/9) and rename a
weirdly-named enum (4/9). Patch 5/9 then centralizes the subdev
internal_ops initialization to prepare for the switch to the active
state API. The remaining patches (6/9 to 9/9) convert the vimc entities
to the new API one by one.

The result has been tested using the libcamera unit tests, which make
extensive use of the vimc driver, as well as with v4l2-compliance. The
latter reports 4 errors, but they occur already with the latest stage
master branch.

diff is attached.

thanks,
-- Shuah

----------------------------------------------------------------
The following changes since commit 1613e604df0cd359cf2a7fbd9be7a0bcfacfabd0:

   Linux 6.10-rc1 (2024-05-26 15:20:12 -0700)

are available in the Git repository at:

   git://git.kernel.org/pub/scm/linux/kernel/git/shuah/linux tags/linux-vimc-6.11-rc1

for you to fetch changes up to 9519ea9c9a492149b202e09e7fdc0ba7ac711e58:

   media: vimc: scaler: Use subdev active state (2024-06-20 09:55:58 -0600)

----------------------------------------------------------------
linux-vimc-6.11-rc1

This vimc update for Linux 6.11-rc1 consists of a nine patch series
that cleans up and improves the vimc driver, with the end goal of
converting it to the V4L2 subdev active state API. The goal of
this exercise is to make the API used by a virtual test driver, to
increase test coverage.

The series starts with 4 random cleanups, to avoid unnecessary
iterations (1/9), constify structures (2/9 and 3/9) and rename a
weirdly-named enum (4/9). Patch 5/9 then centralizes the subdev
internal_ops initialization to prepare for the switch to the active
state API. The remaining patches (6/9 to 9/9) convert the vimc entities
to the new API one by one.

The result has been tested using the libcamera unit tests, which make
extensive use of the vimc driver, as well as with v4l2-compliance. The
latter reports 4 errors, but they occur already with the latest stage
master branch.

----------------------------------------------------------------
Laurent Pinchart (9):
       media: vimc: Don't iterate over single pad
       media: vimc: Constify vimc_ent_type structures
       media: vimc: Constify the ent_config array
       media: vimc: scaler: Rename vic_sca_pad enum to vimc_scaler_pad
       media: vimc: Centralize subdev internal_ops initialization
       media: vimc: Initialize subdev active state
       media: vimc: sensor: Use subdev active state
       media: vimc: debayer: Use subdev active state
       media: vimc: scaler: Use subdev active state

  drivers/media/test-drivers/vimc/vimc-capture.c |   2 +-
  drivers/media/test-drivers/vimc/vimc-common.c  |  25 ++-
  drivers/media/test-drivers/vimc/vimc-common.h  |  14 +-
  drivers/media/test-drivers/vimc/vimc-core.c    |   2 +-
  drivers/media/test-drivers/vimc/vimc-debayer.c | 201 +++++++++++--------------
  drivers/media/test-drivers/vimc/vimc-lens.c    |   5 +-
  drivers/media/test-drivers/vimc/vimc-scaler.c  | 134 +++++++----------
  drivers/media/test-drivers/vimc/vimc-sensor.c  | 125 +++++++--------
  8 files changed, 238 insertions(+), 270 deletions(-)
----------------------------------------------------------------
--------------bT82KLeQoW7zBQpU2ZM30tur
Content-Type: text/x-patch; charset=UTF-8; name="linux-vimc-6.11-rc1.diff"
Content-Disposition: attachment; filename="linux-vimc-6.11-rc1.diff"
Content-Transfer-Encoding: base64

ZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdGVzdC1kcml2ZXJzL3ZpbWMvdmltYy1jYXB0
dXJlLmMgYi9kcml2ZXJzL21lZGlhL3Rlc3QtZHJpdmVycy92aW1jL3ZpbWMtY2FwdHVyZS5j
CmluZGV4IGJhNzU1MGI4YmE3ZS4uODk1MDZhZTAwOTAxIDEwMDY0NAotLS0gYS9kcml2ZXJz
L21lZGlhL3Rlc3QtZHJpdmVycy92aW1jL3ZpbWMtY2FwdHVyZS5jCisrKyBiL2RyaXZlcnMv
bWVkaWEvdGVzdC1kcml2ZXJzL3ZpbWMvdmltYy1jYXB0dXJlLmMKQEAgLTQ5NCw3ICs0OTQs
NyBAQCBzdGF0aWMgc3RydWN0IHZpbWNfZW50X2RldmljZSAqdmltY19jYXB0dXJlX2FkZChz
dHJ1Y3QgdmltY19kZXZpY2UgKnZpbWMsCiAJcmV0dXJuIEVSUl9QVFIocmV0KTsKIH0KIAot
c3RydWN0IHZpbWNfZW50X3R5cGUgdmltY19jYXB0dXJlX3R5cGUgPSB7Citjb25zdCBzdHJ1
Y3QgdmltY19lbnRfdHlwZSB2aW1jX2NhcHR1cmVfdHlwZSA9IHsKIAkuYWRkID0gdmltY19j
YXB0dXJlX2FkZCwKIAkudW5yZWdpc3RlciA9IHZpbWNfY2FwdHVyZV91bnJlZ2lzdGVyLAog
CS5yZWxlYXNlID0gdmltY19jYXB0dXJlX3JlbGVhc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMv
bWVkaWEvdGVzdC1kcml2ZXJzL3ZpbWMvdmltYy1jb21tb24uYyBiL2RyaXZlcnMvbWVkaWEv
dGVzdC1kcml2ZXJzL3ZpbWMvdmltYy1jb21tb24uYwppbmRleCAyZTcyOTc0ZTM1YjQuLjRm
NGZjYjI2ZTIzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS90ZXN0LWRyaXZlcnMvdmlt
Yy92aW1jLWNvbW1vbi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdGVzdC1kcml2ZXJzL3ZpbWMv
dmltYy1jb21tb24uYwpAQCAtOCw2ICs4LDggQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+
CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKKyNpbmNsdWRlIDxtZWRpYS92NGwyLWN0
cmxzLmg+CisKICNpbmNsdWRlICJ2aW1jLWNvbW1vbi5oIgogCiAvKgpAQCAtMzU4LDYgKzM2
MCw3IEBAIGludCB2aW1jX2VudF9zZF9yZWdpc3RlcihzdHJ1Y3QgdmltY19lbnRfZGV2aWNl
ICp2ZWQsCiAJCQkgdTMyIGZ1bmN0aW9uLAogCQkJIHUxNiBudW1fcGFkcywKIAkJCSBzdHJ1
Y3QgbWVkaWFfcGFkICpwYWRzLAorCQkJIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9pbnRl
cm5hbF9vcHMgKmludF9vcHMsCiAJCQkgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyAq
c2Rfb3BzKQogewogCWludCByZXQ7CkBAIC0zNjcsNiArMzcwLDcgQEAgaW50IHZpbWNfZW50
X3NkX3JlZ2lzdGVyKHN0cnVjdCB2aW1jX2VudF9kZXZpY2UgKnZlZCwKIAogCS8qIEluaXRp
YWxpemUgdGhlIHN1YmRldiAqLwogCXY0bDJfc3ViZGV2X2luaXQoc2QsIHNkX29wcyk7CisJ
c2QtPmludGVybmFsX29wcyA9IGludF9vcHM7CiAJc2QtPmVudGl0eS5mdW5jdGlvbiA9IGZ1
bmN0aW9uOwogCXNkLT5lbnRpdHkub3BzID0gJnZpbWNfZW50X3NkX21vcHM7CiAJc2QtPm93
bmVyID0gVEhJU19NT0RVTEU7CkBAIC0zODMsMTcgKzM4NywzNiBAQCBpbnQgdmltY19lbnRf
c2RfcmVnaXN0ZXIoc3RydWN0IHZpbWNfZW50X2RldmljZSAqdmVkLAogCWlmIChyZXQpCiAJ
CXJldHVybiByZXQ7CiAKKwkvKgorCSAqIEZpbmFsaXplIHRoZSBzdWJkZXYgaW5pdGlhbGl6
YXRpb24gaWYgaXQgc3VwcG9ydHMgYWN0aXZlIHN0YXRlcy4gVXNlCisJICogdGhlIGNvbnRy
b2wgaGFuZGxlciBsb2NrIGFzIHRoZSBzdGF0ZSBsb2NrIGlmIGF2YWlsYWJsZS4KKwkgKi8K
KwlpZiAoaW50X29wcyAmJiBpbnRfb3BzLT5pbml0X3N0YXRlKSB7CisJCWlmIChzZC0+Y3Ry
bF9oYW5kbGVyKQorCQkJc2QtPnN0YXRlX2xvY2sgPSBzZC0+Y3RybF9oYW5kbGVyLT5sb2Nr
OworCisJCXJldCA9IHY0bDJfc3ViZGV2X2luaXRfZmluYWxpemUoc2QpOworCQlpZiAocmV0
KSB7CisJCQlkZXZfZXJyKHY0bDJfZGV2LT5kZXYsCisJCQkJIiVzOiBzdWJkZXYgaW5pdGlh
bGl6YXRpb24gZmFpbGVkIChlcnI9JWQpXG4iLAorCQkJCW5hbWUsIHJldCk7CisJCQlnb3Rv
IGVycl9jbGVhbl9tX2VudDsKKwkJfQorCX0KKwogCS8qIFJlZ2lzdGVyIHRoZSBzdWJkZXYg
d2l0aCB0aGUgdjRsMiBhbmQgdGhlIG1lZGlhIGZyYW1ld29yayAqLwogCXJldCA9IHY0bDJf
ZGV2aWNlX3JlZ2lzdGVyX3N1YmRldih2NGwyX2Rldiwgc2QpOwogCWlmIChyZXQpIHsKIAkJ
ZGV2X2Vycih2NGwyX2Rldi0+ZGV2LAogCQkJIiVzOiBzdWJkZXYgcmVnaXN0ZXIgZmFpbGVk
IChlcnI9JWQpXG4iLAogCQkJbmFtZSwgcmV0KTsKLQkJZ290byBlcnJfY2xlYW5fbV9lbnQ7
CisJCWdvdG8gZXJyX2NsZWFuX3NkOwogCX0KIAogCXJldHVybiAwOwogCitlcnJfY2xlYW5f
c2Q6CisJdjRsMl9zdWJkZXZfY2xlYW51cChzZCk7CiBlcnJfY2xlYW5fbV9lbnQ6CiAJbWVk
aWFfZW50aXR5X2NsZWFudXAoJnNkLT5lbnRpdHkpOwogCXJldHVybiByZXQ7CmRpZmYgLS1n
aXQgYS9kcml2ZXJzL21lZGlhL3Rlc3QtZHJpdmVycy92aW1jL3ZpbWMtY29tbW9uLmggYi9k
cml2ZXJzL21lZGlhL3Rlc3QtZHJpdmVycy92aW1jL3ZpbWMtY29tbW9uLmgKaW5kZXggNzY0
MWExMDFhNzI4Li43YTQ1YTIxMTc3NDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdGVz
dC1kcml2ZXJzL3ZpbWMvdmltYy1jb21tb24uaAorKysgYi9kcml2ZXJzL21lZGlhL3Rlc3Qt
ZHJpdmVycy92aW1jL3ZpbWMtY29tbW9uLmgKQEAgLTE1Niw3ICsxNTYsNyBAQCBzdHJ1Y3Qg
dmltY19lbnRfdHlwZSB7CiAgKi8KIHN0cnVjdCB2aW1jX2VudF9jb25maWcgewogCWNvbnN0
IGNoYXIgKm5hbWU7Ci0Jc3RydWN0IHZpbWNfZW50X3R5cGUgKnR5cGU7CisJY29uc3Qgc3Ry
dWN0IHZpbWNfZW50X3R5cGUgKnR5cGU7CiB9OwogCiAvKioKQEAgLTE2NywxMSArMTY3LDEx
IEBAIHN0cnVjdCB2aW1jX2VudF9jb25maWcgewogICovCiBib29sIHZpbWNfaXNfc291cmNl
KHN0cnVjdCBtZWRpYV9lbnRpdHkgKmVudCk7CiAKLWV4dGVybiBzdHJ1Y3QgdmltY19lbnRf
dHlwZSB2aW1jX3NlbnNvcl90eXBlOwotZXh0ZXJuIHN0cnVjdCB2aW1jX2VudF90eXBlIHZp
bWNfZGViYXllcl90eXBlOwotZXh0ZXJuIHN0cnVjdCB2aW1jX2VudF90eXBlIHZpbWNfc2Nh
bGVyX3R5cGU7Ci1leHRlcm4gc3RydWN0IHZpbWNfZW50X3R5cGUgdmltY19jYXB0dXJlX3R5
cGU7Ci1leHRlcm4gc3RydWN0IHZpbWNfZW50X3R5cGUgdmltY19sZW5zX3R5cGU7CitleHRl
cm4gY29uc3Qgc3RydWN0IHZpbWNfZW50X3R5cGUgdmltY19zZW5zb3JfdHlwZTsKK2V4dGVy
biBjb25zdCBzdHJ1Y3QgdmltY19lbnRfdHlwZSB2aW1jX2RlYmF5ZXJfdHlwZTsKK2V4dGVy
biBjb25zdCBzdHJ1Y3QgdmltY19lbnRfdHlwZSB2aW1jX3NjYWxlcl90eXBlOworZXh0ZXJu
IGNvbnN0IHN0cnVjdCB2aW1jX2VudF90eXBlIHZpbWNfY2FwdHVyZV90eXBlOworZXh0ZXJu
IGNvbnN0IHN0cnVjdCB2aW1jX2VudF90eXBlIHZpbWNfbGVuc190eXBlOwogCiAvKioKICAq
IHZpbWNfcGl4X21hcF9ieV9pbmRleCAtIGdldCB2aW1jX3BpeF9tYXAgc3RydWN0IGJ5IGl0
cyBpbmRleApAQCAtMjE1LDYgKzIxNSw3IEBAIGNvbnN0IHN0cnVjdCB2aW1jX3BpeF9tYXAg
KnZpbWNfcGl4X21hcF9ieV9waXhlbGZvcm1hdCh1MzIgcGl4ZWxmb3JtYXQpOwogICogQG51
bV9wYWRzOgludW1iZXIgb2YgcGFkcyB0byBpbml0aWFsaXplCiAgKiBAcGFkczoJdGhlIGFy
cmF5IG9mIHBhZHMgb2YgdGhlIGVudGl0eSwgdGhlIGNhbGxlciBzaG91bGQgc2V0IHRoZQog
ICoJCWZsYWdzIG9mIHRoZSBwYWRzCisgKiBAaW50X29wczoJcG9pbnRlciB0byAmc3RydWN0
IHY0bDJfc3ViZGV2X2ludGVybmFsX29wcy4KICAqIEBzZF9vcHM6CXBvaW50ZXIgdG8gJnN0
cnVjdCB2NGwyX3N1YmRldl9vcHMuCiAgKgogICogSGVscGVyIGZ1bmN0aW9uIGluaXRpYWxp
emUgYW5kIHJlZ2lzdGVyIHRoZSBzdHJ1Y3QgdmltY19lbnRfZGV2aWNlIGFuZCBzdHJ1Y3QK
QEAgLTIyNyw2ICsyMjgsNyBAQCBpbnQgdmltY19lbnRfc2RfcmVnaXN0ZXIoc3RydWN0IHZp
bWNfZW50X2RldmljZSAqdmVkLAogCQkJIHUzMiBmdW5jdGlvbiwKIAkJCSB1MTYgbnVtX3Bh
ZHMsCiAJCQkgc3RydWN0IG1lZGlhX3BhZCAqcGFkcywKKwkJCSBjb25zdCBzdHJ1Y3QgdjRs
Ml9zdWJkZXZfaW50ZXJuYWxfb3BzICppbnRfb3BzLAogCQkJIGNvbnN0IHN0cnVjdCB2NGwy
X3N1YmRldl9vcHMgKnNkX29wcyk7CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRp
YS90ZXN0LWRyaXZlcnMvdmltYy92aW1jLWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdGVzdC1k
cml2ZXJzL3ZpbWMvdmltYy1jb3JlLmMKaW5kZXggYWYxMjc0NzZlOTIwLi4yMDgzYzYwZTM0
ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdGVzdC1kcml2ZXJzL3ZpbWMvdmltYy1j
b3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS90ZXN0LWRyaXZlcnMvdmltYy92aW1jLWNvcmUu
YwpAQCAtODEsNyArODEsNyBAQCBzdHJ1Y3QgdmltY19waXBlbGluZV9jb25maWcgewogICog
VG9wb2xvZ3kgQ29uZmlndXJhdGlvbgogICovCiAKLXN0YXRpYyBzdHJ1Y3QgdmltY19lbnRf
Y29uZmlnIGVudF9jb25maWdbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdmltY19lbnRf
Y29uZmlnIGVudF9jb25maWdbXSA9IHsKIAlbU0VOU09SX0FdID0gewogCQkubmFtZSA9ICJT
ZW5zb3IgQSIsCiAJCS50eXBlID0gJnZpbWNfc2Vuc29yX3R5cGUKZGlmZiAtLWdpdCBhL2Ry
aXZlcnMvbWVkaWEvdGVzdC1kcml2ZXJzL3ZpbWMvdmltYy1kZWJheWVyLmMgYi9kcml2ZXJz
L21lZGlhL3Rlc3QtZHJpdmVycy92aW1jL3ZpbWMtZGViYXllci5jCmluZGV4IGQ3MmVkMDg2
ZTAwYi4uYmJiN2M3YTg2ZGYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3Rlc3QtZHJp
dmVycy92aW1jL3ZpbWMtZGViYXllci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdGVzdC1kcml2
ZXJzL3ZpbWMvdmltYy1kZWJheWVyLmMKQEAgLTE1LDYgKzE1LDkgQEAKIAogI2luY2x1ZGUg
InZpbWMtY29tbW9uLmgiCiAKKy8qIFRPRE86IEFkZCBzdXBwb3J0IGZvciBtb3JlIG91dHB1
dCBmb3JtYXRzLCB3ZSBvbmx5IHN1cHBvcnQgUkdCODg4IGZvciBub3cuICovCisjZGVmaW5l
IFZJTUNfREVCQVlFUl9TT1VSQ0VfTUJVU19GTVQJTUVESUFfQlVTX0ZNVF9SR0I4ODhfMVgy
NAorCiBlbnVtIHZpbWNfZGViYXllcl9yZ2JfY29sb3JzIHsKIAlWSU1DX0RFQkFZRVJfUkVE
ID0gMCwKIAlWSU1DX0RFQkFZRVJfR1JFRU4gPSAxLApAQCAtMjksMTkgKzMyLDI2IEBAIHN0
cnVjdCB2aW1jX2RlYmF5ZXJfcGl4X21hcCB7CiBzdHJ1Y3QgdmltY19kZWJheWVyX2Rldmlj
ZSB7CiAJc3RydWN0IHZpbWNfZW50X2RldmljZSB2ZWQ7CiAJc3RydWN0IHY0bDJfc3ViZGV2
IHNkOwotCS8qIFRoZSBhY3RpdmUgZm9ybWF0ICovCi0Jc3RydWN0IHY0bDJfbWJ1c19mcmFt
ZWZtdCBzaW5rX2ZtdDsKLQl1MzIgc3JjX2NvZGU7CisJc3RydWN0IHY0bDJfY3RybF9oYW5k
bGVyIGhkbDsKKwlzdHJ1Y3QgbWVkaWFfcGFkIHBhZHNbMl07CisKKwl1OCAqc3JjX2ZyYW1l
OworCiAJdm9pZCAoKnNldF9yZ2Jfc3JjKShzdHJ1Y3QgdmltY19kZWJheWVyX2RldmljZSAq
dmRlYmF5ZXIsCiAJCQkgICAgdW5zaWduZWQgaW50IGxpbiwgdW5zaWduZWQgaW50IGNvbCwK
IAkJCSAgICB1bnNpZ25lZCBpbnQgcmdiWzNdKTsKLQkvKiBWYWx1ZXMgY2FsY3VsYXRlZCB3
aGVuIHRoZSBzdHJlYW0gc3RhcnRzICovCi0JdTggKnNyY19mcmFtZTsKLQljb25zdCBzdHJ1
Y3QgdmltY19kZWJheWVyX3BpeF9tYXAgKnNpbmtfcGl4X21hcDsKLQl1bnNpZ25lZCBpbnQg
c2lua19icHA7Ci0JdW5zaWduZWQgaW50IG1lYW5fd2luX3NpemU7Ci0Jc3RydWN0IHY0bDJf
Y3RybF9oYW5kbGVyIGhkbDsKLQlzdHJ1Y3QgbWVkaWFfcGFkIHBhZHNbMl07CisKKwkvKgor
CSAqIFZpcnR1YWwgImhhcmR3YXJlIiBjb25maWd1cmF0aW9uLCBmaWxsZWQgd2hlbiB0aGUg
c3RyZWFtIHN0YXJ0cyBvcgorCSAqIHdoZW4gY29udHJvbHMgYXJlIHNldC4KKwkgKi8KKwlz
dHJ1Y3QgeworCQljb25zdCBzdHJ1Y3QgdmltY19kZWJheWVyX3BpeF9tYXAgKnNpbmtfcGl4
X21hcDsKKwkJdW5zaWduZWQgaW50IHNpbmtfYnBwOworCQlzdHJ1Y3QgdjRsMl9hcmVhIHNp
emU7CisJCXVuc2lnbmVkIGludCBtZWFuX3dpbl9zaXplOworCQl1MzIgc3JjX2NvZGU7CisJ
fSBodzsKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10IHNp
bmtfZm10X2RlZmF1bHQgPSB7CkBAIC0xNTMsMTggKzE2MywxNCBAQCBzdGF0aWMgYm9vbCB2
aW1jX2RlYmF5ZXJfc3JjX2NvZGVfaXNfdmFsaWQodTMyIGNvZGUpCiBzdGF0aWMgaW50IHZp
bWNfZGViYXllcl9pbml0X3N0YXRlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCiAJCQkJICAg
c3RydWN0IHY0bDJfc3ViZGV2X3N0YXRlICpzZF9zdGF0ZSkKIHsKLQlzdHJ1Y3QgdmltY19k
ZWJheWVyX2RldmljZSAqdmRlYmF5ZXIgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAlz
dHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICptZjsKLQl1bnNpZ25lZCBpbnQgaTsKIAogCW1m
ID0gdjRsMl9zdWJkZXZfc3RhdGVfZ2V0X2Zvcm1hdChzZF9zdGF0ZSwgMCk7CiAJKm1mID0g
c2lua19mbXRfZGVmYXVsdDsKIAotCWZvciAoaSA9IDE7IGkgPCBzZC0+ZW50aXR5Lm51bV9w
YWRzOyBpKyspIHsKLQkJbWYgPSB2NGwyX3N1YmRldl9zdGF0ZV9nZXRfZm9ybWF0KHNkX3N0
YXRlLCBpKTsKLQkJKm1mID0gc2lua19mbXRfZGVmYXVsdDsKLQkJbWYtPmNvZGUgPSB2ZGVi
YXllci0+c3JjX2NvZGU7Ci0JfQorCW1mID0gdjRsMl9zdWJkZXZfc3RhdGVfZ2V0X2Zvcm1h
dChzZF9zdGF0ZSwgMSk7CisJKm1mID0gc2lua19mbXRfZGVmYXVsdDsKKwltZi0+Y29kZSA9
IFZJTUNfREVCQVlFUl9TT1VSQ0VfTUJVU19GTVQ7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIx
MywyNCArMjE5LDYgQEAgc3RhdGljIGludCB2aW1jX2RlYmF5ZXJfZW51bV9mcmFtZV9zaXpl
KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQg
dmltY19kZWJheWVyX2dldF9mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKLQkJCQlzdHJ1
Y3QgdjRsMl9zdWJkZXZfc3RhdGUgKnNkX3N0YXRlLAotCQkJCXN0cnVjdCB2NGwyX3N1YmRl
dl9mb3JtYXQgKmZtdCkKLXsKLQlzdHJ1Y3QgdmltY19kZWJheWVyX2RldmljZSAqdmRlYmF5
ZXIgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKLQotCS8qIEdldCB0aGUgY3VycmVudCBz
aW5rIGZvcm1hdCAqLwotCWZtdC0+Zm9ybWF0ID0gZm10LT53aGljaCA9PSBWNEwyX1NVQkRF
Vl9GT1JNQVRfVFJZID8KLQkJICAgICAgKnY0bDJfc3ViZGV2X3N0YXRlX2dldF9mb3JtYXQo
c2Rfc3RhdGUsIDApIDoKLQkJICAgICAgdmRlYmF5ZXItPnNpbmtfZm10OwotCi0JLyogU2V0
IHRoZSByaWdodCBjb2RlIGZvciB0aGUgc291cmNlIHBhZCAqLwotCWlmIChWSU1DX0lTX1NS
QyhmbXQtPnBhZCkpCi0JCWZtdC0+Zm9ybWF0LmNvZGUgPSB2ZGViYXllci0+c3JjX2NvZGU7
Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHZvaWQgdmltY19kZWJheWVyX2FkanVzdF9z
aW5rX2ZtdChzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICpmbXQpCiB7CiAJY29uc3Qgc3Ry
dWN0IHZpbWNfZGViYXllcl9waXhfbWFwICp2cGl4OwpAQCAtMjU2LDUyICsyNDQsNDIgQEAg
c3RhdGljIGludCB2aW1jX2RlYmF5ZXJfc2V0X2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNk
LAogCQkJCXN0cnVjdCB2NGwyX3N1YmRldl9mb3JtYXQgKmZtdCkKIHsKIAlzdHJ1Y3Qgdmlt
Y19kZWJheWVyX2RldmljZSAqdmRlYmF5ZXIgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsK
LQlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICpzaW5rX2ZtdDsKLQl1MzIgKnNyY19jb2Rl
OworCXN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgKmZvcm1hdDsKIAotCWlmIChmbXQtPndo
aWNoID09IFY0TDJfU1VCREVWX0ZPUk1BVF9BQ1RJVkUpIHsKLQkJLyogRG8gbm90IGNoYW5n
ZSB0aGUgZm9ybWF0IHdoaWxlIHN0cmVhbSBpcyBvbiAqLwotCQlpZiAodmRlYmF5ZXItPnNy
Y19mcmFtZSkKLQkJCXJldHVybiAtRUJVU1k7Ci0KLQkJc2lua19mbXQgPSAmdmRlYmF5ZXIt
PnNpbmtfZm10OwotCQlzcmNfY29kZSA9ICZ2ZGViYXllci0+c3JjX2NvZGU7Ci0JfSBlbHNl
IHsKLQkJc2lua19mbXQgPSB2NGwyX3N1YmRldl9zdGF0ZV9nZXRfZm9ybWF0KHNkX3N0YXRl
LCAwKTsKLQkJc3JjX2NvZGUgPSAmdjRsMl9zdWJkZXZfc3RhdGVfZ2V0X2Zvcm1hdChzZF9z
dGF0ZSwgMSktPmNvZGU7Ci0JfQorCS8qIERvIG5vdCBjaGFuZ2UgdGhlIGZvcm1hdCB3aGls
ZSBzdHJlYW0gaXMgb24uICovCisJaWYgKGZtdC0+d2hpY2ggPT0gVjRMMl9TVUJERVZfRk9S
TUFUX0FDVElWRSAmJiB2ZGViYXllci0+c3JjX2ZyYW1lKQorCQlyZXR1cm4gLUVCVVNZOwog
CiAJLyoKLQkgKiBEbyBub3QgY2hhbmdlIHRoZSBmb3JtYXQgb2YgdGhlIHNvdXJjZSBwYWQs
Ci0JICogaXQgaXMgcHJvcGFnYXRlZCBmcm9tIHRoZSBzaW5rCisJICogRG8gbm90IGNoYW5n
ZSB0aGUgZm9ybWF0IG9mIHRoZSBzb3VyY2UgcGFkLCBpdCBpcyBwcm9wYWdhdGVkIGZyb20K
KwkgKiB0aGUgc2luay4KIAkgKi8KLQlpZiAoVklNQ19JU19TUkMoZm10LT5wYWQpKSB7Ci0J
CXUzMiBjb2RlID0gZm10LT5mb3JtYXQuY29kZTsKKwlpZiAoVklNQ19JU19TUkMoZm10LT5w
YWQpKQorCQlyZXR1cm4gdjRsMl9zdWJkZXZfZ2V0X2ZtdChzZCwgc2Rfc3RhdGUsIGZtdCk7
CiAKLQkJZm10LT5mb3JtYXQgPSAqc2lua19mbXQ7CisJLyogU2V0IHRoZSBuZXcgZm9ybWF0
IGluIHRoZSBzaW5rIHBhZC4gKi8KKwl2aW1jX2RlYmF5ZXJfYWRqdXN0X3NpbmtfZm10KCZm
bXQtPmZvcm1hdCk7CiAKLQkJaWYgKHZpbWNfZGViYXllcl9zcmNfY29kZV9pc192YWxpZChj
b2RlKSkKLQkJCSpzcmNfY29kZSA9IGNvZGU7CisJZm9ybWF0ID0gdjRsMl9zdWJkZXZfc3Rh
dGVfZ2V0X2Zvcm1hdChzZF9zdGF0ZSwgMCk7CiAKLQkJZm10LT5mb3JtYXQuY29kZSA9ICpz
cmNfY29kZTsKLQl9IGVsc2UgewotCQkvKiBTZXQgdGhlIG5ldyBmb3JtYXQgaW4gdGhlIHNp
bmsgcGFkICovCi0JCXZpbWNfZGViYXllcl9hZGp1c3Rfc2lua19mbXQoJmZtdC0+Zm9ybWF0
KTsKLQotCQlkZXZfZGJnKHZkZWJheWVyLT52ZWQuZGV2LCAiJXM6IHNpbmsgZm9ybWF0IHVw
ZGF0ZTogIgotCQkJIm9sZDolZHglZCAoMHgleCwgJWQsICVkLCAlZCwgJWQpICIKLQkJCSJu
ZXc6JWR4JWQgKDB4JXgsICVkLCAlZCwgJWQsICVkKVxuIiwgdmRlYmF5ZXItPnNkLm5hbWUs
Ci0JCQkvKiBvbGQgKi8KLQkJCXNpbmtfZm10LT53aWR0aCwgc2lua19mbXQtPmhlaWdodCwg
c2lua19mbXQtPmNvZGUsCi0JCQlzaW5rX2ZtdC0+Y29sb3JzcGFjZSwgc2lua19mbXQtPnF1
YW50aXphdGlvbiwKLQkJCXNpbmtfZm10LT54ZmVyX2Z1bmMsIHNpbmtfZm10LT55Y2Jjcl9l
bmMsCi0JCQkvKiBuZXcgKi8KLQkJCWZtdC0+Zm9ybWF0LndpZHRoLCBmbXQtPmZvcm1hdC5o
ZWlnaHQsIGZtdC0+Zm9ybWF0LmNvZGUsCi0JCQlmbXQtPmZvcm1hdC5jb2xvcnNwYWNlLAlm
bXQtPmZvcm1hdC5xdWFudGl6YXRpb24sCi0JCQlmbXQtPmZvcm1hdC54ZmVyX2Z1bmMsIGZt
dC0+Zm9ybWF0LnljYmNyX2VuYyk7Ci0KLQkJKnNpbmtfZm10ID0gZm10LT5mb3JtYXQ7Ci0J
fQorCWRldl9kYmcodmRlYmF5ZXItPnZlZC5kZXYsICIlczogc2luayBmb3JtYXQgdXBkYXRl
OiAiCisJCSJvbGQ6JWR4JWQgKDB4JXgsICVkLCAlZCwgJWQsICVkKSAiCisJCSJuZXc6JWR4
JWQgKDB4JXgsICVkLCAlZCwgJWQsICVkKVxuIiwgdmRlYmF5ZXItPnNkLm5hbWUsCisJCS8q
IG9sZCAqLworCQlmb3JtYXQtPndpZHRoLCBmb3JtYXQtPmhlaWdodCwgZm9ybWF0LT5jb2Rl
LAorCQlmb3JtYXQtPmNvbG9yc3BhY2UsIGZvcm1hdC0+cXVhbnRpemF0aW9uLAorCQlmb3Jt
YXQtPnhmZXJfZnVuYywgZm9ybWF0LT55Y2Jjcl9lbmMsCisJCS8qIG5ldyAqLworCQlmbXQt
PmZvcm1hdC53aWR0aCwgZm10LT5mb3JtYXQuaGVpZ2h0LCBmbXQtPmZvcm1hdC5jb2RlLAor
CQlmbXQtPmZvcm1hdC5jb2xvcnNwYWNlLAlmbXQtPmZvcm1hdC5xdWFudGl6YXRpb24sCisJ
CWZtdC0+Zm9ybWF0LnhmZXJfZnVuYywgZm10LT5mb3JtYXQueWNiY3JfZW5jKTsKKworCSpm
b3JtYXQgPSBmbXQtPmZvcm1hdDsKKworCS8qIFByb3BhZ2F0ZSB0aGUgZm9ybWF0IHRvIHRo
ZSBzb3VyY2UgcGFkLiAqLworCWZvcm1hdCA9IHY0bDJfc3ViZGV2X3N0YXRlX2dldF9mb3Jt
YXQoc2Rfc3RhdGUsIDEpOworCSpmb3JtYXQgPSBmbXQtPmZvcm1hdDsKKwlmb3JtYXQtPmNv
ZGUgPSBWSU1DX0RFQkFZRVJfU09VUkNFX01CVVNfRk1UOwogCiAJcmV0dXJuIDA7CiB9CkBA
IC0zMDksNyArMjg3LDcgQEAgc3RhdGljIGludCB2aW1jX2RlYmF5ZXJfc2V0X2ZtdChzdHJ1
Y3QgdjRsMl9zdWJkZXYgKnNkLAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9w
YWRfb3BzIHZpbWNfZGViYXllcl9wYWRfb3BzID0gewogCS5lbnVtX21idXNfY29kZQkJPSB2
aW1jX2RlYmF5ZXJfZW51bV9tYnVzX2NvZGUsCiAJLmVudW1fZnJhbWVfc2l6ZQk9IHZpbWNf
ZGViYXllcl9lbnVtX2ZyYW1lX3NpemUsCi0JLmdldF9mbXQJCT0gdmltY19kZWJheWVyX2dl
dF9mbXQsCisJLmdldF9mbXQJCT0gdjRsMl9zdWJkZXZfZ2V0X2ZtdCwKIAkuc2V0X2ZtdAkJ
PSB2aW1jX2RlYmF5ZXJfc2V0X2ZtdCwKIH07CiAKQEAgLTMyMSw4ICsyOTksOCBAQCBzdGF0
aWMgdm9pZCB2aW1jX2RlYmF5ZXJfcHJvY2Vzc19yZ2JfZnJhbWUoc3RydWN0IHZpbWNfZGVi
YXllcl9kZXZpY2UgKnZkZWJheWVyLAogCWNvbnN0IHN0cnVjdCB2aW1jX3BpeF9tYXAgKnZw
aXg7CiAJdW5zaWduZWQgaW50IGksIGluZGV4OwogCi0JdnBpeCA9IHZpbWNfcGl4X21hcF9i
eV9jb2RlKHZkZWJheWVyLT5zcmNfY29kZSk7Ci0JaW5kZXggPSBWSU1DX0ZSQU1FX0lOREVY
KGxpbiwgY29sLCB2ZGViYXllci0+c2lua19mbXQud2lkdGgsIDMpOworCXZwaXggPSB2aW1j
X3BpeF9tYXBfYnlfY29kZSh2ZGViYXllci0+aHcuc3JjX2NvZGUpOworCWluZGV4ID0gVklN
Q19GUkFNRV9JTkRFWChsaW4sIGNvbCwgdmRlYmF5ZXItPmh3LnNpemUud2lkdGgsIDMpOwog
CWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKIAkJc3dpdGNoICh2cGl4LT5waXhlbGZvcm1h
dCkgewogCQljYXNlIFY0TDJfUElYX0ZNVF9SR0IyNDoKQEAgLTM0MCwyNCArMzE4LDM3IEBA
IHN0YXRpYyBpbnQgdmltY19kZWJheWVyX3Nfc3RyZWFtKHN0cnVjdCB2NGwyX3N1YmRldiAq
c2QsIGludCBlbmFibGUpCiAJc3RydWN0IHZpbWNfZGViYXllcl9kZXZpY2UgKnZkZWJheWVy
ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CiAKIAlpZiAoZW5hYmxlKSB7CisJCWNvbnN0
IHN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgKnNpbmtfZm10OworCQljb25zdCBzdHJ1Y3Qg
djRsMl9tYnVzX2ZyYW1lZm10ICpzcmNfZm10OworCQlzdHJ1Y3QgdjRsMl9zdWJkZXZfc3Rh
dGUgKnN0YXRlOwogCQljb25zdCBzdHJ1Y3QgdmltY19waXhfbWFwICp2cGl4OwogCQl1bnNp
Z25lZCBpbnQgZnJhbWVfc2l6ZTsKIAogCQlpZiAodmRlYmF5ZXItPnNyY19mcmFtZSkKIAkJ
CXJldHVybiAwOwogCisJCXN0YXRlID0gdjRsMl9zdWJkZXZfbG9ja19hbmRfZ2V0X2FjdGl2
ZV9zdGF0ZShzZCk7CisJCXNpbmtfZm10ID0gdjRsMl9zdWJkZXZfc3RhdGVfZ2V0X2Zvcm1h
dChzdGF0ZSwgMCk7CisJCXNyY19mbXQgPSB2NGwyX3N1YmRldl9zdGF0ZV9nZXRfZm9ybWF0
KHN0YXRlLCAxKTsKKwogCQkvKiBDYWxjdWxhdGUgdGhlIGZyYW1lIHNpemUgb2YgdGhlIHNv
dXJjZSBwYWQgKi8KLQkJdnBpeCA9IHZpbWNfcGl4X21hcF9ieV9jb2RlKHZkZWJheWVyLT5z
cmNfY29kZSk7Ci0JCWZyYW1lX3NpemUgPSB2ZGViYXllci0+c2lua19mbXQud2lkdGggKiB2
ZGViYXllci0+c2lua19mbXQuaGVpZ2h0ICoKLQkJCQl2cGl4LT5icHA7CisJCXZwaXggPSB2
aW1jX3BpeF9tYXBfYnlfY29kZShzcmNfZm10LT5jb2RlKTsKKwkJZnJhbWVfc2l6ZSA9IHNy
Y19mbXQtPndpZHRoICogc3JjX2ZtdC0+aGVpZ2h0ICogdnBpeC0+YnBwOwogCiAJCS8qIFNh
dmUgdGhlIGJ5dGVzIHBlciBwaXhlbCBvZiB0aGUgc2luayAqLwotCQl2cGl4ID0gdmltY19w
aXhfbWFwX2J5X2NvZGUodmRlYmF5ZXItPnNpbmtfZm10LmNvZGUpOwotCQl2ZGViYXllci0+
c2lua19icHAgPSB2cGl4LT5icHA7CisJCXZwaXggPSB2aW1jX3BpeF9tYXBfYnlfY29kZShz
aW5rX2ZtdC0+Y29kZSk7CisJCXZkZWJheWVyLT5ody5zaW5rX2JwcCA9IHZwaXgtPmJwcDsK
IAogCQkvKiBHZXQgdGhlIGNvcnJlc3BvbmRpbmcgcGl4ZWwgbWFwIGZyb20gdGhlIHRhYmxl
ICovCi0JCXZkZWJheWVyLT5zaW5rX3BpeF9tYXAgPQotCQkJdmltY19kZWJheWVyX3BpeF9t
YXBfYnlfY29kZSh2ZGViYXllci0+c2lua19mbXQuY29kZSk7CisJCXZkZWJheWVyLT5ody5z
aW5rX3BpeF9tYXAgPQorCQkJdmltY19kZWJheWVyX3BpeF9tYXBfYnlfY29kZShzaW5rX2Zt
dC0+Y29kZSk7CisKKwkJdmRlYmF5ZXItPmh3LnNpemUud2lkdGggPSBzaW5rX2ZtdC0+d2lk
dGg7CisJCXZkZWJheWVyLT5ody5zaXplLmhlaWdodCA9IHNpbmtfZm10LT5oZWlnaHQ7CisK
KwkJdmRlYmF5ZXItPmh3LnNyY19jb2RlID0gc3JjX2ZtdC0+Y29kZTsKKworCQl2NGwyX3N1
YmRldl91bmxvY2tfc3RhdGUoc3RhdGUpOwogCiAJCS8qCiAJCSAqIEFsbG9jYXRlIHRoZSBm
cmFtZSBidWZmZXIuIFVzZSB2bWFsbG9jIHRvIGJlIGFibGUgdG8KQEAgLTM2Niw3ICszNTcs
NiBAQCBzdGF0aWMgaW50IHZpbWNfZGViYXllcl9zX3N0cmVhbShzdHJ1Y3QgdjRsMl9zdWJk
ZXYgKnNkLCBpbnQgZW5hYmxlKQogCQl2ZGViYXllci0+c3JjX2ZyYW1lID0gdm1hbGxvYyhm
cmFtZV9zaXplKTsKIAkJaWYgKCF2ZGViYXllci0+c3JjX2ZyYW1lKQogCQkJcmV0dXJuIC1F
Tk9NRU07Ci0KIAl9IGVsc2UgewogCQlpZiAoIXZkZWJheWVyLT5zcmNfZnJhbWUpCiAJCQly
ZXR1cm4gMDsKQEAgLTQyNywxMyArNDE3LDEzIEBAIHN0YXRpYyB2b2lkIHZpbWNfZGViYXll
cl9jYWxjX3JnYl9zaW5rKHN0cnVjdCB2aW1jX2RlYmF5ZXJfZGV2aWNlICp2ZGViYXllciwK
IAkgKiB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSBtZWFuIHdpbmRvdyAoY29uc2lkZXJp
bmcgdGhlIGN1cnJlbnQKIAkgKiBwaXhlbCBhcyB0aGUgY2VudGVyKQogCSAqLwotCXNlZWsg
PSB2ZGViYXllci0+bWVhbl93aW5fc2l6ZSAvIDI7CisJc2VlayA9IHZkZWJheWVyLT5ody5t
ZWFuX3dpbl9zaXplIC8gMjsKIAogCS8qIFN1bSB0aGUgdmFsdWVzIG9mIHRoZSBjb2xvcnMg
aW4gdGhlIG1lYW4gd2luZG93ICovCiAKIAlkZXZfZGJnKHZkZWJheWVyLT52ZWQuZGV2LAog
CQkiZGViOiAlczogLS0tIENhbGMgcGl4ZWwgJWR4JWQsIHdpbmRvdyBtZWFuICVkLCBzZWVr
ICVkIC0tLVxuIiwKLQkJdmRlYmF5ZXItPnNkLm5hbWUsIGxpbiwgY29sLCB2ZGViYXllci0+
c2lua19mbXQuaGVpZ2h0LCBzZWVrKTsKKwkJdmRlYmF5ZXItPnNkLm5hbWUsIGxpbiwgY29s
LCB2ZGViYXllci0+aHcuc2l6ZS5oZWlnaHQsIHNlZWspOwogCiAJLyoKIAkgKiBJdGVyYXRl
IHRocm91Z2ggYWxsIHRoZSBsaW5lcyBpbiB0aGUgbWVhbiB3aW5kb3csIHN0YXJ0CkBAIC00
NDIsNyArNDMyLDcgQEAgc3RhdGljIHZvaWQgdmltY19kZWJheWVyX2NhbGNfcmdiX3Npbmso
c3RydWN0IHZpbWNfZGViYXllcl9kZXZpY2UgKnZkZWJheWVyLAogCSAqIGZyYW1lCiAJICov
CiAJZm9yICh3bGluID0gc2VlayA+IGxpbiA/IDAgOiBsaW4gLSBzZWVrOwotCSAgICAgd2xp
biA8IGxpbiArIHNlZWsgKyAxICYmIHdsaW4gPCB2ZGViYXllci0+c2lua19mbXQuaGVpZ2h0
OworCSAgICAgd2xpbiA8IGxpbiArIHNlZWsgKyAxICYmIHdsaW4gPCB2ZGViYXllci0+aHcu
c2l6ZS5oZWlnaHQ7CiAJICAgICB3bGluKyspIHsKIAogCQkvKgpAQCAtNDUyLDE3ICs0NDIs
MTcgQEAgc3RhdGljIHZvaWQgdmltY19kZWJheWVyX2NhbGNfcmdiX3Npbmsoc3RydWN0IHZp
bWNfZGViYXllcl9kZXZpY2UgKnZkZWJheWVyLAogCQkgKiBmcmFtZQogCQkgKi8KIAkJZm9y
ICh3Y29sID0gc2VlayA+IGNvbCA/IDAgOiBjb2wgLSBzZWVrOwotCQkgICAgIHdjb2wgPCBj
b2wgKyBzZWVrICsgMSAmJiB3Y29sIDwgdmRlYmF5ZXItPnNpbmtfZm10LndpZHRoOworCQkg
ICAgIHdjb2wgPCBjb2wgKyBzZWVrICsgMSAmJiB3Y29sIDwgdmRlYmF5ZXItPmh3LnNpemUu
d2lkdGg7CiAJCSAgICAgd2NvbCsrKSB7CiAJCQllbnVtIHZpbWNfZGViYXllcl9yZ2JfY29s
b3JzIGNvbG9yOwogCQkJdW5zaWduZWQgaW50IGluZGV4OwogCiAJCQkvKiBDaGVjayB3aGlj
aCBjb2xvciB0aGlzIHBpeGVsIGlzICovCi0JCQljb2xvciA9IHZkZWJheWVyLT5zaW5rX3Bp
eF9tYXAtPm9yZGVyW3dsaW4gJSAyXVt3Y29sICUgMl07CisJCQljb2xvciA9IHZkZWJheWVy
LT5ody5zaW5rX3BpeF9tYXAtPm9yZGVyW3dsaW4gJSAyXVt3Y29sICUgMl07CiAKIAkJCWlu
ZGV4ID0gVklNQ19GUkFNRV9JTkRFWCh3bGluLCB3Y29sLAotCQkJCQkJIHZkZWJheWVyLT5z
aW5rX2ZtdC53aWR0aCwKLQkJCQkJCSB2ZGViYXllci0+c2lua19icHApOworCQkJCQkJIHZk
ZWJheWVyLT5ody5zaXplLndpZHRoLAorCQkJCQkJIHZkZWJheWVyLT5ody5zaW5rX2JwcCk7
CiAKIAkJCWRldl9kYmcodmRlYmF5ZXItPnZlZC5kZXYsCiAJCQkJImRlYjogJXM6IFJHQiBD
QUxDOiBmcmFtZSBpbmRleCAlZCwgd2luIHBvcyAlZHglZCwgY29sb3IgJWRcbiIsCkBAIC00
NzEsNyArNDYxLDcgQEAgc3RhdGljIHZvaWQgdmltY19kZWJheWVyX2NhbGNfcmdiX3Npbmso
c3RydWN0IHZpbWNfZGViYXllcl9kZXZpY2UgKnZkZWJheWVyLAogCQkJLyogR2V0IGl0cyB2
YWx1ZSAqLwogCQkJcmdiW2NvbG9yXSA9IHJnYltjb2xvcl0gKwogCQkJCXZpbWNfZGViYXll
cl9nZXRfdmFsKCZmcmFtZVtpbmRleF0sCi0JCQkJCQkgICAgIHZkZWJheWVyLT5zaW5rX2Jw
cCk7CisJCQkJCQkgICAgIHZkZWJheWVyLT5ody5zaW5rX2JwcCk7CiAKIAkJCS8qIFNhdmUg
aG93IG1hbnkgdmFsdWVzIHdlIGFscmVhZHkgYWRkZWQgKi8KIAkJCW5fcmdiW2NvbG9yXSsr
OwpAQCAtNTA5LDggKzQ5OSw4IEBAIHN0YXRpYyB2b2lkICp2aW1jX2RlYmF5ZXJfcHJvY2Vz
c19mcmFtZShzdHJ1Y3QgdmltY19lbnRfZGV2aWNlICp2ZWQsCiAJaWYgKCF2ZGViYXllci0+
c3JjX2ZyYW1lKQogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAotCWZvciAoaSA9IDA7
IGkgPCB2ZGViYXllci0+c2lua19mbXQuaGVpZ2h0OyBpKyspCi0JCWZvciAoaiA9IDA7IGog
PCB2ZGViYXllci0+c2lua19mbXQud2lkdGg7IGorKykgeworCWZvciAoaSA9IDA7IGkgPCB2
ZGViYXllci0+aHcuc2l6ZS5oZWlnaHQ7IGkrKykKKwkJZm9yIChqID0gMDsgaiA8IHZkZWJh
eWVyLT5ody5zaXplLndpZHRoOyBqKyspIHsKIAkJCXZpbWNfZGViYXllcl9jYWxjX3JnYl9z
aW5rKHZkZWJheWVyLCBzaW5rX2ZyYW1lLCBpLCBqLCByZ2IpOwogCQkJdmRlYmF5ZXItPnNl
dF9yZ2Jfc3JjKHZkZWJheWVyLCBpLCBqLCByZ2IpOwogCQl9CkBAIC01MjUsNyArNTE1LDcg
QEAgc3RhdGljIGludCB2aW1jX2RlYmF5ZXJfc19jdHJsKHN0cnVjdCB2NGwyX2N0cmwgKmN0
cmwpCiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWSU1DX0NJRF9NRUFOX1dJTl9T
SVpFOgotCQl2ZGViYXllci0+bWVhbl93aW5fc2l6ZSA9IGN0cmwtPnZhbDsKKwkJdmRlYmF5
ZXItPmh3Lm1lYW5fd2luX3NpemUgPSBjdHJsLT52YWw7CiAJCWJyZWFrOwogCWRlZmF1bHQ6
CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNTQzLDYgKzUzMyw3IEBAIHN0YXRpYyB2b2lkIHZp
bWNfZGViYXllcl9yZWxlYXNlKHN0cnVjdCB2aW1jX2VudF9kZXZpY2UgKnZlZCkKIAkJY29u
dGFpbmVyX29mKHZlZCwgc3RydWN0IHZpbWNfZGViYXllcl9kZXZpY2UsIHZlZCk7CiAKIAl2
NGwyX2N0cmxfaGFuZGxlcl9mcmVlKCZ2ZGViYXllci0+aGRsKTsKKwl2NGwyX3N1YmRldl9j
bGVhbnVwKCZ2ZGViYXllci0+c2QpOwogCW1lZGlhX2VudGl0eV9jbGVhbnVwKHZkZWJheWVy
LT52ZWQuZW50KTsKIAlrZnJlZSh2ZGViYXllcik7CiB9CkBAIC01OTQsMjUgKzU4NSwxNSBA
QCBzdGF0aWMgc3RydWN0IHZpbWNfZW50X2RldmljZSAqdmltY19kZWJheWVyX2FkZChzdHJ1
Y3QgdmltY19kZXZpY2UgKnZpbWMsCiAJcmV0ID0gdmltY19lbnRfc2RfcmVnaXN0ZXIoJnZk
ZWJheWVyLT52ZWQsICZ2ZGViYXllci0+c2QsIHY0bDJfZGV2LAogCQkJCSAgIHZjZmdfbmFt
ZSwKIAkJCQkgICBNRURJQV9FTlRfRl9QUk9DX1ZJREVPX1BJWEVMX0VOQ19DT05WLCAyLAot
CQkJCSAgIHZkZWJheWVyLT5wYWRzLCAmdmltY19kZWJheWVyX29wcyk7CisJCQkJICAgdmRl
YmF5ZXItPnBhZHMsICZ2aW1jX2RlYmF5ZXJfaW50ZXJuYWxfb3BzLAorCQkJCSAgICZ2aW1j
X2RlYmF5ZXJfb3BzKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycl9mcmVlX2hkbDsKIAotCXZk
ZWJheWVyLT5zZC5pbnRlcm5hbF9vcHMgPSAmdmltY19kZWJheWVyX2ludGVybmFsX29wczsK
LQogCXZkZWJheWVyLT52ZWQucHJvY2Vzc19mcmFtZSA9IHZpbWNfZGViYXllcl9wcm9jZXNz
X2ZyYW1lOwogCXZkZWJheWVyLT52ZWQuZGV2ID0gdmltYy0+bWRldi5kZXY7Ci0JdmRlYmF5
ZXItPm1lYW5fd2luX3NpemUgPSB2aW1jX2RlYmF5ZXJfY3RybF9tZWFuX3dpbl9zaXplLmRl
ZjsKKwl2ZGViYXllci0+aHcubWVhbl93aW5fc2l6ZSA9IHZpbWNfZGViYXllcl9jdHJsX21l
YW5fd2luX3NpemUuZGVmOwogCi0JLyogSW5pdGlhbGl6ZSB0aGUgZnJhbWUgZm9ybWF0ICov
Ci0JdmRlYmF5ZXItPnNpbmtfZm10ID0gc2lua19mbXRfZGVmYXVsdDsKLQkvKgotCSAqIFRP
RE86IEFkZCBzdXBwb3J0IGZvciBtb3JlIG91dHB1dCBmb3JtYXRzLCB3ZSBvbmx5IHN1cHBv
cnQKLQkgKiBSR0I4ODggZm9yIG5vdwotCSAqIE5PVEU6IHRoZSBzcmMgZm9ybWF0IGlzIGFs
d2F5cyB0aGUgc2FtZSBhcyB0aGUgc2luaywgZXhjZXB0Ci0JICogZm9yIHRoZSBjb2RlCi0J
ICovCi0JdmRlYmF5ZXItPnNyY19jb2RlID0gTUVESUFfQlVTX0ZNVF9SR0I4ODhfMVgyNDsK
IAl2ZGViYXllci0+c2V0X3JnYl9zcmMgPSB2aW1jX2RlYmF5ZXJfcHJvY2Vzc19yZ2JfZnJh
bWU7CiAKIAlyZXR1cm4gJnZkZWJheWVyLT52ZWQ7CkBAIC02MjUsNyArNjA2LDcgQEAgc3Rh
dGljIHN0cnVjdCB2aW1jX2VudF9kZXZpY2UgKnZpbWNfZGViYXllcl9hZGQoc3RydWN0IHZp
bWNfZGV2aWNlICp2aW1jLAogCXJldHVybiBFUlJfUFRSKHJldCk7CiB9CiAKLXN0cnVjdCB2
aW1jX2VudF90eXBlIHZpbWNfZGViYXllcl90eXBlID0geworY29uc3Qgc3RydWN0IHZpbWNf
ZW50X3R5cGUgdmltY19kZWJheWVyX3R5cGUgPSB7CiAJLmFkZCA9IHZpbWNfZGViYXllcl9h
ZGQsCiAJLnJlbGVhc2UgPSB2aW1jX2RlYmF5ZXJfcmVsZWFzZQogfTsKZGlmZiAtLWdpdCBh
L2RyaXZlcnMvbWVkaWEvdGVzdC1kcml2ZXJzL3ZpbWMvdmltYy1sZW5zLmMgYi9kcml2ZXJz
L21lZGlhL3Rlc3QtZHJpdmVycy92aW1jL3ZpbWMtbGVucy5jCmluZGV4IDNjZTdmNGI0ZDJj
Yy4uOTYzOTkwNTdhMmI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3Rlc3QtZHJpdmVy
cy92aW1jL3ZpbWMtbGVucy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdGVzdC1kcml2ZXJzL3Zp
bWMvdmltYy1sZW5zLmMKQEAgLTcyLDcgKzcyLDcgQEAgc3RhdGljIHN0cnVjdCB2aW1jX2Vu
dF9kZXZpY2UgKnZpbWNfbGVuc19hZGQoc3RydWN0IHZpbWNfZGV2aWNlICp2aW1jLAogCiAJ
cmV0ID0gdmltY19lbnRfc2RfcmVnaXN0ZXIoJnZsZW5zLT52ZWQsICZ2bGVucy0+c2QsIHY0
bDJfZGV2LAogCQkJCSAgIHZjZmdfbmFtZSwgTUVESUFfRU5UX0ZfTEVOUywgMCwKLQkJCQkg
ICBOVUxMLCAmdmltY19sZW5zX29wcyk7CisJCQkJICAgTlVMTCwgTlVMTCwgJnZpbWNfbGVu
c19vcHMpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyX2ZyZWVfaGRsOwogCkBAIC05MiwxMSAr
OTIsMTIgQEAgc3RhdGljIHZvaWQgdmltY19sZW5zX3JlbGVhc2Uoc3RydWN0IHZpbWNfZW50
X2RldmljZSAqdmVkKQogCQljb250YWluZXJfb2YodmVkLCBzdHJ1Y3QgdmltY19sZW5zX2Rl
dmljZSwgdmVkKTsKIAogCXY0bDJfY3RybF9oYW5kbGVyX2ZyZWUoJnZsZW5zLT5oZGwpOwor
CXY0bDJfc3ViZGV2X2NsZWFudXAoJnZsZW5zLT5zZCk7CiAJbWVkaWFfZW50aXR5X2NsZWFu
dXAodmxlbnMtPnZlZC5lbnQpOwogCWtmcmVlKHZsZW5zKTsKIH0KIAotc3RydWN0IHZpbWNf
ZW50X3R5cGUgdmltY19sZW5zX3R5cGUgPSB7Citjb25zdCBzdHJ1Y3QgdmltY19lbnRfdHlw
ZSB2aW1jX2xlbnNfdHlwZSA9IHsKIAkuYWRkID0gdmltY19sZW5zX2FkZCwKIAkucmVsZWFz
ZSA9IHZpbWNfbGVuc19yZWxlYXNlCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS90
ZXN0LWRyaXZlcnMvdmltYy92aW1jLXNjYWxlci5jIGIvZHJpdmVycy9tZWRpYS90ZXN0LWRy
aXZlcnMvdmltYy92aW1jLXNjYWxlci5jCmluZGV4IGFmZTEzZDZhZjMyMS4uNDdkMGQ2Mzg2
NWEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3Rlc3QtZHJpdmVycy92aW1jL3ZpbWMt
c2NhbGVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS90ZXN0LWRyaXZlcnMvdmltYy92aW1jLXNj
YWxlci5jCkBAIC0xNSw3ICsxNSw3IEBACiAjaW5jbHVkZSAidmltYy1jb21tb24uaCIKIAog
LyogUGFkIGlkZW50aWZpZXIgKi8KLWVudW0gdmljX3NjYV9wYWQgeworZW51bSB2aW1jX3Nj
YWxlcl9wYWQgewogCVZJTUNfU0NBTEVSX1NJTksgPSAwLAogCVZJTUNfU0NBTEVSX1NSQyA9
IDEsCiB9OwpAQCAtMjYsMTMgKzI2LDIwIEBAIGVudW0gdmljX3NjYV9wYWQgewogc3RydWN0
IHZpbWNfc2NhbGVyX2RldmljZSB7CiAJc3RydWN0IHZpbWNfZW50X2RldmljZSB2ZWQ7CiAJ
c3RydWN0IHY0bDJfc3ViZGV2IHNkOwotCXN0cnVjdCB2NGwyX3JlY3QgY3JvcF9yZWN0Owot
CS8qIEZyYW1lIGZvcm1hdCBmb3IgYm90aCBzaW5rIGFuZCBzcmMgcGFkICovCi0Jc3RydWN0
IHY0bDJfbWJ1c19mcmFtZWZtdCBmbXRbMl07Ci0JLyogVmFsdWVzIGNhbGN1bGF0ZWQgd2hl
biB0aGUgc3RyZWFtIHN0YXJ0cyAqLwotCXU4ICpzcmNfZnJhbWU7Ci0JdW5zaWduZWQgaW50
IGJwcDsKIAlzdHJ1Y3QgbWVkaWFfcGFkIHBhZHNbMl07CisKKwl1OCAqc3JjX2ZyYW1lOwor
CisJLyoKKwkgKiBWaXJ0dWFsICJoYXJkd2FyZSIgY29uZmlndXJhdGlvbiwgZmlsbGVkIHdo
ZW4gdGhlIHN0cmVhbSBzdGFydHMgb3IKKwkgKiB3aGVuIGNvbnRyb2xzIGFyZSBzZXQuCisJ
ICovCisJc3RydWN0IHsKKwkJc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCBzaW5rX2ZtdDsK
KwkJc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCBzcmNfZm10OworCQlzdHJ1Y3QgdjRsMl9y
ZWN0IHNpbmtfY3JvcDsKKwkJdW5zaWduZWQgaW50IGJwcDsKKwl9IGh3OwogfTsKIAogc3Rh
dGljIGNvbnN0IHN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgZm10X2RlZmF1bHQgPSB7CkBA
IC0xMzIsMzkgKzEzOSw2IEBAIHN0YXRpYyBpbnQgdmltY19zY2FsZXJfZW51bV9mcmFtZV9z
aXplKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBz
dHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICoKLXZpbWNfc2NhbGVyX3BhZF9mb3JtYXQoc3Ry
dWN0IHZpbWNfc2NhbGVyX2RldmljZSAqdnNjYWxlciwKLQkJICAgIHN0cnVjdCB2NGwyX3N1
YmRldl9zdGF0ZSAqc2Rfc3RhdGUsIHUzMiBwYWQsCi0JCSAgICBlbnVtIHY0bDJfc3ViZGV2
X2Zvcm1hdF93aGVuY2Ugd2hpY2gpCi17Ci0JaWYgKHdoaWNoID09IFY0TDJfU1VCREVWX0ZP
Uk1BVF9UUlkpCi0JCXJldHVybiB2NGwyX3N1YmRldl9zdGF0ZV9nZXRfZm9ybWF0KHNkX3N0
YXRlLCBwYWQpOwotCWVsc2UKLQkJcmV0dXJuICZ2c2NhbGVyLT5mbXRbcGFkXTsKLX0KLQot
c3RhdGljIHN0cnVjdCB2NGwyX3JlY3QgKgotdmltY19zY2FsZXJfcGFkX2Nyb3Aoc3RydWN0
IHZpbWNfc2NhbGVyX2RldmljZSAqdnNjYWxlciwKLQkJICBzdHJ1Y3QgdjRsMl9zdWJkZXZf
c3RhdGUgKnNkX3N0YXRlLAotCQkgIGVudW0gdjRsMl9zdWJkZXZfZm9ybWF0X3doZW5jZSB3
aGljaCkKLXsKLQlpZiAod2hpY2ggPT0gVjRMMl9TVUJERVZfRk9STUFUX1RSWSkKLQkJcmV0
dXJuIHY0bDJfc3ViZGV2X3N0YXRlX2dldF9jcm9wKHNkX3N0YXRlLCBWSU1DX1NDQUxFUl9T
SU5LKTsKLQllbHNlCi0JCXJldHVybiAmdnNjYWxlci0+Y3JvcF9yZWN0OwotfQotCi1zdGF0
aWMgaW50IHZpbWNfc2NhbGVyX2dldF9mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKLQkJ
CSAgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfc3RhdGUgKnNkX3N0YXRlLAotCQkJICAgIHN0cnVj
dCB2NGwyX3N1YmRldl9mb3JtYXQgKmZvcm1hdCkKLXsKLQlzdHJ1Y3QgdmltY19zY2FsZXJf
ZGV2aWNlICp2c2NhbGVyID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7Ci0KLQlmb3JtYXQt
PmZvcm1hdCA9ICp2aW1jX3NjYWxlcl9wYWRfZm9ybWF0KHZzY2FsZXIsIHNkX3N0YXRlLCBm
b3JtYXQtPnBhZCwKLQkJCQkJICAgICAgZm9ybWF0LT53aGljaCk7Ci0JcmV0dXJuIDA7Ci19
Ci0KIHN0YXRpYyBpbnQgdmltY19zY2FsZXJfc2V0X2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYg
KnNkLAogCQkJICAgIHN0cnVjdCB2NGwyX3N1YmRldl9zdGF0ZSAqc2Rfc3RhdGUsCiAJCQkg
ICAgc3RydWN0IHY0bDJfc3ViZGV2X2Zvcm1hdCAqZm9ybWF0KQpAQCAtMTc2LDcgKzE1MCw3
IEBAIHN0YXRpYyBpbnQgdmltY19zY2FsZXJfc2V0X2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYg
KnNkLAogCWlmIChmb3JtYXQtPndoaWNoID09IFY0TDJfU1VCREVWX0ZPUk1BVF9BQ1RJVkUg
JiYgdnNjYWxlci0+c3JjX2ZyYW1lKQogCQlyZXR1cm4gLUVCVVNZOwogCi0JZm10ID0gdmlt
Y19zY2FsZXJfcGFkX2Zvcm1hdCh2c2NhbGVyLCBzZF9zdGF0ZSwgZm9ybWF0LT5wYWQsIGZv
cm1hdC0+d2hpY2gpOworCWZtdCA9IHY0bDJfc3ViZGV2X3N0YXRlX2dldF9mb3JtYXQoc2Rf
c3RhdGUsIGZvcm1hdC0+cGFkKTsKIAogCS8qCiAJICogVGhlIG1lZGlhIGJ1cyBjb2RlIGFu
ZCBjb2xvcnNwYWNlIGNhbiBvbmx5IGJlIGNoYW5nZWQgb24gdGhlIHNpbmsKQEAgLTIxNCwx
NCArMTg4LDEzIEBAIHN0YXRpYyBpbnQgdmltY19zY2FsZXJfc2V0X2ZtdChzdHJ1Y3QgdjRs
Ml9zdWJkZXYgKnNkLAogCQlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICpzcmNfZm10Owog
CQlzdHJ1Y3QgdjRsMl9yZWN0ICpjcm9wOwogCi0JCWNyb3AgPSB2aW1jX3NjYWxlcl9wYWRf
Y3JvcCh2c2NhbGVyLCBzZF9zdGF0ZSwgZm9ybWF0LT53aGljaCk7CisJCWNyb3AgPSB2NGwy
X3N1YmRldl9zdGF0ZV9nZXRfY3JvcChzZF9zdGF0ZSwgVklNQ19TQ0FMRVJfU0lOSyk7CiAJ
CWNyb3AtPndpZHRoID0gZm10LT53aWR0aDsKIAkJY3JvcC0+aGVpZ2h0ID0gZm10LT5oZWln
aHQ7CiAJCWNyb3AtPnRvcCA9IDA7CiAJCWNyb3AtPmxlZnQgPSAwOwogCi0JCXNyY19mbXQg
PSB2aW1jX3NjYWxlcl9wYWRfZm9ybWF0KHZzY2FsZXIsIHNkX3N0YXRlLCBWSU1DX1NDQUxF
Ul9TUkMsCi0JCQkJCSAgICAgIGZvcm1hdC0+d2hpY2gpOworCQlzcmNfZm10ID0gdjRsMl9z
dWJkZXZfc3RhdGVfZ2V0X2Zvcm1hdChzZF9zdGF0ZSwgVklNQ19TQ0FMRVJfU1JDKTsKIAkJ
KnNyY19mbXQgPSAqZm10OwogCX0KIApAQCAtMjM0LDcgKzIwNyw2IEBAIHN0YXRpYyBpbnQg
dmltY19zY2FsZXJfZ2V0X3NlbGVjdGlvbihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAogCQkJ
CSAgc3RydWN0IHY0bDJfc3ViZGV2X3N0YXRlICpzZF9zdGF0ZSwKIAkJCQkgIHN0cnVjdCB2
NGwyX3N1YmRldl9zZWxlY3Rpb24gKnNlbCkKIHsKLQlzdHJ1Y3QgdmltY19zY2FsZXJfZGV2
aWNlICp2c2NhbGVyID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CiAJc3RydWN0IHY0bDJf
bWJ1c19mcmFtZWZtdCAqc2lua19mbXQ7CiAKIAlpZiAoVklNQ19JU19TUkMoc2VsLT5wYWQp
KQpAQCAtMjQyLDExICsyMTQsMTAgQEAgc3RhdGljIGludCB2aW1jX3NjYWxlcl9nZXRfc2Vs
ZWN0aW9uKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCiAKIAlzd2l0Y2ggKHNlbC0+dGFyZ2V0
KSB7CiAJY2FzZSBWNEwyX1NFTF9UR1RfQ1JPUDoKLQkJc2VsLT5yID0gKnZpbWNfc2NhbGVy
X3BhZF9jcm9wKHZzY2FsZXIsIHNkX3N0YXRlLCBzZWwtPndoaWNoKTsKKwkJc2VsLT5yID0g
KnY0bDJfc3ViZGV2X3N0YXRlX2dldF9jcm9wKHNkX3N0YXRlLCBWSU1DX1NDQUxFUl9TSU5L
KTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX1NFTF9UR1RfQ1JPUF9CT1VORFM6Ci0JCXNpbmtf
Zm10ID0gdmltY19zY2FsZXJfcGFkX2Zvcm1hdCh2c2NhbGVyLCBzZF9zdGF0ZSwgVklNQ19T
Q0FMRVJfU0lOSywKLQkJCQkJICAgICAgIHNlbC0+d2hpY2gpOworCQlzaW5rX2ZtdCA9IHY0
bDJfc3ViZGV2X3N0YXRlX2dldF9mb3JtYXQoc2Rfc3RhdGUsIFZJTUNfU0NBTEVSX1NJTksp
OwogCQlzZWwtPnIgPSB2aW1jX3NjYWxlcl9nZXRfY3JvcF9ib3VuZF9zaW5rKHNpbmtfZm10
KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTI4Miw5ICsyNTMsOCBAQCBzdGF0aWMgaW50
IHZpbWNfc2NhbGVyX3NldF9zZWxlY3Rpb24oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKIAlp
ZiAoc2VsLT53aGljaCA9PSBWNEwyX1NVQkRFVl9GT1JNQVRfQUNUSVZFICYmIHZzY2FsZXIt
PnNyY19mcmFtZSkKIAkJcmV0dXJuIC1FQlVTWTsKIAotCWNyb3BfcmVjdCA9IHZpbWNfc2Nh
bGVyX3BhZF9jcm9wKHZzY2FsZXIsIHNkX3N0YXRlLCBzZWwtPndoaWNoKTsKLQlzaW5rX2Zt
dCA9IHZpbWNfc2NhbGVyX3BhZF9mb3JtYXQodnNjYWxlciwgc2Rfc3RhdGUsIFZJTUNfU0NB
TEVSX1NJTkssCi0JCQkJICAgICAgIHNlbC0+d2hpY2gpOworCWNyb3BfcmVjdCA9IHY0bDJf
c3ViZGV2X3N0YXRlX2dldF9jcm9wKHNkX3N0YXRlLCBWSU1DX1NDQUxFUl9TSU5LKTsKKwlz
aW5rX2ZtdCA9IHY0bDJfc3ViZGV2X3N0YXRlX2dldF9mb3JtYXQoc2Rfc3RhdGUsIFZJTUNf
U0NBTEVSX1NJTkspOwogCXZpbWNfc2NhbGVyX2FkanVzdF9zaW5rX2Nyb3AoJnNlbC0+ciwg
c2lua19mbXQpOwogCSpjcm9wX3JlY3QgPSBzZWwtPnI7CiAKQEAgLTI5NCw3ICsyNjQsNyBA
QCBzdGF0aWMgaW50IHZpbWNfc2NhbGVyX3NldF9zZWxlY3Rpb24oc3RydWN0IHY0bDJfc3Vi
ZGV2ICpzZCwKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfcGFkX29wcyB2aW1j
X3NjYWxlcl9wYWRfb3BzID0gewogCS5lbnVtX21idXNfY29kZQkJPSB2aW1jX3NjYWxlcl9l
bnVtX21idXNfY29kZSwKIAkuZW51bV9mcmFtZV9zaXplCT0gdmltY19zY2FsZXJfZW51bV9m
cmFtZV9zaXplLAotCS5nZXRfZm10CQk9IHZpbWNfc2NhbGVyX2dldF9mbXQsCisJLmdldF9m
bXQJCT0gdjRsMl9zdWJkZXZfZ2V0X2ZtdCwKIAkuc2V0X2ZtdAkJPSB2aW1jX3NjYWxlcl9z
ZXRfZm10LAogCS5nZXRfc2VsZWN0aW9uCQk9IHZpbWNfc2NhbGVyX2dldF9zZWxlY3Rpb24s
CiAJLnNldF9zZWxlY3Rpb24JCT0gdmltY19zY2FsZXJfc2V0X3NlbGVjdGlvbiwKQEAgLTMw
NSwyNyArMjc1LDM4IEBAIHN0YXRpYyBpbnQgdmltY19zY2FsZXJfc19zdHJlYW0oc3RydWN0
IHY0bDJfc3ViZGV2ICpzZCwgaW50IGVuYWJsZSkKIAlzdHJ1Y3QgdmltY19zY2FsZXJfZGV2
aWNlICp2c2NhbGVyID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CiAKIAlpZiAoZW5hYmxl
KSB7Ci0JCWNvbnN0IHN0cnVjdCB2aW1jX3BpeF9tYXAgKnZwaXg7CisJCXN0cnVjdCB2NGwy
X3N1YmRldl9zdGF0ZSAqc3RhdGU7CisJCWNvbnN0IHN0cnVjdCB2NGwyX21idXNfZnJhbWVm
bXQgKmZvcm1hdDsKKwkJY29uc3Qgc3RydWN0IHY0bDJfcmVjdCAqcmVjdDsKIAkJdW5zaWdu
ZWQgaW50IGZyYW1lX3NpemU7CiAKIAkJaWYgKHZzY2FsZXItPnNyY19mcmFtZSkKIAkJCXJl
dHVybiAwOwogCi0JCS8qIFNhdmUgdGhlIGJ5dGVzIHBlciBwaXhlbCBvZiB0aGUgc2luayAq
LwotCQl2cGl4ID0gdmltY19waXhfbWFwX2J5X2NvZGUodnNjYWxlci0+Zm10W1ZJTUNfU0NB
TEVSX1NJTktdLmNvZGUpOwotCQl2c2NhbGVyLT5icHAgPSB2cGl4LT5icHA7CisJCXN0YXRl
ID0gdjRsMl9zdWJkZXZfbG9ja19hbmRfZ2V0X2FjdGl2ZV9zdGF0ZShzZCk7CiAKLQkJLyog
Q2FsY3VsYXRlIHRoZSBmcmFtZSBzaXplIG9mIHRoZSBzb3VyY2UgcGFkICovCi0JCWZyYW1l
X3NpemUgPSB2c2NhbGVyLT5mbXRbVklNQ19TQ0FMRVJfU1JDXS53aWR0aAotCQkJICAgKiB2
c2NhbGVyLT5mbXRbVklNQ19TQ0FMRVJfU1JDXS5oZWlnaHQgKiB2c2NhbGVyLT5icHA7CisJ
CS8qIFNhdmUgdGhlIGJ5dGVzIHBlciBwaXhlbCBvZiB0aGUgc2luay4gKi8KKwkJZm9ybWF0
ID0gdjRsMl9zdWJkZXZfc3RhdGVfZ2V0X2Zvcm1hdChzdGF0ZSwgVklNQ19TQ0FMRVJfU0lO
Syk7CisJCXZzY2FsZXItPmh3LnNpbmtfZm10ID0gKmZvcm1hdDsKKwkJdnNjYWxlci0+aHcu
YnBwID0gdmltY19waXhfbWFwX2J5X2NvZGUoZm9ybWF0LT5jb2RlKS0+YnBwOwogCi0JCS8q
IEFsbG9jYXRlIHRoZSBmcmFtZSBidWZmZXIuIFVzZSB2bWFsbG9jIHRvIGJlIGFibGUgdG8K
LQkJICogYWxsb2NhdGUgYSBsYXJnZSBhbW91bnQgb2YgbWVtb3J5CisJCS8qIENhbGN1bGF0
ZSB0aGUgZnJhbWUgc2l6ZSBvZiB0aGUgc291cmNlIHBhZC4gKi8KKwkJZm9ybWF0ID0gdjRs
Ml9zdWJkZXZfc3RhdGVfZ2V0X2Zvcm1hdChzdGF0ZSwgVklNQ19TQ0FMRVJfU1JDKTsKKwkJ
dnNjYWxlci0+aHcuc3JjX2ZtdCA9ICpmb3JtYXQ7CisJCWZyYW1lX3NpemUgPSBmb3JtYXQt
PndpZHRoICogZm9ybWF0LT5oZWlnaHQgKiB2c2NhbGVyLT5ody5icHA7CisKKwkJcmVjdCA9
IHY0bDJfc3ViZGV2X3N0YXRlX2dldF9jcm9wKHN0YXRlLCBWSU1DX1NDQUxFUl9TSU5LKTsK
KwkJdnNjYWxlci0+aHcuc2lua19jcm9wID0gKnJlY3Q7CisKKwkJdjRsMl9zdWJkZXZfdW5s
b2NrX3N0YXRlKHN0YXRlKTsKKworCQkvKgorCQkgKiBBbGxvY2F0ZSB0aGUgZnJhbWUgYnVm
ZmVyLiBVc2Ugdm1hbGxvYyB0byBiZSBhYmxlIHRvIGFsbG9jYXRlCisJCSAqIGEgbGFyZ2Ug
YW1vdW50IG9mIG1lbW9yeS4KIAkJICovCiAJCXZzY2FsZXItPnNyY19mcmFtZSA9IHZtYWxs
b2MoZnJhbWVfc2l6ZSk7CiAJCWlmICghdnNjYWxlci0+c3JjX2ZyYW1lKQogCQkJcmV0dXJu
IC1FTk9NRU07Ci0KIAl9IGVsc2UgewogCQlpZiAoIXZzY2FsZXItPnNyY19mcmFtZSkKIAkJ
CXJldHVybiAwOwpAQCAtMzUzLDkgKzMzNCw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRs
Ml9zdWJkZXZfaW50ZXJuYWxfb3BzIHZpbWNfc2NhbGVyX2ludGVybmFsX29wcyA9IHsKIHN0
YXRpYyB2b2lkIHZpbWNfc2NhbGVyX2ZpbGxfc3JjX2ZyYW1lKGNvbnN0IHN0cnVjdCB2aW1j
X3NjYWxlcl9kZXZpY2UgKmNvbnN0IHZzY2FsZXIsCiAJCQkJICAgIGNvbnN0IHU4ICpjb25z
dCBzaW5rX2ZyYW1lKQogewotCWNvbnN0IHN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgKnNy
Y19mbXQgPSAmdnNjYWxlci0+Zm10W1ZJTUNfU0NBTEVSX1NSQ107Ci0JY29uc3Qgc3RydWN0
IHY0bDJfcmVjdCAqciA9ICZ2c2NhbGVyLT5jcm9wX3JlY3Q7Ci0JdW5zaWduZWQgaW50IHNu
a193aWR0aCA9IHZzY2FsZXItPmZtdFtWSU1DX1NDQUxFUl9TSU5LXS53aWR0aDsKKwljb25z
dCBzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICpzaW5rX2ZtdCA9ICZ2c2NhbGVyLT5ody5z
aW5rX2ZtdDsKKwljb25zdCBzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICpzcmNfZm10ID0g
JnZzY2FsZXItPmh3LnNyY19mbXQ7CisJY29uc3Qgc3RydWN0IHY0bDJfcmVjdCAqciA9ICZ2
c2NhbGVyLT5ody5zaW5rX2Nyb3A7CiAJdW5zaWduZWQgaW50IHNyY194LCBzcmNfeTsKIAl1
OCAqd2Fsa2VyID0gdnNjYWxlci0+c3JjX2ZyYW1lOwogCkBAIC0zNjQsMTYgKzM0NSwxNiBA
QCBzdGF0aWMgdm9pZCB2aW1jX3NjYWxlcl9maWxsX3NyY19mcmFtZShjb25zdCBzdHJ1Y3Qg
dmltY19zY2FsZXJfZGV2aWNlICpjb25zdCB2cwogCQl1bnNpZ25lZCBpbnQgc25rX3ksIHlf
b2Zmc2V0OwogCiAJCXNua195ID0gKHNyY195ICogci0+aGVpZ2h0KSAvIHNyY19mbXQtPmhl
aWdodCArIHItPnRvcDsKLQkJeV9vZmZzZXQgPSBzbmtfeSAqIHNua193aWR0aCAqIHZzY2Fs
ZXItPmJwcDsKKwkJeV9vZmZzZXQgPSBzbmtfeSAqIHNpbmtfZm10LT53aWR0aCAqIHZzY2Fs
ZXItPmh3LmJwcDsKIAogCQlmb3IgKHNyY194ID0gMDsgc3JjX3ggPCBzcmNfZm10LT53aWR0
aDsgc3JjX3grKykgewogCQkJdW5zaWduZWQgaW50IHNua194LCB4X29mZnNldCwgaW5kZXg7
CiAKIAkJCXNua194ID0gKHNyY194ICogci0+d2lkdGgpIC8gc3JjX2ZtdC0+d2lkdGggKyBy
LT5sZWZ0OwotCQkJeF9vZmZzZXQgPSBzbmtfeCAqIHZzY2FsZXItPmJwcDsKKwkJCXhfb2Zm
c2V0ID0gc25rX3ggKiB2c2NhbGVyLT5ody5icHA7CiAJCQlpbmRleCA9IHlfb2Zmc2V0ICsg
eF9vZmZzZXQ7Ci0JCQltZW1jcHkod2Fsa2VyLCAmc2lua19mcmFtZVtpbmRleF0sIHZzY2Fs
ZXItPmJwcCk7Ci0JCQl3YWxrZXIgKz0gdnNjYWxlci0+YnBwOworCQkJbWVtY3B5KHdhbGtl
ciwgJnNpbmtfZnJhbWVbaW5kZXhdLCB2c2NhbGVyLT5ody5icHApOworCQkJd2Fsa2VyICs9
IHZzY2FsZXItPmh3LmJwcDsKIAkJfQogCX0KIH0KQEAgLTM5OCw2ICszNzksNyBAQCBzdGF0
aWMgdm9pZCB2aW1jX3NjYWxlcl9yZWxlYXNlKHN0cnVjdCB2aW1jX2VudF9kZXZpY2UgKnZl
ZCkKIAlzdHJ1Y3QgdmltY19zY2FsZXJfZGV2aWNlICp2c2NhbGVyID0KIAkJY29udGFpbmVy
X29mKHZlZCwgc3RydWN0IHZpbWNfc2NhbGVyX2RldmljZSwgdmVkKTsKIAorCXY0bDJfc3Vi
ZGV2X2NsZWFudXAoJnZzY2FsZXItPnNkKTsKIAltZWRpYV9lbnRpdHlfY2xlYW51cCh2c2Nh
bGVyLT52ZWQuZW50KTsKIAlrZnJlZSh2c2NhbGVyKTsKIH0KQEAgLTQyMSwyOCArNDAzLDIw
IEBAIHN0YXRpYyBzdHJ1Y3QgdmltY19lbnRfZGV2aWNlICp2aW1jX3NjYWxlcl9hZGQoc3Ry
dWN0IHZpbWNfZGV2aWNlICp2aW1jLAogCXJldCA9IHZpbWNfZW50X3NkX3JlZ2lzdGVyKCZ2
c2NhbGVyLT52ZWQsICZ2c2NhbGVyLT5zZCwgdjRsMl9kZXYsCiAJCQkJICAgdmNmZ19uYW1l
LAogCQkJCSAgIE1FRElBX0VOVF9GX1BST0NfVklERU9fU0NBTEVSLCAyLAotCQkJCSAgIHZz
Y2FsZXItPnBhZHMsICZ2aW1jX3NjYWxlcl9vcHMpOworCQkJCSAgIHZzY2FsZXItPnBhZHMs
ICZ2aW1jX3NjYWxlcl9pbnRlcm5hbF9vcHMsCisJCQkJICAgJnZpbWNfc2NhbGVyX29wcyk7
CiAJaWYgKHJldCkgewogCQlrZnJlZSh2c2NhbGVyKTsKIAkJcmV0dXJuIEVSUl9QVFIocmV0
KTsKIAl9CiAKLQl2c2NhbGVyLT5zZC5pbnRlcm5hbF9vcHMgPSAmdmltY19zY2FsZXJfaW50
ZXJuYWxfb3BzOwotCiAJdnNjYWxlci0+dmVkLnByb2Nlc3NfZnJhbWUgPSB2aW1jX3NjYWxl
cl9wcm9jZXNzX2ZyYW1lOwogCXZzY2FsZXItPnZlZC5kZXYgPSB2aW1jLT5tZGV2LmRldjsK
IAotCS8qIEluaXRpYWxpemUgdGhlIGZyYW1lIGZvcm1hdCAqLwotCXZzY2FsZXItPmZtdFtW
SU1DX1NDQUxFUl9TSU5LXSA9IGZtdF9kZWZhdWx0OwotCXZzY2FsZXItPmZtdFtWSU1DX1ND
QUxFUl9TUkNdID0gZm10X2RlZmF1bHQ7Ci0KLQkvKiBJbml0aWFsaXplIHRoZSBjcm9wIHNl
bGVjdGlvbiAqLwotCXZzY2FsZXItPmNyb3BfcmVjdCA9IGNyb3BfcmVjdF9kZWZhdWx0Owot
CiAJcmV0dXJuICZ2c2NhbGVyLT52ZWQ7CiB9CiAKLXN0cnVjdCB2aW1jX2VudF90eXBlIHZp
bWNfc2NhbGVyX3R5cGUgPSB7Citjb25zdCBzdHJ1Y3QgdmltY19lbnRfdHlwZSB2aW1jX3Nj
YWxlcl90eXBlID0gewogCS5hZGQgPSB2aW1jX3NjYWxlcl9hZGQsCiAJLnJlbGVhc2UgPSB2
aW1jX3NjYWxlcl9yZWxlYXNlCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS90ZXN0
LWRyaXZlcnMvdmltYy92aW1jLXNlbnNvci5jIGIvZHJpdmVycy9tZWRpYS90ZXN0LWRyaXZl
cnMvdmltYy92aW1jLXNlbnNvci5jCmluZGV4IDVlMzRiMWFlZDk1ZS4uMDI3NzY3Nzc3NzYz
IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3Rlc3QtZHJpdmVycy92aW1jL3ZpbWMtc2Vu
c29yLmMKKysrIGIvZHJpdmVycy9tZWRpYS90ZXN0LWRyaXZlcnMvdmltYy92aW1jLXNlbnNv
ci5jCkBAIC0yNCwxMyArMjQsMjAgQEAgc3RydWN0IHZpbWNfc2Vuc29yX2RldmljZSB7CiAJ
c3RydWN0IHZpbWNfZW50X2RldmljZSB2ZWQ7CiAJc3RydWN0IHY0bDJfc3ViZGV2IHNkOwog
CXN0cnVjdCB0cGdfZGF0YSB0cGc7Ci0JdTggKmZyYW1lOwotCWVudW0gdmltY19zZW5zb3Jf
b3NkX21vZGUgb3NkX3ZhbHVlOwotCXU2NCBzdGFydF9zdHJlYW1fdHM7Ci0JLyogVGhlIGFj
dGl2ZSBmb3JtYXQgKi8KLQlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10IG1idXNfZm9ybWF0
OwogCXN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciBoZGw7CiAJc3RydWN0IG1lZGlhX3BhZCBw
YWQ7CisKKwl1OCAqZnJhbWU7CisKKwkvKgorCSAqIFZpcnR1YWwgImhhcmR3YXJlIiBjb25m
aWd1cmF0aW9uLCBmaWxsZWQgd2hlbiB0aGUgc3RyZWFtIHN0YXJ0cyBvcgorCSAqIHdoZW4g
Y29udHJvbHMgYXJlIHNldC4KKwkgKi8KKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgdjRsMl9hcmVh
IHNpemU7CisJCWVudW0gdmltY19zZW5zb3Jfb3NkX21vZGUgb3NkX3ZhbHVlOworCQl1NjQg
c3RhcnRfc3RyZWFtX3RzOworCX0gaHc7CiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0
bDJfbWJ1c19mcmFtZWZtdCBmbXRfZGVmYXVsdCA9IHsKQEAgLTQ0LDE0ICs1MSwxMCBAQCBz
dGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCBmbXRfZGVmYXVsdCA9IHsK
IHN0YXRpYyBpbnQgdmltY19zZW5zb3JfaW5pdF9zdGF0ZShzdHJ1Y3QgdjRsMl9zdWJkZXYg
KnNkLAogCQkJCSAgc3RydWN0IHY0bDJfc3ViZGV2X3N0YXRlICpzZF9zdGF0ZSkKIHsKLQl1
bnNpZ25lZCBpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBzZC0+ZW50aXR5Lm51bV9wYWRz
OyBpKyspIHsKLQkJc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAqbWY7CisJc3RydWN0IHY0
bDJfbWJ1c19mcmFtZWZtdCAqbWY7CiAKLQkJbWYgPSB2NGwyX3N1YmRldl9zdGF0ZV9nZXRf
Zm9ybWF0KHNkX3N0YXRlLCBpKTsKLQkJKm1mID0gZm10X2RlZmF1bHQ7Ci0JfQorCW1mID0g
djRsMl9zdWJkZXZfc3RhdGVfZ2V0X2Zvcm1hdChzZF9zdGF0ZSwgMCk7CisJKm1mID0gZm10
X2RlZmF1bHQ7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTkyLDM2ICs5NSwyMiBAQCBzdGF0aWMg
aW50IHZpbWNfc2Vuc29yX2VudW1fZnJhbWVfc2l6ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNk
LAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpbWNfc2Vuc29yX2dldF9mbXQoc3Ry
dWN0IHY0bDJfc3ViZGV2ICpzZCwKLQkJCSAgICAgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfc3Rh
dGUgKnNkX3N0YXRlLAotCQkJICAgICAgIHN0cnVjdCB2NGwyX3N1YmRldl9mb3JtYXQgKmZt
dCkKK3N0YXRpYyB2b2lkIHZpbWNfc2Vuc29yX3RwZ19zX2Zvcm1hdChzdHJ1Y3QgdmltY19z
ZW5zb3JfZGV2aWNlICp2c2Vuc29yLAorCQkJCSAgICAgY29uc3Qgc3RydWN0IHY0bDJfbWJ1
c19mcmFtZWZtdCAqZm9ybWF0KQogewotCXN0cnVjdCB2aW1jX3NlbnNvcl9kZXZpY2UgKnZz
ZW5zb3IgPQotCQkJCWNvbnRhaW5lcl9vZihzZCwgc3RydWN0IHZpbWNfc2Vuc29yX2Rldmlj
ZSwgc2QpOwotCi0JZm10LT5mb3JtYXQgPSBmbXQtPndoaWNoID09IFY0TDJfU1VCREVWX0ZP
Uk1BVF9UUlkgPwotCQkgICAgICAqdjRsMl9zdWJkZXZfc3RhdGVfZ2V0X2Zvcm1hdChzZF9z
dGF0ZSwgZm10LT5wYWQpIDoKLQkJICAgICAgdnNlbnNvci0+bWJ1c19mb3JtYXQ7CisJY29u
c3Qgc3RydWN0IHZpbWNfcGl4X21hcCAqdnBpeCA9IHZpbWNfcGl4X21hcF9ieV9jb2RlKGZv
cm1hdC0+Y29kZSk7CiAKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgdmltY19zZW5z
b3JfdHBnX3NfZm9ybWF0KHN0cnVjdCB2aW1jX3NlbnNvcl9kZXZpY2UgKnZzZW5zb3IpCi17
Ci0JY29uc3Qgc3RydWN0IHZpbWNfcGl4X21hcCAqdnBpeCA9Ci0JCQkJdmltY19waXhfbWFw
X2J5X2NvZGUodnNlbnNvci0+bWJ1c19mb3JtYXQuY29kZSk7Ci0KLQl0cGdfcmVzZXRfc291
cmNlKCZ2c2Vuc29yLT50cGcsIHZzZW5zb3ItPm1idXNfZm9ybWF0LndpZHRoLAotCQkJIHZz
ZW5zb3ItPm1idXNfZm9ybWF0LmhlaWdodCwgdnNlbnNvci0+bWJ1c19mb3JtYXQuZmllbGQp
OwotCXRwZ19zX2J5dGVzcGVybGluZSgmdnNlbnNvci0+dHBnLCAwLCB2c2Vuc29yLT5tYnVz
X2Zvcm1hdC53aWR0aCAqIHZwaXgtPmJwcCk7Ci0JdHBnX3NfYnVmX2hlaWdodCgmdnNlbnNv
ci0+dHBnLCB2c2Vuc29yLT5tYnVzX2Zvcm1hdC5oZWlnaHQpOworCXRwZ19yZXNldF9zb3Vy
Y2UoJnZzZW5zb3ItPnRwZywgZm9ybWF0LT53aWR0aCwgZm9ybWF0LT5oZWlnaHQsCisJCQkg
Zm9ybWF0LT5maWVsZCk7CisJdHBnX3NfYnl0ZXNwZXJsaW5lKCZ2c2Vuc29yLT50cGcsIDAs
IGZvcm1hdC0+d2lkdGggKiB2cGl4LT5icHApOworCXRwZ19zX2J1Zl9oZWlnaHQoJnZzZW5z
b3ItPnRwZywgZm9ybWF0LT5oZWlnaHQpOwogCXRwZ19zX2ZvdXJjYygmdnNlbnNvci0+dHBn
LCB2cGl4LT5waXhlbGZvcm1hdCk7CiAJLyogVE9ETzogYWRkIHN1cHBvcnQgZm9yIFY0TDJf
RklFTERfQUxURVJOQVRFICovCi0JdHBnX3NfZmllbGQoJnZzZW5zb3ItPnRwZywgdnNlbnNv
ci0+bWJ1c19mb3JtYXQuZmllbGQsIGZhbHNlKTsKLQl0cGdfc19jb2xvcnNwYWNlKCZ2c2Vu
c29yLT50cGcsIHZzZW5zb3ItPm1idXNfZm9ybWF0LmNvbG9yc3BhY2UpOwotCXRwZ19zX3lj
YmNyX2VuYygmdnNlbnNvci0+dHBnLCB2c2Vuc29yLT5tYnVzX2Zvcm1hdC55Y2Jjcl9lbmMp
OwotCXRwZ19zX3F1YW50aXphdGlvbigmdnNlbnNvci0+dHBnLCB2c2Vuc29yLT5tYnVzX2Zv
cm1hdC5xdWFudGl6YXRpb24pOwotCXRwZ19zX3hmZXJfZnVuYygmdnNlbnNvci0+dHBnLCB2
c2Vuc29yLT5tYnVzX2Zvcm1hdC54ZmVyX2Z1bmMpOworCXRwZ19zX2ZpZWxkKCZ2c2Vuc29y
LT50cGcsIGZvcm1hdC0+ZmllbGQsIGZhbHNlKTsKKwl0cGdfc19jb2xvcnNwYWNlKCZ2c2Vu
c29yLT50cGcsIGZvcm1hdC0+Y29sb3JzcGFjZSk7CisJdHBnX3NfeWNiY3JfZW5jKCZ2c2Vu
c29yLT50cGcsIGZvcm1hdC0+eWNiY3JfZW5jKTsKKwl0cGdfc19xdWFudGl6YXRpb24oJnZz
ZW5zb3ItPnRwZywgZm9ybWF0LT5xdWFudGl6YXRpb24pOworCXRwZ19zX3hmZXJfZnVuYygm
dnNlbnNvci0+dHBnLCBmb3JtYXQtPnhmZXJfZnVuYyk7CiB9CiAKIHN0YXRpYyB2b2lkIHZp
bWNfc2Vuc29yX2FkanVzdF9mbXQoc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAqZm10KQpA
QCAtMTUyLDE1ICsxNDEsMTEgQEAgc3RhdGljIGludCB2aW1jX3NlbnNvcl9zZXRfZm10KHN0
cnVjdCB2NGwyX3N1YmRldiAqc2QsCiAJc3RydWN0IHZpbWNfc2Vuc29yX2RldmljZSAqdnNl
bnNvciA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwogCXN0cnVjdCB2NGwyX21idXNfZnJh
bWVmbXQgKm1mOwogCi0JaWYgKGZtdC0+d2hpY2ggPT0gVjRMMl9TVUJERVZfRk9STUFUX0FD
VElWRSkgewotCQkvKiBEbyBub3QgY2hhbmdlIHRoZSBmb3JtYXQgd2hpbGUgc3RyZWFtIGlz
IG9uICovCi0JCWlmICh2c2Vuc29yLT5mcmFtZSkKLQkJCXJldHVybiAtRUJVU1k7CisJLyog
RG8gbm90IGNoYW5nZSB0aGUgZm9ybWF0IHdoaWxlIHN0cmVhbSBpcyBvbiAqLworCWlmIChm
bXQtPndoaWNoID09IFY0TDJfU1VCREVWX0ZPUk1BVF9BQ1RJVkUgJiYgdnNlbnNvci0+ZnJh
bWUpCisJCXJldHVybiAtRUJVU1k7CiAKLQkJbWYgPSAmdnNlbnNvci0+bWJ1c19mb3JtYXQ7
Ci0JfSBlbHNlIHsKLQkJbWYgPSB2NGwyX3N1YmRldl9zdGF0ZV9nZXRfZm9ybWF0KHNkX3N0
YXRlLCBmbXQtPnBhZCk7Ci0JfQorCW1mID0gdjRsMl9zdWJkZXZfc3RhdGVfZ2V0X2Zvcm1h
dChzZF9zdGF0ZSwgZm10LT5wYWQpOwogCiAJLyogU2V0IHRoZSBuZXcgZm9ybWF0ICovCiAJ
dmltY19zZW5zb3JfYWRqdXN0X2ZtdCgmZm10LT5mb3JtYXQpOwpAQCAtMTg1LDcgKzE3MCw3
IEBAIHN0YXRpYyBpbnQgdmltY19zZW5zb3Jfc2V0X2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYg
KnNkLAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9wYWRfb3BzIHZpbWNfc2Vu
c29yX3BhZF9vcHMgPSB7CiAJLmVudW1fbWJ1c19jb2RlCQk9IHZpbWNfc2Vuc29yX2VudW1f
bWJ1c19jb2RlLAogCS5lbnVtX2ZyYW1lX3NpemUJPSB2aW1jX3NlbnNvcl9lbnVtX2ZyYW1l
X3NpemUsCi0JLmdldF9mbXQJCT0gdmltY19zZW5zb3JfZ2V0X2ZtdCwKKwkuZ2V0X2ZtdAkJ
PSB2NGwyX3N1YmRldl9nZXRfZm10LAogCS5zZXRfZm10CQk9IHZpbWNfc2Vuc29yX3NldF9m
bXQsCiB9OwogCkBAIC0yMDIsNyArMTg3LDcgQEAgc3RhdGljIHZvaWQgKnZpbWNfc2Vuc29y
X3Byb2Nlc3NfZnJhbWUoc3RydWN0IHZpbWNfZW50X2RldmljZSAqdmVkLAogCiAJdHBnX2Zp
bGxfcGxhbmVfYnVmZmVyKCZ2c2Vuc29yLT50cGcsIDAsIDAsIHZzZW5zb3ItPmZyYW1lKTsK
IAl0cGdfY2FsY190ZXh0X2Jhc2VwKCZ2c2Vuc29yLT50cGcsIGJhc2VwLCAwLCB2c2Vuc29y
LT5mcmFtZSk7Ci0Jc3dpdGNoICh2c2Vuc29yLT5vc2RfdmFsdWUpIHsKKwlzd2l0Y2ggKHZz
ZW5zb3ItPmh3Lm9zZF92YWx1ZSkgewogCWNhc2UgVklNQ19TRU5TT1JfT1NEX1NIT1dfQUxM
OiB7CiAJCWNvbnN0IGNoYXIgKm9yZGVyID0gdHBnX2dfY29sb3Jfb3JkZXIoJnZzZW5zb3It
PnRwZyk7CiAKQEAgLTIxNiwxNSArMjAxLDE0IEBAIHN0YXRpYyB2b2lkICp2aW1jX3NlbnNv
cl9wcm9jZXNzX2ZyYW1lKHN0cnVjdCB2aW1jX2VudF9kZXZpY2UgKnZlZCwKIAkJCSB2c2Vu
c29yLT50cGcuaHVlKTsKIAkJdHBnX2dlbl90ZXh0KCZ2c2Vuc29yLT50cGcsIGJhc2VwLCBs
aW5lKysgKiBsaW5lX2hlaWdodCwgMTYsIHN0cik7CiAJCXNucHJpbnRmKHN0ciwgc2l6ZW9m
KHN0ciksICJzZW5zb3Igc2l6ZTogJWR4JWQiLAotCQkJIHZzZW5zb3ItPm1idXNfZm9ybWF0
LndpZHRoLAotCQkJIHZzZW5zb3ItPm1idXNfZm9ybWF0LmhlaWdodCk7CisJCQkgdnNlbnNv
ci0+aHcuc2l6ZS53aWR0aCwgdnNlbnNvci0+aHcuc2l6ZS5oZWlnaHQpOwogCQl0cGdfZ2Vu
X3RleHQoJnZzZW5zb3ItPnRwZywgYmFzZXAsIGxpbmUrKyAqIGxpbmVfaGVpZ2h0LCAxNiwg
c3RyKTsKIAkJZmFsbHRocm91Z2g7CiAJfQogCWNhc2UgVklNQ19TRU5TT1JfT1NEX1NIT1df
Q09VTlRFUlM6IHsKIAkJdW5zaWduZWQgaW50IG1zOwogCi0JCW1zID0gZGl2X3U2NChrdGlt
ZV9nZXRfbnMoKSAtIHZzZW5zb3ItPnN0YXJ0X3N0cmVhbV90cywgMTAwMDAwMCk7CisJCW1z
ID0gZGl2X3U2NChrdGltZV9nZXRfbnMoKSAtIHZzZW5zb3ItPmh3LnN0YXJ0X3N0cmVhbV90
cywgMTAwMDAwMCk7CiAJCXNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIlMDJkOiUwMmQ6
JTAyZDolMDNkIiwKIAkJCSAobXMgLyAoNjAgKiA2MCAqIDEwMDApKSAlIDI0LAogCQkJICht
cyAvICg2MCAqIDEwMDApKSAlIDYwLApAQCAtMjQ3LDE1ICsyMzEsMjUgQEAgc3RhdGljIGlu
dCB2aW1jX3NlbnNvcl9zX3N0cmVhbShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBpbnQgZW5h
YmxlKQogCQkJCWNvbnRhaW5lcl9vZihzZCwgc3RydWN0IHZpbWNfc2Vuc29yX2RldmljZSwg
c2QpOwogCiAJaWYgKGVuYWJsZSkgeworCQljb25zdCBzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1l
Zm10ICpmb3JtYXQ7CisJCXN0cnVjdCB2NGwyX3N1YmRldl9zdGF0ZSAqc3RhdGU7CiAJCWNv
bnN0IHN0cnVjdCB2aW1jX3BpeF9tYXAgKnZwaXg7CiAJCXVuc2lnbmVkIGludCBmcmFtZV9z
aXplOwogCi0JCXZzZW5zb3ItPnN0YXJ0X3N0cmVhbV90cyA9IGt0aW1lX2dldF9ucygpOwor
CQlzdGF0ZSA9IHY0bDJfc3ViZGV2X2xvY2tfYW5kX2dldF9hY3RpdmVfc3RhdGUoc2QpOwor
CQlmb3JtYXQgPSB2NGwyX3N1YmRldl9zdGF0ZV9nZXRfZm9ybWF0KHN0YXRlLCAwKTsKIAot
CQkvKiBDYWxjdWxhdGUgdGhlIGZyYW1lIHNpemUgKi8KLQkJdnBpeCA9IHZpbWNfcGl4X21h
cF9ieV9jb2RlKHZzZW5zb3ItPm1idXNfZm9ybWF0LmNvZGUpOwotCQlmcmFtZV9zaXplID0g
dnNlbnNvci0+bWJ1c19mb3JtYXQud2lkdGggKiB2cGl4LT5icHAgKgotCQkJICAgICB2c2Vu
c29yLT5tYnVzX2Zvcm1hdC5oZWlnaHQ7CisJCS8qIENvbmZpZ3VyZSB0aGUgdGVzdCBwYXR0
ZXJuIGdlbmVyYXRvci4gKi8KKwkJdmltY19zZW5zb3JfdHBnX3NfZm9ybWF0KHZzZW5zb3Is
IGZvcm1hdCk7CisKKwkJLyogQ2FsY3VsYXRlIHRoZSBmcmFtZSBzaXplLiAqLworCQl2cGl4
ID0gdmltY19waXhfbWFwX2J5X2NvZGUoZm9ybWF0LT5jb2RlKTsKKwkJZnJhbWVfc2l6ZSA9
IGZvcm1hdC0+d2lkdGggKiB2cGl4LT5icHAgKiBmb3JtYXQtPmhlaWdodDsKKworCQl2c2Vu
c29yLT5ody5zaXplLndpZHRoID0gZm9ybWF0LT53aWR0aDsKKwkJdnNlbnNvci0+aHcuc2l6
ZS5oZWlnaHQgPSBmb3JtYXQtPmhlaWdodDsKKworCQl2NGwyX3N1YmRldl91bmxvY2tfc3Rh
dGUoc3RhdGUpOwogCiAJCS8qCiAJCSAqIEFsbG9jYXRlIHRoZSBmcmFtZSBidWZmZXIuIFVz
ZSB2bWFsbG9jIHRvIGJlIGFibGUgdG8KQEAgLTI2NSw5ICsyNTksNyBAQCBzdGF0aWMgaW50
IHZpbWNfc2Vuc29yX3Nfc3RyZWFtKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCBlbmFi
bGUpCiAJCWlmICghdnNlbnNvci0+ZnJhbWUpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAotCQkv
KiBjb25maWd1cmUgdGhlIHRlc3QgcGF0dGVybiBnZW5lcmF0b3IgKi8KLQkJdmltY19zZW5z
b3JfdHBnX3NfZm9ybWF0KHZzZW5zb3IpOwotCisJCXZzZW5zb3ItPmh3LnN0YXJ0X3N0cmVh
bV90cyA9IGt0aW1lX2dldF9ucygpOwogCX0gZWxzZSB7CiAKIAkJdmZyZWUodnNlbnNvci0+
ZnJhbWUpOwpAQCAtMzI1LDcgKzMxNyw3IEBAIHN0YXRpYyBpbnQgdmltY19zZW5zb3Jfc19j
dHJsKHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwpCiAJCXRwZ19zX3NhdHVyYXRpb24oJnZzZW5z
b3ItPnRwZywgY3RybC0+dmFsKTsKIAkJYnJlYWs7CiAJY2FzZSBWSU1DX0NJRF9PU0RfVEVY
VF9NT0RFOgotCQl2c2Vuc29yLT5vc2RfdmFsdWUgPSBjdHJsLT52YWw7CisJCXZzZW5zb3It
Pmh3Lm9zZF92YWx1ZSA9IGN0cmwtPnZhbDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0
dXJuIC1FSU5WQUw7CkBAIC0zNDQsNiArMzM2LDcgQEAgc3RhdGljIHZvaWQgdmltY19zZW5z
b3JfcmVsZWFzZShzdHJ1Y3QgdmltY19lbnRfZGV2aWNlICp2ZWQpCiAKIAl2NGwyX2N0cmxf
aGFuZGxlcl9mcmVlKCZ2c2Vuc29yLT5oZGwpOwogCXRwZ19mcmVlKCZ2c2Vuc29yLT50cGcp
OworCXY0bDJfc3ViZGV2X2NsZWFudXAoJnZzZW5zb3ItPnNkKTsKIAltZWRpYV9lbnRpdHlf
Y2xlYW51cCh2c2Vuc29yLT52ZWQuZW50KTsKIAlrZnJlZSh2c2Vuc29yKTsKIH0KQEAgLTQx
Nyw4ICs0MTAsNyBAQCBzdGF0aWMgc3RydWN0IHZpbWNfZW50X2RldmljZSAqdmltY19zZW5z
b3JfYWRkKHN0cnVjdCB2aW1jX2RldmljZSAqdmltYywKIAl9CiAKIAkvKiBJbml0aWFsaXpl
IHRoZSB0ZXN0IHBhdHRlcm4gZ2VuZXJhdG9yICovCi0JdHBnX2luaXQoJnZzZW5zb3ItPnRw
ZywgdnNlbnNvci0+bWJ1c19mb3JtYXQud2lkdGgsCi0JCSB2c2Vuc29yLT5tYnVzX2Zvcm1h
dC5oZWlnaHQpOworCXRwZ19pbml0KCZ2c2Vuc29yLT50cGcsIGZtdF9kZWZhdWx0LndpZHRo
LCBmbXRfZGVmYXVsdC5oZWlnaHQpOwogCXJldCA9IHRwZ19hbGxvYygmdnNlbnNvci0+dHBn
LCBWSU1DX0ZSQU1FX01BWF9XSURUSCk7CiAJaWYgKHJldCkKIAkJZ290byBlcnJfZnJlZV9o
ZGw7CkBAIC00MjgsMTggKzQyMCwxMyBAQCBzdGF0aWMgc3RydWN0IHZpbWNfZW50X2Rldmlj
ZSAqdmltY19zZW5zb3JfYWRkKHN0cnVjdCB2aW1jX2RldmljZSAqdmltYywKIAlyZXQgPSB2
aW1jX2VudF9zZF9yZWdpc3RlcigmdnNlbnNvci0+dmVkLCAmdnNlbnNvci0+c2QsIHY0bDJf
ZGV2LAogCQkJCSAgIHZjZmdfbmFtZSwKIAkJCQkgICBNRURJQV9FTlRfRl9DQU1fU0VOU09S
LCAxLCAmdnNlbnNvci0+cGFkLAotCQkJCSAgICZ2aW1jX3NlbnNvcl9vcHMpOworCQkJCSAg
ICZ2aW1jX3NlbnNvcl9pbnRlcm5hbF9vcHMsICZ2aW1jX3NlbnNvcl9vcHMpOwogCWlmIChy
ZXQpCiAJCWdvdG8gZXJyX2ZyZWVfdHBnOwogCi0JdnNlbnNvci0+c2QuaW50ZXJuYWxfb3Bz
ID0gJnZpbWNfc2Vuc29yX2ludGVybmFsX29wczsKLQogCXZzZW5zb3ItPnZlZC5wcm9jZXNz
X2ZyYW1lID0gdmltY19zZW5zb3JfcHJvY2Vzc19mcmFtZTsKIAl2c2Vuc29yLT52ZWQuZGV2
ID0gdmltYy0+bWRldi5kZXY7CiAKLQkvKiBJbml0aWFsaXplIHRoZSBmcmFtZSBmb3JtYXQg
Ki8KLQl2c2Vuc29yLT5tYnVzX2Zvcm1hdCA9IGZtdF9kZWZhdWx0OwotCiAJcmV0dXJuICZ2
c2Vuc29yLT52ZWQ7CiAKIGVycl9mcmVlX3RwZzoKQEAgLTQ1Miw3ICs0MzksNyBAQCBzdGF0
aWMgc3RydWN0IHZpbWNfZW50X2RldmljZSAqdmltY19zZW5zb3JfYWRkKHN0cnVjdCB2aW1j
X2RldmljZSAqdmltYywKIAlyZXR1cm4gRVJSX1BUUihyZXQpOwogfQogCi1zdHJ1Y3Qgdmlt
Y19lbnRfdHlwZSB2aW1jX3NlbnNvcl90eXBlID0geworY29uc3Qgc3RydWN0IHZpbWNfZW50
X3R5cGUgdmltY19zZW5zb3JfdHlwZSA9IHsKIAkuYWRkID0gdmltY19zZW5zb3JfYWRkLAog
CS5yZWxlYXNlID0gdmltY19zZW5zb3JfcmVsZWFzZQogfTsK

--------------bT82KLeQoW7zBQpU2ZM30tur--
.

From: Avadhut Naik <avadhut.naik@amd.com>
To: <x86@kernel.org>, <linux-edac@vger.kernel.org>,
	<linux-trace-kernel@vger.kernel.org>, <linux-acpi@vger.kernel.org>
CC: <linux-kernel@vger.kernel.org>, <bp@alien8.de>, <tony.luck@intel.com>,
	<rafael@kernel.org>, <tglx@linutronix.de>, <mingo@redhat.com>,
	<rostedt@goodmis.org>, <lenb@kernel.org>, <mchehab@kernel.org>,
	<james.morse@arm.com>, <airlied@gmail.com>, <yazen.ghannam@amd.com>,
	<john.allen@amd.com>, <avadnaik@amd.com>
Subject: [PATCH v2 0/4] MCE wrapper and support for new SMCA syndrome MSRs
Date: Tue, 25 Jun 2024 14:56:20 -0500
Message-ID: <20240625195624.2565741-1-avadhut.naik@amd.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258679
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-acpi,org.kernel.vger.linux-edac,org.kernel.vger.linux-trace-kernel
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

This patchset adds a new wrapper for struct mce to prevent its bloating
and export vendor specific error information. Additionally, support is
also introduced for two new "syndrome" MSRs used in newer AMD Scalable
MCA (SMCA) systems. Also, a new "FRU Text in MCA" feature that uses these
new "syndrome" MSRs has been addded.

Patch 1 adds the new wrapper structure mce_hw_err for the struct mce
while also modifying the mce_record tracepoint to use the new wrapper.

Patch 2 adds support for the new "syndrome" registers. They are read/printed
wherever the existing MCA_SYND register is used.

Patch 3 updates the function that pulls MCA information from UEFI x86
Common Platform Error Records (CPERs) to handle systems that support the
new registers.

Patch 4 adds support to the AMD MCE decoder module to detect and use the
"FRU Text in MCA" feature which leverages the new registers.

NOTE:

This set was initially submitted as part of the larger MCA Updates set.

v1: https://lore.kernel.org/linux-edac/20231118193248.1296798-1-yazen.ghannam@amd.com/
v2: https://lore.kernel.org/linux-edac/20240404151359.47970-1-yazen.ghannam@amd.com/

However, since the MCA Updates set has been split up into smaller sets,
this set, going forward, will be submitted independently.

Having said that, this set set depends on and applies cleanly on top of
the below two sets.

[1] https://lore.kernel.org/linux-edac/20240521125434.1555845-1-yazen.ghannam@amd.com/
[2] https://lore.kernel.org/linux-edac/20240523155641.2805411-1-yazen.ghannam@amd.com/

Changes in v2:
 - Drop dependencies on sets [1] and [2] above and rebase on top of
   tip/master. (Boris)

Avadhut Naik (2):
  x86/mce: Add wrapper for struct mce to export vendor specific info
  x86/mce, EDAC/mce_amd: Add support for new MCA_SYND{1,2} registers

Yazen Ghannam (2):
  x86/mce/apei: Handle variable register array size
  EDAC/mce_amd: Add support for FRU Text in MCA

 arch/x86/include/asm/mce.h              |  20 ++-
 arch/x86/kernel/cpu/mce/amd.c           |  33 ++--
 arch/x86/kernel/cpu/mce/apei.c          | 119 ++++++++++----
 arch/x86/kernel/cpu/mce/core.c          | 201 ++++++++++++++----------
 arch/x86/kernel/cpu/mce/dev-mcelog.c    |   2 +-
 arch/x86/kernel/cpu/mce/genpool.c       |  20 +--
 arch/x86/kernel/cpu/mce/inject.c        |   4 +-
 arch/x86/kernel/cpu/mce/internal.h      |   4 +-
 drivers/acpi/acpi_extlog.c              |   2 +-
 drivers/acpi/nfit/mce.c                 |   2 +-
 drivers/edac/i7core_edac.c              |   2 +-
 drivers/edac/igen6_edac.c               |   2 +-
 drivers/edac/mce_amd.c                  |  27 +++-
 drivers/edac/pnd2_edac.c                |   2 +-
 drivers/edac/sb_edac.c                  |   2 +-
 drivers/edac/skx_common.c               |   2 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c |   2 +-
 drivers/ras/amd/fmpm.c                  |   2 +-
 drivers/ras/cec.c                       |   2 +-
 include/trace/events/mce.h              |  51 +++---
 20 files changed, 316 insertions(+), 185 deletions(-)


base-commit: 4fe5c16f5e5e0bd1a71a5ac79b5870f91b6b8e81
-- 
2.34.1

.

From: Francesco Dolcini <francesco@dolcini.it>
To: Olivia Mackall <olivia@selenic.com>,
	Herbert Xu <herbert@gondor.apana.org.au>
Cc: Francesco Dolcini <francesco.dolcini@toradex.com>,
	linux-crypto@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: [PATCH v1] hwrng: Kconfig - Do not enable by default CN10K driver
Date: Tue, 25 Jun 2024 21:57:46 +0200
Message-Id: <20240625195746.48905-1-francesco@dolcini.it>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258684
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-crypto
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

From: Francesco Dolcini <francesco.dolcini@toradex.com>

Do not enable by default the CN10K HW random generator driver.

CN10K Random Number Generator is available only on some specific
Marvell SoCs, however the driver is in practice enabled by default on
all arm64 configs.

Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com>
---
as an alternative I could propose

default HW_RANDOM if ARCH_THUNDER=y

---
 drivers/char/hw_random/Kconfig | 1 -
 1 file changed, 1 deletion(-)

diff --git a/drivers/char/hw_random/Kconfig b/drivers/char/hw_random/Kconfig
index 442c40efb200..01e2e1ef82cf 100644
--- a/drivers/char/hw_random/Kconfig
+++ b/drivers/char/hw_random/Kconfig
@@ -555,7 +555,6 @@ config HW_RANDOM_ARM_SMCCC_TRNG
 config HW_RANDOM_CN10K
        tristate "Marvell CN10K Random Number Generator support"
        depends on HW_RANDOM && PCI && (ARM64 || (64BIT && COMPILE_TEST))
-       default HW_RANDOM
        help
 	 This driver provides support for the True Random Number
 	 generator available in Marvell CN10K SoCs.
-- 
2.39.2

.

From: Paul Barker <paul.barker.ct@bp.renesas.com>
To: Geert Uytterhoeven <geert+renesas@glider.be>,
	Magnus Damm <magnus.damm@gmail.com>,
	Rob Herring <robh@kernel.org>,
	Krzysztof Kozlowski <krzk+dt@kernel.org>,
	Conor Dooley <conor+dt@kernel.org>,
	Linus Walleij <linus.walleij@linaro.org>,
	Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Cc: Paul Barker <paul.barker.ct@bp.renesas.com>,
	linux-renesas-soc@vger.kernel.org,
	devicetree@vger.kernel.org,
	linux-gpio@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: [PATCH v3 0/9] Configure GbEth for RGMII on RZ/G2L family
Date: Tue, 25 Jun 2024 21:03:07 +0100
Message-Id: <20240625200316.4282-1-paul.barker.ct@bp.renesas.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258688
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-gpio,org.kernel.vger.linux-renesas-soc
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

For devices in the RZ/G2L family, we have so far relied on U-Boot
correctly configuring the Ethernet interfaces in RGMII mode with
PVDD=1.8V before the kernel is booted. Instead, the required
configuration should be described in the device tree and activated
within the pinctrl driver.

Changes v2->v3:
  * Picked up Linus W's Acked-by tags & Geert's Reviewed-by tags.
  * Renamed rzg3s oen functions to match the callback names.
  * Check pin caps before calling oen_{read,write}() so we can drop the
    caps argument to those functions.
  * Simplify arguments to rzg{2l,3s}_pin_to_oen_bit() and decode
    required variables inside this function.
  * Check for dedicated pin before calling RZG2L_PIN_ID_TO_{PORT,PIN}()
    in rzg3s_pin_to_oen_bit().

Changes v1->v2:
  * Rebased on next-20240611.
  * Changed the approach taken in the pinctrl patches to be compatible
    with changes made by Prabhakar for RZ/V2H support. I haven't picked
    up Reviewed-by tags on these patches as they've changed a lot.
  * Clarified that patch 6/9 also affects RZ/Five.
  * No major changes to the dts patches so I've picked up Geert's
    Reviewed-by tags for these.

Paul Barker (9):
  pinctrl: renesas: rzg2l: Clarify OEN read/write support
  pinctrl: renesas: rzg2l: Clean up and refactor OEN read/write
    functions
  pinctrl: renesas: rzg2l: Support output enable on RZ/G2L
  arm64: dts: renesas: rzg2l: Enable Ethernet TXC output
  arm64: dts: renesas: rzg2lc: Enable Ethernet TXC output
  arm64: dts: renesas: rzg2ul: Enable Ethernet TXC output
  arm64: dts: renesas: rzg2l: Set Ethernet PVDD to 1.8V
  arm64: dts: renesas: rzg2lc: Set Ethernet PVDD to 1.8V
  arm64: dts: renesas: rzg2ul: Set Ethernet PVDD to 1.8V

 .../boot/dts/renesas/rzg2l-smarc-som.dtsi     |  86 ++++++----
 .../boot/dts/renesas/rzg2lc-smarc-som.dtsi    |  43 +++--
 .../boot/dts/renesas/rzg2ul-smarc-som.dtsi    |  86 ++++++----
 drivers/pinctrl/renesas/pinctrl-rzg2l.c       | 155 ++++++++++++------
 4 files changed, 237 insertions(+), 133 deletions(-)

-- 
2.39.2

.

From: Pei Li <peili.dev@gmail.com>
Date: Tue, 25 Jun 2024 13:04:59 -0700
Subject: [PATCH] bcachefs: slab-use-after-free Read in
 bch2_sb_errors_from_cpu
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
Message-Id: <20240625-bug2-v1-1-73f89535d3a0@gmail.com>
To: Kent Overstreet <kent.overstreet@linux.dev>, 
 Brian Foster <bfoster@redhat.com>
Cc: linux-bcachefs@vger.kernel.org, linux-kernel@vger.kernel.org, 
 skhan@linuxfoundation.org, syzkaller-bugs@googlegroups.com, 
 syzbot+a2bc0e838efd7663f4d9@syzkaller.appspotmail.com, 
 Pei Li <peili.dev@gmail.com>
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258698
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-bcachefs
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Acquire fsck_error_counts_lock before accessing the critical section
protected by this lock.

syzbot has tested the proposed patch and the reproducer did not trigger
any issue.

Reported-by: syzbot+a2bc0e838efd7663f4d9@syzkaller.appspotmail.com
Closes: https://syzkaller.appspot.com/bug?extid=a2bc0e838efd7663f4d9
Signed-off-by: Pei Li <peili.dev@gmail.com>
---
Syzbot detected we are accessing free'd memory in
bch2_sb_errors_from_cpu().

It is caused by race condition when another task is freeing the array
protected by fsck_error_counts_lock.

This patch acquires fsck_error_counts_lock before accessing the entries
and get the current number of elements in the array.

syzbot has tested the proposed patch and the reproducer did not trigger any issue:

Tested on:

commit:         55027e68 Merge tag 'input-for-v6.10-rc5' of git://git...
git tree:       upstream
console output: https://syzkaller.appspot.com/x/log.txt?x=1790a501980000
kernel config:  https://syzkaller.appspot.com/x/.config?x=d6b9ee98d841760c
dashboard link: https://syzkaller.appspot.com/bug?extid=a2bc0e838efd7663f4d9
compiler:       gcc (Debian 12.2.0-14) 12.2.0, GNU ld (GNU Binutils for Debian) 2.40
patch:          https://syzkaller.appspot.com/x/patch.diff?x=1272faae980000

Note: testing is done by a robot and is best-effort only.
---
 fs/bcachefs/sb-errors.c | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/fs/bcachefs/sb-errors.c b/fs/bcachefs/sb-errors.c
index bda33e59e226..c1270d790e43 100644
--- a/fs/bcachefs/sb-errors.c
+++ b/fs/bcachefs/sb-errors.c
@@ -110,19 +110,25 @@ void bch2_sb_error_count(struct bch_fs *c, enum bch_sb_error_id err)
 void bch2_sb_errors_from_cpu(struct bch_fs *c)
 {
 	bch_sb_errors_cpu *src = &c->fsck_error_counts;
-	struct bch_sb_field_errors *dst =
-		bch2_sb_field_resize(&c->disk_sb, errors,
-				     bch2_sb_field_errors_u64s(src->nr));
+	struct bch_sb_field_errors *dst;
 	unsigned i;
 
+	mutex_lock(&c->fsck_error_counts_lock);
+
+	dst = bch2_sb_field_resize(&c->disk_sb, errors,
+				   bch2_sb_field_errors_u64s(src->nr));
+
 	if (!dst)
-		return;
+		goto err;
 
 	for (i = 0; i < src->nr; i++) {
 		SET_BCH_SB_ERROR_ENTRY_ID(&dst->entries[i], src->data[i].id);
 		SET_BCH_SB_ERROR_ENTRY_NR(&dst->entries[i], src->data[i].nr);
 		dst->entries[i].last_error_time = cpu_to_le64(src->data[i].last_error_time);
 	}
+
+err:
+	mutex_unlock(&c->fsck_error_counts_lock);
 }
 
 static int bch2_sb_errors_to_cpu(struct bch_fs *c)

---
base-commit: 66cc544fd75c70b5ee74df87ab99acc45b835e69
change-id: 20240625-bug2-94405201c4c8

Best regards,
-- 
Pei Li <peili.dev@gmail.com>

.

From: Frank Li <Frank.Li@nxp.com>
To: Thomas Gleixner <tglx@linutronix.de>,
	Rob Herring <robh@kernel.org>,
	Krzysztof Kozlowski <krzk+dt@kernel.org>,
	Conor Dooley <conor+dt@kernel.org>,
	linux-kernel@vger.kernel.org (open list:IRQCHIP DRIVERS),
	devicetree@vger.kernel.org (open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS)
Cc: imx@lists.linux.dev
Subject: [PATCH 1/1] dt-bindings: interrupt-controller: convert fsl,ls-scfg-msi to yaml
Date: Tue, 25 Jun 2024 16:10:27 -0400
Message-Id: <20240625201028.3923845-1-Frank.Li@nxp.com>
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258701
Newsgroups: org.kernel.vger.linux-kernel,dev.linux.lists.imx,org.kernel.vger.linux-devicetree
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Convert device tree binding fsl,ls-scfg-msi to yaml format.

Additional changes:
- Include gic.h and use predefined macro in example.
- Remove label in example.
- Change node name to interrupt-controller in example.
- Fix error in example.
- ls1046a allow 4 irqs, other platform only 1 irq.

Signed-off-by: Frank Li <Frank.Li@nxp.com>
---
 .../interrupt-controller/fsl,ls-msi.yaml      | 72 +++++++++++++++++++
 .../interrupt-controller/fsl,ls-scfg-msi.txt  | 30 --------
 2 files changed, 72 insertions(+), 30 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/interrupt-controller/fsl,ls-msi.yaml
 delete mode 100644 Documentation/devicetree/bindings/interrupt-controller/fsl,ls-scfg-msi.txt

diff --git a/Documentation/devicetree/bindings/interrupt-controller/fsl,ls-msi.yaml b/Documentation/devicetree/bindings/interrupt-controller/fsl,ls-msi.yaml
new file mode 100644
index 0000000000000..d11188826dce0
--- /dev/null
+++ b/Documentation/devicetree/bindings/interrupt-controller/fsl,ls-msi.yaml
@@ -0,0 +1,72 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/interrupt-controller/fsl,ls-msi.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Freescale Layerscape SCFG PCIe MSI controller
+
+description: |
+  This interrupt controller hardware is a second level interrupt controller that
+  is hooked to a parent interrupt controller: e.g: ARM GIC for ARM-based
+  platforms. If interrupt-parent is not provided, the default parent interrupt
+  controller will be used.
+
+  Each PCIe node needs to have property msi-parent that points to
+  MSI controller node
+
+maintainers:
+  - Frank Li <Frank.Li@nxp.com>
+
+properties:
+  compatible:
+    enum:
+      - fsl,ls1021a-msi
+      - fsl,ls1043a-msi
+      - fsl,ls1046a-msi
+      - fsl,ls1043a-v1.1-msi
+      - fsl,ls1012a-msi
+
+  reg:
+    maxItems: 1
+
+  msi-controller: true
+
+  interrupts:
+    minItems: 1
+    maxItems: 4
+
+required:
+  - compatible
+  - reg
+  - msi-controller
+  - interrupts
+
+additionalProperties: false
+
+allOf:
+  - if:
+      properties:
+        compatible:
+          contains:
+            enum:
+              - fsl,ls1046a-msi
+    then:
+      properties:
+        interrupts:
+          minItems: 4
+    else:
+      properties:
+        interrupts:
+          maxItems: 1
+
+examples:
+  - |
+    #include <dt-bindings/interrupt-controller/arm-gic.h>
+
+    interrupt-controller@1571000 {
+        compatible = "fsl,ls1043a-msi";
+        reg = <0x1571000 0x8>;
+        msi-controller;
+        interrupts = <GIC_SPI 116 IRQ_TYPE_LEVEL_HIGH>;
+    };
diff --git a/Documentation/devicetree/bindings/interrupt-controller/fsl,ls-scfg-msi.txt b/Documentation/devicetree/bindings/interrupt-controller/fsl,ls-scfg-msi.txt
deleted file mode 100644
index 454ce04d67874..0000000000000
--- a/Documentation/devicetree/bindings/interrupt-controller/fsl,ls-scfg-msi.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-* Freescale Layerscape SCFG PCIe MSI controller
-
-Required properties:
-
-- compatible: should be "fsl,<soc-name>-msi" to identify
-	      Layerscape PCIe MSI controller block such as:
-              "fsl,ls1021a-msi"
-              "fsl,ls1043a-msi"
-              "fsl,ls1046a-msi"
-              "fsl,ls1043a-v1.1-msi"
-              "fsl,ls1012a-msi"
-- msi-controller: indicates that this is a PCIe MSI controller node
-- reg: physical base address of the controller and length of memory mapped.
-- interrupts: an interrupt to the parent interrupt controller.
-
-This interrupt controller hardware is a second level interrupt controller that
-is hooked to a parent interrupt controller: e.g: ARM GIC for ARM-based
-platforms. If interrupt-parent is not provided, the default parent interrupt
-controller will be used.
-Each PCIe node needs to have property msi-parent that points to
-MSI controller node
-
-Examples:
-
-	msi1: msi-controller@1571000 {
-		compatible = "fsl,ls1043a-msi";
-		reg = <0x0 0x1571000 0x0 0x8>,
-		msi-controller;
-		interrupts = <0 116 0x4>;
-	};
-- 
2.34.1

.

From: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Date: Tue, 25 Jun 2024 23:16:18 +0300
Subject: [PATCH] arm64: dts: qcom: pm8916: add temp-alarm thermal zone
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
Message-Id: <20240625-pm8916-tz-v1-1-a4c1f61e92dd@linaro.org>
To: Bjorn Andersson <andersson@kernel.org>, 
 Konrad Dybcio <konrad.dybcio@linaro.org>, Rob Herring <robh@kernel.org>, 
 Krzysztof Kozlowski <krzk+dt@kernel.org>, 
 Conor Dooley <conor+dt@kernel.org>
Cc: linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org, 
 linux-kernel@vger.kernel.org
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258703
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-arm-msm,org.kernel.vger.linux-devicetree
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Define the themal zones using the temperature values in stage1 for this
platform so that the spmi-temp-alarm driver becomes active.

Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
 arch/arm64/boot/dts/qcom/pm8916.dtsi | 31 ++++++++++++++++++++++++++++++-
 1 file changed, 30 insertions(+), 1 deletion(-)

diff --git a/arch/arm64/boot/dts/qcom/pm8916.dtsi b/arch/arm64/boot/dts/qcom/pm8916.dtsi
index 4b2e8fb47d2d..2def48f2d101 100644
--- a/arch/arm64/boot/dts/qcom/pm8916.dtsi
+++ b/arch/arm64/boot/dts/qcom/pm8916.dtsi
@@ -4,8 +4,37 @@
 #include <dt-bindings/interrupt-controller/irq.h>
 #include <dt-bindings/spmi/spmi.h>
 
-&spmi_bus {
+/ {
+	thermal-zones {
+		pm8150-thermal {
+			polling-delay-passive = <100>;
+
+			thermal-sensors = <&pm8916_temp>;
+
+			trips {
+				trip0 {
+					temperature = <105000>;
+					hysteresis = <0>;
+					type = "passive";
+				};
+
+				trip1 {
+					temperature = <125000>;
+					hysteresis = <0>;
+					type = "hot";
+				};
+
+				trip2 {
+					temperature = <145000>;
+					hysteresis = <0>;
+					type = "critical";
+				};
+			};
+		};
+	};
+};
 
+&spmi_bus {
 	pm8916_0: pmic@0 {
 		compatible = "qcom,pm8916", "qcom,spmi-pmic";
 		reg = <0x0 SPMI_USID>;

---
base-commit: 62c97045b8f720c2eac807a5f38e26c9ed512371
change-id: 20240625-pm8916-tz-c8dd606940dc

Best regards,
-- 
Dmitry Baryshkov <dmitry.baryshkov@linaro.org>

.

From: =?utf-8?q?N=C3=ADcolas_F=2E_R=2E_A=2E_Prado?= <nfraprado@collabora.com>
Date: Tue, 25 Jun 2024 16:23:32 -0400
Subject: [PATCH] ASoC: mediatek: Allow setting readable driver names
 through kconfig
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
Message-Id: <20240625-mt8195-driver-name-too-long-v1-1-8573b43a9868@collabora.com>
To: Liam Girdwood <lgirdwood@gmail.com>, Mark Brown <broonie@kernel.org>, 
 Jaroslav Kysela <perex@perex.cz>, Takashi Iwai <tiwai@suse.com>, 
 Matthias Brugger <matthias.bgg@gmail.com>, 
 AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Cc: kernel@collabora.com, linux-sound@vger.kernel.org, 
 linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, 
 linux-mediatek@lists.infradead.org, 
 =?utf-8?q?N=C3=ADcolas_F=2E_R=2E_A=2E_Prado?= <nfraprado@collabora.com>
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258709
Newsgroups: org.kernel.vger.linux-kernel,org.infradead.lists.linux-arm-kernel,org.infradead.lists.linux-mediatek,org.kernel.vger.linux-sound
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Commit c8d18e440225 ("ASoC: core: clarify the driver name
initialization") introduced an error message when driver names are
automatically generated and result in truncated names.

For example, this error message is printed on mt8195-cherry-tomato-rev2:

  mt8195_mt6359 mt8195-sound: ASoC: driver name too long 'sof-mt8195_r1019_5682' -> 'sof-mt8195_r101'

Since that truncated driver name is already used by userspace (eg UCM),
it can't be unconditionally updated.

As suggested by Jaroslav, update the driver name but hide it behind a
kernel config option, which Linux distributions can enable once the
corresponding support in userspace audio configuration software lands.
This ensures that audio doesn't regress, while still allowing the error
to be fixed.

Suggested-by: Jaroslav Kysela <perex@perex.cz>
Link: https://lore.kernel.org/all/8d0ccf4a-a6d9-f914-70a9-c2ad55af3a04@perex.cz
Signed-off-by: NÃ­colas F. R. A. Prado <nfraprado@collabora.com>
---
 sound/soc/mediatek/Kconfig                         | 10 ++++++++++
 sound/soc/mediatek/mt8173/mt8173-rt5650-rt5514.c   |  3 +++
 sound/soc/mediatek/mt8173/mt8173-rt5650-rt5676.c   |  3 +++
 sound/soc/mediatek/mt8183/mt8183-da7219-max98357.c | 13 ++++++++++++-
 sound/soc/mediatek/mt8186/mt8186-mt6366.c          | 16 +++++++++++++++-
 sound/soc/mediatek/mt8188/mt8188-mt6359.c          |  7 ++++++-
 sound/soc/mediatek/mt8195/mt8195-mt6359.c          |  7 ++++++-
 7 files changed, 55 insertions(+), 4 deletions(-)

diff --git a/sound/soc/mediatek/Kconfig b/sound/soc/mediatek/Kconfig
index 5a8476e1ecca..396d558bc75b 100644
--- a/sound/soc/mediatek/Kconfig
+++ b/sound/soc/mediatek/Kconfig
@@ -281,6 +281,16 @@ config SND_SOC_MT8195
 	  Select Y if you have such device.
 	  If unsure select "N".
 
+config SND_SOC_MTK_READABLE_DRIVER_NAME
+	bool "Readable driver name for MediaTek sound cards"
+	help
+	  This explicitly sets the driver name for the MediaTek sound cards to
+	  prevent it from potentially being truncated and harder to read. The
+	  new names require support in the audio configuration userspace
+	  utilities (like UCM), so only select this once they have been updated
+	  to support the new names to ensure working audio.
+	  If unsure select "N".
+
 config SND_SOC_MT8195_MT6359
 	tristate "ASoC Audio driver for MT8195 with MT6359 and I2S codecs"
 	depends on I2C && GPIOLIB
diff --git a/sound/soc/mediatek/mt8173/mt8173-rt5650-rt5514.c b/sound/soc/mediatek/mt8173/mt8173-rt5650-rt5514.c
index 4ed06c269065..9155bb29c0a2 100644
--- a/sound/soc/mediatek/mt8173/mt8173-rt5650-rt5514.c
+++ b/sound/soc/mediatek/mt8173/mt8173-rt5650-rt5514.c
@@ -173,6 +173,9 @@ static struct snd_soc_codec_conf mt8173_rt5650_rt5514_codec_conf[] = {
 
 static struct snd_soc_card mt8173_rt5650_rt5514_card = {
 	.name = "mtk-rt5650-rt5514",
+#if IS_ENABLED(CONFIG_SND_SOC_MTK_READABLE_DRIVER_NAME)
+	.driver_name = "mtk-rt5514",
+#endif
 	.owner = THIS_MODULE,
 	.dai_link = mt8173_rt5650_rt5514_dais,
 	.num_links = ARRAY_SIZE(mt8173_rt5650_rt5514_dais),
diff --git a/sound/soc/mediatek/mt8173/mt8173-rt5650-rt5676.c b/sound/soc/mediatek/mt8173/mt8173-rt5650-rt5676.c
index 763067c21153..212b36a0559f 100644
--- a/sound/soc/mediatek/mt8173/mt8173-rt5650-rt5676.c
+++ b/sound/soc/mediatek/mt8173/mt8173-rt5650-rt5676.c
@@ -229,6 +229,9 @@ static struct snd_soc_codec_conf mt8173_rt5650_rt5676_codec_conf[] = {
 
 static struct snd_soc_card mt8173_rt5650_rt5676_card = {
 	.name = "mtk-rt5650-rt5676",
+#if IS_ENABLED(CONFIG_SND_SOC_MTK_READABLE_DRIVER_NAME)
+	.driver_name = "mtk-rt5676",
+#endif
 	.owner = THIS_MODULE,
 	.dai_link = mt8173_rt5650_rt5676_dais,
 	.num_links = ARRAY_SIZE(mt8173_rt5650_rt5676_dais),
diff --git a/sound/soc/mediatek/mt8183/mt8183-da7219-max98357.c b/sound/soc/mediatek/mt8183/mt8183-da7219-max98357.c
index f848e14b091a..2664e3d14fec 100644
--- a/sound/soc/mediatek/mt8183/mt8183-da7219-max98357.c
+++ b/sound/soc/mediatek/mt8183/mt8183-da7219-max98357.c
@@ -19,6 +19,8 @@
 #include "../common/mtk-afe-platform-driver.h"
 #include "mt8183-afe-common.h"
 
+#define DRIVER_NAME "mt8183_da7219"
+
 #define DA7219_CODEC_DAI "da7219-hifi"
 #define DA7219_DEV_NAME "da7219.5-001a"
 #define RT1015_CODEC_DAI "rt1015-aif"
@@ -649,6 +651,9 @@ static const struct snd_soc_dapm_route mt8183_da7219_max98357_dapm_routes[] = {
 
 static struct snd_soc_card mt8183_da7219_max98357_card = {
 	.name = "mt8183_da7219_max98357",
+#if IS_ENABLED(CONFIG_SND_SOC_MTK_READABLE_DRIVER_NAME)
+	.driver_name = DRIVER_NAME,
+#endif
 	.owner = THIS_MODULE,
 	.controls = mt8183_da7219_max98357_snd_controls,
 	.num_controls = ARRAY_SIZE(mt8183_da7219_max98357_snd_controls),
@@ -706,6 +711,9 @@ static const struct snd_soc_dapm_route mt8183_da7219_rt1015_dapm_routes[] = {
 
 static struct snd_soc_card mt8183_da7219_rt1015_card = {
 	.name = "mt8183_da7219_rt1015",
+#if IS_ENABLED(CONFIG_SND_SOC_MTK_READABLE_DRIVER_NAME)
+	.driver_name = DRIVER_NAME,
+#endif
 	.owner = THIS_MODULE,
 	.controls = mt8183_da7219_rt1015_snd_controls,
 	.num_controls = ARRAY_SIZE(mt8183_da7219_rt1015_snd_controls),
@@ -723,6 +731,9 @@ static struct snd_soc_card mt8183_da7219_rt1015_card = {
 
 static struct snd_soc_card mt8183_da7219_rt1015p_card = {
 	.name = "mt8183_da7219_rt1015p",
+#if IS_ENABLED(CONFIG_SND_SOC_MTK_READABLE_DRIVER_NAME)
+	.driver_name = DRIVER_NAME,
+#endif
 	.owner = THIS_MODULE,
 	.controls = mt8183_da7219_max98357_snd_controls,
 	.num_controls = ARRAY_SIZE(mt8183_da7219_max98357_snd_controls),
@@ -875,7 +886,7 @@ MODULE_DEVICE_TABLE(of, mt8183_da7219_max98357_dt_match);
 
 static struct platform_driver mt8183_da7219_max98357_driver = {
 	.driver = {
-		.name = "mt8183_da7219",
+		.name = DRIVER_NAME,
 #ifdef CONFIG_OF
 		.of_match_table = mt8183_da7219_max98357_dt_match,
 #endif
diff --git a/sound/soc/mediatek/mt8186/mt8186-mt6366.c b/sound/soc/mediatek/mt8186/mt8186-mt6366.c
index 771d53611c2a..29f17dfb8f1b 100644
--- a/sound/soc/mediatek/mt8186/mt8186-mt6366.c
+++ b/sound/soc/mediatek/mt8186/mt8186-mt6366.c
@@ -31,6 +31,8 @@
 #include "mt8186-afe-gpio.h"
 #include "mt8186-mt6366-common.h"
 
+#define DRIVER_NAME "mt8186_mt6366"
+
 #define RT1019_CODEC_DAI	"HiFi"
 #define RT1019_DEV0_NAME	"rt1019p"
 
@@ -1119,6 +1121,9 @@ mt8186_mt6366_rt1019_rt5682s_controls[] = {
 
 static struct snd_soc_card mt8186_mt6366_da7219_max98357_soc_card = {
 	.name = "mt8186_da7219_max98357",
+#if IS_ENABLED(CONFIG_SND_SOC_MTK_READABLE_DRIVER_NAME)
+	.driver_name = DRIVER_NAME,
+#endif
 	.owner = THIS_MODULE,
 	.dai_link = mt8186_mt6366_rt1019_rt5682s_dai_links,
 	.num_links = ARRAY_SIZE(mt8186_mt6366_rt1019_rt5682s_dai_links),
@@ -1134,6 +1139,9 @@ static struct snd_soc_card mt8186_mt6366_da7219_max98357_soc_card = {
 
 static struct snd_soc_card mt8186_mt6366_rt1019_rt5682s_soc_card = {
 	.name = "mt8186_rt1019_rt5682s",
+#if IS_ENABLED(CONFIG_SND_SOC_MTK_READABLE_DRIVER_NAME)
+	.driver_name = DRIVER_NAME,
+#endif
 	.owner = THIS_MODULE,
 	.dai_link = mt8186_mt6366_rt1019_rt5682s_dai_links,
 	.num_links = ARRAY_SIZE(mt8186_mt6366_rt1019_rt5682s_dai_links),
@@ -1149,6 +1157,9 @@ static struct snd_soc_card mt8186_mt6366_rt1019_rt5682s_soc_card = {
 
 static struct snd_soc_card mt8186_mt6366_rt5682s_max98360_soc_card = {
 	.name = "mt8186_rt5682s_max98360",
+#if IS_ENABLED(CONFIG_SND_SOC_MTK_READABLE_DRIVER_NAME)
+	.driver_name = DRIVER_NAME,
+#endif
 	.owner = THIS_MODULE,
 	.dai_link = mt8186_mt6366_rt1019_rt5682s_dai_links,
 	.num_links = ARRAY_SIZE(mt8186_mt6366_rt1019_rt5682s_dai_links),
@@ -1164,6 +1175,9 @@ static struct snd_soc_card mt8186_mt6366_rt5682s_max98360_soc_card = {
 
 static struct snd_soc_card mt8186_mt6366_rt5650_soc_card = {
 	.name = "mt8186_rt5650",
+#if IS_ENABLED(CONFIG_SND_SOC_MTK_READABLE_DRIVER_NAME)
+	.driver_name = DRIVER_NAME,
+#endif
 	.owner = THIS_MODULE,
 	.dai_link = mt8186_mt6366_rt1019_rt5682s_dai_links,
 	.num_links = ARRAY_SIZE(mt8186_mt6366_rt1019_rt5682s_dai_links),
@@ -1380,7 +1394,7 @@ MODULE_DEVICE_TABLE(of, mt8186_mt6366_dt_match);
 
 static struct platform_driver mt8186_mt6366_driver = {
 	.driver = {
-		.name = "mt8186_mt6366",
+		.name = DRIVER_NAME,
 #if IS_ENABLED(CONFIG_OF)
 		.of_match_table = mt8186_mt6366_dt_match,
 #endif
diff --git a/sound/soc/mediatek/mt8188/mt8188-mt6359.c b/sound/soc/mediatek/mt8188/mt8188-mt6359.c
index eba6f4c445ff..2640981a2463 100644
--- a/sound/soc/mediatek/mt8188/mt8188-mt6359.c
+++ b/sound/soc/mediatek/mt8188/mt8188-mt6359.c
@@ -23,6 +23,8 @@
 #include "../common/mtk-dsp-sof-common.h"
 #include "../common/mtk-soc-card.h"
 
+#define DRIVER_NAME "mt8188_mt6359"
+
 #define CKSYS_AUD_TOP_CFG	0x032c
  #define RG_TEST_ON		BIT(0)
  #define RG_TEST_TYPE		BIT(2)
@@ -1240,6 +1242,9 @@ static void mt8188_fixup_controls(struct snd_soc_card *card)
 }
 
 static struct snd_soc_card mt8188_mt6359_soc_card = {
+#if IS_ENABLED(CONFIG_SND_SOC_MTK_READABLE_DRIVER_NAME)
+	.driver_name = DRIVER_NAME,
+#endif
 	.owner = THIS_MODULE,
 	.dai_link = mt8188_mt6359_dai_links,
 	.num_links = ARRAY_SIZE(mt8188_mt6359_dai_links),
@@ -1392,7 +1397,7 @@ MODULE_DEVICE_TABLE(of, mt8188_mt6359_dt_match);
 
 static struct platform_driver mt8188_mt6359_driver = {
 	.driver = {
-		.name = "mt8188_mt6359",
+		.name = DRIVER_NAME,
 		.of_match_table = mt8188_mt6359_dt_match,
 		.pm = &snd_soc_pm_ops,
 	},
diff --git a/sound/soc/mediatek/mt8195/mt8195-mt6359.c b/sound/soc/mediatek/mt8195/mt8195-mt6359.c
index ca8751190520..da406cbb40f6 100644
--- a/sound/soc/mediatek/mt8195/mt8195-mt6359.c
+++ b/sound/soc/mediatek/mt8195/mt8195-mt6359.c
@@ -26,6 +26,8 @@
 #include "mt8195-afe-clk.h"
 #include "mt8195-afe-common.h"
 
+#define DRIVER_NAME "mt8195_mt6359"
+
 #define RT1011_SPEAKER_AMP_PRESENT		BIT(0)
 #define RT1019_SPEAKER_AMP_PRESENT		BIT(1)
 #define MAX98390_SPEAKER_AMP_PRESENT		BIT(2)
@@ -1231,6 +1233,9 @@ static struct snd_soc_codec_conf max98390_codec_conf[] = {
 };
 
 static struct snd_soc_card mt8195_mt6359_soc_card = {
+#if IS_ENABLED(CONFIG_SND_SOC_MTK_READABLE_DRIVER_NAME)
+	.driver_name = DRIVER_NAME,
+#endif
 	.owner = THIS_MODULE,
 	.dai_link = mt8195_mt6359_dai_links,
 	.num_links = ARRAY_SIZE(mt8195_mt6359_dai_links),
@@ -1530,7 +1535,7 @@ MODULE_DEVICE_TABLE(of, mt8195_mt6359_dt_match);
 
 static struct platform_driver mt8195_mt6359_driver = {
 	.driver = {
-		.name = "mt8195_mt6359",
+		.name = DRIVER_NAME,
 		.of_match_table = mt8195_mt6359_dt_match,
 		.pm = &snd_soc_pm_ops,
 	},

---
base-commit: 0fc4bfab2cd45f9acb86c4f04b5191e114e901ed
change-id: 20240625-mt8195-driver-name-too-long-095a030a2e86

Best regards,
-- 
NÃ­colas F. R. A. Prado <nfraprado@collabora.com>

.

From: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Date: Tue, 25 Jun 2024 23:24:58 +0300
Subject: [PATCH RFC v3] drm/msm/dpu: Configure DP INTF/PHY selector
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
Message-Id: <20240625-dp-phy-sel-v3-1-c77c7066c454@linaro.org>
To: Rob Clark <robdclark@gmail.com>, 
 Abhinav Kumar <quic_abhinavk@quicinc.com>, Sean Paul <sean@poorly.run>, 
 Marijn Suijten <marijn.suijten@somainline.org>, 
 David Airlie <airlied@gmail.com>, Daniel Vetter <daniel@ffwll.ch>
Cc: Bjorn Andersson <andersson@kernel.org>, linux-arm-msm@vger.kernel.org, 
 dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, 
 linux-kernel@vger.kernel.org
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258710
Newsgroups: org.kernel.vger.linux-kernel,org.freedesktop.lists.dri-devel,org.kernel.vger.linux-arm-msm
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

From: Bjorn Andersson <andersson@kernel.org>

Some platforms provides a mechanism for configuring the mapping between
(one or two) DisplayPort intfs and their PHYs.

In particular SC8180X requires this to be configured, since on this
platform there are fewer controllers than PHYs.

The change implements the logic for optionally configuring which PHY
each of the DP INTFs should be connected to and marks the SC8180X DPU to
program 2 entries.

For now the request is simply to program the mapping 1:1, any support
for alternative mappings is left until the use case arrise.

Note that e.g. msm-4.14 unconditionally maps INTF 0 to PHY 0 on all
platforms, so perhaps this is needed in order to get DisplayPort working
on some other platforms as well.

Signed-off-by: Bjorn Andersson <andersson@kernel.org>
Co-developed-by: Bjorn Andersson <andersson@kernel.org>
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
Changes in v3:
- Expanded the commit message and in-code comment based on feedback from
  Abhinav
- Fixed field masks for the affected register (Abhinav)
- Link to v2: https://lore.kernel.org/r/20240613-dp-phy-sel-v2-1-99af348c9bae@linaro.org

Changes in v2:
- Removed entry from the catalog.
- Reworked the interface of dpu_hw_dp_phy_intf_sel(). Pass two entries
  for the PHYs instead of three entries.
- It seems the register isn't present on sdm845, enabled the callback
  only for DPU >= 5.x
- Added a comment regarding the data being platform-specific.
- Link to v1: https://lore.kernel.org/r/20230612221047.1886709-1-quic_bjorande@quicinc.com
---
 drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c | 39 +++++++++++++++++++++++++++---
 drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.h | 18 ++++++++++++--
 drivers/gpu/drm/msm/disp/dpu1/dpu_hwio.h   |  7 ++++++
 drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c    | 12 ++++++++-
 4 files changed, 70 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
index 05e48cf4ec1d..a11fdbefc8d2 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
@@ -231,8 +231,38 @@ static void dpu_hw_intf_audio_select(struct dpu_hw_mdp *mdp)
 	DPU_REG_WRITE(c, HDMI_DP_CORE_SELECT, 0x1);
 }
 
+static void dpu_hw_dp_phy_intf_sel(struct dpu_hw_mdp *mdp,
+				   enum dpu_dp_phy_sel phys[2])
+{
+	struct dpu_hw_blk_reg_map *c = &mdp->hw;
+	unsigned int intf;
+	u32 sel = 0;
+
+	sel |= FIELD_PREP(MDP_DP_PHY_INTF_SEL_INTF0, phys[0]);
+	sel |= FIELD_PREP(MDP_DP_PHY_INTF_SEL_INTF1, phys[1]);
+
+	for (intf = 0; intf < 2; intf++) {
+		switch (phys[intf]) {
+		case DPU_DP_PHY_0:
+			sel |= FIELD_PREP(MDP_DP_PHY_INTF_SEL_PHY0, intf + 1);
+			break;
+		case DPU_DP_PHY_1:
+			sel |= FIELD_PREP(MDP_DP_PHY_INTF_SEL_PHY1, intf + 1);
+			break;
+		case DPU_DP_PHY_2:
+			sel |= FIELD_PREP(MDP_DP_PHY_INTF_SEL_PHY2, intf + 1);
+			break;
+		default:
+			/* ignore */
+			break;
+		}
+	}
+
+	DPU_REG_WRITE(c, MDP_DP_PHY_INTF_SEL, sel);
+}
+
 static void _setup_mdp_ops(struct dpu_hw_mdp_ops *ops,
-		unsigned long cap)
+		unsigned long cap, const struct dpu_mdss_version *mdss_rev)
 {
 	ops->setup_split_pipe = dpu_hw_setup_split_pipe;
 	ops->setup_clk_force_ctrl = dpu_hw_setup_clk_force_ctrl;
@@ -245,6 +275,9 @@ static void _setup_mdp_ops(struct dpu_hw_mdp_ops *ops,
 
 	ops->get_safe_status = dpu_hw_get_safe_status;
 
+	if (mdss_rev->core_major_ver >= 5)
+		ops->dp_phy_intf_sel = dpu_hw_dp_phy_intf_sel;
+
 	if (cap & BIT(DPU_MDP_AUDIO_SELECT))
 		ops->intf_audio_select = dpu_hw_intf_audio_select;
 }
@@ -252,7 +285,7 @@ static void _setup_mdp_ops(struct dpu_hw_mdp_ops *ops,
 struct dpu_hw_mdp *dpu_hw_mdptop_init(struct drm_device *dev,
 				      const struct dpu_mdp_cfg *cfg,
 				      void __iomem *addr,
-				      const struct dpu_mdss_cfg *m)
+				      const struct dpu_mdss_version *mdss_rev)
 {
 	struct dpu_hw_mdp *mdp;
 
@@ -270,7 +303,7 @@ struct dpu_hw_mdp *dpu_hw_mdptop_init(struct drm_device *dev,
 	 * Assign ops
 	 */
 	mdp->caps = cfg;
-	_setup_mdp_ops(&mdp->ops, mdp->caps->features);
+	_setup_mdp_ops(&mdp->ops, mdp->caps->features, mdss_rev);
 
 	return mdp;
 }
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.h
index 6f3dc98087df..3a17e63b851c 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.h
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.h
@@ -67,6 +67,13 @@ struct dpu_vsync_source_cfg {
 	u32 vsync_source;
 };
 
+enum dpu_dp_phy_sel {
+	DPU_DP_PHY_NONE,
+	DPU_DP_PHY_0,
+	DPU_DP_PHY_1,
+	DPU_DP_PHY_2,
+};
+
 /**
  * struct dpu_hw_mdp_ops - interface to the MDP TOP Hw driver functions
  * Assumption is these functions will be called after clocks are enabled.
@@ -125,6 +132,13 @@ struct dpu_hw_mdp_ops {
 	void (*get_safe_status)(struct dpu_hw_mdp *mdp,
 			struct dpu_danger_safe_status *status);
 
+	/**
+	 * dp_phy_intf_sel - configure intf to phy mapping
+	 * @mdp: mdp top context driver
+	 * @phys: list of phys the DP interfaces should be connected to. 0 disables the INTF.
+	 */
+	void (*dp_phy_intf_sel)(struct dpu_hw_mdp *mdp, enum dpu_dp_phy_sel phys[2]);
+
 	/**
 	 * intf_audio_select - select the external interface for audio
 	 * @mdp: mdp top context driver
@@ -148,12 +162,12 @@ struct dpu_hw_mdp {
  * @dev:  Corresponding device for devres management
  * @cfg:  MDP TOP configuration from catalog
  * @addr: Mapped register io address of MDP
- * @m:    Pointer to mdss catalog data
+ * @mdss_rev: dpu core's major and minor versions
  */
 struct dpu_hw_mdp *dpu_hw_mdptop_init(struct drm_device *dev,
 				      const struct dpu_mdp_cfg *cfg,
 				      void __iomem *addr,
-				      const struct dpu_mdss_cfg *m);
+				      const struct dpu_mdss_version *mdss_rev);
 
 void dpu_hw_mdp_destroy(struct dpu_hw_mdp *mdp);
 
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hwio.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_hwio.h
index 5acd5683d25a..054fe097ebf8 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hwio.h
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hwio.h
@@ -60,6 +60,13 @@
 #define MDP_WD_TIMER_4_LOAD_VALUE       0x448
 #define DCE_SEL                         0x450
 
+#define MDP_DP_PHY_INTF_SEL             0x460
+#define MDP_DP_PHY_INTF_SEL_INTF0		GENMASK(2, 0)
+#define MDP_DP_PHY_INTF_SEL_INTF1		GENMASK(5, 3)
+#define MDP_DP_PHY_INTF_SEL_PHY0		GENMASK(8, 6)
+#define MDP_DP_PHY_INTF_SEL_PHY1		GENMASK(11, 9)
+#define MDP_DP_PHY_INTF_SEL_PHY2		GENMASK(14, 12)
+
 #define MDP_PERIPH_TOP0			MDP_WD_TIMER_0_CTL
 #define MDP_PERIPH_TOP0_END		CLK_CTRL3
 
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
index 1955848b1b78..cc350deaa140 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
@@ -1102,7 +1102,7 @@ static int dpu_kms_hw_init(struct msm_kms *kms)
 	dpu_kms->hw_mdp = dpu_hw_mdptop_init(dev,
 					     dpu_kms->catalog->mdp,
 					     dpu_kms->mmio,
-					     dpu_kms->catalog);
+					     dpu_kms->catalog->mdss_ver);
 	if (IS_ERR(dpu_kms->hw_mdp)) {
 		rc = PTR_ERR(dpu_kms->hw_mdp);
 		DPU_ERROR("failed to get hw_mdp: %d\n", rc);
@@ -1137,6 +1137,16 @@ static int dpu_kms_hw_init(struct msm_kms *kms)
 		goto err_pm_put;
 	}
 
+	/*
+	 * We need to program DP <-> PHY relationship only for SC8180X since it
+	 * has fewer DP controllers than DP PHYs.
+	 * If any other platform requires the same kind of programming, or if
+	 * the INTF <->DP relationship isn't static anymore, this needs to be
+	 * configured through the DT.
+	 */
+	if (of_device_is_compatible(dpu_kms->pdev->dev.of_node, "qcom,sc8180x-dpu"))
+		dpu_kms->hw_mdp->ops.dp_phy_intf_sel(dpu_kms->hw_mdp, (unsigned int[]){ 1, 2, });
+
 	dpu_kms->hw_intr = dpu_hw_intr_init(dev, dpu_kms->mmio, dpu_kms->catalog);
 	if (IS_ERR(dpu_kms->hw_intr)) {
 		rc = PTR_ERR(dpu_kms->hw_intr);

---
base-commit: 62c97045b8f720c2eac807a5f38e26c9ed512371
change-id: 20240613-dp-phy-sel-1b06dc48ed73

Best regards,
-- 
Dmitry Baryshkov <dmitry.baryshkov@linaro.org>

.

Date: Wed, 26 Jun 2024 04:37:00 +0800
From: kernel test robot <lkp@intel.com>
To: Linus Walleij <linus.walleij@linaro.org>
Cc: llvm@lists.linux.dev, oe-kbuild-all@lists.linux.dev,
	linux-kernel@vger.kernel.org,
	"Russell King (Oracle)" <rmk+kernel@armlinux.org.uk>,
	Sami Tolvanen <samitolvanen@google.com>
Subject: arch/arm/mm/proc.c:82:6: error: conflicting types for
 'cpu_arm920_reset'
Message-ID: <202406260432.6WGV2jCk-lkp@intel.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258715
Newsgroups: org.kernel.vger.linux-kernel,dev.linux.lists.llvm,dev.linux.lists.oe-kbuild-all
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   55027e689933ba2e64f3d245fb1ff185b3e7fc81
commit: 1a4fec49efe5273eb2fcf575175a117745f76f97 ARM: 9392/2: Support CLANG CFI
date:   8 weeks ago
config: arm-randconfig-002-20240626 (https://download.01.org/0day-ci/archive/20240626/202406260432.6WGV2jCk-lkp@intel.com/config)
compiler: clang version 19.0.0git (https://github.com/llvm/llvm-project ad79a14c9e5ec4a369eed4adf567c22cc029863f)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240626/202406260432.6WGV2jCk-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202406260432.6WGV2jCk-lkp@intel.com/

All errors (new ones prefixed by >>):

>> arch/arm/mm/proc.c:82:6: error: conflicting types for 'cpu_arm920_reset'
      82 | void cpu_arm920_reset(void);
         |      ^
   arch/arm/include/asm/proc-fns.h:96:13: note: previous declaration is here
      96 | extern void cpu_reset(unsigned long addr, bool hvc) __attribute__((noreturn));
         |             ^
   arch/arm/include/asm/glue-proc.h:251:21: note: expanded from macro 'cpu_reset'
     251 | #define cpu_reset                       __glue(CPU_NAME,_reset)
         |                                         ^
   arch/arm/include/asm/glue.h:20:26: note: expanded from macro '__glue'
      20 | #define __glue(name,fn)         ____glue(name,fn)
         |                                 ^
   arch/arm/include/asm/glue.h:16:27: note: expanded from macro '____glue'
      16 | #define ____glue(name,fn)       name##fn
         |                                 ^
   <scratch space>:70:1: note: expanded from here
      70 | cpu_arm920_reset
         | ^
   1 error generated.


vim +/cpu_arm920_reset +82 arch/arm/mm/proc.c

393999fa96273b Linus Walleij 2024-04-23  76  
393999fa96273b Linus Walleij 2024-04-23  77  #ifdef CONFIG_CPU_ARM920T
393999fa96273b Linus Walleij 2024-04-23  78  void cpu_arm920_proc_init(void);
393999fa96273b Linus Walleij 2024-04-23  79  __ADDRESSABLE(cpu_arm920_proc_init);
393999fa96273b Linus Walleij 2024-04-23  80  void cpu_arm920_proc_fin(void);
393999fa96273b Linus Walleij 2024-04-23  81  __ADDRESSABLE(cpu_arm920_proc_fin);
393999fa96273b Linus Walleij 2024-04-23 @82  void cpu_arm920_reset(void);
393999fa96273b Linus Walleij 2024-04-23  83  __ADDRESSABLE(cpu_arm920_reset);
393999fa96273b Linus Walleij 2024-04-23  84  int cpu_arm920_do_idle(void);
393999fa96273b Linus Walleij 2024-04-23  85  __ADDRESSABLE(cpu_arm920_do_idle);
393999fa96273b Linus Walleij 2024-04-23  86  void cpu_arm920_dcache_clean_area(void *addr, int size);
393999fa96273b Linus Walleij 2024-04-23  87  __ADDRESSABLE(cpu_arm920_dcache_clean_area);
393999fa96273b Linus Walleij 2024-04-23  88  void cpu_arm920_switch_mm(phys_addr_t pgd_phys, struct mm_struct *mm);
393999fa96273b Linus Walleij 2024-04-23  89  __ADDRESSABLE(cpu_arm920_switch_mm);
393999fa96273b Linus Walleij 2024-04-23  90  void cpu_arm920_set_pte_ext(pte_t *ptep, pte_t pte, unsigned int ext);
393999fa96273b Linus Walleij 2024-04-23  91  __ADDRESSABLE(cpu_arm920_set_pte_ext);
393999fa96273b Linus Walleij 2024-04-23  92  #ifdef CONFIG_ARM_CPU_SUSPEND
393999fa96273b Linus Walleij 2024-04-23  93  void cpu_arm920_do_suspend(void *);
393999fa96273b Linus Walleij 2024-04-23  94  __ADDRESSABLE(cpu_arm920_do_suspend);
393999fa96273b Linus Walleij 2024-04-23  95  void cpu_arm920_do_resume(void *);
393999fa96273b Linus Walleij 2024-04-23  96  __ADDRESSABLE(cpu_arm920_do_resume);
393999fa96273b Linus Walleij 2024-04-23  97  #endif /* CONFIG_ARM_CPU_SUSPEND */
393999fa96273b Linus Walleij 2024-04-23  98  #endif /* CONFIG_CPU_ARM920T */
393999fa96273b Linus Walleij 2024-04-23  99  

:::::: The code at line 82 was first introduced by commit
:::::: 393999fa96273bab8d6efb2f4724030916afd61b ARM: 9389/2: mm: Define prototypes for all per-processor calls

:::::: TO: Linus Walleij <linus.walleij@linaro.org>
:::::: CC: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
.

From: Yang Shi <yang@os.amperecomputing.com>
To: peterx@redhat.com,
	oliver.sang@intel.com,
	paulmck@kernel.org,
	david@redhat.com,
	willy@infradead.org,
	riel@surriel.com,
	vivek.kasireddy@intel.com,
	cl@linux.com,
	akpm@linux-foundation.org
Cc: yang@os.amperecomputing.com,
	linux-mm@kvack.org,
	linux-kernel@vger.kernel.org,
	stable@vger.kernel.org
Subject: [RESEND PATCH] mm: page_ref: remove folio_try_get_rcu()
Date: Tue, 25 Jun 2024 13:53:50 -0700
Message-ID: <20240625205350.1777481-1-yang@os.amperecomputing.com>
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258726 org.kvack.linux-mm:201406
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.stable,org.kvack.linux-mm
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

The below bug was reported on a non-SMP kernel:

[  275.267158][ T4335] ------------[ cut here ]------------
[  275.267949][ T4335] kernel BUG at include/linux/page_ref.h:275!
[  275.268526][ T4335] invalid opcode: 0000 [#1] KASAN PTI
[  275.269001][ T4335] CPU: 0 PID: 4335 Comm: trinity-c3 Not tainted 6.7.0-rc4-00061-gefa7df3e3bb5 #1
[  275.269787][ T4335] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.2-debian-1.16.2-1 04/01/2014
[  275.270679][ T4335] RIP: 0010:try_get_folio (include/linux/page_ref.h:275 (discriminator 3) mm/gup.c:79 (discriminator 3))
[  275.272813][ T4335] RSP: 0018:ffffc90005dcf650 EFLAGS: 00010202
[  275.273346][ T4335] RAX: 0000000000000246 RBX: ffffea00066e0000 RCX: 0000000000000000
[  275.274032][ T4335] RDX: fffff94000cdc007 RSI: 0000000000000004 RDI: ffffea00066e0034
[  275.274719][ T4335] RBP: ffffea00066e0000 R08: 0000000000000000 R09: fffff94000cdc006
[  275.275404][ T4335] R10: ffffea00066e0037 R11: 0000000000000000 R12: 0000000000000136
[  275.276106][ T4335] R13: ffffea00066e0034 R14: dffffc0000000000 R15: ffffea00066e0008
[  275.276790][ T4335] FS:  00007fa2f9b61740(0000) GS:ffffffff89d0d000(0000) knlGS:0000000000000000
[  275.277570][ T4335] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[  275.278143][ T4335] CR2: 00007fa2f6c00000 CR3: 0000000134b04000 CR4: 00000000000406f0
[  275.278833][ T4335] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
[  275.279521][ T4335] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
[  275.280201][ T4335] Call Trace:
[  275.280499][ T4335]  <TASK>
[ 275.280751][ T4335] ? die (arch/x86/kernel/dumpstack.c:421 arch/x86/kernel/dumpstack.c:434 arch/x86/kernel/dumpstack.c:447)
[ 275.281087][ T4335] ? do_trap (arch/x86/kernel/traps.c:112 arch/x86/kernel/traps.c:153)
[ 275.281463][ T4335] ? try_get_folio (include/linux/page_ref.h:275 (discriminator 3) mm/gup.c:79 (discriminator 3))
[ 275.281884][ T4335] ? try_get_folio (include/linux/page_ref.h:275 (discriminator 3) mm/gup.c:79 (discriminator 3))
[ 275.282300][ T4335] ? do_error_trap (arch/x86/kernel/traps.c:174)
[ 275.282711][ T4335] ? try_get_folio (include/linux/page_ref.h:275 (discriminator 3) mm/gup.c:79 (discriminator 3))
[ 275.283129][ T4335] ? handle_invalid_op (arch/x86/kernel/traps.c:212)
[ 275.283561][ T4335] ? try_get_folio (include/linux/page_ref.h:275 (discriminator 3) mm/gup.c:79 (discriminator 3))
[ 275.283990][ T4335] ? exc_invalid_op (arch/x86/kernel/traps.c:264)
[ 275.284415][ T4335] ? asm_exc_invalid_op (arch/x86/include/asm/idtentry.h:568)
[ 275.284859][ T4335] ? try_get_folio (include/linux/page_ref.h:275 (discriminator 3) mm/gup.c:79 (discriminator 3))
[ 275.285278][ T4335] try_grab_folio (mm/gup.c:148)
[ 275.285684][ T4335] __get_user_pages (mm/gup.c:1297 (discriminator 1))
[ 275.286111][ T4335] ? __pfx___get_user_pages (mm/gup.c:1188)
[ 275.286579][ T4335] ? __pfx_validate_chain (kernel/locking/lockdep.c:3825)
[ 275.287034][ T4335] ? mark_lock (kernel/locking/lockdep.c:4656 (discriminator 1))
[ 275.287416][ T4335] __gup_longterm_locked (mm/gup.c:1509 mm/gup.c:2209)
[ 275.288192][ T4335] ? __pfx___gup_longterm_locked (mm/gup.c:2204)
[ 275.288697][ T4335] ? __pfx_lock_acquire (kernel/locking/lockdep.c:5722)
[ 275.289135][ T4335] ? __pfx___might_resched (kernel/sched/core.c:10106)
[ 275.289595][ T4335] pin_user_pages_remote (mm/gup.c:3350)
[ 275.290041][ T4335] ? __pfx_pin_user_pages_remote (mm/gup.c:3350)
[ 275.290545][ T4335] ? find_held_lock (kernel/locking/lockdep.c:5244 (discriminator 1))
[ 275.290961][ T4335] ? mm_access (kernel/fork.c:1573)
[ 275.291353][ T4335] process_vm_rw_single_vec+0x142/0x360
[ 275.291900][ T4335] ? __pfx_process_vm_rw_single_vec+0x10/0x10
[ 275.292471][ T4335] ? mm_access (kernel/fork.c:1573)
[ 275.292859][ T4335] process_vm_rw_core+0x272/0x4e0
[ 275.293384][ T4335] ? hlock_class (arch/x86/include/asm/bitops.h:227 arch/x86/include/asm/bitops.h:239 include/asm-generic/bitops/instrumented-non-atomic.h:142 kernel/locking/lockdep.c:228)
[ 275.293780][ T4335] ? __pfx_process_vm_rw_core+0x10/0x10
[ 275.294350][ T4335] process_vm_rw (mm/process_vm_access.c:284)
[ 275.294748][ T4335] ? __pfx_process_vm_rw (mm/process_vm_access.c:259)
[ 275.295197][ T4335] ? __task_pid_nr_ns (include/linux/rcupdate.h:306 (discriminator 1) include/linux/rcupdate.h:780 (discriminator 1) kernel/pid.c:504 (discriminator 1))
[ 275.295634][ T4335] __x64_sys_process_vm_readv (mm/process_vm_access.c:291)
[ 275.296139][ T4335] ? syscall_enter_from_user_mode (kernel/entry/common.c:94 kernel/entry/common.c:112)
[ 275.296642][ T4335] do_syscall_64 (arch/x86/entry/common.c:51 (discriminator 1) arch/x86/entry/common.c:82 (discriminator 1))
[ 275.297032][ T4335] ? __task_pid_nr_ns (include/linux/rcupdate.h:306 (discriminator 1) include/linux/rcupdate.h:780 (discriminator 1) kernel/pid.c:504 (discriminator 1))
[ 275.297470][ T4335] ? lockdep_hardirqs_on_prepare (kernel/locking/lockdep.c:4300 kernel/locking/lockdep.c:4359)
[ 275.297988][ T4335] ? do_syscall_64 (arch/x86/include/asm/cpufeature.h:171 arch/x86/entry/common.c:97)
[ 275.298389][ T4335] ? lockdep_hardirqs_on_prepare (kernel/locking/lockdep.c:4300 kernel/locking/lockdep.c:4359)
[ 275.298906][ T4335] ? do_syscall_64 (arch/x86/include/asm/cpufeature.h:171 arch/x86/entry/common.c:97)
[ 275.299304][ T4335] ? do_syscall_64 (arch/x86/include/asm/cpufeature.h:171 arch/x86/entry/common.c:97)
[ 275.299703][ T4335] ? do_syscall_64 (arch/x86/include/asm/cpufeature.h:171 arch/x86/entry/common.c:97)
[ 275.300115][ T4335] entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:129)

This BUG is the VM_BUG_ON(!in_atomic() && !irqs_disabled()) assertion in
folio_ref_try_add_rcu() for non-SMP kernel.

The process_vm_readv() calls GUP to pin the THP. An optimization for
pinning THP instroduced by commit 57edfcfd3419 ("mm/gup: accelerate thp
gup even for "pages != NULL"") calls try_grab_folio() to pin the THP,
but try_grab_folio() is supposed to be called in atomic context for
non-SMP kernel, for example, irq disabled or preemption disabled, due to
the optimization introduced by commit e286781d5f2e ("mm: speculative
page references").

The commit efa7df3e3bb5 ("mm: align larger anonymous mappings on THP
boundaries") is not actually the root cause although it was bisected to.
It just makes the problem exposed more likely.

The follow up discussion suggested the optimization for non-SMP kernel
may be out-dated and not worth it anymore [1].  So removing the
optimization to silence the BUG.

However calling try_grab_folio() in GUP slow path actually is
unnecessary, so the following patch will clean this up.

[1] https://lore.kernel.org/linux-mm/821cf1d6-92b9-4ac4-bacc-d8f2364ac14f@paulmck-laptop/
Fixes: 57edfcfd3419 ("mm/gup: accelerate thp gup even for "pages != NULL"")
Reported-by: kernel test robot <oliver.sang@intel.com>
Tested-by: Oliver Sang <oliver.sang@intel.com>
Acked-by: Peter Xu <peterx@redhat.com>
Acked-by: David Hildenbrand <david@redhat.com>
Cc: linux-stable <stable@vger.kernel.org> v6.6+
Signed-off-by: Yang Shi <yang@os.amperecomputing.com>
---
 include/linux/page_ref.h | 49 ++--------------------------------------
 mm/filemap.c             | 10 ++++----
 mm/gup.c                 |  2 +-
 3 files changed, 8 insertions(+), 53 deletions(-)

* Added Tested-by tag and collected Acked-by tags

diff --git a/include/linux/page_ref.h b/include/linux/page_ref.h
index 1acf5bac7f50..490d0ad6e56d 100644
--- a/include/linux/page_ref.h
+++ b/include/linux/page_ref.h
@@ -258,54 +258,9 @@ static inline bool folio_try_get(struct folio *folio)
 	return folio_ref_add_unless(folio, 1, 0);
 }
 
-static inline bool folio_ref_try_add_rcu(struct folio *folio, int count)
-{
-#ifdef CONFIG_TINY_RCU
-	/*
-	 * The caller guarantees the folio will not be freed from interrupt
-	 * context, so (on !SMP) we only need preemption to be disabled
-	 * and TINY_RCU does that for us.
-	 */
-# ifdef CONFIG_PREEMPT_COUNT
-	VM_BUG_ON(!in_atomic() && !irqs_disabled());
-# endif
-	VM_BUG_ON_FOLIO(folio_ref_count(folio) == 0, folio);
-	folio_ref_add(folio, count);
-#else
-	if (unlikely(!folio_ref_add_unless(folio, count, 0))) {
-		/* Either the folio has been freed, or will be freed. */
-		return false;
-	}
-#endif
-	return true;
-}
-
-/**
- * folio_try_get_rcu - Attempt to increase the refcount on a folio.
- * @folio: The folio.
- *
- * This is a version of folio_try_get() optimised for non-SMP kernels.
- * If you are still holding the rcu_read_lock() after looking up the
- * page and know that the page cannot have its refcount decreased to
- * zero in interrupt context, you can use this instead of folio_try_get().
- *
- * Example users include get_user_pages_fast() (as pages are not unmapped
- * from interrupt context) and the page cache lookups (as pages are not
- * truncated from interrupt context).  We also know that pages are not
- * frozen in interrupt context for the purposes of splitting or migration.
- *
- * You can also use this function if you're holding a lock that prevents
- * pages being frozen & removed; eg the i_pages lock for the page cache
- * or the mmap_lock or page table lock for page tables.  In this case,
- * it will always succeed, and you could have used a plain folio_get(),
- * but it's sometimes more convenient to have a common function called
- * from both locked and RCU-protected contexts.
- *
- * Return: True if the reference count was successfully incremented.
- */
-static inline bool folio_try_get_rcu(struct folio *folio)
+static inline bool folio_ref_try_add(struct folio *folio, int count)
 {
-	return folio_ref_try_add_rcu(folio, 1);
+	return folio_ref_add_unless(folio, count, 0);
 }
 
 static inline int page_ref_freeze(struct page *page, int count)
diff --git a/mm/filemap.c b/mm/filemap.c
index 78c8767c0a5a..37e2b2bb4a63 100644
--- a/mm/filemap.c
+++ b/mm/filemap.c
@@ -1847,7 +1847,7 @@ void *filemap_get_entry(struct address_space *mapping, pgoff_t index)
 	if (!folio || xa_is_value(folio))
 		goto out;
 
-	if (!folio_try_get_rcu(folio))
+	if (!folio_try_get(folio))
 		goto repeat;
 
 	if (unlikely(folio != xas_reload(&xas))) {
@@ -2001,7 +2001,7 @@ static inline struct folio *find_get_entry(struct xa_state *xas, pgoff_t max,
 	if (!folio || xa_is_value(folio))
 		return folio;
 
-	if (!folio_try_get_rcu(folio))
+	if (!folio_try_get(folio))
 		goto reset;
 
 	if (unlikely(folio != xas_reload(xas))) {
@@ -2181,7 +2181,7 @@ unsigned filemap_get_folios_contig(struct address_space *mapping,
 		if (xa_is_value(folio))
 			goto update_start;
 
-		if (!folio_try_get_rcu(folio))
+		if (!folio_try_get(folio))
 			goto retry;
 
 		if (unlikely(folio != xas_reload(&xas)))
@@ -2313,7 +2313,7 @@ static void filemap_get_read_batch(struct address_space *mapping,
 			break;
 		if (xa_is_sibling(folio))
 			break;
-		if (!folio_try_get_rcu(folio))
+		if (!folio_try_get(folio))
 			goto retry;
 
 		if (unlikely(folio != xas_reload(&xas)))
@@ -3473,7 +3473,7 @@ static struct folio *next_uptodate_folio(struct xa_state *xas,
 			continue;
 		if (folio_test_locked(folio))
 			continue;
-		if (!folio_try_get_rcu(folio))
+		if (!folio_try_get(folio))
 			continue;
 		/* Has the page moved or been split? */
 		if (unlikely(folio != xas_reload(xas)))
diff --git a/mm/gup.c b/mm/gup.c
index 6ff9f95a99a7..d1d85c41371c 100644
--- a/mm/gup.c
+++ b/mm/gup.c
@@ -76,7 +76,7 @@ static inline struct folio *try_get_folio(struct page *page, int refs)
 	folio = page_folio(page);
 	if (WARN_ON_ONCE(folio_ref_count(folio) < 0))
 		return NULL;
-	if (unlikely(!folio_ref_try_add_rcu(folio, refs)))
+	if (unlikely(!folio_ref_try_add(folio, refs)))
 		return NULL;
 
 	/*
-- 
2.41.0

.

Message-ID: <667b2ee6.050a0220.f9c1.5426@mx.google.com>
X-Google-Original-Message-ID: <Znsu5ZeV539ZdT8x@laptom.>
Date: Tue, 25 Jun 2024 22:56:05 +0200
From: Tom Mounet <tommounet@gmail.com>
To: Marc Dietrich <marvin24@gmx.de>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	ac100@lists.launchpad.net, linux-tegra@vger.kernel.org,
	linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org,
	outreachy@lists.linux.dev
Subject: [PATCH] staging: nvec: use x instead of x != NULL
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258728
Newsgroups: org.kernel.vger.linux-kernel,dev.linux.lists.linux-staging,dev.linux.lists.outreachy,org.kernel.vger.linux-tegra
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Comply with coding rules defined in checkpatch

Signed-off-by: Tom Mounet <tommounet@gmail.com>
---
 drivers/staging/nvec/nvec.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/staging/nvec/nvec.c b/drivers/staging/nvec/nvec.c
index e5ca78e57..814eb121c 100644
--- a/drivers/staging/nvec/nvec.c
+++ b/drivers/staging/nvec/nvec.c
@@ -300,7 +300,7 @@ int nvec_write_sync(struct nvec_chip *nvec,
 {
 	mutex_lock(&nvec->sync_write_mutex);
 
-	if (msg != NULL)
+	if (msg)
 		*msg = NULL;
 
 	nvec->sync_write_pending = (data[1] << 8) + data[0];
@@ -322,7 +322,7 @@ int nvec_write_sync(struct nvec_chip *nvec,
 
 	dev_dbg(nvec->dev, "nvec_sync_write: pong!\n");
 
-	if (msg != NULL)
+	if (msg)
 		*msg = nvec->last_sync_msg;
 	else
 		nvec_msg_free(nvec, nvec->last_sync_msg);
-- 
2.39.2

.

X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
From: Mikhail Gavrilov <mikhail.v.gavrilov@gmail.com>
Date: Wed, 26 Jun 2024 01:56:59 +0500
Message-ID: <CABXGCsMmmb36ym8hVNGTiU8yfUS_cGvoUmGCcBrGWq9OxTrs+A@mail.gmail.com>
Subject: 6.10/regression/bisected - after f1d97e769152 I spotted increased
 execution time of the kswapd0 process and symptoms as if there is not enough memory
To: Linux List Kernel Mailing <linux-kernel@vger.kernel.org>, 
	Linux regressions mailing list <regressions@lists.linux.dev>, Btrfs BTRFS <linux-btrfs@vger.kernel.org>, 
	fdmanana@suse.com, dsterba@suse.com, josef@toxicpanda.com
Content-Type: multipart/mixed; boundary="000000000000454209061bbd2475"
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258731
Newsgroups: org.kernel.vger.linux-kernel,dev.linux.lists.regressions,org.kernel.vger.linux-btrfs
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

--000000000000454209061bbd2475
Content-Type: text/plain; charset="UTF-8"

Hi,
after f1d97e769152 I spotted increased execution time of the kswapd0
process and symptoms as if there is not enough memory.
Very often I see that kswapd0 consumes 100% CPU [1].
Before f1d97e769152 after an hour kswapd0 is working ~3:51 and after
three hours ~10:13 time.
After f1d97e769152 kswapd0 time increased to ~25:48 after the first
hour and three hours it hit 71:01 time.
So execution time has increased by 6-7 times.

f1d97e76915285013037c487d9513ab763005286 is the first bad commit
commit f1d97e76915285013037c487d9513ab763005286 (HEAD)
Author: Filipe Manana <fdmanana@suse.com>
Date:   Fri Mar 22 18:02:59 2024 +0000

    btrfs: add a global per cpu counter to track number of used extent maps

    Add a per cpu counter that tracks the total number of extent maps that are
    in extent trees of inodes that belong to fs trees. This is going to be
    used in an upcoming change that adds a shrinker for extent maps. Only
    extent maps for fs trees are considered, because for special trees such as
    the data relocation tree we don't want to evict their extent maps which
    are critical for the relocation to work, and since those are limited, it's
    not a concern to have them in memory during the relocation of a block
    group. Another case are extent maps for free space cache inodes, which
    must always remain in memory, but those are limited (there's only one per
    free space cache inode, which means one per block group).

    Reviewed-by: Josef Bacik <josef@toxicpanda.com>
    Signed-off-by: Filipe Manana <fdmanana@suse.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>

 fs/btrfs/disk-io.c    |  9 +++++++++
 fs/btrfs/extent_map.c | 17 +++++++++++++++++
 fs/btrfs/fs.h         |  2 ++
 3 files changed, 28 insertions(+)

Unfortunately I can't check the revert commit f1d97e769152 because of conflicts.

> git reset --hard v6.10-rc1
HEAD is now at 1613e604df0c Linux 6.10-rc1

> git revert -n f1d97e76915285013037c487d9513ab763005286
Auto-merging fs/btrfs/disk-io.c
Auto-merging fs/btrfs/extent_map.c
Auto-merging fs/btrfs/fs.h
CONFLICT (content): Merge conflict in fs/btrfs/fs.h
error: could not revert f1d97e769152... btrfs: add a global per cpu
counter to track number of used extent maps

However I double checked every bisect step and I am confident in the
correctness of the result.

I also attach here a full kernel log and build config.

My hardware specs: https://linux-hardware.org/?probe=d377acdb9e

Filipe can you look into this please?

[1] https://postimg.cc/Xrn6qfxh

-- 
Best Regards,
Mike Gavrilov.

--000000000000454209061bbd2475
Content-Type: application/zip; name=".config.zip"
Content-Disposition: attachment; filename=".config.zip"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_lxuv7nl40

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
--000000000000454209061bbd2475
Content-Type: application/zip; name="dmesg.zip"
Content-Disposition: attachment; filename="dmesg.zip"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_lxuv7w141

UEsDBBQACAAIAC4M2lgAAAAAAAAAAAAAAAAJACAAZG1lc2cudHh0dXgLAAEE6AMAAAToAwAAVVQN
AAeZKXtmlCl7Zpkpe2bsvWtzHDmyNvb5vL8CfhWOlfaQFO6XdshhiqJmaA0lWqRm95yxglFdVU32
qm/bF4244R/vQHV3FTJRpBrE+psVuyOxWPU8uCQyE4kE8AchhNAT2vz5Sn4bzzY/yPd6uRrPZ0Sf
MHpCj+nJslQnUpyMSslOflh9q+V/VvVwc0deTuflt+FmPKn+j5FlhaaccaqVrM1oKGWllK6tLSs+
kuYVeXlXluTlL2dnrwiTJ+yEEU65pJpT8vJzXZFfi/XuF8f61RH55eMXMqnawvATyU8UPWm+UYK9
Ii8Yub68Ilefz88vr25u3/3Xx9PLizNyOZ+R/3MzI1wSZgZUDZQjX27OGrL/8Qes79l8Oi1mFZmM
Z/WAvP306eb24vL0l/M3L+8rdnS3WItXr4fz+fr19+lkPNv86/jnTbKcz9dvvny5ePfGqpEYGW2O
i1FRHcthVR0Xw6o+VqzWXHFXjoaCLOdkWa8203r7jXRcsapgx4UqR8fSFcPjYiTrY12NRswwI2rr
yGR+dzvcjG4n9ewN05dk9bBa/vO2mPxZPKxu61kxnNTVG0Zm0/Htn8W6vK/md28YKabV3WJzMpmX
3zaL2/V4Ws836zfH7Gj/P7Ja1OV6Wd9+57ebVb18M581j26Xq3VRfrudf6+Xo8n8zzfTcbmcl/Oq
JovleLb+dlLV379NV3dv5jPcwG8vPl0fL5bz7+Oqrsji/mE1LosJ+Xx6SabFYtD7em05HZA/pvWU
0B8U/TkGj9xoNBp9JZuVr3MSWBGDjbZgy3pVL7/XVQoci8rmilH9vLK5YjTCYKPnl62I261go2e2
W8FjME63YKdnVxfk4+/XSXAsghs9t2zDuKJD2hTuWe02pE3hAjhdK2WeVTb/pYVgRlaFfWbZ/LcO
w412cE03VMW6SMEbRXga4CV1q/8Ww7nRbjg8o7Ze+hHccDSyz+oJ/yUu23A0qp5btuFoVMdwz5Ng
U0YSbMrnj3xTmZFAcKPnw9U0Kl2dATcyEdzo+XBsj9HCMaqq2jynIxhVdV0isIKyZ5ZtVEVlG41+
XtWPfycvz3/U5WZdk3fjpgKvyGI5X9flejyfDUhRrsffo0qdXl2cDcj1uliPS1IWk8mKjGfj9biY
jP8Vk2yLu1lUxbrel1qaWheU2ePmn1ZxZfYtSN68+d8facxHkFSHpB3NQZKjFkm5+jCkH+t6dpDb
sesEsqrXm8WtV57/Dv/jMNR0R+Qg3GSP5BDU57gmh+Cm+ygHoT7DWTkMN9VrOQT1Oe7LYbjYj9mN
JpNR2mBABo/AwHweqofAqEV2WfdqKHgE1NHzUD0ERs0vq47LCpTw81A9hE3wZQ9AfZZTewDu87zb
g4Cf4eYegvscf/cQ3HTH9xDU53jAB+ImusKHoD7HJz4E9znO8QG4z/KSD8B9lrv8c9zn+M0/RX2m
A/1T3Gd60vVoPCDn7y/Id37iyPCBnE7r5bgsZuSyvivWy3pWrXq/8SrhDf3RKB9K6VZF8BPaPmOS
3Fxdvh/Pislv8zv/WI+UH7Hk+tJPB/wTJ4eme0LE9nMnh9o/vTy/PL25+fyG/tCmdl7zk/Przzf+
56IYWsksufz04XuxbD5StPno88dftkWww5JZX4Tz7/VsvS2C1/Xa40TNW8yq+XRAyuXsrpkTkGo+
i31mX/HP9XT+vSbTeqrMgFxeXnzyX9/Vb/6gPwIB7wT7JVf68u0rMlrOp40D773sfsd+ucXedWwv
2pMdGZTN4rIFg2RUV/uyMf68svWiPVm2j/P1FmM8u2tK6KIS1nWHWdOtd/dSfvhp+WDVNe0D3rl5
3Yh4yczzat4HdmCvaI6LxqjtejlUBC8Vk88q36OIj5VxVZebZe0D+QNy3fyb+B9ItZ1YR++3g1Wd
ULLwqLP1CX7p3eXFgJxef7km1w+rdT0lV8t5tSnX5GMxrV9//vQLub75fPF38lYren58QX45vbz4
+Av528X7i6MmWkC4ZoxQ+Zqa132LEw3BZT2dLx/IajJfr8hivthMinVdDQh/zfH761U5IO+L1Zrc
XJ/5yf94uCx8sIBsVl4iry5uej95V/ugQl0RqSg9ocKQy1//5WMNZb1azZfBN8w7t30TdKyYA/PR
TNB7OoZx3t+7cE78mAPBBP1KJsVqfbsYzcibRipUVVsvRD9ui2V53/5C7ksHPjdfyeXN589NPIAo
Us/Wy3G9Ii8FGY1/1BX5T8LJ92I59rz/mwclnL46In6xa70VWdf+vkFaAXj3lfyw+vXV6c2AnM1n
o/HdZtcZf9Bj83VA/vaWkL+dEfLl7Jh8OSPbn6+2P//thoT6WyjV3+zBMOgG6tPNLgxD7da4WAe1
GnfMF2S1XPsR76G9WHmDRVaLoqy3zRLMEPY2bD2Pnip6EgJz3V/D5uVtDZt//ryG3EnzlXxpJP6X
t2RR3NUrMpovSTVe1uXa9/diPLvrPjCS8a+7laxBuLY2IEwbYzjTZPiwrlfgE9N9UhfLyYP/kAw3
IzJa1vWAcKU4ly+d+V9fgc9cijIyktOvPmj17uL6Q+sMSVM7vm0SOZTS+9hfwTdqO5sZkPOmYOum
scr7uvy22kz9eup4NC63stjH6QfW9vvP1++uwPzp/Wnj9PgfuCQvv1NOTn87vf5wCirph9YW4O/X
724QgDHcNgDnDQDbAZBTckkuGgxGDafUkdPLi+anZjgBAin3BO9Pz1AJ3TsvzY2uagj0zwgaJxgR
qLYJ3kU1MI0v6OHl27AJegguPt785pedBRWCQYKwBtdgLvnevt/VgEoKvnH7b66jQrndN+a93vfL
5Tv/6fViMp6t6yXZvcvJ5fX7G0J3oxsUSosnCM53hRLvGaj12dWX5u2435qfIIFua30REdB9rd3Z
QYLR12+m7bfLs/e/QAK7rwEVPyPYNlEvQdtvv16doxrYdy2BPbAG/o+CBO3Y+du7z5jgrBUM82wC
y9o+uMJ9YE9bgucPTtuqn9/fnyECte0D5ugpfYRg+4dt5VcwReV7aSBBOw7+dvUWS9Hbbuz8jMB7
bvufAIHje4Kbq0uOCLomaqRIPlWDrg/gQHP60YF2znfjwL09PQcj2f91dvUFN1FfDRSlT4zkrf6i
TL2jgODs6vLd+4tfeEfwqP5S9ClVobYE/PRUQ4J3709PDyUwTxDIXR/Yt6dxDd4dRsDY433A9K4P
TpXBBGeXH8NOfoJAPlEDtmsiefoedvKn5q/DCGw7Dq4vcQ3UXkz5obooUnaKt+PAryoign0fMNWI
qXoWQTsOLn7/fI0IxL4GZxY20bS6aTyaA8YBf9xknjO+I1AUjoPL88ubT59+o53JfLwPxOPj4Jzt
Opm6c42l6PL60/XZIZ0sHh8H52ynKqg0Z1hV/O3T74dJkXxiHNC9JyLl+U/64AmCdhx0U4bGbdv6
pdPt/LZY791bI0eu2rq3zT8ZE18BnonxGi/tcTxjWzzrpCwgnu0t3/WjeHpkd1H57T/FCOK5GO/6
6fK5UVu+Qo80rK9i6Xh11361GFGIx3vqe/E0Hu3wKHVDiCdivMb7ehzPduWzNRUIT8V4jbP1BF4n
L7aiwkA8HeM1vtUTeGWHV1KpIV6P/DWu1BN4RYdXUIn6t0f+Gs/pcTzVtZ8x1EH507Snvt5ReqJ/
h13/DrE86x75a/yiJ/C6+rqCSti/ukf+npbnmrfyV3M3LCqI1yN/PxsfnT5wTpWovj3y9zM81eGZ
olAQr0f+foYnOzxphw7i9cjfT9qv8We27cdGhYLyrJ+hr1hXPiGLGuCZPvnzDsoT5VNd+RTlcPya
Hvlr/JEn8GSHJ5mC8mJ65K9xP57AEx2eoCUqX499+1l/8A6PSxi+USZZ/mrGOjzmaih/Jln+ataN
N0algePXpMsfbe1bTUdSgv7QVn4lH+fk45fLU1KCQOlovplV4FX9lbwvvnnGgsx8/nlHQ9GfvgXN
EMuZr+Tjp3fnt+9Ob05f0lekmEzmpY+td6sMymkl96sMymmEIhUV9iv57/ms3q52rAbh77zjQ8i7
y9OtR99TTpSXs1/OBAzenWhQBO9DYai2wbJwiOKdCEI+zpfTYhKhPLkIDFBEU5b6+7isCSH1dLF+
AL9XX8nl/HsjB//yrbJaF8t1E3yti/K+6TLwvvm6i1HupKbp021Tgves521+SUj/1oCoKXepeSGM
t4xPwjyeMwdg2NMwTySzARj+E5jHs8wAjHga5ok0dgCjnoR5KhUFwOinYZ7IEQEw5imYg+XVq/qL
2Xjtv26yCraQ9KcC9AieFV/Jp9kO5Ggr4u8uTweE7ZYZxjOymRXfi/GkGQORJDOpHkFw+kAII/oh
BB8Qxu2hJTFe7T4Gc1hZFON+qeARECEOA+FO9LdqUxJFmToYRz+KcxAG18ryHoyt1vTNIqw8DEib
vsLsgawyB7WwEtxS9ZV8K1bFbEA+1MtZPTmtqmW9Wl0XPqv7X/WyL71bCSFF69ZdXR7fjKf1klx8
Ildzv3bnFw5t+HK33vGbd61uP15ekJdFuRjfjiufXDD6Su7Hd/ekru5qv1du7Zf1v74KIbybdvHJ
f/0H/TogxWJc3o4rIvhRu4NPiCNSbIvfJBlsU7uOyC/XF4QecwHgdAvHQjjxFBxr4bg8VgrgtbOs
i483t9efz24//f6ZvBxuVoSS4WZ1O17+k1ByN5kPi0nzAyfVaOL/D6rZhc+fwHEhjt+u9yeZ1N9r
hNT6edu1yia76OXl6bubV43F9FsboT80no28BPl/A6DWwWumyeNq0DgvnFtOGRkWq3rQtM82eyr8
0omvTUh5PV/MB+Sy+HHiVzGbTPlFUX7zEjoghDDwjXz0m2q8fd//4eAbFX3j3yWLerknGkTf2Oib
9f2yLqrtZ+V82fONC7/5uJmeNO9FRITp4DNFWfRZSNV9KDj4jIefnU4m8z99Pwq+zxjxv12RxaSR
jfv5ejHZ3DXPQhQf4Lu6HJD78bBezort3o7P9d14ta6XdUVm81Xxfe9WRwY1zLcIUSV9JmqUeQFQ
+bNQg10DbtSDKp+FGmT377P6Aap+FmqQhb/Pvgeo7jmo22z57Yq9/ydG9d75s1CVa1GVi1Cf1Vvb
bPkWtYhQ1TNRdVdWHZf1Wb21zZZvUeOy2meiWtWiWoVR9bPGVl8iC0B9Vm8FOfht7j1AfdbYCjLw
28x7gPosGQjS79u0e4D6LBkIku/bpHuA+iwZCJLk2+T4ENU8a8QGyextEjtAfZYMmKpDrcyIR6ji
eahtgrzBEYUG9VmSFSas7XNqAeqzJKsvqxagPkuy+rJgAar7+lS1SOfWe3fu6uyCVE3kBJh/y7+S
t/P52nsOi2JZfB8v15utN0++NQ4/mc/IsFjW5L5YVn8Wyxp8br6S0p/osJpvlmXtUylH41ldHf9j
PBo17ti0WH1r/L/dnybRr3woJ/6X3eOj5vm4mtS3s9WAMMeo085JKhyTzJFZV2rJtRfUbZr+ol6W
i82AfPx86zOBBpY5TmbL23Kx8cy3w/F6NRD7R7fjav+Tnxk1P3bepaLN5HYPeT4d1pXfvqm0206X
XpeLDVlxTo2Rkiwbrooxqa0lG8mcFFSGaH5asygXm+Mmtjf42afbEOAb/ldOnWGKAygFof6gXwml
27/Y9i++/Uts/5Lbv9T2L739y5AQ09AeTLv9yzV/sS0D2zKwLQPbMrAtA1MA0/aUk23Zmdn+tWVg
Wwa+ZeBbBr5l4CLEtLSnnHzLzrf141sGvmXgWwa+ZRBbBsEApg+ibSe0pPz/z2D5/+YMFqWo86mt
TdEG27/ItoRkV8KT8F3v3H6ZfZvN/5ztdU/YN41+mtbrerki//Pf0k1xXf/nEflzPJmQoWdbrerK
pw77320TjIPiCuH9hXc+bfuBlEV57xXk6n63CrHL5h4QK6zV1JKX82VVLweEySOiDaPWarnN6j1q
Klcsu8m5ks2c+sKrqOPHofdao4UWR8Q7nVIK/ii0Ej4w876YTIZF+Y00nzb24WMTKRoQSsKXfXLC
2ybjnDUxpMl4tV4dkel8OJ6M1w/kbjnf+GxmMp+dEHIzXzdT92bezrQyzGkXwnmFeDWfjMuHBm2w
C0mBV9xXbwhJsVnPj31saUAayRsUk8nLf9XL+asjcl8Xi62yHMxnux+btOf5aBRieU+5+biqFz7b
ebfE4ssbNOj3cbH9ze2kWN7Vt6tmN8WtfwOAiRCst0cYlU1sre0RfoRSuPt6xFGflD0frb1x9UGy
m9/eDkixrAsy20yJ4DupEydMcuM9lMudo6A015wq/uG11twaa/SHwOq/VEZI+aEbSlV9RJix1nwg
yz/9/rYjwrnU8gNZzrc/Msqt/NCE9I6I4trxD2S4WvlfUK6Uth/ahPcjQj+Qcloc7x+86kqpjGNf
yfVvX94OyK9/Kybju9kbLY/IJ98sb+ixOCKX49mn4T/qcr16Q4+aoMQbH6rzUrh6wwCU/Eq+Tevp
pC6+7YOQ+/Ua/4xUzfaRJsE+TCYXJ0xxIcXXYGWNCe6oodRue4PMR4203tY/1sFHTUBmtF4W3qEJ
ZEZpJ7uNGuMZ4XwXZG4/1owLGX1cV92r5M/x+p6Y7cgJPuTWh2zfPcyK6bgkV8var24NyPf5ZDNb
F8uH7k3hvPf/eTOb+UJ9PvtCVvVkRNb1ar0Cbwn01sOsvF/OZ/PNqvcLyfxsbVluBnv6sRej+3G9
9BsztgdYnH0h4+liUk/r2bpxZE8AgNoB/Id/sfa7AolvCl+EMVb6u090+Ik3TFW92O4WeOorG361
rFfr5bhsOqmJeTX7QHYu4ZvG11rPAxfwTTimPJoL0cq9cqzmm+GkPn69WdXHxWhdL4+9kiFb2/FI
wXzX/MfNspgu5o3NanbozNZe0m6K1bdV04K9H/Kv5D8+b6qUT8SWq2new7/ad/KuruV2Rxf5Xkw2
tf98Vd7X1WZSL4/rmdf3vqtJVU+KB19pRinZOfcQdt+Pp9U/NqumK+7q+bT25tHbl2W5uR0Vs/lm
fTupi9Ebpo9gjwRgwocPk0RX+Li4f7Opu9/Xsm6KsLofj9a+8xXZuhFT/wNrSrP284NyeFs0BX7D
wupIn7nZ4hHfL/8GUA1Ab7Y6Ig/VCOb36Hz8fHvx+f+6HhDFpZKyadrx8p/eJnEuj3xEuNNFu1/o
AETx/YBaeb6t3W1L5h+t1ku/t3A1/le9aoL6lZ8YlvPZup5BPWBks7ntbD5bzSf1gJTzyXyzJNVm
On3YTUGJpT+4Cr/wAbh2C1R9V5QPHtsDkD/W6we/EXMGlbvRzovJb3M/UuuFP2lnVj54MR5XxXq+
9NveFg/L8d39mrwsXxFOqSa7Yx6PyMWsPPH/vZuTy/lkVixDXL875uTkhFye/v32t09nH96dX91e
f3l79tvp9fX59YAQG77tI2fh27fvzq9uft0vRBBCJHjdz7ow+Ifz/7puP/D6Cnxgtx809L+eXv96
e33x3+chPnU6/MBPyjHD+cebzxfnOxLt3ZnwC79Agr84+/X04uO+VIpLboNqGOoz8JtS+df6SsU1
Z1KGn/i5wN5yb7wADR8ahR92n19jGhDuFBPk29vwa87Q116rNA5ZY2Iaj5hzib7yK8TNKoofQsc7
Id6hjObzdSNzA8L9PDzYZNd8zGi7RHY2X9ZkWX8fb48C9UeACh70kjE+2g0iIfeLev3s8IdfVpPW
CEVlG/poeKxf9dkdsvXneF3eeyWxeph6RTsuycXrT2TqPfkmOtJ9Z2WT5nn57vj38X7Bb7tGSC5+
//UdOX//eUB/cKmVMfWo4FzJYlQc+ed8QH/QAMlYVIK62ubDLeebRl2s54PuxKvRpOhcK+M0b6T/
5uLy/POAfG/8tjf0h6DNCit7Q8liPGNvePMjf3PM/M/+7xbDCuOX5kBTr1flcbMJMm7vR9pd0qqy
RWGscajppaTGKe6M1S5seiss91ptv6t5dreziZP5fEFerr6NF4u6enW0s6OBYd1ufl43S+CjZf3P
jRf0kxPi47sn1JC387v55cXVNXk5Wfzjjd8DTYV5FRKr3WbeJiz1xc9GL30fX8y28uxF8mrZeFv+
ny+/XF5cvdqez+YLECA5wb6S336/IfPRaFX7SV2xWo3vZrvRtO0P33qu+0g2CUfBR/yxj2TwEaP6
K/nN7wVvVp7J+Oa3t8HU9cNbovzsiF/u/iEv3xKudIjgt7gGCFWEIKjZQWz/5TGYEvqIsF/eEhpi
iWaHbbOhfLDrkOmfxXjtvXjf9fsF1/AbP3W43kYIyO+MDMjleD2+20VvfUygnC8eXq/+LBZ33iIu
l2MfmfC2+7YJJ5DFfLv1cbXNlQgWzrcEvltbAo4Izmf3xaysK/KanG7W82lzoN7F28/XIYJ3GgHC
/ofvnLze//D5+i2ZBsjvx5NJ41hdv21N+I81WTWDOUR3GH0KylcMG5htQOd4PiMXs90W57fLYlbe
e5msxlvxfLttngCdM4rQv7RhFtgS1zcXb6+CowdDEC63IH6ojb/X5HrtFfXbBx+8QSiPvNXOGps4
wGJZrichgeSQ4HO93ixn/oDD8hv5tAuGDcjfTj9/vPj4i/eZanK/Xi9Wg9evtxPvk/ny7nU1L1/f
r6eT114lrNavi2o6nh3fbcZV/fr+z+Pvm8ns9Wq5mp/4l5ph1bU1mS/8X4G77cslDyrX75vJrF76
+vnW2EXsjshsTlbFqCafz29CUN/hXs+MvJ653iwW82Wj6P5+ffr7ORnVxdpvFveL82xA/vLDGjKa
zLe6sJF1stytaaz+EsAK6g6F5QPyl+vr80dw+MHFkwPyl9Pf//4Ijp9oH4TjjwPwOMeKcTJfeNsC
gHw46yAgGQL9OuZKAxw/7z4Ix4Y4/315eRtjeW/xECxOPdZVO6rIh/phtR2D/a3mfcRDgG0DfDaf
rZfzybEXwydQpd8G2aL+WK2LdX27tTN/8K8DQpTRR/vnzdxj+xiaiubIgUdQlH/d+tgSQGkeEx2a
LCnsoyi6QXG4LM1jxXiIovijKP7YDSapRSjN4/b8lS2KfrxG7uuAcBnVyDU1CqYmVkrjHkVhrIGR
FME0z0k4O7SySdRqcc63E7HdZ/ue9zlwRW2OOnsy/lftAwZcqjb4ubW8fynn00XhT3z5C9lmlLWq
jTOqfY7q+2VdN4n9l1ekmKy3q6bf61W7Rirth/CbZnlsXN1Oix8DUtWjYjNZD4jgRlsyHc/G0810
QARt3UgueJNKd3x8/MdWPK+bA0S+Hh8fh+/4ndI/O4O1WaTt5j1Efmj++vw30vfn49/JYl0HHMq7
lT9PJg85tOAfesG7P4jDt2kMCDma1KuMenjNEwMCjm3K1B7CD4XEevgMuxgQnbAK6sE0vfwZx7QK
ODSD9eg9xZXBttIyrR5auK8/y7XnDnAoltjn2luVGBBwSNQfJpXDK4YYMEz23+WcdBxOp/WH8VPG
GBBwVIUOObRNlCsjLOTYAiIOC8dHKofSmMPGHGCcE57KYSTmGEUcQw44UuXKOIM4hhxz1M0OzBbA
pdbDMgU56v2WzvDRMEtfWSkxxzDmqLL63OL+qPdby9tHu7S8fR0US9Ul1nvtMSDicFlt5UTEgY5w
1eU2EXCHwA3XNK0eTgFdsgcEHBroEqJT9VWzchYDhhwVsh+E8TR95Rzs8yqyH7riI8DhEttKUK4Q
xwhz1KA/mLUyTXYFlXCcx6ct6zqzP0SzXysGBAck15CDiTT7ISi0UXtAdAhzOD6YoYn94c+I+MmB
zLvDPFsAse+PA8egYNBGmfhAXuNQWxG5a6uA4+r6HHCAtmIG2No9IDxYWpfAniudWA+nIMcWEHGM
em3Uct7L8QP3B+cUc+Ddg25kJLS1NK0eXOJ6GBlz6F77cXA9cH9sARHHMK8eUX+YYczRbwcPrYeI
+sNUEYflWfUQ0J7vARGHypIroR3mUDFHkVcPF9WjiDgcbCuRWI/mHMgYEHGYrHrIqD8aQMQBZZfp
xHpE/YF9OONGaF6bXA9kP3aAiKM/BnBoPRScc+4BEYfqbatD66FkVI9YdtHcQCXKVbPbIQZEHHly
paL+GMZyNSyyxrmO+mMYj8HhKKseWnLMEduokmXpXa0N4ihjuSp1Xj0crkcZ26jSZI0Pw6J6xH1e
lln1MJJhjtgvKau8ekB/dw8IOao8O9jkXsaAiENk1cMyXI8KX2bhRpXJ0lc2sh9V3Oc11Ikq0X7Y
yH7UsU6skVwl+u02sud1LFcj1OeJ/eEiez6K+3yUp3ddZD9GcX+M8vSui+zHKNa7ozy96yL7EZ0s
UsB5rWaJc2dJ0XywiOe1xfZonxZACJ3IITTiUHj+URjIQQj76dwZcig4N9gBQg44x2HJ9YAxsj0g
5ICxV544P5c4BrADhBwVaCtmEuvBGEMcVdxWSJe4VA5BEUekS4YgBsC5TlxjkUxBez6MYwDDugD1
SI23Sxxn2AEijv4YwMEc1mKO6AShuoR6N7XPOTWIo8R6d1hXoB6MpXII3FZVfBJSHepdRnVif3AJ
7ccOEB2TxHrt4MEcyBfdASIOGKdOXOeU3CrM0XPVWJ1jP6RgFHPgI6V226wDlMS2EhzKbnwJ2X7H
b4egZVJcVAoJ7EewhXj/qIw4CPvlZxwbwAH7vIw5asyhEuPtUsBx3nMB2ghz+Nuimn8cGBeVEtrz
UQ8Hju+y1HpIuMbSd+FajWPhPLUeCvRHsG89fPRkPsPV2TtQiWh8oHhJsIu9fTSCbcWpTFuPkgrO
B/eAHUd7RFsHwhLbCsZL4jPfKKMW5xqItFwDCeMlLSDgEDLUVyzZT1RWQ44tIORQtFdfHdofmknE
oaJ6wFwDYmjaOqfUArUVzjVg+xuDulq4xDGowRp9CxhwxHo3VSdq4O+yWO82j1BMJrGtDOWYQ2MO
KLt+S0MiB8hbagEDDmw//Jlgaf1hgI1ikf1gPXZQubT+MKEvymI76O93Q+Pc3xvX/ONQXdJsWYgB
A47I1iqWqEtsuCbMYlu7r1jAIaVKayurgrbqAHcnlNjuCW1mUMw443fw8p+y3AEWH5VpMvN2u337
cvOkNY1sYOK2LD31VSy1JD5205Tkt3c3/pq4YoGL4SjtitHTJHbXHwemX/zy29tYvTrftdtizP/c
N8rl9h6xqDxbNwKTo/LwvPJ4N6Ipz/dps63w5Sty6ver47JsU9AwMSpLfyjy4LJ4968py+/TetrX
Qdv1TcyICiFzCqEoayX29Pr0I1ndF9X8T1QSRbnGJZFxSVReSfwIjUtSz6qoNFvfA1OD0kQ24nG/
oL80DgkAjwaHK+AYZYo/qlv3HKHeU4xDjh0g5AAxQ0afmPP11oMpzLGPGXaPUJ4jTZwfK7bNTcKA
IUeBbR1Jm/MpZh3g6I6K7h7h/CeS2B98O1fCgJAjL39WcckQB4s4UG6rs4kjiWs4Wrvc1vbREPcH
S20rB+sxjPtjd352R5EYE1GCOcTBsUEYorxs98RaTW9bNYejxIABh65Rfyj7+Hyst60E1CV7QMAB
ct4IEyaxHpJzyNHmvHWPMnPelISyG+S87R9FeVzMJo7zXV4EBgQccB2lm4MfXA9rIMcI60TTo6/S
+kMx0B8m1lco3u0/pGlypSQY50G8u3sE45I82X4oqNuDuGT4qD8ueWh/KGsxR404Ho1LHloPDXV7
EJfcP8qOSyotQFuhK4attT2xHfJzv34DOGQ4PsLYzu6RjmOfXPyC2wrLFeSwYVvpMuYYMWRrTapO
NCycfLSAkMMCuVI6sc+bMxFjQMQx6h3nPeu+/RzA1raAgCPaq5Ko240TkAPbDxPJFReJ/WGBrTWR
XDkaxaiIMGlyZVUwPjrAgENVSCdKYxPrYWzIsQeEHBZwtPuTDu0PF8puBxhy1LCt/N7+NJ0IJsMd
YMAR6SslE/WVUzrkwPrK0fZP1x9Sp+krZzpbGwDuOMo+DqLlzc847gBHN08uH+eAe6BEWp9r2o2P
EBBx9O9VeaIekEMYzOFijiLHL9HNkRgxIOLo3590cD1M1FbDmKPMqgejAnOUMUd/ztuh9WCcYo4q
5qjz6iEj2a0jDjTnTFyT1UzjtgrnnPtHeeODWSy7LB4fLG98cCoxRzw+WN744BzLLovHB8sbH7zz
20NAxJE3Pnb7LzAg4sgbH7zz20NAxJE3PgSLZDceHzxvfAiBdeL+2szgkUD5NonjQyg8zgWPOfoD
ygfXw3DMIWKOrHixP5wTc8iYoz8SfGg9JMPjXKiYQ2fVQwosu0LHHP253wfXQ+FxLkzMYfPqYfE4
F7HeFXl6V7qorWK9K/L0ruKR7MZ6V5RZ41wJrNtFrBNF3ctxcD10JLuxvpJ5+qq5+iAGhBwK9Aej
if2hKZZdFfeHyusPzXFbqbg/VH8u5cH1kFh21Sji0DRrfGiN20rH/aHh+JBpcTitHR7nOu4PneeX
GIrbSsd+ic7zS4zAsqvjPtd5folRUVvFfonO80t251VgQMhh8sa5cbitTCxXJk+udvthMCDiyBvn
VkQccZ+bvHFuNe5zE49zS7PkKogthYCIIythQjuK+9yymKM/CeLQerhoXmtjX9RmJTdoJ/H4sLEv
avt90YProaO2in1Rm5WVoJ3FsmtjX9T2+6IH1sPQaF5rY1/U9vuiB9bDUB7JbuyL2n5f9OB6RPNa
G/ui9uDzXPrrEc1rbeyL2n5f9OB6RLEMG+tEe/AZPr31YCyS3djW2n5be2g9WBTLsLHetf22tidn
ur8eKpLd2Nbaflt7cD0Mnp/b2NY+so5zcH9Ecxwb2Y/talvHoNLWzw1niKO9NT149PTaxE/7g+N4
IottVJQTmloPPAY5rgdeK0rOnzVGgj5Ha0X1LlQacPgTE03S2oQxqh0fIeCeo4g4mqokrU0Y061/
hIAhBysRB09b8zKWMsDBypgD5xqQxP4I1gdDwJCDR22VllNkbGc/QsCQQ2IOkVoPAzlkxCF3ie0t
gLOP50z31sNR0Od7wIADr915RZBWj2B9MARsOXpziGna+HAy6PMoQbguacTh1zmT8pSN62LIIeCe
o2IxB7V2y3HgGr2lXQw5BAw5cD4DYWlj0NJO74aAgEOAOEN3huiBNspSA+uxAwQcaK+Klmm5OJZ2
c84QEHLA+BV/4hyt3nqwbs4ZAiIONMdJm3NaJgXm4JgD5sP5qyYS66EN5NBxW2mUn524h9YypzGH
xBxQX3GauHZnOUd9bqN6VMhGMZeWX2J5F5MJASFHAXxqndof3HLEUQwxB7SDTCTm7/pJLOSoo3qM
sC7habrdCgHrMYp1yUjk5UBagfpjBwg4kC5J9amt6GJkISDgsBFHmlxJ1B+jSHY5toM8Ma/P31kQ
cuwBA44oN0ol5lNb2cWpQ8COY88atlVa/pWVJrRRLWDIMcR7GhLz+qyiDnAMi5hjWIExaFPthxIS
cmwBAUekr9LmOFYpAzmwvuLxns3E8z2tsizkiPq8b9+bSNsjaHfnjmPAHcdIxT6c0fbnfmLow1nd
zWtDwJYj9uG8Y5JWD93lRoWALQd/guNQP1F3uVEhIORgWXkAVluFOBiPOFA+g0r0GUyXGxUCQg4B
49SJubXWhP3RAQIOtDfDJsZLrOniuyFgwJEdZ7C2WxMOAfccLpYrSV3a3lPrOp0YAu45hmXE4S91
S5NdJ7o+DwARR9bahHXdvrsQEHDgfXepfonr9nmFgAEHw2dpS5XW5452848QEHBsN1Psv+/mBgfW
w1HYH3tAyFHCeHvi2p2jyiGO0mIO5F/xxL3yPisYcljcVrHvo21ifzggV3gMDsu+fRMiaQw6Bvoc
75toHikch0s8g8ExSQGHKmOOCuRGMZ6YF+6YspCjCnOj9o9GWXLFrMYcI8yB4okmcS+Z44xBjhq3
lcSxDKfS5lGOd/s/QkDAocA5cz6iklgPJSCHUjLmqLP6g1uGOWrMgff2JZ775wSjkAPrRGY5nBsw
mrjfwAke6qsWEHJIsHbHE8+Zc0IaxCGLiAOdLZjaHwLoxBYQcKA91SZxjcUJh9oq0iW2Qn3OTOL4
kBy2VRX3eWVqsC/VJfpwTnZ5ACEg5EBniKb2R7BnNAQEHDjOkOhTO+kU5MB2kFXonCDGEu8Lcruz
oTAg5CiALtGp40NBnbgHhBzDPL9EacwxtJgDxV5F6vgI9oyGgB1HHC/RIlFfaRrWA8dLRsNS9Jyp
lLY/ymke1kPYmKMwNa5Hon8V5ECGgJBDg7mBSDwX02nQ5y0g4oB5GSIt7uO0w/XQBeKwaD6oU/1d
wyCHjfoj2l8rEve4OyNC/6oF7Dhkz/mFafESZ1SoS2QPR1Uif1cm3jfnjAnr0QJCDgnyyHji+Z7O
OIk4pIg5qix9ZQXFHBXmQOsGJnFdzQV7X0PAjqMNnLUASifOPyywgy1gx6F75lGJcmVBf+geDlFj
P5Em1sOxUJe0gJAD3JtHdOI6joPxkhYQcgxpllwFh0iFgIAD+YkiMV7iXLfmFQIGHPG+7bT1qOb7
kCOen+vcswUlpRz0R2wH9VAgf9emxfokpWAMtoCAw1TA37VpdlBSCsZgCwg56hx/V1LqBOKoOeZA
/i5LO5ND0iA/MQQMOaI1lrRcHH/UPKzHMJLd4bDE98cm+buSMtTnO0DIUbis/mBwDO4BAQded06L
l0gfBoUc2H70nPuhk+YfknLg++BzP0bD0sS6JO38Ekm5CDlMrEvMfnWnYzCJcsVVaD9aQMTRv9/5
CQ7YH0ZgDhtxsLxxLqhFHIxjDnz+Vdo58JIGe19DwIDDjNA4NzJRrgTsjz0g4KjAvjvGU8eHgP2x
B4Qc0mTMPySVlCEOaTAHjoum+YmSSuYgBx7npsfWJo4PCeYfJra1pmf+kWjPJZh/mB5dUuEztiRL
lCtpAMceEHLA+xhlmn8lKYz7tICQw+TZD8VxPYzDHGicqzR/11+HwiAHHucWnztITFo8UVJlwray
6NzB7SOlhsAOpvpXCvg+LSDk0CqrPzSniEMrzIHj7an+lZYMcmBf1LIRysURMrE/tA79khYQcsB7
wWxyPUAsvAWEHOg+rdT+MGCtqAUEHGgexVLlyoC1iRYw4OB4fLC0dU5JjQr1bgsIOJQL4yVMp8VF
JQ32pYaAiCMnXiK9o4M5KsyBxodIi1NLajmHHNH4iHxRkeqXWLBea2Nf1PbYwUR/14I1ehvbQVta
vI6TFqeW1FrQ52UUC7elNWBfKlOpfkmwLzUERBzDLLlycAzuAQEHmtfKtHiiz90RkAPPa9uNQC2A
tYnj3JlQrlrAgKPPh0uTK+dCnehiH845g+2HSasHoyAO1wICjiFYr2Ui0X4wmCfTAkIOJXL8dhac
eRYCAg40x9Fp+aKSBWeehYAhR3SmbFq+qGQMjMEWEHAwcG4US7zTTjIGfJ8WEHJwnTPOGZMOcXCN
OVAOvU2cDzJmUD2wv+si3a5pan+ANUgX6/Z2w18AkTaPYjBPpgUMOLhDbaVV4jiHeTItIOAQYO7M
RNrdfJJxJSGHQHNn/0ixLLniViAOxTBHdJdPor4SFHFgH66I/ZK0/QaSCTAGi9gvGfbYj6ScVMkE
yMsYxvZjWERxn+R6gHzRFhBwVBrkX8m09VrJBMhVawERR07+lWTBeWQhIOBAcR+Vli8qmRSorXDc
Z1hXOB/OpsV9mNShXLWAkKMCY9Cm2g9pLOKoWMyR5ScyRSOOIeZA+SUs1X7AmEwLGHCMBN4f5RLH
hwK5ai0g5DBg7iwT47sM5uK0gJDD5uld5XA90NxgOEJrd0wlxtuZBvm7LWDH0ea8twA8bd1ZMg18
0RYw4OhZ/0i051qFPlwZ6/ZSRjnbaXvDJdMgLtoCAg6noD1PHR8axEVbQMih8+TKcI44UE5RKUs0
x0ldH2QG+KItYMDh8H0sXCbKldGgP1wU9/GP4Dmpqeu1zFiFOFgdcfCcvD7JLFibaAEBBxrnqevn
DMZkWsCAo6B4j2Lq+LCwP/aAgGNYg3iJS/VLLOyPPSDiyLODDuRst4CAA+9pSPVLHMhPbAFDDh3t
m0icRzmpAYfu5cjZRy8ZzMVpAREHjIumxhmcs5ijwhwoD8AlxkU5ZYgD+4llNK+ViXaQU7A+WMbz
2qpn/pG0H0dyCtaEq3j+UVkc62OJ8RJOQX5iCwg5YO6HTvSvOAX5cC0g5BiKnHHOGcf1GArMgXLu
RKJ/xRlYr20BA45RiXV72r47yRnwS1pAyAHPgVSJcQbOgF/SAkIOdM5d4jjnnON6WIs5oOwylXZn
sOTBOV4hYMexvy0c7GlI6w8O1gdbwICjZ/0jcZxzYAfrWJfUNb5fWaftK5Ic7l1qAQGHMjDOkOiX
cAHsYAuIOLLiDBzmybSAgAOtFalEP5ELoBNbwI5jFMlV6rqB370UcIxiuRplz6O8hxVyxPOokTE4
hpwYL+EwJtMCQg5TQX2V2B8SrAm3gJDDZq2fc2lxPazBHPiOw1S9qyiqBx6Do8hnYIn5DFzx0NaO
Ip+h2kva89fVuArXBzvAlmN7VWDHwZwWezt42F59yVUYI+sAQw6FY0tpe0wkV04DDiUjDo33xPGk
+wcl12F/dICQowRrRcYlnZchuQ51YgcIOJDvw9P29kmuDapHEdUDx3eZTNSJOlyv7QD3HD1n6XV5
fYfKlQliZPFZeqO6nyPlPEvJjdjfK3529YXUs/XyoecCbcmD8ztDYlSW/vMoDq5vYMsCQMCRdx5F
E+CAHBzXI/cMEsltYMvq6KxT/yg7D4VbyUMO7IfVlNYCzeNVYt61tyohxx4QcFQjA/ojMb+JW2sh
xxYQcfSfY32oXLnuvMgQEHHknGMtuQvOzwkAEUf/vaoH10MzzFHHHP3nJh/aHy7IewgAAUdN4fw3
7Y5mv98P9ccWEHHknCUvBeUMc8iYw+bVI5jTBYCII+euHimojtoqkqsaxbmS62EN5qhijpwzv6Vg
NGqrSHZrtL8itR5MINmtwf4K/widN5y8v0IwDXWixHo3PttGJvoWgplQJ0Zn29Tt6cChLrFJ9kNw
Go4P28PBa+RPmsR5vOA8rEcLCDgcOCOUmcR5igju3gsBEUf/ufsH6l3BgR1sARHHk+fu/5wjiDsG
gJBjyHPshxAM9ccWEHHk3FknhRC4P4Yi5jBZ41xo3B9DE3Pk3H0hhTBRW9mYo8yqh6Qcc8RyNcy5
O0kKyaO2iuWqZHn1kFh2SxZz5NxxI4XUuK3KWHbh3DS9HsAOtoCAA61V8sS4vFAUcRRYJ0axNJ4Y
rxNhXCUA7Dj68hiT7lqQQsnQL4nyGP2jAq/rJu4/EsHdeyEg5CiAvtJp5xlJEdy9FwIijn5f9FC9
G9y9FwIijpx7jaS/WBVzqJijyLIfYewmAEQcOXfWSX+hHOYYxhyjrHGuncEco4gDnRWRWg/DcFsN
Y9kd9q+BH1oPA/zdFhBx5NzdKkW4xykARBwurx4Wy+7QxRw5d0BJfzEF5ohld1hn1cPyqD9qzIH2
tfHEdSt/WDbkwDGZOF85dV1XWAP6I7YfcW5esv2wLuSIcvNqWjKF1ntE2jlZUoT5NAEg5FBgfIjE
fVTCgTlOC4g4+u+TO1TvOsUxh445cu6Tk/7wJ8xhYo4yx35ICuacLSDiyPJ3JWUOc1QRh87yd/2G
e8ShWcyR5e9KqnFbaR5zZPm7fjMj5ojlSufcmS39hjDMEcsVuuc2tR6MY9nVw5gj5+49KZmM2iqW
XXQ/bHI9ojFoIn2F1nV14vq0T9SCHBLrRB2dbWPT8lAkB3awBQQcIwnOTRbJ9QBxnxYQcWTpXb8A
hzl0zJGldyV3CnOYmCNP7woQA2gBEUee3hVg/aMFhBwqT+8KEANoARFHnt4VxmEOHnPk6V0JdeIe
EHHk6V3Jsexie+4f5eldKbHsqmHMkad3pY7aKpZdnad3pcPjQ2N9VSJ/N/EeNikV9EX3gAFHlE8j
Es/1kwr6ojifpqZ9+X9J989IqYDejfL//COOc10S83ylAnq3BQQcmfl/UlkHOWD+3+5R/9z5UL2r
wbpzC4g4+m3UobKrgd5tARHHMMt+aKB3W0DEkTfOtYn6o4w4bN44NxT3h43l6pH73g+th+EMc7CY
Q+XVA+jdFhBx5NxhLqXRUVvFcoXu5U6uh8Wya4uYIyueKC2N2iqWXZsVT5SWRxwjzBHfcZNYD0Uh
h0Y6Mc7zdal+u9Wh/YjyfGtWRRxEJZ2PLqUNcokDwIBDoPsWGWWJdtAFeXMBIOAQIPeD0cQcQ+mE
hBwC5n5sH/Xnfhyqd11wN0wAiDj646KHyq6zAnMUMccox34oGq55dYCQg2XF2xUNx2AHiDiy4u2K
BntLA0DEkRVvV1RrzKFijqx4u6Jh7LUDRBxZ8XbFaNRWsVyxrHi7Cs8bDgARR1Y+nArPGw4AIQfP
yodTLDhzLwAEHMinton7PhVzaAxKrBPjPRwsbd1Acah3o3UD3nOmsUjLW1LhecMBYMBRa3x+TqL9
8OH1kGMPCDkY8EtYYt6SCs8bDgARR1bekuLOYo4y5sjKW1Ii2NMfAEIOnpW3pITE/cF5zJGVt6RE
mGvQASKOrLwlJSzuD25ijqy8JSVp1FY25sjKW1IyuF8jAEQcWfFEFdyfHAJCDpEVT1TSYNkFd57u
HmXFExWILXWAiCMrnqgUx7pEaMyB1g1sYt6SUhKND2Q/tksVcI6Taj9UGGfoAFsOwWL7IdP2ryoV
nC8VAAYc0V6t1PVzpcNYXwcIOJQA57XwxH0sSodrXh0g4sjaN6HCs20CQMSRtW9CaaMxh4s5svZN
+MA35qhjjjw/MbxnKgCEHDLPTzQS9we4O2n3KGvfhI8eYg4Zc2Ttm1AmON82AEQcWfsmlKVRW8Vy
JbP2TajwbJsAEHFk7ZtQVmG5krHsqqx9Eyo82yYABBz4fPTEc06Uo4gDxa9EfL9far6ocqEd7AA7
DhWfc8KS7suSyoWx1w4w4HBo/ZzIxHOslQtjAB0g5ID51CZxH4tyYAy2gIij36c+UO9qSi3mEDFH
v746UHZ1eN5wAIg4XI790FQZzOFijqx4iaZGYY4i5siKl2ga3EEbACKOLDuoGYvaahRxVFl2ULNw
L3IHiDiy7KBmCrdVFctVlWUHNbNYdisbc2TZQQ32eXWAiCPLDvppE+aoEAdaP2cs8b4TDWIyHWDA
UdVojkPT7r+UmhvQ53tAyDEC53HTxLiP5s4gjlEZc/TPnQ/VV4IzzFHFHP1+yaF9LqAd3AMCDoX2
CafqXRHuu+sAEUfeOBfWYA4Zc+SNc8k45rAxR944l9xhDhdz5I1zqQTmiORK5e0T1tIwzBHLVd4+
YR3eARUAIo6seKJWDLcVi2WXZcUTtZJYrpjBHMhvd4lxH600qgf22+M7aFVinr5W4f6PDrDjKHr8
9rR1A5/YHHAUsd9eWHTXtN+ckVYPHeaed4CQI+v+ZKl1uL+2A0QcWfvVtNYUc8iYI2u/mtZgztkC
Io6s/WraUNwfsog5svJLtAFxuBYQcWTll2gTrkF2gJBDZa2fa6NxW6lYdlXW+rk2Ye5HB4g4stbP
tWW4rVQsVypr/VxbgftcuZgjbz5oFR4fKpZdlTcfBGfvdICAA+Xi6MRzxbUDvk8LGHBEMX2beO6+
dgLoqzimP+zJe02L+2inwnjJsIdjhM7L8EtJifUI9yJ3gICjue2443CJeQCGAjvYAiKOrHO8DOUS
c7CYo39d7UDZNSAXpwNEHCbHfhgartF3gIgja73WUBf1h405stZrDQv3IneAiCNrvdYwwTFHhTkK
mrVeaxiIw7WAiCNrvdYwIzFHJFcFzVqvNSzMy+gAEUfW/g8DcnE6QMSRtf/DcOCXtICAA+535jTx
3GTDNWortN9Z9OxFTtw3YThYE473IouefRMs7XxbI8K8DBHvmxB1hc42JDzx3i8jQByuBQQcAuwF
YCrx3H0jwryMDhBxZOUtGQH0bguIOLLylowAcbgWEHLYrLwlA/ZgdYCIIyvOYGR4BkQHiDiy4gwG
7MHqABFHnh2UNmorG3Pk2UEF1iBbQMSRZwdVmA/XAUIOl2cHw3umAkDEkWcHwdk7HSDiyLODyuE+
dxpzoFyc1PvkjGaoHjimH++bSL0Xz4Czd0S8b0JGZ8om3+9ndGhrZXymrL91Hp9N5RLtBzh7pwOE
HBUYg9am7YM04bnJASDiyFr/MODsnQ4QcWStfxhw9k4HCDnqrPUPY8Ix2AEijqz1DwPO3ukAEUfW
+ocBe7A6QMSRtf5hLMeyW7uYI2v9w9hQ73aAiCNr/cNYHbVVLFejrPUPYy2WXTh33j7K80scxW01
imV3lOeXuDAW3gECDnTeEtWJ+sop1FYl1onR2oThifYDnL3TAQYcPfGrtPmHBWfvyPi8cElHFV4r
Srxfw4IzlztAyAHPepE8bf3DUqh394CII2v+YcGZyx0g4siaf1hw5nIHCDlM1vzDsjD22gEijqxx
bhnH/WFEzJE1zi1TuD+MiTmy5h+WGSy7xsYcWfMPG95lFQAijqz5h+UsaqtYrmzW/MNygWUX7nHf
Psqaf1iucFvZWHZt1vzDgrhPBwg48L1fifcbWEFRPVBMX8bnhZPEe3Qs2IMl4/PCJcu+n8kKCTji
+QfDtpaIxPUPK4DeZbGt9Y8cGB861X6IcK9lB4g4+n24Q/WuBH3eAiKO/jzLQ2UX5Pt0gJADnVub
aj9Avk8HiDiy1mstyPfpABFH1nqtBfk+HSDiyFqvtSDfpwNEHFnrtVYBvdsCIo6s/F2rwnXODhBy
DLPyd214X1YAiDiy5rU2vC8rAEQcWfNaq3lUD4s58Fl6qfYDxn1awICjZ/6R6LdrDXRJPP/QPXvD
086Nshr4uzq2H1ri+4pIYv6uNUDvtoCIA/pXieewWANsbQuIOPLshwn3O3eAiCPPfhigd1tAyMHy
7IdxuD/geRnbR3n2wwK92wIijjz7Ae7a6gARR579sGHOXQeIOPLshw33/HSAiCPPfjgatVUsV3nn
ZVjH8fiAe/W3j/Lsh5O4rXgsuzzPfjhgB1tAwIHsh008585R3B/YfujIfjidZj8c5UB2Y/sRn21I
eFr+lQN3bcn4bENZDiu0/pF6/pWjIN7eAkIOeIapSFyPcjTM8eoAEUf/3PlAvetYmGvQASKO/rjP
gbLrWJhz1wEiDptjPxxTuD+UjTmy1g0cM1F/uJgja93AMRf1RxVzZK0bOM6itqojDp21buDA2Tsd
IOLIiic6sM+rA0QcWfFExy2WXXgm+fZRVjzRCYrlSseyq7PiiU4I3OcoTl0OK7T+oRPzfZzAYxD7
1GVF0T1xqXEfJ8D6RwsIOWoQ63OJ96Q7AXzRFhBx9OfcHaqvZLj/owNEHP1ydWify/DugQ4QcVRZ
eldqizmqmCNPX0kb9UcdceStczpw5nIHiDjy9JXiWHbROmfzKE9fKcUxRyxXeXnITpmorWK5ystD
dspJzFHGHFnrH06zqK0i2XV5echOh/vPO0DAge4wp6n6SmvUVtgXjc9iNYn5ok4DXzQ+i1X1rBuw
tHt+nAnXnVW8bqCYdPieOJW2fu5MOP/oACGHAPPz1Hv7nAl9nw4QcfTvJTtU75rw/KsOEHH0r20f
KrvgzOUOEHJIlmU/wB6sDhBxZK0POpDv0wEijqz1QWcl7nN4/8f2UVaevgP5Ph0g4sjK03fW4fEh
Y7mS/XJ1aD1Avk8HCDnQHsXUejiBx4eKx7nKOr/dOYXbSsWyq7LOb3fgzOUOEHAgvz3xXmQPh/qj
xDoxislYnWQ/FAVnLqt43UD1nCkrk+yHohT0R3ymrKpMjW0tTYpf+eOpw/5oAQHHkIP7iljaPkhF
wZnLHSDiyLmvSFEW7vnpABFHzn1FijJJMYeJOXLuK1KUAZ3YAiKOHD9RURb6Ph0g5Mg6X1RRDsZg
C4g4cuygojzca9kBIo4cO6goD/dadoCII8cOKso1ll0Ry5XIsYOK8mgMIv+qeZRjBxUVDI8PEcuu
zLGDigqJ6yEjfYXWUk3aOROKivDcwQ4w4OiJ6SfFfRQVBvR5bD9GPXlLifZDhGeedYABhy7w2YZp
920rCuI+HSDksCBeolL7Q4a5Hx0g4uhfuztU78rwzskOEHI4mmU/QNynA0QcKst+gLhPB4g4cu7H
URTEfTpAxJFzP46iIO7TASKOnPNLFFUay64bxhw555coqsJzPzpAyFH0y9Wh9dAMy24Ry1WRc36J
olpg2YX5cNtHOfkMimqF26qIZTcrH05RHeYBdICAA+W9ilR/11A0PizWia7g2EYl+u1GgHrsAQGH
GIayy0za+rmiBo7BPSDkKPtl91B9ZYAdbAERR/+89tA+t5RiDhZz6Cy9a0VUDx1z5PmJVknMYWKO
PD/RhnkZHSDiyPMTrVOYo4w4qjw/0XHc51UsV1VOvERRB/2SPSDiyImXKOo0HoOVijny7LkzDnPE
sltl2XNGKZbdqsAcaL8zS8tPVIxyNAYl1onRXjJNk+LtilEJ6hHtJdO8Z92AJvntDNyD1QEGHFqi
dQOVlu+jGNiD1QFCDmA//N7wtP5gYU5qBwg58uwHA3uwOkDEkWU/GNiD1QEijiz7wViodztAxJFl
PxjYg9UBIo4s+8F4qHc7QMSRZT8Y2IPVAUKOPPvBeDgf7AARR5b9YODM5Q4QcWTZDyYoll1oP7aP
suwHA2cud4CII89+CBVxFJgDrRuwtHsBlHf0IUeJdWIU95Fp9zsrJhwYH1HcZ08K+iNpv4FfaA7l
SsY2SlYccXCbFvdhMlyP6gAhB8z9cInzDybD9Y8OEHHk3POjmAzPPOsAEUfOPT9+AcpiDhdz5Nzz
oxi4B6sDRBw5+e2KKRn1xwhzMJqT366YCtc/OkDEkZPfrpiyHHPImCMnv10xHeYhd4CIIyd/VzHN
JeaI5IplnXuumJYWc1QxR04+nGJaR20VyS7LOvdcMe2wXMFzz/0jFJNxqfMPwxzkQDEZrbaHzIbr
zmnnbCsG7sHqAAHHCPSHF7zEeoT7cTpAxJEVb2fgHqwOEHI8ci/yoX1uwzt4OkDEkRVvZyAXpwNE
HHn+lQ3XvDpAxJHnX4FcnA4QcWTF25m1UVsNY46seDsDuTgdIOTgWfF25jhuKx7LFc+KtzMXrjt3
gIgjK97OnMZtxWPZ5VnxduZc1FYOcegoFydNX3HK4DjX2BdVAnOYxHwfTsGcswWEHBzMB1lanqXi
VEnEwVnMkbM/SnEK4gwtIOLI2R+lvMuGOUTMkbM/SnHGcX/A/YPbR1n+FWdSYQ4Xc2T5V5xphzmq
mCPLv+LMRm1VRxwiy7/inDHEIWK5Ejn7DRTnHLeViOVK5Ow3UJwrLLswF2f7KGe/geLcRG0Vy67I
2W+guKBYl8BcHP8I3W9gE/MsueCorSJ/N4qFs7Q8fcUF9H3iWHgZx9t50v04iovwnLsOMOSQaG2C
pNoPAfzdFhBwKHDnCxNp+yYUl+F+gw4QceTk6SsuwzWWDhBx5OTpKw7jPi0g5FA5efqKw7hPC4g4
svIT/W5LzMFjjqz8RD+zxRw65shaN+BKRG1lYo6sdQOuwpy7DhBxZK0bcGWitorlSmetG3Bw11YH
iDiy1g24Du8Z7QARR9a6AdfA92kBAQfOHUzVV+DsnQ4w4IjPZ0jbH6U4OHtHx2cn6HhNmDCRZj/A
XVu6Z024vZG5BVCJ+T7cgPlHCwg4BIiFc5q231lxA+YfLSDi6PepD9W7Bqx5tYCIo/88mUNl14L5
RwuIOEZZ9gOci9MBAg7sM6SOc3AuTgeIOLLiDByci9MBIo6sOAMH5+J0gIgjK87Awbk4HSDiyDmn
SHFwLk4HiDhyzilS3IX7zztAxJG1jsOdjdoqll2WtY4jwLk4HSDggPaDucQ8S0HB3KAFbDkMpVi3
y8T5h6Dh3KAD7DhMz/wjbb1W0PAMiA4w5MD3GxCZZj8EiMl0gIBjWIR+ItMusT9YmAfQASKOrPVa
AWIyHSDiyFqvFSAm0wEijqz1WsHC8wA6QMSRNc4FiMl0gJAj6zxLJXiY99oBIo6s9VoBYjIdIOLI
Wq8VPIyLdoCIIyueKLiL2iqWq2FWPFGIUO92gIgjK54ohDCYI5bdMiueKMB5yB0g4ED7vLhMi18J
YVGfl1gnxvMPm7bPS0gK+jyaf5hhz/3OOs1+yPA8sg4w4Bg6vLbN0uZRQobz8w4QcIga7DdwievO
QhoFObaAkGNEs+yHDPfEdYCIIytfVKgwL6MDRBxZ+aJCSYs5dMyRFfcRKszL6AARR1bcRyhHMccw
5siK+whNo7YqMQeeq6XWQ4f5cB0g4siK+wgtHeaI5ArP1ZLrYSTmUDFHVj6DAPdgdYCIIyufQRiu
MUeBOeD8g9PE9Q9hJGorPP+I715mNC1fVIBzcUx89/Je2YO2StsnLEx4JmAHuOdoL3UL41eM/5Tj
DnD4OyePj4//IOfXV6PxD3K6rAvy9fj4OHgpPDwnYG0L0jehk2mLPSJM2BnFE7rdI6hwUh2LMGEn
AEQcORe9KREm7ASAkIPBeiQmVogwYScARBx59XCBcg4AIQfPq0eYsBMAIo7MegSLVgEg5BCZ9QgS
dgJAxJFZj2DRKgCEHDKrHt5sIQ4Z10Nm1UPSYNEqAIQcKrMeCreViuuhMusRLFoFgJBDZ9bD4bbS
cT0eufTr0Howhse5juthcuphlPa6/eTkxN81QZUj9Wy9HNcrsvo2XizqqvlV+Lq/u3Rrk95fkM+b
2Xo8rcl1vfw+LusVNE7+UthAaOvoptPAdAYV+LmVDIyTUeHJhwFgwDEcolmvU0kehVHhDvgAEHLA
Uw+0SFpJMsoEEf8AEHI8cupBj4fn/yCBMsoIgTiKqB41yCBmMi3CbJRRiKNmMQc8FSTxliyjwh3w
ASDgGBWhx81YModDfb4FRBwoMpvk9BgFnLcOEHGgVbdUDi4wRyRXoyGKPCW2lQ0izAFgyFFSeLqJ
S66HhuNjB4g4+jN1Dh0f1mrMMYw5qqw+d0xhjgpx1OCmIel3lCRyoHFew5uGdo8Ojvj3tpULTgAO
AAOOkprwRH9ueKpxcg70xx4QcFgQ3WI6LYPY6HAHfAAYcrBhWA9mbdrkxmgKx8ceEHLAFZjEmyKM
ptAO7gEBB75xb1+PA/tc0+Am4AAw5MC77Inc2dqA4+r6HHCEtlaHK2IBIOAYAueNSfV4pKO3Hgz1
xw4QcYx6dWKP8+b//MD9Ea6IBYCQw/TfmHRwPZxAHEbGHLpXXx1aDx5kTgWAiGOYVQ8uGeYYxhz9
evfgemjc56aKONAtpMn1sLjPLY85VJZcCYb73KqYo8iqR7haFQBCDgfbSqTWQ+M+d3FbOZNXD4v7
3JmYoz8af2g9wp3jASDkQH57aj2kwH2O/Xb/qD9SfnA9FO7zgsUcB0fK++thcZ8XsewiX1QlypWi
GnFgX9Q/ypMrxXGfD2O5GhZZ4zy8WTMARBz9GXkH1yNYwQ8AIQc+CSZR72o4r90DIo7+lb1D66E5
HudlbKMeOQnm4HpI3Odl3OfolJbkehg8zsvYLykPDir118PhcV7GdrDKs4MG+3BbQMTRv7Pp0HqY
yIerRMxx8M6m/nrAOc4eEHLUUCeqRPuB4gx7QMSB5CrRb0cxgD0g5EC35/DE/rASy9Uo7vNRnt61
BsvVKO6PUZ7eDU/aCwARR57edQzrkhHWuwpmn2iWOud0Aup2xaN5lOIKzD9EYsxSO+TD7QABh1Ao
k439NPYKOQxsqx0g5IBzHJZcD4faSkRzHCVgrI/TtFiGoUwjDhzrK5WoQFslnsZkDFjA6QAhB9Il
LpVDccQR6RINYgCc67QsAWMosoM6jgHoogD10GknJRlDHUUcRVyPoj8GcCgHoxZz4HGuC5T1l9rn
DMWvdoCQowL1YGm7XIxhyPfZAQKOYQ12YtK0E8uNYRrajx0g5EBZZokxZMPgOs4eEHHAuGhiPNFw
yjAHjsPp4SMnVx1oPwzHfT4EJ1c1j/Dt6IlxasMlGoNxrE+XKKspMWZpOLLnO0DAAU//4TSZA8XI
dI3rUeHbD4TlSTFLIxgY51UdtZV/9GSG5NXZO1CJqM8F1Lt7QMCB20qmxfSNsIgDt1W7hNtiKEHT
2krScJz3rAmP4jVhkrYmbKTPJm1WqX8d392TD/VyVk/IZbFYjGd3aJHaSBEOplG8gDwqClQgbZK2
khgjVehUtoABx5ChdGO2TzfuaVifLfAj4gCd1wJCDgOvlaBPp+li59jA4EoLCDlQ8PGJRYaerAdj
lKCIAwUfm0dJW8bieoDgSguIOJKO64o5LG4rO8IcMIWWSZNYD81QW8mozyW6bpeox5Vbr1xpOD72
gAFHnLJpk1LljWmuMWgG7OW82kyiTBITnncXMAaF2KuStgyUJu1bM6bJ8tjmtsyqRwsC3MaWFRQE
jWRCErWFAea9BQQcyoTTEaHSDt4zXu3tKvt+/GNaLHqSS40xwOa0rLAgcL6t0na0GwNjLC0g4qh6
/fDPfyNXf7sBtrNXpVgqMUeFOeAw4TRxrdrAGEsLeEx/UPQngEiUUOczzX+7vhyQ8Wy8HheT8b+8
QZuspm8m8/JbNf9zdlQWi2I4nozXD0cPxbQ4WtWT8Wzz42i4GB1NilnlXzwaT4uj+vu0g7bNxtD/
KqbFgAzrcj71uNPxrBptJifha35v5/X5bx5yQMhFUIzwtcZB/e36kqw2i8V8uSaj+ZLUb6/ek6Jc
j7/X4atevewLNiBfFqSYVWS5mc0QpvQp15fzzWx9XBblfU3ui9U9WRfDSb3PWhs0WWyGk5fzZVUv
B8QeEebvEDKaDB/W9eqITMazuli+CnCVX+xqcBfz8b8Z3Fkfmf68rQz5fPaFrB5m5f1yPptvVmRV
T0ZkXa/Wq/AL3x6HfyEsb/acrKaL4Xy+HpCzqy90QE4v35HPD/+qZ8QR4xT9O2H6+Gy+rMnVcl7W
q9V8SV6Oiul48jAg9AdzR2Q6r+qJ/0GzI7Ja142z5H/mrwIy6w+HCIt3U6y+rcifxXhNTq8uekoo
HW12zMcffd5U9U++bM7Ci7+8WRblTz71Z3h+JVf1cjRfTotZWZPz7/VsvRqQ98WUmfv/9C1S1fWC
/Pb28xEpfdss6uWoXC+Pmua7uvxCquX4e708CVCZX1L0SZHf6+VqPJ8N8Ijl4cs+1u5fHo7X5M9x
tb5Hr0sbvM19tMC/fVfP6uW4JMv6brxa18vV7isdvuw3LTblKCabmkyL1TeI7TXNKPgTfuvDRP7b
afHD13k8r+JvzSPfyl0hR+MfdXW82CwX81VN6l3bEkLDl7228C83v36kkN0fERI17tNqfDcrJoOm
oKvx3WhZTGuyGv+rHhAhTNgeTfrkstwMyK/jelksy/txWUzItZeZ8XQxqaf1bF2sx/NZ2JvGJ+A1
X/3HpW+L+2JVk9n8uKonxQMZz1ZrLzkrMl4RSWnwpWimSh8vL8ifxbq8r+Z3A3I+8+qiOvFCNy1m
9Ww9eSDlfLbaTOsVmc9qcv/nsZeq0isbIFayOddlNV0MyNvleHbnpX2zIKu6nM+qYvngR/XKt2T3
iWp6sR32P6wekLfz+dp/en155YlH47vNsqnzIPzOG/UT3yuzeVUT8oIeNfBtz7xghLzghLwQhLyQ
3Ze6GcZnxWQyLMpvZLScT0lZTCa3y3Jzu/bj8nbtx+XLV2Q8+z7/VldBcY30+ReEvFCEvNCEvDCE
vLCEvHDkBaPkBWPkBePkBRPkBZPkBVPkBdPkBTPkBbPkBXPkBafkBWfkBefkBRfkBZfkBVfkBdfk
BTfkBbfkBXfkhaDkhWB7br+R3yfoXy/qcr2sye+ceDNTFeuabFb1kqwWXplcX96Q6Xg9vts2GLm+
uXh7RYrJn8XD6ng+a9Gks35f566v5pu7+7XvKta05hERvGnM8PVd12776Wa+LiZkPvIvLvaqeLU1
i8W6rshLbi2l/ERo8nZ+N7+8uLpu9a9Stgn3VfX39XQxWgV+QF3hl35Y/Xo6HZDLejpfPpCht6+7
scOptJdv2w+0bsp4enZ1MSBXlwPyead4vCz5p+Tj79eNNprPyB/TekroD9rdnuX/6bXEV/JSKyV2
1vBVCO+1eBK8kaN9+prRo8Ju4YVQSkrBMYMRykfwD7eayojmJPCUL7bZVu8uT49PfUUWy7qYTOZl
02nbelf1cHO3dxeCD7l3P9sPm7eaEV5vFQYZPpBv2xDFdtCGn/ps0dJ33Wq+WZb1gPxjPBo13shW
m3Yep1eSt+VDOfG/7B4fNc/H1aS+nXkfxjHGNZVSc9MsXM5ASb2DOdqs6x+9DpBlLsH9Ubvg9GJZ
zKr5dEBWta/sfLNVaW0bk0WxWgXy62NELPiMURp0SM/bfhK8GM/K9XLS2HEwLNrfrDbD1cNqXU//
R/Ct9VuQ/przJwTzl2H89a+NEv346ebi7DzhL0IIBHMd2HP+ALDmiGcPdvHp8vILeedF8P01uf5y
dfXp8w359fSavD0//0jOP56+/e38Hbn4SG5+vbgmH84/fzz/DYP5aOe/rWQ+leavfyU39+MVmdbF
bEXW98WarP3Pu1ExXpHhZjxZk/Wc1D8af2PsDeismCAw2fTmrpZVsS7Iar3clOvN0svnn/fj8p5M
C2+Vp4vlfDpe1d7Gbpbj9QOZzxCYvz7lr38lD/PNkmwl5+T51dT/zt70y2O+miNfOD+sts01rVer
4q5uJlD+F8XSOzPrQOOs7+sIzDu0f/3rrq2PyLJuJmwN4Hg6ratxsa4nD77tm5b4Xs+q+fJ/eaRk
PmH731RNS/dC+28YTpZuhfbfMtAt9b3ZWLKbM+J3QA0IswMpBtIdebFrTCyXx1Qfc9V955g/oePj
+U1nAuuKXL2//Xh+89vFxw+vr97ffv705ebcewbreTmfkO0UrYWwdG+EkAGS1GnyYfyW/PL+6nY3
ahdzDzBfkmI9n45Lsnt7PA9UvqXC+2UHAf4//p/vLk8PBFYyFdi7RAdBa86/kmJTjdcoEjKr15Px
7NtO15OX1XjVmNjOJlnGhWs/Xj8s6jfN+mvz4KW/j0JIRrk7kZQP2KsBWa2Ldf0mNCjNq7c74/2G
kmW9esMCgubcj/W9nwRMblcPK9Dbu+fkbv69Xs7mS/KXUTFe3q7ui2X9lxDEp1YcDjIsZne3/j8A
wx8OcjiGn/Pf/jlewXL4adjhGN6hvm0c6gCEN+vg5WLjvZAB2ax8V7XfTOvZJnhX+mlNUS7Gi/vF
YOse/jpfk6vJ5o5cnV2Qs/lsvZxPJvWSvGtm591MnJ6oAEh53+Pq7GJAzs9OL/eOZd1Fjuudh/SV
vBz6eV/3y1eNCFbzaTGeNXNU8sdwsyKUHo9GX1sKxy3dU3xp6gTmXI1wEdZANfhF6b397nMhffrl
t8VyPvTO1fYf5B+b6eJ4vliPp+N/bXHGq72neEJOJ5P9F416371YV2Q8Iov5ajUeTuqTjkNSn77/
6+auvvnt7aCNKNQVYSeUkl/Gb8nCmww/LzjyA/W4G6m0+dXqUTCmhaXNUP4+rac+hlwWMzKsyWjp
Hb1mFEOaQ8rF/QeXOeXi9meFAhwdjmpukXxXT+fb/iuWd/V61Xzz0U+V6YDMNpNJ94FuJpbl8mGx
rgZb/3uxuf3npJ6RVd24K36JtnvfUJ9kvSzGlR60O2wX/yTDelbeT4vlt8Z0r+pJXfqKFt9/KMZ/
yEcAtuNo9xIny7r0Q+qBFJO7+XK8vp8G33GfkTkaln6Y3BTf/If+5SY8MZ8EbWCaW8q2c7XTqqor
cvvp+uLldjWEvKv9Pt9X4HXZ83oXZOz7Qvd8IU4oub0+uyLnP9b1zI/nFfzIPElzene3rO+Kdcyo
GW0Orn4ybrHcVH1hC+1csz/6qW97PrOUqq4VmdhqsdPL37bzqRVZbRpVMNpMJg+kKP+5GXvJ930/
mRdVN7mxmtKu4refrs9I7eN9W73g5bKJC42K8aSujsh6+eA79vbq3VmHII1Put8inJ/5/3uTtlyH
LLI5aqR7p/Gul5vFehs1CF91RmsId3t2+e71+dnt9dkb+kPrI//o3enNqf+Jhx/6eOz2w//79v/l
7k2Y20iyNMG/4j1ttkWaBNDvA53KahCklKwkJTRBKbMqVwYLRARItAAEMgKgyBqb/772PC6PAxfF
mhlbWlWKBPx9fj93f+fofNwdDq5wd3R++6F7OcDjVHqFLkYXd9DGTQLnS4QeQDMQonXsLRMQkjgX
AcAsBQtX0OZVHK7DOGeXTkEruiolECeZXiJBI4xGDI04GolTtzzIE9LyKWu/+tQfXg3smJejE0cb
kLcVdEoY2J/OifAQJWs0iWfBfYi+z5ZB9D1JFxFg/wcw7WUIS8GLn99Cn9H/WPmzd8vIj5P/kSpC
0uu4hyabSj3wBLD1XN0vIytJudTU3kXC+DG9MNnGtjSggNGY8HLeM2GEQh+GlwmaLTOJEcaWj73P
qQzVVi3YmMkPwyHu3lCmeuhj+B2tou9hDO2xcouS2jBttlGPfvs82g/BsPXf2wEx+u1iHw7vYpqa
TGSrYnCFbmEBnqdj9QdAfkUnWy4Bpw6KgNsN3FjQ8OMQ97HuYZzu1h76NELFUvvDsrYgDAb2moD6
o+ENGsAgD2/QKLwHCXWCbkZX6PLiFv0y/L1z97wK2deyKsNgL2+vahl9B44O96PE9iD8JVqv4OY0
+mU4yH8f3lyi/uUtdDkcFNpCdH13iy6Gg7I6BgH+7SqrrKJ1hNJxwLiXH25pafBAXfmzsfN1D8Uw
qPBJPv7oj1mEUKoWBekh86bZyqxUDXejI8BYaMH8qWoDg2P6GLBJ2rKgrWU2TeERYEGhaG4Dowe2
LJO6Ypx7fkHwom2gcGYcDupaPMlMltgCKo5qaZq7sWG20AYMsudDgOtXcEttT5WVPysoMe7iHvqD
YEp7hAfwFIN7OMbIn3tJAoOY5ivwoyVopWYRiJFgkYfLwGqAS3SRr0IXnTropgVdA/4h6JIoVUMn
lbZ7P9J2qcC4soZOHPRJjk5cdI6xZQwpMxxGsQupMW2DhAaUzCGdJ9LBDudiUhPZRoqqZ1O+aRxD
qQoIaNMPAEmX4NQxG5f+tAEGFjCHgxVaSoDTuWoVSQ663VUcVrCNbMUe3lz+e34ewGMELgIXGF2w
B7j5MD+aByWIaptA+kMTqNomkLZPIP/q0tHm7NEdAz+tMxQXzND6pkobcczgaGHqe4e+3t4xpAX9
x/aOobQVsm3oRQcHX11SXl8IdOeyJ+Xoi/roG6uTPxxMM5tMOFv2DLMdyx4EIm3Y9jpur6jZBQjd
efeJQ8dkfXnRY7cLx1TzBsgPbReOGWmFbJuz8KtL11jhdOd2Kc2sZVibMI55O9hRg0OwroOwV9su
HMLe19D566HT5qrSr4iuRX2OdWWrB0cvG6p1fTj0tq3uzjTVprUpW87IsJRiuiBW1XcASL72ygCs
0tTXHjW0fo7tBNPUPSMZJtuZBaemcf7qA5gFZxjXLwH6aGbBlGmuKfZDs840qW8xC9ky6wR/delY
sz9sx4QF5YQF9QljWtQ5qQXbO6jWI7Wl8ccMKheytvSIwwaUwZOWjepDrORDNqogyjTQmYMetrIB
ciC6VrVZIBUmE+IfYTKpnLiG7jCZkPwQuk1cWUN3Tr6Q/hC6oLiB7myVkP0QumLNtnMHnf8Quqlv
B6K7wkEXP4KuiNQNdOmgyx9CZ/XXIdFd5aCrH0I31Rs9Kd/NoPe0mqldDHD0fbb2H9DnVbKOQ29R
44XKVA/VHP28f4twyclKLznp24vlVxeiut1ziLZDlFbemlwZ01r7MW9NnlofHADS8tac1NmyxvQo
sCPemlwToVsH6hjWbbCqn4cHvuy5YVXeRusryRy0ki6i78vWtWQ40234bU2rtIuL1nYdtQrAMPcg
kENWgbG69MPBjlkFxiZTaBmlI1aBkKZ9me7fc0KxqnyHVVaB4txv4Vb2YZmuguvw3vOfwfGqyqiE
YrwVuMpKKkNVWK63DhWYfpptiLS8yh4++EKx6uvKReT1BYanFVJevc26pKJ1WXm1ZSUUp60jdPvp
pgSYOOvS3sobfRCmdVRaFxBBF3TLGtKckAYOyReCN2FtFykOS2HPQtBWb9wErp0pNthX1lFaPVOE
tlbCTYhj+2iY5C9gScLI6lOe55tEYy17nPC2sQFBOk3HpjkoxjpONhFrgzItQjDLKWHFOq40Tbc2
rbKIXKkebllEMtUnHi1fhPioleNHVKT4nE35D9xGJOZataG3tUpWRG8SC8zaSF8iepNYUHoM2BGi
N4lFlU3m2HsefhJL0dqmY84NSSRvl9/tlW1KanCF7cj6zIsfuj1IaqpNkzvmXlXapVrbtW88GWGk
tb5jxpM1K9evOSgcV0UVOX7boOivLp2od04fMii8pugq6jtmULjRdRDzmoMicFW5lOO3DYr56tKJ
1nbtGxRBqlLCor5jBkViWZ9J7zUHRRJc3z7etkHxvrp0tL5SvEP5Jq3zTUkay847ZITBw6W18ceM
sMJVtYLs4clrjrAitL4MJttGePLVpWP1ZTfZOcJix8mkiKhP806wY04mRXR99iaHzJ5i1aO3GJhj
Zk8TVt8f/mvOniaqPnD+ttnzv7p0us7h/Z2zV8b1kLw+e5o22Ll/yAhr1lh6/tEjbIisr8PgNUfY
UFzff8G2EXYvFqY5KMHOES4XtGT1ETaUt3Zy3wgbJuojHBw7wgrX1vDh11eF+ZbbyO7bj8KK1Nt9
yAVBARd/wRmqCKvaS3iVhxER0zYZMy2lB42HkSKsqsH32h9GzrFDapOuCOetjQIIVkKUsVkkrQkx
IaZdK8RR809FY1APOYMVrUlzJsXVmvusB7f2tkHVOwaVmqo0bNI6qEccDorWRLWTVllM5eyygQnq
71fFMMdtQHt2qGK1nT15yQxxrNqPqt1nuOKsKivx64+fNhG/jxnbIytRnDHTBlxb/e6h0j6soJ1s
A9o3rFxUGYj/kmEV1LQeknsOVyUkrgxrUB/WtoVPQHqxZ1hFTdoSOMPqCOuYLk8SDcu/0raq8DFo
k7O4R5FqkbNAQjLZhrJvWkTN/it4ybRIQep3nkNOZAivVTnHwgqTxxN5rPQL4kHTNsTaMi8TkMmw
VfoFQb1UG1BlVlwjnTbpl1K0etPNURjpCizRh8lZgrxHbza3TvW2TxNvGdi4MOA8v5it02AARHYx
+nB3lqSFniiyTo3eumIChE5sqKd5CNEkJOtiQtM6vs/WDw0MbjFKs3WlCWsKbfYbNyltE3GVdNOq
vkfyNj38AZJ+pXV1UU/bT5eKiQndJZdX2uCtiNQ9rxzEnUYr4JTPtyHyumFORdKvtKny5Gk78zDl
KjOqdiPRpqrqmx647U1NbjPdte23y72VqV0LpxXZPpGt8usDZPvg0N4KXNvIpmSsRteuWkZVr5A5
xN6x0bw5o8frBDTmuolTGmHY7BH1sUlt5LdwN40Fa84abdyNymiMUteusBqLlomnzTWneTmuog4h
m8uW7h1XTWrvL0tXmo2ISdsh7NxtmuNBamawOWJtkahyPJSzk7+6QKrJFvYbSWnCRHOKjzSS0sRU
rRktCHfGZc+drzkuFOPmyueNcXHs/GT7uFBcFSnlQPvGhRLSHE9+5LhQjZvmc/uNJjXDlf1Lag4g
YtLmALJzPBmurPgCsTaeDTO8xngyUulSAbRvPBkxrV06ajyZbuhkDjFH1IYL4/jEZX6V1tvRXkKu
P/7aL/zcM4fqq9v/QtiBsM6JOyHOd0MY0GrvgRjsgSBY6T0QF/sghCR7IC73Qdj84zsh3u+BoGzv
WHzYB6HUvlb8shOCYGpzqbW5CG+WFSdhW5hj7BZOw/+1FiT8aG/ilJBW3JA/DC/f4dxTPi1Qupkf
4G5cxPdIXashPtA8XIcunuC78aAZn7d7LVtv3jRMooOq4UU5ixaLTQ9dhFNvM1/ncSeAa/Ug0uUy
mXvryqhVqG76OcXd9Tn4onvzWZB2YxXNZ/5zD829fz7b+J4lBuPgXTQajK7KwFjNaHK2pABF1Xw2
gXBKWawNxCCCQuqs3nWKalrsOeAslvF+Hp078R2cwgaOjU0ySUN2OSEgluH3dH1NITBfGoMTCk4T
lxri1hxM/bCZlLQcg2RvG21g4wc41TqE1D4oVsk4pbRhcIfDkQ1CCoFCEWntKrdh3Eq6UTRdf4fw
HZZGdFlXog4aRKvneAbxBCnGokMxVug2CqL5NEIfZtEiXK9n6Kf77Lf/tGF9u7P1z2490LHh3TAN
GVdE321tEwPt2OVFf4BuBj30BUK6sS7uOnueW98IW+Ti8vzzhx4KA88fL3wIBDNNxrBcevl4LXzk
x2F1oQoCwvtwOnv04mrkmOwzFK3C2A3vA1RS2tia4fram0BEWjfIsFvKELdUvgls3DoIG4LeIUJ1
hcBUCPIgSwl6hz5/vO6fX0Los8HVcPTpkaNB/xp+c+itq6lDv1nO4TfY8bE3nWbRir6nb/gg3cwO
uQap1MJfryBSyNK7txFJLaeJIFZoyizsdBXRn2C1uAjw/GoJH3UzuBu2h4xKyWAWnZgENhpFzuIr
IQx4lxBOIZyeLQ5OuTYa8hgi+43toGZxTSRPg/65dBD7K9QUnHdtFIIQ3fZv0GQznYZx4cBsvDzV
FZ7UXAMJ4QzkMHsxnNCTbRggVN2LMcG7McR+DK5CPsVEd+DXNgxzEIbwdmCAhu4ADLkT44B5kZ6X
pwiXbeMBZnt7MUKRp7WW0zYMth9DTaZ5uhzV2o4D1gfBIghzUQHBoqUtWrUaOz7ee148gUCVaxtH
10sQRG1FXz70MzbnYJiqWqaOkV2ys3AMRWwmF6DFUtIBKCtFHoS8AU7rR0GYvJtFbxbh4i2oTN8t
o2X41sYHtb+68C2CjePaJ8QugB9uHwhvczA37g18K+yb8mEVrnEPBJ83N1ef4NkVps+ut8C7EkTf
QhRSvIWMWebqxRAVKIHIvB2Q6IHXENFEY3Tzyz/zUMwlgqIgY6tEXE1V1OnFzvkCrRO/E3qxw2sp
tkZKX96PeuhilnxDf26itZegAP4dy650TldKMNjIpGXh+x2B5wXJw64i/DaNoOdGwLVo3E73ctVD
w+Uw5fFwPpclKIYBz2566ZNwZ1C0B1j9YbjMd1rgQNm8Iw4U6ZWbT5ZgpIginsd92IXKiamigrgo
C6JBjWXV1OxuWHpB2wKRcnvKdkMIo6oQvITggYXgAdkDAVeTLRDgBbeDVlr3xm3Vyz20IHNrp/XT
3vt4d9MlZnQrBLzVdtLyrU33RVq92Fc9SB+2QdA9tCB22EIr/T20euuk+3L3gpHYbG9zoG23gz0Q
hGxtuk4nTu9Z+ZKAtr8dYpLdc/A+CL512U5oCrFn80giti4Bk7bC7G2F3DqchqQQZB+EbrYik9uF
gZ/L7eDXfZxO2nR+W6BKjSD8uh+KNGcoh/ILHSX8uh+KNddLDlW6esCv+6F4k2dkUM3cRrugGFVW
i+oeQT00hXDfSGQ3hfK9wAUW9dDmENhqvFrUQ5u3BjavhTWnWAuFQUyDlm4lFMRvLU+mq4+Xd1uf
TFxwUGVdDdEssDG52s5kmE/Oi2jo5i2i2CgiaGs0dN4lQlnWvvZX4zm0ZDmGx54XBPHY4rdVwiAh
caUOWyveXgeHl8sdoHRWYbzexJNW4DRgfQ4sc+DtuBLidN8NhihMAGqWwIWo9a5CIQBCAU3gwkIM
Z3g7uFZgxQzgk9myHbXaXkKK2PPFUDwubIRQ9LC5DyGsZ4kvsX2K3Q2GPfRLgZ24As8Tt1dZD2xb
bL0OFOHAWm6G0Nh19C1cHtJa/BZJaggX8oDGQua4r+jzxfCABXEcMsQ1tsid69m6/aL5I/CCs/bo
1p8/Xv0Ooa2vPw3611s3nRRcte/V3y+2SzekEPgF7qFAV7WOe4F7KIBUVZI/4B4KYNX31uu5hwJ2
1ULtYM9OINU/6k0NIKbVSfllAyWrD+fX86YGbFoPhHGYIzSQslbS4waq5o/1AyHOAEweFS/tuIFq
RBQ6wNUP6ExzlF4WSoxIoRoW7AfYNwMdrxtsHmDfDHTyBfbNQNdwgDrAhBfoGm4CL3WjIRJC8h9v
pQp05LU8TQCsYZH+Sp4mgM1b/SB224sCXWNWX+qMAWANj5ADrCOBTr+WvwKRwlSdJg52GQBS0upI
+gKPVwBjR7nPHjXbRrQGm9vrdAqkss5kXxpQD8DqkYNeK6AeYJv22G87bTQJ2Po0g/y9LAAdgLEX
hDMDuhYLlOPCmQFII1zhS8OZAVgjouYrhTMDbN2Mu7bX3gboGlP80vBfREpCWkMw5yF0+QGxlwGF
tkY4zlHEAUGXAaU9CnGOIg+ItgwovDUOdI6iDgizDCiiNcZwjqKPiK8MaNky2oJmjgisDGiZi8UW
NIJL0fpBIZUB0jQmkDiQePcdVNJmhGuXnBx2+0zlXdth6IvunZIyXEelx/SN7yRv71vjCSKpaCwB
+gp9y+7rDio7pm9qJ/nBfdON6Wev0DfT2IK8vXG7bvySkcb8iXaYXYe2ZLQxf6K1j8cc15KxBvuV
L2kcb8yjfIXGNXmgt7dxjVeEZKoxAZN2mF3vAMl0YwImr9BH05gAv71xu+7wMg/K5MAE7TC7buGS
k8ZGCtthdt6/8gDADsy0jStsuUHl8dO2kJMD706cN5bPtH3Cjrk1cVnPKkBwe+N23XtUzc86D+x0
gbPcHzaJGwrCVbgMIBVzxeSixIGMMm3OIPtwplUclWbJtjZUg+tRYSz1NrcKQ5I7hVkj9qr1sOjf
XHS+zHpZMsuVk8g8M1pISmNwB02CFPEuzQS0jtBmuYLERZBOYQoJHW1+yMSaBsTeYpoUOaUtsRLN
kPPYplzK4KzRKbqPo80KuR1uxp21kqZ2QuIQGtYaMaqdsDQAVhQ3wgfT7U1lDiGhzaDeW5vqzBOl
uPng3NpU4RCyBiHb3lTpEHJcH1W+nVA5hLVIU3nI7HZC7RDWRKv5C6md0LiE7c+fLQvAWTq0kRmC
7OgkIS6lJg3K7XU6lIzo2uIhO8aHOMuOUV6PQrxjgCqU1qawRrl1+VQpW1q7vZ8uJa/LSNLougdQ
inrGhzRy7iGULbGO5UGUUjUp1UGUireqF7ZQOtyA1VKK0N2UDjtghrTa/22hFC5l9ZTJT6stlA5D
4LVgRHx3nQ5H4ES2RtjbQumwBE5ZawS1LZQOT+C19AlyJxei2KU0rXL2LZTOzua8EY7G20HprCEu
eKt4fAuls4a4pK1BgLZQOmuIq0aMo2AHpXApq1HjvZ2zUumnkq0RLw7opzKtUSUO6GdN6h/spnT7
aWiri/8WSmevCNzigLqdUrmUpunyunV/Oi4GStTOldxZdguls1dSQ5Wmb+mW64yzVwTjzX5u5fHM
2SuC01Y/wy2UxRqihNiLSX5BLdwYp6FnM62jE/xEOWi9wqlHqeDe1HsL0rXTHhoOb9HH39GHO/SH
+Iqu+uhDHw0H6EN//AgJFt06QJ1aXILLnIvhwlutoIGVLI+8K8CgmnxF7+MwhK/tFTdAi3ARxc89
JAQm8te8sDSYwlsxx/8yi9cbb45skscasDSYgefFcHDVsfmsUzeKJHfimUQbuJWnRujwjfWt+IRO
Rr9dfbq7Pj91gSChRkF59QnZjLXQozBwhJD2R7LAk4UwMv1IpR99RSeS31SRQVV4/eUORdMpOGlg
5CXJ7H6ZufM9hj4kR8VPvMzZJw1OjdjDeGrfG+jqfISCcJ2mnz3J6p1Mp05FhMGTzVsE480y9WYi
0v4ZTMuHSY7hkHEwcXTJUqo5200F4XlcKp7+tfDHeDchOE22E5KdhAJvJaS7CcFyoJ1wdx/T3Bth
PD2D8oUzYDYLdlrsE/DfMTqhEDLkW/IW8QLyDD45LV5xChsOYsTcayoJc+u+dbxJAPFb+AzLNHEo
rJP/r+Fz6rE3mXv+N7BRa3EcU9goUOp9j2LIIpyEkEV9tgD7qcVqPJmtk3dMWts8a0T0jnI02fjf
wnX2N3aBwJbqn5NNULf/V4RaQ1Jw47uPZ+vnHhrOvTU8gKGVcb69a76KQAZPAofsxvMfZssw7/MW
KhuX2aZxjhb38XgdJmt0QhU+TdPQ3lu/tmQNz3//Gzz/1w+QZlrp7GGP5uF0XeIZtsVRq3/9YZsl
E1CBgO4pinvI26yjhbeeQabh5yzP8wQa4D+E/rdks1hYNrNZWtdShCAJNEp/XDy4TheT6iXPi0W4
jmd+26wSw0Dq2y8LfQuf0cqLkzBGf3kS2PyljYxyBW4HiyhIk5efUEV2DxrXsnXQGNbAvM+t3+Lc
ew7j1Dn1PlyG0JyTSXJ/mjtl5l6ouMuzlYNOFt5/RzGiXJyWmAQz6yiLEvDf2EDO+MWfnSD0ArBB
bOsQI1auUCH59jyx6WPbCsOgVQpPpn+2FmUUjO+8dbSY+ZLbJdZDKy9JMv78pGVHcrTKl7kN4jP4
XVu3YfvHaHRZwkmceTCl6YGrUpfhzWUPjWb3S8+GGbDU4OtXXnIUA7FiOwDdAaBLAEVZKwDd2QLj
AOQX0QbAjhaUNx/FNMvuwDUAvasF5QUIovZnthoNALYDoLgHKc5tmNvkYeU/rHpotPaWgRcH6BdI
DmUz7Q6u0CB1sIK1cVFZvT1Yvg6WhOGYLVebdQ8NrbTxfLNeR0sQ151l5tNn1x9/H/19dHfTwzj9
/fzzCH6HdMADPIBfLUT6X+zAa4FL12zArdXyx/C32/OvJYGwEfWObA9gfKw1gjiYVha9pxHv3UYo
EA9eJuvZAjyLkfUVhnhX3mMYgyhz4T2haRz+uQmX/jP43U68JHQ+ObFnEwLD8FOwG9Zua2z4sJto
OVtHcefmuzdbo++z+RxNwiL9eAhHLBp0SCr6dYl1PR7A9d377gDWEHpvjd4ZAvP0lLA8bDkYY7ZT
0j2UyirD2yj5Pkobt6qNUu6h1ALXk31nlHoPpcFqS539fZRS1GM3ZJSD3ZQC2yybbZSX+yg1raen
TynJnvkURGwZW7JnPgU4DLRT7plPQaVm7ZR75lMwKtvnk+yZT8E039LaPfMpOKdb6tw3n8LGNmqj
3DefQph2SrBB2Ekpidyyhtg+StXIS59Rij2UijWilWSUah+ljXHXRmn2UGqutrT2fA+lwZy0U17s
o5Rbdhl+v5tSYmK2rKE98ykhvGM75Z75lMTmHmqj3DOfkpht3GTPfMo02m8b5Z75lAzLLXxoz3xK
JrfMJ9kzn5JTvGVs982nYBBNYxTGM2/eQ5oKfGadObIrPrhrI7iVJdbVGyUPXtwi81FSYutVZ3EA
pYfW6+cRBp/xqzNwGWdTjU5m8Z/oHeJv7fVgPPE2AUQHIYJifIpmCfKQrbxf4CqjQQ7wMVp2HqO5
t57Nw0ySVLxBSJe5xeGlYePBIO9+de/FaycIzSOGiDV5ac2NsGmQVouxH0/Qzej9HSZWaWHdxrPo
YA/f4zIuhxZElBeOIrZOEC/GfrRcpsKd5rtDS2HgzuA9NGSvTiSfsjRk2WgtPRqN0HTu3UNohLfw
LvTm83BuG5L43hIFttluxVIAS2uB6v8ysMFyrL6fdDHDxM62Hy0W8NhJ5hHMOgRMXSVv0ah/16/E
LgJoUFO3QPMzmS4aNIP4TRBgBZ6G9nYPPoVgSHDq4kDMyBYc6Cm4cVmThaX/J0qW6yks4Xu0WiCI
+OLPIxQt589otVihFbwA55sFjMsaJU8g5UkilHjBAiVBgrxVsi4e5hrcFPlXlPjJDD1EiQ1w8ODP
nO+19YDNvyf174mAd0/xPa1/TwmYkhffs8b3Srn4vP49s9qX4nvR+N5G3vHWHulls+M9oc8XN/0z
whjyJl6MFnDh/s8yGDJKH1jp35CSFTYkZ2i+WnRW0bzUz2vFrBept/boC9H1bnRqn+Eeexk63dN2
u+bXHn8h+p62wxPOW3uihy4+39z8vfJVWrFsfCUoaOafHvzZ+MEPaqqbJ9iLv0TJ2nmmOqSKbieF
UFkQ2gtYQMl43pZSZ/hiuVmA7KR4dBlGrYnWFswH37e8ZZEH+A+nmiDYn4XE54kQjP7czOJvSSkq
zyyOSrMCw7iVN7+g24ZxCeazr9Bt6mAqsn0obUsyW57EorMuRZfLB7D2CdBoswrj0SosuathwgY7
2CQT+D/poY9Zs7KALNbr+i2aBV/CZRDF70ggJ/DnMI6Cjb9+B2P2Fk384MKWf4dk1x28VAO2FT1Z
W/lxD91M43fsLcpR6dvsQP9o+//OmXZhIxyUiBnJvqkQhFbIbrzlZur5oGWKs/Brtuld3MHd2Bdd
zrpTn5Puk5Zjyd8E4WRzb4e98+C7w2eN00tct9m9yuyUNJLAjeVhM0Gkg3vWLgrGBD6ww+2UpMAg
KyVJdpupyf9FF2MieDnYtId+C1EQLf+yRt+W0Xe0fgiRN7+P4tn6YZFYUeH18Mb+u36YJZZDv82O
X7g1XA9vug624szFPn6ZsC3LJEUXZgf6kcskRVSV9h6wTFIyXSF7jWWS4hrl4u5bJkBDeb5M6I5l
Yktai4NKSbFtlTBgaA0GkmuJd44OY1I2+VlOegw/YyUmZ6Dt2oJZZeOE4unUF3U2TveycahHKLCa
elG3hQ0w9Qrd5i6m2T4LbWycbGfjgCcJyMiyBcZek42n6HCR24p+/P5kkOLGRTxsfzJJSYXslfYn
k1bcV+K27c90dhwaDU9W2HVs9/5kUsODulJyKxfnIOUqmsJflYtzJeFVVmK/KhfnShG+A/34VcKV
cqaFH7pKuFKsQvZKq4Qra9Vc4h6wSrjmoMKFuee7VwnXNkV4peTWVSKM2MaK+Z7REUbBq24L6THs
TBSYEjO+hYvz1+Tikth30Uu6LYkR20mP6bZ0MVXzDZJjHs/FJSWi3J/ilbk4uNHxHejH709JiVYu
4mH7U1JiKmSvtD8ltRFnS9yt+5M7NDaYAew6sXt/SmqoqZXcuj8zc+CsKfJVubhiRikX+1W5OBgV
sx3ox68SxTGWLuJhq0RxTCpkr7RKFOSRcXEPWCWKSzhRYO7l7lWiuDS4VnLrKtHCyAb/KKwnd46O
hlzZW0mPYWeqxFSSNS6lBebn0Tmz3j+2cxC9bRmlHXMBeOOSXQDUjgHy8mNAa6Mbx82B42aIbhwD
Lxo37WBSvL3bbccAbuP+2khe7mv1ytxfG6nMDvTj97U2CnMX8bB9rY2ixCV7pX2tjeLSxW3Z19mk
FDQGW4UVLGi1e18bbC+3lZIkFbk2trURhpTMX78q8zfgU+tivyrzN5IQtQP9+EViJGGV9h62SIwk
vEL2SovESCK4i3vIIpGaZRdzvWeRSK1NrWQaGxBNvdkcOAl8F0RhAqvhwXsMkbd8Trnov6GTMI5R
h5jTElDR7OF9cGqLVIE5zqwdHSQm0plNMk0pdCHtfUt2B7samxgcMGYac5CofRz20McIDUdnNA/+
DbZpdkicBauksIadYAgVPvbS8vbPfFWBvi5a2iq9+RwtiujoQK6tv1G89sf+IkpQFh/h9m6AQFv4
3fsWpvmLRuVpbYxdxXUap3deAt9il8K01JJHb8/MntNUGOsIUUx5B8sOFXdE9zjrCYI+3w3QiXVD
5QQz4swhfNLE9uZevEjQZgWA0TJEi2gJ2Ruf2be3iJDctHX5GHsLB4uDxi4dt4419o97KF0bg08f
3199GF/d9McXV6P++fXl+Jc7+AfU0rlWtYsuNqv5zAfn46ubPlqEXrKJrX4zSU3WltEazNbi0Acz
6wBB/piHtPA8uu+6TYFYm7WmbGxemlInTLruY9gYBVL4Gs0s8tfzHuJdrru4Y/9CJxRT1sGsg8lp
YWqd2NDwi04QPobz/wSz8qSb5i4Jwse8EkKIgGP0jyBelLbr/wwDlFhVbhAvbKswzCLGkgq78NIv
O9PYW4Sp/0UXg1v2YrYEZ4cSHe7HX4FlJdE87KHEhnTPvFz8aB5tYmRB8lQC2RonVD9xXcJoDmyx
WWtrQ3pZb6YT3Cu7EcSL6aStsrIWg22U7hnEHPC+o1+uLrLEQTnDOBmcor/N4hn6NUpmS8+hJGDV
ewzjeZgFLnkm0Ld1A6uBugEro3CKSrAjC+JoNV6kFpTVRC1oGa7BR8AWQVkRsNOodVWBaKtC+Pv7
2xugtpmpEkgYtXbKW3OGLQF9ZbtxvegShu0bs7RTZ9jssVNvM+4HJMLAr2wU3tv0Lbdp+pTMPHj4
KN2CILC5HV4fVJjDxF0tO8lsvUGf+jfo5OpT/+a0vSxwvcVsBa+raAKmKbUCArdHUh32B79ui3ss
uoRrKi2yH0eQyaGHBps4hpbH4eMss1l+wp4EaVBZn8DW3TwOE38dz3vomtlEOH6ag6p+z4LiICot
it+c7ysO0pWi+OjmvL+PQNWaky0/GPuW4hrcN6+GVyh5iOI1pO5CkzjyAt8DG/2KxVFa3qa3+/I7
LfhlNEX3/mIcLv2zIPRRuLz37sPyNIW0FNYe7HKEBne31poFTZ41ilbr2SLPOVavCHJxQlB6cC0Y
20MM7lPW6wYladzeEwFJVyE+inmLBJWcaHHa+flEUBuVXkr6FnWE1IxyqYuzjSjMIDfe3WwBDhGz
+zQDE7x4H2Zh7MX+wzOaA7dO/gNp5D/M5kEcLsFFKfUF/A9EkR9HSbKEjtiSJTYx6egX627tJd/A
+ispj5eytLBpQq8jz7ocQr4OuHB1Zkv0e1dgg/wwXs+m9uQrHqxEEwHM5zr1/CgLor+8D4Mo9tC3
MF6GcwSvP4D9Fj73kCeYmfhaB1gZ4RnFpgbYOeOcqpAoE0IyYeqRv5TVcKFUxdDFsqQg+r5EJ6PR
2ltDzBI0yi7CiGFcjrFW9qW/vY1wNA/6PeRpD2OfQfCaqRZsanw5nVIhuVY0ZEp7U0zlhOqiXZSm
qV0uwkVkF87ai+/Ddfok+QgzAk/izXxeEqSenvZyPX5cjFf3dvnA+VT7COU/X3voS5ZHDvLgxP7D
DPbNJg4RhH3O4kY/hPNVGBcTQ41mMnskko5IH+YPs/uHTgJPZvdJkltIZM5N+SM8R2I27nCKJDr0
B5A40xpuPNDqcfR9GcbuxaooxbF1Jim8pbrTxPqDNWzqoCyxAfKKslnRziqOUi4J7Wij4xq08efr
eJpkbktWRhHG63fR8i36Z7QMg3fPECdmmjyG4MAGf5X0QsBjtnTTm92PwUurrSqJK93JXf9aigpC
cwmDHek9L1Pqe6z6MqXVlynoRBxwlV1IWsErD1Oy/WHKSsDUZr4ALN6lF3+7Gtq7gluWc7ds9TF6
8bcrp6Qy3ClZfV4SyriQSpv++eDi8n1BZYTWVVO1w/mDwMzmyCxmKFzaRdQ6RwIzG2TU8WvMOWaD
S/bQ58v3V71gUhJrQ1WDuMaU+qPPo7vwV3QTrR/C+DwCN6bRb7Z5Axc88DSbGIM5peHE1z7nZKoD
PcHMeFJ49C9ltYaaZrWHtjm1pz2szR+jdTiJom+tDZ7oUGgS8mCqlCcmE041DYTvT32MfaxKdi8I
JpB38GUNtmmP9jX4Bi5W4PyNBlG8itJj10KhQR9Ra8pOmBdMppxhMwk0Vdj42g8EnzIiw0BQarT2
yCTgbruNeHm7ieXYh7b7NxtqMsm3HTR/WDTdM9RgyowOifS5UUr7gcFTY0I+NV5IlC+ENxXMaTqx
5pgvbDq1IordTR94y2gJfrToeh100Y2XWH+uEhf1N+uHKKX3AkOMwROfUm9CpoIozLVP2QQsjj0q
dci48KTbAcZMc/gO7QDHLTtk69iX64SyHtLE8+SEUc59w8TED3EAkRu9KTOaKk5JCKGKVOC0lesf
WCdCqiPa6qzvXrFoqh3wwqkvppPJJMRCBHqqA88TWnDFuDGcKG8iPEGVw1GIZIw6t4t9JxWBW3F5
UlFNlHtSGdxlvARP/Vm3gR96UmEHUBnpABYn1efROe1i9MtmgtyfklAz7rakemx9ueqja28CbhFL
v9ukpsQqo9tu1IsIXJR3XKwFpYTpf/nF2r5OYOcuvB7qpy+5PJlMIWHvgcsHFbIkAsP43KpS7JDn
CkYpmANWSvItyjyJjQR7INuWj1Htpgvpk2dhUsWXkLgP0to+LkqRh717Xn65QWEeDMVbr+PZZLMO
k55DKXlOmYT+BnZSNwmtNKwsRKx7VbXQ6KY/+FVydJLfXE+d8jZbUWv5y98vB+00eivN3W3/4+jm
891lKyGlbFvjbm76w3YaGyCpSuOtVl68iOJWAoZJo3WzhecUYEbUC/jeypvM5rP1s1NOqby1v9z0
B3ZSbBKp4glq38+sIhqSbI9oSPA20ZCER0T2ZqH566dUGB7xZpEaY0YcpCM5Hd7F6aSG1M/bwY/m
dFLjwmqC1jkd28HpIJ9xbk5Ij+Z00hCqVG4/u4shSENtLKhKyW0MQeE0UO468UF6Np2B/vhuNKhk
/vS9+WySH2+cG9M1WkM+UQfFXror6c0sZDW1mRPFu5rkjOMgEIHiU8Nqmc44Bz7LwB6dFLnOoEaI
CXZ45tKCjioBa82b31sGaNc7SBI0p+hEc9pJ4Aw5LctrDNx1e/lM/1RQaKwMJRWnm8PfSRob62g/
vIGQ+Dfe/czPdg+8y3pcsZ7ihS2EpljDQ+62P+rBHSQO/VRQcRnHUQwZv+bz1FXOiQNTiOm04DJf
yKQjDxA6sNYNLLvwYrSDVHoCHdpl2SXg3IFhJr+57oCbpeVJ6TQ6ZTVwOBie+3C5Cloo0si1aXb0
khDkIqIMlpWVDcL8FZqHzaKY6l9LKqlhz9WosltBGlz2BIZ2ES5OCwiCqeYOhrKhR36LIQkZiKJD
3wqZQF+VIcWhF3Sse13grb0eUkYr+q1EMBjuODtbEUdAegb/QffeqmyNdJqiuL1qPWl5tlj00ACi
64QB+u3N7ygLMpbkQVregt0MfAGCpKSiLrVA1jD8drNEZ9D/PMQu9M8Pk3LYlWBgVYVSub4X32+s
Eq9XKWC+Wk53VubvTb+AADkZZbh8nMXREogrtGC1Cj+/fLq5fHdW+Yan39xd3t68c24c2bci/fb8
06c7UEZ+uHx38hCQt/erNTs9gyTYZ48LoPpnZ6/+voKrUtxkFfrrOBw/0vEmCeN30TIvRTE2rMix
GfxBvvbQaOPDqE03EP5o4QUhOtsk8Vm5LrolNSNCVamz3xEVsks6aQNRvFku0wBQuV7YSuFP3gz7
N+hN//PF1R16M7q8vvr4+XfU6Q+H/dubT7foDYhp39gLDnw9GHy6GaLOh8Ht34d36M2Hj5/vrkfo
zafh5cfR6Bq96Q+u0Zvz61+vLtCbwefba/Tm8vr957srKPT+6uITRW+uLj5S1Lm6+Ig6V8O7AXrz
682nC/Tm+urcgo4u7z4Pa3+Oh9efP1x9HNmP319cjX5Fb4aD20uK3gx/+6/P/euru7+jN0NCfoVO
/Nft5cfBp4tL9OZueEPRm/N/XA0penP9D47e/P4P9OYf11fn6M0/RncX6M358P34/W3/5vK3T7e/
oje//3o++HRz8+kjevP57maI3oz+Pvpy9RFQr6/O+7eDX66+XJ46Y2+j4bpjX4Qtq1yk0+BG7qTZ
o9slvC3nJw3c55Y29WrAAGUJGlSIdLeO0E+reLbw4ufO9+TnklAybYrkpkHnYTYJ46WHTvjeGx5R
snHDk12qaCErJR3RzeTSsEy3HhF8yxHBJFVwsLm9+q9NuAGN9xrciP87mthzNQ8Znkr588FJ/yq6
yrSyJgYu2uXTKuOsWYuC8LETzJJvncnz//tEg81mFnS4oYIEHoEPPOFP4V9uvIn9e8pD+BfirUNs
cBZq082wOjYE0BnAnU2eO4B1lmN1AKgDKB2A6FTou06bNSUvabMWUzZVUqVt9ALb5klg//UmgW2z
IKGkghp/OmG72pxjdQCoAygdgOhU6Ctttq/QysoNvfSO5U5QZ5PEnWmSzRPq2IdiHFg+ht6DynZk
IRxkY03EdiAncwi5VEKO4G/0eTlbJy4M12Q3zHdv5YB891YVci12k0NApdhpRapFrLXCYMFrMNc2
5y1MbbQstuR/R5t46c0DMA7pgKFKqu9HHfS39Bs0Sj84sVM3j+5PnUoIxeKISraBu+2GKHwHQG6C
8DHoZOZTJS58nNvFZeAONuWGHoyd3mZq0L+mV5wmsjZs95xnHS2nPcWtT5sidb48AmZkZT2LKOiA
Hnfmd0Dvm3QzYw7UQQPLRm13QBc+sqVQ+vq0KsnE3UNGyfoSXYSLZB17/jcH9Cb/DPWXz3PP2oaM
sm+/ewlKvs1s1NRJ6HtglraM0Dqe3d+HMdi1BTMrnU4DJqLvYQzxO8ox45hKTbd0tblwikYVKyf9
xOkWx8KwfYipCC7pgPbPQQWBWz65N2mRCrLmqn5DqiM/+qltUycJ15uVg51Hts1sn9DIfu+gE2bd
lV3097Nlmgr5Bye9rENTjff0YL1YTWcwOLYHliOEXjx/blbZUhXcG4BFoPvY80N7cXT7yAil5dwU
E/sHN/IrvBTts9BqujfBbI0WYZLYa75rg1eAcWlNA6ebJOylt/yT/vCqsG5QXV4+5rgQ1rOgtgDQ
icD7AmWSFikTAEpdvy4X0/WCZVbgQgI7sWeKkufEX88dxP5qNX/OIb948cxm1nZHXilN2J7mvvrM
F7VranNeH7nujqrX7axWaXznXZ09dAxzUEGkdM6NfKPDCqJ7VhA2bbdYQZQEk/udrTySnRTYlOj6
Xb0Y8CD2/M264y9s9NWOl7jcPv0SQZAea1EcpAzcm6OsfOqEEkLEY2fIhcBMq6PX13EzXFSmGWXb
Knu93pXVKUm38f1qdc2qctyHKPrmjpfBmpfC2twVfqeYepuUS2Ihc8+9DOsHBdUIdwUu4cFvdBf8
kaJqC6lqLT5MWA2kirJqa44QV8uuhMxDpbi6y7YKrKGspko2yraLrKG4yf0N8mfpnnnAwvMr80D5
tDIPpJunHbHwmphd8MfPA8WujrPrGvL8Gj77D3G0RL8SlEc8thQ6dwHJKKrDn5PlBOD0sJUXH7V5
SkSj5bbDJENcxaG9vzch82/qG1IZSo0zFOwAsbPYsiE146T+7Kr3+dAWlpiGi20cvfJkcRBvN/Ow
A6H2Apgl7976l8Q5c71MbdnBzhZewi47N4QywVpqc7j5D1ZWVsV0/U7qjFH2lGgfpvydASP1428R
QxQ1+oAhbmnUIJoHKwg13Z/P0zdi2u/KoApG8wAS5EV8um46UeHTRjDN6C74o/mDEZzlpnukyae3
m09YUs1lhfQoPm2kFLnLINnDp4001LBG2XY+rbqEavtw8FareQhOa6yHRX/Qw5S/72IbmBbiTaZf
fwufJ9YKL0f5jzLe/7fwOXP7KYSDEZouQaD9jqJJ+OA9zqK4qJZhIlgRyrvkrxVGW4nqvfJnWTD0
Mzeu+5mbO+rMTXZ05sZCOoOYWmekI84sp07/C0Nz1tJnN1I4LZvMJByAO0bKErx9mAWx9x2XviqP
pEsIdC0dvD+29PYrCFw2yaTjtts21o2bDg0R9tTf1hCI8Gznwzpg2cWBTvq28G+zOJyHSVI2xp9H
y/Cvp66TaEYMPgfwt1OtgkNhR7X/mpUiBWTC+D++UkjLSqHuSmFlk7XGO1YKdVZKED4amS0Z8tpL
huQtEsqY+kM6fWMEqQQ3+6aTW5x0009zee5Z+vVZ8XUBrJnZ+hzIS/9n6rg6TXY++1FRqlvAS2IY
qx30W1FB0eP569lj2i1HXVfiUdx4ChaXkZc2twRXnNYO7xvIh5MdmZn4tJMSdhfwFerkqAP76Saz
v3Wl8c5wCIMx3/OwPPpQLtDhiq9bLx8gUPoTFEHNq0fx1atcPKAVDOO6Hq4qOI7BySTsTBO4FJXi
42EcwoPVosNl69YWc4fS7StXih9WS1nDbkRFCdl6dbOz3X5xSxfCK42ewkJsew+s5s+LaLN+6Fhl
ntOY0UP0HQ2zb9E5BOYY+XEYLt21ByF2VcvqTpfeSxd3Aa+FZA1Vkx/OHiG+0dWH27ubq49vKE49
tIdXF0gajk7yLgWnJRLkguKOxcy+d+cEC/deSTzh1+6VmJbgWmi1HXxbVAPSfqsEQKOZcQDdOyXq
b4JZlBdVGFu7mqJo9Q75wXWxV11FCXMf4AwS0OzVDMvWV5yymXHgqZusBMF4vPajHhoN4fez0bnG
GN0NPqHfvLX/cBHdZ+q3C8c7FxA0JwVCZ+1Hzq95+jr8NA0nNkSL3cHfATCI7tHNzdUnEFDFhdmK
gkDvBMzZtgC6xlToIfTi9ST01u8kBuNMdLKMvnvP0Wb9LheLq66CNAvkK/L9VS1VovWCdBTAJ7aF
nZ+hGHXoDeNFfofHWRBGkMMvCKP83ffHlw/9r+hksZmvZ52H0At66DlMEIqjRQ/2OVpF4N25jEpM
rbiixe0nRTvfJAfn3+ljDb+mRXvUFvhydXH5qZYQh5c1avswa47COgyr/qCqqwzkbGorvEpW9cIa
EqjJr2j5uAjtf0jPJnosLoZuNs2tRLiViNeIGKszk91C5APuDpqkKQmqrDWyvPqHJNQADf7BLdCv
oEwDdE3qSt7XUtUBurGWgS56vFl2/DgMwiVswaSTfQc2EHk98HulqvTIOGQeGLdZDd1lxOgZPsP5
e+IMTLLOVtF8juzNJClJBQPFj7uYDiaVyj6rZ0FuTJrd7M+x6JG+GHTtnyi706vsTk/rd/qcFWTs
umTz7Xd5mW5PVbSDGwpLO23+ErYQQSuKVsXrQ0M887rAzT4C/yUmN1cf7y6v0Wh0MXxPyX9xjD+c
I1pMlmEY1y/wexvzcluatsb8JwQacxuk6gLTdmMZIOukyA2LmVu4IqUz6SBzYvbpkzNzr3XYicNk
s3Dv07f2g/R+kxebRe4VDGICwcoHw9ora1HqPPAhNgLq0PI4MorIuoZ+XzMO2H5GUVHnrY03yAu6
WeIzWbdBq00QOOfM917/r6FU+13dKJ6mo9hfR4m/E0/xutVPY+qnif/NLipnMBy01NAXeMAPGoTp
LmaQKW/PFP2rm1M0BmIY7XgV2ybkz4Wz/AOnM5BATX5F53e370e9nG3MvUk4T7e2/ShABK1jb5nM
AgSmKTxtdsYkVwydUGF6/NQmhrHR955RWumJEvK0rEwxV61kL8373g9cBu77wRdc153PiVtBac7f
XsGRkukMtN7qyjsie0nFLgUjNYpaXLToHkxlHwoSTTlIHe08oNlyGqGT/O2Qj/JpD01ncbLOhjaa
IqviThfUIavGrUzuryx9q/ixz6iPTtJ/O+AOOj8tstKW3nsVcH0g+DQOw06y8nxQsIRhjkGIUtoG
7ynW0B6zB4wbZg8Ao1X9zHAe1e17oyQGvcDBR1mL4ac9xpqvcQ2+IqTOQQqGloHaPLydcO275nHQ
1lU0A+1W/uYvA3/dht7c1ulsb0KVnYzsgZOvusqq/ZcJd9lZtvjzfx2FAJcXvYGAOGIYc/elJIqm
M0JNIQtQB7yuVevrWneJVFyW9/9ONtPoRKk95jSMtESE0l0C11XcdlutdKuqsWDbxc+t07JN+Azj
6WosdJeAkIPsmeQbG8fvf+dUk5apFu5Uy7wDFBMKjtM7OwAvpM0i/cUa2/5f1RdV9IWIhmXuti29
9z4IcIrV5Z7FZeMVWEVZj9F1s7l2btfC6FpubbpLKSF13UUmsd0irX09Sa3uUsFtONOdSyq/i/3f
uKC00xPDW5/GFdoqs+F1ZpNu/xdymuJ+RaVifC/jk8UzXWfNEdue6S9rD83bww0sMueMyGK4Ehv1
2gO/okcIaeWEQcw9SSlko7bJ2mYJIi4gJdsAl1EDqCQVcBV3z6tjBePGqxtkYeyCE7Id/MioShkg
dwCLC23/820fXV9eNIL9ZkRuF6t32n6ySe7Cb2gQLVYbiLkC1hYVWuPQVgMuGQ3RZxklZZepsRly
t4iETN8qe1Wx1ky21uS2tdbavLbutq8/VVt7ChuqixEk5AAjLr3lggImUK228uDKe7xWqYRl0vB2
EYWXfOuAl+v3KLZOLSA07K689QPqgDvxClQDaJgVQLeQWz1ZJ2BKkEsqL2ax9at+ThUTrSwbsrYv
0Wa5CNd1no1OBvkHQ2/9cPkEQWLf/dtZvFme5X0+W80KzZPtjlFtNlPOs7vSrRwm79f7KP4O963W
bhUjWeuXU73Ee05IqMc5HaFfFXcb3TWMsXIfk0Oev7pilhXikG7lEhZd7kCvsAlRsglZYxOqgmhc
xIJP5MYu4wsnlG1KQalLUWUSN2Ew82AbuszBElX2UjPat/0pCIzW9bXwOgbtposVEfUbXH2dHeAm
ZOHAbVppAbswDQzsLYL71SZ3XAejnDx0dabOcegMtck/LUUPPd574zSGcRhHUa8w/XECGy/C9UMU
5FmZB1e4+2FIVPfLh/64278b/p4aHYVFDRrbDZXXYIsUATvfFkogJ8MDzmkp5lKIkrYY0tv+XRYp
0s8sYEBaOBh+LimFhljHOeVdtIrm0f1zD/WDAAqiZZ7515aWNrJtNm4pR2ZZwoY2xaHMFIfqtIRI
berTCZi5cYdbpuHkaogurkaDT18ub/8OUWPAoAg/Kc4H8NdFH/7iilwi/DTQp123FlNEs84D+qHF
YhbZDNQQ4eO97NcGUUmIUd1Gk8z+GUIcBa6Fkg6Bselm20YjH1CIFgHBymeLMNqsq3Evcwz9Chjm
xzE4/kEMYrAuBtALAjRboYkN/p4duRj9lEQ+JeM0dP3PDqVNVr2dkqCf7hf++JGQMXbJtCG7yCj6
afYwfpQuEUQ/47uIGPpplaxcAgFuENsJOPopWWxcAm121iDQT8GiWl7sKi/RT/fTp3rvgUztIlPo
pyRYeI3+W6f87WQa/fToL8ePvE61c24N+um/V+F9g8zgnTNEMPppESbNvhmzb0m/D9PYOl/Orz6N
UiXLl/eDuxKDKSVdhvrpBkHRHiKEddglVwR/7nzinwoKKW0Q2p21DobodiR5dkIUpJBiAOcd/TL4
eIJPIaRoFIQQkRr0VV5cmBTAy//LTZlUPQXQ5eYBAHIcACPS+jG0Nh5Qe8X0jK1z39h6Tv6Rlv/6
Ff1tePkBZVXNkl01cYIhbNTOYP7BZrF4zo8CjZ+oKMhl6pHZ2tDHe8+LJ3Ce5qIY+AhldwcHwkYB
2DlRd1nI3Rsbdwb9A5JFnNzd/OMUTUPPRsUAjWKWw6PkYkym2aV2Yt9c3qDLwQDGCUBWcZjYVPdd
F0XtOxtGt/29MBKLYv88LuxBBMWppOCe+uH8LeJZqPC32cbKi5jOZLZ+C4kO0uD3lc/dCgzZ084v
t/0bG3ZN4pvi9qGLayDqlB+K95fv7Q86ycqDRPfUqY7snbgP/du7HhKE5pWp9+/fNyqDD0la13sX
vuTtRSgUaD+67d+8S5v0Fp33b98xqqS+cSl5QQnlv8+C9QNimk9m6wR9uLi4zQ5+0mXCYKmql8hi
fKJpWl8a7shGzHl2CR0umhMqIYUl/HB3V6HrOoQ250BKmA7QcrNA/mqTxUMijGBF39pP72ufFigS
2/CSKcpwcHVpoaBmO9r5lj9Jr4zeujLZzP52WrZJUpszIUXL411e3Hw+B8XY4juwq8eZh4ajYZHY
5B1+wgpj2s+vXQDDbBjZFCa1l/gy+FhifMnuwJcfBz1EuhSji8tBD2n05XLYQxjdFqkRiIOp5b7b
zG9glQ/v4uFoCIwLfLUrNedonElC9x1GsHXjxxBupSwz6oMDCT9pAZGOCzM/qOzu5jbHFhoSte3B
vu0PezZVgXVYjb0VWntokzNq4Bzeozebl+dRiiv2HWWjy8Hn28uLq9Hwuv/3LJBjGMyS1dx7PqiK
/cOSLDZ5rpPZtHjOvCsWFgve2jLT7+3fc1x8v4qj+9hbwJfFZ1UCHqoQY3SiQNUmu5m1Y9ZU8MDZ
PRo3n1uaCl1fePaikaMpzvHeEwLQZolrmVlRKfybA8ZAkHH++UMPJfMwtHZwhcWf781hR9q1lItP
IepJ+LSG/Tlb+vNNEJ7ZcGJnNlPF2WLRfegxptwaiA0dPPbW0WLmn5z24EE5i/9MxvkdHj7DEGJt
OZ6kmS7wW7SCJDRSAFfxFmEPnVhze0gqE8anLjx4n63iMFys1mM/NW2jb1FoYwlB8iFcKQzxAQef
0RI0fJluD28vLb4iYl8ekOzA2jJUmnEmBe1VCCDg2b/jHoKgjlprQsBEhEw0Ovl/gO7nxWYdPp3+
z2632/1fnf/Jeux/vUXeuofG43T2x9567fkPb/AT0eYMP3Gv0iBwixumfbXZT7IBBIhKMeCzP+XB
JX0imYeN9/NXFPjj6WoznoT3s+Ub/ES9M/ykcXEPczAUPMgGw889xDBYgdu5AIHpojYV6M4DSXjQ
Qx8qLnnX8J9O+mN/QQfkfvt34jYBPE9/8eLAcuJ0FUDU91xZk8mf0EdvEZ7dfvqARne3V7+jcynw
ZecKfejfXH38gH67en/11l69EYWgmZifYXUG2cDcqsBFYQCJzO4gjoQ7mNb6AP101x/9+nPlY4iZ
F2wWq7FVFI/nj/M3+EnzM/wUuHNm40Cj8Xgxu39YjyEvzUMYdP1oHsAkT9UZfqLM3d7Wown9FY3H
q+nTuEYINPgM/uNSgFwO/RUF/pLRNFnMOI31OU4lL2/w04QAlWqba0HApAp9W9i8OmOIuhOOl9Eq
jqZv8BMj4Rl+YiF2CX6wQiviRn9Fsb8Zz5KxtT6fLe+hc/QMP/m4UhbqemlNEpZxTm0JYCRTgFUU
wZTRMJAwaRPRiqCNOx07kbKZaUGRNiy3RcmHuRzgyfQMPwmN3eLw5ofduq0mH9aZbq+L8wrxG/yk
QughCWhreQVSNaeHJd2ODhmVLYHFbJweUckb/GTrYcLtig2NmZ1M42BhH37dWRJ7XQz7xRfQedM6
e8qGJkJ/TW0Es9lfRrNlso7f4KfANs6pS9nDrOjJtjq390oJ7QIE4eN4Fc+W62/jcDFbt+09ZQW6
QBF738fJarYcb5a2nbP4zzhM1lEMAymlZbQOnbR7znbtWxCuxg9eHNhDMQLGrPxG3yQRB1TEp42K
WDq7yWIzfvieDkXOfdLuhLRtKAzjzlA41DtHUFNqt+vCLQ17mrWWFpaR5BNl3+uVFrIA03R9TNrI
rRcd+iv4KYwnm2QM75Zxqqcdg1rnDX7yYUCIy1G0DX7eWCVl5Ts7aGz844J6R82NtWKwSZsbRJYu
ffFkNQMjAguDJ+qe+MY+WMsF2U7YrImA6WMxrunNAp4Y428L2KYErhZea/eYlCUlVGY9Ne05ALX4
rSzE5Kv5yMVpJFHNqXBr3TER9pGVsQaXJLB7p1KNBhMtu0qyac7LUuanfLRSOOVsoBGYJmMvCMbR
0o6AN6nfyIzW2i28DL+PQWcBLWfAnyivlK6cJS3tac6kyZhzVkF2HkA8aSguw0YdhlQIVhu7nqGb
1WI0bUrynEwTWFgO8jiB9avDOg8yVtIP0oH5/LlscwiN1pVhMaCuKi+1tqizXjU0h6kKBSSiQe3l
OVxTCa0UV5UKyluz4Y05MhpXLlQNmuag2zsH7OtpFI9BswuNsUXtQWoqhY27RVuJqvgCYxuoGYrC
6krbA6txam8CvFKUsnJccr0QgHpwcDJZKctajr99HA2Mvm0VESxzWxzefbCRoK+8UgNVrMqOaiTN
rlKdL3kv8ZZFD8b382jizYEZ0aDKFQSm2Tb5Zkk2y1U0S+yxyGFylVuU2e0RRLYR4zTyHWAaaLvy
K0Vpyi+8oCwnlIILOPBmt2TlgKhSNHtoQ9bY0ulN3bo3vcFPJqitWoFttqWD7zMCM5Xu5dnCG4PH
YtoWiGoOdwpdHzfrhmpbEkTj5DmpDQoJYXnRaovs4j2CgFcOpG2EjUHilLWRTeJv7cVBIYfSQrC0
4IWIn4yqbT6BOZfbrlHjlfVTse1RxPK/CqUoDuNKJR5rViK3VtJ2VxOYK3kwts6vWalGfrxYFCuI
cAHtBjWWS2FEDg7B1IGFxAUJFzCWXuASiOxwjkPP/3Mzi8MxCDPGNpUA7BV7G+DTCgk5tg6qdxD4
YZMgu5YeuhUEN5U96X8bg9GJl7SvNyHTrdAcVK4sv6k2Rm29jO9ZRcKyt3C5jp/Ho7+PBv3r67Hk
Y28KPO7hu030DGvEsqPQJQTt6e0VCJExY2BWMCU4kBOhlOeWszH2BjYdL9dITxAOkBZoIhEGIzg0
VSjQSHKkDcLElmHI12g6RT5DUiIaIjxFZIo0h/Lu/wxGU2a/DdHUQ9wAiO+hiUbe1Ck5RVign7j+
GbEAKpligJ9OkWLwp8/Kpgm6o2lut+AmcTuy3aeTntWpTKcBpYpwM9Ho8v11/8MoM/ehXKJPt1cf
xrf93x0LIPvjTV1UYdN//J7K38qfwEO35xmpEIEHERYCzTC6HWSfbht92Pm3F1VS5huC0e3oymmL
UJz5oUS3F1cloO+D6qKyLiVY2dyeD/NCWZc9hdEt1rVqMFSDTb3LWLmAwPNvCW4UIugWrKcqn8FA
3hLa7I0DqOANfUtYhZRaFcIt4RVSqaZT+FRUPp2waVgBtOfuT2dVCRrEIS20QReZ2H8AucYfWZd2
qSYV8XW0RBeDj4h1qYugCw3QxbDzy8XNFXp/e42Gg08f66pVKM+sE09WHjRFD7ls0alpl7ZIg0Kr
0KB9m/2J4tTWykcMrWarEBH0J3KKa5v/9BClePZa3qYR3yLIL9RhxmgpVanV++Xmxk3CnGoHC9u/
VMuX0tIuzC74m32bBvD/UotQJmdjRhos8nCy0RLde/HapYcjqUF/F629eW5qEU3Rr+8vrEGXNbKc
FFZhherMQnGhDjYl+5CbkgGlMpJuMyULPmS2ZOgPa7/l91Jrrq8uObzkGn3wgiAsXKitARiQl2Qa
k73KmEsERpW/2Azao0tQTgw+p3/8gvRbZG0NwrG/GefGLNLF5/sUaXYNgoUO7uIuBqViAkYTs+Uj
pCJHGOYLYtRhF1Xs04PHef7AMWmFJa2wattyb4MlLbC8FVYfNAYZLG2Bla2we418XFjWAqvaYK0b
whFjSxqwuhWWHjMIpAXWtMLuNQCsjm0TlrSuMCKOGQXWhtu6xIg8aBjA9Kxl0dJWSHXQEABkSytZ
K+ResxYLCZZum+VsOguD8Y6dqx1kivfxmwZyS6NbkclBw2DPrCD0t2/dCig7aCDACO/b7M8xa2UK
pIUrEGpKi7WCBVq7Grv4wQfBMu+Sgtl3vUPhp+4fGRXt0lYqhXmFylo1piSsy1pJDBE7mjabpHnz
wDuhJOIYiz2t20YoxK4GtlMpq5bfOTNppKjz/uCTPW1jCCWwCNFqUaBQasMfpHVfOZeUDJd1hepi
SBAtMIGHQxRX6oJpXcyWUexcASANCf+KphMfrGpSoCBeTCfoZDrBp2DXkKV7yo7lgpJjVZoEXYwG
YBWQDWJuR7IMw6CwcKNdogyHQ2CnMaF9w6HJZjqFRHrpTYBrEPCKHIdiztU2Q5q0PdMJrvamBbaA
I1KxOtz0CEt3gFDYFEbNL7R0J5Jf2r84PFC1Vgos3clp16mF6KKWbZbuxj4hHBqKaTtNaukuKKda
O+VFw9B9WluqO43DaZdSSvlOo2iMflo+Vi3DUzK50/i6sAzHhf1wSrbbFJ2in5be44zg8ezBJbPZ
AQ+0DU8JKN1FULENTwnYTutr1zY8LS92DlthG17rP1M77a4L23AxphUyfZBtOKtWxvFO+/XCNrxO
1nBbqK+qnTbeKYY05ZvDtfHGtHPbH/7Sv7zuYFyuZSWtUUvFUHu/1bMl1JjVCFMD7T2ERtrM5inh
gVbWloyJfZtuv41zaZ+UWBOreAbGwN4cwoBYedypU6EURTtf3dbYVqBw/epY71Fqa+wY/2L8nucy
EMfS+D3PjX/RiS3t2BmnVbH6La1eVWpGSzDlN45PVUtdGLOKoXGKX4ohmobG0KLUzBh+c6nKE6E0
MiZUWyPji4vb4jxjBBID102FbU+3WxhbMhtz50gLY0toM+Z2nJ8/EAQCeABv/q/u5w6NgJR5Fzf9
Th/iQLYOtw9emTabg00mZvO0X/5+Nbp7i6LHMJ6neV6LfK/g5rD8S8MwP60N9tFv/duPVx8/9FLT
OFJaxnnr7GA9CxbembVm6/o9iRmyKr6FN7ZCYhBAY+Jq+VJsUAxlSZlssmC7K/M+nbw5hd+e/BWE
4FkTHMym45U/X2zmaEb9MQTeGU9m6zRAT/5NEC/G6/UChP0gbEiD9oxt0B60Xi8gv/3zo5W9Lzbz
5az4O/ewBvrwKfTTIH73D17ykJfNUEC9aK3SbNlkM0ktm7IKkwdPEDpOkiRktsBkEwTP8DEV0vk4
s/nNyWw4TyhFsjIQ8hKaMPZBOuiHvhMbNf3CA2fd74sZ+H+P01jgs5UcW4FRgmar/DfI2eUMus1D
V5/Hwywcf/thC0fbAgUuuv9yC8e0KpAjZfoGgnuHLEobvi9VPWCS6QK4D4J+KZDAiFtNRMhBQaA5
MqZUGYA+wKBwikKNPILCCQq41QH49nOaFfAl/OIr+B/GKPCRocgLgCqcIjNBgQQ1w094+jPCk4wo
SFEFCj34HVOrehDITJEfIE/B71og3youtEBiiqbutNuMZJnqgeietZCFKyrzRTgV2FU9QO5q6ZLC
RbRFCQGy8fPfS6tfPGEkBGvwQr/g/riAIIcr9AtVwIp+If3hpX7B+XFXlE1qYvULpQWywD72dalf
cElT/QKUDQNCpl6oplPpAloPOqtfyACngWLT6QRPWvQLqZKAOgPhcR562u2yAU2w1S8QKGVAtaD0
BCQKhX6h+KGElvqF7CMf68oyNbCyIWKdo8ihehpibKMHn6IPo17ZdqvJyL/5tpx/GPV2zI+B+90g
xSYYXWQaKXSZ/zK4dTQv4PYA2jwXAG60g1ua63t8SnU4zUhLHQsRXuj76aeVMZgKHE6dFmkM+sDh
r7efe0ikP9z9Ft4DDTvm9CtrHOLaMacf81wx/92Ll7ndnQBLJ5Lr1tKCme3CAZxDY6UzjTOcouPJ
xpr2Tq3VT1ApmOmyMzVtWjC1yXKLEZJqc8MnOMCsI8I4WlmVrGPXlBbN7Jq8BE6venHPqtPd4pn9
wCG9ItK1iKxTVHTQafnMmNQyflt24a3G4BsFWndhTWV9l4BiawPlFAQjpTix1ndgOjCpDB6lrplK
K1mzUZSlevTMOgguCK7BJTXC2iBOa4ZCllZas6WMElRAuXHRRKQmd21ENqMwKl7J46SwCw2nloxP
2ujSfMj7bcTTshUzwra62s2fLDGTwh2RzCLvexzed1cQZwVMhqm10WatPTQyM9hvAkDFwhqgtvdR
M9eoYTmZReNHNabjOISZfAhWhb1UsqsPFGNrRbLDjlaoSbsdrSVnih9nR5tSGdem5wg7WkstK8Zq
h9rRpqSCH2FHm5IocqQdbUqWW1Qdbt1t6RQ2B1sMpQQ0N5NLjd5sYJwx6FutKSnMXaU4l8fb91pK
Y03KjrDvBSpCc5+Uw+17UzoqXmLfa2k5XD/32vemRfVh9r1p4ezM2WffawsLQg6z701LU1Vb07vs
e1MSXmnNTvvelCA7hbbb96bFMqPXQ+17LZG0PHe3fW9akOjD7XtTCiYOtO9Ni4MwaL99b1pWulx0
j31vSmGttvbb99rCquJUss++NyWBCEZ77XvToqCy2G/fm5YVprmb9nJaYqyLyj77XihKMamxyV32
vSkFyykOsu9Nabg6wL43LSrlAfa9aVE7qXvse21Jq6E/xL43LV0cVLvse9Oi/GCjRijPWGaZud++
F4pzVoz1Iea6QCKYZS+HE0gmeHUz7bXvBTLFFG4ja7HvheLa6gf22PdCQcMkO94yk3YZIwwfYoML
RSk1h/tiAQGj2W1iPzanxZwdYN8LFIIYc7DtLRBIkvG/w+x7gUQRyo+qQ+PSonmvfS8QGEzMEVuB
GSNlZU9ut++lXcaxIfIw+14oTbR8gX0vUFINuugj7XuBkCk4pnfb90I5rgj7/5l9L3RLKLCAeE37
XkBVNnHZK9n3AqCW4LvxSva9AGgkXMxfyb6XdhkYSrNXs+8FQJKO4evY9wIglfbSW7Hvhc8h3stX
iPOAwkerlVt7ixVogwxhpNQ0CcjU/RXlOxLNvWSNCs2kt0YnloKK054T0sDzrJ+8/PlrHp0pe5DY
Oz9sRurcDYQQwF2qdTixE7I6GG+pg09a6yCTeh1SgMI0iabrHf3AQtfqoIoSA3WM4S01Dp9m63Hs
b0CoMqm9uIUSvFFFoxtYsB+oQgvQXFr1W7gMrNIsbMp4v7p6OGEEdfVwN54N/FqEpKAQ+if1QWmV
hElcE4RJYo1yDhWESSqOl0tJriFe2dFyKSmJIC8XtUjFaWHi0BZJKVV31yMppZ+WKNqUkQcrkZRS
ffL2UEqguB7Y30ojHqaIYxh3eCglAXjOYak4Lvu2ScJxEEXxJJzP0SS0Zmkh5B/uoT/W8SYsh0QJ
wgvLhv0RmBhJIzCxZgQmWmJK60K4UwF/YAQm2gXDvIYVYx2tjMDkpVskC8A05STMNk0jABPtcom5
3gd92x9VAjAl+6IjAa4SDZvpJu6RgZ0AV8tGYLk67o8EdqJdrggx+4wnDotvBGCU4mJpj0JvYXNy
TyBCdj0INZhHlvp+rrgVih7tn0K6osQQvLQd3eehAuUVcwwYD/JQqW1Crqn1a2zxUKENDxUoLni5
+Y7wOKEQHp8BB32p1wiHfNNt9Md7jXDDlXyR1wi4s/LDvEaI5GHdawT8JOGVeYDXCJCXZJLhekCw
5i6CMFml1whxvUZoi9cILeEV2bv5j3YaEVjjRlS7HaitdtxtqIbXzc5bUXe4ojStwwU2mhw0BDtc
UUQTlmCbMe9g2MNcUQQhgh8De5griiCU47oTxu6xPcQVRRDGD1sIR7miCMJlwylp99ge5IoiiLAC
/yMG9yBXFHhIsYNGF/waMDS3bUc0HVIEUeSwgdji49J0SBFEGVO39m+FBPPaIPQPckYRRGt2MGq4
9Mc7/cgcXLBvPA63OWVNbxRBsaAHzdhWFxfRAkrl3mVwm3lODG/a7zyCKsoKu8mj/CimNT+Kcs4Z
tbqr1oalFQ28pU1rOlsGyFs+Iz9e+yiKrf1s4SkiQFYov9Ys4k6k2J0vjUAK1Xq+NEK7mkiKyzS1
RfaEP7iRtUT0d5e3N2USeoJOMpr85cJAPmefHKPLawhB2YO03vOZ/4x8b+VNZvPZ+hktwzU0erwK
wxgUy5DYJXlHSghmlXa7IKJVuByvwnhRoeMcDtlddOHTOlwGYTBOIv9buB77cy+pQAgOWt9dEN78
u/ecZNrgrCtZOsocwexG8O/jaLMaJ6FvM3lWqwdR0M7BW67GyyjZzIJxmvMT7ss1CLob4j4ELWVe
/Th5XoAGsjYMIOPaBTKL/PV8DCllQJIMRqnVQQCZxS56EFnb1JLj7F47zsKYljCcc3uX8zbBbN1D
6+dV+I5wMN+FD06IIpB2GDPT1Zz16GkPeZtZ8I5Tw41U1AiUhIn75zxZvEtCGxsVXodlhzmIHevp
zZ0rtn2JwhZIO5R3Z7ZEXOCuECLPrEYYnELWAaeaicYO9f/X3bU1NY5k6ff9FRn90hCURN6UkrzL
zBoDVd7C4MZQVdMTPV7ZlkGDLbklGYre2P++cU7KtiTfpAI6YmdiqgFb+eXJVF7O/fgjXZn1g/6R
PEzhV6ipA1CWBWnu80hcoupnQ4Ugwi1lMkN7s0IYWKiLU2bfY+AAOTjqNjvkqHl31r4lR73zy/bV
3TdiNLvd5k3n+oYctTtNctTrNFuf4etW67rTJcbH1s3furfk6OPV3e1ljxxdd8+ver1LctRsXZKj
08vP7TNy1Lq7uSRH55cXd7dteOiifXbNyVH77IoTo312RYx297ZFjj53rs/I0WX7FEF757d33dKf
/e7l3cf2VQ8/vjhr9z6To27r5pyTo+7XX+6al+3bv5GjLmOfYRC/3Jxfta7PzsnRbbfDydHpr+0u
J0eXv0py9O1XcvTrZfuUHP3auz0jR6fdi/7FTbNz/vX65jM5+vb5tHXd6VxfkaO7206XHPX+1vvS
vgLUy/Zp86b1qf3l/HA199ZaJealW78XDx+gMBoGVHx3lKHk8qW5VEpWKkw6mI2hFnQaB0MoRdog
l70OOe1eLFMYa7v4QuyUJqPUxsIDxZVPSytfUtOitAHKRe9p2ABlXhj4I0L+BzQ740SLWOR/8XKC
7L0njsOAqZqe/LQ47e9nqeHN059Isth/+pv+vJH9Eme/jPr3s1S7ontpFPfTRkJJ+oOt8NydxRFs
MRChpkGSBE/+YktKE8pJgSXgj9ibouy3lN4a+BldPCiZkk6p8lM8D41h7I/8EE6WxMi+g9rp5dpA
usTsvlqP0A+nqryvs6KLOkSxUFC6EiCTjluuZBShpnY7MNQWw09zFSIRzLKpu7maWHnIDdKDxTaH
8wiWpRen5J/R4MPyD0zZDGmvE1BUslwnDloG8p20MjE+mWAaCw88An1T/7Wq5dTRnxMvHGEpNy8I
QWyerEoxAbpOC7cdXX9j3Ptp+rLsAkGwQHDqT4/1d0tIwYRlVYBMkgdcHY/+y70fbsGGh4zsiVUP
3KFViM4tQag+vq2LXIHyXB+Ss53Tvt4HbBH4mRXX2tkZPJtV4Vp1qZzdXcL9vcS9S6BQcTgiPT9B
zXDpzQrllouz/X8tdYfD0QXEK5e6e/Ymk0pl7r6Cm/jGEnfYrePQ0pXU81MynxFvnka6PiscqbAO
jHFiDIJwPE370yAZmqsnDNKMB0EaQ7T2+Xd/ONfqOKwSexHFUy9N8iVjSXPZsgsFa/PkuOXat+eY
sz0XCQ0CyihIHo3BC6xG+DXxfzc4/AGevNzMHjQ0SwQPHA9ejOzBY27op8xcty4tF67d1+18HowM
qfyRZGMGH4B5Cn5Knwn46VlU/+2NRtTnyhOSbaEMsI4XWAYAGYBiAIRRaF+gGXNv1KbZlU2kqynk
2S564DkDHyp0ulabeGOneJuW0PVnRTDX3llecRi/zFJ9iixrLF6Cpwk5D/E7iIeMJvOpn+Rhpevs
hNUHeg7xPgghCGs6Sws4lss3X6XF+sj5G3UJuvFCFa6y7CqQlUoua0Sbr1XI3IRYr2S9hsYMyjvr
Q6f+fRykLxtfUXvxLUztInh1/WW5ZSGp1AneBzm69X2TK7IJMJJSuRvmyd9K6Bd/H5WSunapPuQl
+D+ihAQFGqYGej+YWgUA1wwufQMCTv04c40Yef40CslF++I6jy2YY+/AnjxNuTF5ms6iCbBbiw4u
v3Q4yIyTBaz+JodrUeHswF3cKhBuCfUNVtDdjIVGM9jZfDojvTK2LmS0Hzv2R8kKuLVknxf7N4jC
4zN/8Wu+A0tVIR59VtPJqovsAyz566VBphiAwMoR6QazHP8AWeB3vdMyp2ugnLTqaVH9swkfr8+Q
w9mut7pAx1twnORe7NlZu3BXdjLGeb0HV1kVegiTRVWBXCcwIagpITfZl1C01bvf0A+oIqu8iiia
5jq4W6hiyPU8Na7HRpY94OD6unNIPgdQdXlDV1xuYelmw1jr2VZd3HY7pNu6IR3fS+axDzkBklcw
aj0wYAfpy8lU442M+WNwmCdO7CAOHIZWpHW8R39JX1crdt6RMibLYtrGNwSqXeSHQTm6IhY+XtTC
Xn8lnNqsMrYOjS9Bf9aJaNaRsXLifuTEj0eD0tIiZ17qQeqZ7csWPBCL8LiTMkbFeJjf++h1Yy5Y
2E/ze5900REnfx/mGBZFbc53YE5/n/tzfwnYve61v5GOnyTevU9+ge+2ITvCZXQLMnDeemINnW9g
gZ9N7BkGnG8D1uHd+4DBASwI16AxunQrtA5DzUNDhL4Rz4b3SWJoL/KciiHD1OkPFm4RQMdNt9U7
b/U/9npvI2cd++nw+DEeWOaj/5J6g9xWcSmGhRf0LckwCXStdZA+M3J/nJClqHUVpefTWfpycvzk
xceTYHCMXR2jl0OeJqHKKxUlPzQqTqMR0JYGQwPb5eZTy864aYC0Hj6VMR7kCh9evS1IMr5RvoRe
kMWYRmGQRnGug47+BPfjWDMc0yCOozj5QJLQmyUPUZoQPx2aWZX70RQZnRFYl1ANiYq4aAJ5rPK0
MAii3kLLNBph2NB/6ujAcX7E4LRWWkbLp/LwtuBrXHYZfjSFOIfd4NkzOWjOLbssLq9Dx9M9uPG0
AOqIMqe2DuqPg/4MI/B2Y+eey3UhJFYL3t0F5M3YDY5P5GDBrUbtg51E0Ww3LD6RhxVClXbEQmvy
g3pRSwpFt0heu6DhFM++zpLGEfiaJIWS79K0LC7LwmJe71abXosrRTfTuxUXNEE5xrGFB1MUahFP
nwu5Dly7rHleAD8EAz8OvdQ3hhPfy58ILfgbXvHEJ58WTwFhMdxw7XAcvdEJnrwkxwsHzWN/HMC/
Jy9Ojpe9gugGrQxnOOZKyoEhB3RgSO6MDVc4tqFGDlRfoqOhslenraUklnKCJdcg08X680YrQ4ml
XFnWSC9X9Tb9d04g6GVrI7egbVuUuag1RE1LYgAxO7dL4axzBDpR70TODMrG0mCSg/+oP/MXBnQy
B8Fa2+OzXsG2A3pYSK9U6NqmZV1QjiFeau2XXS359Uxv3z7Ls+7vxx9bLrOE2DNHsY+sj1G4b270
h3oDwRRkM1JQxeRmxJWO3LKn0tmUa324gYWxc72cw984O72bz6B9nc/eczJsdEXeORnoAwLrMG/w
Kq9J5O1vMJMVrpZW7tHVnChwglw7yDb1l8bB/b1fOG2iyWg2md+Dr6nuTh9iBXzmOHwlBq8cTYCf
bgDEJNNOovgOGWgTZPFXefFWWJw6ltjALGszYXWRYQWosBrNNsCa8sISFpI2WRvmNHc5VDifVnAS
I3ULhmEm1gzDzIQINwieAasvI+AXQfe5RyTzwT832HExzhTNttPk/uRnOHROyqQXjco/Ef+7f/LT
8TzRvHT28fHy64coSSG11glmeYlP/kpSMAGH3uTkr+iZkV20Py/HDY7YZYP45nFLu2G927jXePx3
H7glLAgMrTBwSzTUuw08L3a8/5hdblUcs9Ow323Ma+LNnzFwSE5VGjjbPHDnX2jgyrZA1q/wxpXd
cN9/4Fqa/DOGLaq9b2U3GP2XGbfNKXh6VHjdNmsw9ieMO56+96Bt13IF3cr9LN1sh5MAWOxYuwWA
V8B4Mk8elrnes3YZS2CZluSYDgVNtg0yWjipga/lEN1NH7zw3s+i3wCPKdu2OVMLBGU7CuSs5gjD
DB3hOIrKR5I8ezOQSXMWYUK6cRABz9pglGp32jRpMOIN4yhJGsu2vd5ZMlx0YHMqICk9WBknBzeH
hJvWR3KePgCLnhLtU3mG+VZWTQSGibWi2UsMOT4OhofgbO1oELB3zaLYy1mioI3tggNwcD/MnKu9
zLm622r7pHurfb2XQV5QOx6/GcyT40zVPsmRIJULFuBZEHyX/WQ6mCcZLG0wCbC9zuk8IZ+iJF3o
5MFSgrGdA0rBn0rHQS5cwC0s7wcs/XZMneF/mYOdfqcc3fd0X0A4SXzkk6NwiaqUDen9gnA2T2G0
pDfzvUegJcG3B4z48WzipeMonh7PhsnsMT7Gp/V/3SWSzSX4/Wynrzn/HkwCcB7ZNXq+HLHDhQ2h
A7NZAv9og4T+M+l2eySzZc3S2ephqes0lN8gOZiHIdoFQz/NInwP4cNcTNxhg3Q/tfJ1HyzTAT9k
5zdyensD2SgzH4dxEoxIFRcObDAijGhP6xFhUikqbb0jIM8tCxk54JbboIckGXphqFeVlhIOGHXk
4YoWxwZN6jwZgBm3kS8GBVOy8MjAbUAwZa4xHQfG2EvS4QNYwZdIWYhqtl8Vh+qoQpU2LJBHQzbj
+U1r8PU9u2rf6y27sClG4eHEkQCURQcZgdmwDxsQlZuk2VijMRkHE18fbpUmN98VhAru7ErrrHW+
ZHKgfxqY8fhQS9XJfEog53IcpA/TPDTYrSpAj2PfN9AIaqSxv5pq28JYkptm95J0O3cN0uy2Ue+C
idD/YQgOstrETz4QRsbBdzh4tREYPlHCkXDfkOhpPMFSCMvTxYEaN3Ye+eFZA0djMoqmXhCSmTd8
BPGS/8NgKutn0d51qIWSYDJP+s/TIMtS/LXTJqts0biU8hozZVJucWC11g9JaUJI9MfBcbIKh8nO
Ry8c6czkB5ZJycfb40R/8Z1hZuzDPDjYmdb2r58+0AbpNFsN4jsNd9jgVkMNG5I2bGvVWCkQdYbj
e4dySKSxCHyHMLBg4oMLAfkGkYRk6MdpMA4gqDXRlVD8+/nEQ6+5UWZuXOFCrikdRu+PcgDk52Qc
xcmDD9mU6YA7o9FY2p4/doe+Z/+ca++AzXZD+2c/TBpEsSEVEEDgeYPRcOzKwYh6Q0jUoYY2l85o
wJyhonSFaFEsHTUdNrLLb+qPAg99dOIxJIklT9RcpAiB5yGjQ/5d9y7ursiTN5ljPQ+We1CBi6Dv
+7OhAem3l7/l3Nebt58/4E0IK+Zrp/0BY+7Pere9FY6FiU/3d6gcCmo0eNAIB9hl7vd6nULC+Q0r
k/hhxOC41DcA8jGwnpbtXMbAOwSzlI/8p8Wc6qzlQ2+Gbvr5uYUySLnWWADy8WkK6dsa5LbXgqMc
67mU4sH10+CzvXz6ysd6C5mfc/AHciQLbVW+FWSHKLfqevfQy6anee7py9Mb8lTsYBNhNhwHy0YL
z+svncvr5hn50uk1v5xvaedsaPexfbHlaXfD01eddnkYDOoZqSVTcu7DYYLn00OUPvovyWbmZLlg
8/zJaiswYWMd2Qy1mcyT/Zi5FVlAXS5jJiUD3rzTOm+QdphZ2uFPHXyfe0vmqo2Ft/DpZO6nUQQR
djoXAQR+m5yvnnNsCOi/Or8FLn9553cv+qeXd+e319e3n8ACm0bDaELG3jSYvBTaqkIfn1rtBasA
Wu5hFIaaGSTTzLsixxMtcSAl0DpO5qYx8V62N4PbL9fskrea3UoNwSqYa9hrXe9v5jBMTXx+1myR
s/PTu48NMp8OdQZaONL7Uy95bBBCzlq9U/p3+tvJqiQHXAFwNkH6BVpAdKogasx+77y1HZcVcMFX
oyqlbBulsoBo16V0Gy4r4EIiwKqU8hwiy1PqFBBlXUr5NkqLuJXelaZULBFlkdJhHtGp9JbylIpt
lBZxVUVKO9vXEy+sJ7hXKlLa2b1ORQEXUkJXpXTbeuKF9eRWGnue0m24Io/r0qrrtLNYT/Z4PB6M
/TylTgGx+jrt7F6noohbdZ12FutpA6X59YShFPUo3bZORRHXqrqj2Ob1xMoHqsuqL1TcUjuACyeq
yyufqGzzimLlI9Xl1ZdqRutW4MKZiqq8qrRuPFNZ+VB1RaWNmqd142Jl5VPVFZXuFU3rxlOVlY9V
V1ZfrhmtG5crK5+rrqy0Y2EX7FhWhYMVs9nU2Vo7gAsnq2tVXa+dHcuqcLS6VqXtmqd1K3DxbLUq
bVpN68azla0drqr6eu3sWa/F07UaH6Rp3Xi6srXjtRoLlKd163otnq+bblfQwYMtwO/r0mp9sHAA
/l2nRclZu9Mh+pO7UBcb9UfGqtZbhrthIezCZVVwXamgvAUqzvqxN5tk5TUbWZY/VEYVlU/5trJq
W1BwrhpaDqgSm50z0Fiin+kt6FMnWpS9DAYYi7hJHnCVgLXwY/QqAZ5htenl1MLMPPNkQCyDLx6/
+9IizISKWFr4OvuvdhfFGUEO+NCDyrJcLBVhUNIANDzblL1LbcRCSTdI58lg1dp2QLSs3Hr+NERt
xwrAkehpE476DyMvqw1HVzVw2eaitTQrWstXA+HCQW/3HUifMOEzebr3+trv0o+jCG15UWbNKqDJ
3WgXEVgF0oiEUWgkYRTNcmUwAULiWbYJYlxzaJZEp7gdSDWGJmy3pA54GAa0QT59Pe59XaTMbGDa
T8eDfx/I6TyYjMhtADXmoDYcxSTakAh1ieooe9uELWgc4Pqk+dxDB9EsWeZDnfaRXlj+syj0w7Q/
CEKovpQsk6Gu5sSxObAh09R2OfMz1MGOOscb5tWl1NrzkvM0i9fS7Crq2kuV0KezJmnetglmdoT/
HJ91P8yG0xNRVA4NA909Pc5+NigzWfYHQ5qyP3j+Dz2C4wQGcDz04hHNlEkyR49NK9Bjvy891ooe
sKfvp8d5X3pUjh6lKtDjvi899oIewSgH7ezmNd/stVtLQ26D2C6kL12JLQKM75XZ6yoqK0AUtZUW
+1VWiFtZGKyiskLE2sq1/SorwJVvqrJCxJrSVRWVFeLWmNP9KitErD2n+1VWgGvVUK/sV1khYvV1
WlllhbhV57SSygoRq6tWK6usELeyWFVFZQWI1dTK9VRWiFtZsK6iskLE2nO6X2WFuFXntJrKCiDt
2uqKCiorBK46q9VUVgj5HiorBK6sXK+ksgJIp/a8VlBZIXBVpXU1lRVCVletVFdZIXBlZXAllRVA
urXVFRVUVgj8tiorhHwPlRUC11ADVVBZIWRNG0sllRXUnqJVzZbVVFYIWdN2UUllBcBsw7y+VmWF
uBv2wWtVVsIVEoSpNbE6i53GMC1IfMlsYdsSnEqGSb4xSM/rMnmrTc7DBy8cQlJPhOi9hMOHOAqj
OSRTWRrVFwF1kApv9AReR4k/+kAG87ToS7p0C4DSFNUMJFUFAkDkte2t+wUCxK0huuwXCLAsR/WT
q7JAgLg1rO37BQJErHkfVBEIELfGnO4XCACxmjBUTyBA3MqXQRWBABFr21v3CwSIW/kqqCIQIGJt
a/t+gQBwK/uvVBIIEPEdbNiIW8ODYb9AgIi153S/QAC4qrJPUCWBACFrHqiVBAIErjqr1QQChKyp
D6gkEABwdb+gSgIBQr6HDRuBa/gxVBAIELL2vFYQCADYqaxoqSQQIGRNrUAlgQCBK6taKgkECFlT
L1BJIEDgt7VhA2Q1eaimQIDANfwYKggECFnT7aqSQCApVXTDvL5WIADcTT5NrxUIJHXQDr1ZW79m
bHM8RuHfVmOboMz7tyW45A7kI90M/rVDLkol8Bqk3+/39fxu70IubQ2QQEpbpTPbh9FEW+LHLGSj
nr3KWdo/xmUrB8usHHzVs0QVYJWe91umKvQsFj0rWyfNWpPCmte9rg5HgqlMFjXUyBPL+edDa2uT
DIetfwef+PSFxD5GxgVJ2WfdNpVUjrPlnZLnyYwxCEorRBc8T7xQE8CpaXEXL59HDE4d9WdxEKaP
/eRx0CCuJFBpeuANH3XP4N2Qdb1o6u6Pc1Wmy92Gzd8tznWZNgmOC+M5DlL/XcNdYexQVKZCjK8y
XcUatnj3VBU6G/Z7D9txHAeMifuGbZvccRr2+2foSKczDMzTCW3ee/gutRgrp24QQq4PX1DZsDFR
RxzdG8HoxBIkmp1AsMoSjFn2Wpj4ZjBmNWyVB5PrYDZfS6SxHczOg1lrYNySqvyWN4Nxq2E7eTC1
DubytSwAG4p9AJjTsN0N1T6yKJA0ytf6YNxW2fs+WCR9PfyJQB76k58wvf3ifQeRmf1qLpPNLnLN
7iwMslp4FeqA5JLbFqqAzMPgez9JY9+bZmWZ1guCwDQJqkS5GpDYPU3x8OFkiJezwCIJcFifSL7I
43by4icEai/DzqNw7bETezwe0tGY2RajxOMnQhBPnDBFSQAppE4omekNu5zi8p7VO/ke/+vrPxL9
Y5z99PWXyX32qf6Zpi8nB2EU+oflbb/+EnfuW8PHtP5R/NP+A+PRh07nk8lhfp6t8qUluL1jnqHo
QBqkE79ApAaEu1xYYH+76bYKAVD6wr27an9bBAZhmDVe5FlC0hWEhYkyyhDz0WxXI0gOt94oHe5s
5AgIgN/QyHgO0gcjnSR7Wlubu7y66D1JkxFgFiAlAwSYbQWCUtiyGHl1enXeJQfLpAnn07l2oDzE
iDNmikJbe73tOJhAWHJjFWw2nU/SYOglab4phEuVm+4M3IJ2rsDY9ly7zsfObUZZFgvHGST+QLfI
N3SS48y0OcegzAEkdiZZ3HuDXEXk7q59lgtmnsXRU4DBfNFkRK4+3rXPFhiOYNLeRNkGO4Okbs7O
gI0Fg4vqT7MzYJ9KAl+8Iazwl3a3dXN7szGokHMIzLTZj/Hj2Nq1Sq+6Bj/OuekoizK7hnNrEkJi
6QHmdNcerlyYAhKEWL8RyIOImdka5H7Y17UQyd/DMVSTCyFT8uNv5CG6v/dHpNW9w8vxL5DSls4T
IjEiP/kA12cSjKAr9PGEBQLFWH7p312dXt9dZYvEMhlwd3JrhPJVuwWhx48w7LsZFBmmpDOYJeRi
DmVd5rOJ//0DuZhEz4uEGQ1y8+349tsC3xYCr7h4/BhMJg0tq5EH9EGNyShIVgG23DElA5VI4U3c
XECJM3J7+7dtexWbMcY2Ndu9y3XLUjho1lLv8yyeVmAOWw6mgM0DyQcKC9u0LcVBE1lh1JKalNmY
1jeTY5No4nkxVGUaRFBWJy+4ZjHThZBffWgox1SSOpgS+yF67ifBfehN+tPkvgEFa7fKdIt26jdy
P9HL8/e5H7/83XKZhAyS/v3Ym09SzIJCghmhpf+RRH8Guh7qeY6UnkN8yNNMmCST4NGfvEAGD1ir
3CEHsEMI4x8W74Ye5umQmCBnhMoSPODSiHjI2ZBohjXDdbVPzMkyLvxvpPRJ4limcjjGXb5mK1m1
tpJjmVBQ97Wd2nU6ZVSATgrzqz17MWSub5D/fgZFVOIPQdDpJ/7PurzscxD7WJU+dxg+PwRQWyqY
TEiSRjMkHBOHRDH5GhgXAbGXpeH/HXMbhBNMY4GdS9tkQjqgHX/NiBmrM2ROHVMx6vBXzjNza/Uq
hKkc6oC3YToPYW3CPkm8Cbm9uzq+bXaLqW4+EGaibzC3LJAfXWr9RvynaYNET3488V6KFyA8KS1p
Cgsya75uYKLWsrUVMy3FKMi3r+lV1Vq3tuPqyrarVApnfhiFpOvHl1D+hdg2JwfNLzet7uHe4w8T
PTk27D+loOD9+jXeusRQGj9FqufhYxg9h/k8A/pkJsIRqNZ0BWTesoTcxADVR5PMtKQjoMRXK9NN
NpOXcHgRkAOhmMX21TiWpRrHjFJhOpBWr/jeAsjfmUV19J8HCb7F/jh8E3YBVonJJX11p3VWKHbq
WJyCamL0/AdMmKOcPRMmy0WhGeWWifIHfx3tddY5oxzSzkhMJv+aTmsdkdirshyMvX9Vr3WOSEa5
bTquiw60r+m11vnFqIJU8tS2XznWWucXY1SZDndc+doZFrVeLHOEaQlLvXb/cavWmxUgDli2DXx5
PIUNaCu1ewM6wuKlDSgw6b9QwBW/6uKuN2dSWKbgTJa4lPpnFqu1Lm2LmxzSCojfyDz8I5iRA0sp
y949bcpStDRtjg0XtC3BBedRz9Tx6AX6PGBcCr4HkLml98AptUxXUanW+H0XE7cWGX7LsoU1suiA
+kvev/DZivcfCuo5kEpqwftbJd5fsAXvbxV5/yVN4CCteX9K/5T/SzJgxOdkOCAjRexx9vl/KPcv
RPlEUmIpIi1icWJJYo2JZPiLhE+kSyTHD214RvrZk/A5KK44F8rkSgjLfd2Sr7dfuVAUIkoZZH7X
6qNFbqV5Gk2y9HNBAosk9odYAwS0NCgGDMBUP42etFKGK1uaknILomVLq891LbFnOVvKKS1nYTNq
2g6Vziv5zXrbERQrJrWV6xalhpEPeoFR/wkyJSIFb8IoCZtL05W27RbPulHsBWH/aerN+l7se2/Z
oZSQGJI5/Mc7rDehFkSjM0nVj3dY58oVtgJ/bIaZAH+0w1pslLBdzD3IXvMSa7FQwmHA1At0jf2x
VVrrHbqCmq5t0dIA63MxlNd5lZJJZSqh3I3a5brCFVSwN7lQgm6KU6+PxjjkM6Zse0mPuxDGpx19
CCrS5rH/QSe0xsSeUPYV66tKSymscM036pZr0mYJKkwG1jn7R5dHnddkWY5CzoM5P77+azHzikoX
8pBKrGGTNhamE0iRrSin7ocsGe1gPk6CP3wiuK2cDyQ5vgeeBe5JhTCOMhXj7uvvvwzKQYfCt4Di
kjtvRJXgHILq3gTKkfKNBigVdd+IKsvGTBZvAaUcDskC3gLKtuhbzZUjpZCvg/o/UEsHCLwjW6KI
zAAAH/gDAFBLAQIUAxQACAAIAC4M2li8I1uiiMwAAB/4AwAJABgAAAAAAAAAAACkgQAAAABkbWVz
Zy50eHR1eAsAAQToAwAABOgDAABVVAUAAZkpe2ZQSwUGAAAAAAEAAQBPAAAA38wAAAAA
--000000000000454209061bbd2475--
.

From: Frank Li <Frank.Li@nxp.com>
To: Damien Le Moal <dlemoal@kernel.org>,
	Niklas Cassel <cassel@kernel.org>,
	Rob Herring <robh@kernel.org>,
	Krzysztof Kozlowski <krzk+dt@kernel.org>,
	Conor Dooley <conor+dt@kernel.org>,
	linux-ide@vger.kernel.org (open list:LIBATA SUBSYSTEM (Serial and Parallel ATA drivers)),
	devicetree@vger.kernel.org (open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS),
	linux-kernel@vger.kernel.org (open list)
Cc: imx@lists.linux.dev
Subject: [PATCH 1/1] dt-bindings: ata: ahci-fsl-qoriq: add fsl,ls1046a-ahci and fsl,ls1012a-ahci
Date: Tue, 25 Jun 2024 16:57:52 -0400
Message-Id: <20240625205752.4007067-1-Frank.Li@nxp.com>
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258732
Newsgroups: org.kernel.vger.linux-kernel,dev.linux.lists.imx,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-ide
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Add compatible string 'fsl,ls1046a-ahci' and 'fsl,ls1012a-ahci' compatible
string. Allow 'fsl,ls1012a-ahci' fallback to 'fsl,ls1043a-ahci'.

ls1046a ahci ecc disable bit is difference with other chips.

Signed-off-by: Frank Li <Frank.Li@nxp.com>
---
 .../devicetree/bindings/ata/fsl,ahci.yaml     | 19 ++++++++++++-------
 1 file changed, 12 insertions(+), 7 deletions(-)

diff --git a/Documentation/devicetree/bindings/ata/fsl,ahci.yaml b/Documentation/devicetree/bindings/ata/fsl,ahci.yaml
index 162b3bb5427ed..a244bc603549d 100644
--- a/Documentation/devicetree/bindings/ata/fsl,ahci.yaml
+++ b/Documentation/devicetree/bindings/ata/fsl,ahci.yaml
@@ -11,13 +11,18 @@ maintainers:
 
 properties:
   compatible:
-    enum:
-      - fsl,ls1021a-ahci
-      - fsl,ls1043a-ahci
-      - fsl,ls1028a-ahci
-      - fsl,ls1088a-ahci
-      - fsl,ls2080a-ahci
-      - fsl,lx2160a-ahci
+    oneOf:
+      - items:
+          - const: fsl,ls1012a-ahci
+          - const: fsl,ls1043a-ahci
+      - enum:
+          - fsl,ls1021a-ahci
+          - fsl,ls1043a-ahci
+          - fsl,ls1046a-ahci
+          - fsl,ls1028a-ahci
+          - fsl,ls1088a-ahci
+          - fsl,ls2080a-ahci
+          - fsl,lx2160a-ahci
 
   reg:
     minItems: 1
-- 
2.34.1

.

Return-Path: <linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org>
From: Samuel Holland <samuel.holland@sifive.com>
To: Palmer Dabbelt <palmer@dabbelt.com>,
	linux-riscv@lists.infradead.org
Cc: devicetree@vger.kernel.org,
	Catalin Marinas <catalin.marinas@arm.com>,
	linux-kernel@vger.kernel.org,
	Anup Patel <anup@brainfault.org>,
	Conor Dooley <conor@kernel.org>,
	kasan-dev@googlegroups.com,
	Atish Patra <atishp@atishpatra.org>,
	Evgenii Stepanov <eugenis@google.com>,
	Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>,
	Rob Herring <robh+dt@kernel.org>,
	"Kirill A . Shutemov" <kirill.shutemov@linux.intel.com>,
	Samuel Holland <samuel.holland@sifive.com>
Subject: [PATCH v2 00/10] riscv: Userspace pointer masking and tagged address ABI
Date: Tue, 25 Jun 2024 14:09:11 -0700
Message-ID: <20240625210933.1620802-1-samuel.holland@sifive.com>
MIME-Version: 1.0
X-BeenThere: linux-riscv@lists.infradead.org
X-Mailman-Version: 2.1.34
List-Id: <linux-riscv.lists.infradead.org>
List-Unsubscribe: <http://lists.infradead.org/mailman/options/linux-riscv>,
 <mailto:linux-riscv-request@lists.infradead.org?subject=unsubscribe>
List-Archive: <http://lists.infradead.org/pipermail/linux-riscv/>
List-Post: <mailto:linux-riscv@lists.infradead.org>
List-Help: <mailto:linux-riscv-request@lists.infradead.org?subject=help>
List-Subscribe: <http://lists.infradead.org/mailman/listinfo/linux-riscv>,
 <mailto:linux-riscv-request@lists.infradead.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: "linux-riscv" <linux-riscv-bounces@lists.infradead.org>
Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org
Xref: photonic.trudheim.com org.infradead.lists.linux-riscv:79007 org.kernel.vger.linux-kernel:1258734
Newsgroups: org.infradead.lists.linux-riscv,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-kernel
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

RISC-V defines three extensions for pointer masking[1]:
 - Smmpm: configured in M-mode, affects M-mode
 - Smnpm: configured in M-mode, affects the next lower mode (S or U-mode)
 - Ssnpm: configured in S-mode, affects the next lower mode (VS, VU, or U-mode)

This series adds support for configuring Smnpm or Ssnpm (depending on
which privilege mode the kernel is running in) to allow pointer masking
in userspace (VU or U-mode), extending the PR_SET_TAGGED_ADDR_CTRL API
from arm64. Unlike arm64 TBI, userspace pointer masking is not enabled
by default on RISC-V. Additionally, the tag width (referred to as PMLEN)
is variable, so userspace needs to ask the kernel for a specific tag
width (which is interpreted as a lower bound on the number of tag bits).

This series also adds support for a tagged address ABI similar to arm64
and x86. Since accesses from the kernel to user memory use the kernel's
pointer masking configuration, not the user's, the kernel must untag
user pointers in software before dereferencing them. And since the tag
length is variable, as with LAM on x86, it must be the same across all
threads in a process so untagged_addr_remote() can work.

This series depends on my per-thread envcfg series[3].

This series can be tested in QEMU by applying a patch set[2].

KASAN support will be added in a separate patch series.

[1]: https://github.com/riscv/riscv-j-extension/releases/download/pointer-masking-v1.0.0-rc2/pointer-masking-v1.0.0-rc2.pdf
[2]: https://lore.kernel.org/qemu-devel/20240511101053.1875596-1-me@deliversmonkey.space/
[3]: https://lore.kernel.org/linux-riscv/20240613171447.3176616-1-samuel.holland@sifive.com/

Changes in v2:
 - Drop patch 4 ("riscv: Define is_compat_thread()"), as an equivalent
   patch was already applied
 - Move patch 5 ("riscv: Split per-CPU and per-thread envcfg bits") to a
   different series[3]
 - Update pointer masking specification version reference
 - Provide macros for the extension affecting the kernel and userspace
 - Use the correct name for the hstatus.HUPMM field
 - Rebase on riscv/linux.git for-next
 - Add and use the envcfg_update_bits() helper function
 - Inline flush_tagged_addr_state()
 - Implement untagged_addr_remote()
 - Restrict PMLEN changes once a process is multithreaded
 - Rename "tags" directory to "pm" to avoid .gitignore rules
 - Add .gitignore file to ignore the compiled selftest binary
 - Write to a pipe to force dereferencing the user pointer
 - Handle SIGSEGV in the child process to reduce dmesg noise
 - Export Supm via hwprobe
 - Export Smnpm and Ssnpm to KVM guests

Samuel Holland (10):
  dt-bindings: riscv: Add pointer masking ISA extensions
  riscv: Add ISA extension parsing for pointer masking
  riscv: Add CSR definitions for pointer masking
  riscv: Add support for userspace pointer masking
  riscv: Add support for the tagged address ABI
  riscv: Allow ptrace control of the tagged address ABI
  selftests: riscv: Add a pointer masking test
  riscv: hwprobe: Export the Supm ISA extension
  RISC-V: KVM: Allow Smnpm and Ssnpm extensions for guests
  KVM: riscv: selftests: Add Smnpm and Ssnpm to get-reg-list test

 Documentation/arch/riscv/hwprobe.rst          |   3 +
 .../devicetree/bindings/riscv/extensions.yaml |  18 +
 arch/riscv/Kconfig                            |  11 +
 arch/riscv/include/asm/csr.h                  |  16 +
 arch/riscv/include/asm/hwcap.h                |   7 +
 arch/riscv/include/asm/mmu.h                  |   7 +
 arch/riscv/include/asm/mmu_context.h          |   6 +
 arch/riscv/include/asm/processor.h            |   8 +
 arch/riscv/include/asm/switch_to.h            |  11 +
 arch/riscv/include/asm/thread_info.h          |   3 +
 arch/riscv/include/asm/uaccess.h              |  58 ++-
 arch/riscv/include/uapi/asm/hwprobe.h         |   1 +
 arch/riscv/include/uapi/asm/kvm.h             |   2 +
 arch/riscv/kernel/cpufeature.c                |   3 +
 arch/riscv/kernel/process.c                   | 164 +++++++++
 arch/riscv/kernel/ptrace.c                    |  42 +++
 arch/riscv/kernel/sys_hwprobe.c               |   3 +
 arch/riscv/kvm/vcpu_onereg.c                  |   3 +
 include/uapi/linux/elf.h                      |   1 +
 include/uapi/linux/prctl.h                    |   3 +
 .../selftests/kvm/riscv/get-reg-list.c        |   8 +
 tools/testing/selftests/riscv/Makefile        |   2 +-
 tools/testing/selftests/riscv/pm/.gitignore   |   1 +
 tools/testing/selftests/riscv/pm/Makefile     |  10 +
 .../selftests/riscv/pm/pointer_masking.c      | 330 ++++++++++++++++++
 25 files changed, 715 insertions(+), 6 deletions(-)
 create mode 100644 tools/testing/selftests/riscv/pm/.gitignore
 create mode 100644 tools/testing/selftests/riscv/pm/Makefile
 create mode 100644 tools/testing/selftests/riscv/pm/pointer_masking.c

-- 
2.44.1


_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
.

Content-Type: multipart/mixed; boundary="------------z0iVanNMO7Uu16uwmuaScUTf"
Message-ID: <b9e0ae38-006f-4c72-bb64-f39e6002fc84@linuxfoundation.org>
Date: Tue, 25 Jun 2024 15:10:39 -0600
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Language: en-US
To: "Rafael J. Wysocki" <rafael@kernel.org>
Cc: trenn@suse.de, shuah <shuah@kernel.org>,
 Shuah Khan <skhan@linuxfoundation.org>, linux-kernel@vger.kernel.org,
 linux-pm@vger.kernel.org
From: Shuah Khan <skhan@linuxfoundation.org>
Subject: [GIT PULL] cpupower update for Linux 6.11-rc1
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258748
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-pm
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

This is a multi-part message in MIME format.
--------------z0iVanNMO7Uu16uwmuaScUTf
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit

Hi Rafael,

Please pull the following cpupower update for Linux 6.11-rc1.

This cpupower update for Linux 6.11-rc1 consists of cleanups to man
pages, README files, and enhancements to add help to Makefile.

diff is attached.

thanks,
-- Shuah

----------------------------------------------------------------
The following changes since commit 43cad521c6d228ea0c51e248f8e5b3a6295a2849:

   tools/power/cpupower: Fix Pstate frequency reporting on AMD Family 1Ah CPUs (2024-05-28 09:22:57 -0600)

are available in the Git repository at:

   git://git.kernel.org/pub/scm/linux/kernel/git/shuah/linux tags/linux-cpupower-6.11-rc1

for you to fetch changes up to 3e1f12c26646eb0ad67d3eaefd32f765997da6a8:

   cpupower: Change the var type of the 'monitor' subcommand display mode (2024-06-20 10:08:08 -0600)

----------------------------------------------------------------
linux-cpupower-6.11-rc1

This cpupower update for Linux 6.11-rc1 consists of cleanups to man
pages, README files, and enhancements to add help to Makefile.

----------------------------------------------------------------
Roman Storozhenko (5):
       cpupower: Replace a dead reference link with working ones
       cpupower: Add 'help' target to the main Makefile
       cpupower: Improve cpupower build process description
       cpupower: Remove absent 'v' parameter from monitor man page
       cpupower: Change the var type of the 'monitor' subcommand display mode

  tools/power/cpupower/Makefile                      |  37 ++++-
  tools/power/cpupower/README                        | 160 +++++++++++++++++++--
  tools/power/cpupower/man/cpupower-monitor.1        |  13 +-
  .../cpupower/utils/idle_monitor/cpupower-monitor.c |   2 +-
  4 files changed, 192 insertions(+), 20 deletions(-)
----------------------------------------------------------------
--------------z0iVanNMO7Uu16uwmuaScUTf
Content-Type: text/x-patch; charset=UTF-8; name="linux-cpupower-6.11-rc1.diff"
Content-Disposition: attachment; filename="linux-cpupower-6.11-rc1.diff"
Content-Transfer-Encoding: base64

ZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL01ha2VmaWxlIGIvdG9vbHMvcG93
ZXIvY3B1cG93ZXIvTWFrZWZpbGUKaW5kZXggYjUzNzUzZGVlMDJmLi5jZDAyMjVhMzEyYjQg
MTAwNjQ0Ci0tLSBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL01ha2VmaWxlCisrKyBiL3Rvb2xz
L3Bvd2VyL2NwdXBvd2VyL01ha2VmaWxlCkBAIC0zMzIsNCArMzMyLDM5IEBAIHVuaW5zdGFs
bDoKIAkJcm0gLWYgJChERVNURElSKSR7bG9jYWxlZGlyfS8kJEhMQU5HL0xDX01FU1NBR0VT
L2NwdXBvd2VyLm1vOyBcCiAJICBkb25lOwogCi0uUEhPTlk6IGFsbCB1dGlscyBsaWJjcHVw
b3dlciB1cGRhdGUtcG8gY3JlYXRlLWdtbyBpbnN0YWxsLWxpYiBpbnN0YWxsLXRvb2xzIGlu
c3RhbGwtbWFuIGluc3RhbGwtZ21vIGluc3RhbGwgdW5pbnN0YWxsIGNsZWFuCitoZWxwOgor
CUBlY2hvICAnQnVpbGRpbmcgdGFyZ2V0czonCisJQGVjaG8gICcgIGFsbAkJICAtIERlZmF1
bHQgdGFyZ2V0LiBDb3VsZCBiZSBvbWl0dGVkLiBQdXQgYnVpbGQgYXJ0aWZhY3RzJworCUBl
Y2hvICAnICAgICAgICAgICAgICAgICAgICB0byAiTyIgY21kbGluZSBvcHRpb24gZGlyIChk
ZWZhdWx0OiBjdXJyZW50IGRpciknCisJQGVjaG8gICcgIGluc3RhbGwJICAtIEluc3RhbGwg
cHJldmlvdXNseSBidWlsdCBwcm9qZWN0IGZpbGVzIGZyb20gdGhlIG91dHB1dCcKKwlAZWNo
byAgJyAgICAgICAgICAgICAgICAgICAgZGlyIGRlZmluZWQgYnkgIk8iIGNtZGxpbmUgb3B0
aW9uIChkZWZhdWx0OiBjdXJyZW50IGRpciknCisJQGVjaG8gICcgICAgICAgICAgICAgICAg
ICAgIHRvIHRoZSBpbnN0YWxsIGRpciAgZGVmaW5lZCBieSAiREVTVERJUiIgY21kbGluZSBv
cicKKwlAZWNobyAgJyAgICAgICAgICAgICAgICAgICAgTWFrZWZpbGUgY29uZmlnIGJsb2Nr
IG9wdGlvbiAoZGVmYXVsdDogIiIpJworCUBlY2hvICAnICBpbnN0YWxsLWxpYgkgIC0gSW5z
dGFsbCBwcmV2aW91c2x5IGJ1aWx0IGxpYnJhcnkgYmluYXJ5IGZyb20gdGhlIG91dHB1dCcK
KwlAZWNobyAgJyAgICAgICAgICAgICAgICAgICAgZGlyIGRlZmluZWQgYnkgIk8iIGNtZGxp
bmUgb3B0aW9uIChkZWZhdWx0OiBjdXJyZW50IGRpciknCisJQGVjaG8gICcgICAgICAgICAg
ICAgICAgICAgIGFuZCBsaWJyYXJ5IGhlYWRlcnMgZnJvbSAibGliLyIgZm9yIHVzZXJzcGFj
ZSB0byB0aGUgaW5zdGFsbCcKKwlAZWNobyAgJyAgICAgICAgICAgICAgICAgICAgZGlyICBk
ZWZpbmVkIGJ5ICJERVNURElSIiBjbWRsaW5lIChkZWZhdWx0OiAiIiknCisJQGVjaG8gICcg
IGluc3RhbGwtdG9vbHMJICAtIEluc3RhbGwgcHJldmlvdXNseSBidWlsdCAiY3B1cG93ZXIi
IHV0aWwgZnJvbSB0aGUgb3V0cHV0JworCUBlY2hvICAnICAgICAgICAgICAgICAgICAgICBk
aXIgZGVmaW5lZCBieSAiTyIgY21kbGluZSBvcHRpb24gKGRlZmF1bHQ6IGN1cnJlbnQgZGly
KSBhbmQnCisJQGVjaG8gICcgICAgICAgICAgICAgICAgICAgICJjcHVwb3dlci1jb21wbGV0
aW9uLnNoIiBzY3JpcHQgZnJvbSB0aGUgc3JjIGRpciB0byB0aGUnCisJQGVjaG8gICcgICAg
ICAgICAgICAgICAgICAgIGluc3RhbGwgZGlyICBkZWZpbmVkIGJ5ICJERVNURElSIiBjbWRs
aW5lIG9yIE1ha2VmaWxlJworCUBlY2hvICAnICAgICAgICAgICAgICAgICAgICBjb25maWcg
YmxvY2sgb3B0aW9uIChkZWZhdWx0OiAiIiknCisJQGVjaG8gICcgIGluc3RhbGwtbWFuCSAg
LSBJbnN0YWxsIG1hbiBwYWdlcyBmcm9tIHRoZSAibWFuIiBzcmMgc3ViZGlyIHRvIHRoZScK
KwlAZWNobyAgJyAgICAgICAgICAgICAgICAgICAgaW5zdGFsbCBkaXIgIGRlZmluZWQgYnkg
IkRFU1RESVIiIGNtZGxpbmUgb3IgTWFrZWZpbGUnCisJQGVjaG8gICcgICAgICAgICAgICAg
ICAgICAgIGNvbmZpZyBibG9jayBvcHRpb24gKGRlZmF1bHQ6ICIiKScKKwlAZWNobyAgJyAg
aW5zdGFsbC1nbW8JICAtIEluc3RhbGwgcHJldmlvdXNseSBidWlsdCBsYW5ndWFnZSBmaWxl
cyBmcm9tIHRoZSBvdXRwdXQnCisJQGVjaG8gICcgICAgICAgICAgICAgICAgICAgIGRpciBk
ZWZpbmVkIGJ5ICJPIiBjbWRsaW5lIG9wdGlvbiAoZGVmYXVsdDogY3VycmVudCBkaXIpJwor
CUBlY2hvICAnICAgICAgICAgICAgICAgICAgICB0byB0aGUgaW5zdGFsbCBkaXIgZGVmaW5l
ZCBieSAiREVTVERJUiIgY21kbGluZSBvciBNYWtlZmlsZScKKwlAZWNobyAgJyAgICAgICAg
ICAgICAgICAgICAgY29uZmlnIGJsb2NrIG9wdGlvbiAoZGVmYXVsdDogIiIpJworCUBlY2hv
ICAnICBpbnN0YWxsLWJlbmNoCSAgLSBJbnN0YWxsIHByZXZpb3VzbHkgYnVpbHQgImNwdWZy
ZXEtYmVuY2giIHV0aWwgZmlsZXMgZnJvbSB0aGUnCisJQGVjaG8gICcgICAgICAgICAgICAg
ICAgICAgIG91dHB1dCBkaXIgZGVmaW5lZCBieSAiTyIgY21kbGluZSBvcHRpb24gKGRlZmF1
bHQ6IGN1cnJlbnQgZGlyKScKKwlAZWNobyAgJyAgICAgICAgICAgICAgICAgICAgdG8gdGhl
IGluc3RhbGwgZGlyICBkZWZpbmVkIGJ5ICJERVNURElSIiBjbWRsaW5lIG9yIE1ha2VmaWxl
JworCUBlY2hvICAnICAgICAgICAgICAgICAgICAgICBjb25maWcgYmxvY2sgb3B0aW9uIChk
ZWZhdWx0OiAiIiknCisJQGVjaG8gICcnCisJQGVjaG8gICdDbGVhbmluZyB0YXJnZXRzOicK
KwlAZWNobyAgJyAgY2xlYW4JCSAgLSBDbGVhbiBidWlsZCBhcnRpZmFjdHMgZnJvbSB0aGUg
ZGlyIGRlZmluZWQgYnkgIk8iIGNtZGxpbmUnCisJQGVjaG8gICcgICAgICAgICAgICAgICAg
ICAgIG9wdGlvbiAoZGVmYXVsdDogY3VycmVudCBkaXIpJworCUBlY2hvICAnICB1bmluc3Rh
bGwJICAtIFJlbW92ZSBwcmV2aW91c2x5IGluc3RhbGxlZCBmaWxlcyBmcm9tIHRoZSBkaXIg
ZGVmaW5lZCBieSAiREVTVERJUiInCisJQGVjaG8gICcgICAgICAgICAgICAgICAgICAgIGNt
ZGxpbmUgb3IgTWFrZWZpbGUgY29uZmlnIGJsb2NrIG9wdGlvbiAoZGVmYXVsdDogIiIpJwor
CisuUEhPTlk6IGFsbCB1dGlscyBsaWJjcHVwb3dlciB1cGRhdGUtcG8gY3JlYXRlLWdtbyBp
bnN0YWxsLWxpYiBpbnN0YWxsLXRvb2xzIGluc3RhbGwtbWFuIGluc3RhbGwtZ21vIGluc3Rh
bGwgdW5pbnN0YWxsIGNsZWFuIGhlbHAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBv
d2VyL1JFQURNRSBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL1JFQURNRQppbmRleCAxYzY4ZjQ3
NjYzYjIuLjI2NzhlZDgxZDMxMSAxMDA2NDQKLS0tIGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIv
UkVBRE1FCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL1JFQURNRQpAQCAtMjIsMTYgKzIy
LDE1NiBAQCBpbnRlcmZhY2VzIFtkZXBlbmRpbmcgb24gY29uZmlndXJhdGlvbiwgc2VlIGJl
bG93XS4KIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24KIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAotbWFrZQotc3UKLW1ha2UgaW5zdGFsbAotCi1zaG91bGQgc3VmZmlj
ZSBvbiBtb3N0IHN5c3RlbXMuIEl0IGJ1aWxkcyBsaWJjcHVwb3dlciB0byBwdXQgaW4KLS91
c3IvbGliOyBjcHVwb3dlciwgY3B1ZnJlcS1iZW5jaF9wbG90LnNoIHRvIHB1dCBpbiAvdXNy
L2JpbjsgYW5kCi1jcHVmcmVxLWJlbmNoIHRvIHB1dCBpbiAvdXNyL3NiaW4uIElmIHlvdSB3
YW50IHRvIHNldCB1cCB0aGUgcGF0aHMKLWRpZmZlcmVudGx5IGFuZC9vciB3YW50IHRvIGNv
bmZpZ3VyZSB0aGUgcGFja2FnZSB0byB5b3VyIHNwZWNpZmljCi1uZWVkcywgeW91IG5lZWQg
dG8gb3BlbiAiTWFrZWZpbGUiIHdpdGggYW4gZWRpdG9yIG9mIHlvdXIgY2hvaWNlIGFuZAot
ZWRpdCB0aGUgYmxvY2sgbWFya2VkIENPTkZJR1VSQVRJT04uCitUaGVyZSBhcmUgMiBvdXRw
dXQgZGlyZWN0b3JpZXMgLSBvbmUgZm9yIHRoZSBidWlsZCBvdXRwdXQgYW5kIGFub3RoZXIg
Zm9yCit0aGUgaW5zdGFsbGF0aW9uIG9mIHRoZSBidWlsZCByZXN1bHRzLCB0aGF0IGlzIHRo
ZSB1dGlsaXR5LCBsaWJyYXJ5LAorbWFuIHBhZ2VzLCBldGMuLi4KKworZGVmYXVsdCBkaXJl
Y3RvcnkKKy0tLS0tLS0tLS0tLS0tLS0tCisKK0luIHRoZSBjYXNlIG9mIGRlZmF1bHQgZGly
ZWN0b3J5LCBidWlsZCBhbmQgaW5zdGFsbCBwcm9jZXNzIHJlcXVpcmVzIG5vCithZGRpdGlv
bmFsIHBhcmFtZXRlcnM6CisKK2J1aWxkCistLS0tLQorCiskIG1ha2UKKworVGhlIG91dHB1
dCBkaXJlY3RvcnkgZm9yIHRoZSAnbWFrZScgY29tbWFuZCBpcyB0aGUgY3VycmVudCBkaXJl
Y3RvcnkgYW5kCitpdHMgc3ViZGlycyBpbiB0aGUga2VybmVsIHRyZWU6Cit0b29scy9wb3dl
ci9jcHVwb3dlcgorCitpbnN0YWxsCistLS0tLS0tCisKKyQgc3VkbyBtYWtlIGluc3RhbGwK
KworJ21ha2UgaW5zdGFsbCcgY29tbWFuZCBwdXRzIHRhcmdldHMgdG8gZGVmYXVsdCBzeXN0
ZW0gZGlyczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgSW5zdGFsbGluZyBmaWxlICAgICAg
ICB8ICAgICAgICAgICAgICAgU3lzdGVtIGRpciAgICAgICAgICAgICAgICAgICB8CistLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorfCBsaWJjcHVwb3dlciAgICAgICAgICAgIHwgL3Vzci9saWIgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8
IGNwdXBvd2VyICAgICAgICAgICAgICAgfCAvdXNyL2JpbiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgY3B1ZnJlcS1iZW5jaF9w
bG90LnNoICB8IC91c3IvYmluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorfCBtYW4gcGFnZXMgICAgICAgICAgICAgIHwgL3Vzci9t
YW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisKK1RvIHB1dCBpdCBpbiBvdGhlciB3b3JkcyBpdCBtYWtlcyBidWlsZCByZXN1bHRz
IGF2YWlsYWJsZSBzeXN0ZW0td2lkZSwKK2VuYWJsaW5nIGFueSB1c2VyIHRvIHNpbXBseSBz
dGFydCB1c2luZyBpdCB3aXRob3V0IGFueSBhZGRpdGlvbmFsIHN0ZXBzCisKK2N1c3RvbSBk
aXJlY3RvcnkKKy0tLS0tLS0tLS0tLS0tLS0KKworVGhlcmUgYXJlIDIgbWFrZSdzIGNvbW1h
bmQtbGluZSB2YXJpYWJsZXMgJ08nIGFuZCAnREVTVERJUicgdGhhdCBzZXR1cAorYXBwcm9w
cmlhdGUgZGlyczoKKydPJyAtIGJ1aWxkIGRpcmVjdG9yeQorJ0RFU1RESVInIC0gaW5zdGFs
bGF0aW9uIGRpcmVjdG9yeS4gVGhpcyB2YXJpYWJsZSBjb3VsZCBhbHNvIGJlIHNldHVwIGlu
Cit0aGUgJ0NPTkZJR1VSQVRJT04nIGJsb2NrIG9mIHRoZSAiTWFrZWZpbGUiCisKK2J1aWxk
CistLS0tLQorCiskIG1ha2UgTz08eW91cl9jdXN0b21fYnVpbGRfY2F0YWxvZz4KKworRXhh
bXBsZToKKyQgbWFrZSBPPS9ob21lL2hlZGluL3Byai9jcHVwb3dlci9idWlsZAorCitpbnN0
YWxsCistLS0tLS0tCisKKyQgbWFrZSBPPTx5b3VyX2N1c3RvbV9idWlsZF9jYXRhbG9nPiBE
RVNURElSPTx5b3VyX2N1c3RvbV9pbnN0YWxsX2NhdGFsb2c+CisKK0V4YW1wbGU6CiskIG1h
a2UgTz0vaG9tZS9oZWRpbi9wcmovY3B1cG93ZXIvYnVpbGQgREVTVERJUj0vaG9tZS9oZWRp
bi9wcmovY3B1cG93ZXIgXAorPiBpbnN0YWxsCisKK05vdGljZSB0aGF0IGJvdGggdmFyaWFi
bGVzICdPJyBhbmQgJ0RFU1RESVInIGhhdmUgYmVlbiBwcm92aWRlZC4gVGhlIHJlYXNvbgor
aXMgdGhhdCB0aGUgYnVpbGQgcmVzdWx0cyBhcmUgc2F2ZWQgaW4gdGhlIGN1c3RvbSBvdXRw
dXQgZGlyIGRlZmluZWQgYnkgJ08nCit2YXJpYWJsZS4gU28sIHRoaXMgZGlyIGlzIHRoZSBz
b3VyY2UgZm9yIHRoZSBpbnN0YWxsYXRpb24gc3RlcC4gSWYgb25seQorJ0RFU1RESVInIHdl
cmUgcHJvdmlkZWQgdGhlbiB0aGUgJ2luc3RhbGwnIHRhcmdldCB3b3VsZCBhc3N1bWUgdGhh
dCB0aGUKK2J1aWxkIGRpcmVjdG9yeSBpcyB0aGUgY3VycmVudCBvbmUsIGJ1aWxkIGV2ZXJ5
dGhpbmcgdGhlcmUgYW5kIGluc3RhbGwKK2Zyb20gdGhlIGN1cnJlbnQgZGlyLgorCitUaGUg
ZmlsZXMgd2lsbCBiZSBpbnN0YWxsZWQgdG8gdGhlIGZvbGxvd2luZyBkaXJzOgorCistLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorfCBJbnN0YWxsaW5nIGZpbGUgICAgICAgIHwgICAgICAgICAgICAg
ICBTeXN0ZW0gZGlyICAgICAgICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8
IGxpYmNwdXBvd2VyICAgICAgICAgICAgfCAke0RFU1RESVJ9L3Vzci9saWIgICAgICAgICAg
ICAgICAgICAgICAgICAgfAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgY3B1cG93ZXIgICAgICAg
ICAgICAgICB8ICR7REVTVERJUn0vdXNyL2JpbiAgICAgICAgICAgICAgICAgICAgICAgICB8
CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorfCBjcHVmcmVxLWJlbmNoX3Bsb3Quc2ggIHwgJHtERVNU
RElSfS91c3IvYmluICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCit8IG1hbiBwYWdlcyAgICAgICAgICAgICAgfCAke0RFU1RESVJ9L3Vzci9tYW4gICAg
ICAgICAgICAgICAgICAgICAgICAgfAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91IGxv
b2sgYXQgdGhlIHRhYmxlIGZvciB0aGUgZGVmYXVsdCAnbWFrZScgb3V0cHV0IGRpcnMgeW91
IHdpbGwKK25vdGljZSB0aGF0IHRoZSBvbmx5IGRpZmZlcmVuY2Ugd2l0aCB0aGUgbm9uLWRl
ZmF1bHQgY2FzZSBpcyB0aGUKKyR7REVTVERJUn0gcHJlZml4LiBTbywgdGhlIHN0cnVjdHVy
ZSBvZiB0aGUgb3V0cHV0IGRpcnMgcmVtYWlucyB0aGUgc2FtZQorcmVnYXJkbGVzIG9mIHRo
ZSByb290IG91dHB1dCBkaXJlY3RvcnkuCisKKworY2xlYW4gYW5kIHVuaW5zdGFsbAorLS0t
LS0tLS0tLS0tLS0tLS0tLQorCisnY2xlYW4nIHRhcmdldCBpcyBpbnRlbmRlZCBmb3IgY2xl
YW51cCB0aGUgYnVpbGQgY2F0YWxvZyBmcm9tIGJ1aWxkIHJlc3VsdHMKKyd1bmluc3RhbGwn
IHRhcmdldCBpcyBpbnRlbmRlZCBmb3IgcmVtb3ZpbmcgaW5zdGFsbGVkIGZpbGVzIGZyb20g
dGhlCitpbnN0YWxsYXRpb24gZGlyZWN0b3J5CisKK2RlZmF1bHQgZGlyZWN0b3J5CistLS0t
LS0tLS0tLS0tLS0tLQorCitUaGlzIGNhc2UgaXMgYSBzdHJhaWdodGZvcndhcmQgb25lOgor
JCBtYWtlIGNsZWFuCiskIG1ha2UgdW5pbnN0YWxsCisKK2N1c3RvbSBkaXJlY3RvcnkKKy0t
LS0tLS0tLS0tLS0tLS0KKworVXNlICdPJyBjb21tYW5kIGxpbmUgdmFyaWFibGUgdG8gcmVt
b3ZlIHByZXZpb3VzbHkgYnVpbHQgZmlsZXMgZnJvbSB0aGUKK2J1aWxkIGRpcjoKKyQgbWFr
ZSBPPTx5b3VyX2N1c3RvbV9idWlsZF9jYXRhbG9nPiBjbGVhbgorCitFeGFtcGxlOgorJCBt
YWtlIE89L2hvbWUvaGVkaW4vcHJqL2NwdXBvd2VyL2J1aWxkIGNsZWFuCisKK1VzZSAnREVT
VERJUicgY29tbWFuZCBsaW5lIHZhcmlhYmxlIHRvIHVuaW5zdGFsbCBwcmV2aW91c2x5IGlu
c3RhbGxlZCBmaWxlcworZnJvbSB0aGUgZ2l2ZW4gZGlyOgorJCBtYWtlIERFU1RESVI9PHlv
dXJfY3VzdG9tX2luc3RhbGxfY2F0YWxvZz4KKworRXhhbXBsZToKK21ha2UgREVTVERJUj0v
aG9tZS9oZWRpbi9wcmovY3B1cG93ZXIgdW5pbnN0YWxsCisKKworcnVubmluZyB0aGUgdG9v
bAorLS0tLS0tLS0tLS0tLS0tLQorCitkZWZhdWx0IGRpcmVjdG9yeQorLS0tLS0tLS0tLS0t
LS0tLS0KKworJCBzdWRvIGNwdXBvd2VyCisKK2N1c3RvbSBkaXJlY3RvcnkKKy0tLS0tLS0t
LS0tLS0tLS0KKworV2hlbiBpdCBjb21lcyB0byBydW4gdGhlIHV0aWxpdHkgZnJvbSB0aGUg
Y3VzdG9tIGJ1aWxkIGNhdGFsb2cgdGhpbmdzCitiZWNvbWUgYSBsaXR0bGUgYml0IGNvbXBs
aWNhdGVkIGFzICdqdXN0IHJ1bicgYXBwcm9hY2ggZG9lc24ndCB3b3JrLgorQXNzdW1pbmcg
dGhhdCB0aGUgY3VycmVudCBkaXIgaXMgJzx5b3VyX2N1c3RvbV9pbnN0YWxsX2NhdGFsb2c+
L3VzcicsCitpc3N1aW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKworJCBzdWRvIC4vYmlu
L2NwdXBvd2VyCit3aWxsIHByb2R1Y2UgdGhlIGZvbGxvd2luZyBlcnJvciBvdXRwdXQ6Cisu
L2Jpbi9jcHVwb3dlcjogZXJyb3Igd2hpbGUgbG9hZGluZyBzaGFyZWQgbGlicmFyaWVzOiBs
aWJjcHVwb3dlci5zby4xOgorY2Fubm90IG9wZW4gc2hhcmVkIG9iamVjdCBmaWxlOiBObyBz
dWNoIGZpbGUgb3IgZGlyZWN0b3J5CisKK1RoZSBpc3N1ZSBpcyB0aGF0IGJpbmFyeSBjYW5u
b3QgZmluZCB0aGUgJ2xpYmNwdXBvd2VyJyBsaWJyYXJ5LiBTbywgd2UKK3NoYWxsIHBvaW50
IHRvIHRoZSBsaWIgZGlyOgorc3VkbyBMRF9MSUJSQVJZX1BBVEg9bGliNjQvIC4vYmluL2Nw
dXBvd2VyCiAKIAogVEhBTktTCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9t
YW4vY3B1cG93ZXItbW9uaXRvci4xIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbWFuL2NwdXBv
d2VyLW1vbml0b3IuMQppbmRleCA4ZWU3MzdlZWZhNWMuLjg5YWYwMTlmOGRjNCAxMDA2NDQK
LS0tIGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbWFuL2NwdXBvd2VyLW1vbml0b3IuMQorKysg
Yi90b29scy9wb3dlci9jcHVwb3dlci9tYW4vY3B1cG93ZXItbW9uaXRvci4xCkBAIC04MSwx
MSArODEsNiBAQCBNZWFzdXJlIGlkbGUgYW5kIGZyZXF1ZW5jeSBjaGFyYWN0ZXJpc3RpY3Mg
b2YgYW4gYXJiaXRyYXJ5IGNvbW1hbmQvd29ya2xvYWQuCiBUaGUgZXhlY3V0YWJsZSBcZkJj
b21tYW5kXGZQIGlzIGZvcmtlZCBhbmQgdXBvbiBpdHMgZXhpdCwgc3RhdGlzdGljcyBnYXRo
ZXJlZCBzaW5jZSBpdCB3YXMKIGZvcmtlZCBhcmUgZGlzcGxheWVkLgogLlJFCi0uUFAKLVwt
dgotLlJTIDQKLUluY3JlYXNlIHZlcmJvc2l0eSBpZiB0aGUgYmluYXJ5IHdhcyBjb21waWxl
ZCB3aXRoIHRoZSBERUJVRyBvcHRpb24gc2V0LgotLlJFCiAKIC5TSCBNT05JVE9SIERFU0NS
SVBUSU9OUwogLlNTICJJZGxlX1N0YXRzIgpAQCAtMTcyLDkgKzE2NywxMSBAQCBkaXNwbGF5
ZWQuCiAiQklPUyBhbmQgS2VybmVsIERldmVsb3BlcuKAmXMgR3VpZGUgKEJLREcpIGZvciBB
TUQgRmFtaWx5IDE0aCBQcm9jZXNzb3JzIgogaHR0cHM6Ly9zdXBwb3J0LmFtZC5jb20vdXMv
UHJvY2Vzc29yX1RlY2hEb2NzLzQzMTcwLnBkZgogCi0iSW50ZWzCriBUdXJibyBCb29zdCBU
ZWNobm9sb2d5Ci1pbiBJbnRlbMKuIENvcmXihKIgTWljcm9hcmNoaXRlY3R1cmUgKE5laGFs
ZW0pIEJhc2VkIFByb2Nlc3NvcnMiCi1odHRwOi8vZG93bmxvYWQuaW50ZWwuY29tL2Rlc2ln
bi9wcm9jZXNzb3IvYXBwbG5vdHMvMzIwMzU0LnBkZgorIldoYXQgSXMgSW50ZWzCriBUdXJi
byBCb29zdCBUZWNobm9sb2d5PyIKK2h0dHBzOi8vd3d3LmludGVsLmNvbS9jb250ZW50L3d3
dy91cy9lbi9nYW1pbmcvcmVzb3VyY2VzL3R1cmJvLWJvb3N0Lmh0bWwKKworIlBvd2VyIE1h
bmFnZW1lbnQgLSBUZWNobm9sb2d5IE92ZXJ2aWV3IgoraHR0cHM6Ly9jZHJkdjIuaW50ZWwu
Y29tL3YxL2RsL2dldENvbnRlbnQvNjM3NzQ4CiAKICJJbnRlbMKuIDY0IGFuZCBJQS0zMiBB
cmNoaXRlY3R1cmVzIFNvZnR3YXJlIERldmVsb3BlcidzIE1hbnVhbAogVm9sdW1lIDNCOiBT
eXN0ZW0gUHJvZ3JhbW1pbmcgR3VpZGUiCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVw
b3dlci91dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jIGIvdG9vbHMvcG93
ZXIvY3B1cG93ZXIvdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYwppbmRl
eCAwNzVlNzY2ZmYxZjMuLmY3NDYwOTliNWRhYyAxMDA2NDQKLS0tIGEvdG9vbHMvcG93ZXIv
Y3B1cG93ZXIvdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYworKysgYi90
b29scy9wb3dlci9jcHVwb3dlci91dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRv
ci5jCkBAIC0zNSw3ICszNSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgYXZhaWxfbW9uaXRv
cnM7CiBzdGF0aWMgY2hhciAqcHJvZ25hbWU7CiAKIGVudW0gb3BlcmF0aW9uX21vZGVfZSB7
IGxpc3QgPSAxLCBzaG93LCBzaG93X2FsbCB9Owotc3RhdGljIGludCBtb2RlOworc3RhdGlj
IGVudW0gb3BlcmF0aW9uX21vZGVfZSBtb2RlOwogc3RhdGljIGludCBpbnRlcnZhbCA9IDE7
CiBzdGF0aWMgY2hhciAqc2hvd19tb25pdG9yc19wYXJhbTsKIHN0YXRpYyBzdHJ1Y3QgY3B1
cG93ZXJfdG9wb2xvZ3kgY3B1X3RvcDsK

--------------z0iVanNMO7Uu16uwmuaScUTf--
.

From: "Matthew Wilcox (Oracle)" <willy@infradead.org>
To: linux-kernel@vger.kernel.org
Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org>,
	linux-fsdevel@vger.kernel.org,
	maple-tree@lists.infradead.org
Subject: [PATCH v2 0/5] Rosebush, a new hash table
Date: Tue, 25 Jun 2024 22:17:55 +0100
Message-ID: <20240625211803.2750563-1-willy@infradead.org>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258754
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-fsdevel
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Rosebush is a resizing, scalable, cache-aware, RCU optimised hash table.

v2 has switched to fixed sized buckets.  That considerably simplifies
the code and removes the dilemma about whether to grow the bucket or
grow the table.  The layout of the bucket has changed to place all the
hashes at the start of the bucket, optimising lookups (as it improves
the chances that the hash we're looking for will be found in the first
cacheline).

Other changes:

 - Added rbh_destroy()
 - When we split a bucket, we now create two new buckets instead of
   only creating one and leaving the other one to be reallocated later
 - Added rbh_dump() to help debugging
 - Buildable in userspace as part of the radix tree testsuite
 - Dcache conversion

I suspect the dcache conversion probably doesn't work with detached
dentries.  But it should be good enough for someone to run a performance
benchmark ...

v1 can be found at
https://lore.kernel.org/all/20240222203726.1101861-1-willy@infradead.org/

This patch set can be found at
http://git.infradead.org/?p=users/willy/pagecache.git;a=shortlog;h=refs/heads/rosebush
aka
git://git.infradead.org/users/willy/pagecache.git rosebush

Matthew Wilcox (Oracle) (5):
  tools: Add kernel stubs needed for rosebush
  rosebush: Add new data structure
  rosebush: Add test suite
  tools: Add support for running rosebush tests in userspace
  dcache: Convert to use rosebush

 Documentation/core-api/index.rst         |   1 +
 Documentation/core-api/rosebush.rst      | 121 +++++
 MAINTAINERS                              |   8 +
 fs/dcache.c                              | 152 ++----
 include/linux/rosebush.h                 |  62 +++
 lib/Kconfig.debug                        |   3 +
 lib/Makefile                             |   3 +-
 lib/rosebush.c                           | 654 +++++++++++++++++++++++
 lib/test_rosebush.c                      | 140 +++++
 tools/include/linux/compiler.h           |   4 +
 tools/include/linux/compiler_types.h     |   2 +
 tools/include/linux/rosebush.h           |   1 +
 tools/include/linux/spinlock.h           |   2 +
 tools/include/linux/stddef.h             |   3 +
 tools/testing/radix-tree/.gitignore      |   1 +
 tools/testing/radix-tree/Makefile        |   6 +-
 tools/testing/radix-tree/kunit/test.h    |  20 +
 tools/testing/radix-tree/linux/kernel.h  |   2 +
 tools/testing/radix-tree/linux/vmalloc.h |  14 +
 tools/testing/radix-tree/rosebush.c      |  36 ++
 20 files changed, 1135 insertions(+), 100 deletions(-)
 create mode 100644 Documentation/core-api/rosebush.rst
 create mode 100644 include/linux/rosebush.h
 create mode 100644 lib/rosebush.c
 create mode 100644 lib/test_rosebush.c
 create mode 100644 tools/include/linux/rosebush.h
 create mode 100644 tools/include/linux/stddef.h
 create mode 100644 tools/testing/radix-tree/kunit/test.h
 create mode 100644 tools/testing/radix-tree/linux/vmalloc.h
 create mode 100644 tools/testing/radix-tree/rosebush.c

-- 
2.43.0

.

From: Frank Li <Frank.Li@nxp.com>
To: Bjorn Helgaas <bhelgaas@google.com>,
	Lorenzo Pieralisi <lpieralisi@kernel.org>,
	=?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= <kw@linux.com>,
	Rob Herring <robh@kernel.org>,
	Krzysztof Kozlowski <krzk+dt@kernel.org>,
	Conor Dooley <conor+dt@kernel.org>,
	linux-pci@vger.kernel.org (open list:PCI SUBSYSTEM),
	devicetree@vger.kernel.org (open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS),
	linux-kernel@vger.kernel.org (open list)
Cc: imx@lists.linux.dev
Subject: [PATCH 1/2] dt-bindings: PCI: layerscape-pci: Fix property 'fsl,pcie-scfg' type
Date: Tue, 25 Jun 2024 17:17:46 -0400
Message-Id: <20240625211748.4041882-1-Frank.Li@nxp.com>
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258756 org.kernel.vger.linux-pci:144475
Newsgroups: org.kernel.vger.linux-kernel,dev.linux.lists.imx,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-pci
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

fsl,pcie-scfg actually need an argument when there are more than one PCIe
instances. Change it to phandle-array and use items to descript each field
means.

Signed-off-by: Frank Li <Frank.Li@nxp.com>
---
 .../devicetree/bindings/pci/fsl,layerscape-pcie.yaml      | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/Documentation/devicetree/bindings/pci/fsl,layerscape-pcie.yaml b/Documentation/devicetree/bindings/pci/fsl,layerscape-pcie.yaml
index 793986c5af7ff..679c2989de7a2 100644
--- a/Documentation/devicetree/bindings/pci/fsl,layerscape-pcie.yaml
+++ b/Documentation/devicetree/bindings/pci/fsl,layerscape-pcie.yaml
@@ -43,10 +43,16 @@ properties:
       - const: config
 
   fsl,pcie-scfg:
-    $ref: /schemas/types.yaml#/definitions/phandle
+    $ref: /schemas/types.yaml#/definitions/phandle-array
     description: A phandle to the SCFG device node. The second entry is the
       physical PCIe controller index starting from '0'. This is used to get
       SCFG PEXN registers.
+    items:
+      items:
+        - description: A phandle to the SCFG device node
+        - description: PCIe controller index starting from '0'
+      minItems: 1
+    maxItems: 1
 
   big-endian:
     $ref: /schemas/types.yaml#/definitions/flag
-- 
2.34.1

.

From: Raphael Gallais-Pou <rgallaispou@gmail.com>
Subject: [PATCH v2 0/3] Add thermal management support for STi platform
Date: Tue, 25 Jun 2024 23:32:39 +0200
Message-Id: <20240625-thermal-v2-0-bf8354ed51ee@gmail.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
To: "Rafael J. Wysocki" <rafael@kernel.org>, 
 Daniel Lezcano <daniel.lezcano@linaro.org>, Zhang Rui <rui.zhang@intel.com>, 
 Lukasz Luba <lukasz.luba@arm.com>, 
 Maxime Coquelin <mcoquelin.stm32@gmail.com>, 
 Alexandre Torgue <alexandre.torgue@foss.st.com>, 
 Patrice Chotard <patrice.chotard@foss.st.com>, 
 Rob Herring <robh@kernel.org>, Krzysztof Kozlowski <krzk+dt@kernel.org>, 
 Conor Dooley <conor+dt@kernel.org>
Cc: linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, 
 linux-stm32@st-md-mailman.stormreply.com, 
 linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258771
Newsgroups: org.kernel.vger.linux-kernel,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-pm
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

This patch series enhances the st_thermal driver in order to enable
support for thermal zones. The changes include:

1. Replace deprecated PM runtime macros with their updated counterparts.
2. Implementing devm_* based thermal of zone functions within the driver.
3. Updating the stih418 device-tree.

The device-tree patch depends on an earlier patch sent to the mailing
list [1].

As it is currently implemented, an alert threshold of 85Â°C is set to
trigger the CPU throttling, and when the temperature exceeds the
critical threshold of 95Â°C, the system shuts down. There is for now no
active cooling device on the platform, which explains the use of the
cpufreq framework.

[1] https://lore.kernel.org/lkml/20240320-thermal-v3-2-700296694c4a@gmail.com

Signed-off-by: Raphael Gallais-Pou <rgallaispou@gmail.com>
---
Changes in v2:
- Add Patrice's R-b
- Edit patch [2/3] to remove unused struct
- Link to v1: https://lore.kernel.org/r/20240518-thermal-v1-0-7dfca3ed454b@gmail.com

---
Raphael Gallais-Pou (3):
      thermal: st: switch from CONFIG_PM_SLEEP guards to pm_sleep_ptr()
      thermal: sti: depend on THERMAL_OF subsystem
      ARM: dts: sti: add thermal-zones support on stih418

 arch/arm/boot/dts/st/stih407-family.dtsi |  6 +++--
 arch/arm/boot/dts/st/stih418.dtsi        | 41 +++++++++++++++++++++++++++++---
 drivers/thermal/st/Kconfig               |  1 +
 drivers/thermal/st/st_thermal.c          | 29 +++++++++-------------
 drivers/thermal/st/st_thermal_memmap.c   |  2 +-
 drivers/thermal/st/stm_thermal.c         |  8 +++----
 6 files changed, 58 insertions(+), 29 deletions(-)
---
base-commit: 0fc4bfab2cd45f9acb86c4f04b5191e114e901ed
change-id: 20240518-thermal-8f625428acf9

Best regards,
-- 
Raphael Gallais-Pou <rgallaispou@gmail.com>

.

Date: Tue, 25 Jun 2024 14:41:09 -0700
Message-Id: <20240625214117.953777-1-irogers@google.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
Mime-Version: 1.0
Subject: [PATCH v5 0/8] Refactor perf python module build
From: Ian Rogers <irogers@google.com>
To: Peter Zijlstra <peterz@infradead.org>, Ingo Molnar <mingo@redhat.com>, 
	Arnaldo Carvalho de Melo <acme@kernel.org>, Namhyung Kim <namhyung@kernel.org>, 
	Mark Rutland <mark.rutland@arm.com>, 
	Alexander Shishkin <alexander.shishkin@linux.intel.com>, Jiri Olsa <jolsa@kernel.org>, 
	Ian Rogers <irogers@google.com>, Adrian Hunter <adrian.hunter@intel.com>, 
	Kan Liang <kan.liang@linux.intel.com>, John Garry <john.g.garry@oracle.com>, 
	Will Deacon <will@kernel.org>, James Clark <james.clark@arm.com>, 
	Mike Leach <mike.leach@linaro.org>, Leo Yan <leo.yan@linux.dev>, Guo Ren <guoren@kernel.org>, 
	Paul Walmsley <paul.walmsley@sifive.com>, Palmer Dabbelt <palmer@dabbelt.com>, 
	Albert Ou <aou@eecs.berkeley.edu>, Suzuki K Poulose <suzuki.poulose@arm.com>, 
	Yicong Yang <yangyicong@hisilicon.com>, Jonathan Cameron <jonathan.cameron@huawei.com>, 
	Miguel Ojeda <ojeda@kernel.org>, Alex Gaynor <alex.gaynor@gmail.com>, 
	Wedson Almeida Filho <wedsonaf@gmail.com>, Boqun Feng <boqun.feng@gmail.com>, Gary Guo <gary@garyguo.net>, 
	"=?UTF-8?q?Bj=C3=B6rn=20Roy=20Baron?=" <bjorn3_gh@protonmail.com>, Benno Lossin <benno.lossin@proton.me>, 
	Andreas Hindborg <a.hindborg@samsung.com>, Alice Ryhl <aliceryhl@google.com>, 
	Nick Terrell <terrelln@fb.com>, Andrei Vagin <avagin@google.com>, Kees Cook <keescook@chromium.org>, 
	Oliver Upton <oliver.upton@linux.dev>, Ze Gao <zegao2021@gmail.com>, 
	linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org
Content-Type: text/plain; charset="UTF-8"
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258777
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-perf-users
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Refactor the perf python module build to instead of building C files
it links libraries. To support this make static libraries for tests,
ui, util and pmu-events. Doing this allows fewer functions to be
stubbed out, importantly parse_events is no longer stubbed out which
will improve the ability to work with heterogeneous cores.

By not building .c files for the python module and for the build of
perf, this should also help build times.

Patch 1 adds '*.a' cleanup to the clean target.

Patches 2 to 6 add static libraries for existing parts of the perf
build.

Patch 7 adds the python build using libraries rather than C source
files.

Patch 8 cleans up the python dependencies and removes the no longer
needed python-ext-sources.

v5: Resend with missing patch 8.
v4: Rebase past conflict with commit eae7044b67a6 ("perf hist: Honor
    symbol_conf.skip_empty") - fixes like this commit won't be
    necessary after these changes. Swap a tab for spaces for better
    consistency.
v3: Add missed xtensa directory for the util build. Remove adding the
    arch directory to perf-y as it creates an empty object file that
    breaks with GCC and LTO.
v2: Add '*.a' cleanup to clean target. Add reviewed-by James Clark.

Ian Rogers (8):
  perf build: Add '*.a' to clean targets
  perf ui: Make ui its own library
  perf pmu-events: Make pmu-events a library
  perf test: Make tests its own library
  perf bench: Make bench its own library
  perf util: Make util its own library
  perf python: Switch module to linking libraries from building source
  perf python: Clean up build dependencies

 tools/perf/Build                              |  14 +-
 tools/perf/Makefile.config                    |   5 +
 tools/perf/Makefile.perf                      |  83 +++-
 tools/perf/arch/Build                         |   5 +-
 tools/perf/arch/arm/Build                     |   4 +-
 tools/perf/arch/arm/tests/Build               |   8 +-
 tools/perf/arch/arm/util/Build                |  10 +-
 tools/perf/arch/arm64/Build                   |   4 +-
 tools/perf/arch/arm64/tests/Build             |   8 +-
 tools/perf/arch/arm64/util/Build              |  20 +-
 tools/perf/arch/csky/Build                    |   2 +-
 tools/perf/arch/csky/util/Build               |   6 +-
 tools/perf/arch/loongarch/Build               |   2 +-
 tools/perf/arch/loongarch/util/Build          |   8 +-
 tools/perf/arch/mips/Build                    |   2 +-
 tools/perf/arch/mips/util/Build               |   6 +-
 tools/perf/arch/powerpc/Build                 |   4 +-
 tools/perf/arch/powerpc/tests/Build           |   6 +-
 tools/perf/arch/powerpc/util/Build            |  24 +-
 tools/perf/arch/riscv/Build                   |   2 +-
 tools/perf/arch/riscv/util/Build              |   8 +-
 tools/perf/arch/s390/Build                    |   2 +-
 tools/perf/arch/s390/util/Build               |  16 +-
 tools/perf/arch/sh/Build                      |   2 +-
 tools/perf/arch/sh/util/Build                 |   2 +-
 tools/perf/arch/sparc/Build                   |   2 +-
 tools/perf/arch/sparc/util/Build              |   2 +-
 tools/perf/arch/x86/Build                     |   6 +-
 tools/perf/arch/x86/tests/Build               |  20 +-
 tools/perf/arch/x86/util/Build                |  42 +-
 tools/perf/arch/xtensa/Build                  |   2 +-
 tools/perf/bench/Build                        |  46 +-
 tools/perf/scripts/Build                      |   4 +-
 tools/perf/scripts/perl/Perf-Trace-Util/Build |   2 +-
 .../perf/scripts/python/Perf-Trace-Util/Build |   2 +-
 tools/perf/tests/Build                        | 140 +++----
 tools/perf/tests/workloads/Build              |  12 +-
 tools/perf/ui/Build                           |  18 +-
 tools/perf/ui/browsers/Build                  |  14 +-
 tools/perf/ui/tui/Build                       |   8 +-
 tools/perf/util/Build                         | 394 +++++++++---------
 tools/perf/util/arm-spe-decoder/Build         |   2 +-
 tools/perf/util/cs-etm-decoder/Build          |   2 +-
 tools/perf/util/hisi-ptt-decoder/Build        |   2 +-
 tools/perf/util/intel-pt-decoder/Build        |   2 +-
 tools/perf/util/perf-regs-arch/Build          |  18 +-
 tools/perf/util/python-ext-sources            |  53 ---
 tools/perf/util/python.c                      | 274 +++++-------
 tools/perf/util/scripting-engines/Build       |   4 +-
 tools/perf/util/setup.py                      |  33 +-
 50 files changed, 625 insertions(+), 732 deletions(-)
 delete mode 100644 tools/perf/util/python-ext-sources

-- 
2.45.2.741.gdbec12cfda-goog

.

From: Marcelo Schmitt <marcelo.schmitt@analog.com>
To: <broonie@kernel.org>, <lars@metafoo.de>, <Michael.Hennerich@analog.com>,
        <jic23@kernel.org>, <robh+dt@kernel.org>,
        <krzysztof.kozlowski+dt@linaro.org>, <conor+dt@kernel.org>,
        <nuno.sa@analog.com>, <dlechner@baylibre.com>, <corbet@lwn.net>,
        <marcelo.schmitt1@gmail.com>
CC: <linux-iio@vger.kernel.org>, <devicetree@vger.kernel.org>,
        <linux-spi@vger.kernel.org>, <linux-doc@vger.kernel.org>,
        <linux-kernel@vger.kernel.org>
Subject: [PATCH v5 0/7] Add support for AD4000 series of ADCs
Date: Tue, 25 Jun 2024 18:52:00 -0300
Message-ID: <cover.1719351923.git.marcelo.schmitt@analog.com>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
X-ADIRuleOP-NewSCL: Rule Triggered
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258792
Newsgroups: org.kernel.vger.linux-kernel,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-doc,org.kernel.vger.linux-iio,org.kernel.vger.linux-spi
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

This patch series extends the SPI bitbang, gpio, and spi-engine controllers to
support configurable MOSI line idle states.
It then introduces the ad4000 driver which uses the MOSI idle configuration to
provide improved support for the AD4000 series of ADCs.
Documentation is added describing the new extension to the SPI protocol.
The currently supported wiring modes for AD4000 devices were documented under
IIO documentation directory.

Change log v4 -> v5:

[SPI]
- spi: Fixed spi_setup() not failing if controller doesn't support requested MOSI config.
- spi-summary: CS active -> CS asserted; use of `` to highlight code elements.
- spi: spi-engine: renamed SPI_ENGINE_CONFIG_SDO_IDLE -> SPI_ENGINE_CONFIG_SDO_IDLE_HIGH.
[Device tree]
- Added missing compatibles for ADAQ4001 and ADAQ4003.
- Removed example comments.
- Split adi,spi-mode property into adi,sdi-pin and adi,cnv-pin properties.
- Updated property constraints.
[IIO]
- ad4000: Reviewed includes.
- ad4000: Fixed devm_regulator_get_enable_read_voltage() usage.
- ad4000: Used local lock to protect scale change read modify write cycle.
- ad4000: renamed _3wire -> _reg_access; three_w_chan_spec -> reg_access_chan_spec.
- ad4000: Use u8 tx_buf[2] and u8 rx_buf[2] for reg access transfers.
- ad4000: Simplified dt property read.
- ad4000: Use sample >>= chan->scan_type.shift;
- ad4000: Use devm_spi_optimize_message().
- ad4000: Improvement to macros.
[Documentation]
- [New patch] iio: Added documentation for AD4000 describing wiring connection modes.

Link to v4: https://lore.kernel.org/linux-iio/cover.1718749981.git.marcelo.schmitt@analog.com/
Link to v3: https://lore.kernel.org/linux-iio/cover.1717539384.git.marcelo.schmitt@analog.com/
Link to v2: https://lore.kernel.org/linux-iio/cover.1712585500.git.marcelo.schmitt@analog.com/
Link to v1: https://lore.kernel.org/linux-iio/cover.1711131830.git.marcelo.schmitt@analog.com/

I believe to have made everything suggested in v4, except for the following:

- Use of spi_w8r8().
I tried that but then the values I got from reg read alternated between 0x65 and
0xFF (sometimes 0x00).
I didn't find out why so I kept with spi_sync_transfer().
May investigate it better if re-spinning.

- Reducing sample buffer size
I agree we may save some memory reducing the sample buffer size from 32 to 24 bits.
I will probably use get_unaligned_be24() to get the data back but will have to
declare sample buffers as arrays. It was very tricky to get the buffer
declarations correct the first time and I didn't want to take much longer to
provide a v5.
May do it for v6 if re-spinning.


Thanks,
Marcelo

Marcelo Schmitt (7):
  spi: Enable controllers to extend the SPI protocol with MOSI idle
    configuration
  spi: bitbang: Implement support for MOSI idle state configuration
  spi: spi-gpio: Add support for MOSI idle state configuration
  spi: spi-axi-spi-engine: Add support for MOSI idle configuration
  dt-bindings: iio: adc: Add AD4000
  iio: adc: Add support for AD4000
  docs: iio: Add documentation for AD4000

 .../bindings/iio/adc/adi,ad4000.yaml          | 190 +++++
 Documentation/iio/ad4000.rst                  | 131 ++++
 Documentation/iio/index.rst                   |   1 +
 Documentation/spi/spi-summary.rst             |  83 ++
 MAINTAINERS                                   |   9 +
 drivers/iio/adc/Kconfig                       |  12 +
 drivers/iio/adc/Makefile                      |   1 +
 drivers/iio/adc/ad4000.c                      | 711 ++++++++++++++++++
 drivers/spi/spi-axi-spi-engine.c              |   8 +
 drivers/spi/spi-bitbang.c                     |  24 +
 drivers/spi/spi-gpio.c                        |  12 +-
 drivers/spi/spi.c                             |   7 +
 include/linux/spi/spi.h                       |   6 +
 include/linux/spi/spi_bitbang.h               |   1 +
 include/uapi/linux/spi/spi.h                  |   5 +-
 15 files changed, 1198 insertions(+), 3 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/iio/adc/adi,ad4000.yaml
 create mode 100644 Documentation/iio/ad4000.rst
 create mode 100644 drivers/iio/adc/ad4000.c

-- 
2.43.0

.

From: "Rob Herring (Arm)" <robh@kernel.org>
To: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>,
	Miquel Raynal <miquel.raynal@bootlin.com>,
	Richard Weinberger <richard@nod.at>,
	Vignesh Raghavendra <vigneshr@ti.com>,
	Krzysztof Kozlowski <krzk+dt@kernel.org>,
	Conor Dooley <conor+dt@kernel.org>
Cc: linux-mtd@lists.infradead.org,
	linux-arm-msm@vger.kernel.org,
	devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: [PATCH] dt-bindings: mtd: qcom,nandc: Define properties at top-level
Date: Tue, 25 Jun 2024 15:56:05 -0600
Message-ID: <20240625215605.192260-1-robh@kernel.org>
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Xref: photonic.trudheim.com org.kernel.vger.linux-kernel:1258800
Newsgroups: org.kernel.vger.linux-kernel,org.infradead.lists.linux-mtd,org.kernel.vger.linux-arm-msm,org.kernel.vger.linux-devicetree
Path: photonic.trudheim.com!nntp.lore.kernel.org!not-for-mail

Convention is DT schemas should define all properties at the top-level
and not inside of if/then schemas. That minimizes the if/then schemas
and is more future proof.

There were 2 "if" schemas for "qcom,ipq806x-nand" and the
"qcom,boot-partitions: true" unnecessary, so the conditional schemas
can be simplified a bit.

Signed-off-by: Rob Herring (Arm) <robh@kernel.org>
---
 .../devicetree/bindings/mtd/qcom,nandc.yaml   | 38 +++++++------------
 1 file changed, 14 insertions(+), 24 deletions(-)

diff --git a/Documentation/devicetree/bindings/mtd/qcom,nandc.yaml b/Documentation/devicetree/bindings/mtd/qcom,nandc.yaml
index 4ada60fbf81d..35b4206ea918 100644
--- a/Documentation/devicetree/bindings/mtd/qcom,nandc.yaml
+++ b/Documentation/devicetree/bindings/mtd/qcom,nandc.yaml
@@ -31,6 +31,18 @@ properties:
       - const: core
       - const: aon
 
+  qcom,cmd-crci:
+    $ref: /schemas/types.yaml#/definitions/uint32
+    description:
+      Must contain the ADM command type CRCI block instance number specified for
+      the NAND controller on the given platform
+
+  qcom,data-crci:
+    $ref: /schemas/types.yaml#/definitions/uint32
+    description:
+      Must contain the ADM data type CRCI block instance number specified for
+      the NAND controller on the given platform
+
 patternProperties:
   "^nand@[a-f0-9]$":
     type: object
@@ -83,18 +95,6 @@ allOf:
           items:
             - const: rxtx
 
-        qcom,cmd-crci:
-          $ref: /schemas/types.yaml#/definitions/uint32
-          description:
-            Must contain the ADM command type CRCI block instance number
-            specified for the NAND controller on the given platform
-
-        qcom,data-crci:
-          $ref: /schemas/types.yaml#/definitions/uint32
-          description:
-            Must contain the ADM data type CRCI block instance number
-            specified for the NAND controller on the given platform
-
   - if:
       properties:
         compatible:
@@ -119,19 +119,9 @@ allOf:
             - const: rx
             - const: cmd
 
-  - if:
-      properties:
-        compatible:
-          contains:
-            enum:
-              - qcom,ipq806x-nand
+        qcom,cmd-crci: false
+        qcom,data-crci: false
 
-    then:
-      patternProperties:
-        "^nand@[a-f0-9]$":
-          properties:
-            qcom,boot-partitions: true
-    else:
       patternProperties:
         "^nand@[a-f0-9]$":
           properties:
-- 
2.43.0

.

