Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tfmKe-004ztq-Sx for pgsql-hackers@arkaria.postgresql.org; Wed, 05 Feb 2025 20:49:14 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1tfmKd-000ql9-RK for pgsql-hackers@arkaria.postgresql.org; Wed, 05 Feb 2025 20:49:11 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tfmKc-000ql1-Tk for pgsql-hackers@lists.postgresql.org; Wed, 05 Feb 2025 20:49:11 +0000 Received: from mgamail.intel.com ([198.175.65.17]) by magus.postgresql.org with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1tfmKW-003bMQ-2Y for pgsql-hackers@lists.postgresql.org; Wed, 05 Feb 2025 20:49:09 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1738788546; x=1770324546; h=from:to:cc:subject:date:message-id:mime-version; bh=J8DwEzHlHtkFWaqQbvREa35Ps4lbqeUtebYGzPco46M=; b=EL3NAauaBoqv5O3YYi1rcJNbD7bmGkoUx6DLoSTI5RCNL/RuNTxn4AC7 x4QlUOTxWcT7L3Gd0ZEQFKL6H4hcL9Qkq+mv2IsQ4do5LIWC+2j+2XGhk MaLEUbujyrIlQdhQ2sv9gHPEUNcN9PaQcmBRKsHO2nA7VcEXcXBcoujJQ K/0zYUTJZwpIjETGe4bl5SmqNGUImZWXbAd3m02lP83Dt1r/DBxGzy7JU O06gJdI3WKifGsdayRczqAxCs5ypOlIRFhJQKECUIrxpBmqThRyhrpY7u pnWhCz5xUXtOG7tRQGgn+cIr6k3VzK1hn1ieQCY43Uq80nG4h6D+JAd4U A==; X-CSE-ConnectionGUID: RJTTXvP4T8iavhJW5sUZQA== X-CSE-MsgGUID: mgOIqrzQQrmoXONMJDCkhw== X-IronPort-AV: E=McAfee;i="6700,10204,11336"; a="39401241" X-IronPort-AV: E=Sophos;i="6.13,262,1732608000"; d="scan'208,217,223";a="39401241" Received: from orviesa010.jf.intel.com ([10.64.159.150]) by orvoesa109.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 05 Feb 2025 12:49:02 -0800 X-CSE-ConnectionGUID: oPrHjC4dQ7G4+gUodG81mQ== X-CSE-MsgGUID: SMzwWtlDQIeVvxlEOG/xxg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.12,224,1728975600"; d="scan'208,217,223";a="110857495" Received: from orsmsx601.amr.corp.intel.com ([10.22.229.14]) by orviesa010.jf.intel.com with ESMTP/TLS/AES256-GCM-SHA384; 05 Feb 2025 12:49:01 -0800 Received: from orsmsx603.amr.corp.intel.com (10.22.229.16) by ORSMSX601.amr.corp.intel.com (10.22.229.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.44; Wed, 5 Feb 2025 12:49:01 -0800 Received: from ORSEDG602.ED.cps.intel.com (10.7.248.7) by orsmsx603.amr.corp.intel.com (10.22.229.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.44 via Frontend Transport; Wed, 5 Feb 2025 12:49:01 -0800 Received: from NAM11-CO1-obe.outbound.protection.outlook.com (104.47.56.171) by edgegateway.intel.com (134.134.137.103) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.44; Wed, 5 Feb 2025 12:49:00 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=YBCWT8PZb49RglrRUp2FOkNAxIrbwQmgDCyMDdCu2LQxXSBTZ8x6P65cRWdLBtTP7qV3x2HH+tJa7pyMBTG8O1CLT47xSBZWzhL9f2tnhXks7IUuHK91eJHx+s3XkxV6wMtzRkP1iFZ6YliVXYYhyialj2D955XiPaXiWKyO4TpOp4ye2+i+W8NBMiVPSTZE5+/A9U9qzX6xdg0YPOYSaT9RA2tZ0mEAPdTBtmvOMAKEUzG8XyWIJ11EJgSJ3k+5ei+DFNA/u6QVt04PNtyXSNAR17s8wfHO2aq8VzskP/6bYme9EGOtPX89205VF8PzhDaSE0FYQkH7GqyMI/0cZw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=sLOfSHV5yqjzsZRWmNuukHhreFxcoHHhPTPmWLw5XMM=; b=ADZiDGeyMazeRYeIqxJaZdIj0KMPKLdgLbSG42TZ07pgdFHiyuvpJxGMVS42fz29a0llS1KCsX0mMGiaWPuZ3o601/rmAlhWPgcAKyWcN8zyvjBJ1kO+bTPTLzWjFxlx6pPRyp2lLcxw2yp20cgzhl246W/81dvo+A6AlsTT2XEtFV19eTeSOGLSJ4ABKzNTw1touKDRUX8vhC4jcOcx74PDPHw97/6C9tOw+LCsa1y6z9gkr/Gs5ml+Y1uIDbYoMs9K3IMrPMeUfFeZJLYMKb6Vc7uybCY3R4g93ojIfUub6g8etOjK/A0aTYMNQ1zYpiW8yHF2CPUbj7nt9+5Irg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from PH8PR11MB8286.namprd11.prod.outlook.com (2603:10b6:510:1c6::15) by SA2PR11MB5067.namprd11.prod.outlook.com (2603:10b6:806:111::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8422.11; Wed, 5 Feb 2025 20:48:57 +0000 Received: from PH8PR11MB8286.namprd11.prod.outlook.com ([fe80::f7a1:1fa0:66e5:d03f]) by PH8PR11MB8286.namprd11.prod.outlook.com ([fe80::f7a1:1fa0:66e5:d03f%3]) with mapi id 15.20.8398.021; Wed, 5 Feb 2025 20:48:57 +0000 From: "Devulapalli, Raghuveer" To: "pgsql-hackers@lists.postgresql.org" CC: "Shankaran, Akash" , "Devulapalli, Raghuveer" Subject: Improve CRC32C performance on SSE4.2 Thread-Topic: Improve CRC32C performance on SSE4.2 Thread-Index: Adt4DVguiQIdIdAlTHKdderyKKLizw== Date: Wed, 5 Feb 2025 20:48:56 +0000 Message-ID: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PH8PR11MB8286:EE_|SA2PR11MB5067:EE_ x-ms-office365-filtering-correlation-id: 310490ef-53ba-4e6e-4045-08dd46268294 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|376014|366016|1800799024|13003099007|38070700018|8096899003; x-microsoft-antispam-message-info: =?us-ascii?Q?S7gNi5TujjeZTuBPXE28u6I0BFd866GLJKihzmVij8Zg5Ejdy2EAs4RYv4aR?= =?us-ascii?Q?Pfzv9d666S8h9WuUOUmCHGeMy/0gVPQjE9BNdScJjOTUKEpyuqroHO4A5XgT?= =?us-ascii?Q?yb8UoYyEslTNphTEoEhf54aLJQf3WzBgEmpd3qEoSsTukxn7rqqKZ7Hptj03?= =?us-ascii?Q?YmxC6yeNME8yR5jvQ8ZxRSWpafseMf6R4/2QiTlgLaPeBcA9W4KPqOnOLH0I?= =?us-ascii?Q?wXrAVbfAhdOkqXQGfSYn25rBGfQpBdprd0Zf+JPBWYTylzck1wrnIsNs3eHG?= =?us-ascii?Q?U+0BvNmE2zVt78Pqjkhb70Cf9UOXzlAVQVdfSgawAyXA0CEAuke7uRbUXpNO?= =?us-ascii?Q?5p5uSzUl+SdyUXlEL1/Li6wSsjJsISsp9y3dSZrphFo1sP7muGaAuRQ0xWav?= =?us-ascii?Q?/1yxx63I6meLCl5zUeOUY4ucRiRLEAm1mMfFgoU3vwwtMZz3zJAACWvk4WlK?= =?us-ascii?Q?umDOI3Y46oDJu7BeLkoHm+TG/k+bOeUFBphH0RJ1NoTMufeahietaF7os6mN?= =?us-ascii?Q?8G8IFh3jkHRCVxJFlEB1FmNUniBm/VvCN0CWGKUe796/d2QrPvtLMVQJFyY3?= =?us-ascii?Q?m6IhFQuFAMvaDF7lUX+mwzMnP4ecRoMby848CCJdsRG6ZH58QiVWrRmfW+MZ?= =?us-ascii?Q?qcOJI0VHBjyh+V5dtCALJrtxFTVlnAbyAsRUVSuHh1/Mb/I+tgJzlOGheuNw?= =?us-ascii?Q?Ydy/FSNY6LOQcoG4PH5r3lDQidaOAPDxUI23Fsj8xpBa1ScPdnifOv1pBkak?= =?us-ascii?Q?mMg0l91tUOhzgfdOfasKo/z4uVpU1yohyIFpITb3DSvHYkmHtl2ytlDAgPx4?= =?us-ascii?Q?1kWg17JPBjblm+W6lRgnd3xs23zNsTDFZWcDejeNCP6KLrI/INvCWS18anSQ?= =?us-ascii?Q?/NmrveIBl6qnObfRA17vVQjao58YOTWwI+3E5f3gCUW7VdAUnvrVd2fWespC?= =?us-ascii?Q?RGwdpHCSdB8VbeL/mQoJ3LdyVqJc4HYCOt+EmujGsirVBkCGLDydmIK3kOKQ?= =?us-ascii?Q?JPJo3RVLvKdtZ4X+RtMx6TJdnqV4MFo6KbXi9Yc0FQngzDwOK7Ti/mcbbF68?= =?us-ascii?Q?RIBVApv+R2Kw3fimaKUbvNy1+O/Hfz2onrgWVmoSZBwt+OArJuQ5aOsJjPbs?= =?us-ascii?Q?0MsIjY2tTHfT+ogoVPhYB53DmsoQ7eHBbwt3hM6gvjeIeRLoPGBjBEpk3yOD?= =?us-ascii?Q?a90ssvtLqV9Mb/7DdLP/hMcfV9hPZWfndY2pQU6Fwy4EVTLjzlz/WcM3cEBB?= =?us-ascii?Q?jqfpobb4Nlr4Z0rtJly924Jp9TIWPcXv9JJ2ffbWsrJDP+Wz/2wqMM+I00mK?= =?us-ascii?Q?MG+MCAoc+1CfTKeT+sBzA1Q2HGoePcpFV5zzFUvqgttV4JaCM5GszI/1doU/?= =?us-ascii?Q?dmohkGJJ4NCqZ5Qy19nkcaah4p5MZsuNLEr4tbFBHXqSaeTnnA=3D=3D?= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH8PR11MB8286.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(366016)(1800799024)(13003099007)(38070700018)(8096899003);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?NQejmIWDEQZvoZO5weKCvRpRnbrmh5w/Xfe/smtckjl/SURoffI512RnjUHD?= =?us-ascii?Q?2J9+0ruFnF1wPxTx2i2i6W3+VPVaK8/TFgfWPo13ONu8ngh2OkcE9yHFB+NE?= =?us-ascii?Q?B7vcs8kPhw7D4buTmcOcBXZWIM+5B5ZHhiUCgUGG8CSUTRBrQdDF6q2Zb2SM?= =?us-ascii?Q?stEtxLDqqWySImbkHsh/hHk8AXa6FPCfVhvQcdt6ZHngKEnbQvxE7ZsatqOq?= =?us-ascii?Q?aEY4E1bPQegpmW4o/X/EjoCl410cLhhV/VL8vWpGsnT/1d+j8Y+3NHEbgBxN?= =?us-ascii?Q?It2uHiT3dT8S41AJelX02f6o2NXMDo2MiOvZ5wP2Cd/iC7dxv3Zoe3wnz7ij?= =?us-ascii?Q?u9bh4+JlpTr6jwc13jdddrLSzeZXgqreB1YhE98ZuD6D9NWJtE3fIJCywGHV?= =?us-ascii?Q?WLNRg5jLHFdjjtCW6JAvVFKpFg8NfCcCDogdTl+J9RXppfv+I5XClSbgKanZ?= =?us-ascii?Q?dapl9WpcgFSHm2M9llxWLYuRF9TcDha7uyS8xYAg0YrlO+YBxs9lBvs1/Tma?= =?us-ascii?Q?3KSDmpLypDcYnJvXwsI+Ue56XBV6zNWEIForQI6JavlrK0yCPIOyFL4YEm2b?= =?us-ascii?Q?2Zzd+faw6VrGtLdIRyypo+/hmHHrnYMlGyyADERgN4fU//eGvsy3zEenEjeZ?= =?us-ascii?Q?ih/S/+0j4Pejx3VulQzFxibDxCflQsjgL/LcuZUippBpPoGveozqTcfHqGo+?= =?us-ascii?Q?hmcn2oYu4OlDLLlAZ+mtUvNpy3bZpXZjVbHoK/Qh/83+xUe6tx+hXDv58v74?= =?us-ascii?Q?Oj6dcq/p28G333DZkz0FDchHC2rPKtEInCeLFUfCHMGvCNLg0pULffCSgV8f?= =?us-ascii?Q?JNc4QDzkcVUU+d7yG01+J3IDccWpbRPb82TNvvEqCXD3byrJCDp4romXqoc2?= =?us-ascii?Q?9bRySe10Qsx/bSvUV1Ygbl6Ei5Z5FM6yQeNlpx3swhuDw5ponj0yjH16M53k?= =?us-ascii?Q?AOfwWu3JdESb7nuzVmNQF+kAraaziYp8kuPZ5q4rWuYsmShT44VzbAaGKefY?= =?us-ascii?Q?oydvEmCss/IOJp4RScH1ncVfarukA4aeL7zAdoDvkFguKXIuVtR6PNmUJKpP?= =?us-ascii?Q?uHlAHUZogOby8iGDd2atPmUugcELMBYtwfHPv1o8yY1+r8kAzZL1sSsXSzyU?= =?us-ascii?Q?ANUSgkVkyqXeoRAZ0oRJZGUBbKZpoyTbahJ3jxMyVQOU11F73EDDtQfFiYgS?= =?us-ascii?Q?THwP4CTmgViqBg8sbv1J6/64+e4+1gdtmYBAQ6XNsgzmB9IijyZC++LSIKmx?= =?us-ascii?Q?igCTAlcuklVR3dU5a+0rJjhOWI1BCOQfrJFl3u3N0VlJjQ6d4XCps7Mdv0jD?= =?us-ascii?Q?zADUGMhsENOnjImDyQp34cXRo5eDxToh+zF7HcIpVktloGYPWX2swT+pwLpj?= =?us-ascii?Q?Xg0fUF8UhLR1AsTV3FH/FLHC6XrG38tsFHAolH7ub85WNlDRHXTof960c70L?= =?us-ascii?Q?rUn3MxY6nCEYw7Ntb5TF3pwS7E5tFLcxCltbHHYwqx383lxambJxuyMyeNbr?= =?us-ascii?Q?UE+548l+6qieMgqIWiKpqrj7YSN6eoRy0UYW4NBwUJiroyqBQjmXvIUWfMp4?= =?us-ascii?Q?wu8atjw5aA0eQQJE2JjhDer9m03TUEGQ11a9/xUkO4KyKJiGpvpnTJDXwN5W?= =?us-ascii?Q?6w=3D=3D?= Content-Type: multipart/mixed; boundary="_005_PH8PR11MB82869FF741DFA4E9A029FF13FBF72PH8PR11MB8286namp_" MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PH8PR11MB8286.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 310490ef-53ba-4e6e-4045-08dd46268294 X-MS-Exchange-CrossTenant-originalarrivaltime: 05 Feb 2025 20:48:56.9646 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: m9vU/tQDnN8ftbPFYtksExi7C0wgT19IThTCpf0M8fdd5Y2goXdR2djr8iTXLa05QznENNRuNNq7x+8LIUO+y7y5eiNhejIKxy09IV/r4Is= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA2PR11MB5067 X-OriginatorOrg: intel.com List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_005_PH8PR11MB82869FF741DFA4E9A029FF13FBF72PH8PR11MB8286namp_ Content-Type: multipart/alternative; boundary="_000_PH8PR11MB82869FF741DFA4E9A029FF13FBF72PH8PR11MB8286namp_" --_000_PH8PR11MB82869FF741DFA4E9A029FF13FBF72PH8PR11MB8286namp_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable This patch improves the performance of SSE42 CRC32C algorithm. The current = SSE4.2 implementation of CRC32C relies on the native crc32 instruction and = processes 8 bytes at a time in a loop. The technique in this paper uses th= e pclmulqdq instruction and processing 64 bytes at time. The algorithm is b= ased on sse42 version of crc32 computation from Chromium's copy of zlib wit= h modified constants for crc32c computation. See: https://chromium.googlesource.com/chromium/src/+/refs/heads/main/third_part= y/zlib/crc32_simd.c Microbenchmarks (generated with google benchmark using a standalone version= of the same algorithms): Comparing scalar_crc32c to sse42_crc32c (for various buffer sizes: 64, 128,= 256, 512, 1024, 2048 bytes) Benchmark Time CP= U Time Old Time New CPU Old CPU New ---------------------------------------------------------------------------= --------------------------------------------------------- [scalar_crc32c vs. sse42_crc32c]/64 -0.8147 -0.814= 8 33 6 33 6 [scalar_crc32c vs. sse42_crc32c]/128 -0.8962 -0.8962= 88 9 88 9 [scalar_crc32c vs. sse42_crc32c]/256 -0.9200 -0.9200= 211 17 211 17 [scalar_crc32c vs. sse42_crc32c]/512 -0.9389 -0.9389= 486 30 486 30 [scalar_crc32c vs. sse42_crc32c]/1024 -0.9452 -0.9452 = 1037 57 1037 57 [scalar_crc32c vs. sse42_crc32c]/2048 -0.9456 -0.9456 = 2140 116 2140 116 Raghuveer --_000_PH8PR11MB82869FF741DFA4E9A029FF13FBF72PH8PR11MB8286namp_ Content-Type: text/html; charset="us-ascii" Content-Transfer-Encoding: quoted-printable

