From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lyude Paul Subject: Re: [PATCH v2 3/5] drm/i915: Move SST DP link retraining into the ->post_hotplug() hook Date: Wed, 28 Feb 2018 14:41:06 -0500 Message-ID: <1519846866.26611.8.camel@redhat.com> References: <20180117192149.17760-1-ville.syrjala@linux.intel.com> <20180117192149.17760-3-ville.syrjala@linux.intel.com> <1517354219.4938.24.camel@redhat.com> <20180131132710.GK5453@intel.com> <20180228071731.GB2386@intel.com> <1519844854.26611.4.camel@redhat.com> <20180228192730.GA11481@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-qk0-f176.google.com (mail-qk0-f176.google.com [209.85.220.176]) by gabe.freedesktop.org (Postfix) with ESMTPS id 65D306E025 for ; Wed, 28 Feb 2018 19:41:08 +0000 (UTC) Received: by mail-qk0-f176.google.com with SMTP id b130so4504574qkg.9 for ; Wed, 28 Feb 2018 11:41:08 -0800 (PST) In-Reply-To: <20180228192730.GA11481@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Manasi Navare Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCAyMDE4LTAyLTI4IGF0IDExOjI3IC0wODAwLCBNYW5hc2kgTmF2YXJlIHdyb3RlOgo+ IE9uIFdlZCwgRmViIDI4LCAyMDE4IGF0IDAyOjA3OjM0UE0gLTA1MDAsIEx5dWRlIFBhdWwgd3Jv dGU6Cj4gPiAKPiA+IE9uIFR1ZSwgMjAxOC0wMi0yNyBhdCAyMzoxNyAtMDgwMCwgTWFuYXNpIE5h dmFyZSB3cm90ZToKPiA+ID4gVmlsbGUsICB0aGFua3MgZm9yIHRoZSBwYXRjaCBhbmQKPiA+ID4g U29ycnkgZm9yIG5vdCBiZWluZyBhYmxlIHRvIHJldmlldyB0aGlzIGVhcmxpZXIuCj4gPiA+IFBs ZWFzZSBmaW5kIHNvbWUgY29tbWVudHMgYmVsb3c6Cj4gPiA+IAo+ID4gPiBPbiBXZWQsIEphbiAz MSwgMjAxOCBhdCAwMzoyNzoxMFBNICswMjAwLCBWaWxsZSBTeXJqw6Rsw6Qgd3JvdGU6Cj4gPiA+ ID4gT24gVHVlLCBKYW4gMzAsIDIwMTggYXQgMDY6MTY6NTlQTSAtMDUwMCwgTHl1ZGUgUGF1bCB3 cm90ZToKPiA+ID4gPiA+IE9uIFdlZCwgMjAxOC0wMS0xNyBhdCAyMToyMSArMDIwMCwgVmlsbGUg U3lyamFsYSB3cm90ZToKPiA+ID4gPiA+ID4gRnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5z eXJqYWxhQGxpbnV4LmludGVsLmNvbT4KPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+IERvaW5nIGxp bmsgcmV0cmFpbmluZyBmcm9tIHRoZSBzaG9ydCBwdWxzZSBoYW5kbGVyIGlzIHByb2JsZW1hdGlj Cj4gPiA+ID4gPiA+IHNpbmNlCj4gPiA+ID4gPiA+IHRoYXQgbWlnaHQgaW50cm9kdWNlIGRlYWRs b2NrcyB3aXRoIE1TVCBzaWRlYmFuZCBwcm9jZXNzaW5nLgo+ID4gPiA+ID4gPiBDdXJyZW50bHkK PiA+ID4gPiA+ID4gd2UgZG9uJ3QgcmV0cmFpbiBNU1QgbGlua3MgZnJvbSB0aGlzIGNvZGUsIGJ1 dCB3ZSB3YW50IHRvIGNoYW5nZQo+ID4gPiA+ID4gPiB0aGF0Lgo+ID4gPiA+ID4gPiBTbyBiZXR0 ZXIgdG8gbW92ZSB0aGUgZW50aXJlIHRoaW5nIHRvIHRoZSBob3RwbHVnIHdvcmsuIFdlIGNhbgo+ ID4gPiA+ID4gPiB1dGlsaXplCj4gPiA+ID4gPiA+IHRoZSBuZXcgZW5jb2Rlci0+aG90cGx1Zygp IGhvb2sgZm9yIHRoaXMuCj4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiBUaGUgb25seSB0aGluZyB3 ZSBsZWF2ZSBpbiB0aGUgc2hvcnQgcHVsc2UgaGFuZGxlciBpcyB0aGUgbGluawo+ID4gPiA+ID4g PiBzdGF0dXMKPiA+ID4gPiA+ID4gY2hlY2suIFRoYXQgb25lIHN0aWxsIGRlcGVuZHMgb24gdGhl IGxpbmsgcGFyYW1ldGVycyBzdG9yZWQgdW5kZXIKPiA+ID4gPiA+ID4gaW50ZWxfZHAsIHNvIG5v IGxvY2tpbmcgYXJvdW5kIHRoYXQgYnV0IHJhY2VzIHNob3VsZCBiZSBtb3N0bHkKPiA+ID4gPiA+ ID4gaGFybWxlc3MKPiA+ID4gPiA+ID4gYXMgdGhlIGFjdHVhbCByZXRyYWluaW5nIGNvZGUgd2ls bCByZWNoZWNrIHRoZSBsaW5rIHN0YXRlIGlmIHdlCj4gPiA+ID4gPiA+IGVuZCB1cCB0aGVyZSBi eSBtaXN0YWtlLgo+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gdjI6IFJlYmFzZSBkdWUgdG8gLT5w b3N0X2hvdHBsdWcoKSBub3cgYmVpbmcganVzdCAtPmhvdHBsdWcoKQo+ID4gPiA+ID4gPiAgICAg Q2hlY2sgdGhlIGNvbm5lY3RvciB0eXBlIHRvIGZpZ3VyZSBvdXQgaWYgd2Ugc2hvdWxkIGRvCj4g PiA+ID4gPiA+ICAgICB0aGUgSERNSSB0aGluZyBvciB0aGUgRFAgdGhpbmsgZm9yIERESQo+ID4g PiA+ID4gPiAKPiA+ID4gPiA+ID4gQ2M6IE1hbmFzaSBOYXZhcmUgPG1hbmFzaS5kLm5hdmFyZUBp bnRlbC5jb20+Cj4gPiA+ID4gPiA+IENjOiBNYWFydGVuIExhbmtob3JzdCA8bWFhcnRlbi5sYW5r aG9yc3RAbGludXguaW50ZWwuY29tPgo+ID4gPiA+ID4gPiBTaWduZWQtb2ZmLWJ5OiBWaWxsZSBT eXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPgo+ID4gPiA+ID4gPiAtLS0K PiA+ID4gPiA+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RkaS5jIHwgIDEwICstCj4g PiA+ID4gPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jICB8IDE5NiArKysrKysr KysrKysrKysrKysrKysrLS0KPiA+ID4gPiA+ID4gLS0tLQo+ID4gPiA+ID4gPiAtLS0tLS0tLQo+ ID4gPiA+ID4gPiAtLS0KPiA+ID4gPiA+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Ry di5oIHwgICAyICsKPiA+ID4gPiA+ID4gIDMgZmlsZXMgY2hhbmdlZCwgMTIwIGluc2VydGlvbnMo KyksIDg4IGRlbGV0aW9ucygtKQo+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RkaS5jCj4gPiA+ID4gPiA+IGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZGRpLmMKPiA+ID4gPiA+ID4gaW5kZXggMjU3OTNiZGM2OTJmLi41 ZjNkNThmMWFlNmUgMTAwNjQ0Cj4gPiA+ID4gPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2RkaS5jCj4gPiA+ID4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2RkaS5jCj4gPiA+ID4gPiA+IEBAIC0yODgwLDcgKzI4ODAsMTAgQEAgc3RhdGljIGJvb2wgaW50 ZWxfZGRpX2hvdHBsdWcoc3RydWN0Cj4gPiA+ID4gPiA+IGludGVsX2VuY29kZXIKPiA+ID4gPiA+ ID4gKmVuY29kZXIsCj4gPiA+ID4gPiA+ICAJZHJtX21vZGVzZXRfYWNxdWlyZV9pbml0KCZjdHgs IDApOwo+ID4gPiA+ID4gPiAgCj4gPiA+ID4gPiA+ICAJZm9yICg7Oykgewo+ID4gPiA+ID4gPiAt CQlyZXQgPSBpbnRlbF9oZG1pX3Jlc2V0X2xpbmsoZW5jb2RlciwgJmN0eCk7Cj4gPiA+ID4gPiA+ ICsJCWlmIChjb25uZWN0b3ItPmJhc2UuY29ubmVjdG9yX3R5cGUgPT0KPiA+ID4gPiA+ID4gRFJN X01PREVfQ09OTkVDVE9SX0hETUlBKQo+ID4gPiA+ID4gPiArCQkJcmV0ID0gaW50ZWxfaGRtaV9y ZXNldF9saW5rKGVuY29kZXIsCj4gPiA+ID4gPiA+ICZjdHgpOwo+ID4gPiA+ID4gPiArCQllbHNl Cj4gPiA+ID4gPiA+ICsJCQlyZXQgPSBpbnRlbF9kcF9yZXRyYWluX2xpbmsoZW5jb2RlciwKPiA+ ID4gPiA+ID4gJmN0eCk7Cj4gPiA+ID4gPiA+ICAKPiA+ID4gPiA+ID4gIAkJaWYgKHJldCA9PSAt RURFQURMSykgewo+ID4gPiA+ID4gPiAgCQkJZHJtX21vZGVzZXRfYmFja29mZigmY3R4KTsKPiA+ ID4gPiA+ID4gQEAgLTMwMDcsMTAgKzMwMTAsNyBAQCB2b2lkIGludGVsX2RkaV9pbml0KHN0cnVj dCBkcm1faTkxNV9wcml2YXRlCj4gPiA+ID4gPiA+ICpkZXZfcHJpdiwKPiA+ID4gPiA+ID4gZW51 bSBwb3J0IHBvcnQpCj4gPiA+ID4gPiA+ICAJZHJtX2VuY29kZXJfaW5pdCgmZGV2X3ByaXYtPmRy bSwgZW5jb2RlciwKPiA+ID4gPiA+ID4gJmludGVsX2RkaV9mdW5jcywKPiA+ID4gPiA+ID4gIAkJ CSBEUk1fTU9ERV9FTkNPREVSX1RNRFMsICJEREkgJWMiLAo+ID4gPiA+ID4gPiBwb3J0X25hbWUo cG9ydCkpOwo+ID4gPiA+ID4gPiAgCj4gPiA+ID4gPiA+IC0JaWYgKGluaXRfaGRtaSkKPiA+ID4g PiA+ID4gLQkJaW50ZWxfZW5jb2Rlci0+aG90cGx1ZyA9IGludGVsX2RkaV9ob3RwbHVnOwo+ID4g PiA+ID4gPiAtCWVsc2UKPiA+ID4gPiA+ID4gLQkJaW50ZWxfZW5jb2Rlci0+aG90cGx1ZyA9IGlu dGVsX2VuY29kZXJfaG90cGx1ZzsKPiA+ID4gPiA+ID4gKwlpbnRlbF9lbmNvZGVyLT5ob3RwbHVn ID0gaW50ZWxfZGRpX2hvdHBsdWc7Cj4gPiA+ID4gPiA+ICAJaW50ZWxfZW5jb2Rlci0+Y29tcHV0 ZV9vdXRwdXRfdHlwZSA9Cj4gPiA+ID4gPiA+IGludGVsX2RkaV9jb21wdXRlX291dHB1dF90eXBl Owo+ID4gPiA+ID4gPiAgCWludGVsX2VuY29kZXItPmNvbXB1dGVfY29uZmlnID0gaW50ZWxfZGRp X2NvbXB1dGVfY29uZmlnOwo+ID4gPiA+ID4gPiAgCWludGVsX2VuY29kZXItPmVuYWJsZSA9IGlu dGVsX2VuYWJsZV9kZGk7Cj4gPiA+ID4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9kcC5jCj4gPiA+ID4gPiA+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZHAuYwo+ID4gPiA+ID4gPiBpbmRleCA2YmJmMTQ0MTBjMmEuLjE1MjAxNmUwOWExMSAxMDA2NDQK PiA+ID4gPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYwo+ID4gPiA+ ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jCj4gPiA+ID4gPiA+IEBA IC00Mjc1LDEyICs0Mjc1LDgzIEBAIGludGVsX2RwX2NoZWNrX21zdF9zdGF0dXMoc3RydWN0IGlu dGVsX2RwCj4gPiA+ID4gPiA+ICppbnRlbF9kcCkKPiA+ID4gPiA+ID4gIAlyZXR1cm4gLUVJTlZB TDsKPiA+ID4gPiA+ID4gIH0KPiA+ID4gPiA+ID4gIAo+ID4gPiA+ID4gPiAtc3RhdGljIHZvaWQK PiA+ID4gPiA+ID4gLWludGVsX2RwX3JldHJhaW5fbGluayhzdHJ1Y3QgaW50ZWxfZHAgKmludGVs X2RwKQo+ID4gPiA+ID4gPiArc3RhdGljIGJvb2wKPiA+ID4gPiA+ID4gK2ludGVsX2RwX25lZWRz X2xpbmtfcmV0cmFpbihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ID4gPiA+ID4gPiArewo+ ID4gPiA+ID4gPiArCXU4IGxpbmtfc3RhdHVzW0RQX0xJTktfU1RBVFVTX1NJWkVdOwo+ID4gPiA+ ID4gPiArCj4gPiA+ID4gPiA+ICsJaWYgKCFpbnRlbF9kcF9nZXRfbGlua19zdGF0dXMoaW50ZWxf ZHAsIGxpbmtfc3RhdHVzKSkgewo+ID4gPiA+ID4gPiArCQlEUk1fRVJST1IoIkZhaWxlZCB0byBn ZXQgbGluayBzdGF0dXNcbiIpOwo+ID4gPiA+ID4gPiArCQlyZXR1cm4gZmFsc2U7Cj4gPiA+ID4g PiA+ICsJfQo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICsJLyoKPiA+ID4gPiA+ID4gKwkgKiBW YWxpZGF0ZSB0aGUgY2FjaGVkIHZhbHVlcyBvZiBpbnRlbF9kcC0+bGlua19yYXRlIGFuZAo+ID4g PiA+ID4gPiArCSAqIGludGVsX2RwLT5sYW5lX2NvdW50IGJlZm9yZSBhdHRlbXB0aW5nIHRvIHJl dHJhaW4uCj4gPiA+ID4gPiA+ICsJICovCj4gPiA+ID4gPiA+ICsJaWYgKCFpbnRlbF9kcF9saW5r X3BhcmFtc192YWxpZChpbnRlbF9kcCwgaW50ZWxfZHAtCj4gPiA+ID4gPiA+ID4gbGlua19yYXRl LAo+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gKwkJCQkJaW50ZWxfZHAtPmxhbmVfY291bnQpKQo+ ID4gPiA+ID4gPiArCQlyZXR1cm4gZmFsc2U7Cj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gKwkv KiBSZXRyYWluIGlmIENoYW5uZWwgRVEgb3IgQ1Igbm90IG9rICovCj4gPiA+ID4gPiA+ICsJcmV0 dXJuICFkcm1fZHBfY2hhbm5lbF9lcV9vayhsaW5rX3N0YXR1cywgaW50ZWxfZHAtCj4gPiA+ID4g PiA+ID4gbGFuZV9jb3VudCk7Cj4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiArfQo+ID4gPiA+ID4g PiArCj4gPiA+ID4gPiA+ICsvKgo+ID4gPiA+ID4gPiArICogSWYgZGlzcGxheSBpcyBub3cgY29u bmVjdGVkIGNoZWNrIGxpbmtzIHN0YXR1cywKPiA+ID4gPiA+ID4gKyAqIHRoZXJlIGhhcyBiZWVu IGtub3duIGlzc3VlcyBvZiBsaW5rIGxvc3MgdHJpZ2dlcmluZwo+ID4gPiA+ID4gPiArICogbG9u ZyBwdWxzZS4KPiA+ID4gPiA+ID4gKyAqCj4gPiA+ID4gPiA+ICsgKiBTb21lIHNpbmtzIChlZy4g QVNVUyBQQjI4N1EpIHNlZW0gdG8gcGVyZm9ybSBzb21lCj4gPiA+ID4gPiA+ICsgKiB3ZWlyZCBI UEQgcGluZyBwb25nIGR1cmluZyBtb2Rlc2V0cy4gU28gd2UgY2FuIGFwcGFyZW50bHkKPiA+ID4g PiA+ID4gKyAqIGVuZCB1cCB3aXRoIEhQRCBnb2luZyBsb3cgZHVyaW5nIGEgbW9kZXNldCwgYW5k IHRoZW4KPiA+ID4gPiA+ID4gKyAqIGdvaW5nIGJhY2sgdXAgc29vbiBhZnRlci4gQW5kIG9uY2Ug dGhhdCBoYXBwZW5zIHdlIG11c3QKPiA+ID4gPiA+ID4gKyAqIHJldHJhaW4gdGhlIGxpbmsgdG8g Z2V0IGEgcGljdHVyZS4gVGhhdCdzIGluIGNhc2Ugbm8KPiA+ID4gPiA+ID4gKyAqIHVzZXJzcGFj ZSBjb21wb25lbnQgcmVhY3RlZCB0byBpbnRlcm1pdHRlbnQgSFBEIGRpcC4KPiA+ID4gPiA+ID4g KyAqLwo+ID4gPiA+ID4gPiAraW50IGludGVsX2RwX3JldHJhaW5fbGluayhzdHJ1Y3QgaW50ZWxf ZW5jb2RlciAqZW5jb2RlciwKPiA+ID4gPiA+ID4gKwkJCSAgc3RydWN0IGRybV9tb2Rlc2V0X2Fj cXVpcmVfY3R4ICpjdHgpCj4gPiA+ID4gPiA+ICB7Cj4gPiA+ID4gPiA+IC0Jc3RydWN0IGludGVs X2VuY29kZXIgKmVuY29kZXIgPQo+ID4gPiA+ID4gPiAmZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHAp LQo+ID4gPiA+ID4gPiA+IGJhc2U7Cj4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiAgCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZW5jb2Rlci0KPiA+ID4gPiA+ID4g PiBiYXNlLmRldik7Cj4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiAtCXN0cnVjdCBpbnRlbF9jcnRj ICpjcnRjID0gdG9faW50ZWxfY3J0YyhlbmNvZGVyLQo+ID4gPiA+ID4gPiA+YmFzZS5jcnRjKTsK PiA+ID4gPiA+ID4gKwlzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwID0gZW5jX3RvX2ludGVsX2Rw KCZlbmNvZGVyLQo+ID4gPiA+ID4gPiA+YmFzZSk7Cj4gPiA+ID4gPiA+ICsJc3RydWN0IGludGVs X2Nvbm5lY3RvciAqY29ubmVjdG9yID0gaW50ZWxfZHAtCj4gPiA+ID4gPiA+ID4gYXR0YWNoZWRf Y29ubmVjdG9yOwo+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3Rv cl9zdGF0ZSAqY29ubl9zdGF0ZTsKPiA+ID4gPiA+ID4gKwlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0 ZSAqY3J0Y19zdGF0ZTsKPiA+ID4gPiA+ID4gKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YzsKPiA+ ID4gPiA+ID4gKwlpbnQgcmV0Owo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICsJLyogRklYTUUg aGFuZGxlIHRoZSBNU1QgY29ubmVjdG9ycyBhcyB3ZWxsICovCj4gPiA+ID4gPiA+ICsKPiA+ID4g PiA+ID4gKwlpZiAoIWNvbm5lY3RvciB8fCBjb25uZWN0b3ItPmJhc2Uuc3RhdHVzICE9Cj4gPiA+ ID4gPiA+IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkKQo+ID4gPiA+ID4gPiArCQlyZXR1cm4g MDsKPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiArCXJldCA9IGRybV9tb2Rlc2V0X2xvY2soJmRl dl9wcml2LQo+ID4gPiA+ID4gPiA+IGRybS5tb2RlX2NvbmZpZy5jb25uZWN0aW9uX211dGV4LAo+ ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gY3R4KTsKPiA+ID4gPiA+ID4gKwlpZiAocmV0KQo+ID4g PiA+ID4gPiArCQlyZXR1cm4gcmV0Owo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICsJY29ubl9z dGF0ZSA9IGNvbm5lY3Rvci0+YmFzZS5zdGF0ZTsKPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiAr CWNydGMgPSB0b19pbnRlbF9jcnRjKGNvbm5fc3RhdGUtPmNydGMpOwo+ID4gPiA+ID4gPiArCWlm ICghY3J0YykKPiA+ID4gPiA+ID4gKwkJcmV0dXJuIDA7Cj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ ID4gKwlyZXQgPSBkcm1fbW9kZXNldF9sb2NrKCZjcnRjLT5iYXNlLm11dGV4LCBjdHgpOwo+ID4g PiA+ID4gPiArCWlmIChyZXQpCj4gPiA+ID4gPiA+ICsJCXJldHVybiByZXQ7Cj4gPiA+ID4gPiA+ ICsKPiA+ID4gPiA+ID4gKwljcnRjX3N0YXRlID0gdG9faW50ZWxfY3J0Y19zdGF0ZShjcnRjLT5i YXNlLnN0YXRlKTsKPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiArCVdBUk5fT04oIWludGVsX2Ny dGNfaGFzX2RwX2VuY29kZXIoY3J0Y19zdGF0ZSkpOwo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ ICsJaWYgKCFjcnRjX3N0YXRlLT5iYXNlLmFjdGl2ZSkKPiA+ID4gPiA+ID4gKwkJcmV0dXJuIDA7 Cj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gKwlpZiAoY29ubl9zdGF0ZS0+Y29tbWl0ICYmCj4g PiA+ID4gPiA+ICsJICAgICF0cnlfd2FpdF9mb3JfY29tcGxldGlvbigmY29ubl9zdGF0ZS0+Y29t bWl0LQo+ID4gPiA+ID4gPiA+aHdfZG9uZSkpCj4gPiA+ID4gPiA+ICsJCXJldHVybiAwOwo+ID4g PiA+ID4gPiArCj4gPiA+ID4gPiA+ICsJaWYgKCFpbnRlbF9kcF9uZWVkc19saW5rX3JldHJhaW4o aW50ZWxfZHApKQo+ID4gPiA+ID4gPiArCQlyZXR1cm4gMDsKPiA+ID4gPiA+IAo+ID4gPiA+ID4g TkFLLCB0aGlzIGRlZmluaXRlbHkgd29uJ3Qgd29yayBmb3IgaW1wbGVtZW50aW5nIE1TVCByZXRy YWluaW5nLgo+ID4gPiA+ID4gVGhlcmUncwo+ID4gPiA+ID4gc29tZQo+ID4gPiA+ID4gcHJldHR5 IGh1Z2UgZGlmZmVyZW5jZXMgd2l0aCBob3cgcmV0cmFpbmluZyBuZWVkcyB0byBiZSBoYW5kbGVk IG9uCj4gPiA+ID4gPiBTU1QKPiA+ID4gPiA+IHZzLiBNU1QuCj4gPiA+ID4gPiBBbiBleGFtcGxl IHdpdGggc29tZSBub3JtYWwgU1NUIHNpbmsgdnMuIHdoYXQgaGFwcGVucyBvbiBteSBjYWxkaWdp dAo+ID4gPiA+ID4gVFMzCj4gPiA+ID4gPiAKPiA+ID4gPiA+IFNTVDoKPiA+ID4gPiA+ICAgICAx LiBjb21taXQgbW9kZXNldCwgZXZlcnl0aGluZyBpcyBPSwo+ID4gPiA+ID4gICAgIDIuIHNvbWV0 aGluZyBoYXBwZW5zLCBzaW5rIHNlbmRzIHNob3J0cHVsc2UgYW5kIGNoYW5nZXMgbGluawo+ID4g PiA+ID4gc3RhdHVzCj4gPiA+ID4gPiByZWdpc3RlcnMKPiA+ID4gPiA+ICAgICBpbiBkcGNkCj4g PiA+ID4gPiAgICAgMy4gU291cmNlIHJlY2VpdmVzIHNob3J0IHB1bHNlLCB0cmllcyByZXRyYWlu aW5nIGZpdmUgdGltZXMKPiA+ID4gPiA+ICAgICA0LiBpZiB0aGlzIHN1Y2NlZWRzOgo+ID4gPiA+ ID4gICAgICAgICA1LiB3ZSdyZSBkb25lIGhlcmUKPiA+ID4gPiA+ICAgICA2LiBpZiB0aGlzIGZh aWxzOgo+ID4gPiA+ID4gICAgICAgICA3LiBtYXJrIGxpbmsgc3RhdHVzIGFzIGJhZAo+ID4gPiA+ ID4gICAgICAgICA4LiBnZXQgZmFsbGJhY2sgcGFyYW1ldGVycwo+ID4gPiA+ID4gICAgICAgICA5 LiBob3RwbHVnIGV2ZW50Cj4gPiA+ID4gPiAKPiA+ID4gPiA+IE1TVCAoaTkxNSBkb2Vzbid0IGRv IHRoaXMgeWV0LCBidXQgdGhpcyBpcyBnZW5lcmFsbHkgaG93IGl0IG5lZWRzIHRvCj4gPiA+ID4g PiBiZQo+ID4gPiA+ID4gaGFuZGxlZCk6Cj4gPiA+ID4gPiAgICAgMS4gY29tbWl0IG1vZGVzZXQs IGV2ZXJ5dGhpbmcgaXMgT0sKPiA+ID4gPiA+ICAgICAyLiBzb21ldGhpbmcgaGFwcGVucyAoaW4g bXkgY2FzZSwgdGhlIE1TVCBodWIgZGlzY292ZXJzIGl0IGhhZAo+ID4gPiA+ID4gdGhlCj4gPiA+ ID4gPiB3cm9uZyBtYXgKPiA+ID4gPiA+ICAgICBsaW5rIHJhdGUvbGFuZSBjb3VudCksIHNpbmsg c2VuZHMgRVNJIGluZGljYXRpbmcgY2hhbm5lbCBFUSBoYXMKPiA+ID4gPiA+IGZhaWxlZAo+ID4g PiA+ID4gICAgIDMuIHJldHJhaW5pbmcgY29tbWVuY2VzIHdpdGggZml2ZSByZXRyaWVzLgo+ID4g PiA+ID4gICAgIDQuIGlmIHRoaXMgc3VjY2VlZHM6Cj4gPiA+ID4gPiAgICAgICAgNS4gY29udGlu dWUKPiA+ID4gPiA+ICAgICA2LiBpZiB0aGlzIGZhaWxzIChJIGFjdHVhbGx5IGhhdmVuJ3Qgc2Vl biB0aGlzIG9uY2UgeWV0KQo+ID4gPiA+ID4gICAgICAgICA3LiBtYXJrIGxpbmsgc3RhdHVzIGFz IGJhZCBvbiBhbGwgZG93bnN0cmVhbSBjb25uZWN0b3JzCj4gPiA+ID4gPiAgICAgICAgIDguIGdl dCBmYWxsYmFjayBwYXJhbWV0ZXJzCj4gPiA+ID4gPiAgICAgICAgIDkuIGhvdHBsdWcgZXZlbnQK PiA+ID4gPiA+ICAgICAxMC4gdGhlIHJldHJhaW4gZGlkbid0IGFjdHVhbGx5IHdvcmsgKGRlc3Bp dGUgd2hhdCB0aGUgU1NUIGxpbmsKPiA+ID4gPiA+IHN0YXR1cwo+ID4gPiA+ID4gICAgIHJlZ2lz dGVycyB0b2xkIHVzKS4gZ28gYmFjayB0byBzdGVwIDMgZml2ZSBtb3JlIHRpbWVzCj4gPiA+ID4g PiAgICAgMTEuIGlmIHRoaXMgZmFpbHM6Cj4gPiA+ID4gPiAgICAgICAgIDEyLiBtYXJrIGxpbmsg c3RhdHVzIGFzIGJhZCBvbiBhbGwgZG93bnN0cmVhbSBjb25uZWN0b3JzCj4gPiA+ID4gPiAgICAg ICAgIDEzLiBnZXQgZmFsbGJhY2sgcGFyYW1ldGVycwo+ID4gPiA+ID4gICAgICAgICAxNC4gaG90 cGx1ZyBldmVudAo+ID4gPiA+ID4gCj4gPiA+ID4gPiBzaW1wbHkgcHV0OiB3ZSByZWFsbHkgc2hv dWxkIGtlZXAgdGhlICJkbyB3ZSBuZWVkIHRvIHJldHJhaW4/IiBsb2dpYwo+ID4gPiA+ID4gb3V0 Cj4gPiA+ID4gPiBvZiB0aGUKPiA+ID4gPiA+IGFjdHVhbCByZXRyYWluaW5nIGhlbHBlcnMgc28g dGhhdCBTU1QvTVNUIGNvZGVwYXRocyBjYW4gZG8gdGhlaXIgb3duCj4gPiA+ID4gPiBjaGVja3Mg dG8KPiA+ID4gPiA+IGZpZ3VyZSB0aGlzIG91dC4KPiA+ID4gPiAKPiA+ID4gPiBObywgd2UgbmVl ZCBpdCBzaW5jZSB3ZSB3YW50IHRvIGNoZWNrIGl0ICphZnRlciogYW55IG1vZGVzZXQgaGFzCj4g PiA+ID4gZmluaXNoZWQuIFdpdGggTVNUIEkgdGhpbmsgd2hhdCB3ZSdsbCB3YW50IHRvIGRvIGlz IGZpbmQgYWxsIHRoZSBwaXBlcwo+ID4gPiA+IGFmZmVjdGVkIGJ5IHRoZSBsaW5rIGZhaWx1cmUs IGxvY2sgdGhlbSwgYW5kIHdhaXQgdW50aWwgdGhleSdyZSBkb25lCj4gPiA+ID4gd2l0aCB0aGVp ciBtb2Rlc2V0cywgdGhlbiB3ZSBjaGVjayB0aGUgbGluayBzdGF0ZS4gSWYgaXQncyBiYWQgd2UK PiA+ID4gPiBwcm9jZWVkIHRvIHJldHJhaW4gdGhlIGxpbmsuCj4gPiA+ID4gCj4gPiA+ID4gU28g YmFzaWNhbGx5IGp1c3Qgd2Fsa2luZyBvdmVyIHRoZSBNU1QgZW5jb2RlcnMgaW4gYWRkaXRpb24g dG8gdGhlCj4gPiA+ID4gU1NUIGVuY29kZXIsIGFuZCByZXBlYXRpbmcgbW9zdCBvZiB0aGUgc3Rl cHMgaW4gdGhpcyBjb2RlIGZvciBlYWNoLgo+ID4gPiA+IEhlbmNlIHRoZSB0aGUgTVNUIEZJWE1F IEkgbGVmdCBpbiB0aGVyZSA7KQo+ID4gPiA+IAo+ID4gPiAKPiA+ID4gTHl1ZGUsCj4gPiA+IAo+ ID4gPiBJIGFncmVlIHdpdGggVmlsbGUgaGVyZSwgY2FuIHdlIGFkZCB0aGUgTVNUIHJldHJhaW4g cmVxdWlyZWQgY2hlY2sgZnJvbQo+ID4gPiB3aXRoaW4gdGhlIGludGVsX2RwX3JldHJhaW5fbGlu aygpPyBTbyBmb3Igbm93IHRoZSBGSVhNRSBzaG91bGQgYmUgbGVmdAo+ID4gPiB0aGVyZQo+ID4g PiBhbmQgTVNUIHJldHJhaW5pbmcgY2hlY2sgY2FuIGJlIGFkZGVkIGZyb20geW91ciBwYXRjaGVz Lgo+ID4gPiAKPiA+ID4gTWFuYXNpCj4gPiAKPiA+IFllcCEgU29ycnkgSSBwcm9iYWJseSBzaG91 bGQgaGF2ZSByZWl0ZXJhdGVkIHRoaXMgcGFydCBvdmVyIGVtYWlsIHNpbmNlIEkKPiA+IG9ubHkK PiA+IG1lbnRpb25lZCBpdCB0byB2aWxsZSBkaXJlY3RseTogdGhpcyBwYXJ0IHNob3VsZCBkZWZp bml0ZWx5IHdvcmsgZmluZSwgYW5kCj4gPiBpbnRlbF9kcF9yZXRyYWluX2xpbmsoKSBpcyBhY3R1 YWxseSB3aGVyZSB3ZSBoYW5kbGUgTVNUIHJldHJhaW5pbmcgaW4gdGhlCj4gPiBsYXRlc3QgdmVy c2lvbiBvZiB0aGUgcmV0cmFpbmluZyBzZXJpZXM6Cj4gPiAKPiA+IGpmeWksIHlvdSBjYW4gZmlu ZCB0aGF0IGhlcmU6Cj4gPiBodHRwczovL2dpdGh1Yi5jb20vTHl1ZGUvbGludXgvdHJlZS93aXAv aTkxNS1tc3QtZmFsbGJhY2stYTQKPiA+IEl0J3MgYWxtb3N0IHJlYWR5IGZvciB0aGUgTUwsIGp1 c3Qgd2FudCB0byBnZXQgdGhlIG90aGVyIHBhdGNoZXMgdGhpcyBpcwo+ID4gZ29pbmcKPiA+IHRv IHJlbHkgb24gaW4gZmlyc3QgYW5kIGZpeCBzb21lIHNtYWxsIGNvbmNlcm5zIEkndmUgZ290IGFi b3V0IHRoYXQKPiA+IHNlcmllcycKPiA+IGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgaGFuZGxp bmcgbW9kZXNldHMgYWZ0ZXIgYSBmYWlsZWQgcmV0cmFpbgo+ID4gc2VxdWVuY2UKPiA+ID4gCj4g Cj4gR3JlYXQhCj4gQWZ0ZXIgdGhlIGZhaWxlZCByZXRyYWluIHNlcXVlbmNlLCBpdCB3aWxsIGtl ZXAgb24gcmV0cnlpbmcgdW50aWwgaGFzIHRyaWVkCj4gYWxsCj4gdGhlIGxpbmsgcmF0ZS9sYW5l IGNvdW50IGNvbWJpbmF0aW9ucyB1bnRpbCBSQlIgMSBsYW5lIGFuZCB0aGVuIGZhaWwgd2l0aCBh Cj4gRVJST1IgbWVzc2FnZS4KPiBXaGF0IHdhcyB0aGUgY29uY2VybiBvbiB0aGUgY3VycmVudCBp bXBsZW1lbnRhdGlvbiBvZiBtb2Rlc3RlIGFmdGVyIGZhaWxlZAo+IHJldHJhaW4/CkkgYWN0dWFs bHkgdGFrZSB0aGF0IGJhY2suIFdhcyB3b3JyaWVkIHRoYXQgbm90IGZyZWVpbmcgZXhpc3Rpbmcg VkNQSQphbGxvY2F0aW9ucyBkdXJpbmcgdGhlIGZpcnN0IGF0b21pYyBjaGVjayBwaGFzZSBmb3Ig dGhlIGZpcnN0IG1vZGVzZXQgYWZ0ZXIgYQpyZXRyYWluIGZhaWx1cmUgbWlnaHQgY2F1c2UgYXRv bWljIGNoZWNrcyB0byBmYWlsIGZyb20gbm90IGhhdmluZyBlbm91Z2ggVkNQSSAKc3BhY2UsIGJ1 dCB0aGVuIEkgcmVhbGl6ZWQgdGhhdCB3b3VsZG4ndCBtYXR0ZXIgc2luY2UgaWYgd2UncmUgbm90 IGFibGUgdG8gZml0Cm9uZSBkaXNwbGF5IGludG8gdGhlIFZDUEkgd2l0aCBhIHJlZHVjZWQgcGJu X2RpdiwgdGhhdCBqdXN0IG1lYW5zIGZpdHRpbmcgYm90aApkaXNwbGF5cyB3aXRoIGEgcmVkdWNl ZCBwYm5fZGl2IHdvdWxkIGFsc28gYmUgaW1wb3NzaWJsZSA6UC4KCj4gCj4gTWFuYXNpCj4gIAo+ ID4gPiA+ID4gCj4gPiA+ID4gPiA+ICAKPiA+ID4gPiA+ID4gIAkvKiBTdXBwcmVzcyB1bmRlcnJ1 bnMgY2F1c2VkIGJ5IHJlLXRyYWluaW5nICovCj4gPiA+ID4gPiA+ICAJaW50ZWxfc2V0X2NwdV9m aWZvX3VuZGVycnVuX3JlcG9ydGluZyhkZXZfcHJpdiwgY3J0Yy0KPiA+ID4gPiA+ID4gPnBpcGUs Cj4gPiA+ID4gPiA+IGZhbHNlKTsKPiA+ID4gPiA+ID4gQEAgLTQyOTgsNTEgKzQzNjksNDkgQEAg aW50ZWxfZHBfcmV0cmFpbl9saW5rKHN0cnVjdCBpbnRlbF9kcAo+ID4gPiA+ID4gPiAqaW50ZWxf ZHApCj4gPiA+ID4gPiA+ICAJaWYgKGNydGMtPmNvbmZpZy0+aGFzX3BjaF9lbmNvZGVyKQo+ID4g PiA+ID4gPiAgCQlpbnRlbF9zZXRfcGNoX2ZpZm9fdW5kZXJydW5fcmVwb3J0aW5nKGRldl9wcml2 LAo+ID4gPiA+ID4gPiAgCQkJCQkJICAgICAgaW50ZWxfY3J0Y18KPiA+ID4gPiA+ID4gcGNoXwo+ ID4gPiA+ID4gPiB0cmFuc2NvZAo+ID4gPiA+ID4gPiBlcihjcnRjKSwgdHJ1ZSk7Cj4gPiA+ID4g PiA+ICsKPiA+ID4gPiA+ID4gKwlyZXR1cm4gMDsKPiA+ID4gPiA+ID4gIH0KPiA+ID4gPiA+ID4g IAo+ID4gPiA+ID4gPiAtc3RhdGljIHZvaWQKPiA+ID4gPiA+ID4gLWludGVsX2RwX2NoZWNrX2xp bmtfc3RhdHVzKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gPiA+ID4gPiA+ICsvKgo+ID4g PiA+ID4gPiArICogSWYgZGlzcGxheSBpcyBub3cgY29ubmVjdGVkIGNoZWNrIGxpbmtzIHN0YXR1 cywKPiA+ID4gPiA+ID4gKyAqIHRoZXJlIGhhcyBiZWVuIGtub3duIGlzc3VlcyBvZiBsaW5rIGxv c3MgdHJpZ2dlcmluZwo+ID4gPiA+ID4gPiArICogbG9uZyBwdWxzZS4KPiA+ID4gPiA+ID4gKyAq Cj4gPiA+ID4gPiA+ICsgKiBTb21lIHNpbmtzIChlZy4gQVNVUyBQQjI4N1EpIHNlZW0gdG8gcGVy Zm9ybSBzb21lCj4gPiA+ID4gPiA+ICsgKiB3ZWlyZCBIUEQgcGluZyBwb25nIGR1cmluZyBtb2Rl c2V0cy4gU28gd2UgY2FuIGFwcGFyZW50bHkKPiA+ID4gPiA+ID4gKyAqIGVuZCB1cCB3aXRoIEhQ RCBnb2luZyBsb3cgZHVyaW5nIGEgbW9kZXNldCwgYW5kIHRoZW4KPiA+ID4gPiA+ID4gKyAqIGdv aW5nIGJhY2sgdXAgc29vbiBhZnRlci4gQW5kIG9uY2UgdGhhdCBoYXBwZW5zIHdlIG11c3QKPiA+ ID4gPiA+ID4gKyAqIHJldHJhaW4gdGhlIGxpbmsgdG8gZ2V0IGEgcGljdHVyZS4gVGhhdCdzIGlu IGNhc2Ugbm8KPiA+ID4gPiA+ID4gKyAqIHVzZXJzcGFjZSBjb21wb25lbnQgcmVhY3RlZCB0byBp bnRlcm1pdHRlbnQgSFBEIGRpcC4KPiA+ID4gPiA+ID4gKyAqLwo+ID4gPiA+ID4gPiArc3RhdGlj IGJvb2wgaW50ZWxfZHBfaG90cGx1ZyhzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKPiA+ ID4gPiA+ID4gKwkJCSAgICAgc3RydWN0IGludGVsX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+ID4g PiA+ID4gPiAgewo+ID4gPiA+ID4gPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9Cj4gPiA+ID4gPiA+IHRvX2k5MTUoaW50ZWxfZHBfdG9fZGV2KGludGVsX2RwKSk7Cj4gPiA+ ID4gPiA+IC0Jc3RydWN0IGludGVsX2VuY29kZXIgKmludGVsX2VuY29kZXIgPQo+ID4gPiA+ID4g PiAmZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHApLQo+ID4gPiA+ID4gPiA+IGJhc2U7Cj4gPiA+ID4g PiA+IAo+ID4gPiA+ID4gPiAtCXN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRl ID0KPiA+ID4gPiA+ID4gLQkJaW50ZWxfZHAtPmF0dGFjaGVkX2Nvbm5lY3Rvci0+YmFzZS5zdGF0 ZTsKPiA+ID4gPiA+ID4gLQl1OCBsaW5rX3N0YXR1c1tEUF9MSU5LX1NUQVRVU19TSVpFXTsKPiA+ ID4gPiA+ID4gLQo+ID4gPiA+ID4gPiAtCVdBUk5fT04oIWRybV9tb2Rlc2V0X2lzX2xvY2tlZCgm ZGV2X3ByaXYtCj4gPiA+ID4gPiA+ID4gZHJtLm1vZGVfY29uZmlnLmNvbm5lY3Rpb25fbXV0ZXgp KTsKPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+IC0KPiA+ID4gPiA+ID4gLQlpZiAoIWludGVsX2Rw X2dldF9saW5rX3N0YXR1cyhpbnRlbF9kcCwgbGlua19zdGF0dXMpKSB7Cj4gPiA+ID4gPiA+IC0J CURSTV9FUlJPUigiRmFpbGVkIHRvIGdldCBsaW5rIHN0YXR1c1xuIik7Cj4gPiA+ID4gPiA+IC0J CXJldHVybjsKPiA+ID4gPiA+ID4gLQl9Cj4gPiA+ID4gPiA+ICsJc3RydWN0IGRybV9tb2Rlc2V0 X2FjcXVpcmVfY3R4IGN0eDsKPiA+ID4gPiA+ID4gKwlib29sIGNoYW5nZWQ7Cj4gPiA+ID4gPiA+ ICsJaW50IHJldDsKPiA+ID4gPiA+ID4gIAo+ID4gPiA+ID4gPiAtCWlmICghY29ubl9zdGF0ZS0+ Y3J0YykKPiA+ID4gPiA+ID4gLQkJcmV0dXJuOwo+ID4gPiA+ID4gPiArCWNoYW5nZWQgPSBpbnRl bF9lbmNvZGVyX2hvdHBsdWcoZW5jb2RlciwgY29ubmVjdG9yKTsKPiA+ID4gPiA+ID4gIAo+ID4g PiA+ID4gPiAtCVdBUk5fT04oIWRybV9tb2Rlc2V0X2lzX2xvY2tlZCgmY29ubl9zdGF0ZS0+Y3J0 Yy0KPiA+ID4gPiA+ID4gPm11dGV4KSk7Cj4gPiA+ID4gPiA+ICsJZHJtX21vZGVzZXRfYWNxdWly ZV9pbml0KCZjdHgsIDApOwo+ID4gPiA+ID4gPiAgCj4gPiA+ID4gPiA+IC0JaWYgKCFjb25uX3N0 YXRlLT5jcnRjLT5zdGF0ZS0+YWN0aXZlKQo+ID4gPiA+ID4gPiAtCQlyZXR1cm47Cj4gPiA+ID4g PiA+ICsJZm9yICg7Oykgewo+ID4gPiAKPiA+ID4gSGVyZSBpZiB0aGlzIGlzIGdldHRpbmcgZXhl Y3V0ZWQgZHVlIHRvIGhwZCBwaW5nIHBvbmcgZHVyaW5nIHRoZSBtb2Rlc2V0Cj4gPiA+IGFuZCB0 aGF0IG1vZGVzZXQgaXMgYWxyZWFkeSBoYXBwZW5pbmcgYXQgYSBsaW5rIGZhbGxiYWNrIHBhcmFt ZXRlciB0aGVuCj4gPiA+IHdoaWxlIHdlIGNhbGwgcmV0cmFpbiBsaW5rLCB3ZSBzaG91bGQgYWxz byB2YWxpZGF0ZSB0aGUgbGluayBwYXJhbWV0ZXJzCj4gPiA+IHNvIHRoYXQgaXQgZG9lc250IHRy eSB0byByZXRyYWluIHdpdGggc3RhbGUgdmFsdWVzLgo+ID4gPiAKPiA+ID4gSSB0aGluayB3ZSBu ZWVkIHRvIGNhbGwgaW50ZWxfZHBfbGlua19wYXJhbXNfdmFsaWQoKSBiZWZvcmUgcmV0cmFpbi4K PiA+ID4gCj4gPiA+ID4gPiA+ICsJCXJldCA9IGludGVsX2RwX3JldHJhaW5fbGluayhlbmNvZGVy LCAmY3R4KTsKPiA+ID4gPiA+ID4gIAo+ID4gPiA+ID4gPiAtCWlmIChjb25uX3N0YXRlLT5jb21t aXQgJiYKPiA+ID4gPiA+ID4gLQkgICAgIXRyeV93YWl0X2Zvcl9jb21wbGV0aW9uKCZjb25uX3N0 YXRlLT5jb21taXQtCj4gPiA+ID4gPiA+ID5od19kb25lKSkKPiA+ID4gPiA+ID4gLQkJcmV0dXJu Owo+ID4gPiA+ID4gPiArCQlpZiAocmV0ID09IC1FREVBRExLKSB7Cj4gPiA+ID4gPiA+ICsJCQlk cm1fbW9kZXNldF9iYWNrb2ZmKCZjdHgpOwo+ID4gPiA+ID4gPiArCQkJY29udGludWU7Cj4gPiA+ ID4gPiA+ICsJCX0KPiA+ID4gPiA+ID4gIAo+ID4gPiA+ID4gPiAtCS8qCj4gPiA+ID4gPiA+IC0J ICogVmFsaWRhdGUgdGhlIGNhY2hlZCB2YWx1ZXMgb2YgaW50ZWxfZHAtPmxpbmtfcmF0ZSBhbmQK PiA+ID4gPiA+ID4gLQkgKiBpbnRlbF9kcC0+bGFuZV9jb3VudCBiZWZvcmUgYXR0ZW1wdGluZyB0 byByZXRyYWluLgo+ID4gPiA+ID4gPiAtCSAqLwo+ID4gPiA+ID4gPiAtCWlmICghaW50ZWxfZHBf bGlua19wYXJhbXNfdmFsaWQoaW50ZWxfZHAsIGludGVsX2RwLQo+ID4gPiA+ID4gPiA+IGxpbmtf cmF0ZSwKPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+IC0JCQkJCWludGVsX2RwLT5sYW5lX2NvdW50 KSkKPiA+ID4gPiA+ID4gLQkJcmV0dXJuOwo+ID4gPiA+ID4gPiArCQlicmVhazsKPiA+ID4gPiA+ ID4gKwl9Cj4gPiA+ID4gPiA+ICAKPiA+ID4gPiA+ID4gLQkvKiBSZXRyYWluIGlmIENoYW5uZWwg RVEgb3IgQ1Igbm90IG9rICovCj4gPiA+ID4gPiA+IC0JaWYgKCFkcm1fZHBfY2hhbm5lbF9lcV9v ayhsaW5rX3N0YXR1cywgaW50ZWxfZHAtCj4gPiA+ID4gPiA+ID5sYW5lX2NvdW50KSkgCj4gPiA+ ID4gPiA+IHsKPiA+ID4gPiA+ID4gLQkJRFJNX0RFQlVHX0tNUygiJXM6IGNoYW5uZWwgRVEgbm90 IG9rLAo+ID4gPiA+ID4gPiByZXRyYWluaW5nXG4iLAo+ID4gPiA+ID4gPiAtCQkJICAgICAgaW50 ZWxfZW5jb2Rlci0+YmFzZS5uYW1lKTsKPiA+ID4gPiA+ID4gKwlkcm1fbW9kZXNldF9kcm9wX2xv Y2tzKCZjdHgpOwo+ID4gPiA+ID4gPiArCWRybV9tb2Rlc2V0X2FjcXVpcmVfZmluaSgmY3R4KTsK PiA+ID4gPiA+ID4gKwlXQVJOKHJldCwgIkFjcXVpcmluZyBtb2Rlc2V0IGxvY2tzIGZhaWxlZCB3 aXRoICVpXG4iLAo+ID4gPiA+ID4gPiByZXQpOwo+ID4gPiA+ID4gPiAgCj4gPiA+ID4gPiA+IC0J CWludGVsX2RwX3JldHJhaW5fbGluayhpbnRlbF9kcCk7Cj4gPiA+ID4gPiA+IC0JfQo+ID4gPiA+ ID4gPiArCXJldHVybiBjaGFuZ2VkOwo+ID4gPiA+ID4gPiAgfQo+ID4gPiA+ID4gPiAgCj4gPiA+ ID4gPiA+ICAvKgo+ID4gPiA+ID4gPiBAQCAtNDQwMCw3ICs0NDY5LDkgQEAgaW50ZWxfZHBfc2hv cnRfcHVsc2Uoc3RydWN0IGludGVsX2RwCj4gPiA+ID4gPiA+ICppbnRlbF9kcCkKPiA+ID4gPiA+ ID4gIAkJCURSTV9ERUJVR19EUklWRVIoIkNQIG9yIHNpbmsgc3BlY2lmaWMgaXJxCj4gPiA+ID4g PiA+IHVuaGFuZGxlZFxuIik7Cj4gPiA+ID4gPiA+ICAJfQo+ID4gPiA+ID4gPiAgCj4gPiA+ID4g PiA+IC0JaW50ZWxfZHBfY2hlY2tfbGlua19zdGF0dXMoaW50ZWxfZHApOwo+ID4gPiA+ID4gPiAr CS8qIGRlZmVyIHRvIHRoZSBob3RwbHVnIHdvcmsgZm9yIGxpbmsgcmV0cmFpbmluZyBpZgo+ID4g PiA+ID4gPiBuZWVkZWQgKi8KPiA+ID4gPiA+ID4gKwlpZiAoaW50ZWxfZHBfbmVlZHNfbGlua19y ZXRyYWluKGludGVsX2RwKSkKPiA+ID4gPiA+ID4gKwkJcmV0dXJuIGZhbHNlOwo+ID4gPiA+ID4g PiAgCj4gPiA+ID4gPiA+ICAJaWYgKGludGVsX2RwLT5jb21wbGlhbmNlLnRlc3RfdHlwZSA9PQo+ ID4gPiA+ID4gPiBEUF9URVNUX0xJTktfVFJBSU5JTkcpCj4gPiA+ID4gPiA+IHsKPiA+ID4gPiA+ ID4gIAkJRFJNX0RFQlVHX0tNUygiTGluayBUcmFpbmluZyBDb21wbGlhbmNlIFRlc3QKPiA+ID4g PiA+ID4gcmVxdWVzdGVkXG4iKTsKPiA+ID4gPiA+ID4gQEAgLTQ3ODUsMjAgKzQ4NTYsNiBAQCBp bnRlbF9kcF9sb25nX3B1bHNlKHN0cnVjdCBpbnRlbF9jb25uZWN0b3IKPiA+ID4gPiA+ID4gKmNv bm5lY3RvcikKPiA+ID4gPiA+ID4gIAkJICovCj4gPiA+ID4gPiA+ICAJCXN0YXR1cyA9IGNvbm5l Y3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOwo+ID4gPiA+ID4gPiAgCQlnb3RvIG91dDsKPiA+ID4g PiA+ID4gLQl9IGVsc2Ugewo+ID4gPiA+ID4gPiAtCQkvKgo+ID4gPiA+ID4gPiAtCQkgKiBJZiBk aXNwbGF5IGlzIG5vdyBjb25uZWN0ZWQgY2hlY2sgbGlua3MKPiA+ID4gPiA+ID4gc3RhdHVzLAo+ ID4gPiA+ID4gPiAtCQkgKiB0aGVyZSBoYXMgYmVlbiBrbm93biBpc3N1ZXMgb2YgbGluayBsb3Nz Cj4gPiA+ID4gPiA+IHRyaWdnZXJyaW5nCj4gPiA+ID4gPiA+IC0JCSAqIGxvbmcgcHVsc2UuCj4g PiA+ID4gPiA+IC0JCSAqCj4gPiA+ID4gPiA+IC0JCSAqIFNvbWUgc2lua3MgKGVnLiBBU1VTIFBC Mjg3USkgc2VlbSB0byBwZXJmb3JtCj4gPiA+ID4gPiA+IHNvbWUKPiA+ID4gPiA+ID4gLQkJICog d2VpcmQgSFBEIHBpbmcgcG9uZyBkdXJpbmcgbW9kZXNldHMuIFNvIHdlIGNhbgo+ID4gPiA+ID4g PiBhcHBhcmVudGx5Cj4gPiA+ID4gPiA+IC0JCSAqIGVuZCB1cCB3aXRoIEhQRCBnb2luZyBsb3cg ZHVyaW5nIGEgbW9kZXNldCwKPiA+ID4gPiA+ID4gYW5kCj4gPiA+ID4gPiA+IHRoZW4KPiA+ID4g PiA+ID4gLQkJICogZ29pbmcgYmFjayB1cCBzb29uIGFmdGVyLiBBbmQgb25jZSB0aGF0Cj4gPiA+ ID4gPiA+IGhhcHBlbnMgd2UKPiA+ID4gPiA+ID4gbXVzdAo+ID4gPiA+ID4gPiAtCQkgKiByZXRy YWluIHRoZSBsaW5rIHRvIGdldCBhIHBpY3R1cmUuIFRoYXQncyBpbgo+ID4gPiA+ID4gPiBjYXNl Cj4gPiA+ID4gPiA+IG5vCj4gPiA+ID4gPiA+IC0JCSAqIHVzZXJzcGFjZSBjb21wb25lbnQgcmVh Y3RlZCB0byBpbnRlcm1pdHRlbnQKPiA+ID4gPiA+ID4gSFBECj4gPiA+ID4gPiA+IGRpcC4KPiA+ ID4gPiA+ID4gLQkJICovCj4gPiA+ID4gPiA+IC0JCWludGVsX2RwX2NoZWNrX2xpbmtfc3RhdHVz KGludGVsX2RwKTsKPiA+ID4gPiA+ID4gIAl9Cj4gPiA+ID4gPiA+ICAKPiA+ID4gPiA+ID4gIAkv Kgo+ID4gPiA+ID4gPiBAQCAtNTM0MCwzNyArNTM5NywxMCBAQCBpbnRlbF9kcF9ocGRfcHVsc2Uo c3RydWN0Cj4gPiA+ID4gPiA+IGludGVsX2RpZ2l0YWxfcG9ydAo+ID4gPiA+ID4gPiAqaW50ZWxf ZGlnX3BvcnQsIGJvb2wgbG9uZ19ocGQpCj4gPiA+ID4gPiA+ICAJfQo+ID4gPiA+ID4gPiAgCj4g PiA+ID4gPiA+ICAJaWYgKCFpbnRlbF9kcC0+aXNfbXN0KSB7Cj4gPiA+ID4gPiA+IC0JCXN0cnVj dCBkcm1fbW9kZXNldF9hY3F1aXJlX2N0eCBjdHg7Cj4gPiA+ID4gPiA+IC0JCXN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uZWN0b3IgPSAmaW50ZWxfZHAtCj4gPiA+ID4gPiA+ID4gYXR0YWNoZWRf Y29ubmVjdG9yLT5iYXNlOwo+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gLQkJc3RydWN0IGRybV9j cnRjICpjcnRjOwo+ID4gPiA+ID4gPiAtCQlpbnQgaXJldDsKPiA+ID4gPiA+ID4gLQkJYm9vbCBo YW5kbGVkID0gZmFsc2U7Cj4gPiA+ID4gPiA+IC0KPiA+ID4gPiA+ID4gLQkJZHJtX21vZGVzZXRf YWNxdWlyZV9pbml0KCZjdHgsIDApOwo+ID4gPiA+ID4gPiAtcmV0cnk6Cj4gPiA+ID4gPiA+IC0J CWlyZXQgPSBkcm1fbW9kZXNldF9sb2NrKCZkZXZfcHJpdi0KPiA+ID4gPiA+ID4gPiBkcm0ubW9k ZV9jb25maWcuY29ubmVjdGlvbl9tdXRleCwgJmN0eCk7Cj4gPiA+ID4gPiA+IAo+ID4gPiA+ID4g PiAtCQlpZiAoaXJldCkKPiA+ID4gPiA+ID4gLQkJCWdvdG8gZXJyOwo+ID4gPiA+ID4gPiAtCj4g PiA+ID4gPiA+IC0JCWNydGMgPSBjb25uZWN0b3ItPnN0YXRlLT5jcnRjOwo+ID4gPiA+ID4gPiAt CQlpZiAoY3J0Yykgewo+ID4gPiA+ID4gPiAtCQkJaXJldCA9IGRybV9tb2Rlc2V0X2xvY2soJmNy dGMtPm11dGV4LAo+ID4gPiA+ID4gPiAmY3R4KTsKPiA+ID4gPiA+ID4gLQkJCWlmIChpcmV0KQo+ ID4gPiA+ID4gPiAtCQkJCWdvdG8gZXJyOwo+ID4gPiA+ID4gPiAtCQl9Cj4gPiA+ID4gPiA+ICsJ CWJvb2wgaGFuZGxlZDsKPiA+ID4gPiA+ID4gIAo+ID4gPiA+ID4gPiAgCQloYW5kbGVkID0gaW50 ZWxfZHBfc2hvcnRfcHVsc2UoaW50ZWxfZHApOwo+ID4gPiA+ID4gPiAgCj4gPiA+ID4gPiA+IC1l cnI6Cj4gPiA+ID4gPiA+IC0JCWlmIChpcmV0ID09IC1FREVBRExLKSB7Cj4gPiA+ID4gPiA+IC0J CQlkcm1fbW9kZXNldF9iYWNrb2ZmKCZjdHgpOwo+ID4gPiA+ID4gPiAtCQkJZ290byByZXRyeTsK PiA+ID4gPiA+ID4gLQkJfQo+ID4gPiA+ID4gPiAtCj4gPiA+ID4gPiA+IC0JCWRybV9tb2Rlc2V0 X2Ryb3BfbG9ja3MoJmN0eCk7Cj4gPiA+ID4gPiA+IC0JCWRybV9tb2Rlc2V0X2FjcXVpcmVfZmlu aSgmY3R4KTsKPiA+ID4gPiA+ID4gLQkJV0FSTihpcmV0LCAiQWNxdWlyaW5nIG1vZGVzZXQgbG9j a3MgZmFpbGVkIHdpdGgKPiA+ID4gPiA+ID4gJWlcbiIsIGlyZXQpOwo+ID4gPiA+ID4gPiAtCj4g PiA+ID4gPiA+ICAJCS8qIFNob3J0IHB1bHNlIGNhbiBzaWduaWZ5IGxvc3Mgb2YgaGRjcAo+ID4g PiA+ID4gPiBhdXRoZW50aWNhdGlvbiAqLwo+ID4gPiA+ID4gPiAgCQlpbnRlbF9oZGNwX2NoZWNr X2xpbmsoaW50ZWxfZHAtCj4gPiA+ID4gPiA+ID5hdHRhY2hlZF9jb25uZWN0b3IpOwo+ID4gPiA+ ID4gPiAgCj4gPiA+ID4gPiA+IEBAIC02NDAwLDcgKzY0MzAsNyBAQCBib29sIGludGVsX2RwX2lu aXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUKPiA+ID4gPiA+ID4gKmRldl9wcml2LAo+ID4gPiA+ ID4gPiAgCQkJICAgICAiRFAgJWMiLCBwb3J0X25hbWUocG9ydCkpKQo+ID4gPiA+ID4gPiAgCQln b3RvIGVycl9lbmNvZGVyX2luaXQ7Cj4gPiA+ID4gPiA+ICAKPiA+ID4gPiA+ID4gLQlpbnRlbF9l bmNvZGVyLT5ob3RwbHVnID0gaW50ZWxfZW5jb2Rlcl9ob3RwbHVnOwo+ID4gPiA+ID4gPiArCWlu dGVsX2VuY29kZXItPmhvdHBsdWcgPSBpbnRlbF9kcF9ob3RwbHVnOwo+ID4gPiA+ID4gPiAgCWlu dGVsX2VuY29kZXItPmNvbXB1dGVfY29uZmlnID0gaW50ZWxfZHBfY29tcHV0ZV9jb25maWc7Cj4g PiA+ID4gPiA+ICAJaW50ZWxfZW5jb2Rlci0+Z2V0X2h3X3N0YXRlID0gaW50ZWxfZHBfZ2V0X2h3 X3N0YXRlOwo+ID4gPiA+ID4gPiAgCWludGVsX2VuY29kZXItPmdldF9jb25maWcgPSBpbnRlbF9k cF9nZXRfY29uZmlnOwo+ID4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfZHJ2LmgKPiA+ID4gPiA+ID4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9k cnYuaAo+ID4gPiA+ID4gPiBpbmRleCA1ZWExZGMzZjYzYmYuLmRkZjI4YTQ0MmNkNyAxMDA2NDQK PiA+ID4gPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPiA+ID4g PiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPiA+ID4gPiA+ID4g QEAgLTE2MTEsNiArMTYxMSw4IEBAIGludAo+ID4gPiA+ID4gPiBpbnRlbF9kcF9nZXRfbGlua190 cmFpbl9mYWxsYmFja192YWx1ZXMoc3RydWN0Cj4gPiA+ID4gPiA+IGludGVsX2RwICppbnRlbF9k cCwKPiA+ID4gPiA+ID4gIAkJCQkJICAgIGludCBsaW5rX3JhdGUsCj4gPiA+ID4gPiA+IHVpbnQ4 X3QKPiA+ID4gPiA+ID4gbGFuZV9jb3VudCk7Cj4gPiA+ID4gPiA+ICB2b2lkIGludGVsX2RwX3N0 YXJ0X2xpbmtfdHJhaW4oc3RydWN0IGludGVsX2RwICppbnRlbF9kcCk7Cj4gPiA+ID4gPiA+ICB2 b2lkIGludGVsX2RwX3N0b3BfbGlua190cmFpbihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKTsK PiA+ID4gPiA+ID4gK2ludCBpbnRlbF9kcF9yZXRyYWluX2xpbmsoc3RydWN0IGludGVsX2VuY29k ZXIgKmVuY29kZXIsCj4gPiA+ID4gPiA+ICsJCQkgIHN0cnVjdCBkcm1fbW9kZXNldF9hY3F1aXJl X2N0eCAqY3R4KTsKPiA+ID4gPiA+ID4gIHZvaWQgaW50ZWxfZHBfc2lua19kcG1zKHN0cnVjdCBp bnRlbF9kcCAqaW50ZWxfZHAsIGludCBtb2RlKTsKPiA+ID4gPiA+ID4gIHZvaWQgaW50ZWxfZHBf ZW5jb2Rlcl9yZXNldChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpOwo+ID4gPiA+ID4gPiAg dm9pZCBpbnRlbF9kcF9lbmNvZGVyX3N1c3BlbmQoc3RydWN0IGludGVsX2VuY29kZXIKPiA+ID4g PiA+ID4gKmludGVsX2VuY29kZXIpOwo+ID4gPiA+IAo+ID4gPiA+IC0tIAo+ID4gPiA+IFZpbGxl IFN5cmrDpGzDpAo+ID4gPiA+IEludGVsIE9UQwo+ID4gPiA+IF9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gPiA+ID4gSW50ZWwtZ2Z4IG1haWxpbmcgbGlz dAo+ID4gPiA+IEludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiA+ID4gPiBodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo+ID4gCj4g PiAtLSAKPiA+IENoZWVycywKPiA+IAlMeXVkZSBQYXVsCi0tIApDaGVlcnMsCglMeXVkZSBQYXVs Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdm eCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=