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 C6509A0A02; Tue, 27 Apr 2021 17:02:28 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 42EE6411DC; Tue, 27 Apr 2021 17:02:28 +0200 (CEST) Received: from smartserver.smartsharesystems.com (smartserver.smartsharesystems.com [77.243.40.215]) by mails.dpdk.org (Postfix) with ESMTP id 16D06411D5 for ; Tue, 27 Apr 2021 17:02:27 +0200 (CEST) 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 Date: Tue, 27 Apr 2021 17:02:24 +0200 Message-ID: <98CBD80474FA8B44BF855DF32C47DC35C61716@smartserver.smartshare.dk> In-Reply-To: <20210427135755.927-4-olivier.matz@6wind.com> X-MS-Has-Attach: X-MS-TNEF-Correlator: Thread-Topic: [PATCH 3/4] net: introduce functions to verify L4 checksums Thread-Index: Adc7bWwPQk2SdvVoRye7IRqSV4TBtAAA55pA References: <20210427135755.927-1-olivier.matz@6wind.com> <20210427135755.927-4-olivier.matz@6wind.com> From: =?utf-8?B?TW9ydGVuIEJyw7hydXA=?= To: "Olivier Matz" , Cc: "Keith Wiles" , "Hongzhi Guo" , "Thomas Monjalon" Subject: Re: [dpdk-dev] [PATCH 3/4] net: introduce functions to verify L4 checksums 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 Sender: "dev" PiBGcm9tOiBPbGl2aWVyIE1hdHogW21haWx0bzpvbGl2aWVyLm1hdHpANndpbmQuY29tXQ0KPiBT ZW50OiBUdWVzZGF5LCBBcHJpbCAyNywgMjAyMSAzOjU4IFBNDQo+IA0KPiBTaW5jZSBjb21taXQg ZDVkZjJhZTA0MjhhICgibmV0OiBmaXggdW5uZWVkZWQgcmVwbGFjZW1lbnQgb2YgVENQDQo+IGNo ZWNrc3VtIDAiKSwgdGhlIGZ1bmN0aW9ucyBydGVfaXB2NF91ZHB0Y3BfY2tzdW0oKSBhbmQNCj4g cnRlX2lwdjZfdWRwdGNwX2Nrc3VtKCkgY2FuIHJldHVybiBlaXRoZXIgMHgwMDAwIG9yIDB4ZmZm ZiB3aGVuIHVzZWQgdG8NCj4gdmVyaWZ5IGEgcGFja2V0IGNvbnRhaW5pbmcgYSB2YWxpZCBjaGVj a3N1bS4NCj4gDQo+IFNpbmNlIHRoZXNlIGZ1bmN0aW9ucyBzaG91bGQgYmUgdXNlZCB0byBjYWxj dWxhdGUgdGhlIGNoZWNrc3VtIHRvIHNldA0KPiBpbg0KPiBhIHBhY2tldCwgaW50cm9kdWNlIDIg bmV3IGhlbHBlcnMgZm9yIGNoZWNrc3VtIHZlcmlmaWNhdGlvbi4gVGhleQ0KPiByZXR1cm4NCj4g MCBpZiB0aGUgY2hlY2tzdW0gaXMgdmFsaWQgaW4gdGhlIHBhY2tldC4NCj4gDQo+IFVzZSB0aGlz IG5ldyBoZWxwZXIgaW4gbmV0L3RhcCBkcml2ZXIuDQo+IA0KPiBTaWduZWQtb2ZmLWJ5OiBPbGl2 aWVyIE1hdHogPG9saXZpZXIubWF0ekA2d2luZC5jb20+DQo+IC0tLQ0KPiAgZHJpdmVycy9uZXQv dGFwL3J0ZV9ldGhfdGFwLmMgfCAgIDcgKy0NCj4gIGxpYi9uZXQvcnRlX2lwLmggICAgICAgICAg ICAgIHwgMTI0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0NCj4gIDIgZmlsZXMg Y2hhbmdlZCwgMTA0IGluc2VydGlvbnMoKyksIDI3IGRlbGV0aW9ucygtKQ0KPiANCj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvbmV0L3RhcC9ydGVfZXRoX3RhcC5jDQo+IGIvZHJpdmVycy9uZXQvdGFw L3J0ZV9ldGhfdGFwLmMNCj4gaW5kZXggNzEyODJlODA2NS4uYjE0ZDVhMWQ1NSAxMDA2NDQNCj4g LS0tIGEvZHJpdmVycy9uZXQvdGFwL3J0ZV9ldGhfdGFwLmMNCj4gKysrIGIvZHJpdmVycy9uZXQv dGFwL3J0ZV9ldGhfdGFwLmMNCj4gQEAgLTM2NSwxMSArMzY1LDEyIEBAIHRhcF92ZXJpZnlfY3N1 bShzdHJ1Y3QgcnRlX21idWYgKm1idWYpDQo+ICAJCQkJCXJldHVybjsNCj4gIAkJCQl9DQo+ICAJ CQl9DQo+IC0JCQlja3N1bSA9IHJ0ZV9pcHY0X3VkcHRjcF9ja3N1bShsM19oZHIsIGw0X2hkcik7 DQo+ICsJCQlja3N1bV9vayA9ICFydGVfaXB2NF91ZHB0Y3BfY2tzdW1fdmVyaWZ5KGwzX2hkciwN Cj4gKwkJCQkJCQkJIGw0X2hkcik7DQo+ICAJCX0gZWxzZSB7IC8qIGwzID09IFJURV9QVFlQRV9M M19JUFY2LCBjaGVja2VkIGFib3ZlICovDQo+IC0JCQlja3N1bSA9IHJ0ZV9pcHY2X3VkcHRjcF9j a3N1bShsM19oZHIsIGw0X2hkcik7DQo+ICsJCQlja3N1bV9vayA9ICFydGVfaXB2Nl91ZHB0Y3Bf Y2tzdW1fdmVyaWZ5KGwzX2hkciwNCj4gKwkJCQkJCQkJIGw0X2hkcik7DQo+ICAJCX0NCj4gLQkJ Y2tzdW1fb2sgPSAoY2tzdW0gPT0gMCkgfHwgKGNrc3VtID09IDB4ZmZmZik7DQo+ICAJCW1idWYt Pm9sX2ZsYWdzIHw9IGNrc3VtX29rID8NCj4gIAkJCVBLVF9SWF9MNF9DS1NVTV9HT09EIDogUEtU X1JYX0w0X0NLU1VNX0JBRDsNCj4gIAl9DQo+IGRpZmYgLS1naXQgYS9saWIvbmV0L3J0ZV9pcC5o IGIvbGliL25ldC9ydGVfaXAuaA0KPiBpbmRleCA4YzE4OTAwOWIwLi5lZjg0YmNjNWJmIDEwMDY0 NA0KPiAtLS0gYS9saWIvbmV0L3J0ZV9pcC5oDQo+ICsrKyBiL2xpYi9uZXQvcnRlX2lwLmgNCj4g QEAgLTM0NCwyMCArMzQ0LDEwIEBAIHJ0ZV9pcHY0X3BoZHJfY2tzdW0oY29uc3Qgc3RydWN0IHJ0 ZV9pcHY0X2hkcg0KPiAqaXB2NF9oZHIsIHVpbnQ2NF90IG9sX2ZsYWdzKQ0KPiAgfQ0KPiANCj4g IC8qKg0KPiAtICogUHJvY2VzcyB0aGUgSVB2NCBVRFAgb3IgVENQIGNoZWNrc3VtLg0KPiAtICoN Cj4gLSAqIFRoZSBJUCBhbmQgbGF5ZXIgNCBjaGVja3N1bSBtdXN0IGJlIHNldCB0byAwIGluIHRo ZSBwYWNrZXQgYnkNCj4gLSAqIHRoZSBjYWxsZXIuDQo+IC0gKg0KPiAtICogQHBhcmFtIGlwdjRf aGRyDQo+IC0gKiAgIFRoZSBwb2ludGVyIHRvIHRoZSBjb250aWd1b3VzIElQdjQgaGVhZGVyLg0K PiAtICogQHBhcmFtIGw0X2hkcg0KPiAtICogICBUaGUgcG9pbnRlciB0byB0aGUgYmVnaW5uaW5n IG9mIHRoZSBMNCBoZWFkZXIuDQo+IC0gKiBAcmV0dXJuDQo+IC0gKiAgIFRoZSBjb21wbGVtZW50 ZWQgY2hlY2tzdW0gdG8gc2V0IGluIHRoZSBJUCBwYWNrZXQuDQo+ICsgKiBAaW50ZXJuYWwgQ2Fs Y3VsYXRlIHRoZSBub24tY29tcGxlbWVudGVkIElQdjQgTDQgY2hlY2tzdW0NCj4gICAqLw0KPiAg c3RhdGljIGlubGluZSB1aW50MTZfdA0KPiAtcnRlX2lwdjRfdWRwdGNwX2Nrc3VtKGNvbnN0IHN0 cnVjdCBydGVfaXB2NF9oZHIgKmlwdjRfaGRyLCBjb25zdCB2b2lkDQo+ICpsNF9oZHIpDQo+ICtf X3J0ZV9pcHY0X3VkcHRjcF9ja3N1bShjb25zdCBzdHJ1Y3QgcnRlX2lwdjRfaGRyICppcHY0X2hk ciwgY29uc3QNCj4gdm9pZCAqbDRfaGRyKQ0KPiAgew0KPiAgCXVpbnQzMl90IGNrc3VtOw0KPiAg CXVpbnQzMl90IGwzX2xlbiwgbDRfbGVuOw0KPiBAQCAtMzc0LDE2ICszNjQsNjIgQEAgcnRlX2lw djRfdWRwdGNwX2Nrc3VtKGNvbnN0IHN0cnVjdCBydGVfaXB2NF9oZHINCj4gKmlwdjRfaGRyLCBj b25zdCB2b2lkICpsNF9oZHIpDQo+ICAJY2tzdW0gKz0gcnRlX2lwdjRfcGhkcl9ja3N1bShpcHY0 X2hkciwgMCk7DQo+IA0KPiAgCWNrc3VtID0gKChja3N1bSAmIDB4ZmZmZjAwMDApID4+IDE2KSAr IChja3N1bSAmIDB4ZmZmZik7DQo+IC0JY2tzdW0gPSAofmNrc3VtKSAmIDB4ZmZmZjsNCj4gKw0K PiArCXJldHVybiAodWludDE2X3QpY2tzdW07DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICogUHJv Y2VzcyB0aGUgSVB2NCBVRFAgb3IgVENQIGNoZWNrc3VtLg0KPiArICoNCj4gKyAqIFRoZSBJUCBh bmQgbGF5ZXIgNCBjaGVja3N1bSBtdXN0IGJlIHNldCB0byAwIGluIHRoZSBwYWNrZXQgYnkNCj4g KyAqIHRoZSBjYWxsZXIuDQo+ICsgKg0KPiArICogQHBhcmFtIGlwdjRfaGRyDQo+ICsgKiAgIFRo ZSBwb2ludGVyIHRvIHRoZSBjb250aWd1b3VzIElQdjQgaGVhZGVyLg0KPiArICogQHBhcmFtIGw0 X2hkcg0KPiArICogICBUaGUgcG9pbnRlciB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBMNCBoZWFk ZXIuDQo+ICsgKiBAcmV0dXJuDQo+ICsgKiAgIFRoZSBjb21wbGVtZW50ZWQgY2hlY2tzdW0gdG8g c2V0IGluIHRoZSBJUCBwYWNrZXQuDQo+ICsgKi8NCj4gK3N0YXRpYyBpbmxpbmUgdWludDE2X3QN Cj4gK3J0ZV9pcHY0X3VkcHRjcF9ja3N1bShjb25zdCBzdHJ1Y3QgcnRlX2lwdjRfaGRyICppcHY0 X2hkciwgY29uc3Qgdm9pZA0KPiAqbDRfaGRyKQ0KPiArew0KPiArCXVpbnQxNl90IGNrc3VtID0g X19ydGVfaXB2NF91ZHB0Y3BfY2tzdW0oaXB2NF9oZHIsIGw0X2hkcik7DQo+ICsNCj4gKwlja3N1 bSA9IH5ja3N1bTsNCj4gKw0KPiAgCS8qDQo+IC0JICogUGVyIFJGQyA3Njg6SWYgdGhlIGNvbXB1 dGVkIGNoZWNrc3VtIGlzIHplcm8gZm9yIFVEUCwNCj4gKwkgKiBQZXIgUkZDIDc2ODogSWYgdGhl IGNvbXB1dGVkIGNoZWNrc3VtIGlzIHplcm8gZm9yIFVEUCwNCj4gIAkgKiBpdCBpcyB0cmFuc21p dHRlZCBhcyBhbGwgb25lcw0KPiAgCSAqICh0aGUgZXF1aXZhbGVudCBpbiBvbmUncyBjb21wbGVt ZW50IGFyaXRobWV0aWMpLg0KPiAgCSAqLw0KPiAgCWlmIChja3N1bSA9PSAwICYmIGlwdjRfaGRy LT5uZXh0X3Byb3RvX2lkID09IElQUFJPVE9fVURQKQ0KPiAgCQlja3N1bSA9IDB4ZmZmZjsNCj4g DQo+IC0JcmV0dXJuICh1aW50MTZfdClja3N1bTsNCj4gKwlyZXR1cm4gY2tzdW07DQo+ICt9DQoN ClRoZSBHQ0Mgc3RhdGljIGJyYW5jaCBwcmVkaWN0b3IgdHJlYXRzIHRoZSBhYm92ZSBjb21wYXJp c29uIGFzIGxpa2VseS4gUGxheWluZyBhcm91bmQgd2l0aCBHb2Rib2x0LCBJIGNhbWUgdXAgd2l0 aCB0aGlzIGFsdGVybmF0aXZlOg0KDQoJaWYgKGxpa2VseShja3N1bSAhPSAwKSkgcmV0dXJuIGNr c3VtOw0KCWlmIChpcHY0X2hkci0+bmV4dF9wcm90b19pZCA9PSBJUFBST1RPX1VEUCkgcmV0dXJu IDB4ZmZmZjsNCglyZXR1cm4gY2tzdW07DQoNCj4gKw0KPiArLyoqDQo+ICsgKiBWYWxpZGF0ZSB0 aGUgSVB2NCBVRFAgb3IgVENQIGNoZWNrc3VtLg0KPiArICoNCj4gKyAqIEBwYXJhbSBpcHY0X2hk cg0KPiArICogICBUaGUgcG9pbnRlciB0byB0aGUgY29udGlndW91cyBJUHY0IGhlYWRlci4NCj4g KyAqIEBwYXJhbSBsNF9oZHINCj4gKyAqICAgVGhlIHBvaW50ZXIgdG8gdGhlIGJlZ2lubmluZyBv ZiB0aGUgTDQgaGVhZGVyLg0KPiArICogQHJldHVybg0KPiArICogICBSZXR1cm4gMCBpZiB0aGUg Y2hlY2tzdW0gaXMgY29ycmVjdCwgZWxzZSAtMS4NCj4gKyAqLw0KPiArX19ydGVfZXhwZXJpbWVu dGFsDQo+ICtzdGF0aWMgaW5saW5lIGludA0KPiArcnRlX2lwdjRfdWRwdGNwX2Nrc3VtX3Zlcmlm eShjb25zdCBzdHJ1Y3QgcnRlX2lwdjRfaGRyICppcHY0X2hkciwNCj4gKwkJCSAgICAgY29uc3Qg dm9pZCAqbDRfaGRyKQ0KPiArew0KPiArCXVpbnQxNl90IGNrc3VtID0gX19ydGVfaXB2NF91ZHB0 Y3BfY2tzdW0oaXB2NF9oZHIsIGw0X2hkcik7DQo+ICsNCj4gKwlpZiAoY2tzdW0gIT0gMHhmZmZm KQ0KPiArCQlyZXR1cm4gLTE7DQoNClRoZSBHQ0Mgc3RhdGljIGJyYW5jaCBwcmVkaWN0b3IgdHJl YXRzIHRoZSBhYm92ZSBjb21wYXJpc29uIGFzIGxpa2VseSwgc28gSSB3b3VsZCBwcmVmZXIgdW5s aWtlbHkoKSBhcm91bmQgaXQuDQoNCj4gKw0KPiArCXJldHVybiAwOw0KPiAgfQ0KPiANCj4gIC8q Kg0KPiBAQCAtNDQ4LDYgKzQ4NCwyNSBAQCBydGVfaXB2Nl9waGRyX2Nrc3VtKGNvbnN0IHN0cnVj dCBydGVfaXB2Nl9oZHINCj4gKmlwdjZfaGRyLCB1aW50NjRfdCBvbF9mbGFncykNCj4gIAlyZXR1 cm4gX19ydGVfcmF3X2Nrc3VtX3JlZHVjZShzdW0pOw0KPiAgfQ0KPiANCj4gKy8qKg0KPiArICog QGludGVybmFsIENhbGN1bGF0ZSB0aGUgbm9uLWNvbXBsZW1lbnRlZCBJUHY0IEw0IGNoZWNrc3Vt DQo+ICsgKi8NCj4gK3N0YXRpYyBpbmxpbmUgdWludDE2X3QNCj4gK19fcnRlX2lwdjZfdWRwdGNw X2Nrc3VtKGNvbnN0IHN0cnVjdCBydGVfaXB2Nl9oZHIgKmlwdjZfaGRyLCBjb25zdA0KPiB2b2lk ICpsNF9oZHIpDQo+ICt7DQo+ICsJdWludDMyX3QgY2tzdW07DQo+ICsJdWludDMyX3QgbDRfbGVu Ow0KPiArDQo+ICsJbDRfbGVuID0gcnRlX2JlX3RvX2NwdV8xNihpcHY2X2hkci0+cGF5bG9hZF9s ZW4pOw0KPiArDQo+ICsJY2tzdW0gPSBydGVfcmF3X2Nrc3VtKGw0X2hkciwgbDRfbGVuKTsNCj4g Kwlja3N1bSArPSBydGVfaXB2Nl9waGRyX2Nrc3VtKGlwdjZfaGRyLCAwKTsNCj4gKw0KPiArCWNr c3VtID0gKChja3N1bSAmIDB4ZmZmZjAwMDApID4+IDE2KSArIChja3N1bSAmIDB4ZmZmZik7DQo+ ICsNCj4gKwlyZXR1cm4gKHVpbnQxNl90KWNrc3VtOw0KPiArfQ0KPiArDQo+ICAvKioNCj4gICAq IFByb2Nlc3MgdGhlIElQdjYgVURQIG9yIFRDUCBjaGVja3N1bS4NCj4gICAqDQo+IEBAIC00NjQs MTYgKzUxOSwxMCBAQCBydGVfaXB2Nl9waGRyX2Nrc3VtKGNvbnN0IHN0cnVjdCBydGVfaXB2Nl9o ZHINCj4gKmlwdjZfaGRyLCB1aW50NjRfdCBvbF9mbGFncykNCj4gIHN0YXRpYyBpbmxpbmUgdWlu dDE2X3QNCj4gIHJ0ZV9pcHY2X3VkcHRjcF9ja3N1bShjb25zdCBzdHJ1Y3QgcnRlX2lwdjZfaGRy ICppcHY2X2hkciwgY29uc3Qgdm9pZA0KPiAqbDRfaGRyKQ0KPiAgew0KPiAtCXVpbnQzMl90IGNr c3VtOw0KPiAtCXVpbnQzMl90IGw0X2xlbjsNCj4gLQ0KPiAtCWw0X2xlbiA9IHJ0ZV9iZV90b19j cHVfMTYoaXB2Nl9oZHItPnBheWxvYWRfbGVuKTsNCj4gKwl1aW50MTZfdCBja3N1bSA9IF9fcnRl X2lwdjZfdWRwdGNwX2Nrc3VtKGlwdjZfaGRyLCBsNF9oZHIpOw0KPiANCj4gLQlja3N1bSA9IHJ0 ZV9yYXdfY2tzdW0obDRfaGRyLCBsNF9sZW4pOw0KPiAtCWNrc3VtICs9IHJ0ZV9pcHY2X3BoZHJf Y2tzdW0oaXB2Nl9oZHIsIDApOw0KPiArCWNrc3VtID0gfmNrc3VtOw0KPiANCj4gLQlja3N1bSA9 ICgoY2tzdW0gJiAweGZmZmYwMDAwKSA+PiAxNikgKyAoY2tzdW0gJiAweGZmZmYpOw0KPiAtCWNr c3VtID0gKH5ja3N1bSkgJiAweGZmZmY7DQo+ICAJLyoNCj4gIAkgKiBQZXIgUkZDIDc2ODogSWYg dGhlIGNvbXB1dGVkIGNoZWNrc3VtIGlzIHplcm8gZm9yIFVEUCwNCj4gIAkgKiBpdCBpcyB0cmFu c21pdHRlZCBhcyBhbGwgb25lcw0KPiBAQCAtNDgyLDcgKzUzMSwzNCBAQCBydGVfaXB2Nl91ZHB0 Y3BfY2tzdW0oY29uc3Qgc3RydWN0IHJ0ZV9pcHY2X2hkcg0KPiAqaXB2Nl9oZHIsIGNvbnN0IHZv aWQgKmw0X2hkcikNCj4gIAlpZiAoY2tzdW0gPT0gMCAmJiBpcHY2X2hkci0+cHJvdG8gPT0gSVBQ Uk9UT19VRFApDQo+ICAJCWNrc3VtID0gMHhmZmZmOw0KDQpTYW1lIGNvbW1lbnQgYWJvdXQgR0ND IHN0YXRpYyBicmFuY2ggcHJlZGljdGlvbiBhcyBhYm92ZS4NCg0KPiANCj4gLQlyZXR1cm4gKHVp bnQxNl90KWNrc3VtOw0KPiArCXJldHVybiBja3N1bTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsg KiBWYWxpZGF0ZSB0aGUgSVB2NiBVRFAgb3IgVENQIGNoZWNrc3VtLg0KPiArICoNCj4gKyAqIFRo ZSBmdW5jdGlvbiBhY2NlcHRzIGEgMCBjaGVja3N1bSwgc2luY2UgaXQgY2FuIGV4Y2VwdGlvbmFs bHkNCj4gaGFwcGVuLiBTZWUgOC4xDQo+ICsgKiAoVXBwZXItTGF5ZXIgQ2hlY2tzdW1zKSBpbiBS RkMgODIwMC4NCj4gKyAqDQo+ICsgKiBAcGFyYW0gaXB2Nl9oZHINCj4gKyAqICAgVGhlIHBvaW50 ZXIgdG8gdGhlIGNvbnRpZ3VvdXMgSVB2NiBoZWFkZXIuDQo+ICsgKiBAcGFyYW0gbDRfaGRyDQo+ ICsgKiAgIFRoZSBwb2ludGVyIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIEw0IGhlYWRlci4NCj4g KyAqIEByZXR1cm4NCj4gKyAqICAgUmV0dXJuIDAgaWYgdGhlIGNoZWNrc3VtIGlzIGNvcnJlY3Qs IGVsc2UgLTEuDQo+ICsgKi8NCj4gK19fcnRlX2V4cGVyaW1lbnRhbA0KPiArc3RhdGljIGlubGlu ZSBpbnQNCj4gK3J0ZV9pcHY2X3VkcHRjcF9ja3N1bV92ZXJpZnkoY29uc3Qgc3RydWN0IHJ0ZV9p cHY2X2hkciAqaXB2Nl9oZHIsDQo+ICsJCQkgICAgIGNvbnN0IHZvaWQgKmw0X2hkcikNCj4gK3sN Cj4gKwl1aW50MTZfdCBja3N1bTsNCj4gKw0KPiArCWNrc3VtID0gX19ydGVfaXB2Nl91ZHB0Y3Bf Y2tzdW0oaXB2Nl9oZHIsIGw0X2hkcik7DQo+ICsJaWYgKGNrc3VtICE9IDB4ZmZmZikNCj4gKwkJ cmV0dXJuIC0xOw0KDQpTYW1lIGNvbW1lbnQgYWJvdXQgR0NDIHN0YXRpYyBicmFuY2ggcHJlZGlj dGlvbiBhcyBhYm92ZS4NCg0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICB9DQo+IA0KPiAgLyoqIElQ djYgZnJhZ21lbnQgZXh0ZW5zaW9uIGhlYWRlci4gKi8NCj4gLS0NCj4gMi4yOS4yDQo+IA0KDQpX aXRoIG9yIHdpdGhvdXQgbXkgc3VnZ2VzdGVkIG1vZGlmaWNhdGlvbnM6DQoNCkFja2VkLWJ5OiBN b3J0ZW4gQnLDuHJ1cCA8bWJAc21hcnRzaGFyZXN5c3RlbXMuY29tPg0KDQpXaXRob3V0IG15IHN1 Z2dlc3RlZCBtb2RpZmljYXRpb25zOg0KDQpSZXZpZXdlZC1ieTogTW9ydGVuIEJyw7hydXAgPG1i QHNtYXJ0c2hhcmVzeXN0ZW1zLmNvbT4NCg0K