From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.5 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 213F7C433DB for ; Mon, 25 Jan 2021 19:56:57 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id A29A8206DC for ; Mon, 25 Jan 2021 19:56:56 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org A29A8206DC Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Type: Content-Transfer-Encoding:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:From: References:To:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=GyO++Oob569OL9bZh9lOHppLvqERY8dfJ6T4KWIwW/I=; b=k4W1ZANKY37MrOidV1o83eFLj h0YQXT9rlCvnifZTNVLyqtoOgx5WLIVpw7oqXQu0Z3FieWNEl65wSkR/TnOVDnAS5Wru/AmfM0leU 4Awtp4/n+xSqGrq1owDCIhZMAyiv28jxNPc32I3Z+jyQZ/qMUbBfvk2wKp7yzkXS9XZKup5P+vNLo R/IfktMziQs/LW/42Edh+ljSa2wv33/4yKVtClm3TBQkMBmeiVJKdCI1ElCQkpfvAPKNXhASVPvVj ftQe3s5CKFOivOKHuMh3HWnwBDe2hSg2iLiRYwXSBaKuWeuZPyOpcOtQsS5imffl/UeaZ0L/f6BYq Di4E4LZyg==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1l47x9-0007Vy-Lz; Mon, 25 Jan 2021 19:55:11 +0000 Received: from foss.arm.com ([217.140.110.172]) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1l47wz-0007U5-Lv for linux-arm-kernel@lists.infradead.org; Mon, 25 Jan 2021 19:55:04 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 5EF4431B; Mon, 25 Jan 2021 11:55:00 -0800 (PST) Received: from [10.57.46.25] (unknown [10.57.46.25]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id C47863F66E; Mon, 25 Jan 2021 11:54:58 -0800 (PST) Subject: Re: [PATCH 1/1] iommu/arm-smmu-v3: add support for BBML To: "Leizhen (ThunderTown)" , Will Deacon References: <20201126034230.777-1-thunder.leizhen@huawei.com> <20210122125132.GB24102@willie-the-truck> <34a9c164-389d-30cd-11a3-8796eb7bca93@arm.com> <3985308c-87be-fa12-0760-55e5ab29c47d@huawei.com> From: Robin Murphy Message-ID: <3192f888-206b-6bc4-5fe1-fbc4316f316f@arm.com> Date: Mon, 25 Jan 2021 19:54:52 +0000 User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Thunderbird/78.6.1 MIME-Version: 1.0 In-Reply-To: <3985308c-87be-fa12-0760-55e5ab29c47d@huawei.com> Content-Language: en-GB X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210125_145502_521054_C697FBA3 X-CRM114-Status: GOOD ( 27.71 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jean-Philippe Brucker , Joerg Roedel , Yang Yingliang , linux-kernel , iommu , Jonathan Cameron , linux-arm-kernel 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 T24gMjAyMS0wMS0yMyAxMDoyMCwgTGVpemhlbiAoVGh1bmRlclRvd24pIHdyb3RlOgo+IAo+IAo+ IE9uIDIwMjEvMS8yMiAyMTowMCwgUm9iaW4gTXVycGh5IHdyb3RlOgo+PiBPbiAyMDIxLTAxLTIy IDEyOjUxLCBXaWxsIERlYWNvbiB3cm90ZToKPj4+IE9uIFRodSwgTm92IDI2LCAyMDIwIGF0IDEx OjQyOjMwQU0gKzA4MDAsIFpoZW4gTGVpIHdyb3RlOgo+Pj4+IFdoZW4gY2hhbmdpbmcgZnJvbSBh IHNldCBvZiBwYWdlcy9zbWFsbGVyIGJsb2NrcyB0byBhIGxhcmdlciBibG9jayBmb3IgYW4KPj4+ PiBhZGRyZXNzLCB0aGUgc29mdHdhcmUgc2hvdWxkIGZvbGxvdyB0aGUgc2VxdWVuY2Ugb2YgQkJN TCBwcm9jZXNzaW5nLgo+Pj4+Cj4+Pj4gV2hlbiBjaGFuZ2luZyBmcm9tIGEgYmxvY2sgdG8gYSBz ZXQgb2YgcGFnZXMvc21hbGxlciBibG9ja3MgZm9yIGFuCj4+Pj4gYWRkcmVzcywgdGhlcmUncyBu byBuZWVkIHRvIHVzZSBuVCBiaXQuIElmIGFuIGFkZHJlc3MgaW4gdGhlIGxhcmdlIGJsb2NrCj4+ Pj4gaXMgYWNjZXNzZWQgYmVmb3JlIHBhZ2UgdGFibGUgc3dpdGNoaW5nLCB0aGUgVExCIGNhY2hl cyB0aGUgbGFyZ2UgYmxvY2sKPj4+PiBtYXBwaW5nLiBBZnRlciB0aGUgcGFnZSB0YWJsZSBpcyBz d2l0Y2hlZCBhbmQgYmVmb3JlIFRMQiBpbnZhbGlkYXRpb24KPj4+PiBmaW5pc2hlZCwgbmV3IGFj Y2VzcyByZXF1ZXN0cyBhcmUgc3RpbGwgYmFzZWQgb24gbGFyZ2UgYmxvY2sgbWFwcGluZy4KPj4+ PiBBZnRlciB0aGUgYmxvY2sgb3IgcGFnZSBpcyBpbnZhbGlkYXRlZCwgdGhlIHN5c3RlbSByZWFk cyB0aGUgc21hbGwgYmxvY2sKPj4+PiBvciBwYWdlIG1hcHBpbmcgZnJvbSB0aGUgbWVtb3J5OyBJ ZiB0aGUgYWRkcmVzcyBpbiB0aGUgbGFyZ2UgYmxvY2sgaXMgbm90Cj4+Pj4gYWNjZXNzZWQgYmVm b3JlIHBhZ2UgdGFibGUgc3dpdGNoaW5nLCB0aGUgVExCIGhhcyBubyBjYWNoZS4gQWZ0ZXIgdGhl Cj4+Pj4gcGFnZSB0YWJsZSBpcyBzd2l0Y2hlZCwgYSBuZXcgYWNjZXNzIGlzIGluaXRpYXRlZCB0 byByZWFkIHRoZSBzbWFsbCBibG9jawo+Pj4+IG9yIHBhZ2UgbWFwcGluZyBmcm9tIHRoZSBtZW1v cnkuCj4+Pj4KPj4+PiBTaWduZWQtb2ZmLWJ5OiBaaGVuIExlaSA8dGh1bmRlci5sZWl6aGVuQGh1 YXdlaS5jb20+Cj4+Pj4gLS0tCj4+Pj4gIMKgIGRyaXZlcnMvaW9tbXUvYXJtL2FybS1zbW11LXYz L2FybS1zbW11LXYzLmMgfMKgIDIgKwo+Pj4+ICDCoCBkcml2ZXJzL2lvbW11L2FybS9hcm0tc21t dS12My9hcm0tc21tdS12My5oIHzCoCAyICsKPj4+PiAgwqAgZHJpdmVycy9pb21tdS9pby1wZ3Rh YmxlLWFybS5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfCA0NiArKysrKysrKysrKysrKysr LS0tLS0KPj4+PiAgwqAgaW5jbHVkZS9saW51eC9pby1wZ3RhYmxlLmjCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHzCoCAxICsKPj4+PiAgwqAgNCBmaWxlcyBjaGFuZ2VkLCA0MCBp bnNlcnRpb25zKCspLCAxMSBkZWxldGlvbnMoLSkKPj4+Pgo+Pj4+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2lvbW11L2FybS9hcm0tc21tdS12My9hcm0tc21tdS12My5jIGIvZHJpdmVycy9pb21tdS9h cm0vYXJtLXNtbXUtdjMvYXJtLXNtbXUtdjMuYwo+Pj4+IGluZGV4IGU2MzRiYmU2MDU3My4uMTRh MWExMTU2NWZiIDEwMDY0NAo+Pj4+IC0tLSBhL2RyaXZlcnMvaW9tbXUvYXJtL2FybS1zbW11LXYz L2FybS1zbW11LXYzLmMKPj4+PiArKysgYi9kcml2ZXJzL2lvbW11L2FybS9hcm0tc21tdS12My9h cm0tc21tdS12My5jCj4+Pj4gQEAgLTE5NzcsNiArMTk3Nyw3IEBAIHN0YXRpYyBpbnQgYXJtX3Nt bXVfZG9tYWluX2ZpbmFsaXNlKHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbiwKPj4+PiAgwqDC oMKgwqDCoMKgwqDCoMKgIC5jb2hlcmVudF93YWxrwqDCoMKgID0gc21tdS0+ZmVhdHVyZXMgJiBB Uk1fU01NVV9GRUFUX0NPSEVSRU5DWSwKPj4+PiAgwqDCoMKgwqDCoMKgwqDCoMKgIC50bGLCoMKg wqDCoMKgwqDCoCA9ICZhcm1fc21tdV9mbHVzaF9vcHMsCj4+Pj4gIMKgwqDCoMKgwqDCoMKgwqDC oCAuaW9tbXVfZGV2wqDCoMKgID0gc21tdS0+ZGV2LAo+Pj4+ICvCoMKgwqDCoMKgwqDCoCAuYmJt bMKgwqDCoMKgwqDCoMKgID0gc21tdS0+YmJtbCwKPj4+PiAgwqDCoMKgwqDCoCB9Owo+Pj4+ICDC oCDCoMKgwqDCoMKgIGlmIChzbW11X2RvbWFpbi0+bm9uX3N0cmljdCkKPj4+PiBAQCAtMzI5MSw2 ICszMjkyLDcgQEAgc3RhdGljIGludCBhcm1fc21tdV9kZXZpY2VfaHdfcHJvYmUoc3RydWN0IGFy bV9zbW11X2RldmljZSAqc21tdSkKPj4+PiAgwqAgwqDCoMKgwqDCoCAvKiBJRFIzICovCj4+Pj4g IMKgwqDCoMKgwqAgcmVnID0gcmVhZGxfcmVsYXhlZChzbW11LT5iYXNlICsgQVJNX1NNTVVfSURS Myk7Cj4+Pj4gK8KgwqDCoCBzbW11LT5iYm1sID0gRklFTERfR0VUKElEUjNfQkJNTCwgcmVnKTsK Pj4+PiAgwqDCoMKgwqDCoCBpZiAoRklFTERfR0VUKElEUjNfUklMLCByZWcpKQo+Pj4+ICDCoMKg wqDCoMKgwqDCoMKgwqAgc21tdS0+ZmVhdHVyZXMgfD0gQVJNX1NNTVVfRkVBVF9SQU5HRV9JTlY7 Cj4+Pj4gIMKgIGRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2FybS9hcm0tc21tdS12My9hcm0t c21tdS12My5oIGIvZHJpdmVycy9pb21tdS9hcm0vYXJtLXNtbXUtdjMvYXJtLXNtbXUtdjMuaAo+ Pj4+IGluZGV4IGQ0YjdmNDBjY2IwMi4uYWE3ZWI0NjBmYTA5IDEwMDY0NAo+Pj4+IC0tLSBhL2Ry aXZlcnMvaW9tbXUvYXJtL2FybS1zbW11LXYzL2FybS1zbW11LXYzLmgKPj4+PiArKysgYi9kcml2 ZXJzL2lvbW11L2FybS9hcm0tc21tdS12My9hcm0tc21tdS12My5oCj4+Pj4gQEAgLTUxLDYgKzUx LDcgQEAKPj4+PiAgwqAgI2RlZmluZSBJRFIxX1NJRFNJWkXCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IEdFTk1BU0soNSwgMCkKPj4+PiAgwqAgwqAgI2RlZmluZSBBUk1fU01NVV9JRFIzwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAweGMKPj4+PiArI2RlZmluZSBJRFIzX0JCTUzCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIEdFTk1BU0soMTIsIDExKQo+Pj4+ICDCoCAjZGVmaW5lIElEUjNfUklMwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAoMSA8PCAxMCkKPj4+PiAgwqAgwqAgI2RlZmluZSBBUk1fU01NVV9JRFI1 wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAweDE0Cj4+Pj4gQEAgLTYxNyw2ICs2MTgsNyBAQCBzdHJ1 Y3QgYXJtX3NtbXVfZGV2aWNlIHsKPj4+PiAgwqAgwqDCoMKgwqDCoCBpbnTCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgZ2Vycl9pcnE7Cj4+Pj4gIMKgwqDCoMKgwqAgaW50wqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbWJpbmVkX2lycTsKPj4+PiArwqDCoMKgIGludMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBiYm1sOwo+Pj4+ICDCoCDCoMKgwqDCoMKgIHVuc2ln bmVkIGxvbmfCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlhczsgLyogSVBBICovCj4+Pj4gIMKgwqDC oMKgwqAgdW5zaWduZWQgbG9uZ8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgb2FzOyAvKiBQQSAqLwo+ Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2lvLXBndGFibGUtYXJtLmMgYi9kcml2ZXJz L2lvbW11L2lvLXBndGFibGUtYXJtLmMKPj4+PiBpbmRleCBhN2E5YmMwOGRjZDEuLjM0MTU4MTMz N2FkMCAxMDA2NDQKPj4+PiAtLS0gYS9kcml2ZXJzL2lvbW11L2lvLXBndGFibGUtYXJtLmMKPj4+ PiArKysgYi9kcml2ZXJzL2lvbW11L2lvLXBndGFibGUtYXJtLmMKPj4+PiBAQCAtNzIsNiArNzIs NyBAQAo+Pj4+ICDCoCDCoCAjZGVmaW5lIEFSTV9MUEFFX1BURV9OU1RBQkxFwqDCoMKgwqDCoMKg wqAgKCgoYXJtX2xwYWVfaW9wdGUpMSkgPDwgNjMpCj4+Pj4gIMKgICNkZWZpbmUgQVJNX0xQQUVf UFRFX1hOwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoKChhcm1fbHBhZV9pb3B0ZSkzKSA8PCA1MykK Pj4+PiArI2RlZmluZSBBUk1fTFBBRV9QVEVfblTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICgoKGFy bV9scGFlX2lvcHRlKTEpIDw8IDE2KQo+Pj4+ICDCoCAjZGVmaW5lIEFSTV9MUEFFX1BURV9BRsKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgKCgoYXJtX2xwYWVfaW9wdGUpMSkgPDwgMTApCj4+Pj4gIMKg ICNkZWZpbmUgQVJNX0xQQUVfUFRFX1NIX05TwqDCoMKgwqDCoMKgwqAgKCgoYXJtX2xwYWVfaW9w dGUpMCkgPDwgOCkKPj4+PiAgwqAgI2RlZmluZSBBUk1fTFBBRV9QVEVfU0hfT1PCoMKgwqDCoMKg wqDCoCAoKChhcm1fbHBhZV9pb3B0ZSkyKSA8PCA4KQo+Pj4+IEBAIC0yNTUsNyArMjU2LDcgQEAg c3RhdGljIHNpemVfdCBfX2FybV9scGFlX3VubWFwKHN0cnVjdCBhcm1fbHBhZV9pb19wZ3RhYmxl ICpkYXRhLAo+Pj4+ICDCoCDCoCBzdGF0aWMgdm9pZCBfX2FybV9scGFlX2luaXRfcHRlKHN0cnVj dCBhcm1fbHBhZV9pb19wZ3RhYmxlICpkYXRhLAo+Pj4+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHBoeXNfYWRkcl90IHBhZGRyLCBhcm1fbHBhZV9pb3B0ZSBwcm90LAo+Pj4+ IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW50IGx2bCwgYXJtX2xwYWVfaW9wdGUg KnB0ZXApCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpbnQgbHZsLCBhcm1f bHBhZV9pb3B0ZSAqcHRlcCwgYXJtX2xwYWVfaW9wdGUgblQpCj4+Pj4gIMKgIHsKPj4+PiAgwqDC oMKgwqDCoCBhcm1fbHBhZV9pb3B0ZSBwdGUgPSBwcm90Owo+Pj4+ICDCoCBAQCAtMjY1LDM3ICsy NjYsNjAgQEAgc3RhdGljIHZvaWQgX19hcm1fbHBhZV9pbml0X3B0ZShzdHJ1Y3QgYXJtX2xwYWVf aW9fcGd0YWJsZSAqZGF0YSwKPj4+PiAgwqDCoMKgwqDCoMKgwqDCoMKgIHB0ZSB8PSBBUk1fTFBB RV9QVEVfVFlQRV9CTE9DSzsKPj4+PiAgwqAgwqDCoMKgwqDCoCBwdGUgfD0gcGFkZHJfdG9faW9w dGUocGFkZHIsIGRhdGEpOwo+Pj4+ICvCoMKgwqAgcHRlIHw9IG5UOwo+Pj4+ICDCoCDCoMKgwqDC oMKgIF9fYXJtX2xwYWVfc2V0X3B0ZShwdGVwLCBwdGUsICZkYXRhLT5pb3AuY2ZnKTsKPj4+PiAg wqAgfQo+Pj4+ICDCoCArc3RhdGljIHZvaWQgX19hcm1fbHBhZV9mcmVlX3BndGFibGUoc3RydWN0 IGFybV9scGFlX2lvX3BndGFibGUgKmRhdGEsIGludCBsdmwsCj4+Pj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFybV9scGFlX2lvcHRlICpwdGVwKTsKPj4+PiAgwqAg c3RhdGljIGludCBhcm1fbHBhZV9pbml0X3B0ZShzdHJ1Y3QgYXJtX2xwYWVfaW9fcGd0YWJsZSAq ZGF0YSwKPj4+PiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVuc2lnbmVk IGxvbmcgaW92YSwgcGh5c19hZGRyX3QgcGFkZHIsCj4+Pj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBhcm1fbHBhZV9pb3B0ZSBwcm90LCBpbnQgbHZsLAo+Pj4+ICDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXJtX2xwYWVfaW9wdGUgKnB0ZXApCj4+ Pj4gIMKgIHsKPj4+PiAgwqDCoMKgwqDCoCBhcm1fbHBhZV9pb3B0ZSBwdGUgPSAqcHRlcDsKPj4+ PiArwqDCoMKgIHN0cnVjdCBpb19wZ3RhYmxlX2NmZyAqY2ZnID0gJmRhdGEtPmlvcC5jZmc7Cj4+ Pj4gIMKgIMKgwqDCoMKgwqAgaWYgKGlvcHRlX2xlYWYocHRlLCBsdmwsIGRhdGEtPmlvcC5mbXQp KSB7Cj4+Pj4gIMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBXZSByZXF1aXJlIGFuIHVubWFwIGZpcnN0 ICovCj4+Pj4gIMKgwqDCoMKgwqDCoMKgwqDCoCBXQVJOX09OKCFzZWxmdGVzdF9ydW5uaW5nKTsK Pj4+PiAgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAtRUVYSVNUOwo+Pj4+ICDCoMKgwqDCoMKg IH0gZWxzZSBpZiAoaW9wdGVfdHlwZShwdGUsIGx2bCkgPT0gQVJNX0xQQUVfUFRFX1RZUEVfVEFC TEUpIHsKPj4+PiAtwqDCoMKgwqDCoMKgwqAgLyoKPj4+PiAtwqDCoMKgwqDCoMKgwqDCoCAqIFdl IG5lZWQgdG8gdW5tYXAgYW5kIGZyZWUgdGhlIG9sZCB0YWJsZSBiZWZvcmUKPj4+PiAtwqDCoMKg wqDCoMKgwqDCoCAqIG92ZXJ3cml0aW5nIGl0IHdpdGggYSBibG9jayBlbnRyeS4KPj4+PiAtwqDC oMKgwqDCoMKgwqDCoCAqLwo+Pj4+ICDCoMKgwqDCoMKgwqDCoMKgwqAgYXJtX2xwYWVfaW9wdGUg KnRibHA7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHN0cnVjdCBpb19wZ3RhYmxlICppb3AgPSAmZGF0 YS0+aW9wOwo+Pj4+ICDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZV90IHN6ID0gQVJNX0xQQUVfQkxP Q0tfU0laRShsdmwsIGRhdGEpOwo+Pj4+ICDCoCAtwqDCoMKgwqDCoMKgwqAgdGJscCA9IHB0ZXAg LSBBUk1fTFBBRV9MVkxfSURYKGlvdmEsIGx2bCwgZGF0YSk7Cj4+Pj4gLcKgwqDCoMKgwqDCoMKg IGlmIChfX2FybV9scGFlX3VubWFwKGRhdGEsIE5VTEwsIGlvdmEsIHN6LCBsdmwsIHRibHApICE9 IHN6KSB7Cj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgV0FSTl9PTigxKTsKPj4+PiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPj4+PiArwqDCoMKgwqDCoMKgwqAg c3dpdGNoIChjZmctPmJibWwpIHsKPj4+PiArwqDCoMKgwqDCoMKgwqAgY2FzZSAwOgo+Pj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAq IFdlIG5lZWQgdG8gdW5tYXAgYW5kIGZyZWUgdGhlIG9sZCB0YWJsZSBiZWZvcmUKPj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgICogb3ZlcndyaXRpbmcgaXQgd2l0aCBhIGJsb2NrIGVudHJ5 Lgo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKi8KPj4+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCB0YmxwID0gcHRlcCAtIEFSTV9MUEFFX0xWTF9JRFgoaW92YSwgbHZsLCBkYXRhKTsK Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoX19hcm1fbHBhZV91bm1hcChkYXRhLCBO VUxMLCBpb3ZhLCBzeiwgbHZsLCB0YmxwKSAhPSBzeikgewo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgV0FSTl9PTigxKTsKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHJldHVybiAtRUlOVkFMOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4+PiArwqDCoMKgwqDCoMKgwqAgY2Fz ZSAxOgo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIF9fYXJtX2xwYWVfaW5pdF9wdGUoZGF0 YSwgcGFkZHIsIHByb3QsIGx2bCwgcHRlcCwgQVJNX0xQQUVfUFRFX25UKTsKPj4+PiArCj4+Pj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW9fcGd0YWJsZV90bGJfZmx1c2hfd2Fsayhpb3AsIGlv dmEsIHN6LCBBUk1fTFBBRV9HUkFOVUxFKGRhdGEpKTsKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCB0YmxwID0gaW9wdGVfZGVyZWYocHRlLCBkYXRhKTsKPj4+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBfX2FybV9scGFlX2ZyZWVfcGd0YWJsZShkYXRhLCBsdmwgKyAxLCB0YmxwKTsKPj4+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4+PiArwqDCoMKgwqDCoMKgwqAgY2Fz ZSAyOgo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIF9fYXJtX2xwYWVfaW5pdF9wdGUoZGF0 YSwgcGFkZHIsIHByb3QsIGx2bCwgcHRlcCwgMCk7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGlvX3BndGFibGVfdGxiX2ZsdXNoX3dhbGsoaW9wLCBpb3ZhLCBzeiwgQVJNX0xQ QUVfR1JBTlVMRShkYXRhKSk7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdGJscCA9IGlv cHRlX2RlcmVmKHB0ZSwgZGF0YSk7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgX19hcm1f bHBhZV9mcmVlX3BndGFibGUoZGF0YSwgbHZsICsgMSwgdGJscCk7Cj4+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgcmV0dXJuIDA7Cj4+Pgo+Pj4gU29ycnksIGJ1dCBJIHJlYWxseSBkb24ndCB1 bmRlcnN0YW5kIHdoYXQgeW91J3JlIHRyeWluZyB0byBkbyBoZXJlLiBUaGUgb2xkCj4+PiBjb2Rl IHVzZXMgQkJNIGZvciB0aGUgdGFibGUgLT4gYmxvY2sgcGF0aCBzbyB3ZSBkb24ndCBuZWVkIGFu eXRoaW5nIGV4dHJhCj4+PiBoZXJlLiBUaGUgZG9kZ3kgY2FzZSBpcyB3aGVuIHdlIHVubWFwIHBh cnQgb2YgYSBibG9jaywgYW5kIGVuZCB1cCBpbnN0YWxsaW5nCj4+PiBhIHRhYmxlIHZpYSBhcm1f bHBhZV9zcGxpdF9ibGtfdW5tYXAoKS4gV2UgY2FuJ3QgdXNlIEJCTSB0aGVyZSBiZWNhdXNlIHRo ZXJlCj4+PiBjb3VsZCBiZSBvbmdvaW5nIERNQSB0byBwYXJ0cyBvZiB0aGUgYmxvY2sgbWFwcGlu ZyB0aGF0IHdlIHdhbnQgdG8gcmVtYWluIGluCj4+PiBwbGFjZS4KPj4+Cj4+PiBBcmUgeW91IHNl ZWluZyBhIHByb2JsZW0gaW4gcHJhY3RpY2U/Cj4+Cj4+IFJpZ2h0LCBJIHdhcyB1bmRlciB0aGUg YXNzdW1wdGlvbiB0aGF0IHdlIGNvdWxkIGlnbm9yZSBCQk1MIGJlY2F1c2Ugd2Ugc2hvdWxkIG5l dmVyIGhhdmUgYSBsZWdpdGltYXRlIHJlYXNvbiB0byBzcGxpdCBibG9ja3MuIEknbSBjZXJ0YWlu bHkgbm90IGtlZW4gb24gcGlsaW5nIGFueSBtb3JlIGNvbXBsZXhpdHkgaW50byBzcGxpdF9ibGtf dW5tYXAsIGJlY2F1c2UgdGhlIElPTU1VIEFQSSBjbGVhcmx5IGRvZXNuJ3QgaGF2ZSBhIHdlbGwt ZGVmaW5lZCBiZWhhdmlvdXIgZm9yIHRoYXQgY2FzZSBhbnl3YXkgLSBzb21lIG90aGVyIGRyaXZl cnMgd2lsbCBqdXN0IHVubWFwIHRoZSBlbnRpcmUgYmxvY2ssIGFuZCBJSVJDIHRoZXJlIHdhcyBh IGhpbnQgc29tZXdoZXJlIGluIFZGSU8gdGhhdCBpdCBtaWdodCBhY3R1YWxseSBleHBlY3QgdGhh dCBiZWhhdmlvdXIuCj4gCj4gS1ZNIGhhcyB0aGlzIHVzYWdlIHNjZW5hcmlvLgoKQXMgZmFyIGFz IEknbSBhd2FyZSBLVk0gZG9lc24ndCBnbyBhbnl3aGVyZSBuZWFyIHRoZSBJT01NVSBBUEksIGRv ZXMgaXQ/CgpJZiB5b3UgbWVhbiBWRklPLCB0aGUgY29tbWVudCBzdGFydGluZyBhdCBsaW5lIDEx MTAgb2YgCnZmaW9faW9tbXVfdHlwZTEuYyBkaXNhZ3JlZXMsIGVzcGVjaWFsbHkgdGhlIHBhcnQg dGhhdCBleHBsaWNpdGx5IHNheXMgCiJVbm1hcCByZXF1ZXN0cyBtdXN0IGZ1bGx5IGNvdmVyIHBy ZXZpb3VzIG1hcHBpbmdzLiIKClJvYmluLgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJt LWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21h aWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=