From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from relay5-d.mail.gandi.net (relay5-d.mail.gandi.net [217.70.183.197]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 113C03FBA7; Tue, 13 May 2025 07:32:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.70.183.197 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747121563; cv=none; b=RaLsWXfjn0jZd8SeZavWwMGz/UNTFJssGnA4crw6AzcUqf0esl//UKJHodzRl18LeQFjxyqNd5Fg5bWJzPQgJcDpFJ+E0H6Qx5TKfcjhie7eHwiYf24zup9JrH3EhJTB7LKAjl3fXH2b6FhZXmvCwD2LHwXRicO7CIp8s5Nm1tw= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747121563; c=relaxed/simple; bh=XdkMb5Q4N9HN1sk1j3MYurYl2fcKG++Bwa2mmv+dmnk=; h=From:To:Cc:Subject:In-Reply-To:References:Date:Message-ID: MIME-Version:Content-Type; b=lOy3btTsfM8ksMAd5S8VyYLoTYrLuYM2hWRo4b6nNClobLsu9R2VPaM8URXfkNhYsnD/3yoajjFukhXbVeEOW87UQDPN8mxOtIja2RIZJ9J6ygbp8UVLBDFwgO5wGmdxOefeS64YkwRSdN8+SVJkshy13zYX1LS3SDplutPyLVg= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=DzSPwzA/; arc=none smtp.client-ip=217.70.183.197 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="DzSPwzA/" Received: by mail.gandi.net (Postfix) with ESMTPSA id C36D543A52; Tue, 13 May 2025 07:32:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1747121558; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=S1eIbRBwjMlG5tI3/9yXhq2Ez/OQmBnIGc8nf+riz4A=; b=DzSPwzA/yAJo+uAUajyB277KUwu4PQMAGG2Ig4Cu1p7h1x4qSpGI0wErko+p1d3dK84NYp VTzleB7hB7BhaNKeSbSPVRPRwYOfR8frcl+9RqcIyDJ2N0XVRNUf5ilFbL31dUuvomULms AYy1xGLOIO9hwNr7KBS7Y1YvZa+ahoAEofZ4I0VHf/pVzQHRcPWHjKI0vwI8AregYsLyBn 3iU/wSawUqyHapQexJKjBy070S0bb4PznS/JmptKy5GAy1Aw5gDE9/uSLaTK5/7UYpva/n fwLf5jh7F/xLOQDu7lKIUREXVUxSzmZ9DkKw3YQ/PBNdzFQ+kMc8ymPn18nURA== From: Miquel Raynal To: Gabor Juhos Cc: Md Sadre Alam , Mark Brown , Manivannan Sadhasivam , Richard Weinberger , Vignesh Raghavendra , Varadarajan Narayanan , Sricharan Ramabadhran , linux-spi@vger.kernel.org, linux-mtd@lists.infradead.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH next 2/2] spi: spi-qpic-snand: add support for 8 bits ECC strength In-Reply-To: <16195524-1f31-4968-a3fd-f3d24f1c4223@gmail.com> (Gabor Juhos's message of "Mon, 12 May 2025 22:19:05 +0200") References: <20250502-qpic-snand-8bit-ecc-v1-0-95f3cd08bbc5@gmail.com> <20250502-qpic-snand-8bit-ecc-v1-2-95f3cd08bbc5@gmail.com> <8aa3d4da-da3e-2af4-e0f9-cd56d6259d8f@quicinc.com> <878qn2nsa0.fsf@bootlin.com> <16195524-1f31-4968-a3fd-f3d24f1c4223@gmail.com> User-Agent: mu4e 1.12.7; emacs 29.4 Date: Tue, 13 May 2025 09:32:36 +0200 Message-ID: <87msbhezjf.fsf@bootlin.com> Precedence: bulk X-Mailing-List: linux-arm-msm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-GND-State: clean X-GND-Score: -100 X-GND-Cause: gggruggvucftvghtrhhoucdtuddrgeefvddrtddtgdeftdefheegucetufdoteggodetrfdotffvucfrrhhofhhilhgvmecuifetpfffkfdpucggtfgfnhhsuhgsshgtrhhisggvnecuuegrihhlohhuthemuceftddunecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenucfjughrpefhvfevufgjfhgffffkgggtgfesthhqredttderjeenucfhrhhomhepofhiqhhuvghlucftrgihnhgrlhcuoehmihhquhgvlhdrrhgrhihnrghlsegsohhothhlihhnrdgtohhmqeenucggtffrrghtthgvrhhnpeffgefhjedtfeeigeduudekudejkedtiefhleelueeiueevheekvdeludehiedvfeenucfkphepledtrdekledrudeifedruddvjeenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepihhnvghtpeeltddrkeelrdduieefrdduvdejpdhhvghloheplhhotggrlhhhohhsthdpmhgrihhlfhhrohhmpehmihhquhgvlhdrrhgrhihnrghlsegsohhothhlihhnrdgtohhmpdhnsggprhgtphhtthhopeduvddprhgtphhtthhopehjgehgkeihjeesghhmrghilhdrtghomhdprhgtphhtthhopehquhhitggpmhgurghlrghmsehquhhitghinhgtrdgtohhmpdhrtghpthhtohepsghrohhonhhivgeskhgvrhhnvghlrdhorhhgpdhrtghpthhtohepmhgrnhhivhgrnhhnrghnrdhsrgguhhgrshhivhgrmheslhhinhgrrhhordhorhhgpdhrtghpthhtoheprhhitghhrghrugesnhhougdrrghtpdhrtghpthhto hepvhhighhnvghshhhrsehtihdrtghomhdprhgtphhtthhopehquhhitggpvhgrrhgruggrsehquhhitghinhgtrdgtohhmpdhrtghpthhtohepqhhuihgtpghsrhhitghhrghrrgesqhhuihgtihhntgdrtghomh X-GND-Sasl: miquel.raynal@bootlin.com On 12/05/2025 at 22:19:05 +02, Gabor Juhos wrote: > 2025. 05. 12. 10:32 keltez=C3=A9ssel, Miquel Raynal =C3=ADrta: >> On 05/05/2025 at 15:21:52 +02, Gabor Juhos wrote: >>=20 >>> 2025. 05. 05. 13:17 keltez=C3=A9ssel, Md Sadre Alam =C3=ADrta: >>>> >>>> >>> > > [...] > >>> [ 48.940586] =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D >>> [ 48.941112] mtd_nandbiterrs: MTD device: 0 >>> [ 48.946811] mtd_nandbiterrs: MTD device size 268435456, eraseblock= =3D131072, >>> page=3D2048, oob=3D128 >>> [ 48.950837] mtd_nandbiterrs: Device uses 1 subpages of 2048 bytes >>> [ 48.959448] mtd_nandbiterrs: Using page=3D0, offset=3D0, eraseblock= =3D0 >>> [ 48.969014] mtd_nandbiterrs: incremental biterrors test >>> [ 48.971596] mtd_nandbiterrs: write_page >>> [ 48.977594] mtd_nandbiterrs: rewrite page >>> [ 48.981277] mtd_nandbiterrs: read_page >>> [ 48.985247] mtd_nandbiterrs: verify_page >>> [ 48.988269] mtd_nandbiterrs: Successfully corrected 0 bit errors per= subpage >>> [ 48.992327] mtd_nandbiterrs: Inserted biterror @ 0/5 >>> [ 48.999428] mtd_nandbiterrs: rewrite page >>> [ 49.005508] mtd_nandbiterrs: read_page >>> [ 49.008836] mtd_nandbiterrs: Read reported 1 corrected bit errors >>> [ 49.011858] mtd_nandbiterrs: verify_page >>> [ 49.018061] mtd_nandbiterrs: Successfully corrected 1 bit errors per= subpage >>> [ 49.022015] mtd_nandbiterrs: Inserted biterror @ 0/2 >>> [ 49.029058] mtd_nandbiterrs: rewrite page >>> [ 49.034848] mtd_nandbiterrs: read_page >>> [ 49.038516] mtd_nandbiterrs: Read reported 1 corrected bit errors >>> [ 49.041545] mtd_nandbiterrs: verify_page >>> [ 49.047755] mtd_nandbiterrs: Successfully corrected 2 bit errors per= subpage >>> [ 49.051702] mtd_nandbiterrs: Inserted biterror @ 0/0 >>> [ 49.058760] mtd_nandbiterrs: rewrite page >>> [ 49.064565] mtd_nandbiterrs: read_page >>> [ 49.068203] mtd_nandbiterrs: Read reported 1 corrected bit errors >>> [ 49.071232] mtd_nandbiterrs: verify_page >>> [ 49.077432] mtd_nandbiterrs: Successfully corrected 3 bit errors per= subpage >>> [ 49.081389] mtd_nandbiterrs: Inserted biterror @ 1/7 >>> [ 49.088432] mtd_nandbiterrs: rewrite page >>> [ 49.094197] mtd_nandbiterrs: read_page >>> [ 49.097889] mtd_nandbiterrs: Read reported 2 corrected bit errors >>> [ 49.100919] mtd_nandbiterrs: verify_page >>> [ 49.107121] mtd_nandbiterrs: Successfully corrected 4 bit errors per= subpage >>> [ 49.111077] mtd_nandbiterrs: Inserted biterror @ 1/5 >>> [ 49.118137] mtd_nandbiterrs: rewrite page >>> [ 49.123892] mtd_nandbiterrs: read_page >>> [ 49.127576] mtd_nandbiterrs: Read reported 2 corrected bit errors >>> [ 49.130608] mtd_nandbiterrs: verify_page >>> [ 49.136808] mtd_nandbiterrs: Successfully corrected 5 bit errors per= subpage >>> [ 49.140764] mtd_nandbiterrs: Inserted biterror @ 1/2 >>> [ 49.147807] mtd_nandbiterrs: rewrite page >>> [ 49.153607] mtd_nandbiterrs: read_page >>> [ 49.157268] mtd_nandbiterrs: Read reported 2 corrected bit errors >>> [ 49.160294] mtd_nandbiterrs: verify_page >>> [ 49.166496] mtd_nandbiterrs: Successfully corrected 6 bit errors per= subpage >>> [ 49.170452] mtd_nandbiterrs: Inserted biterror @ 1/0 >>> [ 49.177498] mtd_nandbiterrs: rewrite page >>> [ 49.183253] mtd_nandbiterrs: read_page >>> [ 49.186974] mtd_nandbiterrs: Read reported 2 corrected bit errors >>> [ 49.189983] mtd_nandbiterrs: verify_page >>> [ 49.196194] mtd_nandbiterrs: Successfully corrected 7 bit errors per= subpage >>> [ 49.200140] mtd_nandbiterrs: Inserted biterror @ 2/6 >>> [ 49.207182] mtd_nandbiterrs: rewrite page >>> [ 49.212895] mtd_nandbiterrs: read_page >>> [ 49.216671] mtd_nandbiterrs: Read reported 3 corrected bit errors >>> [ 49.219670] mtd_nandbiterrs: verify_page >>> [ 49.225872] mtd_nandbiterrs: Successfully corrected 8 bit errors per= subpage >>> [ 49.229827] mtd_nandbiterrs: Inserted biterror @ 2/5 >>> [ 49.236871] mtd_nandbiterrs: rewrite page >>> [ 49.242629] mtd_nandbiterrs: read_page >>> [ 49.246348] mtd_nandbiterrs: error: read failed at 0x0 >>> [ 49.249356] mtd_nandbiterrs: After 9 biterrors per subpage, read rep= orted >>> error -74 >>> [ 49.257958] mtd_nandbiterrs: finished successfully. >>> [ 49.262029] =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D >>> # >>=20 >> This is not the intended behavior. The reporting is wrong and should >> report an increasing number of bitflips instead of 1, 1, 1, 2, 2, 2, 2, >> 3. >>=20 >> With this behavior, wear levelling will not work correctly. >>=20 >> This is not related to Gabor's changes, but I believe this should be >> updated otherwise it does not make much sense to increase the strength. > > It still makes some sense. For example, the bootloader on my board uses 8= bits > strength when it handles the NAND flash. Without supporting that, the ker= nel > can't read the data written by the bootloader and vice versa. > >> Gabor, can you look into it? Both patches look fine otherwise, thanks a >> lot! > > I have checked it. According to the code, the driver reads the reported v= alues > from a hardware register. > > Here is the result of another test but i have added some debug code to the > driver so the output contains the hardware register values: > > # insmod mtd_nandbiterrs dev=3D0 > [ 64.791395]=20 > [ 64.791423] =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D > [ 64.791950] mtd_nandbiterrs: MTD device: 0 > [ 64.797592] mtd_nandbiterrs: MTD device size 268435456, eraseblock= =3D131072, page=3D2048, oob=3D128 > [ 64.801779] mtd_nandbiterrs: Device uses 1 subpages of 2048 bytes > [ 64.810313] mtd_nandbiterrs: Using page=3D0, offset=3D0, eraseblock= =3D0 > [ 64.820832] mtd_nandbiterrs: incremental biterrors test > [ 64.822452] mtd_nandbiterrs: write_page > [ 64.828511] mtd_nandbiterrs: rewrite page > [ 64.832270] mtd_nandbiterrs: read_page > [ 64.836184] qcom_snand 79b0000.spi: cw[0] flash:00003020 buffer:00ff= 0200 erased_cw:00000002 > [ 64.839091] qcom_snand 79b0000.spi: cw[1] flash:00002020 buffer:00ff= 0200 erased_cw:00000002 > [ 64.847364] qcom_snand 79b0000.spi: cw[2] flash:00001020 buffer:00ff= 0200 erased_cw:00000002 > [ 64.855694] qcom_snand 79b0000.spi: cw[3] flash:00000020 buffer:00ff= 0200 erased_cw:00000002 > [ 64.864020] qcom_snand 79b0000.spi: corrected:0 failed:0 bitflips:0 > [ 64.872349] mtd_nandbiterrs: verify_page > [ 64.878598] mtd_nandbiterrs: Successfully corrected 0 bit errors per= subpage > [ 64.882760] mtd_nandbiterrs: Inserted biterror @ 0/5 > [ 64.889793] mtd_nandbiterrs: rewrite page > [ 64.895541] mtd_nandbiterrs: read_page > [ 64.899228] qcom_snand 79b0000.spi: cw[0] flash:00003020 buffer:00ff= 0201 erased_cw:00000002 > [ 64.902282] qcom_snand 79b0000.spi: cw[1] flash:00002020 buffer:00ff= 0200 erased_cw:00000002 > [ 64.910549] qcom_snand 79b0000.spi: cw[2] flash:00001020 buffer:00ff= 0200 erased_cw:00000002 > [ 64.918860] qcom_snand 79b0000.spi: cw[3] flash:00000020 buffer:00ff= 0200 erased_cw:00000002 > [ 64.927206] qcom_snand 79b0000.spi: corrected:1 failed:0 bitflips:1 > [ 64.935552] mtd_nandbiterrs: Read reported 1 corrected bit errors > [ 64.941789] mtd_nandbiterrs: verify_page > [ 64.948043] mtd_nandbiterrs: Successfully corrected 1 bit errors per= subpage > [ 64.952042] mtd_nandbiterrs: Inserted biterror @ 0/2 > [ 64.959048] mtd_nandbiterrs: rewrite page > [ 64.964815] mtd_nandbiterrs: read_page > [ 64.968490] qcom_snand 79b0000.spi: cw[0] flash:00003020 buffer:00ff= 0201 erased_cw:00000002 > [ 64.971586] qcom_snand 79b0000.spi: cw[1] flash:00002020 buffer:00ff= 0200 erased_cw:00000002 > [ 64.979814] qcom_snand 79b0000.spi: cw[2] flash:00001020 buffer:00ff= 0200 erased_cw:00000002 > [ 64.988131] qcom_snand 79b0000.spi: cw[3] flash:00000020 buffer:00ff= 0200 erased_cw:00000002 > [ 64.996481] qcom_snand 79b0000.spi: corrected:1 failed:0 bitflips:1 > [ 65.004810] mtd_nandbiterrs: Read reported 1 corrected bit errors > [ 65.011059] mtd_nandbiterrs: verify_page > [ 65.017313] mtd_nandbiterrs: Successfully corrected 2 bit errors per= subpage > [ 65.021307] mtd_nandbiterrs: Inserted biterror @ 0/0 > [ 65.028319] mtd_nandbiterrs: rewrite page > [ 65.034131] mtd_nandbiterrs: read_page > [ 65.037862] qcom_snand 79b0000.spi: cw[0] flash:00003020 buffer:00ff= 0201 erased_cw:00000002 > [ 65.040844] qcom_snand 79b0000.spi: cw[1] flash:00002020 buffer:00ff= 0200 erased_cw:00000002 > [ 65.049069] qcom_snand 79b0000.spi: cw[2] flash:00001020 buffer:00ff= 0200 erased_cw:00000002 > [ 65.057418] qcom_snand 79b0000.spi: cw[3] flash:00000020 buffer:00ff= 0200 erased_cw:00000002 > [ 65.065763] qcom_snand 79b0000.spi: corrected:1 failed:0 bitflips:1 > [ 65.074082] mtd_nandbiterrs: Read reported 1 corrected bit errors > [ 65.080341] mtd_nandbiterrs: verify_page > [ 65.086584] mtd_nandbiterrs: Successfully corrected 3 bit errors per= subpage > [ 65.090574] mtd_nandbiterrs: Inserted biterror @ 1/7 > [ 65.097589] mtd_nandbiterrs: rewrite page > [ 65.103374] mtd_nandbiterrs: read_page > [ 65.107030] qcom_snand 79b0000.spi: cw[0] flash:00003020 buffer:00ff= 0202 erased_cw:00000002 > [ 65.110120] qcom_snand 79b0000.spi: cw[1] flash:00002020 buffer:00ff= 0200 erased_cw:00000002 > [ 65.118340] qcom_snand 79b0000.spi: cw[2] flash:00001020 buffer:00ff= 0200 erased_cw:00000002 > [ 65.126689] qcom_snand 79b0000.spi: cw[3] flash:00000020 buffer:00ff= 0200 erased_cw:00000002 > [ 65.135032] qcom_snand 79b0000.spi: corrected:2 failed:0 bitflips:2 > [ 65.143357] mtd_nandbiterrs: Read reported 2 corrected bit errors > [ 65.149611] mtd_nandbiterrs: verify_page > [ 65.155855] mtd_nandbiterrs: Successfully corrected 4 bit errors per= subpage > [ 65.159844] mtd_nandbiterrs: Inserted biterror @ 1/5 > [ 65.166860] mtd_nandbiterrs: rewrite page > [ 65.172645] mtd_nandbiterrs: read_page > [ 65.176301] qcom_snand 79b0000.spi: cw[0] flash:00003020 buffer:00ff= 0202 erased_cw:00000002 > [ 65.179389] qcom_snand 79b0000.spi: cw[1] flash:00002020 buffer:00ff= 0200 erased_cw:00000002 > [ 65.187611] qcom_snand 79b0000.spi: cw[2] flash:00001020 buffer:00ff= 0200 erased_cw:00000002 > [ 65.195961] qcom_snand 79b0000.spi: cw[3] flash:00000020 buffer:00ff= 0200 erased_cw:00000002 > [ 65.204289] qcom_snand 79b0000.spi: corrected:2 failed:0 bitflips:2 > [ 65.212623] mtd_nandbiterrs: Read reported 2 corrected bit errors > [ 65.218858] mtd_nandbiterrs: verify_page > [ 65.225139] mtd_nandbiterrs: Successfully corrected 5 bit errors per= subpage > [ 65.229102] mtd_nandbiterrs: Inserted biterror @ 1/2 > [ 65.236147] mtd_nandbiterrs: rewrite page > [ 65.241899] mtd_nandbiterrs: read_page > [ 65.245572] qcom_snand 79b0000.spi: cw[0] flash:00003020 buffer:00ff= 0202 erased_cw:00000002 > [ 65.248635] qcom_snand 79b0000.spi: cw[1] flash:00002020 buffer:00ff= 0200 erased_cw:00000002 > [ 65.256902] qcom_snand 79b0000.spi: cw[2] flash:00001020 buffer:00ff= 0200 erased_cw:00000002 > [ 65.265234] qcom_snand 79b0000.spi: cw[3] flash:00000020 buffer:00ff= 0200 erased_cw:00000002 > [ 65.273561] qcom_snand 79b0000.spi: corrected:2 failed:0 bitflips:2 > [ 65.281895] mtd_nandbiterrs: Read reported 2 corrected bit errors > [ 65.288129] mtd_nandbiterrs: verify_page > [ 65.294408] mtd_nandbiterrs: Successfully corrected 6 bit errors per= subpage > [ 65.298373] mtd_nandbiterrs: Inserted biterror @ 1/0 > [ 65.305413] mtd_nandbiterrs: rewrite page > [ 65.311170] mtd_nandbiterrs: read_page > [ 65.314843] qcom_snand 79b0000.spi: cw[0] flash:00003020 buffer:00ff= 0202 erased_cw:00000002 > [ 65.317906] qcom_snand 79b0000.spi: cw[1] flash:00002020 buffer:00ff= 0200 erased_cw:00000002 > [ 65.326170] qcom_snand 79b0000.spi: cw[2] flash:00001020 buffer:00ff= 0200 erased_cw:00000002 > [ 65.334501] qcom_snand 79b0000.spi: cw[3] flash:00000020 buffer:00ff= 0200 erased_cw:00000002 > [ 65.342833] qcom_snand 79b0000.spi: corrected:2 failed:0 bitflips:2 > [ 65.351164] mtd_nandbiterrs: Read reported 2 corrected bit errors > [ 65.357399] mtd_nandbiterrs: verify_page > [ 65.363680] mtd_nandbiterrs: Successfully corrected 7 bit errors per= subpage > [ 65.367643] mtd_nandbiterrs: Inserted biterror @ 2/6 > [ 65.374684] mtd_nandbiterrs: rewrite page > [ 65.380445] mtd_nandbiterrs: read_page > [ 65.384112] qcom_snand 79b0000.spi: cw[0] flash:00003020 buffer:00ff= 0203 erased_cw:00000002 > [ 65.387177] qcom_snand 79b0000.spi: cw[1] flash:00002020 buffer:00ff= 0200 erased_cw:00000002 > [ 65.395445] qcom_snand 79b0000.spi: cw[2] flash:00001020 buffer:00ff= 0200 erased_cw:00000002 > [ 65.403769] qcom_snand 79b0000.spi: cw[3] flash:00000020 buffer:00ff= 0200 erased_cw:00000002 > [ 65.412103] qcom_snand 79b0000.spi: corrected:3 failed:0 bitflips:3 > [ 65.420436] mtd_nandbiterrs: Read reported 3 corrected bit errors > [ 65.426671] mtd_nandbiterrs: verify_page > [ 65.432950] mtd_nandbiterrs: Successfully corrected 8 bit errors per= subpage > [ 65.436915] mtd_nandbiterrs: Inserted biterror @ 2/5 > [ 65.443958] mtd_nandbiterrs: rewrite page > [ 65.449719] mtd_nandbiterrs: read_page > [ 65.453386] qcom_snand 79b0000.spi: cw[0] flash:00003030 buffer:00ff= 0301 erased_cw:00000002 > [ 65.456448] qcom_snand 79b0000.spi: cw[1] flash:00002020 buffer:00ff= 0200 erased_cw:00000002 > [ 65.464715] qcom_snand 79b0000.spi: cw[2] flash:00001020 buffer:00ff= 0200 erased_cw:00000002 > [ 65.473041] qcom_snand 79b0000.spi: cw[3] flash:00000020 buffer:00ff= 0200 erased_cw:00000002 > [ 65.481374] qcom_snand 79b0000.spi: corrected:0 failed:1 bitflips:3 > [ 65.489706] mtd_nandbiterrs: error: read failed at 0x0 > [ 65.495941] mtd_nandbiterrs: After 9 biterrors per subpage, read rep= orted error -74 > [ 65.504609] mtd_nandbiterrs: finished successfully. > [ 65.508700] =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D > > > Basically, the driver reads the page as 4 codewords along with reading the > register values after each. The reported values are coming from the low=20 > 5 bits of the 'buffer' values printed above. The layout of the register is > barely documented in the driver, so the exact meaning of the bits is unkn= own. > > Despite that, I had an idea, so I have changed the code in the nandbiterrs > module to insert only single bit error into a given byte. By doing the te= st > with the modified module results in the following: > > # insmod mtd_nandbiterrs dev=3D0 > [ 37.125416]=20 > [ 37.125444] =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D > [ 37.125970] mtd_nandbiterrs: MTD device: 0 > [ 37.131764] mtd_nandbiterrs: MTD device size 268435456, eraseblock= =3D131072, page=3D2048, oob=3D128 > [ 37.135695] mtd_nandbiterrs: Device uses 1 subpages of 2048 bytes > [ 37.144314] mtd_nandbiterrs: Using page=3D0, offset=3D0, eraseblock= =3D0 > [ 37.155047] mtd_nandbiterrs: incremental biterrors test > [ 37.156481] mtd_nandbiterrs: write_page > [ 37.162518] mtd_nandbiterrs: rewrite page > [ 37.166298] mtd_nandbiterrs: read_page > [ 37.170193] qcom_snand 79b0000.spi: cw[0] flash:00003020 buffer:00ff= 0200 erased_cw:00000002 > [ 37.173111] qcom_snand 79b0000.spi: cw[1] flash:00002020 buffer:00ff= 0200 erased_cw:00000002 > [ 37.181383] qcom_snand 79b0000.spi: cw[2] flash:00001020 buffer:00ff= 0200 erased_cw:00000002 > [ 37.189708] qcom_snand 79b0000.spi: cw[3] flash:00000020 buffer:00ff= 0200 erased_cw:00000002 > [ 37.198020] qcom_snand 79b0000.spi: corrected:0 failed:0 bitflips:0 > [ 37.206367] mtd_nandbiterrs: verify_page > [ 37.212631] mtd_nandbiterrs: Successfully corrected 0 bit errors per= subpage > [ 37.216768] mtd_nandbiterrs: Inserted biterror @ 1/7 > [ 37.223809] mtd_nandbiterrs: rewrite page > [ 37.229569] mtd_nandbiterrs: read_page > [ 37.233244] qcom_snand 79b0000.spi: cw[0] flash:00003020 buffer:00ff= 0201 erased_cw:00000002 > [ 37.236301] qcom_snand 79b0000.spi: cw[1] flash:00002020 buffer:00ff= 0200 erased_cw:00000002 > [ 37.244571] qcom_snand 79b0000.spi: cw[2] flash:00001020 buffer:00ff= 0200 erased_cw:00000002 > [ 37.252896] qcom_snand 79b0000.spi: cw[3] flash:00000020 buffer:00ff= 0200 erased_cw:00000002 > [ 37.261227] qcom_snand 79b0000.spi: corrected:1 failed:0 bitflips:1 > [ 37.269560] mtd_nandbiterrs: Read reported 1 corrected bit errors > [ 37.275795] mtd_nandbiterrs: verify_page > [ 37.282075] mtd_nandbiterrs: Successfully corrected 1 bit errors per= subpage > [ 37.286039] mtd_nandbiterrs: Inserted biterror @ 3/7 > [ 37.293080] mtd_nandbiterrs: rewrite page > [ 37.298877] mtd_nandbiterrs: read_page > [ 37.302531] qcom_snand 79b0000.spi: cw[0] flash:00003020 buffer:00ff= 0202 erased_cw:00000002 > [ 37.305572] qcom_snand 79b0000.spi: cw[1] flash:00002020 buffer:00ff= 0200 erased_cw:00000002 > [ 37.313839] qcom_snand 79b0000.spi: cw[2] flash:00001020 buffer:00ff= 0200 erased_cw:00000002 > [ 37.322169] qcom_snand 79b0000.spi: cw[3] flash:00000020 buffer:00ff= 0200 erased_cw:00000002 > [ 37.330498] qcom_snand 79b0000.spi: corrected:2 failed:0 bitflips:2 > [ 37.338818] mtd_nandbiterrs: Read reported 2 corrected bit errors > [ 37.345078] mtd_nandbiterrs: verify_page > [ 37.351352] mtd_nandbiterrs: Successfully corrected 2 bit errors per= subpage > [ 37.355310] mtd_nandbiterrs: Inserted biterror @ 5/7 > [ 37.362352] mtd_nandbiterrs: rewrite page > [ 37.368094] mtd_nandbiterrs: read_page > [ 37.371814] qcom_snand 79b0000.spi: cw[0] flash:00003020 buffer:00ff= 0203 erased_cw:00000002 > [ 37.374843] qcom_snand 79b0000.spi: cw[1] flash:00002020 buffer:00ff= 0200 erased_cw:00000002 > [ 37.383111] qcom_snand 79b0000.spi: cw[2] flash:00001020 buffer:00ff= 0200 erased_cw:00000002 > [ 37.391437] qcom_snand 79b0000.spi: cw[3] flash:00000020 buffer:00ff= 0200 erased_cw:00000002 > [ 37.399769] qcom_snand 79b0000.spi: corrected:3 failed:0 bitflips:3 > [ 37.408089] mtd_nandbiterrs: Read reported 3 corrected bit errors > [ 37.414351] mtd_nandbiterrs: verify_page > [ 37.420616] mtd_nandbiterrs: Successfully corrected 3 bit errors per= subpage > [ 37.424581] mtd_nandbiterrs: Inserted biterror @ 7/7 > [ 37.431622] mtd_nandbiterrs: rewrite page > [ 37.437419] mtd_nandbiterrs: read_page > [ 37.441072] qcom_snand 79b0000.spi: cw[0] flash:00003020 buffer:00ff= 0204 erased_cw:00000002 > [ 37.444114] qcom_snand 79b0000.spi: cw[1] flash:00002020 buffer:00ff= 0200 erased_cw:00000002 > [ 37.452380] qcom_snand 79b0000.spi: cw[2] flash:00001020 buffer:00ff= 0200 erased_cw:00000002 > [ 37.460708] qcom_snand 79b0000.spi: cw[3] flash:00000020 buffer:00ff= 0200 erased_cw:00000002 > [ 37.469047] qcom_snand 79b0000.spi: corrected:4 failed:0 bitflips:4 > [ 37.477360] mtd_nandbiterrs: Read reported 4 corrected bit errors > [ 37.483621] mtd_nandbiterrs: verify_page > [ 37.489888] mtd_nandbiterrs: Successfully corrected 4 bit errors per= subpage > [ 37.493852] mtd_nandbiterrs: Inserted biterror @ 8/7 > [ 37.500893] mtd_nandbiterrs: rewrite page > [ 37.506636] mtd_nandbiterrs: read_page > [ 37.510342] qcom_snand 79b0000.spi: cw[0] flash:00003020 buffer:00ff= 0205 erased_cw:00000002 > [ 37.513385] qcom_snand 79b0000.spi: cw[1] flash:00002020 buffer:00ff= 0200 erased_cw:00000002 > [ 37.521652] qcom_snand 79b0000.spi: cw[2] flash:00001020 buffer:00ff= 0200 erased_cw:00000002 > [ 37.529978] qcom_snand 79b0000.spi: cw[3] flash:00000020 buffer:00ff= 0200 erased_cw:00000002 > [ 37.538297] qcom_snand 79b0000.spi: corrected:5 failed:0 bitflips:5 > [ 37.546643] mtd_nandbiterrs: Read reported 5 corrected bit errors > [ 37.552896] mtd_nandbiterrs: verify_page > [ 37.559161] mtd_nandbiterrs: Successfully corrected 5 bit errors per= subpage > [ 37.563123] mtd_nandbiterrs: Inserted biterror @ 10/7 > [ 37.570168] mtd_nandbiterrs: rewrite page > [ 37.575956] mtd_nandbiterrs: read_page > [ 37.579702] qcom_snand 79b0000.spi: cw[0] flash:00003020 buffer:00ff= 0206 erased_cw:00000002 > [ 37.582743] qcom_snand 79b0000.spi: cw[1] flash:00002020 buffer:00ff= 0200 erased_cw:00000002 > [ 37.591010] qcom_snand 79b0000.spi: cw[2] flash:00001020 buffer:00ff= 0200 erased_cw:00000002 > [ 37.599354] qcom_snand 79b0000.spi: cw[3] flash:00000020 buffer:00ff= 0200 erased_cw:00000002 > [ 37.607655] qcom_snand 79b0000.spi: corrected:6 failed:0 bitflips:6 > [ 37.616004] mtd_nandbiterrs: Read reported 6 corrected bit errors > [ 37.622249] mtd_nandbiterrs: verify_page > [ 37.628504] mtd_nandbiterrs: Successfully corrected 6 bit errors per= subpage > [ 37.632497] mtd_nandbiterrs: Inserted biterror @ 12/7 > [ 37.639524] mtd_nandbiterrs: rewrite page > [ 37.645353] mtd_nandbiterrs: read_page > [ 37.649047] qcom_snand 79b0000.spi: cw[0] flash:00003020 buffer:00ff= 0207 erased_cw:00000002 > [ 37.652100] qcom_snand 79b0000.spi: cw[1] flash:00002020 buffer:00ff= 0200 erased_cw:00000002 > [ 37.660367] qcom_snand 79b0000.spi: cw[2] flash:00001020 buffer:00ff= 0200 erased_cw:00000002 > [ 37.668679] qcom_snand 79b0000.spi: cw[3] flash:00000020 buffer:00ff= 0200 erased_cw:00000002 > [ 37.677029] qcom_snand 79b0000.spi: corrected:7 failed:0 bitflips:7 > [ 37.685358] mtd_nandbiterrs: Read reported 7 corrected bit errors > [ 37.691607] mtd_nandbiterrs: verify_page > [ 37.697861] mtd_nandbiterrs: Successfully corrected 7 bit errors per= subpage > [ 37.701852] mtd_nandbiterrs: Inserted biterror @ 14/7 > [ 37.708867] mtd_nandbiterrs: rewrite page > [ 37.714683] mtd_nandbiterrs: read_page > [ 37.718397] qcom_snand 79b0000.spi: cw[0] flash:00003020 buffer:00ff= 0208 erased_cw:00000002 > [ 37.721478] qcom_snand 79b0000.spi: cw[1] flash:00002020 buffer:00ff= 0200 erased_cw:00000002 > [ 37.729718] qcom_snand 79b0000.spi: cw[2] flash:00001020 buffer:00ff= 0200 erased_cw:00000002 > [ 37.738037] qcom_snand 79b0000.spi: cw[3] flash:00000020 buffer:00ff= 0200 erased_cw:00000002 > [ 37.746433] qcom_snand 79b0000.spi: corrected:8 failed:0 bitflips:8 > [ 37.754719] mtd_nandbiterrs: Read reported 8 corrected bit errors > [ 37.760972] mtd_nandbiterrs: verify_page > [ 37.767218] mtd_nandbiterrs: Successfully corrected 8 bit errors per= subpage > [ 37.771214] mtd_nandbiterrs: Inserted biterror @ 17/7 > [ 37.778225] mtd_nandbiterrs: rewrite page > [ 37.784054] mtd_nandbiterrs: read_page > [ 37.787754] qcom_snand 79b0000.spi: cw[0] flash:00003030 buffer:00ff= 0301 erased_cw:00000002 > [ 37.790836] qcom_snand 79b0000.spi: cw[1] flash:00002020 buffer:00ff= 0200 erased_cw:00000002 > [ 37.799076] qcom_snand 79b0000.spi: cw[2] flash:00001020 buffer:00ff= 0200 erased_cw:00000002 > [ 37.807395] qcom_snand 79b0000.spi: cw[3] flash:00000020 buffer:00ff= 0200 erased_cw:00000002 > [ 37.815743] qcom_snand 79b0000.spi: corrected:0 failed:1 bitflips:8 > [ 37.824073] mtd_nandbiterrs: error: read failed at 0x0 > [ 37.830321] mtd_nandbiterrs: After 9 biterrors per subpage, read rep= orted error -74 > [ 37.838993] mtd_nandbiterrs: finished successfully. > [ 37.843068] =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D > > Interestingly enough, it reports the correct number of bit errors now. > For me it seems, that the hardware reports the number of the corrected > *bytes* instead of the corrected *bits*. I doubt that, nobody counts bytes of errors. You results are surprising. I initially though in favour of a software bug, but then it looks even weirder than that. Alam? Thanks, Miqu=C3=A8l From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 54D31C3ABC9 for ; Tue, 13 May 2025 07:37:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Message-ID:Date:References :In-Reply-To:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=V+OJvOGdcVjTqifiq3G+Sz0AxsXBtHMVip08YgbY6TQ=; b=c/3k1pU7ntokg9 rvGjs0db+FrUSxpGo0ToEkSb8AAtqinmNgCORahfMUBtXbmxJei0zzQ3bSexDg8HsXAWZ6B9m0EHA D1xyLR59h5HnVhJiLyAilGm99Bb0JOD196UWIx85gZujK7TYT10za2rgZZoZLJDMwgGtEAylNMxZQ tpqZ/ogz6YBZfJMMxhyxOh+7f+Y/h6udLNknR5TCq9mPTHP9YwoYB8c0T6aNZi63scJrqHtpyNMrL K+mebr9HkxIuf62zQROM2r3333OhvvbIS3t2++tUcKdfILLVspgAB+m25o8Xpr5cSN9rhQ6/Ga4tb GXO8LG1SQaA9tMggPFYg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1uEkCV-0000000BdWh-0aGc; Tue, 13 May 2025 07:37:19 +0000 Received: from relay5-d.mail.gandi.net ([217.70.183.197]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1uEk81-0000000Bcqs-0BmD for linux-mtd@lists.infradead.org; Tue, 13 May 2025 07:32:43 +0000 Received: by mail.gandi.net (Postfix) with ESMTPSA id C36D543A52; Tue, 13 May 2025 07:32:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1747121558; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=S1eIbRBwjMlG5tI3/9yXhq2Ez/OQmBnIGc8nf+riz4A=; b=DzSPwzA/yAJo+uAUajyB277KUwu4PQMAGG2Ig4Cu1p7h1x4qSpGI0wErko+p1d3dK84NYp VTzleB7hB7BhaNKeSbSPVRPRwYOfR8frcl+9RqcIyDJ2N0XVRNUf5ilFbL31dUuvomULms AYy1xGLOIO9hwNr7KBS7Y1YvZa+ahoAEofZ4I0VHf/pVzQHRcPWHjKI0vwI8AregYsLyBn 3iU/wSawUqyHapQexJKjBy070S0bb4PznS/JmptKy5GAy1Aw5gDE9/uSLaTK5/7UYpva/n fwLf5jh7F/xLOQDu7lKIUREXVUxSzmZ9DkKw3YQ/PBNdzFQ+kMc8ymPn18nURA== From: Miquel Raynal To: Gabor Juhos Cc: Md Sadre Alam , Mark Brown , Manivannan Sadhasivam , Richard Weinberger , Vignesh Raghavendra , Varadarajan Narayanan , Sricharan Ramabadhran , linux-spi@vger.kernel.org, linux-mtd@lists.infradead.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH next 2/2] spi: spi-qpic-snand: add support for 8 bits ECC strength In-Reply-To: <16195524-1f31-4968-a3fd-f3d24f1c4223@gmail.com> (Gabor Juhos's message of "Mon, 12 May 2025 22:19:05 +0200") References: <20250502-qpic-snand-8bit-ecc-v1-0-95f3cd08bbc5@gmail.com> <20250502-qpic-snand-8bit-ecc-v1-2-95f3cd08bbc5@gmail.com> <8aa3d4da-da3e-2af4-e0f9-cd56d6259d8f@quicinc.com> <878qn2nsa0.fsf@bootlin.com> <16195524-1f31-4968-a3fd-f3d24f1c4223@gmail.com> User-Agent: mu4e 1.12.7; emacs 29.4 Date: Tue, 13 May 2025 09:32:36 +0200 Message-ID: <87msbhezjf.fsf@bootlin.com> MIME-Version: 1.0 X-GND-State: clean X-GND-Score: -100 X-GND-Cause: gggruggvucftvghtrhhoucdtuddrgeefvddrtddtgdeftdefheegucetufdoteggodetrfdotffvucfrrhhofhhilhgvmecuifetpfffkfdpucggtfgfnhhsuhgsshgtrhhisggvnecuuegrihhlohhuthemuceftddunecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenucfjughrpefhvfevufgjfhgffffkgggtgfesthhqredttderjeenucfhrhhomhepofhiqhhuvghlucftrgihnhgrlhcuoehmihhquhgvlhdrrhgrhihnrghlsegsohhothhlihhnrdgtohhmqeenucggtffrrghtthgvrhhnpeffgefhjedtfeeigeduudekudejkedtiefhleelueeiueevheekvdeludehiedvfeenucfkphepledtrdekledrudeifedruddvjeenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepihhnvghtpeeltddrkeelrdduieefrdduvdejpdhhvghloheplhhotggrlhhhohhsthdpmhgrihhlfhhrohhmpehmihhquhgvlhdrrhgrhihnrghlsegsohhothhlihhnrdgtohhmpdhnsggprhgtphhtthhopeduvddprhgtphhtthhopehjgehgkeihjeesghhmrghilhdrtghomhdprhgtphhtthhopehquhhitggpmhgurghlrghmsehquhhitghinhgtrdgtohhmpdhrtghpthhtohepsghrohhonhhivgeskhgvrhhnvghlrdhorhhgpdhrtghpthhtohepmhgrnhhivhgrnhhnrghnrdhsrgguhhgrshhivhgrmheslhhinhgrrhhordhorhhgpdhrtghpthhtoheprhhitghhrghrugesnhhougdrrghtpdhrtghpthhto hepvhhighhnvghshhhrsehtihdrtghomhdprhgtphhtthhopehquhhitggpvhgrrhgruggrsehquhhitghinhgtrdgtohhmpdhrtghpthhtohepqhhuihgtpghsrhhitghhrghrrgesqhhuihgtihhntgdrtghomh X-GND-Sasl: miquel.raynal@bootlin.com X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250513_003241_508167_2304445A X-CRM114-Status: GOOD ( 15.89 ) X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+linux-mtd=archiver.kernel.org@lists.infradead.org T24gMTIvMDUvMjAyNSBhdCAyMjoxOTowNSArMDIsIEdhYm9yIEp1aG9zIDxqNGc4eTdAZ21haWwu Y29tPiB3cm90ZToKCj4gMjAyNS4gMDUuIDEyLiAxMDozMiBrZWx0ZXrDqXNzZWwsIE1pcXVlbCBS YXluYWwgw61ydGE6Cj4+IE9uIDA1LzA1LzIwMjUgYXQgMTU6MjE6NTIgKzAyLCBHYWJvciBKdWhv cyA8ajRnOHk3QGdtYWlsLmNvbT4gd3JvdGU6Cj4+IAo+Pj4gMjAyNS4gMDUuIDA1LiAxMzoxNyBr ZWx0ZXrDqXNzZWwsIE1kIFNhZHJlIEFsYW0gw61ydGE6Cj4+Pj4KPj4+Pgo+Pj4KPgo+IFsuLi5d Cj4KPj4+IFsgICA0OC45NDA1ODZdID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Cj4+PiBbICAgNDguOTQxMTEyXSBtdGRfbmFuZGJpdGVycnM6IE1URCBk ZXZpY2U6IDAKPj4+IFsgICA0OC45NDY4MTFdIG10ZF9uYW5kYml0ZXJyczogTVREIGRldmljZSBz aXplIDI2ODQzNTQ1NiwgZXJhc2VibG9jaz0xMzEwNzIsCj4+PiBwYWdlPTIwNDgsIG9vYj0xMjgK Pj4+IFsgICA0OC45NTA4MzddIG10ZF9uYW5kYml0ZXJyczogRGV2aWNlIHVzZXMgMSBzdWJwYWdl cyBvZiAyMDQ4IGJ5dGVzCj4+PiBbICAgNDguOTU5NDQ4XSBtdGRfbmFuZGJpdGVycnM6IFVzaW5n IHBhZ2U9MCwgb2Zmc2V0PTAsIGVyYXNlYmxvY2s9MAo+Pj4gWyAgIDQ4Ljk2OTAxNF0gbXRkX25h bmRiaXRlcnJzOiBpbmNyZW1lbnRhbCBiaXRlcnJvcnMgdGVzdAo+Pj4gWyAgIDQ4Ljk3MTU5Nl0g bXRkX25hbmRiaXRlcnJzOiB3cml0ZV9wYWdlCj4+PiBbICAgNDguOTc3NTk0XSBtdGRfbmFuZGJp dGVycnM6IHJld3JpdGUgcGFnZQo+Pj4gWyAgIDQ4Ljk4MTI3N10gbXRkX25hbmRiaXRlcnJzOiBy ZWFkX3BhZ2UKPj4+IFsgICA0OC45ODUyNDddIG10ZF9uYW5kYml0ZXJyczogdmVyaWZ5X3BhZ2UK Pj4+IFsgICA0OC45ODgyNjldIG10ZF9uYW5kYml0ZXJyczogU3VjY2Vzc2Z1bGx5IGNvcnJlY3Rl ZCAwIGJpdCBlcnJvcnMgcGVyIHN1YnBhZ2UKPj4+IFsgICA0OC45OTIzMjddIG10ZF9uYW5kYml0 ZXJyczogSW5zZXJ0ZWQgYml0ZXJyb3IgQCAwLzUKPj4+IFsgICA0OC45OTk0MjhdIG10ZF9uYW5k Yml0ZXJyczogcmV3cml0ZSBwYWdlCj4+PiBbICAgNDkuMDA1NTA4XSBtdGRfbmFuZGJpdGVycnM6 IHJlYWRfcGFnZQo+Pj4gWyAgIDQ5LjAwODgzNl0gbXRkX25hbmRiaXRlcnJzOiBSZWFkIHJlcG9y dGVkIDEgY29ycmVjdGVkIGJpdCBlcnJvcnMKPj4+IFsgICA0OS4wMTE4NThdIG10ZF9uYW5kYml0 ZXJyczogdmVyaWZ5X3BhZ2UKPj4+IFsgICA0OS4wMTgwNjFdIG10ZF9uYW5kYml0ZXJyczogU3Vj Y2Vzc2Z1bGx5IGNvcnJlY3RlZCAxIGJpdCBlcnJvcnMgcGVyIHN1YnBhZ2UKPj4+IFsgICA0OS4w MjIwMTVdIG10ZF9uYW5kYml0ZXJyczogSW5zZXJ0ZWQgYml0ZXJyb3IgQCAwLzIKPj4+IFsgICA0 OS4wMjkwNThdIG10ZF9uYW5kYml0ZXJyczogcmV3cml0ZSBwYWdlCj4+PiBbICAgNDkuMDM0ODQ4 XSBtdGRfbmFuZGJpdGVycnM6IHJlYWRfcGFnZQo+Pj4gWyAgIDQ5LjAzODUxNl0gbXRkX25hbmRi aXRlcnJzOiBSZWFkIHJlcG9ydGVkIDEgY29ycmVjdGVkIGJpdCBlcnJvcnMKPj4+IFsgICA0OS4w NDE1NDVdIG10ZF9uYW5kYml0ZXJyczogdmVyaWZ5X3BhZ2UKPj4+IFsgICA0OS4wNDc3NTVdIG10 ZF9uYW5kYml0ZXJyczogU3VjY2Vzc2Z1bGx5IGNvcnJlY3RlZCAyIGJpdCBlcnJvcnMgcGVyIHN1 YnBhZ2UKPj4+IFsgICA0OS4wNTE3MDJdIG10ZF9uYW5kYml0ZXJyczogSW5zZXJ0ZWQgYml0ZXJy b3IgQCAwLzAKPj4+IFsgICA0OS4wNTg3NjBdIG10ZF9uYW5kYml0ZXJyczogcmV3cml0ZSBwYWdl Cj4+PiBbICAgNDkuMDY0NTY1XSBtdGRfbmFuZGJpdGVycnM6IHJlYWRfcGFnZQo+Pj4gWyAgIDQ5 LjA2ODIwM10gbXRkX25hbmRiaXRlcnJzOiBSZWFkIHJlcG9ydGVkIDEgY29ycmVjdGVkIGJpdCBl cnJvcnMKPj4+IFsgICA0OS4wNzEyMzJdIG10ZF9uYW5kYml0ZXJyczogdmVyaWZ5X3BhZ2UKPj4+ IFsgICA0OS4wNzc0MzJdIG10ZF9uYW5kYml0ZXJyczogU3VjY2Vzc2Z1bGx5IGNvcnJlY3RlZCAz IGJpdCBlcnJvcnMgcGVyIHN1YnBhZ2UKPj4+IFsgICA0OS4wODEzODldIG10ZF9uYW5kYml0ZXJy czogSW5zZXJ0ZWQgYml0ZXJyb3IgQCAxLzcKPj4+IFsgICA0OS4wODg0MzJdIG10ZF9uYW5kYml0 ZXJyczogcmV3cml0ZSBwYWdlCj4+PiBbICAgNDkuMDk0MTk3XSBtdGRfbmFuZGJpdGVycnM6IHJl YWRfcGFnZQo+Pj4gWyAgIDQ5LjA5Nzg4OV0gbXRkX25hbmRiaXRlcnJzOiBSZWFkIHJlcG9ydGVk IDIgY29ycmVjdGVkIGJpdCBlcnJvcnMKPj4+IFsgICA0OS4xMDA5MTldIG10ZF9uYW5kYml0ZXJy czogdmVyaWZ5X3BhZ2UKPj4+IFsgICA0OS4xMDcxMjFdIG10ZF9uYW5kYml0ZXJyczogU3VjY2Vz c2Z1bGx5IGNvcnJlY3RlZCA0IGJpdCBlcnJvcnMgcGVyIHN1YnBhZ2UKPj4+IFsgICA0OS4xMTEw NzddIG10ZF9uYW5kYml0ZXJyczogSW5zZXJ0ZWQgYml0ZXJyb3IgQCAxLzUKPj4+IFsgICA0OS4x MTgxMzddIG10ZF9uYW5kYml0ZXJyczogcmV3cml0ZSBwYWdlCj4+PiBbICAgNDkuMTIzODkyXSBt dGRfbmFuZGJpdGVycnM6IHJlYWRfcGFnZQo+Pj4gWyAgIDQ5LjEyNzU3Nl0gbXRkX25hbmRiaXRl cnJzOiBSZWFkIHJlcG9ydGVkIDIgY29ycmVjdGVkIGJpdCBlcnJvcnMKPj4+IFsgICA0OS4xMzA2 MDhdIG10ZF9uYW5kYml0ZXJyczogdmVyaWZ5X3BhZ2UKPj4+IFsgICA0OS4xMzY4MDhdIG10ZF9u YW5kYml0ZXJyczogU3VjY2Vzc2Z1bGx5IGNvcnJlY3RlZCA1IGJpdCBlcnJvcnMgcGVyIHN1YnBh Z2UKPj4+IFsgICA0OS4xNDA3NjRdIG10ZF9uYW5kYml0ZXJyczogSW5zZXJ0ZWQgYml0ZXJyb3Ig QCAxLzIKPj4+IFsgICA0OS4xNDc4MDddIG10ZF9uYW5kYml0ZXJyczogcmV3cml0ZSBwYWdlCj4+ PiBbICAgNDkuMTUzNjA3XSBtdGRfbmFuZGJpdGVycnM6IHJlYWRfcGFnZQo+Pj4gWyAgIDQ5LjE1 NzI2OF0gbXRkX25hbmRiaXRlcnJzOiBSZWFkIHJlcG9ydGVkIDIgY29ycmVjdGVkIGJpdCBlcnJv cnMKPj4+IFsgICA0OS4xNjAyOTRdIG10ZF9uYW5kYml0ZXJyczogdmVyaWZ5X3BhZ2UKPj4+IFsg ICA0OS4xNjY0OTZdIG10ZF9uYW5kYml0ZXJyczogU3VjY2Vzc2Z1bGx5IGNvcnJlY3RlZCA2IGJp dCBlcnJvcnMgcGVyIHN1YnBhZ2UKPj4+IFsgICA0OS4xNzA0NTJdIG10ZF9uYW5kYml0ZXJyczog SW5zZXJ0ZWQgYml0ZXJyb3IgQCAxLzAKPj4+IFsgICA0OS4xNzc0OThdIG10ZF9uYW5kYml0ZXJy czogcmV3cml0ZSBwYWdlCj4+PiBbICAgNDkuMTgzMjUzXSBtdGRfbmFuZGJpdGVycnM6IHJlYWRf cGFnZQo+Pj4gWyAgIDQ5LjE4Njk3NF0gbXRkX25hbmRiaXRlcnJzOiBSZWFkIHJlcG9ydGVkIDIg Y29ycmVjdGVkIGJpdCBlcnJvcnMKPj4+IFsgICA0OS4xODk5ODNdIG10ZF9uYW5kYml0ZXJyczog dmVyaWZ5X3BhZ2UKPj4+IFsgICA0OS4xOTYxOTRdIG10ZF9uYW5kYml0ZXJyczogU3VjY2Vzc2Z1 bGx5IGNvcnJlY3RlZCA3IGJpdCBlcnJvcnMgcGVyIHN1YnBhZ2UKPj4+IFsgICA0OS4yMDAxNDBd IG10ZF9uYW5kYml0ZXJyczogSW5zZXJ0ZWQgYml0ZXJyb3IgQCAyLzYKPj4+IFsgICA0OS4yMDcx ODJdIG10ZF9uYW5kYml0ZXJyczogcmV3cml0ZSBwYWdlCj4+PiBbICAgNDkuMjEyODk1XSBtdGRf bmFuZGJpdGVycnM6IHJlYWRfcGFnZQo+Pj4gWyAgIDQ5LjIxNjY3MV0gbXRkX25hbmRiaXRlcnJz OiBSZWFkIHJlcG9ydGVkIDMgY29ycmVjdGVkIGJpdCBlcnJvcnMKPj4+IFsgICA0OS4yMTk2NzBd IG10ZF9uYW5kYml0ZXJyczogdmVyaWZ5X3BhZ2UKPj4+IFsgICA0OS4yMjU4NzJdIG10ZF9uYW5k Yml0ZXJyczogU3VjY2Vzc2Z1bGx5IGNvcnJlY3RlZCA4IGJpdCBlcnJvcnMgcGVyIHN1YnBhZ2UK Pj4+IFsgICA0OS4yMjk4MjddIG10ZF9uYW5kYml0ZXJyczogSW5zZXJ0ZWQgYml0ZXJyb3IgQCAy LzUKPj4+IFsgICA0OS4yMzY4NzFdIG10ZF9uYW5kYml0ZXJyczogcmV3cml0ZSBwYWdlCj4+PiBb ICAgNDkuMjQyNjI5XSBtdGRfbmFuZGJpdGVycnM6IHJlYWRfcGFnZQo+Pj4gWyAgIDQ5LjI0NjM0 OF0gbXRkX25hbmRiaXRlcnJzOiBlcnJvcjogcmVhZCBmYWlsZWQgYXQgMHgwCj4+PiBbICAgNDku MjQ5MzU2XSBtdGRfbmFuZGJpdGVycnM6IEFmdGVyIDkgYml0ZXJyb3JzIHBlciBzdWJwYWdlLCBy ZWFkIHJlcG9ydGVkCj4+PiBlcnJvciAtNzQKPj4+IFsgICA0OS4yNTc5NThdIG10ZF9uYW5kYml0 ZXJyczogZmluaXNoZWQgc3VjY2Vzc2Z1bGx5Lgo+Pj4gWyAgIDQ5LjI2MjAyOV0gPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KPj4+ICMKPj4gCj4+IFRo aXMgaXMgbm90IHRoZSBpbnRlbmRlZCBiZWhhdmlvci4gVGhlIHJlcG9ydGluZyBpcyB3cm9uZyBh bmQgc2hvdWxkCj4+IHJlcG9ydCBhbiBpbmNyZWFzaW5nIG51bWJlciBvZiBiaXRmbGlwcyBpbnN0 ZWFkIG9mIDEsIDEsIDEsIDIsIDIsIDIsIDIsCj4+IDMuCj4+IAo+PiBXaXRoIHRoaXMgYmVoYXZp b3IsIHdlYXIgbGV2ZWxsaW5nIHdpbGwgbm90IHdvcmsgY29ycmVjdGx5Lgo+PiAKPj4gVGhpcyBp cyBub3QgcmVsYXRlZCB0byBHYWJvcidzIGNoYW5nZXMsIGJ1dCBJIGJlbGlldmUgdGhpcyBzaG91 bGQgYmUKPj4gdXBkYXRlZCBvdGhlcndpc2UgaXQgZG9lcyBub3QgbWFrZSBtdWNoIHNlbnNlIHRv IGluY3JlYXNlIHRoZSBzdHJlbmd0aC4KPgo+IEl0IHN0aWxsIG1ha2VzIHNvbWUgc2Vuc2UuIEZv ciBleGFtcGxlLCB0aGUgYm9vdGxvYWRlciBvbiBteSBib2FyZCB1c2VzIDggYml0cwo+IHN0cmVu Z3RoIHdoZW4gaXQgaGFuZGxlcyB0aGUgTkFORCBmbGFzaC4gV2l0aG91dCBzdXBwb3J0aW5nIHRo YXQsIHRoZSBrZXJuZWwKPiBjYW4ndCByZWFkIHRoZSBkYXRhIHdyaXR0ZW4gYnkgdGhlIGJvb3Rs b2FkZXIgYW5kIHZpY2UgdmVyc2EuCj4KPj4gR2Fib3IsIGNhbiB5b3UgbG9vayBpbnRvIGl0PyBC b3RoIHBhdGNoZXMgbG9vayBmaW5lIG90aGVyd2lzZSwgdGhhbmtzIGEKPj4gbG90IQo+Cj4gSSBo YXZlIGNoZWNrZWQgaXQuIEFjY29yZGluZyB0byB0aGUgY29kZSwgdGhlIGRyaXZlciByZWFkcyB0 aGUgcmVwb3J0ZWQgdmFsdWVzCj4gZnJvbSBhIGhhcmR3YXJlIHJlZ2lzdGVyLgo+Cj4gSGVyZSBp cyB0aGUgcmVzdWx0IG9mIGFub3RoZXIgdGVzdCBidXQgaSBoYXZlIGFkZGVkIHNvbWUgZGVidWcg Y29kZSB0byB0aGUKPiBkcml2ZXIgc28gdGhlIG91dHB1dCBjb250YWlucyB0aGUgaGFyZHdhcmUg cmVnaXN0ZXIgdmFsdWVzOgo+Cj4gICAjIGluc21vZCBtdGRfbmFuZGJpdGVycnMgZGV2PTAKPiAg IFsgICA2NC43OTEzOTVdIAo+ICAgWyAgIDY0Ljc5MTQyM10gPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KPiAgIFsgICA2NC43OTE5NTBdIG10ZF9uYW5k Yml0ZXJyczogTVREIGRldmljZTogMAo+ICAgWyAgIDY0Ljc5NzU5Ml0gbXRkX25hbmRiaXRlcnJz OiBNVEQgZGV2aWNlIHNpemUgMjY4NDM1NDU2LCBlcmFzZWJsb2NrPTEzMTA3MiwgcGFnZT0yMDQ4 LCBvb2I9MTI4Cj4gICBbICAgNjQuODAxNzc5XSBtdGRfbmFuZGJpdGVycnM6IERldmljZSB1c2Vz IDEgc3VicGFnZXMgb2YgMjA0OCBieXRlcwo+ICAgWyAgIDY0LjgxMDMxM10gbXRkX25hbmRiaXRl cnJzOiBVc2luZyBwYWdlPTAsIG9mZnNldD0wLCBlcmFzZWJsb2NrPTAKPiAgIFsgICA2NC44MjA4 MzJdIG10ZF9uYW5kYml0ZXJyczogaW5jcmVtZW50YWwgYml0ZXJyb3JzIHRlc3QKPiAgIFsgICA2 NC44MjI0NTJdIG10ZF9uYW5kYml0ZXJyczogd3JpdGVfcGFnZQo+ICAgWyAgIDY0LjgyODUxMV0g bXRkX25hbmRiaXRlcnJzOiByZXdyaXRlIHBhZ2UKPiAgIFsgICA2NC44MzIyNzBdIG10ZF9uYW5k Yml0ZXJyczogcmVhZF9wYWdlCj4gICBbICAgNjQuODM2MTg0XSBxY29tX3NuYW5kIDc5YjAwMDAu c3BpOiBjd1swXSBmbGFzaDowMDAwMzAyMCBidWZmZXI6MDBmZjAyMDAgZXJhc2VkX2N3OjAwMDAw MDAyCj4gICBbICAgNjQuODM5MDkxXSBxY29tX3NuYW5kIDc5YjAwMDAuc3BpOiBjd1sxXSBmbGFz aDowMDAwMjAyMCBidWZmZXI6MDBmZjAyMDAgZXJhc2VkX2N3OjAwMDAwMDAyCj4gICBbICAgNjQu ODQ3MzY0XSBxY29tX3NuYW5kIDc5YjAwMDAuc3BpOiBjd1syXSBmbGFzaDowMDAwMTAyMCBidWZm ZXI6MDBmZjAyMDAgZXJhc2VkX2N3OjAwMDAwMDAyCj4gICBbICAgNjQuODU1Njk0XSBxY29tX3Nu YW5kIDc5YjAwMDAuc3BpOiBjd1szXSBmbGFzaDowMDAwMDAyMCBidWZmZXI6MDBmZjAyMDAgZXJh c2VkX2N3OjAwMDAwMDAyCj4gICBbICAgNjQuODY0MDIwXSBxY29tX3NuYW5kIDc5YjAwMDAuc3Bp OiBjb3JyZWN0ZWQ6MCBmYWlsZWQ6MCBiaXRmbGlwczowCj4gICBbICAgNjQuODcyMzQ5XSBtdGRf bmFuZGJpdGVycnM6IHZlcmlmeV9wYWdlCj4gICBbICAgNjQuODc4NTk4XSBtdGRfbmFuZGJpdGVy cnM6IFN1Y2Nlc3NmdWxseSBjb3JyZWN0ZWQgMCBiaXQgZXJyb3JzIHBlciBzdWJwYWdlCj4gICBb ICAgNjQuODgyNzYwXSBtdGRfbmFuZGJpdGVycnM6IEluc2VydGVkIGJpdGVycm9yIEAgMC81Cj4g ICBbICAgNjQuODg5NzkzXSBtdGRfbmFuZGJpdGVycnM6IHJld3JpdGUgcGFnZQo+ICAgWyAgIDY0 Ljg5NTU0MV0gbXRkX25hbmRiaXRlcnJzOiByZWFkX3BhZ2UKPiAgIFsgICA2NC44OTkyMjhdIHFj b21fc25hbmQgNzliMDAwMC5zcGk6IGN3WzBdIGZsYXNoOjAwMDAzMDIwIGJ1ZmZlcjowMGZmMDIw MSBlcmFzZWRfY3c6MDAwMDAwMDIKPiAgIFsgICA2NC45MDIyODJdIHFjb21fc25hbmQgNzliMDAw MC5zcGk6IGN3WzFdIGZsYXNoOjAwMDAyMDIwIGJ1ZmZlcjowMGZmMDIwMCBlcmFzZWRfY3c6MDAw MDAwMDIKPiAgIFsgICA2NC45MTA1NDldIHFjb21fc25hbmQgNzliMDAwMC5zcGk6IGN3WzJdIGZs YXNoOjAwMDAxMDIwIGJ1ZmZlcjowMGZmMDIwMCBlcmFzZWRfY3c6MDAwMDAwMDIKPiAgIFsgICA2 NC45MTg4NjBdIHFjb21fc25hbmQgNzliMDAwMC5zcGk6IGN3WzNdIGZsYXNoOjAwMDAwMDIwIGJ1 ZmZlcjowMGZmMDIwMCBlcmFzZWRfY3c6MDAwMDAwMDIKPiAgIFsgICA2NC45MjcyMDZdIHFjb21f c25hbmQgNzliMDAwMC5zcGk6IGNvcnJlY3RlZDoxIGZhaWxlZDowIGJpdGZsaXBzOjEKPiAgIFsg ICA2NC45MzU1NTJdIG10ZF9uYW5kYml0ZXJyczogUmVhZCByZXBvcnRlZCAxIGNvcnJlY3RlZCBi aXQgZXJyb3JzCj4gICBbICAgNjQuOTQxNzg5XSBtdGRfbmFuZGJpdGVycnM6IHZlcmlmeV9wYWdl Cj4gICBbICAgNjQuOTQ4MDQzXSBtdGRfbmFuZGJpdGVycnM6IFN1Y2Nlc3NmdWxseSBjb3JyZWN0 ZWQgMSBiaXQgZXJyb3JzIHBlciBzdWJwYWdlCj4gICBbICAgNjQuOTUyMDQyXSBtdGRfbmFuZGJp dGVycnM6IEluc2VydGVkIGJpdGVycm9yIEAgMC8yCj4gICBbICAgNjQuOTU5MDQ4XSBtdGRfbmFu ZGJpdGVycnM6IHJld3JpdGUgcGFnZQo+ICAgWyAgIDY0Ljk2NDgxNV0gbXRkX25hbmRiaXRlcnJz OiByZWFkX3BhZ2UKPiAgIFsgICA2NC45Njg0OTBdIHFjb21fc25hbmQgNzliMDAwMC5zcGk6IGN3 WzBdIGZsYXNoOjAwMDAzMDIwIGJ1ZmZlcjowMGZmMDIwMSBlcmFzZWRfY3c6MDAwMDAwMDIKPiAg IFsgICA2NC45NzE1ODZdIHFjb21fc25hbmQgNzliMDAwMC5zcGk6IGN3WzFdIGZsYXNoOjAwMDAy MDIwIGJ1ZmZlcjowMGZmMDIwMCBlcmFzZWRfY3c6MDAwMDAwMDIKPiAgIFsgICA2NC45Nzk4MTRd IHFjb21fc25hbmQgNzliMDAwMC5zcGk6IGN3WzJdIGZsYXNoOjAwMDAxMDIwIGJ1ZmZlcjowMGZm MDIwMCBlcmFzZWRfY3c6MDAwMDAwMDIKPiAgIFsgICA2NC45ODgxMzFdIHFjb21fc25hbmQgNzli MDAwMC5zcGk6IGN3WzNdIGZsYXNoOjAwMDAwMDIwIGJ1ZmZlcjowMGZmMDIwMCBlcmFzZWRfY3c6 MDAwMDAwMDIKPiAgIFsgICA2NC45OTY0ODFdIHFjb21fc25hbmQgNzliMDAwMC5zcGk6IGNvcnJl Y3RlZDoxIGZhaWxlZDowIGJpdGZsaXBzOjEKPiAgIFsgICA2NS4wMDQ4MTBdIG10ZF9uYW5kYml0 ZXJyczogUmVhZCByZXBvcnRlZCAxIGNvcnJlY3RlZCBiaXQgZXJyb3JzCj4gICBbICAgNjUuMDEx MDU5XSBtdGRfbmFuZGJpdGVycnM6IHZlcmlmeV9wYWdlCj4gICBbICAgNjUuMDE3MzEzXSBtdGRf bmFuZGJpdGVycnM6IFN1Y2Nlc3NmdWxseSBjb3JyZWN0ZWQgMiBiaXQgZXJyb3JzIHBlciBzdWJw YWdlCj4gICBbICAgNjUuMDIxMzA3XSBtdGRfbmFuZGJpdGVycnM6IEluc2VydGVkIGJpdGVycm9y IEAgMC8wCj4gICBbICAgNjUuMDI4MzE5XSBtdGRfbmFuZGJpdGVycnM6IHJld3JpdGUgcGFnZQo+ ICAgWyAgIDY1LjAzNDEzMV0gbXRkX25hbmRiaXRlcnJzOiByZWFkX3BhZ2UKPiAgIFsgICA2NS4w Mzc4NjJdIHFjb21fc25hbmQgNzliMDAwMC5zcGk6IGN3WzBdIGZsYXNoOjAwMDAzMDIwIGJ1ZmZl cjowMGZmMDIwMSBlcmFzZWRfY3c6MDAwMDAwMDIKPiAgIFsgICA2NS4wNDA4NDRdIHFjb21fc25h bmQgNzliMDAwMC5zcGk6IGN3WzFdIGZsYXNoOjAwMDAyMDIwIGJ1ZmZlcjowMGZmMDIwMCBlcmFz ZWRfY3c6MDAwMDAwMDIKPiAgIFsgICA2NS4wNDkwNjldIHFjb21fc25hbmQgNzliMDAwMC5zcGk6 IGN3WzJdIGZsYXNoOjAwMDAxMDIwIGJ1ZmZlcjowMGZmMDIwMCBlcmFzZWRfY3c6MDAwMDAwMDIK PiAgIFsgICA2NS4wNTc0MThdIHFjb21fc25hbmQgNzliMDAwMC5zcGk6IGN3WzNdIGZsYXNoOjAw MDAwMDIwIGJ1ZmZlcjowMGZmMDIwMCBlcmFzZWRfY3c6MDAwMDAwMDIKPiAgIFsgICA2NS4wNjU3 NjNdIHFjb21fc25hbmQgNzliMDAwMC5zcGk6IGNvcnJlY3RlZDoxIGZhaWxlZDowIGJpdGZsaXBz OjEKPiAgIFsgICA2NS4wNzQwODJdIG10ZF9uYW5kYml0ZXJyczogUmVhZCByZXBvcnRlZCAxIGNv cnJlY3RlZCBiaXQgZXJyb3JzCj4gICBbICAgNjUuMDgwMzQxXSBtdGRfbmFuZGJpdGVycnM6IHZl cmlmeV9wYWdlCj4gICBbICAgNjUuMDg2NTg0XSBtdGRfbmFuZGJpdGVycnM6IFN1Y2Nlc3NmdWxs eSBjb3JyZWN0ZWQgMyBiaXQgZXJyb3JzIHBlciBzdWJwYWdlCj4gICBbICAgNjUuMDkwNTc0XSBt dGRfbmFuZGJpdGVycnM6IEluc2VydGVkIGJpdGVycm9yIEAgMS83Cj4gICBbICAgNjUuMDk3NTg5 XSBtdGRfbmFuZGJpdGVycnM6IHJld3JpdGUgcGFnZQo+ICAgWyAgIDY1LjEwMzM3NF0gbXRkX25h bmRiaXRlcnJzOiByZWFkX3BhZ2UKPiAgIFsgICA2NS4xMDcwMzBdIHFjb21fc25hbmQgNzliMDAw MC5zcGk6IGN3WzBdIGZsYXNoOjAwMDAzMDIwIGJ1ZmZlcjowMGZmMDIwMiBlcmFzZWRfY3c6MDAw MDAwMDIKPiAgIFsgICA2NS4xMTAxMjBdIHFjb21fc25hbmQgNzliMDAwMC5zcGk6IGN3WzFdIGZs YXNoOjAwMDAyMDIwIGJ1ZmZlcjowMGZmMDIwMCBlcmFzZWRfY3c6MDAwMDAwMDIKPiAgIFsgICA2 NS4xMTgzNDBdIHFjb21fc25hbmQgNzliMDAwMC5zcGk6IGN3WzJdIGZsYXNoOjAwMDAxMDIwIGJ1 ZmZlcjowMGZmMDIwMCBlcmFzZWRfY3c6MDAwMDAwMDIKPiAgIFsgICA2NS4xMjY2ODldIHFjb21f c25hbmQgNzliMDAwMC5zcGk6IGN3WzNdIGZsYXNoOjAwMDAwMDIwIGJ1ZmZlcjowMGZmMDIwMCBl cmFzZWRfY3c6MDAwMDAwMDIKPiAgIFsgICA2NS4xMzUwMzJdIHFjb21fc25hbmQgNzliMDAwMC5z cGk6IGNvcnJlY3RlZDoyIGZhaWxlZDowIGJpdGZsaXBzOjIKPiAgIFsgICA2NS4xNDMzNTddIG10 ZF9uYW5kYml0ZXJyczogUmVhZCByZXBvcnRlZCAyIGNvcnJlY3RlZCBiaXQgZXJyb3JzCj4gICBb ICAgNjUuMTQ5NjExXSBtdGRfbmFuZGJpdGVycnM6IHZlcmlmeV9wYWdlCj4gICBbICAgNjUuMTU1 ODU1XSBtdGRfbmFuZGJpdGVycnM6IFN1Y2Nlc3NmdWxseSBjb3JyZWN0ZWQgNCBiaXQgZXJyb3Jz IHBlciBzdWJwYWdlCj4gICBbICAgNjUuMTU5ODQ0XSBtdGRfbmFuZGJpdGVycnM6IEluc2VydGVk IGJpdGVycm9yIEAgMS81Cj4gICBbICAgNjUuMTY2ODYwXSBtdGRfbmFuZGJpdGVycnM6IHJld3Jp dGUgcGFnZQo+ICAgWyAgIDY1LjE3MjY0NV0gbXRkX25hbmRiaXRlcnJzOiByZWFkX3BhZ2UKPiAg IFsgICA2NS4xNzYzMDFdIHFjb21fc25hbmQgNzliMDAwMC5zcGk6IGN3WzBdIGZsYXNoOjAwMDAz MDIwIGJ1ZmZlcjowMGZmMDIwMiBlcmFzZWRfY3c6MDAwMDAwMDIKPiAgIFsgICA2NS4xNzkzODld IHFjb21fc25hbmQgNzliMDAwMC5zcGk6IGN3WzFdIGZsYXNoOjAwMDAyMDIwIGJ1ZmZlcjowMGZm MDIwMCBlcmFzZWRfY3c6MDAwMDAwMDIKPiAgIFsgICA2NS4xODc2MTFdIHFjb21fc25hbmQgNzli MDAwMC5zcGk6IGN3WzJdIGZsYXNoOjAwMDAxMDIwIGJ1ZmZlcjowMGZmMDIwMCBlcmFzZWRfY3c6 MDAwMDAwMDIKPiAgIFsgICA2NS4xOTU5NjFdIHFjb21fc25hbmQgNzliMDAwMC5zcGk6IGN3WzNd IGZsYXNoOjAwMDAwMDIwIGJ1ZmZlcjowMGZmMDIwMCBlcmFzZWRfY3c6MDAwMDAwMDIKPiAgIFsg ICA2NS4yMDQyODldIHFjb21fc25hbmQgNzliMDAwMC5zcGk6IGNvcnJlY3RlZDoyIGZhaWxlZDow IGJpdGZsaXBzOjIKPiAgIFsgICA2NS4yMTI2MjNdIG10ZF9uYW5kYml0ZXJyczogUmVhZCByZXBv cnRlZCAyIGNvcnJlY3RlZCBiaXQgZXJyb3JzCj4gICBbICAgNjUuMjE4ODU4XSBtdGRfbmFuZGJp dGVycnM6IHZlcmlmeV9wYWdlCj4gICBbICAgNjUuMjI1MTM5XSBtdGRfbmFuZGJpdGVycnM6IFN1 Y2Nlc3NmdWxseSBjb3JyZWN0ZWQgNSBiaXQgZXJyb3JzIHBlciBzdWJwYWdlCj4gICBbICAgNjUu MjI5MTAyXSBtdGRfbmFuZGJpdGVycnM6IEluc2VydGVkIGJpdGVycm9yIEAgMS8yCj4gICBbICAg NjUuMjM2MTQ3XSBtdGRfbmFuZGJpdGVycnM6IHJld3JpdGUgcGFnZQo+ICAgWyAgIDY1LjI0MTg5 OV0gbXRkX25hbmRiaXRlcnJzOiByZWFkX3BhZ2UKPiAgIFsgICA2NS4yNDU1NzJdIHFjb21fc25h bmQgNzliMDAwMC5zcGk6IGN3WzBdIGZsYXNoOjAwMDAzMDIwIGJ1ZmZlcjowMGZmMDIwMiBlcmFz ZWRfY3c6MDAwMDAwMDIKPiAgIFsgICA2NS4yNDg2MzVdIHFjb21fc25hbmQgNzliMDAwMC5zcGk6 IGN3WzFdIGZsYXNoOjAwMDAyMDIwIGJ1ZmZlcjowMGZmMDIwMCBlcmFzZWRfY3c6MDAwMDAwMDIK PiAgIFsgICA2NS4yNTY5MDJdIHFjb21fc25hbmQgNzliMDAwMC5zcGk6IGN3WzJdIGZsYXNoOjAw MDAxMDIwIGJ1ZmZlcjowMGZmMDIwMCBlcmFzZWRfY3c6MDAwMDAwMDIKPiAgIFsgICA2NS4yNjUy MzRdIHFjb21fc25hbmQgNzliMDAwMC5zcGk6IGN3WzNdIGZsYXNoOjAwMDAwMDIwIGJ1ZmZlcjow MGZmMDIwMCBlcmFzZWRfY3c6MDAwMDAwMDIKPiAgIFsgICA2NS4yNzM1NjFdIHFjb21fc25hbmQg NzliMDAwMC5zcGk6IGNvcnJlY3RlZDoyIGZhaWxlZDowIGJpdGZsaXBzOjIKPiAgIFsgICA2NS4y ODE4OTVdIG10ZF9uYW5kYml0ZXJyczogUmVhZCByZXBvcnRlZCAyIGNvcnJlY3RlZCBiaXQgZXJy b3JzCj4gICBbICAgNjUuMjg4MTI5XSBtdGRfbmFuZGJpdGVycnM6IHZlcmlmeV9wYWdlCj4gICBb ICAgNjUuMjk0NDA4XSBtdGRfbmFuZGJpdGVycnM6IFN1Y2Nlc3NmdWxseSBjb3JyZWN0ZWQgNiBi aXQgZXJyb3JzIHBlciBzdWJwYWdlCj4gICBbICAgNjUuMjk4MzczXSBtdGRfbmFuZGJpdGVycnM6 IEluc2VydGVkIGJpdGVycm9yIEAgMS8wCj4gICBbICAgNjUuMzA1NDEzXSBtdGRfbmFuZGJpdGVy cnM6IHJld3JpdGUgcGFnZQo+ICAgWyAgIDY1LjMxMTE3MF0gbXRkX25hbmRiaXRlcnJzOiByZWFk X3BhZ2UKPiAgIFsgICA2NS4zMTQ4NDNdIHFjb21fc25hbmQgNzliMDAwMC5zcGk6IGN3WzBdIGZs YXNoOjAwMDAzMDIwIGJ1ZmZlcjowMGZmMDIwMiBlcmFzZWRfY3c6MDAwMDAwMDIKPiAgIFsgICA2 NS4zMTc5MDZdIHFjb21fc25hbmQgNzliMDAwMC5zcGk6IGN3WzFdIGZsYXNoOjAwMDAyMDIwIGJ1 ZmZlcjowMGZmMDIwMCBlcmFzZWRfY3c6MDAwMDAwMDIKPiAgIFsgICA2NS4zMjYxNzBdIHFjb21f c25hbmQgNzliMDAwMC5zcGk6IGN3WzJdIGZsYXNoOjAwMDAxMDIwIGJ1ZmZlcjowMGZmMDIwMCBl cmFzZWRfY3c6MDAwMDAwMDIKPiAgIFsgICA2NS4zMzQ1MDFdIHFjb21fc25hbmQgNzliMDAwMC5z cGk6IGN3WzNdIGZsYXNoOjAwMDAwMDIwIGJ1ZmZlcjowMGZmMDIwMCBlcmFzZWRfY3c6MDAwMDAw MDIKPiAgIFsgICA2NS4zNDI4MzNdIHFjb21fc25hbmQgNzliMDAwMC5zcGk6IGNvcnJlY3RlZDoy IGZhaWxlZDowIGJpdGZsaXBzOjIKPiAgIFsgICA2NS4zNTExNjRdIG10ZF9uYW5kYml0ZXJyczog UmVhZCByZXBvcnRlZCAyIGNvcnJlY3RlZCBiaXQgZXJyb3JzCj4gICBbICAgNjUuMzU3Mzk5XSBt dGRfbmFuZGJpdGVycnM6IHZlcmlmeV9wYWdlCj4gICBbICAgNjUuMzYzNjgwXSBtdGRfbmFuZGJp dGVycnM6IFN1Y2Nlc3NmdWxseSBjb3JyZWN0ZWQgNyBiaXQgZXJyb3JzIHBlciBzdWJwYWdlCj4g ICBbICAgNjUuMzY3NjQzXSBtdGRfbmFuZGJpdGVycnM6IEluc2VydGVkIGJpdGVycm9yIEAgMi82 Cj4gICBbICAgNjUuMzc0Njg0XSBtdGRfbmFuZGJpdGVycnM6IHJld3JpdGUgcGFnZQo+ICAgWyAg IDY1LjM4MDQ0NV0gbXRkX25hbmRiaXRlcnJzOiByZWFkX3BhZ2UKPiAgIFsgICA2NS4zODQxMTJd IHFjb21fc25hbmQgNzliMDAwMC5zcGk6IGN3WzBdIGZsYXNoOjAwMDAzMDIwIGJ1ZmZlcjowMGZm MDIwMyBlcmFzZWRfY3c6MDAwMDAwMDIKPiAgIFsgICA2NS4zODcxNzddIHFjb21fc25hbmQgNzli MDAwMC5zcGk6IGN3WzFdIGZsYXNoOjAwMDAyMDIwIGJ1ZmZlcjowMGZmMDIwMCBlcmFzZWRfY3c6 MDAwMDAwMDIKPiAgIFsgICA2NS4zOTU0NDVdIHFjb21fc25hbmQgNzliMDAwMC5zcGk6IGN3WzJd IGZsYXNoOjAwMDAxMDIwIGJ1ZmZlcjowMGZmMDIwMCBlcmFzZWRfY3c6MDAwMDAwMDIKPiAgIFsg ICA2NS40MDM3NjldIHFjb21fc25hbmQgNzliMDAwMC5zcGk6IGN3WzNdIGZsYXNoOjAwMDAwMDIw IGJ1ZmZlcjowMGZmMDIwMCBlcmFzZWRfY3c6MDAwMDAwMDIKPiAgIFsgICA2NS40MTIxMDNdIHFj b21fc25hbmQgNzliMDAwMC5zcGk6IGNvcnJlY3RlZDozIGZhaWxlZDowIGJpdGZsaXBzOjMKPiAg IFsgICA2NS40MjA0MzZdIG10ZF9uYW5kYml0ZXJyczogUmVhZCByZXBvcnRlZCAzIGNvcnJlY3Rl ZCBiaXQgZXJyb3JzCj4gICBbICAgNjUuNDI2NjcxXSBtdGRfbmFuZGJpdGVycnM6IHZlcmlmeV9w YWdlCj4gICBbICAgNjUuNDMyOTUwXSBtdGRfbmFuZGJpdGVycnM6IFN1Y2Nlc3NmdWxseSBjb3Jy ZWN0ZWQgOCBiaXQgZXJyb3JzIHBlciBzdWJwYWdlCj4gICBbICAgNjUuNDM2OTE1XSBtdGRfbmFu ZGJpdGVycnM6IEluc2VydGVkIGJpdGVycm9yIEAgMi81Cj4gICBbICAgNjUuNDQzOTU4XSBtdGRf bmFuZGJpdGVycnM6IHJld3JpdGUgcGFnZQo+ICAgWyAgIDY1LjQ0OTcxOV0gbXRkX25hbmRiaXRl cnJzOiByZWFkX3BhZ2UKPiAgIFsgICA2NS40NTMzODZdIHFjb21fc25hbmQgNzliMDAwMC5zcGk6 IGN3WzBdIGZsYXNoOjAwMDAzMDMwIGJ1ZmZlcjowMGZmMDMwMSBlcmFzZWRfY3c6MDAwMDAwMDIK PiAgIFsgICA2NS40NTY0NDhdIHFjb21fc25hbmQgNzliMDAwMC5zcGk6IGN3WzFdIGZsYXNoOjAw MDAyMDIwIGJ1ZmZlcjowMGZmMDIwMCBlcmFzZWRfY3c6MDAwMDAwMDIKPiAgIFsgICA2NS40NjQ3 MTVdIHFjb21fc25hbmQgNzliMDAwMC5zcGk6IGN3WzJdIGZsYXNoOjAwMDAxMDIwIGJ1ZmZlcjow MGZmMDIwMCBlcmFzZWRfY3c6MDAwMDAwMDIKPiAgIFsgICA2NS40NzMwNDFdIHFjb21fc25hbmQg NzliMDAwMC5zcGk6IGN3WzNdIGZsYXNoOjAwMDAwMDIwIGJ1ZmZlcjowMGZmMDIwMCBlcmFzZWRf Y3c6MDAwMDAwMDIKPiAgIFsgICA2NS40ODEzNzRdIHFjb21fc25hbmQgNzliMDAwMC5zcGk6IGNv cnJlY3RlZDowIGZhaWxlZDoxIGJpdGZsaXBzOjMKPiAgIFsgICA2NS40ODk3MDZdIG10ZF9uYW5k Yml0ZXJyczogZXJyb3I6IHJlYWQgZmFpbGVkIGF0IDB4MAo+ICAgWyAgIDY1LjQ5NTk0MV0gbXRk X25hbmRiaXRlcnJzOiBBZnRlciA5IGJpdGVycm9ycyBwZXIgc3VicGFnZSwgcmVhZCByZXBvcnRl ZCBlcnJvciAtNzQKPiAgIFsgICA2NS41MDQ2MDldIG10ZF9uYW5kYml0ZXJyczogZmluaXNoZWQg c3VjY2Vzc2Z1bGx5Lgo+ICAgWyAgIDY1LjUwODcwMF0gPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KPgo+Cj4gQmFzaWNhbGx5LCB0aGUgZHJpdmVyIHJl YWRzIHRoZSBwYWdlIGFzIDQgY29kZXdvcmRzIGFsb25nIHdpdGggcmVhZGluZyB0aGUKPiByZWdp c3RlciB2YWx1ZXMgYWZ0ZXIgZWFjaC4gVGhlIHJlcG9ydGVkIHZhbHVlcyBhcmUgY29taW5nIGZy b20gdGhlIGxvdyAKPiA1IGJpdHMgb2YgdGhlICdidWZmZXInIHZhbHVlcyBwcmludGVkIGFib3Zl LiBUaGUgbGF5b3V0IG9mIHRoZSByZWdpc3RlciBpcwo+IGJhcmVseSBkb2N1bWVudGVkIGluIHRo ZSBkcml2ZXIsIHNvIHRoZSBleGFjdCBtZWFuaW5nIG9mIHRoZSBiaXRzIGlzIHVua25vd24uCj4K PiBEZXNwaXRlIHRoYXQsIEkgaGFkIGFuIGlkZWEsIHNvIEkgaGF2ZSBjaGFuZ2VkIHRoZSBjb2Rl IGluIHRoZSBuYW5kYml0ZXJycwo+IG1vZHVsZSB0byBpbnNlcnQgb25seSBzaW5nbGUgYml0IGVy cm9yIGludG8gYSBnaXZlbiBieXRlLiBCeSBkb2luZyB0aGUgdGVzdAo+IHdpdGggdGhlIG1vZGlm aWVkIG1vZHVsZSByZXN1bHRzIGluIHRoZSBmb2xsb3dpbmc6Cj4KPiAgICMgaW5zbW9kIG10ZF9u YW5kYml0ZXJycyBkZXY9MAo+ICAgWyAgIDM3LjEyNTQxNl0gCj4gICBbICAgMzcuMTI1NDQ0XSA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo+ICAgWyAg IDM3LjEyNTk3MF0gbXRkX25hbmRiaXRlcnJzOiBNVEQgZGV2aWNlOiAwCj4gICBbICAgMzcuMTMx NzY0XSBtdGRfbmFuZGJpdGVycnM6IE1URCBkZXZpY2Ugc2l6ZSAyNjg0MzU0NTYsIGVyYXNlYmxv Y2s9MTMxMDcyLCBwYWdlPTIwNDgsIG9vYj0xMjgKPiAgIFsgICAzNy4xMzU2OTVdIG10ZF9uYW5k Yml0ZXJyczogRGV2aWNlIHVzZXMgMSBzdWJwYWdlcyBvZiAyMDQ4IGJ5dGVzCj4gICBbICAgMzcu MTQ0MzE0XSBtdGRfbmFuZGJpdGVycnM6IFVzaW5nIHBhZ2U9MCwgb2Zmc2V0PTAsIGVyYXNlYmxv Y2s9MAo+ICAgWyAgIDM3LjE1NTA0N10gbXRkX25hbmRiaXRlcnJzOiBpbmNyZW1lbnRhbCBiaXRl cnJvcnMgdGVzdAo+ICAgWyAgIDM3LjE1NjQ4MV0gbXRkX25hbmRiaXRlcnJzOiB3cml0ZV9wYWdl Cj4gICBbICAgMzcuMTYyNTE4XSBtdGRfbmFuZGJpdGVycnM6IHJld3JpdGUgcGFnZQo+ICAgWyAg IDM3LjE2NjI5OF0gbXRkX25hbmRiaXRlcnJzOiByZWFkX3BhZ2UKPiAgIFsgICAzNy4xNzAxOTNd IHFjb21fc25hbmQgNzliMDAwMC5zcGk6IGN3WzBdIGZsYXNoOjAwMDAzMDIwIGJ1ZmZlcjowMGZm MDIwMCBlcmFzZWRfY3c6MDAwMDAwMDIKPiAgIFsgICAzNy4xNzMxMTFdIHFjb21fc25hbmQgNzli MDAwMC5zcGk6IGN3WzFdIGZsYXNoOjAwMDAyMDIwIGJ1ZmZlcjowMGZmMDIwMCBlcmFzZWRfY3c6 MDAwMDAwMDIKPiAgIFsgICAzNy4xODEzODNdIHFjb21fc25hbmQgNzliMDAwMC5zcGk6IGN3WzJd IGZsYXNoOjAwMDAxMDIwIGJ1ZmZlcjowMGZmMDIwMCBlcmFzZWRfY3c6MDAwMDAwMDIKPiAgIFsg ICAzNy4xODk3MDhdIHFjb21fc25hbmQgNzliMDAwMC5zcGk6IGN3WzNdIGZsYXNoOjAwMDAwMDIw IGJ1ZmZlcjowMGZmMDIwMCBlcmFzZWRfY3c6MDAwMDAwMDIKPiAgIFsgICAzNy4xOTgwMjBdIHFj b21fc25hbmQgNzliMDAwMC5zcGk6IGNvcnJlY3RlZDowIGZhaWxlZDowIGJpdGZsaXBzOjAKPiAg IFsgICAzNy4yMDYzNjddIG10ZF9uYW5kYml0ZXJyczogdmVyaWZ5X3BhZ2UKPiAgIFsgICAzNy4y MTI2MzFdIG10ZF9uYW5kYml0ZXJyczogU3VjY2Vzc2Z1bGx5IGNvcnJlY3RlZCAwIGJpdCBlcnJv cnMgcGVyIHN1YnBhZ2UKPiAgIFsgICAzNy4yMTY3NjhdIG10ZF9uYW5kYml0ZXJyczogSW5zZXJ0 ZWQgYml0ZXJyb3IgQCAxLzcKPiAgIFsgICAzNy4yMjM4MDldIG10ZF9uYW5kYml0ZXJyczogcmV3 cml0ZSBwYWdlCj4gICBbICAgMzcuMjI5NTY5XSBtdGRfbmFuZGJpdGVycnM6IHJlYWRfcGFnZQo+ ICAgWyAgIDM3LjIzMzI0NF0gcWNvbV9zbmFuZCA3OWIwMDAwLnNwaTogY3dbMF0gZmxhc2g6MDAw MDMwMjAgYnVmZmVyOjAwZmYwMjAxIGVyYXNlZF9jdzowMDAwMDAwMgo+ICAgWyAgIDM3LjIzNjMw MV0gcWNvbV9zbmFuZCA3OWIwMDAwLnNwaTogY3dbMV0gZmxhc2g6MDAwMDIwMjAgYnVmZmVyOjAw ZmYwMjAwIGVyYXNlZF9jdzowMDAwMDAwMgo+ICAgWyAgIDM3LjI0NDU3MV0gcWNvbV9zbmFuZCA3 OWIwMDAwLnNwaTogY3dbMl0gZmxhc2g6MDAwMDEwMjAgYnVmZmVyOjAwZmYwMjAwIGVyYXNlZF9j dzowMDAwMDAwMgo+ICAgWyAgIDM3LjI1Mjg5Nl0gcWNvbV9zbmFuZCA3OWIwMDAwLnNwaTogY3db M10gZmxhc2g6MDAwMDAwMjAgYnVmZmVyOjAwZmYwMjAwIGVyYXNlZF9jdzowMDAwMDAwMgo+ICAg WyAgIDM3LjI2MTIyN10gcWNvbV9zbmFuZCA3OWIwMDAwLnNwaTogY29ycmVjdGVkOjEgZmFpbGVk OjAgYml0ZmxpcHM6MQo+ICAgWyAgIDM3LjI2OTU2MF0gbXRkX25hbmRiaXRlcnJzOiBSZWFkIHJl cG9ydGVkIDEgY29ycmVjdGVkIGJpdCBlcnJvcnMKPiAgIFsgICAzNy4yNzU3OTVdIG10ZF9uYW5k Yml0ZXJyczogdmVyaWZ5X3BhZ2UKPiAgIFsgICAzNy4yODIwNzVdIG10ZF9uYW5kYml0ZXJyczog U3VjY2Vzc2Z1bGx5IGNvcnJlY3RlZCAxIGJpdCBlcnJvcnMgcGVyIHN1YnBhZ2UKPiAgIFsgICAz Ny4yODYwMzldIG10ZF9uYW5kYml0ZXJyczogSW5zZXJ0ZWQgYml0ZXJyb3IgQCAzLzcKPiAgIFsg ICAzNy4yOTMwODBdIG10ZF9uYW5kYml0ZXJyczogcmV3cml0ZSBwYWdlCj4gICBbICAgMzcuMjk4 ODc3XSBtdGRfbmFuZGJpdGVycnM6IHJlYWRfcGFnZQo+ICAgWyAgIDM3LjMwMjUzMV0gcWNvbV9z bmFuZCA3OWIwMDAwLnNwaTogY3dbMF0gZmxhc2g6MDAwMDMwMjAgYnVmZmVyOjAwZmYwMjAyIGVy YXNlZF9jdzowMDAwMDAwMgo+ICAgWyAgIDM3LjMwNTU3Ml0gcWNvbV9zbmFuZCA3OWIwMDAwLnNw aTogY3dbMV0gZmxhc2g6MDAwMDIwMjAgYnVmZmVyOjAwZmYwMjAwIGVyYXNlZF9jdzowMDAwMDAw Mgo+ICAgWyAgIDM3LjMxMzgzOV0gcWNvbV9zbmFuZCA3OWIwMDAwLnNwaTogY3dbMl0gZmxhc2g6 MDAwMDEwMjAgYnVmZmVyOjAwZmYwMjAwIGVyYXNlZF9jdzowMDAwMDAwMgo+ICAgWyAgIDM3LjMy MjE2OV0gcWNvbV9zbmFuZCA3OWIwMDAwLnNwaTogY3dbM10gZmxhc2g6MDAwMDAwMjAgYnVmZmVy OjAwZmYwMjAwIGVyYXNlZF9jdzowMDAwMDAwMgo+ICAgWyAgIDM3LjMzMDQ5OF0gcWNvbV9zbmFu ZCA3OWIwMDAwLnNwaTogY29ycmVjdGVkOjIgZmFpbGVkOjAgYml0ZmxpcHM6Mgo+ICAgWyAgIDM3 LjMzODgxOF0gbXRkX25hbmRiaXRlcnJzOiBSZWFkIHJlcG9ydGVkIDIgY29ycmVjdGVkIGJpdCBl cnJvcnMKPiAgIFsgICAzNy4zNDUwNzhdIG10ZF9uYW5kYml0ZXJyczogdmVyaWZ5X3BhZ2UKPiAg IFsgICAzNy4zNTEzNTJdIG10ZF9uYW5kYml0ZXJyczogU3VjY2Vzc2Z1bGx5IGNvcnJlY3RlZCAy IGJpdCBlcnJvcnMgcGVyIHN1YnBhZ2UKPiAgIFsgICAzNy4zNTUzMTBdIG10ZF9uYW5kYml0ZXJy czogSW5zZXJ0ZWQgYml0ZXJyb3IgQCA1LzcKPiAgIFsgICAzNy4zNjIzNTJdIG10ZF9uYW5kYml0 ZXJyczogcmV3cml0ZSBwYWdlCj4gICBbICAgMzcuMzY4MDk0XSBtdGRfbmFuZGJpdGVycnM6IHJl YWRfcGFnZQo+ICAgWyAgIDM3LjM3MTgxNF0gcWNvbV9zbmFuZCA3OWIwMDAwLnNwaTogY3dbMF0g Zmxhc2g6MDAwMDMwMjAgYnVmZmVyOjAwZmYwMjAzIGVyYXNlZF9jdzowMDAwMDAwMgo+ICAgWyAg IDM3LjM3NDg0M10gcWNvbV9zbmFuZCA3OWIwMDAwLnNwaTogY3dbMV0gZmxhc2g6MDAwMDIwMjAg YnVmZmVyOjAwZmYwMjAwIGVyYXNlZF9jdzowMDAwMDAwMgo+ICAgWyAgIDM3LjM4MzExMV0gcWNv bV9zbmFuZCA3OWIwMDAwLnNwaTogY3dbMl0gZmxhc2g6MDAwMDEwMjAgYnVmZmVyOjAwZmYwMjAw IGVyYXNlZF9jdzowMDAwMDAwMgo+ICAgWyAgIDM3LjM5MTQzN10gcWNvbV9zbmFuZCA3OWIwMDAw LnNwaTogY3dbM10gZmxhc2g6MDAwMDAwMjAgYnVmZmVyOjAwZmYwMjAwIGVyYXNlZF9jdzowMDAw MDAwMgo+ICAgWyAgIDM3LjM5OTc2OV0gcWNvbV9zbmFuZCA3OWIwMDAwLnNwaTogY29ycmVjdGVk OjMgZmFpbGVkOjAgYml0ZmxpcHM6Mwo+ICAgWyAgIDM3LjQwODA4OV0gbXRkX25hbmRiaXRlcnJz OiBSZWFkIHJlcG9ydGVkIDMgY29ycmVjdGVkIGJpdCBlcnJvcnMKPiAgIFsgICAzNy40MTQzNTFd IG10ZF9uYW5kYml0ZXJyczogdmVyaWZ5X3BhZ2UKPiAgIFsgICAzNy40MjA2MTZdIG10ZF9uYW5k Yml0ZXJyczogU3VjY2Vzc2Z1bGx5IGNvcnJlY3RlZCAzIGJpdCBlcnJvcnMgcGVyIHN1YnBhZ2UK PiAgIFsgICAzNy40MjQ1ODFdIG10ZF9uYW5kYml0ZXJyczogSW5zZXJ0ZWQgYml0ZXJyb3IgQCA3 LzcKPiAgIFsgICAzNy40MzE2MjJdIG10ZF9uYW5kYml0ZXJyczogcmV3cml0ZSBwYWdlCj4gICBb ICAgMzcuNDM3NDE5XSBtdGRfbmFuZGJpdGVycnM6IHJlYWRfcGFnZQo+ICAgWyAgIDM3LjQ0MTA3 Ml0gcWNvbV9zbmFuZCA3OWIwMDAwLnNwaTogY3dbMF0gZmxhc2g6MDAwMDMwMjAgYnVmZmVyOjAw ZmYwMjA0IGVyYXNlZF9jdzowMDAwMDAwMgo+ICAgWyAgIDM3LjQ0NDExNF0gcWNvbV9zbmFuZCA3 OWIwMDAwLnNwaTogY3dbMV0gZmxhc2g6MDAwMDIwMjAgYnVmZmVyOjAwZmYwMjAwIGVyYXNlZF9j dzowMDAwMDAwMgo+ICAgWyAgIDM3LjQ1MjM4MF0gcWNvbV9zbmFuZCA3OWIwMDAwLnNwaTogY3db Ml0gZmxhc2g6MDAwMDEwMjAgYnVmZmVyOjAwZmYwMjAwIGVyYXNlZF9jdzowMDAwMDAwMgo+ICAg WyAgIDM3LjQ2MDcwOF0gcWNvbV9zbmFuZCA3OWIwMDAwLnNwaTogY3dbM10gZmxhc2g6MDAwMDAw MjAgYnVmZmVyOjAwZmYwMjAwIGVyYXNlZF9jdzowMDAwMDAwMgo+ICAgWyAgIDM3LjQ2OTA0N10g cWNvbV9zbmFuZCA3OWIwMDAwLnNwaTogY29ycmVjdGVkOjQgZmFpbGVkOjAgYml0ZmxpcHM6NAo+ ICAgWyAgIDM3LjQ3NzM2MF0gbXRkX25hbmRiaXRlcnJzOiBSZWFkIHJlcG9ydGVkIDQgY29ycmVj dGVkIGJpdCBlcnJvcnMKPiAgIFsgICAzNy40ODM2MjFdIG10ZF9uYW5kYml0ZXJyczogdmVyaWZ5 X3BhZ2UKPiAgIFsgICAzNy40ODk4ODhdIG10ZF9uYW5kYml0ZXJyczogU3VjY2Vzc2Z1bGx5IGNv cnJlY3RlZCA0IGJpdCBlcnJvcnMgcGVyIHN1YnBhZ2UKPiAgIFsgICAzNy40OTM4NTJdIG10ZF9u YW5kYml0ZXJyczogSW5zZXJ0ZWQgYml0ZXJyb3IgQCA4LzcKPiAgIFsgICAzNy41MDA4OTNdIG10 ZF9uYW5kYml0ZXJyczogcmV3cml0ZSBwYWdlCj4gICBbICAgMzcuNTA2NjM2XSBtdGRfbmFuZGJp dGVycnM6IHJlYWRfcGFnZQo+ICAgWyAgIDM3LjUxMDM0Ml0gcWNvbV9zbmFuZCA3OWIwMDAwLnNw aTogY3dbMF0gZmxhc2g6MDAwMDMwMjAgYnVmZmVyOjAwZmYwMjA1IGVyYXNlZF9jdzowMDAwMDAw Mgo+ICAgWyAgIDM3LjUxMzM4NV0gcWNvbV9zbmFuZCA3OWIwMDAwLnNwaTogY3dbMV0gZmxhc2g6 MDAwMDIwMjAgYnVmZmVyOjAwZmYwMjAwIGVyYXNlZF9jdzowMDAwMDAwMgo+ICAgWyAgIDM3LjUy MTY1Ml0gcWNvbV9zbmFuZCA3OWIwMDAwLnNwaTogY3dbMl0gZmxhc2g6MDAwMDEwMjAgYnVmZmVy OjAwZmYwMjAwIGVyYXNlZF9jdzowMDAwMDAwMgo+ICAgWyAgIDM3LjUyOTk3OF0gcWNvbV9zbmFu ZCA3OWIwMDAwLnNwaTogY3dbM10gZmxhc2g6MDAwMDAwMjAgYnVmZmVyOjAwZmYwMjAwIGVyYXNl ZF9jdzowMDAwMDAwMgo+ICAgWyAgIDM3LjUzODI5N10gcWNvbV9zbmFuZCA3OWIwMDAwLnNwaTog Y29ycmVjdGVkOjUgZmFpbGVkOjAgYml0ZmxpcHM6NQo+ICAgWyAgIDM3LjU0NjY0M10gbXRkX25h bmRiaXRlcnJzOiBSZWFkIHJlcG9ydGVkIDUgY29ycmVjdGVkIGJpdCBlcnJvcnMKPiAgIFsgICAz Ny41NTI4OTZdIG10ZF9uYW5kYml0ZXJyczogdmVyaWZ5X3BhZ2UKPiAgIFsgICAzNy41NTkxNjFd IG10ZF9uYW5kYml0ZXJyczogU3VjY2Vzc2Z1bGx5IGNvcnJlY3RlZCA1IGJpdCBlcnJvcnMgcGVy IHN1YnBhZ2UKPiAgIFsgICAzNy41NjMxMjNdIG10ZF9uYW5kYml0ZXJyczogSW5zZXJ0ZWQgYml0 ZXJyb3IgQCAxMC83Cj4gICBbICAgMzcuNTcwMTY4XSBtdGRfbmFuZGJpdGVycnM6IHJld3JpdGUg cGFnZQo+ICAgWyAgIDM3LjU3NTk1Nl0gbXRkX25hbmRiaXRlcnJzOiByZWFkX3BhZ2UKPiAgIFsg ICAzNy41Nzk3MDJdIHFjb21fc25hbmQgNzliMDAwMC5zcGk6IGN3WzBdIGZsYXNoOjAwMDAzMDIw IGJ1ZmZlcjowMGZmMDIwNiBlcmFzZWRfY3c6MDAwMDAwMDIKPiAgIFsgICAzNy41ODI3NDNdIHFj b21fc25hbmQgNzliMDAwMC5zcGk6IGN3WzFdIGZsYXNoOjAwMDAyMDIwIGJ1ZmZlcjowMGZmMDIw MCBlcmFzZWRfY3c6MDAwMDAwMDIKPiAgIFsgICAzNy41OTEwMTBdIHFjb21fc25hbmQgNzliMDAw MC5zcGk6IGN3WzJdIGZsYXNoOjAwMDAxMDIwIGJ1ZmZlcjowMGZmMDIwMCBlcmFzZWRfY3c6MDAw MDAwMDIKPiAgIFsgICAzNy41OTkzNTRdIHFjb21fc25hbmQgNzliMDAwMC5zcGk6IGN3WzNdIGZs YXNoOjAwMDAwMDIwIGJ1ZmZlcjowMGZmMDIwMCBlcmFzZWRfY3c6MDAwMDAwMDIKPiAgIFsgICAz Ny42MDc2NTVdIHFjb21fc25hbmQgNzliMDAwMC5zcGk6IGNvcnJlY3RlZDo2IGZhaWxlZDowIGJp dGZsaXBzOjYKPiAgIFsgICAzNy42MTYwMDRdIG10ZF9uYW5kYml0ZXJyczogUmVhZCByZXBvcnRl ZCA2IGNvcnJlY3RlZCBiaXQgZXJyb3JzCj4gICBbICAgMzcuNjIyMjQ5XSBtdGRfbmFuZGJpdGVy cnM6IHZlcmlmeV9wYWdlCj4gICBbICAgMzcuNjI4NTA0XSBtdGRfbmFuZGJpdGVycnM6IFN1Y2Nl c3NmdWxseSBjb3JyZWN0ZWQgNiBiaXQgZXJyb3JzIHBlciBzdWJwYWdlCj4gICBbICAgMzcuNjMy NDk3XSBtdGRfbmFuZGJpdGVycnM6IEluc2VydGVkIGJpdGVycm9yIEAgMTIvNwo+ICAgWyAgIDM3 LjYzOTUyNF0gbXRkX25hbmRiaXRlcnJzOiByZXdyaXRlIHBhZ2UKPiAgIFsgICAzNy42NDUzNTNd IG10ZF9uYW5kYml0ZXJyczogcmVhZF9wYWdlCj4gICBbICAgMzcuNjQ5MDQ3XSBxY29tX3NuYW5k IDc5YjAwMDAuc3BpOiBjd1swXSBmbGFzaDowMDAwMzAyMCBidWZmZXI6MDBmZjAyMDcgZXJhc2Vk X2N3OjAwMDAwMDAyCj4gICBbICAgMzcuNjUyMTAwXSBxY29tX3NuYW5kIDc5YjAwMDAuc3BpOiBj d1sxXSBmbGFzaDowMDAwMjAyMCBidWZmZXI6MDBmZjAyMDAgZXJhc2VkX2N3OjAwMDAwMDAyCj4g ICBbICAgMzcuNjYwMzY3XSBxY29tX3NuYW5kIDc5YjAwMDAuc3BpOiBjd1syXSBmbGFzaDowMDAw MTAyMCBidWZmZXI6MDBmZjAyMDAgZXJhc2VkX2N3OjAwMDAwMDAyCj4gICBbICAgMzcuNjY4Njc5 XSBxY29tX3NuYW5kIDc5YjAwMDAuc3BpOiBjd1szXSBmbGFzaDowMDAwMDAyMCBidWZmZXI6MDBm ZjAyMDAgZXJhc2VkX2N3OjAwMDAwMDAyCj4gICBbICAgMzcuNjc3MDI5XSBxY29tX3NuYW5kIDc5 YjAwMDAuc3BpOiBjb3JyZWN0ZWQ6NyBmYWlsZWQ6MCBiaXRmbGlwczo3Cj4gICBbICAgMzcuNjg1 MzU4XSBtdGRfbmFuZGJpdGVycnM6IFJlYWQgcmVwb3J0ZWQgNyBjb3JyZWN0ZWQgYml0IGVycm9y cwo+ICAgWyAgIDM3LjY5MTYwN10gbXRkX25hbmRiaXRlcnJzOiB2ZXJpZnlfcGFnZQo+ICAgWyAg IDM3LjY5Nzg2MV0gbXRkX25hbmRiaXRlcnJzOiBTdWNjZXNzZnVsbHkgY29ycmVjdGVkIDcgYml0 IGVycm9ycyBwZXIgc3VicGFnZQo+ICAgWyAgIDM3LjcwMTg1Ml0gbXRkX25hbmRiaXRlcnJzOiBJ bnNlcnRlZCBiaXRlcnJvciBAIDE0LzcKPiAgIFsgICAzNy43MDg4NjddIG10ZF9uYW5kYml0ZXJy czogcmV3cml0ZSBwYWdlCj4gICBbICAgMzcuNzE0NjgzXSBtdGRfbmFuZGJpdGVycnM6IHJlYWRf cGFnZQo+ICAgWyAgIDM3LjcxODM5N10gcWNvbV9zbmFuZCA3OWIwMDAwLnNwaTogY3dbMF0gZmxh c2g6MDAwMDMwMjAgYnVmZmVyOjAwZmYwMjA4IGVyYXNlZF9jdzowMDAwMDAwMgo+ICAgWyAgIDM3 LjcyMTQ3OF0gcWNvbV9zbmFuZCA3OWIwMDAwLnNwaTogY3dbMV0gZmxhc2g6MDAwMDIwMjAgYnVm ZmVyOjAwZmYwMjAwIGVyYXNlZF9jdzowMDAwMDAwMgo+ICAgWyAgIDM3LjcyOTcxOF0gcWNvbV9z bmFuZCA3OWIwMDAwLnNwaTogY3dbMl0gZmxhc2g6MDAwMDEwMjAgYnVmZmVyOjAwZmYwMjAwIGVy YXNlZF9jdzowMDAwMDAwMgo+ICAgWyAgIDM3LjczODAzN10gcWNvbV9zbmFuZCA3OWIwMDAwLnNw aTogY3dbM10gZmxhc2g6MDAwMDAwMjAgYnVmZmVyOjAwZmYwMjAwIGVyYXNlZF9jdzowMDAwMDAw Mgo+ICAgWyAgIDM3Ljc0NjQzM10gcWNvbV9zbmFuZCA3OWIwMDAwLnNwaTogY29ycmVjdGVkOjgg ZmFpbGVkOjAgYml0ZmxpcHM6OAo+ICAgWyAgIDM3Ljc1NDcxOV0gbXRkX25hbmRiaXRlcnJzOiBS ZWFkIHJlcG9ydGVkIDggY29ycmVjdGVkIGJpdCBlcnJvcnMKPiAgIFsgICAzNy43NjA5NzJdIG10 ZF9uYW5kYml0ZXJyczogdmVyaWZ5X3BhZ2UKPiAgIFsgICAzNy43NjcyMThdIG10ZF9uYW5kYml0 ZXJyczogU3VjY2Vzc2Z1bGx5IGNvcnJlY3RlZCA4IGJpdCBlcnJvcnMgcGVyIHN1YnBhZ2UKPiAg IFsgICAzNy43NzEyMTRdIG10ZF9uYW5kYml0ZXJyczogSW5zZXJ0ZWQgYml0ZXJyb3IgQCAxNy83 Cj4gICBbICAgMzcuNzc4MjI1XSBtdGRfbmFuZGJpdGVycnM6IHJld3JpdGUgcGFnZQo+ICAgWyAg IDM3Ljc4NDA1NF0gbXRkX25hbmRiaXRlcnJzOiByZWFkX3BhZ2UKPiAgIFsgICAzNy43ODc3NTRd IHFjb21fc25hbmQgNzliMDAwMC5zcGk6IGN3WzBdIGZsYXNoOjAwMDAzMDMwIGJ1ZmZlcjowMGZm MDMwMSBlcmFzZWRfY3c6MDAwMDAwMDIKPiAgIFsgICAzNy43OTA4MzZdIHFjb21fc25hbmQgNzli MDAwMC5zcGk6IGN3WzFdIGZsYXNoOjAwMDAyMDIwIGJ1ZmZlcjowMGZmMDIwMCBlcmFzZWRfY3c6 MDAwMDAwMDIKPiAgIFsgICAzNy43OTkwNzZdIHFjb21fc25hbmQgNzliMDAwMC5zcGk6IGN3WzJd IGZsYXNoOjAwMDAxMDIwIGJ1ZmZlcjowMGZmMDIwMCBlcmFzZWRfY3c6MDAwMDAwMDIKPiAgIFsg ICAzNy44MDczOTVdIHFjb21fc25hbmQgNzliMDAwMC5zcGk6IGN3WzNdIGZsYXNoOjAwMDAwMDIw IGJ1ZmZlcjowMGZmMDIwMCBlcmFzZWRfY3c6MDAwMDAwMDIKPiAgIFsgICAzNy44MTU3NDNdIHFj b21fc25hbmQgNzliMDAwMC5zcGk6IGNvcnJlY3RlZDowIGZhaWxlZDoxIGJpdGZsaXBzOjgKPiAg IFsgICAzNy44MjQwNzNdIG10ZF9uYW5kYml0ZXJyczogZXJyb3I6IHJlYWQgZmFpbGVkIGF0IDB4 MAo+ICAgWyAgIDM3LjgzMDMyMV0gbXRkX25hbmRiaXRlcnJzOiBBZnRlciA5IGJpdGVycm9ycyBw ZXIgc3VicGFnZSwgcmVhZCByZXBvcnRlZCBlcnJvciAtNzQKPiAgIFsgICAzNy44Mzg5OTNdIG10 ZF9uYW5kYml0ZXJyczogZmluaXNoZWQgc3VjY2Vzc2Z1bGx5Lgo+ICAgWyAgIDM3Ljg0MzA2OF0g PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KPgo+IElu dGVyZXN0aW5nbHkgZW5vdWdoLCBpdCByZXBvcnRzIHRoZSBjb3JyZWN0IG51bWJlciBvZiBiaXQg ZXJyb3JzIG5vdy4KPiBGb3IgbWUgaXQgc2VlbXMsIHRoYXQgdGhlIGhhcmR3YXJlIHJlcG9ydHMg dGhlIG51bWJlciBvZiB0aGUgY29ycmVjdGVkCj4gKmJ5dGVzKiBpbnN0ZWFkIG9mIHRoZSBjb3Jy ZWN0ZWQgKmJpdHMqLgoKSSBkb3VidCB0aGF0LCBub2JvZHkgY291bnRzIGJ5dGVzIG9mIGVycm9y cy4KCllvdSByZXN1bHRzIGFyZSBzdXJwcmlzaW5nLiBJIGluaXRpYWxseSB0aG91Z2ggaW4gZmF2 b3VyIG9mIGEgc29mdHdhcmUKYnVnLCBidXQgdGhlbiBpdCBsb29rcyBldmVuIHdlaXJkZXIgdGhh biB0aGF0LiBBbGFtPwoKVGhhbmtzLApNaXF1w6hsCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTGludXggTVREIGRpc2N1c3Npb24gbWFpbGlu ZyBsaXN0Cmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgt bXRkLwo=