From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Xueming(Steven) Li" Subject: Re: [PATCH v2 04/15] net/mlx5: support Rx tunnel type identification Date: Wed, 11 Apr 2018 08:11:50 +0000 Message-ID: References: <20180410133415.189905-1-xuemingl@mellanox.com> <20180410133415.189905-5-xuemingl@mellanox.com> <20180410151711.zlxxkzycknrtlwhr@laranjeiro-vm.dev.6wind.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: Shahaf Shuler , "dev@dpdk.org" To: =?utf-8?B?TsOpbGlvIExhcmFuamVpcm8=?= Return-path: Received: from EUR02-AM5-obe.outbound.protection.outlook.com (mail-eopbgr00052.outbound.protection.outlook.com [40.107.0.52]) by dpdk.org (Postfix) with ESMTP id 11D1F1B8AB for ; Wed, 11 Apr 2018 10:11:53 +0200 (CEST) In-Reply-To: <20180410151711.zlxxkzycknrtlwhr@laranjeiro-vm.dev.6wind.com> Content-Language: en-US List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" SGkgTmVsaW8sDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogTsOpbGlv IExhcmFuamVpcm8gPG5lbGlvLmxhcmFuamVpcm9ANndpbmQuY29tPg0KPiBTZW50OiBUdWVzZGF5 LCBBcHJpbCAxMCwgMjAxOCAxMToxNyBQTQ0KPiBUbzogWHVlbWluZyhTdGV2ZW4pIExpIDx4dWVt aW5nbEBtZWxsYW5veC5jb20+DQo+IENjOiBTaGFoYWYgU2h1bGVyIDxzaGFoYWZzQG1lbGxhbm94 LmNvbT47IGRldkBkcGRrLm9yZw0KPiBTdWJqZWN0OiBSZTogW1BBVENIIHYyIDA0LzE1XSBuZXQv bWx4NTogc3VwcG9ydCBSeCB0dW5uZWwgdHlwZQ0KPiBpZGVudGlmaWNhdGlvbg0KPiANCj4gT24g VHVlLCBBcHIgMTAsIDIwMTggYXQgMDk6MzQ6MDRQTSArMDgwMCwgWHVlbWluZyBMaSB3cm90ZToN Cj4gPiBUaGlzIHBhdGNoIGludHJvZHVjZWQgdHVubmVsIHR5cGUgaWRlbnRpZmljYXRpb24gYmFz ZWQgb24gZmxvdyBydWxlcy4NCj4gPiBJZiBmbG93cyBvZiBtdWx0aXBsZSB0dW5uZWwgdHlwZXMg YnVpbHQgb24gc2FtZSBxdWV1ZSwNCj4gPiBSVEVfUFRZUEVfVFVOTkVMX01BU0sgd2lsbCBiZSBy ZXR1cm5lZCwgYml0cyBpbiBmbG93IG1hcmsgY291bGQgYmUNCj4gPiB1c2VkIGFzIHR1bm5lbCB0 eXBlIGlkZW50aWZpZXIuDQo+IA0KPiBJIGRvbid0IHNlZSBhbnl3aGVyZSBpbiB0aGlzIHBhdGNo IHdoZXJlIHRoZSBiaXRzIGFyZSByZXNlcnZlZCB0byBpZGVudGlmeQ0KPiBhIGZsb3csIG5vciB2 YWx1ZXMgd2hpY2ggY2FuIGhlbHAgdG8gaWRlbnRpZnkgaXQuDQo+IA0KPiBJcyB0aGlzIG1pc3Np bmc/DQo+IA0KPiBBbnl3YXkgd2UgaGF2ZSBhbHJlYWR5IHZlcnkgZmV3IGJpdHMgaW4gdGhlIG1h cmsgbWFraW5nIGl0IGRpZmZpY3VsdCB0byBiZQ0KPiB1c2VkIGJ5IHRoZSB1c2VyLCByZXNlcnZp bmcgYWdhaW4gc29tZSB0byBtYXkgbGVhZCB0byByZW1vdmUgdGhlIG1hcmsNCj4gc3VwcG9ydCBm cm9tIHRoZSBmbG93cy4NCg0KTm90IGFsbCB1c2VycyB3aWxsIHVzZSBtdWx0aXBsZSB0dW5uZWwg dHlwZXMsIHRoaXMgaXMgbm90IGluY2x1ZGVkIGluIHRoaXMgcGF0Y2gNCnNldCBhbmQgbGVmdCB0 byB1c2VyIGRlY2lzaW9uLiBJJ2xsIHVwZGF0ZSBjb21tZW50cyB0byBtYWtlIHRoaXMgY2xlYXIu DQoNCj4gDQo+ID4gU2lnbmVkLW9mZi1ieTogWHVlbWluZyBMaSA8eHVlbWluZ2xAbWVsbGFub3gu Y29tPg0KPiA+IC0tLQ0KPiA+ICBkcml2ZXJzL25ldC9tbHg1L21seDVfZmxvdy5jICAgICAgICAg IHwgMTI1DQo+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0NCj4gPiAgZHJpdmVy cy9uZXQvbWx4NS9tbHg1X3J4cS5jICAgICAgICAgICB8ICAxMSArKy0NCj4gPiAgZHJpdmVycy9u ZXQvbWx4NS9tbHg1X3J4dHguYyAgICAgICAgICB8ICAxMiArKy0tDQo+ID4gIGRyaXZlcnMvbmV0 L21seDUvbWx4NV9yeHR4LmggICAgICAgICAgfCAgIDkgKystDQo+ID4gIGRyaXZlcnMvbmV0L21s eDUvbWx4NV9yeHR4X3ZlY19uZW9uLmggfCAgMjEgKysrLS0tDQo+ID4gZHJpdmVycy9uZXQvbWx4 NS9tbHg1X3J4dHhfdmVjX3NzZS5oICB8ICAxNyArKystLQ0KPiA+ICA2IGZpbGVzIGNoYW5nZWQs IDE1NyBpbnNlcnRpb25zKCspLCAzOCBkZWxldGlvbnMoLSkNCj4gPg0KPiA+IGRpZmYgLS1naXQg YS9kcml2ZXJzL25ldC9tbHg1L21seDVfZmxvdy5jDQo+ID4gYi9kcml2ZXJzL25ldC9tbHg1L21s eDVfZmxvdy5jIGluZGV4IDg3MGQwNTI1MC4uNjVkN2E5YjYyIDEwMDY0NA0KPiA+IC0tLSBhL2Ry aXZlcnMvbmV0L21seDUvbWx4NV9mbG93LmMNCj4gPiArKysgYi9kcml2ZXJzL25ldC9tbHg1L21s eDVfZmxvdy5jDQo+ID4gQEAgLTIyMiw2ICsyMjIsNyBAQCBzdHJ1Y3QgcnRlX2Zsb3cgew0KPiA+ ICAJc3RydWN0IHJ0ZV9mbG93X2FjdGlvbl9yc3MgcnNzX2NvbmY7IC8qKjwgUlNTIGNvbmZpZ3Vy YXRpb24gKi8NCj4gPiAgCXVpbnQxNl90ICgqcXVldWVzKVtdOyAvKio8IFF1ZXVlcyBpbmRleGVz IHRvIHVzZS4gKi8NCj4gPiAgCXVpbnQ4X3QgcnNzX2tleVs0MF07IC8qKjwgY29weSBvZiB0aGUg UlNTIGtleS4gKi8NCj4gPiArCXVpbnQzMl90IHR1bm5lbDsgLyoqPCBUdW5uZWwgdHlwZSBvZiBS VEVfUFRZUEVfVFVOTkVMX1hYWC4gKi8NCj4gPiAgCXN0cnVjdCBpYnZfY291bnRlcl9zZXQgKmNz OyAvKio8IEhvbGRzIHRoZSBjb3VudGVycyBmb3IgdGhlIHJ1bGUuICovDQo+ID4gIAlzdHJ1Y3Qg bWx4NV9mbG93X2NvdW50ZXJfc3RhdHMgY291bnRlcl9zdGF0czsvKio8VGhlIGNvdW50ZXIgc3Rh dHMuDQo+ICovDQo+ID4gIAlzdHJ1Y3QgbWx4NV9mbG93IGZyeHFbUlRFX0RJTShoYXNoX3J4cV9p bml0KV07IEBAIC0yMzgsNiArMjM5LDE5IEBADQo+ID4gc3RydWN0IHJ0ZV9mbG93IHsNCj4gPiAg CSh0eXBlKSA9PSBSVEVfRkxPV19JVEVNX1RZUEVfVlhMQU4gfHwgXA0KPiA+ICAJKHR5cGUpID09 IFJURV9GTE9XX0lURU1fVFlQRV9HUkUpDQo+ID4NCj4gPiArY29uc3QgdWludDMyX3QgZmxvd19w dHlwZVtdID0gew0KPiA+ICsJW1JURV9GTE9XX0lURU1fVFlQRV9WWExBTl0gPSBSVEVfUFRZUEVf VFVOTkVMX1ZYTEFOLA0KPiA+ICsJW1JURV9GTE9XX0lURU1fVFlQRV9HUkVdID0gUlRFX1BUWVBF X1RVTk5FTF9HUkUsIH07DQo+ID4gKw0KPiA+ICsjZGVmaW5lIFBUWVBFX0lEWCh0KSAoKFJURV9Q VFlQRV9UVU5ORUxfTUFTSyAmICh0KSkgPj4gMTIpDQo+ID4gKw0KPiA+ICtjb25zdCB1aW50MzJf dCBwdHlwZV9leHRbXSA9IHsNCj4gPiArCVtQVFlQRV9JRFgoUlRFX1BUWVBFX1RVTk5FTF9WWExB TildID0gUlRFX1BUWVBFX1RVTk5FTF9WWExBTiB8DQo+ID4gKwkJCQkJICAgICAgUlRFX1BUWVBF X0w0X1VEUCwNCj4gPiArCVtQVFlQRV9JRFgoUlRFX1BUWVBFX1RVTk5FTF9HUkUpXSA9IFJURV9Q VFlQRV9UVU5ORUxfR1JFLCB9Ow0KPiA+ICsNCj4gPiAgLyoqIFN0cnVjdHVyZSB0byBnZW5lcmF0 ZSBhIHNpbXBsZSBncmFwaCBvZiBsYXllcnMgc3VwcG9ydGVkIGJ5IHRoZQ0KPiA+IE5JQy4gKi8g IHN0cnVjdCBtbHg1X2Zsb3dfaXRlbXMgew0KPiA+ICAJLyoqIExpc3Qgb2YgcG9zc2libGUgYWN0 aW9ucyBmb3IgdGhlc2UgaXRlbXMuICovIEBAIC00MzcsNiArNDUxLDcgQEANCj4gPiBzdHJ1Y3Qg bWx4NV9mbG93X3BhcnNlIHsNCj4gPiAgCXVpbnQxNl90IHF1ZXVlc1tSVEVfTUFYX1FVRVVFU19Q RVJfUE9SVF07IC8qKjwgUXVldWVzIGluZGV4ZXMgdG8gdXNlLg0KPiAqLw0KPiA+ICAJdWludDhf dCByc3Nfa2V5WzQwXTsgLyoqPCBjb3B5IG9mIHRoZSBSU1Mga2V5LiAqLw0KPiA+ICAJZW51bSBo YXNoX3J4cV90eXBlIGxheWVyOyAvKio8IExhc3QgcGF0dGVybiBsYXllciBkZXRlY3RlZC4gKi8N Cj4gPiArCXVpbnQzMl90IHR1bm5lbDsgLyoqPCBUdW5uZWwgdHlwZSBvZiBSVEVfUFRZUEVfVFVO TkVMX1hYWC4gKi8NCj4gPiAgCXN0cnVjdCBpYnZfY291bnRlcl9zZXQgKmNzOyAvKio8IEhvbGRz IHRoZSBjb3VudGVyIHNldCBmb3IgdGhlIHJ1bGUNCj4gKi8NCj4gPiAgCXN0cnVjdCB7DQo+ID4g IAkJc3RydWN0IGlidl9mbG93X2F0dHIgKmlidl9hdHRyOw0KPiA+IEBAIC04NjAsNyArODc1LDcg QEAgbWx4NV9mbG93X2NvbnZlcnRfaXRlbXNfdmFsaWRhdGUoY29uc3Qgc3RydWN0DQo+IHJ0ZV9m bG93X2l0ZW0gaXRlbXNbXSwNCj4gPiAgCQlpZiAocmV0KQ0KPiA+ICAJCQlnb3RvIGV4aXRfaXRl bV9ub3Rfc3VwcG9ydGVkOw0KPiA+ICAJCWlmIChJU19UVU5ORUwoaXRlbXMtPnR5cGUpKSB7DQo+ ID4gLQkJCWlmIChwYXJzZXItPmlubmVyKSB7DQo+ID4gKwkJCWlmIChwYXJzZXItPnR1bm5lbCkg ew0KPiA+ICAJCQkJcnRlX2Zsb3dfZXJyb3Jfc2V0KGVycm9yLCBFTk9UU1VQLA0KPiA+ICAJCQkJ CQkgICBSVEVfRkxPV19FUlJPUl9UWVBFX0lURU0sDQo+ID4gIAkJCQkJCSAgIGl0ZW1zLA0KPiA+ IEBAIC04NjksNiArODg0LDcgQEAgbWx4NV9mbG93X2NvbnZlcnRfaXRlbXNfdmFsaWRhdGUoY29u c3Qgc3RydWN0DQo+IHJ0ZV9mbG93X2l0ZW0gaXRlbXNbXSwNCj4gPiAgCQkJCXJldHVybiAtcnRl X2Vycm5vOw0KPiA+ICAJCQl9DQo+ID4gIAkJCXBhcnNlci0+aW5uZXIgPSBJQlZfRkxPV19TUEVD X0lOTkVSOw0KPiA+ICsJCQlwYXJzZXItPnR1bm5lbCA9IGZsb3dfcHR5cGVbaXRlbXMtPnR5cGVd Ow0KPiA+ICAJCX0NCj4gPiAgCQlpZiAocGFyc2VyLT5kcm9wKSB7DQo+ID4gIAkJCXBhcnNlci0+ cXVldWVbSEFTSF9SWFFfRVRIXS5vZmZzZXQgKz0gY3VyX2l0ZW0tPmRzdF9zejsNCj4gQEAgLTEx NjUsNg0KPiA+ICsxMTgxLDcgQEAgbWx4NV9mbG93X2NvbnZlcnQoc3RydWN0IHJ0ZV9ldGhfZGV2 ICpkZXYsDQo+ID4gIAl9DQo+ID4gIAkvKiBUaGlyZCBzdGVwLiBDb252ZXJzaW9uIHBhcnNlLCBm aWxsIHRoZSBzcGVjaWZpY2F0aW9ucy4gKi8NCj4gPiAgCXBhcnNlci0+aW5uZXIgPSAwOw0KPiA+ ICsJcGFyc2VyLT50dW5uZWwgPSAwOw0KPiA+ICAJZm9yICg7IGl0ZW1zLT50eXBlICE9IFJURV9G TE9XX0lURU1fVFlQRV9FTkQ7ICsraXRlbXMpIHsNCj4gPiAgCQlzdHJ1Y3QgbWx4NV9mbG93X2Rh dGEgZGF0YSA9IHsNCj4gPiAgCQkJLnBhcnNlciA9IHBhcnNlciwNCj4gPiBAQCAtMTYzMyw2ICsx NjUwLDcgQEAgbWx4NV9mbG93X2NyZWF0ZV92eGxhbihjb25zdCBzdHJ1Y3QNCj4gPiBydGVfZmxv d19pdGVtICppdGVtLA0KPiA+DQo+ID4gIAlpZC52bmlbMF0gPSAwOw0KPiA+ICAJcGFyc2VyLT5p bm5lciA9IElCVl9GTE9XX1NQRUNfSU5ORVI7DQo+ID4gKwlwYXJzZXItPnR1bm5lbCA9IHB0eXBl X2V4dFtQVFlQRV9JRFgoUlRFX1BUWVBFX1RVTk5FTF9WWExBTildOw0KPiA+ICAJaWYgKHNwZWMp IHsNCj4gPiAgCQlpZiAoIW1hc2spDQo+ID4gIAkJCW1hc2sgPSBkZWZhdWx0X21hc2s7DQo+ID4g QEAgLTE2ODYsNiArMTcwNCw3IEBAIG1seDVfZmxvd19jcmVhdGVfZ3JlKGNvbnN0IHN0cnVjdCBy dGVfZmxvd19pdGVtDQo+ICppdGVtIF9fcnRlX3VudXNlZCwNCj4gPiAgCX07DQo+ID4NCj4gPiAg CXBhcnNlci0+aW5uZXIgPSBJQlZfRkxPV19TUEVDX0lOTkVSOw0KPiA+ICsJcGFyc2VyLT50dW5u ZWwgPSBwdHlwZV9leHRbUFRZUEVfSURYKFJURV9QVFlQRV9UVU5ORUxfR1JFKV07DQo+ID4gIAlt bHg1X2Zsb3dfY3JlYXRlX2NvcHkocGFyc2VyLCAmdHVubmVsLCBzaXplKTsNCj4gPiAgCXJldHVy biAwOw0KPiA+ICB9DQo+ID4gQEAgLTE4NjQsNyArMTg4Myw4IEBAIG1seDVfZmxvd19jcmVhdGVf YWN0aW9uX3F1ZXVlX3JzcyhzdHJ1Y3QNCj4gcnRlX2V0aF9kZXYgKmRldiwNCj4gPiAgCQkJCSAg ICAgIHBhcnNlci0+cnNzX2NvbmYua2V5X2xlbiwNCj4gPiAgCQkJCSAgICAgIGhhc2hfZmllbGRz LA0KPiA+ICAJCQkJICAgICAgcGFyc2VyLT5yc3NfY29uZi5xdWV1ZSwNCj4gPiAtCQkJCSAgICAg IHBhcnNlci0+cnNzX2NvbmYucXVldWVfbnVtKTsNCj4gPiArCQkJCSAgICAgIHBhcnNlci0+cnNz X2NvbmYucXVldWVfbnVtLA0KPiA+ICsJCQkJICAgICAgcGFyc2VyLT50dW5uZWwpOw0KPiA+ICAJ CWlmIChmbG93LT5mcnhxW2ldLmhyeHEpDQo+ID4gIAkJCWNvbnRpbnVlOw0KPiA+ICAJCWZsb3ct PmZyeHFbaV0uaHJ4cSA9DQo+ID4gQEAgLTE4NzMsNyArMTg5Myw4IEBAIG1seDVfZmxvd19jcmVh dGVfYWN0aW9uX3F1ZXVlX3JzcyhzdHJ1Y3QNCj4gcnRlX2V0aF9kZXYgKmRldiwNCj4gPiAgCQkJ CSAgICAgIHBhcnNlci0+cnNzX2NvbmYua2V5X2xlbiwNCj4gPiAgCQkJCSAgICAgIGhhc2hfZmll bGRzLA0KPiA+ICAJCQkJICAgICAgcGFyc2VyLT5yc3NfY29uZi5xdWV1ZSwNCj4gPiAtCQkJCSAg ICAgIHBhcnNlci0+cnNzX2NvbmYucXVldWVfbnVtKTsNCj4gPiArCQkJCSAgICAgIHBhcnNlci0+ cnNzX2NvbmYucXVldWVfbnVtLA0KPiA+ICsJCQkJICAgICAgcGFyc2VyLT50dW5uZWwpOw0KPiA+ ICAJCWlmICghZmxvdy0+ZnJ4cVtpXS5ocnhxKSB7DQo+ID4gIAkJCXJldHVybiBydGVfZmxvd19l cnJvcl9zZXQoZXJyb3IsIEVOT01FTSwNCj4gPiAgCQkJCQkJICBSVEVfRkxPV19FUlJPUl9UWVBF X0hBTkRMRSwNCj4gPiBAQCAtMTg4NSw2ICsxOTA2LDQwIEBAIG1seDVfZmxvd19jcmVhdGVfYWN0 aW9uX3F1ZXVlX3JzcyhzdHJ1Y3QNCj4gPiBydGVfZXRoX2RldiAqZGV2LCAgfQ0KPiA+DQo+ID4g IC8qKg0KPiA+ICsgKiBSWFEgdXBkYXRlIGFmdGVyIGZsb3cgcnVsZSBjcmVhdGlvbi4NCj4gPiAr ICoNCj4gPiArICogQHBhcmFtIGRldg0KPiA+ICsgKiAgIFBvaW50ZXIgdG8gRXRoZXJuZXQgZGV2 aWNlLg0KPiA+ICsgKiBAcGFyYW0gZmxvdw0KPiA+ICsgKiAgIFBvaW50ZXIgdG8gdGhlIGZsb3cg cnVsZS4NCj4gPiArICovDQo+ID4gK3N0YXRpYyB2b2lkDQo+ID4gK21seDVfZmxvd19jcmVhdGVf dXBkYXRlX3J4cXMoc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXYsIHN0cnVjdCBydGVfZmxvdw0KPiA+ ICsqZmxvdykgew0KPiA+ICsJc3RydWN0IHByaXYgKnByaXYgPSBkZXYtPmRhdGEtPmRldl9wcml2 YXRlOw0KPiA+ICsJdW5zaWduZWQgaW50IGk7DQo+ID4gKw0KPiA+ICsJaWYgKCFkZXYtPmRhdGEt PmRldl9zdGFydGVkKQ0KPiA+ICsJCXJldHVybjsNCj4gPiArCWZvciAoaSA9IDA7IGkgIT0gZmxv dy0+cnNzX2NvbmYucXVldWVfbnVtOyArK2kpIHsNCj4gPiArCQlzdHJ1Y3QgbWx4NV9yeHFfZGF0 YSAqcnhxX2RhdGEgPSAoKnByaXYtPnJ4cXMpDQo+ID4gKwkJCQkJCSBbKCpmbG93LT5xdWV1ZXMp W2ldXTsNCj4gPiArCQlzdHJ1Y3QgbWx4NV9yeHFfY3RybCAqcnhxX2N0cmwgPQ0KPiA+ICsJCQlj b250YWluZXJfb2YocnhxX2RhdGEsIHN0cnVjdCBtbHg1X3J4cV9jdHJsLCByeHEpOw0KPiA+ICsJ CXVpbnQ4X3QgdHVubmVsID0gUFRZUEVfSURYKGZsb3ctPnR1bm5lbCk7DQo+ID4gKw0KPiA+ICsJ CXJ4cV9kYXRhLT5tYXJrIHw9IGZsb3ctPm1hcms7DQo+ID4gKwkJaWYgKCF0dW5uZWwpDQo+ID4g KwkJCWNvbnRpbnVlOw0KPiA+ICsJCXJ4cV9jdHJsLT50dW5uZWxfdHlwZXNbdHVubmVsXSArPSAx Ow0KPiANCj4gSSBkb24ndCB1bmRlcnN0YW5kIHdoeSB5b3UgbmVlZCBzdWNoIGFycmF5LCB0aGUg TklDIGlzIHVuYWJsZSB0byByZXR1cm4NCj4gdGhlIHR1bm5lbCB0eXBlIGhhcyBpdCByZXR1cm5z IG9ubHkgb25lIGJpdCBzYXlpbmcgdHVubmVsLg0KPiBXaHkgZG9uJ3QgaXQgc3RvcmUgaW4gdGhl IHByaXYgc3RydWN0dXJlIHRoZSBjdXJyZW50IGNvbmZpZ3VyZWQgdHVubmVsPw0KDQpUaGlzIGFy cmF5IGlzIHVzZWQgdG8gY291bnQgdHVubmVsIHR5cGVzIGJvdW5kIHRvIHF1ZXVlLCBpZiBvbmx5 IG9uZSB0dW5uZWwgdHlwZSwNCnB0eXBlIHdpbGwgcmVwb3J0IHRoYXQgdHVubmVsIHR5cGUsIFRV Tk5FTCBNQVNLKG1heCB2YWx1ZSkgd2lsbCBiZSByZXR1cm5lZCBpZiANCm11bHRpcGxlIHR5cGVz IGJvdW5kIHRvIGEgcXVldWUuDQoNCkZsb3cgcnNzIGFjdGlvbiBzcGVjaWZpZXMgcXVldWVzIHRo YXQgYmluZGluZyB0byB0dW5uZWwsIHRodXMgd2UgY2FuJ3QgYXNzdW1lDQphbGwgcXVldWVzIGhh dmUgc2FtZSB0dW5uZWwgdHlwZXMsIHNvIHRoaXMgaXMgYSBwZXIgcXVldWUgc3RydWN0dXJlLg0K DQoNCmhhdmUgDQoNCj4gDQo+ID4gKwkJaWYgKHJ4cV9kYXRhLT50dW5uZWwgIT0gZmxvdy0+dHVu bmVsKQ0KPiA+ICsJCQlyeHFfZGF0YS0+dHVubmVsID0gcnhxX2RhdGEtPnR1bm5lbCA/DQo+ID4g KwkJCQkJICAgUlRFX1BUWVBFX1RVTk5FTF9NQVNLIDoNCj4gPiArCQkJCQkgICBmbG93LT50dW5u ZWw7DQo+ID4gKwl9DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICAgKiBDb21wbGV0ZSBm bG93IHJ1bGUgY3JlYXRpb24uDQo+ID4gICAqDQo+ID4gICAqIEBwYXJhbSBkZXYNCj4gPiBAQCAt MTk0NCwxMiArMTk5OSw3IEBAIG1seDVfZmxvd19jcmVhdGVfYWN0aW9uX3F1ZXVlKHN0cnVjdCBy dGVfZXRoX2Rldg0KPiAqZGV2LA0KPiA+ICAJCQkJICAgTlVMTCwgImludGVybmFsIGVycm9yIGlu IGZsb3cgY3JlYXRpb24iKTsNCj4gPiAgCQlnb3RvIGVycm9yOw0KPiA+ICAJfQ0KPiA+IC0JZm9y IChpID0gMDsgaSAhPSBwYXJzZXItPnJzc19jb25mLnF1ZXVlX251bTsgKytpKSB7DQo+ID4gLQkJ c3RydWN0IG1seDVfcnhxX2RhdGEgKnEgPQ0KPiA+IC0JCQkoKnByaXYtPnJ4cXMpW3BhcnNlci0+ cnNzX2NvbmYucXVldWVbaV1dOw0KPiA+IC0NCj4gPiAtCQlxLT5tYXJrIHw9IHBhcnNlci0+bWFy azsNCj4gPiAtCX0NCj4gPiArCW1seDVfZmxvd19jcmVhdGVfdXBkYXRlX3J4cXMoZGV2LCBmbG93 KTsNCj4gPiAgCXJldHVybiAwOw0KPiA+ICBlcnJvcjoNCj4gPiAgCXJldCA9IHJ0ZV9lcnJubzsg LyogU2F2ZSBydGVfZXJybm8gYmVmb3JlIGNsZWFudXAuICovIEBAIC0yMDIyLDYNCj4gPiArMjA3 Miw3IEBAIG1seDVfZmxvd19saXN0X2NyZWF0ZShzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldiwNCj4g PiAgCX0NCj4gPiAgCS8qIENvcHkgY29uZmlndXJhdGlvbi4gKi8NCj4gPiAgCWZsb3ctPnF1ZXVl cyA9ICh1aW50MTZfdCAoKilbXSkoZmxvdyArIDEpOw0KPiA+ICsJZmxvdy0+dHVubmVsID0gcGFy c2VyLnR1bm5lbDsNCj4gPiAgCWZsb3ctPnJzc19jb25mID0gKHN0cnVjdCBydGVfZmxvd19hY3Rp b25fcnNzKXsNCj4gPiAgCQkuZnVuYyA9IFJURV9FVEhfSEFTSF9GVU5DVElPTl9ERUZBVUxULA0K PiA+ICAJCS5sZXZlbCA9IDAsDQo+ID4gQEAgLTIxMTMsOSArMjE2NCwzOCBAQCBtbHg1X2Zsb3df bGlzdF9kZXN0cm95KHN0cnVjdCBydGVfZXRoX2RldiAqZGV2LA0KPiBzdHJ1Y3QgbWx4NV9mbG93 cyAqbGlzdCwNCj4gPiAgCXN0cnVjdCBwcml2ICpwcml2ID0gZGV2LT5kYXRhLT5kZXZfcHJpdmF0 ZTsNCj4gPiAgCXVuc2lnbmVkIGludCBpOw0KPiA+DQo+ID4gLQlpZiAoZmxvdy0+ZHJvcCB8fCAh Zmxvdy0+bWFyaykNCj4gPiArCWlmIChmbG93LT5kcm9wIHx8ICFkZXYtPmRhdGEtPmRldl9zdGFy dGVkKQ0KPiA+ICAJCWdvdG8gZnJlZTsNCj4gPiAtCWZvciAoaSA9IDA7IGkgIT0gZmxvdy0+cnNz X2NvbmYucXVldWVfbnVtOyArK2kpIHsNCj4gPiArCWZvciAoaSA9IDA7IGZsb3ctPnR1bm5lbCAm JiBpICE9IGZsb3ctPnJzc19jb25mLnF1ZXVlX251bTsgKytpKSB7DQo+ID4gKwkJLyogVXBkYXRl IHF1ZXVlIHR1bm5lbCB0eXBlLiAqLw0KPiA+ICsJCXN0cnVjdCBtbHg1X3J4cV9kYXRhICpyeHFf ZGF0YSA9ICgqcHJpdi0+cnhxcykNCj4gPiArCQkJCQkJIFsoKmZsb3ctPnF1ZXVlcylbaV1dOw0K PiA+ICsJCXN0cnVjdCBtbHg1X3J4cV9jdHJsICpyeHFfY3RybCA9DQo+ID4gKwkJCWNvbnRhaW5l cl9vZihyeHFfZGF0YSwgc3RydWN0IG1seDVfcnhxX2N0cmwsIHJ4cSk7DQo+ID4gKwkJdWludDhf dCB0dW5uZWwgPSBQVFlQRV9JRFgoZmxvdy0+dHVubmVsKTsNCj4gPiArDQo+ID4gKwkJUlRFX0FT U0VSVChyeHFfY3RybC0+dHVubmVsX3R5cGVzW3R1bm5lbF0gPiAwKTsNCj4gDQo+IHVzZSBhc3Nl cnQoKSBub3QgUlRFX0FTU0VSVCgpIG9yIG1ha2UgYSBwYXRjaCB0byBtYWtlIHN1Y2ggbW92ZSBp biB0aGUNCj4gd2hvbGUgUE1ELg0KPiANCj4gPiArCQlyeHFfY3RybC0+dHVubmVsX3R5cGVzW3R1 bm5lbF0gLT0gMTsNCj4gPiArCQlpZiAoIXJ4cV9jdHJsLT50dW5uZWxfdHlwZXNbdHVubmVsXSkg ew0KPiA+ICsJCQkvKiBVcGRhdGUgdHVubmVsIHR5cGUuICovDQo+ID4gKwkJCXVpbnQ4X3QgajsN Cj4gPiArCQkJdWludDhfdCB0eXBlcyA9IDA7DQo+ID4gKwkJCXVpbnQ4X3QgbGFzdDsNCj4gPiAr DQo+ID4gKwkJCWZvciAoaiA9IDA7IGogPCBSVEVfRElNKHJ4cV9jdHJsLT50dW5uZWxfdHlwZXMp OyBqKyspDQo+ID4gKwkJCQlpZiAocnhxX2N0cmwtPnR1bm5lbF90eXBlc1tqXSkgew0KPiA+ICsJ CQkJCXR5cGVzICs9IDE7DQo+ID4gKwkJCQkJbGFzdCA9IGo7DQo+ID4gKwkJCQl9DQo+ID4gKwkJ CS8qIEtlZXAgc2FtZSBpZiBtb3JlIHRoYW4gb25lIHR1bm5lbCB0eXBlcyBsZWZ0LiAqLw0KPiA+ ICsJCQlpZiAodHlwZXMgPT0gMSkNCj4gPiArCQkJCXJ4cV9kYXRhLT50dW5uZWwgPSBwdHlwZV9l eHRbbGFzdF07DQo+ID4gKwkJCWVsc2UgaWYgKHR5cGVzID09IDApDQo+ID4gKwkJCQkvKiBObyB0 dW5uZWwgdHlwZSBsZWZ0LiAqLw0KPiA+ICsJCQkJcnhxX2RhdGEtPnR1bm5lbCA9IDA7DQo+ID4g KwkJfQ0KPiA+ICsJfQ0KPiA+ICsJZm9yIChpID0gMDsgZmxvdy0+bWFyayAmJiBpICE9IGZsb3ct PnJzc19jb25mLnF1ZXVlX251bTsgKytpKSB7DQo+ID4gIAkJc3RydWN0IHJ0ZV9mbG93ICp0bXA7 DQo+ID4gIAkJaW50IG1hcmsgPSAwOw0KPiA+DQo+ID4gQEAgLTIzMzQsOSArMjQxNCw5IEBAIG1s eDVfZmxvd19zdG9wKHN0cnVjdCBydGVfZXRoX2RldiAqZGV2LCBzdHJ1Y3QNCj4gPiBtbHg1X2Zs b3dzICpsaXN0KSAgew0KPiA+ICAJc3RydWN0IHByaXYgKnByaXYgPSBkZXYtPmRhdGEtPmRldl9w cml2YXRlOw0KPiA+ICAJc3RydWN0IHJ0ZV9mbG93ICpmbG93Ow0KPiA+ICsJdW5zaWduZWQgaW50 IGk7DQo+ID4NCj4gPiAgCVRBSUxRX0ZPUkVBQ0hfUkVWRVJTRShmbG93LCBsaXN0LCBtbHg1X2Zs b3dzLCBuZXh0KSB7DQo+ID4gLQkJdW5zaWduZWQgaW50IGk7DQo+ID4gIAkJc3RydWN0IG1seDVf aW5kX3RhYmxlX2lidiAqaW5kX3RibCA9IE5VTEw7DQo+ID4NCj4gPiAgCQlpZiAoZmxvdy0+ZHJv cCkgew0KPiA+IEBAIC0yMzgyLDYgKzI0NjIsMTYgQEAgbWx4NV9mbG93X3N0b3Aoc3RydWN0IHJ0 ZV9ldGhfZGV2ICpkZXYsIHN0cnVjdA0KPiBtbHg1X2Zsb3dzICpsaXN0KQ0KPiA+ICAJCURSVl9M T0coREVCVUcsICJwb3J0ICV1IGZsb3cgJXAgcmVtb3ZlZCIsIGRldi0+ZGF0YS0+cG9ydF9pZCwN Cj4gPiAgCQkJKHZvaWQgKilmbG93KTsNCj4gPiAgCX0NCj4gPiArCS8qIENsZWFudXAgUnggcXVl dWUgdHVubmVsIGluZm8uICovDQo+ID4gKwlmb3IgKGkgPSAwOyBpICE9IHByaXYtPnJ4cXNfbjsg KytpKSB7DQo+ID4gKwkJc3RydWN0IG1seDVfcnhxX2RhdGEgKnEgPSAoKnByaXYtPnJ4cXMpW2ld Ow0KPiA+ICsJCXN0cnVjdCBtbHg1X3J4cV9jdHJsICpyeHFfY3RybCA9DQo+ID4gKwkJCWNvbnRh aW5lcl9vZihxLCBzdHJ1Y3QgbWx4NV9yeHFfY3RybCwgcnhxKTsNCj4gPiArDQo+ID4gKwkJbWVt c2V0KCh2b2lkICopcnhxX2N0cmwtPnR1bm5lbF90eXBlcywgMCwNCj4gPiArCQkgICAgICAgc2l6 ZW9mKHJ4cV9jdHJsLT50dW5uZWxfdHlwZXMpKTsNCj4gPiArCQlxLT50dW5uZWwgPSAwOw0KPiA+ ICsJfQ0KPiA+ICB9DQo+IA0KPiBUaGlzIGh1bmsgZG9lcyBub3QgaGFuZGxlIHRoZSBmYWN0IHRo ZSBSeCBxdWV1ZSBhcnJheSBtYXkgaGF2ZSBzb21lIGhvbGVzDQo+IGkuZS4gdGhlIGFwcGxpY2F0 aW9uIGlzIGFsbG93ZWQgdG8gYXNrIGZvciAxMCBxdWV1ZXMgYW5kIG9ubHkgaW5pdGlhbGlzZQ0K PiBzb21lLiAgSW4gc3VjaCBzaXR1YXRpb24gdGhpcyBjb2RlIHdpbGwgc2VnZmF1bHQuDQoNCklu IG90aGVyIHdvcmRzLCAicSIgY291bGQgYmUgTlVMTCwgY29ycmVjdD8gSSdsbCBhZGQgY2hlY2sg Zm9yIHRoaXMuDQpCVFcsIHRoZXJlIHNob3VsZCBiZSBhbiBhY3Rpb24gaXRlbSB0byBhZGQgc3Vj aCBjaGVjayBpbiByc3MvcXVldWUgZmxvdyBjcmVhdGlvbi4NCg0KPiANCj4gSXQgc2hvdWxkIG9u bHkgbWVtc2V0IHRoZSBSeCBxdWV1ZXMgbWFraW5nIHBhcnQgb2YgdGhlIGZsb3cgbm90IHRoZSBv dGhlcnMuDQoNCkNsZWFuIHRoaXMoZGVjcmVhc2UgdHVubmVsX3R5cGVzIGNvdW50ZXIgb2YgZWFj aCBxdWV1ZSkgZnJvbSBlYWNoIGZsb3cgd291bGQgYmUgdGltZSANCmNvbnN1bWluZy4gSWYgYW4g ZXJyb3IgaGFwcGVuZWQsIGNvdW50ZXIgd2lsbCBub3QgYmUgY2xlYXJlZCBhbmQgc3VjaCBzdGF0 ZSANCndpbGwgaW1wYWN0IHR1bm5lbCB0eXBlIGFmdGVyIHBvcnQgc3RhcnQgYWdhaW4uDQoNCj4g DQo+ID4gIC8qKg0KPiA+IEBAIC0yNDI5LDcgKzI1MTksOCBAQCBtbHg1X2Zsb3dfc3RhcnQoc3Ry dWN0IHJ0ZV9ldGhfZGV2ICpkZXYsIHN0cnVjdA0KPiBtbHg1X2Zsb3dzICpsaXN0KQ0KPiA+ICAJ CQkJCSAgICAgIGZsb3ctPnJzc19jb25mLmtleV9sZW4sDQo+ID4gIAkJCQkJICAgICAgaGFzaF9y eHFfaW5pdFtpXS5oYXNoX2ZpZWxkcywNCj4gPiAgCQkJCQkgICAgICBmbG93LT5yc3NfY29uZi5x dWV1ZSwNCj4gPiAtCQkJCQkgICAgICBmbG93LT5yc3NfY29uZi5xdWV1ZV9udW0pOw0KPiA+ICsJ CQkJCSAgICAgIGZsb3ctPnJzc19jb25mLnF1ZXVlX251bSwNCj4gPiArCQkJCQkgICAgICBmbG93 LT50dW5uZWwpOw0KPiA+ICAJCQlpZiAoZmxvdy0+ZnJ4cVtpXS5ocnhxKQ0KPiA+ICAJCQkJZ290 byBmbG93X2NyZWF0ZTsNCj4gPiAgCQkJZmxvdy0+ZnJ4cVtpXS5ocnhxID0NCj4gPiBAQCAtMjQz Nyw3ICsyNTI4LDggQEAgbWx4NV9mbG93X3N0YXJ0KHN0cnVjdCBydGVfZXRoX2RldiAqZGV2LCBz dHJ1Y3QNCj4gbWx4NV9mbG93cyAqbGlzdCkNCj4gPiAgCQkJCQkgICAgICBmbG93LT5yc3NfY29u Zi5rZXlfbGVuLA0KPiA+ICAJCQkJCSAgICAgIGhhc2hfcnhxX2luaXRbaV0uaGFzaF9maWVsZHMs DQo+ID4gIAkJCQkJICAgICAgZmxvdy0+cnNzX2NvbmYucXVldWUsDQo+ID4gLQkJCQkJICAgICAg Zmxvdy0+cnNzX2NvbmYucXVldWVfbnVtKTsNCj4gPiArCQkJCQkgICAgICBmbG93LT5yc3NfY29u Zi5xdWV1ZV9udW0sDQo+ID4gKwkJCQkJICAgICAgZmxvdy0+dHVubmVsKTsNCj4gPiAgCQkJaWYg KCFmbG93LT5mcnhxW2ldLmhyeHEpIHsNCj4gPiAgCQkJCURSVl9MT0coREVCVUcsDQo+ID4gIAkJ CQkJInBvcnQgJXUgZmxvdyAlcCBjYW5ub3QgYmUgYXBwbGllZCIsIEBAIC0NCj4gMjQ1OSwxMCAr MjU1MSw3IEBADQo+ID4gbWx4NV9mbG93X3N0YXJ0KHN0cnVjdCBydGVfZXRoX2RldiAqZGV2LCBz dHJ1Y3QgbWx4NV9mbG93cyAqbGlzdCkNCj4gPiAgCQkJRFJWX0xPRyhERUJVRywgInBvcnQgJXUg ZmxvdyAlcCBhcHBsaWVkIiwNCj4gPiAgCQkJCWRldi0+ZGF0YS0+cG9ydF9pZCwgKHZvaWQgKilm bG93KTsNCj4gPiAgCQl9DQo+ID4gLQkJaWYgKCFmbG93LT5tYXJrKQ0KPiA+IC0JCQljb250aW51 ZTsNCj4gPiAtCQlmb3IgKGkgPSAwOyBpICE9IGZsb3ctPnJzc19jb25mLnF1ZXVlX251bTsgKytp KQ0KPiA+IC0JCQkoKnByaXYtPnJ4cXMpW2Zsb3ctPnJzc19jb25mLnF1ZXVlW2ldXS0+bWFyayA9 IDE7DQo+ID4gKwkJbWx4NV9mbG93X2NyZWF0ZV91cGRhdGVfcnhxcyhkZXYsIGZsb3cpOw0KPiA+ ICAJfQ0KPiA+ICAJcmV0dXJuIDA7DQo+ID4gIH0NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9u ZXQvbWx4NS9tbHg1X3J4cS5jIGIvZHJpdmVycy9uZXQvbWx4NS9tbHg1X3J4cS5jDQo+ID4gaW5k ZXggMWU0MzU0YWIzLi4zNTFhY2ZjMGYgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9uZXQvbWx4 NS9tbHg1X3J4cS5jDQo+ID4gKysrIGIvZHJpdmVycy9uZXQvbWx4NS9tbHg1X3J4cS5jDQo+ID4g QEAgLTEzODYsNiArMTM4Niw4IEBAIG1seDVfaW5kX3RhYmxlX2lidl92ZXJpZnkoc3RydWN0IHJ0 ZV9ldGhfZGV2ICpkZXYpDQo+ID4gICAqICAgZmlyc3QgcXVldWUgaW5kZXggd2lsbCBiZSB0YWtl biBmb3IgdGhlIGluZGlyZWN0aW9uIHRhYmxlLg0KPiA+ICAgKiBAcGFyYW0gcXVldWVzX24NCj4g PiAgICogICBOdW1iZXIgb2YgcXVldWVzLg0KPiA+ICsgKiBAcGFyYW0gdHVubmVsDQo+ID4gKyAq ICAgVHVubmVsIHR5cGUuDQo+ID4gICAqDQo+ID4gICAqIEByZXR1cm4NCj4gPiAgICogICBUaGUg VmVyYnMgb2JqZWN0IGluaXRpYWxpc2VkLCBOVUxMIG90aGVyd2lzZSBhbmQgcnRlX2Vycm5vIGlz IHNldC4NCj4gPiBAQCAtMTM5NCw3ICsxMzk2LDcgQEAgc3RydWN0IG1seDVfaHJ4cSAqICBtbHg1 X2hyeHFfbmV3KHN0cnVjdA0KPiA+IHJ0ZV9ldGhfZGV2ICpkZXYsDQo+ID4gIAkgICAgICBjb25z dCB1aW50OF90ICpyc3Nfa2V5LCB1aW50MzJfdCByc3Nfa2V5X2xlbiwNCj4gPiAgCSAgICAgIHVp bnQ2NF90IGhhc2hfZmllbGRzLA0KPiA+IC0JICAgICAgY29uc3QgdWludDE2X3QgKnF1ZXVlcywg dWludDMyX3QgcXVldWVzX24pDQo+ID4gKwkgICAgICBjb25zdCB1aW50MTZfdCAqcXVldWVzLCB1 aW50MzJfdCBxdWV1ZXNfbiwgdWludDMyX3QgdHVubmVsKQ0KPiA+ICB7DQo+ID4gIAlzdHJ1Y3Qg cHJpdiAqcHJpdiA9IGRldi0+ZGF0YS0+ZGV2X3ByaXZhdGU7DQo+ID4gIAlzdHJ1Y3QgbWx4NV9o cnhxICpocnhxOw0KPiA+IEBAIC0xNDM4LDYgKzE0NDAsNyBAQCBtbHg1X2hyeHFfbmV3KHN0cnVj dCBydGVfZXRoX2RldiAqZGV2LA0KPiA+ICAJaHJ4cS0+cXAgPSBxcDsNCj4gPiAgCWhyeHEtPnJz c19rZXlfbGVuID0gcnNzX2tleV9sZW47DQo+ID4gIAlocnhxLT5oYXNoX2ZpZWxkcyA9IGhhc2hf ZmllbGRzOw0KPiA+ICsJaHJ4cS0+dHVubmVsID0gdHVubmVsOw0KPiA+ICAJbWVtY3B5KGhyeHEt PnJzc19rZXksIHJzc19rZXksIHJzc19rZXlfbGVuKTsNCj4gPiAgCXJ0ZV9hdG9taWMzMl9pbmMo JmhyeHEtPnJlZmNudCk7DQo+ID4gIAlMSVNUX0lOU0VSVF9IRUFEKCZwcml2LT5ocnhxcywgaHJ4 cSwgbmV4dCk7IEBAIC0xNDY2LDYgKzE0NjksOCBAQA0KPiA+IG1seDVfaHJ4cV9uZXcoc3RydWN0 IHJ0ZV9ldGhfZGV2ICpkZXYsDQo+ID4gICAqICAgZmlyc3QgcXVldWUgaW5kZXggd2lsbCBiZSB0 YWtlbiBmb3IgdGhlIGluZGlyZWN0aW9uIHRhYmxlLg0KPiA+ICAgKiBAcGFyYW0gcXVldWVzX24N Cj4gPiAgICogICBOdW1iZXIgb2YgcXVldWVzLg0KPiA+ICsgKiBAcGFyYW0gdHVubmVsDQo+ID4g KyAqICAgVHVubmVsIHR5cGUuDQo+ID4gICAqDQo+ID4gICAqIEByZXR1cm4NCj4gPiAgICogICBB biBoYXNoIFJ4IHF1ZXVlIG9uIHN1Y2Nlc3MuDQo+ID4gQEAgLTE0NzQsNyArMTQ3OSw3IEBAIHN0 cnVjdCBtbHg1X2hyeHEgKiAgbWx4NV9ocnhxX2dldChzdHJ1Y3QNCj4gPiBydGVfZXRoX2RldiAq ZGV2LA0KPiA+ICAJICAgICAgY29uc3QgdWludDhfdCAqcnNzX2tleSwgdWludDMyX3QgcnNzX2tl eV9sZW4sDQo+ID4gIAkgICAgICB1aW50NjRfdCBoYXNoX2ZpZWxkcywNCj4gPiAtCSAgICAgIGNv bnN0IHVpbnQxNl90ICpxdWV1ZXMsIHVpbnQzMl90IHF1ZXVlc19uKQ0KPiA+ICsJICAgICAgY29u c3QgdWludDE2X3QgKnF1ZXVlcywgdWludDMyX3QgcXVldWVzX24sIHVpbnQzMl90IHR1bm5lbCkN Cj4gPiAgew0KPiA+ICAJc3RydWN0IHByaXYgKnByaXYgPSBkZXYtPmRhdGEtPmRldl9wcml2YXRl Ow0KPiA+ICAJc3RydWN0IG1seDVfaHJ4cSAqaHJ4cTsNCj4gPiBAQCAtMTQ4OSw2ICsxNDk0LDgg QEAgbWx4NV9ocnhxX2dldChzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldiwNCj4gPiAgCQkJY29udGlu dWU7DQo+ID4gIAkJaWYgKGhyeHEtPmhhc2hfZmllbGRzICE9IGhhc2hfZmllbGRzKQ0KPiA+ICAJ CQljb250aW51ZTsNCj4gPiArCQlpZiAoaHJ4cS0+dHVubmVsICE9IHR1bm5lbCkNCj4gPiArCQkJ Y29udGludWU7DQo+ID4gIAkJaW5kX3RibCA9IG1seDVfaW5kX3RhYmxlX2lidl9nZXQoZGV2LCBx dWV1ZXMsIHF1ZXVlc19uKTsNCj4gPiAgCQlpZiAoIWluZF90YmwpDQo+ID4gIAkJCWNvbnRpbnVl Ow0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg1L21seDVfcnh0eC5jDQo+ID4gYi9k cml2ZXJzL25ldC9tbHg1L21seDVfcnh0eC5jIGluZGV4IDFmNDIyYzcwYi4uZDA2MWRmYzhhIDEw MDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvbmV0L21seDUvbWx4NV9yeHR4LmMNCj4gPiArKysgYi9k cml2ZXJzL25ldC9tbHg1L21seDVfcnh0eC5jDQo+ID4gQEAgLTM0LDcgKzM0LDcgQEANCj4gPiAg I2luY2x1ZGUgIm1seDVfcHJtLmgiDQo+ID4NCj4gPiAgc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxp bmUgdWludDMyX3QNCj4gPiAtcnhxX2NxX3RvX3BrdF90eXBlKHZvbGF0aWxlIHN0cnVjdCBtbHg1 X2NxZSAqY3FlKTsNCj4gPiArcnhxX2NxX3RvX3BrdF90eXBlKHN0cnVjdCBtbHg1X3J4cV9kYXRh ICpyeHEsIHZvbGF0aWxlIHN0cnVjdA0KPiA+ICttbHg1X2NxZSAqY3FlKTsNCj4gPg0KPiA+ICBz dGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSBpbnQNCj4gPiAgbWx4NV9yeF9wb2xsX2xlbihzdHJ1 Y3QgbWx4NV9yeHFfZGF0YSAqcnhxLCB2b2xhdGlsZSBzdHJ1Y3QgbWx4NV9jcWUNCj4gPiAqY3Fl LCBAQCAtMTI1LDEyICsxMjUsMTQgQEAgbWx4NV9zZXRfcHR5cGVfdGFibGUodm9pZCkNCj4gPiAg CSgqcClbMHg4YV0gPSBSVEVfUFRZUEVfTDJfRVRIRVIgfCBSVEVfUFRZUEVfTDNfSVBWNF9FWFRf VU5LTk9XTiB8DQo+ID4gIAkJICAgICBSVEVfUFRZUEVfTDRfVURQOw0KPiA+ICAJLyogVHVubmVs ZWQgLSBMMyAqLw0KPiA+ICsJKCpwKVsweDQwXSA9IFJURV9QVFlQRV9MMl9FVEhFUiB8IFJURV9Q VFlQRV9MM19JUFY0X0VYVF9VTktOT1dOOw0KPiA+ICAJKCpwKVsweDQxXSA9IFJURV9QVFlQRV9M Ml9FVEhFUiB8IFJURV9QVFlQRV9MM19JUFY0X0VYVF9VTktOT1dOIHwNCj4gPiAgCQkgICAgIFJU RV9QVFlQRV9JTk5FUl9MM19JUFY2X0VYVF9VTktOT1dOIHwNCj4gPiAgCQkgICAgIFJURV9QVFlQ RV9JTk5FUl9MNF9OT05GUkFHOw0KPiA+ICAJKCpwKVsweDQyXSA9IFJURV9QVFlQRV9MMl9FVEhF UiB8IFJURV9QVFlQRV9MM19JUFY0X0VYVF9VTktOT1dOIHwNCj4gPiAgCQkgICAgIFJURV9QVFlQ RV9JTk5FUl9MM19JUFY0X0VYVF9VTktOT1dOIHwNCj4gPiAgCQkgICAgIFJURV9QVFlQRV9JTk5F Ul9MNF9OT05GUkFHOw0KPiA+ICsJKCpwKVsweGMwXSA9IFJURV9QVFlQRV9MMl9FVEhFUiB8IFJU RV9QVFlQRV9MM19JUFY2X0VYVF9VTktOT1dOOw0KPiA+ICAJKCpwKVsweGMxXSA9IFJURV9QVFlQ RV9MMl9FVEhFUiB8IFJURV9QVFlQRV9MM19JUFY2X0VYVF9VTktOT1dOIHwNCj4gPiAgCQkgICAg IFJURV9QVFlQRV9JTk5FUl9MM19JUFY2X0VYVF9VTktOT1dOIHwNCj4gPiAgCQkgICAgIFJURV9Q VFlQRV9JTk5FUl9MNF9OT05GUkFHOw0KPiA+IEBAIC0xNTc3LDYgKzE1NzksOCBAQCBtbHg1X3R4 X2J1cnN0X2VtcHcodm9pZCAqZHBka190eHEsIHN0cnVjdA0KPiA+IHJ0ZV9tYnVmICoqcGt0cywg dWludDE2X3QgcGt0c19uKQ0KPiA+ICAvKioNCj4gPiAgICogVHJhbnNsYXRlIFJYIGNvbXBsZXRp b24gZmxhZ3MgdG8gcGFja2V0IHR5cGUuDQo+ID4gICAqDQo+ID4gKyAqIEBwYXJhbVtpbl0gcnhx DQo+ID4gKyAqICAgUG9pbnRlciB0byBSWCBxdWV1ZSBzdHJ1Y3R1cmUuDQo+ID4gICAqIEBwYXJh bVtpbl0gY3FlDQo+ID4gICAqICAgUG9pbnRlciB0byBDUUUuDQo+ID4gICAqDQo+ID4gQEAgLTE1 ODYsNyArMTU5MCw3IEBAIG1seDVfdHhfYnVyc3RfZW1wdyh2b2lkICpkcGRrX3R4cSwgc3RydWN0 IHJ0ZV9tYnVmDQo+ICoqcGt0cywgdWludDE2X3QgcGt0c19uKQ0KPiA+ICAgKiAgIFBhY2tldCB0 eXBlIGZvciBzdHJ1Y3QgcnRlX21idWYuDQo+ID4gICAqLw0KPiA+ICBzdGF0aWMgaW5saW5lIHVp bnQzMl90DQo+ID4gLXJ4cV9jcV90b19wa3RfdHlwZSh2b2xhdGlsZSBzdHJ1Y3QgbWx4NV9jcWUg KmNxZSkNCj4gPiArcnhxX2NxX3RvX3BrdF90eXBlKHN0cnVjdCBtbHg1X3J4cV9kYXRhICpyeHEs IHZvbGF0aWxlIHN0cnVjdA0KPiA+ICttbHg1X2NxZSAqY3FlKQ0KPiA+ICB7DQo+ID4gIAl1aW50 OF90IGlkeDsNCj4gPiAgCXVpbnQ4X3QgcGluZm8gPSBjcWUtPnBrdF9pbmZvOw0KPiA+IEBAIC0x NjAxLDcgKzE2MDUsNyBAQCByeHFfY3FfdG9fcGt0X3R5cGUodm9sYXRpbGUgc3RydWN0IG1seDVf Y3FlICpjcWUpDQo+ID4gIAkgKiBiaXRbN10gPSBvdXRlcl9sM190eXBlDQo+ID4gIAkgKi8NCj4g PiAgCWlkeCA9ICgocGluZm8gJiAweDMpIDw8IDYpIHwgKChwdHlwZSAmIDB4ZmMwMCkgPj4gMTAp Ow0KPiA+IC0JcmV0dXJuIG1seDVfcHR5cGVfdGFibGVbaWR4XTsNCj4gPiArCXJldHVybiBtbHg1 X3B0eXBlX3RhYmxlW2lkeF0gfCByeHEtPnR1bm5lbCAqICEhKGlkeCAmICgxIDw8IDYpKTsNCj4g PiAgfQ0KPiA+DQo+ID4gIC8qKg0KPiA+IEBAIC0xODMzLDcgKzE4MzcsNyBAQCBtbHg1X3J4X2J1 cnN0KHZvaWQgKmRwZGtfcnhxLCBzdHJ1Y3QgcnRlX21idWYNCj4gKipwa3RzLCB1aW50MTZfdCBw a3RzX24pDQo+ID4gIAkJCXBrdCA9IHNlZzsNCj4gPiAgCQkJYXNzZXJ0KGxlbiA+PSAocnhxLT5j cmNfcHJlc2VudCA8PCAyKSk7DQo+ID4gIAkJCS8qIFVwZGF0ZSBwYWNrZXQgaW5mb3JtYXRpb24u ICovDQo+ID4gLQkJCXBrdC0+cGFja2V0X3R5cGUgPSByeHFfY3FfdG9fcGt0X3R5cGUoY3FlKTsN Cj4gPiArCQkJcGt0LT5wYWNrZXRfdHlwZSA9IHJ4cV9jcV90b19wa3RfdHlwZShyeHEsIGNxZSk7 DQo+ID4gIAkJCXBrdC0+b2xfZmxhZ3MgPSAwOw0KPiA+ICAJCQlpZiAocnNzX2hhc2hfcmVzICYm IHJ4cS0+cnNzX2hhc2gpIHsNCj4gPiAgCQkJCXBrdC0+aGFzaC5yc3MgPSByc3NfaGFzaF9yZXM7 DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDUvbWx4NV9yeHR4LmgNCj4gPiBiL2Ry aXZlcnMvbmV0L21seDUvbWx4NV9yeHR4LmggaW5kZXggYTcwMmNiNjAzLi42ODY2ZjY4MTggMTAw NjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9uZXQvbWx4NS9tbHg1X3J4dHguaA0KPiA+ICsrKyBiL2Ry aXZlcnMvbmV0L21seDUvbWx4NV9yeHR4LmgNCj4gPiBAQCAtMTA0LDYgKzEwNCw3IEBAIHN0cnVj dCBtbHg1X3J4cV9kYXRhIHsNCj4gPiAgCXZvaWQgKmNxX3VhcjsgLyogQ1EgdXNlciBhY2Nlc3Mg cmVnaW9uLiAqLw0KPiA+ICAJdWludDMyX3QgY3FuOyAvKiBDUSBudW1iZXIuICovDQo+ID4gIAl1 aW50OF90IGNxX2FybV9zbjsgLyogQ1EgYXJtIHNlcSBudW1iZXIuICovDQo+ID4gKwl1aW50MzJf dCB0dW5uZWw7IC8qIFR1bm5lbCBpbmZvcm1hdGlvbi4gKi8NCj4gPiAgfSBfX3J0ZV9jYWNoZV9h bGlnbmVkOw0KPiA+DQo+ID4gIC8qIFZlcmJzIFJ4IHF1ZXVlIGVsZW1lbnRzLiAqLw0KPiA+IEBA IC0xMjUsNiArMTI2LDcgQEAgc3RydWN0IG1seDVfcnhxX2N0cmwgew0KPiA+ICAJc3RydWN0IG1s eDVfcnhxX2lidiAqaWJ2OyAvKiBWZXJicyBlbGVtZW50cy4gKi8NCj4gPiAgCXN0cnVjdCBtbHg1 X3J4cV9kYXRhIHJ4cTsgLyogRGF0YSBwYXRoIHN0cnVjdHVyZS4gKi8NCj4gPiAgCXVuc2lnbmVk IGludCBzb2NrZXQ7IC8qIENQVSBzb2NrZXQgSUQgZm9yIGFsbG9jYXRpb25zLiAqLw0KPiA+ICsJ dWludDMyX3QgdHVubmVsX3R5cGVzWzE2XTsgLyogVHVubmVsIHR5cGUgY291bnRlci4gKi8NCj4g PiAgCXVuc2lnbmVkIGludCBpcnE6MTsgLyogV2hldGhlciBJUlEgaXMgZW5hYmxlZC4gKi8NCj4g PiAgCXVpbnQxNl90IGlkeDsgLyogUXVldWUgaW5kZXguICovDQo+ID4gIH07DQo+ID4gQEAgLTE0 NSw2ICsxNDcsNyBAQCBzdHJ1Y3QgbWx4NV9ocnhxIHsNCj4gPiAgCXN0cnVjdCBtbHg1X2luZF90 YWJsZV9pYnYgKmluZF90YWJsZTsgLyogSW5kaXJlY3Rpb24gdGFibGUuICovDQo+ID4gIAlzdHJ1 Y3QgaWJ2X3FwICpxcDsgLyogVmVyYnMgcXVldWUgcGFpci4gKi8NCj4gPiAgCXVpbnQ2NF90IGhh c2hfZmllbGRzOyAvKiBWZXJicyBIYXNoIGZpZWxkcy4gKi8NCj4gPiArCXVpbnQzMl90IHR1bm5l bDsgLyogVHVubmVsIHR5cGUuICovDQo+ID4gIAl1aW50MzJfdCByc3Nfa2V5X2xlbjsgLyogSGFz aCBrZXkgbGVuZ3RoIGluIGJ5dGVzLiAqLw0KPiA+ICAJdWludDhfdCByc3Nfa2V5W107IC8qIEhh c2gga2V5LiAqLw0KPiA+ICB9Ow0KPiA+IEBAIC0yNDgsMTEgKzI1MSwxMyBAQCBpbnQgbWx4NV9p bmRfdGFibGVfaWJ2X3ZlcmlmeShzdHJ1Y3QgcnRlX2V0aF9kZXYNCj4gPiAqZGV2KTsgIHN0cnVj dCBtbHg1X2hyeHEgKm1seDVfaHJ4cV9uZXcoc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXYsDQo+ID4g IAkJCQljb25zdCB1aW50OF90ICpyc3Nfa2V5LCB1aW50MzJfdCByc3Nfa2V5X2xlbiwNCj4gPiAg CQkJCXVpbnQ2NF90IGhhc2hfZmllbGRzLA0KPiA+IC0JCQkJY29uc3QgdWludDE2X3QgKnF1ZXVl cywgdWludDMyX3QgcXVldWVzX24pOw0KPiA+ICsJCQkJY29uc3QgdWludDE2X3QgKnF1ZXVlcywg dWludDMyX3QgcXVldWVzX24sDQo+ID4gKwkJCQl1aW50MzJfdCB0dW5uZWwpOw0KPiA+ICBzdHJ1 Y3QgbWx4NV9ocnhxICptbHg1X2hyeHFfZ2V0KHN0cnVjdCBydGVfZXRoX2RldiAqZGV2LA0KPiA+ ICAJCQkJY29uc3QgdWludDhfdCAqcnNzX2tleSwgdWludDMyX3QgcnNzX2tleV9sZW4sDQo+ID4g IAkJCQl1aW50NjRfdCBoYXNoX2ZpZWxkcywNCj4gPiAtCQkJCWNvbnN0IHVpbnQxNl90ICpxdWV1 ZXMsIHVpbnQzMl90IHF1ZXVlc19uKTsNCj4gPiArCQkJCWNvbnN0IHVpbnQxNl90ICpxdWV1ZXMs IHVpbnQzMl90IHF1ZXVlc19uLA0KPiA+ICsJCQkJdWludDMyX3QgdHVubmVsKTsNCj4gPiAgaW50 IG1seDVfaHJ4cV9yZWxlYXNlKHN0cnVjdCBydGVfZXRoX2RldiAqZGV2LCBzdHJ1Y3QgbWx4NV9o cnhxDQo+ID4gKmh4cnEpOyAgaW50IG1seDVfaHJ4cV9pYnZfdmVyaWZ5KHN0cnVjdCBydGVfZXRo X2RldiAqZGV2KTsgIHVpbnQ2NF90DQo+ID4gbWx4NV9nZXRfcnhfcG9ydF9vZmZsb2Fkcyh2b2lk KTsgZGlmZiAtLWdpdA0KPiA+IGEvZHJpdmVycy9uZXQvbWx4NS9tbHg1X3J4dHhfdmVjX25lb24u aA0KPiA+IGIvZHJpdmVycy9uZXQvbWx4NS9tbHg1X3J4dHhfdmVjX25lb24uaA0KPiA+IGluZGV4 IGJiZTE4MThlZi4uOWY5MTM2MTA4IDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvbmV0L21seDUv bWx4NV9yeHR4X3ZlY19uZW9uLmgNCj4gPiArKysgYi9kcml2ZXJzL25ldC9tbHg1L21seDVfcnh0 eF92ZWNfbmVvbi5oDQo+ID4gQEAgLTU1MSw2ICs1NTEsNyBAQCByeHFfY3FfdG9fcHR5cGVfb2Zs YWdzX3Yoc3RydWN0IG1seDVfcnhxX2RhdGEgKnJ4cSwNCj4gPiAgCWNvbnN0IHVpbnQ2NHgxX3Qg bWJ1Zl9pbml0ID0gdmxkMV91NjQoJnJ4cS0+bWJ1Zl9pbml0aWFsaXplcik7DQo+ID4gIAljb25z dCB1aW50NjR4MV90IHIzMl9tYXNrID0gdmNyZWF0ZV91NjQoMHhmZmZmZmZmZik7DQo+ID4gIAl1 aW50NjR4Ml90IHJlYXJtMCwgcmVhcm0xLCByZWFybTIsIHJlYXJtMzsNCj4gPiArCXVpbnQ4X3Qg cHRfaWR4MCwgcHRfaWR4MSwgcHRfaWR4MiwgcHRfaWR4MzsNCj4gPg0KPiA+ICAJaWYgKHJ4cS0+ bWFyaykgew0KPiA+ICAJCWNvbnN0IHVpbnQzMng0X3QgZnRfZGVmID0gdmR1cHFfbl91MzIoTUxY NV9GTE9XX01BUktfREVGQVVMVCk7DQo+ID4gQEAgLTU4MywxNCArNTg0LDE4IEBAIHJ4cV9jcV90 b19wdHlwZV9vZmxhZ3NfdihzdHJ1Y3QgbWx4NV9yeHFfZGF0YSAqcnhxLA0KPiA+ICAJcHR5cGUg PSB2c2hybl9uX3UzMihwdHlwZV9pbmZvLCAxMCk7DQo+ID4gIAkvKiBFcnJvcmVkIHBhY2tldHMg d2lsbCBoYXZlIFJURV9QVFlQRV9BTExfTUFTSy4gKi8NCj4gPiAgCXB0eXBlID0gdm9ycl91MTYo cHR5cGUsIG9wX2Vycik7DQo+ID4gLQlwa3RzWzBdLT5wYWNrZXRfdHlwZSA9DQo+ID4gLQkJbWx4 NV9wdHlwZV90YWJsZVt2Z2V0X2xhbmVfdTgodnJlaW50ZXJwcmV0X3U4X3UxNihwdHlwZSksIDYp XTsNCj4gPiAtCXBrdHNbMV0tPnBhY2tldF90eXBlID0NCj4gPiAtCQltbHg1X3B0eXBlX3RhYmxl W3ZnZXRfbGFuZV91OCh2cmVpbnRlcnByZXRfdThfdTE2KHB0eXBlKSwgNCldOw0KPiA+IC0JcGt0 c1syXS0+cGFja2V0X3R5cGUgPQ0KPiA+IC0JCW1seDVfcHR5cGVfdGFibGVbdmdldF9sYW5lX3U4 KHZyZWludGVycHJldF91OF91MTYocHR5cGUpLCAyKV07DQo+ID4gLQlwa3RzWzNdLT5wYWNrZXRf dHlwZSA9DQo+ID4gLQkJbWx4NV9wdHlwZV90YWJsZVt2Z2V0X2xhbmVfdTgodnJlaW50ZXJwcmV0 X3U4X3UxNihwdHlwZSksIDApXTsNCj4gPiArCXB0X2lkeDAgPSB2Z2V0X2xhbmVfdTgodnJlaW50 ZXJwcmV0X3U4X3UxNihwdHlwZSksIDYpOw0KPiA+ICsJcHRfaWR4MSA9IHZnZXRfbGFuZV91OCh2 cmVpbnRlcnByZXRfdThfdTE2KHB0eXBlKSwgNCk7DQo+ID4gKwlwdF9pZHgyID0gdmdldF9sYW5l X3U4KHZyZWludGVycHJldF91OF91MTYocHR5cGUpLCAyKTsNCj4gPiArCXB0X2lkeDMgPSB2Z2V0 X2xhbmVfdTgodnJlaW50ZXJwcmV0X3U4X3UxNihwdHlwZSksIDApOw0KPiA+ICsJcGt0c1swXS0+ cGFja2V0X3R5cGUgPSBtbHg1X3B0eXBlX3RhYmxlW3B0X2lkeDBdIHwNCj4gPiArCQkJICAgICAg ICEhKHB0X2lkeDAgJiAoMSA8PCA2KSkgKiByeHEtPnR1bm5lbDsNCj4gPiArCXBrdHNbMV0tPnBh Y2tldF90eXBlID0gbWx4NV9wdHlwZV90YWJsZVtwdF9pZHgxXSB8DQo+ID4gKwkJCSAgICAgICAh IShwdF9pZHgxICYgKDEgPDwgNikpICogcnhxLT50dW5uZWw7DQo+ID4gKwlwa3RzWzJdLT5wYWNr ZXRfdHlwZSA9IG1seDVfcHR5cGVfdGFibGVbcHRfaWR4Ml0gfA0KPiA+ICsJCQkgICAgICAgISEo cHRfaWR4MiAmICgxIDw8IDYpKSAqIHJ4cS0+dHVubmVsOw0KPiA+ICsJcGt0c1szXS0+cGFja2V0 X3R5cGUgPSBtbHg1X3B0eXBlX3RhYmxlW3B0X2lkeDNdIHwNCj4gPiArCQkJICAgICAgICEhKHB0 X2lkeDMgJiAoMSA8PCA2KSkgKiByeHEtPnR1bm5lbDsNCj4gPiAgCS8qIEZpbGwgZmxhZ3MgZm9y IGNoZWNrc3VtIGFuZCBWTEFOLiAqLw0KPiA+ICAJcGluZm8gPSB2YW5kcV91MzIocHR5cGVfaW5m bywgcHR5cGVfb2xfbWFzayk7DQo+ID4gIAlwaW5mbyA9IHZyZWludGVycHJldHFfdTMyX3U4KA0K PiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg1L21seDVfcnh0eF92ZWNfc3NlLmgNCj4g PiBiL2RyaXZlcnMvbmV0L21seDUvbWx4NV9yeHR4X3ZlY19zc2UuaA0KPiA+IGluZGV4IGMwODhi Y2I1MS4uZDI0OTI0ODFkIDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvbmV0L21seDUvbWx4NV9y eHR4X3ZlY19zc2UuaA0KPiA+ICsrKyBiL2RyaXZlcnMvbmV0L21seDUvbWx4NV9yeHR4X3ZlY19z c2UuaA0KPiA+IEBAIC01NDIsNiArNTQyLDcgQEAgcnhxX2NxX3RvX3B0eXBlX29mbGFnc192KHN0 cnVjdCBtbHg1X3J4cV9kYXRhICpyeHEsDQo+IF9fbTEyOGkgY3Flc1s0XSwNCj4gPiAgCWNvbnN0 IF9fbTEyOGkgbWJ1Zl9pbml0ID0NCj4gPiAgCQlfbW1fbG9hZGxfZXBpNjQoKF9fbTEyOGkgKikm cnhxLT5tYnVmX2luaXRpYWxpemVyKTsNCj4gPiAgCV9fbTEyOGkgcmVhcm0wLCByZWFybTEsIHJl YXJtMiwgcmVhcm0zOw0KPiA+ICsJdWludDhfdCBwdF9pZHgwLCBwdF9pZHgxLCBwdF9pZHgyLCBw dF9pZHgzOw0KPiA+DQo+ID4gIAkvKiBFeHRyYWN0IHBrdF9pbmZvIGZpZWxkLiAqLw0KPiA+ICAJ cGluZm8wID0gX21tX3VucGFja2xvX2VwaTMyKGNxZXNbMF0sIGNxZXNbMV0pOyBAQCAtNTk1LDEw ICs1OTYsMTggQEANCj4gPiByeHFfY3FfdG9fcHR5cGVfb2ZsYWdzX3Yoc3RydWN0IG1seDVfcnhx X2RhdGEgKnJ4cSwgX19tMTI4aSBjcWVzWzRdLA0KPiA+ICAJLyogRXJyb3JlZCBwYWNrZXRzIHdp bGwgaGF2ZSBSVEVfUFRZUEVfQUxMX01BU0suICovDQo+ID4gIAlvcF9lcnIgPSBfbW1fc3JsaV9l cGkxNihvcF9lcnIsIDgpOw0KPiA+ICAJcHR5cGUgPSBfbW1fb3Jfc2kxMjgocHR5cGUsIG9wX2Vy cik7DQo+ID4gLQlwa3RzWzBdLT5wYWNrZXRfdHlwZSA9IG1seDVfcHR5cGVfdGFibGVbX21tX2V4 dHJhY3RfZXBpOChwdHlwZSwgMCldOw0KPiA+IC0JcGt0c1sxXS0+cGFja2V0X3R5cGUgPSBtbHg1 X3B0eXBlX3RhYmxlW19tbV9leHRyYWN0X2VwaTgocHR5cGUsIDIpXTsNCj4gPiAtCXBrdHNbMl0t PnBhY2tldF90eXBlID0gbWx4NV9wdHlwZV90YWJsZVtfbW1fZXh0cmFjdF9lcGk4KHB0eXBlLCA0 KV07DQo+ID4gLQlwa3RzWzNdLT5wYWNrZXRfdHlwZSA9IG1seDVfcHR5cGVfdGFibGVbX21tX2V4 dHJhY3RfZXBpOChwdHlwZSwgNildOw0KPiA+ICsJcHRfaWR4MCA9IF9tbV9leHRyYWN0X2VwaTgo cHR5cGUsIDApOw0KPiA+ICsJcHRfaWR4MSA9IF9tbV9leHRyYWN0X2VwaTgocHR5cGUsIDIpOw0K PiA+ICsJcHRfaWR4MiA9IF9tbV9leHRyYWN0X2VwaTgocHR5cGUsIDQpOw0KPiA+ICsJcHRfaWR4 MyA9IF9tbV9leHRyYWN0X2VwaTgocHR5cGUsIDYpOw0KPiA+ICsJcGt0c1swXS0+cGFja2V0X3R5 cGUgPSBtbHg1X3B0eXBlX3RhYmxlW3B0X2lkeDBdIHwNCj4gPiArCQkJICAgICAgICEhKHB0X2lk eDAgJiAoMSA8PCA2KSkgKiByeHEtPnR1bm5lbDsNCj4gPiArCXBrdHNbMV0tPnBhY2tldF90eXBl ID0gbWx4NV9wdHlwZV90YWJsZVtwdF9pZHgxXSB8DQo+ID4gKwkJCSAgICAgICAhIShwdF9pZHgx ICYgKDEgPDwgNikpICogcnhxLT50dW5uZWw7DQo+ID4gKwlwa3RzWzJdLT5wYWNrZXRfdHlwZSA9 IG1seDVfcHR5cGVfdGFibGVbcHRfaWR4Ml0gfA0KPiA+ICsJCQkgICAgICAgISEocHRfaWR4MiAm ICgxIDw8IDYpKSAqIHJ4cS0+dHVubmVsOw0KPiA+ICsJcGt0c1szXS0+cGFja2V0X3R5cGUgPSBt bHg1X3B0eXBlX3RhYmxlW3B0X2lkeDNdIHwNCj4gPiArCQkJICAgICAgICEhKHB0X2lkeDMgJiAo MSA8PCA2KSkgKiByeHEtPnR1bm5lbDsNCj4gPiAgCS8qIEZpbGwgZmxhZ3MgZm9yIGNoZWNrc3Vt IGFuZCBWTEFOLiAqLw0KPiA+ICAJcGluZm8gPSBfbW1fYW5kX3NpMTI4KHBpbmZvLCBwdHlwZV9v bF9tYXNrKTsNCj4gPiAgCXBpbmZvID0gX21tX3NodWZmbGVfZXBpOChjdl9mbGFnX3NlbCwgcGlu Zm8pOw0KPiA+IC0tDQo+ID4gMi4xMy4zDQo+IA0KPiBSZWdhcmRzLA0KPiANCj4gLS0NCj4gTsOp bGlvIExhcmFuamVpcm8NCj4gNldJTkQNCg==