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=-2.1 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, USER_AGENT_SANE_1 autolearn=no 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 065BDC433E3 for ; Mon, 15 Jun 2020 19:43:01 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id D2FF420714 for ; Mon, 15 Jun 2020 19:43:00 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="L2sUgJQO" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731411AbgFOTm4 (ORCPT ); Mon, 15 Jun 2020 15:42:56 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58398 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730913AbgFOTmz (ORCPT ); Mon, 15 Jun 2020 15:42:55 -0400 Received: from mail-pf1-x441.google.com (mail-pf1-x441.google.com [IPv6:2607:f8b0:4864:20::441]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 75A6CC061A0E; Mon, 15 Jun 2020 12:42:54 -0700 (PDT) Received: by mail-pf1-x441.google.com with SMTP id s23so8265516pfh.7; Mon, 15 Jun 2020 12:42:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=0qrQRoXABWjnKwQa7O+onv4TFfIuamL/7UM0/e+lKcY=; b=L2sUgJQOmXLIdpN/acBHO/x2Cs7rcGS5cLssbvpSCPQavY3CLsMPoxVRWpDQ4X3gg2 Q6EhXUvFvQYhYYYikWxkiO8jgo9sxSaLKxp0irclj3xWDXwHWzSmnmErDycvzIxS3G0i fKcDmGBbWHU5ZcS45ePpyoZ62Grc589q5VCS5LX8TwDSRLtIrtWycymbEQ0o3/Xb/FP4 K/IlsTc96LpXUjzuoz74MUtSgISWwunogcs9Kn7bx5EbyvWj8Dah2flMxF9A0IKyNFOe qylDtRWWQUxDgq9sjf9xcJLZWxo4W1z4ascb3zMs8UXv1cFkP939eIgwwnwwVCaEdeI6 WQqg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=0qrQRoXABWjnKwQa7O+onv4TFfIuamL/7UM0/e+lKcY=; b=X2ny6vDoe+7KIUVmK1lWnDte8x3yD3KPMryMY4HcAzUN6ZdZ1WoQixAW1YFz6CtXju Rkj60ldv0/DAyqz5qcxBLwBqjuVxoPorteYHEgYPoC5ZBYFbUdy/a8hJkjxyU6iNwsPU BRld8FZ4T8a/cJ7GalG5MdhoZ/MJQk1zARI171p2Tmgu7FZZjgQcQG7dnQB+bwwIXngG FTKJQL79XacsEmrqFJ8PqhxuNukq4boGomMxIzATTH2ixRhujCB2lcgnCZkhHM5zoOSp cHnfJvSaqH5+W4R//PnZ/nVQZ5eLO3t37MKNW/bJpAXg+crgLhWEa5sdeuiod9TO/szD VU3w== X-Gm-Message-State: AOAM5321NhYxSb4vfi8Diau057WeFlDMRKg7xcoXRe9Wn5VyoD8sX3zq qMz+lxc3pxWGAjqMc6MMGCE= X-Google-Smtp-Source: ABdhPJzd8NKZ4V1T8V4Nkdlh9ron23wWPpYk6qMRFJf5t5GVGxrIMoa3t6qMXRy8YkjSV+ietR9EQg== X-Received: by 2002:a63:546:: with SMTP id 67mr23612510pgf.364.1592250173912; Mon, 15 Jun 2020 12:42:53 -0700 (PDT) Received: from [10.230.188.43] ([192.19.223.252]) by smtp.gmail.com with ESMTPSA id n65sm14213758pfn.17.2020.06.15.12.42.51 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 15 Jun 2020 12:42:53 -0700 (PDT) Subject: Re: [PATCH v2] spi: bcm2835: Enable shared interrupt support To: Robin Murphy , Lukas Wunner Cc: Mark Brown , "moderated list:BROADCOM BCM2711/BCM2835 ARM ARCHITECTURE" , "open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS" , Scott Branden , Ray Jui , linux-kernel@vger.kernel.org, "open list:SPI SUBSYSTEM" , Rob Herring , "maintainer:BROADCOM BCM281XX/BCM11XXX/BCM216XX ARM ARCHITE..." , "moderated list:BROADCOM BCM2711/BCM2835 ARM ARCHITECTURE" , Martin Sperl , Nicolas Saenz Julienne References: <20200604212819.715-1-f.fainelli@gmail.com> <142d48ae-2725-1368-3e11-658449662371@arm.com> <20200605132037.GF5413@sirena.org.uk> <2e371a32-fb52-03a2-82e4-5733d9f139cc@arm.com> <06342e88-e130-ad7a-9f97-94f09156f868@arm.com> <20200608114148.4bau4mdcvwgf25ut@wunner.de> <3d4fd3f9-9bde-90a8-bef5-9fc97cc9b363@arm.com> From: Florian Fainelli Message-ID: <2e4a6c4b-857f-1000-e7fd-327b0800fb97@gmail.com> Date: Mon, 15 Jun 2020 12:42:50 -0700 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Firefox/68.0 Thunderbird/68.9.0 MIME-Version: 1.0 In-Reply-To: <3d4fd3f9-9bde-90a8-bef5-9fc97cc9b363@arm.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 8bit Sender: linux-spi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-spi@vger.kernel.org On 6/15/2020 12:09 PM, Robin Murphy wrote: > On 2020-06-08 12:41, Lukas Wunner wrote: >> On Mon, Jun 08, 2020 at 12:11:11PM +0100, Robin Murphy wrote: >>> And all in code that has at least one obvious inefficiency left on >>> the table either way. >> >> Care to submit a patch to overcome that inefficiency? > > I'll have a quick go, but without any way to measure performance impact > (or even test for correctness) I don't fancy going too deep based purely > on disassembly and ARM11 cycle timings. > >>> This thread truly epitomises Knuth's "premature optimisation" >>> quote... ;) >> >> The thread came about because it can be determined at compile time >> whether the interrupt is going to be shared: > > ...which is exactly my point - "because it can be" is anything but proof > that avoiding a trivial check makes enough measurable difference to > justify putting in the effort to do so. > >> On the BCM2835 (Raspberry Pi 1), CONFIG_ARCH_MULTI_V6 is set and this >> SoC doesn't have multiple bcm2835-spi instances, so no shared interrupt. >> >> The question is how to discern BCM2836/BCM2837 (Raspberry Pi 2/3), which >> do not have multiple instances, and BCM2711 (Raspberry Pi 4) which does. > > Hmm, how much relative importance does that have? On a 700MHz ARM11 it's > obviously desirable to spend as little time in the IRQ handler as > possible in order to have time left to do anything else, but on the > other SoCs even if the IRQ remains permanently asserted it can still > only consume 25% of the available CPU capacity, at which point the > impact of 2-3 cycles either way at 1GHz+ seems pretty much immeasurable. > >> The Raspberry Pi Foundation compiles BCM2711 kernels with >> CONFIG_ARM_LPAE=y, >> but Florian considered that kludgy as a discriminator and opted for >> runtime-detection via the compatible string instead.  If you've got >> a better idea please come forward. >> >> Is "optimize shared IRQ support away if IS_ENABLED(CONFIG_ARCH_MULTI_V6), >> else leave it in" the best we can do? > > In all honesty I'm starting to think it seriously might be :) Or how about this: we slightly re-structure the interrupt handler such that all possible interrupt conditions are explicitly handled and terminate with a return IRQ_HANDLED, and those which are not, including in the case of a "spurious" (because the interrupt was triggered for another SPI controller instance), then we finish the function with IRQ_NONE. This would not impact the performance for the BCM2835/36/37 which would still have a single controller/single interrupt line to handle. -- Florian 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=-2.0 required=3.0 tests=DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED,DKIM_VALID,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=no 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 4920AC433E1 for ; Mon, 15 Jun 2020 19:43:11 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 0E37A20714 for ; Mon, 15 Jun 2020 19:43:11 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="bBr+3L+g"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="L2sUgJQO" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 0E37A20714 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-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=bombadil.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: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=qUtY5IGoYeO/tEJ6C3zFLQzdDPW1blGXk7svgTGtjZA=; b=bBr+3L+gxKefjX 7Jtqq7Q5py4I5KfPWr9vZSqIjDXckr8HtnSS7IStlwqDeRSnCwCRAR3H/2839idAXv/dLN0v5GBp/ uuhG0lKbmnnFvWSodTTjbPUUTzPUvLmuDzi9QjYY/ikx99lizSsXQWcyVNS2xPEIiaNsNqDLac4gY fapEgTApcLSPr2MnSrQd3kEYpFjs3e6ruRMDENCMqIoCmt35kUAVLA1HsBYhPIxbtgqPzZ01XxswJ /po7mXPuMZIaQg4gnGWzHRk5IRPJbUpT4Sl+2UUm9Beoz33qMNZ/m8K0m7KzXAQHVZuzriZ7jaq63 mZpDXRM6t5W6NOL+om0A==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jkv0W-0007qG-5E; Mon, 15 Jun 2020 19:43:00 +0000 Received: from mail-pf1-x444.google.com ([2607:f8b0:4864:20::444]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jkv0S-0007p2-4B; Mon, 15 Jun 2020 19:42:57 +0000 Received: by mail-pf1-x444.google.com with SMTP id a127so8250364pfa.12; Mon, 15 Jun 2020 12:42:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=0qrQRoXABWjnKwQa7O+onv4TFfIuamL/7UM0/e+lKcY=; b=L2sUgJQOmXLIdpN/acBHO/x2Cs7rcGS5cLssbvpSCPQavY3CLsMPoxVRWpDQ4X3gg2 Q6EhXUvFvQYhYYYikWxkiO8jgo9sxSaLKxp0irclj3xWDXwHWzSmnmErDycvzIxS3G0i fKcDmGBbWHU5ZcS45ePpyoZ62Grc589q5VCS5LX8TwDSRLtIrtWycymbEQ0o3/Xb/FP4 K/IlsTc96LpXUjzuoz74MUtSgISWwunogcs9Kn7bx5EbyvWj8Dah2flMxF9A0IKyNFOe qylDtRWWQUxDgq9sjf9xcJLZWxo4W1z4ascb3zMs8UXv1cFkP939eIgwwnwwVCaEdeI6 WQqg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=0qrQRoXABWjnKwQa7O+onv4TFfIuamL/7UM0/e+lKcY=; b=AHTQjwM5CLYxklcsBMaYgRUKwkgiKkZ/8sV4zpbLZ6pwk+0xYZ75DIgxyxfwcBq3ei euoVZmtOJWc5+OzHNsWWeH2YU2bSnaZmclclAmUS1vIt8YBRbqyaAye5aOVxSC9hwoZR AAI3XdsjIc17uy8caXqrKAbDKX2GxL9PeiQGBRfSGTcXc1DEwJlkH3/ZDo05Ob6Lx/2T Br6stQuLzqKES+H24lrDqOVRsc+N/1ShKU9UnMekdcGbeeID8u1b91rMczmG/LHwklT+ oE/lu+HS0N9I18yiLKUlAT4Lb7lwWfw8YpABrJd/E0h9AfxQV5YUa9bnz0QIf0+NDTX5 2umQ== X-Gm-Message-State: AOAM533t9IdApMVwnkskyfWl2Kvhg/AzUZaPn0vW5kzy+vFMleHW8OvX +XR8mUqYQusA7WIae2R8lmg= X-Google-Smtp-Source: ABdhPJzd8NKZ4V1T8V4Nkdlh9ron23wWPpYk6qMRFJf5t5GVGxrIMoa3t6qMXRy8YkjSV+ietR9EQg== X-Received: by 2002:a63:546:: with SMTP id 67mr23612510pgf.364.1592250173912; Mon, 15 Jun 2020 12:42:53 -0700 (PDT) Received: from [10.230.188.43] ([192.19.223.252]) by smtp.gmail.com with ESMTPSA id n65sm14213758pfn.17.2020.06.15.12.42.51 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 15 Jun 2020 12:42:53 -0700 (PDT) Subject: Re: [PATCH v2] spi: bcm2835: Enable shared interrupt support To: Robin Murphy , Lukas Wunner References: <20200604212819.715-1-f.fainelli@gmail.com> <142d48ae-2725-1368-3e11-658449662371@arm.com> <20200605132037.GF5413@sirena.org.uk> <2e371a32-fb52-03a2-82e4-5733d9f139cc@arm.com> <06342e88-e130-ad7a-9f97-94f09156f868@arm.com> <20200608114148.4bau4mdcvwgf25ut@wunner.de> <3d4fd3f9-9bde-90a8-bef5-9fc97cc9b363@arm.com> From: Florian Fainelli Message-ID: <2e4a6c4b-857f-1000-e7fd-327b0800fb97@gmail.com> Date: Mon, 15 Jun 2020 12:42:50 -0700 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Firefox/68.0 Thunderbird/68.9.0 MIME-Version: 1.0 In-Reply-To: <3d4fd3f9-9bde-90a8-bef5-9fc97cc9b363@arm.com> Content-Language: en-US X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200615_124256_170543_E50E9365 X-CRM114-Status: GOOD ( 21.61 ) 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: "open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS" , Scott Branden , Ray Jui , linux-kernel@vger.kernel.org, Rob Herring , "open list:SPI SUBSYSTEM" , Nicolas Saenz Julienne , Mark Brown , "maintainer:BROADCOM BCM281XX/BCM11XXX/BCM216XX ARM ARCHITE..." , "moderated list:BROADCOM BCM2711/BCM2835 ARM ARCHITECTURE" , Martin Sperl , "moderated list:BROADCOM BCM2711/BCM2835 ARM ARCHITECTURE" Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org CgpPbiA2LzE1LzIwMjAgMTI6MDkgUE0sIFJvYmluIE11cnBoeSB3cm90ZToKPiBPbiAyMDIwLTA2 LTA4IDEyOjQxLCBMdWthcyBXdW5uZXIgd3JvdGU6Cj4+IE9uIE1vbiwgSnVuIDA4LCAyMDIwIGF0 IDEyOjExOjExUE0gKzAxMDAsIFJvYmluIE11cnBoeSB3cm90ZToKPj4+IEFuZCBhbGwgaW4gY29k ZSB0aGF0IGhhcyBhdCBsZWFzdCBvbmUgb2J2aW91cyBpbmVmZmljaWVuY3kgbGVmdCBvbgo+Pj4g dGhlIHRhYmxlIGVpdGhlciB3YXkuCj4+Cj4+IENhcmUgdG8gc3VibWl0IGEgcGF0Y2ggdG8gb3Zl cmNvbWUgdGhhdCBpbmVmZmljaWVuY3k/Cj4gCj4gSSdsbCBoYXZlIGEgcXVpY2sgZ28sIGJ1dCB3 aXRob3V0IGFueSB3YXkgdG8gbWVhc3VyZSBwZXJmb3JtYW5jZSBpbXBhY3QKPiAob3IgZXZlbiB0 ZXN0IGZvciBjb3JyZWN0bmVzcykgSSBkb24ndCBmYW5jeSBnb2luZyB0b28gZGVlcCBiYXNlZCBw dXJlbHkKPiBvbiBkaXNhc3NlbWJseSBhbmQgQVJNMTEgY3ljbGUgdGltaW5ncy4KPiAKPj4+IFRo aXMgdGhyZWFkIHRydWx5IGVwaXRvbWlzZXMgS251dGgncyAicHJlbWF0dXJlIG9wdGltaXNhdGlv biIKPj4+IHF1b3RlLi4uIDspCj4+Cj4+IFRoZSB0aHJlYWQgY2FtZSBhYm91dCBiZWNhdXNlIGl0 IGNhbiBiZSBkZXRlcm1pbmVkIGF0IGNvbXBpbGUgdGltZQo+PiB3aGV0aGVyIHRoZSBpbnRlcnJ1 cHQgaXMgZ29pbmcgdG8gYmUgc2hhcmVkOgo+IAo+IC4uLndoaWNoIGlzIGV4YWN0bHkgbXkgcG9p bnQgLSAiYmVjYXVzZSBpdCBjYW4gYmUiIGlzIGFueXRoaW5nIGJ1dCBwcm9vZgo+IHRoYXQgYXZv aWRpbmcgYSB0cml2aWFsIGNoZWNrIG1ha2VzIGVub3VnaCBtZWFzdXJhYmxlIGRpZmZlcmVuY2Ug dG8KPiBqdXN0aWZ5IHB1dHRpbmcgaW4gdGhlIGVmZm9ydCB0byBkbyBzby4KPiAKPj4gT24gdGhl IEJDTTI4MzUgKFJhc3BiZXJyeSBQaSAxKSwgQ09ORklHX0FSQ0hfTVVMVElfVjYgaXMgc2V0IGFu ZCB0aGlzCj4+IFNvQyBkb2Vzbid0IGhhdmUgbXVsdGlwbGUgYmNtMjgzNS1zcGkgaW5zdGFuY2Vz LCBzbyBubyBzaGFyZWQgaW50ZXJydXB0Lgo+Pgo+PiBUaGUgcXVlc3Rpb24gaXMgaG93IHRvIGRp c2Nlcm4gQkNNMjgzNi9CQ00yODM3IChSYXNwYmVycnkgUGkgMi8zKSwgd2hpY2gKPj4gZG8gbm90 IGhhdmUgbXVsdGlwbGUgaW5zdGFuY2VzLCBhbmQgQkNNMjcxMSAoUmFzcGJlcnJ5IFBpIDQpIHdo aWNoIGRvZXMuCj4gCj4gSG1tLCBob3cgbXVjaCByZWxhdGl2ZSBpbXBvcnRhbmNlIGRvZXMgdGhh dCBoYXZlPyBPbiBhIDcwME1IeiBBUk0xMSBpdCdzCj4gb2J2aW91c2x5IGRlc2lyYWJsZSB0byBz cGVuZCBhcyBsaXR0bGUgdGltZSBpbiB0aGUgSVJRIGhhbmRsZXIgYXMKPiBwb3NzaWJsZSBpbiBv cmRlciB0byBoYXZlIHRpbWUgbGVmdCB0byBkbyBhbnl0aGluZyBlbHNlLCBidXQgb24gdGhlCj4g b3RoZXIgU29DcyBldmVuIGlmIHRoZSBJUlEgcmVtYWlucyBwZXJtYW5lbnRseSBhc3NlcnRlZCBp dCBjYW4gc3RpbGwKPiBvbmx5IGNvbnN1bWUgMjUlIG9mIHRoZSBhdmFpbGFibGUgQ1BVIGNhcGFj aXR5LCBhdCB3aGljaCBwb2ludCB0aGUKPiBpbXBhY3Qgb2YgMi0zIGN5Y2xlcyBlaXRoZXIgd2F5 IGF0IDFHSHorIHNlZW1zIHByZXR0eSBtdWNoIGltbWVhc3VyYWJsZS4KPiAKPj4gVGhlIFJhc3Bi ZXJyeSBQaSBGb3VuZGF0aW9uIGNvbXBpbGVzIEJDTTI3MTEga2VybmVscyB3aXRoCj4+IENPTkZJ R19BUk1fTFBBRT15LAo+PiBidXQgRmxvcmlhbiBjb25zaWRlcmVkIHRoYXQga2x1ZGd5IGFzIGEg ZGlzY3JpbWluYXRvciBhbmQgb3B0ZWQgZm9yCj4+IHJ1bnRpbWUtZGV0ZWN0aW9uIHZpYSB0aGUg Y29tcGF0aWJsZSBzdHJpbmcgaW5zdGVhZC7CoCBJZiB5b3UndmUgZ290Cj4+IGEgYmV0dGVyIGlk ZWEgcGxlYXNlIGNvbWUgZm9yd2FyZC4KPj4KPj4gSXMgIm9wdGltaXplIHNoYXJlZCBJUlEgc3Vw cG9ydCBhd2F5IGlmIElTX0VOQUJMRUQoQ09ORklHX0FSQ0hfTVVMVElfVjYpLAo+PiBlbHNlIGxl YXZlIGl0IGluIiB0aGUgYmVzdCB3ZSBjYW4gZG8/Cj4gCj4gSW4gYWxsIGhvbmVzdHkgSSdtIHN0 YXJ0aW5nIHRvIHRoaW5rIGl0IHNlcmlvdXNseSBtaWdodCBiZSA6KQoKT3IgaG93IGFib3V0IHRo aXM6IHdlIHNsaWdodGx5IHJlLXN0cnVjdHVyZSB0aGUgaW50ZXJydXB0IGhhbmRsZXIgc3VjaAp0 aGF0IGFsbCBwb3NzaWJsZSBpbnRlcnJ1cHQgY29uZGl0aW9ucyBhcmUgZXhwbGljaXRseSBoYW5k bGVkIGFuZAp0ZXJtaW5hdGUgd2l0aCBhIHJldHVybiBJUlFfSEFORExFRCwgYW5kIHRob3NlIHdo aWNoIGFyZSBub3QsIGluY2x1ZGluZwppbiB0aGUgY2FzZSBvZiBhICJzcHVyaW91cyIgKGJlY2F1 c2UgdGhlIGludGVycnVwdCB3YXMgdHJpZ2dlcmVkIGZvcgphbm90aGVyIFNQSSBjb250cm9sbGVy IGluc3RhbmNlKSwgdGhlbiB3ZSBmaW5pc2ggdGhlIGZ1bmN0aW9uIHdpdGgKSVJRX05PTkUuIFRo aXMgd291bGQgbm90IGltcGFjdCB0aGUgcGVyZm9ybWFuY2UgZm9yIHRoZSBCQ00yODM1LzM2LzM3 CndoaWNoIHdvdWxkIHN0aWxsIGhhdmUgYSBzaW5nbGUgY29udHJvbGxlci9zaW5nbGUgaW50ZXJy dXB0IGxpbmUgdG8gaGFuZGxlLgotLSAKRmxvcmlhbgoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGlu dXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQu b3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=