Received: by 2002:a05:6a10:16a7:0:0:0:0 with SMTP id gp39csp175373pxb; Wed, 18 Nov 2020 01:14:52 -0800 (PST) X-Google-Smtp-Source: ABdhPJy+bbmH29S9rdZ32bTHJMGmV4lS/GxXqvIbRbuFzwLd8S7MuqD1P42RP4QMkKLc8aZ0XH5v X-Received: by 2002:aa7:db0c:: with SMTP id t12mr20969392eds.41.1605690892387; Wed, 18 Nov 2020 01:14:52 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1605690892; cv=none; d=google.com; s=arc-20160816; b=uFAJ3xVQu3Qc+cdKLTORDo/VHdrwQWyj0osI988T0EKyujzAi/2RYfOSNUFis7kERx +IGUlLSnRXjO48CaSM5r72F2zuJpmHMsw7fgSt1Utj8APrb3PK1nRti5IGfSogmcI4jw WcLRyRyJ6iA2TLAqhyKAMy9+chLlLrLXFbarpBmuiHO0R8+DXzSW4vEQvQXBd0MlMX9F QOsCGsJsI8KKFLVBo5VAx7RDngGIRPdG8QIyzdrXoRyTRIiH30raeZYMvai90NLmbNMV xSjEuSDpWjrHNCjXKHPZIPJW5mjyhi0w8U/eSYQ1M2knGGVoCaKs/GZVQX/JwmIdJDhA 3U6g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:mime-version:user-agent:date :message-id:subject:from:references:cc:to; bh=GrJ+VaRfVeBUo9iW3iNMvIBXHd0mHip4GehvxQSXGSQ=; b=eTgtc5F4Ue8BaixGXSBJOor2OfqTyjL+3dIdbaa7MfPeThPI9KcXfCNtxQzPGcxpXH uT3ddjvH8MmkLNHmRCE/eVNaqS2YTrVDDQf6BURojPdKEZXbTxAtATyAPZylTXRO3o8+ mfTg7zVSfJuNiAGIiVLVfK7bvDBOnxbS+C5S1uT+AhiWDlFOlVyfKVcynUcTHTBY790N Ez6VZB5F7SMB/w7X/68prunfU44dHrt/pp6Q3pr9wsDzsjbC3vgFiF6fF/9A2QxBPqTN bVamsKGhXJZiMikBJiNTEnXx1GoWGsBn92COoOU6wiArMXBZwjHIxR61mFbXRafO565B vbDw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id o13si8672723ejb.377.2020.11.18.01.14.28; Wed, 18 Nov 2020 01:14:52 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726471AbgKRJM5 (ORCPT + 99 others); Wed, 18 Nov 2020 04:12:57 -0500 Received: from mx2.suse.de ([195.135.220.15]:44454 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726172AbgKRJM4 (ORCPT ); Wed, 18 Nov 2020 04:12:56 -0500 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.221.27]) by mx2.suse.de (Postfix) with ESMTP id 08D59ABDE; Wed, 18 Nov 2020 09:12:54 +0000 (UTC) To: Daniel Vetter Cc: Leo Ruan , Pengutronix Kernel Team , David Airlie , Sascha Hauer , Linux Kernel Mailing List , dri-devel , NXP Linux Team , Mark Jonas , Shawn Guo , Linux ARM References: <20201117155229.9837-1-mark.jonas@de.bosch.com> From: Thomas Zimmermann Subject: Re: [PATCH] drm: imx: Move fbdev setup to before output polling Message-ID: <68af913c-9f4e-73b5-a2cb-8692902a2847@suse.de> Date: Wed, 18 Nov 2020 10:12:52 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.4.0 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="y4BYlABVEYysq6OMDXMoyK4sH88S66Nxu" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --y4BYlABVEYysq6OMDXMoyK4sH88S66Nxu Content-Type: multipart/mixed; boundary="WMakGiMkDwAFduzZqhcr2mj05JJZMstbs"; protected-headers="v1" From: Thomas Zimmermann To: Daniel Vetter Cc: Leo Ruan , Pengutronix Kernel Team , David Airlie , Sascha Hauer , Linux Kernel Mailing List , dri-devel , NXP Linux Team , Mark Jonas , Shawn Guo , Linux ARM Message-ID: <68af913c-9f4e-73b5-a2cb-8692902a2847@suse.de> Subject: Re: [PATCH] drm: imx: Move fbdev setup to before output polling References: <20201117155229.9837-1-mark.jonas@de.bosch.com> In-Reply-To: --WMakGiMkDwAFduzZqhcr2mj05JJZMstbs Content-Type: multipart/mixed; boundary="------------6CCE5A54CD10E6493E924170" Content-Language: en-US This is a multi-part message in MIME format. --------------6CCE5A54CD10E6493E924170 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: quoted-printable Hi Am 18.11.20 um 09:59 schrieb Daniel Vetter: > On Wed, Nov 18, 2020 at 9:10 AM Thomas Zimmermann = wrote: >> >> Hi >> >> Am 17.11.20 um 16:52 schrieb Mark Jonas: >>> From: Leo Ruan >>> >>> The generic fbdev has to be setup before enabling output polling. >>> Otherwise the fbdev client is not ready to handle delayed events. >>> >>> Since f53705fd, the generic fbdev is setup after the output polling >>> init. During fbdev setup, when fbdev probes attached outputs and a >>> status changes from unknown to connected, the delayed event is >>> marked and the output_poll_work thread is scheduled without delay. >>> If output_poll_execute() is runs immediately, the delayed event >>> is handled without actually polling the output because the fbdev is n= ot >>> registered yet. So the delayed event is lost. This leads to a dark >>> screen until a KMS application (or fbcon) sets the screen mode. >>> >>> This patch fixes the issue by moving the setup of generic fbdev befor= e >>> initializing and enabling output polling. >>> >>> Signed-off-by: Leo Ruan >>> Signed-off-by: Mark Jonas >>> --- >>> drivers/gpu/drm/imx/imx-drm-core.c | 8 ++++++-- >>> 1 file changed, 6 insertions(+), 2 deletions(-) >>> >>> diff --git a/drivers/gpu/drm/imx/imx-drm-core.c b/drivers/gpu/drm/imx= /imx-drm-core.c >>> index 9bf5ad6d18a2..2665040e11c7 100644 >>> --- a/drivers/gpu/drm/imx/imx-drm-core.c >>> +++ b/drivers/gpu/drm/imx/imx-drm-core.c >>> @@ -240,14 +240,18 @@ static int imx_drm_bind(struct device *dev) >>> legacyfb_depth =3D 16; >>> } >>> >>> + /* >>> + * The generic fbdev has to be setup before enabling output pol= ling. >>> + * Otherwise the fbdev client is not ready to handle delayed ev= ents. >>> + */ >>> + drm_fbdev_generic_setup(drm, legacyfb_depth); >>> + >>> drm_kms_helper_poll_init(drm); >>> >>> ret =3D drm_dev_register(drm, 0); >>> if (ret) >>> goto err_poll_fini; >>> >>> - drm_fbdev_generic_setup(drm, legacyfb_depth); >>> - >> >> This does not work well. fbdev is supposed to be another regular DRM >> client. It has to be enabled after registering the DRM device. >> >> I'd rather improve fbdev or the driver to handle this gracefully. >=20 > Yeah I'm not understanding the point here. Once fbcon is running, you > have a screen. Any fbdev userspace client also should do a modeset > first. And if they dont and it's expected uapi for fbdev chardev that > the display boots up enabled, then we need to fix that in the fbdev > helpers, not through clever reordering in drivers so that a > side-effect causes a modeset. >=20 > Note that this is a bit tricky since fbdev shouldn't take over the > screen by default, so we'd need to delay this until first open of > /dev/fb0. And we should probably also delay the hotplug handling until > the first open. fbcon also fake-opens the fbdev file, so it's the same > code path. As far as I understand the commit message, the problem is that the=20 display blanks out after registering the driver. And fbdev somewhat=20 mitigates this by doing an early modeset. Users with fbdev disabled=20 (most of them in embedded, I guess) would still run into the issue until = userspace makes a modeset. Mark, if that's the case, an option might be to pick up the device=20 settings instead of calling drm_mode_config_reset(). The driver would=20 then continue to display whatever is on the screen. Best regards Thomas > -Daniel >=20 >> >> Best regards >> Thomas >> >>> return 0; >>> >>> err_poll_fini: >>> >> >> -- >> Thomas Zimmermann >> Graphics Driver Developer >> SUSE Software Solutions Germany GmbH >> Maxfeldstr. 5, 90409 N=C3=BCrnberg, Germany >> (HRB 36809, AG N=C3=BCrnberg) >> Gesch=C3=A4ftsf=C3=BChrer: Felix Imend=C3=B6rffer >=20 >=20 >=20 --=20 Thomas Zimmermann Graphics Driver Developer SUSE Software Solutions Germany GmbH Maxfeldstr. 5, 90409 N=C3=BCrnberg, Germany (HRB 36809, AG N=C3=BCrnberg) Gesch=C3=A4ftsf=C3=BChrer: Felix Imend=C3=B6rffer --------------6CCE5A54CD10E6493E924170 Content-Type: application/pgp-keys; name="OpenPGP_0x680DC11D530B7A23.asc" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="OpenPGP_0x680DC11D530B7A23.asc" -----BEGIN PGP PUBLIC KEY BLOCK----- xsBNBFs50uABCADEHPidWt974CaxBVbrIBwqcq/WURinJ3+2WlIrKWspiP83vfZKaXhFYsdgX= H47 fDVbPPj+d6tQrw5lPQCyqjwrCPYnq3WlIBnGPJ4/jreTL6V+qfKRDlGLWFjZcsrPJGE0BeB5B= bqP 5erN1qylK9i3gPoQjXGhpBpQYwRrEyQyjuvk+Ev0K1Jc5tVDeJAuau3TGNgah4YchdHm3bkPj= z9E ErV85RwvImQ1dptvx6s7xzwXTgGAsaYZsL8WCwDaTuqFa1d1jjlaxg6+tZsB9GluwvIhSezPg= nEm imZDkGnZRRSFiGP8yjqTjjWuf0bSj5rUnTGiyLyRZRNGcXmu6hjlABEBAAHNKFRob21hcyBaa= W1t ZXJtYW5uIDx0emltbWVybWFubkBzdXNlLmNvbT7CwI4EEwEIADgCGwMFCwkIBwIGFQoJCAsCB= BYC AwECHgECF4AWIQRyF/usjOnPY0ShaOVoDcEdUwt6IwUCXvxIWAAKCRBoDcEdUwt6I+aZB/9ih= Onf G4Lgf1L87cvoXh95/bnaJ6aQhP6/ZeRleuCXflnyDajlm3c9loQr0r2bQUi7JeYwUKbBab2QS= GJm DMRGlLMnmzWB8mHmZ6bHAu+2Sth8SraE42p6BB9d8dlYEID+dl/D/xUBeulfkck5rloGtYqDi= +1Q DfkEZJaxVSZ6FFkXuQi/G9qcI4iklN2nv02iQ7mZe8WYAysix6s/6vIobhirEBreclSNxXqis= p8n 91+v855JC11EgRdUXMRK81IAaCKXP8zLx3ixku7mvP9Om61yerHSbeU2HZbIggZYQlFh6llJm= zF1 CjCWgPTJyk4t4kMTcNOw5ykD47vU/KW+wl0EEBECAB0WIQQn6OOmnzvP/7ktjmoud6EwEfXTw= gUC WzodVwAKCRAud6EwEfXTwidvAKDkOADDHfI0QNXqAZcg6i1kOndAYACeLXHBwpjnumkPSyoab= IiL +he8r3zCwHMEEAEIAB0WIQQeXZghmQijlU7YzFiqUDvJrg9HpwUCWznxsQAKCRCqUDvJrg9Hp= 42f CADIvsZcAd04PDFclRltHr2huy6s7+ZZA6PgYlMblEBh4bJA+dNPBTvzpJ7FJv/bmHOa+phWy= Urj EpfFGuOKGuWAfzgVAEu52fMrW3/mm+O26z1AKIu8hiZ/x9OAe4AM71ZO2lZrV1/53ZdzWnRuO= 45N GQcotU8oeVfT9okAfmozmWMmIMq7Q0K6bV8W3qiD5XfDNxjr2caxc/9WX1bZPUo3n0H23MNaA= Tpy Oz732UtDh6sKUAB1RfzBBd/REbjHD7+quwJGAdRScyDRncX1vNb2+wihy0ipA69XY3bkhR5iD= u5r A9enuiMe6J1IBMI1PZh+vOufB/M6cd2D9RULIJaJwsBzBBABCAAdFiEEuyNtt7Ge78bIRx1op= /N8 GYw5MYEFAls6MrsACgkQp/N8GYw5MYEnLQf/dwqlDJVQL2q+i8FFaqTMAm0n9jLRV6pN8JxFH= j0g voyWUOnQuNdAFgtKd26ZhN8NkLoSMO8E19eBPfLoBIFK5yNNVmRHAZm07MzGbA0uNWINJhmdR= bZM RMh0nneXjcEU/IvUmd8TPFTAd24X2mbzHgcaHMLJSVx1ohd4alRJXHIqDobKmiVwekyPnInJn= zWw iuZUkIotTkQple1PT/dF3S+KtPXBL6ldQ4NkAeCjsz4wnzSa9+VKOxEhiHM0PMzXSbkCMP+4m= Xy9 RMplBw9Dm9hN2PSouBPifIrSodiiSWZYXOEkzLiBAB0frCKR63Dnx9kvjCD9Pz5wLd/70rjqI= cLA jgQTAQgAOAIbAwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgBYhBHIX+6yM6c9jRKFo5WgNwR1TC= 3oj BQJftODHAAoJEGgNwR1TC3ojZSIIAIV3makffp4P4leU8JSLt0aTNewsOhy7VQzKUtlCw3PKD= 3l/ SuymZhQKgH+n6sijzFauZnZ+x0T+Oy+dDVZb3sNJuuMUDIHw18EO9daZBMcueaS54FGe73lAp= HUl 7nxyocCxoqIG8+fP+75itV/ls2TSh5rJvjLvHC8J3NqfGlJ/jlSKrQUnzFbXfE5KGWiKNAn+I= 1a2 EE0I7uLpYgkdb8hcjtV9Rxr2ja+GWOaSoqB29P5GUzipkWo4144Q16JBO6QP2R9y/1ZK9VqH2= 5T8 lTKocLAaHCEdpDqY5KI15as9tIxlI1Vh+eqhTh/gwEm1ykO1gmrQ1zvGLDMB1EE6El3NJ1Rob= 21h cyBaaW1tZXJtYW5uIDx0emltbWVybWFubkBzdXNlLmRlPsLAjgQTAQgAOAIbAwULCQgHAgYVC= gkI CwIEFgIDAQIeAQIXgBYhBHIX+6yM6c9jRKFo5WgNwR1TC3ojBQJe/EheAAoJEGgNwR1TC3ojq= RgI AIoegtTp1prPzfHgTAuEPd8v58ssHubwi9tg69a8IJ+iMNozhs4iUou84WOLBJNjSieXHZRa8= fJj //2/sTuABn38AQ9FcKX9/B49hrdCo6c0WHHKqlPrSTzuXNKYyOdmSFd/pDhBb2Bn5DTxxH5RP= m/N U/C9nUlwi7Y+FgBlDNa5h592wmJfv0cJAfvF56C+QL65jHFOFIW9xSaTOAxxMXHGJHXki6Iwa= aTg s7QQlKQcd5XvvED1bwLyQ7rq+MEZo5N7IygpQMM3qqGMlCnDdyQ3W95rd0HCWpfa0oVRCOwdu= SL3 5hG7ONqBpvBj8z5GjSbt4HLJGvpeT0k37qzRExrCXQQQEQIAHRYhBCfo46afO8//uS2Oai53o= TAR 9dPCBQJbOh1XAAoJEC53oTAR9dPC05AAoIy0HQ2DBDYugQ42P4HfyxfZTIvKAJ0fqNBcBFW9S= tbR DEP9cfpNVOv8YMLAcwQQAQgAHRYhBB5dmCGZCKOVTtjMWKpQO8muD0enBQJbOfGzAAoJEKpQO= 8mu D0enL0wIAM2NTeUDCofBAkbWHGTZopclefbh0xGPYQEfttNyalp0hn1CrVO7OsX5eTjRqgyOa= 1C5 OAsNghCM4PUmrfv5cZ9+sNn9bRM50uVW9IFRlq8wwBY4+7QejJ5gs7DW/0tZIMZ6iTGKK0WEO= 7gd 2K9hXadPBScTdIqXeWH82meiqElnEQL+K9UeGUBrku+1EQIOxwziKwTDlTvhyJ+xmEKj0uWRc= Ocl 27xLS9XOWPGXcNQBtlZhF8e/E1kFRt5CPP5UBdUCN8qydUadseXivSNDiYob9dyJSFt7G0Bq4= /ac Ret5ANtGRWsp8xYJQRossRMWL0w9P8SiIc2IY/JrQrpz29nCwHMEEAEIAB0WIQS7I223sZ7vx= shH HWin83wZjDkxgQUCWzoywAAKCRCn83wZjDkxgQaDCACyFuBLQWNvLT8GTDqTf/gETzmtoEM6Y= r8O 4jbYg05xiFzAqMZctQsm3zHakx2JrimxDvQJRQJQzp5ICJ7J/BOuSL4FE1SPeQIfjm4jyBZGH= P/W vgHsT5e3+ZCPePPZO+3irarTKVhaaP70Tpka6EsOCZzO6L8D6tUDkhxMX0ymy7p8w9Yt1eD0o= Ume mxrKdS1ulpNJUTBw7gJN8bMowVnycEm6wntxOjrCxuwbkKhFLdn0ejcXQ0UkfbUFKfU64gGBu= S53 ZlM8XlOhQEIw/FrdXszhR+Tg3Ag130cmJhOrghgOBLzvJfUd6OvDT5VIz0QGbAm8SWlAIIms1= 9Z8 kBsLwsCOBBMBCAA4AhsDBQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAFiEEchf7rIzpz2NEoWjla= A3B HVMLeiMFAl+04McACgkQaA3BHVMLeiPHXAf/SEoZa6CKoOAs1ctEP/hN8cEQqbEiuZ+71nm3u= /BQ p/CEUvqGq+iVc8kkpClDbPz5fa9mb+yWwufsnXKOs6ygmEoAEOL7dBZZIaRobBEkB09VXIkx8= lE0 00grBVtToHUGRfZcMoMZ98XhPGU6lJDN200j/2CV46hQDz6PLySecNjOME05mosbYW5N2JwFd= uXP Qx++DjWB32QLBhcOcP3WslTy3PKVe/TcTvk0JpPFMz4UFc+awBVhDgZiGGAW3xLZRYyhpoAEs= N7u XkV2ct0MRxuZ3y4tTYJobhbZwutRojiPPZduRw9CSpNDcQHruFiSOIQTpnLeCA6K2JAZyqmP/= 87A TQRbOdLgAQgAxiY/gz9X5PlFjlq3+DutR02wuFa/UA9iuH1FB584Nges1EdQT16ixhtPpcyvJ= H2F PxeUY5hHApbCJAGhZIOJMyj9eLb2NSefgFd8janHYNNfBzbYsq0sCBNGM/6ptTrdjTGdA3b1Q= YNt iDLIrnUNbcfQh/Zrck2yF4AAr5dz1tqPQsYhzxP26IRYcGcIf5F2GABOdZYYp0N6BRHkGQN8O= Dk7 8UhLKYkEfHYPKiSW/mDgHOSCpOrCZpjOyXxTFkq9trGrTNt6EN1ryW+EVeh00UwCBMsmUu4Ng= 4Ys rYDButLdKnQARuSl0kFvjipWUablsClmi4d4n/6f7uvXb6Wp2wARAQABwsB8BBgBCAAmFiEEc= hf7 rIzpz2NEoWjlaA3BHVMLeiMFAls50uACGwwFCQPCZwAACgkQaA3BHVMLeiOl9wgAifA/k6VwQ= qiR OccKINPPg6fLgacdE/Z9cBNBkIrGa7gAljaH2J/D01/ZOMJnoAy8Le2EA3SsUOPnk32XizUKl= oOj gn7R+Sse7I1pydPbToJ4lXUTs1ie3FSf4tKJGs53LCfp6uPFGL0RhNUsIdwOEESMqYVl+DgAz= gZk xZfWWDT54dt3mgvVqzbxa+8j+4hozJXxFvJei3Wv/xAuVaV1Tc2tMXmntMxTbLdkfaZ/my5Io= cAy 1sTiMonxkcU6jcaEuCNWsFYcT0lc7TzEqSAP7Dq/zf6eiawS5/oLotiupj+2xm/IRfrM3wK2K= s90 9a79Vc1FgCX+Vq3uVIjcfbqqscLAdgQYAQgAIAIbDBYhBHIX+6yM6c9jRKFo5WgNwR1TC3ojB= QJf tOH6AAoJEGgNwR1TC3ojVSkIALpAPkIJPQoURPb1VWjh34l0HlglmYHvZszJWTXYwavHR8+k6= Baa 6H7ufXNQtThRyIxJrQLW6rV5lm7TjhffEhxVCn37+cg0zZ3j7zIsSS0rx/aMwi6VhFJA5hfn3= T0T trijKP4ASAQO9xD1Zk9/61JWk8OysuIh7MXkl0fxbRKWE93XeQBhIJHQfnc+YBLprdnxR446S= h8W n/2DYa8cavuWf2zrB6cZurs048xe0UbSW5AOSo4V9M0jzYI4nZqTmPxYyXbm30Kvmz0rYVRai= tYJ 4kyYYMhuULvrJDMjZRvaNe52tkKAvMevcGdt38H4KSVXAylqyQOW5zvPc4/sq9fOwU0EX7ThE= wEQ ANJiTIb/nQ+MPgIBsSfBBhmXrVFUwFveO6DWPZ0M+Y5xBJhvDukosstSgcLCdld4SFF2JnnCo= yh9 boM2j2Ksd5wNzTzXlo3lEzFRAipftboviUjap0qxoRwy1hBV3Ft1/VyNwwYY7qjGVATQU7cIT= /zL gb+Sd0NPQA8r2NvpJq1MnI8nFfA2ZH4diuRtavhEBUzp63SlCYxnyxqT5AQzSQGUpsjSyh1A5= ezt j1pwxgnkX7F9ZT0lUBo6zZM6ZBq8Nkyvox46l79QoWMBm9y+/nIXy/uXdT6RaumPjBzVttGmk= Onm TlGUJyQAndAE1boib9iWCJ4kIr2ezRKjXJXGuaM1m7hSfdQYWed0j52+nW9qGSNNk1GjYXM8Z= SWT agX6O5mfbpzRgBBK/XoE9NWRNAa4V+tUX4/vqqDl0m+O4F2GYs6Eu7WLredRgwjDuMF/VCKvQ= fr3 yjIt90Zi10cHQw3khdJWmSDKYgenpvsffo4x56biifOh6IxS/whf5/BAx4nx8GyX7JO0DUnUu= ieC NfEGRu8QbYBSOkO/vdm4xy7RZwdzlqN8zjCLFOCG346Bnsx3ku2lNtX6qZoajmfD4oO6N0Xds= 2pE wjufCfJW9sCLdBmqLD5OvsRljyv7vt5w28XSF1tyhQaxIs+8sFJtwfCliduffq56FcFrEXCxs= LQr ABEBAAHCwqwEGAEIACAWIQRyF/usjOnPY0ShaOVoDcEdUwt6IwUCX7ThEwIbAgJACRBoDcEdU= wt6 I8F0IAQZAQgAHRYhBMZ3Zv36bjFHcGBRaJYfxNxEKL/gBQJftOETAAoJEJYfxNxEKL/gkygQA= LQH pXm45ZfMCDx7u/d7rRH/R7EfEV5OAoS981IkzbTgrb9z6YYfhQqH+R2ImgoX/Lou7zSjyd22/= IaZ AnTKHKkXIFIM1uB144dqAi3tW/Bei/CSdiD7DY1q92Ebl6e+Gpf3TZdATSY00fVeLMNFnjbbz= CVX 9+LEKYARNm7kYogVJMc5CuVmXBn9FFF3cioRvpuals8llsFc4WiUBJfDfOzjXExqv3OMtJj0s= qlK sXdnLkXbtAmEvFaxqUuO1ZwTCTGflrn/g4C8Cg0ifk0wZGgGYRindkJE1vOQZPaDI7GtNxJ+D= sx4 fL/8tf7Wuk3TZ6t/ofKhjq8sUVCVhnlyd/3ujruDu/PhwwYBsHjNn+PmHeCCRJuOWwKapdfjH= 9nt sHXTvyXBB2D3H7Oj7S/HOTXRNTUWhaxICKtq+XDSuJKOv7CNevkjMF4ybQDsrUxnaWd76YqNP= vZv PYoTqKzKukifjGXMsxC6HU4K2GscpvoaIk7glaD+NYi3fIGi/gR0UNc6cmXtOrYKSnCsNOwcO= CJL DjEr6YdbdAXO2wxCLqnupo8JRJgA8hjjHM5OoTGEyP/c+DKDqFO90YilX1XN8xchHrw+bDv0E= Zm0 RZpVdL7WNr7qQE4UhDfuyo4Gis4Z+npzoOL4g3yaQQfK32zZD9iqk9152b7ny2Ke5oFIF5SSa= EwH /2tLNBevzgzWuEB6FtqoMT5RjDyx+xBeImRlhnP0EenRh+EP0nmLCAaFiP4tTp1bX54SyByp8= wcN 7F2+v2Sgdd64w1pdrjT74Zf1xj0NTxEdt5jEaPfl5Vjv3cXiB8ACwPkMIXmkJx3uaGJynl4Os= irb nzzviEzvDVpLAxL7Qr6imlKUh92iAoz+XxEDqgMZnJJOTDFdDxEBhv911VzlRraDNdxw4MHMm= 5Nr 5pj4HGYh3PigzNo0KIreB50YqhGOesaC4Q75gv8mLc2Ec5dEq79BVMUOaCmYDShBN9j6JovNs= WSR 5YP3tXi+jZ+VnyKLft9wo1fh1oYadFEVSHgGsEY=3D =3DfoRs -----END PGP PUBLIC KEY BLOCK----- --------------6CCE5A54CD10E6493E924170-- --WMakGiMkDwAFduzZqhcr2mj05JJZMstbs-- --y4BYlABVEYysq6OMDXMoyK4sH88S66Nxu Content-Type: application/pgp-signature; name="OpenPGP_signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="OpenPGP_signature" -----BEGIN PGP SIGNATURE----- wsF5BAABCAAjFiEExndm/fpuMUdwYFFolh/E3EQov+AFAl+05ZQFAwAAAAAACgkQlh/E3EQov+B3 NxAAj2lQLPh9xBa2ZyVNvl+EF2j0hfDKNqyfTWFl0A3+eb2DdrfCjI/ZfciB5Y5VVix/+A+ncUES +FjkgBq2jpW+BZ1KgYgvRrVktv0teFb8LYBLzzQUF0+Vv3nSwvS5MFwz7g4aJ8LF79yZX1vm5IdA ueMI89QQWnbPS1FeTb0vPPgzzgh1hO8sxmmItHvyS7wBKIvhYGGt4bC4VSyOK58+FMvmF4cfXoZM 85Ud5DDtzd50VohKWwUjP3CiWAK/OGaN2IKhDtOHxWkXXzp35v2ElwvAQkdwGINlEqCuZSGoXEdL 7CoHmeyGPquFgHuMfjmv1aZzfFBX7wm0BiCqnmy5oD/tytx3UJfaQGqFCsllmdehJr6qbt14dVKT OP5YermSbcedzaKCsoAIibCe+Udpkax+LFtRbelXkjCk5XkQIM82FxxKRqhNoemvJeDFM1LvxnXr cnjd60Q5siHWpLcontca5WVhSE1t1aEJExCauEgb3Y7JzLxdCNopxRKD1JU5LXLnNK02Mjen02tb +JXoM1n5Ejzw4hm6TNNMU+pU4wIX/NskTHoGHEF5c+ZmclPXzw3V/UF5WTMNqvmOktPlVQEG8PVj 7gVfHn1nDk1Fn6ba8oMj3ZvNFIw2yTVCqCaRL53fQKhYLlPHdf6XVJq9dkzccjt4rEDQ82vZ9xfD COI= =8+F1 -----END PGP SIGNATURE----- --y4BYlABVEYysq6OMDXMoyK4sH88S66Nxu--