From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BCEFE220698; Mon, 18 May 2026 18:57:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779130634; cv=none; b=gmU6QBW70UY19VYxE5LpwvS804bWNI4E2ropXcSoN4lFijKvr6awGkrV8N4xvtP858/WZGAtTBf+KuAVTZsvOYdkPA6kzd7jaGR/nIfIg3+rB0oNPVr+sPvTSSvmjz8f7zFvvG9sYjNu4PmX08spTR2s1oTnUzDv5KIrwfxSzIU= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779130634; c=relaxed/simple; bh=k/A26yfrRD5bJhR3i3cajFC5mp82Cmcyh1Vy36p4OdY=; h=From:Subject:To:Cc:In-Reply-To:References:Content-Type:Date: Message-Id; b=W5rENVXM3esqDjI4Yz4buxuwMzbiyhaagySN8wC4r7qhUyfaQ48pxoVR6vpeaV1PqwLZBA6wYutPgzSnVMRtDi6SoZi4EjQLTRiOXHpL5eMg7idLb3CVYlbvA/SZ2FmV0fd4H/O16tMXLyj3haHeaMMQUmEcT+C0YbR+kYPtPUA= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=sddueeqU; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="sddueeqU" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1EED3C2BCB7; Mon, 18 May 2026 18:57:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779130634; bh=k/A26yfrRD5bJhR3i3cajFC5mp82Cmcyh1Vy36p4OdY=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date:From; b=sddueeqURXIOF8eaFjcV/u0Or/pwk/cqyWt7Ru5bC0OQP6NZelVm5dmRUat3ODGcH Kj9ZaVq4CSltG1WXvR+OWTwxeEYrjgMJcHSCMaWpqKezdWbIBitbfhpGItaUP7wu93 07xka8tT8mdfVYywc3X74TiiK8LcNYBrl0Fa0kxVmd9X2g6mX+xEwWcZuhlxlxYZos 5JZyipM2TCq51hawdWNfwqYCMs6Z+1g1eaUBHd8lyDsVjbL72neJeRZvki7cks+GzE n55HHfNHBSgGP6wsE/VwusPxD5xeuw6woBI6NyW+0rIevfPjLjQ/Wunzo3nhnwRJr4 ejSheMNRGZeGw== From: sashiko-bot@kernel.org Subject: Re: [PATCH v7 19/23] drm: bridge: dw_hdmi: Use delayed_work to debounce hotplug event Reply-To: sashiko-reviews@lists.linux.dev To: "Jonas Karlman" Cc: linux-amlogic@lists.infradead.org, imx@lists.linux.dev, linux-sunxi@lists.linux.dev, neil.armstrong@linaro.org, Frank.Li@kernel.org In-Reply-To: <20260518180206.2480119-20-jonas@kwiboo.se> References: <20260518180206.2480119-20-jonas@kwiboo.se> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Date: Mon, 18 May 2026 18:57:13 +0000 Message-Id: <20260518185714.1EED3C2BCB7@smtp.kernel.org> Precedence: bulk X-Mailing-List: imx@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: Thank you for your contribution! Sashiko AI review found 2 potential issue(= s) to consider: - [High] The debounce logic completely filters out the 100ms EDID change pu= lse, causing the DRM core to miss the hotplug event. - [High] The shared IRQ handler is freed before hardware interrupts are mas= ked, potentially causing an unhandled interrupt storm. -- commit 2b07e0d99061a1389b7eef1c604f98ccf0e7d115 Author: Jonas Karlman drm: bridge: dw_hdmi: Use delayed_work to debounce hotplug event This commit introduces a delayed work queue to debounce HDMI hotplug detect (HPD) events. It aims to improve the handling of EDID change pulses from the sink by applying an 1100 msec timeout between the event and the DRM core notification. > diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/= bridge/synopsys/dw-hdmi.c > --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c > +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c [ ... ] > @@ -3101,8 +3136,8 @@ static irqreturn_t dw_hdmi_irq(int irq, void *dev_i= d) > status =3D=3D connector_status_connected ? > "plugin" : "plugout"); > =20 > - if (hdmi->bridge.dev) > - drm_helper_hpd_irq_event(hdmi->bridge.dev); > + mod_delayed_work(system_percpu_wq, &hdmi->hpd_work, > + msecs_to_jiffies(HOTPLUG_DEBOUNCE_MS)); > } Does this debounce logic unintentionally filter out the 100ms EDID change p= ulse entirely? When the sink signals an EDID change by pulsing HPD low for 100ms and then = high again, mod_delayed_work() will be called on both edges. The second call on = the rising edge will reset the timer, pushing the work execution to 1100ms after the pin returns high. When dw_hdmi_hpd_work() finally runs and calls drm_helper_hpd_irq_event(), = the DRM connector detect function will see the current HPD status as connected. Since the previous status known to the DRM core was also connected (because= the brief disconnect was never sampled), check_connector_changed() will conclude that nothing changed. The epoch counter will not increment, and the userspa= ce uevent might be lost. [ ... ] > @@ -3532,6 +3593,18 @@ EXPORT_SYMBOL_GPL(dw_hdmi_probe); > =20 > void dw_hdmi_remove(struct dw_hdmi *hdmi) > { > + struct platform_device *pdev =3D to_platform_device(hdmi->dev); > + int irq =3D platform_get_irq(pdev, 0); > + > + /* Free, mute and clear phy interrupts */ > + devm_free_irq(hdmi->dev, irq, hdmi); > + hdmi_writeb(hdmi, ~0, HDMI_IH_MUTE_PHY_STAT0); > + hdmi_writeb(hdmi, HDMI_IH_PHY_STAT0_HPD | HDMI_IH_PHY_STAT0_RX_SENSE, > + HDMI_IH_PHY_STAT0); Could freeing the shared IRQ handler before masking the hardware interrupts cause an unhandled interrupt storm? If the HDMI device asserts a level-triggered interrupt exactly when devm_free_irq() is called, the interrupt line will stay asserted but the dw_hdmi handler will no longer be registered to clear it. Because the IRQ is shared (requested with IRQF_SHARED), the kernel will repeatedly invoke other handlers on this IRQ line. Those other handlers will all return IRQ_NONE, which can cause the kernel to permanently disable the shared IRQ line. Should the hardware interrupts be explicitly masked and cleared before the handler is freed? > + > + /* Cancel any pending hot plug work */ > + cancel_delayed_work_sync(&hdmi->hpd_work); > + > drm_bridge_remove(&hdmi->bridge); --=20 Sashiko AI review =C2=B7 https://sashiko.dev/#/patchset/20260518180206.2480= 119-1-jonas@kwiboo.se?part=3D19 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 82F7DCD4F4A for ; Mon, 18 May 2026 18:58:11 +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:MIME-Version:Reply-To:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:Message-Id:Date: References:In-Reply-To:Cc:To:Subject:From:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=rLsbJOFC9kKwm7Mu6J1GvUtoi5BDbofai70ISsRih/Q=; b=SSS/Qd1EUV1I8a 6BB2F/7a417n1b2uM5YSo9DLrlB9V8hp8rRp874+bjcORgO2ni6C/kPHQ6qKTu7lkO7k+ZClMhu7T qL+i6wBTda6Pvq4fUlzmkkcO2Zw8VJ9ij4WglcTyPVUWdtCoYqJhVPfoxSptEOGnNUS1fEeAGPQHG /Qck6bFDE4AOM6oIZoB3DzlknKGQmzCSwWSos/YtRsDxsgz1N/kOvvbD7sQxLfrDSO8PnMoNLILop OJiy3qFwWD6oXpzgayT7nOSjWdzWgMK+PoshAcK3HIcKvDITHSmOr7xsEiqOHUSVORkZFnz4lXWMJ msHyJN+FEpFXlM/DOLgw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1wP39Q-0000000GcXZ-06nq; Mon, 18 May 2026 18:57:16 +0000 Received: from tor.source.kernel.org ([172.105.4.254]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1wP39P-0000000GcXS-1MUj for linux-amlogic@lists.infradead.org; Mon, 18 May 2026 18:57:15 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by tor.source.kernel.org (Postfix) with ESMTP id B5C11600CB; Mon, 18 May 2026 18:57:14 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1EED3C2BCB7; Mon, 18 May 2026 18:57:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779130634; bh=k/A26yfrRD5bJhR3i3cajFC5mp82Cmcyh1Vy36p4OdY=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date:From; b=sddueeqURXIOF8eaFjcV/u0Or/pwk/cqyWt7Ru5bC0OQP6NZelVm5dmRUat3ODGcH Kj9ZaVq4CSltG1WXvR+OWTwxeEYrjgMJcHSCMaWpqKezdWbIBitbfhpGItaUP7wu93 07xka8tT8mdfVYywc3X74TiiK8LcNYBrl0Fa0kxVmd9X2g6mX+xEwWcZuhlxlxYZos 5JZyipM2TCq51hawdWNfwqYCMs6Z+1g1eaUBHd8lyDsVjbL72neJeRZvki7cks+GzE n55HHfNHBSgGP6wsE/VwusPxD5xeuw6woBI6NyW+0rIevfPjLjQ/Wunzo3nhnwRJr4 ejSheMNRGZeGw== From: sashiko-bot@kernel.org Subject: Re: [PATCH v7 19/23] drm: bridge: dw_hdmi: Use delayed_work to debounce hotplug event To: "Jonas Karlman" Cc: linux-amlogic@lists.infradead.org, imx@lists.linux.dev, linux-sunxi@lists.linux.dev, neil.armstrong@linaro.org, Frank.Li@kernel.org In-Reply-To: <20260518180206.2480119-20-jonas@kwiboo.se> References: <20260518180206.2480119-20-jonas@kwiboo.se> Date: Mon, 18 May 2026 18:57:13 +0000 Message-Id: <20260518185714.1EED3C2BCB7@smtp.kernel.org> X-BeenThere: linux-amlogic@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: sashiko-reviews@lists.linux.dev MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-amlogic" Errors-To: linux-amlogic-bounces+linux-amlogic=archiver.kernel.org@lists.infradead.org VGhhbmsgeW91IGZvciB5b3VyIGNvbnRyaWJ1dGlvbiEgU2FzaGlrbyBBSSByZXZpZXcgZm91bmQg MiBwb3RlbnRpYWwgaXNzdWUocykgdG8gY29uc2lkZXI6Ci0gW0hpZ2hdIFRoZSBkZWJvdW5jZSBs b2dpYyBjb21wbGV0ZWx5IGZpbHRlcnMgb3V0IHRoZSAxMDBtcyBFRElEIGNoYW5nZSBwdWxzZSwg Y2F1c2luZyB0aGUgRFJNIGNvcmUgdG8gbWlzcyB0aGUgaG90cGx1ZyBldmVudC4KLSBbSGlnaF0g VGhlIHNoYXJlZCBJUlEgaGFuZGxlciBpcyBmcmVlZCBiZWZvcmUgaGFyZHdhcmUgaW50ZXJydXB0 cyBhcmUgbWFza2VkLCBwb3RlbnRpYWxseSBjYXVzaW5nIGFuIHVuaGFuZGxlZCBpbnRlcnJ1cHQg c3Rvcm0uCi0tCgpjb21taXQgMmIwN2UwZDk5MDYxYTEzODliN2VlZjFjNjA0Zjk4Y2NmMGU3ZDEx NQpBdXRob3I6IEpvbmFzIEthcmxtYW4gPGpvbmFzQGt3aWJvby5zZT4KCmRybTogYnJpZGdlOiBk d19oZG1pOiBVc2UgZGVsYXllZF93b3JrIHRvIGRlYm91bmNlIGhvdHBsdWcgZXZlbnQKClRoaXMg Y29tbWl0IGludHJvZHVjZXMgYSBkZWxheWVkIHdvcmsgcXVldWUgdG8gZGVib3VuY2UgSERNSSBo b3RwbHVnIGRldGVjdAooSFBEKSBldmVudHMuIEl0IGFpbXMgdG8gaW1wcm92ZSB0aGUgaGFuZGxp bmcgb2YgRURJRCBjaGFuZ2UgcHVsc2VzIGZyb20gdGhlCnNpbmsgYnkgYXBwbHlpbmcgYW4gMTEw MCBtc2VjIHRpbWVvdXQgYmV0d2VlbiB0aGUgZXZlbnQgYW5kIHRoZSBEUk0gY29yZQpub3RpZmlj YXRpb24uCgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3N5bm9wc3lzL2R3 LWhkbWkuYyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvc3lub3BzeXMvZHctaGRtaS5jCj4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9zeW5vcHN5cy9kdy1oZG1pLmMKPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vYnJpZGdlL3N5bm9wc3lzL2R3LWhkbWkuYwoKWyAuLi4gXQoKPiBAQCAtMzEw MSw4ICszMTM2LDggQEAgc3RhdGljIGlycXJldHVybl90IGR3X2hkbWlfaXJxKGludCBpcnEsIHZv aWQgKmRldl9pZCkKPiAgCQkJc3RhdHVzID09IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkID8K PiAgCQkJInBsdWdpbiIgOiAicGx1Z291dCIpOwo+ICAKPiAtCQlpZiAoaGRtaS0+YnJpZGdlLmRl dikKPiAtCQkJZHJtX2hlbHBlcl9ocGRfaXJxX2V2ZW50KGhkbWktPmJyaWRnZS5kZXYpOwo+ICsJ CW1vZF9kZWxheWVkX3dvcmsoc3lzdGVtX3BlcmNwdV93cSwgJmhkbWktPmhwZF93b3JrLAo+ICsJ CQkJIG1zZWNzX3RvX2ppZmZpZXMoSE9UUExVR19ERUJPVU5DRV9NUykpOwo+ICAJfQoKRG9lcyB0 aGlzIGRlYm91bmNlIGxvZ2ljIHVuaW50ZW50aW9uYWxseSBmaWx0ZXIgb3V0IHRoZSAxMDBtcyBF RElEIGNoYW5nZSBwdWxzZQplbnRpcmVseT8KCldoZW4gdGhlIHNpbmsgc2lnbmFscyBhbiBFRElE IGNoYW5nZSBieSBwdWxzaW5nIEhQRCBsb3cgZm9yIDEwMG1zIGFuZCB0aGVuIGhpZ2gKYWdhaW4s IG1vZF9kZWxheWVkX3dvcmsoKSB3aWxsIGJlIGNhbGxlZCBvbiBib3RoIGVkZ2VzLiBUaGUgc2Vj b25kIGNhbGwgb24gdGhlCnJpc2luZyBlZGdlIHdpbGwgcmVzZXQgdGhlIHRpbWVyLCBwdXNoaW5n IHRoZSB3b3JrIGV4ZWN1dGlvbiB0byAxMTAwbXMgYWZ0ZXIKdGhlIHBpbiByZXR1cm5zIGhpZ2gu CgpXaGVuIGR3X2hkbWlfaHBkX3dvcmsoKSBmaW5hbGx5IHJ1bnMgYW5kIGNhbGxzIGRybV9oZWxw ZXJfaHBkX2lycV9ldmVudCgpLCB0aGUKRFJNIGNvbm5lY3RvciBkZXRlY3QgZnVuY3Rpb24gd2ls bCBzZWUgdGhlIGN1cnJlbnQgSFBEIHN0YXR1cyBhcyBjb25uZWN0ZWQuClNpbmNlIHRoZSBwcmV2 aW91cyBzdGF0dXMga25vd24gdG8gdGhlIERSTSBjb3JlIHdhcyBhbHNvIGNvbm5lY3RlZCAoYmVj YXVzZSB0aGUKYnJpZWYgZGlzY29ubmVjdCB3YXMgbmV2ZXIgc2FtcGxlZCksIGNoZWNrX2Nvbm5l Y3Rvcl9jaGFuZ2VkKCkgd2lsbCBjb25jbHVkZQp0aGF0IG5vdGhpbmcgY2hhbmdlZC4gVGhlIGVw b2NoIGNvdW50ZXIgd2lsbCBub3QgaW5jcmVtZW50LCBhbmQgdGhlIHVzZXJzcGFjZQp1ZXZlbnQg bWlnaHQgYmUgbG9zdC4KClsgLi4uIF0KCj4gQEAgLTM1MzIsNiArMzU5MywxOCBAQCBFWFBPUlRf U1lNQk9MX0dQTChkd19oZG1pX3Byb2JlKTsKPiAgCj4gIHZvaWQgZHdfaGRtaV9yZW1vdmUoc3Ry dWN0IGR3X2hkbWkgKmhkbWkpCj4gIHsKPiArCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYg PSB0b19wbGF0Zm9ybV9kZXZpY2UoaGRtaS0+ZGV2KTsKPiArCWludCBpcnEgPSBwbGF0Zm9ybV9n ZXRfaXJxKHBkZXYsIDApOwo+ICsKPiArCS8qIEZyZWUsIG11dGUgYW5kIGNsZWFyIHBoeSBpbnRl cnJ1cHRzICovCj4gKwlkZXZtX2ZyZWVfaXJxKGhkbWktPmRldiwgaXJxLCBoZG1pKTsKPiArCWhk bWlfd3JpdGViKGhkbWksIH4wLCBIRE1JX0lIX01VVEVfUEhZX1NUQVQwKTsKPiArCWhkbWlfd3Jp dGViKGhkbWksIEhETUlfSUhfUEhZX1NUQVQwX0hQRCB8IEhETUlfSUhfUEhZX1NUQVQwX1JYX1NF TlNFLAo+ICsJCSAgICBIRE1JX0lIX1BIWV9TVEFUMCk7CgpDb3VsZCBmcmVlaW5nIHRoZSBzaGFy ZWQgSVJRIGhhbmRsZXIgYmVmb3JlIG1hc2tpbmcgdGhlIGhhcmR3YXJlIGludGVycnVwdHMKY2F1 c2UgYW4gdW5oYW5kbGVkIGludGVycnVwdCBzdG9ybT8KCklmIHRoZSBIRE1JIGRldmljZSBhc3Nl cnRzIGEgbGV2ZWwtdHJpZ2dlcmVkIGludGVycnVwdCBleGFjdGx5IHdoZW4KZGV2bV9mcmVlX2ly cSgpIGlzIGNhbGxlZCwgdGhlIGludGVycnVwdCBsaW5lIHdpbGwgc3RheSBhc3NlcnRlZCBidXQg dGhlCmR3X2hkbWkgaGFuZGxlciB3aWxsIG5vIGxvbmdlciBiZSByZWdpc3RlcmVkIHRvIGNsZWFy IGl0LiBCZWNhdXNlIHRoZSBJUlEgaXMKc2hhcmVkIChyZXF1ZXN0ZWQgd2l0aCBJUlFGX1NIQVJF RCksIHRoZSBrZXJuZWwgd2lsbCByZXBlYXRlZGx5IGludm9rZSBvdGhlcgpoYW5kbGVycyBvbiB0 aGlzIElSUSBsaW5lLgoKVGhvc2Ugb3RoZXIgaGFuZGxlcnMgd2lsbCBhbGwgcmV0dXJuIElSUV9O T05FLCB3aGljaCBjYW4gY2F1c2UgdGhlIGtlcm5lbCB0bwpwZXJtYW5lbnRseSBkaXNhYmxlIHRo ZSBzaGFyZWQgSVJRIGxpbmUuCgpTaG91bGQgdGhlIGhhcmR3YXJlIGludGVycnVwdHMgYmUgZXhw bGljaXRseSBtYXNrZWQgYW5kIGNsZWFyZWQgYmVmb3JlIHRoZQpoYW5kbGVyIGlzIGZyZWVkPwoK PiArCj4gKwkvKiBDYW5jZWwgYW55IHBlbmRpbmcgaG90IHBsdWcgd29yayAqLwo+ICsJY2FuY2Vs X2RlbGF5ZWRfd29ya19zeW5jKCZoZG1pLT5ocGRfd29yayk7Cj4gKwo+ICAJZHJtX2JyaWRnZV9y ZW1vdmUoJmhkbWktPmJyaWRnZSk7CgotLSAKU2FzaGlrbyBBSSByZXZpZXcgwrcgaHR0cHM6Ly9z YXNoaWtvLmRldi8jL3BhdGNoc2V0LzIwMjYwNTE4MTgwMjA2LjI0ODAxMTktMS1qb25hc0Brd2li b28uc2U/cGFydD0xOQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KbGludXgtYW1sb2dpYyBtYWlsaW5nIGxpc3QKbGludXgtYW1sb2dpY0BsaXN0cy5pbmZy YWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGlu dXgtYW1sb2dpYwo=