From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by gabe.freedesktop.org (Postfix) with ESMTPS id 258036EDBB for ; Wed, 6 Nov 2019 16:02:00 +0000 (UTC) Date: Wed, 6 Nov 2019 18:00:16 +0200 From: Imre Deak Message-ID: <20191106160016.GA2077@ideak-desk.fi.intel.com> References: <20191105193454.4611-1-imre.deak@intel.com> <20191105214220.6394-1-imre.deak@intel.com> <157303870005.24928.3132671099761392777@skylake-alporthouse-com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <157303870005.24928.3132671099761392777@skylake-alporthouse-com> Subject: Re: [igt-dev] [PATCH v3 1/3] lib/rendercopy: Add AUX page table support List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: imre.deak@intel.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Chris Wilson Cc: igt-dev@lists.freedesktop.org, Brian Welty List-ID: T24gV2VkLCBOb3YgMDYsIDIwMTkgYXQgMTE6MTE6NDBBTSArMDAwMCwgQ2hyaXMgV2lsc29uIHdy b3RlOgo+IFF1b3RpbmcgSW1yZSBEZWFrICgyMDE5LTExLTA1IDIxOjQyOjIwKQo+ID4gT24gR0VO MTIrIHRoZSBBVVggQ0NTIHN1cmZhY2VzIHJlcXVpcmVkIGJ5IHRoZSByZW5kZXIgYW5kIG1lZGlh Cj4gPiBjb21wcmVzc2lvbiBtdXN0IGJlIHNwZWNpZmllZCBieSBhIDMgbGV2ZWwgcGFnZSB0YWJs ZSBkaXJlY3RvcnksIHdoaWNoCj4gPiB0cmFuc2xhdGVzIHRoZSBtYWluIHN1cmZhY2UgZ3JhcGhp Y3MgYWRkcmVzcyB0byB0aGUgQVVYIENDUyBzdXJmYWNlCj4gPiBncmFwaGljcyBhZGRyZXNzLiBG b3IgdGhpcyBwdXJwb3NlIGFkZCBzdXBwb3J0IGZvciBjcmVhdGluZyBhIEdFTSBidWZmZXIKPiA+ IHRvIHRyYW5zbGF0ZSB0aGUgbGluZWFyIHN1cmZhY2UgYWRkcmVzcyByYW5nZSB0byB0aGUgbGlu ZWFyIEFVWCBzdXJmYWNlCj4gPiBhZGRyZXNzIHJhbmdlLgo+ID4gCj4gPiBUaGUgYnVmZmVycyBj b250YWluaW5nIHRoZSBtYWluIHN1cmZhY2UgbXVzdCBiZSBwaW5uZWQgZG93biwgc2luY2UgdGhl Cj4gPiBkaXJlY3RvcnkgdGFibGUgZW50cnkgaW5kaWNlcyBkZXBlbmQgb24gdGhlIHN1cmZhY2Ug YWRkcmVzcywgYW5kIHRoZXkKPiA+IG11c3QgYmUgNjRrQiBhbGlnbmVkLiBUaGUgcGFnZSB0YWJs ZSBjYW4gYmUgcmVsb2NhdGVkIE9UT0gsIHNvIGFsbG93Cj4gPiB0aGF0IGFuZCBlbWl0IHRoZSBy ZXF1aXJlZCByZWxvY2F0aW9uIGVudHJpZXMuCj4gPiAKPiA+IHYyOgo+ID4gLSBNYWtlIGxldmVs IHZhcmlhYmxlcyB0byBiZSAwIGJhc2VkIChsMS4ubDMgLT4gbGV2ZWw9MC4uMikuCj4gPiAtIEFk ZCBtaXNzaW5nIGRybV9pbnRlbF9ib19zZXRfc29mdHBpbl9vZmZzZXQoKSBzdHViIHRvIGZpeCBi dWlsZCBvbgo+ID4gICBub24tSW50ZWwgYXJjaHMuCj4gPiAtIEZpeCBtaXNzaW5nIG9mZnNldHMg aW4gcmVsb2MgZW50cmllcyBvZiBhbHJlYWR5IGJvdW5kIG9iamVjdHMuIChDaHJpcykKPiA+IC0g UmFuZG9taXplIHBpbiBvZmZzZXRzLCB0byB0cnkgdG8gYXZvaWQgZXZpY3Rpb24uIChDaHJpcykK PiA+IC0gUmVtb3ZlIHJlZHVuZGFudCBNSV9OT09QUyBhcm91bmQgTUlfTE9BRF9SRUdJU1RFUl9N RU0KPiA+IC0gU3RvcCB1c2luZyBleHBsaWNpdCByZWxvYyBjYWNoZSBkb21haW5zLCBhcyB0aGVz ZSBkb24ndCBtYWtlIHNlbnNlIG9uCj4gPiAgIEdFTjEyIGFueXdheS4gKENocmlzKQo+ID4gLSBG aXggbWlzc2luZyBhdXRvdG9vbHMgc3VwcG9ydC4gKENocmlzKQo+ID4gLSBzL2lndF9hdXhfcGd0 YWJsZS9pbnRlbF9hdXhfcGd0YWJsZS8sIHNpbmNlIHRoZSBmdW5jdGlvbmFsaXR5IGlzIEludGVs Cj4gPiAgIHNwZWNpZmljLiAoQ2hyaXMpCj4gPiB2MzoKPiA+IC0gTWFrZSBzdXJlIGFsbCBvYmpl Y3RzIHdpdGggYW4gQVVYIHN1cmZhY2UgYXJlIHBpbm5lZC4KPiA+IAo+ID4gQ2M6IE1pa2EgS2Fo b2xhIDxtaWthLmthaG9sYUBpbnRlbC5jb20+Cj4gPiBDYzogQnJpYW4gV2VsdHkgPGJyaWFuLndl bHR5QGludGVsLmNvbT4KPiA+IENjOiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5j by51az4KPiA+IENjOiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwu Y29tPgo+ID4gU2lnbmVkLW9mZi1ieTogSW1yZSBEZWFrIDxpbXJlLmRlYWtAaW50ZWwuY29tPgo+ ID4gLS0tCj4gPiAgbGliL01ha2VmaWxlLnNvdXJjZXMgICAgICAgICB8ICAgMSArCj4gPiAgbGli L2ludGVsX2F1eF9wZ3RhYmxlLmMgICAgICB8IDM3OSArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKwo+ID4gIGxpYi9pbnRlbF9hdXhfcGd0YWJsZS5oICAgICAgfCAgMTIgKysKPiA+ ICBsaWIvaW50ZWxfcmVnLmggICAgICAgICAgICAgIHwgICAyICsKPiA+ICBsaWIvbWVzb24uYnVp bGQgICAgICAgICAgICAgIHwgICAxICsKPiA+ICBsaWIvcmVuZGVyY29weV9nZW45LmMgICAgICAg IHwgMjM0ICsrKysrKysrKysrKysrKysrKysrLQo+ID4gIGxpYi9zdHVicy9kcm0vaW50ZWxfYnVm bWdyLmMgfCAgIDYgKwo+ID4gIDcgZmlsZXMgY2hhbmdlZCwgNjI5IGluc2VydGlvbnMoKyksIDYg ZGVsZXRpb25zKC0pCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9pbnRlbF9hdXhfcGd0YWJs ZS5jCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9pbnRlbF9hdXhfcGd0YWJsZS5oCj4gPiAK PiA+IGRpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUuc291cmNlcyBiL2xpYi9NYWtlZmlsZS5zb3Vy Y2VzCj4gPiBpbmRleCBjZjA5NGFiOC4uMWQwZjQ1ZjcgMTAwNjQ0Cj4gPiAtLS0gYS9saWIvTWFr ZWZpbGUuc291cmNlcwo+ID4gKysrIGIvbGliL01ha2VmaWxlLnNvdXJjZXMKPiA+IEBAIC0xMDAs NiArMTAwLDcgQEAgbGliX3NvdXJjZV9saXN0ID0gICAgICAgICAgIFwKPiA+ICAgICAgICAgc3Vy ZmFjZWZvcm1hdC5oICAgICAgICAgXAo+ID4gICAgICAgICBzd19zeW5jLmMgICAgICAgICAgICAg ICBcCj4gPiAgICAgICAgIHN3X3N5bmMuaCAgICAgICAgICAgICAgIFwKPiA+ICsgICAgICAgaW50 ZWxfYXV4X3BndGFibGUuYyAgICAgXAo+ID4gICAgICAgICBpbnRlbF9yZWdfbWFwLmMgICAgICAg ICBcCj4gPiAgICAgICAgIGludGVsX2lvc2YuYyAgICAgICAgICAgIFwKPiA+ICAgICAgICAgaWd0 X2ttcy5jICAgICAgICAgICAgICAgXAo+ID4gZGlmZiAtLWdpdCBhL2xpYi9pbnRlbF9hdXhfcGd0 YWJsZS5jIGIvbGliL2ludGVsX2F1eF9wZ3RhYmxlLmMKPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 Cj4gPiBpbmRleCAwMDAwMDAwMC4uNzk0MDI4MTMKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBi L2xpYi9pbnRlbF9hdXhfcGd0YWJsZS5jCj4gPiBAQCAtMCwwICsxLDM3OSBAQAo+ID4gKyNpbmNs dWRlIDxzdGRpbnQuaD4KPiA+ICsjaW5jbHVkZSA8c3RkYm9vbC5oPgo+ID4gKwo+ID4gKyNpbmNs dWRlICJkcm10ZXN0LmgiCj4gPiArI2luY2x1ZGUgImludGVsX2F1eF9wZ3RhYmxlLmgiCj4gPiAr I2luY2x1ZGUgImludGVsX2J1Zm1nci5oIgo+ID4gKyNpbmNsdWRlICJpbnRlbF9iYXRjaGJ1ZmZl ci5oIgo+ID4gKyNpbmNsdWRlICJpb2N0bF93cmFwcGVycy5oIgo+ID4gKwo+ID4gKyNpbmNsdWRl ICJpOTE1L2dlbV9tbWFuLmgiCj4gPiArCj4gPiArI2RlZmluZSBCSVRTX1BFUl9MT05HICAgICAg ICAgIChzaXplb2YobG9uZykgKiA4KQo+ID4gKyNkZWZpbmUgQklUTUFTSyhlLCBzKSAgICAgICAg ICAoKH4wVUwgPDwgKHMpKSAmIFwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICh+MFVMID4+IChCSVRTX1BFUl9MT05HIC0gMSAtIChlKSkpKQo+ID4gKwo+ID4gKyNkZWZpbmUg QUxJR05fRE9XTih4LCBhKSAgICAgICBBTElHTigoeCkgLSAoKGEpIC0gMSksIChhKSkKPiA+ICsK PiA+ICsvKiBUaGUgdW5pdCBzaXplIHRvIHdoaWNoIHRoZSBBVVggQ0NTIHN1cmZhY2UgaXMgYWxp Z25lZCB0by4gKi8KPiA+ICsjZGVmaW5lIEFVWF9DQ1NfVU5JVF9TSVpFICAgICAgNjQKPiA+ICsv Kgo+ID4gKyAqIFRoZSBibG9jayBzaXplIG9uIHRoZSBBVVggQ0NTIHN1cmZhY2Ugd2hpY2ggaXMg bWFwcGVkIGJ5IG9uZSBMMSBBVVgKPiA+ICsgKiBwYWdldGFibGUgZW50cnkuCj4gPiArICovCj4g PiArI2RlZmluZSBBVVhfQ0NTX0JMT0NLX1NJWkUgICAgICg0ICogQVVYX0NDU19VTklUX1NJWkUp Cj4gPiArLyoKPiA+ICsgKiBUaGUgYmxvY2sgc2l6ZSBvbiB0aGUgbWFpbiBzdXJmYWNlIG1hcHBl ZCBieSBvbmUgQVVYIENDUyBibG9jazoKPiA+ICsgKiAgIDI1NiBieXRlcyBwZXIgQ0NTIGJsb2Nr ICoKPiA+ICsgKiAgIDggICBiaXRzIHBlciBieXRlIC8KPiA+ICsgKiAgIDIgICBiaXRzIHBlciBt YWluIHN1cmZhY2UgQ0wgKgo+ID4gKyAqICAgNjQgIGJ5dGVzIHBlciBtYWluIHN1cmZhY2UgQ0wK PiA+ICsgKi8KPiA+ICsjZGVmaW5lIE1BSU5fU1VSRkFDRV9CTE9DS19TSVpFICAgICAgICAoQVVY X0NDU19CTE9DS19TSVpFICogOCAvIDIgKiA2NCkKPiA+ICsKPiA+ICsjZGVmaW5lIEdGWF9BRERS RVNTX0JJVFMgICAgICAgNDgKPiA+ICsKPiA+ICsjZGVmaW5lIG1heChhLCBiKSAgICAgICAgICAg ICAgKChhKSA+IChiKSA/IChhKSA6IChiKSkKPiA+ICsKPiA+ICtzdHJ1Y3QgcGd0YWJsZV9sZXZl bF9kZXNjIHsKPiA+ICsgICAgICAgaW50IGlkeF9zaGlmdDsKPiA+ICsgICAgICAgaW50IGlkeF9i aXRzOwo+ID4gKyAgICAgICBpbnQgZW50cnlfcHRyX3NoaWZ0Owo+ID4gKyAgICAgICBpbnQgdGFi bGVfc2l6ZTsKPiA+ICt9Owo+ID4gKwo+ID4gK3N0cnVjdCBwZ3RhYmxlX2xldmVsX2luZm8gewo+ ID4gKyAgICAgICBjb25zdCBzdHJ1Y3QgcGd0YWJsZV9sZXZlbF9kZXNjICpkZXNjOwo+ID4gKyAg ICAgICBpbnQgdGFibGVfY291bnQ7Cj4gPiArICAgICAgIGludCBhbGxvY19iYXNlOwo+ID4gKyAg ICAgICBpbnQgYWxsb2NfcHRyOwo+ID4gK307Cj4gPiArCj4gPiArc3RydWN0IHBndGFibGUgewo+ ID4gKyAgICAgICBpbnQgbGV2ZWxzOwo+ID4gKyAgICAgICBzdHJ1Y3QgcGd0YWJsZV9sZXZlbF9p bmZvICpsZXZlbF9pbmZvOwo+ID4gKyAgICAgICBpbnQgc2l6ZTsKPiA+ICsgICAgICAgaW50IG1h eF9hbGlnbjsKPiA+ICsgICAgICAgZHJtX2ludGVsX2JvICpibzsKPiA+ICt9Owo+ID4gKwo+ID4g K3N0YXRpYyBpbnQKPiA+ICtwZ3RfdGFibGVfY291bnQoaW50IGFkZHJlc3NfYml0cywgY29uc3Qg c3RydWN0IGlndF9idWYgKipidWZzLCBpbnQgYnVmX2NvdW50KQo+ID4gK3sKPiA+ICsgICAgICAg dWludDY0X3QgZW5kOwo+ID4gKyAgICAgICBpbnQgY291bnQ7Cj4gPiArICAgICAgIGludCBpOwo+ ID4gKwo+ID4gKyAgICAgICBjb3VudCA9IDA7Cj4gPiArICAgICAgIGVuZCA9IDA7Cj4gPiArICAg ICAgIGZvciAoaSA9IDA7IGkgPCBidWZfY291bnQ7IGkrKykgewo+ID4gKyAgICAgICAgICAgICAg IGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpidWYgPSBidWZzW2ldOwo+ID4gKyAgICAgICAgICAgICAg IHVpbnQ2NF90IHN0YXJ0Owo+ID4gKwo+ID4gKyAgICAgICAgICAgICAgIC8qIFdlIHJlcXVpcmUg YnVmcyB0byBiZSBzb3J0ZWQuICovCj4gPiArICAgICAgICAgICAgICAgaWd0X2Fzc2VydChpID09 IDAgfHwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zi0+Ym8tPm9mZnNldDY0ID49 IGJ1ZnNbaSAtIDFdLT5iby0+b2Zmc2V0NjQgKwo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYnVmc1tpIC0gMV0tPmJvLT5zaXplKTsKPiA+ICsKPiA+ ICsgICAgICAgICAgICAgICBzdGFydCA9IEFMSUdOX0RPV04oYnVmLT5iby0+b2Zmc2V0NjQsIDFV TCA8PCBhZGRyZXNzX2JpdHMpOwo+ID4gKyAgICAgICAgICAgICAgIC8qIEF2b2lkIGRvdWJsZSBj b3VudGluZyBmb3Igb3ZlcmxhcHBpbmcgYWxpZ25lZCBidWZzLiAqLwo+ID4gKyAgICAgICAgICAg ICAgIHN0YXJ0ID0gbWF4KHN0YXJ0LCBlbmQpOwo+ID4gKwo+ID4gKyAgICAgICAgICAgICAgIGVu ZCA9IEFMSUdOKGJ1Zi0+Ym8tPm9mZnNldDY0ICsgYnVmLT5zaXplLCAxVUwgPDwgYWRkcmVzc19i aXRzKTsKPiA+ICsgICAgICAgICAgICAgICBpZ3RfYXNzZXJ0KGVuZCA+PSBzdGFydCk7Cj4gPiAr Cj4gPiArICAgICAgICAgICAgICAgY291bnQgKz0gKGVuZCAtIHN0YXJ0KSA+PiBhZGRyZXNzX2Jp dHM7Cj4gPiArICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgcmV0dXJuIGNvdW50Owo+ID4gK30K PiA+ICsKPiA+ICtzdGF0aWMgdm9pZAo+ID4gK3BndF9jYWxjX3NpemUoc3RydWN0IHBndGFibGUg KnBndCwgY29uc3Qgc3RydWN0IGlndF9idWYgKipidWZzLCBpbnQgYnVmX2NvdW50KQo+ID4gK3sK PiA+ICsgICAgICAgaW50IGxldmVsOwo+ID4gKwo+ID4gKyAgICAgICBwZ3QtPnNpemUgPSAwOwo+ ID4gKwo+ID4gKyAgICAgICBmb3IgKGxldmVsID0gcGd0LT5sZXZlbHMgLSAxOyBsZXZlbCA+PSAw OyBsZXZlbC0tKSB7Cj4gPiArICAgICAgICAgICAgICAgc3RydWN0IHBndGFibGVfbGV2ZWxfaW5m byAqbGkgPSAmcGd0LT5sZXZlbF9pbmZvW2xldmVsXTsKPiA+ICsKPiA+ICsgICAgICAgICAgICAg ICBsaS0+YWxsb2NfYmFzZSA9IEFMSUdOKHBndC0+c2l6ZSwgbGktPmRlc2MtPnRhYmxlX3NpemUp Owo+ID4gKyAgICAgICAgICAgICAgIGxpLT5hbGxvY19wdHIgPSBsaS0+YWxsb2NfYmFzZTsKPiA+ ICsKPiA+ICsgICAgICAgICAgICAgICBsaS0+dGFibGVfY291bnQgPSBwZ3RfdGFibGVfY291bnQo bGktPmRlc2MtPmlkeF9zaGlmdCArCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGxpLT5kZXNjLT5pZHhfYml0cywKPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmcywgYnVmX2NvdW50KTsKPiA+ ICsKPiA+ICsgICAgICAgICAgICAgICBwZ3QtPnNpemUgPSBsaS0+YWxsb2NfYmFzZSArCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGktPnRhYmxlX2NvdW50ICogbGktPmRlc2MtPnRh YmxlX3NpemU7Cj4gPiArICAgICAgIH0KPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHVpbnQ2NF90 IHBndF9hbGxvY190YWJsZShzdHJ1Y3QgcGd0YWJsZSAqcGd0LCBpbnQgbGV2ZWwpCj4gPiArewo+ ID4gKyAgICAgICBzdHJ1Y3QgcGd0YWJsZV9sZXZlbF9pbmZvICpsaSA9ICZwZ3QtPmxldmVsX2lu Zm9bbGV2ZWxdOwo+ID4gKyAgICAgICB1aW50NjRfdCB0YWJsZTsKPiA+ICsKPiA+ICsgICAgICAg dGFibGUgPSBsaS0+YWxsb2NfcHRyOwo+ID4gKyAgICAgICBsaS0+YWxsb2NfcHRyICs9IGxpLT5k ZXNjLT50YWJsZV9zaXplOwo+ID4gKwo+ID4gKyAgICAgICBpZ3RfYXNzZXJ0KGxpLT5hbGxvY19w dHIgPD0KPiA+ICsgICAgICAgICAgICAgICAgICBsaS0+YWxsb2NfYmFzZSArIGxpLT50YWJsZV9j b3VudCAqIGxpLT5kZXNjLT50YWJsZV9zaXplKTsKPiA+ICsKPiA+ICsgICAgICAgcmV0dXJuIHRh YmxlOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IHBndF9hZGRyZXNzX2luZGV4KHN0cnVj dCBwZ3RhYmxlICpwZ3QsIGludCBsZXZlbCwgdWludDY0X3QgYWRkcmVzcykKPiA+ICt7Cj4gPiAr ICAgICAgIGNvbnN0IHN0cnVjdCBwZ3RhYmxlX2xldmVsX2Rlc2MgKmxkID0gcGd0LT5sZXZlbF9p bmZvW2xldmVsXS5kZXNjOwo+ID4gKyAgICAgICB1aW50NjRfdCBtYXNrID0gQklUTUFTSyhsZC0+ aWR4X3NoaWZ0ICsgbGQtPmlkeF9iaXRzIC0gMSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbGQtPmlkeF9zaGlmdCk7Cj4gPiArCj4gPiArICAgICAgIHJldHVybiAoYWRkcmVz cyAmIG1hc2spID4+IGxkLT5pZHhfc2hpZnQ7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB1aW50 NjRfdCBwdHJfbWFzayhzdHJ1Y3QgcGd0YWJsZSAqcGd0LCBpbnQgbGV2ZWwpCj4gPiArewo+ID4g KyAgICAgICBjb25zdCBzdHJ1Y3QgcGd0YWJsZV9sZXZlbF9kZXNjICpsZCA9IHBndC0+bGV2ZWxf aW5mb1tsZXZlbF0uZGVzYzsKPiA+ICsKPiA+ICsgICAgICAgcmV0dXJuIEJJVE1BU0soR0ZYX0FE RFJFU1NfQklUUyAtIDEsIGxkLT5lbnRyeV9wdHJfc2hpZnQpOwo+ID4gK30KPiA+ICsKPiA+ICtz dGF0aWMgdWludDY0X3QgcGd0X2VudHJ5X3B0cihzdHJ1Y3QgcGd0YWJsZSAqcGd0LCBpbnQgbGV2 ZWwsIHVpbnQ2NF90IGVudHJ5KQo+ID4gK3sKPiA+ICsgICAgICAgdWludDY0X3QgcHRyID0gZW50 cnkgJiBwdHJfbWFzayhwZ3QsIGxldmVsKTsKPiA+ICsKPiA+ICsgICAgICAgaWYgKGxldmVsKQo+ ID4gKyAgICAgICAgICAgICAgIHB0ciAtPSBwZ3QtPmJvLT5vZmZzZXQ2NDsKPiA+ICsgICAgICAg aWd0X2Fzc2VydCghKHB0ciAmIH5wdHJfbWFzayhwZ3QsIGxldmVsKSkpOwo+ID4gKwo+ID4gKyAg ICAgICByZXR1cm4gcHRyOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdWludDY0X3QgcGd0X21r ZW50cnkoc3RydWN0IHBndGFibGUgKnBndCwgaW50IGxldmVsLCB1aW50NjRfdCBwdHIsCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgZmxhZ3MpCj4gPiArewo+ID4gKyAg ICAgICBpZiAobGV2ZWwpCj4gPiArICAgICAgICAgICAgICAgcHRyICs9IHBndC0+Ym8tPm9mZnNl dDY0Owo+ID4gKyAgICAgICBpZ3RfYXNzZXJ0KCEocHRyICYgfnB0cl9tYXNrKHBndCwgbGV2ZWwp KSk7Cj4gPiArCj4gPiArICAgICAgIHJldHVybiBwdHIgfCBmbGFnczsKPiA+ICt9Cj4gPiArCj4g PiArc3RhdGljIHVpbnQ2NF90Cj4gPiArcGd0X2dldF90YWJsZShzdHJ1Y3QgcGd0YWJsZSAqcGd0 LCB1aW50NjRfdCBwYXJlbnRfdGFibGUsCj4gPiArICAgICAgICAgICAgIGludCBsZXZlbCwgdWlu dDY0X3QgYWRkcmVzcywgdWludDY0X3QgZmxhZ3MpCj4gPiArewo+ID4gKyAgICAgICB1aW50NjRf dCAqdGFibGVfcHRyID0gcGd0LT5iby0+dmlydHVhbCArIHBhcmVudF90YWJsZTsKPiA+ICsgICAg ICAgaW50IGVudHJ5X2lkeCA9IHBndF9hZGRyZXNzX2luZGV4KHBndCwgbGV2ZWwsIGFkZHJlc3Mp Owo+ID4gKyAgICAgICB1aW50NjRfdCAqZW50cnlfcHRyOwo+ID4gKwo+ID4gKyAgICAgICBlbnRy eV9wdHIgPSAmdGFibGVfcHRyW2VudHJ5X2lkeF07Cj4gPiArICAgICAgIGlmICghKmVudHJ5X3B0 cikgewo+ID4gKyAgICAgICAgICAgICAgIHVpbnQ2NF90IGNoaWxkX3RhYmxlID0gcGd0X2FsbG9j X3RhYmxlKHBndCwgbGV2ZWwgLSAxKTsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgICAqZW50cnlf cHRyID0gcGd0X21rZW50cnkocGd0LCBsZXZlbCwgY2hpbGRfdGFibGUsIGZsYWdzKTsKPiAKPiBU aGUgdmFsdWUgaW4gdGhlIGJhdGNoIGlzIHRoZSBhYnNvbHV0ZSBhZGRyZXNzLCBnb29kLgo+IAo+ ID4gKwo+ID4gKyAgICAgICAgICAgICAgIGRybV9pbnRlbF9ib19lbWl0X3JlbG9jKHBndC0+Ym8s Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50X3RhYmxl ICsgZW50cnlfaWR4ICogc2l6ZW9mKHVpbnQ2NF90KSwKPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwZ3QtPmJvLCAqZW50cnlfcHRyLCAwLCAwKTsKPiAKPiBCdXQg eW91IHRoZW4gcGFzcyB0aGUgYWJzb2x1dGUgYWRkcmVzcyBhcyB0aGUgcmVsb2NhdGlvbiBkZWx0 YS4gTm90IHNvCj4gZ29vZC4KCkRvaCcsIGJvdGNoZWQgaXQgYWdhaW4uIFllcyBJIG1lYW50IHRv IHBhc3Mgb25seSB0aGUgZGVsdGEgaGVyZSAoYW5kIHRoZQpmbGFncyksIGJ1dCBzY3Jld2VkIGl0 IHVwIHdoZW4gZml4aW5nIHRoZSBwcmV2aW91cyBpc3N1ZSB5b3UgZm91bmQuCgpNeSBhdHRlbXB0 IHRvIHRlc3QgaWYgcmVsb2NzIHdvcmsgZmluZSwgaXMgcGlubmluZyB0aGUgcGd0LT5ibyB0byBh Cm5vbi16ZXJvIGFkZHJlc3M7IGJ1dCB3aXRoIHRoYXQgSSBvYnZpb3VzbHkgY2lyY3Vtd2VudCBy ZWxvY2F0aW9uCml0c2VsZjovIEkgc3VwcG9zZSBJIGNhbiB0ZXN0IGl0IHRoZW4gYnkgcGlubmlu ZyBhbm90aGVyIG9iamVjdCBpbiBwbGFjZQpvZiBwZ3QtPmJvIChpbiBjYXNlIGl0J3MgbmV3bHkg YWxsb2NhdGVkIHRoZW4gb2Zmc2V0IDApIGZvcmNpbmcgdGhlCnJlbG9jYXRpb24gZm9yIHBndC0+ Ym8uCgo+IAo+ID4gKyAgICAgICB9Cj4gPiArCj4gPiArICAgICAgIHJldHVybiBwZ3RfZW50cnlf cHRyKHBndCwgbGV2ZWwsICplbnRyeV9wdHIpOwo+IAo+IFlvdSBvbmx5IHVzZSBwZ3RfZW50cnlf cHRyLCBoZXJlIHNvIGp1c3Qga2VlcCB0aGUgYmF0Y2ggZW50cnkgc2VwYXJhdGUKPiBmcm9tIHRo ZSByZWxhdGl2ZSBvZmZzZXQuCj4gCj4gdWludDY0X3QgcHRlID0gcGd0X21rZW50cnkocGd0LCBs ZXZlbCwgY2hpbGRfdGFibGUsIGZsYWdzKTsKCk9rLCB3aWxsIGZpeCBpdCBhbG9uZyB0aGF0IGxp bmUuCgo+IAo+IEhtbSwgbm90ZSB0aGlzIGludGVyZmFjZSBpcyBsaW1pdGVkIHRvIHMzMi4KPiBp Z3RfYXNzZXJ0KHB0ZSA8IFMzMl9NQVgpOwoKT2ssIG1pc3NlZCB0aGF0LiBFeGNlcHQgZm9yIHRo ZSBMMSBQVEVzIC0gd2hpY2ggd291bGQgbmVlZCBhIDY0IGJpdApkZWx0YSAtIHRoZSAzMSBiaXQg ZGVsdGEgaXMgZW5vdWdoLiBJJ2xsIGFkZCB0aGlzIGFzc2VydCBoZXJlLgoKPiAKPiAqZW50cnlf cHRyID0gYm8tPm9mZnNldDY0ICsgcHRlOwo+IGRybV9pbnRlbF9ib19lbWl0X3JlbG9jKHBndC0+ Ym8sCj4gCXBhcmVudF90YWJsZSArIGVudHJ5X2lkeCAqIHNpemVvZih1aW50NjRfdCksCj4gCXBn dC0+Ym8sIG9mZnNldCwgMCwgMCk7Cj4gCj4gCj4gcmV0dXJuIG9mZnNldCAmIHB0cl9tYXNrKHBn dCwgbGV2ZWwpOwo+IAo+IFdoYXQncyB0aGUgY29oZXJlbmN5IG1vZGVsIGZvciB0aGUgcGd0LT5i bz8gVGhlcmUncyBhIGxvdCBvZiB3cml0ZXMgaGVyZQo+IGZyb20gdGhlIENQVSBob3cgYXJlIHlv dSBtYWtpbmcgc3VyZSB0aGV5IGFyZSB2aXNpYmxlIHRvIHRoZSBHUFU/CgpNeSB1bmRlcnN0YW5k aW5nOiBleGVjYnVmIHdpbGwgZG8gYSBjbGZsdXNoIGZvciB0aGUgYnVmIG9uIG5vbi1MTEMKcGxh dGZvcm1zLCB3aGlsZSBvbiBMTEMgcGxhdGZvcm1zIHRoYXQncyBub3QgbmVlZGVkOyBub3Qgc3Vy ZSBpZiB0aGVyZQp3aWxsIGJlIGFueSBub24tTExDIHBsYXRmb3JtcyB3aGVyZSB0aGUgQVVYIHBh Z2V0YWJsZSB3aWxsIGJlIG5lZWRlZC4KCk9uIHRvcCBvZiB0aGF0IHRoZSBBVVggR0FNIGhhcyBp dHMgb3duIGNhY2hlcyAtIGZvdW5kIHRoYXQgbm93IGluIGFuIEhTRApkb2MgLSB3aGljaCB3aWxs IGJlIGludmFsaWRhdGVkIHdoZW5ldmVyIEdBTSdzIHRvcCBsZXZlbCB0YWJsZSBiYXNlCnBvaW50 ZXIgcmVnaXN0ZXIgaXMgc2V0IGZyb20gdGhlIGNvbnRleHQgaW1hZ2UsIHdoaWNoIGhhcHBlbnMg d2hlbnZlcgpzd2l0Y2hpbmcgdG8gdGhlIGNvbnRleHQuCgo+IC1DaHJpcwpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdApp Z3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXY=