From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id AECBFA0526; Wed, 22 Jul 2020 07:31:10 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 547221BFE4; Wed, 22 Jul 2020 07:31:09 +0200 (CEST) Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by dpdk.org (Postfix) with ESMTP id DA24E1BFD1; Wed, 22 Jul 2020 07:31:07 +0200 (CEST) IronPort-SDR: gDfOF3ivZwh2VxvSIuFfMLXNpX+oFr2SY4uU8hqonPt+CF+jJqgrZy1ePixIsqIhAo0k48mMvu vr2bwQoTO9cQ== X-IronPort-AV: E=McAfee;i="6000,8403,9689"; a="129841857" X-IronPort-AV: E=Sophos;i="5.75,381,1589266800"; d="scan'208";a="129841857" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Jul 2020 22:31:06 -0700 IronPort-SDR: w4ZUkejN/3xyRT5nhY+ytEFC7b4kdeZBaySPnUoVFLVhIB9wC+CX5Jnl5CT111vyZ/jigaT8Rg A+DF12Eqjm3g== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.75,381,1589266800"; d="scan'208";a="284107555" Received: from fmsmsx602.amr.corp.intel.com ([10.18.126.82]) by orsmga003.jf.intel.com with ESMTP; 21 Jul 2020 22:31:06 -0700 Received: from fmsmsx602.amr.corp.intel.com (10.18.126.82) by fmsmsx602.amr.corp.intel.com (10.18.126.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 21 Jul 2020 22:31:05 -0700 Received: from shsmsx154.ccr.corp.intel.com (10.239.6.54) by fmsmsx602.amr.corp.intel.com (10.18.126.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id 15.1.1713.5 via Frontend Transport; Tue, 21 Jul 2020 22:31:05 -0700 Received: from shsmsx103.ccr.corp.intel.com ([169.254.4.22]) by SHSMSX154.ccr.corp.intel.com ([169.254.7.32]) with mapi id 14.03.0439.000; Wed, 22 Jul 2020 13:31:02 +0800 From: "Zhang, Qi Z" To: "Wang, ShougangX" , "dev@dpdk.org" CC: "Xing, Beilei" , "Guo, Jia" , "Wang, ShougangX" , "stable@dpdk.org" Thread-Topic: [dpdk-dev] [PATCH v2] net/i40e: fix incorrect hash look up table Thread-Index: AQHWXySqA49xOEYFTkiaJTOKcGomf6kTE8og Date: Wed, 22 Jul 2020 05:31:01 +0000 Message-ID: <039ED4275CED7440929022BC67E7061154863E7D@SHSMSX103.ccr.corp.intel.com> References: <20200715063515.9262-1-shougangx.wang@intel.com> <20200721054920.29749-1-shougangx.wang@intel.com> In-Reply-To: <20200721054920.29749-1-shougangx.wang@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.2.0.6 dlp-reaction: no-action x-originating-ip: [10.239.127.40] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH v2] net/i40e: fix incorrect hash look up table 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogZGV2IDxkZXYtYm91bmNl c0BkcGRrLm9yZz4gT24gQmVoYWxmIE9mIFNob3VnYW5nIFdhbmcNCj4gU2VudDogVHVlc2RheSwg SnVseSAyMSwgMjAyMCAxOjQ5IFBNDQo+IFRvOiBkZXZAZHBkay5vcmcNCj4gQ2M6IFhpbmcsIEJl aWxlaSA8YmVpbGVpLnhpbmdAaW50ZWwuY29tPjsgR3VvLCBKaWEgPGppYS5ndW9AaW50ZWwuY29t PjsgV2FuZywNCj4gU2hvdWdhbmdYIDxzaG91Z2FuZ3gud2FuZ0BpbnRlbC5jb20+OyBzdGFibGVA ZHBkay5vcmcNCj4gU3ViamVjdDogW2RwZGstZGV2XSBbUEFUQ0ggdjJdIG5ldC9pNDBlOiBmaXgg aW5jb3JyZWN0IGhhc2ggbG9vayB1cCB0YWJsZQ0KPiANCj4gVGhlIGhhc2ggbG9vayB1cCB0YWJs ZShMVVQpIHdpbGwgbm90IGJlIGluaXRpYWxpemluZyB3aGVuIHN0YXJ0aW5nIHRlc3RwbWQgd2l0 aA0KPiAtLWRpc2FibGUtcnNzLiBTbyB0aGF0IHNvbWUgaW52YWxpZCBxdWV1ZSBpbmRleGVzIG1h eSBzdGlsbCBpbiB0aGUgTFVULiBXaGVuDQo+IGVuYWJsZSBSU1MgYnkgY3JlYXRpbmcgUlNTIHJ1 bGUsIHNvbWUgcGFja2V0cyB3aWxsIG5vdCBiZSBpbnRvIHRoZSB2YWxpZCBxdWV1ZXMuDQo+IFRo aXMgcGF0Y2ggZml4ZXMgdGhpcyBpc3N1ZSBieSBpbml0aWFsaXppbmcgdGhlIExVVCB3aGVuIGNy ZWF0aW5nIGFuIFJTUyBydWxlLg0KDQpDb3VsZCB5b3UgZXhwbGFpbiB3aHkgeW91IG9ubHkgaW5p dGlhbGl6ZSB0aGUgTFVUIHdoZW4gY3JlYXRpbmcgYW4gUlNTIHJ1bGUgYnV0IG5vdCBhdCBkZXZf aW5pdCBvciBkZXZfc3RhcnQ/DQpXaGF0IGlmIHVzZXIgY29uZmlndXJlIExVVCB0YWJsZSBiZWZv cmUgY3JlYXRlIGEgUlNTIHJ1bGU/IERvZXMgdGhhdCBtZWFuIHRoZSBMVVQgdGFibGUgd2lsbCBi ZSBmbHVzaGVkPw0KDQo+IA0KPiBGaXhlczogZmVhYWUyODViMzQyICgibmV0L2k0MGU6IHN1cHBv cnQgaGFzaCBjb25maWd1cmF0aW9uIGluIFJTUyBmbG93IikNCj4gQ2M6IHN0YWJsZUBkcGRrLm9y Zw0KPiANCj4gU2lnbmVkLW9mZi1ieTogU2hvdWdhbmcgV2FuZyA8c2hvdWdhbmd4LndhbmdAaW50 ZWwuY29tPg0KPiAtLS0NCj4gIGRyaXZlcnMvbmV0L2k0MGUvaTQwZV9ldGhkZXYuYyB8IDEzNCAr KysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0NCj4gIDEgZmlsZSBjaGFuZ2VkLCA2MyBp bnNlcnRpb25zKCspLCA3MSBkZWxldGlvbnMoLSkNCj4gDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L25ldC9pNDBlL2k0MGVfZXRoZGV2LmMgYi9kcml2ZXJzL25ldC9pNDBlL2k0MGVfZXRoZGV2LmMN Cj4gaW5kZXggMzkzYjUzMjBmLi5lNTY1NDMzOTMgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvbmV0 L2k0MGUvaTQwZV9ldGhkZXYuYw0KPiArKysgYi9kcml2ZXJzL25ldC9pNDBlL2k0MGVfZXRoZGV2 LmMNCj4gQEAgLTEzMDcwLDYgKzEzMDcwLDU1IEBAIGk0MGVfcnNzX2NvbmZfaW5pdChzdHJ1Y3Qg aTQwZV9ydGVfZmxvd19yc3NfY29uZg0KPiAqb3V0LA0KPiAgCXJldHVybiAwOw0KPiAgfQ0KPiAN Cj4gKy8qIElmIGNvbmYgaXMgTlVMTCwgZnVuY3Rpb24gd2lsbCBpbml0IGhhc2ggTFVUIHdpdGgg ZGVmYXVsdA0KPiArY29uZmlncmF0aW9uKi8gc3RhdGljIGludCBpNDBlX3Jzc19zZXRfbHV0KHN0 cnVjdCBpNDBlX3BmICpwZiwNCj4gKwkJIHN0cnVjdCBpNDBlX3J0ZV9mbG93X3Jzc19jb25mICpj b25mKSB7DQo+ICsJc3RydWN0IGk0MGVfaHcgKmh3ID0gSTQwRV9QRl9UT19IVyhwZik7DQo+ICsJ dWludDMyX3QgbHV0ID0gMDsNCj4gKwl1aW50MTZfdCBqLCBudW07DQo+ICsJdWludDMyX3QgaTsN Cj4gKw0KPiArCS8qIElmIGJvdGggVk1EUSBhbmQgUlNTIGVuYWJsZWQsIG5vdCBhbGwgb2YgUEYg cXVldWVzIGFyZSBjb25maWd1cmVkLg0KPiArCSAqIEl0J3MgbmVjZXNzYXJ5IHRvIGNhbGN1bGF0 ZSB0aGUgYWN0dWFsIFBGIHF1ZXVlcyB0aGF0IGFyZSBjb25maWd1cmVkLg0KPiArCSAqLw0KPiAr CWlmIChwZi0+ZGV2X2RhdGEtPmRldl9jb25mLnJ4bW9kZS5tcV9tb2RlICYNCj4gRVRIX01RX1JY X1ZNRFFfRkxBRykNCj4gKwkJbnVtID0gaTQwZV9wZl9jYWxjX2NvbmZpZ3VyZWRfcXVldWVzX251 bShwZik7DQo+ICsJZWxzZQ0KPiArCQludW0gPSBwZi0+ZGV2X2RhdGEtPm5iX3J4X3F1ZXVlczsN Cj4gKw0KPiArCWlmIChjb25mID09IE5VTEwpDQo+ICsJCW51bSA9IFJURV9NSU4obnVtLCBJNDBF X01BWF9RX1BFUl9UQyk7DQo+ICsJZWxzZQ0KPiArCQludW0gPSBSVEVfTUlOKG51bSwgY29uZi0+ Y29uZi5xdWV1ZV9udW0pOw0KPiArCVBNRF9EUlZfTE9HKElORk8sICJNYXggb2YgY29udGlndW91 cyAldSBQRiBxdWV1ZXMgYXJlIGNvbmZpZ3VyZWQiLA0KPiArCQkJbnVtKTsNCj4gKw0KPiArCWlm IChudW0gPT0gMCkgew0KPiArCQlQTURfRFJWX0xPRyhFUlIsDQo+ICsJCQkiTm8gUEYgcXVldWVz IGFyZSBjb25maWd1cmVkIHRvIGVuYWJsZSBSU1MgZm9yIHBvcnQgJXUiLA0KPiArCQkJcGYtPmRl dl9kYXRhLT5wb3J0X2lkKTsNCj4gKwkJcmV0dXJuIC1FTk9UU1VQOw0KPiArCX0NCj4gKw0KPiAr CS8qIEZpbGwgaW4gcmVkaXJlY3Rpb24gdGFibGUgKi8NCj4gKwlmb3IgKGkgPSAwLCBqID0gMDsg aSA8IGh3LT5mdW5jX2NhcHMucnNzX3RhYmxlX3NpemU7IGkrKywgaisrKSB7DQo+ICsJCWlmIChq ID09IG51bSkNCj4gKwkJCWogPSAwOw0KPiArCQlpZiAoY29uZiA9PSBOVUxMKQ0KPiArCQkJbHV0 ID0gKGx1dCA8PCA4KSB8IChqICYgKCgweDEgPDwNCj4gKwkJCQlody0+ZnVuY19jYXBzLnJzc190 YWJsZV9lbnRyeV93aWR0aCkgLSAxKSk7DQo+ICsJCWVsc2UNCj4gKwkJCWx1dCA9IChsdXQgPDwg OCkgfCAoY29uZi0+Y29uZi5xdWV1ZVtqXSAmICgoMHgxIDw8DQo+ICsJCQlody0+ZnVuY19jYXBz LnJzc190YWJsZV9lbnRyeV93aWR0aCkgLSAxKSk7DQo+ICsJCWlmICgoaSAmIDMpID09IDMpDQo+ ICsJCQlJNDBFX1dSSVRFX1JFRyhodywgSTQwRV9QRlFGX0hMVVQoaSA+PiAyKSwgbHV0KTsNCj4g Kwl9DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiAgLyogV3JpdGUgSEVOQSByZWdp c3RlciB0byBlbmFibGUgaGFzaCAqLyAgc3RhdGljIGludA0KPiBpNDBlX3Jzc19oYXNoX3NldChz dHJ1Y3QgaTQwZV9wZiAqcGYsIHN0cnVjdCBpNDBlX3J0ZV9mbG93X3Jzc19jb25mICpyc3NfY29u ZikNCj4gQEAgLTEzMzE4LDEyICsxMzM2NywyNCBAQCBzdGF0aWMgaW50ICBpNDBlX3Jzc19lbmFi bGVfaGFzaChzdHJ1Y3QgaTQwZV9wZg0KPiAqcGYsDQo+ICAJCXN0cnVjdCBpNDBlX3J0ZV9mbG93 X3Jzc19jb25mICpjb25mKQ0KPiAgew0KPiArCWVudW0gcnRlX2V0aF9yeF9tcV9tb2RlIG1xX21v ZGUgPQ0KPiArcGYtPmRldl9kYXRhLT5kZXZfY29uZi5yeG1vZGUubXFfbW9kZTsNCj4gIAlzdHJ1 Y3QgaTQwZV9ydGVfZmxvd19yc3NfY29uZiAqcnNzX2luZm8gPSAmcGYtPnJzc19pbmZvOw0KPiAg CXN0cnVjdCBpNDBlX3J0ZV9mbG93X3Jzc19jb25mIHJzc19jb25mOw0KPiArCWludCByZXQ7DQo+ IA0KPiAgCWlmICghKGNvbmYtPmNvbmYudHlwZXMgJiBwZi0+YWRhcHRlci0+Zmxvd190eXBlc19t YXNrKSkNCj4gIAkJcmV0dXJuIC1FTk9UU1VQOw0KPiANCj4gKwkvKiBJZiB0aGUgUlNTIGlzIGRp c2FibGVkIGJlZm9yZSB0aGlzLCB0aGUgTFVUIGlzIHVuaW5pdGlhbGl6ZWQuDQo+ICsJICogU28g aXQgaXMgbmVjZXNzYXJ5IHRvIGluaXRpYWxpemUgaXQgaGVyZS4NCj4gKwkgKi8NCj4gKwlpZiAo IShtcV9tb2RlICYgRVRIX01RX1JYX1JTU19GTEFHKQ0KPiAmJiAhcGYtPnJzc19pbmZvLmNvbmYu cXVldWVfbnVtICYmDQo+ICsJICAgICFwZi0+YWRhcHRlci0+cnNzX3JldGFfdXBkYXRlZCkgew0K PiArCQlyZXQgPSBpNDBlX3Jzc19zZXRfbHV0KHBmLCBOVUxMKTsNCj4gKwkJaWYgKHJldCkNCj4g KwkJCXJldHVybiByZXQ7DQo+ICsJfQ0KPiArDQo+ICAJbWVtc2V0KCZyc3NfY29uZiwgMCwgc2l6 ZW9mKHJzc19jb25mKSk7DQo+ICAJcnRlX21lbWNweSgmcnNzX2NvbmYsIGNvbmYsIHNpemVvZihy c3NfY29uZikpOw0KPiANCj4gQEAgLTEzMzYyLDM5ICsxMzQyMyw3IEBAIHN0YXRpYyBpbnQNCj4g IGk0MGVfcnNzX2NvbmZpZ19xdWV1ZV9yZWdpb24oc3RydWN0IGk0MGVfcGYgKnBmLA0KPiAgCQlz dHJ1Y3QgaTQwZV9ydGVfZmxvd19yc3NfY29uZiAqY29uZikNCj4gIHsNCj4gLQlzdHJ1Y3QgaTQw ZV9odyAqaHcgPSBJNDBFX1BGX1RPX0hXKHBmKTsNCj4gLQl1aW50MzJfdCBsdXQgPSAwOw0KPiAt CXVpbnQxNl90IGosIG51bTsNCj4gLQl1aW50MzJfdCBpOw0KPiAtDQo+IC0JLyogSWYgYm90aCBW TURRIGFuZCBSU1MgZW5hYmxlZCwgbm90IGFsbCBvZiBQRiBxdWV1ZXMgYXJlIGNvbmZpZ3VyZWQu DQo+IC0JICogSXQncyBuZWNlc3NhcnkgdG8gY2FsY3VsYXRlIHRoZSBhY3R1YWwgUEYgcXVldWVz IHRoYXQgYXJlIGNvbmZpZ3VyZWQuDQo+IC0JICovDQo+IC0JaWYgKHBmLT5kZXZfZGF0YS0+ZGV2 X2NvbmYucnhtb2RlLm1xX21vZGUgJg0KPiBFVEhfTVFfUlhfVk1EUV9GTEFHKQ0KPiAtCQludW0g PSBpNDBlX3BmX2NhbGNfY29uZmlndXJlZF9xdWV1ZXNfbnVtKHBmKTsNCj4gLQllbHNlDQo+IC0J CW51bSA9IHBmLT5kZXZfZGF0YS0+bmJfcnhfcXVldWVzOw0KPiAtDQo+IC0JbnVtID0gUlRFX01J TihudW0sIGNvbmYtPmNvbmYucXVldWVfbnVtKTsNCj4gLQlQTURfRFJWX0xPRyhJTkZPLCAiTWF4 IG9mIGNvbnRpZ3VvdXMgJXUgUEYgcXVldWVzIGFyZSBjb25maWd1cmVkIiwNCj4gLQkJCW51bSk7 DQo+IC0NCj4gLQlpZiAobnVtID09IDApIHsNCj4gLQkJUE1EX0RSVl9MT0coRVJSLA0KPiAtCQkJ Ik5vIFBGIHF1ZXVlcyBhcmUgY29uZmlndXJlZCB0byBlbmFibGUgUlNTIGZvciBwb3J0ICV1IiwN Cj4gLQkJCXBmLT5kZXZfZGF0YS0+cG9ydF9pZCk7DQo+IC0JCXJldHVybiAtRU5PVFNVUDsNCj4g LQl9DQo+IC0NCj4gLQkvKiBGaWxsIGluIHJlZGlyZWN0aW9uIHRhYmxlICovDQo+IC0JZm9yIChp ID0gMCwgaiA9IDA7IGkgPCBody0+ZnVuY19jYXBzLnJzc190YWJsZV9zaXplOyBpKyssIGorKykg ew0KPiAtCQlpZiAoaiA9PSBudW0pDQo+IC0JCQlqID0gMDsNCj4gLQkJbHV0ID0gKGx1dCA8PCA4 KSB8IChjb25mLT5jb25mLnF1ZXVlW2pdICYgKCgweDEgPDwNCj4gLQkJCWh3LT5mdW5jX2NhcHMu cnNzX3RhYmxlX2VudHJ5X3dpZHRoKSAtIDEpKTsNCj4gLQkJaWYgKChpICYgMykgPT0gMykNCj4g LQkJCUk0MEVfV1JJVEVfUkVHKGh3LCBJNDBFX1BGUUZfSExVVChpID4+IDIpLCBsdXQpOw0KPiAt CX0NCj4gKwlpNDBlX3Jzc19zZXRfbHV0KHBmLCBjb25mKTsNCj4gDQo+ICAJaTQwZV9yc3NfbWFy a19pbnZhbGlkX3J1bGUocGYsIGNvbmYpOw0KPiANCj4gQEAgLTEzNDkxLDQ2ICsxMzUyMCw5IEBA IGk0MGVfcnNzX2Rpc2FibGVfaGFzaChzdHJ1Y3QgaTQwZV9wZiAqcGYsICBzdGF0aWMNCj4gaW50 ICBpNDBlX3Jzc19jbGVhcl9xdWV1ZV9yZWdpb24oc3RydWN0IGk0MGVfcGYgKnBmKSAgew0KPiAt CXN0cnVjdCBpNDBlX2h3ICpodyA9IEk0MEVfUEZfVE9fSFcocGYpOw0KPiAgCXN0cnVjdCBpNDBl X3J0ZV9mbG93X3Jzc19jb25mICpyc3NfaW5mbyA9ICZwZi0+cnNzX2luZm87DQo+IC0JdWludDE2 X3QgcXVldWVbSTQwRV9NQVhfUV9QRVJfVENdOw0KPiAtCXVpbnQzMl90IG51bV9yeHEsIGk7DQo+ IC0JdWludDMyX3QgbHV0ID0gMDsNCj4gLQl1aW50MTZfdCBqLCBudW07DQo+IC0NCj4gLQludW1f cnhxID0gUlRFX01JTihwZi0+ZGV2X2RhdGEtPm5iX3J4X3F1ZXVlcywNCj4gSTQwRV9NQVhfUV9Q RVJfVEMpOw0KPiANCj4gLQlmb3IgKGogPSAwOyBqIDwgbnVtX3J4cTsgaisrKQ0KPiAtCQlxdWV1 ZVtqXSA9IGo7DQo+IC0NCj4gLQkvKiBJZiBib3RoIFZNRFEgYW5kIFJTUyBlbmFibGVkLCBub3Qg YWxsIG9mIFBGIHF1ZXVlcyBhcmUgY29uZmlndXJlZC4NCj4gLQkgKiBJdCdzIG5lY2Vzc2FyeSB0 byBjYWxjdWxhdGUgdGhlIGFjdHVhbCBQRiBxdWV1ZXMgdGhhdCBhcmUgY29uZmlndXJlZC4NCj4g LQkgKi8NCj4gLQlpZiAocGYtPmRldl9kYXRhLT5kZXZfY29uZi5yeG1vZGUubXFfbW9kZSAmDQo+ IEVUSF9NUV9SWF9WTURRX0ZMQUcpDQo+IC0JCW51bSA9IGk0MGVfcGZfY2FsY19jb25maWd1cmVk X3F1ZXVlc19udW0ocGYpOw0KPiAtCWVsc2UNCj4gLQkJbnVtID0gcGYtPmRldl9kYXRhLT5uYl9y eF9xdWV1ZXM7DQo+IC0NCj4gLQludW0gPSBSVEVfTUlOKG51bSwgbnVtX3J4cSk7DQo+IC0JUE1E X0RSVl9MT0coSU5GTywgIk1heCBvZiBjb250aWd1b3VzICV1IFBGIHF1ZXVlcyBhcmUgY29uZmln dXJlZCIsDQo+IC0JCQludW0pOw0KPiAtDQo+IC0JaWYgKG51bSA9PSAwKSB7DQo+IC0JCVBNRF9E UlZfTE9HKEVSUiwNCj4gLQkJCSJObyBQRiBxdWV1ZXMgYXJlIGNvbmZpZ3VyZWQgdG8gZW5hYmxl IFJTUyBmb3IgcG9ydCAldSIsDQo+IC0JCQlwZi0+ZGV2X2RhdGEtPnBvcnRfaWQpOw0KPiAtCQly ZXR1cm4gLUVOT1RTVVA7DQo+IC0JfQ0KPiAtDQo+IC0JLyogRmlsbCBpbiByZWRpcmVjdGlvbiB0 YWJsZSAqLw0KPiAtCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgaHctPmZ1bmNfY2Fwcy5yc3NfdGFi bGVfc2l6ZTsgaSsrLCBqKyspIHsNCj4gLQkJaWYgKGogPT0gbnVtKQ0KPiAtCQkJaiA9IDA7DQo+ IC0JCWx1dCA9IChsdXQgPDwgOCkgfCAocXVldWVbal0gJiAoKDB4MSA8PA0KPiAtCQkJaHctPmZ1 bmNfY2Fwcy5yc3NfdGFibGVfZW50cnlfd2lkdGgpIC0gMSkpOw0KPiAtCQlpZiAoKGkgJiAzKSA9 PSAzKQ0KPiAtCQkJSTQwRV9XUklURV9SRUcoaHcsIEk0MEVfUEZRRl9ITFVUKGkgPj4gMiksIGx1 dCk7DQo+IC0JfQ0KPiArCWk0MGVfcnNzX3NldF9sdXQocGYsIE5VTEwpOw0KPiANCj4gIAlyc3Nf aW5mby0+Y29uZi5xdWV1ZV9udW0gPSAwOw0KPiAgCW1lbXNldCgmcnNzX2luZm8tPmNvbmYucXVl dWUsIDAsIHNpemVvZih1aW50MTZfdCkpOw0KPiAtLQ0KPiAyLjE3LjENCg0K