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 E018EC6FA82 for ; Fri, 23 Sep 2022 15:45:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:From:References:Cc:To: Subject:MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=7ttikV3CZb9fbAMZyrl4WbtMHgZaKbISljRSTb/o70c=; b=4afFvc7tLSXb2c ILxiWalLE64hDvnqbI+qbvLereC+nhR6yighoXHSY0nCo1ciYkkmcrhb9yssnKoLzmdcUum4eFw0P 7W4aiJpEvyxdHwDFggFBT/SX2XrY2Qp+tx4ToBONzvFUBM4/Y7ePJIVqtBbj/ziCh9D/XYv0GmGy8 vLGmgNoZwX6YSPAFxLjYPYEN1LVArWVczQXHtJTGNYMvCNfl9rPKwsiZvLsN02gAOhgwNnrGPmxyF FeyesEhP93nkgFfu3hxVuUXGq5u1F0GQPkLmeg6hLVtyziEsdx/jeO2+XfSvSV2YiCR5rpIcE/+2b OyXkenO73uMo9FGFURGw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1obkqa-004rlO-RU; Fri, 23 Sep 2022 15:44:12 +0000 Received: from out30-131.freemail.mail.aliyun.com ([115.124.30.131]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1obkqV-004rha-74 for linux-arm-kernel@lists.infradead.org; Fri, 23 Sep 2022 15:44:11 +0000 X-Alimail-AntiSpam: AC=PASS;BC=-1|-1;BR=01201311R161e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=ay29a033018046059;MF=xueshuai@linux.alibaba.com;NM=1;PH=DS;RN=11;SR=0;TI=SMTPD_---0VQXPulh_1663947837; Received: from 30.240.121.51(mailfrom:xueshuai@linux.alibaba.com fp:SMTPD_---0VQXPulh_1663947837) by smtp.aliyun-inc.com; Fri, 23 Sep 2022 23:43:58 +0800 Message-ID: Date: Fri, 23 Sep 2022 23:43:56 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Thunderbird/91.13.0 Subject: Re: [PATCH v1 2/3] drivers/perf: add DesignWare PCIe PMU driver Content-Language: en-US To: Yicong Yang Cc: yangyicong@hisilicon.com, rdunlap@infradead.org, will@kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, robin.murphy@arm.com, mark.rutland@arm.com, baolin.wang@linux.alibaba.com, zhuo.song@linux.alibaba.com, Jonathan.Cameron@Huawei.com References: <20220917121036.14864-1-xueshuai@linux.alibaba.com> <20220917121036.14864-3-xueshuai@linux.alibaba.com> From: Shuai Xue In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220923_084407_644798_C0684B9F X-CRM114-Status: GOOD ( 27.75 ) 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 CgrlnKggMjAyMi85LzIzIEFNMTE6MzAsIFlpY29uZyBZYW5nIOWGmemBkzoKPiBPbiAyMDIyLzkv MTcgMjA6MTAsIFNodWFpIFh1ZSB3cm90ZToKPj4gVGhpcyBjb21taXQgYWRkcyB0aGUgUENJZSBQ ZXJmb3JtYW5jZSBNb25pdG9yaW5nIFVuaXQgKFBNVSkgZHJpdmVyIHN1cHBvcnQKPj4gZm9yIFQt SGVhZCBZaXRpYW4gU29DIGNoaXAuIFlpdGlhbiBpcyBiYXNlZCBvbiB0aGUgU3lub3BzeXMgUENJ IEV4cHJlc3MKPj4gQ29yZSBjb250cm9sbGVyIElQIHdoaWNoIHByb3ZpZGVzIHN0YXRpc3RpY3Mg ZmVhdHVyZS4gVGhlIFBNVSBpcyBub3QgYSBQQ0llCj4+IFJvb3QgQ29tcGxleCBpbnRlZ3JhdGVk IEVuZCBQb2ludChSQ2lFUCkgZGV2aWNlIGJ1dCBvbmx5IHJlZ2lzdGVyIGNvdW50ZXJzCj4+IHBy b3ZpZGVkIGJ5IGVhY2ggUENJZSBSb290IFBvcnQuCj4+Cj4+IFRvIGZhY2lsaXRhdGUgY29sbGVj dGlvbiBvZiBzdGF0aXN0aWNzIHRoZSBjb250cm9sbGVyIHByb3ZpZGVzIHRoZQo+PiBmb2xsb3dp bmcgdHdvIGZlYXR1cmVzIGZvciBlYWNoIFJvb3QgUG9ydDoKPj4KPj4gLSBUaW1lIEJhc2VkIEFu YWx5c2lzIChSWC9UWCBkYXRhIHRocm91Z2hwdXQgYW5kIHRpbWUgc3BlbnQgaW4gZWFjaAo+PiAg IGxvdy1wb3dlciBMVFNTTSBzdGF0ZSkKPj4gLSBFdmVudCBjb3VudGVycyAoRXJyb3IgYW5kIE5v bi1FcnJvciBmb3IgbGFuZXMpCj4+Cj4+IE5vdGUsIG9ubHkgb25lIGNvdW50ZXIgZm9yIGVhY2gg dHlwZS4KPj4KPj4gVGhpcyBkcml2ZXIgYWRkIFBNVSBkZXZpY2VzIGZvciBlYWNoIFBDSWUgUm9v dCBQb3J0LiBBbmQgdGhlIFBNVSBkZXZpY2UgaXMKPj4gbmFtZWQgYmFzZWQgdGhlIEJERiBvZiBS b290IFBvcnQuIEZvciBleGFtcGxlLAo+Pgo+PiAgICAgMTA6MDAuMCBQQ0kgYnJpZGdlOiBEZXZp Y2UgMWRlZDo4MDAwIChyZXYgMDEpCj4+Cj4+IHRoZSBQTVUgZGV2aWNlIG5hbWUgZm9yIHRoaXMg Um9vdCBQb3J0IGlzIHBjaWVfYmRmXzEwMDAwMC4KPj4KPj4gRXhhbXBsZSB1c2FnZSBvZiBjb3Vu dGluZyBQQ0llIFJYIFRMUCBkYXRhIHBheWxvYWQgKFVuaXRzIG9mIDE2IGJ5dGVzKTo6Cj4+Cj4+ ICAgICAkIyBwZXJmIHN0YXQgLWEgLWUgcGNpZV9iZGZfMjAwL1J4X1BDSWVfVExQX0RhdGFfUGF5 bG9hZC8KPj4KPj4gYXZlcmFnZSBSWCBiYW5kd2lkdGggY2FuIGJlIGNhbGN1bGF0ZWQgbGlrZSB0 aGlzOgo+Pgo+PiAgICAgUENJZSBUWCBCYW5kd2lkdGggPSBQQ0lFX1RYX0RBVEEgKiAxNkIgLyBN ZWFzdXJlX1RpbWVfV2luZG93Cj4+Cj4+IFNpZ25lZC1vZmYtYnk6IFNodWFpIFh1ZSA8eHVlc2h1 YWlAbGludXguYWxpYmFiYS5jb20+Cj4+IC0tLQo+PiAgZHJpdmVycy9wZXJmL0tjb25maWcgICAg ICAgIHwgICA3ICsKPj4gIGRyaXZlcnMvcGVyZi9NYWtlZmlsZSAgICAgICB8ICAgMSArCj4+ICBk cml2ZXJzL3BlcmYvZHdjX3BjaWVfcG11LmMgfCA5NzYgKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrCj4+ICAzIGZpbGVzIGNoYW5nZWQsIDk4NCBpbnNlcnRpb25zKCspCj4+ICBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9wZXJmL2R3Y19wY2llX3BtdS5jCj4+Cj4+IGRpZmYg LS1naXQgYS9kcml2ZXJzL3BlcmYvS2NvbmZpZyBiL2RyaXZlcnMvcGVyZi9LY29uZmlnCj4+IGlu ZGV4IDFlMmQ2OTQ1Mzc3MS4uMTFhZTk5ZGU1YmJmIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL3Bl cmYvS2NvbmZpZwo+PiArKysgYi9kcml2ZXJzL3BlcmYvS2NvbmZpZwo+PiBAQCAtMTkyLDQgKzE5 MiwxMSBAQCBjb25maWcgTUFSVkVMTF9DTjEwS19ERFJfUE1VCj4+ICAJICBFbmFibGUgcGVyZiBz dXBwb3J0IGZvciBNYXJ2ZWxsIEREUiBQZXJmb3JtYW5jZSBtb25pdG9yaW5nCj4+ICAJICBldmVu dCBvbiBDTjEwSyBwbGF0Zm9ybS4KPj4gIAo+PiArY29uZmlnIENPTkZJR19EV0NfUENJRV9QTVUK Pj4gKwl0cmlzdGF0ZSAiRW5hYmxlIFN5bm9wc3lzIERlc2lnbldhcmUgUENJZSBQTVUgU3VwcG9y dCIKPj4gKwlkZXBlbmRzIG9uIEFSTTY0IHx8IChDT01QSUxFX1RFU1QgJiYgNjRCSVQpCj4+ICsJ aGVscAo+PiArCSAgRW5hYmxlIHBlcmYgc3VwcG9ydCBmb3IgU3lub3BzeXMgRGVzaWduV2FyZSBQ Q0llIFBNVSBQZXJmb3JtYW5jZQo+PiArCSAgbW9uaXRvcmluZyBldmVudCBvbiBZaXRhbiA3MTAg cGxhdGZvcm0uCj4+ICsKPj4gIGVuZG1lbnUKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGVyZi9N YWtlZmlsZSBiL2RyaXZlcnMvcGVyZi9NYWtlZmlsZQo+PiBpbmRleCA1N2EyNzljNjFkZjUuLjM2 Zjc1Y2IwZjMyMCAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9wZXJmL01ha2VmaWxlCj4+ICsrKyBi L2RyaXZlcnMvcGVyZi9NYWtlZmlsZQo+PiBAQCAtMjAsMyArMjAsNCBAQCBvYmotJChDT05GSUdf QVJNX0RNQzYyMF9QTVUpICs9IGFybV9kbWM2MjBfcG11Lm8KPj4gIG9iai0kKENPTkZJR19NQVJW RUxMX0NOMTBLX1RBRF9QTVUpICs9IG1hcnZlbGxfY24xMGtfdGFkX3BtdS5vCj4+ICBvYmotJChD T05GSUdfTUFSVkVMTF9DTjEwS19ERFJfUE1VKSArPSBtYXJ2ZWxsX2NuMTBrX2Rkcl9wbXUubwo+ PiAgb2JqLSQoQ09ORklHX0FQUExFX00xX0NQVV9QTVUpICs9IGFwcGxlX20xX2NwdV9wbXUubwo+ PiArb2JqLSQoQ09ORklHX0RXQ19QQ0lFX1BNVSkgKz0gZHdjX3BjaWVfcG11Lm8KPj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvcGVyZi9kd2NfcGNpZV9wbXUuYyBiL2RyaXZlcnMvcGVyZi9kd2NfcGNp ZV9wbXUuYwo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwMDAwMDAuLjgx ZTUzNGJlMTNmYQo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL2RyaXZlcnMvcGVyZi9kd2NfcGNp ZV9wbXUuYwo+PiBAQCAtMCwwICsxLDk3NiBAQAo+PiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjAKPj4gKy8qCj4+ICsgKiBTeW5vcHN5cyBEZXNpZ25XYXJlIFBDSWUgUE1VIGRy aXZlcgo+PiArICoKPj4gKyAqIENvcHlyaWdodCAoQykgMjAyMSwgMjAyMiBBbGliYWJhIEluYy4K Pj4gKyAqLwo+PiArwqAKPj4gKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KPj4gKyNpbmNsdWRlIDxs aW51eC9iaXRmaWVsZC5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgo+PiArI2luY2x1 ZGUgPGxpbnV4L2NwdWhvdHBsdWcuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+Cj4+ ICsjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvZXJybm8uaD4K Pj4gKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+ Cj4+ICsjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L3Bs YXRmb3JtX2RldmljZS5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgo+PiArI2luY2x1ZGUg PGxpbnV4L3N5c2ZzLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KPj4gKwo+PiArI2Rl ZmluZSBEUlZfTkFNRQkJCQkiZHdjX3BjaWVfcG11Igo+PiArI2RlZmluZSBERVZfTkFNRQkJCQki ZHdjX3BjaWVfcG11Igo+PiArI2RlZmluZSBSUF9OVU1fTUFYCQkJCTMyIC8qIDJkaWUgKiA0UkMg KiA0Q3Ryb2wgKi8KPj4gKyNkZWZpbmUgQVRUUklfTkFNRV9NQVhfU0laRQkJCTMyCj4+ICsKPj4g KyNkZWZpbmUgRFdDX1BDSUVfVlNFQ19JRAkJCTB4MDIKPj4gKyNkZWZpbmUgRFdDX1BDSUVfVlNF Q19SRVYJCQkweDA0Cj4+ICsKPj4gKyNkZWZpbmUgRFdDX1BDSUVfTElOS19DQVBBQklMSVRJRVNf UkVHCQkweEMKPj4gKyNkZWZpbmUgRFdDX1BDSUVfTEFORV9TSElGVAkJCTQKPj4gKyNkZWZpbmUg RFdDX1BDSUVfTEFORV9NQVNLCQkJR0VOTUFTSyg5LCA0KQo+PiArCj4+ICsjZGVmaW5lIERXQ19Q Q0lFX0VWRU5UX0NOVF9DVFJMCQkJMHg4Cj4+ICsjZGVmaW5lIERXQ19QQ0lFX19DTlRfRVZFTlRf U0VMRUNUX1NISUZUCTE2Cj4+ICsjZGVmaW5lIERXQ19QQ0lFX19DTlRfRVZFTlRfU0VMRUNUX01B U0sJCUdFTk1BU0soMjcsIDE2KQo+PiArI2RlZmluZSBEV0NfUENJRV9fQ05UX0xBTkVfU0VMRUNU X1NISUZUCQk4Cj4+ICsjZGVmaW5lIERXQ19QQ0lFX19DTlRfTEFORV9TRUxFQ1RfTUFTSwkJR0VO TUFTSygxMSwgOCkKPj4gKyNkZWZpbmUgRFdDX1BDSUVfX0NOVF9TVEFUVVNfU0hJRlQJCTcKPj4g KyNkZWZpbmUgRFdDX1BDSUVfX0NOVF9TVEFUVVNfTUFTSwkJQklUKDcpCj4+ICsjZGVmaW5lIERX Q19QQ0lFX19DTlRfRU5BQkxFX1NISUZUCQkyCj4+ICsjZGVmaW5lIERXQ19QQ0lFX19DTlRfRU5B QkxFX01BU0sJCUdFTk1BU0soNCwgMikKPj4gKyNkZWZpbmUgRFdDX1BDSUVfUEVSX0VWRU5UX09G RgkJCSgweDEgPDwgRFdDX1BDSUVfX0NOVF9FTkFCTEVfU0hJRlQpCj4+ICsjZGVmaW5lIERXQ19Q Q0lFX1BFUl9FVkVOVF9PTgkJCSgweDMgPDwgRFdDX1BDSUVfX0NOVF9FTkFCTEVfU0hJRlQpCj4+ ICsjZGVmaW5lIERXQ19QQ0lFX0VWRU5UX0NMRUFSX01BU0sJCUdFTk1BU0soMSwgMCkKPj4gKwo+ PiArI2RlZmluZSBEV0NfUENJRV9FVkVOVF9DTlRfREFUQQkJCTB4Qwo+PiArCj4+ICsjZGVmaW5l IERXQ19QQ0lFX1RJTUVfQkFTRURfQU5BTFlTSVNfQ1RSTAkweDEwCj4+ICsjZGVmaW5lIERXQ19Q Q0lFX19USU1FX0JBU0VEX1JFUE9SVF9TRUxFQ1RfU0hJRlQJMjQKPj4gKyNkZWZpbmUgRFdDX1BD SUVfX1RJTUVfQkFTRURfUkVQT1JUX1NFTEVDVF9NQVNLCUdFTk1BU0soMzEsIDI0KQo+PiArI2Rl ZmluZSBEV0NfUENJRV9fVElNRV9CQVNFRF9EVVJBVElPTl9TSElGVAk4Cj4+ICsjZGVmaW5lIERX Q19QQ0lFX19USU1FX0JBU0VEX0RVUkFUSU9OX1NFTEVDVAlHRU5NQVNLKDE1LCA4KQo+PiArI2Rl ZmluZSBEV0NfUENJRV9EVVJBVElPTl9NQU5VQUxfQ1RSTAkJMHgwCj4+ICsjZGVmaW5lIERXQ19Q Q0lFX0RVUkFUSU9OXzFNUwkJCTB4MQo+PiArI2RlZmluZSBEV0NfUENJRV9EVVJBVElPTl8xME1T CQkJMHgyCj4+ICsjZGVmaW5lIERXQ19QQ0lFX0RVUkFUSU9OXzEwME1TCQkJMHgzCj4+ICsjZGVm aW5lIERXQ19QQ0lFX0RVUkFUSU9OXzFTCQkJMHg0Cj4+ICsjZGVmaW5lIERXQ19QQ0lFX0RVUkFU SU9OXzJTCQkJMHg1Cj4+ICsjZGVmaW5lIERXQ19QQ0lFX0RVUkFUSU9OXzRTCQkJMHg2Cj4+ICsj ZGVmaW5lIERXQ19QQ0lFX0RVUkFUSU9OXzRVUwkJCTB4ZmYKPj4gKyNkZWZpbmUgRFdDX1BDSUVf X1RJTUVfQkFTRURfQ09VTlRFUl9FTkFCTEUJMQo+PiArCj4+ICsjZGVmaW5lIERXQ19QQ0lFX1RJ TUVfQkFTRURfQU5BTFlTSVNfREFUQV9SRUdfTE9XCTB4MTQKPj4gKyNkZWZpbmUgRFdDX1BDSUVf VElNRV9CQVNFRF9BTkFMWVNJU19EQVRBX1JFR19ISUdICTB4MTgKPj4gKwo+PiArLyogRXZlbnQg YXR0cmlidXRlcyAqLwo+PiArI2RlZmluZSBEV0NfUENJRV9DT05GSUdfRVZFTlRJRAkJCUdFTk1B U0soMTUsIDApCj4+ICsjZGVmaW5lIERXQ19QQ0lFX0NPTkZJR19UWVBFCQkJR0VOTUFTSygxOSwg MTYpCj4+ICsjZGVmaW5lIERXQ19QQ0lFX0NPTkZJR19MQU5FCQkJR0VOTUFTSygyNywgMjApCj4+ ICsKPj4gKyNkZWZpbmUgRFdDX1BDSUVfRVZFTlRfSUQoZXZlbnQpCUZJRUxEX0dFVChEV0NfUENJ RV9DT05GSUdfRVZFTlRJRCwgKGV2ZW50KS0+YXR0ci5jb25maWcpCj4+ICsjZGVmaW5lIERXQ19Q Q0lFX0VWRU5UX1RZUEUoZXZlbnQpCUZJRUxEX0dFVChEV0NfUENJRV9DT05GSUdfVFlQRSwgKGV2 ZW50KS0+YXR0ci5jb25maWcpCj4+ICsjZGVmaW5lIERXQ19QQ0lFX0VWRU5UX0xBTkUoZXZlbnQp CUZJRUxEX0dFVChEV0NfUENJRV9DT05GSUdfTEFORSwgKGV2ZW50KS0+YXR0ci5jb25maWcpCj4+ ICsKPj4gKyNkZWZpbmUgRFdDX1BDSUVfUE1VX0hBU19SRUdJU1RFUgkJMQo+PiArCj4+ICtlbnVt IGR3Y19wY2llX2V2ZW50X3R5cGUgewo+PiArCURXQ19QQ0lFX1RZUEVfSU5WQUxJRCwKPj4gKwlE V0NfUENJRV9USU1FX0JBU0VfRVZFTlQsCj4+ICsJRFdDX1BDSUVfTEFORV9FVkVOVCwKPj4gK307 Cj4+ICsKPj4gK3N0cnVjdCBkd2NfZXZlbnRfY291bnRlcnMgewo+PiArCWNvbnN0IGNoYXIgbmFt ZVszMl07Cj4+ICsJdTMyIGV2ZW50X2lkOwo+PiArfTsKPj4gKwo+PiArc3RydWN0IGR3Y19wY2ll X3BtdSB7Cj4+ICsJc3RydWN0IGhsaXN0X25vZGUgbm9kZTsKPj4gKwl1bnNpZ25lZCBpbnQgb25f Y3B1Owo+PiArCXN0cnVjdCBwbXUgcG11Owo+PiArCXN0cnVjdCBkZXZpY2UgKmRldjsKPj4gK307 Cj4+ICsKPj4gK3N0cnVjdCBkd2NfcGNpZV9pbmZvX3RhYmxlIHsKPj4gKwl1MzIgYmRmOwo+PiAr CXUzMiBjYXBfcG9zOwo+PiArCXUzMiBudW1fbGFuZXM7Cj4+ICsJc3RydWN0IHBjaV9kZXYgKnBk ZXY7Cj4+ICsJc3RydWN0IGR3Y19wY2llX3BtdSBwY2llX3BtdTsKPj4gKwl1OCBwbXVfaXNfcmVn aXN0ZXI7Cj4+ICsJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50Owo+PiArCj4+ICsJc3RydWN0IGR3 Y19wY2llX2V2ZW50X2F0dHIgKmxhbmVfZXZlbnRfYXR0cnM7Cj4+ICsJc3RydWN0IGF0dHJpYnV0 ZSAqKnBjaWVfcG11X2V2ZW50X2F0dHJzOwo+PiArCXN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgcGNp ZV9wbXVfZXZlbnRfYXR0cnNfZ3JvdXA7Cj4+ICsJY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91 cCAqcGNpZV9wbXVfYXR0cl9ncm91cHNbNF07Cj4+ICt9Owo+PiArCj4+ICtzdHJ1Y3QgZHdjX3Bj aWVfcG11X3ByaXYgewo+PiArCXN0cnVjdCBkZXZpY2UgKmRldjsKPj4gKwl1MzIgcGNpZV9jdHJs X251bTsKPj4gKwlzdHJ1Y3QgZHdjX3BjaWVfaW5mb190YWJsZSAqcGNpZV90YWJsZTsKPj4gK307 Cj4+ICsKPj4gKyNkZWZpbmUgRFdDX1BDSUVfQ1JFQVRFX0JERihzZWcsIGJ1cywgZGV2LCBmdW5j KQlcCj4+ICsJKCgoc2VnKSA8PCAyNCkgfCAoKChidXMpICYgMHhGRikgPDwgMTYpIHwgKCgoZGV2 KSAmIDB4RkYpIDw8IDgpIHwgKGZ1bmMpKQo+IAo+IEp1c3QgcGFzcyBwZGV2LT5kZXZmbiBhbmQg dXNlIFBDSV9ERVZJRCgpIHRvIHNpbXBsaWZ5IGhlcmUuCgpTb3JyeSwgYXMgZmFyIGFzIEkga25v dywgUENJX0RFVklEKCkgb3V0cHV0IGlzIG5vdCBleGFjdGx5IHRoZSBiZGYuCkZvciBleGFtcGxl LCBiZGYgMzAwMTAwIGlzIGRlY29kZWQgYXMgMzAwOC4KCj4gCj4+ICsjZGVmaW5lIHRvX3BjaWVf cG11KHApIChjb250YWluZXJfb2YocCwgc3RydWN0IGR3Y19wY2llX3BtdSwgcG11KSkKPj4gKwo+ PiArc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmR3Y19wY2llX3BtdV9kZXY7Cj4+ICtz dGF0aWMgY2hhciAqZXZlbnRfYXR0cl9uYW1lID0gImV2ZW50cyI7Cj4+ICsKPj4gK3N0YXRpYyBz c2l6ZV90IGR3Y19wY2llX3BtdV9jcHVtYXNrX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAo+PiAr CQkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCj4+ICsJCQkJCSBjaGFyICpidWYp Cj4+ICt7Cj4+ICsJc3RydWN0IGR3Y19wY2llX3BtdSAqcGNpZV9wbXUgPSB0b19wY2llX3BtdShk ZXZfZ2V0X2RydmRhdGEoZGV2KSk7Cj4+ICsKPj4gKwlyZXR1cm4gY3B1bWFwX3ByaW50X3RvX3Bh Z2VidWYodHJ1ZSwgYnVmLCBjcHVtYXNrX29mKHBjaWVfcG11LT5vbl9jcHUpKTsKPj4gK30KPj4g Kwo+PiArc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGR3Y19wY2llX3BtdV9jcHVtYXNr X2F0dHIgPQo+PiArX19BVFRSKGNwdW1hc2ssIDA0NDQsIGR3Y19wY2llX3BtdV9jcHVtYXNrX3No b3csIE5VTEwpOwo+PiArCj4+ICtzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZHdjX3BjaWVfcG11 X2NwdW1hc2tfYXR0cnNbXSA9IHsKPj4gKwkmZHdjX3BjaWVfcG11X2NwdW1hc2tfYXR0ci5hdHRy LAo+PiArCU5VTEwKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3Vw IHBjaWVfcG11X2NwdW1hc2tfYXR0cnNfZ3JvdXAgPSB7Cj4+ICsJLmF0dHJzID0gZHdjX3BjaWVf cG11X2NwdW1hc2tfYXR0cnMsCj4+ICt9Owo+PiArCj4+ICtzdHJ1Y3QgZHdjX3BjaWVfZm9ybWF0 X2F0dHIgewo+PiArCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGF0dHI7Cj4+ICsJdTY0IGZpZWxk Owo+PiArCWludCBjb25maWc7Cj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgc3NpemVfdCBkd2NfcGNp ZV9wbXVfZm9ybWF0X3Nob3coc3RydWN0IGRldmljZSAqZGV2LAo+PiArCQkJCQlzdHJ1Y3QgZGV2 aWNlX2F0dHJpYnV0ZSAqYXR0ciwKPj4gKwkJCQkJY2hhciAqYnVmKQo+PiArewo+PiArCXN0cnVj dCBkd2NfcGNpZV9mb3JtYXRfYXR0ciAqZm10ID0gY29udGFpbmVyX29mKGF0dHIsIHR5cGVvZigq Zm10KSwgYXR0cik7Cj4+ICsJaW50IGxvID0gX19mZnMoZm10LT5maWVsZCksIGhpID0gX19mbHMo Zm10LT5maWVsZCk7Cj4+ICsKPj4gKwlpZiAobG8gPT0gaGkpCj4+ICsJCXJldHVybiBzbnByaW50 ZihidWYsIFBBR0VfU0laRSwgImNvbmZpZzolZFxuIiwgbG8pOwo+PiArCj4+ICsJaWYgKCFmbXQt PmNvbmZpZykKPj4gKwkJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiY29uZmlnOiVk LSVkXG4iLCBsbywgaGkpOwo+PiArCj4+ICsJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpF LCAiY29uZmlnJWQ6JWQtJWRcbiIsIGZtdC0+Y29uZmlnLCBsbywKPj4gKwkJCWhpKTsKPj4gK30K Pj4gKwo+PiArI2RlZmluZSBfZHdjX3BjaWVfZm9ybWF0X2F0dHIoX25hbWUsIF9jZmcsIF9mbGQp CQkJCVwKPj4gKwkoJigoc3RydWN0IGR3Y19wY2llX2Zvcm1hdF9hdHRyW10pIHt7CQkJCVwKPj4g KwkJLmF0dHIgPSBfX0FUVFIoX25hbWUsIDA0NDQsIGR3Y19wY2llX3BtdV9mb3JtYXRfc2hvdywg TlVMTCksCVwKPj4gKwkJLmNvbmZpZyA9IF9jZmcsCQkJCQkJXAo+PiArCQkuZmllbGQgPSBfZmxk LAkJCQkJCVwKPj4gKwl9fSlbMF0uYXR0ci5hdHRyKQo+PiArCj4+ICsjZGVmaW5lIGR3Y19wY2ll X2Zvcm1hdF9hdHRyKF9uYW1lLCBfZmxkKQlfZHdjX3BjaWVfZm9ybWF0X2F0dHIoX25hbWUsIDAs IF9mbGQpCj4+ICsKPj4gK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkd2NfcGNpZV9mb3JtYXRf YXR0cnNbXSA9IHsKPj4gKwlkd2NfcGNpZV9mb3JtYXRfYXR0cih0eXBlLCBEV0NfUENJRV9DT05G SUdfVFlQRSksCj4+ICsJZHdjX3BjaWVfZm9ybWF0X2F0dHIoZXZlbnRpZCwgRFdDX1BDSUVfQ09O RklHX0VWRU5USUQpLAo+PiArCWR3Y19wY2llX2Zvcm1hdF9hdHRyKGxhbmUsIERXQ19QQ0lFX0NP TkZJR19MQU5FKSwKPj4gKwlOVUxMLAo+PiArfTsKPj4gKwo+PiArc3RhdGljIHN0cnVjdCBhdHRy aWJ1dGVfZ3JvdXAgcGNpZV9wbXVfZm9ybWF0X2F0dHJzX2dyb3VwID0gewo+PiArCS5uYW1lID0g ImZvcm1hdCIsCj4+ICsJLmF0dHJzID0gZHdjX3BjaWVfZm9ybWF0X2F0dHJzLAo+PiArfTsKPj4g Kwo+PiArc3RydWN0IGR3Y19wY2llX2V2ZW50X2F0dHIgewo+PiArCXN0cnVjdCBkZXZpY2VfYXR0 cmlidXRlIGF0dHI7Cj4+ICsJZW51bSBkd2NfcGNpZV9ldmVudF90eXBlIHR5cGU7Cj4+ICsJdTE2 IGV2ZW50aWQ7Cj4+ICsJdTggbGFuZTsKPj4gK307Cj4+ICsKPj4gK3NzaXplX3QgZHdjX3BjaWVf ZXZlbnRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCj4+ICsJCQkJc3RydWN0IGRldmljZV9hdHRy aWJ1dGUgKmF0dHIsIGNoYXIgKnBhZ2UpCj4+ICt7Cj4+ICsJc3RydWN0IGR3Y19wY2llX2V2ZW50 X2F0dHIgKmVhdHRyOwo+PiArCj4+ICsJZWF0dHIgPSBjb250YWluZXJfb2YoYXR0ciwgdHlwZW9m KCplYXR0ciksIGF0dHIpOwo+PiArCj4+ICsJaWYgKGVhdHRyLT50eXBlID09IERXQ19QQ0lFX0xB TkVfRVZFTlQpCj4+ICsJCXJldHVybiBzcHJpbnRmKHBhZ2UsICJldmVudGlkPTB4JWx4LCB0eXBl PTB4JWx4LCBsYW5lPTB4JWx4XG4iLAo+PiArCQkJICAgICAgICh1bnNpZ25lZCBsb25nKWVhdHRy LT5ldmVudGlkLAo+PiArCQkJICAgICAgICh1bnNpZ25lZCBsb25nKWVhdHRyLT50eXBlLAo+PiAr CQkJICAgICAgICh1bnNpZ25lZCBsb25nKWVhdHRyLT5sYW5lKTsKPj4gKwllbHNlCj4+ICsJCXJl dHVybiBzcHJpbnRmKHBhZ2UsICJldmVudGlkPTB4JWx4LCB0eXBlPTB4JWx4IiwKPj4gKwkJCSAg ICAgICAodW5zaWduZWQgbG9uZyllYXR0ci0+ZXZlbnRpZCwKPj4gKwkJCSAgICAgICAodW5zaWdu ZWQgbG9uZyllYXR0ci0+dHlwZSk7Cj4+ICt9Cj4gCj4gSSByZW1lbWJlciBzeXNmc19lbWl0KCkg aXMgcHJlZmVycmVkLgoKWW91IGFyZSByaWdodCwgSSB3aWxsIHVzZSBzeXNmc19lbWl0KCkgaW4g bmV4dCB2ZXJzaW9uLgoKPiAKPj4gKwo+PiArI2RlZmluZSBEV0NfUENJRV9FVkVOVF9BVFRSKF9u YW1lLCBfdHlwZSwgX2V2ZW50aWQsIF9sYW5lKQkJXAo+PiArCSgmKChzdHJ1Y3QgZHdjX3BjaWVf ZXZlbnRfYXR0cltdKSB7ewkJCQlcCj4+ICsJCS5hdHRyID0gX19BVFRSKF9uYW1lLCAwNDQ0LCBk d2NfcGNpZV9ldmVudF9zaG93LCBOVUxMKSwJXAo+PiArCQkudHlwZSA9IF90eXBlLAkJCQkJCVwK Pj4gKwkJLmV2ZW50aWQgPSBfZXZlbnRpZCwJCQkJCVwKPj4gKwkJLmxhbmUgPSBfbGFuZSwJCQkJ CVwKPj4gKwl9fSlbMF0uYXR0ci5hdHRyKQo+PiArCj4+ICsjZGVmaW5lIERXQ19QQ0lFX1BNVV9C QVNFX1RJTUVfQVRUUihfbmFtZSwgX2V2ZW50aWQpCQkJXAo+PiArCURXQ19QQ0lFX0VWRU5UX0FU VFIoX25hbWUsIERXQ19QQ0lFX1RJTUVfQkFTRV9FVkVOVCwgX2V2ZW50aWQsIDApCj4+ICsKPj4g K3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkd2NfcGNpZV9wbXVfdGltZV9ldmVudF9hdHRyc1td ID0gewo+PiArCS8qIEdyb3VwICMwICovCj4+ICsJRFdDX1BDSUVfUE1VX0JBU0VfVElNRV9BVFRS KG9uZV9jeWNsZSwgMHgwMCksCj4+ICsJRFdDX1BDSUVfUE1VX0JBU0VfVElNRV9BVFRSKFRYX0ww UywgMHgwMSksCj4+ICsJRFdDX1BDSUVfUE1VX0JBU0VfVElNRV9BVFRSKFJYX0wwUywgMHgwMiks Cj4+ICsJRFdDX1BDSUVfUE1VX0JBU0VfVElNRV9BVFRSKEwwLCAweDAzKSwKPj4gKwlEV0NfUENJ RV9QTVVfQkFTRV9USU1FX0FUVFIoTDEsIDB4MDQpLAo+PiArCURXQ19QQ0lFX1BNVV9CQVNFX1RJ TUVfQVRUUihMMV8xLCAweDA1KSwKPj4gKwlEV0NfUENJRV9QTVVfQkFTRV9USU1FX0FUVFIoTDFf MiwgMHgwNiksCj4+ICsJRFdDX1BDSUVfUE1VX0JBU0VfVElNRV9BVFRSKENGR19SQ1ZSWSwgMHgw NyksCj4+ICsJRFdDX1BDSUVfUE1VX0JBU0VfVElNRV9BVFRSKFRYX1JYX0wwUywgMHgwOCksCj4+ ICsJRFdDX1BDSUVfUE1VX0JBU0VfVElNRV9BVFRSKEwxX0FVWCwgMHgwOSksCj4+ICsJRFdDX1BD SUVfUE1VX0JBU0VfVElNRV9BVFRSKE9ORV9jeWNsZSwgMHgxMCksCj4+ICsJRFdDX1BDSUVfUE1V X0JBU0VfVElNRV9BVFRSKFRYX0wwU18sIDB4MTEpLAo+PiArCURXQ19QQ0lFX1BNVV9CQVNFX1RJ TUVfQVRUUihSWF9MMFNfLCAweDEyKSwKPj4gKwlEV0NfUENJRV9QTVVfQkFTRV9USU1FX0FUVFIo TDBfLCAweDEzKSwKPj4gKwlEV0NfUENJRV9QTVVfQkFTRV9USU1FX0FUVFIoTDFfLCAweDE3KSwK Pj4gKwlEV0NfUENJRV9QTVVfQkFTRV9USU1FX0FUVFIoQ0ZHX1JDVlJZXywgMHgxNyksCj4+ICsJ RFdDX1BDSUVfUE1VX0JBU0VfVElNRV9BVFRSKFRYX1JYX0wwU18sIDB4MTgpLAo+PiArCS8qIEdy b3VwICMxICovCj4+ICsJRFdDX1BDSUVfUE1VX0JBU0VfVElNRV9BVFRSKFR4X1BDSWVfVExQX0Rh dGFfUGF5bG9hZCwgMHgyMCksCj4+ICsJRFdDX1BDSUVfUE1VX0JBU0VfVElNRV9BVFRSKFJ4X1BD SWVfVExQX0RhdGFfUGF5bG9hZCwgMHgyMSksCj4+ICsJRFdDX1BDSUVfUE1VX0JBU0VfVElNRV9B VFRSKFR4X0NDSVhfVExQX0RhdGFfUGF5bG9hZCwgMHgyMiksCj4+ICsJRFdDX1BDSUVfUE1VX0JB U0VfVElNRV9BVFRSKFJ4X0NDSVhfVExQX0RhdGFfUGF5bG9hZCwgMHgyMyksCj4+ICsJTlVMTAo+ PiArfTsKPj4gKwo+PiArc3RhdGljIGlubGluZSB1bW9kZV90IHBjaWVfcG11X2V2ZW50X2F0dHJf aXNfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKPj4gKwkJCQkJCSAgICAgc3RydWN0IGF0 dHJpYnV0ZSAqYXR0ciwKPj4gKwkJCQkJCSAgICAgaW50IHVudXNlKQo+PiArewo+PiArCXJldHVy biBhdHRyLT5tb2RlOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW5saW5lIGJvb2wgcGNpX2Rldl9p c19yb290cG9ydChzdHJ1Y3QgcGNpX2RldiAqcGRldikKPj4gK3sKPj4gKwlyZXR1cm4gKHBjaV9p c19wY2llKHBkZXYpICYmCj4+ICsJCXBjaV9wY2llX3R5cGUocGRldikgPT0gUENJX0VYUF9UWVBF X1JPT1RfUE9SVCk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGR3 Y19wY2llX2dldF9iZGYoc3RydWN0IHBjaV9kZXYgKmRldikKPj4gK3sKPj4gKwlyZXR1cm4gKERX Q19QQ0lFX0NSRUFURV9CREYocGNpX2RvbWFpbl9ucihkZXYtPmJ1cyksIGRldi0+YnVzLT5udW1i ZXIsCj4+ICsJCQkJICAgIFBDSV9TTE9UKGRldi0+ZGV2Zm4pLAo+PiArCQkJCSAgICBQQ0lfRlVO QyhkZXYtPmRldmZuKSkpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGR3Y19wY2llX2ZpbmRf cmFzX2Rlc19jYXBfcG9zaXRpb24oc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCAqcG9zKQo+PiAr ewo+PiArCXUzMiBoZWFkZXI7Cj4+ICsJaW50IHZzZWMgPSAwOwo+PiArCj4+ICsJd2hpbGUgKCh2 c2VjID0gcGNpX2ZpbmRfbmV4dF9leHRfY2FwYWJpbGl0eShwZGV2LCB2c2VjLAo+PiArCQkJCQkJ ICAgIFBDSV9FWFRfQ0FQX0lEX1ZORFIpKSkgewo+PiArCQlwY2lfcmVhZF9jb25maWdfZHdvcmQo cGRldiwgdnNlYyArIFBDSV9WTkRSX0hFQURFUiwgJmhlYWRlcik7Cj4+ICsJCS8qIElzIHRoZSBk ZXZpY2UgcGFydCBvZiBhIERlc2lnbldhcmUgQ29yZXMgUENJZSBDb250cm9sbGVyID8gKi8KPj4g KwkJaWYgKFBDSV9WTkRSX0hFQURFUl9JRChoZWFkZXIpID09IERXQ19QQ0lFX1ZTRUNfSUQgJiYK Pj4gKwkJICAgIFBDSV9WTkRSX0hFQURFUl9SRVYoaGVhZGVyKSA9PSBEV0NfUENJRV9WU0VDX1JF Vikgewo+PiArCQkJKnBvcyA9IHZzZWM7Cj4+ICsJCQlyZXR1cm4gMDsKPj4gKwkJfQo+PiArCX0K Pj4gKwo+PiArCXJldHVybiAtRU5PREVWOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGR3Y19w Y2llX3BtdV9kaXNjb3ZlcihzdHJ1Y3QgZHdjX3BjaWVfcG11X3ByaXYgKnByaXYpCj4+ICt7Cj4+ ICsJaW50IHZhbCwgd2hlcmUsIGluZGV4ID0gMDsKPj4gKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9 IE5VTEw7Cj4+ICsJc3RydWN0IGR3Y19wY2llX2luZm9fdGFibGUgKnBjaWVfaW5mbzsKPj4gKwo+ PiArCXByaXYtPnBjaWVfdGFibGUgPQo+PiArCSAgICBkZXZtX2tjYWxsb2MocHJpdi0+ZGV2LCBS UF9OVU1fTUFYLCBzaXplb2YoKnBjaWVfaW5mbyksIEdGUF9LRVJORUwpOwo+PiArCWlmICghcHJp di0+cGNpZV90YWJsZSkKPj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ICsKPj4gKwlwY2llX2luZm8g PSBwcml2LT5wY2llX3RhYmxlOwo+PiArCXdoaWxlICgocGRldiA9IHBjaV9nZXRfZGV2aWNlKFBD SV9BTllfSUQsIFBDSV9BTllfSUQsIHBkZXYpKSAhPSBOVUxMICYmCj4gCj4gSSBtYXkgbWlzcyBi dXQgSSBkb24ndCBwY2lfZGV2X3B1dCgpIHRvIGJhbGFuY2UgdGhlIHJlZmVyZW5jZSBjbnQuCgpB cyB0aGUgY29tbWVudHMgaW4gcGNpX2dldF9kZXZpY2UsIHRoZSByZWZlcmVuY2UgY291bnQgaXMg aW5jcmVtZW50ZWQgYW5kCmRlY3JlbWVudGVkIGluIHRoZSBsb29wIGF1dG9tYXRpY2FsbHkuIFNv IHdlIGRvIG5vdCBuZWVkIHRvIHVzZQpwY2lfZGV2X3B1dCgpLCByaWdodD8KCglJdGVyYXRlcyB0 aHJvdWdoIHRoZSBsaXN0IG9mIGtub3duIFBDSSBkZXZpY2VzLiAgSWYgYSBQQ0kgZGV2aWNlIGlz Cglmb3VuZCB3aXRoIGEgbWF0Y2hpbmcgQHZlbmRvciBhbmQgQGRldmljZSwgKnRoZSByZWZlcmVu Y2UgY291bnQgdG8gdGhlCglkZXZpY2UgaXMgaW5jcmVtZW50ZWQqIGFuZCBhIHBvaW50ZXIgdG8g aXRzIGRldmljZSBzdHJ1Y3R1cmUgaXMgcmV0dXJuZWQuCglPdGhlcndpc2UsICVOVUxMIGlzIHJl dHVybmVkLiAgQSBuZXcgc2VhcmNoIGlzIGluaXRpYXRlZCBieSBwYXNzaW5nICVOVUxMCglhcyB0 aGUgQGZyb20gYXJndW1lbnQuICBPdGhlcndpc2UgaWYgQGZyb20gaXMgbm90ICVOVUxMLCBzZWFy Y2hlcyBjb250aW51ZQoJZnJvbSBuZXh0IGRldmljZSBvbiB0aGUgZ2xvYmFsIGxpc3QuICAqVGhl IHJlZmVyZW5jZSBjb3VudCBmb3IgQGZyb20gaXMKCWFsd2F5cyBkZWNyZW1lbnRlZCBpZiBpdCBp cyBub3QgJU5VTEwuKgo+IAo+PiArCSAgICAgICBpbmRleCA8IFJQX05VTV9NQVgpIHsKPj4gKwkJ aWYgKCFwY2lfZGV2X2lzX3Jvb3Rwb3J0KHBkZXYpKQo+PiArCQkJY29udGludWU7Cj4+ICsKPj4g KwkJcGNpZV9pbmZvW2luZGV4XS5iZGYgPSBkd2NfcGNpZV9nZXRfYmRmKHBkZXYpOwo+PiArCQlw Y2llX2luZm9baW5kZXhdLnBkZXYgPSBwZGV2Owo+PiArCj4+ICsJCWlmIChkd2NfcGNpZV9maW5k X3Jhc19kZXNfY2FwX3Bvc2l0aW9uKHBkZXYsICZ3aGVyZSkpCj4+ICsJCQljb250aW51ZTsKPj4g Kwo+PiArCQlwY2llX2luZm9baW5kZXhdLmNhcF9wb3MgPSB3aGVyZTsKPj4gKwo+PiArCQlwY2lf cmVhZF9jb25maWdfZHdvcmQocGRldiwKPj4gKwkJCQlwZGV2LT5wY2llX2NhcCArIERXQ19QQ0lF X0xJTktfQ0FQQUJJTElUSUVTX1JFRywKPj4gKwkJCQkmdmFsKTsKPj4gKwkJcGNpZV9pbmZvW2lu ZGV4XS5udW1fbGFuZXMgPQo+PiArCQkJKHZhbCAmIERXQ19QQ0lFX0xBTkVfTUFTSykgPj4gRFdD X1BDSUVfTEFORV9TSElGVDsKPj4gKwkJaW5kZXgrKzsKPj4gKwl9Cj4+ICsKPj4gKwlpZiAoIWlu ZGV4KQo+PiArCQlyZXR1cm4gLUVOT0RFVjsKPj4gKwo+PiArCXByaXYtPnBjaWVfY3RybF9udW0g PSBpbmRleDsKPj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW5saW5l IGludCBkd2NfcGNpZV9wbXVfcmVhZF9kd29yZChzdHJ1Y3QgZHdjX3BjaWVfaW5mb190YWJsZSAq cGNpZV9pbmZvLAo+PiArCQkJCQkgIHUzMiByZWcsIHUzMiAqdmFsKQo+PiArewo+PiArCXJldHVy biBwY2lfcmVhZF9jb25maWdfZHdvcmQocGNpZV9pbmZvLT5wZGV2LCBwY2llX2luZm8tPmNhcF9w b3MgKyByZWcsCj4+ICsJCQkJICAgICB2YWwpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW5saW5l IGludCBkd2NfcGNpZV9wbXVfd3JpdGVfZHdvcmQoc3RydWN0IGR3Y19wY2llX2luZm9fdGFibGUK Pj4gKwkJCQkJICAgKnBjaWVfaW5mbywgdTMyIHJlZywgdTMyIHZhbCkKPj4gK3sKPj4gKwlyZXR1 cm4gcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwY2llX2luZm8tPnBkZXYsIHBjaWVfaW5mby0+Y2Fw X3BvcyArIHJlZywKPj4gKwkJCQkgICAgICB2YWwpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50 IGR3Y19wY2llX3BtdV9zZXRfZXZlbnRfaWQoc3RydWN0IGR3Y19wY2llX2luZm9fdGFibGUgKnBj aWVfaW5mbywKPj4gKwkJCQkgICAgIGludCBldmVudF9pZCkKPj4gK3sKPj4gKwlpbnQgcmV0Owo+ PiArCXUzMiB2YWw7Cj4+ICsKPj4gKwlyZXQgPSBkd2NfcGNpZV9wbXVfcmVhZF9kd29yZChwY2ll X2luZm8sIERXQ19QQ0lFX0VWRU5UX0NOVF9DVFJMLCAmdmFsKTsKPj4gKwlpZiAocmV0KSB7Cj4+ ICsJCXBjaV9lcnIocGNpZV9pbmZvLT5wZGV2LCAiUENJZSByZWFkIGZhaWxcbiIpOwo+PiArCQly ZXR1cm4gcmV0Owo+PiArCX0KPj4gKwo+PiArCXZhbCAmPSB+RFdDX1BDSUVfX0NOVF9FTkFCTEVf TUFTSzsKPj4gKwl2YWwgJj0gfkRXQ19QQ0lFX19DTlRfRVZFTlRfU0VMRUNUX01BU0s7Cj4+ICsJ dmFsIHw9IGV2ZW50X2lkIDw8IERXQ19QQ0lFX19DTlRfRVZFTlRfU0VMRUNUX1NISUZUOwo+PiAr Cj4+ICsJcmV0ID0gZHdjX3BjaWVfcG11X3dyaXRlX2R3b3JkKHBjaWVfaW5mbywgRFdDX1BDSUVf RVZFTlRfQ05UX0NUUkwsIHZhbCk7Cj4+ICsJaWYgKHJldCkKPj4gKwkJcGNpX2VycihwY2llX2lu Zm8tPnBkZXYsICJQQ0llIHdyaXRlIGZhaWxcbiIpOwo+PiArCj4+ICsJcmV0dXJuIHJldDsKPj4g K30KPj4gKwo+PiArc3RhdGljIGludCBkd2NfcGNpZV9wbXVfd3JpdGVfZXZlbnRfbGFuZShzdHJ1 Y3QgZHdjX3BjaWVfaW5mb190YWJsZSAqcGNpZV9pbmZvLAo+PiArCQkJCQkgaW50IGxhbmUsIGlu dCBldmVudF9pZCkKPj4gK3sKPj4gKwl1MzIgcmV0Owo+PiArCXUzMiB2YWw7Cj4+ICsKPj4gKwly ZXQgPSBkd2NfcGNpZV9wbXVfcmVhZF9kd29yZChwY2llX2luZm8sIERXQ19QQ0lFX0VWRU5UX0NO VF9DVFJMLCAmdmFsKTsKPj4gKwlpZiAocmV0KSB7Cj4+ICsJCXBjaV9lcnIocGNpZV9pbmZvLT5w ZGV2LCAiUENJZSByZWFkIGZhaWxcbiIpOwo+PiArCQlyZXR1cm4gcmV0Owo+PiArCX0KPj4gKwo+ PiArCXZhbCAmPSB+RFdDX1BDSUVfX0NOVF9MQU5FX1NFTEVDVF9NQVNLOwo+PiArCXZhbCB8PSBs YW5lIDw8IERXQ19QQ0lFX19DTlRfTEFORV9TRUxFQ1RfU0hJRlQ7Cj4+ICsKPj4gKwlyZXQgPSBk d2NfcGNpZV9wbXVfd3JpdGVfZHdvcmQocGNpZV9pbmZvLCBEV0NfUENJRV9FVkVOVF9DTlRfQ1RS TCwgdmFsKTsKPj4gKwlpZiAocmV0KQo+PiArCQlwY2lfZXJyKHBjaWVfaW5mby0+cGRldiwgIlBD SWUgd3JpdGUgZmFpbFxuIik7Cj4+ICsKPj4gKwlyZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ICtz dGF0aWMgaW50IGR3Y19wY2llX3BtdV9ldmVudF9lbmFibGUoc3RydWN0IGR3Y19wY2llX2luZm9f dGFibGUgKnBjaWVfaW5mbywKPj4gKwkJCQkgICAgIHUzMiBlbmFibGUpCj4+ICt7Cj4+ICsJdTMy IHJldDsKPj4gKwl1MzIgdmFsOwo+PiArCj4+ICsJcmV0ID0gZHdjX3BjaWVfcG11X3JlYWRfZHdv cmQocGNpZV9pbmZvLCBEV0NfUENJRV9FVkVOVF9DTlRfQ1RSTCwgJnZhbCk7Cj4+ICsJaWYgKHJl dCkgewo+PiArCQlwY2lfZXJyKHBjaWVfaW5mby0+cGRldiwgIlBDSWUgcmVhZCBmYWlsXG4iKTsK PiAKPiBTb21lYm9keSBtYXkgbWVudGlvbmVkLiBNYXliZSB5b3UgZG9uJ3QgbmVlZCB0byBwcmlu dCB0aGVzZSBtZXNzYWdlcyBpbiBQTVUgb3BzLCBqdXN0Cj4gcmV0dXJuIHRoZSBjb3JyZWN0IGVy cm9yIGNvZGUgYW5kIGxldCBwZXJmIGhhbmRsZSBpdC4gT3IgeW91IHNob3VsZCBwcm92aWRlIG1v cmUKPiBpbmZvcm1hdGlvbiBmb3IgdGhlc2UsIGxpa2UgZmFpbGVkIGluIHdoaWNoIGZ1bmNpb24g b3IgcmVhZC93cml0ZSB3aGljaCB2YWx1ZS4KPiBJZiBpdCBvbmx5IG5lY2Vzc2FyeSB3aGVuIGRl YnVnZ2luZywgbWFrZSBpdCBwY2lfZGJnKCkuCgpZZXAsIHlvdSBhcmUgcmlnaHQsIEkgd2lsbCBk cm9wIHRoZSBwcmludCBpbmZvIGluIG5leHQgdmVyc2lvbi4KCj4gCj4+ICsJCXJldHVybiByZXQ7 Cj4+ICsJfQo+PiArCj4+ICsJdmFsICY9IH4oRFdDX1BDSUVfX0NOVF9FTkFCTEVfTUFTSyk7Cj4+ ICsKPj4gKwlpZiAoZW5hYmxlKQo+PiArCQl2YWwgfD0gRFdDX1BDSUVfUEVSX0VWRU5UX09OOwo+ PiArCWVsc2UKPj4gKwkJdmFsIHw9IERXQ19QQ0lFX1BFUl9FVkVOVF9PRkY7Cj4+ICsKPj4gKwly ZXQgPSBkd2NfcGNpZV9wbXVfd3JpdGVfZHdvcmQocGNpZV9pbmZvLCBEV0NfUENJRV9FVkVOVF9D TlRfQ1RSTCwgdmFsKTsKPj4gKwlpZiAocmV0KQo+PiArCQlwY2lfZXJyKHBjaWVfaW5mby0+cGRl diwgIlBDSWUgd3JpdGUgZmFpbFxuIik7Cj4+ICsKPj4gKwlyZXR1cm4gcmV0Owo+PiArfQo+PiAr Cj4+ICtzdGF0aWMgaW50IGR3Y19wY2llX3BtdV9iYXNlX3RpbWVfZW5hYmxlKHN0cnVjdCBkd2Nf cGNpZV9pbmZvX3RhYmxlICpwY2llX2luZm8sCj4+ICsJCQkJCSB1MzIgZW5hYmxlKQo+PiArewo+ PiArCXUzMiByZXQ7Cj4+ICsJdTMyIHZhbDsKPj4gKwo+PiArCXJldCA9IGR3Y19wY2llX3BtdV9y ZWFkX2R3b3JkKHBjaWVfaW5mbywKPj4gKwkJCQkgICAgICBEV0NfUENJRV9USU1FX0JBU0VEX0FO QUxZU0lTX0NUUkwsICZ2YWwpOwo+PiArCWlmIChyZXQpIHsKPj4gKwkJcGNpX2VycihwY2llX2lu Zm8tPnBkZXYsICJQQ0llIHJlYWQgZmFpbFxuIik7Cj4+ICsJCXJldHVybiByZXQ7Cj4+ICsJfQo+ PiArCj4+ICsJaWYgKGVuYWJsZSkKPj4gKwkJdmFsIHw9IERXQ19QQ0lFX19USU1FX0JBU0VEX0NP VU5URVJfRU5BQkxFOwo+PiArCWVsc2UKPj4gKwkJdmFsICY9IH5EV0NfUENJRV9fVElNRV9CQVNF RF9DT1VOVEVSX0VOQUJMRTsKPj4gKwo+PiArCXJldCA9IGR3Y19wY2llX3BtdV93cml0ZV9kd29y ZChwY2llX2luZm8sCj4+ICsJCQkJICAgICAgIERXQ19QQ0lFX1RJTUVfQkFTRURfQU5BTFlTSVNf Q1RSTCwgdmFsKTsKPj4gKwlpZiAocmV0KQo+PiArCQlwY2lfZXJyKHBjaWVfaW5mby0+cGRldiwg IlBDSWUgd3JpdGUgZmFpbFxuIik7Cj4+ICsKPj4gKwlyZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ ICtzdGF0aWMgaW50IGR3Y19wY2llX3BtdV9yZWFkX2V2ZW50X2NvdW50ZXIoc3RydWN0IGR3Y19w Y2llX2luZm9fdGFibGUKPj4gKwkJCQkJICAgKnBjaWVfaW5mbywgdTY0ICpjb3VudGVyKQo+PiAr ewo+PiArCXUzMiByZXQsIHZhbDsKPj4gKwo+PiArCXJldCA9IGR3Y19wY2llX3BtdV9yZWFkX2R3 b3JkKHBjaWVfaW5mbywgRFdDX1BDSUVfRVZFTlRfQ05UX0RBVEEsICZ2YWwpOwo+PiArCWlmIChy ZXQpIHsKPj4gKwkJcGNpX2VycihwY2llX2luZm8tPnBkZXYsICJQQ0llIHJlYWQgZmFpbFxuIik7 Cj4+ICsJCXJldHVybiByZXQ7Cj4+ICsJfQo+PiArCSpjb3VudGVyID0gdmFsOwo+PiArCj4+ICsJ cmV0dXJuIHJldDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBkd2NfcGNpZV9wbXVfcmVhZF9i YXNlX3RpbWVfY291bnRlcihzdHJ1Y3QgZHdjX3BjaWVfaW5mb190YWJsZQo+PiArCQkJCQkgICAg ICAgKnBjaWVfaW5mbywgdTY0ICpjb3VudGVyKQo+PiArewo+PiArCXUzMiByZXQsIHZhbDsKPj4g Kwo+PiArCXJldCA9IGR3Y19wY2llX3BtdV9yZWFkX2R3b3JkKHBjaWVfaW5mbywKPj4gKwkJCQkg ICAgICBEV0NfUENJRV9USU1FX0JBU0VEX0FOQUxZU0lTX0RBVEFfUkVHX0hJR0gsCj4+ICsJCQkJ ICAgICAgJnZhbCk7Cj4+ICsJaWYgKHJldCkgewo+PiArCQlwY2lfZXJyKHBjaWVfaW5mby0+cGRl diwgIlBDSWUgcmVhZCBmYWlsXG4iKTsKPj4gKwkJcmV0dXJuIHJldDsKPj4gKwl9Cj4+ICsKPj4g KwkqY291bnRlciA9IHZhbDsKPj4gKwkqY291bnRlciA8PD0gMzI7Cj4+ICsKPj4gKwlyZXQgPSBk d2NfcGNpZV9wbXVfcmVhZF9kd29yZChwY2llX2luZm8sCj4+ICsJCQkJICAgICAgRFdDX1BDSUVf VElNRV9CQVNFRF9BTkFMWVNJU19EQVRBX1JFR19MT1csCj4+ICsJCQkJICAgICAgJnZhbCk7Cj4+ ICsJaWYgKHJldCkgewo+PiArCQlwY2lfZXJyKHBjaWVfaW5mby0+cGRldiwgIlBDSWUgcmVhZCBm YWlsXG4iKTsKPj4gKwkJcmV0dXJuIHJldDsKPj4gKwl9Cj4+ICsKPj4gKwkqY291bnRlciArPSB2 YWw7Cj4+ICsKPj4gKwlyZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGR3Y19w Y2llX3BtdV9jbGVhcl9ldmVudF9jb3VudGVyKHN0cnVjdCBkd2NfcGNpZV9pbmZvX3RhYmxlCj4+ ICsJCQkJCSAgICAqcGNpZV9pbmZvKQo+PiArewo+PiArCXUzMiByZXQ7Cj4+ICsJdTMyIHZhbDsK Pj4gKwo+PiArCXJldCA9IGR3Y19wY2llX3BtdV9yZWFkX2R3b3JkKHBjaWVfaW5mbywgRFdDX1BD SUVfRVZFTlRfQ05UX0NUUkwsICZ2YWwpOwo+PiArCWlmIChyZXQpIHsKPj4gKwkJcGNpX2Vycihw Y2llX2luZm8tPnBkZXYsICJQQ0llIHJlYWQgZmFpbFxuIik7Cj4+ICsJCXJldHVybiByZXQ7Cj4+ ICsJfQo+PiArCj4+ICsJdmFsICY9IH5EV0NfUENJRV9FVkVOVF9DTEVBUl9NQVNLOwo+PiArCXZh bCB8PSAxOwo+IAo+IEl0J3MgYmV0dGVyIHRvIHVzZSBhIG1hY3JvIGZvciAnMScgdG8gbWFrZSBp dCBtb3JlIGNsZWFyLgoKR29vZCBpZGVhLCB3aWxsIGZpeCBpdCBpbiBuZXh0IHZlcnNpb24uCgo+ IAo+PiArCj4+ICsJcmV0ID0gZHdjX3BjaWVfcG11X3dyaXRlX2R3b3JkKHBjaWVfaW5mbywgRFdD X1BDSUVfRVZFTlRfQ05UX0NUUkwsIHZhbCk7Cj4+ICsJaWYgKHJldCkKPj4gKwkJcGNpX2Vycihw Y2llX2luZm8tPnBkZXYsICJQQ0llIHdyaXRlIGZhaWxcbiIpOwo+PiArCj4+ICsJcmV0dXJuIHJl dDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBkd2NfcGNpZV9wbXVfYmFzZV90aW1lX2FkZF9w cmVwYXJlKHN0cnVjdCBkd2NfcGNpZV9pbmZvX3RhYmxlCj4+ICsJCQkJCSAgICAgICpwY2llX2lu Zm8sIHUzMiBldmVudF9pZCkKPj4gK3sKPj4gKwl1MzIgcmV0Owo+PiArCXUzMiB2YWw7Cj4+ICsK Pj4gKwlyZXQgPSBkd2NfcGNpZV9wbXVfcmVhZF9kd29yZChwY2llX2luZm8sCj4+ICsJCQkJICAg ICAgRFdDX1BDSUVfVElNRV9CQVNFRF9BTkFMWVNJU19DVFJMLCAmdmFsKTsKPj4gKwlpZiAocmV0 KSB7Cj4+ICsJCXBjaV9lcnIocGNpZV9pbmZvLT5wZGV2LCAiUENJZSByZWFkIGZhaWxcbiIpOwo+ PiArCQlyZXR1cm4gcmV0Owo+PiArCX0KPj4gKwo+PiArCXZhbCAmPSB+RFdDX1BDSUVfX1RJTUVf QkFTRURfUkVQT1JUX1NFTEVDVF9NQVNLOwo+PiArCXZhbCB8PSBldmVudF9pZCA8PCBEV0NfUENJ RV9fVElNRV9CQVNFRF9SRVBPUlRfU0VMRUNUX1NISUZUOwo+PiArCXZhbCAmPSB+RFdDX1BDSUVf X1RJTUVfQkFTRURfRFVSQVRJT05fU0VMRUNUOwo+PiArCj4+ICsJLyoKPj4gKwkgKiBUSU1FX0JB U0VEX0FOQUxZU0lTX0RBVEFfUkVHIGlzIGEgNjQgYml0IHJlZ2lzdGVyLCB3ZSBjYW4gc2FmZWx5 Cj4+ICsJICogdXNlIGl0IHdpdGggYW55IG1hbnVhbGx5IGNvbnRyb2xsZXJlZCBkdXJhdGlvbi4K Pj4gKwkgKi8KPj4gKwl2YWwgJj0gfihEV0NfUENJRV9fVElNRV9CQVNFRF9EVVJBVElPTl9TRUxF Q1QpOwo+PiArCXZhbCB8PSBEV0NfUENJRV9EVVJBVElPTl9NQU5VQUxfQ1RSTDsKPj4gKwo+PiAr CXJldCA9IGR3Y19wY2llX3BtdV93cml0ZV9kd29yZChwY2llX2luZm8sCj4+ICsJCQkJICAgICAg IERXQ19QQ0lFX1RJTUVfQkFTRURfQU5BTFlTSVNfQ1RSTCwgdmFsKTsKPj4gKwlpZiAocmV0KQo+ PiArCQlwY2lfZXJyKHBjaWVfaW5mby0+cGRldiwgIlBDSWUgd3JpdGUgZmFpbFxuIik7Cj4+ICsK Pj4gKwlyZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgc3RydWN0IGR3Y19wY2llX2lu Zm9fdGFibGUgKnBtdV90b19wY2llX2luZm8oc3RydWN0IHBtdSAqcG11KQo+PiArewo+PiArCXN0 cnVjdCBkd2NfcGNpZV9pbmZvX3RhYmxlICpwY2llX2luZm87Cj4+ICsJc3RydWN0IGR3Y19wY2ll X3BtdSAqcGNpZV9wbXUgPSB0b19wY2llX3BtdShwbXUpOwo+PiArCj4+ICsJcGNpZV9pbmZvID0g Y29udGFpbmVyX29mKHBjaWVfcG11LCBzdHJ1Y3QgZHdjX3BjaWVfaW5mb190YWJsZSwgcGNpZV9w bXUpOwo+PiArCWlmIChwY2llX2luZm8gPT0gTlVMTCkKPj4gKwkJcGNpX2VycihwY2llX2luZm8t PnBkZXYsICJDYW4ndCBnZXQgcGNpZSBpbmZvXG4iKTsKPj4gKwo+PiArCXJldHVybiBwY2llX2lu Zm87Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGR3Y19wY2llX3BtdV9ldmVudF91cGRhdGUo c3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQo+PiArewo+PiArCXU2NCBjb3VudGVyOwo+PiArCXN0 cnVjdCBkd2NfcGNpZV9pbmZvX3RhYmxlICpwY2llX2luZm8gPSBwbXVfdG9fcGNpZV9pbmZvKGV2 ZW50LT5wbXUpOwo+PiArCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3Owo+ PiArCWVudW0gZHdjX3BjaWVfZXZlbnRfdHlwZSB0eXBlID0gRFdDX1BDSUVfRVZFTlRfVFlQRShl dmVudCk7Cj4+ICsJdTY0IGRlbHRhLCBwcmV2LCBub3c7Cj4+ICsKPj4gKwlkbyB7Cj4+ICsJCXBy ZXYgPSBsb2NhbDY0X3JlYWQoJmh3Yy0+cHJldl9jb3VudCk7Cj4+ICsKPj4gKwkJaWYgKHR5cGUg PT0gRFdDX1BDSUVfTEFORV9FVkVOVCkKPj4gKwkJCWR3Y19wY2llX3BtdV9yZWFkX2V2ZW50X2Nv dW50ZXIocGNpZV9pbmZvLCAmY291bnRlcik7Cj4+ICsJCWVsc2UgaWYgKHR5cGUgPT0gRFdDX1BD SUVfVElNRV9CQVNFX0VWRU5UKQo+PiArCQkJZHdjX3BjaWVfcG11X3JlYWRfYmFzZV90aW1lX2Nv dW50ZXIocGNpZV9pbmZvLAo+PiArCQkJCQkJCSAgICAmY291bnRlcik7Cj4+ICsJCWVsc2UKPj4g KwkJCXBjaV9lcnIocGNpZV9pbmZvLT5wZGV2LCAiSW5wdXQgcGFyYW0gaXMgaW52YWxpZFxuIik7 Cj4+ICsKPiAKPiBGb3IgdGhlIG1lc3NhZ2VzIGluIFBNVSBvcHMsIHlvdSBzaG91bGQgcHJpbnQg dGhlIG1lc3NhZ2Ugb24gYmVoYWxmIG9mIFBNVSBkZXZpY2UKPiByYXRoZXIgdGhhbiBQQ0llIGRl dmljZS4gU2FtZSBmb3IgdGhlIG90aGVyIHBsYWNlcy4KCkdvb2QgaWRlYSwgd2lsbCBmaXggaXQg aW4gbmV4dCB2ZXJzaW9uLgoKPiAKPj4gKwkJbm93ID0gY291bnRlcjsKPj4gKwl9IHdoaWxlIChs b2NhbDY0X2NtcHhjaGcoJmh3Yy0+cHJldl9jb3VudCwgcHJldiwgbm93KSAhPSBwcmV2KTsKPj4g Kwo+PiArCWRlbHRhID0gbm93IC0gcHJldjsKPj4gKwo+PiArCWxvY2FsNjRfYWRkKGRlbHRhLCAm ZXZlbnQtPmNvdW50KTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBkd2NfcGNpZV9wbXVfZXZl bnRfaW5pdChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCj4+ICt7Cj4+ICsJc3RydWN0IGh3X3Bl cmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7Cj4+ICsJc3RydWN0IGR3Y19wY2llX3BtdSAqcGNp ZV9wbXUgPSB0b19wY2llX3BtdShldmVudC0+cG11KTsKPj4gKwlzdHJ1Y3QgcGVyZl9ldmVudCAq c2libGluZzsKPj4gKwo+PiArCWlmIChldmVudC0+YXR0ci50eXBlICE9IGV2ZW50LT5wbXUtPnR5 cGUpCj4+ICsJCXJldHVybiAtRU5PRU5UOwo+PiArCj4+ICsJaWYgKGh3Yy0+c2FtcGxlX3Blcmlv ZCkgewo+PiArCQlkZXZfZGJnKHBjaWVfcG11LT5kZXYsICJTYW1wbGluZyBub3Qgc3VwcG9ydGVk XG4iKTsKPj4gKwkJcmV0dXJuIC1FT1BOT1RTVVBQOwo+PiArCX0KPj4gKwo+PiArCWlmIChldmVu dC0+Y3B1IDwgMCkgewo+PiArCQlkZXZfZGJnKHBjaWVfcG11LT5kZXYsICJQZXItdGFzayBtb2Rl IG5vdCBzdXBwb3J0ZWRcbiIpOwo+PiArCQlyZXR1cm4gLUVPUE5PVFNVUFA7Cj4+ICsJfQo+PiAr Cj4+ICsJZXZlbnQtPmNwdSA9IHBjaWVfcG11LT5vbl9jcHU7Cj4+ICsKPj4gKwlpZiAoZXZlbnQt Pmdyb3VwX2xlYWRlciAhPSBldmVudCAmJgo+PiArCSAgICAhaXNfc29mdHdhcmVfZXZlbnQoZXZl bnQtPmdyb3VwX2xlYWRlcikpIHsKPj4gKwkJZGV2X2RiZyhwY2llX3BtdS0+ZGV2LCAiRHJpdmUg d2F5IG9ubHkgYWxsb3cgb25lIGV2ZW50IVxuIik7Cj4+ICsJCXJldHVybiAtRUlOVkFMOwo+PiAr CX0KPj4gKwo+PiArCWZvcl9lYWNoX3NpYmxpbmdfZXZlbnQoc2libGluZywgZXZlbnQtPmdyb3Vw X2xlYWRlcikgewo+PiArCQlpZiAoc2libGluZyAhPSBldmVudCAmJiAhaXNfc29mdHdhcmVfZXZl bnQoc2libGluZykpIHsKPj4gKwkJCWRldl9kYmcocGNpZV9wbXUtPmRldiwgIkRyaXZlIHdheSBl dmVudCBub3QgYWxsb3dlZCFcbiIpOwo+PiArCQkJcmV0dXJuIC1FSU5WQUw7Cj4+ICsJCX0KPj4g Kwl9Cj4+ICsKPj4gKwlod2MtPmlkeCA9IC0xOwo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ ICsKPj4gK3N0YXRpYyB2b2lkIGR3Y19wY2llX3BtdV9zZXRfcGVyaW9kKHN0cnVjdCBod19wZXJm X2V2ZW50ICpod2MpCj4+ICt7Cj4+ICsJdTY0IG5ldyA9IDA7Cj4+ICsKPiAKPiByZWR1bmRhbnQg J25ldycuCj4gCj4+ICsJbG9jYWw2NF9zZXQoJmh3Yy0+cHJldl9jb3VudCwgbmV3KTsKPj4gK30K ClllcCwgd2lsbCBmaXggaXQgaW4gbmV4dCB2ZXJzaW9uLgoKPj4gKwo+PiArc3RhdGljIHZvaWQg ZHdjX3BjaWVfcG11X2V2ZW50X3N0YXJ0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGZs YWdzKQo+PiArewo+PiArCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3Owo+ PiArCXN0cnVjdCBkd2NfcGNpZV9pbmZvX3RhYmxlICpwY2llX2luZm8gPSBwbXVfdG9fcGNpZV9p bmZvKGV2ZW50LT5wbXUpOwo+PiArCWVudW0gZHdjX3BjaWVfZXZlbnRfdHlwZSB0eXBlID0gRFdD X1BDSUVfRVZFTlRfVFlQRShldmVudCk7Cj4+ICsKPj4gKwlod2MtPnN0YXRlID0gMDsKPj4gKwlk d2NfcGNpZV9wbXVfc2V0X3BlcmlvZChod2MpOwo+PiArCj4+ICsJaWYgKHR5cGUgPT0gRFdDX1BD SUVfTEFORV9FVkVOVCkKPj4gKwkJZHdjX3BjaWVfcG11X2V2ZW50X2VuYWJsZShwY2llX2luZm8s IDEpOwo+PiArCWVsc2UgaWYgKHR5cGUgPT0gRFdDX1BDSUVfVElNRV9CQVNFX0VWRU5UKQo+PiAr CQlkd2NfcGNpZV9wbXVfYmFzZV90aW1lX2VuYWJsZShwY2llX2luZm8sIDEpOwo+PiArCWVsc2UK Pj4gKwkJcGNpX2VycihwY2llX2luZm8tPnBkZXYsICJJbnB1dCBwYXJhbSBpcyBpbnZhbGlkXG4i KTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgZHdjX3BjaWVfcG11X2V2ZW50X3N0b3Aoc3Ry dWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgZmxhZ3MpCj4+ICt7Cj4+ICsJc3RydWN0IGR3Y19w Y2llX2luZm9fdGFibGUgKnBjaWVfaW5mbyA9IHBtdV90b19wY2llX2luZm8oZXZlbnQtPnBtdSk7 Cj4+ICsJZW51bSBkd2NfcGNpZV9ldmVudF90eXBlIHR5cGUgPSBEV0NfUENJRV9FVkVOVF9UWVBF KGV2ZW50KTsKPj4gKwo+PiArCWlmIChldmVudC0+aHcuc3RhdGUgJiBQRVJGX0hFU19TVE9QUEVE KQo+PiArCQlyZXR1cm47Cj4+ICsKPj4gKwlpZiAodHlwZSA9PSBEV0NfUENJRV9MQU5FX0VWRU5U KQo+PiArCQlkd2NfcGNpZV9wbXVfZXZlbnRfZW5hYmxlKHBjaWVfaW5mbywgMCk7Cj4+ICsJZWxz ZSBpZiAodHlwZSA9PSBEV0NfUENJRV9USU1FX0JBU0VfRVZFTlQpCj4+ICsJCWR3Y19wY2llX3Bt dV9iYXNlX3RpbWVfZW5hYmxlKHBjaWVfaW5mbywgMCk7Cj4+ICsJZWxzZQo+PiArCQlwY2lfZXJy KHBjaWVfaW5mby0+cGRldiwgIklucHV0IHBhcmFtIGlzIGludmFsaWRcbiIpOwo+IAo+IElmIHRo ZSBtZXNzYWdlIGlzIG5lY2Vzc2FyeSwgaXQnbGwgYmUgbW9yZSBoZWxwZnVsIHRvIG1lbnRpb24g d2hpY2ggcGFyYW0KPiBpcyBpbnZhbGlkLgoKSSBzZWUsIHdpbGwgZ2l2ZSBtb3JlIGhpbnQgaW4g bG9nLgoKPiAKPj4gKwo+PiArCWR3Y19wY2llX3BtdV9ldmVudF91cGRhdGUoZXZlbnQpOwo+PiAr fQo+PiArCj4+ICtzdGF0aWMgaW50IGR3Y19wY2llX3BtdV9ldmVudF9hZGQoc3RydWN0IHBlcmZf ZXZlbnQgKmV2ZW50LCBpbnQgZmxhZ3MpCj4+ICt7Cj4+ICsJc3RydWN0IGR3Y19wY2llX2luZm9f dGFibGUgKnBjaWVfaW5mbyA9IHBtdV90b19wY2llX2luZm8oZXZlbnQtPnBtdSk7Cj4+ICsJc3Ry dWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7Cj4+ICsJZW51bSBkd2NfcGNpZV9l dmVudF90eXBlIHR5cGUgPSBEV0NfUENJRV9FVkVOVF9UWVBFKGV2ZW50KTsKPj4gKwlpbnQgZXZl bnRfaWQgPSBEV0NfUENJRV9FVkVOVF9JRChldmVudCk7Cj4+ICsJaW50IGxhbmUgPSBEV0NfUENJ RV9FVkVOVF9MQU5FKGV2ZW50KTsKPj4gKwo+PiArCWlmIChwY2llX2luZm8tPmV2ZW50KQo+PiAr CQlyZXR1cm4gLUVOT1NQQzsKPj4gKwo+PiArCXBjaWVfaW5mby0+ZXZlbnQgPSBldmVudDsKPj4g Kwo+PiArCWh3Yy0+c3RhdGUgPSBQRVJGX0hFU19TVE9QUEVEIHwgUEVSRl9IRVNfVVBUT0RBVEU7 Cj4+ICsKPj4gKwlpZiAodHlwZSA9PSBEV0NfUENJRV9MQU5FX0VWRU5UKSB7Cj4+ICsJCWR3Y19w Y2llX3BtdV9ldmVudF9lbmFibGUocGNpZV9pbmZvLCAwKTsKPj4gKwkJZHdjX3BjaWVfcG11X3dy aXRlX2V2ZW50X2xhbmUocGNpZV9pbmZvLCBsYW5lLCBldmVudF9pZCk7Cj4+ICsJCWR3Y19wY2ll X3BtdV9zZXRfZXZlbnRfaWQocGNpZV9pbmZvLCBldmVudF9pZCk7Cj4+ICsJCWR3Y19wY2llX3Bt dV9jbGVhcl9ldmVudF9jb3VudGVyKHBjaWVfaW5mbyk7Cj4+ICsJfSBlbHNlIGlmICh0eXBlID09 IERXQ19QQ0lFX1RJTUVfQkFTRV9FVkVOVCkgewo+PiArCQlkd2NfcGNpZV9wbXVfYmFzZV90aW1l X2VuYWJsZShwY2llX2luZm8sIDApOwo+PiArCQlkd2NfcGNpZV9wbXVfYmFzZV90aW1lX2FkZF9w cmVwYXJlKHBjaWVfaW5mbywgZXZlbnRfaWQpOwo+PiArCX0gZWxzZSB7Cj4+ICsJCXBjaV9lcnIo cGNpZV9pbmZvLT5wZGV2LCAiSW5wdXQgcGFyYW0gaXMgaW52YWxpZFxuIik7Cj4+ICsJCXJldHVy biAtRUlOVkFMOwo+PiArCX0KPj4gKwo+PiArCWlmIChmbGFncyAmIFBFUkZfRUZfU1RBUlQpCj4+ ICsJCWR3Y19wY2llX3BtdV9ldmVudF9zdGFydChldmVudCwgUEVSRl9FRl9SRUxPQUQpOwo+PiAr Cj4+ICsJcGVyZl9ldmVudF91cGRhdGVfdXNlcnBhZ2UoZXZlbnQpOwo+PiArCj4+ICsJcmV0dXJu IDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGR3Y19wY2llX3BtdV9ldmVudF9kZWwoc3Ry dWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgZmxhZ3MpCj4+ICt7Cj4+ICsJc3RydWN0IGR3Y19w Y2llX2luZm9fdGFibGUgKnBjaWVfaW5mbyA9IHBtdV90b19wY2llX2luZm8oZXZlbnQtPnBtdSk7 Cj4+ICsKPj4gKwlkd2NfcGNpZV9wbXVfZXZlbnRfc3RvcChldmVudCwgZmxhZ3MgfCBQRVJGX0VG X1VQREFURSk7Cj4+ICsJcGVyZl9ldmVudF91cGRhdGVfdXNlcnBhZ2UoZXZlbnQpOwo+PiArCXBj aWVfaW5mby0+ZXZlbnQgPSBOVUxMOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBkd2NfcGNp ZV9wbXVfZXZlbnRfcmVhZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCj4+ICt7Cj4+ICsJZHdj X3BjaWVfcG11X2V2ZW50X3VwZGF0ZShldmVudCk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBzdHJ1 Y3QgZHdjX2V2ZW50X2NvdW50ZXJzIGV2ZW50X2FycmF5W10gPSB7Cj4+ICsJeyJ0eF9hY2tfZGxs cCIsIDB4NjAwfSwKPj4gKwl7InR4X3VwZGF0ZV9mY19kbGxwIiwgMHg2MDF9LAo+PiArCXsicnhf YWNrX2RsbHAiLCAweDYwMn0sCj4+ICsJeyJyeF91cGRhdGVfZmNfZGxscCIsIDB4NjAzfSwKPj4g Kwl7InJ4X251bGlmaWVkX3RscCIsIDB4NjA0fSwKPj4gKwl7InR4X251bGlmaWVkX3RscCIsIDB4 NjA1fSwKPj4gKwl7InJ4X2R1cGxpY2F0ZV90bHAiLCAweDYwNn0sCj4+ICsJeyJ0eF9tZW1vcnlf d3JpdGUiLCAweDcwMH0sCj4+ICsJeyJ0eF9tZW1vcnlfcmVhZCIsIDB4NzAxfSwKPj4gKwl7InR4 X2NvbmZpZ3VyYXRpb25fd3JpdGUiLCAweDcwMn0sCj4+ICsJeyJ0eF9jb25maWd1cmF0aW9uX3Jl YWQiLCAweDcwM30sCj4+ICsJeyJ0eF9pb193cml0ZSIsIDB4NzA0fSwKPj4gKwl7InR4X2lvX3Jl YWQiLCAweDcwNX0sCj4+ICsJeyJ0eF9jb21wbGV0aW9uX3dpdGhvdXRfZGF0YSIsIDB4NzA2fSwK Pj4gKwl7InR4X2NvbXBsZXRpb25fd2l0aF9kYXRhIiwgMHg3MDd9LAo+PiArCXsidHhfbWVzc2Fn ZV90bHAiLCAweDcwOH0sCj4+ICsJeyJ0eF9hdG9taWMiLCAweDcwOX0sCj4+ICsJeyJ0eF90bHBf d2l0aF9wcmVmaXgiLCAweDcwQX0sCj4+ICsJeyJyeF9tZW1vcnlfd3JpdGUiLCAweDcwQn0sCj4+ ICsJeyJyeF9tZW1vcnlfcmVhZCIsIDB4NzBDfSwKPj4gKwl7InJ4X2lvX3dyaXRlIiwgMHg3MEZ9 LAo+PiArCXsicnhfaW9fcmVhZCIsIDB4NzEwfSwKPj4gKwl7InJ4X2NvbXBsZXRpb25fd2l0aG91 dF9kYXRhIiwgMHg3MTF9LAo+PiArCXsicnhfY29tcGxldGlvbl93aXRoX2RhdGEiLCAweDcxMn0s Cj4+ICsJeyJyeF9tZXNzYWdlX3RscCIsIDB4NzEzfSwKPj4gKwl7InJ4X2F0b21pYyIsIDB4NzE0 fSwKPj4gKwl7InJ4X3RscF93aXRoX3ByZWZpeCIsIDB4NzE1fSwKPj4gKwl7InR4X2NjaXhfdGxw IiwgMHg3MTZ9LAo+PiArCXsicnhfY2NpeF90bHAiLCAweDcxN30sCj4+ICt9Owo+PiArCj4+ICtz dGF0aWMgaW50IGR3Y19wY2llX3BtdV9hdHRyX2luaXQoc3RydWN0IGR3Y19wY2llX3BtdV9wcml2 ICpwcml2LAo+PiArCQkJCSAgc3RydWN0IGR3Y19wY2llX2luZm9fdGFibGUgKnBjaWVfaW5mbykK Pj4gK3sKPj4gKwlpbnQgaSwgajsKPj4gKwljaGFyIGxhbmVbOF07Cj4+ICsJY29uc3QgY2hhciB0 bXBbNjRdOwo+PiArCWludCBldmVudHNfcGVyX2xhbmU7Cj4+ICsJaW50IG51bV9sYW5lX2V2ZW50 czsKPj4gKwlpbnQgdGltZV9iYXNlX2NvdW50Owo+PiArCWludCBudW1fYXR0cnMsIGF0dHJfaWR4 Owo+PiArCXN0cnVjdCBkd2NfcGNpZV9ldmVudF9hdHRyICpsYW5lX2F0dHJzOwo+PiArCXN0cnVj dCBhdHRyaWJ1dGUgKipwbXVfYXR0cnM7Cj4+ICsKPj4gKwltZW1zZXQoKHZvaWQgKil0bXAsIDAs IHNpemVvZih0bXApKTsKPj4gKwltZW1zZXQoKHZvaWQgKilsYW5lLCAwLCBzaXplb2YobGFuZSkp Owo+PiArCXRpbWVfYmFzZV9jb3VudCA9IEFSUkFZX1NJWkUoZHdjX3BjaWVfcG11X3RpbWVfZXZl bnRfYXR0cnMpOwo+PiArCWV2ZW50c19wZXJfbGFuZSA9IEFSUkFZX1NJWkUoZXZlbnRfYXJyYXkp Owo+PiArCW51bV9sYW5lX2V2ZW50cyA9IHBjaWVfaW5mby0+bnVtX2xhbmVzICogZXZlbnRzX3Bl cl9sYW5lOwo+PiArCW51bV9hdHRycyA9IHRpbWVfYmFzZV9jb3VudCArIG51bV9sYW5lX2V2ZW50 czsKPj4gKwo+PiArCXBjaWVfaW5mby0+bGFuZV9ldmVudF9hdHRycyA9Cj4+ICsJCWRldm1fa2Nh bGxvYyhwcml2LT5kZXYsIG51bV9sYW5lX2V2ZW50cywKPj4gKwkJCQlzaXplb2Yoc3RydWN0IGR3 Y19wY2llX2V2ZW50X2F0dHIpLAo+PiArCQkJCUdGUF9LRVJORUwpOwo+PiArCWlmICghcGNpZV9p bmZvLT5sYW5lX2V2ZW50X2F0dHJzKQo+PiArCQlyZXR1cm4gLUVOT01FTTsKPj4gKwlsYW5lX2F0 dHJzID0gcGNpZV9pbmZvLT5sYW5lX2V2ZW50X2F0dHJzOwo+PiArCXBjaWVfaW5mby0+cGNpZV9w bXVfZXZlbnRfYXR0cnMgPQo+PiArCQlkZXZtX2tjYWxsb2MocHJpdi0+ZGV2LCBudW1fYXR0cnMs IHNpemVvZihzdHJ1Y3QgYXR0cmlidXRlICopLAo+PiArCQkJIEdGUF9LRVJORUwpOwo+PiArCWlm ICghcGNpZV9pbmZvLT5wY2llX3BtdV9ldmVudF9hdHRycykKPj4gKwkJcmV0dXJuIC1FTk9NRU07 Cj4+ICsJcG11X2F0dHJzID0gcGNpZV9pbmZvLT5wY2llX3BtdV9ldmVudF9hdHRyczsKPj4gKwo+ PiArCWZvciAoaSA9IDA7IGkgPCBudW1fbGFuZV9ldmVudHM7IGkrKykgewo+PiArCQlsYW5lX2F0 dHJzW2ldLmF0dHIuYXR0ci5uYW1lID0KPj4gKwkJICAgIGRldm1fa3phbGxvYyhwcml2LT5kZXYs IHNpemVvZihjaGFyKQo+PiArCQkJCSAqIEFUVFJJX05BTUVfTUFYX1NJWkUsIEdGUF9LRVJORUwp Owo+PiArCQlpZiAoIWxhbmVfYXR0cnNbaV0uYXR0ci5hdHRyLm5hbWUpCj4+ICsJCQlyZXR1cm4g LUVOT01FTTsKPj4gKwl9Cj4+ICsKPj4gKwlhdHRyX2lkeCA9IDA7Cj4+ICsJZm9yIChpID0gMDsg aSA8IHBjaWVfaW5mby0+bnVtX2xhbmVzOyBpKyspIHsKPj4gKwkJc3ByaW50ZihsYW5lLCAiX2xh bmUlZCIsIGkpOwo+PiArCj4+ICsJCWZvciAoaiA9IDA7IGogPCBldmVudHNfcGVyX2xhbmU7IGor Kykgewo+PiArCQkJaW50IHBvcyA9IGkgKiBldmVudHNfcGVyX2xhbmUgKyBqOwo+PiArCj4+ICsJ CQlzdHJjYXQoKGNoYXIgKil0bXAsIGV2ZW50X2FycmF5W2pdLm5hbWUpOwo+PiArCQkJc3RyY2F0 KChjaGFyICopdG1wLCBsYW5lKTsKPj4gKwkJCW1lbWNweSgodm9pZCAqKWxhbmVfYXR0cnNbcG9z XS5hdHRyLmF0dHIubmFtZSwKPj4gKwkJCSAgICAgICAodm9pZCAqKXRtcCwKPj4gKwkJCSAgICAg ICBzaXplb2YodG1wKSk7Cj4+ICsKPj4gKwkJCWxhbmVfYXR0cnNbcG9zXS5hdHRyLmF0dHIubW9k ZSA9Cj4+ICsJCQkgICAgVkVSSUZZX09DVEFMX1BFUk1JU1NJT05TKDA0NDQpOwo+PiArCQkJbGFu ZV9hdHRyc1twb3NdLmF0dHIuc2hvdyA9IGR3Y19wY2llX2V2ZW50X3Nob3c7Cj4+ICsJCQlsYW5l X2F0dHJzW3Bvc10uYXR0ci5zdG9yZSA9IE5VTEw7Cj4+ICsJCQlsYW5lX2F0dHJzW3Bvc10udHlw ZSA9IERXQ19QQ0lFX0xBTkVfRVZFTlQ7Cj4+ICsJCQlsYW5lX2F0dHJzW3Bvc10uZXZlbnRpZCA9 IGV2ZW50X2FycmF5W2pdLmV2ZW50X2lkOwo+PiArCQkJbGFuZV9hdHRyc1twb3NdLmxhbmUgPSBp Owo+PiArCQkJcG11X2F0dHJzW2F0dHJfaWR4KytdID0gJmxhbmVfYXR0cnNbcG9zXS5hdHRyLmF0 dHI7Cj4+ICsKPj4gKwkJCW1lbXNldCgodm9pZCAqKXRtcCwgMCwgc2l6ZW9mKHRtcCkpOwo+PiAr CQl9Cj4+ICsJfQo+PiArCj4+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZHdjX3BjaWVf cG11X3RpbWVfZXZlbnRfYXR0cnMpOyBpKyspCj4+ICsJCXBtdV9hdHRyc1thdHRyX2lkeCsrXSA9 IGR3Y19wY2llX3BtdV90aW1lX2V2ZW50X2F0dHJzW2ldOwo+PiArCj4+ICsJcGNpZV9pbmZvLT5w Y2llX3BtdV9ldmVudF9hdHRyc1thdHRyX2lkeCsrXSA9IE5VTEw7Cj4+ICsKPj4gKwlwY2llX2lu Zm8tPnBjaWVfcG11X2V2ZW50X2F0dHJzX2dyb3VwLm5hbWUgPSBldmVudF9hdHRyX25hbWU7Cj4+ ICsJcGNpZV9pbmZvLT5wY2llX3BtdV9ldmVudF9hdHRyc19ncm91cC5pc192aXNpYmxlID0KPj4g KwkgICAgcGNpZV9wbXVfZXZlbnRfYXR0cl9pc192aXNpYmxlOwo+PiArCXBjaWVfaW5mby0+cGNp ZV9wbXVfZXZlbnRfYXR0cnNfZ3JvdXAuYXR0cnMgPQo+PiArCSAgICBwY2llX2luZm8tPnBjaWVf cG11X2V2ZW50X2F0dHJzOwo+PiArCj4+ICsJcGNpZV9pbmZvLT5wY2llX3BtdV9hdHRyX2dyb3Vw c1swXSA9Cj4+ICsJICAgICZwY2llX2luZm8tPnBjaWVfcG11X2V2ZW50X2F0dHJzX2dyb3VwOwo+ PiArCXBjaWVfaW5mby0+cGNpZV9wbXVfYXR0cl9ncm91cHNbMV0gPSAmcGNpZV9wbXVfZm9ybWF0 X2F0dHJzX2dyb3VwOwo+PiArCXBjaWVfaW5mby0+cGNpZV9wbXVfYXR0cl9ncm91cHNbMl0gPSAm cGNpZV9wbXVfY3B1bWFza19hdHRyc19ncm91cDsKPj4gKwlwY2llX2luZm8tPnBjaWVfcG11X2F0 dHJfZ3JvdXBzWzNdID0gTlVMTDsKPj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICtz dGF0aWMgaW50IF9fZHdjX3BjaWVfcG11X3Byb2JlKHN0cnVjdCBkd2NfcGNpZV9wbXVfcHJpdiAq cHJpdiwKPj4gKwkJCQlzdHJ1Y3QgZHdjX3BjaWVfaW5mb190YWJsZSAqcGNpZV9pbmZvKQo+PiAr ewo+PiArCWludCByZXQ7Cj4+ICsJY2hhciAqbmFtZTsKPj4gKwlzdHJ1Y3QgZHdjX3BjaWVfcG11 ICpwY2llX3BtdTsKPj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4+ICsKPj4gKwlpZiAoIXBjaWVf aW5mbyB8fCAhcGNpZV9pbmZvLT5wZGV2KSB7Cj4+ICsJCXBjaV9lcnIocGNpZV9pbmZvLT5wZGV2 LCAiSW5wdXQgcGFyYW1ldGVyIGlzIGludmFsaWRcbiIpOwo+PiArCQlyZXR1cm4gLUVJTlZBTDsK Pj4gKwl9Cj4+ICsKPj4gKwlwY2llX3BtdSA9ICZwY2llX2luZm8tPnBjaWVfcG11Owo+PiArCWRl diA9ICZwY2llX2luZm8tPnBkZXYtPmRldjsKPj4gKwo+PiArCXJldCA9IGR3Y19wY2llX3BtdV9h dHRyX2luaXQocHJpdiwgcGNpZV9pbmZvKTsKPj4gKwlpZiAocmV0KSB7Cj4+ICsJCXBjaV9lcnIo cGNpZV9pbmZvLT5wZGV2LCAiUE1VIGF0dHIgaW5pdCBmYWlsIHJldD0lZFxuIiwgcmV0KTsKPj4g KwkJcmV0dXJuIHJldDsKPj4gKwl9Cj4+ICsKPj4gKwlwY2llX3BtdS0+ZGV2ID0gZGV2Owo+PiAr CXBjaWVfcG11LT5wbXUgPSAoc3RydWN0IHBtdSkgewo+PiArCQkubW9kdWxlCQk9IFRISVNfTU9E VUxFLAo+PiArCQkudGFza19jdHhfbnIJPSBwZXJmX2ludmFsaWRfY29udGV4dCwKPj4gKwkJLnBt dV9lbmFibGUJPSBOVUxMLAo+PiArCQkucG11X2Rpc2FibGUJPSBOVUxMLAo+PiArCQkuZXZlbnRf aW5pdAk9IGR3Y19wY2llX3BtdV9ldmVudF9pbml0LAo+PiArCQkuYWRkCQk9IGR3Y19wY2llX3Bt dV9ldmVudF9hZGQsCj4+ICsJCS5kZWwJCT0gZHdjX3BjaWVfcG11X2V2ZW50X2RlbCwKPj4gKwkJ LnN0YXJ0CQk9IGR3Y19wY2llX3BtdV9ldmVudF9zdGFydCwKPj4gKwkJLnN0b3AJCT0gZHdjX3Bj aWVfcG11X2V2ZW50X3N0b3AsCj4+ICsJCS5yZWFkCQk9IGR3Y19wY2llX3BtdV9ldmVudF9yZWFk LAo+PiArCQkuYXR0cl9ncm91cHMJPSBwY2llX2luZm8tPnBjaWVfcG11X2F0dHJfZ3JvdXBzLAo+ PiArCQkuY2FwYWJpbGl0aWVzCT0gUEVSRl9QTVVfQ0FQX05PX0VYQ0xVREUsCj4+ICsJfTsKPj4g Kwo+PiArCW5hbWUgPSBkZXZtX2thc3ByaW50Zihwcml2LT5kZXYsIEdGUF9LRVJORUwsICJwY2ll X2JkZl8leCIsCj4+ICsJCQkgICAgICBwY2llX2luZm8tPmJkZik7Cj4+ICsJaWYgKCFuYW1lKQo+ PiArCQlyZXR1cm4gLUVOT01FTTsKPj4gKwo+PiArCS8qIFBpY2sgb25lIENQVSB0byBiZSB0aGUg cHJlZmVycmVkIG9uZSB0byB1c2UgKi8KPj4gKwlwY2llX3BtdS0+b25fY3B1ID0gcmF3X3NtcF9w cm9jZXNzb3JfaWQoKTsKPj4gKwo+IAo+IFNvIHdlJ2xsIHByb2JhYmxleSBiaW5kIGFsbCB0aGUg cG11cyBvbiBvbmUgc2luZ2xlIENQVSwgaXMgaXQgaW50ZW5kZWQ/IFNpbmNlIGl0J3MKPiBhbiB1 bmNvcmUgUE1VLCB3ZSBjYW4gbWFrZSBpdCBydW4gb24gYW55IGNwdSAob3IgZm9yIGxvY2FsaXR5 IENQVSBvbiB0aGUgY29udHJvbGxlcidzCj4gTlVNQSBub2RlKS4KPiAKPiBBbmQgSSBkaWRuJ3Qg c2VlIHlvdSByZWdpc3RlciBhIGhvdHBsdWcgaGFuZGxlciwgc28gd2hhdCBpZiB0aGUgLT5vbl9j cHUgaXMgaG90IHJlbW92ZWQ/CgpUaGlzIFBNVSBkb2VzIG5vdCBzdXBwb3J0IGludGVycnVwdCBh dCBhbGwsIHNvIHdlIGRvIG5vdCBuZWVkIHRvIGJpbmQgaXQgdG8gQ1BVLgpTaG91bGQgd2UgcmVt b3ZlIHRoaXMgbGluZT8KCj4gCj4+ICsJcmV0ID0gcGVyZl9wbXVfcmVnaXN0ZXIoJnBjaWVfcG11 LT5wbXUsIG5hbWUsIC0xKTsKPj4gKwlpZiAocmV0KSB7Cj4+ICsJCXBjaV9lcnIocGNpZV9pbmZv LT5wZGV2LCAiRXJyb3IgJWQgcmVnaXN0ZXJpbmcgUE1VIEAleFxuIiwgcmV0LAo+PiArCQkJCSBw Y2llX2luZm8tPmJkZik7Cj4gCj4gd2lsbCBiZSBtb3JlIGhlbHBmdWwgdG8gcHJpbnQgdGhlIGJk ZiBhcyBmb3JtYXQgPGJ1cz46PGRldj46PGZ1bmM+LgoKR29vZCBpZGVhLCB3aWxsIGZpeCBpbiBu ZXh0IHZlcnNpb24uCgo+IAo+PiArCQlyZXR1cm4gcmV0Owo+PiArCX0KPj4gKwo+PiArCXBjaWVf aW5mby0+cG11X2lzX3JlZ2lzdGVyID0gRFdDX1BDSUVfUE1VX0hBU19SRUdJU1RFUjsKPiAKPiBN YWtlIEBwbXVfaXNfcmVnaXN0ZXIgYSBib29sZWFuIHdpbGwgYmUgbW9yZSBjbGVhci4KCkBwbXVf aXNfcmVnaXN0ZXIgaXMgYWxzbyBkaXNjdXNzZWQgaW4gSm9uYXRoYW4nIHJlcGx5LiBKb25hdGhh biBzdWdnZXN0cyB0bwpyZW1vdmUgaXQsIHNvIGxldCBkaXNjdXNzIGlmIHRvIGtlZXAgdGhpcyBm aWVsZCBmaXJzdCA6KSBJZiB3ZSBkZWNpZGUgdG8ga2VlcAppdCwgSSB3aWxsIGxldCBpdCBiZSBi b29sZWFuLgoKPiAKPj4gKwo+PiArCXJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBp bnQgZHdjX3BjaWVfcG11X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+PiAr ewo+PiArCXN0cnVjdCBkd2NfcGNpZV9wbXVfcHJpdiAqcHJpdiA9IHBsYXRmb3JtX2dldF9kcnZk YXRhKHBkZXYpOwo+PiArCWludCBpbmRleDsKPj4gKwlzdHJ1Y3QgZHdjX3BjaWVfcG11ICpwY2ll X3BtdTsKPiAKPiBNYWtlIHRoZSBsb25nIGxpbmUgZmlyc3Qgd2hlbiBkZWNsYXJpbmcuCgpBZ3Jl ZSwgd2lsbCBjaGFuZ2UgdGhlIGNvZGUgc3R5bGUuCgo+IAo+PiArCj4+ICsJZm9yIChpbmRleCA9 IDA7IGluZGV4IDwgcHJpdi0+cGNpZV9jdHJsX251bTsgaW5kZXgrKykKPj4gKwkJaWYgKHByaXYt PnBjaWVfdGFibGVbaW5kZXhdLnBtdV9pc19yZWdpc3Rlcikgewo+PiArCQkJcGNpZV9wbXUgPSAm cHJpdi0+cGNpZV90YWJsZVtpbmRleF0ucGNpZV9wbXU7Cj4+ICsJCQlwZXJmX3BtdV91bnJlZ2lz dGVyKCZwY2llX3BtdS0+cG11KTsKPj4gKwkJfQo+PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ ICtzdGF0aWMgaW50IGR3Y19wY2llX3BtdV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2KQo+PiArewo+PiArCWludCByZXQgPSAwOwo+PiArCWludCBwY2llX2luZGV4Owo+PiArCXN0 cnVjdCBkd2NfcGNpZV9wbXVfcHJpdiAqcHJpdjsKPj4gKwo+PiArCXByaXYgPSBkZXZtX2t6YWxs b2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7Cj4+ICsJaWYgKCFwcml2 KQo+PiArCQlyZXR1cm4gLUVOT01FTTsKPj4gKwlwcml2LT5kZXYgPSAmcGRldi0+ZGV2Owo+PiAr CXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHByaXYpOwo+PiArCj4+ICsJLyogSWYgUE1VIGlz IG5vdCBzdXBwb3J0IG9uIGN1cnJlbnQgcGxhdGZvcm0sIGtlZXAgc2xpZW50ICovCj4+ICsJaWYg KGR3Y19wY2llX3BtdV9kaXNjb3Zlcihwcml2KSkKPj4gKwkJcmV0dXJuIDA7Cj4+ICsKPj4gKwlm b3IgKHBjaWVfaW5kZXggPSAwOyBwY2llX2luZGV4IDwgcHJpdi0+cGNpZV9jdHJsX251bTsgcGNp ZV9pbmRleCsrKSB7Cj4+ICsJCXN0cnVjdCBwY2lfZGV2ICpycCA9IHByaXYtPnBjaWVfdGFibGVb cGNpZV9pbmRleF0ucGRldjsKPj4gKwo+PiArCQlyZXQgPSBfX2R3Y19wY2llX3BtdV9wcm9iZShw cml2LCAmcHJpdi0+cGNpZV90YWJsZVtwY2llX2luZGV4XSk7Cj4+ICsJCWlmIChyZXQpIHsKPj4g KwkJCWRldl9lcnIoJnJwLT5kZXYsICJQQ0llIFBNVSBwcm9iZSBmYWlsXG4iKTsKPj4gKwkJCWdv dG8gcG11X3VucmVnaXN0ZXI7Cj4+ICsJCX0KPj4gKwl9Cj4+ICsJZGV2X2luZm8oJnBkZXYtPmRl diwgIlBDSWUgUE1VcyByZWdpc3RlcmVkXG4iKTsKPj4gKwo+IAo+IEFzIEpvbmF0aGFuIG1lbnRp b25lZCB0aGlzIG1lc3NhZ2UgbWF5YmUgdW5uZWNlc3NhcnksIGJ1dCBJIG1heSBmaW5kIGl0IHVz ZWZ1bCBpZiB5b3UKPiBwcmludCBob3cgbWFueSBQTVUncyByZWdpc3RlcmVkLgoKRmluZSwgSSBj YW4gYWRkIGEgY291bnQgaGVyZS4KCj4gCj4gT24gb25lIFBNVSByZWdpc3RyYXRpb24gZmFpbGVk LCB5b3UganVzdCByZW1vdmUgYWxsIHRoZSBQTVVzIHJlZ2lzdGVyZWQuIEkgd29uZGVyIGlmCj4g aXQncyBiZXR0ZXIgdG8gbWFrZSBhbHJlYWR5IHJlZ2lzdGVyZWQgUE1VIHN0YXkgaW5zdGVhZCBv ZiByZW1vdmluZyB0aGVtIGFsbC4KCklmIHBlcmZfcG11X3JlZ2lzdGVyIGZhaWxzLCBpcyBpdCBu ZWNlc3NhcnkgdG8gY2FsbCBwZXJmX3BtdV91bnJlZ2lzdGVyPyBJIGRpZCBub3QgZmluZApzaW1p bGFyIGltcGxlbWVudGF0aW9uIHRvIHVucmVnaXN0ZXIgcG11IHdoZW4gcGVyZl9wbXVfcmVnaXN0 ZXIgZmFpbHMuCgo+IAo+IEdsYWQgdG8gc2VlIGFub3RoZXIgUENJZSBQTVUgZGV2aWNlIQo+IAo+ IFRoYW5rcywKPiBZaWNvbmcKClRoYW5rIHlvdSBmb3IgeW91ciB2YWx1YWJsZSBjb21tZW50cy4g SSBob3BlIHdlIGNhbiB1cHN0cmVhbSB0aGlzIGRyaXZlciB0b28gOikKCkNoZWVycywKU2h1YWkK Cj4gCj4+ICsJcmV0dXJuIDA7Cj4+ICsKPj4gK3BtdV91bnJlZ2lzdGVyOgo+PiArCWR3Y19wY2ll X3BtdV9yZW1vdmUocGRldik7Cj4+ICsKPj4gKwlyZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ICtz dGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBkd2NfcGNpZV9wbXVfZHJpdmVyID0gewo+PiAr CS5wcm9iZSA9IGR3Y19wY2llX3BtdV9wcm9iZSwKPj4gKwkucmVtb3ZlID0gZHdjX3BjaWVfcG11 X3JlbW92ZSwKPj4gKwkuZHJpdmVyID0gey5uYW1lID0gRFJWX05BTUUsfSwKPj4gK307Cj4+ICsK Pj4gK3N0YXRpYyBpbnQgX19pbml0IGR3Y19wY2llX3BtdV9pbml0KHZvaWQpCj4+ICt7Cj4+ICsJ aW50IHJldDsKPj4gKwo+PiArCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZHdjX3Bj aWVfcG11X2RyaXZlcik7Cj4+ICsKPj4gKwlpZiAocmV0KQo+PiArCQlyZXR1cm4gcmV0Owo+PiAr Cj4+ICsJZHdjX3BjaWVfcG11X2RldiA9Cj4+ICsJICAgIHBsYXRmb3JtX2RldmljZV9yZWdpc3Rl cl9zaW1wbGUoREVWX05BTUUsIC0xLCBOVUxMLCAwKTsKPj4gKwlpZiAoSVNfRVJSKGR3Y19wY2ll X3BtdV9kZXYpKSB7Cj4+ICsJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZkd2NfcGNpZV9w bXVfZHJpdmVyKTsKPj4gKwkJcmV0dXJuIFBUUl9FUlIoZHdjX3BjaWVfcG11X2Rldik7Cj4+ICsJ fQo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIF9fZXhpdCBk d2NfcGNpZV9wbXVfZXhpdCh2b2lkKQo+PiArewo+PiArCXBsYXRmb3JtX2RldmljZV91bnJlZ2lz dGVyKGR3Y19wY2llX3BtdV9kZXYpOwo+PiArCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZk d2NfcGNpZV9wbXVfZHJpdmVyKTsKPj4gK30KPj4gKwo+PiArbW9kdWxlX2luaXQoZHdjX3BjaWVf cG11X2luaXQpOwo+PiArbW9kdWxlX2V4aXQoZHdjX3BjaWVfcG11X2V4aXQpOwo+PiArCj4+ICtN T0RVTEVfREVTQ1JJUFRJT04oIlBNVSBkcml2ZXIgZm9yIERlc2lnbldhcmUgQ29yZXMgUENJIEV4 cHJlc3MgQ29udHJvbGxlciIpOwo+PiArTU9EVUxFX0FVVEhPUigieHVlc2h1YWlAbGludXguYWxp YmFiYS5jb20iKTsKPj4gK01PRFVMRV9BVVRIT1IoInlpbnh1YW5fY3dAbGludXguYWxpYmFiYS5j b20iKTsKPj4gK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKPj4KCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBs aXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5m cmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK