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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3A2CFC77B72 for ; Fri, 14 Apr 2023 23:14:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229799AbjDNXOW (ORCPT ); Fri, 14 Apr 2023 19:14:22 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42568 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229450AbjDNXOT (ORCPT ); Fri, 14 Apr 2023 19:14:19 -0400 Received: from mail-vs1-xe29.google.com (mail-vs1-xe29.google.com [IPv6:2607:f8b0:4864:20::e29]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CFEA230D8; Fri, 14 Apr 2023 16:14:14 -0700 (PDT) Received: by mail-vs1-xe29.google.com with SMTP id f10so6435157vsv.13; Fri, 14 Apr 2023 16:14:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1681514054; x=1684106054; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=w3KoqWEFOQErtfJ1mUHNd+4peLdmkbt18zhWyKIO3VU=; b=UUeZ1FlVobxdVDawxsaGCTLhs2wGIPZcn8by17G1yOIAzPa0sU4ChcIiC1WSYNbjSC j0/qQ1j4ugG2A4Mx7G1CHx2TViJ1zPly+Fp9tGnPJ0h+AGMDsiTX+kystbCZ97dLCypE Gg+G447QEZ1G4RydZnKj/va+QhcTve8fseSiTyU6xB3viP95PJ60Pjrwat05vIsAPGJL VCNwGwrwBXXKw/2FRJFEo9X8MXQHXhGm8rfJX1Hq+ZMVTepYK/AZ6/OQZqOccXBhOX6r GaIrVL3w+b877sy5cqZSxmbxPzcpmf4GUIUbQJb/B7GjsLg+5TUZMrjkfVRetMW24tBS 8Ggw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1681514054; x=1684106054; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=w3KoqWEFOQErtfJ1mUHNd+4peLdmkbt18zhWyKIO3VU=; b=PVeCcog0cpK964WPKlmx4Hr5twpQtxCX33PP4y5uYSoOyyHSvqAJ86TzzyQf99WYH7 f1r05g/NpjHVOcp5t3WqrdwnmFZVHOjJN9x62IZUDJ8BKPEMheXuPJjEqIgYmnCSeMOH A8lgcitjhGTaSi7XYGR6x/YhEv1a6QtBXJ0lCY0uHd4avicHRzaKhyQFUGws2iwcZ7Cr tehQFl/vgYd3R8PtNOqtclRZrMjrWQ6rqc/N0GHLC02zTOD/k+keRVp7qOlU8yUMNSJC oR70Kb3nui9CkTvIavPX5bNVt4INJ0qPY1BtnIO5rQm9COOpcydBHltaMzsaB+mnQREM ZBMA== X-Gm-Message-State: AAQBX9fjipkwoCnHbHPjWlVFP1PYhIKfv7tx33SmTUSMwHvuhTTnYr+M bId4CLMBkBGU1oqXhMOS1tZuH3QcAyrarFnrpUg= X-Google-Smtp-Source: AKy350bY+Rj1iBv3+I4DNMQl7Y0A6jOIUaTT7SrTg17WbxYSAT8/tn4nWscFldhdXk/dTv10vUqQr5rlXwCIItyaW10= X-Received: by 2002:a67:d514:0:b0:423:e2c4:351e with SMTP id l20-20020a67d514000000b00423e2c4351emr4145114vsj.6.1681514053897; Fri, 14 Apr 2023 16:14:13 -0700 (PDT) MIME-Version: 1.0 References: <20230411165919.23955-3-jim2101024@gmail.com> <20230414202720.GA215111@bhelgaas> In-Reply-To: <20230414202720.GA215111@bhelgaas> From: Jim Quinlan Date: Fri, 14 Apr 2023 19:14:02 -0400 Message-ID: Subject: Re: [PATCH v2 2/3] PCI: brcmstb: CLKREQ# accomodations of downstream device To: Bjorn Helgaas Cc: linux-pci@vger.kernel.org, Nicolas Saenz Julienne , Bjorn Helgaas , Lorenzo Pieralisi , Cyril Brulebois , Phil Elwell , bcm-kernel-feedback-list@broadcom.com, james.quinlan@broadcom.com, Florian Fainelli , Lorenzo Pieralisi , =?UTF-8?Q?Krzysztof_Wilczy=C5=84ski?= , Rob Herring , "moderated list:BROADCOM BCM2711/BCM2835 ARM ARCHITECTURE" , "moderated list:BROADCOM BCM2711/BCM2835 ARM ARCHITECTURE" , open list Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Apr 14, 2023 at 4:27=E2=80=AFPM Bjorn Helgaas = wrote: > > This subject line no verb. Can you add a leading verb to suggest what > this patch does? > > s/accomodations/accommodations/ > > On Tue, Apr 11, 2023 at 12:59:17PM -0400, Jim Quinlan wrote: > > The Broadcom STB/CM PCIe HW core, which is also used in RPi SOCs, must = be > > deliberately set by the probe() into one of three mutually exclusive mo= des: > > > > (a) No CLKREQ# expected or required, refclk is always available. > > (b) CLKREQ# is expected to be driven by downstream device when needed= . > > (c) Bidirectional CLKREQ# for L1SS capable devices. > > > > Previously, only (b) was supported by the driver, as almost all STB/CM > > boards operate in this mode. But now there is interest in activating L= 1SS > > power savings from STB/CM customers, and also interest in accomodating = mode > > (a) for designs such as the RPi CM4 with IO board. > > accommodating > > > The HW+driver is able to tell us when mode (a) mode is needed. But the= re > > is no easy way to tell if L1SS mode should be configured. In certain > > situations, getting this wrong may cause a panic during boot time. So = we > > rely on the DT prop "brcm,enable-l1ss" to tell us when mode (c) is desi= red. > > Using this mode only makes sense when the downstream device is L1SS-cap= able > > and the OS has been configured to activate L1SS > > (e.g. policy=3D=3Dpowersupersave). > > I'm really concerned about the user experience here. I assume users > do not want to edit the DT based on what device they plug in. They > shouldn't need to (and probably won't) know whether the device > supports L1SS. > > I hate kernel/module parameters, but I think even that would be better > then having to edit the DT. > > There's obviously a period of time when L1SS is supported but not yet > enabled, so I'm *guessing* the "OS has been configured to activate > L1SS" is not actually a requirement, and choosing (c) really just > opens the possibility that L1SS can be used? Yes. Before this patch series we had two panic scenarios: (a) Endpoint devices with no CLKREQ# connection (b) Endpoints that are L1SS-capable Even without the "brcm,enable-l1ss" property present, both (a) and (b) should be eliminated. The reason (b) is eliminated is because the RC driver now unadvertises RC L1SS by default; subsequently, Linux does not turn it on. So the default setting should be fine for all devices. For those folks who have L1SS capable devices and desire L1SS power savings, they can add the brcm,enable-l1ss property. But everyone should have functionality w/o doing anything. As I am typing this I realize that my comments and dev_info()s are not aligned with what I am saying so I will change them in V3. Sorry about the confusion. > > Would be nice to have a hint (maybe a line or two of the panic > message) to help users find the fix for a problem they're seeing.SS > > Obviously the ideal would be if we could use (c) in all cases, so I > assume that's where a panic might happen. What situation would that > be? An endpoint that doesn't support L1SS? One that supports L1SS > but it's not enabled? Maybe if L1SS isn't configured correctly, e.g., > LTR values programmed wrong? Let me test everything on Monday and get back to you before I make any statements. Regards, Jim Quinilan Broadcom STB > > Bjorn 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 AF8F9C77B72 for ; Fri, 14 Apr 2023 23:15:20 +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:Cc:To:Subject:Message-ID:Date:From: In-Reply-To:References:MIME-Version:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=zjC1jrejXXR6TS0CGcz2MuUsH62eqvTHOAihlYadbqc=; b=Y5u7oJ3ZqBEW47 7wzoYGXiQhjnr1KwvWpZ87N/oe/5/L7h9JuJ9pRUBfmjTuBsa7YY7TcdtP0LS03nVVvrQV+yhPa3j EiPmR1IFuS6e5fbAtvRyQeqSFjsiBv3brlIydcIbKCMhxY1tXqTqNcL3o3fNR3jMIedA/qgJYqVzd +zSd4ZvgX86DuMVxLIcK+YTXBDa52VuIrXoJpr4AnMhwnMmqHK5AzTAqeg9pLoN3r6okbfLa/AQm7 0RIkLxdnz2GYk2IZqGMzroRcX4dq45ksdtHba2s522R/pifQIzL7kw28JC44HLkRu3PpDtQpulOos 3tXpNLBvKlLNBdZXmR1A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1pnScX-00AhYP-2C; Fri, 14 Apr 2023 23:14:21 +0000 Received: from mail-vs1-xe2f.google.com ([2607:f8b0:4864:20::e2f]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1pnScU-00AhXY-1m; Fri, 14 Apr 2023 23:14:20 +0000 Received: by mail-vs1-xe2f.google.com with SMTP id i8so10693359vsv.4; Fri, 14 Apr 2023 16:14:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1681514054; x=1684106054; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=w3KoqWEFOQErtfJ1mUHNd+4peLdmkbt18zhWyKIO3VU=; b=UUeZ1FlVobxdVDawxsaGCTLhs2wGIPZcn8by17G1yOIAzPa0sU4ChcIiC1WSYNbjSC j0/qQ1j4ugG2A4Mx7G1CHx2TViJ1zPly+Fp9tGnPJ0h+AGMDsiTX+kystbCZ97dLCypE Gg+G447QEZ1G4RydZnKj/va+QhcTve8fseSiTyU6xB3viP95PJ60Pjrwat05vIsAPGJL VCNwGwrwBXXKw/2FRJFEo9X8MXQHXhGm8rfJX1Hq+ZMVTepYK/AZ6/OQZqOccXBhOX6r GaIrVL3w+b877sy5cqZSxmbxPzcpmf4GUIUbQJb/B7GjsLg+5TUZMrjkfVRetMW24tBS 8Ggw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1681514054; x=1684106054; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=w3KoqWEFOQErtfJ1mUHNd+4peLdmkbt18zhWyKIO3VU=; b=Rq+Du4Q9eTqD5Q3lCnplYfxlCY1zrBVUiEoMOZdKgHm2Jn9P4QqL0YSA3+p6rpnqfE HfWI3s5vqTqb2Yt7hibQzuVLIA3gpEDTqeFalk5UjPuLDfnogemwM4IjItVh2HHp4M2/ nJeHPRdDWWgxgHMY0FX2hMBMGZUPK4lpltHkKRYtLpSqj+TgqynaMvzWcab8k1u+j1Hx ph+ieSRBCtGEoSl1Z4xiP8p0SBznvULxAK/0tWp2goP9mfWENx7jH3bcra0ksPHJPkEx Y3QRtLgYEc/YxFpeg8GzKNJGLhWN4X9xIOKga99IKXs6uMZqtXqQiGrWu0mdPNJPsozX 7/dQ== X-Gm-Message-State: AAQBX9fB5jse9lQqgnUvr9+h/+v5U2RvPisG9zKkKRb1BL9yVaZfuw9l Nwgk1p9ZwlsB1feaDBiGnxIDFgjtEJk1YL0ql0Y= X-Google-Smtp-Source: AKy350bY+Rj1iBv3+I4DNMQl7Y0A6jOIUaTT7SrTg17WbxYSAT8/tn4nWscFldhdXk/dTv10vUqQr5rlXwCIItyaW10= X-Received: by 2002:a67:d514:0:b0:423:e2c4:351e with SMTP id l20-20020a67d514000000b00423e2c4351emr4145114vsj.6.1681514053897; Fri, 14 Apr 2023 16:14:13 -0700 (PDT) MIME-Version: 1.0 References: <20230411165919.23955-3-jim2101024@gmail.com> <20230414202720.GA215111@bhelgaas> In-Reply-To: <20230414202720.GA215111@bhelgaas> From: Jim Quinlan Date: Fri, 14 Apr 2023 19:14:02 -0400 Message-ID: Subject: Re: [PATCH v2 2/3] PCI: brcmstb: CLKREQ# accomodations of downstream device To: Bjorn Helgaas Cc: linux-pci@vger.kernel.org, Nicolas Saenz Julienne , Bjorn Helgaas , Lorenzo Pieralisi , Cyril Brulebois , Phil Elwell , bcm-kernel-feedback-list@broadcom.com, james.quinlan@broadcom.com, Florian Fainelli , Lorenzo Pieralisi , =?UTF-8?Q?Krzysztof_Wilczy=C5=84ski?= , Rob Herring , "moderated list:BROADCOM BCM2711/BCM2835 ARM ARCHITECTURE" , "moderated list:BROADCOM BCM2711/BCM2835 ARM ARCHITECTURE" , open list X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230414_161418_627783_E1BF39EF X-CRM114-Status: GOOD ( 31.01 ) 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 T24gRnJpLCBBcHIgMTQsIDIwMjMgYXQgNDoyN+KAr1BNIEJqb3JuIEhlbGdhYXMgPGhlbGdhYXNA a2VybmVsLm9yZz4gd3JvdGU6Cj4KPiBUaGlzIHN1YmplY3QgbGluZSBubyB2ZXJiLiAgQ2FuIHlv dSBhZGQgYSBsZWFkaW5nIHZlcmIgdG8gc3VnZ2VzdCB3aGF0Cj4gdGhpcyBwYXRjaCBkb2VzPwo+ Cj4gcy9hY2NvbW9kYXRpb25zL2FjY29tbW9kYXRpb25zLwo+Cj4gT24gVHVlLCBBcHIgMTEsIDIw MjMgYXQgMTI6NTk6MTdQTSAtMDQwMCwgSmltIFF1aW5sYW4gd3JvdGU6Cj4gPiBUaGUgQnJvYWRj b20gU1RCL0NNIFBDSWUgSFcgY29yZSwgd2hpY2ggaXMgYWxzbyB1c2VkIGluIFJQaSBTT0NzLCBt dXN0IGJlCj4gPiBkZWxpYmVyYXRlbHkgc2V0IGJ5IHRoZSBwcm9iZSgpIGludG8gb25lIG9mIHRo cmVlIG11dHVhbGx5IGV4Y2x1c2l2ZSBtb2RlczoKPiA+Cj4gPiAgIChhKSBObyBDTEtSRVEjIGV4 cGVjdGVkIG9yIHJlcXVpcmVkLCByZWZjbGsgaXMgYWx3YXlzIGF2YWlsYWJsZS4KPiA+ICAgKGIp IENMS1JFUSMgaXMgZXhwZWN0ZWQgdG8gYmUgZHJpdmVuIGJ5IGRvd25zdHJlYW0gZGV2aWNlIHdo ZW4gbmVlZGVkLgo+ID4gICAoYykgQmlkaXJlY3Rpb25hbCBDTEtSRVEjIGZvciBMMVNTIGNhcGFi bGUgZGV2aWNlcy4KPiA+Cj4gPiBQcmV2aW91c2x5LCBvbmx5IChiKSB3YXMgc3VwcG9ydGVkIGJ5 IHRoZSBkcml2ZXIsIGFzIGFsbW9zdCBhbGwgU1RCL0NNCj4gPiBib2FyZHMgb3BlcmF0ZSBpbiB0 aGlzIG1vZGUuICBCdXQgbm93IHRoZXJlIGlzIGludGVyZXN0IGluIGFjdGl2YXRpbmcgTDFTUwo+ ID4gcG93ZXIgc2F2aW5ncyBmcm9tIFNUQi9DTSBjdXN0b21lcnMsIGFuZCBhbHNvIGludGVyZXN0 IGluIGFjY29tb2RhdGluZyBtb2RlCj4gPiAoYSkgZm9yIGRlc2lnbnMgc3VjaCBhcyB0aGUgUlBp IENNNCB3aXRoIElPIGJvYXJkLgo+Cj4gYWNjb21tb2RhdGluZwo+Cj4gPiBUaGUgSFcrZHJpdmVy IGlzIGFibGUgdG8gdGVsbCB1cyB3aGVuIG1vZGUgKGEpIG1vZGUgaXMgbmVlZGVkLiAgQnV0IHRo ZXJlCj4gPiBpcyBubyBlYXN5IHdheSB0byB0ZWxsIGlmIEwxU1MgbW9kZSBzaG91bGQgYmUgY29u ZmlndXJlZC4gIEluIGNlcnRhaW4KPiA+IHNpdHVhdGlvbnMsIGdldHRpbmcgdGhpcyB3cm9uZyBt YXkgY2F1c2UgYSBwYW5pYyBkdXJpbmcgYm9vdCB0aW1lLiAgU28gd2UKPiA+IHJlbHkgb24gdGhl IERUIHByb3AgImJyY20sZW5hYmxlLWwxc3MiIHRvIHRlbGwgdXMgd2hlbiBtb2RlIChjKSBpcyBk ZXNpcmVkLgo+ID4gVXNpbmcgdGhpcyBtb2RlIG9ubHkgbWFrZXMgc2Vuc2Ugd2hlbiB0aGUgZG93 bnN0cmVhbSBkZXZpY2UgaXMgTDFTUy1jYXBhYmxlCj4gPiBhbmQgdGhlIE9TIGhhcyBiZWVuIGNv bmZpZ3VyZWQgdG8gYWN0aXZhdGUgTDFTUwo+ID4gKGUuZy4gcG9saWN5PT1wb3dlcnN1cGVyc2F2 ZSkuCj4KPiBJJ20gcmVhbGx5IGNvbmNlcm5lZCBhYm91dCB0aGUgdXNlciBleHBlcmllbmNlIGhl cmUuICBJIGFzc3VtZSB1c2Vycwo+IGRvIG5vdCB3YW50IHRvIGVkaXQgdGhlIERUIGJhc2VkIG9u IHdoYXQgZGV2aWNlIHRoZXkgcGx1ZyBpbi4gIFRoZXkKPiBzaG91bGRuJ3QgbmVlZCB0byAoYW5k IHByb2JhYmx5IHdvbid0KSBrbm93IHdoZXRoZXIgdGhlIGRldmljZQo+IHN1cHBvcnRzIEwxU1Mu Cj4KPiBJIGhhdGUga2VybmVsL21vZHVsZSBwYXJhbWV0ZXJzLCBidXQgSSB0aGluayBldmVuIHRo YXQgd291bGQgYmUgYmV0dGVyCj4gdGhlbiBoYXZpbmcgdG8gZWRpdCB0aGUgRFQuCj4KPiBUaGVy ZSdzIG9idmlvdXNseSBhIHBlcmlvZCBvZiB0aW1lIHdoZW4gTDFTUyBpcyBzdXBwb3J0ZWQgYnV0 IG5vdCB5ZXQKPiBlbmFibGVkLCBzbyBJJ20gKmd1ZXNzaW5nKiB0aGUgIk9TIGhhcyBiZWVuIGNv bmZpZ3VyZWQgdG8gYWN0aXZhdGUKPiBMMVNTIiBpcyBub3QgYWN0dWFsbHkgYSByZXF1aXJlbWVu dCwgYW5kIGNob29zaW5nIChjKSByZWFsbHkganVzdAo+IG9wZW5zIHRoZSBwb3NzaWJpbGl0eSB0 aGF0IEwxU1MgY2FuIGJlIHVzZWQ/CgpZZXMuICBCZWZvcmUgdGhpcyBwYXRjaCBzZXJpZXMgd2Ug aGFkIHR3byBwYW5pYyBzY2VuYXJpb3M6CgooYSkgRW5kcG9pbnQgZGV2aWNlcyB3aXRoIG5vIENM S1JFUSMgY29ubmVjdGlvbgooYikgRW5kcG9pbnRzIHRoYXQgYXJlIEwxU1MtY2FwYWJsZQoKRXZl biB3aXRob3V0ICB0aGUgImJyY20sZW5hYmxlLWwxc3MiIHByb3BlcnR5IHByZXNlbnQsIGJvdGgg KGEpIGFuZAooYikgc2hvdWxkIGJlIGVsaW1pbmF0ZWQuClRoZSByZWFzb24gKGIpIGlzIGVsaW1p bmF0ZWQgaXMgYmVjYXVzZSB0aGUgUkMgZHJpdmVyIG5vdyB1bmFkdmVydGlzZXMKIFJDIEwxU1Mg YnkgZGVmYXVsdDsgc3Vic2VxdWVudGx5LCBMaW51eCBkb2VzCm5vdCB0dXJuIGl0IG9uLiAgU28g dGhlIGRlZmF1bHQgc2V0dGluZyBzaG91bGQgYmUgZmluZSBmb3IgYWxsIGRldmljZXMuCgpGb3Ig dGhvc2UgZm9sa3Mgd2hvIGhhdmUgTDFTUyBjYXBhYmxlIGRldmljZXMgYW5kIGRlc2lyZSBMMVNT IHBvd2VyCnNhdmluZ3MsIHRoZXkgY2FuIGFkZAp0aGUgYnJjbSxlbmFibGUtbDFzcyBwcm9wZXJ0 eS4gIEJ1dCBldmVyeW9uZSBzaG91bGQgaGF2ZSBmdW5jdGlvbmFsaXR5CiB3L28gZG9pbmcgYW55 dGhpbmcuCgpBcyBJIGFtIHR5cGluZyB0aGlzIEkgcmVhbGl6ZSB0aGF0IG15IGNvbW1lbnRzIGFu ZCBkZXZfaW5mbygpcyAgYXJlIG5vdAphbGlnbmVkIHdpdGggd2hhdCBJIGFtIHNheWluZyBzbyBJ IHdpbGwgY2hhbmdlIHRoZW0gaW4gVjMuICBTb3JyeQphYm91dCB0aGUgY29uZnVzaW9uLgoKPgo+ IFdvdWxkIGJlIG5pY2UgdG8gaGF2ZSBhIGhpbnQgKG1heWJlIGEgbGluZSBvciB0d28gb2YgdGhl IHBhbmljCj4gbWVzc2FnZSkgdG8gaGVscCB1c2VycyBmaW5kIHRoZSBmaXggZm9yIGEgcHJvYmxl bSB0aGV5J3JlIHNlZWluZy5TUwo+Cj4gT2J2aW91c2x5IHRoZSBpZGVhbCB3b3VsZCBiZSBpZiB3 ZSBjb3VsZCB1c2UgKGMpIGluIGFsbCBjYXNlcywgc28gSQo+IGFzc3VtZSB0aGF0J3Mgd2hlcmUg YSBwYW5pYyBtaWdodCBoYXBwZW4uICBXaGF0IHNpdHVhdGlvbiB3b3VsZCB0aGF0Cj4gYmU/ICBB biBlbmRwb2ludCB0aGF0IGRvZXNuJ3Qgc3VwcG9ydCBMMVNTPyAgT25lIHRoYXQgc3VwcG9ydHMg TDFTUwo+IGJ1dCBpdCdzIG5vdCBlbmFibGVkPyAgTWF5YmUgaWYgTDFTUyBpc24ndCBjb25maWd1 cmVkIGNvcnJlY3RseSwgZS5nLiwKPiBMVFIgdmFsdWVzIHByb2dyYW1tZWQgd3Jvbmc/CgpMZXQg bWUgdGVzdCBldmVyeXRoaW5nIG9uIE1vbmRheSBhbmQgZ2V0IGJhY2sgdG8geW91IGJlZm9yZSBJ IG1ha2UgYW55CnN0YXRlbWVudHMuCgoKUmVnYXJkcywKSmltIFF1aW5pbGFuCkJyb2FkY29tIFNU QgoKPgo+IEJqb3JuCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3Rz LmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5m by9saW51eC1hcm0ta2VybmVsCg==