From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Xueming(Steven) Li" Subject: Re: [PATCH] net/mlx5: support metadata as flow rule criteria Date: Wed, 19 Sep 2018 07:21:47 +0000 Message-ID: References: <1537105328-9367-1-git-send-email-dekelp@mellanox.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: Ori Kam To: Dekel Peled , "dev@dpdk.org" , Shahaf Shuler , Yongseok Koh Return-path: Received: from EUR03-AM5-obe.outbound.protection.outlook.com (mail-eopbgr30067.outbound.protection.outlook.com [40.107.3.67]) by dpdk.org (Postfix) with ESMTP id 314EDF04 for ; Wed, 19 Sep 2018 09:21:50 +0200 (CEST) In-Reply-To: <1537105328-9367-1-git-send-email-dekelp@mellanox.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" DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogZGV2IDxkZXYtYm91bmNl c0BkcGRrLm9yZz4gT24gQmVoYWxmIE9mIERla2VsIFBlbGVkDQo+IFNlbnQ6IFN1bmRheSwgU2Vw dGVtYmVyIDE2LCAyMDE4IDk6NDIgUE0NCj4gVG86IGRldkBkcGRrLm9yZzsgU2hhaGFmIFNodWxl ciA8c2hhaGFmc0BtZWxsYW5veC5jb20+OyBZb25nc2VvayBLb2ggPHlza29oQG1lbGxhbm94LmNv bT4NCj4gQ2M6IE9yaSBLYW0gPG9yaWthQG1lbGxhbm94LmNvbT4NCj4gU3ViamVjdDogW2RwZGst ZGV2XSBbUEFUQ0hdIG5ldC9tbHg1OiBzdXBwb3J0IG1ldGFkYXRhIGFzIGZsb3cgcnVsZSBjcml0 ZXJpYQ0KPiANCj4gQXMgZGVzY3JpYmVkIGluIHNlcmllcyBzdGFydGluZyBhdCBbMV0sIGl0IGFk ZHMgb3B0aW9uIHRvIHNldCBtZXRhZGF0YSB2YWx1ZSBhcyBtYXRjaCBwYXR0ZXJuIHdoZW4NCj4g Y3JlYXRpbmcgYSBuZXcgZmxvdyBydWxlLg0KPiANCj4gVGhpcyBwYXRjaCBhZGRzIG1ldGFkYXRh IHN1cHBvcnQgaW4gbWx4NSBkcml2ZXIsIGluIHNldmVyYWwgcGFydHM6DQo+IC0gQWRkIHRoZSBz ZXR0aW5nIG9mIG1ldGFkYXRhIHZhbHVlIGluIG1hdGNoZXIgd2hlbiBjcmVhdGluZyBhIG5ldyBm bG93IHJ1bGUuDQo+IC0gQWRkIHRoZSBwYXNzaW5nIG9mIG1ldGFkYXRhIHZhbHVlIGZyb20gbWJ1 ZiB0byB3cWUgd2hlbiBpbmRpY2F0ZWQgYnkgb2xfZmxhZywgaW4gZGlmZmVyZW50IGJ1cnN0DQo+ IGZ1bmN0aW9ucy4NCj4gLSBBbGxvdyBmbG93IHJ1bGUgd2l0aCBhdHRyaWJ1dGUgZWdyZXNzIGlu IHNwZWNpZmljIGNhc2VzLg0KPiANCj4gVGhpcyBwYXRjaCBtdXN0IGJlIGJ1aWx0IHRvZ2V0aGVy IHdpdGggdGhlIGZpbGVzIGluIHNlcmllcyBbMV0uDQo+IA0KPiBbMV0gImV0aGRldjogc3VwcG9y dCBtZXRhZGF0YSBhcyBmbG93IHJ1bGUgY3JpdGVyaWEiDQo+IA0KPiBTaWduZWQtb2ZmLWJ5OiBE ZWtlbCBQZWxlZCA8ZGVrZWxwQG1lbGxhbm94LmNvbT4NCj4gLS0tDQo+ICBkcml2ZXJzL25ldC9t bHg1L21seDVfZmxvdy5jICAgICAgICAgIHwgIDYwICsrKysrKysrKysrKystLS0tDQo+ICBkcml2 ZXJzL25ldC9tbHg1L21seDVfZmxvdy5oICAgICAgICAgIHwgIDIyICsrKysrLS0NCj4gIGRyaXZl cnMvbmV0L21seDUvbWx4NV9mbG93X2R2LmMgICAgICAgfCAxMjAgKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrLS0tLQ0KPiAgZHJpdmVycy9uZXQvbWx4NS9tbHg1X2Zsb3dfdmVyYnMuYyAg ICB8ICAyMSArKysrLS0NCj4gIGRyaXZlcnMvbmV0L21seDUvbWx4NV9wcm0uaCAgICAgICAgICAg fCAgIDIgKy0NCj4gIGRyaXZlcnMvbmV0L21seDUvbWx4NV9yeHR4LmMgICAgICAgICAgfCAgMzQg KysrKysrKystLQ0KPiAgZHJpdmVycy9uZXQvbWx4NS9tbHg1X3J4dHhfdmVjLmMgICAgICB8ICAy OCArKysrKystLQ0KPiAgZHJpdmVycy9uZXQvbWx4NS9tbHg1X3J4dHhfdmVjLmggICAgICB8ICAg MSArDQo+ICBkcml2ZXJzL25ldC9tbHg1L21seDVfcnh0eF92ZWNfbmVvbi5oIHwgICA0ICstDQo+ ICBkcml2ZXJzL25ldC9tbHg1L21seDVfcnh0eF92ZWNfc3NlLmggIHwgICA0ICstDQo+ICBkcml2 ZXJzL25ldC9tbHg1L21seDVfdHhxLmMgICAgICAgICAgIHwgICA2ICsrDQo+ICAxMSBmaWxlcyBj aGFuZ2VkLCAyNTUgaW5zZXJ0aW9ucygrKSwgNDcgZGVsZXRpb25zKC0pDQo+IA0KPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9uZXQvbWx4NS9tbHg1X2Zsb3cuYyBiL2RyaXZlcnMvbmV0L21seDUvbWx4 NV9mbG93LmMgaW5kZXggNDIzNGJlNi4uNzkzMmUwZg0KPiAxMDA2NDQNCj4gLS0tIGEvZHJpdmVy cy9uZXQvbWx4NS9tbHg1X2Zsb3cuYw0KPiArKysgYi9kcml2ZXJzL25ldC9tbHg1L21seDVfZmxv dy5jDQo+IEBAIC00MDIsNyArNDAyLDcgQEAgdWludDMyX3QgbWx4NV9mbG93X2FkanVzdF9wcmlv cml0eShzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldiwNCj4gICAqIEByZXR1cm4NCj4gICAqICAgMCBv biBzdWNjZXNzLCBhIG5lZ2F0aXZlIGVycm5vIHZhbHVlIG90aGVyd2lzZSBhbmQgcnRlX2Vycm5v IGlzIHNldC4NCj4gICAqLw0KPiAtc3RhdGljIGludA0KPiAraW50DQo+ICBtbHg1X2Zsb3dfaXRl bV9hY2NlcHRhYmxlKGNvbnN0IHN0cnVjdCBydGVfZmxvd19pdGVtICppdGVtLA0KPiAgCQkJICBj b25zdCB1aW50OF90ICptYXNrLA0KPiAgCQkJICBjb25zdCB1aW50OF90ICpuaWNfbWFzaywNCj4g QEAgLTYwMiw3ICs2MDIsOCBAQCB1aW50MzJfdCBtbHg1X2Zsb3dfYWRqdXN0X3ByaW9yaXR5KHN0 cnVjdCBydGVfZXRoX2RldiAqZGV2LA0KPiAgICogICAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUg ZXJybm8gdmFsdWUgb3RoZXJ3aXNlIGFuZCBydGVfZXJubm8gaXMgc2V0Lg0KPiAgICovDQo+ICBp bnQgbWx4NV9mbG93X3ZhbGlkYXRlX2FjdGlvbl9mbGFnKHVpbnQ2NF90IGFjdGlvbl9mbGFncywN Cj4gLQkJCQkgICBzdHJ1Y3QgcnRlX2Zsb3dfZXJyb3IgKmVycm9yKQ0KPiArCQkJCWNvbnN0IHN0 cnVjdCBydGVfZmxvd19hdHRyICphdHRyLA0KPiArCQkJCXN0cnVjdCBydGVfZmxvd19lcnJvciAq ZXJyb3IpDQo+ICB7DQo+IA0KPiAgCWlmIChhY3Rpb25fZmxhZ3MgJiBNTFg1X0FDVElPTl9EUk9Q KQ0KPiBAQCAtNjI0LDYgKzYyNSwxMSBAQCBpbnQgbWx4NV9mbG93X3ZhbGlkYXRlX2FjdGlvbl9m bGFnKHVpbnQ2NF90IGFjdGlvbl9mbGFncywNCj4gIAkJCQkJICBOVUxMLA0KPiAgCQkJCQkgICJj YW4ndCBoYXZlIDIgZmxhZyINCj4gIAkJCQkJICAiIGFjdGlvbnMgaW4gc2FtZSBmbG93Iik7DQo+ ICsJaWYgKGF0dHItPmVncmVzcykNCj4gKwkJcmV0dXJuIHJ0ZV9mbG93X2Vycm9yX3NldChlcnJv ciwgRU5PVFNVUCwNCj4gKwkJCQkJUlRFX0ZMT1dfRVJST1JfVFlQRV9BVFRSX0VHUkVTUywNCj4g KwkJCQkJTlVMTCwNCj4gKwkJCQkJImZsYWcgYWN0aW9uIG5vdCBzdXBwb3J0ZWQgZm9yIGVncmVz cyIpOw0KPiAgCXJldHVybiAwOw0KPiAgfQ0KPiANCj4gQEAgLTY0Miw4ICs2NDgsOSBAQCBpbnQg bWx4NV9mbG93X3ZhbGlkYXRlX2FjdGlvbl9mbGFnKHVpbnQ2NF90IGFjdGlvbl9mbGFncywNCj4g ICAqICAgMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIGVycm5vIHZhbHVlIG90aGVyd2lzZSBhbmQg cnRlX2Vybm5vIGlzIHNldC4NCj4gICAqLw0KPiAgaW50IG1seDVfZmxvd192YWxpZGF0ZV9hY3Rp b25fbWFyayh1aW50NjRfdCBhY3Rpb25fZmxhZ3MsDQo+IC0JCQkJICAgY29uc3Qgc3RydWN0IHJ0 ZV9mbG93X2FjdGlvbiAqYWN0aW9uLA0KPiAtCQkJCSAgIHN0cnVjdCBydGVfZmxvd19lcnJvciAq ZXJyb3IpDQo+ICsJCQkJY29uc3Qgc3RydWN0IHJ0ZV9mbG93X2FjdGlvbiAqYWN0aW9uLA0KPiAr CQkJCWNvbnN0IHN0cnVjdCBydGVfZmxvd19hdHRyICphdHRyLA0KPiArCQkJCXN0cnVjdCBydGVf Zmxvd19lcnJvciAqZXJyb3IpDQo+ICB7DQo+ICAJY29uc3Qgc3RydWN0IHJ0ZV9mbG93X2FjdGlv bl9tYXJrICptYXJrID0gYWN0aW9uLT5jb25mOw0KPiANCj4gQEAgLTY3Nyw2ICs2ODQsMTEgQEAg aW50IG1seDVfZmxvd192YWxpZGF0ZV9hY3Rpb25fbWFyayh1aW50NjRfdCBhY3Rpb25fZmxhZ3Ms DQo+ICAJCQkJCSAgTlVMTCwNCj4gIAkJCQkJICAiY2FuJ3QgaGF2ZSAyIGZsYWcgYWN0aW9ucyBp biBzYW1lIg0KPiAgCQkJCQkgICIgZmxvdyIpOw0KPiArCWlmIChhdHRyLT5lZ3Jlc3MpDQo+ICsJ CXJldHVybiBydGVfZmxvd19lcnJvcl9zZXQoZXJyb3IsIEVOT1RTVVAsDQo+ICsJCQkJCVJURV9G TE9XX0VSUk9SX1RZUEVfQVRUUl9FR1JFU1MsDQo+ICsJCQkJCU5VTEwsDQo+ICsJCQkJCSJtYXJr IGFjdGlvbiBub3Qgc3VwcG9ydGVkIGZvciBlZ3Jlc3MiKTsNCj4gIAlyZXR1cm4gMDsNCj4gIH0N Cj4gDQo+IEBAIC02OTMsNyArNzA1LDggQEAgaW50IG1seDVfZmxvd192YWxpZGF0ZV9hY3Rpb25f bWFyayh1aW50NjRfdCBhY3Rpb25fZmxhZ3MsDQo+ICAgKiAgIDAgb24gc3VjY2VzcywgYSBuZWdh dGl2ZSBlcnJubyB2YWx1ZSBvdGhlcndpc2UgYW5kIHJ0ZV9lcm5ubyBpcyBzZXQuDQo+ICAgKi8N Cj4gIGludCBtbHg1X2Zsb3dfdmFsaWRhdGVfYWN0aW9uX2Ryb3AodWludDY0X3QgYWN0aW9uX2Zs YWdzLA0KPiAtCQkJCSAgIHN0cnVjdCBydGVfZmxvd19lcnJvciAqZXJyb3IpDQo+ICsJCQkJY29u c3Qgc3RydWN0IHJ0ZV9mbG93X2F0dHIgKmF0dHIsDQo+ICsJCQkJc3RydWN0IHJ0ZV9mbG93X2Vy cm9yICplcnJvcikNCj4gIHsNCj4gIAlpZiAoYWN0aW9uX2ZsYWdzICYgTUxYNV9BQ1RJT05fRkxB RykNCj4gIAkJcmV0dXJuIHJ0ZV9mbG93X2Vycm9yX3NldChlcnJvciwNCj4gQEAgLTcxNSw2ICs3 MjgsMTEgQEAgaW50IG1seDVfZmxvd192YWxpZGF0ZV9hY3Rpb25fZHJvcCh1aW50NjRfdCBhY3Rp b25fZmxhZ3MsDQo+ICAJCQkJCSAgTlVMTCwNCj4gIAkJCQkJICAiY2FuJ3QgaGF2ZSAyIGZhdGUg YWN0aW9ucyBpbiINCj4gIAkJCQkJICAiIHNhbWUgZmxvdyIpOw0KPiArCWlmIChhdHRyLT5lZ3Jl c3MpDQo+ICsJCXJldHVybiBydGVfZmxvd19lcnJvcl9zZXQoZXJyb3IsIEVOT1RTVVAsDQo+ICsJ CQkJCVJURV9GTE9XX0VSUk9SX1RZUEVfQVRUUl9FR1JFU1MsDQo+ICsJCQkJCU5VTEwsDQo+ICsJ CQkJCSJkcm9wIGFjdGlvbiBub3Qgc3VwcG9ydGVkIGZvciBlZ3Jlc3MiKTsNCj4gIAlyZXR1cm4g MDsNCj4gIH0NCj4gDQo+IEBAIC03MzUsOSArNzUzLDEwIEBAIGludCBtbHg1X2Zsb3dfdmFsaWRh dGVfYWN0aW9uX2Ryb3AodWludDY0X3QgYWN0aW9uX2ZsYWdzLA0KPiAgICogICAwIG9uIHN1Y2Nl c3MsIGEgbmVnYXRpdmUgZXJybm8gdmFsdWUgb3RoZXJ3aXNlIGFuZCBydGVfZXJubm8gaXMgc2V0 Lg0KPiAgICovDQo+ICBpbnQgbWx4NV9mbG93X3ZhbGlkYXRlX2FjdGlvbl9xdWV1ZSh1aW50NjRf dCBhY3Rpb25fZmxhZ3MsDQo+IC0JCQkJICAgIHN0cnVjdCBydGVfZXRoX2RldiAqZGV2LA0KPiAt CQkJCSAgICBjb25zdCBzdHJ1Y3QgcnRlX2Zsb3dfYWN0aW9uICphY3Rpb24sDQo+IC0JCQkJICAg IHN0cnVjdCBydGVfZmxvd19lcnJvciAqZXJyb3IpDQo+ICsJCQkJc3RydWN0IHJ0ZV9ldGhfZGV2 ICpkZXYsDQo+ICsJCQkJY29uc3Qgc3RydWN0IHJ0ZV9mbG93X2FjdGlvbiAqYWN0aW9uLA0KPiAr CQkJCWNvbnN0IHN0cnVjdCBydGVfZmxvd19hdHRyICphdHRyLA0KPiArCQkJCXN0cnVjdCBydGVf Zmxvd19lcnJvciAqZXJyb3IpDQo+ICB7DQo+ICAJc3RydWN0IHByaXYgKnByaXYgPSBkZXYtPmRh dGEtPmRldl9wcml2YXRlOw0KPiAgCWNvbnN0IHN0cnVjdCBydGVfZmxvd19hY3Rpb25fcXVldWUg KnF1ZXVlID0gYWN0aW9uLT5jb25mOyBAQCAtNzYwLDYgKzc3OSwxMSBAQCBpbnQNCj4gbWx4NV9m bG93X3ZhbGlkYXRlX2FjdGlvbl9xdWV1ZSh1aW50NjRfdCBhY3Rpb25fZmxhZ3MsDQo+ICAJCQkJ CSAgUlRFX0ZMT1dfRVJST1JfVFlQRV9BQ1RJT05fQ09ORiwNCj4gIAkJCQkJICAmcXVldWUtPmlu ZGV4LA0KPiAgCQkJCQkgICJxdWV1ZSBpcyBub3QgY29uZmlndXJlZCIpOw0KPiArCWlmIChhdHRy LT5lZ3Jlc3MpDQo+ICsJCXJldHVybiBydGVfZmxvd19lcnJvcl9zZXQoZXJyb3IsIEVOT1RTVVAs DQo+ICsJCQkJCVJURV9GTE9XX0VSUk9SX1RZUEVfQVRUUl9FR1JFU1MsDQo+ICsJCQkJCU5VTEws DQo+ICsJCQkJCSJxdWV1ZSBhY3Rpb24gbm90IHN1cHBvcnRlZCBmb3IgZWdyZXNzIik7DQo+ICAJ cmV0dXJuIDA7DQo+ICB9DQo+IA0KPiBAQCAtNzgwLDkgKzgwNCwxMCBAQCBpbnQgbWx4NV9mbG93 X3ZhbGlkYXRlX2FjdGlvbl9xdWV1ZSh1aW50NjRfdCBhY3Rpb25fZmxhZ3MsDQo+ICAgKiAgIDAg b24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJubyB2YWx1ZSBvdGhlcndpc2UgYW5kIHJ0ZV9lcm5u byBpcyBzZXQuDQo+ICAgKi8NCj4gIGludCBtbHg1X2Zsb3dfdmFsaWRhdGVfYWN0aW9uX3Jzcyh1 aW50NjRfdCBhY3Rpb25fZmxhZ3MsDQo+IC0JCQkJICBzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldiwN Cj4gLQkJCQkgIGNvbnN0IHN0cnVjdCBydGVfZmxvd19hY3Rpb24gKmFjdGlvbiwNCj4gLQkJCQkg IHN0cnVjdCBydGVfZmxvd19lcnJvciAqZXJyb3IpDQo+ICsJCQkJc3RydWN0IHJ0ZV9ldGhfZGV2 ICpkZXYsDQo+ICsJCQkJY29uc3Qgc3RydWN0IHJ0ZV9mbG93X2FjdGlvbiAqYWN0aW9uLA0KPiAr CQkJCWNvbnN0IHN0cnVjdCBydGVfZmxvd19hdHRyICphdHRyLA0KPiArCQkJCXN0cnVjdCBydGVf Zmxvd19lcnJvciAqZXJyb3IpDQo+ICB7DQo+ICAJc3RydWN0IHByaXYgKnByaXYgPSBkZXYtPmRh dGEtPmRldl9wcml2YXRlOw0KPiAgCWNvbnN0IHN0cnVjdCBydGVfZmxvd19hY3Rpb25fcnNzICpy c3MgPSBhY3Rpb24tPmNvbmY7IEBAIC04MzksNiArODY0LDExIEBAIGludA0KPiBtbHg1X2Zsb3df dmFsaWRhdGVfYWN0aW9uX3Jzcyh1aW50NjRfdCBhY3Rpb25fZmxhZ3MsDQo+ICAJCQkJCQkgICZy c3MtPnF1ZXVlW2ldLA0KPiAgCQkJCQkJICAicXVldWUgaXMgbm90IGNvbmZpZ3VyZWQiKTsNCj4g IAl9DQo+ICsJaWYgKGF0dHItPmVncmVzcykNCj4gKwkJcmV0dXJuIHJ0ZV9mbG93X2Vycm9yX3Nl dChlcnJvciwgRU5PVFNVUCwNCj4gKwkJCQkJUlRFX0ZMT1dfRVJST1JfVFlQRV9BVFRSX0VHUkVT UywNCj4gKwkJCQkJTlVMTCwNCj4gKwkJCQkJInJzcyBhY3Rpb24gbm90IHN1cHBvcnRlZCBmb3Ig ZWdyZXNzIik7DQo+ICAJcmV0dXJuIDA7DQo+ICB9DQo+IA0KPiBAQCAtODU1LDcgKzg4NSw4IEBA IGludCBtbHg1X2Zsb3dfdmFsaWRhdGVfYWN0aW9uX3Jzcyh1aW50NjRfdCBhY3Rpb25fZmxhZ3Ms DQo+ICAgKiAgIDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJubyB2YWx1ZSBvdGhlcndpc2Ug YW5kIHJ0ZV9lcm5ubyBpcyBzZXQuDQo+ICAgKi8NCj4gIGludCBtbHg1X2Zsb3dfdmFsaWRhdGVf YWN0aW9uX2NvdW50KHN0cnVjdCBydGVfZXRoX2RldiAqZGV2LA0KPiAtCQkJCSAgICBzdHJ1Y3Qg cnRlX2Zsb3dfZXJyb3IgKmVycm9yKQ0KPiArCQkJCWNvbnN0IHN0cnVjdCBydGVfZmxvd19hdHRy ICphdHRyLA0KPiArCQkJCXN0cnVjdCBydGVfZmxvd19lcnJvciAqZXJyb3IpDQo+ICB7DQo+ICAJ c3RydWN0IHByaXYgKnByaXYgPSBkZXYtPmRhdGEtPmRldl9wcml2YXRlOw0KPiANCj4gQEAgLTg2 NCw2ICs4OTUsMTEgQEAgaW50IG1seDVfZmxvd192YWxpZGF0ZV9hY3Rpb25fY291bnQoc3RydWN0 IHJ0ZV9ldGhfZGV2ICpkZXYsDQo+ICAJCQkJCSAgUlRFX0ZMT1dfRVJST1JfVFlQRV9BQ1RJT04s DQo+ICAJCQkJCSAgTlVMTCwNCj4gIAkJCQkJICAiZmxvdyBjb3VudGVycyBhcmUgbm90IHN1cHBv cnRlZC4iKTsNCj4gKwlpZiAoYXR0ci0+ZWdyZXNzKQ0KPiArCQlyZXR1cm4gcnRlX2Zsb3dfZXJy b3Jfc2V0KGVycm9yLCBFTk9UU1VQLA0KPiArCQkJCQlSVEVfRkxPV19FUlJPUl9UWVBFX0FUVFJf RUdSRVNTLA0KPiArCQkJCQlOVUxMLA0KPiArCQkJCQkiY291bnQgYWN0aW9uIG5vdCBzdXBwb3J0 ZWQgZm9yIGVncmVzcyIpOw0KPiAgCXJldHVybiAwOw0KPiAgfQ0KPiANCj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvbmV0L21seDUvbWx4NV9mbG93LmggYi9kcml2ZXJzL25ldC9tbHg1L21seDVfZmxv dy5oIGluZGV4IGYxYTcyZDQuLmUwNDQ2YzUNCj4gMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvbmV0 L21seDUvbWx4NV9mbG93LmgNCj4gKysrIGIvZHJpdmVycy9uZXQvbWx4NS9tbHg1X2Zsb3cuaA0K PiBAQCAtNDMsNiArNDMsOSBAQA0KPiAgI2RlZmluZSBNTFg1X0ZMT1dfTEFZRVJfR1JFICgxdSA8 PCAxNCkNCj4gICNkZWZpbmUgTUxYNV9GTE9XX0xBWUVSX01QTFMgKDF1IDw8IDE1KQ0KPiANCj4g Ky8qIEdlbmVyYWwgcGF0dGVybiBpdGVtcyBiaXRzLiAqLw0KPiArI2RlZmluZSBNTFg1X0ZMT1df SVRFTV9NRVRBREFUQSAoMXUgPDwgMTYpDQo+ICsNCj4gIC8qIE91dGVyIE1hc2tzLiAqLw0KPiAg I2RlZmluZSBNTFg1X0ZMT1dfTEFZRVJfT1VURVJfTDMgXA0KPiAgCShNTFg1X0ZMT1dfTEFZRVJf T1VURVJfTDNfSVBWNCB8IE1MWDVfRkxPV19MQVlFUl9PVVRFUl9MM19JUFY2KSBAQCAtMjM3LDIx ICsyNDAsMjcgQEAgc3RydWN0DQo+IG1seDVfZmxvd19kcml2ZXJfb3BzIHsNCj4gDQo+ICAvKiBt bHg1X2Zsb3cuYyAqLw0KPiAgaW50IG1seDVfZmxvd192YWxpZGF0ZV9hY3Rpb25fZmxhZyh1aW50 NjRfdCBhY3Rpb25fZmxhZ3MsDQo+IC0JCQkJICAgc3RydWN0IHJ0ZV9mbG93X2Vycm9yICplcnJv cik7DQo+ICsJCQkJICAgIGNvbnN0IHN0cnVjdCBydGVfZmxvd19hdHRyICphdHRyLA0KPiArCQkJ CSAgICBzdHJ1Y3QgcnRlX2Zsb3dfZXJyb3IgKmVycm9yKTsNCj4gIGludCBtbHg1X2Zsb3dfdmFs aWRhdGVfYWN0aW9uX21hcmsodWludDY0X3QgYWN0aW9uX2ZsYWdzLA0KPiAtCQkJCSAgIGNvbnN0 IHN0cnVjdCBydGVfZmxvd19hY3Rpb24gKmFjdGlvbiwNCj4gLQkJCQkgICBzdHJ1Y3QgcnRlX2Zs b3dfZXJyb3IgKmVycm9yKTsNCj4gKwkJCQkgICAgY29uc3Qgc3RydWN0IHJ0ZV9mbG93X2FjdGlv biAqYWN0aW9uLA0KPiArCQkJCSAgICBjb25zdCBzdHJ1Y3QgcnRlX2Zsb3dfYXR0ciAqYXR0ciwN Cj4gKwkJCQkgICAgc3RydWN0IHJ0ZV9mbG93X2Vycm9yICplcnJvcik7DQo+ICBpbnQgbWx4NV9m bG93X3ZhbGlkYXRlX2FjdGlvbl9kcm9wKHVpbnQ2NF90IGFjdGlvbl9mbGFncywNCj4gLQkJCQkg ICBzdHJ1Y3QgcnRlX2Zsb3dfZXJyb3IgKmVycm9yKTsNCj4gKwkJCQkgICAgY29uc3Qgc3RydWN0 IHJ0ZV9mbG93X2F0dHIgKmF0dHIsDQo+ICsJCQkJICAgIHN0cnVjdCBydGVfZmxvd19lcnJvciAq ZXJyb3IpOw0KPiAgaW50IG1seDVfZmxvd192YWxpZGF0ZV9hY3Rpb25fcXVldWUodWludDY0X3Qg YWN0aW9uX2ZsYWdzLA0KPiAgCQkJCSAgICBzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldiwNCj4gIAkJ CQkgICAgY29uc3Qgc3RydWN0IHJ0ZV9mbG93X2FjdGlvbiAqYWN0aW9uLA0KPiArCQkJCSAgICBj b25zdCBzdHJ1Y3QgcnRlX2Zsb3dfYXR0ciAqYXR0ciwNCj4gIAkJCQkgICAgc3RydWN0IHJ0ZV9m bG93X2Vycm9yICplcnJvcik7DQo+ICBpbnQgbWx4NV9mbG93X3ZhbGlkYXRlX2FjdGlvbl9yc3Mo dWludDY0X3QgYWN0aW9uX2ZsYWdzLA0KPiAgCQkJCSAgc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXYs DQo+ICAJCQkJICBjb25zdCBzdHJ1Y3QgcnRlX2Zsb3dfYWN0aW9uICphY3Rpb24sDQo+ICsJCQkJ ICBjb25zdCBzdHJ1Y3QgcnRlX2Zsb3dfYXR0ciAqYXR0ciwNCj4gIAkJCQkgIHN0cnVjdCBydGVf Zmxvd19lcnJvciAqZXJyb3IpOw0KPiAgaW50IG1seDVfZmxvd192YWxpZGF0ZV9hY3Rpb25fY291 bnQoc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXYsDQo+ICsJCQkJICAgIGNvbnN0IHN0cnVjdCBydGVf Zmxvd19hdHRyICphdHRyLA0KPiAgCQkJCSAgICBzdHJ1Y3QgcnRlX2Zsb3dfZXJyb3IgKmVycm9y KTsNCj4gIGludCBtbHg1X2Zsb3dfdmFsaWRhdGVfYXR0cmlidXRlcyhzdHJ1Y3QgcnRlX2V0aF9k ZXYgKmRldiwNCj4gIAkJCQkgIGNvbnN0IHN0cnVjdCBydGVfZmxvd19hdHRyICphdHRyaWJ1dGVz LCBAQCAtMjk0LDYgKzMwMywxMSBAQCBpbnQNCj4gbWx4NV9mbG93X3ZhbGlkYXRlX2l0ZW1fbXBs cyh1aW50NjRfdCBpdGVtX2ZsYWdzLCAgdm9pZCBtbHg1X2Zsb3dfaW5pdF9kcml2ZXJfb3BzKHN0 cnVjdCBydGVfZXRoX2Rldg0KPiAqZGV2KTsgIHVpbnQzMl90IG1seDVfZmxvd19hZGp1c3RfcHJp b3JpdHkoc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXYsIGludDMyX3QgcHJpb3JpdHksDQo+ICAJCQkJ ICAgdWludDMyX3Qgc3VicHJpb3JpdHkpOw0KPiAraW50IG1seDVfZmxvd19pdGVtX2FjY2VwdGFi bGUoY29uc3Qgc3RydWN0IHJ0ZV9mbG93X2l0ZW0gKml0ZW0sDQo+ICsJCQkgICAgICBjb25zdCB1 aW50OF90ICptYXNrLA0KPiArCQkJICAgICAgY29uc3QgdWludDhfdCAqbmljX21hc2ssDQo+ICsJ CQkgICAgICB1bnNpZ25lZCBpbnQgc2l6ZSwNCj4gKwkJCSAgICAgIHN0cnVjdCBydGVfZmxvd19l cnJvciAqZXJyb3IpOw0KDQoNCkFib3ZlIGludmFsaWQgZWdyZXNzIGFjdGlvbnMgY2hlY2tzIHNl ZW1zIGxlc3MgcmVsYXRpb24gdG8gbWV0YWRhdGEsIGhvdyBhYm91dCBzcGxpdCB0aGlzIHBhdGNo IGludG86DQoxLiBlZ3Jlc3Mgc3VwcG9ydA0KMi4gbWV0YWRhdGEgc3VwcG9ydA0KDQo+IA0KPiAg LyogbWx4NV9mbG93X2R2LmMgKi8NCj4gIHZvaWQgbWx4NV9mbG93X2R2X2dldF9kcml2ZXJfb3Bz KHN0cnVjdCBtbHg1X2Zsb3dfZHJpdmVyX29wcyAqZmxvd19vcHMpOyBkaWZmIC0tZ2l0DQo+IGEv ZHJpdmVycy9uZXQvbWx4NS9tbHg1X2Zsb3dfZHYuYyBiL2RyaXZlcnMvbmV0L21seDUvbWx4NV9m bG93X2R2LmMgaW5kZXggNDA5MGM1Zi4uM2I1MjE4MSAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9u ZXQvbWx4NS9tbHg1X2Zsb3dfZHYuYw0KPiArKysgYi9kcml2ZXJzL25ldC9tbHg1L21seDVfZmxv d19kdi5jDQo+IEBAIC0zNyw2ICszNyw0NyBAQA0KPiAgI2lmZGVmIEhBVkVfSUJWX0ZMT1dfRFZf U1VQUE9SVA0KPiANCj4gIC8qKg0KPiArICogVmFsaWRhdGUgTUVUQSBpdGVtLg0KPiArICoNCj4g KyAqIEBwYXJhbVtpbl0gaXRlbQ0KPiArICogICBJdGVtIHNwZWNpZmljYXRpb24uDQo+ICsgKiBA cGFyYW1bb3V0XSBlcnJvcg0KPiArICogICBQb2ludGVyIHRvIGVycm9yIHN0cnVjdHVyZS4NCj4g KyAqDQo+ICsgKiBAcmV0dXJuDQo+ICsgKiAgIDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJu byB2YWx1ZSBvdGhlcndpc2UgYW5kIHJ0ZV9lcnJubyBpcyBzZXQuDQo+ICsgKi8NCj4gK3N0YXRp YyBpbnQNCj4gK21seDVfZmxvd192YWxpZGF0ZV9pdGVtX21ldGEoY29uc3Qgc3RydWN0IHJ0ZV9m bG93X2l0ZW0gKml0ZW0sDQo+ICsJCQljb25zdCBzdHJ1Y3QgcnRlX2Zsb3dfYXR0ciAqYXR0cmli dXRlcywNCj4gKwkJCXN0cnVjdCBydGVfZmxvd19lcnJvciAqZXJyb3IpDQo+ICt7DQo+ICsJY29u c3Qgc3RydWN0IHJ0ZV9mbG93X2l0ZW1fbWV0YSAqbWFzayA9IGl0ZW0tPm1hc2s7DQo+ICsNCj4g Kwljb25zdCBzdHJ1Y3QgcnRlX2Zsb3dfaXRlbV9tZXRhIG5pY19tYXNrID0gew0KPiArCQkuZGF0 YSA9IFJURV9CRTMyKFVJTlQzMl9NQVgpDQo+ICsJfTsNCj4gKw0KPiArCWludCByZXQ7DQo+ICsN Cj4gKwlpZiAoIW1hc2spDQo+ICsJCW1hc2sgPSAmcnRlX2Zsb3dfaXRlbV9tZXRhX21hc2s7DQo+ ICsJcmV0ID0gbWx4NV9mbG93X2l0ZW1fYWNjZXB0YWJsZQ0KPiArCQkoaXRlbSwgKGNvbnN0IHVp bnQ4X3QgKiltYXNrLA0KPiArCQkoY29uc3QgdWludDhfdCAqKSZuaWNfbWFzaywNCj4gKwkJc2l6 ZW9mKHN0cnVjdCBydGVfZmxvd19pdGVtX21ldGEpLCBlcnJvcik7DQoNClBsZWFzZSBmb2xsb3cg bGluZSB3cmFwcGluZyBmb3JtYXQuDQoNCj4gKwlpZiAocmV0IDwgMCkNCj4gKwkJcmV0dXJuIHJl dDsNCj4gKw0KPiArCWlmIChhdHRyaWJ1dGVzLT5pbmdyZXNzKQ0KPiArCQlyZXR1cm4gcnRlX2Zs b3dfZXJyb3Jfc2V0KGVycm9yLCBFTk9UU1VQLA0KPiArCQkJCQkgIFJURV9GTE9XX0VSUk9SX1RZ UEVfQVRUUl9JTkdSRVNTLA0KPiArCQkJCQkgIE5VTEwsDQo+ICsJCQkJCSAgInBhdHRlcm4gbm90 IHN1cHBvcnRlZCBmb3IgaW5ncmVzcyIpOw0KPiArCXJldHVybiAwOw0KDQpXaGF0IGlmIHNwZWMg bm90IHNwZWNpZmllZD8NCg0KPiArfQ0KPiArDQo+ICsvKioNCj4gICAqIFZlcmlmeSB0aGUgQHAg YXR0cmlidXRlcyB3aWxsIGJlIGNvcnJlY3RseSB1bmRlcnN0b29kIGJ5IHRoZSBOSUMgYW5kIHN0 b3JlDQo+ICAgKiB0aGVtIGluIHRoZSBAcCBmbG93IGlmIGV2ZXJ5dGhpbmcgaXMgY29ycmVjdC4N Cj4gICAqDQo+IEBAIC02OCwyMSArMTA5LDE3IEBAIHN0YXRpYyBpbnQgZmxvd19kdl92YWxpZGF0 ZV9hdHRyaWJ1dGVzKHN0cnVjdCBydGVfZXRoX2RldiAqZGV2LA0KPiAgCQkJCQkgIFJURV9GTE9X X0VSUk9SX1RZUEVfQVRUUl9QUklPUklUWSwNCj4gIAkJCQkJICBOVUxMLA0KPiAgCQkJCQkgICJw cmlvcml0eSBvdXQgb2YgcmFuZ2UiKTsNCj4gLQlpZiAoYXR0cmlidXRlcy0+ZWdyZXNzKQ0KPiAt CQlyZXR1cm4gcnRlX2Zsb3dfZXJyb3Jfc2V0KGVycm9yLCBFTk9UU1VQLA0KPiAtCQkJCQkgIFJU RV9GTE9XX0VSUk9SX1RZUEVfQVRUUl9FR1JFU1MsDQo+IC0JCQkJCSAgTlVMTCwNCj4gLQkJCQkJ ICAiZWdyZXNzIGlzIG5vdCBzdXBwb3J0ZWQiKTsNCj4gIAlpZiAoYXR0cmlidXRlcy0+dHJhbnNm ZXIpDQo+ICAJCXJldHVybiBydGVfZmxvd19lcnJvcl9zZXQoZXJyb3IsIEVOT1RTVVAsDQo+ICAJ CQkJCSAgUlRFX0ZMT1dfRVJST1JfVFlQRV9BVFRSX1RSQU5TRkVSLA0KPiAgCQkJCQkgIE5VTEws DQo+ICAJCQkJCSAgInRyYW5zZmVyIGlzIG5vdCBzdXBwb3J0ZWQiKTsNCj4gLQlpZiAoIWF0dHJp YnV0ZXMtPmluZ3Jlc3MpDQo+ICsJaWYgKCEoYXR0cmlidXRlcy0+ZWdyZXNzIF4gYXR0cmlidXRl cy0+aW5ncmVzcykpDQo+ICAJCXJldHVybiBydGVfZmxvd19lcnJvcl9zZXQoZXJyb3IsIEVOT1RT VVAsDQo+IC0JCQkJCSAgUlRFX0ZMT1dfRVJST1JfVFlQRV9BVFRSX0lOR1JFU1MsDQo+ICsJCQkJ CSAgUlRFX0ZMT1dfRVJST1JfVFlQRV9BVFRSLA0KPiAgCQkJCQkgIE5VTEwsDQo+IC0JCQkJCSAg ImluZ3Jlc3MgYXR0cmlidXRlIGlzIG1hbmRhdG9yeSIpOw0KPiArCQkJCQkgICJtdXN0IHNwZWNp ZnkgZXhhY3RseSBvbmUgb2YgIg0KPiArCQkJCQkgICJpbmdyZXNzIG9yIGVncmVzcyIpOw0KPiAg CXJldHVybiAwOw0KPiAgfQ0KPiANCj4gQEAgLTIxOSw2ICsyNTYsMTIgQEAgc3RhdGljIGludCBm bG93X2R2X3ZhbGlkYXRlX2F0dHJpYnV0ZXMoc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXYsDQo+ICAJ CQkJcmV0dXJuIHJldDsNCj4gIAkJCWl0ZW1fZmxhZ3MgfD0gTUxYNV9GTE9XX0xBWUVSX01QTFM7 DQo+ICAJCQlicmVhazsNCj4gKwkJY2FzZSBSVEVfRkxPV19JVEVNX1RZUEVfTUVUQToNCj4gKwkJ CXJldCA9IG1seDVfZmxvd192YWxpZGF0ZV9pdGVtX21ldGEoaXRlbXMsIGF0dHIsIGVycm9yKTsN Cj4gKwkJCWlmIChyZXQgPCAwKQ0KPiArCQkJCXJldHVybiByZXQ7DQo+ICsJCQlpdGVtX2ZsYWdz IHw9IE1MWDVfRkxPV19JVEVNX01FVEFEQVRBOw0KPiArCQkJYnJlYWs7DQo+ICAJCWRlZmF1bHQ6 DQo+ICAJCQlyZXR1cm4gcnRlX2Zsb3dfZXJyb3Jfc2V0KGVycm9yLCBFTk9UU1VQLA0KPiAgCQkJ CQkJICBSVEVfRkxPV19FUlJPUl9UWVBFX0lURU0sDQo+IEBAIC0yMzMsNiArMjc2LDcgQEAgc3Rh dGljIGludCBmbG93X2R2X3ZhbGlkYXRlX2F0dHJpYnV0ZXMoc3RydWN0IHJ0ZV9ldGhfZGV2ICpk ZXYsDQo+ICAJCQlicmVhazsNCj4gIAkJY2FzZSBSVEVfRkxPV19BQ1RJT05fVFlQRV9GTEFHOg0K PiAgCQkJcmV0ID0gbWx4NV9mbG93X3ZhbGlkYXRlX2FjdGlvbl9mbGFnKGFjdGlvbl9mbGFncywN Cj4gKwkJCQkJCQkgICAgIGF0dHIsDQo+ICAJCQkJCQkJICAgICBlcnJvcik7DQo+ICAJCQlpZiAo cmV0IDwgMCkNCj4gIAkJCQlyZXR1cm4gcmV0Ow0KPiBAQCAtMjQxLDYgKzI4NSw3IEBAIHN0YXRp YyBpbnQgZmxvd19kdl92YWxpZGF0ZV9hdHRyaWJ1dGVzKHN0cnVjdCBydGVfZXRoX2RldiAqZGV2 LA0KPiAgCQljYXNlIFJURV9GTE9XX0FDVElPTl9UWVBFX01BUks6DQo+ICAJCQlyZXQgPSBtbHg1 X2Zsb3dfdmFsaWRhdGVfYWN0aW9uX21hcmsoYWN0aW9uX2ZsYWdzLA0KPiAgCQkJCQkJCSAgICAg YWN0aW9ucywNCj4gKwkJCQkJCQkgICAgIGF0dHIsDQo+ICAJCQkJCQkJICAgICBlcnJvcik7DQo+ ICAJCQlpZiAocmV0IDwgMCkNCj4gIAkJCQlyZXR1cm4gcmV0Ow0KPiBAQCAtMjQ4LDI3ICsyOTMs MzYgQEAgc3RhdGljIGludCBmbG93X2R2X3ZhbGlkYXRlX2F0dHJpYnV0ZXMoc3RydWN0IHJ0ZV9l dGhfZGV2ICpkZXYsDQo+ICAJCQlicmVhazsNCj4gIAkJY2FzZSBSVEVfRkxPV19BQ1RJT05fVFlQ RV9EUk9QOg0KPiAgCQkJcmV0ID0gbWx4NV9mbG93X3ZhbGlkYXRlX2FjdGlvbl9kcm9wKGFjdGlv bl9mbGFncywNCj4gKwkJCQkJCQkgICAgIGF0dHIsDQo+ICAJCQkJCQkJICAgICBlcnJvcik7DQo+ ICAJCQlpZiAocmV0IDwgMCkNCj4gIAkJCQlyZXR1cm4gcmV0Ow0KPiAgCQkJYWN0aW9uX2ZsYWdz IHw9IE1MWDVfQUNUSU9OX0RST1A7DQo+ICAJCQlicmVhazsNCj4gIAkJY2FzZSBSVEVfRkxPV19B Q1RJT05fVFlQRV9RVUVVRToNCj4gLQkJCXJldCA9IG1seDVfZmxvd192YWxpZGF0ZV9hY3Rpb25f cXVldWUoYWN0aW9uX2ZsYWdzLCBkZXYsDQo+IC0JCQkJCQkJICAgICAgYWN0aW9ucywgZXJyb3Ip Ow0KPiArCQkJcmV0ID0gbWx4NV9mbG93X3ZhbGlkYXRlX2FjdGlvbl9xdWV1ZShhY3Rpb25fZmxh Z3MsDQo+ICsJCQkJCQkJICAgICAgZGV2LA0KPiArCQkJCQkJCSAgICAgIGFjdGlvbnMsDQo+ICsJ CQkJCQkJICAgICAgYXR0ciwNCj4gKwkJCQkJCQkgICAgICBlcnJvcik7DQo+ICAJCQlpZiAocmV0 IDwgMCkNCj4gIAkJCQlyZXR1cm4gcmV0Ow0KPiAgCQkJYWN0aW9uX2ZsYWdzIHw9IE1MWDVfQUNU SU9OX1FVRVVFOw0KPiAgCQkJYnJlYWs7DQo+ICAJCWNhc2UgUlRFX0ZMT1dfQUNUSU9OX1RZUEVf UlNTOg0KPiAtCQkJcmV0ID0gbWx4NV9mbG93X3ZhbGlkYXRlX2FjdGlvbl9yc3MoYWN0aW9uX2Zs YWdzLCBkZXYsDQo+IC0JCQkJCQkJICAgIGFjdGlvbnMsIGVycm9yKTsNCj4gKwkJCXJldCA9IG1s eDVfZmxvd192YWxpZGF0ZV9hY3Rpb25fcnNzKGFjdGlvbl9mbGFncywNCj4gKwkJCQkJCQkgICAg ZGV2LA0KPiArCQkJCQkJCSAgICBhY3Rpb25zLA0KPiArCQkJCQkJCSAgICBhdHRyLA0KPiArCQkJ CQkJCSAgICBlcnJvcik7DQo+ICAJCQlpZiAocmV0IDwgMCkNCj4gIAkJCQlyZXR1cm4gcmV0Ow0K PiAgCQkJYWN0aW9uX2ZsYWdzIHw9IE1MWDVfQUNUSU9OX1JTUzsNCj4gIAkJCWJyZWFrOw0KPiAg CQljYXNlIFJURV9GTE9XX0FDVElPTl9UWVBFX0NPVU5UOg0KPiAtCQkJcmV0ID0gbWx4NV9mbG93 X3ZhbGlkYXRlX2FjdGlvbl9jb3VudChkZXYsIGVycm9yKTsNCj4gKwkJCXJldCA9IG1seDVfZmxv d192YWxpZGF0ZV9hY3Rpb25fY291bnQoZGV2LA0KPiArCQkJCQkJCSAgICAgIGF0dHIsDQo+ICsJ CQkJCQkJICAgICAgZXJyb3IpOw0KPiAgCQkJaWYgKHJldCA8IDApDQo+ICAJCQkJcmV0dXJuIHJl dDsNCj4gIAkJCWFjdGlvbl9mbGFncyB8PSBNTFg1X0FDVElPTl9DT1VOVDsNCj4gQEAgLTg2NSw2 ICs5MTksNDMgQEAgc3RhdGljIGludCBmbG93X2R2X3ZhbGlkYXRlX2F0dHJpYnV0ZXMoc3RydWN0 IHJ0ZV9ldGhfZGV2ICpkZXYsICB9DQo+IA0KPiAgLyoqDQo+ICsgKiBBZGQgTUVUQSBpdGVtIHRv IG1hdGNoZXINCj4gKyAqDQo+ICsgKiBAcGFyYW1baW4sIG91dF0gbWF0Y2hlcg0KPiArICogICBG bG93IG1hdGNoZXIuDQo+ICsgKiBAcGFyYW1baW4sIG91dF0ga2V5DQo+ICsgKiAgIEZsb3cgbWF0 Y2hlciB2YWx1ZS4NCj4gKyAqIEBwYXJhbVtpbl0gaXRlbQ0KPiArICogICBGbG93IHBhdHRlcm4g dG8gdHJhbnNsYXRlLg0KPiArICogQHBhcmFtW2luXSBpbm5lcg0KPiArICogICBJdGVtIGlzIGlu bmVyIHBhdHRlcm4uDQo+ICsgKi8NCj4gK3N0YXRpYyB2b2lkDQo+ICtmbG93X2R2X3RyYW5zbGF0 ZV9pdGVtX21ldGEodm9pZCAqbWF0Y2hlciwgdm9pZCAqa2V5LA0KPiArCQkJCWNvbnN0IHN0cnVj dCBydGVfZmxvd19pdGVtICppdGVtKQ0KPiArew0KPiArCWNvbnN0IHN0cnVjdCBydGVfZmxvd19p dGVtX21ldGEgKm1ldGFtOw0KPiArCWNvbnN0IHN0cnVjdCBydGVfZmxvd19pdGVtX21ldGEgKm1l dGF2Ow0KPiArDQo+ICsJdm9pZCAqbWlzYzJfbSA9DQo+ICsJCU1MWDVfQUREUl9PRihmdGVfbWF0 Y2hfcGFyYW0sIG1hdGNoZXIsIG1pc2NfcGFyYW1ldGVyc18yKTsNCj4gKwl2b2lkICptaXNjMl92 ID0NCj4gKwkJTUxYNV9BRERSX09GKGZ0ZV9tYXRjaF9wYXJhbSwga2V5LCBtaXNjX3BhcmFtZXRl cnNfMik7DQo+ICsNCj4gKwltZXRhbSA9IChjb25zdCB2b2lkICopaXRlbS0+bWFzazsNCj4gKwlp ZiAoIW1ldGFtKQ0KPiArCQltZXRhbSA9ICZydGVfZmxvd19pdGVtX21ldGFfbWFzazsNCj4gKw0K PiArCW1ldGF2ID0gKGNvbnN0IHZvaWQgKilpdGVtLT5zcGVjOw0KPiArCWlmIChtZXRhdikgew0K PiArCQlNTFg1X1NFVChmdGVfbWF0Y2hfc2V0X21pc2MyLCBtaXNjMl9tLCBtZXRhZGF0YV9yZWdf YSwNCj4gKwkJCVJURV9CRTMyKCh1aW50MzJfdClydGVfYmVfdG9fY3B1XzY0KG1ldGFtLT5kYXRh KSkpOw0KPiArCQlNTFg1X1NFVChmdGVfbWF0Y2hfc2V0X21pc2MyLCBtaXNjMl92LCBtZXRhZGF0 YV9yZWdfYSwNCj4gKwkJCVJURV9CRTMyKCh1aW50MzJfdClydGVfYmVfdG9fY3B1XzY0KG1ldGF2 LT5kYXRhKSkpOw0KDQpEYXRhIHNpemUgb2YgcnRlX2Zsb3dfaXRlbV9tZXRhLmRhdGEgaXMgMzIg Yml0cyBpbiBbMV0sIG5vIG5lZWQgdG8gY29udmVydCB0aGUgc2l6ZS4NCg0KPiArCX0NCj4gK30N Cj4gKw0KPiArLyoqDQo+ICAgKg0KPiAgICogVHJhbnNsYXRlIGZsb3cgaXRlbS4NCj4gICAqDQo+ IEBAIC05NDYsNiArMTAzNyw5IEBAIHN0YXRpYyBpbnQgZmxvd19kdl92YWxpZGF0ZV9hdHRyaWJ1 dGVzKHN0cnVjdCBydGVfZXRoX2RldiAqZGV2LA0KPiAgCWNhc2UgUlRFX0ZMT1dfSVRFTV9UWVBF X1ZYTEFOX0dQRToNCj4gIAkJZmxvd19kdl90cmFuc2xhdGVfaXRlbV92eGxhbih0bWF0Y2hlci0+ a2V5LCBrZXksIGl0ZW0sIGlubmVyKTsNCj4gIAkJYnJlYWs7DQo+ICsJY2FzZSBSVEVfRkxPV19J VEVNX1RZUEVfTUVUQToNCj4gKwkJZmxvd19kdl90cmFuc2xhdGVfaXRlbV9tZXRhKHRtYXRjaGVy LT5rZXksIGtleSwgaXRlbSk7DQo+ICsJCWJyZWFrOw0KPiAgCWNhc2UgUlRFX0ZMT1dfSVRFTV9U WVBFX0lDTVA6DQo+ICAJY2FzZSBSVEVfRkxPV19JVEVNX1RZUEVfTVBMUzoNCj4gIAljYXNlIFJU RV9GTE9XX0lURU1fVFlQRV9TQ1RQOg0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NS9t bHg1X2Zsb3dfdmVyYnMuYyBiL2RyaXZlcnMvbmV0L21seDUvbWx4NV9mbG93X3ZlcmJzLmMNCj4g aW5kZXggNDhlODE2ZC4uM2M0MjAxNiAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9uZXQvbWx4NS9t bHg1X2Zsb3dfdmVyYnMuYw0KPiArKysgYi9kcml2ZXJzL25ldC9tbHg1L21seDVfZmxvd192ZXJi cy5jDQo+IEBAIC0xMjcyLDYgKzEyNzIsNyBAQCBzdHJ1Y3QgaWJ2X3NwZWNfaGVhZGVyIHsNCj4g IAkJCWJyZWFrOw0KPiAgCQljYXNlIFJURV9GTE9XX0FDVElPTl9UWVBFX0ZMQUc6DQo+ICAJCQly ZXQgPSBtbHg1X2Zsb3dfdmFsaWRhdGVfYWN0aW9uX2ZsYWcoYWN0aW9uX2ZsYWdzLA0KPiArCQkJ CQkJCSAgICAgYXR0ciwNCj4gIAkJCQkJCQkgICAgIGVycm9yKTsNCj4gIAkJCWlmIChyZXQgPCAw KQ0KPiAgCQkJCXJldHVybiByZXQ7DQo+IEBAIC0xMjgwLDYgKzEyODEsNyBAQCBzdHJ1Y3QgaWJ2 X3NwZWNfaGVhZGVyIHsNCj4gIAkJY2FzZSBSVEVfRkxPV19BQ1RJT05fVFlQRV9NQVJLOg0KPiAg CQkJcmV0ID0gbWx4NV9mbG93X3ZhbGlkYXRlX2FjdGlvbl9tYXJrKGFjdGlvbl9mbGFncywNCj4g IAkJCQkJCQkgICAgIGFjdGlvbnMsDQo+ICsJCQkJCQkJICAgICBhdHRyLA0KPiAgCQkJCQkJCSAg ICAgZXJyb3IpOw0KPiAgCQkJaWYgKHJldCA8IDApDQo+ICAJCQkJcmV0dXJuIHJldDsNCj4gQEAg LTEyODcsMjcgKzEyODksMzYgQEAgc3RydWN0IGlidl9zcGVjX2hlYWRlciB7DQo+ICAJCQlicmVh azsNCj4gIAkJY2FzZSBSVEVfRkxPV19BQ1RJT05fVFlQRV9EUk9QOg0KPiAgCQkJcmV0ID0gbWx4 NV9mbG93X3ZhbGlkYXRlX2FjdGlvbl9kcm9wKGFjdGlvbl9mbGFncywNCj4gKwkJCQkJCQkgICAg IGF0dHIsDQo+ICAJCQkJCQkJICAgICBlcnJvcik7DQo+ICAJCQlpZiAocmV0IDwgMCkNCj4gIAkJ CQlyZXR1cm4gcmV0Ow0KPiAgCQkJYWN0aW9uX2ZsYWdzIHw9IE1MWDVfQUNUSU9OX0RST1A7DQo+ ICAJCQlicmVhazsNCj4gIAkJY2FzZSBSVEVfRkxPV19BQ1RJT05fVFlQRV9RVUVVRToNCj4gLQkJ CXJldCA9IG1seDVfZmxvd192YWxpZGF0ZV9hY3Rpb25fcXVldWUoYWN0aW9uX2ZsYWdzLCBkZXYs DQo+IC0JCQkJCQkJICAgICAgYWN0aW9ucywgZXJyb3IpOw0KPiArCQkJcmV0ID0gbWx4NV9mbG93 X3ZhbGlkYXRlX2FjdGlvbl9xdWV1ZShhY3Rpb25fZmxhZ3MsDQo+ICsJCQkJCQkJICAgICAgZGV2 LA0KPiArCQkJCQkJCSAgICAgIGFjdGlvbnMsDQo+ICsJCQkJCQkJICAgICAgYXR0ciwNCj4gKwkJ CQkJCQkgICAgICBlcnJvcik7DQo+ICAJCQlpZiAocmV0IDwgMCkNCj4gIAkJCQlyZXR1cm4gcmV0 Ow0KPiAgCQkJYWN0aW9uX2ZsYWdzIHw9IE1MWDVfQUNUSU9OX1FVRVVFOw0KPiAgCQkJYnJlYWs7 DQo+ICAJCWNhc2UgUlRFX0ZMT1dfQUNUSU9OX1RZUEVfUlNTOg0KPiAtCQkJcmV0ID0gbWx4NV9m bG93X3ZhbGlkYXRlX2FjdGlvbl9yc3MoYWN0aW9uX2ZsYWdzLCBkZXYsDQo+IC0JCQkJCQkJICAg IGFjdGlvbnMsIGVycm9yKTsNCj4gKwkJCXJldCA9IG1seDVfZmxvd192YWxpZGF0ZV9hY3Rpb25f cnNzKGFjdGlvbl9mbGFncywNCj4gKwkJCQkJCQkgICAgZGV2LA0KPiArCQkJCQkJCSAgICBhY3Rp b25zLA0KPiArCQkJCQkJCSAgICBhdHRyLA0KPiArCQkJCQkJCSAgICBlcnJvcik7DQo+ICAJCQlp ZiAocmV0IDwgMCkNCj4gIAkJCQlyZXR1cm4gcmV0Ow0KPiAgCQkJYWN0aW9uX2ZsYWdzIHw9IE1M WDVfQUNUSU9OX1JTUzsNCj4gIAkJCWJyZWFrOw0KPiAgCQljYXNlIFJURV9GTE9XX0FDVElPTl9U WVBFX0NPVU5UOg0KPiAtCQkJcmV0ID0gbWx4NV9mbG93X3ZhbGlkYXRlX2FjdGlvbl9jb3VudChk ZXYsIGVycm9yKTsNCj4gKwkJCXJldCA9IG1seDVfZmxvd192YWxpZGF0ZV9hY3Rpb25fY291bnQo ZGV2LA0KPiArCQkJCQkJCSAgICAgIGF0dHIsDQo+ICsJCQkJCQkJICAgICAgZXJyb3IpOw0KPiAg CQkJaWYgKHJldCA8IDApDQo+ICAJCQkJcmV0dXJuIHJldDsNCj4gIAkJCWFjdGlvbl9mbGFncyB8 PSBNTFg1X0FDVElPTl9DT1VOVDsNCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDUvbWx4 NV9wcm0uaCBiL2RyaXZlcnMvbmV0L21seDUvbWx4NV9wcm0uaCBpbmRleCAxMTdjZWM3Li4yZjMz YWVmIDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL25ldC9tbHg1L21seDVfcHJtLmgNCj4gKysrIGIv ZHJpdmVycy9uZXQvbWx4NS9tbHg1X3BybS5oDQo+IEBAIC0xNTksNyArMTU5LDcgQEAgc3RydWN0 IG1seDVfd3FlX2V0aF9zZWdfc21hbGwgew0KPiAgCXVpbnQ4X3QJY3NfZmxhZ3M7DQo+ICAJdWlu dDhfdAlyc3ZkMTsNCj4gIAl1aW50MTZfdCBtc3M7DQo+IC0JdWludDMyX3QgcnN2ZDI7DQo+ICsJ dWludDMyX3QgZmxvd190YWJsZV9tZXRhZGF0YTsNCj4gIAl1aW50MTZfdCBpbmxpbmVfaGRyX3N6 Ow0KPiAgCXVpbnQ4X3QgaW5saW5lX2hkclsyXTsNCj4gIH0gX19ydGVfYWxpZ25lZChNTFg1X1dR RV9EV09SRF9TSVpFKTsNCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDUvbWx4NV9yeHR4 LmMgYi9kcml2ZXJzL25ldC9tbHg1L21seDVfcnh0eC5jIGluZGV4IDJkMTRmOGEuLjA4MGRlNTcN Cj4gMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvbmV0L21seDUvbWx4NV9yeHR4LmMNCj4gKysrIGIv ZHJpdmVycy9uZXQvbWx4NS9tbHg1X3J4dHguYw0KPiBAQCAtNTIzLDYgKzUyMyw3IEBADQo+ICAJ CXVpbnQ4X3QgdHNvID0gdHhxLT50c29fZW4gJiYgKGJ1Zi0+b2xfZmxhZ3MgJiBQS1RfVFhfVENQ X1NFRyk7DQo+ICAJCXVpbnQzMl90IHN3cF9vZmZzZXRzID0gMDsNCj4gIAkJdWludDhfdCBzd3Bf dHlwZXMgPSAwOw0KPiArCQl1aW50MzJfdCBtZXRhZGF0YSA9IDA7DQo+ICAJCXVpbnQxNl90IHRz b19zZWdzeiA9IDA7DQo+ICAjaWZkZWYgTUxYNV9QTURfU09GVF9DT1VOVEVSUw0KPiAgCQl1aW50 MzJfdCB0b3RhbF9sZW5ndGggPSAwOw0KPiBAQCAtNTY2LDYgKzU2Nyw5IEBADQo+ICAJCWNzX2Zs YWdzID0gdHhxX29sX2Nrc3VtX3RvX2NzKGJ1Zik7DQo+ICAJCXR4cV9tYnVmX3RvX3N3cCh0eHEs IGJ1ZiwgKHVpbnQ4X3QgKikmc3dwX29mZnNldHMsICZzd3BfdHlwZXMpOw0KPiAgCQlyYXcgPSAo KHVpbnQ4X3QgKikodWludHB0cl90KXdxZSkgKyAyICogTUxYNV9XUUVfRFdPUkRfU0laRTsNCj4g KwkJLyogQ29weSBtZXRhZGF0YSBmcm9tIG1idWYgaWYgdmFsaWQgKi8NCj4gKwkJaWYgKGJ1Zi0+ b2xfZmxhZ3MgJiBQS1RfVFhfTUVUQURBVEEpDQo+ICsJCQltZXRhZGF0YSA9IGJ1Zi0+aGFzaC5m ZGlyLmhpOw0KPiAgCQkvKiBSZXBsYWNlIHRoZSBFdGhlcm5ldCB0eXBlIGJ5IHRoZSBWTEFOIGlm IG5lY2Vzc2FyeS4gKi8NCj4gIAkJaWYgKGJ1Zi0+b2xfZmxhZ3MgJiBQS1RfVFhfVkxBTl9QS1Qp IHsNCj4gIAkJCXVpbnQzMl90IHZsYW4gPSBydGVfY3B1X3RvX2JlXzMyKDB4ODEwMDAwMDAgfCBA QCAtNzgxLDcgKzc4NSw3IEBADQo+ICAJCQkJc3dwX29mZnNldHMsDQo+ICAJCQkJY3NfZmxhZ3Mg fCAoc3dwX3R5cGVzIDw8IDgpIHwNCj4gIAkJCQkocnRlX2NwdV90b19iZV8xNih0c29fc2Vnc3op IDw8IDE2KSwNCj4gLQkJCQkwLA0KPiArCQkJCXJ0ZV9jcHVfdG9fYmVfMzIobWV0YWRhdGEpLA0K PiAgCQkJCShlaGRyIDw8IDE2KSB8IHJ0ZV9jcHVfdG9fYmVfMTYodHNvX2hlYWRlcl9zeiksDQo+ ICAJCQl9Ow0KPiAgCQl9IGVsc2Ugew0KPiBAQCAtNzk1LDcgKzc5OSw3IEBADQo+ICAJCQl3cWUt PmVzZWcgPSAocnRlX3YxMjh1MzJfdCl7DQo+ICAJCQkJc3dwX29mZnNldHMsDQo+ICAJCQkJY3Nf ZmxhZ3MgfCAoc3dwX3R5cGVzIDw8IDgpLA0KPiAtCQkJCTAsDQo+ICsJCQkJcnRlX2NwdV90b19i ZV8zMihtZXRhZGF0YSksDQo+ICAJCQkJKGVoZHIgPDwgMTYpIHwgcnRlX2NwdV90b19iZV8xNihw a3RfaW5saW5lX3N6KSwNCj4gIAkJCX07DQo+ICAJCX0NCj4gQEAgLTg2MSw3ICs4NjUsNyBAQA0K PiAgCW1wdy0+d3FlLT5lc2VnLmlubGluZV9oZHJfc3ogPSAwOw0KPiAgCW1wdy0+d3FlLT5lc2Vn LnJzdmQwID0gMDsNCj4gIAltcHctPndxZS0+ZXNlZy5yc3ZkMSA9IDA7DQo+IC0JbXB3LT53cWUt PmVzZWcucnN2ZDIgPSAwOw0KPiArCW1wdy0+d3FlLT5lc2VnLmZsb3dfdGFibGVfbWV0YWRhdGEg PSAwOw0KPiAgCW1wdy0+d3FlLT5jdHJsWzBdID0gcnRlX2NwdV90b19iZV8zMigoTUxYNV9PUENf TU9EX01QVyA8PCAyNCkgfA0KPiAgCQkJCQkgICAgICh0eHEtPndxZV9jaSA8PCA4KSB8DQo+ICAJ CQkJCSAgICAgTUxYNV9PUENPREVfVFNPKTsNCj4gQEAgLTk3MSw2ICs5NzUsOCBAQA0KPiAgCQlp ZiAoKG1wdy5zdGF0ZSA9PSBNTFg1X01QV19TVEFURV9PUEVORUQpICYmDQo+ICAJCSAgICAoKG1w dy5sZW4gIT0gbGVuZ3RoKSB8fA0KPiAgCQkgICAgIChzZWdzX24gIT0gMSkgfHwNCj4gKwkJICAg ICAobXB3LndxZS0+ZXNlZy5mbG93X3RhYmxlX21ldGFkYXRhICE9DQo+ICsJCQkJcnRlX2NwdV90 b19iZV8zMihidWYtPmhhc2guZmRpci5oaSkpIHx8DQo+ICAJCSAgICAgKG1wdy53cWUtPmVzZWcu Y3NfZmxhZ3MgIT0gY3NfZmxhZ3MpKSkNCj4gIAkJCW1seDVfbXB3X2Nsb3NlKHR4cSwgJm1wdyk7 DQo+ICAJCWlmIChtcHcuc3RhdGUgPT0gTUxYNV9NUFdfU1RBVEVfQ0xPU0VEKSB7IEBAIC05ODQs NiArOTkwLDggQEANCj4gIAkJCW1heF93cWUgLT0gMjsNCj4gIAkJCW1seDVfbXB3X25ldyh0eHEs ICZtcHcsIGxlbmd0aCk7DQo+ICAJCQltcHcud3FlLT5lc2VnLmNzX2ZsYWdzID0gY3NfZmxhZ3M7 DQo+ICsJCQltcHcud3FlLT5lc2VnLmZsb3dfdGFibGVfbWV0YWRhdGEgPQ0KPiArCQkJCXJ0ZV9j cHVfdG9fYmVfMzIoYnVmLT5oYXNoLmZkaXIuaGkpOw0KPiAgCQl9DQo+ICAJCS8qIE11bHRpLXNl Z21lbnQgcGFja2V0cyBtdXN0IGJlIGFsb25lIGluIHRoZWlyIE1QVy4gKi8NCj4gIAkJYXNzZXJ0 KChzZWdzX24gPT0gMSkgfHwgKG1wdy5wa3RzX24gPT0gMCkpOyBAQCAtMTA4Miw3ICsxMDkwLDcg QEANCj4gIAltcHctPndxZS0+ZXNlZy5jc19mbGFncyA9IDA7DQo+ICAJbXB3LT53cWUtPmVzZWcu cnN2ZDAgPSAwOw0KPiAgCW1wdy0+d3FlLT5lc2VnLnJzdmQxID0gMDsNCj4gLQltcHctPndxZS0+ ZXNlZy5yc3ZkMiA9IDA7DQo+ICsJbXB3LT53cWUtPmVzZWcuZmxvd190YWJsZV9tZXRhZGF0YSA9 IDA7DQo+ICAJaW5sID0gKHN0cnVjdCBtbHg1X3dxZV9pbmxfc21hbGwgKikNCj4gIAkJKCgodWlu dHB0cl90KW1wdy0+d3FlKSArIDIgKiBNTFg1X1dRRV9EV09SRF9TSVpFKTsNCj4gIAltcHctPmRh dGEucmF3ID0gKHVpbnQ4X3QgKikmaW5sLT5yYXc7DQo+IEBAIC0xMTk5LDEyICsxMjA3LDE2IEBA DQo+ICAJCWlmIChtcHcuc3RhdGUgPT0gTUxYNV9NUFdfU1RBVEVfT1BFTkVEKSB7DQo+ICAJCQlp ZiAoKG1wdy5sZW4gIT0gbGVuZ3RoKSB8fA0KPiAgCQkJICAgIChzZWdzX24gIT0gMSkgfHwNCj4g KwkJCSAgICAobXB3LndxZS0+ZXNlZy5mbG93X3RhYmxlX21ldGFkYXRhICE9DQo+ICsJCQkJCXJ0 ZV9jcHVfdG9fYmVfMzIoYnVmLT5oYXNoLmZkaXIuaGkpKSB8fA0KDQpTaGFsbCB3ZSBjaGVjayBi dWYtPm9sX2ZsYWdzICYgUEtUX1RYX01FVEFEQVRBIGhlcmU/IFNhbWUgcXVlc3Rpb24gdG8gc2lt aWxhciBjb2RlIGJlbG93Lg0KDQo+ICAJCQkgICAgKG1wdy53cWUtPmVzZWcuY3NfZmxhZ3MgIT0g Y3NfZmxhZ3MpKQ0KPiAgCQkJCW1seDVfbXB3X2Nsb3NlKHR4cSwgJm1wdyk7DQo+ICAJCX0gZWxz ZSBpZiAobXB3LnN0YXRlID09IE1MWDVfTVBXX0lOTF9TVEFURV9PUEVORUQpIHsNCj4gIAkJCWlm ICgobXB3LmxlbiAhPSBsZW5ndGgpIHx8DQo+ICAJCQkgICAgKHNlZ3NfbiAhPSAxKSB8fA0KPiAg CQkJICAgIChsZW5ndGggPiBpbmxpbmVfcm9vbSkgfHwNCj4gKwkJCSAgICAobXB3LndxZS0+ZXNl Zy5mbG93X3RhYmxlX21ldGFkYXRhICE9DQo+ICsJCQkJCXJ0ZV9jcHVfdG9fYmVfMzIoYnVmLT5o YXNoLmZkaXIuaGkpKSB8fA0KPiAgCQkJICAgIChtcHcud3FlLT5lc2VnLmNzX2ZsYWdzICE9IGNz X2ZsYWdzKSkgew0KPiAgCQkJCW1seDVfbXB3X2lubGluZV9jbG9zZSh0eHEsICZtcHcpOw0KPiAg CQkJCWlubGluZV9yb29tID0NCj4gQEAgLTEyMjQsMTIgKzEyMzYsMjAgQEANCj4gIAkJCQltYXhf d3FlIC09IDI7DQo+ICAJCQkJbWx4NV9tcHdfbmV3KHR4cSwgJm1wdywgbGVuZ3RoKTsNCj4gIAkJ CQltcHcud3FlLT5lc2VnLmNzX2ZsYWdzID0gY3NfZmxhZ3M7DQo+ICsJCQkJLyogQ29weSBtZXRh ZGF0YSBmcm9tIG1idWYgaWYgdmFsaWQgKi8NCj4gKwkJCQlpZiAoYnVmLT5vbF9mbGFncyAmIFBL VF9UWF9NRVRBREFUQSkNCj4gKwkJCQkJbXB3LndxZS0+ZXNlZy5mbG93X3RhYmxlX21ldGFkYXRh ID0NCj4gKwkJCQkJcnRlX2NwdV90b19iZV8zMihidWYtPmhhc2guZmRpci5oaSk7DQo+ICAJCQl9 IGVsc2Ugew0KPiAgCQkJCWlmICh1bmxpa2VseShtYXhfd3FlIDwgd3FlX2lubF9uKSkNCj4gIAkJ CQkJYnJlYWs7DQo+ICAJCQkJbWF4X3dxZSAtPSB3cWVfaW5sX247DQo+ICAJCQkJbWx4NV9tcHdf aW5saW5lX25ldyh0eHEsICZtcHcsIGxlbmd0aCk7DQo+ICAJCQkJbXB3LndxZS0+ZXNlZy5jc19m bGFncyA9IGNzX2ZsYWdzOw0KPiArCQkJCS8qIENvcHkgbWV0YWRhdGEgZnJvbSBtYnVmIGlmIHZh bGlkICovDQo+ICsJCQkJaWYgKGJ1Zi0+b2xfZmxhZ3MgJiBQS1RfVFhfTUVUQURBVEEpDQo+ICsJ CQkJCW1wdy53cWUtPmVzZWcuZmxvd190YWJsZV9tZXRhZGF0YSA9DQo+ICsJCQkJCXJ0ZV9jcHVf dG9fYmVfMzIoYnVmLT5oYXNoLmZkaXIuaGkpOw0KPiAgCQkJfQ0KPiAgCQl9DQo+ICAJCS8qIE11 bHRpLXNlZ21lbnQgcGFja2V0cyBtdXN0IGJlIGFsb25lIGluIHRoZWlyIE1QVy4gKi8gQEAgLTE0 ODIsNiArMTUwMiw4IEBADQo+ICAJCQkgICAgKGxlbmd0aCA8PSB0eHEtPmlubGluZV9tYXhfcGFj a2V0X3N6ICYmDQo+ICAJCQkgICAgIGlubF9wYWQgKyBzaXplb2YoaW5sX2hkcikgKyBsZW5ndGgg Pg0KPiAgCQkJICAgICBtcHdfcm9vbSkgfHwNCj4gKwkJCSAgICAobXB3LndxZS0+ZXNlZy5mbG93 X3RhYmxlX21ldGFkYXRhICE9DQo+ICsJCQkJCXJ0ZV9jcHVfdG9fYmVfMzIoYnVmLT5oYXNoLmZk aXIuaGkpKSB8fA0KPiAgCQkJICAgIChtcHcud3FlLT5lc2VnLmNzX2ZsYWdzICE9IGNzX2ZsYWdz KSkNCj4gIAkJCQltYXhfd3FlIC09IG1seDVfZW1wd19jbG9zZSh0eHEsICZtcHcpOw0KPiAgCQl9 DQo+IEBAIC0xNTA1LDYgKzE1MjcsMTAgQEANCj4gIAkJCQkgICAgc2l6ZW9mKGlubF9oZHIpICsg bGVuZ3RoIDw9IG1wd19yb29tICYmDQo+ICAJCQkJICAgICF0eHEtPm1wd19oZHJfZHNlZzsNCj4g IAkJCW1wdy53cWUtPmVzZWcuY3NfZmxhZ3MgPSBjc19mbGFnczsNCj4gKwkJCS8qIENvcHkgbWV0 YWRhdGEgZnJvbSBtYnVmIGlmIHZhbGlkICovDQo+ICsJCQlpZiAoYnVmLT5vbF9mbGFncyAmIFBL VF9UWF9NRVRBREFUQSkNCj4gKwkJCQltcHcud3FlLT5lc2VnLmZsb3dfdGFibGVfbWV0YWRhdGEg PQ0KPiArCQkJCQlydGVfY3B1X3RvX2JlXzMyKGJ1Zi0+aGFzaC5mZGlyLmhpKTsNCj4gIAkJfSBl bHNlIHsNCj4gIAkJCS8qIEV2YWx1YXRlIHdoZXRoZXIgdGhlIG5leHQgcGFja2V0IGNhbiBiZSBp bmxpbmVkLg0KPiAgCQkJICogSW5saW5pbmlnIGlzIHBvc3NpYmxlIHdoZW46DQo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL25ldC9tbHg1L21seDVfcnh0eF92ZWMuYyBiL2RyaXZlcnMvbmV0L21seDUv bWx4NV9yeHR4X3ZlYy5jDQo+IGluZGV4IDBhNGFlZDguLmRiMzY2OTkgMTAwNjQ0DQo+IC0tLSBh L2RyaXZlcnMvbmV0L21seDUvbWx4NV9yeHR4X3ZlYy5jDQo+ICsrKyBiL2RyaXZlcnMvbmV0L21s eDUvbWx4NV9yeHR4X3ZlYy5jDQo+IEBAIC00OCwyNSArNDgsMzkgQEANCj4gICAqICAgTnVtYmVy IG9mIHBhY2tldHMuDQo+ICAgKiBAcGFyYW0gY3NfZmxhZ3MNCj4gICAqICAgUG9pbnRlciBvZiBm bGFncyB0byBiZSByZXR1cm5lZC4NCj4gKyAqIEBwYXJhbSB0eHFfb2ZmbG9hZHMNCj4gKyAqICAg T2ZmbG9hZHMgZW5hYmxlZCBvbiBUeCBxdWV1ZQ0KPiAgICoNCj4gICAqIEByZXR1cm4NCj4gICAq ICAgTnVtYmVyIG9mIHBhY2tldHMgaGF2aW5nIHNhbWUgb2xfZmxhZ3MuDQo+ICsgKiAgIElmIFBL VF9UWF9NRVRBREFUQSBpcyBzZXQgaW4gb2xfZmxhZ3MsIHBhY2tldHMgbXVzdCBoYXZlIHNhbWUg bWV0YWRhdGENCj4gKyAqICAgYXMgd2VsbC4NCg0KUGxlYXNlIG1vdmUgc3VjaCBmdW5jdGlvbiBk ZXNjcmlwdGlvbiBhYm92ZSBtZW1iZXIgZGVzY3JpcHRpb24uDQoNCj4gICAqLw0KPiAgc3RhdGlj IGlubGluZSB1bnNpZ25lZCBpbnQNCj4gLXR4cV9jYWxjX29mZmxvYWQoc3RydWN0IHJ0ZV9tYnVm ICoqcGt0cywgdWludDE2X3QgcGt0c19uLCB1aW50OF90ICpjc19mbGFncykNCj4gK3R4cV9jYWxj X29mZmxvYWQoc3RydWN0IHJ0ZV9tYnVmICoqcGt0cywgdWludDE2X3QgcGt0c19uLA0KPiArCQl1 aW50OF90ICpjc19mbGFncywgY29uc3QgdWludDY0X3QgdHhxX29mZmxvYWRzKQ0KPiAgew0KPiAg CXVuc2lnbmVkIGludCBwb3M7DQo+ICAJY29uc3QgdWludDY0X3Qgb2xfbWFzayA9DQo+ICAJCVBL VF9UWF9JUF9DS1NVTSB8IFBLVF9UWF9UQ1BfQ0tTVU0gfA0KPiAgCQlQS1RfVFhfVURQX0NLU1VN IHwgUEtUX1RYX1RVTk5FTF9HUkUgfA0KPiAtCQlQS1RfVFhfVFVOTkVMX1ZYTEFOIHwgUEtUX1RY X09VVEVSX0lQX0NLU1VNOw0KPiArCQlQS1RfVFhfVFVOTkVMX1ZYTEFOIHwgUEtUX1RYX09VVEVS X0lQX0NLU1VNIHwgUEtUX1RYX01FVEFEQVRBOw0KPiANCj4gIAlpZiAoIXBrdHNfbikNCj4gIAkJ cmV0dXJuIDA7DQo+ICAJLyogQ291bnQgdGhlIG51bWJlciBvZiBwYWNrZXRzIGhhdmluZyBzYW1l IG9sX2ZsYWdzLiAqLw0KPiAtCWZvciAocG9zID0gMTsgcG9zIDwgcGt0c19uOyArK3BvcykNCj4g LQkJaWYgKChwa3RzW3Bvc10tPm9sX2ZsYWdzIF4gcGt0c1swXS0+b2xfZmxhZ3MpICYgb2xfbWFz aykNCj4gKwlmb3IgKHBvcyA9IDE7IHBvcyA8IHBrdHNfbjsgKytwb3MpIHsNCj4gKwkJaWYgKCh0 eHFfb2ZmbG9hZHMgJiBNTFg1X1ZFQ19UWF9DS1NVTV9PRkZMT0FEX0NBUCkgJiYNCj4gKwkJCSgo cGt0c1twb3NdLT5vbF9mbGFncyBeIHBrdHNbMF0tPm9sX2ZsYWdzKSAmIG9sX21hc2spKQ0KPiAg CQkJYnJlYWs7DQo+ICsJCS8qIElmIHRoZSBtZXRhZGF0YSBvbF9mbGFnIGlzIHNldCwNCj4gKwkJ ICogbWV0YWRhdGEgbXVzdCBiZSBzYW1lIGluIGFsbCBwYWNrZXRzLg0KPiArCQkgKi8NCj4gKwkJ aWYgKCh0eHFfb2ZmbG9hZHMgJiBERVZfVFhfT0ZGTE9BRF9NQVRDSF9NRVRBREFUQSkgJiYNCj4g KwkJCShwa3RzW3Bvc10tPm9sX2ZsYWdzICYgUEtUX1RYX01FVEFEQVRBKSAmJg0KPiArCQkJcGt0 c1swXS0+aGFzaC5mZGlyLmhpICE9IHBrdHNbcG9zXS0+aGFzaC5mZGlyLmhpKQ0KPiArCQkJYnJl YWs7DQo+ICsJfQ0KPiAgCSpjc19mbGFncyA9IHR4cV9vbF9ja3N1bV90b19jcyhwa3RzWzBdKTsN Cj4gIAlyZXR1cm4gcG9zOw0KPiAgfQ0KPiBAQCAtMTM3LDggKzE1MSwxMCBAQA0KPiAgCQluID0g UlRFX01JTigodWludDE2X3QpKHBrdHNfbiAtIG5iX3R4KSwgTUxYNV9WUE1EX1RYX01BWF9CVVJT VCk7DQo+ICAJCWlmICh0eHEtPm9mZmxvYWRzICYgREVWX1RYX09GRkxPQURfTVVMVElfU0VHUykN Cj4gIAkJCW4gPSB0eHFfY291bnRfY29udGlnX3NpbmdsZV9zZWcoJnBrdHNbbmJfdHhdLCBuKTsN Cj4gLQkJaWYgKHR4cS0+b2ZmbG9hZHMgJiBNTFg1X1ZFQ19UWF9DS1NVTV9PRkZMT0FEX0NBUCkN Cj4gLQkJCW4gPSB0eHFfY2FsY19vZmZsb2FkKCZwa3RzW25iX3R4XSwgbiwgJmNzX2ZsYWdzKTsN Cj4gKwkJaWYgKHR4cS0+b2ZmbG9hZHMgJiAoTUxYNV9WRUNfVFhfQ0tTVU1fT0ZGTE9BRF9DQVAg fA0KPiArCQkJCQlERVZfVFhfT0ZGTE9BRF9NQVRDSF9NRVRBREFUQSkpDQo+ICsJCQluID0gdHhx X2NhbGNfb2ZmbG9hZCgmcGt0c1tuYl90eF0sIG4sDQo+ICsJCQkJCSAgICAgJmNzX2ZsYWdzLCB0 eHEtPm9mZmxvYWRzKTsNCj4gIAkJcmV0ID0gdHhxX2J1cnN0X3YodHhxLCAmcGt0c1tuYl90eF0s IG4sIGNzX2ZsYWdzKTsNCj4gIAkJbmJfdHggKz0gcmV0Ow0KPiAgCQlpZiAoIXJldCkNCj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDUvbWx4NV9yeHR4X3ZlYy5oIGIvZHJpdmVycy9uZXQv bWx4NS9tbHg1X3J4dHhfdmVjLmgNCj4gaW5kZXggZmI4ODRmOS4uZmRhNzAwNCAxMDA2NDQNCj4g LS0tIGEvZHJpdmVycy9uZXQvbWx4NS9tbHg1X3J4dHhfdmVjLmgNCj4gKysrIGIvZHJpdmVycy9u ZXQvbWx4NS9tbHg1X3J4dHhfdmVjLmgNCj4gQEAgLTIyLDYgKzIyLDcgQEANCj4gIC8qIEhXIG9m ZmxvYWQgY2FwYWJpbGl0aWVzIG9mIHZlY3Rvcml6ZWQgVHguICovICAjZGVmaW5lIE1MWDVfVkVD X1RYX09GRkxPQURfQ0FQIFwNCj4gIAkoTUxYNV9WRUNfVFhfQ0tTVU1fT0ZGTE9BRF9DQVAgfCBc DQo+ICsJIERFVl9UWF9PRkZMT0FEX01BVENIX01FVEFEQVRBIHwgXA0KPiAgCSBERVZfVFhfT0ZG TE9BRF9NVUxUSV9TRUdTKQ0KPiANCj4gIC8qDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9t bHg1L21seDVfcnh0eF92ZWNfbmVvbi5oIGIvZHJpdmVycy9uZXQvbWx4NS9tbHg1X3J4dHhfdmVj X25lb24uaA0KPiBpbmRleCBiMzdiNzM4Li4yMGM5NDI3IDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJz L25ldC9tbHg1L21seDVfcnh0eF92ZWNfbmVvbi5oDQo+ICsrKyBiL2RyaXZlcnMvbmV0L21seDUv bWx4NV9yeHR4X3ZlY19uZW9uLmgNCj4gQEAgLTIzNyw2ICsyMzcsNyBAQA0KPiAgCXVpbnQ4eDE2 X3QgKnRfd3FlOw0KPiAgCXVpbnQ4X3QgKmRzZWc7DQo+ICAJdWludDh4MTZfdCBjdHJsOw0KPiAr CXVpbnQzMl90IG1kOyAvKiBtZXRhZGF0YSAqLw0KPiANCj4gIAkvKiBNYWtlIHN1cmUgYWxsIHBh Y2tldHMgY2FuIGZpdCBpbnRvIGEgc2luZ2xlIFdRRS4gKi8NCj4gIAlhc3NlcnQoZWx0c19uID4g cGt0c19uKTsNCj4gQEAgLTI5MywxMCArMjk0LDExIEBADQo+ICAJY3RybCA9IHZxdGJsMXFfdTgo Y3RybCwgY3RybF9zaHVmX20pOw0KPiAgCXZzdDFxX3U4KCh2b2lkICopdF93cWUsIGN0cmwpOw0K PiAgCS8qIEZpbGwgRVNFRyBpbiB0aGUgaGVhZGVyLiAqLw0KPiArCW1kID0gcGt0c1swXS0+aGFz aC5mZGlyLmhpOw0KPiAgCXZzdDFxX3U4KCh2b2lkICopKHRfd3FlICsgMSksDQo+ICAJCSAoKHVp bnQ4eDE2X3QpIHsgMCwgMCwgMCwgMCwNCj4gIAkJCQkgY3NfZmxhZ3MsIDAsIDAsIDAsDQo+IC0J CQkJIDAsIDAsIDAsIDAsDQo+ICsJCQkJIG1kID4+IDI0LCBtZCA+PiAxNiwgbWQgPj4gOCwgbWQs DQo+ICAJCQkJIDAsIDAsIDAsIDAgfSkpOw0KPiAgI2lmZGVmIE1MWDVfUE1EX1NPRlRfQ09VTlRF UlMNCj4gIAl0eHEtPnN0YXRzLm9wYWNrZXRzICs9IHBrdHNfbjsNCj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvbmV0L21seDUvbWx4NV9yeHR4X3ZlY19zc2UuaCBiL2RyaXZlcnMvbmV0L21seDUvbWx4 NV9yeHR4X3ZlY19zc2UuaA0KPiBpbmRleCA1NGIzNzgzLi43Yzg1MzVjIDEwMDY0NA0KPiAtLS0g YS9kcml2ZXJzL25ldC9tbHg1L21seDVfcnh0eF92ZWNfc3NlLmgNCj4gKysrIGIvZHJpdmVycy9u ZXQvbWx4NS9tbHg1X3J4dHhfdmVjX3NzZS5oDQo+IEBAIC0yMzYsNiArMjM2LDcgQEANCj4gIAkJ CSAgICAgIDAsICAxLCAgMiwgIDMgIC8qIGJzd2FwMzIgKi8pOw0KPiAgCV9fbTEyOGkgKnRfd3Fl LCAqZHNlZzsNCj4gIAlfX20xMjhpIGN0cmw7DQo+ICsJdWludDMyX3QgbWQ7IC8qIG1ldGFkYXRh ICovDQo+IA0KPiAgCS8qIE1ha2Ugc3VyZSBhbGwgcGFja2V0cyBjYW4gZml0IGludG8gYSBzaW5n bGUgV1FFLiAqLw0KPiAgCWFzc2VydChlbHRzX24gPiBwa3RzX24pOw0KPiBAQCAtMjkyLDkgKzI5 MywxMCBAQA0KPiAgCWN0cmwgPSBfbW1fc2h1ZmZsZV9lcGk4KGN0cmwsIHNodWZfbWFza19jdHJs KTsNCj4gIAlfbW1fc3RvcmVfc2kxMjgodF93cWUsIGN0cmwpOw0KPiAgCS8qIEZpbGwgRVNFRyBp biB0aGUgaGVhZGVyLiAqLw0KPiArCW1kID0gcGt0c1swXS0+aGFzaC5mZGlyLmhpOw0KPiAgCV9t bV9zdG9yZV9zaTEyOCh0X3dxZSArIDEsDQo+ICAJCQlfbW1fc2V0X2VwaTgoMCwgMCwgMCwgMCwN Cj4gLQkJCQkgICAgIDAsIDAsIDAsIDAsDQo+ICsJCQkJICAgICBtZCwgbWQgPj4gOCwgbWQgPj4g MTYsIG1kID4+IDI0LA0KPiAgCQkJCSAgICAgMCwgMCwgMCwgY3NfZmxhZ3MsDQo+ICAJCQkJICAg ICAwLCAwLCAwLCAwKSk7DQo+ICAjaWZkZWYgTUxYNV9QTURfU09GVF9DT1VOVEVSUw0KPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NS9tbHg1X3R4cS5jIGIvZHJpdmVycy9uZXQvbWx4NS9t bHg1X3R4cS5jIGluZGV4IGY5YmM0NzMuLjcyNjNmYjEgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMv bmV0L21seDUvbWx4NV90eHEuYw0KPiArKysgYi9kcml2ZXJzL25ldC9tbHg1L21seDVfdHhxLmMN Cj4gQEAgLTEyOCw2ICsxMjgsMTIgQEANCj4gIAkJCW9mZmxvYWRzIHw9IChERVZfVFhfT0ZGTE9B RF9WWExBTl9UTkxfVFNPIHwNCj4gIAkJCQkgICAgIERFVl9UWF9PRkZMT0FEX0dSRV9UTkxfVFNP KTsNCj4gIAl9DQo+ICsNCj4gKyNpZmRlZiBIQVZFX0lCVl9GTE9XX0RWX1NVUFBPUlQNCj4gKwlp ZiAoY29uZmlnLT5kdl9mbG93X2VuKQ0KPiArCQlvZmZsb2FkcyB8PSBERVZfVFhfT0ZGTE9BRF9N QVRDSF9NRVRBREFUQTsgI2VuZGlmDQo+ICsNCj4gIAlyZXR1cm4gb2ZmbG9hZHM7DQo+ICB9DQo+ IA0KPiAtLQ0KPiAxLjguMy4xDQoNCg==