From mboxrd@z Thu Jan 1 00:00:00 1970 From: Laurent Pinchart Subject: Re: [PATCH] Add drm ioctl DRM_IOCTL_MODE_GETFB2 & associated helpers. Date: Tue, 01 Aug 2017 23:46:18 +0300 Message-ID: <14443434.mrJIj1bSop@avalon> References: <1585370.MpXFX8O0mo@avalon> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: Joe Kniss Cc: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, heiko-4mtYJXux2i+zQB+pC5nmwQ@public.gmane.org, Sean Paul , michel.daenzer-5C7GfCeVMHo@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, chris-Y6uKTt2uX1cEflXRtASbqLVCufUGDwFn@public.gmane.org, thierry.reding-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, krzk-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org, gnurou-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, linux-samsung-soc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, jy0922.shim-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org, linux-rockchip-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org, kyungmin.park-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org, patrik.r.jakobsson-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, javier-JPH+aEBZ4P+UEJcrhfAQsw@public.gmane.org, tomi.valkeinen-l0cyMroinI0@public.gmane.org, bskeggs-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org, nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, ck.hu-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org, Andrey.Grodzovsky-5C7GfCeVMHo@public.gmane.org, Joe Kniss , swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, intel-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, lin , linux-mediatek-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org, matthias.bgg-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org, mark.yao-TNX95d0MmH7DzftRWevZcw@public.gmane.org, =?ISO-8859-1?Q?St=E9phane?= Marchesin , nils.wallmenius-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org List-Id: linux-arm-msm@vger.kernel.org SGkgSm9lLAoKT24gVHVlc2RheSAwMSBBdWcgMjAxNyAxMDoyNDoyNSBKb2UgS25pc3Mgd3JvdGU6 Cj4gT24gVHVlLCBBdWcgMSwgMjAxNyBhdCA1OjA5IEFNLCBMYXVyZW50IFBpbmNoYXJ0IHdyb3Rl Ogo+ID4gT24gTW9uZGF5IDMxIEp1bCAyMDE3IDExOjI5OjEzIEpvZSBLbmlzcyB3cm90ZToKPiA+ PiBOZXcgZ2V0ZmIyIGZ1bmN0aW9uYWxpdHkgdXNlcyBkcm1fbW9kZV9mYl9jbWQyIHN0cnVjdCB0 byBiZSBzeW1tZXRyaWMKPiA+PiB3aXRoIGFkZGZiMi4KPiA+IAo+ID4gV2hhdCdzIHRoZSB1c2Ug Y2FzZSBmb3IgdGhpcyA/IFdlIGhhdmVuJ3QgbmVlZGVkIHN1Y2ggYW4gaW9jdGwgZm9yIHNvIGxv bmcKPiA+IHRoYXQgaXQgc2VlbWVkIHRvIG1lIHRoYXQgdXNlcnNwYWNlIGRvZXNuJ3QgcmVhbGx5 IG5lZWQgaXQsIGJ1dCBJIGNvdWxkIGJlCj4gPiB3cm9uZy4KPiAKPiBTb3JyeSwgSSBmYWlsZWQg dG8gcmVmZXJlbmNlIHRoZSBvcmlnaW5hbCBlbWFpbC4gIEhlcmUgaXQgaXM6Cj4gCj4gPHNuaXA+ Cj4gSSBhbSBhIHJlY2VudCBhZGRpdGlvbiB0byBHb29nbGUncyBDaHJvbWVPUyBnZnggdGVhbS4g ICBJIGFtIGN1cnJlbnRseQo+IHdvcmtpbmcgb24gZGlzcGxheSB0ZXN0aW5nIGFuZCByZXBvcnRp bmcuICAgQW4gaW1wb3J0YW50IHBhcnQgb2YgdGhpcyBpcwo+IG91ciBzY3JlZW4gY2FwdHVyZSB0 b29sLCB3aGljaCB3b3JrcyBieSBxdWVyeWluZyBkcm0gZm9yIGNydGNzLCBwbGFuZXMsIGFuZAo+ IGZicy4gIFVuZm9ydHVuYXRlbHksIHRoZXJlIGlzIG9ubHkgbGltaXRlZCBpbmZvcm1hdGlvbiBh dmFpbGFibGUgdmlhCj4gZHJtTW9kZUdldEZCKCksIHdoaWNoIG9mdGVuIHdyb25nIGluZm9ybWF0 aW9uIHdoZW4gZHJtTW9kZUFkZEZCMigpIHdhcyB1c2VkCj4gdG8gY3JlYXRlIHRoZSBmYnMuICAg Rm9yIGV4YW1wbGUsIGlmIHRoZSBwaXhlbCBmb3JtYXQgaXMgTlYxMiBvciBZVVY0MjAsCj4gdGhl IGZiIHJldHVybmVkIGtub3dzIG5vdGhpbmcgYWJvdXQgdGhlIGFkZGl0aW9uYWwgYnVmZmVyIHBs YW5lcyByZXF1aXJlZAo+IGJ5IHRoZXNlIGZvcm1hdHMuICAgSWRlYWxseSwgd2Ugd291bGQgbGlr ZSBhIGZ1bmN0aW9uIChlLmcuIGRybU1vZGVHZXRGQjIpCj4gdG8gcmV0dXJuIGluZm9ybWF0aW9u IHN5bW1ldHJpYyB3aXRoIGRybU1vZGVBZGRGQjIgaW5jbHVkaW5nIHRoZSBwaXhlbAo+IGZvcm1h dCBpZCwgYnVmZmVyIHBsYW5lIGluZm9ybWF0aW9uIGV0Yy4KPiA8L3NuaXA+Cj4gCj4gQ2hyb21l T1MgaGFzIG5lZWRlZCB0aGlzIGZ1bmN0aW9uYWxpdHkgZnJvbSB0aGUgc3RhcnQsIGZvciBib3Ro IHRlc3RpbmcgYW5kCj4gZXJyb3IgcmVwb3J0aW5nLiAgV2UgZ290IGF3YXkgd2l0aCBndWVzc2lu ZyB0aGUgYnVmZmVyJ3MgZm9ybWF0ICgzMmJpdAo+IHhyZ2IpIHVudGlsIG5vdy4gIFdlIGFyZSBu b3cgZW5hYmxpbmcgb3ZlcmxheXMgYW5kIG1vcmUgZm9ybWF0cyBpbmNsdWRpbmcKPiBtdWx0aS1w bGFuYXIgKGUuZy4gTlYxMikuICBDdXJyZW50IGdldGZiKCkgcmVwb3J0cyBuZWl0aGVyIHRoZSBw aXhlbCBmb3JtYXQKPiBub3IgIHBsYW5hciBpbmZvcm1hdGlvbi4gIFdpdGhvdXQgdGhpcyBpbmZv cm1hdGlvbiwgZ29pbmcgZm9yd2FyZCwgb3VyIGdmeAo+IHRlc3RpbmcgaXMgZ29pbmcgdG8gYnJl YWsuICBJdCB3b3VsZCBiZSBncmVhdCBpZiB3ZSBoYWQgYWNjZXNzIHRvIGhpZ2hlcgo+IGxldmVs IGJ1ZmZlciBzdHJ1Y3RzIChsaWtlIGdibSksIGJ1dCB3ZSBnZW5lcmFsbHkgZG9uJ3Qgc2luY2Ug dGhleSB3b3VsZCBiZQo+IGNyZWF0ZWQgYnkgb3RoZXIgYXBwcyAoY2hyb21lIGJyb3dzZXIsIGFu ZHJvaWQgYXBwcywgZXRjLi4uKS4KCkhvdyBpcyBzY3JlZW4gY2FwdHVyZSBpbXBsZW1lbnRlZCA/ IERvIHlvdSBlbnVtZXJhdGUgdGhlIGZyYW1lYnVmZmVycyBiZWluZyAKc2Nhbm5lZCBvdXQsIGR1 bXAgdGhlaXIgY29udGVudHMgYW5kIGNvbXBvc2UgdGhlbSBtYW51YWxseSBiYXNlZCBvbiB0aGUg YWN0aXZlIApwbGFuZSBjb25maWd1cmF0aW9uID8gSWYgc28sIGlzbid0IHRoaXMgdmVyeSByYWNl LXByb25lID8KCj4gPj4gQWxzbyBtb2RpZmllcyAqX2ZiX2NyZWF0ZV9oYW5kbGUoKSBjYWxscyB0 byBhY2NlcHQgYQo+ID4+IGZvcm1hdF9wbGFuZV9pbmRleCBzbyB0aGF0IGhhbmRsZXMgZm9yIGVh Y2ggcGxhbmUgY2FuIGJlIGdlbmVyYXRlZC4KPiA+PiBQcmV2aW91c2x5LCBtYW55ICpfZmJfY3Jl YXRlX2hhbmRsZSgpIGNhbGxzIHNpbXBseSBkZWZhdWx0ZWQgdG8gcGxhbmUgMAo+ID4+IG9ubHku Cj4gPiAKPiA+IEFuZCB3aXRoIHRoaXMgcGF0Y2ggdGhlIGFtZC9hbWRncHUsIGFybWFkYSwgZ21h NTAwLCBpOTE1LCBtZWRpYXRlaywgbXNtLAo+ID4gbm91dmVhdSBhbmQgcmFkZW9uIGRyaXZlcnMg c3RpbGwgZG8uIERvIG5vbmUgb2YgdGhlbSBzdXBwb3J0IG11bHRpLXBsYW5hcgo+ID4gZm9ybWF0 cyA/Cj4gIAo+IEkgd291bGQgaW1hZ2luZSB0aGF0IHNvbWUgb2YgdGhlc2UgZG8gc3VwcG9ydCBt dWx0aS1wbGFuYXIgZm9ybWF0cywgYnV0Cj4gdGhleSBkb24ndCBhcHBlYXIgdG8gaGF2ZSB0aGVt IGltcGxlbWVudGVkIHlldCAoZXhjZXB0IHBlcmhhcHMgYXMgb2Zmc2V0cwo+IGludG8gYSBzaW5n bGUgYnVmZmVyKS4gIEkgd2lsbCBjZXJ0YWlubHkgYmUgbG9va2luZyBpbnRvIHRoaXMgc29vbiwg YnV0IGFueQo+IGNoYW5nZXMgd2lsbCBjb21lIGluIGZ1dHVyZSBwYXRjaGVzLgo+IAo+ID4+IFNp Z25lZC1vZmYtYnk6IEpvZSBLbmlzcyA8ZGpta0Bnb29nbGUuY29tPgo+ID4+IC0tLQo+ID4+IAo+ ID4+ICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZGlzcGxheS5jIHwgIDUgKy0K PiA+PiAgZHJpdmVycy9ncHUvZHJtL2FybWFkYS9hcm1hZGFfZmIuYyAgICAgICAgICB8ICAxICsK PiA+PiAgZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjX2ludGVybmFsLmggICAgICAgICB8ICAyICsK PiA+PiAgZHJpdmVycy9ncHUvZHJtL2RybV9mYl9jbWFfaGVscGVyLmMgICAgICAgICB8IDExICsr LS0KPiA+PiAgZHJpdmVycy9ncHUvZHJtL2RybV9mcmFtZWJ1ZmZlci5jICAgICAgICAgICB8IDc5 ICsrKysrKysrKysrKysrKysrKystCj4gPj4gIGRyaXZlcnMvZ3B1L2RybS9kcm1faW9jdGwuYyAg ICAgICAgICAgICAgICAgfCAgMSArCj4gPj4gIGRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9z X2RybV9mYi5jICAgICAgfCAgNyArKy0KPiA+PiAgZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9mcmFt ZWJ1ZmZlci5jICAgICAgICB8ICAyICsKPiA+PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZGlzcGxheS5jICAgICAgICB8ICAxICsKPiA+PiAgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210 a19kcm1fZmIuYyAgICAgICB8ICAxICsKPiA+PiAgZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZmIu YyAgICAgICAgICAgICAgICB8ICA1ICstCj4gPj4gIGRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25v dXZlYXVfZGlzcGxheS5jICAgfCAgMSArCj4gPj4gIGRyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL29t YXBfZmIuYyAgICAgICAgICAgfCAgNSArLQo+ID4+ICBkcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3Jh ZGVvbl9kaXNwbGF5LmMgICAgIHwgIDUgKy0KPiA+PiAgZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlw L3JvY2tjaGlwX2RybV9mYi5jICB8ICA2ICsrLQo+ID4+ICBkcml2ZXJzL2dwdS9kcm0vdGVncmEv ZmIuYyAgICAgICAgICAgICAgICAgIHwgIDkgKysrLQo+ID4+ICBpbmNsdWRlL2RybS9kcm1fZnJh bWVidWZmZXIuaCAgICAgICAgICAgICAgIHwgIDEgKwo+ID4+ICBpbmNsdWRlL3VhcGkvZHJtL2Ry bS5oICAgICAgICAgICAgICAgICAgICAgIHwgIDIgKwo+ID4+ICAxOCBmaWxlcyBjaGFuZ2VkLCAx MjcgaW5zZXJ0aW9ucygrKSwgMTcgZGVsZXRpb25zKC0pCj4gPiAKPiA+IFtzbmlwXQo+ID4gCj4g Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZnJhbWVidWZmZXIuYwo+ID4+IGIv ZHJpdmVycy9ncHUvZHJtL2RybV9mcmFtZWJ1ZmZlci5jIGluZGV4IDI4YTAxMDhhMWFiOC4uNjdi M2JlMWJlZGJjCj4gPj4gMTAwNjQ0Cj4gPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9mcmFt ZWJ1ZmZlci5jCj4gPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9mcmFtZWJ1ZmZlci5jCj4g Pj4gQEAgLTI0LDYgKzI0LDcgQEAKCltzbmlwXQoKPiA+PiArLyoqCj4gPj4gKyAqIGRybV9tb2Rl X2dldGZiMiAtIGdldCBGQiBpbmZvCj4gPj4gKyAqIEBkZXY6IGRybSBkZXZpY2UgZm9yIHRoZSBp b2N0bAo+ID4+ICsgKiBAZGF0YTogZGF0YSBwb2ludGVyIGZvciB0aGUgaW9jdGwKPiA+PiArICog QGZpbGVfcHJpdjogZHJtIGZpbGUgZm9yIHRoZSBpb2N0bCBjYWxsCj4gPj4gKyAqCj4gPj4gKyAq IExvb2t1cCB0aGUgRkIgZ2l2ZW4gaXRzIElEIGFuZCByZXR1cm4gaW5mbyBhYm91dCBpdC4KPiA+ PiArICoKPiA+PiArICogQ2FsbGVkIGJ5IHRoZSB1c2VyIHZpYSBpb2N0bC4KPiA+PiArICoKPiA+ PiArICogUmV0dXJuczoKPiA+PiArICogWmVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBv biBmYWlsdXJlLgo+ID4+ICsgKi8KPiA+PiAraW50IGRybV9tb2RlX2dldGZiMihzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LAo+ID4+ICsgICAgICAgICAgICAgICAgdm9pZCAqZGF0YSwgc3RydWN0IGRy bV9maWxlICpmaWxlX3ByaXYpCj4gPj4gK3sKPiA+PiArICAgICBzdHJ1Y3QgZHJtX21vZGVfZmJf Y21kMiAqciA9IGRhdGE7Cj4gPj4gKyAgICAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7Cj4g Pj4gKyAgICAgaW50IHJldCwgaTsKPiA+PiArCj4gPj4gKyAgICAgaWYgKCFkcm1fY29yZV9jaGVj a19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKQo+ID4+ICsgICAgICAgICAgICAgcmV0dXJu IC1FSU5WQUw7Cj4gPj4gKwo+ID4+ICsgICAgIGZiID0gZHJtX2ZyYW1lYnVmZmVyX2xvb2t1cChk ZXYsIHItPmZiX2lkKTsKPiA+PiArICAgICBpZiAoIWZiKQo+ID4+ICsgICAgICAgICAgICAgcmV0 dXJuIC1FTk9FTlQ7Cj4gPj4gKwo+ID4+ICsgICAgIHItPmhlaWdodCA9IGZiLT5oZWlnaHQ7Cj4g Pj4gKyAgICAgci0+d2lkdGggPSBmYi0+d2lkdGg7Cj4gPj4gKyAgICAgci0+cGl4ZWxfZm9ybWF0 ID0gZmItPmZvcm1hdC0+Zm9ybWF0Owo+ID4+ICsgICAgIGZvciAoaSA9IDA7IGkgPCA0OyArK2kp IHsKPiA+PiArICAgICAgICAgICAgIHItPnBpdGNoZXNbaV0gPSBmYi0+cGl0Y2hlc1tpXTsKPiA+ PiArICAgICAgICAgICAgIHItPm9mZnNldHNbaV0gPSBmYi0+b2Zmc2V0c1tpXTsKPiA+PiArICAg ICAgICAgICAgIHItPm1vZGlmaWVyW2ldID0gZmItPm1vZGlmaWVyOwo+ID4+ICsgICAgICAgICAg ICAgci0+aGFuZGxlc1tpXSA9IDA7Cj4gPj4gKyAgICAgfQo+ID4+ICsKPiA+PiArICAgICBmb3Ig KGkgPSAwOyBpIDwgZmItPmZvcm1hdC0+bnVtX3BsYW5lczsgKytpKSB7Cj4gPj4gKyAgICAgICAg ICAgICBpZiAoZmItPmZ1bmNzLT5jcmVhdGVfaGFuZGxlKSB7Cj4gPj4gKyAgICAgICAgICAgICAg ICAgICAgIGlmIChkcm1faXNfY3VycmVudF9tYXN0ZXIoZmlsZV9wcml2KSB8fAo+ID4+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgY2FwYWJsZShDQVBfU1lTX0FETUlOKSB8fAo+ID4+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgZHJtX2lzX2NvbnRyb2xfY2xpZW50KGZpbGVfcHJpdikpIHsK PiA+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBmYi0+ZnVuY3MtPmNyZWF0 ZV9oYW5kbGUoZmIsIGksCj4gPj4gZmlsZV9wcml2LAo+ID4+ICsKPiA+PiAmci0+aGFuZGxlc1tp XSk7Cj4gPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldCkKPiA+PiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+ID4+ICsgICAgICAgICAg ICAgICAgICAgICB9IGVsc2Ugewo+ID4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IEdFVF9GQigpIGlzIGFuIHVucHJpdmlsZWdlZCBpb2N0bCBzbyB3ZQo+ID4+IG11c3QKPiA+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBub3QgcmV0dXJuIGEgYnVmZmVyLWhhbmRs ZSB0bwo+ID4+IG5vbi1tYXN0ZXIKPiA+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KiBwcm9jZXNzZXMhIEZvciBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eQo+ID4+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAqIHJlYXNvbnMsIHdlIGNhbm5vdCBtYWtlIEdFVF9GQigpCj4g Pj4gcHJpdmlsZWdlZCwKPiA+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBzbyBq dXN0IHJldHVybiBhbiBpbnZhbGlkIGhhbmRsZSBmb3IKPiA+PiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKiBub24tbWFzdGVycy4gKi8KPiA+IAo+ID4gVGhlcmUncyBubyBiYWNrd2Fy ZCBjb21wYXRpYmlsaXR5IHRvIGhhbmRsZSBoZXJlLCBqdXN0IG1ha2UgaXQgcHJpdmlsZWdlZAo+ ID4gaWYgaXQgaGFzIHRvIGJlLgo+IAo+IFN1cmUgdGhpbmcsIHNvdW5kcyBnb29kLgo+IAo+ID4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLT5oYW5kbGVzW2ldID0gMDsKPiA+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gMDsKPiA+ID4gKyAgICAgICAgICAg ICAgICAgICAgIH0KPiA+ID4gKyAgICAgICAgICAgICB9IGVsc2Ugewo+ID4gPiArICAgICAgICAg ICAgICAgICAgICAgcmV0ID0gLUVOT0RFVjsKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOwo+ID4gPiArICAgICAgICAgICAgIH0KPiA+ID4gKyAgICAgfQo+ID4gPiArCj4gPiA+ICsg ICAgIC8qIElmIGhhbmRsZSBjcmVhdGlvbiBmYWlsZWQsIGRlbGV0ZS9kZXJlZmVyZW5jZSBhbnkg dGhhdCB3ZXJlCj4gPiAKPiA+IG1hZGUuCj4gPiAqLwo+ID4gCj4gPiA+ICsgICAgIGlmIChyZXQp IHsKPiA+ID4gKyAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNDsgKytpKSB7Cj4gPiA+ICsg ICAgICAgICAgICAgICAgICAgICBpZiAoci0+aGFuZGxlc1tpXSkKPiA+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZHJtX2dlbV9oYW5kbGVfZGVsZXRlKGZpbGVfcHJpdiwgci0KPiA+ ID5oYW5kbGVzW2ldKTsKPiA+IAo+ID4gTXkgaW5pdGlhbCByZWFjdGlvbiB0byB0aGlzIHdhcyB0 byByZXBseSB0aGF0IG5vdCBhbGwgZHJpdmVycyB1c2UgR0VNLCBidXQKPiA+IGFmdGVyIHNvbWUg aW52ZXN0aWdhdGlvbiBpdCBzZWVtcyB0aGV5IGFjdHVhbGx5IGRvLiBJZiB0aGF0J3MgcmVhbGx5 IHRoZQo+ID4gY2FzZSwgd2UgY291bGQgZ2V0IHJpZCBvZiB0aGUgLmNyZWF0ZV9oYW5kbGUoKSBv cGVyYXRpb24gY29tcGxldGVseSwgd2hpY2gKPiA+IHNob3VsZCBzaW1wbGlmeSB0aGUgaW1wbGVt ZW50YXRpb24gb2YgYm90aCBEUk1fSU9DVExfTU9ERV9HRVRGQiBhbmQKPiA+IERSTV9JT0NUTF9N T0RFX0dFVEZCMi4KPiAKPiBEZWxldGluZyB0aGUgaGFuZGxlIGlzIHRoZSBzYW1lIGluIGFsbCBj YXNlcywgYnV0IGNyZWF0aW5nIHRoZSBoYW5kbGUKPiBpc24ndCBjb25zaXN0ZW50IGFjcm9zcyB0 aGUgZHJpdmVycy4gIEkgZGlkbid0IHNlZSBhIGNsZWFuIHdheSB0byBzaW1wbGlmeQo+IHRoaXMu CgpDcmVhdGluZyB0aGUgaGFuZGxlIHNlZW1zIHRvIGJlIGZhaXJseSBjb25zaXN0ZW50LCBleGNl cHQgZm9yIGEgdmVyeSBzbWFsbCAKbnVtYmVyIG9mIHNwZWNpYWwgY2FzZXMuIElmIHdlIHN0b3Jl ZCB0aGUgR0VNIG9iamVjdCBwb2ludGVycyBpbiB0aGUgCmRybV9mcmFtZWJ1ZmZlciBzdHJ1Y3R1 cmUsIHRoZSBjb21tb24gY2FzZSB3b3VsZCBiZSBzaW1wbGlmaWVkLiBPciBtYXliZSBJJ3ZlIApt aXNzZWQgc29tZXRoaW5nIDotKQoKPiA+PiArICAgICAgICAgICAgICAgICAgICAgci0+aGFuZGxl c1tpXSA9IDA7Cj4gPj4gKyAgICAgICAgICAgICB9Cj4gPj4gKyAgICAgfQo+ID4+ICsKPiA+PiAr ICAgICBkcm1fZnJhbWVidWZmZXJfdW5yZWZlcmVuY2UoZmIpOwo+ID4+ICsKPiA+PiArICAgICBy ZXR1cm4gcmV0Owo+ID4+ICt9Cgpbc25pcF0KCj4gPj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFw aS9kcm0vZHJtLmggYi9pbmNsdWRlL3VhcGkvZHJtL2RybS5oCj4gPj4gaW5kZXggYjJjNTI4NDNi YzcwLi5jODFjNzUzMzVjY2EgMTAwNjQ0Cj4gPj4gLS0tIGEvaW5jbHVkZS91YXBpL2RybS9kcm0u aAo+ID4+ICsrKyBiL2luY2x1ZGUvdWFwaS9kcm0vZHJtLmgKPiA+PiBAQCAtODE0LDYgKzgxNCw4 IEBAIGV4dGVybiAiQyIgewo+ID4+IAo+ID4+ICAjZGVmaW5lIERSTV9JT0NUTF9NT0RFX0NSRUFU RVBST1BCTE9CICAgICAgICBEUk1fSU9XUigweEJELCBzdHJ1Y3QKPiA+PiBkcm1fbW9kZV9jcmVh dGVfYmxvYikKPiA+PiAjZGVmaW5lIERSTV9JT0NUTF9NT0RFX0RFU1RST1lQUk9QQkxPQiAgICAg ICAgRFJNX0lPV1IoMHhCRSwgc3RydWN0Cj4gPj4gZHJtX21vZGVfZGVzdHJveV9ibG9iKQo+ID4+ IAo+ID4+ICsjZGVmaW5lIERSTV9JT0NUTF9NT0RFX0dFVEZCMiAgRFJNX0lPV1IoMHhDNCwgc3Ry dWN0IGRybV9tb2RlX2ZiX2NtZDIpCj4gPj4gKwo+ID4gCj4gPiBXaGljaCB0cmVlIGlzIHRoaXMg YmFzZWQgb24gPyBUaGUgbGFzdCBkZWZpbmVkIGlvY3RsCj4gPiAoRFJNX0lPQ1RMX1NZTkNPQkpf RkRfVE9fSEFORExFKSBpcyAweEMyIGluIGRybS1uZXh0IGFuZCBkcm0tbWlzYy1uZXh0Lgo+IAo+ IEkganVzdCBkaWQgYSBxdWljayBzZWFyY2ggZm9yICJEUk1fSU9XUiAweEMqIiBhbmQgcGlja2Vk IHRoZSBmaXJzdCB1bnVzZWQKPiBvbmUsIHRoZXJlIHdhcyBhIHBhdGNoIGluLWZsaWdodCBmcm9t IGxhc3QgbW9udGggdGhhdCB1c2VkIDB4QzMgKAo+IGh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL2FyY2hpdmVzL2FtZC1nZngvMjAxNy1KdW5lLzAxMDE1My5odG1sKS4KPiBOYXR1cmFsbHks IEknbGwgc2V0IHRoaXMgdG8gd2hhdGV2ZXIgaXMgYXBwcm9wcmlhdGUuCgpUaGUgYmVzdCBpcyB0 byBiYXNlIHlvdXIgcGF0Y2ggb24gdG9wIG9mIHRoZSBkcm0tbWlzYy1uZXh0IGJyYW5jaCBvZiB0 aGUgZHJtLQptaXNjIHRyZWUuIFdob2V2ZXIgaXMgbWVyZ2VkIGZpcnN0IHdpbGwgd2luIHRoZSBp b2N0bCBudW1iZXIgOi0pIE9mIGNvdXJzZSBpdCAKbWVhbnMgcmViYXNpbmcgaWYgc29tZW9uZSBl bHNlIHdpbnMgdGhlIHJhY2UsIGJ1dCB0aGF0IHNob3VsZG4ndCBiZSBhIGJpZyAKZGVhbC4KCj4g PiA+ICAvKioKPiA+ID4gIAo+ID4gPiAgICogRGV2aWNlIHNwZWNpZmljIGlvY3RscyBzaG91bGQg b25seSBiZSBpbiB0aGVpciByZXNwZWN0aXZlIGhlYWRlcnMKPiA+ID4gICAqIFRoZSBkZXZpY2Ug c3BlY2lmaWMgaW9jdGwgcmFuZ2UgaXMgZnJvbSAweDQwIHRvIDB4OWYuCgotLSAKUmVnYXJkcywK CkxhdXJlbnQgUGluY2hhcnQKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCkZyZWVkcmVubyBtYWlsaW5nIGxpc3QKRnJlZWRyZW5vQGxpc3RzLmZyZWVkZXNr dG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2Zy ZWVkcmVubwo=