From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-ve1eur01on0082.outbound.protection.outlook.com [104.47.1.82]) by dpdk.org (Postfix) with ESMTP id 623741B2A3; Wed, 14 Feb 2018 15:25:29 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=uNEKmgpGcRaw0Q3in4JdQn3NVhnZDNbpFDlnhyFa+o8=; b=kMzYHMfRwLKvGrHAvoIxbq/Xq6cTrKP0kBvDx9Yf/YRSaMhTfjOv2PVoIJtPgRJkyuG9n/UwhQJDtXjXAYetBTSnnWxqV5CfZkBTIxG2Dfoow3TqfPpHDfR6dbZiMfFtz3lxC2uplTrbxU2Fw88rEOCz5+N/z9+BJv1IWGs47Cc= Received: from AM0PR0502MB3875.eurprd05.prod.outlook.com (52.133.48.17) by AM0PR0502MB3697.eurprd05.prod.outlook.com (52.133.46.154) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.506.18; Wed, 14 Feb 2018 14:25:27 +0000 Received: from AM0PR0502MB3875.eurprd05.prod.outlook.com ([fe80::c146:f27f:8151:5631]) by AM0PR0502MB3875.eurprd05.prod.outlook.com ([fe80::c146:f27f:8151:5631%13]) with mapi id 15.20.0506.016; Wed, 14 Feb 2018 14:25:27 +0000 From: Ophir Munk To: Pascal Mazon , "dev@dpdk.org" CC: Thomas Monjalon , Olga Shern , "stable@dpdk.org" Thread-Topic: [PATCH v2] net/tap: fix promiscuous rules double insersions Thread-Index: AQHTpPl9Bnx4SLqoOk+qCyRSmZoNrqOjl88AgAAeB8CAAD6NMA== Date: Wed, 14 Feb 2018 14:25:27 +0000 Message-ID: References: <1518542172-9334-1-git-send-email-ophirmu@mellanox.com> <1518546947-20932-1-git-send-email-ophirmu@mellanox.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=ophirmu@mellanox.com; x-originating-ip: [193.47.165.251] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; AM0PR0502MB3697; 6:/fxHKq3VV6qpT+rSl/8T7cdMVe9sV7QsJ53PQLAQasJPjqWA9v5MM6gmyrO61qAVP/LTa5Qo9Yj9e7hKHErGUwVmyoijF7HWNAqH9zxJcYwQRtPO52EnWUhyFsn+bTBVz4ZpmDIgZ8D3PXaClUJ9WOeDTFnOG+RmmoFIGLR5ewriJhVY1pHp0LK74L8dGWwBd55g0oQ79hSo8khM3kpEdcAi7wJdvTekmVJYCq/9Y9i+c6I/oa+SInS+Q/2CD8cM86PyiE54p43XNDxKisWob036TIQcoQS8i42gyMUvL8WmEC3KnTe5WExAhE0zV0HVEPUDitCXPaTRYYqDiemHWbDGs3QESrR2f+Bvx4XrPgX9902wxKs418sGcZi1h3iN; 5:roCJNLTWRZ7ZJG4I9puLGNG97NrFMhRa41H2WI3BeaJ3xenfIYnRC5b8z62yElEcqB7HrJqOqyEr4tPwiZc2TngsdfeQAR3YQtht0E+Ar6InSh19RsdxHo6rceBKcJXbNhGkaVU9WT7VYCcLwjzRYUskFqAsSetCqmhlpcJ0Xzc=; 24:A1B54/zSiVoexFI4l1sJqDDmGfEV7Nv/6yBQjgOs/beWy1hS1ocMSniDT2hf4Bd68kfxUfg18LbsPbt68p2pu7/l4U8pPScQ2SVnBlkuOFA=; 7:r580TPTdP/ZamNM8LNSqZSeUI/byZa51V0Bqx+0BaUSlZ8olzNO2YFfRak+HVxkqu+ORatNgtnCVT7aMgv16D06LTA+YgKnPqkMtGxlf9XlpenqAXijqg5/Awl1vN7DL2Vwt6CS1uOq+HaL/gvGyYQE7Is8xE4mbY2OanY+GiCUjYtVAdLL2TQrwT/CpYev4hErQ9FANPGabJbIuDakxCy2tNATrrrgNvfC7eaMMTSacct4vSxxUJkZhAqbhIWMz x-ms-exchange-antispam-srfa-diagnostics: SSOS; x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: 11525881-9726-4fbb-411a-08d573b6cb50 x-microsoft-antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(48565401081)(4534165)(4627221)(201703031133081)(201702281549075)(5600026)(4604075)(3008032)(2017052603307)(7153060)(7193020); SRVR:AM0PR0502MB3697; x-ms-traffictypediagnostic: AM0PR0502MB3697: x-ld-processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:; x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(6040501)(2401047)(5005006)(8121501046)(3231101)(944501161)(10201501046)(3002001)(93006095)(93001095)(6055026)(6041288)(20161123558120)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123560045)(6072148)(201708071742011); SRVR:AM0PR0502MB3697; BCL:0; PCL:0; RULEID:; SRVR:AM0PR0502MB3697; x-forefront-prvs: 0583A86C08 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(366004)(396003)(346002)(376002)(39860400002)(39380400002)(13464003)(189003)(199004)(2501003)(53546011)(6506007)(59450400001)(97736004)(478600001)(68736007)(5660300001)(81166006)(6436002)(81156014)(25786009)(99286004)(7736002)(33656002)(305945005)(7696005)(229853002)(4326008)(102836004)(106356001)(186003)(2900100001)(6246003)(86362001)(8676002)(14454004)(54906003)(5250100002)(53936002)(2906002)(3280700002)(316002)(105586002)(3660700001)(76176011)(9686003)(8936002)(74316002)(110136005)(55016002)(66066001)(6116002)(3846002)(26005); DIR:OUT; SFP:1101; SCL:1; SRVR:AM0PR0502MB3697; H:AM0PR0502MB3875.eurprd05.prod.outlook.com; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: WTV2T/sc6BXp2qsFBlSuvAx2ASKum8bBckOmFlezJUJCaigtHDIjzxM1RR/KJCOfSfu/Z6fqbZOdxPsgUIt6PA== spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: 11525881-9726-4fbb-411a-08d573b6cb50 X-MS-Exchange-CrossTenant-originalarrivaltime: 14 Feb 2018 14:25:27.4600 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR0502MB3697 Subject: Re: [dpdk-dev] [PATCH v2] net/tap: fix promiscuous rules double insersions 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: Wed, 14 Feb 2018 14:25:29 -0000 SGksDQpSZWdhcmRpbmcgeW91ciBxdWVzdGlvbjoNCj4gQXJlIHdlIHN1cmUgdGhlIHByZXZpb3Vz IHJ1bGUgaXMgc3RpbGwgaW4gdGhlIHJlZ2lzdGVyZWQgaW1wbGljaXQgZmxvd3M/DQoNCkl0IGlz IGNvbmZpcm1lZC4gDQoNCkFmdGVyIHJ1bm5pbmcgc2V2ZXJhbCAicG9ydCBzdG9wL3N0YXJ0IiBj b21tYW5kcyBpbiB0ZXN0cG1kIEkgYW0gZXhlY3V0aW5nIA0KdGVzdHBtZD4gZmxvdyBpc29sYXRl IDxwb3J0IGlkPiAxIA0KYW5kIG5vdGljZSB0aGF0IHByb21pc2N1b3VzIHJ1bGUgaXMgcmVtb3Zl ZCBmcm9tIHJlbW90ZSBkZXZpY2UuDQoNClJlZ2FyZHMsDQpPcGhpcg0KDQo+IC0tLS0tT3JpZ2lu YWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IE9waGlyIE11bmsNCj4gU2VudDogV2VkbmVzZGF5LCBG ZWJydWFyeSAxNCwgMjAxOCAxOjI0IFBNDQo+IFRvOiAnUGFzY2FsIE1hem9uJyA8cGFzY2FsLm1h em9uQDZ3aW5kLmNvbT47IGRldkBkcGRrLm9yZw0KPiBDYzogVGhvbWFzIE1vbmphbG9uIDx0aG9t YXNAbW9uamFsb24ubmV0PjsgT2xnYSBTaGVybg0KPiA8b2xnYXNAbWVsbGFub3guY29tPjsgc3Rh YmxlQGRwZGsub3JnDQo+IFN1YmplY3Q6IFJFOiBbUEFUQ0ggdjJdIG5ldC90YXA6IGZpeCBwcm9t aXNjdW91cyBydWxlcyBkb3VibGUgaW5zZXJzaW9ucw0KPiANCj4gUGxlYXNlIHNlZSBpbmxpbmUu DQo+IEkgd2lsbCBzZW5kIHVwZGF0ZWQgdjMNCj4gDQo+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdl LS0tLS0NCj4gPiBGcm9tOiBQYXNjYWwgTWF6b24gW21haWx0bzpwYXNjYWwubWF6b25ANndpbmQu Y29tXQ0KPiA+IFNlbnQ6IFdlZG5lc2RheSwgRmVicnVhcnkgMTQsIDIwMTggMTA6NTEgQU0NCj4g PiBUbzogT3BoaXIgTXVuayA8b3BoaXJtdUBtZWxsYW5veC5jb20+OyBkZXZAZHBkay5vcmcNCj4g PiBDYzogVGhvbWFzIE1vbmphbG9uIDx0aG9tYXNAbW9uamFsb24ubmV0PjsgT2xnYSBTaGVybg0K PiA+IDxvbGdhc0BtZWxsYW5veC5jb20+OyBzdGFibGVAZHBkay5vcmcNCj4gPiBTdWJqZWN0OiBS ZTogW1BBVENIIHYyXSBuZXQvdGFwOiBmaXggcHJvbWlzY3VvdXMgcnVsZXMgZG91YmxlDQo+ID4g aW5zZXJzaW9ucw0KPiA+DQo+ID4gSGkgT3BoaXIsDQo+ID4NCj4gPiBUeXBvIGluIHRpdGxlOiBz L2luc2Vyc2lvbnMvaW5zZXJ0aW9ucy8NCj4gPg0KPiANCj4gRml4ZWQgaW4gdjMNCj4gDQo+ID4g SSdtIG9rIG9uIHByaW5jaXBsZSwgSSBoYXZlIGp1c3QgYSBmZXcgY29tbWVudHMgaW5saW5lLg0K PiA+DQo+ID4gUmVnYXJkcywNCj4gPiBQYXNjYWwNCj4gPg0KPiA+IE9uIDEzLzAyLzIwMTggMTk6 MzUsIE9waGlyIE11bmsgd3JvdGU6DQo+ID4gPiBSdW5uaW5nIHRlc3RwbWQgY29tbWFuZCAicG9y dCBzdG9wIGFsbCIgZm9sbG93ZWQgYnkgY29tbWFuZCAicG9ydA0KPiA+ID4gc3RhcnQgYWxsIiBt YXkgcmVzdWx0IGluIGEgVEFQIGVycm9yOg0KPiA+ID4gUE1EOiBLZXJuZWwgcmVmdXNlZCBUQyBm aWx0ZXIgcnVsZSBjcmVhdGlvbiAoMTcpOiBGaWxlIGV4aXN0cw0KPiA+ID4NCj4gPiA+IFJvb3Qg Y2F1c2UgYW5hbHlzaXM6IGR1cmluZyB0aGUgZXhlY3V0aW9uIG9mICJwb3J0IHN0YXJ0IGFsbCIN Cj4gPiA+IGNvbW1hbmQgdGVzdHBtZCBjYWxscyBydGVfZXRoX3Byb21pc2N1b3VzX2VuYWJsZSgp IHdoaWxlIGR1cmluZyB0aGUNCj4gPiA+IGV4ZWN1dGlvbiBvZiAicG9ydCBzdG9wIGFsbCIgY29t bWFuZCB0ZXN0cG1kIGRvZXMgbm90IGNhbGwNCj4gPiA+IHJ0ZV9ldGhfcHJvbWlzY3VvdXNfZW5h YmxlKCkuDQo+ID4gU2hvdWxkbid0IGl0IGJlIHJ0ZV9ldGhfcHJvbWlzY3VvdXNfZGlzYWJsZSgp Pw0KPiANCj4gWWVzIGl0IHNob3VsZC4gRml4ZWQgaW4gdjMNCj4gDQo+ID4gPiBBcyBhIHJlc3Vs dCB0aGUgVEFQIFBNRCBpcyB0cnlpbmcgdG8gYWRkIHRjICh0cmFmZmljIGNvbnRyb2wNCj4gPiA+ IGNvbW1hbmQpIHByb21pc2N1b3VzIHJ1bGVzIHRvIHRoZSByZW1vdGUgbmV0dnNjIGRldmljZQ0K PiA+ID4gY29uc2VjdXRpdmVseS4gRnJvbSB0aGUga2VybmVsIHBvaW50IG9mIHZpZXcgaXQgaXMg c2VlbiBhcyBhbg0KPiA+ID4gYXR0ZW1wdCB0byBhZGQgdGhlIHNhbWUgcnVsZSBtb3JlIHRoYW4g b25jZS4gSW4gcmVjZW50IGtlcm5lbHMgKGUuZy4NCj4gPiA+IHZlcnNpb24gNC4xMykgdGhpcyBh dHRlbXB0IGlzIHJlamVjdGVkIHdpdGggYSAiRmlsZSBleGlzdHMiIGVycm9yLiBJbiBsZXNzDQo+ IHJlY2VudCBrZXJuZWxzIChlLmcuDQo+ID4gPiB2ZXJzaW9uIDQuNCkgdGhlIHNhbWUgcnVsZSBt YXkgaGF2ZSBiZWVuIGFjY2VwdGVkIHR3aWNlDQo+ID4gPiBzdWNjZXNzZnVsbHksDQo+ID4gd2hp Y2ggaXMgdW5kZXNpcmFibGUuDQo+ID4gPg0KPiA+ID4gSW4gdGhlIGNvcnJ1cHRlZCBjb2RlIGV2 ZXJ5IHRjIHByb21pc2N1b3VzIHJ1bGUgaW5jbHVkZWQgYSBkaWZmZXJlbnQNCj4gPiA+IGhhbmRs ZSBudW1iZXIgcGFyYW1ldGVyLiBJZiBpbnN0ZWFkIGFuIGlkZW50aWNhbCBoYW5kbGUgbnVtYmVy DQo+ID4gPiBwYXJhbWV0ZXIgaXMgdXNlZCBmb3IgYWxsIHRjIHByb21pc2N1b3VzIHJ1bGVzIC0g YWxsIGtlcm5lbHMgd2lsbA0KPiA+ID4gcmVqZWN0IHRoZSBzZWNvbmQgcnVsZSB3aXRoIGEgIkZp bGUgZXhpc3RzIiBlcnJvciwgd2hpY2ggaXMgZWFzeSB0bw0KPiA+ID4gaWRlbnRpZnkgYW5kIHRv IHNpbGVudGx5IGlnbm9yZS4NCj4gPiA+DQo+ID4gPiBGaXhlczogMmJjMDY4NjljZDk0ICgibmV0 L3RhcDogYWRkIHJlbW90ZSBuZXRkZXZpY2UgdHJhZmZpYw0KPiA+ID4gY2FwdHVyZSIpDQo+ID4g PiBDYzogc3RhYmxlQGRwZGsub3JnDQo+ID4gPg0KPiA+ID4gU2lnbmVkLW9mZi1ieTogT3BoaXIg TXVuayA8b3BoaXJtdUBtZWxsYW5veC5jb20+DQo+ID4gPiAtLS0NCj4gPiA+IHYyOiBhZGQgZGV0 YWlsZWQgY29tbWl0IG1lc3NhZ2UNCj4gPiA+DQo+ID4gPiAgZHJpdmVycy9uZXQvdGFwL3RhcF9m bG93LmMgfCAxMSArKysrKysrKysrKw0KPiA+ID4gIDEgZmlsZSBjaGFuZ2VkLCAxMSBpbnNlcnRp b25zKCspDQo+ID4gPg0KPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RhcC90YXBfZmxv dy5jIGIvZHJpdmVycy9uZXQvdGFwL3RhcF9mbG93LmMNCj4gPiA+IGluZGV4IDY1NjU3ZjAuLmQx ZjRhNTIgMTAwNjQ0DQo+ID4gPiAtLS0gYS9kcml2ZXJzL25ldC90YXAvdGFwX2Zsb3cuYw0KPiA+ ID4gKysrIGIvZHJpdmVycy9uZXQvdGFwL3RhcF9mbG93LmMNCj4gPiA+IEBAIC0xMjMsNiArMTIz LDcgQEAgZW51bSBrZXlfc3RhdHVzX2UgeyAgfTsNCj4gPiA+DQo+ID4gPiAgI2RlZmluZSBJU09M QVRFX0hBTkRMRSAxDQo+ID4gPiArI2RlZmluZSBSRU1PVEVfUFJPTUlTQ1VPVVNfSEFORExFIDIN Cj4gPiA+DQo+ID4gPiAgc3RydWN0IHJ0ZV9mbG93IHsNCj4gPiA+ICAJTElTVF9FTlRSWShydGVf ZmxvdykgbmV4dDsgLyogUG9pbnRlciB0byB0aGUgbmV4dCBydGVfZmxvdw0KPiA+ID4gc3RydWN0 dXJlICovIEBAIC0xNjkyLDkgKzE2OTMsMTUgQEAgaW50DQo+ID4gPiB0YXBfZmxvd19pbXBsaWNp dF9jcmVhdGUoc3RydWN0DQo+ID4gcG1kX2ludGVybmFscyAqcG1kLA0KPiA+ID4gIAkgKiBUaGUg SVNPTEFURSBydWxlIGlzIGFsd2F5cyBwcmVzZW50IGFuZCBtdXN0IGhhdmUgYSBzdGF0aWMNCj4g PiA+IGhhbmRsZSwNCj4gPiBhcw0KPiA+ID4gIAkgKiB0aGUgYWN0aW9uIGlzIGNoYW5nZWQgd2hl dGhlciB0aGUgZmVhdHVyZSBpcyBlbmFibGVkIChEUk9QKSBvcg0KPiA+ID4gIAkgKiBkaXNhYmxl ZCAoUEFTU1RIUlUpLg0KPiA+ID4gKwkgKiBUaGVyZSBpcyBqdXN0IG9uZSBSRU1PVEVfUFJPTUlT Q1VPVVMgcnVsZSBpbiBhbGwgY2FzZXMuIEl0DQo+ID4gc2hvdWxkDQo+ID4gPiArCSAqIGhhdmUg YSBzdGF0aWMgaGFuZGxlIHN1Y2ggdGhhdCBhZGRpbmcgaXQgdHdpY2Ugd2lsbCBmYWlsIHdpdGgg RUVYSVNUDQo+ID4gPiArCSAqIHdpdGggYW55IGtlcm5lbCB2ZXJzaW9uLiBSZW1hcms6IG9sZCBr ZXJuZWxzIG1heSBmYWxzZWx5IGFjY2VwdCB0aGUNCj4gPiA+ICsJICogc2FtZSBSRU1PVEVfUFJF TUlTQ1VPVVMgcnVsZXMgaWYgdGhleSBoYWQgZGlmZmVyZW50IGhhbmRsZXMuDQo+ID4gcy9QUkVN SVNDVU9VUy9QUk9NSVNDVU9VUy8NCj4gPiA+ICAJICovDQo+ID4gPiAgCWlmIChpZHggPT0gVEFQ X0lTT0xBVEUpDQo+ID4gPiAgCQlyZW1vdGVfZmxvdy0+bXNnLnQudGNtX2hhbmRsZSA9IElTT0xB VEVfSEFORExFOw0KPiA+ID4gKwllbHNlIGlmIChpZHggPT0gVEFQX1JFTU9URV9QUk9NSVNDKQ0K PiA+ID4gKwkJcmVtb3RlX2Zsb3ctPm1zZy50LnRjbV9oYW5kbGUgPQ0KPiA+IFJFTU9URV9QUk9N SVNDVU9VU19IQU5ETEU7DQo+ID4gPiAgCWVsc2UNCj4gPiA+ICAJCXRhcF9mbG93X3NldF9oYW5k bGUocmVtb3RlX2Zsb3cpOw0KPiA+ID4gIAlpZiAocHJpdl9mbG93X3Byb2Nlc3MocG1kLCBhdHRy LCBpdGVtcywgYWN0aW9ucywgTlVMTCwgQEAgLTE3MDksMTINCj4gPiA+ICsxNzE2LDE2IEBAIGlu dCB0YXBfZmxvd19pbXBsaWNpdF9jcmVhdGUoc3RydWN0IHBtZF9pbnRlcm5hbHMgKnBtZCwNCj4g PiA+ICAJfQ0KPiA+ID4gIAllcnIgPSB0YXBfbmxfcmVjdl9hY2socG1kLT5ubHNrX2ZkKTsNCj4g PiA+ICAJaWYgKGVyciA8IDApIHsNCj4gPiA+ICsJCS8qIFNpbGVudGx5IGlnbm9yZSByZS1lbnRl cmluZyByZW1vdGUgcHJvbWlzY3VvdXMgcnVsZSAqLw0KPiA+ID4gKwkJaWYgKGVycm5vID09IEVF WElTVCAmJiBpZHggPT0gVEFQX1JFTU9URV9QUk9NSVNDKQ0KPiA+ID4gKwkJCWdvdG8gc3VjY2Vz czsNCj4gPiA+ICAJCVJURV9MT0coRVJSLCBQTUQsDQo+ID4gPiAgCQkJIktlcm5lbCByZWZ1c2Vk IFRDIGZpbHRlciBydWxlIGNyZWF0aW9uICglZCk6ICVzXG4iLA0KPiA+ID4gIAkJCWVycm5vLCBz dHJlcnJvcihlcnJubykpOw0KPiA+ID4gIAkJZ290byBmYWlsOw0KPiA+ID4gIAl9DQo+ID4gPiAg CUxJU1RfSU5TRVJUX0hFQUQoJnBtZC0+aW1wbGljaXRfZmxvd3MsIHJlbW90ZV9mbG93LCBuZXh0 KTsNCj4gPiBBcmUgd2Ugc3VyZSB0aGUgcHJldmlvdXMgcnVsZSBpcyBzdGlsbCBpbiB0aGUgcmVn aXN0ZXJlZCBpbXBsaWNpdCBmbG93cz8NCj4gDQo+IEkgd2lsbCBydW4gdGVzdHMgdG8gdmVyaWZ5 IHRoYXQuDQo+IA0KPiA+ID4gK3N1Y2Nlc3M6DQo+ID4gPiAgCXJldHVybiAwOw0KPiA+ID4gIGZh aWw6DQo+ID4gPiAgCWlmIChyZW1vdGVfZmxvdykNCg0K