From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matt Roper Subject: Re: [PATCH 9/9] drm/i915: Add two-stage ILK-style watermark programming (v7) Date: Mon, 30 Nov 2015 16:08:34 -0800 Message-ID: <20151201000834.GA5524@intel.com> References: <1448470115-7863-1-git-send-email-matthew.d.roper@intel.com> <1448470115-7863-10-git-send-email-matthew.d.roper@intel.com> <20151125170853.GT4437@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTP id 3C61F6E720 for ; Mon, 30 Nov 2015 16:08:35 -0800 (PST) Content-Disposition: inline In-Reply-To: <20151125170853.GT4437@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCBOb3YgMjUsIDIwMTUgYXQgMDc6MDg6NTNQTSArMDIwMCwgVmlsbGUgU3lyasOkbMOk IHdyb3RlOgo+IE9uIFdlZCwgTm92IDI1LCAyMDE1IGF0IDA4OjQ4OjM1QU0gLTA4MDAsIE1hdHQg Um9wZXIgd3JvdGU6Cj4gPiBJbiBhZGRpdGlvbiB0byBjYWxjdWxhdGluZyBmaW5hbCB3YXRlcm1h cmtzLCBsZXQncyBhbHNvIHByZS1jYWxjdWxhdGUgYQo+ID4gc2V0IG9mIGludGVybWVkaWF0ZSB3 YXRlcm1hcmsgdmFsdWVzIGF0IGF0b21pYyBjaGVjayB0aW1lLiAgVGhlc2UKPiA+IGludGVybWVk aWF0ZSB3YXRlcm1hcmtzIGFyZSBhIGNvbWJpbmF0aW9uIG9mIHRoZSB3YXRlcm1hcmtzIGZvciB0 aGUgb2xkCj4gPiBzdGF0ZSBhbmQgdGhlIG5ldyBzdGF0ZTsgdGhleSBzaG91bGQgc2F0aXNmeSB0 aGUgcmVxdWlyZW1lbnRzIG9mIGJvdGgKPiA+IHN0YXRlcyB3aGljaCBtZWFucyB0aGV5IGNhbiBi ZSBwcm9ncmFtbWVkIGltbWVkaWF0ZWx5IHdoZW4gd2UgY29tbWl0IHRoZQo+ID4gYXRvbWljIHN0 YXRlICh3aXRob3V0IHdhaXRpbmcgZm9yIGEgdmJsYW5rKS4gIE9uY2UgdGhlIHZibGFuayBkb2Vz Cj4gPiBoYXBwZW4sIHdlIGNhbiB0aGVuIHJlLXByb2dyYW0gd2F0ZXJtYXJrcyB0byB0aGUgbW9y ZSBvcHRpbWFsIGZpbmFsCj4gPiB2YWx1ZS4KPiA+IAo+ID4gdjI6IFNpZ25pZmljYW50IHJlYmFz aW5nL3Jld3JpdGluZy4KPiA+IAo+ID4gdjM6Cj4gPiAgLSBNb3ZlICduZWVkX3Bvc3R2YmxfdXBk YXRlJyBmbGFnIHRvIENSVEMgc3RhdGUgKERhbmllbCkKPiA+ICAtIERvbid0IGZvcmdldCB0byBj aGVjayBpbnRlcm1lZGlhdGUgd2F0ZXJtYXJrIHZhbHVlcyBmb3IgdmFsaWRpdHkKPiA+ICAgIChN YWFydGVuKQo+ID4gIC0gRG9uJ3QgZHVlIGFzeW5jIHdhdGVybWFyayBvcHRpbWl6YXRpb247IGp1 c3QgZG8gaXQgYXQgdGhlIGVuZCBvZiB0aGUKPiA+ICAgIGF0b21pYyB0cmFuc2FjdGlvbiwgYWZ0 ZXIgd2FpdGluZyBmb3IgdmJsYW5rcy4gIFdlIGRvIHdhbnQgaXQgdG8gYmUKPiA+ICAgIGFzeW5j IGV2ZW50dWFsbHksIGJ1dCBhZGRpbmcgdGhhdCBub3cgd2lsbCBjYXVzZSBtb3JlIHRyb3VibGUg Zm9yCj4gPiAgICBNYWFydGVuJ3MgaW4tcHJvZ3Jlc3Mgd29yay4gIChNYWFydGVuKQo+ID4gIC0g RG9uJ3QgYWxsb2NhdGUgc3BhY2UgaW4gY3J0Y19zdGF0ZSBmb3IgaW50ZXJtZWRpYXRlIHdhdGVy bWFya3Mgb24KPiA+ICAgIHBsYXRmb3JtcyB0aGF0IGRvbid0IG5lZWQgaXQgKGdlbjkrKS4KPiA+ ICAtIE1vdmUgV2FDeFNSRGlzYWJsZWRGb3JTcHJpdGVTY2FsaW5nOml2YiBpbnRvIGludGVsX2Jl Z2luX2NydGNfY29tbWl0Cj4gPiAgICBub3cgdGhhdCBpbGtfdXBkYXRlX3dtIGlzIGdvbmUuCj4g PiAKPiA+IHY0Ogo+ID4gIC0gQWRkIGEgd21fbXV0ZXggdG8gY292ZXIgdXBkYXRlcyB0byBpbnRl bF9jcnRjLT5hY3RpdmUgYW5kIHRoZQo+ID4gICAgbmVlZF9wb3N0dmJsX3VwZGF0ZSBmbGFnLiAg U2luY2Ugd2UgZG9uJ3QgaGF2ZSBhc3luYyB5ZXQgaXQgaXNuJ3QKPiA+ICAgIHRlcnJpYmx5IGlt cG9ydGFudCB5ZXQsIGJ1dCBtaWdodCBhcyB3ZWxsIGFkZCBpdCBub3cuCj4gPiAgLSBDaGFuZ2Ug aW50ZXJmYWNlIHRvIHByb2dyYW0gd2F0ZXJtYXJrcy4gIFBsYXRmb3JtcyB3aWxsIG5vdyBleHBv c2UKPiA+ICAgIC5pbml0aWFsX3dhdGVybWFya3MoKSBhbmQgLm9wdGltaXplX3dhdGVybWFya3Mo KSBmdW5jdGlvbnMgdG8gZG8KPiA+ICAgIHdhdGVybWFyayBwcm9ncmFtbWluZy4gIFRoZXNlIHNo b3VsZCBsb2NrIHdtX211dGV4LCBjb3B5IHRoZQo+ID4gICAgYXBwcm9wcmlhdGUgc3RhdGUgdmFs dWVzIGludG8gaW50ZWxfY3J0Yy0+YWN0aXZlLCBhbmQgdGhlbiBjYWxsCj4gPiAgICB0aGUgaW50 ZXJuYWwgcHJvZ3JhbSB3YXRlcm1hcmtzIGZ1bmN0aW9uLgo+ID4gCj4gPiB2NToKPiA+ICAtIFNr aXAgaW50ZXJtZWRpYXRlIHdhdGVybWFyayBjYWxjdWxhdGlvbi9jaGVjayBkdXJpbmcgaW5pdGlh bCBoYXJkd2FyZQo+ID4gICAgcmVhZG91dCBzaW5jZSB3ZSBkb24ndCB0cnVzdCB0aGUgZXhpc3Rp bmcgSFcgdmFsdWVzIChhbmQgZG9uJ3QgaGF2ZQo+ID4gICAgdmFsaWQgdmFsdWVzIG9mIG91ciBv d24geWV0KS4KPiA+ICAtIERvbid0IHRyeSB0byBjYWxsIC5vcHRpbWl6ZV93YXRlcm1hcmtzKCkg b24gcGxhdGZvcm1zIHRoYXQgZG9uJ3QgaGF2ZQo+ID4gICAgYXRvbWljIHdhdGVybWFya3MgeWV0 LiAgKE1hYXJ0ZW4pCj4gPiAKPiA+IHY2Ogo+ID4gIC0gUmViYXNlCj4gPiAKPiA+IHY3Ogo+ID4g IC0gRnVydGhlciByZWJhc2UKPiA+IAo+ID4gU2lnbmVkLW9mZi1ieTogTWF0dCBSb3BlciA8bWF0 dGhldy5kLnJvcGVyQGludGVsLmNvbT4KPiA+IFJldmlld2VkLWJ5KHY1KTogTWFhcnRlbiBMYW5r aG9yc3QgPG1hYXJ0ZW4ubGFua2hvcnN0QGxpbnV4LmludGVsLmNvbT4KPiA+IC0tLQo+ID4gIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggICAgICB8ICAgNiArLQo+ID4gIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2F0b21pYy5jICB8ICAgMSArCj4gPiAgZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfZGlzcGxheS5jIHwgIDkwICsrKysrKysrKysrKysrKysrKystCj4gPiAgZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggICAgIHwgIDMxICsrKysrKy0KPiA+ICBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jICAgICAgfCAxNjAgKysrKysrKysrKysrKysrKysr KysrKysrLS0tLS0tLS0tLS0KPiA+ICA1IGZpbGVzIGNoYW5nZWQsIDIzMiBpbnNlcnRpb25zKCsp LCA1NiBkZWxldGlvbnMoLSkKPiA+IAo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gPiBpbmRl eCA1MTcyNjA0Li40MjdiNDg4IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9kcnYuaAo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+ID4g QEAgLTYzMCw3ICs2MzAsMTEgQEAgc3RydWN0IGRybV9pOTE1X2Rpc3BsYXlfZnVuY3Mgewo+ID4g IAkJCSAgc3RydWN0IGRwbGwgKmJlc3RfY2xvY2spOwo+ID4gIAlpbnQgKCpjb21wdXRlX3BpcGVf d20pKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAo+ID4gIAkJCSAgICAgICBzdHJ1Y3QgZHJtX2F0 b21pY19zdGF0ZSAqc3RhdGUpOwo+ID4gLQl2b2lkICgqcHJvZ3JhbV93YXRlcm1hcmtzKShzdHJ1 Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlKTsKPiA+ICsJaW50ICgqY29tcHV0ZV9pbnRlcm1l ZGlhdGVfd20pKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gPiArCQkJCSAgICAgICBzdHJ1Y3Qg aW50ZWxfY3J0YyAqaW50ZWxfY3J0YywKPiA+ICsJCQkJICAgICAgIHN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICpuZXdzdGF0ZSk7Cj4gPiArCXZvaWQgKCppbml0aWFsX3dhdGVybWFya3MpKHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpjc3RhdGUpOwo+ID4gKwl2b2lkICgqb3B0aW1pemVfd2F0ZXJt YXJrcykoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSk7Cj4gPiAgCXZvaWQgKCp1cGRh dGVfd20pKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Cj4gPiAgCWludCAoKm1vZGVzZXRfY2FsY19j ZGNsaykoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKTsKPiA+ICAJdm9pZCAoKm1vZGVz ZXRfY29tbWl0X2NkY2xrKShzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpOwo+ID4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2F0b21pYy5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfYXRvbWljLmMKPiA+IGluZGV4IDY0M2YzNDIuLmI5MWUxNjYgMTAw NjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9hdG9taWMuYwo+ID4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYXRvbWljLmMKPiA+IEBAIC05NSw2ICs5NSw3 IEBAIGludGVsX2NydGNfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiA+ ICAKPiA+ICAJY3J0Y19zdGF0ZS0+dXBkYXRlX3BpcGUgPSBmYWxzZTsKPiA+ICAJY3J0Y19zdGF0 ZS0+ZGlzYWJsZV9scF93bSA9IGZhbHNlOwo+ID4gKwljcnRjX3N0YXRlLT53bS5uZWVkX3Bvc3R2 YmxfdXBkYXRlID0gZmFsc2U7Cj4gPiAgCj4gPiAgCXJldHVybiAmY3J0Y19zdGF0ZS0+YmFzZTsK PiA+ICB9Cj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxh eS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4gPiBpbmRleCBlYjUy YWZhLi44ZGIwNDg2IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZGlzcGxheS5jCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMK PiA+IEBAIC0xMTgwMSw2ICsxMTgwMSwxMiBAQCBpbnQgaW50ZWxfcGxhbmVfYXRvbWljX2NhbGNf Y2hhbmdlcyhzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4gPiAgCQlpbnRlbF9j cnRjLT5hdG9taWMudXBkYXRlX3dtX3ByZSA9IHRydWU7Cj4gPiAgCX0KPiA+ICAKPiA+ICsJLyog UHJlLWdlbjkgcGxhdGZvcm1zIG5lZWQgdHdvLXN0ZXAgd2F0ZXJtYXJrIHVwZGF0ZXMgKi8KPiA+ ICsJaWYgKChpbnRlbF9jcnRjLT5hdG9taWMudXBkYXRlX3dtX3ByZSB8fCBpbnRlbF9jcnRjLT5h dG9taWMudXBkYXRlX3dtX3Bvc3QpICYmCj4gPiArCSAgICBJTlRFTF9JTkZPKGRldiktPmdlbiA8 IDkgJiYKPiA+ICsJICAgIGRldl9wcml2LT5kaXNwbGF5Lm9wdGltaXplX3dhdGVybWFya3MpCj4g PiArCQl0b19pbnRlbF9jcnRjX3N0YXRlKGNydGNfc3RhdGUpLT53bS5uZWVkX3Bvc3R2YmxfdXBk YXRlID0gdHJ1ZTsKPiA+ICsKPiA+ICAJaWYgKHZpc2libGUgfHwgd2FzX3Zpc2libGUpCj4gPiAg CQlpbnRlbF9jcnRjLT5hdG9taWMuZmJfYml0cyB8PQo+ID4gIAkJCXRvX2ludGVsX3BsYW5lKHBs YW5lKS0+ZnJvbnRidWZmZXJfYml0Owo+ID4gQEAgLTExOTU3LDggKzExOTYzLDI5IEBAIHN0YXRp YyBpbnQgaW50ZWxfY3J0Y19hdG9taWNfY2hlY2soc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ID4g IAlyZXQgPSAwOwo+ID4gIAlpZiAoZGV2X3ByaXYtPmRpc3BsYXkuY29tcHV0ZV9waXBlX3dtKSB7 Cj4gPiAgCQlyZXQgPSBkZXZfcHJpdi0+ZGlzcGxheS5jb21wdXRlX3BpcGVfd20oaW50ZWxfY3J0 Yywgc3RhdGUpOwo+ID4gLQkJaWYgKHJldCkKPiA+ICsJCWlmIChyZXQpIHsKPiA+ICsJCQlEUk1f REVCVUdfS01TKCJUYXJnZXQgcGlwZSB3YXRlcm1hcmtzIGFyZSBpbnZhbGlkXG4iKTsKPiA+ICAJ CQlyZXR1cm4gcmV0Owo+ID4gKwkJfQo+ID4gKwl9Cj4gPiArCj4gPiArCWlmIChkZXZfcHJpdi0+ ZGlzcGxheS5jb21wdXRlX2ludGVybWVkaWF0ZV93bSAmJgo+ID4gKwkgICAgIXRvX2ludGVsX2F0 b21pY19zdGF0ZShzdGF0ZSktPnNraXBfaW50ZXJtZWRpYXRlX3dtKSB7Cj4gPiArCQlpZiAoV0FS Tl9PTighZGV2X3ByaXYtPmRpc3BsYXkuY29tcHV0ZV9waXBlX3dtKSkKPiA+ICsJCQlyZXR1cm4g MDsKPiA+ICsKPiA+ICsJCS8qCj4gPiArCQkgKiBDYWxjdWxhdGUgJ2ludGVybWVkaWF0ZScgd2F0 ZXJtYXJrcyB0aGF0IHNhdGlzZnkgYm90aCB0aGUKPiA+ICsJCSAqIG9sZCBzdGF0ZSBhbmQgdGhl IG5ldyBzdGF0ZS4gIFdlIGNhbiBwcm9ncmFtIHRoZXNlCj4gPiArCQkgKiBpbW1lZGlhdGVseS4K PiA+ICsJCSAqLwo+ID4gKwkJcmV0ID0gZGV2X3ByaXYtPmRpc3BsYXkuY29tcHV0ZV9pbnRlcm1l ZGlhdGVfd20oY3J0Yy0+ZGV2LAo+ID4gKwkJCQkJCQkJaW50ZWxfY3J0YywKPiA+ICsJCQkJCQkJ CXBpcGVfY29uZmlnKTsKPiA+ICsJCWlmIChyZXQpIHsKPiA+ICsJCQlEUk1fREVCVUdfS01TKCJO byB2YWxpZCBpbnRlcm1lZGlhdGUgcGlwZSB3YXRlcm1hcmtzIGFyZSBwb3NzaWJsZVxuIik7Cj4g PiArCQkJcmV0dXJuIHJldDsKPiA+ICsJCX0KPiA+ICAJfQo+ID4gIAo+ID4gIAlpZiAoSU5URUxf SU5GTyhkZXYpLT5nZW4gPj0gOSkgewo+ID4gQEAgLTEzNDA5LDYgKzEzNDM2LDcgQEAgc3RhdGlj IGludCBpbnRlbF9hdG9taWNfY29tbWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gPiAgCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gPiAg CXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKPiA+ICAJc3RydWN0IGRybV9jcnRj ICpjcnRjOwo+ID4gKwlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqaW50ZWxfY3N0YXRlOwo+ID4g IAlpbnQgcmV0ID0gMDsKPiA+ICAJaW50IGk7Cj4gPiAgCWJvb2wgYW55X21zID0gZmFsc2U7Cj4g PiBAQCAtMTM1MDAsNiArMTM1MjgsMjAgQEAgc3RhdGljIGludCBpbnRlbF9hdG9taWNfY29tbWl0 KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gPiAgCj4gPiAgCWRybV9hdG9taWNfaGVscGVyX3dh aXRfZm9yX3ZibGFua3MoZGV2LCBzdGF0ZSk7Cj4gPiAgCj4gPiArCS8qCj4gPiArCSAqIE5vdyB0 aGF0IHRoZSB2YmxhbmsgaGFzIHBhc3NlZCwgd2UgY2FuIGdvIGFoZWFkIGFuZCBwcm9ncmFtIHRo ZQo+ID4gKwkgKiBvcHRpbWFsIHdhdGVybWFya3Mgb24gcGxhdGZvcm1zIHRoYXQgbmVlZCB0d28t c3RlcCB3YXRlcm1hcmsKPiA+ICsJICogcHJvZ3JhbW1pbmcuCj4gPiArCSAqCj4gPiArCSAqIFRP RE86IE1vdmUgdGhpcyAoYW5kIG90aGVyIGNsZWFudXApIHRvIGFuIGFzeW5jIHdvcmtlciBldmVu dHVhbGx5Lgo+ID4gKwkgKi8KPiA+ICsJZm9yX2VhY2hfY3J0Y19pbl9zdGF0ZShzdGF0ZSwgY3J0 YywgY3J0Y19zdGF0ZSwgaSkgewo+ID4gKwkJaW50ZWxfY3N0YXRlID0gdG9faW50ZWxfY3J0Y19z dGF0ZShjcnRjLT5zdGF0ZSk7Cj4gPiArCj4gPiArCQlpZiAoZGV2X3ByaXYtPmRpc3BsYXkub3B0 aW1pemVfd2F0ZXJtYXJrcykKPiA+ICsJCSAgICBkZXZfcHJpdi0+ZGlzcGxheS5vcHRpbWl6ZV93 YXRlcm1hcmtzKGludGVsX2NzdGF0ZSk7Cj4gPiArCX0KPiA+ICsKPiA+ICAJbXV0ZXhfbG9jaygm ZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+ID4gIAlkcm1fYXRvbWljX2hlbHBlcl9jbGVhbnVwX3BsYW5l cyhkZXYsIHN0YXRlKTsKPiA+ICAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Cj4g PiBAQCAtMTM4NjIsMTMgKzEzOTA0LDQ0IEBAIHN0YXRpYyB2b2lkIGludGVsX2JlZ2luX2NydGNf Y29tbWl0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiA+ICAJCQkJICAgIHN0cnVjdCBkcm1fY3J0 Y19zdGF0ZSAqb2xkX2NydGNfc3RhdGUpCj4gPiAgewo+ID4gIAlzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2ID0gY3J0Yy0+ZGV2Owo+ID4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSB0b19pOTE1KGRldik7Cj4gPiAgCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9f aW50ZWxfY3J0YyhjcnRjKTsKPiA+ICsJc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSA9 IHRvX2ludGVsX2NydGNfc3RhdGUoY3J0Yy0+c3RhdGUpOwo+ID4gIAlzdHJ1Y3QgaW50ZWxfY3J0 Y19zdGF0ZSAqb2xkX2ludGVsX3N0YXRlID0KPiA+ICAJCXRvX2ludGVsX2NydGNfc3RhdGUob2xk X2NydGNfc3RhdGUpOwo+ID4gIAlib29sIG1vZGVzZXQgPSBuZWVkc19tb2Rlc2V0KGNydGMtPnN0 YXRlKTsKPiA+ICAKPiA+IC0JaWYgKGludGVsX2NydGMtPmF0b21pYy51cGRhdGVfd21fcHJlKQo+ ID4gKwkvKgo+ID4gKwkgKiBJVkIgd29ya2Fyb3VuZDogbXVzdCBkaXNhYmxlIGxvdyBwb3dlciB3 YXRlcm1hcmtzIGZvciBhdCBsZWFzdAo+ID4gKwkgKiBvbmUgZnJhbWUgYmVmb3JlIGVuYWJsaW5n IHNjYWxpbmcuICBMUCB3YXRlcm1hcmtzIGNhbiBiZSByZS1lbmFibGVkCj4gPiArCSAqIHdoZW4g c2NhbGluZyBpcyBkaXNhYmxlZC4KPiA+ICsJICoKPiA+ICsJICogV2FDeFNSRGlzYWJsZWRGb3JT cHJpdGVTY2FsaW5nOml2Ygo+ID4gKwkgKi8KPiA+ICsJaWYgKGNzdGF0ZS0+ZGlzYWJsZV9scF93 bSkgewo+ID4gKwkJaWxrX2Rpc2FibGVfbHBfd20oY3J0Yy0+ZGV2KTsKPiA+ICsJCWludGVsX3dh aXRfZm9yX3ZibGFuayhjcnRjLT5kZXYsIGludGVsX2NydGMtPnBpcGUpOwo+ID4gKwl9Cj4gPiAr Cj4gPiArCS8qCj4gPiArCSAqIEZvciBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0IGF0b21pYyB3YXRl cm1hcmtzLCBwcm9ncmFtIHRoZQo+ID4gKwkgKiAnaW50ZXJtZWRpYXRlJyB3YXRlcm1hcmtzIGlt bWVkaWF0ZWx5LiAgT24gcHJlLWdlbjkgcGxhdGZvcm1zLCB0aGVzZQo+ID4gKwkgKiB3aWxsIGJl IHRoZSBpbnRlcm1lZGlhdGUgdmFsdWVzIHRoYXQgYXJlIHNhZmUgZm9yIGJvdGggcHJlLSBhbmQK PiA+ICsJICogcG9zdC0gdmJsYW5rOyB3aGVuIHZibGFuayBoYXBwZW5zLCB0aGUgJ2FjdGl2ZScg dmFsdWVzIHdpbGwgYmUgc2V0Cj4gPiArCSAqIHRvIHRoZSBmaW5hbCAndGFyZ2V0JyB2YWx1ZXMg YW5kIHdlJ2xsIGRvIHRoaXMgYWdhaW4gdG8gZ2V0IHRoZQo+ID4gKwkgKiBvcHRpbWFsIHdhdGVy bWFya3MuICBGb3IgZ2VuOSsgcGxhdGZvcm1zLCB0aGUgdmFsdWVzIHdlIHByb2dyYW0gaGVyZQo+ ID4gKwkgKiB3aWxsIGJlIHRoZSBmaW5hbCB0YXJnZXQgdmFsdWVzIHdoaWNoIHdpbGwgZ2V0IGF1 dG9tYXRpY2FsbHkgbGF0Y2hlZAo+ID4gKwkgKiBhdCB2YmxhbmsgdGltZTsgbm8gZnVydGhlciBw cm9ncmFtbWluZyB3aWxsIGJlIG5lY2Vzc2FyeS4KPiA+ICsJICoKPiA+ICsJICogSWYgYSBwbGF0 Zm9ybSBoYXNuJ3QgYmVlbiB0cmFuc2l0aW9uZWQgdG8gYXRvbWljIHdhdGVybWFya3MgeWV0LAo+ ID4gKwkgKiB3ZSdsbCBjb250aW51ZSB0byB1cGRhdGUgd2F0ZXJtYXJrcyB0aGUgb2xkIHdheSwg aWYgZmxhZ3MgdGVsbAo+ID4gKwkgKiB1cyB0by4KPiA+ICsJICovCj4gPiArCWlmIChkZXZfcHJp di0+ZGlzcGxheS5pbml0aWFsX3dhdGVybWFya3MgIT0gTlVMTCkgewo+ID4gKwkJZGV2X3ByaXYt PmRpc3BsYXkuaW5pdGlhbF93YXRlcm1hcmtzKGNzdGF0ZSk7Cj4gPiArCX0gZWxzZSBpZiAoaW50 ZWxfY3J0Yy0+YXRvbWljLnVwZGF0ZV93bV9wcmUpIHsKPiA+ICAJCWludGVsX3VwZGF0ZV93YXRl cm1hcmtzKGNydGMpOwo+ID4gKwl9Cj4gPiAgCj4gPiAgCS8qIFBlcmZvcm0gdmJsYW5rIGV2YXNp b24gYXJvdW5kIGNvbW1pdCBvcGVyYXRpb24gKi8KPiA+ICAJaW50ZWxfcGlwZV91cGRhdGVfc3Rh cnQoaW50ZWxfY3J0Yyk7Cj4gPiBAQCAtMTQyMDcsNiArMTQyODAsNyBAQCBzdGF0aWMgdm9pZCBp bnRlbF9jcnRjX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHBpcGUpCj4gPiAgCWlu dGVsX2NydGMtPmN1cnNvcl9zaXplID0gfjA7Cj4gPiAgCj4gPiAgCWludGVsX2NydGMtPndtLmN4 c3JfYWxsb3dlZCA9IHRydWU7Cj4gPiArCW11dGV4X2luaXQoJmludGVsX2NydGMtPndtLndtX211 dGV4KTsKPiA+ICAKPiA+ICAJQlVHX09OKHBpcGUgPj0gQVJSQVlfU0laRShkZXZfcHJpdi0+cGxh bmVfdG9fY3J0Y19tYXBwaW5nKSB8fAo+ID4gIAkgICAgICAgZGV2X3ByaXYtPnBsYW5lX3RvX2Ny dGNfbWFwcGluZ1tpbnRlbF9jcnRjLT5wbGFuZV0gIT0gTlVMTCk7Cj4gPiBAQCAtMTUxMzYsNyAr MTUyMTAsNyBAQCBzdGF0aWMgdm9pZCBzYW5pdGl6ZV93YXRlcm1hcmtzKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYpCj4gPiAgCWludCBpOwo+ID4gIAo+ID4gIAkvKiBPbmx5IHN1cHBvcnRlZCBvbiBw bGF0Zm9ybXMgdGhhdCB1c2UgYXRvbWljIHdhdGVybWFyayBkZXNpZ24gKi8KPiA+IC0JaWYgKCFk ZXZfcHJpdi0+ZGlzcGxheS5wcm9ncmFtX3dhdGVybWFya3MpCj4gPiArCWlmICghZGV2X3ByaXYt PmRpc3BsYXkub3B0aW1pemVfd2F0ZXJtYXJrcykKPiA+ICAJCXJldHVybjsKPiA+ICAKPiA+ICAJ LyoKPiA+IEBAIC0xNTE0OCw2ICsxNTIyMiwxMyBAQCBzdGF0aWMgdm9pZCBzYW5pdGl6ZV93YXRl cm1hcmtzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gPiAgCWlmIChXQVJOX09OKElTX0VSUihz dGF0ZSkpKQo+ID4gIAkJcmV0dXJuOwo+ID4gIAo+ID4gKwkvKgo+ID4gKwkgKiBIYXJkd2FyZSBy ZWFkb3V0IGlzIHRoZSBvbmx5IHRpbWUgd2UgZG9uJ3Qgd2FudCB0byBjYWxjdWxhdGUKPiA+ICsJ ICogaW50ZXJtZWRpYXRlIHdhdGVybWFya3MgKHNpbmNlIHdlIGRvbid0IHRydXN0IHRoZSBjdXJy ZW50Cj4gPiArCSAqIHdhdGVybWFya3MpLgo+ID4gKwkgKi8KPiA+ICsJdG9faW50ZWxfYXRvbWlj X3N0YXRlKHN0YXRlKS0+c2tpcF9pbnRlcm1lZGlhdGVfd20gPSB0cnVlOwo+ID4gKwo+ID4gIAly ZXQgPSBpbnRlbF9hdG9taWNfY2hlY2soZGV2LCBzdGF0ZSk7Cj4gPiAgCWlmIChyZXQpIHsKPiA+ ICAJCS8qCj4gPiBAQCAtMTUxNjMsNyArMTUyNDQsOCBAQCBzdGF0aWMgdm9pZCBzYW5pdGl6ZV93 YXRlcm1hcmtzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gPiAgCWZvcl9lYWNoX2NydGNfaW5f c3RhdGUoc3RhdGUsIGNydGMsIGNzdGF0ZSwgaSkgewo+ID4gIAkJc3RydWN0IGludGVsX2NydGNf c3RhdGUgKmNzID0gdG9faW50ZWxfY3J0Y19zdGF0ZShjc3RhdGUpOwo+ID4gIAo+ID4gLQkJZGV2 X3ByaXYtPmRpc3BsYXkucHJvZ3JhbV93YXRlcm1hcmtzKGNzKTsKPiA+ICsJCWNzLT53bS5uZWVk X3Bvc3R2YmxfdXBkYXRlID0gdHJ1ZTsKPiA+ICsJCWRldl9wcml2LT5kaXNwbGF5Lm9wdGltaXpl X3dhdGVybWFya3MoY3MpOwo+ID4gIAl9Cj4gPiAgCj4gPiAgCWRybV9hdG9taWNfc3RhdGVfZnJl ZShzdGF0ZSk7Cj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2 LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAo+ID4gaW5kZXggOGZhZTgyNC4u YzUzZWIxMCAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5o Cj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAo+ID4gQEAgLTI0OSw2 ICsyNDksMTIgQEAgc3RydWN0IGludGVsX2F0b21pY19zdGF0ZSB7Cj4gPiAgCWJvb2wgZHBsbF9z ZXQ7Cj4gPiAgCXN0cnVjdCBpbnRlbF9zaGFyZWRfZHBsbF9jb25maWcgc2hhcmVkX2RwbGxbSTkx NV9OVU1fUExMU107Cj4gPiAgCXN0cnVjdCBpbnRlbF93bV9jb25maWcgd21fY29uZmlnOwo+ID4g Kwo+ID4gKwkvKgo+ID4gKwkgKiBDdXJyZW50IHdhdGVybWFya3MgY2FuJ3QgYmUgdHJ1c3RlZCBk dXJpbmcgaGFyZHdhcmUgcmVhZG91dCwgc28KPiA+ICsJICogZG9uJ3QgYm90aGVyIGNhbGN1bGF0 aW5nIGludGVybWVkaWF0ZSB3YXRlcm1hcmtzLgo+ID4gKwkgKi8KPiA+ICsJYm9vbCBza2lwX2lu dGVybWVkaWF0ZV93bTsKPiA+ICB9Owo+ID4gIAo+ID4gIHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0 ZSB7Cj4gPiBAQCAtNDkxLDEzICs0OTcsMjkgQEAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgewo+ ID4gIAo+ID4gIAlzdHJ1Y3Qgewo+ID4gIAkJLyoKPiA+IC0JCSAqIG9wdGltYWwgd2F0ZXJtYXJr cywgcHJvZ3JhbW1lZCBwb3N0LXZibGFuayB3aGVuIHRoaXMgc3RhdGUKPiA+IC0JCSAqIGlzIGNv bW1pdHRlZAo+ID4gKwkJICogT3B0aW1hbCB3YXRlcm1hcmtzLCBwcm9ncmFtbWVkIHBvc3QtdmJs YW5rIHdoZW4gdGhpcyBzdGF0ZQo+ID4gKwkJICogaXMgY29tbWl0dGVkLgo+ID4gIAkJICovCj4g PiAgCQl1bmlvbiB7Cj4gPiAgCQkJc3RydWN0IGludGVsX3BpcGVfd20gaWxrOwo+ID4gIAkJCXN0 cnVjdCBza2xfcGlwZV93bSBza2w7Cj4gPiAgCQl9IG9wdGltYWw7Cj4gPiArCj4gPiArCQkvKgo+ ID4gKwkJICogSW50ZXJtZWRpYXRlIHdhdGVybWFya3M7IHRoZXNlIGNhbiBiZSBwcm9ncmFtbWVk IGltbWVkaWF0ZWx5Cj4gPiArCQkgKiBzaW5jZSB0aGV5IHNhdGlzZnkgYm90aCB0aGUgY3VycmVu dCBjb25maWd1cmF0aW9uIHdlJ3JlCj4gPiArCQkgKiBzd2l0Y2hpbmcgYXdheSBmcm9tIGFuZCB0 aGUgbmV3IGNvbmZpZ3VyYXRpb24gd2UncmUgc3dpdGNoaW5nCj4gPiArCQkgKiB0by4KPiA+ICsJ CSAqLwo+ID4gKwkJc3RydWN0IGludGVsX3BpcGVfd20gaW50ZXJtZWRpYXRlOwo+ID4gKwo+ID4g KwkJLyoKPiA+ICsJCSAqIFBsYXRmb3JtcyB3aXRoIHR3by1zdGVwIHdhdGVybWFyayBwcm9ncmFt bWluZyB3aWxsIG5lZWQgdG8KPiA+ICsJCSAqIHVwZGF0ZSB3YXRlcm1hcmsgcHJvZ3JhbW1pbmcg cG9zdC12YmxhbmsgdG8gc3dpdGNoIGZyb20gdGhlCj4gPiArCQkgKiBzYWZlIGludGVybWVkaWF0 ZSB3YXRlcm1hcmtzIHRvIHRoZSBvcHRpbWFsIGZpbmFsCj4gPiArCQkgKiB3YXRlcm1hcmtzLgo+ ID4gKwkJICovCj4gPiArCQlib29sIG5lZWRfcG9zdHZibF91cGRhdGU7Cj4gPiAgCX0gd207Cj4g PiAgfTsKPiA+ICAKPiA+IEBAIC01ODcsOCArNjA5LDEyIEBAIHN0cnVjdCBpbnRlbF9jcnRjIHsK PiA+ICAJCQlzdHJ1Y3QgaW50ZWxfcGlwZV93bSBpbGs7Cj4gPiAgCQkJc3RydWN0IHNrbF9waXBl X3dtIHNrbDsKPiA+ICAJCX0gYWN0aXZlOwo+ID4gKwo+ID4gIAkJLyogYWxsb3cgQ3hTUiBvbiB0 aGlzIHBpcGUgKi8KPiA+ICAJCWJvb2wgY3hzcl9hbGxvd2VkOwo+ID4gKwo+ID4gKwkJLyogUHJv dGVjdHMgYWN0aXZlIGFuZCBuZWVkX3Bvc3R2YmxfdXBkYXRlICovCj4gPiArCQlzdHJ1Y3QgbXV0 ZXggd21fbXV0ZXg7Cj4gPiAgCX0gd207Cj4gPiAgCj4gPiAgCWludCBzY2FubGluZV9vZmZzZXQ7 Cj4gPiBAQCAtMTQ2Myw2ICsxNDg5LDcgQEAgdm9pZCBza2xfd21fZ2V0X2h3X3N0YXRlKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYpOwo+ID4gIHZvaWQgc2tsX2RkYl9nZXRfaHdfc3RhdGUoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ID4gIAkJCSAgc3RydWN0IHNrbF9kZGJfYWxs b2NhdGlvbiAqZGRiIC8qIG91dCAqLyk7Cj4gPiAgdWludDMyX3QgaWxrX3BpcGVfcGl4ZWxfcmF0 ZShjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcpOwo+ID4gK2Jvb2wg aWxrX2Rpc2FibGVfbHBfd20oc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4gPiAgCj4gPiAgLyog aW50ZWxfc2R2by5jICovCj4gPiAgYm9vbCBpbnRlbF9zZHZvX2luaXQoc3RydWN0IGRybV9kZXZp Y2UgKmRldiwKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5j IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYwo+ID4gaW5kZXggYzIwOWE2OS4uMjlk NzI1ZSAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMKPiA+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMKPiA+IEBAIC0yMjY1LDYgKzIy NjUsMjkgQEAgc3RhdGljIHZvaWQgc2tsX3NldHVwX3dtX2xhdGVuY3koc3RydWN0IGRybV9kZXZp Y2UgKmRldikKPiA+ICAJaW50ZWxfcHJpbnRfd21fbGF0ZW5jeShkZXYsICJHZW45IFBsYW5lIiwg ZGV2X3ByaXYtPndtLnNrbF9sYXRlbmN5KTsKPiA+ICB9Cj4gPiAgCj4gPiArc3RhdGljIGJvb2wg aWxrX3ZhbGlkYXRlX3BpcGVfd20oc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiA+ICsJCQkJIHN0 cnVjdCBpbnRlbF9waXBlX3dtICpwaXBlX3dtKQo+ID4gK3sKPiA+ICsJLyogTFAwIHdhdGVybWFy ayBtYXhpbXVtcyBkZXBlbmQgb24gdGhpcyBwaXBlIGFsb25lICovCj4gPiArCWNvbnN0IHN0cnVj dCBpbnRlbF93bV9jb25maWcgY29uZmlnID0gewo+ID4gKwkJLm51bV9waXBlc19hY3RpdmUgPSAx LAo+ID4gKwkJLnNwcml0ZXNfZW5hYmxlZCA9IHBpcGVfd20tPnNwcml0ZXNfZW5hYmxlZCwKPiA+ ICsJCS5zcHJpdGVzX3NjYWxlZCA9IHBpcGVfd20tPnNwcml0ZXNfc2NhbGVkLAo+ID4gKwl9Owo+ ID4gKwlzdHJ1Y3QgaWxrX3dtX21heGltdW1zIG1heDsKPiA+ICsKPiA+ICsJLyogTFAwIHdhdGVy bWFya3MgYWx3YXlzIHVzZSAxLzIgRERCIHBhcnRpdGlvbmluZyAqLwo+ID4gKwlpbGtfY29tcHV0 ZV93bV9tYXhpbXVtcyhkZXYsIDAsICZjb25maWcsIElOVEVMX0REQl9QQVJUXzFfMiwgJm1heCk7 Cj4gPiArCj4gPiArCS8qIEF0IGxlYXN0IExQMCBtdXN0IGJlIHZhbGlkICovCj4gPiArCWlmICgh aWxrX3ZhbGlkYXRlX3dtX2xldmVsKDAsICZtYXgsICZwaXBlX3dtLT53bVswXSkpIHsKPiA+ICsJ CURSTV9ERUJVR19LTVMoIkxQMCB3YXRlcm1hcmsgaW52YWxpZFxuIik7Cj4gPiArCQlyZXR1cm4g ZmFsc2U7Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0dXJuIHRydWU7Cj4gPiArfQo+ID4gKwo+ID4g IC8qIENvbXB1dGUgbmV3IHdhdGVybWFya3MgZm9yIHRoZSBwaXBlICovCj4gPiAgc3RhdGljIGlu dCBpbGtfY29tcHV0ZV9waXBlX3dtKHN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjLAo+ID4g IAkJCSAgICAgICBzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCj4gPiBAQCAtMjI3OSwx MCArMjMwMiw2IEBAIHN0YXRpYyBpbnQgaWxrX2NvbXB1dGVfcGlwZV93bShzdHJ1Y3QgaW50ZWxf Y3J0YyAqaW50ZWxfY3J0YywKPiA+ICAJc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpzcHJzdGF0 ZSA9IE5VTEw7Cj4gPiAgCXN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqY3Vyc3RhdGUgPSBOVUxM Owo+ID4gIAlpbnQgbGV2ZWwsIG1heF9sZXZlbCA9IGlsa193bV9tYXhfbGV2ZWwoZGV2KTsKPiA+ IC0JLyogTFAwIHdhdGVybWFyayBtYXhpbXVtcyBkZXBlbmQgb24gdGhpcyBwaXBlIGFsb25lICov Cj4gPiAtCXN0cnVjdCBpbnRlbF93bV9jb25maWcgY29uZmlnID0gewo+ID4gLQkJLm51bV9waXBl c19hY3RpdmUgPSAxLAo+ID4gLQl9Owo+ID4gIAlzdHJ1Y3QgaWxrX3dtX21heGltdW1zIG1heDsK PiA+ICAKPiA+ICAJY3N0YXRlID0gaW50ZWxfYXRvbWljX2dldF9jcnRjX3N0YXRlKHN0YXRlLCBp bnRlbF9jcnRjKTsKPiA+IEBAIC0yMzA1LDIxICsyMzI0LDE4IEBAIHN0YXRpYyBpbnQgaWxrX2Nv bXB1dGVfcGlwZV93bShzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YywKPiA+ICAJCQljdXJz dGF0ZSA9IHRvX2ludGVsX3BsYW5lX3N0YXRlKHBzKTsKPiA+ICAJfQo+ID4gIAo+ID4gLQljb25m aWcuc3ByaXRlc19lbmFibGVkID0gc3Byc3RhdGUtPnZpc2libGU7Cj4gPiAtCWNvbmZpZy5zcHJp dGVzX3NjYWxlZCA9IHNwcnN0YXRlLT52aXNpYmxlICYmCj4gPiArCXBpcGVfd20tPnBpcGVfZW5h YmxlZCA9IGNzdGF0ZS0+YmFzZS5hY3RpdmU7Cj4gPiArCXBpcGVfd20tPnNwcml0ZXNfZW5hYmxl ZCA9IHNwcnN0YXRlLT52aXNpYmxlOwo+ID4gKwlwaXBlX3dtLT5zcHJpdGVzX3NjYWxlZCA9IHNw cnN0YXRlLT52aXNpYmxlICYmCj4gPiAgCQkoZHJtX3JlY3Rfd2lkdGgoJnNwcnN0YXRlLT5kc3Qp ICE9IGRybV9yZWN0X3dpZHRoKCZzcHJzdGF0ZS0+c3JjKSA+PiAxNiB8fAo+ID4gIAkJZHJtX3Jl Y3RfaGVpZ2h0KCZzcHJzdGF0ZS0+ZHN0KSAhPSBkcm1fcmVjdF9oZWlnaHQoJnNwcnN0YXRlLT5z cmMpID4+IDE2KTsKPiA+ICAKPiA+IC0JcGlwZV93bS0+cGlwZV9lbmFibGVkID0gY3N0YXRlLT5i YXNlLmFjdGl2ZTsKPiA+IC0JcGlwZV93bS0+c3ByaXRlc19lbmFibGVkID0gY29uZmlnLnNwcml0 ZXNfZW5hYmxlZDsKPiA+IC0JcGlwZV93bS0+c3ByaXRlc19zY2FsZWQgPSBjb25maWcuc3ByaXRl c19zY2FsZWQ7Cj4gPiAtCj4gPiAgCS8qIElMSy9TTkI6IExQMisgd2F0ZXJtYXJrcyBvbmx5IHcv byBzcHJpdGVzICovCj4gPiAgCWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA8PSA2ICYmIHNwcnN0 YXRlLT52aXNpYmxlKQo+ID4gIAkJbWF4X2xldmVsID0gMTsKPiA+ICAKPiA+ICAJLyogSUxLL1NO Qi9JVkI6IExQMSsgd2F0ZXJtYXJrcyBvbmx5IHcvbyBzY2FsaW5nICovCj4gPiAtCWlmIChjb25m aWcuc3ByaXRlc19zY2FsZWQpCj4gPiArCWlmIChwaXBlX3dtLT5zcHJpdGVzX3NjYWxlZCkKPiA+ ICAJCW1heF9sZXZlbCA9IDA7Cj4gPiAgCj4gPiAgCWlsa19jb21wdXRlX3dtX2xldmVsKGRldl9w cml2LCBpbnRlbF9jcnRjLCAwLCBjc3RhdGUsCj4gPiBAQCAtMjMyOCwxMiArMjM0NCw4IEBAIHN0 YXRpYyBpbnQgaWxrX2NvbXB1dGVfcGlwZV93bShzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0 YywKPiA+ICAJaWYgKElTX0hBU1dFTEwoZGV2KSB8fCBJU19CUk9BRFdFTEwoZGV2KSkKPiA+ICAJ CXBpcGVfd20tPmxpbmV0aW1lID0gaHN3X2NvbXB1dGVfbGluZXRpbWVfd20oZGV2LCBjc3RhdGUp Owo+ID4gIAo+ID4gLQkvKiBMUDAgd2F0ZXJtYXJrcyBhbHdheXMgdXNlIDEvMiBEREIgcGFydGl0 aW9uaW5nICovCj4gPiAtCWlsa19jb21wdXRlX3dtX21heGltdW1zKGRldiwgMCwgJmNvbmZpZywg SU5URUxfRERCX1BBUlRfMV8yLCAmbWF4KTsKPiA+IC0KPiA+IC0JLyogQXQgbGVhc3QgTFAwIG11 c3QgYmUgdmFsaWQgKi8KPiA+IC0JaWYgKCFpbGtfdmFsaWRhdGVfd21fbGV2ZWwoMCwgJm1heCwg JnBpcGVfd20tPndtWzBdKSkKPiA+IC0JCXJldHVybiAtRUlOVkFMOwo+ID4gKwlpZiAoIWlsa192 YWxpZGF0ZV9waXBlX3dtKGRldiwgcGlwZV93bSkpCj4gPiArCQlyZXR1cm4gZmFsc2U7Cj4gPiAg Cj4gPiAgCWlsa19jb21wdXRlX3dtX3JlZ19tYXhpbXVtcyhkZXYsIDEsICZtYXgpOwo+ID4gIAo+ ID4gQEAgLTIzNTgsNiArMjM3MCw1OSBAQCBzdGF0aWMgaW50IGlsa19jb21wdXRlX3BpcGVfd20o c3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMsCj4gPiAgfQo+ID4gIAo+ID4gIC8qCj4gPiAr ICogQnVpbGQgYSBzZXQgb2YgJ2ludGVybWVkaWF0ZScgd2F0ZXJtYXJrIHZhbHVlcyB0aGF0IHNh dGlzZnkgYm90aCB0aGUgb2xkCj4gPiArICogc3RhdGUgYW5kIHRoZSBuZXcgc3RhdGUuICBUaGVz ZSBjYW4gYmUgcHJvZ3JhbW1lZCB0byB0aGUgaGFyZHdhcmUKPiA+ICsgKiBpbW1lZGlhdGVseS4K PiA+ICsgKi8KPiA+ICtzdGF0aWMgaW50IGlsa19jb21wdXRlX2ludGVybWVkaWF0ZV93bShzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LAo+ID4gKwkJCQkgICAgICAgc3RydWN0IGludGVsX2NydGMgKmlu dGVsX2NydGMsCj4gPiArCQkJCSAgICAgICBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqbmV3c3Rh dGUpCj4gPiArewo+ID4gKwlzdHJ1Y3QgaW50ZWxfcGlwZV93bSAqYSA9ICZuZXdzdGF0ZS0+d20u aW50ZXJtZWRpYXRlOwo+ID4gKwlzdHJ1Y3QgaW50ZWxfcGlwZV93bSAqYiA9ICZpbnRlbF9jcnRj LT53bS5hY3RpdmUuaWxrOwo+ID4gKwlpbnQgbGV2ZWwsIG1heF9sZXZlbCA9IGlsa193bV9tYXhf bGV2ZWwoZGV2KTsKPiA+ICsKPiA+ICsJLyoKPiA+ICsJICogU3RhcnQgd2l0aCB0aGUgZmluYWws IHRhcmdldCB3YXRlcm1hcmtzLCB0aGVuIGNvbWJpbmUgd2l0aCB0aGUKPiA+ICsJICogY3VycmVu dGx5IGFjdGl2ZSB3YXRlcm1hcmtzIHRvIGdldCB2YWx1ZXMgdGhhdCBhcmUgc2FmZSBib3RoIGJl Zm9yZQo+ID4gKwkgKiBhbmQgYWZ0ZXIgdGhlIHZibGFuay4KPiA+ICsJICovCj4gPiArCSphID0g bmV3c3RhdGUtPndtLm9wdGltYWwuaWxrOwo+ID4gKwlhLT5waXBlX2VuYWJsZWQgfD0gYi0+cGlw ZV9lbmFibGVkOwo+ID4gKwlhLT5zcHJpdGVzX2VuYWJsZWQgfD0gYi0+c3ByaXRlc19lbmFibGVk Owo+ID4gKwlhLT5zcHJpdGVzX3NjYWxlZCB8PSBiLT5zcHJpdGVzX3NjYWxlZDsKPiA+ICsKPiA+ ICsJZm9yIChsZXZlbCA9IDA7IGxldmVsIDw9IG1heF9sZXZlbDsgbGV2ZWwrKykgewo+ID4gKwkJ c3RydWN0IGludGVsX3dtX2xldmVsICphX3dtID0gJmEtPndtW2xldmVsXTsKPiA+ICsJCWNvbnN0 IHN0cnVjdCBpbnRlbF93bV9sZXZlbCAqYl93bSA9ICZiLT53bVtsZXZlbF07Cj4gPiArCj4gPiAr CQlhX3dtLT5lbmFibGUgJj0gYl93bS0+ZW5hYmxlOwo+ID4gKwkJYV93bS0+cHJpX3ZhbCA9IG1h eChhX3dtLT5wcmlfdmFsLCBiX3dtLT5wcmlfdmFsKTsKPiA+ICsJCWFfd20tPnNwcl92YWwgPSBt YXgoYV93bS0+c3ByX3ZhbCwgYl93bS0+c3ByX3ZhbCk7Cj4gPiArCQlhX3dtLT5jdXJfdmFsID0g bWF4KGFfd20tPmN1cl92YWwsIGJfd20tPmN1cl92YWwpOwo+ID4gKwkJYV93bS0+ZmJjX3ZhbCA9 IG1heChhX3dtLT5mYmNfdmFsLCBiX3dtLT5mYmNfdmFsKTsKPiA+ICsJfQo+ID4gKwo+ID4gKwkv Kgo+ID4gKwkgKiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXNlIG1lcmdlZCB3YXRlcm1h cmsgdmFsdWVzIGFyZQo+ID4gKwkgKiBhY3R1YWxseSBhIHZhbGlkIGNvbmZpZ3VyYXRpb24gdGhl bXNlbHZlcy4gIElmIHRoZXkncmUgbm90LAo+ID4gKwkgKiB0aGVyZSdzIG5vIHNhZmUgd2F5IHRv IHRyYW5zaXRpb24gZnJvbSB0aGUgb2xkIHN0YXRlIHRvCj4gPiArCSAqIHRoZSBuZXcgc3RhdGUs IHNvIHdlIG5lZWQgdG8gZmFpbCB0aGUgYXRvbWljIHRyYW5zYWN0aW9uLgo+ID4gKwkgKi8KPiA+ ICsJaWYgKCFpbGtfdmFsaWRhdGVfcGlwZV93bShkZXYsIGEpKQo+ID4gKwkJcmV0dXJuIC1FSU5W QUw7Cj4gPiArCj4gPiArCS8qCj4gPiArCSAqIElmIG91ciBpbnRlcm1lZGlhdGUgV00gYXJlIGlk ZW50aWNhbCB0byB0aGUgZmluYWwgV00sIHRoZW4gd2UgY2FuCj4gPiArCSAqIG9taXQgdGhlIHBv c3QtdmJsYW5rIHByb2dyYW1taW5nOyBvbmx5IHVwZGF0ZSBpZiBpdCdzIGRpZmZlcmVudC4KPiA+ ICsJICovCj4gPiArCWlmIChtZW1jbXAoYSwgJm5ld3N0YXRlLT53bS5vcHRpbWFsLmlsaywgc2l6 ZW9mICphKSAhPSAwKQo+ID4gKwkJbmV3c3RhdGUtPndtLm5lZWRfcG9zdHZibF91cGRhdGUgPSBm YWxzZTsKPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gKy8qCj4gPiAgICog TWVyZ2UgdGhlIHdhdGVybWFya3MgZnJvbSBhbGwgYWN0aXZlIHBpcGVzIGZvciBhIHNwZWNpZmlj IGxldmVsLgo+ID4gICAqLwo+ID4gIHN0YXRpYyB2b2lkIGlsa19tZXJnZV93bV9sZXZlbChzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LAo+ID4gQEAgLTIzNjksOSArMjQzNCw3IEBAIHN0YXRpYyB2b2lk IGlsa19tZXJnZV93bV9sZXZlbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ID4gIAlyZXRfd20t PmVuYWJsZSA9IHRydWU7Cj4gPiAgCj4gPiAgCWZvcl9lYWNoX2ludGVsX2NydGMoZGV2LCBpbnRl bF9jcnRjKSB7Cj4gPiAtCQljb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlID0K PiA+IC0JCQl0b19pbnRlbF9jcnRjX3N0YXRlKGludGVsX2NydGMtPmJhc2Uuc3RhdGUpOwo+ID4g LQkJY29uc3Qgc3RydWN0IGludGVsX3BpcGVfd20gKmFjdGl2ZSA9ICZjc3RhdGUtPndtLm9wdGlt YWwuaWxrOwo+ID4gKwkJY29uc3Qgc3RydWN0IGludGVsX3BpcGVfd20gKmFjdGl2ZSA9ICZpbnRl bF9jcnRjLT53bS5hY3RpdmUuaWxrOwo+ID4gIAkJY29uc3Qgc3RydWN0IGludGVsX3dtX2xldmVs ICp3bSA9ICZhY3RpdmUtPndtW2xldmVsXTsKPiA+ICAKPiA+ICAJCWlmICghYWN0aXZlLT5waXBl X2VuYWJsZWQpCj4gPiBAQCAtMjUxOSwxNSArMjU4MiwxMyBAQCBzdGF0aWMgdm9pZCBpbGtfY29t cHV0ZV93bV9yZXN1bHRzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gPiAgCj4gPiAgCS8qIExQ MCByZWdpc3RlciB2YWx1ZXMgKi8KPiA+ICAJZm9yX2VhY2hfaW50ZWxfY3J0YyhkZXYsIGludGVs X2NydGMpIHsKPiA+IC0JCWNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjc3RhdGUgPQo+ ID4gLQkJCXRvX2ludGVsX2NydGNfc3RhdGUoaW50ZWxfY3J0Yy0+YmFzZS5zdGF0ZSk7Cj4gPiAg CQllbnVtIHBpcGUgcGlwZSA9IGludGVsX2NydGMtPnBpcGU7Cj4gPiAtCQljb25zdCBzdHJ1Y3Qg aW50ZWxfd21fbGV2ZWwgKnIgPSAmY3N0YXRlLT53bS5vcHRpbWFsLmlsay53bVswXTsKPiA+ICsJ CWNvbnN0IHN0cnVjdCBpbnRlbF93bV9sZXZlbCAqciA9ICZpbnRlbF9jcnRjLT53bS5hY3RpdmUu aWxrLndtWzBdOwo+ID4gIAo+ID4gIAkJaWYgKFdBUk5fT04oIXItPmVuYWJsZSkpCj4gPiAgCQkJ Y29udGludWU7Cj4gPiAgCj4gPiAtCQlyZXN1bHRzLT53bV9saW5ldGltZVtwaXBlXSA9IGNzdGF0 ZS0+d20ub3B0aW1hbC5pbGsubGluZXRpbWU7Cj4gPiArCQlyZXN1bHRzLT53bV9saW5ldGltZVtw aXBlXSA9IGludGVsX2NydGMtPndtLmFjdGl2ZS5pbGsubGluZXRpbWU7Cj4gPiAgCj4gPiAgCQly ZXN1bHRzLT53bV9waXBlW3BpcGVdID0KPiA+ICAJCQkoci0+cHJpX3ZhbCA8PCBXTTBfUElQRV9Q TEFORV9TSElGVCkgfAo+ID4gQEAgLTI3MzQsNyArMjc5NSw3IEBAIHN0YXRpYyB2b2lkIGlsa193 cml0ZV93bV92YWx1ZXMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ID4gIAlk ZXZfcHJpdi0+d20uaHcgPSAqcmVzdWx0czsKPiA+ICB9Cj4gPiAgCj4gPiAtc3RhdGljIGJvb2wg aWxrX2Rpc2FibGVfbHBfd20oc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiA+ICtib29sIGlsa19k aXNhYmxlX2xwX3dtKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gPiAgewo+ID4gIAlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+ID4gIAo+ID4g QEAgLTM2MTAsMTkgKzM2NzEsMTUgQEAgc3RhdGljIHZvaWQgc2tsX3VwZGF0ZV93bShzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMpCj4gPiAgCWRldl9wcml2LT53bS5za2xfaHcgPSAqcmVzdWx0czsKPiA+ ICB9Cj4gPiAgCj4gPiAtc3RhdGljIHZvaWQgaWxrX3Byb2dyYW1fd2F0ZXJtYXJrcyhzdHJ1Y3Qg aW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlKQo+ID4gK3N0YXRpYyB2b2lkIGlsa19wcm9ncmFtX3dh dGVybWFya3Moc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ID4gIHsKPiA+IC0J c3RydWN0IGRybV9jcnRjICpjcnRjID0gY3N0YXRlLT5iYXNlLmNydGM7Cj4gPiAtCXN0cnVjdCBk cm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7Cj4gPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKPiA+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9 IGRldl9wcml2LT5kZXY7Cj4gPiAgCXN0cnVjdCBpbnRlbF9waXBlX3dtIGxwX3dtXzFfMiA9IHt9 LCBscF93bV81XzYgPSB7fSwgKmJlc3RfbHBfd207Cj4gPiAgCXN0cnVjdCBpbGtfd21fbWF4aW11 bXMgbWF4Owo+ID4gIAlzdHJ1Y3QgaW50ZWxfd21fY29uZmlnICpjb25maWcgPSAmZGV2X3ByaXYt PndtLmNvbmZpZzsKPiA+ICAJc3RydWN0IGlsa193bV92YWx1ZXMgcmVzdWx0cyA9IHt9Owo+ID4g IAllbnVtIGludGVsX2RkYl9wYXJ0aXRpb25pbmcgcGFydGl0aW9uaW5nOwo+ID4gIAo+ID4gLQl0 b19pbnRlbF9jcnRjKGNydGMpLT53bS5hY3RpdmUuaWxrID0gY3N0YXRlLT53bS5vcHRpbWFsLmls azsKPiA+IC0KPiAKPiA6KSBTbyBldmVuIHlvdSB5b3Vyc2VsZiBOQUtlZCB0aGUgcHJldmlvdXMg cGF0Y2guCj4gCj4gPiAgCWlsa19jb21wdXRlX3dtX21heGltdW1zKGRldiwgMSwgY29uZmlnLCBJ TlRFTF9EREJfUEFSVF8xXzIsICZtYXgpOwo+ID4gIAlpbGtfd21fbWVyZ2UoZGV2LCBjb25maWcs ICZtYXgsICZscF93bV8xXzIpOwo+ID4gIAo+ID4gQEAgLTM2NDUsMjYgKzM3MDIsMjkgQEAgc3Rh dGljIHZvaWQgaWxrX3Byb2dyYW1fd2F0ZXJtYXJrcyhzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAq Y3N0YXRlKQo+ID4gIAlpbGtfd3JpdGVfd21fdmFsdWVzKGRldl9wcml2LCAmcmVzdWx0cyk7Cj4g PiAgfQo+ID4gIAo+ID4gLXN0YXRpYyB2b2lkIGlsa191cGRhdGVfd20oc3RydWN0IGRybV9jcnRj ICpjcnRjKQo+ID4gK3N0YXRpYyB2b2lkIGlsa19pbml0aWFsX3dhdGVybWFya3Moc3RydWN0IGlu dGVsX2NydGNfc3RhdGUgKmNzdGF0ZSkKPiA+ICB7Cj4gPiAtCXN0cnVjdCBpbnRlbF9jcnRjICpp bnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKPiA+IC0Jc3RydWN0IGludGVsX2NydGNf c3RhdGUgKmNzdGF0ZSA9IHRvX2ludGVsX2NydGNfc3RhdGUoY3J0Yy0+c3RhdGUpOwo+ID4gKwlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNzdGF0ZS0+YmFzZS5j cnRjLT5kZXYpOwo+ID4gKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVs X2NydGMoY3N0YXRlLT5iYXNlLmNydGMpOwo+ID4gIAo+ID4gLQlXQVJOX09OKGNzdGF0ZS0+YmFz ZS5hY3RpdmUgIT0gaW50ZWxfY3J0Yy0+YWN0aXZlKTsKPiA+ICsJbXV0ZXhfbG9jaygmaW50ZWxf Y3J0Yy0+d20ud21fbXV0ZXgpOwo+ID4gKwlpbnRlbF9jcnRjLT53bS5hY3RpdmUuaWxrID0gY3N0 YXRlLT53bS5pbnRlcm1lZGlhdGU7Cj4gPiArCWlsa19wcm9ncmFtX3dhdGVybWFya3MoZGV2X3By aXYpOwo+ID4gKwltdXRleF91bmxvY2soJmludGVsX2NydGMtPndtLndtX211dGV4KTsKPiA+ICt9 Cj4gPiAgCj4gPiAtCS8qCj4gPiAtCSAqIElWQiB3b3JrYXJvdW5kOiBtdXN0IGRpc2FibGUgbG93 IHBvd2VyIHdhdGVybWFya3MgZm9yIGF0IGxlYXN0Cj4gPiAtCSAqIG9uZSBmcmFtZSBiZWZvcmUg ZW5hYmxpbmcgc2NhbGluZy4gIExQIHdhdGVybWFya3MgY2FuIGJlIHJlLWVuYWJsZWQKPiA+IC0J ICogd2hlbiBzY2FsaW5nIGlzIGRpc2FibGVkLgo+ID4gLQkgKgo+ID4gLQkgKiBXYUN4U1JEaXNh YmxlZEZvclNwcml0ZVNjYWxpbmc6aXZiCj4gPiAtCSAqLwo+ID4gLQlpZiAoY3N0YXRlLT5kaXNh YmxlX2xwX3dtKSB7Cj4gPiAtCQlpbGtfZGlzYWJsZV9scF93bShjcnRjLT5kZXYpOwo+ID4gLQkJ aW50ZWxfd2FpdF9mb3JfdmJsYW5rKGNydGMtPmRldiwgaW50ZWxfY3J0Yy0+cGlwZSk7Cj4gPiAt CX0KPiA+ICtzdGF0aWMgdm9pZCBpbGtfb3B0aW1pemVfd2F0ZXJtYXJrcyhzdHJ1Y3QgaW50ZWxf Y3J0Y19zdGF0ZSAqY3N0YXRlKQo+IAo+IEkgZG9uJ3QgcmVhbGx5IGxpa2UgdGhhdCBuYW1lLiBT aG91bGQganVzdCBoYXZlIGZvb19wcmUgYW5kIGZvb19wb3N0IG9yCj4gc29tZXRoaW5nIGFsb25n IHRob3NlIGxpbmVzIElNTy4KCk15IHRoaW5raW5nIHdhcyBhY3R1YWxseSB0aGUgb3Bwb3NpdGUu Li50aGluZ3MgbGlrZSBmb29fcHJlKCkgYW5kCmZvb19wb3N0KCkgYXJlIGEgYml0IG9wYXF1ZS9t ZWFuaW5nbGVzcyB0byBhbnlvbmUgd2hvIGRvZXNuJ3Qga25vdyB0aGUKaW50aW1hdGUgZGV0YWls cyBvZiBhIHNwZWNpZmljIHBsYXRmb3JtJ3Mgd2F0ZXJtYXJrIGhhbmRsaW5nLCB3aGVyZWFzCiJp bml0aWFsX3dhdGVybWFya3MiIGFuZCAib3B0aW1pemVfd2F0ZXJtYXJrcyIgZ2l2ZSBhIGxpdHRs ZSBiaXQgbW9yZQppbmRpY2F0aW9uIG9mIHdoeSB3ZSdyZSBib3RoaW5nIHRvIHByb2dyYW0gc3R1 ZmYgdHdpY2UgYW5kIGhvdyB0aGV5CmRpZmZlci4gIEkgZG9uJ3QgZmVlbCBzdXBlciBzdHJvbmds eSBhYm91dCBpdCB0aG91Z2gsIHNvIEkgY2FuIGNoYW5nZQp0aGUgbmFtZXMgdG8gc29tZXRoaW5n IGVsc2UgaWYgeW91IGZlZWwgaXQgbWFrZXMgbW9yZSBzZW5zZS4KCkkgZ3Vlc3MgdWx0aW1hdGVs eSB0aGUgaW1wb3J0YW50IHRoaW5nIGlzIHRvIHNwbGl0IHRoaXMgYWxsIG91dCBpbnRvIGl0cwpv d24gZmlsZXMgYW5kIHdyaXRlIHNvbWUgZGV0YWlsZWQga2VybmVsZG9jcyBvbiBpdCBhbGw7IHRo YXQncyBzdXBwb3NlZAp0byBiZSBteSBuZXh0IHRhc2sgYW55d2F5LgoKCk1hdHQKCj4gCj4gPiAr ewo+ID4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNzdGF0 ZS0+YmFzZS5jcnRjLT5kZXYpOwo+ID4gKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9 IHRvX2ludGVsX2NydGMoY3N0YXRlLT5iYXNlLmNydGMpOwo+ID4gIAo+ID4gLQlpbGtfcHJvZ3Jh bV93YXRlcm1hcmtzKGNzdGF0ZSk7Cj4gPiArCW11dGV4X2xvY2soJmludGVsX2NydGMtPndtLndt X211dGV4KTsKPiA+ICsJaWYgKGNzdGF0ZS0+d20ubmVlZF9wb3N0dmJsX3VwZGF0ZSkgewo+ID4g KwkJaW50ZWxfY3J0Yy0+d20uYWN0aXZlLmlsayA9IGNzdGF0ZS0+d20ub3B0aW1hbC5pbGs7Cj4g PiArCQlpbGtfcHJvZ3JhbV93YXRlcm1hcmtzKGRldl9wcml2KTsKPiA+ICsJCWNzdGF0ZS0+d20u bmVlZF9wb3N0dmJsX3VwZGF0ZSA9IGZhbHNlOwo+ID4gKwl9Cj4gPiArCW11dGV4X3VubG9jaygm aW50ZWxfY3J0Yy0+d20ud21fbXV0ZXgpOwo+ID4gIH0KPiA+ICAKPiA+ICBzdGF0aWMgdm9pZCBz a2xfcGlwZV93bV9hY3RpdmVfc3RhdGUodWludDMyX3QgdmFsLAo+ID4gQEAgLTY5NzAsOSArNzAz MCwxMSBAQCB2b2lkIGludGVsX2luaXRfcG0oc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiA+ICAJ CSAgICAgZGV2X3ByaXYtPndtLnNwcl9sYXRlbmN5WzFdICYmIGRldl9wcml2LT53bS5jdXJfbGF0 ZW5jeVsxXSkgfHwKPiA+ICAJCSAgICAoIUlTX0dFTjUoZGV2KSAmJiBkZXZfcHJpdi0+d20ucHJp X2xhdGVuY3lbMF0gJiYKPiA+ICAJCSAgICAgZGV2X3ByaXYtPndtLnNwcl9sYXRlbmN5WzBdICYm IGRldl9wcml2LT53bS5jdXJfbGF0ZW5jeVswXSkpIHsKPiA+IC0JCQlkZXZfcHJpdi0+ZGlzcGxh eS51cGRhdGVfd20gPSBpbGtfdXBkYXRlX3dtOwo+ID4gIAkJCWRldl9wcml2LT5kaXNwbGF5LmNv bXB1dGVfcGlwZV93bSA9IGlsa19jb21wdXRlX3BpcGVfd207Cj4gPiAtCQkJZGV2X3ByaXYtPmRp c3BsYXkucHJvZ3JhbV93YXRlcm1hcmtzID0gaWxrX3Byb2dyYW1fd2F0ZXJtYXJrczsKPiA+ICsJ CQlkZXZfcHJpdi0+ZGlzcGxheS5jb21wdXRlX2ludGVybWVkaWF0ZV93bSA9Cj4gPiArCQkJCWls a19jb21wdXRlX2ludGVybWVkaWF0ZV93bTsKPiA+ICsJCQlkZXZfcHJpdi0+ZGlzcGxheS5pbml0 aWFsX3dhdGVybWFya3MgPSBpbGtfaW5pdGlhbF93YXRlcm1hcmtzOwo+ID4gKwkJCWRldl9wcml2 LT5kaXNwbGF5Lm9wdGltaXplX3dhdGVybWFya3MgPSBpbGtfb3B0aW1pemVfd2F0ZXJtYXJrczsK PiA+ICAJCX0gZWxzZSB7Cj4gPiAgCQkJRFJNX0RFQlVHX0tNUygiRmFpbGVkIHRvIHJlYWQgZGlz cGxheSBwbGFuZSBsYXRlbmN5LiAiCj4gPiAgCQkJCSAgICAgICJEaXNhYmxlIEN4U1JcbiIpOwo+ ID4gLS0gCj4gPiAyLjEuNAo+ID4gCj4gPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwo+ID4gSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdAo+ID4gSW50ZWwtZ2Z4 QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+ID4gaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo+IAo+IC0tIAo+IFZpbGxlIFN5cmrDpGzDpAo+IElu dGVsIE9UQwoKLS0gCk1hdHQgUm9wZXIKR3JhcGhpY3MgU29mdHdhcmUgRW5naW5lZXIKSW9URyBQ bGF0Zm9ybSBFbmFibGluZyAmIERldmVsb3BtZW50CkludGVsIENvcnBvcmF0aW9uCig5MTYpIDM1 Ni0yNzk1Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCklu dGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRw Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==