From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.9 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, UNWANTED_LANGUAGE_BODY autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 34059C43460 for ; Wed, 12 May 2021 23:11:24 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id C2A0F611BF for ; Wed, 12 May 2021 23:11:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236431AbhELXMP (ORCPT ); Wed, 12 May 2021 19:12:15 -0400 Received: from gate2.alliedtelesis.co.nz ([202.36.163.20]:50589 "EHLO gate2.alliedtelesis.co.nz" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1348116AbhELVz4 (ORCPT ); Wed, 12 May 2021 17:55:56 -0400 Received: from svr-chch-seg1.atlnz.lc (mmarshal3.atlnz.lc [10.32.18.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by gate2.alliedtelesis.co.nz (Postfix) with ESMTPS id B07A784488 for ; Thu, 13 May 2021 09:54:41 +1200 (NZST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=alliedtelesis.co.nz; s=mail181024; t=1620856481; bh=klHFoZKtPh2BiWfokt3Z0A2abCoYo9YkqQWDvovm2Q4=; h=From:To:CC:Subject:Date:References:In-Reply-To; b=lDn44Eu8X7cyRLRr8S5CF3NBUIuuoa0jU1cQUdXedMdZQpbGRSfE5o0j+JwKODCi/ Yf8ufTIMZbkOVfCERzMtdHX5PPW7OLZIk2CHHH6ZSW0Ls5+GKNJ/5xhk4pGk2TWnJZ O04z6+kFk90FYNOupq+99R19/meFNbBzkUl4PMlTzp42LBsX+ea35PBZkiXIqb8RQY kw4FHNCwam2T3dZshYU28NdaiTZRqEfrA8XmhZDUC9JPY8OWm8KB5hM4OomqMcI2YE +6ZUymst2QKiFO0F4xtULA5649nXjdOyyMwq+qZUDcpGZzaISB8J+uyiuPbXQQYs55 fqz57bMK6vXsQ== Received: from svr-chch-ex1.atlnz.lc (Not Verified[2001:df5:b000:bc8::77]) by svr-chch-seg1.atlnz.lc with Trustwave SEG (v8,2,6,11305) id ; Thu, 13 May 2021 09:54:41 +1200 Received: from svr-chch-ex1.atlnz.lc (2001:df5:b000:bc8:409d:36f5:8899:92e8) by svr-chch-ex1.atlnz.lc (2001:df5:b000:bc8:409d:36f5:8899:92e8) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Thu, 13 May 2021 09:54:41 +1200 Received: from svr-chch-ex1.atlnz.lc ([fe80::409d:36f5:8899:92e8]) by svr-chch-ex1.atlnz.lc ([fe80::409d:36f5:8899:92e8%12]) with mapi id 15.00.1497.015; Thu, 13 May 2021 09:54:41 +1200 From: Chris Packham To: Guenter Roeck , Hardware Monitoring CC: Jean Delvare Subject: Re: [PATCH 3/3] hwmon: (adm9240) Convert to devm_hwmon_device_register_with_info API Thread-Topic: [PATCH 3/3] hwmon: (adm9240) Convert to devm_hwmon_device_register_with_info API Thread-Index: AQHXFkjLr2Hz0R+oz0WybSgWrdlcQ6rf/RaA Date: Wed, 12 May 2021 21:54:41 +0000 Message-ID: <590366ea-2c8c-8d92-171a-87807dedabd6@alliedtelesis.co.nz> References: <20210311073302.221954-1-linux@roeck-us.net> <20210311073302.221954-3-linux@roeck-us.net> In-Reply-To: <20210311073302.221954-3-linux@roeck-us.net> Accept-Language: en-NZ, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-exchange-messagesentrepresentingtype: 1 x-ms-exchange-transport-fromentityheader: Hosted x-originating-ip: [10.32.1.11] Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-SEG-SpamProfiler-Analysis: v=2.3 cv=K6Jc4BeI c=1 sm=1 tr=0 a=Xf/6aR1Nyvzi7BryhOrcLQ==:117 a=xqWC_Br6kY4A:10 a=oKJsc7D3gJEA:10 a=IkcTkHD0fZMA:10 a=5FLXtPjwQuUA:10 a=_jlGtV7tAAAA:8 a=JXhuj7uNEvPnv1H6p3oA:9 a=QEXdDO2ut3YA:10 a=nlm17XC03S6CtCLSeiRr:22 X-SEG-SpamProfiler-Score: 0 Precedence: bulk List-ID: X-Mailing-List: linux-hwmon@vger.kernel.org SGkgR3VlbnRlciwNCg0KT24gMTEvMDMvMjEgODozMyBwbSwgR3VlbnRlciBSb2VjayB3cm90ZToN Cj4gQWxzbyB1c2UgcmVnbWFwIGZvciByZWdpc3RlciBjYWNoaW5nLiBUaGlzIGNoYW5nZSByZWR1 Y2VzIGNvZGUgYW5kDQo+IGRhdGEgc2l6ZSBieSBtb3JlIHRoYW4gNDAlLg0KPg0KPiBXaGlsZSBh dCBpdCwgZml4ZWQgc29tZSB3YXJuaW5ncyByZXBvcnRlZCBieSBjaGVja3BhdGNoLg0KPg0KPiBD YzogQ2hyaXMgUGFja2hhbSA8Q2hyaXMuUGFja2hhbUBhbGxpZWR0ZWxlc2lzLmNvLm56Pg0KPiBT aWduZWQtb2ZmLWJ5OiBHdWVudGVyIFJvZWNrIDxsaW51eEByb2Vjay11cy5uZXQ+DQoNCkkndmUg anVzdCBiZWVuIGluZm9ybWVkIGJ5IG91ciBRQSB0ZWFtIHRoYXQgaXQgbG9va3MgbGlrZSB0aGUg DQpjb25maWd1cmF0aW9uIG9mIGxpbWl0cyAoZS5nLiBieSB3cml0aW5nIHRvIHN5c2ZzKSBoYXMg YmVlbiBicm9rZW4uIA0KUHJvYmFibHkgYnkgdGhpcyBjaGFuZ2UuIEknbSBqdXN0IHN0YXJ0aW5n IHRvIGRpZyBpbnRvIGl0IG5vdyBidXQgSSANCnRob3VnaCBJJ2QgZ2l2ZSB5b3UgYSBoZWFkcyB1 cC4NCg0KPiAtLS0NCj4gICBkcml2ZXJzL2h3bW9uL2FkbTkyNDAuYyB8IDk0MCArKysrKysrKysr KysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ICAgMSBmaWxlIGNoYW5nZWQsIDQ0NSBp bnNlcnRpb25zKCspLCA0OTUgZGVsZXRpb25zKC0pDQo+DQo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2h3bW9uL2FkbTkyNDAuYyBiL2RyaXZlcnMvaHdtb24vYWRtOTI0MC5jDQo+IGluZGV4IDc0MDQw ODJjN2EzZi4uNTY3NzI2M2JjZjBkIDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL2h3bW9uL2FkbTky NDAuYw0KPiArKysgYi9kcml2ZXJzL2h3bW9uL2FkbTkyNDAuYw0KPiBAQCAtMjgsNiArMjgsNyBA QA0KPiAgICAqIExNODEgZXh0ZW5kZWQgdGVtcCByZWFkaW5nIG5vdCBpbXBsZW1lbnRlZA0KPiAg ICAqLw0KPiAgIA0KPiArI2luY2x1ZGUgPGxpbnV4L2JpdHMuaD4NCj4gICAjaW5jbHVkZSA8bGlu dXgvaW5pdC5oPg0KPiAgICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4NCj4gICAjaW5jbHVkZSA8 bGludXgvc2xhYi5oPg0KPiBAQCAtMzcsNyArMzgsNiBAQA0KPiAgICNpbmNsdWRlIDxsaW51eC9o d21vbi12aWQuaD4NCj4gICAjaW5jbHVkZSA8bGludXgvZXJyLmg+DQo+ICAgI2luY2x1ZGUgPGxp bnV4L211dGV4Lmg+DQo+IC0jaW5jbHVkZSA8bGludXgvamlmZmllcy5oPg0KPiAgICNpbmNsdWRl IDxsaW51eC9yZWdtYXAuaD4NCj4gICANCj4gICAvKiBBZGRyZXNzZXMgdG8gc2NhbiAqLw0KPiBA QCAtMTI2LDI5ICsxMjYsMTUgQEAgc3RydWN0IGFkbTkyNDBfZGF0YSB7DQo+ICAgCXN0cnVjdCBk ZXZpY2UgKmRldjsNCj4gICAJc3RydWN0IHJlZ21hcCAqcmVnbWFwOw0KPiAgIAlzdHJ1Y3QgbXV0 ZXggdXBkYXRlX2xvY2s7DQo+IC0JY2hhciB2YWxpZDsNCj4gLQl1bnNpZ25lZCBsb25nIGxhc3Rf dXBkYXRlZF9tZWFzdXJlOw0KPiAtCXVuc2lnbmVkIGxvbmcgbGFzdF91cGRhdGVkX2NvbmZpZzsN Cj4gLQ0KPiAtCXU4IGluWzZdOwkJLyogcm8JaW4wX2lucHV0ICovDQo+IC0JdTggaW5fbWF4WzZd OwkJLyogcncJaW4wX21heCAqLw0KPiAtCXU4IGluX21pbls2XTsJCS8qIHJ3CWluMF9taW4gKi8N Cj4gLQl1OCBmYW5bMl07CQkvKiBybwlmYW4xX2lucHV0ICovDQo+IC0JdTggZmFuX21pblsyXTsJ CS8qIHJ3CWZhbjFfbWluICovDQo+ICsNCj4gICAJdTggZmFuX2RpdlsyXTsJCS8qIHJ3CWZhbjFf ZGl2LCByZWFkLW9ubHkgYWNjZXNzb3IgKi8NCj4gLQlzMTYgdGVtcDsJCS8qIHJvCXRlbXAxX2lu cHV0LCA5LWJpdCBzaWduLWV4dGVuZGVkICovDQo+IC0JczggdGVtcF9tYXhbMl07CQkvKiBydwkw IC0+IHRlbXBfbWF4LCAxIC0+IHRlbXBfbWF4X2h5c3QgKi8NCj4gLQl1MTYgYWxhcm1zOwkJLyog cm8JYWxhcm1zICovDQo+IC0JdTggYW91dDsJCS8qIHJ3CWFvdXRfb3V0cHV0ICovDQo+IC0JdTgg dmlkOwkJCS8qIHJvCXZpZCAqLw0KPiAgIAl1OCB2cm07CQkJLyogLS0JdnJtIHNldCBvbiBzdGFy dHVwLCBubyBhY2Nlc3NvciAqLw0KPiAgIH07DQo+ICAgDQo+ICAgLyogd3JpdGUgbmV3IGZhbiBk aXYsIGNhbGxlcnMgbXVzdCBob2xkIGRhdGEtPnVwZGF0ZV9sb2NrICovDQo+IC1zdGF0aWMgaW50 IGFkbTkyNDBfd3JpdGVfZmFuX2RpdihzdHJ1Y3QgYWRtOTI0MF9kYXRhICpkYXRhLCBpbnQgbnIs DQo+IC0JCXU4IGZhbl9kaXYpDQo+ICtzdGF0aWMgaW50IGFkbTkyNDBfd3JpdGVfZmFuX2Rpdihz dHJ1Y3QgYWRtOTI0MF9kYXRhICpkYXRhLCBpbnQgY2hhbm5lbCwgdTggZmFuX2RpdikNCj4gICB7 DQo+IC0JdW5zaWduZWQgaW50IHJlZywgb2xkLCBzaGlmdCA9IChuciArIDIpICogMjsNCj4gKwl1 bnNpZ25lZCBpbnQgcmVnLCBvbGQsIHNoaWZ0ID0gKGNoYW5uZWwgKyAyKSAqIDI7DQo+ICAgCWlu dCBlcnI7DQo+ICAgDQo+ICAgCWVyciA9IHJlZ21hcF9yZWFkKGRhdGEtPnJlZ21hcCwgQURNOTI0 MF9SRUdfVklEX0ZBTl9ESVYsICZyZWcpOw0KPiBAQCAtMTYxLDMzNSArMTQ3LDEyIEBAIHN0YXRp YyBpbnQgYWRtOTI0MF93cml0ZV9mYW5fZGl2KHN0cnVjdCBhZG05MjQwX2RhdGEgKmRhdGEsIGlu dCBuciwNCj4gICAJaWYgKGVyciA8IDApDQo+ICAgCQlyZXR1cm4gZXJyOw0KPiAgIAlkZXZfZGJn KGRhdGEtPmRldiwNCj4gLQkJImZhbiVkIGNsb2NrIGRpdmlkZXIgY2hhbmdlZCBmcm9tICV1IHRv ICV1XG4iLA0KPiAtCQluciArIDEsIDEgPDwgb2xkLCAxIDw8IGZhbl9kaXYpOw0KPiArCQkiZmFu JWQgY2xvY2sgZGl2aWRlciBjaGFuZ2VkIGZyb20gJWx1IHRvICVsdVxuIiwNCj4gKwkJY2hhbm5l bCArIDEsIEJJVChvbGQpLCBCSVQoZmFuX2RpdikpOw0KPiAgIA0KPiAgIAlyZXR1cm4gMDsNCj4g ICB9DQo+ICAgDQo+IC1zdGF0aWMgaW50IGFkbTkyNDBfdXBkYXRlX21lYXN1cmUoc3RydWN0IGFk bTkyNDBfZGF0YSAqZGF0YSkNCj4gLXsNCj4gLQl1bnNpZ25lZCBpbnQgdmFsOw0KPiAtCXU4IHJl Z3NbMl07DQo+IC0JaW50IGVycjsNCj4gLQlpbnQgaTsNCj4gLQ0KPiAtCWVyciA9IHJlZ21hcF9i dWxrX3JlYWQoZGF0YS0+cmVnbWFwLCBBRE05MjQwX1JFR19JTigwKSwgJmRhdGEtPmluWzBdLCA2 KTsNCj4gLQlpZiAoZXJyIDwgMCkNCj4gLQkJcmV0dXJuIGVycjsNCj4gLQllcnIgPSByZWdtYXBf YnVsa19yZWFkKGRhdGEtPnJlZ21hcCwgQURNOTI0MF9SRUdfSU5UKDApLCAmcmVncywgMik7DQo+ IC0JaWYgKGVyciA8IDApDQo+IC0JCXJldHVybiBlcnI7DQo+IC0NCj4gLQlkYXRhLT5hbGFybXMg PSByZWdzWzBdIHwgcmVnc1sxXSA8PCA4Ow0KPiAtDQo+IC0JLyoNCj4gLQkgKiByZWFkIHRlbXBl cmF0dXJlOiBhc3N1bWUgdGVtcGVyYXR1cmUgY2hhbmdlcyBsZXNzIHRoYW4NCj4gLQkgKiAwLjUn QyBwZXIgdHdvIG1lYXN1cmVtZW50IGN5Y2xlcyB0aHVzIGlnbm9yZSBwb3NzaWJsZQ0KPiAtCSAq IGJ1dCB1bmxpa2VseSBhbGlhc2luZyBlcnJvciBvbiBsc2IgcmVhZGluZy4gLS1HcmFudA0KPiAt CSAqLw0KPiAtCWVyciA9IHJlZ21hcF9yZWFkKGRhdGEtPnJlZ21hcCwgQURNOTI0MF9SRUdfVEVN UCwgJnZhbCk7DQo+IC0JaWYgKGVyciA8IDApDQo+IC0JCXJldHVybiBlcnI7DQo+IC0JZGF0YS0+ dGVtcCA9IHZhbCA8PCA4Ow0KPiAtCWVyciA9IHJlZ21hcF9yZWFkKGRhdGEtPnJlZ21hcCwgQURN OTI0MF9SRUdfVEVNUF9DT05GLCAmdmFsKTsNCj4gLQlpZiAoZXJyIDwgMCkNCj4gLQkJcmV0dXJu IGVycjsNCj4gLQlkYXRhLT50ZW1wIHw9IHZhbDsNCj4gLQ0KPiAtCWVyciA9IHJlZ21hcF9idWxr X3JlYWQoZGF0YS0+cmVnbWFwLCBBRE05MjQwX1JFR19GQU4oMCksDQo+IC0JCQkgICAgICAgJmRh dGEtPmZhblswXSwgMik7DQo+IC0JaWYgKGVyciA8IDApDQo+IC0JCXJldHVybiBlcnI7DQo+IC0N Cj4gLQlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7IC8qIHJlYWQgZmFucyAqLw0KPiAtCQkvKiBh ZGp1c3QgZmFuIGNsb2NrIGRpdmlkZXIgb24gb3ZlcmZsb3cgKi8NCj4gLQkJaWYgKGRhdGEtPnZh bGlkICYmIGRhdGEtPmZhbltpXSA9PSAyNTUgJiYNCj4gLQkJCQlkYXRhLT5mYW5fZGl2W2ldIDwg Mykgew0KPiAtDQo+IC0JCQllcnIgPSBhZG05MjQwX3dyaXRlX2Zhbl9kaXYoZGF0YSwgaSwNCj4g LQkJCQkJKytkYXRhLT5mYW5fZGl2W2ldKTsNCj4gLQkJCWlmIChlcnIgPCAwKQ0KPiAtCQkJCXJl dHVybiBlcnI7DQo+IC0NCj4gLQkJCS8qIGFkanVzdCBmYW5fbWluIGlmIGFjdGl2ZSwgYnV0IG5v dCB0byAwICovDQo+IC0JCQlpZiAoZGF0YS0+ZmFuX21pbltpXSA8IDI1NSAmJg0KPiAtCQkJCQlk YXRhLT5mYW5fbWluW2ldID49IDIpDQo+IC0JCQkJZGF0YS0+ZmFuX21pbltpXSAvPSAyOw0KPiAt CQl9DQo+IC0JfQ0KPiAtDQo+IC0JcmV0dXJuIDA7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBpbnQg YWRtOTI0MF91cGRhdGVfY29uZmlnKHN0cnVjdCBhZG05MjQwX2RhdGEgKmRhdGEpDQo+IC17DQo+ IC0JdW5zaWduZWQgaW50IHZhbDsNCj4gLQlpbnQgaTsNCj4gLQlpbnQgZXJyOw0KPiAtDQo+IC0J Zm9yIChpID0gMDsgaSA8IDY7IGkrKykgew0KPiAtCQllcnIgPSByZWdtYXBfcmF3X3JlYWQoZGF0 YS0+cmVnbWFwLCBBRE05MjQwX1JFR19JTl9NSU4oaSksDQo+IC0JCQkJICAgICAgJmRhdGEtPmlu X21pbltpXSwgMSk7DQo+IC0JCWlmIChlcnIgPCAwKQ0KPiAtCQkJcmV0dXJuIGVycjsNCj4gLQkJ ZXJyID0gcmVnbWFwX3Jhd19yZWFkKGRhdGEtPnJlZ21hcCwgQURNOTI0MF9SRUdfSU5fTUFYKGkp LA0KPiAtCQkJCSAgICAgICZkYXRhLT5pbl9tYXhbaV0sIDEpOw0KPiAtCQlpZiAoZXJyIDwgMCkN Cj4gLQkJCXJldHVybiBlcnI7DQo+IC0JfQ0KPiAtCWVyciA9IHJlZ21hcF9idWxrX3JlYWQoZGF0 YS0+cmVnbWFwLCBBRE05MjQwX1JFR19GQU5fTUlOKDApLA0KPiAtCQkJCSAgICAgICZkYXRhLT5m YW5fbWluWzBdLCAyKTsNCj4gLQlpZiAoZXJyIDwgMCkNCj4gLQkJcmV0dXJuIGVycjsNCj4gLQll cnIgPSByZWdtYXBfYnVsa19yZWFkKGRhdGEtPnJlZ21hcCwgQURNOTI0MF9SRUdfVEVNUF9NQVgo MCksDQo+IC0JCQkJICAgICAgJmRhdGEtPnRlbXBfbWF4WzBdLCAyKTsNCj4gLQlpZiAoZXJyIDwg MCkNCj4gLQkJcmV0dXJuIGVycjsNCj4gLQ0KPiAtCS8qIHJlYWQgZmFuIGRpdnMgYW5kIDUtYml0 IFZJRCAqLw0KPiAtCWVyciA9IHJlZ21hcF9yZWFkKGRhdGEtPnJlZ21hcCwgQURNOTI0MF9SRUdf VklEX0ZBTl9ESVYsICZ2YWwpOw0KPiAtCWlmIChlcnIgPCAwKQ0KPiAtCQlyZXR1cm4gZXJyOw0K PiAtCWRhdGEtPmZhbl9kaXZbMF0gPSAodmFsID4+IDQpICYgMzsNCj4gLQlkYXRhLT5mYW5fZGl2 WzFdID0gKHZhbCA+PiA2KSAmIDM7DQo+IC0JZGF0YS0+dmlkID0gdmFsICYgMHgwZjsNCj4gLQll cnIgPSByZWdtYXBfcmVhZChkYXRhLT5yZWdtYXAsIEFETTkyNDBfUkVHX1ZJRDQsICZ2YWwpOw0K PiAtCWlmIChlcnIgPCAwKQ0KPiAtCQlyZXR1cm4gZXJyOw0KPiAtCWRhdGEtPnZpZCB8PSAodmFs ICYgMSkgPDwgNDsNCj4gLQkvKiByZWFkIGFuYWxvZyBvdXQgKi8NCj4gLQllcnIgPSByZWdtYXBf cmF3X3JlYWQoZGF0YS0+cmVnbWFwLCBBRE05MjQwX1JFR19BTkFMT0dfT1VULA0KPiAtCQkJICAg ICAgJmRhdGEtPmFvdXQsIDEpOw0KPiAtDQo+IC0JcmV0dXJuIGVycjsNCj4gLX0NCj4gLQ0KPiAt c3RhdGljIHN0cnVjdCBhZG05MjQwX2RhdGEgKmFkbTkyNDBfdXBkYXRlX2RldmljZShzdHJ1Y3Qg ZGV2aWNlICpkZXYpDQo+IC17DQo+IC0Jc3RydWN0IGFkbTkyNDBfZGF0YSAqZGF0YSA9IGRldl9n ZXRfZHJ2ZGF0YShkZXYpOw0KPiAtCWludCBlcnI7DQo+IC0NCj4gLQltdXRleF9sb2NrKCZkYXRh LT51cGRhdGVfbG9jayk7DQo+IC0NCj4gLQkvKiBtaW5pbXVtIG1lYXN1cmVtZW50IGN5Y2xlOiAx Ljc1IHNlY29uZHMgKi8NCj4gLQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBkYXRhLT5sYXN0X3Vw ZGF0ZWRfbWVhc3VyZSArIChIWiAqIDcgLyA0KSkNCj4gLQkJCXx8ICFkYXRhLT52YWxpZCkgew0K PiAtCQllcnIgPSBhZG05MjQwX3VwZGF0ZV9tZWFzdXJlKGRhdGEpOw0KPiAtCQlpZiAoZXJyIDwg MCkgew0KPiAtCQkJZGF0YS0+dmFsaWQgPSAwOw0KPiAtCQkJbXV0ZXhfdW5sb2NrKCZkYXRhLT51 cGRhdGVfbG9jayk7DQo+IC0JCQlyZXR1cm4gRVJSX1BUUihlcnIpOw0KPiAtCQl9DQo+IC0JCWRh dGEtPmxhc3RfdXBkYXRlZF9tZWFzdXJlID0gamlmZmllczsNCj4gLQl9DQo+IC0NCj4gLQkvKiBt aW5pbXVtIGNvbmZpZyByZWFkaW5nIGN5Y2xlOiAzMDAgc2Vjb25kcyAqLw0KPiAtCWlmICh0aW1l X2FmdGVyKGppZmZpZXMsIGRhdGEtPmxhc3RfdXBkYXRlZF9jb25maWcgKyAoSFogKiAzMDApKQ0K PiAtCQkJfHwgIWRhdGEtPnZhbGlkKSB7DQo+IC0JCWVyciA9IGFkbTkyNDBfdXBkYXRlX2NvbmZp ZyhkYXRhKTsNCj4gLQkJaWYgKGVyciA8IDApIHsNCj4gLQkJCWRhdGEtPnZhbGlkID0gMDsNCj4g LQkJCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOw0KPiAtCQkJcmV0dXJuIEVSUl9Q VFIoZXJyKTsNCj4gLQkJfQ0KPiAtCQlkYXRhLT5sYXN0X3VwZGF0ZWRfY29uZmlnID0gamlmZmll czsNCj4gLQkJZGF0YS0+dmFsaWQgPSAxOw0KPiAtCX0NCj4gLQltdXRleF91bmxvY2soJmRhdGEt PnVwZGF0ZV9sb2NrKTsNCj4gLQlyZXR1cm4gZGF0YTsNCj4gLX0NCj4gLQ0KPiAtLyoqKiBzeXNm cyBhY2Nlc3NvcnMgKioqLw0KPiAtDQo+IC0vKiB0ZW1wZXJhdHVyZSAqLw0KPiAtc3RhdGljIHNz aXplX3QgdGVtcDFfaW5wdXRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsDQo+IC0JCQkJc3RydWN0 IGRldmljZV9hdHRyaWJ1dGUgKmR1bW15LCBjaGFyICpidWYpDQo+IC17DQo+IC0Jc3RydWN0IGFk bTkyNDBfZGF0YSAqZGF0YSA9IGFkbTkyNDBfdXBkYXRlX2RldmljZShkZXYpOw0KPiAtDQo+IC0J aWYgKElTX0VSUihkYXRhKSkNCj4gLQkJcmV0dXJuIFBUUl9FUlIoZGF0YSk7DQo+IC0NCj4gLQly ZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgZGF0YS0+dGVtcCAvIDEyOCAqIDUwMCk7IC8qIDkt Yml0IHZhbHVlICovDQo+IC19DQo+IC0NCj4gLXN0YXRpYyBzc2l6ZV90IG1heF9zaG93KHN0cnVj dCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsDQo+IC0JCQlj aGFyICpidWYpDQo+IC17DQo+IC0Jc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRy ID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOw0KPiAtCXN0cnVjdCBhZG05MjQwX2RhdGEg KmRhdGEgPSBhZG05MjQwX3VwZGF0ZV9kZXZpY2UoZGV2KTsNCj4gLQ0KPiAtCWlmIChJU19FUlIo ZGF0YSkpDQo+IC0JCXJldHVybiBQVFJfRVJSKGRhdGEpOw0KPiAtDQo+IC0JcmV0dXJuIHNwcmlu dGYoYnVmLCAiJWRcbiIsIGRhdGEtPnRlbXBfbWF4W2F0dHItPmluZGV4XSAqIDEwMDApOw0KPiAt fQ0KPiAtDQo+IC1zdGF0aWMgc3NpemVfdCBtYXhfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBz dHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwNCj4gLQkJCSBjb25zdCBjaGFyICpidWYs IHNpemVfdCBjb3VudCkNCj4gLXsNCj4gLQlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUg KmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7DQo+IC0Jc3RydWN0IGFkbTkyNDBf ZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KPiAtCWxvbmcgdmFsOw0KPiAtCWlu dCBlcnI7DQo+IC0NCj4gLQllcnIgPSBrc3RydG9sKGJ1ZiwgMTAsICZ2YWwpOw0KPiAtCWlmIChl cnIpDQo+IC0JCXJldHVybiBlcnI7DQo+IC0NCj4gLQltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVf bG9jayk7DQo+IC0JZGF0YS0+dGVtcF9tYXhbYXR0ci0+aW5kZXhdID0gVEVNUF9UT19SRUcodmFs KTsNCj4gLQllcnIgPSByZWdtYXBfd3JpdGUoZGF0YS0+cmVnbWFwLCBBRE05MjQwX1JFR19URU1Q X01BWChhdHRyLT5pbmRleCksDQo+IC0JCQkgICBkYXRhLT50ZW1wX21heFthdHRyLT5pbmRleF0p Ow0KPiAtCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOw0KPiAtCXJldHVybiBlcnIg PCAwID8gZXJyIDogY291bnQ7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBERVZJQ0VfQVRUUl9STyh0 ZW1wMV9pbnB1dCk7DQo+IC1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSX1JXKHRlbXAxX21heCwg bWF4LCAwKTsNCj4gLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfUlcodGVtcDFfbWF4X2h5c3Qs IG1heCwgMSk7DQo+IC0NCj4gLS8qIHZvbHRhZ2UgKi8NCj4gLXN0YXRpYyBzc2l6ZV90IGluX3No b3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwN Cj4gLQkJICAgICAgIGNoYXIgKmJ1ZikNCj4gLXsNCj4gLQlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9h dHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7DQo+IC0Jc3RydWN0 IGFkbTkyNDBfZGF0YSAqZGF0YSA9IGFkbTkyNDBfdXBkYXRlX2RldmljZShkZXYpOw0KPiAtDQo+ IC0JaWYgKElTX0VSUihkYXRhKSkNCj4gLQkJcmV0dXJuIFBUUl9FUlIoZGF0YSk7DQo+IC0NCj4g LQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgSU5fRlJPTV9SRUcoZGF0YS0+aW5bYXR0ci0+ aW5kZXhdLA0KPiAtCQkJCWF0dHItPmluZGV4KSk7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBzc2l6 ZV90IGluX21pbl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwNCj4gLQkJCSAgIHN0cnVjdCBkZXZp Y2VfYXR0cmlidXRlICpkZXZhdHRyLCBjaGFyICpidWYpDQo+IC17DQo+IC0Jc3RydWN0IHNlbnNv cl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOw0K PiAtCXN0cnVjdCBhZG05MjQwX2RhdGEgKmRhdGEgPSBhZG05MjQwX3VwZGF0ZV9kZXZpY2UoZGV2 KTsNCj4gLQ0KPiAtCWlmIChJU19FUlIoZGF0YSkpDQo+IC0JCXJldHVybiBQVFJfRVJSKGRhdGEp Ow0KPiAtDQo+IC0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIElOX0ZST01fUkVHKGRhdGEt PmluX21pblthdHRyLT5pbmRleF0sDQo+IC0JCQkJYXR0ci0+aW5kZXgpKTsNCj4gLX0NCj4gLQ0K PiAtc3RhdGljIHNzaXplX3QgaW5fbWF4X3Nob3coc3RydWN0IGRldmljZSAqZGV2LA0KPiAtCQkJ ICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsIGNoYXIgKmJ1ZikNCj4gLXsNCj4g LQlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0 dHIoZGV2YXR0cik7DQo+IC0Jc3RydWN0IGFkbTkyNDBfZGF0YSAqZGF0YSA9IGFkbTkyNDBfdXBk YXRlX2RldmljZShkZXYpOw0KPiAtDQo+IC0JaWYgKElTX0VSUihkYXRhKSkNCj4gLQkJcmV0dXJu IFBUUl9FUlIoZGF0YSk7DQo+IC0NCj4gLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgSU5f RlJPTV9SRUcoZGF0YS0+aW5fbWF4W2F0dHItPmluZGV4XSwNCj4gLQkJCQlhdHRyLT5pbmRleCkp Ow0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgc3NpemVfdCBpbl9taW5fc3RvcmUoc3RydWN0IGRldmlj ZSAqZGV2LA0KPiAtCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLCBjb25z dCBjaGFyICpidWYsDQo+IC0JCQkgICAgc2l6ZV90IGNvdW50KQ0KPiAtew0KPiAtCXN0cnVjdCBz ZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRy KTsNCj4gLQlzdHJ1Y3QgYWRtOTI0MF9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7 DQo+IC0JdW5zaWduZWQgbG9uZyB2YWw7DQo+IC0JaW50IGVycjsNCj4gLQ0KPiAtCWVyciA9IGtz dHJ0b3VsKGJ1ZiwgMTAsICZ2YWwpOw0KPiAtCWlmIChlcnIpDQo+IC0JCXJldHVybiBlcnI7DQo+ IC0NCj4gLQltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7DQo+IC0JZGF0YS0+aW5fbWlu W2F0dHItPmluZGV4XSA9IElOX1RPX1JFRyh2YWwsIGF0dHItPmluZGV4KTsNCj4gLQllcnIgPSBy ZWdtYXBfd3JpdGUoZGF0YS0+cmVnbWFwLCBBRE05MjQwX1JFR19JTl9NSU4oYXR0ci0+aW5kZXgp LA0KPiAtCQkJICAgZGF0YS0+aW5fbWluW2F0dHItPmluZGV4XSk7DQo+IC0JbXV0ZXhfdW5sb2Nr KCZkYXRhLT51cGRhdGVfbG9jayk7DQo+IC0JcmV0dXJuIGVyciA8IDAgPyBlcnIgOiBjb3VudDsN Cj4gLX0NCj4gLQ0KPiAtc3RhdGljIHNzaXplX3QgaW5fbWF4X3N0b3JlKHN0cnVjdCBkZXZpY2Ug KmRldiwNCj4gLQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwgY29uc3Qg Y2hhciAqYnVmLA0KPiAtCQkJICAgIHNpemVfdCBjb3VudCkNCj4gLXsNCj4gLQlzdHJ1Y3Qgc2Vu c29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7 DQo+IC0Jc3RydWN0IGFkbTkyNDBfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0K PiAtCXVuc2lnbmVkIGxvbmcgdmFsOw0KPiAtCWludCBlcnI7DQo+IC0NCj4gLQllcnIgPSBrc3Ry dG91bChidWYsIDEwLCAmdmFsKTsNCj4gLQlpZiAoZXJyKQ0KPiAtCQlyZXR1cm4gZXJyOw0KPiAt DQo+IC0JbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOw0KPiAtCWRhdGEtPmluX21heFth dHRyLT5pbmRleF0gPSBJTl9UT19SRUcodmFsLCBhdHRyLT5pbmRleCk7DQo+IC0JZXJyID0gcmVn bWFwX3dyaXRlKGRhdGEtPnJlZ21hcCwgQURNOTI0MF9SRUdfSU5fTUFYKGF0dHItPmluZGV4KSwN Cj4gLQkJCSAgIGRhdGEtPmluX21heFthdHRyLT5pbmRleF0pOw0KPiAtCW11dGV4X3VubG9jaygm ZGF0YS0+dXBkYXRlX2xvY2spOw0KPiAtCXJldHVybiBlcnIgPCAwID8gZXJyIDogY291bnQ7DQo+ IC19DQo+IC0NCj4gLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfUk8oaW4wX2lucHV0LCBpbiwg MCk7DQo+IC1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSX1JXKGluMF9taW4sIGluX21pbiwgMCk7 DQo+IC1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSX1JXKGluMF9tYXgsIGluX21heCwgMCk7DQo+ IC1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSX1JPKGluMV9pbnB1dCwgaW4sIDEpOw0KPiAtc3Rh dGljIFNFTlNPUl9ERVZJQ0VfQVRUUl9SVyhpbjFfbWluLCBpbl9taW4sIDEpOw0KPiAtc3RhdGlj IFNFTlNPUl9ERVZJQ0VfQVRUUl9SVyhpbjFfbWF4LCBpbl9tYXgsIDEpOw0KPiAtc3RhdGljIFNF TlNPUl9ERVZJQ0VfQVRUUl9STyhpbjJfaW5wdXQsIGluLCAyKTsNCj4gLXN0YXRpYyBTRU5TT1Jf REVWSUNFX0FUVFJfUlcoaW4yX21pbiwgaW5fbWluLCAyKTsNCj4gLXN0YXRpYyBTRU5TT1JfREVW SUNFX0FUVFJfUlcoaW4yX21heCwgaW5fbWF4LCAyKTsNCj4gLXN0YXRpYyBTRU5TT1JfREVWSUNF X0FUVFJfUk8oaW4zX2lucHV0LCBpbiwgMyk7DQo+IC1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRS X1JXKGluM19taW4sIGluX21pbiwgMyk7DQo+IC1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSX1JX KGluM19tYXgsIGluX21heCwgMyk7DQo+IC1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSX1JPKGlu NF9pbnB1dCwgaW4sIDQpOw0KPiAtc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl9SVyhpbjRfbWlu LCBpbl9taW4sIDQpOw0KPiAtc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl9SVyhpbjRfbWF4LCBp bl9tYXgsIDQpOw0KPiAtc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl9STyhpbjVfaW5wdXQsIGlu LCA1KTsNCj4gLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfUlcoaW41X21pbiwgaW5fbWluLCA1 KTsNCj4gLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfUlcoaW41X21heCwgaW5fbWF4LCA1KTsN Cj4gLQ0KPiAtLyogZmFucyAqLw0KPiAtc3RhdGljIHNzaXplX3QgZmFuX3Nob3coc3RydWN0IGRl dmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwNCj4gLQkJCWNoYXIg KmJ1ZikNCj4gLXsNCj4gLQlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0 b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7DQo+IC0Jc3RydWN0IGFkbTkyNDBfZGF0YSAqZGF0 YSA9IGFkbTkyNDBfdXBkYXRlX2RldmljZShkZXYpOw0KPiAtDQo+IC0JaWYgKElTX0VSUihkYXRh KSkNCj4gLQkJcmV0dXJuIFBUUl9FUlIoZGF0YSk7DQo+IC0NCj4gLQlyZXR1cm4gc3ByaW50Zihi dWYsICIlZFxuIiwgRkFOX0ZST01fUkVHKGRhdGEtPmZhblthdHRyLT5pbmRleF0sDQo+IC0JCQkJ MSA8PCBkYXRhLT5mYW5fZGl2W2F0dHItPmluZGV4XSkpOw0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMg c3NpemVfdCBmYW5fbWluX3Nob3coc3RydWN0IGRldmljZSAqZGV2LA0KPiAtCQkJICAgIHN0cnVj dCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLCBjaGFyICpidWYpDQo+IC17DQo+IC0Jc3RydWN0 IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0 dHIpOw0KPiAtCXN0cnVjdCBhZG05MjQwX2RhdGEgKmRhdGEgPSBhZG05MjQwX3VwZGF0ZV9kZXZp Y2UoZGV2KTsNCj4gLQ0KPiAtCWlmIChJU19FUlIoZGF0YSkpDQo+IC0JCXJldHVybiBQVFJfRVJS KGRhdGEpOw0KPiAtDQo+IC0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIEZBTl9GUk9NX1JF RyhkYXRhLT5mYW5fbWluW2F0dHItPmluZGV4XSwNCj4gLQkJCQkxIDw8IGRhdGEtPmZhbl9kaXZb YXR0ci0+aW5kZXhdKSk7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBzc2l6ZV90IGZhbl9kaXZfc2hv dyhzdHJ1Y3QgZGV2aWNlICpkZXYsDQo+IC0JCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUg KmRldmF0dHIsIGNoYXIgKmJ1ZikNCj4gLXsNCj4gLQlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRy aWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7DQo+IC0Jc3RydWN0IGFk bTkyNDBfZGF0YSAqZGF0YSA9IGFkbTkyNDBfdXBkYXRlX2RldmljZShkZXYpOw0KPiAtDQo+IC0J aWYgKElTX0VSUihkYXRhKSkNCj4gLQkJcmV0dXJuIFBUUl9FUlIoZGF0YSk7DQo+IC0NCj4gLQly ZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgMSA8PCBkYXRhLT5mYW5fZGl2W2F0dHItPmluZGV4 XSk7DQo+IC19DQo+IC0NCj4gICAvKg0KPiAgICAqIHNldCBmYW4gc3BlZWQgbG93IGxpbWl0Og0K PiAgICAqDQo+IEBAIC01MDEsMzcgKzE2NCwyNSBAQCBzdGF0aWMgc3NpemVfdCBmYW5fZGl2X3No b3coc3RydWN0IGRldmljZSAqZGV2LA0KPiAgICAqIC0gb3RoZXJ3aXNlOiBzZWxlY3QgZmFuIGNs b2NrIGRpdmlkZXIgdG8gc3VpdCBmYW4gc3BlZWQgbG93IGxpbWl0LA0KPiAgICAqICAgbWVhc3Vy ZW1lbnQgY29kZSBtYXkgYWRqdXN0IHJlZ2lzdGVycyB0byBlbnN1cmUgZmFuIHNwZWVkIHJlYWRp bmcNCj4gICAgKi8NCj4gLXN0YXRpYyBzc2l6ZV90IGZhbl9taW5fc3RvcmUoc3RydWN0IGRldmlj ZSAqZGV2LA0KPiAtCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwNCj4g LQkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpDQo+ICtzdGF0aWMgaW50IGFk bTkyNDBfZmFuX21pbl93cml0ZShzdHJ1Y3QgYWRtOTI0MF9kYXRhICpkYXRhLCBpbnQgY2hhbm5l bCwgbG9uZyB2YWwpDQo+ICAgew0KPiAtCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAq YXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsNCj4gLQlzdHJ1Y3QgYWRtOTI0MF9k YXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7DQo+IC0JaW50IG5yID0gYXR0ci0+aW5k ZXg7DQo+ICAgCXU4IG5ld19kaXY7DQo+IC0JdW5zaWduZWQgbG9uZyB2YWw7DQo+ICsJdTggZmFu X21pbjsNCj4gICAJaW50IGVycjsNCj4gICANCj4gLQllcnIgPSBrc3RydG91bChidWYsIDEwLCAm dmFsKTsNCj4gLQlpZiAoZXJyKQ0KPiAtCQlyZXR1cm4gZXJyOw0KPiAtDQo+ICAgCW11dGV4X2xv Y2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsNCj4gICANCj4gICAJaWYgKCF2YWwpIHsNCj4gLQkJZGF0 YS0+ZmFuX21pbltucl0gPSAyNTU7DQo+IC0JCW5ld19kaXYgPSBkYXRhLT5mYW5fZGl2W25yXTsN Cj4gLQ0KPiAtCQlkZXZfZGJnKGRhdGEtPmRldiwgImZhbiV1IGxvdyBsaW1pdCBzZXQgZGlzYWJs ZWRcbiIsDQo+IC0JCQkJbnIgKyAxKTsNCj4gKwkJZmFuX21pbiA9IDI1NTsNCj4gKwkJbmV3X2Rp diA9IGRhdGEtPmZhbl9kaXZbY2hhbm5lbF07DQo+ICAgDQo+ICsJCWRldl9kYmcoZGF0YS0+ZGV2 LCAiZmFuJXUgbG93IGxpbWl0IHNldCBkaXNhYmxlZFxuIiwgY2hhbm5lbCArIDEpOw0KPiAgIAl9 IGVsc2UgaWYgKHZhbCA8IDEzNTAwMDAgLyAoOCAqIDI1NCkpIHsNCj4gICAJCW5ld19kaXYgPSAz Ow0KPiAtCQlkYXRhLT5mYW5fbWluW25yXSA9IDI1NDsNCj4gKwkJZmFuX21pbiA9IDI1NDsNCj4g ICANCj4gICAJCWRldl9kYmcoZGF0YS0+ZGV2LCAiZmFuJXUgbG93IGxpbWl0IHNldCBtaW5pbXVt ICV1XG4iLA0KPiAtCQkJCW5yICsgMSwgRkFOX0ZST01fUkVHKDI1NCwgMSA8PCBuZXdfZGl2KSk7 DQo+IC0NCj4gKwkJCWNoYW5uZWwgKyAxLCBGQU5fRlJPTV9SRUcoMjU0LCBCSVQobmV3X2Rpdikp KTsNCj4gICAJfSBlbHNlIHsNCj4gICAJCXVuc2lnbmVkIGludCBuZXdfbWluID0gMTM1MDAwMCAv IHZhbDsNCj4gICANCj4gQEAgLTU0Myw4NyArMTk0LDU1IEBAIHN0YXRpYyBzc2l6ZV90IGZhbl9t aW5fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LA0KPiAgIAkJaWYgKCFuZXdfbWluKSAvKiBrZWVw ID4gMCAqLw0KPiAgIAkJCW5ld19taW4rKzsNCj4gICANCj4gLQkJZGF0YS0+ZmFuX21pbltucl0g PSBuZXdfbWluOw0KPiArCQlmYW5fbWluID0gbmV3X21pbjsNCj4gICANCj4gICAJCWRldl9kYmco ZGF0YS0+ZGV2LCAiZmFuJXUgbG93IGxpbWl0IHNldCBmYW4gc3BlZWQgJXVcbiIsDQo+IC0JCQkJ bnIgKyAxLCBGQU5fRlJPTV9SRUcobmV3X21pbiwgMSA8PCBuZXdfZGl2KSk7DQo+ICsJCQljaGFu bmVsICsgMSwgRkFOX0ZST01fUkVHKG5ld19taW4sIEJJVChuZXdfZGl2KSkpOw0KPiAgIAl9DQo+ ICAgDQo+IC0JaWYgKG5ld19kaXYgIT0gZGF0YS0+ZmFuX2Rpdltucl0pIHsNCj4gLQkJZGF0YS0+ ZmFuX2Rpdltucl0gPSBuZXdfZGl2Ow0KPiAtCQlhZG05MjQwX3dyaXRlX2Zhbl9kaXYoZGF0YSwg bnIsIG5ld19kaXYpOw0KPiArCWlmIChuZXdfZGl2ICE9IGRhdGEtPmZhbl9kaXZbY2hhbm5lbF0p IHsNCj4gKwkJZGF0YS0+ZmFuX2RpdltjaGFubmVsXSA9IG5ld19kaXY7DQo+ICsJCWFkbTkyNDBf d3JpdGVfZmFuX2RpdihkYXRhLCBjaGFubmVsLCBuZXdfZGl2KTsNCj4gICAJfQ0KPiAtCWVyciA9 IHJlZ21hcF93cml0ZShkYXRhLT5yZWdtYXAsIEFETTkyNDBfUkVHX0ZBTl9NSU4obnIpLA0KPiAt CQkJICAgZGF0YS0+ZmFuX21pbltucl0pOw0KPiArCWVyciA9IHJlZ21hcF93cml0ZShkYXRhLT5y ZWdtYXAsIEFETTkyNDBfUkVHX0ZBTl9NSU4oY2hhbm5lbCksIGZhbl9taW4pOw0KPiAgIA0KPiAg IAltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsNCj4gLQlyZXR1cm4gZXJyIDwgMCA/ IGVyciA6IGNvdW50Ow0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSX1JP KGZhbjFfaW5wdXQsIGZhbiwgMCk7DQo+IC1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSX1JXKGZh bjFfbWluLCBmYW5fbWluLCAwKTsNCj4gLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfUk8oZmFu MV9kaXYsIGZhbl9kaXYsIDApOw0KPiAtc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl9STyhmYW4y X2lucHV0LCBmYW4sIDEpOw0KPiAtc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl9SVyhmYW4yX21p biwgZmFuX21pbiwgMSk7DQo+IC1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSX1JPKGZhbjJfZGl2 LCBmYW5fZGl2LCAxKTsNCj4gLQ0KPiAtLyogYWxhcm1zICovDQo+IC1zdGF0aWMgc3NpemVfdCBh bGFybXNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsDQo+IC0JCXN0cnVjdCBkZXZpY2VfYXR0cmli dXRlICphdHRyLCBjaGFyICpidWYpDQo+IC17DQo+IC0Jc3RydWN0IGFkbTkyNDBfZGF0YSAqZGF0 YSA9IGFkbTkyNDBfdXBkYXRlX2RldmljZShkZXYpOw0KPiAgIA0KPiAtCWlmIChJU19FUlIoZGF0 YSkpDQo+IC0JCXJldHVybiBQVFJfRVJSKGRhdGEpOw0KPiAtDQo+IC0JcmV0dXJuIHNwcmludGYo YnVmLCAiJXVcbiIsIGRhdGEtPmFsYXJtcyk7DQo+ICsJcmV0dXJuIGVycjsNCj4gICB9DQo+IC1z dGF0aWMgREVWSUNFX0FUVFJfUk8oYWxhcm1zKTsNCj4gLQ0KPiAtc3RhdGljIHNzaXplX3QgYWxh cm1fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRy LA0KPiAtCQkJICBjaGFyICpidWYpDQo+IC17DQo+IC0JaW50IGJpdG5yID0gdG9fc2Vuc29yX2Rl dl9hdHRyKGF0dHIpLT5pbmRleDsNCj4gLQlzdHJ1Y3QgYWRtOTI0MF9kYXRhICpkYXRhID0gYWRt OTI0MF91cGRhdGVfZGV2aWNlKGRldik7DQo+IC0NCj4gLQlpZiAoSVNfRVJSKGRhdGEpKQ0KPiAt CQlyZXR1cm4gUFRSX0VSUihkYXRhKTsNCj4gICANCj4gLQlyZXR1cm4gc3ByaW50ZihidWYsICIl dVxuIiwgKGRhdGEtPmFsYXJtcyA+PiBiaXRucikgJiAxKTsNCj4gLX0NCj4gLXN0YXRpYyBTRU5T T1JfREVWSUNFX0FUVFJfUk8oaW4wX2FsYXJtLCBhbGFybSwgMCk7DQo+IC1zdGF0aWMgU0VOU09S X0RFVklDRV9BVFRSX1JPKGluMV9hbGFybSwgYWxhcm0sIDEpOw0KPiAtc3RhdGljIFNFTlNPUl9E RVZJQ0VfQVRUUl9STyhpbjJfYWxhcm0sIGFsYXJtLCAyKTsNCj4gLXN0YXRpYyBTRU5TT1JfREVW SUNFX0FUVFJfUk8oaW4zX2FsYXJtLCBhbGFybSwgMyk7DQo+IC1zdGF0aWMgU0VOU09SX0RFVklD RV9BVFRSX1JPKGluNF9hbGFybSwgYWxhcm0sIDgpOw0KPiAtc3RhdGljIFNFTlNPUl9ERVZJQ0Vf QVRUUl9STyhpbjVfYWxhcm0sIGFsYXJtLCA5KTsNCj4gLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FU VFJfUk8odGVtcDFfYWxhcm0sIGFsYXJtLCA0KTsNCj4gLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FU VFJfUk8oZmFuMV9hbGFybSwgYWxhcm0sIDYpOw0KPiAtc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRU Ul9STyhmYW4yX2FsYXJtLCBhbGFybSwgNyk7DQo+IC0NCj4gLS8qIHZpZCAqLw0KPiAgIHN0YXRp YyBzc2l6ZV90IGNwdTBfdmlkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LA0KPiAgIAkJCSAgICAg c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikNCj4gICB7DQo+IC0Jc3Ry dWN0IGFkbTkyNDBfZGF0YSAqZGF0YSA9IGFkbTkyNDBfdXBkYXRlX2RldmljZShkZXYpOw0KPiAt DQo+IC0JaWYgKElTX0VSUihkYXRhKSkNCj4gLQkJcmV0dXJuIFBUUl9FUlIoZGF0YSk7DQo+ICsJ c3RydWN0IGFkbTkyNDBfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KPiArCXVu c2lnbmVkIGludCByZWd2YWw7DQo+ICsJaW50IGVycjsNCj4gKwl1OCB2aWQ7DQo+ICAgDQo+IC0J cmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHZpZF9mcm9tX3JlZyhkYXRhLT52aWQsIGRhdGEt PnZybSkpOw0KPiArCWVyciA9IHJlZ21hcF9yZWFkKGRhdGEtPnJlZ21hcCwgQURNOTI0MF9SRUdf VklEX0ZBTl9ESVYsICZyZWd2YWwpOw0KPiArCWlmIChlcnIgPCAwKQ0KPiArCQlyZXR1cm4gZXJy Ow0KPiArCXZpZCA9IHJlZ3ZhbCAmIDB4MGY7DQo+ICsJZXJyID0gcmVnbWFwX3JlYWQoZGF0YS0+ cmVnbWFwLCBBRE05MjQwX1JFR19WSUQ0LCAmcmVndmFsKTsNCj4gKwlpZiAoZXJyIDwgMCkNCj4g KwkJcmV0dXJuIGVycjsNCj4gKwl2aWQgfD0gKHJlZ3ZhbCAmIDEpIDw8IDQ7DQo+ICsJcmV0dXJu IHNwcmludGYoYnVmLCAiJWRcbiIsIHZpZF9mcm9tX3JlZyh2aWQsIGRhdGEtPnZybSkpOw0KPiAg IH0NCj4gICBzdGF0aWMgREVWSUNFX0FUVFJfUk8oY3B1MF92aWQpOw0KPiAgIA0KPiAtLyogYW5h bG9nIG91dHB1dCAqLw0KPiAgIHN0YXRpYyBzc2l6ZV90IGFvdXRfb3V0cHV0X3Nob3coc3RydWN0 IGRldmljZSAqZGV2LA0KPiAgIAkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hh ciAqYnVmKQ0KPiAgIHsNCj4gLQlzdHJ1Y3QgYWRtOTI0MF9kYXRhICpkYXRhID0gYWRtOTI0MF91 cGRhdGVfZGV2aWNlKGRldik7DQo+ICsJc3RydWN0IGFkbTkyNDBfZGF0YSAqZGF0YSA9IGRldl9n ZXRfZHJ2ZGF0YShkZXYpOw0KPiArCXVuc2lnbmVkIGludCByZWd2YWw7DQo+ICsJaW50IGVycjsN Cj4gICANCj4gLQlpZiAoSVNfRVJSKGRhdGEpKQ0KPiAtCQlyZXR1cm4gUFRSX0VSUihkYXRhKTsN Cj4gKwllcnIgPSByZWdtYXBfcmVhZChkYXRhLT5yZWdtYXAsIEFETTkyNDBfUkVHX0FOQUxPR19P VVQsICZyZWd2YWwpOw0KPiArCWlmIChlcnIpDQo+ICsJCXJldHVybiBlcnI7DQo+ICAgDQo+IC0J cmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIEFPVVRfRlJPTV9SRUcoZGF0YS0+YW91dCkpOw0K PiArCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBBT1VUX0ZST01fUkVHKHJlZ3ZhbCkpOw0K PiAgIH0NCj4gICANCj4gICBzdGF0aWMgc3NpemVfdCBhb3V0X291dHB1dF9zdG9yZShzdHJ1Y3Qg ZGV2aWNlICpkZXYsDQo+IEBAIC02MzgsNzYgKzI1NywxMyBAQCBzdGF0aWMgc3NpemVfdCBhb3V0 X291dHB1dF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsDQo+ICAgCWlmIChlcnIpDQo+ICAgCQly ZXR1cm4gZXJyOw0KPiAgIA0KPiAtCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsNCj4g LQlkYXRhLT5hb3V0ID0gQU9VVF9UT19SRUcodmFsKTsNCj4gLQllcnIgPSByZWdtYXBfd3JpdGUo ZGF0YS0+cmVnbWFwLCBBRE05MjQwX1JFR19BTkFMT0dfT1VULCBkYXRhLT5hb3V0KTsNCj4gLQlt dXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsNCj4gKwllcnIgPSByZWdtYXBfd3JpdGUo ZGF0YS0+cmVnbWFwLCBBRE05MjQwX1JFR19BTkFMT0dfT1VULCBBT1VUX1RPX1JFRyh2YWwpKTsN Cj4gICAJcmV0dXJuIGVyciA8IDAgPyBlcnIgOiBjb3VudDsNCj4gICB9DQo+ICAgc3RhdGljIERF VklDRV9BVFRSX1JXKGFvdXRfb3V0cHV0KTsNCj4gICANCj4gLXN0YXRpYyBzc2l6ZV90IGFsYXJt X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIs DQo+IC0JCQkgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkNCj4gLXsNCj4gLQlzdHJ1 Y3QgYWRtOTI0MF9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7DQo+IC0JdW5zaWdu ZWQgbG9uZyB2YWw7DQo+IC0JaW50IGVycjsNCj4gLQ0KPiAtCWlmIChrc3RydG91bChidWYsIDEw LCAmdmFsKSB8fCB2YWwgIT0gMCkNCj4gLQkJcmV0dXJuIC1FSU5WQUw7DQo+IC0NCj4gLQltdXRl eF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7DQo+IC0JZXJyID0gcmVnbWFwX3dyaXRlKGRhdGEt PnJlZ21hcCwgQURNOTI0MF9SRUdfQ0hBU1NJU19DTEVBUiwgMHg4MCk7DQo+IC0JZGF0YS0+dmFs aWQgPSAwOwkJLyogRm9yY2UgY2FjaGUgcmVmcmVzaCAqLw0KPiAtCW11dGV4X3VubG9jaygmZGF0 YS0+dXBkYXRlX2xvY2spOw0KPiAtCWlmIChlcnIgPCAwKQ0KPiAtCQlyZXR1cm4gZXJyOw0KPiAt CWRldl9kYmcoZGF0YS0+ZGV2LCAiY2hhc3NpcyBpbnRydXNpb24gbGF0Y2ggY2xlYXJlZFxuIik7 DQo+IC0NCj4gLQlyZXR1cm4gY291bnQ7DQo+IC19DQo+IC1zdGF0aWMgU0VOU09SX0RFVklDRV9B VFRSX1JXKGludHJ1c2lvbjBfYWxhcm0sIGFsYXJtLCAxMik7DQo+IC0NCj4gICBzdGF0aWMgc3Ry dWN0IGF0dHJpYnV0ZSAqYWRtOTI0MF9hdHRyc1tdID0gew0KPiAtCSZzZW5zb3JfZGV2X2F0dHJf aW4wX2lucHV0LmRldl9hdHRyLmF0dHIsDQo+IC0JJnNlbnNvcl9kZXZfYXR0cl9pbjBfbWluLmRl dl9hdHRyLmF0dHIsDQo+IC0JJnNlbnNvcl9kZXZfYXR0cl9pbjBfbWF4LmRldl9hdHRyLmF0dHIs DQo+IC0JJnNlbnNvcl9kZXZfYXR0cl9pbjBfYWxhcm0uZGV2X2F0dHIuYXR0ciwNCj4gLQkmc2Vu c29yX2Rldl9hdHRyX2luMV9pbnB1dC5kZXZfYXR0ci5hdHRyLA0KPiAtCSZzZW5zb3JfZGV2X2F0 dHJfaW4xX21pbi5kZXZfYXR0ci5hdHRyLA0KPiAtCSZzZW5zb3JfZGV2X2F0dHJfaW4xX21heC5k ZXZfYXR0ci5hdHRyLA0KPiAtCSZzZW5zb3JfZGV2X2F0dHJfaW4xX2FsYXJtLmRldl9hdHRyLmF0 dHIsDQo+IC0JJnNlbnNvcl9kZXZfYXR0cl9pbjJfaW5wdXQuZGV2X2F0dHIuYXR0ciwNCj4gLQkm c2Vuc29yX2Rldl9hdHRyX2luMl9taW4uZGV2X2F0dHIuYXR0ciwNCj4gLQkmc2Vuc29yX2Rldl9h dHRyX2luMl9tYXguZGV2X2F0dHIuYXR0ciwNCj4gLQkmc2Vuc29yX2Rldl9hdHRyX2luMl9hbGFy bS5kZXZfYXR0ci5hdHRyLA0KPiAtCSZzZW5zb3JfZGV2X2F0dHJfaW4zX2lucHV0LmRldl9hdHRy LmF0dHIsDQo+IC0JJnNlbnNvcl9kZXZfYXR0cl9pbjNfbWluLmRldl9hdHRyLmF0dHIsDQo+IC0J JnNlbnNvcl9kZXZfYXR0cl9pbjNfbWF4LmRldl9hdHRyLmF0dHIsDQo+IC0JJnNlbnNvcl9kZXZf YXR0cl9pbjNfYWxhcm0uZGV2X2F0dHIuYXR0ciwNCj4gLQkmc2Vuc29yX2Rldl9hdHRyX2luNF9p bnB1dC5kZXZfYXR0ci5hdHRyLA0KPiAtCSZzZW5zb3JfZGV2X2F0dHJfaW40X21pbi5kZXZfYXR0 ci5hdHRyLA0KPiAtCSZzZW5zb3JfZGV2X2F0dHJfaW40X21heC5kZXZfYXR0ci5hdHRyLA0KPiAt CSZzZW5zb3JfZGV2X2F0dHJfaW40X2FsYXJtLmRldl9hdHRyLmF0dHIsDQo+IC0JJnNlbnNvcl9k ZXZfYXR0cl9pbjVfaW5wdXQuZGV2X2F0dHIuYXR0ciwNCj4gLQkmc2Vuc29yX2Rldl9hdHRyX2lu NV9taW4uZGV2X2F0dHIuYXR0ciwNCj4gLQkmc2Vuc29yX2Rldl9hdHRyX2luNV9tYXguZGV2X2F0 dHIuYXR0ciwNCj4gLQkmc2Vuc29yX2Rldl9hdHRyX2luNV9hbGFybS5kZXZfYXR0ci5hdHRyLA0K PiAtCSZkZXZfYXR0cl90ZW1wMV9pbnB1dC5hdHRyLA0KPiAtCSZzZW5zb3JfZGV2X2F0dHJfdGVt cDFfbWF4LmRldl9hdHRyLmF0dHIsDQo+IC0JJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9tYXhfaHlz dC5kZXZfYXR0ci5hdHRyLA0KPiAtCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfYWxhcm0uZGV2X2F0 dHIuYXR0ciwNCj4gLQkmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfaW5wdXQuZGV2X2F0dHIuYXR0ciwN Cj4gLQkmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfZGl2LmRldl9hdHRyLmF0dHIsDQo+IC0JJnNlbnNv cl9kZXZfYXR0cl9mYW4xX21pbi5kZXZfYXR0ci5hdHRyLA0KPiAtCSZzZW5zb3JfZGV2X2F0dHJf ZmFuMV9hbGFybS5kZXZfYXR0ci5hdHRyLA0KPiAtCSZzZW5zb3JfZGV2X2F0dHJfZmFuMl9pbnB1 dC5kZXZfYXR0ci5hdHRyLA0KPiAtCSZzZW5zb3JfZGV2X2F0dHJfZmFuMl9kaXYuZGV2X2F0dHIu YXR0ciwNCj4gLQkmc2Vuc29yX2Rldl9hdHRyX2ZhbjJfbWluLmRldl9hdHRyLmF0dHIsDQo+IC0J JnNlbnNvcl9kZXZfYXR0cl9mYW4yX2FsYXJtLmRldl9hdHRyLmF0dHIsDQo+IC0JJmRldl9hdHRy X2FsYXJtcy5hdHRyLA0KPiAgIAkmZGV2X2F0dHJfYW91dF9vdXRwdXQuYXR0ciwNCj4gLQkmc2Vu c29yX2Rldl9hdHRyX2ludHJ1c2lvbjBfYWxhcm0uZGV2X2F0dHIuYXR0ciwNCj4gICAJJmRldl9h dHRyX2NwdTBfdmlkLmF0dHIsDQo+ICAgCU5VTEwNCj4gICB9Ow0KPiBAQCAtNzQ5LDEzICszMDUs MTQgQEAgc3RhdGljIGludCBhZG05MjQwX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqbmV3X2Ns aWVudCwNCj4gICAJCSBtYW5faWQgPT0gMHgyMyA/ICJBRE05MjQwIiA6DQo+ICAgCQkgbWFuX2lk ID09IDB4ZGEgPyAiRFMxNzgwIiA6ICJMTTgxIiwgZGllX3Jldik7DQo+ICAgDQo+IC0Jc3RybGNw eShpbmZvLT50eXBlLCBuYW1lLCBJMkNfTkFNRV9TSVpFKTsNCj4gKwlzdHJzY3B5KGluZm8tPnR5 cGUsIG5hbWUsIEkyQ19OQU1FX1NJWkUpOw0KPiAgIA0KPiAgIAlyZXR1cm4gMDsNCj4gICB9DQo+ ICAgDQo+ICAgc3RhdGljIGludCBhZG05MjQwX2luaXRfY2xpZW50KHN0cnVjdCBhZG05MjQwX2Rh dGEgKmRhdGEpDQo+ICAgew0KPiArCXVuc2lnbmVkIGludCByZWd2YWw7DQo+ICAgCXU4IGNvbmYs IG1vZGU7DQo+ICAgCWludCBlcnI7DQo+ICAgDQo+IEBAIC03OTIsMTMgKzM0OSwxMyBAQCBzdGF0 aWMgaW50IGFkbTkyNDBfaW5pdF9jbGllbnQoc3RydWN0IGFkbTkyNDBfZGF0YSAqZGF0YSkNCj4g ICAJCX0NCj4gICAJCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsNCj4gICAJCQllcnIgPSByZWdt YXBfd3JpdGUoZGF0YS0+cmVnbWFwLA0KPiAtCQkJCQlBRE05MjQwX1JFR19GQU5fTUlOKGkpLCAy NTUpOw0KPiArCQkJCQkgICBBRE05MjQwX1JFR19GQU5fTUlOKGkpLCAyNTUpOw0KPiAgIAkJCWlm IChlcnIgPCAwKQ0KPiAgIAkJCQlyZXR1cm4gZXJyOw0KPiAgIAkJfQ0KPiAgIAkJZm9yIChpID0g MDsgaSA8IDI7IGkrKykgew0KPiAgIAkJCWVyciA9IHJlZ21hcF93cml0ZShkYXRhLT5yZWdtYXAs DQo+IC0JCQkJCUFETTkyNDBfUkVHX1RFTVBfTUFYKGkpLCAxMjcpOw0KPiArCQkJCQkgICBBRE05 MjQwX1JFR19URU1QX01BWChpKSwgMTI3KTsNCj4gICAJCQlpZiAoZXJyIDwgMCkNCj4gICAJCQkJ cmV0dXJuIGVycjsNCj4gICAJCX0NCj4gQEAgLTgxMiwxOSArMzY5LDQxMyBAQCBzdGF0aWMgaW50 IGFkbTkyNDBfaW5pdF9jbGllbnQoc3RydWN0IGFkbTkyNDBfZGF0YSAqZGF0YSkNCj4gICAJCQkg ImNvbGQgc3RhcnQ6IGNvbmZpZyB3YXMgMHglMDJ4IG1vZGUgJXVcbiIsIGNvbmYsIG1vZGUpOw0K PiAgIAl9DQo+ICAgDQo+ICsJLyogcmVhZCBmYW4gZGl2cyAqLw0KPiArCWVyciA9IHJlZ21hcF9y ZWFkKGRhdGEtPnJlZ21hcCwgQURNOTI0MF9SRUdfVklEX0ZBTl9ESVYsICZyZWd2YWwpOw0KPiAr CWlmIChlcnIgPCAwKQ0KPiArCQlyZXR1cm4gZXJyOw0KPiArCWRhdGEtPmZhbl9kaXZbMF0gPSAo cmVndmFsID4+IDQpICYgMzsNCj4gKwlkYXRhLT5mYW5fZGl2WzFdID0gKHJlZ3ZhbCA+PiA2KSAm IDM7DQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgYWRtOTI0MF9jaGlw X3JlYWQoc3RydWN0IGRldmljZSAqZGV2LCB1MzIgYXR0ciwgbG9uZyAqdmFsKQ0KPiArew0KPiAr CXN0cnVjdCBhZG05MjQwX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCj4gKwl1 OCByZWdzWzJdOw0KPiArCWludCBlcnI7DQo+ICsNCj4gKwlzd2l0Y2ggKGF0dHIpIHsNCj4gKwlj YXNlIGh3bW9uX2NoaXBfYWxhcm1zOg0KPiArCQllcnIgPSByZWdtYXBfYnVsa19yZWFkKGRhdGEt PnJlZ21hcCwgQURNOTI0MF9SRUdfSU5UKDApLCAmcmVncywgMik7DQo+ICsJCWlmIChlcnIgPCAw KQ0KPiArCQkJcmV0dXJuIGVycjsNCj4gKwkJKnZhbCA9IHJlZ3NbMF0gfCByZWdzWzFdIDw8IDg7 DQo+ICsJCWJyZWFrOw0KPiArCWRlZmF1bHQ6DQo+ICsJCXJldHVybiAtRU9QTk9UU1VQUDsNCj4g Kwl9DQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgYWRtOTI0MF9pbnRy dXNpb25fcmVhZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiBhdHRyLCBsb25nICp2YWwpDQo+ICt7 DQo+ICsJc3RydWN0IGFkbTkyNDBfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0K PiArCXVuc2lnbmVkIGludCByZWd2YWw7DQo+ICsJaW50IGVycjsNCj4gKw0KPiArCXN3aXRjaCAo YXR0cikgew0KPiArCWNhc2UgaHdtb25faW50cnVzaW9uX2FsYXJtOg0KPiArCQllcnIgPSByZWdt YXBfcmVhZChkYXRhLT5yZWdtYXAsIEFETTkyNDBfUkVHX0lOVCgxKSwgJnJlZ3ZhbCk7DQo+ICsJ CWlmIChlcnIgPCAwKQ0KPiArCQkJcmV0dXJuIGVycjsNCj4gKwkJKnZhbCA9ICEhKHJlZ3ZhbCAm IEJJVCg0KSk7DQo+ICsJCWJyZWFrOw0KPiArCWRlZmF1bHQ6DQo+ICsJCXJldHVybiAtRU9QTk9U U1VQUDsNCj4gKwl9DQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgYWRt OTI0MF9pbnRydXNpb25fd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LCB1MzIgYXR0ciwgbG9uZyB2 YWwpDQo+ICt7DQo+ICsJc3RydWN0IGFkbTkyNDBfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0 YShkZXYpOw0KPiArCWludCBlcnI7DQo+ICsNCj4gKwlzd2l0Y2ggKGF0dHIpIHsNCj4gKwljYXNl IGh3bW9uX2ludHJ1c2lvbl9hbGFybToNCj4gKwkJaWYgKHZhbCkNCj4gKwkJCXJldHVybiAtRUlO VkFMOw0KPiArCQllcnIgPSByZWdtYXBfd3JpdGUoZGF0YS0+cmVnbWFwLCBBRE05MjQwX1JFR19D SEFTU0lTX0NMRUFSLCAweDgwKTsNCj4gKwkJaWYgKGVyciA8IDApDQo+ICsJCQlyZXR1cm4gZXJy Ow0KPiArCQlkZXZfZGJnKGRhdGEtPmRldiwgImNoYXNzaXMgaW50cnVzaW9uIGxhdGNoIGNsZWFy ZWRcbiIpOw0KPiArCQlicmVhazsNCj4gKwlkZWZhdWx0Og0KPiArCQlyZXR1cm4gLUVPUE5PVFNV UFA7DQo+ICsJfQ0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGFkbTky NDBfaW5fcmVhZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiBhdHRyLCBpbnQgY2hhbm5lbCwgbG9u ZyAqdmFsKQ0KPiArew0KPiArCXN0cnVjdCBhZG05MjQwX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2Ry dmRhdGEoZGV2KTsNCj4gKwl1bnNpZ25lZCBpbnQgcmVndmFsOw0KPiArCWludCByZWc7DQo+ICsJ aW50IGVycjsNCj4gKw0KPiArCXN3aXRjaCAoYXR0cikgew0KPiArCWNhc2UgaHdtb25faW5faW5w dXQ6DQo+ICsJCXJlZyA9IEFETTkyNDBfUkVHX0lOKGNoYW5uZWwpOw0KPiArCQlicmVhazsNCj4g KwljYXNlIGh3bW9uX2luX21pbjoNCj4gKwkJcmVnID0gQURNOTI0MF9SRUdfSU5fTUlOKGNoYW5u ZWwpOw0KPiArCQlicmVhazsNCj4gKwljYXNlIGh3bW9uX2luX21heDoNCj4gKwkJcmVnID0gQURN OTI0MF9SRUdfSU5fTUFYKGNoYW5uZWwpOw0KPiArCQlicmVhazsNCj4gKwljYXNlIGh3bW9uX2lu X2FsYXJtOg0KPiArCQlpZiAoY2hhbm5lbCA8IDQpIHsNCj4gKwkJCXJlZyA9IEFETTkyNDBfUkVH X0lOVCgwKTsNCj4gKwkJfSBlbHNlIHsNCj4gKwkJCXJlZyA9IEFETTkyNDBfUkVHX0lOVCgxKTsN Cj4gKwkJCWNoYW5uZWwgLT0gNDsNCj4gKwkJfQ0KPiArCQllcnIgPSByZWdtYXBfcmVhZChkYXRh LT5yZWdtYXAsIHJlZywgJnJlZ3ZhbCk7DQo+ICsJCWlmIChlcnIgPCAwKQ0KPiArCQkJcmV0dXJu IGVycjsNCj4gKwkJKnZhbCA9ICEhKHJlZ3ZhbCAmIEJJVChjaGFubmVsKSk7DQo+ICsJCXJldHVy biAwOw0KPiArCWRlZmF1bHQ6DQo+ICsJCXJldHVybiAtRU9QTk9UU1VQUDsNCj4gKwl9DQo+ICsJ ZXJyID0gcmVnbWFwX3JlYWQoZGF0YS0+cmVnbWFwLCByZWcsICZyZWd2YWwpOw0KPiArCWlmIChl cnIgPCAwKQ0KPiArCQlyZXR1cm4gZXJyOw0KPiArCSp2YWwgPSBJTl9GUk9NX1JFRyhyZWd2YWws IGNoYW5uZWwpOw0KPiAgIAlyZXR1cm4gMDsNCj4gICB9DQo+ICAgDQo+ICtzdGF0aWMgaW50IGFk bTkyNDBfaW5fd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LCB1MzIgYXR0ciwgaW50IGNoYW5uZWws IGxvbmcgdmFsKQ0KPiArew0KPiArCXN0cnVjdCBhZG05MjQwX2RhdGEgKmRhdGEgPSBkZXZfZ2V0 X2RydmRhdGEoZGV2KTsNCj4gKwlpbnQgcmVnOw0KPiArDQo+ICsJc3dpdGNoIChhdHRyKSB7DQo+ ICsJY2FzZSBod21vbl9pbl9taW46DQo+ICsJCXJlZyA9IEFETTkyNDBfUkVHX0lOX01JTihjaGFu bmVsKTsNCj4gKwkJYnJlYWs7DQo+ICsJY2FzZSBod21vbl9pbl9tYXg6DQo+ICsJCXJlZyA9IEFE TTkyNDBfUkVHX0lOKGNoYW5uZWwpOw0KPiArCQlicmVhazsNCj4gKwlkZWZhdWx0Og0KPiArCQly ZXR1cm4gLUVPUE5PVFNVUFA7DQo+ICsJfQ0KPiArCXJldHVybiByZWdtYXBfd3JpdGUoZGF0YS0+ cmVnbWFwLCByZWcsIElOX1RPX1JFRyh2YWwsIGNoYW5uZWwpKTsNCj4gK30NCj4gKw0KPiArc3Rh dGljIGludCBhZG05MjQwX2Zhbl9yZWFkKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIGF0dHIsIGlu dCBjaGFubmVsLCBsb25nICp2YWwpDQo+ICt7DQo+ICsJc3RydWN0IGFkbTkyNDBfZGF0YSAqZGF0 YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KPiArCXVuc2lnbmVkIGludCByZWd2YWw7DQo+ICsJ aW50IGVycjsNCj4gKw0KPiArCXN3aXRjaCAoYXR0cikgew0KPiArCWNhc2UgaHdtb25fZmFuX2lu cHV0Og0KPiArCQllcnIgPSByZWdtYXBfcmVhZChkYXRhLT5yZWdtYXAsIEFETTkyNDBfUkVHX0ZB TihjaGFubmVsKSwgJnJlZ3ZhbCk7DQo+ICsJCWlmIChlcnIgPCAwKQ0KPiArCQkJcmV0dXJuIGVy cjsNCj4gKwkJaWYgKHJlZ3ZhbCA9PSAyNTUgJiYgZGF0YS0+ZmFuX2RpdltjaGFubmVsXSA8IDMp IHsNCj4gKwkJCS8qIGFkanVzdCBmYW4gY2xvY2sgZGl2aWRlciBvbiBvdmVyZmxvdyAqLw0KPiAr CQkJZXJyID0gYWRtOTI0MF93cml0ZV9mYW5fZGl2KGRhdGEsIGNoYW5uZWwsDQo+ICsJCQkJCQkg ICAgKytkYXRhLT5mYW5fZGl2W2NoYW5uZWxdKTsNCj4gKwkJCWlmIChlcnIpDQo+ICsJCQkJcmV0 dXJuIGVycjsNCj4gKwkJfQ0KPiArCQkqdmFsID0gRkFOX0ZST01fUkVHKHJlZ3ZhbCwgQklUKGRh dGEtPmZhbl9kaXZbY2hhbm5lbF0pKTsNCj4gKwkJYnJlYWs7DQo+ICsJY2FzZSBod21vbl9mYW5f ZGl2Og0KPiArCQkqdmFsID0gQklUKGRhdGEtPmZhbl9kaXZbY2hhbm5lbF0pOw0KPiArCQlicmVh azsNCj4gKwljYXNlIGh3bW9uX2Zhbl9taW46DQo+ICsJCWVyciA9IHJlZ21hcF9yZWFkKGRhdGEt PnJlZ21hcCwgQURNOTI0MF9SRUdfRkFOX01JTihjaGFubmVsKSwgJnJlZ3ZhbCk7DQo+ICsJCWlm IChlcnIgPCAwKQ0KPiArCQkJcmV0dXJuIGVycjsNCj4gKwkJKnZhbCA9IEZBTl9GUk9NX1JFRyhy ZWd2YWwsIEJJVChkYXRhLT5mYW5fZGl2W2NoYW5uZWxdKSk7DQo+ICsJCWJyZWFrOw0KPiArCWNh c2UgaHdtb25fZmFuX2FsYXJtOg0KPiArCQllcnIgPSByZWdtYXBfcmVhZChkYXRhLT5yZWdtYXAs IEFETTkyNDBfUkVHX0lOVCgwKSwgJnJlZ3ZhbCk7DQo+ICsJCWlmIChlcnIgPCAwKQ0KPiArCQkJ cmV0dXJuIGVycjsNCj4gKwkJKnZhbCA9ICEhKHJlZ3ZhbCAmIEJJVChjaGFubmVsICsgNikpOw0K PiArCQlicmVhazsNCj4gKwlkZWZhdWx0Og0KPiArCQlyZXR1cm4gLUVPUE5PVFNVUFA7DQo+ICsJ fQ0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGFkbTkyNDBfZmFuX3dy aXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIGF0dHIsIGludCBjaGFubmVsLCBsb25nIHZhbCkN Cj4gK3sNCj4gKwlzdHJ1Y3QgYWRtOTI0MF9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRl dik7DQo+ICsJaW50IGVycjsNCj4gKw0KPiArCXN3aXRjaCAoYXR0cikgew0KPiArCWNhc2UgaHdt b25fZmFuX21pbjoNCj4gKwkJZXJyID0gYWRtOTI0MF9mYW5fbWluX3dyaXRlKGRhdGEsIGNoYW5u ZWwsIHZhbCk7DQo+ICsJCWlmIChlcnIgPCAwKQ0KPiArCQkJcmV0dXJuIGVycjsNCj4gKwkJYnJl YWs7DQo+ICsJZGVmYXVsdDoNCj4gKwkJcmV0dXJuIC1FT1BOT1RTVVBQOw0KPiArCX0NCj4gKwly ZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBhZG05MjQwX3RlbXBfcmVhZChzdHJ1 Y3QgZGV2aWNlICpkZXYsIHUzMiBhdHRyLCBpbnQgY2hhbm5lbCwgbG9uZyAqdmFsKQ0KPiArew0K PiArCXN0cnVjdCBhZG05MjQwX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCj4g Kwl1bnNpZ25lZCBpbnQgcmVndmFsOw0KPiArCWludCBlcnIsIHRlbXA7DQo+ICsNCj4gKwlzd2l0 Y2ggKGF0dHIpIHsNCj4gKwljYXNlIGh3bW9uX3RlbXBfaW5wdXQ6DQo+ICsJCWVyciA9IHJlZ21h cF9yZWFkKGRhdGEtPnJlZ21hcCwgQURNOTI0MF9SRUdfVEVNUCwgJnJlZ3ZhbCk7DQo+ICsJCWlm IChlcnIgPCAwKQ0KPiArCQkJcmV0dXJuIGVycjsNCj4gKwkJdGVtcCA9IHJlZ3ZhbCA8PCAxOw0K PiArCQllcnIgPSByZWdtYXBfcmVhZChkYXRhLT5yZWdtYXAsIEFETTkyNDBfUkVHX1RFTVBfQ09O RiwgJnJlZ3ZhbCk7DQo+ICsJCWlmIChlcnIgPCAwKQ0KPiArCQkJcmV0dXJuIGVycjsNCj4gKwkJ dGVtcCB8PSByZWd2YWwgPj4gNzsNCj4gKwkJKnZhbCA9IHNpZ25fZXh0ZW5kMzIodGVtcCwgOCkg KiA1MDA7DQo+ICsJCWJyZWFrOw0KPiArCWNhc2UgaHdtb25fdGVtcF9tYXg6DQo+ICsJCWVyciA9 IHJlZ21hcF9yZWFkKGRhdGEtPnJlZ21hcCwgQURNOTI0MF9SRUdfVEVNUF9NQVgoMCksICZyZWd2 YWwpOw0KPiArCQlpZiAoZXJyIDwgMCkNCj4gKwkJCXJldHVybiBlcnI7DQo+ICsJCSp2YWwgPSAo czgpcmVndmFsICogMTAwMDsNCj4gKwkJYnJlYWs7DQo+ICsJY2FzZSBod21vbl90ZW1wX21heF9o eXN0Og0KPiArCQllcnIgPSByZWdtYXBfcmVhZChkYXRhLT5yZWdtYXAsIEFETTkyNDBfUkVHX1RF TVBfTUFYKDEpLCAmcmVndmFsKTsNCj4gKwkJaWYgKGVyciA8IDApDQo+ICsJCQlyZXR1cm4gZXJy Ow0KPiArCQkqdmFsID0gKHM4KXJlZ3ZhbCAqIDEwMDA7DQo+ICsJCWJyZWFrOw0KPiArCWNhc2Ug aHdtb25fdGVtcF9hbGFybToNCj4gKwkJZXJyID0gcmVnbWFwX3JlYWQoZGF0YS0+cmVnbWFwLCBB RE05MjQwX1JFR19JTlQoMCksICZyZWd2YWwpOw0KPiArCQlpZiAoZXJyIDwgMCkNCj4gKwkJCXJl dHVybiBlcnI7DQo+ICsJCSp2YWwgPSAhIShyZWd2YWwgJiBCSVQoNCkpOw0KPiArCQlicmVhazsN Cj4gKwlkZWZhdWx0Og0KPiArCQlyZXR1cm4gLUVPUE5PVFNVUFA7DQo+ICsJfQ0KPiArCXJldHVy biAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGFkbTkyNDBfdGVtcF93cml0ZShzdHJ1Y3Qg ZGV2aWNlICpkZXYsIHUzMiBhdHRyLCBpbnQgY2hhbm5lbCwgbG9uZyB2YWwpDQo+ICt7DQo+ICsJ c3RydWN0IGFkbTkyNDBfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KPiArCWlu dCByZWc7DQo+ICsNCj4gKwlzd2l0Y2ggKGF0dHIpIHsNCj4gKwljYXNlIGh3bW9uX3RlbXBfbWF4 Og0KPiArCQlyZWcgPSBBRE05MjQwX1JFR19URU1QX01BWCgwKTsNCj4gKwkJYnJlYWs7DQo+ICsJ Y2FzZSBod21vbl90ZW1wX21heF9oeXN0Og0KPiArCQlyZWcgPSBBRE05MjQwX1JFR19URU1QX01B WCgxKTsNCj4gKwkJYnJlYWs7DQo+ICsJZGVmYXVsdDoNCj4gKwkJcmV0dXJuIC1FT1BOT1RTVVBQ Ow0KPiArCX0NCj4gKwlyZXR1cm4gcmVnbWFwX3dyaXRlKGRhdGEtPnJlZ21hcCwgcmVnLCBURU1Q X1RPX1JFRyh2YWwpKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBhZG05MjQwX3JlYWQoc3Ry dWN0IGRldmljZSAqZGV2LCBlbnVtIGh3bW9uX3NlbnNvcl90eXBlcyB0eXBlLCB1MzIgYXR0ciwN Cj4gKwkJCWludCBjaGFubmVsLCBsb25nICp2YWwpDQo+ICt7DQo+ICsJc3dpdGNoICh0eXBlKSB7 DQo+ICsJY2FzZSBod21vbl9jaGlwOg0KPiArCQlyZXR1cm4gYWRtOTI0MF9jaGlwX3JlYWQoZGV2 LCBhdHRyLCB2YWwpOw0KPiArCWNhc2UgaHdtb25faW50cnVzaW9uOg0KPiArCQlyZXR1cm4gYWRt OTI0MF9pbnRydXNpb25fcmVhZChkZXYsIGF0dHIsIHZhbCk7DQo+ICsJY2FzZSBod21vbl9pbjoN Cj4gKwkJcmV0dXJuIGFkbTkyNDBfaW5fcmVhZChkZXYsIGF0dHIsIGNoYW5uZWwsIHZhbCk7DQo+ ICsJY2FzZSBod21vbl9mYW46DQo+ICsJCXJldHVybiBhZG05MjQwX2Zhbl9yZWFkKGRldiwgYXR0 ciwgY2hhbm5lbCwgdmFsKTsNCj4gKwljYXNlIGh3bW9uX3RlbXA6DQo+ICsJCXJldHVybiBhZG05 MjQwX3RlbXBfcmVhZChkZXYsIGF0dHIsIGNoYW5uZWwsIHZhbCk7DQo+ICsJZGVmYXVsdDoNCj4g KwkJcmV0dXJuIC1FT1BOT1RTVVBQOw0KPiArCX0NCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBh ZG05MjQwX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgZW51bSBod21vbl9zZW5zb3JfdHlwZXMg dHlwZSwgdTMyIGF0dHIsDQo+ICsJCQkgaW50IGNoYW5uZWwsIGxvbmcgdmFsKQ0KPiArew0KPiAr CXN3aXRjaCAodHlwZSkgew0KPiArCWNhc2UgaHdtb25faW50cnVzaW9uOg0KPiArCQlyZXR1cm4g YWRtOTI0MF9pbnRydXNpb25fd3JpdGUoZGV2LCBhdHRyLCB2YWwpOw0KPiArCWNhc2UgaHdtb25f aW46DQo+ICsJCXJldHVybiBhZG05MjQwX2luX3dyaXRlKGRldiwgYXR0ciwgY2hhbm5lbCwgdmFs KTsNCj4gKwljYXNlIGh3bW9uX2ZhbjoNCj4gKwkJcmV0dXJuIGFkbTkyNDBfZmFuX3dyaXRlKGRl diwgYXR0ciwgY2hhbm5lbCwgdmFsKTsNCj4gKwljYXNlIGh3bW9uX3RlbXA6DQo+ICsJCXJldHVy biBhZG05MjQwX3RlbXBfd3JpdGUoZGV2LCBhdHRyLCBjaGFubmVsLCB2YWwpOw0KPiArCWRlZmF1 bHQ6DQo+ICsJCXJldHVybiAtRU9QTk9UU1VQUDsNCj4gKwl9DQo+ICt9DQo+ICsNCj4gK3N0YXRp YyB1bW9kZV90IGFkbTkyNDBfaXNfdmlzaWJsZShjb25zdCB2b2lkICpfZGF0YSwgZW51bSBod21v bl9zZW5zb3JfdHlwZXMgdHlwZSwNCj4gKwkJCQkgIHUzMiBhdHRyLCBpbnQgY2hhbm5lbCkNCj4g K3sNCj4gKwl1bW9kZV90IG1vZGUgPSAwOw0KPiArDQo+ICsJc3dpdGNoICh0eXBlKSB7DQo+ICsJ Y2FzZSBod21vbl9jaGlwOg0KPiArCQlzd2l0Y2ggKGF0dHIpIHsNCj4gKwkJY2FzZSBod21vbl9j aGlwX2FsYXJtczoNCj4gKwkJCW1vZGUgPSAwNDQ0Ow0KPiArCQkJYnJlYWs7DQo+ICsJCWRlZmF1 bHQ6DQo+ICsJCQlicmVhazsNCj4gKwkJfQ0KPiArCQlicmVhazsNCj4gKwljYXNlIGh3bW9uX2lu dHJ1c2lvbjoNCj4gKwkJc3dpdGNoIChhdHRyKSB7DQo+ICsJCWNhc2UgaHdtb25faW50cnVzaW9u X2FsYXJtOg0KPiArCQkJbW9kZSA9IDA2NDQ7DQo+ICsJCQlicmVhazsNCj4gKwkJZGVmYXVsdDoN Cj4gKwkJCWJyZWFrOw0KPiArCQl9DQo+ICsJCWJyZWFrOw0KPiArCWNhc2UgaHdtb25fdGVtcDoN Cj4gKwkJc3dpdGNoIChhdHRyKSB7DQo+ICsJCWNhc2UgaHdtb25fdGVtcDoNCj4gKwkJY2FzZSBo d21vbl90ZW1wX2FsYXJtOg0KPiArCQkJbW9kZSA9IDA0NDQ7DQo+ICsJCQlicmVhazsNCj4gKwkJ Y2FzZSBod21vbl90ZW1wX21heDoNCj4gKwkJY2FzZSBod21vbl90ZW1wX21heF9oeXN0Og0KPiAr CQkJbW9kZSA9IDA2NDQ7DQo+ICsJCQlicmVhazsNCj4gKwkJZGVmYXVsdDoNCj4gKwkJCWJyZWFr Ow0KPiArCQl9DQo+ICsJCWJyZWFrOw0KPiArCWNhc2UgaHdtb25fZmFuOg0KPiArCQlzd2l0Y2gg KGF0dHIpIHsNCj4gKwkJY2FzZSBod21vbl9mYW5faW5wdXQ6DQo+ICsJCWNhc2UgaHdtb25fZmFu X2RpdjoNCj4gKwkJY2FzZSBod21vbl9mYW5fYWxhcm06DQo+ICsJCQltb2RlID0gMDQ0NDsNCj4g KwkJCWJyZWFrOw0KPiArCQljYXNlIGh3bW9uX2Zhbl9taW46DQo+ICsJCQltb2RlID0gMDY0NDsN Cj4gKwkJCWJyZWFrOw0KPiArCQlkZWZhdWx0Og0KPiArCQkJYnJlYWs7DQo+ICsJCX0NCj4gKwkJ YnJlYWs7DQo+ICsJY2FzZSBod21vbl9pbjoNCj4gKwkJc3dpdGNoIChhdHRyKSB7DQo+ICsJCWNh c2UgaHdtb25faW5faW5wdXQ6DQo+ICsJCWNhc2UgaHdtb25faW5fYWxhcm06DQo+ICsJCQltb2Rl ID0gMDQ0NDsNCj4gKwkJCWJyZWFrOw0KPiArCQljYXNlIGh3bW9uX2luX21pbjoNCj4gKwkJY2Fz ZSBod21vbl9pbl9tYXg6DQo+ICsJCQltb2RlID0gMDY0NDsNCj4gKwkJCWJyZWFrOw0KPiArCQlk ZWZhdWx0Og0KPiArCQkJYnJlYWs7DQo+ICsJCX0NCj4gKwkJYnJlYWs7DQo+ICsJZGVmYXVsdDoN Cj4gKwkJYnJlYWs7DQo+ICsJfQ0KPiArCXJldHVybiBtb2RlOw0KPiArfQ0KPiArDQo+ICtzdGF0 aWMgY29uc3Qgc3RydWN0IGh3bW9uX29wcyBhZG05MjQwX2h3bW9uX29wcyA9IHsNCj4gKwkuaXNf dmlzaWJsZSA9IGFkbTkyNDBfaXNfdmlzaWJsZSwNCj4gKwkucmVhZCA9IGFkbTkyNDBfcmVhZCwN Cj4gKwkud3JpdGUgPSBhZG05MjQwX3dyaXRlLA0KPiArfTsNCj4gKw0KPiArc3RhdGljIGNvbnN0 IHN0cnVjdCBod21vbl9jaGFubmVsX2luZm8gKmFkbTkyNDBfaW5mb1tdID0gew0KPiArCUhXTU9O X0NIQU5ORUxfSU5GTyhjaGlwLCBIV01PTl9DX0FMQVJNUyksDQo+ICsJSFdNT05fQ0hBTk5FTF9J TkZPKGludHJ1c2lvbiwgSFdNT05fSU5UUlVTSU9OX0FMQVJNKSwNCj4gKwlIV01PTl9DSEFOTkVM X0lORk8odGVtcCwNCj4gKwkJCSAgIEhXTU9OX1RfSU5QVVQgfCBIV01PTl9UX01BWCB8IEhXTU9O X1RfTUFYX0hZU1QgfCBIV01PTl9UX0FMQVJNKSwNCj4gKwlIV01PTl9DSEFOTkVMX0lORk8oaW4s DQo+ICsJCQkgICBIV01PTl9JX0lOUFVUIHwgSFdNT05fSV9NSU4gfCBIV01PTl9JX01BWCB8IEhX TU9OX0lfQUxBUk0sDQo+ICsJCQkgICBIV01PTl9JX0lOUFVUIHwgSFdNT05fSV9NSU4gfCBIV01P Tl9JX01BWCB8IEhXTU9OX0lfQUxBUk0sDQo+ICsJCQkgICBIV01PTl9JX0lOUFVUIHwgSFdNT05f SV9NSU4gfCBIV01PTl9JX01BWCB8IEhXTU9OX0lfQUxBUk0sDQo+ICsJCQkgICBIV01PTl9JX0lO UFVUIHwgSFdNT05fSV9NSU4gfCBIV01PTl9JX01BWCB8IEhXTU9OX0lfQUxBUk0sDQo+ICsJCQkg ICBIV01PTl9JX0lOUFVUIHwgSFdNT05fSV9NSU4gfCBIV01PTl9JX01BWCB8IEhXTU9OX0lfQUxB Uk0sDQo+ICsJCQkgICBIV01PTl9JX0lOUFVUIHwgSFdNT05fSV9NSU4gfCBIV01PTl9JX01BWCB8 IEhXTU9OX0lfQUxBUk0pLA0KPiArCUhXTU9OX0NIQU5ORUxfSU5GTyhmYW4sDQo+ICsJCQkgICBI V01PTl9GX0lOUFVUIHwgSFdNT05fRl9NSU4gfCBIV01PTl9GX0RJViB8IEhXTU9OX0ZfQUxBUk0s DQo+ICsJCQkgICBIV01PTl9GX0lOUFVUIHwgSFdNT05fRl9NSU4gfCBIV01PTl9GX0RJViB8IEhX TU9OX0ZfQUxBUk0pLA0KPiArCU5VTEwNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgaHdtb25fY2hpcF9pbmZvIGFkbTkyNDBfY2hpcF9pbmZvID0gew0KPiArCS5vcHMgPSAmYWRt OTI0MF9od21vbl9vcHMsDQo+ICsJLmluZm8gPSBhZG05MjQwX2luZm8sDQo+ICt9Ow0KPiArDQo+ ICtzdGF0aWMgYm9vbCBhZG05MjQwX3ZvbGF0aWxlX3JlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVu c2lnbmVkIGludCByZWcpDQo+ICt7DQo+ICsJc3dpdGNoIChyZWcpIHsNCj4gKwljYXNlIEFETTky NDBfUkVHX0lOKDApIC4uLiBBRE05MjQwX1JFR19JTig1KToNCj4gKwljYXNlIEFETTkyNDBfUkVH X0ZBTigwKSAuLi4gQURNOTI0MF9SRUdfRkFOKDEpOg0KPiArCWNhc2UgQURNOTI0MF9SRUdfSU5U KDApIC4uLiBBRE05MjQwX1JFR19JTlQoMSk6DQo+ICsJY2FzZSBBRE05MjQwX1JFR19URU1QOg0K PiArCWNhc2UgQURNOTI0MF9SRUdfVEVNUF9DT05GOg0KPiArCWNhc2UgQURNOTI0MF9SRUdfVklE X0ZBTl9ESVY6DQo+ICsJY2FzZSBBRE05MjQwX1JFR19WSUQ0Og0KPiArCWNhc2UgQURNOTI0MF9S RUdfQU5BTE9HX09VVDoNCj4gKwkJcmV0dXJuIHRydWU7DQo+ICsJZGVmYXVsdDoNCj4gKwkJcmV0 dXJuIGZhbHNlOw0KPiArCX0NCj4gK30NCj4gKw0KPiAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVn bWFwX2NvbmZpZyBhZG05MjQwX3JlZ21hcF9jb25maWcgPSB7DQo+ICAgCS5yZWdfYml0cyA9IDgs DQo+ICAgCS52YWxfYml0cyA9IDgsDQo+ICAgCS51c2Vfc2luZ2xlX3JlYWQgPSB0cnVlLA0KPiAg IAkudXNlX3NpbmdsZV93cml0ZSA9IHRydWUsDQo+ICsJLnZvbGF0aWxlX3JlZyA9IGFkbTkyNDBf dm9sYXRpbGVfcmVnLA0KPiAgIH07DQo+ICAgDQo+IC1zdGF0aWMgaW50IGFkbTkyNDBfcHJvYmUo c3RydWN0IGkyY19jbGllbnQgKm5ld19jbGllbnQpDQo+ICtzdGF0aWMgaW50IGFkbTkyNDBfcHJv YmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkNCj4gICB7DQo+IC0Jc3RydWN0IGRldmljZSAq ZGV2ID0gJm5ld19jbGllbnQtPmRldjsNCj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmY2xpZW50 LT5kZXY7DQo+ICAgCXN0cnVjdCBkZXZpY2UgKmh3bW9uX2RldjsNCj4gICAJc3RydWN0IGFkbTky NDBfZGF0YSAqZGF0YTsNCj4gICAJaW50IGVycjsNCj4gQEAgLTgzNSw3ICs3ODYsNyBAQCBzdGF0 aWMgaW50IGFkbTkyNDBfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKm5ld19jbGllbnQpDQo+ICAg DQo+ICAgCWRhdGEtPmRldiA9IGRldjsNCj4gICAJbXV0ZXhfaW5pdCgmZGF0YS0+dXBkYXRlX2xv Y2spOw0KPiAtCWRhdGEtPnJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXRfaTJjKG5ld19jbGllbnQs ICZhZG05MjQwX3JlZ21hcF9jb25maWcpOw0KPiArCWRhdGEtPnJlZ21hcCA9IGRldm1fcmVnbWFw X2luaXRfaTJjKGNsaWVudCwgJmFkbTkyNDBfcmVnbWFwX2NvbmZpZyk7DQo+ICAgCWlmIChJU19F UlIoZGF0YS0+cmVnbWFwKSkNCj4gICAJCXJldHVybiBQVFJfRVJSKGRhdGEtPnJlZ21hcCk7DQo+ ICAgDQo+IEBAIC04NDMsMTAgKzc5NCw5IEBAIHN0YXRpYyBpbnQgYWRtOTI0MF9wcm9iZShzdHJ1 Y3QgaTJjX2NsaWVudCAqbmV3X2NsaWVudCkNCj4gICAJaWYgKGVyciA8IDApDQo+ICAgCQlyZXR1 cm4gZXJyOw0KPiAgIA0KPiAtCWh3bW9uX2RldiA9IGRldm1faHdtb25fZGV2aWNlX3JlZ2lzdGVy X3dpdGhfZ3JvdXBzKGRldiwNCj4gLQkJCQkJCQkgICBuZXdfY2xpZW50LT5uYW1lLA0KPiAtCQkJ CQkJCSAgIGRhdGEsDQo+IC0JCQkJCQkJICAgYWRtOTI0MF9ncm91cHMpOw0KPiArCWh3bW9uX2Rl diA9IGRldm1faHdtb25fZGV2aWNlX3JlZ2lzdGVyX3dpdGhfaW5mbyhkZXYsIGNsaWVudC0+bmFt ZSwgZGF0YSwNCj4gKwkJCQkJCQkgJmFkbTkyNDBfY2hpcF9pbmZvLA0KPiArCQkJCQkJCSBhZG05 MjQwX2dyb3Vwcyk7DQo+ICAgCXJldHVybiBQVFJfRVJSX09SX1pFUk8oaHdtb25fZGV2KTsNCj4g ICB9DQo+ICAg