Received: by 2002:a05:6a10:6744:0:0:0:0 with SMTP id w4csp3910233pxu; Tue, 20 Oct 2020 03:55:42 -0700 (PDT) X-Google-Smtp-Source: ABdhPJznutzs2iR52vda54A6KTqxioEPSzG7E8HB52M+CkfYzx23pAHczNydBvYUwGDlhiUWwgV7 X-Received: by 2002:a17:906:6004:: with SMTP id o4mr2415830ejj.309.1603191342061; Tue, 20 Oct 2020 03:55:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1603191342; cv=none; d=google.com; s=arc-20160816; b=RLhAP5hFoKiOjKZhTofdzMdZLZcRRPLF6X8cAGv+WsZ6kbDVb+9WJTbh9rBJtGh2eA dSSxL2wYaEumiD0ckQUEuucRuF3i93QmjWL9AxPBCFYJnXPlzki/OVs602LGYK6pqDgZ okPkAvn6HZm17+K4tl1bV/mfvkGUKUTmZCLxRSBG1CrvC5JTDdH1zmSna6EtI1ISWxAz ZkrwmS0vOsJ+yp4f0tbwEeNl+RPMy3KqkICovPaVi11j6hetPu4g5jK5q2zwtLvGc+It Lf1htdTyMjWp7QBJjk1ZAX11q1OGpQppfsLUN0UM1MLhmSbi19h0eHLAEkCEWfysTz9h etUw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:content-transfer-encoding :content-language:accept-language:in-reply-to:references:message-id :date:thread-index:thread-topic:subject:cc:to:from:ironport-sdr; bh=j45Kp8QFFMRQvAn6ymiNHBtl+tWpuVU/IOfbe2tovNc=; b=oOv8x0pzikcJT4ZBH/BWLWo/7RB/Z44i5n6+HItYoOj89ivMQ2/XcPJkCr7QWpgFvX J/7/K8pqRjwtp/2Lz4fePgEcmG79NK7cMcPPeADaXLwNdVVOovtdpTo7IW7AUXRoRVan FQZ+24NHNxYGGANT/0wBIHmsJb2nhegYcmsSz4Iv/dLLKxkZh3VDHWwEYaJyndVWt3/V 0IVYPwdVRHWXRGtYLExGqmwn6Ul5NDIssOWXktJeKvm/pcgwoLaRkNGK6neOgBTzP0GG RPEUzddBevL7wu9TvxmUs5ip3NhqiX/bnsarAS/r/If8PQ16TuQCiZnzLeEPDeE9De72 GXrw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id p14si984953eju.470.2020.10.20.03.55.18; Tue, 20 Oct 2020 03:55:42 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2392323AbgJTJCW (ORCPT + 99 others); Tue, 20 Oct 2020 05:02:22 -0400 Received: from 60-251-196-230.HINET-IP.hinet.net ([60.251.196.230]:53966 "EHLO ironport.ite.com.tw" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2392319AbgJTJCU (ORCPT ); Tue, 20 Oct 2020 05:02:20 -0400 IronPort-SDR: +D9bFvq6xQe4PtdBdgTIsSb6LHRyQQOkjOHoxn90BMGL/OGdBm/8UfXEyEyQzWZBSNh6C+JV+6 BqVMn9LFtFLg== Received: from unknown (HELO mse.ite.com.tw) ([192.168.35.30]) by ironport.ite.com.tw with ESMTP; 20 Oct 2020 17:01:13 +0800 Received: from CSBMAIL1.internal.ite.com.tw (csbmail1.internal.ite.com.tw [192.168.65.58]) by mse.ite.com.tw with ESMTP id 09K919RT006093; Tue, 20 Oct 2020 17:01:09 +0800 (GMT-8) (envelope-from allen.chen@ite.com.tw) Received: from CSBMAIL1.internal.ite.com.tw (192.168.65.58) by CSBMAIL1.internal.ite.com.tw (192.168.65.58) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5; Tue, 20 Oct 2020 17:01:08 +0800 Received: from CSBMAIL1.internal.ite.com.tw ([fe80::2cba:f37c:ac09:f33f]) by CSBMAIL1.internal.ite.com.tw ([fe80::2cba:f37c:ac09:f33f%22]) with mapi id 15.01.1713.004; Tue, 20 Oct 2020 17:01:08 +0800 From: To: CC: , , , , , , , , , , , , , , , , , Subject: RE: [PATCH v3] drm/bridge: add it6505 driver Thread-Topic: [PATCH v3] drm/bridge: add it6505 driver Thread-Index: AQHWpFbq8L+ubNZs20KZ+g8dVeSqQamgNPFA Date: Tue, 20 Oct 2020 09:01:08 +0000 Message-ID: <257c8014a28d4453bfa7e085f56a07d1@ite.com.tw> References: <20200904021029.365700-1-allen.chen@ite.com.tw> <20201017072647.GK2242298@ravnborg.org> In-Reply-To: <20201017072647.GK2242298@ravnborg.org> Accept-Language: en-US Content-Language: zh-TW X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [192.168.70.104] x-tm-snts-smtp: 7C92E76B8B526C4073AECB26D2783711049139F873E5D54814034C1D4363214B2000:8 Content-Type: text/plain; charset="big5" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MAIL: mse.ite.com.tw 09K919RT006093 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgc2FtDQoNClRoaXMgYnJpZGdlIHdpbGwgYmUgdXNlZCB3aXRoIG10a19kcGkuYyhodHRwczov L2VsaXhpci5ib290bGluLmNvbS9saW51eC9sYXRlc3Qvc291cmNlL2RyaXZlcnMvZ3B1L2RybS9t ZWRpYXRlay9tdGtfZHBpLmMpLg0KDQpUaGFua3MgZm9yIHlvdXIgY29tbWVudHMuDQoNCi0tLS0t T3JpZ2luYWwgTWVzc2FnZS0tLS0tDQpGcm9tOiBTYW0gUmF2bmJvcmcgW21haWx0bzpzYW1AcmF2 bmJvcmcub3JnXSANClNlbnQ6IFNhdHVyZGF5LCBPY3RvYmVyIDE3LCAyMDIwIDM6MjcgUE0NClRv OiBBbGxlbiBDaGVuICizr6xmpnQpDQpDYzogS2VubmV0aCBIdW5nICiseK5hrdspOyBKaXRhbyBT aGk7IGtlcm5lbCB0ZXN0IHJvYm90OyBKYXUtQ2hpaCBUc2VuZyAotL+sTLS8KTsgWWlsdW4gTGlu OyBEYXZpZCBBaXJsaWU7IE5laWwgQXJtc3Ryb25nOyBKZXJuZWogU2tyYWJlYzsgb3BlbiBsaXN0 OkRSTSBEUklWRVJTOyBvcGVuIGxpc3Q7IEFuZHJ6ZWogSGFqZGE7IEhlcm1lcyBXdSAop2Sozqe7 KTsgbW9kZXJhdGVkIGxpc3Q6QVJNL01lZGlhdGVrIFNvQyBzdXBwb3J0OyBMYXVyZW50IFBpbmNo YXJ0OyBQaS1Ic3VuIFNoaWg7IE1hdHRoaWFzIEJydWdnZXI7IG1vZGVyYXRlZCBsaXN0OkFSTS9N ZWRpYXRlayBTb0Mgc3VwcG9ydDsgSm9uYXMgS2FybG1hbg0KU3ViamVjdDogUmU6IFtQQVRDSCB2 M10gZHJtL2JyaWRnZTogYWRkIGl0NjUwNSBkcml2ZXINCg0KSGkgQWxsZW4NCg0KT24gRnJpLCBT ZXAgMDQsIDIwMjAgYXQgMTA6MTA6MjNBTSArMDgwMCwgYWxsZW4gd3JvdGU6DQo+IFRoaXMgYWRk cyBzdXBwb3J0IGZvciB0aGUgaVRFIElUNjUwNS4NCj4gVGhpcyBkZXZpY2UgY2FuIGNvbnZlcnQg RFBJIHNpZ25hbCB0byBEUCBvdXRwdXQuDQo+IA0KPiBGcm9tOiBBbGxlbiBDaGVuIDxhbGxlbi5j aGVuQGl0ZS5jb20udHc+DQo+IFNpZ25lZC1vZmYtYnk6IEppdGFvIFNoaSA8aml0YW8uc2hpQG1l ZGlhdGVrLmNvbT4NCj4gU2lnbmVkLW9mZi1ieTogUGktSHN1biBTaGloIDxwaWhzdW5AY2hyb21p dW0ub3JnPg0KPiBTaWduZWQtb2ZmLWJ5OiBZaWx1biBMaW4gPHlsbGluQGdvb2dsZS5jb20+DQo+ IFNpZ25lZC1vZmYtYnk6IEhlcm1lcyBXdSA8aGVybWVzLnd1QGl0ZS5jb20udHc+DQo+IFNpZ25l ZC1vZmYtYnk6IEFsbGVuIENoZW4gPGFsbGVuLmNoZW5AaXRlLmNvbS50dz4NCj4gUmVwb3J0ZWQt Ynk6IGtlcm5lbCB0ZXN0IHJvYm90IDxsa3BAaW50ZWwuY29tPg0KDQoNClNvcnJ5IGZvciBiZWlu ZyBzbyBsYXRlIHdpdGggdGhlIGZlZWRiYWNrIC0gaGF2ZSBiZWVuIG9mZmxpbmUgZm9yIGENCndo aWxlLg0KDQpPbmUgaGlnaC1sZXZlbCBjb21tZW50IC0gdGhlIGJyaWRnZSBkb2VzIG5vdCByZXNw ZWN0IHRoZSBmbGFncyBhcmd1bWVudHMNCmluIHRoZSBpdDY1MDVfYnJpZGdlX2F0dGFjaCBmdW5j dGlvbi4gQW5kIHdpbGwgdW5jb25kaXRpb25hbGx5IGNyZWF0ZSB0aGUNCmNvbm5lY3Rvci4NCg0K VGhlIGNvcnJlY3QgYXBwcm9hY2ggaXMgdGhhdCB0aGUgZGlzcGxheSBkcml2ZXIgY3JlYXRlcyB0 aGUgY29ubmVjdG9yLA0KYW5kIHBhc3MgYSBmbGFnIHRvIHRoZSBicmlkZ2UgZHJpdmVyIHRvIHRl bGwgaXQgbm90IHRvIGNyZWF0ZSB0aGUNCmNvbm5lY3Rvci4NCg0KQ291bGQgd2UgcGxlYXNlIHVw ZGF0ZSB0aGUgcmVsZXZhbnQgZGlzcGxheSBkcml2ZXJzIHRvIGNyZWF0ZSB0aGUNCmNvbm5lY3Rv ciBhbmQgdGhlbiBkcm9wIGl0IGZyb20gdGhlIGJyaWRnZSBkcml2ZXIuIFNvIHdlIGF2b2lkIGFk ZGluZw0KYmFja3dhcmQgY29tcGF0aWJsZSBjb2RlIHRvIGEgbmV3IGJyaWRnZSBkcml2ZXIuDQoN CldoYXQgZGlzcGxheSBkcml2ZXIgd2lsbCB0aGlzIGJyaWRnZSBiZSB1c2VkIHdpdGg/DQoNCglT YW0NCg0KPiAtLS0NCj4gIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZyAgICAgIHwgICAg NyArDQo+ICBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlICAgICB8ICAgIDEgKw0KPiAg ZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9pdGUtaXQ2NTA1LmMgfCAzMzM4ICsrKysrKysrKysrKysr KysrKysrKysrKysrKw0KPiAgMyBmaWxlcyBjaGFuZ2VkLCAzMzQ2IGluc2VydGlvbnMoKykNCj4g IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2l0ZS1pdDY1MDUuYw0K PiANCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZyBiL2RyaXZl cnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZw0KPiBpbmRleCAzZTExYWY0ZTlmNjNlLi5mMjFkY2Uz ZmFiZWI5IDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcNCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29uZmlnDQo+IEBAIC02MSw2ICs2MSwxMyBA QCBjb25maWcgRFJNX0xPTlRJVU1fTFQ5NjExDQo+ICAJICBIRE1JIHNpZ25hbHMNCj4gIAkgIFBs ZWFzZSBzYXkgWSBpZiB5b3UgaGF2ZSBzdWNoIGhhcmR3YXJlLg0KPiAgDQo+ICtjb25maWcgRFJN X0lURV9JVDY1MDUNCj4gKwl0cmlzdGF0ZSAiSVRFIElUNjUwNSBEaXNwbGF5UG9ydCBicmlkZ2Ui DQo+ICsJZGVwZW5kcyBvbiBPRg0KPiArCXNlbGVjdCBEUk1fS01TX0hFTFBFUg0KPiArCWhlbHAN Cj4gKwkgIElURSBJVDY1MDUgRGlzcGxheVBvcnQgYnJpZGdlIGNoaXAgZHJpdmVyLg0KPiArDQo+ ICBjb25maWcgRFJNX0xWRFNfQ09ERUMNCj4gIAl0cmlzdGF0ZSAiVHJhbnNwYXJlbnQgTFZEUyBl bmNvZGVycyBhbmQgZGVjb2RlcnMgc3VwcG9ydCINCj4gIAlkZXBlbmRzIG9uIE9GDQo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJt L2JyaWRnZS9NYWtlZmlsZQ0KPiBpbmRleCBjNTg5YTZhN2NiZTFkLi44YTExOGZkOTAxYWQ3IDEw MDY0NA0KPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlDQo+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUNCj4gQEAgLTMsNiArMyw3IEBAIG9iai0kKENP TkZJR19EUk1fQ0ROU19EU0kpICs9IGNkbnMtZHNpLm8NCj4gIG9iai0kKENPTkZJR19EUk1fQ0hS T05URUxfQ0g3MDMzKSArPSBjaHJvbnRlbC1jaDcwMzMubw0KPiAgb2JqLSQoQ09ORklHX0RSTV9E SVNQTEFZX0NPTk5FQ1RPUikgKz0gZGlzcGxheS1jb25uZWN0b3Iubw0KPiAgb2JqLSQoQ09ORklH X0RSTV9MT05USVVNX0xUOTYxMSkgKz0gbG9udGl1bS1sdDk2MTEubw0KPiArb2JqLSQoQ09ORklH X0RSTV9JVEVfSVQ2NTA1KSArPSBpdGUtaXQ2NTA1Lm8NCj4gIG9iai0kKENPTkZJR19EUk1fTFZE U19DT0RFQykgKz0gbHZkcy1jb2RlYy5vDQo+ICBvYmotJChDT05GSUdfRFJNX01FR0FDSElQU19T VERQWFhYWF9HRV9CODUwVjNfRlcpICs9IG1lZ2FjaGlwcy1zdGRweHh4eC1nZS1iODUwdjMtZncu bw0KPiAgb2JqLSQoQ09ORklHX0RSTV9OWFBfUFROMzQ2MCkgKz0gbnhwLXB0bjM0NjAubw0KPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9pdGUtaXQ2NTA1LmMgYi9kcml2ZXJz L2dwdS9kcm0vYnJpZGdlL2l0ZS1pdDY1MDUuYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBp bmRleCAwMDAwMDAwMDAwMDAwLi4wZWQxOTY3MzQzMWVlDQo+IC0tLSAvZGV2L251bGwNCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9pdGUtaXQ2NTA1LmMNCj4gQEAgLTAsMCArMSwzMzM4 IEBADQo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0Qt Mi1DbGF1c2UpDQo+ICsvKg0KPiArICogQ29weXJpZ2h0IChjKSAyMDIwLCBUaGUgTGludXggRm91 bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCj4gKyAqLw0KPiArI2luY2x1ZGUgPGxpbnV4 L2JpdHMuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPg0KPiArI2luY2x1ZGUgPGxpbnV4 L2RldmljZS5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2Vyci5oPg0KPiArI2luY2x1ZGUgPGxpbnV4 L2V4dGNvbi5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2ZzLmg+DQo+ICsjaW5jbHVkZSA8bGludXgv Z3Bpby9jb25zdW1lci5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2kyYy5oPg0KPiArI2luY2x1ZGUg PGxpbnV4L2ludGVycnVwdC5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPg0KPiArI2lu Y2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4N Cj4gKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0 b3IvY29uc3VtZXIuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPg0KPiArI2luY2x1ZGUg PGxpbnV4L3dhaXQuaD4NCj4gKw0KPiArI2luY2x1ZGUgPGNyeXB0by9oYXNoLmg+DQo+ICsjaW5j bHVkZSA8Y3J5cHRvL3NoYS5oPg0KPiArDQo+ICsjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVs cGVyLmg+DQo+ICsjaW5jbHVkZSA8ZHJtL2RybV9icmlkZ2UuaD4NCj4gKyNpbmNsdWRlIDxkcm0v ZHJtX2NydGMuaD4NCj4gKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+DQo+ICsjaW5j bHVkZSA8ZHJtL2RybV9kcF9oZWxwZXIuaD4NCj4gKyNpbmNsdWRlIDxkcm0vZHJtX2VkaWQuaD4N Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2hkY3AuaD4NCj4gKyNpbmNsdWRlIDxkcm0vZHJtX3ByaW50 Lmg+DQo+ICsjaW5jbHVkZSA8ZHJtL2RybV9wcm9iZV9oZWxwZXIuaD4NCj4gKw0KPiArI2luY2x1 ZGUgPHNvdW5kL2hkbWktY29kZWMuaD4NCj4gKw0KPiArI2RlZmluZSBSRUdfSUNfVkVSIDB4MDQN Cj4gKw0KPiArI2RlZmluZSBSRUdfUkVTRVRfQ1RSTCAweDA1DQo+ICsjZGVmaW5lIFZJREVPX1JF U0VUIEJJVCgwKQ0KPiArI2RlZmluZSBBVURJT19SRVNFVCBCSVQoMSkNCj4gKyNkZWZpbmUgQUxM X0xPR0lDX1JFU0VUIEJJVCgyKQ0KPiArI2RlZmluZSBBVVhfUkVTRVQgQklUKDMpDQo+ICsjZGVm aW5lIEhEQ1BfUkVTRVQgQklUKDQpDQo+ICsNCj4gKyNkZWZpbmUgSU5UX1NUQVRVU18wMSAweDA2 DQo+ICsjZGVmaW5lIElOVF9NQVNLXzAxIDB4MDkNCj4gKyNkZWZpbmUgSU5UX0hQRF9DSEFOR0Ug QklUKDApDQo+ICsjZGVmaW5lIElOVF9SRUNFSVZFX0hQRF9JUlEgQklUKDEpDQo+ICsjZGVmaW5l IElOVF9TQ0RUX0NIQU5HRSBCSVQoMikNCj4gKyNkZWZpbmUgSU5UX0hEQ1BfRkFJTCBCSVQoMykN Cj4gKyNkZWZpbmUgSU5UX0hEQ1BfRE9ORSBCSVQoNCkNCj4gKw0KPiArI2RlZmluZSBJTlRfU1RB VFVTXzAyIDB4MDcNCj4gKyNkZWZpbmUgSU5UX01BU0tfMDIgMHgwQQ0KPiArI2RlZmluZSBJTlRf QVVYX0NNRF9GQUlMIEJJVCgwKQ0KPiArI2RlZmluZSBJTlRfSERDUF9LU1ZfQ0hFQ0sgQklUKDEp DQo+ICsjZGVmaW5lIElOVF9BVURJT19GSUZPX0VSUk9SIEJJVCgyKQ0KPiArDQo+ICsjZGVmaW5l IElOVF9TVEFUVVNfMDMgMHgwOA0KPiArI2RlZmluZSBJTlRfTUFTS18wMyAweDBCDQo+ICsjZGVm aW5lIElOVF9MSU5LX1RSQUlOX0ZBSUwgQklUKDQpDQo+ICsjZGVmaW5lIElOVF9WSURfRklGT19F UlJPUiBCSVQoNSkNCj4gKyNkZWZpbmUgSU5UX0lPX0xBVENIX0ZJRk9fT1ZFUkZMT1cgQklUKDcp DQo+ICsNCj4gKyNkZWZpbmUgUkVHX1NZU1RFTV9TVFMgMHgwRA0KPiArI2RlZmluZSBJTlRfU1RT IEJJVCgwKQ0KPiArI2RlZmluZSBIUERfU1RTIEJJVCgxKQ0KPiArI2RlZmluZSBWSURFT19TVEIg QklUKDIpDQo+ICsNCj4gKyNkZWZpbmUgUkVHX0xJTktfVFJBSU5fU1RTIDB4MEUNCj4gKyNkZWZp bmUgTElOS19TVEFURV9DUiBCSVQoMikNCj4gKyNkZWZpbmUgTElOS19TVEFURV9FUSBCSVQoMykN Cj4gKyNkZWZpbmUgTElOS19TVEFURV9OT1JQIEJJVCg0KQ0KPiArDQo+ICsjZGVmaW5lIFJFR19C QU5LX1NFTCAweDBGDQo+ICsjZGVmaW5lIFJFR19DTEtfQ1RSTDAgMHgxMA0KPiArI2RlZmluZSBN X1BDTEtfREVMQVkgMHgwMw0KPiArDQo+ICsjZGVmaW5lIFJFR19BVVhfT1BUIDB4MTENCj4gKyNk ZWZpbmUgQVVYX0FVVE9fUlNUIEJJVCgwKQ0KPiArI2RlZmluZSBBVVhfRklYX0ZSRVEgQklUKDMp DQo+ICsNCj4gKyNkZWZpbmUgUkVHX0RBVEFfQ1RSTDAgMHgxMg0KPiArI2RlZmluZSBWSURFT19M QVRDSF9FREdFIEJJVCg0KQ0KPiArI2RlZmluZSBFTkFCTEVfUENMS19DT1VOVEVSIEJJVCg3KQ0K PiArDQo+ICsjZGVmaW5lIFJFR19QQ0xLX0NPVU5URVJfVkFMVUUgMHgxMw0KPiArDQo+ICsjZGVm aW5lIFJFR181MDFfRklGT19DVFJMIDB4MTUNCj4gKyNkZWZpbmUgUlNUXzUwMV9GSUZPIEJJVCgx KQ0KPiArDQo+ICsjZGVmaW5lIFJFR19UUkFJTl9DVFJMMCAweDE2DQo+ICsjZGVmaW5lIEZPUkNF X0xCUiBCSVQoMCkNCj4gKyNkZWZpbmUgTEFORV9DT1VOVF9NQVNLIDB4MDYNCj4gKyNkZWZpbmUg TEFORV9TV0FQIEJJVCgzKQ0KPiArI2RlZmluZSBTUFJFQURfQU1QXzUgQklUKDQpDQo+ICsjZGVm aW5lIEZPUkNFX0NSX0RPTkUgQklUKDUpDQo+ICsjZGVmaW5lIEZPUkNFX0VRX0RPTkUgQklUKDYp DQo+ICsNCj4gKyNkZWZpbmUgUkVHX1RSQUlOX0NUUkwxIDB4MTcNCj4gKyNkZWZpbmUgQVVUT19U UkFJTiBCSVQoMCkNCj4gKyNkZWZpbmUgTUFOVUFMX1RSQUlOIEJJVCgxKQ0KPiArI2RlZmluZSBG T1JDRV9SRVRSQUlOIEJJVCgyKQ0KPiArDQo+ICsjZGVmaW5lIFJFR19BVVhfQ1RSTCAweDIzDQo+ ICsjZGVmaW5lIENMUl9FRElEX0ZJRk8gQklUKDApDQo+ICsjZGVmaW5lIEFVWF9VU0VSX01PREUg QklUKDEpDQo+ICsjZGVmaW5lIEFVWF9OT19TRUdNRU5UX1dSIEJJVCg2KQ0KPiArI2RlZmluZSBB VVhfRU5fRklGT19SRUFEIEJJVCg3KQ0KPiArDQo+ICsjZGVmaW5lIFJFR19BVVhfQURSXzBfNyAw eDI0DQo+ICsjZGVmaW5lIFJFR19BVVhfQURSXzhfMTUgMHgyNQ0KPiArI2RlZmluZSBSRUdfQVVY X0FEUl8xNl8xOSAweDI2DQo+ICsjZGVmaW5lIFJFR19BVVhfT1VUX0RBVEEwIDB4MjcNCj4gKw0K PiArI2RlZmluZSBSRUdfQVVYX0NNRF9SRVEgMHgyQg0KPiArI2RlZmluZSBBVVhfQlVTWSBCSVQo NSkNCj4gKw0KPiArI2RlZmluZSBSRUdfQVVYX0RBVEFfMF83IDB4MkMNCj4gKyNkZWZpbmUgUkVH X0FVWF9EQVRBXzhfMTUgMHgyRA0KPiArI2RlZmluZSBSRUdfQVVYX0RBVEFfMTZfMjMgMHgyRQ0K PiArI2RlZmluZSBSRUdfQVVYX0RBVEFfMjRfMzEgMHgyRg0KPiArDQo+ICsjZGVmaW5lIFJFR19B VVhfREFUQV9GSUZPIDB4MkYNCj4gKw0KPiArI2RlZmluZSBSRUdfQVVYX0VSUk9SX1NUUyAweDlG DQo+ICsjZGVmaW5lIE1fQVVYX1JFUV9GQUlMIDB4MDMNCj4gKw0KPiArI2RlZmluZSBSRUdfSERD UF9DVFJMMSAweDM4DQo+ICsjZGVmaW5lIEhEQ1BfQ1BfRU5BQkxFIEJJVCgwKQ0KPiArDQo+ICsj ZGVmaW5lIFJFR19IRENQX1RSSUdHRVIgMHgzOQ0KPiArI2RlZmluZSBIRENQX1RSSUdHRVJfU1RB UlQgIEJJVCgwKQ0KPiArI2RlZmluZSBIRENQX1RSSUdHRVJfQ1BJUlEgIEJJVCgxKQ0KPiArI2Rl ZmluZSBIRENQX1RSSUdHRVJfS1NWX0RPTkUgIEJJVCg0KQ0KPiArI2RlZmluZSBIRENQX1RSSUdH RVJfS1NWX0ZBSUwgQklUKDUpDQo+ICsNCj4gKyNkZWZpbmUgUkVHX0hEQ1BfQ1RSTDIgMHgzQQ0K PiArI2RlZmluZSBIRENQX0FOX1NFTCBCSVQoMCkNCj4gKyNkZWZpbmUgSERDUF9BTl9HRU4gQklU KDEpDQo+ICsjZGVmaW5lIEhEQ1BfSFdfSFBESVJRX0FDVCBCSVQoMikNCj4gKyNkZWZpbmUgSERD UF9FTl9NMF9SRUFEIEJJVCg1KQ0KPiArDQo+ICsjZGVmaW5lIFJFR19NMF8wXzcgMHg0Qw0KPiAr I2RlZmluZSBSRUdfQU5fMF83IDB4NEMNCj4gKyNkZWZpbmUgUkVHX1NQX0NUUkwwIDB4NTgNCj4g KyNkZWZpbmUgUkVHX0lQX0NUUkwxIDB4NTkNCj4gKyNkZWZpbmUgUkVHX0lQX0NUUkwyIDB4NUEN Cj4gKw0KPiArI2RlZmluZSBSRUdfTElOS19EUlYgMHg1Qw0KPiArI2RlZmluZSBEUlZfSFMgQklU KDEpDQo+ICsNCj4gKyNkZWZpbmUgUkVHX0RSVl9MTl9EQVRBX1NFTCAweDVEDQo+ICsNCj4gKyNk ZWZpbmUgUkVHX0FVWCAweDVFDQo+ICsNCj4gKyNkZWZpbmUgUkVHX1ZJRF9CVVNfQ1RSTDAgMHg2 MA0KPiArI2RlZmluZSBJTl9ERFIgQklUKDIpDQo+ICsjZGVmaW5lIEREUl9DRCAoMHgwMSA8PCA2 KQ0KPiArDQo+ICsjZGVmaW5lIFJFR19WSURfQlVTX0NUUkwxIDB4NjENCj4gKyNkZWZpbmUgVFhf RklGT19SRVNFVCBCSVQoMSkNCj4gKw0KPiArI2RlZmluZSBSRUdfSU5QVVRfQ1RSTCAweEEwDQo+ ICsjZGVmaW5lIElOUFVUX0hTWU5DX1BPTCBCSVQoMCkNCj4gKyNkZWZpbmUgSU5QVVRfVlNZTkNf UE9MIEJJVCgyKQ0KPiArI2RlZmluZSBJTlBVVF9JTlRFUkxBQ0VEIEJJVCg0KQ0KPiArDQo+ICsj ZGVmaW5lIFJFR19JTlBVVF9IVE9UQUwgMHhBMQ0KPiArI2RlZmluZSBSRUdfSU5QVVRfSEFDVElW RV9TVEFSVCAweEEzDQo+ICsjZGVmaW5lIFJFR19JTlBVVF9IQUNUSVZFX1dJRFRIIDB4QTUNCj4g KyNkZWZpbmUgUkVHX0lOUFVUX0hGUk9OVF9QT1JDSCAweEE3DQo+ICsjZGVmaW5lIFJFR19JTlBV VF9IU1lOQ19XSURUSCAweEE5DQo+ICsjZGVmaW5lIFJFR19JTlBVVF9WVE9UQUwgMHhBQg0KPiAr I2RlZmluZSBSRUdfSU5QVVRfVkFDVElWRV9TVEFSVCAweEFEDQo+ICsjZGVmaW5lIFJFR19JTlBV VF9WQUNUSVZFX1dJRFRIIDB4QUYNCj4gKyNkZWZpbmUgUkVHX0lOUFVUX1ZGUk9OVF9QT1JDSCAw eEIxDQo+ICsjZGVmaW5lIFJFR19JTlBVVF9WU1lOQ19XSURUSCAweEIzDQo+ICsNCj4gKyNkZWZp bmUgUkVHX0FVRElPX1NSQ19DVFJMIDB4QjgNCj4gKyNkZWZpbmUgTV9BVURJT19JMlNfRU4gMHgw Rg0KPiArI2RlZmluZSBFTl9JMlMwIEJJVCgwKQ0KPiArI2RlZmluZSBFTl9JMlMxIEJJVCgxKQ0K PiArI2RlZmluZSBFTl9JMlMyIEJJVCgyKQ0KPiArI2RlZmluZSBFTl9JMlMzIEJJVCgzKQ0KPiAr I2RlZmluZSBBVURJT19GSUZPX1JFU0VUIEJJVCg3KQ0KPiArDQo+ICsjZGVmaW5lIFJFR19BVURJ T19GTVQgMHhCOQ0KPiArI2RlZmluZSBSRUdfQVVESU9fRklGT19TRUwgMHhCQQ0KPiArDQo+ICsj ZGVmaW5lIFJFR19BVURJT19DVFJMMCAweEJCDQo+ICsjZGVmaW5lIEFVRElPX0ZVTExfUEtUIEJJ VCg0KQ0KPiArI2RlZmluZSBBVURJT18xNkJfQk9VTkQgQklUKDUpDQo+ICsNCj4gKyNkZWZpbmUg UkVHX0FVRElPX0NUUkwxIDB4QkMNCj4gKyNkZWZpbmUgUkVHX0FVRElPX0lOUFVUX0ZSRVEgMHhC RQ0KPiArDQo+ICsjZGVmaW5lIFJFR19JRUM5NThfU1RTMCAweEJGDQo+ICsjZGVmaW5lIFJFR19J RUM5NThfU1RTMSAweEMwDQo+ICsjZGVmaW5lIFJFR19JRUM5NThfU1RTMiAweEMxDQo+ICsjZGVm aW5lIFJFR19JRUM5NThfU1RTMyAweEMyDQo+ICsjZGVmaW5lIFJFR19JRUM5NThfU1RTNCAweEMz DQo+ICsNCj4gKyNkZWZpbmUgUkVHX0hQRF9JUlFfVElNRSAweEM5DQo+ICsjZGVmaW5lIFJFR19B VVhfREVCVUdfTU9ERSAweENBDQo+ICsjZGVmaW5lIFJFR19BVVhfT1BUMiAweENCDQo+ICsjZGVm aW5lIFJFR19IRENQX09QVCAweENFDQo+ICsjZGVmaW5lIFJFR19VU0VSX0RSVl9QUkUgMHhDRg0K PiArDQo+ICsjZGVmaW5lIFJFR19EQVRBX01VVEVfQ1RSTCAweEQzDQo+ICsjZGVmaW5lIEVOQUJM RV9FTkhBTkNFRF9GUkFNRSBCSVQoMCkNCj4gKyNkZWZpbmUgRU5BQkxFX0FVVE9fVklERU9fRklG T19SRVNFVCBCSVQoMSkNCj4gKyNkZWZpbmUgRU5fVklEX01VVEUgQklUKDQpDQo+ICsjZGVmaW5l IEVOX0FVRF9NVVRFIEJJVCg1KQ0KPiArDQo+ICsjZGVmaW5lIFJFR19USU1FX1NUTVBfQ1RSTCAw eEQ0DQo+ICsjZGVmaW5lIEVOX0VOSEFOQ0VfVklEX1NUTVAgQklUKDApDQo+ICsjZGVmaW5lIEVO X0VOSEFOQ0VfQVVEX1NUTVAgQklUKDIpDQo+ICsjZGVmaW5lIE1fU1RBTVBfU1RFUCAweDMwDQo+ ICsjZGVmaW5lIEVOX1NTQ19HQVQgQklUKDYpDQo+ICsNCj4gKyNkZWZpbmUgUkVHX0lORk9GUkFN RV9DVFJMIDB4RTgNCj4gKyNkZWZpbmUgRU5fQVZJX1BLVCBCSVQoMCkNCj4gKyNkZWZpbmUgRU5f QVVEX1BLVCBCSVQoMSkNCj4gKyNkZWZpbmUgRU5fTVBHX1BLVCBCSVQoMikNCj4gKyNkZWZpbmUg RU5fR0VOX1BLVCBCSVQoMykNCj4gKyNkZWZpbmUgRU5fVklEX1RJTUVfU1RNUCBCSVQoNCkNCj4g KyNkZWZpbmUgRU5fQVVEX1RJTUVfU1RNUCBCSVQoNSkNCj4gKyNkZWZpbmUgRU5fVklEX0NUUkxf UEtUIChFTl9BVklfUEtUIHwgRU5fVklEX1RJTUVfU1RNUCkNCj4gKyNkZWZpbmUgRU5fQVVEX0NU UkxfUEtUIChFTl9BVURfUEtUIHwgRU5fQVVEX1RJTUVfU1RNUCkNCj4gKw0KPiArI2RlZmluZSBS RUdfQVVESU9fTl8wXzcgMHhERQ0KPiArI2RlZmluZSBSRUdfQVVESU9fTl84XzE1IDB4REYNCj4g KyNkZWZpbmUgUkVHX0FVRElPX05fMTZfMjMgMHhFMA0KPiArDQo+ICsjZGVmaW5lIFJFR19BVklf SU5GT19EQjEgMHhFOQ0KPiArI2RlZmluZSBSRUdfQVZJX0lORk9fREIyIDB4RUENCj4gKyNkZWZp bmUgUkVHX0FWSV9JTkZPX0RCMyAweEVCDQo+ICsjZGVmaW5lIFJFR19BVklfSU5GT19EQjQgMHhF Qw0KPiArI2RlZmluZSBSRUdfQVZJX0lORk9fREI1IDB4RUQNCj4gKyNkZWZpbmUgUkVHX0FWSV9J TkZPX1NVTSAweEY2DQo+ICsNCj4gKyNkZWZpbmUgUkVHX0FVRF9JTkZPRlJBTV9EQjEgMHhGNw0K PiArI2RlZmluZSBSRUdfQVVEX0lORk9GUkFNX0RCMiAweEY4DQo+ICsjZGVmaW5lIFJFR19BVURf SU5GT0ZSQU1fREIzIDB4RjkNCj4gKyNkZWZpbmUgUkVHX0FVRF9JTkZPRlJBTV9EQjQgMHhGQQ0K PiArI2RlZmluZSBSRUdfQVVEX0lORk9GUkFNX1NVTSAweEZCDQo+ICsNCj4gKy8qIHRoZSBmb2xs b3dpbmcgc2l4IHJlZ2lzdGVycyBhcmUgaW4gYmFuazEgKi8NCj4gKyNkZWZpbmUgUkVHX0RSVl8w X0RCXzgwMF9NViAweDdFDQo+ICsjZGVmaW5lIFJFR19QUkVfMF9EQl84MDBfTVYgMHg3Rg0KPiAr I2RlZmluZSBSRUdfUFJFXzNQNV9EQl84MDBfTVYgMHg4MQ0KPiArI2RlZmluZSBSRUdfU1NDX0NU UkwwIDB4ODgNCj4gKyNkZWZpbmUgUkVHX1NTQ19DVFJMMSAweDg5DQo+ICsjZGVmaW5lIFJFR19T U0NfQ1RSTDIgMHg4QQ0KPiArDQo+ICsjZGVmaW5lIFJCUiBEUF9MSU5LX0JXXzFfNjINCj4gKyNk ZWZpbmUgSEJSIERQX0xJTktfQldfMl83DQo+ICsjZGVmaW5lIEhCUjIgRFBfTElOS19CV181XzQN Cj4gKyNkZWZpbmUgSEJSMyBEUF9MSU5LX0JXXzhfMQ0KPiArDQo+ICsvKiBWZW5kb3Igb3B0aW9u ICovDQo+ICsjZGVmaW5lIEhEQ1BfREVTSVJFRCAxDQo+ICsjZGVmaW5lIE1BWF9MQU5FX0NPVU5U IDQNCj4gKyNkZWZpbmUgTUFYX0xJTktfUkFURSBIQlINCj4gKyNkZWZpbmUgQVVUT19UUkFJTl9S RVRSWSAzDQo+ICsjZGVmaW5lIE1BWF9IRENQX0RPV05fU1RSRUFNX0NPVU5UIDEwDQo+ICsjZGVm aW5lIE1BWF9DUl9MRVZFTCAweDAzDQo+ICsjZGVmaW5lIE1BWF9FUV9MRVZFTCAweDAzDQo+ICsj ZGVmaW5lIEFVWF9XQUlUX1RJTUVPVVRfTVMgMTUNCj4gKyNkZWZpbmUgQVVYX0ZJRk9fTUFYX1NJ WkUgMzINCj4gKyNkZWZpbmUgUElYRUxfQ0xLX0RFTEFZIDENCj4gKyNkZWZpbmUgUElYRUxfQ0xL X0lOVkVSU0UgMA0KPiArI2RlZmluZSBBREpVU1RfUEhBU0VfVEhSRVNIT0xEIDgwMDAwDQo+ICsj ZGVmaW5lIERQSV9QSVhFTF9DTEtfTUFYIDk1MDAwDQo+ICsjZGVmaW5lIEhEQ1BfU0hBMV9GSUZP X0xFTiAoTUFYX0hEQ1BfRE9XTl9TVFJFQU1fQ09VTlQgKiA1ICsgMTApDQo+ICsjZGVmaW5lIERF RkFVTFRfUFdSX09OIDANCj4gKyNkZWZpbmUgREVGQVVMVF9EUlZfSE9MRCAwDQo+ICsNCj4gKyNk ZWZpbmUgQVVESU9fU0VMRUNUIEkyUw0KPiArI2RlZmluZSBBVURJT19UWVBFIExQQ00NCj4gKyNk ZWZpbmUgQVVESU9fU0FNUExFX1JBVEUgU0FNUExFX1JBVEVfNDhLDQo+ICsjZGVmaW5lIEFVRElP X0NIQU5ORUxfQ09VTlQgMg0KPiArDQo+ICsvKg0KPiArICogMDogU3RhbmRhcmQgSTJTDQo+ICsg KiAxOiAzMmJpdCBJMlMNCj4gKyAqLw0KPiArI2RlZmluZSBJMlNfSU5QVVRfRk9STUFUIDENCj4g Kw0KPiArLyoNCj4gKyAqIDA6IExlZnQtanVzdGlmaWVkDQo+ICsgKiAxOiBSaWdodC1qdXN0aWZp ZWQNCj4gKyAqLw0KPiArI2RlZmluZSBJMlNfSlVTVElGSUVEIDANCj4gKw0KPiArLyoNCj4gKyAq IDA6IERhdGEgZGVsYXkgMVQgY29ycmVzcG9uZCB0byBXUw0KPiArICogMTogTm8gZGF0YSBkZWxh eSBjb3JyZXNwb25kIHRvIFdTDQo+ICsgKi8NCj4gKyNkZWZpbmUgSTJTX0RBVEFfREVMQVkgMA0K PiArDQo+ICsvKg0KPiArICogMDogTGVmdCBjaGFubmVsDQo+ICsgKiAxOiBSaWdodCBjaGFubmVs DQo+ICsgKi8NCj4gKyNkZWZpbmUgSTJTX1dTX0NIQU5ORUwgMA0KPiArDQo+ICsvKg0KPiArICog MDogTVNCIHNoaWZ0IGZpcnN0DQo+ICsgKiAxOiBMU0Igc2hpZnQgZmlyc3QNCj4gKyAqLw0KPiAr I2RlZmluZSBJMlNfREFUQV9TRVFVRU5DRSAwDQo+ICsNCj4gKy8qDQo+ICsgKiBBdWRpbyBTYW1w bGUgV29yZCBMZW5ndGgNCj4gKyAqIFdPUkRfTEVOR1RIXzE2QklUDQo+ICsgKiBXT1JEX0xFTkdU SF8xOEJJVA0KPiArICogV09SRF9MRU5HVEhfMjBCSVQNCj4gKyAqIFdPUkRfTEVOR1RIXzI0QklU DQo+ICsgKi8NCj4gKyNkZWZpbmUgQVVESU9fV09SRF9MRU5HVEggV09SRF9MRU5HVEhfMjRCSVQN Cj4gKw0KPiArZW51bSBhdXhfY21kX3R5cGUgew0KPiArCUNNRF9BVVhfTkFUSVZFX1JFQUQgPSAw eDAsDQo+ICsJQ01EX0FVWF9OQVRJVkVfV1JJVEUgPSAweDUsDQo+ICsJQ01EX0FVWF9JMkNfRURJ RF9SRUFEID0gMHhCLA0KPiArfTsNCj4gKw0KPiArZW51bSBhdXhfY21kX3JlcGx5IHsNCj4gKwlS RVBMWV9BQ0ssDQo+ICsJUkVQTFlfTkFDSywNCj4gKwlSRVBMWV9ERUZFUiwNCj4gK307DQo+ICsN Cj4gK2VudW0gbGlua190cmFpbl9zdGF0dXMgew0KPiArCUxJTktfSURMRSwNCj4gKwlMSU5LX0JV U1ksDQo+ICsJTElOS19PSywNCj4gK307DQo+ICsNCj4gK2VudW0gaGRjcF9zdGF0ZSB7DQo+ICsJ SERDUF9BVVRIX0lETEUsDQo+ICsJSERDUF9BVVRIX0dPSU5HLA0KPiArCUhEQ1BfQVVUSF9ET05F LA0KPiArfTsNCj4gKw0KPiArc3RydWN0IGl0NjUwNV9wbGF0Zm9ybV9kYXRhIHsNCj4gKwlzdHJ1 Y3QgcmVndWxhdG9yICpwd3IxODsNCj4gKwlzdHJ1Y3QgcmVndWxhdG9yICpvdmRkOw0KPiArCXN0 cnVjdCBncGlvX2Rlc2MgKmdwaW9kX3Jlc2V0Ow0KPiArfTsNCj4gKw0KPiArZW51bSBpdDY1MDVf YXVkaW9fc2VsZWN0IHsNCj4gKwlJMlMgPSAwLA0KPiArCVNQRElGLA0KPiArfTsNCj4gKw0KPiAr ZW51bSBpdDY1MDVfYXVkaW9fc2FtcGxlX3JhdGUgew0KPiArCVNBTVBMRV9SQVRFXzI0SyA9IDB4 NiwNCj4gKwlTQU1QTEVfUkFURV8zMksgPSAweDMsDQo+ICsJU0FNUExFX1JBVEVfNDhLID0gMHgy LA0KPiArCVNBTVBMRV9SQVRFXzk2SyA9IDB4QSwNCj4gKwlTQU1QTEVfUkFURV8xOTJLID0gMHhF LA0KPiArCVNBTVBMRV9SQVRFXzQ0XzFLID0gMHgwLA0KPiArCVNBTVBMRV9SQVRFXzg4XzJLID0g MHg4LA0KPiArCVNBTVBMRV9SQVRFXzE3Nl80SyA9IDB4QywNCj4gK307DQo+ICsNCj4gK2VudW0g aXQ2NTA1X2F1ZGlvX3R5cGUgew0KPiArCUxQQ00gPSAwLA0KPiArCU5MUENNLA0KPiArCURTUywN Cj4gK307DQo+ICsNCj4gK2VudW0gaXQ2NTA1X2F1ZGlvX3dvcmRfbGVuZ3RoIHsNCj4gKwlXT1JE X0xFTkdUSF8xNkJJVCA9IDAsDQo+ICsJV09SRF9MRU5HVEhfMThCSVQsDQo+ICsJV09SRF9MRU5H VEhfMjBCSVQsDQo+ICsJV09SRF9MRU5HVEhfMjRCSVQsDQo+ICt9Ow0KPiArDQo+ICtzdHJ1Y3Qg aXQ2NTA1X2F1ZGlvX2RhdGEgew0KPiArCWVudW0gaXQ2NTA1X2F1ZGlvX3NlbGVjdCBzZWxlY3Q7 DQo+ICsJZW51bSBpdDY1MDVfYXVkaW9fc2FtcGxlX3JhdGUgc2FtcGxlX3JhdGU7DQo+ICsJZW51 bSBpdDY1MDVfYXVkaW9fdHlwZSB0eXBlOw0KPiArCWVudW0gaXQ2NTA1X2F1ZGlvX3dvcmRfbGVu Z3RoIHdvcmRfbGVuZ3RoOw0KPiArCXU4IGNoYW5uZWxfY291bnQ7DQo+ICsJdTggaTJzX2lucHV0 X2Zvcm1hdDsNCj4gKwl1OCBpMnNfanVzdGlmaWVkOw0KPiArCXU4IGkyc19kYXRhX2RlbGF5Ow0K PiArCXU4IGkyc193c19jaGFubmVsOw0KPiArCXU4IGkyc19kYXRhX3NlcXVlbmNlOw0KPiArfTsN Cj4gKw0KPiArc3RydWN0IGl0NjUwNV9hdWRpb19zYW1wbGVfcmF0ZV9tYXAgew0KPiArCWVudW0g aXQ2NTA1X2F1ZGlvX3NhbXBsZV9yYXRlIHJhdGU7DQo+ICsJaW50IHNhbXBsZV9yYXRlX3ZhbHVl Ow0KPiArfTsNCj4gKw0KPiArc3RydWN0IGl0NjUwNV9kcm1fZHBfbGluayB7DQo+ICsJdW5zaWdu ZWQgY2hhciByZXZpc2lvbjsNCj4gKwl1bnNpZ25lZCBpbnQgcmF0ZTsNCj4gKwl1bnNpZ25lZCBp bnQgbnVtX2xhbmVzOw0KPiArCXVuc2lnbmVkIGxvbmcgY2FwYWJpbGl0aWVzOw0KPiArfTsNCj4g Kw0KPiArc3RydWN0IGl0NjUwNSB7DQo+ICsJc3RydWN0IGRybV9kcF9hdXggYXV4Ow0KPiArCXN0 cnVjdCBkcm1fYnJpZGdlIGJyaWRnZTsNCj4gKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50Ow0K PiArCXN0cnVjdCBlZGlkICplZGlkOw0KPiArCXN0cnVjdCBkcm1fY29ubmVjdG9yIGNvbm5lY3Rv cjsNCj4gKwlzdHJ1Y3QgaXQ2NTA1X2RybV9kcF9saW5rIGxpbms7DQo+ICsJc3RydWN0IGl0NjUw NV9wbGF0Zm9ybV9kYXRhIHBkYXRhOw0KPiArCXN0cnVjdCBtdXRleCBleHRjb25fbG9jazsNCj4g KwlzdHJ1Y3QgbXV0ZXggbW9kZV9sb2NrOw0KPiArCXN0cnVjdCBtdXRleCBhdXhfbG9jazsNCj4g KwlzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7DQo+ICsJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgdmlk ZW9faW5mbzsNCj4gKwlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgZXZlbnRfbmI7DQo+ICsJc3RydWN0 IGV4dGNvbl9kZXYgKmV4dGNvbjsNCj4gKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZXh0Y29uX3dxOw0K PiArCWVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgY29ubmVjdG9yX3N0YXR1czsNCj4gKwllbnVt IGxpbmtfdHJhaW5fc3RhdHVzIGxpbmtfc3RhdGU7DQo+ICsJc3RydWN0IHdvcmtfc3RydWN0IGxp bmtfd29ya3M7DQo+ICsJdTggZHBjZFtEUF9SRUNFSVZFUl9DQVBfU0laRV07DQo+ICsJdTggbGFu ZV9jb3VudDsNCj4gKwl1OCBsaW5rX3JhdGVfYndfY29kZTsNCj4gKwl1OCBzaW5rX2NvdW50Ow0K PiArCWJvb2wgc3RlcF90cmFpbjsNCj4gKwlib29sIGJyYW5jaF9kZXZpY2U7DQo+ICsJYm9vbCBl bmFibGVfc3NjOw0KPiArCWJvb2wgbGFuZV9zd2FwX2Rpc2FibGVkOw0KPiArCWJvb2wgbGFuZV9z d2FwOw0KPiArCWJvb2wgcG93ZXJlZDsNCj4gKwl1MzIgYWZlX3NldHRpbmc7DQo+ICsJZW51bSBo ZGNwX3N0YXRlIGhkY3Bfc3RhdHVzOw0KPiArCXN0cnVjdCBkZWxheWVkX3dvcmsgaGRjcF93b3Jr Ow0KPiArCXN0cnVjdCB3b3JrX3N0cnVjdCBoZGNwX3dhaXRfa3N2X2xpc3Q7DQo+ICsJc3RydWN0 IGNvbXBsZXRpb24gd2FpdF9lZGlkX2NvbXBsZXRlOw0KPiArCXU4IGF1dG9fdHJhaW5fcmV0cnk7 DQo+ICsJYm9vbCBoZGNwX2Rlc2lyZWQ7DQo+ICsJYm9vbCBpc19yZXBlYXRlcjsNCj4gKwl1OCBo ZGNwX2Rvd25fc3RyZWFtX2NvdW50Ow0KPiArCXU4IGJrc3ZzW0RSTV9IRENQX0tTVl9MRU5dOw0K PiArCXU4IHNoYTFfaW5wdXRbSERDUF9TSEExX0ZJRk9fTEVOXTsNCj4gKwlib29sIGVuYWJsZV9l bmhhbmNlZF9mcmFtZTsNCj4gKwloZG1pX2NvZGVjX3BsdWdnZWRfY2IgcGx1Z2dlZF9jYjsNCj4g KwlzdHJ1Y3QgZGV2aWNlICpjb2RlY19kZXY7DQo+ICsJc3RydWN0IGRlbGF5ZWRfd29yayBkZWxh eWVkX2F1ZGlvOw0KPiArCXN0cnVjdCBpdDY1MDVfYXVkaW9fZGF0YSBhdWRpbzsNCj4gKw0KPiAr CS8qIGl0NjUwNSBkcml2ZXIgaG9sZCBvcHRpb24gKi8NCj4gKwlib29sIGVuYWJsZV9kcnZfaG9s ZDsNCj4gK307DQo+ICsNCj4gK3N0cnVjdCBpdDY1MDVfc3RlcF90cmFpbl9wYXJhIHsNCj4gKwl1 OCB2b2x0YWdlX3N3aW5nW01BWF9MQU5FX0NPVU5UXTsNCj4gKwl1OCBwcmVfZW1waGFzaXNbTUFY X0xBTkVfQ09VTlRdOw0KPiArfTsNCj4gKw0KPiArLyoNCj4gKyAqIFZlbmRvciBvcHRpb24gYWZl IHNldHRpbmdzIGZvciBkaWZmZXJlbnQgcGxhdGZvcm1zDQo+ICsgKiAwOiBmb3IgYml0bGFuZCAx MGUsIHF1YW50YSB6ZGUNCj4gKyAqIDE6IGZvciBnb29nbGUga3VrdWkgcDEvcDIsIGh1YXFpbiBr cmFuZQ0KPiArICovDQo+ICsNCj4gK3N0YXRpYyB1OCBjb25zdCBhZmVfc2V0dGluZ190YWJsZVtd WzNdID0gew0KPiArCXsweDgyLCAweDAwLCAweEE2fSwNCj4gKwl7MHg5MywgMHgyQSwgMHg4NX0N Cj4gK307DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXQ2NTA1X2F1ZGlvX3NhbXBsZV9y YXRlX21hcCBhdWRpb19zYW1wbGVfcmF0ZV9tYXBbXSA9IHsNCj4gKwl7U0FNUExFX1JBVEVfMjRL LCAyNDAwMH0sDQo+ICsJe1NBTVBMRV9SQVRFXzMySywgMzIwMDB9LA0KPiArCXtTQU1QTEVfUkFU RV80OEssIDQ4MDAwfSwNCj4gKwl7U0FNUExFX1JBVEVfOTZLLCA5NjAwMH0sDQo+ICsJe1NBTVBM RV9SQVRFXzE5MkssIDE5MjAwMH0sDQo+ICsJe1NBTVBMRV9SQVRFXzQ0XzFLLCA0NDEwMH0sDQo+ ICsJe1NBTVBMRV9SQVRFXzg4XzJLLCA4ODIwMH0sDQo+ICsJe1NBTVBMRV9SQVRFXzE3Nl80Sywg MTc2NDAwfSwNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX3Jhbmdl IGl0NjUwNV9icmlkZ2Vfdm9sYXRpbGVfcmFuZ2VzW10gPSB7DQo+ICsJeyAucmFuZ2VfbWluID0g MCwgLnJhbmdlX21heCA9IDB4RkYgfSwNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgcmVnbWFwX2FjY2Vzc190YWJsZSBpdDY1MDVfYnJpZGdlX3ZvbGF0aWxlX3RhYmxlID0gew0K PiArCS55ZXNfcmFuZ2VzID0gaXQ2NTA1X2JyaWRnZV92b2xhdGlsZV9yYW5nZXMsDQo+ICsJLm5f eWVzX3JhbmdlcyA9IEFSUkFZX1NJWkUoaXQ2NTA1X2JyaWRnZV92b2xhdGlsZV9yYW5nZXMpLA0K PiArfTsNCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIGl0NjUwNV9y ZWdtYXBfY29uZmlnID0gew0KPiArCS5yZWdfYml0cyA9IDgsDQo+ICsJLnZhbF9iaXRzID0gOCwN Cj4gKwkudm9sYXRpbGVfdGFibGUgPSAmaXQ2NTA1X2JyaWRnZV92b2xhdGlsZV90YWJsZSwNCj4g KwkuY2FjaGVfdHlwZSA9IFJFR0NBQ0hFX05PTkUsDQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgaW50 IGl0NjUwNV9yZWFkKHN0cnVjdCBpdDY1MDUgKml0NjUwNSwgdW5zaWduZWQgaW50IHJlZ19hZGRy KQ0KPiArew0KPiArCXVuc2lnbmVkIGludCB2YWx1ZTsNCj4gKwlpbnQgZXJyOw0KPiArCXN0cnVj dCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KPiArDQo+ICsJZXJyID0gcmVn bWFwX3JlYWQoaXQ2NTA1LT5yZWdtYXAsIHJlZ19hZGRyLCAmdmFsdWUpOw0KPiArCWlmIChlcnIg PCAwKSB7DQo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAicmVhZCBmYWlsZWQgcmVnWzB4JXhdIGVy cjogJWQiLCByZWdfYWRkciwNCj4gKwkJCSAgICAgIGVycik7DQo+ICsJCXJldHVybiBlcnI7DQo+ ICsJfQ0KPiArDQo+ICsJcmV0dXJuIHZhbHVlOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGl0 NjUwNV93cml0ZShzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUsIHVuc2lnbmVkIGludCByZWdfYWRkciwN Cj4gKwkJICAgICAgdW5zaWduZWQgaW50IHJlZ192YWwpDQo+ICt7DQo+ICsJaW50IGVycjsNCj4g KwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCj4gKw0KPiArCWVy ciA9IHJlZ21hcF93cml0ZShpdDY1MDUtPnJlZ21hcCwgcmVnX2FkZHIsIHJlZ192YWwpOw0KPiAr DQo+ICsJaWYgKGVyciA8IDApIHsNCj4gKwkJRFJNX0RFVl9FUlJPUihkZXYsICJ3cml0ZSBmYWls ZWQgcmVnWzB4JXhdID0gMHgleCBlcnIgPSAlZCIsDQo+ICsJCQkgICAgICByZWdfYWRkciwgcmVn X3ZhbCwgZXJyKTsNCj4gKwkJcmV0dXJuIGVycjsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gMDsN Cj4gK30NCj4gKw0KPiArc3RhdGljIGludCBpdDY1MDVfc2V0X2JpdHMoc3RydWN0IGl0NjUwNSAq aXQ2NTA1LCB1bnNpZ25lZCBpbnQgcmVnLA0KPiArCQkJIHVuc2lnbmVkIGludCBtYXNrLCB1bnNp Z25lZCBpbnQgdmFsdWUpDQo+ICt7DQo+ICsJaW50IGVycjsNCj4gKwlzdHJ1Y3QgZGV2aWNlICpk ZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCj4gKw0KPiArCWVyciA9IHJlZ21hcF91cGRhdGVf Yml0cyhpdDY1MDUtPnJlZ21hcCwgcmVnLCBtYXNrLCB2YWx1ZSk7DQo+ICsJaWYgKGVyciA8IDAp IHsNCj4gKwkJRFJNX0RFVl9FUlJPUigNCj4gKwkJCWRldiwgIndyaXRlIHJlZ1sweCV4XSA9IDB4 JXggbWFzayA9IDB4JXggZmFpbGVkIGVyciAlZCIsDQo+ICsJCQlyZWcsIHZhbHVlLCBtYXNrLCBl cnIpOw0KPiArCQlyZXR1cm4gZXJyOw0KPiArCX0NCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0K PiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfZGVidWdfcHJpbnQoc3RydWN0IGl0NjUwNSAqaXQ2 NTA1LCB1bnNpZ25lZCBpbnQgcmVnLA0KPiArCQkJICAgICBjb25zdCBjaGFyICpwcmVmaXgpDQo+ ICt7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsJ aW50IHZhbDsNCj4gKw0KPiArCWlmIChsaWtlbHkoIShfX2RybV9kZWJ1ZyAmIERSTV9VVF9EUklW RVIpKSkNCj4gKwkJcmV0dXJuOw0KPiArDQo+ICsJdmFsID0gaXQ2NTA1X3JlYWQoaXQ2NTA1LCBy ZWcpOw0KPiArCWlmICh2YWwgPCAwKQ0KPiArCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICIl cyByZWdbJTAyeF0gcmVhZCBlcnJvciAoJWQpIiwNCj4gKwkJCQkgICAgIHByZWZpeCwgcmVnLCB2 YWwpOw0KPiArCWVsc2UNCj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiJXMgcmVnWyUw MnhdID0gMHglMDJ4IiwgcHJlZml4LCByZWcsDQo+ICsJCQkJICAgICB2YWwpOw0KPiArfQ0KPiAr DQo+ICtzdGF0aWMgaW50IGl0NjUwNV9kcGNkX3JlYWQoc3RydWN0IGl0NjUwNSAqaXQ2NTA1LCB1 bnNpZ25lZCBsb25nIG9mZnNldCkNCj4gK3sNCj4gKwl1OCB2YWx1ZTsNCj4gKwlpbnQgcmV0Ow0K PiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KPiArDQo+ICsJ cmV0ID0gZHJtX2RwX2RwY2RfcmVhZGIoJml0NjUwNS0+YXV4LCBvZmZzZXQsICZ2YWx1ZSk7DQo+ ICsJaWYgKHJldCA8IDApIHsNCj4gKwkJRFJNX0RFVl9FUlJPUihkZXYsICJEUENEIHJlYWQgZmFp bGVkIFsweCVseF0gcmV0OiAlZCIsIG9mZnNldCwNCj4gKwkJCSAgICAgIHJldCk7DQo+ICsJCXJl dHVybiByZXQ7DQo+ICsJfQ0KPiArCXJldHVybiB2YWx1ZTsNCj4gK30NCj4gKw0KPiArc3RhdGlj IGludCBpdDY1MDVfZHBjZF93cml0ZShzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUsIHVuc2lnbmVkIGxv bmcgb2Zmc2V0LA0KPiArCQkJICAgICB1bnNpZ25lZCBsb25nIGRhdGFpbikNCj4gK3sNCj4gKwlp bnQgcmV0Ow0KPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0K PiArDQo+ICsJcmV0ID0gZHJtX2RwX2RwY2Rfd3JpdGViKCZpdDY1MDUtPmF1eCwgb2Zmc2V0LCBk YXRhaW4pOw0KPiArCWlmIChyZXQgPCAwKSB7DQo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAiRFBD RCB3cml0ZSBmYWlsZWQgWzB4JWx4XSByZXQ6ICVkIiwgb2Zmc2V0LA0KPiArCQkJICAgICAgcmV0 KTsNCj4gKwkJcmV0dXJuIHJldDsNCj4gKwl9DQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4g K3N0YXRpYyBpbnQgaXQ2NTA1X2dldF9kcGNkKHN0cnVjdCBpdDY1MDUgKml0NjUwNSwgaW50IG9m ZnNldCwgdTggKmRwY2QsIGludCBudW0pDQo+ICt7DQo+ICsJaW50IHJldDsNCj4gKwlzdHJ1Y3Qg ZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCj4gKw0KPiArCXJldCA9IGRybV9k cF9kcGNkX3JlYWQoJml0NjUwNS0+YXV4LCBvZmZzZXQsIGRwY2QsIG51bSk7DQo+ICsNCj4gKwlp ZiAocmV0IDwgMCkNCj4gKwkJcmV0dXJuIHJldDsNCj4gKw0KPiArCURSTV9ERVZfREVCVUdfRFJJ VkVSKGRldiwgInJldCA9ICVkIERQQ0RbMHgleF0gPSAweCUqcGgiLCByZXQsIG9mZnNldCwNCj4g KwkJCSAgICAgbnVtLCBkcGNkKTsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtz dGF0aWMgdm9pZCBpdDY1MDVfZHVtcChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJ dW5zaWduZWQgaW50IGksIGo7DQo+ICsJdTggcmVnc1sxNl07DQo+ICsJc3RydWN0IGRldmljZSAq ZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsNCj4gKwlmb3IgKGkgPSAwOyBpIDw9IDB4 ZmY7IGkgKz0gMTYpIHsNCj4gKwkJZm9yIChqID0gMDsgaiA8IDE2OyBqKyspDQo+ICsJCQlyZWdz W2pdID0gaXQ2NTA1X3JlYWQoaXQ2NTA1LCBpICsgaik7DQo+ICsNCj4gKwkJRFJNX0RFVl9ERUJV R19EUklWRVIoZGV2LCAiWzB4JTAyeF0gPSAlMTZwaCIsIGksIHJlZ3MpOw0KPiArCX0NCj4gK30N Cj4gKw0KPiArc3RhdGljIGJvb2wgaXQ2NTA1X2dldF9zaW5rX2hwZF9zdGF0dXMoc3RydWN0IGl0 NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCWludCByZWdfMGQ7DQo+ICsNCj4gKwlyZWdfMGQgPSBp dDY1MDVfcmVhZChpdDY1MDUsIFJFR19TWVNURU1fU1RTKTsNCj4gKw0KPiArCWlmIChyZWdfMGQg PCAwKQ0KPiArCQlyZXR1cm4gZmFsc2U7DQo+ICsNCj4gKwlyZXR1cm4gISEocmVnXzBkICYgSFBE X1NUUyk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgaXQ2NTA1X3JlYWRfd29yZChzdHJ1Y3Qg aXQ2NTA1ICppdDY1MDUsIHVuc2lnbmVkIGludCByZWcpDQo+ICt7DQo+ICsJaW50IHZhbDAsIHZh bDE7DQo+ICsNCj4gKwl2YWwwID0gaXQ2NTA1X3JlYWQoaXQ2NTA1LCByZWcpOw0KPiArCWlmICh2 YWwwIDwgMCkNCj4gKwkJcmV0dXJuIHZhbDA7DQo+ICsNCj4gKwl2YWwxID0gaXQ2NTA1X3JlYWQo aXQ2NTA1LCByZWcgKyAxKTsNCj4gKwlpZiAodmFsMSA8IDApDQo+ICsJCXJldHVybiB2YWwxOw0K PiArDQo+ICsJcmV0dXJuICh2YWwxIDw8IDgpIHwgdmFsMDsNCj4gK30NCj4gKw0KPiArc3RhdGlj IHZvaWQgaXQ2NTA1X2NhbGNfdmlkZW9faW5mbyhzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7 DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsJaW50 IGhzeW5jX3BvbCwgdnN5bmNfcG9sLCBpbnRlcmxhY2VkOw0KPiArCWludCBodG90YWwsIGhkZXMs IGhkZXcsIGhmcGgsIGhzeW5jdzsNCj4gKwlpbnQgdnRvdGFsLCB2ZGVzLCB2ZGV3LCB2ZnBoLCB2 c3luY3c7DQo+ICsJaW50IHJkZGF0YSwgaSwgcGNsaywgc3VtID0gMDsNCj4gKw0KPiArCXVzbGVl cF9yYW5nZSgxMDAwMCwgMTUwMDApOw0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19CQU5L X1NFTCwgMHgwMCk7DQo+ICsJcmRkYXRhID0gaXQ2NTA1X3JlYWQoaXQ2NTA1LCBSRUdfSU5QVVRf Q1RSTCk7DQo+ICsJaHN5bmNfcG9sID0gcmRkYXRhICYgSU5QVVRfSFNZTkNfUE9MOw0KPiArCXZz eW5jX3BvbCA9IChyZGRhdGEgJiBJTlBVVF9WU1lOQ19QT0wpID4+IDI7DQo+ICsJaW50ZXJsYWNl ZCA9IChyZGRhdGEgJiBJTlBVVF9JTlRFUkxBQ0VEKSA+PiA0Ow0KPiArDQo+ICsJaHRvdGFsID0g aXQ2NTA1X3JlYWRfd29yZChpdDY1MDUsIFJFR19JTlBVVF9IVE9UQUwpICYgMHgxRkZGOw0KPiAr CWhkZXMgPSBpdDY1MDVfcmVhZF93b3JkKGl0NjUwNSwgUkVHX0lOUFVUX0hBQ1RJVkVfU1RBUlQp ICYgMHgxRkZGOw0KPiArCWhkZXcgPSBpdDY1MDVfcmVhZF93b3JkKGl0NjUwNSwgUkVHX0lOUFVU X0hBQ1RJVkVfV0lEVEgpICYgMHgxRkZGOw0KPiArCWhmcGggPSBpdDY1MDVfcmVhZF93b3JkKGl0 NjUwNSwgUkVHX0lOUFVUX0hGUk9OVF9QT1JDSCkgJiAweDFGRkY7DQo+ICsJaHN5bmN3ID0gaXQ2 NTA1X3JlYWRfd29yZChpdDY1MDUsIFJFR19JTlBVVF9IU1lOQ19XSURUSCkgJiAweDFGRkY7DQo+ ICsNCj4gKwl2dG90YWwgPSBpdDY1MDVfcmVhZF93b3JkKGl0NjUwNSwgUkVHX0lOUFVUX1ZUT1RB TCkgJiAweEZGRjsNCj4gKwl2ZGVzID0gaXQ2NTA1X3JlYWRfd29yZChpdDY1MDUsIFJFR19JTlBV VF9WQUNUSVZFX1NUQVJUKSAmIDB4RkZGOw0KPiArCXZkZXcgPSBpdDY1MDVfcmVhZF93b3JkKGl0 NjUwNSwgUkVHX0lOUFVUX1ZBQ1RJVkVfV0lEVEgpICYgMHhGRkY7DQo+ICsJdmZwaCA9IGl0NjUw NV9yZWFkX3dvcmQoaXQ2NTA1LCBSRUdfSU5QVVRfVkZST05UX1BPUkNIKSAmIDB4RkZGOw0KPiAr CXZzeW5jdyA9IGl0NjUwNV9yZWFkX3dvcmQoaXQ2NTA1LCBSRUdfSU5QVVRfVlNZTkNfV0lEVEgp ICYgMHhGRkY7DQo+ICsNCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJoc3luY19wb2w6 JWQsIHZzeW5jX3BvbDolZCwgaW50ZXJsYWNlZDolZCIsDQo+ICsJCQkgICAgIGhzeW5jX3BvbCwg dnN5bmNfcG9sLCBpbnRlcmxhY2VkKTsNCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJo YWN0aXZlX3N0YXJ0OiVkLCB2YWN0aXZlX3N0YXJ0OiVkIiwNCj4gKwkJCSAgICAgaGRlcywgdmRl cyk7DQo+ICsNCj4gKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgew0KPiArCQlpdDY1MDVfc2V0 X2JpdHMoaXQ2NTA1LCBSRUdfREFUQV9DVFJMMCwgRU5BQkxFX1BDTEtfQ09VTlRFUiwNCj4gKwkJ CQlFTkFCTEVfUENMS19DT1VOVEVSKTsNCj4gKwkJdXNsZWVwX3JhbmdlKDEwMDAwLCAxNTAwMCk7 DQo+ICsJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19EQVRBX0NUUkwwLCBFTkFCTEVfUENM S19DT1VOVEVSLA0KPiArCQkJCTB4MDApOw0KPiArCQlyZGRhdGEgPSBpdDY1MDVfcmVhZF93b3Jk KGl0NjUwNSwgUkVHX1BDTEtfQ09VTlRFUl9WQUxVRSkgJg0KPiArCQkJIDB4RkZGOw0KPiArDQo+ ICsJCXN1bSArPSByZGRhdGE7DQo+ICsJfQ0KPiArDQo+ICsJaWYgKHN1bSA9PSAwKSB7DQo+ICsJ CURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImNhbGMgdmlkZW8gdGltaW5nIGVycm9yIik7DQo+ ICsJCXJldHVybjsNCj4gKwl9DQo+ICsNCj4gKwlzdW0gLz0gMTA7DQo+ICsJcGNsayA9IDEzNTAw ICogMjA0OCAvIHN1bTsNCj4gKwlpdDY1MDUtPnZpZGVvX2luZm8uY2xvY2sgPSBwY2xrOw0KPiAr CWl0NjUwNS0+dmlkZW9faW5mby5oZGlzcGxheSA9IGhkZXc7DQo+ICsJaXQ2NTA1LT52aWRlb19p bmZvLmhzeW5jX3N0YXJ0ID0gaGRldyArIGhmcGg7DQo+ICsJaXQ2NTA1LT52aWRlb19pbmZvLmhz eW5jX2VuZCA9IGhkZXcgKyBoZnBoICsgaHN5bmN3Ow0KPiArCWl0NjUwNS0+dmlkZW9faW5mby5o dG90YWwgPSBodG90YWw7DQo+ICsJaXQ2NTA1LT52aWRlb19pbmZvLnZkaXNwbGF5ID0gdmRldzsN Cj4gKwlpdDY1MDUtPnZpZGVvX2luZm8udnN5bmNfc3RhcnQgPSB2ZGV3ICsgdmZwaDsNCj4gKwlp dDY1MDUtPnZpZGVvX2luZm8udnN5bmNfZW5kID0gdmRldyArIHZmcGggKyB2c3luY3c7DQo+ICsJ aXQ2NTA1LT52aWRlb19pbmZvLnZ0b3RhbCA9IHZ0b3RhbDsNCj4gKw0KPiArCURSTV9ERVZfREVC VUdfRFJJVkVSKGRldiwgRFJNX01PREVfRk1ULA0KPiArCQkJICAgICBEUk1fTU9ERV9BUkcoJml0 NjUwNS0+dmlkZW9faW5mbykpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGl0NjUwNV9kcm1f ZHBfbGlua19wcm9iZShzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4LA0KPiArCQkJCSAgICBzdHJ1Y3Qg aXQ2NTA1X2RybV9kcF9saW5rICpsaW5rKQ0KPiArew0KPiArCXU4IHZhbHVlc1szXTsNCj4gKwlp bnQgZXJyOw0KPiArDQo+ICsJbWVtc2V0KGxpbmssIDAsIHNpemVvZigqbGluaykpOw0KPiArDQo+ ICsJZXJyID0gZHJtX2RwX2RwY2RfcmVhZChhdXgsIERQX0RQQ0RfUkVWLCB2YWx1ZXMsIHNpemVv Zih2YWx1ZXMpKTsNCj4gKwlpZiAoZXJyIDwgMCkNCj4gKwkJcmV0dXJuIGVycjsNCj4gKw0KPiAr CWxpbmstPnJldmlzaW9uID0gdmFsdWVzWzBdOw0KPiArCWxpbmstPnJhdGUgPSBkcm1fZHBfYndf Y29kZV90b19saW5rX3JhdGUodmFsdWVzWzFdKTsNCj4gKwlsaW5rLT5udW1fbGFuZXMgPSB2YWx1 ZXNbMl0gJiBEUF9NQVhfTEFORV9DT1VOVF9NQVNLOw0KPiArDQo+ICsJaWYgKHZhbHVlc1syXSAm IERQX0VOSEFOQ0VEX0ZSQU1FX0NBUCkNCj4gKwkJbGluay0+Y2FwYWJpbGl0aWVzID0gMTsNCj4g Kw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGl0NjUwNV9kcm1fZHBf bGlua19wb3dlcl91cChzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4LA0KPiArCQkJCSAgICAgICBzdHJ1 Y3QgaXQ2NTA1X2RybV9kcF9saW5rICpsaW5rKQ0KPiArew0KPiArCXU4IHZhbHVlOw0KPiArCWlu dCBlcnI7DQo+ICsNCj4gKwkvKiBEUF9TRVRfUE9XRVIgcmVnaXN0ZXIgaXMgb25seSBhdmFpbGFi bGUgb24gRFBDRCB2MS4xIGFuZCBsYXRlciAqLw0KPiArCWlmIChsaW5rLT5yZXZpc2lvbiA8IDB4 MTEpDQo+ICsJCXJldHVybiAwOw0KPiArDQo+ICsJZXJyID0gZHJtX2RwX2RwY2RfcmVhZGIoYXV4 LCBEUF9TRVRfUE9XRVIsICZ2YWx1ZSk7DQo+ICsJaWYgKGVyciA8IDApDQo+ICsJCXJldHVybiBl cnI7DQo+ICsNCj4gKwl2YWx1ZSAmPSB+RFBfU0VUX1BPV0VSX01BU0s7DQo+ICsJdmFsdWUgfD0g RFBfU0VUX1BPV0VSX0QwOw0KPiArDQo+ICsJZXJyID0gZHJtX2RwX2RwY2Rfd3JpdGViKGF1eCwg RFBfU0VUX1BPV0VSLCB2YWx1ZSk7DQo+ICsJaWYgKGVyciA8IDApDQo+ICsJCXJldHVybiBlcnI7 DQo+ICsNCj4gKwkvKg0KPiArCSAqIEFjY29yZGluZyB0byB0aGUgRFAgMS4xIHNwZWNpZmljYXRp b24sIGEgIlNpbmsgRGV2aWNlIG11c3QgZXhpdCB0aGUNCj4gKwkgKiBwb3dlciBzYXZpbmcgc3Rh dGUgd2l0aGluIDEgbXMiIChTZWN0aW9uIDIuNS4zLjEsIFRhYmxlIDUtNTIsICJTaW5rDQo+ICsJ ICogQ29udHJvbCBGaWVsZCIgKHJlZ2lzdGVyIDB4NjAwKS4NCj4gKwkgKi8NCj4gKwl1c2xlZXBf cmFuZ2UoMTAwMCwgMjAwMCk7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3Rh dGljIHZvaWQgaXQ2NTA1X2NsZWFyX2ludChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0JBTktfU0VMLCAweDAwKTsNCj4gKwlpdDY1MDVf d3JpdGUoaXQ2NTA1LCBJTlRfU1RBVFVTXzAxLCAweEZGKTsNCj4gKwlpdDY1MDVfd3JpdGUoaXQ2 NTA1LCBJTlRfU1RBVFVTXzAyLCAweEZGKTsNCj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBJTlRf U1RBVFVTXzAzLCAweEZGKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X2ludF9t YXNrX2VuYWJsZShzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJaXQ2NTA1X3dyaXRl KGl0NjUwNSwgUkVHX0JBTktfU0VMLCAweDAwKTsNCj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBJ TlRfTUFTS18wMSwgMHgxRik7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgSU5UX01BU0tfMDIs IDB4MDcpOw0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIElOVF9NQVNLXzAzLCAweEIwKTsNCj4g K30NCj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X2ludF9tYXNrX2Rpc2FibGUoc3RydWN0IGl0 NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19CQU5LX1NF TCwgMHgwMCk7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgSU5UX01BU0tfMDEsIDB4MDApOw0K PiArCWl0NjUwNV93cml0ZShpdDY1MDUsIElOVF9NQVNLXzAyLCAweDAwKTsNCj4gKwlpdDY1MDVf d3JpdGUoaXQ2NTA1LCBJTlRfTUFTS18wMywgMHgwMCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2 b2lkIGl0NjUwNV9sYW5lX3Rlcm1pbmF0aW9uX29uKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCj4g K3sNCj4gKwlpbnQgcmVnY2Y7DQo+ICsNCj4gKwlyZWdjZiA9IGl0NjUwNV9yZWFkKGl0NjUwNSwg UkVHX1VTRVJfRFJWX1BSRSk7DQo+ICsNCj4gKwlpZiAocmVnY2YgPT0gMHhGMCkNCj4gKwkJaXQ2 NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0RSVl9MTl9EQVRBX1NFTCwgMHg4MCwgMHgwMCk7DQo+ ICsNCj4gKwlpZiAocmVnY2YgPT0gMHg3MCkgew0KPiArCQlpZiAoaXQ2NTA1LT5sYW5lX3N3YXAp IHsNCj4gKwkJCXN3aXRjaCAoaXQ2NTA1LT5sYW5lX2NvdW50KSB7DQo+ICsJCQljYXNlIDE6DQo+ ICsJCQljYXNlIDI6DQo+ICsJCQkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0RSVl9MTl9E QVRBX1NFTCwNCj4gKwkJCQkJCTB4MEMsIDB4MDgpOw0KPiArCQkJCWJyZWFrOw0KPiArCQkJZGVm YXVsdDoNCj4gKwkJCQlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfRFJWX0xOX0RBVEFfU0VM LA0KPiArCQkJCQkJMHgwQywgMHgwQyk7DQo+ICsJCQkJYnJlYWs7DQo+ICsJCQl9DQo+ICsJCX0g ZWxzZSB7DQo+ICsJCQlzd2l0Y2ggKGl0NjUwNS0+bGFuZV9jb3VudCkgew0KPiArCQkJY2FzZSAx Og0KPiArCQkJY2FzZSAyOg0KPiArCQkJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19EUlZf TE5fREFUQV9TRUwsDQo+ICsJCQkJCQkweDBDLCAweDA0KTsNCj4gKwkJCQlicmVhazsNCj4gKwkJ CWRlZmF1bHQ6DQo+ICsJCQkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0RSVl9MTl9EQVRB X1NFTCwNCj4gKwkJCQkJCTB4MEMsIDB4MEMpOw0KPiArCQkJCWJyZWFrOw0KPiArCQkJfQ0KPiAr CQl9DQo+ICsJfQ0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfbGFuZV90ZXJtaW5h dGlvbl9vZmYoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCWludCByZWdjZjsNCj4g Kw0KPiArCXJlZ2NmID0gaXQ2NTA1X3JlYWQoaXQ2NTA1LCBSRUdfVVNFUl9EUlZfUFJFKTsNCj4g Kw0KPiArCWlmIChyZWdjZiA9PSAweEYwKQ0KPiArCQlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBS RUdfRFJWX0xOX0RBVEFfU0VMLCAweDgwLCAweDgwKTsNCj4gKw0KPiArCWlmIChyZWdjZiA9PSAw eDcwKQ0KPiArCQlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfRFJWX0xOX0RBVEFfU0VMLCAw eDBDLCAweDAwKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X2xhbmVfcG93ZXJf b24oc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCWl0NjUwNV9zZXRfYml0cyhpdDY1 MDUsIFJFR19MSU5LX0RSViwgMHhGMSwNCj4gKwkJCShpdDY1MDUtPmxhbmVfc3dhcCA/DQo+ICsJ CQkJIEdFTk1BU0soNywgOCAtIGl0NjUwNS0+bGFuZV9jb3VudCkgOg0KPiArCQkJCSBHRU5NQVNL KDMgKyBpdDY1MDUtPmxhbmVfY291bnQsIDQpKSB8DQo+ICsJCQkJMHgwMSk7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9sYW5lX3Bvd2VyX29mZihzdHJ1Y3QgaXQ2NTA1ICppdDY1 MDUpDQo+ICt7DQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0xJTktfRFJWLCAweEYw LCAweDAwKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X2xhbmVfb2ZmKHN0cnVj dCBpdDY1MDUgKml0NjUwNSkNCj4gK3sNCj4gKwlpdDY1MDVfbGFuZV9wb3dlcl9vZmYoaXQ2NTA1 KTsNCj4gKwlpdDY1MDVfbGFuZV90ZXJtaW5hdGlvbl9vZmYoaXQ2NTA1KTsNCj4gK30NCj4gKw0K PiArc3RhdGljIHZvaWQgaXQ2NTA1X2F1eF90ZXJtaW5hdGlvbl9vbihzdHJ1Y3QgaXQ2NTA1ICpp dDY1MDUpDQo+ICt7DQo+ICsJaW50IHJlZ2NmOw0KPiArDQo+ICsJcmVnY2YgPSBpdDY1MDVfcmVh ZChpdDY1MDUsIFJFR19VU0VSX0RSVl9QUkUpOw0KPiArDQo+ICsJaWYgKHJlZ2NmID09IDB4RjAp DQo+ICsJCWl0NjUwNV9sYW5lX3Rlcm1pbmF0aW9uX29uKGl0NjUwNSk7DQo+ICsNCj4gKwlpZiAo cmVnY2YgPT0gMHg3MCkNCj4gKwkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0RSVl9MTl9E QVRBX1NFTCwgMHg4MCwgMHg4MCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9h dXhfcG93ZXJfb24oc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCWl0NjUwNV9zZXRf Yml0cyhpdDY1MDUsIFJFR19BVVgsIDB4MDIsIDB4MDIpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMg dm9pZCBpdDY1MDVfYXV4X29uKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCj4gK3sNCj4gKwlpdDY1 MDVfYXV4X3Bvd2VyX29uKGl0NjUwNSk7DQo+ICsJaXQ2NTA1X2F1eF90ZXJtaW5hdGlvbl9vbihp dDY1MDUpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfYXV4X3Jlc2V0KHN0cnVj dCBpdDY1MDUgKml0NjUwNSkNCj4gK3sNCj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdf UkVTRVRfQ1RSTCwgQVVYX1JFU0VULCBBVVhfUkVTRVQpOw0KPiArCWl0NjUwNV9zZXRfYml0cyhp dDY1MDUsIFJFR19SRVNFVF9DVFJMLCBBVVhfUkVTRVQsIDB4MDApOw0KPiArfQ0KPiArDQo+ICtz dGF0aWMgdm9pZCBpdDY1MDVfcmVzZXRfbG9naWMoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiAr ew0KPiArCXJlZ21hcF93cml0ZShpdDY1MDUtPnJlZ21hcCwgUkVHX1JFU0VUX0NUUkwsIEFMTF9M T0dJQ19SRVNFVCk7DQo+ICsJdXNsZWVwX3JhbmdlKDEwMDAsIDE1MDApOw0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgYm9vbCBpdDY1MDVfYXV4X29wX2ZpbmlzaGVkKHN0cnVjdCBpdDY1MDUgKml0NjUw NSkNCj4gK3sNCj4gKwlpbnQgcmVnMmIgPSBpdDY1MDVfcmVhZChpdDY1MDUsIFJFR19BVVhfQ01E X1JFUSk7DQo+ICsNCj4gKwlpZiAocmVnMmIgPCAwKQ0KPiArCQlyZXR1cm4gZmFsc2U7DQo+ICsN Cj4gKwlyZXR1cm4gKHJlZzJiICYgQVVYX0JVU1kpID09IDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRp YyBpbnQgaXQ2NTA1X2F1eF93YWl0KHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCj4gK3sNCj4gKwlp bnQgc3RhdHVzOw0KPiArCXVuc2lnbmVkIGxvbmcgdGltZW91dDsNCj4gKwlzdHJ1Y3QgZGV2aWNl ICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCj4gKw0KPiArCXRpbWVvdXQgPSBqaWZmaWVz ICsgbXNlY3NfdG9famlmZmllcyhBVVhfV0FJVF9USU1FT1VUX01TKSArIDE7DQo+ICsNCj4gKwl3 aGlsZSAoIWl0NjUwNV9hdXhfb3BfZmluaXNoZWQoaXQ2NTA1KSkgew0KPiArCQlpZiAodGltZV9h ZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgew0KPiArCQkJRFJNX0RFVl9FUlJPUihkZXYsICJUaW1l ZCBvdXQgd2FpdGluZyBBVVggdG8gZmluaXNoIik7DQo+ICsJCQlyZXR1cm4gLUVUSU1FRE9VVDsN Cj4gKwkJfQ0KPiArCQl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7DQo+ICsJfQ0KPiArDQo+ICsJ c3RhdHVzID0gaXQ2NTA1X3JlYWQoaXQ2NTA1LCBSRUdfQVVYX0VSUk9SX1NUUyk7DQo+ICsJaWYg KHN0YXR1cyA8IDApIHsNCj4gKwkJRFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gcmVhZCBB VVggY2hhbm5lbDogJWQiLCBzdGF0dXMpOw0KPiArCQlyZXR1cm4gc3RhdHVzOw0KPiArCX0NCj4g Kw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgc3NpemVfdCBpdDY1MDVfYXV4 X29wZXJhdGlvbihzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUsDQo+ICsJCQkJICAgIGVudW0gYXV4X2Nt ZF90eXBlIGNtZCwNCj4gKwkJCQkgICAgdW5zaWduZWQgaW50IGFkZHJlc3MsIHU4ICpidWZmZXIs DQo+ICsJCQkJICAgIHNpemVfdCBzaXplLCBlbnVtIGF1eF9jbWRfcmVwbHkgKnJlcGx5KQ0KPiAr ew0KPiArCWludCBpLCByZXQ7DQo+ICsJYm9vbCBhdXhfd3JpdGVfY2hlY2sgPSBmYWxzZTsNCj4g Kw0KPiArCWlmICghaXQ2NTA1X2dldF9zaW5rX2hwZF9zdGF0dXMoaXQ2NTA1KSkNCj4gKwkJcmV0 dXJuIC1FSU87DQo+ICsNCj4gKwkvKiBzZXQgQVVYIHVzZXIgbW9kZSAqLw0KPiArCWl0NjUwNV9z ZXRfYml0cyhpdDY1MDUsIFJFR19BVVhfQ1RSTCwgQVVYX1VTRVJfTU9ERSwgQVVYX1VTRVJfTU9E RSk7DQo+ICsNCj4gK2F1eF9vcF9zdGFydDoNCj4gKwlpZiAoY21kID09IENNRF9BVVhfSTJDX0VE SURfUkVBRCkgew0KPiArCQkvKiBBVVggRURJRCBGSUZPIGhhcyBtYXggbGVuZ3RoIG9mIEFVWF9G SUZPX01BWF9TSVpFIGJ5dGVzLiAqLw0KPiArCQlzaXplID0gbWluX3Qoc2l6ZV90LCBzaXplLCBB VVhfRklGT19NQVhfU0laRSk7DQo+ICsJCS8qIEVuYWJsZSBBVVggRklGTyByZWFkIGJhY2sgYW5k IGNsZWFyIEZJRk8gKi8NCj4gKwkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0FVWF9DVFJM LA0KPiArCQkJCUFVWF9FTl9GSUZPX1JFQUQgfCBDTFJfRURJRF9GSUZPLA0KPiArCQkJCUFVWF9F Tl9GSUZPX1JFQUQgfCBDTFJfRURJRF9GSUZPKTsNCj4gKw0KPiArCQlpdDY1MDVfc2V0X2JpdHMo aXQ2NTA1LCBSRUdfQVVYX0NUUkwsDQo+ICsJCQkJQVVYX0VOX0ZJRk9fUkVBRCB8IENMUl9FRElE X0ZJRk8sDQo+ICsJCQkJQVVYX0VOX0ZJRk9fUkVBRCk7DQo+ICsJfSBlbHNlIHsNCj4gKwkJLyog VGhlIERQIEFVWCB0cmFuc21pdCBidWZmZXIgaGFzIDQgYnl0ZXMuICovDQo+ICsJCXNpemUgPSBt aW5fdChzaXplX3QsIHNpemUsIDQpOw0KPiArCQlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdf QVVYX0NUUkwsIEFVWF9OT19TRUdNRU5UX1dSLA0KPiArCQkJCUFVWF9OT19TRUdNRU5UX1dSKTsN Cj4gKwl9DQo+ICsNCj4gKwkvKiBTdGFydCBBZGRyZXNzWzc6MF0gKi8NCj4gKwlpdDY1MDVfd3Jp dGUoaXQ2NTA1LCBSRUdfQVVYX0FEUl8wXzcsIChhZGRyZXNzID4+IDApICYgMHhGRik7DQo+ICsJ LyogU3RhcnQgQWRkcmVzc1sxNTo4XSAqLw0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19B VVhfQURSXzhfMTUsIChhZGRyZXNzID4+IDgpICYgMHhGRik7DQo+ICsJLyogV3JpdGVOdW1bMzow XStTdGFydEFkclsxOToxNl0gKi8NCj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQVVYX0FE Ul8xNl8xOSwNCj4gKwkJICAgICAoKGFkZHJlc3MgPj4gMTYpICYgMHgwRikgfCAoKHNpemUgLSAx KSA8PCA0KSk7DQo+ICsNCj4gKwlpZiAoY21kID09IENNRF9BVVhfTkFUSVZFX1dSSVRFKQ0KPiAr CQlyZWdtYXBfYnVsa193cml0ZShpdDY1MDUtPnJlZ21hcCwgUkVHX0FVWF9PVVRfREFUQTAsIGJ1 ZmZlciwNCj4gKwkJCQkgIHNpemUpOw0KPiArDQo+ICsJLyogQXV4IEZpcmUgKi8NCj4gKwlpdDY1 MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQVVYX0NNRF9SRVEsIGNtZCk7DQo+ICsNCj4gKwlyZXQgPSBp dDY1MDVfYXV4X3dhaXQoaXQ2NTA1KTsNCj4gKwlpZiAocmV0IDwgMCkNCj4gKwkJZ290byBhdXhf b3BfZXJyOw0KPiArDQo+ICsJcmV0ID0gaXQ2NTA1X3JlYWQoaXQ2NTA1LCBSRUdfQVVYX0VSUk9S X1NUUyk7DQo+ICsJaWYgKHJldCA8IDApDQo+ICsJCWdvdG8gYXV4X29wX2VycjsNCj4gKw0KPiAr CXN3aXRjaCAoKHJldCA+PiA2KSAmIDB4Mykgew0KPiArCWNhc2UgMDoNCj4gKwkJKnJlcGx5ID0g UkVQTFlfQUNLOw0KPiArCQlicmVhazsNCj4gKwljYXNlIDE6DQo+ICsJCSpyZXBseSA9IFJFUExZ X0RFRkVSOw0KPiArCQlyZXQgPSAtRUFHQUlOOw0KPiArCQlnb3RvIGF1eF9vcF9lcnI7DQo+ICsJ Y2FzZSAyOg0KPiArCQkqcmVwbHkgPSBSRVBMWV9OQUNLOw0KPiArCQlyZXQgPSAtRUlPOw0KPiAr CQlnb3RvIGF1eF9vcF9lcnI7DQo+ICsJY2FzZSAzOg0KPiArCQlyZXQgPSAtRVRJTUVET1VUOw0K PiArCQlnb3RvIGF1eF9vcF9lcnI7DQo+ICsJfQ0KPiArDQo+ICsJLyogUmVhZCBiYWNrIE5hdGl2 ZSBXcml0ZSBkYXRhICovDQo+ICsJaWYgKGNtZCA9PSBDTURfQVVYX05BVElWRV9XUklURSkgew0K PiArCQlhdXhfd3JpdGVfY2hlY2sgPSB0cnVlOw0KPiArCQljbWQgPSBDTURfQVVYX05BVElWRV9S RUFEOw0KPiArCQlnb3RvIGF1eF9vcF9zdGFydDsNCj4gKwl9DQo+ICsNCj4gKwlpZiAoY21kID09 IENNRF9BVVhfSTJDX0VESURfUkVBRCkgew0KPiArCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsr KSB7DQo+ICsJCQlyZXQgPSBpdDY1MDVfcmVhZChpdDY1MDUsIFJFR19BVVhfREFUQV9GSUZPKTsN Cj4gKwkJCWlmIChyZXQgPCAwKQ0KPiArCQkJCWdvdG8gYXV4X29wX2VycjsNCj4gKwkJCWJ1ZmZl cltpXSA9IHJldDsNCj4gKwkJfQ0KPiArCX0gZWxzZSB7DQo+ICsJCWZvciAoaSA9IDA7IGkgPCBz aXplOyBpKyspIHsNCj4gKwkJCXJldCA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgUkVHX0FVWF9EQVRB XzBfNyArIGkpOw0KPiArCQkJaWYgKHJldCA8IDApDQo+ICsJCQkJZ290byBhdXhfb3BfZXJyOw0K PiArDQo+ICsJCQlpZiAoYXV4X3dyaXRlX2NoZWNrICYmIGJ1ZmZlcltzaXplIC0gMSAtIGldICE9 IHJldCkgew0KPiArCQkJCXJldCA9IC1FSU5WQUw7DQo+ICsJCQkJZ290byBhdXhfb3BfZXJyOw0K PiArCQkJfQ0KPiArDQo+ICsJCQlidWZmZXJbc2l6ZSAtIDEgLSBpXSA9IHJldDsNCj4gKwkJfQ0K PiArCX0NCj4gKw0KPiArCXJldCA9IGk7DQo+ICsNCj4gK2F1eF9vcF9lcnI6DQo+ICsJaWYgKGNt ZCA9PSBDTURfQVVYX0kyQ19FRElEX1JFQUQpIHsNCj4gKwkJLyogY2xlYXIgQVVYIEZJRk8gKi8N Cj4gKwkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0FVWF9DVFJMLA0KPiArCQkJCUFVWF9F Tl9GSUZPX1JFQUQgfCBDTFJfRURJRF9GSUZPLA0KPiArCQkJCUFVWF9FTl9GSUZPX1JFQUQgfCBD TFJfRURJRF9GSUZPKTsNCj4gKwkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0FVWF9DVFJM LA0KPiArCQkJCUFVWF9FTl9GSUZPX1JFQUQgfCBDTFJfRURJRF9GSUZPLCAweDAwKTsNCj4gKwl9 DQo+ICsNCj4gKwkvKiBMZWF2ZSBBVVggdXNlciBtb2RlICovDQo+ICsJaXQ2NTA1X3NldF9iaXRz KGl0NjUwNSwgUkVHX0FVWF9DVFJMLCBBVVhfVVNFUl9NT0RFLCAwKTsNCj4gKw0KPiArCXJldHVy biByZXQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBzc2l6ZV90IGl0NjUwNV9hdXhfZG9fdHJhbnNm ZXIoc3RydWN0IGl0NjUwNSAqaXQ2NTA1LA0KPiArCQkJCSAgICAgIGVudW0gYXV4X2NtZF90eXBl IGNtZCwNCj4gKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgYWRkcmVzcywgdTggKmJ1ZmZlciwNCj4g KwkJCQkgICAgICBzaXplX3Qgc2l6ZSwgZW51bSBhdXhfY21kX3JlcGx5ICpyZXBseSkNCj4gK3sN Cj4gKwlpbnQgaSwgcmV0X3NpemUsIHJldCA9IDAsIHJlcXVlc3Rfc2l6ZTsNCj4gKw0KPiArCW11 dGV4X2xvY2soJml0NjUwNS0+YXV4X2xvY2spOw0KPiArCWZvciAoaSA9IDA7IGkgPCBzaXplOyBp ICs9IDQpIHsNCj4gKwkJcmVxdWVzdF9zaXplID0gbWluKChpbnQpc2l6ZSAtIGksIDQpOw0KPiAr CQlyZXRfc2l6ZSA9IGl0NjUwNV9hdXhfb3BlcmF0aW9uKGl0NjUwNSwgY21kLCBhZGRyZXNzICsg aSwNCj4gKwkJCQkJCWJ1ZmZlciArIGksIHJlcXVlc3Rfc2l6ZSwNCj4gKwkJCQkJCXJlcGx5KTsN Cj4gKwkJaWYgKHJldF9zaXplIDwgMCkgew0KPiArCQkJcmV0ID0gcmV0X3NpemU7DQo+ICsJCQln b3RvIGF1eF9vcF9lcnI7DQo+ICsJCX0NCj4gKw0KPiArCQlyZXQgKz0gcmV0X3NpemU7DQo+ICsJ fQ0KPiArDQo+ICthdXhfb3BfZXJyOg0KPiArCW11dGV4X3VubG9jaygmaXQ2NTA1LT5hdXhfbG9j ayk7DQo+ICsJcmV0dXJuIHJldDsNCj4gK30NCj4gKw0KPiArc3RhdGljIHNzaXplX3QgaXQ2NTA1 X2F1eF90cmFuc2ZlcihzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4LA0KPiArCQkJCSAgIHN0cnVjdCBk cm1fZHBfYXV4X21zZyAqbXNnKQ0KPiArew0KPiArCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGNv bnRhaW5lcl9vZihhdXgsIHN0cnVjdCBpdDY1MDUsIGF1eCk7DQo+ICsJdTggY21kOw0KPiArCWJv b2wgaXNfaTJjID0gIShtc2ctPnJlcXVlc3QgJiBEUF9BVVhfTkFUSVZFX1dSSVRFKTsNCj4gKwlp bnQgcmV0Ow0KPiArCWVudW0gYXV4X2NtZF9yZXBseSByZXBseTsNCj4gKw0KPiArCS8qIElUNjUw NSBkb2Vzbid0IHN1cHBvcnQgYXJiaXRyYXJ5IEkyQyByZWFkIC8gd3JpdGUuICovDQo+ICsJaWYg KGlzX2kyYykNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsNCj4gKwlzd2l0Y2ggKG1zZy0+cmVx dWVzdCkgew0KPiArCWNhc2UgRFBfQVVYX05BVElWRV9SRUFEOg0KPiArCQljbWQgPSBDTURfQVVY X05BVElWRV9SRUFEOw0KPiArCQlicmVhazsNCj4gKwljYXNlIERQX0FVWF9OQVRJVkVfV1JJVEU6 DQo+ICsJCWNtZCA9IENNRF9BVVhfTkFUSVZFX1dSSVRFOw0KPiArCQlicmVhazsNCj4gKwlkZWZh dWx0Og0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKwl9DQo+ICsNCj4gKwlyZXQgPSBpdDY1MDVf YXV4X2RvX3RyYW5zZmVyKGl0NjUwNSwgY21kLCBtc2ctPmFkZHJlc3MsIG1zZy0+YnVmZmVyLA0K PiArCQkJCSAgICAgbXNnLT5zaXplLCAmcmVwbHkpOw0KPiArCWlmIChyZXQgPCAwKQ0KPiArCQly ZXR1cm4gcmV0Ow0KPiArDQo+ICsJc3dpdGNoIChyZXBseSkgew0KPiArCWNhc2UgUkVQTFlfQUNL Og0KPiArCQltc2ctPnJlcGx5ID0gRFBfQVVYX05BVElWRV9SRVBMWV9BQ0s7DQo+ICsJCWJyZWFr Ow0KPiArCWNhc2UgUkVQTFlfTkFDSzoNCj4gKwkJbXNnLT5yZXBseSA9IERQX0FVWF9OQVRJVkVf UkVQTFlfTkFDSzsNCj4gKwkJYnJlYWs7DQo+ICsJY2FzZSBSRVBMWV9ERUZFUjoNCj4gKwkJbXNn LT5yZXBseSA9IERQX0FVWF9OQVRJVkVfUkVQTFlfREVGRVI7DQo+ICsJCWJyZWFrOw0KPiArCX0N Cj4gKw0KPiArCXJldHVybiByZXQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgaXQ2NTA1X2dl dF9lZGlkX2Jsb2NrKHZvaWQgKmRhdGEsIHU4ICpidWYsIHVuc2lnbmVkIGludCBibG9jaywNCj4g KwkJCQkgc2l6ZV90IGxlbikNCj4gK3sNCj4gKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBkYXRh Ow0KPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KPiArCWVu dW0gYXV4X2NtZF9yZXBseSByZXBseTsNCj4gKwlpbnQgb2Zmc2V0LCByZXQsIGF1eF9yZXRyeSA9 IDEwMDsNCj4gKw0KPiArCWl0NjUwNV9hdXhfcmVzZXQoaXQ2NTA1KTsNCj4gKwlEUk1fREVWX0RF QlVHX0RSSVZFUihkZXYsICJibG9jayBudW1iZXIgPSAlZCIsIGJsb2NrKTsNCj4gKw0KPiArCWZv ciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgRURJRF9MRU5HVEg7KSB7DQo+ICsJCXJldCA9IGl0NjUw NV9hdXhfZG9fdHJhbnNmZXIoaXQ2NTA1LCBDTURfQVVYX0kyQ19FRElEX1JFQUQsDQo+ICsJCQkJ CSAgICAgYmxvY2sgKiBFRElEX0xFTkdUSCArIG9mZnNldCwNCj4gKwkJCQkJICAgICBidWYgKyBv ZmZzZXQsIDgsICZyZXBseSk7DQo+ICsNCj4gKwkJaWYgKHJldCA8IDAgJiYgcmV0ICE9IC1FQUdB SU4pDQo+ICsJCQlyZXR1cm4gcmV0Ow0KPiArDQo+ICsJCXN3aXRjaCAocmVwbHkpIHsNCj4gKwkJ Y2FzZSBSRVBMWV9BQ0s6DQo+ICsJCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJbMHglMDJ4 XTogJThwaCIsIG9mZnNldCwNCj4gKwkJCQkJICAgICBidWYgKyBvZmZzZXQpOw0KPiArCQkJb2Zm c2V0ICs9IDg7DQo+ICsJCQlhdXhfcmV0cnkgPSAxMDA7DQo+ICsJCQlicmVhazsNCj4gKwkJY2Fz ZSBSRVBMWV9OQUNLOg0KPiArCQkJcmV0dXJuIC1FSU87DQo+ICsJCWNhc2UgUkVQTFlfREVGRVI6 DQo+ICsJCQltc2xlZXAoMjApOw0KPiArCQkJaWYgKCEoLS1hdXhfcmV0cnkpKQ0KPiArCQkJCXJl dHVybiAtRUlPOw0KPiArCQl9DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyB2b2lkIGl0NjUwNV92YXJpYWJsZV9jb25maWcoc3RydWN0IGl0NjUwNSAqaXQ2 NTA1KQ0KPiArew0KPiArCWl0NjUwNS0+bGlua19yYXRlX2J3X2NvZGUgPSBIQlI7DQo+ICsJaXQ2 NTA1LT5sYW5lX2NvdW50ID0gTUFYX0xBTkVfQ09VTlQ7DQo+ICsJaXQ2NTA1LT5saW5rX3N0YXRl ID0gTElOS19JRExFOw0KPiArCWl0NjUwNS0+aGRjcF9kZXNpcmVkID0gSERDUF9ERVNJUkVEOw0K PiArCWl0NjUwNS0+YXV0b190cmFpbl9yZXRyeSA9IEFVVE9fVFJBSU5fUkVUUlk7DQo+ICsJaXQ2 NTA1LT5hdWRpby5zZWxlY3QgPSBBVURJT19TRUxFQ1Q7DQo+ICsJaXQ2NTA1LT5hdWRpby5zYW1w bGVfcmF0ZSA9IEFVRElPX1NBTVBMRV9SQVRFOw0KPiArCWl0NjUwNS0+YXVkaW8uY2hhbm5lbF9j b3VudCA9IEFVRElPX0NIQU5ORUxfQ09VTlQ7DQo+ICsJaXQ2NTA1LT5hdWRpby50eXBlID0gQVVE SU9fVFlQRTsNCj4gKwlpdDY1MDUtPmF1ZGlvLmkyc19pbnB1dF9mb3JtYXQgPSBJMlNfSU5QVVRf Rk9STUFUOw0KPiArCWl0NjUwNS0+YXVkaW8uaTJzX2p1c3RpZmllZCA9IEkyU19KVVNUSUZJRUQ7 DQo+ICsJaXQ2NTA1LT5hdWRpby5pMnNfZGF0YV9kZWxheSA9IEkyU19EQVRBX0RFTEFZOw0KPiAr CWl0NjUwNS0+YXVkaW8uaTJzX3dzX2NoYW5uZWwgPSBJMlNfV1NfQ0hBTk5FTDsNCj4gKwlpdDY1 MDUtPmF1ZGlvLmkyc19kYXRhX3NlcXVlbmNlID0gSTJTX0RBVEFfU0VRVUVOQ0U7DQo+ICsJaXQ2 NTA1LT5hdWRpby53b3JkX2xlbmd0aCA9IEFVRElPX1dPUkRfTEVOR1RIOw0KPiArCW1lbXNldChp dDY1MDUtPnNoYTFfaW5wdXQsIDAsIHNpemVvZihpdDY1MDUtPnNoYTFfaW5wdXQpKTsNCj4gKwlt ZW1zZXQoaXQ2NTA1LT5ia3N2cywgMCwgc2l6ZW9mKGl0NjUwNS0+YmtzdnMpKTsNCj4gK30NCj4g Kw0KPiArc3RhdGljIGludCBpdDY1MDVfc2VuZF92aWRlb19pbmZvZnJhbWUoc3RydWN0IGl0NjUw NSAqaXQ2NTA1LA0KPiArCQkJCSAgICAgICBzdHJ1Y3QgaGRtaV9hdmlfaW5mb2ZyYW1lICpmcmFt ZSkNCj4gK3sNCj4gKwl1OCBidWZmZXJbSERNSV9JTkZPRlJBTUVfSEVBREVSX1NJWkUgKyBIRE1J X0FWSV9JTkZPRlJBTUVfU0laRV07DQo+ICsJaW50IGVycjsNCj4gKwlzdHJ1Y3QgZGV2aWNlICpk ZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCj4gKw0KPiArCWVyciA9IGhkbWlfYXZpX2luZm9m cmFtZV9wYWNrKGZyYW1lLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTsNCj4gKwlpZiAoZXJyIDwg MCkgew0KPiArCQlEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBwYWNrIEFWSSBpbmZvZnJh bWU6ICVkIiwgZXJyKTsNCj4gKwkJcmV0dXJuIGVycjsNCj4gKwl9DQo+ICsNCj4gKwllcnIgPSBp dDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfSU5GT0ZSQU1FX0NUUkwsIEVOX0FWSV9QS1QsIDB4 MDApOw0KPiArCWlmIChlcnIpDQo+ICsJCXJldHVybiBlcnI7DQo+ICsNCj4gKwllcnIgPSByZWdt YXBfYnVsa193cml0ZShpdDY1MDUtPnJlZ21hcCwgUkVHX0FWSV9JTkZPX0RCMSwNCj4gKwkJCQli dWZmZXIgKyBIRE1JX0lORk9GUkFNRV9IRUFERVJfU0laRSwNCj4gKwkJCQlmcmFtZS0+bGVuZ3Ro KTsNCj4gKwlpZiAoZXJyKQ0KPiArCQlyZXR1cm4gZXJyOw0KPiArDQo+ICsJZXJyID0gaXQ2NTA1 X3NldF9iaXRzKGl0NjUwNSwgUkVHX0lORk9GUkFNRV9DVFJMLCBFTl9BVklfUEtULA0KPiArCQkJ ICAgICAgRU5fQVZJX1BLVCk7DQo+ICsJaWYgKGVycikNCj4gKwkJcmV0dXJuIGVycjsNCj4gKw0K PiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfZ2V0X2V4dGNv bl9wcm9wZXJ0eShzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJaW50IGVycjsNCj4g Kwl1bmlvbiBleHRjb25fcHJvcGVydHlfdmFsdWUgcHJvcGVydHk7DQo+ICsJc3RydWN0IGRldmlj ZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsNCj4gKwlpZiAoaXQ2NTA1LT5leHRj b24gJiYgIWl0NjUwNS0+bGFuZV9zd2FwX2Rpc2FibGVkKSB7DQo+ICsJCWVyciA9IGV4dGNvbl9n ZXRfcHJvcGVydHkoaXQ2NTA1LT5leHRjb24sIEVYVENPTl9ESVNQX0RQLA0KPiArCQkJCQkgIEVY VENPTl9QUk9QX1VTQl9UWVBFQ19QT0xBUklUWSwNCj4gKwkJCQkJICAmcHJvcGVydHkpOw0KPiAr CQlpZiAoZXJyKSB7DQo+ICsJCQlEUk1fREVWX0VSUk9SKGRldiwgImdldCBwcm9wZXJ0eSBmYWls ISIpOw0KPiArCQkJcmV0dXJuOw0KPiArCQl9DQo+ICsJCWl0NjUwNS0+bGFuZV9zd2FwID0gcHJv cGVydHkuaW50dmFsOw0KPiArCX0NCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X2Ns a19waGFzZV9hZGp1c3RtZW50KHN0cnVjdCBpdDY1MDUgKml0NjUwNSwNCj4gKwkJCQkJY29uc3Qg c3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpDQo+ICt7DQo+ICsJaXQ2NTA1X3NldF9iaXRz KGl0NjUwNSwgUkVHX0NMS19DVFJMMCwgTV9QQ0xLX0RFTEFZLA0KPiArCQltb2RlLT5jbG9jayA8 IEFESlVTVF9QSEFTRV9USFJFU0hPTEQgPyBQSVhFTF9DTEtfREVMQVkgOiAwKTsNCj4gKwlpdDY1 MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfREFUQV9DVFJMMCwgVklERU9fTEFUQ0hfRURHRSwNCj4g KwkJCVBJWEVMX0NMS19JTlZFUlNFIDw8IDQpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBp dDY1MDVfaW5pdChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJaXQ2NTA1X3dyaXRl KGl0NjUwNSwgUkVHX0JBTktfU0VMLCAweDAwKTsNCj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBS RUdfQVVYX09QVCwgQVVYX0FVVE9fUlNUIHwgQVVYX0ZJWF9GUkVRKTsNCj4gKwlpdDY1MDVfd3Jp dGUoaXQ2NTA1LCBSRUdfQVVYX0NUUkwsIEFVWF9OT19TRUdNRU5UX1dSKTsNCj4gKwlpdDY1MDVf d3JpdGUoaXQ2NTA1LCBSRUdfSERDUF9DVFJMMiwgSERDUF9BTl9TRUwgfCBIRENQX0hXX0hQRElS UV9BQ1QpOw0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19WSURfQlVTX0NUUkwwLCBJTl9E RFIgfCBERFJfQ0QpOw0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19WSURfQlVTX0NUUkwx LCAweDAxKTsNCj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQVVESU9fQ1RSTDAsIEFVRElP XzE2Ql9CT1VORCk7DQo+ICsNCj4gKwkvKiBjaGlwIGludGVybmFsIHNldHRpbmcsIGRvbid0IG1v ZGlmeSAqLw0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19IUERfSVJRX1RJTUUsIDB4RjUp Ow0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19BVVhfREVCVUdfTU9ERSwgMHg0RCk7DQo+ ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVWF9PUFQyLCAweDE3KTsNCj4gKwlpdDY1MDVf d3JpdGUoaXQ2NTA1LCBSRUdfSERDUF9PUFQsIDB4NjApOw0KPiArCWl0NjUwNV93cml0ZShpdDY1 MDUsIFJFR19EQVRBX01VVEVfQ1RSTCwNCj4gKwkJICAgICBFTl9WSURfTVVURSB8IEVOX0FVRF9N VVRFIHwgRU5BQkxFX0FVVE9fVklERU9fRklGT19SRVNFVCk7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0 NjUwNSwgUkVHX1RJTUVfU1RNUF9DVFJMLA0KPiArCQkgICAgIEVOX1NTQ19HQVQgfCBFTl9FTkhB TkNFX1ZJRF9TVE1QIHwgRU5fRU5IQU5DRV9BVURfU1RNUCk7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0 NjUwNSwgUkVHX0lORk9GUkFNRV9DVFJMLCAweDAwKTsNCj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1 LCBSRUdfQkFOS19TRUwsIDB4MDEpOw0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19EUlZf MF9EQl84MDBfTVYsDQo+ICsJCSAgICAgYWZlX3NldHRpbmdfdGFibGVbaXQ2NTA1LT5hZmVfc2V0 dGluZ11bMF0pOw0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19QUkVfMF9EQl84MDBfTVYs DQo+ICsJCSAgICAgYWZlX3NldHRpbmdfdGFibGVbaXQ2NTA1LT5hZmVfc2V0dGluZ11bMV0pOw0K PiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19QUkVfM1A1X0RCXzgwMF9NViwNCj4gKwkJICAg ICBhZmVfc2V0dGluZ190YWJsZVtpdDY1MDUtPmFmZV9zZXR0aW5nXVsyXSk7DQo+ICsJaXQ2NTA1 X3dyaXRlKGl0NjUwNSwgUkVHX1NTQ19DVFJMMCwgMHg5RSk7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0 NjUwNSwgUkVHX1NTQ19DVFJMMSwgMHgxQyk7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVH X1NTQ19DVFJMMiwgMHg0Mik7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0JBTktfU0VM LCAweDAwKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X3ZpZGVvX2Rpc2FibGUo c3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUs IFJFR19EQVRBX01VVEVfQ1RSTCwgRU5fVklEX01VVEUsIEVOX1ZJRF9NVVRFKTsNCj4gKwlpdDY1 MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfSU5GT0ZSQU1FX0NUUkwsIEVOX1ZJRF9DVFJMX1BLVCwg MHgwMCk7DQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX1JFU0VUX0NUUkwsIFZJREVP X1JFU0VULCBWSURFT19SRVNFVCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV92 aWRlb19yZXNldChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJaXQ2NTA1X3NldF9i aXRzKGl0NjUwNSwgUkVHX0RBVEFfTVVURV9DVFJMLCBFTl9WSURfTVVURSwgRU5fVklEX01VVEUp Ow0KPiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19JTkZPRlJBTUVfQ1RSTCwgRU5fVklE X0NUUkxfUEtULCAweDAwKTsNCj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfUkVTRVRf Q1RSTCwgVklERU9fUkVTRVQsIFZJREVPX1JFU0VUKTsNCj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2 NTA1LCBSRUdfNTAxX0ZJRk9fQ1RSTCwgUlNUXzUwMV9GSUZPLCBSU1RfNTAxX0ZJRk8pOw0KPiAr CWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR181MDFfRklGT19DVFJMLCBSU1RfNTAxX0ZJRk8s IDB4MDApOw0KPiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19SRVNFVF9DVFJMLCBWSURF T19SRVNFVCwgMHgwMCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV91cGRhdGVf dmlkZW9fcGFyYW1ldGVyKHN0cnVjdCBpdDY1MDUgKml0NjUwNSwNCj4gKwkJCQkJICBjb25zdCBz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkNCj4gK3sNCj4gKwlpdDY1MDVfY2xrX3BoYXNl X2FkanVzdG1lbnQoaXQ2NTA1LCBtb2RlKTsNCj4gKwlpdDY1MDVfdmlkZW9fZGlzYWJsZShpdDY1 MDUpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgYm9vbCBpdDY1MDVfYXVkaW9faW5wdXQoc3RydWN0 IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCWludCByZWcwNSwgcmVnYmU7DQo+ICsNCj4gKwly ZWcwNSA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgUkVHX1JFU0VUX0NUUkwpOw0KPiArCWl0NjUwNV9z ZXRfYml0cyhpdDY1MDUsIFJFR19SRVNFVF9DVFJMLCBBVURJT19SRVNFVCwgMHgwMCk7DQo+ICsJ dXNsZWVwX3JhbmdlKDMwMDAsIDQwMDApOw0KPiArCXJlZ2JlID0gaXQ2NTA1X3JlYWQoaXQ2NTA1 LCBSRUdfQVVESU9fSU5QVVRfRlJFUSk7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX1JF U0VUX0NUUkwsIHJlZzA1KTsNCj4gKw0KPiArCXJldHVybiByZWdiZSAhPSAweEZGOw0KPiArfQ0K PiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfc2V0dXBfYXVkaW9fY2hhbm5lbF9zdGF0dXMoc3Ry dWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCWVudW0gaXQ2NTA1X2F1ZGlvX3NhbXBsZV9y YXRlIHNhbXBsZV9yYXRlID0gaXQ2NTA1LT5hdWRpby5zYW1wbGVfcmF0ZTsNCj4gKwl1OCBhdWRp b193b3JkX2xlbmd0aF9tYXBbXSA9IHsgMHgwMiwgMHgwNCwgMHgwMywgMHgwQiB9Ow0KPiArDQo+ ICsJLyogQ2hhbm5lbCBTdGF0dXMgKi8NCj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfSUVD OTU4X1NUUzAsIGl0NjUwNS0+YXVkaW8udHlwZSA8PCAxKTsNCj4gKwlpdDY1MDVfd3JpdGUoaXQ2 NTA1LCBSRUdfSUVDOTU4X1NUUzEsIDB4MDApOw0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJF R19JRUM5NThfU1RTMiwgMHgwMCk7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0lFQzk1 OF9TVFMzLCBzYW1wbGVfcmF0ZSk7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0lFQzk1 OF9TVFM0LCAofnNhbXBsZV9yYXRlIDw8IDQpIHwNCj4gKwkJICAgICBhdWRpb193b3JkX2xlbmd0 aF9tYXBbaXQ2NTA1LT5hdWRpby53b3JkX2xlbmd0aF0pOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMg dm9pZCBpdDY1MDVfc2V0dXBfYXVkaW9fZm9ybWF0KHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCj4g K3sNCj4gKwkvKiBJMlMgTU9ERSAqLw0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19BVURJ T19GTVQsDQo+ICsJCSAgICAgKGl0NjUwNS0+YXVkaW8ud29yZF9sZW5ndGggPDwgNSkgfA0KPiAr CQkgICAgIChpdDY1MDUtPmF1ZGlvLmkyc19kYXRhX3NlcXVlbmNlIDw8IDQpIHwNCj4gKwkJICAg ICAoaXQ2NTA1LT5hdWRpby5pMnNfd3NfY2hhbm5lbCA8PCAzKSB8DQo+ICsJCSAgICAgKGl0NjUw NS0+YXVkaW8uaTJzX2RhdGFfZGVsYXkgPDwgMikgfA0KPiArCQkgICAgIChpdDY1MDUtPmF1ZGlv Lmkyc19qdXN0aWZpZWQgPDwgMSkgfA0KPiArCQkgICAgIGl0NjUwNS0+YXVkaW8uaTJzX2lucHV0 X2Zvcm1hdCk7DQo+ICsJaWYgKGl0NjUwNS0+YXVkaW8uc2VsZWN0ID09IFNQRElGKSB7DQo+ICsJ CWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19BVURJT19GSUZPX1NFTCwgMHgwMCk7DQo+ICsJCS8q IDB4MzAgPSAxMjgqRlMgKi8NCj4gKwkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0FVWF9P UFQsIDB4RjAsIDB4MzApOw0KPiArCX0gZWxzZSB7DQo+ICsJCWl0NjUwNV93cml0ZShpdDY1MDUs IFJFR19BVURJT19GSUZPX1NFTCwgMHhFNCk7DQo+ICsJfQ0KPiArDQo+ICsJaXQ2NTA1X3dyaXRl KGl0NjUwNSwgUkVHX0FVRElPX0NUUkwwLCAweDIwKTsNCj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1 LCBSRUdfQVVESU9fQ1RSTDEsIDB4MDApOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1 MDVfZW5hYmxlX2F1ZGlvX3NvdXJjZShzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJ dW5zaWduZWQgaW50IGF1ZGlvX3NvdXJjZV9jb3VudDsNCj4gKw0KPiArCWF1ZGlvX3NvdXJjZV9j b3VudCA9IEJJVChESVZfUk9VTkRfVVAoaXQ2NTA1LT5hdWRpby5jaGFubmVsX2NvdW50LCAyKSkN Cj4gKwkJCQkgLSAxOw0KPiArDQo+ICsJYXVkaW9fc291cmNlX2NvdW50IHw9IGl0NjUwNS0+YXVk aW8uc2VsZWN0IDw8IDQ7DQo+ICsNCj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQVVESU9f U1JDX0NUUkwsIGF1ZGlvX3NvdXJjZV9jb3VudCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lk IGl0NjUwNV9lbmFibGVfYXVkaW9faW5mb2ZyYW1lKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCj4g K3sNCj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCj4gKwl1 OCBhdWRpb19pbmZvX2NhW10gPSB7IDB4MDAsIDB4MDAsIDB4MDEsIDB4MDMsIDB4MDcsIDB4MEIs IDB4MEYsIDB4MUYgfTsNCj4gKw0KPiArCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImluZm9m cmFtZSBjaGFubmVsX2FsbG9jYXRpb246MHglMDJ4IiwNCj4gKwkJCSAgICAgYXVkaW9faW5mb19j YVtpdDY1MDUtPmF1ZGlvLmNoYW5uZWxfY291bnQgLSAxXSk7DQo+ICsNCj4gKwlpdDY1MDVfd3Jp dGUoaXQ2NTA1LCBSRUdfQVVEX0lORk9GUkFNX0RCMSwgaXQ2NTA1LT5hdWRpby5jaGFubmVsX2Nv dW50DQo+ICsJCSAgICAgLSAxKTsNCj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQVVEX0lO Rk9GUkFNX0RCMiwgMHgwMCk7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVRF9JTkZP RlJBTV9EQjMsDQo+ICsJCSAgICAgYXVkaW9faW5mb19jYVtpdDY1MDUtPmF1ZGlvLmNoYW5uZWxf Y291bnQgLSAxXSk7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVRF9JTkZPRlJBTV9E QjQsIDB4MDApOw0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19BVURfSU5GT0ZSQU1fU1VN LCAweDAwKTsNCj4gKw0KPiArCS8qIEVuYWJsZSBBdWRpbyBJbmZvRnJhbWUgKi8NCj4gKwlpdDY1 MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfSU5GT0ZSQU1FX0NUUkwsIEVOX0FVRF9DVFJMX1BLVCwN Cj4gKwkJCUVOX0FVRF9DVFJMX1BLVCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUw NV9kaXNhYmxlX2F1ZGlvKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCj4gK3sNCj4gKwlpdDY1MDVf c2V0X2JpdHMoaXQ2NTA1LCBSRUdfREFUQV9NVVRFX0NUUkwsIEVOX0FVRF9NVVRFLCBFTl9BVURf TVVURSk7DQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0FVRElPX1NSQ19DVFJMLCBN X0FVRElPX0kyU19FTiwgMHgwMCk7DQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0lO Rk9GUkFNRV9DVFJMLCBFTl9BVURfQ1RSTF9QS1QsIDB4MDApOw0KPiArCWl0NjUwNV9zZXRfYml0 cyhpdDY1MDUsIFJFR19SRVNFVF9DVFJMLCBBVURJT19SRVNFVCwgQVVESU9fUkVTRVQpOw0KPiAr fQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfZW5hYmxlX2F1ZGlvKHN0cnVjdCBpdDY1MDUg Kml0NjUwNSkNCj4gK3sNCj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQt PmRldjsNCj4gKwlpbnQgcmVnYmU7DQo+ICsNCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYs ICJzdGFydCIpOw0KPiArCWl0NjUwNV9kaXNhYmxlX2F1ZGlvKGl0NjUwNSk7DQo+ICsNCj4gKwlp dDY1MDVfc2V0dXBfYXVkaW9fY2hhbm5lbF9zdGF0dXMoaXQ2NTA1KTsNCj4gKwlpdDY1MDVfc2V0 dXBfYXVkaW9fZm9ybWF0KGl0NjUwNSk7DQo+ICsJaXQ2NTA1X2VuYWJsZV9hdWRpb19zb3VyY2Uo aXQ2NTA1KTsNCj4gKwlpdDY1MDVfZW5hYmxlX2F1ZGlvX2luZm9mcmFtZShpdDY1MDUpOw0KPiAr DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVRElPX05fMF83LCAweDAwKTsNCj4gKwlp dDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQVVESU9fTl84XzE1LCAweDgwKTsNCj4gKwlpdDY1MDVf d3JpdGUoaXQ2NTA1LCBSRUdfQVVESU9fTl8xNl8yMywgMHgwMCk7DQo+ICsNCj4gKwlpdDY1MDVf c2V0X2JpdHMoaXQ2NTA1LCBSRUdfQVVESU9fU1JDX0NUUkwsIEFVRElPX0ZJRk9fUkVTRVQsDQo+ ICsJCQlBVURJT19GSUZPX1JFU0VUKTsNCj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdf QVVESU9fU1JDX0NUUkwsIEFVRElPX0ZJRk9fUkVTRVQsIDB4MDApOw0KPiArCWl0NjUwNV9zZXRf Yml0cyhpdDY1MDUsIFJFR19SRVNFVF9DVFJMLCBBVURJT19SRVNFVCwgMHgwMCk7DQo+ICsJcmVn YmUgPSBpdDY1MDVfcmVhZChpdDY1MDUsIFJFR19BVURJT19JTlBVVF9GUkVRKTsNCj4gKwlEUk1f REVWX0RFQlVHX0RSSVZFUihkZXYsICJyZWdiZToweCUwMnggYXVkaW8gaW5wdXQgZnM6ICVkLiVk IGtIeiIsDQo+ICsJCQkgICAgIHJlZ2JlLCA2NzUwIC8gcmVnYmUsICg2NzUwICUgcmVnYmUpICog MTAgLyByZWdiZSk7DQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0RBVEFfTVVURV9D VFJMLCBFTl9BVURfTVVURSwgMHgwMCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBib29sIGl0NjUw NV91c2Vfc3RlcF90cmFpbl9jaGVjayhzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJ aWYgKGl0NjUwNS0+bGluay5yZXZpc2lvbiA+PSAweDEyKQ0KPiArCQlyZXR1cm4gaXQ2NTA1LT5k cGNkW0RQX1RSQUlOSU5HX0FVWF9SRF9JTlRFUlZBTF0gPj0gMHgwMTsNCj4gKw0KPiArCXJldHVy biB0cnVlOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfcGFyc2VfbGlua19jYXBh YmlsaXRpZXMoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCXN0cnVjdCBkZXZpY2Ug KmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KPiArCXN0cnVjdCBpdDY1MDVfZHJtX2RwX2xp bmsgKmxpbmsgPSAmaXQ2NTA1LT5saW5rOw0KPiArCWludCBiY2FwczsNCj4gKw0KPiArCWlmIChp dDY1MDUtPmRwY2RbMF0gPT0gMCkgew0KPiArCQlpdDY1MDVfYXV4X29uKGl0NjUwNSk7DQo+ICsJ CWl0NjUwNV9nZXRfZHBjZChpdDY1MDUsIERQX0RQQ0RfUkVWLCBpdDY1MDUtPmRwY2QsDQo+ICsJ CQkJQVJSQVlfU0laRShpdDY1MDUtPmRwY2QpKTsNCj4gKwl9DQo+ICsNCj4gKwlEUk1fREVWX0RF QlVHX0RSSVZFUihkZXYsICJEUENEIFJldi46ICVkLiVkIiwNCj4gKwkJCSAgICAgbGluay0+cmV2 aXNpb24gPj4gNCwgbGluay0+cmV2aXNpb24gJiAweDBGKTsNCj4gKw0KPiArCURSTV9ERVZfREVC VUdfRFJJVkVSKGRldiwgIlNpbmsgbWF4IGxpbmsgcmF0ZTogJWQuJTAyZCBHYnBzIHBlciBsYW5l IiwNCj4gKwkJCSAgICAgbGluay0+cmF0ZSAvIDEwMDAwMCwgbGluay0+cmF0ZSAvIDEwMDAgJSAx MDApOw0KPiArDQo+ICsJaXQ2NTA1LT5saW5rX3JhdGVfYndfY29kZSA9IGRybV9kcF9saW5rX3Jh dGVfdG9fYndfY29kZShsaW5rLT5yYXRlKTsNCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYs ICJsaW5rIHJhdGUgYncgY29kZToweCUwMngiLA0KPiArCQkJICAgICBpdDY1MDUtPmxpbmtfcmF0 ZV9id19jb2RlKTsNCj4gKwlpdDY1MDUtPmxpbmtfcmF0ZV9id19jb2RlID0gbWluKChpbnQpaXQ2 NTA1LT5saW5rX3JhdGVfYndfY29kZSwNCj4gKwkJCQkJTUFYX0xJTktfUkFURSk7DQo+ICsNCj4g KwlpdDY1MDUtPmxhbmVfY291bnQgPSBsaW5rLT5udW1fbGFuZXM7DQo+ICsJRFJNX0RFVl9ERUJV R19EUklWRVIoZGV2LCAiU2luayBzdXBwb3J0ICVkIGxhbmVzIHRyYWluaW5nIiwNCj4gKwkJCSAg ICAgaXQ2NTA1LT5sYW5lX2NvdW50KTsNCj4gKwlpdDY1MDUtPmxhbmVfY291bnQgPSBtaW4oKGlu dClpdDY1MDUtPmxhbmVfY291bnQsIE1BWF9MQU5FX0NPVU5UKTsNCj4gKw0KPiArCWl0NjUwNS0+ YnJhbmNoX2RldmljZSA9IGRybV9kcF9pc19icmFuY2goaXQ2NTA1LT5kcGNkKTsNCj4gKwlEUk1f REVWX0RFQlVHX0RSSVZFUihkZXYsICJTaW5rICVzYnJhbmNoIGRldmljZSIsDQo+ICsJCQkgICAg IGl0NjUwNS0+YnJhbmNoX2RldmljZSA/ICIiIDogIk5vdCAiKTsNCj4gKw0KPiArCWl0NjUwNS0+ ZW5hYmxlX2VuaGFuY2VkX2ZyYW1lID0gISFsaW5rLT5jYXBhYmlsaXRpZXM7DQo+ICsJRFJNX0RF Vl9ERUJVR19EUklWRVIoZGV2LCAiU2luayAlc1N1cHBvcnQgRW5oYW5jZWQgRnJhbWluZyIsDQo+ ICsJCQkgICAgIGl0NjUwNS0+ZW5hYmxlX2VuaGFuY2VkX2ZyYW1lID8gIiIgOiAiTm90ICIpOw0K PiArDQo+ICsJaXQ2NTA1LT5lbmFibGVfc3NjID0gISEoaXQ2NTA1LT5kcGNkW0RQX01BWF9ET1dO U1BSRUFEXSAmDQo+ICsJCQkJRFBfTUFYX0RPV05TUFJFQURfMF81KTsNCj4gKwlEUk1fREVWX0RF QlVHX0RSSVZFUihkZXYsICJNYXhpbXVtIERvd24tU3ByZWFkOiAlcywgJXNzdXBwb3J0IFNTQyEi LA0KPiArCQkJICAgICBpdDY1MDUtPmVuYWJsZV9zc2MgPyAiMC41IiA6ICIwIiwNCj4gKwkJCSAg ICAgaXQ2NTA1LT5lbmFibGVfc3NjID8gIiIgOiAiTm90ICIpOw0KPiArDQo+ICsJaXQ2NTA1LT5z dGVwX3RyYWluID0gaXQ2NTA1X3VzZV9zdGVwX3RyYWluX2NoZWNrKGl0NjUwNSk7DQo+ICsJaWYg KGl0NjUwNS0+c3RlcF90cmFpbikNCj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiYXV0 byB0cmFpbiBmYWlsLCB3aWxsIHN0ZXAgdHJhaW4iKTsNCj4gKw0KPiArCWJjYXBzID0gaXQ2NTA1 X2RwY2RfcmVhZChpdDY1MDUsIERQX0FVWF9IRENQX0JDQVBTKTsNCj4gKwlEUk1fREVWX0RFQlVH X0RSSVZFUihkZXYsICJiY2FwczoweCUwMngiLCBiY2Fwcyk7DQo+ICsJaWYgKGJjYXBzICYgRFBf QkNBUFNfSERDUF9DQVBBQkxFKSB7DQo+ICsJCWl0NjUwNS0+aXNfcmVwZWF0ZXIgPSAhIShiY2Fw cyAmIERQX0JDQVBTX1JFUEVBVEVSX1BSRVNFTlQpOw0KPiArCQlEUk1fREVWX0RFQlVHX0RSSVZF UihkZXYsICJTdXBwb3J0IEhEQ1AhIERvd25zdHJlYW0gaXMgJXMhIiwNCj4gKwkJCQkgICAgIGl0 NjUwNS0+aXNfcmVwZWF0ZXIgPyAicmVwZWF0ZXIiIDoNCj4gKwkJCQkgICAgICJyZWNlaXZlciIp Ow0KPiArCX0gZWxzZSB7DQo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIlNpbmsgbm90 IHN1cHBvcnQgSERDUCEiKTsNCj4gKwkJaXQ2NTA1LT5oZGNwX2Rlc2lyZWQgPSBmYWxzZTsNCj4g Kwl9DQo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiSERDUCAlcyIsDQo+ICsJCQkgICAg IGl0NjUwNS0+aGRjcF9kZXNpcmVkID8gImRlc2lyZWQiIDogInVuZGVzaXJlZCIpOw0KPiArfQ0K PiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfc2V0dXBfc3NjKHN0cnVjdCBpdDY1MDUgKml0NjUw NSkNCj4gK3sNCj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfVFJBSU5fQ1RSTDAsIFNQ UkVBRF9BTVBfNSwNCj4gKwkJCWl0NjUwNS0+ZW5hYmxlX3NzYyA/IFNQUkVBRF9BTVBfNSA6IDB4 MDApOw0KPiArCWlmIChpdDY1MDUtPmVuYWJsZV9zc2MpIHsNCj4gKwkJaXQ2NTA1X3dyaXRlKGl0 NjUwNSwgUkVHX0JBTktfU0VMLCAweDAxKTsNCj4gKwkJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVH X1NTQ19DVFJMMCwgMHg5RSk7DQo+ICsJCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19TU0NfQ1RS TDEsIDB4MUMpOw0KPiArCQlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfU1NDX0NUUkwyLCAweDQy KTsNCj4gKwkJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0JBTktfU0VMLCAweDAwKTsNCj4gKwkJ aXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX1NQX0NUUkwwLCAweDA3KTsNCj4gKwkJaXQ2NTA1X3dy aXRlKGl0NjUwNSwgUkVHX0lQX0NUUkwxLCAweDI5KTsNCj4gKwkJaXQ2NTA1X3dyaXRlKGl0NjUw NSwgUkVHX0lQX0NUUkwyLCAweDAzKTsNCj4gKwkJLyogU3RhbXAgSW50ZXJydXB0IFN0ZXAgKi8N Cj4gKwkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX1RJTUVfU1RNUF9DVFJMLCBNX1NUQU1Q X1NURVAsDQo+ICsJCQkJMHgxMCk7DQo+ICsJCWl0NjUwNV9kcGNkX3dyaXRlKGl0NjUwNSwgRFBf RE9XTlNQUkVBRF9DVFJMLA0KPiArCQkJCSAgRFBfU1BSRUFEX0FNUF8wXzUpOw0KPiArCX0gZWxz ZSB7DQo+ICsJCWl0NjUwNV9kcGNkX3dyaXRlKGl0NjUwNSwgRFBfRE9XTlNQUkVBRF9DVFJMLCAw eDAwKTsNCj4gKwkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX1RJTUVfU1RNUF9DVFJMLCBN X1NUQU1QX1NURVAsDQo+ICsJCQkJMHgwMCk7DQo+ICsJfQ0KPiArfQ0KPiArDQo+ICtzdGF0aWMg aW5saW5lIHZvaWQgaXQ2NTA1X2xpbmtfcmF0ZV9zZXR1cChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUp DQo+ICt7DQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX1RSQUlOX0NUUkwwLCBGT1JD RV9MQlIsDQo+ICsJCQkoaXQ2NTA1LT5saW5rX3JhdGVfYndfY29kZSA9PSBSQlIpID8gRk9SQ0Vf TEJSIDogMHgwMCk7DQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0xJTktfRFJWLCBE UlZfSFMsDQo+ICsJCQkoaXQ2NTA1LT5saW5rX3JhdGVfYndfY29kZSA9PSBSQlIpID8gMHgwMCA6 IERSVl9IUyk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9sYW5lX2NvdW50X3Nl dHVwKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCj4gK3sNCj4gKwlpdDY1MDVfZ2V0X2V4dGNvbl9w cm9wZXJ0eShpdDY1MDUpOw0KPiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19UUkFJTl9D VFJMMCwgTEFORV9TV0FQLA0KPiArCQkJaXQ2NTA1LT5sYW5lX3N3YXAgPyBMQU5FX1NXQVAgOiAw eDAwKTsNCj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfVFJBSU5fQ1RSTDAsIExBTkVf Q09VTlRfTUFTSywNCj4gKwkJCShpdDY1MDUtPmxhbmVfY291bnQgLSAxKSA8PCAxKTsNCj4gK30N Cj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X2xpbmtfdHJhaW5pbmdfc2V0dXAoc3RydWN0IGl0 NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNs aWVudC0+ZGV2Ow0KPiArDQo+ICsJaWYgKGl0NjUwNS0+ZW5hYmxlX2VuaGFuY2VkX2ZyYW1lKQ0K PiArCQlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfREFUQV9NVVRFX0NUUkwsDQo+ICsJCQkJ RU5BQkxFX0VOSEFOQ0VEX0ZSQU1FLCBFTkFCTEVfRU5IQU5DRURfRlJBTUUpOw0KPiArDQo+ICsJ aXQ2NTA1X2xpbmtfcmF0ZV9zZXR1cChpdDY1MDUpOw0KPiArCWl0NjUwNV9sYW5lX2NvdW50X3Nl dHVwKGl0NjUwNSk7DQo+ICsJaXQ2NTA1X3NldHVwX3NzYyhpdDY1MDUpOw0KPiArCURSTV9ERVZf REVCVUdfRFJJVkVSKGRldiwNCj4gKwkJCSAgICAgIiVzLCAlZCBsYW5lcywgJXNhYmxlIHNzYywg JXNhYmxlIGVuaGFuY2VkIGZyYW1lIiwNCj4gKwkJCSAgICAgaXQ2NTA1LT5saW5rX3JhdGVfYndf Y29kZSAhPSBSQlIgPyAiSEJSIiA6ICJSQlIiLA0KPiArCQkJICAgICBpdDY1MDUtPmxhbmVfY291 bnQsDQo+ICsJCQkgICAgIGl0NjUwNS0+ZW5hYmxlX3NzYyA/ICJlbiIgOiAiZGlzIiwNCj4gKwkJ CSAgICAgaXQ2NTA1LT5lbmFibGVfZW5oYW5jZWRfZnJhbWUgPyAiZW4iIDogImRpcyIpOw0KPiAr fQ0KPiArDQo+ICtzdGF0aWMgYm9vbCBpdDY1MDVfbGlua19zdGFydF9hdXRvX3RyYWluKHN0cnVj dCBpdDY1MDUgKml0NjUwNSkNCj4gK3sNCj4gKwlpbnQgdGltZW91dCA9IDUwMCwgbGlua190cmFp bmluZ19zdGF0ZTsNCj4gKwlib29sIHN0YXRlID0gZmFsc2U7DQo+ICsNCj4gKwltdXRleF9sb2Nr KCZpdDY1MDUtPmF1eF9sb2NrKTsNCj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfVFJB SU5fQ1RSTDAsDQo+ICsJCQkJRk9SQ0VfQ1JfRE9ORSB8IEZPUkNFX0VRX0RPTkUsIDB4MDApOw0K PiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19UUkFJTl9DVFJMMSwgRk9SQ0VfUkVUUkFJTik7 DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX1RSQUlOX0NUUkwxLCBBVVRPX1RSQUlOKTsN Cj4gKw0KPiArCXdoaWxlICh0aW1lb3V0ID4gMCkgew0KPiArCQl1c2xlZXBfcmFuZ2UoMTAwMCwg MjAwMCk7DQo+ICsJCWxpbmtfdHJhaW5pbmdfc3RhdGUgPSBpdDY1MDVfcmVhZChpdDY1MDUsIFJF R19MSU5LX1RSQUlOX1NUUyk7DQo+ICsNCj4gKwkJaWYgKChsaW5rX3RyYWluaW5nX3N0YXRlID4g MCkgJiYNCj4gKwkJICAgIChsaW5rX3RyYWluaW5nX3N0YXRlICYgTElOS19TVEFURV9OT1JQKSkg ew0KPiArCQkJc3RhdGUgPSB0cnVlOw0KPiArCQkJZ290byB1bmxvY2s7DQo+ICsJCX0NCj4gKw0K PiArCQl0aW1lb3V0LS07DQo+ICsJfQ0KPiArdW5sb2NrOg0KPiArCW11dGV4X3VubG9jaygmaXQ2 NTA1LT5hdXhfbG9jayk7DQo+ICsNCj4gKwlyZXR1cm4gc3RhdGU7DQo+ICt9DQo+ICsNCj4gK3N0 YXRpYyBpbnQgaXQ2NTA1X2RybV9kcF9saW5rX2NvbmZpZ3VyZShzdHJ1Y3QgaXQ2NTA1ICppdDY1 MDUpDQo+ICt7DQo+ICsJdTggdmFsdWVzWzJdOw0KPiArCWludCBlcnI7DQo+ICsJc3RydWN0IGRy bV9kcF9hdXggKmF1eCA9ICZpdDY1MDUtPmF1eDsNCj4gKw0KPiArCXZhbHVlc1swXSA9IGl0NjUw NS0+bGlua19yYXRlX2J3X2NvZGU7DQo+ICsJdmFsdWVzWzFdID0gaXQ2NTA1LT5sYW5lX2NvdW50 Ow0KPiArDQo+ICsJaWYgKGl0NjUwNS0+ZW5hYmxlX2VuaGFuY2VkX2ZyYW1lKQ0KPiArCQl2YWx1 ZXNbMV0gfD0gRFBfTEFORV9DT1VOVF9FTkhBTkNFRF9GUkFNRV9FTjsNCj4gKw0KPiArCWVyciA9 IGRybV9kcF9kcGNkX3dyaXRlKGF1eCwgRFBfTElOS19CV19TRVQsIHZhbHVlcywgc2l6ZW9mKHZh bHVlcykpOw0KPiArCWlmIChlcnIgPCAwKQ0KPiArCQlyZXR1cm4gZXJyOw0KPiArDQo+ICsJcmV0 dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBib29sIGl0NjUwNV9jaGVja192b2x0YWdlX3N3 aW5nX21heCh1OCBsYW5lX3ZvbHRhZ2Vfc3dpbmdfcHJlX2VtcGhhc2lzKQ0KPiArew0KPiArCXJl dHVybiAoKGxhbmVfdm9sdGFnZV9zd2luZ19wcmVfZW1waGFzaXMgJiAweDAzKSA9PSBNQVhfQ1Jf TEVWRUwpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgYm9vbCBpdDY1MDVfY2hlY2tfcHJlX2VtcGhh c2lzX21heCh1OCBsYW5lX3ZvbHRhZ2Vfc3dpbmdfcHJlX2VtcGhhc2lzKQ0KPiArew0KPiArCXJl dHVybiAoKGxhbmVfdm9sdGFnZV9zd2luZ19wcmVfZW1waGFzaXMgJiAweDAzKSA9PSBNQVhfRVFf TEVWRUwpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgYm9vbCBpdDY1MDVfY2hlY2tfbWF4X3ZvbHRh Z2Vfc3dpbmdfcmVhY2hlZCh1OCAqbGFuZV92b2x0YWdlX3N3aW5nLA0KPiArCQkJCQkJICAgdTgg bGFuZV9jb3VudCkNCj4gK3sNCj4gKwl1OCBpOw0KPiArDQo+ICsJZm9yIChpID0gMDsgaSA8IGxh bmVfY291bnQ7IGkrKykgew0KPiArCQlpZiAobGFuZV92b2x0YWdlX3N3aW5nW2ldICYgRFBfVFJB SU5fTUFYX1NXSU5HX1JFQUNIRUQpDQo+ICsJCQlyZXR1cm4gdHJ1ZTsNCj4gKwl9DQo+ICsNCj4g KwlyZXR1cm4gZmFsc2U7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBib29sIGl0NjUwNV9zdGVwX3Ry YWluX2xhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXNfc2V0KA0KPiArCXN0cnVjdCBpdDY1MDUgKml0 NjUwNSwNCj4gKwlzdHJ1Y3QgaXQ2NTA1X3N0ZXBfdHJhaW5fcGFyYSAqbGFuZV92b2x0YWdlX3By ZV9lbXBoYXNpcywNCj4gKwl1OCAqbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpc19zZXQpDQo+ICt7 DQo+ICsJdTggaTsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCBpdDY1MDUtPmxhbmVfY291bnQ7 IGkrKykgew0KPiArCQlsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzLT52b2x0YWdlX3N3aW5nW2ld ICY9IDB4MDM7DQo+ICsJCWxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXNfc2V0W2ldID0NCj4gKwkJ CWxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMtPnZvbHRhZ2Vfc3dpbmdbaV07DQo+ICsJCWlmIChp dDY1MDVfY2hlY2tfdm9sdGFnZV9zd2luZ19tYXgoDQo+ICsJCQkgICAgbGFuZV92b2x0YWdlX3By ZV9lbXBoYXNpcy0+dm9sdGFnZV9zd2luZ1tpXSkpDQo+ICsJCQlsYW5lX3ZvbHRhZ2VfcHJlX2Vt cGhhc2lzX3NldFtpXSB8PQ0KPiArCQkJCURQX1RSQUlOX01BWF9TV0lOR19SRUFDSEVEOw0KPiAr DQo+ICsJCWxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMtPnByZV9lbXBoYXNpc1tpXSAmPSAweDAz Ow0KPiArCQlsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzX3NldFtpXSB8PQ0KPiArCQkJbGFuZV92 b2x0YWdlX3ByZV9lbXBoYXNpcy0+cHJlX2VtcGhhc2lzW2ldDQo+ICsJCQk8PCBEUF9UUkFJTl9Q UkVfRU1QSEFTSVNfU0hJRlQ7DQo+ICsJCWlmIChpdDY1MDVfY2hlY2tfcHJlX2VtcGhhc2lzX21h eCgNCj4gKwkJCSAgICBsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzLT5wcmVfZW1waGFzaXNbaV0p KQ0KPiArCQkJbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpc19zZXRbaV0gfD0NCj4gKwkJCQlEUF9U UkFJTl9NQVhfUFJFX0VNUEhBU0lTX1JFQUNIRUQ7DQo+ICsJCWl0NjUwNV9kcGNkX3dyaXRlKGl0 NjUwNSwgRFBfVFJBSU5JTkdfTEFORTBfU0VUICsgaSwNCj4gKwkJCQkgIGxhbmVfdm9sdGFnZV9w cmVfZW1waGFzaXNfc2V0W2ldKTsNCj4gKw0KPiArCQlpZiAobGFuZV92b2x0YWdlX3ByZV9lbXBo YXNpc19zZXRbaV0gIT0NCj4gKwkJICAgIGl0NjUwNV9kcGNkX3JlYWQoaXQ2NTA1LCBEUF9UUkFJ TklOR19MQU5FMF9TRVQgKyBpKSkNCj4gKwkJCXJldHVybiBmYWxzZTsNCj4gKwl9DQo+ICsNCj4g KwlyZXR1cm4gdHJ1ZTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGJvb2wNCj4gK2l0NjUwNV9zdGVw X2NyX3RyYWluKHN0cnVjdCBpdDY1MDUgKml0NjUwNSwNCj4gKwkJICAgICBzdHJ1Y3QgaXQ2NTA1 X3N0ZXBfdHJhaW5fcGFyYSAqbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpcykNCj4gK3sNCj4gKwl1 OCBsb29wX2NvdW50ID0gMCwgaSA9IDAsIGo7DQo+ICsJdTggbGlua19zdGF0dXNbRFBfTElOS19T VEFUVVNfU0laRV0gPSB7IDAgfTsNCj4gKwl1OCBsYW5lX2xldmVsX2NvbmZpZ1tNQVhfTEFORV9D T1VOVF0gPSB7IDAgfTsNCj4gKwlpbnQgcHJlX2VtcGhhc2lzX2FkanVzdCA9IC0xLCB2b2x0YWdl X3N3aW5nX2FkanVzdCA9IC0xOw0KPiArDQo+ICsJaXQ2NTA1X2RwY2Rfd3JpdGUoaXQ2NTA1LCBE UF9ET1dOU1BSRUFEX0NUUkwsDQo+ICsJCQkgIGl0NjUwNS0+ZW5hYmxlX3NzYyA/IERQX1NQUkVB RF9BTVBfMF81IDogMHgwMCk7DQo+ICsJaXQ2NTA1X2RwY2Rfd3JpdGUoaXQ2NTA1LCBEUF9UUkFJ TklOR19QQVRURVJOX1NFVCwNCj4gKwkJCSAgRFBfVFJBSU5JTkdfUEFUVEVSTl8xKTsNCj4gKw0K PiArCXdoaWxlIChsb29wX2NvdW50IDwgNSAmJiBpIDwgMTApIHsNCj4gKwkJaSsrOw0KPiArCQlp ZiAoIWl0NjUwNV9zdGVwX3RyYWluX2xhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXNfc2V0KA0KPiAr CQkJICAgIGl0NjUwNSwgbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpcywNCj4gKwkJCSAgICBsYW5l X2xldmVsX2NvbmZpZykpDQo+ICsJCQljb250aW51ZTsNCj4gKwkJZHJtX2RwX2xpbmtfdHJhaW5f Y2xvY2tfcmVjb3ZlcnlfZGVsYXkoaXQ2NTA1LT5kcGNkKTsNCj4gKwkJZHJtX2RwX2RwY2RfcmVh ZF9saW5rX3N0YXR1cygmaXQ2NTA1LT5hdXgsIGxpbmtfc3RhdHVzKTsNCj4gKw0KPiArCQlpZiAo ZHJtX2RwX2Nsb2NrX3JlY292ZXJ5X29rKGxpbmtfc3RhdHVzLCBpdDY1MDUtPmxhbmVfY291bnQp KSB7DQo+ICsJCQlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfVFJBSU5fQ1RSTDAsIEZPUkNF X0NSX0RPTkUsDQo+ICsJCQkJCUZPUkNFX0NSX0RPTkUpOw0KPiArCQkJcmV0dXJuIHRydWU7DQo+ ICsJCX0NCj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoJml0NjUwNS0+Y2xpZW50LT5kZXYsICJj ciBub3QgZG9uZSIpOw0KPiArDQo+ICsJCWlmIChpdDY1MDVfY2hlY2tfbWF4X3ZvbHRhZ2Vfc3dp bmdfcmVhY2hlZChsYW5lX2xldmVsX2NvbmZpZywNCj4gKwkJCQkJCQkgICBpdDY1MDUtPmxhbmVf Y291bnQpKQ0KPiArCQkJZ290byBjcl90cmFpbl9mYWlsOw0KPiArDQo+ICsJCWZvciAoaiA9IDA7 IGogPCBpdDY1MDUtPmxhbmVfY291bnQ7IGorKykgew0KPiArCQkJbGFuZV92b2x0YWdlX3ByZV9l bXBoYXNpcy0+dm9sdGFnZV9zd2luZ1tqXSA9DQo+ICsJCQkJZHJtX2RwX2dldF9hZGp1c3RfcmVx dWVzdF92b2x0YWdlKGxpbmtfc3RhdHVzLA0KPiArCQkJCQkJCQkgIGopID4+DQo+ICsJCQkJRFBf VFJBSU5fVk9MVEFHRV9TV0lOR19TSElGVDsNCj4gKwkJCWxhbmVfdm9sdGFnZV9wcmVfZW1waGFz aXMtPnByZV9lbXBoYXNpc1tqXSA9DQo+ICsJCQkJZHJtX2RwX2dldF9hZGp1c3RfcmVxdWVzdF9w cmVfZW1waGFzaXMoDQo+ICsJCQkJCWxpbmtfc3RhdHVzLCBqKSA+Pg0KPiArCQkJCURQX1RSQUlO X1BSRV9FTVBIQVNJU19TSElGVDsNCj4gKwkJCWlmICgodm9sdGFnZV9zd2luZ19hZGp1c3QgPT0N Cj4gKwkJCSAgICAgbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpcy0+dm9sdGFnZV9zd2luZ1tqXSkg JiYNCj4gKwkJCSAgICAocHJlX2VtcGhhc2lzX2FkanVzdCA9PQ0KPiArCQkJICAgICBsYW5lX3Zv bHRhZ2VfcHJlX2VtcGhhc2lzLT5wcmVfZW1waGFzaXNbal0pKSB7DQo+ICsJCQkJbG9vcF9jb3Vu dCsrOw0KPiArCQkJCWNvbnRpbnVlOw0KPiArCQkJfQ0KPiArDQo+ICsJCQl2b2x0YWdlX3N3aW5n X2FkanVzdCA9DQo+ICsJCQkJbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpcy0+dm9sdGFnZV9zd2lu Z1tqXTsNCj4gKwkJCXByZV9lbXBoYXNpc19hZGp1c3QgPQ0KPiArCQkJCWxhbmVfdm9sdGFnZV9w cmVfZW1waGFzaXMtPnByZV9lbXBoYXNpc1tqXTsNCj4gKwkJCWxvb3BfY291bnQgPSAwOw0KPiAr DQo+ICsJCQlpZiAodm9sdGFnZV9zd2luZ19hZGp1c3QgKyBwcmVfZW1waGFzaXNfYWRqdXN0ID4N Cj4gKwkJCSAgICBNQVhfRVFfTEVWRUwpDQo+ICsJCQkJbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNp cy0+dm9sdGFnZV9zd2luZ1tqXSA9DQo+ICsJCQkJCU1BWF9FUV9MRVZFTCAtDQo+ICsJCQkJCWxh bmVfdm9sdGFnZV9wcmVfZW1waGFzaXMNCj4gKwkJCQkJCS0+cHJlX2VtcGhhc2lzW2pdOw0KPiAr CQl9DQo+ICsJfQ0KPiArDQo+ICtjcl90cmFpbl9mYWlsOg0KPiArCWl0NjUwNV9kcGNkX3dyaXRl KGl0NjUwNSwgRFBfVFJBSU5JTkdfUEFUVEVSTl9TRVQsDQo+ICsJCQkgIERQX1RSQUlOSU5HX1BB VFRFUk5fRElTQUJMRSk7DQo+ICsNCj4gKwlyZXR1cm4gZmFsc2U7DQo+ICt9DQo+ICsNCj4gK3N0 YXRpYyBib29sDQo+ICtpdDY1MDVfc3RlcF9lcV90cmFpbihzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUs DQo+ICsJCSAgICAgc3RydWN0IGl0NjUwNV9zdGVwX3RyYWluX3BhcmEgKmxhbmVfdm9sdGFnZV9w cmVfZW1waGFzaXMpDQo+ICt7DQo+ICsJdTggbG9vcF9jb3VudCA9IDAsIGksIGxpbmtfc3RhdHVz W0RQX0xJTktfU1RBVFVTX1NJWkVdID0geyAwIH07DQo+ICsJdTggbGFuZV9sZXZlbF9jb25maWdb TUFYX0xBTkVfQ09VTlRdID0geyAwIH07DQo+ICsNCj4gKwlpdDY1MDVfZHBjZF93cml0ZShpdDY1 MDUsIERQX1RSQUlOSU5HX1BBVFRFUk5fU0VULA0KPiArCQkJICBEUF9UUkFJTklOR19QQVRURVJO XzIpOw0KPiArDQo+ICsJd2hpbGUgKGxvb3BfY291bnQgPCA2KSB7DQo+ICsJCWxvb3BfY291bnQr KzsNCj4gKw0KPiArCQlpZiAoIWl0NjUwNV9zdGVwX3RyYWluX2xhbmVfdm9sdGFnZV9wcmVfZW1w aGFzaXNfc2V0KA0KPiArCQkJICAgIGl0NjUwNSwgbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpcywN Cj4gKwkJCSAgICBsYW5lX2xldmVsX2NvbmZpZykpDQo+ICsJCQljb250aW51ZTsNCj4gKw0KPiAr CQlkcm1fZHBfbGlua190cmFpbl9jaGFubmVsX2VxX2RlbGF5KGl0NjUwNS0+ZHBjZCk7DQo+ICsJ CWRybV9kcF9kcGNkX3JlYWRfbGlua19zdGF0dXMoJml0NjUwNS0+YXV4LCBsaW5rX3N0YXR1cyk7 DQo+ICsNCj4gKwkJaWYgKCFkcm1fZHBfY2xvY2tfcmVjb3Zlcnlfb2sobGlua19zdGF0dXMsIGl0 NjUwNS0+bGFuZV9jb3VudCkpDQo+ICsJCQlnb3RvIGVxX3RyYWluX2ZhaWw7DQo+ICsNCj4gKwkJ aWYgKGRybV9kcF9jaGFubmVsX2VxX29rKGxpbmtfc3RhdHVzLCBpdDY1MDUtPmxhbmVfY291bnQp KSB7DQo+ICsJCQlpdDY1MDVfZHBjZF93cml0ZShpdDY1MDUsIERQX1RSQUlOSU5HX1BBVFRFUk5f U0VULA0KPiArCQkJCQkgIERQX1RSQUlOSU5HX1BBVFRFUk5fRElTQUJMRSk7DQo+ICsJCQlpdDY1 MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfVFJBSU5fQ1RSTDAsIEZPUkNFX0VRX0RPTkUsDQo+ICsJ CQkJCUZPUkNFX0VRX0RPTkUpOw0KPiArCQkJcmV0dXJuIHRydWU7DQo+ICsJCX0NCj4gKwkJRFJN X0RFVl9ERUJVR19EUklWRVIoJml0NjUwNS0+Y2xpZW50LT5kZXYsICJlcSBub3QgZG9uZSIpOw0K PiArDQo+ICsJCWZvciAoaSA9IDA7IGkgPCBpdDY1MDUtPmxhbmVfY291bnQ7IGkrKykgew0KPiAr CQkJbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpcy0+dm9sdGFnZV9zd2luZ1tpXSA9DQo+ICsJCQkJ ZHJtX2RwX2dldF9hZGp1c3RfcmVxdWVzdF92b2x0YWdlKGxpbmtfc3RhdHVzLA0KPiArCQkJCQkJ CQkgIGkpID4+DQo+ICsJCQkJRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19TSElGVDsNCj4gKwkJCWxh bmVfdm9sdGFnZV9wcmVfZW1waGFzaXMtPnByZV9lbXBoYXNpc1tpXSA9DQo+ICsJCQkJZHJtX2Rw X2dldF9hZGp1c3RfcmVxdWVzdF9wcmVfZW1waGFzaXMoDQo+ICsJCQkJCWxpbmtfc3RhdHVzLCBp KSA+Pg0KPiArCQkJCURQX1RSQUlOX1BSRV9FTVBIQVNJU19TSElGVDsNCj4gKw0KPiArCQkJaWYg KGxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMtPnZvbHRhZ2Vfc3dpbmdbaV0gKw0KPiArCQkJCSAg ICBsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzLT5wcmVfZW1waGFzaXNbaV0gPg0KPiArCQkJICAg IE1BWF9FUV9MRVZFTCkNCj4gKwkJCQlsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzLT52b2x0YWdl X3N3aW5nW2ldID0NCj4gKwkJCQkJMHgwMyAtIGxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMNCj4g KwkJCQkJCSAgICAgICAtPnByZV9lbXBoYXNpc1tpXTsNCj4gKwkJfQ0KPiArCX0NCj4gKw0KPiAr ZXFfdHJhaW5fZmFpbDoNCj4gKwlpdDY1MDVfZHBjZF93cml0ZShpdDY1MDUsIERQX1RSQUlOSU5H X1BBVFRFUk5fU0VULA0KPiArCQkJICBEUF9UUkFJTklOR19QQVRURVJOX0RJU0FCTEUpOw0KPiAr CXJldHVybiBmYWxzZTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGJvb2wgaXQ2NTA1X2xpbmtfc3Rh cnRfc3RlcF90cmFpbihzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJaW50IGVycjsN Cj4gKwlzdHJ1Y3QgaXQ2NTA1X3N0ZXBfdHJhaW5fcGFyYSBsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhh c2lzID0gew0KPiArCQkudm9sdGFnZV9zd2luZyA9IHsgMCB9LA0KPiArCQkucHJlX2VtcGhhc2lz ID0geyAwIH0sDQo+ICsJfTsNCj4gKw0KPiArCURSTV9ERVZfREVCVUdfRFJJVkVSKCZpdDY1MDUt PmNsaWVudC0+ZGV2LCAic3RhcnQiKTsNCj4gKwllcnIgPSBpdDY1MDVfZHJtX2RwX2xpbmtfY29u ZmlndXJlKGl0NjUwNSk7DQo+ICsNCj4gKwlpZiAoZXJyIDwgMCkNCj4gKwkJcmV0dXJuIGZhbHNl Ow0KPiArCWlmICghaXQ2NTA1X3N0ZXBfY3JfdHJhaW4oaXQ2NTA1LCAmbGFuZV92b2x0YWdlX3By ZV9lbXBoYXNpcykpDQo+ICsJCXJldHVybiBmYWxzZTsNCj4gKwlpZiAoIWl0NjUwNV9zdGVwX2Vx X3RyYWluKGl0NjUwNSwgJmxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMpKQ0KPiArCQlyZXR1cm4g ZmFsc2U7DQo+ICsJcmV0dXJuIHRydWU7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBib29sIGl0NjUw NV9nZXRfdmlkZW9fc3RhdHVzKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCj4gK3sNCj4gKwlpbnQg cmVnXzBkOw0KPiArDQo+ICsJcmVnXzBkID0gaXQ2NTA1X3JlYWQoaXQ2NTA1LCBSRUdfU1lTVEVN X1NUUyk7DQo+ICsNCj4gKwlpZiAocmVnXzBkIDwgMCkNCj4gKwkJcmV0dXJuIGZhbHNlOw0KPiAr DQo+ICsJcmV0dXJuICEhKHJlZ18wZCAmIFZJREVPX1NUQik7DQo+ICt9DQo+ICsNCj4gK3N0YXRp YyB2b2lkIGl0NjUwNV9yZXNldF9oZGNwKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCj4gK3sNCj4g KwlpdDY1MDUtPmhkY3Bfc3RhdHVzID0gSERDUF9BVVRIX0lETEU7DQo+ICsJLyogRGlzYWJsZSBD UF9EZXNpcmVkICovDQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0hEQ1BfQ1RSTDEs IEhEQ1BfQ1BfRU5BQkxFLCAweDAwKTsNCj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdf UkVTRVRfQ1RSTCwgSERDUF9SRVNFVCwgSERDUF9SRVNFVCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRp YyB2b2lkIGl0NjUwNV9zdGFydF9oZGNwKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCj4gK3sNCj4g KwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCj4gKw0KPiArCURS TV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInN0YXJ0Iik7DQo+ICsJaXQ2NTA1X3Jlc2V0X2hkY3Ao aXQ2NTA1KTsNCj4gKwlxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX3dxLCAmaXQ2NTA1LT5oZGNw X3dvcmssDQo+ICsJCQkgICBtc2Vjc190b19qaWZmaWVzKDI0MDApKTsNCj4gK30NCj4gKw0KPiAr c3RhdGljIHZvaWQgaXQ2NTA1X3N0b3BfaGRjcChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7 DQo+ICsJaXQ2NTA1X3Jlc2V0X2hkY3AoaXQ2NTA1KTsNCj4gKwljYW5jZWxfZGVsYXllZF93b3Jr KCZpdDY1MDUtPmhkY3Bfd29yayk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBib29sIGl0NjUwNV9o ZGNwX2lzX2tzdl92YWxpZCh1OCAqa3N2KQ0KPiArew0KPiArCWludCBpLCBvbmVzID0gMDsNCj4g Kw0KPiArCS8qIEtTViBoYXMgMjAgMSdzIGFuZCAyMCAwJ3MgKi8NCj4gKwlmb3IgKGkgPSAwOyBp IDwgRFJNX0hEQ1BfS1NWX0xFTjsgaSsrKQ0KPiArCQlvbmVzICs9IGh3ZWlnaHQ4KGtzdltpXSk7 DQo+ICsJaWYgKG9uZXMgIT0gMjApDQo+ICsJCXJldHVybiBmYWxzZTsNCj4gKwlyZXR1cm4gdHJ1 ZTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X2hkY3BfcGFydDFfYXV0aChzdHJ1 Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUw NS0+Y2xpZW50LT5kZXY7DQo+ICsJdTggaGRjcF9iY2FwczsNCj4gKw0KPiArCWl0NjUwNV9zZXRf Yml0cyhpdDY1MDUsIFJFR19SRVNFVF9DVFJMLCBIRENQX1JFU0VULCAweDAwKTsNCj4gKwkvKiBE aXNhYmxlIENQX0Rlc2lyZWQgKi8NCj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfSERD UF9DVFJMMSwgSERDUF9DUF9FTkFCTEUsIDB4MDApOw0KPiArDQo+ICsJdXNsZWVwX3JhbmdlKDEw MDAsIDE1MDApOw0KPiArCWhkY3BfYmNhcHMgPSBpdDY1MDVfZHBjZF9yZWFkKGl0NjUwNSwgRFBf QVVYX0hEQ1BfQkNBUFMpOw0KPiArCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIkRQQ0RbMHg2 ODAyOF06IDB4JTAyeCIsDQo+ICsJCQkgICAgIGhkY3BfYmNhcHMpOw0KPiArDQo+ICsJaWYgKCFo ZGNwX2JjYXBzKQ0KPiArCQlyZXR1cm47DQo+ICsNCj4gKwkvKiBjbGVhciB0aGUgcmVwZWF0ZXIg TGlzdCBDaGsgRG9uZSBhbmQgZmFpbCBiaXQgKi8NCj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1 LCBSRUdfSERDUF9UUklHR0VSLA0KPiArCQkJSERDUF9UUklHR0VSX0tTVl9ET05FIHwgSERDUF9U UklHR0VSX0tTVl9GQUlMLA0KPiArCQkJMHgwMCk7DQo+ICsNCj4gKwkvKiBFbmFibGUgQW4gR2Vu ZXJhdG9yICovDQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0hEQ1BfQ1RSTDIsIEhE Q1BfQU5fR0VOLCBIRENQX0FOX0dFTik7DQo+ICsJLyogZGVsYXkxbXMoMTApOyovDQo+ICsJdXNs ZWVwX3JhbmdlKDEwMDAwLCAxNTAwMCk7DQo+ICsJLyogU3RvcCBBbiBHZW5lcmF0b3IgKi8NCj4g KwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfSERDUF9DVFJMMiwgSERDUF9BTl9HRU4sIDB4 MDApOw0KPiArDQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0hEQ1BfQ1RSTDEsIEhE Q1BfQ1BfRU5BQkxFLCBIRENQX0NQX0VOQUJMRSk7DQo+ICsNCj4gKwlpdDY1MDVfc2V0X2JpdHMo aXQ2NTA1LCBSRUdfSERDUF9UUklHR0VSLCBIRENQX1RSSUdHRVJfU1RBUlQsDQo+ICsJCQlIRENQ X1RSSUdHRVJfU1RBUlQpOw0KPiArDQo+ICsJaXQ2NTA1LT5oZGNwX3N0YXR1cyA9IEhEQ1BfQVVU SF9HT0lORzsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBpdDY1MDVfc2hhMV9kaWdlc3Qoc3Ry dWN0IGl0NjUwNSAqaXQ2NTA1LCB1OCAqc2hhMV9pbnB1dCwNCj4gKwkJCSAgICAgIHVuc2lnbmVk IGludCBzaXplLCB1OCAqb3V0cHV0X2F2KQ0KPiArew0KPiArCXN0cnVjdCBzaGFzaF9kZXNjICpk ZXNjOw0KPiArCXN0cnVjdCBjcnlwdG9fc2hhc2ggKnRmbTsNCj4gKwlpbnQgZXJyOw0KPiArCXN0 cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KPiArDQo+ICsJdGZtID0g Y3J5cHRvX2FsbG9jX3NoYXNoKCJzaGExIiwgMCwgMCk7DQo+ICsJaWYgKElTX0VSUih0Zm0pKSB7 DQo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAiY3J5cHRvX2FsbG9jX3NoYXNoIHNoYTEgZmFpbGVk Iik7DQo+ICsJCXJldHVybiBQVFJfRVJSKHRmbSk7DQo+ICsJfQ0KPiArCWRlc2MgPSBremFsbG9j KHNpemVvZigqZGVzYykgKyBjcnlwdG9fc2hhc2hfZGVzY3NpemUodGZtKSwgR0ZQX0tFUk5FTCk7 DQo+ICsJaWYgKCFkZXNjKSB7DQo+ICsJCWNyeXB0b19mcmVlX3NoYXNoKHRmbSk7DQo+ICsJCXJl dHVybiAtRU5PTUVNOw0KPiArCX0NCj4gKw0KPiArCWRlc2MtPnRmbSA9IHRmbTsNCj4gKwllcnIg PSBjcnlwdG9fc2hhc2hfZGlnZXN0KGRlc2MsIHNoYTFfaW5wdXQsIHNpemUsIG91dHB1dF9hdik7 DQo+ICsJaWYgKGVycikNCj4gKwkJRFJNX0RFVl9FUlJPUihkZXYsICJjcnlwdG9fc2hhc2hfZGln ZXN0IHNoYTEgZmFpbGVkIik7DQo+ICsNCj4gKwljcnlwdG9fZnJlZV9zaGFzaCh0Zm0pOw0KPiAr CWtmcmVlKGRlc2MpOw0KPiArCXJldHVybiBlcnI7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQg aXQ2NTA1X3NldHVwX3NoYTFfaW5wdXQoc3RydWN0IGl0NjUwNSAqaXQ2NTA1LCB1OCAqc2hhMV9p bnB1dCkNCj4gK3sNCj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRl djsNCj4gKwl1OCBiaW5mb1syXTsNCj4gKwlpbnQgZG93bl9zdHJlYW1fY291bnQsIGksIGVyciwg bXNnX2NvdW50ID0gMDsNCj4gKw0KPiArCWVyciA9IGl0NjUwNV9nZXRfZHBjZChpdDY1MDUsIERQ X0FVWF9IRENQX0JJTkZPLCBiaW5mbywNCj4gKwkJCSAgICAgIEFSUkFZX1NJWkUoYmluZm8pKTsN Cj4gKw0KPiArCWlmIChlcnIgPCAwKSB7DQo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAiUmVhZCBi aW5mbyB2YWx1ZSBGYWlsIik7DQo+ICsJCXJldHVybiBlcnI7DQo+ICsJfQ0KPiArDQo+ICsJZG93 bl9zdHJlYW1fY291bnQgPSBiaW5mb1swXSAmIDB4N0Y7DQo+ICsJRFJNX0RFVl9ERUJVR19EUklW RVIoZGV2LCAiYmluZm86MHglKnBoIiwgKGludClBUlJBWV9TSVpFKGJpbmZvKSwNCj4gKwkJCSAg ICAgYmluZm8pOw0KPiArDQo+ICsJaWYgKChiaW5mb1swXSAmIEJJVCg3KSkgfHwgKGJpbmZvWzFd ICYgQklUKDMpKSkgew0KPiArCQlEUk1fREVWX0VSUk9SKGRldiwgIkhEQ1AgbWF4IGNhc2NhZGUg ZGV2aWNlIGV4Y2VlZCIpOw0KPiArCQlyZXR1cm4gMDsNCj4gKwl9DQo+ICsNCj4gKwlpZiAoIWRv d25fc3RyZWFtX2NvdW50IHx8DQo+ICsJICAgIChkb3duX3N0cmVhbV9jb3VudCA+IE1BWF9IRENQ X0RPV05fU1RSRUFNX0NPVU5UKSkgew0KPiArCQlEUk1fREVWX0VSUk9SKGRldiwgIkhEQ1AgZG93 biBzdHJlYW0gY291bnQgRXJyb3IgJWQiLA0KPiArCQkJICAgICAgZG93bl9zdHJlYW1fY291bnQp Ow0KPiArCQlyZXR1cm4gMDsNCj4gKwl9DQo+ICsNCj4gKwlmb3IgKGkgPSAwOyBpIDwgZG93bl9z dHJlYW1fY291bnQ7IGkrKykgew0KPiArCQllcnIgPSBpdDY1MDVfZ2V0X2RwY2QoaXQ2NTA1LCBE UF9BVVhfSERDUF9LU1ZfRklGTyArDQo+ICsJCQkJICAgICAgKGkgJSAzKSAqIERSTV9IRENQX0tT Vl9MRU4sDQo+ICsJCQkJICAgICAgc2hhMV9pbnB1dCArIG1zZ19jb3VudCwNCj4gKwkJCQkgICAg ICBEUk1fSERDUF9LU1ZfTEVOKTsNCj4gKw0KPiArCQlpZiAoZXJyIDwgMCkNCj4gKwkJCXJldHVy biBlcnI7DQo+ICsNCj4gKwkJbXNnX2NvdW50ICs9IDU7DQo+ICsJfQ0KPiArDQo+ICsJaXQ2NTA1 LT5oZGNwX2Rvd25fc3RyZWFtX2NvdW50ID0gZG93bl9zdHJlYW1fY291bnQ7DQo+ICsJc2hhMV9p bnB1dFttc2dfY291bnQrK10gPSBiaW5mb1swXTsNCj4gKwlzaGExX2lucHV0W21zZ19jb3VudCsr XSA9IGJpbmZvWzFdOw0KPiArDQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0hEQ1Bf Q1RSTDIsIEhEQ1BfRU5fTTBfUkVBRCwNCj4gKwkJCUhEQ1BfRU5fTTBfUkVBRCk7DQo+ICsNCj4g KwllcnIgPSByZWdtYXBfYnVsa19yZWFkKGl0NjUwNS0+cmVnbWFwLCBSRUdfTTBfMF83LA0KPiAr CQkJICAgICAgIHNoYTFfaW5wdXQgKyBtc2dfY291bnQsIDgpOw0KPiArDQo+ICsJaXQ2NTA1X3Nl dF9iaXRzKGl0NjUwNSwgUkVHX0hEQ1BfQ1RSTDIsIEhEQ1BfRU5fTTBfUkVBRCwgMHgwMCk7DQo+ ICsNCj4gKwlpZiAoZXJyIDwgMCkgew0KPiArCQlEUk1fREVWX0VSUk9SKGRldiwgIiBXYXJuaW5n LCBSZWFkIE0gdmFsdWUgRmFpbCIpOw0KPiArCQlyZXR1cm4gZXJyOw0KPiArCX0NCj4gKw0KPiAr CW1zZ19jb3VudCArPSA4Ow0KPiArDQo+ICsJcmV0dXJuIG1zZ19jb3VudDsNCj4gK30NCj4gKw0K PiArc3RhdGljIGJvb2wgaXQ2NTA1X2hkY3BfcGFydDJfa3N2bGlzdF9jaGVjayhzdHJ1Y3QgaXQ2 NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xp ZW50LT5kZXY7DQo+ICsJdTggYXZbNV1bNF0sIGJ2WzVdWzRdOw0KPiArCWludCBpLCBlcnI7DQo+ ICsNCj4gKwlpID0gaXQ2NTA1X3NldHVwX3NoYTFfaW5wdXQoaXQ2NTA1LCBpdDY1MDUtPnNoYTFf aW5wdXQpOw0KPiArCWlmIChpIDw9IDApIHsNCj4gKwkJRFJNX0RFVl9FUlJPUihkZXYsICJTSEEt MSBJbnB1dCBsZW5ndGggZXJyb3IgJWQiLCBpKTsNCj4gKwkJcmV0dXJuIGZhbHNlOw0KPiArCX0N Cj4gKw0KPiArCWl0NjUwNV9zaGExX2RpZ2VzdChpdDY1MDUsIGl0NjUwNS0+c2hhMV9pbnB1dCwg aSwgKHU4ICopYXYpOw0KPiArDQo+ICsJZXJyID0gaXQ2NTA1X2dldF9kcGNkKGl0NjUwNSwgRFBf QVVYX0hEQ1BfVl9QUklNRSgwKSwgKHU4ICopYnYsDQo+ICsJCQkgICAgICBzaXplb2YoYnYpKTsN Cj4gKw0KPiArCWlmIChlcnIgPCAwKSB7DQo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAiUmVhZCBW JyB2YWx1ZSBGYWlsIik7DQo+ICsJCXJldHVybiBmYWxzZTsNCj4gKwl9DQo+ICsNCj4gKwlmb3Ig KGkgPSAwOyBpIDwgNTsgaSsrKQ0KPiArCQlpZiAoKGJ2W2ldWzNdICE9IGF2W2ldWzBdKSB8fCAo YnZbaV1bMl0gIT0gYXZbaV1bMV0pIHx8DQo+ICsJCSAgICAoYnZbaV1bMV0gIT0gYXZbaV1bMl0p IHx8IChidltpXVswXSAhPSBhdltpXVszXSkpDQo+ICsJCQlyZXR1cm4gZmFsc2U7DQo+ICsNCj4g KwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJWJyBhbGwgbWF0Y2ghISIpOw0KPiArCXJldHVy biB0cnVlOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfaGRjcF93YWl0X2tzdl9s aXN0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykNCj4gK3sNCj4gKwlzdHJ1Y3QgaXQ2NTA1ICpp dDY1MDUgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGl0NjUwNSwNCj4gKwkJCQkJICAgICBo ZGNwX3dhaXRfa3N2X2xpc3QpOw0KPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNs aWVudC0+ZGV2Ow0KPiArCXVuc2lnbmVkIGludCB0aW1lb3V0ID0gNTAwMDsNCj4gKwl1OCBic3Rh dHVzID0gMDsNCj4gKwlib29sIGtzdl9saXN0X2NoZWNrOw0KPiArDQo+ICsJdGltZW91dCAvPSAy MDsNCj4gKwl3aGlsZSAodGltZW91dCA+IDApIHsNCj4gKwkJaWYgKCFpdDY1MDVfZ2V0X3Npbmtf aHBkX3N0YXR1cyhpdDY1MDUpKQ0KPiArCQkJcmV0dXJuOw0KPiArDQo+ICsJCWJzdGF0dXMgPSBp dDY1MDVfZHBjZF9yZWFkKGl0NjUwNSwgRFBfQVVYX0hEQ1BfQlNUQVRVUyk7DQo+ICsNCj4gKwkJ aWYgKGJzdGF0dXMgJiBEUF9CU1RBVFVTX1JFQURZKQ0KPiArCQkJYnJlYWs7DQo+ICsNCj4gKwkJ bXNsZWVwKDIwKTsNCj4gKwkJdGltZW91dC0tOw0KPiArCX0NCj4gKw0KPiArCWlmICh0aW1lb3V0 ID09IDApIHsNCj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAidGltZW91dCBhbmQga3N2 IGxpc3Qgd2FpdCBmYWlsZWQiKTsNCj4gKwkJZ290byB0aW1lb3V0Ow0KPiArCX0NCj4gKw0KPiAr CWtzdl9saXN0X2NoZWNrID0gaXQ2NTA1X2hkY3BfcGFydDJfa3N2bGlzdF9jaGVjayhpdDY1MDUp Ow0KPiArCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImtzdiBsaXN0IHJlYWR5LCBrc3YgbGlz dCBjaGVjayAlcyIsDQo+ICsJCQkgICAgIGtzdl9saXN0X2NoZWNrID8gInBhc3MiIDogImZhaWwi KTsNCj4gKwlpZiAoa3N2X2xpc3RfY2hlY2spIHsNCj4gKwkJaXQ2NTA1X3NldF9iaXRzKGl0NjUw NSwgUkVHX0hEQ1BfVFJJR0dFUiwNCj4gKwkJCQlIRENQX1RSSUdHRVJfS1NWX0RPTkUsIEhEQ1Bf VFJJR0dFUl9LU1ZfRE9ORSk7DQo+ICsJCXJldHVybjsNCj4gKwl9DQo+ICt0aW1lb3V0Og0KPiAr CWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19IRENQX1RSSUdHRVIsDQo+ICsJCQlIRENQX1RS SUdHRVJfS1NWX0RPTkUgfCBIRENQX1RSSUdHRVJfS1NWX0ZBSUwsDQo+ICsJCQlIRENQX1RSSUdH RVJfS1NWX0RPTkUgfCBIRENQX1RSSUdHRVJfS1NWX0ZBSUwpOw0KPiArfQ0KPiArDQo+ICtzdGF0 aWMgdm9pZCBpdDY1MDVfaGRjcF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykNCj4gK3sN Cj4gKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGl0 NjUwNSwNCj4gKwkJCQkJICAgICBoZGNwX3dvcmsud29yayk7DQo+ICsJc3RydWN0IGRldmljZSAq ZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsJaW50IHJldDsNCj4gKwl1OCBsaW5rX3N0 YXR1c1tEUF9MSU5LX1NUQVRVU19TSVpFXSA9IHsgMCB9Ow0KPiArDQo+ICsJRFJNX0RFVl9ERUJV R19EUklWRVIoZGV2LCAic3RhcnQiKTsNCj4gKw0KPiArCWlmICghaXQ2NTA1X2dldF9zaW5rX2hw ZF9zdGF0dXMoaXQ2NTA1KSkNCj4gKwkJcmV0dXJuOw0KPiArDQo+ICsJcmV0ID0gZHJtX2RwX2Rw Y2RfcmVhZF9saW5rX3N0YXR1cygmaXQ2NTA1LT5hdXgsIGxpbmtfc3RhdHVzKTsNCj4gKwlEUk1f REVWX0RFQlVHX0RSSVZFUihkZXYsICJyZXQ6ICVkIGxpbmtfc3RhdHVzOiAlKnBoIiwgcmV0LA0K PiArCQkJICAgICAoaW50KXNpemVvZihsaW5rX3N0YXR1cyksIGxpbmtfc3RhdHVzKTsNCj4gKw0K PiArCWlmICgocmV0IDwgMCkgfHwgIWRybV9kcF9jaGFubmVsX2VxX29rKGxpbmtfc3RhdHVzLCBp dDY1MDUtPmxhbmVfY291bnQpDQo+ICsJICAgIHx8ICFpdDY1MDVfZ2V0X3ZpZGVvX3N0YXR1cyhp dDY1MDUpKSB7DQo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImxpbmsgdHJhaW4gbm90 IGRvbmUgb3Igbm8gdmlkZW8iKTsNCj4gKwkJcmV0dXJuOw0KPiArCX0NCj4gKw0KPiArCXJldCA9 IGl0NjUwNV9nZXRfZHBjZChpdDY1MDUsIERQX0FVWF9IRENQX0JLU1YsIGl0NjUwNS0+YmtzdnMs DQo+ICsJCQkgICAgICBBUlJBWV9TSVpFKGl0NjUwNS0+YmtzdnMpKTsNCj4gKwlpZiAocmV0IDwg MCkgew0KPiArCQlEUk1fREVWX0VSUk9SKGRldiwgImZhaWwgdG8gZ2V0IGJrc3YgIHJldDogJWQi LCByZXQpOw0KPiArCQlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfSERDUF9UUklHR0VSLA0K PiArCQkJCUhEQ1BfVFJJR0dFUl9LU1ZfRkFJTCwgSERDUF9UUklHR0VSX0tTVl9GQUlMKTsNCj4g Kwl9DQo+ICsNCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJia3N2ID0gMHglKnBoIiwN Cj4gKwkJCSAgICAgKGludClBUlJBWV9TSVpFKGl0NjUwNS0+YmtzdnMpLCBpdDY1MDUtPmJrc3Zz KTsNCj4gKw0KPiArCWlmICghaXQ2NTA1X2hkY3BfaXNfa3N2X3ZhbGlkKGl0NjUwNS0+YmtzdnMp KSB7DQo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAiRGlzcGxheSBQb3J0IGJrc3Ygbm90IHZhbGlk Iik7DQo+ICsJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19IRENQX1RSSUdHRVIsDQo+ICsJ CQkJSERDUF9UUklHR0VSX0tTVl9GQUlMLCBIRENQX1RSSUdHRVJfS1NWX0ZBSUwpOw0KPiArCX0N Cj4gKw0KPiArCWl0NjUwNV9oZGNwX3BhcnQxX2F1dGgoaXQ2NTA1KTsNCj4gK30NCj4gKw0KPiAr c3RhdGljIHZvaWQgaXQ2NTA1X3Nob3dfaGRjcF9pbmZvKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkN Cj4gK3sNCj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCj4g KwlpbnQgaTsNCj4gKwl1OCAqc2hhMSA9IGl0NjUwNS0+c2hhMV9pbnB1dDsNCj4gKw0KPiArCURS TV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImhkY3Bfc3RhdHVzOiAlZCBpc19yZXBlYXRlcjogJWQi LA0KPiArCQkJICAgICBpdDY1MDUtPmhkY3Bfc3RhdHVzLCBpdDY1MDUtPmlzX3JlcGVhdGVyKTsN Cj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJia3N2ID0gMHglKnBoIiwNCj4gKwkJCSAg ICAgKGludClBUlJBWV9TSVpFKGl0NjUwNS0+YmtzdnMpLCBpdDY1MDUtPmJrc3ZzKTsNCj4gKw0K PiArCWlmIChpdDY1MDUtPmlzX3JlcGVhdGVyKSB7DQo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVS KGRldiwgImhkY3BfZG93bl9zdHJlYW1fY291bnQ6ICVkIiwNCj4gKwkJCQkgICAgIGl0NjUwNS0+ aGRjcF9kb3duX3N0cmVhbV9jb3VudCk7DQo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwg InNoYTFfaW5wdXQ6IDB4JSpwaCIsDQo+ICsJCQkJICAgICAoaW50KUFSUkFZX1NJWkUoaXQ2NTA1 LT5zaGExX2lucHV0KSwNCj4gKwkJCQkgICAgIGl0NjUwNS0+c2hhMV9pbnB1dCk7DQo+ICsJCWZv ciAoaSA9IDA7IGkgPCBpdDY1MDUtPmhkY3BfZG93bl9zdHJlYW1fY291bnQ7IGkrKykgew0KPiAr CQkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiS1NWXyVkID0gMHglKnBoIiwgaSwNCj4gKwkJ CQkJICAgICBEUk1fSERDUF9LU1ZfTEVOLCBzaGExKTsNCj4gKwkJCXNoYTEgKz0gRFJNX0hEQ1Bf S1NWX0xFTjsNCj4gKwkJfQ0KPiArCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJiaW5mbzog MHglMnBoIE0wOiAweCU4cGgiLA0KPiArCQkJCSAgICAgc2hhMSwgc2hhMSArIDIpOw0KPiArCX0N Cj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X3N0b3BfbGlua190cmFpbihzdHJ1Y3Qg aXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJaXQ2NTA1LT5saW5rX3N0YXRlID0gTElOS19JRExF Ow0KPiArCWNhbmNlbF93b3JrX3N5bmMoJml0NjUwNS0+bGlua193b3Jrcyk7DQo+ICsJaXQ2NTA1 X3dyaXRlKGl0NjUwNSwgUkVHX1RSQUlOX0NUUkwxLCBGT1JDRV9SRVRSQUlOKTsNCj4gK30NCj4g Kw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X2xpbmtfdHJhaW5fb2soc3RydWN0IGl0NjUwNSAqaXQ2 NTA1KQ0KPiArew0KPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2 Ow0KPiArDQo+ICsJaXQ2NTA1LT5saW5rX3N0YXRlID0gTElOS19PSzsNCj4gKwkvKiBkaXNhbGJl IG11dGUgZW5hYmxlIGF2aSBpbmZvIGZyYW1lICovDQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUw NSwgUkVHX0RBVEFfTVVURV9DVFJMLCBFTl9WSURfTVVURSwgMHgwMCk7DQo+ICsJaXQ2NTA1X3Nl dF9iaXRzKGl0NjUwNSwgUkVHX0lORk9GUkFNRV9DVFJMLA0KPiArCQkJRU5fVklEX0NUUkxfUEtU LCBFTl9WSURfQ1RSTF9QS1QpOw0KPiArDQo+ICsJaWYgKGl0NjUwNV9hdWRpb19pbnB1dChpdDY1 MDUpKSB7DQo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIkVuYWJsZSBhdWRpbyEiKTsN Cj4gKwkJaXQ2NTA1X2VuYWJsZV9hdWRpbyhpdDY1MDUpOw0KPiArCX0NCj4gKw0KPiArCWlmIChp dDY1MDUtPmhkY3BfZGVzaXJlZCkNCj4gKwkJaXQ2NTA1X3N0YXJ0X2hkY3AoaXQ2NTA1KTsNCj4g K30NCj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X2xpbmtfc3RlcF90cmFpbl9wcm9jZXNzKHN0 cnVjdCBpdDY1MDUgKml0NjUwNSkNCj4gK3sNCj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2 NTA1LT5jbGllbnQtPmRldjsNCj4gKwlpbnQgcmV0LCBpLCBzdGVwX3JldHJ5ID0gMzsNCj4gKw0K PiArCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIlN0YXJ0IHN0ZXAgdHJhaW4iKTsNCj4gKw0K PiArCWlmIChpdDY1MDUtPnNpbmtfY291bnQgPT0gMCkgew0KPiArCQlEUk1fREVWX0RFQlVHX0RS SVZFUihkZXYsICJpdDY1MDUtPnNpbmtfY291bnQ6JWQsIGZvcmNlIGVxIiwNCj4gKwkJCQkgICAg IGl0NjUwNS0+c2lua19jb3VudCk7DQo+ICsJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsCVJFR19U UkFJTl9DVFJMMCwgRk9SQ0VfRVFfRE9ORSwNCj4gKwkJCQlGT1JDRV9FUV9ET05FKTsNCj4gKwkJ cmV0dXJuOw0KPiArCX0NCj4gKw0KPiArCWlmICghaXQ2NTA1LT5zdGVwX3RyYWluKSB7DQo+ICsJ CURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIm5vdCBzdXBwb3J0IHN0ZXAgdHJhaW4iKTsNCj4g KwkJcmV0dXJuOw0KPiArCX0NCj4gKw0KPiArCS8qIHNldHAgdHJhaW5pbmcgc3RhcnQgaGVyZSAq Lw0KPiArCWZvciAoaSA9IDA7IGkgPCBzdGVwX3JldHJ5OyBpKyspIHsNCj4gKwkJaXQ2NTA1X3Nl dF9iaXRzKGl0NjUwNSwgUkVHX1RSQUlOX0NUUkwwLA0KPiArCQkJCUZPUkNFX0NSX0RPTkUgfCBG T1JDRV9FUV9ET05FLCAweDAwKTsNCj4gKwkJaXQ2NTA1X2RwY2Rfd3JpdGUoaXQ2NTA1LCBEUF9U UkFJTklOR19QQVRURVJOX1NFVCwNCj4gKwkJCQkgIERQX1RSQUlOSU5HX1BBVFRFUk5fRElTQUJM RSk7DQo+ICsJCXJldCA9IGl0NjUwNV9saW5rX3N0YXJ0X3N0ZXBfdHJhaW4oaXQ2NTA1KTsNCj4g KwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAic3RlcCB0cmFpbiAlcywgcmV0cnk6JWQgdGlt ZXMiLA0KPiArCQkJCSAgICAgcmV0ID8gInBhc3MiIDogImZhaWxlZCIsIGkgKyAxKTsNCj4gKwkJ aWYgKHJldCkgew0KPiArCQkJaXQ2NTA1X2xpbmtfdHJhaW5fb2soaXQ2NTA1KTsNCj4gKwkJCXJl dHVybjsNCj4gKwkJfQ0KPiArCX0NCj4gKw0KPiArCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwg InRyYWluaW5nIGZhaWwiKTsNCj4gKwlpdDY1MDUtPmxpbmtfc3RhdGUgPSBMSU5LX0lETEU7DQo+ ICsJaXQ2NTA1X3ZpZGVvX3Jlc2V0KGl0NjUwNSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lk IGl0NjUwNV9saW5rX3RyYWluaW5nX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQ0KPiAr ew0KPiArCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qg aXQ2NTA1LCBsaW5rX3dvcmtzKTsNCj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5j bGllbnQtPmRldjsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIo ZGV2LCAiaXQ2NTA1LT5zaW5rX2NvdW50OiAlZCIsDQo+ICsJCQkgICAgIGl0NjUwNS0+c2lua19j b3VudCk7DQo+ICsNCj4gKwlpZiAoIWl0NjUwNV9nZXRfc2lua19ocGRfc3RhdHVzKGl0NjUwNSkp DQo+ICsJCXJldHVybjsNCj4gKw0KPiArCWl0NjUwNV9saW5rX3RyYWluaW5nX3NldHVwKGl0NjUw NSk7DQo+ICsJaXQ2NTA1X3Jlc2V0X2hkY3AoaXQ2NTA1KTsNCj4gKwlpdDY1MDVfYXV4X3Jlc2V0 KGl0NjUwNSk7DQo+ICsNCj4gKwlpZiAoaXQ2NTA1LT5hdXRvX3RyYWluX3JldHJ5IDwgMSkgew0K PiArCQlpdDY1MDVfbGlua19zdGVwX3RyYWluX3Byb2Nlc3MoaXQ2NTA1KTsNCj4gKwkJcmV0dXJu Ow0KPiArCX0NCj4gKw0KPiArCXJldCA9IGl0NjUwNV9saW5rX3N0YXJ0X2F1dG9fdHJhaW4oaXQ2 NTA1KTsNCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJhdXRvIHRyYWluICVzLCBhdXRv X3RyYWluX3JldHJ5OiAlZCIsDQo+ICsJCQkgICAgIHJldCA/ICJwYXNzIiA6ICJmYWlsZWQiLCBp dDY1MDUtPmF1dG9fdHJhaW5fcmV0cnkpOw0KPiArCWl0NjUwNS0+YXV0b190cmFpbl9yZXRyeS0t Ow0KPiArDQo+ICsJaWYgKHJldCkgew0KPiArCQlpdDY1MDVfbGlua190cmFpbl9vayhpdDY1MDUp Ow0KPiArCQlyZXR1cm47DQo+ICsJfQ0KPiArDQo+ICsJaXQ2NTA1X2R1bXAoaXQ2NTA1KTsNCj4g K30NCj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X3BsdWdnZWRfc3RhdHVzX3RvX2NvZGVjKHN0 cnVjdCBpdDY1MDUgKml0NjUwNSkNCj4gK3sNCj4gKwllbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVz IHN0YXR1cyA9IGl0NjUwNS0+Y29ubmVjdG9yX3N0YXR1czsNCj4gKw0KPiArCWlmIChpdDY1MDUt PnBsdWdnZWRfY2IgJiYgaXQ2NTA1LT5jb2RlY19kZXYpDQo+ICsJCWl0NjUwNS0+cGx1Z2dlZF9j YihpdDY1MDUtPmNvZGVjX2RldiwNCj4gKwkJCQkgICBzdGF0dXMgPT0gY29ubmVjdG9yX3N0YXR1 c19jb25uZWN0ZWQpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGl0NjUwNV9wcm9jZXNzX2hw ZF9pcnEoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCXN0cnVjdCBkZXZpY2UgKmRl diA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KPiArCWludCByZXQsIGRwY2Rfc2lua19jb3VudCwg ZHBfaXJxX3ZlY3RvciwgYnN0YXR1czsNCj4gKwl1OCBsaW5rX3N0YXR1c1tEUF9MSU5LX1NUQVRV U19TSVpFXTsNCj4gKw0KPiArCWlmICghaXQ2NTA1X2dldF9zaW5rX2hwZF9zdGF0dXMoaXQ2NTA1 KSkgew0KPiArCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJIUERfSVJRIEhQRCBsb3ciKTsN Cj4gKwkJaXQ2NTA1LT5zaW5rX2NvdW50ID0gMDsNCj4gKwkJcmV0dXJuIDA7DQo+ICsJfQ0KPiAr DQo+ICsJcmV0ID0gaXQ2NTA1X2RwY2RfcmVhZChpdDY1MDUsIERQX1NJTktfQ09VTlQpOw0KPiAr CWlmIChyZXQgPCAwKQ0KPiArCQlyZXR1cm4gcmV0Ow0KPiArDQo+ICsJZHBjZF9zaW5rX2NvdW50 ID0gRFBfR0VUX1NJTktfQ09VTlQocmV0KTsNCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYs ICJkcGNkX3NpbmtfY291bnQ6ICVkIGl0NjUwNS0+c2lua19jb3VudDolZCIsDQo+ICsJCQkgICAg IGRwY2Rfc2lua19jb3VudCwgaXQ2NTA1LT5zaW5rX2NvdW50KTsNCj4gKw0KPiArCWlmIChpdDY1 MDUtPmJyYW5jaF9kZXZpY2UgJiYgZHBjZF9zaW5rX2NvdW50ICE9IGl0NjUwNS0+c2lua19jb3Vu dCkgew0KPiArCQltZW1zZXQoaXQ2NTA1LT5kcGNkLCAwLCBzaXplb2YoaXQ2NTA1LT5kcGNkKSk7 DQo+ICsJCWl0NjUwNS0+c2lua19jb3VudCA9IGRwY2Rfc2lua19jb3VudDsNCj4gKwkJa2ZyZWUo aXQ2NTA1LT5lZGlkKTsNCj4gKwkJaXQ2NTA1LT5lZGlkID0gTlVMTDsNCj4gKwkJaXQ2NTA1X3Jl c2V0X2xvZ2ljKGl0NjUwNSk7DQo+ICsJCWl0NjUwNV9pbnRfbWFza19lbmFibGUoaXQ2NTA1KTsN Cj4gKwkJaXQ2NTA1X2luaXQoaXQ2NTA1KTsNCj4gKwkJcmV0dXJuIDA7DQo+ICsJfQ0KPiArDQo+ ICsJZHBfaXJxX3ZlY3RvciA9IGl0NjUwNV9kcGNkX3JlYWQoaXQ2NTA1LCBEUF9ERVZJQ0VfU0VS VklDRV9JUlFfVkVDVE9SKTsNCj4gKwlpZiAoZHBfaXJxX3ZlY3RvciA8IDApDQo+ICsJCXJldHVy biBkcF9pcnFfdmVjdG9yOw0KPiArDQo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiZHBf aXJxX3ZlY3RvciA9IDB4JTAyeCIsIGRwX2lycV92ZWN0b3IpOw0KPiArDQo+ICsJaWYgKGRwX2ly cV92ZWN0b3IgJiBEUF9DUF9JUlEpIHsNCj4gKwkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVH X0hEQ1BfVFJJR0dFUiwgSERDUF9UUklHR0VSX0NQSVJRLA0KPiArCQkJCUhEQ1BfVFJJR0dFUl9D UElSUSk7DQo+ICsNCj4gKwkJYnN0YXR1cyA9IGl0NjUwNV9kcGNkX3JlYWQoaXQ2NTA1LCBEUF9B VVhfSERDUF9CU1RBVFVTKTsNCj4gKwkJaWYgKGJzdGF0dXMgPCAwKQ0KPiArCQkJcmV0dXJuIGJz dGF0dXM7DQo+ICsNCj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiQnN0YXR1cyA9IDB4 JTAyeCIsIGJzdGF0dXMpOw0KPiArCX0NCj4gKw0KPiArCXJldCA9IGRybV9kcF9kcGNkX3JlYWRf bGlua19zdGF0dXMoJml0NjUwNS0+YXV4LCBsaW5rX3N0YXR1cyk7DQo+ICsJaWYgKHJldCA8IDAp IHsNCj4gKwkJRFJNX0RFVl9FUlJPUihkZXYsICJGYWlsIHRvIHJlYWQgbGluayBzdGF0dXMgcmV0 OiAlZCIsDQo+ICsJCQkgICAgICByZXQpOw0KPiArCQlyZXR1cm4gcmV0Ow0KPiArCX0NCj4gKw0K PiArCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImxpbmsgc3RhdHVzID0gMHglKnBoIiwNCj4g KwkJCSAgICAgKGludClBUlJBWV9TSVpFKGxpbmtfc3RhdHVzKSwgbGlua19zdGF0dXMpOw0KPiAr DQo+ICsJaWYgKCFkcm1fZHBfY2hhbm5lbF9lcV9vayhsaW5rX3N0YXR1cywgaXQ2NTA1LT5sYW5l X2NvdW50KSkgew0KPiArCQlpdDY1MDUtPmF1dG9fdHJhaW5fcmV0cnkgPSBBVVRPX1RSQUlOX1JF VFJZOw0KPiArCQlpdDY1MDVfdmlkZW9fcmVzZXQoaXQ2NTA1KTsNCj4gKwl9DQo+ICsNCj4gKwly ZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X2NoZWNrX3JlZzA2KHN0 cnVjdCBpdDY1MDUgKml0NjUwNSwgdW5zaWduZWQgaW50IHJlZzA2KQ0KPiArew0KPiArCXN0cnVj dCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KPiArCWJvb2wgZGF0YTsNCj4g Kw0KPiArCWlmIChyZWcwNiAmIElOVF9IUERfQ0hBTkdFKSB7DQo+ICsJCWRhdGEgPSBpdDY1MDVf Z2V0X3NpbmtfaHBkX3N0YXR1cyhpdDY1MDUpOw0KPiArCQlEUk1fREVWX0RFQlVHX0RSSVZFUihk ZXYsICJocGQgY2hhbmdlIGludGVycnVwdCwgY2hhbmdlIHRvICVzIiwNCj4gKwkJCQkgICAgIGRh dGEgPyAiaGlnaCIgOiAibG93Iik7DQo+ICsNCj4gKwkJZHJtX2hlbHBlcl9ocGRfaXJxX2V2ZW50 KGl0NjUwNS0+Y29ubmVjdG9yLmRldik7DQo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwg Iml0NjUwNS0+c2lua19jb3VudDogJWQiLA0KPiArCQkJCSAgICAgaXQ2NTA1LT5zaW5rX2NvdW50 KTsNCj4gKw0KPiArCQlpZiAoZGF0YSkgew0KPiArCQkJd2FpdF9mb3JfY29tcGxldGlvbl90aW1l b3V0KCZpdDY1MDUtPndhaXRfZWRpZF9jb21wbGV0ZSwNCj4gKwkJCQkJCSAgICBtc2Vjc190b19q aWZmaWVzKDYwMDApKTsNCj4gKwkJCWl0NjUwNV9sYW5lX3Rlcm1pbmF0aW9uX29uKGl0NjUwNSk7 DQo+ICsJCQlpdDY1MDVfbGFuZV9wb3dlcl9vbihpdDY1MDUpOw0KPiArDQo+ICsJCQkvKg0KPiAr CQkJICogZm9yIHNvbWUgZG9uZ2xlIHdoaWNoIGlzc3VlIEhQRF9pcnENCj4gKwkJCSAqIHdoZW4g c2luayBjb3VudCBjaGFuZ2UgZnJvbSAgMC0+MQ0KPiArCQkJICogaXQ2NTA1IG5vdCBhYmxlIHRv IHJlY2VpdmUgSFBEX0lSUQ0KPiArCQkJICogaWYgSFcgbmV2ZXIgZ28gaW50byB0cmFpbmlnIGRv bmUNCj4gKwkJCSAqLw0KPiArDQo+ICsJCQlpZiAoaXQ2NTA1LT5icmFuY2hfZGV2aWNlICYmIGl0 NjUwNS0+c2lua19jb3VudCA9PSAwKQ0KPiArCQkJCXNjaGVkdWxlX3dvcmsoJml0NjUwNS0+bGlu a193b3Jrcyk7DQo+ICsNCj4gKwkJCWlmICghaXQ2NTA1X2dldF92aWRlb19zdGF0dXMoaXQ2NTA1 KSkNCj4gKwkJCQlpdDY1MDVfdmlkZW9fcmVzZXQoaXQ2NTA1KTsNCj4gKw0KPiArCQkJaXQ2NTA1 X2NhbGNfdmlkZW9faW5mbyhpdDY1MDUpOw0KPiArCQl9IGVsc2Ugew0KPiArCQkJa2ZyZWUoaXQ2 NTA1LT5lZGlkKTsNCj4gKwkJCWl0NjUwNS0+ZWRpZCA9IE5VTEw7DQo+ICsJCQltZW1zZXQoaXQ2 NTA1LT5kcGNkLCAwLCBzaXplb2YoaXQ2NTA1LT5kcGNkKSk7DQo+ICsNCj4gKwkJCWlmIChpdDY1 MDUtPmhkY3BfZGVzaXJlZCkNCj4gKwkJCQlpdDY1MDVfc3RvcF9oZGNwKGl0NjUwNSk7DQo+ICsN Cj4gKwkJCWl0NjUwNV92aWRlb19kaXNhYmxlKGl0NjUwNSk7DQo+ICsJCQlpdDY1MDVfZGlzYWJs ZV9hdWRpbyhpdDY1MDUpOw0KPiArCQkJaXQ2NTA1X3N0b3BfbGlua190cmFpbihpdDY1MDUpOw0K PiArCQkJaXQ2NTA1X2xhbmVfb2ZmKGl0NjUwNSk7DQo+ICsJCQlyZXR1cm47DQo+ICsJCX0NCj4g Kwl9DQo+ICsNCj4gKwlpZiAocmVnMDYgJiBJTlRfUkVDRUlWRV9IUERfSVJRKSB7DQo+ICsJCURS TV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImhwZF9pcnEgaW50ZXJydXB0Iik7DQo+ICsNCj4gKwkJ aWYgKGl0NjUwNV9wcm9jZXNzX2hwZF9pcnEoaXQ2NTA1KSA8IDApDQo+ICsJCQlEUk1fREVWX0RF QlVHX0RSSVZFUihkZXYsICJwcm9jZXNzIGhwZF9pcnEgZmFpbCEiKTsNCj4gKwl9DQo+ICsNCj4g KwlpZiAocmVnMDYgJiBJTlRfU0NEVF9DSEFOR0UpIHsNCj4gKwkJZGF0YSA9IGl0NjUwNV9nZXRf dmlkZW9fc3RhdHVzKGl0NjUwNSk7DQo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInZp ZGVvIHN0YWJsZSBjaGFuZ2UgaW50ZXJydXB0LCAlcyIsDQo+ICsJCQkJICAgICBkYXRhID8gInN0 YWJsZSIgOiAidW5zdGFibGUiKTsNCj4gKwkJaXQ2NTA1X2NhbGNfdmlkZW9faW5mbyhpdDY1MDUp Ow0KPiArDQo+ICsJCWlmIChkYXRhKQ0KPiArCQkJc2NoZWR1bGVfd29yaygmaXQ2NTA1LT5saW5r X3dvcmtzKTsNCj4gKwl9DQo+ICsNCj4gKwlpZiAocmVnMDYgJiBJTlRfSERDUF9ET05FKSB7DQo+ ICsJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImhkY3AgZG9uZSBpbnRlcnJ1cHQiKTsNCj4g KwkJaXQ2NTA1LT5oZGNwX3N0YXR1cyA9IEhEQ1BfQVVUSF9ET05FOw0KPiArCQlpdDY1MDVfc2hv d19oZGNwX2luZm8oaXQ2NTA1KTsNCj4gKwl9DQo+ICsNCj4gKwlpZiAocmVnMDYgJiBJTlRfSERD UF9GQUlMKSB7DQo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImhkY3AgZmFpbCBpbnRl cnJ1cHQiKTsNCj4gKwkJaXQ2NTA1LT5oZGNwX3N0YXR1cyA9IEhEQ1BfQVVUSF9JRExFOw0KPiAr CQlpdDY1MDVfc2hvd19oZGNwX2luZm8oaXQ2NTA1KTsNCj4gKwkJaXQ2NTA1X3N0YXJ0X2hkY3Ao aXQ2NTA1KTsNCj4gKwl9DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9jaGVja19y ZWcwNyhzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUsIHVuc2lnbmVkIGludCByZWcwNykNCj4gK3sNCj4g KwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCj4gKw0KPiArCWlm IChyZWcwNyAmIElOVF9BVVhfQ01EX0ZBSUwpDQo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRl diwgIkFVWCBQQyBSZXF1ZXN0IEZhaWwgSW50ZXJydXB0Iik7DQo+ICsNCj4gKwlpZiAocmVnMDcg JiBJTlRfSERDUF9LU1ZfQ0hFQ0spIHsNCj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAi SERDUCBldmVudCBJbnRlcnJ1cHQiKTsNCj4gKwkJc2NoZWR1bGVfd29yaygmaXQ2NTA1LT5oZGNw X3dhaXRfa3N2X2xpc3QpOw0KPiArCX0NCj4gKw0KPiArCWlmIChyZWcwNyAmIElOVF9BVURJT19G SUZPX0VSUk9SKSB7DQo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImF1ZGlvIGZpZm8g ZXJyb3IgSW50ZXJydXB0Iik7DQo+ICsNCj4gKwkJaWYgKGl0NjUwNV9hdWRpb19pbnB1dChpdDY1 MDUpKQ0KPiArCQkJaXQ2NTA1X2VuYWJsZV9hdWRpbyhpdDY1MDUpOw0KPiArCX0NCj4gKw0KPiAr fQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfY2hlY2tfcmVnMDgoc3RydWN0IGl0NjUwNSAq aXQ2NTA1LCB1bnNpZ25lZCBpbnQgcmVnMDgpDQo+ICt7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2 ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsNCj4gKwlpZiAocmVnMDggJiBJTlRfTElOS19U UkFJTl9GQUlMKSB7DQo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImxpbmsgdHJhaW5p bmcgZmFpbCBpbnRlcnJ1cHQiKTsNCj4gKwkJc2NoZWR1bGVfd29yaygmaXQ2NTA1LT5saW5rX3dv cmtzKTsNCj4gKwl9DQo+ICsNCj4gKwlpZiAocmVnMDggJiBJTlRfVklEX0ZJRk9fRVJST1IpIHsN Cj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAidmlkZW8gZmlmbyBvdmVyZmxvdyBpbnRl cnJ1cHQiKTsNCj4gKwkJaXQ2NTA1LT5hdXRvX3RyYWluX3JldHJ5ID0gQVVUT19UUkFJTl9SRVRS WTsNCj4gKwkJZmx1c2hfd29yaygmaXQ2NTA1LT5saW5rX3dvcmtzKTsNCj4gKwkJaXQ2NTA1X3N0 b3BfaGRjcChpdDY1MDUpOw0KPiArCQlpdDY1MDVfdmlkZW9fcmVzZXQoaXQ2NTA1KTsNCj4gKwl9 DQo+ICsNCj4gKwlpZiAocmVnMDggJiBJTlRfSU9fTEFUQ0hfRklGT19PVkVSRkxPVykgew0KPiAr CQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJJTyBsYXRjaCBmaWZvIG92ZXJmbG93IGludGVy cnVwdCIpOw0KPiArCQlpdDY1MDUtPmF1dG9fdHJhaW5fcmV0cnkgPSBBVVRPX1RSQUlOX1JFVFJZ Ow0KPiArCQlmbHVzaF93b3JrKCZpdDY1MDUtPmxpbmtfd29ya3MpOw0KPiArCQlpdDY1MDVfc3Rv cF9oZGNwKGl0NjUwNSk7DQo+ICsJCWl0NjUwNV92aWRlb19yZXNldChpdDY1MDUpOw0KPiArCX0N Cj4gK30NCj4gKw0KPiArc3RhdGljIGlycXJldHVybl90IGl0NjUwNV9pbnRfdGhyZWFkZWRfaGFu ZGxlcihpbnQgdW51c2VkLCB2b2lkICpkYXRhKQ0KPiArew0KPiArCXN0cnVjdCBpdDY1MDUgKml0 NjUwNSA9IGRhdGE7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5k ZXY7DQo+ICsJaW50IHJlZzA2LCByZWcwNywgcmVnMDg7DQo+ICsNCj4gKwltc2xlZXAoMTAwKTsN Cj4gKwltdXRleF9sb2NrKCZpdDY1MDUtPmV4dGNvbl9sb2NrKTsNCj4gKw0KPiArCWlmIChpdDY1 MDUtPmVuYWJsZV9kcnZfaG9sZCB8fCAhaXQ2NTA1LT5wb3dlcmVkKQ0KPiArCQlnb3RvIHVubG9j azsNCj4gKw0KPiArCXJlZzA2ID0gaXQ2NTA1X3JlYWQoaXQ2NTA1LCBJTlRfU1RBVFVTXzAxKTsN Cj4gKwlyZWcwNyA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgSU5UX1NUQVRVU18wMik7DQo+ICsJcmVn MDggPSBpdDY1MDVfcmVhZChpdDY1MDUsIElOVF9TVEFUVVNfMDMpOw0KPiArDQo+ICsJaXQ2NTA1 X3dyaXRlKGl0NjUwNSwgSU5UX1NUQVRVU18wMSwgcmVnMDYpOw0KPiArCWl0NjUwNV93cml0ZShp dDY1MDUsIElOVF9TVEFUVVNfMDIsIHJlZzA3KTsNCj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBJ TlRfU1RBVFVTXzAzLCByZWcwOCk7DQo+ICsNCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYs ICJyZWcwNiA9IDB4JTAyeCIsIHJlZzA2KTsNCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYs ICJyZWcwNyA9IDB4JTAyeCIsIHJlZzA3KTsNCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYs ICJyZWcwOCA9IDB4JTAyeCIsIHJlZzA4KTsNCj4gKwlpdDY1MDVfZGVidWdfcHJpbnQoaXQ2NTA1 LCBSRUdfU1lTVEVNX1NUUywgIiIpOw0KPiArDQo+ICsJaWYgKHJlZzA2ICE9IDApDQo+ICsJCWl0 NjUwNV9jaGVja19yZWcwNihpdDY1MDUsIHJlZzA2KTsNCj4gKw0KPiArCWlmIChyZWcwNyAhPSAw KQ0KPiArCQlpdDY1MDVfY2hlY2tfcmVnMDcoaXQ2NTA1LCByZWcwNyk7DQo+ICsNCj4gKwlpZiAo cmVnMDggIT0gMCkNCj4gKwkJaXQ2NTA1X2NoZWNrX3JlZzA4KGl0NjUwNSwgcmVnMDgpOw0KPiAr DQo+ICt1bmxvY2s6DQo+ICsJbXV0ZXhfdW5sb2NrKCZpdDY1MDUtPmV4dGNvbl9sb2NrKTsNCj4g Kw0KPiArCXJldHVybiBJUlFfSEFORExFRDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBpdDY1 MDVfcG93ZXJvbihzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJc3RydWN0IGRldmlj ZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsJc3RydWN0IGl0NjUwNV9wbGF0Zm9y bV9kYXRhICpwZGF0YSA9ICZpdDY1MDUtPnBkYXRhOw0KPiArCWludCBlcnI7DQo+ICsNCj4gKwlp ZiAoaXQ2NTA1LT5wb3dlcmVkKSB7DQo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIml0 NjUwNSBhbHJlYWR5IHBvd2VyZWQgb24iKTsNCj4gKwkJcmV0dXJuIDA7DQo+ICsJfQ0KPiArDQo+ ICsJaWYgKHBkYXRhLT5wd3IxOCkgew0KPiArCQllcnIgPSByZWd1bGF0b3JfZW5hYmxlKHBkYXRh LT5wd3IxOCk7DQo+ICsJCWlmIChlcnIpIHsNCj4gKwkJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRl diwgIkZhaWxlZCB0byBlbmFibGUgVkREMTg6ICVkIiwNCj4gKwkJCQkJICAgICBlcnIpOw0KPiAr CQkJcmV0dXJuIGVycjsNCj4gKwkJfQ0KPiArCX0NCj4gKw0KPiArCWlmIChwZGF0YS0+b3ZkZCkg ew0KPiArCQkvKiB0aW1lIGludGVydmFsIGJldHdlZW4gSVZERCBhbmQgT1ZERCBhdCBsZWFzdCBi ZSAxbXMgKi8NCj4gKwkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOw0KPiArCQllcnIgPSByZWd1 bGF0b3JfZW5hYmxlKHBkYXRhLT5vdmRkKTsNCj4gKwkJaWYgKGVycikgew0KPiArCQkJcmVndWxh dG9yX2Rpc2FibGUocGRhdGEtPnB3cjE4KTsNCj4gKwkJCXJldHVybiBlcnI7DQo+ICsJCX0NCj4g Kwl9DQo+ICsJLyogdGltZSBpbnRlcnZhbCBiZXR3ZWVuIE9WREQgYW5kIFNZU1JTVE4gYXQgbGVh c3QgYmUgMTBtcyAqLw0KPiArCWlmIChwZGF0YS0+Z3Bpb2RfcmVzZXQpIHsNCj4gKwkJdXNsZWVw X3JhbmdlKDEwMDAwLCAyMDAwMCk7DQo+ICsJCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChwZGF0 YS0+Z3Bpb2RfcmVzZXQsIDApOw0KPiArCQl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7DQo+ICsJ CWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChwZGF0YS0+Z3Bpb2RfcmVzZXQsIDEpOw0KPiArCQl1 c2xlZXBfcmFuZ2UoMTAwMDAsIDIwMDAwKTsNCj4gKwl9DQo+ICsNCj4gKwlpdDY1MDVfcmVzZXRf bG9naWMoaXQ2NTA1KTsNCj4gKwlpdDY1MDVfaW50X21hc2tfZW5hYmxlKGl0NjUwNSk7DQo+ICsJ aXQ2NTA1X2luaXQoaXQ2NTA1KTsNCj4gKwlpdDY1MDVfbGFuZV9vZmYoaXQ2NTA1KTsNCj4gKw0K PiArCWl0NjUwNS0+cG93ZXJlZCA9IHRydWU7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4g Kw0KPiArc3RhdGljIGludCBpdDY1MDVfcG93ZXJvZmYoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0K PiArew0KPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KPiAr CXN0cnVjdCBpdDY1MDVfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSAmaXQ2NTA1LT5wZGF0YTsNCj4g KwlpbnQgZXJyOw0KPiArDQo+ICsJaWYgKCFpdDY1MDUtPnBvd2VyZWQpIHsNCj4gKwkJRFJNX0RF Vl9ERUJVR19EUklWRVIoZGV2LCAicG93ZXIgaGFkIGJlZW4gYWxyZWFkeSBvZmYiKTsNCj4gKwkJ cmV0dXJuIDA7DQo+ICsJfQ0KPiArDQo+ICsJaWYgKHBkYXRhLT5ncGlvZF9yZXNldCkNCj4gKwkJ Z3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKHBkYXRhLT5ncGlvZF9yZXNldCwgMCk7DQo+ICsNCj4g KwlpZiAocGRhdGEtPnB3cjE4KSB7DQo+ICsJCWVyciA9IHJlZ3VsYXRvcl9kaXNhYmxlKHBkYXRh LT5wd3IxOCk7DQo+ICsJCWlmIChlcnIpDQo+ICsJCQlyZXR1cm4gZXJyOw0KPiArCX0NCj4gKw0K PiArCWlmIChwZGF0YS0+b3ZkZCkgew0KPiArCQllcnIgPSByZWd1bGF0b3JfZGlzYWJsZShwZGF0 YS0+b3ZkZCk7DQo+ICsJCWlmIChlcnIpDQo+ICsJCQlyZXR1cm4gZXJyOw0KPiArCX0NCj4gKw0K PiArCWl0NjUwNS0+cG93ZXJlZCA9IGZhbHNlOw0KPiArCWtmcmVlKGl0NjUwNS0+ZWRpZCk7DQo+ ICsJaXQ2NTA1LT5lZGlkID0gTlVMTDsNCj4gKwlpdDY1MDUtPnNpbmtfY291bnQgPSAwOw0KPiAr DQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IGl0NjUw NSAqY29ubmVjdG9yX3RvX2l0NjUwNShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqYykNCj4gK3sNCj4g KwlyZXR1cm4gY29udGFpbmVyX29mKGMsIHN0cnVjdCBpdDY1MDUsIGNvbm5lY3Rvcik7DQo+ICt9 DQo+ICsNCj4gK3N0YXRpYyBpbnQgaXQ2NTA1X2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciAqY29ubmVjdG9yKQ0KPiArew0KPiArCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGNvbm5lY3Rv cl90b19pdDY1MDUoY29ubmVjdG9yKTsNCj4gKwlpbnQgZXJyLCBudW1fbW9kZXMgPSAwLCBpOw0K PiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KPiArDQo+ICsJ aWYgKGl0NjUwNS0+ZWRpZCkNCj4gKwkJcmV0dXJuIGRybV9hZGRfZWRpZF9tb2Rlcyhjb25uZWN0 b3IsIGl0NjUwNS0+ZWRpZCk7DQo+ICsNCj4gKwltdXRleF9sb2NrKCZpdDY1MDUtPm1vZGVfbG9j ayk7DQo+ICsJcmVpbml0X2NvbXBsZXRpb24oJml0NjUwNS0+d2FpdF9lZGlkX2NvbXBsZXRlKTsN Cj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsNCj4gKwkJaWYgKCFpdDY1MDVfZ2V0 X3NpbmtfaHBkX3N0YXR1cyhpdDY1MDUpKQ0KPiArCQkJZ290byB1bmxvY2s7DQo+ICsNCj4gKwkJ aXQ2NTA1LT5lZGlkID0gZHJtX2RvX2dldF9lZGlkKCZpdDY1MDUtPmNvbm5lY3RvciwNCj4gKwkJ CQkJICAgICAgIGl0NjUwNV9nZXRfZWRpZF9ibG9jaywgaXQ2NTA1KTsNCj4gKw0KPiArCQlpZiAo aXQ2NTA1LT5lZGlkKQ0KPiArCQkJYnJlYWs7DQo+ICsJfQ0KPiArCWlmICghaXQ2NTA1LT5lZGlk KSB7DQo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIHJlYWQgRURJRCIpOw0KPiAr CQludW1fbW9kZXMgPSAtRUlPOw0KPiArCQlnb3RvIHVubG9jazsNCj4gKwl9DQo+ICsNCj4gKwll cnIgPSBkcm1fY29ubmVjdG9yX3VwZGF0ZV9lZGlkX3Byb3BlcnR5KGNvbm5lY3RvciwgaXQ2NTA1 LT5lZGlkKTsNCj4gKwlpZiAoZXJyKSB7DQo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVk IHRvIHVwZGF0ZSBFRElEIHByb3BlcnR5OiAlZCIsIGVycik7DQo+ICsJCW51bV9tb2RlcyA9IGVy cjsNCj4gKwkJZ290byB1bmxvY2s7DQo+ICsJfQ0KPiArDQo+ICsJbnVtX21vZGVzID0gZHJtX2Fk ZF9lZGlkX21vZGVzKGNvbm5lY3RvciwgaXQ2NTA1LT5lZGlkKTsNCj4gKw0KPiArdW5sb2NrOg0K PiArCWNvbXBsZXRlKCZpdDY1MDUtPndhaXRfZWRpZF9jb21wbGV0ZSk7DQo+ICsJbXV0ZXhfdW5s b2NrKCZpdDY1MDUtPm1vZGVfbG9jayk7DQo+ICsNCj4gKwlyZXR1cm4gbnVtX21vZGVzOw0KPiAr fQ0KPiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNz IGl0NjUwNV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzID0gew0KPiArCS5nZXRfbW9kZXMgPSBpdDY1 MDVfZ2V0X21vZGVzLA0KPiArfTsNCj4gKw0KPiArc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9z dGF0dXMgaXQ2NTA1X2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLA0KPiAr CQkJCQkgICAgICAgYm9vbCBmb3JjZSkNCj4gK3sNCj4gKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUg PSBjb25uZWN0b3JfdG9faXQ2NTA1KGNvbm5lY3Rvcik7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2 ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsJZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBz dGF0dXMgPSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsNCj4gKw0KPiArCURSTV9ERVZf REVCVUdfRFJJVkVSKGRldiwgIml0NjUwNS0+c2lua19jb3VudDolZCBwb3dlcmVkOiVkIiwNCj4g KwkJCSAgICAgaXQ2NTA1LT5zaW5rX2NvdW50LCBpdDY1MDUtPnBvd2VyZWQpOw0KPiArDQo+ICsJ bXV0ZXhfbG9jaygmaXQ2NTA1LT5tb2RlX2xvY2spOw0KPiArDQo+ICsJaWYgKCFpdDY1MDUtPnBv d2VyZWQpDQo+ICsJCWdvdG8gdW5sb2NrOw0KPiArDQo+ICsJaWYgKGl0NjUwNS0+ZW5hYmxlX2Ry dl9ob2xkKSB7DQo+ICsJCXN0YXR1cyA9IGl0NjUwNV9nZXRfc2lua19ocGRfc3RhdHVzKGl0NjUw NSkgPw0KPiArCQkJCQljb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZCA6DQo+ICsJCQkJCWNvbm5l Y3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOw0KPiArCQlnb3RvIHVubG9jazsNCj4gKwl9DQo+ICsN Cj4gKwlpZiAoaXQ2NTA1X2dldF9zaW5rX2hwZF9zdGF0dXMoaXQ2NTA1KSkgew0KPiArCQlpdDY1 MDVfYXV4X29uKGl0NjUwNSk7DQo+ICsJCWl0NjUwNV9kcm1fZHBfbGlua19wcm9iZSgmaXQ2NTA1 LT5hdXgsICZpdDY1MDUtPmxpbmspOw0KPiArCQlpdDY1MDVfZHJtX2RwX2xpbmtfcG93ZXJfdXAo Jml0NjUwNS0+YXV4LCAmaXQ2NTA1LT5saW5rKTsNCj4gKwkJaXQ2NTA1LT5hdXRvX3RyYWluX3Jl dHJ5ID0gQVVUT19UUkFJTl9SRVRSWTsNCj4gKw0KPiArCQlpZiAoaXQ2NTA1LT5kcGNkWzBdID09 IDApIHsNCj4gKwkJCWl0NjUwNV9nZXRfZHBjZChpdDY1MDUsIERQX0RQQ0RfUkVWLCBpdDY1MDUt PmRwY2QsDQo+ICsJCQkJCUFSUkFZX1NJWkUoaXQ2NTA1LT5kcGNkKSk7DQo+ICsJCQlpdDY1MDVf dmFyaWFibGVfY29uZmlnKGl0NjUwNSk7DQo+ICsJCQlpdDY1MDVfcGFyc2VfbGlua19jYXBhYmls aXRpZXMoaXQ2NTA1KTsNCj4gKwkJfQ0KPiArDQo+ICsJCWl0NjUwNS0+c2lua19jb3VudCA9IERQ X0dFVF9TSU5LX0NPVU5UKGl0NjUwNV9kcGNkX3JlYWQoaXQ2NTA1LA0KPiArCQkJCQkJICAgICAg IERQX1NJTktfQ09VTlQpKTsNCj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiaXQ2NTA1 LT5zaW5rX2NvdW50OiVkIGJyYW5jaDolZCIsDQo+ICsJCQkJICAgICBpdDY1MDUtPnNpbmtfY291 bnQsIGl0NjUwNS0+YnJhbmNoX2RldmljZSk7DQo+ICsNCj4gKwkJaWYgKGl0NjUwNS0+YnJhbmNo X2RldmljZSkgew0KPiArCQkJc3RhdHVzID0gKGl0NjUwNS0+c2lua19jb3VudCAhPSAwKSA/DQo+ ICsJCQkJIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkIDoNCj4gKwkJCQkgY29ubmVjdG9yX3N0 YXR1c19kaXNjb25uZWN0ZWQ7DQo+ICsJCX0gZWxzZSB7DQo+ICsJCQlzdGF0dXMgPSBjb25uZWN0 b3Jfc3RhdHVzX2Nvbm5lY3RlZDsNCj4gKwkJfQ0KPiArCX0gZWxzZSB7DQo+ICsJCWl0NjUwNS0+ c2lua19jb3VudCA9IDA7DQo+ICsJCW1lbXNldChpdDY1MDUtPmRwY2QsIDAsIHNpemVvZihpdDY1 MDUtPmRwY2QpKTsNCj4gKwl9DQo+ICsNCj4gK3VubG9jazoNCj4gKwlpZiAoaXQ2NTA1LT5jb25u ZWN0b3Jfc3RhdHVzICE9IHN0YXR1cykgew0KPiArCQlpdDY1MDUtPmNvbm5lY3Rvcl9zdGF0dXMg PSBzdGF0dXM7DQo+ICsJCWl0NjUwNV9wbHVnZ2VkX3N0YXR1c190b19jb2RlYyhpdDY1MDUpOw0K PiArCX0NCj4gKw0KPiArCW11dGV4X3VubG9jaygmaXQ2NTA1LT5tb2RlX2xvY2spOw0KPiArDQo+ ICsJcmV0dXJuIHN0YXR1czsNCj4gK30NCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1f Y29ubmVjdG9yX2Z1bmNzIGl0NjUwNV9jb25uZWN0b3JfZnVuY3MgPSB7DQo+ICsJLmZpbGxfbW9k ZXMgPSBkcm1faGVscGVyX3Byb2JlX3NpbmdsZV9jb25uZWN0b3JfbW9kZXMsDQo+ICsJLmRldGVj dCA9IGl0NjUwNV9kZXRlY3QsDQo+ICsJLmRlc3Ryb3kgPSBkcm1fY29ubmVjdG9yX2NsZWFudXAs DQo+ICsJLnJlc2V0ID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX3Jlc2V0LA0KPiArCS5h dG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2R1cGxp Y2F0ZV9zdGF0ZSwNCj4gKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBl cl9jb25uZWN0b3JfZGVzdHJveV9zdGF0ZSwNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBpbnQgaXQ2 NTA1X2V4dGNvbl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsDQo+ICsJCQkJ ICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpDQo+ICt7DQo+ICsJc3RydWN0IGl0NjUw NSAqaXQ2NTA1ID0gY29udGFpbmVyX29mKHNlbGYsIHN0cnVjdCBpdDY1MDUsIGV2ZW50X25iKTsN Cj4gKw0KPiArCXNjaGVkdWxlX3dvcmsoJml0NjUwNS0+ZXh0Y29uX3dxKTsNCj4gKwlyZXR1cm4g Tk9USUZZX0RPTkU7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9leHRjb25fd29y ayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspDQo+ICt7DQo+ICsJc3RydWN0IGl0NjUwNSAqaXQ2 NTA1ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpdDY1MDUsIGV4dGNvbl93cSk7DQo+ICsJ c3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsJaW50IHN0YXRl ID0gZXh0Y29uX2dldF9zdGF0ZShpdDY1MDUtPmV4dGNvbiwgRVhUQ09OX0RJU1BfRFApOw0KPiAr CXVuc2lnbmVkIGludCBwd3JvZmZyZXRyeSA9IDA7DQo+ICsNCj4gKwlpZiAoaXQ2NTA1LT5lbmFi bGVfZHJ2X2hvbGQpDQo+ICsJCXJldHVybjsNCj4gKw0KPiArCW11dGV4X2xvY2soJml0NjUwNS0+ ZXh0Y29uX2xvY2spOw0KPiArDQo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiRVhUQ09O X0RJU1BfRFAgPSAweCUwMngiLCBzdGF0ZSk7DQo+ICsJaWYgKHN0YXRlID4gMCkgew0KPiArCQlE Uk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJzdGFydCB0byBwb3dlciBvbiIpOw0KPiArCQltc2xl ZXAoMTAwKTsNCj4gKwkJaXQ2NTA1X3Bvd2Vyb24oaXQ2NTA1KTsNCj4gKwl9IGVsc2Ugew0KPiAr CQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJzdGFydCB0byBwb3dlciBvZmYiKTsNCj4gKwkJ d2hpbGUgKGl0NjUwNV9wb3dlcm9mZihpdDY1MDUpICYmIHB3cm9mZnJldHJ5KysgPCA1KSB7DQo+ ICsJCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJwb3dlciBvZmYgZmFpbCAlZCB0aW1lcyIs DQo+ICsJCQkJCSAgICAgcHdyb2ZmcmV0cnkpOw0KPiArCQl9DQo+ICsNCj4gKwkJZHJtX2hlbHBl cl9ocGRfaXJxX2V2ZW50KGl0NjUwNS0+Y29ubmVjdG9yLmRldik7DQo+ICsJCW1lbXNldChpdDY1 MDUtPmRwY2QsIDAsIHNpemVvZihpdDY1MDUtPmRwY2QpKTsNCj4gKwkJRFJNX0RFVl9ERUJVR19E UklWRVIoZGV2LCAicG93ZXIgb2ZmIGl0NjUwNSBzdWNjZXNzISIpOw0KPiArCX0NCj4gKw0KPiAr CW11dGV4X3VubG9jaygmaXQ2NTA1LT5leHRjb25fbG9jayk7DQo+ICt9DQo+ICsNCj4gK3N0YXRp YyBpbnQgaXQ2NTA1X3VzZV9ub3RpZmllcl9tb2R1bGUoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0K PiArew0KPiArCWludCByZXQ7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xp ZW50LT5kZXY7DQo+ICsNCj4gKwlpdDY1MDUtPmV2ZW50X25iLm5vdGlmaWVyX2NhbGwgPSBpdDY1 MDVfZXh0Y29uX25vdGlmaWVyOw0KPiArCUlOSVRfV09SSygmaXQ2NTA1LT5leHRjb25fd3EsIGl0 NjUwNV9leHRjb25fd29yayk7DQo+ICsJcmV0ID0gZGV2bV9leHRjb25fcmVnaXN0ZXJfbm90aWZp ZXIoJml0NjUwNS0+Y2xpZW50LT5kZXYsDQo+ICsJCQkJCSAgICBpdDY1MDUtPmV4dGNvbiwgRVhU Q09OX0RJU1BfRFAsDQo+ICsJCQkJCSAgICAmaXQ2NTA1LT5ldmVudF9uYik7DQo+ICsJaWYgKHJl dCkgew0KPiArCQlEUk1fREVWX0VSUk9SKGRldiwgImZhaWxlZCB0byByZWdpc3RlciBub3RpZmll ciBmb3IgRFAiKTsNCj4gKwkJcmV0dXJuIHJldDsNCj4gKwl9DQo+ICsNCj4gKwlzY2hlZHVsZV93 b3JrKCZpdDY1MDUtPmV4dGNvbl93cSk7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0K PiArc3RhdGljIHZvaWQgaXQ2NTA1X3JlbW92ZV9ub3RpZmllcl9tb2R1bGUoc3RydWN0IGl0NjUw NSAqaXQ2NTA1KQ0KPiArew0KPiArCWlmIChpdDY1MDUtPmV4dGNvbikgew0KPiArCQlkZXZtX2V4 dGNvbl91bnJlZ2lzdGVyX25vdGlmaWVyKCZpdDY1MDUtPmNsaWVudC0+ZGV2LA0KPiArCQkJCQkJ aXQ2NTA1LT5leHRjb24sCUVYVENPTl9ESVNQX0RQLA0KPiArCQkJCQkJJml0NjUwNS0+ZXZlbnRf bmIpOw0KPiArDQo+ICsJCWZsdXNoX3dvcmsoJml0NjUwNS0+ZXh0Y29uX3dxKTsNCj4gKwl9DQo+ ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIF9fbWF5YmVfdW51c2VkIGl0NjUwNV9kZWxheWVkX2F1 ZGlvKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykNCj4gK3sNCj4gKwlzdHJ1Y3QgaXQ2NTA1ICpp dDY1MDUgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGl0NjUwNSwNCj4gKwkJCQkJICAgICBk ZWxheWVkX2F1ZGlvLndvcmspOw0KPiArDQo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoJml0NjUw NS0+Y2xpZW50LT5kZXYsICJzdGFydCIpOw0KPiArDQo+ICsJaWYgKCFpdDY1MDUtPnBvd2VyZWQp DQo+ICsJCXJldHVybjsNCj4gKw0KPiArCWlmICghaXQ2NTA1LT5lbmFibGVfZHJ2X2hvbGQpDQo+ ICsJCWl0NjUwNV9lbmFibGVfYXVkaW8oaXQ2NTA1KTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlu dCBfX21heWJlX3VudXNlZCBpdDY1MDVfYXVkaW9fc2V0dXBfaHdfcGFyYW1zKHN0cnVjdCBpdDY1 MDUgKml0NjUwNSwNCj4gKwkJCQkJc3RydWN0IGhkbWlfY29kZWNfcGFyYW1zICpwYXJhbXMpDQo+ ICt7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsJ aW50IGkgPSAwOw0KPiArDQo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiJXMgJWQgSHos ICVkIGJpdCwgJWQgY2hhbm5lbHNcbiIsIF9fZnVuY19fLA0KPiArCQkJICAgICBwYXJhbXMtPnNh bXBsZV9yYXRlLCBwYXJhbXMtPnNhbXBsZV93aWR0aCwNCj4gKwkJCSAgICAgcGFyYW1zLT5jZWEu Y2hhbm5lbHMpOw0KPiArDQo+ICsJaWYgKCFpdDY1MDUtPmJyaWRnZS5lbmNvZGVyKQ0KPiArCQly ZXR1cm4gLUVOT0RFVjsNCj4gKw0KPiArCWlmIChwYXJhbXMtPmNlYS5jaGFubmVscyA8PSAxIHx8 IHBhcmFtcy0+Y2VhLmNoYW5uZWxzID4gOCkgew0KPiArCQlEUk1fREVWX0RFQlVHX0RSSVZFUihk ZXYsICJjaGFubmVsIG51bWJlcjogJWQgbm90IHN1cHBvcnQiLA0KPiArCQkJCSAgICAgaXQ2NTA1 LT5hdWRpby5jaGFubmVsX2NvdW50KTsNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsJfQ0KPiAr DQo+ICsJaXQ2NTA1LT5hdWRpby5jaGFubmVsX2NvdW50ID0gcGFyYW1zLT5jZWEuY2hhbm5lbHM7 DQo+ICsNCj4gKwl3aGlsZSAoaSA8IEFSUkFZX1NJWkUoYXVkaW9fc2FtcGxlX3JhdGVfbWFwKSAm Jg0KPiArCSAgICAgICBwYXJhbXMtPnNhbXBsZV9yYXRlICE9DQo+ICsJCSAgICAgICBhdWRpb19z YW1wbGVfcmF0ZV9tYXBbaV0uc2FtcGxlX3JhdGVfdmFsdWUpIHsNCj4gKwkJaSsrOw0KPiArCX0N Cj4gKwlpZiAoaSA9PSBBUlJBWV9TSVpFKGF1ZGlvX3NhbXBsZV9yYXRlX21hcCkpIHsNCj4gKwkJ RFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAic2FtcGxlIHJhdGU6ICVkIEh6IG5vdCBzdXBwb3J0 IiwNCj4gKwkJCQkgICAgIHBhcmFtcy0+c2FtcGxlX3JhdGUpOw0KPiArCQlyZXR1cm4gLUVJTlZB TDsNCj4gKwl9DQo+ICsJaXQ2NTA1LT5hdWRpby5zYW1wbGVfcmF0ZSA9IGF1ZGlvX3NhbXBsZV9y YXRlX21hcFtpXS5yYXRlOw0KPiArDQo+ICsJc3dpdGNoIChwYXJhbXMtPnNhbXBsZV93aWR0aCkg ew0KPiArCWNhc2UgMTY6DQo+ICsJCWl0NjUwNS0+YXVkaW8ud29yZF9sZW5ndGggPSBXT1JEX0xF TkdUSF8xNkJJVDsNCj4gKwkJYnJlYWs7DQo+ICsJY2FzZSAxODoNCj4gKwkJaXQ2NTA1LT5hdWRp by53b3JkX2xlbmd0aCA9IFdPUkRfTEVOR1RIXzE4QklUOw0KPiArCQlicmVhazsNCj4gKwljYXNl IDIwOg0KPiArCQlpdDY1MDUtPmF1ZGlvLndvcmRfbGVuZ3RoID0gV09SRF9MRU5HVEhfMjBCSVQ7 DQo+ICsJCWJyZWFrOw0KPiArCWNhc2UgMjQ6DQo+ICsJY2FzZSAzMjoNCj4gKwkJaXQ2NTA1LT5h dWRpby53b3JkX2xlbmd0aCA9IFdPUkRfTEVOR1RIXzI0QklUOw0KPiArCQlicmVhazsNCj4gKwlk ZWZhdWx0Og0KPiArCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJ3b3JkbGVuZ3RoOiAlZCBi aXQgbm90IHN1cHBvcnQiLA0KPiArCQkJCSAgICAgcGFyYW1zLT5zYW1wbGVfd2lkdGgpOw0KPiAr CQlyZXR1cm4gLUVJTlZBTDsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0K PiArc3RhdGljIHZvaWQgX19tYXliZV91bnVzZWQgaXQ2NTA1X2F1ZGlvX3NodXRkb3duKHN0cnVj dCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkNCj4gK3sNCj4gKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1 MDUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCj4gKw0KPiArCWlmIChpdDY1MDUtPnBvd2VyZWQp DQo+ICsJCWl0NjUwNV9kaXNhYmxlX2F1ZGlvKGl0NjUwNSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRp YyBpbnQgX19tYXliZV91bnVzZWQgaXQ2NTA1X2F1ZGlvX2hvb2tfcGx1Z2dlZF9jYihzdHJ1Y3Qg ZGV2aWNlICpkZXYsDQo+ICsJCQkJCQkgICAgICAgdm9pZCAqZGF0YSwNCj4gKwkJCQkJCSAgICAg ICBoZG1pX2NvZGVjX3BsdWdnZWRfY2IgZm4sDQo+ICsJCQkJCQkgICAgICAgc3RydWN0IGRldmlj ZSAqY29kZWNfZGV2KQ0KPiArew0KPiArCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGRhdGE7DQo+ ICsNCj4gKwlpdDY1MDUtPnBsdWdnZWRfY2IgPSBmbjsNCj4gKwlpdDY1MDUtPmNvZGVjX2RldiA9 IGNvZGVjX2RldjsNCj4gKwlpdDY1MDVfcGx1Z2dlZF9zdGF0dXNfdG9fY29kZWMoaXQ2NTA1KTsN Cj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBp dDY1MDUgKmJyaWRnZV90b19pdDY1MDUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkNCj4gK3sN Cj4gKwlyZXR1cm4gY29udGFpbmVyX29mKGJyaWRnZSwgc3RydWN0IGl0NjUwNSwgYnJpZGdlKTsN Cj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X2JyaWRnZV9tb2RlX3NldChzdHJ1Y3Qg ZHJtX2JyaWRnZSAqYnJpZGdlLA0KPiArCQkJCSAgIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9t b2RlICptb2RlLA0KPiArCQkJCSAgIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1 c3RlZF9tb2RlKQ0KPiArew0KPiArCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGJyaWRnZV90b19p dDY1MDUoYnJpZGdlKTsNCj4gKwlzdHJ1Y3QgaGRtaV9hdmlfaW5mb2ZyYW1lIGZyYW1lOw0KPiAr CWludCBlcnI7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7 DQo+ICsNCj4gKwlpZiAoV0FSTl9PTighaXQ2NTA1LT5wb3dlcmVkKSkNCj4gKwkJcmV0dXJuOw0K PiArDQo+ICsJbXV0ZXhfbG9jaygmaXQ2NTA1LT5tb2RlX2xvY2spOw0KPiArDQo+ICsJZXJyID0g ZHJtX2hkbWlfYXZpX2luZm9mcmFtZV9mcm9tX2Rpc3BsYXlfbW9kZSgmZnJhbWUsDQo+ICsJCQkJ CQkgICAgICAgJml0NjUwNS0+Y29ubmVjdG9yLA0KPiArCQkJCQkJICAgICAgIGFkanVzdGVkX21v ZGUpOw0KPiArCWlmIChlcnIpIHsNCj4gKwkJRFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8g c2V0dXAgQVZJIGluZm9mcmFtZTogJWQiLCBlcnIpOw0KPiArCQlnb3RvIHVubG9jazsNCj4gKwl9 DQo+ICsNCj4gKwlpdDY1MDVfdXBkYXRlX3ZpZGVvX3BhcmFtZXRlcihpdDY1MDUsIGFkanVzdGVk X21vZGUpOw0KPiArDQo+ICsJZXJyID0gaXQ2NTA1X3NlbmRfdmlkZW9faW5mb2ZyYW1lKGl0NjUw NSwgJmZyYW1lKTsNCj4gKwlpZiAoZXJyKQ0KPiArCQlEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxl ZCB0byBzZW5kIEFWSSBpbmZvZnJhbWU6ICVkIiwgZXJyKTsNCj4gKw0KPiArdW5sb2NrOg0KPiAr CW11dGV4X3VubG9jaygmaXQ2NTA1LT5tb2RlX2xvY2spOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMg aW50IGl0NjUwNV9icmlkZ2VfYXR0YWNoKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsDQo+ICsJ CQkJZW51bSBkcm1fYnJpZGdlX2F0dGFjaF9mbGFncyBmbGFncykNCj4gK3sNCj4gKwlzdHJ1Y3Qg aXQ2NTA1ICppdDY1MDUgPSBicmlkZ2VfdG9faXQ2NTA1KGJyaWRnZSk7DQo+ICsJc3RydWN0IGRl dmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsJaW50IGVycjsNCj4gKw0KPiAr CWlmICghYnJpZGdlLT5lbmNvZGVyKSB7DQo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAiUGFyZW50 IGVuY29kZXIgb2JqZWN0IG5vdCBmb3VuZCIpOw0KPiArCQlyZXR1cm4gLUVOT0RFVjsNCj4gKwl9 DQo+ICsNCj4gKwllcnIgPSBkcm1fY29ubmVjdG9yX2luaXQoYnJpZGdlLT5kZXYsICZpdDY1MDUt PmNvbm5lY3RvciwNCj4gKwkJCQkgJml0NjUwNV9jb25uZWN0b3JfZnVuY3MsDQo+ICsJCQkJIERS TV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9ydCk7DQo+ICsJaWYgKGVyciA8IDApIHsNCj4gKwkJ RFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBjb25uZWN0b3I6ICVkIiwg ZXJyKTsNCj4gKwkJcmV0dXJuIGVycjsNCj4gKwl9DQo+ICsNCj4gKwlkcm1fY29ubmVjdG9yX2hl bHBlcl9hZGQoJml0NjUwNS0+Y29ubmVjdG9yLA0KPiArCQkJCSAmaXQ2NTA1X2Nvbm5lY3Rvcl9o ZWxwZXJfZnVuY3MpOw0KPiArDQo+ICsJaXQ2NTA1LT5jb25uZWN0b3IucG9sbGVkID0gRFJNX0NP Tk5FQ1RPUl9QT0xMX0hQRDsNCj4gKw0KPiArCWVyciA9IGRybV9jb25uZWN0b3JfYXR0YWNoX2Vu Y29kZXIoJml0NjUwNS0+Y29ubmVjdG9yLCBicmlkZ2UtPmVuY29kZXIpOw0KPiArCWlmIChlcnIg PCAwKSB7DQo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIGxpbmsgdXAgY29ubmVj dG9yIHRvIGVuY29kZXI6ICVkIiwNCj4gKwkJCSAgICAgIGVycik7DQo+ICsJCWdvdG8gY2xlYW51 cF9jb25uZWN0b3I7DQo+ICsJfQ0KPiArDQo+ICsJZXJyID0gZHJtX2Nvbm5lY3Rvcl9yZWdpc3Rl cigmaXQ2NTA1LT5jb25uZWN0b3IpOw0KPiArCWlmIChlcnIgPCAwKSB7DQo+ICsJCURSTV9ERVZf RVJST1IoZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNvbm5lY3RvcjogJWQiLCBlcnIpOw0KPiAr CQlnb3RvIGNsZWFudXBfY29ubmVjdG9yOw0KPiArCX0NCj4gKw0KPiArCWlmIChpdDY1MDUtPmV4 dGNvbikgew0KPiArCQllcnIgPSBpdDY1MDVfdXNlX25vdGlmaWVyX21vZHVsZShpdDY1MDUpOw0K PiArCQlpZiAoZXJyIDwgMCkgew0KPiArCQkJZHJtX2Nvbm5lY3Rvcl91bnJlZ2lzdGVyKCZpdDY1 MDUtPmNvbm5lY3Rvcik7DQo+ICsJCQlnb3RvIGNsZWFudXBfY29ubmVjdG9yOw0KPiArCQl9DQo+ ICsJfQ0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICsNCj4gK2NsZWFudXBfY29ubmVjdG9yOg0KPiAr CWRybV9jb25uZWN0b3JfY2xlYW51cCgmaXQ2NTA1LT5jb25uZWN0b3IpOw0KPiArCXJldHVybiBl cnI7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9icmlkZ2VfZGV0YWNoKHN0cnVj dCBkcm1fYnJpZGdlICpicmlkZ2UpDQo+ICt7DQo+ICsJc3RydWN0IGl0NjUwNSAqaXQ2NTA1ID0g YnJpZGdlX3RvX2l0NjUwNShicmlkZ2UpOw0KPiArDQo+ICsJZmx1c2hfd29yaygmaXQ2NTA1LT5s aW5rX3dvcmtzKTsNCj4gKwlpdDY1MDVfcmVtb3ZlX25vdGlmaWVyX21vZHVsZShpdDY1MDUpOw0K PiArCWRybV9jb25uZWN0b3JfdW5yZWdpc3RlcigmaXQ2NTA1LT5jb25uZWN0b3IpOw0KPiArCWRy bV9jb25uZWN0b3JfY2xlYW51cCgmaXQ2NTA1LT5jb25uZWN0b3IpOw0KPiArfQ0KPiArDQo+ICtz dGF0aWMgZW51bSBkcm1fbW9kZV9zdGF0dXMNCj4gK2l0NjUwNV9icmlkZ2VfbW9kZV92YWxpZChz dHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLA0KPiArCQkJIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxh eV9pbmZvICppbmZvLA0KPiArCQkJIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2Rl KQ0KPiArew0KPiArCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGJyaWRnZV90b19pdDY1MDUoYnJp ZGdlKTsNCj4gKw0KPiArCWlmIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNF KQ0KPiArCQlyZXR1cm4gTU9ERV9OT19JTlRFUkxBQ0U7DQo+ICsNCj4gKwlpZiAobW9kZS0+Y2xv Y2sgPiBEUElfUElYRUxfQ0xLX01BWCkNCj4gKwkJcmV0dXJuIE1PREVfQ0xPQ0tfSElHSDsNCj4g Kw0KPiArCWl0NjUwNS0+dmlkZW9faW5mby5jbG9jayA9IG1vZGUtPmNsb2NrOw0KPiArDQo+ICsJ cmV0dXJuIE1PREVfT0s7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9icmlkZ2Vf ZW5hYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpDQo+ICt7DQo+ICsJc3RydWN0IGl0NjUw NSAqaXQ2NTA1ID0gYnJpZGdlX3RvX2l0NjUwNShicmlkZ2UpOw0KPiArDQo+ICsJaXQ2NTA1X2lu dF9tYXNrX2VuYWJsZShpdDY1MDUpOw0KPiArCWl0NjUwNV92aWRlb19yZXNldChpdDY1MDUpOw0K PiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfYnJpZGdlX2Rpc2FibGUoc3RydWN0IGRy bV9icmlkZ2UgKmJyaWRnZSkNCj4gK3sNCj4gKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBicmlk Z2VfdG9faXQ2NTA1KGJyaWRnZSk7DQo+ICsNCj4gKwlpZiAoaXQ2NTA1LT5wb3dlcmVkKQ0KPiAr CQlpdDY1MDVfdmlkZW9fZGlzYWJsZShpdDY1MDUpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgZW51 bSBkcm1fY29ubmVjdG9yX3N0YXR1cw0KPiAraXQ2NTA1X2JyaWRnZV9kZXRlY3Qoc3RydWN0IGRy bV9icmlkZ2UgKmJyaWRnZSkNCj4gK3sNCj4gKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBicmlk Z2VfdG9faXQ2NTA1KGJyaWRnZSk7DQo+ICsNCj4gKwlyZXR1cm4gaXQ2NTA1X2RldGVjdCgmaXQ2 NTA1LT5jb25uZWN0b3IsIDApOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgc3RydWN0IGVkaWQgKml0 NjUwNV9icmlkZ2VfZ2V0X2VkaWQoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwNCj4gKwkJCQkJ ICAgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikNCj4gK3sNCj4gKwlzdHJ1Y3QgaXQ2 NTA1ICppdDY1MDUgPSBicmlkZ2VfdG9faXQ2NTA1KGJyaWRnZSk7DQo+ICsJc3RydWN0IGRldmlj ZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsJc3RydWN0IGVkaWQgKmVkaWQ7DQo+ ICsNCj4gKwllZGlkID0gZHJtX2RvX2dldF9lZGlkKCZpdDY1MDUtPmNvbm5lY3RvciwgaXQ2NTA1 X2dldF9lZGlkX2Jsb2NrLA0KPiArCQkJICAgICAgIGl0NjUwNSk7DQo+ICsNCj4gKwlpZiAoIWVk aWQpIHsNCj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiZmFpbGVkIHRvIGdldCBlZGlk ISIpOw0KPiArCQlyZXR1cm4gTlVMTDsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gZWRpZDsNCj4g K30NCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fYnJpZGdlX2Z1bmNzIGl0NjUwNV9i cmlkZ2VfZnVuY3MgPSB7DQo+ICsJLmF0dGFjaCA9IGl0NjUwNV9icmlkZ2VfYXR0YWNoLA0KPiAr CS5kZXRhY2ggPSBpdDY1MDVfYnJpZGdlX2RldGFjaCwNCj4gKwkubW9kZV92YWxpZCA9IGl0NjUw NV9icmlkZ2VfbW9kZV92YWxpZCwNCj4gKwkubW9kZV9zZXQgPSBpdDY1MDVfYnJpZGdlX21vZGVf c2V0LA0KPiArCS5lbmFibGUgPSBpdDY1MDVfYnJpZGdlX2VuYWJsZSwNCj4gKwkuZGlzYWJsZSA9 IGl0NjUwNV9icmlkZ2VfZGlzYWJsZSwNCj4gKwkuZGV0ZWN0ID0gaXQ2NTA1X2JyaWRnZV9kZXRl Y3QsDQo+ICsJLmdldF9lZGlkID0gaXQ2NTA1X2JyaWRnZV9nZXRfZWRpZCwNCj4gK307DQo+ICsN Cj4gKyNpZmRlZiBDT05GSUdfUE1fU0xFRVANCj4gKw0KPiArc3RhdGljIGludCBpdDY1MDVfYnJp ZGdlX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpDQo+ICt7DQo+ICsJc3RydWN0IGl0NjUwNSAq aXQ2NTA1ID0gZGV2X2dldF9kcnZkYXRhKGRldik7DQo+ICsNCj4gKwlyZXR1cm4gaXQ2NTA1X3Bv d2Vyb24oaXQ2NTA1KTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBpdDY1MDVfYnJpZGdlX3N1 c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQ0KPiArew0KPiArCXN0cnVjdCBpdDY1MDUgKml0NjUw NSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KPiArDQo+ICsJcmV0dXJuIGl0NjUwNV9wb3dlcm9m ZihpdDY1MDUpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgU0lNUExFX0RFVl9QTV9PUFMoaXQ2NTA1 X2JyaWRnZV9wbV9vcHMsIGl0NjUwNV9icmlkZ2Vfc3VzcGVuZCwNCj4gKwkJCSBpdDY1MDVfYnJp ZGdlX3Jlc3VtZSk7DQo+ICsNCj4gKyNlbmRpZg0KPiArDQo+ICtzdGF0aWMgaW50IGl0NjUwNV9p bml0X3BkYXRhKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCj4gK3sNCj4gKwlzdHJ1Y3QgaXQ2NTA1 X3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gJml0NjUwNS0+cGRhdGE7DQo+ICsJc3RydWN0IGRldmlj ZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsNCj4gKwkvKiAxLjBWIGRpZ2l0YWwg Y29yZSBwb3dlciByZWd1bGF0b3IgICovDQo+ICsJcGRhdGEtPnB3cjE4ID0gZGV2bV9yZWd1bGF0 b3JfZ2V0KGRldiwgInB3cjE4Iik7DQo+ICsJaWYgKElTX0VSUihwZGF0YS0+cHdyMTgpKSB7DQo+ ICsJCURSTV9ERVZfRVJST1IoZGV2LCAicHdyMTggcmVndWxhdG9yIG5vdCBmb3VuZCIpOw0KPiAr CQlyZXR1cm4gUFRSX0VSUihwZGF0YS0+cHdyMTgpOw0KPiArCX0NCj4gKw0KPiArCXBkYXRhLT5v dmRkID0gZGV2bV9yZWd1bGF0b3JfZ2V0KGRldiwgIm92ZGQiKTsNCj4gKwlpZiAoSVNfRVJSKHBk YXRhLT5vdmRkKSkgew0KPiArCQlEUk1fREVWX0VSUk9SKGRldiwgIm92ZGQgcmVndWxhdG9yIG5v dCBmb3VuZCIpOw0KPiArCQlyZXR1cm4gUFRSX0VSUihwZGF0YS0+b3ZkZCk7DQo+ICsJfQ0KPiAr DQo+ICsJcGRhdGEtPmdwaW9kX3Jlc2V0ID0gZGV2bV9ncGlvZF9nZXQoZGV2LCAicmVzZXQiLCBH UElPRF9PVVRfSElHSCk7DQo+ICsJaWYgKElTX0VSUihwZGF0YS0+Z3Bpb2RfcmVzZXQpKSB7DQo+ ICsJCURSTV9ERVZfRVJST1IoZGV2LCAiZ3Bpb2RfcmVzZXQgZ3BpbyBub3QgZm91bmQiKTsNCj4g KwkJcmV0dXJuIFBUUl9FUlIocGRhdGEtPmdwaW9kX3Jlc2V0KTsNCj4gKwl9DQo+ICsNCj4gKwly ZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X3BhcnNlX2R0KHN0cnVj dCBpdDY1MDUgKml0NjUwNSkNCj4gK3sNCj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1 LT5jbGllbnQtPmRldjsNCj4gKwl1MzIgKmFmZV9zZXR0aW5nID0gJml0NjUwNS0+YWZlX3NldHRp bmc7DQo+ICsNCj4gKwlpdDY1MDUtPmxhbmVfc3dhcF9kaXNhYmxlZCA9DQo+ICsJCWRldmljZV9w cm9wZXJ0eV9yZWFkX2Jvb2woZGV2LCAibm8tbGFuZXN3YXAiKTsNCj4gKw0KPiArCWlmIChpdDY1 MDUtPmxhbmVfc3dhcF9kaXNhYmxlZCkNCj4gKwkJaXQ2NTA1LT5sYW5lX3N3YXAgPSBmYWxzZTsN Cj4gKw0KPiArCWlmIChkZXZpY2VfcHJvcGVydHlfcmVhZF91MzIoZGV2LCAiYWZlLXNldHRpbmci LCBhZmVfc2V0dGluZykgPT0gMCkgew0KPiArCQlpZiAoKmFmZV9zZXR0aW5nID49IEFSUkFZX1NJ WkUoYWZlX3NldHRpbmdfdGFibGUpKSB7DQo+ICsJCQlEUk1fREVWX0VSUk9SKGRldiwgImFmZSBz ZXR0aW5nIGVycm9yLCB1c2UgZGVmYXVsdCIpOw0KPiArCQkJKmFmZV9zZXR0aW5nID0gMDsNCj4g KwkJfQ0KPiArCX0gZWxzZSB7DQo+ICsJCSphZmVfc2V0dGluZyA9IDA7DQo+ICsJfQ0KPiArCURS TV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInVzaW5nIGFmZV9zZXR0aW5nOiAlZCIsICphZmVfc2V0 dGluZyk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBzc2l6ZV90IHByaW50X3RpbWluZ19zaG93KHN0 cnVjdCBkZXZpY2UgKmRldiwNCj4gKwkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIs IGNoYXIgKmJ1ZikNCj4gK3sNCj4gKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBkZXZfZ2V0X2Ry dmRhdGEoZGV2KTsNCj4gKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqdmlkID0gJml0NjUwNS0+ dmlkZW9faW5mbzsNCj4gKwljaGFyICpzdHIgPSBidWYsICplbmQgPSBidWYgKyBQQUdFX1NJWkU7 DQo+ICsNCj4gKwlpdDY1MDVfY2FsY192aWRlb19pbmZvKGl0NjUwNSk7DQo+ICsJc3RyICs9IHNj bnByaW50ZihzdHIsIGVuZCAtIHN0ciwgIi0tLXZpZGVvIHRpbWluZy0tLVxuIik7DQo+ICsJc3Ry ICs9IHNjbnByaW50ZihzdHIsIGVuZCAtIHN0ciwgIlBDTEs6JWQuJTAzZE1IelxuIiwNCj4gKwkJ CSB2aWQtPmNsb2NrIC8gMTAwMCwgdmlkLT5jbG9jayAlIDEwMDApOw0KPiArCXN0ciArPSBzY25w cmludGYoc3RyLCBlbmQgLSBzdHIsICJIVG90YWw6JWRcbiIsIHZpZC0+aHRvdGFsKTsNCj4gKwlz dHIgKz0gc2NucHJpbnRmKHN0ciwgZW5kIC0gc3RyLCAiSEFjdGl2ZTolZFxuIiwgdmlkLT5oZGlz cGxheSk7DQo+ICsJc3RyICs9IHNjbnByaW50ZihzdHIsIGVuZCAtIHN0ciwgIkhGcm9udFBvcmNo OiVkXG4iLA0KPiArCQkJIHZpZC0+aHN5bmNfc3RhcnQgLSB2aWQtPmhkaXNwbGF5KTsNCj4gKwlz dHIgKz0gc2NucHJpbnRmKHN0ciwgZW5kIC0gc3RyLCAiSFN5bmNXaWR0aDolZFxuIiwNCj4gKwkJ CSB2aWQtPmhzeW5jX2VuZCAtIHZpZC0+aHN5bmNfc3RhcnQpOw0KPiArCXN0ciArPSBzY25wcmlu dGYoc3RyLCBlbmQgLSBzdHIsICJIQmFja1BvcmNoOiVkXG4iLA0KPiArCQkJIHZpZC0+aHRvdGFs IC0gdmlkLT5oc3luY19lbmQpOw0KPiArCXN0ciArPSBzY25wcmludGYoc3RyLCBlbmQgLSBzdHIs ICJWVG90YWw6JWRcbiIsIHZpZC0+dnRvdGFsKTsNCj4gKwlzdHIgKz0gc2NucHJpbnRmKHN0ciwg ZW5kIC0gc3RyLCAiVkFjdGl2ZTolZFxuIiwgdmlkLT52ZGlzcGxheSk7DQo+ICsJc3RyICs9IHNj bnByaW50ZihzdHIsIGVuZCAtIHN0ciwgIlZGcm9udFBvcmNoOiVkXG4iLA0KPiArCQkJIHZpZC0+ dnN5bmNfc3RhcnQgLSB2aWQtPnZkaXNwbGF5KTsNCj4gKwlzdHIgKz0gc2NucHJpbnRmKHN0ciwg ZW5kIC0gc3RyLCAiVlN5bmNXaWR0aDolZFxuIiwNCj4gKwkJCSB2aWQtPnZzeW5jX2VuZCAtIHZp ZC0+dnN5bmNfc3RhcnQpOw0KPiArCXN0ciArPSBzY25wcmludGYoc3RyLCBlbmQgLSBzdHIsICJW QmFja1BvcmNoOiVkXG4iLA0KPiArCQkJIHZpZC0+dnRvdGFsIC0gdmlkLT52c3luY19lbmQpOw0K PiArDQo+ICsJcmV0dXJuIHN0ciAtIGJ1ZjsNCj4gK30NCj4gKw0KPiArc3RhdGljIHNzaXplX3Qg Zm9yY2VfcHdyb25vZmZfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LA0KPiArCQkJCSAgICBzdHJ1 Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwNCj4gKwkJCQkgICAgY29uc3QgY2hhciAqYnVmLCBz aXplX3QgY291bnQpDQo+ICt7DQo+ICsJc3RydWN0IGl0NjUwNSAqaXQ2NTA1ID0gZGV2X2dldF9k cnZkYXRhKGRldik7DQo+ICsJaW50IHB3cjsNCj4gKw0KPiArCWlmIChrc3RydG9pbnQoYnVmLCAx MCwgJnB3cikgPCAwKQ0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKw0KPiArCWlmIChwd3IpDQo+ ICsJCWl0NjUwNV9wb3dlcm9uKGl0NjUwNSk7DQo+ICsJZWxzZQ0KPiArCQlpdDY1MDVfcG93ZXJv ZmYoaXQ2NTA1KTsNCj4gKw0KPiArCXJldHVybiBjb3VudDsNCj4gK30NCj4gKw0KPiArc3RhdGlj IHNzaXplX3QgZW5hYmxlX2Rydl9ob2xkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LA0KPiArCQkJ CSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQ0KPiArew0KPiAr CXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KPiArDQo+ICsJ cmV0dXJuIHNjbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBpdDY1MDUtPmVuYWJsZV9k cnZfaG9sZCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBzc2l6ZV90IGVuYWJsZV9kcnZfaG9sZF9z dG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsDQo+ICsJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJp YnV0ZSAqYXR0ciwNCj4gKwkJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQ0K PiArew0KPiArCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0K PiArCXVuc2lnbmVkIGludCBkcnZfaG9sZDsNCj4gKw0KPiArCWlmIChrc3RydG9pbnQoYnVmLCAx MCwgJmRydl9ob2xkKSA8IDApDQo+ICsJCXJldHVybiAtRUlOVkFMOw0KPiArDQo+ICsJaXQ2NTA1 LT5lbmFibGVfZHJ2X2hvbGQgPSAhIWRydl9ob2xkOw0KPiArDQo+ICsJaWYgKGl0NjUwNS0+ZW5h YmxlX2Rydl9ob2xkKSB7DQo+ICsJCWl0NjUwNV9pbnRfbWFza19kaXNhYmxlKGl0NjUwNSk7DQo+ ICsJfSBlbHNlIHsNCj4gKwkJaXQ2NTA1X2NsZWFyX2ludChpdDY1MDUpOw0KPiArCQlpdDY1MDVf aW50X21hc2tfZW5hYmxlKGl0NjUwNSk7DQo+ICsNCj4gKwkJaWYgKGl0NjUwNS0+cG93ZXJlZCkg ew0KPiArCQkJaXQ2NTA1LT5jb25uZWN0b3Jfc3RhdHVzID0NCj4gKwkJCQkJaXQ2NTA1X2dldF9z aW5rX2hwZF9zdGF0dXMoaXQ2NTA1KSA/DQo+ICsJCQkJCWNvbm5lY3Rvcl9zdGF0dXNfY29ubmVj dGVkIDoNCj4gKwkJCQkJY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7DQo+ICsJCX0gZWxz ZSB7DQo+ICsJCQlpdDY1MDUtPmNvbm5lY3Rvcl9zdGF0dXMgPQ0KPiArCQkJCQljb25uZWN0b3Jf c3RhdHVzX2Rpc2Nvbm5lY3RlZDsNCj4gKwkJfQ0KPiArCX0NCj4gKwlyZXR1cm4gY291bnQ7DQo+ ICt9DQo+ICsNCj4gK3N0YXRpYyBERVZJQ0VfQVRUUl9STyhwcmludF90aW1pbmcpOw0KPiArc3Rh dGljIERFVklDRV9BVFRSX1dPKGZvcmNlX3B3cm9ub2ZmKTsNCj4gK3N0YXRpYyBERVZJQ0VfQVRU Ul9SVyhlbmFibGVfZHJ2X2hvbGQpOw0KPiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJp YnV0ZSAqaXQ2NTA1X2F0dHJzW10gPSB7DQo+ICsJJmRldl9hdHRyX3ByaW50X3RpbWluZy5hdHRy LA0KPiArCSZkZXZfYXR0cl9mb3JjZV9wd3Jvbm9mZi5hdHRyLA0KPiArCSZkZXZfYXR0cl9lbmFi bGVfZHJ2X2hvbGQuYXR0ciwNCj4gKwlOVUxMLA0KPiArfTsNCj4gKw0KPiArc3RhdGljIHZvaWQg aXQ2NTA1X3NodXRkb3duKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpDQo+ICt7DQo+ICsJc3Ry dWN0IGl0NjUwNSAqaXQ2NTA1ID0gZGV2X2dldF9kcnZkYXRhKCZjbGllbnQtPmRldik7DQo+ICsN Cj4gKwlrZnJlZShpdDY1MDUtPmVkaWQpOw0KPiArCWl0NjUwNS0+ZWRpZCA9IE5VTEw7DQo+ICsN Cj4gKwlpZiAoaXQ2NTA1LT5wb3dlcmVkKQ0KPiArCQlpdDY1MDVfbGFuZV9vZmYoaXQ2NTA1KTsN Cj4gK30NCj4gKw0KPiArc3RhdGljIGludCBpdDY1MDVfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xp ZW50ICpjbGllbnQsDQo+ICsJCQkgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQ0K PiArew0KPiArCXN0cnVjdCBpdDY1MDUgKml0NjUwNTsNCj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYg PSAmY2xpZW50LT5kZXY7DQo+ICsJc3RydWN0IGV4dGNvbl9kZXYgKmV4dGNvbjsNCj4gKwlpbnQg ZXJyLCBpbnRwX2lycTsNCj4gKw0KPiArCWl0NjUwNSA9IGRldm1fa3phbGxvYygmY2xpZW50LT5k ZXYsIHNpemVvZigqaXQ2NTA1KSwgR0ZQX0tFUk5FTCk7DQo+ICsJaWYgKCFpdDY1MDUpDQo+ICsJ CXJldHVybiAtRU5PTUVNOw0KPiArDQo+ICsJbXV0ZXhfaW5pdCgmaXQ2NTA1LT5leHRjb25fbG9j ayk7DQo+ICsJbXV0ZXhfaW5pdCgmaXQ2NTA1LT5tb2RlX2xvY2spOw0KPiArCW11dGV4X2luaXQo Jml0NjUwNS0+YXV4X2xvY2spOw0KPiArDQo+ICsJaXQ2NTA1LT5icmlkZ2Uub2Zfbm9kZSA9IGNs aWVudC0+ZGV2Lm9mX25vZGU7DQo+ICsJaXQ2NTA1LT5jb25uZWN0b3Jfc3RhdHVzID0gY29ubmVj dG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7DQo+ICsJaXQ2NTA1LT5jbGllbnQgPSBjbGllbnQ7DQo+ ICsJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgaXQ2NTA1KTsNCj4gKw0KPiArCS8qIGdldCBl eHRjb24gZGV2aWNlIGZyb20gRFRTICovDQo+ICsJZXh0Y29uID0gZXh0Y29uX2dldF9lZGV2X2J5 X3BoYW5kbGUoZGV2LCAwKTsNCj4gKwlpZiAoUFRSX0VSUihleHRjb24pID09IC1FUFJPQkVfREVG RVIpDQo+ICsJCXJldHVybiAtRVBST0JFX0RFRkVSOw0KPiArCWlmIChJU19FUlIoZXh0Y29uKSkg ew0KPiArCQlEUk1fREVWX0VSUk9SKGRldiwgImNhbiBub3QgZ2V0IGV4dGNvbiBkZXZpY2UhIik7 DQo+ICsJCXJldHVybiBQVFJfRVJSKGV4dGNvbik7DQo+ICsJfQ0KPiArDQo+ICsJaXQ2NTA1LT5l eHRjb24gPSBleHRjb247DQo+ICsNCj4gKwlpdDY1MDUtPnJlZ21hcCA9IGRldm1fcmVnbWFwX2lu aXRfaTJjKGNsaWVudCwgJml0NjUwNV9yZWdtYXBfY29uZmlnKTsNCj4gKwlpZiAoSVNfRVJSKGl0 NjUwNS0+cmVnbWFwKSkgew0KPiArCQlEUk1fREVWX0VSUk9SKGRldiwgInJlZ21hcCBpMmMgaW5p dCBmYWlsZWQiKTsNCj4gKwkJZXJyID0gUFRSX0VSUihpdDY1MDUtPnJlZ21hcCk7DQo+ICsJCXJl dHVybiBlcnI7DQo+ICsJfQ0KPiArDQo+ICsJZXJyID0gaXQ2NTA1X2luaXRfcGRhdGEoaXQ2NTA1 KTsNCj4gKwlpZiAoZXJyKSB7DQo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIGlu aXRpYWxpemUgcGRhdGE6ICVkIiwgZXJyKTsNCj4gKwkJcmV0dXJuIGVycjsNCj4gKwl9DQo+ICsN Cj4gKwlpdDY1MDVfcGFyc2VfZHQoaXQ2NTA1KTsNCj4gKw0KPiArCWludHBfaXJxID0gY2xpZW50 LT5pcnE7DQo+ICsNCj4gKwlpZiAoIWludHBfaXJxKSB7DQo+ICsJCURSTV9ERVZfRVJST1IoZGV2 LCAiRmFpbGVkIHRvIGdldCBJTlRQIElSUSIpOw0KPiArCQllcnIgPSAtRU5PREVWOw0KPiArCQly ZXR1cm4gZXJyOw0KPiArCX0NCj4gKw0KPiArCWVyciA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9p cnEoJmNsaWVudC0+ZGV2LCBpbnRwX2lycSwgTlVMTCwNCj4gKwkJCQkJaXQ2NTA1X2ludF90aHJl YWRlZF9oYW5kbGVyLA0KPiArCQkJCQlJUlFGX1RSSUdHRVJfTE9XIHwgSVJRRl9PTkVTSE9ULA0K PiArCQkJCQkiaXQ2NTA1LWludHAiLCBpdDY1MDUpOw0KPiArCWlmIChlcnIpIHsNCj4gKwkJRFJN X0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBJTlRQIHRocmVhZGVkIElSUTogJWQi LA0KPiArCQkJICAgICAgZXJyKTsNCj4gKwkJcmV0dXJuIGVycjsNCj4gKwl9DQo+ICsNCj4gKwkv KiBSZWdpc3RlciBhdXggY2hhbm5lbCAqLw0KPiArCWl0NjUwNS0+YXV4Lm5hbWUgPSAiRFAtQVVY IjsNCj4gKwlpdDY1MDUtPmF1eC5kZXYgPSBkZXY7DQo+ICsJaXQ2NTA1LT5hdXgudHJhbnNmZXIg PSBpdDY1MDVfYXV4X3RyYW5zZmVyOw0KPiArDQo+ICsJZXJyID0gZHJtX2RwX2F1eF9yZWdpc3Rl cigmaXQ2NTA1LT5hdXgpOw0KPiArCWlmIChlcnIgPCAwKSB7DQo+ICsJCURSTV9ERVZfRVJST1Io ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGF1eDogJWQiLCBlcnIpOw0KPiArCQlyZXR1cm4gZXJy Ow0KPiArCX0NCj4gKw0KPiArCUlOSVRfV09SSygmaXQ2NTA1LT5saW5rX3dvcmtzLCBpdDY1MDVf bGlua190cmFpbmluZ193b3JrKTsNCj4gKwlJTklUX1dPUksoJml0NjUwNS0+aGRjcF93YWl0X2tz dl9saXN0LCBpdDY1MDVfaGRjcF93YWl0X2tzdl9saXN0KTsNCj4gKwlJTklUX0RFTEFZRURfV09S SygmaXQ2NTA1LT5oZGNwX3dvcmssIGl0NjUwNV9oZGNwX3dvcmspOw0KPiArCWluaXRfY29tcGxl dGlvbigmaXQ2NTA1LT53YWl0X2VkaWRfY29tcGxldGUpOw0KPiArCWl0NjUwNS0+cG93ZXJlZCA9 IGZhbHNlOw0KPiArCWl0NjUwNS0+ZW5hYmxlX2Rydl9ob2xkID0gREVGQVVMVF9EUlZfSE9MRDsN Cj4gKw0KPiArCWlmIChERUZBVUxUX1BXUl9PTikNCj4gKwkJaXQ2NTA1X3Bvd2Vyb24oaXQ2NTA1 KTsNCj4gKw0KPiArCWVyciA9IHN5c2ZzX2NyZWF0ZV9maWxlcygmY2xpZW50LT5kZXYua29iaiwg aXQ2NTA1X2F0dHJzKTsNCj4gKwlpZiAoZXJyKSB7DQo+ICsJCWRybV9kcF9hdXhfdW5yZWdpc3Rl cigmaXQ2NTA1LT5hdXgpOw0KPiArCQlyZXR1cm4gZXJyOw0KPiArCX0NCj4gKw0KPiArCWl0NjUw NS0+YnJpZGdlLmZ1bmNzID0gJml0NjUwNV9icmlkZ2VfZnVuY3M7DQo+ICsJZHJtX2JyaWRnZV9h ZGQoJml0NjUwNS0+YnJpZGdlKTsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtz dGF0aWMgaW50IGl0NjUwNV9pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpDQo+ ICt7DQo+ICsJc3RydWN0IGl0NjUwNSAqaXQ2NTA1ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVu dCk7DQo+ICsNCj4gKwlkcm1fY29ubmVjdG9yX3VucmVnaXN0ZXIoJml0NjUwNS0+Y29ubmVjdG9y KTsNCj4gKwlkcm1fY29ubmVjdG9yX2NsZWFudXAoJml0NjUwNS0+Y29ubmVjdG9yKTsNCj4gKwlk cm1fYnJpZGdlX3JlbW92ZSgmaXQ2NTA1LT5icmlkZ2UpOw0KPiArCWRybV9kcF9hdXhfdW5yZWdp c3RlcigmaXQ2NTA1LT5hdXgpOw0KPiArCXN5c2ZzX3JlbW92ZV9maWxlcygmY2xpZW50LT5kZXYu a29iaiwgaXQ2NTA1X2F0dHJzKTsNCj4gKwlpdDY1MDVfcG93ZXJvZmYoaXQ2NTA1KTsNCj4gKw0K PiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZp Y2VfaWQgaXQ2NTA1X2lkW10gPSB7DQo+ICsJeyAiaXQ2NTA1IiwgMCB9LA0KPiArCXsgfQ0KPiAr fTsNCj4gKw0KPiArTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGl0NjUwNV9pZCk7DQo+ICsNCj4g K3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGl0NjUwNV9vZl9tYXRjaFtdID0gew0K PiArCXsgLmNvbXBhdGlibGUgPSAiaXRlLGl0NjUwNSIgfSwNCj4gKwl7IH0NCj4gK307DQo+ICsN Cj4gK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpdDY1MDVfaTJjX2RyaXZlciA9IHsNCj4gKwku ZHJpdmVyID0gew0KPiArCQkubmFtZSA9ICJpdDY1MDUiLA0KPiArCQkub2ZfbWF0Y2hfdGFibGUg PSBpdDY1MDVfb2ZfbWF0Y2gsDQo+ICsjaWZkZWYgQ09ORklHX1BNX1NMRUVQDQo+ICsJCS5wbSA9 ICZpdDY1MDVfYnJpZGdlX3BtX29wcywNCj4gKyNlbmRpZg0KPiArCX0sDQo+ICsJLnByb2JlID0g aXQ2NTA1X2kyY19wcm9iZSwNCj4gKwkucmVtb3ZlID0gaXQ2NTA1X2kyY19yZW1vdmUsDQo+ICsJ LnNodXRkb3duID0gaXQ2NTA1X3NodXRkb3duLA0KPiArCS5pZF90YWJsZSA9IGl0NjUwNV9pZCwN Cj4gK307DQo+ICsNCj4gK21vZHVsZV9pMmNfZHJpdmVyKGl0NjUwNV9pMmNfZHJpdmVyKTsNCj4g Kw0KPiArTU9EVUxFX0FVVEhPUigiQWxsZW4gQ2hlbiA8YWxsZW4uY2hlbkBpdGUuY29tLnR3PiIp Ow0KPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJJVDY1MDUgRGlzcGxheVBvcnQgVHJhbnNtaXR0ZXIg ZHJpdmVyIik7DQo+ICtNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7DQo+IC0tIA0KPiAyLjI1LjEN Cj4gDQo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQo+ IGRyaS1kZXZlbCBtYWlsaW5nIGxpc3QNCj4gZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9y Zw0KPiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1k ZXZlbA0K