From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from lb1-smtp-cloud9.xs4all.net ([194.109.24.22]:60129 "EHLO lb1-smtp-cloud9.xs4all.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726597AbeIIPbX (ORCPT ); Sun, 9 Sep 2018 11:31:23 -0400 Subject: Re: [Xen-devel][PATCH 1/1] cameraif: add ABI for para-virtual camera To: Oleksandr Andrushchenko , Juergen Gross , xen-devel@lists.xenproject.org, konrad.wilk@oracle.com, boris.ostrovsky@oracle.com, mchehab@kernel.org, linux-media@vger.kernel.org, sakari.ailus@linux.intel.com, koji.matsuoka.xm@renesas.com Cc: Oleksandr Andrushchenko , Artem Mygaiev References: <20180731093142.3828-1-andr2000@gmail.com> <20180731093142.3828-2-andr2000@gmail.com> <99cd131d-85ae-bbfb-61ef-fdc0401727f6@suse.com> <5505e5af-5b64-b317-a0d8-09c11317926f@gmail.com> <345d7ec3-3ca3-e8fe-28a0-ba299196b5e4@gmail.com> <53189190-ffe0-9795-b01c-01de8db83acb@gmail.com> From: Hans Verkuil Message-ID: <641cd785-c5e7-7552-dc4b-35249f1f1985@xs4all.nl> Date: Sun, 9 Sep 2018 12:42:04 +0200 MIME-Version: 1.0 In-Reply-To: <53189190-ffe0-9795-b01c-01de8db83acb@gmail.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-media-owner@vger.kernel.org List-ID: On 09/04/2018 08:56 AM, Oleksandr Andrushchenko wrote: > On 09/03/2018 06:25 PM, Hans Verkuil wrote: >> Hi Oleksandr, >> >> On 09/03/2018 12:16 PM, Oleksandr Andrushchenko wrote: >>> On 08/21/2018 08:54 AM, Oleksandr Andrushchenko wrote: >>>> On 08/14/2018 11:30 AM, Juergen Gross wrote: >>>>> On 31/07/18 11:31, Oleksandr Andrushchenko wrote: >>>>>> From: Oleksandr Andrushchenko >>>>>> >>>>>> This is the ABI for the two halves of a para-virtualized >>>>>> camera driver which extends Xen's reach multimedia capabilities even >>>>>> farther enabling it for video conferencing, In-Vehicle Infotainment, >>>>>> high definition maps etc. >>>>>> >>>>>> The initial goal is to support most needed functionality with the >>>>>> final idea to make it possible to extend the protocol if need be: >>>>>> >>>>>> 1. Provide means for base virtual device configuration: >>>>>> - pixel formats >>>>>> - resolutions >>>>>> - frame rates >>>>>> 2. Support basic camera controls: >>>>>> - contrast >>>>>> - brightness >>>>>> - hue >>>>>> - saturation >>>>>> 3. Support streaming control >>>>>> 4. Support zero-copying use-cases >>>>>> >>>>>> Signed-off-by: Oleksandr Andrushchenko >>>>>> >>>>> Some style issues below... >>>> Will fix all the below, thank you! >>>> >>>> I would like to draw some attention of the Linux/V4L community to this >>>> protocol as the plan is that once it is accepted for Xen we plan to >>>> upstream a Linux camera front-end kernel driver which will be based >>>> on this work and will be a V4L2 device driver (this is why I have sent >>>> this patch not only to Xen, but to the corresponding Linux mailing list >>>> as well) >>> ping >> Sorry, this got buried in my mailbox, I only came across it today. I'll try >> to review this this week, if not, just ping me again. > Thank you for your time >> >> I had one high-level question, though: >> >> What types of hardware do you intend to target? This initial version targets >> (very) simple webcams, but what about HDMI or SDTV receivers? Or hardware >> codecs? Or complex embedded video pipelines? >> >> In other words, where are you planning to draw the line? >> >> Even with just simple cameras there is a difference between regular UVC >> webcams and cameras used with embedded systems: for the latter you often >> need to provide more control w.r.t. white-balancing etc., things that a >> UVC webcam will generally do for you in the webcam's firmware. > The use-cases we want to implement are mostly in automotive/embedded domain, > so there are many performance restrictions apply. > We are not targeting virtualizing very complex hardware and have no > intention > to make a 1:1 mapping of the real hardware: for that one can pass-through > a real HW device to a virtual machine (VM). The goal is to share a single > camera device to multiple virtual machines, no codecs, receivers etc. > > Controlling the same HW device from different VMs doesn't look feasible: > what if the same control is set to different values from different VMs? You can do this, actually: in V4L2 you can get an event when another process changes a control, and update your own GUI/internal state accordingly. So in this case if one VM changes a control, an event is sent to all others that the control has changed value. > Of course, this can be achieved if the corresponding backend can > post-process > original camera image with GPU, for example, thus applying different filters > for different VMs effectively emulating camera controls. > But this requires additional CPU/GPU power which we try to avoid. > > System partitioning (camera and controls assignment) is done at > configuration > time (remember we are in automotive/embedded world, so most of the time > the set > of VMs requiring cameras is known at this stage and the configuration > remains > static at run-time). So, when para-virtualized (PV) approach is used then we > only implement very basic controls (those found in the protocol), so one can > assign set of controls (all or some) to one of the VMs (main or mission > critical > VM or whatever) allowing that VM to adjusts those for all VMs at once. > For other > VMs think of it as firmware implemented adjustment. And the backend still > controls the rest of the controls of the real HW camera you mention. > > Just an example of automotive use-case (we can imagine many more): > 1. Driver Domain - owns real camera HW and runs the camera backend. > Uses camera output for mission critical tasks, e.g. parking assistance. > 2. In-Vehicle Infotainment domain - uses PV camera for infotainment > purposes, > e.g. taking pictures while in motion. > 3. Navigation domain - uses PV camera for high definition maps > > Hope, this helps understanding the possible uses of the proposed > protocol, its > intention and restrictions. Right, so in this scenario you probably do not want hotpluggable sources in the Driver Domain. So support for fixed camera's only. If this is indeed the case, then this should be made very clear in the API specification. One additional thing to consider: cameras can break. So what should be done if that happens? We as media developers have ideas about that, but nothing has been implemented (yet). If the HW is simple (one camera is driven by a single driver instance), then if it breaks, there simply won't be a video device. But if you have multiple cameras all controlled through the same driver instance, then today if a single camera breaks, all are gone. We have ideas on how to address that, but as I said, nothing is implemented yet. Basically we need to allow for partial bring-up and inform userspace what is and what is not running. But this is likely something you also need to consider in this API, given the use-case you are looking at. Regards, Hans From mboxrd@z Thu Jan 1 00:00:00 1970 From: Hans Verkuil Subject: Re: [PATCH 1/1] cameraif: add ABI for para-virtual camera Date: Sun, 9 Sep 2018 12:42:04 +0200 Message-ID: <641cd785-c5e7-7552-dc4b-35249f1f1985@xs4all.nl> References: <20180731093142.3828-1-andr2000@gmail.com> <20180731093142.3828-2-andr2000@gmail.com> <99cd131d-85ae-bbfb-61ef-fdc0401727f6@suse.com> <5505e5af-5b64-b317-a0d8-09c11317926f@gmail.com> <345d7ec3-3ca3-e8fe-28a0-ba299196b5e4@gmail.com> <53189190-ffe0-9795-b01c-01de8db83acb@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1fyxAQ-0005bU-92 for xen-devel@lists.xenproject.org; Sun, 09 Sep 2018 10:42:10 +0000 In-Reply-To: <53189190-ffe0-9795-b01c-01de8db83acb@gmail.com> Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Oleksandr Andrushchenko , Juergen Gross , xen-devel@lists.xenproject.org, konrad.wilk@oracle.com, boris.ostrovsky@oracle.com, mchehab@kernel.org, linux-media@vger.kernel.org, sakari.ailus@linux.intel.com, koji.matsuoka.xm@renesas.com Cc: Artem Mygaiev , Oleksandr Andrushchenko List-Id: xen-devel@lists.xenproject.org T24gMDkvMDQvMjAxOCAwODo1NiBBTSwgT2xla3NhbmRyIEFuZHJ1c2hjaGVua28gd3JvdGU6Cj4g T24gMDkvMDMvMjAxOCAwNjoyNSBQTSwgSGFucyBWZXJrdWlsIHdyb3RlOgo+PiBIaSBPbGVrc2Fu ZHIsCj4+Cj4+IE9uIDA5LzAzLzIwMTggMTI6MTYgUE0sIE9sZWtzYW5kciBBbmRydXNoY2hlbmtv IHdyb3RlOgo+Pj4gT24gMDgvMjEvMjAxOCAwODo1NCBBTSwgT2xla3NhbmRyIEFuZHJ1c2hjaGVu a28gd3JvdGU6Cj4+Pj4gT24gMDgvMTQvMjAxOCAxMTozMCBBTSwgSnVlcmdlbiBHcm9zcyB3cm90 ZToKPj4+Pj4gT24gMzEvMDcvMTggMTE6MzEsIE9sZWtzYW5kciBBbmRydXNoY2hlbmtvIHdyb3Rl Ogo+Pj4+Pj4gRnJvbTogT2xla3NhbmRyIEFuZHJ1c2hjaGVua28gPG9sZWtzYW5kcl9hbmRydXNo Y2hlbmtvQGVwYW0uY29tPgo+Pj4+Pj4KPj4+Pj4+IFRoaXMgaXMgdGhlIEFCSSBmb3IgdGhlIHR3 byBoYWx2ZXMgb2YgYSBwYXJhLXZpcnR1YWxpemVkCj4+Pj4+PiBjYW1lcmEgZHJpdmVyIHdoaWNo IGV4dGVuZHMgWGVuJ3MgcmVhY2ggbXVsdGltZWRpYSBjYXBhYmlsaXRpZXMgZXZlbgo+Pj4+Pj4g ZmFydGhlciBlbmFibGluZyBpdCBmb3IgdmlkZW8gY29uZmVyZW5jaW5nLCBJbi1WZWhpY2xlIElu Zm90YWlubWVudCwKPj4+Pj4+IGhpZ2ggZGVmaW5pdGlvbiBtYXBzIGV0Yy4KPj4+Pj4+Cj4+Pj4+ PiBUaGUgaW5pdGlhbCBnb2FsIGlzIHRvIHN1cHBvcnQgbW9zdCBuZWVkZWQgZnVuY3Rpb25hbGl0 eSB3aXRoIHRoZQo+Pj4+Pj4gZmluYWwgaWRlYSB0byBtYWtlIGl0IHBvc3NpYmxlIHRvIGV4dGVu ZCB0aGUgcHJvdG9jb2wgaWYgbmVlZCBiZToKPj4+Pj4+Cj4+Pj4+PiAxLiBQcm92aWRlIG1lYW5z IGZvciBiYXNlIHZpcnR1YWwgZGV2aWNlIGNvbmZpZ3VyYXRpb246Cj4+Pj4+PiAgICAtIHBpeGVs IGZvcm1hdHMKPj4+Pj4+ICAgIC0gcmVzb2x1dGlvbnMKPj4+Pj4+ICAgIC0gZnJhbWUgcmF0ZXMK Pj4+Pj4+IDIuIFN1cHBvcnQgYmFzaWMgY2FtZXJhIGNvbnRyb2xzOgo+Pj4+Pj4gICAgLSBjb250 cmFzdAo+Pj4+Pj4gICAgLSBicmlnaHRuZXNzCj4+Pj4+PiAgICAtIGh1ZQo+Pj4+Pj4gICAgLSBz YXR1cmF0aW9uCj4+Pj4+PiAzLiBTdXBwb3J0IHN0cmVhbWluZyBjb250cm9sCj4+Pj4+PiA0LiBT dXBwb3J0IHplcm8tY29weWluZyB1c2UtY2FzZXMKPj4+Pj4+Cj4+Pj4+PiBTaWduZWQtb2ZmLWJ5 OiBPbGVrc2FuZHIgQW5kcnVzaGNoZW5rbwo+Pj4+Pj4gPG9sZWtzYW5kcl9hbmRydXNoY2hlbmtv QGVwYW0uY29tPgo+Pj4+PiBTb21lIHN0eWxlIGlzc3VlcyBiZWxvdy4uLgo+Pj4+IFdpbGwgZml4 IGFsbCB0aGUgYmVsb3csIHRoYW5rIHlvdSEKPj4+Pgo+Pj4+IEkgd291bGQgbGlrZSB0byBkcmF3 IHNvbWUgYXR0ZW50aW9uIG9mIHRoZSBMaW51eC9WNEwgY29tbXVuaXR5IHRvIHRoaXMKPj4+PiBw cm90b2NvbCBhcyB0aGUgcGxhbiBpcyB0aGF0IG9uY2UgaXQgaXMgYWNjZXB0ZWQgZm9yIFhlbiB3 ZSBwbGFuIHRvCj4+Pj4gdXBzdHJlYW0gYSBMaW51eCBjYW1lcmEgZnJvbnQtZW5kIGtlcm5lbCBk cml2ZXIgd2hpY2ggd2lsbCBiZSBiYXNlZAo+Pj4+IG9uIHRoaXMgd29yayBhbmQgd2lsbCBiZSBh IFY0TDIgZGV2aWNlIGRyaXZlciAodGhpcyBpcyB3aHkgSSBoYXZlIHNlbnQKPj4+PiB0aGlzIHBh dGNoIG5vdCBvbmx5IHRvIFhlbiwgYnV0IHRvIHRoZSBjb3JyZXNwb25kaW5nIExpbnV4IG1haWxp bmcgbGlzdAo+Pj4+IGFzIHdlbGwpCj4+PiBwaW5nCj4+IFNvcnJ5LCB0aGlzIGdvdCBidXJpZWQg aW4gbXkgbWFpbGJveCwgSSBvbmx5IGNhbWUgYWNyb3NzIGl0IHRvZGF5LiBJJ2xsIHRyeQo+PiB0 byByZXZpZXcgdGhpcyB0aGlzIHdlZWssIGlmIG5vdCwganVzdCBwaW5nIG1lIGFnYWluLgo+IFRo YW5rIHlvdSBmb3IgeW91ciB0aW1lCj4+Cj4+IEkgaGFkIG9uZSBoaWdoLWxldmVsIHF1ZXN0aW9u LCB0aG91Z2g6Cj4+Cj4+IFdoYXQgdHlwZXMgb2YgaGFyZHdhcmUgZG8geW91IGludGVuZCB0byB0 YXJnZXQ/IFRoaXMgaW5pdGlhbCB2ZXJzaW9uIHRhcmdldHMKPj4gKHZlcnkpIHNpbXBsZSB3ZWJj YW1zLCBidXQgd2hhdCBhYm91dCBIRE1JIG9yIFNEVFYgcmVjZWl2ZXJzPyBPciBoYXJkd2FyZQo+ PiBjb2RlY3M/IE9yIGNvbXBsZXggZW1iZWRkZWQgdmlkZW8gcGlwZWxpbmVzPwo+Pgo+PiBJbiBv dGhlciB3b3Jkcywgd2hlcmUgYXJlIHlvdSBwbGFubmluZyB0byBkcmF3IHRoZSBsaW5lPwo+Pgo+ PiBFdmVuIHdpdGgganVzdCBzaW1wbGUgY2FtZXJhcyB0aGVyZSBpcyBhIGRpZmZlcmVuY2UgYmV0 d2VlbiByZWd1bGFyIFVWQwo+PiB3ZWJjYW1zIGFuZCBjYW1lcmFzIHVzZWQgd2l0aCBlbWJlZGRl ZCBzeXN0ZW1zOiBmb3IgdGhlIGxhdHRlciB5b3Ugb2Z0ZW4KPj4gbmVlZCB0byBwcm92aWRlIG1v cmUgY29udHJvbCB3LnIudC4gd2hpdGUtYmFsYW5jaW5nIGV0Yy4sIHRoaW5ncyB0aGF0IGEKPj4g VVZDIHdlYmNhbSB3aWxsIGdlbmVyYWxseSBkbyBmb3IgeW91IGluIHRoZSB3ZWJjYW0ncyBmaXJt d2FyZS4KPiBUaGUgdXNlLWNhc2VzIHdlIHdhbnQgdG8gaW1wbGVtZW50IGFyZSBtb3N0bHkgaW4g YXV0b21vdGl2ZS9lbWJlZGRlZCBkb21haW4sCj4gc28gdGhlcmUgYXJlIG1hbnkgcGVyZm9ybWFu Y2UgcmVzdHJpY3Rpb25zIGFwcGx5Lgo+IFdlIGFyZSBub3QgdGFyZ2V0aW5nIHZpcnR1YWxpemlu ZyB2ZXJ5IGNvbXBsZXggaGFyZHdhcmUgYW5kIGhhdmUgbm8gCj4gaW50ZW50aW9uCj4gdG8gbWFr ZSBhIDE6MSBtYXBwaW5nIG9mIHRoZSByZWFsIGhhcmR3YXJlOiBmb3IgdGhhdCBvbmUgY2FuIHBh c3MtdGhyb3VnaAo+IGEgcmVhbCBIVyBkZXZpY2UgdG8gYSB2aXJ0dWFsIG1hY2hpbmUgKFZNKS4g VGhlIGdvYWwgaXMgdG8gc2hhcmUgYSBzaW5nbGUKPiBjYW1lcmEgZGV2aWNlIHRvIG11bHRpcGxl IHZpcnR1YWwgbWFjaGluZXMsIG5vIGNvZGVjcywgcmVjZWl2ZXJzIGV0Yy4KPiAKPiBDb250cm9s bGluZyB0aGUgc2FtZSBIVyBkZXZpY2UgZnJvbSBkaWZmZXJlbnQgVk1zIGRvZXNuJ3QgbG9vayBm ZWFzaWJsZToKPiB3aGF0IGlmIHRoZSBzYW1lIGNvbnRyb2wgaXMgc2V0IHRvIGRpZmZlcmVudCB2 YWx1ZXMgZnJvbSBkaWZmZXJlbnQgVk1zPwoKWW91IGNhbiBkbyB0aGlzLCBhY3R1YWxseTogaW4g VjRMMiB5b3UgY2FuIGdldCBhbiBldmVudCB3aGVuIGFub3RoZXIgcHJvY2VzcwpjaGFuZ2VzIGEg Y29udHJvbCwgYW5kIHVwZGF0ZSB5b3VyIG93biBHVUkvaW50ZXJuYWwgc3RhdGUgYWNjb3JkaW5n bHkuCgpTbyBpbiB0aGlzIGNhc2UgaWYgb25lIFZNIGNoYW5nZXMgYSBjb250cm9sLCBhbiBldmVu dCBpcyBzZW50IHRvIGFsbCBvdGhlcnMKdGhhdCB0aGUgY29udHJvbCBoYXMgY2hhbmdlZCB2YWx1 ZS4KCj4gT2YgY291cnNlLCB0aGlzIGNhbiBiZSBhY2hpZXZlZCBpZiB0aGUgY29ycmVzcG9uZGlu ZyBiYWNrZW5kIGNhbiAKPiBwb3N0LXByb2Nlc3MKPiBvcmlnaW5hbCBjYW1lcmEgaW1hZ2Ugd2l0 aCBHUFUsIGZvciBleGFtcGxlLCB0aHVzIGFwcGx5aW5nIGRpZmZlcmVudCBmaWx0ZXJzCj4gZm9y IGRpZmZlcmVudCBWTXMgZWZmZWN0aXZlbHkgZW11bGF0aW5nIGNhbWVyYSBjb250cm9scy4KPiBC dXQgdGhpcyByZXF1aXJlcyBhZGRpdGlvbmFsIENQVS9HUFUgcG93ZXIgd2hpY2ggd2UgdHJ5IHRv IGF2b2lkLgo+IAo+IFN5c3RlbSBwYXJ0aXRpb25pbmcgKGNhbWVyYSBhbmQgY29udHJvbHMgYXNz aWdubWVudCkgaXMgZG9uZSBhdCAKPiBjb25maWd1cmF0aW9uCj4gdGltZSAocmVtZW1iZXIgd2Ug YXJlIGluIGF1dG9tb3RpdmUvZW1iZWRkZWQgd29ybGQsIHNvIG1vc3Qgb2YgdGhlIHRpbWUgCj4g dGhlIHNldAo+IG9mIFZNcyByZXF1aXJpbmcgY2FtZXJhcyBpcyBrbm93biBhdCB0aGlzIHN0YWdl IGFuZCB0aGUgY29uZmlndXJhdGlvbiAKPiByZW1haW5zCj4gc3RhdGljIGF0IHJ1bi10aW1lKS4g U28sIHdoZW4gcGFyYS12aXJ0dWFsaXplZCAoUFYpIGFwcHJvYWNoIGlzIHVzZWQgdGhlbiB3ZQo+ IG9ubHkgaW1wbGVtZW50IHZlcnkgYmFzaWMgY29udHJvbHMgKHRob3NlIGZvdW5kIGluIHRoZSBw cm90b2NvbCksIHNvIG9uZSBjYW4KPiBhc3NpZ24gc2V0IG9mIGNvbnRyb2xzIChhbGwgb3Igc29t ZSkgdG8gb25lIG9mIHRoZSBWTXMgKG1haW4gb3IgbWlzc2lvbiAKPiBjcml0aWNhbAo+IFZNIG9y IHdoYXRldmVyKSBhbGxvd2luZyB0aGF0IFZNIHRvIGFkanVzdHMgdGhvc2UgZm9yIGFsbCBWTXMg YXQgb25jZS4gCj4gRm9yIG90aGVyCj4gVk1zIHRoaW5rIG9mIGl0IGFzIGZpcm13YXJlIGltcGxl bWVudGVkIGFkanVzdG1lbnQuIEFuZCB0aGUgYmFja2VuZCBzdGlsbAo+IGNvbnRyb2xzIHRoZSBy ZXN0IG9mIHRoZSBjb250cm9scyBvZiB0aGUgcmVhbCBIVyBjYW1lcmEgeW91IG1lbnRpb24uCj4g Cj4gSnVzdCBhbiBleGFtcGxlIG9mIGF1dG9tb3RpdmUgdXNlLWNhc2UgKHdlIGNhbiBpbWFnaW5l IG1hbnkgbW9yZSk6Cj4gMS4gRHJpdmVyIERvbWFpbiAtIG93bnMgcmVhbCBjYW1lcmEgSFcgYW5k IHJ1bnMgdGhlIGNhbWVyYSBiYWNrZW5kLgo+ICAgICBVc2VzIGNhbWVyYSBvdXRwdXQgZm9yIG1p c3Npb24gY3JpdGljYWwgdGFza3MsIGUuZy4gcGFya2luZyBhc3Npc3RhbmNlLgo+IDIuIEluLVZl aGljbGUgSW5mb3RhaW5tZW50IGRvbWFpbiAtIHVzZXMgUFYgY2FtZXJhIGZvciBpbmZvdGFpbm1l bnQgCj4gcHVycG9zZXMsCj4gICAgIGUuZy4gdGFraW5nIHBpY3R1cmVzIHdoaWxlIGluIG1vdGlv bi4KPiAzLiBOYXZpZ2F0aW9uIGRvbWFpbiAtIHVzZXMgUFYgY2FtZXJhIGZvciBoaWdoIGRlZmlu aXRpb24gbWFwcwo+IAo+IEhvcGUsIHRoaXMgaGVscHMgdW5kZXJzdGFuZGluZyB0aGUgcG9zc2li bGUgdXNlcyBvZiB0aGUgcHJvcG9zZWQgCj4gcHJvdG9jb2wsIGl0cwo+IGludGVudGlvbiBhbmQg cmVzdHJpY3Rpb25zLgoKUmlnaHQsIHNvIGluIHRoaXMgc2NlbmFyaW8geW91IHByb2JhYmx5IGRv IG5vdCB3YW50IGhvdHBsdWdnYWJsZQpzb3VyY2VzIGluIHRoZSBEcml2ZXIgRG9tYWluLiBTbyBz dXBwb3J0IGZvciBmaXhlZCBjYW1lcmEncyBvbmx5LgoKSWYgdGhpcyBpcyBpbmRlZWQgdGhlIGNh c2UsIHRoZW4gdGhpcyBzaG91bGQgYmUgbWFkZSB2ZXJ5IGNsZWFyIGluCnRoZSBBUEkgc3BlY2lm aWNhdGlvbi4KCk9uZSBhZGRpdGlvbmFsIHRoaW5nIHRvIGNvbnNpZGVyOiBjYW1lcmFzIGNhbiBi cmVhay4gU28gd2hhdCBzaG91bGQgYmUKZG9uZSBpZiB0aGF0IGhhcHBlbnM/IFdlIGFzIG1lZGlh IGRldmVsb3BlcnMgaGF2ZSBpZGVhcyBhYm91dCB0aGF0LCBidXQKbm90aGluZyBoYXMgYmVlbiBp bXBsZW1lbnRlZCAoeWV0KS4KCklmIHRoZSBIVyBpcyBzaW1wbGUgKG9uZSBjYW1lcmEgaXMgZHJp dmVuIGJ5IGEgc2luZ2xlIGRyaXZlciBpbnN0YW5jZSksCnRoZW4gaWYgaXQgYnJlYWtzLCB0aGVy ZSBzaW1wbHkgd29uJ3QgYmUgYSB2aWRlbyBkZXZpY2UuIEJ1dCBpZiB5b3UgaGF2ZQptdWx0aXBs ZSBjYW1lcmFzIGFsbCBjb250cm9sbGVkIHRocm91Z2ggdGhlIHNhbWUgZHJpdmVyIGluc3RhbmNl LCB0aGVuIHRvZGF5CmlmIGEgc2luZ2xlIGNhbWVyYSBicmVha3MsIGFsbCBhcmUgZ29uZS4KCldl IGhhdmUgaWRlYXMgb24gaG93IHRvIGFkZHJlc3MgdGhhdCwgYnV0IGFzIEkgc2FpZCwgbm90aGlu ZyBpcyBpbXBsZW1lbnRlZAp5ZXQuIEJhc2ljYWxseSB3ZSBuZWVkIHRvIGFsbG93IGZvciBwYXJ0 aWFsIGJyaW5nLXVwIGFuZCBpbmZvcm0gdXNlcnNwYWNlCndoYXQgaXMgYW5kIHdoYXQgaXMgbm90 IHJ1bm5pbmcuCgpCdXQgdGhpcyBpcyBsaWtlbHkgc29tZXRoaW5nIHlvdSBhbHNvIG5lZWQgdG8g Y29uc2lkZXIgaW4gdGhpcyBBUEksIGdpdmVuCnRoZSB1c2UtY2FzZSB5b3UgYXJlIGxvb2tpbmcg YXQuCgpSZWdhcmRzLAoKCUhhbnMKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbnBy b2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby94 ZW4tZGV2ZWw=