[patch 4a/5] 2.4.20-pre5 i2c updates (fwd)

Albert Cranford (ac9410@attbi.com)
Thu, 29 Aug 2002 02:57:02 -0400 (EDT)


This message is in MIME format. The first part should be readable text,
while the remaining parts are likely unreadable without MIME-aware tools.
Send mail to mime@docserver.cac.washington.edu for more info.

--0-895384732-1030599472=:16793
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII
Content-ID: <Pine.LNX.4.44.0208290253262.17093@home1>

Patch 4/5 was too lare, so its now split into 4a, 4b and 4c

-- 
ac9410@attbi.com

---------- Forwarded message ---------- Date: Thu, 29 Aug 2002 01:37:52 -0400 (EDT) From: Albert Cranford <ac9410@attbi.com> To: Marcelo Tosatti <marcelo@conectiva.com.br> Cc: Kernel mailing list <linux-kernel@vger.kernel.org> Subject: [patch 4/5] 2.4.20-pre5 i2c updates

Hello Marcelo, Attached are i2c patches that bring the kernel to the latest released and tested version. Updates include: o Support for SMBus 2.0 PEC Packet Error Checking o New algorithm-i2c-algo-8xxx for MPC8XXX o New algorithm-i2c-algo-ibm_ocp for IBM PPC 405 o New adapter-i2c-adap-ibm_ocp for IBM PPC 405 o New adapter-i2c-frodo for SA 1110 board o New adapter-i2c-pcf-epp for PCF8584 o New adapter-i2c-pport for parallel port o New adapter-i2c-rpx for embeded MPC8XX o Updated documentation Thanks, Albert

-- 
ac9410@attbi.com

--0-895384732-1030599472=:16793 Content-Type: TEXT/PLAIN; charset=X-UNKNOWN; name=47-i2c-4a-patch Content-Transfer-Encoding: BASE64 Content-ID: <Pine.LNX.4.44.0208290257020.17093@home1> Content-Description: Content-Disposition: attachment; filename=47-i2c-4a-patch

