From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id EDBB4EE14D3 for ; Thu, 7 Sep 2023 06:16:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=IGM0w2ik+ttkybg/qfq58Xoj+HeC/3Ie1IPGGQFOIo4=; b=gWhafVb4VM4xfm FNGNVS7eoqwDt6v2s+IjM1oZSW6L/qcbxPoPBTkb6n/FJItCQVcqtrGYcFdQ/mt4gNL8LUYuxwNmN XTKPHXPiyFfh56TBNcCHQd8Ns40ojJzI9foORK/DpGog4nBCX7R/YSR3BWs2JB+ENvvPXGog43a9k Ef6Auvx7csuAckUoowlE1otJGpGR+y3KNnb4RVphhRPYiNXf5EZ0j1U3F/+r4Pd20yYFzDwTKgXBc e0wh46S/JRHB4gN3fIAvqczeZ7Wqk6wxvdCC1YArXByqzuwJmsmhclAyFALmlqxSpZbNkS12h1n2r BtwlUSPklCn2+8e9MReA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qe8Iz-00BQ7h-0a; Thu, 07 Sep 2023 06:15:53 +0000 Received: from mx1.tq-group.com ([93.104.207.81]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qe8Iu-00BQ6m-0v; Thu, 07 Sep 2023 06:15:52 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tq-group.com; i=@tq-group.com; q=dns/txt; s=key1; t=1694067348; x=1725603348; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=eymtLk2dWyJ94pFCFNgGA5HFPwBx4B0ULtWNHREGYNY=; b=jtvfj3d0UoH0GxS+OceSW8KZoGpdGV+jY8++GvX++uSOZGxaPFgSyFB+ 0JAgU0oRkS1hI86YfyulOBhDUIZHu44EQxVOpJ25vt1wMxx9zragHZN8R eB3wg4DOaTxSIrO5WILzYmTjB53FoEQvePZDidPt80tsdBTYcV0Irzwu7 ursji+W8yPUdT84vO+/5cnMjmMsqEqMqX3ZDG0fsWwGVRvloDFna/gT/P HDO7uT3Xy5pSBDij4ybJExdJ+08gcnewN7oelSYFH0WJK6GnQMy3HXpxS 98PxQWYSv0n9ljnAZZY+IWCau8vqVl3TqrISqsBwBzGLUv+Uxxy9QnxU5 g==; X-IronPort-AV: E=Sophos;i="6.02,234,1688421600"; d="scan'208";a="32825072" Received: from vtuxmail01.tq-net.de ([10.115.0.20]) by mx1.tq-group.com with ESMTP; 07 Sep 2023 08:15:42 +0200 Received: from steina-w.localnet (steina-w.tq-net.de [10.123.53.21]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by vtuxmail01.tq-net.de (Postfix) with ESMTPSA id ED71128007F; Thu, 7 Sep 2023 08:15:41 +0200 (CEST) From: Alexander Stein To: andrzej.hajda@intel.com, neil.armstrong@linaro.org, Laurent.pinchart@ideasonboard.com, jonas@kwiboo.se, jernej.skrabec@gmail.com, airlied@gmail.com, daniel@ffwll.ch, robh+dt@kernel.org, krzysztof.kozlowski+dt@linaro.org, shawnguo@kernel.org, s.hauer@pengutronix.de, festevam@gmail.com, vkoul@kernel.org, dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-phy@lists.infradead.org, Sandor Yu Cc: kernel@pengutronix.de, linux-imx@nxp.com, Sandor.yu@nxp.com, oliver.brown@nxp.com, sam@ravnborg.org Subject: Re: [PATCH v9 6/7] phy: freescale: Add DisplayPort PHY driver for i.MX8MQ Date: Thu, 07 Sep 2023 08:15:42 +0200 Message-ID: <4858353.31r3eYUQgx@steina-w> Organization: TQ-Systems GmbH In-Reply-To: References: MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230906_231548_875567_6F3D613D X-CRM114-Status: GOOD ( 28.38 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGkgU2FuZG9yLAoKdGhhbmtzIGZvciB3b3JraW5nIG9uIHRoaXMuCgpBbSBEb25uZXJzdGFnLCA3 LiBTZXB0ZW1iZXIgMjAyMywgMDM6MDU6MzMgQ0VTVCBzY2hyaWViIFNhbmRvciBZdToKPiBBZGQg Q2FkZW5jZSBIRFAtVFggRGlzcGxheVBvcnQgUEhZIGRyaXZlciBmb3IgaS5NWDhNUQo+IAo+IENh ZGVuY2UgSERQLVRYIFBIWSBjb3VsZCBiZSBwdXQgaW4gZWl0aGVyIERQIG1vZGUgb3IKPiBIRE1J IG1vZGUgYmFzZSBvbiB0aGUgY29uZmlndXJhdGlvbiBjaG9zZW4uCj4gRGlzcGxheVBvcnQgUEhZ IG1vZGUgaXMgY29uZmlndXJhdGVkIGluIHRoZSBkcml2ZXIuCj4gCj4gU2lnbmVkLW9mZi1ieTog U2FuZG9yIFl1IDxTYW5kb3IueXVAbnhwLmNvbT4KPiAtLS0KPiAgZHJpdmVycy9waHkvZnJlZXNj YWxlL0tjb25maWcgICAgICAgICAgICAgfCAgIDkgKwo+ICBkcml2ZXJzL3BoeS9mcmVlc2NhbGUv TWFrZWZpbGUgICAgICAgICAgICB8ICAgMSArCj4gIGRyaXZlcnMvcGh5L2ZyZWVzY2FsZS9waHkt ZnNsLWlteDhtcS1kcC5jIHwgNzE0ICsrKysrKysrKysrKysrKysrKysrKysKPiAgMyBmaWxlcyBj aGFuZ2VkLCA3MjQgaW5zZXJ0aW9ucygrKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9w aHkvZnJlZXNjYWxlL3BoeS1mc2wtaW14OG1xLWRwLmMKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9waHkvZnJlZXNjYWxlL0tjb25maWcgYi9kcml2ZXJzL3BoeS9mcmVlc2NhbGUvS2NvbmZpZwo+ IGluZGV4IDg1Mzk1OGZiMmMwNi4uMjk5OWJhMWU1N2QwIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMv cGh5L2ZyZWVzY2FsZS9LY29uZmlnCj4gKysrIGIvZHJpdmVycy9waHkvZnJlZXNjYWxlL0tjb25m aWcKPiBAQCAtMzUsNiArMzUsMTUgQEAgY29uZmlnIFBIWV9GU0xfSU1YOE1fUENJRQo+ICAJICBF bmFibGUgdGhpcyB0byBhZGQgc3VwcG9ydCBmb3IgdGhlIFBDSUUgUEhZIGFzIGZvdW5kIG9uCj4g IAkgIGkuTVg4TSBmYW1pbHkgb2YgU09Dcy4KPiAKPiArY29uZmlnIFBIWV9GU0xfSU1YOE1RX0RQ X1BIWQo+ICsJdHJpc3RhdGUgIkZyZWVzY2FsZSBpLk1YOE1RIERQIFBIWSBzdXBwb3J0Igo+ICsJ ZGVwZW5kcyBvbiBPRiAmJiBIQVNfSU9NRU0KPiArCWRlcGVuZHMgb24gQ09NTU9OX0NMSwo+ICsJ c2VsZWN0IEdFTkVSSUNfUEhZCj4gKwloZWxwCj4gKwkgIEVuYWJsZSB0aGlzIHRvIHN1cHBvcnQg dGhlIENhZGVuY2UgSERQVFggRFAgUEhZIGRyaXZlcgo+ICsJICBvbiBpLk1YOE1RIFNPQy4KPiAr Cj4gIGVuZGlmCj4gCj4gIGNvbmZpZyBQSFlfRlNMX0xZTlhfMjhHCj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvcGh5L2ZyZWVzY2FsZS9NYWtlZmlsZSBiL2RyaXZlcnMvcGh5L2ZyZWVzY2FsZS9NYWtl ZmlsZQo+IGluZGV4IGNlZGIzMjhiYzRkMi4uOTE1YTQyOWQ5ZmJjIDEwMDY0NAo+IC0tLSBhL2Ry aXZlcnMvcGh5L2ZyZWVzY2FsZS9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvcGh5L2ZyZWVzY2Fs ZS9NYWtlZmlsZQo+IEBAIC00LDMgKzQsNCBAQCBvYmotJChDT05GSUdfUEhZX01JWEVMX0xWRFNf UEhZKQkrPQo+IHBoeS1mc2wtaW14OHFtLWx2ZHMtcGh5Lm8gb2JqLSQoQ09ORklHX1BIWV9NSVhF TF9NSVBJX0RQSFkpCSs9Cj4gcGh5LWZzbC1pbXg4LW1pcGktZHBoeS5vCj4gIG9iai0kKENPTkZJ R19QSFlfRlNMX0lNWDhNX1BDSUUpCSs9IHBoeS1mc2wtaW14OG0tcGNpZS5vCj4gIG9iai0kKENP TkZJR19QSFlfRlNMX0xZTlhfMjhHKQkJKz0gcGh5LWZzbC1seW54LTI4Zy5vCj4gK29iai0kKENP TkZJR19QSFlfRlNMX0lNWDhNUV9EUF9QSFkpCSs9IHBoeS1mc2wtaW14OG1xLWRwLm8KClRoaXMg c2hvdWxkIGJlIHNvcnRlZCBhbHBoYWJldGljYWxseSwgZS5nLiB0aGUgZmlyc3QgZW50cnkgYmVm b3JlIGlteDhtcS11c2IgClBIWSBkcml2ZXIuCgpCZXN0IHJlZ2FyZHMsCkFsZXhhbmRlcgoKPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9waHkvZnJlZXNjYWxlL3BoeS1mc2wtaW14OG1xLWRwLmMKPiBi L2RyaXZlcnMvcGh5L2ZyZWVzY2FsZS9waHktZnNsLWlteDhtcS1kcC5jIG5ldyBmaWxlIG1vZGUg MTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi5iMWY0NWMwYjI3YjUKPiAtLS0gL2Rldi9udWxs Cj4gKysrIGIvZHJpdmVycy9waHkvZnJlZXNjYWxlL3BoeS1mc2wtaW14OG1xLWRwLmMKPiBAQCAt MCwwICsxLDcxNCBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5 Cj4gKy8qCj4gKyAqIENhZGVuY2UgSERQLVRYIERpc3BsYXkgUG9ydCBJbnRlcmZhY2UgKERQKSBQ SFkgZHJpdmVyCj4gKyAqCj4gKyAqIENvcHlyaWdodCAoQykgMjAyMiwgMjAyMyBOWFAgU2VtaWNv bmR1Y3RvciwgSW5jLgo+ICsgKi8KPiArI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KPiArI2lu Y2x1ZGUgPGxpbnV4L2Nsay5oPgo+ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Cj4gKyNpbmNs dWRlIDxsaW51eC9waHkvcGh5Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2Uu aD4KPiArI2luY2x1ZGUgPGxpbnV4L2lvLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9pb3BvbGwuaD4K PiArCj4gKyNpbmNsdWRlIDxkcm0vYnJpZGdlL2NkbnMtbWhkcC1tYWlsYm94Lmg+Cj4gKwo+ICsj ZGVmaW5lIEFERFJfUEhZX0FGRQkweDgwMDAwCj4gKwo+ICsvKiBQSFkgcmVnaXN0ZXJzICovCj4g KyNkZWZpbmUgQ01OX1NTTV9CSUFTX1RNUgkJCTB4MDAyMgo+ICsjZGVmaW5lIENNTl9QTExTTTBf UExMRU5fVE1SCQkJMHgwMDI5Cj4gKyNkZWZpbmUgQ01OX1BMTFNNMF9QTExQUkVfVE1SCQkJMHgw MDJhCj4gKyNkZWZpbmUgQ01OX1BMTFNNMF9QTExWUkVGX1RNUgkJCTB4MDAyYgo+ICsjZGVmaW5l IENNTl9QTExTTTBfUExMTE9DS19UTVIJCQkweDAwMmMKPiArI2RlZmluZSBDTU5fUExMU00wX1VT RVJfREVGX0NUUkwJCTB4MDAyZgo+ICsjZGVmaW5lIENNTl9QU01fQ0xLX0NUUkwJCQkweDAwNjEK PiArI2RlZmluZSBDTU5fUExMMF9WQ09DQUxfU1RBUlQJCQkweDAwODEKPiArI2RlZmluZSBDTU5f UExMMF9WQ09DQUxfSU5JVF9UTVIJCTB4MDA4NAo+ICsjZGVmaW5lIENNTl9QTEwwX1ZDT0NBTF9J VEVSX1RNUgkJMHgwMDg1Cj4gKyNkZWZpbmUgQ01OX1BMTDBfSU5URElWCQkJCTB4MDA5NAo+ICsj ZGVmaW5lIENNTl9QTEwwX0ZSQUNESVYJCQkweDAwOTUKPiArI2RlZmluZSBDTU5fUExMMF9ISUdI X1RIUgkJCTB4MDA5Ngo+ICsjZGVmaW5lIENNTl9QTEwwX0RTTV9ESUFHCQkJMHgwMDk3Cj4gKyNk ZWZpbmUgQ01OX1BMTDBfU1NfQ1RSTDIJCQkweDAwOTkKPiArI2RlZmluZSBDTU5fSUNBTF9JTklU X1RNUgkJCTB4MDBjNAo+ICsjZGVmaW5lIENNTl9JQ0FMX0lURVJfVE1SCQkJMHgwMGM1Cj4gKyNk ZWZpbmUgQ01OX1JYQ0FMX0lOSVRfVE1SCQkJMHgwMGQ0Cj4gKyNkZWZpbmUgQ01OX1JYQ0FMX0lU RVJfVE1SCQkJMHgwMGQ1Cj4gKyNkZWZpbmUgQ01OX1RYUFVDQUxfSU5JVF9UTVIJCQkweDAwZTQK PiArI2RlZmluZSBDTU5fVFhQVUNBTF9JVEVSX1RNUgkJCTB4MDBlNQo+ICsjZGVmaW5lIENNTl9U WFBEQ0FMX0lOSVRfVE1SCQkJMHgwMGY0Cj4gKyNkZWZpbmUgQ01OX1RYUERDQUxfSVRFUl9UTVIJ CQkweDAwZjUKPiArI2RlZmluZSBDTU5fSUNBTF9BREpfSU5JVF9UTVIJCQkweDAxMDIKPiArI2Rl ZmluZSBDTU5fSUNBTF9BREpfSVRFUl9UTVIJCQkweDAxMDMKPiArI2RlZmluZSBDTU5fUlhfQURK X0lOSVRfVE1SCQkJMHgwMTA2Cj4gKyNkZWZpbmUgQ01OX1JYX0FESl9JVEVSX1RNUgkJCTB4MDEw Nwo+ICsjZGVmaW5lIENNTl9UWFBVX0FESl9JTklUX1RNUgkJCTB4MDEwYQo+ICsjZGVmaW5lIENN Tl9UWFBVX0FESl9JVEVSX1RNUgkJCTB4MDEwYgo+ICsjZGVmaW5lIENNTl9UWFBEX0FESl9JTklU X1RNUgkJCTB4MDEwZQo+ICsjZGVmaW5lIENNTl9UWFBEX0FESl9JVEVSX1RNUgkJCTB4MDEwZgo+ ICsjZGVmaW5lIENNTl9ESUFHX1BMTDBfRkJIX09WUkQJCQkweDAxYzAKPiArI2RlZmluZSBDTU5f RElBR19QTEwwX0ZCTF9PVlJECQkJMHgwMWMxCj4gKyNkZWZpbmUgQ01OX0RJQUdfUExMMF9PVlJE CQkJMHgwMWMyCj4gKyNkZWZpbmUgQ01OX0RJQUdfUExMMF9URVNUX01PREUJCQkweDAxYzQKPiAr I2RlZmluZSBDTU5fRElBR19QTEwwX1YySV9UVU5FCQkJMHgwMWM1Cj4gKyNkZWZpbmUgQ01OX0RJ QUdfUExMMF9DUF9UVU5FCQkJMHgwMWM2Cj4gKyNkZWZpbmUgQ01OX0RJQUdfUExMMF9MRl9QUk9H CQkJMHgwMWM3Cj4gKyNkZWZpbmUgQ01OX0RJQUdfUExMMF9QVEFUSVNfVFVORTEJCTB4MDFjOAo+ ICsjZGVmaW5lIENNTl9ESUFHX1BMTDBfUFRBVElTX1RVTkUyCQkweDAxYzkKPiArI2RlZmluZSBD TU5fRElBR19IU0NMS19TRUwJCQkweDAxZTAKPiArI2RlZmluZSBDTU5fRElBR19QRVJfQ0FMX0FE SgkJCTB4MDFlYwo+ICsjZGVmaW5lIENNTl9ESUFHX0NBTF9DVFJMCQkJMHgwMWVkCj4gKyNkZWZp bmUgQ01OX0RJQUdfQUNZQQkJCQkweDAxZmYKPiArI2RlZmluZSBYQ1ZSX1BTTV9SQ1RSTAkJCQkw eDQwMDEKPiArI2RlZmluZSBYQ1ZSX1BTTV9DQUxfVE1SCQkJMHg0MDAyCj4gKyNkZWZpbmUgWENW Ul9QU01fQTBJTl9UTVIJCQkweDQwMDMKPiArI2RlZmluZSBUWF9UWENDX0NBTF9TQ0xSX01VTFRf MAkJCTB4NDA0Nwo+ICsjZGVmaW5lIFRYX1RYQ0NfQ1BPU1RfTVVMVF8wMF8wCQkJMHg0MDRjCj4g KyNkZWZpbmUgWENWUl9ESUFHX1BMTERSQ19DVFJMCQkJMHg0MGUwCj4gKyNkZWZpbmUgWENWUl9E SUFHX1BMTERSQ19DVFJMCQkJMHg0MGUwCj4gKyNkZWZpbmUgWENWUl9ESUFHX0hTQ0xLX1NFTAkJ CTB4NDBlMQo+ICsjZGVmaW5lIFhDVlJfRElBR19MQU5FX0ZDTV9FTl9NR05fVE1SCQkweDQwZjIK PiArI2RlZmluZSBUWF9QU0NfQTAJCQkJMHg0MTAwCj4gKyNkZWZpbmUgVFhfUFNDX0ExCQkJCTB4 NDEwMQo+ICsjZGVmaW5lIFRYX1BTQ19BMgkJCQkweDQxMDIKPiArI2RlZmluZSBUWF9QU0NfQTMJ CQkJMHg0MTAzCj4gKyNkZWZpbmUgVFhfUkNWREVUX0VOX1RNUgkJCTB4NDEyMgo+ICsjZGVmaW5l IFRYX1JDVkRFVF9TVF9UTVIJCQkweDQxMjMKPiArI2RlZmluZSBUWF9ESUFHX0JHUkVGX1BSRURS Vl9ERUxBWQkJMHg0MWU3Cj4gKyNkZWZpbmUgVFhfRElBR19CR1JFRl9QUkVEUlZfREVMQVkJCTB4 NDFlNwo+ICsjZGVmaW5lIFRYX0RJQUdfQUNZQV8wCQkJCTB4NDFmZgo+ICsjZGVmaW5lIFRYX0RJ QUdfQUNZQV8xCQkJCTB4NDNmZgo+ICsjZGVmaW5lIFRYX0RJQUdfQUNZQV8yCQkJCTB4NDVmZgo+ ICsjZGVmaW5lIFRYX0RJQUdfQUNZQV8zCQkJCTB4NDdmZgo+ICsjZGVmaW5lIFRYX0FOQV9DVFJM X1JFR18xCQkJMHg1MDIwCj4gKyNkZWZpbmUgVFhfQU5BX0NUUkxfUkVHXzIJCQkweDUwMjEKPiAr I2RlZmluZSBUWF9ESUdfQ1RSTF9SRUdfMQkJCTB4NTAyMwo+ICsjZGVmaW5lIFRYX0RJR19DVFJM X1JFR18yCQkJMHg1MDI0Cj4gKyNkZWZpbmUgVFhEQV9DWUFfQVVYREFfQ1lBCQkJMHg1MDI1Cj4g KyNkZWZpbmUgVFhfQU5BX0NUUkxfUkVHXzMJCQkweDUwMjYKPiArI2RlZmluZSBUWF9BTkFfQ1RS TF9SRUdfNAkJCTB4NTAyNwo+ICsjZGVmaW5lIFRYX0FOQV9DVFJMX1JFR181CQkJMHg1MDI5Cj4g KyNkZWZpbmUgUlhfUFNDX0EwCQkJCTB4ODAwMAo+ICsjZGVmaW5lIFJYX1BTQ19DQUwJCQkJMHg4 MDA2Cj4gKyNkZWZpbmUgUEhZX0hEUF9NT0RFX0NUUkwJCQkweGMwMDgKPiArI2RlZmluZSBQSFlf SERQX0NMS19DVEwJCQkJMHhjMDA5Cj4gKyNkZWZpbmUgUEhZX1BNQV9DTU5fQ1RSTDEJCQkweGM4 MDAKPiArCj4gKy8qIFBIWV9QTUFfQ01OX0NUUkwxICovCj4gKyNkZWZpbmUgQ01BX1JFRl9DTEtf U0VMX01BU0sJCQlHRU5NQVNLKDYsIDQpCj4gKyNkZWZpbmUgQ01BX1JFRl9DTEtfUkNWX0VOX01B U0sJCQlCSVQoMykKPiArI2RlZmluZSBDTUFfUkVGX0NMS19SQ1ZfRU4JCQkxCj4gKwo+ICsvKiBQ SFlfSERQX0NMS19DVEwgKi8KPiArI2RlZmluZSBQTExfREFUQV9SQVRFX0NMS19ESVZfTUFTSwkJ R0VOTUFTSygxNSwgOCkKPiArI2RlZmluZSBQTExfREFUQV9SQVRFX0NMS19ESVZfSEJSCQkweDI0 Cj4gKyNkZWZpbmUgUExMX0RBVEFfUkFURV9DTEtfRElWX0hCUjIJCTB4MTIKPiArI2RlZmluZSBQ TExfQ0xLX0VOX0FDSwkJCQlCSVQoMykKPiArI2RlZmluZSBQTExfQ0xLX0VOCQkJCUJJVCgyKQo+ ICsjZGVmaW5lIFBMTF9SRUFEWQkJCQlCSVQoMSkKPiArI2RlZmluZSBQTExfRU4JCQkJCUJJVCgw KQo+ICsKPiArLyogQ01OX0RJQUdfSFNDTEtfU0VMICovCj4gKyNkZWZpbmUgSFNDTEsxX1NFTF9N QVNLCQkJCUdFTk1BU0soNSwgNCkKPiArI2RlZmluZSBIU0NMSzBfU0VMX01BU0sJCQkJR0VOTUFT SygxLCAwKQo+ICsjZGVmaW5lIEhTQ0xLX1BMTDBfRElWMgkJCQkxCj4gKwo+ICsvKiBYQ1ZSX0RJ QUdfSFNDTEtfU0VMICovCj4gKyNkZWZpbmUgSFNDTEtfU0VMX01PREUzX01BU0sJCQlHRU5NQVNL KDEzLCAxMikKPiArI2RlZmluZSBIU0NMS19TRUxfTU9ERTNfSFNDTEsxCQkJMQo+ICsKPiArLyog WENWUl9ESUFHX1BMTERSQ19DVFJMICovCj4gKyNkZWZpbmUgRFBMTF9DTEtfU0VMX01PREUzCQkJ QklUKDE0KQo+ICsjZGVmaW5lIERQTExfREFUQV9SQVRFX0RJVl9NT0RFM19NQVNLCQlHRU5NQVNL KDEzLCAxMikKPiArCj4gKy8qIFBIWV9IRFBfTU9ERV9DVFJMICovCj4gKyNkZWZpbmUgUE9XRVJf U1RBVEVfQTNfQUNLCQkJQklUKDcpCj4gKyNkZWZpbmUgUE9XRVJfU1RBVEVfQTJfQUNLCQkJQklU KDYpCj4gKyNkZWZpbmUgUE9XRVJfU1RBVEVfQTFfQUNLCQkJQklUKDUpCj4gKyNkZWZpbmUgUE9X RVJfU1RBVEVfQTBfQUNLCQkJQklUKDQpCj4gKyNkZWZpbmUgUE9XRVJfU1RBVEVfQTMJCQkJQklU KDMpCj4gKyNkZWZpbmUgUE9XRVJfU1RBVEVfQTIJCQkJQklUKDIpCj4gKyNkZWZpbmUgUE9XRVJf U1RBVEVfQTEJCQkJQklUKDEpCj4gKyNkZWZpbmUgUE9XRVJfU1RBVEVfQTAJCQkJQklUKDApCj4g Kwo+ICsjZGVmaW5lIFJFRl9DTEtfMjdNSFoJCTI3MDAwMDAwCj4gKwo+ICtlbnVtIGRwX2xpbmtf cmF0ZSB7Cj4gKwlSQVRFXzFfNiA9IDE2MjAwMCwKPiArCVJBVEVfMl8xID0gMjE2MDAwLAo+ICsJ UkFURV8yXzQgPSAyNDMwMDAsCj4gKwlSQVRFXzJfNyA9IDI3MDAwMCwKPiArCVJBVEVfM18yID0g MzI0MDAwLAo+ICsJUkFURV80XzMgPSA0MzIwMDAsCj4gKwlSQVRFXzVfNCA9IDU0MDAwMCwKPiAr CVJBVEVfOF8xID0gODEwMDAwLAo+ICt9Owo+ICsKPiArI2RlZmluZSBNQVhfTElOS19SQVRFIFJB VEVfNV80Cj4gKwo+ICtzdHJ1Y3QgcGh5X3BsbF9yZWcgewo+ICsJdTE2IHZhbFs3XTsKPiArCXUz MiBhZGRyOwo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBwaHlfcGxsX3JlZyBwaHlf cGxsXzI3bV9jZmdbXSA9IHsKPiArCS8qICAxLjYyICAgIDIuMTYgICAgMi40MyAgICAyLjcgICAg IDMuMjQgICAgNC4zMiAgICA1LjQgICAgICAKcmVnaXN0ZXIKPiBhZGRyZXNzICovICsJe3sgMHgw MTBlLCAweDAxMGUsIDB4MDEwZSwgMHgwMTBlLCAweDAxMGUsIDB4MDEwZSwgMHgwMTBlIAp9LAo+ IENNTl9QTEwwX1ZDT0NBTF9JTklUX1RNUiB9LCArCXt7IDB4MDAxYiwgMHgwMDFiLCAweDAwMWIs IDB4MDAxYiwgCjB4MDAxYiwKPiAweDAwMWIsIDB4MDAxYiB9LCBDTU5fUExMMF9WQ09DQUxfSVRF Ul9UTVIgfSwgKwl7eyAweDMwYjksIDB4MzA4NywgMHgzMDk2LAo+IDB4MzBiNCwgMHgzMGI5LCAw eDMwODcsIDB4MzBiNCB9LCBDTU5fUExMMF9WQ09DQUxfU1RBUlQgfSwgKwl7eyAKMHgwMDc3LAo+ IDB4MDA5ZiwgMHgwMGIzLCAweDAwYzcsIDB4MDA3NywgMHgwMDlmLCAweDAwYzcgfSwgQ01OX1BM TDBfSU5URElWIH0sICsJCnt7Cj4gMHhmOWRhLCAweGY3Y2QsIDB4ZjZjNywgMHhmNWMxLCAweGY5 ZGEsIDB4ZjdjZCwgMHhmNWMxIH0sIENNTl9QTEwwX0ZSQUNESVYKPiB9LCArCXt7IDB4MDAxZSwg MHgwMDI4LCAweDAwMmQsIDB4MDAzMiwgMHgwMDFlLCAweDAwMjgsIDB4MDAzMiB9LAo+IENNTl9Q TEwwX0hJR0hfVEhSIH0sICsJe3sgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAweDAw MjAsIAoweDAwMjAsCj4gMHgwMDIwIH0sIENNTl9QTEwwX0RTTV9ESUFHIH0sICsJe3sgMHgwMDAw LCAweDEwMDAsIDB4MTAwMCwgMHgxMDAwLCAKMHgwMDAwLAo+IDB4MTAwMCwgMHgxMDAwIH0sIENN Tl9QTExTTTBfVVNFUl9ERUZfQ1RSTCB9LCArCXt7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCj4g MHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIENNTl9ESUFHX1BMTDBfT1ZSRCB9LCAr CXt7IDB4MDAwMCwKPiAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgw MDAwIH0sIENNTl9ESUFHX1BMTDBfRkJIX09WUkQgfSwKPiArCXt7IDB4MDAwMCwgMHgwMDAwLCAw eDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LAo+IENNTl9ESUFHX1BMTDBf RkJMX09WUkQgfSwgKwl7eyAweDAwMDYsIDB4MDAwNywgMHgwMDA3LCAweDAwMDcsIDB4MDAwNiwK PiAweDAwMDcsIDB4MDAwNyB9LCBDTU5fRElBR19QTEwwX1YySV9UVU5FIH0sICsJe3sgMHgwMDQz LCAweDAwNDMsIDB4MDA0MywKPiAweDAwNDIsIDB4MDA0MywgMHgwMDQzLCAweDAwNDIgfSwgQ01O X0RJQUdfUExMMF9DUF9UVU5FIH0sICsJe3sgCjB4MDAwOCwKPiAweDAwMDgsIDB4MDAwOCwgMHgw MDA4LCAweDAwMDgsIDB4MDAwOCwgMHgwMDA4IH0sIENNTl9ESUFHX1BMTDBfTEZfUFJPRyB9LAo+ ICsJe3sgMHgwMTAwLCAweDAwMDEsIDB4MDAwMSwgMHgwMDAxLCAweDAxMDAsIDB4MDAwMSwgMHgw MDAxIH0sCj4gQ01OX0RJQUdfUExMMF9QVEFUSVNfVFVORTEgfSwgKwl7eyAweDAwMDcsIDB4MDAw MSwgMHgwMDAxLCAweDAwMDEsIAoweDAwMDcsCj4gMHgwMDAxLCAweDAwMDEgfSwgQ01OX0RJQUdf UExMMF9QVEFUSVNfVFVORTIgfSwgKwl7eyAweDAwMjAsIDB4MDAyMCwKPiAweDAwMjAsIDB4MDAy MCwgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCB9LCBDTU5fRElBR19QTEwwX1RFU1RfTU9ERX0sICsJ e3sKPiAweDAwMTYsIDB4MDAxNiwgMHgwMDE2LCAweDAwMTYsIDB4MDAxNiwgMHgwMDE2LCAweDAw MTYgfSwgQ01OX1BTTV9DTEtfQ1RSTAo+IH0gK307Cj4gKwo+ICtzdHJ1Y3QgY2Ruc19oZHB0eF9k cF9waHkgewo+ICsJdm9pZCBfX2lvbWVtICpyZWdzOwkvKiBEUFRYIHJlZ2lzdGVycyBiYXNlICov Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4gKwlzdHJ1Y3QgcGh5ICpwaHk7Cj4gKwlzdHJ1Y3Qg bXV0ZXggbWJveF9tdXRleDsJLyogbXV0ZXggdG8gcHJvdGVjdCBtYWlsYm94ICovCj4gKwlzdHJ1 Y3QgY2xrICpyZWZfY2xrLCAqYXBiX2NsazsKPiArCXUzMiByZWZfY2xrX3JhdGU7Cj4gKwl1MzIg bnVtX2xhbmVzOwo+ICsJdTMyIGxpbmtfcmF0ZTsKPiArCWJvb2wgcG93ZXJfdXA7Cj4gK307Cj4g Kwo+ICtzdGF0aWMgaW50IGNkbnNfcGh5X3JlZ193cml0ZShzdHJ1Y3QgY2Ruc19oZHB0eF9kcF9w aHkgKmNkbnNfcGh5LCB1MzIgYWRkciwKPiB1MzIgdmFsKSArewo+ICsJcmV0dXJuIGNkbnNfbWhk cF9yZWdfd3JpdGUoY2Ruc19waHksIEFERFJfUEhZX0FGRSArIChhZGRyIDw8IDIpLCAKdmFsKTsK PiArfQo+ICsKPiArc3RhdGljIHUzMiBjZG5zX3BoeV9yZWdfcmVhZChzdHJ1Y3QgY2Ruc19oZHB0 eF9kcF9waHkgKmNkbnNfcGh5LCB1MzIgYWRkcikKPiArewo+ICsJdTMyIHJlZzMyOwo+ICsKPiAr CWNkbnNfbWhkcF9yZWdfcmVhZChjZG5zX3BoeSwgQUREUl9QSFlfQUZFICsgKGFkZHIgPDwgMiks ICZyZWczMik7Cj4gKwlyZXR1cm4gcmVnMzI7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgbGlua19y YXRlX2luZGV4KHUzMiByYXRlKQo+ICt7Cj4gKwlzd2l0Y2ggKHJhdGUpIHsKPiArCWNhc2UgUkFU RV8xXzY6Cj4gKwkJcmV0dXJuIDA7Cj4gKwljYXNlIFJBVEVfMl8xOgo+ICsJCXJldHVybiAxOwo+ ICsJY2FzZSBSQVRFXzJfNDoKPiArCQlyZXR1cm4gMjsKPiArCWNhc2UgUkFURV8yXzc6Cj4gKwkJ cmV0dXJuIDM7Cj4gKwljYXNlIFJBVEVfM18yOgo+ICsJCXJldHVybiA0Owo+ICsJY2FzZSBSQVRF XzRfMzoKPiArCQlyZXR1cm4gNTsKPiArCWNhc2UgUkFURV81XzQ6Cj4gKwkJcmV0dXJuIDY7Cj4g KwlkZWZhdWx0Ogo+ICsJCXJldHVybiAtMTsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIGludCBo ZHB0eF9kcF9jbGtfZW5hYmxlKHN0cnVjdCBjZG5zX2hkcHR4X2RwX3BoeSAqY2Ruc19waHkpCj4g K3sKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNkbnNfcGh5LT5kZXY7Cj4gKwl1MzIgcmVmX2Ns a19yYXRlOwo+ICsJaW50IHJldDsKPiArCj4gKwljZG5zX3BoeS0+cmVmX2NsayA9IGRldm1fY2xr X2dldChkZXYsICJyZWYiKTsKPiArCWlmIChJU19FUlIoY2Ruc19waHktPnJlZl9jbGspKSB7Cj4g KwkJZGV2X2VycihkZXYsICJwaHkgcmVmIGNsb2NrIG5vdCBmb3VuZFxuIik7Cj4gKwkJcmV0dXJu IFBUUl9FUlIoY2Ruc19waHktPnJlZl9jbGspOwo+ICsJfQo+ICsKPiArCWNkbnNfcGh5LT5hcGJf Y2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgImFwYiIpOwo+ICsJaWYgKElTX0VSUihjZG5zX3BoeS0+ YXBiX2NsaykpIHsKPiArCQlkZXZfZXJyKGRldiwgInBoeSBhcGIgY2xvY2sgbm90IGZvdW5kXG4i KTsKPiArCQlyZXR1cm4gUFRSX0VSUihjZG5zX3BoeS0+YXBiX2Nsayk7Cj4gKwl9Cj4gKwo+ICsJ cmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGNkbnNfcGh5LT5yZWZfY2xrKTsKPiArCWlmIChyZXQp IHsKPiArCQlkZXZfZXJyKGNkbnNfcGh5LT5kZXYsICJGYWlsZWQgdG8gcHJlcGFyZSByZWYgY2xv Y2tcbiIpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJcmVmX2Nsa19yYXRlID0gY2xr X2dldF9yYXRlKGNkbnNfcGh5LT5yZWZfY2xrKTsKPiArCWlmICghcmVmX2Nsa19yYXRlKSB7Cj4g KwkJZGV2X2VycihjZG5zX3BoeS0+ZGV2LCAiRmFpbGVkIHRvIGdldCByZWYgY2xvY2sgcmF0ZVxu Iik7Cj4gKwkJZ290byBlcnJfcmVmX2NsazsKPiArCX0KPiArCj4gKwlpZiAocmVmX2Nsa19yYXRl ID09IFJFRl9DTEtfMjdNSFopIHsKPiArCQljZG5zX3BoeS0+cmVmX2Nsa19yYXRlID0gcmVmX2Ns a19yYXRlOwo+ICsJfSBlbHNlIHsKPiArCQlkZXZfZXJyKGNkbnNfcGh5LT5kZXYsICJOb3Qgc3Vw cG9ydCBSZWYgQ2xvY2sgUmF0ZSglZEh6KQpcbiIsCj4gcmVmX2Nsa19yYXRlKTsgKwkJZ290byBl cnJfcmVmX2NsazsKPiArCX0KPiArCj4gKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoY2Ruc19w aHktPmFwYl9jbGspOwo+ICsJaWYgKHJldCkgewo+ICsJCWRldl9lcnIoY2Ruc19waHktPmRldiwg IkZhaWxlZCB0byBwcmVwYXJlIGFwYiBjbG9ja1xuIik7Cj4gKwkJZ290byBlcnJfcmVmX2NsazsK PiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArCj4gK2Vycl9yZWZfY2xrOgo+ICsJY2xrX2Rpc2Fi bGVfdW5wcmVwYXJlKGNkbnNfcGh5LT5yZWZfY2xrKTsKPiArCXJldHVybiAtRUlOVkFMOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgdm9pZCBoZHB0eF9kcF9jbGtfZGlzYWJsZShzdHJ1Y3QgY2Ruc19oZHB0 eF9kcF9waHkgKmNkbnNfcGh5KQo+ICt7Cj4gKwljbGtfZGlzYWJsZV91bnByZXBhcmUoY2Ruc19w aHktPnJlZl9jbGspOwo+ICsJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGNkbnNfcGh5LT5hcGJfY2xr KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaGRwdHhfZHBfYXV4X2NmZyhzdHJ1Y3QgY2Ruc19o ZHB0eF9kcF9waHkgKmNkbnNfcGh5KQo+ICt7Cj4gKwkvKiBQb3dlciB1cCBBdXggKi8KPiArCWNk bnNfcGh5X3JlZ193cml0ZShjZG5zX3BoeSwgVFhEQV9DWUFfQVVYREFfQ1lBLCAxKTsKPiArCj4g KwljZG5zX3BoeV9yZWdfd3JpdGUoY2Ruc19waHksIFRYX0RJR19DVFJMX1JFR18xLCAweDMpOwo+ ICsJbmRlbGF5KDE1MCk7Cj4gKwljZG5zX3BoeV9yZWdfd3JpdGUoY2Ruc19waHksIFRYX0RJR19D VFJMX1JFR18yLCAzNik7Cj4gKwluZGVsYXkoMTUwKTsKPiArCWNkbnNfcGh5X3JlZ193cml0ZShj ZG5zX3BoeSwgVFhfQU5BX0NUUkxfUkVHXzIsIDB4MDEwMCk7Cj4gKwluZGVsYXkoMTUwKTsKPiAr CWNkbnNfcGh5X3JlZ193cml0ZShjZG5zX3BoeSwgVFhfQU5BX0NUUkxfUkVHXzIsIDB4MDMwMCk7 Cj4gKwluZGVsYXkoMTUwKTsKPiArCWNkbnNfcGh5X3JlZ193cml0ZShjZG5zX3BoeSwgVFhfQU5B X0NUUkxfUkVHXzMsIDB4MDAwMCk7Cj4gKwluZGVsYXkoMTUwKTsKPiArCWNkbnNfcGh5X3JlZ193 cml0ZShjZG5zX3BoeSwgVFhfQU5BX0NUUkxfUkVHXzEsIDB4MjAwOCk7Cj4gKwluZGVsYXkoMTUw KTsKPiArCWNkbnNfcGh5X3JlZ193cml0ZShjZG5zX3BoeSwgVFhfQU5BX0NUUkxfUkVHXzEsIDB4 MjAxOCk7Cj4gKwluZGVsYXkoMTUwKTsKPiArCWNkbnNfcGh5X3JlZ193cml0ZShjZG5zX3BoeSwg VFhfQU5BX0NUUkxfUkVHXzEsIDB4YTAxOCk7Cj4gKwluZGVsYXkoMTUwKTsKPiArCWNkbnNfcGh5 X3JlZ193cml0ZShjZG5zX3BoeSwgVFhfQU5BX0NUUkxfUkVHXzIsIDB4MDMwYyk7Cj4gKwluZGVs YXkoMTUwKTsKPiArCWNkbnNfcGh5X3JlZ193cml0ZShjZG5zX3BoeSwgVFhfQU5BX0NUUkxfUkVH XzUsIDB4MDAwMCk7Cj4gKwluZGVsYXkoMTUwKTsKPiArCWNkbnNfcGh5X3JlZ193cml0ZShjZG5z X3BoeSwgVFhfQU5BX0NUUkxfUkVHXzQsIDB4MTAwMSk7Cj4gKwluZGVsYXkoMTUwKTsKPiArCWNk bnNfcGh5X3JlZ193cml0ZShjZG5zX3BoeSwgVFhfQU5BX0NUUkxfUkVHXzEsIDB4YTA5OCk7Cj4g KwluZGVsYXkoMTUwKTsKPiArCWNkbnNfcGh5X3JlZ193cml0ZShjZG5zX3BoeSwgVFhfQU5BX0NU UkxfUkVHXzEsIDB4YTE5OCk7Cj4gKwluZGVsYXkoMTUwKTsKPiArCWNkbnNfcGh5X3JlZ193cml0 ZShjZG5zX3BoeSwgVFhfQU5BX0NUUkxfUkVHXzIsIDB4MDMwZCk7Cj4gKwluZGVsYXkoMTUwKTsK PiArCWNkbnNfcGh5X3JlZ193cml0ZShjZG5zX3BoeSwgVFhfQU5BX0NUUkxfUkVHXzIsIDB4MDMw Zik7Cj4gK30KPiArCj4gKy8qIFBNQSBjb21tb24gY29uZmlndXJhdGlvbiBmb3IgMjdNSHogKi8K PiArc3RhdGljIHZvaWQgaGRwdHhfZHBfcGh5X3BtYV9jbW5fY2ZnXzI3bWh6KHN0cnVjdCBjZG5z X2hkcHR4X2RwX3BoeQo+ICpjZG5zX3BoeSkgK3sKPiArCXUzMiBudW1fbGFuZXMgPSBjZG5zX3Bo eS0+bnVtX2xhbmVzOwo+ICsJdTE2IHZhbDsKPiArCWludCBrOwo+ICsKPiArCS8qIEVuYWJsZSBQ TUEgaW5wdXQgcmVmIGNsayhDTU5fUkVGX0NMS19SQ1ZfRU4pICovCj4gKwl2YWwgPSBjZG5zX3Bo eV9yZWdfcmVhZChjZG5zX3BoeSwgUEhZX1BNQV9DTU5fQ1RSTDEpOwo+ICsJdmFsICY9IH5DTUFf UkVGX0NMS19SQ1ZfRU5fTUFTSzsKPiArCXZhbCB8PSBGSUVMRF9QUkVQKENNQV9SRUZfQ0xLX1JD Vl9FTl9NQVNLLCBDTUFfUkVGX0NMS19SQ1ZfRU4pOwo+ICsJY2Ruc19waHlfcmVnX3dyaXRlKGNk bnNfcGh5LCBQSFlfUE1BX0NNTl9DVFJMMSwgdmFsKTsKPiArCj4gKwkvKiBTdGFydHVwIHN0YXRl IG1hY2hpbmUgcmVnaXN0ZXJzICovCj4gKwljZG5zX3BoeV9yZWdfd3JpdGUoY2Ruc19waHksIENN Tl9TU01fQklBU19UTVIsIDB4MDA4Nyk7Cj4gKwljZG5zX3BoeV9yZWdfd3JpdGUoY2Ruc19waHks IENNTl9QTExTTTBfUExMRU5fVE1SLCAweDAwMWIpOwo+ICsJY2Ruc19waHlfcmVnX3dyaXRlKGNk bnNfcGh5LCBDTU5fUExMU00wX1BMTFBSRV9UTVIsIDB4MDAzNik7Cj4gKwljZG5zX3BoeV9yZWdf d3JpdGUoY2Ruc19waHksIENNTl9QTExTTTBfUExMVlJFRl9UTVIsIDB4MDAxYik7Cj4gKwljZG5z X3BoeV9yZWdfd3JpdGUoY2Ruc19waHksIENNTl9QTExTTTBfUExMTE9DS19UTVIsIDB4MDA2Yyk7 Cj4gKwo+ICsJLyogQ3VycmVudCBjYWxpYnJhdGlvbiByZWdpc3RlcnMgKi8KPiArCWNkbnNfcGh5 X3JlZ193cml0ZShjZG5zX3BoeSwgQ01OX0lDQUxfSU5JVF9UTVIsIDB4MDA0NCk7Cj4gKwljZG5z X3BoeV9yZWdfd3JpdGUoY2Ruc19waHksIENNTl9JQ0FMX0lURVJfVE1SLCAweDAwMDYpOwo+ICsJ Y2Ruc19waHlfcmVnX3dyaXRlKGNkbnNfcGh5LCBDTU5fSUNBTF9BREpfSU5JVF9UTVIsIDB4MDAy Mik7Cj4gKwljZG5zX3BoeV9yZWdfd3JpdGUoY2Ruc19waHksIENNTl9JQ0FMX0FESl9JVEVSX1RN UiwgMHgwMDA2KTsKPiArCj4gKwkvKiBSZXNpc3RvciBjYWxpYnJhdGlvbiByZWdpc3RlcnMgKi8K PiArCWNkbnNfcGh5X3JlZ193cml0ZShjZG5zX3BoeSwgQ01OX1RYUFVDQUxfSU5JVF9UTVIsIDB4 MDAyMik7Cj4gKwljZG5zX3BoeV9yZWdfd3JpdGUoY2Ruc19waHksIENNTl9UWFBVQ0FMX0lURVJf VE1SLCAweDAwMDYpOwo+ICsJY2Ruc19waHlfcmVnX3dyaXRlKGNkbnNfcGh5LCBDTU5fVFhQVV9B REpfSU5JVF9UTVIsIDB4MDAyMik7Cj4gKwljZG5zX3BoeV9yZWdfd3JpdGUoY2Ruc19waHksIENN Tl9UWFBVX0FESl9JVEVSX1RNUiwgMHgwMDA2KTsKPiArCWNkbnNfcGh5X3JlZ193cml0ZShjZG5z X3BoeSwgQ01OX1RYUERDQUxfSU5JVF9UTVIsIDB4MDAyMik7Cj4gKwljZG5zX3BoeV9yZWdfd3Jp dGUoY2Ruc19waHksIENNTl9UWFBEQ0FMX0lURVJfVE1SLCAweDAwMDYpOwo+ICsJY2Ruc19waHlf cmVnX3dyaXRlKGNkbnNfcGh5LCBDTU5fVFhQRF9BREpfSU5JVF9UTVIsIDB4MDAyMik7Cj4gKwlj ZG5zX3BoeV9yZWdfd3JpdGUoY2Ruc19waHksIENNTl9UWFBEX0FESl9JVEVSX1RNUiwgMHgwMDA2 KTsKPiArCWNkbnNfcGh5X3JlZ193cml0ZShjZG5zX3BoeSwgQ01OX1JYQ0FMX0lOSVRfVE1SLCAw eDAwMjIpOwo+ICsJY2Ruc19waHlfcmVnX3dyaXRlKGNkbnNfcGh5LCBDTU5fUlhDQUxfSVRFUl9U TVIsIDB4MDAwNik7Cj4gKwljZG5zX3BoeV9yZWdfd3JpdGUoY2Ruc19waHksIENNTl9SWF9BREpf SU5JVF9UTVIsIDB4MDAyMik7Cj4gKwljZG5zX3BoeV9yZWdfd3JpdGUoY2Ruc19waHksIENNTl9S WF9BREpfSVRFUl9UTVIsIDB4MDAwNik7Cj4gKwo+ICsJZm9yIChrID0gMDsgayA8IG51bV9sYW5l czsgayA9IGsgKyAxKSB7Cj4gKwkJLyogUG93ZXIgc3RhdGUgbWFjaGluZSByZWdpc3RlcnMgKi8K PiArCQljZG5zX3BoeV9yZWdfd3JpdGUoY2Ruc19waHksIFhDVlJfUFNNX0NBTF9UTVIgIHwgKGsg PDwgOSksIAoweDAxNmQpOwo+ICsJCWNkbnNfcGh5X3JlZ193cml0ZShjZG5zX3BoeSwgWENWUl9Q U01fQTBJTl9UTVIgfCAoayA8PCA5KSwgCjB4MDE2ZCk7Cj4gKwkJLyogVHJhbnNjZWl2ZXIgY29u dHJvbCBhbmQgZGlhZ25vc3RpYyByZWdpc3RlcnMgKi8KPiArCQljZG5zX3BoeV9yZWdfd3JpdGUo Y2Ruc19waHksIFhDVlJfRElBR19MQU5FX0ZDTV9FTl9NR05fVE1SIAp8IChrIDw8IDkpLAo+IDB4 MDBhMik7ICsJCWNkbnNfcGh5X3JlZ193cml0ZShjZG5zX3BoeSwgClRYX0RJQUdfQkdSRUZfUFJF RFJWX0RFTEFZIHwgKGsgPDwKPiA5KSwgMHgwMDk3KTsgKwkJLyogVHJhbnNtaXR0ZXIgcmVjZWl2 ZXIgZGV0ZWN0IHJlZ2lzdGVycyAqLwo+ICsJCWNkbnNfcGh5X3JlZ193cml0ZShjZG5zX3BoeSwg VFhfUkNWREVUX0VOX1RNUiB8IChrIDw8IDkpLCAKMHgwYThjKTsKPiArCQljZG5zX3BoeV9yZWdf d3JpdGUoY2Ruc19waHksIFRYX1JDVkRFVF9TVF9UTVIgfCAoayA8PCA5KSwgCjB4MDAzNik7Cj4g Kwl9Cj4gKwo+ICsJY2Ruc19waHlfcmVnX3dyaXRlKGNkbnNfcGh5LCBUWF9ESUFHX0FDWUFfMCwg MSk7Cj4gKwljZG5zX3BoeV9yZWdfd3JpdGUoY2Ruc19waHksIFRYX0RJQUdfQUNZQV8xLCAxKTsK PiArCWNkbnNfcGh5X3JlZ193cml0ZShjZG5zX3BoeSwgVFhfRElBR19BQ1lBXzIsIDEpOwo+ICsJ Y2Ruc19waHlfcmVnX3dyaXRlKGNkbnNfcGh5LCBUWF9ESUFHX0FDWUFfMywgMSk7Cj4gK30KPiAr Cj4gK3N0YXRpYyB2b2lkIGhkcHR4X2RwX3BoeV9wbWFfY21uX3BsbDBfMjdtaHooc3RydWN0IGNk bnNfaGRwdHhfZHBfcGh5Cj4gKmNkbnNfcGh5KSArewo+ICsJdTMyIG51bV9sYW5lcyA9IGNkbnNf cGh5LT5udW1fbGFuZXM7Cj4gKwl1MzIgbGlua19yYXRlID0gY2Ruc19waHktPmxpbmtfcmF0ZTsK PiArCXUxNiB2YWw7Cj4gKwlpbnQgaW5kZXgsIGksIGs7Cj4gKwo+ICsJLyogRFAgUExMIGRhdGEg cmF0ZSAwLzEgY2xvY2sgZGl2aWRlciB2YWx1ZSAqLwo+ICsJdmFsID0gY2Ruc19waHlfcmVnX3Jl YWQoY2Ruc19waHksIFBIWV9IRFBfQ0xLX0NUTCk7Cj4gKwl2YWwgJj0gflBMTF9EQVRBX1JBVEVf Q0xLX0RJVl9NQVNLOwo+ICsJaWYgKGxpbmtfcmF0ZSA8PSBSQVRFXzJfNykKPiArCQl2YWwgfD0g RklFTERfUFJFUChQTExfREFUQV9SQVRFX0NMS19ESVZfTUFTSywKPiArCQkJCSAgUExMX0RBVEFf UkFURV9DTEtfRElWX0hCUik7Cj4gKwllbHNlCj4gKwkJdmFsIHw9IEZJRUxEX1BSRVAoUExMX0RB VEFfUkFURV9DTEtfRElWX01BU0ssCj4gKwkJCQkgIFBMTF9EQVRBX1JBVEVfQ0xLX0RJVl9IQlIy KTsKPiArCWNkbnNfcGh5X3JlZ193cml0ZShjZG5zX3BoeSwgUEhZX0hEUF9DTEtfQ1RMLCB2YWwp Owo+ICsKPiArCS8qIEhpZ2ggc3BlZWQgY2xvY2sgMC8xIGRpdiAqLwo+ICsJdmFsID0gY2Ruc19w aHlfcmVnX3JlYWQoY2Ruc19waHksIENNTl9ESUFHX0hTQ0xLX1NFTCk7Cj4gKwl2YWwgJj0gfihI U0NMSzFfU0VMX01BU0sgfCBIU0NMSzBfU0VMX01BU0spOwo+ICsJaWYgKGxpbmtfcmF0ZSA8PSBS QVRFXzJfNykgewo+ICsJCXZhbCB8PSBGSUVMRF9QUkVQKEhTQ0xLMV9TRUxfTUFTSywgSFNDTEtf UExMMF9ESVYyKTsKPiArCQl2YWwgfD0gRklFTERfUFJFUChIU0NMSzBfU0VMX01BU0ssIEhTQ0xL X1BMTDBfRElWMik7Cj4gKwl9Cj4gKwljZG5zX3BoeV9yZWdfd3JpdGUoY2Ruc19waHksIENNTl9E SUFHX0hTQ0xLX1NFTCwgdmFsKTsKPiArCj4gKwlmb3IgKGsgPSAwOyBrIDwgbnVtX2xhbmVzOyBr KyspIHsKPiArCQl2YWwgPSBjZG5zX3BoeV9yZWdfcmVhZChjZG5zX3BoeSwgKFhDVlJfRElBR19I U0NMS19TRUwgfCAKKGsgPDwgOSkpKTsKPiArCQl2YWwgJj0gfkhTQ0xLX1NFTF9NT0RFM19NQVNL Owo+ICsJCWlmIChsaW5rX3JhdGUgPD0gUkFURV8yXzcpCj4gKwkJCXZhbCB8PSBGSUVMRF9QUkVQ KEhTQ0xLX1NFTF9NT0RFM19NQVNLLCAKSFNDTEtfU0VMX01PREUzX0hTQ0xLMSk7Cj4gKwkJY2Ru c19waHlfcmVnX3dyaXRlKGNkbnNfcGh5LCAoWENWUl9ESUFHX0hTQ0xLX1NFTCB8IChrIDw8IAo5 KSksIHZhbCk7Cj4gKwl9Cj4gKwo+ICsJLyogRFAgUEhZIFBMTCAyN01IeiBjb25maWd1cmF0aW9u ICovCj4gKwlpbmRleCA9IGxpbmtfcmF0ZV9pbmRleChsaW5rX3JhdGUpOwo+ICsJZm9yIChpID0g MDsgaSA8IEFSUkFZX1NJWkUocGh5X3BsbF8yN21fY2ZnKTsgaSsrKQo+ICsJCWNkbnNfcGh5X3Jl Z193cml0ZShjZG5zX3BoeSwgcGh5X3BsbF8yN21fY2ZnW2ldLmFkZHIsCj4gKwkJCQkgICBwaHlf cGxsXzI3bV9jZmdbaV0udmFsW2luZGV4XSk7Cj4gKwo+ICsJLyogVHJhbnNjZWl2ZXIgY29udHJv bCBhbmQgZGlhZ25vc3RpYyByZWdpc3RlcnMgKi8KPiArCWZvciAoayA9IDA7IGsgPCBudW1fbGFu ZXM7IGsrKykgewo+ICsJCXZhbCA9IGNkbnNfcGh5X3JlZ19yZWFkKGNkbnNfcGh5LCAoWENWUl9E SUFHX1BMTERSQ19DVFJMIHwgCihrIDw8IDkpKSk7Cj4gKwkJdmFsICY9IH4oRFBMTF9EQVRBX1JB VEVfRElWX01PREUzX01BU0sgfCAKRFBMTF9DTEtfU0VMX01PREUzKTsKPiArCQlpZiAobGlua19y YXRlIDw9IFJBVEVfMl83KQo+ICsJCQl2YWwgfD0gRklFTERfUFJFUChEUExMX0RBVEFfUkFURV9E SVZfTU9ERTNfTUFTSywgCjIpOwo+ICsJCWVsc2UKPiArCQkJdmFsIHw9IEZJRUxEX1BSRVAoRFBM TF9EQVRBX1JBVEVfRElWX01PREUzX01BU0ssIAoxKTsKPiArCQljZG5zX3BoeV9yZWdfd3JpdGUo Y2Ruc19waHksIChYQ1ZSX0RJQUdfUExMRFJDX0NUUkwgfCAoayAKPDwgOSkpLCB2YWwpOwo+ICsJ fQo+ICsKPiArCWZvciAoayA9IDA7IGsgPCBudW1fbGFuZXM7IGsgPSBrICsgMSkgewo+ICsJCS8q IFBvd2VyIHN0YXRlIG1hY2hpbmUgcmVnaXN0ZXJzICovCj4gKwkJY2Ruc19waHlfcmVnX3dyaXRl KGNkbnNfcGh5LCAoWENWUl9QU01fUkNUUkwgfCAoayA8PCA5KSksIAoweGJlZmMpOwo+ICsJCWNk bnNfcGh5X3JlZ193cml0ZShjZG5zX3BoeSwgKFRYX1BTQ19BMCB8IChrIDw8IDkpKSwgCjB4Njc5 OSk7Cj4gKwkJY2Ruc19waHlfcmVnX3dyaXRlKGNkbnNfcGh5LCAoVFhfUFNDX0ExIHwgKGsgPDwg OSkpLCAKMHg2Nzk4KTsKPiArCQljZG5zX3BoeV9yZWdfd3JpdGUoY2Ruc19waHksIChUWF9QU0Nf QTIgfCAoayA8PCA5KSksIAoweDAwOTgpOwo+ICsJCWNkbnNfcGh5X3JlZ193cml0ZShjZG5zX3Bo eSwgKFRYX1BTQ19BMyB8IChrIDw8IDkpKSwgCjB4MDA5OCk7Cj4gKwkJLyogUmVjZWl2ZXIgY2Fs aWJyYXRpb24gcG93ZXIgc3RhdGUgZGVmaW5pdGlvbiByZWdpc3RlciAqLwo+ICsJCXZhbCA9IGNk bnNfcGh5X3JlZ19yZWFkKGNkbnNfcGh5LCBSWF9QU0NfQ0FMIHwgKGsgPDwgOSkpOwo+ICsJCXZh bCAmPSAweGZmYmI7Cj4gKwkJY2Ruc19waHlfcmVnX3dyaXRlKGNkbnNfcGh5LCAoUlhfUFNDX0NB TCB8IChrIDw8IDkpKSwgCnZhbCk7Cj4gKwkJdmFsID0gY2Ruc19waHlfcmVnX3JlYWQoY2Ruc19w aHksIFJYX1BTQ19BMCB8IChrIDw8IDkpKTsKPiArCQl2YWwgJj0gMHhmZmJiOwo+ICsJCWNkbnNf cGh5X3JlZ193cml0ZShjZG5zX3BoeSwgKFJYX1BTQ19BMCB8IChrIDw8IDkpKSwgdmFsKTsKPiAr CX0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaGRwdHhfZHBfcGh5X3JlZl9jbG9ja190eXBlKHN0 cnVjdCBjZG5zX2hkcHR4X2RwX3BoeSAqY2Ruc19waHkpCj4gK3sKPiArCXUzMiB2YWw7Cj4gKwo+ ICsJdmFsID0gY2Ruc19waHlfcmVnX3JlYWQoY2Ruc19waHksIFBIWV9QTUFfQ01OX0NUUkwxKTsK PiArCXZhbCAmPSB+Q01BX1JFRl9DTEtfU0VMX01BU0s7Cj4gKwkvKgo+ICsJICogc2luZ2xlIGVu ZGVkIHJlZmVyZW5jZSBjbG9jayAodmFsIHw9IDB4MDAzMCk7Cj4gKwkgKiBkaWZmZXJlbnRpYWwg Y2xvY2sgICh2YWwgfD0gMHgwMDAwKTsKPiArCSAqCj4gKwkgKiBmb3IgZGlmZmVyZW50aWFsIGNs b2NrIG9uIHRoZSByZWZjbGtfcCBhbmQKPiArCSAqIHJlZmNsa19tIG9mZiBjaGlwIHBpbnM6IENN Tl9ESUFHX0FDWUFbOF09MSdiMQo+ICsJICogY2Ruc19waHlfcmVnX3dyaXRlKGNkbnNfcGh5LCBD TU5fRElBR19BQ1lBLCAweDAxMDApOwo+ICsJICovCj4gKwl2YWwgfD0gRklFTERfUFJFUChDTUFf UkVGX0NMS19TRUxfTUFTSywgMyk7Cj4gKwljZG5zX3BoeV9yZWdfd3JpdGUoY2Ruc19waHksIFBI WV9QTUFfQ01OX0NUUkwxLCB2YWwpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHdhaXRfZm9yX2Fj ayhzdHJ1Y3QgY2Ruc19oZHB0eF9kcF9waHkgKmNkbnNfcGh5LCB1MzIgcmVnLCB1MzIKPiBtYXNr LCArCQkJY29uc3QgY2hhciAqZXJyX21zZykKPiArewo+ICsJdTMyIHZhbCwgaTsKPiArCj4gKwlm b3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgewo+ICsJCXZhbCA9IGNkbnNfcGh5X3JlZ19yZWFkKGNk bnNfcGh5LCByZWcpOwo+ICsJCWlmICh2YWwgJiBtYXNrKQo+ICsJCQlyZXR1cm4gMDsKPiArCQlt c2xlZXAoMjApOwo+ICsJfQo+ICsKPiArCWRldl9lcnIoY2Ruc19waHktPmRldiwgIiVzXG4iLCBl cnJfbXNnKTsKPiArCXJldHVybiAtMTsKPiArfQo+ICsKPiArc3RhdGljIGludCB3YWl0X2Zvcl9h Y2tfY2xlYXIoc3RydWN0IGNkbnNfaGRwdHhfZHBfcGh5ICpjZG5zX3BoeSwgdTMyIHJlZywKPiB1 MzIgbWFzaywgKwkJCSAgICAgIGNvbnN0IGNoYXIgKmVycl9tc2cpCj4gK3sKPiArCXUzMiB2YWws IGk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKPiArCQl2YWwgPSBjZG5zX3Bo eV9yZWdfcmVhZChjZG5zX3BoeSwgcmVnKTsKPiArCQlpZiAoISh2YWwgJiBtYXNrKSkKPiArCQkJ cmV0dXJuIDA7Cj4gKwkJbXNsZWVwKDIwKTsKPiArCX0KPiArCj4gKwlkZXZfZXJyKGNkbnNfcGh5 LT5kZXYsICIlc1xuIiwgZXJyX21zZyk7Cj4gKwlyZXR1cm4gLTE7Cj4gK30KPiArCj4gK3N0YXRp YyBpbnQgaGRwdHhfZHBfcGh5X3Bvd2VyX3VwKHN0cnVjdCBjZG5zX2hkcHR4X2RwX3BoeSAqY2Ru c19waHkpCj4gK3sKPiArCXUzMiB2YWw7Cj4gKwo+ICsJLyogRW5hYmxlIEhEUCBQTEzigJlzIGZv ciBoaWdoIHNwZWVkIGNsb2NrcyAqLwo+ICsJdmFsID0gY2Ruc19waHlfcmVnX3JlYWQoY2Ruc19w aHksIFBIWV9IRFBfQ0xLX0NUTCk7Cj4gKwl2YWwgfD0gUExMX0VOOwo+ICsJY2Ruc19waHlfcmVn X3dyaXRlKGNkbnNfcGh5LCBQSFlfSERQX0NMS19DVEwsIHZhbCk7Cj4gKwlpZiAod2FpdF9mb3Jf YWNrKGNkbnNfcGh5LCBQSFlfSERQX0NMS19DVEwsIFBMTF9SRUFEWSwKPiArCQkJICJXYWl0IFBM TCBBY2sgZmFpbGVkIikpCj4gKwkJcmV0dXJuIC0xOwo+ICsKPiArCS8qIEVuYWJsZSBIRFAgUExM 4oCZcyBkYXRhIHJhdGUgYW5kIGZ1bGwgcmF0ZSBjbG9ja3Mgb3V0IG9mIFBNQS4gKi8KPiArCXZh bCA9IGNkbnNfcGh5X3JlZ19yZWFkKGNkbnNfcGh5LCBQSFlfSERQX0NMS19DVEwpOwo+ICsJdmFs IHw9IFBMTF9DTEtfRU47Cj4gKwljZG5zX3BoeV9yZWdfd3JpdGUoY2Ruc19waHksIFBIWV9IRFBf Q0xLX0NUTCwgdmFsKTsKPiArCWlmICh3YWl0X2Zvcl9hY2soY2Ruc19waHksIFBIWV9IRFBfQ0xL X0NUTCwgUExMX0NMS19FTl9BQ0ssCj4gKwkJCSAiV2FpdCBQTEwgY2xvY2sgZW5hYmxlIEFDSyBm YWlsZWQiKSkKPiArCQlyZXR1cm4gLTE7Cj4gKwo+ICsJLyogQ29uZmlndXJlIFBIWSBpbiBBMiBN b2RlICovCj4gKwljZG5zX3BoeV9yZWdfd3JpdGUoY2Ruc19waHksIFBIWV9IRFBfTU9ERV9DVFJM LCBQT1dFUl9TVEFURV9BMik7Cj4gKwlpZiAod2FpdF9mb3JfYWNrKGNkbnNfcGh5LCBQSFlfSERQ X01PREVfQ1RSTCwgUE9XRVJfU1RBVEVfQTJfQUNLLAo+ICsJCQkgIldhaXQgQTIgQWNrIGZhaWxl ZCIpKQo+ICsJCXJldHVybiAtMTsKPiArCj4gKwkvKiBDb25maWd1cmUgUEhZIGluIEEwIG1vZGUg KFBIWSBtdXN0IGJlIGluIHRoZSBBMCBwb3dlcgo+ICsJICogc3RhdGUgaW4gb3JkZXIgdG8gdHJh bnNtaXQgZGF0YSkKPiArCSAqLwo+ICsJY2Ruc19waHlfcmVnX3dyaXRlKGNkbnNfcGh5LCBQSFlf SERQX01PREVfQ1RSTCwgUE9XRVJfU1RBVEVfQTApOwo+ICsJaWYgKHdhaXRfZm9yX2FjayhjZG5z X3BoeSwgUEhZX0hEUF9NT0RFX0NUUkwsIFBPV0VSX1NUQVRFX0EwX0FDSywKPiArCQkJICJXYWl0 IEEwIEFjayBmYWlsZWQiKSkKPiArCQlyZXR1cm4gLTE7Cj4gKwo+ICsJY2Ruc19waHktPnBvd2Vy X3VwID0gdHJ1ZTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaGRw dHhfZHBfcGh5X3Bvd2VyX2Rvd24oc3RydWN0IGNkbnNfaGRwdHhfZHBfcGh5ICpjZG5zX3BoeSkK PiArewo+ICsJdTE2IHZhbDsKPiArCj4gKwlpZiAoIWNkbnNfcGh5LT5wb3dlcl91cCkKPiArCQly ZXR1cm47Cj4gKwo+ICsJLyogUGxhY2UgdGhlIFBIWSBsYW5lcyBpbiB0aGUgQTMgcG93ZXIgc3Rh dGUuICovCj4gKwljZG5zX3BoeV9yZWdfd3JpdGUoY2Ruc19waHksIFBIWV9IRFBfTU9ERV9DVFJM LCBQT1dFUl9TVEFURV9BMyk7Cj4gKwlpZiAod2FpdF9mb3JfYWNrKGNkbnNfcGh5LCBQSFlfSERQ X01PREVfQ1RSTCwgUE9XRVJfU1RBVEVfQTNfQUNLLAo+ICsJCQkgIldhaXQgQTMgQWNrIGZhaWxl ZCIpKQo+ICsJCXJldHVybjsKPiArCj4gKwkvKiBEaXNhYmxlIEhEUCBQTEzigJlzIGRhdGEgcmF0 ZSBhbmQgZnVsbCByYXRlIGNsb2NrcyBvdXQgb2YgUE1BLiAqLwo+ICsJdmFsID0gY2Ruc19waHlf cmVnX3JlYWQoY2Ruc19waHksIFBIWV9IRFBfQ0xLX0NUTCk7Cj4gKwl2YWwgJj0gflBMTF9DTEtf RU47Cj4gKwljZG5zX3BoeV9yZWdfd3JpdGUoY2Ruc19waHksIFBIWV9IRFBfQ0xLX0NUTCwgdmFs KTsKPiArCWlmICh3YWl0X2Zvcl9hY2tfY2xlYXIoY2Ruc19waHksIFBIWV9IRFBfQ0xLX0NUTCwg UExMX0NMS19FTl9BQ0ssCj4gKwkJCSAgICAgICAiV2FpdCBQTEwgY2xvY2sgQWNrIGNsZWFyIGZh aWxlZCIpKQo+ICsJCXJldHVybjsKPiArCj4gKwkvKiBEaXNhYmxlIEhEUCBQTEzigJlzIGZvciBo aWdoIHNwZWVkIGNsb2NrcyAqLwo+ICsJdmFsID0gY2Ruc19waHlfcmVnX3JlYWQoY2Ruc19waHks IFBIWV9IRFBfQ0xLX0NUTCk7Cj4gKwl2YWwgJj0gflBMTF9FTjsKPiArCWNkbnNfcGh5X3JlZ193 cml0ZShjZG5zX3BoeSwgUEhZX0hEUF9DTEtfQ1RMLCB2YWwpOwo+ICsJaWYgKHdhaXRfZm9yX2Fj a19jbGVhcihjZG5zX3BoeSwgUEhZX0hEUF9DTEtfQ1RMLCBQTExfUkVBRFksCj4gKwkJCSAgICAg ICAiV2FpdCBQTEwgQWNrIGNsZWFyIGZhaWxlZCIpKQo+ICsJCXJldHVybjsKPiArfQo+ICsKPiAr c3RhdGljIGludCBjZG5zX2hkcHR4X2RwX3BoeV9vbihzdHJ1Y3QgcGh5ICpwaHkpCj4gK3sKPiAr CXN0cnVjdCBjZG5zX2hkcHR4X2RwX3BoeSAqY2Ruc19waHkgPSBwaHlfZ2V0X2RydmRhdGEocGh5 KTsKPiArCj4gKwlyZXR1cm4gaGRwdHhfZHBfcGh5X3Bvd2VyX3VwKGNkbnNfcGh5KTsKPiArfQo+ ICsKPiArc3RhdGljIGludCBjZG5zX2hkcHR4X2RwX3BoeV9vZmYoc3RydWN0IHBoeSAqcGh5KQo+ ICt7Cj4gKwlzdHJ1Y3QgY2Ruc19oZHB0eF9kcF9waHkgKmNkbnNfcGh5ID0gcGh5X2dldF9kcnZk YXRhKHBoeSk7Cj4gKwo+ICsJaGRwdHhfZHBfcGh5X3Bvd2VyX2Rvd24oY2Ruc19waHkpOwo+ICsK PiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGNkbnNfaGRwdHhfZHBfcGh5X2lu aXQoc3RydWN0IHBoeSAqcGh5KQo+ICt7Cj4gKwlzdHJ1Y3QgY2Ruc19oZHB0eF9kcF9waHkgKmNk bnNfcGh5ID0gcGh5X2dldF9kcnZkYXRhKHBoeSk7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWhkcHR4 X2RwX3BoeV9yZWZfY2xvY2tfdHlwZShjZG5zX3BoeSk7Cj4gKwo+ICsJLyogUEhZIHBvd2VyIHVw ICovCj4gKwlyZXQgPSBoZHB0eF9kcF9waHlfcG93ZXJfdXAoY2Ruc19waHkpOwo+ICsJaWYgKHJl dCA8IDApCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwloZHB0eF9kcF9hdXhfY2ZnKGNkbnNfcGh5 KTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGNkbnNfaGRwdHhf ZHBfY29uZmlndXJlKHN0cnVjdCBwaHkgKnBoeSwKPiArCQkJCSAgIHVuaW9uIHBoeV9jb25maWd1 cmVfb3B0cyAqb3B0cykKPiArewo+ICsJc3RydWN0IGNkbnNfaGRwdHhfZHBfcGh5ICpjZG5zX3Bo eSA9IHBoeV9nZXRfZHJ2ZGF0YShwaHkpOwo+ICsJaW50IHJldDsKPiArCj4gKwljZG5zX3BoeS0+ bGlua19yYXRlID0gb3B0cy0+ZHAubGlua19yYXRlOwo+ICsJY2Ruc19waHktPm51bV9sYW5lcyA9 IG9wdHMtPmRwLmxhbmVzOwo+ICsKPiArCWlmIChjZG5zX3BoeS0+bGlua19yYXRlID4gTUFYX0xJ TktfUkFURSkgewo+ICsJCWRldl9lcnIoY2Ruc19waHktPmRldiwgIkxpbmsgUmF0ZSglZCkgTm90 IHN1cHBvcnRlZFxuIiwKPiBjZG5zX3BoeS0+bGlua19yYXRlKTsgKwkJcmV0dXJuIGZhbHNlOwo+ ICsJfQo+ICsKPiArCS8qIERpc2FibGUgcGh5IGNsb2NrIGlmIFBIWSBpbiBwb3dlciB1cCBzdGF0 ZSAqLwo+ICsJaGRwdHhfZHBfcGh5X3Bvd2VyX2Rvd24oY2Ruc19waHkpOwo+ICsKPiArCWlmIChj ZG5zX3BoeS0+cmVmX2Nsa19yYXRlID09IFJFRl9DTEtfMjdNSFopIHsKPiArCQloZHB0eF9kcF9w aHlfcG1hX2Ntbl9jZmdfMjdtaHooY2Ruc19waHkpOwo+ICsJCWhkcHR4X2RwX3BoeV9wbWFfY21u X3BsbDBfMjdtaHooY2Ruc19waHkpOwo+ICsJfSBlbHNlIHsKPiArCQlkZXZfZXJyKGNkbnNfcGh5 LT5kZXYsICJOb3Qgc3VwcG9ydCByZWYgY2xvY2sgcmF0ZVxuIik7Cj4gKwl9Cj4gKwo+ICsJLyog UEhZIHBvd2VyIHVwICovCj4gKwlyZXQgPSBoZHB0eF9kcF9waHlfcG93ZXJfdXAoY2Ruc19waHkp Owo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5 X29wcyBjZG5zX2hkcHR4X2RwX3BoeV9vcHMgPSB7Cj4gKwkuaW5pdCA9IGNkbnNfaGRwdHhfZHBf cGh5X2luaXQsCj4gKwkuY29uZmlndXJlID0gY2Ruc19oZHB0eF9kcF9jb25maWd1cmUsCj4gKwku cG93ZXJfb24gPSBjZG5zX2hkcHR4X2RwX3BoeV9vbiwKPiArCS5wb3dlcl9vZmYgPSBjZG5zX2hk cHR4X2RwX3BoeV9vZmYsCj4gKwkub3duZXIgPSBUSElTX01PRFVMRSwKPiArfTsKPiArCj4gK3N0 YXRpYyBpbnQgY2Ruc19oZHB0eF9kcF9waHlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldikKPiArewo+ICsJc3RydWN0IGNkbnNfaGRwdHhfZHBfcGh5ICpjZG5zX3BoeTsKPiArCXN0 cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7Cj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5v ZGUgPSBkZXYtPm9mX25vZGU7Cj4gKwlzdHJ1Y3QgcGh5X3Byb3ZpZGVyICpwaHlfcHJvdmlkZXI7 Cj4gKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKPiArCXN0cnVjdCBwaHkgKnBoeTsKPiArCWludCBy ZXQ7Cj4gKwo+ICsJY2Ruc19waHkgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmNkbnNfcGh5 KSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIWNkbnNfcGh5KQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ ICsKPiArCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGNkbnNfcGh5KTsKPiArCWNkbnNfcGh5LT5kZXYg PSBkZXY7Cj4gKwltdXRleF9pbml0KCZjZG5zX3BoeS0+bWJveF9tdXRleCk7Cj4gKwo+ICsJcmVz ID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKPiArCWlm ICghcmVzKQo+ICsJCXJldHVybiAtRU5PREVWOwo+ICsJY2Ruc19waHktPnJlZ3MgPSBkZXZtX2lv cmVtYXAoZGV2LCByZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOwo+ICsJaWYgKElTX0VS UihjZG5zX3BoeS0+cmVncykpCj4gKwkJcmV0dXJuIFBUUl9FUlIoY2Ruc19waHktPnJlZ3MpOwo+ ICsKPiArCXBoeSA9IGRldm1fcGh5X2NyZWF0ZShkZXYsIG5vZGUsICZjZG5zX2hkcHR4X2RwX3Bo eV9vcHMpOwo+ICsJaWYgKElTX0VSUihwaHkpKQo+ICsJCXJldHVybiBQVFJfRVJSKHBoeSk7Cj4g Kwo+ICsJcGh5LT5hdHRycy5tb2RlID0gUEhZX01PREVfRFA7Cj4gKwljZG5zX3BoeS0+cGh5ID0g cGh5Owo+ICsJcGh5X3NldF9kcnZkYXRhKHBoeSwgY2Ruc19waHkpOwo+ICsKPiArCXJldCA9IGhk cHR4X2RwX2Nsa19lbmFibGUoY2Ruc19waHkpOwo+ICsJaWYgKHJldCkgewo+ICsJCWRldl9lcnIo ZGV2LCAiSW5pdCBjbGsgZmFpbFxuIik7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ ICsJcGh5X3Byb3ZpZGVyID0gZGV2bV9vZl9waHlfcHJvdmlkZXJfcmVnaXN0ZXIoZGV2LCAKb2Zf cGh5X3NpbXBsZV94bGF0ZSk7Cj4gKwlpZiAoSVNfRVJSKHBoeV9wcm92aWRlcikpIHsKPiArCQly ZXQgPSBQVFJfRVJSKHBoeV9wcm92aWRlcik7Cj4gKwkJZ290byBjbGtfZGlzYWJsZTsKPiArCX0K PiArCj4gKwlyZXR1cm4gMDsKPiArCj4gK2Nsa19kaXNhYmxlOgo+ICsJaGRwdHhfZHBfY2xrX2Rp c2FibGUoY2Ruc19waHkpOwo+ICsKPiArCXJldHVybiAtRUlOVkFMOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW50IGNkbnNfaGRwdHhfZHBfcGh5X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgY2Ruc19oZHB0eF9kcF9waHkgKmNkbnNfcGh5ID0gcGxhdGZv cm1fZ2V0X2RydmRhdGEocGRldik7Cj4gKwo+ICsJaGRwdHhfZHBfY2xrX2Rpc2FibGUoY2Ruc19w aHkpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9m X2RldmljZV9pZCBjZG5zX2hkcHR4X2RwX3BoeV9vZl9tYXRjaFtdID0gewo+ICsJey5jb21wYXRp YmxlID0gImZzbCxpbXg4bXEtZHAtcGh5IiB9LAo+ICsJeyAvKiBzZW50aW5lbCAqLyB9Cj4gK307 Cj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGNkbnNfaGRwdHhfZHBfcGh5X29mX21hdGNoKTsK PiArCj4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGNkbnNfaGRwdHhfZHBfcGh5X2Ry aXZlciA9IHsKPiArCS5wcm9iZSA9IGNkbnNfaGRwdHhfZHBfcGh5X3Byb2JlLAo+ICsJLnJlbW92 ZSA9IGNkbnNfaGRwdHhfZHBfcGh5X3JlbW92ZSwKPiArCS5kcml2ZXIgPSB7Cj4gKwkJLm5hbWUJ PSAiY2Rucy1oZHB0eC1kcC1waHkiLAo+ICsJCS5vZl9tYXRjaF90YWJsZQk9IGNkbnNfaGRwdHhf ZHBfcGh5X29mX21hdGNoLAo+ICsJfQo+ICt9Owo+ICttb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGNk bnNfaGRwdHhfZHBfcGh5X2RyaXZlcik7Cj4gKwo+ICtNT0RVTEVfQVVUSE9SKCJTYW5kb3IgWXUg PHNhbmRvci55dUBueHAuY29tPiIpOwo+ICtNT0RVTEVfREVTQ1JJUFRJT04oIkNhZGVuY2UgSERQ LVRYIERpc3BsYXlQb3J0IFBIWSBkcml2ZXIiKTsKPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwoK Ci0tIApUUS1TeXN0ZW1zIEdtYkggfCBNw7xobHN0cmHDn2UgMiwgR3V0IERlbGxpbmcgfCA4MjIy OSBTZWVmZWxkLCBHZXJtYW55CkFtdHNnZXJpY2h0IE3DvG5jaGVuLCBIUkIgMTA1MDE4Ckdlc2No w6RmdHNmw7xocmVyOiBEZXRsZWYgU2NobmVpZGVyLCBSw7xkaWdlciBTdGFobCwgU3RlZmFuIFNj aG5laWRlcgpodHRwOi8vd3d3LnRxLWdyb3VwLmNvbS8KCgoKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QK bGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRl YWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=