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 EFD7E41B8E; Tue, 31 Jan 2023 13:23:44 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id C4A4A40DFB; Tue, 31 Jan 2023 13:23:44 +0100 (CET) Received: from smartserver.smartsharesystems.com (smartserver.smartsharesystems.com [77.243.40.215]) by mails.dpdk.org (Postfix) with ESMTP id B23C14067B for ; Tue, 31 Jan 2023 13:23:42 +0100 (CET) X-MimeOLE: Produced By Microsoft Exchange V6.5 Content-class: urn:content-classes:message MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Subject: RE: [PATCH v7 4/4] eal: add nonnull and access function attributes Date: Tue, 31 Jan 2023 13:23:34 +0100 Message-ID: <98CBD80474FA8B44BF855DF32C47DC35D876DA@smartserver.smartshare.dk> In-Reply-To: X-MS-Has-Attach: X-MS-TNEF-Correlator: Thread-Topic: [PATCH v7 4/4] eal: add nonnull and access function attributes Thread-Index: Adk1ZUD8sTFokvaNTCCLvZKHomUQHwACNqWA References: <20221202153432.131023-1-mb@smartsharesystems.com> <20230116130724.50277-1-mb@smartsharesystems.com> <20230116130724.50277-4-mb@smartsharesystems.com> <98CBD80474FA8B44BF855DF32C47DC35D8767B@smartserver.smartshare.dk> <20230117211656.GA30892@linuxonhyperv3.guj3yctzbm1etfxqx2vob5hsef.xx.internal.cloudapp.net> <98CBD80474FA8B44BF855DF32C47DC35D87683@smartserver.smartshare.dk> From: =?utf-8?B?TW9ydGVuIEJyw7hydXA=?= To: "David Marchand" Cc: "Tyler Retzlaff" , , , "Ferruh Yigit" , , , , , , , , , , , 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 PiBGcm9tOiBEYXZpZCBNYXJjaGFuZCBbbWFpbHRvOmRhdmlkLm1hcmNoYW5kQHJlZGhhdC5jb21d DQo+IFNlbnQ6IFR1ZXNkYXksIDMxIEphbnVhcnkgMjAyMyAxMi4xNQ0KPiANCj4gT24gV2VkLCBK YW4gMTgsIDIwMjMgYXQgOTozMSBBTSBNb3J0ZW4gQnLDuHJ1cA0KPiA8bWJAc21hcnRzaGFyZXN5 c3RlbXMuY29tPiB3cm90ZToNCj4gPg0KPiA+ICtUbzogVGhvbWFzICYgRGF2aWQsIHlvdSBwcm9i YWJseSBoYXZlIHNvbWUgb3BpbmlvbnMgb24gdGhpcyB0b28hDQo+ID4NCj4gPiA+IEZyb206IFR5 bGVyIFJldHpsYWZmIFttYWlsdG86cm9yZXR6bGFAbGludXgubWljcm9zb2Z0LmNvbV0NCj4gPiA+ IFNlbnQ6IFR1ZXNkYXksIDE3IEphbnVhcnkgMjAyMyAyMi4xNw0KPiA+ID4NCj4gPiA+IE9uIFR1 ZSwgSmFuIDE3LCAyMDIzIGF0IDA5OjE5OjIyQU0gKzAxMDAsIE1vcnRlbiBCcsO4cnVwIHdyb3Rl Og0KPiA+ID4gPiA+IEZyb206IEZlcnJ1aCBZaWdpdCBbbWFpbHRvOmZlcnJ1aC55aWdpdEBhbWQu Y29tXQ0KPiA+ID4gPiA+IFNlbnQ6IE1vbmRheSwgMTYgSmFudWFyeSAyMDIzIDE4LjAyDQo+ID4g PiA+ID4NCj4gPiA+ID4gPiBPbiAxLzE2LzIwMjMgMTowNyBQTSwgTW9ydGVuIEJyw7hydXAgd3Jv dGU6DQo+ID4gPiA+ID4gPiBBZGQgbm9ubnVsbCBmdW5jdGlvbiBhdHRyaWJ1dGUgdG8gaGVscCB0 aGUgY29tcGlsZXIgZGV0ZWN0IGENCj4gTlVMTA0KPiA+ID4gPiA+ID4gcG9pbnRlciBiZWluZyBw YXNzZWQgdG8gYSBmdW5jdGlvbiBub3QgYWNjZXB0aW5nIE5VTEwNCj4gcG9pbnRlcnMgYXMNCj4g PiA+IGFuDQo+ID4gPiA+ID4gPiBhcmd1bWVudCBhdCBidWlsZCB0aW1lLg0KPiA+ID4gPiA+ID4N Cj4gPiA+ID4gPiA+IEFkZCBhY2Nlc3MgZnVuY3Rpb24gYXR0cmlidXRlcyB0byB0ZWxsIHRoZSBj b21waWxlciBob3cgYQ0KPiA+ID4gZnVuY3Rpb24NCj4gPiA+ID4gPiA+IGFjY2Vzc2VzIG1lbW9y eSBwb2ludGVkIHRvIGJ5IGl0cyBwb2ludGVyIGFyZ3VtZW50cy4NCj4gPiA+ID4gPiA+DQo+ID4g PiA+ID4gPiBBZGQgdGhlc2UgYXR0cmlidXRlcyB0byB0aGUgcnRlX21lbWNweSgpIGZ1bmN0aW9u LCBhcyB0aGUNCj4gZmlyc3QNCj4gPiA+IGluDQo+ID4gPiA+ID4gPiBob3BlZnVsbHkgbWFueSB0 byBjb21lLg0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+IFNpZ25lZC1vZmYtYnk6IE1vcnRlbiBC csO4cnVwIDxtYkBzbWFydHNoYXJlc3lzdGVtcy5jb20+DQo+ID4gPiA+ID4gPiBBY2tlZC1ieTog VHlsZXIgUmV0emxhZmYgPHJvcmV0emxhQGxpbnV4Lm1pY3Jvc29mdC5jb20+DQo+ID4gPiA+ID4g PiBSZXZpZXdlZC1ieTogUnVpZmVuZyBXYW5nIDxydWlmZW5nLndhbmdAYXJtLmNvbT4NCj4gPiA+ ID4gPiA+IC0tLQ0KPiA+ID4gPg0KPiA+ID4gPiBbLi4uXQ0KPiA+ID4gPg0KPiA+ID4gPiA+ID4g Ky8qKg0KPiA+ID4gPiA+ID4gKyAqIFRlbGxzIGNvbXBpbGVyIHRoYXQgdGhlIHBvaW50ZXIgYXJn dW1lbnRzIG11c3QgYmUgbm9uLQ0KPiBudWxsLg0KPiA+ID4gPiA+ID4gKyAqDQo+ID4gPiA+ID4g PiArICogQHBhcmFtIC4uLg0KPiA+ID4gPiA+ID4gKyAqICAgIENvbW1hIHNlcGFyYXRlZCBsaXN0 IG9mIHBhcmFtZXRlciBpbmRleGVzIG9mIHBvaW50ZXINCj4gPiA+ID4gPiBhcmd1bWVudHMuDQo+ ID4gPiA+ID4gPiArICovDQo+ID4gPiA+ID4gPiArI2lmIGRlZmluZWQoUlRFX0NDX0dDQykgfHwg ZGVmaW5lZChSVEVfQ0NfQ0xBTkcpDQo+ID4gPiA+ID4gPiArI2RlZmluZSBfX3J0ZV9ub25udWxs X3BhcmFtcyguLi4pIFwNCj4gPiA+ID4gPiA+ICsgICAgICAgX19hdHRyaWJ1dGVfXygobm9ubnVs bChfX1ZBX0FSR1NfXykpKQ0KPiA+ID4gPiA+ID4gKyNlbHNlDQo+ID4gPiA+ID4gPiArI2RlZmlu ZSBfX3J0ZV9ub25udWxsX3BhcmFtcyguLi4pDQo+ID4gPiA+ID4gPiArI2VuZGlmDQo+ID4gPiA+ ID4gPiArDQo+ID4gPiA+ID4NCj4gPiA+ID4gPiBXaGF0IGRvIHlvdSB0aGluayB0byBoYXZlIGEg bmFtZXNwYWNlIGZvciBtYWNyb3MgbGlrZQ0KPiA+ID4gPiA+ICdfX3J0ZV9wYXJhbV94eHgnLA0K PiA+ID4gPiA+IHNvIG5hbWUgbWFjcm9zIGFzOg0KPiA+ID4gPiA+IF9fcnRlX3BhcmFtX25vbnVs bA0KPiA+ID4gPiA+IF9fcnRlX3BhcmFtX3JlYWRfb25seQ0KPiA+ID4gPiA+IF9fcnRlX3BhcmFt X3dyaXRlX29ubHkNCj4gPiA+ID4gPg0KPiA+ID4gPiA+IE5vIHN0cm9uZyBvcGluaW9uLCBpdCBq dXN0IGZlZWxzIHRpZGllciB0aGlzIHdheQ0KPiA+ID4gPg0KPiA+ID4gPiBCZWluZyBhIHByb3Bv bmVudCBvZiB0aGUgd29ybGRfY291bnRyeV9jaXR5IG5hbWluZyBzY2hlbWUgbXlzZWxmLA0KPiBJ DQo+ID4gPiB3b3VsZCB1c3VhbGx5IGFncmVlIHdpdGggdGhpcyBwcm9wb3NhbC4NCj4gPiA+ID4N Cj4gPiA+ID4gSG93ZXZlciwgaW4gdGhlIGZ1dHVyZSwgd2UgbWlnaHQgYWRkIG1hY3JvcyB3aXRo b3V0IF9wYXJhbSBmb3INCj4gdXNlDQo+ID4gPiBhbG9uZyB3aXRoIHRoZSBmdW5jdGlvbiBwYXJh bWV0ZXJzLCBlLmcuOg0KPiA+ID4gPg0KPiA+ID4gPiBpbnQgZm9vKGludCBiYXIgX19ydGVfbm9u bnVsbCBfX3J0ZV9yZWFkX29ubHkpOw0KPiA+ID4gPg0KPiA+ID4gPiBTbyBJIGRlY2lkZWQgZm9y IHRoaXMgb3JkZXIgaW4gdGhlIG5hbWVzICh0cmVhdGluZw0KPiA+ID4gbm9ubnVsbC9hY2Nlc3Nf bW9kZSBhcyAiY291bnRyeSIgYW5kIHBhcmFtL3BhcmFtcyBhcyAiY2l0eSIpLCBhbHNvDQo+ID4g PiBzb21ld2hhdCBsb29raW5nIGF0IHRoZSBfX3J0ZV9kZXByZWNhdGVkIGFuZA0KPiBfX3J0ZV9k ZXByZWNhdGVkX21zZyhtc2cpDQo+ID4gPiBtYWNyb3MuDQo+ID4gPiA+DQo+ID4gPiA+IEkgaGF2 ZSBubyBzdHJvbmcgcHJlZmVyZW5jZSBlaXRoZXIsIHNvIGlmIGFueW9uZSBkb2VzLCBwbGVhc2UN Cj4gc3BlYWsNCj4gPiA+IHVwLg0KPiA+ID4gPg0KPiA+ID4gPiBTbGlnaHRseSByZWxhdGVkLCBh bHNvIG5vdGUgdGhpczoNCj4gPiA+ID4NCj4gPiA+ID4gVGhlIG5vbm51bGwgbWFjcm8gaXMgcGx1 cmFsIChfcGFyYW1zKSwgYmVjYXVzZSBpdCBjYW4gdGFrZQ0KPiBtdWx0aXBsZQ0KPiA+ID4gcG9p bnRlciBwYXJhbWV0ZXIgaW5kZXhlcy4NCj4gPiA+ID4gVGhlIGFjY2VzcyBtb2RlIG1hY3JvcyBh cmUgc2luZ3VsYXIgKF9wYXJhbSksIGJlY2F1c2UgdGhleSBvbmx5DQo+IHRha2UNCj4gPiA+IG9u ZSBwb2ludGVyIHBhcmFtZXRlciBpbmRleCwgYW5kIHRoZSBvcHRpb25hbCBzaXplIHBhcmFtZXRl ciBpbmRleC4NCj4gPiA+ID4NCj4gPiA+ID4gSSBjb25zaWRlcmVkIHNwbGl0dGluZyB1cCB0aGUg YWNjZXNzIG1vZGUgbWFjcm9zIGV2ZW4gbW9yZSwNCj4gbWFraW5nDQo+ID4gPiB0d28gdmFyaWFu dHMgb2YgZWFjaCwgZS5nLiBfX3J0ZV9yZWFkX29ubHlfcGFyYW0ocHRyX2luZGV4KSBhbmQNCj4g PiA+IF9fcnRlX3JlYWRfb25seV9wYXJhbV9zaXplKHB0cl9pbmRleCwgc2l6ZV9pbmRleCksIGJ1 dCBjb25jbHVkZWQNCj4gdGhhdA0KPiA+ID4gaXQgd291bGQgYmUgZXhjcnVjaWF0aW5nbHkgdmVy Ym9zZS4gVGhlIG9ubHkgcHVycG9zZSB3b3VsZCBiZSB0bw0KPiByZWR1Y2UNCj4gPiA+IHRoZSBy aXNrIG9mIHVzaW5nIHRoZW0gaW5jb3JyZWN0bHkuIEkgZGVjaWRlZCBhZ2FpbnN0IGl0LCB0aGlu a2luZw0KPiB0aGF0DQo+ID4gPiBhbnkgZGV2ZWxvcGVyIGNsZXZlciBlbm91Z2ggdG8gdXNlIHRo ZXNlIG1hY3JvcyBpcyBhbHNvIGNsZXZlcg0KPiBlbm91Z2gNCj4gPiA+IHRvIHVuZGVyc3RhbmQg aG93IHRvIHVzZSB0aGVtIChvciBhdCBsZWFzdCByZWFkIHRoZWlyIHBhcmFtZXRlcg0KPiA+ID4g ZGVzY3JpcHRpb25zIHRvIGxlYXJuIGhvdykuDQo+ID4gPiA+DQo+ID4gPg0KPiA+ID4gbWljcm9z b2Z0IGFsc28gaGFzIGEgdG9vbCAmIGFubm90YXRpb24gdmVoaWNsZSBmb3IgdGhpcyB0eXBlIG9m DQo+IHN0dWZmLg0KPiA+ID4gdGhpcyBkaXNjdXNzaW9uIGhhcyBjYXVzZWQgbWUgdG8gd29uZGVy IHdoYXQgaGFwcGVucyBpZiB3ZSB3b3VsZA0KPiBsaWtlDQo+ID4gPiB0bw0KPiA+ID4gYWRkIGFk ZGl0aW9uYWwgYW5ub3RhdGlvbnMgZm9yIG90aGVyIHRvb2xzLiBqdXN0IGxvYWQgb24gdGhlDQo+ ID4gPiBhbm5vdGF0aW9ucw0KPiA+ID4gYW5kIGV4cGFuZCB0aGVtIGVtcHR5IGNvbmRpdGlvbmFs bHk/DQo+ID4gPg0KPiA+ID4gaHR0cHM6Ly9sZWFybi5taWNyb3NvZnQuY29tL2VuLXVzL2NwcC9j b2RlLXF1YWxpdHkvdXNpbmctc2FsLQ0KPiA+ID4gYW5ub3RhdGlvbnMtdG8tcmVkdWNlLWMtY3Bw LWNvZGUtZGVmZWN0cz92aWV3PW1zdmMtMTcwDQo+ID4gPg0KPiA+ID4gYW55d2F5LCBqdXN0IGEg dGhvdWdodC4gbm8gc2VyaW91cyByZXNwb25zZSByZXF1aXJlZCBoZXJlLg0KPiA+DQo+ID4gRXhj ZWxsZW50IGlucHV0LCBUeWxlciENCj4gPg0KPiA+IElmIHdlIHdhbnQgRFBESyB0byBiZSBjb25z aWRlcmVkIHRydWx5IGNyb3NzLXBsYXRmb3JtLCBhbmQgbm90IHRyZWF0DQo+IG5vbi1MaW51eC9u b24tR0NDIGFzIHNlY29uZCBjbGFzcyBjaXRpemVucywgd2UgbmVlZCB0byBkaXNjdXNzIHRoaXMu DQo+ID4NCj4gPiBNaWNyb3NvZnQncyBTb3VyY2UgQ29kZSBBbm5vdGF0aW9uIExhbmd1YWdlIChT QUwpIHNlZW1zIHZlcnkgZ29vZCwNCj4gYmFzZWQgb24gaXRzIGZpbmVyIGdyYW51bGFyaXR5IHRo YW4gR0NDJ3MgYXR0cmlidXRlcyAod2hpY2ggaW4NCj4gY29tcGFyaXNvbiBzZWVtIGFkZGVkIGFz IGFuIGFmdGVydGhvdWdodCwgbm90IGNsZWFubHkgc3RydWN0dXJlZCBsaWtlDQo+IFNBTCkuIEkg aGF2ZSBvbmx5IHNraW1tZWQgdGhlIGRvY3VtZW50YXRpb24sIGJ1dCB0aGF0IGlzIG15IGltbWVk aWF0ZQ0KPiBpbXByZXNzaW9uIG9mIGl0Lg0KPiA+DQo+ID4gU0FMIHVzZXMgYSBjb21wbGV0ZWx5 IGRpZmZlcmVudCBzeW50YXggdGhhbiBHQ0MgYXR0cmlidXRlcywgYW5kDQo+IE1pY3Jvc29mdCBo YXBwZW5zIHRvIGFsc28gdXNlIG1lbWNweSgpIGFzIGFuIGV4YW1wbGUgaW4gdGhlDQo+IGRvY3Vt ZW50YXRpb24gcmVmZXJyZWQgdG86DQo+ID4NCj4gPiB2b2lkICogbWVtY3B5KA0KPiA+ICAgIF9P dXRfd3JpdGVzX2J5dGVzX2FsbF8oY291bnQpIHZvaWQgKmRlc3QsDQo+ID4gICAgX0luX3JlYWRz X2J5dGVzXyhjb3VudCkgY29uc3Qgdm9pZCAqc3JjLA0KPiA+ICAgIHNpemVfdCBjb3VudA0KPiA+ ICk7DQoNClN0ZXBoZW4gaGFkIGJhZCBleHBlcmllbmNlcyB3aXRoIFNBTCwgc28gbGV0J3MganVz dCBjb25zaWRlciB0aGUgU0FMIG1lbWNweSgpIGV4YW1wbGUgYSByZWZlcmVuY2Ugb25seSwgc2hv d2luZyBob3cgdGhlIHN5bnRheCBvZiBhbm5vdGF0aW9ucyBjYW4gZGlmZmVyIHZlcnkgbXVjaCBi ZXR3ZWVuIGJ1aWxkIHN5c3RlbXMuDQoNCj4gPg0KPiA+IEdvaW5nIGJhY2sgdG8gaG93IHdlIGNh biBoYW5kbGUgdGhpcyBpbiBEUERLLCB3ZSBjYW4gZWl0aGVyOg0KPiA+DQo+ID4gMS4gTm90IGFu bm90YXRlIHRoZSBmdW5jdGlvbnMgYXQgYWxsLCBhbmQgbWlzcyBvdXQgb24gZmluZGluZyB0aGUN Cj4gZXJyb3JzIGZvciB1cy4NCj4gDQo+IFNlZWluZyBob3cgY2xhbmcgc2FmZXR5IGNoZWNrcyBo ZWxwZWQgbWUgY2F0Y2ggYnVncywgdGhhdCB3b3VsZCBiZSBhDQo+IHBpdHkuDQo+IA0KPiA+DQo+ ID4gMi4gSW52ZW50IG91ciBvd24gbGFuZ3VhZ2UgKG9yIGZpbmQgc29tZXRoaW5nIGV4aXN0aW5n KSBmb3IgZnVuY3Rpb24NCj4gaGVhZGVycywgYW5kIHVzZSBhIHBhcnNlciB0byBjb252ZXJ0IHRo ZW0gdG8gY29tcGlsZXIgc3BlY2lmaWMgQy9DKysNCj4gaGVhZGVycyB3aGVuIGJ1aWxkaW5nIHRo ZSBjb2RlLg0KPiANCj4gQXJnaCwgbm8uDQo+IA0KPiA+DQo+ID4gM2EuIEtlZXAgbG9hZGluZyBv biBhdHRyaWJ1dGVzLCB3aXRoIGVtcHR5IG1hY3JvcyBmb3IgdW5zdXBwb3J0ZWQNCj4gY29tcGls ZXJzLg0KPiA+DQo+ID4gM2IuIEtlZXAgbG9hZGluZyBvbiBhdHRyaWJ1dGVzLCB3aXRoIGVtcHR5 IG1hY3JvcyBmb3IgdW5zdXBwb3J0ZWQNCj4gY29tcGlsZXJzLiBCdXQgbGltaXQgb3Vyc2VsdmVz IHRvIEdDQy9DbGFuZyBzdHlsZSBhdHRyaWJ1dGVzLg0KPiA+DQo+ID4gM2MuIEtlZXAgbG9hZGlu ZyBvbiBhdHRyaWJ1dGVzLCB3aXRoIGVtcHR5IG1hY3JvcyBmb3IgdW5zdXBwb3J0ZWQNCj4gY29t cGlsZXJzLiBCdXQgbGltaXQgb3Vyc2VsdmVzIHRvIE1pY3Jvc29mdCBTQUwgc3R5bGUgYXR0cmli dXRlcy4NCj4gPg0KPiA+IDNkLiBLZWVwIGxvYWRpbmcgb24gYXR0cmlidXRlcywgd2l0aCBlbXB0 eSBtYWNyb3MgZm9yIHVuc3VwcG9ydGVkDQo+IGNvbXBpbGVycy4gQnV0IGxpbWl0IG91cnNlbHZl cyB0byB0aGUgbW9zdCByZWxldmFudCBhdHRyaWJ1dGVzLCB1c2luZw0KPiBwZXJmb3JtYW5jZSBh bmQvb3IgYnVnIGRldGVjdGlvbiBhcyBjcml0ZXJpYSB3aGVuIGNvbnNpZGVyaW5nDQo+IHJlbGV2 YW5jZS4NCj4gPg0KPiA+IEkgYW0gc3Ryb25nbHkgYWdhaW5zdCBib3RoIDEgYW5kIDIuDQo+ID4N Cj4gPiBJZiBidWcgZGV0ZWN0aW9uIGlzIHRoZSBwcmltYXJ5IGRyaXZlciwgd2UgY291bGQgc3Rp Y2sgd2l0aCBlaXRoZXIgM2INCj4gb3IgM2MgKGkuZS4gb25seSB0YXJnZXQgb25lIHNwZWNpZmlj IGJ1aWxkIGVudmlyb25tZW50KSBhbmQgcmVseSBvbiB0aGUNCj4gRFBESyBDSSBmb3IgZGV0ZWN0 aW5nIGJ1Z3MuIEJ1dCB0aGVuIGFwcGxpY2F0aW9uIGRldmVsb3BlcnMgd291bGQgbm90DQo+IGJl bmVmaXQsIGJlY2F1c2UgdGhleSBkb24ndCBydW4gdGhlaXIgY29kZSB0aHJvdWdoIHRoZSBEUERL IENJLiBTbyBJIGFtDQo+IGFsc28gYWdhaW5zdCB0aGlzLg0KPiA+DQo+ID4gSSB0aGluayAzZCAo a2VlcCBsb2FkaW5nIG9uIGF0dHJpYnV0ZXMsIGJ1dCBvbmx5IHRoZSBtb3N0IHJlbGV2YW50DQo+ IG9uZXMpIGlzIHRoZSBiZXN0IGNob2ljZS4NCj4gPg0KPiA+IEdDQy9DbGFuZyBzdHlsZSBhdHRy aWJ1dGVzIGFyZSBhbHJlYWR5IHN1cHBvcnRlZCBhcyBtYWNyb3MgcHJlZml4ZWQNCj4gYnkgX19y dGUsIHNvIGxldCdzIG5vdCBjaGFuZ2UgdGhlIHdheSB3ZSBkbyB0aGF0Lg0KPiA+DQo+ID4gUmVn YXJkaW5nIHRoZSBNaWNyb3NvZnQgU0FMLCBJIHN1cHBvc2UgTWljcm9zb2Z0IGFscmVhZHkgY2hv c2UNCj4gYW5ub3RhdGlvbiBuYW1lcyB0byBhdm9pZCBjb2xsaXNpb25zLCBzbyB3ZSBjb3VsZCBj b25zaWRlciB1c2luZyB0aG9zZQ0KPiBleGFjdCBuYW1lcyAoaS5lLiB3aXRob3V0IF9fcnRlIHBy ZWZpeCksIGFuZCBkZWZpbmUgZW1wdHkgbWFjcm9zIGZvcg0KPiBub24tTWljcm9zb2Z0IGNvbXBp bGVycy4gVGhpcyB3b3VsZCBhbGxvdyB1c2luZyBNaWNyb3NvZnQgU0FMDQo+IGFubm90YXRpb25z IGRpcmVjdGx5IGluIHRoZSBEUERLIGNvZGUuDQo+ID4NCj4gDQo+IEkgaGF2ZSBhIGJpdCBvZiB0 cm91YmxlIHVuZGVyc3RhbmRpbmcgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiAzYSBhbmQNCj4gM2Qu LiAzYSB3b3VsZCBiZSBhYm91dCBhY2NlcHRpbmcgYW55IGFubm90YXRpb24/DQoNCkNvcnJlY3Qu DQoNCj4gDQo+IDNkIGlzIHRoZSBiZXN0IG9wdGlvbiBhcyBpdCBpcyBub3QgY2hhbmdpbmcgYW55 dGhpbmcgdG8gd2hhdCB3ZSB3ZXJlDQo+IGRvaW5nIHNvIGZhcjogd2UgZXZhbHVhdGUgdGhlIHBy b3MgYW5kIGNvbnMgb2YgZWFjaCBhbm5vdGF0aW9ucy90b29scywNCj4gY2FzZSBwZXIgY2FzZS4N Cg0KQWdyZWUhDQoNCg==