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 gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (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 7C27A10F3DD9 for ; Sat, 28 Mar 2026 10:22:44 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 71BD110E415; Sat, 28 Mar 2026 10:22:40 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (1024-bit key; unprotected) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b="hYU4MBjk"; dkim-atps=neutral Received: from sender4-pp-f112.zoho.com (sender4-pp-f112.zoho.com [136.143.188.112]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0567110E1C5; Fri, 27 Mar 2026 12:56:34 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; t=1774616179; cv=none; d=zohomail.com; s=zohoarc; b=nrhJQcNU2St85zr7KW0VW77O0rvjPuIFsgi0f3RHLuq01R3pXJEeYUsQDtcuvZr/SlAD7bJYG7OMKTL4t3i+m69bvvJ0u6NAKpW5UThs9vJTi8fkJXOVZL+Ksgw1SoeMmFgLMRKb+jM0TiSiMgaEhVZ76X0O23g+O5H3UxXtIHA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774616179; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=9rZk3O9XtcgvBcy00N+ORbUqxZBMTrdkFnBuRIM06bI=; b=RiLu1f6xF46lhFrMPIJ8+LCZP1DjvY7YUR7IZQhn/d4AGGFfV/BeaO9+hlrlA4IkTc8AXYUHbrQKNC7Y9aWT+WS2A7rYiZO9tL/y7PLslKQJjeerZf3m4BARf7anBe/OG+EWt9IstJe+QY9KexW0GVTgr0q/bvBYlCGzHE58fpA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=nicolas.frattaroli@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1774616179; s=zohomail; d=collabora.com; i=nicolas.frattaroli@collabora.com; h=From:From:To:To:Cc:Cc:Subject:Subject:Date:Date:Message-ID:In-Reply-To:References:MIME-Version:Content-Transfer-Encoding:Content-Type:Message-Id:Reply-To; bh=9rZk3O9XtcgvBcy00N+ORbUqxZBMTrdkFnBuRIM06bI=; b=hYU4MBjkdSfxJmH/kKO/j7MNFTk9XtBpm41ookcZAIDnG353SOU0DAWhw/FagFR0 AmxyXQ1E79tKhpvXNtkgVz3GMmzGSc6UZOkL0HpMdPVL9MIhCTOB6f/U1SJ+liOwLpg 72BpbX2lR1jnhNBoBY+RhPXNy5J6gyEHCB9y3feQ= Received: by mx.zohomail.com with SMTPS id 17746161764209.309822167866628; Fri, 27 Mar 2026 05:56:16 -0700 (PDT) From: Nicolas Frattaroli To: Maxime Ripard , Ville =?UTF-8?B?U3lyasOkbMOk?= Cc: Harry Wentland , Leo Li , Rodrigo Siqueira , Alex Deucher , Christian =?UTF-8?B?S8O2bmln?= , David Airlie , Simona Vetter , Maarten Lankhorst , Thomas Zimmermann , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Sandy Huang , Heiko =?UTF-8?B?U3TDvGJuZXI=?= , Andy Yan , Jani Nikula , Rodrigo Vivi , Joonas Lahtinen , Tvrtko Ursulin , Dmitry Baryshkov , Sascha Hauer , Rob Herring , Jonathan Corbet , Shuah Khan , kernel@collabora.com, amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, linux-doc@vger.kernel.org, Werner Sembach , Andri Yngvason , Marius Vlad Subject: Re: [PATCH v11 03/22] drm: Add new general DRM property "color format" Date: Fri, 27 Mar 2026 13:56:06 +0100 Message-ID: <4153041.tdWV9SEqCh@workhorse> In-Reply-To: References: <20260324-color-format-v11-0-605559af4fb4@collabora.com> <20260326-pumpkin-goshawk-of-stamina-0ccb84@houat> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" X-Mailman-Approved-At: Sat, 28 Mar 2026 10:22:39 +0000 X-BeenThere: amd-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces@lists.freedesktop.org Sender: "amd-gfx" On Thursday, 26 March 2026 18:58:25 Central European Standard Time Ville Sy= rj=C3=A4l=C3=A4 wrote: > On Thu, Mar 26, 2026 at 06:02:47PM +0100, Maxime Ripard wrote: > > On Wed, Mar 25, 2026 at 08:43:15PM +0200, Ville Syrj=C3=A4l=C3=A4 wrote: > > > On Wed, Mar 25, 2026 at 03:56:58PM +0100, Maxime Ripard wrote: > > > > On Wed, Mar 25, 2026 at 01:03:07PM +0200, Ville Syrj=C3=A4l=C3=A4 w= rote: > > > > > On Wed, Mar 25, 2026 at 09:24:27AM +0100, Maxime Ripard wrote: > > > > > > On Tue, Mar 24, 2026 at 09:53:35PM +0200, Ville Syrj=C3=A4l=C3= =A4 wrote: > > > > > > > On Tue, Mar 24, 2026 at 08:10:11PM +0100, Nicolas Frattaroli = wrote: > > > > > > > > On Tuesday, 24 March 2026 18:00:45 Central European Standar= d Time Ville Syrj=C3=A4l=C3=A4 wrote: > > > > > > > > > On Tue, Mar 24, 2026 at 05:01:07PM +0100, Nicolas Frattar= oli wrote: > > > > > > > > > > +enum drm_connector_color_format { > > > > > > > > > > + /** > > > > > > > > > > + * @DRM_CONNECTOR_COLOR_FORMAT_AUTO: The driver or di= splay protocol > > > > > > > > > > + * helpers should pick a suitable color format. All i= mplementations of a > > > > > > > > > > + * specific display protocol must behave the same way= with "AUTO", but > > > > > > > > > > + * different display protocols do not necessarily hav= e the same "AUTO" > > > > > > > > > > + * semantics. > > > > > > > > > > + * > > > > > > > > > > + * For HDMI, "AUTO" picks RGB, but falls back to YCbC= r 4:2:0 if the > > > > > > > > > > + * bandwidth required for full-scale RGB is not avail= able, or the mode > > > > > > > > > > + * is YCbCr 4:2:0-only, as long as the mode and outpu= t both support > > > > > > > > > > + * YCbCr 4:2:0. > > > > > > > > > > + * > > > > > > > > > > + * For display protocols other than HDMI, the recursi= ve bridge chain > > > > > > > > > > + * format selection picks the first chain of bridge f= ormats that works, > > > > > > > > > > + * as has already been the case before the introducti= on of the "color > > > > > > > > > > + * format" property. Non-HDMI bridges should therefor= e either sort their > > > > > > > > > > + * bus output formats by preference, or agree on a un= ified auto format > > > > > > > > > > + * selection logic that's implemented in a common sta= te helper (like > > > > > > > > > > + * how HDMI does it). > > > > > > > > > > + */ > > > > > > > > > > + DRM_CONNECTOR_COLOR_FORMAT_AUTO =3D 0, > > > > > > > > > > + > > > > > > > > > > + /** > > > > > > > > > > + * @DRM_CONNECTOR_COLOR_FORMAT_RGB444: RGB output for= mat > > > > > > > > > > + */ > > > > > > > > > > + DRM_CONNECTOR_COLOR_FORMAT_RGB444, > > > > > > > > > > + > > > > > > > > > > + /** > > > > > > > > > > + * @DRM_CONNECTOR_COLOR_FORMAT_YCBCR444: YCbCr 4:4:4 = output format (ie. > > > > > > > > > > + * not subsampled) > > > > > > > > > > + */ > > > > > > > > > > + DRM_CONNECTOR_COLOR_FORMAT_YCBCR444, > > > > > > > > > > + > > > > > > > > > > + /** > > > > > > > > > > + * @DRM_CONNECTOR_COLOR_FORMAT_YCBCR422: YCbCr 4:2:2 = output format (ie. > > > > > > > > > > + * with horizontal subsampling) > > > > > > > > > > + */ > > > > > > > > > > + DRM_CONNECTOR_COLOR_FORMAT_YCBCR422, > > > > > > > > > > + > > > > > > > > > > + /** > > > > > > > > > > + * @DRM_CONNECTOR_COLOR_FORMAT_YCBCR420: YCbCr 4:2:0 = output format (ie. > > > > > > > > > > + * with horizontal and vertical subsampling) > > > > > > > > > > + */ > > > > > > > > > > + DRM_CONNECTOR_COLOR_FORMAT_YCBCR420, > > > > > > > > >=20 > > > > > > > > > Seems like this should document what the quantization ran= ge > > > > > > > > > should be for each format. > > > > > > > > >=20 > > > > > > > >=20 > > > > > > > > I don't think so? If you want per-component bit depth value= s, > > > > > > > > DRM_FORMAT_* defines would be the appropriate values to use= =2E This > > > > > > > > enum is more abstract than that, and is there to communicate > > > > > > > > YUV vs. RGB and chroma subsampling, with bit depth being ha= ndled > > > > > > > > by other properties. > > > > > > > >=20 > > > > > > > > If you mean the factor used for subsampling, then that'd on= ly be > > > > > > > > relevant if YCBCR410 was supported where one chroma plane i= sn't > > > > > > > > halved but quartered in resolution. I suspect 4:1:0 will ne= ver > > > > > > > > be added; no digital display protocol standard supports it = to my > > > > > > > > knowledge, and hopefully none ever will. > > > > > > >=20 > > > > > > > No, I mean the quantization range (16-235 vs. 0-255 etc). > > > > > > >=20 > > > > > > > The i915 behaviour is that YCbCr is always limited range, > > > > > > > RGB can either be full or limited range depending on the=20 > > > > > > > "Broadcast RGB" property and other related factors. > > > > > >=20 > > > > > > So far the HDMI state has both the format and quantization rang= e as > > > > > > different fields. I'm not sure we need to document the range in= the > > > > > > format field, maybe only mention it's not part of the format bu= t has a > > > > > > field of its own? > > > > >=20 > > > > > I think we only have it for RGB (on some drivers only?). For YCbCr > > > > > I think the assumption is limited range everywhere. > > > > >=20 > > > > > But I'm not really concerned about documenting struct members. > > > > > What I'm talking about is the *uapi* docs. Surely userspace > > > > > will want to know what the new property actually does so the > > > > > uapi needs to be documented properly. And down the line some > > > > > new driver might also implement the wrong behaviour if there > > > > > is no clear specification. > > > >=20 > > > > Ack > > > >=20 > > > > > So I'm thinking (or perhaps hoping) the rule might be something l= ike: > > > > > - YCbCr limited range=20 > > > > > - RGB full range if "Broadcast RGB" property is not present > > > >=20 > > > > Isn't it much more complicated than that for HDMI though? My > > > > recollection was that any VIC but VIC1 would be limited range, and > > > > anything else full range? > > >=20 > > > Do we have some driver that implements the CTA-861 CE vs. IT mode > > > logic but doesn't expose the "Broadcast RGB" property? I was hoping > > > those would always go hand in hand now. > >=20 > > I'm not sure. i915 and the HDMI state helpers handle it properly (I > > think?) but it looks like only vc4 registers the Broadcast RGB property > > and uses the HDMI state helpers. > >=20 > > And it looks like amdgpu registers Broadcast RGB but doesn't use > > drm_default_rgb_quant_range() which seems suspicious? >=20 > If they want just manual full vs. limited then they should > limit the property to not expose the "auto" option at all. >=20 > amdgpu also ties this in with the "colorspace" property, which > originally in i915 only controlled the infoframes/etc. But on > amdgpu it now controls various aspects of output color > transformation. The end result is that the property is a complete > mess with most of the values making no sense. And for whatever > reason everyone involved refused to remove/deprecate the > nonsensical values :/ >=20 > Looks like this series should make sure the documentation for > the "colorspace" property is in sync with the new property > as well. Currently now it's giving conflicting information. >=20 I take it the problematic information is in * DOC: standard connector properties * * Colorspace: and probably specifically BT2020_YCC's (and BT2020_RGB's?) insistence that they "produce RGB content". I think we probably just have to change the statement "The variants BT2020_RGB and BT2020_YCC are equivalent and the driver chooses between RGB and YCbCr on its own." The "on its own" here would get turned into "based on the color format property". Speaking of i915, that patch is one of the very few (5) patches in this series still lacking a review (hint hint nudge nudge). I'd like to get some more feedback on the remaining patches before I send out another revision, so that it's hopefully not just docs changes (I know better than to think those patches must be perfect and won't need revision.) If `drm/bridge: Act on the DRM color format property` and `drm/atomic-helper: Add HDMI bridge output bus formats helper` get a reviewed-by/acked-by and it's still crickets on the amdgpu and i915 front, then I will just drop the amdgpu/i915 implementations so that they don't block this from landing. Kind regards, Nicolas Frattaroli 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 49C8010ED66E for ; Fri, 27 Mar 2026 12:57:14 +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:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=2+v4fWugbI9qnVAQwjh7xw4zksIGMb8FZCl3vOztuTo=; b=lEN5gqrVkR9VNW ssAsLkY5TRsXNCTTr1Bd2ruwhWiMvtCsS8MqSBLXa7V4GBuQ5DVktWKozwSx39OjuWQydoxhE+/T/ HiaPxOybX5QLkJBVvsT/nHR4foomylP8KXYbkYpodw2pb22WdKPd3nnTIvEu6jdJJQ5EYsFz6Jq3K ayEbzaMteKn4epZAmhBtspU0K86Em8jKGXw2GZqTTT/7PEeuzD2div1D3uUxRyefjPrzND0JFhK8x zlA9RakhbP/6S1XUQYOg1K/zwC1giYgDV1Csq6yN2bYBagahblyfXxaC/UoFwfwHhE5jf4Fwhpq6I LhIIdfxEBOJ6a6gWZnPw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1w66kR-00000007NQY-0Y7C; Fri, 27 Mar 2026 12:57:11 +0000 Received: from sender4-pp-f112.zoho.com ([136.143.188.112]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1w66kO-00000007NQ4-1Xkj; Fri, 27 Mar 2026 12:57:09 +0000 ARC-Seal: i=1; a=rsa-sha256; t=1774616179; cv=none; d=zohomail.com; s=zohoarc; b=nrhJQcNU2St85zr7KW0VW77O0rvjPuIFsgi0f3RHLuq01R3pXJEeYUsQDtcuvZr/SlAD7bJYG7OMKTL4t3i+m69bvvJ0u6NAKpW5UThs9vJTi8fkJXOVZL+Ksgw1SoeMmFgLMRKb+jM0TiSiMgaEhVZ76X0O23g+O5H3UxXtIHA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774616179; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=9rZk3O9XtcgvBcy00N+ORbUqxZBMTrdkFnBuRIM06bI=; b=RiLu1f6xF46lhFrMPIJ8+LCZP1DjvY7YUR7IZQhn/d4AGGFfV/BeaO9+hlrlA4IkTc8AXYUHbrQKNC7Y9aWT+WS2A7rYiZO9tL/y7PLslKQJjeerZf3m4BARf7anBe/OG+EWt9IstJe+QY9KexW0GVTgr0q/bvBYlCGzHE58fpA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=nicolas.frattaroli@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1774616179; s=zohomail; d=collabora.com; i=nicolas.frattaroli@collabora.com; h=From:From:To:To:Cc:Cc:Subject:Subject:Date:Date:Message-ID:In-Reply-To:References:MIME-Version:Content-Transfer-Encoding:Content-Type:Message-Id:Reply-To; bh=9rZk3O9XtcgvBcy00N+ORbUqxZBMTrdkFnBuRIM06bI=; b=hYU4MBjkdSfxJmH/kKO/j7MNFTk9XtBpm41ookcZAIDnG353SOU0DAWhw/FagFR0 AmxyXQ1E79tKhpvXNtkgVz3GMmzGSc6UZOkL0HpMdPVL9MIhCTOB6f/U1SJ+liOwLpg 72BpbX2lR1jnhNBoBY+RhPXNy5J6gyEHCB9y3feQ= Received: by mx.zohomail.com with SMTPS id 17746161764209.309822167866628; Fri, 27 Mar 2026 05:56:16 -0700 (PDT) From: Nicolas Frattaroli To: Maxime Ripard , Ville =?UTF-8?B?U3lyasOkbMOk?= Cc: Harry Wentland , Leo Li , Rodrigo Siqueira , Alex Deucher , Christian =?UTF-8?B?S8O2bmln?= , David Airlie , Simona Vetter , Maarten Lankhorst , Thomas Zimmermann , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Sandy Huang , Heiko =?UTF-8?B?U3TDvGJuZXI=?= , Andy Yan , Jani Nikula , Rodrigo Vivi , Joonas Lahtinen , Tvrtko Ursulin , Dmitry Baryshkov , Sascha Hauer , Rob Herring , Jonathan Corbet , Shuah Khan , kernel@collabora.com, amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, linux-doc@vger.kernel.org, Werner Sembach , Andri Yngvason , Marius Vlad Subject: Re: [PATCH v11 03/22] drm: Add new general DRM property "color format" Date: Fri, 27 Mar 2026 13:56:06 +0100 Message-ID: <4153041.tdWV9SEqCh@workhorse> In-Reply-To: References: <20260324-color-format-v11-0-605559af4fb4@collabora.com> <20260326-pumpkin-goshawk-of-stamina-0ccb84@houat> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20260327_055708_466871_7298087E X-CRM114-Status: GOOD ( 55.32 ) X-BeenThere: linux-rockchip@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Upstream kernel work for Rockchip platforms List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org T24gVGh1cnNkYXksIDI2IE1hcmNoIDIwMjYgMTg6NTg6MjUgQ2VudHJhbCBFdXJvcGVhbiBTdGFu ZGFyZCBUaW1lIFZpbGxlIFN5cmrDpGzDpCB3cm90ZToKPiBPbiBUaHUsIE1hciAyNiwgMjAyNiBh dCAwNjowMjo0N1BNICswMTAwLCBNYXhpbWUgUmlwYXJkIHdyb3RlOgo+ID4gT24gV2VkLCBNYXIg MjUsIDIwMjYgYXQgMDg6NDM6MTVQTSArMDIwMCwgVmlsbGUgU3lyasOkbMOkIHdyb3RlOgo+ID4g PiBPbiBXZWQsIE1hciAyNSwgMjAyNiBhdCAwMzo1Njo1OFBNICswMTAwLCBNYXhpbWUgUmlwYXJk IHdyb3RlOgo+ID4gPiA+IE9uIFdlZCwgTWFyIDI1LCAyMDI2IGF0IDAxOjAzOjA3UE0gKzAyMDAs IFZpbGxlIFN5cmrDpGzDpCB3cm90ZToKPiA+ID4gPiA+IE9uIFdlZCwgTWFyIDI1LCAyMDI2IGF0 IDA5OjI0OjI3QU0gKzAxMDAsIE1heGltZSBSaXBhcmQgd3JvdGU6Cj4gPiA+ID4gPiA+IE9uIFR1 ZSwgTWFyIDI0LCAyMDI2IGF0IDA5OjUzOjM1UE0gKzAyMDAsIFZpbGxlIFN5cmrDpGzDpCB3cm90 ZToKPiA+ID4gPiA+ID4gPiBPbiBUdWUsIE1hciAyNCwgMjAyNiBhdCAwODoxMDoxMVBNICswMTAw LCBOaWNvbGFzIEZyYXR0YXJvbGkgd3JvdGU6Cj4gPiA+ID4gPiA+ID4gPiBPbiBUdWVzZGF5LCAy NCBNYXJjaCAyMDI2IDE4OjAwOjQ1IENlbnRyYWwgRXVyb3BlYW4gU3RhbmRhcmQgVGltZSBWaWxs ZSBTeXJqw6Rsw6Qgd3JvdGU6Cj4gPiA+ID4gPiA+ID4gPiA+IE9uIFR1ZSwgTWFyIDI0LCAyMDI2 IGF0IDA1OjAxOjA3UE0gKzAxMDAsIE5pY29sYXMgRnJhdHRhcm9saSB3cm90ZToKPiA+ID4gPiA+ ID4gPiA+ID4gPiArZW51bSBkcm1fY29ubmVjdG9yX2NvbG9yX2Zvcm1hdCB7Cj4gPiA+ID4gPiA+ ID4gPiA+ID4gKwkvKioKPiA+ID4gPiA+ID4gPiA+ID4gPiArCSAqIEBEUk1fQ09OTkVDVE9SX0NP TE9SX0ZPUk1BVF9BVVRPOiBUaGUgZHJpdmVyIG9yIGRpc3BsYXkgcHJvdG9jb2wKPiA+ID4gPiA+ ID4gPiA+ID4gPiArCSAqIGhlbHBlcnMgc2hvdWxkIHBpY2sgYSBzdWl0YWJsZSBjb2xvciBmb3Jt YXQuIEFsbCBpbXBsZW1lbnRhdGlvbnMgb2YgYQo+ID4gPiA+ID4gPiA+ID4gPiA+ICsJICogc3Bl Y2lmaWMgZGlzcGxheSBwcm90b2NvbCBtdXN0IGJlaGF2ZSB0aGUgc2FtZSB3YXkgd2l0aCAiQVVU TyIsIGJ1dAo+ID4gPiA+ID4gPiA+ID4gPiA+ICsJICogZGlmZmVyZW50IGRpc3BsYXkgcHJvdG9j b2xzIGRvIG5vdCBuZWNlc3NhcmlseSBoYXZlIHRoZSBzYW1lICJBVVRPIgo+ID4gPiA+ID4gPiA+ ID4gPiA+ICsJICogc2VtYW50aWNzLgo+ID4gPiA+ID4gPiA+ID4gPiA+ICsJICoKPiA+ID4gPiA+ ID4gPiA+ID4gPiArCSAqIEZvciBIRE1JLCAiQVVUTyIgcGlja3MgUkdCLCBidXQgZmFsbHMgYmFj ayB0byBZQ2JDciA0OjI6MCBpZiB0aGUKPiA+ID4gPiA+ID4gPiA+ID4gPiArCSAqIGJhbmR3aWR0 aCByZXF1aXJlZCBmb3IgZnVsbC1zY2FsZSBSR0IgaXMgbm90IGF2YWlsYWJsZSwgb3IgdGhlIG1v ZGUKPiA+ID4gPiA+ID4gPiA+ID4gPiArCSAqIGlzIFlDYkNyIDQ6MjowLW9ubHksIGFzIGxvbmcg YXMgdGhlIG1vZGUgYW5kIG91dHB1dCBib3RoIHN1cHBvcnQKPiA+ID4gPiA+ID4gPiA+ID4gPiAr CSAqIFlDYkNyIDQ6MjowLgo+ID4gPiA+ID4gPiA+ID4gPiA+ICsJICoKPiA+ID4gPiA+ID4gPiA+ ID4gPiArCSAqIEZvciBkaXNwbGF5IHByb3RvY29scyBvdGhlciB0aGFuIEhETUksIHRoZSByZWN1 cnNpdmUgYnJpZGdlIGNoYWluCj4gPiA+ID4gPiA+ID4gPiA+ID4gKwkgKiBmb3JtYXQgc2VsZWN0 aW9uIHBpY2tzIHRoZSBmaXJzdCBjaGFpbiBvZiBicmlkZ2UgZm9ybWF0cyB0aGF0IHdvcmtzLAo+ ID4gPiA+ID4gPiA+ID4gPiA+ICsJICogYXMgaGFzIGFscmVhZHkgYmVlbiB0aGUgY2FzZSBiZWZv cmUgdGhlIGludHJvZHVjdGlvbiBvZiB0aGUgImNvbG9yCj4gPiA+ID4gPiA+ID4gPiA+ID4gKwkg KiBmb3JtYXQiIHByb3BlcnR5LiBOb24tSERNSSBicmlkZ2VzIHNob3VsZCB0aGVyZWZvcmUgZWl0 aGVyIHNvcnQgdGhlaXIKPiA+ID4gPiA+ID4gPiA+ID4gPiArCSAqIGJ1cyBvdXRwdXQgZm9ybWF0 cyBieSBwcmVmZXJlbmNlLCBvciBhZ3JlZSBvbiBhIHVuaWZpZWQgYXV0byBmb3JtYXQKPiA+ID4g PiA+ID4gPiA+ID4gPiArCSAqIHNlbGVjdGlvbiBsb2dpYyB0aGF0J3MgaW1wbGVtZW50ZWQgaW4g YSBjb21tb24gc3RhdGUgaGVscGVyIChsaWtlCj4gPiA+ID4gPiA+ID4gPiA+ID4gKwkgKiBob3cg SERNSSBkb2VzIGl0KS4KPiA+ID4gPiA+ID4gPiA+ID4gPiArCSAqLwo+ID4gPiA+ID4gPiA+ID4g PiA+ICsJRFJNX0NPTk5FQ1RPUl9DT0xPUl9GT1JNQVRfQVVUTyA9IDAsCj4gPiA+ID4gPiA+ID4g PiA+ID4gKwo+ID4gPiA+ID4gPiA+ID4gPiA+ICsJLyoqCj4gPiA+ID4gPiA+ID4gPiA+ID4gKwkg KiBARFJNX0NPTk5FQ1RPUl9DT0xPUl9GT1JNQVRfUkdCNDQ0OiBSR0Igb3V0cHV0IGZvcm1hdAo+ ID4gPiA+ID4gPiA+ID4gPiA+ICsJICovCj4gPiA+ID4gPiA+ID4gPiA+ID4gKwlEUk1fQ09OTkVD VE9SX0NPTE9SX0ZPUk1BVF9SR0I0NDQsCj4gPiA+ID4gPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4g PiA+ID4gPiA+ICsJLyoqCj4gPiA+ID4gPiA+ID4gPiA+ID4gKwkgKiBARFJNX0NPTk5FQ1RPUl9D T0xPUl9GT1JNQVRfWUNCQ1I0NDQ6IFlDYkNyIDQ6NDo0IG91dHB1dCBmb3JtYXQgKGllLgo+ID4g PiA+ID4gPiA+ID4gPiA+ICsJICogbm90IHN1YnNhbXBsZWQpCj4gPiA+ID4gPiA+ID4gPiA+ID4g KwkgKi8KPiA+ID4gPiA+ID4gPiA+ID4gPiArCURSTV9DT05ORUNUT1JfQ09MT1JfRk9STUFUX1lD QkNSNDQ0LAo+ID4gPiA+ID4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gPiA+ID4gPiArCS8qKgo+ ID4gPiA+ID4gPiA+ID4gPiA+ICsJICogQERSTV9DT05ORUNUT1JfQ09MT1JfRk9STUFUX1lDQkNS NDIyOiBZQ2JDciA0OjI6MiBvdXRwdXQgZm9ybWF0IChpZS4KPiA+ID4gPiA+ID4gPiA+ID4gPiAr CSAqIHdpdGggaG9yaXpvbnRhbCBzdWJzYW1wbGluZykKPiA+ID4gPiA+ID4gPiA+ID4gPiArCSAq Lwo+ID4gPiA+ID4gPiA+ID4gPiA+ICsJRFJNX0NPTk5FQ1RPUl9DT0xPUl9GT1JNQVRfWUNCQ1I0 MjIsCj4gPiA+ID4gPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiA+ID4gPiA+ICsJLyoqCj4gPiA+ ID4gPiA+ID4gPiA+ID4gKwkgKiBARFJNX0NPTk5FQ1RPUl9DT0xPUl9GT1JNQVRfWUNCQ1I0MjA6 IFlDYkNyIDQ6MjowIG91dHB1dCBmb3JtYXQgKGllLgo+ID4gPiA+ID4gPiA+ID4gPiA+ICsJICog d2l0aCBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBzdWJzYW1wbGluZykKPiA+ID4gPiA+ID4gPiA+ ID4gPiArCSAqLwo+ID4gPiA+ID4gPiA+ID4gPiA+ICsJRFJNX0NPTk5FQ1RPUl9DT0xPUl9GT1JN QVRfWUNCQ1I0MjAsCj4gPiA+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+ID4gPiBTZWVtcyBs aWtlIHRoaXMgc2hvdWxkIGRvY3VtZW50IHdoYXQgdGhlIHF1YW50aXphdGlvbiByYW5nZQo+ID4g PiA+ID4gPiA+ID4gPiBzaG91bGQgYmUgZm9yIGVhY2ggZm9ybWF0Lgo+ID4gPiA+ID4gPiA+ID4g PiAKPiA+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+ID4gSSBkb24ndCB0aGluayBzbz8gSWYg eW91IHdhbnQgcGVyLWNvbXBvbmVudCBiaXQgZGVwdGggdmFsdWVzLAo+ID4gPiA+ID4gPiA+ID4g RFJNX0ZPUk1BVF8qIGRlZmluZXMgd291bGQgYmUgdGhlIGFwcHJvcHJpYXRlIHZhbHVlcyB0byB1 c2UuIFRoaXMKPiA+ID4gPiA+ID4gPiA+IGVudW0gaXMgbW9yZSBhYnN0cmFjdCB0aGFuIHRoYXQs IGFuZCBpcyB0aGVyZSB0byBjb21tdW5pY2F0ZQo+ID4gPiA+ID4gPiA+ID4gWVVWIHZzLiBSR0Ig YW5kIGNocm9tYSBzdWJzYW1wbGluZywgd2l0aCBiaXQgZGVwdGggYmVpbmcgaGFuZGxlZAo+ID4g PiA+ID4gPiA+ID4gYnkgb3RoZXIgcHJvcGVydGllcy4KPiA+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ ID4gPiA+ID4gSWYgeW91IG1lYW4gdGhlIGZhY3RvciB1c2VkIGZvciBzdWJzYW1wbGluZywgdGhl biB0aGF0J2Qgb25seSBiZQo+ID4gPiA+ID4gPiA+ID4gcmVsZXZhbnQgaWYgWUNCQ1I0MTAgd2Fz IHN1cHBvcnRlZCB3aGVyZSBvbmUgY2hyb21hIHBsYW5lIGlzbid0Cj4gPiA+ID4gPiA+ID4gPiBo YWx2ZWQgYnV0IHF1YXJ0ZXJlZCBpbiByZXNvbHV0aW9uLiBJIHN1c3BlY3QgNDoxOjAgd2lsbCBu ZXZlcgo+ID4gPiA+ID4gPiA+ID4gYmUgYWRkZWQ7IG5vIGRpZ2l0YWwgZGlzcGxheSBwcm90b2Nv bCBzdGFuZGFyZCBzdXBwb3J0cyBpdCB0byBteQo+ID4gPiA+ID4gPiA+ID4ga25vd2xlZGdlLCBh bmQgaG9wZWZ1bGx5IG5vbmUgZXZlciB3aWxsLgo+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+ IE5vLCBJIG1lYW4gdGhlIHF1YW50aXphdGlvbiByYW5nZSAoMTYtMjM1IHZzLiAwLTI1NSBldGMp Lgo+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+IFRoZSBpOTE1IGJlaGF2aW91ciBpcyB0aGF0 IFlDYkNyIGlzIGFsd2F5cyBsaW1pdGVkIHJhbmdlLAo+ID4gPiA+ID4gPiA+IFJHQiBjYW4gZWl0 aGVyIGJlIGZ1bGwgb3IgbGltaXRlZCByYW5nZSBkZXBlbmRpbmcgb24gdGhlIAo+ID4gPiA+ID4g PiA+ICJCcm9hZGNhc3QgUkdCIiBwcm9wZXJ0eSBhbmQgb3RoZXIgcmVsYXRlZCBmYWN0b3JzLgo+ ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gU28gZmFyIHRoZSBIRE1JIHN0YXRlIGhhcyBib3RoIHRo ZSBmb3JtYXQgYW5kIHF1YW50aXphdGlvbiByYW5nZSBhcwo+ID4gPiA+ID4gPiBkaWZmZXJlbnQg ZmllbGRzLiBJJ20gbm90IHN1cmUgd2UgbmVlZCB0byBkb2N1bWVudCB0aGUgcmFuZ2UgaW4gdGhl Cj4gPiA+ID4gPiA+IGZvcm1hdCBmaWVsZCwgbWF5YmUgb25seSBtZW50aW9uIGl0J3Mgbm90IHBh cnQgb2YgdGhlIGZvcm1hdCBidXQgaGFzIGEKPiA+ID4gPiA+ID4gZmllbGQgb2YgaXRzIG93bj8K PiA+ID4gPiA+IAo+ID4gPiA+ID4gSSB0aGluayB3ZSBvbmx5IGhhdmUgaXQgZm9yIFJHQiAob24g c29tZSBkcml2ZXJzIG9ubHk/KS4gRm9yIFlDYkNyCj4gPiA+ID4gPiBJIHRoaW5rIHRoZSBhc3N1 bXB0aW9uIGlzIGxpbWl0ZWQgcmFuZ2UgZXZlcnl3aGVyZS4KPiA+ID4gPiA+IAo+ID4gPiA+ID4g QnV0IEknbSBub3QgcmVhbGx5IGNvbmNlcm5lZCBhYm91dCBkb2N1bWVudGluZyBzdHJ1Y3QgbWVt YmVycy4KPiA+ID4gPiA+IFdoYXQgSSdtIHRhbGtpbmcgYWJvdXQgaXMgdGhlICp1YXBpKiBkb2Nz LiBTdXJlbHkgdXNlcnNwYWNlCj4gPiA+ID4gPiB3aWxsIHdhbnQgdG8ga25vdyB3aGF0IHRoZSBu ZXcgcHJvcGVydHkgYWN0dWFsbHkgZG9lcyBzbyB0aGUKPiA+ID4gPiA+IHVhcGkgbmVlZHMgdG8g YmUgZG9jdW1lbnRlZCBwcm9wZXJseS4gQW5kIGRvd24gdGhlIGxpbmUgc29tZQo+ID4gPiA+ID4g bmV3IGRyaXZlciBtaWdodCBhbHNvIGltcGxlbWVudCB0aGUgd3JvbmcgYmVoYXZpb3VyIGlmIHRo ZXJlCj4gPiA+ID4gPiBpcyBubyBjbGVhciBzcGVjaWZpY2F0aW9uLgo+ID4gPiA+IAo+ID4gPiA+ IEFjawo+ID4gPiA+IAo+ID4gPiA+ID4gU28gSSdtIHRoaW5raW5nIChvciBwZXJoYXBzIGhvcGlu ZykgdGhlIHJ1bGUgbWlnaHQgYmUgc29tZXRoaW5nIGxpa2U6Cj4gPiA+ID4gPiAtIFlDYkNyIGxp bWl0ZWQgcmFuZ2UgCj4gPiA+ID4gPiAtIFJHQiBmdWxsIHJhbmdlIGlmICJCcm9hZGNhc3QgUkdC IiBwcm9wZXJ0eSBpcyBub3QgcHJlc2VudAo+ID4gPiA+IAo+ID4gPiA+IElzbid0IGl0IG11Y2gg bW9yZSBjb21wbGljYXRlZCB0aGFuIHRoYXQgZm9yIEhETUkgdGhvdWdoPyBNeQo+ID4gPiA+IHJl Y29sbGVjdGlvbiB3YXMgdGhhdCBhbnkgVklDIGJ1dCBWSUMxIHdvdWxkIGJlIGxpbWl0ZWQgcmFu Z2UsIGFuZAo+ID4gPiA+IGFueXRoaW5nIGVsc2UgZnVsbCByYW5nZT8KPiA+ID4gCj4gPiA+IERv IHdlIGhhdmUgc29tZSBkcml2ZXIgdGhhdCBpbXBsZW1lbnRzIHRoZSBDVEEtODYxIENFIHZzLiBJ VCBtb2RlCj4gPiA+IGxvZ2ljIGJ1dCBkb2Vzbid0IGV4cG9zZSB0aGUgIkJyb2FkY2FzdCBSR0Ii IHByb3BlcnR5PyBJIHdhcyBob3BpbmcKPiA+ID4gdGhvc2Ugd291bGQgYWx3YXlzIGdvIGhhbmQg aW4gaGFuZCBub3cuCj4gPiAKPiA+IEknbSBub3Qgc3VyZS4gaTkxNSBhbmQgdGhlIEhETUkgc3Rh dGUgaGVscGVycyBoYW5kbGUgaXQgcHJvcGVybHkgKEkKPiA+IHRoaW5rPykgYnV0IGl0IGxvb2tz IGxpa2Ugb25seSB2YzQgcmVnaXN0ZXJzIHRoZSBCcm9hZGNhc3QgUkdCIHByb3BlcnR5Cj4gPiBh bmQgdXNlcyB0aGUgSERNSSBzdGF0ZSBoZWxwZXJzLgo+ID4gCj4gPiBBbmQgaXQgbG9va3MgbGlr ZSBhbWRncHUgcmVnaXN0ZXJzIEJyb2FkY2FzdCBSR0IgYnV0IGRvZXNuJ3QgdXNlCj4gPiBkcm1f ZGVmYXVsdF9yZ2JfcXVhbnRfcmFuZ2UoKSB3aGljaCBzZWVtcyBzdXNwaWNpb3VzPwo+IAo+IElm IHRoZXkgd2FudCBqdXN0IG1hbnVhbCBmdWxsIHZzLiBsaW1pdGVkIHRoZW4gdGhleSBzaG91bGQK PiBsaW1pdCB0aGUgcHJvcGVydHkgdG8gbm90IGV4cG9zZSB0aGUgImF1dG8iIG9wdGlvbiBhdCBh bGwuCj4gCj4gYW1kZ3B1IGFsc28gdGllcyB0aGlzIGluIHdpdGggdGhlICJjb2xvcnNwYWNlIiBw cm9wZXJ0eSwgd2hpY2gKPiBvcmlnaW5hbGx5IGluIGk5MTUgb25seSBjb250cm9sbGVkIHRoZSBp bmZvZnJhbWVzL2V0Yy4gQnV0IG9uCj4gYW1kZ3B1IGl0IG5vdyBjb250cm9scyB2YXJpb3VzIGFz cGVjdHMgb2Ygb3V0cHV0IGNvbG9yCj4gdHJhbnNmb3JtYXRpb24uIFRoZSBlbmQgcmVzdWx0IGlz IHRoYXQgdGhlIHByb3BlcnR5IGlzIGEgY29tcGxldGUKPiBtZXNzIHdpdGggbW9zdCBvZiB0aGUg dmFsdWVzIG1ha2luZyBubyBzZW5zZS4gQW5kIGZvciB3aGF0ZXZlcgo+IHJlYXNvbiBldmVyeW9u ZSBpbnZvbHZlZCByZWZ1c2VkIHRvIHJlbW92ZS9kZXByZWNhdGUgdGhlCj4gbm9uc2Vuc2ljYWwg dmFsdWVzIDovCj4gCj4gTG9va3MgbGlrZSB0aGlzIHNlcmllcyBzaG91bGQgbWFrZSBzdXJlIHRo ZSBkb2N1bWVudGF0aW9uIGZvcgo+IHRoZSAiY29sb3JzcGFjZSIgcHJvcGVydHkgaXMgaW4gc3lu YyB3aXRoIHRoZSBuZXcgcHJvcGVydHkKPiBhcyB3ZWxsLiBDdXJyZW50bHkgbm93IGl0J3MgZ2l2 aW5nIGNvbmZsaWN0aW5nIGluZm9ybWF0aW9uLgo+IAoKSSB0YWtlIGl0IHRoZSBwcm9ibGVtYXRp YyBpbmZvcm1hdGlvbiBpcyBpbgoKICAgICogRE9DOiBzdGFuZGFyZCBjb25uZWN0b3IgcHJvcGVy dGllcwogICAgKgogICAgKiBDb2xvcnNwYWNlOgoKYW5kIHByb2JhYmx5IHNwZWNpZmljYWxseSBC VDIwMjBfWUNDJ3MgKGFuZCBCVDIwMjBfUkdCJ3M/KSBpbnNpc3RlbmNlCnRoYXQgdGhleSAicHJv ZHVjZSBSR0IgY29udGVudCIuCgpJIHRoaW5rIHdlIHByb2JhYmx5IGp1c3QgaGF2ZSB0byBjaGFu Z2UgdGhlIHN0YXRlbWVudCAiVGhlIHZhcmlhbnRzCkJUMjAyMF9SR0IgYW5kIEJUMjAyMF9ZQ0Mg YXJlIGVxdWl2YWxlbnQgYW5kIHRoZSBkcml2ZXIgY2hvb3NlcyBiZXR3ZWVuClJHQiBhbmQgWUNi Q3Igb24gaXRzIG93bi4iCgpUaGUgIm9uIGl0cyBvd24iIGhlcmUgd291bGQgZ2V0IHR1cm5lZCBp bnRvICJiYXNlZCBvbiB0aGUgY29sb3IgZm9ybWF0CnByb3BlcnR5Ii4KClNwZWFraW5nIG9mIGk5 MTUsIHRoYXQgcGF0Y2ggaXMgb25lIG9mIHRoZSB2ZXJ5IGZldyAoNSkgcGF0Y2hlcyBpbgp0aGlz IHNlcmllcyBzdGlsbCBsYWNraW5nIGEgcmV2aWV3IChoaW50IGhpbnQgbnVkZ2UgbnVkZ2UpLiBJ J2QgbGlrZQp0byBnZXQgc29tZSBtb3JlIGZlZWRiYWNrIG9uIHRoZSByZW1haW5pbmcgcGF0Y2hl cyBiZWZvcmUgSSBzZW5kIG91dAphbm90aGVyIHJldmlzaW9uLCBzbyB0aGF0IGl0J3MgaG9wZWZ1 bGx5IG5vdCBqdXN0IGRvY3MgY2hhbmdlcyAoSQprbm93IGJldHRlciB0aGFuIHRvIHRoaW5rIHRo b3NlIHBhdGNoZXMgbXVzdCBiZSBwZXJmZWN0IGFuZCB3b24ndApuZWVkIHJldmlzaW9uLikKCklm IGBkcm0vYnJpZGdlOiBBY3Qgb24gdGhlIERSTSBjb2xvciBmb3JtYXQgcHJvcGVydHlgIGFuZApg ZHJtL2F0b21pYy1oZWxwZXI6IEFkZCBIRE1JIGJyaWRnZSBvdXRwdXQgYnVzIGZvcm1hdHMgaGVs cGVyYCBnZXQgYQpyZXZpZXdlZC1ieS9hY2tlZC1ieSBhbmQgaXQncyBzdGlsbCBjcmlja2V0cyBv biB0aGUgYW1kZ3B1IGFuZCBpOTE1CmZyb250LCB0aGVuIEkgd2lsbCBqdXN0IGRyb3AgdGhlIGFt ZGdwdS9pOTE1IGltcGxlbWVudGF0aW9ucyBzbyB0aGF0CnRoZXkgZG9uJ3QgYmxvY2sgdGhpcyBm cm9tIGxhbmRpbmcuCgpLaW5kIHJlZ2FyZHMsCk5pY29sYXMgRnJhdHRhcm9saQoKCgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpMaW51eC1yb2NrY2hpcCBt YWlsaW5nIGxpc3QKTGludXgtcm9ja2NoaXBAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlz dHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LXJvY2tjaGlwCg==