From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <gage.eads@intel.com>
Received: from mga02.intel.com (mga02.intel.com [134.134.136.20])
 by dpdk.org (Postfix) with ESMTP id A2D30293B
 for <dev@dpdk.org>; Fri, 25 Jan 2019 18:21:30 +0100 (CET)
X-Amp-Result: SKIPPED(no attachment in message)
X-Amp-File-Uploaded: False
Received: from orsmga005.jf.intel.com ([10.7.209.41])
 by orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384;
 25 Jan 2019 09:21:29 -0800
X-ExtLoop1: 1
X-IronPort-AV: E=Sophos;i="5.56,522,1539673200"; d="scan'208";a="294415495"
Received: from fmsmsx108.amr.corp.intel.com ([10.18.124.206])
 by orsmga005.jf.intel.com with ESMTP; 25 Jan 2019 09:21:29 -0800
Received: from FMSMSX109.amr.corp.intel.com (10.18.116.9) by
 FMSMSX108.amr.corp.intel.com (10.18.124.206) with Microsoft SMTP Server (TLS)
 id 14.3.408.0; Fri, 25 Jan 2019 09:21:29 -0800
Received: from fmsmsx108.amr.corp.intel.com ([169.254.9.99]) by
 FMSMSX109.amr.corp.intel.com ([169.254.15.96]) with mapi id 14.03.0415.000;
 Fri, 25 Jan 2019 09:21:28 -0800
From: "Eads, Gage" <gage.eads@intel.com>
To: Ola Liljedahl <Ola.Liljedahl@arm.com>, "dev@dpdk.org" <dev@dpdk.org>,
 "jerinj@marvell.com" <jerinj@marvell.com>, "mczekaj@marvell.com"
 <mczekaj@marvell.com>
CC: "olivier.matz@6wind.com" <olivier.matz@6wind.com>,
 "stephen@networkplumber.org" <stephen@networkplumber.org>, nd <nd@arm.com>,
 "Richardson, Bruce" <bruce.richardson@intel.com>, "arybchenko@solarflare.com"
 <arybchenko@solarflare.com>, "Ananyev, Konstantin"
 <konstantin.ananyev@intel.com>
Thread-Topic: [dpdk-dev] [PATCH v3 2/5] ring: add a non-blocking implementation
Thread-Index: AQHUr0H3NsJBTf2hT0+nXGXAmKraP6W7ZOeAgABKckCAAPt7gIADjkUw
Date: Fri, 25 Jan 2019 17:21:27 +0000
Message-ID: <9184057F7FC11744A2107296B6B8EB1E541CB6FE@FMSMSX108.amr.corp.intel.com>
References: <20190115235227.14013-1-gage.eads@intel.com>
 <20190118152326.22686-1-gage.eads@intel.com>
 <20190118152326.22686-3-gage.eads@intel.com>
 <1548168583.31150.32.camel@arm.com>
 <9184057F7FC11744A2107296B6B8EB1E541CA46E@FMSMSX108.amr.corp.intel.com>
 <1548238575.31150.73.camel@arm.com>
In-Reply-To: <1548238575.31150.73.camel@arm.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiMjNiYzc0MmUtZTg0Zi00YjBmLWI1MGQtOGYyMzEwMDNlZTQwIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiazRERVlucHhoRGhhSkRXSnoyczR0dW54bXhWeFZzNzlaeSs4RUVuYVg5bURIXC92WU4xTDQ5TDVoRnRFRHVXTEkifQ==
x-ctpclassification: CTP_NT
dlp-product: dlpe-windows
dlp-version: 11.0.400.15
dlp-reaction: no-action
x-originating-ip: [10.1.200.107]
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
MIME-Version: 1.0
Subject: Re: [dpdk-dev] [PATCH v3 2/5] ring: add a non-blocking
 implementation
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: DPDK patches and discussions <dev.dpdk.org>
List-Unsubscribe: <https://mails.dpdk.org/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://mails.dpdk.org/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <https://mails.dpdk.org/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
X-List-Received-Date: Fri, 25 Jan 2019 17:21:31 -0000

DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogT2xhIExpbGplZGFobCBb
bWFpbHRvOk9sYS5MaWxqZWRhaGxAYXJtLmNvbV0NCj4gU2VudDogV2VkbmVzZGF5LCBKYW51YXJ5
IDIzLCAyMDE5IDQ6MTYgQU0NCj4gVG86IEVhZHMsIEdhZ2UgPGdhZ2UuZWFkc0BpbnRlbC5jb20+
OyBkZXZAZHBkay5vcmcNCj4gQ2M6IG9saXZpZXIubWF0ekA2d2luZC5jb207IHN0ZXBoZW5AbmV0
d29ya3BsdW1iZXIub3JnOyBuZA0KPiA8bmRAYXJtLmNvbT47IFJpY2hhcmRzb24sIEJydWNlIDxi
cnVjZS5yaWNoYXJkc29uQGludGVsLmNvbT47DQo+IGFyeWJjaGVua29Ac29sYXJmbGFyZS5jb207
IEFuYW55ZXYsIEtvbnN0YW50aW4NCj4gPGtvbnN0YW50aW4uYW5hbnlldkBpbnRlbC5jb20+DQo+
IFN1YmplY3Q6IFJlOiBbZHBkay1kZXZdIFtQQVRDSCB2MyAyLzVdIHJpbmc6IGFkZCBhIG5vbi1i
bG9ja2luZyBpbXBsZW1lbnRhdGlvbg0KPiANCj4gT24gVHVlLCAyMDE5LTAxLTIyIGF0IDIxOjMx
ICswMDAwLCBFYWRzLCBHYWdlIHdyb3RlOg0KPiA+IEhpIE9sYSwNCj4gPg0KPiA+IDxzbmlwPg0K
PiA+DQo+ID4gPg0KPiA+ID4gPg0KPiA+ID4gPiBAQCAtMzMxLDYgKzQzMywzMTkgQEAgdm9pZCBy
dGVfcmluZ19kdW1wKEZJTEUgKmYsIGNvbnN0IHN0cnVjdA0KPiA+ID4gPiBydGVfcmluZyAqcik7
DQo+ID4gPiA+IMKgI2VuZGlmDQo+ID4gPiA+IMKgI2luY2x1ZGUgInJ0ZV9yaW5nX2dlbmVyaWNf
NjQuaCINCj4gPiA+ID4NCj4gPiA+ID4gKy8qIEBpbnRlcm5hbCAxMjgtYml0IHN0cnVjdHVyZSB1
c2VkIGJ5IHRoZSBub24tYmxvY2tpbmcgcmluZyAqLw0KPiA+ID4gPiArc3RydWN0IG5iX3Jpbmdf
ZW50cnkgew0KPiA+ID4gPiArCXZvaWQgKnB0cjsgLyoqPCBEYXRhIHBvaW50ZXIgKi8NCj4gPiA+
ID4gKwl1aW50NjRfdCBjbnQ7IC8qKjwgTW9kaWZpY2F0aW9uIGNvdW50ZXIgKi8NCj4gPiA+IFdo
eSBub3QgbWFrZSAnY250JyB1aW50cHRyX3Q/IFRoaXMgd2F5IDMyLWJpdCBhcmNoaXRlY3R1cmVz
IHdpbGwNCj4gPiA+IGFsc28gYmUgc3VwcG9ydGVkLiBJIHRoaW5rIHRoZXJlIGFyZSBzb21lIGNs
YWltcyB0aGF0IERQREsgc3RpbGwgc3VwcG9ydHMgZS5nLg0KPiA+ID4gQVJNdjdhDQo+ID4gPiBh
bmQgcG9zc2libHkgYWxzbyAzMi1iaXQgeDg2Pw0KPiA+IEkgY2hvc2UgYSA2NC1iaXQgbW9kaWZp
Y2F0aW9uIGNvdW50ZXIgYmVjYXVzZSAocHJhY3RpY2FsbHkgc3BlYWtpbmcpDQo+ID4gdGhlIEFC
QSBwcm9ibGVtIHdpbGwgbm90IG9jY3VyIHdpdGggc3VjaCBhIGxhcmdlIGNvdW50ZXIgLS0gZGVm
aW5pdGVseQ0KPiA+IG5vdCB3aXRoaW4gbXkgbGlmZXRpbWUuIFNlZSB0aGUgIkRpc2N1c3Npb24i
IHNlY3Rpb24gb2YgdGhlIGNvbW1pdA0KPiA+IG1lc3NhZ2UgZm9yIG1vcmUgaW5mb3JtYXRpb24u
DQo+ID4NCj4gPiBXaXRoIGEgMzItYml0IGNvdW50ZXIsIHRoZXJlIGlzIGEgdmVyeSAodmVyeSkg
bG93IGxpa2VsaWhvb2Qgb2YgaXQsDQo+ID4gYnV0IGl0IGlzIHBvc3NpYmxlLiBQZXJzb25hbGx5
LCBJIGRvbid0IGZlZWwgY29tZm9ydGFibGUgcHJvdmlkaW5nDQo+ID4gc3VjaCBjb2RlLCBiZWNh
dXNlIGEpIEkgZG91YnQgYWxsIHVzZXJzIHdvdWxkIHVuZGVyc3RhbmQgdGhlDQo+ID4gaW1wbGVt
ZW50YXRpb24gd2VsbCBlbm91Z2ggdG8gZG8gdGhlIHJpc2svcmV3YXJkIGFuYWx5c2lzLCBhbmQg
Yikgc3VjaA0KPiA+IGEgYnVnIHdvdWxkIGJlIG5lYXIgaW1wb3NzaWJsZSB0byByZXByb2R1Y2Ug
YW5kIHJvb3QtY2F1c2UgaWYgaXQgZGlkIG9jY3VyLg0KPiBXaXRoIGEgNjQtYml0IGNvdW50ZXIg
KGFuZCAzMi1iaXQgcG9pbnRlciksIDMyLWJpdCBhcmNoaXRlY3R1cmVzIChlLmcuIEFSTXY3YSBh
bmQNCj4gcHJvYmFibHkgeDg2IGFzIHdlbGwpIHdvbid0IGJlIGFibGUgdG8gc3VwcG9ydCB0aGlz
IGFzIHRoZXkgYXQgYmVzdCBzdXBwb3J0IDY0LWJpdA0KPiBDQVMgKEFSTXY3YSBoYXMgTERSRVhE
L1NUUkVYRCkuIFNvIHlvdSBhcmUgZXNzZW50aWFsbHkgcHV0dGluZyBhIDY0LWJpdCAoYW5kDQo+
IDEyOC1iaXQgQ0FTKSByZXF1aXJlbWVudCBvbiB0aGUgaW1wbGVtZW50YXRpb24uDQo+IA0KDQpZ
ZXMsIEkgYW0uIEkgdHJpZWQgdG8gbWFrZSB0aGF0IGNsZWFyIGluIHRoZSBjb3ZlciBsZXR0ZXIu
DQoNCj4gPg0KPiA+ID4NCj4gPiA+DQo+ID4gPiA+DQo+ID4gPiA+ICt9Ow0KPiA+ID4gPiArDQo+
ID4gPiA+ICsvKiBUaGUgbm9uLWJsb2NraW5nIHJpbmcgYWxnb3JpdGhtIGlzIGJhc2VkIG9uIHRo
ZSBvcmlnaW5hbCBydGUNCj4gPiA+ID4gK3JpbmcgKGRlcml2ZWQNCj4gPiA+ID4gKyAqIGZyb20g
RnJlZUJTRCdzIGJ1ZnJpbmcuaCkgYW5kIGluc3BpcmVkIGJ5IE1pY2hhZWwgYW5kIFNjb3R0J3MN
Cj4gPiA+ID4gK25vbi1ibG9ja2luZw0KPiA+ID4gPiArICogY29uY3VycmVudCBxdWV1ZS4NCj4g
PiA+ID4gKyAqLw0KPiA+ID4gPiArDQo+ID4gPiA+ICsvKioNCj4gPiA+ID4gKyAqIEBpbnRlcm5h
bA0KPiA+ID4gPiArICrCoMKgwqBFbnF1ZXVlIHNldmVyYWwgb2JqZWN0cyBvbiB0aGUgbm9uLWJs
b2NraW5nIHJpbmcNCj4gPiA+ID4gKyhzaW5nbGUtcHJvZHVjZXIgb25seSkNCj4gPiA+ID4gKyAq
DQo+ID4gPiA+ICsgKiBAcGFyYW0gcg0KPiA+ID4gPiArICrCoMKgwqBBIHBvaW50ZXIgdG8gdGhl
IHJpbmcgc3RydWN0dXJlLg0KPiA+ID4gPiArICogQHBhcmFtIG9ial90YWJsZQ0KPiA+ID4gPiAr
ICrCoMKgwqBBIHBvaW50ZXIgdG8gYSB0YWJsZSBvZiB2b2lkICogcG9pbnRlcnMgKG9iamVjdHMp
Lg0KPiA+ID4gPiArICogQHBhcmFtIG4NCj4gPiA+ID4gKyAqwqDCoMKgVGhlIG51bWJlciBvZiBv
YmplY3RzIHRvIGFkZCBpbiB0aGUgcmluZyBmcm9tIHRoZSBvYmpfdGFibGUuDQo+ID4gPiA+ICsg
KiBAcGFyYW0gYmVoYXZpb3INCj4gPiA+ID4gKyAqwqDCoMKgUlRFX1JJTkdfUVVFVUVfRklYRUQ6
wqDCoMKgwqBFbnF1ZXVlIGEgZml4ZWQgbnVtYmVyIG9mIGl0ZW1zIHRvDQo+ID4gPiA+ICt0aGUg
cmluZw0KPiA+ID4gPiArICrCoMKgwqBSVEVfUklOR19RVUVVRV9WQVJJQUJMRTogRW5xdWV1ZSBh
cyBtYW55IGl0ZW1zIGFzIHBvc3NpYmxlDQo+ID4gPiA+ICt0byB0aGUgcmluZw0KPiA+ID4gPiAr
ICogQHBhcmFtIGZyZWVfc3BhY2UNCj4gPiA+ID4gKyAqwqDCoMKgcmV0dXJucyB0aGUgYW1vdW50
IG9mIHNwYWNlIGFmdGVyIHRoZSBlbnF1ZXVlIG9wZXJhdGlvbiBoYXMNCj4gPiA+ID4gK2Zpbmlz
aGVkDQo+ID4gPiA+ICsgKiBAcmV0dXJuDQo+ID4gPiA+ICsgKsKgwqDCoEFjdHVhbCBudW1iZXIg
b2Ygb2JqZWN0cyBlbnF1ZXVlZC4NCj4gPiA+ID4gKyAqwqDCoMKgSWYgYmVoYXZpb3IgPT0gUlRF
X1JJTkdfUVVFVUVfRklYRUQsIHRoaXMgd2lsbCBiZSAwIG9yIG4gb25seS4NCj4gPiA+ID4gKyAq
Lw0KPiA+ID4gPiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgaW50DQo+ID4g
PiA+ICtfX3J0ZV9yaW5nX2RvX25iX2VucXVldWVfc3Aoc3RydWN0IHJ0ZV9yaW5nICpyLCB2b2lk
ICogY29uc3QgKm9ial90YWJsZSwNCj4gPiA+ID4gKwkJCcKgwqDCoMKgdW5zaWduZWQgaW50IG4s
DQo+ID4gPiA+ICsJCQnCoMKgwqDCoGVudW0gcnRlX3JpbmdfcXVldWVfYmVoYXZpb3IgYmVoYXZp
b3IsDQo+ID4gPiA+ICsJCQnCoMKgwqDCoHVuc2lnbmVkIGludCAqZnJlZV9zcGFjZSkNCj4gPiA+
ID4gK3sNCj4gPiA+ID4gKwl1aW50MzJfdCBmcmVlX2VudHJpZXM7DQo+ID4gPiA+ICsJc2l6ZV90
IGhlYWQsIG5leHQ7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwluID0gX19ydGVfcmluZ19tb3ZlX3By
b2RfaGVhZF82NChyLCAxLCBuLCBiZWhhdmlvciwNCj4gPiA+ID4gKwkJCQkJwqAmaGVhZCwgJm5l
eHQsICZmcmVlX2VudHJpZXMpOw0KPiA+ID4gPiArCWlmIChuID09IDApDQo+ID4gPiA+ICsJCWdv
dG8gZW5kOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJRU5RVUVVRV9QVFJTX05CKHIsICZyWzFdLCBo
ZWFkLCBvYmpfdGFibGUsIG4pOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJci0+cHJvZF82NC50YWls
ICs9IG47DQo+ID4gPiBEb24ndCB3ZSBuZWVkIHJlbGVhc2Ugb3JkZXIgd2hlbiAob3Igc21wX3dt
YiBiZXR3ZWVuKSB3cml0aW5nIG9mIHRoZQ0KPiA+ID4gcmluZyBwb2ludGVycyBhbmQgdGhlIHVw
ZGF0ZSBvZiB0YWlsPyBCeSB1cGRhdGluZyB0aGUgdGFpbCBwb2ludGVyLA0KPiA+ID4gd2UgYXJl
IHN5bmNocm9uaXNpbmcgd2l0aCBhIGNvbnN1bWVyLg0KPiA+ID4NCj4gPiA+IEkgcHJlZmVyIHVz
aW5nIF9fYXRvbWljIG9wZXJhdGlvbnMgZXZlbiBmb3IgbG9hZCBhbmQgc3RvcmUuIFlvdSBjYW4N
Cj4gPiA+IHNlZSB3aGljaCBwYXJ0cyBvZiB0aGUgY29kZSB0aGF0IHN5bmNocm9uaXNlIHdpdGgg
ZWFjaCBvdGhlciwgZS5nLg0KPiA+ID4gc3RvcmUtcmVsZWFzZSB0byBzb21lIGxvY2F0aW9uIHN5
bmNocm9uaXNlcyB3aXRoIGxvYWQtYWNxdWlyZSBmcm9tDQo+ID4gPiB0aGUgc2FtZSBsb2NhdGlv
bi4gSWYgeW91IGRvbid0IGtub3cgaG93IGRpZmZlcmVudCB0aHJlYWRzDQo+ID4gPiBzeW5jaHJv
bmlzZSB3aXRoIGVhY2ggb3RoZXIsIHlvdSBhcmUgdmVyeSBsaWtlbHkgdG8gbWFrZSBtaXN0YWtl
cy4NCj4gPiA+DQo+ID4gWW91IGNhbiB0ZWxsIHRoaXMgY29kZSB3YXMgd3JpdHRlbiB3aGVuIEkg
dGhvdWdodCB4ODYtNjQgd2FzIHRoZSBvbmx5DQo+ID4gdmlhYmxlIHRhcmdldCA6KS4gWWVzLCB5
b3UgYXJlIGNvcnJlY3QuDQo+ID4NCj4gPiBXaXRoIHJlZ2FyZHMgdG8gdXNpbmcgX19hdG9taWMg
aW50cmluc2ljcywgSSdtIHBsYW5uaW5nIG9uIHRha2luZyBhDQo+ID4gc2ltaWxhciBhcHByb2Fj
aCB0byB0aGUgZnVuY3Rpb25zIGR1cGxpY2F0ZWQgaW4gcnRlX3JpbmdfZ2VuZXJpYy5oIGFuZA0K
PiA+IHJ0ZV9yaW5nX2MxMV9tZW0uaDogb25lIHZlcnNpb24gdGhhdCB1c2VzIHJ0ZV9hdG9taWMg
ZnVuY3Rpb25zIChhbmQNCj4gPiB0aHVzIHN0cmljdGVyIG1lbW9yeSBvcmRlcmluZykgYW5kIG9u
ZSB0aGF0IHVzZXMgX19hdG9taWMgaW50cmluc2ljcw0KPiA+IChhbmQgdGh1cyBjYW4gYmVuZWZp
dCBmcm9tIG1vcmUgcmVsYXhlZCBtZW1vcnkgb3JkZXJpbmcpLg0KPiBXaGF0J3MgdGhlIGFkdmFu
dGFnZSBvZiBoYXZpbmcgdHdvIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbnM/IFdoYXQgaXMgdGhl
DQo+IGRpc2FkdmFudGFnZT8NCj4gDQo+IFRoZSBleGlzdGluZyByaW5nIGJ1ZmZlciBjb2RlIG9y
aWdpbmFsbHkgaGFkIG9ubHkgdGhlICJsZWdhY3kiIGltcGxlbWVudGF0aW9uDQo+IHdoaWNoIHdh
cyBrZXB0IHdoZW4gdGhlIF9fYXRvbWljIGltcGxlbWVudGF0aW9uIHdhcyBhZGRlZC4gVGhlIHJl
YXNvbg0KPiBjbGFpbWVkIHdhcyB0aGF0IHNvbWUgb2xkZXIgY29tcGlsZXJzIGZvciB4ODYgZG8g
bm90IHN1cHBvcnQgR0NDIF9fYXRvbWljDQo+IGJ1aWx0aW5zLiBCdXQgSSB0aG91Z2h0IHRoZXJl
IHdhcyBjb25zZW5zdXMgdGhhdCBuZXcgZnVuY3Rpb25hbGl0eSBjb3VsZCBoYXZlDQo+IG9ubHkg
X19hdG9taWMgaW1wbGVtZW50YXRpb25zLg0KPiANCg0KV2hlbiBDT05GSUdfUlRFX1JJTkdfVVNF
X0MxMV9NRU1fTU9ERUwgd2FzIGludHJvZHVjZWQsIGl0IHdhcyBsZWZ0IGRpc2FibGVkIGZvciB0
aHVuZGVyeFsxXSBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4gQXNzdW1pbmcgdGhhdCBoYXNuJ3Qg
Y2hhbmdlZCwgdGhlIGFkdmFudGFnZSB0byBoYXZpbmcgdHdvIHZlcnNpb25zIGlzIHRvIGJlc3Qg
c3VwcG9ydCBhbGwgb2YgRFBESydzIHBsYXRmb3Jtcy4gVGhlIGRpc2FkdmFudGFnZSBpcyBvZiBj
b3Vyc2UgZHVwbGljYXRlZCBjb2RlIGFuZCB0aGUgYWRkaXRpb25hbCBtYWludGVuYW5jZSBidXJk
ZW4uDQoNClRoYXQgc2FpZCwgaWYgdGhlIHRodW5kZXJ4IG1haW50YWluZXJzIGFyZSBvayB3aXRo
IGl0LCBJJ20gY2VydGFpbmx5IG9wZW4gdG8gb25seSBkb2luZyB0aGUgX19hdG9taWMgdmVyc2lv
bi4gTm90ZSB0aGF0IGV2ZW4gaW4gdGhlIF9fYXRvbWljIHZlcnNpb24sIGJhc2VkIG9uIEhvbm5h
cGEncyBmaW5kaW5nc1syXSwgdXNpbmcgYSBEUERLLWRlZmluZWQgcnRlX2F0b21pYzEyOF9jbXBz
ZXQoKSAod2l0aCBhZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBzdXBwb3J0IG1hY2hpbmVzIHdpdGgg
d2VhayBjb25zaXN0ZW5jeSkgYXBwZWFycyB0byBiZSBhIGJldHRlciBvcHRpb24gdGhhbiBfX2F0
b21pY19jb21wYXJlX2V4Y2hhbmdlXzE2Lg0KDQpJIGNvdWxkbid0IGZpbmQgdGhlIGRpc2N1c3Np
b24gYWJvdXQgbmV3IGZ1bmN0aW9uYWxpdHkgdXNpbmcgX19hdG9taWMgZ29pbmcgZm9yd2FyZCAt
LSBjYW4geW91IHNlbmQgYSBsaW5rPw0KDQpbMV0gaHR0cHM6Ly9tYWlscy5kcGRrLm9yZy9hcmNo
aXZlcy9kZXYvMjAxNy1EZWNlbWJlci8wODI4NTMuaHRtbA0KWzJdIGh0dHA6Ly9tYWlscy5kcGRr
Lm9yZy9hcmNoaXZlcy9kZXYvMjAxOS1KYW51YXJ5LzEyNDAwMi5odG1sDQoNCj4gRG9lcyB0aGUg
bm9uLWJsb2NraW5nIHJpbmcgYnVmZmVyIGltcGxlbWVudGF0aW9uIGhhdmUgdG8gc3VwcG9ydCB0
aGVzZSBvbGRlcg0KPiBjb21waWxlcnM/IFdpbGwgdGhlIGFwcGxpY2F0aW9ucyB0aGF0IHJlcXVp
cmUgdGhlc2Ugb2xkZXIgY29tcGlsZXIgYmUgdXBkYXRlZCB0bw0KPiB1dGlsaXNlIHRoZSBub24t
YmxvY2tpbmcgcmluZyBidWZmZXI/DQo+IA0KDQooU2VlIGFib3ZlIC0tIGNvbXBpbGVyIHZlcnNp
b25zIHdhc24ndCBhIGNvbnNpZGVyYXRpb24gaGVyZS4pDQoNCj4gPg0KPiA+ID4NCj4gPiA+ID4N
Cj4gPiA+ID4gKw0KPiA+ID4gPiArZW5kOg0KPiA+ID4gPiArCWlmIChmcmVlX3NwYWNlICE9IE5V
TEwpDQo+ID4gPiA+ICsJCSpmcmVlX3NwYWNlID0gZnJlZV9lbnRyaWVzIC0gbjsNCj4gPiA+ID4g
KwlyZXR1cm4gbjsNCj4gPiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ID4gPiArLyoqDQo+ID4gPiA+
ICsgKiBAaW50ZXJuYWwNCj4gPiA+ID4gKyAqwqDCoMKgRW5xdWV1ZSBzZXZlcmFsIG9iamVjdHMg
b24gdGhlIG5vbi1ibG9ja2luZyByaW5nDQo+ID4gPiA+ICsobXVsdGktcHJvZHVjZXINCj4gPiA+
ID4gK3NhZmUpDQo+ID4gPiA+ICsgKg0KPiA+ID4gPiArICogQHBhcmFtIHINCj4gPiA+ID4gKyAq
wqDCoMKgQSBwb2ludGVyIHRvIHRoZSByaW5nIHN0cnVjdHVyZS4NCj4gPiA+ID4gKyAqIEBwYXJh
bSBvYmpfdGFibGUNCj4gPiA+ID4gKyAqwqDCoMKgQSBwb2ludGVyIHRvIGEgdGFibGUgb2Ygdm9p
ZCAqIHBvaW50ZXJzIChvYmplY3RzKS4NCj4gPiA+ID4gKyAqIEBwYXJhbSBuDQo+ID4gPiA+ICsg
KsKgwqDCoFRoZSBudW1iZXIgb2Ygb2JqZWN0cyB0byBhZGQgaW4gdGhlIHJpbmcgZnJvbSB0aGUg
b2JqX3RhYmxlLg0KPiA+ID4gPiArICogQHBhcmFtIGJlaGF2aW9yDQo+ID4gPiA+ICsgKsKgwqDC
oFJURV9SSU5HX1FVRVVFX0ZJWEVEOsKgwqDCoMKgRW5xdWV1ZSBhIGZpeGVkIG51bWJlciBvZiBp
dGVtcyB0bw0KPiA+ID4gPiArdGhlIHJpbmcNCj4gPiA+ID4gKyAqwqDCoMKgUlRFX1JJTkdfUVVF
VUVfVkFSSUFCTEU6IEVucXVldWUgYXMgbWFueSBpdGVtcyBhcyBwb3NzaWJsZQ0KPiA+ID4gPiAr
dG8gdGhlIHJpbmcNCj4gPiA+ID4gKyAqIEBwYXJhbSBmcmVlX3NwYWNlDQo+ID4gPiA+ICsgKsKg
wqDCoHJldHVybnMgdGhlIGFtb3VudCBvZiBzcGFjZSBhZnRlciB0aGUgZW5xdWV1ZSBvcGVyYXRp
b24gaGFzDQo+ID4gPiA+ICtmaW5pc2hlZA0KPiA+ID4gPiArICogQHJldHVybg0KPiA+ID4gPiAr
ICrCoMKgwqBBY3R1YWwgbnVtYmVyIG9mIG9iamVjdHMgZW5xdWV1ZWQuDQo+ID4gPiA+ICsgKsKg
wqDCoElmIGJlaGF2aW9yID09IFJURV9SSU5HX1FVRVVFX0ZJWEVELCB0aGlzIHdpbGwgYmUgMCBv
ciBuIG9ubHkuDQo+ID4gPiA+ICsgKi8NCj4gPiA+ID4gK3N0YXRpYyBfX3J0ZV9hbHdheXNfaW5s
aW5lIHVuc2lnbmVkIGludA0KPiA+ID4gPiArX19ydGVfcmluZ19kb19uYl9lbnF1ZXVlX21wKHN0
cnVjdCBydGVfcmluZyAqciwgdm9pZCAqIGNvbnN0DQo+ICpvYmpfdGFibGUsDQo+ID4gPiA+ICsJ
CQnCoMKgwqDCoHVuc2lnbmVkIGludCBuLA0KPiA+ID4gPiArCQkJwqDCoMKgwqBlbnVtIHJ0ZV9y
aW5nX3F1ZXVlX2JlaGF2aW9yIGJlaGF2aW9yLA0KPiA+ID4gPiArCQkJwqDCoMKgwqB1bnNpZ25l
ZCBpbnQgKmZyZWVfc3BhY2UpDQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsjaWYgIWRlZmluZWQoUlRF
X0FSQ0hfWDg2XzY0KSB8fCAhZGVmaW5lZChBTExPV19FWFBFUklNRU5UQUxfQVBJKQ0KPiA+ID4g
PiArCVJURV9TRVRfVVNFRChyKTsNCj4gPiA+ID4gKwlSVEVfU0VUX1VTRUQob2JqX3RhYmxlKTsN
Cj4gPiA+ID4gKwlSVEVfU0VUX1VTRUQobik7DQo+ID4gPiA+ICsJUlRFX1NFVF9VU0VEKGJlaGF2
aW9yKTsNCj4gPiA+ID4gKwlSVEVfU0VUX1VTRUQoZnJlZV9zcGFjZSk7DQo+ID4gPiA+ICsjaWZu
ZGVmIEFMTE9XX0VYUEVSSU1FTlRBTF9BUEkNCj4gPiA+ID4gKwlwcmludGYoIlslcygpXSBSSU5H
X0ZfTkIgcmVxdWlyZXMgYW4gZXhwZXJpbWVudGFsIEFQSS4iDQo+ID4gPiA+ICsJwqDCoMKgwqDC
oMKgwqAiIFJlY29tcGlsZSB3aXRoIEFMTE9XX0VYUEVSSU1FTlRBTF9BUEkgdG8gdXNlIGl0Llxu
Ig0KPiA+ID4gPiArCcKgwqDCoMKgwqDCoMKgLCBfX2Z1bmNfXyk7DQo+ID4gPiA+ICsjZW5kaWYN
Cj4gPiA+ID4gKwlyZXR1cm4gMDsNCj4gPiA+ID4gKyNlbmRpZg0KPiA+ID4gPiArI2lmIGRlZmlu
ZWQoUlRFX0FSQ0hfWDg2XzY0KSAmJiBkZWZpbmVkKEFMTE9XX0VYUEVSSU1FTlRBTF9BUEkpDQo+
ID4gPiA+ICsJc2l6ZV90IGhlYWQsIG5leHQsIHRhaWw7DQo+ID4gPiA+ICsJdWludDMyX3QgZnJl
ZV9lbnRyaWVzOw0KPiA+ID4gPiArCXVuc2lnbmVkIGludCBpOw0KPiA+ID4gPiArDQo+ID4gPiA+
ICsJbiA9IF9fcnRlX3JpbmdfbW92ZV9wcm9kX2hlYWRfNjQociwgMCwgbiwgYmVoYXZpb3IsDQo+
ID4gPiA+ICsJCQkJCcKgJmhlYWQsICZuZXh0LCAmZnJlZV9lbnRyaWVzKTsNCj4gPiA+ID4gKwlp
ZiAobiA9PSAwKQ0KPiA+ID4gPiArCQlnb3RvIGVuZDsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCWZv
ciAoaSA9IDA7IGkgPCBuOyAvKiBpIGluY3JlbWVudGVkIGlmIGVucXVldWUgc3VjY2VlZHMgKi8p
IHsNCj4gPiA+ID4gKwkJc3RydWN0IG5iX3JpbmdfZW50cnkgb2xkX3ZhbHVlLCBuZXdfdmFsdWU7
DQo+ID4gPiA+ICsJCXN0cnVjdCBuYl9yaW5nX2VudHJ5ICpyaW5nX3B0cjsNCj4gPiA+ID4gKw0K
PiA+ID4gPiArCQkvKiBFbnF1ZXVlIHRvIHRoZSB0YWlsIGVudHJ5LiBJZiBhbm90aGVyIHRocmVh
ZCB3aW5zIHRoZQ0KPiA+ID4gPiByYWNlLA0KPiA+ID4gPiArCQnCoCogcmV0cnkgd2l0aCB0aGUg
bmV3IHRhaWwuDQo+ID4gPiA+ICsJCcKgKi8NCj4gPiA+ID4gKwkJdGFpbCA9IHItPnByb2RfNjQu
dGFpbDsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCQlyaW5nX3B0ciA9ICYoKHN0cnVjdCBuYl9yaW5n
X2VudHJ5ICopJnJbMV0pW3RhaWwgJiByLQ0KPiA+ID4gPiA+bWFza107DQo+ID4gPiBUaGlzIGlz
IGFuIHVnbHkgZXhwcmVzc2lvbiBhbmQgY2FzdC4gQWxzbyBJIHRoaW5rIGl0IGlzIHVubmVjZXNz
YXJ5Lg0KPiA+ID4gV2hhdCdzIHByZXZlbnRpbmcgdGhpcyBmcm9tIGJlaW5nIHdyaXR0ZW4gd2l0
aG91dCBhIGNhc3Q/IFBlcmhhcHMNCj4gPiA+IHRoZSByaW5nIGFycmF5IG5lZWRzIHRvIGJlIGEg
dW5pb24gb2YgInZvaWQgKiIgYW5kIHN0cnVjdA0KPiA+ID4gbmJfcmluZ19lbnRyeT8NCj4gPiBU
aGUgY2FzdCBpcyBuZWNlc3NhcnkgZm9yIHRoZSBjb3JyZWN0IHBvaW50ZXIgYXJpdGhtZXRpYyAo
bGV0DQo+ID4gInVpbnRwdHJfdCBiYXNlID09ICZyWzFdIik6DQo+IFllcyBJIGtub3cgdGhlIEMg
bGFuZ3VhZ2UuDQo+IA0KPiA+IC0gV2l0aCBjYXN0OiByaW5nX3B0ciA9IGJhc2UgKyBzaXplb2Yo
c3RydWN0IG5iX3JpbmdfZW50cnkpICogKHRhaWwgJg0KPiA+IHItDQo+ID4gPm1hc2spOw0KPiA+
IC0gVy9vIGNhc3Q6IHJpbmdfcHRyID0gYmFzZSArIHNpemVvZihzdHJ1Y3QgcnRlX3JpbmcpICog
KHRhaWwgJg0KPiA+IHItPm1hc2spOw0KPiA+DQo+ID4gRldJVywgdGhpcyBpcyBlc3NlbnRpYWxs
eSB0aGUgc2FtZSBhcyBpcyBkb25lIHdpdGggdGhlIHNlY29uZCBhcmd1bWVudA0KPiA+ICgmclsx
XSkgdG8gRU5RVUVVRV9QVFJTIGFuZCBERVFVRVVFX1BUUlMsIGJ1dCB0aGVyZSBpdCdzIHNwbGl0
IGFjcm9zcw0KPiA+IG11bHRpcGxlIGxpbmVzIG9mIGNvZGUuIFRoZSBlcXVpdmFsZW50IGhlcmUg
d291bGQgYmU6DQo+ID4NCj4gPiBzdHJ1Y3QgbmJfcmluZ19lbnRyeSAqcmluZ19iYXNlID0gKHN0
cnVjdCBuYl9yaW5nX2VudHJ5KikmclsxXTsNCj4gPiByaW5nX3B0ciA9IHJpbmdfYmFzZVt0YWls
ICYgci0+bWFza107DQo+ID4NCj4gPiBXaGljaCBpcyBtb3JlIGxlZ2libGUsIEkgdGhpbmsuDQo+
IFRoZSBSVEUgcmluZyBidWZmZXIgY29kZSBpcyBub3QgdmVyeSBsZWdpYmxlIHRvIHN0YXJ0IHdp
dGguDQo+IA0KPiA+DQo+ID4gVGhlcmUgaXMgbm8gcmluZyBhcnJheSBzdHJ1Y3R1cmUgaW4gd2hp
Y2ggdG8gYWRkIGEgdW5pb247IHRoZSByaW5nDQo+ID4gYXJyYXkgaXMgYSBjb250aWd1b3VzIGNo
dW5rIG9mIG1lbW9yeSB0aGF0IGltbWVkaWF0ZWx5IGZvbGxvd3MgYWZ0ZXINCj4gPiB0aGUgZW5k
IG9mIGEgc3RydWN0IHJ0ZV9yaW5nLiBXZSBpbnRlcnByZXQgdGhlIG1lbW9yeSB0aGVyZSBhY2Nv
cmRpbmcNCj4gPiB0byB0aGUgcmluZyBlbnRyeSBkYXRhIHR5cGUgKHZvaWQgKiBmb3IgcmVndWxh
ciByaW5ncyBhbmQgc3RydWN0IG5iX3JpbmdfZW50cnkgZm9yDQo+IG5vbi1ibG9ja2luZyByaW5n
cykuDQo+IE15IHdvcnJ5IGlzIHRoYXQgd2UgYXJlIGFidXNpbmcgdGhlIEMgbGFuZ3VhZ2UgYW5k
IGNyZWF0aW5nIGEgbW9uc3RlciBvZg0KPiBmcmFnaWxlIEMgY29kZSB0aGF0IHdpbGwgYmUgbW9y
ZSBhbmQgbW9yZSBkaWZmaWN1bHQgdG8gdW5kZXJzdGFuZCBhbmQgdG8NCj4gbWFpbnRhaW4uIEF0
IHNvbWUgcG9pbnQgeW91IGhhdmUgdG8gdGhpbmsgdGhlIHF1ZXN0aW9uICJBcmUgd2UgZG9pbmcg
dGhlIHJpZ2h0DQo+IHRoaW5nPyIuDQo+DQoNCkknbSBub3QgYXdhcmUgb2YgYW55IGZyYWdpbGl0
eS9tYWludGFpbmFiaWxpdHkgaXNzdWVzIGluIHRoZSByaW5nIGNvZGUgKHRob3VnaCBwZXJoYXBz
IHRoZSBtYWludGFpbmVycyBoYXZlIGEgZGlmZmVyZW50IHZpZXchKSwgYW5kIHBlcnNvbmFsbHkg
SSBmaW5kIHRoZSBjb2RlIGZhaXJseSBsZWdpYmxlLiBJZiB5b3UgaGF2ZSBhIHNwZWNpZmljIHN1
Z2dlc3Rpb24sIEknbGwgbG9vayBpbnRvIGluY29ycG9yYXRpbmcgaXQuDQoNClRoYW5rcywNCkdh
Z2UNCg0KPC9zbmlwPg0K