From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Shevchenko, Andriy" Subject: Re: [PATCH v7] platform:x86: add Intel P-Unit mailbox IPC driver Date: Fri, 9 Oct 2015 13:33:44 +0000 Message-ID: <1444397622.8361.544.camel@intel.com> References: <1444380548-17366-1-git-send-email-qipeng.zha@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga11.intel.com ([192.55.52.93]:57581 "EHLO mga11.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752481AbbJINds (ORCPT ); Fri, 9 Oct 2015 09:33:48 -0400 In-Reply-To: <1444380548-17366-1-git-send-email-qipeng.zha@intel.com> Content-Language: en-US Content-ID: Sender: platform-driver-x86-owner@vger.kernel.org List-ID: To: "platform-driver-x86@vger.kernel.org" , "Zha, Qipeng" Cc: "dvhart@infradead.org" , "Westerberg, Mika" T24gRnJpLCAyMDE1LTEwLTA5IGF0IDE2OjQ5ICswODAwLCBRaXBlbmcgWmhhIHdyb3RlOg0KPiBU aGlzIGRyaXZlciBwcm92aWRlcyBzdXBwb3J0IGZvciBQLVVuaXQgbWFpbGJveCBJUEMgb24gSW50 ZWwgDQo+IHBsYXRmb3Jtcy4NCj4gVGhlIGhlYXJ0IG9mIHRoZSBQLVVuaXQgaXMgdGhlIEZveHRv biBtaWNyb2NvbnRyb2xsZXIgYW5kIGl0cyANCj4gZmlybXdhcmUsDQo+IHdoaWNoIHByb3ZpZGUg bWFpbGJveCBpbnRlcmZhY2UgZm9yIHBvd2VyIG1hbmFnZW1lbnQgdXNhZ2UuDQoNCkV2ZXJ5dGhp bmcgaXMgcXVpdGUgb2theSwgZXhjZXB0IHRoaXMgQkFSIHRoaW5neS4NCg0KQ2FuIHlvdSBwcm92 aWRlIGEgRFNEVCBleGNlcnB0IGZvciB0aGUgZGV2aWNlIHRvIHNlZSB3aGF0IGlzIHRoZXJlPw0K DQpJIGNhbid0IGZpbmQgc3VjaCBkZXZpY2UgKGJ5IEFDUEkgaWQpIGluIHRoZSB0YWJsZXMgb2Yg dGhlIGFjY2Vzc2libGUNCmhhcmR3YXJlIGluIG91ciBsYWIuDQoNCj4gDQo+IFNpZ25lZC1vZmYt Ynk6IFFpcGVuZyBaaGEgPHFpcGVuZy56aGFAaW50ZWwuY29tPg0KPiANCj4gLS0tDQo+IGNoYW5n ZSBpbiB2Nw0KPiAgVXBkYXRlIGlwY19lcnJfc3RyaW5nKCkncyByZXR1cm4gdHlwZSB0byAiY29u c3QgY2hhciAqIiBmcm9tICJjaGFyIA0KPiAqIjsNCj4gIEFkZCB0ZXJtaW5hdG9yIGluIGFjcGkg aWQgYXJyYXkuDQo+IA0KPiBjaGFuZ2UgaW4gdjYNCj4gIFVwZGF0ZSBoZWFkZXIgZmlsZTsNCj4g IFVwZGF0ZSBpbnRlcmZhY2Ugb2YgbG93bGV2ZWwgcmVnaXN0ZXIgYWNjZXNzOw0KPiAgUmVzdHJ1 Y3R1cmUgaW1wbGVtZW50YXRpb24gb2YgdHdvIGNvbW1hbmQgZnVuY3Rpb25zOw0KPiAgU2F2ZSBJ UEMgcHJpdmF0ZSBkYXRhIHBvaW50ZXIgdG8gcGRldidzIHByaXY7DQo+IA0KPiBjaGFuZ2UgaW4g djUNCj4gIEZpeCBjb21tZW5kIHN0eWxlIGluIGhlYWRlciBmaWxlOw0KPiAgUmVwbGFjZSBFSU5W QUwgd2l0aCBFTk9ERVYgaW4gc3R1YiBmdW5jdGlvbnM7DQo+ICBSZXBsYWNlIGlwY19lcnJfc291 cmNlcyBhcnJheSB3aXRoIGlwY19lcnJfc3RyaW5nIGZ1bmN0aW9uOw0KPiAgQ29ycmVjdCBjb21t ZW50czogImlmIGludmFsaWQiIC0+ICJpZiBub3QgdXNlZCI7DQo+ICBQcm9wYWdhdGUgcmV0dXJu IGVycm9yIG9mIGRldm1fcmVxdWVzdF9pcnEuDQo+IA0KPiBjaGFuZ2UgaW4gdjQNCj4gIEZpeCB0 d28gY29kZSBzdHlsZSBpc3N1ZXM6IG1ha2UgLyogYXMgYSB3aG9sZSBsaW5lIGFuZCByZXBsYWNl DQo+ICJyZXR1cm4gcmV0IiB3aXRoICJnb3RvIG91dCI7DQo+ICBSZXBsYWNlIC1FSU5WQUwgd2l0 aCAtRU5YSU8gZm9yIGZhaWx1cmVzIGR1ZSB0byByZXNvdXJjZS4NCj4gDQo+IGNoYW5nZSBpbiB2 Mw0KPiAgRml4IGNvbXBpbGUgaXNzdWUgaW4gaW50ZWxfcHVuaXRfaXBjLmgsIGl0IGhhcHBlbmVk IHdoZW4gYnVpbHQtaW4NCj4gYW5kIHRoZSBoZWFkZXIgZmlsZSBpcyBpbmNsdWRlZCBpbiBvdGhl ciBzb3VyY2UgZmlsZS4NCj4gDQo+IGNoYW5nZSBpbiB2Mg0KPiAgRml4IGlzc3VlcyBpbiBjb2Rl IHN0eWxlIGFuZCBjb21tZW50czsNCj4gIFJlbW92ZSAiZGVmYXVsdCB5IiBpbiBLY29uZmlnOw0K PiAgUmVtb3ZlIHNvbWUgaGVhZGVyIGZpbGVzOw0KPiAgUmVwbGFjZSByZXF1ZXN0X21lbV9yZWdp b24gd2l0aCBkZXZtX3JlcXVlc3RfbWVtX3JlZ2lvbiwNCj4gYW5kIHNhbWUgZm9yIHJlcXVlc3Rf aXJxOw0KPiAgQ2hhbmdlIHRvIHVzZSBwcmVmaXggb2YgSVBDX1BVTklUXyB0byBkZWZpbmUgY29t bWFuZHM7DQo+IC0tLQ0KPiAgTUFJTlRBSU5FUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAg fCAgIDQgKy0NCj4gIGFyY2gveDg2L2luY2x1ZGUvYXNtL2ludGVsX3B1bml0X2lwYy5oIHwgMTAx ICsrKysrKysrKysNCj4gIGRyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWcgICAgICAgICAgIHwg ICA2ICsNCj4gIGRyaXZlcnMvcGxhdGZvcm0veDg2L01ha2VmaWxlICAgICAgICAgIHwgICAxICsN Cj4gIGRyaXZlcnMvcGxhdGZvcm0veDg2L2ludGVsX3B1bml0X2lwYy5jIHwgMzM2IA0KPiArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4gIDUgZmlsZXMgY2hhbmdlZCwgNDQ3IGlu c2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBhcmNoL3g4 Ni9pbmNsdWRlL2FzbS9pbnRlbF9wdW5pdF9pcGMuaA0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvcGxhdGZvcm0veDg2L2ludGVsX3B1bml0X2lwYy5jDQo+IA0KPiBkaWZmIC0tZ2l0IGEv TUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUw0KPiBpbmRleCAxM2FjODYxLi5jZjcxMzg3IDEwMDY0 NA0KPiAtLS0gYS9NQUlOVEFJTkVSUw0KPiArKysgYi9NQUlOVEFJTkVSUw0KPiBAQCAtNTIwNywx MiArNTIwNywxNCBAQCBGOglpbmNsdWRlL3VhcGkvbGludXgvbWVpLmgNCj4gIEY6CWRyaXZlcnMv bWlzYy9tZWkvKg0KPiAgRjoJRG9jdW1lbnRhdGlvbi9taXNjLWRldmljZXMvbWVpLyoNCj4gIA0K PiAtSU5URUwgUE1DIElQQyBEUklWRVINCj4gK0lOVEVMIFBNQy9QLVVuaXQgSVBDIERSSVZFUg0K PiAgTToJWmhhIFFpcGVuZzxxaXBlbmcuemhhQGludGVsLmNvbT4NCj4gIEw6CXBsYXRmb3JtLWRy aXZlci14ODZAdmdlci5rZXJuZWwub3JnDQo+ICBTOglNYWludGFpbmVkDQo+ICBGOglkcml2ZXJz L3BsYXRmb3JtL3g4Ni9pbnRlbF9wbWNfaXBjLmMNCj4gK0Y6CWRyaXZlcnMvcGxhdGZvcm0veDg2 L2ludGVsX3B1bml0X2lwYy5jDQo+ICBGOglhcmNoL3g4Ni9pbmNsdWRlL2FzbS9pbnRlbF9wbWNf aXBjLmgNCj4gK0Y6CWFyY2gveDg2L2luY2x1ZGUvYXNtL2ludGVsX3B1bml0X2lwYy5oDQo+ICAN Cj4gIElPQzMgRVRIRVJORVQgRFJJVkVSDQo+ICBNOglSYWxmIEJhZWNobGUgPHJhbGZAbGludXgt bWlwcy5vcmc+DQo+IGRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pbnRlbF9wdW5p dF9pcGMuaCANCj4gYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pbnRlbF9wdW5pdF9pcGMuaA0KPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwLi4yMDFlYjlkDQo+IC0tLSAvZGV2 L251bGwNCj4gKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaW50ZWxfcHVuaXRfaXBjLmgNCj4g QEAgLTAsMCArMSwxMDEgQEANCj4gKyNpZm5kZWYgX0FTTV9YODZfSU5URUxfUFVOSVRfSVBDX0hf DQo+ICsjZGVmaW5lICBfQVNNX1g4Nl9JTlRFTF9QVU5JVF9JUENfSF8NCj4gKw0KPiArLyoNCj4g KyAqIFRocmVlIHR5cGVzIG9mIDhiaXQgUC1Vbml0IElQQyBjb21tYW5kcyBhcmUgc3VwcG9ydGVk LA0KPiArICogYml0Wzc6Nl06IFswMF06IEJJT1M7IFswMV06IEdURDsgWzEwXTogSVNQRC4NCj4g KyAqLw0KPiArdHlwZWRlZiBlbnVtIHsNCj4gKwlCSU9TX0lQQyA9IDAsDQo+ICsJR1REUklWRVJf SVBDLA0KPiArCUlTUERSSVZFUl9JUEMsDQo+ICsJUkVTRVJWRURfSVBDLA0KPiArfSBJUENfVFlQ RTsNCj4gKw0KPiArI2RlZmluZSBJUENfVFlQRV9PRkZTRVQJCQk2DQo+ICsjZGVmaW5lIElQQ19Q VU5JVF9CSU9TX0NNRF9CQVNFCQkoQklPU19JUEMgPDwgDQo+IElQQ19UWVBFX09GRlNFVCkNCj4g KyNkZWZpbmUgSVBDX1BVTklUX0dURF9DTURfQkFTRQkJKEdURERSSVZFUl9JUEMgPDwgDQo+IElQ Q19UWVBFX09GRlNFVCkNCj4gKyNkZWZpbmUgSVBDX1BVTklUX0lTUERfQ01EX0JBU0UJCShJU1BE UklWRVJfSVBDIDw8IA0KPiBJUENfVFlQRV9PRkZTRVQpDQo+ICsjZGVmaW5lIElQQ19QVU5JVF9D TURfVFlQRV9NQVNLCQkoUkVTRVJWRURfSVBDIDw8IA0KPiBJUENfVFlQRV9PRkZTRVQpDQo+ICsN Cj4gKy8qIEJJT1MgPT4gUGNvZGUgY29tbWFuZHMgKi8NCj4gKyNkZWZpbmUgSVBDX1BVTklUX0JJ T1NfWkVSTwkJCShJUENfUFVOSVRfQklPU19DTURfDQo+IEJBU0UgfCAweDAwKQ0KPiArI2RlZmlu ZSBJUENfUFVOSVRfQklPU19WUl9JTlRFUkZBQ0UJCShJUENfUFVOSVRfQklPU19DTURfDQo+IEJB U0UgfCAweDAxKQ0KPiArI2RlZmluZSBJUENfUFVOSVRfQklPU19SRUFEX1BDUwkJCShJUENfUFVO SVRfQg0KPiBJT1NfQ01EX0JBU0UgfCAweDAyKQ0KPiArI2RlZmluZSBJUENfUFVOSVRfQklPU19X UklURV9QQ1MJCShJUENfUFVOSVRfQklPU19DTURfDQo+IEJBU0UgfCAweDAzKQ0KPiArI2RlZmlu ZSBJUENfUFVOSVRfQklPU19SRUFEX1BDVV9DT05GSUcJCShJUENfUFVOSVRfQklPU19DTURfDQo+ IEJBU0UgfCAweDA0KQ0KPiArI2RlZmluZSBJUENfUFVOSVRfQklPU19XUklURV9QQ1VfQ09ORklH CQkoSVBDX1BVTklUX0INCj4gSU9TX0NNRF9CQVNFIHwgMHgwNSkNCj4gKyNkZWZpbmUgSVBDX1BV TklUX0JJT1NfUkVBRF9QTDFfU0VUVElORwkJKElQQ19QVU5JVF9CDQo+IElPU19DTURfQkFTRSB8 IDB4MDYpDQo+ICsjZGVmaW5lIElQQ19QVU5JVF9CSU9TX1dSSVRFX1BMMV9TRVRUSU5HCShJUENf UFVOSVRfQklPU19DTURfDQo+IEJBU0UgfCAweDA3KQ0KPiArI2RlZmluZSBJUENfUFVOSVRfQklP U19UUklHR0VSX1ZERF9SQU0JCShJUENfUFVOSVRfQklPU19DTURfDQo+IEJBU0UgfCAweDA4KQ0K PiArI2RlZmluZSBJUENfUFVOSVRfQklPU19SRUFEX1RFTEVfSU5GTwkJKElQQ19QVU5JVF9CSU9T X0NNRF8NCj4gQkFTRSB8IDB4MDkpDQo+ICsjZGVmaW5lIElQQ19QVU5JVF9CSU9TX1JFQURfVEVM RV9UUkFDRV9DVFJMCShJUENfUFVOSVRfQklPU19DTURfDQo+IEJBU0UgfCAweDBhKQ0KPiArI2Rl ZmluZSBJUENfUFVOSVRfQklPU19XUklURV9URUxFX1RSQUNFX0NUUkwJKElQQ19QVU5JVF9CSU9T X0NNRF8NCj4gQkFTRSB8IDB4MGIpDQo+ICsjZGVmaW5lIElQQ19QVU5JVF9CSU9TX1JFQURfVEVM RV9FVkVOVF9DVFJMCShJUENfUFVOSVRfQklPU19DTURfDQo+IEJBU0UgfCAweDBjKQ0KPiArI2Rl ZmluZSBJUENfUFVOSVRfQklPU19XUklURV9URUxFX0VWRU5UX0NUUkwJKElQQ19QVU5JVF9CSU9T X0NNRF8NCj4gQkFTRSB8IDB4MGQpDQo+ICsjZGVmaW5lIElQQ19QVU5JVF9CSU9TX1JFQURfVEVM RV9UUkFDRQkJKElQQ19QVU5JVF9CSU9TX0NNRF8NCj4gQkFTRSB8IDB4MGUpDQo+ICsjZGVmaW5l IElQQ19QVU5JVF9CSU9TX1dSSVRFX1RFTEVfVFJBQ0UJCShJUENfUFVOSVRfQg0KPiBJT1NfQ01E X0JBU0UgfCAweDBmKQ0KPiArI2RlZmluZSBJUENfUFVOSVRfQklPU19SRUFEX1RFTEVfRVZFTlQJ CShJUENfUFVOSVRfQklPU19DTURfDQo+IEJBU0UgfCAweDEwKQ0KPiArI2RlZmluZSBJUENfUFVO SVRfQklPU19XUklURV9URUxFX0VWRU5UCQkoSVBDX1BVTklUX0INCj4gSU9TX0NNRF9CQVNFIHwg MHgxMSkNCj4gKyNkZWZpbmUgSVBDX1BVTklUX0JJT1NfUkVBRF9NT0RVTEVfVEVNUAkJKElQQ19Q VU5JVF9CDQo+IElPU19DTURfQkFTRSB8IDB4MTIpDQo+ICsjZGVmaW5lIElQQ19QVU5JVF9CSU9T X1JFU0VSVkVECQkJKElQQ19QVU5JVF9CDQo+IElPU19DTURfQkFTRSB8IDB4MTMpDQo+ICsjZGVm aW5lIElQQ19QVU5JVF9CSU9TX1JFQURfVk9MVEFHRV9PVkVSCShJUENfUFVOSVRfQklPU19DTURf DQo+IEJBU0UgfCAweDE0KQ0KPiArI2RlZmluZSBJUENfUFVOSVRfQklPU19XUklURV9WT0xUQUdF X09WRVIJKElQQ19QVU5JVF9CSU9TX0NNRF8NCj4gQkFTRSB8IDB4MTUpDQo+ICsjZGVmaW5lIElQ Q19QVU5JVF9CSU9TX1JFQURfUkFUSU9fT1ZFUgkJKElQQ19QVU5JVF9CSU9TX0NNRF8NCj4gQkFT RSB8IDB4MTYpDQo+ICsjZGVmaW5lIElQQ19QVU5JVF9CSU9TX1dSSVRFX1JBVElPX09WRVIJCShJ UENfUFVOSVRfQg0KPiBJT1NfQ01EX0JBU0UgfCAweDE3KQ0KPiArI2RlZmluZSBJUENfUFVOSVRf QklPU19SRUFEX1ZGX0dMX0NUUkwJCShJUENfUFVOSVRfQklPU19DTURfDQo+IEJBU0UgfCAweDE4 KQ0KPiArI2RlZmluZSBJUENfUFVOSVRfQklPU19XUklURV9WRl9HTF9DVFJMCQkoSVBDX1BVTklU X0INCj4gSU9TX0NNRF9CQVNFIHwgMHgxOSkNCj4gKyNkZWZpbmUgSVBDX1BVTklUX0JJT1NfUkVB RF9GTV9TT0NfVEVNUF9USFJFU0gJKElQQ19QVU5JVF9CSU9TX0NNRF8NCj4gQkFTRSB8IDB4MWEp DQo+ICsjZGVmaW5lIElQQ19QVU5JVF9CSU9TX1dSSVRFX0ZNX1NPQ19URU1QX1RIUkVTSAkoSVBD X1BVTklUX0INCj4gSU9TX0NNRF9CQVNFIHwgMHgxYikNCj4gKw0KPiArLyogR1QgRHJpdmVyID0+ IFBjb2RlIGNvbW1hbmRzICovDQo+ICsjZGVmaW5lIElQQ19QVU5JVF9HVERfWkVSTwkJCShJUENf UFVOSVRfR1REX0NNRF9CDQo+IEFTRSB8IDB4MDApDQo+ICsjZGVmaW5lIElQQ19QVU5JVF9HVERf Q09ORklHCQkJKElQQ19QVU5JVF9HVERfQ01EX0INCj4gQVNFIHwgMHgwMSkNCj4gKyNkZWZpbmUg SVBDX1BVTklUX0dURF9SRUFEX0lDQ1BfTElDX0NEWU5fU0NBTAkoSVBDX1BVTklUX0dURF9DTURf Qg0KPiBBU0UgfCAweDAyKQ0KPiArI2RlZmluZSBJUENfUFVOSVRfR1REX1dSSVRFX0lDQ1BfTElD X0NEWU5fU0NBTAkoSVBDX1BVTklUX0dURF9DTURfQg0KPiBBU0UgfCAweDAzKQ0KPiArI2RlZmlu ZSBJUENfUFVOSVRfR1REX0dFVF9XTV9WQUwJCShJUENfUFVOSVRfR1REX0NNRF9CDQo+IEFTRSB8 IDB4MDYpDQo+ICsjZGVmaW5lIElQQ19QVU5JVF9HVERfV1JJVEVfQ09ORklHX1dJU0hSRVEJKElQ Q19QVU5JVF9HVERfQ01EX0INCj4gQVNFIHwgMHgwNykNCj4gKyNkZWZpbmUgSVBDX1BVTklUX0dU RF9SRUFEX1JFUV9EVVRZX0NZQ0xFCShJUENfUFVOSVRfR1REX0NNRF9CDQo+IEFTRSB8IDB4MTYp DQo+ICsjZGVmaW5lIElQQ19QVU5JVF9HVERfRElTX1ZPTF9GUkVRX0NIR19SRVFVRVNUCShJUENf UFVOSVRfR1REX0NNRF9CDQo+IEFTRSB8IDB4MTcpDQo+ICsjZGVmaW5lIElQQ19QVU5JVF9HVERf RFlOQV9EVVRZX0NZQ0xFX0NUUkwJKElQQ19QVU5JVF9HVERfQ01EX0INCj4gQVNFIHwgMHgxYSkN Cj4gKyNkZWZpbmUgSVBDX1BVTklUX0dURF9EWU5BX0RVVFlfQ1lDTEVfVFVOSU5HCShJUENfUFVO SVRfR1REX0NNRF9CDQo+IEFTRSB8IDB4MWMpDQo+ICsNCj4gKy8qIElTUCBEcml2ZXIgPT4gUGNv ZGUgY29tbWFuZHMgKi8NCj4gKyNkZWZpbmUgSVBDX1BVTklUX0lTUERfWkVSTwkJCShJUENfUFVO SVRfSVNQRF9DTURfDQo+IEJBU0UgfCAweDAwKQ0KPiArI2RlZmluZSBJUENfUFVOSVRfSVNQRF9D T05GSUcJCQkoSVBDX1BVTklUX0lTUERfQ01EXw0KPiBCQVNFIHwgMHgwMSkNCj4gKyNkZWZpbmUg SVBDX1BVTklUX0lTUERfR0VUX0lTUF9MVFJfVkFMCQkoSVBDX1BVTklUX0lTUERfQ01EXw0KPiBC QVNFIHwgMHgwMikNCj4gKyNkZWZpbmUgSVBDX1BVTklUX0lTUERfQUNDRVNTX0lVX0ZSRVFfQk9V TkRTCShJUENfUFVOSVRfSVNQRF9DTURfDQo+IEJBU0UgfCAweDAzKQ0KPiArI2RlZmluZSBJUENf UFVOSVRfSVNQRF9SRUFEX0NEWU5fTEVWRUwJCShJUENfUFVOSVRfSVNQRF9DTURfDQo+IEJBU0Ug fCAweDA0KQ0KPiArI2RlZmluZSBJUENfUFVOSVRfSVNQRF9XUklURV9DRFlOX0xFVkVMCQkoSVBD X1BVTklUX0kNCj4gU1BEX0NNRF9CQVNFIHwgMHgwNSkNCj4gKw0KPiArLyogRXJyb3IgY29kZXMg Ki8NCj4gKyNkZWZpbmUgSVBDX1BVTklUX0VSUl9TVUNDRVNTCQkJMA0KPiArI2RlZmluZSBJUENf UFVOSVRfRVJSX0lOVkFMSURfQ01ECQkxDQo+ICsjZGVmaW5lIElQQ19QVU5JVF9FUlJfSU5WQUxJ RF9QQVJBTUVURVIJCTINCj4gKyNkZWZpbmUgSVBDX1BVTklUX0VSUl9DTURfVElNRU9VVAkJMw0K PiArI2RlZmluZSBJUENfUFVOSVRfRVJSX0NNRF9MT0NLRUQJCTQNCj4gKyNkZWZpbmUgSVBDX1BV TklUX0VSUl9JTlZBTElEX1ZSX0lECQk1DQo+ICsjZGVmaW5lIElQQ19QVU5JVF9FUlJfVlJfRVJS CQkJNg0KPiArDQo+ICsjaWYgSVNfRU5BQkxFRChDT05GSUdfSU5URUxfUFVOSVRfSVBDKQ0KPiAr DQo+ICtpbnQgaW50ZWxfcHVuaXRfaXBjX3NpbXBsZV9jb21tYW5kKGludCBjbWQsIGludCBwYXJh MSwgaW50IHBhcmEyKTsNCj4gK2ludCBpbnRlbF9wdW5pdF9pcGNfY29tbWFuZCh1MzIgY21kLCB1 MzIgcGFyYTEsIHUzMiBwYXJhMiwgdTMyICppbiwgDQo+IHUzMiAqb3V0KTsNCj4gKw0KPiArI2Vs c2UNCj4gKw0KPiArc3RhdGljIGlubGluZSBpbnQgaW50ZWxfcHVuaXRfaXBjX3NpbXBsZV9jb21t YW5kKGludCBjbWQsDQo+ICsJCQkJCQkgIGludCBwYXJhMSwgaW50IA0KPiBwYXJhMikNCj4gK3sN Cj4gKwlyZXR1cm4gLUVOT0RFVjsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlubGluZSBpbnQgaW50 ZWxfcHVuaXRfaXBjX2NvbW1hbmQodTMyIGNtZCwgdTMyIHBhcmExLCB1MzIgDQo+IHBhcmEyLA0K PiArCQkJCQkgIHUzMiAqaW4sIHUzMiAqb3V0KQ0KPiArew0KPiArCXJldHVybiAtRU5PREVWOw0K PiArfQ0KPiArDQo+ICsjZW5kaWYgLyogQ09ORklHX0lOVEVMX1BVTklUX0lQQyAqLw0KPiArDQo+ ICsjZW5kaWYNCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWcgDQo+ IGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvS2NvbmZpZw0KPiBpbmRleCAzNDZmMWZkLi45OTQ4MzY5 IDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnDQo+ICsrKyBiL2Ry aXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWcNCj4gQEAgLTg5MSw0ICs4OTEsMTAgQEAgY29uZmln IElOVEVMX1BNQ19JUEMNCj4gIAlUaGUgUE1DIGlzIGFuIEFSQyBwcm9jZXNzb3Igd2hpY2ggZGVm aW5lcyBJUEMgY29tbWFuZHMgZm9yIA0KPiBjb21tdW5pY2F0aW9uDQo+ICAJd2l0aCBvdGhlciBl bnRpdGllcyBpbiB0aGUgQ1BVLg0KPiAgDQo+ICtjb25maWcgSU5URUxfUFVOSVRfSVBDDQo+ICsJ dHJpc3RhdGUgIkludGVsIFAtVW5pdCBJUEMgRHJpdmVyIg0KPiArCS0tLWhlbHAtLS0NCj4gKwkg IFRoaXMgZHJpdmVyIHByb3ZpZGVzIHN1cHBvcnQgZm9yIEludGVsIFAtVW5pdCBNYWlsYm94IElQ QyANCj4gbWVjaGFuaXNtLA0KPiArCSAgd2hpY2ggaXMgdXNlZCB0byBicmlkZ2UgdGhlIGNvbW11 bmljYXRpb25zIGJldHdlZW4ga2VybmVsIA0KPiBhbmQgUC1Vbml0Lg0KPiArDQo+ICBlbmRpZiAj IFg4Nl9QTEFURk9STV9ERVZJQ0VTDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4 Ni9NYWtlZmlsZSANCj4gYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9NYWtlZmlsZQ0KPiBpbmRleCAx MDUxMzcyLi5lZWE3NjVmIDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9NYWtl ZmlsZQ0KPiArKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9NYWtlZmlsZQ0KPiBAQCAtNTksMyAr NTksNCBAQCBvYmotJChDT05GSUdfSU5URUxfU01BUlRDT05ORUNUKQkrPSBpbnRlbA0KPiAtc21h cnRjb25uZWN0Lm8NCj4gIG9iai0kKENPTkZJR19QVlBBTklDKSAgICAgICAgICAgKz0gcHZwYW5p Yy5vDQo+ICBvYmotJChDT05GSUdfQUxJRU5XQVJFX1dNSSkJKz0gYWxpZW53YXJlLXdtaS5vDQo+ ICBvYmotJChDT05GSUdfSU5URUxfUE1DX0lQQykJKz0gaW50ZWxfcG1jX2lwYy5vDQo+ICtvYmot JChDT05GSUdfSU5URUxfUFVOSVRfSVBDKQkrPSBpbnRlbF9wdW5pdF9pcGMubw0KPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWxfcHVuaXRfaXBjLmMgDQo+IGIvZHJpdmVy cy9wbGF0Zm9ybS94ODYvaW50ZWxfcHVuaXRfaXBjLmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQN Cj4gaW5kZXggMDAwMDAwMC4uYzc4YWI1Nw0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2RyaXZl cnMvcGxhdGZvcm0veDg2L2ludGVsX3B1bml0X2lwYy5jDQo+IEBAIC0wLDAgKzEsMzM2IEBADQo+ ICsvKg0KPiArICogRHJpdmVyIGZvciB0aGUgSW50ZWwgUC1Vbml0IE1haWxib3ggSVBDIG1lY2hh bmlzbQ0KPiArICoNCj4gKyAqIChDKSBDb3B5cmlnaHQgMjAxNSBJbnRlbCBDb3Jwb3JhdGlvbg0K PiArICoNCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgDQo+IG1vZGlmeQ0KPiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMNCj4gKyAqIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLg0KPiArICoNCj4gKyAqIFRoZSBo ZWFydCBvZiB0aGUgUC1Vbml0IGlzIHRoZSBGb3h0b24gbWljcm9jb250cm9sbGVyIGFuZCBpdHMg DQo+IGZpcm13YXJlLA0KPiArICogd2hpY2ggcHJvdmlkZSBtYWlsYm94IGludGVyZmFjZSBmb3Ig cG93ZXIgbWFuYWdlbWVudCB1c2FnZS4NCj4gKyAqLw0KPiArDQo+ICsjaW5jbHVkZSA8bGludXgv bW9kdWxlLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvYWNwaS5oPg0KPiArI2luY2x1ZGUgPGxpbnV4 L2RlbGF5Lmg+DQo+ICsjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+DQo+ICsjaW5jbHVkZSA8bGlu dXgvaW50ZXJydXB0Lmg+DQo+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+DQo+ ICsjaW5jbHVkZSA8YXNtL2ludGVsX3B1bml0X2lwYy5oPg0KPiArDQo+ICsvKiBJUEMgTWFpbGJv eCByZWdpc3RlcnMgKi8NCj4gKyNkZWZpbmUgREFUQV9MT1cJCTB4MA0KPiArI2RlZmluZSBJTlRF UkZBQ0UJCTB4NA0KPiArI2RlZmluZQkJQ01EX1JVTgkJCSgxIDw8IDMxKQ0KPiArI2RlZmluZQkJ Q01EX0VSUkNPREVfTUFTSwkweEZGDQo+ICsjZGVmaW5lCQlDTURfUEFSQTFfU0hJRlQJCTgNCj4g KyNkZWZpbmUJCUNNRF9QQVJBMl9TSElGVAkJMTYNCj4gKyNkZWZpbmUgREFUQV9ISUdICQkweDgN Cj4gKw0KPiArI2RlZmluZSBNQUlMQk9YX1JFR0lTVEVSX1NQQUNFCQkweDEwDQo+ICsjZGVmaW5l IENNRF9USU1FT1VUX1NFQ09ORFMJCTENCj4gKw0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArCXN0 cnVjdCBkZXZpY2UgKmRldjsNCj4gKwlzdHJ1Y3QgbXV0ZXggbG9jazsNCj4gKwlpbnQgaXJxOw0K PiArCXN0cnVjdCBjb21wbGV0aW9uIGNtZF9jb21wbGV0ZTsNCj4gKwl2b2lkIF9faW9tZW0gKmJh c2VbUkVTRVJWRURfSVBDXTsNCj4gKwlJUENfVFlQRSB0eXBlOw0KPiArfSBJUENfREVWOw0KPiAr DQo+ICtzdGF0aWMgSVBDX0RFViAqcHVuaXRfaXBjZGV2Ow0KPiArDQo+ICtzdGF0aWMgaW5saW5l IHUzMiBpcGNfcmVhZF9zdGF0dXMoSVBDX0RFViAqaXBjZGV2LCBJUENfVFlQRSB0eXBlKQ0KPiAr ew0KPiArCXJldHVybiByZWFkbChpcGNkZXYtPmJhc2VbdHlwZV0gKyBJTlRFUkZBQ0UpOw0KPiAr fQ0KPiArDQo+ICtzdGF0aWMgaW5saW5lIHZvaWQgaXBjX3dyaXRlX2NtZChJUENfREVWICppcGNk ZXYsIElQQ19UWVBFIHR5cGUsIHUzMiANCj4gY21kKQ0KPiArew0KPiArCXdyaXRlbChjbWQsIGlw Y2Rldi0+YmFzZVt0eXBlXSArIElOVEVSRkFDRSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbmxp bmUgdTMyIGlwY19yZWFkX2RhdGFfbG93KElQQ19ERVYgKmlwY2RldiwgSVBDX1RZUEUgdHlwZSkN Cj4gK3sNCj4gKwlyZXR1cm4gcmVhZGwoaXBjZGV2LT5iYXNlW3R5cGVdICsgREFUQV9MT1cpOw0K PiArfQ0KPiArDQo+ICtzdGF0aWMgaW5saW5lIHUzMiBpcGNfcmVhZF9kYXRhX2hpZ2goSVBDX0RF ViAqaXBjZGV2LCBJUENfVFlQRSB0eXBlKQ0KPiArew0KPiArCXJldHVybiByZWFkbChpcGNkZXYt PmJhc2VbdHlwZV0gKyBEQVRBX0hJR0gpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW5saW5lIHZv aWQgaXBjX3dyaXRlX2RhdGFfbG93KElQQ19ERVYgKmlwY2RldiwgSVBDX1RZUEUgDQo+IHR5cGUs IHUzMiBkYXRhKQ0KPiArew0KPiArCXdyaXRlbChkYXRhLCBpcGNkZXYtPmJhc2VbdHlwZV0gKyBE QVRBX0xPVyk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBpcGNfd3JpdGVfZGF0 YV9oaWdoKElQQ19ERVYgKmlwY2RldiwgSVBDX1RZUEUgDQo+IHR5cGUsIHUzMiBkYXRhKQ0KPiAr ew0KPiArCXdyaXRlbChkYXRhLCBpcGNkZXYtPmJhc2VbdHlwZV0gKyBEQVRBX0hJR0gpOw0KPiAr fQ0KPiArDQo+ICtzdGF0aWMgY29uc3QgY2hhciAqaXBjX2Vycl9zdHJpbmcoaW50IGVycm9yKQ0K PiArew0KPiArCWlmIChlcnJvciA9PSBJUENfUFVOSVRfRVJSX1NVQ0NFU1MpDQo+ICsJCXJldHVy biAibm8gZXJyb3IiOw0KPiArCWVsc2UgaWYgKGVycm9yID09IElQQ19QVU5JVF9FUlJfSU5WQUxJ RF9DTUQpDQo+ICsJCXJldHVybiAiaW52YWxpZCBjb21tYW5kIjsNCj4gKwllbHNlIGlmIChlcnJv ciA9PSBJUENfUFVOSVRfRVJSX0lOVkFMSURfUEFSQU1FVEVSKQ0KPiArCQlyZXR1cm4gImludmFs aWQgcGFyYW1ldGVyIjsNCj4gKwllbHNlIGlmIChlcnJvciA9PSBJUENfUFVOSVRfRVJSX0NNRF9U SU1FT1VUKQ0KPiArCQlyZXR1cm4gImNvbW1hbmQgdGltZW91dCI7DQo+ICsJZWxzZSBpZiAoZXJy b3IgPT0gSVBDX1BVTklUX0VSUl9DTURfTE9DS0VEKQ0KPiArCQlyZXR1cm4gImNvbW1hbmQgbG9j a2VkIjsNCj4gKwllbHNlIGlmIChlcnJvciA9PSBJUENfUFVOSVRfRVJSX0lOVkFMSURfVlJfSUQp DQo+ICsJCXJldHVybiAiaW52YWxpZCB2ciBpZCI7DQo+ICsJZWxzZSBpZiAoZXJyb3IgPT0gSVBD X1BVTklUX0VSUl9WUl9FUlIpDQo+ICsJCXJldHVybiAidnIgZXJyb3IiOw0KPiArCWVsc2UNCj4g KwkJcmV0dXJuICJ1bmtub3duIGVycm9yIjsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBpbnRl bF9wdW5pdF9pcGNfY2hlY2tfc3RhdHVzKElQQ19ERVYgKmlwY2RldiwgSVBDX1RZUEUgDQo+IHR5 cGUpDQo+ICt7DQo+ICsJaW50IGxvb3BzID0gQ01EX1RJTUVPVVRfU0VDT05EUyAqIFVTRUNfUEVS X1NFQzsNCj4gKwlpbnQgZXJyY29kZTsNCj4gKwlpbnQgc3RhdHVzOw0KPiArDQo+ICsJaWYgKGlw Y2Rldi0+aXJxKSB7DQo+ICsJCWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZpcGNk ZXYNCj4gLT5jbWRfY29tcGxldGUsDQo+ICsJCQkJCQkgQ01EX1RJTUVPVVRfU0VDT05EUyANCj4g KiBIWikpIHsNCj4gKwkJCWRldl9lcnIoaXBjZGV2LT5kZXYsICJJUEMgdGltZWQgb3V0XG4iKTsN Cj4gKwkJCXJldHVybiAtRVRJTUVET1VUOw0KPiArCQl9DQo+ICsJfSBlbHNlIHsNCj4gKwkJd2hp bGUgKChpcGNfcmVhZF9zdGF0dXMoaXBjZGV2LCB0eXBlKSAmIENNRF9SVU4pICYmIA0KPiAtLWxv b3BzKQ0KPiArCQkJdWRlbGF5KDEpOw0KPiArCQlpZiAoIWxvb3BzKSB7DQo+ICsJCQlkZXZfZXJy KGlwY2Rldi0+ZGV2LCAiSVBDIHRpbWVkIG91dFxuIik7DQo+ICsJCQlyZXR1cm4gLUVUSU1FRE9V VDsNCj4gKwkJfQ0KPiArCX0NCj4gKw0KPiArCXN0YXR1cyA9IGlwY19yZWFkX3N0YXR1cyhpcGNk ZXYsIHR5cGUpOw0KPiArCWVycmNvZGUgPSBzdGF0dXMgJiBDTURfRVJSQ09ERV9NQVNLOw0KPiAr CWlmIChlcnJjb2RlKSB7DQo+ICsJCWRldl9lcnIoaXBjZGV2LT5kZXYsICJJUEMgZmFpbGVkOiAl cywgDQo+IElQQ19TVFM9MHgleFxuIiwNCj4gKwkJCWlwY19lcnJfc3RyaW5nKGVycmNvZGUpLCBz dGF0dXMpOw0KPiArCQlyZXR1cm4gLUVJTzsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4g K30NCj4gKw0KPiArLyoqDQo+ICsgKiBpbnRlbF9wdW5pdF9pcGNfc2ltcGxlX2NvbW1hbmQoKSAt IFNpbXBsZSBJUEMgY29tbWFuZA0KPiArICogQGNtZDoJSVBDIGNvbW1hbmQgY29kZS4NCj4gKyAq IEBwYXJhMToJRmlyc3QgOGJpdCBwYXJhbWV0ZXIsIHNldCAwIGlmIG5vdCB1c2VkLg0KPiArICog QHBhcmEyOglTZWNvbmQgOGJpdCBwYXJhbWV0ZXIsIHNldCAwIGlmIG5vdCB1c2VkLg0KPiArICoN Cj4gKyAqIFNlbmQgYSBJUEMgY29tbWFuZCB0byBQLVVuaXQgd2hlbiB0aGVyZSBpcyBubyBkYXRh IHRyYW5zYWN0aW9uDQo+ICsgKg0KPiArICogUmV0dXJuOglJUEMgZXJyb3IgY29kZSBvciAwIG9u IHN1Y2Nlc3MuDQo+ICsgKi8NCj4gK2ludCBpbnRlbF9wdW5pdF9pcGNfc2ltcGxlX2NvbW1hbmQo aW50IGNtZCwgaW50IHBhcmExLCBpbnQgcGFyYTIpDQo+ICt7DQo+ICsJSVBDX0RFViAqaXBjZGV2 ID0gcHVuaXRfaXBjZGV2Ow0KPiArCUlQQ19UWVBFIHR5cGU7DQo+ICsJdTMyIHZhbDsNCj4gKwlp bnQgcmV0Ow0KPiArDQo+ICsJbXV0ZXhfbG9jaygmaXBjZGV2LT5sb2NrKTsNCj4gKw0KPiArCXJl aW5pdF9jb21wbGV0aW9uKCZpcGNkZXYtPmNtZF9jb21wbGV0ZSk7DQo+ICsJdHlwZSA9IChjbWQg JiBJUENfUFVOSVRfQ01EX1RZUEVfTUFTSykgPj4gSVBDX1RZUEVfT0ZGU0VUOw0KPiArDQo+ICsJ dmFsID0gY21kICYgfklQQ19QVU5JVF9DTURfVFlQRV9NQVNLOw0KPiArCXZhbCB8PSBDTURfUlVO IHwgcGFyYTIgPDwgQ01EX1BBUkEyX1NISUZUIHwgcGFyYTEgPDwgDQo+IENNRF9QQVJBMV9TSElG VDsNCj4gKwlpcGNfd3JpdGVfY21kKGlwY2RldiwgdHlwZSwgdmFsKTsNCj4gKwlyZXQgPSBpbnRl bF9wdW5pdF9pcGNfY2hlY2tfc3RhdHVzKGlwY2RldiwgdHlwZSk7DQo+ICsNCj4gKwltdXRleF91 bmxvY2soJmlwY2Rldi0+bG9jayk7DQo+ICsNCj4gKwlyZXR1cm4gcmV0Ow0KPiArfQ0KPiArRVhQ T1JUX1NZTUJPTChpbnRlbF9wdW5pdF9pcGNfc2ltcGxlX2NvbW1hbmQpOw0KPiArDQo+ICsvKioN Cj4gKyAqIGludGVsX3B1bml0X2lwY19jb21tYW5kKCkgLSBJUEMgY29tbWFuZCB3aXRoIGRhdGEg YW5kIHBvaW50ZXJzDQo+ICsgKiBAY21kOglJUEMgY29tbWFuZCBjb2RlLg0KPiArICogQHBhcmEx OglGaXJzdCA4Yml0IHBhcmFtZXRlciwgc2V0IDAgaWYgbm90IHVzZWQuDQo+ICsgKiBAcGFyYTI6 CVNlY29uZCA4Yml0IHBhcmFtZXRlciwgc2V0IDAgaWYgbm90IHVzZWQuDQo+ICsgKiBAaW46CQlJ bnB1dCBkYXRhLCAzMmJpdCBmb3IgQklPUyBjbWQsIHR3byAzMmJpdCANCj4gZm9yIEdURCBhbmQg SVNQRC4NCj4gKyAqIEBvdXQ6CU91dHB1dCBkYXRhLg0KPiArICoNCj4gKyAqIFNlbmQgYSBJUEMg Y29tbWFuZCB0byBQLVVuaXQgd2l0aCBkYXRhIHRyYW5zYWN0aW9uDQo+ICsgKg0KPiArICogUmV0 dXJuOglJUEMgZXJyb3IgY29kZSBvciAwIG9uIHN1Y2Nlc3MuDQo+ICsgKi8NCj4gK2ludCBpbnRl bF9wdW5pdF9pcGNfY29tbWFuZCh1MzIgY21kLCB1MzIgcGFyYTEsIHUzMiBwYXJhMiwgdTMyICpp biwgDQo+IHUzMiAqb3V0KQ0KPiArew0KPiArCUlQQ19ERVYgKmlwY2RldiA9IHB1bml0X2lwY2Rl djsNCj4gKwlJUENfVFlQRSB0eXBlOw0KPiArCXUzMiB2YWw7DQo+ICsJaW50IHJldDsNCj4gKw0K PiArCW11dGV4X2xvY2soJmlwY2Rldi0+bG9jayk7DQo+ICsNCj4gKwlyZWluaXRfY29tcGxldGlv bigmaXBjZGV2LT5jbWRfY29tcGxldGUpOw0KPiArCXR5cGUgPSAoY21kICYgSVBDX1BVTklUX0NN RF9UWVBFX01BU0spID4+IElQQ19UWVBFX09GRlNFVDsNCj4gKwlpcGNfd3JpdGVfZGF0YV9sb3co aXBjZGV2LCB0eXBlLCAqaW4pOw0KPiArDQo+ICsJaWYgKHR5cGUgPT0gR1REUklWRVJfSVBDIHx8 IHR5cGUgPT0gSVNQRFJJVkVSX0lQQykNCj4gKwkJaXBjX3dyaXRlX2RhdGFfaGlnaChpcGNkZXYs IHR5cGUsICorK2luKTsNCj4gKw0KPiArCXZhbCA9IGNtZCAmIH5JUENfUFVOSVRfQ01EX1RZUEVf TUFTSzsNCj4gKwl2YWwgfD0gQ01EX1JVTiB8IHBhcmEyIDw8IENNRF9QQVJBMl9TSElGVCB8IHBh cmExIDw8IA0KPiBDTURfUEFSQTFfU0hJRlQ7DQo+ICsJaXBjX3dyaXRlX2NtZChpcGNkZXYsIHR5 cGUsIHZhbCk7DQo+ICsNCj4gKwlyZXQgPSBpbnRlbF9wdW5pdF9pcGNfY2hlY2tfc3RhdHVzKGlw Y2RldiwgdHlwZSk7DQo+ICsJaWYgKHJldCkNCj4gKwkJZ290byBvdXQ7DQo+ICsJKm91dCA9IGlw Y19yZWFkX2RhdGFfbG93KGlwY2RldiwgdHlwZSk7DQo+ICsNCj4gKwlpZiAodHlwZSA9PSBHVERS SVZFUl9JUEMgfHwgdHlwZSA9PSBJU1BEUklWRVJfSVBDKQ0KPiArCQkqKytvdXQgPSBpcGNfcmVh ZF9kYXRhX2hpZ2goaXBjZGV2LCB0eXBlKTsNCj4gKw0KPiArb3V0Og0KPiArCW11dGV4X3VubG9j aygmaXBjZGV2LT5sb2NrKTsNCj4gKwlyZXR1cm4gcmV0Ow0KPiArfQ0KPiArRVhQT1JUX1NZTUJP TF9HUEwoaW50ZWxfcHVuaXRfaXBjX2NvbW1hbmQpOw0KPiArDQo+ICtzdGF0aWMgaXJxcmV0dXJu X3QgaW50ZWxfcHVuaXRfaW9jKGludCBpcnEsIHZvaWQgKmRldl9pZCkNCj4gK3sNCj4gKwlJUENf REVWICppcGNkZXYgPSAoSVBDX0RFViAqKWRldl9pZDsNCj4gKw0KPiArCWNvbXBsZXRlKCZpcGNk ZXYtPmNtZF9jb21wbGV0ZSk7DQo+ICsJcmV0dXJuIElSUV9IQU5ETEVEOw0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgaW50IGludGVsX3B1bml0X2dldF9iYXJzKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXYpDQo+ICt7DQo+ICsJc3RydWN0IHJlc291cmNlICpyZXMwLCAqcmVzMTsNCj4gKwl2b2lk IF9faW9tZW0gKmFkZHI7DQo+ICsJaW50IHNpemU7DQo+ICsNCj4gKwlyZXMwID0gcGxhdGZvcm1f Z2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsNCj4gKwlpZiAoIXJlczApIHsN Cj4gKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGdldCBpb21lbSANCj4gcmVzb3Vy Y2VcbiIpOw0KPiArCQlyZXR1cm4gLUVOWElPOw0KPiArCX0NCj4gKwlzaXplID0gcmVzb3VyY2Vf c2l6ZShyZXMwKTsNCj4gKwlpZiAoIWRldm1fcmVxdWVzdF9tZW1fcmVnaW9uKCZwZGV2LT5kZXYs IHJlczAtPnN0YXJ0LA0KPiArCQkJCSAgICAgc2l6ZSwgcGRldi0+bmFtZSkpIHsNCj4gKwkJZGV2 X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgaW9tZW0gDQo+IHJlc291Y2VcbiIp Ow0KPiArCQlyZXR1cm4gLUVCVVNZOw0KPiArCX0NCj4gKw0KPiArCXJlczEgPSBwbGF0Zm9ybV9n ZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpOw0KPiArCWlmICghcmVzMSkgew0K PiArCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gZ2V0IGlvbWVtIA0KPiByZXNvdXJj ZTFcbiIpOw0KPiArCQlyZXR1cm4gLUVOWElPOw0KPiArCX0NCj4gKwlzaXplID0gcmVzb3VyY2Vf c2l6ZShyZXMxKTsNCj4gKwlpZiAoIWRldm1fcmVxdWVzdF9tZW1fcmVnaW9uKCZwZGV2LT5kZXYs IHJlczEtPnN0YXJ0LA0KPiArCQkJCSAgICAgc2l6ZSwgcGRldi0+bmFtZSkpIHsNCj4gKwkJZGV2 X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgaW9tZW0gDQo+IHJlc291Y2UxXG4i KTsNCj4gKwkJcmV0dXJuIC1FQlVTWTsNCj4gKwl9DQo+ICsNCj4gKwlhZGRyID0gaW9yZW1hcF9u b2NhY2hlKHJlczAtPnN0YXJ0LA0KPiArCQkJICAgICAgIHJlc291cmNlX3NpemUocmVzMCkgKyAN Cj4gcmVzb3VyY2Vfc2l6ZShyZXMxKSk7DQo+ICsJaWYgKCFhZGRyKSB7DQo+ICsJCWRldl9lcnIo JnBkZXYtPmRldiwgIkZhaWxlZCB0byBpb3JlbWFwIGlwYyBiYXNlXG4iKTsNCj4gKwkJcmV0dXJu ICAtRU5PTUVNOw0KPiArCX0NCj4gKwlwdW5pdF9pcGNkZXYtPmJhc2VbQklPU19JUENdID0gYWRk cjsNCj4gKwlhZGRyICs9IE1BSUxCT1hfUkVHSVNURVJfU1BBQ0U7DQo+ICsJcHVuaXRfaXBjZGV2 LT5iYXNlW0dURFJJVkVSX0lQQ10gPSBhZGRyOw0KPiArCWFkZHIgKz0gTUFJTEJPWF9SRUdJU1RF Ul9TUEFDRTsNCj4gKwlwdW5pdF9pcGNkZXYtPmJhc2VbSVNQRFJJVkVSX0lQQ10gPSBhZGRyOw0K PiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgaW50ZWxfcHVuaXRf aXBjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+ICt7DQo+ICsJaW50IGly cSwgcmV0Ow0KPiArDQo+ICsJcHVuaXRfaXBjZGV2ID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYs DQo+ICsJCQkJICAgIHNpemVvZigqcHVuaXRfaXBjZGV2KSwgDQo+IEdGUF9LRVJORUwpOw0KPiAr CWlmICghcHVuaXRfaXBjZGV2KQ0KPiArCQlyZXR1cm4gLUVOT01FTTsNCj4gKw0KPiArCXBsYXRm b3JtX3NldF9kcnZkYXRhKHBkZXYsIHB1bml0X2lwY2Rldik7DQo+ICsNCj4gKwlpcnEgPSBwbGF0 Zm9ybV9nZXRfaXJxKHBkZXYsIDApOw0KPiArCWlmIChpcnEgPCAwKSB7DQo+ICsJCXB1bml0X2lw Y2Rldi0+aXJxID0gMDsNCj4gKwkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIkludmFsaWQgSVJRLCB1 c2luZyBwb2xsaW5nIA0KPiBtb2RlXG4iKTsNCj4gKwl9IGVsc2Ugew0KPiArCQlyZXQgPSBkZXZt X3JlcXVlc3RfaXJxKCZwZGV2LT5kZXYsIGlycSwgDQo+IGludGVsX3B1bml0X2lvYywNCj4gKwkJ CQkgICAgICAgSVJRRl9OT19TVVNQRU5ELCANCj4gImludGVsX3B1bml0X2lwYyIsDQo+ICsJCQkJ ICAgICAgICZwdW5pdF9pcGNkZXYpOw0KPiArCQlpZiAocmV0KSB7DQo+ICsJCQlkZXZfZXJyKCZw ZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBpcnE6IA0KPiAlZFxuIiwgaXJxKTsNCj4gKwkJ CXJldHVybiByZXQ7DQo+ICsJCX0NCj4gKwkJcHVuaXRfaXBjZGV2LT5pcnEgPSBpcnE7DQo+ICsJ fQ0KPiArDQo+ICsJcmV0ID0gaW50ZWxfcHVuaXRfZ2V0X2JhcnMocGRldik7DQo+ICsJaWYgKHJl dCkNCj4gKwkJZ290byBvdXQ7DQo+ICsNCj4gKwlwdW5pdF9pcGNkZXYtPmRldiA9ICZwZGV2LT5k ZXY7DQo+ICsJbXV0ZXhfaW5pdCgmcHVuaXRfaXBjZGV2LT5sb2NrKTsNCj4gKwlpbml0X2NvbXBs ZXRpb24oJnB1bml0X2lwY2Rldi0+Y21kX2NvbXBsZXRlKTsNCj4gKw0KPiArb3V0Og0KPiArCXJl dHVybiByZXQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgaW50ZWxfcHVuaXRfaXBjX3JlbW92 ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KPiArew0KPiArCUlQQ19ERVYgKmlwY2Rl diA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOw0KPiArDQo+ICsJaW91bm1hcChpcGNkZXYt PmJhc2VbQklPU19JUENdKTsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0 aWMgY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkIHB1bml0X2lwY19hY3BpX2lkc1tdID0gew0K PiArCXsgIklOVDM0RDQiLCAwIH0sDQo+ICsJeyB9DQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgc3Ry dWN0IHBsYXRmb3JtX2RyaXZlciBpbnRlbF9wdW5pdF9pcGNfZHJpdmVyID0gew0KPiArCS5wcm9i ZSA9IGludGVsX3B1bml0X2lwY19wcm9iZSwNCj4gKwkucmVtb3ZlID0gaW50ZWxfcHVuaXRfaXBj X3JlbW92ZSwNCj4gKwkuZHJpdmVyID0gew0KPiArCQkubmFtZSA9ICJpbnRlbF9wdW5pdF9pcGMi LA0KPiArCQkuYWNwaV9tYXRjaF90YWJsZSA9IEFDUElfUFRSKHB1bml0X2lwY19hY3BpX2lkcyks DQo+ICsJfSwNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBpbnQgX19pbml0IGludGVsX3B1bml0X2lw Y19pbml0KHZvaWQpDQo+ICt7DQo+ICsJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigm aW50ZWxfcHVuaXRfaXBjX2RyaXZlcik7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIF9fZXhp dCBpbnRlbF9wdW5pdF9pcGNfZXhpdCh2b2lkKQ0KPiArew0KPiArCXBsYXRmb3JtX2RyaXZlcl91 bnJlZ2lzdGVyKCZpbnRlbF9wdW5pdF9pcGNfZHJpdmVyKTsNCj4gK30NCj4gKw0KPiArTU9EVUxF X0FVVEhPUigiWmhhIFFpcGVuZyA8cWlwZW5nLnpoYUBpbnRlbC5jb20+Iik7DQo+ICtNT0RVTEVf REVTQ1JJUFRJT04oIkludGVsIFAtVW5pdCBJUEMgZHJpdmVyIik7DQo+ICtNT0RVTEVfTElDRU5T RSgiR1BMIHYyIik7DQo+ICsNCj4gKy8qIFNvbWUgbW9kdWxlcyBhcmUgZGVwZW5kZW50IG9uIHRo aXMsIHNvIGluaXQgZWFybGllciAqLw0KPiArZnNfaW5pdGNhbGwoaW50ZWxfcHVuaXRfaXBjX2lu aXQpOw0KPiArbW9kdWxlX2V4aXQoaW50ZWxfcHVuaXRfaXBjX2V4aXQpOw0KDQotLSANCkFuZHkg U2hldmNoZW5rbyA8YW5kcml5LnNoZXZjaGVua29AaW50ZWwuY29tPg0KSW50ZWwgRmlubGFuZCBP eQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KSW50ZWwgRmlubGFuZCBPeQpSZWdpc3RlcmVkIEFkZHJlc3M6IFBMIDI4 MSwgMDAxODEgSGVsc2lua2kgCkJ1c2luZXNzIElkZW50aXR5IENvZGU6IDAzNTc2MDYgLSA0IApE b21pY2lsZWQgaW4gSGVsc2lua2kgCgpUaGlzIGUtbWFpbCBhbmQgYW55IGF0dGFjaG1lbnRzIG1h eSBjb250YWluIGNvbmZpZGVudGlhbCBtYXRlcmlhbCBmb3IKdGhlIHNvbGUgdXNlIG9mIHRoZSBp bnRlbmRlZCByZWNpcGllbnQocykuIEFueSByZXZpZXcgb3IgZGlzdHJpYnV0aW9uCmJ5IG90aGVy cyBpcyBzdHJpY3RseSBwcm9oaWJpdGVkLiBJZiB5b3UgYXJlIG5vdCB0aGUgaW50ZW5kZWQKcmVj aXBpZW50LCBwbGVhc2UgY29udGFjdCB0aGUgc2VuZGVyIGFuZCBkZWxldGUgYWxsIGNvcGllcy4K