From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5E983C7EE2A for ; Tue, 6 Jun 2023 08:27:07 +0000 (UTC) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 95CEA40ED6; Tue, 6 Jun 2023 10:27:06 +0200 (CEST) Received: from frasgout.his.huawei.com (frasgout.his.huawei.com [185.176.79.56]) by mails.dpdk.org (Postfix) with ESMTP id 8C18940A84 for ; Tue, 6 Jun 2023 10:27:05 +0200 (CEST) Received: from frapeml500007.china.huawei.com (unknown [172.18.147.200]) by frasgout.his.huawei.com (SkyGuard) with ESMTP id 4Qb3VJ35bgz6J73K; Tue, 6 Jun 2023 16:26:48 +0800 (CST) Received: from frapeml500007.china.huawei.com (7.182.85.172) by frapeml500007.china.huawei.com (7.182.85.172) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Tue, 6 Jun 2023 10:27:03 +0200 Received: from frapeml500007.china.huawei.com ([7.182.85.172]) by frapeml500007.china.huawei.com ([7.182.85.172]) with mapi id 15.01.2507.023; Tue, 6 Jun 2023 10:27:03 +0200 From: Konstantin Ananyev To: Feifei Wang , =?utf-8?B?0JrQvtC90YHRgtCw0L3RgtC40L0g0JDQvdCw0L3RjNC10LI=?= , Yuying Zhang , Beilei Xing CC: "dev@dpdk.org" , nd , Honnappa Nagarahalli , Ruifeng Wang , nd , nd Subject: RE: [PATCH v6 2/4] net/i40e: implement mbufs recycle mode Thread-Topic: [PATCH v6 2/4] net/i40e: implement mbufs recycle mode Thread-Index: AQHZju3A3Kr3jcbS9UWgtqLBsiLUUq98HK8AgADuh4CAAGRwQP//6ksAgAAooyA= Date: Tue, 6 Jun 2023 08:27:02 +0000 Message-ID: <83b9487385e04212847f7deea32efd82@huawei.com> References: <20211224164613.32569-1-feifei.wang2@arm.com> <20230525094541.331338-1-feifei.wang2@arm.com> <20230525094541.331338-3-feifei.wang2@arm.com> <1580121685969644@mail.yandex.ru> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.81.189.224] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-CFilter-Loop: Reflected 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 DQoNCj4gPiA+IERlZmluZSBzcGVjaWZpYyBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbiBmb3IgaTQw ZSBkcml2ZXIuDQo+ID4gPiBDdXJyZW50bHksIG1idWZzIHJlY3ljbGUgbW9kZSBjYW4gc3VwcG9y dCAxMjhiaXQgdmVjdG9yIHBhdGggYW5kIGF2eDINCj4gPiA+IHBhdGguIEFuZCBjYW4gYmUgZW5h YmxlZCBib3RoIGluIGZhc3QgZnJlZSBhbmQgbm8gZmFzdCBmcmVlIG1vZGUuDQo+ID4gPg0KPiA+ ID4gU3VnZ2VzdGVkLWJ5OiBIb25uYXBwYSBOYWdhcmFoYWxsaQ0KPiA+ID4gPG1haWx0bzpob25u YXBwYS5uYWdhcmFoYWxsaUBhcm0uY29tPg0KPiA+ID4gU2lnbmVkLW9mZi1ieTogRmVpZmVpIFdh bmcgPG1haWx0bzpmZWlmZWkud2FuZzJAYXJtLmNvbT4NCj4gPiA+IFJldmlld2VkLWJ5OiBSdWlm ZW5nIFdhbmcgPG1haWx0bzpydWlmZW5nLndhbmdAYXJtLmNvbT4NCj4gPiA+IFJldmlld2VkLWJ5 OiBIb25uYXBwYSBOYWdhcmFoYWxsaQ0KPiA+ID4gPG1haWx0bzpob25uYXBwYS5uYWdhcmFoYWxs aUBhcm0uY29tPg0KPiA+ID4gLS0tDQo+ID4gPiAgZHJpdmVycy9uZXQvaTQwZS9pNDBlX2V0aGRl di5jIHwgMSArDQo+ID4gPiAgZHJpdmVycy9uZXQvaTQwZS9pNDBlX2V0aGRldi5oIHwgMiArDQo+ ID4gPiAgLi4uL25ldC9pNDBlL2k0MGVfcmVjeWNsZV9tYnVmc192ZWNfY29tbW9uLmMgfCAxNDAN Cj4gPiArKysrKysrKysrKysrKysrKysNCj4gPiA+IGRyaXZlcnMvbmV0L2k0MGUvaTQwZV9yeHR4 LmMgfCAzMiArKysrICBkcml2ZXJzL25ldC9pNDBlL2k0MGVfcnh0eC5oIHwNCj4gPiA+IDQgKyAg ZHJpdmVycy9uZXQvaTQwZS9tZXNvbi5idWlsZCB8IDIgKw0KPiA+ID4gIDYgZmlsZXMgY2hhbmdl ZCwgMTgxIGluc2VydGlvbnMoKykNCj4gPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9u ZXQvaTQwZS9pNDBlX3JlY3ljbGVfbWJ1ZnNfdmVjX2NvbW1vbi5jDQo+ID4gPg0KPiA+ID4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2k0MGUvaTQwZV9ldGhkZXYuYw0KPiA+ID4gYi9kcml2ZXJz L25ldC9pNDBlL2k0MGVfZXRoZGV2LmMgaW5kZXggZjlkOGY5NzkxZi4uZDRlZWNkMTZjZiAxMDA2 NDQNCj4gPiA+IC0tLSBhL2RyaXZlcnMvbmV0L2k0MGUvaTQwZV9ldGhkZXYuYw0KPiA+ID4gKysr IGIvZHJpdmVycy9uZXQvaTQwZS9pNDBlX2V0aGRldi5jDQo+ID4gPiBAQCAtNDk2LDYgKzQ5Niw3 IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRoX2Rldl9vcHMgaTQwZV9ldGhfZGV2X29wcyA9DQo+ ID4gew0KPiA+ID4gICAgICAgICAgLmZsb3dfb3BzX2dldCA9IGk0MGVfZGV2X2Zsb3dfb3BzX2dl dCwNCj4gPiA+ICAgICAgICAgIC5yeHFfaW5mb19nZXQgPSBpNDBlX3J4cV9pbmZvX2dldCwNCj4g PiA+ICAgICAgICAgIC50eHFfaW5mb19nZXQgPSBpNDBlX3R4cV9pbmZvX2dldCwNCj4gPiA+ICsg LnJlY3ljbGVfcnhxX2luZm9fZ2V0ID0gaTQwZV9yZWN5Y2xlX3J4cV9pbmZvX2dldCwNCj4gPiA+ ICAgICAgICAgIC5yeF9idXJzdF9tb2RlX2dldCA9IGk0MGVfcnhfYnVyc3RfbW9kZV9nZXQsDQo+ ID4gPiAgICAgICAgICAudHhfYnVyc3RfbW9kZV9nZXQgPSBpNDBlX3R4X2J1cnN0X21vZGVfZ2V0 LA0KPiA+ID4gICAgICAgICAgLnRpbWVzeW5jX2VuYWJsZSA9IGk0MGVfdGltZXN5bmNfZW5hYmxl LCBkaWZmIC0tZ2l0DQo+ID4gPiBhL2RyaXZlcnMvbmV0L2k0MGUvaTQwZV9ldGhkZXYuaCBiL2Ry aXZlcnMvbmV0L2k0MGUvaTQwZV9ldGhkZXYuaA0KPiA+ID4gaW5kZXggOWI4MDZkMTMwZS4uYjVi MmQ2Y2YyYiAxMDA2NDQNCj4gPiA+IC0tLSBhL2RyaXZlcnMvbmV0L2k0MGUvaTQwZV9ldGhkZXYu aA0KPiA+ID4gKysrIGIvZHJpdmVycy9uZXQvaTQwZS9pNDBlX2V0aGRldi5oDQo+ID4gPiBAQCAt MTM1NSw2ICsxMzU1LDggQEAgdm9pZCBpNDBlX3J4cV9pbmZvX2dldChzdHJ1Y3QgcnRlX2V0aF9k ZXYgKmRldiwNCj4gPiB1aW50MTZfdCBxdWV1ZV9pZCwNCj4gPiA+ICAgICAgICAgIHN0cnVjdCBy dGVfZXRoX3J4cV9pbmZvICpxaW5mbyk7ICB2b2lkDQo+ID4gPiBpNDBlX3R4cV9pbmZvX2dldChz dHJ1Y3QgcnRlX2V0aF9kZXYgKmRldiwgdWludDE2X3QgcXVldWVfaWQsDQo+ID4gPiAgICAgICAg ICBzdHJ1Y3QgcnRlX2V0aF90eHFfaW5mbyAqcWluZm8pOw0KPiA+ID4gK3ZvaWQgaTQwZV9yZWN5 Y2xlX3J4cV9pbmZvX2dldChzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldiwgdWludDE2X3QNCj4gPiA+ ICtxdWV1ZV9pZCwgIHN0cnVjdCBydGVfZXRoX3JlY3ljbGVfcnhxX2luZm8gKnJlY3ljbGVfcnhx X2luZm8pOw0KPiA+ID4gIGludCBpNDBlX3J4X2J1cnN0X21vZGVfZ2V0KHN0cnVjdCBydGVfZXRo X2RldiAqZGV2LCB1aW50MTZfdCBxdWV1ZV9pZCwNCj4gPiA+ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgcnRlX2V0aF9idXJzdF9tb2RlICptb2RlKTsgIGludA0KPiA+ID4gaTQw ZV90eF9idXJzdF9tb2RlX2dldChzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldiwgdWludDE2X3QgcXVl dWVfaWQsDQo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaTQwZS9pNDBlX3JlY3ljbGVf bWJ1ZnNfdmVjX2NvbW1vbi5jDQo+ID4gPiBiL2RyaXZlcnMvbmV0L2k0MGUvaTQwZV9yZWN5Y2xl X21idWZzX3ZlY19jb21tb24uYw0KPiA+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiA+IGlu ZGV4IDAwMDAwMDAwMDAuLjA4ZDcwOGZkN2QNCj4gPiA+IC0tLSAvZGV2L251bGwNCj4gPiA+ICsr KyBiL2RyaXZlcnMvbmV0L2k0MGUvaTQwZV9yZWN5Y2xlX21idWZzX3ZlY19jb21tb24uYw0KPiA+ ID4gQEAgLTAsMCArMSwxNDAgQEANCj4gPiA+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog QlNELTMtQ2xhdXNlDQo+ID4gPiArICogQ29weXJpZ2h0IChjKSAyMDIzIEFybSBMaW1pdGVkLg0K PiA+ID4gKyAqLw0KPiA+ID4gKw0KPiA+ID4gKyNpbmNsdWRlIDxzdGRpbnQuaD4NCj4gPiA+ICsj aW5jbHVkZSA8ZXRoZGV2X2RyaXZlci5oPg0KPiA+ID4gKw0KPiA+ID4gKyNpbmNsdWRlICJiYXNl L2k0MGVfcHJvdG90eXBlLmgiDQo+ID4gPiArI2luY2x1ZGUgImJhc2UvaTQwZV90eXBlLmgiDQo+ ID4gPiArI2luY2x1ZGUgImk0MGVfZXRoZGV2LmgiDQo+ID4gPiArI2luY2x1ZGUgImk0MGVfcnh0 eC5oIg0KPiA+ID4gKw0KPiA+ID4gKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdj YXN0LXF1YWwiDQo+ID4gPiArDQo+ID4gPiArdm9pZA0KPiA+ID4gK2k0MGVfcmVjeWNsZV9yeF9k ZXNjcmlwdG9yc19yZWZpbGxfdmVjKHZvaWQgKnJ4X3F1ZXVlLCB1aW50MTZfdA0KPiA+ID4gK25i X21idWZzKSB7ICBzdHJ1Y3QgaTQwZV9yeF9xdWV1ZSAqcnhxID0gcnhfcXVldWU7ICBzdHJ1Y3QN Cj4gPiA+ICtpNDBlX3J4X2VudHJ5ICpyeGVwOyAgdm9sYXRpbGUgdW5pb24gaTQwZV9yeF9kZXNj ICpyeGRwOyAgdWludDE2X3QNCj4gPiA+ICtyeF9pZDsgIHVpbnQ2NF90IHBhZGRyOyAgdWludDY0 X3QgZG1hX2FkZHI7ICB1aW50MTZfdCBpOw0KPiA+ID4gKw0KPiA+ID4gKyByeGRwID0gcnhxLT5y eF9yaW5nICsgcnhxLT5yeHJlYXJtX3N0YXJ0OyByeGVwID0NCj4gPiA+ICsgJnJ4cS0+c3dfcmlu Z1tyeHEtPnJ4cmVhcm1fc3RhcnRdOw0KPiA+ID4gKw0KPiA+ID4gKyBmb3IgKGkgPSAwOyBpIDwg bmJfbWJ1ZnM7IGkrKykgew0KPiA+ID4gKyAvKiBJbml0aWFsaXplIHJ4ZHAgZGVzY3MuICovDQo+ ID4gPiArIHBhZGRyID0gKHJ4ZXBbaV0ubWJ1ZiktPmJ1Zl9pb3ZhICsgUlRFX1BLVE1CVUZfSEVB RFJPT007DQo+ID4gZG1hX2FkZHIgPQ0KPiA+ID4gKyBydGVfY3B1X3RvX2xlXzY0KHBhZGRyKTsN Cj4gPiA+ICsgLyogZmx1c2ggZGVzYyB3aXRoIHBhIGRtYV9hZGRyICovDQo+ID4gPiArIHJ4ZHBb aV0ucmVhZC5oZHJfYWRkciA9IDA7DQo+ID4gPiArIHJ4ZHBbaV0ucmVhZC5wa3RfYWRkciA9IGRt YV9hZGRyOw0KPiA+ID4gKyB9DQo+ID4gPiArDQo+ID4gPiArIC8qIFVwZGF0ZSB0aGUgZGVzY3Jp cHRvciBpbml0aWFsaXplciBpbmRleCAqLw0KPiA+ID4gKyByeHEtPnJ4cmVhcm1fc3RhcnQgKz0g bmJfbWJ1ZnM7DQo+ID4gPiArIHJ4X2lkID0gcnhxLT5yeHJlYXJtX3N0YXJ0IC0gMTsNCj4gPiA+ ICsNCj4gPiA+ICsgaWYgKHVubGlrZWx5KHJ4cS0+cnhyZWFybV9zdGFydCA+PSByeHEtPm5iX3J4 X2Rlc2MpKSB7DQo+ID4gPiArIHJ4cS0+cnhyZWFybV9zdGFydCA9IDA7DQo+ID4gPiArIHJ4X2lk ID0gcnhxLT5uYl9yeF9kZXNjIC0gMTsNCj4gPiA+ICsgfQ0KPiA+ID4gKw0KPiA+ID4gKyByeHEt PnJ4cmVhcm1fbmIgLT0gbmJfbWJ1ZnM7DQo+ID4gPiArDQo+ID4gPiArIHJ0ZV9pb193bWIoKTsN Cj4gPiA+ICsgLyogVXBkYXRlIHRoZSB0YWlsIHBvaW50ZXIgb24gdGhlIE5JQyAqLw0KPiA+ID4g K0k0MEVfUENJX1JFR19XUklURV9SRUxBWEVEKHJ4cS0+cXJ4X3RhaWwsIHJ4X2lkKTsgfQ0KPiA+ ID4gKw0KPiA+ID4gK3VpbnQxNl90DQo+ID4gPiAraTQwZV9yZWN5Y2xlX3R4X21idWZzX3JldXNl X3ZlYyh2b2lkICp0eF9xdWV1ZSwgIHN0cnVjdA0KPiA+ID4gK3J0ZV9ldGhfcmVjeWNsZV9yeHFf aW5mbyAqcmVjeWNsZV9yeHFfaW5mbykgeyAgc3RydWN0IGk0MGVfdHhfcXVldWUNCj4gPiA+ICsq dHhxID0gdHhfcXVldWU7ICBzdHJ1Y3QgaTQwZV90eF9lbnRyeSAqdHhlcDsgIHN0cnVjdCBydGVf bWJ1Zg0KPiA+ID4gKyoqcnhlcDsgIHN0cnVjdCBydGVfbWJ1ZiAqbVtSVEVfSTQwRV9UWF9NQVhf RlJFRV9CVUZfU1pdOyAgaW50IGksIGosDQo+ID4gPiArbjsgIHVpbnQxNl90IGF2YWlsID0gMDsg IHVpbnQxNl90IG1idWZfcmluZ19zaXplID0NCj4gPiA+ICtyZWN5Y2xlX3J4cV9pbmZvLT5tYnVm X3Jpbmdfc2l6ZTsNCj4gPiA+ICsgdWludDE2X3QgbWFzayA9IHJlY3ljbGVfcnhxX2luZm8tPm1i dWZfcmluZ19zaXplIC0gMTsgIHVpbnQxNl90DQo+ID4gPiArcmVmaWxsX3JlcXVpcmVtZW50ID0g cmVjeWNsZV9yeHFfaW5mby0+cmVmaWxsX3JlcXVpcmVtZW50Ow0KPiA+ID4gKyB1aW50MTZfdCBy ZWZpbGxfaGVhZCA9ICpyZWN5Y2xlX3J4cV9pbmZvLT5yZWZpbGxfaGVhZDsgIHVpbnQxNl90DQo+ ID4gPiArcmVjZWl2ZV90YWlsID0gKnJlY3ljbGVfcnhxX2luZm8tPnJlY2VpdmVfdGFpbDsNCj4g PiA+ICsNCj4gPiA+ICsgLyogR2V0IGF2YWlsYWJsZSByZWN5Y2xpbmcgUnggYnVmZmVycy4gKi8g YXZhaWwgPSAobWJ1Zl9yaW5nX3NpemUgLQ0KPiA+ID4gKyAocmVmaWxsX2hlYWQgLSByZWNlaXZl X3RhaWwpKSAmIG1hc2s7DQo+ID4gPiArDQo+ID4gPiArIC8qIENoZWNrIFR4IGZyZWUgdGhyZXNo IGFuZCBSeCBhdmFpbGFibGUgc3BhY2UuICovIGlmDQo+ID4gPiArICh0eHEtPm5iX3R4X2ZyZWUg PiB0eHEtPnR4X2ZyZWVfdGhyZXNoIHx8IGF2YWlsIDw9DQo+ID4gPiArIHR4cS0+dHhfcnNfdGhy ZXNoKSByZXR1cm4gMDsNCj4gPiA+ICsNCj4gPiA+ICsgLyogY2hlY2sgREQgYml0cyBvbiB0aHJl c2hvbGQgZGVzY3JpcHRvciAqLyBpZg0KPiA+ID4gKyAoKHR4cS0+dHhfcmluZ1t0eHEtPnR4X25l eHRfZGRdLmNtZF90eXBlX29mZnNldF9ic3ogJg0KPiA+ID4gKyBydGVfY3B1X3RvX2xlXzY0KEk0 MEVfVFhEX1FXMV9EVFlQRV9NQVNLKSkgIT0NCj4gPiA+ICsgcnRlX2NwdV90b19sZV82NChJNDBF X1RYX0RFU0NfRFRZUEVfREVTQ19ET05FKSkNCj4gPiA+ICsgcmV0dXJuIDA7DQo+ID4gPiArDQo+ ID4gPiArIG4gPSB0eHEtPnR4X3JzX3RocmVzaDsNCj4gPiA+ICsNCj4gPiA+ICsgLyogTWJ1ZnMg cmVjeWNsZSBtb2RlIGNhbiBvbmx5IHN1cHBvcnQgbm8gcmluZyBidWZmZXIgd3JhcHBpbmcgYXJv dW5kLg0KPiA+ID4gKyAqIFR3byBjYXNlIGZvciB0aGlzOg0KPiA+ID4gKyAqDQo+ID4gPiArICog Y2FzZSAxOiBUaGUgcmVmaWxsIGhlYWQgb2YgUnggYnVmZmVyIHJpbmcgbmVlZHMgdG8gYmUgYWxp Z25lZCB3aXRoDQo+ID4gPiArICogbWJ1ZiByaW5nIHNpemUuIEluIHRoaXMgY2FzZSwgdGhlIG51 bWJlciBvZiBUeCBmcmVlaW5nIGJ1ZmZlcnMNCj4gPiA+ICsgKiBzaG91bGQgYmUgZXF1YWwgdG8g cmVmaWxsX3JlcXVpcmVtZW50Lg0KPiA+ID4gKyAqDQo+ID4gPiArICogY2FzZSAyOiBUaGUgcmVm aWxsIGhlYWQgb2YgUnggcmluZyBidWZmZXIgZG9lcyBub3QgbmVlZCB0byBiZQ0KPiA+ID4gKyBh bGlnbmVkDQo+ID4gPiArICogd2l0aCBtYnVmIHJpbmcgc2l6ZS4gSW4gdGhpcyBjYXNlLCB0aGUg dXBkYXRlIG9mIHJlZmlsbCBoZWFkIGNhbg0KPiA+ID4gKyBub3QNCj4gPiA+ICsgKiBleGNlZWQg dGhlIFJ4IG1idWYgcmluZyBzaXplLg0KPiA+ID4gKyAqLw0KPiA+ID4gKyBpZiAocmVmaWxsX3Jl cXVpcmVtZW50ICE9IG4gfHwNCj4gPiA+ICsgKCFyZWZpbGxfcmVxdWlyZW1lbnQgJiYgKHJlZmls bF9oZWFkICsgbiA+IG1idWZfcmluZ19zaXplKSkpIHJldHVybg0KPiA+ID4gKyAwOw0KPiA+ID4g Kw0KPiA+ID4gKyAvKiBGaXJzdCBidWZmZXIgdG8gZnJlZSBmcm9tIFMvVyByaW5nIGlzIGF0IGlu ZGV4DQo+ID4gPiArICogdHhfbmV4dF9kZCAtICh0eF9yc190aHJlc2gtMSkuDQo+ID4gPiArICov DQo+ID4gPiArIHR4ZXAgPSAmdHhxLT5zd19yaW5nW3R4cS0+dHhfbmV4dF9kZCAtIChuIC0gMSld OyByeGVwID0NCj4gPiA+ICsgcmVjeWNsZV9yeHFfaW5mby0+bWJ1Zl9yaW5nOyByeGVwICs9IHJl ZmlsbF9oZWFkOw0KPiA+ID4gKw0KPiA+ID4gKyBpZiAodHhxLT5vZmZsb2FkcyAmIFJURV9FVEhf VFhfT0ZGTE9BRF9NQlVGX0ZBU1RfRlJFRSkgew0KPiA+ID4gKyAvKiBEaXJlY3RseSBwdXQgbWJ1 ZnMgZnJvbSBUeCB0byBSeC4gKi8gZm9yIChpID0gMDsgaSA8IG47IGkrKywNCj4gPiA+ICsgcnhl cCsrLCB0eGVwKyspICpyeGVwID0gdHhlcFswXS5tYnVmOyB9IGVsc2UgeyBmb3IgKGkgPSAwLCBq ID0gMDsgaQ0KPiA+ID4gKyA8IG47IGkrKykgew0KPiA+ID4gKyAvKiBBdm9pZCB0eHEgY29udGFp bnMgYnVmZmVycyBmcm9tIGV4cGVjdGVkIG1lbXBvb2wuICovIGlmDQo+ID4gPiArICh1bmxpa2Vs eShyZWN5Y2xlX3J4cV9pbmZvLT5tcCAhPSB0eGVwW2ldLm1idWYtPnBvb2wpKSByZXR1cm4gMDsN Cj4gPiA+IEkgZG9uJ3QgdGhpbmsgdGhhdCBpdCBpcyBwb3NzaWJsZSB0byBzaW1wbHkgcmV0dXJu IDAgaGVyZToNCj4gPiA+IHdlIG1pZ2h0IGFscmVhZHkgaGF2ZSBzb21lIG1idWZzIGluc2lkZSBy eGVwW10sIHNvIHdlIHByb2JhYmx5IG5lZWQgdG8NCj4gPiA+IHJldHVybiB0aGF0IG51bWJlciAo aikuDQo+ID4gPg0KPiA+ID4gTm8sIGhlcmUgaXMganVzdCBwcmUtZnJlZSwgbm90IGFjdHVhbGx5 IHB1dCBtYnVmcyBpbnRvIHJ4ZXEuDQo+ID4NCj4gPiBJIHVuZGVyc3RhbmQgdGhhdC4NCj4gPiBX aGF0IEkgYW0gc2F5aW5nOiBhZnRlciB5b3UgY2FsbCBwa3RtYnVmX3ByZWZyZWVfc2VnKG1idWYp LCB5b3UgY2Fu4oCZdCBrZWVwIGl0DQo+ID4gaW4gdGhlIHR4cSBhbnltb3JlLg0KPiA+IFlvdSBo YXZlIGVpdGhlciB0byBwdXQgaXQgaW50byByeGVwW10sIG9yIGJhY2sgaW50byBtZW1wb29sLg0K PiA+IEFsc28gdHhxIHN0YXRlIChuYl90eF9mcmVlLCBldGMuKSBuZWVkIHRvIGJlIHVwZGF0ZWQu DQo+ID4NCj4gPiA+IEFmdGVyIHJ1biBvdXQgb2YgdGhlIGxvb3AsIHdlIGNhbGwgcnRlX21lbWNw eSB0byBhY3R1YWxseSBjb3B5IG1idWZzDQo+ID4gPiBpbnRvIHJ4ZXAuDQo+ID4gPiArDQo+ID4g PiArIG1bal0gPSBydGVfcGt0bWJ1Zl9wcmVmcmVlX3NlZyh0eGVwW2ldLm1idWYpOw0KPiA+ID4g Kw0KPiA+ID4gKyAvKiBJbiBjYXNlIDEsIGVhY2ggb2YgVHggYnVmZmVycyBzaG91bGQgYmUgdGhl DQo+ID4gPiArICogbGFzdCByZWZlcmVuY2UuDQo+ID4gPiArICovDQo+ID4gPiArIGlmICh1bmxp a2VseShtW2pdID09IE5VTEwgJiYgcmVmaWxsX3JlcXVpcmVtZW50KSkgcmV0dXJuIDA7DQo+ID4g Pg0KPiA+ID4gc2FtZSBoZXJlLCB3ZSBjYW4ndCBzaW1wbHkgcmV0dXJuIDAsIGl0IHdpbGwgaW50 cm9kdWNlIG1idWYgbGVha2FnZS4NCj4gPiA+ICsgLyogSW4gY2FzZSAyLCB0aGUgbnVtYmVyIG9m IHZhbGlkIFR4IGZyZWUNCj4gPiA+ICsgKiBidWZmZXJzIHNob3VsZCBiZSByZWNvcmRlZC4NCj4g PiA+ICsgKi8NCj4gPiA+ICsgaisrOw0KPiA+ID4gKyB9DQo+ID4gPiArIHJ0ZV9tZW1jcHkocnhl cCwgbSwgc2l6ZW9mKHZvaWQgKikgKiBqKTsNCj4gPiA+IFdvbmRlciB3aHkgZG8geW91IG5lZWQg aW50ZXJtZWRpYXRlIGJ1ZmZlciBmb3IgcmVsZWFzZWQgbWJ1ZnM/DQo+ID4gPiBXaHkgY2FuJ3Qg anVzdDoNCj4gPiA+IC4uLg0KPiA+ID4gbSA9IHJ0ZV9wa3RtYnVmX3ByZWZyZWVfc2VnKHR4ZXBb aV0ubWJ1Zik7DQo+ID4gPiAuLi4NCj4gPiA+IHJ4ZXBbaisrXSA9IG07DQo+ID4gPiA/DQo+ID4g PiBNaWdodCBzYXZlIHlvdSBmZXcgZXh0cmEgY3ljbGVzLg0KPiA+ID4gU29tZXRpbWVzIOKAmHJ0 ZV9wa3RtYnVmX3ByZWZyZWVfc2Vn4oCZIGNhbiByZXR1cm4gTlVMTCBkdWUgdG8NCj4gPiA+IG1i dWYtPnJlZmNudCA+IDEuIFNvIHdlIHNob3VsZCBmaXJzdGx5IGVuc3VyZSBhbGwg4oCYbeKAmSBh cmUgdmFsaWQgYW5kDQo+ID4gPiB0aGVuIGNvcHkgdGhlbSBpbnRvIHJ4ZXAuDQo+ID4NCj4gPiBJ IHVuZGVyc3RhbmQgdGhhdCwgYnV0IHlvdSBjYW4gY2hlY2sgaXMgaXQgTlVMTCBvciBub3QuDQo+ IEZvciBpNDBlIHJ4cSwgaXQgbXVzdCByZWFybSAnIFJURV9JNDBFX1JYUV9SRUFSTV9USFJFU0gg JyBwa3RzIG9uY2UgYSB0aW1lDQo+IGJhc2VkIG9uIGl0cyByaW5nIHdyYXBwaW5nIG1lY2hhbmlz bS4NCj4gDQo+IEZvciBpNDBlIHR4cSwgaXQgbXVzdCBmcmVlICcgdHhxLT50eF9yc190aHJlc2gn IHBrdHMgb25jZSBhIHRpbWUuDQo+IA0KPiBTbyB3ZSBuZWVkIGZpcnN0bHkgZW5zdXJlIGFsbCB0 eCBmcmVlIG1idWZzIGFyZSB2YWxpZCwgYW5kIHRoZW4gY29weSB0aGVzZSBpbnRvIHJ4cS4NCj4g SWYgbm90IGVub3VnaCB2YWxpZCBtYnVmcywgaXQgd2lsbCBicmVhayByeHEncyByaW5nIHdyYXBw aW5nIG1lY2hhbmlzbS4NCiANCkkgdGhpbmsgeW91IGNhbiBzdGlsbCBjb3B5IG1idWZzIGludG8g cnhlcFtdLCBpZiB0aGVyZSBhcmUgbm90IGVub3VnaCBtYnVmcywNCnlvdSBjYW4gc3RpbGwgcmV0 dXJuIDAgKG9yIHdoYXRldmVyIGlzIGEgcHJvcGVyIHZhbHVlIGhlcmUpLCBhbmQgdGhhdCB3b3Vs ZCBtZWFuDQphbGwgdGhlc2UgbmV3IHJ4ZXBbXSBlbnRyaWVzIHdpbGwgYmUgY29uc2lkZXJlZCBh cyBpbnZhbGlkLg0KQW55d2F5IHRoYXQncyBqdXN0IGEgc3VnZ2VzdGlvbiB0byBhdm9pZCBleHRy YSBjb3B5Lg0KDQo+IA0KPiA+DQo+ID4gPiArIH0NCj4gPiA+ICsNCj4gPiA+ICsgLyogVXBkYXRl IGNvdW50ZXJzIGZvciBUeC4gKi8NCj4gPiA+ICsgdHhxLT5uYl90eF9mcmVlID0gKHVpbnQxNl90 KSh0eHEtPm5iX3R4X2ZyZWUgKyB0eHEtPnR4X3JzX3RocmVzaCk7DQo+ID4gPiArIHR4cS0+dHhf bmV4dF9kZCA9ICh1aW50MTZfdCkodHhxLT50eF9uZXh0X2RkICsgdHhxLT50eF9yc190aHJlc2gp Ow0KPiA+ID4gKyBpZiAodHhxLT50eF9uZXh0X2RkID49IHR4cS0+bmJfdHhfZGVzYykNCj4gPiA+ ICsgdHhxLT50eF9uZXh0X2RkID0gKHVpbnQxNl90KSh0eHEtPnR4X3JzX3RocmVzaCAtIDEpOw0K PiA+ID4gKw0KPiA+ID4gKyByZXR1cm4gbjsNCj4gPiA+ICt9DQo=