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 EFBEBC433FE for ; Thu, 24 Feb 2022 11:11:21 +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-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:From: References:CC:To:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=cLOplqWPUfu/oVJquyH4COIl1D5zdURJliuJKM8u78s=; b=qKbt7SHGcskdDw0YIxzkSsQ345 M1DZxwJFO/pDhI0xK9N5d6hv2RxqmCGBTkKNEUnWVmaIecQaHOVcTUatgUOCHytLk8inZeLtfBjKP kspo16aXtvMio2DFuHamGN6haWeN1TXoYtRVicCequBZ71IV/Ds19DwW1jxLlwyzMcMyLbXmwh2TV 2cow5QaWeHmQgnpPC0nYdb4sK6TVoqJHnB4cWlKm2xBVAF3IFGwKQ1dJVcJ5ODX7LJehSIR80qvaZ DqPalqI2MrTAEgPmL9ukIGxq9Ls/ygGdw5b/2CGdS80n5npTCoH+C3lXbKvLJco7SlUOJs3DxP1Y/ lExmuHJg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nNC0G-000V6H-8p; Thu, 24 Feb 2022 11:09:44 +0000 Received: from szxga03-in.huawei.com ([45.249.212.189]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nNC0A-000V3n-0V for linux-arm-kernel@lists.infradead.org; Thu, 24 Feb 2022 11:09:42 +0000 Received: from kwepemi500020.china.huawei.com (unknown [172.30.72.55]) by szxga03-in.huawei.com (SkyGuard) with ESMTP id 4K497b6h20z9sJm; Thu, 24 Feb 2022 19:06:03 +0800 (CST) Received: from kwepemm600016.china.huawei.com (7.193.23.20) by kwepemi500020.china.huawei.com (7.221.188.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.18; Thu, 24 Feb 2022 19:09:31 +0800 Received: from [10.67.102.67] (10.67.102.67) by kwepemm600016.china.huawei.com (7.193.23.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.21; Thu, 24 Feb 2022 19:09:30 +0800 Subject: Re: [RESEND PATCH 2/2] drivers/perf: hisi: add driver for HNS3 PMU To: John Garry , , CC: , , , , , , , Linuxarm References: <20220117015222.9617-1-huangguangbin2@huawei.com> <20220117015222.9617-3-huangguangbin2@huawei.com> <271e4b5c-7dc4-058f-9299-d940a0fb79e0@huawei.com> From: "huangguangbin (A)" Message-ID: Date: Thu, 24 Feb 2022 19:09:30 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.2.2 MIME-Version: 1.0 In-Reply-To: <271e4b5c-7dc4-058f-9299-d940a0fb79e0@huawei.com> X-Originating-IP: [10.67.102.67] X-ClientProxiedBy: dggems705-chm.china.huawei.com (10.3.19.182) To kwepemm600016.china.huawei.com (7.193.23.20) X-CFilter-Loop: Reflected X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220224_030938_435446_7420990A X-CRM114-Status: GOOD ( 34.45 ) 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-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org CgpPbiAyMDIyLzEvMTkgMToxNCwgSm9obiBHYXJyeSB3cm90ZToKPiBPbiAxNy8wMS8yMDIyIDAx OjUyLCBHdWFuZ2JpbiBIdWFuZyB3cm90ZToKPiAKPiArbGludXhhcm0KPiAKT2ssIHRoYW5rcy4K Cj4+IEhOUzMgUE1VIEVuZCBQb2ludCBkZXZpY2Ugc3VwcG9ydHMgdG8gY29sbGVjdCBwZXJmb3Jt YW5jZSBzdGF0aXN0aWNzCj4+IG9mIGJhbmR3aWR0aCwgbGF0ZW5jeSwgcGFja2V0IHJhdGUsIGlu dGVycnVwdCByYXRlIGluIEhpU2lsaWNvbiBTb0MKPj4gTklDLgo+Pgo+PiBOSUMgb2YgZWFjaCBJ TyBESUUgaGFzIG9uZSBQTVUgZGV2aWNlIGZvciBpdC4gRHJpdmVyIHJlZ2lzdGVycyBlYWNoCj4+ IFBNVSBkZXZpY2UgdG8gcGVyZiwgYW5kIGV4cG9ydHMgaW5mb3JtYXRpb24gb2Ygc3VwcG9ydGVk IGV2ZW50cywKPj4gZmlsdGVyIG1vZGUgb2YgZWFjaCBldmVudCwgaWRlbnRpZmllciBhbmQgc28g b24gdmlhIHN5c2ZzLgo+Pgo+PiBFYWNoIFBNVSBkZXZpY2UgaGFzIGl0cyBvd24gY29udHJvbCwg Y291bnRlciBhbmQgaW50ZXJydXB0IHJlZ2lzdGVycywKPj4gYW5kIHN1cHBvcnRzIHVwIHRvIDgg ZXZlbnRzIGJ5IGhhcmR3YXJlLgo+Pgo+PiBGaWx0ZXIgb3B0aW9ucyBjb250YWluczoKPj4gZXZl bnTCoMKgwqDCoMKgwqDCoCAtIHNlbGVjdCBldmVudAo+PiBzdWJldmVudMKgwqDCoMKgIC0gc2Vs ZWN0IHN1YmV2ZW50Cj4+IHBvcnTCoMKgwqDCoMKgwqDCoMKgIC0gc2VsZWN0IHBoeXNpY2FsIHBv cnQgb2YgbmljCj4+IHRjwqDCoMKgwqDCoMKgwqDCoMKgwqAgLSBzZWxlY3QgdGMobXVzdCBiZSB1 c2VkIHdpdGggcG9ydCkKPj4gZnVuY8KgwqDCoMKgwqDCoMKgwqAgLSBzZWxlY3QgUEYvVkYKPj4g cXVldWXCoMKgwqDCoMKgwqDCoCAtIHNlbGVjdCBxdWV1ZSBvZiBQRi9WRihtdXN0IGJlIHVzZWQg d2l0aCBmdW5jKQo+PiBpbnRywqDCoMKgwqDCoMKgwqDCoCAtIHNlbGVjdCBpbnRlcnJ1cHQgbnVt YmVyKG11c3QgYmUgdXNlZCB3aXRoIGZ1bmMpCj4+IGdsb2JhbMKgwqDCoMKgwqDCoCAtIHNlbGVj dCBhbGwgZnVuY3Rpb25zIG9mIElPIERJRQo+Pgo+PiBTaWduZWQtb2ZmLWJ5OiBHdWFuZ2JpbiBI dWFuZyA8aHVhbmdndWFuZ2JpbjJAaHVhd2VpLmNvbT4KPj4gLS0tCj4+IMKgIE1BSU5UQUlORVJT wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqDCoCA2ICsK Pj4gwqAgZHJpdmVycy9wZXJmL2hpc2lsaWNvbi9LY29uZmlnwqDCoMKgIHzCoMKgwqAgOSArCj4+ IMKgIGRyaXZlcnMvcGVyZi9oaXNpbGljb24vTWFrZWZpbGXCoMKgIHzCoMKgwqAgMSArCj4+IMKg IGRyaXZlcnMvcGVyZi9oaXNpbGljb24vaG5zM19wbXUuYyB8IDE2MzEgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysKPj4gwqAgaW5jbHVkZS9saW51eC9jcHVob3RwbHVnLmjCoMKgwqDCoMKg wqDCoCB8wqDCoMKgIDEgKwo+PiDCoCA1IGZpbGVzIGNoYW5nZWQsIDE2NDggaW5zZXJ0aW9ucygr KQo+PiDCoCBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9wZXJmL2hpc2lsaWNvbi9obnMzX3Bt dS5jCj4+Cj4+IGRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCj4+IGluZGV4 IDkwYTdkN2IyMTk4Mi4uZThlMjU4YmI4ZjhkIDEwMDY0NAo+PiAtLS0gYS9NQUlOVEFJTkVSUwo+ PiArKysgYi9NQUlOVEFJTkVSUwo+PiBAQCAtODYxNCw2ICs4NjE0LDEyIEBAIEY6wqDCoMKgIERv Y3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvcGVyZi9oaXNpLXBjaWUtcG11LnJzdAo+PiDCoCBGOsKg wqDCoCBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3BlcmYvaGlzaS1wbXUucnN0Cj4+IMKgIEY6 wqDCoMKgIGRyaXZlcnMvcGVyZi9oaXNpbGljb24KPj4gK0hJU0lMSUNPTiBITlMzIFBNVSBEUklW RVIKPj4gK006wqDCoMKgIEd1YW5nYmluIEh1YW5nIDxodWFuZ2d1YW5nYmluMkBodWF3ZWkuY29t Pgo+PiArUzrCoMKgwqAgU3VwcG9ydGVkCj4+ICtGOsKgwqDCoCBEb2N1bWVudGF0aW9uL2FkbWlu LWd1aWRlL3BlcmYvaG5zMy1wbXUucnN0Cj4+ICtGOsKgwqDCoCBkcml2ZXJzL3BlcmYvaGlzaWxp Y29uL2huczNfcG11LmMKPj4gKwo+PiDCoCBISVNJTElDT04gUU0gQU5EIFpJUCBDb250cm9sbGVy IERSSVZFUgo+PiDCoCBNOsKgwqDCoCBaaG91IFdhbmcgPHdhbmd6aG91MUBoaXNpbGljb24uY29t Pgo+PiDCoCBMOsKgwqDCoCBsaW51eC1jcnlwdG9Admdlci5rZXJuZWwub3JnCj4+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL3BlcmYvaGlzaWxpY29uL0tjb25maWcgYi9kcml2ZXJzL3BlcmYvaGlzaWxp Y29uL0tjb25maWcKPj4gaW5kZXggNTU0NjIxOGI1NTk4Li44YTk2NjFjOTdlYzggMTAwNjQ0Cj4+ IC0tLSBhL2RyaXZlcnMvcGVyZi9oaXNpbGljb24vS2NvbmZpZwo+PiArKysgYi9kcml2ZXJzL3Bl cmYvaGlzaWxpY29uL0tjb25maWcKPj4gQEAgLTE0LDMgKzE0LDEyIEBAIGNvbmZpZyBISVNJX1BD SUVfUE1VCj4+IMKgwqDCoMKgwqDCoMKgIFJDaUVQIGRldmljZXMuCj4+IMKgwqDCoMKgwqDCoMKg IEFkZHMgdGhlIFBDSWUgUE1VIGludG8gcGVyZiBldmVudHMgc3lzdGVtIGZvciBtb25pdG9yaW5n IGxhdGVuY3ksCj4+IMKgwqDCoMKgwqDCoMKgIGJhbmR3aWR0aCBldGMuCj4+ICsKPj4gK2NvbmZp ZyBITlMzX1BNVQo+PiArwqDCoMKgIHRyaXN0YXRlICJITlMzIFBFUkYgUE1VIgo+PiArwqDCoMKg IGRlcGVuZHMgb24gQVJNNjQgJiYgUENJCj4gCj4gQW55IHJlYXNvbiBub3QgdG8gYWRkIENPTVBJ TEVfVEVTVCwgbGlrZToKPiAgwqDCoMKgwqBkZXBlbmRzIG9uIEFSTTY0IHx8IENPTVBJTEVfVEVT VAo+ICDCoMKgwqDCoGRlcGVuZHMgb24gUENJCj4gCj4gCk5vLCBpZiBuZWVkIGl0LCBJIHdpbGwg YWRkIG5leHQgdmVyc2lvbi4KCj4+ICvCoMKgwqAgaGVscAo+PiArwqDCoMKgwqDCoCBQcm92aWRl IHN1cHBvcnQgZm9yIEhOUzMgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyB1bml0IChQTVUpIElFUAo+ PiArwqDCoMKgwqDCoCBkZXZpY2VzLgo+PiArwqDCoMKgwqDCoCBBZGRzIHRoZSBITlMzIFBNVSBp bnRvIHBlcmYgZXZlbnRzIHN5c3RlbSBmb3IgbW9uaXRvcmluZyBsYXRlbmN5LAo+PiArwqDCoMKg wqDCoCBiYW5kd2lkdGggZXRjLgo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wZXJmL2hpc2lsaWNv bi9NYWtlZmlsZSBiL2RyaXZlcnMvcGVyZi9oaXNpbGljb24vTWFrZWZpbGUKPj4gaW5kZXggNTA2 ZWQzOWUzMjY2Li4xMzI5N2VjMjc5OGYgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvcGVyZi9oaXNp bGljb24vTWFrZWZpbGUKPj4gKysrIGIvZHJpdmVycy9wZXJmL2hpc2lsaWNvbi9NYWtlZmlsZQo+ PiBAQCAtNCwzICs0LDQgQEAgb2JqLSQoQ09ORklHX0hJU0lfUE1VKSArPSBoaXNpX3VuY29yZV9w bXUubyBoaXNpX3VuY29yZV9sM2NfcG11Lm8gXAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgaGlzaV91bmNvcmVfcGFfcG11Lm8KPj4gwqAgb2JqLSQoQ09ORklHX0hJU0lfUENJRV9Q TVUpICs9IGhpc2lfcGNpZV9wbXUubwo+PiArb2JqLSQoQ09ORklHX0hOUzNfUE1VKSArPSBobnMz X3BtdS5vCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BlcmYvaGlzaWxpY29uL2huczNfcG11LmMg Yi9kcml2ZXJzL3BlcmYvaGlzaWxpY29uL2huczNfcG11LmMKPj4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQKPj4gaW5kZXggMDAwMDAwMDAwMDAwLi4wNzViN2VlZmU4ZDYKPj4gLS0tIC9kZXYvbnVsbAo+ PiArKysgYi9kcml2ZXJzL3BlcmYvaGlzaWxpY29uL2huczNfcG11LmMKPj4gQEAgLTAsMCArMSwx NjMxIEBACj4+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Cj4+ICsv Kgo+PiArICogVGhpcyBkcml2ZXIgYWRkcyBzdXBwb3J0IGZvciBITlMzIFBNVSBpRVAgZGV2aWNl Lgo+IAo+IAo+PiBSZWxhdGVkIHBlcmYgZXZlbnRzIGFyZQo+PiArICogYmFuZHdpZHRoLCBsYXRl bmN5LCBwYWNrZXQgcmF0ZSwgaW50ZXJydXB0IHJhdGUgZXRjLgo+IAo+IEkgZG9uJ3QgdGhpbmsg dGhhdCB0aGlzIGlzIHJlbGV2YW50IGhlcmUKPiAKPj4gKyAqCj4+ICsgKiBDb3B5cmlnaHQgKEMp IDIwMjEgSGlTaWxpY29uIExpbWl0ZWQKPj4gKyAqLwo+IAo+IDIwMjIsIEkgc3VwcG9zZSBub3cu Li4KPiAKT2ssIHRoYW5rcy4KCj4+ICt9Owo+PiArCj4+ICsjZGVmaW5lIEhOUzNfUE1VX1NFVF9I V19GSUxURVIoX2h3YywgX21vZGUpIFwKPj4gK8KgwqDCoCAoKF9od2MpLT5hZGRyX2ZpbHRlcnMg PSAodm9pZCAqKSZobnMzX3BtdV9od19maWx0ZXJfbW9kZXNbKF9tb2RlKV0pCj4+ICsKPj4gK3N0 YXRpYyBzc2l6ZV90IGlkZW50aWZpZXJfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUg KmF0dHIsIGNoYXIgKmJ1ZikKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgaG5zM19wbXUgKmhuczNf cG11Owo+PiArCj4+ICvCoMKgwqAgaG5zM19wbXUgPSB0b19obnMzX3BtdShkZXZfZ2V0X2RydmRh dGEoZGV2KSk7Cj4gCj4gQ2FuIHRoZSBkZWNsYXJhdGlvbiBhbmQgYXNzaWdubWVudCBiZSBvbiB0 aGUgc2FtZSBsaW5lPwo+IApZZXMuCgo+PiArCj4+ICvCoMKgwqAgcmV0dXJuIHN5c2ZzX2VtaXQo YnVmLCAiMHgleFxuIiwgaG5zM19wbXUtPmlkZW50aWZpZXIpOwo+PiArfQo+PiArc3RhdGljIERF VklDRV9BVFRSX1JPKGlkZW50aWZpZXIpOwo+PiArCj4+ICtzdGF0aWMgc3NpemVfdCBjcHVtYXNr X3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjaGFyICpidWYpCj4+ICt7Cj4+ICvC oMKgwqAgc3RydWN0IGhuczNfcG11ICpobnMzX3BtdSA9IHRvX2huczNfcG11KGRldl9nZXRfZHJ2 ZGF0YShkZXYpKTsKPj4gKwo+PiArwqDCoMKgIHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgIiVkXG4i LCBobnMzX3BtdS0+b25fY3B1KTsKPj4gK30KPj4gK3N0YXRpYyBERVZJQ0VfQVRUUl9STyhjcHVt YXNrKTsKPj4gKwo+PiArc3RhdGljIHNzaXplX3QgYmRmX21pbl9zaG93KHN0cnVjdCBkZXZpY2Ug KmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgY2hhciAqYnVmKQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCBobnMzX3Bt dSAqaG5zM19wbXUgPSB0b19obnMzX3BtdShkZXZfZ2V0X2RydmRhdGEoZGV2KSk7Cj4+ICsKPj4g K8KgwqDCoCByZXR1cm4gc3lzZnNfZW1pdChidWYsICIweCU0eFxuIiwgaG5zM19wbXUtPmJkZl9t aW4pOwo+PiArfQo+PiArc3RhdGljIERFVklDRV9BVFRSX1JPKGJkZl9taW4pOwo+PiArCj4+ICtz dGF0aWMgc3NpemVfdCBiZGZfbWF4X3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2 aWNlX2F0dHJpYnV0ZSAqYXR0ciwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBj aGFyICpidWYpCj4+ICt7Cj4+ICvCoMKgwqAgc3RydWN0IGhuczNfcG11ICpobnMzX3BtdSA9IHRv X2huczNfcG11KGRldl9nZXRfZHJ2ZGF0YShkZXYpKTsKPj4gKwo+PiArwqDCoMKgIHJldHVybiBz eXNmc19lbWl0KGJ1ZiwgIjB4JTR4XG4iLCBobnMzX3BtdS0+YmRmX21heCk7Cj4gCj4gYXJlIHRo ZXNlIHNhbWUgZmlsZXMgYXMgaW4gSElTSSBQQ0kgUE1VIGRyaXZlcj8KPiAKTm8saXQgaXMgbm90 LgoKPj4gK30KPj4gK3N0YXRpYyBERVZJQ0VfQVRUUl9STyhiZGZfbWF4KTsKPj4gKwo+PiArc3Rh dGljIHN0cnVjdCBhdHRyaWJ1dGUgKmhuczNfcG11X2V2ZW50c19hdHRyW10gPSB7Cj4+ICvCoMKg wqAgLyogYmFuZHdpZHRoIGV2ZW50cyAqLwo+IAo+IAo+PiArCj4+ICtzdGF0aWMgc3RydWN0IGF0 dHJpYnV0ZV9ncm91cCBobnMzX3BtdV9ldmVudHNfZ3JvdXAgPSB7Cj4+ICvCoMKgwqAgLm5hbWUg PSAiZXZlbnRzIiwKPj4gK8KgwqDCoCAuYXR0cnMgPSBobnMzX3BtdV9ldmVudHNfYXR0ciwKPj4g K307Cj4+ICsKPj4gK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGhuczNfcG11X2ZpbHRl cl9tb2RlX2dyb3VwID0gewo+PiArwqDCoMKgIC5uYW1lID0gImZpbHRlcm1vZGUiLAo+PiArfTsK Pj4gKwo+IAo+PiArfQo+PiArCj4+ICtzdGF0aWMgYm9vbCBobnMzX3BtdV92YWxpZF9iZGYoc3Ry dWN0IGhuczNfcG11ICpobnMzX3BtdSwgdTE2IGJkZikKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3Qg cGNpX2RldiAqcGRldjsKPj4gKwo+PiArwqDCoMKgIGlmIChiZGYgPCBobnMzX3BtdS0+YmRmX21p biB8fCBiZGYgPiBobnMzX3BtdS0+YmRmX21heCkgewo+PiArwqDCoMKgwqDCoMKgwqAgcGNpX2Vy cihobnMzX3BtdS0+cGRldiwgIkludmFsaWQgRVAgZGV2aWNlOiAlI3ghXG4iLCBiZGYpOwo+PiAr wqDCoMKgwqDCoMKgwqAgcmV0dXJuIGZhbHNlOwo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKg IHBkZXYgPSBwY2lfZ2V0X2RvbWFpbl9idXNfYW5kX3Nsb3QocGNpX2RvbWFpbl9ucihobnMzX3Bt dS0+cGRldi0+YnVzKSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIFBDSV9CVVNfTlVNKGJkZiksCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBHRVRfUENJX0RFVkZOKGJkZikpOwo+PiArwqDCoMKgIGlmICghcGRl dikgewo+PiArwqDCoMKgwqDCoMKgwqAgcGNpX2VycihobnMzX3BtdS0+cGRldiwgIk5vbmV4aXN0 ZW50IEVQIGRldmljZTogJSN4IVxuIiwgYmRmKTsKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBm YWxzZTsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCBwY2lfZGV2X3B1dChwZGV2KTsKPj4g K8KgwqDCoCByZXR1cm4gdHJ1ZTsKPj4gK30KPiAKPiBpZiBhbnkgb2YgdGhpcyBjb2RlIGlzIHNh bWUgYXMgaGlzaSBwY2kgcG11IGRyaXZlciB0aGVuIHBsZWFzZSBwdXQgaW4gYSBjb21tb24gbGli Cj4gCk9rLgoKPj4gKwo+PiArc3RhdGljIHZvaWQgaG5zM19wbXVfc2V0X3FpZF9wYXJhKHN0cnVj dCBobnMzX3BtdSAqaG5zM19wbXUsIHUzMiBpZHgsIHUxNiBiZGYsCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHUxNiBxdWV1ZSkKPj4gK3sKPj4gK8KgwqDCoCB1MzIgdmFs Owo+PiArCj4+ICvCoMKgwqAgdmFsID0gR0VUX1BDSV9ERVZGTihiZGYpOwo+PiArwqDCoMKgIHZh bCB8PSAodTMyKXF1ZXVlIDw8IEhOUzNfUE1VX1FJRF9QQVJBX1FVRVVFX1M7Cj4+ICvCoMKgwqAg aG5zM19wbXVfd3JpdGVsKGhuczNfcG11LCBITlMzX1BNVV9SRUdfRVZFTlRfUUlEX1BBUkEsIGlk eCwgdmFsKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGJvb2wgaG5zM19wbXVfcWlkX3JlcV9zdGFy dChzdHJ1Y3QgaG5zM19wbXUgKmhuczNfcG11LCB1MzIgaWR4KQo+PiArewo+PiArwqDCoMKgIGJv b2wgcXVldWVfaWRfdmFsaWQgPSBmYWxzZTsKPj4gK8KgwqDCoCB1MzIgcmVnX3FpZF9jdHJsLCB2 YWw7Cj4+ICvCoMKgwqAgaW50IGVycjsKPj4gKwo+PiArwqDCoMKgIC8qIGVuYWJsZSBxdWV1ZSBp ZCByZXF1ZXN0ICovCj4+ICvCoMKgwqAgaG5zM19wbXVfd3JpdGVsKGhuczNfcG11LCBITlMzX1BN VV9SRUdfRVZFTlRfUUlEX0NUUkwsIGlkeCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgSE5T M19QTVVfUUlEX0NUUkxfUkVRX0VOQUJMRSk7Cj4+ICsKPiAKPiAuLi4KPiAKPj4gK30KPj4gKwo+ PiArc3RhdGljIGJvb2wgaG5zM19wbXVfdmFsaWRhdGVfZXZlbnRfZ3JvdXAoc3RydWN0IHBlcmZf ZXZlbnQgKmV2ZW50KQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCBwZXJmX2V2ZW50ICpsZWFkZXIg PSBldmVudC0+Z3JvdXBfbGVhZGVyOwo+PiArwqDCoMKgIHN0cnVjdCBwZXJmX2V2ZW50ICpzaWJs aW5nOwo+PiArwqDCoMKgIGludCBjb3VudGVycyA9IDE7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoIWlz X3NvZnR3YXJlX2V2ZW50KGxlYWRlcikpIHsKPj4gK8KgwqDCoMKgwqDCoMKgIC8qCj4+ICvCoMKg wqDCoMKgwqDCoMKgICogV2UgbXVzdCBOT1QgY3JlYXRlIGdyb3VwcyBjb250YWluaW5nIG1peGVk IFBNVXMsIGFsdGhvdWdoCj4+ICvCoMKgwqDCoMKgwqDCoMKgICogc29mdHdhcmUgZXZlbnRzIGFy ZSBhY2NlcHRhYmxlCj4+ICvCoMKgwqDCoMKgwqDCoMKgICovCj4+ICvCoMKgwqDCoMKgwqDCoCBp ZiAobGVhZGVyLT5wbXUgIT0gZXZlbnQtPnBtdSkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg cmV0dXJuIGZhbHNlOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCAvKiBJbmNyZWFzZSBjb3VudGVy IGZvciB0aGUgbGVhZGVyICovCj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAobGVhZGVyICE9IGV2ZW50 KQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb3VudGVycysrOwo+PiArwqDCoMKgIH0KPj4g Kwo+PiArwqDCoMKgIGZvcl9lYWNoX3NpYmxpbmdfZXZlbnQoc2libGluZywgZXZlbnQtPmdyb3Vw X2xlYWRlcikgewo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKGlzX3NvZnR3YXJlX2V2ZW50KHNpYmxp bmcpKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb250aW51ZTsKPj4gKwo+PiArwqDCoMKg wqDCoMKgwqAgaWYgKHNpYmxpbmctPnBtdSAhPSBldmVudC0+cG11KQo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCByZXR1cm4gZmFsc2U7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIC8qIEluY3Jl YXNlIGNvdW50ZXIgZm9yIGVhY2ggc2libGluZyAqLwo+PiArwqDCoMKgwqDCoMKgwqAgY291bnRl cnMrKzsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4gY291bnRlcnMgPD0gSE5T M19QTVVfTUFYX0NPVU5URVJTOwo+PiArfQo+PiArCj4gCj4gVGhpcyBpcyBleGFjdCBzYW1lIGVm ZmVjdGl2ZWx5IGFzIGhpc2lfdmFsaWRhdGVfZXZlbnRfZ3JvdXAoKSwgYXBhcnQgZnJvbToKPiAK PiByZXR1cm4gY291bnRlcnMgPD0gSE5TM19QTVVfTUFYX0NPVU5URVJTOwo+IAo+IHZzCj4gCj4g cmV0dXJuIGNvdW50ZXJzIDw9IGhpc2lfcG11LT5udW1fY291bnRlcnM7Cj4gCj4gCj4gQ2FuIHdl IGZhY3RvciBhbGwgdGhpcyBvdXQ/IExlc3MgY29kZSB0byByZXZpZXcgbWFrZXMgcmV2aWV3aW5n IGVhc2llciBhbmQgcXVpY2tlciBhbmQgbGVzcyBkYXVudGluZyAuLi4KPiAKSSBkb24ndCB0aGlu ayBzbywgYmVjYXVzZSBlYWNoIHN0cnVjdCBkZWZpbml0aW9uIG9mIGhpc2lfeHh4X3BtdSBpcyBk aWZmZXJlbnQuCgo+PiArfQo+PiArCj4+ICsvKgo+PiArICogVGhlIHBlcmZvcm1hbmNlIGNhbGN1 bGF0aW9uIGZvcm11bGEgb2YgYWxsIHR5cGVzIG9mIGV2ZW50IGlzCj4+ICsgKsKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBlcmZvcm1hbmNlID0gZGF0YSAvIGRhdGFfZXh0Lgo+PiAr ICogVGhlIGFyZ3VtZW50cyBkYXRhIGFuZCBkYXRhX2V4dCBoYXZlIGRpZmZlcmVudCBtZWFuaW5n cyBmb3IgZGlmZmVyZW50IHR5cGVzCj4+ICsgKiBvZiBldmVudHMgYXMgZm9sbG93Ogo+PiArICog ZXZlbnRfdHlwZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkYXRhwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkYXRhX2V4dAo+PiArICogYmFuZHdpZHRowqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgYnl0ZSBudW1iZXLCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBj eWNsZXMgbnVtYmVyCj4+ICsgKiBwYWNrZXQgcmF0ZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGFj a2V0IG51bWJlcsKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY3ljbGVzIG51bWJlcgo+PiArICogaW50 ZXJydXB0IHJhdGXCoMKgwqDCoMKgwqDCoMKgIGludGVycnVwdCBudW1iZXLCoMKgwqDCoMKgwqDC oMKgIGN5Y2xlcyBudW1iZXIKPj4gKyAqIGxhdGVuY3nCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgY3ljbGVzIG51bWJlcsKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGFja2V0IG51bWJlcgo+ PiArICovCj4+ICtzdGF0aWMgdTY0IGhuczNfcG11X2dldF9wZXJmb3JtYW5jZSh1OCBldmVudF90 eXBlLCB1MzIgaHdfY2xrX2ZyZXEsIHU2NCBkYXRhLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgdTY0IGRhdGFfZXh0KQo+PiArewo+PiArwqDCoMKgIHU2NCByZXN1 bHQ7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoIWh3X2Nsa19mcmVxIHx8ICFkYXRhIHx8ICFkYXRhX2V4 dCkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAwOwo+PiArCj4+ICvCoMKgwqAgc3dpdGNoIChl dmVudF90eXBlKSB7Cj4+ICvCoMKgwqAgY2FzZSBITlMzX1BNVV9FVkVOVF9UWVBFX0JBTkRXSURU SDoKPj4gK8KgwqDCoMKgwqDCoMKgIC8qIHByb2Nlc3MgZGF0YSB0byBzZXQgdW5pdCBvZiBiYW5k d2lkdGggYXMgIktCaXRzL3MiICovCj4+ICvCoMKgwqDCoMKgwqDCoCByZXN1bHQgPSBkYXRhIC8g aG5zM19wbXVfdGlja190b19tcyhod19jbGtfZnJlcSwgZGF0YV9leHQpOwo+PiArwqDCoMKgwqDC oMKgwqAgcmVzdWx0ID0gQllURVNfVE9fQklUUyhyZXN1bHQpOwo+PiArwqDCoMKgwqDCoMKgwqAg YnJlYWs7Cj4+ICsKPj4gK8KgwqDCoCBjYXNlIEhOUzNfUE1VX0VWRU5UX1RZUEVfUEFDS0VUX1JB VEU6Cj4+ICvCoMKgwqAgY2FzZSBITlMzX1BNVV9FVkVOVF9UWVBFX0lOVFJfUkFURToKPj4gK8Kg wqDCoMKgwqDCoMKgIC8qIHByb2Nlc3MgZGF0YSB0byBzZXQgdW5pdCBhcyAicHBzIiAqLwo+PiAr wqDCoMKgwqDCoMKgwqAgcmVzdWx0ID0gZGF0YSAqIDEwMDAgLwo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGhuczNfcG11X3RpY2tfdG9fbXMoaHdfY2xrX2ZyZXEsIGRhdGFfZXh0KTsKPj4g K8KgwqDCoMKgwqDCoMKgIGJyZWFrOwo+PiArCj4+ICvCoMKgwqAgY2FzZSBITlMzX1BNVV9FVkVO VF9UWVBFX0xBVEVOQ1k6Cj4+ICvCoMKgwqDCoMKgwqDCoCAvKiBwcm9jZXNzIGRhdGEgdG8gc2V0 IHVuaXQgb2YgbGF0ZW5jeSBhcyAibnMiICovCj4+ICvCoMKgwqDCoMKgwqDCoCByZXN1bHQgPSBk YXRhIC8gZGF0YV9leHQ7Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXN1bHQgPSByZXN1bHQgKiAxMDAw MDAwMDAwIC8gaHdfY2xrX2ZyZXE7Cj4+ICvCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4gKwo+PiAr wqDCoMKgIGRlZmF1bHQ6Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXN1bHQgPSBkYXRhIC8gZGF0YV9l eHQ7Cj4+ICvCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDC oCByZXR1cm4gcmVzdWx0Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGhuczNfcG11X2V2ZW50 X2luaXQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCBo bnMzX3BtdSAqaG5zM19wbXUgPSB0b19obnMzX3BtdShldmVudC0+cG11KTsKPj4gK8KgwqDCoCBz dHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKPj4gK8KgwqDCoCBpbnQgaWR4 Owo+PiArwqDCoMKgIGludCByZXQ7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoZXZlbnQtPmF0dHIudHlw ZSAhPSBldmVudC0+cG11LT50eXBlKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FTk9FTlQ7 Cj4+ICsKPj4gK8KgwqDCoCAvKiBTYW1wbGluZyBpcyBub3Qgc3VwcG9ydGVkICovCj4+ICvCoMKg wqAgaWYgKGlzX3NhbXBsaW5nX2V2ZW50KGV2ZW50KSB8fCBldmVudC0+YXR0YWNoX3N0YXRlICYg UEVSRl9BVFRBQ0hfVEFTSykKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRU9QTk9UU1VQUDsK Pj4gKwo+PiArwqDCoMKgIGV2ZW50LT5jcHUgPSBobnMzX3BtdS0+b25fY3B1Owo+PiArCj4+ICvC oMKgwqAgaWR4ID0gaG5zM19wbXVfZ2V0X2V2ZW50X2lkeChobnMzX3BtdSk7Cj4+ICvCoMKgwqAg aWYgKGlkeCA8IDApIHsKPj4gK8KgwqDCoMKgwqDCoMKgIHBjaV9lcnIoaG5zM19wbXUtPnBkZXYs ICJVcCB0byAldSBldmVudHMgYXJlIHN1cHBvcnRlZCFcbiIsCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIEhOUzNfUE1VX01BWF9DT1VOVEVSUyk7Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4g LUVCVVNZOwo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIGh3Yy0+aWR4ID0gaWR4Owo+PiAr Cj4+ICvCoMKgwqAgcmV0ID0gaG5zM19wbXVfc2VsZWN0X2ZpbHRlcl9tb2RlKGV2ZW50LCBobnMz X3BtdSk7Cj4+ICvCoMKgwqAgaWYgKHJldCkgewo+PiArwqDCoMKgwqDCoMKgwqAgcGNpX2Vyciho bnMzX3BtdS0+cGRldiwgIkludmFsaWQgZmlsdGVyLCByZXQgPSAlZC5cbiIsIHJldCk7Cj4+ICvC oMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIGlm ICghaG5zM19wbXVfdmFsaWRhdGVfZXZlbnRfZ3JvdXAoZXZlbnQpKSB7Cj4+ICvCoMKgwqDCoMKg wqDCoCBwY2lfZXJyKGhuczNfcG11LT5wZGV2LCAiSW52YWxpZCBldmVudCBncm91cC5cbiIpOwo+ PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7Cj4+ICvCoMKgwqAgfQo+PiArCj4+ICvC oMKgwqAgcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGhuczNfcG11X3JlYWQo c3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCBobnMzX3Bt dSAqaG5zM19wbXUgPSB0b19obnMzX3BtdShldmVudC0+cG11KTsKPj4gK8KgwqDCoCBzdHJ1Y3Qg aHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKPj4gK8KgwqDCoCBzdHJ1Y3QgaHdfcGVy Zl9ldmVudF9leHRyYSAqaHdjX2V4dDsKPj4gK8KgwqDCoCB1NjQgbmV3X2NudF9leHQsIHByZXZf Y250X2V4dDsKPj4gK8KgwqDCoCB1NjQgbmV3X2NudCwgcHJldl9jbnQsIGRlbHRhOwo+PiArCj4+ ICvCoMKgwqAgaHdjX2V4dCA9ICZod2MtPmV4dHJhX3JlZzsKPj4gK8KgwqDCoCBkbyB7Cj4+ICvC oMKgwqDCoMKgwqDCoCBwcmV2X2NudCA9IGxvY2FsNjRfcmVhZCgmaHdjLT5wcmV2X2NvdW50KTsK Pj4gK8KgwqDCoMKgwqDCoMKgIHByZXZfY250X2V4dCA9IGh3Y19leHQtPmNvbmZpZzsKPj4gK8Kg wqDCoMKgwqDCoMKgIGhuczNfcG11X3JlYWRfY291bnRlcihldmVudCwgJm5ld19jbnQsICZuZXdf Y250X2V4dCk7Cj4+ICvCoMKgwqAgfSB3aGlsZSAobG9jYWw2NF9jbXB4Y2hnKCZod2MtPnByZXZf Y291bnQsIHByZXZfY250LCBuZXdfY250KSAhPQo+PiArwqDCoMKgwqDCoMKgwqDCoCBwcmV2X2Nu dCk7Cj4+ICsKPj4gK8KgwqDCoCBod2NfZXh0LT5jb25maWcgPSBuZXdfY250X2V4dDsKPj4gKwo+ PiArwqDCoMKgIGRlbHRhID0gaG5zM19wbXVfZ2V0X3BlcmZvcm1hbmNlKGhuczNfZ2V0X2V2ZW50 KGV2ZW50KSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaG5z M19wbXUtPmh3X2Nsa19mcmVxLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBuZXdfY250IC0gcHJldl9jbnQsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIG5ld19jbnRfZXh0IC0gcHJldl9jbnRfZXh0KTsKPiAKPiBUaGlzIGxv b2tzIHZlcnkgbXVjaCBsaWtlIHdoYXQgd2FzIG9yaWdpbmFsbHkgaGFkIGluIHRoZSBoaXNpIFBD SSBQTVUgZHJpdmVyOgo+IAo+IGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2xpbnV4LWFybS1rZXJu ZWwvMjAyMTA2MTYxMzQyNTcuR0EyMjkwNUB3aWxsaWUtdGhlLXRydWNrLwo+IAo+IGh0dHBzOi8v bG9yZS5rZXJuZWwub3JnL2xpbnV4LWFybS1rZXJuZWwvMjAyMTA2MTcxNzU3MDQuR0YyNDgxM0B3 aWxsaWUtdGhlLXRydWNrLwo+IAo+IFBsZWFzZSBjb25zdWx0IHdpdGggbGl1cWkKPiAKPiBJZiBp dCBpcywgSSBmaWd1cmUgdGhhdCB3ZSdyZSBnb2luZyB0byBuZWVkIHRvIGV4cG9zZSB0aGUgMngg dmFsdWVzIGFuZCBkbyB0aGUgY2FsY3VsYXRpb24gaW4gdXNlcnNwYWNlLgo+CgpPaywgSSB3aWxs IHNlcGFyYXRlIGNvdW50ZXIgYW5kIGV4dF9jb3VudGVyIGludG8gdHdvIGV2ZW50cyBvbiBuZXh0 IHZlcnNpb24uCgoKPj4gKwo+PiArwqDCoMKgIGxvY2FsNjRfYWRkKGRlbHRhLCAmZXZlbnQtPmNv dW50KTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgaG5zM19wbXVfc3RhcnQoc3RydWN0IHBl cmZfZXZlbnQgKmV2ZW50LCBpbnQgZmxhZ3MpCj4+ICt7Cj4+ICvCoMKgwqAgc3RydWN0IGhuczNf cG11ICpobnMzX3BtdSA9IHRvX2huczNfcG11KGV2ZW50LT5wbXUpOwo+PiArwqDCoMKgIHN0cnVj dCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3Owo+PiArCj4+ICvCoMKgwqAgaWYgKFdB Uk5fT05fT05DRSghKGh3Yy0+c3RhdGUgJiBQRVJGX0hFU19TVE9QUEVEKSkpCj4+ICvCoMKgwqDC oMKgwqDCoCByZXR1cm47Cj4+ICsKPj4gK8KgwqDCoCBXQVJOX09OX09OQ0UoIShod2MtPnN0YXRl ICYgUEVSRl9IRVNfVVBUT0RBVEUpKTsKPiAKPiAuLi4KPiAKPj4gKwo+PiArwqDCoMKgIHZhbCA9 IHJlYWRsKGhuczNfcG11LT5iYXNlICsgSE5TM19QTVVfUkVHX0RFVklDRV9JRCk7Cj4+ICvCoMKg wqAgZGV2aWNlX2lkID0gdmFsICYgMHhmZmZmOwo+PiArwqDCoMKgIG5hbWUgPSBkZXZtX2thc3By aW50ZigmcGRldi0+ZGV2LCBHRlBfS0VSTkVMLCAiaG5zM19wbXVfJXUiLCBkZXZpY2VfaWQpOwo+ IAo+IHdvdWxkIGFkZGluZyBzY2NsIHRvIHRoZSBuYW1lIGhlbHAgaXQgbWFrZSBpdCBtb3JlIGNs ZWFyIHRoYXQgdGhpcyBpcyBwZXIgc2NjbCwgbGlrZSBobnMzX3BtdV9zY2NsJXU/Cj4gCk9rLCBJ IHdpbGwgYWRkIHNpY2wgdG8gdGhlIG5hbWUuCgo+PiArwqDCoMKgIGlmICghbmFtZSkgewo+PiAr wqDCoMKgwqDCoMKgwqAgcGNpX2VycihwZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIG5hbWUgZm9y IEhOUzMgUE1VLlxuIik7Cj4gCj4gSSBkb24ndCB0aGluayB0aGF0IHlvdSBuZWVkIHRoaXMgLUVO T01FTSBtZXNzYWdlcwo+IApPaywgSSBkZWxldGUgaXQuCgo+PiArwqDCoMKgwqDCoMKgwqAgcmV0 ID0gLUVOT01FTTsKPj4gK8KgwqDCoMKgwqDCoMKgIGdvdG8gZXJyX2FsbG9jX2Rldl9uYW1lOwo+ PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIGhuczNfcG11LT5wZGV2ID0gcGRldjsKPj4gK8Kg wqDCoCBobnMzX3BtdS0+b25fY3B1ID0gSE5TM19QTVVfSU5WQUxJRF9DUFVfSUQ7Cj4gCj4gY2Fu IHlvdSBwb3NzaWJseSBqdXN0IGluaXRpYWxseSB0YXJnZXQgdGhlIHByb2JlIENQVT8KPiAKT0su Cgo+PiArwqDCoMKgIGhuczNfcG11LT5pZGVudGlmaWVyID0gcmVhZGwoaG5zM19wbXUtPmJhc2Ug KyBITlMzX1BNVV9SRUdfVkVSU0lPTik7Cj4+ICvCoMKgwqAgaG5zM19wbXUtPnBtdSA9IChzdHJ1 Y3QgcG11KSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCAubmFtZcKgwqDCoMKgwqDCoMKgID0gbmFtZSwK Pj4gK8KgwqDCoMKgwqDCoMKgIC5tb2R1bGXCoMKgwqDCoMKgwqDCoCA9IFRISVNfTU9EVUxFLAo+ PiArwqDCoMKgwqDCoMKgwqAgLmV2ZW50X2luaXTCoMKgwqAgPSBobnMzX3BtdV9ldmVudF9pbml0 LAo+PiArwqDCoMKgwqDCoMKgwqAgLnBtdV9lbmFibGXCoMKgwqAgPSBobnMzX3BtdV9lbmFibGUs Cj4+ICvCoMKgwqDCoMKgwqDCoCAucG11X2Rpc2FibGXCoMKgwqAgPSBobnMzX3BtdV9kaXNhYmxl LAo+PiArwqDCoMKgwqDCoMKgwqAgLmFkZMKgwqDCoMKgwqDCoMKgID0gaG5zM19wbXVfYWRkLAo+ PiArwqDCoMKgwqDCoMKgwqAgLmRlbMKgwqDCoMKgwqDCoMKgID0gaG5zM19wbXVfZGVsLAo+PiAr wqDCoMKgwqDCoMKgwqAgLnN0YXJ0wqDCoMKgwqDCoMKgwqAgPSBobnMzX3BtdV9zdGFydCwKPj4g K8KgwqDCoMKgwqDCoMKgIC5zdG9wwqDCoMKgwqDCoMKgwqAgPSBobnMzX3BtdV9zdG9wLAo+PiAr wqDCoMKgwqDCoMKgwqAgLnJlYWTCoMKgwqDCoMKgwqDCoCA9IGhuczNfcG11X3JlYWQsCj4+ICvC oMKgwqDCoMKgwqDCoCAudGFza19jdHhfbnLCoMKgwqAgPSBwZXJmX2ludmFsaWRfY29udGV4dCwK Pj4gK8KgwqDCoMKgwqDCoMKgIC5hdHRyX2dyb3Vwc8KgwqDCoCA9IGhuczNfcG11X2F0dHJfZ3Jv dXBzLAo+PiArwqDCoMKgwqDCoMKgwqAgLmNhcGFiaWxpdGllc8KgwqDCoCA9IFBFUkZfUE1VX0NB UF9OT19FWENMVURFLAo+PiArwqDCoMKgIH07Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4gMDsKPj4g Kwo+PiArZXJyX2FsbG9jX2Rldl9uYW1lOgo+PiArwqDCoMKgIGlvdW5tYXAoaG5zM19wbXUtPmJh c2UpOwo+PiArZXJyX2lvcmVtYXBfYmFyOgo+PiArwqDCoMKgIHBjaV9yZWxlYXNlX3JlZ2lvbnMo cGRldik7Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ICtzdGF0aWMg aXJxcmV0dXJuX3QgaG5zM19wbXVfaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpCj4+ICt7Cj4+ICvC oMKgwqAgc3RydWN0IGhuczNfcG11ICpobnMzX3BtdSA9IGRhdGE7Cj4+ICvCoMKgwqAgdTMyIGlu dHJfc3RhdHVzLCBpZHg7Cj4+ICsKPj4gK8KgwqDCoCBmb3IgKGlkeCA9IDA7IGlkeCA8IEhOUzNf UE1VX01BWF9DT1VOVEVSUzsgaWR4KyspIHsKPj4gK8KgwqDCoMKgwqDCoMKgIGludHJfc3RhdHVz ID0gaG5zM19wbXVfcmVhZGwoaG5zM19wbXUsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgSE5TM19QTVVfUkVHX0VWRU5UX0lOVFJfU1RBVFVTLAo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlkeCk7 Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIC8qCj4+ICvCoMKgwqDCoMKgwqDCoMKgICogQXMgZWFj aCBjb3VudGVyIHdpbGwgcmVzdGFydCBmcm9tIDAgd2hlbiBpdCBpcyBvdmVyZmxvd2VkLAo+PiAr wqDCoMKgwqDCoMKgwqDCoCAqIGV4dHJhIHByb2Nlc3NpbmcgaXMgbm8gbmVlZCwganVzdCBjbGVh ciBpbnRlcnJ1cHQgc3RhdHVzLgo+PiArwqDCoMKgwqDCoMKgwqDCoCAqLwo+PiArwqDCoMKgwqDC oMKgwqAgaWYgKGludHJfc3RhdHVzKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBobnMzX3Bt dV9jbGVhcl9pbnRyX3N0YXR1cyhobnMzX3BtdSwgaWR4KTsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4g K8KgwqDCoCByZXR1cm4gSVJRX0hBTkRMRUQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgaG5z M19wbXVfb25saW5lX2NwdSh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9k ZSkKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgaG5zM19wbXUgKmhuczNfcG11Owo+PiArCj4+ICvC oMKgwqAgaG5zM19wbXUgPSBobGlzdF9lbnRyeV9zYWZlKG5vZGUsIHN0cnVjdCBobnMzX3BtdSwg bm9kZSk7Cj4+ICvCoMKgwqAgaWYgKCFobnMzX3BtdSkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVy biAtRU5PREVWOwo+PiArCj4+ICvCoMKgwqAgaWYgKGhuczNfcG11LT5vbl9jcHUgPT0gSE5TM19Q TVVfSU5WQUxJRF9DUFVfSUQpIHsKPj4gK8KgwqDCoMKgwqDCoMKgIGhuczNfcG11LT5vbl9jcHUg PSBjcHU7Cj4+ICvCoMKgwqDCoMKgwqDCoCBpcnFfc2V0X2FmZmluaXR5X2hpbnQoaG5zM19wbXUt PmlycSwgY3B1bWFza19vZihjcHUpKTsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCByZXR1 cm4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBobnMzX3BtdV9vZmZsaW5lX2NwdSh1bnNp Z25lZCBpbnQgY3B1LCBzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSkKPj4gK3sKPj4gK8KgwqDCoCBz dHJ1Y3QgaG5zM19wbXUgKmhuczNfcG11Owo+PiArwqDCoMKgIHVuc2lnbmVkIGludCB0YXJnZXQ7 Cj4+ICsKPj4gK8KgwqDCoCBobnMzX3BtdSA9IGhsaXN0X2VudHJ5X3NhZmUobm9kZSwgc3RydWN0 IGhuczNfcG11LCBub2RlKTsKPj4gK8KgwqDCoCBpZiAoIWhuczNfcG11KQo+PiArwqDCoMKgwqDC oMKgwqAgcmV0dXJuIC1FTk9ERVY7Cj4+ICsKPj4gK8KgwqDCoCAvKiBOb3RoaW5nIHRvIGRvIGlm IHRoaXMgQ1BVIGRvZXNuJ3Qgb3duIHRoZSBQTVUgKi8KPj4gK8KgwqDCoCBpZiAoaG5zM19wbXUt Pm9uX2NwdSAhPSBjcHUpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsKPj4gKwo+PiArwqDC oMKgIC8qIENob29zZSBhIG5ldyBDUFUgZnJvbSBhbGwgb25saW5lIGNwdXMgKi8KPj4gK8KgwqDC oCB0YXJnZXQgPSBjcHVtYXNrX2FueV9idXQoY3B1X29ubGluZV9tYXNrLCBjcHUpOwo+PiArwqDC oMKgIGlmICh0YXJnZXQgPj0gbnJfY3B1X2lkcykKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAw Owo+PiArCj4+ICvCoMKgwqAgcGVyZl9wbXVfbWlncmF0ZV9jb250ZXh0KCZobnMzX3BtdS0+cG11 LCBjcHUsIHRhcmdldCk7Cj4+ICvCoMKgwqAgaG5zM19wbXUtPm9uX2NwdSA9IHRhcmdldDsKPj4g K8KgwqDCoCBpcnFfc2V0X2FmZmluaXR5X2hpbnQoaG5zM19wbXUtPmlycSwgY3B1bWFza19vZih0 YXJnZXQpKTsKPj4gKwo+PiArwqDCoMKgIHJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMg aW50IGhuczNfcG11X2lycV9yZWdpc3RlcihzdHJ1Y3QgcGNpX2RldiAqcGRldiwKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBobnMzX3BtdSAqaG5zM19wbXUpCj4+ ICt7Cj4+ICvCoMKgwqAgaW50IGlycSwgcmV0Owo+PiArCj4+ICvCoMKgwqAgcmV0ID0gcGNpX2Fs bG9jX2lycV92ZWN0b3JzKHBkZXYsIDEsIDEsIFBDSV9JUlFfTVNJKTsKPiAKPiBJIGRvbid0IHRo aW5rIHRoYXQgYSBwY2ltIGV4aXN0cyBoZXJlLCBzbyBjYW4gdXNlIGRldm1fYWRkX2FjdGlvbigp IHRvIGZyZWUgdGhlbSBbbWF5YmUgdGhlIG5hbWUgaXMgd3JvbmcgSSBtZW50aW9uZWRdCj4gCgpv awoKPj4gK8KgwqDCoCBpZiAocmV0IDwgMCkgewo+PiArwqDCoMKgwqDCoMKgwqAgcGNpX2Vycihw ZGV2LCAiZmFpbGVkIHRvIGVuYWJsZSBNU0kgdmVjdG9ycywgcmV0ID0gJWQuXG4iLCByZXQpOwo+ PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDC oCBpcnEgPSBwY2lfaXJxX3ZlY3RvcihwZGV2LCAwKTsKPj4gK8KgwqDCoCByZXQgPSByZXF1ZXN0 X2lycShpcnEsIGhuczNfcG11X2lycSwgMCwgaG5zM19wbXUtPnBtdS5uYW1lLCBobnMzX3BtdSk7 Cj4gCj4gZGV2bV9yZXF1ZXN0X2lycSgpCj4gCm9rCgoKPj4gK8KgwqDCoCBpZiAocmV0KSB7Cj4+ ICvCoMKgwqDCoMKgwqDCoCBwY2lfZXJyKHBkZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgaXJxLCBy ZXQgPSAlZC5cbiIsIHJldCk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBwY2lfZnJlZV9pcnFfdmVjdG9y cyhwZGV2KTsKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+ICvCoMKgwqAgfQo+PiAr Cj4+ICvCoMKgwqAgaG5zM19wbXUtPmlycSA9IGlycTsKPj4gKwo+PiArwqDCoMKgIHJldHVybiAw Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBobnMzX3BtdV9pcnFfdW5yZWdpc3RlcihzdHJ1 Y3QgcGNpX2RldiAqcGRldiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHN0cnVjdCBobnMzX3BtdSAqaG5zM19wbXUpCj4+ICt7Cj4+ICvCoMKgwqAgZnJlZV9pcnEo aG5zM19wbXUtPmlycSwgaG5zM19wbXUpOwo+PiArwqDCoMKgIHBjaV9mcmVlX2lycV92ZWN0b3Jz KHBkZXYpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGhuczNfcG11X2luaXQoc3RydWN0IHBj aV9kZXYgKnBkZXYsIHN0cnVjdCBobnMzX3BtdSAqaG5zM19wbXUpCj4+ICt7Cj4+ICvCoMKgwqAg aW50IHJldDsKPj4gKwo+PiArwqDCoMKgIHJldCA9IGhuczNfcG11X2FsbG9jX3BtdShwZGV2LCBo bnMzX3BtdSk7Cj4+ICvCoMKgwqAgaWYgKHJldCkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBy ZXQ7Cj4+ICsKPj4gK8KgwqDCoCByZXQgPSBobnMzX3BtdV9pcnFfcmVnaXN0ZXIocGRldiwgaG5z M19wbXUpOwo+PiArwqDCoMKgIGlmIChyZXQpCj4+ICvCoMKgwqDCoMKgwqDCoCBnb3RvIGVycl9p cnFfcmVnaXN0ZXI7Cj4+ICsKPj4gK8KgwqDCoCByZXQgPSBjcHVocF9zdGF0ZV9hZGRfaW5zdGFu Y2UoQ1BVSFBfQVBfUEVSRl9BUk1fSE5TM19QTVVfT05MSU5FLAo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJmhuczNfcG11LT5ub2RlKTsKPj4gK8KgwqDC oCBpZiAocmV0KSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBwY2lfZXJyKHBkZXYsICJmYWlsZWQgdG8g cmVnaXN0ZXIgaG90cGx1ZywgcmV0ID0gJWQuXG4iLCByZXQpOwo+PiArwqDCoMKgwqDCoMKgwqAg Z290byBlcnJfcmVnaXN0ZXJfaG90cGx1ZzsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCBy ZXQgPSBwZXJmX3BtdV9yZWdpc3RlcigmaG5zM19wbXUtPnBtdSwgaG5zM19wbXUtPnBtdS5uYW1l LCAtMSk7Cj4+ICvCoMKgwqAgaWYgKHJldCkgewo+PiArwqDCoMKgwqDCoMKgwqAgcGNpX2Vycihw ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIEhOUzMgUE1VLCByZXQgPSAlZC5cbiIsIHJldCk7Cj4g Cj4gZG8geW91IG5lZWQgdG8gbWVudGlvbiAiSE5TMyBQTVUiLCBzaW5jZSBwZGV2IGlzIHBhc3Nl ZAo+IAoKT2ssIEkgd2lsbCBtb2RpZnkgdG8gInBlcmYgUE1VIi4KCj4+ICvCoMKgwqDCoMKgwqDC oCBnb3RvIGVycl9yZWdpc3Rlcl9wbXU7Cj4+ICvCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqAgcmV0 dXJuIHJldDsKPj4gKwo+PiArZXJyX3JlZ2lzdGVyX3BtdToKPj4gK8KgwqDCoCBjcHVocF9zdGF0 ZV9yZW1vdmVfaW5zdGFuY2UoQ1BVSFBfQVBfUEVSRl9BUk1fSE5TM19QTVVfT05MSU5FLAo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJmhuczNfcG11LT5ub2RlKTsK Pj4gK8KgwqDCoCBpcnFfc2V0X2FmZmluaXR5X2hpbnQoaG5zM19wbXUtPmlycSwgTlVMTCk7Cj4+ ICsKPj4gK2Vycl9yZWdpc3Rlcl9ob3RwbHVnOgo+PiArwqDCoMKgIGhuczNfcG11X2lycV91bnJl Z2lzdGVyKHBkZXYsIGhuczNfcG11KTsKPj4gKwo+PiArZXJyX2lycV9yZWdpc3RlcjoKPj4gK8Kg wqDCoCBpb3VubWFwKGhuczNfcG11LT5iYXNlKTsKPj4gKwo+PiArwqDCoMKgIHJldHVybiByZXQ7 Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGhuczNfcG11X3VuaW5pdChzdHJ1Y3QgcGNpX2Rl diAqcGRldikKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgaG5zM19wbXUgKmhuczNfcG11ID0gKHN0 cnVjdCBobnMzX3BtdSAqKXBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKPiAKPiBubyBuZWVkIHRvIGNh c3QgYSB2b2lkIHB0cgo+IApPay4KCj4+ICsKPj4gK8KgwqDCoCBwZXJmX3BtdV91bnJlZ2lzdGVy KCZobnMzX3BtdS0+cG11KTsKPj4gK8KgwqDCoCBjcHVocF9zdGF0ZV9yZW1vdmVfaW5zdGFuY2Uo Q1BVSFBfQVBfUEVSRl9BUk1fSE5TM19QTVVfT05MSU5FLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgJmhuczNfcG11LT5ub2RlKTsKPj4gK8KgwqDCoCBpcnFfc2V0 X2FmZmluaXR5X2hpbnQoaG5zM19wbXUtPmlycSwgTlVMTCk7Cj4+ICvCoMKgwqAgaG5zM19wbXVf aXJxX3VucmVnaXN0ZXIocGRldiwgaG5zM19wbXUpOwo+PiArwqDCoMKgIGlvdW5tYXAoaG5zM19w bXUtPmJhc2UpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGhuczNfcG11X2luaXRfZGV2KHN0 cnVjdCBwY2lfZGV2ICpwZGV2KQo+PiArewo+PiArwqDCoMKgIGludCByZXQ7Cj4+ICsKPj4gK8Kg wqDCoCByZXQgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKPiAKPiBpc24ndCB0aGVyZSBwY2kt bWFuYWdlZCB2ZXJzaW9ucyBvZiB0aGlzIHNvIHRoYXQgeW91IGRvbid0IG5lZWQgd29ycnkgYWJv dXQgdW5kbydpbmcgdGhpcyBtYW51YWxseT8KPiAKT2ssIEkgbW9kaWZ5IGl0IG5leHQgdmVyc2lv bi4KCj4+ICvCoMKgwqAgaWYgKHJldCkgewo+PiArwqDCoMKgwqDCoMKgwqAgcGNpX2VycihwZGV2 LCAiZmFpbGVkIHRvIGVuYWJsZSBwY2kgZGV2aWNlLCByZXQgPSAlZC5cbiIsIHJldCk7Cj4+ICvC oMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIHJl dCA9IHBjaV9yZXF1ZXN0X21lbV9yZWdpb25zKHBkZXYsICJobnMzX3BtdSIpOwo+PiArwqDCoMKg IGlmIChyZXQgPCAwKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBwY2lfZXJyKHBkZXYsICJmYWlsZWQg dG8gcmVxdWVzdCBwY2kgbWVtIHJlZ2lvbnMsIHJldCA9ICVkLlxuIiwKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgcmV0KTsKPj4gK8KgwqDCoMKgwqDCoMKgIHBjaV9kaXNhYmxlX2RldmljZShw ZGV2KTsKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+ICvCoMKgwqAgfQo+PiArCj4+ ICvCoMKgwqAgcGNpX3NldF9tYXN0ZXIocGRldik7Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4gMDsK Pj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgaG5zM19wbXVfdW5pbml0X2RldihzdHJ1Y3QgcGNp X2RldiAqcGRldikKPj4gK3sKPj4gK8KgwqDCoCBwY2lfY2xlYXJfbWFzdGVyKHBkZXYpOwo+PiAr wqDCoMKgIHBjaV9yZWxlYXNlX21lbV9yZWdpb25zKHBkZXYpOwo+PiArwqDCoMKgIHBjaV9kaXNh YmxlX2RldmljZShwZGV2KTsKPj4gK30KPj4gKwo+IC4KCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0Cmxp bnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFk Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK