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 3F90AC6FA8B for ; Fri, 23 Sep 2022 03:31:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date: Message-ID:From:References:To:Subject:CC:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=fslDL32cTdNXT1MWrnpf3n3uHTVj1I7rOxnK4WoLJWo=; b=MTav32x9AzzODqZHbFD7+NjfUC L7LnXrDXaiOJJIuaer9E0yY7s6X7EKkiHtLbkqhP4tHl0VrprxwxxpTIJVgtAvyHCC4M1iPYJdefi JjHDseEiR0m8YslykUGhmbbt9CazM1MDVtVzUHKuy9hyxkRWfOlWNh6yz6waeQFreKR8ErhocsQt5 VQuLM/INzksl8r0JCDKM/RJgkr6bX8thjbls0N4CGJvPbycYQPtq0KLI68qo0fvJiL9PgI6veHvdt gjojDARa1cf5Zs39/L1tL7h3dducZvntOFiDtbfeJugdBvrcbSFWVhHHsNsBoO2CwFNQ51+wI32RW RXAmhDbQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1obZOP-001jHR-6P; Fri, 23 Sep 2022 03:30:21 +0000 Received: from szxga01-in.huawei.com ([45.249.212.187]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1obZOI-001jFY-Iu for linux-arm-kernel@lists.infradead.org; Fri, 23 Sep 2022 03:30:19 +0000 Received: from canpemm500009.china.huawei.com (unknown [172.30.72.53]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4MYcyq57PpzpVcM; Fri, 23 Sep 2022 11:27:15 +0800 (CST) Received: from [10.67.102.169] (10.67.102.169) by canpemm500009.china.huawei.com (7.192.105.203) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Fri, 23 Sep 2022 11:30:06 +0800 CC: , , , , , , , , , Subject: Re: [PATCH v1 2/3] drivers/perf: add DesignWare PCIe PMU driver To: Shuai Xue References: <20220917121036.14864-1-xueshuai@linux.alibaba.com> <20220917121036.14864-3-xueshuai@linux.alibaba.com> From: Yicong Yang Message-ID: Date: Fri, 23 Sep 2022 11:30:05 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.5.1 MIME-Version: 1.0 In-Reply-To: <20220917121036.14864-3-xueshuai@linux.alibaba.com> X-Originating-IP: [10.67.102.169] X-ClientProxiedBy: dggems704-chm.china.huawei.com (10.3.19.181) To canpemm500009.china.huawei.com (7.192.105.203) X-CFilter-Loop: Reflected X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220922_203015_181954_779E0638 X-CRM114-Status: GOOD ( 32.80 ) 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 T24gMjAyMi85LzE3IDIwOjEwLCBTaHVhaSBYdWUgd3JvdGU6Cj4gVGhpcyBjb21taXQgYWRkcyB0 aGUgUENJZSBQZXJmb3JtYW5jZSBNb25pdG9yaW5nIFVuaXQgKFBNVSkgZHJpdmVyIHN1cHBvcnQK PiBmb3IgVC1IZWFkIFlpdGlhbiBTb0MgY2hpcC4gWWl0aWFuIGlzIGJhc2VkIG9uIHRoZSBTeW5v cHN5cyBQQ0kgRXhwcmVzcwo+IENvcmUgY29udHJvbGxlciBJUCB3aGljaCBwcm92aWRlcyBzdGF0 aXN0aWNzIGZlYXR1cmUuIFRoZSBQTVUgaXMgbm90IGEgUENJZQo+IFJvb3QgQ29tcGxleCBpbnRl Z3JhdGVkIEVuZCBQb2ludChSQ2lFUCkgZGV2aWNlIGJ1dCBvbmx5IHJlZ2lzdGVyIGNvdW50ZXJz Cj4gcHJvdmlkZWQgYnkgZWFjaCBQQ0llIFJvb3QgUG9ydC4KPiAKPiBUbyBmYWNpbGl0YXRlIGNv bGxlY3Rpb24gb2Ygc3RhdGlzdGljcyB0aGUgY29udHJvbGxlciBwcm92aWRlcyB0aGUKPiBmb2xs b3dpbmcgdHdvIGZlYXR1cmVzIGZvciBlYWNoIFJvb3QgUG9ydDoKPiAKPiAtIFRpbWUgQmFzZWQg QW5hbHlzaXMgKFJYL1RYIGRhdGEgdGhyb3VnaHB1dCBhbmQgdGltZSBzcGVudCBpbiBlYWNoCj4g ICBsb3ctcG93ZXIgTFRTU00gc3RhdGUpCj4gLSBFdmVudCBjb3VudGVycyAoRXJyb3IgYW5kIE5v bi1FcnJvciBmb3IgbGFuZXMpCj4gCj4gTm90ZSwgb25seSBvbmUgY291bnRlciBmb3IgZWFjaCB0 eXBlLgo+IAo+IFRoaXMgZHJpdmVyIGFkZCBQTVUgZGV2aWNlcyBmb3IgZWFjaCBQQ0llIFJvb3Qg UG9ydC4gQW5kIHRoZSBQTVUgZGV2aWNlIGlzCj4gbmFtZWQgYmFzZWQgdGhlIEJERiBvZiBSb290 IFBvcnQuIEZvciBleGFtcGxlLAo+IAo+ICAgICAxMDowMC4wIFBDSSBicmlkZ2U6IERldmljZSAx ZGVkOjgwMDAgKHJldiAwMSkKPiAKPiB0aGUgUE1VIGRldmljZSBuYW1lIGZvciB0aGlzIFJvb3Qg UG9ydCBpcyBwY2llX2JkZl8xMDAwMDAuCj4gCj4gRXhhbXBsZSB1c2FnZSBvZiBjb3VudGluZyBQ Q0llIFJYIFRMUCBkYXRhIHBheWxvYWQgKFVuaXRzIG9mIDE2IGJ5dGVzKTo6Cj4gCj4gICAgICQj IHBlcmYgc3RhdCAtYSAtZSBwY2llX2JkZl8yMDAvUnhfUENJZV9UTFBfRGF0YV9QYXlsb2FkLwo+ IAo+IGF2ZXJhZ2UgUlggYmFuZHdpZHRoIGNhbiBiZSBjYWxjdWxhdGVkIGxpa2UgdGhpczoKPiAK PiAgICAgUENJZSBUWCBCYW5kd2lkdGggPSBQQ0lFX1RYX0RBVEEgKiAxNkIgLyBNZWFzdXJlX1Rp bWVfV2luZG93Cj4gCj4gU2lnbmVkLW9mZi1ieTogU2h1YWkgWHVlIDx4dWVzaHVhaUBsaW51eC5h bGliYWJhLmNvbT4KPiAtLS0KPiAgZHJpdmVycy9wZXJmL0tjb25maWcgICAgICAgIHwgICA3ICsK PiAgZHJpdmVycy9wZXJmL01ha2VmaWxlICAgICAgIHwgICAxICsKPiAgZHJpdmVycy9wZXJmL2R3 Y19wY2llX3BtdS5jIHwgOTc2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ ICAzIGZpbGVzIGNoYW5nZWQsIDk4NCBpbnNlcnRpb25zKCspCj4gIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL3BlcmYvZHdjX3BjaWVfcG11LmMKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9w ZXJmL0tjb25maWcgYi9kcml2ZXJzL3BlcmYvS2NvbmZpZwo+IGluZGV4IDFlMmQ2OTQ1Mzc3MS4u MTFhZTk5ZGU1YmJmIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvcGVyZi9LY29uZmlnCj4gKysrIGIv ZHJpdmVycy9wZXJmL0tjb25maWcKPiBAQCAtMTkyLDQgKzE5MiwxMSBAQCBjb25maWcgTUFSVkVM TF9DTjEwS19ERFJfUE1VCj4gIAkgIEVuYWJsZSBwZXJmIHN1cHBvcnQgZm9yIE1hcnZlbGwgRERS IFBlcmZvcm1hbmNlIG1vbml0b3JpbmcKPiAgCSAgZXZlbnQgb24gQ04xMEsgcGxhdGZvcm0uCj4g IAo+ICtjb25maWcgQ09ORklHX0RXQ19QQ0lFX1BNVQo+ICsJdHJpc3RhdGUgIkVuYWJsZSBTeW5v cHN5cyBEZXNpZ25XYXJlIFBDSWUgUE1VIFN1cHBvcnQiCj4gKwlkZXBlbmRzIG9uIEFSTTY0IHx8 IChDT01QSUxFX1RFU1QgJiYgNjRCSVQpCj4gKwloZWxwCj4gKwkgIEVuYWJsZSBwZXJmIHN1cHBv cnQgZm9yIFN5bm9wc3lzIERlc2lnbldhcmUgUENJZSBQTVUgUGVyZm9ybWFuY2UKPiArCSAgbW9u aXRvcmluZyBldmVudCBvbiBZaXRhbiA3MTAgcGxhdGZvcm0uCj4gKwo+ICBlbmRtZW51Cj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvcGVyZi9NYWtlZmlsZSBiL2RyaXZlcnMvcGVyZi9NYWtlZmlsZQo+ IGluZGV4IDU3YTI3OWM2MWRmNS4uMzZmNzVjYjBmMzIwIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMv cGVyZi9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvcGVyZi9NYWtlZmlsZQo+IEBAIC0yMCwzICsy MCw0IEBAIG9iai0kKENPTkZJR19BUk1fRE1DNjIwX1BNVSkgKz0gYXJtX2RtYzYyMF9wbXUubwo+ ICBvYmotJChDT05GSUdfTUFSVkVMTF9DTjEwS19UQURfUE1VKSArPSBtYXJ2ZWxsX2NuMTBrX3Rh ZF9wbXUubwo+ICBvYmotJChDT05GSUdfTUFSVkVMTF9DTjEwS19ERFJfUE1VKSArPSBtYXJ2ZWxs X2NuMTBrX2Rkcl9wbXUubwo+ICBvYmotJChDT05GSUdfQVBQTEVfTTFfQ1BVX1BNVSkgKz0gYXBw bGVfbTFfY3B1X3BtdS5vCj4gK29iai0kKENPTkZJR19EV0NfUENJRV9QTVUpICs9IGR3Y19wY2ll X3BtdS5vCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGVyZi9kd2NfcGNpZV9wbXUuYyBiL2RyaXZl cnMvcGVyZi9kd2NfcGNpZV9wbXUuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAw MDAwMDAwMDAwLi44MWU1MzRiZTEzZmEKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9w ZXJmL2R3Y19wY2llX3BtdS5jCj4gQEAgLTAsMCArMSw5NzYgQEAKPiArLy8gU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEdQTC0yLjAKPiArLyoKPiArICogU3lub3BzeXMgRGVzaWduV2FyZSBQQ0ll IFBNVSBkcml2ZXIKPiArICoKPiArICogQ29weXJpZ2h0IChDKSAyMDIxLCAyMDIyIEFsaWJhYmEg SW5jLgo+ICsgKi8KPiArwqAKPiArI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgo+ICsjaW5jbHVkZSA8 bGludXgvYml0ZmllbGQuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgo+ICsjaW5jbHVk ZSA8bGludXgvY3B1aG90cGx1Zy5oPgo+ICsjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgo+ICsj aW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgo+ICsj aW5jbHVkZSA8bGludXgva2VybmVsLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Cj4gKyNp bmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9k ZXZpY2UuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgo+ICsjaW5jbHVkZSA8bGludXgvc3lz ZnMuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Cj4gKwo+ICsjZGVmaW5lIERSVl9OQU1F CQkJCSJkd2NfcGNpZV9wbXUiCj4gKyNkZWZpbmUgREVWX05BTUUJCQkJImR3Y19wY2llX3BtdSIK PiArI2RlZmluZSBSUF9OVU1fTUFYCQkJCTMyIC8qIDJkaWUgKiA0UkMgKiA0Q3Ryb2wgKi8KPiAr I2RlZmluZSBBVFRSSV9OQU1FX01BWF9TSVpFCQkJMzIKPiArCj4gKyNkZWZpbmUgRFdDX1BDSUVf VlNFQ19JRAkJCTB4MDIKPiArI2RlZmluZSBEV0NfUENJRV9WU0VDX1JFVgkJCTB4MDQKPiArCj4g KyNkZWZpbmUgRFdDX1BDSUVfTElOS19DQVBBQklMSVRJRVNfUkVHCQkweEMKPiArI2RlZmluZSBE V0NfUENJRV9MQU5FX1NISUZUCQkJNAo+ICsjZGVmaW5lIERXQ19QQ0lFX0xBTkVfTUFTSwkJCUdF Tk1BU0soOSwgNCkKPiArCj4gKyNkZWZpbmUgRFdDX1BDSUVfRVZFTlRfQ05UX0NUUkwJCQkweDgK PiArI2RlZmluZSBEV0NfUENJRV9fQ05UX0VWRU5UX1NFTEVDVF9TSElGVAkxNgo+ICsjZGVmaW5l IERXQ19QQ0lFX19DTlRfRVZFTlRfU0VMRUNUX01BU0sJCUdFTk1BU0soMjcsIDE2KQo+ICsjZGVm aW5lIERXQ19QQ0lFX19DTlRfTEFORV9TRUxFQ1RfU0hJRlQJCTgKPiArI2RlZmluZSBEV0NfUENJ RV9fQ05UX0xBTkVfU0VMRUNUX01BU0sJCUdFTk1BU0soMTEsIDgpCj4gKyNkZWZpbmUgRFdDX1BD SUVfX0NOVF9TVEFUVVNfU0hJRlQJCTcKPiArI2RlZmluZSBEV0NfUENJRV9fQ05UX1NUQVRVU19N QVNLCQlCSVQoNykKPiArI2RlZmluZSBEV0NfUENJRV9fQ05UX0VOQUJMRV9TSElGVAkJMgo+ICsj ZGVmaW5lIERXQ19QQ0lFX19DTlRfRU5BQkxFX01BU0sJCUdFTk1BU0soNCwgMikKPiArI2RlZmlu ZSBEV0NfUENJRV9QRVJfRVZFTlRfT0ZGCQkJKDB4MSA8PCBEV0NfUENJRV9fQ05UX0VOQUJMRV9T SElGVCkKPiArI2RlZmluZSBEV0NfUENJRV9QRVJfRVZFTlRfT04JCQkoMHgzIDw8IERXQ19QQ0lF X19DTlRfRU5BQkxFX1NISUZUKQo+ICsjZGVmaW5lIERXQ19QQ0lFX0VWRU5UX0NMRUFSX01BU0sJ CUdFTk1BU0soMSwgMCkKPiArCj4gKyNkZWZpbmUgRFdDX1BDSUVfRVZFTlRfQ05UX0RBVEEJCQkw eEMKPiArCj4gKyNkZWZpbmUgRFdDX1BDSUVfVElNRV9CQVNFRF9BTkFMWVNJU19DVFJMCTB4MTAK PiArI2RlZmluZSBEV0NfUENJRV9fVElNRV9CQVNFRF9SRVBPUlRfU0VMRUNUX1NISUZUCTI0Cj4g KyNkZWZpbmUgRFdDX1BDSUVfX1RJTUVfQkFTRURfUkVQT1JUX1NFTEVDVF9NQVNLCUdFTk1BU0so MzEsIDI0KQo+ICsjZGVmaW5lIERXQ19QQ0lFX19USU1FX0JBU0VEX0RVUkFUSU9OX1NISUZUCTgK PiArI2RlZmluZSBEV0NfUENJRV9fVElNRV9CQVNFRF9EVVJBVElPTl9TRUxFQ1QJR0VOTUFTSygx NSwgOCkKPiArI2RlZmluZSBEV0NfUENJRV9EVVJBVElPTl9NQU5VQUxfQ1RSTAkJMHgwCj4gKyNk ZWZpbmUgRFdDX1BDSUVfRFVSQVRJT05fMU1TCQkJMHgxCj4gKyNkZWZpbmUgRFdDX1BDSUVfRFVS QVRJT05fMTBNUwkJCTB4Mgo+ICsjZGVmaW5lIERXQ19QQ0lFX0RVUkFUSU9OXzEwME1TCQkJMHgz Cj4gKyNkZWZpbmUgRFdDX1BDSUVfRFVSQVRJT05fMVMJCQkweDQKPiArI2RlZmluZSBEV0NfUENJ RV9EVVJBVElPTl8yUwkJCTB4NQo+ICsjZGVmaW5lIERXQ19QQ0lFX0RVUkFUSU9OXzRTCQkJMHg2 Cj4gKyNkZWZpbmUgRFdDX1BDSUVfRFVSQVRJT05fNFVTCQkJMHhmZgo+ICsjZGVmaW5lIERXQ19Q Q0lFX19USU1FX0JBU0VEX0NPVU5URVJfRU5BQkxFCTEKPiArCj4gKyNkZWZpbmUgRFdDX1BDSUVf VElNRV9CQVNFRF9BTkFMWVNJU19EQVRBX1JFR19MT1cJMHgxNAo+ICsjZGVmaW5lIERXQ19QQ0lF X1RJTUVfQkFTRURfQU5BTFlTSVNfREFUQV9SRUdfSElHSAkweDE4Cj4gKwo+ICsvKiBFdmVudCBh dHRyaWJ1dGVzICovCj4gKyNkZWZpbmUgRFdDX1BDSUVfQ09ORklHX0VWRU5USUQJCQlHRU5NQVNL KDE1LCAwKQo+ICsjZGVmaW5lIERXQ19QQ0lFX0NPTkZJR19UWVBFCQkJR0VOTUFTSygxOSwgMTYp Cj4gKyNkZWZpbmUgRFdDX1BDSUVfQ09ORklHX0xBTkUJCQlHRU5NQVNLKDI3LCAyMCkKPiArCj4g KyNkZWZpbmUgRFdDX1BDSUVfRVZFTlRfSUQoZXZlbnQpCUZJRUxEX0dFVChEV0NfUENJRV9DT05G SUdfRVZFTlRJRCwgKGV2ZW50KS0+YXR0ci5jb25maWcpCj4gKyNkZWZpbmUgRFdDX1BDSUVfRVZF TlRfVFlQRShldmVudCkJRklFTERfR0VUKERXQ19QQ0lFX0NPTkZJR19UWVBFLCAoZXZlbnQpLT5h dHRyLmNvbmZpZykKPiArI2RlZmluZSBEV0NfUENJRV9FVkVOVF9MQU5FKGV2ZW50KQlGSUVMRF9H RVQoRFdDX1BDSUVfQ09ORklHX0xBTkUsIChldmVudCktPmF0dHIuY29uZmlnKQo+ICsKPiArI2Rl ZmluZSBEV0NfUENJRV9QTVVfSEFTX1JFR0lTVEVSCQkxCj4gKwo+ICtlbnVtIGR3Y19wY2llX2V2 ZW50X3R5cGUgewo+ICsJRFdDX1BDSUVfVFlQRV9JTlZBTElELAo+ICsJRFdDX1BDSUVfVElNRV9C QVNFX0VWRU5ULAo+ICsJRFdDX1BDSUVfTEFORV9FVkVOVCwKPiArfTsKPiArCj4gK3N0cnVjdCBk d2NfZXZlbnRfY291bnRlcnMgewo+ICsJY29uc3QgY2hhciBuYW1lWzMyXTsKPiArCXUzMiBldmVu dF9pZDsKPiArfTsKPiArCj4gK3N0cnVjdCBkd2NfcGNpZV9wbXUgewo+ICsJc3RydWN0IGhsaXN0 X25vZGUgbm9kZTsKPiArCXVuc2lnbmVkIGludCBvbl9jcHU7Cj4gKwlzdHJ1Y3QgcG11IHBtdTsK PiArCXN0cnVjdCBkZXZpY2UgKmRldjsKPiArfTsKPiArCj4gK3N0cnVjdCBkd2NfcGNpZV9pbmZv X3RhYmxlIHsKPiArCXUzMiBiZGY7Cj4gKwl1MzIgY2FwX3BvczsKPiArCXUzMiBudW1fbGFuZXM7 Cj4gKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKPiArCXN0cnVjdCBkd2NfcGNpZV9wbXUgcGNpZV9w bXU7Cj4gKwl1OCBwbXVfaXNfcmVnaXN0ZXI7Cj4gKwlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7 Cj4gKwo+ICsJc3RydWN0IGR3Y19wY2llX2V2ZW50X2F0dHIgKmxhbmVfZXZlbnRfYXR0cnM7Cj4g KwlzdHJ1Y3QgYXR0cmlidXRlICoqcGNpZV9wbXVfZXZlbnRfYXR0cnM7Cj4gKwlzdHJ1Y3QgYXR0 cmlidXRlX2dyb3VwIHBjaWVfcG11X2V2ZW50X2F0dHJzX2dyb3VwOwo+ICsJY29uc3Qgc3RydWN0 IGF0dHJpYnV0ZV9ncm91cCAqcGNpZV9wbXVfYXR0cl9ncm91cHNbNF07Cj4gK307Cj4gKwo+ICtz dHJ1Y3QgZHdjX3BjaWVfcG11X3ByaXYgewo+ICsJc3RydWN0IGRldmljZSAqZGV2Owo+ICsJdTMy IHBjaWVfY3RybF9udW07Cj4gKwlzdHJ1Y3QgZHdjX3BjaWVfaW5mb190YWJsZSAqcGNpZV90YWJs ZTsKPiArfTsKPiArCj4gKyNkZWZpbmUgRFdDX1BDSUVfQ1JFQVRFX0JERihzZWcsIGJ1cywgZGV2 LCBmdW5jKQlcCj4gKwkoKChzZWcpIDw8IDI0KSB8ICgoKGJ1cykgJiAweEZGKSA8PCAxNikgfCAo KChkZXYpICYgMHhGRikgPDwgOCkgfCAoZnVuYykpCgpKdXN0IHBhc3MgcGRldi0+ZGV2Zm4gYW5k IHVzZSBQQ0lfREVWSUQoKSB0byBzaW1wbGlmeSBoZXJlLgoKPiArI2RlZmluZSB0b19wY2llX3Bt dShwKSAoY29udGFpbmVyX29mKHAsIHN0cnVjdCBkd2NfcGNpZV9wbXUsIHBtdSkpCj4gKwo+ICtz dGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZHdjX3BjaWVfcG11X2RldjsKPiArc3RhdGlj IGNoYXIgKmV2ZW50X2F0dHJfbmFtZSA9ICJldmVudHMiOwo+ICsKPiArc3RhdGljIHNzaXplX3Qg ZHdjX3BjaWVfcG11X2NwdW1hc2tfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCj4gKwkJCQkJIHN0 cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAo+ICsJCQkJCSBjaGFyICpidWYpCj4gK3sKPiAr CXN0cnVjdCBkd2NfcGNpZV9wbXUgKnBjaWVfcG11ID0gdG9fcGNpZV9wbXUoZGV2X2dldF9kcnZk YXRhKGRldikpOwo+ICsKPiArCXJldHVybiBjcHVtYXBfcHJpbnRfdG9fcGFnZWJ1Zih0cnVlLCBi dWYsIGNwdW1hc2tfb2YocGNpZV9wbXUtPm9uX2NwdSkpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3Ry dWN0IGRldmljZV9hdHRyaWJ1dGUgZHdjX3BjaWVfcG11X2NwdW1hc2tfYXR0ciA9Cj4gK19fQVRU UihjcHVtYXNrLCAwNDQ0LCBkd2NfcGNpZV9wbXVfY3B1bWFza19zaG93LCBOVUxMKTsKPiArCj4g K3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkd2NfcGNpZV9wbXVfY3B1bWFza19hdHRyc1tdID0g ewo+ICsJJmR3Y19wY2llX3BtdV9jcHVtYXNrX2F0dHIuYXR0ciwKPiArCU5VTEwKPiArfTsKPiAr Cj4gK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHBjaWVfcG11X2NwdW1hc2tfYXR0cnNf Z3JvdXAgPSB7Cj4gKwkuYXR0cnMgPSBkd2NfcGNpZV9wbXVfY3B1bWFza19hdHRycywKPiArfTsK PiArCj4gK3N0cnVjdCBkd2NfcGNpZV9mb3JtYXRfYXR0ciB7Cj4gKwlzdHJ1Y3QgZGV2aWNlX2F0 dHJpYnV0ZSBhdHRyOwo+ICsJdTY0IGZpZWxkOwo+ICsJaW50IGNvbmZpZzsKPiArfTsKPiArCj4g K3N0YXRpYyBzc2l6ZV90IGR3Y19wY2llX3BtdV9mb3JtYXRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpk ZXYsCj4gKwkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCj4gKwkJCQkJY2hhciAq YnVmKQo+ICt7Cj4gKwlzdHJ1Y3QgZHdjX3BjaWVfZm9ybWF0X2F0dHIgKmZtdCA9IGNvbnRhaW5l cl9vZihhdHRyLCB0eXBlb2YoKmZtdCksIGF0dHIpOwo+ICsJaW50IGxvID0gX19mZnMoZm10LT5m aWVsZCksIGhpID0gX19mbHMoZm10LT5maWVsZCk7Cj4gKwo+ICsJaWYgKGxvID09IGhpKQo+ICsJ CXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgImNvbmZpZzolZFxuIiwgbG8pOwo+ICsK PiArCWlmICghZm10LT5jb25maWcpCj4gKwkJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpF LCAiY29uZmlnOiVkLSVkXG4iLCBsbywgaGkpOwo+ICsKPiArCXJldHVybiBzbnByaW50ZihidWYs IFBBR0VfU0laRSwgImNvbmZpZyVkOiVkLSVkXG4iLCBmbXQtPmNvbmZpZywgbG8sCj4gKwkJCWhp KTsKPiArfQo+ICsKPiArI2RlZmluZSBfZHdjX3BjaWVfZm9ybWF0X2F0dHIoX25hbWUsIF9jZmcs IF9mbGQpCQkJCVwKPiArCSgmKChzdHJ1Y3QgZHdjX3BjaWVfZm9ybWF0X2F0dHJbXSkge3sJCQkJ XAo+ICsJCS5hdHRyID0gX19BVFRSKF9uYW1lLCAwNDQ0LCBkd2NfcGNpZV9wbXVfZm9ybWF0X3No b3csIE5VTEwpLAlcCj4gKwkJLmNvbmZpZyA9IF9jZmcsCQkJCQkJXAo+ICsJCS5maWVsZCA9IF9m bGQsCQkJCQkJXAo+ICsJfX0pWzBdLmF0dHIuYXR0cikKPiArCj4gKyNkZWZpbmUgZHdjX3BjaWVf Zm9ybWF0X2F0dHIoX25hbWUsIF9mbGQpCV9kd2NfcGNpZV9mb3JtYXRfYXR0cihfbmFtZSwgMCwg X2ZsZCkKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkd2NfcGNpZV9mb3JtYXRfYXR0 cnNbXSA9IHsKPiArCWR3Y19wY2llX2Zvcm1hdF9hdHRyKHR5cGUsIERXQ19QQ0lFX0NPTkZJR19U WVBFKSwKPiArCWR3Y19wY2llX2Zvcm1hdF9hdHRyKGV2ZW50aWQsIERXQ19QQ0lFX0NPTkZJR19F VkVOVElEKSwKPiArCWR3Y19wY2llX2Zvcm1hdF9hdHRyKGxhbmUsIERXQ19QQ0lFX0NPTkZJR19M QU5FKSwKPiArCU5VTEwsCj4gK307Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91 cCBwY2llX3BtdV9mb3JtYXRfYXR0cnNfZ3JvdXAgPSB7Cj4gKwkubmFtZSA9ICJmb3JtYXQiLAo+ ICsJLmF0dHJzID0gZHdjX3BjaWVfZm9ybWF0X2F0dHJzLAo+ICt9Owo+ICsKPiArc3RydWN0IGR3 Y19wY2llX2V2ZW50X2F0dHIgewo+ICsJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgYXR0cjsKPiAr CWVudW0gZHdjX3BjaWVfZXZlbnRfdHlwZSB0eXBlOwo+ICsJdTE2IGV2ZW50aWQ7Cj4gKwl1OCBs YW5lOwo+ICt9Owo+ICsKPiArc3NpemVfdCBkd2NfcGNpZV9ldmVudF9zaG93KHN0cnVjdCBkZXZp Y2UgKmRldiwKPiArCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpwYWdl KQo+ICt7Cj4gKwlzdHJ1Y3QgZHdjX3BjaWVfZXZlbnRfYXR0ciAqZWF0dHI7Cj4gKwo+ICsJZWF0 dHIgPSBjb250YWluZXJfb2YoYXR0ciwgdHlwZW9mKCplYXR0ciksIGF0dHIpOwo+ICsKPiArCWlm IChlYXR0ci0+dHlwZSA9PSBEV0NfUENJRV9MQU5FX0VWRU5UKQo+ICsJCXJldHVybiBzcHJpbnRm KHBhZ2UsICJldmVudGlkPTB4JWx4LCB0eXBlPTB4JWx4LCBsYW5lPTB4JWx4XG4iLAo+ICsJCQkg ICAgICAgKHVuc2lnbmVkIGxvbmcpZWF0dHItPmV2ZW50aWQsCj4gKwkJCSAgICAgICAodW5zaWdu ZWQgbG9uZyllYXR0ci0+dHlwZSwKPiArCQkJICAgICAgICh1bnNpZ25lZCBsb25nKWVhdHRyLT5s YW5lKTsKPiArCWVsc2UKPiArCQlyZXR1cm4gc3ByaW50ZihwYWdlLCAiZXZlbnRpZD0weCVseCwg dHlwZT0weCVseCIsCj4gKwkJCSAgICAgICAodW5zaWduZWQgbG9uZyllYXR0ci0+ZXZlbnRpZCwK PiArCQkJICAgICAgICh1bnNpZ25lZCBsb25nKWVhdHRyLT50eXBlKTsKPiArfQoKSSByZW1lbWJl ciBzeXNmc19lbWl0KCkgaXMgcHJlZmVycmVkLgoKPiArCj4gKyNkZWZpbmUgRFdDX1BDSUVfRVZF TlRfQVRUUihfbmFtZSwgX3R5cGUsIF9ldmVudGlkLCBfbGFuZSkJCVwKPiArCSgmKChzdHJ1Y3Qg ZHdjX3BjaWVfZXZlbnRfYXR0cltdKSB7ewkJCQlcCj4gKwkJLmF0dHIgPSBfX0FUVFIoX25hbWUs IDA0NDQsIGR3Y19wY2llX2V2ZW50X3Nob3csIE5VTEwpLAlcCj4gKwkJLnR5cGUgPSBfdHlwZSwJ CQkJCQlcCj4gKwkJLmV2ZW50aWQgPSBfZXZlbnRpZCwJCQkJCVwKPiArCQkubGFuZSA9IF9sYW5l LAkJCQkJXAo+ICsJfX0pWzBdLmF0dHIuYXR0cikKPiArCj4gKyNkZWZpbmUgRFdDX1BDSUVfUE1V X0JBU0VfVElNRV9BVFRSKF9uYW1lLCBfZXZlbnRpZCkJCQlcCj4gKwlEV0NfUENJRV9FVkVOVF9B VFRSKF9uYW1lLCBEV0NfUENJRV9USU1FX0JBU0VfRVZFTlQsIF9ldmVudGlkLCAwKQo+ICsKPiAr c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmR3Y19wY2llX3BtdV90aW1lX2V2ZW50X2F0dHJzW10g PSB7Cj4gKwkvKiBHcm91cCAjMCAqLwo+ICsJRFdDX1BDSUVfUE1VX0JBU0VfVElNRV9BVFRSKG9u ZV9jeWNsZSwgMHgwMCksCj4gKwlEV0NfUENJRV9QTVVfQkFTRV9USU1FX0FUVFIoVFhfTDBTLCAw eDAxKSwKPiArCURXQ19QQ0lFX1BNVV9CQVNFX1RJTUVfQVRUUihSWF9MMFMsIDB4MDIpLAo+ICsJ RFdDX1BDSUVfUE1VX0JBU0VfVElNRV9BVFRSKEwwLCAweDAzKSwKPiArCURXQ19QQ0lFX1BNVV9C QVNFX1RJTUVfQVRUUihMMSwgMHgwNCksCj4gKwlEV0NfUENJRV9QTVVfQkFTRV9USU1FX0FUVFIo TDFfMSwgMHgwNSksCj4gKwlEV0NfUENJRV9QTVVfQkFTRV9USU1FX0FUVFIoTDFfMiwgMHgwNiks Cj4gKwlEV0NfUENJRV9QTVVfQkFTRV9USU1FX0FUVFIoQ0ZHX1JDVlJZLCAweDA3KSwKPiArCURX Q19QQ0lFX1BNVV9CQVNFX1RJTUVfQVRUUihUWF9SWF9MMFMsIDB4MDgpLAo+ICsJRFdDX1BDSUVf UE1VX0JBU0VfVElNRV9BVFRSKEwxX0FVWCwgMHgwOSksCj4gKwlEV0NfUENJRV9QTVVfQkFTRV9U SU1FX0FUVFIoT05FX2N5Y2xlLCAweDEwKSwKPiArCURXQ19QQ0lFX1BNVV9CQVNFX1RJTUVfQVRU UihUWF9MMFNfLCAweDExKSwKPiArCURXQ19QQ0lFX1BNVV9CQVNFX1RJTUVfQVRUUihSWF9MMFNf LCAweDEyKSwKPiArCURXQ19QQ0lFX1BNVV9CQVNFX1RJTUVfQVRUUihMMF8sIDB4MTMpLAo+ICsJ RFdDX1BDSUVfUE1VX0JBU0VfVElNRV9BVFRSKEwxXywgMHgxNyksCj4gKwlEV0NfUENJRV9QTVVf QkFTRV9USU1FX0FUVFIoQ0ZHX1JDVlJZXywgMHgxNyksCj4gKwlEV0NfUENJRV9QTVVfQkFTRV9U SU1FX0FUVFIoVFhfUlhfTDBTXywgMHgxOCksCj4gKwkvKiBHcm91cCAjMSAqLwo+ICsJRFdDX1BD SUVfUE1VX0JBU0VfVElNRV9BVFRSKFR4X1BDSWVfVExQX0RhdGFfUGF5bG9hZCwgMHgyMCksCj4g KwlEV0NfUENJRV9QTVVfQkFTRV9USU1FX0FUVFIoUnhfUENJZV9UTFBfRGF0YV9QYXlsb2FkLCAw eDIxKSwKPiArCURXQ19QQ0lFX1BNVV9CQVNFX1RJTUVfQVRUUihUeF9DQ0lYX1RMUF9EYXRhX1Bh eWxvYWQsIDB4MjIpLAo+ICsJRFdDX1BDSUVfUE1VX0JBU0VfVElNRV9BVFRSKFJ4X0NDSVhfVExQ X0RhdGFfUGF5bG9hZCwgMHgyMyksCj4gKwlOVUxMCj4gK307Cj4gKwo+ICtzdGF0aWMgaW5saW5l IHVtb2RlX3QgcGNpZV9wbXVfZXZlbnRfYXR0cl9pc192aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICpr b2JqLAo+ICsJCQkJCQkgICAgIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsCj4gKwkJCQkJCSAgICAg aW50IHVudXNlKQo+ICt7Cj4gKwlyZXR1cm4gYXR0ci0+bW9kZTsKPiArfQo+ICsKPiArc3RhdGlj IGlubGluZSBib29sIHBjaV9kZXZfaXNfcm9vdHBvcnQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCj4g K3sKPiArCXJldHVybiAocGNpX2lzX3BjaWUocGRldikgJiYKPiArCQlwY2lfcGNpZV90eXBlKHBk ZXYpID09IFBDSV9FWFBfVFlQRV9ST09UX1BPUlQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5l IHVuc2lnbmVkIGludCBkd2NfcGNpZV9nZXRfYmRmKHN0cnVjdCBwY2lfZGV2ICpkZXYpCj4gK3sK PiArCXJldHVybiAoRFdDX1BDSUVfQ1JFQVRFX0JERihwY2lfZG9tYWluX25yKGRldi0+YnVzKSwg ZGV2LT5idXMtPm51bWJlciwKPiArCQkJCSAgICBQQ0lfU0xPVChkZXYtPmRldmZuKSwKPiArCQkJ CSAgICBQQ0lfRlVOQyhkZXYtPmRldmZuKSkpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGR3Y19w Y2llX2ZpbmRfcmFzX2Rlc19jYXBfcG9zaXRpb24oc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCAq cG9zKQo+ICt7Cj4gKwl1MzIgaGVhZGVyOwo+ICsJaW50IHZzZWMgPSAwOwo+ICsKPiArCXdoaWxl ICgodnNlYyA9IHBjaV9maW5kX25leHRfZXh0X2NhcGFiaWxpdHkocGRldiwgdnNlYywKPiArCQkJ CQkJICAgIFBDSV9FWFRfQ0FQX0lEX1ZORFIpKSkgewo+ICsJCXBjaV9yZWFkX2NvbmZpZ19kd29y ZChwZGV2LCB2c2VjICsgUENJX1ZORFJfSEVBREVSLCAmaGVhZGVyKTsKPiArCQkvKiBJcyB0aGUg ZGV2aWNlIHBhcnQgb2YgYSBEZXNpZ25XYXJlIENvcmVzIFBDSWUgQ29udHJvbGxlciA/ICovCj4g KwkJaWYgKFBDSV9WTkRSX0hFQURFUl9JRChoZWFkZXIpID09IERXQ19QQ0lFX1ZTRUNfSUQgJiYK PiArCQkgICAgUENJX1ZORFJfSEVBREVSX1JFVihoZWFkZXIpID09IERXQ19QQ0lFX1ZTRUNfUkVW KSB7Cj4gKwkJCSpwb3MgPSB2c2VjOwo+ICsJCQlyZXR1cm4gMDsKPiArCQl9Cj4gKwl9Cj4gKwo+ ICsJcmV0dXJuIC1FTk9ERVY7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHdjX3BjaWVfcG11X2Rp c2NvdmVyKHN0cnVjdCBkd2NfcGNpZV9wbXVfcHJpdiAqcHJpdikKPiArewo+ICsJaW50IHZhbCwg d2hlcmUsIGluZGV4ID0gMDsKPiArCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gTlVMTDsKPiArCXN0 cnVjdCBkd2NfcGNpZV9pbmZvX3RhYmxlICpwY2llX2luZm87Cj4gKwo+ICsJcHJpdi0+cGNpZV90 YWJsZSA9Cj4gKwkgICAgZGV2bV9rY2FsbG9jKHByaXYtPmRldiwgUlBfTlVNX01BWCwgc2l6ZW9m KCpwY2llX2luZm8pLCBHRlBfS0VSTkVMKTsKPiArCWlmICghcHJpdi0+cGNpZV90YWJsZSkKPiAr CQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwlwY2llX2luZm8gPSBwcml2LT5wY2llX3RhYmxlOwo+ ICsJd2hpbGUgKChwZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwg cGRldikpICE9IE5VTEwgJiYKCkkgbWF5IG1pc3MgYnV0IEkgZG9uJ3QgcGNpX2Rldl9wdXQoKSB0 byBiYWxhbmNlIHRoZSByZWZlcmVuY2UgY250LgoKPiArCSAgICAgICBpbmRleCA8IFJQX05VTV9N QVgpIHsKPiArCQlpZiAoIXBjaV9kZXZfaXNfcm9vdHBvcnQocGRldikpCj4gKwkJCWNvbnRpbnVl Owo+ICsKPiArCQlwY2llX2luZm9baW5kZXhdLmJkZiA9IGR3Y19wY2llX2dldF9iZGYocGRldik7 Cj4gKwkJcGNpZV9pbmZvW2luZGV4XS5wZGV2ID0gcGRldjsKPiArCj4gKwkJaWYgKGR3Y19wY2ll X2ZpbmRfcmFzX2Rlc19jYXBfcG9zaXRpb24ocGRldiwgJndoZXJlKSkKPiArCQkJY29udGludWU7 Cj4gKwo+ICsJCXBjaWVfaW5mb1tpbmRleF0uY2FwX3BvcyA9IHdoZXJlOwo+ICsKPiArCQlwY2lf cmVhZF9jb25maWdfZHdvcmQocGRldiwKPiArCQkJCXBkZXYtPnBjaWVfY2FwICsgRFdDX1BDSUVf TElOS19DQVBBQklMSVRJRVNfUkVHLAo+ICsJCQkJJnZhbCk7Cj4gKwkJcGNpZV9pbmZvW2luZGV4 XS5udW1fbGFuZXMgPQo+ICsJCQkodmFsICYgRFdDX1BDSUVfTEFORV9NQVNLKSA+PiBEV0NfUENJ RV9MQU5FX1NISUZUOwo+ICsJCWluZGV4Kys7Cj4gKwl9Cj4gKwo+ICsJaWYgKCFpbmRleCkKPiAr CQlyZXR1cm4gLUVOT0RFVjsKPiArCj4gKwlwcml2LT5wY2llX2N0cmxfbnVtID0gaW5kZXg7Cj4g Kwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgaW50IGR3Y19wY2llX3Bt dV9yZWFkX2R3b3JkKHN0cnVjdCBkd2NfcGNpZV9pbmZvX3RhYmxlICpwY2llX2luZm8sCj4gKwkJ CQkJICB1MzIgcmVnLCB1MzIgKnZhbCkKPiArewo+ICsJcmV0dXJuIHBjaV9yZWFkX2NvbmZpZ19k d29yZChwY2llX2luZm8tPnBkZXYsIHBjaWVfaW5mby0+Y2FwX3BvcyArIHJlZywKPiArCQkJCSAg ICAgdmFsKTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSBpbnQgZHdjX3BjaWVfcG11X3dyaXRl X2R3b3JkKHN0cnVjdCBkd2NfcGNpZV9pbmZvX3RhYmxlCj4gKwkJCQkJICAgKnBjaWVfaW5mbywg dTMyIHJlZywgdTMyIHZhbCkKPiArewo+ICsJcmV0dXJuIHBjaV93cml0ZV9jb25maWdfZHdvcmQo cGNpZV9pbmZvLT5wZGV2LCBwY2llX2luZm8tPmNhcF9wb3MgKyByZWcsCj4gKwkJCQkgICAgICB2 YWwpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGR3Y19wY2llX3BtdV9zZXRfZXZlbnRfaWQoc3Ry dWN0IGR3Y19wY2llX2luZm9fdGFibGUgKnBjaWVfaW5mbywKPiArCQkJCSAgICAgaW50IGV2ZW50 X2lkKQo+ICt7Cj4gKwlpbnQgcmV0Owo+ICsJdTMyIHZhbDsKPiArCj4gKwlyZXQgPSBkd2NfcGNp ZV9wbXVfcmVhZF9kd29yZChwY2llX2luZm8sIERXQ19QQ0lFX0VWRU5UX0NOVF9DVFJMLCAmdmFs KTsKPiArCWlmIChyZXQpIHsKPiArCQlwY2lfZXJyKHBjaWVfaW5mby0+cGRldiwgIlBDSWUgcmVh ZCBmYWlsXG4iKTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCXZhbCAmPSB+RFdDX1BD SUVfX0NOVF9FTkFCTEVfTUFTSzsKPiArCXZhbCAmPSB+RFdDX1BDSUVfX0NOVF9FVkVOVF9TRUxF Q1RfTUFTSzsKPiArCXZhbCB8PSBldmVudF9pZCA8PCBEV0NfUENJRV9fQ05UX0VWRU5UX1NFTEVD VF9TSElGVDsKPiArCj4gKwlyZXQgPSBkd2NfcGNpZV9wbXVfd3JpdGVfZHdvcmQocGNpZV9pbmZv LCBEV0NfUENJRV9FVkVOVF9DTlRfQ1RSTCwgdmFsKTsKPiArCWlmIChyZXQpCj4gKwkJcGNpX2Vy cihwY2llX2luZm8tPnBkZXYsICJQQ0llIHdyaXRlIGZhaWxcbiIpOwo+ICsKPiArCXJldHVybiBy ZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHdjX3BjaWVfcG11X3dyaXRlX2V2ZW50X2xhbmUo c3RydWN0IGR3Y19wY2llX2luZm9fdGFibGUgKnBjaWVfaW5mbywKPiArCQkJCQkgaW50IGxhbmUs IGludCBldmVudF9pZCkKPiArewo+ICsJdTMyIHJldDsKPiArCXUzMiB2YWw7Cj4gKwo+ICsJcmV0 ID0gZHdjX3BjaWVfcG11X3JlYWRfZHdvcmQocGNpZV9pbmZvLCBEV0NfUENJRV9FVkVOVF9DTlRf Q1RSTCwgJnZhbCk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJcGNpX2VycihwY2llX2luZm8tPnBkZXYs ICJQQ0llIHJlYWQgZmFpbFxuIik7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwl2YWwg Jj0gfkRXQ19QQ0lFX19DTlRfTEFORV9TRUxFQ1RfTUFTSzsKPiArCXZhbCB8PSBsYW5lIDw8IERX Q19QQ0lFX19DTlRfTEFORV9TRUxFQ1RfU0hJRlQ7Cj4gKwo+ICsJcmV0ID0gZHdjX3BjaWVfcG11 X3dyaXRlX2R3b3JkKHBjaWVfaW5mbywgRFdDX1BDSUVfRVZFTlRfQ05UX0NUUkwsIHZhbCk7Cj4g KwlpZiAocmV0KQo+ICsJCXBjaV9lcnIocGNpZV9pbmZvLT5wZGV2LCAiUENJZSB3cml0ZSBmYWls XG4iKTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGR3Y19wY2ll X3BtdV9ldmVudF9lbmFibGUoc3RydWN0IGR3Y19wY2llX2luZm9fdGFibGUgKnBjaWVfaW5mbywK PiArCQkJCSAgICAgdTMyIGVuYWJsZSkKPiArewo+ICsJdTMyIHJldDsKPiArCXUzMiB2YWw7Cj4g Kwo+ICsJcmV0ID0gZHdjX3BjaWVfcG11X3JlYWRfZHdvcmQocGNpZV9pbmZvLCBEV0NfUENJRV9F VkVOVF9DTlRfQ1RSTCwgJnZhbCk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJcGNpX2VycihwY2llX2lu Zm8tPnBkZXYsICJQQ0llIHJlYWQgZmFpbFxuIik7CgpTb21lYm9keSBtYXkgbWVudGlvbmVkLiBN YXliZSB5b3UgZG9uJ3QgbmVlZCB0byBwcmludCB0aGVzZSBtZXNzYWdlcyBpbiBQTVUgb3BzLCBq dXN0CnJldHVybiB0aGUgY29ycmVjdCBlcnJvciBjb2RlIGFuZCBsZXQgcGVyZiBoYW5kbGUgaXQu IE9yIHlvdSBzaG91bGQgcHJvdmlkZSBtb3JlCmluZm9ybWF0aW9uIGZvciB0aGVzZSwgbGlrZSBm YWlsZWQgaW4gd2hpY2ggZnVuY2lvbiBvciByZWFkL3dyaXRlIHdoaWNoIHZhbHVlLgpJZiBpdCBv bmx5IG5lY2Vzc2FyeSB3aGVuIGRlYnVnZ2luZywgbWFrZSBpdCBwY2lfZGJnKCkuCgo+ICsJCXJl dHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJdmFsICY9IH4oRFdDX1BDSUVfX0NOVF9FTkFCTEVfTUFT Syk7Cj4gKwo+ICsJaWYgKGVuYWJsZSkKPiArCQl2YWwgfD0gRFdDX1BDSUVfUEVSX0VWRU5UX09O Owo+ICsJZWxzZQo+ICsJCXZhbCB8PSBEV0NfUENJRV9QRVJfRVZFTlRfT0ZGOwo+ICsKPiArCXJl dCA9IGR3Y19wY2llX3BtdV93cml0ZV9kd29yZChwY2llX2luZm8sIERXQ19QQ0lFX0VWRU5UX0NO VF9DVFJMLCB2YWwpOwo+ICsJaWYgKHJldCkKPiArCQlwY2lfZXJyKHBjaWVfaW5mby0+cGRldiwg IlBDSWUgd3JpdGUgZmFpbFxuIik7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3Rh dGljIGludCBkd2NfcGNpZV9wbXVfYmFzZV90aW1lX2VuYWJsZShzdHJ1Y3QgZHdjX3BjaWVfaW5m b190YWJsZSAqcGNpZV9pbmZvLAo+ICsJCQkJCSB1MzIgZW5hYmxlKQo+ICt7Cj4gKwl1MzIgcmV0 Owo+ICsJdTMyIHZhbDsKPiArCj4gKwlyZXQgPSBkd2NfcGNpZV9wbXVfcmVhZF9kd29yZChwY2ll X2luZm8sCj4gKwkJCQkgICAgICBEV0NfUENJRV9USU1FX0JBU0VEX0FOQUxZU0lTX0NUUkwsICZ2 YWwpOwo+ICsJaWYgKHJldCkgewo+ICsJCXBjaV9lcnIocGNpZV9pbmZvLT5wZGV2LCAiUENJZSBy ZWFkIGZhaWxcbiIpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJaWYgKGVuYWJsZSkK PiArCQl2YWwgfD0gRFdDX1BDSUVfX1RJTUVfQkFTRURfQ09VTlRFUl9FTkFCTEU7Cj4gKwllbHNl Cj4gKwkJdmFsICY9IH5EV0NfUENJRV9fVElNRV9CQVNFRF9DT1VOVEVSX0VOQUJMRTsKPiArCj4g KwlyZXQgPSBkd2NfcGNpZV9wbXVfd3JpdGVfZHdvcmQocGNpZV9pbmZvLAo+ICsJCQkJICAgICAg IERXQ19QQ0lFX1RJTUVfQkFTRURfQU5BTFlTSVNfQ1RSTCwgdmFsKTsKPiArCWlmIChyZXQpCj4g KwkJcGNpX2VycihwY2llX2luZm8tPnBkZXYsICJQQ0llIHdyaXRlIGZhaWxcbiIpOwo+ICsKPiAr CXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHdjX3BjaWVfcG11X3JlYWRfZXZl bnRfY291bnRlcihzdHJ1Y3QgZHdjX3BjaWVfaW5mb190YWJsZQo+ICsJCQkJCSAgICpwY2llX2lu Zm8sIHU2NCAqY291bnRlcikKPiArewo+ICsJdTMyIHJldCwgdmFsOwo+ICsKPiArCXJldCA9IGR3 Y19wY2llX3BtdV9yZWFkX2R3b3JkKHBjaWVfaW5mbywgRFdDX1BDSUVfRVZFTlRfQ05UX0RBVEEs ICZ2YWwpOwo+ICsJaWYgKHJldCkgewo+ICsJCXBjaV9lcnIocGNpZV9pbmZvLT5wZGV2LCAiUENJ ZSByZWFkIGZhaWxcbiIpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwkqY291bnRlciA9IHZh bDsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGR3Y19wY2llX3Bt dV9yZWFkX2Jhc2VfdGltZV9jb3VudGVyKHN0cnVjdCBkd2NfcGNpZV9pbmZvX3RhYmxlCj4gKwkJ CQkJICAgICAgICpwY2llX2luZm8sIHU2NCAqY291bnRlcikKPiArewo+ICsJdTMyIHJldCwgdmFs Owo+ICsKPiArCXJldCA9IGR3Y19wY2llX3BtdV9yZWFkX2R3b3JkKHBjaWVfaW5mbywKPiArCQkJ CSAgICAgIERXQ19QQ0lFX1RJTUVfQkFTRURfQU5BTFlTSVNfREFUQV9SRUdfSElHSCwKPiArCQkJ CSAgICAgICZ2YWwpOwo+ICsJaWYgKHJldCkgewo+ICsJCXBjaV9lcnIocGNpZV9pbmZvLT5wZGV2 LCAiUENJZSByZWFkIGZhaWxcbiIpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJKmNv dW50ZXIgPSB2YWw7Cj4gKwkqY291bnRlciA8PD0gMzI7Cj4gKwo+ICsJcmV0ID0gZHdjX3BjaWVf cG11X3JlYWRfZHdvcmQocGNpZV9pbmZvLAo+ICsJCQkJICAgICAgRFdDX1BDSUVfVElNRV9CQVNF RF9BTkFMWVNJU19EQVRBX1JFR19MT1csCj4gKwkJCQkgICAgICAmdmFsKTsKPiArCWlmIChyZXQp IHsKPiArCQlwY2lfZXJyKHBjaWVfaW5mby0+cGRldiwgIlBDSWUgcmVhZCBmYWlsXG4iKTsKPiAr CQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCSpjb3VudGVyICs9IHZhbDsKPiArCj4gKwlyZXR1 cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGR3Y19wY2llX3BtdV9jbGVhcl9ldmVudF9j b3VudGVyKHN0cnVjdCBkd2NfcGNpZV9pbmZvX3RhYmxlCj4gKwkJCQkJICAgICpwY2llX2luZm8p Cj4gK3sKPiArCXUzMiByZXQ7Cj4gKwl1MzIgdmFsOwo+ICsKPiArCXJldCA9IGR3Y19wY2llX3Bt dV9yZWFkX2R3b3JkKHBjaWVfaW5mbywgRFdDX1BDSUVfRVZFTlRfQ05UX0NUUkwsICZ2YWwpOwo+ ICsJaWYgKHJldCkgewo+ICsJCXBjaV9lcnIocGNpZV9pbmZvLT5wZGV2LCAiUENJZSByZWFkIGZh aWxcbiIpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJdmFsICY9IH5EV0NfUENJRV9F VkVOVF9DTEVBUl9NQVNLOwo+ICsJdmFsIHw9IDE7CgpJdCdzIGJldHRlciB0byB1c2UgYSBtYWNy byBmb3IgJzEnIHRvIG1ha2UgaXQgbW9yZSBjbGVhci4KCj4gKwo+ICsJcmV0ID0gZHdjX3BjaWVf cG11X3dyaXRlX2R3b3JkKHBjaWVfaW5mbywgRFdDX1BDSUVfRVZFTlRfQ05UX0NUUkwsIHZhbCk7 Cj4gKwlpZiAocmV0KQo+ICsJCXBjaV9lcnIocGNpZV9pbmZvLT5wZGV2LCAiUENJZSB3cml0ZSBm YWlsXG4iKTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGR3Y19w Y2llX3BtdV9iYXNlX3RpbWVfYWRkX3ByZXBhcmUoc3RydWN0IGR3Y19wY2llX2luZm9fdGFibGUK PiArCQkJCQkgICAgICAqcGNpZV9pbmZvLCB1MzIgZXZlbnRfaWQpCj4gK3sKPiArCXUzMiByZXQ7 Cj4gKwl1MzIgdmFsOwo+ICsKPiArCXJldCA9IGR3Y19wY2llX3BtdV9yZWFkX2R3b3JkKHBjaWVf aW5mbywKPiArCQkJCSAgICAgIERXQ19QQ0lFX1RJTUVfQkFTRURfQU5BTFlTSVNfQ1RSTCwgJnZh bCk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJcGNpX2VycihwY2llX2luZm8tPnBkZXYsICJQQ0llIHJl YWQgZmFpbFxuIik7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwl2YWwgJj0gfkRXQ19Q Q0lFX19USU1FX0JBU0VEX1JFUE9SVF9TRUxFQ1RfTUFTSzsKPiArCXZhbCB8PSBldmVudF9pZCA8 PCBEV0NfUENJRV9fVElNRV9CQVNFRF9SRVBPUlRfU0VMRUNUX1NISUZUOwo+ICsJdmFsICY9IH5E V0NfUENJRV9fVElNRV9CQVNFRF9EVVJBVElPTl9TRUxFQ1Q7Cj4gKwo+ICsJLyoKPiArCSAqIFRJ TUVfQkFTRURfQU5BTFlTSVNfREFUQV9SRUcgaXMgYSA2NCBiaXQgcmVnaXN0ZXIsIHdlIGNhbiBz YWZlbHkKPiArCSAqIHVzZSBpdCB3aXRoIGFueSBtYW51YWxseSBjb250cm9sbGVyZWQgZHVyYXRp b24uCj4gKwkgKi8KPiArCXZhbCAmPSB+KERXQ19QQ0lFX19USU1FX0JBU0VEX0RVUkFUSU9OX1NF TEVDVCk7Cj4gKwl2YWwgfD0gRFdDX1BDSUVfRFVSQVRJT05fTUFOVUFMX0NUUkw7Cj4gKwo+ICsJ cmV0ID0gZHdjX3BjaWVfcG11X3dyaXRlX2R3b3JkKHBjaWVfaW5mbywKPiArCQkJCSAgICAgICBE V0NfUENJRV9USU1FX0JBU0VEX0FOQUxZU0lTX0NUUkwsIHZhbCk7Cj4gKwlpZiAocmV0KQo+ICsJ CXBjaV9lcnIocGNpZV9pbmZvLT5wZGV2LCAiUENJZSB3cml0ZSBmYWlsXG4iKTsKPiArCj4gKwly ZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGR3Y19wY2llX2luZm9fdGFibGUg KnBtdV90b19wY2llX2luZm8oc3RydWN0IHBtdSAqcG11KQo+ICt7Cj4gKwlzdHJ1Y3QgZHdjX3Bj aWVfaW5mb190YWJsZSAqcGNpZV9pbmZvOwo+ICsJc3RydWN0IGR3Y19wY2llX3BtdSAqcGNpZV9w bXUgPSB0b19wY2llX3BtdShwbXUpOwo+ICsKPiArCXBjaWVfaW5mbyA9IGNvbnRhaW5lcl9vZihw Y2llX3BtdSwgc3RydWN0IGR3Y19wY2llX2luZm9fdGFibGUsIHBjaWVfcG11KTsKPiArCWlmIChw Y2llX2luZm8gPT0gTlVMTCkKPiArCQlwY2lfZXJyKHBjaWVfaW5mby0+cGRldiwgIkNhbid0IGdl dCBwY2llIGluZm9cbiIpOwo+ICsKPiArCXJldHVybiBwY2llX2luZm87Cj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkIGR3Y19wY2llX3BtdV9ldmVudF91cGRhdGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2 ZW50KQo+ICt7Cj4gKwl1NjQgY291bnRlcjsKPiArCXN0cnVjdCBkd2NfcGNpZV9pbmZvX3RhYmxl ICpwY2llX2luZm8gPSBwbXVfdG9fcGNpZV9pbmZvKGV2ZW50LT5wbXUpOwo+ICsJc3RydWN0IGh3 X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7Cj4gKwllbnVtIGR3Y19wY2llX2V2ZW50X3R5 cGUgdHlwZSA9IERXQ19QQ0lFX0VWRU5UX1RZUEUoZXZlbnQpOwo+ICsJdTY0IGRlbHRhLCBwcmV2 LCBub3c7Cj4gKwo+ICsJZG8gewo+ICsJCXByZXYgPSBsb2NhbDY0X3JlYWQoJmh3Yy0+cHJldl9j b3VudCk7Cj4gKwo+ICsJCWlmICh0eXBlID09IERXQ19QQ0lFX0xBTkVfRVZFTlQpCj4gKwkJCWR3 Y19wY2llX3BtdV9yZWFkX2V2ZW50X2NvdW50ZXIocGNpZV9pbmZvLCAmY291bnRlcik7Cj4gKwkJ ZWxzZSBpZiAodHlwZSA9PSBEV0NfUENJRV9USU1FX0JBU0VfRVZFTlQpCj4gKwkJCWR3Y19wY2ll X3BtdV9yZWFkX2Jhc2VfdGltZV9jb3VudGVyKHBjaWVfaW5mbywKPiArCQkJCQkJCSAgICAmY291 bnRlcik7Cj4gKwkJZWxzZQo+ICsJCQlwY2lfZXJyKHBjaWVfaW5mby0+cGRldiwgIklucHV0IHBh cmFtIGlzIGludmFsaWRcbiIpOwo+ICsKCkZvciB0aGUgbWVzc2FnZXMgaW4gUE1VIG9wcywgeW91 IHNob3VsZCBwcmludCB0aGUgbWVzc2FnZSBvbiBiZWhhbGYgb2YgUE1VIGRldmljZQpyYXRoZXIg dGhhbiBQQ0llIGRldmljZS4gU2FtZSBmb3IgdGhlIG90aGVyIHBsYWNlcy4KCj4gKwkJbm93ID0g Y291bnRlcjsKPiArCX0gd2hpbGUgKGxvY2FsNjRfY21weGNoZygmaHdjLT5wcmV2X2NvdW50LCBw cmV2LCBub3cpICE9IHByZXYpOwo+ICsKPiArCWRlbHRhID0gbm93IC0gcHJldjsKPiArCj4gKwls b2NhbDY0X2FkZChkZWx0YSwgJmV2ZW50LT5jb3VudCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg ZHdjX3BjaWVfcG11X2V2ZW50X2luaXQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQo+ICt7Cj4g KwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKPiArCXN0cnVjdCBkd2Nf cGNpZV9wbXUgKnBjaWVfcG11ID0gdG9fcGNpZV9wbXUoZXZlbnQtPnBtdSk7Cj4gKwlzdHJ1Y3Qg cGVyZl9ldmVudCAqc2libGluZzsKPiArCj4gKwlpZiAoZXZlbnQtPmF0dHIudHlwZSAhPSBldmVu dC0+cG11LT50eXBlKQo+ICsJCXJldHVybiAtRU5PRU5UOwo+ICsKPiArCWlmIChod2MtPnNhbXBs ZV9wZXJpb2QpIHsKPiArCQlkZXZfZGJnKHBjaWVfcG11LT5kZXYsICJTYW1wbGluZyBub3Qgc3Vw cG9ydGVkXG4iKTsKPiArCQlyZXR1cm4gLUVPUE5PVFNVUFA7Cj4gKwl9Cj4gKwo+ICsJaWYgKGV2 ZW50LT5jcHUgPCAwKSB7Cj4gKwkJZGV2X2RiZyhwY2llX3BtdS0+ZGV2LCAiUGVyLXRhc2sgbW9k ZSBub3Qgc3VwcG9ydGVkXG4iKTsKPiArCQlyZXR1cm4gLUVPUE5PVFNVUFA7Cj4gKwl9Cj4gKwo+ ICsJZXZlbnQtPmNwdSA9IHBjaWVfcG11LT5vbl9jcHU7Cj4gKwo+ICsJaWYgKGV2ZW50LT5ncm91 cF9sZWFkZXIgIT0gZXZlbnQgJiYKPiArCSAgICAhaXNfc29mdHdhcmVfZXZlbnQoZXZlbnQtPmdy b3VwX2xlYWRlcikpIHsKPiArCQlkZXZfZGJnKHBjaWVfcG11LT5kZXYsICJEcml2ZSB3YXkgb25s eSBhbGxvdyBvbmUgZXZlbnQhXG4iKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4g Kwlmb3JfZWFjaF9zaWJsaW5nX2V2ZW50KHNpYmxpbmcsIGV2ZW50LT5ncm91cF9sZWFkZXIpIHsK PiArCQlpZiAoc2libGluZyAhPSBldmVudCAmJiAhaXNfc29mdHdhcmVfZXZlbnQoc2libGluZykp IHsKPiArCQkJZGV2X2RiZyhwY2llX3BtdS0+ZGV2LCAiRHJpdmUgd2F5IGV2ZW50IG5vdCBhbGxv d2VkIVxuIik7Cj4gKwkJCXJldHVybiAtRUlOVkFMOwo+ICsJCX0KPiArCX0KPiArCj4gKwlod2Mt PmlkeCA9IC0xOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBkd2Nf cGNpZV9wbXVfc2V0X3BlcmlvZChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjKQo+ICt7Cj4gKwl1 NjQgbmV3ID0gMDsKPiArCgpyZWR1bmRhbnQgJ25ldycuCgo+ICsJbG9jYWw2NF9zZXQoJmh3Yy0+ cHJldl9jb3VudCwgbmV3KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZHdjX3BjaWVfcG11X2V2 ZW50X3N0YXJ0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGZsYWdzKQo+ICt7Cj4gKwlz dHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKPiArCXN0cnVjdCBkd2NfcGNp ZV9pbmZvX3RhYmxlICpwY2llX2luZm8gPSBwbXVfdG9fcGNpZV9pbmZvKGV2ZW50LT5wbXUpOwo+ ICsJZW51bSBkd2NfcGNpZV9ldmVudF90eXBlIHR5cGUgPSBEV0NfUENJRV9FVkVOVF9UWVBFKGV2 ZW50KTsKPiArCj4gKwlod2MtPnN0YXRlID0gMDsKPiArCWR3Y19wY2llX3BtdV9zZXRfcGVyaW9k KGh3Yyk7Cj4gKwo+ICsJaWYgKHR5cGUgPT0gRFdDX1BDSUVfTEFORV9FVkVOVCkKPiArCQlkd2Nf cGNpZV9wbXVfZXZlbnRfZW5hYmxlKHBjaWVfaW5mbywgMSk7Cj4gKwllbHNlIGlmICh0eXBlID09 IERXQ19QQ0lFX1RJTUVfQkFTRV9FVkVOVCkKPiArCQlkd2NfcGNpZV9wbXVfYmFzZV90aW1lX2Vu YWJsZShwY2llX2luZm8sIDEpOwo+ICsJZWxzZQo+ICsJCXBjaV9lcnIocGNpZV9pbmZvLT5wZGV2 LCAiSW5wdXQgcGFyYW0gaXMgaW52YWxpZFxuIik7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGR3 Y19wY2llX3BtdV9ldmVudF9zdG9wKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGZsYWdz KQo+ICt7Cj4gKwlzdHJ1Y3QgZHdjX3BjaWVfaW5mb190YWJsZSAqcGNpZV9pbmZvID0gcG11X3Rv X3BjaWVfaW5mbyhldmVudC0+cG11KTsKPiArCWVudW0gZHdjX3BjaWVfZXZlbnRfdHlwZSB0eXBl ID0gRFdDX1BDSUVfRVZFTlRfVFlQRShldmVudCk7Cj4gKwo+ICsJaWYgKGV2ZW50LT5ody5zdGF0 ZSAmIFBFUkZfSEVTX1NUT1BQRUQpCj4gKwkJcmV0dXJuOwo+ICsKPiArCWlmICh0eXBlID09IERX Q19QQ0lFX0xBTkVfRVZFTlQpCj4gKwkJZHdjX3BjaWVfcG11X2V2ZW50X2VuYWJsZShwY2llX2lu Zm8sIDApOwo+ICsJZWxzZSBpZiAodHlwZSA9PSBEV0NfUENJRV9USU1FX0JBU0VfRVZFTlQpCj4g KwkJZHdjX3BjaWVfcG11X2Jhc2VfdGltZV9lbmFibGUocGNpZV9pbmZvLCAwKTsKPiArCWVsc2UK PiArCQlwY2lfZXJyKHBjaWVfaW5mby0+cGRldiwgIklucHV0IHBhcmFtIGlzIGludmFsaWRcbiIp OwoKSWYgdGhlIG1lc3NhZ2UgaXMgbmVjZXNzYXJ5LCBpdCdsbCBiZSBtb3JlIGhlbHBmdWwgdG8g bWVudGlvbiB3aGljaCBwYXJhbQppcyBpbnZhbGlkLgoKPiArCj4gKwlkd2NfcGNpZV9wbXVfZXZl bnRfdXBkYXRlKGV2ZW50KTsKPiArfQo+ICsKPiArc3RhdGljIGludCBkd2NfcGNpZV9wbXVfZXZl bnRfYWRkKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGZsYWdzKQo+ICt7Cj4gKwlzdHJ1 Y3QgZHdjX3BjaWVfaW5mb190YWJsZSAqcGNpZV9pbmZvID0gcG11X3RvX3BjaWVfaW5mbyhldmVu dC0+cG11KTsKPiArCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3Owo+ICsJ ZW51bSBkd2NfcGNpZV9ldmVudF90eXBlIHR5cGUgPSBEV0NfUENJRV9FVkVOVF9UWVBFKGV2ZW50 KTsKPiArCWludCBldmVudF9pZCA9IERXQ19QQ0lFX0VWRU5UX0lEKGV2ZW50KTsKPiArCWludCBs YW5lID0gRFdDX1BDSUVfRVZFTlRfTEFORShldmVudCk7Cj4gKwo+ICsJaWYgKHBjaWVfaW5mby0+ ZXZlbnQpCj4gKwkJcmV0dXJuIC1FTk9TUEM7Cj4gKwo+ICsJcGNpZV9pbmZvLT5ldmVudCA9IGV2 ZW50Owo+ICsKPiArCWh3Yy0+c3RhdGUgPSBQRVJGX0hFU19TVE9QUEVEIHwgUEVSRl9IRVNfVVBU T0RBVEU7Cj4gKwo+ICsJaWYgKHR5cGUgPT0gRFdDX1BDSUVfTEFORV9FVkVOVCkgewo+ICsJCWR3 Y19wY2llX3BtdV9ldmVudF9lbmFibGUocGNpZV9pbmZvLCAwKTsKPiArCQlkd2NfcGNpZV9wbXVf d3JpdGVfZXZlbnRfbGFuZShwY2llX2luZm8sIGxhbmUsIGV2ZW50X2lkKTsKPiArCQlkd2NfcGNp ZV9wbXVfc2V0X2V2ZW50X2lkKHBjaWVfaW5mbywgZXZlbnRfaWQpOwo+ICsJCWR3Y19wY2llX3Bt dV9jbGVhcl9ldmVudF9jb3VudGVyKHBjaWVfaW5mbyk7Cj4gKwl9IGVsc2UgaWYgKHR5cGUgPT0g RFdDX1BDSUVfVElNRV9CQVNFX0VWRU5UKSB7Cj4gKwkJZHdjX3BjaWVfcG11X2Jhc2VfdGltZV9l bmFibGUocGNpZV9pbmZvLCAwKTsKPiArCQlkd2NfcGNpZV9wbXVfYmFzZV90aW1lX2FkZF9wcmVw YXJlKHBjaWVfaW5mbywgZXZlbnRfaWQpOwo+ICsJfSBlbHNlIHsKPiArCQlwY2lfZXJyKHBjaWVf aW5mby0+cGRldiwgIklucHV0IHBhcmFtIGlzIGludmFsaWRcbiIpOwo+ICsJCXJldHVybiAtRUlO VkFMOwo+ICsJfQo+ICsKPiArCWlmIChmbGFncyAmIFBFUkZfRUZfU1RBUlQpCj4gKwkJZHdjX3Bj aWVfcG11X2V2ZW50X3N0YXJ0KGV2ZW50LCBQRVJGX0VGX1JFTE9BRCk7Cj4gKwo+ICsJcGVyZl9l dmVudF91cGRhdGVfdXNlcnBhZ2UoZXZlbnQpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgdm9pZCBkd2NfcGNpZV9wbXVfZXZlbnRfZGVsKHN0cnVjdCBwZXJmX2V2ZW50ICpl dmVudCwgaW50IGZsYWdzKQo+ICt7Cj4gKwlzdHJ1Y3QgZHdjX3BjaWVfaW5mb190YWJsZSAqcGNp ZV9pbmZvID0gcG11X3RvX3BjaWVfaW5mbyhldmVudC0+cG11KTsKPiArCj4gKwlkd2NfcGNpZV9w bXVfZXZlbnRfc3RvcChldmVudCwgZmxhZ3MgfCBQRVJGX0VGX1VQREFURSk7Cj4gKwlwZXJmX2V2 ZW50X3VwZGF0ZV91c2VycGFnZShldmVudCk7Cj4gKwlwY2llX2luZm8tPmV2ZW50ID0gTlVMTDsK PiArfQo+ICsKPiArc3RhdGljIHZvaWQgZHdjX3BjaWVfcG11X2V2ZW50X3JlYWQoc3RydWN0IHBl cmZfZXZlbnQgKmV2ZW50KQo+ICt7Cj4gKwlkd2NfcGNpZV9wbXVfZXZlbnRfdXBkYXRlKGV2ZW50 KTsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBkd2NfZXZlbnRfY291bnRlcnMgZXZlbnRfYXJy YXlbXSA9IHsKPiArCXsidHhfYWNrX2RsbHAiLCAweDYwMH0sCj4gKwl7InR4X3VwZGF0ZV9mY19k bGxwIiwgMHg2MDF9LAo+ICsJeyJyeF9hY2tfZGxscCIsIDB4NjAyfSwKPiArCXsicnhfdXBkYXRl X2ZjX2RsbHAiLCAweDYwM30sCj4gKwl7InJ4X251bGlmaWVkX3RscCIsIDB4NjA0fSwKPiArCXsi dHhfbnVsaWZpZWRfdGxwIiwgMHg2MDV9LAo+ICsJeyJyeF9kdXBsaWNhdGVfdGxwIiwgMHg2MDZ9 LAo+ICsJeyJ0eF9tZW1vcnlfd3JpdGUiLCAweDcwMH0sCj4gKwl7InR4X21lbW9yeV9yZWFkIiwg MHg3MDF9LAo+ICsJeyJ0eF9jb25maWd1cmF0aW9uX3dyaXRlIiwgMHg3MDJ9LAo+ICsJeyJ0eF9j b25maWd1cmF0aW9uX3JlYWQiLCAweDcwM30sCj4gKwl7InR4X2lvX3dyaXRlIiwgMHg3MDR9LAo+ ICsJeyJ0eF9pb19yZWFkIiwgMHg3MDV9LAo+ICsJeyJ0eF9jb21wbGV0aW9uX3dpdGhvdXRfZGF0 YSIsIDB4NzA2fSwKPiArCXsidHhfY29tcGxldGlvbl93aXRoX2RhdGEiLCAweDcwN30sCj4gKwl7 InR4X21lc3NhZ2VfdGxwIiwgMHg3MDh9LAo+ICsJeyJ0eF9hdG9taWMiLCAweDcwOX0sCj4gKwl7 InR4X3RscF93aXRoX3ByZWZpeCIsIDB4NzBBfSwKPiArCXsicnhfbWVtb3J5X3dyaXRlIiwgMHg3 MEJ9LAo+ICsJeyJyeF9tZW1vcnlfcmVhZCIsIDB4NzBDfSwKPiArCXsicnhfaW9fd3JpdGUiLCAw eDcwRn0sCj4gKwl7InJ4X2lvX3JlYWQiLCAweDcxMH0sCj4gKwl7InJ4X2NvbXBsZXRpb25fd2l0 aG91dF9kYXRhIiwgMHg3MTF9LAo+ICsJeyJyeF9jb21wbGV0aW9uX3dpdGhfZGF0YSIsIDB4NzEy fSwKPiArCXsicnhfbWVzc2FnZV90bHAiLCAweDcxM30sCj4gKwl7InJ4X2F0b21pYyIsIDB4NzE0 fSwKPiArCXsicnhfdGxwX3dpdGhfcHJlZml4IiwgMHg3MTV9LAo+ICsJeyJ0eF9jY2l4X3RscCIs IDB4NzE2fSwKPiArCXsicnhfY2NpeF90bHAiLCAweDcxN30sCj4gK307Cj4gKwo+ICtzdGF0aWMg aW50IGR3Y19wY2llX3BtdV9hdHRyX2luaXQoc3RydWN0IGR3Y19wY2llX3BtdV9wcml2ICpwcml2 LAo+ICsJCQkJICBzdHJ1Y3QgZHdjX3BjaWVfaW5mb190YWJsZSAqcGNpZV9pbmZvKQo+ICt7Cj4g KwlpbnQgaSwgajsKPiArCWNoYXIgbGFuZVs4XTsKPiArCWNvbnN0IGNoYXIgdG1wWzY0XTsKPiAr CWludCBldmVudHNfcGVyX2xhbmU7Cj4gKwlpbnQgbnVtX2xhbmVfZXZlbnRzOwo+ICsJaW50IHRp bWVfYmFzZV9jb3VudDsKPiArCWludCBudW1fYXR0cnMsIGF0dHJfaWR4Owo+ICsJc3RydWN0IGR3 Y19wY2llX2V2ZW50X2F0dHIgKmxhbmVfYXR0cnM7Cj4gKwlzdHJ1Y3QgYXR0cmlidXRlICoqcG11 X2F0dHJzOwo+ICsKPiArCW1lbXNldCgodm9pZCAqKXRtcCwgMCwgc2l6ZW9mKHRtcCkpOwo+ICsJ bWVtc2V0KCh2b2lkICopbGFuZSwgMCwgc2l6ZW9mKGxhbmUpKTsKPiArCXRpbWVfYmFzZV9jb3Vu dCA9IEFSUkFZX1NJWkUoZHdjX3BjaWVfcG11X3RpbWVfZXZlbnRfYXR0cnMpOwo+ICsJZXZlbnRz X3Blcl9sYW5lID0gQVJSQVlfU0laRShldmVudF9hcnJheSk7Cj4gKwludW1fbGFuZV9ldmVudHMg PSBwY2llX2luZm8tPm51bV9sYW5lcyAqIGV2ZW50c19wZXJfbGFuZTsKPiArCW51bV9hdHRycyA9 IHRpbWVfYmFzZV9jb3VudCArIG51bV9sYW5lX2V2ZW50czsKPiArCj4gKwlwY2llX2luZm8tPmxh bmVfZXZlbnRfYXR0cnMgPQo+ICsJCWRldm1fa2NhbGxvYyhwcml2LT5kZXYsIG51bV9sYW5lX2V2 ZW50cywKPiArCQkJCXNpemVvZihzdHJ1Y3QgZHdjX3BjaWVfZXZlbnRfYXR0ciksCj4gKwkJCQlH RlBfS0VSTkVMKTsKPiArCWlmICghcGNpZV9pbmZvLT5sYW5lX2V2ZW50X2F0dHJzKQo+ICsJCXJl dHVybiAtRU5PTUVNOwo+ICsJbGFuZV9hdHRycyA9IHBjaWVfaW5mby0+bGFuZV9ldmVudF9hdHRy czsKPiArCXBjaWVfaW5mby0+cGNpZV9wbXVfZXZlbnRfYXR0cnMgPQo+ICsJCWRldm1fa2NhbGxv Yyhwcml2LT5kZXYsIG51bV9hdHRycywgc2l6ZW9mKHN0cnVjdCBhdHRyaWJ1dGUgKiksCj4gKwkJ CSBHRlBfS0VSTkVMKTsKPiArCWlmICghcGNpZV9pbmZvLT5wY2llX3BtdV9ldmVudF9hdHRycykK PiArCQlyZXR1cm4gLUVOT01FTTsKPiArCXBtdV9hdHRycyA9IHBjaWVfaW5mby0+cGNpZV9wbXVf ZXZlbnRfYXR0cnM7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IG51bV9sYW5lX2V2ZW50czsgaSsr KSB7Cj4gKwkJbGFuZV9hdHRyc1tpXS5hdHRyLmF0dHIubmFtZSA9Cj4gKwkJICAgIGRldm1fa3ph bGxvYyhwcml2LT5kZXYsIHNpemVvZihjaGFyKQo+ICsJCQkJICogQVRUUklfTkFNRV9NQVhfU0la RSwgR0ZQX0tFUk5FTCk7Cj4gKwkJaWYgKCFsYW5lX2F0dHJzW2ldLmF0dHIuYXR0ci5uYW1lKQo+ ICsJCQlyZXR1cm4gLUVOT01FTTsKPiArCX0KPiArCj4gKwlhdHRyX2lkeCA9IDA7Cj4gKwlmb3Ig KGkgPSAwOyBpIDwgcGNpZV9pbmZvLT5udW1fbGFuZXM7IGkrKykgewo+ICsJCXNwcmludGYobGFu ZSwgIl9sYW5lJWQiLCBpKTsKPiArCj4gKwkJZm9yIChqID0gMDsgaiA8IGV2ZW50c19wZXJfbGFu ZTsgaisrKSB7Cj4gKwkJCWludCBwb3MgPSBpICogZXZlbnRzX3Blcl9sYW5lICsgajsKPiArCj4g KwkJCXN0cmNhdCgoY2hhciAqKXRtcCwgZXZlbnRfYXJyYXlbal0ubmFtZSk7Cj4gKwkJCXN0cmNh dCgoY2hhciAqKXRtcCwgbGFuZSk7Cj4gKwkJCW1lbWNweSgodm9pZCAqKWxhbmVfYXR0cnNbcG9z XS5hdHRyLmF0dHIubmFtZSwKPiArCQkJICAgICAgICh2b2lkICopdG1wLAo+ICsJCQkgICAgICAg c2l6ZW9mKHRtcCkpOwo+ICsKPiArCQkJbGFuZV9hdHRyc1twb3NdLmF0dHIuYXR0ci5tb2RlID0K PiArCQkJICAgIFZFUklGWV9PQ1RBTF9QRVJNSVNTSU9OUygwNDQ0KTsKPiArCQkJbGFuZV9hdHRy c1twb3NdLmF0dHIuc2hvdyA9IGR3Y19wY2llX2V2ZW50X3Nob3c7Cj4gKwkJCWxhbmVfYXR0cnNb cG9zXS5hdHRyLnN0b3JlID0gTlVMTDsKPiArCQkJbGFuZV9hdHRyc1twb3NdLnR5cGUgPSBEV0Nf UENJRV9MQU5FX0VWRU5UOwo+ICsJCQlsYW5lX2F0dHJzW3Bvc10uZXZlbnRpZCA9IGV2ZW50X2Fy cmF5W2pdLmV2ZW50X2lkOwo+ICsJCQlsYW5lX2F0dHJzW3Bvc10ubGFuZSA9IGk7Cj4gKwkJCXBt dV9hdHRyc1thdHRyX2lkeCsrXSA9ICZsYW5lX2F0dHJzW3Bvc10uYXR0ci5hdHRyOwo+ICsKPiAr CQkJbWVtc2V0KCh2b2lkICopdG1wLCAwLCBzaXplb2YodG1wKSk7Cj4gKwkJfQo+ICsJfQo+ICsK PiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGR3Y19wY2llX3BtdV90aW1lX2V2ZW50X2F0 dHJzKTsgaSsrKQo+ICsJCXBtdV9hdHRyc1thdHRyX2lkeCsrXSA9IGR3Y19wY2llX3BtdV90aW1l X2V2ZW50X2F0dHJzW2ldOwo+ICsKPiArCXBjaWVfaW5mby0+cGNpZV9wbXVfZXZlbnRfYXR0cnNb YXR0cl9pZHgrK10gPSBOVUxMOwo+ICsKPiArCXBjaWVfaW5mby0+cGNpZV9wbXVfZXZlbnRfYXR0 cnNfZ3JvdXAubmFtZSA9IGV2ZW50X2F0dHJfbmFtZTsKPiArCXBjaWVfaW5mby0+cGNpZV9wbXVf ZXZlbnRfYXR0cnNfZ3JvdXAuaXNfdmlzaWJsZSA9Cj4gKwkgICAgcGNpZV9wbXVfZXZlbnRfYXR0 cl9pc192aXNpYmxlOwo+ICsJcGNpZV9pbmZvLT5wY2llX3BtdV9ldmVudF9hdHRyc19ncm91cC5h dHRycyA9Cj4gKwkgICAgcGNpZV9pbmZvLT5wY2llX3BtdV9ldmVudF9hdHRyczsKPiArCj4gKwlw Y2llX2luZm8tPnBjaWVfcG11X2F0dHJfZ3JvdXBzWzBdID0KPiArCSAgICAmcGNpZV9pbmZvLT5w Y2llX3BtdV9ldmVudF9hdHRyc19ncm91cDsKPiArCXBjaWVfaW5mby0+cGNpZV9wbXVfYXR0cl9n cm91cHNbMV0gPSAmcGNpZV9wbXVfZm9ybWF0X2F0dHJzX2dyb3VwOwo+ICsJcGNpZV9pbmZvLT5w Y2llX3BtdV9hdHRyX2dyb3Vwc1syXSA9ICZwY2llX3BtdV9jcHVtYXNrX2F0dHJzX2dyb3VwOwo+ ICsJcGNpZV9pbmZvLT5wY2llX3BtdV9hdHRyX2dyb3Vwc1szXSA9IE5VTEw7Cj4gKwo+ICsJcmV0 dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgX19kd2NfcGNpZV9wbXVfcHJvYmUoc3RydWN0 IGR3Y19wY2llX3BtdV9wcml2ICpwcml2LAo+ICsJCQkJc3RydWN0IGR3Y19wY2llX2luZm9fdGFi bGUgKnBjaWVfaW5mbykKPiArewo+ICsJaW50IHJldDsKPiArCWNoYXIgKm5hbWU7Cj4gKwlzdHJ1 Y3QgZHdjX3BjaWVfcG11ICpwY2llX3BtdTsKPiArCXN0cnVjdCBkZXZpY2UgKmRldjsKPiArCj4g KwlpZiAoIXBjaWVfaW5mbyB8fCAhcGNpZV9pbmZvLT5wZGV2KSB7Cj4gKwkJcGNpX2VycihwY2ll X2luZm8tPnBkZXYsICJJbnB1dCBwYXJhbWV0ZXIgaXMgaW52YWxpZFxuIik7Cj4gKwkJcmV0dXJu IC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJcGNpZV9wbXUgPSAmcGNpZV9pbmZvLT5wY2llX3BtdTsK PiArCWRldiA9ICZwY2llX2luZm8tPnBkZXYtPmRldjsKPiArCj4gKwlyZXQgPSBkd2NfcGNpZV9w bXVfYXR0cl9pbml0KHByaXYsIHBjaWVfaW5mbyk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJcGNpX2Vy cihwY2llX2luZm8tPnBkZXYsICJQTVUgYXR0ciBpbml0IGZhaWwgcmV0PSVkXG4iLCByZXQpOwo+ ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJcGNpZV9wbXUtPmRldiA9IGRldjsKPiArCXBj aWVfcG11LT5wbXUgPSAoc3RydWN0IHBtdSkgewo+ICsJCS5tb2R1bGUJCT0gVEhJU19NT0RVTEUs Cj4gKwkJLnRhc2tfY3R4X25yCT0gcGVyZl9pbnZhbGlkX2NvbnRleHQsCj4gKwkJLnBtdV9lbmFi bGUJPSBOVUxMLAo+ICsJCS5wbXVfZGlzYWJsZQk9IE5VTEwsCj4gKwkJLmV2ZW50X2luaXQJPSBk d2NfcGNpZV9wbXVfZXZlbnRfaW5pdCwKPiArCQkuYWRkCQk9IGR3Y19wY2llX3BtdV9ldmVudF9h ZGQsCj4gKwkJLmRlbAkJPSBkd2NfcGNpZV9wbXVfZXZlbnRfZGVsLAo+ICsJCS5zdGFydAkJPSBk d2NfcGNpZV9wbXVfZXZlbnRfc3RhcnQsCj4gKwkJLnN0b3AJCT0gZHdjX3BjaWVfcG11X2V2ZW50 X3N0b3AsCj4gKwkJLnJlYWQJCT0gZHdjX3BjaWVfcG11X2V2ZW50X3JlYWQsCj4gKwkJLmF0dHJf Z3JvdXBzCT0gcGNpZV9pbmZvLT5wY2llX3BtdV9hdHRyX2dyb3VwcywKPiArCQkuY2FwYWJpbGl0 aWVzCT0gUEVSRl9QTVVfQ0FQX05PX0VYQ0xVREUsCj4gKwl9Owo+ICsKPiArCW5hbWUgPSBkZXZt X2thc3ByaW50Zihwcml2LT5kZXYsIEdGUF9LRVJORUwsICJwY2llX2JkZl8leCIsCj4gKwkJCSAg ICAgIHBjaWVfaW5mby0+YmRmKTsKPiArCWlmICghbmFtZSkKPiArCQlyZXR1cm4gLUVOT01FTTsK PiArCj4gKwkvKiBQaWNrIG9uZSBDUFUgdG8gYmUgdGhlIHByZWZlcnJlZCBvbmUgdG8gdXNlICov Cj4gKwlwY2llX3BtdS0+b25fY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKPiArCgpTbyB3 ZSdsbCBwcm9iYWJsZXkgYmluZCBhbGwgdGhlIHBtdXMgb24gb25lIHNpbmdsZSBDUFUsIGlzIGl0 IGludGVuZGVkPyBTaW5jZSBpdCdzCmFuIHVuY29yZSBQTVUsIHdlIGNhbiBtYWtlIGl0IHJ1biBv biBhbnkgY3B1IChvciBmb3IgbG9jYWxpdHkgQ1BVIG9uIHRoZSBjb250cm9sbGVyJ3MKTlVNQSBu b2RlKS4KCkFuZCBJIGRpZG4ndCBzZWUgeW91IHJlZ2lzdGVyIGEgaG90cGx1ZyBoYW5kbGVyLCBz byB3aGF0IGlmIHRoZSAtPm9uX2NwdSBpcyBob3QgcmVtb3ZlZD8KCj4gKwlyZXQgPSBwZXJmX3Bt dV9yZWdpc3RlcigmcGNpZV9wbXUtPnBtdSwgbmFtZSwgLTEpOwo+ICsJaWYgKHJldCkgewo+ICsJ CXBjaV9lcnIocGNpZV9pbmZvLT5wZGV2LCAiRXJyb3IgJWQgcmVnaXN0ZXJpbmcgUE1VIEAleFxu IiwgcmV0LAo+ICsJCQkJIHBjaWVfaW5mby0+YmRmKTsKCndpbGwgYmUgbW9yZSBoZWxwZnVsIHRv IHByaW50IHRoZSBiZGYgYXMgZm9ybWF0IDxidXM+OjxkZXY+OjxmdW5jPi4KCj4gKwkJcmV0dXJu IHJldDsKPiArCX0KPiArCj4gKwlwY2llX2luZm8tPnBtdV9pc19yZWdpc3RlciA9IERXQ19QQ0lF X1BNVV9IQVNfUkVHSVNURVI7CgpNYWtlIEBwbXVfaXNfcmVnaXN0ZXIgYSBib29sZWFuIHdpbGwg YmUgbW9yZSBjbGVhci4KCj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGlu dCBkd2NfcGNpZV9wbXVfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gK3sK PiArCXN0cnVjdCBkd2NfcGNpZV9wbXVfcHJpdiAqcHJpdiA9IHBsYXRmb3JtX2dldF9kcnZkYXRh KHBkZXYpOwo+ICsJaW50IGluZGV4Owo+ICsJc3RydWN0IGR3Y19wY2llX3BtdSAqcGNpZV9wbXU7 CgpNYWtlIHRoZSBsb25nIGxpbmUgZmlyc3Qgd2hlbiBkZWNsYXJpbmcuCgo+ICsKPiArCWZvciAo aW5kZXggPSAwOyBpbmRleCA8IHByaXYtPnBjaWVfY3RybF9udW07IGluZGV4KyspCj4gKwkJaWYg KHByaXYtPnBjaWVfdGFibGVbaW5kZXhdLnBtdV9pc19yZWdpc3Rlcikgewo+ICsJCQlwY2llX3Bt dSA9ICZwcml2LT5wY2llX3RhYmxlW2luZGV4XS5wY2llX3BtdTsKPiArCQkJcGVyZl9wbXVfdW5y ZWdpc3RlcigmcGNpZV9wbXUtPnBtdSk7Cj4gKwkJfQo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4g K3N0YXRpYyBpbnQgZHdjX3BjaWVfcG11X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYpCj4gK3sKPiArCWludCByZXQgPSAwOwo+ICsJaW50IHBjaWVfaW5kZXg7Cj4gKwlzdHJ1Y3Qg ZHdjX3BjaWVfcG11X3ByaXYgKnByaXY7Cj4gKwo+ICsJcHJpdiA9IGRldm1fa3phbGxvYygmcGRl di0+ZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghcHJpdikKPiArCQly ZXR1cm4gLUVOT01FTTsKPiArCXByaXYtPmRldiA9ICZwZGV2LT5kZXY7Cj4gKwlwbGF0Zm9ybV9z ZXRfZHJ2ZGF0YShwZGV2LCBwcml2KTsKPiArCj4gKwkvKiBJZiBQTVUgaXMgbm90IHN1cHBvcnQg b24gY3VycmVudCBwbGF0Zm9ybSwga2VlcCBzbGllbnQgKi8KPiArCWlmIChkd2NfcGNpZV9wbXVf ZGlzY292ZXIocHJpdikpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJZm9yIChwY2llX2luZGV4ID0g MDsgcGNpZV9pbmRleCA8IHByaXYtPnBjaWVfY3RybF9udW07IHBjaWVfaW5kZXgrKykgewo+ICsJ CXN0cnVjdCBwY2lfZGV2ICpycCA9IHByaXYtPnBjaWVfdGFibGVbcGNpZV9pbmRleF0ucGRldjsK PiArCj4gKwkJcmV0ID0gX19kd2NfcGNpZV9wbXVfcHJvYmUocHJpdiwgJnByaXYtPnBjaWVfdGFi bGVbcGNpZV9pbmRleF0pOwo+ICsJCWlmIChyZXQpIHsKPiArCQkJZGV2X2VycigmcnAtPmRldiwg IlBDSWUgUE1VIHByb2JlIGZhaWxcbiIpOwo+ICsJCQlnb3RvIHBtdV91bnJlZ2lzdGVyOwo+ICsJ CX0KPiArCX0KPiArCWRldl9pbmZvKCZwZGV2LT5kZXYsICJQQ0llIFBNVXMgcmVnaXN0ZXJlZFxu Iik7Cj4gKwoKQXMgSm9uYXRoYW4gbWVudGlvbmVkIHRoaXMgbWVzc2FnZSBtYXliZSB1bm5lY2Vz c2FyeSwgYnV0IEkgbWF5IGZpbmQgaXQgdXNlZnVsIGlmIHlvdQpwcmludCBob3cgbWFueSBQTVUn cyByZWdpc3RlcmVkLgoKT24gb25lIFBNVSByZWdpc3RyYXRpb24gZmFpbGVkLCB5b3UganVzdCBy ZW1vdmUgYWxsIHRoZSBQTVVzIHJlZ2lzdGVyZWQuIEkgd29uZGVyIGlmCml0J3MgYmV0dGVyIHRv IG1ha2UgYWxyZWFkeSByZWdpc3RlcmVkIFBNVSBzdGF5IGluc3RlYWQgb2YgcmVtb3ZpbmcgdGhl bSBhbGwuCgpHbGFkIHRvIHNlZSBhbm90aGVyIFBDSWUgUE1VIGRldmljZSEKClRoYW5rcywKWWlj b25nCgo+ICsJcmV0dXJuIDA7Cj4gKwo+ICtwbXVfdW5yZWdpc3RlcjoKPiArCWR3Y19wY2llX3Bt dV9yZW1vdmUocGRldik7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIHN0 cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZHdjX3BjaWVfcG11X2RyaXZlciA9IHsKPiArCS5wcm9iZSA9 IGR3Y19wY2llX3BtdV9wcm9iZSwKPiArCS5yZW1vdmUgPSBkd2NfcGNpZV9wbXVfcmVtb3ZlLAo+ ICsJLmRyaXZlciA9IHsubmFtZSA9IERSVl9OQU1FLH0sCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50 IF9faW5pdCBkd2NfcGNpZV9wbXVfaW5pdCh2b2lkKQo+ICt7Cj4gKwlpbnQgcmV0Owo+ICsKPiAr CXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZHdjX3BjaWVfcG11X2RyaXZlcik7Cj4g Kwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCWR3Y19wY2llX3BtdV9kZXYg PQo+ICsJICAgIHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoREVWX05BTUUsIC0xLCBO VUxMLCAwKTsKPiArCWlmIChJU19FUlIoZHdjX3BjaWVfcG11X2RldikpIHsKPiArCQlwbGF0Zm9y bV9kcml2ZXJfdW5yZWdpc3RlcigmZHdjX3BjaWVfcG11X2RyaXZlcik7Cj4gKwkJcmV0dXJuIFBU Ul9FUlIoZHdjX3BjaWVfcG11X2Rldik7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiAr Cj4gK3N0YXRpYyB2b2lkIF9fZXhpdCBkd2NfcGNpZV9wbXVfZXhpdCh2b2lkKQo+ICt7Cj4gKwlw bGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcihkd2NfcGNpZV9wbXVfZGV2KTsKPiArCXBsYXRmb3Jt X2RyaXZlcl91bnJlZ2lzdGVyKCZkd2NfcGNpZV9wbXVfZHJpdmVyKTsKPiArfQo+ICsKPiArbW9k dWxlX2luaXQoZHdjX3BjaWVfcG11X2luaXQpOwo+ICttb2R1bGVfZXhpdChkd2NfcGNpZV9wbXVf ZXhpdCk7Cj4gKwo+ICtNT0RVTEVfREVTQ1JJUFRJT04oIlBNVSBkcml2ZXIgZm9yIERlc2lnbldh cmUgQ29yZXMgUENJIEV4cHJlc3MgQ29udHJvbGxlciIpOwo+ICtNT0RVTEVfQVVUSE9SKCJ4dWVz aHVhaUBsaW51eC5hbGliYWJhLmNvbSIpOwo+ICtNT0RVTEVfQVVUSE9SKCJ5aW54dWFuX2N3QGxp bnV4LmFsaWJhYmEuY29tIik7Cj4gK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKPiAKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJu ZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRw Oi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK