From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [2/2] dma: xilinx: Add driver for Video Framebuffer IP From: Vishal Sagar Message-Id: Date: Wed, 10 Jan 2018 11:53:21 +0000 To: Vinod Koul Cc: Vishal Sagar , "dmaengine@vger.kernel.org" , Dinesh Kumar , "michal.simek@xilinx.com" , Jeff Mouroux , Radhey Shyam Pandey , Hyun Kwon , Maurice Penners , John Nichols List-ID: SGkgVmlub2QKClRoYW5rcyBmb3IgeW91ciBmZWVkYmFjay4gCgo+IC0tLS0tT3JpZ2luYWwgTWVz c2FnZS0tLS0tCj4gRnJvbTogVmlub2QgS291bCBbbWFpbHRvOnZpbm9kLmtvdWxAaW50ZWwuY29t XQo+IFNlbnQ6IEZyaWRheSwgRGVjZW1iZXIgMjIsIDIwMTcgMzoyNSBQTQo+IFRvOiBWaXNoYWwg U2FnYXIgPHZzYWdhckB4aWxpbnguY29tPgo+IENjOiBWaXNoYWwgU2FnYXIgPHZpc2hhbC5zYWdh ckB4aWxpbnguY29tPjsgZG1hZW5naW5lQHZnZXIua2VybmVsLm9yZzsKPiBEaW5lc2ggS3VtYXIg PGRpbmVzaGtAeGlsaW54LmNvbT47IG1pY2hhbC5zaW1la0B4aWxpbnguY29tOyBKZWZmCj4gTW91 cm91eCA8am1vdXJvdXhAeGlsaW54LmNvbT47IFJhZGhleSBTaHlhbSBQYW5kZXkKPiA8cmFkaGV5 c0B4aWxpbnguY29tPjsgSHl1biBLd29uIDxoeXVua0B4aWxpbnguY29tPjsgTWF1cmljZSBQZW5u ZXJzCj4gPG1wZW5uZXJAeGlsaW54LmNvbT47IEpvaG4gTmljaG9scyA8am5pY2hvbEB4aWxpbngu Y29tPgo+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggMi8yXSBkbWE6IHhpbGlueDogQWRkIGRyaXZlciBm b3IgVmlkZW8gRnJhbWVidWZmZXIgSVAKPiAKPiBPbiBGcmksIERlYyAyMiwgMjAxNyBhdCAwODoy MDo1MkFNICswMDAwLCBWaXNoYWwgU2FnYXIgd3JvdGU6Cj4gPiA+Cj4gPiA+IFRoZSBzdWJzeXRl bSBuYW1lIGlzIGRtYWVuZ2luZSEKPiA+Cj4gPiBbVmlzaGFsIFNhZ2FyXQo+IAo+IFlvdSBkb24n dCBuZWVkIHRoZXNlIHRhZ3Mgd2hlbiByZXBseWluZyBpbmxpbmUgc3R5bGUKPiAKCk9rIG5vdGVk LgoKPiA+IEFwb2xvZ2llcy4gVGhpcyBpcyBteSBmaXJzdCBpbnN0YW5jZSBvZiBzZW5kaW5nIGFj cm9zcyBwYXRjaGVzIHRvCj4gY29tbXVuaXR5Lgo+ID4gSSBzYXcgdGhlIHByZWNlZGVuY2UgZm9y IHRoaXMgaW4gb3RoZXIgeGlsaW54IGRyaXZlciBjb21taXQgbWVzc2FnZXMgc28KPiBrZXB0IGl0 IGFzIGl0IGlzLgo+ID4gSSB3aWxsIG1ha2UgdGhlIGNoYW5nZXMgYXMgImRtYWVuZ2luZTogeGls aW54OiAiIGluIG5leHQgdmVyc2lvbi4KPiAKPiB3aGljaCBwcmVjZWRlbmNlPwo+IAo+ICQgZ2l0 IGxvZyAtLW9ubGluZSBkcml2ZXJzL2RtYS94aWxpbngvIHxncmVwICIgZG1hOiIgfHdjIC1sCj4g Mgo+ICQgZ2l0IGxvZyAtLW9ubGluZSBkcml2ZXJzL2RtYS94aWxpbngvIHxncmVwICIgZG1hZW5n aW5lOiAiIHx3YyAtbAo+IDUyCj4gCgpNeSBtaXN0YWtlLiBJdCB3YXMgaW4gb3VyIGdpdCByZXBv LiBJIHdpbGwgdGFrZSBjYXJlIGluIGZ1dHVyZS4KCj4gPiA+ID4gK3N0YXRpYyBMSVNUX0hFQUQo ZnJtYnVmX2NoYW5fbGlzdCk7IHN0YXRpYwo+ID4gPiA+ICtERUZJTkVfTVVURVgoZnJtYnVmX2No YW5fbGlzdF9sb2NrKTsKPiA+ID4KPiA+ID4gd2h5IGRvIHlvdSBuZWVkIHRoZXNlIGdsb2JhbHM/ Cj4gCj4gUGxlYXNlIGZpeCB5b3VyIE1VQSB0byB3cmFwIGF0IDgwIGNvbHVtbnMsIEkgaGF2ZSBy ZWZsb3dlZCB5b3VyIHRleHQgdG8gZml0LgoKT2sgdGhhbmtzLiBJIGFtIHVzaW5nIE91dGxvb2sg dG8gc2VuZCBtYWlscyBhbmQgaGF2ZSBzZXR1cCB0aGUgY2xpZW50IGFzIApwZXIgaHR0cHM6Ly9l bGludXgub3JnL01haWxfY2xpZW50X3RpcHMuIAoKPiAKPiA+IFRoZSBmcmFtZSBidWZmZXIgcmVh ZCBhbmQgd3JpdGUgYXJlIFNvZnQgSVBzIHdoaWNoIGNhbiBiZSBjb25maWd1cmVkCj4gPiB0byBz dXBwb3J0IGRpZmZlcmVudCB2aWRlbyBmb3JtYXRzLiAgUGxlYXNlIHJlZmVyIHRvIFBHMjc4IFBy b2R1Y3QKPiA+IEd1aWRlIGZvciBWaWRlbyBGcmFtZSBCdWZmZXIgUmVhZCBhbmQgV3JpdGUgdjIu MC4KPiAKPiBodWggd2h5IHNob3VsZCBJIHJlZmVyIHRvIHRoYXQhCgpUaGUgcHJvZHVjdCBndWlk ZSBnaXZlcyBkZXRhaWxzIGFib3V0IHRoZSBtZW1vcnkgbGF5b3V0IG9mIGJ1ZmZlciBmb3IgCmV2 ZXJ5IGZvcm1hdCBzdXBwb3J0ZWQgYnkgdGhlc2UgSVBzLgoKPiAKPiA+IFRoZSBjbGllbnQgZHJp dmVyIHdvdWxkIHdhbnQgdG8KPiA+IGtub3cgd2hhdCBhcmUgdGhlIHZpZGVvIGZvcm1hdHMgc3Vw cG9ydGVkIGFuZCBzZXQgdGhlIGZvcm1hdAo+IGFjY29yZGluZ2x5Lgo+ID4gRm9yIHRoaXMgdGhl cmUgYXJlIEFQSXMgZXhwb3NlZCBieSB0aGlzIGRyaXZlci4KPiAKPiBZb3UgYXJlICpub3QqIHRo ZSBmaXJzdCBkcml2ZXIgdG8gc3VwcG9ydCB0aGVzZSBraW5kIG9mIHVzZSBjYXNlcy4KCk9rLiBX ZSBkaXNjdXNzZWQgaW50ZXJuYWxseSBhYm91dCB0aGlzLiBJbnN0ZWFkIG9mIHVzaW5nIGN1c3Rv bSBBUElzIHdlIGNvdWxkIHVzZSAKZGV2aWNlX2NvbmZpZygpIGluIHRoZSBjbGllbnQgYW5kIHNl bmQgY3VzdG9tIGRhdGEgYnkgd3JhcHBpbmcgaXQgYXJvdW5kIHRoZSBzdHJ1Y3QgZG1hX3NsYXZl X2NvbmZpZy4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CmVudW0gewogICAgVU5LTk9XTiwKICAgIFhGUk1CVUYsCn0g eGRtYV90eXBlOwoKc3RydWN0IHhpbGlueF9kbWFfY29uZmlnIHsKCXN0cnVjdCBkbWFfc2xhdmVf Y29uZmlnIGNvbmZpZzsKCWVudW0geGRtYV90eXBlIHR5cGU7IAoJdW5pb24gewoJIHN0cnVjdCBm cmFtZWJ1ZmZlcl9jb25maWc7CgkgICAvKiBPdGhlciBmdXR1cmUgZG1hIGNvbmZpZ3MgaGVyZSAq LwoJfSB4ZG1hX2NvbmZpZzsgCn07CgplbnVtIHsKICAgIFVOS05PV04sCiAgICBWNEwyLAogICAg RFJNCn0gZnJhbWV3b3JrX3R5cGU7CgpzdHJ1Y3QgZnJhbWVidWZmZXJfY29uZmlnIHsKCXZpZGVv X2Zvcm1hdDsgIC8qIGlucHV0IHBhcmFtICovCgllbnVtIGZyYW1ld29ya190eXBlIGZ3dHlwZTsK CXN1cHBvcnRlZF92NGwyX3ZpZGVvX2Zvcm1hdHNbXTsgICAvKiBvdXRwdXQgcGFyYW0gKi8KCXN1 cHBvcnRlZF9kcm1fdmlkZW9fZm9ybWF0c1tdOyAgLyogb3V0cHV0IHBhcmFtICovCn0KPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CkZpcnN0IHRpbWUgY2xpZW50IHNldHMgdHlwZSA9IFVOS05PV04gYW5kIGNhbGxzIGRl dmljZV9jb25maWcoKS4gClRoZSBkcml2ZXIgc2V0cyB0aGUgdHlwZSBiYWNrIGFzIFhGUk1CVUYg YW5kIHBvcHVsYXRlcyB0aGUgc3VwcG9ydGVkIHY0bDIgYW5kIGRybSB2aWRlbyBmb3JtYXRzIGFu ZCByZXR1cm5zLgpDbGllbnQgY2FsbHMgaXQgc2Vjb25kIHRpbWUgd2l0aCB0eXBlID0gWEZSTUJV RiBhbmQgdmlkZW9fZm9ybWF0IGFuZCBmd3R5cGUgc2V0IHRvIG9uZSBvZiB0aGUgc3VwcG9ydGVk IGZvcm1hdHMuClRoaXMgd2lsbCBoZWxwIGZyYW1lYnVmZmVyIGRyaXZlciBjb3JyZWN0bHkgY29u ZmlndXJlIHRoZSB2aWRlbyBmb3JtYXQuCgo+IAo+ID4gVGhlIGZybWJ1Zl9jaGFuX2xpc3QgaXMg YSBnbG9iYWwgbGlzdCBzbyB0aGUgZHJpdmVyIGNhbiBkZXRlcm1pbmUgaWYgYQo+ID4gZG1hX2No YW4gb2JqZWN0IGNhbiBzYWZlbHkgYmUgdW53cmFwcGVkIGludG8gYSB4aWxpbnhfZnJtYnVmX2No YW4KPiBvYmplY3QuCj4gPiBXaGVuIGEgY2xpZW50IGNhbGxzIHhpbGlueF94ZG1hX3NldF9jb25m aWcoKSwgd2UgYXNzdW1lIGl0IGRvZXMgc28KPiA+IHdpdGhvdXQga25vd2luZyBmb3Igc3VyZSBp ZiB0aGUgZG1hX2NoYW4gaW5zdGFuY2UgaXQgaXMgcGFzc2luZyBpbiBhY3R1YWxseQo+ID4gcmVw cmVzZW50cyBhIEZyYW1lYnVmZmVyIGNoYW5uZWwgb3Igc29tZSBvdGhlciBjaGFubmVsLiAgIEJ5 IGtlZXBpbmcgYQo+ID4gZ2xvYmFsIGxpc3Qgb2YgZnJhbWVidWZmZXIgY2hhbm5lbCBvYmplY3Rz IHRoYXQgaGF2ZSBiZWVuIHJlZ2lzdGVyZWQKPiA+IGR1cmluZyBwcm9iZSwgd2UgY2FuIGNvbXBh cmUgdGhlIGRtYV9jaGFuIHJlZmVyZW5jZSB0byBvbmUgYXNzb2NpYXRlZAo+IHdpdGgKPiA+IGEg ZnJhbWVidWZmZXIgY2hhbm5lbCBvYmplY3QuCj4gPgo+ID4gSWYgdGhleSBtYXRjaCwgdGhlbiB3 ZSBrbm93IHRoYXQgdGhlIGRtYV9jaGFuIG9iamVjdCBpbnN0YW5jZQo+ID4gcmVwcmVzZW50cyBh IGZyYW1lYnVmZmVyIGFuZCB3ZSBjYW4gcHJvY2VlZCB0byBzYWZlbHkgdW53cmFwIHRoaXMgYW5k Cj4gZ2V0IGF0IHRoZQo+ID4gdW5kZXJseWluZyBGcmFtZWJ1ZmZlciBjaGFubmVsIHRvIGFzc2ln biB0aGUgdmlkZW8gZm9ybWF0Lgo+ID4KPiA+IElmIGl0IGlzIG5vdCBhIG1hdGNoLCB0aGVuIHRo aXMgZG1hIGNoYW5uZWwgbGlrZWx5IHJlcHJlc2VudHMgc29tZQo+ID4gb3RoZXIgZG1hIHR5cGUg KGUuZy4gdmRtYSkgYW5kIHRoaXMgY2FsbCBqdXN0IGJlY29tZXMgYSBuby1vcC4KPiAKPiBUaGlz IHNvdW5kIGEgYmFkIGRlc2lnbiB0byBtZS4gWW91IGhhdmUgZG1hX2NoYW4gd2hpY2ggeGlsaW54 X2NoYW4KPiB3b3VsZCB3cmFwIGFuZCB5b3Ugc2hvdWxkIGhhdmUgZXZlcnl0aGluZyBpbiB0aGF0 LiBNYWtpbmcgdGhlbSBnbG9iYWxseQo+IGFuZCB0aGVuIGxvb2tpbmcgdXAgZG9lc24ndCBtYWtl IHNlbnNlIHRvIG1lLgo+IAo+ID4gPiBhbSBubyBEVCBleHBlcnQsIGJ1dCB0aGlzIGRvZXNuJ3Qg bG9vayByaWdodCB0byBtZS4gQ2FyZSB0byBleHBsYWluCj4gPiA+IHdoYXQgdGhpcyBzdHJ1Y3Qg ZG9lcz8KPiA+ID4KPiA+IFtWaXNoYWwgU2FnYXJdCj4gPgo+ID4gVGhpcyB0YWJsZSBpcyBjb250 YWlucyBtZXRhZGF0YSBmb3IgYWxsIHRoZSBkaWZmZXJlbnQgdmlkZW8gZm9ybWF0cwo+ID4gdGhl c2Ugc29mdCBJUHMgc3VwcG9ydC4gIE9uZSBvciBtb3JlIHN0cmluZ3MgbWF0Y2hpbmcgdGhlIC5k dHNfbmFtZQo+ID4gbWVtYmVyIHNoYWxsIGJlIHByZXNlbnQgaW4gdGhlIGRldmljZSB0cmVlIG5v ZGUgcmVwcmVzZW50aW5nIHRoZSB2aWRlbwo+ID4gZm9ybWF0cyBzZWxlY3RlZCBieSBzeXN0ZW0g ZGVzaWduZXIgdG8gb3B0aW1pemUgbG9naWMgZm9vdHByaW50IG9mIHRoZSBJUC4KPiA+Cj4gPiBC YXNlZCBvbiB0aGUgc3RyaW5nIG5hbWVzIHByZXNlbnQsIGEgYml0bWFzayBlbmFibGVkX3ZpZF9m bXRzIGlzCj4gPiBjcmVhdGVkIHVzaW5nIHRoZSAuZm10X2JpdG1hc2sgbWVtYmVyIG9mIHZpZGVv IGZvcm1hdHMgbWVudGlvbmVkIGluCj4gZGV2aWNlIHRyZWUuCj4gPiBXaGVuIGEgY2xpZW50IHJl cXVlc3RzIGZvciBhIHBhcnRpY3VsYXIgcGl4ZWwgZm9ybWF0LCB0aGUKPiA+IGNvcnJlc3BvbmRp bmcgYml0IGlzIGNoZWNrZWQgYWdhaW5zdCB0aGlzIGJpdG1hc2sgdG8gZW5zdXJlIGl0IGlzIHZh bGlkLgo+ID4KPiA+IFdlIHN1cHBvcnQgYSBwcml2YXRlIEFQSSB0aGF0IGNsaWVudHMgY2FuIGNh bGwgdG8gZ2V0IGEgbGlzdCBvZgo+ID4gc3VwcG9ydGVkIHZpZGVvIGZvcm1hdHMuICBXZSB1c2Ug dGhlIGJpdG1hc2sgdG8gZmluZCBvdXQgd2hpY2ggZm9ybWF0cwo+ID4gYXJlIHN1cHBvcnRlZCwg dGhlbiBwdWxsIGVpdGhlciB0aGUgRFJNIG9yIFY0TDIgKGRlcGVuZGluZyBvbiBjbGllbnQKPiA+ IHR5cGUpIHBpeGVsIGZvcm1hdCBjb2RlcyBmcm9tIHRoaXMgdGFibGUgaW50byBhbiBhcnJheSBy ZXR1cm5lZCB0byB0aGUKPiBjbGllbnQuCj4gCj4gRE1BZW5naW5lIHNob3VsZCBub3QgY2FyZSBh Ym91dCBpdC4gSXRzIGpvYiBpcyB0byBkbyBETUEsIHZpZGVvIGZvcm1hdHMgZXRjCj4gZG9lc24n dCBzZWVtIHRvIGJlbG9uZyB0byBpdCwgYXJlIHdlIG1pc3NpbmcgYSB2aWRlbyBjbGllbnQgZHJp dmVyIGZvciB0aGlzPwoKSSBhZ3JlZSB0aGF0IERNQWVuZ2luZSBkcml2ZXIgc2hvdWxkbid0IGhh dmUgdG8gY2FyZSBhYm91dCB0aGUgdmlkZW8gZm9ybWF0cy4KQnV0IHRoZSBvbmx5IHJlYXNvbiB0 byBpbmNsdWRlIHRoZSB0cmFuc2xhdGlvbiBpbiB0aGUgZnJhbWVidWZmZXIgZHJpdmVyIGlzIHRv IAphdm9pZCByZXBsaWNhdGluZyB0aGUgdHJhbnNsYXRpb24gbG9naWMgaW4gZnV0dXJlIGNsaWVu dCBkcml2ZXJzLgoKQ3VycmVudGx5IHdlIGhhdmUgbW9kaWZpZWQgdGhlIFhpbGlueCBWaWRlbyBw aXBlbGluZSBkcml2ZXIgCihkcml2ZXJzL21lZGlhL3BsYXRmb3JtL3hpbGlueC8geGlsaW54LWRt YS4qIHhpbGlueC12aXBwLiogeGlsaW54LXZpcC4qKSB0byB0ZXN0IHRoaXMuCgo+IAo+ID4gPiA+ ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB4aWxpbnhfZnJtYnVmX29mX2lkc1td ID0gewo+ID4gPiA+ICsJeyAuY29tcGF0aWJsZSA9ICJ4bG54LGF4aS1mcm1idWYtd3ItdjIiLAo+ ID4gPiA+ICsJCS5kYXRhID0gKHZvaWQgKilETUFfREVWX1RPX01FTX0sCj4gPiA+ID4gKwl7IC5j b21wYXRpYmxlID0gInhsbngsYXhpLWZybWJ1Zi1yZC12MiIsCj4gPiA+ID4gKwkJLmRhdGEgPSAo dm9pZCAqKURNQV9NRU1fVE9fREVWfSwKPiA+ID4KPiA+ID4gaXMgdGhlIGRpcmVjdGlvbiBhIGh3 IHByb3BlcnR5IG9yIGNvbmZpZ3VyYWJsZT8KPiA+IFtWaXNoYWwgU2FnYXJdCj4gPiBUaGUgZGly ZWN0aW9uIGlzIGEgZml4ZWQgaHcgcHJvcGVydHkuIEZyYW1lYnVmZmVyIFdyaXRlIElQIHdpbGwg d3JpdGUKPiA+IEFYSTQgc3RyZWFtIGRhdGEgdG8gbWVtb3J5LiAgRnJhbWVidWZmZXIgUmVhZCBJ UCB3aWxsIHJlYWQgZnJhbWUgZGF0YQo+ID4gZnJvbSBtZW1vcnkgYW5kIGNvbnZlcnQgdG8gQVhJ NCBzdHJlYW0uCj4gCj4gU28gZHVyaW5nIHByZXBfeHh4LCBkbyB5b3UgZmFpbCBpZiByZXF1ZXN0 ZWQgdHhuIGlzIG5vdCBvZiBzYW1lIGRpcmVjdGlvbj8KClllcy4gCgo+IAo+ID4gPiA+ICtzdGF0 aWMgaW50IGZybWJ1Zl92ZXJpZnlfZm9ybWF0KHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgdTMyCj4g PiA+ID4gK2ZvdXJjYywKPiA+ID4gPiArdTMyIHR5cGUpIHsKPiA+ID4gPiArCXN0cnVjdCB4aWxp bnhfZnJtYnVmX2NoYW4gKnhpbF9jaGFuID0gdG9feGlsaW54X2NoYW4oY2hhbik7Cj4gPiA+ID4g Kwl1MzIgaSwgc3ogPSBBUlJBWV9TSVpFKHhpbGlueF9mcm1idWZfZm9ybWF0cyk7Cj4gPiA+ID4g Kwo+ID4gPiA+ICsJZm9yIChpID0gMDsgaSA8IHN6OyBpKyspIHsKPiA+ID4gPiArCQlpZiAoKHR5 cGUgPT0gWERNQV9EUk0gJiYKPiA+ID4gPiArCQkgICAgIGZvdXJjYyAhPSB4aWxpbnhfZnJtYnVm X2Zvcm1hdHNbaV0uZHJtX2ZtdCkgfHwKPiA+ID4gPiArCQkgICAodHlwZSA9PSBYRE1BX1Y0TDIg JiYKPiA+ID4gPiArCQkgICAgZm91cmNjICE9IHhpbGlueF9mcm1idWZfZm9ybWF0c1tpXS52NGwy X2ZtdCkpCj4gPiA+Cj4gPiA+IHRoaXMgaXMgdmVyeSBoYXJkIHRvIHJlYWQuLgo+ID4gW1Zpc2hh bCBTYWdhcl0KPiA+IEhlcmUgd2UgYXJlIGNoZWNraW5nIGlmIHRoZSBmb3VyY2MgdmlkZW8gZm9y bWF0IG1hdGNoZXMgdGhlCj4gPiBjb3JyZXNwb25kaW5nIGZvcm1hdCBiYXNlZCBvbiB0aGUgRE1B IGNsaWVudCBpZSBEUk0gb3IgVjRMMi4gIERvIHlvdQo+ID4gc3VnZ2VzdCBzb21lIG90aGVyIHdh eT8KPiAKPiBZZXMgbW9yZSByZWFkYWJpbGl0eSwgcGVyaGFwcyBtb3ZpbmcgdGhlIGNoZWNrIHRv IGEgaGVscGVyIQoKT2suIEkgd2lsbCBkbyB0aGlzIGluIG5leHQgcGF0Y2guCgo+IAo+ID4gPiA+ ICtzdGF0aWMgZW51bSBkbWFfc3RhdHVzIHhpbGlueF9mcm1idWZfdHhfc3RhdHVzKHN0cnVjdCBk bWFfY2hhbgo+ID4gPiAqZGNoYW4sCj4gPiA+ID4gKwkJCQkJICAgICAgIGRtYV9jb29raWVfdCBj b29raWUsCj4gPiA+ID4gKwkJCQkJICAgICAgIHN0cnVjdCBkbWFfdHhfc3RhdGUgKnR4c3RhdGUp IHsKPiA+ID4gPiArCXJldHVybiBkbWFfY29va2llX3N0YXR1cyhkY2hhbiwgY29va2llLCB0eHN0 YXRlKTsKPiA+ID4KPiA+ID4gbm8gcmVzaWR1ZSBjYWxuPwo+ID4gPgo+ID4gW1Zpc2hhbCBTYWdh cl0KPiAKPiA+IEkgZGlkbid0IHVuZGVyc3RhbmQgeW91ciBxdWVzdGlvbi4gQXJlIHlvdSBhc2tp bmcgaWYgd2UgY2FuIHJldHVybgo+ID4gcmVzaWR1YWwgYnl0ZXMgdHJhbnNmZXJyZWQ/ICBUaGUg SVAgZG9lc24ndCBzdXBwb3J0IGhvdyBtYW55IGJ5dGVzCj4gPiB3ZXJlIHNlbnQgaW4gdGhpcyBm cmFtZSBiZWZvcmUgaXQgd2FzIHN0b3BwZWQuCj4gCj4gdGhlbiBzZXQgdHhfc3RhdHVzIGFzIGRt YV9jb29raWVfc3RhdHVzLCB3aHkgdXNlIGEgd3JhcHBlcj8KClVuZGVyc3Rvb2QuIEkgd2lsbCBk byB0aGlzIGluIG5leHQgcGF0Y2guIAoKPiAKPiA+ID4gPiArCWVyciA9IG9mX3Byb3BlcnR5X3Jl YWRfdTMyKG5vZGUsICJ4bG54LGRtYS1hZGRyLXdpZHRoIiwKPiA+ID4KPiA+ID4gd2h5IG5vdCBk ZXZpY2VfcHJvcGVydHlfcmVhZF91MzIKPiA+ID4KPiA+IFtWaXNoYWwgU2FnYXJdCj4gPiBPZl9w cm9wZXJ0eV9yZWFkX3UzMiBpcyBtb3JlIGZhbWlsaWFyLiBMZXQgbWUga25vdyBpZiB0aGlzIGlz IG9rIG9yIEkKPiBzaG91bGQgY2hhbmdlIGl0Lgo+IAo+IFlvdSBjYW4gZ2V0IGZhbWlsaWFyIHdp dGggZGV2aWNlX3Byb3BlcnR5X3JlYWRfdTMyKCkgd2hpY2ggaXMgZmlybXdhcmUKPiBhZ25vc3Rp YyByZWFkIG1lY2hhbmlzbSEKPiAKCk9rIEkgd2lsbCBkbyB0aGlzIGluIG5leHQgcGF0Y2guCgot IFZpc2hhbCBTYWdhcgoKPiAtLQo+IH5WaW5vZAotLS0KVG8gdW5zdWJzY3JpYmUgZnJvbSB0aGlz IGxpc3Q6IHNlbmQgdGhlIGxpbmUgInVuc3Vic2NyaWJlIGRtYWVuZ2luZSIgaW4KdGhlIGJvZHkg b2YgYSBtZXNzYWdlIHRvIG1ham9yZG9tb0B2Z2VyLmtlcm5lbC5vcmcKTW9yZSBtYWpvcmRvbW8g aW5mbyBhdCAgaHR0cDovL3ZnZXIua2VybmVsLm9yZy9tYWpvcmRvbW8taW5mby5odG1sCg==