From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail.manjaro.org (mail.manjaro.org [116.203.91.91]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C5B68481A3; Wed, 24 Jul 2024 06:07:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=116.203.91.91 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721801283; cv=none; b=lLoRD9OBlba++aiEBVB4voYU2g4lxfxuAhDgzjuJL6ApY0vqYRADO+IiomEKi9S0VWq7r2Ji0eTqO1hOD4Z42OEeIdlijsCghdlx65pC9+xEpgtnBbI8EQGYrYxI46r6H/+/+lHUQHO9kjNFUaeA84YSEG90UkJeeJIECA8HBEU= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721801283; c=relaxed/simple; bh=jInSfdolrSb6rZZTNpR8KYUxyhXwMQW98qG0aYlhT7k=; h=MIME-Version:Date:From:To:Cc:Subject:In-Reply-To:References: Message-ID:Content-Type; b=plRYqaDL29hjmmyURAyrXthW95p96OfW+Q1STcrA+ln/LI7N1wVjG+cfcqpU/v3H0reF55kNzrrTrUXo3Bs2LJOdJKn7v3JhlMTvrwn7TBQKX9BWO2S0LmN4JUb386E5nlKP8PDn6cuKQ5tF+qDvsXQTBm+65DVxISlZLwFEvBQ= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=manjaro.org; spf=pass smtp.mailfrom=manjaro.org; dkim=pass (2048-bit key) header.d=manjaro.org header.i=@manjaro.org header.b=Jv+PLl69; arc=none smtp.client-ip=116.203.91.91 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=manjaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=manjaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=manjaro.org header.i=@manjaro.org header.b="Jv+PLl69" Precedence: bulk X-Mailing-List: linux-crypto@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=manjaro.org; s=2021; t=1721801277; 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=XyjInt3tUidOyksxXpHHpDTL3zQ9fivow6y7hPi+Pno=; b=Jv+PLl69onj6PsmLDv9OGGgcsJIk6CcGUDtFNWwsNxrClYC0BX/MWOSwjKLN03FhPovzcy yVoxU/Vn7jROb7vesIgxuN+llQ6MX0Jwf3dXSWsn7vtKWjynEqa32D05UMD7IzDv1IpAEz QSg93FKdkm7Xo66nuxpChrdZXBYH/d3j8c4WU+/Xeib38kannBWEbVTKWLxHOZkiS8etT6 Mm37bq289hYMKCgObh8hMcy0lrdVMW7IANkJBOoVyKZF/Mad9vKtCrOFBLDTk6T+C0e/TJ hiHlDHfS2xSH2+DzHl25RP0UQpGkrRwbnoyNbIKuH8NV/dNnlGSSu6OCHdZjeQ== Date: Wed, 24 Jul 2024 08:07:51 +0200 From: Dragan Simic To: Diederik de Haas Cc: Chen-Yu Tsai , Daniel Golle , linux-rockchip@lists.infradead.org, linux-arm-kernel@lists.infradead.org, Rob Herring , Conor Dooley , linux-kernel@vger.kernel.org, Herbert Xu , Martin Kaiser , Sascha Hauer , Sebastian Reichel , Ard Biesheuvel , =?UTF-8?Q?Uwe_Kleine-K=C3=B6nig?= , devicetree@vger.kernel.org, linux-crypto@vger.kernel.org, Philipp Zabel , Olivia Mackall , Krzysztof Kozlowski , Aurelien Jarno , Heiko Stuebner Subject: Re: [PATCH v7 0/3] hwrng: add hwrng support for Rockchip RK3568 In-Reply-To: <4406786.zLnsZ2vfAB@bagend> References: <3190961.CRkYR5qTbq@bagend> <4406786.zLnsZ2vfAB@bagend> Message-ID: X-Sender: dsimic@manjaro.org Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Authentication-Results: ORIGINATING; auth=pass smtp.auth=dsimic@manjaro.org smtp.mailfrom=dsimic@manjaro.org Hello Diederik and Chen-Yu, On 2024-07-22 21:03, Diederik de Haas wrote: > On Monday, 22 July 2024 19:57:05 CEST Chen-Yu Tsai wrote: >> On Wed, Jul 17, 2024 at 12:54 AM Diederik de Haas >> > wrote: >> > On Tuesday, 16 July 2024 17:18:48 CEST Chen-Yu Tsai wrote: >> > > On Jul 16, 2024 at 10:13 PM Diederik de Haas > wrote: >> > > > On Tuesday, 16 July 2024 15:59:40 CEST Diederik de Haas wrote: >> > > > > For shits and giggles, I tried it on my PineTab2 too (also rk3566): >> > > > > >> > > > > =========================================================== >> > > > > root@pinetab2:~# uname -a >> > > > > Linux pinetab2 6.10+unreleased-arm64 #1 SMP Debian 6.10-1~cknow >> > > > > (2024-04-24) aarch64 GNU/Linux >> > > > > >> > > > > root@pinetab2:~# dd if=/dev/hwrng bs=100000 count=1 > /dev/null >> > > > > 1+0 records in >> > > > > 1+0 records out >> > > > > 100000 bytes (100 kB, 98 KiB) copied, 5,69533 s, 17,6 kB/s >> > > > > >> > > > > root@plebian-pinetab2:~# cat /dev/hwrng | rngtest -c 1000 >> > > > > rngtest 5 >> > > > > ... >> > > > > rngtest: starting FIPS tests... >> > > > > rngtest: bits received from input: 20000032 >> > > > > rngtest: FIPS 140-2 successes: 730 >> > > > > rngtest: FIPS 140-2 failures: 270 >> > > > > =========================================================== >> > > > > >> > > > > That's looking quite a lot better ... and I have no idea why. >> > > > > >> > > > > The Q64-A is used as headless server and the PineTab2 is not, >> > > > > but I connected to both over SSH and they were freshly booted >> > > > > into, thus I haven't actually/normally used the PT2 since boot. >> > > > >> > > > I did freshly install rng-tools5 package before running the test, so >> > > > I rebooted again to make sure that wasn't a factor: >> > > > >> > > > =========================================================== >> > > > root@pinetab2:~# cat /dev/hwrng | rngtest -c 1000 >> > > > rngtest 5 >> > > > ... >> > > > rngtest: starting FIPS tests... >> > > > rngtest: bits received from input: 20000032 >> > > > rngtest: FIPS 140-2 successes: 704 >> > > > rngtest: FIPS 140-2 failures: 296 >> > > > =========================================================== >> > > > >> > > > So that 704/296 vs 730/270 in the previous run on the PT2. >> > > > >> > > On my Rock 3A: >> > > >> > > wens@rock-3a:~$ sudo cat /dev/hwrng | rngtest -c 1000 >> > > rngtest 5 >> > > ... >> > > rngtest: starting FIPS tests... >> > > rngtest: bits received from input: 20000032 >> > > rngtest: FIPS 140-2 successes: 992 >> > > rngtest: FIPS 140-2 failures: 8 >> > > >> > > wens@rock-3a:~$ uname -a >> > > Linux rock-3a 6.10.0-rc7-next-20240712-12899-g7df602fe7c8b #9 SMP Mon >> > > Jul 15 00:39:32 CST 2024 aarch64 GNU/Linux >> > >> > I wondered if ``dd if=/dev/hwrng bs=100000 count=1 > /dev/null`` before >> > the actual test run made a difference. >> > Tried it on my Quartz64 Model A: no >> > >> > Then I tried it on my Quartz64 Model B: >> > >> > root@quartz64b:~# cat /dev/hwrng | rngtest -c 1000 >> > rngtest 5 >> > ... >> > rngtest: starting FIPS tests... >> > rngtest: bits received from input: 20000032 >> > rngtest: FIPS 140-2 successes: 120 >> > rngtest: FIPS 140-2 failures: 880 >> > >> > root@quartz64b:~# dd if=/dev/hwrng bs=100000 count=1 > /dev/null >> > 1+0 records in >> > 1+0 records out >> > 100000 bytes (100 kB, 98 KiB) copied, 5.71466 s, 17.5 kB/s >> > >> > root@quartz64b:~# cat /dev/hwrng | rngtest -c 1000 >> > rngtest 5 >> > ... >> > rngtest: starting FIPS tests... >> > rngtest: bits received from input: 20000032 >> > rngtest: FIPS 140-2 successes: 104 >> > rngtest: FIPS 140-2 failures: 896 >> > >> > root@quartz64b:~# uname -a >> > Linux quartz64b 6.10+unreleased-arm64 #1 SMP Debian 6.10-1~cknow >> > (2024-04-24) aarch64 GNU/Linux> >> > :-O >> >> I pulled out my Quartz64 model B, and the results seem better than >> yours. >> >> root@quartz64:~# sudo dd if=/dev/hwrng bs=256 | rngtest -c 1000 >> rngtest 5 >> ... >> rngtest: starting FIPS tests... >> rngtest: bits received from input: 20000032 >> rngtest: FIPS 140-2 successes: 859 >> rngtest: FIPS 140-2 failures: 141 >> root@quartz64:~# sudo dd if=/dev/hwrng bs=256 | rngtest -c 1000 >> rngtest 5 >> ... >> rngtest: starting FIPS tests... >> rngtest: bits received from input: 20000032 >> rngtest: FIPS 140-2 successes: 843 >> rngtest: FIPS 140-2 failures: 157 > > I noticed you used ``dd`` instead of ``cat``, so I tried again ... > > Quartz64-A: > root@quartz64a:~# dd if=/dev/hwrng bs=256 | rngtest -c 1000 > rngtest 5 > ... > rngtest: starting FIPS tests... > > rngtest: bits received from input: 20000032 > > rngtest: FIPS 140-2 successes: 411 > > rngtest: FIPS 140-2 failures: 589 > > root@quartz64a:~# dd if=/dev/hwrng bs=256 | rngtest -c 1000 > ... > rngtest: starting FIPS tests... > rngtest: bits received from input: 20000032 > rngtest: FIPS 140-2 successes: 391 > rngtest: FIPS 140-2 failures: 609 > > root@quartz64a:~# dd if=/dev/hwrng bs=100000 count=1 > /dev/null > 1+0 records in > 1+0 records out > 100000 bytes (100 kB, 98 KiB) copied, 5.66202 s, 17.7 kB/s > > root@quartz64a:~# dd if=/dev/hwrng bs=256 | rngtest -c 1000 > ... > rngtest: FIPS 140-2 successes: 386 > > rngtest: FIPS 140-2 failures: 614 > > root@quartz64a:~# dd if=/dev/hwrng bs=256 | rngtest -c 1000 > ... > rngtest: FIPS 140-2 successes: 356 > rngtest: FIPS 140-2 failures: 644 > > Quartz64-B: > root@quartz64b:~# dd if=/dev/hwrng bs=256 | rngtest -c 1000 > ... > rngtest: FIPS 140-2 successes: 118 > rngtest: FIPS 140-2 failures: 882 > > root@quartz64b:~# dd if=/dev/hwrng bs=256 | rngtest -c 1000 > ... > rngtest: FIPS 140-2 successes: 133 > rngtest: FIPS 140-2 failures: 867 > > root@quartz64b:~# dd if=/dev/hwrng bs=100000 count=1 > /dev/null > > root@quartz64b:~# dd if=/dev/hwrng bs=256 | rngtest -c 1000 > ... > rngtest: FIPS 140-2 successes: 97 > rngtest: FIPS 140-2 failures: 903 > > root@quartz64b:~# dd if=/dev/hwrng bs=256 | rngtest -c 1000 > ... > rngtest: FIPS 140-2 successes: 130 > rngtest: FIPS 140-2 failures: 870 > > And lastly on PineTab2: > root@pinetab2:~# dd if=/dev/hwrng bs=256 | rngtest -c 1000 > ... > rngtest: FIPS 140-2 successes: 705 > rngtest: FIPS 140-2 failures: 295 > > root@pinetab2:~# dd if=/dev/hwrng bs=256 | rngtest -c 1000 > ... > rngtest: FIPS 140-2 successes: 678 > rngtest: FIPS 140-2 failures: 322 > > root@pinetab2:~# dd if=/dev/hwrng bs=100000 count=1 > /dev/null > > root@pinetab2:~# dd if=/dev/hwrng bs=256 | rngtest -c 1000 > ... > rngtest: FIPS 140-2 successes: 681 > rngtest: FIPS 140-2 failures: 319 > > root@pinetab2:~# dd if=/dev/hwrng bs=256 | rngtest -c 1000 > ... > rngtest: FIPS 140-2 successes: 669 > rngtest: FIPS 140-2 failures: 331 > > > So my Q64-B tests are consistently MUCH worse then your Q64-B tests ... > This seems BAD to me, now that we even have completely different > results per > device of the EXACT same model?!? Hardware revision may be different (I > have a > v1.4), but it seems rather pointless to go into that direction. > > It then also seems rather pointless to try it with different parameters > if the > results on the same SBC model can vary this much. Thanks a lot for the testing. Though, such wildly different test results can, regrettably, lead to only one conclusion: the HWRNG found in RK3566 is unusable. :/ 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 D1969C3DA61 for ; Wed, 24 Jul 2024 06:08:34 +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-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:Message-ID:References:In-Reply-To:Subject:Cc:To:From :Date:MIME-Version:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=/j9VyQpD3gYlzQ3ejpKz+lV0sNIZZJAOt5FlMyS2Npk=; b=asM7aM9jJS9CI91afUgsR2wMez xa/5xmn0tDvxKr0wi7Dmzz9u5bRX2YA9f+eF3cP+irwkYtvbNFpczNi88f50qUgxEzZZ/jPkrT+QE OT5IURHCukfsZLRbT7QH/IicNEKv78wH5+uxPIBQ6ZJLw7rC5R2j0Gn8E2l7OG03B4YsLwqKnQGUT w0nYx8ArFyBfMuvo4qH/0soNVuhGrxQdIgGvCzFJns6oxuKe5eOBM8eLCubnXvOpCjCneiJHngOy6 9Q4X5smuXlTZasA2FizLltquk2Wf129S9mTDg+xZyTHOBNZeUpoxQSVyaRTpJzRQ/QZiwhEk8g2Az rmB1N5nQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sWVAo-0000000ETdO-2BQU; Wed, 24 Jul 2024 06:08:26 +0000 Received: from mail.manjaro.org ([2a01:4f8:c0c:51f3::1]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sWVAO-0000000ETX7-1729; Wed, 24 Jul 2024 06:08:02 +0000 MIME-Version: 1.0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=manjaro.org; s=2021; t=1721801277; 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=XyjInt3tUidOyksxXpHHpDTL3zQ9fivow6y7hPi+Pno=; b=Jv+PLl69onj6PsmLDv9OGGgcsJIk6CcGUDtFNWwsNxrClYC0BX/MWOSwjKLN03FhPovzcy yVoxU/Vn7jROb7vesIgxuN+llQ6MX0Jwf3dXSWsn7vtKWjynEqa32D05UMD7IzDv1IpAEz QSg93FKdkm7Xo66nuxpChrdZXBYH/d3j8c4WU+/Xeib38kannBWEbVTKWLxHOZkiS8etT6 Mm37bq289hYMKCgObh8hMcy0lrdVMW7IANkJBOoVyKZF/Mad9vKtCrOFBLDTk6T+C0e/TJ hiHlDHfS2xSH2+DzHl25RP0UQpGkrRwbnoyNbIKuH8NV/dNnlGSSu6OCHdZjeQ== Date: Wed, 24 Jul 2024 08:07:51 +0200 From: Dragan Simic To: Diederik de Haas Cc: Chen-Yu Tsai , Daniel Golle , linux-rockchip@lists.infradead.org, linux-arm-kernel@lists.infradead.org, Rob Herring , Conor Dooley , linux-kernel@vger.kernel.org, Herbert Xu , Martin Kaiser , Sascha Hauer , Sebastian Reichel , Ard Biesheuvel , =?UTF-8?Q?Uwe_Kleine-K=C3=B6nig?= , devicetree@vger.kernel.org, linux-crypto@vger.kernel.org, Philipp Zabel , Olivia Mackall , Krzysztof Kozlowski , Aurelien Jarno , Heiko Stuebner Subject: Re: [PATCH v7 0/3] hwrng: add hwrng support for Rockchip RK3568 In-Reply-To: <4406786.zLnsZ2vfAB@bagend> References: <3190961.CRkYR5qTbq@bagend> <4406786.zLnsZ2vfAB@bagend> Message-ID: X-Sender: dsimic@manjaro.org Authentication-Results: ORIGINATING; auth=pass smtp.auth=dsimic@manjaro.org smtp.mailfrom=dsimic@manjaro.org X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240723_230800_791468_5621F4E4 X-CRM114-Status: GOOD ( 27.88 ) X-BeenThere: linux-rockchip@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Upstream kernel work for Rockchip platforms List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org SGVsbG8gRGllZGVyaWsgYW5kIENoZW4tWXUsCgpPbiAyMDI0LTA3LTIyIDIxOjAzLCBEaWVkZXJp ayBkZSBIYWFzIHdyb3RlOgo+IE9uIE1vbmRheSwgMjIgSnVseSAyMDI0IDE5OjU3OjA1IENFU1Qg Q2hlbi1ZdSBUc2FpIHdyb3RlOgo+PiBPbiBXZWQsIEp1bCAxNywgMjAyNCBhdCAxMjo1NOKAr0FN IERpZWRlcmlrIGRlIEhhYXMgCj4+IDxkaWRpLmRlYmlhbkBja25vdy5vcmc+Cj4gd3JvdGU6Cj4+ ID4gT24gVHVlc2RheSwgMTYgSnVseSAyMDI0IDE3OjE4OjQ4IENFU1QgQ2hlbi1ZdSBUc2FpIHdy b3RlOgo+PiA+ID4gT24gSnVsIDE2LCAyMDI0IGF0IDEwOjEz4oCvUE0gRGllZGVyaWsgZGUgSGFh cyA8ZGlkaS5kZWJpYW5AY2tub3cub3JnPgo+IHdyb3RlOgo+PiA+ID4gPiBPbiBUdWVzZGF5LCAx NiBKdWx5IDIwMjQgMTU6NTk6NDAgQ0VTVCBEaWVkZXJpayBkZSBIYWFzIHdyb3RlOgo+PiA+ID4g PiA+IEZvciBzaGl0cyBhbmQgZ2lnZ2xlcywgSSB0cmllZCBpdCBvbiBteSBQaW5lVGFiMiB0b28g KGFsc28gcmszNTY2KToKPj4gPiA+ID4gPgo+PiA+ID4gPiA+ID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cj4+ID4gPiA+ID4gcm9vdEBw aW5ldGFiMjp+IyB1bmFtZSAtYQo+PiA+ID4gPiA+IExpbnV4IHBpbmV0YWIyIDYuMTArdW5yZWxl YXNlZC1hcm02NCAjMSBTTVAgRGViaWFuIDYuMTAtMX5ja25vdwo+PiA+ID4gPiA+ICgyMDI0LTA0 LTI0KSBhYXJjaDY0IEdOVS9MaW51eAo+PiA+ID4gPiA+Cj4+ID4gPiA+ID4gcm9vdEBwaW5ldGFi Mjp+IyBkZCBpZj0vZGV2L2h3cm5nIGJzPTEwMDAwMCBjb3VudD0xID4gL2Rldi9udWxsCj4+ID4g PiA+ID4gMSswIHJlY29yZHMgaW4KPj4gPiA+ID4gPiAxKzAgcmVjb3JkcyBvdXQKPj4gPiA+ID4g PiAxMDAwMDAgYnl0ZXMgKDEwMCBrQiwgOTggS2lCKSBjb3BpZWQsIDUsNjk1MzMgcywgMTcsNiBr Qi9zCj4+ID4gPiA+ID4KPj4gPiA+ID4gPiByb290QHBsZWJpYW4tcGluZXRhYjI6fiMgY2F0IC9k ZXYvaHdybmcgfCBybmd0ZXN0IC1jIDEwMDAKPj4gPiA+ID4gPiBybmd0ZXN0IDUKPj4gPiA+ID4g PiAuLi4KPj4gPiA+ID4gPiBybmd0ZXN0OiBzdGFydGluZyBGSVBTIHRlc3RzLi4uCj4+ID4gPiA+ ID4gcm5ndGVzdDogYml0cyByZWNlaXZlZCBmcm9tIGlucHV0OiAyMDAwMDAzMgo+PiA+ID4gPiA+ IHJuZ3Rlc3Q6IEZJUFMgMTQwLTIgc3VjY2Vzc2VzOiA3MzAKPj4gPiA+ID4gPiBybmd0ZXN0OiBG SVBTIDE0MC0yIGZhaWx1cmVzOiAyNzAKPj4gPiA+ID4gPiA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo+PiA+ID4gPiA+Cj4+ID4gPiA+ ID4gVGhhdCdzIGxvb2tpbmcgcXVpdGUgYSBsb3QgYmV0dGVyIC4uLiBhbmQgSSBoYXZlIG5vIGlk ZWEgd2h5Lgo+PiA+ID4gPiA+Cj4+ID4gPiA+ID4gVGhlIFE2NC1BIGlzIHVzZWQgYXMgaGVhZGxl c3Mgc2VydmVyIGFuZCB0aGUgUGluZVRhYjIgaXMgbm90LAo+PiA+ID4gPiA+IGJ1dCBJIGNvbm5l Y3RlZCB0byBib3RoIG92ZXIgU1NIIGFuZCB0aGV5IHdlcmUgZnJlc2hseSBib290ZWQKPj4gPiA+ ID4gPiBpbnRvLCB0aHVzIEkgaGF2ZW4ndCBhY3R1YWxseS9ub3JtYWxseSB1c2VkIHRoZSBQVDIg c2luY2UgYm9vdC4KPj4gPiA+ID4KPj4gPiA+ID4gSSBkaWQgZnJlc2hseSBpbnN0YWxsIHJuZy10 b29sczUgcGFja2FnZSBiZWZvcmUgcnVubmluZyB0aGUgdGVzdCwgc28KPj4gPiA+ID4gSSByZWJv b3RlZCBhZ2FpbiB0byBtYWtlIHN1cmUgdGhhdCB3YXNuJ3QgYSBmYWN0b3I6Cj4+ID4gPiA+Cj4+ ID4gPiA+ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Cj4+ID4gPiA+IHJvb3RAcGluZXRhYjI6fiMgY2F0IC9kZXYvaHdybmcgfCBybmd0 ZXN0IC1jIDEwMDAKPj4gPiA+ID4gcm5ndGVzdCA1Cj4+ID4gPiA+IC4uLgo+PiA+ID4gPiBybmd0 ZXN0OiBzdGFydGluZyBGSVBTIHRlc3RzLi4uCj4+ID4gPiA+IHJuZ3Rlc3Q6IGJpdHMgcmVjZWl2 ZWQgZnJvbSBpbnB1dDogMjAwMDAwMzIKPj4gPiA+ID4gcm5ndGVzdDogRklQUyAxNDAtMiBzdWNj ZXNzZXM6IDcwNAo+PiA+ID4gPiBybmd0ZXN0OiBGSVBTIDE0MC0yIGZhaWx1cmVzOiAyOTYKPj4g PiA+ID4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KPj4gPiA+ID4KPj4gPiA+ID4gU28gdGhhdCA3MDQvMjk2IHZzIDczMC8yNzAgaW4g dGhlIHByZXZpb3VzIHJ1biBvbiB0aGUgUFQyLgo+PiA+ID4gPgo+PiA+ID4gT24gbXkgUm9jayAz QToKPj4gPiA+Cj4+ID4gPiB3ZW5zQHJvY2stM2E6fiQgc3VkbyBjYXQgL2Rldi9od3JuZyB8IHJu Z3Rlc3QgLWMgMTAwMAo+PiA+ID4gcm5ndGVzdCA1Cj4+ID4gPiAuLi4KPj4gPiA+IHJuZ3Rlc3Q6 IHN0YXJ0aW5nIEZJUFMgdGVzdHMuLi4KPj4gPiA+IHJuZ3Rlc3Q6IGJpdHMgcmVjZWl2ZWQgZnJv bSBpbnB1dDogMjAwMDAwMzIKPj4gPiA+IHJuZ3Rlc3Q6IEZJUFMgMTQwLTIgc3VjY2Vzc2VzOiA5 OTIKPj4gPiA+IHJuZ3Rlc3Q6IEZJUFMgMTQwLTIgZmFpbHVyZXM6IDgKPj4gPiA+Cj4+ID4gPiB3 ZW5zQHJvY2stM2E6fiQgdW5hbWUgLWEKPj4gPiA+IExpbnV4IHJvY2stM2EgNi4xMC4wLXJjNy1u ZXh0LTIwMjQwNzEyLTEyODk5LWc3ZGY2MDJmZTdjOGIgIzkgU01QIE1vbgo+PiA+ID4gSnVsIDE1 IDAwOjM5OjMyIENTVCAyMDI0IGFhcmNoNjQgR05VL0xpbnV4Cj4+ID4KPj4gPiBJIHdvbmRlcmVk IGlmIGBgZGQgaWY9L2Rldi9od3JuZyBicz0xMDAwMDAgY291bnQ9MSA+IC9kZXYvbnVsbGBgIGJl Zm9yZQo+PiA+IHRoZSBhY3R1YWwgdGVzdCBydW4gbWFkZSBhIGRpZmZlcmVuY2UuCj4+ID4gVHJp ZWQgaXQgb24gbXkgUXVhcnR6NjQgTW9kZWwgQTogbm8KPj4gPgo+PiA+IFRoZW4gSSB0cmllZCBp dCBvbiBteSBRdWFydHo2NCBNb2RlbCBCOgo+PiA+Cj4+ID4gcm9vdEBxdWFydHo2NGI6fiMgY2F0 IC9kZXYvaHdybmcgfCBybmd0ZXN0IC1jIDEwMDAKPj4gPiBybmd0ZXN0IDUKPj4gPiAuLi4KPj4g PiBybmd0ZXN0OiBzdGFydGluZyBGSVBTIHRlc3RzLi4uCj4+ID4gcm5ndGVzdDogYml0cyByZWNl aXZlZCBmcm9tIGlucHV0OiAyMDAwMDAzMgo+PiA+IHJuZ3Rlc3Q6IEZJUFMgMTQwLTIgc3VjY2Vz c2VzOiAxMjAKPj4gPiBybmd0ZXN0OiBGSVBTIDE0MC0yIGZhaWx1cmVzOiA4ODAKPj4gPgo+PiA+ IHJvb3RAcXVhcnR6NjRiOn4jIGRkIGlmPS9kZXYvaHdybmcgYnM9MTAwMDAwIGNvdW50PTEgPiAv ZGV2L251bGwKPj4gPiAxKzAgcmVjb3JkcyBpbgo+PiA+IDErMCByZWNvcmRzIG91dAo+PiA+IDEw MDAwMCBieXRlcyAoMTAwIGtCLCA5OCBLaUIpIGNvcGllZCwgNS43MTQ2NiBzLCAxNy41IGtCL3MK Pj4gPgo+PiA+IHJvb3RAcXVhcnR6NjRiOn4jIGNhdCAvZGV2L2h3cm5nIHwgcm5ndGVzdCAtYyAx MDAwCj4+ID4gcm5ndGVzdCA1Cj4+ID4gLi4uCj4+ID4gcm5ndGVzdDogc3RhcnRpbmcgRklQUyB0 ZXN0cy4uLgo+PiA+IHJuZ3Rlc3Q6IGJpdHMgcmVjZWl2ZWQgZnJvbSBpbnB1dDogMjAwMDAwMzIK Pj4gPiBybmd0ZXN0OiBGSVBTIDE0MC0yIHN1Y2Nlc3NlczogMTA0Cj4+ID4gcm5ndGVzdDogRklQ UyAxNDAtMiBmYWlsdXJlczogODk2Cj4+ID4KPj4gPiByb290QHF1YXJ0ejY0Yjp+IyB1bmFtZSAt YQo+PiA+IExpbnV4IHF1YXJ0ejY0YiA2LjEwK3VucmVsZWFzZWQtYXJtNjQgIzEgU01QIERlYmlh biA2LjEwLTF+Y2tub3cKPj4gPiAoMjAyNC0wNC0yNCkgYWFyY2g2NCBHTlUvTGludXg+Cj4+ID4g Oi1PCj4+IAo+PiBJIHB1bGxlZCBvdXQgbXkgUXVhcnR6NjQgbW9kZWwgQiwgYW5kIHRoZSByZXN1 bHRzIHNlZW0gYmV0dGVyIHRoYW4gCj4+IHlvdXJzLgo+PiAKPj4gcm9vdEBxdWFydHo2NDp+IyBz dWRvIGRkIGlmPS9kZXYvaHdybmcgYnM9MjU2IHwgcm5ndGVzdCAtYyAxMDAwCj4+IHJuZ3Rlc3Qg NQo+PiAuLi4KPj4gcm5ndGVzdDogc3RhcnRpbmcgRklQUyB0ZXN0cy4uLgo+PiBybmd0ZXN0OiBi aXRzIHJlY2VpdmVkIGZyb20gaW5wdXQ6IDIwMDAwMDMyCj4+IHJuZ3Rlc3Q6IEZJUFMgMTQwLTIg c3VjY2Vzc2VzOiA4NTkKPj4gcm5ndGVzdDogRklQUyAxNDAtMiBmYWlsdXJlczogMTQxCj4+IHJv b3RAcXVhcnR6NjQ6fiMgc3VkbyBkZCBpZj0vZGV2L2h3cm5nIGJzPTI1NiB8IHJuZ3Rlc3QgLWMg MTAwMAo+PiBybmd0ZXN0IDUKPj4gLi4uCj4+IHJuZ3Rlc3Q6IHN0YXJ0aW5nIEZJUFMgdGVzdHMu Li4KPj4gcm5ndGVzdDogYml0cyByZWNlaXZlZCBmcm9tIGlucHV0OiAyMDAwMDAzMgo+PiBybmd0 ZXN0OiBGSVBTIDE0MC0yIHN1Y2Nlc3NlczogODQzCj4+IHJuZ3Rlc3Q6IEZJUFMgMTQwLTIgZmFp bHVyZXM6IDE1Nwo+IAo+IEkgbm90aWNlZCB5b3UgdXNlZCBgYGRkYGAgaW5zdGVhZCBvZiBgYGNh dGBgLCBzbyBJIHRyaWVkIGFnYWluIC4uLgo+IAo+IFF1YXJ0ejY0LUE6Cj4gcm9vdEBxdWFydHo2 NGE6fiMgZGQgaWY9L2Rldi9od3JuZyBicz0yNTYgfCBybmd0ZXN0IC1jIDEwMDAKPiBybmd0ZXN0 IDUKPiAuLi4KPiBybmd0ZXN0OiBzdGFydGluZyBGSVBTIHRlc3RzLi4uCj4gCj4gcm5ndGVzdDog Yml0cyByZWNlaXZlZCBmcm9tIGlucHV0OiAyMDAwMDAzMgo+IAo+IHJuZ3Rlc3Q6IEZJUFMgMTQw LTIgc3VjY2Vzc2VzOiA0MTEKPiAKPiBybmd0ZXN0OiBGSVBTIDE0MC0yIGZhaWx1cmVzOiA1ODkK PiAKPiByb290QHF1YXJ0ejY0YTp+IyBkZCBpZj0vZGV2L2h3cm5nIGJzPTI1NiB8IHJuZ3Rlc3Qg LWMgMTAwMAo+IC4uLgo+IHJuZ3Rlc3Q6IHN0YXJ0aW5nIEZJUFMgdGVzdHMuLi4KPiBybmd0ZXN0 OiBiaXRzIHJlY2VpdmVkIGZyb20gaW5wdXQ6IDIwMDAwMDMyCj4gcm5ndGVzdDogRklQUyAxNDAt MiBzdWNjZXNzZXM6IDM5MQo+IHJuZ3Rlc3Q6IEZJUFMgMTQwLTIgZmFpbHVyZXM6IDYwOQo+IAo+ IHJvb3RAcXVhcnR6NjRhOn4jIGRkIGlmPS9kZXYvaHdybmcgYnM9MTAwMDAwIGNvdW50PTEgPiAv ZGV2L251bGwKPiAxKzAgcmVjb3JkcyBpbgo+IDErMCByZWNvcmRzIG91dAo+IDEwMDAwMCBieXRl cyAoMTAwIGtCLCA5OCBLaUIpIGNvcGllZCwgNS42NjIwMiBzLCAxNy43IGtCL3MKPiAKPiByb290 QHF1YXJ0ejY0YTp+IyBkZCBpZj0vZGV2L2h3cm5nIGJzPTI1NiB8IHJuZ3Rlc3QgLWMgMTAwMAo+ IC4uLgo+IHJuZ3Rlc3Q6IEZJUFMgMTQwLTIgc3VjY2Vzc2VzOiAzODYKPiAKPiBybmd0ZXN0OiBG SVBTIDE0MC0yIGZhaWx1cmVzOiA2MTQKPiAKPiByb290QHF1YXJ0ejY0YTp+IyBkZCBpZj0vZGV2 L2h3cm5nIGJzPTI1NiB8IHJuZ3Rlc3QgLWMgMTAwMAo+IC4uLgo+IHJuZ3Rlc3Q6IEZJUFMgMTQw LTIgc3VjY2Vzc2VzOiAzNTYKPiBybmd0ZXN0OiBGSVBTIDE0MC0yIGZhaWx1cmVzOiA2NDQKPiAK PiBRdWFydHo2NC1COgo+IHJvb3RAcXVhcnR6NjRiOn4jIGRkIGlmPS9kZXYvaHdybmcgYnM9MjU2 IHwgcm5ndGVzdCAtYyAxMDAwCj4gLi4uCj4gcm5ndGVzdDogRklQUyAxNDAtMiBzdWNjZXNzZXM6 IDExOAo+IHJuZ3Rlc3Q6IEZJUFMgMTQwLTIgZmFpbHVyZXM6IDg4Mgo+IAo+IHJvb3RAcXVhcnR6 NjRiOn4jIGRkIGlmPS9kZXYvaHdybmcgYnM9MjU2IHwgcm5ndGVzdCAtYyAxMDAwCj4gLi4uCj4g cm5ndGVzdDogRklQUyAxNDAtMiBzdWNjZXNzZXM6IDEzMwo+IHJuZ3Rlc3Q6IEZJUFMgMTQwLTIg ZmFpbHVyZXM6IDg2Nwo+IAo+IHJvb3RAcXVhcnR6NjRiOn4jIGRkIGlmPS9kZXYvaHdybmcgYnM9 MTAwMDAwIGNvdW50PTEgPiAvZGV2L251bGwKPiAKPiByb290QHF1YXJ0ejY0Yjp+IyBkZCBpZj0v ZGV2L2h3cm5nIGJzPTI1NiB8IHJuZ3Rlc3QgLWMgMTAwMAo+IC4uLgo+IHJuZ3Rlc3Q6IEZJUFMg MTQwLTIgc3VjY2Vzc2VzOiA5Nwo+IHJuZ3Rlc3Q6IEZJUFMgMTQwLTIgZmFpbHVyZXM6IDkwMwo+ IAo+IHJvb3RAcXVhcnR6NjRiOn4jIGRkIGlmPS9kZXYvaHdybmcgYnM9MjU2IHwgcm5ndGVzdCAt YyAxMDAwCj4gLi4uCj4gcm5ndGVzdDogRklQUyAxNDAtMiBzdWNjZXNzZXM6IDEzMAo+IHJuZ3Rl c3Q6IEZJUFMgMTQwLTIgZmFpbHVyZXM6IDg3MAo+IAo+IEFuZCBsYXN0bHkgb24gUGluZVRhYjI6 Cj4gcm9vdEBwaW5ldGFiMjp+IyBkZCBpZj0vZGV2L2h3cm5nIGJzPTI1NiB8IHJuZ3Rlc3QgLWMg MTAwMAo+IC4uLgo+IHJuZ3Rlc3Q6IEZJUFMgMTQwLTIgc3VjY2Vzc2VzOiA3MDUKPiBybmd0ZXN0 OiBGSVBTIDE0MC0yIGZhaWx1cmVzOiAyOTUKPiAKPiByb290QHBpbmV0YWIyOn4jIGRkIGlmPS9k ZXYvaHdybmcgYnM9MjU2IHwgcm5ndGVzdCAtYyAxMDAwCj4gLi4uCj4gcm5ndGVzdDogRklQUyAx NDAtMiBzdWNjZXNzZXM6IDY3OAo+IHJuZ3Rlc3Q6IEZJUFMgMTQwLTIgZmFpbHVyZXM6IDMyMgo+ IAo+IHJvb3RAcGluZXRhYjI6fiMgZGQgaWY9L2Rldi9od3JuZyBicz0xMDAwMDAgY291bnQ9MSA+ IC9kZXYvbnVsbAo+IAo+IHJvb3RAcGluZXRhYjI6fiMgZGQgaWY9L2Rldi9od3JuZyBicz0yNTYg fCBybmd0ZXN0IC1jIDEwMDAKPiAuLi4KPiBybmd0ZXN0OiBGSVBTIDE0MC0yIHN1Y2Nlc3Nlczog NjgxCj4gcm5ndGVzdDogRklQUyAxNDAtMiBmYWlsdXJlczogMzE5Cj4gCj4gcm9vdEBwaW5ldGFi Mjp+IyBkZCBpZj0vZGV2L2h3cm5nIGJzPTI1NiB8IHJuZ3Rlc3QgLWMgMTAwMAo+IC4uLgo+IHJu Z3Rlc3Q6IEZJUFMgMTQwLTIgc3VjY2Vzc2VzOiA2NjkKPiBybmd0ZXN0OiBGSVBTIDE0MC0yIGZh aWx1cmVzOiAzMzEKPiAKPiAKPiBTbyBteSBRNjQtQiB0ZXN0cyBhcmUgY29uc2lzdGVudGx5IE1V Q0ggd29yc2UgdGhlbiB5b3VyIFE2NC1CIHRlc3RzIC4uLgo+IFRoaXMgc2VlbXMgQkFEIHRvIG1l LCBub3cgdGhhdCB3ZSBldmVuIGhhdmUgY29tcGxldGVseSBkaWZmZXJlbnQgCj4gcmVzdWx0cyBw ZXIKPiBkZXZpY2Ugb2YgdGhlIEVYQUNUIHNhbWUgbW9kZWw/IT8gSGFyZHdhcmUgcmV2aXNpb24g bWF5IGJlIGRpZmZlcmVudCAoSSAKPiBoYXZlIGEKPiB2MS40KSwgYnV0IGl0IHNlZW1zIHJhdGhl ciBwb2ludGxlc3MgdG8gZ28gaW50byB0aGF0IGRpcmVjdGlvbi4KPiAKPiBJdCB0aGVuIGFsc28g c2VlbXMgcmF0aGVyIHBvaW50bGVzcyB0byB0cnkgaXQgd2l0aCBkaWZmZXJlbnQgcGFyYW1ldGVy cyAKPiBpZiB0aGUKPiByZXN1bHRzIG9uIHRoZSBzYW1lIFNCQyBtb2RlbCBjYW4gdmFyeSB0aGlz IG11Y2guCgpUaGFua3MgYSBsb3QgZm9yIHRoZSB0ZXN0aW5nLiAgVGhvdWdoLCBzdWNoIHdpbGRs eSBkaWZmZXJlbnQgdGVzdCAKcmVzdWx0cwpjYW4sIHJlZ3JldHRhYmx5LCBsZWFkIHRvIG9ubHkg b25lIGNvbmNsdXNpb246ICB0aGUgSFdSTkcgZm91bmQgaW4gClJLMzU2NgppcyB1bnVzYWJsZS4g Oi8KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkxpbnV4 LXJvY2tjaGlwIG1haWxpbmcgbGlzdApMaW51eC1yb2NrY2hpcEBsaXN0cy5pbmZyYWRlYWQub3Jn Cmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtcm9ja2No aXAK