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 4CE5B41F67; Mon, 10 Jun 2024 11:05:11 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id DE65C40647; Mon, 10 Jun 2024 11:05:10 +0200 (CEST) Received: from dkmailrelay1.smartsharesystems.com (smartserver.smartsharesystems.com [77.243.40.215]) by mails.dpdk.org (Postfix) with ESMTP id E624A402CA for ; Mon, 10 Jun 2024 11:05:09 +0200 (CEST) Received: from smartserver.smartsharesystems.com (smartserver.smartsharesys.local [192.168.4.10]) by dkmailrelay1.smartsharesystems.com (Postfix) with ESMTP id B025E2035F; Mon, 10 Jun 2024 11:05:09 +0200 (CEST) Content-class: urn:content-classes:message Subject: RE: [PATCH v8] eal/x86: improve rte_memcpy const size 16 performance MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 Date: Mon, 10 Jun 2024 11:05:08 +0200 Message-ID: <98CBD80474FA8B44BF855DF32C47DC35E9F50C@smartserver.smartshare.dk> In-Reply-To: <20240530154100.25811-1-mb@smartsharesystems.com> X-MS-Has-Attach: X-MS-TNEF-Correlator: X-MimeOLE: Produced By Microsoft Exchange V6.5 Thread-Topic: [PATCH v8] eal/x86: improve rte_memcpy const size 16 performance Thread-Index: Adqyp8yij6n5ZDr9Qz6JPkDSolUJ8QIbJ3WQ References: <20240302234812.9137-1-mb@smartsharesystems.com> <20240530154100.25811-1-mb@smartsharesystems.com> From: =?UTF-8?B?TW9ydGVuIEJyw7hydXA=?= To: , Cc: , , , 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 UElORyBmb3IgcmV2aWV3Lg0KDQpUaGUgQ0kgZmFpbHVyZXMgY2FuIGJlIGlnbm9yZWQ6IE1vc3Qg b2YgdGhlIENJIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgRGVwZW5kcy1vbiB0YWcsIGFuZCB0aGlzIHBh dGNoIHVzZXMgX19ydGVfY29uc3RhbnQoKSwgcHJvdmlkZWQgYnkgVHlsZXIncyBwYXRjaCBzZXJp ZXMgWzFdLg0KDQpbMV06IGh0dHBzOi8vaW5ib3guZHBkay5vcmcvZGV2LzE3MTA5NzA0MTYtMjc4 NDEtMS1naXQtc2VuZC1lbWFpbC1yb3JldHpsYUBsaW51eC5taWNyb3NvZnQuY29tLw0KDQotTW9y dGVuDQoNCj4gRnJvbTogTW9ydGVuIEJyw7hydXAgW21haWx0bzptYkBzbWFydHNoYXJlc3lzdGVt cy5jb21dDQo+IFNlbnQ6IFRodXJzZGF5LCAzMCBNYXkgMjAyNCAxNy40MQ0KPiANCj4gV2hlbiB0 aGUgcnRlX21lbWNweSgpIHNpemUgaXMgMTYsIHRoZSBzYW1lIDE2IGJ5dGVzIGFyZSBjb3BpZWQg dHdpY2UuDQo+IEluIHRoZSBjYXNlIHdoZXJlIHRoZSBzaXplIGlzIGtub3duIHRvIGJlIDE2IGF0 IGJ1aWxkIHRpbWUsIG9taXQgdGhlDQo+IGR1cGxpY2F0ZSBjb3B5Lg0KPiANCj4gUmVkdWNlZCB0 aGUgYW1vdW50IG9mIGVmZmVjdGl2ZWx5IGNvcHktcGFzdGVkIGNvZGUgYnkgdXNpbmcgI2lmZGVm DQo+IGluc2lkZSBmdW5jdGlvbnMgaW5zdGVhZCBvZiBvdXRzaWRlIGZ1bmN0aW9ucy4NCj4gDQo+ IFN1Z2dlc3RlZC1ieTogU3RlcGhlbiBIZW1taW5nZXIgPHN0ZXBoZW5AbmV0d29ya3BsdW1iZXIu b3JnPg0KPiBTaWduZWQtb2ZmLWJ5OiBNb3J0ZW4gQnLDuHJ1cCA8bWJAc21hcnRzaGFyZXN5c3Rl bXMuY29tPg0KPiBBY2tlZC1ieTogQnJ1Y2UgUmljaGFyZHNvbiA8YnJ1Y2UucmljaGFyZHNvbkBp bnRlbC5jb20+DQo+IC0tLQ0KPiBEZXBlbmRzLW9uOiBzZXJpZXMtMzE1NzggKCJwcm92aWRlIHRv b2xjaGFpbiBhYnN0cmFjdGVkIF9fYnVpbHRpbl9jb25zdGFudF9wIikNCj4gDQo+IHY4Og0KPiAq IEtlZXAgdHJ5aW5nIHRvIGZpeCB0aGF0IENJIGRvZXMgbm90IHVuZGVyc3RhbmQgdGhlIGRlcGVu ZGVuY3kuLi4NCj4gICBEZXBlbmQgb24gc2VyaWVzIGluc3RlYWQgb2YgcGF0Y2guIEdpdGh1YiBv bmx5IHVuZGVyc3RhbmRzIHNlcmllcy4NCj4gKiBGaXggdHlwbyBpbiBwYXRjaCBkZXNjcmlwdGlv bi4NCj4gdjc6DQo+ICogS2VlcCB0cnlpbmcgdG8gZml4IHRoYXQgQ0kgZG9lcyBub3QgdW5kZXJz dGFuZCB0aGUgZGVwZW5kZW5jeS4uLg0KPiAgIERlcGVuZCBvbiBwYXRjaCBpbnN0ZWFkIG9mIHNl cmllcy4NCj4gICBNb3ZlIGRlcGVuZGVuY3kgb3V0IG9mIHRoZSBwYXRjaCBkZXNjcmlwdGlvbiBp dHNlbGYsIGFuZCBkb3duIHRvIHRoZQ0KPiAgIHZlcnNpb24gbG9nLg0KPiB2NjoNCj4gKiBUcnlp bmcgdG8gZml4IENJIG5vdCB1bmRlcnN0YW5kaW5nIGRlcGVuZGVuY3kuLi4NCj4gICBEb24ndCB3 cmFwIGRlcGVuZGVuY3kgbGluZS4NCj4gdjU6DQo+ICogRml4IGZvciBidWlsZGluZyB3aXRoIE1T VkM6DQo+ICAgVXNlIF9fcnRlX2NvbnN0YW50KCkgaW5zdGVhZCBvZiBfX2J1aWx0aW5fY29uc3Rh bnRfcCgpLg0KPiAgIEFkZCBkZXBlbmRlbmN5IG9uIHBhdGNoIHByb3ZpZGluZyBfX3J0ZV9jb25z dGFudCgpLg0KPiB2NDoNCj4gKiBUaGVyZSBhcmUgbm8gcHJvYmxlbXMgY29tcGlsaW5nIEFWWDIs IG9ubHkgQVZYLiAoQnJ1Y2UgUmljaGFyZHNvbikNCj4gdjM6DQo+ICogQVZYMiBpcyBhIHN1cGVy c2V0IG9mIEFWWDsNCj4gICBmb3IgYSBibG9jayBvZiBBVlggY29kZSwgdGVzdGluZyBmb3IgQVZY IHN1ZmZpY2VzLiAoQnJ1Y2UgUmljaGFyZHNvbikNCj4gKiBEZWZpbmUgUlRFX01FTUNQWV9BVlgg aWYgQVZYIGlzIGF2YWlsYWJsZSwgdG8gYXZvaWQgY29weS1wYXN0aW5nIHRoZQ0KPiAgIGNoZWNr IGZvciBvbGRlciBHQ0MgdmVyc2lvbi4gKEJydWNlIFJpY2hhcmRzb24pDQo+IHYyOg0KPiAqIEZv ciBHQ0MsIHZlcnNpb24gMTEgaXMgcmVxdWlyZWQgZm9yIHByb3BlciBBVlggaGFuZGxpbmc7DQo+ ICAgaWYgb2xkZXIgR0NDIHZlcnNpb24sIHRyZWF0IEFWWCBhcyBTU0UuDQo+ICAgQ2xhbmcgZG9l cyBub3QgaGF2ZSB0aGlzIGlzc3VlLg0KPiAgIE5vdGU6IE9yaWdpbmFsIGNvZGUgYWx3YXlzIHRy ZWF0ZWQgQVZYIGFzIFNTRSwgcmVnYXJkbGVzcyBvZiBjb21waWxlci4NCj4gKiBEbyBub3QgYWRk IGNvcHlyaWdodC4gKFN0ZXBoZW4gSGVtbWluZ2VyKQ0KPiAtLS0NCj4gIGxpYi9lYWwveDg2L2lu Y2x1ZGUvcnRlX21lbWNweS5oIHwgMjM5ICsrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N Cj4gIDEgZmlsZSBjaGFuZ2VkLCA2NCBpbnNlcnRpb25zKCspLCAxNzUgZGVsZXRpb25zKC0pDQo+ IA0KPiBkaWZmIC0tZ2l0IGEvbGliL2VhbC94ODYvaW5jbHVkZS9ydGVfbWVtY3B5LmgNCj4gYi9s aWIvZWFsL3g4Ni9pbmNsdWRlL3J0ZV9tZW1jcHkuaA0KPiBpbmRleCA3MmE5MjI5MGUwLi4xNjE5 YThmMjk2IDEwMDY0NA0KPiAtLS0gYS9saWIvZWFsL3g4Ni9pbmNsdWRlL3J0ZV9tZW1jcHkuaA0K PiArKysgYi9saWIvZWFsL3g4Ni9pbmNsdWRlL3J0ZV9tZW1jcHkuaA0KPiBAQCAtMjcsNiArMjcs MTYgQEAgZXh0ZXJuICJDIiB7DQo+ICAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1X c3RyaW5nb3Atb3ZlcmZsb3ciDQo+ICAjZW5kaWYNCj4gDQo+ICsvKg0KPiArICogR0NDIG9sZGVy IHRoYW4gdmVyc2lvbiAxMSBkb2Vzbid0IGNvbXBpbGUgQVZYIHByb3Blcmx5LCBzbyB1c2UgU1NF DQo+IGluc3RlYWQuDQo+ICsgKiBUaGVyZSBhcmUgbm8gcHJvYmxlbXMgd2l0aCBBVlgyLg0KPiAr ICovDQo+ICsjaWYgZGVmaW5lZCBfX0FWWDJfXw0KPiArI2RlZmluZSBSVEVfTUVNQ1BZX0FWWA0K PiArI2VsaWYgZGVmaW5lZCBfX0FWWF9fICYmICEoZGVmaW5lZChSVEVfVE9PTENIQUlOX0dDQykg JiYgKEdDQ19WRVJTSU9OIDwNCj4gMTEwMDAwKSkNCj4gKyNkZWZpbmUgUlRFX01FTUNQWV9BVlgN Cj4gKyNlbmRpZg0KPiArDQo+ICAvKioNCj4gICAqIENvcHkgYnl0ZXMgZnJvbSBvbmUgbG9jYXRp b24gdG8gYW5vdGhlci4gVGhlIGxvY2F0aW9ucyBtdXN0IG5vdCBvdmVybGFwLg0KPiAgICoNCj4g QEAgLTkxLDE0ICsxMDEsNiBAQCBydGVfbW92MTVfb3JfbGVzcyh2b2lkICpkc3QsIGNvbnN0IHZv aWQgKnNyYywgc2l6ZV90IG4pDQo+ICAJcmV0dXJuIHJldDsNCj4gIH0NCj4gDQo+IC0jaWYgZGVm aW5lZCBfX0FWWDUxMkZfXyAmJiBkZWZpbmVkIFJURV9NRU1DUFlfQVZYNTEyDQo+IC0NCj4gLSNk ZWZpbmUgQUxJR05NRU5UX01BU0sgMHgzRg0KPiAtDQo+IC0vKioNCj4gLSAqIEFWWDUxMiBpbXBs ZW1lbnRhdGlvbiBiZWxvdw0KPiAtICovDQo+IC0NCj4gIC8qKg0KPiAgICogQ29weSAxNiBieXRl cyBmcm9tIG9uZSBsb2NhdGlvbiB0byBhbm90aGVyLA0KPiAgICogbG9jYXRpb25zIHNob3VsZCBu b3Qgb3ZlcmxhcC4NCj4gQEAgLTExOSwxMCArMTIxLDE1IEBAIHJ0ZV9tb3YxNih1aW50OF90ICpk c3QsIGNvbnN0IHVpbnQ4X3QgKnNyYykNCj4gIHN0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHZv aWQNCj4gIHJ0ZV9tb3YzMih1aW50OF90ICpkc3QsIGNvbnN0IHVpbnQ4X3QgKnNyYykNCj4gIHsN Cj4gKyNpZiBkZWZpbmVkIFJURV9NRU1DUFlfQVZYDQo+ICAJX19tMjU2aSB5bW0wOw0KPiANCj4g IAl5bW0wID0gX21tMjU2X2xvYWR1X3NpMjU2KChjb25zdCBfX20yNTZpICopc3JjKTsNCj4gIAlf bW0yNTZfc3RvcmV1X3NpMjU2KChfX20yNTZpICopZHN0LCB5bW0wKTsNCj4gKyNlbHNlIC8qIFNT RSBpbXBsZW1lbnRhdGlvbiAqLw0KPiArCXJ0ZV9tb3YxNigodWludDhfdCAqKWRzdCArIDAgKiAx NiwgKGNvbnN0IHVpbnQ4X3QgKilzcmMgKyAwICogMTYpOw0KPiArCXJ0ZV9tb3YxNigodWludDhf dCAqKWRzdCArIDEgKiAxNiwgKGNvbnN0IHVpbnQ4X3QgKilzcmMgKyAxICogMTYpOw0KPiArI2Vu ZGlmDQo+ICB9DQo+IA0KPiAgLyoqDQo+IEBAIC0xMzIsMTAgKzEzOSwxNSBAQCBydGVfbW92MzIo dWludDhfdCAqZHN0LCBjb25zdCB1aW50OF90ICpzcmMpDQo+ICBzdGF0aWMgX19ydGVfYWx3YXlz X2lubGluZSB2b2lkDQo+ICBydGVfbW92NjQodWludDhfdCAqZHN0LCBjb25zdCB1aW50OF90ICpz cmMpDQo+ICB7DQo+ICsjaWYgZGVmaW5lZCBfX0FWWDUxMkZfXyAmJiBkZWZpbmVkIFJURV9NRU1D UFlfQVZYNTEyDQo+ICAJX19tNTEyaSB6bW0wOw0KPiANCj4gIAl6bW0wID0gX21tNTEyX2xvYWR1 X3NpNTEyKChjb25zdCB2b2lkICopc3JjKTsNCj4gIAlfbW01MTJfc3RvcmV1X3NpNTEyKCh2b2lk ICopZHN0LCB6bW0wKTsNCj4gKyNlbHNlIC8qIEFWWDIsIEFWWCAmIFNTRSBpbXBsZW1lbnRhdGlv biAqLw0KPiArCXJ0ZV9tb3YzMigodWludDhfdCAqKWRzdCArIDAgKiAzMiwgKGNvbnN0IHVpbnQ4 X3QgKilzcmMgKyAwICogMzIpOw0KPiArCXJ0ZV9tb3YzMigodWludDhfdCAqKWRzdCArIDEgKiAz MiwgKGNvbnN0IHVpbnQ4X3QgKilzcmMgKyAxICogMzIpOw0KPiArI2VuZGlmDQo+ICB9DQo+IA0K PiAgLyoqDQo+IEBAIC0xNTYsMTIgKzE2OCwxOCBAQCBydGVfbW92MTI4KHVpbnQ4X3QgKmRzdCwg Y29uc3QgdWludDhfdCAqc3JjKQ0KPiAgc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdm9pZA0K PiAgcnRlX21vdjI1Nih1aW50OF90ICpkc3QsIGNvbnN0IHVpbnQ4X3QgKnNyYykNCj4gIHsNCj4g LQlydGVfbW92NjQoZHN0ICsgMCAqIDY0LCBzcmMgKyAwICogNjQpOw0KPiAtCXJ0ZV9tb3Y2NChk c3QgKyAxICogNjQsIHNyYyArIDEgKiA2NCk7DQo+IC0JcnRlX21vdjY0KGRzdCArIDIgKiA2NCwg c3JjICsgMiAqIDY0KTsNCj4gLQlydGVfbW92NjQoZHN0ICsgMyAqIDY0LCBzcmMgKyAzICogNjQp Ow0KPiArCXJ0ZV9tb3YxMjgoZHN0ICsgMCAqIDEyOCwgc3JjICsgMCAqIDEyOCk7DQo+ICsJcnRl X21vdjEyOChkc3QgKyAxICogMTI4LCBzcmMgKyAxICogMTI4KTsNCj4gIH0NCj4gDQo+ICsjaWYg ZGVmaW5lZCBfX0FWWDUxMkZfXyAmJiBkZWZpbmVkIFJURV9NRU1DUFlfQVZYNTEyDQo+ICsNCj4g Ky8qKg0KPiArICogQVZYNTEyIGltcGxlbWVudGF0aW9uIGJlbG93DQo+ICsgKi8NCj4gKw0KPiAr I2RlZmluZSBBTElHTk1FTlRfTUFTSyAweDNGDQo+ICsNCj4gIC8qKg0KPiAgICogQ29weSAxMjgt Ynl0ZSBibG9ja3MgZnJvbSBvbmUgbG9jYXRpb24gdG8gYW5vdGhlciwNCj4gICAqIGxvY2F0aW9u cyBzaG91bGQgbm90IG92ZXJsYXAuDQo+IEBAIC0yMzEsMTIgKzI0OSwyMiBAQCBydGVfbWVtY3B5 X2dlbmVyaWModm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBuKQ0KPiAgCS8qKg0K PiAgCSAqIEZhc3Qgd2F5IHdoZW4gY29weSBzaXplIGRvZXNuJ3QgZXhjZWVkIDUxMiBieXRlcw0K PiAgCSAqLw0KPiArCWlmIChfX3J0ZV9jb25zdGFudChuKSAmJiBuID09IDMyKSB7DQo+ICsJCXJ0 ZV9tb3YzMigodWludDhfdCAqKWRzdCwgKGNvbnN0IHVpbnQ4X3QgKilzcmMpOw0KPiArCQlyZXR1 cm4gcmV0Ow0KPiArCX0NCj4gIAlpZiAobiA8PSAzMikgew0KPiAgCQlydGVfbW92MTYoKHVpbnQ4 X3QgKilkc3QsIChjb25zdCB1aW50OF90ICopc3JjKTsNCj4gKwkJaWYgKF9fcnRlX2NvbnN0YW50 KG4pICYmIG4gPT0gMTYpDQo+ICsJCQlyZXR1cm4gcmV0OyAvKiBhdm9pZCAoaGFybWxlc3MpIGR1 cGxpY2F0ZSBjb3B5ICovDQo+ICAJCXJ0ZV9tb3YxNigodWludDhfdCAqKWRzdCAtIDE2ICsgbiwN Cj4gIAkJCQkgIChjb25zdCB1aW50OF90ICopc3JjIC0gMTYgKyBuKTsNCj4gIAkJcmV0dXJuIHJl dDsNCj4gIAl9DQo+ICsJaWYgKF9fcnRlX2NvbnN0YW50KG4pICYmIG4gPT0gNjQpIHsNCj4gKwkJ cnRlX21vdjY0KCh1aW50OF90ICopZHN0LCAoY29uc3QgdWludDhfdCAqKXNyYyk7DQo+ICsJCXJl dHVybiByZXQ7DQo+ICsJfQ0KPiAgCWlmIChuIDw9IDY0KSB7DQo+ICAJCXJ0ZV9tb3YzMigodWlu dDhfdCAqKWRzdCwgKGNvbnN0IHVpbnQ4X3QgKilzcmMpOw0KPiAgCQlydGVfbW92MzIoKHVpbnQ4 X3QgKilkc3QgLSAzMiArIG4sDQo+IEBAIC0zMTMsODAgKzM0MSwxMyBAQCBydGVfbWVtY3B5X2dl bmVyaWModm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBuKQ0KPiAgCWdvdG8gQ09Q WV9CTE9DS18xMjhfQkFDSzYzOw0KPiAgfQ0KPiANCj4gLSNlbGlmIGRlZmluZWQgX19BVlgyX18N Cj4gLQ0KPiAtI2RlZmluZSBBTElHTk1FTlRfTUFTSyAweDFGDQo+IC0NCj4gLS8qKg0KPiAtICog QVZYMiBpbXBsZW1lbnRhdGlvbiBiZWxvdw0KPiAtICovDQo+IC0NCj4gLS8qKg0KPiAtICogQ29w eSAxNiBieXRlcyBmcm9tIG9uZSBsb2NhdGlvbiB0byBhbm90aGVyLA0KPiAtICogbG9jYXRpb25z IHNob3VsZCBub3Qgb3ZlcmxhcC4NCj4gLSAqLw0KPiAtc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxp bmUgdm9pZA0KPiAtcnRlX21vdjE2KHVpbnQ4X3QgKmRzdCwgY29uc3QgdWludDhfdCAqc3JjKQ0K PiAtew0KPiAtCV9fbTEyOGkgeG1tMDsNCj4gLQ0KPiAtCXhtbTAgPSBfbW1fbG9hZHVfc2kxMjgo KGNvbnN0IF9fbTEyOGkgKikoY29uc3Qgdm9pZCAqKXNyYyk7DQo+IC0JX21tX3N0b3JldV9zaTEy OCgoX19tMTI4aSAqKSh2b2lkICopZHN0LCB4bW0wKTsNCj4gLX0NCj4gLQ0KPiAtLyoqDQo+IC0g KiBDb3B5IDMyIGJ5dGVzIGZyb20gb25lIGxvY2F0aW9uIHRvIGFub3RoZXIsDQo+IC0gKiBsb2Nh dGlvbnMgc2hvdWxkIG5vdCBvdmVybGFwLg0KPiAtICovDQo+IC1zdGF0aWMgX19ydGVfYWx3YXlz X2lubGluZSB2b2lkDQo+IC1ydGVfbW92MzIodWludDhfdCAqZHN0LCBjb25zdCB1aW50OF90ICpz cmMpDQo+IC17DQo+IC0JX19tMjU2aSB5bW0wOw0KPiAtDQo+IC0JeW1tMCA9IF9tbTI1Nl9sb2Fk dV9zaTI1NigoY29uc3QgX19tMjU2aSAqKShjb25zdCB2b2lkICopc3JjKTsNCj4gLQlfbW0yNTZf c3RvcmV1X3NpMjU2KChfX20yNTZpICopKHZvaWQgKilkc3QsIHltbTApOw0KPiAtfQ0KPiArI2Vs aWYgZGVmaW5lZCBSVEVfTUVNQ1BZX0FWWA0KPiANCj4gIC8qKg0KPiAtICogQ29weSA2NCBieXRl cyBmcm9tIG9uZSBsb2NhdGlvbiB0byBhbm90aGVyLA0KPiAtICogbG9jYXRpb25zIHNob3VsZCBu b3Qgb3ZlcmxhcC4NCj4gLSAqLw0KPiAtc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdm9pZA0K PiAtcnRlX21vdjY0KHVpbnQ4X3QgKmRzdCwgY29uc3QgdWludDhfdCAqc3JjKQ0KPiAtew0KPiAt CXJ0ZV9tb3YzMigodWludDhfdCAqKWRzdCArIDAgKiAzMiwgKGNvbnN0IHVpbnQ4X3QgKilzcmMg KyAwICogMzIpOw0KPiAtCXJ0ZV9tb3YzMigodWludDhfdCAqKWRzdCArIDEgKiAzMiwgKGNvbnN0 IHVpbnQ4X3QgKilzcmMgKyAxICogMzIpOw0KPiAtfQ0KPiAtDQo+IC0vKioNCj4gLSAqIENvcHkg MTI4IGJ5dGVzIGZyb20gb25lIGxvY2F0aW9uIHRvIGFub3RoZXIsDQo+IC0gKiBsb2NhdGlvbnMg c2hvdWxkIG5vdCBvdmVybGFwLg0KPiArICogQVZYIGltcGxlbWVudGF0aW9uIGJlbG93DQo+ICAg Ki8NCj4gLXN0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHZvaWQNCj4gLXJ0ZV9tb3YxMjgodWlu dDhfdCAqZHN0LCBjb25zdCB1aW50OF90ICpzcmMpDQo+IC17DQo+IC0JcnRlX21vdjMyKCh1aW50 OF90ICopZHN0ICsgMCAqIDMyLCAoY29uc3QgdWludDhfdCAqKXNyYyArIDAgKiAzMik7DQo+IC0J cnRlX21vdjMyKCh1aW50OF90ICopZHN0ICsgMSAqIDMyLCAoY29uc3QgdWludDhfdCAqKXNyYyAr IDEgKiAzMik7DQo+IC0JcnRlX21vdjMyKCh1aW50OF90ICopZHN0ICsgMiAqIDMyLCAoY29uc3Qg dWludDhfdCAqKXNyYyArIDIgKiAzMik7DQo+IC0JcnRlX21vdjMyKCh1aW50OF90ICopZHN0ICsg MyAqIDMyLCAoY29uc3QgdWludDhfdCAqKXNyYyArIDMgKiAzMik7DQo+IC19DQo+IA0KPiAtLyoq DQo+IC0gKiBDb3B5IDI1NiBieXRlcyBmcm9tIG9uZSBsb2NhdGlvbiB0byBhbm90aGVyLA0KPiAt ICogbG9jYXRpb25zIHNob3VsZCBub3Qgb3ZlcmxhcC4NCj4gLSAqLw0KPiAtc3RhdGljIF9fcnRl X2Fsd2F5c19pbmxpbmUgdm9pZA0KPiAtcnRlX21vdjI1Nih1aW50OF90ICpkc3QsIGNvbnN0IHVp bnQ4X3QgKnNyYykNCj4gLXsNCj4gLQlydGVfbW92MzIoKHVpbnQ4X3QgKilkc3QgKyAwICogMzIs IChjb25zdCB1aW50OF90ICopc3JjICsgMCAqIDMyKTsNCj4gLQlydGVfbW92MzIoKHVpbnQ4X3Qg Kilkc3QgKyAxICogMzIsIChjb25zdCB1aW50OF90ICopc3JjICsgMSAqIDMyKTsNCj4gLQlydGVf bW92MzIoKHVpbnQ4X3QgKilkc3QgKyAyICogMzIsIChjb25zdCB1aW50OF90ICopc3JjICsgMiAq IDMyKTsNCj4gLQlydGVfbW92MzIoKHVpbnQ4X3QgKilkc3QgKyAzICogMzIsIChjb25zdCB1aW50 OF90ICopc3JjICsgMyAqIDMyKTsNCj4gLQlydGVfbW92MzIoKHVpbnQ4X3QgKilkc3QgKyA0ICog MzIsIChjb25zdCB1aW50OF90ICopc3JjICsgNCAqIDMyKTsNCj4gLQlydGVfbW92MzIoKHVpbnQ4 X3QgKilkc3QgKyA1ICogMzIsIChjb25zdCB1aW50OF90ICopc3JjICsgNSAqIDMyKTsNCj4gLQly dGVfbW92MzIoKHVpbnQ4X3QgKilkc3QgKyA2ICogMzIsIChjb25zdCB1aW50OF90ICopc3JjICsg NiAqIDMyKTsNCj4gLQlydGVfbW92MzIoKHVpbnQ4X3QgKilkc3QgKyA3ICogMzIsIChjb25zdCB1 aW50OF90ICopc3JjICsgNyAqIDMyKTsNCj4gLX0NCj4gKyNkZWZpbmUgQUxJR05NRU5UX01BU0sg MHgxRg0KPiANCj4gIC8qKg0KPiAgICogQ29weSAxMjgtYnl0ZSBibG9ja3MgZnJvbSBvbmUgbG9j YXRpb24gdG8gYW5vdGhlciwNCj4gQEAgLTQzNywxNSArMzk4LDE0IEBAIHJ0ZV9tZW1jcHlfZ2Vu ZXJpYyh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IG4pDQo+ICAJLyoqDQo+ICAJ ICogRmFzdCB3YXkgd2hlbiBjb3B5IHNpemUgZG9lc24ndCBleGNlZWQgMjU2IGJ5dGVzDQo+ICAJ ICovDQo+IC0JaWYgKG4gPD0gMzIpIHsNCj4gLQkJcnRlX21vdjE2KCh1aW50OF90ICopZHN0LCAo Y29uc3QgdWludDhfdCAqKXNyYyk7DQo+IC0JCXJ0ZV9tb3YxNigodWludDhfdCAqKWRzdCAtIDE2 ICsgbiwNCj4gLQkJCQkoY29uc3QgdWludDhfdCAqKXNyYyAtIDE2ICsgbik7DQo+ICsJaWYgKF9f cnRlX2NvbnN0YW50KG4pICYmIG4gPT0gMzIpIHsNCj4gKwkJcnRlX21vdjMyKCh1aW50OF90ICop ZHN0LCAoY29uc3QgdWludDhfdCAqKXNyYyk7DQo+ICAJCXJldHVybiByZXQ7DQo+ICAJfQ0KPiAt CWlmIChuIDw9IDQ4KSB7DQo+ICsJaWYgKG4gPD0gMzIpIHsNCj4gIAkJcnRlX21vdjE2KCh1aW50 OF90ICopZHN0LCAoY29uc3QgdWludDhfdCAqKXNyYyk7DQo+IC0JCXJ0ZV9tb3YxNigodWludDhf dCAqKWRzdCArIDE2LCAoY29uc3QgdWludDhfdCAqKXNyYyArIDE2KTsNCj4gKwkJaWYgKF9fcnRl X2NvbnN0YW50KG4pICYmIG4gPT0gMTYpDQo+ICsJCQlyZXR1cm4gcmV0OyAvKiBhdm9pZCAoaGFy bWxlc3MpIGR1cGxpY2F0ZSBjb3B5ICovDQo+ICAJCXJ0ZV9tb3YxNigodWludDhfdCAqKWRzdCAt IDE2ICsgbiwNCj4gIAkJCQkoY29uc3QgdWludDhfdCAqKXNyYyAtIDE2ICsgbik7DQo+ICAJCXJl dHVybiByZXQ7DQo+IEBAIC01MTMsOTAgKzQ3MywxMSBAQCBydGVfbWVtY3B5X2dlbmVyaWModm9p ZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBuKQ0KPiANCj4gICNlbHNlIC8qIF9fQVZY NTEyRl9fICovDQo+IA0KPiAtI2RlZmluZSBBTElHTk1FTlRfTUFTSyAweDBGDQo+IC0NCj4gLS8q Kg0KPiAtICogU1NFICYgQVZYIGltcGxlbWVudGF0aW9uIGJlbG93DQo+IC0gKi8NCj4gLQ0KPiAt LyoqDQo+IC0gKiBDb3B5IDE2IGJ5dGVzIGZyb20gb25lIGxvY2F0aW9uIHRvIGFub3RoZXIsDQo+ IC0gKiBsb2NhdGlvbnMgc2hvdWxkIG5vdCBvdmVybGFwLg0KPiAtICovDQo+IC1zdGF0aWMgX19y dGVfYWx3YXlzX2lubGluZSB2b2lkDQo+IC1ydGVfbW92MTYodWludDhfdCAqZHN0LCBjb25zdCB1 aW50OF90ICpzcmMpDQo+IC17DQo+IC0JX19tMTI4aSB4bW0wOw0KPiAtDQo+IC0JeG1tMCA9IF9t bV9sb2FkdV9zaTEyOCgoY29uc3QgX19tMTI4aSAqKShjb25zdCB2b2lkICopc3JjKTsNCj4gLQlf bW1fc3RvcmV1X3NpMTI4KChfX20xMjhpICopKHZvaWQgKilkc3QsIHhtbTApOw0KPiAtfQ0KPiAt DQo+IC0vKioNCj4gLSAqIENvcHkgMzIgYnl0ZXMgZnJvbSBvbmUgbG9jYXRpb24gdG8gYW5vdGhl ciwNCj4gLSAqIGxvY2F0aW9ucyBzaG91bGQgbm90IG92ZXJsYXAuDQo+IC0gKi8NCj4gLXN0YXRp YyBfX3J0ZV9hbHdheXNfaW5saW5lIHZvaWQNCj4gLXJ0ZV9tb3YzMih1aW50OF90ICpkc3QsIGNv bnN0IHVpbnQ4X3QgKnNyYykNCj4gLXsNCj4gLQlydGVfbW92MTYoKHVpbnQ4X3QgKilkc3QgKyAw ICogMTYsIChjb25zdCB1aW50OF90ICopc3JjICsgMCAqIDE2KTsNCj4gLQlydGVfbW92MTYoKHVp bnQ4X3QgKilkc3QgKyAxICogMTYsIChjb25zdCB1aW50OF90ICopc3JjICsgMSAqIDE2KTsNCj4g LX0NCj4gLQ0KPiAgLyoqDQo+IC0gKiBDb3B5IDY0IGJ5dGVzIGZyb20gb25lIGxvY2F0aW9uIHRv IGFub3RoZXIsDQo+IC0gKiBsb2NhdGlvbnMgc2hvdWxkIG5vdCBvdmVybGFwLg0KPiArICogU1NF IGltcGxlbWVudGF0aW9uIGJlbG93DQo+ICAgKi8NCj4gLXN0YXRpYyBfX3J0ZV9hbHdheXNfaW5s aW5lIHZvaWQNCj4gLXJ0ZV9tb3Y2NCh1aW50OF90ICpkc3QsIGNvbnN0IHVpbnQ4X3QgKnNyYykN Cj4gLXsNCj4gLQlydGVfbW92MTYoKHVpbnQ4X3QgKilkc3QgKyAwICogMTYsIChjb25zdCB1aW50 OF90ICopc3JjICsgMCAqIDE2KTsNCj4gLQlydGVfbW92MTYoKHVpbnQ4X3QgKilkc3QgKyAxICog MTYsIChjb25zdCB1aW50OF90ICopc3JjICsgMSAqIDE2KTsNCj4gLQlydGVfbW92MTYoKHVpbnQ4 X3QgKilkc3QgKyAyICogMTYsIChjb25zdCB1aW50OF90ICopc3JjICsgMiAqIDE2KTsNCj4gLQly dGVfbW92MTYoKHVpbnQ4X3QgKilkc3QgKyAzICogMTYsIChjb25zdCB1aW50OF90ICopc3JjICsg MyAqIDE2KTsNCj4gLX0NCj4gDQo+IC0vKioNCj4gLSAqIENvcHkgMTI4IGJ5dGVzIGZyb20gb25l IGxvY2F0aW9uIHRvIGFub3RoZXIsDQo+IC0gKiBsb2NhdGlvbnMgc2hvdWxkIG5vdCBvdmVybGFw Lg0KPiAtICovDQo+IC1zdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB2b2lkDQo+IC1ydGVfbW92 MTI4KHVpbnQ4X3QgKmRzdCwgY29uc3QgdWludDhfdCAqc3JjKQ0KPiAtew0KPiAtCXJ0ZV9tb3Yx NigodWludDhfdCAqKWRzdCArIDAgKiAxNiwgKGNvbnN0IHVpbnQ4X3QgKilzcmMgKyAwICogMTYp Ow0KPiAtCXJ0ZV9tb3YxNigodWludDhfdCAqKWRzdCArIDEgKiAxNiwgKGNvbnN0IHVpbnQ4X3Qg KilzcmMgKyAxICogMTYpOw0KPiAtCXJ0ZV9tb3YxNigodWludDhfdCAqKWRzdCArIDIgKiAxNiwg KGNvbnN0IHVpbnQ4X3QgKilzcmMgKyAyICogMTYpOw0KPiAtCXJ0ZV9tb3YxNigodWludDhfdCAq KWRzdCArIDMgKiAxNiwgKGNvbnN0IHVpbnQ4X3QgKilzcmMgKyAzICogMTYpOw0KPiAtCXJ0ZV9t b3YxNigodWludDhfdCAqKWRzdCArIDQgKiAxNiwgKGNvbnN0IHVpbnQ4X3QgKilzcmMgKyA0ICog MTYpOw0KPiAtCXJ0ZV9tb3YxNigodWludDhfdCAqKWRzdCArIDUgKiAxNiwgKGNvbnN0IHVpbnQ4 X3QgKilzcmMgKyA1ICogMTYpOw0KPiAtCXJ0ZV9tb3YxNigodWludDhfdCAqKWRzdCArIDYgKiAx NiwgKGNvbnN0IHVpbnQ4X3QgKilzcmMgKyA2ICogMTYpOw0KPiAtCXJ0ZV9tb3YxNigodWludDhf dCAqKWRzdCArIDcgKiAxNiwgKGNvbnN0IHVpbnQ4X3QgKilzcmMgKyA3ICogMTYpOw0KPiAtfQ0K PiAtDQo+IC0vKioNCj4gLSAqIENvcHkgMjU2IGJ5dGVzIGZyb20gb25lIGxvY2F0aW9uIHRvIGFu b3RoZXIsDQo+IC0gKiBsb2NhdGlvbnMgc2hvdWxkIG5vdCBvdmVybGFwLg0KPiAtICovDQo+IC1z dGF0aWMgaW5saW5lIHZvaWQNCj4gLXJ0ZV9tb3YyNTYodWludDhfdCAqZHN0LCBjb25zdCB1aW50 OF90ICpzcmMpDQo+IC17DQo+IC0JcnRlX21vdjE2KCh1aW50OF90ICopZHN0ICsgMCAqIDE2LCAo Y29uc3QgdWludDhfdCAqKXNyYyArIDAgKiAxNik7DQo+IC0JcnRlX21vdjE2KCh1aW50OF90ICop ZHN0ICsgMSAqIDE2LCAoY29uc3QgdWludDhfdCAqKXNyYyArIDEgKiAxNik7DQo+IC0JcnRlX21v djE2KCh1aW50OF90ICopZHN0ICsgMiAqIDE2LCAoY29uc3QgdWludDhfdCAqKXNyYyArIDIgKiAx Nik7DQo+IC0JcnRlX21vdjE2KCh1aW50OF90ICopZHN0ICsgMyAqIDE2LCAoY29uc3QgdWludDhf dCAqKXNyYyArIDMgKiAxNik7DQo+IC0JcnRlX21vdjE2KCh1aW50OF90ICopZHN0ICsgNCAqIDE2 LCAoY29uc3QgdWludDhfdCAqKXNyYyArIDQgKiAxNik7DQo+IC0JcnRlX21vdjE2KCh1aW50OF90 ICopZHN0ICsgNSAqIDE2LCAoY29uc3QgdWludDhfdCAqKXNyYyArIDUgKiAxNik7DQo+IC0JcnRl X21vdjE2KCh1aW50OF90ICopZHN0ICsgNiAqIDE2LCAoY29uc3QgdWludDhfdCAqKXNyYyArIDYg KiAxNik7DQo+IC0JcnRlX21vdjE2KCh1aW50OF90ICopZHN0ICsgNyAqIDE2LCAoY29uc3QgdWlu dDhfdCAqKXNyYyArIDcgKiAxNik7DQo+IC0JcnRlX21vdjE2KCh1aW50OF90ICopZHN0ICsgOCAq IDE2LCAoY29uc3QgdWludDhfdCAqKXNyYyArIDggKiAxNik7DQo+IC0JcnRlX21vdjE2KCh1aW50 OF90ICopZHN0ICsgOSAqIDE2LCAoY29uc3QgdWludDhfdCAqKXNyYyArIDkgKiAxNik7DQo+IC0J cnRlX21vdjE2KCh1aW50OF90ICopZHN0ICsgMTAgKiAxNiwgKGNvbnN0IHVpbnQ4X3QgKilzcmMg KyAxMCAqIDE2KTsNCj4gLQlydGVfbW92MTYoKHVpbnQ4X3QgKilkc3QgKyAxMSAqIDE2LCAoY29u c3QgdWludDhfdCAqKXNyYyArIDExICogMTYpOw0KPiAtCXJ0ZV9tb3YxNigodWludDhfdCAqKWRz dCArIDEyICogMTYsIChjb25zdCB1aW50OF90ICopc3JjICsgMTIgKiAxNik7DQo+IC0JcnRlX21v djE2KCh1aW50OF90ICopZHN0ICsgMTMgKiAxNiwgKGNvbnN0IHVpbnQ4X3QgKilzcmMgKyAxMyAq IDE2KTsNCj4gLQlydGVfbW92MTYoKHVpbnQ4X3QgKilkc3QgKyAxNCAqIDE2LCAoY29uc3QgdWlu dDhfdCAqKXNyYyArIDE0ICogMTYpOw0KPiAtCXJ0ZV9tb3YxNigodWludDhfdCAqKWRzdCArIDE1 ICogMTYsIChjb25zdCB1aW50OF90ICopc3JjICsgMTUgKiAxNik7DQo+IC19DQo+ICsjZGVmaW5l IEFMSUdOTUVOVF9NQVNLIDB4MEYNCj4gDQo+ICAvKioNCj4gICAqIE1hY3JvIGZvciBjb3B5aW5n IHVuYWxpZ25lZCBibG9jayBmcm9tIG9uZSBsb2NhdGlvbiB0byBhbm90aGVyIHdpdGgNCj4gY29u c3RhbnQgbG9hZCBvZmZzZXQsDQo+IEBAIC03MTIsMTcgKzU5MywxNSBAQCBydGVfbWVtY3B5X2dl bmVyaWModm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBuKQ0KPiAgCSAqLw0KPiAg CWlmIChuIDw9IDMyKSB7DQo+ICAJCXJ0ZV9tb3YxNigodWludDhfdCAqKWRzdCwgKGNvbnN0IHVp bnQ4X3QgKilzcmMpOw0KPiAtCQlydGVfbW92MTYoKHVpbnQ4X3QgKilkc3QgLSAxNiArIG4sIChj b25zdCB1aW50OF90ICopc3JjIC0gMTYgKw0KPiBuKTsNCj4gLQkJcmV0dXJuIHJldDsNCj4gLQl9 DQo+IC0JaWYgKG4gPD0gNDgpIHsNCj4gLQkJcnRlX21vdjMyKCh1aW50OF90ICopZHN0LCAoY29u c3QgdWludDhfdCAqKXNyYyk7DQo+ICsJCWlmIChfX3J0ZV9jb25zdGFudChuKSAmJiBuID09IDE2 KQ0KPiArCQkJcmV0dXJuIHJldDsgLyogYXZvaWQgKGhhcm1sZXNzKSBkdXBsaWNhdGUgY29weSAq Lw0KPiAgCQlydGVfbW92MTYoKHVpbnQ4X3QgKilkc3QgLSAxNiArIG4sIChjb25zdCB1aW50OF90 ICopc3JjIC0gMTYgKw0KPiBuKTsNCj4gIAkJcmV0dXJuIHJldDsNCj4gIAl9DQo+ICAJaWYgKG4g PD0gNjQpIHsNCj4gIAkJcnRlX21vdjMyKCh1aW50OF90ICopZHN0LCAoY29uc3QgdWludDhfdCAq KXNyYyk7DQo+IC0JCXJ0ZV9tb3YxNigodWludDhfdCAqKWRzdCArIDMyLCAoY29uc3QgdWludDhf dCAqKXNyYyArIDMyKTsNCj4gKwkJaWYgKG4gPiA0OCkNCj4gKwkJCXJ0ZV9tb3YxNigodWludDhf dCAqKWRzdCArIDMyLCAoY29uc3QgdWludDhfdCAqKXNyYyArIDMyKTsNCj4gIAkJcnRlX21vdjE2 KCh1aW50OF90ICopZHN0IC0gMTYgKyBuLCAoY29uc3QgdWludDhfdCAqKXNyYyAtIDE2ICsNCj4g bik7DQo+ICAJCXJldHVybiByZXQ7DQo+ICAJfQ0KPiBAQCAtODI4LDggKzcwNywxNCBAQCBydGVf bWVtY3B5X2FsaWduZWQodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBuKQ0KPiAg CX0NCj4gDQo+ICAJLyogQ29weSAxNiA8PSBzaXplIDw9IDMyIGJ5dGVzICovDQo+ICsJaWYgKF9f cnRlX2NvbnN0YW50KG4pICYmIG4gPT0gMzIpIHsNCj4gKwkJcnRlX21vdjMyKCh1aW50OF90ICop ZHN0LCAoY29uc3QgdWludDhfdCAqKXNyYyk7DQo+ICsJCXJldHVybiByZXQ7DQo+ICsJfQ0KPiAg CWlmIChuIDw9IDMyKSB7DQo+ICAJCXJ0ZV9tb3YxNigodWludDhfdCAqKWRzdCwgKGNvbnN0IHVp bnQ4X3QgKilzcmMpOw0KPiArCQlpZiAoX19ydGVfY29uc3RhbnQobikgJiYgbiA9PSAxNikNCj4g KwkJCXJldHVybiByZXQ7IC8qIGF2b2lkIChoYXJtbGVzcykgZHVwbGljYXRlIGNvcHkgKi8NCj4g IAkJcnRlX21vdjE2KCh1aW50OF90ICopZHN0IC0gMTYgKyBuLA0KPiAgCQkJCShjb25zdCB1aW50 OF90ICopc3JjIC0gMTYgKyBuKTsNCj4gDQo+IEBAIC04MzcsNiArNzIyLDEwIEBAIHJ0ZV9tZW1j cHlfYWxpZ25lZCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IG4pDQo+ICAJfQ0K PiANCj4gIAkvKiBDb3B5IDMyIDwgc2l6ZSA8PSA2NCBieXRlcyAqLw0KPiArCWlmIChfX3J0ZV9j b25zdGFudChuKSAmJiBuID09IDY0KSB7DQo+ICsJCXJ0ZV9tb3Y2NCgodWludDhfdCAqKWRzdCwg KGNvbnN0IHVpbnQ4X3QgKilzcmMpOw0KPiArCQlyZXR1cm4gcmV0Ow0KPiArCX0NCj4gIAlpZiAo biA8PSA2NCkgew0KPiAgCQlydGVfbW92MzIoKHVpbnQ4X3QgKilkc3QsIChjb25zdCB1aW50OF90 ICopc3JjKTsNCj4gIAkJcnRlX21vdjMyKCh1aW50OF90ICopZHN0IC0gMzIgKyBuLA0KPiAtLQ0K PiAyLjE3LjENCg0K