From mboxrd@z Thu Jan 1 00:00:00 1970 From: John Keeping Subject: Re: [PATCH v2] drm: support hotspot for universal plane cursors Date: Tue, 17 Nov 2015 18:47:28 +0000 Message-ID: <20151117184728.27252360.john@metanate.com> References: <1447762218-11017-1-git-send-email-john@metanate.com> <1447772734-6480-1-git-send-email-john@metanate.com> <20151117153932.GU4437@intel.com> <20151117155943.1e83b053.john@metanate.com> <20151117162935.GK16848@phenom.ffwll.local> <20151117183132.GU16848@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from metanate.com (dougal.metanate.com [90.155.101.14]) by gabe.freedesktop.org (Postfix) with ESMTPS id 479C46E410 for ; Tue, 17 Nov 2015 10:48:09 -0800 (PST) In-Reply-To: <20151117183132.GU16848@phenom.ffwll.local> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Daniel Vetter Cc: Maling list - DRI developers , Michel =?UTF-8?B?RMOkbnplcg==?= , LKML List-Id: dri-devel@lists.freedesktop.org T24gVHVlLCAxNyBOb3YgMjAxNSAxOTozMTozMiArMDEwMCwgRGFuaWVsIFZldHRlciB3cm90ZToK Cj4gT24gVHVlLCBOb3YgMTcsIDIwMTUgYXQgMTI6MDc6MjRQTSAtMDUwMCwgQWxleCBEZXVjaGVy IHdyb3RlOgo+ID4gT24gVHVlLCBOb3YgMTcsIDIwMTUgYXQgMTE6MjkgQU0sIERhbmllbCBWZXR0 ZXIgPGRhbmllbEBmZndsbC5jaD4KPiA+IHdyb3RlOiAgCj4gPiA+IE9uIFR1ZSwgTm92IDE3LCAy MDE1IGF0IDAzOjU5OjQzUE0gKzAwMDAsIEpvaG4gS2VlcGluZyB3cm90ZTogIAo+ID4gPj4gT24g VHVlLCAxNyBOb3YgMjAxNSAxNzozOTozMiArMDIwMCwgVmlsbGUgU3lyasOkbMOkIHdyb3RlOgo+ ID4gPj4gIAo+ID4gPj4gPiBPbiBUdWUsIE5vdiAxNywgMjAxNSBhdCAwMzowNTozNFBNICswMDAw LCBKb2huIEtlZXBpbmcgd3JvdGU6ICAKPiA+ID4+ID4gPiBUaGUgcmVxdWVzdCdzIGhvdF94IGFu ZCBob3RfeSBhcmUgc2V0IGNvcnJlY3RseSBmb3IgYm90aAo+ID4gPj4gPiA+IERSTV9JT0NUTF9N T0RFX0NVUlNPUiBhbmQgRFJNX0lPQ1RMX01PREVfQ1VSU09SMiBzbyB3ZSBqdXN0Cj4gPiA+PiA+ ID4gbmVlZCB0byBzYXZlIHRoZSB2YWx1ZXMgYW5kIHRoZW4gYXBwbHkgdGhlIG9mZnNldCB0byB0 aGUKPiA+ID4+ID4gPiBjdXJzb3IgcGxhbmUgd2hlbiB0aGUgY3Vyc29yIG1vdmVzLgo+ID4gPj4g PiA+Cj4gPiA+PiA+ID4gU2lnbmVkLW9mZi1ieTogSm9obiBLZWVwaW5nIDxqb2huQG1ldGFuYXRl LmNvbT4KPiA+ID4+ID4gPiAtLS0KPiA+ID4+ID4gPiB2MjoKPiA+ID4+ID4gPiAgIC0gYWRkIGtl cm5lbGRvYyBmb3IgaG90X3ggYW5kIGhvdF95IGluIHN0cnVjdCBkcm1fY3J0Ywo+ID4gPj4gPiA+ Cj4gPiA+PiA+ID4gIGRyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Yy5jIHwgMTEgKysrKysrKy0tLS0K PiA+ID4+ID4gPiAgaW5jbHVkZS9kcm0vZHJtX2NydGMuaCAgICAgfCAgNiArKysrKysKPiA+ID4+ ID4gPiAgMiBmaWxlcyBjaGFuZ2VkLCAxMyBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQo+ ID4gPj4gPiA+Cj4gPiA+PiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0 Yy5jCj4gPiA+PiA+ID4gYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMuYyBpbmRleCA3MjBhMTUz Li40MGY1Yjg0IDEwMDY0NAo+ID4gPj4gPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0 Yy5jCj4gPiA+PiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjLmMKPiA+ID4+ID4g PiBAQCAtMjgzMSw2ICsyODMxLDkgQEAgc3RhdGljIGludAo+ID4gPj4gPiA+IGRybV9tb2RlX2N1 cnNvcl91bml2ZXJzYWwoc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ID4gPj4gPiA+IERSTV9ERUJV R19LTVMoImZhaWxlZCB0byB3cmFwIGN1cnNvciBidWZmZXIgaW4gZHJtCj4gPiA+PiA+ID4gZnJh bWVidWZmZXJcbiIpOyByZXR1cm4gUFRSX0VSUihmYik7IH0KPiA+ID4+ID4gPiArCj4gPiA+PiA+ ID4gKyAgICAgICAgICAgICAgICAgY3J0Yy0+aG90X3ggPSByZXEtPmhvdF94Owo+ID4gPj4gPiA+ ICsgICAgICAgICAgICAgICAgIGNydGMtPmhvdF95ID0gcmVxLT5ob3RfeTsKPiA+ID4+ID4gPiAg ICAgICAgICAgfSBlbHNlIHsKPiA+ID4+ID4gPiAgICAgICAgICAgICAgICAgICBmYiA9IE5VTEw7 Cj4gPiA+PiA+ID4gICAgICAgICAgIH0KPiA+ID4+ID4gPiBAQCAtMjg0MSwxMSArMjg0NCwxMSBA QCBzdGF0aWMgaW50Cj4gPiA+PiA+ID4gZHJtX21vZGVfY3Vyc29yX3VuaXZlcnNhbChzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMsIH0KPiA+ID4+ID4gPgo+ID4gPj4gPiA+ICAgaWYgKHJlcS0+ZmxhZ3Mg JiBEUk1fTU9ERV9DVVJTT1JfTU9WRSkgewo+ID4gPj4gPiA+IC0gICAgICAgICBjcnRjX3ggPSBy ZXEtPng7Cj4gPiA+PiA+ID4gLSAgICAgICAgIGNydGNfeSA9IHJlcS0+eTsKPiA+ID4+ID4gPiAr ICAgICAgICAgY3J0Y194ID0gcmVxLT54IC0gY3J0Yy0+aG90X3g7Cj4gPiA+PiA+ID4gKyAgICAg ICAgIGNydGNfeSA9IHJlcS0+eSAtIGNydGMtPmhvdF95Owo+ID4gPj4gPiA+ICAgfSBlbHNlIHsK PiA+ID4+ID4gPiAtICAgICAgICAgY3J0Y194ID0gY3J0Yy0+Y3Vyc29yX3g7Cj4gPiA+PiA+ID4g LSAgICAgICAgIGNydGNfeSA9IGNydGMtPmN1cnNvcl95Owo+ID4gPj4gPiA+ICsgICAgICAgICBj cnRjX3ggPSBjcnRjLT5jdXJzb3JfeCAtIGNydGMtPmhvdF94Owo+ID4gPj4gPiA+ICsgICAgICAg ICBjcnRjX3kgPSBjcnRjLT5jdXJzb3JfeSAtIGNydGMtPmhvdF95OyAgCj4gPiA+PiA+Cj4gPiA+ PiA+IFdoeSBkb2VzIHRoZSBsb2NhdGlvbiBvZiB0aGUgaG90c3BvdCBhZmZlY3QgdGhlIHBsYW5l Cj4gPiA+PiA+IHBvc2l0aW9uPyAgCj4gPiA+Pgo+ID4gPj4gaG90X3t4LHl9IHNwZWNpZnkgdGhl IGxvY2F0aW9uIG9mIHRoZSBhY3RpdmUgcGl4ZWwgd2l0aGluIHRoZQo+ID4gPj4gY3Vyc29yIHBs YW5lIGFuZCBjdXJzb3Jfe3gseX0gc3BlY2lmeSB0aGUgbG9jYXRpb24gb2YgdGhlIGFjdGl2ZQo+ ID4gPj4gcGl4ZWwgb24gdGhlIGRpc3BsYXkgc28gd2UgbmVlZCB0byBvZmZzZXQgdGhlIHBsYW5l IHBvc2l0aW9uIGluCj4gPiA+PiBvcmRlciBmb3IgdGhlIGFjdGl2ZSBwaXhlbCB0byBiZSBpbiB0 aGUgY29ycmVjdCBwbGFjZS4gIAo+ID4gPgo+ID4gPiBOb3BlLCBob3RfeC95IGlzIGp1c3QgZm9y IHZpcnR1YWwgbWFjaGluZXMgdG8gaW5kaWNhdGUgd2hlcmUgdGhlCj4gPiA+IGxvZ2ljYWwgY3Vy c29yIHBvc2l0aW9uIGlzIHdpdGhpbiB0aGUgY3Vyc29yIHBsYW5lLiBJdCBzaG91bGQKPiA+ID4g aGF2ZSAyIGVmZmVjdCBvbiBob3cgc29tZXRoaW5nIGlzIGRpc3BsYXllZC4gQW5kIG5vLCBJIGhh dmUKPiA+ID4gYWJzb2x1dGVseSBubyBpZGVhIHdoeSByYWRlb24gaXMgcHVsbGluZyBzb21lIHRy aWNrcyBoZXJlLCB3aGljaAo+ID4gPiBoYXZlIGJlZW4gYWRkZWQgaW4KPiA+ID4KPiA+ID4gY29t bWl0IDc4YjFhNjAxMGI0NmE2OWJjZDQ3YjcyM2E4MGY5MjY5M2YyNmQxN2IKPiA+ID4gQXV0aG9y OiBNaWNoZWwgRMOkbnplciA8bWljaGVsLmRhZW56ZXJAYW1kLmNvbT4KPiA+ID4gRGF0ZTogICBU dWUgTm92IDE4IDE4OjAwOjA4IDIwMTQgKzA5MDAKPiA+ID4KPiA+ID4gICAgIGRybS9yYWRlb246 IFVzZSBjdXJzb3Jfc2V0MiBob29rIGZvciBlbmFibGluZyAvIGRpc2FibGluZyB0aGUKPiA+ID4g SFcgY3Vyc29yCj4gPiA+Cj4gPiA+IE1pY2hlbC9BbGV4LCBjYW4geW91IHBsZWFzZSBzaGVkIHNv bWUgbGlnaHQgb250byB0aGlzPyByYWRlb24gaXMKPiA+ID4gdGhlIG9ubHkgZHJpdmVyIGRvaW5n IHRoaXMsIG1ha2luZyB0aGlzIGludGVyZmFjZSBpbmNvbnNpc3RlbnQuCj4gPiA+IElzIHRoZSBk ZHggZG9pbmcgc29tZXRoaW5nIGZ1bm55IGNvbXBhcmVkIHRvIC1tb2Rlc2V0aW5nIG9yCj4gPiA+ IHdlc3Rvbj8KPiA+ID4KPiA+ID4gQXQgbGVhc3QgYSBxdWljayBsb29rIGluIHRoZSAtYXRpIHNv dXJjZXMgZGlkbid0IGV2ZW4gc2hvdyBhIHVzZXIKPiA+ID4gZm9yIHRoaXMsIGl0J3Mgc3RpbGwg dXNpbmcgdGhlIG9sZCBjdXJzb3IgaW9jdGwuIEFuZCB0aGVyZSdzIG5vCj4gPiA+IG90aGVyIGlu ZGljYXRpb24gaW4gdGhlIGNvbW1pdCBvZiBhIGJ1ZyBvciBhbnl0aGluZy4gQ2FuIHdlCj4gPiA+ IHBlcmhhcHMganVzdCByZXZlcnQgdGhpcz8gIAo+ID4gCj4gPiBXZSB1c2UgdGhpcyBpcyB4Zjg2 LXZpZGVvLWF0aS4gIFNlZToKPiA+IGh0dHA6Ly9jZ2l0LmZyZWVkZXNrdG9wLm9yZy94b3JnL2Ry aXZlci94Zjg2LXZpZGVvLWF0aS9jb21taXQvP2lkPWM5ZjhmNjQyZmQ0OTU5Mzc0MDA2MThhNGZj MjVlY2FlM2Y4ODg4ZmMKPiA+IE91ciBodyBjdXJzb3IgaGFzIGEgaG90c3BvdCByZWdpc3RlciB0 aGF0IG5lZWRzIHRvIGJlIHByb2dyYW1tZWQgZm9yCj4gPiBwcm9wZXIgb3BlcmF0aW9uLiAgSSBk b24ndCByZW1lbWJlciB0aGUgZGV0YWlscyBvZiB0aGUgc3BlY2lmaWMgYnVnLgo+ID4gTWljaGVs IGNhbiBwcm92aWRlIG1vcmUgaW5mby4gIAo+IAo+IFllYWggSSB3YXMgYmxpbmQgYW5kIGRpZG4n dCBzcG90IHRoaXMuIEJ1dCBJIGNhbid0IGZpbmQgeW91ciBob3RzcG90Cj4gY3Vyc29yIHJlZyAt IGl0J3Mgb25seSB1c2VkIHRvIGFkanVzdCB0aGUgeC95IG9mZnNldHMgKHNpbWlsYXIgdG8KPiBK b2huJ3MgcGF0Y2gpLiBBbmQgYW1kZ3B1IGRvZXNuJ3QgZG8gdGhpcyBhdCBhbGwsIGl0J3Mgb25s eQo+IHJhZG9lbi5rby4gU3RpbGwgY29uZnVzZWQuCgpIYXZpbmcgaW52ZXN0aWdhdGVkIGEgYml0 IG1vcmUsIEkgdGhpbmsgeHNlcnZlciBoYW5kbGVzIHRoZSBob3RzcG90Cml0c2VsZiB3aXRob3V0 IHVzaW5nIHRoZSBrZXJuZWwgaG90c3BvdCBoYW5kbGluZyBhbmQgeG9yZy12aWRlby1xeGwKY2Fy ZWZ1bGx5IHJldmVyc2VzIHRoaXMgaW4gb3JkZXIgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YKZHJtTW9k ZVNldEN1cnNvcjIoKSwgc28gd2l0aCBYMTEgZHJpdmVycyB5b3UgZG9uJ3Qgbm90aWNlIHRoYXQg dGhlCmtlcm5lbCBoYW5kbGluZyBvZiB0aGlzIGlzIGJyb2tlbiBpbiBuZWFybHkgYWxsIGRyaXZl cnMuCgpIZXJlJ3MgYSBzbWFsbCB0ZXN0IHByb2dyYW0gdGhhdCBkZW1vbnN0cmF0ZXMgd2hldGhl ciBvciBub3QgY3Vyc29yCmhvdHNwb3RzIHdvcmsuICBUaGVyZSBzaG91bGQgYmUgYSBzaW5nbGUg Y29sb3JlZCBwaXhlbCBpbW1lZGlhdGVseSB0bwp0aGUgbGVmdCBvZiB0aGUgcG9pbnRlciBidXQg d2l0aCBhIGJyb2tlbiBkcml2ZXIgdGhlIHdoaXRlIHBpeGVsIHdpbGwgYmUKNjQgcGl4ZWxzIHRv IHRoZSBsZWZ0IG9mIHRoZSBwb2ludGVyLgoKQ29tcGlsZSB3aXRoOgoKICAgIGNjIC1vIHRlc3Qg LUkvdXNyL2luY2x1ZGUvbGliZHJtIHRlc3QuYyAtbGttcyAtbGRybQoKLS0gPjggLS0KI2luY2x1 ZGUgPGVyci5oPgojaW5jbHVkZSA8cG9sbC5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CgojaW5jbHVk ZSA8c3lzL21tYW4uaD4KCiNpbmNsdWRlIDxsaWJrbXMvbGlia21zLmg+CiNpbmNsdWRlIDx4Zjg2 ZHJtLmg+CiNpbmNsdWRlIDx4Zjg2ZHJtTW9kZS5oPgoKCnN0YXRpYyBpbnQgZHJtX2ZkOwpzdGF0 aWMgaW50IGNydGNfaWQgPSAtMTsKc3RhdGljIGRybU1vZGVNb2RlSW5mbyBtb2RlX2luZm87CnN0 YXRpYyBzdHJ1Y3Qga21zX2RyaXZlciAqa21zOwoKc3RhdGljIHN0cnVjdCB7CglpbnQgaWQ7Cglz aXplX3Qgc2l6ZTsKCXVuc2lnbmVkIGNoYXIgKmRhdGE7Cn0gZnJhbWVidWZmZXI7CgpzdGF0aWMg c3RydWN0IHsKCWludCB4LCB5OwoJc3RydWN0IGttc19ibyAqYnVmZmVyOwp9IGN1cnNvcjsKCiNk ZWZpbmUgQ1VSU09SX1dJRFRICTIxCiNkZWZpbmUgQ1VSU09SX0hFSUdIVAkyMQojZGVmaW5lIENV UlNPUl9IT1RfWAkyMQojZGVmaW5lIENVUlNPUl9IT1RfWQkwCnVuc2lnbmVkIGNoYXIgY3Vyc29y X2RhdGFbXSA9CiAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFww XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFww XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgogICJcMFww XDBcMFwwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBc MFwwXDBcMFwwXDAiCiAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBc MFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBc MFwwXDBcMFwwXDBcMFwzNzdcMzc3XDM3N1wzNzdcMzc3XDBcMFwwXDM3N1wwXDBcMFwwIgogICJc MFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFww XDBcMFwwXDBcMFwwXDAiCiAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFww XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDM3N1wzNzdcMzc3IgogICJcMzc3XDM3N1wzNzdcMzc3 XDM3N1wzNzdcMFwwXDBcMzc3XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAi CiAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBc MFwwXDBcMFwwXDBcMFwwXDBcMCIKICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDM3N1wzNzdc Mzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IgogICJcMzc3XDBcMFwwXDM3 N1wwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFww XDAiCiAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFww XDBcMFwwXDBcMFwwXDBcMFwwXDM3NyIKICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wz NzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wwXDBcMFwzNzciCiAgIlwwXDBcMFww XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBc MFwwXDBcMCIKICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBc MFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciCiAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3 N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDBcMFwwXDM3N1wwXDBcMCIKICAiXDBc MFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFww XDBcMFwwXDBcMFwwIgogICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwzNzdcMzc3 XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciCiAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3 XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wwXDBcMFwzNzdcMCIKICAi XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBc MFwwXDBcMFwwXDBcMFwwIgogICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDM3N1wzNzdc Mzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciCiAgIlwzNzdcMzc3XDM3N1wzNzdc Mzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIK ICAiXDBcMFwwXDM3N1wwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFww XDBcMFwwXDBcMFwwXDBcMFwwIgogICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwz NzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciCiAgIlwzNzdcMzc3XDM3N1wz NzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3 NyIKICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMFwwXDBcMzc3XDBcMFwwXDBcMFwwXDBcMFwwXDBc MFwwXDBcMFwwXDBcMFwwXDBcMFwwIgogICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBc MFwwXDBcMFwwXDBcMFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciCiAgIlwzNzdcMzc3XDM3 N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3 XDM3NyIKICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3 XDBcMFwwXDM3N1wwXDBcMFwwXDBcMFwwIgogICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFww XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDM3N1wwXDAiCiAgIlwwXDM3N1ww XDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdc Mzc3XDM3NyIKICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdc Mzc3XDM3N1wzNzdcMzc3XDBcMFwwXDM3N1wwIgogICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBc MFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCiAgIlwwXDBc MFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wz NzdcMzc3XDM3NyIKICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wz NzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wwXDBcMFwzNzciCiAgIlwwXDBcMFwwXDBcMFwwXDBcMFww XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKICAi XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMzc3XDM3N1wzNzdcMzc3XDM3 N1wzNzdcMzc3XDM3N1wzNzciCiAgIlwwXDBcMFwzNzdcMFwwXDBcMzc3XDM3N1wzNzdcMzc3XDM3 N1wzNzdcMzc3XDM3N1wzNzdcMFwwXDBcMzc3XDBcMFwwXDBcMCIKICAiXDBcMFwwXDBcMFwwXDBc MFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFww IgogICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3 XDM3N1wwXDBcMFwzNzdcMFwwXDAiCiAgIlwwXDBcMFwwXDBcMFwwXDBcMzc3XDM3N1wzNzdcMzc3 XDM3N1wwXDBcMFwzNzdcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKICAiXDBcMFwwXDBcMFww XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBc MFwwIgogICJcMFwwXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDBcMFwwXDM3 N1wwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCiAgIlwwXDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBc MFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKICAiXDBcMFwwXDBc MFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMzc3XDM3N1wzNzdcMzc3XDM3N1wz NzdcMzc3IgogICJcMzc3XDM3N1wwXDBcMFwzNzdcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFww XDBcMFwwXDBcMFwwXDBcMFwwXDM3N1wwXDAiCiAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFww XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKICAiXDBcMFww XDBcMFwwXDBcMFwwXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDBcMFwwXDM3 N1wwXDBcMFwwIgogICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBc MFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCiAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBc MFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwzNzdcMzc3XDM3N1wzNzdcMzc3IgogICJc Mzc3XDM3N1wzNzdcMzc3XDBcMFwwXDM3N1wwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFww XDBcMFwwXDBcMFwwXDAiCiAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFww XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKICAiXDBcMFwwXDBcMFwwXDBcMFww XDBcMFwwXDM3N1wwXDBcMFwzNzdcMzc3XDM3N1wzNzdcMzc3XDBcMFwwXDM3N1wwXDBcMFwwIgog ICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBc MFwwXDBcMFwwXDBcMFwwXDAiCiAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBc MFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKICAiXDBcMFwwXDM3N1wwXDBc MFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFww IgogICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFww XDBcMFwwXDBcMFwwXDBcMFwwXDAiCiAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFww XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKICAiXDBcMFwwXDBcMFww XDBcMFwwXDBcMFwwXDAiOwoKCnN0YXRpYyB2b2lkIGRyYXdfY3Vyc29yKHZvaWQpCnsKCXZvaWQg KnJlc3VsdDsKCXVuc2lnbmVkIGNoYXIgKnB0cjsKCWludCB4LCB5OwoJaWYgKGttc19ib19tYXAo Y3Vyc29yLmJ1ZmZlciwgJnJlc3VsdCkpCgkJZXJyKDEsICJrbXNfYm9fbWFwIik7CgoJcHRyID0g cmVzdWx0OwoJbWVtc2V0KHB0ciwgMCwgNjQgKiA2NCAqIDQpOwoKCWZvciAoeSA9IDA7IHkgPCBD VVJTT1JfSEVJR0hUOyB5KyspCgkJbWVtY3B5KHB0ciArIDY0ICogNCAqIHksIGN1cnNvcl9kYXRh ICsgNCAqIENVUlNPUl9XSURUSCAqIHksIENVUlNPUl9XSURUSCAqIDQpOwoKCWttc19ib191bm1h cChjdXJzb3IuYnVmZmVyKTsKfQoKc3RhdGljIHZvaWQgc2V0dXBfY3Vyc29yKHZvaWQpCnsKCWNv bnN0IHVuc2lnbmVkIGludCBhdHRyW10gPSB7CgkJS01TX0JPX1RZUEUsIEtNU19CT19UWVBFX0NV UlNPUl82NFg2NF9BOFI4RzhCOCwKCQlLTVNfV0lEVEgsIDY0LAoJCUtNU19IRUlHSFQsIDY0LAoJ CUtNU19URVJNSU5BVEVfUFJPUF9MSVNUCgl9OwoJdW5zaWduZWQgaW50IGhhbmRsZTsKCWlmIChr bXNfYm9fY3JlYXRlKGttcywgYXR0ciwgJmN1cnNvci5idWZmZXIpKQoJCWVycigxLCAia21zX2Jv X2NyZWF0ZSIpOwoKCWRyYXdfY3Vyc29yKCk7CgoJaWYgKGttc19ib19nZXRfcHJvcChjdXJzb3Iu YnVmZmVyLCBLTVNfSEFORExFLCAmaGFuZGxlKSkKCQllcnIoMSwgImttc19ib19nZXRfcHJvcCIp OwoKCWlmIChkcm1Nb2RlU2V0Q3Vyc29yMihkcm1fZmQsIGNydGNfaWQsIGhhbmRsZSwgNjQsIDY0 LCBDVVJTT1JfSE9UX1gsIENVUlNPUl9IT1RfWSkpCgkJZXJyKDEsICJkcm1Nb2RlU2V0Q3Vyc29y MiIpOwoKCWlmIChkcm1Nb2RlTW92ZUN1cnNvcihkcm1fZmQsIGNydGNfaWQsIGN1cnNvci54LCBj dXJzb3IueSkpCgkJZXJyKDEsICJkcm1Nb2RlTW92ZUN1cnNvciIpOwp9CgpzdGF0aWMgdm9pZCBj cmVhdGVfZnJhbWVidWZmZXIodm9pZCkKewoJc3RydWN0IGRybV9tb2RlX2NyZWF0ZV9kdW1iIGNy ZXEgPSB7CgkJLndpZHRoID0gbW9kZV9pbmZvLmhkaXNwbGF5LAoJCS5oZWlnaHQgPSBtb2RlX2lu Zm8udmRpc3BsYXksCgkJLmJwcCA9IDMyLAoJCS5mbGFncyA9IDAsCgl9OwoJc3RydWN0IGRybV9t b2RlX21hcF9kdW1iIG1yZXEgPSB7IDAgfTsKCWlmIChkcm1Jb2N0bChkcm1fZmQsIERSTV9JT0NU TF9NT0RFX0NSRUFURV9EVU1CLCAmY3JlcSkpCgkJZXJyKDEsICJEUk1fSU9DVExfTU9ERV9DUkVB VEVfRFVNQiIpOwoKCWlmIChkcm1Nb2RlQWRkRkIoZHJtX2ZkLCBjcmVxLndpZHRoLCBjcmVxLmhl aWdodCwgMjQsIDMyLCBjcmVxLnBpdGNoLCBjcmVxLmhhbmRsZSwgJmZyYW1lYnVmZmVyLmlkKSkK CQllcnIoMSwgImRybU1vZGVBZGRGQiIpOwoKCW1yZXEuaGFuZGxlID0gY3JlcS5oYW5kbGU7Cglp ZiAoZHJtSW9jdGwoZHJtX2ZkLCBEUk1fSU9DVExfTU9ERV9NQVBfRFVNQiwgJm1yZXEpKQoJCWVy cigxLCAiRFJNX0lPQ1RMX01PREVfTUFQX0RVTUIiKTsKCglmcmFtZWJ1ZmZlci5kYXRhID0gbW1h cCgwLCBjcmVxLnNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGRybV9m ZCwgbXJlcS5vZmZzZXQpOwoJaWYgKGZyYW1lYnVmZmVyLmRhdGEgPT0gTUFQX0ZBSUxFRCkKCQll cnIoMSwgIm1tYXAiKTsKCglmcmFtZWJ1ZmZlci5zaXplID0gY3JlcS5zaXplOwoJbWVtc2V0KGZy YW1lYnVmZmVyLmRhdGEsIDAsIGZyYW1lYnVmZmVyLnNpemUpOwoKCS8qIFBhaW50IGN1cnNvciBs b2NhdGlvbiB3aXRoIGEgc2luZ2xlIGNvbG9yZWQgcGl4ZWwuICovCglmcmFtZWJ1ZmZlci5kYXRh WzEgKyBjdXJzb3IueCAqIDQgKyBjdXJzb3IueSAqIGNyZXEucGl0Y2hdID0gJ1x4ZmYnOwoJZnJh bWVidWZmZXIuZGF0YVsyICsgY3Vyc29yLnggKiA0ICsgY3Vyc29yLnkgKiBjcmVxLnBpdGNoXSA9 ICdceGZmJzsKfQoKc3RhdGljIGludCBzZXR1cF9jb25uZWN0b3IoZHJtTW9kZUNvbm5lY3RvciAq Y29ubiwgZHJtTW9kZVJlcyAqcmVzKQp7Cglkcm1Nb2RlTW9kZUluZm8gKm1vZGUgPSBOVUxMOwoJ aW50IGk7CgoJaWYgKGNvbm4tPmNvbm5lY3Rpb24gIT0gRFJNX01PREVfQ09OTkVDVEVEKQoJCXJl dHVybiAtMTsKCglmb3IgKGludCBqID0gMDsgaiA8IGNvbm4tPmNvdW50X21vZGVzOyBqKyspIHsK CQlpZiAoIW1vZGUgfHwgKGNvbm4tPm1vZGVzW2pdLnR5cGUgJiBEUk1fTU9ERV9UWVBFX1BSRUZF UlJFRCkpIHsKCQkJbW9kZSA9ICZjb25uLT5tb2Rlc1tqXTsKCQkJaWYgKGNvbm4tPm1vZGVzW2pd LnR5cGUgJiBEUk1fTU9ERV9UWVBFX1BSRUZFUlJFRCkKCQkJCWJyZWFrOwoJCX0KCX0KCglpZiAo IW1vZGUpCgkJcmV0dXJuIC0xOwoKCWZvciAoaSA9IDA7IGkgPCBjb25uLT5jb3VudF9lbmNvZGVy czsgaSsrKSB7CgkJaW50IGo7CgkJZHJtTW9kZUVuY29kZXIgKmVuYyA9IGRybU1vZGVHZXRFbmNv ZGVyKGRybV9mZCwgY29ubi0+ZW5jb2RlcnNbal0pOwoJCWlmICghZW5jKQoJCQljb250aW51ZTsK CgkJZm9yIChqID0gMDsgaiA8IHJlcy0+Y291bnRfY3J0Y3M7IGorKykgewoJCQlpZiAoZW5jLT5w b3NzaWJsZV9jcnRjcyAmICgxdSA8PCBqKSkgewoJCQkJY3J0Y19pZCA9IHJlcy0+Y3J0Y3Nbal07 CgkJCQlicmVhazsKCQkJfQoJCX0KCgkJZHJtTW9kZUZyZWVFbmNvZGVyKGVuYyk7CgkJaWYgKGNy dGNfaWQgPj0gMCkKCQkJYnJlYWs7Cgl9CgoJbWVtY3B5KCZtb2RlX2luZm8sIG1vZGUsIHNpemVv Zihtb2RlX2luZm8pKTsKCWN1cnNvci54ID0gbW9kZS0+aGRpc3BsYXkgLyAyOwoJY3Vyc29yLnkg PSBtb2RlLT52ZGlzcGxheSAvIDI7CgljcmVhdGVfZnJhbWVidWZmZXIoKTsKCglpZiAoZHJtTW9k ZVNldENydGMoZHJtX2ZkLCBjcnRjX2lkLCBmcmFtZWJ1ZmZlci5pZCwgMCwgMCwgJmNvbm4tPmNv bm5lY3Rvcl9pZCwgMSwgbW9kZSkpCgkJZXJyKDEsICJkcm1Nb2RlU2V0Q3J0YyIpOwoKCXJldHVy biAwOwp9CgpzdGF0aWMgdm9pZCBzZXR1cF9zY3JlZW4oZHJtTW9kZVJlcyAqcmVzKQp7CglpbnQg aTsKCglmb3IgKGkgPSAwOyBpIDwgcmVzLT5jb3VudF9jb25uZWN0b3JzOyBpKyspIHsKCQlpbnQg cmVzdWx0OwoJCWRybU1vZGVDb25uZWN0b3IgKmNvbm4gPSBkcm1Nb2RlR2V0Q29ubmVjdG9yKGRy bV9mZCwgcmVzLT5jb25uZWN0b3JzW2ldKTsKCQlpZiAoIWNvbm4pCgkJCWNvbnRpbnVlOwoJCXJl c3VsdCA9IHNldHVwX2Nvbm5lY3Rvcihjb25uLCByZXMpOwoJCWRybU1vZGVGcmVlQ29ubmVjdG9y KGNvbm4pOwoJCWlmICghcmVzdWx0KQoJCQlicmVhazsKCX0KCglpZiAoY3J0Y19pZCA8IDApCgkJ ZXJyeCgxLCAibm8gc2NyZWVuIGZvdW5kIik7Cn0KCnN0YXRpYyB2b2lkIHNldHVwX2RybShjb25z dCBjaGFyICptb2R1bGUpCnsKCWRybU1vZGVSZXMgKnJlczsKCglkcm1fZmQgPSBkcm1PcGVuKG1v ZHVsZSwgTlVMTCk7CglpZiAoZHJtX2ZkIDwgMCkKCQllcnIoMSwgImRybU9wZW4iKTsKCglpZiAo a21zX2NyZWF0ZShkcm1fZmQsICZrbXMpIDwgMCkKCQllcnIoMSwgImttc19jcmVhdGUiKTsKCgly ZXMgPSBkcm1Nb2RlR2V0UmVzb3VyY2VzKGRybV9mZCk7CglpZiAoIXJlcykKCQllcnIoMSwgImRy bU1vZGVHZXRSZXNvdXJjZXMiKTsKCglzZXR1cF9zY3JlZW4ocmVzKTsKfQoKc3RhdGljIHZvaWQg d2FpdF9mb3JfaW5wdXQodm9pZCkKewoJc3RydWN0IHBvbGxmZCBwZmQgPSB7CgkJLmZkID0gMCwK CQkuZXZlbnRzID0gUE9MTElOLAoJfTsKCglwb2xsKCZwZmQsIDEsIC0xKTsKfQoKaW50IG1haW4o aW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKewoJY29uc3QgY2hhciAqbW9kdWxlID0gInF4bCI7Cglp ZiAoYXJnYyA+IDEpCgkJbW9kdWxlID0gYXJndlsxXTsKCglzZXR1cF9kcm0obW9kdWxlKTsKCXNl dHVwX2N1cnNvcigpOwoKCXdhaXRfZm9yX2lucHV0KCk7CgoJcmV0dXJuIDA7Cn0KX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcg bGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVz a3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK