From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by dpdk.org (Postfix) with ESMTP id CEFC36CC3 for ; Mon, 3 Sep 2018 20:21:51 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 03 Sep 2018 11:21:50 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.53,326,1531810800"; d="scan'208";a="80560734" Received: from irsmsx104.ger.corp.intel.com ([163.33.3.159]) by orsmga003.jf.intel.com with ESMTP; 03 Sep 2018 11:21:31 -0700 Received: from irsmsx105.ger.corp.intel.com ([169.254.7.54]) by IRSMSX104.ger.corp.intel.com ([169.254.5.213]) with mapi id 14.03.0319.002; Mon, 3 Sep 2018 19:21:31 +0100 From: "Ananyev, Konstantin" To: "Joseph, Anoob" , "dev@dpdk.org" CC: "Awal, Mohammad Abdul" , "Doherty, Declan" , Jerin Jacob , Narayana Prasad Thread-Topic: [dpdk-dev] [RFC] ipsec: new library for IPsec data-path processing Thread-Index: AQHUO8sQ1vNhPIIy2kCq+ieD7nPPdqTefpOAgABfO7A= Date: Mon, 3 Sep 2018 18:21:30 +0000 Message-ID: <2601191342CEEE43887BDE71AB977258EA95089D@irsmsx105.ger.corp.intel.com> References: <1535129598-27301-1-git-send-email-konstantin.ananyev@intel.com> <358d1b6c-26f2-b125-07a4-cfb1c0e2a57b@caviumnetworks.com> In-Reply-To: <358d1b6c-26f2-b125-07a4-cfb1c0e2a57b@caviumnetworks.com> Accept-Language: en-IE, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiOGUyMTY2OGItZGI1Ny00MmVlLTgzZDUtZmRhMTY3ZTY0MTkyIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiekhZd0FjOU0xcmVra1wvZWszTDdKS0NwaXBUUGhHN09wUW9FXC8xamZ6RXUyOEc4QVdTMmxEamVxNHI2KzZFcVNwIn0= x-ctpclassification: CTP_NT dlp-product: dlpe-windows dlp-version: 11.0.400.15 dlp-reaction: no-action x-originating-ip: [163.33.239.181] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [dpdk-dev] [RFC] ipsec: new library for IPsec data-path processing X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 03 Sep 2018 18:21:52 -0000 SGkgQW5vb2IsDQoNCj4gSGkgS29uc3RhbnRpbiwNCj4gDQo+IEZldyBjb21tZW50cy4gUGxlYXNl IHNlZSBpbmxpbmUuDQo+IA0KPiBUaGFua3MsDQo+IA0KPiBBbm9vYg0KPiANCj4gT24gMjQtMDgt MjAxOCAyMjoyMywgS29uc3RhbnRpbiBBbmFueWV2IHdyb3RlOg0KPiA+IEV4dGVybmFsIEVtYWls DQo+ID4NCj4gPiBUaGlzIFJGQyBpbnRyb2R1Y2VzIGEgbmV3IGxpYnJhcnkgd2l0aGluIERQREs6 IGxpYnJ0ZV9pcHNlYy4NCj4gPiBUaGUgYWltIGlzIHRvIHByb3ZpZGUgRFBESyBuYXRpdmUgaGln aCBwZXJmb3JtYW5jZSBsaWJyYXJ5IGZvciBJUHNlYw0KPiA+IGRhdGEtcGF0aCBwcm9jZXNzaW5n Lg0KPiA+IFRoZSBsaWJyYXJ5IGlzIHN1cHBvc2VkIHRvIHV0aWxpemUgZXhpc3RpbmcgRFBESyBj cnlwdG8tZGV2IGFuZA0KPiA+IHNlY3VyaXR5IEFQSSB0byBwcm92aWRlIGFwcGxpY2F0aW9uIHdp dGggdHJhbnNwYXJlbnQgSVBzZWMgcHJvY2Vzc2luZyBBUEkuDQo+ID4gVGhlIGxpYnJhcnkgaXMg Y29uY2VudHJhdGVkIG9uIGRhdGEtcGF0aCBwcm90b2NvbHMgcHJvY2Vzc2luZyAoRVNQIGFuZCBB SCksDQo+ID4gSUtFIHByb3RvY29sKHMpIGltcGxlbWVudGF0aW9uIGlzIG91dCBvZiBzY29wZSBm b3IgdGhhdCBsaWJyYXJ5Lg0KPiA+IFRob3VnaCBob29rL2NhbGxiYWNrIG1lY2hhbmlzbXMgd2ls bCBiZSBkZWZpbmVkIHRvIGFsbG93IGludGVncmF0ZSBpdA0KPiA+IHdpdGggZXhpc3RpbmcgSUtF IGltcGxlbWVudGF0aW9ucy4NCj4gPiBEdWUgdG8gcXVpdGUgY29tcGxleCBuYXR1cmUgb2YgSVBz ZWMgcHJvdG9jb2wgc3VpdGUgYW5kIHZhcmlldHkgb2YgdXNlcg0KPiA+IHJlcXVpcmVtZW50cyBh bmQgdXNhZ2Ugc2NlbmFyaW9zIGEgZmV3IEFQSSBsZXZlbHMgd2lsbCBiZSBwcm92aWRlZDoNCj4g PiAxKSBTZWN1cml0eSBBc3NvY2lhdGlvbiAoU0EtbGV2ZWwpIEFQSQ0KPiA+ICAgICAgT3BlcmF0 ZXMgYXQgU0EgbGV2ZWwsIHByb3ZpZGVzIGZ1bmN0aW9ucyB0bzoNCj4gPiAgICAgIC0gaW5pdGlh bGl6ZS90ZWFyZG93biBTQSBvYmplY3QNCj4gPiAgICAgIC0gcHJvY2VzcyBpbmJvdW5kL291dGJv dW5kIEVTUC9BSCBwYWNrZXRzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gU0ENCj4gPiAgICAg ICAgKGRlY3J5cHQvZW5jcnlwdCwgYXV0aGVudGljYXRlLCBjaGVjayBpbnRlZ3JpdHksDQo+ID4g ICAgICAgICBhZGQvcmVtb3ZlIEVTUC9BSCByZWxhdGVkIGhlYWRlcnMgYW5kIGRhdGEsIGV0Yy4p Lg0KPiA+IDIpIFNlY3VyaXR5IEFzc29jaWF0aW9uIERhdGFiYXNlIChTQUQpIEFQSQ0KPiA+ICAg ICAgQVBJIHRvIGNyZWF0ZS9tYW5hZ2UvZGVzdHJveSBJUHNlYyBTQUQuDQo+ID4gICAgICBXaGls ZSBEUERLIElQc2VjIGxpYnJhcnkgcGxhbnMgdG8gaGF2ZSBpdHMgb3duIGltcGxlbWVudGF0aW9u LA0KPiA+ICAgICAgdGhlIGludGVudGlvbiBpcyB0byBrZWVwIGl0IGFzIGluZGVwZW5kZW50IGZy b20gdGhlIG90aGVyIHBhcnRzDQo+ID4gICAgICBvZiBJUHNlYyBsaWJyYXJ5IGFzIHBvc3NpYmxl Lg0KPiA+ICAgICAgVGhhdCBpcyBzdXBwb3NlZCB0byBnaXZlIHVzZXJzIHRoZSBhYmlsaXR5IHRv IHByb3ZpZGUgdGhlaXIgb3duDQo+ID4gICAgICBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU0FEIGNv bXBhdGlibGUgd2l0aCB0aGUgb3RoZXIgcGFydHMgb2YgdGhlDQo+ID4gICAgICBJUHNlYyBsaWJy YXJ5Lg0KPiA+IDMpIElQc2VjIENvbnRleHQgKENUWCkgQVBJDQo+ID4gICAgICBUaGlzIGlzIHN1 cHBvc2VkIHRvIGJlIGEgaGlnaC1sZXZlbCBBUEksIHdoZXJlIGVhY2ggSVBzZWMgQ1RYIGlzIGFu DQo+ID4gICAgICBhYnN0cmFjdGlvbiBvZiAnaW5kZXBlbmRlbnQgY29weSBvZiB0aGUgSVBzZWMg c3RhY2snLg0KPiA+ICAgICAgQ1RYIG93bnMgc2V0IG9mIFNBcywgU0FEcyBhbmQgYXNzaWduZWQg dG8gaXQgY3J5cHRvLWRldiBxdWV1ZXMsIGV0Yy4NCj4gPiAgICAgIGFuZCBwcm92aWRlczoNCj4g PiAgICAgIC0gZGUtbXVsdGlwbGV4aW5nIHN0cmVhbSBvZiBpbmJvdW5kIHBhY2tldHMgdG8gcGFy dGljdWxhciBTQXMgYW5kDQo+ID4gICAgICAgIGZ1cnRoZXIgSVBzZWMgcmVsYXRlZCBwcm9jZXNz aW5nLg0KPiA+ICAgICAgLSBJUHNlYyByZWxhdGVkIHByb2Nlc3NpbmcgZm9yIHRoZSBvdXRib3Vu ZCBwYWNrZXRzLg0KPiA+ICAgICAgLSBTQSBhZGQvZGVsZXRlL3VwZGF0ZSBmdW5jdGlvbmFsaXR5 DQo+IFtBbm9vYl06IFNlY3VyaXR5IFBvbGljeSBpcyBhbiBpbXBvcnRhbnQgYXNwZWN0IG9mIElQ c2VjLiBBbiBJUHNlYw0KPiBsaWJyYXJ5IHdpdGhvdXQgU2VjdXJpdHkgUG9saWN5IEFQSSB3b3Vs ZCBiZSBpbmNvbXBsZXRlLiBGb3IgaW5saW5lDQo+IHByb3RvY29sIG9mZmxvYWQsIHRoZSBmaW5h bCBTUC1TQSBjaGVjayhzZWxlY3RvciBjaGVjaykgaXMgdGhlIG9ubHkNCj4gSVBzZWMgcGFydCBi ZWluZyBkb25lIGJ5IGlwc2VjLXNlY2d3IG5vdy4gV291bGQgbWFrZSBzZW5zZSB0byBhZGQgdGhh dA0KPiBhbHNvIGluIHRoZSBsaWJyYXJ5Lg0KDQpZb3UgbWVhbiBoZXJlLCB0aGF0IHdlIG5lZWQg c29tZSBzb3J0IG9mIFNQRCBpbXBsZW1lbnRhdGlvbiwgY29ycmVjdD8NCg0KPiA+IEN1cnJlbnQg UkZDIGNvbmNlbnRyYXRlcyBvbiBTQS1sZXZlbCBBUEkgb25seSAoMSksDQo+ID4gZGV0YWlsZWQg ZGlzY3Vzc2lvbiBmb3IgMikgYW5kIDMpIHdpbGwgYmUgc3ViamVjdHMgZm9yIHNlcGFyYXRlIFJG QyhzKS4NCj4gPg0KPiA+IFNBIChsb3cpIGxldmVsIEFQSQ0KPiA+ID09PT09PT09PT09PT09PT09 PQ0KPiA+DQo+ID4gQVBJIGRlc2NyaWJlZCBiZWxvdyBvcGVyYXRlcyBvbiBTQSBsZXZlbC4NCj4g PiBJdCBwcm92aWRlcyBmdW5jdGlvbmFsaXR5IHRoYXQgYWxsb3dzIHVzZXIgZm9yIGdpdmVuIFNB IHRvIHByb2Nlc3MNCj4gPiBpbmJvdW5kIGFuZCBvdXRib3VuZCBJUHNlYyBwYWNrZXRzLg0KPiA+ IFRvIGJlIG1vcmUgc3BlY2lmaWM6DQo+ID4gLSBmb3IgaW5ib3VuZCBFU1AvQUggcGFja2V0cyBw ZXJmb3JtIGRlY3J5cHRpb24sIGF1dGhlbnRpY2F0aW9uLA0KPiA+ICAgIGludGVncml0eSBjaGVj a2luZywgcmVtb3ZlIEVTUC9BSCByZWxhdGVkIGhlYWRlcnMNCj4gW0Fub29iXSBBbnRpLXJlcGxh eSBjaGVjayB3b3VsZCBhbHNvIGJlIHJlcXVpcmVkLg0KDQpZZXAsIGFudGktcmVwbGF5IGFuZCBF U04gc3VwcG9ydCBpcyBpbXBsaWVkIGFzIHBhcnQgb2YgImludGVncml0eSBjaGVja2luZyIuDQpQ cm9iYWJseSBJIGhhdmUgdG8gYmUgbW9yZSBzcGVjaWZpYyBoZXJlLg0KDQo+ID4gLSBmb3Igb3V0 Ym91bmQgcGFja2V0cyBwZXJmb3JtIHBheWxvYWQgZW5jcnlwdGlvbiwgYXR0YWNoIElDViwNCj4g PiAgICB1cGRhdGUvYWRkIElQIGhlYWRlcnMsIGFkZCBFU1AvQUggaGVhZGVycy90cmFpbGVycywN Cj4gPiAgICBzZXR1cCByZWxhdGVkIG1idWYgZmVsaWRzIChvbF9mbGFncywgdHhfb2ZmbG9hZHMs IGV0Yy4pLg0KPiBbQW5vb2JdIERvIHdlIGhhdmUgYW55IHBsYW5zIHRvIGhhbmRsZSBFU04gZXhw aXJ5PyBTb21lIG1lYW5zIHRvDQo+IGluaXRpYXRlIGFuIElLRSByZW5lZ290aWF0aW9uPyBJJ20g YXNzdW1pbmcgYXBwbGljYXRpb24gd29uJ3QgYmUgYXdhcmUNCj4gb2YgdGhlIHNlcXVlbmNlIG51 bWJlcnMsIGluIHRoaXMgY2FzZS4NCj4gPiAtIGluaXRpYWxpemUvdW4taW5pdGlhbGl6ZSBnaXZl biBTQSBiYXNlZCBvbiB1c2VyIHByb3ZpZGVkIHBhcmFtZXRlcnMuDQo+ID4NCj4gPiBQcm9jZXNz ZWQgaW5ib3VuZC9vdXRib3VuZCBwYWNrZXRzIGNvdWxkIGJlIGdyb3VwZWQgYnkgdXNlciBwcm92 aWRlZA0KPiA+IGZsb3cgaWQgKG9wYXF1ZSA2NC1iaXQgbnVtYmVyIGFzc29jaWF0ZWQgYnkgdXNl ciB3aXRoIGdpdmVuIFNBKS4NCj4gPg0KPiA+IFNBLWxldmVsIEFQSSBpcyBiYXNlZCBvbiB0b3Ag b2YgY3J5cHRvLWRldi9zZWN1cml0eSBBUEkgYW5kIHJlbGllcyBvbiB0aGVtDQo+ID4gdG8gcGVy Zm9ybSBhY3R1YWwgY2lwaGVyIGFuZCBpbnRlZ3JpdHkgY2hlY2tpbmcuDQo+ID4gRHVlIHRvIHRo ZSBuYXR1cmUgb2YgY3J5cHRvLWRldiBBUEkgKGVucXVldWUvZGVxdWUgbW9kZWwpIHdlIHVzZQ0K PiA+IGFzeW5jaHJvbm91cyBBUEkgZm9yIElQc2VjIHBhY2tldHMgZGVzdGluZWQgdG8gYmUgcHJv Y2Vzc2VkDQo+ID4gYnkgY3J5cHRvLWRldmljZToNCj4gPiBydGVfaXBzZWNfY3J5cHRvX3ByZXBh cmUoKS0+cnRlX2NyeXB0b2Rldl9lbnF1ZXVlX2J1cnN0KCktPg0KPiA+IHJ0ZV9jcnlwdG9kZXZf ZGVxdWV1ZV9idXJzdCgpLT5ydGVfaXBzZWNfY3J5cHRvX3Byb2Nlc3MoKS4NCj4gPiBUaG91Z2gg Zm9yIHBhY2tldHMgZGVzdGluZWQgZm9yIGlubGluZSBwcm9jZXNzaW5nIG5vIGV4dHJhIG92ZXJo ZWFkDQo+ID4gaXMgcmVxdWlyZWQgYW5kIHNpbXBsZSBhbmQgc3luY2hyb25vdXMgQVBJOiBydGVf aXBzZWNfaW5saW5lX3Byb2Nlc3MoKQ0KPiA+IGlzIGludHJvZHVjZWQgZm9yIHRoYXQgY2FzZS4N Cj4gW0Fub29iXSBUaGUgQVBJIHNob3VsZCBpbmNsdWRlIGV2ZW50LWRlbGl2ZXJ5IGFzIGEgY3J5 cHRvLW9wIGNvbXBsZXRpb24NCj4gbWVjaGFuaXNtIGFzIHdlbGwuIFRoZSBhcHBsaWNhdGlvbiBj b3VsZCBjb25maWd1cmUgdGhlIGV2ZW50IGNyeXB0bw0KPiBhZGFwdGVyIGFuZCB0aGVuIGVucXVl dWUgYW5kIGRlcXVldWUgdG8gY3J5cHRvIGRldmljZSB1c2luZyBldmVudHMgKHZpYQ0KPiBldmVu dCBkZXYpLg0KDQpOb3Qgc3VyZSB3aGF0IHBhcnRpY3VsYXIgZXh0cmEgQVBJIHlvdSB0aGluayBp cyByZXF1aXJlZCBoZXJlPw0KQXMgSSB1bmRlcnN0YW5kIGluIGJvdGggY2FzZXMgKHdpdGggb3Ig d2l0aG91dCBldmVudCBjcnlwdG8tYWRhcHRlcikgd2Ugc3RpbGwgaGF2ZSB0bzoNCiAxKSBmaWxs IGNyeXB0by1vcCBwcm9wZXJseQ0KIDIpIGVucXVldWUgaXQgdG8gY3J5cHRvLWRldiAodmlhIGV2 ZW50ZGV2IG9yIGRpcmVjdGx5KQ0KMykgIHJlY2VpdmUgcHJvY2Vzc2VkIGJ5IGNyeXB0by1kZXYg Y3J5cHRvLW9wIChlaXRoZXIgdmlhIGV2ZW50ZGV2IG9yIGRpcmVjdGx5KQ0KNCkgY2hlY2sgY3J5 cHRvLW9wIHN0YXR1cywgZG8gZnVydGhlciBwb3N0LXByb2Nlc3NpbmcgaWYgYW55DQoNClNvICMx IGFuZCAjNCAoU0EtbGV2ZWwgQVBJIHJlc3BuaWJpbGl0eSkgcmVtYWluIHRoZSBzYW1lIGZvciBi b3RoIGNhc2VzLg0KDQo+ID4gVGhlIGZvbGxvd2luZyBmdW5jdGlvbmFsaXR5Og0KPiA+ICAgIC0g bWF0Y2ggaW5ib3VuZC9vdXRib3VuZCBwYWNrZXRzIHRvIHBhcnRpY3VsYXIgU0ENCj4gPiAgICAt IG1hbmFnZSBjcnlwdG8vc2VjdXJpdHkgZGV2aWNlcw0KPiA+ICAgIC0gcHJvdmlkZSBTQUQvU1BE IHJlbGF0ZWQgZnVuY3Rpb25hbGl0eQ0KPiA+ICAgIC0gZGV0ZXJtaW5lIHdoYXQgY3J5cHRvL3Nl Y3VyaXR5IGRldmljZSBoYXMgdG8gYmUgdXNlZA0KPiA+ICAgICAgZm9yIGdpdmVuIHBhY2tldChz KQ0KPiA+IGlzIG91dCBvZiBzY29wZSBmb3IgU0EtbGV2ZWwgQVBJLg0KPiA+DQo+ID4gQmVsb3cg aXMgdGhlIGJyaWVmIChhbmQgc2ltcGxpZmllZCkgb3ZlcnZpZXcgb2YgZXhwZWN0ZWQgU0EtbGV2 ZWwNCj4gPiBBUEkgdXNhZ2UuDQo+ID4NCj4gPiAvKiBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBT QSAqLw0KPiA+IHNpemVfdCBzeiA9IHJ0ZV9pcHNlY19zYV9zaXplKCk7DQo+ID4gc3RydWN0IHJ0 ZV9pcHNlY19zYSAqc2EgPSBydGVfbWFsbG9jKHN6KTsNCj4gPiBzdHJ1Y3QgcnRlX2lwc2VjX3Nh X3BybSBwcm07DQo+ID4gLyogZmlsbCBwcm0gKi8NCj4gPiByYyA9IHJ0ZV9pcHNlY19zYV9pbml0 KHNhLCAmcHJtKTsNCj4gPiBpZiAocmMgIT0gMCkgeyAvKmhhbmRsZSBlcnJvciAqL30NCj4gPiAu Li4uLg0KPiA+DQo+ID4gLyogcHJvY2VzcyBpbmJvdW5kL291dGJvdW5kIElQc2VjIHBhY2tldHMg dGhhdCBiZWxvbmdzIHRvIGdpdmVuIFNBICovDQo+ID4NCj4gPiAvKiBpbmxpbmUgSVBzZWMgcHJv Y2Vzc2luZyB3YXMgZG9uZSBmb3IgdGhlc2UgcGFja2V0cyAqLw0KPiA+IGlmICh1c2VfaW5saW5l X2lwc2VjKQ0KPiA+ICAgICAgICAgbiA9IHJ0ZV9pcHNlY19pbmxpbmVfcHJvY2VzcyhzYSwgcGt0 cywgbmJfcGt0cyk7DQo+ID4gLyogdXNlIGNyeXB0by1kZXZpY2UgdG8gcHJvY2VzcyB0aGUgcGFj a2V0cyAqLw0KPiA+IGVsc2Ugew0KPiA+ICAgICAgIHN0cnVjdCBydGVfY3J5cHRvX29wICpjb3Bb bmJfcGt0c107DQo+ID4gICAgICAgc3RydWN0IHJ0ZV9pcHNlY19ncm91cCBncnBbbmJfcGt0c107 DQo+ID4NCj4gPiAgICAgICAgLi4uLg0KPiA+ICAgICAgIC8qIHByZXBhcmUgY3J5cHRvIG9wcyAq Lw0KPiA+ICAgICAgIG4gPSBydGVfaXBzZWNfY3J5cHRvX3ByZXBhcmUoc2EsIHBrdHMsIGNvcHMs IG5iX3BrdHMpOw0KPiA+ICAgICAgIC8qIGVucXVldWUgY3J5cHRvIG9wcyB0byByZWxhdGVkIGNy eXB0by1kZXYgKi8NCj4gPiAgICAgICBuID0gIHJ0ZV9jcnlwdG9kZXZfZW5xdWV1ZV9idXJzdCgu Li4sIGNvcHMsIG4pOw0KPiA+ICAgICAgIGlmIChuICE9IG5iX3BrdHMpIHsgLypoYW5kbGUgZmFp bGVkIHBhY2tldHMgKi99DQo+ID4gICAgICAgLyogZGVxdWV1ZSBmaW5pc2hlZCBjcnlwdG8gb3Bz IGZyb20gcmVsYXRlZCBjcnlwdG8tZGV2ICovDQo+ID4gICAgICAgbiA9IHJ0ZV9jcnlwdG9kZXZf ZGVxdWV1ZV9idXJzdCguLi4sIGNvcHMsIG5iX3BrdHMpOw0KPiA+ICAgICAgIC8qIGZpbmlzaCBJ UHNlYyBwcm9jZXNzaW5nIGZvciBhc3NvY2lhdGVkIHBhY2tldHMgKi8NCj4gPiAgICAgICBuID0g cnRlX2lwc2VjX2NyeXB0b19wcm9jZXNzKGNvcCwgcGt0cywgZ3JwLCBuKTsNCj4gW0Fub29iXSBE b2VzIHRoZSBTQSBiYXNlZCBncm91cGluZyBhcHBseSB0byBib3RoIGluYm91bmQgYW5kIG91dGJv dW5kPw0KDQpZZXMsIHRoZSBwbGFuIGlzIHRvIGhhdmUgaXQgYXZhaWxhYmxlIGZvciBib3RoIGNh c2VzLg0KDQo+ID4gICAgICAgLyogbm93IHdlIGhhdmUgPG4+IGdyb3VwIG9mIHBhY2tldHMgZ3Jv dXBlZCBieSBTQSBmbG93IGlkICAqLw0KPiA+ICAgICAgLi4uLg0KPiA+ICAgfQ0KPiA+IC4uLg0K PiA+DQo+ID4gLyogdW5pbml0IGdpdmVuIFNBICovDQo+ID4gcnRlX2lwc2VjX3NhX2Zpbmkoc2Ep Ow0KPiA+DQo+ID4gUGxhbm5lZCBzY29wZSBmb3IgMTguMTE6DQo+ID4gPT09PT09PT09PT09PT09 PT09PT09PT09DQo+ID4NCj4gPiAtIFNBLWxldmVsIEFQSSBkZWZpbml0aW9uDQo+ID4gLSBFU1Ag dHVubmVsIG1vZGUgc3VwcG9ydCAoYm90aCBJUHY0L0lQdjYpDQo+ID4gLSBTdXBwb3J0ZWQgYWxn b3JpdGhtczogQUVTLUNCQywgQUVTLUdDTSwgSE1BQy1TSEExLCBOVUxMLg0KPiA+IC0gVVQNCj4g W0Fub29iXSBXaGF0IGlzIFVUPw0KDQpVbml0LVRlc3QNCg0KDQo+ID4gTm90ZTogU3RpbGwgV0lQ LCBzbyBub3QgYWxsIHBsYW5uZWQgZm9yIDE4LjExIGZ1bmN0aW9uYWxpdHkgaXMgaW4gcGxhY2Uu DQo+ID4NCj4gPiBQb3N0IDE4LjExOg0KPiA+ID09PT09PT09PT09DQo+ID4gLSBFU1AgdHJhbnNw b3J0IG1vZGUgc3VwcG9ydCAoYm90aCBJUHY0L0lQdjYpDQo+ID4gLSB1cGRhdGUgZXhhbXBsZXMv aXBzZWMtc2VjZ3cgdG8gdXNlIGxpYnJ0ZV9pcHNlYw0KPiA+IC0gU0FEIGFuZCBoaWdoLWxldmVs IEFQSSBkZWZpbml0aW9uIGFuZCBpbXBsZW1lbnRhdGlvbg0KPiA+DQo+ID4NCj4gPiBTaWduZWQt b2ZmLWJ5OiBNb2hhbW1hZCBBYmR1bCBBd2FsIDxtb2hhbW1hZC5hYmR1bC5hd2FsQGludGVsLmNv bT4NCj4gPiBTaWduZWQtb2ZmLWJ5OiBEZWNsYW4gRG9oZXJ0eSA8ZGVjbGFuLmRvaGVydHlAaW50 ZWwuY29tPg0KPiA+IFNpZ25lZC1vZmYtYnk6IEtvbnN0YW50aW4gQW5hbnlldiA8a29uc3RhbnRp bi5hbmFueWV2QGludGVsLmNvbT4NCj4gPiAtLS0NCj4gPiAgIGNvbmZpZy9jb21tb25fYmFzZSAg ICAgICAgICAgICAgICAgICAgIHwgICA1ICsNCj4gPiAgIGxpYi9NYWtlZmlsZSAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwgICAyICsNCj4gPiAgIGxpYi9saWJydGVfaXBzZWMvTWFrZWZpbGUg ICAgICAgICAgICAgIHwgIDI0ICsNCj4gPiAgIGxpYi9saWJydGVfaXBzZWMvbWVzb24uYnVpbGQg ICAgICAgICAgIHwgIDEwICsNCj4gPiAgIGxpYi9saWJydGVfaXBzZWMvcGFkLmggICAgICAgICAg ICAgICAgIHwgIDQ1ICsrDQo+ID4gICBsaWIvbGlicnRlX2lwc2VjL3J0ZV9pcHNlYy5oICAgICAg ICAgICB8IDI0NSArKysrKysrKysNCj4gPiAgIGxpYi9saWJydGVfaXBzZWMvcnRlX2lwc2VjX3Zl cnNpb24ubWFwIHwgIDEzICsNCj4gPiAgIGxpYi9saWJydGVfaXBzZWMvc2EuYyAgICAgICAgICAg ICAgICAgIHwgOTIxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiA+ICAgbGli L2xpYnJ0ZV9uZXQvcnRlX2VzcC5oICAgICAgICAgICAgICAgfCAgMTAgKy0NCj4gPiAgIGxpYi9t ZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyICsNCj4gPiAgIG1rL3J0ZS5h cHAubWsgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyICsNCj4gPiAgIDExIGZpbGVzIGNo YW5nZWQsIDEyNzggaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQ0KPiA+ICAgY3JlYXRlIG1v ZGUgMTAwNjQ0IGxpYi9saWJydGVfaXBzZWMvTWFrZWZpbGUNCj4gPiAgIGNyZWF0ZSBtb2RlIDEw MDY0NCBsaWIvbGlicnRlX2lwc2VjL21lc29uLmJ1aWxkDQo+ID4gICBjcmVhdGUgbW9kZSAxMDA2 NDQgbGliL2xpYnJ0ZV9pcHNlYy9wYWQuaA0KPiA+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9s aWJydGVfaXBzZWMvcnRlX2lwc2VjLmgNCj4gPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvbGli cnRlX2lwc2VjL3J0ZV9pcHNlY192ZXJzaW9uLm1hcA0KPiA+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0 IGxpYi9saWJydGVfaXBzZWMvc2EuYw0KPiA8c25pcD4NCj4gPiArc3RhdGljIGlubGluZSB1aW50 MTZfdA0KPiA+ICtlc3Bfb3V0Yl90dW5fcHJlcGFyZShzdHJ1Y3QgcnRlX2lwc2VjX3NhICpzYSwg c3RydWN0IHJ0ZV9tYnVmICptYltdLA0KPiA+ICsgICAgICAgc3RydWN0IHJ0ZV9jcnlwdG9fb3Ag KmNvcFtdLCB1aW50MTZfdCBudW0pDQo+ID4gK3sNCj4gPiArICAgICAgIGludDMyX3QgcmM7DQo+ ID4gKyAgICAgICB1aW50MzJfdCBpLCBuOw0KPiA+ICsgICAgICAgdW5pb24gc3ltX29wX2RhdGEg aWN2Ow0KPiA+ICsNCj4gPiArICAgICAgIG4gPSBlc25fb3V0Yl9jaGVja19zcW4oc2EsIG51bSk7 DQo+ID4gKw0KPiA+ICsgICAgICAgZm9yIChpID0gMDsgaSAhPSBuOyBpKyspIHsNCj4gPiArDQo+ ID4gKyAgICAgICAgICAgICAgIHNhLT5zcW4rKzsNCj4gW0Fub29iXSBTaG91bGRuJ3QgdGhpcyBi ZSBkb25lIGF0b21pY2FsbHk/DQoNCklmIHdlIHdhbnQgdG8gaGF2ZSBNVC1zYWZlIEFQSSBmb3Ig U0EtZGF0YXBhdGggQVBJLCB0aGVuIHllcy4NClRob3VnaCBpdCB3b3VsZCBtYWtlIHRoaW5ncyBt b3JlIGNvbXBsaWNhdGVkIGhlcmUsIGVzcGVjaWFsbHkgZm9yIGluYm91bmQgd2l0aCBhbnRpLXJl cGxheSBzdXBwb3J0Lg0KSSB0aGluayBpdCBpcyBkb2FibGUgKHNwaW4tbG9jaz8pLCBidXQgd291 bGQgY2F1c2UgZXh0cmEgb3ZlcmhlYWQgYW5kIGNvbXBsZXhpdHkuDQpSaWdodCBub3cgSSBhbSBu b3Qgc3VyZSBpdCByZWFsbHkgd29ydGggaXQgLSBjb21tZW50cy9zdWdnZXN0aW9ucyBhcmUgd2Vs Y29tZS4NCldoYXQgcHJvYmFibHkgY291bGQgYmUgYSBnb29kIGNvbXByb21pc2UgLSBydW50aW1l IGRlY2lzaW9uIHBlciBTQSBiYXNpcyAoYXQgc2FfaW5pdCgpKSwNCmRvIHdlIG5lZWQgYW4gU1Qg b3IgTVQgYmVoYXZpb3IgZm9yIGdpdmVuIFNBLg0KDQo+ID4gKyAgICAgICAgICAgICAgIHNhLT5p di52OCA9IHJ0ZV9jcHVfdG9fYmVfNjQoc2EtPnNxbik7DQo+ID4gKw0KPiA+ICsgICAgICAgICAg ICAgICAvKiB1cGRhdGUgdGhlIHBhY2tldCBpdHNlbGYgKi8NCj4gPiArICAgICAgICAgICAgICAg cmMgPSBlc3Bfb3V0Yl90dW5fcGt0X3ByZXBhcmUoc2EsIG1iW2ldLCAmaWN2KTsNCj4gPiArICAg ICAgICAgICAgICAgaWYgKHJjIDwgMCkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHJ0 ZV9lcnJubyA9IC1yYzsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCj4gPiAr ICAgICAgICAgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgICAgICAgICAgLyogdXBkYXRlIGNy eXB0byBvcCAqLw0KPiA+ICsgICAgICAgICAgICAgICBlc3Bfb3V0Yl90dW5fY29wX3ByZXBhcmUo Y29wW2ldLCBzYSwgbWJbaV0sICZpY3YsIHJjKTsNCj4gPiArICAgICAgIH0NCj4gPiArDQo+ID4g KyAgICAgICByZXR1cm4gaTsNCj4gPiArfQ0KPiA+DQo+IDxzbmlwPg0KDQpUaGFua3MNCktvbnN0 YW50aW4NCg0K