LS0tIC9kZXYvbnVsbAkxOTk0LTA3LTE3IDE5OjQ2OjE4LjAwMDAwMDAwMCAt MDQwMA0KKysrIGxpbnV4L2RyaXZlcnMvaTJjL2kyYy1hZGFwLWlibV9vY3Au YwkyMDAyLTA3LTIzIDA4OjI3OjA5LjAwMDAwMDAwMCAtMDQwMA0KQEAgLTAs MCArMSwzOTkgQEANCisvKg0KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0NCisgICBpMmMtYWRhcC1pYm1fb2NwLmMgaTJjLWh3IGFjY2VzcyBm b3IgdGhlIElJQyBwZXJpcGhlcmFsIG9uIHRoZSBJQk0gUFBDIDQwNQ0KKyAg IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgIA0KKyAgIElhbiBE YVNpbHZhLCBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuDQorICAgaWRhc2ls dmFAbXZpc3RhLmNvbSBvciBzb3VyY2VAbXZpc3RhLmNvbQ0KKw0KKyAgIENv cHlyaWdodCAyMDAwIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLg0KKw0KKyAg IENoYW5nZXMgbWFkZSB0byBzdXBwb3J0IHRoZSBJSUMgcGVyaXBoZXJhbCBv biB0aGUgSUJNIFBQQyA0MDUgDQorDQorDQorICAgLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQ0KKyAgIFRoaXMgZmlsZSB3YXMgaGlnaGx5IGxl dmVyYWdlZCBmcm9tIGkyYy1lbGVrdG9yLmMsIHdoaWNoIHdhcyBjcmVhdGVk DQorICAgYnkgU2ltb24gRy4gVm9nbCBhbmQgSGFucyBCZXJnbHVuZDoNCisN CisgDQorICAgICBDb3B5cmlnaHQgKEMpIDE5OTUtOTcgU2ltb24gRy4gVm9n bA0KKyAgICAgICAgICAgICAgICAgICAxOTk4LTk5IEhhbnMgQmVyZ2x1bmQN CisNCisgICBXaXRoIHNvbWUgY2hhbmdlcyBmcm9tIEt59nN0aSBN5Gxra2kg PGttYWxra2lAY2MuaHV0LmZpPiBhbmQgZXZlbg0KKyAgIEZyb2RvIExvb2lq YWFyZCA8ZnJvZG9sQGRkcy5ubD4NCisNCisNCisgICAgVGhpcyBwcm9ncmFt IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vciBtb2RpZnkNCisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkNCisg ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNp b24gMiBvZiB0aGUgTGljZW5zZSwgb3INCisgICAgKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4NCisNCisgICAgVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsDQorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQorICAgIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUNCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4NCisNCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk IGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCisg ICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8g dGhlIEZyZWUgU29mdHdhcmUNCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1 IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuDQorICAgLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KKyAgIEhpc3Rvcnk6 IDAxLzIwLzEyIC0gQXJtaW4NCisgICAJYWt1c3RlckBtdmlzdGEuY29tDQor ICAgCXBvcnRlZCB1cCB0byAyLjQuMTYrCQ0KKw0KKyAgIFZlcnNpb24gMDIv MDMvMjUgLSBBcm1pbg0KKyAgICAgICBjb252ZXJ0ZWQgdG8gb2NwIGZvcm1h dA0KKyAgICAgICByZW1vdmVkIGNvbW1lbnRlZCBvdXQgb3IgI2lmIDAgY29k ZQ0KKw0KKyAgIFRPRE86IGNvbnZlcnQgdG8gb2NwX3JlZ2lzdGVyDQorICAg ICAgICAgYWRkIFBNIGhvb2tzDQorDQorKi8NCisNCisNCisjaW5jbHVkZSA8 bGludXgva2VybmVsLmg+DQorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPg0K KyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4NCisjaW5jbHVkZSA8bGludXgv ZGVsYXkuaD4NCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPg0KKyNpbmNsdWRl IDxsaW51eC92ZXJzaW9uLmg+DQorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4N CisjaW5jbHVkZSA8YXNtL2lycS5oPg0KKyNpbmNsdWRlIDxhc20vaW8uaD4N CisjaW5jbHVkZSA8bGludXgvaTJjLmg+DQorI2luY2x1ZGUgImkyYy1hbGdv LWlibV9vY3AuaCINCisjaW5jbHVkZSA8bGludXgvaTJjLWlkLmg+DQorI2lu Y2x1ZGUgPGFzbS9vY3AuaD4NCisNCitNT0RVTEVfTElDRU5TRSgiR1BMIik7 DQorDQorLyoNCisgKiBUaGlzIG5leHQgc2VjdGlvbiBpcyBjb25maWd1cmFi bGUsIGFuZCBpdCBpcyB1c2VkIHRvIHNldCB0aGUgbnVtYmVyDQorICogb2Yg aTJjIGNvbnRyb2xsZXJzIGluIHRoZSBzeXN0ZW0uICBUaGUgZGVmYXVsdCBu dW1iZXIgb2YgaW5zdGFuY2VzIGlzIDEsDQorICogaG93ZXZlciwgdGhpcyBz aG91bGQgYmUgY2hhbmdlZCB0byByZWZsZWN0IHlvdXIgc3lzdGVtJ3MgY29u ZmlndXJhdGlvbi4NCisgKi8gDQorDQorLyoNCisgKiBUaGUgU1RCMDN4eHgs IHdpdGggYSBQUEM0MDUgY29yZSwgaGFzIHR3byBpMmMgY29udHJvbGxlcnMu DQorICovDQorLy8oc2l6ZW9mKElJQ19BRERSKS9zaXplb2Yoc3RydWN0IGlp Y19yZWdzKSkNCitleHRlcm4gaWljX3QgKklJQ19BRERSW107DQorc3RhdGlj IHN0cnVjdCBpaWNfaWJtIGlpY19pYm1vY3BfYWRhcHNbSUlDX05VTVNdWzVd Ow0KKw0KK3N0YXRpYyBzdHJ1Y3QgaTJjX2FsZ29faWljX2RhdGEgKmlpY19p Ym1vY3BfZGF0YVtJSUNfTlVNU107DQorc3RhdGljIHN0cnVjdCBpMmNfYWRh cHRlciAqaWljX2libW9jcF9vcHNbSUlDX05VTVNdOw0KKw0KK3N0YXRpYyBp bnQgaTJjX2RlYnVnPTA7DQorc3RhdGljIHdhaXRfcXVldWVfaGVhZF90IGlp Y193YWl0W0lJQ19OVU1TXTsNCitzdGF0aWMgaW50IGlpY19wZW5kaW5nOw0K Kw0KKw0KKy8qIC0tLS0tIGdsb2JhbCBkZWZpbmVzIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCSovDQorI2RlZmlu ZSBERUIoeCkJaWYgKGkyY19kZWJ1Zz49MSkgeA0KKyNkZWZpbmUgREVCMih4 KSBpZiAoaTJjX2RlYnVnPj0yKSB4DQorI2RlZmluZSBERUIzKHgpIGlmIChp MmNfZGVidWc+PTMpIHgNCisjZGVmaW5lIERFQkUoeCkJeAkvKiBlcnJvciBt ZXNzYWdlcyAJCQkJKi8NCisNCisvKiAtLS0tLSBsb2NhbCBmdW5jdGlvbnMg LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQkqLw0KKw0KKy8vDQorLy8gRGVzY3JpcHRpb246IFdyaXRlIGEgYnl0ZSB0 byBJSUMgaGFyZHdhcmUNCisvLw0KK3N0YXRpYyB2b2lkIGlpY19pYm1vY3Bf c2V0Ynl0ZSh2b2lkICpkYXRhLCBpbnQgY3RsLCBpbnQgdmFsKQ0KK3sNCisg ICAvLyB3cml0ZWIgcmVzb2x2ZXMgdG8gYSB3cml0ZSB0byB0aGUgc3BlY2lm aWVkIG1lbW9yeSBsb2NhdGlvbg0KKyAgIC8vIHBsdXMgYSBjYWxsIHRvIGVp ZWlvLiAgZWllaW8gZW5zdXJlcyB0aGF0IGFsbCBpbnN0cnVjdGlvbnMNCisg ICAvLyBwcmVjZWRpbmcgaXQgYXJlIGNvbXBsZXRlZCBiZWZvcmUgYW55IGZ1 cnRoZXIgc3RvcmVzIGFyZQ0KKyAgIC8vIGNvbXBsZXRlZC4NCisgICAvLyBE ZWxheXMgYXQgdGhpcyBsZXZlbCAodG8gcHJvdGVjdCB3cml0ZXMpIGFyZSBu b3QgbmVlZGVkIGhlcmUuDQorICAgd3JpdGViKHZhbCwgY3RsKTsNCit9DQor DQorDQorLy8NCisvLyBEZXNjcmlwdGlvbjogUmVhZCBhIGJ5dGUgZnJvbSBJ SUMgaGFyZHdhcmUNCisvLw0KK3N0YXRpYyBpbnQgaWljX2libW9jcF9nZXRi eXRlKHZvaWQgKmRhdGEsIGludCBjdGwpDQorew0KKyAgIGludCB2YWw7DQor DQorICAgdmFsID0gcmVhZGIoY3RsKTsNCisgICByZXR1cm4gKHZhbCk7DQor fQ0KKw0KKw0KKy8vDQorLy8gRGVzY3JpcHRpb246IFJldHVybiBvdXIgc2xh dmUgYWRkcmVzcy4gIFRoaXMgaXMgdGhlIGFkZHJlc3MNCisvLyBwdXQgb24g dGhlIEkyQyBidXMgd2hlbiBhbm90aGVyIG1hc3RlciBvbiB0aGUgYnVzIHdh bnRzIHRvIGFkZHJlc3MgdXMNCisvLyBhcyBhIHNsYXZlDQorLy8NCitzdGF0 aWMgaW50IGlpY19pYm1vY3BfZ2V0b3duKHZvaWQgKmRhdGEpDQorew0KKyAg IHJldHVybigoKHN0cnVjdCBpaWNfaWJtICopKGRhdGEpKS0+aWljX293bik7 DQorfQ0KKw0KKw0KKy8vDQorLy8gRGVzY3JpcHRpb246IFJldHVybiB0aGUg Y2xvY2sgcmF0ZQ0KKy8vDQorc3RhdGljIGludCBpaWNfaWJtb2NwX2dldGNs b2NrKHZvaWQgKmRhdGEpDQorew0KKyAgIHJldHVybigoKHN0cnVjdCBpaWNf aWJtICopKGRhdGEpKS0+aWljX2Nsb2NrKTsNCit9DQorDQorDQorI2lmIDAN CitzdGF0aWMgdm9pZCBpaWNfaWJtb2NwX3NsZWVwKHVuc2lnbmVkIGxvbmcg dGltZW91dCkNCit7DQorICAgc2NoZWR1bGVfdGltZW91dCggdGltZW91dCAq IEhaKTsNCit9DQorI2VuZGlmDQorDQorDQorLy8NCisvLyBEZXNjcmlwdGlv bjogIFB1dCB0aGlzIHByb2Nlc3MgdG8gc2xlZXAuICBXZSB3aWxsIHdha2Ug dXAgd2hlbiB0aGUNCisvLyBJSUMgY29udHJvbGxlciBpbnRlcnJ1cHRzLg0K Ky8vDQorc3RhdGljIHZvaWQgaWljX2libW9jcF93YWl0Zm9ycGluKHZvaWQg KmRhdGEpIHsNCisNCisgICBpbnQgdGltZW91dCA9IDI7DQorICAgc3RydWN0 IGlpY19pYm0gKnByaXZfZGF0YSA9IGRhdGE7DQorICAgc3BpbmxvY2tfdCBk cml2ZXJfbG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRDsNCisNCisgICAvLw0K KyAgIC8vIElmIGludGVycnVwdHMgYXJlIGVuYWJsZWQgKHdoaWNoIHRoZXkg YXJlKSwgdGhlbiBwdXQgdGhlIHByb2Nlc3MgdG8NCisgICAvLyBzbGVlcC4g IFRoaXMgcHJvY2VzcyB3aWxsIGJlIGF3YWtlbmVkIGJ5IHR3byBldmVudHMg LS0gZWl0aGVyIHRoZQ0KKyAgIC8vIHRoZSBJSUMgcGVyaXBoZXJhbCBpbnRl cnJ1cHRzIG9yIHRoZSB0aW1lb3V0IGV4cGlyZXMuIA0KKyAgIC8vDQorICAg aWYgKHByaXZfZGF0YS0+aWljX2lycSA+IDApIHsNCisgICAgICBzcGluX2xv Y2tfaXJxKCZkcml2ZXJfbG9jayk7DQorICAgICAgaWYgKGlpY19wZW5kaW5n ID09IDApIHsNCisgIAkgaW50ZXJydXB0aWJsZV9zbGVlcF9vbl90aW1lb3V0 KCYoaWljX3dhaXRbcHJpdl9kYXRhLT5pbmRleF0pLCB0aW1lb3V0KkhaICk7 DQorICAgICAgfSBlbHNlDQorIAkgaWljX3BlbmRpbmcgPSAwOw0KKyAgICAg IHNwaW5fdW5sb2NrX2lycSgmZHJpdmVyX2xvY2spOw0KKyAgIH0gZWxzZSB7 DQorICAgICAgLy8NCisgICAgICAvLyBJZiBpbnRlcnJ1cHRzIGFyZSBub3Qg ZW5hYmxlZCB0aGVuIGRlbGF5IGZvciBhIHJlYXNvbmFibGUgYW1vdW50DQor ICAgICAgLy8gb2YgdGltZSBhbmQgcmV0dXJuLiAgV2UgZXhwZWN0IHRoYXQg YnkgdGltZSB3ZSByZXR1cm4gdG8gdGhlIGNhbGxpbmcNCisgICAgICAvLyBm dW5jdGlvbiB0aGF0IHRoZSBJSUMgaGFzIGZpbmlzaGVkIG91ciByZXF1ZXN0 ZWQgdHJhbnNhY3Rpb24gYW5kDQorICAgICAgLy8gdGhlIHN0YXR1cyBiaXQg cmVmbGVjdHMgdGhpcy4NCisgICAgICAvLw0KKyAgICAgIC8vIHVkZWxheSBp cyBwcm9iYWJseSBub3QgdGhlIGJlc3QgY2hvaWNlIGZvciB0aGlzIHNpbmNl IGl0IGlzDQorICAgICAgLy8gdGhlIGVxdWl2YWxlbnQgb2YgYSBidXN5IHdh aXQNCisgICAgICAvLw0KKyAgICAgIHVkZWxheSgxMDApOw0KKyAgIH0NCisg ICAvL3ByaW50aygiaWljX2libW9jcF93YWl0Zm9ycGluOiBleGl0dGluZ1xu Iik7DQorfQ0KKw0KKw0KKy8vDQorLy8gRGVzY3JpcHRpb246IFRoZSByZWdp c3RlcmVkIGludGVycnVwdCBoYW5kbGVyDQorLy8NCitzdGF0aWMgdm9pZCBp aWNfaWJtb2NwX2hhbmRsZXIoaW50IHRoaXNfaXJxLCB2b2lkICpkZXZfaWQs IHN0cnVjdCBwdF9yZWdzICpyZWdzKSANCit7DQorICAgaW50IHJldDsNCisg ICBzdHJ1Y3QgaWljX3JlZ3MgKmlpYzsNCisgICBzdHJ1Y3QgaWljX2libSAq cHJpdl9kYXRhID0gZGV2X2lkOw0KKyAgIGlpYyA9IChzdHJ1Y3QgaWljX3Jl Z3MgKikgcHJpdl9kYXRhLT5paWNfYmFzZTsNCisgICBpaWNfcGVuZGluZyA9 IDE7DQorICAgREVCMihwcmludGsoImlpY19pYm1vY3BfaGFuZGxlcjogaW4g aW50ZXJydXB0IGhhbmRsZXJcbiIpKTsNCisgICAvLyBSZWFkIHN0YXR1cyBy ZWdpc3Rlcg0KKyAgIHJldCA9IHJlYWRiKChpbnQpICYoaWljLT5zdHMpKTsN CisgICBERUIyKHByaW50aygiaWljX2libW9jcF9oYW5kbGVyOiBzdGF0dXMg PSAleFxuIiwgcmV0KSk7DQorICAgLy8gQ2xlYXIgc3RhdHVzIHJlZ2lzdGVy LiAgU2VlIElCTSBQUEMgNDA1IHJlZmVyZW5jZSBtYW51YWwgZm9yIGRldGFp bHMNCisgICB3cml0ZWIoMHgwYSwgKGludCkgJihpaWMtPnN0cykpOw0KKyAg IHdha2VfdXBfaW50ZXJydXB0aWJsZSgmKGlpY193YWl0W3ByaXZfZGF0YS0+ aW5kZXhdKSk7DQorfQ0KKw0KKw0KKy8vDQorLy8gRGVzY3JpcHRpb246IFRo aXMgZnVuY3Rpb24gaXMgdmVyeSBoYXJkd2FyZSBkZXBlbmRlbnQuICBGaXJz dCwgd2UgbG9jaw0KKy8vIHRoZSByZWdpb24gb2YgbWVtb3J5IHdoZXJlIG91 dCByZWdpc3RlcnMgZXhpc3QuICBOZXh0LCB3ZSByZXF1ZXN0IG91cg0KKy8v IGludGVycnVwdCBsaW5lIGFuZCByZWdpc3RlciBpdHMgYXNzb2NpYXRlZCBo YW5kbGVyLiAgT3VyIElJQyBwZXJpcGhlcmFsDQorLy8gdXNlcyBpbnRlcnJ1 cHQgbnVtYmVyIDIsIGFzIHNwZWNpZmllZCBieSB0aGUgNDA1IHJlZmVyZW5j ZSBtYW51YWwuDQorLy8NCitzdGF0aWMgaW50IGlpY19od19yZXNyY19pbml0 KGludCBpbnN0YW5jZSkNCit7DQorDQorICAgREVCKHByaW50aygiaWljX2h3 X3Jlc3JjX2luaXQ6IFBoeXNpY2FsIEJhc2UgYWRkcmVzczogMHgleFxuIiwg KHUzMikgSUlDX0FERFJbaW5zdGFuY2VdICkpOw0KKyAgIGlpY19pYm1vY3Bf YWRhcHNbaW5zdGFuY2VdLT5paWNfYmFzZSA9ICh1MzIpaW9yZW1hcCgodW5z aWduZWQgbG9uZylJSUNfQUREUltpbnN0YW5jZV0sUEFHRV9TSVpFKTsNCisN CisgICBERUIocHJpbnRrKCJpaWNfaHdfcmVzcmNfaW5pdDogaW9yZW1hcHBl ZCBiYXNlIGFkZHJlc3M6IDB4JXhcbiIsIGlpY19pYm1vY3BfYWRhcHNbaW5z dGFuY2VdLT5paWNfYmFzZSkpOw0KKw0KKyAgIGlmIChpaWNfaWJtb2NwX2Fk YXBzW2luc3RhbmNlXS0+aWljX2lycSA+IDApIHsNCisJDQorICAgICAgaWYg KHJlcXVlc3RfaXJxKGlpY19pYm1vY3BfYWRhcHNbaW5zdGFuY2VdLT5paWNf aXJxLCBpaWNfaWJtb2NwX2hhbmRsZXIsDQorICAgICAgIDAsICJJQk0gT0NQ IElJQyIsIGlpY19pYm1vY3BfYWRhcHNbaW5zdGFuY2VdKSA8IDApIHsNCisg ICAgICAgICBwcmludGsoS0VSTl9FUlIgImlpY19od19yZXNyY19pbml0OiBS ZXF1ZXN0IGlycSVkIGZhaWxlZFxuIiwNCisgICAgICAgICAgaWljX2libW9j cF9hZGFwc1tpbnN0YW5jZV0tPmlpY19pcnEpOw0KKwkgaWljX2libW9jcF9h ZGFwc1tpbnN0YW5jZV0tPmlpY19pcnEgPSAwOw0KKyAgICAgIH0gZWxzZSB7 DQorICAgICAgICAgREVCMyhwcmludGsoImlpY19od19yZXNyY19pbml0OiBF bmFibGVkIGludGVycnVwdFxuIikpOw0KKyAgICAgIH0NCisgICB9DQorICAg cmV0dXJuIDA7DQorfQ0KKw0KKw0KKy8vDQorLy8gRGVzY3JpcHRpb246IFJl bGVhc2UgaXJxIGFuZCBtZW1vcnkNCisvLw0KK3N0YXRpYyB2b2lkIGlpY19p Ym1vY3BfcmVsZWFzZSh2b2lkKQ0KK3sNCisgICBpbnQgaTsNCisNCisgICBm b3IoaT0wOyBpPElJQ19OVU1TOyBpKyspIHsNCisgICAgICBzdHJ1Y3QgaWlj X2libSAqcHJpdl9kYXRhID0gKHN0cnVjdCBpaWNfaWJtICopaWljX2libW9j cF9kYXRhW2ldLT5kYXRhOw0KKyAgICAgIGlmIChwcml2X2RhdGEtPmlpY19p cnEgPiAwKSB7DQorICAgICAgICAgZGlzYWJsZV9pcnEocHJpdl9kYXRhLT5p aWNfaXJxKTsNCisgICAgICAgICBmcmVlX2lycShwcml2X2RhdGEtPmlpY19p cnEsIDApOw0KKyAgICAgIH0NCisgICAgICBrZnJlZShpaWNfaWJtb2NwX2Rh dGFbaV0pOw0KKyAgICAgIGtmcmVlKGlpY19pYm1vY3Bfb3BzW2ldKTsNCisg ICB9DQorfQ0KKw0KKw0KKy8vDQorLy8gRGVzY3JpcHRpb246IERvZXMgbm90 aGluZw0KKy8vDQorc3RhdGljIGludCBpaWNfaWJtb2NwX3JlZyhzdHJ1Y3Qg aTJjX2NsaWVudCAqY2xpZW50KQ0KK3sNCisJcmV0dXJuIDA7DQorfQ0KKw0K Kw0KKy8vDQorLy8gRGVzY3JpcHRpb246IERvZXMgbm90aGluZw0KKy8vDQor c3RhdGljIGludCBpaWNfaWJtb2NwX3VucmVnKHN0cnVjdCBpMmNfY2xpZW50 ICpjbGllbnQpDQorew0KKwlyZXR1cm4gMDsNCit9DQorDQorDQorLy8NCisv LyBEZXNjcmlwdGlvbjogSWYgdGhpcyBjb21waWxlZCBhcyBhIG1vZHVsZSwg dGhlbiBpbmNyZW1lbnQgdGhlIGNvdW50DQorLy8NCitzdGF0aWMgdm9pZCBp aWNfaWJtb2NwX2luY191c2Uoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQ0K K3sNCisjaWZkZWYgTU9EVUxFDQorCU1PRF9JTkNfVVNFX0NPVU5UOw0KKyNl bmRpZg0KK30NCisNCisNCisvLw0KKy8vIERlc2NyaXB0aW9uOiBJZiB0aGlz IGlzIGEgbW9kdWxlLCB0aGVuIGRlY3JlbWVudCB0aGUgY291bnQNCisvLw0K K3N0YXRpYyB2b2lkIGlpY19pYm1vY3BfZGVjX3VzZShzdHJ1Y3QgaTJjX2Fk YXB0ZXIgKmFkYXApDQorew0KKyNpZmRlZiBNT0RVTEUNCisJTU9EX0RFQ19V U0VfQ09VTlQ7DQorI2VuZGlmDQorfQ0KKw0KKy8vDQorLy8gRGVzY3JpcHRp b246IENhbGxlZCB3aGVuIHRoZSBtb2R1bGUgaXMgbG9hZGVkLiAgVGhpcyBm dW5jdGlvbiBzdGFydHMgdGhlDQorLy8gY2FzY2FkZSBvZiBjYWxscyB1cCB0 aHJvdWdoIHRoZSBoZWlyYXJjaHkgb2YgaTJjIG1vZHVsZXMgKGkuZS4gdXAg dG8gdGhlDQorLy8gIGFsZ29yaXRobSBsYXllciBhbmQgaW50byB0byB0aGUg Y29yZSBsYXllcikNCisvLw0KK3N0YXRpYyBpbnQgX19pbml0IGlpY19pYm1v Y3BfaW5pdCh2b2lkKSANCit7DQorICAgaW50IGk7DQorDQorICAgcHJpbnRr KEtFUk5fSU5GTyAiaWljX2libW9jcF9pbml0OiBJQk0gb24tY2hpcCBpaWMg YWRhcHRlciBtb2R1bGVcbiIpOw0KKyANCisgICBmb3IoaT0wOyBpPElJQ19O VU1TOyBpKyspIHsNCisgICAgICBpaWNfaWJtb2NwX2RhdGFbaV0gPSBrbWFs bG9jKHNpemVvZihzdHJ1Y3QgaTJjX2FsZ29faWljX2RhdGEpLEdGUF9LRVJO RUwpOw0KKyAgICAgIGlmKGlpY19pYm1vY3BfZGF0YVtpXSA9PSBOVUxMKSB7 DQorICAgICAgICAgcmV0dXJuIC1FTk9NRU07DQorICAgICAgfQ0KKyAgICAg IG1lbXNldChpaWNfaWJtb2NwX2RhdGFbaV0sIDAsIHNpemVvZihzdHJ1Y3Qg aTJjX2FsZ29faWljX2RhdGEpKTsNCisgICAgICANCisgICAgICBzd2l0Y2gg KGkpIHsNCisJICAgICAgY2FzZSAwOg0KKwkgICAgICAgaWljX2libW9jcF9h ZGFwc1tpXS0+aWljX2lycSA9IElJQ19JUlEoMCk7DQorCSAgICAgIGJyZWFr Ow0KKwkgICAgICBjYXNlIDE6DQorCSAgICAgICBpaWNfaWJtb2NwX2FkYXBz W2ldLT5paWNfaXJxID0gSUlDX0lSUSgxKTsNCisJICAgICAgYnJlYWs7DQor ICAgICAgfQ0KKyAgICAgIGlpY19pYm1vY3BfYWRhcHNbaV0tPmlpY19jbG9j ayA9IElJQ19DTE9DSzsNCisgICAgICBpaWNfaWJtb2NwX2FkYXBzW2ldLT5p aWNfb3duID0gSUlDX09XTjsgDQorICAgICAgaWljX2libW9jcF9hZGFwc1tp XS0+aW5kZXggPSBpOw0KKyANCisgICAgICBERUIocHJpbnRrKCJpcnEgJXhc biIsIGlpY19pYm1vY3BfYWRhcHNbaV0tPmlpY19pcnEpKTsNCisgICAgICBE RUIocHJpbnRrKCJjbG9jayAleFxuIiwgaWljX2libW9jcF9hZGFwc1tpXS0+ aWljX2Nsb2NrKSk7DQorICAgICAgREVCKHByaW50aygib3duICV4XG4iLCBp aWNfaWJtb2NwX2FkYXBzW2ldLT5paWNfb3duKSk7DQorICAgICAgREVCKHBy aW50aygiaW5kZXggJXhcbiIsIGlpY19pYm1vY3BfYWRhcHNbaV0tPmluZGV4 KSk7DQorDQorDQorICAgICAgaWljX2libW9jcF9kYXRhW2ldLT5kYXRhID0g KHN0cnVjdCBpaWNfcmVncyAqKWlpY19pYm1vY3BfYWRhcHNbaV07IA0KKyAg ICAgIGlpY19pYm1vY3BfZGF0YVtpXS0+c2V0aWljID0gaWljX2libW9jcF9z ZXRieXRlOw0KKyAgICAgIGlpY19pYm1vY3BfZGF0YVtpXS0+Z2V0aWljID0g aWljX2libW9jcF9nZXRieXRlOw0KKyAgICAgIGlpY19pYm1vY3BfZGF0YVtp XS0+Z2V0b3duID0gaWljX2libW9jcF9nZXRvd247DQorICAgICAgaWljX2li bW9jcF9kYXRhW2ldLT5nZXRjbG9jayA9IGlpY19pYm1vY3BfZ2V0Y2xvY2s7 DQorICAgICAgaWljX2libW9jcF9kYXRhW2ldLT53YWl0Zm9ycGluID0gaWlj X2libW9jcF93YWl0Zm9ycGluOw0KKyAgICAgIGlpY19pYm1vY3BfZGF0YVtp XS0+dWRlbGF5ID0gODA7DQorICAgICAgaWljX2libW9jcF9kYXRhW2ldLT5t ZGVsYXkgPSA4MDsNCisgICAgICBpaWNfaWJtb2NwX2RhdGFbaV0tPnRpbWVv dXQgPSAxMDA7DQorICAgICAgDQorICAgICAgICAgICAgaWljX2libW9jcF9v cHNbaV0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaTJjX2FkYXB0ZXIpLCBH RlBfS0VSTkVMKTsNCisgICAgICBpZihpaWNfaWJtb2NwX29wc1tpXSA9PSBO VUxMKSB7DQorICAgICAgICAgcmV0dXJuIC1FTk9NRU07DQorICAgICAgfQ0K KyAgICAgIG1lbXNldChpaWNfaWJtb2NwX29wc1tpXSwgMCwgc2l6ZW9mKHN0 cnVjdCBpMmNfYWRhcHRlcikpOw0KKyAgICAgIHN0cmNweShpaWNfaWJtb2Nw X29wc1tpXS0+bmFtZSwgIklCTSBPQ1AgSUlDIGFkYXB0ZXIiKTsNCisgICAg ICBpaWNfaWJtb2NwX29wc1tpXS0+aWQgPSBJMkNfSFdfT0NQOw0KKyAgICAg IGlpY19pYm1vY3Bfb3BzW2ldLT5hbGdvID0gTlVMTDsNCisgICAgICBpaWNf aWJtb2NwX29wc1tpXS0+YWxnb19kYXRhID0gaWljX2libW9jcF9kYXRhW2ld Ow0KKyAgICAgIGlpY19pYm1vY3Bfb3BzW2ldLT5pbmNfdXNlID0gaWljX2li bW9jcF9pbmNfdXNlOw0KKyAgICAgIGlpY19pYm1vY3Bfb3BzW2ldLT5kZWNf dXNlID0gaWljX2libW9jcF9kZWNfdXNlOw0KKyAgICAgIGlpY19pYm1vY3Bf b3BzW2ldLT5jbGllbnRfcmVnaXN0ZXIgPSBpaWNfaWJtb2NwX3JlZzsNCisg ICAgICBpaWNfaWJtb2NwX29wc1tpXS0+Y2xpZW50X3VucmVnaXN0ZXIgPSBp aWNfaWJtb2NwX3VucmVnOw0KKyAgICAgICANCisgICAgICANCisgICAgICBp bml0X3dhaXRxdWV1ZV9oZWFkKCYoaWljX3dhaXRbaV0pKTsNCisgICAgICBp ZiAoaWljX2h3X3Jlc3JjX2luaXQoaSkgPT0gMCkgew0KKyAgICAgICAgIGlm IChpMmNfaWljX2FkZF9idXMoaWljX2libW9jcF9vcHNbaV0pIDwgMCkNCisg ICAgICAgICByZXR1cm4gLUVOT0RFVjsNCisgICAgICB9IGVsc2Ugew0KKyAg ICAgICAgIHJldHVybiAtRU5PREVWOw0KKyAgICAgIH0NCisgICAgICBERUIo cHJpbnRrKEtFUk5fSU5GTyAiaWljX2libW9jcF9pbml0OiBmb3VuZCBkZXZp Y2UgYXQgJSN4LlxuXG4iLCBpaWNfaWJtb2NwX2FkYXBzW2ldLT5paWNfYmFz ZSkpOw0KKyAgIH0NCisgICByZXR1cm4gMDsNCit9DQorDQorDQorc3RhdGlj IHZvaWQgaWljX2libW9jcF9leGl0KHZvaWQpDQorew0KKyAgIGludCBpOw0K Kw0KKyAgIGZvcihpPTA7IGk8SUlDX05VTVM7IGkrKykgew0KKyAgICAgIGky Y19paWNfZGVsX2J1cyhpaWNfaWJtb2NwX29wc1tpXSk7DQorICAgfQ0KKyAg IGlpY19pYm1vY3BfcmVsZWFzZSgpOw0KK30NCisNCitFWFBPUlRfTk9fU1lN Qk9MUzsNCisNCisvLw0KKy8vIElmIG1vZHVsZXMgaXMgTk9UIGRlZmluZWQg d2hlbiB0aGlzIGZpbGUgaXMgY29tcGlsZWQsIHRoZW4gdGhlIE1PRFVMRV8q DQorLy8gbWFjcm9zIHdpbGwgcmVzb2x2ZSB0byBub3RoaW5nDQorLy8NCitN T0RVTEVfQVVUSE9SKCJNb250YVZpc3RhIFNvZnR3YXJlIDx3d3cubXZpc3Rh LmNvbT4iKTsNCitNT0RVTEVfREVTQ1JJUFRJT04oIkkyQy1CdXMgYWRhcHRl ciByb3V0aW5lcyBmb3IgUFBDIDQwNSBJSUMgYnVzIGFkYXB0ZXIiKTsNCitN T0RVTEVfUEFSTShiYXNlLCAiaSIpOw0KK01PRFVMRV9QQVJNKGlycSwgImki KTsNCitNT0RVTEVfUEFSTShjbG9jaywgImkiKTsNCitNT0RVTEVfUEFSTShv d24sICJpIik7DQorTU9EVUxFX1BBUk0oaTJjX2RlYnVnLCJpIik7DQorDQor DQorbW9kdWxlX2luaXQoaWljX2libW9jcF9pbml0KTsNCittb2R1bGVfZXhp dChpaWNfaWJtb2NwX2V4aXQpOyANCi0tLSAvZGV2L251bGwJMTk5NC0wNy0x NyAxOTo0NjoxOC4wMDAwMDAwMDAgLTA0MDANCisrKyBsaW51eC9kcml2ZXJz L2kyYy9pMmMtYWxnby04eHguYwkyMDAyLTA3LTIzIDA4OjUyOjQ3LjAwMDAw MDAwMCAtMDQwMA0KQEAgLTAsMCArMSw1ODkgQEANCisvKg0KKyAqIGkyYy1h bGdvLTh4eC5jIGkyeCBkcml2ZXIgYWxnb3JpdGhtcyBmb3IgTVBDOFhYIENQ TQ0KKyAqIENvcHlyaWdodCAoYykgMTk5OSBEYW4gTWFsZWsgKGRtYWxla0Bq bGMubmV0KS4NCisgKg0KKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQ0K KyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0KKyAgICB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBM aWNlbnNlLCBvcg0KKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLg0KKw0KKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCisgICAgYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YNCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KKyAgICBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0K Kw0KKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KKyAgICBhbG9uZyB3aXRo IHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0 d2FyZQ0KKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENh bWJyaWRnZSwgTUEgMDIxMzksIFVTQS4NCisgKg0KKyAqIG1vdmVkIGludG8g cHJvcGVyIGkyYyBpbnRlcmZhY2U7IHNlcGFyYXRlZCBvdXQgcGxhdGZvcm0g c3BlY2lmaWMgDQorICogcGFydHMgaW50byBpMmMtcnB4LmMNCisgKiBCcmFk IFBhcmtlciAoYnJhZEBoZWVsdG9lLmNvbSkNCisgKi8NCisNCisvLyBYWFgg dG9kbw0KKy8vIHRpbWVvdXQgc2xlZXA/DQorDQorLyogJElkOiBpMmMtYWxn by04eHguYyx2IDEuNiAyMDAyLzA2LzEyIDAyOjI5OjU0IG1kcyBFeHAgJCAq Lw0KKw0KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4NCisjaW5jbHVkZSA8 bGludXgvbW9kdWxlLmg+DQorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+DQor I2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4NCisjaW5jbHVkZSA8bGludXgvdmVy c2lvbi5oPg0KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+DQorI2luY2x1ZGUg PGFzbS91YWNjZXNzLmg+DQorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPg0K KyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPg0KKw0KKyNpbmNsdWRlIDxhc20v bXBjOHh4Lmg+DQorI2luY2x1ZGUgPGFzbS9jb21tcHJvYy5oPg0KKw0KKyNp bmNsdWRlIDxsaW51eC9pMmMuaD4NCisjaW5jbHVkZSA8bGludXgvaTJjLWFs Z28tOHh4Lmg+DQorDQorI2RlZmluZSBDUE1fTUFYX1JFQUQJNTEzDQorDQor c3RhdGljIHdhaXRfcXVldWVfaGVhZF90IGlpY193YWl0Ow0KK3N0YXRpYyB1 c2hvcnQgcl90YmFzZSwgcl9yYmFzZTsNCisNCitpbnQgY3BtX3NjYW4gPSAx Ow0KK2ludCBjcG1fZGVidWcgPSAwOw0KKw0KK3N0YXRpYyB2b2lkDQorY3Bt X2lpY19pbnRlcnJ1cHQodm9pZCAqZGV2X2lkLCB2b2lkICpyZWdzKQ0KK3sN CisJdm9sYXRpbGUgaTJjOHh4X3QgKmkyYyA9IChpMmM4eHhfdCAqKWRldl9p ZDsNCisNCisJaWYgKGNwbV9kZWJ1ZyA+IDEpDQorCQlwcmludGsoImNwbV9p aWNfaW50ZXJydXB0KGRldl9pZD0lcClcbiIsIGRldl9pZCk7DQorDQorCS8q IENoaXAgZXJyYXRhLCBjbGVhciBlbmFibGUuDQorCSovDQorCWkyYy0+aTJj X2kybW9kID0gMDsNCisNCisJLyogQ2xlYXIgaW50ZXJydXB0Lg0KKwkqLw0K KwlpMmMtPmkyY19pMmNlciA9IDB4ZmY7DQorDQorCS8qIEdldCAnbWUgZ29p bmcgYWdhaW4uDQorCSovDQorCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaWlj X3dhaXQpOw0KK30NCisNCitzdGF0aWMgdm9pZA0KK2NwbV9paWNfaW5pdChz dHJ1Y3QgaTJjX2FsZ29fOHh4X2RhdGEgKmNwbV9hZGFwKQ0KK3sNCisJdm9s YXRpbGUgaWljX3QJCSppaXAgPSBjcG1fYWRhcC0+aWlwOw0KKwl2b2xhdGls ZSBpMmM4eHhfdAkqaTJjID0gY3BtX2FkYXAtPmkyYzsNCisNCisJaWYgKGNw bV9kZWJ1ZykgcHJpbnRrKCJjcG1faWljX2luaXQoKSAtIGlpcD0lcFxuIixp aXApOw0KKw0KKwkvKiBJbml0aWFsaXplIHRoZSBwYXJhbWV0ZXIgcmFtLg0K KwkgKiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSBtYW55IHRoaW5ncyBhcmUgaW5p dGlhbGl6ZWQgdG8gemVybywNCisJICogZXNwZWNpYWxseSBpbiB0aGUgY2Fz ZSBvZiBhIG1pY3JvY29kZSBwYXRjaC4NCisJICovDQorCWlpcC0+aWljX3Jz dGF0ZSA9IDA7DQorCWlpcC0+aWljX3JkcCA9IDA7DQorCWlpcC0+aWljX3Ji cHRyID0gMDsNCisJaWlwLT5paWNfcmJjID0gMDsNCisJaWlwLT5paWNfcnh0 bXAgPSAwOw0KKwlpaXAtPmlpY190c3RhdGUgPSAwOw0KKwlpaXAtPmlpY190 ZHAgPSAwOw0KKwlpaXAtPmlpY190YnB0ciA9IDA7DQorCWlpcC0+aWljX3Ri YyA9IDA7DQorCWlpcC0+aWljX3R4dG1wID0gMDsNCisNCisJLyogU2V0IHVw IHRoZSBJSUMgcGFyYW1ldGVycyBpbiB0aGUgcGFyYW1ldGVyIHJhbS4NCisJ Ki8NCisJaWlwLT5paWNfdGJhc2UgPSByX3RiYXNlID0gY3BtX2FkYXAtPmRw X2FkZHI7DQorCWlpcC0+aWljX3JiYXNlID0gcl9yYmFzZSA9IGNwbV9hZGFw LT5kcF9hZGRyICsgc2l6ZW9mKGNiZF90KSoyOw0KKw0KKwlpaXAtPmlpY190 ZmNyID0gU01DX0VCOw0KKwlpaXAtPmlpY19yZmNyID0gU01DX0VCOw0KKw0K KwkvKiBTZXQgbWF4aW11bSByZWNlaXZlIHNpemUuDQorCSovDQorCWlpcC0+ aWljX21yYmxyID0gQ1BNX01BWF9SRUFEOw0KKw0KKwkvKiBJbml0aWFsaXpl IFR4L1J4IHBhcmFtZXRlcnMuDQorCSovDQorCWlmIChjcG1fYWRhcC0+cmVs b2MgPT0gMCkgew0KKwkJdm9sYXRpbGUgY3BtOHh4X3QgKmNwID0gY3BtX2Fk YXAtPmNwOw0KKw0KKwkJY3AtPmNwX2NwY3IgPQ0KKwkJCW1rX2NyX2NtZChD UE1fQ1JfQ0hfSTJDLCBDUE1fQ1JfSU5JVF9UUlgpIHwgQ1BNX0NSX0ZMRzsN CisJCXdoaWxlIChjcC0+Y3BfY3BjciAmIENQTV9DUl9GTEcpOw0KKwl9DQor DQorCS8qIFNlbGVjdCBhbiBhcmJpdHJhcnkgYWRkcmVzcy4gIEp1c3QgbWFr ZSBzdXJlIGl0IGlzIHVuaXF1ZS4NCisJKi8NCisJaTJjLT5pMmNfaTJhZGQg PSAweDM0Ow0KKw0KKwkvKiBNYWtlIGNsb2NrIHJ1biBtYXhpbXVtIHNsb3cu DQorCSovDQorCWkyYy0+aTJjX2kyYnJnID0gNzsNCisNCisJLyogRGlzYWJs ZSBpbnRlcnJ1cHRzLg0KKwkqLw0KKwlpMmMtPmkyY19pMmNtciA9IDA7DQor CWkyYy0+aTJjX2kyY2VyID0gMHhmZjsNCisNCisJaW5pdF93YWl0cXVldWVf aGVhZCgmaWljX3dhaXQpOw0KKw0KKwkvKiBJbnN0YWxsIGludGVycnVwdCBo YW5kbGVyLg0KKwkqLw0KKwlpZiAoY3BtX2RlYnVnKSB7DQorCQlwcmludGsg KCIlc1slZF0gSW5zdGFsbCBJU1IgZm9yIElSUSAlZFxuIiwNCisJCQlfX2Z1 bmNfXyxfX0xJTkVfXywgQ1BNVkVDX0kyQyk7DQorCX0NCisJKCpjcG1fYWRh cC0+c2V0aXNyKShDUE1WRUNfSTJDLCBjcG1faWljX2ludGVycnVwdCwgKHZv aWQgKilpMmMpOw0KK30NCisNCisNCitzdGF0aWMgaW50DQorY3BtX2lpY19z aHV0ZG93bihzdHJ1Y3QgaTJjX2FsZ29fOHh4X2RhdGEgKmNwbV9hZGFwKQ0K K3sNCisJdm9sYXRpbGUgaTJjOHh4X3QgKmkyYyA9IGNwbV9hZGFwLT5pMmM7 DQorDQorCS8qIFNodXQgZG93biBJSUMuDQorCSovDQorCWkyYy0+aTJjX2ky bW9kID0gMDsNCisJaTJjLT5pMmNfaTJjbXIgPSAwOw0KKwlpMmMtPmkyY19p MmNlciA9IDB4ZmY7DQorDQorCXJldHVybigwKTsNCit9DQorDQorc3RhdGlj IHZvaWQgDQorY3BtX3Jlc2V0X2lpY19wYXJhbXModm9sYXRpbGUgaWljX3Qg KmlpcCkNCit7DQorCWlpcC0+aWljX3RiYXNlID0gcl90YmFzZTsNCisJaWlw LT5paWNfcmJhc2UgPSByX3JiYXNlOw0KKw0KKwlpaXAtPmlpY190ZmNyID0g U01DX0VCOw0KKwlpaXAtPmlpY19yZmNyID0gU01DX0VCOw0KKw0KKwlpaXAt PmlpY19tcmJsciA9IENQTV9NQVhfUkVBRDsNCisNCisJaWlwLT5paWNfcnN0 YXRlID0gMDsNCisJaWlwLT5paWNfcmRwID0gMDsNCisJaWlwLT5paWNfcmJw dHIgPSByX3JiYXNlOw0KKwlpaXAtPmlpY19yYmMgPSAwOw0KKwlpaXAtPmlp Y19yeHRtcCA9IDA7DQorCWlpcC0+aWljX3RzdGF0ZSA9IDA7DQorCWlpcC0+ aWljX3RkcCA9IDA7DQorCWlpcC0+aWljX3RicHRyID0gcl90YmFzZTsNCisJ aWlwLT5paWNfdGJjID0gMDsNCisJaWlwLT5paWNfdHh0bXAgPSAwOw0KK30N CisNCisjZGVmaW5lIEJEX1NDX05BSwkJKCh1c2hvcnQpMHgwMDA0KSAvKiBO QUsgLSBkaWQgbm90IHJlc3BvbmQgKi8NCisjZGVmaW5lIENQTV9DUl9DTE9T RV9SWEJECSgodXNob3J0KTB4MDAwNykNCisNCitzdGF0aWMgdm9pZCBmb3Jj ZV9jbG9zZShzdHJ1Y3QgaTJjX2FsZ29fOHh4X2RhdGEgKmNwbSkNCit7DQor CWlmIChjcG0tPnJlbG9jID09IDApIHsNCisJCXZvbGF0aWxlIGNwbTh4eF90 ICpjcCA9IGNwbS0+Y3A7DQorDQorCQlpZiAoY3BtX2RlYnVnKSBwcmludGso ImZvcmNlX2Nsb3NlKClcbiIpOw0KKwkJY3AtPmNwX2NwY3IgPQ0KKwkJCW1r X2NyX2NtZChDUE1fQ1JfQ0hfSTJDLCBDUE1fQ1JfQ0xPU0VfUlhCRCkgfA0K KwkJCUNQTV9DUl9GTEc7DQorDQorCQl3aGlsZSAoY3AtPmNwX2NwY3IgJiBD UE1fQ1JfRkxHKTsNCisJfQ0KK30NCisNCisNCisvKiBSZWFkIGZyb20gSUlD Li4uDQorICogYWJ5dGUgPSBhZGRyZXNzIGJ5dGUsIHdpdGggci93IGZsYWcg YWxyZWFkeSBzZXQNCisgKi8NCitzdGF0aWMgaW50DQorY3BtX2lpY19yZWFk KHN0cnVjdCBpMmNfYWxnb184eHhfZGF0YSAqY3BtLCB1X2NoYXIgYWJ5dGUs IGNoYXIgKmJ1ZiwgaW50IGNvdW50KQ0KK3sNCisJdm9sYXRpbGUgaWljX3Qg KmlpcCA9IGNwbS0+aWlwOw0KKwl2b2xhdGlsZSBpMmM4eHhfdCAqaTJjID0g Y3BtLT5pMmM7DQorCXZvbGF0aWxlIGNwbTh4eF90ICpjcCA9IGNwbS0+Y3A7 DQorCXZvbGF0aWxlIGNiZF90CSp0YmRmLCAqcmJkZjsNCisJdV9jaGFyICp0 YjsNCisJdW5zaWduZWQgbG9uZyBmbGFnczsNCisNCisJaWYgKGNvdW50ID49 IENQTV9NQVhfUkVBRCkNCisJCXJldHVybiAtRUlOVkFMOw0KKw0KKwkvKiBj aGVjayBmb3IgYW5kIHVzZSBhIG1pY3JvY29kZSByZWxvY2F0aW9uIHBhdGNo ICovDQorCWlmIChjcG0tPnJlbG9jKSB7DQorCQljcG1fcmVzZXRfaWljX3Bh cmFtcyhpaXApOw0KKwl9DQorDQorCXRiZGYgPSAoY2JkX3QgKikmY3AtPmNw X2RwbWVtW2lpcC0+aWljX3RiYXNlXTsNCisJcmJkZiA9IChjYmRfdCAqKSZj cC0+Y3BfZHBtZW1baWlwLT5paWNfcmJhc2VdOw0KKw0KKwkvKiBUbyByZWFk LCB3ZSBuZWVkIGFuIGVtcHR5IGJ1ZmZlciBvZiB0aGUgcHJvcGVyIGxlbmd0 aC4NCisJICogQWxsIHRoYXQgaXMgdXNlZCBpcyB0aGUgZmlyc3QgYnl0ZSBm b3IgYWRkcmVzcywgdGhlIHJlbWFpbmRlcg0KKwkgKiBpcyBqdXN0IHVzZWQg Zm9yIHRpbWluZyAoYW5kIGRvZXNuJ3QgcmVhbGx5IGhhdmUgdG8gZXhpc3Qp Lg0KKwkgKi8NCisJaWYgKGNwbS0+cmVsb2MpIHsNCisJCWNwbV9yZXNldF9p aWNfcGFyYW1zKGlpcCk7DQorCX0NCisJdGIgPSBjcG0tPnRlbXA7DQorCXRi ID0gKHVfY2hhciAqKSgoKHVpbnQpdGIgKyAxNSkgJiB+MTUpOw0KKwl0Ylsw XSA9IGFieXRlOwkJLyogRGV2aWNlIGFkZHJlc3MgYnl0ZSB3L3J3IGZsYWcg Ki8NCisNCisJZmx1c2hfZGNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKSB0 YiwgKHVuc2lnbmVkIGxvbmcpICh0YisxKSk7DQorDQorCWlmIChjcG1fZGVi dWcpIHByaW50aygiY3BtX2lpY19yZWFkKGFieXRlPTB4JXgpXG4iLCBhYnl0 ZSk7DQorDQorCXRiZGYtPmNiZF9idWZhZGRyID0gX19wYSh0Yik7DQorCXRi ZGYtPmNiZF9kYXRsZW4gPSBjb3VudCArIDE7DQorCXRiZGYtPmNiZF9zYyA9 DQorCQlCRF9TQ19SRUFEWSB8IEJEX1NDX0lOVFJQVCB8IEJEX1NDX0xBU1Qg fA0KKwkJQkRfU0NfV1JBUCB8IEJEX0lJQ19TVEFSVDsNCisNCisJcmJkZi0+ Y2JkX2RhdGxlbiA9IDA7DQorCXJiZGYtPmNiZF9idWZhZGRyID0gX19wYShi dWYpOw0KKwlyYmRmLT5jYmRfc2MgPSBCRF9TQ19FTVBUWSB8IEJEX1NDX1dS QVA7DQorDQorCWludmFsaWRhdGVfZGNhY2hlX3JhbmdlKCh1bnNpZ25lZCBs b25nKSBidWYsICh1bnNpZ25lZCBsb25nKSAoYnVmK2NvdW50KSk7DQorDQor CS8qIENoaXAgYnVnLCBzZXQgZW5hYmxlIGhlcmUgKi8NCisJbG9jYWxfaXJx X3NhdmUoZmxhZ3MpOw0KKwlpMmMtPmkyY19pMmNtciA9IDB4MTM7CS8qIEVu YWJsZSBzb21lIGludGVydXB0cyAqLw0KKwlpMmMtPmkyY19pMmNlciA9IDB4 ZmY7DQorCWkyYy0+aTJjX2kybW9kID0gMTsJLyogRW5hYmxlICovDQorCWky Yy0+aTJjX2kyY29tID0gMHg4MTsJLyogU3RhcnQgbWFzdGVyICovDQorDQor CS8qIFdhaXQgZm9yIElJQyB0cmFuc2ZlciAqLw0KKwlpbnRlcnJ1cHRpYmxl X3NsZWVwX29uKCZpaWNfd2FpdCk7DQorCWxvY2FsX2lycV9yZXN0b3JlKGZs YWdzKTsNCisJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQ0KKwkJcmV0 dXJuIC1FSU87DQorDQorCWlmIChjcG1fZGVidWcpIHsNCisJCXByaW50aygi dHggc2MgJTA0eCwgcnggc2MgJTA0eFxuIiwNCisJCSAgICAgICB0YmRmLT5j YmRfc2MsIHJiZGYtPmNiZF9zYyk7DQorCX0NCisNCisJaWYgKHRiZGYtPmNi ZF9zYyAmIEJEX1NDX05BSykgew0KKwkJcHJpbnRrKCJJSUMgcmVhZDsgbm8g YWNrXG4iKTsNCisJCXJldHVybiAwOw0KKwl9DQorDQorCWlmIChyYmRmLT5j YmRfc2MgJiBCRF9TQ19FTVBUWSkgew0KKwkJcHJpbnRrKCJJSUMgcmVhZDsg Y29tcGxldGUgYnV0IHJidWYgZW1wdHlcbiIpOw0KKwkJZm9yY2VfY2xvc2Uo Y3BtKTsNCisJCXByaW50aygidHggc2MgJTA0eCwgcnggc2MgJTA0eFxuIiwN CisJCSAgICAgICB0YmRmLT5jYmRfc2MsIHJiZGYtPmNiZF9zYyk7DQorCX0N CisNCisJaWYgKGNwbV9kZWJ1ZykgcHJpbnRrKCJyZWFkICVkIGJ5dGVzXG4i LCByYmRmLT5jYmRfZGF0bGVuKTsNCisNCisJaWYgKHJiZGYtPmNiZF9kYXRs ZW4gPCBjb3VudCkgew0KKwkJcHJpbnRrKCJJSUMgcmVhZDsgc2hvcnQsIHdh bnRlZCAlZCBnb3QgJWRcbiIsDQorCQkgICAgICAgY291bnQsIHJiZGYtPmNi ZF9kYXRsZW4pOw0KKwkJcmV0dXJuIDA7DQorCX0NCisNCisNCisJaW52YWxp ZGF0ZV9kY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpIGJ1ZiwgKHVuc2ln bmVkIGxvbmcpIChidWYrY291bnQpKTsNCisNCisJcmV0dXJuIGNvdW50Ow0K K30NCisNCisvKiBXcml0ZSB0byBJSUMuLi4NCisgKiBhZGRyID0gYWRkcmVz cyBieXRlLCB3aXRoIHIvdyBmbGFnIGFscmVhZHkgc2V0DQorICovDQorc3Rh dGljIGludA0KK2NwbV9paWNfd3JpdGUoc3RydWN0IGkyY19hbGdvXzh4eF9k YXRhICpjcG0sIHVfY2hhciBhYnl0ZSwgY2hhciAqYnVmLGludCBjb3VudCkN Cit7DQorCXZvbGF0aWxlIGlpY190ICppaXAgPSBjcG0tPmlpcDsNCisJdm9s YXRpbGUgaTJjOHh4X3QgKmkyYyA9IGNwbS0+aTJjOw0KKwl2b2xhdGlsZSBj cG04eHhfdCAqY3AgPSBjcG0tPmNwOw0KKwl2b2xhdGlsZSBjYmRfdAkqdGJk ZjsNCisJdV9jaGFyICp0YjsNCisJdW5zaWduZWQgbG9uZyBmbGFnczsNCisN CisJLyogY2hlY2sgZm9yIGFuZCB1c2UgYSBtaWNyb2NvZGUgcmVsb2NhdGlv biBwYXRjaCAqLw0KKwlpZiAoY3BtLT5yZWxvYykgew0KKwkJY3BtX3Jlc2V0 X2lpY19wYXJhbXMoaWlwKTsNCisJfQ0KKwl0YiA9IGNwbS0+dGVtcDsNCisJ dGIgPSAodV9jaGFyICopKCgodWludCl0YiArIDE1KSAmIH4xNSk7DQorCSp0 YiA9IGFieXRlOwkJLyogRGV2aWNlIGFkZHJlc3MgYnl0ZSB3L3J3IGZsYWcg Ki8NCisNCisJZmx1c2hfZGNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKSB0 YiwgKHVuc2lnbmVkIGxvbmcpICh0YisxKSk7DQorCWZsdXNoX2RjYWNoZV9y YW5nZSgodW5zaWduZWQgbG9uZykgYnVmLCAodW5zaWduZWQgbG9uZykgKGJ1 Zitjb3VudCkpOw0KKw0KKwlpZiAoY3BtX2RlYnVnKSBwcmludGsoImNwbV9p aWNfd3JpdGUoYWJ5dGU9MHgleClcbiIsIGFieXRlKTsNCisNCisJLyogc2V0 IHVwIDIgZGVzY3JpcHRvcnMgKi8NCisJdGJkZiA9IChjYmRfdCAqKSZjcC0+ Y3BfZHBtZW1baWlwLT5paWNfdGJhc2VdOw0KKw0KKwl0YmRmWzBdLmNiZF9i dWZhZGRyID0gX19wYSh0Yik7DQorCXRiZGZbMF0uY2JkX2RhdGxlbiA9IDE7 DQorCXRiZGZbMF0uY2JkX3NjID0gQkRfU0NfUkVBRFkgfCBCRF9JSUNfU1RB UlQ7DQorDQorCXRiZGZbMV0uY2JkX2J1ZmFkZHIgPSBfX3BhKGJ1Zik7DQor CXRiZGZbMV0uY2JkX2RhdGxlbiA9IGNvdW50Ow0KKwl0YmRmWzFdLmNiZF9z YyA9IEJEX1NDX1JFQURZIHwgQkRfU0NfSU5UUlBUIHwgQkRfU0NfTEFTVCB8 IEJEX1NDX1dSQVA7DQorDQorCS8qIENoaXAgYnVnLCBzZXQgZW5hYmxlIGhl cmUgKi8NCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOw0KKwlpMmMtPmkyY19p MmNtciA9IDB4MTM7CS8qIEVuYWJsZSBzb21lIGludGVydXB0cyAqLw0KKwlp MmMtPmkyY19pMmNlciA9IDB4ZmY7DQorCWkyYy0+aTJjX2kybW9kID0gMTsJ LyogRW5hYmxlICovDQorCWkyYy0+aTJjX2kyY29tID0gMHg4MTsJLyogU3Rh cnQgbWFzdGVyICovDQorDQorCS8qIFdhaXQgZm9yIElJQyB0cmFuc2ZlciAq Lw0KKwlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uKCZpaWNfd2FpdCk7DQorCWxv Y2FsX2lycV9yZXN0b3JlKGZsYWdzKTsNCisJaWYgKHNpZ25hbF9wZW5kaW5n KGN1cnJlbnQpKQ0KKwkJcmV0dXJuIC1FSU87DQorDQorCWlmIChjcG1fZGVi dWcpIHsNCisJCXByaW50aygidHgwIHNjICUwNHgsIHR4MSBzYyAlMDR4XG4i LA0KKwkJICAgICAgIHRiZGZbMF0uY2JkX3NjLCB0YmRmWzFdLmNiZF9zYyk7 DQorCX0NCisNCisJaWYgKHRiZGYtPmNiZF9zYyAmIEJEX1NDX05BSykgew0K KwkJcHJpbnRrKCJJSUMgd3JpdGU7IG5vIGFja1xuIik7DQorCQlyZXR1cm4g MDsNCisJfQ0KKwkgIA0KKwlpZiAodGJkZi0+Y2JkX3NjICYgQkRfU0NfUkVB RFkpIHsNCisJCXByaW50aygiSUlDIHdyaXRlOyBjb21wbGV0ZSBidXQgdGJ1 ZiByZWFkeVxuIik7DQorCQlyZXR1cm4gMDsNCisJfQ0KKw0KKwlyZXR1cm4g Y291bnQ7DQorfQ0KKw0KKy8qIFNlZSBpZiBhbiBJSUMgYWRkcmVzcyBleGlz dHMuLg0KKyAqIGFkZHIgPSA3IGJpdCBhZGRyZXNzLCB1bnNoaWZ0ZWQNCisg Ki8NCitzdGF0aWMgaW50DQorY3BtX2lpY190cnlhZGRyZXNzKHN0cnVjdCBp MmNfYWxnb184eHhfZGF0YSAqY3BtLCBpbnQgYWRkcikNCit7DQorCXZvbGF0 aWxlIGlpY190ICppaXAgPSBjcG0tPmlpcDsNCisJdm9sYXRpbGUgaTJjOHh4 X3QgKmkyYyA9IGNwbS0+aTJjOw0KKwl2b2xhdGlsZSBjcG04eHhfdCAqY3Ag PSBjcG0tPmNwOw0KKwl2b2xhdGlsZSBjYmRfdCAqdGJkZiwgKnJiZGY7DQor CXVfY2hhciAqdGI7DQorCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGxlbjsNCisN CisJaWYgKGNwbV9kZWJ1ZyA+IDEpDQorCQlwcmludGsoImNwbV9paWNfdHJ5 YWRkcmVzcyhjcG09JXAsYWRkcj0lZClcbiIsIGNwbSwgYWRkcik7DQorDQor CS8qIGNoZWNrIGZvciBhbmQgdXNlIGEgbWljcm9jb2RlIHJlbG9jYXRpb24g cGF0Y2ggKi8NCisJaWYgKGNwbS0+cmVsb2MpIHsNCisJCWNwbV9yZXNldF9p aWNfcGFyYW1zKGlpcCk7DQorCX0NCisNCisJaWYgKGNwbV9kZWJ1ZyAmJiBh ZGRyID09IDApIHsNCisJCXByaW50aygiaWlwICVwLCBkcF9hZGRyIDB4JXhc biIsIGNwbS0+aWlwLCBjcG0tPmRwX2FkZHIpOw0KKwkJcHJpbnRrKCJpaWNf dGJhc2UgJWQsIHJfdGJhc2UgJWRcbiIsIGlpcC0+aWljX3RiYXNlLCByX3Ri YXNlKTsNCisJfQ0KKw0KKwl0YmRmID0gKGNiZF90ICopJmNwLT5jcF9kcG1l bVtpaXAtPmlpY190YmFzZV07DQorCXJiZGYgPSAoY2JkX3QgKikmY3AtPmNw X2RwbWVtW2lpcC0+aWljX3JiYXNlXTsNCisNCisJdGIgPSBjcG0tPnRlbXA7 DQorCXRiID0gKHVfY2hhciAqKSgoKHVpbnQpdGIgKyAxNSkgJiB+MTUpOw0K Kw0KKwkvKiBkbyBhIHNpbXBsZSByZWFkICovDQorCXRiWzBdID0gKGFkZHIg PDwgMSkgfCAxOwkvKiBkZXZpY2UgYWRkcmVzcyAoKyByZWFkKSAqLw0KKwls ZW4gPSAyOw0KKw0KKwlmbHVzaF9kY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxv bmcpIHRiLCAodW5zaWduZWQgbG9uZykgKHRiKzEpKTsNCisNCisJdGJkZi0+ Y2JkX2J1ZmFkZHIgPSBfX3BhKHRiKTsNCisJdGJkZi0+Y2JkX2RhdGxlbiA9 IGxlbjsNCisJdGJkZi0+Y2JkX3NjID0NCisJCUJEX1NDX1JFQURZIHwgQkRf U0NfSU5UUlBUIHwgQkRfU0NfTEFTVCB8DQorCQlCRF9TQ19XUkFQIHwgQkRf SUlDX1NUQVJUOw0KKw0KKwlyYmRmLT5jYmRfZGF0bGVuID0gMDsNCisJcmJk Zi0+Y2JkX2J1ZmFkZHIgPSBfX3BhKHRiKzIpOw0KKwlyYmRmLT5jYmRfc2Mg PSBCRF9TQ19FTVBUWSB8IEJEX1NDX1dSQVA7DQorDQorCWxvY2FsX2lycV9z YXZlKGZsYWdzKTsNCisJaTJjLT5pMmNfaTJjbXIgPSAweDEzOwkvKiBFbmFi bGUgc29tZSBpbnRlcnVwdHMgKi8NCisJaTJjLT5pMmNfaTJjZXIgPSAweGZm Ow0KKwlpMmMtPmkyY19pMm1vZCA9IDE7CS8qIEVuYWJsZSAqLw0KKwlpMmMt PmkyY19pMmNvbSA9IDB4ODE7CS8qIFN0YXJ0IG1hc3RlciAqLw0KKw0KKwlp ZiAoY3BtX2RlYnVnID4gMSkgcHJpbnRrKCJhYm91dCB0byBzbGVlcFxuIik7 DQorDQorCS8qIHdhaXQgZm9yIElJQyB0cmFuc2ZlciAqLw0KKwlpbnRlcnJ1 cHRpYmxlX3NsZWVwX29uKCZpaWNfd2FpdCk7DQorCWxvY2FsX2lycV9yZXN0 b3JlKGZsYWdzKTsNCisJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQ0K KwkJcmV0dXJuIC1FSU87DQorDQorCWlmIChjcG1fZGVidWcgPiAxKSBwcmlu dGsoImJhY2sgZnJvbSBzbGVlcFxuIik7DQorDQorCWlmICh0YmRmLT5jYmRf c2MgJiBCRF9TQ19OQUspIHsNCisJCWlmIChjcG1fZGVidWcgPiAxKSBwcmlu dGsoIklJQyB0cnk7IG5vIGFja1xuIik7DQorCQlyZXR1cm4gMDsNCisJfQ0K KwkgIA0KKwlpZiAodGJkZi0+Y2JkX3NjICYgQkRfU0NfUkVBRFkpIHsNCisJ CXByaW50aygiSUlDIHRyeTsgY29tcGxldGUgYnV0IHRidWYgcmVhZHlcbiIp Ow0KKwl9DQorCQ0KKwlyZXR1cm4gMTsNCit9DQorDQorc3RhdGljIGludCBj cG1feGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLA0KKwkJICAg IHN0cnVjdCBpMmNfbXNnIG1zZ3NbXSwgDQorCQkgICAgaW50IG51bSkNCit7 DQorCXN0cnVjdCBpMmNfYWxnb184eHhfZGF0YSAqYWRhcCA9IGkyY19hZGFw LT5hbGdvX2RhdGE7DQorCXN0cnVjdCBpMmNfbXNnICpwbXNnOw0KKwlpbnQg aSwgcmV0Ow0KKwl1X2NoYXIgYWRkcjsNCisgICAgDQorCWZvciAoaSA9IDA7 IGkgPCBudW07IGkrKykgew0KKwkJcG1zZyA9ICZtc2dzW2ldOw0KKw0KKwkJ aWYgKGNwbV9kZWJ1ZykNCisJCQlwcmludGsoImkyYy1hbGdvLTh4eC5vOiAi DQorCQkJICAgICAgICIjJWQgYWRkcj0weCV4IGZsYWdzPTB4JXggbGVuPSVk XG4iLA0KKwkJCSAgICAgICBpLCBwbXNnLT5hZGRyLCBwbXNnLT5mbGFncywg cG1zZy0+bGVuKTsNCisNCisJCWFkZHIgPSBwbXNnLT5hZGRyIDw8IDE7DQor CQlpZiAocG1zZy0+ZmxhZ3MgJiBJMkNfTV9SRCApDQorCQkJYWRkciB8PSAx Ow0KKwkJaWYgKHBtc2ctPmZsYWdzICYgSTJDX01fUkVWX0RJUl9BRERSICkN CisJCQlhZGRyIF49IDE7DQorICAgIA0KKwkJaWYgKCEocG1zZy0+ZmxhZ3Mg JiBJMkNfTV9OT1NUQVJUKSkgew0KKwkJfQ0KKwkJaWYgKHBtc2ctPmZsYWdz ICYgSTJDX01fUkQgKSB7DQorCQkJLyogcmVhZCBieXRlcyBpbnRvIGJ1ZmZl ciovDQorCQkJcmV0ID0gY3BtX2lpY19yZWFkKGFkYXAsIGFkZHIsIHBtc2ct PmJ1ZiwgcG1zZy0+bGVuKTsNCisJCQlpZiAoY3BtX2RlYnVnKQ0KKwkJCQlw cmludGsoImkyYy1hbGdvLTh4eC5vOiByZWFkICVkIGJ5dGVzXG4iLCByZXQp Ow0KKwkJCWlmIChyZXQgPCBwbXNnLT5sZW4gKSB7DQorCQkJCXJldHVybiAo cmV0PDApPyByZXQgOiAtRVJFTU9URUlPOw0KKwkJCX0NCisJCX0gZWxzZSB7 DQorCQkJLyogd3JpdGUgYnl0ZXMgZnJvbSBidWZmZXIgKi8NCisJCQlyZXQg PSBjcG1faWljX3dyaXRlKGFkYXAsIGFkZHIsIHBtc2ctPmJ1ZiwgcG1zZy0+ bGVuKTsNCisJCQlpZiAoY3BtX2RlYnVnKQ0KKwkJCQlwcmludGsoImkyYy1h bGdvLTh4eC5vOiB3cm90ZSAlZFxuIiwgcmV0KTsNCisJCQlpZiAocmV0IDwg cG1zZy0+bGVuICkgew0KKwkJCQlyZXR1cm4gKHJldDwwKSA/IHJldCA6IC1F UkVNT1RFSU87DQorCQkJfQ0KKwkJfQ0KKwl9DQorCXJldHVybiAobnVtKTsN Cit9DQorDQorc3RhdGljIGludCBhbGdvX2NvbnRyb2woc3RydWN0IGkyY19h ZGFwdGVyICphZGFwdGVyLCANCisJdW5zaWduZWQgaW50IGNtZCwgdW5zaWdu ZWQgbG9uZyBhcmcpDQorew0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGlj IHUzMiBjcG1fZnVuYyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApDQorew0K KwlyZXR1cm4gSTJDX0ZVTkNfU01CVVNfRU1VTCB8IEkyQ19GVU5DXzEwQklU X0FERFIgfCANCisJICAgICAgIEkyQ19GVU5DX1BST1RPQ09MX01BTkdMSU5H OyANCit9DQorDQorLyogLS0tLS1leHBvcnRlZCBhbGdvcml0aG0gZGF0YTog LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkqLw0KKw0K K3N0YXRpYyBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBjcG1fYWxnbyA9IHsNCisJ Ik1QQzh4eCBDUE0gYWxnb3JpdGhtIiwNCisJSTJDX0FMR09fTVBDOFhYLA0K KwljcG1feGZlciwNCisJTlVMTCwNCisJTlVMTCwJCQkJLyogc2xhdmVfeG1p dAkJKi8NCisJTlVMTCwJCQkJLyogc2xhdmVfcmVjdgkJKi8NCisJYWxnb19j b250cm9sLAkJCS8qIGlvY3RsCQkqLw0KKwljcG1fZnVuYywJCQkvKiBmdW5j dGlvbmFsaXR5CSovDQorfTsNCisNCisvKiANCisgKiByZWdpc3RlcmluZyBm dW5jdGlvbnMgdG8gbG9hZCBhbGdvcml0aG1zIGF0IHJ1bnRpbWUgDQorICov DQoraW50IGkyY184eHhfYWRkX2J1cyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFk YXApDQorew0KKwlpbnQgaTsNCisJc3RydWN0IGkyY19hbGdvXzh4eF9kYXRh ICpjcG1fYWRhcCA9IGFkYXAtPmFsZ29fZGF0YTsNCisNCisJaWYgKGNwbV9k ZWJ1ZykNCisJCXByaW50aygiaTJjLWFsZ28tOHh4Lm86IGh3IHJvdXRpbmVz IGZvciAlcyByZWdpc3RlcmVkLlxuIiwNCisJCSAgICAgICBhZGFwLT5uYW1l KTsNCisNCisJLyogcmVnaXN0ZXIgbmV3IGFkYXB0ZXIgdG8gaTJjIG1vZHVs ZS4uLiAqLw0KKw0KKwlhZGFwLT5pZCB8PSBjcG1fYWxnby5pZDsNCisJYWRh cC0+YWxnbyA9ICZjcG1fYWxnbzsNCisNCisjaWZkZWYgTU9EVUxFDQorCU1P RF9JTkNfVVNFX0NPVU5UOw0KKyNlbmRpZg0KKw0KKwlpMmNfYWRkX2FkYXB0 ZXIoYWRhcCk7DQorCWNwbV9paWNfaW5pdChjcG1fYWRhcCk7DQorDQorCS8q IHNjYW4gYnVzICovDQorCWlmIChjcG1fc2Nhbikgew0KKwkJcHJpbnRrKEtF Uk5fSU5GTyAiIGkyYy1hbGdvLTh4eC5vOiBzY2FubmluZyBidXMgJXMuLi5c biIsDQorCQkgICAgICAgYWRhcC0+bmFtZSk7DQorCQlmb3IgKGkgPSAwOyBp IDwgMTI4OyBpKyspIHsNCisJCQlpZiAoY3BtX2lpY190cnlhZGRyZXNzKGNw bV9hZGFwLCBpKSkgew0KKwkJCQlwcmludGsoIiglMDJ4KSIsaTw8MSk7IA0K KwkJCX0NCisJCX0NCisJCXByaW50aygiXG4iKTsNCisJfQ0KKwlyZXR1cm4g MDsNCit9DQorDQorDQoraW50IGkyY184eHhfZGVsX2J1cyhzdHJ1Y3QgaTJj X2FkYXB0ZXIgKmFkYXApDQorew0KKwlpbnQgcmVzOw0KKwlzdHJ1Y3QgaTJj X2FsZ29fOHh4X2RhdGEgKmNwbV9hZGFwID0gYWRhcC0+YWxnb19kYXRhOw0K Kw0KKwljcG1faWljX3NodXRkb3duKGNwbV9hZGFwKTsNCisNCisJaWYgKChy ZXMgPSBpMmNfZGVsX2FkYXB0ZXIoYWRhcCkpIDwgMCkNCisJCXJldHVybiBy ZXM7DQorDQorCXByaW50aygiaTJjLWFsZ28tOHh4Lm86IGFkYXB0ZXIgdW5y ZWdpc3RlcmVkOiAlc1xuIixhZGFwLT5uYW1lKTsNCisNCisjaWZkZWYgTU9E VUxFDQorCU1PRF9ERUNfVVNFX0NPVU5UOw0KKyNlbmRpZg0KKwlyZXR1cm4g MDsNCit9DQorDQorRVhQT1JUX1NZTUJPTChpMmNfOHh4X2FkZF9idXMpOw0K K0VYUE9SVF9TWU1CT0woaTJjXzh4eF9kZWxfYnVzKTsNCisNCitpbnQgX19p bml0IGkyY19hbGdvXzh4eF9pbml0ICh2b2lkKQ0KK3sNCisJcHJpbnRrKCJp MmMtYWxnby04eHgubzogaTJjIG1wYzh4eCBhbGdvcml0aG0gbW9kdWxlIHZl cnNpb24gJXMgKCVzKVxuIiwgSTJDX1ZFUlNJT04sIEkyQ19EQVRFKTsNCisJ cmV0dXJuIDA7DQorfQ0KKw0KKw0KKyNpZmRlZiBNT0RVTEUNCitNT0RVTEVf QVVUSE9SKCJCcmFkIFBhcmtlciA8YnJhZEBoZWVsdG9lLmNvbT4iKTsNCitN T0RVTEVfREVTQ1JJUFRJT04oIkkyQy1CdXMgTVBDOFhYIGFsZ29yaXRobSIp Ow0KK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsNCisNCitpbnQgaW5pdF9tb2R1 bGUodm9pZCkgDQorew0KKwlyZXR1cm4gaTJjX2FsZ29fOHh4X2luaXQoKTsN Cit9DQorDQordm9pZCBjbGVhbnVwX21vZHVsZSh2b2lkKSANCit7DQorfQ0K KyNlbmRpZg0K --0-895384732-1030599472=:16793-- - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/