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=-4.1 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_PASS,URIBL_BLOCKED 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 D6C8DC43219 for ; Fri, 3 May 2019 08:25:58 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 997EF205F4 for ; Fri, 3 May 2019 08:25:58 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=synopsys.com header.i=@synopsys.com header.b="RFVPOzXP"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=synopsys.onmicrosoft.com header.i=@synopsys.onmicrosoft.com header.b="Ji7DFkIs" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726402AbfECIZ5 (ORCPT ); Fri, 3 May 2019 04:25:57 -0400 Received: from smtprelay-out1.synopsys.com ([198.182.47.102]:37590 "EHLO smtprelay-out1.synopsys.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1725777AbfECIZ5 (ORCPT ); Fri, 3 May 2019 04:25:57 -0400 Received: from mailhost.synopsys.com (dc8-mailhost2.synopsys.com [10.13.135.210]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (No client certificate requested) by smtprelay-out1.synopsys.com (Postfix) with ESMTPS id 27DF5C00D4; Fri, 3 May 2019 08:25:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=synopsys.com; s=mail; t=1556871958; bh=TDDiLYFs1Tz29Y569eCVx9eKZJ50zXOYAYMtGl6RwPI=; h=From:To:CC:Subject:Date:References:From; b=RFVPOzXP4WCYRGY4caMK5fLv2J575zH2zKt2fB+L1DJsEcJpaAFEaFOvlHhKnwxhe ckerIIv+Syl8zNvawQXW9lNPX65+8QHLIyfBgOgtNXZkHkfXpQBMwUhw07gpJaaqqU xgWmx5g9IrLKPC3zTG8JSYXIvxlUmP1wywsgQSVU1/5hkTE6yRleOXVG8z7cEJD4FI pGs59cBkLcmjh1akeVVzk2ZDmvd8Z9jHlHhnz+ISypAO3BNU557c4eUObr6NYyr+34 nR+bdUzvxof3qkrWykdgN6sV8LafIGBltFyLwqLC60gkMSlg4cWlK6LJdQzetn20qT URLECllwWXyNA== Received: from us01wehtc1.internal.synopsys.com (us01wehtc1-vip.internal.synopsys.com [10.12.239.236]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mailhost.synopsys.com (Postfix) with ESMTPS id 97D9DA0068; Fri, 3 May 2019 08:25:50 +0000 (UTC) Received: from US01HYBRID2.internal.synopsys.com (10.15.246.24) by us01wehtc1.internal.synopsys.com (10.12.239.235) with Microsoft SMTP Server (TLS) id 14.3.408.0; Fri, 3 May 2019 01:25:50 -0700 Received: from NAM02-CY1-obe.outbound.protection.outlook.com (10.13.134.195) by mrs.synopsys.com (10.15.246.24) with Microsoft SMTP Server (TLS) id 14.3.408.0; Fri, 3 May 2019 01:25:49 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=synopsys.onmicrosoft.com; s=selector1-synopsys-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=YaXa2Joky9+Rybuhy2LSVpHEWORiNzbGDbbXpwgJmk4=; b=Ji7DFkIsOZECVY/Y0gj8nXzPQMTnrFsuq+Y5geZZvmhTlaRfzoRtPLdWOEXXPOyVr1ajHqd76Wg3z5T1c/qu3l9O68eZM6SBBu7q8nii/vQuUv2gJrwDnr5UOMlRgSjjA91dicg66lmE0AYe0Q10I9jXnNglsq2AdbK/m//YzR8= Received: from SN1PR12MB2431.namprd12.prod.outlook.com (52.132.195.146) by SN1PR12MB2384.namprd12.prod.outlook.com (52.132.194.153) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1856.10; Fri, 3 May 2019 08:25:48 +0000 Received: from SN1PR12MB2431.namprd12.prod.outlook.com ([fe80::1982:4b45:2adf:9a1f]) by SN1PR12MB2431.namprd12.prod.outlook.com ([fe80::1982:4b45:2adf:9a1f%4]) with mapi id 15.20.1856.012; Fri, 3 May 2019 08:25:48 +0000 From: Artur Petrosyan To: Doug Anderson , Minas Harutyunyan , Felipe Balbi , =?iso-8859-1?Q?Heiko_St=FCbner?= CC: Alan Stern , Alexandru M Stan , "open list:ARM/Rockchip SoC..." , William Wu , "linux-usb@vger.kernel.org" , Stefan Wahren , Randy Li , Chris , Matthias Kaehlcke , Ryan Case , Amelie Delaunay , "Julius Werner" , Dinh Nguyen , Elaine Zhang , Greg Kroah-Hartman , LKML Subject: Re: [PATCH v2 1/5] usb: dwc2: bus suspend/resume for hosts with DWC2_POWER_DOWN_PARAM_NONE Thread-Topic: [PATCH v2 1/5] usb: dwc2: bus suspend/resume for hosts with DWC2_POWER_DOWN_PARAM_NONE Thread-Index: AQHU9XvT/eL2bASAskajIQu3Y3ICkw== Date: Fri, 3 May 2019 08:25:48 +0000 Message-ID: References: <20190418001356.124334-1-dianders@chromium.org> <20190418001356.124334-2-dianders@chromium.org> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=arturp@synopsys.com; x-originating-ip: [84.53.141.185] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: db7b71c4-b286-4f76-57c9-08d6cfa0f21b x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600141)(711020)(4605104)(2017052603328)(7193020);SRVR:SN1PR12MB2384; x-ms-traffictypediagnostic: SN1PR12MB2384: x-ms-exchange-purlcount: 3 x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:1824; x-forefront-prvs: 0026334A56 x-forefront-antispam-report: SFV:NSPM;SFS:(10019020)(366004)(39850400004)(396003)(346002)(136003)(376002)(199004)(189003)(55674003)(14454004)(316002)(966005)(110136005)(54906003)(74316002)(305945005)(7416002)(7736002)(478600001)(25786009)(66946007)(86362001)(5660300002)(52536014)(99286004)(7696005)(64756008)(66476007)(66556008)(66446008)(256004)(14444005)(66066001)(73956011)(76116006)(91956017)(3846002)(6116002)(4326008)(2906002)(68736007)(186003)(102836004)(6246003)(26005)(6436002)(6306002)(53936002)(55016002)(9686003)(53546011)(6506007)(81156014)(229853002)(8936002)(33656002)(446003)(81166006)(8676002)(476003)(15650500001)(486006)(71190400001)(71200400001)(76176011);DIR:OUT;SFP:1102;SCL:1;SRVR:SN1PR12MB2384;H:SN1PR12MB2431.namprd12.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: synopsys.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: LjIFubHGOY6KJhsRBmBHCuyioyU7bQcdzKVPy2pzETPr8inP+scRjGGlhsqwtFxiG8fZcMeBhrJScUgzbEX4RCPPQradpc3Aa2LqqUIApS8cZ2QNwPeZ37YCpJXjIXdk9A98lfJKhM+OMC2Wy7eIB93LeWP8nfKTDNjUyxmoCfHmAsSlaUJm5UN2izdHKAkhfm5TTFWcso/FYUH5BMU8OqoBZQuLwJ9o5UMp/hWK0tXojVk3/upDRAIJiPNDocJnkykCC3E7M8NYIZfkXbSDPchozsSpCgLPCHTfiKvzNmfOeNnA1t+JCrv+FnZveOXuylzir69Hpx5TaZio07Wv5OSd7dYk0kDV8lwQtKY8axSDf7Esp2UThIkx/b3+DgViBQISbdfrFlVEm+OUzeKwpVcSylkBMkpm7x2lt4Wuwgk= Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: db7b71c4-b286-4f76-57c9-08d6cfa0f21b X-MS-Exchange-CrossTenant-originalarrivaltime: 03 May 2019 08:25:48.1117 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: c33c9f88-1eb7-4099-9700-16013fd9e8aa X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN1PR12MB2384 X-OriginatorOrg: synopsys.com Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 5/2/2019 03:58, Doug Anderson wrote:=0A= > Hi,=0A= > =0A= > =0A= > On Wed, Apr 17, 2019 at 5:15 PM Douglas Anderson = wrote:=0A= >>=0A= >> This is an attempt to rehash commit 0cf884e819e0 ("usb: dwc2: add bus=0A= >> suspend/resume for dwc2") on ToT. That commit was reverted in commit=0A= >> b0bb9bb6ce01 ("Revert "usb: dwc2: add bus suspend/resume for dwc2"")=0A= >> because apparently it broke the Altera SOCFPGA.=0A= >>=0A= >> With all the changes that have happened to dwc2 in the meantime, it's=0A= >> possible that the Altera SOCFPGA will just magically work with this=0A= >> change now. ...and it would be good to get bus suspend/resume=0A= >> implemented.=0A= >>=0A= >> This change is a forward port of one that's been living in the Chrome=0A= >> OS 3.14 kernel tree.=0A= >>=0A= >> Signed-off-by: Douglas Anderson =0A= >> ---=0A= >> This patch was last posted at:=0A= >>=0A= >> https://urldefense.proofpoint.com/v2/url?u=3Dhttps-3A__lkml.kernel.org_r= _1446237173-2D15263-2D1-2Dgit-2Dsend-2Demail-2Ddianders-40chromium.org&d=3D= DwIBaQ&c=3DDPL6_X_6JkXFx7AXWqB0tg&r=3D9hPBFKCJ_nBjJhGVrrlYOeOQjP_HlVzYqrC_D= 7niMJI&m=3D7rxT8EFX9mqUDtTL4P7iuzYNsYROe9rxHGCresSKPTg&s=3DlTaNUA2XIYPat417= fkd1A4Zpvb5eyYtTc1H_NIfW8Vw&e=3D=0A= >>=0A= >> ...and appears to have died the death of silence. Maybe it could get=0A= >> some bake time in linuxnext if we can't find any proactive testing?=0A= >>=0A= >> I will also freely admit that I don't know tons about the theory=0A= >> behind this patch. I'm mostly just re-hashing the original commit=0A= >> from Kever that was reverted since:=0A= >> * Turning on partial power down on rk3288 doesn't "just work". I=0A= >> don't get hotplug events. This is despite dwc2 auto-detecting that= =0A= >> we are power optimized.=0A= >> * If we don't do something like this commit we don't get into as low=0A= >> of a power mode.=0A= > =0A= > OK, I spent the day digging more into this patch to confirm that it's=0A= > really the right thing to do. ...and it still seems to be.=0A= > =0A= > First off: I'm pretty sure the above sentence "If we don't do=0A= > something like this commit we don't get into as low of a power mode."=0A= > is totally wrong. Luckily it's "after the cut" and not part of the=0A= > commit message. Specifically I did a bunch of power testing and I=0A= > couldn't find any instance saving power after this patch.=0A= > =0A= > ...but, then I looked more carefully at all the history of this=0A= > commit. I ended up at:=0A= > =0A= > https://urldefense.proofpoint.com/v2/url?u=3Dhttps-3A__chromium-2Dreview.= googlesource.com_c_chromiumos_third-5Fparty_kernel_-2B_306265_&d=3DDwIBaQ&c= =3DDPL6_X_6JkXFx7AXWqB0tg&r=3D9hPBFKCJ_nBjJhGVrrlYOeOQjP_HlVzYqrC_D7niMJI&m= =3D7rxT8EFX9mqUDtTL4P7iuzYNsYROe9rxHGCresSKPTg&s=3DLiyyIyaCPmr88nJeI7TCGtoJ= BFLRWir_reikYtAHHDw&e=3D=0A= Looking at this code review I see that this patch fixes whatever issues =0A= you have on Chrome OS 3.14. But your patch has landed on the top of =0A= latest Kernel version. With the latest version I think you would not =0A= have the regression issue.=0A= So you are fixing Chrome OS 3.14.=0A= =0A= > =0A= > ...where I said that this fixes a resume speed regression. More=0A= > details could be found at the linked bug, AKA:=0A= > =0A= > https://urldefense.proofpoint.com/v2/url?u=3Dhttps-3A__bugs.chromium.org_= p_chromium_issues_detail-3Fid-3D548336&d=3DDwIBaQ&c=3DDPL6_X_6JkXFx7AXWqB0t= g&r=3D9hPBFKCJ_nBjJhGVrrlYOeOQjP_HlVzYqrC_D7niMJI&m=3D7rxT8EFX9mqUDtTL4P7iu= zYNsYROe9rxHGCresSKPTg&s=3D7gK8ZGX2zZPqC98CDMhqxEY3Acm_TbYa3fpQjWtvexM&e=3D= =0A= > =0A= > ...but, sadly, I wasn't as verbose as I usually am and didn't describe=0A= > my exact testing setup. So I tried to reproduce. ...and I was able=0A= > to. I tested on an rk3288-veyron-jerry with an empty USB hub plugged=0A= > into the left port (the host port) and my "servo 2" debug board hooked=0A= > up to the right port. The "power_Resume" test in Chrome OS certainly=0A= > showed a regression in 3.14 when doing a suspend/resume cycle.=0A= > =0A= > =0A= > Digging into the logs in 3.14, before this patch I saw this in the logs:= =0A= > =0A= > usb 3-1: reset high-speed USB device number 2 using dwc2=0A= > usb 3-1.7: reset high-speed USB device number 3 using dwc2=0A= > =0A= > ...after this patch:=0A= > =0A= > usb 3-1: USB disconnect, device number 2=0A= > usb 3-1.7: USB disconnect, device number 3=0A= > usb 3-1: new high-speed USB device number 4 using dwc2=0A= > usb 3-1: New USB device found, idVendor=3D1a40, idProduct=3D0201, bcdDevi= ce=3D 1.00=0A= > usb 3-1: New USB device strings: Mfr=3D0, Product=3D1, SerialNumber=3D0= =0A= > usb 3-1: Product: USB 2.0 Hub [MTT]=0A= > usb 3-1.7: new high-speed USB device number 5 using dwc2=0A= > usb 3-1.7: New USB device found, idVendor=3D1a40, idProduct=3D0101, bcdDe= vice=3D 1.11=0A= > usb 3-1.7: New USB device strings: Mfr=3D0, Product=3D1, SerialNumber=3D0= =0A= > usb 3-1.7: Product: USB 2.0 Hub=0A= > =0A= > ...so basically my belief is that without this patch we're just sorta=0A= > leaving the device hanging and it get confused on resume. After this=0A= > patch we behave slightly better.=0A= > =0A= > I tested on 4.19 and found much the same. There:=0A= > =0A= > usb 2-1: reset high-speed USB device number 2 using dwc2=0A= > usb 2-1.7: reset high-speed USB device number 3 using dwc2=0A= > =0A= > vs.=0A= > =0A= > usb 2-1.7: USB disconnect, device number 3=0A= > usb 2-1: USB disconnect, device number 2=0A= > usb 2-1: new high-speed USB device number 4 using dwc2=0A= > usb 2-1: New USB device found, idVendor=3D1a40, idProduct=3D0201, bcdDevi= ce=3D 1.00=0A= > usb 2-1: New USB device strings: Mfr=3D0, Product=3D1, SerialNumber=3D0= =0A= > usb 2-1: Product: USB 2.0 Hub [MTT]=0A= > usb 2-1.7: new high-speed USB device number 5 using dwc2=0A= > usb 2-1.7: New USB device found, idVendor=3D1a40, idProduct=3D0101, bcdDe= vice=3D 1.11=0A= > usb 2-1.7: New USB device strings: Mfr=3D0, Product=3D1, SerialNumber=3D0= =0A= > usb 2-1.7: Product: USB 2.0 Hub=0A= > =0A= > =0A= > On 4.19 I didn't actually notice a the same resume time regression,=0A= > presumably because things are happening more asynchronously there (I=0A= > didn't confirm this). ...but in any case it seems like the right=0A= > thing to do to actually do the suspend.=0A= > =0A= > =0A= > I'll also re-iterate once more that I'm not claiming that my patch=0A= > helps with "partial power down". It merely makes the "power savings=0A= > disabled" case work more properly.=0A= > =0A= > =0A= > I'll also note that my patch is already in Felipe's "testing/next"=0A= > branch which I continue to believe is correct and good.=0A= > =0A= > -Doug=0A= > =0A= =0A= =0A= -- =0A= Regards,=0A= Artur=0A= From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [v2,1/5] usb: dwc2: bus suspend/resume for hosts with DWC2_POWER_DOWN_PARAM_NONE From: Artur Petrosyan Message-Id: Date: Fri, 3 May 2019 08:25:48 +0000 To: Doug Anderson , Minas Harutyunyan , Felipe Balbi , =?iso-8859-1?Q?Heiko_St=FCbner?= Cc: Alan Stern , Alexandru M Stan , "open list:ARM/Rockchip SoC..." , William Wu , "linux-usb@vger.kernel.org" , Stefan Wahren , Randy Li , Chris , Matthias Kaehlcke , Ryan Case , Amelie Delaunay , Julius Werner , Dinh Nguyen , Elaine Zhang , Greg Kroah-Hartman , LKML List-ID: T24gNS8yLzIwMTkgMDM6NTgsIERvdWcgQW5kZXJzb24gd3JvdGU6Cj4gSGksCj4gCj4gCj4gT24g V2VkLCBBcHIgMTcsIDIwMTkgYXQgNToxNSBQTSBEb3VnbGFzIEFuZGVyc29uIDxkaWFuZGVyc0Bj aHJvbWl1bS5vcmc+IHdyb3RlOgo+Pgo+PiBUaGlzIGlzIGFuIGF0dGVtcHQgdG8gcmVoYXNoIGNv bW1pdCAwY2Y4ODRlODE5ZTAgKCJ1c2I6IGR3YzI6IGFkZCBidXMKPj4gc3VzcGVuZC9yZXN1bWUg Zm9yIGR3YzIiKSBvbiBUb1QuICBUaGF0IGNvbW1pdCB3YXMgcmV2ZXJ0ZWQgaW4gY29tbWl0Cj4+ IGIwYmI5YmI2Y2UwMSAoIlJldmVydCAidXNiOiBkd2MyOiBhZGQgYnVzIHN1c3BlbmQvcmVzdW1l IGZvciBkd2MyIiIpCj4+IGJlY2F1c2UgYXBwYXJlbnRseSBpdCBicm9rZSB0aGUgQWx0ZXJhIFNP Q0ZQR0EuCj4+Cj4+IFdpdGggYWxsIHRoZSBjaGFuZ2VzIHRoYXQgaGF2ZSBoYXBwZW5lZCB0byBk d2MyIGluIHRoZSBtZWFudGltZSwgaXQncwo+PiBwb3NzaWJsZSB0aGF0IHRoZSBBbHRlcmEgU09D RlBHQSB3aWxsIGp1c3QgbWFnaWNhbGx5IHdvcmsgd2l0aCB0aGlzCj4+IGNoYW5nZSBub3cuICAu Li5hbmQgaXQgd291bGQgYmUgZ29vZCB0byBnZXQgYnVzIHN1c3BlbmQvcmVzdW1lCj4+IGltcGxl bWVudGVkLgo+Pgo+PiBUaGlzIGNoYW5nZSBpcyBhIGZvcndhcmQgcG9ydCBvZiBvbmUgdGhhdCdz IGJlZW4gbGl2aW5nIGluIHRoZSBDaHJvbWUKPj4gT1MgMy4xNCBrZXJuZWwgdHJlZS4KPj4KPj4g U2lnbmVkLW9mZi1ieTogRG91Z2xhcyBBbmRlcnNvbiA8ZGlhbmRlcnNAY2hyb21pdW0ub3JnPgo+ PiAtLS0KPj4gVGhpcyBwYXRjaCB3YXMgbGFzdCBwb3N0ZWQgYXQ6Cj4+Cj4+IGh0dHBzOi8vdXJs ZGVmZW5zZS5wcm9vZnBvaW50LmNvbS92Mi91cmw/dT1odHRwcy0zQV9fbGttbC5rZXJuZWwub3Jn X3JfMTQ0NjIzNzE3My0yRDE1MjYzLTJEMS0yRGdpdC0yRHNlbmQtMkRlbWFpbC0yRGRpYW5kZXJz LTQwY2hyb21pdW0ub3JnJmQ9RHdJQmFRJmM9RFBMNl9YXzZKa1hGeDdBWFdxQjB0ZyZyPTloUEJG S0NKX25CakpoR1ZycmxZT2VPUWpQX0hsVnpZcXJDX0Q3bmlNSkkmbT03cnhUOEVGWDltcVVEdFRM NFA3aXV6WU5zWVJPZTlyeEhHQ3Jlc1NLUFRnJnM9bFRhTlVBMlhJWVBhdDQxN2ZrZDFBNFpwdmI1 ZXlZdFRjMUhfTklmVzhWdyZlPQo+Pgo+PiAuLi5hbmQgYXBwZWFycyB0byBoYXZlIGRpZWQgdGhl IGRlYXRoIG9mIHNpbGVuY2UuICBNYXliZSBpdCBjb3VsZCBnZXQKPj4gc29tZSBiYWtlIHRpbWUg aW4gbGludXhuZXh0IGlmIHdlIGNhbid0IGZpbmQgYW55IHByb2FjdGl2ZSB0ZXN0aW5nPwo+Pgo+ PiBJIHdpbGwgYWxzbyBmcmVlbHkgYWRtaXQgdGhhdCBJIGRvbid0IGtub3cgdG9ucyBhYm91dCB0 aGUgdGhlb3J5Cj4+IGJlaGluZCB0aGlzIHBhdGNoLiAgSSdtIG1vc3RseSBqdXN0IHJlLWhhc2hp bmcgdGhlIG9yaWdpbmFsIGNvbW1pdAo+PiBmcm9tIEtldmVyIHRoYXQgd2FzIHJldmVydGVkIHNp bmNlOgo+PiAqIFR1cm5pbmcgb24gcGFydGlhbCBwb3dlciBkb3duIG9uIHJrMzI4OCBkb2Vzbid0 ICJqdXN0IHdvcmsiLiAgSQo+PiAgICBkb24ndCBnZXQgaG90cGx1ZyBldmVudHMuICBUaGlzIGlz IGRlc3BpdGUgZHdjMiBhdXRvLWRldGVjdGluZyB0aGF0Cj4+ICAgIHdlIGFyZSBwb3dlciBvcHRp bWl6ZWQuCj4+ICogSWYgd2UgZG9uJ3QgZG8gc29tZXRoaW5nIGxpa2UgdGhpcyBjb21taXQgd2Ug ZG9uJ3QgZ2V0IGludG8gYXMgbG93Cj4+ICAgIG9mIGEgcG93ZXIgbW9kZS4KPiAKPiBPSywgSSBz cGVudCB0aGUgZGF5IGRpZ2dpbmcgbW9yZSBpbnRvIHRoaXMgcGF0Y2ggdG8gY29uZmlybSB0aGF0 IGl0J3MKPiByZWFsbHkgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvLiAgLi4uYW5kIGl0IHN0aWxsIHNl ZW1zIHRvIGJlLgo+IAo+IEZpcnN0IG9mZjogSSdtIHByZXR0eSBzdXJlIHRoZSBhYm92ZSBzZW50 ZW5jZSAiSWYgd2UgZG9uJ3QgZG8KPiBzb21ldGhpbmcgbGlrZSB0aGlzIGNvbW1pdCB3ZSBkb24n dCBnZXQgaW50byBhcyBsb3cgb2YgYSBwb3dlciBtb2RlLiIKPiBpcyB0b3RhbGx5IHdyb25nLiAg THVja2lseSBpdCdzICJhZnRlciB0aGUgY3V0IiBhbmQgbm90IHBhcnQgb2YgdGhlCj4gY29tbWl0 IG1lc3NhZ2UuICBTcGVjaWZpY2FsbHkgSSBkaWQgYSBidW5jaCBvZiBwb3dlciB0ZXN0aW5nIGFu ZCBJCj4gY291bGRuJ3QgZmluZCBhbnkgaW5zdGFuY2Ugc2F2aW5nIHBvd2VyIGFmdGVyIHRoaXMg cGF0Y2guCj4gCj4gLi4uYnV0LCB0aGVuIEkgbG9va2VkIG1vcmUgY2FyZWZ1bGx5IGF0IGFsbCB0 aGUgaGlzdG9yeSBvZiB0aGlzCj4gY29tbWl0LiAgSSBlbmRlZCB1cCBhdDoKPiAKPiBodHRwczov L3VybGRlZmVuc2UucHJvb2Zwb2ludC5jb20vdjIvdXJsP3U9aHR0cHMtM0FfX2Nocm9taXVtLTJE cmV2aWV3Lmdvb2dsZXNvdXJjZS5jb21fY19jaHJvbWl1bW9zX3RoaXJkLTVGcGFydHlfa2VybmVs Xy0yQl8zMDYyNjVfJmQ9RHdJQmFRJmM9RFBMNl9YXzZKa1hGeDdBWFdxQjB0ZyZyPTloUEJGS0NK X25CakpoR1ZycmxZT2VPUWpQX0hsVnpZcXJDX0Q3bmlNSkkmbT03cnhUOEVGWDltcVVEdFRMNFA3 aXV6WU5zWVJPZTlyeEhHQ3Jlc1NLUFRnJnM9TGl5eUl5YUNQbXI4OG5KZUk3VENHdG9KQkZMUldp cl9yZWlrWXRBSEhEdyZlPQpMb29raW5nIGF0IHRoaXMgY29kZSByZXZpZXcgSSBzZWUgdGhhdCB0 aGlzIHBhdGNoIGZpeGVzIHdoYXRldmVyIGlzc3VlcyAKeW91IGhhdmUgb24gQ2hyb21lIE9TIDMu MTQuIEJ1dCB5b3VyIHBhdGNoIGhhcyBsYW5kZWQgb24gdGhlIHRvcCBvZiAKbGF0ZXN0IEtlcm5l bCB2ZXJzaW9uLiBXaXRoIHRoZSBsYXRlc3QgdmVyc2lvbiBJIHRoaW5rIHlvdSB3b3VsZCBub3Qg CmhhdmUgdGhlIHJlZ3Jlc3Npb24gaXNzdWUuClNvIHlvdSBhcmUgZml4aW5nIENocm9tZSBPUyAz LjE0LgoKPiAKPiAuLi53aGVyZSBJIHNhaWQgdGhhdCB0aGlzIGZpeGVzIGEgcmVzdW1lIHNwZWVk IHJlZ3Jlc3Npb24uICBNb3JlCj4gZGV0YWlscyBjb3VsZCBiZSBmb3VuZCBhdCB0aGUgbGlua2Vk IGJ1ZywgQUtBOgo+IAo+IGh0dHBzOi8vdXJsZGVmZW5zZS5wcm9vZnBvaW50LmNvbS92Mi91cmw/ dT1odHRwcy0zQV9fYnVncy5jaHJvbWl1bS5vcmdfcF9jaHJvbWl1bV9pc3N1ZXNfZGV0YWlsLTNG aWQtM0Q1NDgzMzYmZD1Ed0lCYVEmYz1EUEw2X1hfNkprWEZ4N0FYV3FCMHRnJnI9OWhQQkZLQ0pf bkJqSmhHVnJybFlPZU9RalBfSGxWellxckNfRDduaU1KSSZtPTdyeFQ4RUZYOW1xVUR0VEw0UDdp dXpZTnNZUk9lOXJ4SEdDcmVzU0tQVGcmcz03Z0s4WkdYMnpaUHFDOThDRE1ocXhFWTNBY21fVGJZ YTNmcFFqV3R2ZXhNJmU9Cj4gCj4gLi4uYnV0LCBzYWRseSwgSSB3YXNuJ3QgYXMgdmVyYm9zZSBh cyBJIHVzdWFsbHkgYW0gYW5kIGRpZG4ndCBkZXNjcmliZQo+IG15IGV4YWN0IHRlc3Rpbmcgc2V0 dXAuICBTbyBJIHRyaWVkIHRvIHJlcHJvZHVjZS4gIC4uLmFuZCBJIHdhcyBhYmxlCj4gdG8uICBJ IHRlc3RlZCBvbiBhbiByazMyODgtdmV5cm9uLWplcnJ5IHdpdGggYW4gZW1wdHkgVVNCIGh1YiBw bHVnZ2VkCj4gaW50byB0aGUgbGVmdCBwb3J0ICh0aGUgaG9zdCBwb3J0KSBhbmQgbXkgInNlcnZv IDIiIGRlYnVnIGJvYXJkIGhvb2tlZAo+IHVwIHRvIHRoZSByaWdodCBwb3J0LiAgVGhlICJwb3dl cl9SZXN1bWUiIHRlc3QgaW4gQ2hyb21lIE9TIGNlcnRhaW5seQo+IHNob3dlZCBhIHJlZ3Jlc3Np b24gaW4gMy4xNCB3aGVuIGRvaW5nIGEgc3VzcGVuZC9yZXN1bWUgY3ljbGUuCj4gCj4gCj4gRGln Z2luZyBpbnRvIHRoZSBsb2dzIGluIDMuMTQsIGJlZm9yZSB0aGlzIHBhdGNoIEkgc2F3IHRoaXMg aW4gdGhlIGxvZ3M6Cj4gCj4gdXNiIDMtMTogcmVzZXQgaGlnaC1zcGVlZCBVU0IgZGV2aWNlIG51 bWJlciAyIHVzaW5nIGR3YzIKPiB1c2IgMy0xLjc6IHJlc2V0IGhpZ2gtc3BlZWQgVVNCIGRldmlj ZSBudW1iZXIgMyB1c2luZyBkd2MyCj4gCj4gLi4uYWZ0ZXIgdGhpcyBwYXRjaDoKPiAKPiB1c2Ig My0xOiBVU0IgZGlzY29ubmVjdCwgZGV2aWNlIG51bWJlciAyCj4gdXNiIDMtMS43OiBVU0IgZGlz Y29ubmVjdCwgZGV2aWNlIG51bWJlciAzCj4gdXNiIDMtMTogbmV3IGhpZ2gtc3BlZWQgVVNCIGRl dmljZSBudW1iZXIgNCB1c2luZyBkd2MyCj4gdXNiIDMtMTogTmV3IFVTQiBkZXZpY2UgZm91bmQs IGlkVmVuZG9yPTFhNDAsIGlkUHJvZHVjdD0wMjAxLCBiY2REZXZpY2U9IDEuMDAKPiB1c2IgMy0x OiBOZXcgVVNCIGRldmljZSBzdHJpbmdzOiBNZnI9MCwgUHJvZHVjdD0xLCBTZXJpYWxOdW1iZXI9 MAo+IHVzYiAzLTE6IFByb2R1Y3Q6IFVTQiAyLjAgSHViIFtNVFRdCj4gdXNiIDMtMS43OiBuZXcg aGlnaC1zcGVlZCBVU0IgZGV2aWNlIG51bWJlciA1IHVzaW5nIGR3YzIKPiB1c2IgMy0xLjc6IE5l dyBVU0IgZGV2aWNlIGZvdW5kLCBpZFZlbmRvcj0xYTQwLCBpZFByb2R1Y3Q9MDEwMSwgYmNkRGV2 aWNlPSAxLjExCj4gdXNiIDMtMS43OiBOZXcgVVNCIGRldmljZSBzdHJpbmdzOiBNZnI9MCwgUHJv ZHVjdD0xLCBTZXJpYWxOdW1iZXI9MAo+IHVzYiAzLTEuNzogUHJvZHVjdDogVVNCIDIuMCBIdWIK PiAKPiAuLi5zbyBiYXNpY2FsbHkgbXkgYmVsaWVmIGlzIHRoYXQgd2l0aG91dCB0aGlzIHBhdGNo IHdlJ3JlIGp1c3Qgc29ydGEKPiBsZWF2aW5nIHRoZSBkZXZpY2UgaGFuZ2luZyBhbmQgaXQgZ2V0 IGNvbmZ1c2VkIG9uIHJlc3VtZS4gIEFmdGVyIHRoaXMKPiBwYXRjaCB3ZSBiZWhhdmUgc2xpZ2h0 bHkgYmV0dGVyLgo+IAo+IEkgdGVzdGVkIG9uIDQuMTkgYW5kIGZvdW5kIG11Y2ggdGhlIHNhbWUu ICBUaGVyZToKPiAKPiB1c2IgMi0xOiByZXNldCBoaWdoLXNwZWVkIFVTQiBkZXZpY2UgbnVtYmVy IDIgdXNpbmcgZHdjMgo+IHVzYiAyLTEuNzogcmVzZXQgaGlnaC1zcGVlZCBVU0IgZGV2aWNlIG51 bWJlciAzIHVzaW5nIGR3YzIKPiAKPiB2cy4KPiAKPiB1c2IgMi0xLjc6IFVTQiBkaXNjb25uZWN0 LCBkZXZpY2UgbnVtYmVyIDMKPiB1c2IgMi0xOiBVU0IgZGlzY29ubmVjdCwgZGV2aWNlIG51bWJl ciAyCj4gdXNiIDItMTogbmV3IGhpZ2gtc3BlZWQgVVNCIGRldmljZSBudW1iZXIgNCB1c2luZyBk d2MyCj4gdXNiIDItMTogTmV3IFVTQiBkZXZpY2UgZm91bmQsIGlkVmVuZG9yPTFhNDAsIGlkUHJv ZHVjdD0wMjAxLCBiY2REZXZpY2U9IDEuMDAKPiB1c2IgMi0xOiBOZXcgVVNCIGRldmljZSBzdHJp bmdzOiBNZnI9MCwgUHJvZHVjdD0xLCBTZXJpYWxOdW1iZXI9MAo+IHVzYiAyLTE6IFByb2R1Y3Q6 IFVTQiAyLjAgSHViIFtNVFRdCj4gdXNiIDItMS43OiBuZXcgaGlnaC1zcGVlZCBVU0IgZGV2aWNl IG51bWJlciA1IHVzaW5nIGR3YzIKPiB1c2IgMi0xLjc6IE5ldyBVU0IgZGV2aWNlIGZvdW5kLCBp ZFZlbmRvcj0xYTQwLCBpZFByb2R1Y3Q9MDEwMSwgYmNkRGV2aWNlPSAxLjExCj4gdXNiIDItMS43 OiBOZXcgVVNCIGRldmljZSBzdHJpbmdzOiBNZnI9MCwgUHJvZHVjdD0xLCBTZXJpYWxOdW1iZXI9 MAo+IHVzYiAyLTEuNzogUHJvZHVjdDogVVNCIDIuMCBIdWIKPiAKPiAKPiBPbiA0LjE5IEkgZGlk bid0IGFjdHVhbGx5IG5vdGljZSBhIHRoZSBzYW1lIHJlc3VtZSB0aW1lIHJlZ3Jlc3Npb24sCj4g cHJlc3VtYWJseSBiZWNhdXNlIHRoaW5ncyBhcmUgaGFwcGVuaW5nIG1vcmUgYXN5bmNocm9ub3Vz bHkgdGhlcmUgKEkKPiBkaWRuJ3QgY29uZmlybSB0aGlzKS4gIC4uLmJ1dCBpbiBhbnkgY2FzZSBp dCBzZWVtcyBsaWtlIHRoZSByaWdodAo+IHRoaW5nIHRvIGRvIHRvIGFjdHVhbGx5IGRvIHRoZSBz dXNwZW5kLgo+IAo+IAo+IEknbGwgYWxzbyByZS1pdGVyYXRlIG9uY2UgbW9yZSB0aGF0IEknbSBu b3QgY2xhaW1pbmcgdGhhdCBteSBwYXRjaAo+IGhlbHBzIHdpdGggInBhcnRpYWwgcG93ZXIgZG93 biIuICBJdCBtZXJlbHkgbWFrZXMgdGhlICJwb3dlciBzYXZpbmdzCj4gZGlzYWJsZWQiIGNhc2Ug d29yayBtb3JlIHByb3Blcmx5Lgo+IAo+IAo+IEknbGwgYWxzbyBub3RlIHRoYXQgbXkgcGF0Y2gg aXMgYWxyZWFkeSBpbiBGZWxpcGUncyAidGVzdGluZy9uZXh0Igo+IGJyYW5jaCB3aGljaCBJIGNv bnRpbnVlIHRvIGJlbGlldmUgaXMgY29ycmVjdCBhbmQgZ29vZC4KPiAKPiAtRG91Zwo+Cg==