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 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id C5246C38142 for ; Fri, 27 Jan 2023 10:22:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=AXamzIxtiAbyA7BPlf/skvjLy+8ssO4jzZJ5br/O5JU=; b=1Qz6yU3yO1CiMA 1FEHTVspgbeHItoaLJcB0+MTTJ41je/nde+9jv2OZi24taACbNcZ2alBuBHE67fjlu+mDMPTutDnq GRXoVabT5IOsUiHw69A781y8fZ3xXffgRTl95tXBbKpkcbp7KPKc1bjDGC3y0ZetdunHBu4Iw5KSP e0YNhtJ/8sgiFKqqQ1D8kwECU4f0N2BLPbcAlMj9kFCH5kxfgfLTZakQcTQuKcxTJ7qQwPHPSRq9H biSpG1LK4gxOOZpKu0XNkzeSUMISnrDc8d7oE5cwCfjezpFQ2lAWpRGo8hGung1IWBd3ZwTv24sJU ZBfP0UP/bP6FmJQsxi5w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1pLLrK-00Dutq-8E; Fri, 27 Jan 2023 10:21:26 +0000 Received: from dfw.source.kernel.org ([2604:1380:4641:c500::1]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1pLLrD-00DuqP-Iy; Fri, 27 Jan 2023 10:21:23 +0000 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 0F19D61AC3; Fri, 27 Jan 2023 10:21:19 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7C2A5C4339C; Fri, 27 Jan 2023 10:21:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1674814878; bh=FD1iO4XgaRit0tC4TO1N0eBYBletQGURpPb1jkXzObs=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=m7ufsh4GYGYnZUB44p+PVuN1iFbfwFBMSqlYSr3NCF7RcxysehBuw0321sveChHle mGoY7F4/TbV8wbuej9OLx/2cqCQXPtlGeZeIDrWohAcLkvJ0OIzQrU6EpNYnIYM3Qe Jr61uhtN3tZN1u0BQsDEA99WBNsA9ZUbjOk0Q9VINXa5YgX1EWpWg0VTzVND/lakGx 0BqugPLKbeqRoMnUwRZy37/+DkMlXTVcnmn+1hZw2dx2CK4rqKA3LNduM5BTrRvUzC K8zWoZzr06MbKIxg5Vg6ef26+0FwfjIr8TRPET5fT9ropErTX0v4/l2dgN9qxvw2l4 5BSb3F22X/XVA== Date: Fri, 27 Jan 2023 10:21:12 +0000 From: Lee Jones To: ChiaEn Wu , Jacek Anaszewski Cc: pavel@ucw.cz, matthias.bgg@gmail.com, andriy.shevchenko@linux.intel.com, peterwu.pub@gmail.com, cy_huang@richtek.com, linux-leds@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-kernel@vger.kernel.org, szunichen@gmail.com, Alice Chen , ChiaEn Wu Subject: Re: [PATCH v16 1/2] leds: rgb: mt6370: Add MediaTek MT6370 current sink type LED Indicator support Message-ID: References: <1c4cf50600bb0334bd03027f49d7511b394c6ced.1673886245.git.chiaen_wu@richtek.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <1c4cf50600bb0334bd03027f49d7511b394c6ced.1673886245.git.chiaen_wu@richtek.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230127_022119_768872_652F71CA X-CRM114-Status: GOOD ( 34.43 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org SmFjZWssIEFuZHksCgpPbiBUdWUsIDE3IEphbiAyMDIzLCBDaGlhRW4gV3Ugd3JvdGU6Cgo+IEZy b206IENoaVl1YW4gSHVhbmcgPGN5X2h1YW5nQHJpY2h0ZWsuY29tPgo+IAo+IFRoZSBNZWRpYVRl ayBNVDYzNzAgaXMgYSBoaWdobHktaW50ZWdyYXRlZCBzbWFydCBwb3dlciBtYW5hZ2VtZW50IElD LAo+IHdoaWNoIGluY2x1ZGVzIGEgc2luZ2xlIGNlbGwgTGktSW9uL0xpLVBvbHltZXIgc3dpdGNo aW5nIGJhdHRlcnkKPiBjaGFyZ2VyLCBhIFVTQiBUeXBlLUMgJiBQb3dlciBEZWxpdmVyeSAoUEQp IGNvbnRyb2xsZXIsIGR1YWwKPiBGbGFzaCBMRUQgY3VycmVudCBzb3VyY2VzLCBhIFJHQiBMRUQg ZHJpdmVyLCBhIGJhY2tsaWdodCBXTEVEIGRyaXZlciwKPiBhIGRpc3BsYXkgYmlhcyBkcml2ZXIg YW5kIGEgZ2VuZXJhbCBMRE8gZm9yIHBvcnRhYmxlIGRldmljZXMuCj4gCj4gQWRkIHN1cHBvcnQg Zm9yIHRoZSBNZWRpYVRlayBNVDYzNzAgQ3VycmVudCBTaW5rIFR5cGUgTEVEIEluZGljYXRvcgo+ IGRyaXZlci4gSXQgY2FuIGNvbnRyb2wgZm91ciBjaGFubmVscyBjdXJyZW50LXNpbmsgUkdCIExF RHMgd2l0aCAzIG1vZGVzOgo+IGNvbnN0YW50IGN1cnJlbnQsIFBXTSwgYW5kIGJyZWF0aCBtb2Rl Lgo+IAo+IENvLWRldmVsb3BlZC1ieTogQWxpY2UgQ2hlbiA8YWxpY2VfY2hlbkByaWNodGVrLmNv bT4KPiBTaWduZWQtb2ZmLWJ5OiBBbGljZSBDaGVuIDxhbGljZV9jaGVuQHJpY2h0ZWsuY29tPgo+ IFNpZ25lZC1vZmYtYnk6IENoaVl1YW4gSHVhbmcgPGN5X2h1YW5nQHJpY2h0ZWsuY29tPgo+IFNp Z25lZC1vZmYtYnk6IENoaWFFbiBXdSA8Y2hpYWVuX3d1QHJpY2h0ZWsuY29tPgo+IC0tLQo+IAo+ IHYxNgo+IC0gUmVtb3ZlIGJsYW5rIGxpbmUgaW4gdGhlIGhlYWQgdGV4dC4KPiAtIE1vdmUgJ3B3 bV9kdXR5JyB0byBkZXNjcmVhc2UgdGhlIHNpemUgb2Ygc3RydWN0IG10NjM3MF9wZGF0YS4KPiAt IE1vdmUgdGhlIGZpZWxkICdGX1JHQl9FTicgd3JpdGUgb3V0IGZyb20gaWYvZWxzZSBpbgo+ICAg J210NjM3MF9pc25rX2JyaWdodG5lc3Nfc2V0Jy4KPiAtIFJlbW92ZSAnZGV2JyBpbiBzdHJ1Y3Qg bXQ2MzcwX3ByaXYuCj4gLSBSZW1vdmUgdGhlIHByb3ByZXR5IHJlYWRpbmcgZm9yICdsaW51eCxk ZWZhdWx0LXRyaWdnZXInLCBsZWQgY29yZQo+ICAgYWxyZWFkeSBkaWQgaXQuCj4gLSBDaGFuZ2Ug dGhlIG1vZHVsZSBsaWNlbnNlIGZyb20gJ0dQTCB2MicgdG8gJ0dQTCcKPiAgIEluIHRoZSBoZWFk IHRleHQsIGFscmVhZHkgZGVzbGNyZWQgU1BEWCBsaWNlbnNlIGFzICdHUEwtMi4wLW9ubHknLgo+ IC0tLQo+ICBkcml2ZXJzL2xlZHMvcmdiL0tjb25maWcgICAgICAgICAgIHwgICAxMyArCj4gIGRy aXZlcnMvbGVkcy9yZ2IvTWFrZWZpbGUgICAgICAgICAgfCAgICAxICsKPiAgZHJpdmVycy9sZWRz L3JnYi9sZWRzLW10NjM3MC1yZ2IuYyB8IDEwMDkgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrCj4gIDMgZmlsZXMgY2hhbmdlZCwgMTAyMyBpbnNlcnRpb25zKCspCj4gIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2xlZHMvcmdiL2xlZHMtbXQ2MzcwLXJnYi5jCgpJIHNlZSB0 aGF0IHlvdSBndXlzIGhhdmUgYmVlbiBzdXBlciBoZWxwZnVsIHJldmlld2luZyB0aGlzIGluIHRo ZSBwYXN0LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIApIYXZlIHlvdXIgcXVlcmllcyBub3cgYmVlbiBhZGRyZXNz ZWQ/Cgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvcmdiL0tjb25maWcgYi9kcml2ZXJzL2xl ZHMvcmdiL0tjb25maWcKPiBpbmRleCAyMDRjZjQ3Li43ZDg2YmIyIDEwMDY0NAo+IC0tLSBhL2Ry aXZlcnMvbGVkcy9yZ2IvS2NvbmZpZwo+ICsrKyBiL2RyaXZlcnMvbGVkcy9yZ2IvS2NvbmZpZwo+ IEBAIC0yNiw0ICsyNiwxNyBAQCBjb25maWcgTEVEU19RQ09NX0xQRwo+ICAKPiAgCSAgSWYgY29t cGlsZWQgYXMgYSBtb2R1bGUsIHRoZSBtb2R1bGUgd2lsbCBiZSBuYW1lZCBsZWRzLXFjb20tbHBn Lgo+ICAKPiArY29uZmlnIExFRFNfTVQ2MzcwX1JHQgo+ICsJdHJpc3RhdGUgIkxFRCBTdXBwb3J0 IGZvciBNZWRpYVRlayBNVDYzNzAgUE1JQyIKPiArCWRlcGVuZHMgb24gTUZEX01UNjM3MAo+ICsJ c2VsZWN0IExJTkVBUl9SQU5HRQo+ICsJaGVscAo+ICsJICBTYXkgWSBoZXJlIHRvIGVuYWJsZSBz dXBwb3J0IGZvciBNVDYzNzBfUkdCIExFRCBkZXZpY2UuCj4gKwkgIEluIE1UNjM3MCwgdGhlcmUg YXJlIGZvdXIgY2hhbm5lbCBjdXJyZW50LXNpbmsgTEVEIGRyaXZlcnMgdGhhdAo+ICsJICBzdXBw b3J0IGhhcmR3YXJlIHBhdHRlcm4gZm9yIGNvbnN0YW50IGN1cnJlbnQsIFBXTSwgYW5kIGJyZWF0 aCBtb2RlLgo+ICsJICBJc2luazQgY2hhbm5lbCBjYW4gYWxzbyBiZSB1c2VkIGFzIGEgQ0hHX1ZJ TiBwb3dlciBnb29kIGluZGljYXRvci4KPiArCj4gKwkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJl IGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZQo+ICsJICB3aWxsIGJlIGNhbGxl ZCAibGVkcy1tdDYzNzAtcmdiIi4KPiArCj4gIGVuZGlmICMgTEVEU19DTEFTU19NVUxUSUNPTE9S Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9yZ2IvTWFrZWZpbGUgYi9kcml2ZXJzL2xlZHMv cmdiL01ha2VmaWxlCj4gaW5kZXggMDY3NWJjMC4uOGMwMWRhZiAxMDA2NDQKPiAtLS0gYS9kcml2 ZXJzL2xlZHMvcmdiL01ha2VmaWxlCj4gKysrIGIvZHJpdmVycy9sZWRzL3JnYi9NYWtlZmlsZQo+ IEBAIC0yLDMgKzIsNCBAQAo+ICAKPiAgb2JqLSQoQ09ORklHX0xFRFNfUFdNX01VTFRJQ09MT1Ip CSs9IGxlZHMtcHdtLW11bHRpY29sb3Iubwo+ICBvYmotJChDT05GSUdfTEVEU19RQ09NX0xQRykJ CSs9IGxlZHMtcWNvbS1scGcubwo+ICtvYmotJChDT05GSUdfTEVEU19NVDYzNzBfUkdCKQkJKz0g bGVkcy1tdDYzNzAtcmdiLm8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL3JnYi9sZWRzLW10 NjM3MC1yZ2IuYyBiL2RyaXZlcnMvbGVkcy9yZ2IvbGVkcy1tdDYzNzAtcmdiLmMKPiBuZXcgZmls ZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwLi4yYTVkNTgyCj4gLS0tIC9kZXYvbnVsbAo+ ICsrKyBiL2RyaXZlcnMvbGVkcy9yZ2IvbGVkcy1tdDYzNzAtcmdiLmMKPiBAQCAtMCwwICsxLDEw MDkgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQo+ICsvKgo+ ICsgKiBDb3B5cmlnaHQgKEMpIDIwMjIgUmljaHRlayBUZWNobm9sb2d5IENvcnAuCj4gKyAqCj4g KyAqIEF1dGhvcnM6Cj4gKyAqICAgQ2hpWXVhbiBIdWFuZyA8Y3lfaHVhbmdAcmljaHRlay5jb20+ Cj4gKyAqICAgQWxpY2UgQ2hlbiA8YWxpY2VfY2hlbkByaWNodGVrLmNvbT4KPiArICovCj4gKwo+ ICsjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4K PiArI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2xlZC1jbGFzcy1t dWx0aWNvbG9yLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9saW5lYXJfcmFuZ2UuaD4KPiArI2luY2x1 ZGUgPGxpbnV4L21vZF9kZXZpY2V0YWJsZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+ Cj4gKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgo+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1f ZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9wcm9wZXJ0eS5oPgo+ICsjaW5jbHVkZSA8bGlu dXgvcmVnbWFwLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC91dGlsX21hY3Jvcy5oPgo+ICsKPiArI2lu Y2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KPiArCj4gK2VudW0gewo+ICsJTVQ2MzcwX0xFRF9JU05L MSA9IDAsCj4gKwlNVDYzNzBfTEVEX0lTTksyLAo+ICsJTVQ2MzcwX0xFRF9JU05LMywKPiArCU1U NjM3MF9MRURfSVNOSzQsCj4gKwlNVDYzNzBfTUFYX0xFRFMKPiArfTsKPiArCj4gK2VudW0gbXQ2 MzcwX2xlZF9tb2RlIHsKPiArCU1UNjM3MF9MRURfUFdNX01PREUgPSAwLAo+ICsJTVQ2MzcwX0xF RF9CUkVBVEhfTU9ERSwKPiArCU1UNjM3MF9MRURfUkVHX01PREUsCj4gKwlNVDYzNzBfTEVEX01B WF9NT0RFCj4gK307Cj4gKwo+ICtlbnVtIG10NjM3MF9sZWRfZmllbGQgewo+ICsJRl9SR0JfRU4g PSAwLAo+ICsJRl9DSEdJTkRfRU4sCj4gKwlGX0xFRDFfQ1VSUiwKPiArCUZfTEVEMl9DVVJSLAo+ ICsJRl9MRUQzX0NVUlIsCj4gKwlGX0xFRDRfQ1VSUiwKPiArCUZfTEVEMV9NT0RFLAo+ICsJRl9M RUQyX01PREUsCj4gKwlGX0xFRDNfTU9ERSwKPiArCUZfTEVENF9NT0RFLAo+ICsJRl9MRUQxX0RV VFksCj4gKwlGX0xFRDJfRFVUWSwKPiArCUZfTEVEM19EVVRZLAo+ICsJRl9MRUQ0X0RVVFksCj4g KwlGX0xFRDFfRlJFUSwKPiArCUZfTEVEMl9GUkVRLAo+ICsJRl9MRUQzX0ZSRVEsCj4gKwlGX0xF RDRfRlJFUSwKPiArCUZfTUFYX0ZJRUxEUwo+ICt9Owo+ICsKPiArZW51bSBtdDYzNzBfbGVkX3Jh bmdlcyB7Cj4gKwlSX0xFRDEyM19DVVJSID0gMCwKPiArCVJfTEVENF9DVVJSLAo+ICsJUl9MRURf VFJGT04sCj4gKwlSX0xFRF9UT0ZGLAo+ICsJUl9NQVhfUkFOR0VTCj4gK307Cj4gKwo+ICtlbnVt IG10NjM3MF9wYXR0ZXJuIHsKPiArCVBfTEVEX1RSMSA9IDAsCj4gKwlQX0xFRF9UUjIsCj4gKwlQ X0xFRF9URjEsCj4gKwlQX0xFRF9URjIsCj4gKwlQX0xFRF9UT04sCj4gKwlQX0xFRF9UT0ZGLAo+ ICsJUF9NQVhfUEFUVEVSTlMKPiArfTsKPiArCj4gKyNkZWZpbmUgTVQ2MzcwX1JFR19ERVZfSU5G TwkJCTB4MTAwCj4gKyNkZWZpbmUgTVQ2MzcwX1JFR19SR0IxX0RJTQkJCTB4MTgyCj4gKyNkZWZp bmUgTVQ2MzcwX1JFR19SR0IyX0RJTQkJCTB4MTgzCj4gKyNkZWZpbmUgTVQ2MzcwX1JFR19SR0Iz X0RJTQkJCTB4MTg0Cj4gKyNkZWZpbmUgTVQ2MzcwX1JFR19SR0JfRU4JCQkweDE4NQo+ICsjZGVm aW5lIE1UNjM3MF9SRUdfUkdCMV9JU05LCQkJMHgxODYKPiArI2RlZmluZSBNVDYzNzBfUkVHX1JH QjJfSVNOSwkJCTB4MTg3Cj4gKyNkZWZpbmUgTVQ2MzcwX1JFR19SR0IzX0lTTksJCQkweDE4OAo+ ICsjZGVmaW5lIE1UNjM3MF9SRUdfUkdCMV9UUgkJCTB4MTg5Cj4gKyNkZWZpbmUgTVQ2MzcwX1JF R19SR0JfQ0hSSU5EX0RJTQkJMHgxOTIKPiArI2RlZmluZSBNVDYzNzBfUkVHX1JHQl9DSFJJTkRf Q1RSTAkJMHgxOTMKPiArI2RlZmluZSBNVDYzNzBfUkVHX1JHQl9DSFJJTkRfVFIJCTB4MTk0Cj4g Kwo+ICsjZGVmaW5lIE1UNjM3Ml9SRUdfUkdCX0VOCQkJMHgxODIKPiArI2RlZmluZSBNVDYzNzJf UkVHX1JHQjFfSVNOSwkJCTB4MTgzCj4gKyNkZWZpbmUgTVQ2MzcyX1JFR19SR0IyX0lTTksJCQkw eDE4NAo+ICsjZGVmaW5lIE1UNjM3Ml9SRUdfUkdCM19JU05LCQkJMHgxODUKPiArI2RlZmluZSBN VDYzNzJfUkVHX1JHQjRfSVNOSwkJCTB4MTg2Cj4gKyNkZWZpbmUgTVQ2MzcyX1JFR19SR0IxX0RJ TQkJCTB4MTg3Cj4gKyNkZWZpbmUgTVQ2MzcyX1JFR19SR0IyX0RJTQkJCTB4MTg4Cj4gKyNkZWZp bmUgTVQ2MzcyX1JFR19SR0IzX0RJTQkJCTB4MTg5Cj4gKyNkZWZpbmUgTVQ2MzcyX1JFR19SR0I0 X0RJTQkJCTB4MThBCj4gKyNkZWZpbmUgTVQ2MzcyX1JFR19SR0IxMl9GUkVRCQkJMHgxOEIKPiAr I2RlZmluZSBNVDYzNzJfUkVHX1JHQjM0X0ZSRVEJCQkweDE4Qwo+ICsjZGVmaW5lIE1UNjM3Ml9S RUdfUkdCMV9UUgkJCTB4MThECj4gKwo+ICsjZGVmaW5lIE1UNjM3MF9WRU5JRF9NQVNLCQkJR0VO TUFTSyg3LCA0KQo+ICsjZGVmaW5lIE1UNjM3MF9DSEVOX0JJVChpZCkJCQlCSVQoTVQ2MzcwX0xF RF9JU05LNCAtIGlkKQo+ICsjZGVmaW5lIE1UNjM3MF9WSVJUVUFMX01VTFRJQ09MT1IJCTUKPiAr I2RlZmluZSBNQ19DSEFOTkVMX05VTQkJCQkzCj4gKyNkZWZpbmUgTVQ2MzcwX1BXTV9EVVRZCQkJ CShCSVQoNSkgLSAxKQo+ICsjZGVmaW5lIE1UNjM3Ml9QV01fRFVUWQkJCQkoQklUKDgpIC0gMSkK PiArCj4gK3N0cnVjdCBtdDYzNzBfbGVkIHsKPiArCS8qCj4gKwkgKiBJZiB0aGUgY29sb3Igb2Yg dGhlIExFRCBpbiBEVCBpcyBzZXQgdG8KPiArCSAqICAgLSAnTEVEX0NPTE9SX0lEX1JHQicKPiAr CSAqICAgLSAnTEVEX0NPTE9SX0lEX01VTFRJJwo+ICsJICogVGhlIG1lbWJlciAnaW5kZXgnIG9m IHRoaXMgc3RydWN0IHdpbGwgYmUgc2V0IHRvCj4gKwkgKiAnTVQ2MzcwX1ZJUlRVQUxfTVVMVElD T0xPUicuCj4gKwkgKiBJZiBzbywgdGhpcyBMRUQgd2lsbCBjaG9vc2UgJ3N0cnVjdCBsZWRfY2xh c3NkZXZfbWMgbWMnIHRvIHVzZS4KPiArCSAqIEluc3RlYWQsIGlmIHRoZSBtZW1iZXIgJ2luZGV4 JyBvZiB0aGlzIHN0cnVjdCBpcyBzZXQgdG8KPiArCSAqICdNVDYzNzBfTEVEX0lTTksxJyB+ICdN VDYzNzBfTEVEX0lTTks0JywgdGhlbiB0aGlzIExFRCB3aWxsIGNob29zZQo+ICsJICogJ3N0cnVj dCBsZWRfY2xhc3NkZXYgaXNpbmsnIHRvIHVzZS4KPiArCSAqLwo+ICsJdW5pb24gewo+ICsJCXN0 cnVjdCBsZWRfY2xhc3NkZXYgaXNpbms7Cj4gKwkJc3RydWN0IGxlZF9jbGFzc2Rldl9tYyBtYzsK PiArCX07Cj4gKwlzdHJ1Y3QgbXQ2MzcwX3ByaXYgKnByaXY7Cj4gKwllbnVtIGxlZF9kZWZhdWx0 X3N0YXRlIGRlZmF1bHRfc3RhdGU7Cj4gKwl1MzIgaW5kZXg7Cj4gK307Cj4gKwo+ICtzdHJ1Y3Qg bXQ2MzcwX3BkYXRhIHsKPiArCWNvbnN0IHVuc2lnbmVkIGludCAqdGZyZXE7Cj4gKwl1bnNpZ25l ZCBpbnQgdGZyZXFfbGVuOwo+ICsJdTE2IHJlZ19yZ2IxX3RyOwo+ICsJczE2IHJlZ19yZ2JfY2hy aW5kX3RyOwo+ICsJdTggcHdtX2R1dHk7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgbXQ2MzcwX3ByaXYg ewo+ICsJLyogUGVyIExFRCBhY2Nlc3MgbG9jayAqLwo+ICsJc3RydWN0IG11dGV4IGxvY2s7Cj4g KwlzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7Cj4gKwlzdHJ1Y3QgcmVnbWFwX2ZpZWxkICpmaWVsZHNb Rl9NQVhfRklFTERTXTsKPiArCWNvbnN0IHN0cnVjdCByZWdfZmllbGQgKnJlZ19maWVsZHM7Cj4g Kwljb25zdCBzdHJ1Y3QgbGluZWFyX3JhbmdlICpyYW5nZXM7Cj4gKwlzdHJ1Y3QgcmVnX2NmZyAq cmVnX2NmZ3M7Cj4gKwljb25zdCBzdHJ1Y3QgbXQ2MzcwX3BkYXRhICpwZGF0YTsKPiArCXVuc2ln bmVkIGludCBsZWRzX2NvdW50Owo+ICsJdW5zaWduZWQgaW50IGxlZHNfYWN0aXZlOwo+ICsJc3Ry dWN0IG10NjM3MF9sZWQgbGVkc1tdOwo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBy ZWdfZmllbGQgY29tbW9uX3JlZ19maWVsZHNbRl9NQVhfRklFTERTXSA9IHsKPiArCVtGX1JHQl9F Tl0JPSBSRUdfRklFTEQoTVQ2MzcwX1JFR19SR0JfRU4sIDQsIDcpLAo+ICsJW0ZfQ0hHSU5EX0VO XQk9IFJFR19GSUVMRChNVDYzNzBfUkVHX1JHQl9DSFJJTkRfRElNLCA3LCA3KSwKPiArCVtGX0xF RDFfQ1VSUl0JPSBSRUdfRklFTEQoTVQ2MzcwX1JFR19SR0IxX0lTTkssIDAsIDIpLAo+ICsJW0Zf TEVEMl9DVVJSXQk9IFJFR19GSUVMRChNVDYzNzBfUkVHX1JHQjJfSVNOSywgMCwgMiksCj4gKwlb Rl9MRUQzX0NVUlJdCT0gUkVHX0ZJRUxEKE1UNjM3MF9SRUdfUkdCM19JU05LLCAwLCAyKSwKPiAr CVtGX0xFRDRfQ1VSUl0JPSBSRUdfRklFTEQoTVQ2MzcwX1JFR19SR0JfQ0hSSU5EX0NUUkwsIDAs IDEpLAo+ICsJW0ZfTEVEMV9NT0RFXQk9IFJFR19GSUVMRChNVDYzNzBfUkVHX1JHQjFfRElNLCA1 LCA2KSwKPiArCVtGX0xFRDJfTU9ERV0JPSBSRUdfRklFTEQoTVQ2MzcwX1JFR19SR0IyX0RJTSwg NSwgNiksCj4gKwlbRl9MRUQzX01PREVdCT0gUkVHX0ZJRUxEKE1UNjM3MF9SRUdfUkdCM19ESU0s IDUsIDYpLAo+ICsJW0ZfTEVENF9NT0RFXQk9IFJFR19GSUVMRChNVDYzNzBfUkVHX1JHQl9DSFJJ TkRfRElNLCA1LCA2KSwKPiArCVtGX0xFRDFfRFVUWV0JPSBSRUdfRklFTEQoTVQ2MzcwX1JFR19S R0IxX0RJTSwgMCwgNCksCj4gKwlbRl9MRUQyX0RVVFldCT0gUkVHX0ZJRUxEKE1UNjM3MF9SRUdf UkdCMl9ESU0sIDAsIDQpLAo+ICsJW0ZfTEVEM19EVVRZXQk9IFJFR19GSUVMRChNVDYzNzBfUkVH X1JHQjNfRElNLCAwLCA0KSwKPiArCVtGX0xFRDRfRFVUWV0JPSBSRUdfRklFTEQoTVQ2MzcwX1JF R19SR0JfQ0hSSU5EX0RJTSwgMCwgNCksCj4gKwlbRl9MRUQxX0ZSRVFdCT0gUkVHX0ZJRUxEKE1U NjM3MF9SRUdfUkdCMV9JU05LLCAzLCA1KSwKPiArCVtGX0xFRDJfRlJFUV0JPSBSRUdfRklFTEQo TVQ2MzcwX1JFR19SR0IyX0lTTkssIDMsIDUpLAo+ICsJW0ZfTEVEM19GUkVRXQk9IFJFR19GSUVM RChNVDYzNzBfUkVHX1JHQjNfSVNOSywgMywgNSksCj4gKwlbRl9MRUQ0X0ZSRVFdCT0gUkVHX0ZJ RUxEKE1UNjM3MF9SRUdfUkdCX0NIUklORF9DVFJMLCAyLCA0KSwKPiArfTsKPiArCj4gK3N0YXRp YyBjb25zdCBzdHJ1Y3QgcmVnX2ZpZWxkIG10NjM3Ml9yZWdfZmllbGRzW0ZfTUFYX0ZJRUxEU10g PSB7Cj4gKwlbRl9SR0JfRU5dCT0gUkVHX0ZJRUxEKE1UNjM3Ml9SRUdfUkdCX0VOLCA0LCA3KSwK PiArCVtGX0NIR0lORF9FTl0JPSBSRUdfRklFTEQoTVQ2MzcyX1JFR19SR0JfRU4sIDMsIDMpLAo+ ICsJW0ZfTEVEMV9DVVJSXQk9IFJFR19GSUVMRChNVDYzNzJfUkVHX1JHQjFfSVNOSywgMCwgMyks Cj4gKwlbRl9MRUQyX0NVUlJdCT0gUkVHX0ZJRUxEKE1UNjM3Ml9SRUdfUkdCMl9JU05LLCAwLCAz KSwKPiArCVtGX0xFRDNfQ1VSUl0JPSBSRUdfRklFTEQoTVQ2MzcyX1JFR19SR0IzX0lTTkssIDAs IDMpLAo+ICsJW0ZfTEVENF9DVVJSXQk9IFJFR19GSUVMRChNVDYzNzJfUkVHX1JHQjRfSVNOSywg MCwgMyksCj4gKwlbRl9MRUQxX01PREVdCT0gUkVHX0ZJRUxEKE1UNjM3Ml9SRUdfUkdCMV9JU05L LCA2LCA3KSwKPiArCVtGX0xFRDJfTU9ERV0JPSBSRUdfRklFTEQoTVQ2MzcyX1JFR19SR0IyX0lT TkssIDYsIDcpLAo+ICsJW0ZfTEVEM19NT0RFXQk9IFJFR19GSUVMRChNVDYzNzJfUkVHX1JHQjNf SVNOSywgNiwgNyksCj4gKwlbRl9MRUQ0X01PREVdCT0gUkVHX0ZJRUxEKE1UNjM3Ml9SRUdfUkdC NF9JU05LLCA2LCA3KSwKPiArCVtGX0xFRDFfRFVUWV0JPSBSRUdfRklFTEQoTVQ2MzcyX1JFR19S R0IxX0RJTSwgMCwgNyksCj4gKwlbRl9MRUQyX0RVVFldCT0gUkVHX0ZJRUxEKE1UNjM3Ml9SRUdf UkdCMl9ESU0sIDAsIDcpLAo+ICsJW0ZfTEVEM19EVVRZXQk9IFJFR19GSUVMRChNVDYzNzJfUkVH X1JHQjNfRElNLCAwLCA3KSwKPiArCVtGX0xFRDRfRFVUWV0JPSBSRUdfRklFTEQoTVQ2MzcyX1JF R19SR0I0X0RJTSwgMCwgNyksCj4gKwlbRl9MRUQxX0ZSRVFdCT0gUkVHX0ZJRUxEKE1UNjM3Ml9S RUdfUkdCMTJfRlJFUSwgNSwgNyksCj4gKwlbRl9MRUQyX0ZSRVFdCT0gUkVHX0ZJRUxEKE1UNjM3 Ml9SRUdfUkdCMTJfRlJFUSwgMiwgNCksCj4gKwlbRl9MRUQzX0ZSRVFdCT0gUkVHX0ZJRUxEKE1U NjM3Ml9SRUdfUkdCMzRfRlJFUSwgNSwgNyksCj4gKwlbRl9MRUQ0X0ZSRVFdCT0gUkVHX0ZJRUxE KE1UNjM3Ml9SRUdfUkdCMzRfRlJFUSwgMiwgNCksCj4gK307Cj4gKwo+ICsvKiBDdXJyZW50IHVu aXQ6IG1pY3JvYW1wLCB0aW1lIHVuaXQ6IG1pbGxpc2Vjb25kICovCj4gK3N0YXRpYyBjb25zdCBz dHJ1Y3QgbGluZWFyX3JhbmdlIGNvbW1vbl9sZWRfcmFuZ2VzW1JfTUFYX1JBTkdFU10gPSB7Cj4g KwlbUl9MRUQxMjNfQ1VSUl0JPSB7IDQwMDAsIDEsIDYsIDQwMDAgfSwKPiArCVtSX0xFRDRfQ1VS Ul0JPSB7IDIwMDAsIDEsIDMsIDIwMDAgfSwKPiArCVtSX0xFRF9UUkZPTl0JPSB7IDEyNSwgMCwg MTUsIDIwMCB9LAo+ICsJW1JfTEVEX1RPRkZdCT0geyAyNTAsIDAsIDE1LCA0MDAgfSwKPiArfTsK PiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbGluZWFyX3JhbmdlIG10NjM3Ml9sZWRfcmFuZ2Vz W1JfTUFYX1JBTkdFU10gPSB7Cj4gKwlbUl9MRUQxMjNfQ1VSUl0JPSB7IDIwMDAsIDEsIDE0LCAy MDAwIH0sCj4gKwlbUl9MRUQ0X0NVUlJdCT0geyAyMDAwLCAxLCAxNCwgMjAwMCB9LAo+ICsJW1Jf TEVEX1RSRk9OXQk9IHsgMTI1LCAwLCAxNSwgMjUwIH0sCj4gKwlbUl9MRURfVE9GRl0JPSB7IDI1 MCwgMCwgMTUsIDUwMCB9LAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBj b21tb25fdGZyZXFzW10gPSB7Cj4gKwkxMDAwMCwgNTAwMCwgMjAwMCwgMTAwMCwgNTAwLCAyMDAs IDUsIDEsCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG10NjM3Ml90ZnJl cXNbXSA9IHsKPiArCTgwMDAsIDQwMDAsIDIwMDAsIDEwMDAsIDUwMCwgMjUwLCA4LCA0LAo+ICt9 Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBtdDYzNzBfcGRhdGEgY29tbW9uX3BkYXRhID0g ewo+ICsJLnRmcmVxID0gY29tbW9uX3RmcmVxcywKPiArCS50ZnJlcV9sZW4gPSBBUlJBWV9TSVpF KGNvbW1vbl90ZnJlcXMpLAo+ICsJLnB3bV9kdXR5ID0gTVQ2MzcwX1BXTV9EVVRZLAo+ICsJLnJl Z19yZ2IxX3RyID0gTVQ2MzcwX1JFR19SR0IxX1RSLAo+ICsJLnJlZ19yZ2JfY2hyaW5kX3RyID0g TVQ2MzcwX1JFR19SR0JfQ0hSSU5EX1RSLAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVj dCBtdDYzNzBfcGRhdGEgbXQ2MzcyX3BkYXRhID0gewo+ICsJLnRmcmVxID0gbXQ2MzcyX3RmcmVx cywKPiArCS50ZnJlcV9sZW4gPSBBUlJBWV9TSVpFKG10NjM3Ml90ZnJlcXMpLAo+ICsJLnB3bV9k dXR5ID0gTVQ2MzcyX1BXTV9EVVRZLAo+ICsJLnJlZ19yZ2IxX3RyID0gTVQ2MzcyX1JFR19SR0Ix X1RSLAo+ICsJLnJlZ19yZ2JfY2hyaW5kX3RyID0gLTEsCj4gK307Cj4gKwo+ICtzdGF0aWMgZW51 bSBtdDYzNzBfbGVkX2ZpZWxkIG10NjM3MF9nZXRfbGVkX2N1cnJlbnRfZmllbGQodW5zaWduZWQg aW50IGxlZF9ubykKPiArewo+ICsJc3dpdGNoIChsZWRfbm8pIHsKPiArCWNhc2UgTVQ2MzcwX0xF RF9JU05LMToKPiArCQlyZXR1cm4gRl9MRUQxX0NVUlI7Cj4gKwljYXNlIE1UNjM3MF9MRURfSVNO SzI6Cj4gKwkJcmV0dXJuIEZfTEVEMl9DVVJSOwo+ICsJY2FzZSBNVDYzNzBfTEVEX0lTTkszOgo+ ICsJCXJldHVybiBGX0xFRDNfQ1VSUjsKPiArCWRlZmF1bHQ6Cj4gKwkJcmV0dXJuIEZfTEVENF9D VVJSOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IG10NjM3MF9zZXRfbGVkX2JyaWdodG5l c3Moc3RydWN0IG10NjM3MF9wcml2ICpwcml2LAo+ICsJCQkJICAgICB1bnNpZ25lZCBpbnQgbGVk X25vLCB1bnNpZ25lZCBpbnQgbGV2ZWwpCj4gK3sKPiArCWVudW0gbXQ2MzcwX2xlZF9maWVsZCBz ZWxfZmllbGQ7Cj4gKwo+ICsJc2VsX2ZpZWxkID0gbXQ2MzcwX2dldF9sZWRfY3VycmVudF9maWVs ZChsZWRfbm8pOwo+ICsKPiArCXJldHVybiByZWdtYXBfZmllbGRfd3JpdGUocHJpdi0+ZmllbGRz W3NlbF9maWVsZF0sIGxldmVsKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBtdDYzNzBfZ2V0X2xl ZF9icmlnaHRuZXNzKHN0cnVjdCBtdDYzNzBfcHJpdiAqcHJpdiwKPiArCQkJCSAgICAgdW5zaWdu ZWQgaW50IGxlZF9ubywgdW5zaWduZWQgaW50ICpsZXZlbCkKPiArewo+ICsJZW51bSBtdDYzNzBf bGVkX2ZpZWxkIHNlbF9maWVsZDsKPiArCj4gKwlzZWxfZmllbGQgPSBtdDYzNzBfZ2V0X2xlZF9j dXJyZW50X2ZpZWxkKGxlZF9ubyk7Cj4gKwo+ICsJcmV0dXJuIHJlZ21hcF9maWVsZF9yZWFkKHBy aXYtPmZpZWxkc1tzZWxfZmllbGRdLCBsZXZlbCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgbXQ2 MzcwX3NldF9sZWRfZHV0eShzdHJ1Y3QgbXQ2MzcwX3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBs ZWRfbm8sCj4gKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgdG9uLCB1bnNpZ25lZCBpbnQgdG9mZikK PiArewo+ICsJY29uc3Qgc3RydWN0IG10NjM3MF9wZGF0YSAqcGRhdGEgPSBwcml2LT5wZGF0YTsK PiArCWVudW0gbXQ2MzcwX2xlZF9maWVsZCBzZWxfZmllbGQ7Cj4gKwl1bnNpZ25lZCBpbnQgZGl2 aXNvciwgcmF0aW87Cj4gKwo+ICsJZGl2aXNvciA9IHBkYXRhLT5wd21fZHV0eTsKPiArCXJhdGlv ID0gdG9uICogZGl2aXNvciAvICh0b24gKyB0b2ZmKTsKPiArCj4gKwlzd2l0Y2ggKGxlZF9ubykg ewo+ICsJY2FzZSBNVDYzNzBfTEVEX0lTTksxOgo+ICsJCXNlbF9maWVsZCA9IEZfTEVEMV9EVVRZ Owo+ICsJCWJyZWFrOwo+ICsJY2FzZSBNVDYzNzBfTEVEX0lTTksyOgo+ICsJCXNlbF9maWVsZCA9 IEZfTEVEMl9EVVRZOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBNVDYzNzBfTEVEX0lTTkszOgo+ICsJ CXNlbF9maWVsZCA9IEZfTEVEM19EVVRZOwo+ICsJCWJyZWFrOwo+ICsJZGVmYXVsdDoKPiArCQlz ZWxfZmllbGQgPSBGX0xFRDRfRFVUWTsKPiArCQlicmVhazsKPiArCX0KPiArCj4gKwlyZXR1cm4g cmVnbWFwX2ZpZWxkX3dyaXRlKHByaXYtPmZpZWxkc1tzZWxfZmllbGRdLCByYXRpbyk7Cj4gK30K PiArCj4gK3N0YXRpYyBpbnQgbXQ2MzcwX3NldF9sZWRfZnJlcShzdHJ1Y3QgbXQ2MzcwX3ByaXYg KnByaXYsIHVuc2lnbmVkIGludCBsZWRfbm8sCj4gKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgdG9u LCB1bnNpZ25lZCBpbnQgdG9mZikKPiArewo+ICsJY29uc3Qgc3RydWN0IG10NjM3MF9wZGF0YSAq cGRhdGEgPSBwcml2LT5wZGF0YTsKPiArCWVudW0gbXQ2MzcwX2xlZF9maWVsZCBzZWxfZmllbGQ7 Cj4gKwl1bnNpZ25lZCBpbnQgdGZyZXFfbGVuID0gcGRhdGEtPnRmcmVxX2xlbjsKPiArCXVuc2ln bmVkIGludCB0c3VtLCBzZWw7Cj4gKwo+ICsJdHN1bSA9IHRvbiArIHRvZmY7Cj4gKwo+ICsJaWYg KHRzdW0gPiBwZGF0YS0+dGZyZXFbMF0gfHwgdHN1bSA8IHBkYXRhLT50ZnJlcVt0ZnJlcV9sZW4g LSAxXSkKPiArCQlyZXR1cm4gLUVPUE5PVFNVUFA7Cj4gKwo+ICsJc2VsID0gZmluZF9jbG9zZXN0 X2Rlc2NlbmRpbmcodHN1bSwgcGRhdGEtPnRmcmVxLCB0ZnJlcV9sZW4pOwo+ICsKPiArCXN3aXRj aCAobGVkX25vKSB7Cj4gKwljYXNlIE1UNjM3MF9MRURfSVNOSzE6Cj4gKwkJc2VsX2ZpZWxkID0g Rl9MRUQxX0ZSRVE7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIE1UNjM3MF9MRURfSVNOSzI6Cj4gKwkJ c2VsX2ZpZWxkID0gRl9MRUQyX0ZSRVE7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIE1UNjM3MF9MRURf SVNOSzM6Cj4gKwkJc2VsX2ZpZWxkID0gRl9MRUQzX0ZSRVE7Cj4gKwkJYnJlYWs7Cj4gKwlkZWZh dWx0Ogo+ICsJCXNlbF9maWVsZCA9IEZfTEVENF9GUkVROwo+ICsJCWJyZWFrOwo+ICsJfQo+ICsK PiArCXJldHVybiByZWdtYXBfZmllbGRfd3JpdGUocHJpdi0+ZmllbGRzW3NlbF9maWVsZF0sIHNl bCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIG10NjM3MF9nZXRfYnJlYXRoX3JlZ19iYXNlKHN0 cnVjdCBtdDYzNzBfcHJpdiAqcHJpdiwKPiArCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgbGVkX25v LCB1bnNpZ25lZCBpbnQgKmJhc2UpCj4gK3sKPiArCWNvbnN0IHN0cnVjdCBtdDYzNzBfcGRhdGEg KnBkYXRhID0gcHJpdi0+cGRhdGE7Cj4gKwo+ICsJaWYgKHBkYXRhLT5yZWdfcmdiX2NocmluZF90 ciA8IDApIHsKPiArCQkqYmFzZSA9IHBkYXRhLT5yZWdfcmdiMV90ciArIGxlZF9ubyAqIDM7Cj4g KwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCXN3aXRjaCAobGVkX25vKSB7Cj4gKwljYXNlIE1UNjM3 MF9MRURfSVNOSzE6Cj4gKwljYXNlIE1UNjM3MF9MRURfSVNOSzI6Cj4gKwljYXNlIE1UNjM3MF9M RURfSVNOSzM6Cj4gKwkJKmJhc2UgPSBwZGF0YS0+cmVnX3JnYjFfdHIgKyBsZWRfbm8gKiAzOwo+ ICsJCWJyZWFrOwo+ICsJZGVmYXVsdDoKPiArCQkqYmFzZSA9IHBkYXRhLT5yZWdfcmdiX2Nocmlu ZF90cjsKPiArCQlicmVhazsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIGludCBtdDYzNzBfZ2Vu X2JyZWF0aF9wYXR0ZXJuKHN0cnVjdCBtdDYzNzBfcHJpdiAqcHJpdiwKPiArCQkJCSAgICAgc3Ry dWN0IGxlZF9wYXR0ZXJuICpwYXR0ZXJuLCB1MzIgbGVuLAo+ICsJCQkJICAgICB1OCAqcGF0dGVy bl92YWwsIHUzMiB2YWxfbGVuKQo+ICt7Cj4gKwllbnVtIG10NjM3MF9sZWRfcmFuZ2VzIHNlbF9y YW5nZTsKPiArCXN0cnVjdCBsZWRfcGF0dGVybiAqY3VycjsKPiArCXVuc2lnbmVkIGludCBzZWw7 Cj4gKwl1MzIgdmFsID0gMDsKPiArCWludCBpOwo+ICsKPiArCWlmIChsZW4gPCBQX01BWF9QQVRU RVJOUyAmJiB2YWxfbGVuIDwgUF9NQVhfUEFUVEVSTlMgLyAyKQo+ICsJCXJldHVybiAtRUlOVkFM Owo+ICsKPiArCS8qCj4gKwkgKiBQYXR0ZXJuIGxpc3QKPiArCSAqIHRyMToJIGJ5dGUgMCwgYidb NzogNF0KPiArCSAqIHRyMjoJIGJ5dGUgMCwgYidbMzogMF0KPiArCSAqIHRmMToJIGJ5dGUgMSwg YidbNzogNF0KPiArCSAqIHRmMjoJIGJ5dGUgMSwgYidbMzogMF0KPiArCSAqIHRvbjoJIGJ5dGUg MiwgYidbNzogNF0KPiArCSAqIHRvZmY6IGJ5dGUgMiwgYidbMzogMF0KPiArCSAqLwo+ICsJZm9y IChpID0gMDsgaSA8IFBfTUFYX1BBVFRFUk5TOyBpKyspIHsKPiArCQljdXJyID0gcGF0dGVybiAr IGk7Cj4gKwo+ICsJCXNlbF9yYW5nZSA9IGkgPT0gUF9MRURfVE9GRiA/IFJfTEVEX1RPRkYgOiBS X0xFRF9UUkZPTjsKPiArCj4gKwkJbGluZWFyX3JhbmdlX2dldF9zZWxlY3Rvcl93aXRoaW4ocHJp di0+cmFuZ2VzICsgc2VsX3JhbmdlLAo+ICsJCQkJCQkgY3Vyci0+ZGVsdGFfdCwgJnNlbCk7Cj4g Kwo+ICsJCWlmIChpICUgMikgewo+ICsJCQl2YWwgfD0gc2VsOwo+ICsJCX0gZWxzZSB7Cj4gKwkJ CXZhbCA8PD0gODsKPiArCQkJdmFsIHw9IHNlbCA8PCA0Owo+ICsJCX0KPiArCX0KPiArCj4gKwlw dXRfdW5hbGlnbmVkX2JlMjQodmFsLCBwYXR0ZXJuX3ZhbCk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4g K30KPiArCj4gK3N0YXRpYyBpbnQgbXQ2MzcwX3NldF9sZWRfbW9kZShzdHJ1Y3QgbXQ2MzcwX3By aXYgKnByaXYsIHVuc2lnbmVkIGludCBsZWRfbm8sCj4gKwkJCSAgICAgICBlbnVtIG10NjM3MF9s ZWRfbW9kZSBtb2RlKQo+ICt7Cj4gKwllbnVtIG10NjM3MF9sZWRfZmllbGQgc2VsX2ZpZWxkOwo+ ICsKPiArCXN3aXRjaCAobGVkX25vKSB7Cj4gKwljYXNlIE1UNjM3MF9MRURfSVNOSzE6Cj4gKwkJ c2VsX2ZpZWxkID0gRl9MRUQxX01PREU7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIE1UNjM3MF9MRURf SVNOSzI6Cj4gKwkJc2VsX2ZpZWxkID0gRl9MRUQyX01PREU7Cj4gKwkJYnJlYWs7Cj4gKwljYXNl IE1UNjM3MF9MRURfSVNOSzM6Cj4gKwkJc2VsX2ZpZWxkID0gRl9MRUQzX01PREU7Cj4gKwkJYnJl YWs7Cj4gKwlkZWZhdWx0Ogo+ICsJCXNlbF9maWVsZCA9IEZfTEVENF9NT0RFOwo+ICsJCWJyZWFr Owo+ICsJfQo+ICsKPiArCXJldHVybiByZWdtYXBfZmllbGRfd3JpdGUocHJpdi0+ZmllbGRzW3Nl bF9maWVsZF0sIG1vZGUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IG10NjM3MF9tY19icmlnaHRu ZXNzX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsY2RldiwKPiArCQkJCSAgICBlbnVtIGxlZF9i cmlnaHRuZXNzIGxldmVsKQo+ICt7Cj4gKwlzdHJ1Y3QgbGVkX2NsYXNzZGV2X21jICptY2NkZXYg PSBsY2Rldl90b19tY2NkZXYobGNkZXYpOwo+ICsJc3RydWN0IG10NjM3MF9sZWQgKmxlZCA9IGNv bnRhaW5lcl9vZihtY2NkZXYsIHN0cnVjdCBtdDYzNzBfbGVkLCBtYyk7Cj4gKwlzdHJ1Y3QgbXQ2 MzcwX3ByaXYgKnByaXYgPSBsZWQtPnByaXY7Cj4gKwlzdHJ1Y3QgbWNfc3VibGVkICpzdWJsZWQ7 Cj4gKwl1bnNpZ25lZCBpbnQgZW5hYmxlLCBkaXNhYmxlOwo+ICsJaW50IGksIHJldDsKPiArCj4g KwltdXRleF9sb2NrKCZwcml2LT5sb2NrKTsKPiArCj4gKwlsZWRfbWNfY2FsY19jb2xvcl9jb21w b25lbnRzKG1jY2RldiwgbGV2ZWwpOwo+ICsKPiArCXJldCA9IHJlZ21hcF9maWVsZF9yZWFkKHBy aXYtPmZpZWxkc1tGX1JHQl9FTl0sICZlbmFibGUpOwo+ICsJaWYgKHJldCkKPiArCQlnb3RvIG91 dF91bmxvY2s7Cj4gKwo+ICsJZGlzYWJsZSA9IGVuYWJsZTsKPiArCj4gKwlmb3IgKGkgPSAwOyBp IDwgbWNjZGV2LT5udW1fY29sb3JzOyBpKyspIHsKPiArCQl1MzIgYnJpZ2h0bmVzczsKPiArCj4g KwkJc3VibGVkID0gbWNjZGV2LT5zdWJsZWRfaW5mbyArIGk7Cj4gKwkJYnJpZ2h0bmVzcyA9IG1p bihzdWJsZWQtPmJyaWdodG5lc3MsIGxjZGV2LT5tYXhfYnJpZ2h0bmVzcyk7Cj4gKwkJZGlzYWJs ZSAmPSB+TVQ2MzcwX0NIRU5fQklUKHN1YmxlZC0+Y2hhbm5lbCk7Cj4gKwo+ICsJCWlmIChsZXZl bCA9PSAwKSB7Cj4gKwkJCWVuYWJsZSAmPSB+TVQ2MzcwX0NIRU5fQklUKHN1YmxlZC0+Y2hhbm5l bCk7Cj4gKwo+ICsJCQlyZXQgPSBtdDYzNzBfc2V0X2xlZF9tb2RlKHByaXYsIHN1YmxlZC0+Y2hh bm5lbCwKPiArCQkJCQkJICBNVDYzNzBfTEVEX1JFR19NT0RFKTsKPiArCQkJaWYgKHJldCkKPiAr CQkJCWdvdG8gb3V0X3VubG9jazsKPiArCj4gKwkJCWNvbnRpbnVlOwo+ICsJCX0KPiArCj4gKwkJ aWYgKGJyaWdodG5lc3MgPT0gMCkgewo+ICsJCQllbmFibGUgJj0gfk1UNjM3MF9DSEVOX0JJVChz dWJsZWQtPmNoYW5uZWwpOwo+ICsJCQljb250aW51ZTsKPiArCQl9Cj4gKwo+ICsJCWVuYWJsZSB8 PSBNVDYzNzBfQ0hFTl9CSVQoc3VibGVkLT5jaGFubmVsKTsKPiArCj4gKwkJcmV0ID0gbXQ2Mzcw X3NldF9sZWRfYnJpZ2h0bmVzcyhwcml2LCBzdWJsZWQtPmNoYW5uZWwsCj4gKwkJCQkJCWJyaWdo dG5lc3MpOwo+ICsJCWlmIChyZXQpCj4gKwkJCWdvdG8gb3V0X3VubG9jazsKPiArCX0KPiArCj4g KwlyZXQgPSByZWdtYXBfZmllbGRfd3JpdGUocHJpdi0+ZmllbGRzW0ZfUkdCX0VOXSwgZGlzYWJs ZSk7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gb3V0X3VubG9jazsKPiArCj4gKwlyZXQgPSByZWdt YXBfZmllbGRfd3JpdGUocHJpdi0+ZmllbGRzW0ZfUkdCX0VOXSwgZW5hYmxlKTsKPiArCj4gK291 dF91bmxvY2s6Cj4gKwltdXRleF91bmxvY2soJnByaXYtPmxvY2spOwo+ICsKPiArCXJldHVybiBy ZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgbXQ2MzcwX21jX2JsaW5rX3NldChzdHJ1Y3QgbGVk X2NsYXNzZGV2ICpsY2RldiwKPiArCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29uLAo+ ICsJCQkgICAgICAgdW5zaWduZWQgbG9uZyAqZGVsYXlfb2ZmKQo+ICt7Cj4gKwlzdHJ1Y3QgbGVk X2NsYXNzZGV2X21jICptY2NkZXYgPSBsY2Rldl90b19tY2NkZXYobGNkZXYpOwo+ICsJc3RydWN0 IG10NjM3MF9sZWQgKmxlZCA9IGNvbnRhaW5lcl9vZihtY2NkZXYsIHN0cnVjdCBtdDYzNzBfbGVk LCBtYyk7Cj4gKwlzdHJ1Y3QgbXQ2MzcwX3ByaXYgKnByaXYgPSBsZWQtPnByaXY7Cj4gKwlzdHJ1 Y3QgbWNfc3VibGVkICpzdWJsZWQ7Cj4gKwl1bnNpZ25lZCBpbnQgZW5hYmxlLCBkaXNhYmxlOwo+ ICsJaW50IGksIHJldDsKPiArCj4gKwltdXRleF9sb2NrKCZwcml2LT5sb2NrKTsKPiArCj4gKwlp ZiAoISpkZWxheV9vbiAmJiAhKmRlbGF5X29mZikKPiArCQkqZGVsYXlfb24gPSAqZGVsYXlfb2Zm ID0gNTAwOwo+ICsKPiArCXJldCA9IHJlZ21hcF9maWVsZF9yZWFkKHByaXYtPmZpZWxkc1tGX1JH Ql9FTl0sICZlbmFibGUpOwo+ICsJaWYgKHJldCkKPiArCQlnb3RvIG91dF91bmxvY2s7Cj4gKwo+ ICsJZGlzYWJsZSA9IGVuYWJsZTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgbWNjZGV2LT5udW1f Y29sb3JzOyBpKyspIHsKPiArCQlzdWJsZWQgPSBtY2NkZXYtPnN1YmxlZF9pbmZvICsgaTsKPiAr Cj4gKwkJZGlzYWJsZSAmPSB+TVQ2MzcwX0NIRU5fQklUKHN1YmxlZC0+Y2hhbm5lbCk7Cj4gKwo+ ICsJCXJldCA9IG10NjM3MF9zZXRfbGVkX2R1dHkocHJpdiwgc3VibGVkLT5jaGFubmVsLCAqZGVs YXlfb24sCj4gKwkJCQkJICAqZGVsYXlfb2ZmKTsKPiArCQlpZiAocmV0KQo+ICsJCQlnb3RvIG91 dF91bmxvY2s7Cj4gKwo+ICsJCXJldCA9IG10NjM3MF9zZXRfbGVkX2ZyZXEocHJpdiwgc3VibGVk LT5jaGFubmVsLCAqZGVsYXlfb24sCj4gKwkJCQkJICAqZGVsYXlfb2ZmKTsKPiArCQlpZiAocmV0 KQo+ICsJCQlnb3RvIG91dF91bmxvY2s7Cj4gKwo+ICsJCXJldCA9IG10NjM3MF9zZXRfbGVkX21v ZGUocHJpdiwgc3VibGVkLT5jaGFubmVsLAo+ICsJCQkJCSAgTVQ2MzcwX0xFRF9QV01fTU9ERSk7 Cj4gKwkJaWYgKHJldCkKPiArCQkJZ290byBvdXRfdW5sb2NrOwo+ICsJfQo+ICsKPiArCS8qIFRv Z2dsZSB0byBtYWtlIHBhdHRlcm4gdGltaW5nIHRoZSBzYW1lICovCj4gKwlyZXQgPSByZWdtYXBf ZmllbGRfd3JpdGUocHJpdi0+ZmllbGRzW0ZfUkdCX0VOXSwgZGlzYWJsZSk7Cj4gKwlpZiAocmV0 KQo+ICsJCWdvdG8gb3V0X3VubG9jazsKPiArCj4gKwlyZXQgPSByZWdtYXBfZmllbGRfd3JpdGUo cHJpdi0+ZmllbGRzW0ZfUkdCX0VOXSwgZW5hYmxlKTsKPiArCj4gK291dF91bmxvY2s6Cj4gKwlt dXRleF91bmxvY2soJnByaXYtPmxvY2spOwo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4g K3N0YXRpYyBpbnQgbXQ2MzcwX21jX3BhdHRlcm5fc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxj ZGV2LAo+ICsJCQlzdHJ1Y3QgbGVkX3BhdHRlcm4gKnBhdHRlcm4sIHUzMiBsZW4sIGludCByZXBl YXQpCj4gK3sKPiArCXN0cnVjdCBsZWRfY2xhc3NkZXZfbWMgKm1jY2RldiA9IGxjZGV2X3RvX21j Y2RldihsY2Rldik7Cj4gKwlzdHJ1Y3QgbXQ2MzcwX2xlZCAqbGVkID0gY29udGFpbmVyX29mKG1j Y2Rldiwgc3RydWN0IG10NjM3MF9sZWQsIG1jKTsKPiArCXN0cnVjdCBtdDYzNzBfcHJpdiAqcHJp diA9IGxlZC0+cHJpdjsKPiArCXN0cnVjdCBtY19zdWJsZWQgKnN1YmxlZDsKPiArCXVuc2lnbmVk IGludCByZWdfYmFzZSwgZW5hYmxlLCBkaXNhYmxlOwo+ICsJdTggcGFyYW1zW1BfTUFYX1BBVFRF Uk5TIC8gMl07Cj4gKwlpbnQgaSwgcmV0Owo+ICsKPiArCW11dGV4X2xvY2soJnByaXYtPmxvY2sp Owo+ICsKPiArCXJldCA9IG10NjM3MF9nZW5fYnJlYXRoX3BhdHRlcm4ocHJpdiwgcGF0dGVybiwg bGVuLCBwYXJhbXMsCj4gKwkJCQkJc2l6ZW9mKHBhcmFtcykpOwo+ICsJaWYgKHJldCkKPiArCQln b3RvIG91dF91bmxvY2s7Cj4gKwo+ICsJcmV0ID0gcmVnbWFwX2ZpZWxkX3JlYWQocHJpdi0+Zmll bGRzW0ZfUkdCX0VOXSwgJmVuYWJsZSk7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gb3V0X3VubG9j azsKPiArCj4gKwlkaXNhYmxlID0gZW5hYmxlOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBtY2Nk ZXYtPm51bV9jb2xvcnM7IGkrKykgewo+ICsJCXN1YmxlZCA9IG1jY2Rldi0+c3VibGVkX2luZm8g KyBpOwo+ICsKPiArCQltdDYzNzBfZ2V0X2JyZWF0aF9yZWdfYmFzZShwcml2LCBzdWJsZWQtPmNo YW5uZWwsICZyZWdfYmFzZSk7Cj4gKwkJZGlzYWJsZSAmPSB+TVQ2MzcwX0NIRU5fQklUKHN1Ymxl ZC0+Y2hhbm5lbCk7Cj4gKwo+ICsJCXJldCA9IHJlZ21hcF9yYXdfd3JpdGUocHJpdi0+cmVnbWFw LCByZWdfYmFzZSwgcGFyYW1zLAo+ICsJCQkJICAgICAgIHNpemVvZihwYXJhbXMpKTsKPiArCQlp ZiAocmV0KQo+ICsJCQlnb3RvIG91dF91bmxvY2s7Cj4gKwo+ICsJCXJldCA9IG10NjM3MF9zZXRf bGVkX21vZGUocHJpdiwgc3VibGVkLT5jaGFubmVsLAo+ICsJCQkJCSAgTVQ2MzcwX0xFRF9CUkVB VEhfTU9ERSk7Cj4gKwkJaWYgKHJldCkKPiArCQkJZ290byBvdXRfdW5sb2NrOwo+ICsJfQo+ICsK PiArCS8qIFRvZ2dsZSB0byBtYWtlIHBhdHRlcm4gdGltaW5nIGJlIHRoZSBzYW1lICovCj4gKwly ZXQgPSByZWdtYXBfZmllbGRfd3JpdGUocHJpdi0+ZmllbGRzW0ZfUkdCX0VOXSwgZGlzYWJsZSk7 Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gb3V0X3VubG9jazsKPiArCj4gKwlyZXQgPSByZWdtYXBf ZmllbGRfd3JpdGUocHJpdi0+ZmllbGRzW0ZfUkdCX0VOXSwgZW5hYmxlKTsKPiArCj4gK291dF91 bmxvY2s6Cj4gKwltdXRleF91bmxvY2soJnByaXYtPmxvY2spOwo+ICsKPiArCXJldHVybiByZXQ7 Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgaW50IG10NjM3MF9tY19wYXR0ZXJuX2NsZWFyKHN0 cnVjdCBsZWRfY2xhc3NkZXYgKmxjZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgbGVkX2NsYXNzZGV2X21j ICptY2NkZXYgPSBsY2Rldl90b19tY2NkZXYobGNkZXYpOwo+ICsJc3RydWN0IG10NjM3MF9sZWQg KmxlZCA9IGNvbnRhaW5lcl9vZihtY2NkZXYsIHN0cnVjdCBtdDYzNzBfbGVkLCBtYyk7Cj4gKwlz dHJ1Y3QgbXQ2MzcwX3ByaXYgKnByaXYgPSBsZWQtPnByaXY7Cj4gKwlzdHJ1Y3QgbWNfc3VibGVk ICpzdWJsZWQ7Cj4gKwlpbnQgaSwgcmV0Owo+ICsKPiArCW11dGV4X2xvY2soJmxlZC0+cHJpdi0+ bG9jayk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IG1jY2Rldi0+bnVtX2NvbG9yczsgaSsrKSB7 Cj4gKwkJc3VibGVkID0gbWNjZGV2LT5zdWJsZWRfaW5mbyArIGk7Cj4gKwo+ICsJCXJldCA9IG10 NjM3MF9zZXRfbGVkX21vZGUocHJpdiwgc3VibGVkLT5jaGFubmVsLAo+ICsJCQkJCSAgTVQ2Mzcw X0xFRF9SRUdfTU9ERSk7Cj4gKwkJaWYgKHJldCkKPiArCQkJYnJlYWs7Cj4gKwl9Cj4gKwo+ICsJ bXV0ZXhfdW5sb2NrKCZsZWQtPnByaXYtPmxvY2spOwo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30K PiArCj4gK3N0YXRpYyBpbnQgbXQ2MzcwX2lzbmtfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGxlZF9j bGFzc2RldiAqbGNkZXYsCj4gKwkJCQkgICAgICBlbnVtIGxlZF9icmlnaHRuZXNzIGxldmVsKQo+ ICt7Cj4gKwlzdHJ1Y3QgbXQ2MzcwX2xlZCAqbGVkID0gY29udGFpbmVyX29mKGxjZGV2LCBzdHJ1 Y3QgbXQ2MzcwX2xlZCwgaXNpbmspOwo+ICsJc3RydWN0IG10NjM3MF9wcml2ICpwcml2ID0gbGVk LT5wcml2Owo+ICsJdW5zaWduZWQgaW50IGVuYWJsZTsKPiArCWludCByZXQ7Cj4gKwo+ICsJbXV0 ZXhfbG9jaygmcHJpdi0+bG9jayk7Cj4gKwo+ICsJcmV0ID0gcmVnbWFwX2ZpZWxkX3JlYWQocHJp di0+ZmllbGRzW0ZfUkdCX0VOXSwgJmVuYWJsZSk7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gb3V0 X3VubG9jazsKPiArCj4gKwlpZiAobGV2ZWwgPT0gMCkgewo+ICsJCWVuYWJsZSAmPSB+TVQ2Mzcw X0NIRU5fQklUKGxlZC0+aW5kZXgpOwo+ICsKPiArCQlyZXQgPSBtdDYzNzBfc2V0X2xlZF9tb2Rl KHByaXYsIGxlZC0+aW5kZXgsCj4gKwkJCQkJICBNVDYzNzBfTEVEX1JFR19NT0RFKTsKPiArCQlp ZiAocmV0KQo+ICsJCQlnb3RvIG91dF91bmxvY2s7Cj4gKwl9IGVsc2Ugewo+ICsJCWVuYWJsZSB8 PSBNVDYzNzBfQ0hFTl9CSVQobGVkLT5pbmRleCk7Cj4gKwo+ICsJCXJldCA9IG10NjM3MF9zZXRf bGVkX2JyaWdodG5lc3MocHJpdiwgbGVkLT5pbmRleCwgbGV2ZWwpOwo+ICsJCWlmIChyZXQpCj4g KwkJCWdvdG8gb3V0X3VubG9jazsKPiArCX0KPiArCj4gKwlyZXQgPSByZWdtYXBfZmllbGRfd3Jp dGUocHJpdi0+ZmllbGRzW0ZfUkdCX0VOXSwgZW5hYmxlKTsKPiArCj4gK291dF91bmxvY2s6Cj4g KwltdXRleF91bmxvY2soJnByaXYtPmxvY2spOwo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbnQgbXQ2MzcwX2lzbmtfYmxpbmtfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYg KmxjZGV2LAo+ICsJCQkJIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29uLAo+ICsJCQkJIHVuc2lnbmVk IGxvbmcgKmRlbGF5X29mZikKPiArewo+ICsJc3RydWN0IG10NjM3MF9sZWQgKmxlZCA9IGNvbnRh aW5lcl9vZihsY2Rldiwgc3RydWN0IG10NjM3MF9sZWQsIGlzaW5rKTsKPiArCXN0cnVjdCBtdDYz NzBfcHJpdiAqcHJpdiA9IGxlZC0+cHJpdjsKPiArCWludCByZXQ7Cj4gKwo+ICsJbXV0ZXhfbG9j aygmcHJpdi0+bG9jayk7Cj4gKwo+ICsJaWYgKCEqZGVsYXlfb24gJiYgISpkZWxheV9vZmYpCj4g KwkJKmRlbGF5X29uID0gKmRlbGF5X29mZiA9IDUwMDsKPiArCj4gKwlyZXQgPSBtdDYzNzBfc2V0 X2xlZF9kdXR5KHByaXYsIGxlZC0+aW5kZXgsICpkZWxheV9vbiwgKmRlbGF5X29mZik7Cj4gKwlp ZiAocmV0KQo+ICsJCWdvdG8gb3V0X3VubG9jazsKPiArCj4gKwlyZXQgPSBtdDYzNzBfc2V0X2xl ZF9mcmVxKHByaXYsIGxlZC0+aW5kZXgsICpkZWxheV9vbiwgKmRlbGF5X29mZik7Cj4gKwlpZiAo cmV0KQo+ICsJCWdvdG8gb3V0X3VubG9jazsKPiArCj4gKwlyZXQgPSBtdDYzNzBfc2V0X2xlZF9t b2RlKHByaXYsIGxlZC0+aW5kZXgsIE1UNjM3MF9MRURfUFdNX01PREUpOwo+ICsKPiArb3V0X3Vu bG9jazoKPiArCW11dGV4X3VubG9jaygmcHJpdi0+bG9jayk7Cj4gKwo+ICsJcmV0dXJuIHJldDsK PiArfQo+ICsKPiArc3RhdGljIGludCBtdDYzNzBfaXNua19wYXR0ZXJuX3NldChzdHJ1Y3QgbGVk X2NsYXNzZGV2ICpsY2RldiwKPiArCQkJCSAgIHN0cnVjdCBsZWRfcGF0dGVybiAqcGF0dGVybiwg dTMyIGxlbiwKPiArCQkJCSAgIGludCByZXBlYXQpCj4gK3sKPiArCXN0cnVjdCBtdDYzNzBfbGVk ICpsZWQgPSBjb250YWluZXJfb2YobGNkZXYsIHN0cnVjdCBtdDYzNzBfbGVkLCBpc2luayk7Cj4g KwlzdHJ1Y3QgbXQ2MzcwX3ByaXYgKnByaXYgPSBsZWQtPnByaXY7Cj4gKwl1bnNpZ25lZCBpbnQg cmVnX2Jhc2U7Cj4gKwl1OCBwYXJhbXNbUF9NQVhfUEFUVEVSTlMgLyAyXTsKPiArCWludCByZXQ7 Cj4gKwo+ICsJbXV0ZXhfbG9jaygmcHJpdi0+bG9jayk7Cj4gKwo+ICsJcmV0ID0gbXQ2MzcwX2dl bl9icmVhdGhfcGF0dGVybihwcml2LCBwYXR0ZXJuLCBsZW4sIHBhcmFtcywKPiArCQkJCQlzaXpl b2YocGFyYW1zKSk7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gb3V0X3VubG9jazsKPiArCj4gKwlt dDYzNzBfZ2V0X2JyZWF0aF9yZWdfYmFzZShwcml2LCBsZWQtPmluZGV4LCAmcmVnX2Jhc2UpOwo+ ICsKPiArCXJldCA9IHJlZ21hcF9yYXdfd3JpdGUocHJpdi0+cmVnbWFwLCByZWdfYmFzZSwgcGFy YW1zLCBzaXplb2YocGFyYW1zKSk7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gb3V0X3VubG9jazsK PiArCj4gKwlyZXQgPSBtdDYzNzBfc2V0X2xlZF9tb2RlKHByaXYsIGxlZC0+aW5kZXgsIE1UNjM3 MF9MRURfQlJFQVRIX01PREUpOwo+ICsKPiArb3V0X3VubG9jazoKPiArCW11dGV4X3VubG9jaygm cHJpdi0+bG9jayk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGlubGlu ZSBpbnQgbXQ2MzcwX2lzbmtfcGF0dGVybl9jbGVhcihzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsY2Rl dikKPiArewo+ICsJc3RydWN0IG10NjM3MF9sZWQgKmxlZCA9IGNvbnRhaW5lcl9vZihsY2Rldiwg c3RydWN0IG10NjM3MF9sZWQsIGlzaW5rKTsKPiArCXN0cnVjdCBtdDYzNzBfcHJpdiAqcHJpdiA9 IGxlZC0+cHJpdjsKPiArCWludCByZXQ7Cj4gKwo+ICsJbXV0ZXhfbG9jaygmbGVkLT5wcml2LT5s b2NrKTsKPiArCXJldCA9IG10NjM3MF9zZXRfbGVkX21vZGUocHJpdiwgbGVkLT5pbmRleCwgTVQ2 MzcwX0xFRF9SRUdfTU9ERSk7Cj4gKwltdXRleF91bmxvY2soJmxlZC0+cHJpdi0+bG9jayk7Cj4g Kwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGludCBtdDYzNzBfaW5pdF9sZWRf cHJvcGVydGllcyhzdHJ1Y3QgZGV2aWNlICpkZXYsCj4gKwkJCQkgICAgICBzdHJ1Y3QgbXQ2Mzcw X2xlZCAqbGVkLAo+ICsJCQkJICAgICAgc3RydWN0IGxlZF9pbml0X2RhdGEgKmluaXRfZGF0YSkK PiArewo+ICsJc3RydWN0IG10NjM3MF9wcml2ICpwcml2ID0gbGVkLT5wcml2Owo+ICsJc3RydWN0 IGxlZF9jbGFzc2RldiAqbGNkZXY7Cj4gKwlzdHJ1Y3QgZndub2RlX2hhbmRsZSAqY2hpbGQ7Cj4g KwllbnVtIG10NjM3MF9sZWRfcmFuZ2VzIHNlbF9yYW5nZTsKPiArCXUzMiBtYXhfdUEsIG1heF9s ZXZlbDsKPiArCWludCByZXQ7Cj4gKwo+ICsJaWYgKGxlZC0+aW5kZXggPT0gTVQ2MzcwX1ZJUlRV QUxfTVVMVElDT0xPUikgewo+ICsJCXN0cnVjdCBtY19zdWJsZWQgKnN1Yl9sZWQ7Cj4gKwkJdTMy IG51bV9jb2xvciA9IDA7Cj4gKwo+ICsJCXN1Yl9sZWQgPSBkZXZtX2tjYWxsb2MoZGV2LCBNQ19D SEFOTkVMX05VTSwgc2l6ZW9mKCpzdWJfbGVkKSwKPiArCQkJCSAgICAgICBHRlBfS0VSTkVMKTsK PiArCQlpZiAoIXN1Yl9sZWQpCj4gKwkJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCQlmd25vZGVf Zm9yX2VhY2hfY2hpbGRfbm9kZShpbml0X2RhdGEtPmZ3bm9kZSwgY2hpbGQpIHsKPiArCQkJdTMy IHJlZywgY29sb3I7Cj4gKwo+ICsJCQlyZXQgPSBmd25vZGVfcHJvcGVydHlfcmVhZF91MzIoY2hp bGQsICJyZWciLCAmcmVnKTsKPiArCQkJaWYgKHJldCB8fCByZWcgPiBNVDYzNzBfTEVEX0lTTksz IHx8Cj4gKwkJCSAgICBwcml2LT5sZWRzX2FjdGl2ZSAmIEJJVChyZWcpKSB7Cj4gKwkJCQlmd25v ZGVfaGFuZGxlX3B1dChjaGlsZCk7Cj4gKwkJCQlyZXR1cm4gLUVJTlZBTDsKPiArCQkJfQo+ICsK PiArCQkJcmV0ID0gZndub2RlX3Byb3BlcnR5X3JlYWRfdTMyKGNoaWxkLCAiY29sb3IiLCAmY29s b3IpOwo+ICsJCQlpZiAocmV0KSB7Cj4gKwkJCQlmd25vZGVfaGFuZGxlX3B1dChjaGlsZCk7Cj4g KwkJCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwgIkxFRCAlZCwgbm8gY29sb3Igc3Bl Y2lmaWVkXG4iLAo+ICsJCQkJCQkgICAgIGxlZC0+aW5kZXgpOwo+ICsJCQl9Cj4gKwo+ICsJCQlw cml2LT5sZWRzX2FjdGl2ZSB8PSBCSVQocmVnKTsKPiArCQkJc3ViX2xlZFtudW1fY29sb3JdLmNv bG9yX2luZGV4ID0gY29sb3I7Cj4gKwkJCXN1Yl9sZWRbbnVtX2NvbG9yXS5jaGFubmVsID0gcmVn Owo+ICsJCQlzdWJfbGVkW251bV9jb2xvcl0uaW50ZW5zaXR5ID0gMDsKPiArCQkJbnVtX2NvbG9y Kys7Cj4gKwkJfQo+ICsKPiArCQlpZiAobnVtX2NvbG9yIDwgMikKPiArCQkJcmV0dXJuIGRldl9l cnJfcHJvYmUoZGV2LCAtRUlOVkFMLAo+ICsJCQkJCSAgICAgIk11bHRpY29sb3IgbXVzdCBpbmNs dWRlIDIgb3IgbW9yZSBMRUQgY2hhbm5lbHNcbiIpOwo+ICsKPiArCQlsZWQtPm1jLm51bV9jb2xv cnMgPSBudW1fY29sb3I7Cj4gKwkJbGVkLT5tYy5zdWJsZWRfaW5mbyA9IHN1Yl9sZWQ7Cj4gKwo+ ICsJCWxjZGV2ID0gJmxlZC0+bWMubGVkX2NkZXY7Cj4gKwkJbGNkZXYtPmJyaWdodG5lc3Nfc2V0 X2Jsb2NraW5nID0gbXQ2MzcwX21jX2JyaWdodG5lc3Nfc2V0Owo+ICsJCWxjZGV2LT5ibGlua19z ZXQgPSBtdDYzNzBfbWNfYmxpbmtfc2V0Owo+ICsJCWxjZGV2LT5wYXR0ZXJuX3NldCA9IG10NjM3 MF9tY19wYXR0ZXJuX3NldDsKPiArCQlsY2Rldi0+cGF0dGVybl9jbGVhciA9IG10NjM3MF9tY19w YXR0ZXJuX2NsZWFyOwo+ICsJfSBlbHNlIHsKPiArCQlsY2RldiA9ICZsZWQtPmlzaW5rOwo+ICsJ CWxjZGV2LT5icmlnaHRuZXNzX3NldF9ibG9ja2luZyA9IG10NjM3MF9pc25rX2JyaWdodG5lc3Nf c2V0Owo+ICsJCWxjZGV2LT5ibGlua19zZXQgPSBtdDYzNzBfaXNua19ibGlua19zZXQ7Cj4gKwkJ bGNkZXYtPnBhdHRlcm5fc2V0ID0gbXQ2MzcwX2lzbmtfcGF0dGVybl9zZXQ7Cj4gKwkJbGNkZXYt PnBhdHRlcm5fY2xlYXIgPSBtdDYzNzBfaXNua19wYXR0ZXJuX2NsZWFyOwo+ICsJfQo+ICsKPiAr CXJldCA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3UzMihpbml0X2RhdGEtPmZ3bm9kZSwgImxlZC1t YXgtbWljcm9hbXAiLAo+ICsJCQkJICAgICAgICZtYXhfdUEpOwo+ICsJaWYgKHJldCkgewo+ICsJ CWRldl93YXJuKGRldiwgIk5vdCBzcGVjaWZpZWQgbGVkLW1heC1taWNyb2FtcCwgY29uZmlnIHRv IHRoZSBtaW5pbXVtXG4iKTsKPiArCQltYXhfdUEgPSAwOwo+ICsJfQo+ICsKPiArCWlmIChsZWQt PmluZGV4ID09IE1UNjM3MF9MRURfSVNOSzQpCj4gKwkJc2VsX3JhbmdlID0gUl9MRUQ0X0NVUlI7 Cj4gKwllbHNlCj4gKwkJc2VsX3JhbmdlID0gUl9MRUQxMjNfQ1VSUjsKPiArCj4gKwlsaW5lYXJf cmFuZ2VfZ2V0X3NlbGVjdG9yX3dpdGhpbihwcml2LT5yYW5nZXMgKyBzZWxfcmFuZ2UsIG1heF91 QSwKPiArCQkJCQkgJm1heF9sZXZlbCk7Cj4gKwo+ICsJbGNkZXYtPm1heF9icmlnaHRuZXNzID0g bWF4X2xldmVsOwo+ICsKPiArCWxlZC0+ZGVmYXVsdF9zdGF0ZSA9IGxlZF9pbml0X2RlZmF1bHRf c3RhdGVfZ2V0KGluaXRfZGF0YS0+Zndub2RlKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsK PiArc3RhdGljIGludCBtdDYzNzBfaXNua19pbml0X2RlZmF1bHRfc3RhdGUoc3RydWN0IG10NjM3 MF9sZWQgKmxlZCkKPiArewo+ICsJc3RydWN0IG10NjM3MF9wcml2ICpwcml2ID0gbGVkLT5wcml2 Owo+ICsJdW5zaWduZWQgaW50IGVuYWJsZSwgbGV2ZWw7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXJl dCA9IG10NjM3MF9nZXRfbGVkX2JyaWdodG5lc3MocHJpdiwgbGVkLT5pbmRleCwgJmxldmVsKTsK PiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlyZXQgPSByZWdtYXBfZmllbGRf cmVhZChwcml2LT5maWVsZHNbRl9SR0JfRU5dLCAmZW5hYmxlKTsKPiArCWlmIChyZXQpCj4gKwkJ cmV0dXJuIHJldDsKPiArCj4gKwlpZiAoIShlbmFibGUgJiBNVDYzNzBfQ0hFTl9CSVQobGVkLT5p bmRleCkpKQo+ICsJCWxldmVsID0gMDsKPiArCj4gKwlzd2l0Y2ggKGxlZC0+ZGVmYXVsdF9zdGF0 ZSkgewo+ICsJY2FzZSBMRURTX0RFRlNUQVRFX09OOgo+ICsJCWxlZC0+aXNpbmsuYnJpZ2h0bmVz cyA9IGxlZC0+aXNpbmsubWF4X2JyaWdodG5lc3M7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIExFRFNf REVGU1RBVEVfS0VFUDoKPiArCQlsZWQtPmlzaW5rLmJyaWdodG5lc3MgPSBtaW4obGV2ZWwsIGxl ZC0+aXNpbmsubWF4X2JyaWdodG5lc3MpOwo+ICsJCWJyZWFrOwo+ICsJZGVmYXVsdDoKPiArCQls ZWQtPmlzaW5rLmJyaWdodG5lc3MgPSAwOwo+ICsJCWJyZWFrOwo+ICsJfQo+ICsKPiArCXJldHVy biBtdDYzNzBfaXNua19icmlnaHRuZXNzX3NldCgmbGVkLT5pc2luaywgbGVkLT5pc2luay5icmln aHRuZXNzKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBtdDYzNzBfbGVkX3JlZ2lzdGVyKHN0cnVj dCBkZXZpY2UgKmRldiwgc3RydWN0IG10NjM3MF9sZWQgKmxlZCwKPiArCQkJICAgICAgIHN0cnVj dCBsZWRfaW5pdF9kYXRhICppbml0X2RhdGEpCj4gK3sKPiArCXN0cnVjdCBtdDYzNzBfcHJpdiAq cHJpdiA9IGxlZC0+cHJpdjsKPiArCWludCByZXQ7Cj4gKwo+ICsJaWYgKGxlZC0+aW5kZXggPT0g TVQ2MzcwX1ZJUlRVQUxfTVVMVElDT0xPUikgewo+ICsJCXJldCA9IG10NjM3MF9tY19icmlnaHRu ZXNzX3NldCgmbGVkLT5tYy5sZWRfY2RldiwgMCk7Cj4gKwkJaWYgKHJldCkKPiArCQkJcmV0dXJu IGRldl9lcnJfcHJvYmUoZGV2LCByZXQsICJDb3VsZG4ndCBzZXQgbXVsdGljb2xvciBicmlnaHRu ZXNzXG4iKTsKPiArCj4gKwkJcmV0ID0gZGV2bV9sZWRfY2xhc3NkZXZfbXVsdGljb2xvcl9yZWdp c3Rlcl9leHQoZGV2LCAmbGVkLT5tYywKPiArCQkJCQkJCQlpbml0X2RhdGEpOwo+ICsJCWlmIChy ZXQpCj4gKwkJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCAiQ291bGRuJ3QgcmVnaXN0 ZXIgbXVsdGljb2xvclxuIik7Cj4gKwl9IGVsc2Ugewo+ICsJCWlmIChsZWQtPmluZGV4ID09IE1U NjM3MF9MRURfSVNOSzQpIHsKPiArCQkJcmV0ID0gcmVnbWFwX2ZpZWxkX3dyaXRlKHByaXYtPmZp ZWxkc1tGX0NIR0lORF9FTl0sIDEpOwo+ICsJCQlpZiAocmV0KQo+ICsJCQkJcmV0dXJuIGRldl9l cnJfcHJvYmUoZGV2LCByZXQsICJGYWlsZWQgdG8gc2V0IENIUklORCB0byBTV1xuIik7Cj4gKwkJ fQo+ICsKPiArCQlyZXQgPSBtdDYzNzBfaXNua19pbml0X2RlZmF1bHRfc3RhdGUobGVkKTsKPiAr CQlpZiAocmV0KQo+ICsJCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwgIkZhaWxlZCB0 byBpbml0ICVkIGlzbmsgc3RhdGVcbiIsCj4gKwkJCQkJICAgICBsZWQtPmluZGV4KTsKPiArCj4g KwkJcmV0ID0gZGV2bV9sZWRfY2xhc3NkZXZfcmVnaXN0ZXJfZXh0KGRldiwgJmxlZC0+aXNpbmss Cj4gKwkJCQkJCSAgICAgaW5pdF9kYXRhKTsKPiArCQlpZiAocmV0KQo+ICsJCQlyZXR1cm4gZGV2 X2Vycl9wcm9iZShkZXYsIHJldCwgIkNvdWxkbid0IHJlZ2lzdGVyIGlzaW5rICVkXG4iLCBsZWQt PmluZGV4KTsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBt dDYzNzBfY2hlY2tfdmVuZG9yX2luZm8oc3RydWN0IG10NjM3MF9wcml2ICpwcml2KQo+ICt7Cj4g Kwl1bnNpZ25lZCBpbnQgZGV2aW5mbywgdmlkOwo+ICsJaW50IHJldDsKPiArCj4gKwlyZXQgPSBy ZWdtYXBfcmVhZChwcml2LT5yZWdtYXAsIE1UNjM3MF9SRUdfREVWX0lORk8sICZkZXZpbmZvKTsK PiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwl2aWQgPSBGSUVMRF9HRVQoTVQ2 MzcwX1ZFTklEX01BU0ssIGRldmluZm8pOwo+ICsJaWYgKHZpZCA9PSAweDkgfHwgdmlkID09IDB4 Yikgewo+ICsJCXByaXYtPnJlZ19maWVsZHMgPSBtdDYzNzJfcmVnX2ZpZWxkczsKPiArCQlwcml2 LT5yYW5nZXMgPSBtdDYzNzJfbGVkX3JhbmdlczsKPiArCQlwcml2LT5wZGF0YSA9ICZtdDYzNzJf cGRhdGE7Cj4gKwl9IGVsc2Ugewo+ICsJCS8qIENvbW1vbiBmb3IgTVQ2MzcwLzcxICovCj4gKwkJ cHJpdi0+cmVnX2ZpZWxkcyA9IGNvbW1vbl9yZWdfZmllbGRzOwo+ICsJCXByaXYtPnJhbmdlcyA9 IGNvbW1vbl9sZWRfcmFuZ2VzOwo+ICsJCXByaXYtPnBkYXRhID0gJmNvbW1vbl9wZGF0YTsKPiAr CX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBtdDYzNzBfbGVkc19w cm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNl ICpkZXYgPSAmcGRldi0+ZGV2Owo+ICsJc3RydWN0IG10NjM3MF9wcml2ICpwcml2Owo+ICsJc3Ry dWN0IGZ3bm9kZV9oYW5kbGUgKmNoaWxkOwo+ICsJc2l6ZV90IGNvdW50Owo+ICsJdW5zaWduZWQg aW50IGkgPSAwOwo+ICsJaW50IHJldDsKPiArCj4gKwljb3VudCA9IGRldmljZV9nZXRfY2hpbGRf bm9kZV9jb3VudChkZXYpOwo+ICsJaWYgKCFjb3VudCB8fCBjb3VudCA+IE1UNjM3MF9NQVhfTEVE UykKPiArCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsCj4gKwkJCQkgICAgICJO byBjaGlsZCBub2RlIG9yIG5vZGUgY291bnQgb3ZlciBtYXggTEVEIG51bWJlciAlenVcbiIsCj4g KwkJCQkgICAgICBjb3VudCk7Cj4gKwo+ICsJcHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHN0cnVj dF9zaXplKHByaXYsIGxlZHMsIGNvdW50KSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIXByaXYpCj4g KwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJcHJpdi0+bGVkc19jb3VudCA9IGNvdW50Owo+ICsJ bXV0ZXhfaW5pdCgmcHJpdi0+bG9jayk7Cj4gKwo+ICsJcHJpdi0+cmVnbWFwID0gZGV2X2dldF9y ZWdtYXAoZGV2LT5wYXJlbnQsIE5VTEwpOwo+ICsJaWYgKCFwcml2LT5yZWdtYXApCj4gKwkJcmV0 dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRU5PREVWLCAiRmFpbGVkIHRvIGdldCBwYXJlbnQgcmVn bWFwXG4iKTsKPiArCj4gKwlyZXQgPSBtdDYzNzBfY2hlY2tfdmVuZG9yX2luZm8ocHJpdik7Cj4g KwlpZiAocmV0KQo+ICsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCAiRmFpbGVkIHRv IGNoZWNrIHZlbmRvciBpbmZvXG4iKTsKPiArCj4gKwlyZXQgPSBkZXZtX3JlZ21hcF9maWVsZF9i dWxrX2FsbG9jKGRldiwgcHJpdi0+cmVnbWFwLCBwcml2LT5maWVsZHMsCj4gKwkJCQkJICAgcHJp di0+cmVnX2ZpZWxkcywgRl9NQVhfRklFTERTKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIGRl dl9lcnJfcHJvYmUoZGV2LCByZXQsICJGYWlsZWQgdG8gYWxsb2NhdGUgcmVnbWFwIGZpZWxkXG4i KTsKPiArCj4gKwlkZXZpY2VfZm9yX2VhY2hfY2hpbGRfbm9kZShkZXYsIGNoaWxkKSB7Cj4gKwkJ c3RydWN0IG10NjM3MF9sZWQgKmxlZCA9IHByaXYtPmxlZHMgKyBpKys7Cj4gKwkJc3RydWN0IGxl ZF9pbml0X2RhdGEgaW5pdF9kYXRhID0geyAuZndub2RlID0gY2hpbGQgfTsKPiArCQl1MzIgcmVn LCBjb2xvcjsKPiArCj4gKwkJcmV0ID0gZndub2RlX3Byb3BlcnR5X3JlYWRfdTMyKGNoaWxkLCAi cmVnIiwgJnJlZyk7Cj4gKwkJaWYgKHJldCkgewo+ICsJCQlmd25vZGVfaGFuZGxlX3B1dChjaGls ZCk7Cj4gKwkJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCAiRmFpbGVkIHRvIHBhcnNl IHJlZyBwcm9wZXJ0eVxuIik7Cj4gKwkJfQo+ICsKPiArCQlpZiAocmVnID49IE1UNjM3MF9NQVhf TEVEUykgewo+ICsJCQlmd25vZGVfaGFuZGxlX3B1dChjaGlsZCk7Cj4gKwkJCXJldHVybiBkZXZf ZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwgIkVycm9yIHJlZyBwcm9wZXJ0eSBudW1iZXJcbiIpOwo+ ICsJCX0KPiArCj4gKwkJcmV0ID0gZndub2RlX3Byb3BlcnR5X3JlYWRfdTMyKGNoaWxkLCAiY29s b3IiLCAmY29sb3IpOwo+ICsJCWlmIChyZXQpIHsKPiArCQkJZndub2RlX2hhbmRsZV9wdXQoY2hp bGQpOwo+ICsJCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwgIkZhaWxlZCB0byBwYXJz ZSBjb2xvciBwcm9wZXJ0eVxuIik7Cj4gKwkJfQo+ICsKPiArCQlpZiAoY29sb3IgPT0gTEVEX0NP TE9SX0lEX1JHQiB8fCBjb2xvciA9PSBMRURfQ09MT1JfSURfTVVMVEkpCj4gKwkJCXJlZyA9IE1U NjM3MF9WSVJUVUFMX01VTFRJQ09MT1I7Cj4gKwo+ICsJCWlmIChwcml2LT5sZWRzX2FjdGl2ZSAm IEJJVChyZWcpKSB7Cj4gKwkJCWZ3bm9kZV9oYW5kbGVfcHV0KGNoaWxkKTsKPiArCQkJcmV0dXJu IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLCAiRHVwbGljYXRlIHJlZyBwcm9wZXJ0eVxuIik7 Cj4gKwkJfQo+ICsKPiArCQlwcml2LT5sZWRzX2FjdGl2ZSB8PSBCSVQocmVnKTsKPiArCj4gKwkJ bGVkLT5pbmRleCA9IHJlZzsKPiArCQlsZWQtPnByaXYgPSBwcml2Owo+ICsKPiArCQlyZXQgPSBt dDYzNzBfaW5pdF9sZWRfcHJvcGVydGllcyhkZXYsIGxlZCwgJmluaXRfZGF0YSk7Cj4gKwkJaWYg KHJldCkgewo+ICsJCQlmd25vZGVfaGFuZGxlX3B1dChjaGlsZCk7Cj4gKwkJCXJldHVybiByZXQ7 Cj4gKwkJfQo+ICsKPiArCQlyZXQgPSBtdDYzNzBfbGVkX3JlZ2lzdGVyKGRldiwgbGVkLCAmaW5p dF9kYXRhKTsKPiArCQlpZiAocmV0KSB7Cj4gKwkJCWZ3bm9kZV9oYW5kbGVfcHV0KGNoaWxkKTsK PiArCQkJcmV0dXJuIHJldDsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiAr Cj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10NjM3MF9yZ2JsZWRfZGV2aWNl X3RhYmxlW10gPSB7Cj4gKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10NjM3MC1pbmRpY2F0 b3IiIH0sCj4gKwl7fQo+ICt9Owo+ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBtdDYzNzBfcmdi bGVkX2RldmljZV90YWJsZSk7Cj4gKwo+ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBt dDYzNzBfcmdibGVkX2RyaXZlciA9IHsKPiArCS5kcml2ZXIgPSB7Cj4gKwkJLm5hbWUgPSAibXQ2 MzcwLWluZGljYXRvciIsCj4gKwkJLm9mX21hdGNoX3RhYmxlID0gbXQ2MzcwX3JnYmxlZF9kZXZp Y2VfdGFibGUsCj4gKwl9LAo+ICsJLnByb2JlID0gbXQ2MzcwX2xlZHNfcHJvYmUsCj4gK307Cj4g K21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIobXQ2MzcwX3JnYmxlZF9kcml2ZXIpOwo+ICsKPiArTU9E VUxFX0FVVEhPUigiQWxpY2UgQ2hlbiA8YWxpY2VfY2hlbkByaWNodGVrLmNvbT4iKTsKPiArTU9E VUxFX0FVVEhPUigiQ2hpWXVhbiBIdWFuZyA8Y3lfaHVhbmdAcmljaHRlay5jb20+Iik7Cj4gK01P RFVMRV9ERVNDUklQVElPTigiTWVkaWFUZWsgTVQ2MzcwIFJHQiBMRUQgRHJpdmVyIik7Cj4gK01P RFVMRV9MSUNFTlNFKCJHUEwiKTsKPiAtLSAKPiAyLjcuNAo+IAoKLS0gCkxlZSBKb25lcyBb5p2O 55C85pavXQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K bGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZy YWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGlu dXgtYXJtLWtlcm5lbAo=