From mboxrd@z Thu Jan 1 00:00:00 1970 From: Manasi Navare Subject: Re: [PATCH v2 4/4] drm/i915: Implement Link Rate fallback on Link training failure Date: Tue, 1 Nov 2016 17:29:08 -0700 Message-ID: <20161102002908.GB21605@intel.com> References: <1477703245-27375-1-git-send-email-manasi.d.navare@intel.com> <1477703245-27375-5-git-send-email-manasi.d.navare@intel.com> <87shrbk2k5.fsf@intel.com> <20161101162623.GA21517@intel.com> <87a8djj9ir.fsf@intel.com> <20161101193437.GA21605@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTPS id 476E76E413 for ; Wed, 2 Nov 2016 00:27:23 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20161101193437.GA21605@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Jani Nikula Cc: Daniel Vetter , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVHVlLCBOb3YgMDEsIDIwMTYgYXQgMTI6MzQ6MzdQTSAtMDcwMCwgTWFuYXNpIE5hdmFyZSB3 cm90ZToKPiBPbiBUdWUsIE5vdiAwMSwgMjAxNiBhdCAwOToxNjoyOFBNICswMjAwLCBKYW5pIE5p a3VsYSB3cm90ZToKPiA+IE9uIFR1ZSwgMDEgTm92IDIwMTYsIE1hbmFzaSBOYXZhcmUgPG1hbmFz aS5kLm5hdmFyZUBpbnRlbC5jb20+IHdyb3RlOgo+ID4gPiBPbiBUdWUsIE5vdiAwMSwgMjAxNiBh dCAxMDo0OToxNEFNICswMjAwLCBKYW5pIE5pa3VsYSB3cm90ZToKPiA+ID4+IE9uIFNhdCwgMjkg T2N0IDIwMTYsIE1hbmFzaSBOYXZhcmUgPG1hbmFzaS5kLm5hdmFyZUBpbnRlbC5jb20+IHdyb3Rl Ogo+ID4gPj4gPiBJZiBsaW5rIHRyYWluaW5nIGF0IGEgbGluayByYXRlIG9wdGltYWwgZm9yIGEg cGFydGljdWxhcgo+ID4gPj4gPiBtb2RlIGZhaWxzIGR1cmluZyBtb2Rlc2V0J3MgYXRvbWljIGNv bW1pdCBwaGFzZSwgdGhlbiB3ZQo+ID4gPj4gPiBsZXQgdGhlIG1vZGVzZXQgY29tcGxldGUgYW5k IHRoZW4gcmV0cnkuIFdlIHNhdmUgdGhlIGxpbmsgcmF0ZQo+ID4gPj4gPiB2YWx1ZSBhdCB3aGlj aCBsaW5rIHRyYWluaW5nIGZhaWxlZCwgdXBkYXRlIHRoZSBsaW5rIHN0YXR1cyBwcm9wZXJ0eQo+ ID4gPj4gPiB0byAiQkFEIiBhbmQgdXNlIGEgbG93ZXIgbGluayByYXRlIHRvIHBydW5lIHRoZSBt b2Rlcy4gSXQgd2lsbCByZWRvCj4gPiA+PiA+IHRoZSBtb2Rlc2V0IG9uIHRoZSBjdXJyZW50IG1v ZGUgYXQgbG93ZXIgbGluayByYXRlIG9yIGlmIHRoZSBjdXJyZW50Cj4gPiA+PiA+IG1vZGUgZ2V0 cyBwcnVuZWQgZHVlIHRvIGxvd2VyIGxpbmsgY29uc3RyYWludHMgdGhlbiwgaXQgd2lsbCBzZW5k IGEKPiA+ID4+ID4gaG90cGx1ZyB1ZXZlbnQgZm9yIHVzZXJzcGFjZSB0byBoYW5kbGUgaXQuCj4g PiA+PiA+Cj4gPiA+PiA+IFRoaXMgaXMgYWxzbyByZXF1aXJlZCB0byBwYXNzIERQIENUUyB0ZXN0 cyA0LjMuMS4zLCA0LjMuMS40LAo+ID4gPj4gPiA0LjMuMS42Lgo+ID4gPj4gPgo+ID4gPj4gPiB2 MjoKPiA+ID4+ID4gKiBTcXVhc2hlZCBhIGZldyBwYXRjaGVzIChKYW5pIE5pa3VsYSkKPiA+ID4+ ID4KPiA+ID4+ID4gQ2M6IEphbmkgTmlrdWxhIDxqYW5pLm5pa3VsYUBsaW51eC5pbnRlbC5jb20+ Cj4gPiA+PiA+IENjOiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGludGVsLmNvbT4KPiA+ ID4+ID4gQ2M6IFZpbGxlIFN5cmphbGEgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPgo+ ID4gPj4gPiBTaWduZWQtb2ZmLWJ5OiBNYW5hc2kgTmF2YXJlIDxtYW5hc2kuZC5uYXZhcmVAaW50 ZWwuY29tPgo+ID4gPj4gPiAtLS0KPiA+ID4+ID4gIGRyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWlj X2hlbHBlci5jICAgICAgICAgICB8ICA0ICsrCj4gPiA+PiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9kZGkuYyAgICAgICAgICAgICAgfCAyMyArKysrKysrKy0KPiA+ID4+ID4gIGRyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMgICAgICAgICAgICAgICB8IDc0ICsrKysrKysrKysr KysrKysrKysrKysrKystLQo+ID4gPj4gPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHBf bGlua190cmFpbmluZy5jIHwgMTIgKysrLS0KPiA+ID4+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2Rydi5oICAgICAgICAgICAgICB8ICA1ICstCj4gPiA+PiA+ICA1IGZpbGVzIGNoYW5n ZWQsIDExMCBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQo+ID4gPj4gPgo+ID4gPj4gPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfaGVscGVyLmMgYi9kcml2ZXJz L2dwdS9kcm0vZHJtX2F0b21pY19oZWxwZXIuYwo+ID4gPj4gPiBpbmRleCA3NWFkMDFkLi5hM2Rm M2E0IDEwMDY0NAo+ID4gPj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pY19oZWxw ZXIuYwo+ID4gPj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pY19oZWxwZXIuYwo+ ID4gPj4gPiBAQCAtNTE5LDYgKzUxOSwxMCBAQCBzdGF0aWMgaW50IGhhbmRsZV9jb25mbGljdGlu Z19lbmNvZGVycyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCj4gPiA+PiA+ICAJCQkJ CSAgICAgICBjb25uZWN0b3Jfc3RhdGUpOwo+ID4gPj4gPiAgCQlpZiAocmV0KQo+ID4gPj4gPiAg CQkJcmV0dXJuIHJldDsKPiA+ID4+ID4gKwo+ID4gPj4gPiArCQljcnRjX3N0YXRlID0gZHJtX2F0 b21pY19nZXRfZXhpc3RpbmdfY3J0Y19zdGF0ZShzdGF0ZSwgY29ubmVjdG9yLT5zdGF0ZS0+Y3J0 Yyk7Cj4gPiA+PiA+ICsJCWlmIChjb25uZWN0b3ItPmxpbmtfc3RhdHVzID09IERSTV9NT0RFX0xJ TktfU1RBVFVTX0JBRCkKPiA+ID4+ID4gKwkJCWNydGNfc3RhdGUtPmNvbm5lY3RvcnNfY2hhbmdl ZCA9IHRydWU7Cj4gPiA+PiA+ICAJfQo+ID4gPj4gPiAgCj4gPiA+PiA+ICAJLyoKPiA+ID4+ID4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RkaS5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZGRpLmMKPiA+ID4+ID4gaW5kZXggOTM4YWM0ZC4uMzE5ZWVjYSAx MDA2NDQKPiA+ID4+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGRpLmMKPiA+ ID4+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGRpLmMKPiA+ID4+ID4gQEAg LTE2ODQsNiArMTY4NCw4IEBAIHN0YXRpYyB2b2lkIGludGVsX2RkaV9wcmVfZW5hYmxlX2RwKHN0 cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAo+ID4gPj4gPiAgCXN0cnVjdCBpbnRlbF9kcCAq aW50ZWxfZHAgPSBlbmNfdG9faW50ZWxfZHAoJmVuY29kZXItPmJhc2UpOwo+ID4gPj4gPiAgCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZW5jb2Rlci0+YmFzZS5k ZXYpOwo+ID4gPj4gPiAgCWVudW0gcG9ydCBwb3J0ID0gaW50ZWxfZGRpX2dldF9lbmNvZGVyX3Bv cnQoZW5jb2Rlcik7Cj4gPiA+PiA+ICsJc3RydWN0IGludGVsX2Nvbm5lY3RvciAqaW50ZWxfY29u bmVjdG9yID0gaW50ZWxfZHAtPmF0dGFjaGVkX2Nvbm5lY3RvcjsKPiA+ID4+ID4gKwlzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yID0gJmludGVsX2Nvbm5lY3Rvci0+YmFzZTsKPiA+ID4+ ID4gIAo+ID4gPj4gPiAgCWludGVsX2RwX3NldF9saW5rX3BhcmFtcyhpbnRlbF9kcCwgbGlua19y YXRlLCBsYW5lX2NvdW50LAo+ID4gPj4gPiAgCQkJCSBsaW5rX21zdCk7Cj4gPiA+PiA+IEBAIC0x Njk0LDcgKzE2OTYsMjYgQEAgc3RhdGljIHZvaWQgaW50ZWxfZGRpX3ByZV9lbmFibGVfZHAoc3Ry dWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCj4gPiA+PiA+ICAJaW50ZWxfcHJlcGFyZV9kcF9k ZGlfYnVmZmVycyhlbmNvZGVyKTsKPiA+ID4+ID4gIAlpbnRlbF9kZGlfaW5pdF9kcF9idWZfcmVn KGVuY29kZXIpOwo+ID4gPj4gPiAgCWludGVsX2RwX3NpbmtfZHBtcyhpbnRlbF9kcCwgRFJNX01P REVfRFBNU19PTik7Cj4gPiA+PiA+IC0JaW50ZWxfZHBfc3RhcnRfbGlua190cmFpbihpbnRlbF9k cCk7Cj4gPiA+PiA+ICsJaWYgKCFpbnRlbF9kcF9zdGFydF9saW5rX3RyYWluKGludGVsX2RwKSkg ewo+ID4gPj4gPiArCQlEUk1fREVCVUdfS01TKCJMaW5rIFRyYWluaW5nIGZhaWxlZCBhdCBsaW5r IHJhdGUgPSAlZCwgbGFuZSBjb3VudCA9ICVkIiwKPiA+ID4+ID4gKwkJCSAgICAgIGxpbmtfcmF0 ZSwgbGFuZV9jb3VudCk7Cj4gPiA+PiA+ICsJCWludGVsX2RwLT5saW5rX3RyYWluX2ZhaWxlZCA9 IHRydWU7Cj4gPiA+PiA+ICsJCWludGVsX2RwX2dldF9saW5rX3RyYWluX2ZhbGxiYWNrX3ZhbHVl cyhpbnRlbF9kcCwgbGlua19yYXRlLAo+ID4gPj4gPiArCQkJCQkJCWxhbmVfY291bnQpOwo+ID4g Pj4gPiArCQkvKiBTY2hlZHVsZSBhIEhvdHBsdWcgVWV2ZW50IHRvIHVzZXJzcGFjZSB0byBzdGFy dCBtb2Rlc2V0ICovCj4gPiA+PiA+ICsJCXNjaGVkdWxlX3dvcmsoJmludGVsX2Nvbm5lY3Rvci0+ bW9kZXNldF9yZXRyeV93b3JrKTsKPiA+ID4+IAo+ID4gPj4gVGhpcyBpcyBub3QganVzdCBhYm91 dCBEREkuIE5lZWQgdG8gZG8gdGhpcyBmb3IgdGhlIG90aGVyIGNhc2VzIHRvby4KPiA+ID4+Cj4g PiA+Cj4gPiA+IFllcywgZmlyc3Qgc2VyaWVzIHdpbGwgZyBvdXQgZm9yIGFkZGluZyB0aGlzIHN1 cHBvcnQgZm9yIERESSwgdGhlbiBtb3JlIHBhdGNoZXMKPiA+ID4gdG8gZXhwYW5kIGl0IHRvIG5v biBEREkgcGxhdGZvcm1zLgo+ID4gPgo+ID4gPiAgCj4gPiA+PiA+ICsJfSBlbHNlIHsKPiA+ID4+ ID4gKwkJRFJNX0RFQlVHX0tNUygiTGluayBUcmFpbmluZyBQYXNzZWQgYXQgTGluayBSYXRlID0g JWQsIExhbmUgY291bnQgPSAlZCIsCj4gPiA+PiA+ICsJCQkgICAgICBsaW5rX3JhdGUsIGxhbmVf Y291bnQpOwo+ID4gPj4gPiArCQlpbnRlbF9kcC0+bGlua190cmFpbl9mYWlsZWQgPSBmYWxzZTsK PiA+ID4+ID4gKwkJaW50ZWxfZHAtPmZhbGxiYWNrX2xpbmtfcmF0ZV9pbmRleCA9IC0xOwo+ID4g Pj4gPiArCQlpbnRlbF9kcC0+ZmFsbGJhY2tfbGlua19yYXRlID0gMDsKPiA+ID4+ID4gKwkJaW50 ZWxfZHAtPmZhbGxiYWNrX2xhbmVfY291bnQgPSAwOwo+ID4gPj4gPiArCQljb25uZWN0b3ItPmxp bmtfc3RhdHVzID0gRFJNX01PREVfTElOS19TVEFUVVNfR09PRDsKPiA+ID4+ID4gKwkJaW50ZWxf ZHBfc2V0X2xpbmtfc3RhdHVzX3Byb3BlcnR5KGNvbm5lY3RvciwKPiA+ID4+ID4gKwkJCQkJCSAg RFJNX01PREVfTElOS19TVEFUVVNfR09PRCk7Cj4gPiA+PiAKPiA+ID4+IExvb2tzIGxpa2UgeW91 IG5ldmVyIGFjdHVhbGx5IHJlYWQgY29ubmVjdG9yLT5saW5rX3N0YXR1cy4uLiBXaHkgZG8geW91 Cj4gPiA+PiBuZWVkIGJvdGggY29ubmVjdG9yLT5saW5rX3N0YXR1cyBhbmQgaW50ZWxfZHAtPmxp bmtfdHJhaW5fZmFpbGVkPyBEbyB5b3UKPiA+ID4+IHRoaW5rIHlvdSBoYXZlIDQgc3RhdGVzPyBX aGF0IGFyZSB0aGV5PyBDYW4ndCB0aGlzIGFsbCBiZSBpbiBzeW5jIHdpdGgKPiA+ID4+IHRoZSBw cm9wZXJ0eT8KPiA+ID4+IAo+ID4gPgo+ID4gPiBUaGlzIGNvbm5lY3Rvci0+bGlua19zdGF0dXMg bWVtYmVyIG9mIGRybV9Db25uZWN0b3IgZ2V0cyByZWFkIGluCj4gPiA+IGRybV9hdG9taWNfaGVs cGVyX2NoZWNrX21vZGVzZXQoKSBpbiB0aGUgZHJpdmVyIHdoZXJlIGl0IHJlYWRzIHRoaXMKPiA+ ID4gYW5kIHNldHMgY3J0Y19zdGF0ZS0+Y29ubmVjdG9yX0NoYW5nZWQgdG8gdHJ1ZSBpZiB0aGlz IGxpbmtfc3RhdHVzCj4gPiA+IGhhcyBjaGFuZ2VkLgo+ID4gPiBUaGlzIGlzIHJlcXVpcmVkIHNv IHRoYXQgdGhlIGRyaXZlciBkb2VzIGEgY29tcGxldGUgbW9kZXNldC4KPiA+ID4gVGhpcyBjb25u ZWN0b3ItPmxpbmtfc3RhdHVzIHdhcyBpbiBzeW5jIHdpdGggdGhlIHByb3BlcnR5LiBCdXQgcmVh ZGluZyB0aGUKPiA+ID4gZHJtX29iamVjdCBwcm9wZXJ0eSBpbiBkcm1fYXRvbWljX2hlbHBlcl9D aGVja19tb2Rlc2V0IHdhcyBjYXVzaW5nIHRoZSBzeXN0ZW0gdG8KPiA+ID4gbm90IGJvb3QuCj4g PiA+IGludGVsX2RwLT5saW5rX3RyYWluX2ZhaWxlZCBhbHNvIGp1c3QgaW5kaWNhdGVzIGlmIHRo ZSBsaW5rIGZhaWxlZCwgSSB3aWxsIGhhdmUgdG8gc2VlCj4gPiA+IGlmIGkgY2FuIGp1c3QgdXNl IGNvbm5lY3Rvci0+bGlua19zdGF0dXMgZm9yIHRoaXMgcHVycG9zZS4gCj4gPiAKPiA+IFBsZWFz ZSBkby4gVXN1YWxseSBpZiB5b3UgYWRkIG1vcmUgdGhhbiBvbmUgdmFyaWFibGUgZm9yIGVzc2Vu dGlhbGx5IHRoZQo+ID4gc2FtZSB0aGluZywgeW91J2xsIGVuZCB1cCBoYXZpbmcgY29tYmluYXRp b25zIG9mIHRoZSB2YXJpYWJsZXMgKHN0YXRlcykKPiA+IHRoYXQgeW91IHNob3VsZCBub3QgYmUg aW4uIEF0IGxlYXN0IHlvdSBzaG91bGQgaGF2ZSBhIGNsZWFyIGlkZWEgd2hhdAo+ID4gdGhlIHN0 YXRlcyBhcmUgd2hlcmUgbGlua190cmFpbl9mYWlsZWQgYW5kIGxpbmtfc3RhdHVzIGRpc2FncmVl Lgo+ID4KPiAKPiBJIHdpbGwgdHJ5IHRvIGNvbnZlcmdlIHRoZXNlLgo+IEhvdyBkbyB3ZSBoYW5k bGUgdGhlIGNhc2Ugd2hlcmUgaXQgaGFzIHRyaWVkIGFsbCBwb3NzaWJsZSBmYWxsYmFjayB2YWx1 ZXMsCj4gbG93ZXN0IGxpbmsgcmF0ZSBhbmQgbG93ZXN0IGxhbmUgY291bnQsIG5vdyB0aGUgbGlu ayBpcyBzdGlsbCBiYWQsCj4gRFBSIGV4cGVjdHMgZHJpdmVyIHRvIHN0b3AgbGluayB0cmFpbmlu ZyB3aXRoIEVSUk9SIHRoYXQgbGluayB0cmFpbmluZwo+IGlzIHVuc3VjY2Vzc2Z1bCBldmVuIGFm dGVyIHRyeWluZyBmYWxsYmFjay4gSW4gdGhpcyBjYXNlIHdlIHNob3VsZCBub3QKPiB0cnkgdG8g cmV0cmFpbiBhZ2FpbiBhbmQgaW4gdGhhdCBjYXNlIEkgd2FzIGp1c3Qgc2V0dGluZyBsaW5rX3Ry YWluX2ZhaWxlZAo+IHRvIGZhbHNlIGFnYWluLiBEbyB5b3UgaGF2ZSBhbnkgc3VnZ2VzdGlvbnMg b24gaG93IHRvIGhhbmRsZSB0aGlzIGNhc2UsIGRvIHdlCj4gc2VuZCB0aGUgdWV2ZW50IGluIHRo aXMgY2FzZSBhcyB3ZWxsPyBCdXQgdGhlbiB3ZSBkb250IGhhdmUgZmFsbGJhY2sgdmFsdWVzIHNp bmNlCj4gd2UgaGF2ZSBleGhhdXN0ZWQgYWxsIGZhbGxiYWNrIHZhbHVlcy4KPiAKPiAgCj4gPiA+ Cj4gPiA+PiA+ICsJfQo+ID4gPj4gPiArCj4gPiA+PiA+ICAJaWYgKHBvcnQgIT0gUE9SVF9BIHx8 IElOVEVMX0dFTihkZXZfcHJpdikgPj0gOSkKPiA+ID4+ID4gIAkJaW50ZWxfZHBfc3RvcF9saW5r X3RyYWluKGludGVsX2RwKTsKPiA+ID4+ID4gIH0KPiA+ID4+ID4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9k cC5jCj4gPiA+PiA+IGluZGV4IGZiNGZjZGQuLmQxZjBlMmMgMTAwNjQ0Cj4gPiA+PiA+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKPiA+ID4+ID4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZHAuYwo+ID4gPj4gPiBAQCAtMzU0LDggKzM1NCwxNCBAQCB2b2lk IGludGVsX2RwX2dldF9saW5rX3RyYWluX2ZhbGxiYWNrX3ZhbHVlcyhzdHJ1Y3QgaW50ZWxfZHAg KmludGVsX2RwLAo+ID4gPj4gPiAgCQl0YXJnZXRfY2xvY2sgPSBmaXhlZF9tb2RlLT5jbG9jazsK PiA+ID4+ID4gIAl9Cj4gPiA+PiA+ICAKPiA+ID4+ID4gLQltYXhfbGlua19jbG9jayA9IGludGVs X2RwX21heF9saW5rX3JhdGUoaW50ZWxfZHApOwo+ID4gPj4gPiAtCW1heF9sYW5lcyA9IGludGVs X2RwX21heF9sYW5lX2NvdW50KGludGVsX2RwKTsKPiA+ID4+ID4gKwkvKiBQcnVuZSB0aGUgbW9k ZXMgdXNpbmcgdGhlIGZhbGxiYWNrIGxpbmsgcmF0ZS9sYW5lIGNvdW50ICovCj4gPiA+PiA+ICsJ aWYgKGludGVsX2RwLT5saW5rX3RyYWluX2ZhaWxlZCkgewo+ID4gPj4gPiArCQltYXhfbGlua19j bG9jayA9IGludGVsX2RwLT5mYWxsYmFja19saW5rX3JhdGU7Cj4gPiA+PiA+ICsJCW1heF9sYW5l cyA9IGludGVsX2RwLT5mYWxsYmFja19sYW5lX2NvdW50Owo+ID4gPj4gPiArCX0gZWxzZSB7Cj4g PiA+PiA+ICsJCW1heF9saW5rX2Nsb2NrID0gaW50ZWxfZHBfbWF4X2xpbmtfcmF0ZShpbnRlbF9k cCk7Cj4gPiA+PiA+ICsJCW1heF9sYW5lcyA9IGludGVsX2RwX21heF9sYW5lX2NvdW50KGludGVs X2RwKTsKPiA+ID4+ID4gKwl9Cj4gPiA+PiA+ICAKPiA+ID4+ID4gIAltYXhfcmF0ZSA9IGludGVs X2RwX21heF9kYXRhX3JhdGUobWF4X2xpbmtfY2xvY2ssIG1heF9sYW5lcyk7Cj4gPiA+PiA+ICAJ bW9kZV9yYXRlID0gaW50ZWxfZHBfbGlua19yZXF1aXJlZCh0YXJnZXRfY2xvY2ssIDE4KTsKPiA+ ID4+ID4gQEAgLTE2NDAsNiArMTY0NiwxMiBAQCBzdGF0aWMgaW50IGludGVsX2RwX2NvbXB1dGVf YnBwKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsCj4gPiA+PiA+ICAJaWYgKGFkanVzdGVkX21v ZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19EQkxDTEspCj4gPiA+PiA+ICAJCXJldHVybiBmYWxz ZTsKPiA+ID4+ID4gIAo+ID4gPj4gPiArCS8qIEZhbGwgYmFjayB0byBsb3dlciBsaW5rIHJhdGUg aW4gY2FzZSBvZiBmYWlsdXJlIGluIHByZXZpb3VzIG1vZGVzZXQgKi8KPiA+ID4+ID4gKwlpZiAo aW50ZWxfZHAtPmxpbmtfdHJhaW5fZmFpbGVkKSB7Cj4gPiA+PiA+ICsJCW1pbl9sYW5lX2NvdW50 ID0gbWF4X2xhbmVfY291bnQgPSBpbnRlbF9kcC0+ZmFsbGJhY2tfbGFuZV9jb3VudDsKPiA+ID4+ ID4gKwkJbWluX2Nsb2NrID0gbWF4X2Nsb2NrID0gaW50ZWxfZHAtPmZhbGxiYWNrX2xpbmtfcmF0 ZV9pbmRleDsKPiA+ID4+ID4gKwl9Cj4gPiA+PiA+ICsKPiA+ID4+IAo+ID4gPj4gTXkgZ2VuZXJh bCBmZWVsaW5nIGlzIHRoYXQgdGhlcmUncyBzdGFydGluZyB0byBiZSBhIGJpdCB0b28gbXVjaCBz cGVjaWFsCj4gPiA+PiBjYXNpbmcgYXJvdW5kIHRoZSBmYWxsYmFjayB2YWx1ZXMuIEknbSBub3Qg ZGVjaWRlZCB3ZSBuZWVkIHRvIGZpeCB0aGlzCj4gPiA+PiByaWdodCBhd2F5IGluIHRoaXMgc2Vy aWVzLCBvciB3aGV0aGVyIGl0IGNhbiBiZSBmb2xsb3ctdXAgd29yay4KPiA+ID4+IAo+ID4gPj4g T25lIGlkZWEgaXMgdG8gY29tcHV0ZSB0aGUgY29tbW9uIHJhdGVzIGFuZCBsYW5lcyBvbmNlIHdo ZW4gdGhleSdyZQo+ID4gPj4gZmlyc3QgbmVlZGVkLCBhbmQgYWxsIG9mIHRoZSBoZWxwZXJzIHdv dWxkIHVzZSB0aGF0IGluZm8uIFRoZSBmYWxsYmFjawo+ID4gPj4gY29kZSB3b3VsZCBqdXN0IHRy aW0gdGhvc2UsIGFuZCB0aGUgY29uZGl0aW9uYWwgZmFsbGJhY2sgc3R1ZmYgY291bGQgYmUKPiA+ ID4+IHJlbW92ZWQgZnJvbSBhbGwgb3ZlciB0aGUgcGxhY2UuCj4gPiA+Pgo+ID4gPgo+ID4gPiBU aGVzZSBmYWxsYmFjayB2YWx1ZXMgZ2V0IGNvbXB1dGVkIGluIGEgc2VwYXJhdGUgaGVscGVyIGZ1 bmN0aW9uIHRoYXQKPiA+ID4gSSBoYXZlIGFkZGVkIGludGVsX2RwX2dldF9saW5rX3RyYWluX2Zh bGxiYWNrX3ZhbHVlcy4gSXQgaXMgdGhlCj4gPiA+IHByZXZpb3VzIHBhdGNoLiAgSSBzdG9yZSB0 aGUgZmFsbGJhY2sgdmFsdWVzIGluIGludGVsX2RwIG9uZSBhdCBhIHRpbWUKPiA+ID4gYmVjYXVz ZSBmb3IgdGhhdCBpdGVyYXRpb24gb2YgbW9kZXNldCB3ZSBvbmx5IG5lZWQgdG8gdHJ5IHRoZQo+ ID4gPiBmYWxsYmFja19saW5rX3JhdGUgYW5kIGZhbGxiYWNrX2xhbmVfY291bnQgc28gd2UgZG9u dCBuZWVkIGFuIGFycmF5Cj4gPiA+IGhlcmUuCj4gPiAKPiA+IFN1cmUuIEknbSAqbm90KiByZWZl cnJpbmcgdG8gbXkgZWFybGllciBzdWdnZXN0aW9uIG9mIHN0b3JpbmcgZmFpbGluZwo+ID4gbGlu ayByYXRlLCBsYW5lIGNvdW50IHBhaXJzIChhbHRob3VnaCBJIHRoaW5rIHdlJ2xsIG5lZWQgdGhh dAo+ID4gZXZlbnR1YWxseSkuCj4gPiAKPiA+ID4gQXJlIHlvdSBzdWdnZXN0aW5nIGp1c3QgY2hh bmdpbmcgdGhlIGNvbW1vbl9yYXRlcyBhcnJheSBpdHNlbGYgdG8gZ2V0Cj4gPiA+IHRyaW1tZWQg dG8gdXNlIHRoZSB0cmltbWVkIGZhbGxiYWNrIHZhbHVlcyBhZnRlciBsaW5rIHRyYWluaW5nIGZh aWxzPwo+ID4gPiBDb3VsZCB5b3UgcGxlYXNlIGVsYWJvcmF0ZSB5b3VyIHRob3VnaHQ/Cj4gPiAK PiA+IEknbSBub3Qgc2F5aW5nIHlvdSBzaG91bGQgY2hhbmdlIHRoaXMgbm93LiBCdXQgaGF2aW5n IGEgbG90IG9mIGNvZGUKPiA+IGNoZWNrIHNvbWUgZmFsbGJhY2sgc3R1ZmYgaXMgdWdseSBhbmQg ZXJyb3IgcHJvbmUuIEknbSBqdXN0IGRvY3VtZW50aW5nCj4gPiB0aGUgaWRlYXMgdG8gbWFrZSB0 aGlzIGJldHRlci4KPiA+IAo+ID4gSSB0aGluayB0aGlzIGNvdWxkIGJlIGZpeGVkIGJ5IHN0b3Jp bmcgdGhlIGNvbW1vbiByYXRlcyBhcnJheSBhbmQgbWF4Cj4gPiBsYW5lcyBpbiBpbnRlbF9kcCwg aW5zdGVhZCBvZiBoYXZpbmcgdGhlbSBsb2NhbGx5IGluIGEgZmV3IGZ1bmN0aW9ucywKPiA+IGFu ZCB0aGVuIG1ha2luZyB0aGUgbGluayByYXRlIGFuZCBsYW5lIGNvdW50aW5nIGZ1bmN0aW9ucyBh d2FyZSBvZiB0aGUKPiA+IGZhbGxiYWNrIHN0dWZmLiBFaXRoZXIgdGhlIGZ1bmN0aW9ucyB3b3Vs ZCBjaGVjayBmb3IgdGhlIGZhbGxiYWNrcywKPiA+IGNlbnRyYWxpemluZyB0aGUgY2hlY2tzIGlu IG9uZSBwbGFjZSwgYW5kL29yIHRoZSBmYWxsYmFjayBjb2RlIHdvdWxkCj4gPiBtb2RpZnkgdGhl IGNvbW1vbiB2YWx1ZXMgc3RvcmVkIGluIGludGVsX2RwLCBzbyB0aGF0IHRoZSBsaW5rIHJhdGUg YW5kCj4gPiBsYW5lIGNvdW50aW5nIGZ1bmN0aW9ucyB3b3VsZCBqdXN0IHdvcmsgd2l0aCB0aGUg ZmFsbGJhY2tzLiBDb2RlIHdvdWxkCj4gPiBiZSBzaW1wbGVyIG92ZXJhbGwuCj4gPiAKPiAKPiBB Z2FpbiB0aGlzIG1pZ2h0IGludm9sdmUgYSBsb3QgbW9yZSBjaGFuZ2VzIHNpbmNlIHdlIHdvdWxk IGhhdmUgdG8gY2hhbmdlCj4gYWxsIHRoZSBoZWxwZXIgZnVuY3Rpb25zIHRoYXQgY3VyZXJudGx5 IGNhbGN1bGF0ZSBtYXggbGFuZXMgYW5kIGNvbW1vbl9yYXRlcwo+IGJ1dCB0aGlzIGNhbiBkZWZp bml0ZWx5IGJlIGRvbmUgaW4gdGhlIG5leHQgcm91bmQgb2YgY2xlYW4gdXAgYWZ0ZXIgdGhlc2Ug Cj4gcGF0Y2hlcyBsYW5kLiBCdXQgbmV2ZXJ0aGVsZXNzIEkgd2lsbCBzZWUgaWYgSSBjYW4gdXBk YXRlIHRoZSBjb21tb25fcmF0ZXMKPiBhcnJheSBub3cgd2l0aCBmYWxsYmFjayB2YWx1ZXMgaW5z dGVhZCBvZiBzdG9yaW5nIGZhbGxiY2sgdmFsdWVzIHNlcGFyYXRlbHkKPiBpbiB0aGUgaW50ZWxf ZHAgc3RydWN0dXJlLgo+IAo+IE1hbmFzaQo+ID4gPiAgCj4gPiA+PiA+ICAJRFJNX0RFQlVHX0tN UygiRFAgbGluayBjb21wdXRhdGlvbiB3aXRoIG1heCBsYW5lIGNvdW50ICVpICIKPiA+ID4+ID4g IAkJICAgICAgIm1heCBidyAlZCBwaXhlbCBjbG9jayAlaUtIelxuIiwKPiA+ID4+ID4gIAkJICAg ICAgbWF4X2xhbmVfY291bnQsIGNvbW1vbl9yYXRlc1ttYXhfY2xvY2tdLAo+ID4gPj4gPiBAQCAt NDQyMyw2ICs0NDM1LDEzIEBAIHN0YXRpYyBib29sIGludGVsX2RpZ2l0YWxfcG9ydF9jb25uZWN0 ZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ID4gPj4gPiAgCQlpbnRlbF9k cC0+Y29tcGxpYW5jZV90ZXN0X2FjdGl2ZSA9IDA7Cj4gPiA+PiA+ICAJCWludGVsX2RwLT5jb21w bGlhbmNlX3Rlc3RfdHlwZSA9IDA7Cj4gPiA+PiA+ICAJCWludGVsX2RwLT5jb21wbGlhbmNlX3Rl c3RfZGF0YSA9IDA7Cj4gPiA+PiA+ICsJCWludGVsX2RwLT5saW5rX3RyYWluX2ZhaWxlZCA9IGZh bHNlOwo+ID4gPj4gPiArCQlpbnRlbF9kcC0+ZmFsbGJhY2tfbGlua19yYXRlX2luZGV4ID0gLTE7 Cj4gPiA+PiA+ICsJCWludGVsX2RwLT5mYWxsYmFja19saW5rX3JhdGUgPSAwOwo+ID4gPj4gPiAr CQlpbnRlbF9kcC0+ZmFsbGJhY2tfbGFuZV9jb3VudCA9IDA7Cj4gPiA+PiA+ICsJCWNvbm5lY3Rv ci0+bGlua19zdGF0dXMgPSBEUk1fTU9ERV9MSU5LX1NUQVRVU19HT09EOwo+ID4gPj4gPiArCQlp bnRlbF9kcF9zZXRfbGlua19zdGF0dXNfcHJvcGVydHkoY29ubmVjdG9yLAo+ID4gPj4gPiArCQkJ CQkJICBEUk1fTU9ERV9MSU5LX1NUQVRVU19HT09EKTsKPiA+ID4+ID4gIAo+ID4gPj4gPiAgCQlp ZiAoaW50ZWxfZHAtPmlzX21zdCkgewo+ID4gPj4gPiAgCQkJRFJNX0RFQlVHX0tNUygiTVNUIGRl dmljZSBtYXkgaGF2ZSBkaXNhcHBlYXJlZCAlZCB2cyAlZFxuIiwKPiA+ID4+ID4gQEAgLTQ1MTQs OCArNDUzMywxMiBAQCBzdGF0aWMgYm9vbCBpbnRlbF9kaWdpdGFsX3BvcnRfY29ubmVjdGVkKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiA+ID4+ID4gIAlEUk1fREVCVUdfS01T KCJbQ09OTkVDVE9SOiVkOiVzXVxuIiwKPiA+ID4+ID4gIAkJICAgICAgY29ubmVjdG9yLT5iYXNl LmlkLCBjb25uZWN0b3ItPm5hbWUpOwo+ID4gPj4gPiAgCj4gPiA+PiA+ICsJLyogSWYgdGhpcyBp cyBhIHJldHJ5IGR1ZSB0byBsaW5rIHRyaWFuaW5nIGZhaWx1cmUgKi8KPiA+ID4+ID4gKwlpZiAo c3RhdHVzID09IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkICYmIGludGVsX2RwLT5saW5rX3Ry YWluX2ZhaWxlZCkKPiA+ID4+ID4gKwkJcmV0dXJuIHN0YXR1czsKPiA+ID4+ID4gKwo+ID4gPj4g PiAgCS8qIElmIGZ1bGwgZGV0ZWN0IGlzIG5vdCBwZXJmb3JtZWQgeWV0LCBkbyBhIGZ1bGwgZGV0 ZWN0ICovCj4gPiA+PiA+IC0JaWYgKCFpbnRlbF9kcC0+ZGV0ZWN0X2RvbmUpCj4gPiA+PiA+ICsJ aWYgKCFpbnRlbF9kcC0+ZGV0ZWN0X2RvbmUgJiYgIWludGVsX2RwLT5saW5rX3RyYWluX2ZhaWxl ZCkKPiA+ID4+ID4gIAkJc3RhdHVzID0gaW50ZWxfZHBfbG9uZ19wdWxzZShpbnRlbF9kcC0+YXR0 YWNoZWRfY29ubmVjdG9yKTsKPiA+ID4+ID4gIAo+ID4gPj4gPiAgCWludGVsX2RwLT5kZXRlY3Rf ZG9uZSA9IGZhbHNlOwo+ID4gPj4gPiBAQCAtNTY5Miw2ICs1NzE1LDQ3IEBAIHN0YXRpYyBib29s IGludGVsX2VkcF9pbml0X2Nvbm5lY3RvcihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLAo+ID4g Pj4gPiAgCXJldHVybiBmYWxzZTsKPiA+ID4+ID4gIH0KPiA+ID4+ID4gIAo+ID4gPj4gPiArc3Rh dGljIHZvaWQgaW50ZWxfZHBfbW9kZXNldF9yZXRyeV93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVj dCAqd29yaykKPiA+ID4+ID4gK3sKPiA+ID4+ID4gKwlzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpp bnRlbF9jb25uZWN0b3I7Cj4gPiA+PiA+ICsJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rv cjsKPiA+ID4+ID4gKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTsKPiA+ID4+ID4gKwli b29sIHZlcmJvc2VfcHJ1bmUgPSB0cnVlOwo+ID4gPj4gPiArCWJvb2wgcmVwcm9iZSA9IGZhbHNl Owo+ID4gPj4gPiArCj4gPiA+PiA+ICsJaW50ZWxfY29ubmVjdG9yID0gY29udGFpbmVyX29mKHdv cmssIHR5cGVvZigqaW50ZWxfY29ubmVjdG9yKSwKPiA+ID4+ID4gKwkJCQkgICAgICAgbW9kZXNl dF9yZXRyeV93b3JrKTsKPiA+ID4+ID4gKwljb25uZWN0b3IgPSAmaW50ZWxfY29ubmVjdG9yLT5i YXNlOwo+ID4gPj4gPiArCj4gPiA+PiA+ICsJLyogR3JhYiB0aGUgbG9ja3MgYmVmb3JlIGNoYW5n aW5nIGNvbm5lY3RvciBwcm9wZXJ0eSovCj4gPiA+PiA+ICsJbXV0ZXhfbG9jaygmY29ubmVjdG9y LT5kZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKPiA+ID4+ID4gKwlEUk1fREVCVUdfS01TKCJbQ09O TkVDVE9SOiVkOiVzXVxuIiwgY29ubmVjdG9yLT5iYXNlLmlkLAo+ID4gPj4gPiArCQkgICAgICBj b25uZWN0b3ItPm5hbWUpOwo+ID4gPj4gPiArCWxpc3RfZm9yX2VhY2hfZW50cnkobW9kZSwgJmNv bm5lY3Rvci0+bW9kZXMsIGhlYWQpIHsKPiA+ID4+ID4gKwkJbW9kZS0+c3RhdHVzID0gaW50ZWxf ZHBfbW9kZV92YWxpZChjb25uZWN0b3IsCj4gPiA+PiA+ICsJCQkJCQkgICBtb2RlKTsKPiA+ID4+ ID4gKwkJaWYgKG1vZGUtPnN0YXR1cyAhPSBNT0RFX09LKQo+ID4gPj4gPiArCQkJcmVwcm9iZSA9 IHRydWU7Cj4gPiA+PiA+ICsJfQo+ID4gPj4gPiArCWRybV9tb2RlX3BydW5lX2ludmFsaWQoY29u bmVjdG9yLT5kZXYsICZjb25uZWN0b3ItPm1vZGVzLAo+ID4gPj4gPiArCQkJICAgICAgIHZlcmJv c2VfcHJ1bmUpOwo+ID4gPj4gPiArCj4gPiA+PiA+ICsJLyogU2V0IGNvbm5lY3RvciBsaW5rIHN0 YXR1cyB0byBCQUQgb25seSBpZiBtb2Rlc2V0IHJlcXVpcmVkCj4gPiA+PiA+ICsJICogZm9yIHRo ZSBjdXJyZW50IG1vZGUsIGlmIG1vZGUgbGlzdCBjaGFuZ2VkIHRoZW4ganVzdCBzZW5kIHVldmVu dAo+ID4gPj4gPiArCSAqIHNvIHRoYXQgaXQgY2FuIHJlcHJvYmUgdGhlIGNvbm5lY3RvcnMgYW5k IHZhbGlkYXRlIG1vZGVzIGFuZCBkbwo+ID4gPj4gPiArCSAqIGEgbW9kZXNldCBvbiBhIGRpZmZl cmVudCB2YWxpZCBtb2RlLgo+ID4gPj4gPiArCSAqLwo+ID4gPj4gPiArCWlmICghcmVwcm9iZSkg ewo+ID4gPj4gPiArCQljb25uZWN0b3ItPmxpbmtfc3RhdHVzID0gRFJNX01PREVfTElOS19TVEFU VVNfQkFEOwo+ID4gPj4gPiArCQlpbnRlbF9kcF9zZXRfbGlua19zdGF0dXNfcHJvcGVydHkoY29u bmVjdG9yLAo+ID4gPj4gPiArCQkJCQkJICBEUk1fTU9ERV9MSU5LX1NUQVRVU19CQUQpOwo+ID4g Pj4gPiArCX0KPiA+ID4+IAo+ID4gPj4gCj4gPiA+PiBJIHRoaW5rIHRoZSBsaW5rIHN0YXR1cyBw cm9wZXJ0eSBzaG91bGQgYmUgc2V0IHRvIGJhZCB1bmNvbmRpdGlvbmFsbHkKPiA+ID4+IGhlcmUu IElmIHRoZSBjdXJyZW50IGxpbmsgaXMgYmFkLCBpdCBpcyBiYWQgcmlnaHQgbm93IGluZGVwZW5k ZW50IG9mCj4gPiA+PiBtb2RlcyBmaXR0aW5nIGludG8gdGhlIGZhbGxiYWNrIGxpbmsgcGFyYW1l dGVycy4KPiA+ID4+IAo+ID4gPj4gV2hpY2ggbWFrZXMgbWUgdGhpbmssIHVubGVzcyBJJ20gbWlz c2luZyBzb21ldGhpbmcsIHRoYXQgeW91IG1pZ2h0IGJlCj4gPiA+PiBhYmxlIHRvIHBydW5lIHRo ZSBpbnZhbGlkIG1vZGVzIGFuZCBzZXQgdGhlIHByb3BlcnR5IHJpZ2h0IGF3YXkgd2hlbgo+ID4g Pj4gbGluayB0cmFpbmluZyBmYWlscywgYW5kIG9ubHkgdXNlIHRoZSB3b3JrIHRvIGRvCj4gPiA+ PiBkcm1fa21zX2hlbHBlcl9ob3RwbHVnX2V2ZW50Lgo+ID4gPj4KPiA+ID4KPiA+ID4gVGhlIHBy b2JsZW0gd2l0aCBzZXR0aW5nIHRoZSBsaW5rX3N0YXR1cyBwcm9wZXJ0eSBCQUQgaXJyZXNwZWN0 aXZlIG9mCj4gPiA+IHRoZSBtb2RlIHBydW5pbmcgaXMgdGhhdCwgaWYgdGhlIG1vZGVzIGdldHMg cHJ1bmVkIGFuZCB3ZSBzZXQgdGhlCj4gPiA+IGxpbmtfc3R0YXVzIHRvIEJBRCBDaHJpcyBXaWxz b24ncyBkcml2ZXIgY2hlY2tzIHRoYXQgdGhlIGxpbmsgc3RhdHVzCj4gPiA+IGlzIEJBRCBhbmQg aGUgZmlyc3QgdHJpZXMgdG8gYXR0ZW1wdCB0aGUgbW9kZXNldCBhdCB0aGUgY3VycmVudCBtb2Rl Cj4gPiA+IHdpdGhvdXQgY2FsbGluZyBtb2RlX3ZhbGlkLCBhbmQgdGhhdCByZXN1bHRzIGluIGEg ZmFpbHVyZSBpbgo+ID4gPiBlbm9jZGVyLT5jb21wdXRlX2NvbmZpZyBzaW5jZSBub3cgdGhlIG1v ZGUgZG9lcyBub3QgZml0IGFuZCB0aGUgcGlwZQo+ID4gPiBjYW5ub3QgYmUgY29uZmlndXJlZC4g VGhpcyBjcmVhdGVzIGEgbG90IG9mIHdhcm5pbmdzL2Vycm9ycy9rZXJuZWwKPiA+ID4gY3Jhc2gg ZXZlbnR1YWxseS4gIFNvIHRoZSBiZXN0IHdheSBpcyB0byBzZXQgdGhlIGxpbmsgc3RhdHVzIGFz IGJhZAo+ID4gPiBvbmx5IHdoZW4gd2Ugd2FudCB0byBmb3JjZSB0aGUgbW9kZXNldCBhdCB0aGUg Y3VycmVudCBtb2RlLCBpZiB0aGUKPiA+ID4gbW9kZXMgZ2V0IHBydW5lZCB0aGVuIGluIGFueSBj YXNlIHVzZXJzcGFjZSB3aWxsIGRvIGFub3RoZXIgbW9kZXNldCBhdAo+ID4gPiB0aGUgbmV4dCBs b3dlciBtb2RlLgo+ID4gCj4gPiBXaHkgd291bGQgdGhlIHVzZXJzcGFjZSBkcml2ZXIgcmV0cnkg dGhlIHNhbWUgbW9kZSB3aXRob3V0IHJlZnJlc2hpbmcKPiA+IHRoZSBtb2RlIGxpc3QgZmlyc3Qg aWYgbGluayBzdGF0dXMgaXMgYmFkPwo+ID4gCj4gPiBJZiB0aGUgbGluayBpcyBiYWQsIHRoZSBs aW5rIGlzICpiYWQqLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIGN1cnJlbnQKPiA+IG1vZGUg bWlnaHQgZXZlbnR1YWxseSB3b3JrIG9yIG5vdC4gQW4gaW50ZXJmYWNlIHRoYXQgcmVwb3J0cyBn b29kIG9uCj4gPiBzb21lIHZhbHVlcyBvZiBiYWQgaXMgaW5jb25zaXN0ZW50IChyZWxhdGVkIHJl YWRpbmcgWzFdKS4gSU1PIHRoZQo+ID4gdXNlcnNwYWNlIHNob3VsZCBmaXJzdCBmaWd1cmUgb3V0 IGlmIHRoZSBjdXJyZW50IG1vZGUgaXMgdmFsaWQgb3Igbm90LAo+ID4gYW5kIHRoZW4gZGVjaWRl IHdoYXQgdG8gZG8uCj4gPiAKPiA+IENocmlzLCBhbnkgY29tbWVudHM/Cj4gPiAKPiA+IFNpZGUg bm90ZSwgdGhlIGtlcm5lbCBtdXN0IG5vdCBjcmFzaCBkZXBlbmRpbmcgb24gd2hhdCB0aGUgdXNl cnNwYWNlCj4gPiBkb2VzLgo+ID4gCj4gPiBCUiwKPiA+IEphbmkuCj4gPiAKPiAKPiBDaHJpcywg eWVzIEkgdGhpbmsgaXQgaXMgYSBnb29kIGlkZWEgdG8gYWx3YXlzIGNhbGwgbW9kZV92YWxpZCBm aXJzdCBvbiByZWNpZXZlaW5nCj4gbGlua19zdGF0dXMgYXMgQkFEIGFuZCB0aGVuIGNhbGxpbmcg c2V0Y3J0YyB0byBzZXQgdGhlIGN1cnJlbnQgbW9kZSBvciB3aGF0ZXZlciB2YWxpZCBtb2RlCj4g aXMuIFRoZW4gSSB3b3VsZCBub3QgbmVlZCB0byBzZXQgbGluayBzdGF0dXMgQkFEIGNvbmRpdGlv bmFsbHkgaW4gdGhlIGRyaXZlci4KPiBDb3VsZCB5b3UgbWFrZSB0aGlzIGNoYW5nZSBpbiB5b3Vy IGxpbmtfc3RhdHVzIHBhdGNoIGFuZCByZXNlbmQgaXQgdG8gbWU/Cj4gCj4gTWFuYXNpCgoKQ2hy aXMsCkkgd2FzIGFibGUgdG8gZnVydGhlciBpbnZlc3RpZ2F0ZSB0aGlzIGFuZCBJIGZvdW5kIHRo ZSBwcm9ibGVtIGluIG15IGNvZGUsCndoZXJlIEkgaGFkIHRvIGFkZCBhIGNoZWNrIHRoYXQgb25s eSBpZiBjcnRjIGlzIHByZXNlbnQsIGl0IHdpbGwgdHJ5IHRvIGNvbmZpZ3VyZQp0aGUgcGlwZSBl bHNlIGl0IHdpbGwgcmV0dXJuIEVJTlZBTCB0byB1c2Vyc3BhY2UgYXQgbXVjaCBlYXJsaWVyIHN0 YWdlIGFuZAp0aGF0IGZpeGVkIHRoZSBrZXJuZWwgZXJyb3JzIChOVUxMIGRlcmVmZXJlbmNpbmcp IHRoYXQgSSB3YXMgc2VlaW5nLgpTbyBKYW5pLCBub3cgSSBjYW4gc2V0IHRoZSBsaW5rX3N0YXR1 cyB0byBiYWQgdW5jb25kaXRpb25hbGx5IGFuZCBzZW5kCmEgaG90cGx1ZyB1ZXZlbnQuIEkgd2ls bCBtYWtlIHRoZXNlIGNoYW5nZXMgYW5kIHN1Ym1pdCB0aGUgbmV3IHJldmlzaW9uCm9mIHBhdGNo ZXMuCgpDaHJpcywgeW91ciBsaW5rX3N0YXR1cyBwYXRjaCBpcyBnb29kIHRvIGdvIQoKTWFuYXNp Cj4gCj4gPiAKPiA+IFsxXSBodHRwOi8vc3dlbmcudGhlLWRhdmllcy5uZXQvSG9tZS9ydXN0eXMt YXBpLWRlc2lnbi1tYW5pZmVzdG8KPiA+IAo+ID4gPgo+ID4gPiBNYW5hc2kgCj4gPiA+PiA+ICsJ bXV0ZXhfdW5sb2NrKCZjb25uZWN0b3ItPmRldi0+bW9kZV9jb25maWcubXV0ZXgpOwo+ID4gPj4g PiArCj4gPiA+PiA+ICsJLyogU2VuZCBIb3RwbHVnIHVldmVudCBzbyB1c2Vyc3BhY2UgY2FuIHJl cHJvYmUgKi8KPiA+ID4+ID4gKwlkcm1fa21zX2hlbHBlcl9ob3RwbHVnX2V2ZW50KGNvbm5lY3Rv ci0+ZGV2KTsKPiA+ID4+ID4gK30KPiA+ID4+ID4gKwo+ID4gPj4gPiAgYm9vbAo+ID4gPj4gPiAg aW50ZWxfZHBfaW5pdF9jb25uZWN0b3Ioc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxf ZGlnX3BvcnQsCj4gPiA+PiA+ICAJCQlzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICppbnRlbF9jb25u ZWN0b3IpCj4gPiA+PiA+IEBAIC01NzA0LDYgKzU3NjgsMTAgQEAgc3RhdGljIGJvb2wgaW50ZWxf ZWRwX2luaXRfY29ubmVjdG9yKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsCj4gPiA+PiA+ICAJ ZW51bSBwb3J0IHBvcnQgPSBpbnRlbF9kaWdfcG9ydC0+cG9ydDsKPiA+ID4+ID4gIAlpbnQgdHlw ZTsKPiA+ID4+ID4gIAo+ID4gPj4gPiArCS8qIEluaXRpYWxpemUgdGhlIHdvcmsgZm9yIG1vZGVz ZXQgaW4gY2FzZSBvZiBsaW5rIHRyYWluIGZhaWx1cmUgKi8KPiA+ID4+ID4gKwlJTklUX1dPUkso JmludGVsX2Nvbm5lY3Rvci0+bW9kZXNldF9yZXRyeV93b3JrLAo+ID4gPj4gPiArCQkgIGludGVs X2RwX21vZGVzZXRfcmV0cnlfd29ya19mbik7Cj4gPiA+PiA+ICsKPiA+ID4+ID4gIAlpZiAoV0FS TihpbnRlbF9kaWdfcG9ydC0+bWF4X2xhbmVzIDwgMSwKPiA+ID4+ID4gIAkJICJOb3QgZW5vdWdo IGxhbmVzICglZCkgZm9yIERQIG9uIHBvcnQgJWNcbiIsCj4gPiA+PiA+ICAJCSBpbnRlbF9kaWdf cG9ydC0+bWF4X2xhbmVzLCBwb3J0X25hbWUocG9ydCkpKQo+ID4gPj4gPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHBfbGlua190cmFpbmluZy5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZHBfbGlua190cmFpbmluZy5jCj4gPiA+PiA+IGluZGV4IDAwNDhi NTIuLjEwZjgxYWIgMTAwNjQ0Cj4gPiA+PiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2RwX2xpbmtfdHJhaW5pbmcuYwo+ID4gPj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9kcF9saW5rX3RyYWluaW5nLmMKPiA+ID4+ID4gQEAgLTMxMCw5ICszMTAsMTUgQEAg dm9pZCBpbnRlbF9kcF9zdG9wX2xpbmtfdHJhaW4oc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkK PiA+ID4+ID4gIAkJCQlEUF9UUkFJTklOR19QQVRURVJOX0RJU0FCTEUpOwo+ID4gPj4gPiAgfQo+ ID4gPj4gPiAgCj4gPiA+PiA+IC12b2lkCj4gPiA+PiA+ICtib29sCj4gPiA+PiA+ICBpbnRlbF9k cF9zdGFydF9saW5rX3RyYWluKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gPiA+PiA+ICB7 Cj4gPiA+PiA+IC0JaW50ZWxfZHBfbGlua190cmFpbmluZ19jbG9ja19yZWNvdmVyeShpbnRlbF9k cCk7Cj4gPiA+PiA+IC0JaW50ZWxfZHBfbGlua190cmFpbmluZ19jaGFubmVsX2VxdWFsaXphdGlv bihpbnRlbF9kcCk7Cj4gPiA+PiA+ICsJYm9vbCByZXQ7Cj4gPiA+PiA+ICsKPiA+ID4+ID4gKwlp ZiAoaW50ZWxfZHBfbGlua190cmFpbmluZ19jbG9ja19yZWNvdmVyeShpbnRlbF9kcCkpIHsKPiA+ ID4+ID4gKwkJcmV0ID0gaW50ZWxfZHBfbGlua190cmFpbmluZ19jaGFubmVsX2VxdWFsaXphdGlv bihpbnRlbF9kcCk7Cj4gPiA+PiA+ICsJCWlmIChyZXQpCj4gPiA+PiA+ICsJCQlyZXR1cm4gdHJ1 ZTsKPiA+ID4+ID4gKwl9Cj4gPiA+PiA+ICsJcmV0dXJuIGZhbHNlOwo+ID4gPj4gPiAgfQo+ID4g Pj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAo+ID4gPj4gPiBpbmRleCBiYzI1YjJiLi5hNTRl OWI3IDEwMDY0NAo+ID4gPj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYu aAo+ID4gPj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAo+ID4gPj4g PiBAQCAtMzEyLDYgKzMxMiw5IEBAIHN0cnVjdCBpbnRlbF9jb25uZWN0b3Igewo+ID4gPj4gPiAg CXZvaWQgKnBvcnQ7IC8qIHN0b3JlIHRoaXMgb3BhcXVlIGFzIGl0cyBpbGxlZ2FsIHRvIGRlcmVm ZXJlbmNlIGl0ICovCj4gPiA+PiA+ICAKPiA+ID4+ID4gIAlzdHJ1Y3QgaW50ZWxfZHAgKm1zdF9w b3J0Owo+ID4gPj4gPiArCj4gPiA+PiA+ICsJLyogV29yayBzdHJ1Y3QgdG8gc2NoZWR1bGUgYSB1 ZXZlbnQgb24gbGluayB0cmFpbiBmYWlsdXJlICovCj4gPiA+PiA+ICsJc3RydWN0IHdvcmtfc3Ry dWN0IG1vZGVzZXRfcmV0cnlfd29yazsKPiA+ID4+ID4gIH07Cj4gPiA+PiA+ICAKPiA+ID4+ID4g IHN0cnVjdCBkcGxsIHsKPiA+ID4+ID4gQEAgLTE0MDIsNyArMTQwNSw3IEBAIHZvaWQgaW50ZWxf ZHBfc2V0X2xpbmtfcGFyYW1zKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsCj4gPiA+PiA+ICAJ CQkgICAgICBib29sIGxpbmtfbXN0KTsKPiA+ID4+ID4gIHZvaWQgaW50ZWxfZHBfZ2V0X2xpbmtf dHJhaW5fZmFsbGJhY2tfdmFsdWVzKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsCj4gPiA+PiA+ ICAJCQkJCSAgICAgaW50IGxpbmtfcmF0ZSwgdWludDhfdCBsYW5lX2NvdW50KTsKPiA+ID4+ID4g LXZvaWQgaW50ZWxfZHBfc3RhcnRfbGlua190cmFpbihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2Rw KTsKPiA+ID4+ID4gK2Jvb2wgaW50ZWxfZHBfc3RhcnRfbGlua190cmFpbihzdHJ1Y3QgaW50ZWxf ZHAgKmludGVsX2RwKTsKPiA+ID4+ID4gIHZvaWQgaW50ZWxfZHBfc3RvcF9saW5rX3RyYWluKHN0 cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApOwo+ID4gPj4gPiAgdm9pZCBpbnRlbF9kcF9zaW5rX2Rw bXMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwgaW50IG1vZGUpOwo+ID4gPj4gPiAgdm9pZCBp bnRlbF9kcF9lbmNvZGVyX3Jlc2V0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rlcik7Cj4gPiA+ PiAKPiA+ID4+IC0tIAo+ID4gPj4gSmFuaSBOaWt1bGEsIEludGVsIE9wZW4gU291cmNlIFRlY2hu b2xvZ3kgQ2VudGVyCj4gPiAKPiA+IC0tIAo+ID4gSmFuaSBOaWt1bGEsIEludGVsIE9wZW4gU291 cmNlIFRlY2hub2xvZ3kgQ2VudGVyCj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KPiBJbnRlbC1nZnggbWFpbGluZyBsaXN0Cj4gSW50ZWwtZ2Z4QGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwo+IGh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4v bGlzdGluZm8vaW50ZWwtZ2Z4Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNr dG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lu dGVsLWdmeAo=