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=-3.9 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED 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 696E5C3A5A6 for ; Thu, 19 Sep 2019 13:12:49 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 2C6D821907 for ; Thu, 19 Sep 2019 13:12:49 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=megous.com header.i=@megous.com header.b="PlX2yOux" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732303AbfISNMs (ORCPT ); Thu, 19 Sep 2019 09:12:48 -0400 Received: from vps.xff.cz ([195.181.215.36]:49264 "EHLO vps.xff.cz" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732283AbfISNMr (ORCPT ); Thu, 19 Sep 2019 09:12:47 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=megous.com; s=mail; t=1568898764; bh=DsLnHJtgS83n/ESig8HWVUvNCRcNXSJ22qlrHekhpfk=; h=Date:From:To:Subject:References:X-My-GPG-KeyId:From; b=PlX2yOuxJo7EI/ZuDl0v0lWeTHR2hEjJeivFtp6182wKcULZyqYMCnNLTmugvzWI/ Ewkq4k2GKxXzobl/GH7s23k2Dkt0ybMpvzPPYc1ORbeSsiddqpofc2/9DtwNrMjlCz oeaXU5KXCeoOhbrg5eOnkrJNZma7Kl5Q/q0wi2iQ= Date: Thu, 19 Sep 2019 15:12:44 +0200 From: =?utf-8?Q?Ond=C5=99ej?= Jirman To: Maxime Ripard , David Airlie , Daniel Vetter , Chen-Yu Tsai , dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH] drm: sun8i-ui/vi: Fix layer zpos change/atomic modesetting Message-ID: <20190919131244.35hmnp7jizegltp7@core.my.home> Mail-Followup-To: Maxime Ripard , David Airlie , Daniel Vetter , Chen-Yu Tsai , dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org References: <20190914220337.646719-1-megous@megous.com> <20190918141734.kerdbbaynwutrxf6@gilmour> <20190918152309.j2dbu63jaru6jn2t@core.my.home> <20190918201617.5gwzmshoxbcxbmrx@gilmour> <20190919122058.fhpuafogdq7oir2d@core.my.home> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20190919122058.fhpuafogdq7oir2d@core.my.home> X-My-GPG-KeyId: EBFBDDE11FB918D44D1F56C1F9F0A873BE9777ED Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Sep 19, 2019 at 02:20:58PM +0200, megous hlavni wrote: > On Wed, Sep 18, 2019 at 10:16:17PM +0200, Maxime Ripard wrote: > > On Wed, Sep 18, 2019 at 05:23:09PM +0200, Ondřej Jirman wrote: > > > Hi, > > > > > > On Wed, Sep 18, 2019 at 04:17:34PM +0200, Maxime Ripard wrote: > > > > Hi, > > > > > > > > On Sun, Sep 15, 2019 at 12:03:37AM +0200, megous@megous.com wrote: > > > > > From: Ondrej Jirman > > > > > > > > > > There are various issues that this re-work of sun8i_[uv]i_layer_enable > > > > > function fixes: > > > > > > > > > > - Make sure that we re-initialize zpos on reset > > > > > - Minimize register updates by doing them only when state changes > > > > > - Fix issue where DE pipe might get disabled even if it is no longer > > > > > used by the layer that's currently calling sun8i_ui_layer_enable > > > > > - .atomic_disable callback is not really needed because .atomic_update > > > > > can do the disable too, so drop the duplicate code > > > > > > > > > > Signed-off-by: Ondrej Jirman > > > > > > > > It looks like these fixes should be in separate patches. Is there any > > > > reason it's not the case? > > > > > > Bullet points just describe the resulting effect/benefits of the change to fix > > > the pipe control register update issue (see the referenced e-mail). > > > > It's definitely ok to have multiple patches needed to address a single > > perceived issue. > > Yes, but I can't simply split the patch. In order for each change to work on its > own, they'd have to be done differently than the final result. > > I wouldn't mind at all if it was just a simple splitting, but you're asking > for too much work, this time, for no benefit that I can see. > > > A commit is not about what you're fixing but what you're changing. And > > the fact that you have tha bullet list in the first place proves that > > you have multiple logical changes in your patch. > > > > And even then, your commit log mentions that you're fixing multiple > > issues (without explaining them). > > I can reword the commit message if that helps, and skip the bullet list if it > is confusing. There's a single core issue and that is that the driver doesn't > update the pipe/channel configuration correctly leading to disabling of > arbitrary layers (not even those being updated - update of UI layer may disable > VI layer as a side effect for example) at wrong times. And only changes > necessary to debug/fix this are included. How about this: A problem was found where identical configuration of planes leads to different register settings at the HW layer when using a X server with modesetting driver and one plane marked as a cursor. On first run of the X server, only the black screen and the layer containing the cursor is visible. Switching to console and back corrects the situation. I have dumped registers, and found out this: (In both cases there are two enabled planes, plane 1 with zpos 0 and plane 3 with zpos 1). 1) First Xorg run: 0x01101000 : 00000201 0x01101080 : 00000030 BLD_FILL_COLOR_CTL: (aka SUN8I_MIXER_BLEND_PIPE_CTL) P1_EN BLD_CH_RTCTL: (aka SUN8I_MIXER_BLEND_ROUTE) P0_RTCTL channel0 P1_RTCTL channel3 2) After switch to console and back to Xorg: 0x01101000 : 00000301 0x01101080 : 00000031 BLD_FILL_COLOR_CTL: P1_EN and P0_EN BLD_CH_RTCTL: P0_RTCTL channel1 P1_RTCTL channel3 What happens is that sun8i_ui_layer_enable() function may disable blending pipes even if it is no longer assigned to its layer, because of incorrect state/zpos tracking in the driver. In particular, layer 1 is configured to zpos 0 and thus uses pipe 0. When layer 3 is enabled by X server, sun8i_ui_layer_enable() will get called with old_zpos=0 zpos=1, which will lead to disabling of pipe 0. In general this issue can happen to any layer during enable or zpos changes on multiple layers at once. To correct this we now pass previous enabled/disabled state of the layer, and pass real previous zpos of the layer to sun8i_ui_layer_enable() and rework the sun8i_ui_layer_enable() function to react to the state changes correctly. In order to not complicate the atomic_disable callback with all of the above changes, we simply remove it and implement all the chanes as part of atomic_update, which also reduces the code duplication. To make this all work, initial zpos positions of all layers need to be restored to initial values on reset. > I may try generating a nicer patch with a different diff options, if it makes it > more readable for review. > > > > I can maybe split off the first bullet point into a separate patch. But > > > I can't guarantee it will not make the original issue worse, because it might > > > have been hiding the other issue with register updates. > > > > > > The rest is just a result of the single logical change. It doesn't work > > > individually, it all has the goal of fixing the issue as a whole. > > > > > > If I were to split it I would have to actually re-implement .atomic_disable > > > callback only to remove it in the next patch. I don't see the benefit. > > > > Your commit log says that you remove atomic_disable. Why would you > > remove it, to add it back, to remove it again? > > Because if I remove it I need to re-implement the functionality in the update > callback. The core will change what is called based on presence of callbacks. > It's not a simple removal. > > If I first implement the new sun8i_[uv]i_layer_enable and update callback, > keeping a disable callback would not work, because the new update callback > will only work if disable callback is not defined (because it it is, then > the drm core will not call the update callback in all cases that I need). > > regards, > o. > > > Maxime > > > > > _______________________________________________ > > linux-arm-kernel mailing list > > linux-arm-kernel@lists.infradead.org > > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel > > > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel 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.7 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_ADSP_ALL, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED 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 57BFDC3A5A6 for ; Thu, 19 Sep 2019 13:12:57 +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 1FEF321D56 for ; Thu, 19 Sep 2019 13:12:57 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="B0ZAs9Lk"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=megous.com header.i=@megous.com header.b="PlX2yOux" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1FEF321D56 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=megous.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:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:To:From:Date:Reply-To:Cc:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=p00NZ7gBYBKmokDppPl8BVcA40f9qWmzt1IGy/+B18A=; b=B0ZAs9LkqcKrfr /66wPLEJDzQBaKhXc39fBdUq5egqwfZhOUSy1BTyL15x6njhWihU5BdiHg4n3x5/iZJQ2L3AkCClr I2qP+XBGi23uOIgMec6kgbJtpUM/CPklp6wuZ39rPCXlWNVKwVpIVvtefIeLSRFKBZ22wKubnsMIC qGf7NCmzLKPnI4Y5tqRwwrsUbsi4GIu2QZst3+VvHpu3ONUOtTO+m0YbRfHLzxN97LDm198WixNqZ 7+PKKCaueg6b7U3J2GmdRSxl0Zlq+OqcTXpzgqfL67FzELLv8ziXaJVhrRue9To2UPgfiWCynjZLh TuIEz9uUk7vGKhTM5q9Q==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.2 #3 (Red Hat Linux)) id 1iAwEs-0000p6-Pm; Thu, 19 Sep 2019 13:12:50 +0000 Received: from vps.xff.cz ([195.181.215.36]) by bombadil.infradead.org with esmtps (Exim 4.92.2 #3 (Red Hat Linux)) id 1iAwEo-0000of-Fx for linux-arm-kernel@lists.infradead.org; Thu, 19 Sep 2019 13:12:48 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=megous.com; s=mail; t=1568898764; bh=DsLnHJtgS83n/ESig8HWVUvNCRcNXSJ22qlrHekhpfk=; h=Date:From:To:Subject:References:X-My-GPG-KeyId:From; b=PlX2yOuxJo7EI/ZuDl0v0lWeTHR2hEjJeivFtp6182wKcULZyqYMCnNLTmugvzWI/ Ewkq4k2GKxXzobl/GH7s23k2Dkt0ybMpvzPPYc1ORbeSsiddqpofc2/9DtwNrMjlCz oeaXU5KXCeoOhbrg5eOnkrJNZma7Kl5Q/q0wi2iQ= Date: Thu, 19 Sep 2019 15:12:44 +0200 From: =?utf-8?Q?Ond=C5=99ej?= Jirman To: Maxime Ripard , David Airlie , Daniel Vetter , Chen-Yu Tsai , dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH] drm: sun8i-ui/vi: Fix layer zpos change/atomic modesetting Message-ID: <20190919131244.35hmnp7jizegltp7@core.my.home> Mail-Followup-To: Maxime Ripard , David Airlie , Daniel Vetter , Chen-Yu Tsai , dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org References: <20190914220337.646719-1-megous@megous.com> <20190918141734.kerdbbaynwutrxf6@gilmour> <20190918152309.j2dbu63jaru6jn2t@core.my.home> <20190918201617.5gwzmshoxbcxbmrx@gilmour> <20190919122058.fhpuafogdq7oir2d@core.my.home> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20190919122058.fhpuafogdq7oir2d@core.my.home> X-My-GPG-KeyId: EBFBDDE11FB918D44D1F56C1F9F0A873BE9777ED X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190919_061247_030154_84B0B559 X-CRM114-Status: GOOD ( 35.85 ) 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: , 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 T24gVGh1LCBTZXAgMTksIDIwMTkgYXQgMDI6MjA6NThQTSArMDIwMCwgbWVnb3VzIGhsYXZuaSB3 cm90ZToKPiBPbiBXZWQsIFNlcCAxOCwgMjAxOSBhdCAxMDoxNjoxN1BNICswMjAwLCBNYXhpbWUg UmlwYXJkIHdyb3RlOgo+ID4gT24gV2VkLCBTZXAgMTgsIDIwMTkgYXQgMDU6MjM6MDlQTSArMDIw MCwgT25kxZllaiBKaXJtYW4gd3JvdGU6Cj4gPiA+IEhpLAo+ID4gPgo+ID4gPiBPbiBXZWQsIFNl cCAxOCwgMjAxOSBhdCAwNDoxNzozNFBNICswMjAwLCBNYXhpbWUgUmlwYXJkIHdyb3RlOgo+ID4g PiA+IEhpLAo+ID4gPiA+Cj4gPiA+ID4gT24gU3VuLCBTZXAgMTUsIDIwMTkgYXQgMTI6MDM6MzdB TSArMDIwMCwgbWVnb3VzQG1lZ291cy5jb20gd3JvdGU6Cj4gPiA+ID4gPiBGcm9tOiBPbmRyZWog SmlybWFuIDxtZWdvdXNAbWVnb3VzLmNvbT4KPiA+ID4gPiA+Cj4gPiA+ID4gPiBUaGVyZSBhcmUg dmFyaW91cyBpc3N1ZXMgdGhhdCB0aGlzIHJlLXdvcmsgb2Ygc3VuOGlfW3V2XWlfbGF5ZXJfZW5h YmxlCj4gPiA+ID4gPiBmdW5jdGlvbiBmaXhlczoKPiA+ID4gPiA+Cj4gPiA+ID4gPiAtIE1ha2Ug c3VyZSB0aGF0IHdlIHJlLWluaXRpYWxpemUgenBvcyBvbiByZXNldAo+ID4gPiA+ID4gLSBNaW5p bWl6ZSByZWdpc3RlciB1cGRhdGVzIGJ5IGRvaW5nIHRoZW0gb25seSB3aGVuIHN0YXRlIGNoYW5n ZXMKPiA+ID4gPiA+IC0gRml4IGlzc3VlIHdoZXJlIERFIHBpcGUgbWlnaHQgZ2V0IGRpc2FibGVk IGV2ZW4gaWYgaXQgaXMgbm8gbG9uZ2VyCj4gPiA+ID4gPiAgIHVzZWQgYnkgdGhlIGxheWVyIHRo YXQncyBjdXJyZW50bHkgY2FsbGluZyBzdW44aV91aV9sYXllcl9lbmFibGUKPiA+ID4gPiA+IC0g LmF0b21pY19kaXNhYmxlIGNhbGxiYWNrIGlzIG5vdCByZWFsbHkgbmVlZGVkIGJlY2F1c2UgLmF0 b21pY191cGRhdGUKPiA+ID4gPiA+ICAgY2FuIGRvIHRoZSBkaXNhYmxlIHRvbywgc28gZHJvcCB0 aGUgZHVwbGljYXRlIGNvZGUKPiA+ID4gPiA+Cj4gPiA+ID4gPiBTaWduZWQtb2ZmLWJ5OiBPbmRy ZWogSmlybWFuIDxtZWdvdXNAbWVnb3VzLmNvbT4KPiA+ID4gPgo+ID4gPiA+IEl0IGxvb2tzIGxp a2UgdGhlc2UgZml4ZXMgc2hvdWxkIGJlIGluIHNlcGFyYXRlIHBhdGNoZXMuIElzIHRoZXJlIGFu eQo+ID4gPiA+IHJlYXNvbiBpdCdzIG5vdCB0aGUgY2FzZT8KPiA+ID4KPiA+ID4gQnVsbGV0IHBv aW50cyBqdXN0IGRlc2NyaWJlIHRoZSByZXN1bHRpbmcgZWZmZWN0L2JlbmVmaXRzIG9mIHRoZSBj aGFuZ2UgdG8gZml4Cj4gPiA+IHRoZSBwaXBlIGNvbnRyb2wgcmVnaXN0ZXIgdXBkYXRlIGlzc3Vl IChzZWUgdGhlIHJlZmVyZW5jZWQgZS1tYWlsKS4KPiA+IAo+ID4gSXQncyBkZWZpbml0ZWx5IG9r IHRvIGhhdmUgbXVsdGlwbGUgcGF0Y2hlcyBuZWVkZWQgdG8gYWRkcmVzcyBhIHNpbmdsZQo+ID4g cGVyY2VpdmVkIGlzc3VlLgo+IAo+IFllcywgYnV0IEkgY2FuJ3Qgc2ltcGx5IHNwbGl0IHRoZSBw YXRjaC4gSW4gb3JkZXIgZm9yIGVhY2ggY2hhbmdlIHRvIHdvcmsgb24gaXRzCj4gb3duLCB0aGV5 J2QgaGF2ZSB0byBiZSBkb25lIGRpZmZlcmVudGx5IHRoYW4gdGhlIGZpbmFsIHJlc3VsdC4KPiAK PiBJIHdvdWxkbid0IG1pbmQgYXQgYWxsIGlmIGl0IHdhcyBqdXN0IGEgc2ltcGxlIHNwbGl0dGlu ZywgYnV0IHlvdSdyZSBhc2tpbmcKPiBmb3IgdG9vIG11Y2ggd29yaywgdGhpcyB0aW1lLCBmb3Ig bm8gYmVuZWZpdCB0aGF0IEkgY2FuIHNlZS4KPiAKPiA+IEEgY29tbWl0IGlzIG5vdCBhYm91dCB3 aGF0IHlvdSdyZSBmaXhpbmcgYnV0IHdoYXQgeW91J3JlIGNoYW5naW5nLiBBbmQKPiA+IHRoZSBm YWN0IHRoYXQgeW91IGhhdmUgdGhhIGJ1bGxldCBsaXN0IGluIHRoZSBmaXJzdCBwbGFjZSBwcm92 ZXMgdGhhdAo+ID4geW91IGhhdmUgbXVsdGlwbGUgbG9naWNhbCBjaGFuZ2VzIGluIHlvdXIgcGF0 Y2guCj4gPiAKPiA+IEFuZCBldmVuIHRoZW4sIHlvdXIgY29tbWl0IGxvZyBtZW50aW9ucyB0aGF0 IHlvdSdyZSBmaXhpbmcgbXVsdGlwbGUKPiA+IGlzc3VlcyAod2l0aG91dCBleHBsYWluaW5nIHRo ZW0pLgo+IAo+IEkgY2FuIHJld29yZCB0aGUgY29tbWl0IG1lc3NhZ2UgaWYgdGhhdCBoZWxwcywg YW5kIHNraXAgdGhlIGJ1bGxldCBsaXN0IGlmIGl0Cj4gaXMgY29uZnVzaW5nLiBUaGVyZSdzIGEg c2luZ2xlIGNvcmUgaXNzdWUgYW5kIHRoYXQgaXMgdGhhdCB0aGUgZHJpdmVyIGRvZXNuJ3QKPiB1 cGRhdGUgdGhlIHBpcGUvY2hhbm5lbCBjb25maWd1cmF0aW9uIGNvcnJlY3RseSBsZWFkaW5nIHRv IGRpc2FibGluZyBvZgo+IGFyYml0cmFyeSBsYXllcnMgKG5vdCBldmVuIHRob3NlIGJlaW5nIHVw ZGF0ZWQgLSB1cGRhdGUgb2YgVUkgbGF5ZXIgbWF5IGRpc2FibGUKPiBWSSBsYXllciBhcyBhIHNp ZGUgZWZmZWN0IGZvciBleGFtcGxlKSBhdCB3cm9uZyB0aW1lcy4gQW5kIG9ubHkgY2hhbmdlcwo+ IG5lY2Vzc2FyeSB0byBkZWJ1Zy9maXggdGhpcyBhcmUgaW5jbHVkZWQuCgpIb3cgYWJvdXQgdGhp czoKCiBBIHByb2JsZW0gd2FzIGZvdW5kIHdoZXJlIGlkZW50aWNhbCBjb25maWd1cmF0aW9uIG9m IHBsYW5lcyBsZWFkcwogdG8gZGlmZmVyZW50IHJlZ2lzdGVyIHNldHRpbmdzIGF0IHRoZSBIVyBs YXllciB3aGVuIHVzaW5nIGEgWCBzZXJ2ZXIKIHdpdGggbW9kZXNldHRpbmcgZHJpdmVyIGFuZCBv bmUgcGxhbmUgbWFya2VkIGFzIGEgY3Vyc29yLgogIAogT24gZmlyc3QgcnVuIG9mIHRoZSBYIHNl cnZlciwgb25seSB0aGUgYmxhY2sgc2NyZWVuIGFuZCB0aGUgbGF5ZXIKIGNvbnRhaW5pbmcgdGhl IGN1cnNvciBpcyB2aXNpYmxlLiBTd2l0Y2hpbmcgdG8gY29uc29sZSBhbmQgYmFjawogY29ycmVj dHMgdGhlIHNpdHVhdGlvbi4KIAogSSBoYXZlIGR1bXBlZCByZWdpc3RlcnMsIGFuZCBmb3VuZCBv dXQgdGhpczoKCiAoSW4gYm90aCBjYXNlcyB0aGVyZSBhcmUgdHdvIGVuYWJsZWQgcGxhbmVzLCBw bGFuZSAxIHdpdGggenBvcyAwIGFuZAogcGxhbmUgMyB3aXRoIHpwb3MgMSkuCiAKIDEpIEZpcnN0 IFhvcmcgcnVuOgogCiAgIDB4MDExMDEwMDAgOiAwMDAwMDIwMQogICAweDAxMTAxMDgwIDogMDAw MDAwMzAKIAogICBCTERfRklMTF9DT0xPUl9DVEw6IChha2EgU1VOOElfTUlYRVJfQkxFTkRfUElQ RV9DVEwpCiAgICAgUDFfRU4KIAogICBCTERfQ0hfUlRDVEw6IChha2EgU1VOOElfTUlYRVJfQkxF TkRfUk9VVEUpCiAgICAgUDBfUlRDVEwgY2hhbm5lbDAKICAgICBQMV9SVENUTCBjaGFubmVsMwog CiAyKSBBZnRlciBzd2l0Y2ggdG8gY29uc29sZSBhbmQgYmFjayB0byBYb3JnOgogCiAweDAxMTAx MDAwIDogMDAwMDAzMDEKIDB4MDExMDEwODAgOiAwMDAwMDAzMQogCiAgIEJMRF9GSUxMX0NPTE9S X0NUTDoKICAgICBQMV9FTiBhbmQgUDBfRU4KIAogICBCTERfQ0hfUlRDVEw6CiAgICAgUDBfUlRD VEwgY2hhbm5lbDEKICAgICBQMV9SVENUTCBjaGFubmVsMwogCiBXaGF0IGhhcHBlbnMgaXMgdGhh dCBzdW44aV91aV9sYXllcl9lbmFibGUoKSBmdW5jdGlvbiBtYXkgZGlzYWJsZQogYmxlbmRpbmcg cGlwZXMgZXZlbiBpZiBpdCBpcyBubyBsb25nZXIgYXNzaWduZWQgdG8gaXRzIGxheWVyLCBiZWNh dXNlCiBvZiBpbmNvcnJlY3Qgc3RhdGUvenBvcyB0cmFja2luZyBpbiB0aGUgZHJpdmVyLgogCiBJ biBwYXJ0aWN1bGFyLCBsYXllciAxIGlzIGNvbmZpZ3VyZWQgdG8genBvcyAwIGFuZCB0aHVzIHVz ZXMgcGlwZSAwLgogV2hlbiBsYXllciAzIGlzIGVuYWJsZWQgYnkgWCBzZXJ2ZXIsIHN1bjhpX3Vp X2xheWVyX2VuYWJsZSgpIHdpbGwgZ2V0CiBjYWxsZWQgd2l0aCBvbGRfenBvcz0wIHpwb3M9MSwg d2hpY2ggd2lsbCBsZWFkIHRvIGRpc2FibGluZyBvZiBwaXBlIDAuCiAKIEluIGdlbmVyYWwgdGhp cyBpc3N1ZSBjYW4gaGFwcGVuIHRvIGFueSBsYXllciBkdXJpbmcgZW5hYmxlIG9yIHpwb3MKIGNo YW5nZXMgb24gbXVsdGlwbGUgbGF5ZXJzIGF0IG9uY2UuCiAKIFRvIGNvcnJlY3QgdGhpcyB3ZSBu b3cgcGFzcyBwcmV2aW91cyBlbmFibGVkL2Rpc2FibGVkIHN0YXRlIG9mIHRoZQogbGF5ZXIsIGFu ZCBwYXNzIHJlYWwgcHJldmlvdXMgenBvcyBvZiB0aGUgbGF5ZXIgdG8KIHN1bjhpX3VpX2xheWVy X2VuYWJsZSgpIGFuZCByZXdvcmsgdGhlIHN1bjhpX3VpX2xheWVyX2VuYWJsZSgpIGZ1bmN0aW9u CiB0byByZWFjdCB0byB0aGUgc3RhdGUgY2hhbmdlcyBjb3JyZWN0bHkuIEluIG9yZGVyIHRvIG5v dCBjb21wbGljYXRlCiB0aGUgYXRvbWljX2Rpc2FibGUgY2FsbGJhY2sgd2l0aCBhbGwgb2YgdGhl IGFib3ZlIGNoYW5nZXMsIHdlIHNpbXBseQogcmVtb3ZlIGl0IGFuZCBpbXBsZW1lbnQgYWxsIHRo ZSBjaGFuZXMgYXMgcGFydCBvZiBhdG9taWNfdXBkYXRlLCB3aGljaAogYWxzbyByZWR1Y2VzIHRo ZSBjb2RlIGR1cGxpY2F0aW9uLgogCiBUbyBtYWtlIHRoaXMgYWxsIHdvcmssIGluaXRpYWwgenBv cyBwb3NpdGlvbnMgb2YgYWxsIGxheWVycyBuZWVkIHRvIGJlCiByZXN0b3JlZCB0byBpbml0aWFs IHZhbHVlcyBvbiByZXNldC4KCgo+IEkgbWF5IHRyeSBnZW5lcmF0aW5nIGEgbmljZXIgcGF0Y2gg d2l0aCBhIGRpZmZlcmVudCBkaWZmIG9wdGlvbnMsIGlmIGl0IG1ha2VzIGl0Cj4gbW9yZSByZWFk YWJsZSBmb3IgcmV2aWV3Lgo+IAo+ID4gPiBJIGNhbiBtYXliZSBzcGxpdCBvZmYgdGhlIGZpcnN0 IGJ1bGxldCBwb2ludCBpbnRvIGEgc2VwYXJhdGUgcGF0Y2guIEJ1dAo+ID4gPiBJIGNhbid0IGd1 YXJhbnRlZSBpdCB3aWxsIG5vdCBtYWtlIHRoZSBvcmlnaW5hbCBpc3N1ZSB3b3JzZSwgYmVjYXVz ZSBpdCBtaWdodAo+ID4gPiBoYXZlIGJlZW4gaGlkaW5nIHRoZSBvdGhlciBpc3N1ZSB3aXRoIHJl Z2lzdGVyIHVwZGF0ZXMuCj4gPiA+Cj4gPiA+IFRoZSByZXN0IGlzIGp1c3QgYSByZXN1bHQgb2Yg dGhlIHNpbmdsZSBsb2dpY2FsIGNoYW5nZS4gSXQgZG9lc24ndCB3b3JrCj4gPiA+IGluZGl2aWR1 YWxseSwgaXQgYWxsIGhhcyB0aGUgZ29hbCBvZiBmaXhpbmcgdGhlIGlzc3VlIGFzIGEgd2hvbGUu Cj4gPiA+Cj4gPiA+IElmIEkgd2VyZSB0byBzcGxpdCBpdCBJIHdvdWxkIGhhdmUgdG8gYWN0dWFs bHkgcmUtaW1wbGVtZW50IC5hdG9taWNfZGlzYWJsZQo+ID4gPiBjYWxsYmFjayBvbmx5IHRvIHJl bW92ZSBpdCBpbiB0aGUgbmV4dCBwYXRjaC4gSSBkb24ndCBzZWUgdGhlIGJlbmVmaXQuCj4gPiAK PiA+IFlvdXIgY29tbWl0IGxvZyBzYXlzIHRoYXQgeW91IHJlbW92ZSBhdG9taWNfZGlzYWJsZS4g V2h5IHdvdWxkIHlvdQo+ID4gcmVtb3ZlIGl0LCB0byBhZGQgaXQgYmFjaywgdG8gcmVtb3ZlIGl0 IGFnYWluPwo+IAo+IEJlY2F1c2UgaWYgSSByZW1vdmUgaXQgSSBuZWVkIHRvIHJlLWltcGxlbWVu dCB0aGUgZnVuY3Rpb25hbGl0eSBpbiB0aGUgdXBkYXRlCj4gY2FsbGJhY2suIFRoZSBjb3JlIHdp bGwgY2hhbmdlIHdoYXQgaXMgY2FsbGVkIGJhc2VkIG9uIHByZXNlbmNlIG9mIGNhbGxiYWNrcy4K PiBJdCdzIG5vdCBhIHNpbXBsZSByZW1vdmFsLgo+IAo+IElmIEkgZmlyc3QgaW1wbGVtZW50IHRo ZSBuZXcgc3VuOGlfW3V2XWlfbGF5ZXJfZW5hYmxlIGFuZCB1cGRhdGUgY2FsbGJhY2ssCj4ga2Vl cGluZyBhIGRpc2FibGUgY2FsbGJhY2sgd291bGQgbm90IHdvcmssIGJlY2F1c2UgdGhlIG5ldyB1 cGRhdGUgY2FsbGJhY2sKPiB3aWxsIG9ubHkgd29yayBpZiBkaXNhYmxlIGNhbGxiYWNrIGlzIG5v dCBkZWZpbmVkIChiZWNhdXNlIGl0IGl0IGlzLCB0aGVuCj4gdGhlIGRybSBjb3JlIHdpbGwgbm90 IGNhbGwgdGhlIHVwZGF0ZSBjYWxsYmFjayBpbiBhbGwgY2FzZXMgdGhhdCBJIG5lZWQpLgo+IAo+ IHJlZ2FyZHMsCj4gCW8uCj4gCj4gPiBNYXhpbWUKPiAKPiAKPiAKPiA+IF9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gPiBsaW51eC1hcm0ta2VybmVsIG1h aWxpbmcgbGlzdAo+ID4gbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCj4gPiBo dHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJu ZWwKPiAKPiAKPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f Xwo+IGxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0Cj4gbGludXgtYXJtLWtlcm5lbEBsaXN0 cy5pbmZyYWRlYWQub3JnCj4gaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0 aW5mby9saW51eC1hcm0ta2VybmVsCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2Vy bmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1h bi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==