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 mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by smtp.lore.kernel.org (Postfix) with ESMTP id EC5FAC561E6 for ; Thu, 6 Aug 2026 07:44:01 +0000 (UTC) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 033A040276; Thu, 6 Aug 2026 09:44:01 +0200 (CEST) Received: from frasgout.his.huawei.com (frasgout.his.huawei.com [185.176.79.56]) by mails.dpdk.org (Postfix) with ESMTP id 26EC240262 for ; Thu, 6 Aug 2026 09:43:58 +0200 (CEST) dkim-signature: v=1; a=rsa-sha256; d=huawei.com; s=dkim; c=relaxed/relaxed; q=dns/txt; h=From; bh=0shH8IHXkC23lPUf819IpdtP0xcFQff6qw/i5ClSXnY=; b=nH4bOR4vbe2UzIv3L8fjF3UtmcKBx3eA2Kjv/VbdLCzD85Y5MQm2F/yHsBswLISNyoGQ7oY1c Z1mIa7HRb18ScP7a4Vv4xMzPbxLwfzFO5bnAB0kpenMZ6bm0fq2T6wFVFeKRBsnCeXw0fwJc+Rv xEWQhJVlOKlZXmSwnUWAsx4= Received: from mail.maildlp.com (unknown [172.18.224.83]) by frasgout.his.huawei.com (SkyGuard) with ESMTPS id 4hFzlx5BWlzJ46Y0; Thu, 6 Aug 2026 15:43:09 +0800 (CST) Received: from dubpeml100001.china.huawei.com (unknown [7.214.144.137]) by mail.maildlp.com (Postfix) with ESMTPS id 0820F4057C; Thu, 6 Aug 2026 15:43:56 +0800 (CST) Received: from dubpemt500001.china.huawei.com (7.214.144.77) by dubpeml100001.china.huawei.com (7.214.144.137) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.36; Thu, 6 Aug 2026 08:43:55 +0100 Received: from dubpeml100001.china.huawei.com (7.214.144.137) by dubpemt500001.china.huawei.com (7.214.144.77) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.11; Thu, 6 Aug 2026 08:43:55 +0100 Received: from dubpeml100001.china.huawei.com ([7.214.144.137]) by dubpeml100001.china.huawei.com ([7.214.144.137]) with mapi id 15.02.1544.036; Thu, 6 Aug 2026 08:43:55 +0100 From: Konstantin Ananyev To: =?utf-8?B?TW9ydGVuIEJyw7hydXA=?= , "dev@dpdk.org" , Bruce Richardson Subject: RE: [PATCH] eal/x86: optimize memcpy of small 64-byte blocks Thread-Topic: [PATCH] eal/x86: optimize memcpy of small 64-byte blocks Thread-Index: AQHdJB42oNL4gJj070KJtRurBEIGmLaPr9wwgAAtNBCAAMJesA== Date: Thu, 6 Aug 2026 07:43:55 +0000 Message-ID: <9c250894e50044dea22f5f5aace72dfb@huawei.com> References: <20260804143305.1344327-1-mb@smartsharesystems.com> <98CBD80474FA8B44BF855DF32C47DC35F659C2@smartserver.smartshare.dk> In-Reply-To: <98CBD80474FA8B44BF855DF32C47DC35F659C2@smartserver.smartshare.dk> Accept-Language: en-GB, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.126.173.237] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 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 DQoNCj4gPiA+IFRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgY29weWluZyA2NC1ieXRlIGJsb2NrcyB1 cCB0byA1MTIgKG9yIDI1NikNCj4gPiBieXRlcw0KPiA+ID4gZG9lcyBub3QgZGVwZW5kIG9uIGFk ZHJlc3MgYWxpZ25tZW50IHdpdGggdGhlIHNpemUgb2YgdGhlIENQVSdzDQo+ID4gdmVjdG9yDQo+ ID4gPiByZWdpc3RlcnMsIGJ1dCBpcyBpbXBsZW1lbnRlZCBpbiBib3RoIHVuYWxpZ25lZCBhbmQg YWxpZ25lZCBjb3B5DQo+ID4gPiBmdW5jdGlvbnMuDQo+ID4gPiBUaGUgbWFpbiBydGVfbWVtY3B5 KCkgZnVuY3Rpb24gd2FzIHVwZGF0ZWQsIHNvDQo+ID4gPiBpZiB0aGUgY29weSBzaXplIGlzIGtu b3duIGF0IGNvbXBpbGUgdGltZSBhbmQgdGhlIG90aGVyIGNyaXRlcmlhDQo+ID4gbWF0Y2gsDQo+ ID4gPiB0aGUgY29weSBpcyBwZXJmb3JtZWQgd2l0aG91dCBjaGVja2luZyBhbGlnbm1lbnQgcmVx dWlyZW1lbnRzLg0KPiA+ID4gVGhpcyBwcm92aWRlcyB0d28gYmVuZWZpdHMgd2hlbiB0aGUgb3B0 aW1pemF0aW9uIGNvbWVzIGludG8gcGxheToNCj4gPiA+IDEuIEEgcGVyZm9ybWFuY2UgZ2Fpbiwg YmVjYXVzZSB0aGUgYWRkcmVzcyBhbGlnbm1lbnQgY2hlY2sgaXMNCj4gPiBhdm9pZGVkLg0KPiA+ ID4gMy4gUmVkdWNlZCBpbnN0cnVjdGlvbiBtZW1vcnkgZm9vdHByaW50LCBiZWNhdXNlIHRoZSBj b21waWxlciBvbmx5DQo+ID4gPiBnZW5lcmF0ZXMgb25lIGluc3RhbmNlIG9mIHRoZSBmdW5jdGlv biBmb3IgY29weWluZywgaW5zdGVhZCBvZiB0d28NCj4gPiA+IGluc3RhbmNlcyAob25lIGluIHRo ZSB1bmFsaWduZWQgY29weSBmdW5jdGlvbiwgYW5kIG9uZSBpbiB0aGUgYWxpZ25lZA0KPiA+ID4g Y29weSBmdW5jdGlvbikuDQo+ID4gPg0KPiA+ID4gRnVydGhlcm1vcmUsIHRoZSB0ZW1wb3Jhcnkg YWxpZ25tZW50IG1hc2sgZGVmaW5pdGlvbiAoQUxJR05NRU5UX01BU0spDQo+ID4gPiB3YXMgcHJl Zml4ZWQgYnkgUlRFX01FTUNQWV8gdG8gcHJldmVudCBwb3RlbnRpYWwgbmFtZXNwYWNlIGNvbGxp c2lvbi4NCj4gPiA+DQo+ID4gPiBBbmQgZmluYWxseSwgdGhlIHN1cGVyZmx1b3VzIGZ1bmN0aW9u IGRlY2xhcmF0aW9uIGF0IHRoZSB0b3Agb2YgdGhlDQo+ID4gPiBmaWxlIHdhcyByZW1vdmVkLCBh bmQgaXRzIGRlc2NyaXB0aW9uIHdhcyBtb3ZlZCB0byB0aGUgZnVuY3Rpb24NCj4gPiA+IGRlZmlu aXRpb24uDQo+ID4gPiBUaGlzIGltcHJvdmVzIHNlYXJjaCByZXN1bHRzIHdpdGggc291cmNlIGNv ZGUgYnJvd3NlcnMuDQo+ID4gPg0KPiA+ID4gU2lnbmVkLW9mZi1ieTogTW9ydGVuIEJyw7hydXAg PG1iQHNtYXJ0c2hhcmVzeXN0ZW1zLmNvbT4NCj4gPiA+IC0tLQ0KPiA+ID4gIGxpYi9lYWwveDg2 L2luY2x1ZGUvcnRlX21lbWNweS5oIHwgNjQgKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0t DQo+ID4gLS0NCj4gPiA+ICAxIGZpbGUgY2hhbmdlZCwgNDQgaW5zZXJ0aW9ucygrKSwgMjAgZGVs ZXRpb25zKC0pDQo+ID4gPg0KPiA+ID4gZGlmZiAtLWdpdCBhL2xpYi9lYWwveDg2L2luY2x1ZGUv cnRlX21lbWNweS5oDQo+ID4gPiBiL2xpYi9lYWwveDg2L2luY2x1ZGUvcnRlX21lbWNweS5oDQo+ ID4gPiBpbmRleCA4ZWQ4YzU1MDEwLi5jZTVhNTVjMzZmIDEwMDY0NA0KPiA+ID4gLS0tIGEvbGli L2VhbC94ODYvaW5jbHVkZS9ydGVfbWVtY3B5LmgNCj4gPiA+ICsrKyBiL2xpYi9lYWwveDg2L2lu Y2x1ZGUvcnRlX21lbWNweS5oDQo+ID4gPiBAQCAtMzIsMjEgKzMyLDYgQEAgZXh0ZXJuICJDIiB7 DQo+ID4gPiAgI2RlZmluZSBSVEVfTUVNQ1BZX0FWWA0KPiA+ID4gICNlbmRpZg0KPiA+ID4NCj4g PiA+IC0vKioNCj4gPiA+IC0gKiBDb3B5IGJ5dGVzIGZyb20gb25lIGxvY2F0aW9uIHRvIGFub3Ro ZXIuIFRoZSBsb2NhdGlvbnMgbXVzdCBub3QNCj4gPiBvdmVybGFwLg0KPiA+ID4gLSAqDQo+ID4g PiAtICogQHBhcmFtIGRzdA0KPiA+ID4gLSAqICAgUG9pbnRlciB0byB0aGUgZGVzdGluYXRpb24g b2YgdGhlIGRhdGEuDQo+ID4gPiAtICogQHBhcmFtIHNyYw0KPiA+ID4gLSAqICAgUG9pbnRlciB0 byB0aGUgc291cmNlIGRhdGEuDQo+ID4gPiAtICogQHBhcmFtIG4NCj4gPiA+IC0gKiAgIE51bWJl ciBvZiBieXRlcyB0byBjb3B5Lg0KPiA+ID4gLSAqIEByZXR1cm4NCj4gPiA+IC0gKiAgIFBvaW50 ZXIgdG8gdGhlIGRlc3RpbmF0aW9uIGRhdGEuDQo+ID4gPiAtICovDQo+ID4gPiAtc3RhdGljIF9f cnRlX2Fsd2F5c19pbmxpbmUgdm9pZCAqDQo+ID4gPiAtcnRlX21lbWNweSh2b2lkICpfX3J0ZV9y ZXN0cmljdCBkc3QsIGNvbnN0IHZvaWQgKl9fcnRlX3Jlc3RyaWN0IHNyYywNCj4gPiBzaXplX3Qg bik7DQo+ID4gPiAtDQo+ID4gPiAgLyoqDQo+ID4gPiAgICogQ29weSBieXRlcyBmcm9tIG9uZSBs b2NhdGlvbiB0byBhbm90aGVyLA0KPiA+ID4gICAqIGxvY2F0aW9ucyBtdXN0IG5vdCBvdmVybGFw Lg0KPiA+ID4gQEAgLTE4Nyw3ICsxNzIsOCBAQCBydGVfbW92MjU2KHVpbnQ4X3QgKl9fcnRlX3Jl c3RyaWN0IGRzdCwgY29uc3QNCj4gPiB1aW50OF90DQo+ID4gPiAqX19ydGVfcmVzdHJpY3Qgc3Jj KQ0KPiA+ID4gICAqIEFWWDUxMiBpbXBsZW1lbnRhdGlvbiBiZWxvdw0KPiA+ID4gICAqLw0KPiA+ ID4NCj4gPiA+IC0jZGVmaW5lIEFMSUdOTUVOVF9NQVNLIDB4M0YNCj4gPiA+ICsjZGVmaW5lIFJU RV9NRU1DUFlfQUxJR05NRU5UX01BU0sgMHgzRg0KPiA+ID4gKyNkZWZpbmUgUlRFX01FTUNQWV9C TE9DS182NF9NQVggNTEyDQo+ID4gPg0KPiA+ID4gIC8qKg0KPiA+ID4gICAqIENvcHkgMTI4LWJ5 dGUgYmxvY2tzIGZyb20gb25lIGxvY2F0aW9uIHRvIGFub3RoZXIsDQo+ID4gPiBAQCAtMzMzLDcg KzMxOSw4IEBAIHJ0ZV9tZW1jcHlfZ2VuZXJpY19tb3JlX3RoYW5fNjQodm9pZA0KPiA+ICpfX3J0 ZV9yZXN0cmljdA0KPiA+ID4gZHN0LCBjb25zdCB2b2lkICpfX3J0ZV9yZXN0DQo+ID4gPiAgICog QVZYIGltcGxlbWVudGF0aW9uIGJlbG93DQo+ID4gPiAgICovDQo+ID4gPg0KPiA+ID4gLSNkZWZp bmUgQUxJR05NRU5UX01BU0sgMHgxRg0KPiA+ID4gKyNkZWZpbmUgUlRFX01FTUNQWV9BTElHTk1F TlRfTUFTSyAweDFGDQo+ID4gPiArI2RlZmluZSBSVEVfTUVNQ1BZX0JMT0NLXzY0X01BWCAyNTYN Cj4gPg0KPiA+IFdvbmRlciB3aHkgQkxPQ0tfNjRfTUFYIGlzIDUxMiBmb3IgU1NFIGFuZCBBVlg1 MTIsIGJ1dCAyNTYgZm9yIEFWWDI/DQo+ID4gU29tZSBlbXBpcmljYWwgZGF0YSBvciAuLi4/DQo+ IA0KPiBJIHdvbmRlciB0b28uDQo+IEludGVsIHdyb3RlIGl0IHRoYXQgd2F5Lg0KPiBJIGNvbnNp ZGVyZWQgY29uc29saWRhdGluZyBvbiA1MTIgZm9yIHNpbXBsaWNpdHkuDQo+IEJ1dCB0aGVuIEkg d291bGQgYmUgY2hhbmdpbmcgdGhlIGFsZ29yaXRobSB3aXRob3V0IGFueSBkYXRhIHRvIHN1cHBv cnQgdGhlDQo+IGNoYW5nZS4NCj4gDQo+IE5vdyB5b3UgdGlja2xlZCBteSBjdXJpb3NpdHksIHNv IEkgd2VudCBodW50aW5nLi4uDQo+IEl0IHdhcyA1MTIgdW50aWwgRFBESyAxNi4wNCwgYnV0IGlu IDE2LjA3IGl0IHdhcyBjaGFuZ2VkIHRvIDI1NiB3aXRoIHRoaXMgcGF0Y2g6DQo+IGh0dHBzOi8v Z2l0aHViLmNvbS9EUERLL2RwZGsvY29tbWl0LzRiNDJlOTBlZjBlNDIxZGM3NzdmMmIyZTM3N2Vi MjM3Y2QNCj4gMzY3NWZhDQoNCkludGVyZXN0aW5nLCBzbyB5b3UganVzdCBmb2xsb3dlZCB0aGUg bG9naWMgaW4gdmFyaW91cyAgcnRlX21lbWNweV9nZW5lcmljX21vcmVfdGhhbl82NCgpDQpJbXBs ZW1lbnRhdGlvbnMsIHJpZ2h0PyANCg0KPiA+DQo+ID4gPg0KPiA+ID4gIC8qKg0KPiA+ID4gICAq IENvcHkgMTI4LWJ5dGUgYmxvY2tzIGZyb20gb25lIGxvY2F0aW9uIHRvIGFub3RoZXIsDQo+ID4g PiBAQCAtNDQ0LDcgKzQzMSw4IEBAIHJ0ZV9tZW1jcHlfZ2VuZXJpY19tb3JlX3RoYW5fNjQodm9p ZA0KPiA+ICpfX3J0ZV9yZXN0cmljdA0KPiA+ID4gZHN0LCBjb25zdCB2b2lkICpfX3J0ZV9yZXN0 DQo+ID4gPiAgICogU1NFIGltcGxlbWVudGF0aW9uIGJlbG93DQo+ID4gPiAgICovDQo+ID4gPg0K PiA+ID4gLSNkZWZpbmUgQUxJR05NRU5UX01BU0sgMHgwRg0KPiA+ID4gKyNkZWZpbmUgUlRFX01F TUNQWV9BTElHTk1FTlRfTUFTSyAweDBGDQo+ID4gPiArI2RlZmluZSBSVEVfTUVNQ1BZX0JMT0NL XzY0X01BWCA1MTINCj4gPiA+DQo+ID4gPiAgLyoqDQo+ID4gPiAgICogTWFjcm8gZm9yIGNvcHlp bmcgdW5hbGlnbmVkIGJsb2NrIGZyb20gb25lIGxvY2F0aW9uIHRvIGFub3RoZXINCj4gPiB3aXRo DQo+ID4gPiBjb25zdGFudCBsb2FkIG9mZnNldCwNCj4gPiA+IEBAIC02NzMsNiArNjYxLDE4IEBA IHJ0ZV9tZW1jcHlfYWxpZ25lZF9tb3JlX3RoYW5fNjQodm9pZA0KPiA+ID4gKl9fcnRlX3Jlc3Ry aWN0IGRzdCwgY29uc3Qgdm9pZCAqX19ydGVfcmVzdA0KPiA+ID4gIAlyZXR1cm4gcmV0Ow0KPiA+ ID4gIH0NCj4gPiA+DQo+ID4gPiArLyoqDQo+ID4gPiArICogQ29weSBieXRlcyBmcm9tIG9uZSBs b2NhdGlvbiB0byBhbm90aGVyLiBUaGUgbG9jYXRpb25zIG11c3Qgbm90DQo+ID4gb3ZlcmxhcC4N Cj4gPiA+ICsgKg0KPiA+ID4gKyAqIEBwYXJhbSBkc3QNCj4gPiA+ICsgKiAgIFBvaW50ZXIgdG8g dGhlIGRlc3RpbmF0aW9uIG9mIHRoZSBkYXRhLg0KPiA+ID4gKyAqIEBwYXJhbSBzcmMNCj4gPiA+ ICsgKiAgIFBvaW50ZXIgdG8gdGhlIHNvdXJjZSBkYXRhLg0KPiA+ID4gKyAqIEBwYXJhbSBuDQo+ ID4gPiArICogICBOdW1iZXIgb2YgYnl0ZXMgdG8gY29weS4NCj4gPiA+ICsgKiBAcmV0dXJuDQo+ ID4gPiArICogICBQb2ludGVyIHRvIHRoZSBkZXN0aW5hdGlvbiBkYXRhLg0KPiA+ID4gKyAqLw0K PiA+ID4gIHN0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHZvaWQgKg0KPiA+ID4gIHJ0ZV9tZW1j cHkodm9pZCAqX19ydGVfcmVzdHJpY3QgZHN0LCBjb25zdCB2b2lkICpfX3J0ZV9yZXN0cmljdCBz cmMsDQo+ID4gc2l6ZV90IG4pDQo+ID4gPiAgew0KPiA+ID4gQEAgLTcwNywxNSArNzA3LDM5IEBA IHJ0ZV9tZW1jcHkodm9pZCAqX19ydGVfcmVzdHJpY3QgZHN0LCBjb25zdCB2b2lkDQo+ID4gPiAq X19ydGVfcmVzdHJpY3Qgc3JjLCBzaXplX3QgbikNCj4gPiA+ICAjZW5kaWYNCj4gPiA+ICAJCXJl dHVybiBkc3Q7DQo+ID4gPiAgCX0NCj4gPiA+ICsJLyogQ29tbW9uIHdheSBmb3Igc21hbGwgY29w eSBzaXplIG9mIDY0LWJ5dGUgYmxvY2tzLiBVbmxpa2VseSwgc28NCj4gPiA+IGNvbnN0YW50IHNp emUgb25seSAqLw0KPiA+ID4gKwlpZiAoX19ydGVfY29uc3RhbnQobikgJiYgKG4gJiA2MykgPT0g MCAmJiBuIDw9DQo+ID4gPiBSVEVfTUVNQ1BZX0JMT0NLXzY0X01BWCkgew0KPiA+DQo+ID4gWW91 IHByb2JhYmx5IG5lZWQgYSBjaGVjayAoc3RhdGljX2Fzc2VydD8pIHRoYXQgUlRFX01FTUNQWV9C TE9DS182NF9NQVgNCj4gPiBpcw0KPiA+IFdpdGhpbiBhbGxvd2VkIHZhbHVlcyAoPD0gNTEyKzI1 NisxMjgrNjQpLg0KPiA+IE90aGVyd2lzZSBjb2RlIGJsb2NrIGJlbG93IG1pZ2h0IG5vdCBiZSBl bm91Z2ggdG8gY29weSBldmVyeXRoaW5nLg0KPiANCj4gQWxsb3dlZCB2YWx1ZXMgc3RvcCBhdCA1 MTIuIE5vdGUgdGhhdCBzcmMgYW5kIGRzdCBhcmUgbm90IGluY3JlbWVudGVkIGZvciA1MTIuDQoN ClRoZW4gaXQgc2hvdWxkIGJlICdyZXR1cm4nIGhlcmUgbm8/DQpPciAnZWxzZSBpZiAuLi4nIGFm dGVyIGl0LiAgDQpGcm9tIG90aGVyIHNpZGUsIHdpdGggY3VycmVudCBjb2RlIDB4MTgwIGFuZCAw eDFjMCBsb29rIGxpa2UgYSBwZXJmZWN0bHkgdmFsaWQgdmFsdWVzIGZvciBpdC4NCg0KPiBJIHdv dWxkIGhvcGUgdGhhdCBzb21lb25lIGNoYW5naW5nIHRoZSBSVEVfTUVNQ1BZX0JMT0NLXzY0X01B WA0KPiBkZWZpbml0aW9uIChvciBpbnRyb2R1Y2luZyBhIG5ldyB2YWx1ZSBpZiBzdXBwb3J0IGZv ciBhIG5ldyB2ZWN0b3IgcmVnaXN0ZXIgbGVuZ3RoDQo+IGlzIGFkZGVkKSBkb2Vzbid0IGRvIGl0 IHdpdGhvdXQgY29uc2lkZXJpbmcgd2hhdCBpdCBpcyB1c2VkIGZvci4NCiANClRoYXQncyBleGFj dGx5IHRoZSByZWFzb24gd2h5IEkgdGhpbmsgaXQgbmVlZHMgZWl0aGVyIHRvIGJlIGRvY3VtZW50 ZWQgKGFkZCBjb21tZW50KQ0Kb3Igc2VsZi1ndWFyZGVkIGF0IGNvbXBpbGF0aW9uIHRpbWUgKHN0 YXRpY19hc3NlcnQsIFJURV9CVUlMRF9CVUdfT04sIHNvbWUgbWFjcm8sIGVyYy4pLg0KQlRXLCBj dXJpb3VzIC0gd2hhdCBpcyB3cm9uZyB3aXRoIHN0YXRpY19hc3NlcnQoKSBvbiBpdD8NCg0KPiBB IHN0YXRpY19hc3NlcnRbXSAgc2VlbXMgb3ZlcmtpbGwgaGVyZS4NCj4gDQo+ID4NCj4gPiA+ICsJ CXZvaWQgKnJldCA9IGRzdDsNCj4gPiA+ICsNCj4gPiA+ICsJCWlmIChuICYgNTEyKSB7DQo+ID4g PiArCQkJcnRlX21vdjI1NigodWludDhfdCAqKWRzdCArIDAgKiAyNTYsIChjb25zdCB1aW50OF90 DQo+ID4gKilzcmMNCj4gPiA+ICsgMCAqIDI1Nik7DQo+ID4gPiArCQkJcnRlX21vdjI1NigodWlu dDhfdCAqKWRzdCArIDEgKiAyNTYsIChjb25zdCB1aW50OF90DQo+ID4gKilzcmMNCj4gPiA+ICsg MSAqIDI1Nik7DQo+ID4gPiArCQl9DQo+ID4gPiArCQlpZiAobiAmIDI1Nikgew0KPiA+ID4gKwkJ CXJ0ZV9tb3YyNTYoKHVpbnQ4X3QgKilkc3QsIChjb25zdCB1aW50OF90ICopc3JjKTsNCj4gPiA+ ICsJCQlzcmMgPSAoY29uc3QgdWludDhfdCAqKXNyYyArIDI1NjsNCj4gPiA+ICsJCQlkc3QgPSAo dWludDhfdCAqKWRzdCArIDI1NjsNCj4gPiA+ICsJCX0NCj4gPiA+ICsJCWlmIChuICYgMTI4KSB7 DQo+ID4gPiArCQkJcnRlX21vdjEyOCgodWludDhfdCAqKWRzdCwgKGNvbnN0IHVpbnQ4X3QgKilz cmMpOw0KPiA+ID4gKwkJCXNyYyA9IChjb25zdCB1aW50OF90ICopc3JjICsgMTI4Ow0KPiA+ID4g KwkJCWRzdCA9ICh1aW50OF90ICopZHN0ICsgMTI4Ow0KPiA+ID4gKwkJfQ0KPiA+ID4gKwkJaWYg KG4gJiA2NCkNCj4gPiA+ICsJCQlydGVfbW92NjQoKHVpbnQ4X3QgKilkc3QsIChjb25zdCB1aW50 OF90ICopc3JjKTsNCj4gPiA+ICsNCj4gPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gPiArCX0NCj4g PiA+DQo+ID4gPiAgCS8qIEltcGxlbWVudGF0aW9uIGZvciBzaXplID4gNjQgYnl0ZXMgZGVwZW5k cyBvbiBhbGlnbm1lbnQgd2l0aA0KPiA+IHZlY3Rvcg0KPiA+ID4gcmVnaXN0ZXIgc2l6ZS4gKi8N Cj4gPiA+IC0JaWYgKCEoKCh1aW50cHRyX3QpZHN0IHwgKHVpbnRwdHJfdClzcmMpICYgQUxJR05N RU5UX01BU0spKQ0KPiA+ID4gKwlpZiAoISgoKHVpbnRwdHJfdClkc3QgfCAodWludHB0cl90KXNy YykgJg0KPiA+IFJURV9NRU1DUFlfQUxJR05NRU5UX01BU0spKQ0KPiA+ID4gIAkJcmV0dXJuIHJ0 ZV9tZW1jcHlfYWxpZ25lZF9tb3JlX3RoYW5fNjQoZHN0LCBzcmMsIG4pOw0KPiA+ID4gIAllbHNl DQo+ID4gPiAgCQlyZXR1cm4gcnRlX21lbWNweV9nZW5lcmljX21vcmVfdGhhbl82NChkc3QsIHNy Yywgbik7DQo+ID4gPiAgfQ0KPiA+ID4NCj4gPiA+IC0jdW5kZWYgQUxJR05NRU5UX01BU0sNCj4g PiA+ICsjdW5kZWYgUlRFX01FTUNQWV9BTElHTk1FTlRfTUFTSw0KPiA+ID4gKyN1bmRlZiBSVEVf TUVNQ1BZX0JMT0NLXzY0X01BWA0KPiA+ID4NCj4gPiA+ICAjaWZkZWYgX19jcGx1c3BsdXMNCj4g PiA+ICB9DQo+ID4gPiAtLQ0KPiA+ID4gMi40My4wDQoNCg==