From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id F0CE5A0544; Wed, 29 Jun 2022 16:55:12 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 9091F400D7; Wed, 29 Jun 2022 16:55:12 +0200 (CEST) Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-eopbgr70045.outbound.protection.outlook.com [40.107.7.45]) by mails.dpdk.org (Postfix) with ESMTP id A8D44400D5; Mon, 27 Jun 2022 09:56:58 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=L1cCJ8HSnJ1mBCo3pPm2D+7d8jkVQuIjEHwJrhwJb8wnqYCLi0kxxgZSw9q+Ym24zGvpt7Qvf+wXNHB1sLY+JpbFWmbyE8ChQV3ncc34CgLcmLK6TB8YzteqjFhDQrB8oQp2td3MQ95fe0SydD8PeLOCBIAt+2svjkMgEbJ3oFP7/8UF+glD72EBi4JEboNWtQ+ka1o9XaetSG6Ge7so4Fe8DRC8bIc6ixGgM2a2cH6I71EYK4OVBat+kqddMqWjSrM8jJs4mrvHXqUdeMP6zTC2Toq4cdZwGyE3rUB/W+jzvSrkKgFiT53HfrAW57sx80trkoMU+bvTLcfD5qLa9g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=FzKyaGyIxE8+29ymxMf2Lag4VkpAdqOHwr1A14tWXA0=; b=D3TE17Y7xSRYiGz/LbEUimWZz83lgC70uF7z57uX+FIiUcx73czK3lrVqww1xNcc4SYuqOUhgHS2yFHHGbxOzOsTprSxPyDO0tlId3RSqllrHLXdW+WQlCgPSVlgCKfGis+rNRkawxc/XEOewIhPd2OaxAw5f+q28a78KaD+4ZhJqJh47j/FxfyoQH0nju9X16GzCAiCJyh7+UCtpny6oeKTgylJ3CEWpi83kcGaHdfNgsugsjyiPFLkR3J72KxfDubdokDuuQnfOEPyrAblMraWxy8VDIUNRi6hKf3cLL3/VcQkBUi9YsAeKERLGMCDPSA1qaCvv5hlm0jcnFeAiQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=ericsson.com; dmarc=pass action=none header.from=ericsson.com; dkim=pass header.d=ericsson.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ericsson.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=FzKyaGyIxE8+29ymxMf2Lag4VkpAdqOHwr1A14tWXA0=; b=Rq/qEHALZ4o21b7in50sYxRQtgSk2B993XtkKyN0hjaBkLgSGcZUlT9s8KeHf2SnUnzln4S2pi5gK92IWAPN7L3+2PE+N5ovX+NpybCrPdzIbYOInY4zywmzAdlw4ezUCty634FX0xXKs6C4lw/Zm+8x2uPX0WqxfWKmbJdvstI= Received: from AM8PR07MB7666.eurprd07.prod.outlook.com (2603:10a6:20b:240::23) by VI1PR0701MB2638.eurprd07.prod.outlook.com (2603:10a6:801:4::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5395.11; Mon, 27 Jun 2022 07:56:56 +0000 Received: from AM8PR07MB7666.eurprd07.prod.outlook.com ([fe80::188:e139:774e:cea1]) by AM8PR07MB7666.eurprd07.prod.outlook.com ([fe80::188:e139:774e:cea1%9]) with mapi id 15.20.5395.011; Mon, 27 Jun 2022 07:56:56 +0000 From: Emil Berg To: =?utf-8?B?TW9ydGVuIEJyw7hydXA=?= , "bruce.richardson@intel.com" , "dev@dpdk.org" CC: "stephen@networkplumber.org" , "stable@dpdk.org" , "bugzilla@dpdk.org" , "hofors@lysator.liu.se" , "olivier.matz@6wind.com" Subject: RE: [PATCH v4] net: fix checksum with unaligned buffer Thread-Topic: [PATCH v4] net: fix checksum with unaligned buffer Thread-Index: AQHYhv48fmD0p9rOd0KzPCydzCSkQq1c8dgAgAX15KA= Date: Mon, 27 Jun 2022 07:56:56 +0000 Message-ID: References: <98CBD80474FA8B44BF855DF32C47DC35D87139@smartserver.smartshare.dk> <20220623123900.38283-1-mb@smartsharesystems.com> <98CBD80474FA8B44BF855DF32C47DC35D87169@smartserver.smartshare.dk> In-Reply-To: <98CBD80474FA8B44BF855DF32C47DC35D87169@smartserver.smartshare.dk> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=ericsson.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 359ca86e-902d-4721-3681-08da58129b76 x-ms-traffictypediagnostic: VI1PR0701MB2638:EE_ x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: yuMjauxEad42wwzvktmQPdq1L6GUnCL+DUGdvCdNMcuJW18LhngTVMFJOVElZ2/dNaOnXkAG1ze6/D6fberWTqLndYr8Yl0Kcm1irbEapWBDonRlPLK/mhNMJzWOroHJH9u/uMEXtGzMBr41mUBvSGcgjnEQywgYtcSJF7XA+qBH++k+6pXNQmCL1YR3QjEFfBVtzhhrgGP87ibod50eelPvviyrcgH5WZnhpJIvR/EdQ5HHUQpO2m6AJVppWHuWD+NehIB35oC6aEThhl1lvsbQyX+6IL+eSU6FpprtLvReYmYbpXUefSbCRqw0OdgIwoyQef4nN7iHh6KZGTQpr74U3FTDh6y0snaT10Dl/d5WWUJMWFgOPM1FGuCRBIb2CDYO02jGJDOtsckQfggdAKEhwJtZ1b9VvY4+6FiavZbL6JmanBer9L7G0bKexgQwq9pBPuUknbJsT2ki+Df7Y5maHYq18VEAd7WAR2p9vOfdFyI05EQIcxcyX0olDj/PR39ciuZYxMUqMKJonuyrT3NnVnb0Iyoc/ait9diVXsdIiUFWUq3eoBvOC9VgkcQYbdQ35nPBuO7jKRxDddpp8hJjbEjtEiEmlHlLgDQu7MVkFWcyBhLwTvpD4vhEI8FJTbTDo1UQ4+dZtYd8i5WF47ySEMMqj+uzU7cXupmswgCRMH+BxMJG3Yf34m25J2keSSek0Qk62yT2/qdujbRzVQ1ayBe2Ju48hFHvRS70mKOO86D0xgbCHnQybKJpKkpuBNYED8jxgPpcpU+VtvNxFolWGvrPXcsFPgLhZ5v/SoY= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM8PR07MB7666.eurprd07.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230016)(4636009)(346002)(39860400002)(376002)(396003)(366004)(136003)(6506007)(53546011)(71200400001)(478600001)(41300700001)(82960400001)(54906003)(83380400001)(26005)(9686003)(5660300002)(8936002)(7696005)(316002)(186003)(38070700005)(4326008)(110136005)(122000001)(86362001)(33656002)(66574015)(8676002)(66946007)(66446008)(64756008)(66556008)(52536014)(66476007)(44832011)(55016003)(38100700002)(2906002)(76116006); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?VWFGcU1UMWNCdzRhaVMrSUZvSDg3RHBQL2kvd0UydnVwRGhHMG9qbVJ3b1pF?= =?utf-8?B?VWplMVM5R2tuSzNqdXRPeHNkdlczVnl6bFZMMzhtSllYdnZNazdvcldQYUhV?= =?utf-8?B?T3BSU3R2eW5CdTFUeXcwWkc0blRQZjlWbEh1SWJQOGlicDE3UWJCc0QxU1hY?= =?utf-8?B?ZThLaDFKVUJUUGtUM2VyUk1ETG5pSURjTXhOV1c0MGpheXlkQWFWTC9lZmJk?= =?utf-8?B?alZQYzFjcmtaU1paMzdrQWRQbG5BUmlkYzcrWWthQUF5TE5CRlVSRVVEMG0w?= =?utf-8?B?WEN2blYzT2lrMnNwcWh4QjZMY0N5a2VrR1pYbDN0K1BIdFBQWkFiM1dmeGp2?= =?utf-8?B?Z0R6OHF6VHFSem56TUsrZVM4bzdmRitqYTZmZDVFTFprM2Rwc2JQSHVGQjRZ?= =?utf-8?B?WjRlS1NHUzAySEZmSXBmNENVdWJjdmtVc2JWUnFuLytscGFDRmpJUXh4U3pU?= =?utf-8?B?NmVzRmE4N1RUc2hlV3dCQ01xbWd6andkdFJqZXg0TkhvTThDTy9iZEtQYldm?= =?utf-8?B?aHl1dWdkMUtmQVE0dzQ1ZkgvWFkxNWxCRklNdVF5QnNhZXRFYURpajFCVnU4?= =?utf-8?B?RjJ2Qy9VYTlsOXJlcjVkVDd4UFNIejAvd2pSVUpmdklmdGpocGl0Z1AyY21R?= =?utf-8?B?T3h3eFlhcVFOcWltWHo3bVJUYXJjUldzVXY1aWxEWHFqVXM5MnJ5VG9tSHRO?= =?utf-8?B?bUZiUEJVbnl0V2c3TDJoZFlCQ1NZdG54R292Y3NIVDMzVkk0NmErR3Jjay9i?= =?utf-8?B?STJsdVhiKzJvY0ZVSURJZ3JnbURLZVI5UHFTcUNaTGFEdXVEbndjWWVaWWFj?= =?utf-8?B?WVcwZ2NudzYzRFhlU3krTXh5MTB5RHpHSVBpV0I1c2RiSDNhMFNZMFBIRjgr?= =?utf-8?B?QklXaXVaNnBsemEyTHVEaFR5S0swUHUxWnZGOEllTHh1a2RoZkptWlVVYm9L?= =?utf-8?B?SGhiWVl6bUU0V0JXWDVZUkZBYmtuczN6dzNpd2ZHN09jWGd1WTR5V1NzK3Z5?= =?utf-8?B?UHFKOFBSWUJvUFZMekZzQ04xMkx6SGd2WTZjNmZDdVoyUWQzN3NhWXZHQlQ5?= =?utf-8?B?cW5CMUxReFQ1VVdqakpYQ3RCUEJ2cWxCaWlvTWFxRUpVNUU5YnV3eHNQa1ph?= =?utf-8?B?Z0t5WTZnNVhMYllvSG1xSWsyTnk3NUVFL0V3SGVZbjRGdWY3Q0VneUNEMGVj?= =?utf-8?B?RnRFQitKSEthWUlIUkg3NlFYVTJEaXBaRGVoNjNkcVJkTVhweG1iek5VYy84?= =?utf-8?B?ZGdzd05KeGQ4MnQvMHJMVjFDbzc4UUcrUjR3NjFIMHJlb3FaVWNUeFM4TTZj?= =?utf-8?B?YytIbkRYSkJ4Nm1IWkRPdjF2akZNRlUyZ2dqSGxoZUFibkdKNVQ3RFB0cEps?= =?utf-8?B?cFdtejRwMUVxYTNKVFFKWjZ3aWNDT0xEaGIxTDZmMXVMbnNpQThnamdWdlQr?= =?utf-8?B?WDNFeS9HR0xOeEkrQ0dtSmI3bUtKR3BSV0I0VzNFWWlGcDhhSXNlY1RtNFVm?= =?utf-8?B?YnFvK2dXbnU2UFp6NGZzM3Y1OUxpWlVoYTVYTVRYUHVESUhaVmJ5RXloUy9R?= =?utf-8?B?TUt0VlgxYSsrMCtmQjFIQjhZRHlGVm5lVlRHV2I3bzNnbDNBSzFhbHFIMHdZ?= =?utf-8?B?dU42TFlqMUo0TDNCdVo5RFNvWlhjRlJQTHBjbjMvS1BtUDVod2R0NGJxcmJs?= =?utf-8?B?eHJJa2pJbzM3WWNmRXE2ciszUDY4Q2RCTnRBS0c5N1F1b1YwTXFjYnJ6SXpa?= =?utf-8?B?WDBVWWNYOWNmMmFNa2RQOFBlU2daTTNHa1lOOUgyamUrMXZwU2wxTkRRZmxz?= =?utf-8?B?T0Uxckg0cnhMYkxlY2VHS0lYVmdWclorUTFxTVlab0NaazcrZWh2S1dKSTQw?= =?utf-8?B?amVwdlZ3MmlUcmZxKytXMUJJN0JsMWdmRkpOcUp3NzJ4QkhTUTNRZFlHZmRW?= =?utf-8?B?MVhTUjVlbnFsK3VoNkxpTEVLS1o4YTlCOE10dDJUcko2VVJiVGZrdEdqTGFE?= =?utf-8?B?b2E0RXJBNlNsa05zaUdCNU5MaXM2Q0dMdzFiTkd0bE90V2ZDUVQ0SlEraXpN?= =?utf-8?B?eUFPSjNPbHE1ckRRSkdBSTMzSGhETEJRSUhxRFJZaktqWlZFV25hTVp3L24r?= =?utf-8?Q?vXP0XH6aNu257HOv+cirQA3Ln?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: ericsson.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: AM8PR07MB7666.eurprd07.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 359ca86e-902d-4721-3681-08da58129b76 X-MS-Exchange-CrossTenant-originalarrivaltime: 27 Jun 2022 07:56:56.7061 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 92e84ceb-fbfd-47ab-be52-080c6b87953f X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: RIVWRpeSAyFVSkTF0IQ2yjP1KYPcX3buq+Jvo8vrQJv/PuMqpCjP6s4sCv64GHchG+1xD90u6BwrpaEcpzDhuA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0701MB2638 X-Mailman-Approved-At: Wed, 29 Jun 2022 16:55:11 +0200 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogTW9ydGVuIEJyw7hydXAg PG1iQHNtYXJ0c2hhcmVzeXN0ZW1zLmNvbT4NCj4gU2VudDogZGVuIDIzIGp1bmkgMjAyMiAxNDo1 MQ0KPiBUbzogRW1pbCBCZXJnIDxlbWlsLmJlcmdAZXJpY3Nzb24uY29tPjsgYnJ1Y2UucmljaGFy ZHNvbkBpbnRlbC5jb207DQo+IGRldkBkcGRrLm9yZw0KPiBDYzogc3RlcGhlbkBuZXR3b3JrcGx1 bWJlci5vcmc7IHN0YWJsZUBkcGRrLm9yZzsgYnVnemlsbGFAZHBkay5vcmc7DQo+IGhvZm9yc0Bs eXNhdG9yLmxpdS5zZTsgb2xpdmllci5tYXR6QDZ3aW5kLmNvbQ0KPiBTdWJqZWN0OiBSRTogW1BB VENIIHY0XSBuZXQ6IGZpeCBjaGVja3N1bSB3aXRoIHVuYWxpZ25lZCBidWZmZXINCj4gDQo+ID4g RnJvbTogTW9ydGVuIEJyw7hydXAgW21haWx0bzptYkBzbWFydHNoYXJlc3lzdGVtcy5jb21dDQo+ ID4gU2VudDogVGh1cnNkYXksIDIzIEp1bmUgMjAyMiAxNC4zOQ0KPiA+DQo+ID4gV2l0aCB0aGlz IHBhdGNoLCB0aGUgY2hlY2tzdW0gY2FuIGJlIGNhbGN1bGF0ZWQgb24gYW4gdW5hbGlnbmVkIGJ1 ZmZlci4NCj4gPiBJLmUuIHRoZSBidWYgcGFyYW1ldGVyIGlzIG5vIGxvbmdlciByZXF1aXJlZCB0 byBiZSAxNiBiaXQgYWxpZ25lZC4NCj4gPg0KPiA+IFRoZSBjaGVja3N1bSBpcyBzdGlsbCBjYWxj dWxhdGVkIHVzaW5nIGEgMTYgYml0IGFsaWduZWQgcG9pbnRlciwgc28NCj4gPiB0aGUgY29tcGls ZXIgY2FuIGF1dG8tdmVjdG9yaXplIHRoZSBmdW5jdGlvbidzIGlubmVyIGxvb3AuDQo+ID4NCj4g PiBXaGVuIHRoZSBidWZmZXIgaXMgdW5hbGlnbmVkLCB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgYnVm ZmVyIGlzIGhhbmRsZWQNCj4gPiBzZXBhcmF0ZWx5LiBGdXJ0aGVybW9yZSwgdGhlIGNhbGN1bGF0 ZWQgY2hlY2tzdW0gb2YgdGhlIGJ1ZmZlciBpcyBieXRlDQo+ID4gc2hpZnRlZCBiZWZvcmUgYmVp bmcgYWRkZWQgdG8gdGhlIGluaXRpYWwgY2hlY2tzdW0sIHRvIGNvbXBlbnNhdGUgZm9yDQo+ID4g dGhlIGNoZWNrc3VtIGhhdmluZyBiZWVuIGNhbGN1bGF0ZWQgb24gdGhlIGJ1ZmZlciBzaGlmdGVk IGJ5IG9uZSBieXRlLg0KPiA+DQo+ID4gdjQ6DQo+ID4gKiBBZGQgY29weXJpZ2h0IG5vdGljZS4N Cj4gPiAqIEluY2x1ZGUgc3RkYm9vbC5oIChFbWlsIEJlcmcpLg0KPiA+ICogVXNlIFJURV9QVFJf QUREIChFbWlsIEJlcmcpLg0KPiA+ICogRml4IG9uZSBtb3JlIHR5cG8gaW4gY29tbWl0IG1lc3Nh Z2UuIElzICd1bmxpZ25lZCcgZXZlbiBhIHdvcmQ/DQo+ID4gdjM6DQo+ID4gKiBSZW1vdmUgYnJh Y2VzIGZyb20gc2luZ2xlIHN0YXRlbWVudCBibG9jay4NCj4gPiAqIEZpeCB0eXBvIGluIGNvbW1p dCBtZXNzYWdlLg0KPiA+IHYyOg0KPiA+ICogRG8gbm90IGFzc3VtZSB0aGF0IHRoZSBidWZmZXIg aXMgcGFydCBvZiBhbiBhbGlnbmVkIHBhY2tldCBidWZmZXIuDQo+ID4NCj4gPiBCdWd6aWxsYSBJ RDogMTAzNQ0KPiA+IENjOiBzdGFibGVAZHBkay5vcmcNCj4gPg0KPiA+IFNpZ25lZC1vZmYtYnk6 IE1vcnRlbiBCcsO4cnVwIDxtYkBzbWFydHNoYXJlc3lzdGVtcy5jb20+DQo+ID4gVGVzdGVkLWJ5 OiBFbWlsIEJlcmcgPGVtaWwuYmVyZ0Blcmljc3Nvbi5jb20+DQo+ID4gLS0tDQo+ID4gIGxpYi9u ZXQvcnRlX2lwLmggfCAzMiArKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLQ0KPiA+ICAx IGZpbGUgY2hhbmdlZCwgMjcgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkNCj4gPg0KPiA+ IGRpZmYgLS1naXQgYS9saWIvbmV0L3J0ZV9pcC5oIGIvbGliL25ldC9ydGVfaXAuaCBpbmRleA0K PiA+IGI1MDI0ODE2NzAuLjczOGQ2NDNkYTAgMTAwNjQ0DQo+ID4gLS0tIGEvbGliL25ldC9ydGVf aXAuaA0KPiA+ICsrKyBiL2xpYi9uZXQvcnRlX2lwLmgNCj4gPiBAQCAtMyw2ICszLDcgQEANCj4g PiAgICogICAgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLg0K PiA+ICAgKiBDb3B5cmlnaHQoYykgMjAxMC0yMDE0IEludGVsIENvcnBvcmF0aW9uLg0KPiA+ICAg KiBDb3B5cmlnaHQoYykgMjAxNCA2V0lORCBTLkEuDQo+ID4gKyAqIENvcHlyaWdodChjKSAyMDIy IFNtYXJ0U2hhcmUgU3lzdGVtcy4NCj4gPiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4NCj4gPiAg ICovDQo+ID4NCj4gPiBAQCAtMTUsNiArMTYsNyBAQA0KPiA+ICAgKiBJUC1yZWxhdGVkIGRlZmlu ZXMNCj4gPiAgICovDQo+ID4NCj4gPiArI2luY2x1ZGUgPHN0ZGJvb2wuaD4NCj4gPiAgI2luY2x1 ZGUgPHN0ZGludC5oPg0KPiA+DQo+ID4gICNpZmRlZiBSVEVfRVhFQ19FTlZfV0lORE9XUw0KPiA+ IEBAIC0xNjIsMjAgKzE2NCw0MCBAQCBfX3J0ZV9yYXdfY2tzdW0oY29uc3Qgdm9pZCAqYnVmLCBz aXplX3QgbGVuLA0KPiA+IHVpbnQzMl90IHN1bSkgIHsNCj4gPiAgCS8qIGV4dGVuZCBzdHJpY3Qt YWxpYXNpbmcgcnVsZXMgKi8NCj4gPiAgCXR5cGVkZWYgdWludDE2X3QgX19hdHRyaWJ1dGVfXygo X19tYXlfYWxpYXNfXykpIHUxNl9wOw0KPiA+IC0JY29uc3QgdTE2X3AgKnUxNl9idWYgPSAoY29u c3QgdTE2X3AgKilidWY7DQo+ID4gLQljb25zdCB1MTZfcCAqZW5kID0gdTE2X2J1ZiArIGxlbiAv IHNpemVvZigqdTE2X2J1Zik7DQo+ID4gKwljb25zdCB1MTZfcCAqdTE2X2J1ZjsNCj4gPiArCWNv bnN0IHUxNl9wICplbmQ7DQo+ID4gKwl1aW50MzJfdCBic3VtID0gMDsNCj4gPiArCWNvbnN0IGJv b2wgdW5hbGlnbmVkID0gKHVpbnRwdHJfdClidWYgJiAxOw0KPiA+ICsNCj4gPiArCS8qIGlmIGJ1 ZmZlciBpcyB1bmFsaWduZWQsIGtlZXBpbmcgaXQgYnl0ZSBvcmRlciBpbmRlcGVuZGVudCAqLw0K PiA+ICsJaWYgKHVubGlrZWx5KHVuYWxpZ25lZCkpIHsNCj4gPiArCQl1aW50MTZfdCBmaXJzdCA9 IDA7DQo+ID4gKwkJaWYgKHVubGlrZWx5KGxlbiA9PSAwKSkNCj4gPiArCQkJcmV0dXJuIDA7DQo+ ID4gKwkJKCh1bnNpZ25lZCBjaGFyICopJmZpcnN0KVsxXSA9ICooY29uc3QgdW5zaWduZWQNCj4g Y2hhciAqKWJ1ZjsNCj4gPiArCQlic3VtICs9IGZpcnN0Ow0KPiA+ICsJCWJ1ZiA9IFJURV9QVFJf QUREKGJ1ZiwgMSk7DQo+ID4gKwkJbGVuLS07DQo+ID4gKwl9DQo+ID4NCj4gPiArCS8qIGFsaWdu ZWQgYWNjZXNzIGZvciBjb21waWxlciBhdXRvLXZlY3Rvcml6YXRpb24gKi8NCj4gPiArCXUxNl9i dWYgPSAoY29uc3QgdTE2X3AgKilidWY7DQo+ID4gKwllbmQgPSB1MTZfYnVmICsgbGVuIC8gc2l6 ZW9mKCp1MTZfYnVmKTsNCj4gPiAgCWZvciAoOyB1MTZfYnVmICE9IGVuZDsgKyt1MTZfYnVmKQ0K PiA+IC0JCXN1bSArPSAqdTE2X2J1ZjsNCj4gPiArCQlic3VtICs9ICp1MTZfYnVmOw0KPiA+DQo+ ID4gIAkvKiBpZiBsZW5ndGggaXMgb2RkLCBrZWVwaW5nIGl0IGJ5dGUgb3JkZXIgaW5kZXBlbmRl bnQgKi8NCj4gPiAgCWlmICh1bmxpa2VseShsZW4gJSAyKSkgew0KPiA+ICAJCXVpbnQxNl90IGxl ZnQgPSAwOw0KPiA+ICAJCSoodW5zaWduZWQgY2hhciAqKSZsZWZ0ID0gKihjb25zdCB1bnNpZ25l ZCBjaGFyDQo+ICopZW5kOw0KPiA+IC0JCXN1bSArPSBsZWZ0Ow0KPiA+ICsJCWJzdW0gKz0gbGVm dDsNCj4gPiAgCX0NCj4gPg0KPiA+IC0JcmV0dXJuIHN1bTsNCj4gPiArCS8qIGlmIGJ1ZmZlciBp cyB1bmFsaWduZWQsIHN3YXAgdGhlIGNoZWNrc3VtIGJ5dGVzICovDQo+ID4gKwlpZiAodW5saWtl bHkodW5hbGlnbmVkKSkNCj4gPiArCQlic3VtID0gKGJzdW0gJiAweEZGMDBGRjAwKSA+PiA4IHwg KGJzdW0gJg0KPiAweDAwRkYwMEZGKSA8PCA4Ow0KPiA+ICsNCj4gPiArCXJldHVybiBzdW0gKyBi c3VtOw0KPiA+ICB9DQo+ID4NCj4gPiAgLyoqDQo+ID4gLS0NCj4gPiAyLjE3LjENCj4gDQo+IEBF bWlsLCB0aGFuayB5b3UgZm9yIHRob3JvdWdobHkgcmV2aWV3aW5nIHRoZSBwcmV2aW91cyB2ZXJz aW9ucy4NCj4gDQo+IElmIHlvdXIgdGVzdCBzdWNjZWVkcyBhbmQgeW91IGFyZSBzYXRpc2ZpZWQg d2l0aCB0aGUgcGF0Y2gsIHJlbWVtYmVyIHRvIHJlcGx5DQo+IHdpdGggYSAiVGVzdGVkLWJ5IiB0 YWcgZm9yIHBhdGNod29yay4NCg0KVGhlIHRlc3Qgc3VjY2VlZGVkIGFuZCBJJ20gc2F0aXNmaWVk IHdpdGggdGhlIHBhdGNoLiBJIGFkZGVkICdUZXN0ZWQtYnk6IEVtaWwgQmVyZyA8ZW1pbC5iZXJn QGVyaWNzc29uLmNvbT4nIHRvIHRoZSBwYXRjaCBhYm92ZSwgaG9wZWZ1bGx5IGFzIHlvdSBpbnRl bmRlZC4NCg==