From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-yw1-f178.google.com (mail-yw1-f178.google.com [209.85.128.178]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 264FF12FF93; Tue, 9 Apr 2024 15:24:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.178 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712676279; cv=none; b=WJpBMfFKb+Zvm0Lx6liFmiXCi2LDAFXA+OlzYiDNXiJTVLRuWSVM6otyRoPO/oVdAK4Zrm8/Ldro4M+I/aLMkjQa5x2l6JRo/bVdvoSq7zGnim+TJItDo7tmUV3pTcTda6W4/nuoSiQ9GEQZFbB7UPeMhQigHqafvz2fL4VKJTA= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712676279; c=relaxed/simple; bh=85Dtdhs4cI7wMp4CVhZJsWIixGlTrtyaSva9NaNU/i4=; h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject: To:Cc:Content-Type; b=A1DRd2z8ogO/dipE6dGm4sxOZv8MVHxF6Q2TsgKge/iagCXGNZ952+pkZ4vCXaWr9T2uTLCjkkWzX4m59RPBCJn5xG8DvIyNNttZFw74rJGmoWHv3KSw7kg3ojZ+c5feE/JVwWc3SdWzRs6oawGVwrsYi5v+R85VCHt8lqgEsjI= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=linux-m68k.org; spf=pass smtp.mailfrom=gmail.com; arc=none smtp.client-ip=209.85.128.178 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=linux-m68k.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-yw1-f178.google.com with SMTP id 00721157ae682-615019cd427so49122097b3.3; Tue, 09 Apr 2024 08:24:37 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1712676276; x=1713281076; 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=lu5hD9VvS+qp+vhw7UeQVESAr0EzPRLUzVlLL7V9CRE=; b=vF5ySepFHb/RzAmOoTMn/+cuolBejnJuuf3JQk5ITQOaCkhguDfY0SliaDQkmVW0WA edEVF9BNhKfklfckElbxMoAOUMf0OqT63va6l8RqdbHwAOGZ2OSrGSAPL1+jJP7+Gk3l z60gKRxKIV30klC+I5Pp0HeKAqi2+9ItEvoAzzardD/9RW3WJDGnMhH9R8Y9k386UEGb NMaJ8aH9/+SSOG38QM1EQp7/f5oXYiquYs9FaHWkKf+ETtcgK7TO/rwIjT2o/Svtb7Cp vEYUxu/qkJTmhcPkLaiH6+JRSdMgK8ZZ8/BkhOxNL8jghfTi5gWLeUaX0PteEWH/BjA0 Pwyg== X-Forwarded-Encrypted: i=1; AJvYcCVtrR+VDEycDG0UsGRrruzKZAP7I/A0zg7gjlPwBqO0hqEa9E/Zm6R2E5ZpxHrjPmJ4E6C95bGP0LHku8Jb8AhQ/AfZSCT+RhKbdHDRFC6XJrLiX2sS3psZhveJB4gGBdQV1atphqMLE2Ct3jU3+NQ= X-Gm-Message-State: AOJu0YyUZPnvXWtpxBn/HbfJpNEPYmJuzPBJT2uJSY4/pCVxAK5tfCIU 3Bg9URjZHGJ4ht1jr1SM5rRd0cEPFKCvRIgxLrjgh4PTCbiL4pRFtVP+JAo9sLo= X-Google-Smtp-Source: AGHT+IG1cnrLl7tfsBBOIdsLlFA6/UdLeOLXuSll683s/hJa/CT5uqV2+sJU1/zA62dnxg6yc1hRsQ== X-Received: by 2002:a0d:df82:0:b0:614:42c2:278d with SMTP id i124-20020a0ddf82000000b0061442c2278dmr20175ywe.0.1712676275174; Tue, 09 Apr 2024 08:24:35 -0700 (PDT) Received: from mail-yb1-f180.google.com (mail-yb1-f180.google.com. [209.85.219.180]) by smtp.gmail.com with ESMTPSA id ho3-20020a05690c630300b0060a07fdf93bsm2208208ywb.134.2024.04.09.08.24.34 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 09 Apr 2024 08:24:34 -0700 (PDT) Received: by mail-yb1-f180.google.com with SMTP id 3f1490d57ef6-dcc80d6004bso5803357276.0; Tue, 09 Apr 2024 08:24:34 -0700 (PDT) X-Forwarded-Encrypted: i=1; AJvYcCW5KIXEl24dup6xUcnLf8LDIIfKGOxTFpttmBvRLfvdfrk6EkPZWzoBYakBSTpJNgZo7Btl93Z5ESE0viF8SL17C/FKbUEgBya3Vj/+Eg3PTsmkMoskimk1zZBTeOmGpXcXJqWzErECD+O/9/S0AGo= X-Received: by 2002:a25:b10a:0:b0:dcc:f3fe:19c with SMTP id g10-20020a25b10a000000b00dccf3fe019cmr53487ybj.59.1712676273820; Tue, 09 Apr 2024 08:24:33 -0700 (PDT) Precedence: bulk X-Mailing-List: linux-renesas-soc@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 References: <20240327-kms-kconfig-helpers-v3-0-eafee11b84b3@kernel.org> <87sezu97id.fsf@intel.com> <87edbe94ck.fsf@intel.com> In-Reply-To: <87edbe94ck.fsf@intel.com> From: Geert Uytterhoeven Date: Tue, 9 Apr 2024 17:24:21 +0200 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH v3 00/13] drm/display: Convert helpers Kconfig symbols to depends on To: Jani Nikula Cc: Maxime Ripard , Maarten Lankhorst , Thomas Zimmermann , David Airlie , Daniel Vetter , dri-devel@lists.freedesktop.org, Lucas De Marchi , kernel test robot , linux-renesas-soc@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kbuild Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Jani, On Tue, Apr 9, 2024 at 1:13=E2=80=AFPM Jani Nikula wrote: > On Tue, 09 Apr 2024, Geert Uytterhoeven wrote: > > On Tue, Apr 9, 2024 at 12:04=E2=80=AFPM Jani Nikula wrote: > >> On Tue, 09 Apr 2024, Geert Uytterhoeven wrote: > >> > The user should not need to know which helpers are needed for the dr= iver > >> > he is interested in. When a symbol selects another symbol, it shoul= d > >> > just make sure the dependencies of the target symbol are met. > >> > >> It's really not "just make sure". This leads to perpetual illegal > >> configurations, and duct tape fixes. Select should not be used for > >> visible symbols or symbols with dependencies [1]. > > > > In other words: none of these helpers should be visible... > > ...and should have no dependencies? :p Unless they do have dependencies. > >> What we'd need for usability is not more abuse of select, but rather 1= ) > >> warnings for selecting symbols with dependencies, and 2) a way to enab= le > > > > Kconfig already warns if dependencies of selected symbols are not met. > > But it does lead to cases where a builtin tries to use a symbol from a > module, failing at link time, not config time. Then I regularly see > patches trying to fix this with IS_REACHABLE(), making it a silent > runtime failure instead, when it should've been a config issue. If a symbol for a builtin selects a symbol for a module, the latter becomes builtin, too, so that does not cause such issues? You can get such issues when a boolean symbol depends on a tristate symbol... > >> a kconfig option with all its dependencies, recursively. This is what = we > >> lack. > > > > You cannot force-enable all dependencies of the target symbol, as some > > of these dependencies may be impossible to meet on the system you are > > configuring a kernel for. > > Surely kconfig should be able to figure out if they're possible or not. > > > The current proper way is to add these dependencies to the source > > symbol, which is what we have been doing everywhere else. Another > > solution may be to teach Kconfig to ignore any symbols that select a > > symbol with unmet dependencies. > > ... > > It seems like your main argument in favour of using select is that it's > more convenient for people who configure the kernel. Because the user > should be able to just enable a driver, and that would select everything > that's needed. But where do we draw the line? Then what qualifies for > "depends on"? Hard (platform and subsystem) dependencies. > Look at config DRM_I915 and where select abuse has lead us. Like, why > don't we just select DRM, PCI and X86 as well instead of depend. :p X86 and PCI are hard platform dependencies. DRM is a subsystem dependency. > A lot of things we have to select because it appears to generally be the > case that if some places select and some places depends on a symbol, > it'll lead to circular dependencies. True. So all library code (incl. helpers) should be selected, and not be used as a dependency. The user shouldn't be aware that the driver uses library code (or not). > Sure there may be a usability issue with using depends on. But the > proper fix isn't hacking in kconfig files, it's to fix the usability in > kconfig the tool UI. But nobody steps up, because at least I find the > kconfig source to be inpenetrable. I've tried many times, and given up. As long as Kconfig does not handle dependencies of selected symbols automatically, adding explicit dependencies to the origin symbols is the only workable solution. > I mean, if you want to enable a driver D, it could, at a minimum, show > you a tree of (possibly alternative) things you also need to enable. But And this series is actually making that harder, by turning all these selects of helpers into dependencies... > if the dependencies aren't there, you won't even see the config for > D. That's not something that should be "fixed" by abusing select in > kconfig files. I consider not seeing symbols when a hard dependency is not met as a good thing. If everything was visible all the time, you would have a very hard (well, harder than the current already-hard ;-) time configuring your kernel. Gr{oetje,eeting}s, Geert --=20 Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k= .org In personal conversations with technical people, I call myself a hacker. Bu= t when I'm talking to journalists I just say "programmer" or something like t= hat. -- Linus Torvalds 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 9B343C67861 for ; Tue, 9 Apr 2024 15:24:54 +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=BmpZGRSj8eg5LwCrDxnoH7mfxj0Us6ivheY5sf2XscE=; b=BR2vFWRiKNv+9I BrHHpanmxssL9wjSmaaXj/UdertBRThdRHdUPGE0cF0W26QLS+JJV7FEEIp7nZFYU0qAAwc7spBCr dpa3wXub9JLyeql6WP4zNoWIa17p1EflsG3HPH+cG+oF60XkXbhVLR5+RcQEMBkRG5WAfto2SUh9N YzoWDKhECYIvukgYh2vqxtMw3XPhAXX1hBTqbtyCOmIJGsXsU9caSS3562Pufc+vNmvBHaT9Uq+pj kV5yxzNHmXuYTBG4WG+CASE+I7midHPKfxj83cOZUsWw/eN/y6LtnRiJ+9LYtTAlm8OHXntqJ1EKk S90/lNPLMGsSfKI3g2Bg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1ruDKz-00000002h3j-24Gs; Tue, 09 Apr 2024 15:24:41 +0000 Received: from mail-yb1-f181.google.com ([209.85.219.181]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1ruDKw-00000002h25-1bXQ for linux-arm-kernel@lists.infradead.org; Tue, 09 Apr 2024 15:24:39 +0000 Received: by mail-yb1-f181.google.com with SMTP id 3f1490d57ef6-dd10ebcd702so5915595276.2 for ; Tue, 09 Apr 2024 08:24:37 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1712676275; x=1713281075; 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=lu5hD9VvS+qp+vhw7UeQVESAr0EzPRLUzVlLL7V9CRE=; b=oZYFUd0Va/vHzB9K4wkkL/EgXooNiBlCxo19ILQbsKVb3jQIW+0KHsfUd1eBDHMmuV mFxvItFjGwakqH6WHWBj7OR/ms5/b19SbbAWoVAcvXWMsqv2FYsUtZlMbYR1rsay96aE Uf1r0492BNUr8XfAx1ARspgHYmnlzCD+HnHDvV+It8xCemjI9CzeLYi/7twnCyfptPT9 1XRKxLSY/vZrSo7Py+YxgV6YmAhbeVGdQPYBdIS14wlq+EXj6FmHlUY3edYnX4SKCwRX abQ9ACJWJvwcdxZZMNlW5AWvk1mFuHm2UkfoMtVnhqBFSXZK9SzwniIRAEtOEsSM8MWJ QzPw== X-Forwarded-Encrypted: i=1; AJvYcCXa/aRZJ7KaEP9Av1iv9R6974JOUROIQA1mUo2/ntLB8Cv7i/9WrP3fagPiqm5rkgMsv0QdEiKheBrkO57dfwc1xsuLHNAd0Zs4rd7LmRgq7Ik4B1A= X-Gm-Message-State: AOJu0Yw/gk97oSYCgS6MAuBVlQ0KSvfZVwn2oSpk8Jndbfr8opqJJ1/N e1xuGHzcvjFJyj6SsAx7s0zMcrRzrCbUrf3RaHdrh99Ev3m35b3ctARXXT9XyT4= X-Google-Smtp-Source: AGHT+IGvtdYblpmrbiDI86dC6HvAEunxXSRZBJN6vLczqhvGY409smYxs2VsV7xJZTjidF9eRlpICg== X-Received: by 2002:a25:58c4:0:b0:dc7:47b7:9053 with SMTP id m187-20020a2558c4000000b00dc747b79053mr72060ybb.15.1712676274814; Tue, 09 Apr 2024 08:24:34 -0700 (PDT) Received: from mail-yb1-f180.google.com (mail-yb1-f180.google.com. [209.85.219.180]) by smtp.gmail.com with ESMTPSA id b8-20020a5b0788000000b00dcbbea79ffcsm1773817ybq.42.2024.04.09.08.24.34 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 09 Apr 2024 08:24:34 -0700 (PDT) Received: by mail-yb1-f180.google.com with SMTP id 3f1490d57ef6-dd10ebcd702so5915535276.2 for ; Tue, 09 Apr 2024 08:24:34 -0700 (PDT) X-Forwarded-Encrypted: i=1; AJvYcCUKUW11wdVk2wtHH+/hyI6ev8zsN0L4iv9wNHfbi15SZaHLF08jgFlUVcXsb/mE+nB/glBJmMhC+gJlNfJvd8NHujKlkkpwSv01JwmQJxRw7mN+wNQ= X-Received: by 2002:a25:b10a:0:b0:dcc:f3fe:19c with SMTP id g10-20020a25b10a000000b00dccf3fe019cmr53487ybj.59.1712676273820; Tue, 09 Apr 2024 08:24:33 -0700 (PDT) MIME-Version: 1.0 References: <20240327-kms-kconfig-helpers-v3-0-eafee11b84b3@kernel.org> <87sezu97id.fsf@intel.com> <87edbe94ck.fsf@intel.com> In-Reply-To: <87edbe94ck.fsf@intel.com> From: Geert Uytterhoeven Date: Tue, 9 Apr 2024 17:24:21 +0200 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH v3 00/13] drm/display: Convert helpers Kconfig symbols to depends on To: Jani Nikula Cc: Maxime Ripard , Maarten Lankhorst , Thomas Zimmermann , David Airlie , Daniel Vetter , dri-devel@lists.freedesktop.org, Lucas De Marchi , kernel test robot , linux-renesas-soc@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kbuild X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240409_082438_632864_CD68623D X-CRM114-Status: GOOD ( 50.35 ) 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 SGkgSmFuaSwKCk9uIFR1ZSwgQXByIDksIDIwMjQgYXQgMToxM+KAr1BNIEphbmkgTmlrdWxhIDxq YW5pLm5pa3VsYUBsaW51eC5pbnRlbC5jb20+IHdyb3RlOgo+IE9uIFR1ZSwgMDkgQXByIDIwMjQs IEdlZXJ0IFV5dHRlcmhvZXZlbiA8Z2VlcnRAbGludXgtbTY4ay5vcmc+IHdyb3RlOgo+ID4gT24g VHVlLCBBcHIgOSwgMjAyNCBhdCAxMjowNOKAr1BNIEphbmkgTmlrdWxhIDxqYW5pLm5pa3VsYUBs aW51eC5pbnRlbC5jb20+IHdyb3RlOgo+ID4+IE9uIFR1ZSwgMDkgQXByIDIwMjQsIEdlZXJ0IFV5 dHRlcmhvZXZlbiA8Z2VlcnRAbGludXgtbTY4ay5vcmc+IHdyb3RlOgo+ID4+ID4gVGhlIHVzZXIg c2hvdWxkIG5vdCBuZWVkIHRvIGtub3cgd2hpY2ggaGVscGVycyBhcmUgbmVlZGVkIGZvciB0aGUg ZHJpdmVyCj4gPj4gPiBoZSBpcyBpbnRlcmVzdGVkIGluLiAgV2hlbiBhIHN5bWJvbCBzZWxlY3Rz IGFub3RoZXIgc3ltYm9sLCBpdCBzaG91bGQKPiA+PiA+IGp1c3QgbWFrZSBzdXJlIHRoZSBkZXBl bmRlbmNpZXMgb2YgdGhlIHRhcmdldCBzeW1ib2wgYXJlIG1ldC4KPiA+Pgo+ID4+IEl0J3MgcmVh bGx5IG5vdCAianVzdCBtYWtlIHN1cmUiLiBUaGlzIGxlYWRzIHRvIHBlcnBldHVhbCBpbGxlZ2Fs Cj4gPj4gY29uZmlndXJhdGlvbnMsIGFuZCBkdWN0IHRhcGUgZml4ZXMuIFNlbGVjdCBzaG91bGQg bm90IGJlIHVzZWQgZm9yCj4gPj4gdmlzaWJsZSBzeW1ib2xzIG9yIHN5bWJvbHMgd2l0aCBkZXBl bmRlbmNpZXMgWzFdLgo+ID4KPiA+IEluIG90aGVyIHdvcmRzOiBub25lIG9mIHRoZXNlIGhlbHBl cnMgc2hvdWxkIGJlIHZpc2libGUuLi4KPgo+IC4uLmFuZCBzaG91bGQgaGF2ZSBubyBkZXBlbmRl bmNpZXM/IDpwCgpVbmxlc3MgdGhleSBkbyBoYXZlIGRlcGVuZGVuY2llcy4KCj4gPj4gV2hhdCB3 ZSdkIG5lZWQgZm9yIHVzYWJpbGl0eSBpcyBub3QgbW9yZSBhYnVzZSBvZiBzZWxlY3QsIGJ1dCBy YXRoZXIgMSkKPiA+PiB3YXJuaW5ncyBmb3Igc2VsZWN0aW5nIHN5bWJvbHMgd2l0aCBkZXBlbmRl bmNpZXMsIGFuZCAyKSBhIHdheSB0byBlbmFibGUKPiA+Cj4gPiBLY29uZmlnIGFscmVhZHkgd2Fy bnMgaWYgZGVwZW5kZW5jaWVzIG9mIHNlbGVjdGVkIHN5bWJvbHMgYXJlIG5vdCBtZXQuCj4KPiBC dXQgaXQgZG9lcyBsZWFkIHRvIGNhc2VzIHdoZXJlIGEgYnVpbHRpbiB0cmllcyB0byB1c2UgYSBz eW1ib2wgZnJvbSBhCj4gbW9kdWxlLCBmYWlsaW5nIGF0IGxpbmsgdGltZSwgbm90IGNvbmZpZyB0 aW1lLiBUaGVuIEkgcmVndWxhcmx5IHNlZQo+IHBhdGNoZXMgdHJ5aW5nIHRvIGZpeCB0aGlzIHdp dGggSVNfUkVBQ0hBQkxFKCksIG1ha2luZyBpdCBhIHNpbGVudAo+IHJ1bnRpbWUgZmFpbHVyZSBp bnN0ZWFkLCB3aGVuIGl0IHNob3VsZCd2ZSBiZWVuIGEgY29uZmlnIGlzc3VlLgoKSWYgYSBzeW1i b2wgZm9yIGEgYnVpbHRpbiBzZWxlY3RzIGEgc3ltYm9sIGZvciBhIG1vZHVsZSwgdGhlIGxhdHRl cgpiZWNvbWVzIGJ1aWx0aW4sIHRvbywgc28gdGhhdCBkb2VzIG5vdCBjYXVzZSBzdWNoIGlzc3Vl cz8KWW91IGNhbiBnZXQgc3VjaCBpc3N1ZXMgd2hlbiBhIGJvb2xlYW4gc3ltYm9sIGRlcGVuZHMg b24gYSB0cmlzdGF0ZQpzeW1ib2wuLi4KCj4gPj4gYSBrY29uZmlnIG9wdGlvbiB3aXRoIGFsbCBp dHMgZGVwZW5kZW5jaWVzLCByZWN1cnNpdmVseS4gVGhpcyBpcyB3aGF0IHdlCj4gPj4gbGFjay4K PiA+Cj4gPiBZb3UgY2Fubm90IGZvcmNlLWVuYWJsZSBhbGwgZGVwZW5kZW5jaWVzIG9mIHRoZSB0 YXJnZXQgc3ltYm9sLCBhcyBzb21lCj4gPiBvZiB0aGVzZSBkZXBlbmRlbmNpZXMgbWF5IGJlIGlt cG9zc2libGUgdG8gbWVldCBvbiB0aGUgc3lzdGVtIHlvdSBhcmUKPiA+IGNvbmZpZ3VyaW5nIGEg a2VybmVsIGZvci4KPgo+IFN1cmVseSBrY29uZmlnIHNob3VsZCBiZSBhYmxlIHRvIGZpZ3VyZSBv dXQgaWYgdGhleSdyZSBwb3NzaWJsZSBvciBub3QuCj4KPiA+IFRoZSBjdXJyZW50IHByb3BlciB3 YXkgaXMgdG8gYWRkIHRoZXNlIGRlcGVuZGVuY2llcyB0byB0aGUgc291cmNlCj4gPiBzeW1ib2ws IHdoaWNoIGlzIHdoYXQgd2UgaGF2ZSBiZWVuIGRvaW5nIGV2ZXJ5d2hlcmUgZWxzZS4gIEFub3Ro ZXIKPiA+IHNvbHV0aW9uIG1heSBiZSB0byB0ZWFjaCBLY29uZmlnIHRvIGlnbm9yZSBhbnkgc3lt Ym9scyB0aGF0IHNlbGVjdCBhCj4gPiBzeW1ib2wgd2l0aCB1bm1ldCBkZXBlbmRlbmNpZXMuCj4K PiAuLi4KPgo+IEl0IHNlZW1zIGxpa2UgeW91ciBtYWluIGFyZ3VtZW50IGluIGZhdm91ciBvZiB1 c2luZyBzZWxlY3QgaXMgdGhhdCBpdCdzCj4gbW9yZSBjb252ZW5pZW50IGZvciBwZW9wbGUgd2hv IGNvbmZpZ3VyZSB0aGUga2VybmVsLiBCZWNhdXNlIHRoZSB1c2VyCj4gc2hvdWxkIGJlIGFibGUg dG8ganVzdCBlbmFibGUgYSBkcml2ZXIsIGFuZCB0aGF0IHdvdWxkIHNlbGVjdCBldmVyeXRoaW5n Cj4gdGhhdCdzIG5lZWRlZC4gQnV0IHdoZXJlIGRvIHdlIGRyYXcgdGhlIGxpbmU/IFRoZW4gd2hh dCBxdWFsaWZpZXMgZm9yCj4gImRlcGVuZHMgb24iPwoKSGFyZCAocGxhdGZvcm0gYW5kIHN1YnN5 c3RlbSkgZGVwZW5kZW5jaWVzLgoKPiBMb29rIGF0IGNvbmZpZyBEUk1fSTkxNSBhbmQgd2hlcmUg c2VsZWN0IGFidXNlIGhhcyBsZWFkIHVzLiBMaWtlLCB3aHkKPiBkb24ndCB3ZSBqdXN0IHNlbGVj dCBEUk0sIFBDSSBhbmQgWDg2IGFzIHdlbGwgaW5zdGVhZCBvZiBkZXBlbmQuIDpwCgpYODYgYW5k IFBDSSBhcmUgaGFyZCBwbGF0Zm9ybSBkZXBlbmRlbmNpZXMuCkRSTSBpcyBhIHN1YnN5c3RlbSBk ZXBlbmRlbmN5LgoKPiBBIGxvdCBvZiB0aGluZ3Mgd2UgaGF2ZSB0byBzZWxlY3QgYmVjYXVzZSBp dCBhcHBlYXJzIHRvIGdlbmVyYWxseSBiZSB0aGUKPiBjYXNlIHRoYXQgaWYgc29tZSBwbGFjZXMg c2VsZWN0IGFuZCBzb21lIHBsYWNlcyBkZXBlbmRzIG9uIGEgc3ltYm9sLAo+IGl0J2xsIGxlYWQg dG8gY2lyY3VsYXIgZGVwZW5kZW5jaWVzLgoKVHJ1ZS4gIFNvIGFsbCBsaWJyYXJ5IGNvZGUgKGlu Y2wuIGhlbHBlcnMpIHNob3VsZCBiZSBzZWxlY3RlZCwgYW5kCm5vdCBiZSB1c2VkIGFzIGEgZGVw ZW5kZW5jeS4KVGhlIHVzZXIgc2hvdWxkbid0IGJlIGF3YXJlIHRoYXQgdGhlIGRyaXZlciB1c2Vz IGxpYnJhcnkgY29kZSAob3Igbm90KS4KCj4gU3VyZSB0aGVyZSBtYXkgYmUgYSB1c2FiaWxpdHkg aXNzdWUgd2l0aCB1c2luZyBkZXBlbmRzIG9uLiBCdXQgdGhlCj4gcHJvcGVyIGZpeCBpc24ndCBo YWNraW5nIGluIGtjb25maWcgZmlsZXMsIGl0J3MgdG8gZml4IHRoZSB1c2FiaWxpdHkgaW4KPiBr Y29uZmlnIHRoZSB0b29sIFVJLiBCdXQgbm9ib2R5IHN0ZXBzIHVwLCBiZWNhdXNlIGF0IGxlYXN0 IEkgZmluZCB0aGUKPiBrY29uZmlnIHNvdXJjZSB0byBiZSBpbnBlbmV0cmFibGUuIEkndmUgdHJp ZWQgbWFueSB0aW1lcywgYW5kIGdpdmVuIHVwLgoKQXMgbG9uZyBhcyBLY29uZmlnIGRvZXMgbm90 IGhhbmRsZSBkZXBlbmRlbmNpZXMgb2Ygc2VsZWN0ZWQgc3ltYm9scwphdXRvbWF0aWNhbGx5LCBh ZGRpbmcgZXhwbGljaXQgZGVwZW5kZW5jaWVzIHRvIHRoZSBvcmlnaW4gc3ltYm9scyBpcwp0aGUg b25seSB3b3JrYWJsZSBzb2x1dGlvbi4KCj4gSSBtZWFuLCBpZiB5b3Ugd2FudCB0byBlbmFibGUg YSBkcml2ZXIgRCwgaXQgY291bGQsIGF0IGEgbWluaW11bSwgc2hvdwo+IHlvdSBhIHRyZWUgb2Yg KHBvc3NpYmx5IGFsdGVybmF0aXZlKSB0aGluZ3MgeW91IGFsc28gbmVlZCB0byBlbmFibGUuIEJ1 dAoKQW5kIHRoaXMgc2VyaWVzIGlzIGFjdHVhbGx5IG1ha2luZyB0aGF0IGhhcmRlciwgYnkgdHVy bmluZyBhbGwgdGhlc2UKc2VsZWN0cyBvZiBoZWxwZXJzIGludG8gZGVwZW5kZW5jaWVzLi4uCgo+ IGlmIHRoZSBkZXBlbmRlbmNpZXMgYXJlbid0IHRoZXJlLCB5b3Ugd29uJ3QgZXZlbiBzZWUgdGhl IGNvbmZpZyBmb3IKPiBELiBUaGF0J3Mgbm90IHNvbWV0aGluZyB0aGF0IHNob3VsZCBiZSAiZml4 ZWQiIGJ5IGFidXNpbmcgc2VsZWN0IGluCj4ga2NvbmZpZyBmaWxlcy4KCkkgY29uc2lkZXIgbm90 IHNlZWluZyBzeW1ib2xzIHdoZW4gYSBoYXJkIGRlcGVuZGVuY3kgaXMgbm90IG1ldCBhcwphIGdv b2QgdGhpbmcuICBJZiBldmVyeXRoaW5nIHdhcyB2aXNpYmxlIGFsbCB0aGUgdGltZSwgeW91IHdv dWxkCmhhdmUgYSB2ZXJ5IGhhcmQgKHdlbGwsIGhhcmRlciB0aGFuIHRoZSBjdXJyZW50IGFscmVh ZHktaGFyZCA7LSkKdGltZSBjb25maWd1cmluZyB5b3VyIGtlcm5lbC4KCkdye29ldGplLGVldGlu Z31zLAoKICAgICAgICAgICAgICAgICAgICAgICAgR2VlcnQKCi0tIApHZWVydCBVeXR0ZXJob2V2 ZW4gLS0gVGhlcmUncyBsb3RzIG9mIExpbnV4IGJleW9uZCBpYTMyIC0tIGdlZXJ0QGxpbnV4LW02 OGsub3JnCgpJbiBwZXJzb25hbCBjb252ZXJzYXRpb25zIHdpdGggdGVjaG5pY2FsIHBlb3BsZSwg SSBjYWxsIG15c2VsZiBhIGhhY2tlci4gQnV0CndoZW4gSSdtIHRhbGtpbmcgdG8gam91cm5hbGlz dHMgSSBqdXN0IHNheSAicHJvZ3JhbW1lciIgb3Igc29tZXRoaW5nIGxpa2UgdGhhdC4KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAtLSBMaW51cyBUb3J2YWxkcwoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWls aW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0 cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=