From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753413AbeDPT3U (ORCPT ); Mon, 16 Apr 2018 15:29:20 -0400 Received: from mga03.intel.com ([134.134.136.65]:52570 "EHLO mga03.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753325AbeDPT3T (ORCPT ); Mon, 16 Apr 2018 15:29:19 -0400 X-Amp-Result: UNSCANNABLE X-Amp-File-Uploaded: False X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.48,460,1517904000"; d="scan'208";a="191956884" Date: Mon, 16 Apr 2018 12:29:05 -0700 From: Dongwon Kim To: Oleksandr Andrushchenko Cc: xen-devel@lists.xenproject.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, airlied@linux.ie, daniel.vetter@intel.com, seanpaul@chromium.org, gustavo@padovan.org, jgross@suse.com, boris.ostrovsky@oracle.com, konrad.wilk@oracle.com, Oleksandr Andrushchenko , "Potrola, MateuszX" , Matt Roper , Artem Mygaiev Subject: Re: [PATCH 0/1] drm/xen-zcopy: Add Xen zero-copy helper DRM driver Message-ID: <20180416192905.GA18096@downor-Z87X-UD5H> References: <20180329131931.29957-1-andr2000@gmail.com> <5d8fec7f-956c-378f-be90-f45029385740@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <5d8fec7f-956c-378f-be90-f45029385740@gmail.com> User-Agent: Mutt/1.5.24 (2015-08-30) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Yeah, I definitely agree on the idea of expanding the use case to the general domain where dmabuf sharing is used. However, what you are targetting with proposed changes is identical to the core design of hyper_dmabuf. On top of this basic functionalities, hyper_dmabuf has driver level inter-domain communication, that is needed for dma-buf remote tracking (no fence forwarding though), event triggering and event handling, extra meta data exchange and hyper_dmabuf_id that represents grefs (grefs are shared implicitly on driver level) Also it is designed with frontend (common core framework) + backend (hyper visor specific comm and memory sharing) structure for portability. We just can't limit this feature to Xen because we want to use the same uapis not only for Xen but also other applicable hypervisor, like ACORN. So I am wondering we can start with this hyper_dmabuf then modify it for your use-case if needed and polish and fix any glitches if we want to to use this for all general dma-buf usecases. Also, I still have one unresolved question regarding the export/import flow in both of hyper_dmabuf and xen-zcopy. @danvet: Would this flow (guest1->import existing dmabuf->share underlying pages->guest2->map shared pages->create/export dmabuf) be acceptable now? Regards, DW On Mon, Apr 16, 2018 at 05:33:46PM +0300, Oleksandr Andrushchenko wrote: > Hello, all! > > After discussing xen-zcopy and hyper-dmabuf [1] approaches > > it seems that xen-zcopy can be made not depend on DRM core any more > > and be dma-buf centric (which it in fact is). > > The DRM code was mostly there for dma-buf's FD import/export > > with DRM PRIME UAPI and with DRM use-cases in mind, but it comes out that if > > the proposed 2 IOCTLs (DRM_XEN_ZCOPY_DUMB_FROM_REFS and > DRM_XEN_ZCOPY_DUMB_TO_REFS) > > are extended to also provide a file descriptor of the corresponding dma-buf, > then > > PRIME stuff in the driver is not needed anymore. > > That being said, xen-zcopy can safely be detached from DRM and moved from > > drivers/gpu/drm/xen into drivers/xen/dma-buf-backend(?). > > This driver then becomes a universal way to turn any shared buffer between > Dom0/DomD > > and DomU(s) into a dma-buf, e.g. one can create a dma-buf from any grant > references > > or represent a dma-buf as grant-references for export. > > This way the driver can be used not only for DRM use-cases, but also for > other > > use-cases which may require zero copying between domains. > > For example, the use-cases we are about to work in the nearest future will > use > > V4L, e.g. we plan to support cameras, codecs etc. and all these will benefit > > from zero copying much. Potentially, even block/net devices may benefit, > > but this needs some evaluation. > > > I would love to hear comments for authors of the hyper-dmabuf > > and Xen community, as well as DRI-Devel and other interested parties. > > > Thank you, > > Oleksandr > > > On 03/29/2018 04:19 PM, Oleksandr Andrushchenko wrote: > >From: Oleksandr Andrushchenko > > > >Hello! > > > >When using Xen PV DRM frontend driver then on backend side one will need > >to do copying of display buffers' contents (filled by the > >frontend's user-space) into buffers allocated at the backend side. > >Taking into account the size of display buffers and frames per seconds > >it may result in unneeded huge data bus occupation and performance loss. > > > >This helper driver allows implementing zero-copying use-cases > >when using Xen para-virtualized frontend display driver by > >implementing a DRM/KMS helper driver running on backend's side. > >It utilizes PRIME buffers API to share frontend's buffers with > >physical device drivers on backend's side: > > > > - a dumb buffer created on backend's side can be shared > > with the Xen PV frontend driver, so it directly writes > > into backend's domain memory (into the buffer exported from > > DRM/KMS driver of a physical display device) > > - a dumb buffer allocated by the frontend can be imported > > into physical device DRM/KMS driver, thus allowing to > > achieve no copying as well > > > >For that reason number of IOCTLs are introduced: > > - DRM_XEN_ZCOPY_DUMB_FROM_REFS > > This will create a DRM dumb buffer from grant references provided > > by the frontend > > - DRM_XEN_ZCOPY_DUMB_TO_REFS > > This will grant references to a dumb/display buffer's memory provided > > by the backend > > - DRM_XEN_ZCOPY_DUMB_WAIT_FREE > > This will block until the dumb buffer with the wait handle provided > > be freed > > > >With this helper driver I was able to drop CPU usage from 17% to 3% > >on Renesas R-Car M3 board. > > > >This was tested with Renesas' Wayland-KMS and backend running as DRM master. > > > >Thank you, > >Oleksandr > > > >Oleksandr Andrushchenko (1): > > drm/xen-zcopy: Add Xen zero-copy helper DRM driver > > > > Documentation/gpu/drivers.rst | 1 + > > Documentation/gpu/xen-zcopy.rst | 32 + > > drivers/gpu/drm/xen/Kconfig | 25 + > > drivers/gpu/drm/xen/Makefile | 5 + > > drivers/gpu/drm/xen/xen_drm_zcopy.c | 880 ++++++++++++++++++++++++++++ > > drivers/gpu/drm/xen/xen_drm_zcopy_balloon.c | 154 +++++ > > drivers/gpu/drm/xen/xen_drm_zcopy_balloon.h | 38 ++ > > include/uapi/drm/xen_zcopy_drm.h | 129 ++++ > > 8 files changed, 1264 insertions(+) > > create mode 100644 Documentation/gpu/xen-zcopy.rst > > create mode 100644 drivers/gpu/drm/xen/xen_drm_zcopy.c > > create mode 100644 drivers/gpu/drm/xen/xen_drm_zcopy_balloon.c > > create mode 100644 drivers/gpu/drm/xen/xen_drm_zcopy_balloon.h > > create mode 100644 include/uapi/drm/xen_zcopy_drm.h > > > [1] > https://lists.xenproject.org/archives/html/xen-devel/2018-02/msg01202.html From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dongwon Kim Subject: Re: [PATCH 0/1] drm/xen-zcopy: Add Xen zero-copy helper DRM driver Date: Mon, 16 Apr 2018 12:29:05 -0700 Message-ID: <20180416192905.GA18096@downor-Z87X-UD5H> References: <20180329131931.29957-1-andr2000@gmail.com> <5d8fec7f-956c-378f-be90-f45029385740@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9890E6E395 for ; Mon, 16 Apr 2018 19:29:19 +0000 (UTC) Content-Disposition: inline In-Reply-To: <5d8fec7f-956c-378f-be90-f45029385740@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Oleksandr Andrushchenko Cc: jgross@suse.com, Artem Mygaiev , konrad.wilk@oracle.com, airlied@linux.ie, Oleksandr Andrushchenko , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, "Potrola, MateuszX" , daniel.vetter@intel.com, xen-devel@lists.xenproject.org, boris.ostrovsky@oracle.com List-Id: dri-devel@lists.freedesktop.org WWVhaCwgSSBkZWZpbml0ZWx5IGFncmVlIG9uIHRoZSBpZGVhIG9mIGV4cGFuZGluZyB0aGUgdXNl IGNhc2UgdG8gdGhlIApnZW5lcmFsIGRvbWFpbiB3aGVyZSBkbWFidWYgc2hhcmluZyBpcyB1c2Vk LiBIb3dldmVyLCB3aGF0IHlvdSBhcmUKdGFyZ2V0dGluZyB3aXRoIHByb3Bvc2VkIGNoYW5nZXMg aXMgaWRlbnRpY2FsIHRvIHRoZSBjb3JlIGRlc2lnbiBvZgpoeXBlcl9kbWFidWYuCgpPbiB0b3Ag b2YgdGhpcyBiYXNpYyBmdW5jdGlvbmFsaXRpZXMsIGh5cGVyX2RtYWJ1ZiBoYXMgZHJpdmVyIGxl dmVsCmludGVyLWRvbWFpbiBjb21tdW5pY2F0aW9uLCB0aGF0IGlzIG5lZWRlZCBmb3IgZG1hLWJ1 ZiByZW1vdGUgdHJhY2tpbmcKKG5vIGZlbmNlIGZvcndhcmRpbmcgdGhvdWdoKSwgZXZlbnQgdHJp Z2dlcmluZyBhbmQgZXZlbnQgaGFuZGxpbmcsIGV4dHJhCm1ldGEgZGF0YSBleGNoYW5nZSBhbmQg aHlwZXJfZG1hYnVmX2lkIHRoYXQgcmVwcmVzZW50cyBncmVmcwooZ3JlZnMgYXJlIHNoYXJlZCBp bXBsaWNpdGx5IG9uIGRyaXZlciBsZXZlbCkKCkFsc28gaXQgaXMgZGVzaWduZWQgd2l0aCBmcm9u dGVuZCAoY29tbW9uIGNvcmUgZnJhbWV3b3JrKSArIGJhY2tlbmQKKGh5cGVyIHZpc29yIHNwZWNp ZmljIGNvbW0gYW5kIG1lbW9yeSBzaGFyaW5nKSBzdHJ1Y3R1cmUgZm9yIHBvcnRhYmlsaXR5LgpX ZSBqdXN0IGNhbid0IGxpbWl0IHRoaXMgZmVhdHVyZSB0byBYZW4gYmVjYXVzZSB3ZSB3YW50IHRv IHVzZSB0aGUgc2FtZQp1YXBpcyBub3Qgb25seSBmb3IgWGVuIGJ1dCBhbHNvIG90aGVyIGFwcGxp Y2FibGUgaHlwZXJ2aXNvciwgbGlrZSBBQ09STi4KClNvIEkgYW0gd29uZGVyaW5nIHdlIGNhbiBz dGFydCB3aXRoIHRoaXMgaHlwZXJfZG1hYnVmIHRoZW4gbW9kaWZ5IGl0IGZvcgp5b3VyIHVzZS1j YXNlIGlmIG5lZWRlZCBhbmQgcG9saXNoIGFuZCBmaXggYW55IGdsaXRjaGVzIGlmIHdlIHdhbnQg dG8gCnRvIHVzZSB0aGlzIGZvciBhbGwgZ2VuZXJhbCBkbWEtYnVmIHVzZWNhc2VzLgoKQWxzbywg SSBzdGlsbCBoYXZlIG9uZSB1bnJlc29sdmVkIHF1ZXN0aW9uIHJlZ2FyZGluZyB0aGUgZXhwb3J0 L2ltcG9ydCBmbG93CmluIGJvdGggb2YgaHlwZXJfZG1hYnVmIGFuZCB4ZW4temNvcHkuCgpAZGFu dmV0OiBXb3VsZCB0aGlzIGZsb3cgKGd1ZXN0MS0+aW1wb3J0IGV4aXN0aW5nIGRtYWJ1Zi0+c2hh cmUgdW5kZXJseWluZwpwYWdlcy0+Z3Vlc3QyLT5tYXAgc2hhcmVkIHBhZ2VzLT5jcmVhdGUvZXhw b3J0IGRtYWJ1ZikgYmUgYWNjZXB0YWJsZSBub3c/CgpSZWdhcmRzLApEVwogCk9uIE1vbiwgQXBy IDE2LCAyMDE4IGF0IDA1OjMzOjQ2UE0gKzAzMDAsIE9sZWtzYW5kciBBbmRydXNoY2hlbmtvIHdy b3RlOgo+IEhlbGxvLCBhbGwhCj4gCj4gQWZ0ZXIgZGlzY3Vzc2luZyB4ZW4temNvcHkgYW5kIGh5 cGVyLWRtYWJ1ZiBbMV0gYXBwcm9hY2hlcwo+IAo+IGl0IHNlZW1zIHRoYXQgeGVuLXpjb3B5IGNh biBiZSBtYWRlIG5vdCBkZXBlbmQgb24gRFJNIGNvcmUgYW55IG1vcmUKPiAKPiBhbmQgYmUgZG1h LWJ1ZiBjZW50cmljICh3aGljaCBpdCBpbiBmYWN0IGlzKS4KPiAKPiBUaGUgRFJNIGNvZGUgd2Fz IG1vc3RseSB0aGVyZSBmb3IgZG1hLWJ1ZidzIEZEIGltcG9ydC9leHBvcnQKPiAKPiB3aXRoIERS TSBQUklNRSBVQVBJIGFuZCB3aXRoIERSTSB1c2UtY2FzZXMgaW4gbWluZCwgYnV0IGl0IGNvbWVz IG91dCB0aGF0IGlmCj4gCj4gdGhlIHByb3Bvc2VkIDIgSU9DVExzIChEUk1fWEVOX1pDT1BZX0RV TUJfRlJPTV9SRUZTIGFuZAo+IERSTV9YRU5fWkNPUFlfRFVNQl9UT19SRUZTKQo+IAo+IGFyZSBl eHRlbmRlZCB0byBhbHNvIHByb3ZpZGUgYSBmaWxlIGRlc2NyaXB0b3Igb2YgdGhlIGNvcnJlc3Bv bmRpbmcgZG1hLWJ1ZiwKPiB0aGVuCj4gCj4gUFJJTUUgc3R1ZmYgaW4gdGhlIGRyaXZlciBpcyBu b3QgbmVlZGVkIGFueW1vcmUuCj4gCj4gVGhhdCBiZWluZyBzYWlkLCB4ZW4temNvcHkgY2FuIHNh ZmVseSBiZSBkZXRhY2hlZCBmcm9tIERSTSBhbmQgbW92ZWQgZnJvbQo+IAo+IGRyaXZlcnMvZ3B1 L2RybS94ZW4gaW50byBkcml2ZXJzL3hlbi9kbWEtYnVmLWJhY2tlbmQoPykuCj4gCj4gVGhpcyBk cml2ZXIgdGhlbiBiZWNvbWVzIGEgdW5pdmVyc2FsIHdheSB0byB0dXJuIGFueSBzaGFyZWQgYnVm ZmVyIGJldHdlZW4KPiBEb20wL0RvbUQKPiAKPiBhbmQgRG9tVShzKSBpbnRvIGEgZG1hLWJ1Ziwg ZS5nLiBvbmUgY2FuIGNyZWF0ZSBhIGRtYS1idWYgZnJvbSBhbnkgZ3JhbnQKPiByZWZlcmVuY2Vz Cj4gCj4gb3IgcmVwcmVzZW50IGEgZG1hLWJ1ZiBhcyBncmFudC1yZWZlcmVuY2VzIGZvciBleHBv cnQuCj4gCj4gVGhpcyB3YXkgdGhlIGRyaXZlciBjYW4gYmUgdXNlZCBub3Qgb25seSBmb3IgRFJN IHVzZS1jYXNlcywgYnV0IGFsc28gZm9yCj4gb3RoZXIKPiAKPiB1c2UtY2FzZXMgd2hpY2ggbWF5 IHJlcXVpcmUgemVybyBjb3B5aW5nIGJldHdlZW4gZG9tYWlucy4KPiAKPiBGb3IgZXhhbXBsZSwg dGhlIHVzZS1jYXNlcyB3ZSBhcmUgYWJvdXQgdG8gd29yayBpbiB0aGUgbmVhcmVzdCBmdXR1cmUg d2lsbAo+IHVzZQo+IAo+IFY0TCwgZS5nLiB3ZSBwbGFuIHRvIHN1cHBvcnQgY2FtZXJhcywgY29k ZWNzIGV0Yy4gYW5kIGFsbCB0aGVzZSB3aWxsIGJlbmVmaXQKPiAKPiBmcm9tIHplcm8gY29weWlu ZyBtdWNoLiBQb3RlbnRpYWxseSwgZXZlbiBibG9jay9uZXQgZGV2aWNlcyBtYXkgYmVuZWZpdCwK PiAKPiBidXQgdGhpcyBuZWVkcyBzb21lIGV2YWx1YXRpb24uCj4gCj4gCj4gSSB3b3VsZCBsb3Zl IHRvIGhlYXIgY29tbWVudHMgZm9yIGF1dGhvcnMgb2YgdGhlIGh5cGVyLWRtYWJ1Zgo+IAo+IGFu ZCBYZW4gY29tbXVuaXR5LCBhcyB3ZWxsIGFzIERSSS1EZXZlbCBhbmQgb3RoZXIgaW50ZXJlc3Rl ZCBwYXJ0aWVzLgo+IAo+IAo+IFRoYW5rIHlvdSwKPiAKPiBPbGVrc2FuZHIKPiAKPiAKPiBPbiAw My8yOS8yMDE4IDA0OjE5IFBNLCBPbGVrc2FuZHIgQW5kcnVzaGNoZW5rbyB3cm90ZToKPiA+RnJv bTogT2xla3NhbmRyIEFuZHJ1c2hjaGVua28gPG9sZWtzYW5kcl9hbmRydXNoY2hlbmtvQGVwYW0u Y29tPgo+ID4KPiA+SGVsbG8hCj4gPgo+ID5XaGVuIHVzaW5nIFhlbiBQViBEUk0gZnJvbnRlbmQg ZHJpdmVyIHRoZW4gb24gYmFja2VuZCBzaWRlIG9uZSB3aWxsIG5lZWQKPiA+dG8gZG8gY29weWlu ZyBvZiBkaXNwbGF5IGJ1ZmZlcnMnIGNvbnRlbnRzIChmaWxsZWQgYnkgdGhlCj4gPmZyb250ZW5k J3MgdXNlci1zcGFjZSkgaW50byBidWZmZXJzIGFsbG9jYXRlZCBhdCB0aGUgYmFja2VuZCBzaWRl Lgo+ID5UYWtpbmcgaW50byBhY2NvdW50IHRoZSBzaXplIG9mIGRpc3BsYXkgYnVmZmVycyBhbmQg ZnJhbWVzIHBlciBzZWNvbmRzCj4gPml0IG1heSByZXN1bHQgaW4gdW5uZWVkZWQgaHVnZSBkYXRh IGJ1cyBvY2N1cGF0aW9uIGFuZCBwZXJmb3JtYW5jZSBsb3NzLgo+ID4KPiA+VGhpcyBoZWxwZXIg ZHJpdmVyIGFsbG93cyBpbXBsZW1lbnRpbmcgemVyby1jb3B5aW5nIHVzZS1jYXNlcwo+ID53aGVu IHVzaW5nIFhlbiBwYXJhLXZpcnR1YWxpemVkIGZyb250ZW5kIGRpc3BsYXkgZHJpdmVyIGJ5Cj4g PmltcGxlbWVudGluZyBhIERSTS9LTVMgaGVscGVyIGRyaXZlciBydW5uaW5nIG9uIGJhY2tlbmQn cyBzaWRlLgo+ID5JdCB1dGlsaXplcyBQUklNRSBidWZmZXJzIEFQSSB0byBzaGFyZSBmcm9udGVu ZCdzIGJ1ZmZlcnMgd2l0aAo+ID5waHlzaWNhbCBkZXZpY2UgZHJpdmVycyBvbiBiYWNrZW5kJ3Mg c2lkZToKPiA+Cj4gPiAgLSBhIGR1bWIgYnVmZmVyIGNyZWF0ZWQgb24gYmFja2VuZCdzIHNpZGUg Y2FuIGJlIHNoYXJlZAo+ID4gICAgd2l0aCB0aGUgWGVuIFBWIGZyb250ZW5kIGRyaXZlciwgc28g aXQgZGlyZWN0bHkgd3JpdGVzCj4gPiAgICBpbnRvIGJhY2tlbmQncyBkb21haW4gbWVtb3J5IChp bnRvIHRoZSBidWZmZXIgZXhwb3J0ZWQgZnJvbQo+ID4gICAgRFJNL0tNUyBkcml2ZXIgb2YgYSBw aHlzaWNhbCBkaXNwbGF5IGRldmljZSkKPiA+ICAtIGEgZHVtYiBidWZmZXIgYWxsb2NhdGVkIGJ5 IHRoZSBmcm9udGVuZCBjYW4gYmUgaW1wb3J0ZWQKPiA+ICAgIGludG8gcGh5c2ljYWwgZGV2aWNl IERSTS9LTVMgZHJpdmVyLCB0aHVzIGFsbG93aW5nIHRvCj4gPiAgICBhY2hpZXZlIG5vIGNvcHlp bmcgYXMgd2VsbAo+ID4KPiA+Rm9yIHRoYXQgcmVhc29uIG51bWJlciBvZiBJT0NUTHMgYXJlIGlu dHJvZHVjZWQ6Cj4gPiAgLSAgRFJNX1hFTl9aQ09QWV9EVU1CX0ZST01fUkVGUwo+ID4gICAgIFRo aXMgd2lsbCBjcmVhdGUgYSBEUk0gZHVtYiBidWZmZXIgZnJvbSBncmFudCByZWZlcmVuY2VzIHBy b3ZpZGVkCj4gPiAgICAgYnkgdGhlIGZyb250ZW5kCj4gPiAgLSBEUk1fWEVOX1pDT1BZX0RVTUJf VE9fUkVGUwo+ID4gICAgVGhpcyB3aWxsIGdyYW50IHJlZmVyZW5jZXMgdG8gYSBkdW1iL2Rpc3Bs YXkgYnVmZmVyJ3MgbWVtb3J5IHByb3ZpZGVkCj4gPiAgICBieSB0aGUgYmFja2VuZAo+ID4gIC0g RFJNX1hFTl9aQ09QWV9EVU1CX1dBSVRfRlJFRQo+ID4gICAgVGhpcyB3aWxsIGJsb2NrIHVudGls IHRoZSBkdW1iIGJ1ZmZlciB3aXRoIHRoZSB3YWl0IGhhbmRsZSBwcm92aWRlZAo+ID4gICAgYmUg ZnJlZWQKPiA+Cj4gPldpdGggdGhpcyBoZWxwZXIgZHJpdmVyIEkgd2FzIGFibGUgdG8gZHJvcCBD UFUgdXNhZ2UgZnJvbSAxNyUgdG8gMyUKPiA+b24gUmVuZXNhcyBSLUNhciBNMyBib2FyZC4KPiA+ Cj4gPlRoaXMgd2FzIHRlc3RlZCB3aXRoIFJlbmVzYXMnIFdheWxhbmQtS01TIGFuZCBiYWNrZW5k IHJ1bm5pbmcgYXMgRFJNIG1hc3Rlci4KPiA+Cj4gPlRoYW5rIHlvdSwKPiA+T2xla3NhbmRyCj4g Pgo+ID5PbGVrc2FuZHIgQW5kcnVzaGNoZW5rbyAoMSk6Cj4gPiAgIGRybS94ZW4temNvcHk6IEFk ZCBYZW4gemVyby1jb3B5IGhlbHBlciBEUk0gZHJpdmVyCj4gPgo+ID4gIERvY3VtZW50YXRpb24v Z3B1L2RyaXZlcnMucnN0ICAgICAgICAgICAgICAgfCAgIDEgKwo+ID4gIERvY3VtZW50YXRpb24v Z3B1L3hlbi16Y29weS5yc3QgICAgICAgICAgICAgfCAgMzIgKwo+ID4gIGRyaXZlcnMvZ3B1L2Ry bS94ZW4vS2NvbmZpZyAgICAgICAgICAgICAgICAgfCAgMjUgKwo+ID4gIGRyaXZlcnMvZ3B1L2Ry bS94ZW4vTWFrZWZpbGUgICAgICAgICAgICAgICAgfCAgIDUgKwo+ID4gIGRyaXZlcnMvZ3B1L2Ry bS94ZW4veGVuX2RybV96Y29weS5jICAgICAgICAgfCA4ODAgKysrKysrKysrKysrKysrKysrKysr KysrKysrKwo+ID4gIGRyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV96Y29weV9iYWxsb29uLmMg fCAxNTQgKysrKysKPiA+ICBkcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1femNvcHlfYmFsbG9v bi5oIHwgIDM4ICsrCj4gPiAgaW5jbHVkZS91YXBpL2RybS94ZW5femNvcHlfZHJtLmggICAgICAg ICAgICB8IDEyOSArKysrCj4gPiAgOCBmaWxlcyBjaGFuZ2VkLCAxMjY0IGluc2VydGlvbnMoKykK PiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgRG9jdW1lbnRhdGlvbi9ncHUveGVuLXpjb3B5LnJzdAo+ ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1femNvcHku Ywo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1femNv cHlfYmFsbG9vbi5jCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS94ZW4v eGVuX2RybV96Y29weV9iYWxsb29uLmgKPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS91 YXBpL2RybS94ZW5femNvcHlfZHJtLmgKPiA+Cj4gWzFdCj4gaHR0cHM6Ly9saXN0cy54ZW5wcm9q ZWN0Lm9yZy9hcmNoaXZlcy9odG1sL3hlbi1kZXZlbC8yMDE4LTAyL21zZzAxMjAyLmh0bWwKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1h aWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==