From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (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 649EE1CFA5 for ; Sat, 23 Sep 2023 14:34:04 +0000 (UTC) Received: from [IPV6:2001:818:e7d2:8300:2412:6733:7e63:fb46] (unknown [IPv6:2001:818:e7d2:8300:2412:6733:7e63:fb46]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 02C77DE2; Sat, 23 Sep 2023 16:32:22 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1695479543; bh=68LBmqQjIXy9xykOwHtx+7UwRbdJFITND0li2jF81AQ=; h=Date:Subject:To:Cc:References:From:In-Reply-To:From; b=BmTSsfT/vhMMUUMfmO9bGz+Rc48Fg1/JbXoO/+0n5P4DvblZpMD14DptlWejx+5Nl d4+hlTq2CYEajjTMCnLiHpZBrpn6j5LV3Fn92fu58FO3vqRG9H/Is/9BgdQ+WUFefu B3Qy5nBg6GEw31fiFLbgFeFVHJbnhSpZQyZoKrcI= Message-ID: Date: Sat, 23 Sep 2023 20:03:58 +0530 Precedence: bulk X-Mailing-List: linux-staging@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.10.0 Subject: Re: [PATCH v12 0/6] staging: vc04_services: vchiq: Register devices with a custom bus_type Content-Language: en-US To: linux-staging@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-rpi-kernel@lists.infradead.org, linux-media@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Stefan Wahren , Greg Kroah-Hartman , Florian Fainelli , Adrien Thierry , Dan Carpenter , Dave Stevenson , Kieran Bingham , Laurent Pinchart References: <20230923143200.268063-1-umang.jain@ideasonboard.com> From: Umang Jain In-Reply-To: <20230923143200.268063-1-umang.jain@ideasonboard.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Hi all, On 9/23/23 8:01 PM, Umang Jain wrote: > The patch series added a new bus type vchiq_bus_type and registers > child devices in order to move them away from using platform > device/driver. > > Tested on RPi-3-b with media tree master branch. > > Patch 1/6 and 2/6 adds explicit DMA mask to bcm2835-camera > and bcm2835-audio respectively to avoid regression when moving > to away from platform device/driver model. > > Patch 3/6 and 4/6 adds a new bus_type and registers them to vchiq > interface > > Patch 5/6 and 6/6 moves the bcm2835-camera and bcm2835-audio > to the new bus respectively > > Patch 5/5 removes a platform registeration helper which is no > longer required. Please ignore theĀ  just above line, forgot to delete while editing the cover letter. > > Changes in v12: > - Add initial two patches to set DMA Mask explicitly to avoid regression > - fixup vchiq_device.c bad squash in v11 > - Rename vchiq_device.[ch] to vchiq_bus.[ch] > - Fix memory leak if device cannot be registered > - Make vchiq_bus_type_match() use bool values > - vchiq_register_child() helper removal folded in 6/6 > instead of creating extra patch. > > Changes in v11: > - Move setting of DMA mask in child devices (3/5 and 4/5) > - Fixes "DMA mask not set issue" reported in v10. > > Changes in v10: > - fix dma_attr WARN issue with bcm2835-audio module loading > - Unregister bus on parent platform device fails to register > - Reword commit to highlight bcm2835_audio to bcm2835-audio name change > > Changes in v9: > - Fix module autoloading > - Implement bus_type's probe() callback to load drivers > - Implement bus_type's uevent() to make sure appropriate drivers are > loaded when device are registed from vchiq. > > Changes in v8: > - Drop dual licensing. Instead use GPL-2.0 only for patch 1/5 > > Changes in v7: > (5 out of 6 patches from v6 merged) > - Split the main patch (6/6) as requested. > - Use struct vchiq_device * instead of struct device * in > all bus functions. > - Drop additional name attribute displayed in sysfs (redundant info) > - Document vchiq_interface doesn't enumerate device discovery > - remove EXPORT_SYMBOL_GPL(vchiq_bus_type) > > Changes in v6: > - Split struct device and struct driver wrappers in vchiq_device.[ch] > - Move vchiq_bus_type definition to vchiq_device.[ch] as well > - return error on bus_register() failure > - drop dma_set_mask_and_coherent > - trivial variable name change > > Changes in v5: > - Fixup missing "staging: " in commits' subject line > - No code changes from v4 > > Changes in v4: > - Introduce patches to drop include directives from Makefile > > Changes in v3: > - Rework entirely to replace platform devices/driver model > > -v2: > https://lore.kernel.org/all/20221222191500.515795-1-umang.jain@ideasonboard.com/ > > -v1: > https://lore.kernel.org/all/20221220084404.19280-1-umang.jain@ideasonboard.com/ > > Umang Jain (6): > staging: vc04_services: bcm2835-camera: Explicitly set DMA mask > staging: vc04_services: bcm2835-audio: Explicitly set DMA mask > staging: vc04_services: vchiq_arm: Add new bus type and device type > staging: vc04_services: vchiq_arm: Register vchiq_bus_type > staging: bcm2835-camera: Register bcm2835-camera with vchiq_bus_type > staging: bcm2835-audio: Register bcm2835-audio with vchiq_bus_type > > drivers/staging/vc04_services/Makefile | 1 + > .../vc04_services/bcm2835-audio/bcm2835.c | 26 +++-- > .../bcm2835-camera/bcm2835-camera.c | 23 ++-- > .../interface/vchiq_arm/vchiq_arm.c | 52 ++++----- > .../interface/vchiq_arm/vchiq_bus.c | 100 ++++++++++++++++++ > .../interface/vchiq_arm/vchiq_bus.h | 54 ++++++++++ > 6 files changed, 209 insertions(+), 47 deletions(-) > create mode 100644 drivers/staging/vc04_services/interface/vchiq_arm/vchiq_bus.c > create mode 100644 drivers/staging/vc04_services/interface/vchiq_arm/vchiq_bus.h > > > base-commit: 0bb80ecc33a8fb5a682236443c1e740d5c917d1d 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 13473CE7A89 for ; Sat, 23 Sep 2023 14:34:34 +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-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:From:References:Cc:To:Subject: MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=itY5wNr31pC5mYw8ABA5F5r9sWQ53B8rSGJTjLyVB8M=; b=Tu9kC8ExVRIoET n5Akg/QJ/No9d8TJ8u/Fu7FJqizvJu8XGSQd3jbBVZnOhqnB/l7fXiRRTdsvbN6c61bOreD/Nu21J CHL2F+c0oIueFn5eEIr9vOfvCRiHjCEJDg//Xp659ZUPv7ScYvtOnaoKCOqaDt5EmxYO9MKDJ9yWN 1RMQWTjicUrjtN8ct143IXekHuNWJRQysRmBoaON7a93hRCdJjs/iZTksfFaBYoEGKfYKI+iD8xkX QbdK+ZUfjic5+SjnKsL46TCiwyTmUknxc+IZqGJLQP/AuTYJPTwIq49p/e5LyewKGklm1J0AAG9Wo Jcu9UDOj5VE7jv5e+brQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qk3hu-00B5jR-1g; Sat, 23 Sep 2023 14:34:06 +0000 Received: from perceval.ideasonboard.com ([213.167.242.64]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qk3hr-00B5in-2Y; Sat, 23 Sep 2023 14:34:05 +0000 Received: from [IPV6:2001:818:e7d2:8300:2412:6733:7e63:fb46] (unknown [IPv6:2001:818:e7d2:8300:2412:6733:7e63:fb46]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 02C77DE2; Sat, 23 Sep 2023 16:32:22 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1695479543; bh=68LBmqQjIXy9xykOwHtx+7UwRbdJFITND0li2jF81AQ=; h=Date:Subject:To:Cc:References:From:In-Reply-To:From; b=BmTSsfT/vhMMUUMfmO9bGz+Rc48Fg1/JbXoO/+0n5P4DvblZpMD14DptlWejx+5Nl d4+hlTq2CYEajjTMCnLiHpZBrpn6j5LV3Fn92fu58FO3vqRG9H/Is/9BgdQ+WUFefu B3Qy5nBg6GEw31fiFLbgFeFVHJbnhSpZQyZoKrcI= Message-ID: Date: Sat, 23 Sep 2023 20:03:58 +0530 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.10.0 Subject: Re: [PATCH v12 0/6] staging: vc04_services: vchiq: Register devices with a custom bus_type Content-Language: en-US To: linux-staging@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-rpi-kernel@lists.infradead.org, linux-media@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Stefan Wahren , Greg Kroah-Hartman , Florian Fainelli , Adrien Thierry , Dan Carpenter , Dave Stevenson , Kieran Bingham , Laurent Pinchart References: <20230923143200.268063-1-umang.jain@ideasonboard.com> From: Umang Jain In-Reply-To: <20230923143200.268063-1-umang.jain@ideasonboard.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230923_073403_977049_E9520C72 X-CRM114-Status: GOOD ( 23.44 ) 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-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGkgYWxsLAoKT24gOS8yMy8yMyA4OjAxIFBNLCBVbWFuZyBKYWluIHdyb3RlOgo+IFRoZSBwYXRj aCBzZXJpZXMgYWRkZWQgYSBuZXcgYnVzIHR5cGUgdmNoaXFfYnVzX3R5cGUgYW5kIHJlZ2lzdGVy cwo+IGNoaWxkIGRldmljZXMgaW4gb3JkZXIgdG8gbW92ZSB0aGVtIGF3YXkgZnJvbSB1c2luZyBw bGF0Zm9ybQo+IGRldmljZS9kcml2ZXIuCj4KPiBUZXN0ZWQgb24gUlBpLTMtYiB3aXRoIG1lZGlh IHRyZWUgbWFzdGVyIGJyYW5jaC4KPgo+IFBhdGNoIDEvNiBhbmQgMi82IGFkZHMgZXhwbGljaXQg RE1BIG1hc2sgdG8gYmNtMjgzNS1jYW1lcmEKPiBhbmQgYmNtMjgzNS1hdWRpbyByZXNwZWN0aXZl bHkgdG8gYXZvaWQgcmVncmVzc2lvbiB3aGVuIG1vdmluZwo+IHRvIGF3YXkgZnJvbSBwbGF0Zm9y bSBkZXZpY2UvZHJpdmVyIG1vZGVsLgo+Cj4gUGF0Y2ggMy82IGFuZCA0LzYgYWRkcyBhIG5ldyBi dXNfdHlwZSBhbmQgcmVnaXN0ZXJzIHRoZW0gdG8gdmNoaXEKPiBpbnRlcmZhY2UKPgo+IFBhdGNo IDUvNiBhbmQgNi82IG1vdmVzIHRoZSBiY20yODM1LWNhbWVyYSBhbmQgYmNtMjgzNS1hdWRpbwo+ IHRvIHRoZSBuZXcgYnVzIHJlc3BlY3RpdmVseQo+Cj4gUGF0Y2ggNS81IHJlbW92ZXMgYSBwbGF0 Zm9ybSByZWdpc3RlcmF0aW9uIGhlbHBlciB3aGljaCBpcyBubwo+IGxvbmdlciByZXF1aXJlZC4K ClBsZWFzZSBpZ25vcmUgdGhlwqAganVzdCBhYm92ZSBsaW5lLCBmb3Jnb3QgdG8gZGVsZXRlIHdo aWxlIGVkaXRpbmcgdGhlIApjb3ZlciBsZXR0ZXIuCj4KPiBDaGFuZ2VzIGluIHYxMjoKPiAtIEFk ZCBpbml0aWFsIHR3byBwYXRjaGVzIHRvIHNldCBETUEgTWFzayBleHBsaWNpdGx5IHRvIGF2b2lk IHJlZ3Jlc3Npb24KPiAtIGZpeHVwIHZjaGlxX2RldmljZS5jIGJhZCBzcXVhc2ggaW4gdjExCj4g LSBSZW5hbWUgdmNoaXFfZGV2aWNlLltjaF0gdG8gdmNoaXFfYnVzLltjaF0KPiAtIEZpeCBtZW1v cnkgbGVhayBpZiBkZXZpY2UgY2Fubm90IGJlIHJlZ2lzdGVyZWQKPiAtIE1ha2UgdmNoaXFfYnVz X3R5cGVfbWF0Y2goKSB1c2UgYm9vbCB2YWx1ZXMKPiAtIHZjaGlxX3JlZ2lzdGVyX2NoaWxkKCkg aGVscGVyIHJlbW92YWwgZm9sZGVkIGluIDYvNgo+ICAgIGluc3RlYWQgb2YgY3JlYXRpbmcgZXh0 cmEgcGF0Y2guCj4KPiBDaGFuZ2VzIGluIHYxMToKPiAtIE1vdmUgc2V0dGluZyBvZiBETUEgbWFz ayBpbiBjaGlsZCBkZXZpY2VzICgzLzUgYW5kIDQvNSkKPiAtIEZpeGVzICJETUEgbWFzayBub3Qg c2V0IGlzc3VlIiByZXBvcnRlZCBpbiB2MTAuCj4KPiBDaGFuZ2VzIGluIHYxMDoKPiAtIGZpeCBk bWFfYXR0ciBXQVJOIGlzc3VlIHdpdGggYmNtMjgzNS1hdWRpbyBtb2R1bGUgbG9hZGluZwo+IC0g VW5yZWdpc3RlciBidXMgb24gcGFyZW50IHBsYXRmb3JtIGRldmljZSBmYWlscyB0byByZWdpc3Rl cgo+IC0gUmV3b3JkIGNvbW1pdCB0byBoaWdobGlnaHQgYmNtMjgzNV9hdWRpbyB0byBiY20yODM1 LWF1ZGlvIG5hbWUgY2hhbmdlCj4KPiBDaGFuZ2VzIGluIHY5Ogo+IC0gRml4IG1vZHVsZSBhdXRv bG9hZGluZwo+IC0gSW1wbGVtZW50IGJ1c190eXBlJ3MgcHJvYmUoKSBjYWxsYmFjayB0byBsb2Fk IGRyaXZlcnMKPiAtIEltcGxlbWVudCBidXNfdHlwZSdzIHVldmVudCgpIHRvIG1ha2Ugc3VyZSBh cHByb3ByaWF0ZSBkcml2ZXJzIGFyZQo+ICAgIGxvYWRlZCB3aGVuIGRldmljZSBhcmUgcmVnaXN0 ZWQgZnJvbSB2Y2hpcS4KPgo+IENoYW5nZXMgaW4gdjg6Cj4gLSBEcm9wIGR1YWwgbGljZW5zaW5n LiBJbnN0ZWFkIHVzZSBHUEwtMi4wIG9ubHkgZm9yIHBhdGNoIDEvNQo+Cj4gQ2hhbmdlcyBpbiB2 NzoKPiAoNSBvdXQgb2YgNiBwYXRjaGVzIGZyb20gdjYgbWVyZ2VkKQo+IC0gU3BsaXQgdGhlIG1h aW4gcGF0Y2ggKDYvNikgYXMgcmVxdWVzdGVkLgo+IC0gVXNlIHN0cnVjdCB2Y2hpcV9kZXZpY2Ug KiBpbnN0ZWFkIG9mIHN0cnVjdCBkZXZpY2UgKiBpbgo+ICAgIGFsbCBidXMgZnVuY3Rpb25zLgo+ IC0gRHJvcCBhZGRpdGlvbmFsIG5hbWUgYXR0cmlidXRlIGRpc3BsYXllZCBpbiBzeXNmcyAocmVk dW5kYW50IGluZm8pCj4gLSBEb2N1bWVudCB2Y2hpcV9pbnRlcmZhY2UgZG9lc24ndCBlbnVtZXJh dGUgZGV2aWNlIGRpc2NvdmVyeQo+IC0gcmVtb3ZlIEVYUE9SVF9TWU1CT0xfR1BMKHZjaGlxX2J1 c190eXBlKQo+Cj4gQ2hhbmdlcyBpbiB2NjoKPiAtIFNwbGl0IHN0cnVjdCBkZXZpY2UgYW5kIHN0 cnVjdCBkcml2ZXIgd3JhcHBlcnMgaW4gdmNoaXFfZGV2aWNlLltjaF0KPiAtIE1vdmUgdmNoaXFf YnVzX3R5cGUgZGVmaW5pdGlvbiB0byB2Y2hpcV9kZXZpY2UuW2NoXSBhcyB3ZWxsCj4gLSByZXR1 cm4gZXJyb3Igb24gYnVzX3JlZ2lzdGVyKCkgZmFpbHVyZQo+IC0gZHJvcCBkbWFfc2V0X21hc2tf YW5kX2NvaGVyZW50Cj4gLSB0cml2aWFsIHZhcmlhYmxlIG5hbWUgY2hhbmdlCj4KPiBDaGFuZ2Vz IGluIHY1Ogo+IC0gRml4dXAgbWlzc2luZyAic3RhZ2luZzogIiBpbiBjb21taXRzJyBzdWJqZWN0 IGxpbmUKPiAtIE5vIGNvZGUgY2hhbmdlcyBmcm9tIHY0Cj4KPiBDaGFuZ2VzIGluIHY0Ogo+IC0g SW50cm9kdWNlIHBhdGNoZXMgdG8gZHJvcCBpbmNsdWRlIGRpcmVjdGl2ZXMgZnJvbSBNYWtlZmls ZQo+Cj4gQ2hhbmdlcyBpbiB2MzoKPiAtIFJld29yayBlbnRpcmVseSB0byByZXBsYWNlIHBsYXRm b3JtIGRldmljZXMvZHJpdmVyIG1vZGVsCj4KPiAtdjI6Cj4gaHR0cHM6Ly9sb3JlLmtlcm5lbC5v cmcvYWxsLzIwMjIxMjIyMTkxNTAwLjUxNTc5NS0xLXVtYW5nLmphaW5AaWRlYXNvbmJvYXJkLmNv bS8KPgo+IC12MToKPiBodHRwczovL2xvcmUua2VybmVsLm9yZy9hbGwvMjAyMjEyMjAwODQ0MDQu MTkyODAtMS11bWFuZy5qYWluQGlkZWFzb25ib2FyZC5jb20vCj4KPiBVbWFuZyBKYWluICg2KToK PiAgICBzdGFnaW5nOiB2YzA0X3NlcnZpY2VzOiBiY20yODM1LWNhbWVyYTogRXhwbGljaXRseSBz ZXQgRE1BIG1hc2sKPiAgICBzdGFnaW5nOiB2YzA0X3NlcnZpY2VzOiBiY20yODM1LWF1ZGlvOiBF eHBsaWNpdGx5IHNldCBETUEgbWFzawo+ICAgIHN0YWdpbmc6IHZjMDRfc2VydmljZXM6IHZjaGlx X2FybTogQWRkIG5ldyBidXMgdHlwZSBhbmQgZGV2aWNlIHR5cGUKPiAgICBzdGFnaW5nOiB2YzA0 X3NlcnZpY2VzOiB2Y2hpcV9hcm06IFJlZ2lzdGVyIHZjaGlxX2J1c190eXBlCj4gICAgc3RhZ2lu ZzogYmNtMjgzNS1jYW1lcmE6IFJlZ2lzdGVyIGJjbTI4MzUtY2FtZXJhIHdpdGggdmNoaXFfYnVz X3R5cGUKPiAgICBzdGFnaW5nOiBiY20yODM1LWF1ZGlvOiBSZWdpc3RlciBiY20yODM1LWF1ZGlv IHdpdGggdmNoaXFfYnVzX3R5cGUKPgo+ICAgZHJpdmVycy9zdGFnaW5nL3ZjMDRfc2VydmljZXMv TWFrZWZpbGUgICAgICAgIHwgICAxICsKPiAgIC4uLi92YzA0X3NlcnZpY2VzL2JjbTI4MzUtYXVk aW8vYmNtMjgzNS5jICAgICB8ICAyNiArKystLQo+ICAgLi4uL2JjbTI4MzUtY2FtZXJhL2JjbTI4 MzUtY2FtZXJhLmMgICAgICAgICAgIHwgIDIzICsrLS0KPiAgIC4uLi9pbnRlcmZhY2UvdmNoaXFf YXJtL3ZjaGlxX2FybS5jICAgICAgICAgICB8ICA1MiArKysrLS0tLS0KPiAgIC4uLi9pbnRlcmZh Y2UvdmNoaXFfYXJtL3ZjaGlxX2J1cy5jICAgICAgICAgICB8IDEwMCArKysrKysrKysrKysrKysr KysKPiAgIC4uLi9pbnRlcmZhY2UvdmNoaXFfYXJtL3ZjaGlxX2J1cy5oICAgICAgICAgICB8ICA1 NCArKysrKysrKysrCj4gICA2IGZpbGVzIGNoYW5nZWQsIDIwOSBpbnNlcnRpb25zKCspLCA0NyBk ZWxldGlvbnMoLSkKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvdmMwNF9z ZXJ2aWNlcy9pbnRlcmZhY2UvdmNoaXFfYXJtL3ZjaGlxX2J1cy5jCj4gICBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9zdGFnaW5nL3ZjMDRfc2VydmljZXMvaW50ZXJmYWNlL3ZjaGlxX2FybS92 Y2hpcV9idXMuaAo+Cj4KPiBiYXNlLWNvbW1pdDogMGJiODBlY2MzM2E4ZmI1YTY4MjIzNjQ0M2Mx ZTc0MGQ1YzkxN2QxZAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlz dHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2xpbnV4LWFybS1rZXJuZWwK