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.3 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,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 43496C63798 for ; Sun, 29 Nov 2020 01:40:07 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 09AF020809 for ; Sun, 29 Nov 2020 01:40:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729311AbgK2BkB (ORCPT ); Sat, 28 Nov 2020 20:40:01 -0500 Received: from foss.arm.com ([217.140.110.172]:40062 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726472AbgK2BkB (ORCPT ); Sat, 28 Nov 2020 20:40:01 -0500 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 140E61FB; Sat, 28 Nov 2020 17:39:15 -0800 (PST) Received: from [192.168.2.22] (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 643A63F71F; Sat, 28 Nov 2020 17:39:13 -0800 (PST) Subject: Re: [RESEND PATCH 17/19] mmc: sunxi: add support for A100 mmc controller From: =?UTF-8?Q?Andr=c3=a9_Przywara?= To: Frank Lee , tiny.windzz@gmail.com Cc: Marek Vasut , Ulf Hansson , Wolfram Sang , linux-mmc@vger.kernel.org, linux-kernel@vger.kernel.org, Maxime Ripard , Douglas Anderson , Rui Miguel Silva , Chen-Yu Tsai , linux-arm-kernel@lists.infradead.org, Jernej Skrabec References: <65401815-cb2e-58ec-7653-f09d6a25804c@arm.com> Organization: ARM Ltd. Message-ID: <3cda0b82-81fe-1f1b-ae8b-609f525f64cb@arm.com> Date: Sun, 29 Nov 2020 01:38:57 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.12.0 MIME-Version: 1.0 In-Reply-To: <65401815-cb2e-58ec-7653-f09d6a25804c@arm.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 28/11/2020 19:56, André Przywara wrote: > On 10/11/2020 06:46, Frank Lee wrote: Hi, one more thing below ... >> From: Yangtao Li >> >> This patch adds support for A100 MMC controller, which use word address >> for internal dma. >> >> Signed-off-by: Yangtao Li >> --- >> drivers/mmc/host/sunxi-mmc.c | 28 +++++++++++++++++++++++++--- >> 1 file changed, 25 insertions(+), 3 deletions(-) >> >> diff --git a/drivers/mmc/host/sunxi-mmc.c b/drivers/mmc/host/sunxi-mmc.c >> index fc62773602ec..1518b64112b7 100644 >> --- a/drivers/mmc/host/sunxi-mmc.c >> +++ b/drivers/mmc/host/sunxi-mmc.c >> @@ -244,6 +244,7 @@ struct sunxi_idma_des { >> >> struct sunxi_mmc_cfg { >> u32 idma_des_size_bits; >> + u32 idma_des_shift; >> const struct sunxi_mmc_clk_delay *clk_delays; >> >> /* does the IP block support autocalibration? */ >> @@ -343,7 +344,7 @@ static int sunxi_mmc_init_host(struct sunxi_mmc_host *host) >> /* Enable CEATA support */ >> mmc_writel(host, REG_FUNS, SDXC_CEATA_ON); >> /* Set DMA descriptor list base address */ >> - mmc_writel(host, REG_DLBA, host->sg_dma); >> + mmc_writel(host, REG_DLBA, host->sg_dma >> host->cfg->idma_des_shift); >> >> rval = mmc_readl(host, REG_GCTRL); >> rval |= SDXC_INTERRUPT_ENABLE_BIT; >> @@ -373,8 +374,10 @@ static void sunxi_mmc_init_idma_des(struct sunxi_mmc_host *host, >> >> next_desc += sizeof(struct sunxi_idma_des); >> pdes[i].buf_addr_ptr1 = >> - cpu_to_le32(sg_dma_address(&data->sg[i])); >> - pdes[i].buf_addr_ptr2 = cpu_to_le32((u32)next_desc); >> + cpu_to_le32(sg_dma_address(&data->sg[i]) >> >> + host->cfg->idma_des_shift); >> + pdes[i].buf_addr_ptr2 = cpu_to_le32((u32)next_desc >> >> + host->cfg->idma_des_shift); > > I think you should cast after the shift, otherwise you lose the ability > to run above 4 GB. This won't be a problem at the moment, since we still > use the default 32-bit DMA mask, but might bite us later. > > Otherwise this patch looks fine, and works on the H616 as well. > > Cheers, > Andre > >> } >> >> pdes[0].config |= cpu_to_le32(SDXC_IDMAC_DES0_FD); >> @@ -1178,6 +1181,23 @@ static const struct sunxi_mmc_cfg sun50i_a64_emmc_cfg = { >> .needs_new_timings = true, >> }; >> >> +static const struct sunxi_mmc_cfg sun50i_a100_cfg = { >> + .idma_des_size_bits = 16, >> + .idma_des_shift = 2, >> + .clk_delays = NULL, >> + .can_calibrate = true, >> + .mask_data0 = true, >> + .needs_new_timings = true, >> +}; >> + >> +static const struct sunxi_mmc_cfg sun50i_a100_emmc_cfg = { >> + .idma_des_size_bits = 13, >> + .idma_des_shift = 2, Is that actually true? Don't know about the A100, but the H616 manual mentions that "SMHC2" deals with byte addresses, in contrast to the other two ones. So MMC2 would be compatible with the a64_emmc_cfg? Cheers, Andre >> + .clk_delays = NULL, >> + .can_calibrate = true, >> + .needs_new_timings = true, >> +}; >> + >> static const struct of_device_id sunxi_mmc_of_match[] = { >> { .compatible = "allwinner,sun4i-a10-mmc", .data = &sun4i_a10_cfg }, >> { .compatible = "allwinner,sun5i-a13-mmc", .data = &sun5i_a13_cfg }, >> @@ -1186,6 +1206,8 @@ static const struct of_device_id sunxi_mmc_of_match[] = { >> { .compatible = "allwinner,sun9i-a80-mmc", .data = &sun9i_a80_cfg }, >> { .compatible = "allwinner,sun50i-a64-mmc", .data = &sun50i_a64_cfg }, >> { .compatible = "allwinner,sun50i-a64-emmc", .data = &sun50i_a64_emmc_cfg }, >> + { .compatible = "allwinner,sun50i-a100-mmc", .data = &sun50i_a100_cfg }, >> + { .compatible = "allwinner,sun50i-a100-emmc", .data = &sun50i_a100_emmc_cfg }, >> { /* sentinel */ } >> }; >> MODULE_DEVICE_TABLE(of, sunxi_mmc_of_match); >> > 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.3 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, USER_AGENT_SANE_1 autolearn=ham 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 1DC78C63777 for ; Sun, 29 Nov 2020 01:42:00 +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 A89342084C for ; Sun, 29 Nov 2020 01:41:59 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="GkmBUVcO" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org A89342084C 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-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:References: To:From:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=8kAPjzsBqIZtiGbxgsP9PlQs8yhr58c3zV8yxjffY9M=; b=GkmBUVcOzeclqrY+51lMPT0MM kT14gP+yL09wu9O+Ev+qtd0WbWxxIm3GDomDUhD3cmhFHRRQ6MXKe83CSitmvfevD7Po65vGpI0C2 yEd3PXIqFdCRB3uAal6US19aekXrChBwAbjiaRiTUqDZrSqc5pwqjea0YAuvC8bJOBEYMDciHTFL8 UeqbzzO9uzaecp36faVr7ic7cfqIW9LTk4QFDIkdQ5ugkWtHuG/QCA/jYxpcm80a/c1T0S5pr1rch JueDFvnR0/wHEOa7/6cCBTadPMRzi8d3sMdeVzWmudwK+0h27OZIhdL6e8cbl5sOFEK0rpS2Wjv8M JB8GS2dgA==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kjBgY-0000g7-Iq; Sun, 29 Nov 2020 01:39:30 +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 1kjBgQ-0000fj-GQ for linux-arm-kernel@lists.infradead.org; Sun, 29 Nov 2020 01:39:23 +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 140E61FB; Sat, 28 Nov 2020 17:39:15 -0800 (PST) Received: from [192.168.2.22] (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 643A63F71F; Sat, 28 Nov 2020 17:39:13 -0800 (PST) Subject: Re: [RESEND PATCH 17/19] mmc: sunxi: add support for A100 mmc controller From: =?UTF-8?Q?Andr=c3=a9_Przywara?= To: Frank Lee , tiny.windzz@gmail.com References: <65401815-cb2e-58ec-7653-f09d6a25804c@arm.com> Organization: ARM Ltd. Message-ID: <3cda0b82-81fe-1f1b-ae8b-609f525f64cb@arm.com> Date: Sun, 29 Nov 2020 01:38:57 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.12.0 MIME-Version: 1.0 In-Reply-To: <65401815-cb2e-58ec-7653-f09d6a25804c@arm.com> Content-Language: en-GB X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20201128_203922_695382_5CE48030 X-CRM114-Status: GOOD ( 24.26 ) 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: Marek Vasut , Jernej Skrabec , Ulf Hansson , Rui Miguel Silva , linux-mmc@vger.kernel.org, linux-kernel@vger.kernel.org, Maxime Ripard , Douglas Anderson , Wolfram Sang , Chen-Yu Tsai , linux-arm-kernel@lists.infradead.org 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 T24gMjgvMTEvMjAyMCAxOTo1NiwgQW5kcsOpIFByenl3YXJhIHdyb3RlOgo+IE9uIDEwLzExLzIw MjAgMDY6NDYsIEZyYW5rIExlZSB3cm90ZToKCkhpLAoKb25lIG1vcmUgdGhpbmcgYmVsb3cgLi4u Cgo+PiBGcm9tOiBZYW5ndGFvIExpIDxmcmFua0BhbGx3aW5uZXJ0ZWNoLmNvbT4KPj4KPj4gVGhp cyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIEExMDAgTU1DIGNvbnRyb2xsZXIsIHdoaWNoIHVzZSB3 b3JkIGFkZHJlc3MKPj4gZm9yIGludGVybmFsIGRtYS4KPj4KPj4gU2lnbmVkLW9mZi1ieTogWWFu Z3RhbyBMaSA8ZnJhbmtAYWxsd2lubmVydGVjaC5jb20+Cj4+IC0tLQo+PiAgZHJpdmVycy9tbWMv aG9zdC9zdW54aS1tbWMuYyB8IDI4ICsrKysrKysrKysrKysrKysrKysrKysrKystLS0KPj4gIDEg ZmlsZSBjaGFuZ2VkLCAyNSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQo+Pgo+PiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zdW54aS1tbWMuYyBiL2RyaXZlcnMvbW1jL2hvc3Qv c3VueGktbW1jLmMKPj4gaW5kZXggZmM2Mjc3MzYwMmVjLi4xNTE4YjY0MTEyYjcgMTAwNjQ0Cj4+ IC0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvc3VueGktbW1jLmMKPj4gKysrIGIvZHJpdmVycy9tbWMv aG9zdC9zdW54aS1tbWMuYwo+PiBAQCAtMjQ0LDYgKzI0NCw3IEBAIHN0cnVjdCBzdW54aV9pZG1h X2RlcyB7Cj4+ICAKPj4gIHN0cnVjdCBzdW54aV9tbWNfY2ZnIHsKPj4gIAl1MzIgaWRtYV9kZXNf c2l6ZV9iaXRzOwo+PiArCXUzMiBpZG1hX2Rlc19zaGlmdDsKPj4gIAljb25zdCBzdHJ1Y3Qgc3Vu eGlfbW1jX2Nsa19kZWxheSAqY2xrX2RlbGF5czsKPj4gIAo+PiAgCS8qIGRvZXMgdGhlIElQIGJs b2NrIHN1cHBvcnQgYXV0b2NhbGlicmF0aW9uPyAqLwo+PiBAQCAtMzQzLDcgKzM0NCw3IEBAIHN0 YXRpYyBpbnQgc3VueGlfbW1jX2luaXRfaG9zdChzdHJ1Y3Qgc3VueGlfbW1jX2hvc3QgKmhvc3Qp Cj4+ICAJLyogRW5hYmxlIENFQVRBIHN1cHBvcnQgKi8KPj4gIAltbWNfd3JpdGVsKGhvc3QsIFJF R19GVU5TLCBTRFhDX0NFQVRBX09OKTsKPj4gIAkvKiBTZXQgRE1BIGRlc2NyaXB0b3IgbGlzdCBi YXNlIGFkZHJlc3MgKi8KPj4gLQltbWNfd3JpdGVsKGhvc3QsIFJFR19ETEJBLCBob3N0LT5zZ19k bWEpOwo+PiArCW1tY193cml0ZWwoaG9zdCwgUkVHX0RMQkEsIGhvc3QtPnNnX2RtYSA+PiBob3N0 LT5jZmctPmlkbWFfZGVzX3NoaWZ0KTsKPj4gIAo+PiAgCXJ2YWwgPSBtbWNfcmVhZGwoaG9zdCwg UkVHX0dDVFJMKTsKPj4gIAlydmFsIHw9IFNEWENfSU5URVJSVVBUX0VOQUJMRV9CSVQ7Cj4+IEBA IC0zNzMsOCArMzc0LDEwIEBAIHN0YXRpYyB2b2lkIHN1bnhpX21tY19pbml0X2lkbWFfZGVzKHN0 cnVjdCBzdW54aV9tbWNfaG9zdCAqaG9zdCwKPj4gIAo+PiAgCQluZXh0X2Rlc2MgKz0gc2l6ZW9m KHN0cnVjdCBzdW54aV9pZG1hX2Rlcyk7Cj4+ICAJCXBkZXNbaV0uYnVmX2FkZHJfcHRyMSA9Cj4+ IC0JCQljcHVfdG9fbGUzMihzZ19kbWFfYWRkcmVzcygmZGF0YS0+c2dbaV0pKTsKPj4gLQkJcGRl c1tpXS5idWZfYWRkcl9wdHIyID0gY3B1X3RvX2xlMzIoKHUzMiluZXh0X2Rlc2MpOwo+PiArCQkJ Y3B1X3RvX2xlMzIoc2dfZG1hX2FkZHJlc3MoJmRhdGEtPnNnW2ldKSA+Pgo+PiArCQkJCSAgICBo b3N0LT5jZmctPmlkbWFfZGVzX3NoaWZ0KTsKPj4gKwkJcGRlc1tpXS5idWZfYWRkcl9wdHIyID0g Y3B1X3RvX2xlMzIoKHUzMiluZXh0X2Rlc2MgPj4KPj4gKwkJCQkJCSAgICBob3N0LT5jZmctPmlk bWFfZGVzX3NoaWZ0KTsKPiAKPiBJIHRoaW5rIHlvdSBzaG91bGQgY2FzdCBhZnRlciB0aGUgc2hp ZnQsIG90aGVyd2lzZSB5b3UgbG9zZSB0aGUgYWJpbGl0eQo+IHRvIHJ1biBhYm92ZSA0IEdCLiBU aGlzIHdvbid0IGJlIGEgcHJvYmxlbSBhdCB0aGUgbW9tZW50LCBzaW5jZSB3ZSBzdGlsbAo+IHVz ZSB0aGUgZGVmYXVsdCAzMi1iaXQgRE1BIG1hc2ssIGJ1dCBtaWdodCBiaXRlIHVzIGxhdGVyLgo+ IAo+IE90aGVyd2lzZSB0aGlzIHBhdGNoIGxvb2tzIGZpbmUsIGFuZCB3b3JrcyBvbiB0aGUgSDYx NiBhcyB3ZWxsLgo+IAo+IENoZWVycywKPiBBbmRyZQo+IAo+PiAgCX0KPj4gIAo+PiAgCXBkZXNb MF0uY29uZmlnIHw9IGNwdV90b19sZTMyKFNEWENfSURNQUNfREVTMF9GRCk7Cj4+IEBAIC0xMTc4 LDYgKzExODEsMjMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzdW54aV9tbWNfY2ZnIHN1bjUwaV9h NjRfZW1tY19jZmcgPSB7Cj4+ICAJLm5lZWRzX25ld190aW1pbmdzID0gdHJ1ZSwKPj4gIH07Cj4+ ICAKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VueGlfbW1jX2NmZyBzdW41MGlfYTEwMF9jZmcg PSB7Cj4+ICsJLmlkbWFfZGVzX3NpemVfYml0cyA9IDE2LAo+PiArCS5pZG1hX2Rlc19zaGlmdCA9 IDIsCj4+ICsJLmNsa19kZWxheXMgPSBOVUxMLAo+PiArCS5jYW5fY2FsaWJyYXRlID0gdHJ1ZSwK Pj4gKwkubWFza19kYXRhMCA9IHRydWUsCj4+ICsJLm5lZWRzX25ld190aW1pbmdzID0gdHJ1ZSwK Pj4gK307Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VueGlfbW1jX2NmZyBzdW41MGlf YTEwMF9lbW1jX2NmZyA9IHsKPj4gKwkuaWRtYV9kZXNfc2l6ZV9iaXRzID0gMTMsCj4+ICsJLmlk bWFfZGVzX3NoaWZ0ID0gMiwKCklzIHRoYXQgYWN0dWFsbHkgdHJ1ZT8gRG9uJ3Qga25vdyBhYm91 dCB0aGUgQTEwMCwgYnV0IHRoZSBINjE2IG1hbnVhbAptZW50aW9ucyB0aGF0ICJTTUhDMiIgZGVh bHMgd2l0aCBieXRlIGFkZHJlc3NlcywgaW4gY29udHJhc3QgdG8gdGhlCm90aGVyIHR3byBvbmVz LiBTbyBNTUMyIHdvdWxkIGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgYTY0X2VtbWNfY2ZnPwoKQ2hl ZXJzLApBbmRyZQoKPj4gKwkuY2xrX2RlbGF5cyA9IE5VTEwsCj4+ICsJLmNhbl9jYWxpYnJhdGUg PSB0cnVlLAo+PiArCS5uZWVkc19uZXdfdGltaW5ncyA9IHRydWUsCj4+ICt9Owo+PiArCj4+ICBz dGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBzdW54aV9tbWNfb2ZfbWF0Y2hbXSA9IHsK Pj4gIAl7IC5jb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW40aS1hMTAtbW1jIiwgLmRhdGEgPSAm c3VuNGlfYTEwX2NmZyB9LAo+PiAgCXsgLmNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjVpLWEx My1tbWMiLCAuZGF0YSA9ICZzdW41aV9hMTNfY2ZnIH0sCj4+IEBAIC0xMTg2LDYgKzEyMDYsOCBA QCBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBzdW54aV9tbWNfb2ZfbWF0Y2hbXSA9 IHsKPj4gIAl7IC5jb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW45aS1hODAtbW1jIiwgLmRhdGEg PSAmc3VuOWlfYTgwX2NmZyB9LAo+PiAgCXsgLmNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjUw aS1hNjQtbW1jIiwgLmRhdGEgPSAmc3VuNTBpX2E2NF9jZmcgfSwKPj4gIAl7IC5jb21wYXRpYmxl ID0gImFsbHdpbm5lcixzdW41MGktYTY0LWVtbWMiLCAuZGF0YSA9ICZzdW41MGlfYTY0X2VtbWNf Y2ZnIH0sCj4+ICsJeyAuY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNTBpLWExMDAtbW1jIiwg LmRhdGEgPSAmc3VuNTBpX2ExMDBfY2ZnIH0sCj4+ICsJeyAuY29tcGF0aWJsZSA9ICJhbGx3aW5u ZXIsc3VuNTBpLWExMDAtZW1tYyIsIC5kYXRhID0gJnN1bjUwaV9hMTAwX2VtbWNfY2ZnIH0sCj4+ ICAJeyAvKiBzZW50aW5lbCAqLyB9Cj4+ICB9Owo+PiAgTU9EVUxFX0RFVklDRV9UQUJMRShvZiwg c3VueGlfbW1jX29mX21hdGNoKTsKPj4KPiAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1h cm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcv bWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==