This patch improves the performance of SSE42 CRC32C = algorithm. The current SSE4.2 implementation of CRC32C relies on the native= crc32 instruction and processes 8 bytes at a time in a loop. The technique= in  this paper uses the pclmulqdq instruction and processing 64 bytes at time. The algorithm is based on sse= 42 version of crc32 computation from Chromium’s copy of zlib with mod= ified constants for crc32c computation. See:

 

https://chromium.goo= glesource.com/chromium/src/+/refs/heads/main/third_party/zlib/crc32_simd.c<= /a>

 

Microbenchmarks (generated with google benchmark usi= ng a standalone version of the same algorithms):

 

Comparing scalar_crc32c to sse42_crc32c (for various= buffer sizes: 64, 128, 256, 512, 1024, 2048 bytes)

Benchmark       &= nbsp;           &nbs= p;            &= nbsp;           &nbs= p;  Time          &n= bsp;  CPU      Time Old   &nbs= p;  Time New       CPU Old  &n= bsp;    CPU New

----------------------------------------------------= ---------------------------------------------------------------------------= -----

[scalar_crc32c vs. sse42_crc32c]/64   = ;            &n= bsp;  -0.8147         -0.8148&= nbsp;           33 &= nbsp;           6 &n= bsp;          33  &n= bsp;          6

[scalar_crc32c vs. sse42_crc32c]/128  &nbs= p;             = -0.8962         -0.8962  =           88   =           9   &= nbsp;        88    &= nbsp;        9

[scalar_crc32c vs. sse42_crc32c]/256  &nbs= p;             = -0.9200         -0.9200  =          211    = ;        17     = ;      211      &nbs= p;     17

[scalar_crc32c vs. sse42_crc32c]/512  &nbs= p;             = -0.9389         -0.9389  =          486    = ;        30     = ;      486      &nbs= p;     30

[scalar_crc32c vs. sse42_crc32c]/1024  &nb= sp;           -0.9452&nbs= p;        -0.9452    = ;      1037      &nb= sp;     57       &nb= sp;  1037          &= nbsp; 57

[scalar_crc32c vs. sse42_crc32c]/2048   &n= bsp;         -0.9456 &nbs= p;       -0.9456     = ;     2140       &nb= sp;   116          2= 140           116

 

Raghuveer

--_000_PH8PR11MB82869FF741DFA4E9A029FF13FBF72PH8PR11MB8286namp_-- --_005_PH8PR11MB82869FF741DFA4E9A029FF13FBF72PH8PR11MB8286namp_ Content-Type: application/octet-stream; name="v1-0001-Add-more-test-coverage-for-crc32c.patch" Content-Description: v1-0001-Add-more-test-coverage-for-crc32c.patch Content-Disposition: attachment; filename="v1-0001-Add-more-test-coverage-for-crc32c.patch"; size=3433; creation-date="Wed, 05 Feb 2025 20:33:59 GMT"; modification-date="Wed, 05 Feb 2025 20:48:56 GMT" Content-Transfer-Encoding: base64 RnJvbSAyYWE5YzZlMjhiYmM5NTZlMGQ0Y2M3YWVhNWUxZDE4NzFiODc2YTZkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSYWdodXZlZXIgRGV2dWxhcGFsbGkgPHJhZ2h1dmVlci5kZXZ1 bGFwYWxsaUBpbnRlbC5jb20+CkRhdGU6IFR1ZSwgNCBGZWIgMjAyNSAxMjo1NjowMCAtMDgwMApT dWJqZWN0OiBbUEFUQ0ggdjEgMS8yXSBBZGQgbW9yZSB0ZXN0IGNvdmVyYWdlIGZvciBjcmMzMmMK Ci0tLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jcmMzMmMub3V0IHwgNDIgKysrKysrKysr KysrKysrKysrKysrKysrKysrKwogc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZSAg IHwgIDIgKysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NyYzMyYy5zcWwgICAgICB8IDEyICsrKysr KysrCiAzIGZpbGVzIGNoYW5nZWQsIDU2IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NyYzMyYy5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBzcmMvdGVzdC9yZWdyZXNzL3NxbC9jcmMzMmMuc3FsCgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9jcmMzMmMub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9j cmMzMmMub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmYyNTk2NWRm NGEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NyYzMyYy5v dXQKQEAgLTAsMCArMSw0MiBAQAorLS0KKy0tIENSQzMyQworLS0gVGVzdGluZyBDUkMzMkMgU1NF NC4yIGFsZ29yaXRobS4KKy0tIFRoZSBuZXcgYWxnb3JpdGhtIGhhcyB2YXJpb3VzIGNvZGUgcGF0 aHMgdGhhdCBuZWVkcyB0ZXN0IGNvdmVyYWdlLgorLS0gV2UgYWNoaWV2ZSB0aGF0IGJ5IGNvbXB1 dGluZyBDUkMzMkMgb2YgdGV4dCBvZiB2YXJpb3VzIHNpemVzOiAxNSwgNjQsIDEyOCwgMTQ0LCAx NTkgYW5kIDI1NiBieXRlcy4KKy0tCitTRUxFQ1QgY3JjMzJjKCcnKTsKKyBjcmMzMmMgCistLS0t LS0tLQorICAgICAgMAorKDEgcm93KQorCitTRUxFQ1QgY3JjMzJjKCdIZWxsbyAxNSBieXRlcyEn KTsKKyAgIGNyYzMyYyAgIAorLS0tLS0tLS0tLS0tCisgMzQwNTc1NzEyMQorKDEgcm93KQorCitT RUxFQ1QgY3JjMzJjKCdUaGlzIGlzIGEgNjQgYnl0ZSBwaWVjZSBvZiB0ZXh0IHRvIHJ1biB0aHJv dWdoIHRoZSBtYWluIGxvb3AgLi4uJyk7CisgIGNyYzMyYyAgIAorLS0tLS0tLS0tLS0KKyA3MjE0 OTQ4NDEKKygxIHJvdykKKworU0VMRUNUIGNyYzMyYygnVGhpcyBpcyBhIGNhcmVmdWxseSBjb25z dHJ1Y3RlZCB0ZXh0IHRoYXQgbmVlZHMgdG8gYmUgZXhhY3RseSAxMjggYnl0ZXMgbG9uZyBmb3Ig dGVzdGluZyBwdXJwb3Nlcy4gTGV0IG1lIGFkZCBtb3JlIHdvcmRzIHRvIC4uLi4nKTsKKyAgIGNy YzMyYyAgIAorLS0tLS0tLS0tLS0tCisgMTYwMjAxNjk2NAorKDEgcm93KQorCitTRUxFQ1QgY3Jj MzJjKCdUaGlzIGlzIGEgdGV4dCB0aGF0IG5lZWRzIHRvIGJlIGV4YWN0bHkgMTQ0IGJ5dGVzIGxv bmcgZm9yIHRlc3RpbmcgcHVycG9zZXMuIEkgd2lsbCBhZGQgbW9yZSB3b3JkcyB0byByZWFjaCB0 aGF0IHNwZWNpZmljIGxlbmd0aC4gTm93IHdlIGFyZSAuLi4nKTsKKyAgIGNyYzMyYyAgIAorLS0t LS0tLS0tLS0tCisgMTkxMjg2Mjk0NAorKDEgcm93KQorCitTRUxFQ1QgY3JjMzJjKCdUaGlzIGlz IGEgcHJlY2lzZWx5IGNyYWZ0ZWQgbWVzc2FnZSB0aGF0IG5lZWRzIHRvIGJlIGV4YWN0bHkgMTU5 IGJ5dGVzIGluIGxlbmd0aCBmb3IgdGVzdGluZyBwdXJwb3Nlcy4gSSB3aWxsIGNvbnRpbnVlIGFk ZGluZyBtb3JlIHRleHQgdW50aWwgd2UgcmVhY2ggdGhhdCAuLi4nKTsKKyAgIGNyYzMyYyAgIAor LS0tLS0tLS0tLS0tCisgMTI0NTg3OTc4MgorKDEgcm93KQorCmRpZmYgLS1naXQgYS9zcmMvdGVz dC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlIGIvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9z Y2hlZHVsZQppbmRleCAxZWRkOWU0NWViLi43YzlkYmY2NWRiIDEwMDY0NAotLS0gYS9zcmMvdGVz dC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxs ZWxfc2NoZWR1bGUKQEAgLTU2LDYgKzU2LDggQEAgdGVzdDogY3JlYXRlX2FnZ3JlZ2F0ZSBjcmVh dGVfZnVuY3Rpb25fc3FsIGNyZWF0ZV9jYXN0IGNvbnN0cmFpbnRzIHRyaWdnZXJzIHNlbGUKICMg LS0tLS0tLS0tLQogdGVzdDogc2FuaXR5X2NoZWNrCiAKK3Rlc3Q6IGNyYzMyYworCiAjIC0tLS0t LS0tLS0KICMgQW5vdGhlciBncm91cCBvZiBwYXJhbGxlbCB0ZXN0cwogIyBhZ2dyZWdhdGVzIGRl cGVuZHMgb24gY3JlYXRlX2FnZ3JlZ2F0ZQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9z cWwvY3JjMzJjLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NyYzMyYy5zcWwKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNWU0ODFlYWI2ZgotLS0gL2Rldi9udWxsCisr KyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NyYzMyYy5zcWwKQEAgLTAsMCArMSwxMiBAQAorLS0K Ky0tIENSQzMyQworLS0gVGVzdGluZyBDUkMzMkMgU1NFNC4yIGFsZ29yaXRobS4KKy0tIFRoZSBu ZXcgYWxnb3JpdGhtIGhhcyB2YXJpb3VzIGNvZGUgcGF0aHMgdGhhdCBuZWVkcyB0ZXN0IGNvdmVy YWdlLgorLS0gV2UgYWNoaWV2ZSB0aGF0IGJ5IGNvbXB1dGluZyBDUkMzMkMgb2YgdGV4dCBvZiB2 YXJpb3VzIHNpemVzOiAxNSwgNjQsIDEyOCwgMTQ0LCAxNTkgYW5kIDI1NiBieXRlcy4KKy0tCitT RUxFQ1QgY3JjMzJjKCcnKTsKK1NFTEVDVCBjcmMzMmMoJ0hlbGxvIDE1IGJ5dGVzIScpOworU0VM RUNUIGNyYzMyYygnVGhpcyBpcyBhIDY0IGJ5dGUgcGllY2Ugb2YgdGV4dCB0byBydW4gdGhyb3Vn aCB0aGUgbWFpbiBsb29wIC4uLicpOworU0VMRUNUIGNyYzMyYygnVGhpcyBpcyBhIGNhcmVmdWxs eSBjb25zdHJ1Y3RlZCB0ZXh0IHRoYXQgbmVlZHMgdG8gYmUgZXhhY3RseSAxMjggYnl0ZXMgbG9u ZyBmb3IgdGVzdGluZyBwdXJwb3Nlcy4gTGV0IG1lIGFkZCBtb3JlIHdvcmRzIHRvIC4uLi4nKTsK K1NFTEVDVCBjcmMzMmMoJ1RoaXMgaXMgYSB0ZXh0IHRoYXQgbmVlZHMgdG8gYmUgZXhhY3RseSAx NDQgYnl0ZXMgbG9uZyBmb3IgdGVzdGluZyBwdXJwb3Nlcy4gSSB3aWxsIGFkZCBtb3JlIHdvcmRz IHRvIHJlYWNoIHRoYXQgc3BlY2lmaWMgbGVuZ3RoLiBOb3cgd2UgYXJlIC4uLicpOworU0VMRUNU IGNyYzMyYygnVGhpcyBpcyBhIHByZWNpc2VseSBjcmFmdGVkIG1lc3NhZ2UgdGhhdCBuZWVkcyB0 byBiZSBleGFjdGx5IDE1OSBieXRlcyBpbiBsZW5ndGggZm9yIHRlc3RpbmcgcHVycG9zZXMuIEkg d2lsbCBjb250aW51ZSBhZGRpbmcgbW9yZSB0ZXh0IHVudGlsIHdlIHJlYWNoIHRoYXQgLi4uJyk7 Ci0tIAoyLjQzLjAKCg== --_005_PH8PR11MB82869FF741DFA4E9A029FF13FBF72PH8PR11MB8286namp_ Content-Type: application/octet-stream; name="v1-0002-Improve-CRC32C-performance-on-SSE4.2.patch" Content-Description: v1-0002-Improve-CRC32C-performance-on-SSE4.2.patch Content-Disposition: attachment; filename="v1-0002-Improve-CRC32C-performance-on-SSE4.2.patch"; size=10035; creation-date="Wed, 05 Feb 2025 20:33:59 GMT"; modification-date="Wed, 05 Feb 2025 20:48:56 GMT" Content-Transfer-Encoding: base64 RnJvbSA2NjFkNmE3YWU1YmEwMmY5NjM1NjE1MTNiZWE0YTAwM2Q3ODljZGRhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSYWdodXZlZXIgRGV2dWxhcGFsbGkgPHJhZ2h1dmVlci5kZXZ1 bGFwYWxsaUBpbnRlbC5jb20+CkRhdGU6IFR1ZSwgNCBGZWIgMjAyNSAxNToyMDoxMyAtMDgwMApT dWJqZWN0OiBbUEFUQ0ggdjEgMi8yXSBJbXByb3ZlIENSQzMyQyBwZXJmb3JtYW5jZSBvbiBTU0U0 LjIKClRoZSBjdXJyZW50IFNTRTQuMiBpbXBsZW1lbnRhdGlvbiBvZiBDUkMzMkMgcmVsaWVzIG9u IHRoZSBuYXRpdmUgY3JjMzIKaW5zdHJ1Y3Rpb24gYW5kIHByb2Nlc3NlcyA4IGJ5dGVzIGF0IGEg dGltZSBpbiBhIGxvb3AuIFRoZSB0ZWNobmlxdWUgaW4KdGhpcyBwYXBlciB1c2VzIHRoZSBwY2xt dWxxZHEgaW5zdHJ1Y3Rpb24gYW5kIHByb2Nlc3NpbmcgNjQgYnl0ZXMgYXQKdGltZS4KCkJhc2Vk IG9uOiAiRmFzdCBDUkMgQ29tcHV0YXRpb24gZm9yIEdlbmVyaWMgUG9seW5vbWlhbHMgVXNpbmcg UENMTVVMUURRIEluc3RydWN0aW9uIgpWLiBHb3BhbCwgRS4gT3p0dXJrLCBldCBhbC4sIDIwMDkK ClRoZSBhbGdvcml0aG0gaXMgYmFzZWQgb24gY3JjMzJfc3NlNDJfc2ltZCBmcm9tIGNocm9taW11 bSdzIGNvcHkgb2YgemxpYi4gU2VlOgpmcm9tIGh0dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291cmNl LmNvbS9jaHJvbWl1bS9zcmMvKy9yZWZzL2hlYWRzL21haW4vdGhpcmRfcGFydHkvemxpYi9jcmMz Ml9zaW1kLmMKCk1pY3JvYmVuY2htYXJrczogKGdlbmVyYXRlZCB3aXRoIGdvb2dsZSBiZW5jaG1h cmsgdXNpbmcgYSBzdGFuZGFsb25lCnZlcnNpb24gb2YgdGhlIHNhbWUgYWxnb3JpdGhtcykuCgpD b21wYXJpbmcgc2NhbGFyX2NyYzMyYyAoY3VycmVudCB2ZXJzaW9uKSB0byBzc2U0Ml9jcmMzMmMg KHByb3Bvc2VkIG5ldwp2ZXJzaW9uKToKfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS18 CnwgQmVuY2htYXJrICAgICAgICAgICAgICAgICAgICAgICAgfCBCdWZmZXIgc2l6ZSAoYnl0ZXMp IHwgVGltZSBPbGQgKG5zKSB8IFRpbWUgTmV3IChucykgfAp8LS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLXwKfCBbc2NhbGFyX2NyYzMyYyB2cy4gc3NlNDJfY3JjMzJjXSB8IDY0ICAgICAg ICAgICAgICAgICAgfCAzMyAgICAgICAgICAgIHwgNiAgICAgICAgICAgICB8CnwgW3NjYWxhcl9j cmMzMmMgdnMuIHNzZTQyX2NyYzMyY10gfCAxMjggICAgICAgICAgICAgICAgIHwgODggICAgICAg ICAgICB8IDkgICAgICAgICAgICAgfAp8IFtzY2FsYXJfY3JjMzJjIHZzLiBzc2U0Ml9jcmMzMmNd IHwgMjU2ICAgICAgICAgICAgICAgICB8IDIxMSAgICAgICAgICAgfCAxNyAgICAgICAgICAgIHwK fCBbc2NhbGFyX2NyYzMyYyB2cy4gc3NlNDJfY3JjMzJjXSB8IDUxMiAgICAgICAgICAgICAgICAg fCA0ODYgICAgICAgICAgIHwgMzAgICAgICAgICAgICB8CnwgW3NjYWxhcl9jcmMzMmMgdnMuIHNz ZTQyX2NyYzMyY10gfCAxMDI0ICAgICAgICAgICAgICAgIHwgMTAzNyAgICAgICAgICB8IDU3ICAg ICAgICAgICAgfAp8IFtzY2FsYXJfY3JjMzJjIHZzLiBzc2U0Ml9jcmMzMmNdIHwgMjA0OCAgICAg ICAgICAgICAgICB8IDIxNDAgICAgICAgICAgfCAxMTYgICAgICAgICAgIHwKfC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS18Ci0tLQogY29uZmlnL2MtY29tcGlsZXIubTQgICAgICAgfCAg IDcgKy0KIGNvbmZpZ3VyZSAgICAgICAgICAgICAgICAgIHwgICA3ICstCiBtZXNvbi5idWlsZCAg ICAgICAgICAgICAgICB8ICAgNyArLQogc3JjL3BvcnQvcGdfY3JjMzJjX3NzZTQyLmMgfCAxMjcg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQogNCBmaWxlcyBjaGFuZ2VkLCAx NDEgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9jb25maWcvYy1j b21waWxlci5tNCBiL2NvbmZpZy9jLWNvbXBpbGVyLm00CmluZGV4IDg1MzRjYzU0YzEuLjhiMjU1 YjVjYzggMTAwNjQ0Ci0tLSBhL2NvbmZpZy9jLWNvbXBpbGVyLm00CisrKyBiL2NvbmZpZy9jLWNv bXBpbGVyLm00CkBAIC01NTcsMTQgKzU1NywxOSBAQCBBQ19ERUZVTihbUEdBQ19TU0U0Ml9DUkMz Ml9JTlRSSU5TSUNTXSwKIFtkZWZpbmUoW0FjX2NhY2hldmFyXSwgW0FTX1RSX1NIKFtwZ2FjX2N2 X3NzZTQyX2NyYzMyX2ludHJpbnNpY3NdKV0pZG5sCiBBQ19DQUNIRV9DSEVDSyhbZm9yIF9tbV9j cmMzMl91OCBhbmQgX21tX2NyYzMyX3UzMl0sIFtBY19jYWNoZXZhcl0sCiBbQUNfTElOS19JRkVM U0UoW0FDX0xBTkdfUFJPR1JBTShbI2luY2x1ZGUgPG5tbWludHJpbi5oPgorICAgICNpbmNsdWRl IDx3bW1pbnRyaW4uaD4KICAgICAjaWYgZGVmaW5lZChfX2hhc19hdHRyaWJ1dGUpICYmIF9faGFz X2F0dHJpYnV0ZSAodGFyZ2V0KQotICAgIF9fYXR0cmlidXRlX18oKHRhcmdldCgic3NlNC4yIikp KQorICAgIF9fYXR0cmlidXRlX18oKHRhcmdldCgic3NlNC4yLHBjbG11bCIpKSkKICAgICAjZW5k aWYKICAgICBzdGF0aWMgaW50IGNyYzMyX3NzZTQyX3Rlc3Qodm9pZCkKKwogICAgIHsKKyAgICAg IF9fbTEyOGkgeDEgPSBfbW1fc2V0MV9lcGkzMigxKTsKICAgICAgIHVuc2lnbmVkIGludCBjcmMg PSAwOwogICAgICAgY3JjID0gX21tX2NyYzMyX3U4KGNyYywgMCk7CiAgICAgICBjcmMgPSBfbW1f Y3JjMzJfdTMyKGNyYywgMCk7CisgICAgICB4MSA9IF9tbV9jbG11bGVwaTY0X3NpMTI4KHgxLCB4 MSwgMHgwMCk7IC8vIHBjbG11bAorICAgICAgY3JjID0gY3JjICsgX21tX2V4dHJhY3RfZXBpMzIo eDEsIDEpOwogICAgICAgLyogcmV0dXJuIGNvbXB1dGVkIHZhbHVlLCB0byBwcmV2ZW50IHRoZSBh Ym92ZSBiZWluZyBvcHRpbWl6ZWQgYXdheSAqLwogICAgICAgcmV0dXJuIGNyYyA9PSAwOwogICAg IH1dLApkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCmluZGV4IGNlZWVmOWIwOTEu LmY0NTdlM2QzYmMgMTAwNzU1Ci0tLSBhL2NvbmZpZ3VyZQorKysgYi9jb25maWd1cmUKQEAgLTE3 MTc4LDE0ICsxNzE3OCwxOSBAQCBlbHNlCiAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNv bmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICNpbmNsdWRlIDxubW1pbnRy aW4uaD4KKyAgICAjaW5jbHVkZSA8d21taW50cmluLmg+CiAgICAgI2lmIGRlZmluZWQoX19oYXNf YXR0cmlidXRlKSAmJiBfX2hhc19hdHRyaWJ1dGUgKHRhcmdldCkKLSAgICBfX2F0dHJpYnV0ZV9f KCh0YXJnZXQoInNzZTQuMiIpKSkKKyAgICBfX2F0dHJpYnV0ZV9fKCh0YXJnZXQoInNzZTQuMixw Y2xtdWwiKSkpCiAgICAgI2VuZGlmCiAgICAgc3RhdGljIGludCBjcmMzMl9zc2U0Ml90ZXN0KHZv aWQpCisKICAgICB7CisgICAgICBfX20xMjhpIHgxID0gX21tX3NldDFfZXBpMzIoMSk7CiAgICAg ICB1bnNpZ25lZCBpbnQgY3JjID0gMDsKICAgICAgIGNyYyA9IF9tbV9jcmMzMl91OChjcmMsIDAp OwogICAgICAgY3JjID0gX21tX2NyYzMyX3UzMihjcmMsIDApOworICAgICAgeDEgPSBfbW1fY2xt dWxlcGk2NF9zaTEyOCh4MSwgeDEsIDB4MDApOworICAgICAgY3JjID0gY3JjICsgX21tX2V4dHJh Y3RfZXBpMzIoeDEsIDEpOwogICAgICAgLyogcmV0dXJuIGNvbXB1dGVkIHZhbHVlLCB0byBwcmV2 ZW50IHRoZSBhYm92ZSBiZWluZyBvcHRpbWl6ZWQgYXdheSAqLwogICAgICAgcmV0dXJuIGNyYyA9 PSAwOwogICAgIH0KZGlmZiAtLWdpdCBhL21lc29uLmJ1aWxkIGIvbWVzb24uYnVpbGQKaW5kZXgg OGUxMjhmNDk4Mi4uMDcwZjUxYTQ0MCAxMDA2NDQKLS0tIGEvbWVzb24uYnVpbGQKKysrIGIvbWVz b24uYnVpbGQKQEAgLTIyMjcsMTUgKzIyMjcsMTggQEAgaWYgaG9zdF9jcHUgPT0gJ3g4Nicgb3Ig aG9zdF9jcHUgPT0gJ3g4Nl82NCcKIAogICAgIHByb2cgPSAnJycKICNpbmNsdWRlIDxubW1pbnRy aW4uaD4KLQorI2luY2x1ZGUgPHdtbWludHJpbi5oPgogI2lmIGRlZmluZWQoX19oYXNfYXR0cmli dXRlKSAmJiBfX2hhc19hdHRyaWJ1dGUgKHRhcmdldCkKLV9fYXR0cmlidXRlX18oKHRhcmdldCgi c3NlNC4yIikpKQorX19hdHRyaWJ1dGVfXygodGFyZ2V0KCJzc2U0LjIscGNsbXVsIikpKQogI2Vu ZGlmCiBpbnQgbWFpbih2b2lkKQogeworICAgIF9fbTEyOGkgeDEgPSBfbW1fc2V0MV9lcGkzMigx KTsKICAgICB1bnNpZ25lZCBpbnQgY3JjID0gMDsKICAgICBjcmMgPSBfbW1fY3JjMzJfdTgoY3Jj LCAwKTsKICAgICBjcmMgPSBfbW1fY3JjMzJfdTMyKGNyYywgMCk7CisgICAgeDEgPSBfbW1fY2xt dWxlcGk2NF9zaTEyOCh4MSwgeDEsIDB4MDApOyAvLyBwY2xtdWwKKyAgICBjcmMgPSBjcmMgKyBf bW1fZXh0cmFjdF9lcGkzMih4MSwgMSk7CiAgICAgLyogcmV0dXJuIGNvbXB1dGVkIHZhbHVlLCB0 byBwcmV2ZW50IHRoZSBhYm92ZSBiZWluZyBvcHRpbWl6ZWQgYXdheSAqLwogICAgIHJldHVybiBj cmMgPT0gMDsKIH0KZGlmZiAtLWdpdCBhL3NyYy9wb3J0L3BnX2NyYzMyY19zc2U0Mi5jIGIvc3Jj L3BvcnQvcGdfY3JjMzJjX3NzZTQyLmMKaW5kZXggMjJjMjEzN2RmMy4uNjlmODkxN2M3ZCAxMDA2 NDQKLS0tIGEvc3JjL3BvcnQvcGdfY3JjMzJjX3NzZTQyLmMKKysrIGIvc3JjL3BvcnQvcGdfY3Jj MzJjX3NzZTQyLmMKQEAgLTE1LDEzICsxNSwxMyBAQAogI2luY2x1ZGUgImMuaCIKIAogI2luY2x1 ZGUgPG5tbWludHJpbi5oPgotCisjaW5jbHVkZSA8d21taW50cmluLmg+CiAjaW5jbHVkZSAicG9y dC9wZ19jcmMzMmMuaCIKIAogcGdfYXR0cmlidXRlX25vX3Nhbml0aXplX2FsaWdubWVudCgpCiBw Z19hdHRyaWJ1dGVfdGFyZ2V0KCJzc2U0LjIiKQotcGdfY3JjMzJjCi1wZ19jb21wX2NyYzMyY19z c2U0MihwZ19jcmMzMmMgY3JjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKQorc3RhdGlj IHBnX2NyYzMyYworcGdfY29tcF9jcmMzMmNfc3NlNDJfdGFpbChwZ19jcmMzMmMgY3JjLCBjb25z dCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKQogewogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnAgPSBk YXRhOwogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBlbmQgPSBwICsgbGVuOwpAQCAtNjgsMyArNjgs MTI0IEBAIHBnX2NvbXBfY3JjMzJjX3NzZTQyKHBnX2NyYzMyYyBjcmMsIGNvbnN0IHZvaWQgKmRh dGEsIHNpemVfdCBsZW4pCiAKIAlyZXR1cm4gY3JjOwogfQorCisvKgorICogQmFzZWQgb246ICJG YXN0IENSQyBDb21wdXRhdGlvbiBmb3IgR2VuZXJpYyBQb2x5bm9taWFscyBVc2luZyBQQ0xNVUxR RFEKKyAqIEluc3RydWN0aW9uIiBWLiBHb3BhbCwgRS4gT3p0dXJrLCBldCBhbC4sIDIwMDkKKyAq CisgKiBUaGUgYWxnb3JpdGhtIGlzIGJhc2VkIG9uIGNyYzMyX3NzZTQyX3NpbWQgZnJvbSBjaHJv bWltdW0ncyBjb3B5IG9mIHpsaWIuCisgKiBTZWU6CisgKiBodHRwczovL2Nocm9taXVtLmdvb2ds ZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjLysvcmVmcy9oZWFkcy9tYWluL3RoaXJkX3BhcnR5L3ps aWIvY3JjMzJfc2ltZC5jCisgKi8KKworcGdfYXR0cmlidXRlX25vX3Nhbml0aXplX2FsaWdubWVu dCgpCitwZ19hdHRyaWJ1dGVfdGFyZ2V0KCJzc2U0LjIscGNsbXVsIikKK3BnX2NyYzMyYworcGdf Y29tcF9jcmMzMmNfc3NlNDIocGdfY3JjMzJjIGNyYywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90 IGxlbmd0aCkKK3sKKyAgICBzc2l6ZV90IGxlbiA9IChzc2l6ZV90KSBsZW5ndGg7CisgICAgY29u c3QgdW5zaWduZWQgY2hhciAqYnVmID0gZGF0YTsKKyAgICAvKgorICAgICAqIERlZmluaXRpb25z IG9mIHRoZSBiaXQtcmVmbGVjdGVkIGRvbWFpbiBjb25zdGFudHMgazEsazIsazMsIGV0YyBhbmQK KyAgICAgKiB0aGUgQ1JDMzIrQmFycmV0dCBwb2x5bm9taWFscyBnaXZlbiBhdCB0aGUgZW5kIG9m IHRoZSBwYXBlci4KKyAgICAgKi8KKyAgICBzdGF0aWMgY29uc3QgdWludDY0X3QgcGdfYXR0cmli dXRlX2FsaWduZWQoMTYpIGsxazJbXSA9IHsgMHg3NDBlZWYwMiwgMHg5ZTRhZGRmOCB9OworICAg IHN0YXRpYyBjb25zdCB1aW50NjRfdCBwZ19hdHRyaWJ1dGVfYWxpZ25lZCgxNikgazNrNFtdID0g eyAweGYyMGMwZGZlLCAweDE0Y2QwMGJkNiB9OworICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBw Z19hdHRyaWJ1dGVfYWxpZ25lZCgxNikgazVrMFtdID0geyAweGRkNDVhYWI4LCAweDAwMDAwMDAw MCB9OworICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBwZ19hdHRyaWJ1dGVfYWxpZ25lZCgxNikg cG9seVtdID0geyAweDEwNWVjNzZmMSwgMHhkZWE3MTNmMSB9OworICAgIGlmIChsZW4gPj0gNjQp IHsKKyAgICAgICAgX19tMTI4aSB4MCwgeDEsIHgyLCB4MywgeDQsIHg1LCB4NiwgeDcsIHg4LCB5 NSwgeTYsIHk3LCB5ODsKKyAgICAgICAgLyoKKyAgICAgICAgICogVGhlcmUncyBhdCBsZWFzdCBv bmUgYmxvY2sgb2YgNjQuCisgICAgICAgICAqLworICAgICAgICB4MSA9IF9tbV9sb2FkdV9zaTEy OCgoX19tMTI4aSAqKShidWYgKyAweDAwKSk7CisgICAgICAgIHgyID0gX21tX2xvYWR1X3NpMTI4 KChfX20xMjhpICopKGJ1ZiArIDB4MTApKTsKKyAgICAgICAgeDMgPSBfbW1fbG9hZHVfc2kxMjgo KF9fbTEyOGkgKikoYnVmICsgMHgyMCkpOworICAgICAgICB4NCA9IF9tbV9sb2FkdV9zaTEyOCgo X19tMTI4aSAqKShidWYgKyAweDMwKSk7CisgICAgICAgIHgxID0gX21tX3hvcl9zaTEyOCh4MSwg X21tX2N2dHNpMzJfc2kxMjgoY3JjKSk7CisgICAgICAgIHgwID0gX21tX2xvYWRfc2kxMjgoKF9f bTEyOGkgKilrMWsyKTsKKyAgICAgICAgYnVmICs9IDY0OworICAgICAgICBsZW4gLT0gNjQ7Cisg ICAgICAgIC8qCisgICAgICAgICAqIFBhcmFsbGVsIGZvbGQgYmxvY2tzIG9mIDY0LCBpZiBhbnku CisgICAgICAgICAqLworICAgICAgICB3aGlsZSAobGVuID49IDY0KQorICAgICAgICB7CisgICAg ICAgICAgICB4NSA9IF9tbV9jbG11bGVwaTY0X3NpMTI4KHgxLCB4MCwgMHgwMCk7CisgICAgICAg ICAgICB4NiA9IF9tbV9jbG11bGVwaTY0X3NpMTI4KHgyLCB4MCwgMHgwMCk7CisgICAgICAgICAg ICB4NyA9IF9tbV9jbG11bGVwaTY0X3NpMTI4KHgzLCB4MCwgMHgwMCk7CisgICAgICAgICAgICB4 OCA9IF9tbV9jbG11bGVwaTY0X3NpMTI4KHg0LCB4MCwgMHgwMCk7CisgICAgICAgICAgICB4MSA9 IF9tbV9jbG11bGVwaTY0X3NpMTI4KHgxLCB4MCwgMHgxMSk7CisgICAgICAgICAgICB4MiA9IF9t bV9jbG11bGVwaTY0X3NpMTI4KHgyLCB4MCwgMHgxMSk7CisgICAgICAgICAgICB4MyA9IF9tbV9j bG11bGVwaTY0X3NpMTI4KHgzLCB4MCwgMHgxMSk7CisgICAgICAgICAgICB4NCA9IF9tbV9jbG11 bGVwaTY0X3NpMTI4KHg0LCB4MCwgMHgxMSk7CisgICAgICAgICAgICB5NSA9IF9tbV9sb2FkdV9z aTEyOCgoX19tMTI4aSAqKShidWYgKyAweDAwKSk7CisgICAgICAgICAgICB5NiA9IF9tbV9sb2Fk dV9zaTEyOCgoX19tMTI4aSAqKShidWYgKyAweDEwKSk7CisgICAgICAgICAgICB5NyA9IF9tbV9s b2FkdV9zaTEyOCgoX19tMTI4aSAqKShidWYgKyAweDIwKSk7CisgICAgICAgICAgICB5OCA9IF9t bV9sb2FkdV9zaTEyOCgoX19tMTI4aSAqKShidWYgKyAweDMwKSk7CisgICAgICAgICAgICB4MSA9 IF9tbV94b3Jfc2kxMjgoeDEsIHg1KTsKKyAgICAgICAgICAgIHgyID0gX21tX3hvcl9zaTEyOCh4 MiwgeDYpOworICAgICAgICAgICAgeDMgPSBfbW1feG9yX3NpMTI4KHgzLCB4Nyk7CisgICAgICAg ICAgICB4NCA9IF9tbV94b3Jfc2kxMjgoeDQsIHg4KTsKKyAgICAgICAgICAgIHgxID0gX21tX3hv cl9zaTEyOCh4MSwgeTUpOworICAgICAgICAgICAgeDIgPSBfbW1feG9yX3NpMTI4KHgyLCB5Nik7 CisgICAgICAgICAgICB4MyA9IF9tbV94b3Jfc2kxMjgoeDMsIHk3KTsKKyAgICAgICAgICAgIHg0 ID0gX21tX3hvcl9zaTEyOCh4NCwgeTgpOworICAgICAgICAgICAgYnVmICs9IDY0OworICAgICAg ICAgICAgbGVuIC09IDY0OworICAgICAgICB9CisgICAgICAgIC8qCisgICAgICAgICAqIEZvbGQg aW50byAxMjgtYml0cy4KKyAgICAgICAgICovCisgICAgICAgIHgwID0gX21tX2xvYWRfc2kxMjgo KF9fbTEyOGkgKilrM2s0KTsKKyAgICAgICAgeDUgPSBfbW1fY2xtdWxlcGk2NF9zaTEyOCh4MSwg eDAsIDB4MDApOworICAgICAgICB4MSA9IF9tbV9jbG11bGVwaTY0X3NpMTI4KHgxLCB4MCwgMHgx MSk7CisgICAgICAgIHgxID0gX21tX3hvcl9zaTEyOCh4MSwgeDIpOworICAgICAgICB4MSA9IF9t bV94b3Jfc2kxMjgoeDEsIHg1KTsKKyAgICAgICAgeDUgPSBfbW1fY2xtdWxlcGk2NF9zaTEyOCh4 MSwgeDAsIDB4MDApOworICAgICAgICB4MSA9IF9tbV9jbG11bGVwaTY0X3NpMTI4KHgxLCB4MCwg MHgxMSk7CisgICAgICAgIHgxID0gX21tX3hvcl9zaTEyOCh4MSwgeDMpOworICAgICAgICB4MSA9 IF9tbV94b3Jfc2kxMjgoeDEsIHg1KTsKKyAgICAgICAgeDUgPSBfbW1fY2xtdWxlcGk2NF9zaTEy OCh4MSwgeDAsIDB4MDApOworICAgICAgICB4MSA9IF9tbV9jbG11bGVwaTY0X3NpMTI4KHgxLCB4 MCwgMHgxMSk7CisgICAgICAgIHgxID0gX21tX3hvcl9zaTEyOCh4MSwgeDQpOworICAgICAgICB4 MSA9IF9tbV94b3Jfc2kxMjgoeDEsIHg1KTsKKyAgICAgICAgLyoKKyAgICAgICAgICogU2luZ2xl IGZvbGQgYmxvY2tzIG9mIDE2LCBpZiBhbnkuCisgICAgICAgICAqLworICAgICAgICB3aGlsZSAo bGVuID49IDE2KQorICAgICAgICB7CisgICAgICAgICAgICB4MiA9IF9tbV9sb2FkdV9zaTEyOCgo X19tMTI4aSAqKWJ1Zik7CisgICAgICAgICAgICB4NSA9IF9tbV9jbG11bGVwaTY0X3NpMTI4KHgx LCB4MCwgMHgwMCk7CisgICAgICAgICAgICB4MSA9IF9tbV9jbG11bGVwaTY0X3NpMTI4KHgxLCB4 MCwgMHgxMSk7CisgICAgICAgICAgICB4MSA9IF9tbV94b3Jfc2kxMjgoeDEsIHgyKTsKKyAgICAg ICAgICAgIHgxID0gX21tX3hvcl9zaTEyOCh4MSwgeDUpOworICAgICAgICAgICAgYnVmICs9IDE2 OworICAgICAgICAgICAgbGVuIC09IDE2OworICAgICAgICB9CisgICAgICAgIC8qCisgICAgICAg ICAqIEZvbGQgMTI4LWJpdHMgdG8gNjQtYml0cy4KKyAgICAgICAgICovCisgICAgICAgIHgyID0g X21tX2NsbXVsZXBpNjRfc2kxMjgoeDEsIHgwLCAweDEwKTsKKyAgICAgICAgeDMgPSBfbW1fc2V0 cl9lcGkzMih+MCwgMCwgfjAsIDApOworICAgICAgICB4MSA9IF9tbV9zcmxpX3NpMTI4KHgxLCA4 KTsKKyAgICAgICAgeDEgPSBfbW1feG9yX3NpMTI4KHgxLCB4Mik7CisgICAgICAgIHgwID0gX21t X2xvYWRsX2VwaTY0KChfX20xMjhpKilrNWswKTsKKyAgICAgICAgeDIgPSBfbW1fc3JsaV9zaTEy OCh4MSwgNCk7CisgICAgICAgIHgxID0gX21tX2FuZF9zaTEyOCh4MSwgeDMpOworICAgICAgICB4 MSA9IF9tbV9jbG11bGVwaTY0X3NpMTI4KHgxLCB4MCwgMHgwMCk7CisgICAgICAgIHgxID0gX21t X3hvcl9zaTEyOCh4MSwgeDIpOworICAgICAgICAvKgorICAgICAgICAgKiBCYXJyZXQgcmVkdWNl IHRvIDMyLWJpdHMuCisgICAgICAgICAqLworICAgICAgICB4MCA9IF9tbV9sb2FkX3NpMTI4KChf X20xMjhpKilwb2x5KTsKKyAgICAgICAgeDIgPSBfbW1fYW5kX3NpMTI4KHgxLCB4Myk7CisgICAg ICAgIHgyID0gX21tX2NsbXVsZXBpNjRfc2kxMjgoeDIsIHgwLCAweDEwKTsKKyAgICAgICAgeDIg PSBfbW1fYW5kX3NpMTI4KHgyLCB4Myk7CisgICAgICAgIHgyID0gX21tX2NsbXVsZXBpNjRfc2kx MjgoeDIsIHgwLCAweDAwKTsKKyAgICAgICAgeDEgPSBfbW1feG9yX3NpMTI4KHgxLCB4Mik7Cisg ICAgICAgIGNyYyA9IF9tbV9leHRyYWN0X2VwaTMyKHgxLCAxKTsKKyAgICB9CisKKyAgICByZXR1 cm4gcGdfY29tcF9jcmMzMmNfc3NlNDJfdGFpbChjcmMsIGJ1ZiwgbGVuKTsKK30KLS0gCjIuNDMu MAoK --_005_PH8PR11MB82869FF741DFA4E9A029FF13FBF72PH8PR11MB8286namp_--