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 2C4C6A0544; Wed, 29 Jun 2022 16:55:19 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 8C67141138; Wed, 29 Jun 2022 16:55:13 +0200 (CEST) Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on2083.outbound.protection.outlook.com [40.107.21.83]) by mails.dpdk.org (Postfix) with ESMTP id 202AF400D5; Mon, 27 Jun 2022 14:46:03 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=oGiiCpm+kNZXqln2eDgLFNVR+8DCPuzJ7eDJuXO7ila1dIJNd4271zWCo+AyKzOIUvdhDlGlU1MQP716XDeVmXXMKBjdh3yXhBGyoxSKs4/xcFjF3/sh3vowR3qubXGGJZPqLIufdgbgNxhrzGXspkE8uBWEQi7EkETKcdTiccBU6FrfcBNTjpt3fyXPt5izqAgiyLpX1iWvHFBfJxSybTZkf5CDtguFk5Ej2fhFDFwmOKOdAZ7miw7mpFp5jlMyyH96yAHj00kkeBe/L4ShCffjziWGLloPvx6qflu1Zf8lH6mdsPsezPjbtVEDklNHdv2bycp8qNmFbiLSyGs+Hw== 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=2SG7aICTyJrpVOi/nKF/Rc5gc0cB9+puf9CZY+gCYmo=; b=ISUXfvP4qzP22jwrFv8rS3iFHQUQff1Cj0vaYosFIKbZH2vorOt/38aAS4agggpHm9EDbajKReS7KSCoDXc1uHCyM+hUDEtKJ/7/kJArQMli/XCEeGyeoy0KhE4+Zn4V8Su04J1H6JFyD7yAeAMo/NO+OI31lD8qWI7hJlC/SnNmV3ng6h+Syf82+ZXB9PP89RKc8A/neeMt0ofZiID9kT4bpgk5QMmTJVmS7VfEw28V9wiShqq2PjJnmgOvsIzYCr+Cx7Umxa1AANp8oHp8MTNLsEfrY3Py963Pth1W6UKehEDeV2tNX4jF6I8wcIb/HV9at8bKNt/o4GvOFH7GTg== 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=2SG7aICTyJrpVOi/nKF/Rc5gc0cB9+puf9CZY+gCYmo=; b=IxgKlAOeikX+Q8MSlfNDmYkWVlZ14/RW9ZAd4mj3b5P4cJrLS0G7ywtNBCkCRSqDi+kcWlnAbF/RQZc6YumwoORiFNGK82/dYfDMSVyJsWaKvG75+0KimJQyfaIJApNB+d0v5aF2VCmbjCJ6J+egFYq6u/M0aYVQKIqxKcMPNPM= Received: from AM8PR07MB7666.eurprd07.prod.outlook.com (2603:10a6:20b:240::23) by AS8PR07MB7335.eurprd07.prod.outlook.com (2603:10a6:20b:253::22) 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 12:46:02 +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 12:46:02 +0000 From: Emil Berg To: =?utf-8?B?TWF0dGlhcyBSw7ZubmJsb20=?= , =?utf-8?B?TW9ydGVuIEJyw7hydXA=?= , "bruce.richardson@intel.com" , "dev@dpdk.org" CC: "stephen@networkplumber.org" , "stable@dpdk.org" , "bugzilla@dpdk.org" , "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: AQHYhv48fmD0p9rOd0KzPCydzCSkQq1c8dgAgAZC+YCAAAOyYA== Date: Mon, 27 Jun 2022 12:46:01 +0000 Message-ID: References: <98CBD80474FA8B44BF855DF32C47DC35D87139@smartserver.smartshare.dk> <20220623123900.38283-1-mb@smartsharesystems.com> <98CBD80474FA8B44BF855DF32C47DC35D87169@smartserver.smartshare.dk> <9f543fc0-ae8a-067b-d13f-38a0503dd619@lysator.liu.se> In-Reply-To: <9f543fc0-ae8a-067b-d13f-38a0503dd619@lysator.liu.se> 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: 62c1693d-8ddc-4bbe-2f34-08da583afe02 x-ms-traffictypediagnostic: AS8PR07MB7335:EE_ x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: JKBdevFrfSeLI4VNaoq5RKxONs+OsdBk2hU0EbWBtvONvz3wGMamhaR2ootSLY8KFToec1GdLybM4DgMimTDcpjW0Hc3OgQSUmVbdmmmdwRiv3Mx1FStE5qZiswxL2YDbz1DwYzC/pDMdI7IXPnM9jwS8raR/Js3CxdN8AU926G1UJIRrNTCA53von/zDf2bKLQERTSrw+v+w3WYcIEINfpVtunnEPYu70WYNtt5BCfUKUJld4F7frSNSkvkU8+0F4F0x+xOw2rEhyVHndYuqud6z899wgdqt2DsIdN/2AS3AhkwQtbWEN7DjdxKO1Unl61AatULgIRk1P5861lsv/KhgnrvyX+tI+7W7Rp7/eBlenJdhoaYwcac+6dvEDuolczhzqTTG6TCPEO6JNnE1x5PbJKDBAhX6aIR87iwej8kMIqLf3+/t6mLP9ROMOgEWXqviQEryEj1m6dSK6Ktaer7u0fXnTM++5zHZxcegI/Eq2rkyY28eElxjGiTgDUQW2VjMr6F0mk06d7U8q98V6Kgl+xTCip70CCNEx1oqpVGM1F2SqYJA5AG3VjyrK9UDEGTzbt2h9oPJ9LLSnOQ1FCB/h6r9cBcGpADkkH1+sQ0W6IxDCeVapAwvrlkRAlFJWegVGrVtX8Ja1839YXdyqe8rH5YT6PbQ6lDyyDPZruWLbnIWj+DmPrSix2sGKdnmLYOqU/qt4qoCGAgNmjMbSx/Fc/yJbtgC3baTtEeFCib3u6cbnNA8Oi5kOenzGNpvP+9nC/NnTOPF31gR5YfVSflUaJ+EigUliu2nSS0nvTSsUt8tlvOzQkKo76nFUnfwylGMX8jRWYjM+YLNTrROw== 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)(366004)(346002)(136003)(396003)(39860400002)(376002)(5660300002)(52536014)(478600001)(33656002)(4326008)(8936002)(38100700002)(296002)(64756008)(55016003)(71200400001)(966005)(54906003)(110136005)(316002)(44832011)(66556008)(66446008)(66946007)(2906002)(66476007)(86362001)(122000001)(53546011)(83380400001)(6506007)(8676002)(66574015)(26005)(7696005)(186003)(41300700001)(82960400001)(38070700005)(9686003)(76116006); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?ejJabnZqbDRQU24ydWlkUnhKZ1lrLzFtMXFhc2RxZGlMdkloQ0FpZzhUeUpj?= =?utf-8?B?alFKOG83VzlkWDFreTU3SVpCN3gvQnVYaEFvTFBSaXEvOUxiZ1ZNaDRPaTZi?= =?utf-8?B?WjQ3Y3hwOGsvK1VwZWdQQ2YvRmlQR3pQQkN1ajBxMmxnTnE3TjNwS3FsT3dw?= =?utf-8?B?YXlNMUVtYVgwWDYrNU1LdER3UFczNFBqb3Y2ZVRPQWZzUU11b2VxRERycGNI?= =?utf-8?B?aHZ5MGRsTy9QZjBBOEIvTUp4OUpDYSthaFRmKzVHS0U3SHFkRUhxeUVMdGYx?= =?utf-8?B?RWdCdTM3MVNoUzlmK2VQQTFRd2dMN1o1bTNnM2dqdUt6RWF0dXVKbjhLWGtY?= =?utf-8?B?dnBCNWZIODdLc2szdVh0WWtnWGxFT2hvYXh2cGFOd2hKdzJGZzg5dnpzQ0Rz?= =?utf-8?B?VzMweEoyNSt5aTJMelBzQ2hYYkJYSTJnQWszV3BFdTZOdVBCM2c0S2FzMTdk?= =?utf-8?B?U2c2TCtQRnpTNlYzWnBpaWlUSlVSMzIxY1JsZVhUNHp5MllEc0duZTlSemJX?= =?utf-8?B?cnoyamRpUnM1Q0lFZ2JOZjJTZGkzcHZ1ZGhBWXlVcjZBWkU1WlZWaUtVWnNi?= =?utf-8?B?YnJVMU5kQUx2UmJKS2tWRS92ekNUUjVaOWloMzFXWlRLemFlUTZlOWxISFNz?= =?utf-8?B?Z3p4VEV6T2NENzU2Tmc4eStxUWRqeE1IY2VwdVlQQlF5RzIyYW5SM0FjQ3Zw?= =?utf-8?B?UTNyQXZTb2ZNZmFYUFlqa1ZXVWxUYnErb0RlamRCdlJrQ1o3alRRWXVJOFFC?= =?utf-8?B?bGh6Ynlmd0lXa2tXdy9vV2hibFpmQUxwcmxGOGNXM01DNEhEa21tYVRYeXRP?= =?utf-8?B?eTdmNXBQdW11VWZGOWNzR1Z3bEo2VVdTbWUxQXVBcmhaeXllcE12akxpZmo1?= =?utf-8?B?MytxNGxTb0hTTjlHa2lobnhab2QrRWY0TEJQWDF1aXVRbWdpWmFpOW4xaXlx?= =?utf-8?B?TmFBbHhUOWRMTld5bW5RdWhIc2tmOHF2WnliT2JmSzlNaFl1aGU2R2dqZ1hG?= =?utf-8?B?Ym9ianV2U0Fka1ZYcDA0TXFCSFJzeWxXbE5aQmp6Z1JpUnZmM1IwbjhIWHU1?= =?utf-8?B?UGVuUkxSMnhMMnZWSkRKUTIxR3o0ZGs3b3lBZ0lQV210OTBpSUlzYllra1gv?= =?utf-8?B?a0lZSVpsV2NPSEpXNDY0eTBObDRtRTZjWHZzeWpIZWFpYkhLdVE1SXBLUExH?= =?utf-8?B?dk80M1JTTTVCcUM3cVYyb00rZGVhb2ZGZUdNWWpzWW9KSERQK3FvQ2hnUWVJ?= =?utf-8?B?eUMxa0ladlc5QkxnWjZzM3h2THNoWnpQWUk1UGt3ZXhPWHFxeThhZlVUSzhq?= =?utf-8?B?K1ZjNEFBTFdPcFlXV0phZlY5MUdHdTRISUF6cWxSWkdkdFo4Zzl2TFRUVTli?= =?utf-8?B?RE5PaHRnR0Z4ZGVLVUY5U0g1Z01FdkUrd1dzUlYyQTl4ZVNJNlNvT2hCSWkv?= =?utf-8?B?QzJLVWlsdXUvdjkyVUEyckdLWG5URVYrUTR3Rmo1Ti9KTTV4cFVDTXk4SXlQ?= =?utf-8?B?ZGxEdGN5TG9uSmpzazErZGVEdjhzRzF1ZCtaRWZrZDBqRjlKVDRNU3hBU1pm?= =?utf-8?B?RVlIaVkxK2hOVkNtVUxLYU5HZUhwODJaN0VseGNRZVdpTEVBMThKQ0NHZlFW?= =?utf-8?B?bkFvdjJzbVpsUTE0Z2ttWWFqbGxKRUZaVFQydjdJTXZuV0cwSFpnMHBwZStj?= =?utf-8?B?T0FQYzB5SEE0TEc5TlZDeHJ3dFZyZ1dGd2JvdGt2Sm5rUkFLRDcyNUtIT3Br?= =?utf-8?B?TzByUVVjNkZwV1ZpOE1LTnpKS1ZsUEZUVFVPSEoxVFZGWVJQbUE5c0FCemxo?= =?utf-8?B?ZGhmb3JlY29TT0ZLZXJBQitxaUpqdUxLQ1k2cTFqRWRMZjRNOVViOExvUDMx?= =?utf-8?B?ZVBjWEpvZGVweTgweE5LYlZqS1dkdU15TkFYUlR2UkFLSWdaenZNbGlaSHJG?= =?utf-8?B?WHJjQWdEcWU2dHJHQ3FvZGdCSXJUa3FwQld3MmpzYXB2d3pKSzN5OVNrWEJF?= =?utf-8?B?MWQrejVMTHc2R25MY2Q5bHpRSUlsQ0dHRklQVUxaU05SN25BYjNSdVNYM3hz?= =?utf-8?B?ZGROZ2JRYytIWE9uRGlmb3FnYk4yL2RnYjB5ODJYTFZyS1JvMWpybzJKQXBU?= =?utf-8?Q?Rdb4s30CTzSZ5aHqz5ieA7xWG?= 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: 62c1693d-8ddc-4bbe-2f34-08da583afe02 X-MS-Exchange-CrossTenant-originalarrivaltime: 27 Jun 2022 12:46:01.8781 (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: /yy6p123kjGK1BOtYkvkQH3nRW6BJ7r79b21NaXfJTtkWpT5TVdd3XjdDrcEmf+0g5t+kxywzDRcSB8+ksdgBQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR07MB7335 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 DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogTWF0dGlhcyBSw7ZubmJs b20gPGhvZm9yc0BseXNhdG9yLmxpdS5zZT4NCj4gU2VudDogZGVuIDI3IGp1bmkgMjAyMiAxNDoy OA0KPiBUbzogTW9ydGVuIEJyw7hydXAgPG1iQHNtYXJ0c2hhcmVzeXN0ZW1zLmNvbT47IEVtaWwg QmVyZw0KPiA8ZW1pbC5iZXJnQGVyaWNzc29uLmNvbT47IGJydWNlLnJpY2hhcmRzb25AaW50ZWwu Y29tOyBkZXZAZHBkay5vcmcNCj4gQ2M6IHN0ZXBoZW5AbmV0d29ya3BsdW1iZXIub3JnOyBzdGFi bGVAZHBkay5vcmc7IGJ1Z3ppbGxhQGRwZGsub3JnOw0KPiBvbGl2aWVyLm1hdHpANndpbmQuY29t DQo+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggdjRdIG5ldDogZml4IGNoZWNrc3VtIHdpdGggdW5hbGln bmVkIGJ1ZmZlcg0KPiANCj4gT24gMjAyMi0wNi0yMyAxNDo1MSwgTW9ydGVuIEJyw7hydXAgd3Jv dGU6DQo+ID4+IEZyb206IE1vcnRlbiBCcsO4cnVwIFttYWlsdG86bWJAc21hcnRzaGFyZXN5c3Rl bXMuY29tXQ0KPiA+PiBTZW50OiBUaHVyc2RheSwgMjMgSnVuZSAyMDIyIDE0LjM5DQo+ID4+DQo+ ID4+IFdpdGggdGhpcyBwYXRjaCwgdGhlIGNoZWNrc3VtIGNhbiBiZSBjYWxjdWxhdGVkIG9uIGFu IHVuYWxpZ25lZCBidWZmZXIuDQo+ID4+IEkuZS4gdGhlIGJ1ZiBwYXJhbWV0ZXIgaXMgbm8gbG9u Z2VyIHJlcXVpcmVkIHRvIGJlIDE2IGJpdCBhbGlnbmVkLg0KPiA+Pg0KPiA+PiBUaGUgY2hlY2tz dW0gaXMgc3RpbGwgY2FsY3VsYXRlZCB1c2luZyBhIDE2IGJpdCBhbGlnbmVkIHBvaW50ZXIsIHNv DQo+ID4+IHRoZSBjb21waWxlciBjYW4gYXV0by12ZWN0b3JpemUgdGhlIGZ1bmN0aW9uJ3MgaW5u ZXIgbG9vcC4NCj4gPj4NCj4gPj4gV2hlbiB0aGUgYnVmZmVyIGlzIHVuYWxpZ25lZCwgdGhlIGZp cnN0IGJ5dGUgb2YgdGhlIGJ1ZmZlciBpcyBoYW5kbGVkDQo+ID4+IHNlcGFyYXRlbHkuIEZ1cnRo ZXJtb3JlLCB0aGUgY2FsY3VsYXRlZCBjaGVja3N1bSBvZiB0aGUgYnVmZmVyIGlzDQo+ID4+IGJ5 dGUgc2hpZnRlZCBiZWZvcmUgYmVpbmcgYWRkZWQgdG8gdGhlIGluaXRpYWwgY2hlY2tzdW0sIHRv DQo+ID4+IGNvbXBlbnNhdGUgZm9yIHRoZSBjaGVja3N1bSBoYXZpbmcgYmVlbiBjYWxjdWxhdGVk IG9uIHRoZSBidWZmZXINCj4gPj4gc2hpZnRlZCBieSBvbmUgYnl0ZS4NCj4gPj4NCj4gPj4gdjQ6 DQo+ID4+ICogQWRkIGNvcHlyaWdodCBub3RpY2UuDQo+ID4+ICogSW5jbHVkZSBzdGRib29sLmgg KEVtaWwgQmVyZykuDQo+ID4+ICogVXNlIFJURV9QVFJfQUREIChFbWlsIEJlcmcpLg0KPiA+PiAq IEZpeCBvbmUgbW9yZSB0eXBvIGluIGNvbW1pdCBtZXNzYWdlLiBJcyAndW5saWduZWQnIGV2ZW4g YSB3b3JkPw0KPiA+PiB2MzoNCj4gPj4gKiBSZW1vdmUgYnJhY2VzIGZyb20gc2luZ2xlIHN0YXRl bWVudCBibG9jay4NCj4gPj4gKiBGaXggdHlwbyBpbiBjb21taXQgbWVzc2FnZS4NCj4gPj4gdjI6 DQo+ID4+ICogRG8gbm90IGFzc3VtZSB0aGF0IHRoZSBidWZmZXIgaXMgcGFydCBvZiBhbiBhbGln bmVkIHBhY2tldCBidWZmZXIuDQo+ID4+DQo+ID4+IEJ1Z3ppbGxhIElEOiAxMDM1DQo+ID4+IENj OiBzdGFibGVAZHBkay5vcmcNCj4gPj4NCj4gPj4gU2lnbmVkLW9mZi1ieTogTW9ydGVuIEJyw7hy dXAgPG1iQHNtYXJ0c2hhcmVzeXN0ZW1zLmNvbT4NCj4gPj4gLS0tDQo+ID4+ICAgbGliL25ldC9y dGVfaXAuaCB8IDMyICsrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tDQo+ID4+ICAgMSBm aWxlIGNoYW5nZWQsIDI3IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pDQo+ID4+DQo+ID4+ IGRpZmYgLS1naXQgYS9saWIvbmV0L3J0ZV9pcC5oIGIvbGliL25ldC9ydGVfaXAuaCBpbmRleA0K PiA+PiBiNTAyNDgxNjcwLi43MzhkNjQzZGEwIDEwMDY0NA0KPiA+PiAtLS0gYS9saWIvbmV0L3J0 ZV9pcC5oDQo+ID4+ICsrKyBiL2xpYi9uZXQvcnRlX2lwLmgNCj4gPj4gQEAgLTMsNiArMyw3IEBA DQo+ID4+ICAgICogICAgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9y bmlhLg0KPiA+PiAgICAqIENvcHlyaWdodChjKSAyMDEwLTIwMTQgSW50ZWwgQ29ycG9yYXRpb24u DQo+ID4+ICAgICogQ29weXJpZ2h0KGMpIDIwMTQgNldJTkQgUy5BLg0KPiA+PiArICogQ29weXJp Z2h0KGMpIDIwMjIgU21hcnRTaGFyZSBTeXN0ZW1zLg0KPiA+PiAgICAqIEFsbCByaWdodHMgcmVz ZXJ2ZWQuDQo+ID4+ICAgICovDQo+ID4+DQo+ID4+IEBAIC0xNSw2ICsxNiw3IEBADQo+ID4+ICAg ICogSVAtcmVsYXRlZCBkZWZpbmVzDQo+ID4+ICAgICovDQo+ID4+DQo+ID4+ICsjaW5jbHVkZSA8 c3RkYm9vbC5oPg0KPiA+PiAgICNpbmNsdWRlIDxzdGRpbnQuaD4NCj4gPj4NCj4gPj4gICAjaWZk ZWYgUlRFX0VYRUNfRU5WX1dJTkRPV1MNCj4gPj4gQEAgLTE2MiwyMCArMTY0LDQwIEBAIF9fcnRl X3Jhd19ja3N1bShjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4sDQo+ID4+IHVpbnQzMl90IHN1 bSkNCj4gPj4gICB7DQo+ID4+ICAgCS8qIGV4dGVuZCBzdHJpY3QtYWxpYXNpbmcgcnVsZXMgKi8N Cj4gPj4gICAJdHlwZWRlZiB1aW50MTZfdCBfX2F0dHJpYnV0ZV9fKChfX21heV9hbGlhc19fKSkg dTE2X3A7DQo+ID4+IC0JY29uc3QgdTE2X3AgKnUxNl9idWYgPSAoY29uc3QgdTE2X3AgKilidWY7 DQo+ID4+IC0JY29uc3QgdTE2X3AgKmVuZCA9IHUxNl9idWYgKyBsZW4gLyBzaXplb2YoKnUxNl9i dWYpOw0KPiA+PiArCWNvbnN0IHUxNl9wICp1MTZfYnVmOw0KPiA+PiArCWNvbnN0IHUxNl9wICpl bmQ7DQo+ID4+ICsJdWludDMyX3QgYnN1bSA9IDA7DQo+ID4+ICsJY29uc3QgYm9vbCB1bmFsaWdu ZWQgPSAodWludHB0cl90KWJ1ZiAmIDE7DQo+ID4+ICsNCj4gPj4gKwkvKiBpZiBidWZmZXIgaXMg dW5hbGlnbmVkLCBrZWVwaW5nIGl0IGJ5dGUgb3JkZXIgaW5kZXBlbmRlbnQgKi8NCj4gPj4gKwlp ZiAodW5saWtlbHkodW5hbGlnbmVkKSkgew0KPiA+PiArCQl1aW50MTZfdCBmaXJzdCA9IDA7DQo+ ID4+ICsJCWlmICh1bmxpa2VseShsZW4gPT0gMCkpDQo+ID4+ICsJCQlyZXR1cm4gMDsNCj4gPj4g KwkJKCh1bnNpZ25lZCBjaGFyICopJmZpcnN0KVsxXSA9ICooY29uc3QgdW5zaWduZWQNCj4gY2hh ciAqKWJ1ZjsNCj4gPj4gKwkJYnN1bSArPSBmaXJzdDsNCj4gPj4gKwkJYnVmID0gUlRFX1BUUl9B REQoYnVmLCAxKTsNCj4gPj4gKwkJbGVuLS07DQo+ID4+ICsJfQ0KPiA+Pg0KPiA+PiArCS8qIGFs aWduZWQgYWNjZXNzIGZvciBjb21waWxlciBhdXRvLXZlY3Rvcml6YXRpb24gKi8NCj4gDQo+IFRo ZSBjb21waWxlciB3aWxsIGJlIGFibGUgdG8gYXV0byB2ZWN0b3JpemUgZXZlbiB1bmFsaWduZWQg YWNjZXNzZXMsIGp1c3Qgd2l0aA0KPiBkaWZmZXJlbnQgaW5zdHJ1Y3Rpb25zLiBGcm9tIHdoYXQg SSBjYW4gdGVsbCwgdGhlcmUncyBubyBwZXJmb3JtYW5jZSBpbXBhY3QsIGF0DQo+IGxlYXN0IG5v dCBvbiB0aGUgeDg2XzY0IHN5c3RlbXMgSSB0cmllZCBvbi4NCj4gDQo+IEkgdGhpbmsgeW91IHNo b3VsZCByZW1vdmUgdGhlIGZpcnN0IHNwZWNpYWwgY2FzZSBjb25kaXRpb25hbCBhbmQgdXNlDQo+ IG1lbWNweSgpIGluc3RlYWQgb2YgdGhlIGN1bWJlcnNvbWUgX19tYXlfYWxpYXNfXyBjb25zdHJ1 Y3QgdG8gcmV0cmlldmUNCj4gdGhlIGRhdGEuDQo+IA0KDQpIZXJlOg0KaHR0cHM6Ly93d3cuYWdu ZXIub3JnL29wdGltaXplL2luc3RydWN0aW9uX3RhYmxlcy5wZGYNCml0IGxpc3RzIHRoZSBsYXRl bmN5IG9mIHZtb3ZkcWEgKGFsaWduZWQpIGFzIDYgY3ljbGVzIGFuZCB0aGUgbGF0ZW5jeSBmb3Ig dm1vdmRxdSAodW5hbGlnbmVkKSBhcyA3IGN5Y2xlcy4gU28gSSBndWVzcyB0aGVyZSBjYW4gYmUg c29tZSBkaWZmZXJlbmNlLg0KQWx0aG91Z2ggaW4gcHJhY3RpY2UgSSdtIG5vdCBzdXJlIHdoYXQg ZGlmZmVyZW5jZSBpdCBtYWtlcy4gSSd2ZSBub3Qgc2VlbiBhbnkgZGlmZmVyZW5jZSBpbiBydW50 aW1lIGJldHdlZW4gdGhlIHR3byB2ZXJzaW9ucy4NCg0KPiA+PiArCXUxNl9idWYgPSAoY29uc3Qg dTE2X3AgKilidWY7DQo+ID4+ICsJZW5kID0gdTE2X2J1ZiArIGxlbiAvIHNpemVvZigqdTE2X2J1 Zik7DQo+ID4+ICAgCWZvciAoOyB1MTZfYnVmICE9IGVuZDsgKyt1MTZfYnVmKQ0KPiA+PiAtCQlz dW0gKz0gKnUxNl9idWY7DQo+ID4+ICsJCWJzdW0gKz0gKnUxNl9idWY7DQo+ID4+DQo+ID4+ICAg CS8qIGlmIGxlbmd0aCBpcyBvZGQsIGtlZXBpbmcgaXQgYnl0ZSBvcmRlciBpbmRlcGVuZGVudCAq Lw0KPiA+PiAgIAlpZiAodW5saWtlbHkobGVuICUgMikpIHsNCj4gPj4gICAJCXVpbnQxNl90IGxl ZnQgPSAwOw0KPiA+PiAgIAkJKih1bnNpZ25lZCBjaGFyICopJmxlZnQgPSAqKGNvbnN0IHVuc2ln bmVkIGNoYXINCj4gKillbmQ7DQo+ID4+IC0JCXN1bSArPSBsZWZ0Ow0KPiA+PiArCQlic3VtICs9 IGxlZnQ7DQo+ID4+ICAgCX0NCj4gPj4NCj4gPj4gLQlyZXR1cm4gc3VtOw0KPiA+PiArCS8qIGlm IGJ1ZmZlciBpcyB1bmFsaWduZWQsIHN3YXAgdGhlIGNoZWNrc3VtIGJ5dGVzICovDQo+ID4+ICsJ aWYgKHVubGlrZWx5KHVuYWxpZ25lZCkpDQo+ID4+ICsJCWJzdW0gPSAoYnN1bSAmIDB4RkYwMEZG MDApID4+IDggfCAoYnN1bSAmDQo+IDB4MDBGRjAwRkYpIDw8IDg7DQo+ID4+ICsNCj4gPj4gKwly ZXR1cm4gc3VtICsgYnN1bTsNCj4gPj4gICB9DQo+ID4+DQo+ID4+ICAgLyoqDQo+ID4+IC0tDQo+ ID4+IDIuMTcuMQ0KPiA+DQo+ID4gQEVtaWwsIHRoYW5rIHlvdSBmb3IgdGhvcm91Z2hseSByZXZp ZXdpbmcgdGhlIHByZXZpb3VzIHZlcnNpb25zLg0KPiA+DQo+ID4gSWYgeW91ciB0ZXN0IHN1Y2Nl ZWRzIGFuZCB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHRoZSBwYXRjaCwgcmVtZW1iZXIgdG8NCj4g cmVwbHkgd2l0aCBhICJUZXN0ZWQtYnkiIHRhZyBmb3IgcGF0Y2h3b3JrLg0KPiA+DQo=