From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.5 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,UNWANTED_LANGUAGE_BODY,URIBL_BLOCKED, USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 76EDFCA9EAB for ; Sat, 19 Oct 2019 14:11:55 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 41EBA21835 for ; Sat, 19 Oct 2019 14:11:55 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="AkwexaAR" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 41EBA21835 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=sigxcpu.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=vRHt6kiqPH1lZbiS5Sl+Eg9BvjBdN+RcedOfzQWqOjo=; b=AkwexaAReymuqD v1gp8N2USvoeGjdUSP+6CBJbtLtjoYxtHjKXCNCZQH/oKdD91c9B2NHy/nX79H/SDpZldbIwzNGaO z9WhftREUOOR+t17OviqYPPbJ7nj/iK8IVE66YfwcdISfrp2hqECs6jLKgzY3Mu90UfiAsM9JYsas 6LCzoI2YePQz4ezvxGlgtITiriqX+JsFwWsuxrDrARcgsFKcOXtI2kw7mqJfjw59UgTzvtbgfyTCG +l7ITHAYKn0M0kkQ8UVxfVPmBIqj6sszBSpbEpEAPXsxGc6HuTvLq7g2L1oefrZq5u2CC2Dx4Yd7D JQUWDxpq9q+QZwrH4Yyg==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1iLpS2-0002vQ-U6; Sat, 19 Oct 2019 14:11:26 +0000 Received: from honk.sigxcpu.org ([24.134.29.49]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1iLpRw-0002u0-Lp for linux-arm-kernel@lists.infradead.org; Sat, 19 Oct 2019 14:11:25 +0000 Received: from localhost (localhost [127.0.0.1]) by honk.sigxcpu.org (Postfix) with ESMTP id 36E46FB03; Sat, 19 Oct 2019 16:11:10 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at honk.sigxcpu.org Received: from honk.sigxcpu.org ([127.0.0.1]) by localhost (honk.sigxcpu.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id VLCgsYuBdfeV; Sat, 19 Oct 2019 16:11:04 +0200 (CEST) Received: by bogon.sigxcpu.org (Postfix, from userid 1000) id BCEA349B0C; Sat, 19 Oct 2019 16:11:03 +0200 (CEST) Date: Sat, 19 Oct 2019 16:11:03 +0200 From: Guido =?iso-8859-1?Q?G=FCnther?= To: Andrzej Hajda Subject: Re: [PATCH v6 2/2] drm/bridge: Add NWL MIPI DSI host controller support Message-ID: <20191019141103.GA21138@bogon.m.sigxcpu.org> References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.10.1 (2018-07-13) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20191019_071121_209486_31BD1623 X-CRM114-Status: GOOD ( 31.67 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Mark Rutland , devicetree@vger.kernel.org, Jernej Skrabec , Pengutronix Kernel Team , Sam Ravnborg , Neil Armstrong , David Airlie , Fabio Estevam , Sascha Hauer , Jonas Karlman , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Rob Herring , Arnd Bergmann , NXP Linux Team , Daniel Vetter , Robert Chiras , Lee Jones , Shawn Guo , linux-arm-kernel@lists.infradead.org, Laurent Pinchart Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGkgQW5kcnplaiwKdGhhbmtzIGZvciB5b3VyIGNvbW1lbnRzISBTZWUgaW5saW5lIGZvciBmb2xs b3cgdXBzLgoKT24gTW9uLCBTZXAgMjMsIDIwMTkgYXQgMTI6MDE6NTFQTSArMDIwMCwgQW5kcnpl aiBIYWpkYSB3cm90ZToKPiBPbiAyMi4wOS4yMDE5IDE4OjQ3LCBHdWlkbyBHw7xudGhlciB3cm90 ZToKPiA+IFRoaXMgYWRkcyBpbml0aWFsIHN1cHBvcnQgZm9yIHRoZSBOV0wgTUlQSSBEU0kgSG9z dCBjb250cm9sbGVyIGZvdW5kIG9uCj4gPiBpLk1YOCBTb0NzLgo+ID4KPiA+IEl0IGFkZHMgc3Vw cG9ydCBmb3IgdGhlIGkuTVg4TVEgYnV0IHRoZSBzYW1lIElQIGNhbiBiZSBmb3VuZCBvbgo+ID4g ZS5nLiB0aGUgaS5NWDhRWFAuCj4gPgo+ID4gSXQgaGFzIGJlZW4gdGVzdGVkIG9uIHRoZSBMaWJy ZW0gNSBkZXZraXQgdXNpbmcgbXhzZmIuCj4gPgo+ID4gU2lnbmVkLW9mZi1ieTogR3VpZG8gR8O8 bnRoZXIgPGFneEBzaWd4Y3B1Lm9yZz4KPiA+IENvLWRldmVsb3BlZC1ieTogUm9iZXJ0IENoaXJh cyA8cm9iZXJ0LmNoaXJhc0BueHAuY29tPgo+ID4gU2lnbmVkLW9mZi1ieTogUm9iZXJ0IENoaXJh cyA8cm9iZXJ0LmNoaXJhc0BueHAuY29tPgo+ID4gVGVzdGVkLWJ5OiBSb2JlcnQgQ2hpcmFzIDxy b2JlcnQuY2hpcmFzQG54cC5jb20+Cj4gPiAtLS0KPiA+ICBkcml2ZXJzL2dwdS9kcm0vYnJpZGdl L0tjb25maWcgICB8ICAgMTYgKwo+ID4gIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUg IHwgICAgMyArCj4gPiAgZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9ud2wtZHNpLmMgfCAxMTgwICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ID4gIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2Uv bndsLWRzaS5oIHwgIDE0NCArKysrCj4gPiAgNCBmaWxlcyBjaGFuZ2VkLCAxMzQzIGluc2VydGlv bnMoKykKPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9ud2wt ZHNpLmMKPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9ud2wt ZHNpLmgKPiA+Cj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29uZmln IGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29uZmlnCj4gPiBpbmRleCAxY2M5ZjUwMmMxZjIu LjEzMDIxZjlhNjEwNyAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2Nv bmZpZwo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29uZmlnCj4gPiBAQCAtNjUs NiArNjUsMjIgQEAgY29uZmlnIERSTV9NRUdBQ0hJUFNfU1REUFhYWFhfR0VfQjg1MFYzX0ZXCj4g PiAgICAgICAgICAgIHRvIERQKysuIFRoaXMgaXMgdXNlZCB3aXRoIHRoZSBpLk1YNiBpbXgtbGRi Cj4gPiAgICAgICAgICAgIGRyaXZlci4gWW91IGFyZSBsaWtlbHkgdG8gc2F5IE4gaGVyZS4KPiA+ ICAKPiA+ICtjb25maWcgRFJNX05XTF9NSVBJX0RTSQo+ID4gKwl0cmlzdGF0ZSAiTm9ydGh3ZXN0 IExvZ2ljIE1JUEkgRFNJIEhvc3QgY29udHJvbGxlciIKPiA+ICsJZGVwZW5kcyBvbiBEUk0KPiA+ ICsJZGVwZW5kcyBvbiBDT01NT05fQ0xLCj4gPiArCWRlcGVuZHMgb24gT0YgJiYgSEFTX0lPTUVN Cj4gPiArCXNlbGVjdCBEUk1fS01TX0hFTFBFUgo+ID4gKwlzZWxlY3QgRFJNX01JUElfRFNJCj4g PiArCXNlbGVjdCBEUk1fUEFORUxfQlJJREdFCj4gPiArCXNlbGVjdCBHRU5FUklDX1BIWV9NSVBJ X0RQSFkKPiA+ICsJc2VsZWN0IE1GRF9TWVNDT04KPiA+ICsJc2VsZWN0IE1VTFRJUExFWEVSCj4g PiArCXNlbGVjdCBSRUdNQVBfTU1JTwo+ID4gKwloZWxwCj4gPiArCSAgVGhpcyBlbmFibGVzIHRo ZSBOb3J0aHdlc3QgTG9naWMgTUlQSSBEU0kgSG9zdCBjb250cm9sbGVyIGFzCj4gPiArCSAgZm9y IGV4YW1wbGUgZm91bmQgb24gTlhQJ3MgaS5NWDggUHJvY2Vzc29ycy4KPiA+ICsKPiA+ICBjb25m aWcgRFJNX05YUF9QVE4zNDYwCj4gPiAgCXRyaXN0YXRlICJOWFAgUFROMzQ2MCBEUC9MVkRTIGJy aWRnZSIKPiA+ICAJZGVwZW5kcyBvbiBPRgo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9icmlkZ2UvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlCj4gPiBp bmRleCA0OTM0ZmNmNWE2ZjguLmMzZjNhNDNlOWI4ZiAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9icmlkZ2UvTWFrZWZpbGUKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2Uv TWFrZWZpbGUKPiA+IEBAIC0xNiw0ICsxNiw3IEBAIG9iai0kKENPTkZJR19EUk1fQU5BTE9HSVhf RFApICs9IGFuYWxvZ2l4Lwo+ID4gIG9iai0kKENPTkZJR19EUk1fSTJDX0FEVjc1MTEpICs9IGFk djc1MTEvCj4gPiAgb2JqLSQoQ09ORklHX0RSTV9USV9TTjY1RFNJODYpICs9IHRpLXNuNjVkc2k4 Ni5vCj4gPiAgb2JqLSQoQ09ORklHX0RSTV9USV9URlA0MTApICs9IHRpLXRmcDQxMC5vCj4gPiAr b2JqLSQoQ09ORklHX0RSTV9OV0xfTUlQSV9EU0kpICs9IG53bC1kc2kubwo+ID4gIG9iai15ICs9 IHN5bm9wc3lzLwo+ID4gKwo+ID4gK2hlYWRlci10ZXN0LXkgKz0gbndsLWRzaS5oCj4gPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9ud2wtZHNpLmMgYi9kcml2ZXJzL2dwdS9k cm0vYnJpZGdlL253bC1kc2kuYwo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+IGluZGV4IDAw MDAwMDAwMDAwMC4uZGVhNTQyOWExZTE3Cj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vYnJpZGdlL253bC1kc2kuYwo+ID4gQEAgLTAsMCArMSwxMTgwIEBACj4gPiAr Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArCj4gPiArLyoKPiA+ICsgKiBpLk1Y OCBOV0wgTUlQSSBEU0kgaG9zdCBkcml2ZXIKPiA+ICsgKgo+ID4gKyAqIENvcHlyaWdodCAoQykg MjAxNyBOWFAKPiA+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTkgUHVyaXNtIFNQQwo+ID4gKyAqLwo+ ID4gKwo+ID4gKyNpbmNsdWRlIDxsaW51eC9iaXRmaWVsZC5oPgo+ID4gKyNpbmNsdWRlIDxsaW51 eC9jbGsuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvaXJxLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4 L21hdGg2NC5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9tZmQvc3lzY29uLmg+Cj4gPiArI2luY2x1 ZGUgPGxpbnV4L21vZHVsZS5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9tdXgvY29uc3VtZXIuaD4K PiA+ICsjaW5jbHVkZSA8bGludXgvb2YuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZv cm0uaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvcGh5L3BoeS5oPgo+ID4gKyNpbmNsdWRlIDxsaW51 eC9yZWdtYXAuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvcmVzZXQuaD4KPiA+ICsjaW5jbHVkZSA8 bGludXgvc3lzX3NvYy5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC90aW1lNjQuaD4KPiA+ICsKPiA+ ICsjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+Cj4gPiArI2luY2x1ZGUgPGRybS9k cm1fYnJpZGdlLmg+Cj4gPiArI2luY2x1ZGUgPGRybS9kcm1fbWlwaV9kc2kuaD4KPiA+ICsjaW5j bHVkZSA8ZHJtL2RybV9vZi5oPgo+ID4gKyNpbmNsdWRlIDxkcm0vZHJtX3BhbmVsLmg+Cj4gPiAr I2luY2x1ZGUgPGRybS9kcm1fcHJpbnQuaD4KPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9wcm9iZV9o ZWxwZXIuaD4KPiA+ICsKPiA+ICsjaW5jbHVkZSA8dmlkZW8vbWlwaV9kaXNwbGF5Lmg+Cj4gPiAr I2luY2x1ZGUgPHZpZGVvL3ZpZGVvbW9kZS5oPgo+ID4gKwo+ID4gKyNpbmNsdWRlICJud2wtZHNp LmgiCj4gPiArCj4gPiArI2RlZmluZSBEUlZfTkFNRSAibndsLWRzaSIKPiA+ICsKPiA+ICsvKiBp Lk1YOCBOV0wgcXVpcmtzICovCj4gPiArLyogaS5NWDhNUSBlcnJhdGEgRTExNDE4ICovCj4gPiAr I2RlZmluZSBFMTE0MThfSFNfTU9ERV9RVUlSSwlCSVQoMCkKPiA+ICsvKiBTa2lwIERTSSBiaXRz IGluIFNSQyBvbiBkaXNhYmxlIHRvIGF2b2lkIGJsYW5rIGRpc3BsYXkgb24gZW5hYmxlICovCj4g PiArI2RlZmluZSBTUkNfUkVTRVRfUVVJUksJCUJJVCgxKQo+ID4gKwo+ID4gKyNkZWZpbmUgTldM X0RTSV9NSVBJX0ZJRk9fVElNRU9VVCBtc2Vjc190b19qaWZmaWVzKDUwMCkKPiA+ICsKPiA+ICtl bnVtIHRyYW5zZmVyX2RpcmVjdGlvbiB7Cj4gPiArCURTSV9QQUNLRVRfU0VORCwKPiA+ICsJRFNJ X1BBQ0tFVF9SRUNFSVZFLAo+ID4gK307Cj4gPiArCj4gPiArLyogUG9zc2libGUgcGxhdGZvcm0g c3BlY2lmaWMgY2xvY2tzICovCj4gPiArI2RlZmluZSBOV0xfRFNJX0NMS19DT1JFCSAgICAiY29y ZSIKPiA+ICsjZGVmaW5lIE5XTF9EU0lfTUFYX1BMQVRGT1JNX0NMT0NLUyAxCj4gPiArCj4gPiAr c3RydWN0IG53bF9kc2lfcGxhdF9jbGtfY29uZmlnIHsKPiA+ICsJY29uc3QgY2hhciAqaWQ7Cj4g PiArCXN0cnVjdCBjbGsgKmNsazsKPiA+ICsJYm9vbCBwcmVzZW50Owo+ID4gK307Cj4gPiArCj4g PiArc3RydWN0IG53bF9kc2lfdHJhbnNmZXIgewo+ID4gKwljb25zdCBzdHJ1Y3QgbWlwaV9kc2lf bXNnICptc2c7Cj4gPiArCXN0cnVjdCBtaXBpX2RzaV9wYWNrZXQgcGFja2V0Owo+ID4gKwlzdHJ1 Y3QgY29tcGxldGlvbiBjb21wbGV0ZWQ7Cj4gPiArCj4gPiArCWludCBzdGF0dXM7IC8qIHN0YXR1 cyBvZiB0cmFuc21pc3Npb24gKi8KPiA+ICsJZW51bSB0cmFuc2Zlcl9kaXJlY3Rpb24gZGlyZWN0 aW9uOwo+ID4gKwlib29sIG5lZWRfYnRhOwo+ID4gKwl1OCBjbWQ7Cj4gPiArCXUxNiByeF93b3Jk X2NvdW50Owo+ID4gKwlzaXplX3QgdHhfbGVuOyAvKiBpbiBieXRlcyAqLwo+ID4gKwlzaXplX3Qg cnhfbGVuOyAvKiBpbiBieXRlcyAqLwo+ID4gK307Cj4gPiArCj4gPiArc3RydWN0IG53bF9kc2kg ewo+ID4gKwlzdHJ1Y3QgZHJtX2JyaWRnZSBicmlkZ2U7Cj4gPiArCXN0cnVjdCBtaXBpX2RzaV9o b3N0IGRzaV9ob3N0Owo+ID4gKwlzdHJ1Y3QgZHJtX2JyaWRnZSAqcGFuZWxfYnJpZGdlOwo+ID4g KwlzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4gPiArCXN0cnVjdCBwaHkgKnBoeTsKPiA+ICsJdW5pb24g cGh5X2NvbmZpZ3VyZV9vcHRzIHBoeV9jZmc7Cj4gPiArCXVuc2lnbmVkIGludCBxdWlya3M7Cj4g PiArCj4gPiArCXN0cnVjdCByZWdtYXAgKnJlZ21hcDsKPiA+ICsJaW50IGlycTsKPiA+ICsJc3Ry dWN0IHJlc2V0X2NvbnRyb2wgKnJzdGM7Cj4gPiArCXN0cnVjdCBtdXhfY29udHJvbCAqbXV4Owo+ ID4gKwo+ID4gKwkvKiBEU0kgY2xvY2tzICovCj4gPiArCXN0cnVjdCBjbGsgKnBoeV9yZWZfY2xr Owo+ID4gKwlzdHJ1Y3QgY2xrICpyeF9lc2NfY2xrOwo+ID4gKwlzdHJ1Y3QgY2xrICp0eF9lc2Nf Y2xrOwo+ID4gKwkvKiBQbGF0Zm9ybSBkZXBlbmRlbnQgY2xvY2tzICovCj4gPiArCXN0cnVjdCBu d2xfZHNpX3BsYXRfY2xrX2NvbmZpZyBjbGtfY29uZmlnW05XTF9EU0lfTUFYX1BMQVRGT1JNX0NM T0NLU107Cj4gCj4gCj4gVGhlc2UgY2xvY2tzIGFyZSBub3QgZG9jdW1lbnRlZC4KCndlIGhhdmUK CiAgICAgIC0gZGVzY3JpcHRpb246IERTSSBjb3JlIGNsb2NrCiAgICAgIC0gZGVzY3JpcHRpb246 IFJYX0VTQyBjbG9jayAodXNlZCBpbiBlc2NhcGUgbW9kZSkKICAgICAgLSBkZXNjcmlwdGlvbjog VFhfRVNDIGNsb2NrICh1c2VkIGluIGVzY2FwZSBtb2RlKQogICAgICAtIGRlc2NyaXB0aW9uOiBQ SFlfUkVGIGNsb2NrCgppbiB0aCB5YW1sLiBUaGUgY29yZSBjbG9jayBpcyB0aGUgb25seSBwbGF0 Zm9ybSBzcGVjaWZpYyBvbmUsIGlteDhxbQp3aWxsIGFkZCBtb3JlLgoKPiAKPiAKPiA+ICsKPiA+ ICsJLyogZHNpIGxhbmVzICovCj4gPiArCXUzMiBsYW5lczsKPiA+ICsJZW51bSBtaXBpX2RzaV9w aXhlbF9mb3JtYXQgZm9ybWF0Owo+ID4gKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBtb2RlOwo+ ID4gKwl1bnNpZ25lZCBsb25nIGRzaV9tb2RlX2ZsYWdzOwo+ID4gKwo+ID4gKwlzdHJ1Y3Qgbnds X2RzaV90cmFuc2ZlciAqeGZlcjsKPiA+ICsKPiA+ICsJY29uc3Qgc3RydWN0IG53bF9kc2lfcGxh dGZvcm1fZGF0YSAqcGRhdGE7Cj4gPiArfTsKPiA+ICsKPiA+ICsvKiBQbGF0Zm9ybSBzcGVjaWZp YyBob29rcyB0byBlbmFibGUgb3RoZXIgU29DcyBsaWtlIHRoZSBpLk1YOFFNICovCj4gPiArc3Ry dWN0IG53bF9kc2lfcGxhdGZvcm1fZGF0YSB7Cj4gPiArCWludCAoKnBvd2Vyb24pKHN0cnVjdCBu d2xfZHNpICpkc2kpOwo+ID4gKwlpbnQgKCpwb3dlcm9mZikoc3RydWN0IG53bF9kc2kgKmRzaSk7 Cj4gPiArCWludCAoKnNlbGVjdF9pbnB1dCkoc3RydWN0IG53bF9kc2kgKmRzaSk7Cj4gPiArCWlu dCAoKmRlc2VsZWN0X2lucHV0KShzdHJ1Y3QgbndsX2RzaSAqZHNpKTsKPiA+ICsJc3RydWN0IG53 bF9kc2lfcGxhdF9jbGtfY29uZmlnIGNsa19jb25maWdbTldMX0RTSV9NQVhfUExBVEZPUk1fQ0xP Q0tTXTsKPiA+ICt9Owo+ID4gKwo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZp ZyBud2xfZHNpX3JlZ21hcF9jb25maWcgPSB7Cj4gPiArCS5yZWdfYml0cyA9IDE2LAo+ID4gKwku dmFsX2JpdHMgPSAzMiwKPiA+ICsJLnJlZ19zdHJpZGUgPSA0LAo+ID4gKwkubWF4X3JlZ2lzdGVy ID0gTldMX0RTSV9JUlFfTUFTSzIsCj4gPiArCS5uYW1lID0gRFJWX05BTUUsCj4gPiArfTsKPiA+ ICsKPiA+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBud2xfZHNpICpicmlkZ2VfdG9fZHNpKHN0cnVj dCBkcm1fYnJpZGdlICpicmlkZ2UpCj4gPiArewo+ID4gKwlyZXR1cm4gY29udGFpbmVyX29mKGJy aWRnZSwgc3RydWN0IG53bF9kc2ksIGJyaWRnZSk7Cj4gPiArfQo+ID4gKwo+ID4gKwo+IAo+IAo+ IHNwYXJlIGVtcHR5IGxpbmUKCmRyb3BwZWQuCj4gCj4gCj4gPiArc3RhdGljIGludCBud2xfZHNp X3dyaXRlKHN0cnVjdCBud2xfZHNpICpkc2ksIHVuc2lnbmVkIGludCByZWcsIHUzMiB2YWwpCj4g PiArewo+ID4gKwlpbnQgcmV0Owo+ID4gKwo+ID4gKwlyZXQgPSByZWdtYXBfd3JpdGUoZHNpLT5y ZWdtYXAsIHJlZywgdmFsKTsKPiA+ICsJaWYgKHJldCA8IDApCj4gPiArCQlEUk1fREVWX0VSUk9S KGRzaS0+ZGV2LAo+ID4gKwkJCSAgICAgICJGYWlsZWQgdG8gd3JpdGUgTldMIERTSSByZWcgMHgl eDogJWRcbiIsIHJlZywKPiA+ICsJCQkgICAgICByZXQpOwo+ID4gKwlyZXR1cm4gcmV0Owo+ID4g K30KPiA+ICsKPiA+ICtzdGF0aWMgdTMyIG53bF9kc2lfcmVhZChzdHJ1Y3QgbndsX2RzaSAqZHNp LCB1MzIgcmVnKQo+ID4gK3sKPiA+ICsJdW5zaWduZWQgaW50IHZhbDsKPiA+ICsJaW50IHJldDsK PiA+ICsKPiA+ICsJcmV0ID0gcmVnbWFwX3JlYWQoZHNpLT5yZWdtYXAsIHJlZywgJnZhbCk7Cj4g PiArCWlmIChyZXQgPCAwKQo+ID4gKwkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwgIkZhaWxlZCB0 byByZWFkIE5XTCBEU0kgcmVnIDB4JXg6ICVkXG4iLAo+ID4gKwkJCSAgICAgIHJlZywgcmV0KTsK PiA+ICsKPiA+ICsJcmV0dXJuIHZhbDsKPiAKPiAKPiBFcnJvciBpcyBsb2dnZWQsIGJ1dCBub3Qg cHJvcGFnYXRlZCwgYXMgYSByZXN1bHQgY2FsbGVyIHdpbGwgYXNzdW1lIHRoZQo+IHJlYWQgd2Fz IHN1Y2Nlc3NmdWwsIHF1aXRlIGZpc2h5LgoKQWdyZWVkLCB3ZSBjYW4gdXNlIHRoZSBzYW1lIHBh dHRlcm4gYXMgZm9yIHdyaXRlIGVycm9ycy4KCj4gCj4gCj4gPiArfQo+ID4gKwo+ID4gK3N0YXRp YyB1MzIgbndsX2RzaV9nZXRfZHBpX3BpeGVsX2Zvcm1hdChlbnVtIG1pcGlfZHNpX3BpeGVsX2Zv cm1hdCBmb3JtYXQpCj4gPiArewo+ID4gKwlzd2l0Y2ggKGZvcm1hdCkgewo+ID4gKwljYXNlIE1J UElfRFNJX0ZNVF9SR0I1NjU6Cj4gPiArCQlyZXR1cm4gTldMX0RTSV9QSVhFTF9GT1JNQVRfMTY7 Cj4gPiArCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjY2NjoKPiA+ICsJCXJldHVybiBOV0xfRFNJX1BJ WEVMX0ZPUk1BVF8xOEw7Cj4gPiArCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjY2Nl9QQUNLRUQ6Cj4g PiArCQlyZXR1cm4gTldMX0RTSV9QSVhFTF9GT1JNQVRfMTg7Cj4gPiArCWNhc2UgTUlQSV9EU0lf Rk1UX1JHQjg4ODoKPiA+ICsJCXJldHVybiBOV0xfRFNJX1BJWEVMX0ZPUk1BVF8yNDsKPiA+ICsJ ZGVmYXVsdDoKPiA+ICsJCXJldHVybiAtRUlOVkFMOwo+IAo+IAo+IHJldHVybiB0eXBlIHNob3Vs ZCBiZSBzaWduZWQKCkZpeGVkLgoKPiAKPiAKPiA+ICsJfQo+ID4gK30KPiA+ICsKPiA+ICsvKgo+ ID4gKyAqIHBzMmJjIC0gUGljb3NlY29uZHMgdG8gYnl0ZSBjbG9jayBjeWNsZXMKPiA+ICsgKi8K PiA+ICtzdGF0aWMgdTMyIHBzMmJjKHN0cnVjdCBud2xfZHNpICpkc2ksIHVuc2lnbmVkIGxvbmcg bG9uZyBwcykKPiA+ICt7Cj4gPiArCXUzMiBicHAgPSBtaXBpX2RzaV9waXhlbF9mb3JtYXRfdG9f YnBwKGRzaS0+Zm9ybWF0KTsKPiA+ICsKPiA+ICsJcmV0dXJuIERJVjY0X1U2NF9ST1VORF9VUChw cyAqIGRzaS0+bW9kZS5jbG9jayAqIGJwcCwKPiA+ICsJCQkJICBkc2ktPmxhbmVzICogOCAqIE5T RUNfUEVSX1NFQyk7Cj4gPiArfQo+ID4gKwo+ID4gKy8qCj4gPiArICogdWkyYmMgLSBVSSB0aW1l IHBlcmlvZHMgdG8gYnl0ZSBjbG9jayBjeWNsZXMKPiA+ICsgKi8KPiA+ICtzdGF0aWMgdTMyIHVp MmJjKHN0cnVjdCBud2xfZHNpICpkc2ksIHVuc2lnbmVkIGxvbmcgbG9uZyB1aSkKPiA+ICt7Cj4g PiArCXUzMiBicHAgPSBtaXBpX2RzaV9waXhlbF9mb3JtYXRfdG9fYnBwKGRzaS0+Zm9ybWF0KTsK PiA+ICsKPiA+ICsJcmV0dXJuIERJVjY0X1U2NF9ST1VORF9VUCh1aSAqIGRzaS0+bGFuZXMsCj4g PiArCQkJCSAgZHNpLT5tb2RlLmNsb2NrICogMTAwMCAqIGJwcCk7Cj4gPiArfQo+ID4gKwo+ID4g Ky8qCj4gPiArICogdXMyYmMgLSBtaWNybyBzZWNvbmRzIHRvIGxwIGNsb2NrIGN5Y2xlcwo+ID4g KyAqLwo+ID4gK3N0YXRpYyB1MzIgdXMybHAodTMyIGxwX2Nsa19yYXRlLCB1bnNpZ25lZCBsb25n IHVzKQo+ID4gK3sKPiA+ICsJcmV0dXJuIERJVl9ST1VORF9VUCh1cyAqIGxwX2Nsa19yYXRlLCBV U0VDX1BFUl9TRUMpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IG53bF9kc2lfY29uZmln X2hvc3Qoc3RydWN0IG53bF9kc2kgKmRzaSkKPiA+ICt7Cj4gPiArCXUzMiBjeWNsZXM7Cj4gPiAr CXN0cnVjdCBwaHlfY29uZmlndXJlX29wdHNfbWlwaV9kcGh5ICpjZmcgPSAmZHNpLT5waHlfY2Zn Lm1pcGlfZHBoeTsKPiA+ICsKPiA+ICsJaWYgKGRzaS0+bGFuZXMgPCAxIHx8IGRzaS0+bGFuZXMg PiA0KQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gPiArCj4gPiArCURSTV9ERVZfREVCVUdfRFJJ VkVSKGRzaS0+ZGV2LCAiRFNJIExhbmVzICVkXG4iLCBkc2ktPmxhbmVzKTsKPiA+ICsJbndsX2Rz aV93cml0ZShkc2ksIE5XTF9EU0lfQ0ZHX05VTV9MQU5FUywgZHNpLT5sYW5lcyAtIDEpOwo+ID4g Kwo+ID4gKwlpZiAoZHNpLT5kc2lfbW9kZV9mbGFncyAmIE1JUElfRFNJX0NMT0NLX05PTl9DT05U SU5VT1VTKSB7Cj4gPiArCQlud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9DRkdfTk9OQ09OVElO VU9VU19DTEssIDB4MDEpOwo+ID4gKwkJbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfQ0ZHX0FV VE9JTlNFUlRfRU9UUCwgMHgwMSk7Cj4gPiArCX0gZWxzZSB7Cj4gPiArCQlud2xfZHNpX3dyaXRl KGRzaSwgTldMX0RTSV9DRkdfTk9OQ09OVElOVU9VU19DTEssIDB4MDApOwo+ID4gKwkJbndsX2Rz aV93cml0ZShkc2ksIE5XTF9EU0lfQ0ZHX0FVVE9JTlNFUlRfRU9UUCwgMHgwMCk7Cj4gPiArCX0K PiA+ICsKPiA+ICsJLyogdmFsdWVzIGluIGJ5dGUgY2xvY2sgY3ljbGVzICovCj4gPiArCWN5Y2xl cyA9IHVpMmJjKGRzaSwgY2ZnLT5jbGtfcHJlKTsKPiA+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIo ZHNpLT5kZXYsICJjZmdfdF9wcmU6IDB4JXhcbiIsIGN5Y2xlcyk7Cj4gPiArCW53bF9kc2lfd3Jp dGUoZHNpLCBOV0xfRFNJX0NGR19UX1BSRSwgY3ljbGVzKTsKPiA+ICsJY3ljbGVzID0gcHMyYmMo ZHNpLCBjZmctPmxweCArIGNmZy0+Y2xrX3ByZXBhcmUgKyBjZmctPmNsa196ZXJvKTsKPiA+ICsJ RFJNX0RFVl9ERUJVR19EUklWRVIoZHNpLT5kZXYsICJjZmdfdHhfZ2FwIChwcmUpOiAweCV4XG4i LCBjeWNsZXMpOwo+ID4gKwljeWNsZXMgKz0gdWkyYmMoZHNpLCBjZmctPmNsa19wcmUpOwo+ID4g KwlEUk1fREVWX0RFQlVHX0RSSVZFUihkc2ktPmRldiwgImNmZ190X3Bvc3Q6IDB4JXhcbiIsIGN5 Y2xlcyk7Cj4gPiArCW53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX0NGR19UX1BPU1QsIGN5Y2xl cyk7Cj4gPiArCWN5Y2xlcyA9IHBzMmJjKGRzaSwgY2ZnLT5oc19leGl0KTsKPiA+ICsJRFJNX0RF Vl9ERUJVR19EUklWRVIoZHNpLT5kZXYsICJjZmdfdHhfZ2FwOiAweCV4XG4iLCBjeWNsZXMpOwo+ ID4gKwlud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9DRkdfVFhfR0FQLCBjeWNsZXMpOwo+ID4g Kwo+ID4gKwlud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9DRkdfRVhUUkFfQ01EU19BRlRFUl9F T1RQLCAweDAxKTsKPiA+ICsJbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfQ0ZHX0hUWF9UT19D T1VOVCwgMHgwMCk7Cj4gPiArCW53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX0NGR19MUlhfSF9U T19DT1VOVCwgMHgwMCk7Cj4gPiArCW53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX0NGR19CVEFf SF9UT19DT1VOVCwgMHgwMCk7Cj4gPiArCS8qIEluIExQIGNsb2NrIGN5Y2xlcyAqLwo+ID4gKwlj eWNsZXMgPSB1czJscChjZmctPmxwX2Nsa19yYXRlLCBjZmctPndha2V1cCk7Cj4gPiArCURSTV9E RVZfREVCVUdfRFJJVkVSKGRzaS0+ZGV2LCAiY2ZnX3R3YWtldXA6IDB4JXhcbiIsIGN5Y2xlcyk7 Cj4gPiArCW53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX0NGR19UV0FLRVVQLCBjeWNsZXMpOwo+ ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBud2xfZHNp X2NvbmZpZ19kcGkoc3RydWN0IG53bF9kc2kgKmRzaSkKPiA+ICt7Cj4gPiArCXUzMiBjb2xvcl9m b3JtYXQsIG1vZGU7Cj4gPiArCWJvb2wgYnVyc3RfbW9kZTsKPiA+ICsJaW50IGhmcm9udF9wb3Jj aCwgaGJhY2tfcG9yY2gsIHZmcm9udF9wb3JjaCwgdmJhY2tfcG9yY2g7Cj4gPiArCWludCBoc3lu Y19sZW4sIHZzeW5jX2xlbjsKPiA+ICsKPiA+ICsJaGZyb250X3BvcmNoID0gZHNpLT5tb2RlLmhz eW5jX3N0YXJ0IC0gZHNpLT5tb2RlLmhkaXNwbGF5Owo+ID4gKwloc3luY19sZW4gPSBkc2ktPm1v ZGUuaHN5bmNfZW5kIC0gZHNpLT5tb2RlLmhzeW5jX3N0YXJ0Owo+ID4gKwloYmFja19wb3JjaCA9 IGRzaS0+bW9kZS5odG90YWwgLSBkc2ktPm1vZGUuaHN5bmNfZW5kOwo+ID4gKwo+ID4gKwl2ZnJv bnRfcG9yY2ggPSBkc2ktPm1vZGUudnN5bmNfc3RhcnQgLSBkc2ktPm1vZGUudmRpc3BsYXk7Cj4g PiArCXZzeW5jX2xlbiA9IGRzaS0+bW9kZS52c3luY19lbmQgLSBkc2ktPm1vZGUudnN5bmNfc3Rh cnQ7Cj4gPiArCXZiYWNrX3BvcmNoID0gZHNpLT5tb2RlLnZ0b3RhbCAtIGRzaS0+bW9kZS52c3lu Y19lbmQ7Cj4gPiArCj4gPiArCURSTV9ERVZfREVCVUdfRFJJVkVSKGRzaS0+ZGV2LCAiaGZyb250 X3BvcmNoID0gJWRcbiIsIGhmcm9udF9wb3JjaCk7Cj4gPiArCURSTV9ERVZfREVCVUdfRFJJVkVS KGRzaS0+ZGV2LCAiaGJhY2tfcG9yY2ggPSAlZFxuIiwgaGJhY2tfcG9yY2gpOwo+ID4gKwlEUk1f REVWX0RFQlVHX0RSSVZFUihkc2ktPmRldiwgImhzeW5jX2xlbiA9ICVkXG4iLCBoc3luY19sZW4p Owo+ID4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkc2ktPmRldiwgImhkaXNwbGF5ID0gJWRcbiIs IGRzaS0+bW9kZS5oZGlzcGxheSk7Cj4gPiArCURSTV9ERVZfREVCVUdfRFJJVkVSKGRzaS0+ZGV2 LCAidmZyb250X3BvcmNoID0gJWRcbiIsIHZmcm9udF9wb3JjaCk7Cj4gPiArCURSTV9ERVZfREVC VUdfRFJJVkVSKGRzaS0+ZGV2LCAidmJhY2tfcG9yY2ggPSAlZFxuIiwgdmJhY2tfcG9yY2gpOwo+ ID4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkc2ktPmRldiwgInZzeW5jX2xlbiA9ICVkXG4iLCB2 c3luY19sZW4pOwo+ID4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkc2ktPmRldiwgInZhY3RpdmUg PSAlZFxuIiwgZHNpLT5tb2RlLnZkaXNwbGF5KTsKPiA+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIo ZHNpLT5kZXYsICJjbG9jayA9ICVkIGtIelxuIiwgZHNpLT5tb2RlLmNsb2NrKTsKPiA+ICsKPiA+ ICsJY29sb3JfZm9ybWF0ID0gbndsX2RzaV9nZXRfZHBpX3BpeGVsX2Zvcm1hdChkc2ktPmZvcm1h dCk7Cj4gPiArCWlmIChjb2xvcl9mb3JtYXQgPCAwKSB7Cj4gCj4gCj4gQXMgcm9ib3QgbWVudGlv bmVkwqAgaXQgaXMgYWx3YXlzIGZhbHNlLgoKRml4ZWQuCgo+IAo+IAo+ID4gKwkJRFJNX0RFVl9F UlJPUihkc2ktPmRldiwgIkludmFsaWQgY29sb3IgZm9ybWF0IDB4JXhcbiIsCj4gPiArCQkJICAg ICAgZHNpLT5mb3JtYXQpOwo+ID4gKwkJcmV0dXJuIGNvbG9yX2Zvcm1hdDsKPiA+ICsJfQo+ID4g KwlEUk1fREVWX0RFQlVHX0RSSVZFUihkc2ktPmRldiwgInBpeGVsIGZtdCA9ICVkXG4iLCBkc2kt PmZvcm1hdCk7Cj4gPiArCj4gPiArCW53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX0lOVEVSRkFD RV9DT0xPUl9DT0RJTkcsIE5XTF9EU0lfRFBJXzI0X0JJVCk7Cj4gPiArCW53bF9kc2lfd3JpdGUo ZHNpLCBOV0xfRFNJX1BJWEVMX0ZPUk1BVCwgY29sb3JfZm9ybWF0KTsKPiA+ICsJLyoKPiA+ICsJ ICogQWRqdXN0aW5nIGlucHV0IHBvbGFyaXR5IGJhc2VkIG9uIHRoZSB2aWRlbyBtb2RlIHJlc3Vs dHMgaW4KPiA+ICsJICogYSBibGFjayBzY3JlZW4gc28gYWx3YXlzIHBpY2sgYWN0aXZlIGxvdzoK PiA+ICsJICovCj4gPiArCW53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX1ZTWU5DX1BPTEFSSVRZ LAo+ID4gKwkJICAgICAgTldMX0RTSV9WU1lOQ19QT0xBUklUWV9BQ1RJVkVfTE9XKTsKPiA+ICsJ bndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfSFNZTkNfUE9MQVJJVFksCj4gPiArCQkgICAgICBO V0xfRFNJX0hTWU5DX1BPTEFSSVRZX0FDVElWRV9MT1cpOwo+ID4gKwo+ID4gKwlidXJzdF9tb2Rl ID0gKGRzaS0+ZHNpX21vZGVfZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX1ZJREVPX0JVUlNUKSAmJgo+ ID4gKwkJICAgICAhKGRzaS0+ZHNpX21vZGVfZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX1ZJREVPX1NZ TkNfUFVMU0UpOwo+ID4gKwo+ID4gKwlpZiAoYnVyc3RfbW9kZSkgewo+ID4gKwkJbndsX2RzaV93 cml0ZShkc2ksIE5XTF9EU0lfVklERU9fTU9ERSwgTldMX0RTSV9WTV9CVVJTVF9NT0RFKTsKPiA+ ICsJCW53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX1BJWEVMX0ZJRk9fU0VORF9MRVZFTCwgMjU2 KTsKPiA+ICsJfSBlbHNlIHsKPiA+ICsJCW1vZGUgPSAoKGRzaS0+ZHNpX21vZGVfZmxhZ3MgJiBN SVBJX0RTSV9NT0RFX1ZJREVPX1NZTkNfUFVMU0UpID8KPiA+ICsJCQkJTldMX0RTSV9WTV9CVVJT VF9NT0RFX1dJVEhfU1lOQ19QVUxTRVMgOgo+ID4gKwkJCQlOV0xfRFNJX1ZNX05PTl9CVVJTVF9N T0RFX1dJVEhfU1lOQ19FVkVOVFMpOwo+ID4gKwkJbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lf VklERU9fTU9ERSwgbW9kZSk7Cj4gPiArCQlud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9QSVhF TF9GSUZPX1NFTkRfTEVWRUwsCj4gPiArCQkJICAgICAgZHNpLT5tb2RlLmhkaXNwbGF5KTsKPiA+ ICsJfQo+ID4gKwo+ID4gKwlud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9IRlAsIGhmcm9udF9w b3JjaCk7Cj4gPiArCW53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX0hCUCwgaGJhY2tfcG9yY2gp Owo+ID4gKwlud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9IU0EsIGhzeW5jX2xlbik7Cj4gPiAr Cj4gPiArCW53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX0VOQUJMRV9NVUxUX1BLVFMsIDB4MCk7 Cj4gPiArCW53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX0JMTFBfTU9ERSwgMHgxKTsKPiA+ICsJ bndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfVVNFX05VTExfUEtUX0JMTFAsIDB4MCk7Cj4gPiAr CW53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX1ZDLCAweDApOwo+ID4gKwo+ID4gKwlud2xfZHNp X3dyaXRlKGRzaSwgTldMX0RTSV9QSVhFTF9QQVlMT0FEX1NJWkUsIGRzaS0+bW9kZS5oZGlzcGxh eSk7Cj4gPiArCW53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX1ZBQ1RJVkUsIGRzaS0+bW9kZS52 ZGlzcGxheSAtIDEpOwo+ID4gKwlud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9WQlAsIHZiYWNr X3BvcmNoKTsKPiA+ICsJbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfVkZQLCB2ZnJvbnRfcG9y Y2gpOwo+IAo+IAo+IE5vIGNoZWNrcyBmb3IgcmVzdWx0cyBvZiBud2xfZHNpX3dyaXRlLiBZb3Ug c2hvdWxkIGVpdGhlciBhZGQgY2hlY2sKPiBhZnRlciBldmVyeSBjYWxsLCBvciB0cnkgImVycm9y IHN0YXRlIiBwYXR0ZXJuIChzZWUgZm9yIGV4YW1wbGUgZm9yCj4gdGMzNTg3NjQuYyBkcml2ZXIp LgoKJ2Vycm9yIHN0YXRlJyBwYXR0ZXJuIGxvb2tzIGxpa2UgYSBnb29kIGZpdCwgdGhhbmtzIQoK PiAKPiAKPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lk IG53bF9kc2lfaW5pdF9pbnRlcnJ1cHRzKHN0cnVjdCBud2xfZHNpICpkc2kpCj4gPiArewo+ID4g Kwl1MzIgaXJxX2VuYWJsZTsKPiA+ICsKPiA+ICsJbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lf SVJRX01BU0ssIDB4ZmZmZmZmZmYpOwo+ID4gKwlud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9J UlFfTUFTSzIsIDB4Nyk7Cj4gPiArCj4gPiArCWlycV9lbmFibGUgPSB+KHUzMikoTldMX0RTSV9U WF9QS1RfRE9ORV9NQVNLIHwKPiA+ICsJCQkgICAgTldMX0RTSV9SWF9QS1RfSERSX1JDVkRfTUFT SyB8Cj4gPiArCQkJICAgIE5XTF9EU0lfVFhfRklGT19PVkZMV19NQVNLIHwKPiA+ICsJCQkgICAg TldMX0RTSV9IU19UWF9USU1FT1VUX01BU0spOwo+IAo+IAo+IEkgd29uZGVyIGlmIGxhY2sgb2Yg Jyh1MzIpJyB3b3VsZCBsZWFkIHRvIHNvbWUgYnVncy93YXJuaW5ncy4KCmRyaXZlcnMvZ3B1L2Ry bS9icmlkZ2UvbndsLWRzaS5jOiBJbiBmdW5jdGlvbiDigJhud2xfZHNpX2luaXRfaW50ZXJydXB0 c+KAmToKZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9ud2wtZHNpLmM6MzQ1OjE1OiB3YXJuaW5nOiBj b252ZXJzaW9uIGZyb20g4oCYbG9uZyB1bnNpZ25lZCBpbnTigJkgdG8g4oCYdTMy4oCZIHtha2Eg 4oCYdW5zaWduZWQgaW504oCZfSBjaGFuZ2VzIHZhbHVlIGZyb20g4oCYMTg0NDY3NDQwNzE1NjIw Njc4MjnigJkgdG8g4oCYMjE0NzQ4MzUwOeKAmSBbLVdvdmVyZmxvd10KICBpcnFfZW5hYmxlID0g fihOV0xfRFNJX1RYX1BLVF9ET05FX01BU0sgfAogICAgICAgICAgICAgICAKPiA+ICsKPiA+ICsJ bndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfSVJRX01BU0ssIGlycV9lbmFibGUpOwo+ID4gK30K PiA+ICsKPiA+ICtzdGF0aWMgaW50IG53bF9kc2lfaG9zdF9hdHRhY2goc3RydWN0IG1pcGlfZHNp X2hvc3QgKmRzaV9ob3N0LAo+ID4gKwkJCSAgICAgICBzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpk ZXZpY2UpCj4gPiArewo+ID4gKwlzdHJ1Y3QgbndsX2RzaSAqZHNpID0gY29udGFpbmVyX29mKGRz aV9ob3N0LCBzdHJ1Y3QgbndsX2RzaSwgZHNpX2hvc3QpOwo+ID4gKwlzdHJ1Y3QgZGV2aWNlICpk ZXYgPSBkc2ktPmRldjsKPiA+ICsJc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZTsKPiA+ICsJc3Ry dWN0IGRybV9wYW5lbCAqcGFuZWw7Cj4gPiArCWludCByZXQ7Cj4gPiArCj4gPiArCURSTV9ERVZf SU5GTyhkZXYsICJsYW5lcz0ldSwgZm9ybWF0PTB4JXggZmxhZ3M9MHglbHhcbiIsIGRldmljZS0+ bGFuZXMsCj4gPiArCQkgICAgIGRldmljZS0+Zm9ybWF0LCBkZXZpY2UtPm1vZGVfZmxhZ3MpOwo+ ID4gKwo+ID4gKwlpZiAoZGV2aWNlLT5sYW5lcyA8IDEgfHwgZGV2aWNlLT5sYW5lcyA+IDQpCj4g PiArCQlyZXR1cm4gLUVJTlZBTDsKPiAKPiAKPiBJIGd1ZXNzIHRoaXMgc2FuaXR5IGNoZWNrIHNo b3VsZCBiZSByYXRoZXIgaW4gbWlwaV9kc2lfYXR0YWNoLCBidXQgc2luY2UKPiBpdCBpcyBub3Qg dGhlcmUgbGV0J3MgbGVhdmUgaXQgaGVyZS4KPiAKPiAKPiA+ICsKPiA+ICsJZHNpLT5sYW5lcyA9 IGRldmljZS0+bGFuZXM7Cj4gPiArCWRzaS0+Zm9ybWF0ID0gZGV2aWNlLT5mb3JtYXQ7Cj4gPiAr CWRzaS0+ZHNpX21vZGVfZmxhZ3MgPSBkZXZpY2UtPm1vZGVfZmxhZ3M7Cj4gPiArCj4gPiArCXJl dCA9IGRybV9vZl9maW5kX3BhbmVsX29yX2JyaWRnZShkc2ktPmRldi0+b2Zfbm9kZSwgMSwgMCwg JnBhbmVsLAo+ID4gKwkJCQkJICAmYnJpZGdlKTsKPiA+ICsJaWYgKHJldCkKPiA+ICsJCXJldHVy biByZXQ7Cj4gPiArCj4gPiArCWlmIChwYW5lbCkgewo+ID4gKwkJYnJpZGdlID0gZHJtX3BhbmVs X2JyaWRnZV9hZGQocGFuZWwsIERSTV9NT0RFX0NPTk5FQ1RPUl9EU0kpOwo+ID4gKwkJaWYgKElT X0VSUihicmlkZ2UpKQo+ID4gKwkJCXJldHVybiBQVFJfRVJSKGJyaWRnZSk7Cj4gPiArCX0KPiA+ ICsKPiA+ICsJZHNpLT5wYW5lbF9icmlkZ2UgPSBicmlkZ2U7Cj4gPiArCWRybV9icmlkZ2VfYWRk KCZkc2ktPmJyaWRnZSk7Cj4gPiArCj4gPiArCXJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtz dGF0aWMgaW50IG53bF9kc2lfaG9zdF9kZXRhY2goc3RydWN0IG1pcGlfZHNpX2hvc3QgKmRzaV9o b3N0LAo+ID4gKwkJCSAgICAgICBzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkZXZpY2UpCj4gPiAr ewo+ID4gKwlzdHJ1Y3QgbndsX2RzaSAqZHNpID0gY29udGFpbmVyX29mKGRzaV9ob3N0LCBzdHJ1 Y3QgbndsX2RzaSwgZHNpX2hvc3QpOwo+ID4gKwo+ID4gKwlkcm1fb2ZfcGFuZWxfYnJpZGdlX3Jl bW92ZShkc2ktPmRldi0+b2Zfbm9kZSwgMSwgMCk7Cj4gPiArCWRybV9icmlkZ2VfcmVtb3ZlKCZk c2ktPmJyaWRnZSk7Cj4gPiArCj4gPiArCXJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0 aWMgYm9vbCBud2xfZHNpX3JlYWRfcGFja2V0KHN0cnVjdCBud2xfZHNpICpkc2ksIHUzMiBzdGF0 dXMpCj4gPiArewo+ID4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkc2ktPmRldjsKPiA+ICsJc3Ry dWN0IG53bF9kc2lfdHJhbnNmZXIgKnhmZXIgPSBkc2ktPnhmZXI7Cj4gPiArCXU4ICpwYXlsb2Fk ID0geGZlci0+bXNnLT5yeF9idWY7Cj4gPiArCXUzMiB2YWw7Cj4gPiArCXUxNiB3b3JkX2NvdW50 Owo+ID4gKwl1OCBjaGFubmVsOwo+ID4gKwl1OCBkYXRhX3R5cGU7Cj4gPiArCj4gPiArCXhmZXIt PnN0YXR1cyA9IDA7Cj4gPiArCj4gPiArCWlmICh4ZmVyLT5yeF93b3JkX2NvdW50ID09IDApIHsK PiA+ICsJCWlmICghKHN0YXR1cyAmIE5XTF9EU0lfUlhfUEtUX0hEUl9SQ1ZEKSkKPiA+ICsJCQly ZXR1cm4gZmFsc2U7Cj4gPiArCQkvKiBHZXQgdGhlIFJYIGhlYWRlciBhbmQgcGFyc2UgaXQgKi8K PiA+ICsJCXZhbCA9IG53bF9kc2lfcmVhZChkc2ksIE5XTF9EU0lfUlhfUEtUX0hFQURFUik7Cj4g PiArCQl3b3JkX2NvdW50ID0gTldMX0RTSV9XQyh2YWwpOwo+ID4gKwkJY2hhbm5lbCA9IE5XTF9E U0lfUlhfVkModmFsKTsKPiA+ICsJCWRhdGFfdHlwZSA9IE5XTF9EU0lfUlhfRFQodmFsKTsKPiA+ ICsKPiA+ICsJCWlmIChjaGFubmVsICE9IHhmZXItPm1zZy0+Y2hhbm5lbCkgewo+ID4gKwkJCURS TV9ERVZfRVJST1IoZGV2LAo+ID4gKwkJCQkgICAgICAiWyUwMlhdIENoYW5uZWwgbWlzbWF0Y2gg KCV1ICE9ICV1KVxuIiwKPiA+ICsJCQkJICAgICAgeGZlci0+Y21kLCBjaGFubmVsLCB4ZmVyLT5t c2ctPmNoYW5uZWwpOwo+ID4gKwkJCXJldHVybiB0cnVlOwo+ID4gKwkJfQo+ID4gKwo+ID4gKwkJ c3dpdGNoIChkYXRhX3R5cGUpIHsKPiA+ICsJCWNhc2UgTUlQSV9EU0lfUlhfR0VORVJJQ19TSE9S VF9SRUFEX1JFU1BPTlNFXzJCWVRFOgo+ID4gKwkJCS8qIEZhbGwgdGhyb3VnaCAqLwo+ID4gKwkJ Y2FzZSBNSVBJX0RTSV9SWF9EQ1NfU0hPUlRfUkVBRF9SRVNQT05TRV8yQllURToKPiA+ICsJCQlp ZiAoeGZlci0+bXNnLT5yeF9sZW4gPiAxKSB7Cj4gPiArCQkJCS8qIHJlYWQgc2Vjb25kIGJ5dGUg Ki8KPiA+ICsJCQkJcGF5bG9hZFsxXSA9IHdvcmRfY291bnQgPj4gODsKPiA+ICsJCQkJKyt4ZmVy LT5yeF9sZW47Cj4gPiArCQkJfQo+ID4gKwkJCS8qIEZhbGwgdGhyb3VnaCAqLwo+ID4gKwkJY2Fz ZSBNSVBJX0RTSV9SWF9HRU5FUklDX1NIT1JUX1JFQURfUkVTUE9OU0VfMUJZVEU6Cj4gPiArCQkJ LyogRmFsbCB0aHJvdWdoICovCj4gPiArCQljYXNlIE1JUElfRFNJX1JYX0RDU19TSE9SVF9SRUFE X1JFU1BPTlNFXzFCWVRFOgo+ID4gKwkJCWlmICh4ZmVyLT5tc2ctPnJ4X2xlbiA+IDApIHsKPiA+ ICsJCQkJLyogcmVhZCBmaXJzdCBieXRlICovCj4gPiArCQkJCXBheWxvYWRbMF0gPSB3b3JkX2Nv dW50ICYgMHhmZjsKPiA+ICsJCQkJKyt4ZmVyLT5yeF9sZW47Cj4gPiArCQkJfQo+ID4gKwkJCXhm ZXItPnN0YXR1cyA9IHhmZXItPnJ4X2xlbjsKPiA+ICsJCQlyZXR1cm4gdHJ1ZTsKPiA+ICsJCWNh c2UgTUlQSV9EU0lfUlhfQUNLTk9XTEVER0VfQU5EX0VSUk9SX1JFUE9SVDoKPiA+ICsJCQl3b3Jk X2NvdW50ICY9IDB4ZmY7Cj4gPiArCQkJRFJNX0RFVl9FUlJPUihkZXYsICJbJTAyWF0gRFNJIGVy cm9yIHJlcG9ydDogMHglMDJ4XG4iLAo+ID4gKwkJCQkgICAgICB4ZmVyLT5jbWQsIHdvcmRfY291 bnQpOwo+ID4gKwkJCXhmZXItPnN0YXR1cyA9IC1FUFJPVE87Cj4gPiArCQkJcmV0dXJuIHRydWU7 Cj4gPiArCQl9Cj4gPiArCj4gPiArCQlpZiAod29yZF9jb3VudCA+IHhmZXItPm1zZy0+cnhfbGVu KSB7Cj4gPiArCQkJRFJNX0RFVl9FUlJPUigKPiA+ICsJCQkJZGV2LAo+ID4gKwkJCQkiWyUwMlhd IFJlY2VpdmUgYnVmZmVyIHRvbyBzbWFsbDogJXp1ICg8ICV1KVxuIiwKPiA+ICsJCQkJeGZlci0+ Y21kLCB4ZmVyLT5tc2ctPnJ4X2xlbiwgd29yZF9jb3VudCk7Cj4gPiArCQkJcmV0dXJuIHRydWU7 Cj4gPiArCQl9Cj4gPiArCj4gPiArCQl4ZmVyLT5yeF93b3JkX2NvdW50ID0gd29yZF9jb3VudDsK PiA+ICsJfSBlbHNlIHsKPiA+ICsJCS8qIFNldCB3b3JkX2NvdW50IGZyb20gcHJldmlvdXMgaGVh ZGVyIHJlYWQgKi8KPiA+ICsJCXdvcmRfY291bnQgPSB4ZmVyLT5yeF93b3JkX2NvdW50Owo+ID4g Kwl9Cj4gPiArCj4gPiArCS8qIElmIFJYIHBheWxvYWQgaXMgbm90IHlldCByZWNlaXZlZCwgd2Fp dCBmb3IgaXQgKi8KPiA+ICsJaWYgKCEoc3RhdHVzICYgTldMX0RTSV9SWF9QS1RfUEFZTE9BRF9E QVRBX1JDVkQpKQo+ID4gKwkJcmV0dXJuIGZhbHNlOwo+ID4gKwo+ID4gKwkvKiBSZWFkIHRoZSBS WCBwYXlsb2FkICovCj4gPiArCXdoaWxlICh3b3JkX2NvdW50ID49IDQpIHsKPiA+ICsJCXZhbCA9 IG53bF9kc2lfcmVhZChkc2ksIE5XTF9EU0lfUlhfUEFZTE9BRCk7Cj4gPiArCQlwYXlsb2FkWzBd ID0gKHZhbCA+PiAwKSAmIDB4ZmY7Cj4gPiArCQlwYXlsb2FkWzFdID0gKHZhbCA+PiA4KSAmIDB4 ZmY7Cj4gPiArCQlwYXlsb2FkWzJdID0gKHZhbCA+PiAxNikgJiAweGZmOwo+ID4gKwkJcGF5bG9h ZFszXSA9ICh2YWwgPj4gMjQpICYgMHhmZjsKPiA+ICsJCXBheWxvYWQgKz0gNDsKPiA+ICsJCXhm ZXItPnJ4X2xlbiArPSA0Owo+ID4gKwkJd29yZF9jb3VudCAtPSA0Owo+ID4gKwl9Cj4gPiArCj4g PiArCWlmICh3b3JkX2NvdW50ID4gMCkgewo+ID4gKwkJdmFsID0gbndsX2RzaV9yZWFkKGRzaSwg TldMX0RTSV9SWF9QQVlMT0FEKTsKPiA+ICsJCXN3aXRjaCAod29yZF9jb3VudCkgewo+ID4gKwkJ Y2FzZSAzOgo+ID4gKwkJCXBheWxvYWRbMl0gPSAodmFsID4+IDE2KSAmIDB4ZmY7Cj4gPiArCQkJ Kyt4ZmVyLT5yeF9sZW47Cj4gPiArCQkJLyogRmFsbCB0aHJvdWdoICovCj4gPiArCQljYXNlIDI6 Cj4gPiArCQkJcGF5bG9hZFsxXSA9ICh2YWwgPj4gOCkgJiAweGZmOwo+ID4gKwkJCSsreGZlci0+ cnhfbGVuOwo+ID4gKwkJCS8qIEZhbGwgdGhyb3VnaCAqLwo+ID4gKwkJY2FzZSAxOgo+ID4gKwkJ CXBheWxvYWRbMF0gPSAodmFsID4+IDApICYgMHhmZjsKPiA+ICsJCQkrK3hmZXItPnJ4X2xlbjsK PiA+ICsJCQlicmVhazsKPiA+ICsJCX0KPiA+ICsJfQo+ID4gKwo+ID4gKwl4ZmVyLT5zdGF0dXMg PSB4ZmVyLT5yeF9sZW47Cj4gPiArCj4gPiArCXJldHVybiB0cnVlOwo+ID4gK30KPiA+ICsKPiA+ ICtzdGF0aWMgdm9pZCBud2xfZHNpX2ZpbmlzaF90cmFuc21pc3Npb24oc3RydWN0IG53bF9kc2kg KmRzaSwgdTMyIHN0YXR1cykKPiA+ICt7Cj4gPiArCXN0cnVjdCBud2xfZHNpX3RyYW5zZmVyICp4 ZmVyID0gZHNpLT54ZmVyOwo+ID4gKwlib29sIGVuZF9wYWNrZXQgPSBmYWxzZTsKPiA+ICsKPiA+ ICsJaWYgKCF4ZmVyKQo+ID4gKwkJcmV0dXJuOwo+ID4gKwo+ID4gKwlpZiAoeGZlci0+ZGlyZWN0 aW9uID09IERTSV9QQUNLRVRfU0VORCAmJgo+ID4gKwkgICAgc3RhdHVzICYgTldMX0RTSV9UWF9Q S1RfRE9ORSkgewo+ID4gKwkJeGZlci0+c3RhdHVzID0geGZlci0+dHhfbGVuOwo+ID4gKwkJZW5k X3BhY2tldCA9IHRydWU7Cj4gPiArCX0gZWxzZSBpZiAoc3RhdHVzICYgTldMX0RTSV9EUEhZX0RJ UkVDVElPTiAmJgo+ID4gKwkJICAgKChzdGF0dXMgJiAoTldMX0RTSV9SWF9QS1RfSERSX1JDVkQg fAo+ID4gKwkJCSAgICAgICBOV0xfRFNJX1JYX1BLVF9QQVlMT0FEX0RBVEFfUkNWRCkpKSkgewo+ ID4gKwkJZW5kX3BhY2tldCA9IG53bF9kc2lfcmVhZF9wYWNrZXQoZHNpLCBzdGF0dXMpOwo+ID4g Kwl9Cj4gPiArCj4gPiArCWlmIChlbmRfcGFja2V0KQo+ID4gKwkJY29tcGxldGUoJnhmZXItPmNv bXBsZXRlZCk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIG53bF9kc2lfYmVnaW5fdHJh bnNtaXNzaW9uKHN0cnVjdCBud2xfZHNpICpkc2kpCj4gPiArewo+ID4gKwlzdHJ1Y3QgbndsX2Rz aV90cmFuc2ZlciAqeGZlciA9IGRzaS0+eGZlcjsKPiA+ICsJc3RydWN0IG1pcGlfZHNpX3BhY2tl dCAqcGt0ID0gJnhmZXItPnBhY2tldDsKPiA+ICsJY29uc3QgdTggKnBheWxvYWQ7Cj4gPiArCXNp emVfdCBsZW5ndGg7Cj4gPiArCXUxNiB3b3JkX2NvdW50Owo+ID4gKwl1OCBoc19tb2RlOwo+ID4g Kwl1MzIgdmFsOwo+ID4gKwl1MzIgaHNfd29ya2Fyb3VuZCA9IDA7Cj4gPiArCj4gPiArCS8qIFNl bmQgdGhlIHBheWxvYWQsIGlmIGFueSAqLwo+ID4gKwlsZW5ndGggPSBwa3QtPnBheWxvYWRfbGVu Z3RoOwo+ID4gKwlwYXlsb2FkID0gcGt0LT5wYXlsb2FkOwo+ID4gKwo+ID4gKwl3aGlsZSAobGVu Z3RoID49IDQpIHsKPiA+ICsJCXZhbCA9ICoodTMyICopcGF5bG9hZDsKPiA+ICsJCWhzX3dvcmth cm91bmQgfD0gISh2YWwgJiAweEZGRkYwMCk7Cj4gPiArCQlud2xfZHNpX3dyaXRlKGRzaSwgTldM X0RTSV9UWF9QQVlMT0FELCB2YWwpOwo+ID4gKwkJcGF5bG9hZCArPSA0Owo+ID4gKwkJbGVuZ3Ro IC09IDQ7Cj4gPiArCX0KPiA+ICsJLyogU2VuZCB0aGUgcmVzdCBvZiB0aGUgcGF5bG9hZCAqLwo+ ID4gKwl2YWwgPSAwOwo+ID4gKwlzd2l0Y2ggKGxlbmd0aCkgewo+ID4gKwljYXNlIDM6Cj4gPiAr CQl2YWwgfD0gcGF5bG9hZFsyXSA8PCAxNjsKPiA+ICsJCS8qIEZhbGwgdGhyb3VnaCAqLwo+ID4g KwljYXNlIDI6Cj4gPiArCQl2YWwgfD0gcGF5bG9hZFsxXSA8PCA4Owo+ID4gKwkJaHNfd29ya2Fy b3VuZCB8PSAhKHZhbCAmIDB4RkZGRjAwKTsKPiA+ICsJCS8qIEZhbGwgdGhyb3VnaCAqLwo+ID4g KwljYXNlIDE6Cj4gPiArCQl2YWwgfD0gcGF5bG9hZFswXTsKPiA+ICsJCW53bF9kc2lfd3JpdGUo ZHNpLCBOV0xfRFNJX1RYX1BBWUxPQUQsIHZhbCk7Cj4gPiArCQlicmVhazsKPiA+ICsJfQo+ID4g Kwl4ZmVyLT50eF9sZW4gPSBwa3QtPnBheWxvYWRfbGVuZ3RoOwo+ID4gKwo+ID4gKwkvKgo+ID4g KwkgKiBTZW5kIHRoZSBoZWFkZXIKPiA+ICsJICogaGVhZGVyWzBdID0gVmlydHVhbCBDaGFubmVs ICsgRGF0YSBUeXBlCj4gPiArCSAqIGhlYWRlclsxXSA9IFdvcmQgQ291bnQgTFNCIChMUCkgb3Ig Zmlyc3QgcGFyYW0gKFNQKQo+ID4gKwkgKiBoZWFkZXJbMl0gPSBXb3JkIENvdW50IE1TQiAoTFAp IG9yIHNlY29uZCBwYXJhbSAoU1ApCj4gPiArCSAqLwo+ID4gKwl3b3JkX2NvdW50ID0gcGt0LT5o ZWFkZXJbMV0gfCAocGt0LT5oZWFkZXJbMl0gPDwgOCk7Cj4gPiArCWlmIChoc193b3JrYXJvdW5k ICYmIChkc2ktPnF1aXJrcyAmIEUxMTQxOF9IU19NT0RFX1FVSVJLKSkgewo+ID4gKwkJRFJNX0RF Vl9ERUJVR19EUklWRVIoZHNpLT5kZXYsCj4gPiArCQkJCSAgICAgIlVzaW5nIGhzIG1vZGUgd29y a2Fyb3VuZCBmb3IgY21kIDB4JXhcbiIsCj4gPiArCQkJCSAgICAgeGZlci0+Y21kKTsKPiA+ICsJ CWhzX21vZGUgPSAxOwo+ID4gKwl9IGVsc2Ugewo+ID4gKwkJaHNfbW9kZSA9ICh4ZmVyLT5tc2ct PmZsYWdzICYgTUlQSV9EU0lfTVNHX1VTRV9MUE0pID8gMCA6IDE7Cj4gPiArCX0KPiA+ICsJdmFs ID0gTldMX0RTSV9XQyh3b3JkX2NvdW50KSB8IE5XTF9EU0lfVFhfVkMoeGZlci0+bXNnLT5jaGFu bmVsKSB8Cj4gPiArCSAgICAgIE5XTF9EU0lfVFhfRFQoeGZlci0+bXNnLT50eXBlKSB8IE5XTF9E U0lfSFNfU0VMKGhzX21vZGUpIHwKPiA+ICsJICAgICAgTldMX0RTSV9CVEFfVFgoeGZlci0+bmVl ZF9idGEpOwo+ID4gKwlud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9QS1RfQ09OVFJPTCwgdmFs KTsKPiA+ICsKPiA+ICsJLyogU2VuZCBwYWNrZXQgY29tbWFuZCAqLwo+ID4gKwlud2xfZHNpX3dy aXRlKGRzaSwgTldMX0RTSV9TRU5EX1BBQ0tFVCwgMHgxKTsKPiA+ICt9Cj4gPiArCj4gPiArc3Rh dGljIHNzaXplX3QgbndsX2RzaV9ob3N0X3RyYW5zZmVyKHN0cnVjdCBtaXBpX2RzaV9ob3N0ICpk c2lfaG9zdCwKPiA+ICsJCQkJICAgICBjb25zdCBzdHJ1Y3QgbWlwaV9kc2lfbXNnICptc2cpCj4g PiArewo+ID4gKwlzdHJ1Y3QgbndsX2RzaSAqZHNpID0gY29udGFpbmVyX29mKGRzaV9ob3N0LCBz dHJ1Y3QgbndsX2RzaSwgZHNpX2hvc3QpOwo+ID4gKwlzdHJ1Y3QgbndsX2RzaV90cmFuc2ZlciB4 ZmVyOwo+ID4gKwlzc2l6ZV90IHJldCA9IDA7Cj4gPiArCj4gPiArCS8qIENyZWF0ZSBwYWNrZXQg dG8gYmUgc2VudCAqLwo+ID4gKwlkc2ktPnhmZXIgPSAmeGZlcjsKPiA+ICsJcmV0ID0gbWlwaV9k c2lfY3JlYXRlX3BhY2tldCgmeGZlci5wYWNrZXQsIG1zZyk7Cj4gPiArCWlmIChyZXQgPCAwKSB7 Cj4gPiArCQlkc2ktPnhmZXIgPSBOVUxMOwo+ID4gKwkJcmV0dXJuIHJldDsKPiA+ICsJfQo+ID4g Kwo+ID4gKwlpZiAoKG1zZy0+dHlwZSAmIE1JUElfRFNJX0dFTkVSSUNfUkVBRF9SRVFVRVNUXzBf UEFSQU0gfHwKPiA+ICsJICAgICBtc2ctPnR5cGUgJiBNSVBJX0RTSV9HRU5FUklDX1JFQURfUkVR VUVTVF8xX1BBUkFNIHx8Cj4gPiArCSAgICAgbXNnLT50eXBlICYgTUlQSV9EU0lfR0VORVJJQ19S RUFEX1JFUVVFU1RfMl9QQVJBTSB8fAo+ID4gKwkgICAgIG1zZy0+dHlwZSAmIE1JUElfRFNJX0RD U19SRUFEKSAmJgo+ID4gKwkgICAgbXNnLT5yeF9sZW4gPiAwICYmIG1zZy0+cnhfYnVmICE9IE5V TEwpCj4gPiArCQl4ZmVyLmRpcmVjdGlvbiA9IERTSV9QQUNLRVRfUkVDRUlWRTsKPiA+ICsJZWxz ZQo+ID4gKwkJeGZlci5kaXJlY3Rpb24gPSBEU0lfUEFDS0VUX1NFTkQ7Cj4gPiArCj4gPiArCXhm ZXIubmVlZF9idGEgPSAoeGZlci5kaXJlY3Rpb24gPT0gRFNJX1BBQ0tFVF9SRUNFSVZFKTsKPiA+ ICsJeGZlci5uZWVkX2J0YSB8PSAobXNnLT5mbGFncyAmIE1JUElfRFNJX01TR19SRVFfQUNLKSA/ IDEgOiAwOwo+ID4gKwl4ZmVyLm1zZyA9IG1zZzsKPiA+ICsJeGZlci5zdGF0dXMgPSAtRVRJTUVE T1VUOwo+ID4gKwl4ZmVyLnJ4X3dvcmRfY291bnQgPSAwOwo+ID4gKwl4ZmVyLnJ4X2xlbiA9IDA7 Cj4gPiArCXhmZXIuY21kID0gMHgwMDsKPiA+ICsJaWYgKG1zZy0+dHhfbGVuID4gMCkKPiA+ICsJ CXhmZXIuY21kID0gKCh1OCAqKShtc2ctPnR4X2J1ZikpWzBdOwo+ID4gKwlpbml0X2NvbXBsZXRp b24oJnhmZXIuY29tcGxldGVkKTsKPiA+ICsKPiA+ICsJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxl KGRzaS0+cnhfZXNjX2Nsayk7Cj4gPiArCWlmIChyZXQgPCAwKSB7Cj4gPiArCQlEUk1fREVWX0VS Uk9SKGRzaS0+ZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSByeF9lc2MgY2xrOiAlemRcbiIsCj4gPiAr CQkJICAgICAgcmV0KTsKPiA+ICsJCXJldHVybiByZXQ7Cj4gPiArCX0KPiA+ICsJRFJNX0RFVl9E RUJVR19EUklWRVIoZHNpLT5kZXYsICJFbmFibGVkIHJ4X2VzYyBjbGsgQCVsdSBIelxuIiwKPiA+ ICsJCQkgICAgIGNsa19nZXRfcmF0ZShkc2ktPnJ4X2VzY19jbGspKTsKPiA+ICsKPiA+ICsJLyog SW5pdGlhdGUgdGhlIERTSSBwYWNrZXQgdHJhbnNtaXNpb24gKi8KPiA+ICsJbndsX2RzaV9iZWdp bl90cmFuc21pc3Npb24oZHNpKTsKPiA+ICsKPiA+ICsJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9u X3RpbWVvdXQoJnhmZXIuY29tcGxldGVkLAo+ID4gKwkJCQkJIE5XTF9EU0lfTUlQSV9GSUZPX1RJ TUVPVVQpKSB7Cj4gPiArCQlEUk1fREVWX0VSUk9SKGRzaV9ob3N0LT5kZXYsICJbJTAyWF0gRFNJ IHRyYW5zZmVyIHRpbWVkIG91dFxuIiwKPiA+ICsJCQkgICAgICB4ZmVyLmNtZCk7Cj4gPiArCQly ZXQgPSAtRVRJTUVET1VUOwo+ID4gKwl9IGVsc2Ugewo+ID4gKwkJcmV0ID0geGZlci5zdGF0dXM7 Cj4gPiArCX0KPiA+ICsKPiA+ICsJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+cnhfZXNjX2Ns ayk7Cj4gPiArCj4gPiArCXJldHVybiByZXQ7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBjb25z dCBzdHJ1Y3QgbWlwaV9kc2lfaG9zdF9vcHMgbndsX2RzaV9ob3N0X29wcyA9IHsKPiA+ICsJLmF0 dGFjaCA9IG53bF9kc2lfaG9zdF9hdHRhY2gsCj4gPiArCS5kZXRhY2ggPSBud2xfZHNpX2hvc3Rf ZGV0YWNoLAo+ID4gKwkudHJhbnNmZXIgPSBud2xfZHNpX2hvc3RfdHJhbnNmZXIsCj4gPiArfTsK PiA+ICsKPiA+ICtzdGF0aWMgaXJxcmV0dXJuX3QgbndsX2RzaV9pcnFfaGFuZGxlcihpbnQgaXJx LCB2b2lkICpkYXRhKQo+ID4gK3sKPiA+ICsJdTMyIGlycV9zdGF0dXM7Cj4gPiArCXN0cnVjdCBu d2xfZHNpICpkc2kgPSBkYXRhOwo+ID4gKwo+ID4gKwlpcnFfc3RhdHVzID0gbndsX2RzaV9yZWFk KGRzaSwgTldMX0RTSV9JUlFfU1RBVFVTKTsKPiA+ICsKPiA+ICsJaWYgKGlycV9zdGF0dXMgJiBO V0xfRFNJX1RYX0ZJRk9fT1ZGTFcpCj4gPiArCQlEUk1fREVWX0VSUk9SX1JBVEVMSU1JVEVEKGRz aS0+ZGV2LCAidHggZmlmbyBvdmVyZmxvd1xuIik7Cj4gPiArCj4gPiArCWlmIChpcnFfc3RhdHVz ICYgTldMX0RTSV9IU19UWF9USU1FT1VUKQo+ID4gKwkJRFJNX0RFVl9FUlJPUl9SQVRFTElNSVRF RChkc2ktPmRldiwgIkhTIHR4IHRpbWVvdXRcbiIpOwo+ID4gKwo+ID4gKwlpZiAoaXJxX3N0YXR1 cyAmIE5XTF9EU0lfVFhfUEtUX0RPTkUgfHwKPiA+ICsJICAgIGlycV9zdGF0dXMgJiBOV0xfRFNJ X1JYX1BLVF9IRFJfUkNWRCB8fAo+ID4gKwkgICAgaXJxX3N0YXR1cyAmIE5XTF9EU0lfUlhfUEtU X1BBWUxPQURfREFUQV9SQ1ZEKQo+ID4gKwkJbndsX2RzaV9maW5pc2hfdHJhbnNtaXNzaW9uKGRz aSwgaXJxX3N0YXR1cyk7Cj4gPiArCj4gPiArCXJldHVybiBJUlFfSEFORExFRDsKPiA+ICt9Cj4g PiArCj4gPiArc3RhdGljIGludCBud2xfZHNpX2VuYWJsZShzdHJ1Y3QgbndsX2RzaSAqZHNpKQo+ ID4gK3sKPiA+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gZHNpLT5kZXY7Cj4gPiArCXVuaW9uIHBo eV9jb25maWd1cmVfb3B0cyAqcGh5X2NmZyA9ICZkc2ktPnBoeV9jZmc7Cj4gPiArCWludCByZXQ7 Cj4gPiArCj4gPiArCWlmICghZHNpLT5sYW5lcykgewo+ID4gKwkJRFJNX0RFVl9FUlJPUihkZXYs ICJOZWVkIERTSSBsYW5lczogJWRcbiIsIGRzaS0+bGFuZXMpOwo+ID4gKwkJcmV0dXJuIC1FSU5W QUw7Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0ID0gcGh5X2luaXQoZHNpLT5waHkpOwo+ID4gKwlp ZiAocmV0IDwgMCkgewo+ID4gKwkJRFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gaW5pdCBE U0kgcGh5OiAlZFxuIiwgcmV0KTsKPiA+ICsJCXJldHVybiByZXQ7Cj4gPiArCX0KPiA+ICsKPiA+ ICsJcmV0ID0gcGh5X2NvbmZpZ3VyZShkc2ktPnBoeSwgcGh5X2NmZyk7Cj4gPiArCWlmIChyZXQg PCAwKSB7Cj4gPiArCQlEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBjb25maWd1cmUgRFNJ IHBoeTogJWRcbiIsIHJldCk7Cj4gPiArCQlyZXR1cm4gcmV0Owo+ID4gKwl9Cj4gPiArCj4gPiAr CXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShkc2ktPnR4X2VzY19jbGspOwo+ID4gKwlpZiAocmV0 IDwgMCkgewo+ID4gKwkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwgIkZhaWxlZCB0byBlbmFibGUg dHhfZXNjIGNsazogJWRcbiIsCj4gPiArCQkJICAgICAgcmV0KTsKPiA+ICsJCXJldHVybiByZXQ7 Cj4gPiArCX0KPiA+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZHNpLT5kZXYsICJFbmFibGVkIHR4 X2VzYyBjbGsgQCVsdSBIelxuIiwKPiA+ICsJCQkgICAgIGNsa19nZXRfcmF0ZShkc2ktPnR4X2Vz Y19jbGspKTsKPiA+ICsKPiA+ICsJcmV0ID0gbndsX2RzaV9jb25maWdfaG9zdChkc2kpOwo+ID4g KwlpZiAocmV0IDwgMCkgewo+ID4gKwkJRFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gc2V0 IHVwIERTSTogJWQiLCByZXQpOwo+ID4gKwkJcmV0dXJuIHJldDsKPiA+ICsJfQo+ID4gKwo+ID4g KwlyZXQgPSBud2xfZHNpX2NvbmZpZ19kcGkoZHNpKTsKPiA+ICsJaWYgKHJldCA8IDApIHsKPiA+ ICsJCURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIHNldCB1cCBEUEk6ICVkIiwgcmV0KTsK PiA+ICsJCXJldHVybiByZXQ7Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0ID0gcGh5X3Bvd2VyX29u KGRzaS0+cGh5KTsKPiA+ICsJaWYgKHJldCA8IDApIHsKPiA+ICsJCURSTV9ERVZfRVJST1IoZGV2 LCAiRmFpbGVkIHRvIHBvd2VyIG9uIERQSFkgKCVkKVxuIiwgcmV0KTsKPiA+ICsJCXJldHVybiBy ZXQ7Cj4gPiArCX0KPiA+ICsKPiA+ICsJbndsX2RzaV9pbml0X2ludGVycnVwdHMoZHNpKTsKPiA+ ICsKPiA+ICsJcmV0dXJuIDA7Cj4gCj4gCj4gbm8gdW53aW5kaW5nIGluIGNhc2Ugb2YgZXJyb3IK Cm5vIGlkZWEgaG93IGkgbWlzc2VkIHRoYXQsIHRoYW5rcy4KCgo+ID4gK30KPiA+ICsKPiA+ICtz dGF0aWMgaW50IG53bF9kc2lfZGlzYWJsZShzdHJ1Y3QgbndsX2RzaSAqZHNpKQo+ID4gK3sKPiA+ ICsJc3RydWN0IGRldmljZSAqZGV2ID0gZHNpLT5kZXY7Cj4gPiArCj4gPiArCURSTV9ERVZfREVC VUdfRFJJVkVSKGRldiwgIkRpc2FibGluZyBjbG9ja3MgYW5kIHBoeVxuIik7Cj4gPiArCj4gPiAr CXBoeV9wb3dlcl9vZmYoZHNpLT5waHkpOwo+ID4gKwlwaHlfZXhpdChkc2ktPnBoeSk7Cj4gPiAr Cj4gPiArCS8qIERpc2FibGluZyB0aGUgY2xvY2sgYmVmb3JlIHRoZSBwaHkgYnJlYWtzIGVuYWJs aW5nIGRzaSBhZ2FpbiAqLwo+ID4gKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHNpLT50eF9lc2Nf Y2xrKTsKPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQg bndsX2RzaV9zZXRfcGxhdGZvcm1fY2xvY2tzKHN0cnVjdCBud2xfZHNpICpkc2ksIGJvb2wgZW5h YmxlKQo+ID4gK3sKPiA+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gZHNpLT5kZXY7Cj4gPiArCWNv bnN0IGNoYXIgKmlkOwo+ID4gKwlzdHJ1Y3QgY2xrICpjbGs7Cj4gPiArCXNpemVfdCBpOwo+ID4g Kwl1bnNpZ25lZCBsb25nIHJhdGU7Cj4gPiArCWludCByZXQsIHJlc3VsdCA9IDA7Cj4gPiArCj4g PiArCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIiVzIHBsYXRmb3JtIGNsb2Nrc1xuIiwKPiA+ ICsJCQkgICAgIGVuYWJsZSA/ICJlbmFibGluZyIgOiAiZGlzYWJsaW5nIik7Cj4gPiArCWZvciAo aSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRzaS0+cGRhdGEtPmNsa19jb25maWcpOyBpKyspIHsKPiA+ ICsJCWlmICghZHNpLT5jbGtfY29uZmlnW2ldLnByZXNlbnQpCj4gPiArCQkJY29udGludWU7Cj4g PiArCQlpZCA9IGRzaS0+Y2xrX2NvbmZpZ1tpXS5pZDsKPiA+ICsJCWNsayA9IGRzaS0+Y2xrX2Nv bmZpZ1tpXS5jbGs7Cj4gPiArCj4gPiArCQlpZiAoZW5hYmxlKSB7Cj4gPiArCQkJcmV0ID0gY2xr X3ByZXBhcmVfZW5hYmxlKGNsayk7Cj4gPiArCQkJaWYgKHJldCA8IDApIHsKPiA+ICsJCQkJRFJN X0RFVl9FUlJPUihkZXYsCj4gPiArCQkJCQkgICAgICAiRmFpbGVkIHRvIGVuYWJsZSAlcyBjbGs6 ICVkXG4iLAo+ID4gKwkJCQkJICAgICAgaWQsIHJldCk7Cj4gPiArCQkJCXJlc3VsdCA9IHJlc3Vs dCA/OiByZXQ7Cj4gPiArCQkJfQo+ID4gKwkJCXJhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKTsKPiA+ ICsJCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJFbmFibGVkICVzIGNsayBAJWx1IEh6XG4i LAo+ID4gKwkJCQkJICAgICBpZCwgcmF0ZSk7Cj4gPiArCQl9IGVsc2Ugewo+ID4gKwkJCWNsa19k aXNhYmxlX3VucHJlcGFyZShjbGspOwo+ID4gKwkJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwg IkRpc2FibGVkICVzIGNsa1xuIiwgaWQpOwo+ID4gKwkJfQo+ID4gKwl9Cj4gPiArCj4gPiArCXJl dHVybiByZXN1bHQ7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgbndsX2RzaV9wbGF0X2Vu YWJsZShzdHJ1Y3QgbndsX2RzaSAqZHNpKQo+ID4gK3sKPiA+ICsJc3RydWN0IGRldmljZSAqZGV2 ID0gZHNpLT5kZXY7Cj4gPiArCWludCByZXQ7Cj4gPiArCj4gPiArCWlmIChkc2ktPnBkYXRhLT5z ZWxlY3RfaW5wdXQpCj4gPiArCQlkc2ktPnBkYXRhLT5zZWxlY3RfaW5wdXQoZHNpKTsKPiA+ICsK PiA+ICsJcmV0ID0gbndsX2RzaV9zZXRfcGxhdGZvcm1fY2xvY2tzKGRzaSwgdHJ1ZSk7Cj4gPiAr CWlmIChyZXQgPCAwKQo+ID4gKwkJcmV0dXJuIHJldDsKPiA+ICsKPiA+ICsJcmV0ID0gZHNpLT5w ZGF0YS0+cG93ZXJvbihkc2kpOwo+ID4gKwlpZiAocmV0IDwgMCkKPiA+ICsJCURSTV9ERVZfRVJS T1IoZGV2LCAiRmFpbGVkIHRvIHBvd2VyIG9uIERTSTogJWRcbiIsIHJldCk7Cj4gPiArCXJldHVy biByZXQ7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIG53bF9kc2lfcGxhdF9kaXNhYmxl KHN0cnVjdCBud2xfZHNpICpkc2kpCj4gPiArewo+ID4gKwlkc2ktPnBkYXRhLT5wb3dlcm9mZihk c2kpOwo+ID4gKwlud2xfZHNpX3NldF9wbGF0Zm9ybV9jbG9ja3MoZHNpLCBmYWxzZSk7Cj4gPiAr CWlmIChkc2ktPnBkYXRhLT5kZXNlbGVjdF9pbnB1dCkKPiA+ICsJCWRzaS0+cGRhdGEtPmRlc2Vs ZWN0X2lucHV0KGRzaSk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIG53bF9kc2lfYnJp ZGdlX2Rpc2FibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKPiA+ICt7Cj4gPiArCXN0cnVj dCBud2xfZHNpICpkc2kgPSBicmlkZ2VfdG9fZHNpKGJyaWRnZSk7Cj4gPiArCj4gPiArCW53bF9k c2lfZGlzYWJsZShkc2kpOwo+ID4gKwlud2xfZHNpX3BsYXRfZGlzYWJsZShkc2kpOwo+ID4gKwlw bV9ydW50aW1lX3B1dChkc2ktPmRldik7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgbnds X2RzaV9nZXRfZHBoeV9wYXJhbXMoc3RydWN0IG53bF9kc2kgKmRzaSwKPiA+ICsJCQkJICAgY29u c3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCj4gPiArCQkJCSAgIHVuaW9uIHBoeV9j b25maWd1cmVfb3B0cyAqcGh5X29wdHMpCj4gPiArewo+ID4gKwl1bnNpZ25lZCBsb25nIHJhdGU7 Cj4gPiArCWludCByZXQ7Cj4gPiArCj4gPiArCWlmIChkc2ktPmxhbmVzIDwgMSB8fCBkc2ktPmxh bmVzID4gNCkKPiA+ICsJCXJldHVybiAtRUlOVkFMOwo+ID4gKwo+ID4gKwkvKgo+ID4gKwkgKiBT byBmYXIgdGhlIERQSFkgc3BlYyBtaW5pbWFsIHRpbWluZ3Mgd29yayBmb3IgYm90aCBtaXhlbAo+ ID4gKwkgKiBkcGh5IGFuZCBud2wgZHNpIGhvc3QKPiA+ICsJICovCj4gPiArCXJldCA9IHBoeV9t aXBpX2RwaHlfZ2V0X2RlZmF1bHRfY29uZmlnKAo+ID4gKwkJbW9kZS0+Y3J0Y19jbG9jayAqIDEw MDAsCj4gPiArCQltaXBpX2RzaV9waXhlbF9mb3JtYXRfdG9fYnBwKGRzaS0+Zm9ybWF0KSwgZHNp LT5sYW5lcywKPiA+ICsJCSZwaHlfb3B0cy0+bWlwaV9kcGh5KTsKPiA+ICsJaWYgKHJldCA8IDAp Cj4gPiArCQlyZXR1cm4gcmV0Owo+ID4gKwo+ID4gKwlyYXRlID0gY2xrX2dldF9yYXRlKGRzaS0+ dHhfZXNjX2Nsayk7Cj4gPiArCURSTV9ERVZfREVCVUdfRFJJVkVSKGRzaS0+ZGV2LCAiTFAgY2xr IGlzIEAlbHUgSHpcbiIsIHJhdGUpOwo+ID4gKwlwaHlfb3B0cy0+bWlwaV9kcGh5LmxwX2Nsa19y YXRlID0gcmF0ZTsKPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRp YyBib29sIG53bF9kc2lfYnJpZGdlX21vZGVfZml4dXAoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRn ZSwKPiA+ICsJCQkJICAgICAgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCj4g PiArCQkJCSAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQo+ID4g K3sKPiA+ICsJLyogQXQgbGVhc3QgTENESUYgKyBOV0wgbmVlZHMgYWN0aXZlIGhpZ2ggc3luYyAq Lwo+ID4gKwlhZGp1c3RlZF9tb2RlLT5mbGFncyB8PSAoRFJNX01PREVfRkxBR19QSFNZTkMgfCBE Uk1fTU9ERV9GTEFHX1BWU1lOQyk7Cj4gPiArCWFkanVzdGVkX21vZGUtPmZsYWdzICY9IH4oRFJN X01PREVfRkxBR19OSFNZTkMgfCBEUk1fTU9ERV9GTEFHX05WU1lOQyk7Cj4gPiArCj4gPiArCXJl dHVybiB0cnVlOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgZW51bSBkcm1fbW9kZV9zdGF0dXMK PiA+ICtud2xfZHNpX2JyaWRnZV9tb2RlX3ZhbGlkKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2Us Cj4gPiArCQkJICBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKPiA+ICt7Cj4g PiArCXN0cnVjdCBud2xfZHNpICpkc2kgPSBicmlkZ2VfdG9fZHNpKGJyaWRnZSk7Cj4gPiArCWlu dCBicHAgPSBtaXBpX2RzaV9waXhlbF9mb3JtYXRfdG9fYnBwKGRzaS0+Zm9ybWF0KTsKPiA+ICsK PiA+ICsJaWYgKG1vZGUtPmNsb2NrICogYnBwID4gMTUwMDAwMDAgKiBkc2ktPmxhbmVzKQo+ID4g KwkJcmV0dXJuIE1PREVfQ0xPQ0tfSElHSDsKPiA+ICsKPiA+ICsJaWYgKG1vZGUtPmNsb2NrICog YnBwIDwgODAwMDAgKiBkc2ktPmxhbmVzKQo+ID4gKwkJcmV0dXJuIE1PREVfQ0xPQ0tfTE9XOwo+ ID4gKwo+ID4gKwlyZXR1cm4gTU9ERV9PSzsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQK PiA+ICtud2xfZHNpX2JyaWRnZV9tb2RlX3NldChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAo+ ID4gKwkJCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAo+ID4gKwkJCWNvbnN0 IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQo+ID4gK3sKPiA+ICsJc3Ry dWN0IG53bF9kc2kgKmRzaSA9IGJyaWRnZV90b19kc2koYnJpZGdlKTsKPiA+ICsJc3RydWN0IGRl dmljZSAqZGV2ID0gZHNpLT5kZXY7Cj4gPiArCXVuaW9uIHBoeV9jb25maWd1cmVfb3B0cyBuZXdf Y2ZnOwo+ID4gKwl1bnNpZ25lZCBsb25nIHBoeV9yZWZfcmF0ZTsKPiA+ICsJaW50IHJldDsKPiA+ ICsKPiA+ICsJcmV0ID0gbndsX2RzaV9nZXRfZHBoeV9wYXJhbXMoZHNpLCBhZGp1c3RlZF9tb2Rl LCAmbmV3X2NmZyk7Cj4gPiArCWlmIChyZXQgPCAwKQo+ID4gKwkJcmV0dXJuOwo+ID4gKwo+ID4g KwkvKgo+ID4gKwkgKiBJZiBocyBjbG9jayBpcyB1bmNoYW5nZWQsIHdlJ3JlIGFsbCBnb29kIC0g YWxsIHBhcmFtZXRlcnMgYXJlCj4gPiArCSAqIGRlcml2ZWQgZnJvbSBpdCBhdG0uCj4gPiArCSAq Lwo+ID4gKwlpZiAobmV3X2NmZy5taXBpX2RwaHkuaHNfY2xrX3JhdGUgPT0gZHNpLT5waHlfY2Zn Lm1pcGlfZHBoeS5oc19jbGtfcmF0ZSkKPiA+ICsJCXJldHVybjsKPiA+ICsKPiA+ICsJcGh5X3Jl Zl9yYXRlID0gY2xrX2dldF9yYXRlKGRzaS0+cGh5X3JlZl9jbGspOwo+ID4gKwlEUk1fREVWX0RF QlVHX0RSSVZFUihkZXYsICJQSFkgYXQgcmVmIHJhdGU6ICVsdVxuIiwgcGh5X3JlZl9yYXRlKTsK PiA+ICsJLyogU2F2ZSB0aGUgbmV3IGRlc2lyZWQgcGh5IGNvbmZpZyAqLwo+ID4gKwltZW1jcHko JmRzaS0+cGh5X2NmZywgJm5ld19jZmcsIHNpemVvZihuZXdfY2ZnKSk7Cj4gPiArCj4gPiArCW1l bWNweSgmZHNpLT5tb2RlLCBhZGp1c3RlZF9tb2RlLCBzaXplb2YoZHNpLT5tb2RlKSk7Cj4gPiAr CWRybV9tb2RlX2RlYnVnX3ByaW50bW9kZWxpbmUoYWRqdXN0ZWRfbW9kZSk7Cj4gPiArfQo+ID4g Kwo+ID4gK3N0YXRpYyB2b2lkIG53bF9kc2lfYnJpZGdlX3ByZV9lbmFibGUoc3RydWN0IGRybV9i cmlkZ2UgKmJyaWRnZSkKPiA+ICt7Cj4gPiArCXN0cnVjdCBud2xfZHNpICpkc2kgPSBicmlkZ2Vf dG9fZHNpKGJyaWRnZSk7Cj4gPiArCj4gPiArCXBtX3J1bnRpbWVfZ2V0X3N5bmMoZHNpLT5kZXYp Owo+ID4gKwlud2xfZHNpX3BsYXRfZW5hYmxlKGRzaSk7Cj4gPiArCW53bF9kc2lfZW5hYmxlKGRz aSk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgbndsX2RzaV9icmlkZ2VfYXR0YWNoKHN0 cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCj4gPiArewo+ID4gKwlzdHJ1Y3QgbndsX2RzaSAqZHNp ID0gYnJpZGdlLT5kcml2ZXJfcHJpdmF0ZTsKPiAKPiAKPiBQbGVhc2UgdXNlIGNvbnRhaW5lcl9v ZiBoZXJlLCBkcml2ZXJfcHJpdmF0ZSBzaG91bGRuJ3QgYmUgdXNlZCBpbgo+IGVtYmVkZWQgYnJp ZGdlcy4KCkRvbmUuCgo+IAo+IAo+ID4gKwo+ID4gKwlyZXR1cm4gZHJtX2JyaWRnZV9hdHRhY2go YnJpZGdlLT5lbmNvZGVyLCBkc2ktPnBhbmVsX2JyaWRnZSwgYnJpZGdlKTsKPiA+ICt9Cj4gPiAr Cj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fYnJpZGdlX2Z1bmNzIG53bF9kc2lfYnJpZGdl X2Z1bmNzID0gewo+ID4gKwkucHJlX2VuYWJsZSA9IG53bF9kc2lfYnJpZGdlX3ByZV9lbmFibGUs Cj4gPiArCS5kaXNhYmxlICAgID0gbndsX2RzaV9icmlkZ2VfZGlzYWJsZSwKPiA+ICsJLm1vZGVf Zml4dXAgPSBud2xfZHNpX2JyaWRnZV9tb2RlX2ZpeHVwLAo+ID4gKwkubW9kZV9zZXQgICA9IG53 bF9kc2lfYnJpZGdlX21vZGVfc2V0LAo+ID4gKwkubW9kZV92YWxpZCA9IG53bF9kc2lfYnJpZGdl X21vZGVfdmFsaWQsCj4gPiArCS5hdHRhY2gJICAgID0gbndsX2RzaV9icmlkZ2VfYXR0YWNoLAo+ ID4gK307Cj4gPiArCj4gPiArc3RhdGljIGludCBud2xfZHNpX3BhcnNlX2R0KHN0cnVjdCBud2xf ZHNpICpkc2kpCj4gPiArewo+ID4gKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9f cGxhdGZvcm1fZGV2aWNlKGRzaS0+ZGV2KTsKPiA+ICsJc3RydWN0IGNsayAqY2xrOwo+ID4gKwlj b25zdCBjaGFyICpjbGtfaWQ7Cj4gPiArCXZvaWQgX19pb21lbSAqYmFzZTsKPiA+ICsJaW50IGks IHJldDsKPiA+ICsKPiA+ICsJZHNpLT5waHkgPSBkZXZtX3BoeV9nZXQoZHNpLT5kZXYsICJkcGh5 Iik7Cj4gPiArCWlmIChJU19FUlIoZHNpLT5waHkpKSB7Cj4gPiArCQlyZXQgPSBQVFJfRVJSKGRz aS0+cGh5KTsKPiA+ICsJCWlmIChyZXQgIT0gLUVQUk9CRV9ERUZFUikKPiA+ICsJCQlEUk1fREVW X0VSUk9SKGRzaS0+ZGV2LCAiQ291bGQgbm90IGdldCBQSFk6ICVkXG4iLCByZXQpOwo+ID4gKwkJ cmV0dXJuIHJldDsKPiA+ICsJfQo+ID4gKwo+ID4gKwkvKiBQbGF0Zm9ybSBkZXBlbmRlbnQgY2xv Y2tzICovCj4gPiArCW1lbWNweShkc2ktPmNsa19jb25maWcsIGRzaS0+cGRhdGEtPmNsa19jb25m aWcsCj4gPiArCSAgICAgICBzaXplb2YoZHNpLT5wZGF0YS0+Y2xrX2NvbmZpZykpOwo+ID4gKwo+ ID4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkc2ktPnBkYXRhLT5jbGtfY29uZmlnKTsg aSsrKSB7Cj4gPiArCQlpZiAoIWRzaS0+Y2xrX2NvbmZpZ1tpXS5wcmVzZW50KQo+ID4gKwkJCWNv bnRpbnVlOwo+ID4gKwo+ID4gKwkJY2xrX2lkID0gZHNpLT5jbGtfY29uZmlnW2ldLmlkOwo+ID4g KwkJY2xrID0gZGV2bV9jbGtfZ2V0KGRzaS0+ZGV2LCBjbGtfaWQpOwo+ID4gKwkJaWYgKElTX0VS UihjbGspKSB7Cj4gPiArCQkJcmV0ID0gUFRSX0VSUihjbGspOwo+ID4gKwkJCURSTV9ERVZfRVJS T1IoZHNpLT5kZXYsICJGYWlsZWQgdG8gZ2V0ICVzIGNsb2NrOiAlZFxuIiwKPiA+ICsJCQkJICAg ICAgY2xrX2lkLCByZXQpOwo+ID4gKwkJCXJldHVybiByZXQ7Cj4gPiArCQl9Cj4gPiArCQlEUk1f REVWX0RFQlVHX0RSSVZFUihkc2ktPmRldiwgIlNldHVwIGNsayAlcyAocmF0ZTogJWx1KVxuIiwK PiA+ICsJCQkJICAgICBjbGtfaWQsIGNsa19nZXRfcmF0ZShjbGspKTsKPiA+ICsJCWRzaS0+Y2xr X2NvbmZpZ1tpXS5jbGsgPSBjbGs7Cj4gPiArCX0KPiAKPiAKPiBBcyBJIHNhaWQgZWFybGllciB0 aGlzIGlzIHVuZG9jdW1lbnRlZC4KPiAKPiAKPiA+ICsKPiA+ICsJLyogRFNJIGNsb2NrcyAqLwo+ ID4gKwljbGsgPSBkZXZtX2Nsa19nZXQoZHNpLT5kZXYsICJwaHlfcmVmIik7Cj4gPiArCWlmIChJ U19FUlIoY2xrKSkgewo+ID4gKwkJcmV0ID0gUFRSX0VSUihjbGspOwo+ID4gKwkJRFJNX0RFVl9F UlJPUihkc2ktPmRldiwgIkZhaWxlZCB0byBnZXQgcGh5X3JlZiBjbG9jazogJWRcbiIsCj4gPiAr CQkJICAgICAgcmV0KTsKPiA+ICsJCXJldHVybiByZXQ7Cj4gPiArCX0KPiA+ICsJZHNpLT5waHlf cmVmX2NsayA9IGNsazsKPiA+ICsKPiA+ICsJY2xrID0gZGV2bV9jbGtfZ2V0KGRzaS0+ZGV2LCAi cnhfZXNjIik7Cj4gPiArCWlmIChJU19FUlIoY2xrKSkgewo+ID4gKwkJcmV0ID0gUFRSX0VSUihj bGspOwo+ID4gKwkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwgIkZhaWxlZCB0byBnZXQgcnhfZXNj IGNsb2NrOiAlZFxuIiwKPiA+ICsJCQkgICAgICByZXQpOwo+ID4gKwkJcmV0dXJuIHJldDsKPiA+ ICsJfQo+ID4gKwlkc2ktPnJ4X2VzY19jbGsgPSBjbGs7Cj4gPiArCj4gPiArCWNsayA9IGRldm1f Y2xrX2dldChkc2ktPmRldiwgInR4X2VzYyIpOwo+ID4gKwlpZiAoSVNfRVJSKGNsaykpIHsKPiA+ ICsJCXJldCA9IFBUUl9FUlIoY2xrKTsKPiA+ICsJCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJG YWlsZWQgdG8gZ2V0IHR4X2VzYyBjbG9jazogJWRcbiIsCj4gPiArCQkJICAgICAgcmV0KTsKPiA+ ICsJCXJldHVybiByZXQ7Cj4gPiArCX0KPiA+ICsJZHNpLT50eF9lc2NfY2xrID0gY2xrOwo+ID4g Kwo+ID4gKwlkc2ktPm11eCA9IGRldm1fbXV4X2NvbnRyb2xfZ2V0KGRzaS0+ZGV2LCBOVUxMKTsK PiA+ICsJaWYgKElTX0VSUihkc2ktPm11eCkpIHsKPiA+ICsJCXJldCA9IFBUUl9FUlIoZHNpLT5t dXgpOwo+ID4gKwkJaWYgKHJldCAhPSAtRVBST0JFX0RFRkVSKQo+ID4gKwkJCURSTV9ERVZfRVJS T1IoZHNpLT5kZXYsICJGYWlsZWQgdG8gZ2V0IG11eDogJWRcbiIsIHJldCk7Cj4gPiArCQlyZXR1 cm4gcmV0Owo+ID4gKwl9Cj4gPiArCj4gPiArCWJhc2UgPSBkZXZtX3BsYXRmb3JtX2lvcmVtYXBf cmVzb3VyY2UocGRldiwgMCk7Cj4gPiArCWlmIChJU19FUlIoYmFzZSkpCj4gPiArCQlyZXR1cm4g UFRSX0VSUihiYXNlKTsKPiA+ICsKPiA+ICsJZHNpLT5yZWdtYXAgPQo+ID4gKwkJZGV2bV9yZWdt YXBfaW5pdF9tbWlvKGRzaS0+ZGV2LCBiYXNlLCAmbndsX2RzaV9yZWdtYXBfY29uZmlnKTsKPiA+ ICsJaWYgKElTX0VSUihkc2ktPnJlZ21hcCkpIHsKPiA+ICsJCXJldCA9IFBUUl9FUlIoZHNpLT5y ZWdtYXApOwo+ID4gKwkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwgIkZhaWxlZCB0byBjcmVhdGUg TldMIERTSSByZWdtYXA6ICVkXG4iLAo+ID4gKwkJCSAgICAgIHJldCk7Cj4gPiArCQlyZXR1cm4g cmV0Owo+ID4gKwl9Cj4gPiArCj4gPiArCWRzaS0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2 LCAwKTsKPiA+ICsJaWYgKGRzaS0+aXJxIDwgMCkgewo+ID4gKwkJRFJNX0RFVl9FUlJPUihkc2kt PmRldiwgIkZhaWxlZCB0byBnZXQgZGV2aWNlIElSUTogJWRcbiIsCj4gPiArCQkJICAgICAgZHNp LT5pcnEpOwo+ID4gKwkJcmV0dXJuIGRzaS0+aXJxOwo+ID4gKwl9Cj4gPiArCj4gPiArCWRzaS0+ cnN0YyA9IGRldm1fcmVzZXRfY29udHJvbF9hcnJheV9nZXQoZHNpLT5kZXYsIGZhbHNlLCB0cnVl KTsKPiA+ICsJaWYgKElTX0VSUihkc2ktPnJzdGMpKSB7Cj4gPiArCQlEUk1fREVWX0VSUk9SKGRz aS0+ZGV2LCAiRmFpbGVkIHRvIGdldCByZXNldHM6ICVsZFxuIiwKPiA+ICsJCQkgICAgICBQVFJf RVJSKGRzaS0+cnN0YykpOwo+ID4gKwkJcmV0dXJuIFBUUl9FUlIoZHNpLT5yc3RjKTsKPiA+ICsJ fQo+IAo+IAo+IFlvdSBzaG91bGQgbm90IGVycm9yIGxvZyBpbiBjYXNlIG9mIEVQUk9CRV9ERUZF Ui4KCkFkZGVkIGEgY2hlY2suCgo+IAo+IAo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4g PiArCj4gPiArc3RhdGljIGludCBpbXg4bXFfZHNpX3NlbGVjdF9pbnB1dChzdHJ1Y3QgbndsX2Rz aSAqZHNpKQo+ID4gK3sKPiA+ICsJc3RydWN0IGRldmljZV9ub2RlICpyZW1vdGU7Cj4gPiArCXUz MiB1c2VfZGNzcyA9IDE7Cj4gPiArCWludCByZXQ7Cj4gPiArCj4gPiArCXJlbW90ZSA9IG9mX2dy YXBoX2dldF9yZW1vdGVfbm9kZShkc2ktPmRldi0+b2Zfbm9kZSwgMCwgMCk7Cj4gPiArCWlmIChz dHJjbXAocmVtb3RlLT5uYW1lLCAibGNkaWYiKSA9PSAwKQo+ID4gKwkJdXNlX2Rjc3MgPSAwOwo+ IAo+IAo+IENoZWNraW5nIG5hbWUgb2YgcmVtb3RlIG5vdGUgZG9lcyBub3QgbG9vayBjb3JyZWN0 LCB5b3Ugc2hvdWxkIGNoZWNrCj4gb25seSBwcm9wcyBmcm9tIHlvdXIgbm9kZS4KPiAKPiBJZiB0 aGUgaXAgaGFzIHNlcGFyYXRlIGxpbmVzIGZvciBEQ1NTIGFuZCBMQ0RJRiB5b3Ugc2hvdWxkIGRp c3Rpbmd1aXNoCj4gYnkgcG9ydCBudW1iZXIuIElmIHRoZXkgYXJlIHNoYXJlZAoKSSBjaGFuZ2Vk IGl0IHRvIGJlIGJhc2VkIG9uIGVuZHBvaW50LiBIb3BlIGl0IG1ha2VzIHNlbnNlIG5vdy4KCkNo ZWVycyBhbmQgdGhhbmtzIGFnYWluIGZvciB5b3VyIHJldmlldywKIC0tIEd1aWRvCgoKPiAKPiB5 b3UgY2FuIHVzZSBlbmRwb2ludCBudW1iZXIgdG8gc3BlY2lmeSBEQ1NTIG9yIExDRElGLCBpbiBi b3RoIGNhc2VzCj4gYmluZGluZ3Mgc2hvdWxkIGJlIGFkanVzdGVkLgo+IAo+IAo+IFJlZ2FyZHMK PiAKPiBBbmRyemVqCj4gCj4gCj4gPiArCj4gPiArCURSTV9ERVZfSU5GTyhkc2ktPmRldiwgIlVz aW5nICVzIGFzIGlucHV0IHNvdXJjZVxuIiwKPiA+ICsJCSAgICAgKHVzZV9kY3NzKSA/ICJEQ1NT IiA6ICJMQ0RJRiIpOwo+ID4gKwo+ID4gKwlyZXQgPSBtdXhfY29udHJvbF90cnlfc2VsZWN0KGRz aS0+bXV4LCB1c2VfZGNzcyk7Cj4gPiArCWlmIChyZXQgPCAwKQo+ID4gKwkJRFJNX0RFVl9FUlJP Uihkc2ktPmRldiwgIkZhaWxlZCB0byBzZWxlY3QgaW5wdXQ6ICVkXG4iLCByZXQpOwo+ID4gKwo+ ID4gKwlvZl9ub2RlX3B1dChyZW1vdGUpOwo+ID4gKwlyZXR1cm4gcmV0Owo+ID4gK30KPiA+ICsK PiA+ICsKPiA+ICtzdGF0aWMgaW50IGlteDhtcV9kc2lfZGVzZWxlY3RfaW5wdXQoc3RydWN0IG53 bF9kc2kgKmRzaSkKPiA+ICt7Cj4gPiArCWludCByZXQ7Cj4gPiArCj4gPiArCXJldCA9IG11eF9j b250cm9sX2Rlc2VsZWN0KGRzaS0+bXV4KTsKPiA+ICsJaWYgKHJldCA8IDApCj4gPiArCQlEUk1f REVWX0VSUk9SKGRzaS0+ZGV2LCAiRmFpbGVkIHRvIGRlc2VsZWN0IGlucHV0OiAlZFxuIiwgcmV0 KTsKPiA+ICsKPiA+ICsJcmV0dXJuIHJldDsKPiA+ICt9Cj4gPiArCj4gPiArCj4gPiArc3RhdGlj IGludCBpbXg4bXFfZHNpX3Bvd2Vyb24oc3RydWN0IG53bF9kc2kgKmRzaSkKPiA+ICt7Cj4gPiAr CWludCByZXQgPSAwOwo+ID4gKwo+ID4gKwkvKiBvdGhlcndpc2UgdGhlIGRpc3BsYXkgc3RheXMg YmxhbmsgKi8KPiA+ICsJdXNsZWVwX3JhbmdlKDIwMCwgMzAwKTsKPiA+ICsKPiA+ICsJaWYgKGRz aS0+cnN0YykKPiA+ICsJCXJldCA9IHJlc2V0X2NvbnRyb2xfZGVhc3NlcnQoZHNpLT5yc3RjKTsK PiA+ICsKPiA+ICsJcmV0dXJuIHJldDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBpbXg4 bXFfZHNpX3Bvd2Vyb2ZmKHN0cnVjdCBud2xfZHNpICpkc2kpCj4gPiArewo+ID4gKwlpbnQgcmV0 ID0gMDsKPiA+ICsKPiA+ICsJaWYgKGRzaS0+cXVpcmtzICYgU1JDX1JFU0VUX1FVSVJLKQo+ID4g KwkJcmV0dXJuIDA7Cj4gPiArCj4gPiArCWlmIChkc2ktPnJzdGMpCj4gPiArCQlyZXQgPSByZXNl dF9jb250cm9sX2Fzc2VydChkc2ktPnJzdGMpOwo+ID4gKwlyZXR1cm4gcmV0Owo+ID4gK30KPiA+ ICsKPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9icmlkZ2VfdGltaW5ncyBud2xfZHNpX3Rp bWluZ3MgPSB7Cj4gPiArCS5pbnB1dF9idXNfZmxhZ3MgPSBEUk1fQlVTX0ZMQUdfREVfTE9XLAo+ ID4gK307Cj4gPiArCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBud2xfZHNpX3BsYXRmb3JtX2Rh dGEgaW14OG1xX2RldiA9IHsKPiA+ICsJLnBvd2Vyb24gPSAmaW14OG1xX2RzaV9wb3dlcm9uLAo+ ID4gKwkucG93ZXJvZmYgPSAmaW14OG1xX2RzaV9wb3dlcm9mZiwKPiA+ICsJLnNlbGVjdF9pbnB1 dCA9ICZpbXg4bXFfZHNpX3NlbGVjdF9pbnB1dCwKPiA+ICsJLmRlc2VsZWN0X2lucHV0ID0gJmlt eDhtcV9kc2lfZGVzZWxlY3RfaW5wdXQsCj4gPiArCS5jbGtfY29uZmlnID0gewo+ID4gKwkJeyAu aWQgPSBOV0xfRFNJX0NMS19DT1JFLCAucHJlc2VudCA9IHRydWUgfSwKPiA+ICsJfSwKPiA+ICt9 Owo+ID4gKwo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG53bF9kc2lfZHRf aWRzW10gPSB7Cj4gPiArCXsgLmNvbXBhdGlibGUgPSAiZnNsLGlteDhtcS1ud2wtZHNpIiwgLmRh dGEgPSAmaW14OG1xX2RldiwgfSwKPiA+ICsJeyAvKiBzZW50aW5lbCAqLyB9Cj4gPiArfTsKPiA+ ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBud2xfZHNpX2R0X2lkcyk7Cj4gPiArCj4gPiArc3Rh dGljIGNvbnN0IHN0cnVjdCBzb2NfZGV2aWNlX2F0dHJpYnV0ZSBud2xfZHNpX3F1aXJrc19tYXRj aFtdID0gewo+ID4gKwl7IC5zb2NfaWQgPSAiaS5NWDhNUSIsIC5yZXZpc2lvbiA9ICIyLjAiLAo+ ID4gKwkgIC5kYXRhID0gKHZvaWQgKikoRTExNDE4X0hTX01PREVfUVVJUksgfCBTUkNfUkVTRVRf UVVJUkspIH0sCj4gPiArCXsgLyogc2VudGluZWwuICovIH0sCj4gPiArfTsKPiA+ICsKPiA+ICtz dGF0aWMgaW50IG53bF9kc2lfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiA+ ICt7Cj4gPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7Cj4gPiArCWNvbnN0IHN0 cnVjdCBvZl9kZXZpY2VfaWQgKm9mX2lkID0gb2ZfbWF0Y2hfZGV2aWNlKG53bF9kc2lfZHRfaWRz LCBkZXYpOwo+ID4gKwljb25zdCBzdHJ1Y3QgbndsX2RzaV9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9 IG9mX2lkLT5kYXRhOwo+ID4gKwljb25zdCBzdHJ1Y3Qgc29jX2RldmljZV9hdHRyaWJ1dGUgKmF0 dHI7Cj4gPiArCXN0cnVjdCBud2xfZHNpICpkc2k7Cj4gPiArCWludCByZXQ7Cj4gPiArCj4gPiAr CWRzaSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqZHNpKSwgR0ZQX0tFUk5FTCk7Cj4gPiAr CWlmICghZHNpKQo+ID4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gPiArCj4gPiArCWRzaS0+ZGV2ID0g ZGV2Owo+ID4gKwlkc2ktPnBkYXRhID0gcGRhdGE7Cj4gPiArCj4gPiArCXJldCA9IG53bF9kc2lf cGFyc2VfZHQoZHNpKTsKPiA+ICsJaWYgKHJldCkKPiA+ICsJCXJldHVybiByZXQ7Cj4gPiArCj4g PiArCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBkc2ktPmlycSwgbndsX2RzaV9pcnFfaGFu ZGxlciwgMCwKPiA+ICsJCQkgICAgICAgZGV2X25hbWUoZGV2KSwgZHNpKTsKPiA+ICsJaWYgKHJl dCA8IDApIHsKPiA+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgSVJR ICVkOiAlZFxuIiwgZHNpLT5pcnEsCj4gPiArCQkJICAgICAgcmV0KTsKPiA+ICsJCXJldHVybiBy ZXQ7Cj4gPiArCX0KPiA+ICsKPiA+ICsJZHNpLT5kc2lfaG9zdC5vcHMgPSAmbndsX2RzaV9ob3N0 X29wczsKPiA+ICsJZHNpLT5kc2lfaG9zdC5kZXYgPSBkZXY7Cj4gPiArCXJldCA9IG1pcGlfZHNp X2hvc3RfcmVnaXN0ZXIoJmRzaS0+ZHNpX2hvc3QpOwo+ID4gKwlpZiAocmV0KSB7Cj4gPiArCQlE Uk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byByZWdpc3RlciBNSVBJIGhvc3Q6ICVkXG4iLCBy ZXQpOwo+ID4gKwkJcmV0dXJuIHJldDsKPiA+ICsJfQo+ID4gKwo+ID4gKwlhdHRyID0gc29jX2Rl dmljZV9tYXRjaChud2xfZHNpX3F1aXJrc19tYXRjaCk7Cj4gPiArCWlmIChhdHRyKQo+ID4gKwkJ ZHNpLT5xdWlya3MgPSAodWludHB0cl90KWF0dHItPmRhdGE7Cj4gPiArCj4gPiArCWRzaS0+YnJp ZGdlLmRyaXZlcl9wcml2YXRlID0gZHNpOwo+ID4gKwlkc2ktPmJyaWRnZS5mdW5jcyA9ICZud2xf ZHNpX2JyaWRnZV9mdW5jczsKPiA+ICsJZHNpLT5icmlkZ2Uub2Zfbm9kZSA9IGRldi0+b2Zfbm9k ZTsKPiA+ICsJZHNpLT5icmlkZ2UudGltaW5ncyA9ICZud2xfZHNpX3RpbWluZ3M7Cj4gPiArCj4g PiArCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGRzaSk7Cj4gPiArCXBtX3J1bnRpbWVfZW5hYmxlKGRl dik7Cj4gPiArCXJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IG53bF9kc2lf cmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gPiArewo+ID4gKwlzdHJ1Y3Qg bndsX2RzaSAqZHNpID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Cj4gPiArCj4gPiArCW1p cGlfZHNpX2hvc3RfdW5yZWdpc3RlcigmZHNpLT5kc2lfaG9zdCk7Cj4gPiArCXBtX3J1bnRpbWVf ZGlzYWJsZSgmcGRldi0+ZGV2KTsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0 YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG53bF9kc2lfZHJpdmVyID0gewo+ID4gKwkucHJv YmUJCT0gbndsX2RzaV9wcm9iZSwKPiA+ICsJLnJlbW92ZQkJPSBud2xfZHNpX3JlbW92ZSwKPiA+ ICsJLmRyaXZlcgkJPSB7Cj4gPiArCQkub2ZfbWF0Y2hfdGFibGUgPSBud2xfZHNpX2R0X2lkcywK PiA+ICsJCS5uYW1lCT0gRFJWX05BTUUsCj4gPiArCX0sCj4gPiArfTsKPiA+ICsKPiA+ICttb2R1 bGVfcGxhdGZvcm1fZHJpdmVyKG53bF9kc2lfZHJpdmVyKTsKPiA+ICsKPiA+ICtNT0RVTEVfQVVU SE9SKCJOWFAgU2VtaWNvbmR1Y3RvciIpOwo+ID4gK01PRFVMRV9BVVRIT1IoIlB1cmlzbSBTUEMi KTsKPiA+ICtNT0RVTEVfREVTQ1JJUFRJT04oIk5vcnRod2VzdCBMb2dpYyBNSVBJLURTSSBkcml2 ZXIiKTsKPiA+ICtNT0RVTEVfTElDRU5TRSgiR1BMIik7IC8qIEdQTHYyIG9yIGxhdGVyICovCj4g PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9ud2wtZHNpLmggYi9kcml2ZXJz L2dwdS9kcm0vYnJpZGdlL253bC1kc2kuaAo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+IGlu ZGV4IDAwMDAwMDAwMDAwMC4uYTI0N2E4YTExYzdjCj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL253bC1kc2kuaAo+ID4gQEAgLTAsMCArMSwxNDQgQEAK PiA+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsgKi8KPiA+ICsvKgo+ID4g KyAqIE5XTCBNSVBJIERTSSBob3N0IGRyaXZlcgo+ID4gKyAqCj4gPiArICogQ29weXJpZ2h0IChD KSAyMDE3IE5YUAo+ID4gKyAqIENvcHlyaWdodCAoQykgMjAxOSBQdXJpc20gU1BDCj4gPiArICov Cj4gPiArI2lmbmRlZiBfX05XTF9EU0lfSF9fCj4gPiArI2RlZmluZSBfX05XTF9EU0lfSF9fCj4g PiArCj4gPiArLyogRFNJIEhPU1QgcmVnaXN0ZXJzICovCj4gPiArI2RlZmluZSBOV0xfRFNJX0NG R19OVU1fTEFORVMJCQkweDAKPiA+ICsjZGVmaW5lIE5XTF9EU0lfQ0ZHX05PTkNPTlRJTlVPVVNf Q0xLCQkweDQKPiA+ICsjZGVmaW5lIE5XTF9EU0lfQ0ZHX1RfUFJFCQkJMHg4Cj4gPiArI2RlZmlu ZSBOV0xfRFNJX0NGR19UX1BPU1QJCQkweGMKPiA+ICsjZGVmaW5lIE5XTF9EU0lfQ0ZHX1RYX0dB UAkJCTB4MTAKPiA+ICsjZGVmaW5lIE5XTF9EU0lfQ0ZHX0FVVE9JTlNFUlRfRU9UUAkJMHgxNAo+ ID4gKyNkZWZpbmUgTldMX0RTSV9DRkdfRVhUUkFfQ01EU19BRlRFUl9FT1RQCTB4MTgKPiA+ICsj ZGVmaW5lIE5XTF9EU0lfQ0ZHX0hUWF9UT19DT1VOVAkJMHgxYwo+ID4gKyNkZWZpbmUgTldMX0RT SV9DRkdfTFJYX0hfVE9fQ09VTlQJCTB4MjAKPiA+ICsjZGVmaW5lIE5XTF9EU0lfQ0ZHX0JUQV9I X1RPX0NPVU5UCQkweDI0Cj4gPiArI2RlZmluZSBOV0xfRFNJX0NGR19UV0FLRVVQCQkJMHgyOAo+ ID4gKyNkZWZpbmUgTldMX0RTSV9DRkdfU1RBVFVTX09VVAkJCTB4MmMKPiA+ICsjZGVmaW5lIE5X TF9EU0lfUlhfRVJST1JfU1RBVFVTCQkJMHgzMAo+ID4gKwo+ID4gKy8qIERTSSBEUEkgcmVnaXN0 ZXJzICovCj4gPiArI2RlZmluZSBOV0xfRFNJX1BJWEVMX1BBWUxPQURfU0laRQkJMHgyMDAKPiA+ ICsjZGVmaW5lIE5XTF9EU0lfUElYRUxfRklGT19TRU5EX0xFVkVMCQkweDIwNAo+ID4gKyNkZWZp bmUgTldMX0RTSV9JTlRFUkZBQ0VfQ09MT1JfQ09ESU5HCQkweDIwOAo+ID4gKyNkZWZpbmUgTldM X0RTSV9QSVhFTF9GT1JNQVQJCQkweDIwYwo+ID4gKyNkZWZpbmUgTldMX0RTSV9WU1lOQ19QT0xB UklUWQkJCTB4MjEwCj4gPiArI2RlZmluZSBOV0xfRFNJX1ZTWU5DX1BPTEFSSVRZX0FDVElWRV9M T1cJMAo+ID4gKyNkZWZpbmUgTldMX0RTSV9WU1lOQ19QT0xBUklUWV9BQ1RJVkVfSElHSAlCSVQo MSkKPiA+ICsKPiA+ICsjZGVmaW5lIE5XTF9EU0lfSFNZTkNfUE9MQVJJVFkJCQkweDIxNAo+ID4g KyNkZWZpbmUgTldMX0RTSV9IU1lOQ19QT0xBUklUWV9BQ1RJVkVfTE9XCTAKPiA+ICsjZGVmaW5l IE5XTF9EU0lfSFNZTkNfUE9MQVJJVFlfQUNUSVZFX0hJR0gJQklUKDEpCj4gPiArCj4gPiArI2Rl ZmluZSBOV0xfRFNJX1ZJREVPX01PREUJCQkweDIxOAo+ID4gKyNkZWZpbmUgTldMX0RTSV9IRlAJ CQkJMHgyMWMKPiA+ICsjZGVmaW5lIE5XTF9EU0lfSEJQCQkJCTB4MjIwCj4gPiArI2RlZmluZSBO V0xfRFNJX0hTQQkJCQkweDIyNAo+ID4gKyNkZWZpbmUgTldMX0RTSV9FTkFCTEVfTVVMVF9QS1RT CQkweDIyOAo+ID4gKyNkZWZpbmUgTldMX0RTSV9WQlAJCQkJMHgyMmMKPiA+ICsjZGVmaW5lIE5X TF9EU0lfVkZQCQkJCTB4MjMwCj4gPiArI2RlZmluZSBOV0xfRFNJX0JMTFBfTU9ERQkJCTB4MjM0 Cj4gPiArI2RlZmluZSBOV0xfRFNJX1VTRV9OVUxMX1BLVF9CTExQCQkweDIzOAo+ID4gKyNkZWZp bmUgTldMX0RTSV9WQUNUSVZFCQkJCTB4MjNjCj4gPiArI2RlZmluZSBOV0xfRFNJX1ZDCQkJCTB4 MjQwCj4gPiArCj4gPiArLyogRFNJIEFQQiBQS1QgY29udHJvbCAqLwo+ID4gKyNkZWZpbmUgTldM X0RTSV9UWF9QQVlMT0FECQkJMHgyODAKPiA+ICsjZGVmaW5lIE5XTF9EU0lfUEtUX0NPTlRST0wJ CQkweDI4NAo+ID4gKyNkZWZpbmUgTldMX0RTSV9TRU5EX1BBQ0tFVAkJCTB4Mjg4Cj4gPiArI2Rl ZmluZSBOV0xfRFNJX1BLVF9TVEFUVVMJCQkweDI4Ywo+ID4gKyNkZWZpbmUgTldMX0RTSV9QS1Rf RklGT19XUl9MRVZFTAkJMHgyOTAKPiA+ICsjZGVmaW5lIE5XTF9EU0lfUEtUX0ZJRk9fUkRfTEVW RUwJCTB4Mjk0Cj4gPiArI2RlZmluZSBOV0xfRFNJX1JYX1BBWUxPQUQJCQkweDI5OAo+ID4gKyNk ZWZpbmUgTldMX0RTSV9SWF9QS1RfSEVBREVSCQkJMHgyOWMKPiA+ICsKPiA+ICsvKiBEU0kgSVJR IGhhbmRsaW5nICovCj4gPiArI2RlZmluZSBOV0xfRFNJX0lSUV9TVEFUVVMJCQkweDJhMAo+ID4g KyNkZWZpbmUgTldMX0RTSV9TTV9OT1RfSURMRQkJCUJJVCgwKQo+ID4gKyNkZWZpbmUgTldMX0RT SV9UWF9QS1RfRE9ORQkJCUJJVCgxKQo+ID4gKyNkZWZpbmUgTldMX0RTSV9EUEhZX0RJUkVDVElP TgkJCUJJVCgyKQo+ID4gKyNkZWZpbmUgTldMX0RTSV9UWF9GSUZPX09WRkxXCQkJQklUKDMpCj4g PiArI2RlZmluZSBOV0xfRFNJX1RYX0ZJRk9fVURGTFcJCQlCSVQoNCkKPiA+ICsjZGVmaW5lIE5X TF9EU0lfUlhfRklGT19PVkZMVwkJCUJJVCg1KQo+ID4gKyNkZWZpbmUgTldMX0RTSV9SWF9GSUZP X1VERkxXCQkJQklUKDYpCj4gPiArI2RlZmluZSBOV0xfRFNJX1JYX1BLVF9IRFJfUkNWRAkJCUJJ VCg3KQo+ID4gKyNkZWZpbmUgTldMX0RTSV9SWF9QS1RfUEFZTE9BRF9EQVRBX1JDVkQJQklUKDgp Cj4gPiArI2RlZmluZSBOV0xfRFNJX0JUQV9USU1FT1VUCQkJQklUKDI5KQo+ID4gKyNkZWZpbmUg TldMX0RTSV9MUF9SWF9USU1FT1VUCQkJQklUKDMwKQo+ID4gKyNkZWZpbmUgTldMX0RTSV9IU19U WF9USU1FT1VUCQkJQklUKDMxKQo+ID4gKwo+ID4gKyNkZWZpbmUgTldMX0RTSV9JUlFfU1RBVFVT MgkJCTB4MmE0Cj4gPiArI2RlZmluZSBOV0xfRFNJX1NJTkdMRV9CSVRfRUNDX0VSUgkJQklUKDAp Cj4gPiArI2RlZmluZSBOV0xfRFNJX01VTFRJX0JJVF9FQ0NfRVJSCQlCSVQoMSkKPiA+ICsjZGVm aW5lIE5XTF9EU0lfQ1JDX0VSUgkJCQlCSVQoMikKPiA+ICsKPiA+ICsjZGVmaW5lIE5XTF9EU0lf SVJRX01BU0sJCQkweDJhOAo+ID4gKyNkZWZpbmUgTldMX0RTSV9TTV9OT1RfSURMRV9NQVNLCQlC SVQoMCkKPiA+ICsjZGVmaW5lIE5XTF9EU0lfVFhfUEtUX0RPTkVfTUFTSwkJQklUKDEpCj4gPiAr I2RlZmluZSBOV0xfRFNJX0RQSFlfRElSRUNUSU9OX01BU0sJCUJJVCgyKQo+ID4gKyNkZWZpbmUg TldMX0RTSV9UWF9GSUZPX09WRkxXX01BU0sJCUJJVCgzKQo+ID4gKyNkZWZpbmUgTldMX0RTSV9U WF9GSUZPX1VERkxXX01BU0sJCUJJVCg0KQo+ID4gKyNkZWZpbmUgTldMX0RTSV9SWF9GSUZPX09W RkxXX01BU0sJCUJJVCg1KQo+ID4gKyNkZWZpbmUgTldMX0RTSV9SWF9GSUZPX1VERkxXX01BU0sJ CUJJVCg2KQo+ID4gKyNkZWZpbmUgTldMX0RTSV9SWF9QS1RfSERSX1JDVkRfTUFTSwkJQklUKDcp Cj4gPiArI2RlZmluZSBOV0xfRFNJX1JYX1BLVF9QQVlMT0FEX0RBVEFfUkNWRF9NQVNLCUJJVCg4 KQo+ID4gKyNkZWZpbmUgTldMX0RTSV9CVEFfVElNRU9VVF9NQVNLCQlCSVQoMjkpCj4gPiArI2Rl ZmluZSBOV0xfRFNJX0xQX1JYX1RJTUVPVVRfTUFTSwkJQklUKDMwKQo+ID4gKyNkZWZpbmUgTldM X0RTSV9IU19UWF9USU1FT1VUX01BU0sJCUJJVCgzMSkKPiA+ICsKPiA+ICsjZGVmaW5lIE5XTF9E U0lfSVJRX01BU0syCQkJMHgyYWMKPiA+ICsjZGVmaW5lIE5XTF9EU0lfU0lOR0xFX0JJVF9FQ0Nf RVJSX01BU0sJCUJJVCgwKQo+ID4gKyNkZWZpbmUgTldMX0RTSV9NVUxUSV9CSVRfRUNDX0VSUl9N QVNLCQlCSVQoMSkKPiA+ICsjZGVmaW5lIE5XTF9EU0lfQ1JDX0VSUl9NQVNLCQkJQklUKDIpCj4g PiArCj4gPiArLyoKPiA+ICsgKiBQS1RfQ09OVFJPTCBmb3JtYXQ6Cj4gPiArICogWzE1OiAwXSAt IHdvcmQgY291bnQKPiA+ICsgKiBbMTc6MTZdIC0gdmlydHVhbCBjaGFubmVsCj4gPiArICogWzIz OjE4XSAtIGRhdGEgdHlwZQo+ID4gKyAqIFsyNF0JICAgLSBMUCBvciBIUyBzZWxlY3QgKDAgLSBM UCwgMSAtIEhTKQo+ID4gKyAqIFsyNV0JICAgLSBwZXJmb3JtIEJUQSBhZnRlciBwYWNrZXQgaXMg c2VudAo+ID4gKyAqIFsyNl0JICAgLSBwZXJmb3JtIEJUQSBvbmx5LCBubyBwYWNrZXQgdHgKPiA+ ICsgKi8KPiA+ICsjZGVmaW5lIE5XTF9EU0lfV0MoeCkJCUZJRUxEX1BSRVAoR0VOTUFTSygxNSwg MCksICh4KSkKPiA+ICsjZGVmaW5lIE5XTF9EU0lfVFhfVkMoeCkJRklFTERfUFJFUChHRU5NQVNL KDE3LCAxNiksICh4KSkKPiA+ICsjZGVmaW5lIE5XTF9EU0lfVFhfRFQoeCkJRklFTERfUFJFUChH RU5NQVNLKDIzLCAxOCksICh4KSkKPiA+ICsjZGVmaW5lIE5XTF9EU0lfSFNfU0VMKHgpCUZJRUxE X1BSRVAoR0VOTUFTSygyNCwgMjQpLCAoeCkpCj4gPiArI2RlZmluZSBOV0xfRFNJX0JUQV9UWCh4 KQlGSUVMRF9QUkVQKEdFTk1BU0soMjUsIDI1KSwgKHgpKQo+ID4gKyNkZWZpbmUgTldMX0RTSV9C VEFfTk9fVFgoeCkJRklFTERfUFJFUChHRU5NQVNLKDI2LCAyNiksICh4KSkKPiA+ICsKPiA+ICsv Kgo+ID4gKyAqIFJYX1BLVF9IRUFERVIgZm9ybWF0Ogo+ID4gKyAqIFsxNTogMF0gLSB3b3JkIGNv dW50Cj4gPiArICogWzIxOjE2XSAtIGRhdGEgdHlwZQo+ID4gKyAqIFsyMzoyMl0gLSB2aXJ0dWFs IGNoYW5uZWwKPiA+ICsgKi8KPiA+ICsjZGVmaW5lIE5XTF9EU0lfUlhfRFQoeCkJRklFTERfR0VU KEdFTk1BU0soMjEsIDE2KSwgKHgpKQo+ID4gKyNkZWZpbmUgTldMX0RTSV9SWF9WQyh4KQlGSUVM RF9HRVQoR0VOTUFTSygyMywgMjIpLCAoeCkpCj4gPiArCj4gPiArLyogRFNJIFZpZGVvIG1vZGUg Ki8KPiA+ICsjZGVmaW5lIE5XTF9EU0lfVk1fQlVSU1RfTU9ERV9XSVRIX1NZTkNfUFVMU0VTCQkw Cj4gPiArI2RlZmluZSBOV0xfRFNJX1ZNX05PTl9CVVJTVF9NT0RFX1dJVEhfU1lOQ19FVkVOVFMJ QklUKDApCj4gPiArI2RlZmluZSBOV0xfRFNJX1ZNX0JVUlNUX01PREUJCQkJQklUKDEpCj4gPiAr Cj4gPiArLyogKiBEUEkgY29sb3IgY29kaW5nICovCj4gPiArI2RlZmluZSBOV0xfRFNJX0RQSV8x Nl9CSVRfNTY1X1BBQ0tFRAkwCj4gPiArI2RlZmluZSBOV0xfRFNJX0RQSV8xNl9CSVRfNTY1X0FM SUdORUQJMQo+ID4gKyNkZWZpbmUgTldMX0RTSV9EUElfMTZfQklUXzU2NV9TSElGVEVECTIKPiA+ ICsjZGVmaW5lIE5XTF9EU0lfRFBJXzE4X0JJVF9QQUNLRUQJMwo+ID4gKyNkZWZpbmUgTldMX0RT SV9EUElfMThfQklUX0FMSUdORUQJNAo+ID4gKyNkZWZpbmUgTldMX0RTSV9EUElfMjRfQklUCQk1 Cj4gPiArCj4gPiArLyogKiBEUEkgUGl4ZWwgZm9ybWF0ICovCj4gPiArI2RlZmluZSBOV0xfRFNJ X1BJWEVMX0ZPUk1BVF8xNiAgMAo+ID4gKyNkZWZpbmUgTldMX0RTSV9QSVhFTF9GT1JNQVRfMTgg IEJJVCgwKQo+ID4gKyNkZWZpbmUgTldMX0RTSV9QSVhFTF9GT1JNQVRfMThMIEJJVCgxKQo+ID4g KyNkZWZpbmUgTldMX0RTSV9QSVhFTF9GT1JNQVRfMjQgIChCSVQoMCkgfCBCSVQoMSkpCj4gPiAr Cj4gPiArI2VuZGlmIC8qIF9fTldMX0RTSV9IX18gKi8KPiAKPiAKPiAKPiBfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IGxpbnV4LWFybS1rZXJuZWwgbWFp bGluZyBsaXN0Cj4gbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCj4gaHR0cDov L2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCgoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJt LWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3Jn Cmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtl cm5lbAo=