From mboxrd@z Thu Jan 1 00:00:00 1970 From: Oleksandr Andrushchenko Subject: Re: [RfC PATCH] Add udmabuf misc device Date: Mon, 16 Apr 2018 10:16:31 +0300 Message-ID: References: <20180406001117.GD31612@mdroper-desk.amr.corp.intel.com> <2411d2c1-33c0-2ba5-67ea-3bb9af5d5ec9@epam.com> <20180406090747.gwiegu22z4noj23i@sirius.home.kraxel.org> <9a085854-3758-1500-9971-806c611cb54f@gmail.com> <20180406115730.jtwcbz5okrphlxli@sirius.home.kraxel.org> <7ef89a29-6584-d23c-efd1-f30d9b767a24@gmail.com> <20180406185746.GA4983@downor-Z87X-UD5H> <20180410172605.GA26472@downor-Z87X-UD5H> <20180413153708.GW31310@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mail-lf0-x244.google.com (mail-lf0-x244.google.com [IPv6:2a00:1450:4010:c07::244]) by gabe.freedesktop.org (Postfix) with ESMTPS id F1CBD6E2C7 for ; Mon, 16 Apr 2018 07:16:36 +0000 (UTC) Received: by mail-lf0-x244.google.com with SMTP id n14-v6so2904061lfe.5 for ; Mon, 16 Apr 2018 00:16:36 -0700 (PDT) In-Reply-To: <20180413153708.GW31310@phenom.ffwll.local> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Dongwon Kim , Tomeu Vizoso , David Airlie , open list , dri-devel , qemu-devel@nongnu.org, "moderated list:DMA BUFFER SHARING FRAMEWORK" , Gerd Hoffmann , "open list:DMA BUFFER SHARING FRAMEWORK" , Daniel Vetter Cc: "Oleksandr_Andrushchenko@epam.com" List-Id: dri-devel@lists.freedesktop.org T24gMDQvMTMvMjAxOCAwNjozNyBQTSwgRGFuaWVsIFZldHRlciB3cm90ZToKPiBPbiBXZWQsIEFw ciAxMSwgMjAxOCBhdCAwODo1OTozMkFNICswMzAwLCBPbGVrc2FuZHIgQW5kcnVzaGNoZW5rbyB3 cm90ZToKPj4gT24gMDQvMTAvMjAxOCAwODoyNiBQTSwgRG9uZ3dvbiBLaW0gd3JvdGU6Cj4+PiBP biBUdWUsIEFwciAxMCwgMjAxOCBhdCAwOTozNzo1M0FNICswMzAwLCBPbGVrc2FuZHIgQW5kcnVz aGNoZW5rbyB3cm90ZToKPj4+PiBPbiAwNC8wNi8yMDE4IDA5OjU3IFBNLCBEb25nd29uIEtpbSB3 cm90ZToKPj4+Pj4gT24gRnJpLCBBcHIgMDYsIDIwMTggYXQgMDM6MzY6MDNQTSArMDMwMCwgT2xl a3NhbmRyIEFuZHJ1c2hjaGVua28gd3JvdGU6Cj4+Pj4+PiBPbiAwNC8wNi8yMDE4IDAyOjU3IFBN LCBHZXJkIEhvZmZtYW5uIHdyb3RlOgo+Pj4+Pj4+ICAgICBIaSwKPj4+Pj4+Pgo+Pj4+Pj4+Pj4g SSBmYWlsIHRvIHNlZSBhbnkgY29tbW9uIGdyb3VuZCBmb3IgeGVuLXpjb3B5IGFuZCB1ZG1hYnVm IC4uLgo+Pj4+Pj4+PiBEb2VzIHRoZSBhYm92ZSBtZWFuIHlvdSBjYW4gYXNzdW1lIHRoYXQgeGVu LXpjb3B5IGFuZCB1ZG1hYnVmCj4+Pj4+Pj4+IGNhbiBjby1leGlzdCBhcyB0d28gZGlmZmVyZW50 IHNvbHV0aW9ucz8KPj4+Pj4+PiBXZWxsLCB1ZG1hYnVmIHJvdXRlIGlzbid0IGZ1bGx5IGNsZWFy IHlldCwgYnV0IHllcy4KPj4+Pj4+Pgo+Pj4+Pj4+IFNlZSBhbHNvIGd2dCAoaW50ZWwgdmdwdSks IHdoZXJlIHRoZSBoeXBlcnZpc29yIGludGVyZmFjZSBpcyBhYnN0cmFjdGVkCj4+Pj4+Pj4gYXdh eSBpbnRvIGEgc2VwYXJhdGUga2VybmVsIG1vZHVsZXMgZXZlbiB0aG91Z2ggbW9zdCBvZiB0aGUg YWN0dWFsIHZncHUKPj4+Pj4+PiBlbXVsYXRpb24gY29kZSBpcyBjb21tb24uCj4+Pj4+PiBUaGFu ayB5b3UgZm9yIHlvdXIgaW5wdXQsIEknbSBqdXN0IHRyeWluZyB0byBmaWd1cmUgb3V0Cj4+Pj4+ PiB3aGljaCBvZiB0aGUgdGhyZWUgei1jb3B5IHNvbHV0aW9ucyBpbnRlcnNlY3QgYW5kIGhvdyBt dWNoCj4+Pj4+Pj4+IEFuZCB3aGF0IGFib3V0IGh5cGVyLWRtYWJ1Zj8KPj4+Pj4geGVuIHotY29w eSBzb2x1dGlvbiBpcyBwcmV0dHkgc2ltaWxhciBmdW5kYW1lbnRhbGx5IHRvIGh5cGVyX2RtYWJ1 Zgo+Pj4+PiBpbiB0ZXJtcyBvZiB0aGVzZSBjb3JlIHNoYXJpbmcgZmVhdHVyZToKPj4+Pj4KPj4+ Pj4gMS4gdGhlIHNoYXJpbmcgcHJvY2VzcyAtIGltcG9ydCBwcmltZS9kbWFidWYgZnJvbSB0aGUg cHJvZHVjZXIgLT4gZXh0cmFjdAo+Pj4+PiB1bmRlcmx5aW5nIHBhZ2VzIGFuZCBnZXQgdGhvc2Ug c2hhcmVkIC0+IHJldHVybiByZWZlcmVuY2VzIGZvciBzaGFyZWQgcGFnZXMKPj4+IEFub3RoZXIg dGhpbmcgaXMgZGFudmV0IHdhcyBraW5kIG9mIGFnYWluc3QgdG8gdGhlIGlkZWEgb2YgaW1wb3J0 aW5nIGV4aXN0aW5nCj4+PiBkbWFidWYvcHJpbWUgYnVmZmVyIGFuZCBmb3J3YXJkIGl0IHRvIHRo ZSBvdGhlciBkb21haW4gZHVlIHRvIHN5bmNocm9uaXphdGlvbgo+Pj4gaXNzdWVzLiBIZSBwcm9w b3NlZCB0byBtYWtlIGh5cGVyX2RtYWJ1ZiBvbmx5IHdvcmsgYXMgYW4gZXhwb3J0ZXIgc28gdGhh dCBpdAo+Pj4gY2FuIGhhdmUgYSBmdWxsIGNvbnRyb2wgb3ZlciB0aGUgYnVmZmVyLiBJIHRoaW5r IHdlIG5lZWQgdG8gdGFsayBhYm91dCB0aGlzCj4+PiBmdXJ0aGVyIGFzIHdlbGwuCj4+IFllcywg SSBzYXcgdGhpcy4gQnV0IHRoaXMgbGltaXRzIHRoZSB1c2UtY2FzZXMgc28gbXVjaC4KPj4gRm9y IGluc3RhbmNlLCBydW5uaW5nIEFuZHJvaWQgYXMgYSBHdWVzdCAod2hpY2ggdXNlcyBJT04gdG8g YWxsb2NhdGUKPj4gYnVmZmVycykgbWVhbnMgdGhhdCBmaW5hbGx5IEhXIGNvbXBvc2VyIHdpbGwg aW1wb3J0IGRtYS1idWYgaW50bwo+PiB0aGUgRFJNIGRyaXZlci4gVGhlbiwgaW4gY2FzZSBvZiB4 ZW4tZnJvbnQgZm9yIGV4YW1wbGUsIGl0IG5lZWRzIHRvIGJlCj4+IHNoYXJlZCB3aXRoIHRoZSBi YWNrZW5kIChIb3N0IHNpZGUpLiBPZiBjb3Vyc2UsIHdlIGNhbiBjaGFuZ2UgdXNlci1zcGFjZQo+ PiB0byBtYWtlIHhlbi1mcm9udCBhbGxvY2F0ZSB0aGUgYnVmZmVycyAobWFrZSBpdCBleHBvcnRl ciksIGJ1dCB3aGF0IHdlIHRyeQo+PiB0byBhdm9pZCBpcyB0byBjaGFuZ2UgdXNlci1zcGFjZSB3 aGljaCBpbiBub3JtYWwgd29ybGQgd291bGQgaGF2ZSByZW1haW4KPj4gdW5jaGFuZ2VkIG90aGVy d2lzZS4KPj4gU28sIEkgZG8gdGhpbmsgd2UgaGF2ZSB0byBzdXBwb3J0IHRoaXMgdXNlLWNhc2Ug YW5kIGp1c3QgaGF2ZSB0byB1bmRlcnN0YW5kCj4+IHRoZSBjb21wbGV4aXR5Lgo+IEVybSwgd2h5 IGRvIHlvdSBuZWVkIGltcG9ydGVyIGNhcGFiaWxpdHkgZm9yIHRoaXMgdXNlLWNhc2U/Cj4KPiBn dWVzdDEgLT4gSU9OIC0+IHhlbi1mcm9udCAtPiBoeXBlcnZpc29yIC0+IGd1ZXN0IDIgLT4geGVu LXpjb3B5IGV4cG9zZXMKPiB0aGF0IGRtYS1idWYgLT4gaW1wb3J0IHRvIHRoZSByZWFsIGRpc3Bs YXkgaHcKPgo+IE5vIHdoZXJlIGluIHRoaXMgY2hhaW4gZG8geW91IG5lZWQgeGVuLXpjb3B5IHRv IGJlIGFibGUgdG8gaW1wb3J0IGEKPiBkbWEtYnVmICh3aXRoaW4gbGludXgsIGl0IG5lZWRzIHRv IGltcG9ydCBhIGJ1bmNoIG9mIHBhZ2VzIGZyb20gdGhlCj4gaHlwZXJ2aXNvcikuCj4KPiBOb3cg aWYgeW91ciBwbGFuIGlzIHRvIHVzZSB4ZW4temNvcHkgaW4gdGhlIGd1ZXN0MSBpbnN0ZWFkIG9m IHhlbi1mcm9udCwKPiB0aGVuIHlvdSBpbmRlZWQgbmVlZCB0byBpbXBvcnQuClRoaXMgaXMgdGhl IGV4YWN0IHVzZS1jYXNlIEkgd2FzIHJlZmVycmluZyB0byB3aGlsZSBzYXlpbmcKd2UgbmVlZCB0 byBpbXBvcnQgb24gR3Vlc3QxIHNpZGUuIElmIGh5cGVyLWRtYWJ1ZiBpcyBzbwpnZW5lcmljIHRo YXQgdGhlcmUgaXMgbm8geGVuLWZyb250IGluIHRoZSBwaWN0dXJlLCB0aGVuCml0IG5lZWRzIHRv IGltcG9ydCBhIGRtYS1idWYsIHNvIGl0IGNhbiBiZSBleHBvcnRlZCBhdCBHdWVzdDIgc2lkZS4K PiAgIEJ1dCB0aGF0IGltbyBkb2Vzbid0IG1ha2Ugc2Vuc2U6Cj4gLSB4ZW4tZnJvbnQgZ2l2ZXMg eW91IGNsZWFybHkgZGVmaW5lZCBmbGlwIGV2ZW50cyB5b3UgY2FuIGZvcndhcmQgdG8gdGhlCj4g ICAgaHlwZXJ2aXNvci4geGVuLXpjb3B5IHdvdWxkIG5lZWQgdG8gYWRkIHRoYXQgYWdhaW4uCnhl bi16Y29weSBpcyBhIGhlbHBlciBkcml2ZXIgd2hpY2ggZG9lc24ndCBoYW5kbGUgcGFnZSBmbGlw cwphbmQgaXMgbm90IGEgS01TIGRyaXZlciBhcyBvbmUgbWlnaHQgdGhpbmsgb2Y6IHRoZSBEUk0g VUFQSSBpdCB1c2VzIGlzCmp1c3QgdG8gZXhwb3J0IGEgZG1hLWJ1ZiBhcyBhIFBSSU1FIGJ1ZmZl ciwgYnV0IHRoYXQncyBpdC4KRmxpcHBpbmcgZXRjLiBpcyBkb25lIGJ5IHRoZSBiYWNrZW5kIFsx XSwgbm90IHhlbi16Y29weS4KPiAgIFNhbWUgZm9yCj4gICAgaHlwZXJkbWFidWYgKGFuZCByZWFs bHkgd2UncmUgbm90IGdvaW5nIHRvIHNodWZmbGUgc3RydWN0IGRtYV9mZW5jZSBvdmVyCj4gICAg dGhlIHdpcmUgaW4gYSBnZW5lcmljIGZhc2hpb24gYmV0d2VlbiBoeXBlcnZpc29yIGd1ZXN0cyku Cj4KPiAtIHhlbi1mcm9udCBhbHJlYWR5IGhhcyB0aGUgaWRlYSBvZiBwaXhlbCBmb3JtYXQgZm9y IHRoZSBidWZmZXIgKGFuZCBhbnkKPiAgICBvdGhlciBtZXRhZGF0YSkuIEFnYWluLCB4ZW4temNv cHkgYW5kIGh5cGVyZG1hYnVmIGxhY2sgdGhhdCwgd291bGQgbmVlZAo+ICAgIHRvIGFkZCBpdCBz aG9laG9ybmVkIGluIHNvbWVob3cuCkFnYWluLCBoZXJlIHlvdSBhcmUgdGFsa2luZyBvZiBzb21l dGhpbmcgd2hpY2ggaXMgaW1wbGVtZW50ZWQgaW4KWGVuIGRpc3BsYXkgYmFja2VuZCwgbm90IHhl bi16Y29weSwgZS5nLiBkaXNwbGF5IGJhY2tlbmQgY2FuCmltcGxlbWVudCBwYXJhLXZpcnR1YWwg ZGlzcGxheSB3L28geGVuLXpjb3B5IGF0IGFsbCwgYnV0IGluIHRoaXMgY2FzZQp0aGVyZSBpcyBh IG1lbW9yeSBjb3B5aW5nIGZvciBlYWNoIGZyYW1lLiBXaXRoIHRoZSBoZWxwIG9mIHhlbi16Y29w eQp0aGUgYmFja2VuZCBmZWVkcyB4ZW4tZnJvbnQncyBidWZmZXJzIGRpcmVjdGx5IGludG8gR3Vl c3QyIERSTS9LTVMgb3IKV2VzdG9uIG9yIHdoYXRldmVyIGFzIHhlbi16Y29weSBleHBvcnRzIHJl bW90ZSBidWZmZXJzIGFzIFBSSU1FIGJ1ZmZlcnMsCnRodXMgbm8gYnVmZmVyIGNvcHlpbmcgaXMg cmVxdWlyZWQuCj4KPiBPZmMgeW91IHdvbid0IGJlIGFibGUgdG8gc2hvdmVsIHNvdW5kIG9yIG1l ZGlhIHN0cmVhbSBkYXRhIG92ZXIgdG8gYW5vdGhlcgo+IGd1ZXN0IGxpa2UgdGhpcywgYnV0IHRo YXQncyB3aGF0IHlvdSBoYXZlIHhlbi12NGwgYW5kIHhlbi1zb3VuZCBvcgo+IHdoYXRldmVyIGVs c2UgZm9yLiBUcnlpbmcgdG8gbWFrZSBhIG5ldyB1YXBpLCB3aGljaCBtZWFucyB1c2Vyc3BhY2Ug bXVzdAo+IGJlIGNoYW5nZWQgZm9yIGFsbCB0aGUgZGlmZmVyZW50IHVzZS1jYXNlLCBpbnN0ZWFk IG9mIHJldXNpbmcgc3RhbmRhcmQKPiBsaW51eCBkcml2ZXIgdWFwaSAod2hpY2gganVzdCBoYXBw ZW5zIHRvIHNlbmQgdGhlIGRhdGEgdG8gYW5vdGhlcgo+IGh5cGVydmlzb3IgZ3Vlc3QgaW5zdGVh ZCBvZiByZWFsIGh3KSBpbW8ganVzdCBkb2Vzbid0IG1ha2UgbXVjaCBzZW5zZS4KPgo+IEFsc28s IGF0IGxlYXN0IGZvciB0aGUgZ3B1IHN1YnN5c3RlbTogQW55IG5ldyB1YXBpIG11c3QgaGF2ZSBm dWxsCj4gdXNlcnNwYWNlIGF2YWlsYWJsZSBmb3IgaXQsIHNlZToKPgo+IGh0dHBzOi8vZHJpLmZy ZWVkZXNrdG9wLm9yZy9kb2NzL2RybS9ncHUvZHJtLXVhcGkuaHRtbCNvcGVuLXNvdXJjZS11c2Vy c3BhY2UtcmVxdWlyZW1lbnRzCj4KPiBBZGRpbmcgbW9yZSB1YXBpIGlzIGRlZmluaXRlbHkgdGhl IG1vc3QgcGFpbmZ1bCB3YXkgdG8gZml4IGEgdXNlLWNhc2UuCj4gUGVyc29uYWxseSBJJ2QgZ28g YXMgZmFyIGFuZCBhbHNvIGNoYW5nZSB0aGUgeGVuLXpjb3B5IHNpZGUgb24gdGhlCj4gcmVjZWl2 aW5nIGd1ZXN0IHRvIHVzZSBzb21lIHN0YW5kYXJkIGxpbnV4IHVhcGkuIEUuZy4geW91IGNvdWxk IHdyaXRlIGFuCj4gb3V0cHV0IHY0bCBkcml2ZXIgdG8gcmVjZWl2ZSB0aGUgZnJhbWVzIGZyb20g Z3Vlc3QxLgpTbywgd2Ugbm93IGtub3cgdGhhdCB4ZW4temNvcHkgd2FzIG5vdCBtZWFudCB0byBo YW5kbGUgcGFnZSBmbGlwcywKYnV0IHRvIGltcGxlbWVudCBuZXcgVUFQSSB0byBsZXQgdXNlci1z cGFjZSBjcmVhdGUgYnVmZmVycyBlaXRoZXIKZnJvbSBHdWVzdDIgZ3JhbnQgcmVmZXJlbmNlcyAo c28gaXQgY2FuIGJlIGV4cG9ydGVkIHRvIEd1ZXN0MSkgb3IKb3RoZXIgd2F5IHJvdW5kLCBlLmcu IGNyZWF0ZSAoZnJvbSBHdWVzdDEgZ3JhbnQgcmVmZXJlbmNlcyB0byBleHBvcnQgdG8KR3Vlc3Qg MikuIEZvciB0aGF0IHJlYXNvbiBpdCBhZGRzIDIgSU9DVExzOiBjcmVhdGUgYnVmZmVyIGZyb20g Z3JlZnMKb3IgcHJvZHVjZSBncmVmcyBmb3IgdGhlIGJ1ZmZlciBnaXZlbi4KT25lIGFkZGl0aW9u YWwgSU9DVEwgaXMgdG8gd2FpdCBmb3IgdGhlIGJ1ZmZlciB0byBiZSByZWxlYXNlZCBieQpHdWVz dDIgdXNlci1zcGFjZS4KVGhhdCBiZWluZyBzYWlkLCBJIGRvbid0IHF1aXRlIHNlZSBob3cgdjRs IGNhbiBiZSB1c2VkIGhlcmUgdG8gaW1wbGVtZW50ClVBUEkgSSBuZWVkLgo+Cj4+PiBkYW52ZXQs IGNhbiB5b3UgY29tbWVudCBvbiB0aGlzIHRvcGljPwo+Pj4KPj4+Pj4gMi4gdGhlIHBhZ2Ugc2hh cmluZyBtZWNoYW5pc20gLSBpdCB1c2VzIFhlbi1ncmFudC10YWJsZS4KPj4+Pj4KPj4+Pj4gQW5k IHRvIGdpdmUgeW91IGEgcXVpY2sgc3VtbWFyeSBvZiBkaWZmZXJlbmNlcyBhcyBmYXIgYXMgSSB1 bmRlcnN0YW5kCj4+Pj4+IGJldHdlZW4gdHdvIGltcGxlbWVudGF0aW9ucyAocGxlYXNlIGNvcnJl Y3QgbWUgaWYgSSBhbSB3cm9uZywgT2xla3NhbmRyLikKPj4+Pj4KPj4+Pj4gMS4geGVuLXpjb3B5 IGlzIERSTSBzcGVjaWZpYyAtIGNhbiBpbXBvcnQgb25seSBEUk0gcHJpbWUgYnVmZmVyCj4+Pj4+ IHdoaWxlIGh5cGVyX2RtYWJ1ZiBjYW4gZXhwb3J0IGFueSBkbWFidWYgcmVnYXJkbGVzcyBvZiBv cmlnaW5hdG9yCj4+Pj4gV2VsbCwgdGhpcyBpcyB0cnVlLiBBbmQgYXQgdGhlIHNhbWUgdGltZSB0 aGlzIGlzIGp1c3QgYSBtYXR0ZXIKPj4+PiBvZiBleHRlbmRpbmcgdGhlIEFQSTogeGVuLXpjb3B5 IGlzIGEgaGVscGVyIGRyaXZlciBkZXNpZ25lZCBmb3IKPj4+PiB4ZW4tZnJvbnQvYmFjayB1c2Ut Y2FzZSwgc28gdGhpcyBpcyB3aHkgaXQgb25seSBoYXMgRFJNIFBSSU1FIEFQSQo+Pj4+PiAyLiB4 ZW4temNvcHkgZG9lc24ndCBzZWVtIHRvIGhhdmUgZG1hLWJ1ZiBzeW5jaHJvbml6YXRpb24gYmV0 d2VlbiB0d28gVk1zCj4+Pj4+IHdoaWxlIChhcyBkYW52ZXQgY2FsbGVkIGl0IGFzIHJlbW90ZSBk bWFidWYgYXBpIHNoYXJpbmcpIGh5cGVyX2RtYWJ1ZiBzZW5kcwo+Pj4+PiBvdXQgc3luY2hyb25p emF0aW9uIG1lc3NhZ2UgdG8gdGhlIGV4cG9ydGluZyBWTSBmb3Igc3luY2hyb25pemF0aW9uLgo+ Pj4+IFRoaXMgaXMgdHJ1ZS4gQWdhaW4sIHRoaXMgaXMgYmVjYXVzZSBvZiB0aGUgdXNlLWNhc2Vz IGl0IGNvdmVycy4KPj4+PiBCdXQgaGF2aW5nIHN5bmNocm9uaXphdGlvbiBmb3IgYSBnZW5lcmlj IHNvbHV0aW9uIHNlZW1zIHRvIGJlIGEgZ29vZCBpZGVhLgo+Pj4gWWVhaCwgdW5kZXJzdG9vZCB4 ZW4temNvcHkgd29ya3Mgb2sgd2l0aCB5b3VyIHVzZSBjYXNlLiBCdXQgSSBhbSBqdXN0IGN1cmlv dXMKPj4+IGlmIGl0IGlzIG9rIG5vdCB0byBoYXZlIGFueSBpbnRlci1kb21haW4gc3luY2hyb25p emF0aW9uIGluIHRoaXMgc2hhcmluZyBtb2RlbC4KPj4gVGhlIHN5bmNocm9uaXphdGlvbiBpcyBk b25lIHdpdGggZGlzcGxpZiBwcm90b2NvbCBbMV0KPj4+IFRoZSBidWZmZXIgYmVpbmcgc2hhcmVk IGlzIHRlY2huaWNhbGx5IGRtYS1idWYgYW5kIG9yaWdpbmF0b3IgbmVlZHMgdG8gYmUgYWJsZQo+ Pj4gdG8ga2VlcCB0cmFjayBvZiBpdC4KPj4gQXMgSSBhbSB3b3JraW5nIGluIERSTSB0ZXJtcyB0 aGUgdHJhY2tpbmcgaXMgZG9uZSBieSB0aGUgRFJNIGNvcmUKPj4gZm9yIG1lIGZvciBmcmVlLiAo VGhpcyBtaWdodCBiZSBvbmUgb2YgdGhlIHJlYXNvbnMgRGFuaWVsIHNlZXMgRFJNCj4+IGJhc2Vk IGltcGxlbWVudGF0aW9uIGZpdCB2ZXJ5IGdvb2QgZnJvbSBjb2RlLXJldXNlIFBPVikuCj4gSG0s IG5vdCBzdXJlIHdoYXQgdHJhY2tpbmcgeW91IHJlZmVyIHRvIGhlcmUgYWxsIC4uLiBJIGdvdCBs b3N0IGluIGFsbCB0aGUKPiByZXBsaWVzIHdoaWxlIGNhdGNoaW5nIHVwLgo+Ckkgd2FzIGp1c3Qg cmVmZXJyaW5nIHRvIGFjY291bnRpbmcgc3R1ZmYgYWxyZWFkeSBpbXBsZW1lbnRlZCBpbiB0aGUg RFJNIApjb3JlLApzbyBJIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgZG9pbmcgdGhlIHNhbWUg Zm9yIGJ1ZmZlcnMgdG8gdW5kZXJzdGFuZAp3aGVuIHRoZXkgYXJlIHJlbGVhc2VkIGV0Yy4KPj4+ Pj4gMy4gMS1sZXZlbCByZWZlcmVuY2VzIC0gd2hlbiB1c2luZyBncmFudC10YWJsZSBmb3Igc2hh cmluZyBwYWdlcywgdGhlcmUgd2lsbAo+Pj4+PiBiZSBzYW1lICMgb2YgcmVmcyAoZWFjaCA4IGJ5 dGUpCj4+Pj4gVG8gYmUgcHJlY2lzZSwgZ3JhbnQgcmVmIGlzIDQgYnl0ZXMKPj4+IFlvdSBhcmUg cmlnaHQuIFRoYW5rcyBmb3IgY29ycmVjdGlvbi47KQo+Pj4KPj4+Pj4gYXMgIyBvZiBzaGFyZWQg cGFnZXMsIHdoaWNoIGlzIHBhc3NlZCB0bwo+Pj4+PiB0aGUgdXNlcnNwYWNlIHRvIGJlIHNoYXJl ZCB3aXRoIGltcG9ydGluZyBWTSBpbiBjYXNlIG9mIHhlbi16Y29weS4KPj4+PiBUaGUgcmVhc29u IGZvciB0aGF0IGlzIHRoYXQgeGVuLXpjb3B5IGlzIGEgaGVscGVyIGRyaXZlciwgZS5nLgo+Pj4+ IHRoZSBncmFudCByZWZlcmVuY2VzIGNvbWUgZnJvbSB0aGUgZGlzcGxheSBiYWNrZW5kIFsxXSwg d2hpY2ggaW1wbGVtZW50cwo+Pj4+IFhlbiBkaXNwbGF5IHByb3RvY29sIFsyXS4gU28sIGVmZmVj dGl2ZWx5IHRoZSBiYWNrZW5kIGV4dHJhY3RzIHJlZmVyZW5jZXMKPj4+PiBmcm9tIGZyb250ZW5k J3MgcmVxdWVzdHMgYW5kIHBhc3NlcyB0aG9zZSB0byB4ZW4temNvcHkgYXMgYW4gYXJyYXkKPj4+ PiBvZiByZWZzLgo+Pj4+PiAgICBDb21wYXJlZAo+Pj4+PiB0byB0aGlzLCBoeXBlcl9kbWFidWYg ZG9lcyBtdWx0aXBsZSBsZXZlbCBhZGRyZXNzaW5nIHRvIGdlbmVyYXRlIG9ubHkgb25lCj4+Pj4+ IHJlZmVyZW5jZSBpZCB0aGF0IHJlcHJlc2VudHMgYWxsIHNoYXJlZCBwYWdlcy4KPj4+PiBJbiB0 aGUgcHJvdG9jb2wgWzJdIG9ubHkgb25lIHJlZmVyZW5jZSB0byB0aGUgZ3JlZiBkaXJlY3Rvcnkg aXMgcGFzc2VkCj4+Pj4gYmV0d2VlbiBWTXMKPj4+PiAoYW5kIHRoZSBncmVmIGRpcmVjdG9yeSBp cyBhIHNpbmdsZS1saW5rZWQgbGlzdCBvZiBzaGFyZWQgcGFnZXMgY29udGFpbmluZwo+Pj4+IGFs bAo+Pj4+IG9mIHRoZSBncmVmcyBvZiB0aGUgYnVmZmVyKS4KPj4+IG9rLCBnb29kIHRvIGtub3cu IEkgd2lsbCBsb29rIGludG8gaXRzIGltcGxlbWVudGF0aW9uIGluIG1vcmUgZGV0YWlscyBidXQg aXMKPj4+IHRoaXMgZ3JlZiBkaXJlY3RvcnkgKGNoYWluZWQgZ3JlZnMpIHNvbWV0aGluZyB0aGF0 IGNhbiBiZSB1c2VkIGZvciBhbnkgZ2VuZXJhbAo+Pj4gbWVtb3J5IHNoYXJpbmcgdXNlIGNhc2Ug b3IgaXMgaXQganN1dCBmb3IgeGVuLWRpc3BsYXkgKGluIGN1cnJlbnQgY29kZSBiYXNlKT8KPj4g Tm90IHRvIG1pc2xlYWQgeW91OiBvbmUgZ3JhbnQgcmVmIGlzIHBhc3NlZCB2aWEgZGlzcGxpZiBw cm90b2NvbCwKPj4gYnV0IHRoZSBwYWdlIGl0J3MgcmVmZXJlbmNpbmcgY29udGFpbnMgdGhlIHJl c3Qgb2YgdGhlIGdyYW50IHJlZnMuCj4+Cj4+IEFzIHRvIGlmIHRoaXMgY2FuIGJlIHVzZWQgZm9y IGFueSBtZW1vcnk6IHllcy4gSXQgaXMgdGhlIHNhbWUgZm9yCj4+IHNuZGlmIGFuZCBkaXNwbGlm IFhlbiBwcm90b2NvbHMsIGJ1dCBkZWZpbmVkIHR3aWNlIGFzIHN0cmljdGx5IHNwZWFraW5nCj4+ IHNuZGlmIGFuZCBkaXNwbGlmIGFyZSB0d28gc2VwYXJhdGUgcHJvdG9jb2xzLgo+Pgo+PiBXaGls ZSByZXZpZXdpbmcgeW91ciBSRkMgdjIgb25lIG9mIHRoZSBjb21tZW50cyBJIGhhZCBbMl0gd2Fz IHRoYXQgaWYgd2UKPj4gY2FuIHN0YXJ0IGZyb20gZGVmaW5pbmcgc3VjaCBhIGdlbmVyaWMgcHJv dG9jb2wgZm9yIGh5cGVyLWRtYWJ1Zi4KPj4gSXQgY2FuIGJlIGEgaGVhZGVyIGZpbGUsIHdoaWNo IG5vdCBvbmx5IGhhcyB0aGUgZGVzY3JpcHRpb24gcGFydAo+PiAod2hpY2ggdGhlbiBiZWNvbWUg YSBwYXJ0IG9mIERvY3VtZW50YXRpb24vLi4ucnN0IGZpbGUpLCBidXQgYWxzbyBkZWZpbmVzCj4+ IGFsbCB0aGUgcmVxdWlyZWQgY29uc3RhbnRzIGZvciByZXF1ZXN0cywgcmVzcG9uc2VzLCBkZWZp bmVzIG1lc3NhZ2UgZm9ybWF0cywKPj4gc3RhdGUgZGlhZ3JhbXMgZXRjLiBhbGwgYXQgb25lIHBs YWNlLiBPZiBjb3Vyc2UgdGhpcyBwcm90b2NvbCBtdXN0IG5vdCBiZQo+PiBYZW4gc3BlY2lmaWMs IGJ1dCBiZSBPUy9oeXBlcnZpc29yIGFnbm9zdGljLgo+PiBIYXZpbmcgdGhhdCB3aWxsIHRyaWdn ZXIgYSBuZXcgcm91bmQgb2YgZGlzY3Vzc2lvbiwgc28gd2UgaGF2ZSBpdCBhbGwKPj4gZGVzaWdu ZWQKPj4gYW5kIGRpc2N1c3NlZCBiZWZvcmUgd2Ugc3RhcnQgaW1wbGVtZW50aW5nLgo+Pgo+PiBC ZXNpZGVzIHRoZSBwcm90b2NvbCB3ZSBoYXZlIHRvIGRlc2lnbiBVQVBJIHBhcnQgYXMgd2VsbCBh bmQgbWFrZSBzdXJlCj4+IHRoZSBoeXBlci1kbWFidWYgaXMgbm90IG9ubHkgYWNjZXNzaWJsZSBm cm9tIHVzZXItc3BhY2UsIGJ1dCB0aGVyZSB3aWxsIGJlCj4+IG51bWJlcgo+PiBvZiBrZXJuZWwt c3BhY2UgdXNlcnMgYXMgd2VsbC4KPiBBZ2Fpbiwgd2h5IGRvIHlvdSB3YW50IHRvIGNyZWF0ZSBu ZXcgdWFwaSBmb3IgdGhpcz8gR2l2ZW4gdGhlIHZlcnkgc3RyaWN0Cj4gcmVxdWlyZW1lbnRzIHdl IGhhdmUgZm9yIG5ldyB1YXBpIChzZWUgYWJvdmUgbGluayksIGl0J3MgdGhlIHRvdWdoZXN0IHdh eQo+IHRvIGdldCBhbnkga2luZCBvZiBzdXBwb3J0IGluLgpJIGRvIHVuZGVyc3RhbmQgdGhhdCBh ZGRpbmcgbmV3IFVBUEkgaXMgbm90IGdvb2QgZm9yIG1hbnkgcmVhc29ucy4KQnV0IGhlcmUgSSB3 YXMgbWVhbmluZyB0aGF0IGN1cnJlbnQgaHlwZXItZG1hYnVmIGRlc2lnbiBpcwpvbmx5IHVzZXIt c3BhY2Ugb3JpZW50ZWQsIGUuZy4gaXQgcHJvdmlkZXMgbnVtYmVyIG9mIElPQ1RMcyB0byBkbyBh bGwKdGhlIHdvcmsuIEJ1dCBJIG5lZWQgYSB3YXkgdG8gYWNjZXNzIHRoZSBzYW1lIGZyb20gdGhl IGtlcm5lbCwgc28sIGZvciAKZXhhbXBsZSwKc29tZSBvdGhlciBwYXJhLXZpcnR1YWwgZHJpdmVy IGNhbiBleHBvcnQvaW1wb3J0IGRtYS1idWYsIG5vdCBvbmx5IAp1c2VyLXNwYWNlLgoKPgo+IFRo YXQncyB3aHkgSSBoYWQgZXNzZW50aWFsbHkgemVybyBiaWcgcXVlc3Rpb25zIGZvciB4ZW4tZnJv bnQgKGV4Y2VwdCBzb21lCj4gaW1wbGVtZW50YXRpb24gaW1wcm92ZW1lbnRzLCBhbmQgc3R1ZmYg dG8gbWFrZSBzdXJlIHhlbi1mcm9udCBhY3R1YWxseQo+IGltcGxlbWVudHMgdGhlIHJlYWwgdWFw aSBzZW1hbnRpY3MgaW5zdGVhZCBvZiBpdHMgb3duKSwgYW5kIHdoeSBJJ20gYXNraW5nCj4gbXVj aCBtb3JlIHF1ZXN0aW9ucyBvbiB0aGlzIHN0dWZmIGhlcmUuCj4KPj4+Pj4gNC4gaW50ZXIgVk0g bWVzc2FnaW5nIChoeXBlX2RtYWJ1ZiBvbmx5KSAtIGh5cGVyX2RtYWJ1ZiBoYXMgaW50ZXItdm0g bXNnCj4+Pj4+IGNvbW11bmljYXRpb24gZGVmaW5lZCBmb3IgZG1hYnVmIHN5bmNocm9uaXphdGlv biBhbmQgcHJpdmF0ZSBkYXRhIChtZXRhCj4+Pj4+IGluZm8gdGhhdCBNYXR0IFJvcGVyIG1lbnRp b25lZCkgZXhjaGFuZ2UuCj4+Pj4gVGhpcyBpcyB0cnVlLCB4ZW4temNvcHkgaGFzIG5vIG1lYW5z IGZvciBpbnRlciBWTSBzeW5jIGFuZCBtZXRhLWRhdGEsCj4+Pj4gc2ltcGx5IGJlY2F1c2UgaXQg ZG9lc24ndCBoYXZlIGFueSBjb2RlIGZvciBpbnRlciBWTSBleGNoYW5nZSBpbiBpdCwKPj4+PiBl LmcuIHRoZSBpbnRlciBWTSBwcm90b2NvbCBpcyBoYW5kbGVkIGJ5IHRoZSBiYWNrZW5kIFsxXS4K Pj4+Pj4gNS4gZHJpdmVyLXRvLWRyaXZlciBub3RpZmljYXRpb24gKGh5cGVyX2RtYWJ1ZiBvbmx5 KSAtIGltcG9ydGluZyBWTSBnZXRzCj4+Pj4+IG5vdGlmaWVkIHdoZW4gbmV3ZG1hYnVmIGlzIGV4 cG9ydGVkIGZyb20gb3RoZXIgVk0gLSB1ZXZlbnQgY2FuIGJlIG9wdGlvbmFsbHkKPj4+Pj4gZ2Vu ZXJhdGVkIHdoZW4gdGhpcyBoYXBwZW5zLgo+Pj4+Pgo+Pj4+PiA2LiBzdHJ1Y3R1cmUgLSBoeXBl cl9kbWFidWYgaXMgdGFyZ2V0dGluZyB0byBwcm92aWRlIGEgZ2VuZXJpYyBzb2x1dGlvbiBmb3IK Pj4+Pj4gaW50ZXItZG9tYWluIGRtYWJ1ZiBzaGFyaW5nIGZvciBtb3N0IGh5cGVydmlzb3JzLCB3 aGljaCBpcyB3aHkgaXQgaGFzIHR3bwo+Pj4+PiBsYXllcnMgYXMgbWF0dHJvcGUgbWVudGlvbmVk LCBmcm9udC1lbmQgdGhhdCBjb250YWlucyBzdGFuZGFyZCBBUEkgYW5kIGJhY2tlbmQKPj4+Pj4g dGhhdCBpcyBzcGVjaWZpYyB0byBoeXBlcnZpc29yLgo+Pj4+IEFnYWluLCB4ZW4temNvcHkgaXMg ZGVjb3VwbGVkIGZyb20gaW50ZXIgVk0gY29tbXVuaWNhdGlvbgo+Pj4+Pj4+IE5vIGlkZWEsIGRp ZG4ndCBsb29rIGF0IGl0IGluIGRldGFpbC4KPj4+Pj4+Pgo+Pj4+Pj4+IExvb2tzIHByZXR0eSBj b21wbGV4IGZyb20gYSBkaXN0YW50IHZpZXcuICBNYXliZSBiZWNhdXNlIGl0IHRyaWVzIHRvCj4+ Pj4+Pj4gYnVpbGQgYSBjb21tdW5pY2F0aW9uIGZyYW1ld29yayB1c2luZyBkbWEtYnVmcyBpbnN0 ZWFkIG9mIGEgc2ltcGxlCj4+Pj4+Pj4gZG1hLWJ1ZiBwYXNzaW5nIG1lY2hhbmlzbS4KPj4+Pj4g d2Ugc3RhcnRlZCB3aXRoIHNpbXBsZSBkbWEtYnVmIHNoYXJpbmcgYnV0IHJlYWxpemVkIHRoZXJl IGFyZSBtYW55Cj4+Pj4+IHRoaW5ncyB3ZSBuZWVkIHRvIGNvbnNpZGVyIGluIHJlYWwgdXNlLWNh c2UsIHNvIHdlIGFkZGVkIGNvbW11bmljYXRpb24KPj4+Pj4gLCBub3RpZmljYXRpb24gYW5kIGRt YS1idWYgc3luY2hyb25pemF0aW9uIHRoZW4gcmUtc3RydWN0dXJlZCBpdCB0bwo+Pj4+PiBmcm9u dC1lbmQgYW5kIGJhY2stZW5kICh0aGlzIG1hZGUgdGhpbmdzIG1vcmUgY29tcGljYXRlZC4uKSBz aW5jZSBYZW4KPj4+Pj4gd2FzIG5vdCBvdXIgb25seSB0YXJnZXQuIEFsc28sIHdlIHRob3VnaHQg cGFzc2luZyB0aGUgcmVmZXJlbmNlIGZvciB0aGUKPj4+Pj4gYnVmZmVyIChoeXBlcl9kbWFidWZf aWQpIGlzIG5vdCBzZWN1cmUgc28gYWRkZWQgdXZlbnQgbWVjaGFuaXNtIGxhdGVyLgo+Pj4+Pgo+ Pj4+Pj4gWWVzLCBJIGFtIGxvb2tpbmcgYXQgaXQgbm93LCB0cnlpbmcgdG8gZmlndXJlIG91dCB0 aGUgZnVsbCBzdG9yeQo+Pj4+Pj4gYW5kIGl0cyBpbXBsZW1lbnRhdGlvbi4gQlRXLCBJbnRlbCBn dXlzIHdlcmUgYWJvdXQgdG8gc2hhcmUgc29tZQo+Pj4+Pj4gdGVzdCBhcHBsaWNhdGlvbiBmb3Ig aHlwZXItZG1hYnVmLCBtYXliZSBJIGhhdmUgbWlzc2VkIG9uZS4KPj4+Pj4+IEl0IGNvdWxkIHBy b2JhYmx5IGJldHRlciBleHBsYWluIHRoZSB1c2UtY2FzZXMgYW5kIHRoZSBjb21wbGV4aXR5Cj4+ Pj4+PiB0aGV5IGhhdmUgaW4gaHlwZXItZG1hYnVmLgo+Pj4+PiBPbmUgZXhhbXBsZSBpcyBhY3R1 YWxseSBpbiBnaXRodWIuIElmIHlvdSB3YW50IHRha2UgYSBsb29rIGF0IGl0LCBwbGVhc2UKPj4+ Pj4gdmlzaXQ6Cj4+Pj4+Cj4+Pj4+IGh0dHBzOi8vZ2l0aHViLmNvbS9kb3dub3IvbGludXhfaHlw ZXJfZG1hYnVmX3Rlc3QvdHJlZS94ZW4vc2ltcGxlX2V4cG9ydAo+Pj4+IFRoYW5rIHlvdSwgSSds bCBoYXZlIGEgbG9vawo+Pj4+Pj4+IExpa2UgeGVuLXpjb3B5IGl0IHNlZW1zIHRvIGRlcGVuZCBv biB0aGUgaWRlYSB0aGF0IHRoZSBoeXBlcnZpc29yCj4+Pj4+Pj4gbWFuYWdlcyBhbGwgbWVtb3J5 IGl0IGlzIGVhc3kgZm9yIGd1ZXN0cyB0byBzaGFyZSBwYWdlcyB3aXRoIHRoZSBoZWxwIG9mCj4+ Pj4+Pj4gdGhlIGh5cGVydmlzb3IuCj4+Pj4+PiBTbywgZm9yIHhlbi16Y29weSB3ZSB3ZXJlIG5v dCB0cnlpbmcgdG8gbWFrZSBpdCBnZW5lcmljLAo+Pj4+Pj4gaXQganVzdCBzb2x2ZXMgZGlzcGxh eSAoZHVtYikgemVyby1jb3B5aW5nIHVzZS1jYXNlcyBmb3IgWGVuLgo+Pj4+Pj4gV2UgaW1wbGVt ZW50ZWQgaXQgYXMgYSBEUk0gaGVscGVyIGRyaXZlciBiZWNhdXNlIHdlIGNhbid0IHNlZSBhbnkK Pj4+Pj4+IG90aGVyIHVzZS1jYXNlcyBhcyBvZiBub3cuCj4+Pj4+PiBGb3IgZXhhbXBsZSwgd2Ug YWxzbyBoYXZlIFhlbiBwYXJhLXZpcnR1YWxpemVkIHNvdW5kIGRyaXZlciwgYnV0Cj4+Pj4+PiBp dHMgYnVmZmVyIG1lbW9yeSB1c2FnZSBpcyBub3QgY29tcGFyYWJsZSB0byB3aGF0IGRpc3BsYXkg d2FudHMKPj4+Pj4+IGFuZCBpdCB3b3JrcyBzb21ld2hhdCBkaWZmZXJlbnRseSAoZS5nLiB0aGVy ZSBpcyBubyAiZnJhbWUgZG9uZSIKPj4+Pj4+IGV2ZW50LCBzbyBvbmUgY2FuJ3QgdGVsbCB3aGVu IHRoZSBzb3VuZCBidWZmZXIgY2FuIGJlICJmbGlwcGVkIikuCj4+Pj4+PiBBdCB0aGUgc2FtZSB0 aW1lLCB3ZSBkbyBub3QgdXNlIHZpcnRpby1ncHUsIHNvIHRoaXMgY291bGQgcHJvYmFibHkKPj4+ Pj4+IGJlIG9uZSBtb3JlIGNhbmRpZGF0ZSBmb3Igc2hhcmVkIGRtYS1idWZzIHNvbWUgZGF5Lgo+ Pj4+Pj4+ICAgICBXaGljaCBzaW1wbHkgaXNuJ3QgdGhlIGNhc2Ugb24ga3ZtLgo+Pj4+Pj4+Cj4+ Pj4+Pj4gaHlwZXItZG1hYnVmIGFuZCB4ZW4temNvcHkgY291bGQgbWF5YmUgc2hhcmUgY29kZSwg b3IgaHlwZXItZG1hYnVmIGJ1aWxkCj4+Pj4+Pj4gb24gdG9wIG9mIHhlbi16Y29weS4KPj4+Pj4+ IEhtLCBJIGNhbiBpbWFnaW5lIHRoYXQ6IHhlbi16Y29weSBjb3VsZCBiZSBhIGxpYnJhcnkgY29k ZSBmb3IgaHlwZXItZG1hYnVmCj4+Pj4+PiBpbiB0ZXJtcyBvZiBpbXBsZW1lbnRpbmcgYWxsIHRo YXQgcGFnZSBzaGFyaW5nIGZ1biBpbiBtdWx0aXBsZSBkaXJlY3Rpb25zLAo+Pj4+Pj4gZS5nLiBI b3N0LT5HdWVzdCwgR3Vlc3QtPkhvc3QsIEd1ZXN0PC0+R3Vlc3QuCj4+Pj4+PiBCdXQgSSdsbCBs ZXQgTWF0dCBhbmQgRG9uZ3dvbiB0byBjb21tZW50IG9uIHRoYXQuCj4+Pj4+IEkgdGhpbmsgd2Ug Y2FuIGRlZmluaXRlbHkgY29sbGFib3JhdGUuIEVzcGVjaWFsbHksIG1heWJlIHdlIGFyZSB1c2lu ZyBzb21lCj4+Pj4+IG91dGRhdGVkIHNoYXJpbmcgbWVjaGFuaXNtL2dyYW50LXRhYmxlIG1lY2hh bmlzbSBpbiBvdXIgWGVuIGJhY2tlbmQgKHRoYW5rcwo+Pj4+PiBmb3IgYnJpbmdpbmcgdGhhdCB1 cCBPbGVrc2FuZHIpLiBIb3dldmVyLCB0aGUgcXVlc3Rpb24gaXMgb25jZSB3ZSBjb2xsYWJvcmF0 ZQo+Pj4+PiBzb21laG93LCBjYW4geGVuLXpjb3B5J3MgdXNlY2FzZSB1c2UgdGhlIHN0YW5kYXJk IEFQSSB0aGF0IGh5cGVyX2RtYWJ1Zgo+Pj4+PiBwcm92aWRlcz8gSSBkb24ndCB0aGluayB3ZSBu ZWVkIGRpZmZlcmVudCBJT0NUTHMgdGhhdCBkbyB0aGUgc2FtZSBpbiB0aGUgZmluYWwKPj4+Pj4g c29sdXRpb24uCj4+Pj4+Cj4+Pj4gSWYgeW91IHRoaW5rIG9mIHhlbi16Y29weSBhcyBhIGxpYnJh cnkgKHdoaWNoIGltcGxlbWVudHMgWGVuCj4+Pj4gZ3JhbnQgcmVmZXJlbmNlcyBtYW5nbGluZykg YW5kIERSTSBQUklNRSB3cmFwcGVyIG9uIHRvcCBvZiB0aGF0Cj4+Pj4gbGlicmFyeSwgd2UgY2Fu IHByb2JhYmx5IGRlZmluZSBwcm9wZXIgQVBJIGZvciB0aGF0IGxpYnJhcnksCj4+Pj4gc28gYm90 aCB4ZW4temNvcHkgYW5kIGh5cGVyLWRtYWJ1ZiBjYW4gdXNlIGl0LiBXaGF0IGlzIG1vcmUsIEkg YW0KPj4+PiBhYm91dCB0byBzdGFydCB1cHN0cmVhbWluZyBYZW4gcGFyYS12aXJ0dWFsaXplZCBz b3VuZCBkZXZpY2UgZHJpdmVyIHNvb24sCj4+Pj4gd2hpY2ggYWxzbyB1c2VzIHNpbWlsYXIgY29k ZSBhbmQgZ3JlZiBwYXNzaW5nIG1lY2hhbmlzbSBbM10uCj4+Pj4gKEFjdHVhbGx5LCBJIHdhcyBh Ym91dCB0byB1cHN0cmVhbSBkcm0veGVuLWZyb250LCBkcm0veGVuLXpjb3B5IGFuZAo+Pj4+IHNu ZC94ZW4tZnJvbnQgYW5kIHRoZW4gcHJvcG9zZSBhIFhlbiBoZWxwZXIgbGlicmFyeSBmb3Igc2hh cmluZyBiaWcgYnVmZmVycywKPj4+PiBzbyBjb21tb24gY29kZSBvZiB0aGUgYWJvdmUgZHJpdmVy cyBjYW4gdXNlIHRoZSBzYW1lIGNvZGUgdy9vIGNvZGUKPj4+PiBkdXBsaWNhdGlvbikKPj4+IEkg dGhpbmsgaXQgaXMgcG9zc2libGUgdG8gdXNlIHlvdXIgZnVuY3Rpb25zIGZvciBtZW1vcnkgc2hh cmluZyBwYXJ0IGluCj4+PiBoeXBlcl9kbWFidWYncyBiYWNrZW5kICh0aGlzICdiYWNrZW5kJyBt ZWFucyB0aGUgbGF5ZXIgdGhhdCBkb2VzIHBhZ2Ugc2hhcmluZwo+Pj4gYW5kIGludGVyLXZtIGNv bW11bmljYXRpb24gd2l0aCB4ZW4tc3BlY2lmaWMgd2F5LiksIHNvIHdoeSBkb24ndCB3ZSB3b3Jr IG9uCj4+PiAiWGVuIGhlbHBlciBsaWJyYXJ5IGZvciBzaGFyaW5nIGJpZyBidWZmZXJzIiBmaXJz dCB3aGlsZSB3ZSBjb250aW51ZSBvdXIKPj4+IGRpc2N1c3Npb24gb24gdGhlIGNvbW1vbiBBUEkg bGF5ZXIgdGhhdCBjYW4gY292ZXIgYW55IGRtYWJ1ZiBzaGFyaW5nIGNhc2VzLgo+Pj4KPj4gV2Vs bCwgSSB3b3VsZCBsb3ZlIHdlIHJldXNlIHRoZSBjb2RlIHRoYXQgSSBoYXZlLCBidXQgSSBhbHNv Cj4+IHVuZGVyc3RhbmQgdGhhdCBpdCB3YXMgbGltaXRlZCBieSBteSB1c2UtY2FzZXMuIFNvLCBJ IGRvIG5vdAo+PiBpbnNpc3Qgd2UgaGF2ZSB0byA7KQo+PiBJZiB3ZSBzdGFydCBkZXNpZ25pbmcg YW5kIGRpc2N1c3NpbmcgaHlwZXItZG1hYnVmIHByb3RvY29sIHdlIG9mIGNvdXJzZQo+PiBjYW4g d29yayBvbiB0aGlzIGhlbHBlciBsaWJyYXJ5IGluIHBhcmFsbGVsLgo+IEltbyBjb2RlIHJldXNl IGlzIG92ZXJyYXRlZC4gQWRkaW5nIG5ldyB1YXBpIGlzIHdoYXQgZnJlYWtzIG1lIG91dCBoZXJl Cj4gOi0pCj4KPiBJZiB3ZSBlbmQgdXAgd2l0aCBkdXBsaWNhdGVkIGltcGxlbWVudGF0aW9ucywg ZXZlbiBpbiB1cHN0cmVhbSwgbWVoLCBub3QKPiBncmVhdCwgYnV0IGFsc28gb2suIE5ldyB1YXBp LCBhbmQgaW4gYSBzaW1pbGFyIHdheSwgbmV3IGh5cGVydmlzb3IgYXBpCj4gbGlrZSB0aGUgZG1h LWJ1ZiBmb3J3YXJkaW5nIHRoYXQgaHlwZXJkbWFidWYgZG9lcyBpcyB0aGUga2luZCBvZiB0aGlu Zwo+IHRoYXQgd2lsbCBsb2NrIHVzIGluIGZvciAxMCsgeWVhcnMgKGlmIHdlIG1ha2UgYSBtaXN0 YWtlKS4KPgo+Pj4+IFRoYW5rIHlvdSwKPj4+PiBPbGVrc2FuZHIKPj4+Pgo+Pj4+IFAuUy4gQWxs LCBpcyBpdCBhIGdvb2QgaWRlYSB0byBtb3ZlIHRoaXMgb3V0IG9mIHVkbWFidWYgdGhyZWFkIGlu dG8gYQo+Pj4+IGRlZGljYXRlZCBvbmU/Cj4+PiBFaXRoZXIgd2F5IGlzIGZpbmUgd2l0aCBtZS4K Pj4gU28sIGlmIHlvdSBjYW4gc3RhcnQgZGVzaWduaW5nIHRoZSBwcm90b2NvbCB3ZSBtYXkgaGF2 ZSBhIGRlZGljYXRlZCBtYWlsCj4+IHRocmVhZCBmb3IgdGhhdC4gSSB3aWxsIHRyeSB0byBoZWxw IHdpdGggdGhlIHByb3RvY29sIGFzIG11Y2ggYXMgSSBjYW4KPiBQbGVhc2UgZG9uJ3Qgc3RhcnQg d2l0aCB0aGUgcHJvdG9jb2wuIEluc3RlYWQgc3RhcnQgd2l0aCB0aGUgY29uY3JldGUKPiB1c2Ut Y2FzZXMsIGFuZCB0aGVuIGZpZ3VyZSBvdXQgd2h5IGV4YWN0bHkgeW91IG5lZWQgbmV3IHVhcGku IE9uY2Ugd2UgaGF2ZQo+IHRoYXQgYW5zd2VyZWQsIHdlIGNhbiBzdGFydCB0aGlua2luZyBhYm91 dCBmbGVzaGluZyBvdXQgdGhlIGRldGFpbHMuCk9uIG15IHNpZGUgdGhlcmUgYXJlIG9ubHkgMiB1 c2UtY2FzZXMsIEd1ZXN0MiBvbmx5OgoxLiBDcmVhdGUgYSBQUklNRSAoZG1hLWJ1ZikgZnJvbSBn cmFudCByZWZlcmVuY2VzCjIuIENyZWF0ZSBncmFudCByZWZlcmVuY2VzIGZyb20gUFJJTUUgKGRt YS1idWYpCgo+IENoZWVycywgRGFuaWVsCj4KVGhhbmsgeW91LApPbGVrc2FuZHIKPj4+Pj4+PiBj aGVlcnMsCj4+Pj4+Pj4gICAgIEdlcmQKPj4+Pj4+Pgo+Pj4+Pj4gVGhhbmsgeW91LAo+Pj4+Pj4g T2xla3NhbmRyCj4+Pj4+Pgo+Pj4+Pj4gUC5TLiBTb3JyeSBmb3IgbWFraW5nIHlvdXIgb3JpZ2lu YWwgbWFpbCB0aHJlYWQgdG8gZGlzY3VzcyB0aGluZ3MgbXVjaAo+Pj4+Pj4gYnJvYWRlciB0aGFu IHlvdXIgUkZDLi4uCj4+Pj4+Pgo+Pj4+IFsxXSBodHRwczovL2dpdGh1Yi5jb20veGVuLXRyb29w cy9kaXNwbF9iZQo+Pj4+IFsyXSBodHRwczovL2VsaXhpci5ib290bGluLmNvbS9saW51eC92NC4x Ni1yYzcvc291cmNlL2luY2x1ZGUveGVuL2ludGVyZmFjZS9pby9kaXNwbGlmLmgjTDQ4NAo+Pj4+ IFszXSBodHRwczovL2VsaXhpci5ib290bGluLmNvbS9saW51eC92NC4xNi1yYzcvc291cmNlL2lu Y2x1ZGUveGVuL2ludGVyZmFjZS9pby9zbmRpZi5oCj4+Pj4KPj4gWzFdIGh0dHBzOi8vZWxpeGly LmJvb3RsaW4uY29tL2xpbnV4L3Y0LjE2LXJjNy9zb3VyY2UvaW5jbHVkZS94ZW4vaW50ZXJmYWNl L2lvL2Rpc3BsaWYuaAo+PiBbMl0KPj4gaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9hcmNo aXZlcy9odG1sL3hlbi1kZXZlbC8yMDE4LTA0L21zZzAwNjg1Lmh0bWwKPj4gX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPj4gZHJpLWRldmVsIG1haWxpbmcg bGlzdAo+PiBkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4+IGh0dHBzOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsClsxXSBodHRwczovL2dp dGh1Yi5jb20veGVuLXRyb29wcy9kaXNwbF9iZQpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9kcmktZGV2ZWwK